Changeset 5543d51 for asadb/util/sync_moira_authz.py
- Timestamp:
- Dec 19, 2011, 8:30:04 PM (14 years ago)
- Branches:
- master, space-access, stable, stage, test-hooks
- Children:
- 8d36a62, 9af5b25
- Parents:
- b90e90b
- git-author:
- Alex Dehnert <adehnert@…> (12/18/11 01:00:30)
- git-committer:
- Alex Dehnert <adehnert@…> (12/19/11 20:30:04)
- File:
-
- 1 edited
-
asadb/util/sync_moira_authz.py (modified) (3 diffs, 1 prop)
Legend:
- Unmodified
- Added
- Removed
-
asadb/util/sync_moira_authz.py
- Property mode changed from 100644 to 100755
r776830d r5543d51 1 1 #!/usr/bin/python 2 2 3 import afs.pts 3 4 import ldap 4 5 import ldap.dn … … 7 8 import sys 8 9 9 class LDAPConnector(object): 10 if __name__ == '__main__': 11 cur_file = os.path.abspath(__file__) 12 django_dir = os.path.abspath(os.path.join(os.path.dirname(cur_file), '..')) 13 sys.path.append(django_dir) 14 os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' 15 16 import django.contrib.auth.models 17 18 import mit 19 20 class DjangoConnector(object): 10 21 def __init__(self, ): 22 self.dj_groups = django.contrib.auth.models.Group.objects 23 24 def sync_members(self, sys_name, dj_name, ): 25 kept = [] 26 added = [] 27 nonexist = [] 28 created = [] 29 removed = [] 30 sys_members = self.get_members(sys_name) 31 dj_group = self.dj_groups.get(name=dj_name) 32 dj_members = dj_group.user_set.all() 33 dj_usernames = set([m.username for m in dj_members]) 34 for username in sys_members: 35 if username in dj_usernames: 36 kept.append(username) 37 else: 38 # Need to add to the Django group 39 try: 40 user, is_new = mit.get_or_create_mit_user(username, ) 41 if is_new: created.append(username) 42 user.groups.add(dj_group) 43 added.append(username) 44 except ValueError: 45 nonexist.append(username) 46 for user in dj_members: 47 username = user.username 48 if username in sys_members: 49 assert username in kept 50 else: 51 user.groups.remove(dj_group) 52 removed.append(username) 53 return { 54 'change' : len(added) + len(removed), 55 'keep' : kept, 56 'add' : added, 57 'create' : created, 58 'nonexist' : nonexist, 59 'remove': removed, 60 } 61 62 def sync_many(con, what, force_print=False, ): 63 changed = False 64 results = {} 65 for sys_name, dj_group in what: 66 assert dj_group not in results 67 results[dj_group] = con_afs.sync_members(sys_name, dj_group) 68 if results[dj_group]['change']: changed = True 69 if changed or force_print: 70 for group in results: 71 print "" 72 print "Results for %s:" % (group, ) 73 for key, value in results[group].items(): 74 print "%7s:\t%s" % (key, value, ) 75 76 77 class LDAPConnector(DjangoConnector): 78 name = "LDAP" 79 80 def __init__(self, *args, **kwargs): 81 super(LDAPConnector, self).__init__(*args, **kwargs) 11 82 self.con = ldap.initialize('ldaps://ldap-too.mit.edu') 12 83 self.con.simple_bind_s("", "") 13 84 14 def get_members _ldap(self, groupname):85 def get_members(self, groupname): 15 86 base_dn = 'ou=lists,ou=moira,dc=mit,dc=edu' 16 87 groupfilter = ldap.filter.filter_format('(&(objectClass=group)(displayName=%s))', [groupname]) … … 35 106 else: 36 107 assert False, "Don't know what %s is" % (c_type, ) 37 return ret 108 return [r[1] for r in ret if r[0] == 'user'] 109 110 class AFSConnector(DjangoConnector): 111 name = "AFS" 112 113 def __init__(self, *args, **kwargs): 114 super(AFSConnector, self).__init__(*args, **kwargs) 115 # TODO: possibly kinit and aklog 116 self.pts = afs.pts.PTS(sec=afs.pts.PTS_ENCRYPT, cell='athena.mit.edu', ) 117 def get_members(self, groupname, ): 118 afs_members = self.pts.getEntry("system:%s" % (groupname, )).members 119 members = [ m.name for m in afs_members ] 120 return members 121 122 sync_pairs = [ 123 ('asa-internal', 'asa-ebm', ), 124 ] 125 126 def test_memberships(cons): 127 for sys_name, dj_group in sync_pairs: 128 for con in cons: 129 members = con.get_members(sys_name) 130 print "%s\t%s\t%s" % (con.name, sys_name, sorted(members)) 38 131 39 132 if __name__ == '__main__': 40 con = LDAPConnector()41 for listname in sys.argv[1:]:42 members = con.get_members_ldap(listname)43 print "%s\t%s" % (listname, members)133 con_afs = AFSConnector() 134 #con_ldap = LDAPConnector() 135 #test_memberships([con_afs, con_ldap, ]) 136 con_afs.sync_many(sync_pairs)
Note: See TracChangeset
for help on using the changeset viewer.