Changeset c922f23 for fedd/fedd_access.py
- Timestamp:
- Nov 19, 2008 7:24:16 PM (15 years ago)
- Branches:
- axis_example, compt_changes, info-ops, master, version-1.30, version-2.00, version-3.01, version-3.02
- Children:
- 058f58e
- Parents:
- dab4d56
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
fedd/fedd_access.py
rdab4d56 rc922f23 51 51 "dynamic_projects_cert_pwd", "dynamic_projects_trusted_certs") 52 52 id_list_attrs = ("restricted",) 53 54 proxy_request, proxy_xmlrpc_request = make_service_callers('RequestAccess', 55 'getfeddPortType', RequestAccessRequestMessage, 56 'RequestAccessRequestBody') 53 57 54 58 def __init__(self, config=None): … … 387 391 self.log.warning(("[read_state]: No saved state: " + \ 388 392 "Unpickling failed: %s") % e) 389 390 391 def proxy_xmlrpc_request(self, dt, req):392 """Send an XMLRPC proxy request. Called if the SOAP RPC fails"""393 394 # No retry loop here. Proxy servers must correctly authenticate395 # themselves without help396 try:397 ctx = fedd_ssl_context(self.proxy_cert_file,398 self.proxy_trusted_certs, password=self.proxy_cert_pwd)399 except SSL.SSLError:400 raise service_error(service_error.server_config,401 "Server certificates misconfigured")402 403 # Of all the dumbass things. The XMLRPC library in use here won't404 # properly encode unicode strings, so we make a copy of req with the405 # unicode objects converted. We also convert the destination testbed406 # to a basic string if it isn't one already.407 if isinstance(dt, str): url = dt408 else: url = str(dt)409 410 r = strip_unicode(copy.deepcopy(req))411 412 transport = SSL_Transport(ctx)413 port = xmlrpclib.ServerProxy(url, transport=transport)414 415 # Reconstruct the full request message416 try:417 resp = port.RequestAccess(418 { "RequestAccessRequestBody": r})419 resp, method = xmlrpclib.loads(resp)420 except xmlrpclib.Fault, f:421 se = service_error(None, f.faultString, f.faultCode)422 raise se423 except xmlrpclib.Error, e:424 raise service_error(service_error.proxy,425 "Remote XMLRPC Fault: %s" % e)426 427 if resp[0].has_key('RequestAccessResponseBody'):428 return resp[0]['RequestAccessResponseBody']429 else:430 raise service_error(service_error.proxy,431 "Bad proxy response")432 433 def proxy_request(self, dt, req):434 """435 Send req on to the real destination in dt and return the response436 437 Req is just the requestType object. This function re-wraps it. It438 also rethrows any faults.439 """440 # No retry loop here. Proxy servers must correctly authenticate441 # themselves without help442 try:443 ctx = fedd_ssl_context(self.proxy_cert_file,444 self.proxy_trusted_certs, password=self.proxy_cert_pwd)445 except SSL.SSLError:446 raise service_error(service_error.server_config,447 "Server certificates misconfigured")448 449 loc = feddServiceLocator();450 port = loc.getfeddPortType(dt,451 transport=M2Crypto.httpslib.HTTPSConnection,452 transdict={ 'ssl_context' : ctx })453 454 # Reconstruct the full request message455 msg = RequestAccessRequestMessage()456 msg.set_element_RequestAccessRequestBody(457 pack_soap(msg, "RequestAccessRequestBody", req))458 try:459 resp = port.RequestAccess(msg)460 except ZSI.ParseException, e:461 raise service_error(service_error.proxy,462 "Bad format message (XMLRPC??): %s" %463 str(e))464 r = unpack_soap(resp)465 466 if r.has_key('RequestAccessResponseBody'):467 return r['RequestAccessResponseBody']468 else:469 raise service_error(service_error.proxy,470 "Bad proxy response")471 393 472 394 def permute_wildcards(self, a, p): … … 779 701 try: 780 702 # Proxy the request using SOAP 781 return self.proxy_request(dt, req) 703 self.log.debug("Sending proxy message to %s" % dt) 704 resp = self.proxy_request(dt, req, feddServiceLocator, 705 self.proxy_cert_file, self.proxy_cert_pwd, 706 self.proxy_trusted_certs) 707 if resp.has_key('RequestAccessResponseBody'): 708 return resp['RequestAccessResponseBody'] 709 elif resp.has_key('Fedd_FaultBody'): 710 raise service_error(resp['FeddFaultBody']['code'], 711 resp['FeddFaultBody']['desc']) 782 712 except service_error, e: 783 713 if e.code == service_error.proxy: p_fault = None … … 791 721 # out. 792 722 if p_fault == None: 793 return self.proxy_xmlrpc_request(dt, req) 723 resp = self.proxy_xmlrpc_request(dt, req, self.proxy_cert_file, 724 self.proxy_cert_pwd, self.proxy_trusted_certs) 725 if resp.has_key('RequestAccessResponseBody'): 726 return resp['RequestAccessResponseBody'] 794 727 else: 795 728 # Build the fault
Note: See TracChangeset
for help on using the changeset viewer.