From edb59e64bb9c465ffcbf83d4cb48eb0e260ff647 Mon Sep 17 00:00:00 2001 From: Thierry Parmentelat Date: Wed, 7 Dec 2011 15:16:10 +0100 Subject: [PATCH] harden fragile code --- sfa/managers/registry_manager.py | 2 +- sfa/managers/slice_manager.py | 13 ++----------- sfa/plc/plshell.py | 12 ++++++++---- 3 files changed, 11 insertions(+), 16 deletions(-) diff --git a/sfa/managers/registry_manager.py b/sfa/managers/registry_manager.py index 8c0e5862..c0560358 100644 --- a/sfa/managers/registry_manager.py +++ b/sfa/managers/registry_manager.py @@ -27,7 +27,7 @@ class RegistryManager: # The GENI GetVersion call def GetVersion(self, api, options={}): - peers = dict ( [ (hrn,interface._ServerProxy__host) for (hrn,interface) in api.registries.iteritems() + peers = dict ( [ (hrn,interface.get_url()) for (hrn,interface) in api.registries.iteritems() if hrn != api.hrn]) xrn=Xrn(api.hrn) return version_core({'interface':'registry', diff --git a/sfa/managers/slice_manager.py b/sfa/managers/slice_manager.py index 76ea6d27..b5c5fdc8 100644 --- a/sfa/managers/slice_manager.py +++ b/sfa/managers/slice_manager.py @@ -42,18 +42,9 @@ class SliceManager: return True return False - # we have specialized xmlrpclib.ServerProxy to remember the input url - # OTOH it's not clear if we're only dealing with XMLRPCServerProxy instances - def get_serverproxy_url (self, server): - try: - return server.get_url() - except: - logger.warning("GetVersion, falling back to xmlrpclib.ServerProxy internals") - return server._ServerProxy__host + server._ServerProxy__handler - def GetVersion(self, api, options={}): # peers explicitly in aggregates.xml - peers =dict ([ (peername,self.get_serverproxy_url(v)) for (peername,v) in api.aggregates.iteritems() + peers =dict ([ (peername,interface.get_url()) for (peername,interface) in api.aggregates.iteritems() if peername != api.hrn]) version_manager = VersionManager() ad_rspec_versions = [] @@ -76,7 +67,7 @@ class SliceManager: sm_version=version_core(version_more) # local aggregate if present needs to have localhost resolved if api.hrn in api.aggregates: - local_am_url=self.get_serverproxy_url(api.aggregates[api.hrn]) + local_am_url=api.aggregates[api.hrn].get_url() sm_version['peers'][api.hrn]=local_am_url.replace('localhost',sm_version['hostname']) return sm_version diff --git a/sfa/plc/plshell.py b/sfa/plc/plshell.py index eaa772a9..ffe138df 100644 --- a/sfa/plc/plshell.py +++ b/sfa/plc/plshell.py @@ -37,10 +37,14 @@ class PlShell: hostname=urlparse(url).hostname is_local=False if hostname == 'localhost': is_local=True - # otherwise compare IP addresses - url_ip=socket.gethostbyname(hostname) - local_ip=socket.gethostbyname(socket.gethostname()) - if url_ip==local_ip: is_local=True + # otherwise compare IP addresses; + # this might fail for any number of reasons, so let's harden that + try: + url_ip=socket.gethostbyname(hostname) + local_ip=socket.gethostbyname(socket.gethostname()) + if url_ip==local_ip: is_local=True + except: + pass if is_local: try: -- 2.47.0