2 from __future__ import with_statement
8 from types import StringTypes, ListType
9 from optparse import OptionParser
11 from sfa.trust.certificate import Certificate
12 from sfa.trust.credential import Credential
14 from sfa.util.geniclient import GeniClient
15 from sfa.util.record import GeniRecord
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="genidump [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__":