Changeset 2685
- Timestamp:
- 03/07/07 09:35:48 (14 years ago)
- Location:
- TI12-security/trunk/python
- Files:
-
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
TI12-security/trunk/python/ndg-security-install.py
r2402 r2685 67 67 help="Install server package only.") 68 68 69 parser.add_option("-u", 70 "--install-unittests", 71 dest="installUnitTests", 72 action="store_true", 73 default=False, 74 help="Install unit test package only.") 75 69 76 parser.add_option("-o", 70 77 "--openssl-path", … … 103 110 # Sanity check 104 111 nInstallArgs = sum((self.opt.installClient, 105 self.opt.installServer, 112 self.opt.installServer, 113 self.opt.installUnitTests, 106 114 self.opt.installAll)) 107 115 if not nInstallArgs: … … 122 130 self.installTwisted() 123 131 132 elif self.opt.installUnitTests: 133 main(['-f', self.opt.dependencyLinks, "ndg_security_test"]) 134 self.installTwisted() 135 124 136 elif self.opt.installAll: 125 137 main(['-f', self.opt.dependencyLinks, "ndg_security"]) -
TI12-security/trunk/python/ndg.security.client/setup.py
r2403 r2685 30 30 setup( 31 31 name = 'ndg_security_client', 32 version = '0. 7.4',32 version = '0.8.0', 33 33 description = 'NERC DataGrid Security Utilities', 34 34 long_description = 'Software for securing NDG resources', … … 51 51 #'exclude_package_data = {} 52 52 entry_points = _entryPoints, 53 #'t Sest_suite = 'ndg.utils.test.suite',53 #'test_suite = 'ndg.utils.test.suite', 54 54 zip_safe = False 55 55 ) -
TI12-security/trunk/python/ndg.security.common/ndg/security/common/AttAuthority/__init__.py
r2679 r2685 26 26 27 27 # Determine https http transport 28 import urlparse 28 import urlparse, httplib 29 29 from ZSI.wstools.Utility import HTTPResponse 30 30 … … 54 54 tracefile=None, 55 55 sslCACertList=[], 56 sslCACertFilePathList=[], 56 57 sslPeerCertCN=None, 57 58 setSignatureHandler=True, … … 65 66 extra WS debug information 66 67 67 @type transdict: dict 68 @keyword transdict: keywords to connection transport used by 69 ZSI.client.Binding. If transport type is HTTPS, 70 m2CryptoSSLUtility.HTTPSConnection is used. This is a customisation 71 of the M2Crypto version to enable setting of specific peer cert DN or 72 CN to check against. By default, the peer's hostname is expected to 73 equal the peer CN. 68 @type sslCACertList: list 69 @keyword sslCACertList: This keyword is for use with SSL connections 70 only. Set a list of one ore more CA certificates. The peer cert. 71 must verify against at least one of these otherwise the connection 72 is dropped. 73 74 @type sslCACertFilePathList: list 75 @keyword sslCACertFilePathList: the same as the above except CA certs 76 can be passed as a list of file paths to read from 74 77 75 78 @type sslPeerCertCN: string 76 @keyword sslPeerCertCN: short cut to the above for setting an 77 alternate CommonName to match with peer cert. Setting this 78 keyword avoids messing around with transdict keyword explicitly. 79 This keyword is for use with SSL connections only. 79 @keyword sslPeerCertCN: set an alternate CommonName to match with peer 80 cert. This keyword is for use with SSL connections only. 80 81 81 82 @type setSignatureHandler: bool … … 98 99 if sslCACertList: 99 100 self.__setSSLCACertList(sslCACertList) 100 101 elif sslCACertFilePathList: 102 self.__setSSLCACertFilePathList(sslCACertFilePathList) 101 103 102 104 # WS-Security Signature handler - set only if any of the keywords were … … 116 118 #_________________________________________________________________________ 117 119 def __setURI(self, uri): 118 120 """Set URI for service 121 @type uri: string 122 @param uri: URI for service to connect to""" 119 123 if not isinstance(uri, basestring): 120 124 raise AttAuthorityClientError, \ … … 142 146 needed if the peer cert CN = peer hostname""" 143 147 if self._transport != HTTPSConnection: 144 raise AttAuthorityClientError, \ 145 "Setting peer cert CN - transport type must be HTTPS" 148 return 146 149 147 150 if self._transdict.get('postConnectionCheck'): … … 159 162 which the peer cert must verify its signature against""" 160 163 if self._transport != HTTPSConnection: 161 raise AttAuthorityClientError, \ 162 "Setting SSL check CA cert list - transport type must be HTTPS" 163 164 if self._transdict['postConnectionCheck']: 164 return 165 166 if self._transdict.get('postConnectionCheck'): 165 167 self._transdict['postConnectionCheck'].caCertList = caCertList 166 168 else: … … 170 172 sslCACertList = property(fset=__setSSLCACertList, 171 173 doc="for https connections, set list of CA certs from which to verify peer cert") 174 175 176 #_________________________________________________________________________ 177 def __setSSLCACertFilePathList(self, caCertFilePathList): 178 """For use with HTTPS connections only. Specify CA certs to one of 179 which the peer cert must verify its signature against""" 180 if self._transport != HTTPSConnection: 181 return 182 183 if self._transdict.get('postConnectionCheck'): 184 self._transdict['postConnectionCheck'].caCertFilePathList = \ 185 caCertFilePathList 186 else: 187 self._transdict['postConnectionCheck'] = \ 188 HostCheck(caCertFilePathList=caCertFilePathList) 189 190 sslCACertFilePathList = property(fset=__setSSLCACertFilePathList, 191 doc="for https connections, set list of CA cert files from which to verify peer cert") 172 192 173 193 … … 193 213 fset=__setSignatureHandler, 194 214 doc="SignatureHandler object") 195 196 197 #_________________________________________________________________________198 def __setClntCertFilePath(self, clntCertFilePath):199 200 if not isinstance(clntCertFilePath, basestring):201 raise AttAuthorityClientError, \202 "Client public key file path must be a valid string"203 204 self.__clntCertFilePath = clntCertFilePath205 206 try:207 self.__clntCert = open(self.__clntCertFilePath).read()208 209 except IOError, (errNo, errMsg):210 raise AttAuthorityClientError, \211 "Reading certificate file \"%s\": %s" % \212 (self.__clntCertFilePath, errMsg)213 214 except Exception, e:215 raise AttAuthorityClientError, \216 "Reading certificate file \"%s\": %s" % \217 (self.__clntCertFilePath, str(e))218 219 clntCertFilePath = property(fset=__setClntCertFilePath,220 doc="File path for client public key")221 222 223 #_________________________________________________________________________224 def __setClntPriKeyFilePath(self, clntPriKeyFilePath):225 226 if not isinstance(clntPriKeyFilePath, basestring):227 raise AttAuthorityClientError(\228 "Client public key file path must be a valid string")229 230 self.__clntPriKeyFilePath = clntPriKeyFilePath231 232 clntPriKeyFilePath = property(fset=__setClntPriKeyFilePath,233 doc="File path for client private key")234 235 236 #_________________________________________________________________________237 def __setClntPriKeyPwd(self, clntPriKeyPwd):238 239 if not isinstance(clntPriKeyPwd, basestring):240 raise SessionMgrClientError, \241 "Client private key password must be a valid string"242 243 self.__clntPriKeyPwd = clntPriKeyPwd244 245 clntPriKeyPwd = property(fset=__setClntPriKeyPwd,246 doc="Password protecting client private key file")247 215 248 216 … … 281 249 """ 282 250 283 hostname, aaURI, loginURI = self.__srv.getHostInfo() 284 251 try: 252 hostname, aaURI, loginURI = self.__srv.getHostInfo() 253 except httplib.BadStatusLine, e: 254 raise AttAuthorityClientError, "HTTP bad status line: %s" % e 255 285 256 hostInfo = {} 286 257 hostInfo[hostname] = {'aaURI': aaURI, 'loginURI': loginURI} … … 301 272 from the map configuration""" 302 273 303 trustedHosts = self.__srv.getTrustedHostInfo(role) 274 try: 275 trustedHosts = self.__srv.getTrustedHostInfo(role) 276 except httplib.BadStatusLine, e: 277 raise AttAuthorityClientError, "HTTP bad status line: %s" % e 304 278 305 279 # Convert into dictionary form as used by AttAuthority class … … 355 329 userAttCert = userAttCert.toString() 356 330 357 sAttCert, msg = self.__srv.getAttCert(userId, userCert, userAttCert) 331 try: 332 sAttCert, msg = self.__srv.getAttCert(userId, userCert, userAttCert) 333 except httplib.BadStatusLine, e: 334 raise AttAuthorityClientError, "HTTP bad status line: %s" % e 335 358 336 if sAttCert: 359 337 return AttCertParse(sAttCert) … … 369 347 @return X.509 certificate for Attribute Authority""" 370 348 371 return self.__srv.getX509Cert() 349 try: 350 return self.__srv.getX509Cert() 351 except httplib.BadStatusLine, e: 352 raise AttAuthorityClientError, "HTTP bad status line: %s" % e -
TI12-security/trunk/python/ndg.security.common/ndg/security/common/CredWallet.py
r2530 r2685 439 439 # BinarySecurityToken containing proxy cert and user cert that issued 440 440 # the proxy 441 441 442 reqBinSecTokValType=SignatureHandler.binSecTokValType["X509PKIPathv1"] 442 443 certChain = (self.__userCert, self.__proxyCert) … … 447 448 signingCertChain=certChain, 448 449 signingPriKey=self.__proxyPriKey, 449 caCertFilePathList=caCertFilePathList) 450 caCertFilePathList=caCertFilePathList, 451 sslCACertFilePathList=caCertFilePathList) 450 452 return aaClnt 451 453 … … 935 937 936 938 # Repeat authorisation attempts until succeed or means are exhausted 939 import pdb;pdb.set_trace() 937 940 while True: 938 941 -
TI12-security/trunk/python/ndg.security.common/ndg/security/common/SessionMgr/__init__.py
r2679 r2685 48 48 uri=None, 49 49 tracefile=None, 50 transdict={}, 50 sslCACertList=[], 51 sslCACertFilePathList=[], 51 52 sslPeerCertCN=None, 52 53 setSignatureHandler=True, … … 61 62 WS debug information 62 63 63 @type transdict: dict 64 @keyword transdict: keywords to connection transport used by 65 ZSI.client.Binding. If transport type is HTTPS, 66 m2CryptoSSLUtility.HTTPSConnection is used. This is a customisation 67 of the M2Crypto version to enable setting of specific peer cert DN or 68 CN to check against. By default, the peer's hostname is expected to 69 equal the peer CN. 64 @type sslCACertList: list 65 @keyword sslCACertList: This keyword is for use with SSL connections 66 only. Set a list of one ore more CA certificates. The peer cert. 67 must verify against at least one of these otherwise the connection 68 is dropped. 69 70 @type sslCACertFilePathList: list 71 @keyword sslCACertFilePathList: the same as the above except CA certs 72 can be passed as a list of file paths to read from 70 73 71 74 @type sslPeerCertCN: string 72 @keyword sslPeerCertCN: short cut to the above for setting an 73 alternate CommonName to match with peer cert. Setting this 74 keyword avoids messing around with transdict keyword explicitly. 75 This keyword is for use with SSL connections only. 75 @keyword sslPeerCertCN: set an alternate CommonName to match with peer 76 cert. This keyword is for use with SSL connections only. 76 77 77 78 @type setSignatureHandler: bool … … 84 85 self.__srv = None 85 86 self.__uri = None 86 self. transdict = transdict87 self._transdict = {} 87 88 88 89 if uri: … … 91 92 if sslPeerCertCN: 92 93 self.__setSSLPeerCertCN(sslPeerCertCN) 94 95 if sslCACertList: 96 self.__setSSLCACertList(sslCACertList) 97 elif sslCACertFilePathList: 98 self.__setCACertFilePathList(sslCACertFilePathList) 93 99 94 100 # WS-Security Signature handler - set only if any of the keywords were … … 109 115 #_________________________________________________________________________ 110 116 def __setURI(self, uri): 111 "Set URI property method" 117 """Set URI for service 118 @type uri: string 119 @param uri: URI for service to connect to""" 112 120 113 121 if not isinstance(uri, basestring): … … 123 131 124 132 if scheme == "https": 125 self._ _transport = HTTPSConnection133 self._transport = HTTPSConnection 126 134 else: 127 self._ _transport = None135 self._transport = None 128 136 129 137 # Ensure SSL settings are cancelled … … 138 146 Name to match with Common Name of the peer certificate. This is not 139 147 needed if the peer cert CN = peer hostname""" 140 if cn is None: 141 # Remove any HostCheck object created previously 142 try: 143 del self.transdict['postConnectionCheck'] 144 except KeyError: 145 pass 146 elif self.transdict['postConnectionCheck']: 147 self.transdict['postConnectionCheck'].peerCertCN = cn 148 if self._transport != HTTPSConnection: 149 return 150 151 if self._transdict.get('postConnectionCheck'): 152 self._transdict['postConnectionCheck'].peerCertCN = cn 148 153 else: 149 self. transdict['postConnectionCheck'] = HostCheck(peerCertCN=cn)154 self._transdict['postConnectionCheck'] = HostCheck(peerCertCN=cn) 150 155 151 156 sslPeerCertCN = property(fset=__setSSLPeerCertCN, 152 157 doc="for https connections, set CN of peer cert if other than peer hostname") 158 159 160 #_________________________________________________________________________ 161 def __setSSLCACertList(self, caCertList): 162 """For use with HTTPS connections only. Specify CA certs to one of 163 which the peer cert must verify its signature against""" 164 if self._transport != HTTPSConnection: 165 return 166 167 if self._transdict.get('postConnectionCheck'): 168 self._transdict['postConnectionCheck'].caCertList = caCertList 169 else: 170 self._transdict['postConnectionCheck'] = \ 171 HostCheck(caCertList=caCertList) 172 173 sslCACertList = property(fset=__setSSLCACertList, 174 doc="for https connections, set list of CA certs from which to verify peer cert") 175 176 177 #_________________________________________________________________________ 178 def __setSSLCACertFilePathList(self, caCertFilePathList): 179 """For use with HTTPS connections only. Specify CA certs to one of 180 which the peer cert must verify its signature against""" 181 if self._transport != HTTPSConnection: 182 raise AttAuthorityClientError, \ 183 "Setting SSL check CA cert list - transport type must be HTTPS" 184 185 if self._transdict.get('postConnectionCheck'): 186 self._transdict['postConnectionCheck'].caCertFilePathList = \ 187 caCertFilePathList 188 else: 189 self._transdict['postConnectionCheck'] = \ 190 HostCheck(caCertList=caCertList) 191 192 sslCACertFilePathList = property(fset=__setSSLCACertFilePathList, 193 doc="for https connections, set list of CA cert files from which to verify peer cert") 153 194 154 195 … … 188 229 sig_handler=self.__signatureHandler, 189 230 tracefile=self.__tracefile, 190 transport=self._ _transport,191 transdict=self. transdict)231 transport=self._transport, 232 transdict=self._transdict) 192 233 except HTTPResponse, e: 193 234 raise SessionMgrClientError, \ -
TI12-security/trunk/python/ndg.security.common/ndg/security/common/m2CryptoSSLUtility.py
r2679 r2685 2 2 import socket 3 3 4 from M2Crypto import SSL 4 from M2Crypto import SSL, X509 5 5 from M2Crypto.httpslib import HTTPSConnection as _HTTPSConnection 6 6 … … 15 15 setting match for peer cert""" 16 16 17 def __init__(self, peerCertDN=None, peerCertCN=None, caCertList=[], **kw): 17 def __init__(self, 18 peerCertDN=None, 19 peerCertCN=None, 20 caCertList=[], 21 caCertFilePathList=[], 22 **kw): 18 23 """Override parent class __init__ to enable setting of myProxyServerDN 19 24 setting … … 29 34 30 35 @type caCertList: list type of M2Crypto.X509.X509 types 31 @keyword caCert : CA X.509 certificates - if set the peer cert's36 @keyword caCertList: CA X.509 certificates - if set the peer cert's 32 37 CA signature is verified against one of these. At least one must 33 verify""" 38 verify 39 40 @type caCertFilePathList: list string types 41 @keyword caCertFilePathList: same as caCertList except input as list 42 of CA cert file paths""" 34 43 35 44 SSL.Checker.Checker.__init__(self, **kw) … … 37 46 self.peerCertDN = peerCertDN 38 47 self.peerCertCN = peerCertCN 39 self.caCertList = caCertList 40 48 if caCertList: 49 self.caCertList = caCertList 50 elif caCertFilePathList: 51 self.caCertFilePathList = caCertFilePathList 52 41 53 42 54 def __call__(self, peerCert, host=None): … … 81 93 82 94 95 #_________________________________________________________________________ 96 def __setCACertsFromFileList(self, caCertFilePathList): 97 '''Read CA certificates from file and add them to the X.509 98 stack 99 100 @type caCertFilePathList: list or tuple 101 @param caCertFilePathList: list of file paths for CA certificates to 102 be used to verify certificate used to sign message''' 103 104 if not isinstance(caCertFilePathList, list) and \ 105 not isinstance(caCertFilePathList, tuple): 106 raise AttributeError, \ 107 'Expecting a list or tuple for "caCertFilePathList"' 108 109 self.__caCertStack = X509Stack() 110 111 for caCertFilePath in caCertFilePathList: 112 self.__caCertStack.push(X509.load_cert(caCertFilePath)) 113 114 caCertFilePathList = property(fset=__setCACertsFromFileList, 115 doc="list of CA cert file paths - peer cert must validate against one") 116 117 83 118 class HTTPSConnection(_HTTPSConnection): 84 119 … … 89 124 self._postConnectionCheck = kw['postConnectionCheck'] 90 125 del kw['postConnectionCheck'] 91 126 else: 127 self._postConnectionCheck = SSL.Checker.Checker 128 92 129 _HTTPSConnection.__init__(self, *args, **kw) 93 130 -
TI12-security/trunk/python/ndg.security.common/setup.py
r2403 r2685 68 68 setup( 69 69 name = 'ndg_security_common', 70 version = '0. 7.4',71 description = 70 version = '0.8.0', 71 description = \ 72 72 '''NERC DataGrid Security virtual package containing common utilities used 73 73 noth by server and client packages''', -
TI12-security/trunk/python/ndg.security.server/setup.py
r2403 r2685 32 32 ] 33 33 34 # Installation location for configuration and share files35 #ndgDir = os.environ.get('NDG_DIR') or os.environ.get('NDG_HOME') or \36 # os.path.join('/', 'etc', 'ndg')37 #38 #dataSubDirs = ('conf', 'share')39 #dataDirs = {}.fromkeys(dataSubDirs)40 #for dir in dataSubDirs:41 # dataDirs[dir] = os.path.join(ndgDir, dir)42 #43 # # Ensure path is set up OK44 # try:45 # os.makedirs(dataDirs[dir], 0755)46 # except OSError, e:47 # if e.errno != 17:48 # raise SystemExit, "Error creating data directory: " + str(e)49 # else:50 # pass51 34 52 35 setup( 53 36 name = 'ndg_security_server', 54 version = '0. 7.4',37 version = '0.8.0', 55 38 description = 'NERC DataGrid Security Services', 56 39 long_description = 'Server side component for securing NDG resources', -
TI12-security/trunk/python/ndg.security.test/ndg/security/test/AttAuthority/attAuthorityClientTest.cfg
r2679 r2685 10 10 # ! SiteBMapConfig.xml trusted site A aaURI setting must agree with this 11 11 # setting for test6GetMappedAttCert 12 #uri = http://localhost:5000/AttributeAuthority13 uri = https://localhost:5000/AttributeAuthority12 uri = http://localhost:5000/AttributeAuthority 13 #uri = https://localhost:5000/AttributeAuthority 14 14 #uri = http://glue.badc.rl.ac.uk/DEWS/MarineDataServer/AttributeAuthority 15 15 #uri = http://glue.badc.rl.ac.uk/DEWS/HealthDataServer/AttributeAuthority … … 36 36 # ValueType for BinarySecurityToken element of WSSE header. Specify 37 37 # 'X509PKIPathv1' for use with proxy certificates 38 #reqbinsectokvaltype = X509v338 reqbinsectokvaltype = X509v3 39 39 #reqbinsectokvaltype = X509 40 reqbinsectokvaltype = X509PKIPathv140 #reqbinsectokvaltype = X509PKIPathv1 41 41 42 42 # Test with proxy certificates or with standard certs. Comment out as 43 43 # appropriate 44 proxycertfilepath = ./proxy-cert.pem44 #proxycertfilepath = ./proxy-cert.pem 45 45 46 46 # Test without proxy certificates - uses AA server side cert/private key for 47 47 # client side too (!) 48 #clntcertfilepath = ./aa-cert.pem48 clntcertfilepath = ./aa-cert.pem 49 49 50 #clntprikeyfilepath = ./aa-key.pem51 clntprikeyfilepath = ./proxy-key.pem50 clntprikeyfilepath = ./aa-key.pem 51 #clntprikeyfilepath = ./proxy-key.pem 52 52 53 53 # Space separated list of CA certificate files used to verify certificate used … … 81 81 # ValueType for BinarySecurityToken element of WSSE header. Specify 82 82 # 'X509PKIPathv1' for use with proxy certificates 83 #reqbinsectokvaltype = X509v383 reqbinsectokvaltype = X509v3 84 84 #reqbinsectokvaltype = X509 85 reqbinsectokvaltype = X509PKIPathv185 #reqbinsectokvaltype = X509PKIPathv1 86 86 87 87 # Test with proxy certificates or with standard certs. Comment out as 88 88 # appropriate 89 proxycertfilepath = ./proxy-cert.pem90 #clntcertfilepath = ./aa-cert.pem89 #proxycertfilepath = ./proxy-cert.pem 90 clntcertfilepath = ./aa-cert.pem 91 91 92 92 clntprikeypwd = 93 93 clntprikeyfilepath = ./proxy-key.pem 94 #clntprikeyfilepath = ./aa-key.pem94 clntprikeyfilepath = ./aa-key.pem 95 95 96 96 # Space separated list of CA certificate files used to verify certificate used -
TI12-security/trunk/python/ndg.security.test/ndg/security/test/AttAuthority/siteAAttAuthorityProperties.xml
r2679 r2685 3 3 <name>Site A</name> 4 4 <portNum>5000</portNum> 5 <useSSL> Yes</useSSL> <!-- leave blank to use http -->5 <useSSL></useSSL> <!-- leave blank to use http --> 6 6 <sslCertFile>$NDGSEC_AA_UNITTEST_DIR/aa-cert.pem</sslCertFile> 7 7 <sslKeyFile>$NDGSEC_AA_UNITTEST_DIR/aa-key.pem</sslKeyFile> -
TI12-security/trunk/python/ndg.security.test/ndg/security/test/SessionMgr/SessionMgrClientTest.py
r2679 r2685 29 29 30 30 from ndg.security.common.SessionCookie import SessionCookie 31 from ndg.security.common.X509 import X509CertParse 31 from ndg.security.common.X509 import X509CertParse, X509CertRead 32 32 33 33 … … 82 82 except: 83 83 caCertFilePathList = [] 84 85 try: 86 sslCACertList = [X509CertRead(file) for file in \ 87 self.cfg['setUp']['sslcacertfilepathlist'].split()] 88 except KeyError: 89 sslCACertList = [] 84 90 85 91 … … 99 105 # Omit traceFile keyword to leave out SOAP debug info 100 106 self.clnt = SessionMgrClient(uri=self.cfg['setUp']['smuri'], 101 sslCACertList= caCertFilePathList,107 sslCACertList=sslCACertList, 102 108 sslPeerCertCN=self.cfg['setUp'].get('sslpeercertcn'), 103 109 setSignatureHandler=setSignatureHandler, -
TI12-security/trunk/python/ndg.security.test/ndg/security/test/SessionMgr/sessionMgrClientTest.cfg
r2679 r2685 12 12 smuri = https://localhost:5700/SessionManager 13 13 14 # For https connections only. The expected CommonName of peer cert. Omit 15 # if it's the same as peer hostname 14 # For https connections only. !Omit ssl* settings if using http! 15 # sslpeercertcn is the expected CommonName of peer cert. Omit if it's the 16 # same as peer hostname. 16 17 sslpeercertcn = webSphereTest 18 sslcacertfilepathlist = cacert.pem 17 19 18 20 # Set to False to test service without WS-Security signature … … 60 62 61 63 [test6GetAttCertUsingSessID] 62 aaURI = http ://localhost:5000/AttributeAuthority64 aaURI = https://localhost:5000/AttributeAuthority 63 65 64 66 [test6aGetAttCertRefusedUsingSessID] … … 72 74 73 75 [test7GetAttCertUsingProxyCert] 74 aaURI = http ://localhost:5000/AttributeAuthority76 aaURI = https://localhost:5000/AttributeAuthority 75 77 76 78 -
TI12-security/trunk/python/ndg.security.test/setup.py
r2403 r2685 33 33 setup( 34 34 name = 'ndg_security_test', 35 version = '0. 7.4',35 version = '0.8.0', 36 36 description = 'NERC DataGrid Security Unit tests', 37 37 long_description = 'Unit tests client - server side', -
TI12-security/trunk/python/setup.py
r2403 r2685 25 25 setup( 26 26 name = 'ndg_security', 27 version = '0. 7.4',27 version = '0.8.0', 28 28 description = 'NERC DataGrid Security Utilities', 29 29 long_description = 'Software for securing NDG resources',
Note: See TracChangeset
for help on using the changeset viewer.