示例#1
0
def sync_filegroup(fgname, group, course, act):
    posix_group = PosixGroup.PosixGroup(db)
    # Make the group last a year or so.  To avoid changing the database
    # every night, we only change expire date if it has less than three
    # month to live.
    expdate = DateTime.TimestampFromTicks(
        int(time.time() + 12 * 31 * 24 * 3600))
    refreshdate = DateTime.TimestampFromTicks(
        int(time.time() + 3 * 31 * 24 * 3600))
    try:
        fgroup = get_group(fgname)
    except Errors.NotFoundError:
        logger.info("Created new file group %s", fgname)
        posix_group.populate(group_creator,
                             co.group_visibility_all,
                             fgname,
                             "Gruppelærere %s gruppe %s" %
                             (course.upper(), act),
                             expire_date=expdate)
        posix_group.write_db()
    else:
        posix_group.find(fgroup.entity_id)
        # make sure the group is alive
        if posix_group.expire_date and posix_group.expire_date < refreshdate:
            logger.info("Extending life of %s from %s to %s", fgname,
                        posix_group.expire_date, refreshdate)
            posix_group.expire_date = expdate
            posix_group.write_db()
    uptodate = False
    for row in posix_group.search_members(group_id=posix_group.entity_id,
                                          member_filter_expired=False):
        member_type = int(row["member_type"])
        member_id = int(row["member_id"])
        if member_type != co.entity_group:
            logger.info("Removing member %d from %s", member_id, fgname)
            posix_group.remove_member(member_id)
        elif member_id != group.entity_id:
            logger.info("Removing group member %d from %s", member_id, fgname)
            posix_group.remove_member(member_id)
        else:
            uptodate = True
    if not uptodate:
        logger.info("Adding %s to %s", group.group_name, fgname)
        if not posix_group.has_member(group.entity_id):
            posix_group.add_member(group.entity_id)

    # finally check the spread.  we leave any additionally added spreads
    # alone.
    uptodate = False
    for r in posix_group.get_spread():
        if int(r['spread']) == int(co.spread_ifi_nis_fg):
            uptodate = True
            break
    if not uptodate:
        logger.info("Adding NIS_fg@ifi to %s", fgname)
        posix_group.add_spread(co.spread_ifi_nis_fg)
    return posix_group
示例#2
0
def UNIX2DateTime(t):
    return DateTime.TimestampFromTicks(t)