Changeset 2063


Ignore:
Timestamp:
26/01/07 16:45:46 (12 years ago)
Author:
pjkersha
Message:

python/ndg.security.server/ndg/security/server/AttAuthority/init.py:
Include additional checks for loadCredUserRolesInterface.

python/ndg.security.server/ndg/security/server/SessionMgr/server-config.tac:

  • updated soap_connect to wire up to SessionMgr?.connect
  • use of SSL is configurable from useSSL properties file element
  • likewise pick up port number from properties file

python/ndg.security.server/ndg/security/server/SessionMgr/init.py:

  • move lambda functions outside SessionMgr? class - easier to reference.
  • added extra elements to properties file - port num, use SSL flag, SSL cert/private key settings. Simple CA client settings
  • Include additional checks for loadCredReposInterface.
  • update connect method to return proxy cert, proxy private key, user cert and cookie as separate tuple elements.

python/www/html/sessionMgr.wsdl,
python/ndg.security.server/ndg/security/server/SessionMgr/SessionMgr_services_server.py,
python/ndg.security.common/ndg/security/common/SessionMgr/SessionMgr_services.py,
python/ndg.security.common/ndg/security/common/SessionMgr/SessionMgr_services_types.py:

  • connect response has separate elements for proxy cert, proxy private key and user cert.
  • disconnect proxyCert -> userCert. proxy is set in signature in SOAP header.

python/ndg.security.server/ndg/security/server/MyProxy.py: fixes to readProperties method.

python/conf/sessionMgrProperties.xml,
python/ndg.security.test/ndg/security/test/SessionMgr/sessionMgrProperties.xml:
added additional elements for SSL connection.

python/ndg.security.test/ndg/security/test/SessionMgr/SessionMgrClientTest.py:
updates to connect method.

python/ndg.security.test/ndg/security/test/SessionMgr/server.sh: update to header

python/ndg.security.test/ndg/security/test/SessionMgr/sessionMgrClientTest.cfg:
modified PKI config settings.

python/ndg.security.common/ndg/security/common/wsSecurity.py: catch exceptions explicitly
for cert and private key file reading errors.

python/ndg.security.common/ndg/security/common/SessionMgr/init.py: SM client ...

  • 'smCertFilePath' refs changed to 'srvCertFilePath'
  • fixes to connect method
  • renamed 'reqAuthorisation' -> 'getAttCert'

python/ndg.security.common/ndg/security/common/CredWallet.py: added NullCredRepos? class.
Its allows for the case where a deployment doesn't require a Credential Repository. It
implements a class with empty stubs.

Location:
TI12-security/trunk/python
Files:
1 added
15 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/python/conf/sessionMgrProperties.xml

    r2058 r2063  
    55    <keyFile></keyFile> 
    66    <keyPwd></keyPwd> 
     7    <useSSL>Yes</useSSL> <!-- leave blank to use http --> 
     8    <sslCertFile></sslCertFile> 
     9    <sslKeyFile></sslKeyFile> 
    710    <portNum></portNum> 
    811    <sessMgrEncrKey></sessMgrEncrKey> 
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/CredWallet.py

    r2058 r2063  
    10671067        will be made 
    10681068 
    1069         dbPPhrase:     pass-phrase to database if applicable 
    1070         propFilePath:  file path to a properties file.  This could contain 
    1071                        configuration parameters for the repository e.g. 
    1072                        database connection parameters 
    1073         **prop:        any other keywords required 
     1069        @type dbPPhrase: string 
     1070        @keyword dbPPhrase: pass-phrase to database if applicable 
     1071         
     1072        @type propFilePath: string 
     1073        @keyword propFilePath: file path to a properties file.  This could  
     1074        contain configuration parameters for the repository e.g.  database  
     1075        connection parameters 
     1076         
     1077        @type **prop: dict 
     1078        @param **prop: any other keywords required 
    10741079        """ 
    1075         raise NotImplementedError(\ 
    1076             self.__init__.__doc__.replace('\n       ','')) 
    1077  
    1078  
    1079     def addUser(self, userName, dn): 
    1080         """A new user to Credentials Repository""" 
    1081         raise NotImplementedError( 
    1082             self.addUser.__doc__.replace('\n       ','')) 
     1080        raise NotImplementedError, \ 
     1081            self.__init__.__doc__.replace('\n       ','') 
     1082 
     1083 
     1084    def addUser(self, username, dn): 
     1085        """A new user to Credentials Repository 
     1086         
     1087        @type username: string 
     1088        @param username: username for new user 
     1089        @type dn: string 
     1090        @param dn: users Distinguished Name""" 
     1091        raise NotImplementedError, \ 
     1092            self.addUser.__doc__.replace('\n       ','') 
    10831093 
    10841094                             
     
    10871097        any that have expired 
    10881098 
    1089         attCertValidKeys:  keywords which set how to check the Attribute 
    1090                            Certificate e.g. check validity time, XML 
    1091                            signature, version etc.  Default is check 
    1092                            validity time only""" 
    1093         raise NotImplementedError( 
    1094             self.auditCredentials.__doc__.replace('\n       ','')) 
     1099        @type attCertValidKeys: dict 
     1100        @param **attCertValidKeys: keywords which set how to check the  
     1101        Attribute Certificate e.g. check validity time, XML signature, version 
     1102         etc.  Default is check validity time only - See AttCert class""" 
     1103        raise NotImplementedError, \ 
     1104            self.auditCredentials.__doc__.replace('\n       ','') 
    10951105 
    10961106 
    10971107    def getCredentials(self, dn): 
    1098         """Get the list of credentials for a given user's DN""" 
    1099         raise NotImplementedError( 
    1100             self.getCredentials.__doc__.replace('\n       ','')) 
     1108        """Get the list of credentials for a given users DN 
     1109         
     1110        @type dn: string 
     1111        @param dn: users distinguished name 
     1112        @rtype: list  
     1113        @return: list of Attribute Certificates""" 
     1114        raise NotImplementedError, \ 
     1115            self.getCredentials.__doc__.replace('\n       ','') 
    11011116 
    11021117         
     
    11051120        been previously registered in the repository 
    11061121 
    1107         dn:            users Distinguished name 
    1108         attCertList:   list of attribute certificates""" 
    1109         raise NotImplementedError( 
    1110             self.addCredentials.__doc__.replace('\n       ','')) 
     1122        @type dn: string 
     1123        @param dn: users Distinguished name 
     1124        @type attCertList: list 
     1125        @param attCertList: list of attribute certificates""" 
     1126        raise NotImplementedError, \ 
     1127            self.addCredentials.__doc__.replace('\n       ','') 
     1128 
     1129 
     1130 
     1131#_____________________________________________________________________________ 
     1132class NullCredRepos(CredRepos): 
     1133    """Implementation of Credential Repository interface with empty stubs.   
     1134    This allows for where no Credential Repository is required""" 
     1135     
     1136    def __init__(self, propFilePath=None, dbPPhrase=None, **prop): 
     1137        pass 
     1138 
     1139    def addUser(self, userName, dn): 
     1140        pass 
     1141                             
     1142    def auditCredentials(self, **attCertValidKeys): 
     1143        pass 
     1144 
     1145    def getCredentials(self, dn): 
     1146        return [] 
     1147        
     1148    def addCredentials(self, dn, attCertList): 
     1149        pass 
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/SessionMgr/SessionMgr_services.py

    r2058 r2063  
    2929        # no ws-addressing 
    3030 
    31     # op: <ZSI.wstools.WSDLTools.Message instance at 0xb6d0124c> 
    32     def addUser(self, username,passPhrase): 
     31    # op: <ZSI.wstools.WSDLTools.Message instance at 0xb6d0170c> 
     32    def addUser(self, username,passphrase): 
    3333 
    3434        request = addUserInputMsg() 
    3535        request._username = username 
    36         request._passPhrase = passPhrase 
     36        request._passphrase = passphrase 
    3737 
    3838        kw = {} 
     
    4343        return  
    4444 
    45     # op: <ZSI.wstools.WSDLTools.Message instance at 0xb6d0156c> 
    46     def connect(self, username,passPhrase,createServerSess,getCookie): 
     45    # op: <ZSI.wstools.WSDLTools.Message instance at 0xb6d01a2c> 
     46    def connect(self, username,passphrase,createServerSess,getCookie): 
    4747 
    4848        request = connectInputMsg() 
    4949        request._username = username 
    50         request._passPhrase = passPhrase 
     50        request._passphrase = passphrase 
    5151        request._createServerSess = createServerSess 
    5252        request._getCookie = getCookie 
     
    5757        # no output wsaction 
    5858        response = self.binding.Receive(connectOutputMsg.typecode) 
     59        proxyCert = response._proxyCert 
     60        proxyPriKey = response._proxyPriKey 
     61        userCert = response._userCert 
    5962        cookie = response._cookie 
    60         proxyCert = response._proxyCert 
    61         return cookie,proxyCert 
     63        return proxyCert,proxyPriKey,userCert,cookie 
    6264 
    63     # op: <ZSI.wstools.WSDLTools.Message instance at 0xb6d0928c> 
    64     def disconnect(self, proxyCert,sessID,encrSessionMgrURI): 
     65    # op: <ZSI.wstools.WSDLTools.Message instance at 0xb6d067ac> 
     66    def disconnect(self, userCert,sessID,encrSessionMgrURI): 
    6567 
    6668        request = disconnectInputMsg() 
    67         request._proxyCert = proxyCert 
     69        request._userCert = userCert 
    6870        request._sessID = sessID 
    6971        request._encrSessionMgrURI = encrSessionMgrURI 
     
    7678        return  
    7779 
    78     # op: <ZSI.wstools.WSDLTools.Message instance at 0xb6d0942c> 
    79     def getAttCert(self, proxyCert,sessID,encrSessionMgrURI,attAuthorityURI,attAuthorityCert,reqRole,mapFromTrustedHosts,rtnExtAttCertList,extAttCert,extTrustedHost): 
     80    # op: <ZSI.wstools.WSDLTools.Message instance at 0xb6d0694c> 
     81    def getAttCert(self, userCert,sessID,encrSessionMgrURI,attAuthorityURI,attAuthorityCert,reqRole,mapFromTrustedHosts,rtnExtAttCertList,extAttCert,extTrustedHost): 
    8082 
    8183        request = getAttCertInputMsg() 
    82         request._proxyCert = proxyCert 
     84        request._userCert = userCert 
    8385        request._sessID = sessID 
    8486        request._encrSessionMgrURI = encrSessionMgrURI 
     
    101103        return attCert,statusCode,extAttCert 
    102104 
    103     # op: <ZSI.wstools.WSDLTools.Message instance at 0xb6d095ac> 
     105    # op: <ZSI.wstools.WSDLTools.Message instance at 0xb6d06acc> 
    104106    def getX509Cert(self): 
    105107 
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/SessionMgr/SessionMgr_services_types.py

    r2058 r2063  
    3737        def __init__(self, **kw): 
    3838            ns = ns0.addUser_Dec.schema 
    39             TClist = [ZSI.TC.String(pname="username", aname="_username", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="passPhrase", aname="_passPhrase", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded"))] 
     39            TClist = [ZSI.TC.String(pname="username", aname="_username", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="passphrase", aname="_passphrase", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded"))] 
    4040            kw["pname"] = ("urn:ndg:security","addUser") 
    4141            kw["aname"] = "_addUser" 
     
    4848                    # pyclass 
    4949                    self._username = None 
    50                     self._passPhrase = None 
     50                    self._passphrase = None 
    5151                    return 
    5252            Holder.__name__ = "addUser_Holder" 
     
    7777        def __init__(self, **kw): 
    7878            ns = ns0.connect_Dec.schema 
    79             TClist = [ZSI.TC.String(pname="username", aname="_username", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="passPhrase", aname="_passPhrase", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.Boolean(pname="createServerSess", aname="_createServerSess", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.Boolean(pname="getCookie", aname="_getCookie", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded"))] 
     79            TClist = [ZSI.TC.String(pname="username", aname="_username", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="passphrase", aname="_passphrase", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.Boolean(pname="createServerSess", aname="_createServerSess", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.Boolean(pname="getCookie", aname="_getCookie", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded"))] 
    8080            kw["pname"] = ("urn:ndg:security","connect") 
    8181            kw["aname"] = "_connect" 
     
    8888                    # pyclass 
    8989                    self._username = None 
    90                     self._passPhrase = None 
     90                    self._passphrase = None 
    9191                    self._createServerSess = None 
    9292                    self._getCookie = None 
     
    100100        def __init__(self, **kw): 
    101101            ns = ns0.connectResponse_Dec.schema 
    102             TClist = [ZSI.TC.String(pname="cookie", aname="_cookie", minOccurs=0, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="proxyCert", aname="_proxyCert", minOccurs=0, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded"))] 
     102            TClist = [ZSI.TC.String(pname="proxyCert", aname="_proxyCert", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="proxyPriKey", aname="_proxyPriKey", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="userCert", aname="_userCert", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="cookie", aname="_cookie", minOccurs=0, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded"))] 
    103103            kw["pname"] = ("urn:ndg:security","connectResponse") 
    104104            kw["aname"] = "_connectResponse" 
     
    110110                def __init__(self): 
    111111                    # pyclass 
     112                    self._proxyCert = None 
     113                    self._proxyPriKey = None 
     114                    self._userCert = None 
    112115                    self._cookie = None 
    113                     self._proxyCert = None 
    114116                    return 
    115117            Holder.__name__ = "connectResponse_Holder" 
     
    121123        def __init__(self, **kw): 
    122124            ns = ns0.disconnect_Dec.schema 
    123             TClist = [ZSI.TC.String(pname="proxyCert", aname="_proxyCert", minOccurs=0, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="sessID", aname="_sessID", minOccurs=0, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="encrSessionMgrURI", aname="_encrSessionMgrURI", minOccurs=0, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded"))] 
     125            TClist = [ZSI.TC.String(pname="userCert", aname="_userCert", minOccurs=0, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="sessID", aname="_sessID", minOccurs=0, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="encrSessionMgrURI", aname="_encrSessionMgrURI", minOccurs=0, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded"))] 
    124126            kw["pname"] = ("urn:ndg:security","disconnect") 
    125127            kw["aname"] = "_disconnect" 
     
    131133                def __init__(self): 
    132134                    # pyclass 
    133                     self._proxyCert = None 
     135                    self._userCert = None 
    134136                    self._sessID = None 
    135137                    self._encrSessionMgrURI = None 
     
    162164        def __init__(self, **kw): 
    163165            ns = ns0.getAttCert_Dec.schema 
    164             TClist = [ZSI.TC.String(pname="proxyCert", aname="_proxyCert", minOccurs=0, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="sessID", aname="_sessID", minOccurs=0, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="encrSessionMgrURI", aname="_encrSessionMgrURI", minOccurs=0, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="attAuthorityURI", aname="_attAuthorityURI", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="attAuthorityCert", aname="_attAuthorityCert", minOccurs=0, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="reqRole", aname="_reqRole", minOccurs=0, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.Boolean(pname="mapFromTrustedHosts", aname="_mapFromTrustedHosts", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.Boolean(pname="rtnExtAttCertList", aname="_rtnExtAttCertList", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="extAttCert", aname="_extAttCert", minOccurs=0, maxOccurs="unbounded", nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="extTrustedHost", aname="_extTrustedHost", minOccurs=0, maxOccurs="unbounded", nillable=False, typed=False, encoded=kw.get("encoded"))] 
     166            TClist = [ZSI.TC.String(pname="userCert", aname="_userCert", minOccurs=0, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="sessID", aname="_sessID", minOccurs=0, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="encrSessionMgrURI", aname="_encrSessionMgrURI", minOccurs=0, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="attAuthorityURI", aname="_attAuthorityURI", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="attAuthorityCert", aname="_attAuthorityCert", minOccurs=0, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="reqRole", aname="_reqRole", minOccurs=0, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.Boolean(pname="mapFromTrustedHosts", aname="_mapFromTrustedHosts", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.Boolean(pname="rtnExtAttCertList", aname="_rtnExtAttCertList", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="extAttCert", aname="_extAttCert", minOccurs=0, maxOccurs="unbounded", nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="extTrustedHost", aname="_extTrustedHost", minOccurs=0, maxOccurs="unbounded", nillable=False, typed=False, encoded=kw.get("encoded"))] 
    165167            kw["pname"] = ("urn:ndg:security","getAttCert") 
    166168            kw["aname"] = "_getAttCert" 
     
    172174                def __init__(self): 
    173175                    # pyclass 
    174                     self._proxyCert = None 
     176                    self._userCert = None 
    175177                    self._sessID = None 
    176178                    self._encrSessionMgrURI = None 
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/SessionMgr/__init__.py

    r1990 r2063  
    4141    def __init__(self,  
    4242                 uri=None,  
    43                  smCertFilePath=None, 
     43                 srvCertFilePath=None, 
    4444                 clntCertFilePath=None, 
    4545                 clntPriKeyFilePath=None, 
     
    4949        uri:                     URI for Session Manager WS.  Setting it  
    5050                                 will set the Service Proxy 
    51         smCertFilePath:          Public key of Session Manager.  This is  
     51        srvCertFilePath:          Public key of Session Manager.  This is  
    5252                                 needed to verify signed messages back from 
    5353                                 the Session Manager 
     
    7979            self.__setURI(uri) 
    8080             
    81         if smCertFilePath: 
    82             self.__setSMcertFilePath(smCertFilePath) 
     81        if srvCertFilePath: 
     82            self.__setSrvCertFilePath(srvCertFilePath) 
    8383             
    8484        if clntPriKeyFilePath: 
    8585            self.__setClntPriKeyFilePath(clntPriKeyFilePath) 
     86             
     87        if clntPriKeyPwd: 
     88            self.__setClntPriKeyPwd(clntPriKeyPwd) 
    8689             
    8790        if clntCertFilePath: 
     
    9295          
    9396        # Instantiate Session Manager WS ZSI client 
    94         if self.__uri and smCertFilePath and clntPriKeyFilePath: 
     97        if self.__uri and srvCertFilePath and clntPriKeyFilePath: 
    9598            self.initService() 
    9699         
     
    109112 
    110113    #_________________________________________________________________________ 
    111     def __setSMcertFilePath(self, smCertFilePath): 
    112          
    113         if not isinstance(smCertFilePath, basestring): 
     114    def __setSrvCertFilePath(self, srvCertFilePath): 
     115         
     116        if not isinstance(srvCertFilePath, basestring): 
    114117            raise SessionMgrClientError, \ 
    115118                "Session Manager X.509 Cert. file must be a valid string" 
    116119         
    117         self.__srvCertFilePath = smCertFilePath 
    118          
    119     smCertFilePath = property(fset=__setSMcertFilePath, 
     120        self.__srvCertFilePath = srvCertFilePath 
     121         
     122    srvCertFilePath = property(fset=__setSrvCertFilePath, 
    120123                                doc="Set Session Manager X.509 Cert. file") 
    121124 
     
    178181         
    179182        # Don't proceed unless URI was set - user may have set public key via 
    180         # smCertFilePath instead 
     183        # srvCertFilePath instead 
    181184        if self.__srvCertFilePath is not None: 
    182185            return 
     
    204207        if uri: 
    205208            self.__setURI(uri) 
    206  
     209     
    207210        # WS-Security Signature handler object is passed to binding 
    208211        signatureHandler = SignatureHandler(\ 
    209                                     certFilePath=self.__srvCertFilePath, 
     212                                    certFilePath=self.__clntCertFilePath, 
    210213                                    priKeyFilePath=self.__clntPriKeyFilePath, 
    211214                                    priKeyPwd=self.__clntPriKeyPwd) 
     
    218221        except HTTPResponse, e: 
    219222            raise SessionMgrClientError, \ 
    220                 "Error initialising Service for \"%s\": %s %s" % \ 
     223                "Initialising Service for \"%s\": %s %s" % \ 
    221224                (self.__uri, e.status, e.reason) 
    222225             
     
    229232    def addUser(self, 
    230233                username, 
    231                 pPhrase=None, 
    232                 pPhraseFilePath=None, 
     234                passphrase=None, 
     235                passphraseFilePath=None, 
    233236                clntPriKeyPwd=None): 
    234237        """Register a new user 
    235238         
    236239        username:                the username for the new user  
    237         pPhrase:                 user's pass-phrase 
    238         pPhraseFilePath:         a file containing the user's pass-phrase.   
    239                                  Use this as an alternative to pPhrase keyword 
     240        passphrase:                 user's pass-phrase 
     241        passphraseFilePath:         a file containing the user's pass-phrase.   
     242                                 Use this as an alternative to passphrase keyword 
    240243        clntPriKeyPwd:           pass-phrase if any for the client's private 
    241244                                 key used to decrypt response from 
     
    243246        """ 
    244247     
    245         if pPhrase is None: 
     248        if passphrase is None: 
    246249            try: 
    247                 pPhrase = open(pPhraseFilePath).read().strip() 
     250                passphrase = open(passphraseFilePath).read().strip() 
    248251             
    249252            except Exception, e: 
    250253                raise SessionMgrClientError, "Pass-phrase not defined: " + \ 
    251254                                            str(e) 
    252  
    253  
    254         # If Public key was not set, retrieve from server 
    255         self.__getSrvX509Cert() 
    256255             
    257256     
    258257        # Make request for new user 
    259258        try:    
    260             self.__srv.addUser(username, pPhrase) 
    261  
    262         except Exception, e: 
    263             raise SessionMgrClientError, "Error adding new user: " + str(e) 
     259            self.__srv.addUser(username, passphrase) 
     260 
     261        except Exception, e: 
     262            raise SessionMgrClientError, "Adding new user: " + str(e) 
    264263     
    265264         
    266265    #_________________________________________________________________________    
    267266    def connect(self, 
    268                 userName, 
    269                 pPhrase=None, 
    270                 pPhraseFilePath=None, 
    271                 getCookie=True, 
    272                 createServerSess=False): 
     267                username, 
     268                passphrase=None, 
     269                passphraseFilePath=None, 
     270                getCookie=False, 
     271                createServerSess=True): 
    273272        """Request a new user session from the Session Manager 
    274273         
    275         userName:                the username of the user to connect 
    276         pPhrase:                 user's pass-phrase 
    277         pPhraseFilePath:         a file containing the user's pass-phrase.   
    278                                  Use this as an alternative to pPhrase  
    279                                  keyword. 
     274        @type username: string 
     275        @param username: the username of the user to connect 
     276         
     277        @type passphrase: string 
     278        @keyword passphrase: user's pass-phrase 
     279         
     280        @type passphraseFilePath: string 
     281        @keyword passphraseFilePath: a file containing the user's pass-phrase.   
     282        Use this as an alternative to passphrase keyword. 
    280283                                  
    281         getCookie:               If set to true, return a cookie to be set in  
    282                                  a web browser client.  Otherwise, return a  
    283                                  proxy certificate. 
     284        @type getCookie: bool 
     285        @keyword getCookie: If set to True, return a cookie to be set in  
     286        a web browser client.   
    284287                                  
    285         createServerSess:        If set to True, the SessionMgr will create 
    286                                  and manage a session for the user but note, 
    287                                  this flag is ignored and set to True if 
    288                                  getCookie is set.   
    289                                   
    290                                  For command line case, where getCookie is  
    291                                  False, it's possible to choose to have a  
    292                                  client or server side session using this  
    293                                  keyword. 
    294         clntPriKeyPwd:           pass-phrase if any for the client's private 
    295                                  key used to decrypt response from 
    296                                  Session Manager.""" 
    297      
    298         if pPhrase is None: 
     288        @type createServerSess: bool 
     289        @keyword createServerSess: If set to True, the SessionMgr will create 
     290        and manage a session for the user but note, this flag is ignored and  
     291        set to True if getCookie is set.  For command line case, where  
     292        getCookie is False, it's possible to choose to have a client or server 
     293        side session using this keyword. 
     294         
     295        @rtype: tuple 
     296        @return proxy cert, proxy private key, user cert and cookie all as 
     297        strings but cookie will be None if the getCookie keyword is False""" 
     298     
     299        if passphrase is None: 
    299300            try: 
    300                 pPhrase = open(pPhraseFilePath).read().strip() 
     301                passphrase = open(passphraseFilePath).read().strip() 
    301302             
    302303            except Exception, e: 
     
    304305                                             str(e) 
    305306 
    306  
    307         # If Public key was not set, retrieve from server 
    308         self.__getSrvX509Cert() 
    309  
    310307        # Make connection 
    311308        try:  
    312             cookie, proxyCert = self.__srv.connect(userName,  
    313                                                    pPhrase, 
    314                                                    createServerSess, 
    315                                                    getCookie) 
    316             if cookie: 
    317                 return cookie 
    318                         
    319             elif proxyCert: 
    320                 return proxyCert 
    321          
    322             else: 
    323                raise SessionMgrClientError, \ 
    324                "Neither \"cookie\" or \"proxyCert\" returned in response" 
     309            userID = self.__srv.connect(username,  
     310                                        passphrase, 
     311                                        createServerSess, 
     312                                        getCookie) 
     313            return userID 
    325314                
    326315        except Exception, e: 
    327316            raise SessionMgrClientError, \ 
    328                             "Error connecting to Session Manager: " + str(e) 
     317                                    "Connecting to Session Manager: " + str(e) 
    329318     
    330319         
     
    368357                '"encrSessionMgrURI" keywords must be set' 
    369358 
    370         # If Public key was not set, retrieve from server 
    371         self.__getSrvX509Cert() 
    372  
    373  
    374359        # Make connection 
    375360        try:  
     
    378363        except Exception, e: 
    379364            raise SessionMgrClientError, \ 
    380                         "Error disconnecting from Session Manager: " + str(e) 
     365                        "Disconnecting from Session Manager: " + str(e) 
    381366    
    382367     
    383368    #_________________________________________________________________________  
    384     def reqAuthorisation(self, 
    385                          proxyCert=None, 
    386                          sessCookie=None, 
    387                          sessID=None, 
    388                          encrSessionMgrURI=None, 
    389                          attAuthorityURI=None, 
    390                          attAuthorityCert=None, 
    391                          reqRole=None, 
    392                          mapFromTrustedHosts=True, 
    393                          rtnExtAttCertList=False, 
    394                          extAttCertList=[], 
    395                          extTrustedHostList=[]):     
     369    def getAttCert(self, 
     370                   proxyCert=None, 
     371                   sessCookie=None, 
     372                   sessID=None, 
     373                   encrSessionMgrURI=None, 
     374                   attAuthorityURI=None, 
     375                   attAuthorityCert=None, 
     376                   reqRole=None, 
     377                   mapFromTrustedHosts=True, 
     378                   rtnExtAttCertList=False, 
     379                   extAttCertList=[], 
     380                   extTrustedHostList=[]):     
    396381        """Request NDG Session Manager Web Service to retrieve an Attribute 
    397382        Certificate from the given Attribute Authority and cache it in the 
     
    449434                '"encrSessionMgrURI" keywords must be set' 
    450435 
    451  
    452         # If Public key was not set, retrieve from server 
    453         self.__getSrvX509Cert() 
    454  
    455              
    456         # Make authorisation request 
     436             
     437        # Make request 
    457438        try: 
    458             attCert, statusCode, extAttCertList = \ 
    459                         self.__srv.reqAuthorisation(proxyCert, 
    460                                                   sessID,  
    461                                                   encrSessionMgrURI, 
    462                                                   attAuthorityURI, 
    463                                                   attAuthorityCert, 
    464                                                   reqRole, 
    465                                                   mapFromTrustedHosts, 
    466                                                   rtnExtAttCertList, 
    467                                                   extAttCertList, 
    468                                                   extTrustedHostList) 
    469             return attCert, statusCode, extAttCertList 
    470              
    471         except Exception, e: 
    472             raise SessionMgrClientError, \ 
    473                                 "Error in authorisation request: " + str(e) 
     439            result = self.__srv.getAttCert(proxyCert, 
     440                                           sessID,  
     441                                           encrSessionMgrURI, 
     442                                           attAuthorityURI, 
     443                                           attAuthorityCert, 
     444                                           reqRole, 
     445                                           mapFromTrustedHosts, 
     446                                           rtnExtAttCertList, 
     447                                           extAttCertList, 
     448                                           extTrustedHostList) 
     449            return result 
     450             
     451        except Exception, e: 
     452            raise SessionMgrClientError, \ 
     453                                "Attribute Certificate request: " + str(e) 
    474454 
    475455                                     
     
    483463         
    484464        except Exception, e: 
    485             raise SessionMgrClientError, "Error retrieving public key: " + \ 
    486                                         str(e) 
     465            raise SessionMgrClientError, "Retrieving X.509 certificate: " + \ 
     466                                         str(e) 
    487467                             
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/wsSecurity.py

    r2028 r2063  
    113113     
    114114     
     115    #_________________________________________________________________________ 
    115116    def __init__(self, 
    116117                 certFilePath=None,  
     
    126127        self.__verifyingCert = None 
    127128 
     129 
     130    #_________________________________________________________________________ 
    128131    def sign(self, soapWriter): 
    129132        '''Sign the message body and binary security token of a SOAP message 
    130133        ''' 
     134         
     135        try: 
     136            # Read Private key to sign with     
     137            priKeyFile = BIO.File(open(self.__priKeyFilePath))  
     138            pwdCallback = lambda *ar, **kw: self.__priKeyPwd                                            
     139            priKey = RSA.load_key_bio(priKeyFile, callback=pwdCallback) 
     140             
     141        except Exception, e: 
     142            raise SignatureError, "Loading private key for signature: %s" % e 
     143 
     144 
    131145        # Add X.509 cert as binary security token 
    132         x509Cert = X509.load_cert(self.__certFilePath) 
     146        try: 
     147            x509Cert = X509.load_cert(self.__certFilePath) 
     148        except Exception, e: 
     149            raise SignatureError, "Error loading X.509 certificate for " + \ 
     150                                  "binary security token element of signature" 
     151                                   
    133152        x509CertStr=self.__class__.__x509CertPat.findall(x509Cert.as_pem())[0] 
    134153 
     
    306325        # Calculate digest of SignedInfo 
    307326        signedInfoDigestValue = sha(c14nSignedInfo).digest().strip() 
    308          
    309         # Read Private key to sign with     
    310         priKeyFile = BIO.File(open(self.__priKeyFilePath))                                             
    311         priKey = RSA.load_key_bio(priKeyFile,  
    312                                   callback=lambda *ar, **kw: self.__priKeyPwd) 
    313327         
    314328        # Sign using the private key and base 64 encode the result 
     
    897911        request -- twisted.web.server.Request 
    898912        """ 
    899         print "WSSecurityHandler.processRequest" 
    900         #import pdb;pdb.set_trace() 
    901          
    902913        if cls.signatureHandler: 
    903914            cls.signatureHandler.verify(ps) 
     
    906917     
    907918    @classmethod 
    908     def processResponse(cls, output, **kw): 
    909         print "WSSecurityHandler.processResponse" 
    910         #import pdb;pdb.set_trace() 
     919    def processResponse(cls, sw, **kw): 
    911920         
    912921        if cls.signatureHandler: 
    913             cls.signatureHandler.sign(output) 
    914              
    915         return output 
    916  
    917  
    918 #class WSSecurityHandler: 
    919 #    """""" 
    920 #    implements(HandlerChainInterface) 
    921 #     
    922 #    def processRequest(self, ps, **kw): 
    923 #        print "WSSecurityAddressHandler.processRequest" 
    924 #        import pdb;pdb.set_trace() 
    925 #        return ps 
    926 #         
    927 #    def processResponse(self, sw, **kw): 
    928 #        print "WSSecurityAddressHandler.processResponse" 
    929 #        import pdb;pdb.set_trace() 
    930 #        return sw    
     922            cls.signatureHandler.sign(sw) 
     923             
     924        return sw 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/AttAuthority/__init__.py

    r2058 r2063  
    102102                    'userRolesPropFile') 
    103103     
    104     def __init__(self,  
    105                  propFilePath=None,  
    106                  bReadMapConfig=True): 
     104    def __init__(self, propFilePath=None, bReadMapConfig=True): 
    107105        """Create new NDG Attribute Authority instance 
    108106 
     
    182180        try: 
    183181            try: 
    184                 # Temporarily extend system path ready for import 
    185                 sysPathBak = sys.path[:] 
    186                 sys.path.append(self.__prop['userRolesModFilePath']) 
     182                # Module file path may be None if the new module to be loaded 
     183                # can be found in the existing system path             
     184                if self.__prop['userRolesModFilePath'] is not None: 
     185                    if not os.path.exists(\ 
     186                              self.__prop['userRolesModFilePath']): 
     187                        raise Exception, "File path '%s' doesn't exist" % \ 
     188                              self.__prop['userRolesModFilePath'] 
     189                               
     190                    # Temporarily extend system path ready for import 
     191                    sysPathBak = sys.path[:] 
     192                               
     193                    sys.path.append(self.__prop['userRolesModFilePath']) 
    187194                 
    188195                # Import module name specified in properties file 
    189196                userRolesMod = __import__(self.__prop['userRolesModName'], 
    190                                          globals(), 
    191                                          locals(), 
    192                                          [self.__prop['userRolesClassName']]) 
     197                                          globals(), 
     198                                          locals(), 
     199                                          [self.__prop['userRolesClassName']]) 
    193200     
    194201                userRolesClass = eval('userRolesMod.' + \ 
    195202                                     self.__prop['userRolesClassName']) 
    196203            finally: 
    197                 sys.path[:] = sysPathBak 
     204                try: 
     205                    sys.path[:] = sysPathBak 
     206                except NameError: 
     207                    # sysPathBak may not have been defined 
     208                    pass 
    198209                                 
    199210        except Exception, e: 
     
    228239        """ 
    229240        if key not in self.__prop: 
    230             raise KeyError, "Invalid key " + key 
     241            raise KeyError, "Invalid key '%s'" % key 
    231242         
    232243        return self.__prop[key] 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/MyProxy.py

    r2017 r2063  
    272272        # Get properties as a data dictionary 
    273273        prop = {} 
    274         for elem in propElem: 
    275  
    276             # Check for environment variables in file paths 
    277             tagCaps = elem.tag.upper() 
    278             if 'FILE' in tagCaps or 'PATH' in tagCaps or 'DIR' in tagCaps: 
    279                 elem.text = os.path.expandvars(elem.text) 
    280  
    281             if elem.text.isdigit(): 
    282                 prop[elem.tag] = int(elem.text) 
    283             else: 
    284                 prop[elem.tag] = elem.text 
     274        try: 
     275            for elem in propElem: 
     276                # Check for string type to avoid exceptions from isdigit and 
     277                # expandvars 
     278                if isinstance(elem.text, basestring): 
     279                    if elem.text.isdigit(): 
     280                        prop[elem.tag] = int(elem.text) 
     281                    else: 
     282                        prop[elem.tag] = os.path.expandvars(elem.text) 
     283                else: 
     284                    prop[elem.tag] = elem.text 
     285                     
     286        except Exception, e: 
     287            raise SessionMgrError, \ 
     288                "Error parsing tag \"%s\" in properties file" % elem.tag 
    285289             
    286290        self.setProperties(**prop) 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/SessionMgr/SessionMgr_services_server.py

    r2058 r2063  
    2020          <xsd:sequence> 
    2121            <xsd:element maxOccurs=\"1\" minOccurs=\"1\" name=\"username\" type=\"xsd:string\"/> 
    22             <xsd:element maxOccurs=\"1\" minOccurs=\"1\" name=\"passPhrase\" type=\"xsd:string\"/> 
     22            <xsd:element maxOccurs=\"1\" minOccurs=\"1\" name=\"passphrase\" type=\"xsd:string\"/> 
    2323          </xsd:sequence> 
    2424        </xsd:complexType> 
     
    3333          <xsd:sequence> 
    3434            <xsd:element maxOccurs=\"1\" minOccurs=\"1\" name=\"username\" type=\"xsd:string\"/> 
    35             <xsd:element maxOccurs=\"1\" minOccurs=\"1\" name=\"passPhrase\" type=\"xsd:string\"/> 
     35            <xsd:element maxOccurs=\"1\" minOccurs=\"1\" name=\"passphrase\" type=\"xsd:string\"/> 
    3636                    <xsd:element maxOccurs=\"1\" minOccurs=\"1\" name=\"createServerSess\" type=\"xsd:boolean\"/> 
    3737                    <xsd:element maxOccurs=\"1\" minOccurs=\"1\" name=\"getCookie\" type=\"xsd:boolean\"/> 
     
    4343        <xsd:complexType> 
    4444                  <xsd:sequence> 
     45                    <xsd:element maxOccurs=\"1\" minOccurs=\"1\" name=\"proxyCert\" type=\"xsd:string\"/> 
     46                    <xsd:element maxOccurs=\"1\" minOccurs=\"1\" name=\"proxyPriKey\" type=\"xsd:string\"/> 
     47                    <xsd:element maxOccurs=\"1\" minOccurs=\"1\" name=\"userCert\" type=\"xsd:string\"/> 
    4548                    <xsd:element maxOccurs=\"1\" minOccurs=\"0\" name=\"cookie\" type=\"xsd:string\"/> 
    46                     <xsd:element maxOccurs=\"1\" minOccurs=\"0\" name=\"proxyCert\" type=\"xsd:string\"/> 
    4749                  </xsd:sequence> 
    4850                </xsd:complexType> 
     
    5254        <xsd:complexType> 
    5355                  <xsd:sequence> 
    54                     <xsd:element maxOccurs=\"1\" minOccurs=\"0\" name=\"proxyCert\" type=\"xsd:string\"/> 
     56                    <xsd:element maxOccurs=\"1\" minOccurs=\"0\" name=\"userCert\" type=\"xsd:string\"/> 
    5557                    <xsd:element maxOccurs=\"1\" minOccurs=\"0\" name=\"sessID\" type=\"xsd:string\"/> 
    5658                    <xsd:element maxOccurs=\"1\" minOccurs=\"0\" name=\"encrSessionMgrURI\" type=\"xsd:string\"/> 
     
    7476        <xsd:complexType> 
    7577                  <xsd:sequence> 
    76                     <xsd:element maxOccurs=\"1\" minOccurs=\"0\" name=\"proxyCert\" type=\"xsd:string\"/> 
     78                    <xsd:element maxOccurs=\"1\" minOccurs=\"0\" name=\"userCert\" type=\"xsd:string\"/> 
    7779                    <xsd:element maxOccurs=\"1\" minOccurs=\"0\" name=\"sessID\" type=\"xsd:string\"/> 
    7880                    <xsd:element maxOccurs=\"1\" minOccurs=\"0\" name=\"encrSessionMgrURI\" type=\"xsd:string\"/> 
     
    258260    def soap_addUser(self, ps): 
    259261        self.request = ps.Parse(addUserInputMsg.typecode) 
    260         parameters = (self.request._username, self.request._passPhrase) 
     262        parameters = (self.request._username, self.request._passphrase) 
    261263 
    262264        # If we have an implementation object use it 
     
    272274    def soap_connect(self, ps): 
    273275        self.request = ps.Parse(connectInputMsg.typecode) 
    274         parameters = (self.request._username, self.request._passPhrase, self.request._createServerSess, self.request._getCookie) 
     276        parameters = (self.request._username, self.request._passphrase, self.request._createServerSess, self.request._getCookie) 
    275277 
    276278        # If we have an implementation object use it 
     
    281283        # If we have an implementation object, copy the result  
    282284        if hasattr(self,'impl'): 
    283             # Should have a tuple of 2 args 
    284             result._cookie = parameters[0] 
    285             result._proxyCert = parameters[1] 
     285            # Should have a tuple of 4 args 
     286            result._proxyCert = parameters[0] 
     287            result._proxyPriKey = parameters[1] 
     288            result._userCert = parameters[2] 
     289            result._cookie = parameters[3] 
    286290        return self.request, result 
    287291 
     
    291295    def soap_disconnect(self, ps): 
    292296        self.request = ps.Parse(disconnectInputMsg.typecode) 
    293         parameters = (self.request._proxyCert, self.request._sessID, self.request._encrSessionMgrURI) 
     297        parameters = (self.request._userCert, self.request._sessID, self.request._encrSessionMgrURI) 
    294298 
    295299        # If we have an implementation object use it 
     
    305309    def soap_getAttCert(self, ps): 
    306310        self.request = ps.Parse(getAttCertInputMsg.typecode) 
    307         parameters = (self.request._proxyCert, self.request._sessID, self.request._encrSessionMgrURI, self.request._attAuthorityURI, self.request._attAuthorityCert, self.request._reqRole, self.request._mapFromTrustedHosts, self.request._rtnExtAttCertList, self.request._extAttCert, self.request._extTrustedHost) 
     311        parameters = (self.request._userCert, self.request._sessID, self.request._encrSessionMgrURI, self.request._attAuthorityURI, self.request._attAuthorityCert, self.request._reqRole, self.request._mapFromTrustedHosts, self.request._rtnExtAttCertList, self.request._extAttCert, self.request._extTrustedHost) 
    308312 
    309313        # If we have an implementation object use it 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/SessionMgr/__init__.py

    r2058 r2063  
    1313 
    1414reposID = '$Id$' 
     15 
     16# Modify sys.path when carrying out dynamic import for Credential Repository 
     17import sys 
    1518 
    1619# Time module for use with cookie expiry 
     
    235238    """Exception handling for NDG Session Manager class.""" 
    236239 
     240# Find the missing elements in targ referenced in ref 
     241getMissingElem = lambda targ, ref: [e for e in targ if e not in ref] 
     242 
     243# Expand environment variables for ElementTree Element type.  Use in  
     244# readProperties. 
     245filtElemTxt = lambda elem: isinstance(elem.text, basestring) and \ 
     246                os.path.expandvars(elem.text).strip() or elem.text 
     247 
    237248 
    238249#_____________________________________________________________________________ 
     
    251262    @cvar __propFileName: default file name for properties file under  
    252263    __confDir 
    253          
    254     @type getMissingElem: lambda function 
    255     @cvar getMissingElem: find the missing elements in targ referenced in ref 
    256264    """ 
    257265 
     
    259267    __validElem = \ 
    260268    { 
     269        'portNum':        None, 
    261270        'caCertFile':     None, 
    262271        'certFile':       None, 
    263272        'keyFile':        None, 
    264         'keyPwd':         None,  
     273        'keyPwd':         None, 
     274        'useSSL':         None, 
     275        'sslCertFile':    None, 
     276        'sslKeyFile':     None, 
    265277        'sessMgrEncrKey': None,  
    266278        'sessMgrURI':     None, 
    267279        'cookieDomain':   None,  
    268280        'myProxyProp':    None,  
    269         'credReposProp':  ('modFilePath', 'modName', 'className', 'propFile') 
     281        'credReposProp':  ('modFilePath', 'modName', 'className', 'propFile'), 
     282        'simpleCACltProp':('uri', 'xmlSigKeyFile', 'xmlSigCertFile',  
     283                           'xmlSigCertPwd') 
    270284    } 
    271285 
    272286    __confDir = "conf" 
    273287    __propFileName = "sessionMgrProperties.xml" 
    274          
    275     getMissingElem = lambda targ, ref: [e for e in targ if e not in ref] 
     288      
    276289     
    277290    #_________________________________________________________________________ 
     
    299312        self.__credRepos = None 
    300313         
    301  
    302314        # MyProxy interface 
    303315        try: 
     
    306318        except Exception, e: 
    307319            raise SessionMgrError, "Creating MyProxy interface: %s" % e 
    308  
    309                  
     320     
    310321        # Dictionary to hold properties       
    311322        self.__prop = {} 
    312323         
    313  
    314324        # Set from input or use defaults based or environment variables 
    315325        self.setPropFilePath(propFilePath) 
    316326         
    317          
    318327        # Set properties from file 
    319         if propFilePath is not None: 
    320             self.readProperties() 
    321  
    322             # Call here as we can safely expect that all Credential Repository 
    323             # parameters have been set above 
    324             self.loadCredReposInterface() 
    325  
    326          
     328        self.readProperties() 
     329 
     330        # Call here as we can safely expect that all Credential Repository 
     331        # parameters have been set above 
     332        self.loadCredReposInterface() 
     333 
    327334        # Set any properties that were provided by keyword input 
    328335        # 
     
    362369        try: 
    363370            try: 
    364                 # Temporarily extend system path ready for import 
    365                 sysPathBak = sys.path[:] 
    366                 sys.path.append(self.__prop['credReposProp']['modFilePath']) 
     371                # Module file path may be None if the new module to be loaded 
     372                # can be found in the existing system path             
     373                if self.__prop['credReposProp']['modFilePath'] is not None: 
     374                    # Temporarily extend system path ready for import 
     375                    sysPathBak = sys.path[:] 
     376 
     377                    if not os.path.exists(\ 
     378                              self.__prop['credReposProp']['modFilePath']): 
     379                        raise Exception, "File path '%s' doesn't exist" % \ 
     380                              self.__prop['credReposProp']['modFilePath'] 
     381                               
     382                    sys.path.append(\ 
     383                                self.__prop['credReposProp']['modFilePath']) 
    367384                 
    368385                # Import module name specified in properties file 
     
    376393                'credReposMod.' + self.__prop['credReposProp']['className']) 
    377394            finally: 
    378                 sys.path[:] = sysPathBak 
    379  
     395                try: 
     396                    sys.path[:] = sysPathBak 
     397                except NameError: 
     398                    # sysPathBak may not have been defined 
     399                    pass 
     400                 
    380401        except KeyError, e: 
    381402            raise SessionMgrError, \ 
     
    415436        """ 
    416437        if key not in self.__prop: 
    417             raise KeyError, "Invalid key " + key 
     438            raise KeyError, "Invalid key '%s'" % key 
    418439         
    419440        return self.__prop[key] 
     
    503524 
    504525 
    505         filtElemTxt = lambda elem: os.path.expandvars(elem.text).strip() 
    506526         
    507527        missingElem = [] 
     
    517537                             
    518538                    # Check for missing elements 
    519                     missingElem.extend(self.__class__.getMissingElem(\ 
     539                    missingElem.extend(getMissingElem(\ 
    520540                                           self.__validElem['credReposProp'], 
    521541                                           self.__prop['credReposProp'])) 
    522                          
     542                     
     543                elif elem.tag == 'simpleCACltProp': 
     544                    self.__prop['simpleCACltProp'] = \ 
     545                                dict([(e.tag, filtElemTxt(e)) for e in elem]) 
     546                             
     547                    # Check for missing elements 
     548                    missingElem.extend(getMissingElem(\ 
     549                                       self.__validElem['simpleCACltProp'], 
     550                                       self.__prop['simpleCACltProp'])) 
     551                     
    523552                elif elem.tag in self.__validElem: 
    524                     # Strip white space but not in the case of pass-phrase  
    525                     # field as pass-phrase might contain leading or  
     553                    # Strip white space but not in the case of password  
     554                    # field as password might contain leading or  
    526555                    # trailing white space 
    527                     if elem.text and elem.tag != 'keyPwd': 
    528                          
    529                         # Check for environment variables in file paths 
    530                         self.__prop[elem.tag] = filtElemTxt(elem) 
     556                    if elem.text is not None and elem.tag != 'keyPwd':                         
     557                        if elem.text.isdigit(): 
     558                            self.__prop[elem.tag] = int(elem.text) 
     559                        else:                             
     560                            # Check for environment variables in file paths 
     561                            self.__prop[elem.tag] = filtElemTxt(elem) 
    531562                    else: 
    532                         self.__prop[elem.tag] = elem.text                                          
     563                        self.__prop[elem.tag] = elem.text 
    533564                else: 
    534565                    invalidElem.append(elem.tag) 
     
    536567        except Exception, e: 
    537568            raise SessionMgrError, \ 
    538                 "Error parsing tag \"%s\" in properties file: %s" % \ 
    539                 (elem.tag, e) 
    540  
    541         missingElem.extend(self.__class__.getMissingElem(self.__prop,  
    542                                                          self.__validElem)) 
     569                "Error parsing tag \"%s\" in properties file" % elem.tag 
     570 
     571        missingElem.extend(getMissingElem(self.__prop, self.__validElem)) 
    543572        errMsg = '' 
    544573         
     
    641670        @param **kw: username and pass-phrase OR proxy certificate OR session  
    642671        ID keywords 
    643         @return tuple containing proxy certificate and session cookie  
    644         respectively.  Cookie will be None if getCookie is set to False.   
    645         Proxy cert. will be None if 'proxyCert' was set as an input.""" 
     672         
     673        @rtype: tuple 
     674        @return proxy certificate, proxy private key, user certificate and  
     675        session cookie respectively.  Cookie will be None if getCookie is set  
     676        to False. Proxy cert. will be None if 'proxyCert' was set as an input. 
     677        """ 
    646678         
    647679        # Initial proxy cert and cookie to be returned 
     
    669701                # Get a proxy certificate to represent users ID for the new 
    670702                # session 
    671                 proxyCert = self.__myPx.getDelegation(kw['username'],  
    672                                                       kw['passphrase'])     
     703                proxyCert, proxyPriKey, userCert = \ 
     704                        self.__myPx.logon(kw['username'], kw['passphrase'])     
    673705            except Exception, e: 
    674706                raise SessionMgrError, "Delegating from MyProxy: %s" % e 
     
    685717                                    cookieDomain=self.__prop['cookieDomain']) 
    686718                 
    687         # Return proxy certificate and cookie 
    688         return proxyCert, sessCookie         
     719        # Return proxy details and cookie 
     720        return proxyCert, proxyPriKey, userCert, sessCookie         
    689721         
    690722        
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/SessionMgr/server-config.tac

    r2058 r2063  
    2626        WSSecurityHandler, SignatureHandler 
    2727 
    28 # Use for stub testing only 
    29 from ndg.security.common.SessionCookie import SessionCookie 
    30 from datetime import datetime, timedelta 
    3128 
    3229class SessionMgrServiceSub(SessionMgrService, WSResource): 
     
    5148        request, response = SessionMgrService.soap_connect(self, ps) 
    5249 
    53         if request.get_element_getCookie(): 
    54             dtExpiry = datetime.utcnow() + timedelta(seconds=60*60) 
    55             cookie = SessionCookie(ndgID1='9'*64,  
    56                                    ndgID2='0'*64, 
    57                                    dtExpiry=dtExpiry) 
    58             response.set_element_cookie(cookie) 
    59         else:  
    60             response.set_element_proxyCert(proxyCert) 
     50        proxyCert, proxyPriKey, userCert, sessCookie = self.sm.connect(\ 
     51                                        username=request.get_element_username(), 
     52                                        passphrase=request.get_element_passphrase(), 
     53                                        createServerSess=request.get_element_createServerSess(), 
     54                                        getCookie=request.get_element_getCookie()) 
     55                                         
     56        response.set_element_proxyCert(proxyCert) 
     57        response.set_element_proxyPriKey(proxyPriKey) 
     58        response.set_element_userCert(userCert) 
     59        response.set_element_cookie(sessCookie) 
    6160                          
    6261        return request, response 
     
    7776        #import pdb;pdb.set_trace() 
    7877        request, response = SessionMgrService.soap_getX509Cert(self, ps) 
    79         response.set_element_x509Cert(open(certFilePath).read().strip()) 
     78        response.set_element_x509Cert(open(self.sm['certFile']).read().strip()) 
    8079        return request, response 
    8180 
     
    9796application = service.Application("SessionManagerContainer") 
    9897 
    99 # Use SSL connection 
    100 from twisted.internet import ssl 
    101  
    102 # Nb. ssl.DefaultOpenSSLContextFactory requires pyOpenSSL 
    103 ctxFactory = ssl.DefaultOpenSSLContextFactory(priKeyFilePath, certFilePath) 
    104 port = internet.SSLServer(portNum, siteFactory, ctxFactory) 
    105  
    106 # Non-SSL 
    107 #hostname = socket.gethostname() 
    108 #port = internet.TCPServer(portNum, siteFactory)#, interface=hostname) 
     98if smSrv.sm['useSSL']: 
     99        # Use SSL connection 
     100        from twisted.internet import ssl 
     101         
     102        # Nb. ssl.DefaultOpenSSLContextFactory requires pyOpenSSL 
     103        ctxFactory = ssl.DefaultOpenSSLContextFactory(smSrv.sm['sslKeyFile'],  
     104                                                                                                  smSrv.sm['sslCertFile']) 
     105        port = internet.SSLServer(smSrv.sm['portNum'], siteFactory, ctxFactory) 
     106else:    
     107        # Non-SSL 
     108        port = internet.TCPServer(smSrv.sm['portNum'], siteFactory) 
    109109 
    110110port.setServiceParent(application) 
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/SessionMgr/SessionMgrClientTest.py

    r2058 r2063  
    4646        # Omit traceFile keyword to leave out SOAP debug info 
    4747        self.clnt = SessionMgrClient(uri=self.cfg['setUp']['smuri'], 
    48                 smCertFilePath=self.cfg['setUp']['smcertfilepath'], 
     48                srvCertFilePath=self.cfg['setUp']['srvcertfilepath'], 
    4949                clntCertFilePath=self.cfg['setUp']['clntcertfilepath'], 
    5050                clntPriKeyFilePath=self.cfg['setUp']['clntprikeyfilepath'], 
     
    5454        self.sessCookie = None 
    5555        self.proxyCert = None 
    56  
     56        self.proxyPriKey = None 
     57        self.userCert = None 
    5758 
    5859    def test1AddUser(self): 
     
    6364             
    6465        # Note the pass-phrase is read from the file tmp.  To pass 
    65         # explicitly as a string use the 'pPhrase' keyword instead 
     66        # explicitly as a string use the 'passphrase' keyword instead 
    6667        self.clnt.addUser(self.cfg['test1AddUser']['username'],  
    67                           pPhrase=passphrase) 
     68                          passphrase=passphrase) 
    6869        print "Added user '%s'" % self.cfg['test1AddUser']['username'] 
    6970         
     
    7677        getpass.getpass(prompt="\ntest2CookieConnect pass-phrase for user: ") 
    7778 
    78         sSessCookie = self.clnt.connect(\ 
    79                                     self.cfg['test2CookieConnect']['username'],  
    80                                     pPhrase=passphrase) 
    81  
    82         self.sessCookie = SessionCookie(sSessCookie) 
     79        import pdb;pdb.set_trace() 
     80        userID = self.clnt.connect(self.cfg['test2CookieConnect']['username'],  
     81                                   passphrase=passphrase, 
     82                                   getCookie=True) 
     83 
     84        self.sessCookie = SessionCookie(userID[-1]) 
    8385        print "User '%s' connected to Session Manager:\n%s" % \ 
    8486            (self.cfg['test2CookieConnect']['username'], sSessCookie) 
     
    9395                    prompt="\ntest3ProxyCertConnect pass-phrase for user: ") 
    9496 
    95         self.proxyCert = self.clnt.connect(\ 
     97        self.proxyCert, self.proxyPriKey, self.userCert = self.clnt.connect(\ 
    9698                               self.cfg['test3ProxyCertConnect']['username'],  
    97                                pPhrase=passphrase, 
     99                               passphrase=passphrase, 
    98100                               createServerSess=True, 
    99101                               getCookie=False) 
     
    119121        print "\n\t" + self.test5ProxyCertDisconnect.__doc__ 
    120122        self.test3ProxyCertConnect() 
    121             
     123         
     124        # Use proxy to sign outbound SOAP message 
     125        self.clnt.clntCert = self.proxyCert 
     126        self.clnt.clntKey = self.proxyPriKey 
     127        self.clnt.clntPriKeyPwd = None 
     128         
    122129        self.clnt.disconnect(proxyCert=self.proxyCert) 
    123130        print "User disconnected from Session Manager:\n%s" % self.proxyCert 
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/SessionMgr/server.sh

    r2058 r2063  
    55# Session Manager client unit test - start server 
    66# 
    7 #@author P J Kershaw 25/01/06 
     7#@author P J Kershaw 25/01/07 
    88#                                                                                 
    99#@copyright (C) 2007 CCLRC & NERC 
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/SessionMgr/sessionMgrClientTest.cfg

    r2058 r2063  
    1717#aacertfilepath =  
    1818 
    19 # X.509 certificate for session manager  
    20 # If no public key is set, it will be retrieved using the getX509Cert WS  
    21 # method 
    22 smcertfilepath = ./smCert.pem 
     19# X.509 certificate for session manager.  If not set, it will be retrieved  
     20# using the getX509Cert WS method 
     21srvcertfilepath = ./sm-cert.pem 
    2322 
    2423# Password protecting client private key - if omitted it will be prompted for 
    2524# from tty 
    26 clntprikeypwd = x 
     25#clntprikeypwd =  
    2726 
    28 clntcertfilepath = ./clntCert.pem 
    29 clntprikeyfilepath = ./clntKey.pem 
     27clntcertfilepath = ./clnt-cert.pem 
     28clntprikeyfilepath = ./clnt-key.pem 
    3029 
    3130[test1AddUser] 
  • TI12-security/trunk/python/www/html/sessionMgr.wsdl

    r2058 r2063  
    1717          <xsd:sequence> 
    1818            <xsd:element name="username" type="xsd:string" minOccurs="1" maxOccurs="1"/> 
    19             <xsd:element name="passPhrase" type="xsd:string" minOccurs="1" maxOccurs="1"/> 
     19            <xsd:element name="passphrase" type="xsd:string" minOccurs="1" maxOccurs="1"/> 
    2020          </xsd:sequence> 
    2121        </xsd:complexType> 
     
    3030          <xsd:sequence> 
    3131            <xsd:element name="username" type="xsd:string" minOccurs="1" maxOccurs="1"/> 
    32             <xsd:element name="passPhrase" type="xsd:string" minOccurs="1" maxOccurs="1"/> 
     32            <xsd:element name="passphrase" type="xsd:string" minOccurs="1" maxOccurs="1"/> 
    3333                    <xsd:element name="createServerSess" type="xsd:boolean" minOccurs="1" maxOccurs="1"/> 
    3434                    <xsd:element name="getCookie" type="xsd:boolean" minOccurs="1" maxOccurs="1"/> 
     
    4040        <xsd:complexType> 
    4141                  <xsd:sequence> 
     42                    <xsd:element name="proxyCert" type="xsd:string" minOccurs="1" maxOccurs="1"/> 
     43                    <xsd:element name="proxyPriKey" type="xsd:string" minOccurs="1" maxOccurs="1"/> 
     44                    <xsd:element name="userCert" type="xsd:string" minOccurs="1" maxOccurs="1"/> 
    4245                    <xsd:element name="cookie" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
    43                     <xsd:element name="proxyCert" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
    4446                  </xsd:sequence> 
    4547                </xsd:complexType> 
     
    4951        <xsd:complexType> 
    5052                  <xsd:sequence> 
    51                     <xsd:element name="proxyCert" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
     53                    <xsd:element name="userCert" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
    5254                    <xsd:element name="sessID" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
    5355                    <xsd:element name="encrSessionMgrURI" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
     
    7173        <xsd:complexType> 
    7274                  <xsd:sequence> 
    73                     <xsd:element name="proxyCert" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
     75                    <xsd:element name="userCert" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
    7476                    <xsd:element name="sessID" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
    7577                    <xsd:element name="encrSessionMgrURI" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
Note: See TracChangeset for help on using the changeset viewer.