Changeset 2931


Ignore:
Timestamp:
05/10/07 17:55:51 (12 years ago)
Author:
pjkersha
Message:

Updated Attribute Authority adding new info to the map configuration:

  • The DN of Attribute Authority cert
  • the cert DN of the Login Service https server
  • the cert DN for the https server making REQUESTS to the Login Service. This enables the latter to validate requests and prevent phishing attacks.

Also added a new WSDL operation getAllHostsInfo. This combines getHostInfo and getTrustedHostInfo simplifying code for the WAYF.

ndg.security.common/ndg/security/common/m2CryptoSSLUtility.py: HostCheck? class can now accept multiple peerCertDNs to validate against.

Location:
TI12-security/trunk/python
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/AttAuthority/AttAuthority_services.py

    r2909 r2931  
    2929        # no ws-addressing 
    3030 
    31     # op: <ZSI.wstools.WSDLTools.Message instance at 0xb6cf48ac> 
     31    # op: <ZSI.wstools.WSDLTools.Message instance at 0x40736bcc> 
    3232    def getAttCert(self, userId,userCert,userAttCert): 
    3333 
     
    4646        return attCert,msg 
    4747 
    48     # op: <ZSI.wstools.WSDLTools.Message instance at 0xb6cf4bcc> 
     48    # op: <ZSI.wstools.WSDLTools.Message instance at 0x4077006c> 
    4949    def getHostInfo(self): 
    5050 
     
    5858        hostname = response._hostname 
    5959        aaURI = response._aaURI 
     60        aaDN = response._aaDN 
    6061        loginURI = response._loginURI 
    61         return hostname,aaURI,loginURI 
     62        loginServerDN = response._loginServerDN 
     63        loginRequestServerDN = response._loginRequestServerDN 
     64        return hostname,aaURI,aaDN,loginURI,loginServerDN,loginRequestServerDN 
    6265 
    63     # op: <ZSI.wstools.WSDLTools.Message instance at 0xb6cfb56c> 
     66    # op: <ZSI.wstools.WSDLTools.Message instance at 0x40770dec> 
    6467    def getTrustedHostInfo(self, role): 
    6568 
     
    7578        return trustedHosts 
    7679 
    77     # op: <ZSI.wstools.WSDLTools.Message instance at 0xb6cfb6ec> 
     80    # op: <ZSI.wstools.WSDLTools.Message instance at 0x40770f8c> 
     81    def getAllHostsInfo(self): 
     82 
     83        request = getAllHostsInfoInputMsg() 
     84 
     85        kw = {} 
     86        # no input wsaction 
     87        self.binding.Send(None, None, request, soapaction="getAllHostsInfo", **kw) 
     88        # no output wsaction 
     89        response = self.binding.Receive(getAllHostsInfoOutputMsg.typecode) 
     90        hosts = response._hosts 
     91        return hosts 
     92 
     93    # op: <ZSI.wstools.WSDLTools.Message instance at 0x4077712c> 
    7894    def getX509Cert(self): 
    7995 
     
    100116getTrustedHostInfoOutputMsg = ns0.getTrustedHostInfoResponse_Dec().pyclass 
    101117 
     118getAllHostsInfoInputMsg = ns0.getAllHostsInfo_Dec().pyclass 
     119 
     120getAllHostsInfoOutputMsg = ns0.getAllHostsInfoResponse_Dec().pyclass 
     121 
    102122getX509CertInputMsg = ns0.getX509Cert_Dec().pyclass 
    103123 
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/AttAuthority/AttAuthority_services_types.py

    r2909 r2931  
    2323        def __init__(self, pname, ofwhat=(), attributes=None, extend=False, restrict=False, **kw): 
    2424            ns = ns0.HostInfo_Def.schema 
    25             TClist = [ZSI.TC.String(pname="hostname", aname="_hostname", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="aaURI", aname="_aaURI", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="loginURI", aname="_loginURI", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="roleList", aname="_roleList", minOccurs=0, maxOccurs="unbounded", nillable=False, typed=False, encoded=kw.get("encoded"))] 
     25            TClist = [ZSI.TC.String(pname="hostname", aname="_hostname", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="aaURI", aname="_aaURI", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="aaDN", aname="_aaDN", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="loginURI", aname="_loginURI", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="loginServerDN", aname="_loginServerDN", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="loginRequestServerDN", aname="_loginRequestServerDN", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="roleList", aname="_roleList", minOccurs=0, maxOccurs="unbounded", nillable=False, typed=False, encoded=kw.get("encoded"))] 
    2626            self.attribute_typecode_dict = attributes or {} 
    2727            if extend: TClist += ofwhat 
     
    3535                    self._hostname = None 
    3636                    self._aaURI = None 
     37                    self._aaDN = None 
    3738                    self._loginURI = None 
     39                    self._loginServerDN = None 
     40                    self._loginRequestServerDN = None 
    3841                    self._roleList = [] 
    3942                    return 
     
    108111        def __init__(self, **kw): 
    109112            ns = ns0.getHostInfoResponse_Dec.schema 
    110             TClist = [ZSI.TC.String(pname="hostname", aname="_hostname", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="aaURI", aname="_aaURI", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="loginURI", aname="_loginURI", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded"))] 
     113            TClist = [ZSI.TC.String(pname="hostname", aname="_hostname", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="aaURI", aname="_aaURI", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="aaDN", aname="_aaDN", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="loginURI", aname="_loginURI", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="loginServerDN", aname="_loginServerDN", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="loginRequestServerDN", aname="_loginRequestServerDN", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded"))] 
    111114            kw["pname"] = ("urn:ndg:security:attAuthority","getHostInfoResponse") 
    112115            kw["aname"] = "_getHostInfoResponse" 
     
    120123                    self._hostname = None 
    121124                    self._aaURI = None 
     125                    self._aaDN = None 
    122126                    self._loginURI = None 
     127                    self._loginServerDN = None 
     128                    self._loginRequestServerDN = None 
    123129                    return 
    124130            Holder.__name__ = "getHostInfoResponse_Holder" 
     
    165171            self.pyclass = Holder 
    166172 
     173    class getAllHostsInfo_Dec(ZSI.TCcompound.ComplexType, ElementDeclaration): 
     174        literal = "getAllHostsInfo" 
     175        schema = "urn:ndg:security:attAuthority" 
     176        def __init__(self, **kw): 
     177            ns = ns0.getAllHostsInfo_Dec.schema 
     178            TClist = [] 
     179            kw["pname"] = ("urn:ndg:security:attAuthority","getAllHostsInfo") 
     180            kw["aname"] = "_getAllHostsInfo" 
     181            self.attribute_typecode_dict = {} 
     182            ZSI.TCcompound.ComplexType.__init__(self,None,TClist,inorder=0,**kw) 
     183            class Holder: 
     184                __metaclass__ = pyclass_type 
     185                typecode = self 
     186                def __init__(self): 
     187                    # pyclass 
     188                    return 
     189            Holder.__name__ = "getAllHostsInfo_Holder" 
     190            self.pyclass = Holder 
     191 
     192    class getAllHostsInfoResponse_Dec(ZSI.TCcompound.ComplexType, ElementDeclaration): 
     193        literal = "getAllHostsInfoResponse" 
     194        schema = "urn:ndg:security:attAuthority" 
     195        def __init__(self, **kw): 
     196            ns = ns0.getAllHostsInfoResponse_Dec.schema 
     197            TClist = [GTD("urn:ndg:security:attAuthority","HostInfo",lazy=False)(pname="hosts", aname="_hosts", minOccurs=0, maxOccurs="unbounded", nillable=False, typed=False, encoded=kw.get("encoded"))] 
     198            kw["pname"] = ("urn:ndg:security:attAuthority","getAllHostsInfoResponse") 
     199            kw["aname"] = "_getAllHostsInfoResponse" 
     200            self.attribute_typecode_dict = {} 
     201            ZSI.TCcompound.ComplexType.__init__(self,None,TClist,inorder=0,**kw) 
     202            class Holder: 
     203                __metaclass__ = pyclass_type 
     204                typecode = self 
     205                def __init__(self): 
     206                    # pyclass 
     207                    self._hosts = [] 
     208                    return 
     209            Holder.__name__ = "getAllHostsInfoResponse_Holder" 
     210            self.pyclass = Holder 
     211 
    167212    class getX509Cert_Dec(ZSI.TCcompound.ComplexType, ElementDeclaration): 
    168213        literal = "getX509Cert" 
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/AttAuthority/__init__.py

    r2927 r2931  
    277277 
    278278        try: 
    279             hostname, aaURI, loginURI = self.__srv.getHostInfo() 
     279            # Convert return tuple into list to enable use of pop() later 
     280            response = list(self.__srv.getHostInfo()) 
    280281        except httplib.BadStatusLine, e: 
    281282            raise AttAuthorityClientError, "HTTP bad status line: %s" % e 
     
    291292            raise e 
    292293 
    293         hostInfo = {} 
    294         hostInfo[hostname] = {'aaURI': aaURI, 'loginURI': loginURI} 
     294        # Unpack response into dict 
     295        hostInfoKw = ['hostname', 
     296                      'aaURI', 
     297                      'aaDN', 
     298                      'loginURI', 
     299                      'loginServerDN', 
     300                      'loginRequestServerDN'] 
     301        hostInfoKw.reverse() 
     302        hostInfo = dict([(k, response.pop()) for k in hostInfoKw]) 
    295303 
    296304        return hostInfo 
     
    327335        # Convert into dictionary form as used by AttAuthority class 
    328336        trustedHostInfo = {} 
    329         for trustedHost in trustedHosts: 
    330             hostname = trustedHost.get_element_hostname() 
     337        for host in trustedHosts: 
     338            hostname = host.get_element_hostname() 
    331339             
    332340            trustedHostInfo[hostname] = \ 
    333341            { 
    334                 'aaURI':    trustedHost.get_element_aaURI(), 
    335                 'loginURI': trustedHost.get_element_loginURI(), 
    336                 'role':     trustedHost.get_element_roleList() 
     342                'aaURI': host.AaURI, 
     343                'aaDN': host.AaDN, 
     344                'loginURI': host.LoginURI, 
     345                'loginServerDN': host.LoginServerDN, 
     346                'loginRequestServerDN': host.LoginRequestServerDN, 
     347                'role': host.RoleList 
    337348            } 
    338349             
    339350        return trustedHostInfo 
    340      
    341  
    342     #_________________________________________________________________________ 
    343     def getAttCert(self, userId=None, userCert=None, userAttCert=None): 
    344         """Request attribute certificate from NDG Attribute Authority Web  
    345         Service. 
    346          
    347         @type userId: string 
    348         @param userId: DN of the X.509 certificate used in SOAP digital  
    349         signature corresponds to the *holder* of the Attribute Certificate 
    350         that is issued.  Set this additional field to specify an alternate 
    351         user ID to associate with the AC.  This is useful in the case where, 
    352         as in the DEWS project, the holder will be a server cert. rather than 
    353         a user proxy cert. 
    354          
    355         If this keword is omitted, userId in the AC will default to the same 
    356         value as the holder DN. 
    357          
    358         @type userCert: string 
    359         @param userCert: certificate corresponding to proxy private key and 
    360         proxy cert used to sign the request.  Enables server to establish 
    361         chain of trust proxy -> user cert -> CA cert.  If a standard  
    362         private key is used to sign the request, this argument is not  
    363         needed. 
    364          
    365         @type userAttCert: string / AttCert 
    366         @param userAttCert: user attribute certificate from which to make a  
    367         mapped certificate at the target attribute authority.  userAttCert 
    368         must have been issued from a trusted host to the target.  This is not  
    369         necessary if the user is registered at the target Attribute Authority. 
    370          
    371         @rtype ndg.security.common.AttCert.AttCert 
    372         @return attribute certificate for user.  iIf access is refused,  
    373         AttributeRequestDenied is raised""" 
    374  
    375         # Ensure cert is serialized before passing over web service interface 
    376         if isinstance(userAttCert, AttCert): 
    377             userAttCert = userAttCert.toString() 
    378  
    379         try: 
    380             sAttCert, msg = self.__srv.getAttCert(userId,userCert,userAttCert)   
     351 
     352                                     
     353    #_________________________________________________________________________ 
     354    def getAllHostsInfo(self): 
     355        """Get list of all hosts for an Attribute Authority i.e. itself and 
     356        all the hosts it trusts 
     357         
     358        @rtype: dict 
     359        @return: dictionary of host information indexed by hostname derived  
     360        from the map configuration""" 
     361             
     362        try: 
     363            hosts = self.__srv.getAllHostsInfo() 
     364 
    381365        except httplib.BadStatusLine, e: 
    382             raise AttAuthorityClientError, \ 
    383                 'Calling "%s" HTTP bad status line: %s' % (self.__uri, e) 
     366            raise AttAuthorityClientError, "HTTP bad status line: %s" % e 
    384367 
    385368        except Exception, e: 
     
    392375            # Catch all     
    393376            raise e 
     377 
     378        # Convert into dictionary form as used by AttAuthority class 
     379        allHostInfo = {} 
     380        for host in hosts: 
     381            hostname = host.Hostname 
     382             
     383            allHostInfo[hostname] = \ 
     384            { 
     385                'aaURI': host.AaURI, 
     386                'aaDN': host.AaDN, 
     387                'loginURI': host.LoginURI, 
     388                'loginServerDN': host.LoginServerDN, 
     389                'loginRequestServerDN': host.LoginRequestServerDN, 
     390            } 
     391             
     392            # The Attribute Authority called doesn't have a role list for its 
     393            # entry 
     394            if hasattr(host, 'RoleList'): 
     395               allHostInfo[hostname]['role']= host.RoleList 
     396 
     397        return allHostInfo    
     398 
     399 
     400    #_________________________________________________________________________ 
     401    def getAttCert(self, userId=None, userCert=None, userAttCert=None): 
     402        """Request attribute certificate from NDG Attribute Authority Web  
     403        Service. 
     404         
     405        @type userId: string 
     406        @param userId: DN of the X.509 certificate used in SOAP digital  
     407        signature corresponds to the *holder* of the Attribute Certificate 
     408        that is issued.  Set this additional field to specify an alternate 
     409        user ID to associate with the AC.  This is useful in the case where, 
     410        as in the DEWS project, the holder will be a server cert. rather than 
     411        a user proxy cert. 
     412         
     413        If this keword is omitted, userId in the AC will default to the same 
     414        value as the holder DN. 
     415         
     416        @type userCert: string 
     417        @param userCert: certificate corresponding to proxy private key and 
     418        proxy cert used to sign the request.  Enables server to establish 
     419        chain of trust proxy -> user cert -> CA cert.  If a standard  
     420        private key is used to sign the request, this argument is not  
     421        needed. 
     422         
     423        @type userAttCert: string / AttCert 
     424        @param userAttCert: user attribute certificate from which to make a  
     425        mapped certificate at the target attribute authority.  userAttCert 
     426        must have been issued from a trusted host to the target.  This is not  
     427        necessary if the user is registered at the target Attribute Authority. 
     428         
     429        @rtype ndg.security.common.AttCert.AttCert 
     430        @return attribute certificate for user.  iIf access is refused,  
     431        AttributeRequestDenied is raised""" 
     432 
     433        # Ensure cert is serialized before passing over web service interface 
     434        if isinstance(userAttCert, AttCert): 
     435            userAttCert = userAttCert.toString() 
     436 
     437        try: 
     438            sAttCert, msg = self.__srv.getAttCert(userId,userCert,userAttCert)   
     439        except httplib.BadStatusLine, e: 
     440            raise AttAuthorityClientError, \ 
     441                'Calling "%s" HTTP bad status line: %s' % (self.__uri, e) 
     442 
     443        except Exception, e: 
     444            # Try to detect exception type from SOAP fault message 
     445            errMsg = str(e) 
     446            for excep in self.excepMap: 
     447                if excep in errMsg: 
     448                    raise self.excepMap[excep] 
     449                 
     450            # Catch all     
     451            raise e 
    394452         
    395453        if sAttCert: 
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/X509.py

    r2927 r2931  
    442442        @param caX509Stack: X.509 stack containing CA certificates that are 
    443443        trusted. 
    444         @type X509Stack""" 
     444        @type caX509Stack: X509Stack""" 
    445445         
    446446        if x509Cert2Verify is None: 
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/m2CryptoSSLUtility.py

    r2927 r2931  
    3737        setting 
    3838         
    39         @type peerCertDN: string 
     39        @type peerCertDN: string/list 
    4040        @param peerCertDN: Set the expected Distinguished Name of the 
    4141        server to avoid errors matching hostnames.  This is useful 
    42         where the hostname is not fully qualified 
     42        where the hostname is not fully qualified.  Alternatively set a list  
     43        of acceptable DNs.  This enables validation where the expected DN is 
     44        could be one a number of different identities. 
    4345         
    4446        @type peerCertCN: string 
     
    7981            # file setting 
    8082            peerCertDN='/'+peerCert.get_subject().as_text().replace(', ', '/') 
    81             if peerCertDN != self.peerCertDN: 
    82                 raise e 
     83             
     84            if isinstance(self.peerCertDN, list): 
     85                # At least one match should be found in the list 
     86                if not len([dn for dn in self.peerCertDN if peerCertDN==dn]): 
     87                    raise e 
     88            else: 
     89                if peerCertDN != self.peerCertDN: 
     90                    raise e 
    8391 
    8492        if len(self.__caCertStack) > 0: 
     
    146154        param *args: args which apply to M2Crypto.httpslib.HTTPSConnection 
    147155        type **kw: dict 
    148         param **kw: additional keywords - postConnectionCheck - set class for 
    149         checking peer, readTimeout - M2Crypto.SSL.timeout instance - set  
    150         timeout for read, similarly writeTimeout''' 
     156        param **kw: additional keywords 
     157        @type postConnectionCheck: SSL.Checker.Checker derivative 
     158        @keyword postConnectionCheck: set class for checking peer 
     159        @type readTimeout: M2Crypto.SSL.timeout 
     160        @keyword readTimeout: readTimeout - set timeout for read 
     161        @type writeTimeout: M2Crypto.SSL.timeout 
     162        @keyword writeTimeout: similar to read timeout''' 
    151163         
    152164        if 'postConnectionCheck' in kw: 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/AttAuthority/AttAuthority_services_server.py

    r2909 r2931  
    2121          <xsd:element maxOccurs=\"1\" minOccurs=\"1\" name=\"hostname\" type=\"xsd:string\"/> 
    2222          <xsd:element maxOccurs=\"1\" minOccurs=\"1\" name=\"aaURI\" type=\"xsd:string\"/> 
     23          <xsd:element maxOccurs=\"1\" minOccurs=\"1\" name=\"aaDN\" type=\"xsd:string\"/> 
    2324          <xsd:element maxOccurs=\"1\" minOccurs=\"1\" name=\"loginURI\" type=\"xsd:string\"/> 
     25          <xsd:element maxOccurs=\"1\" minOccurs=\"1\" name=\"loginServerDN\" type=\"xsd:string\"/> 
     26          <xsd:element maxOccurs=\"1\" minOccurs=\"1\" name=\"loginRequestServerDN\" type=\"xsd:string\"/> 
    2427          <xsd:element maxOccurs=\"unbounded\" minOccurs=\"0\" name=\"roleList\" type=\"xsd:string\"/> 
    2528        </xsd:sequence> 
     
    5457            <xsd:element maxOccurs=\"1\" minOccurs=\"1\" name=\"hostname\" type=\"xsd:string\"/> 
    5558            <xsd:element maxOccurs=\"1\" minOccurs=\"1\" name=\"aaURI\" type=\"xsd:string\"/> 
     59            <xsd:element maxOccurs=\"1\" minOccurs=\"1\" name=\"aaDN\" type=\"xsd:string\"/> 
    5660            <xsd:element maxOccurs=\"1\" minOccurs=\"1\" name=\"loginURI\" type=\"xsd:string\"/> 
     61            <xsd:element maxOccurs=\"1\" minOccurs=\"1\" name=\"loginServerDN\" type=\"xsd:string\"/> 
     62            <xsd:element maxOccurs=\"1\" minOccurs=\"1\" name=\"loginRequestServerDN\" type=\"xsd:string\"/> 
    5763          </xsd:sequence> 
    5864        </xsd:complexType> 
     
    7177          <xsd:sequence> 
    7278            <xsd:element maxOccurs=\"unbounded\" minOccurs=\"0\" name=\"trustedHosts\" type=\"tns:HostInfo\"/> 
     79          </xsd:sequence> 
     80        </xsd:complexType> 
     81      </xsd:element> 
     82 
     83      <xsd:element name=\"getAllHostsInfo\"> 
     84        <xsd:complexType/> 
     85      </xsd:element> 
     86 
     87      <xsd:element name=\"getAllHostsInfoResponse\"> 
     88        <xsd:complexType> 
     89          <xsd:sequence> 
     90            <xsd:element maxOccurs=\"unbounded\" minOccurs=\"0\" name=\"hosts\" type=\"tns:HostInfo\"/> 
    7391          </xsd:sequence> 
    7492        </xsd:complexType> 
     
    114132  </wsdl:message> 
    115133 
     134  <wsdl:message name=\"getAllHostsInfoInputMsg\"> 
     135    <wsdl:part element=\"tns:getAllHostsInfo\" name=\"parameters\"/> 
     136  </wsdl:message> 
     137 
     138  <wsdl:message name=\"getAllHostsInfoOutputMsg\"> 
     139    <wsdl:part element=\"tns:getAllHostsInfoResponse\" name=\"parameters\"/> 
     140  </wsdl:message> 
     141 
    116142  <wsdl:message name=\"getX509CertInputMsg\"> 
    117143    <wsdl:part element=\"tns:getX509Cert\" name=\"parameters\"/> 
     
    136162      <wsdl:input message=\"tns:getTrustedHostInfoInputMsg\"/> 
    137163      <wsdl:output message=\"tns:getTrustedHostInfoOutputMsg\"/> 
     164    </wsdl:operation> 
     165 
     166    <wsdl:operation name=\"getAllHostsInfo\"> 
     167      <wsdl:input message=\"tns:getAllHostsInfoInputMsg\"/> 
     168      <wsdl:output message=\"tns:getAllHostsInfoOutputMsg\"/> 
    138169    </wsdl:operation> 
    139170 
     
    169200    <wsdl:operation name=\"getTrustedHostInfo\"> 
    170201      <soap:operation soapAction=\"getTrustedHostInfo\"/> 
     202      <wsdl:input> 
     203        <soap:body use=\"literal\"/> 
     204      </wsdl:input> 
     205      <wsdl:output> 
     206        <soap:body use=\"literal\"/> 
     207      </wsdl:output>  
     208    </wsdl:operation> 
     209 
     210    <wsdl:operation name=\"getAllHostsInfo\"> 
     211      <soap:operation soapAction=\"getAllHostsInfo\"/> 
    171212      <wsdl:input> 
    172213        <soap:body use=\"literal\"/> 
     
    239280        # If we have an implementation object, copy the result  
    240281        if hasattr(self,'impl'): 
    241             # Should have a tuple of 3 args 
     282            # Should have a tuple of 6 args 
    242283            result._hostname = parameters[0] 
    243284            result._aaURI = parameters[1] 
    244             result._loginURI = parameters[2] 
     285            result._aaDN = parameters[2] 
     286            result._loginURI = parameters[3] 
     287            result._loginServerDN = parameters[4] 
     288            result._loginRequestServerDN = parameters[5] 
    245289        return self.request, result 
    246290 
     
    265309    root[(getTrustedHostInfoInputMsg.typecode.nspname,getTrustedHostInfoInputMsg.typecode.pname)] = 'soap_getTrustedHostInfo' 
    266310 
     311    def soap_getAllHostsInfo(self, ps): 
     312        self.request = ps.Parse(getAllHostsInfoInputMsg.typecode) 
     313 
     314        # If we have an implementation object use it 
     315        if hasattr(self,'impl'): 
     316            parameters = self.impl.getAllHostsInfo() 
     317 
     318        result = getAllHostsInfoOutputMsg() 
     319        # If we have an implementation object, copy the result  
     320        if hasattr(self,'impl'): 
     321            result._hosts = parameters 
     322        return self.request, result 
     323 
     324    soapAction['getAllHostsInfo'] = 'soap_getAllHostsInfo' 
     325    root[(getAllHostsInfoInputMsg.typecode.nspname,getAllHostsInfoInputMsg.typecode.pname)] = 'soap_getAllHostsInfo' 
     326 
    267327    def soap_getX509Cert(self, ps): 
    268328        self.request = ps.Parse(getX509CertInputMsg.typecode) 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/AttAuthority/__init__.py

    r2927 r2931  
    752752                "\"name\" element in properties file." 
    753753         
    754         self.__mapConfig['thisHost'][hostName] = \ 
    755         { 
    756             'loginURI':     thisHostElem.findtext('loginURI'), 
    757             'aaURI':         thisHostElem.findtext('aaURI') 
    758         }         
    759          
     754        # Information for THIS Attribute Authority 
     755        hostDict = {}.fromkeys(('aaURI', 
     756                                'aaDN', 
     757                                'loginURI', 
     758                                'loginServerDN', 
     759                                'loginRequestServerDN')) 
     760        self.__mapConfig['thisHost'][hostName] = hostDict.copy() 
     761        for k in self.__mapConfig['thisHost'][hostName]: 
     762            self.__mapConfig['thisHost'][hostName][k]=thisHostElem.findtext(k) 
    760763         
    761764        # Information about trusted hosts 
     
    784787            # 
    785788            # P J Kershaw 25/05/06 
    786             self.__mapConfig['trustedHosts'][trustedHost] = \ 
    787             { 
    788                 'loginURI':     elem.findtext('loginURI'), 
    789                 'aaURI':         elem.findtext('aaURI'), 
    790                 'role':         [dict(i.items()) for i in roleElem] 
    791             } 
    792  
    793                      
     789            self.__mapConfig['trustedHosts'][trustedHost] = hostDict.copy() 
     790            for k in self.__mapConfig['trustedHosts'][trustedHost]: 
     791                self.__mapConfig['trustedHosts'][trustedHost][k] = \ 
     792                                                        elem.findtext(k) 
     793             
     794            # Role keyword value requires special parsing before assingment 
     795            self.__mapConfig['trustedHosts'][trustedHost]['role'] = \ 
     796                                        [dict(i.items()) for i in roleElem] 
     797                    
    794798            self.__localRole2RemoteRole[trustedHost] = {} 
    795799            self.__remoteRole2LocalRole[trustedHost] = {} 
     
    840844        Attribute Authority represents 
    841845         
    842         Nb. this method is not used internally by AttAuthority class 
     846        Nb. this method is not used internally by AttAuthority class and is 
     847        not a required part of the AAUserRoles API 
    843848         
    844849        @type userId: string  
     
    924929                    k, \ 
    925930                    { 
    926                         'aaURI':       v['aaURI'], \ 
    927                         'loginURI':    v['loginURI'], \ 
     931                        'aaURI':                v['aaURI'], \ 
     932                        'aaDN':                 v['aaDN'], \ 
     933                        'loginURI':             v['loginURI'], \ 
     934                        'loginServerDN':        v['loginServerDN'], \ 
     935                        'loginRequestServerDN': v['loginRequestServerDN'], \ 
    928936                        'role':        {}.fromkeys(\ 
    929937                            [role['remote'] for role in v['role']]\ 
     
    949957        host, \ 
    950958        { 
    951             'aaURI':     self.__mapConfig['trustedHosts'][host]['aaURI'], 
     959            'aaURI': self.__mapConfig['trustedHosts'][host]['aaURI'], 
     960            'aaDN': self.__mapConfig['trustedHosts'][host]['aaDN'], 
    952961            'loginURI': self.__mapConfig['trustedHosts'][host]['loginURI'], 
    953             'role':     self.__localRole2RemoteRole[host][role] 
     962            'loginServerDN': \ 
     963            self.__mapConfig['trustedHosts'][host]['loginServerDN'], 
     964            'loginRequestServerDN': \ 
     965            self.__mapConfig['trustedHosts'][host]['loginRequestServerDN'], 
     966            'role': self.__localRole2RemoteRole[host][role] 
    954967        }\ 
    955968    ) for host in trustedHosts]) 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/conf/attAuthority.tac

    r2899 r2931  
    9999                         
    100100        return request, response 
    101  
     101        
    102102 
    103103    def soap_getHostInfo(self, ps, **kw): 
     
    115115         
    116116        response.Hostname = srv.aa.hostInfo.keys()[0] 
     117        response.AaURI = srv.aa.hostInfo[response.Hostname]['aaURI'] 
     118        response.AaDN = srv.aa.hostInfo[response.Hostname]['aaDN'] 
    117119        response.LoginURI = srv.aa.hostInfo[response.Hostname]['loginURI'] 
    118         response.AaURI = srv.aa.hostInfo[response.Hostname]['aaURI'] 
     120        response.LoginServerDN = \ 
     121                srv.aa.hostInfo[response.Hostname]['loginServerDN'] 
     122        response.LoginRequestServerDN = \ 
     123                srv.aa.hostInfo[response.Hostname]['loginRequestServerDN'] 
     124 
     125        return request, response 
     126        
     127 
     128    def soap_getAllHostsInfo(self, ps, **kw): 
     129        '''Get information about all hosts 
     130                 
     131        @type ps: ZSI ParsedSoap 
     132        @param ps: client SOAP message 
     133        @rtype: tuple 
     134        @return: request and response objects''' 
     135        if self.__debug: 
     136                import pdb 
     137                pdb.set_trace() 
     138                 
     139        request, response = AttAuthorityService.soap_getAllHostsInfo(self, ps) 
     140         
     141 
     142        trustedHostInfo = srv.aa.getTrustedHostInfo() 
     143 
     144                # Convert ready for serialization 
     145                 
     146                # First get info for THIS Attribute Authority ... 
     147                # Nb. No role lsit applies here 
     148        hosts = [response.new_hosts()] 
     149         
     150        hosts[0].Hostname = srv.aa.hostInfo.keys()[0] 
     151         
     152        hosts[0].AaURI = \ 
     153                srv.aa.hostInfo[hosts[0].Hostname]['aaURI'] 
     154        hosts[0].AaDN = \ 
     155                srv.aa.hostInfo[hosts[0].Hostname]['aaDN'] 
     156 
     157        hosts[0].LoginURI = srv.aa.hostInfo[hosts[0].Hostname]['loginURI'] 
     158        hosts[0].LoginServerDN = \ 
     159                srv.aa.hostInfo[hosts[0].Hostname]['loginServerDN'] 
     160        hosts[0].LoginRequestServerDN = \ 
     161                srv.aa.hostInfo[hosts[0].Hostname]['loginRequestServerDN'] 
     162         
     163                # ... then append info for other trusted attribute authorities... 
     164        for hostname, hostInfo in trustedHostInfo.items(): 
     165            host = response.new_hosts() 
     166                         
     167            host.Hostname = hostname 
     168            host.AaURI = hostInfo['aaURI'] 
     169            host.AaDN = hostInfo['aaDN'] 
     170            host.LoginURI = hostInfo['loginURI'] 
     171            host.LoginServerDN = hostInfo['loginServerDN'] 
     172            host.LoginRequestServerDN=hostInfo['loginRequestServerDN'] 
     173            host.RoleList = hostInfo['role'] 
     174                         
     175            hosts.append(host) 
     176                         
     177        response.Hosts = hosts 
    119178 
    120179        return request, response 
     
    144203            trustedHost.Hostname = hostname 
    145204            trustedHost.AaURI = hostInfo['aaURI'] 
     205            trustedHost.AaDN = hostInfo['aaDN'] 
    146206            trustedHost.LoginURI = hostInfo['loginURI'] 
    147             trustedHost.RoleList = hostInfo['role'] 
     207            trustedHost.LoginServerDN = hostInfo['loginServerDN'] 
     208            trustedHost.LoginRequestServerDN=hostInfo['loginRequestServerDN'] 
    148209                         
    149210            trustedHosts.append(trustedHost) 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/conf/mapConfig.xml

    r2035 r2931  
    44            <aaURI>badcAttAuthorityURI</aaURI> 
    55            <loginURI>badcLoginPageURI</loginURI> 
     6            <aaDN/> 
     7            <loginServerDN/> 
     8            <loginRequestServerDN/> 
    69        </thisHost> 
    710    <trusted name="BODC"> 
    811            <aaURI>bodcAttAuthorityURI</aaURI> 
    912            <loginURI>bodcLoginPageURI</loginURI> 
     13            <aaDN/> 
     14            <loginServerDN/> 
     15            <loginRequestServerDN/> 
    1016                <role remote="aBODCrole" local="aLocalRole"/> 
    1117    </trusted> 
    1218    <trusted name="escience"> 
    1319            <aaURI>eScienceAttAuthorityURI</aaURI> 
     20            <loginURI>eScienceLoginPageURI</loginURI> 
     21            <aaDN/> 
     22            <loginServerDN/> 
     23            <loginRequestServerDN/> 
    1424                <role remote="anEScienceRole" local="anotherLocalRole"/> 
    1525    </trusted> 
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/AttAuthority/AttAuthorityClientTest.py

    r2909 r2931  
    129129        trustedHostInfo = self.clnt.getTrustedHostInfo() 
    130130        print "Trusted Host Info:\n %s" % trustedHostInfo 
     131         
     132 
     133    def test4aGetAllHostsInfo(self): 
     134        """test4aGetAllHostsInfo: retrieve info for all hosts""" 
     135        hostInfo = self.clnt.getAllHostsInfo() 
     136        print "All Hosts Info:\n %s" % hostInfo 
    131137 
    132138 
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/AttAuthority/siteAMapConfig.xml

    r2926 r2931  
    44        <aaURI>http://localhost:5000/AttributeAuthority</aaURI> 
    55        <loginURI>https://localhost/login</loginURI> 
     6            <aaDN>/O=NDG/OU=Site A/CN=AttributeAuthority</aaDN> 
     7            <loginServerDN>/C=UK/ST=Oxfordshire/O=STFC/OU=BADC/CN=localhost</loginServerDN> 
     8            <loginRequestServerDN>/C=UK/ST=Oxfordshire/O=STFC/OU=BADC/CN=localhost</loginRequestServerDN> 
    69    </thisHost> 
    710    <trusted name="Site C"> 
    811        <aaURI>attAuthorityURI</aaURI> 
    912        <loginURI>http://www.sitec.blah/loginPageURI</loginURI> 
     13            <aaDN/> 
     14            <loginServerDN/> 
     15            <loginRequestServerDN/> 
    1016        <role remote="StaffMember" local="staff"/> 
    1117    </trusted> 
     
    1319        <aaURI>attAuthorityURI</aaURI> 
    1420        <loginURI>loginPageURI</loginURI> 
     21            <aaDN/> 
     22            <loginServerDN/> 
     23            <loginRequestServerDN/> 
    1524        <role remote="academic" local="postgrad"/> 
    1625        <role remote="student" local="SiteDStudent"/> 
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/AttAuthority/siteBMapConfig.xml

    r2350 r2931  
    44            <aaURI>http://localhost:5100/AttributeAuthority</aaURI> 
    55            <loginURI>thisHostLoginPageURI</loginURI> 
     6            <aaDN/> 
     7            <loginServerDN/> 
     8            <loginRequestServerDN/> 
    69        </thisHost> 
    710    <trusted name="Site A"> 
    811            <aaURI>http://localhost:5000/AttributeAuthority</aaURI> 
    912            <loginURI>loginPageURI</loginURI> 
     13            <aaDN/> 
     14            <loginServerDN/> 
     15            <loginRequestServerDN/> 
    1016                <role remote="postdoc" local="researcher"/> 
    1117    </trusted> 
  • TI12-security/trunk/python/www/html/attAuthority.wsdl

    r2178 r2931  
    1717          <xsd:element name="hostname" type="xsd:string" minOccurs="1" maxOccurs="1"/> 
    1818          <xsd:element name="aaURI" type="xsd:string" minOccurs="1" maxOccurs="1"/> 
     19          <xsd:element name="aaDN" type="xsd:string" minOccurs="1" maxOccurs="1"/> 
    1920          <xsd:element name="loginURI" type="xsd:string" minOccurs="1" maxOccurs="1"/> 
     21          <xsd:element name="loginServerDN" type="xsd:string" minOccurs="1" maxOccurs="1"/> 
     22          <xsd:element name="loginRequestServerDN" type="xsd:string" minOccurs="1" maxOccurs="1"/> 
    2023          <xsd:element name="roleList" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/> 
    2124        </xsd:sequence> 
     
    5053            <xsd:element name="hostname" type="xsd:string" minOccurs="1" maxOccurs="1"/> 
    5154            <xsd:element name="aaURI" type="xsd:string" minOccurs="1" maxOccurs="1"/> 
     55            <xsd:element name="aaDN" type="xsd:string" minOccurs="1" maxOccurs="1"/> 
    5256            <xsd:element name="loginURI" type="xsd:string" minOccurs="1" maxOccurs="1"/> 
     57            <xsd:element name="loginServerDN" type="xsd:string" minOccurs="1" maxOccurs="1"/> 
     58            <xsd:element name="loginRequestServerDN" type="xsd:string" minOccurs="1" maxOccurs="1"/> 
    5359          </xsd:sequence> 
    5460        </xsd:complexType> 
     
    6773          <xsd:sequence> 
    6874            <xsd:element name="trustedHosts" type="tns:HostInfo" minOccurs="0" maxOccurs="unbounded"/> 
     75          </xsd:sequence> 
     76        </xsd:complexType> 
     77      </xsd:element> 
     78 
     79      <xsd:element name="getAllHostsInfo"> 
     80        <xsd:complexType/> 
     81      </xsd:element> 
     82 
     83      <xsd:element name="getAllHostsInfoResponse"> 
     84        <xsd:complexType> 
     85          <xsd:sequence> 
     86            <xsd:element name="hosts" type="tns:HostInfo" minOccurs="0" maxOccurs="unbounded"/> 
    6987          </xsd:sequence> 
    7088        </xsd:complexType> 
     
    110128  </wsdl:message> 
    111129 
     130  <wsdl:message name="getAllHostsInfoInputMsg"> 
     131    <wsdl:part name="parameters" element="tns:getAllHostsInfo"/> 
     132  </wsdl:message> 
     133 
     134  <wsdl:message name="getAllHostsInfoOutputMsg"> 
     135    <wsdl:part name="parameters" element="tns:getAllHostsInfoResponse"/> 
     136  </wsdl:message> 
     137 
    112138  <wsdl:message name="getX509CertInputMsg"> 
    113139    <wsdl:part name="parameters" element="tns:getX509Cert"/> 
     
    132158      <wsdl:input message="tns:getTrustedHostInfoInputMsg"/> 
    133159      <wsdl:output message="tns:getTrustedHostInfoOutputMsg"/> 
     160    </wsdl:operation> 
     161 
     162    <wsdl:operation name="getAllHostsInfo"> 
     163      <wsdl:input message="tns:getAllHostsInfoInputMsg"/> 
     164      <wsdl:output message="tns:getAllHostsInfoOutputMsg"/> 
    134165    </wsdl:operation> 
    135166 
     
    175206    </wsdl:operation> 
    176207 
     208    <wsdl:operation name="getAllHostsInfo"> 
     209      <soap:operation soapAction="getAllHostsInfo"/> 
     210      <wsdl:input> 
     211        <soap:body use="literal"/> 
     212      </wsdl:input> 
     213      <wsdl:output> 
     214        <soap:body use="literal"/> 
     215      </wsdl:output>  
     216    </wsdl:operation> 
     217 
    177218    <wsdl:operation name="getX509Cert"> 
    178219      <soap:operation soapAction="getX509Cert"/> 
Note: See TracChangeset for help on using the changeset viewer.