Changeset 6c57fe9 for fedd/federation/access.py
- Timestamp:
- Sep 2, 2009 10:36:18 AM (15 years ago)
- Branches:
- axis_example, compt_changes, info-ops, master, version-2.00, version-3.01, version-3.02
- Children:
- f9ef40b
- Parents:
- cc8d8e9
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
fedd/federation/access.py
rcc8d8e9 r6c57fe9 18 18 from remote_service import xmlrpc_handler, soap_handler, service_caller 19 19 20 import topdl 21 import httplib 22 import tempfile 23 from urlparse import urlparse 24 20 25 21 26 # Make log messages disappear if noone configures a fedd logger … … 57 62 self.fileserver = config.get("access", "fileserver") 58 63 self.eventserver = config.get("access", "eventserver") 64 self.certdir = config.get("access","certdir") 59 65 60 66 self.attrs = { } … … 649 655 for o in owners: 650 656 self.auth.set_attribute(o, allocID) 657 try: 658 f = open("%s/%s.pem" % (self.certdir, aid), "w") 659 print >>f, alloc_cert 660 f.close() 661 except IOError, e: 662 raise service_error(service_error.internal, 663 "Can't open %s/%s : %s" % (self.certdir, aid, e)) 651 664 resp = self.build_response({ 'fedid': allocID } , ap) 652 665 return resp … … 1124 1137 1125 1138 def StartSegment(self, req, fid): 1139 def get_url(url, cf, tmpdir): 1140 po = urlparse(url) 1141 fn = po.path.rpartition('/')[2] 1142 try: 1143 conn = httplib.HTTPSConnection(po.hostname, port=po.port, 1144 cert_file=cf, key_file=cf) 1145 conn.putrequest('GET', po.path) 1146 conn.endheaders() 1147 response = conn.getresponse() 1148 1149 lf = open("%s/%s" % (tmpdir, fn), "w") 1150 buf = response.read(4096) 1151 while buf: 1152 lf.write(buf) 1153 buf = response.read(4096) 1154 lf.close() 1155 except IOError, e: 1156 raise service_error(service_error.internal, 1157 "Erro writing tempfile: %s" %e) 1158 except httplib.HTTPException, e: 1159 raise service_error(service_error.internal, 1160 "Error retrieving data: %s" % e) 1161 1162 configs = set(('hosts', 'ssh_pubkey', 'ssh_secretkey')) 1163 1164 1126 1165 try: 1127 1166 req = req['StartSegmentRequestBody'] … … 1129 1168 raise service_error(server_error.req, "Badly formed request") 1130 1169 auth_attr = req['allocID']['fedid'] 1170 attrs = req.get('fedAttr', []) 1171 print auth_attr 1172 print "%s" % auth_attr 1131 1173 if self.auth.check_attribute(fid, auth_attr): 1132 1174 print "OK" 1133 1175 else: 1134 1176 print "Fail" 1177 1178 if req.has_key('segmentdescription') and \ 1179 req['segmentdescription'].has_key('topdldescription'): 1180 topo = \ 1181 topdl.Topology(**req['segmentdescription']['topdldescription']) 1182 else: 1183 raise service_error(service_error.req, 1184 "Request missing segmentdescription'") 1185 1186 certfile = "%s/%s.pem" % (self.certdir, auth_attr) 1187 try: 1188 tmpdir = tempfile.mkdtemp(prefix="access-") 1189 except IOError: 1190 raise service_error(service_error.internal, "Cannot create tmp dir") 1191 1192 sw = set() 1193 for e in [c for c in topo.elements if getattr(c, 'software', False)]: 1194 for s in e.software: 1195 sw.add(s.location) 1196 for s in sw: 1197 get_url(s, certfile, tmpdir) 1198 1199 for a in attrs: 1200 if a['attribute'] in configs: 1201 get_url(a['value'], certfile, tmpdir) 1202 1135 1203 return { 'allocID': req['allocID'] }
Note: See TracChangeset
for help on using the changeset viewer.