Skip to content

Instantly share code, notes, and snippets.

@msghens
Created June 14, 2017 16:26
Show Gist options
  • Select an option

  • Save msghens/80d339d7d88b77378566e4c96dbb2113 to your computer and use it in GitHub Desktop.

Select an option

Save msghens/80d339d7d88b77378566e4c96dbb2113 to your computer and use it in GitHub Desktop.
Snippet for getting group members in AD using python for large memberships
import ldap
class ADconnection(object):
def __enter__(self):
#LDAP Connection
try:
# Fix MS Issues
ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
ldap.set_option(ldap.OPT_REFERRALS,0)
self.ldap_connection = ldap.initialize(ADurl)
self.ldap_connection.simple_bind_s(adusername, adpassword)
except ldap.LDAPError as e:
sys.stderr.write('Error connecting to LDAP server: ' + str(e) + '\n')
# Needs to fail gracefully such as just dump to bit bucket
#sys.exit(1)
logger.info('Error connecting to LDAP server')
raise RuntimeError('Error connecting to LDAP server')
logger.debug("Connected to AD")
return self.ldap_connection
def __init__(self):
return None
def __exit__(self, type, value, traceback):
self.close()
def close(self):
logger.debug("Disconnecting from AD")
self.ldap_connection.unbind_s()
def listGroupMember(self,cn='CN=Staff'):
#https://gallery.technet.microsoft.com/scriptcenter/List-Members-of-Large-Group-0eea0132
rangestep = 999
lowrange = 0
highrange = lowrange + rangestep
searchfilter = ('(%s)' % cn)
lastrecord = False
members = []
while True:
ad = ADconnection()
with ad as ldapconn:
searchattribute = []
if lastrecord:
searchattribute.append("member;range={lowrange}-*".format(lowrange=lowrange))
else:
searchattribute.append("member;range={lowrange}-{highrange}".format(lowrange=lowrange,highrange=highrange))
try:
grp_result = ldapconn.search_s(BaseDN,ldap.SCOPE_ONELEVEL,searchfilter,searchattribute)
except:
break
for key,value in grp_result[0][1].iteritems():
if key.startswith('member'):
memberkey = key
break
for i in grp_result[0][1][memberkey]:
members.append(i)
lowrange = highrange + 1
highrange = lowrange + rangestep
templen = len(grp_result[0][1][memberkey])
tempkey = memberkey
print(len(members))
return(members)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment