fix bugs in delegate command
[sfa.git] / sfa / client / sfi.py
index 688dd2c..e4421aa 100755 (executable)
@@ -106,7 +106,7 @@ def save_record_to_file(filename, record):
     elif record['type'] in ['authority', 'ma', 'sa']:
         record = AuthorityRecord(dict = record)
     else:
-        record = GeniRecord(dict = record)
+        record = SfaRecord(dict = record)
     str = record.save_to_string()
     file(filename, "w").write(str)
     return
@@ -115,7 +115,7 @@ def save_record_to_file(filename, record):
 # load methods
 def load_record_from_file(filename):
     str = file(filename, "r").read()
-    record = GeniRecord(string=str)
+    record = SfaRecord(string=str)
     return record
 
 
@@ -372,13 +372,12 @@ class Sfi:
         else:
             # bootstrap user credential
             cert_string = self.cert.save_to_string(save_parents=True)
-            request_hash = self.key.compute_hash([cert_string, "user", self.user])
             user_name=self.user.replace(self.authority+".", '')
             if user_name.count(".") > 0:
                 user_name = user_name.replace(".", '_')
                 self.user=self.authority + "." + user_name
 
-            user_cred = self.registry.get_self_credential(cert_string, "user", self.user, request_hash)
+            user_cred = self.registry.get_self_credential(cert_string, "user", self.user)
             if user_cred:
                cred = Credential(string=user_cred)
                cred.save_to_file(file, save_parents=True)
@@ -449,7 +448,7 @@ class Sfi:
             raise Exception, "Error: Didn't find a %(type)s record for %(hrn)s" % locals()
     
         # the gid of the user who will be delegated too
-        record = GeniRecord(dict=records[0])
+        record = SfaRecord(dict=records[0])
         delegee_gid = record.get_gid_object()
         delegee_hrn = delegee_gid.get_hrn()
         
@@ -572,7 +571,7 @@ class Sfi:
             elif record['type'] in ['authority', 'ma', 'sa']:
                 record = AuthorityRecord(dict = record)
             else:
-                record = GeniRecord(dict = record)
+                record = SfaRecord(dict = record)
             if (opts.format=="text"): 
                 record.dump()  
             else:
@@ -603,7 +602,7 @@ class Sfi:
            print "Error: Object credential", object_hrn, "does not have delegate bit set"
            return
     
-       records = self.registry.resolve(user_cred, args[0])
+       records = self.registry.resolve(user_cred.save_to_string(save_parents=True), args[0])
        records = filter_records("user", records)
     
        if not records:
@@ -611,14 +610,15 @@ class Sfi:
            return
     
        # the gid of the user who will be delegated too
-       delegee_gid = records[0].get_gid_object()
+       delegee_gid = GID(string=records[0]['gid'])
        delegee_hrn = delegee_gid.get_hrn()
     
        # the key and hrn of the user who will be delegating
        user_key = Keypair(filename = self.get_key_file())
        user_hrn = user_cred.get_gid_caller().get_hrn()
-    
-       dcred = Credential(subject=object_hrn + " delegated to " + delegee_hrn)
+   
+       subject_string = "%s delegated to %s" % (object_hrn, delegee_hrn)
+       dcred = Credential(subject=subject_string)
        dcred.set_gid_caller(delegee_gid)
        dcred.set_gid_object(object_gid)
        dcred.set_privileges(object_cred.get_privileges())
@@ -814,7 +814,8 @@ class Sfi:
         # use this to get the right slice credential 
         ticket = SfaTicket(filename=ticket_file)
         ticket.decode()
-        slice_hrn = ticket.attributes['slivers'][0]['hrn']
+       slice_hrn=ticket.gidObject.get_hrn()
+        #slice_hrn = ticket.attributes['slivers'][0]['hrn']
         user_cred = self.get_user_cred()
         slice_cred = self.get_slice_cred(slice_hrn).save_to_string(save_parents=True)
         
@@ -831,7 +832,7 @@ class Sfi:
             try:
                 cm_port = "12346" 
                 url = "https://%(hostname)s:%(cm_port)s" % locals() 
-                print "Calling get_ticket at %(url)s " % locals(),  
+                print "Calling redeem_ticket at %(url)s " % locals(),  
                 cm = xmlrpcprotocol.get_server(url, self.key_file, self.cert_file)
                 cm.redeem_ticket(slice_cred, ticket.save_to_string(save_parents=True))
                 print "Success"