diff --git a/sync_ldap_groups_to_svn_authz.py b/sync_ldap_groups_to_svn_authz.py index 22bc605..f9e0abf 100755 --- a/sync_ldap_groups_to_svn_authz.py +++ b/sync_ldap_groups_to_svn_authz.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # -*-python-*- # @@ -28,7 +28,7 @@ # THE SOFTWARE. ################################################################################ -import ConfigParser, datetime, getpass, os, re, sys, tempfile, shutil +import configparser, datetime, getpass, os, re, sys, tempfile, shutil from optparse import OptionParser try: @@ -162,7 +162,7 @@ def get_groups(ldapobject): for i in range(len(result_set)): for entry in result_set[i]: groups.append(entry) - except ldap.NO_SUCH_OBJECT, e: + except ldap.NO_SUCH_OBJECT as e: if not silent: sys.stderr.write("Couldn't find a group with DN %s.\n" % group_dn) raise e @@ -180,6 +180,12 @@ def get_groups(ldapobject): def get_ldap_search_resultset(base_dn, group_query, ldapobject, scope=ldap.SCOPE_SUBTREE): """This function will return a query result set.""" result_set = [] + if type(base_dn) == str: +# print(type(base_dn)) + pass + else: + base_dn = base_dn.decode("utf-8") +# print(base_dn) result_id = ldapobject.search(base_dn, scope, group_query) while 1: @@ -188,7 +194,6 @@ def get_ldap_search_resultset(base_dn, group_query, ldapobject, scope=ldap.SCOPE result_set.append(result_data) elif (result_type == ldap.RES_SEARCH_RESULT): break - return result_set # get_ldap_search_resultset() @@ -203,7 +208,8 @@ def get_members_from_group(group, ldapobject): sys.stdout.write("+") else: sys.stderr.write("+") - if group.has_key(group_member_attribute): + #if group.has_key(group_member_attribute): + if group_member_attribute in group: group_members = group[group_member_attribute] # We need to check if the member is a group and handle specially @@ -215,13 +221,19 @@ def get_members_from_group(group, ldapobject): # The member is a user attrs = user[0][0][1] - if (attrs.has_key(userid_attribute)): + #if (attrs.has_key(userid_attribute)): + if userid_attribute in attrs: if verbose: if is_outfile_specified: sys.stdout.write(".") else: sys.stderr.write(".") - members.append(str.lower(attrs[userid_attribute][0])) + if type(attrs[userid_attribute][0]) == str: + lowerattr = attrs[userid_attribute][0] + else: + lowerattr = attrs[userid_attribute][0].decode("utf-8") + #members.append(str.lower(str(attrs[userid_attribute][0]))) + members.append(str.lower(lowerattr)) else: if not silent: sys.stderr.write("[WARNING]: %s does not have the %s attribute...\n" \ @@ -247,8 +259,10 @@ def get_members_from_group(group, ldapobject): if not silent: sys.stderr.write("[WARNING]: %s is a member of %s but is neither a group " \ "nor a user.\n" % (member, group['cn'][0])) - except ldap.LDAPError, error_message: + except ldap.LDAPError as error_message: if not silent: +# print(error_message) + pass sys.stderr.write("[WARNING]: %s object was not found...\n" % member) # uniq values members = sorted(list(set(members))) @@ -288,7 +302,7 @@ def create_group_model(groups, ldapobject): def get_dict_key_from_value(dict, value): """Returns the key of the dictionary entry with the matching value.""" - for k, v in dict.iteritems(): + for k, v in dict.items(): if (v == value): return k @@ -303,11 +317,12 @@ def create_group_map(groups): if groups: for group in groups: cn = simplify_name(group[1]['cn'][0]) - - if (not groupmap.has_key(cn)): + if not cn in groupmap: + #if (not groupmap.has_key(cn)): groupmap[cn] = group[0] else: - if (not dups.has_key(cn)): + #if (not dups.has_key(cn)): + if not cn in dups: dups[cn] = 1 else: index = dups[cn] @@ -322,7 +337,13 @@ def create_group_map(groups): def simplify_name(name): """Creates an authz simple group name.""" - return name if (keep_names) else re.sub("\W", "", name) +# name = name.decode("utf-8") +# print (name) + if type(name) == str: + pass + else: + name = name.decode("utf-8") + return name if (keep_names) else re.sub(r"\W", "",name) # simplify_name() @@ -373,7 +394,7 @@ def print_group_model(groups, memberships): tmpfile.close() if (os.path.exists(tmp_authz_path)): - cp = ConfigParser.ConfigParser() + cp = configparser.ConfigParser() cp.read(tmp_authz_path) if (not cp.has_section("groups")): @@ -684,7 +705,7 @@ def main(): try: ldapobject = bind() - except ldap.LDAPError, error_message: + except ldap.LDAPError as error_message: sys.stderr.write("Could not connect to %s. Error: %s \n" % (url, error_message)) sys.exit(1) @@ -693,7 +714,7 @@ def main(): groups = get_groups(ldapobject) else: groups = search_for_groups(ldapobject) - except ldap.LDAPError, error_message: + except ldap.LDAPError as error_message: sys.stderr.write("Error performing search: %s \n" % error_message) sys.exit(1) @@ -704,7 +725,7 @@ def main(): try: memberships = create_group_model(groups, ldapobject)[1] - except ldap.LDAPError, error_message: + except ldap.LDAPError as error_message: sys.stderr.write("Error creating group model: %s\n" % error_message) sys.exit(1) @@ -713,4 +734,4 @@ def main(): # main() if __name__ == "__main__": - main() \ No newline at end of file + main()