mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
Manual merge changes in for the cidict/ipaclient add_user()
This commit is contained in:
parent
48bb474e68
commit
a0e2fa00f1
@ -26,6 +26,7 @@ import ipa.config
|
||||
|
||||
import xmlrpclib
|
||||
import kerberos
|
||||
import ldap
|
||||
|
||||
def usage():
|
||||
print "ipa-adduser [-c|--gecos STRING] [-d|--directory STRING] [-f|--firstname STRING] [-l|--lastname STRING] user"
|
||||
@ -55,7 +56,7 @@ def parse_options():
|
||||
return options, args
|
||||
|
||||
def main():
|
||||
user={}
|
||||
user=ldap.cidict.cidict()
|
||||
options, args = parse_options()
|
||||
|
||||
if len(args) != 2:
|
||||
|
@ -29,6 +29,14 @@ import user
|
||||
import ipa
|
||||
import config
|
||||
|
||||
def cidict_to_dict(cid):
|
||||
"""Convert a cidict to a standard dict for sending across the wire"""
|
||||
newdict = {}
|
||||
kindex = cid.keys()
|
||||
for dkey in kindex:
|
||||
newdict[dkey] = cid[dkey]
|
||||
return newdict
|
||||
|
||||
class IPAClient:
|
||||
|
||||
def __init__(self,local=None):
|
||||
@ -53,7 +61,7 @@ class IPAClient:
|
||||
return user.User(result)
|
||||
|
||||
def add_user(self,user):
|
||||
"""Add a user. user is a dict of attribute/value pairs"""
|
||||
"""Add a user. user is a cidict() of attribute/value pairs"""
|
||||
|
||||
realm = config.config.get_realm()
|
||||
|
||||
@ -74,7 +82,9 @@ class IPAClient:
|
||||
if user.get('gn'):
|
||||
del user['gn']
|
||||
|
||||
result = self.transport.add_user(user)
|
||||
# convert to a regular dict before sending
|
||||
dict_user = cidict_to_dict(user)
|
||||
result = self.transport.add_user(dict_user)
|
||||
return result
|
||||
|
||||
def get_all_users(self):
|
||||
|
@ -63,7 +63,7 @@ class Entry:
|
||||
if isinstance(entrydata,tuple):
|
||||
self.dn = entrydata[0]
|
||||
self.data = ldap.cidict.cidict(entrydata[1])
|
||||
elif isinstance(entrydata,str):
|
||||
elif isinstance(entrydata,str) or isinstance(entrydata,unicode):
|
||||
self.dn = entrydata
|
||||
self.data = ldap.cidict.cidict()
|
||||
else:
|
||||
|
@ -171,14 +171,31 @@ class IPAServer:
|
||||
|
||||
return self.convert_entry(ent)
|
||||
|
||||
def add_user (self, user, user_container="ou=users,ou=default",opts=None):
|
||||
def add_user (self, args, user_container="ou=users,ou=default",opts=None):
|
||||
"""Add a user in LDAP. Takes as input a dict where the key is the
|
||||
attribute name and the value is either a string or in the case
|
||||
of a multi-valued field a list of values. user_container sets
|
||||
where in the tree the user is placed."""
|
||||
global _LDAPPool
|
||||
|
||||
# The XML-RPC server marshals the arguments into one variable
|
||||
# while the direct caller has them separate. So do a little
|
||||
# bit of gymnastics to figure things out. There has to be a
|
||||
# better way, so FIXME
|
||||
if isinstance(args,tuple):
|
||||
opts = user_container
|
||||
if len(args) == 2:
|
||||
user = args[0]
|
||||
user_container = args[1]
|
||||
else:
|
||||
user = args
|
||||
user_container = "ou=users,ou=default"
|
||||
else:
|
||||
user = args
|
||||
|
||||
if (isinstance(user, tuple)):
|
||||
user = user[0]
|
||||
|
||||
dn="uid=%s,%s,%s" % (user['uid'], user_container,self.basedn)
|
||||
entry = ipaserver.ipaldap.Entry(str(dn))
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user