X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Ftrust%2Fcredential.py;h=37af67bdd211339dd31d2dc99faaf0e59b4e4099;hb=a0ef6e7c91c3c8fa376943d28fec8c5c204a78cd;hp=3f658fbd784855245a6dfe2067affb9cd3c49f9d;hpb=b835890db506439d1925577ccdc9ef4f0b3dc6ac;p=sfa.git diff --git a/sfa/trust/credential.py b/sfa/trust/credential.py index 3f658fbd..37af67bd 100644 --- a/sfa/trust/credential.py +++ b/sfa/trust/credential.py @@ -26,6 +26,8 @@ # Credentials are signed XML files that assign a subject gid privileges to an object gid ## +from __future__ import print_function + import os, os.path import subprocess from types import StringTypes @@ -181,21 +183,27 @@ class Signature(object): self.gid = gid def decode(self): + # Helper function to pull characters off the front of a string if present + def remove_prefix(text, prefix): + if text and prefix and text.startswith(prefix): + return text[len(prefix):] + return text + try: doc = parseString(self.xml) - except ExpatError,e: + except ExpatError as e: logger.log_exc ("Failed to parse credential, %s"%self.xml) raise sig = doc.getElementsByTagName("Signature")[0] ## This code until the end of function rewritten by Aaron Helsinger - ref_id = sig.getAttribute("xml:id").strip().strip("Sig_") + ref_id = remove_prefix(sig.getAttribute("xml:id").strip(), "Sig_") # The xml:id tag is optional, and could be in a # Reference xml:id or Reference UID sub element instead if not ref_id or ref_id == '': reference = sig.getElementsByTagName('Reference')[0] - ref_id = reference.getAttribute('xml:id').strip().strip('Sig_') + ref_id = remove_prefix(reference.getAttribute('xml:id').strip(), "Sig_") if not ref_id or ref_id == '': - ref_id = reference.getAttribute('URI').strip().strip('#') + ref_id = remove_prefix(reference.getAttribute('URI').strip(), "#") self.set_refid(ref_id) keyinfos = sig.getElementsByTagName("X509Data") gids = None @@ -722,7 +730,7 @@ class Credential(object): doc = None try: doc = parseString(self.xml) - except ExpatError,e: + except ExpatError as e: raise CredentialNotVerifiable("Malformed credential") doc = parseString(self.xml) sigs = [] @@ -852,7 +860,7 @@ class Credential(object): # or non PEM files trusted_cert_objects.append(GID(filename=f)) ok_trusted_certs.append(f) - except Exception, exc: + except Exception as exc: logger.error("Failed to load trusted cert from %s: %r"%( f, exc)) trusted_certs = ok_trusted_certs @@ -1148,7 +1156,7 @@ class Credential(object): # # @param dump_parents If true, also dump the parent certificates def dump (self, *args, **kwargs): - print self.dump_string(*args, **kwargs) + print(self.dump_string(*args, **kwargs)) # SFA code ignores show_xml and disables printing the cred xml def dump_string(self, dump_parents=False, show_xml=False): @@ -1191,7 +1199,7 @@ class Credential(object): result += "\nEnd XML\n" except: import traceback - print "exc. Credential.dump_string / XML" + print("exc. Credential.dump_string / XML") traceback.print_exc() return result