ProtoGeni slice names have special characters. Filter these out using re.sub()
authorTony Mack <tmack@paris.CS.Princeton.EDU>
Mon, 27 Sep 2010 16:54:04 +0000 (12:54 -0400)
committerTony Mack <tmack@paris.CS.Princeton.EDU>
Mon, 27 Sep 2010 16:54:04 +0000 (12:54 -0400)
sfa/managers/aggregate_manager_pl.py
sfa/util/namespace.py

index 05beae9..fe4e53d 100644 (file)
@@ -5,7 +5,7 @@ import datetime
 import time
 import traceback
 import sys
-
+import re
 from types import StringTypes
 from sfa.util.namespace import *
 from sfa.util.rspec import *
@@ -37,19 +37,23 @@ def __get_registry_objects(slice_xrn, creds, users):
     reg_objects = None
 
     if users:
+        # dont allow special characters in the site login base
+        only_alphanumeric = re.compile('[^a-zA-Z0-9]+')
+        login_base = only_alphanumeric.sub('', hrn_auth[:20]).lower()
+  
         reg_objects = {}
 
         site = {}
         site['site_id'] = 0
-        site['name'] = 'geni.%s' % hrn_auth[:20]
+        site['name'] = 'geni.%s' % login_base 
         site['enabled'] = True
         site['max_slices'] = 100
 
         # Note:
         # Is it okay if this login base is the same as one already at this myplc site?
         # Do we need uniqueness?  Should use hrn_auth instead of just the leaf perhaps?
-        site['login_base'] = hrn_auth[:20]
-        site['abbreviated_name'] = hrn_auth[:20]
+        site['login_base'] = login_base
+        site['abbreviated_name'] = login_base
         site['max_slivers'] = 1000
         reg_objects['site'] = site
 
index f53808c..b94eb1d 100644 (file)
@@ -1,6 +1,6 @@
 ### $Id$
 ### $URL$
-
+import re
 from sfa.util.faults import *
 URN_PREFIX = "urn:publicid:IDN"
 
@@ -66,16 +66,20 @@ def urn_to_hrn(urn):
     name = urn[len(URN_PREFIX):]
     hrn_parts = name.split("+")
     type = hrn_parts.pop(2)
-
+    
+         
     # Remove the authority name (e.g. '.sa')
     if type == 'authority':
         hrn_parts = hrn_parts[:-1]
 
     # convert hrn_parts (list) into hrn (str) by doing the following    
+    # dont allow special characters (except ':') in the site login base
     # remove blank elements
     # replace ':' with '.'
     # join list elements using '.'
-    hrn = '.'.join([part.replace(':', '.') for part in hrn_parts if part]) 
+    only_alphanum = re.compile('[^a-zA-Z0-9:]+')
+    valid_chars = lambda x: only_alphanum.sub('', x).replace(':', '.')
+    hrn = '.'.join([valid_chars(part) for part in hrn_parts if part]) 
     
     return str(hrn), str(type)