added listing users by mail address
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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],
|
||||
|
||||
@@ -1 +1 @@
|
||||
__version__ = "2.0.0"
|
||||
__version__ = "2.1.0"
|
||||
|
||||
Reference in New Issue
Block a user