Esempio n. 1
0
def load_metadata_worker(db, task_queue):

    for task in iter(task_queue.get, 'STOP'):
        conn = sqlite3.connect(db, timeout=60)

        cur = conn.cursor()
        fullpath = task[0]
        fileext = task[1]
        nfileext = task[2]
        filetype = task[3]
        nfiletype = task[4]
        mode = task[5]
        uid = task[6]
        gid = task[7]

        req_perm = AuditdReqPerm(None, cur)
        rsrc = AuditdResource(None, cur, path=fullpath, rid=None)
        if rsrc.rid != None:
            tyid = AuditdType( None, cur,
                    fullpath if 'directory' in filetype.lower() \
                    else os.path.dirname(fullpath),
                    filetype ).get_tyid()
            rsrc.update(tyid, fileext, uid, gid, mode)
            req_perm.compute(rsrc)
            #rsrc.compute_actors( shadow=False )
        cur.close()

        conn.close()
Esempio n. 2
0
def load_metadata(conn, configs):
    mdfile = configs['metadatafile']
    print 'Using metadata from \"%s\"...' % mdfile

    print 'Begin loading metadata for %s...' % configs['hostname']
    print '=' * 80
    tic = time.time()

    create_index_for_principal(conn)
    create_index_for_resource(conn)
    create_index_for_operation(conn)

    with open(mdfile, 'r+b') as f:
        map = mmap.mmap(f.fileno(), 0)
        line = map.readline()
        while line:
            m = line.split('|')
            fullpath = m[0]
            fileext = m[1]
            nfileext = int(m[2])  # unused
            filetype = m[3]
            nfiletype = int(m[4])  # unused
            mode = ctypes.c_int32(int(m[5])).value
            uid = ctypes.c_int32(int(m[6])).value
            gid = ctypes.c_int32(int(m[7])).value

            # Skip entries for which we don't have info.
            if mode == -1 or uid == -1 or mode == -1:
                line = map.readline()
                continue

            cur = conn.cursor()
            cur.execute('BEGIN TRANSACTION')
            #cur.close()

            req_perm = AuditdReqPerm(None, cur)
            rsrc = AuditdResource(None, cur, path=fullpath, rid=None)
            if rsrc.rid != None:
                tyid = AuditdType( None, cur,
                        fullpath if 'directory' in filetype.lower() \
                        else os.path.dirname(fullpath),
                        filetype ).get_tyid()
                rsrc.update(tyid, fileext, uid, gid, mode)
                req_perm.compute(rsrc)
                #rsrc.compute_actors( shadow=False )

            #cur = conn.cursor()
            #cur.execute('END TRANSACTION')
            cur.close()
            conn.commit()

            line = map.readline()
        map.close()

    toc = time.time()
    print '=' * 80
    elapsed = toc - tic
    print 'Done loading metadata for %s. Took %f seconds.' \
      % (configs['hostname'], elapsed)
Esempio n. 3
0
def get_valid_rsrcs(conn, cur):
    rsrcs = []
    sql = 'SELECT `rid`, `path`, `uid`, `gid`, `mode` FROM `Resource`'
    if conn != None:
        cur = conn.cursor()
    cur.execute(sql)
    row = cur.fetchone()
    while row:
        rid = row[0]
        path = row[1]
        uid = row[2]
        gid = row[3]
        mode = row[4]
        if rid != None and path != None \
         and uid != None and gid != None and mode != None:
            rsrc = AuditdResource(conn, cur, rid, path, uid, gid, mode)
            rsrcs.append(rsrc)
        row = cur.fetchone()
    if conn != None:
        cur.close()
    return rsrcs