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
def UNIX2DateTime(t): return DateTime.TimestampFromTicks(t)