- def delegate(self, opts, args):
-
- delegee_hrn = args[0]
- if opts.delegate_user:
- user_cred = self.get_user_cred()
- cred = self.delegate_cred(user_cred, delegee_hrn)
- elif opts.delegate_slice:
- slice_cred = self.get_slice_cred(opts.delegate_slice)
- cred = self.delegate_cred(slice_cred, delegee_hrn)
- else:
- self.logger.warning("Must specify either --user or --slice <hrn>")
- return
- delegated_cred = Credential(string=cred)
- object_hrn = delegated_cred.get_gid_object().get_hrn()
- if opts.delegate_user:
- dest_fn = os.path.join(self.options.sfi_dir, get_leaf(delegee_hrn) + "_"
- + get_leaf(object_hrn) + ".cred")
- elif opts.delegate_slice:
- dest_fn = os.path.join(self.options.sfi_dir, get_leaf(delegee_hrn) + "_slice_"
- + get_leaf(object_hrn) + ".cred")
-
- delegated_cred.save_to_file(dest_fn, save_parents=True)
-
- self.logger.info("delegated credential for %s to %s and wrote to %s"%(object_hrn, delegee_hrn,dest_fn))
-
- def delegate_cred(self, object_cred, hrn):
- # the gid and hrn of the object we are delegating
- if isinstance(object_cred, str):
- object_cred = Credential(string=object_cred)
- object_gid = object_cred.get_gid_object()
- object_hrn = object_gid.get_hrn()
-
- if not object_cred.get_privileges().get_all_delegate():
- self.logger.error("Object credential %s does not have delegate bit set"%object_hrn)
- return
-
- # the delegating user's gid
- caller_gid = self._get_gid(self.user)
- caller_gidfile = os.path.join(self.options.sfi_dir, self.user + ".gid")
-
- # the gid of the user who will be delegated to
- delegee_gid = self._get_gid(hrn)
- delegee_hrn = delegee_gid.get_hrn()
- delegee_gidfile = os.path.join(self.options.sfi_dir, delegee_hrn + ".gid")
- delegee_gid.save_to_file(filename=delegee_gidfile)
- dcred = object_cred.delegate(delegee_gidfile, self.get_key_file(), caller_gidfile)
- return dcred.save_to_string(save_parents=True)
-
- # removed named registry record
- # - have to first retrieve the record to be removed
- def remove(self, opts, args):
- auth_cred = self.get_auth_cred().save_to_string(save_parents=True)
- if len(args)!=1:
- self.parser.print_help()
- sys.exit(1)
- hrn = args[0]
- type = opts.type
- if type in ['all']:
- type = '*'
- return self.registry.Remove(hrn, auth_cred, type)
-
- # add named registry record