Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 39 additions & 18 deletions sync_ldap_groups_to_svn_authz.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#!/usr/bin/env python
#!/usr/bin/env python3
#
# -*-python-*-
#
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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
Expand All @@ -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:
Expand All @@ -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()
Expand All @@ -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
Expand All @@ -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" \
Expand All @@ -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)))
Expand Down Expand Up @@ -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

Expand All @@ -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]
Expand All @@ -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()

Expand Down Expand Up @@ -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")):
Expand Down Expand Up @@ -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)

Expand All @@ -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)

Expand All @@ -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)

Expand All @@ -713,4 +734,4 @@ def main():
# main()

if __name__ == "__main__":
main()
main()