Changeset 43197eb for fedd/federation/emulab_access.py
- Timestamp:
- Apr 16, 2010 8:16:22 AM (14 years ago)
- Branches:
- axis_example, compt_changes, info-ops, master, version-3.01, version-3.02
- Children:
- 4f2f41f
- Parents:
- 0c4b12c
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
fedd/federation/emulab_access.py
r0c4b12c r43197eb 124 124 self.state_lock = Lock() 125 125 # XXX: Configurable 126 self.exports = set(('SMB', 'seer', 'tmcd', 'userconfig')) 126 self.exports = set(('SMB', 'seer', 'tmcd', 'userconfig', 127 'project_export')) 127 128 self.imports = set(('SMB', 'seer', 'userconfig')) 128 129 … … 550 551 return confid, confcert 551 552 553 def export_SMB(self, id, state, project, user): 554 return { 555 'id': id, 556 'name': 'SMB', 557 'visibility': 'export', 558 'server': 'http://fs:139', 559 'fedAttr': [ 560 { 'attribute': 'SMBSHARE', 'value': 'USERS' }, 561 { 'attribute': 'SMBUSER', 'value': user }, 562 { 'attribute': 'SMBPROJ', 'value': project }, 563 ] 564 } 565 566 def export_seer(self, id, state, project, user): 567 return { 568 'id': id, 569 'name': 'seer', 570 'visibility': 'export', 571 'server': 'http://control:16606', 572 } 573 574 def export_tmcd(self, id, state, project, user): 575 return { 576 'id': id, 577 'name': 'seer', 578 'visibility': 'export', 579 'server': 'http://boss:7777', 580 } 581 582 def export_userconfig(self, id, state, project, user): 583 if self.userconfdir and self.userconfcmd \ 584 and self.userconfurl: 585 cid, cert = self.export_userconf(project) 586 state['userconfig'] = unicode(cid) 587 return { 588 'id': id, 589 'name': 'userconfig', 590 'visibility': 'export', 591 'server': "%s/%s" % (self.userconfurl, str(cid)), 592 'fedAttr': [ 593 { 'attribute': 'cert', 'value': cert }, 594 ] 595 } 596 else: 597 return None 552 598 553 599 def export_services(self, sreq, project, user): … … 561 607 if svis == 'export': 562 608 if sname in self.exports: 563 outs = s.copy()609 id = s.get('id', 'no_id') 564 610 if sname == 'SMB': 565 outs = s.copy() 566 outs['server'] = "http://fs:139" 567 outs['fedAttr'] = [ 568 { 'attribute': 'SMBSHARE', 'value': 'USERS' }, 569 { 'attribute': 'SMBUSER', 'value': user }, 570 { 'attribute': 'SMBPROJ', 'value': project }, 571 ] 611 exp.append(self.export_SMB(id, state, project, user)) 572 612 elif sname == 'seer': 573 outs['server'] = "http://control:16606"613 exp.append(self.export_seer(id, state, project, user)) 574 614 elif sname == 'tmcd': 575 outs['server'] = "http://boss:7777"615 exp.append(self.export_tmcd(id, state, project, user)) 576 616 elif sname == 'userconfig': 577 if self.userconfdir and self.userconfcmd \ 578 and self.userconfurl: 579 cid, cert = self.export_userconf(project) 580 outs['server'] = "%s/%s" % \ 581 (self.userconfurl, str(cid)) 582 outs['fedAttr'] = [ 583 { 'attribute': 'cert', 'value': cert }, 584 ] 585 state['userconfig'] = unicode(cid) 586 exp.append(outs) 617 exp.append(self.export_userconfig(id, state, 618 project, user)) 619 elif sname == 'project_export': 620 exp.append(self.export_SMB(id, state, project, user)) 621 exp.append(self.export_seer(id, state, project, user)) 622 exp.append(self.export_userconfig(id, state, 623 project, user)) 587 624 return (exp, state) 588 625 … … 627 664 else: return h 628 665 666 def get_export_project(svcs): 667 """ 668 if the service requests includes one to export a project, return 669 that project. 670 """ 671 rv = None 672 for s in svcs: 673 if s.get('name', '') == 'project_export' and \ 674 s.get('visibility', '') == 'export': 675 if not rv: 676 for a in s.get('feddAttr', []): 677 if a.get('attribute', '') == 'project' \ 678 and 'value' in a: 679 rv = a['value'] 680 else: 681 raise service_error(service_error, access, 682 'Requesting multiple project exports is ' + \ 683 'not supported'); 684 return rv 685 629 686 # The dance to get into the request body 630 687 if req.has_key('RequestAccessRequestBody'): … … 642 699 ap = None 643 700 644 # If this is a request to export a project and the access project 645 # is not the project to export, access denied.646 if req.has_key('exportProject'):647 ep = unpack_id(req['exportProject'])648 if ep != found[0].name:701 # if this includes a project export request and the exported 702 # project is not the access project, access denied. 703 if 'service' in req: 704 ep = get_export_project(req['service']) 705 if ep and ep != found[0].name: 649 706 raise service_error(service_error.access, 650 707 "Cannot export %s" % ep) … … 983 1040 'seer': client_null, 984 1041 'userconfig': client_null, 1042 'project_export': client_null, 985 1043 } 986 1044 … … 992 1050 993 1051 def server_seer(f, s): 994 print >>f, 'seer: true'1052 print >>f, 'seer: True' 995 1053 996 1054 server_service_out = { … … 998 1056 'tmcd': server_port, 999 1057 'userconfig': server_null, 1058 'project_export': server_null, 1000 1059 'seer': server_seer, 1001 1060 }
Note: See TracChangeset
for help on using the changeset viewer.