4 from __future__ import with_statement
10 from types import StringTypes, ListType
11 from optparse import OptionParser
13 from sfa.trust.certificate import Certificate
14 from sfa.trust.credential import Credential
15 from sfa.util.record import SfaRecord
16 from sfa.util.rspec import RSpec
18 def determine_sfa_filekind(fn):
19 cert = Certificate(filename = fn)
21 data = cert.get_data()
23 dict = xmlrpclib.loads(data)[0][0]
27 if "gidCaller" in dict:
37 lastpart = hrn.split(".")[-1]
38 filename = lastpart + ".gid"
40 if os.path.exists(filename):
41 print filename, ": already exists... skipping"
44 print filename, ": extracting gid of", hrn
46 gid.save_to_file(filename, save_parents = True)
48 def extract_gids(cred, extract_parents):
49 gidCaller = cred.get_gid_caller()
53 gidObject = cred.get_gid_object()
54 if gidObject and ((gidCaller == None) or (gidCaller.get_hrn() != gidObject.get_hrn())):
58 parent = cred.get_parent()
60 extract_gids(parent, extract_parents)
63 # Generate command line parser
64 parser = OptionParser(usage="%prog [options] filename")
66 parser.add_option("-e", "--extractgids", action="store_true", dest="extract_gids", default=False, help="Extract GIDs from credentials")
67 parser.add_option("-p", "--dumpparents", action="store_true", dest="dump_parents", default=False, help="Show parents")
72 parser = create_parser()
73 (options, args) = parser.parse_args()
76 print "No filename given. Use -h for help."
80 kind = determine_sfa_filekind(filename)
82 if kind=="credential":
83 cred = Credential(filename = filename)
84 cred.dump(dump_parents = options.dump_parents)
85 if options.extract_gids:
86 extract_gids(cred, extract_parents = options.dump_parents)
88 gid = Gid(filename = filename)
89 gid.dump(dump_parents = options.dump_parents)
91 print "unknown filekind", kind
93 if __name__=="__main__":