added listing users by mail address

This commit is contained in:
2013-08-30 11:34:12 +02:00
parent 597478879e
commit 0ebee76384
3 changed files with 51 additions and 9 deletions

View File

@@ -145,7 +145,12 @@ parser.add_option('-g',
parser.add_option('-u',
action = 'store',
dest = 'userfilter',
help = 'list all matching ldap users that have defined unix mappings (always implies -n)'
help = 'list all ldap users matching the filter expression'
)
parser.add_option('-m', '--mail',
action = 'store',
dest = 'mailfilter',
help = 'list all ldap users based on the mail address filter expression'
)
parser.add_option('--dn',
action = 'store_true',
@@ -220,6 +225,7 @@ if options.flag_debug:
flag_verbose = options.flag_verbose
userfilter = options.userfilter
mailfilter = options.mailfilter
flag_mssfu = options.flag_mssfu
flag_showdn = options.flag_showdn
@@ -263,6 +269,8 @@ if options.flag_add:
flag_needprivileges = True
if userfilter:
mode = 'userlist'
if mailfilter:
mode = 'maillist'
if options.user_to_group:
mode = "user_to_group"
user_to_group = options.user_to_group
@@ -325,7 +333,12 @@ try:
verbose=flag_verbose)
elif mode == 'userlist':
ldapdir.list_users_etcpwd(userfilter, verbose = flag_verbose)
records = ldapdir.get_users(userfilter, config['user_ou'], mssfu=flag_mssfu)
ldapdir.list_users_etcpwd(records, verbose = flag_verbose)
elif mode == 'maillist':
records = ldapdir.get_users_by_mailaddr(mailfilter, config['user_ou'], mssfu=flag_mssfu)
ldapdir.list_users_etcpwd(records, verbose = flag_verbose)
elif mode == 'user_to_group':
sfilter = None

View File

@@ -235,7 +235,7 @@ class LdapUserDir(object):
dictionary of the matching users { dn1:list1, ... }
"""
if ou == None:
user_ou = self.user_ou
ou = self.user_ou
if mssfu:
srch = '(&(objectClass=user)(!(objectClass=computer))(msSFU30UidNumber=*)(msSFU30HomeDirectory=*)(cn=%s))'
@@ -243,24 +243,53 @@ class LdapUserDir(object):
srch = '(&(objectClass=user)(!(objectClass=computer))(cn=%s))'
#try:
r = self.search_s_reconn(user_ou, ldap.SCOPE_SUBTREE,
r = self.search_s_reconn(ou, ldap.SCOPE_SUBTREE,
srch % filter)
#except ldap.LDAPError, e:
# print e
# return
return r
def list_users_etcpwd(self, filter='*', ou=None, verbose = False):
"""Print '/etc/pwd' format like information about matching users
def get_users_by_mailaddr(self, filter='*', ou=None, mssfu=False):
"""get the names of all users from the directory service
Parameters
----------
filter : str, optional
filter expression used for the cn part of the ldap dn
ou : str, optional
mssfu : bool, optional
Whether to only show users with mssfu mappings
Returns
-------
dict
dictionary of the matching users { dn1:list1, ... }
"""
if ou == None:
ou = self.user_ou
if mssfu:
srch = '(&(objectClass=user)(!(objectClass=computer))(msSFU30UidNumber=*)(msSFU30HomeDirectory=*)(mail=%s))'
else:
srch = '(&(objectClass=user)(!(objectClass=computer))(mail=%s))'
#try:
r = self.search_s_reconn(ou, ldap.SCOPE_SUBTREE,
srch % filter)
#except ldap.LDAPError, e:
# print e
# return
return r
def list_users_etcpwd(self, records, verbose = False):
"""Print '/etc/pwd' format like information about matching users
Parameters
----------
records : ldap result structure with user records
verbose : bool, optional
"""
r = self.get_users(filter, ou, mssfu=True)
for dn, entry in r:
for dn, entry in records:
# MUST fields
try:
print ':'.join([entry['cn'][0], entry['msSFU30UidNumber'][0],

View File

@@ -1 +1 @@
__version__ = "2.0.0"
__version__ = "2.1.0"