updated namespace to remove authority type from urn when converting to hrn
authorJosh Karlin <jkarlin@bbn.com>
Mon, 12 Jul 2010 15:10:18 +0000 (15:10 +0000)
committerJosh Karlin <jkarlin@bbn.com>
Mon, 12 Jul 2010 15:10:18 +0000 (15:10 +0000)
sfa/trust/gid.py
sfa/util/namespace.py

index f891c0e..c2f63bf 100644 (file)
@@ -196,28 +196,26 @@ class GID(Certificate):
     # for a principal that is not a member of that authority. For example,
     # planetlab.us.arizona cannot sign a GID for planetlab.us.princeton.foo.
 
+
     def verify_chain(self, trusted_certs = None):
         # do the normal certificate verification stuff
         trusted_root = Certificate.verify_chain(self, trusted_certs)        
-
-        test_gid = None
+       
         if self.parent:
-            test_gid = self.parent
+            # make sure the parent's hrn is a prefix of the child's hrn
+            if not self.get_hrn().startswith(self.parent.get_hrn()):
+                print self.get_hrn(), " ", self.parent.get_hrn()
+                raise GidParentHrn(self.parent.get_subject())
         else:
-            test_gid = GID(string=trusted_root.save_to_string())
-
-        test_type = test_gid.get_type()
-        test_hrn = test_gid.get_hrn()
-        if test_type == 'authority':
-            # Could add a check for type == 'authority'
-            test_hrn = test_hrn[:test_hrn.rindex('.')]
-        cur_hrn = self.get_hrn()
-        if not self.get_hrn().startswith(test_hrn):
-            GidParentHrn(test_hrn + " " + self.get_hrn())
+            # make sure that the trusted root's hrn is a prefix of the child's
+            trusted_gid = GID(string=trusted_root.save_to_string())
+            trusted_type = trusted_gid.get_type()
+            trusted_hrn = trusted_gid.get_hrn()
+            if trusted_type == 'authority':
+                # Could add a check for type == 'authority'
+                trusted_hrn = trusted_hrn[:trusted_hrn.rindex('.')]
+            cur_hrn = self.get_hrn()
+            if not self.get_hrn().startswith(trusted_hrn):
+                raise GidParentHrn(trusted_hrn + " " + self.get_hrn())
 
         return
-
-
-
-
-
index e898f3c..c771d71 100644 (file)
@@ -75,8 +75,9 @@ def urn_to_hrn(urn):
     # join list elements using '.'
     hrn = '.'.join([part.replace(':', '.') for part in hrn_parts if part]) 
     
+    # Remove the authority name (e.g. '.sa')
     if type == 'authority':
-        hrn = hrn.replace ('.sa', '')
+        hrn = hrn[:hrn.rindex('.')]        
    
     return str(hrn), str(type)