diff options
author | Simo Sorce <ssorce@redhat.com> | 2007-08-09 14:52:54 -0400 |
---|---|---|
committer | Simo Sorce <ssorce@redhat.com> | 2007-08-09 14:52:54 -0400 |
commit | a59c36b394dba5f8b371c1a6cdab0317a5507486 (patch) | |
tree | 91cbc96560da1e0aebe3b0dda64c8b3191495a0b /ipa-python/rpcclient.py | |
parent | 950bddf2a32b765ee97df5442a1ec9c0a358ccb3 (diff) | |
parent | cf93b1bc642a843242cc9aaf585c08c5475ad632 (diff) | |
download | freeipa.git-a59c36b394dba5f8b371c1a6cdab0317a5507486.tar.gz freeipa.git-a59c36b394dba5f8b371c1a6cdab0317a5507486.tar.xz freeipa.git-a59c36b394dba5f8b371c1a6cdab0317a5507486.zip |
merge in changes from upstream
Diffstat (limited to 'ipa-python/rpcclient.py')
-rw-r--r-- | ipa-python/rpcclient.py | 146 |
1 files changed, 82 insertions, 64 deletions
diff --git a/ipa-python/rpcclient.py b/ipa-python/rpcclient.py index 41602662..d4e645e1 100644 --- a/ipa-python/rpcclient.py +++ b/ipa-python/rpcclient.py @@ -20,83 +20,101 @@ #!/usr/bin/python -try: - import krbV -except ImportError: - pass import xmlrpclib import socket +import config +from krbtransport import KerbTransport +from kerberos import GSSError import os import base64 +import user +import ipa # Some errors to catch # http://cvs.fedora.redhat.com/viewcvs/ldapserver/ldap/servers/plugins/pam_passthru/README?root=dirsec&rev=1.6&view=auto + +class RPCClient: + + def __init__(self): + ipa.config.init_config() -# FIXME: do we want this set somewhere else? -server = xmlrpclib.ServerProxy("http://localhost:80/ipa") - -def get_user(username): - """Get a specific user""" + def server_url(self): + return "http://" + config.config.get_server() + "/ipa" - try: - result = server.get_user(username) - myuser = result - except xmlrpclib.Fault, fault: - raise xmlrpclib.Fault(fault.faultCode, fault.faultString) - return None - except socket.error, (value, msg): - raise xmlrpclib.Fault(value, msg) - return None + def setup_server(self): + return xmlrpclib.ServerProxy(self.server_url(), KerbTransport()) - return myuser + def convert_entry(self,ent): + # Convert into a dict. We need to handle multi-valued attributes as well + # so we'll convert those into lists. + user={} + for (k) in ent: + k = k.lower() + if user.get(k) is not None: + if isinstance(user[k],list): + user[k].append(ent[k].strip()) + else: + first = user[k] + user[k] = () + user[k].append(first) + user[k].append(ent[k].strip()) + else: + user[k] = ent[k] -def add_user(user): - """Add a new user""" - - # FIXME: Get the realm from somewhere - realm="GREYOAK.COM" - - # 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('gecos') is None: - user['gecos'] = user['uid'] - - # FIXME: This can be removed once the DS plugin is installed - user['uidNumber'] ='501' + return user + + def get_user(self,username): + """Get a specific user""" + server = self.setup_server() + try: + result = server.get_user(username) + except xmlrpclib.Fault, fault: + raise xmlrpclib.Fault(fault.faultCode, fault.faultString) + except socket.error, (value, msg): + raise xmlrpclib.Fault(value, msg) - # FIXME: What is the default group for users? - user['gidNumber'] ='501' - user['krbPrincipalName'] = "%s@%s" % (user['uid'], realm) - user['cn'] = "%s %s" % (user['gn'], user['sn']) - if user.get('gn'): - del user['gn'] + return result + + + def add_user(self,user): + """Add a new user""" + server = self.setup_server() + + try: + result = server.add_user(user) + except xmlrpclib.Fault, fault: + raise xmlrpclib.Fault(fault.faultCode, fault.faultString) + except socket.error, (value, msg): + raise xmlrpclib.Fault(value, msg) - try: - result = server.add_user(user) return result - except xmlrpclib.Fault, fault: - raise xmlrpclib.Fault(fault.faultCode, fault.faultString) - return None - except socket.error, (value, msg): - raise xmlrpclib.Fault(value, msg) - return None + + def get_add_schema(self): + """Get the list of attributes we need to ask when adding a new + user. + """ + server = self.setup_server() + + # FIXME: Hardcoded and designed for the TurboGears GUI. Do we want + # this for the CLI as well? + try: + result = server.get_add_schema() + except xmlrpclib.Fault, fault: + raise xmlrpclib.Fault(fault.faultCode, fault.faultString) + except socket.error, (value, msg): + raise xmlrpclib.Fault(value, msg) + + return result -def get_add_schema(): - """Get the list of attributes we need to ask when adding a new - user. - """ + def get_all_users (self): + """Return a list containing a User object for each existing user.""" - # FIXME: Hardcoded and designed for the TurboGears GUI. Do we want - # this for the CLI as well? - try: - result = server.get_add_schema() - except xmlrpclib.Fault, fault: - raise xmlrpclib.Fault(fault,faultCode, fault.faultString) - return None - except socket.error, (value, msg): - raise xmlrpclib.Fault(value, msg) - return None - - return result + server = self.setup_server() + try: + result = server.get_all_users() + except xmlrpclib.Fault, fault: + raise xmlrpclib.Fault(fault.faultCode, fault.faultString) + except socket.error, (value, msg): + raise xmlrpclib.Fault(value, msg) + + return result |