diff options
author | Simo Sorce <ssorce@redhat.com> | 2007-08-17 10:41:45 -0400 |
---|---|---|
committer | Simo Sorce <ssorce@redhat.com> | 2007-08-17 10:41:45 -0400 |
commit | 9238e3cb4af0b5ac490bb4b2f15d4d1b553e079c (patch) | |
tree | 31c881505d97c2eb01b5117287b1665b08bb4845 /ipa-python | |
parent | d41db21a09b80968f22c2211bf6472fe95b34b3f (diff) | |
parent | 0ddf0699a5dd47c575a7e757f38819c8c74340f9 (diff) | |
download | freeipa.git-9238e3cb4af0b5ac490bb4b2f15d4d1b553e079c.tar.gz freeipa.git-9238e3cb4af0b5ac490bb4b2f15d4d1b553e079c.tar.xz freeipa.git-9238e3cb4af0b5ac490bb4b2f15d4d1b553e079c.zip |
Merge with upstream
Diffstat (limited to 'ipa-python')
-rw-r--r-- | ipa-python/ipaclient.py | 45 | ||||
-rw-r--r-- | ipa-python/rpcclient.py | 30 | ||||
-rw-r--r-- | ipa-python/user.py | 4 |
3 files changed, 60 insertions, 19 deletions
diff --git a/ipa-python/ipaclient.py b/ipa-python/ipaclient.py index 626e0a11..28e56001 100644 --- a/ipa-python/ipaclient.py +++ b/ipa-python/ipaclient.py @@ -41,31 +41,36 @@ class IPAClient: self.transport = rpcclient.RPCClient() def set_principal(self,princ): + """Set the name of the principal that will be used for + LDAP proxy authentication""" if self.local: self.transport.set_principal(princ) - def get_user(self,uid): - result = self.transport.get_user(uid) + def get_user(self,uid,sattrs=None): + """Get a specific user by uid. If sattrs is set then only those + attributes will be returned.""" + result = self.transport.get_user(uid,sattrs) return user.User(result) def add_user(self,user): + """Add a user. user is a dict of attribute/value pairs""" realm = config.config.get_realm() # FIXME: This should be dynamic and can include just about anything # Let us add in some missing attributes - if user.get('homeDirectory') is None: - user['homeDirectory'] ='/home/%s' % user['uid'] + if user.get('homedirectory') is None: + user['homedirectory'] ='/home/%s' % user['uid'] if user.get('gecos') is None: user['gecos'] = user['uid'] # FIXME: This can be removed once the DS plugin is installed - user['uidNumber'] ='501' + user['uidnumber'] ='501' # FIXME: What is the default group for users? - user['gidNumber'] ='501' - user['krbPrincipalName'] = "%s@%s" % (user['uid'], realm) - user['cn'] = "%s %s" % (user['givenName'], user['sn']) + user['gidnumber'] ='501' + user['krbprincipalname'] = "%s@%s" % (user['uid'], realm) + user['cn'] = "%s %s" % (user['givenname'], user['sn']) if user.get('gn'): del user['gn'] @@ -73,32 +78,48 @@ class IPAClient: return result def get_all_users(self): + """Get as a list of User objects all users in the directory""" result = self.transport.get_all_users() all_users = [] for (attrs) in result: - if attrs is not None: - all_users.append(user.User(attrs)) + if attrs is not None: + all_users.append(user.User(attrs)) return all_users def get_add_schema(self): + """Prototype for the GUI. Specify in the directory fields to + be displayed and what data to get for new users.""" result = self.transport.get_add_schema() return result def find_users(self, criteria, sattrs=None): + """Find users whose uid matches the criteria. Wildcards are + acceptable. Returns a list of User objects.""" result = self.transport.find_users(criteria, sattrs) users = [] for (attrs) in result: - if attrs is not None: - users.append(user.User(attrs)) + if attrs is not None: + users.append(user.User(attrs)) return users def update_user(self,olduser,newuser): + """Update a user entry. olduser is a dict of attribute/value pairs + of the original entry. newuser is a dict of attribute/value pairs + of the new entry.""" realm = config.config.get_realm() result = self.transport.update_user(olduser,newuser) return result + + def mark_user_deleted(self,uid): + """Set a user as inactive by uid.""" + + realm = config.config.get_realm() + + result = self.transport.mark_user_deleted(uid) + return result diff --git a/ipa-python/rpcclient.py b/ipa-python/rpcclient.py index abff0f8f..477b4e3c 100644 --- a/ipa-python/rpcclient.py +++ b/ipa-python/rpcclient.py @@ -39,9 +39,12 @@ class RPCClient: ipa.config.init_config() def server_url(self): + """Build the XML-RPC server URL from our configuration""" return "http://" + config.config.get_server() + "/ipa" def setup_server(self): + """Create our XML-RPC server connection using kerberos + authentication""" return xmlrpclib.ServerProxy(self.server_url(), KerbTransport()) def convert_entry(self,ent): @@ -63,11 +66,15 @@ class RPCClient: return user - def get_user(self,username): - """Get a specific user""" + def get_user(self,username,sattrs=None): + """Get a specific user. If sattrs is not None then only those + attributes will be returned. The result is a dict.""" server = self.setup_server() try: - result = server.get_user(username) + if sattrs is not None: + result = server.get_user(username,sattrs) + else: + result = server.get_user(username) except xmlrpclib.Fault, fault: raise xmlrpclib.Fault(fault.faultCode, fault.faultString) except socket.error, (value, msg): @@ -76,7 +83,9 @@ class RPCClient: return result def add_user(self,user): - """Add a new user""" + """Add a new user. 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""" server = self.setup_server() try: @@ -147,3 +156,16 @@ class RPCClient: raise xmlrpclib.Fault(value, msg) return result + + def mark_user_deleted(self,uid): + """Mark a user as deleted/inactive""" + server = self.setup_server() + + try: + result = server.mark_user_deleted(uid) + except xmlrpclib.Fault, fault: + raise xmlrpclib.Fault(fault.faultCode, fault.faultString) + except socket.error, (value, msg): + raise xmlrpclib.Fault(value, msg) + + return result diff --git a/ipa-python/user.py b/ipa-python/user.py index 3c925bfb..ecbd2845 100644 --- a/ipa-python/user.py +++ b/ipa-python/user.py @@ -58,9 +58,7 @@ class User: def getValue(self,name): """Get the first value for the attribute named name""" value = self.data.get(name,[None]) - if (len(value) < 1): - return value - if isinstance(value[0],list) or isinstance(value[0],tuple): + if isinstance(value,list) or isinstance(value,tuple): return value[0] else: return value |