From 703b9e1c76d57efbdff18cc4969e056593794056 Mon Sep 17 00:00:00 2001 From: Tony Mack Date: Thu, 16 Sep 2010 22:51:47 +0000 Subject: [PATCH 1/1] sfa-0.9-17 tag --- CHANGES-0.2-to-0.8.txt | 56 + INSTALL.txt | 146 + LICENSE.txt | 20 + Makefile | 94 + README.txt | 7 + TODO | 41 + config/aggregates.xml | 3 + config/default_config.xml | 260 ++ config/gen-sfa-cm-config.py | 58 + config/registries.xml | 3 + config/sfa-config-tty | 41 + config/sfa_component_config | 116 + config/sfi_config | 24 + docs/Geniwrapper_Design_Docu.html | 1890 +++++++++ docs/Makefile | 11 + docs/README | 5 + docs/geniwrapper.doc | Bin 0 -> 186880 bytes docs/geniwrapper.pdf | Bin 0 -> 421200 bytes docs/pythondoc-cert.html | 307 ++ docs/pythondoc-component.html | 136 + docs/pythondoc-config.html | 36 + docs/pythondoc-credential.html | 159 + docs/pythondoc-geniclient.html | 322 ++ docs/pythondoc-geniserver.html | 83 + docs/pythondoc-gid.html | 103 + docs/pythondoc-hierarchy.html | 209 + docs/pythondoc-import.html | 26 + docs/pythondoc-record.html | 169 + docs/pythondoc-registry.html | 433 +++ docs/pythondoc-rights.html | 111 + docs/sfa-2008-08-08.pdf | Bin 0 -> 469838 bytes docs/sfa-2008-11-03.pdf | Bin 0 -> 257479 bytes docs/sfa-impl-2009-04-07.pdf | Bin 0 -> 487170 bytes docs/sfa-impl.doc | Bin 0 -> 200192 bytes docs/sfa-impl.pdf | Bin 0 -> 430040 bytes docs/sfa.doc | Bin 0 -> 107008 bytes docs/sfa.pdf | Bin 0 -> 247679 bytes keyconvert/keyconvert.py | 115 + keyconvert/test.sh | 33 + keyconvert/test.txt | 1 + keyconvert/test/openssh_dsa_1024 | 12 + keyconvert/test/openssh_dsa_1024.pub | 1 + keyconvert/test/openssh_dsa_2048 | 20 + keyconvert/test/openssh_dsa_2048.pub | 1 + keyconvert/test/openssh_dsa_512 | 8 + keyconvert/test/openssh_dsa_512.pub | 1 + keyconvert/test/openssh_rsa1_1024 | Bin 0 -> 529 bytes keyconvert/test/openssh_rsa1_1024.pub | 1 + keyconvert/test/openssh_rsa1_2048 | Bin 0 -> 977 bytes keyconvert/test/openssh_rsa1_2048.pub | 1 + keyconvert/test/openssh_rsa1_512 | Bin 0 -> 305 bytes keyconvert/test/openssh_rsa1_512.pub | 1 + keyconvert/test/openssh_rsa_1024 | 15 + keyconvert/test/openssh_rsa_1024.pub | 1 + keyconvert/test/openssh_rsa_2048 | 27 + keyconvert/test/openssh_rsa_2048.pub | 1 + keyconvert/test/openssh_rsa_512 | 9 + keyconvert/test/openssh_rsa_512.pub | 1 + keyconvert/testkey.sh | 6 + rspec/model/Registry.ecore | 78 + rspec/model/planetlab.ecore | 80 + rspec/model/planetlab.ecore_diagram | 228 ++ rspec/model/planetlab.genmodel | 44 + rspec/model/planetlab.xsd | 85 + rspec/sample_rspec.xml | 30 + setup.py | 103 + sfa.spec | 321 ++ sfa/Makefile | 5 + sfa/__init__.py | 0 sfa/client/__init__.py | 0 sfa/client/getNodes.py | 84 + sfa/client/getRecord.py | 91 + sfa/client/setRecord.py | 112 + sfa/client/sfadump.py | 94 + sfa/client/sfi.py | 937 +++++ sfa/client/sfiAddAttribute.py | 36 + sfa/client/sfiAddSliver.py | 22 + sfa/client/sfiDeleteAttribute.py | 37 + sfa/client/sfiDeleteSliver.py | 22 + sfa/client/sfiListNodes.py | 17 + sfa/client/sfiListSlivers.py | 28 + sfa/cron.d/sfa.cron | 8 + sfa/init.d/sfa | 113 + sfa/init.d/sfa-cm | 80 + sfa/managers/__init__.py | 0 sfa/managers/aggregate_manager_pl.py | 326 ++ sfa/managers/component_manager_default.py | 22 + sfa/managers/component_manager_pl.py | 73 + sfa/managers/eucalyptus/eucalyptus.rnc | 89 + sfa/managers/eucalyptus/eucalyptus.rng | 222 ++ sfa/managers/eucalyptus/eucalyptus.xml | 76 + sfa/managers/max/max.xml | 90 + sfa/managers/pl/pl.rnc | 56 + sfa/managers/pl/pl.rng | 201 + sfa/managers/pl/pl.xml | 3420 +++++++++++++++++ sfa/managers/registry_manager_pl.py | 421 ++ sfa/managers/slice_manager_pl.py | 308 ++ sfa/managers/vini/__init__.py | 0 sfa/managers/vini/request.xml | 26 + sfa/managers/vini/topology.py | 38 + sfa/managers/vini/utils.py | 719 ++++ sfa/managers/vini/vini.rnc | 70 + sfa/managers/vini/vini.rng | 255 ++ sfa/managers/vini/vini.xml | 373 ++ sfa/managers/vini/vini_network.py | 469 +++ sfa/methods/CreateSliver.py | 52 + sfa/methods/DeleteSliver.py | 41 + sfa/methods/GetCredential.py | 55 + sfa/methods/GetGids.py | 47 + sfa/methods/GetSelfCredential.py | 75 + sfa/methods/GetTicket.py | 64 + sfa/methods/GetVersion.py | 21 + sfa/methods/List.py | 38 + sfa/methods/ListResources.py | 55 + sfa/methods/ListSlices.py | 37 + sfa/methods/RedeemTicket.py | 35 + sfa/methods/Register.py | 51 + sfa/methods/RegisterPeerObject.py | 73 + sfa/methods/Remove.py | 52 + sfa/methods/RemovePeerObject.py | 103 + sfa/methods/RenewSliver.py | 41 + sfa/methods/Resolve.py | 50 + sfa/methods/ResolveGENI.py | 30 + sfa/methods/Shutdown.py | 25 + sfa/methods/SliverStatus.py | 31 + sfa/methods/Start.py | 41 + sfa/methods/Stop.py | 41 + sfa/methods/Update.py | 41 + sfa/methods/UpdateSliver.py | 35 + sfa/methods/__init__.py | 45 + sfa/methods/create_slice.py | 35 + sfa/methods/delete_slice.py | 34 + sfa/methods/get_aggregates.py | 36 + sfa/methods/get_credential.py | 37 + sfa/methods/get_gids.py | 30 + sfa/methods/get_key.py | 88 + sfa/methods/get_registries.py | 36 + sfa/methods/get_resources.py | 40 + sfa/methods/get_self_credential.py | 53 + sfa/methods/get_slices.py | 30 + sfa/methods/get_ticket.py | 43 + sfa/methods/get_trusted_certs.py | 42 + sfa/methods/list.py | 34 + sfa/methods/redeem_ticket.py | 31 + sfa/methods/register.py | 36 + sfa/methods/register_peer_object.py | 73 + sfa/methods/remove.py | 38 + sfa/methods/remove_peer_object.py | 103 + sfa/methods/reset_slice.py | 52 + sfa/methods/resolve.py | 36 + sfa/methods/start_slice.py | 34 + sfa/methods/stop_slice.py | 33 + sfa/methods/update.py | 38 + sfa/plc/__init__.py | 0 sfa/plc/api-dev.py | 562 +++ sfa/plc/api.py | 678 ++++ sfa/plc/network.py | 594 +++ sfa/plc/peers.py | 36 + sfa/plc/remoteshell.py | 107 + sfa/plc/sfa-import-plc.py | 273 ++ sfa/plc/sfa-nuke-plc.py | 32 + sfa/plc/sfaImport.py | 246 ++ sfa/plc/slices.py | 443 +++ sfa/rspecs/__init__.py | 0 sfa/rspecs/aggregates/__init__.py | 0 sfa/rspecs/aggregates/max.xml | 90 + sfa/rspecs/aggregates/openflow.xml | 101 + sfa/rspecs/aggregates/rspec_manager_max.py | 331 ++ .../aggregates/rspec_manager_openflow.py | 166 + sfa/rspecs/aggregates/rspec_manager_pl.py | 8 + sfa/server/__init__.py | 0 sfa/server/aggregate.py | 47 + sfa/server/component.py | 35 + sfa/server/interface.py | 207 + sfa/server/modpython/SfaAggregateModPython.py | 70 + sfa/server/modpython/SfaRegistryModPython.py | 69 + sfa/server/modpython/SfaSliceMgrModPython.py | 70 + sfa/server/modpython/sfa.aggregate.httpd.conf | 24 + sfa/server/modpython/sfa.registry.httpd.conf | 24 + sfa/server/modpython/sfa.slicemgr.httpd.conf | 24 + sfa/server/modpythonapi/ApiExceptionCodes.py | 2 + sfa/server/modpythonapi/ApiExceptions.py | 15 + sfa/server/modpythonapi/AuthenticatedApi.py | 66 + .../modpythonapi/AuthenticatedClient.py | 24 + sfa/server/modpythonapi/BaseApi.py | 203 + sfa/server/modpythonapi/BaseClient.py | 46 + sfa/server/modpythonapi/ModPython.py | 68 + sfa/server/modpythonapi/TestApi.py | 19 + sfa/server/modpythonapi/installTest.sh | 37 + sfa/server/modpythonapi/test.py | 44 + sfa/server/modpythonapi/test.sh | 3 + sfa/server/modpythonapi/testapi.conf | 5 + sfa/server/registry.py | 53 + sfa/server/sfa-ca.py | 242 ++ sfa/server/sfa-clean-peer-records.py | 79 + sfa/server/sfa-server.py | 221 ++ sfa/server/sfa_component_setup.py | 311 ++ sfa/server/slicemgr.py | 23 + sfa/trust/__init__.py | 0 sfa/trust/auth.py | 321 ++ sfa/trust/certificate.py | 604 +++ sfa/trust/credential.py | 851 ++++ sfa/trust/credential_legacy.py | 247 ++ sfa/trust/gid.py | 219 ++ sfa/trust/hierarchy.py | 364 ++ sfa/trust/rights.py | 288 ++ sfa/trust/trusted_certs/plc_ca.crt | 18 + sfa/trust/trusted_certs/ple_ca.crt | 20 + sfa/trust/trustedroot.py | 46 + sfa/util/PostgreSQL.py | 269 ++ sfa/util/__init__.py | 0 sfa/util/api.py | 273 ++ sfa/util/cache.py | 62 + sfa/util/client.py | 382 ++ sfa/util/componentserver.py | 138 + sfa/util/config.py | 128 + sfa/util/debug.py | 57 + sfa/util/faults.py | 290 ++ sfa/util/filter.py | 218 ++ sfa/util/method.py | 306 ++ sfa/util/misc.py | 49 + sfa/util/namespace.py | 108 + sfa/util/nodemanager.py | 46 + sfa/util/parameter.py | 108 + sfa/util/policy.py | 23 + sfa/util/prefixTree.py | 97 + sfa/util/record.py | 399 ++ sfa/util/report.py | 11 + sfa/util/row.py | 57 + sfa/util/rspec.py | 420 ++ sfa/util/rspecHelper.py | 326 ++ sfa/util/server.py | 280 ++ sfa/util/sfalogging.py | 22 + sfa/util/sfatablesRuntime.py | 38 + sfa/util/sfaticket.py | 130 + sfa/util/soapprotocol.py | 36 + sfa/util/specdict.py | 134 + sfa/util/storage.py | 73 + sfa/util/table.py | 196 + sfa/util/threadmanager.py | 71 + sfa/util/xmlrpcprotocol.py | 54 + sfatables/README | 265 ++ sfatables/TO_CLEANUP | 3 + sfatables/__init__.py | 0 sfatables/command.py | 26 + sfatables/commands/Add.py | 70 + sfatables/commands/Delete.py | 32 + sfatables/commands/Insert.py | 65 + sfatables/commands/List.py | 103 + sfatables/commands/SetDefault.py | 19 + sfatables/commands/__init__.py | 7 + sfatables/commands/moo.py | 210 + sfatables/globals.py | 5 + sfatables/matches/all.xml | 12 + sfatables/matches/hrn.xml | 19 + sfatables/matches/slice-whitelist.xml | 7 + sfatables/matches/slice.xml | 19 + sfatables/pretty.py | 38 + .../processors/__sfatables_rule_wrap_up__.xsl | 15 + .../processors/__sfatables_wrap_up__.xsl | 14 + sfatables/processors/accept.xsl | 12 + sfatables/processors/all.xsl | 8 + sfatables/processors/hrn.xsl | 24 + .../processors/legacy-restrict-to-nodes.xsl | 26 + sfatables/processors/link/restrict_slice.xml | 28 + sfatables/processors/max_link_kbps.xsl | 39 + sfatables/processors/max_node_kbps.xsl | 60 + sfatables/processors/reject.xsl | 8 + sfatables/processors/restrict_to_flowspec.xsl | 30 + sfatables/processors/restrict_to_nodes.xsl | 25 + sfatables/processors/slice-hrn.xsl | 24 + sfatables/processors/slice-whitelist.xsl | 54 + sfatables/processors/test.xml | 3 + sfatables/runtime.py | 110 + sfatables/sfatables | 138 + sfatables/targets/ACCEPT.xml | 10 + sfatables/targets/REJECT.xml | 10 + sfatables/targets/RESTRICT_SLICE_DOMAIN.xml | 63 + sfatables/targets/RESTRICT_SLICE_PROP.xml | 26 + sfatables/test.rspec | 13 + sfatables/test.sfarspec | 16 + sfatables/vini.rspec | 26 + sfatables/xmlextension.py | 47 + sfatables/xmlrule.py | 138 + tests/client/README | 1 + tests/client/demoAggregate.sh | 56 + tests/client/testAggregate.py | 32 + tests/client/testSfi.sh | 12 + tests/client/testSfiDelegate.sh | 12 + tests/client/testSfiSliceRegister.sh | 84 + tests/testAll.py | 12 + tests/testCert.py | 204 + tests/testCred.py | 173 + tests/testGid.py | 63 + tests/testHierarchy.py | 51 + tests/testInterfaces.py | 321 ++ tests/testKeypair.py | 53 + tests/testMisc.py | 18 + tests/testRecord.py | 15 + tests/testRights.py | 86 + wsdl/Makefile | 49 + wsdl/apistub.py | 12 + wsdl/globals.py | 4 + wsdl/sfa2wsdl.py | 342 ++ xmlbuilder-0.9/LICENSE | 21 + xmlbuilder-0.9/MANIFEST.in | 2 + xmlbuilder-0.9/PKG-INFO | 80 + xmlbuilder-0.9/README.txt | 1 + xmlbuilder-0.9/setup.cfg | 5 + xmlbuilder-0.9/setup.py | 43 + xmlbuilder-0.9/xmlbuilder.egg-info/PKG-INFO | 80 + .../xmlbuilder.egg-info/SOURCES.txt | 13 + .../xmlbuilder.egg-info/dependency_links.txt | 1 + .../xmlbuilder.egg-info/top_level.txt | 1 + xmlbuilder-0.9/xmlbuilder/__init__.py | 153 + xmlbuilder-0.9/xmlbuilder/docs/long_descr.rst | 68 + xmlbuilder-0.9/xmlbuilder/tests/__init__.py | 99 + 317 files changed, 34735 insertions(+) create mode 100644 CHANGES-0.2-to-0.8.txt create mode 100644 INSTALL.txt create mode 100644 LICENSE.txt create mode 100644 Makefile create mode 100644 README.txt create mode 100644 TODO create mode 100644 config/aggregates.xml create mode 100644 config/default_config.xml create mode 100644 config/gen-sfa-cm-config.py create mode 100644 config/registries.xml create mode 100755 config/sfa-config-tty create mode 100644 config/sfa_component_config create mode 100644 config/sfi_config create mode 100644 docs/Geniwrapper_Design_Docu.html create mode 100644 docs/Makefile create mode 100644 docs/README create mode 100644 docs/geniwrapper.doc create mode 100644 docs/geniwrapper.pdf create mode 100644 docs/pythondoc-cert.html create mode 100644 docs/pythondoc-component.html create mode 100644 docs/pythondoc-config.html create mode 100644 docs/pythondoc-credential.html create mode 100644 docs/pythondoc-geniclient.html create mode 100644 docs/pythondoc-geniserver.html create mode 100644 docs/pythondoc-gid.html create mode 100644 docs/pythondoc-hierarchy.html create mode 100644 docs/pythondoc-import.html create mode 100644 docs/pythondoc-record.html create mode 100644 docs/pythondoc-registry.html create mode 100644 docs/pythondoc-rights.html create mode 100644 docs/sfa-2008-08-08.pdf create mode 100644 docs/sfa-2008-11-03.pdf create mode 100644 docs/sfa-impl-2009-04-07.pdf create mode 100644 docs/sfa-impl.doc create mode 100644 docs/sfa-impl.pdf create mode 100644 docs/sfa.doc create mode 100644 docs/sfa.pdf create mode 100755 keyconvert/keyconvert.py create mode 100755 keyconvert/test.sh create mode 100644 keyconvert/test.txt create mode 100644 keyconvert/test/openssh_dsa_1024 create mode 100644 keyconvert/test/openssh_dsa_1024.pub create mode 100644 keyconvert/test/openssh_dsa_2048 create mode 100644 keyconvert/test/openssh_dsa_2048.pub create mode 100644 keyconvert/test/openssh_dsa_512 create mode 100644 keyconvert/test/openssh_dsa_512.pub create mode 100644 keyconvert/test/openssh_rsa1_1024 create mode 100644 keyconvert/test/openssh_rsa1_1024.pub create mode 100644 keyconvert/test/openssh_rsa1_2048 create mode 100644 keyconvert/test/openssh_rsa1_2048.pub create mode 100644 keyconvert/test/openssh_rsa1_512 create mode 100644 keyconvert/test/openssh_rsa1_512.pub create mode 100644 keyconvert/test/openssh_rsa_1024 create mode 100644 keyconvert/test/openssh_rsa_1024.pub create mode 100644 keyconvert/test/openssh_rsa_2048 create mode 100644 keyconvert/test/openssh_rsa_2048.pub create mode 100644 keyconvert/test/openssh_rsa_512 create mode 100644 keyconvert/test/openssh_rsa_512.pub create mode 100755 keyconvert/testkey.sh create mode 100644 rspec/model/Registry.ecore create mode 100644 rspec/model/planetlab.ecore create mode 100644 rspec/model/planetlab.ecore_diagram create mode 100644 rspec/model/planetlab.genmodel create mode 100644 rspec/model/planetlab.xsd create mode 100644 rspec/sample_rspec.xml create mode 100755 setup.py create mode 100644 sfa.spec create mode 100644 sfa/Makefile create mode 100644 sfa/__init__.py create mode 100644 sfa/client/__init__.py create mode 100644 sfa/client/getNodes.py create mode 100755 sfa/client/getRecord.py create mode 100755 sfa/client/setRecord.py create mode 100644 sfa/client/sfadump.py create mode 100755 sfa/client/sfi.py create mode 100755 sfa/client/sfiAddAttribute.py create mode 100755 sfa/client/sfiAddSliver.py create mode 100755 sfa/client/sfiDeleteAttribute.py create mode 100755 sfa/client/sfiDeleteSliver.py create mode 100755 sfa/client/sfiListNodes.py create mode 100755 sfa/client/sfiListSlivers.py create mode 100644 sfa/cron.d/sfa.cron create mode 100755 sfa/init.d/sfa create mode 100755 sfa/init.d/sfa-cm create mode 100644 sfa/managers/__init__.py create mode 100644 sfa/managers/aggregate_manager_pl.py create mode 100644 sfa/managers/component_manager_default.py create mode 100644 sfa/managers/component_manager_pl.py create mode 100644 sfa/managers/eucalyptus/eucalyptus.rnc create mode 100644 sfa/managers/eucalyptus/eucalyptus.rng create mode 100644 sfa/managers/eucalyptus/eucalyptus.xml create mode 100644 sfa/managers/max/max.xml create mode 100644 sfa/managers/pl/pl.rnc create mode 100644 sfa/managers/pl/pl.rng create mode 100644 sfa/managers/pl/pl.xml create mode 100644 sfa/managers/registry_manager_pl.py create mode 100644 sfa/managers/slice_manager_pl.py create mode 100644 sfa/managers/vini/__init__.py create mode 100644 sfa/managers/vini/request.xml create mode 100755 sfa/managers/vini/topology.py create mode 100644 sfa/managers/vini/utils.py create mode 100644 sfa/managers/vini/vini.rnc create mode 100644 sfa/managers/vini/vini.rng create mode 100644 sfa/managers/vini/vini.xml create mode 100644 sfa/managers/vini/vini_network.py create mode 100644 sfa/methods/CreateSliver.py create mode 100644 sfa/methods/DeleteSliver.py create mode 100644 sfa/methods/GetCredential.py create mode 100644 sfa/methods/GetGids.py create mode 100644 sfa/methods/GetSelfCredential.py create mode 100644 sfa/methods/GetTicket.py create mode 100644 sfa/methods/GetVersion.py create mode 100644 sfa/methods/List.py create mode 100644 sfa/methods/ListResources.py create mode 100644 sfa/methods/ListSlices.py create mode 100644 sfa/methods/RedeemTicket.py create mode 100644 sfa/methods/Register.py create mode 100644 sfa/methods/RegisterPeerObject.py create mode 100644 sfa/methods/Remove.py create mode 100644 sfa/methods/RemovePeerObject.py create mode 100644 sfa/methods/RenewSliver.py create mode 100644 sfa/methods/Resolve.py create mode 100644 sfa/methods/ResolveGENI.py create mode 100644 sfa/methods/Shutdown.py create mode 100644 sfa/methods/SliverStatus.py create mode 100644 sfa/methods/Start.py create mode 100644 sfa/methods/Stop.py create mode 100644 sfa/methods/Update.py create mode 100644 sfa/methods/UpdateSliver.py create mode 100644 sfa/methods/__init__.py create mode 100644 sfa/methods/create_slice.py create mode 100644 sfa/methods/delete_slice.py create mode 100644 sfa/methods/get_aggregates.py create mode 100644 sfa/methods/get_credential.py create mode 100644 sfa/methods/get_gids.py create mode 100644 sfa/methods/get_key.py create mode 100644 sfa/methods/get_registries.py create mode 100644 sfa/methods/get_resources.py create mode 100644 sfa/methods/get_self_credential.py create mode 100644 sfa/methods/get_slices.py create mode 100644 sfa/methods/get_ticket.py create mode 100644 sfa/methods/get_trusted_certs.py create mode 100644 sfa/methods/list.py create mode 100644 sfa/methods/redeem_ticket.py create mode 100644 sfa/methods/register.py create mode 100644 sfa/methods/register_peer_object.py create mode 100644 sfa/methods/remove.py create mode 100644 sfa/methods/remove_peer_object.py create mode 100644 sfa/methods/reset_slice.py create mode 100644 sfa/methods/resolve.py create mode 100644 sfa/methods/start_slice.py create mode 100644 sfa/methods/stop_slice.py create mode 100644 sfa/methods/update.py create mode 100644 sfa/plc/__init__.py create mode 100644 sfa/plc/api-dev.py create mode 100644 sfa/plc/api.py create mode 100644 sfa/plc/network.py create mode 100644 sfa/plc/peers.py create mode 100644 sfa/plc/remoteshell.py create mode 100755 sfa/plc/sfa-import-plc.py create mode 100755 sfa/plc/sfa-nuke-plc.py create mode 100644 sfa/plc/sfaImport.py create mode 100644 sfa/plc/slices.py create mode 100644 sfa/rspecs/__init__.py create mode 100644 sfa/rspecs/aggregates/__init__.py create mode 100644 sfa/rspecs/aggregates/max.xml create mode 100755 sfa/rspecs/aggregates/openflow.xml create mode 100644 sfa/rspecs/aggregates/rspec_manager_max.py create mode 100755 sfa/rspecs/aggregates/rspec_manager_openflow.py create mode 100644 sfa/rspecs/aggregates/rspec_manager_pl.py create mode 100644 sfa/server/__init__.py create mode 100644 sfa/server/aggregate.py create mode 100644 sfa/server/component.py create mode 100644 sfa/server/interface.py create mode 100755 sfa/server/modpython/SfaAggregateModPython.py create mode 100755 sfa/server/modpython/SfaRegistryModPython.py create mode 100755 sfa/server/modpython/SfaSliceMgrModPython.py create mode 100644 sfa/server/modpython/sfa.aggregate.httpd.conf create mode 100644 sfa/server/modpython/sfa.registry.httpd.conf create mode 100644 sfa/server/modpython/sfa.slicemgr.httpd.conf create mode 100644 sfa/server/modpythonapi/ApiExceptionCodes.py create mode 100644 sfa/server/modpythonapi/ApiExceptions.py create mode 100755 sfa/server/modpythonapi/AuthenticatedApi.py create mode 100755 sfa/server/modpythonapi/AuthenticatedClient.py create mode 100755 sfa/server/modpythonapi/BaseApi.py create mode 100755 sfa/server/modpythonapi/BaseClient.py create mode 100755 sfa/server/modpythonapi/ModPython.py create mode 100755 sfa/server/modpythonapi/TestApi.py create mode 100755 sfa/server/modpythonapi/installTest.sh create mode 100755 sfa/server/modpythonapi/test.py create mode 100755 sfa/server/modpythonapi/test.sh create mode 100644 sfa/server/modpythonapi/testapi.conf create mode 100644 sfa/server/registry.py create mode 100755 sfa/server/sfa-ca.py create mode 100644 sfa/server/sfa-clean-peer-records.py create mode 100755 sfa/server/sfa-server.py create mode 100755 sfa/server/sfa_component_setup.py create mode 100644 sfa/server/slicemgr.py create mode 100644 sfa/trust/__init__.py create mode 100644 sfa/trust/auth.py create mode 100644 sfa/trust/certificate.py create mode 100644 sfa/trust/credential.py create mode 100644 sfa/trust/credential_legacy.py create mode 100644 sfa/trust/gid.py create mode 100644 sfa/trust/hierarchy.py create mode 100644 sfa/trust/rights.py create mode 100644 sfa/trust/trusted_certs/plc_ca.crt create mode 100644 sfa/trust/trusted_certs/ple_ca.crt create mode 100644 sfa/trust/trustedroot.py create mode 100644 sfa/util/PostgreSQL.py create mode 100644 sfa/util/__init__.py create mode 100644 sfa/util/api.py create mode 100644 sfa/util/cache.py create mode 100644 sfa/util/client.py create mode 100644 sfa/util/componentserver.py create mode 100644 sfa/util/config.py create mode 100644 sfa/util/debug.py create mode 100644 sfa/util/faults.py create mode 100644 sfa/util/filter.py create mode 100644 sfa/util/method.py create mode 100644 sfa/util/misc.py create mode 100644 sfa/util/namespace.py create mode 100644 sfa/util/nodemanager.py create mode 100644 sfa/util/parameter.py create mode 100644 sfa/util/policy.py create mode 100755 sfa/util/prefixTree.py create mode 100644 sfa/util/record.py create mode 100644 sfa/util/report.py create mode 100644 sfa/util/row.py create mode 100644 sfa/util/rspec.py create mode 100755 sfa/util/rspecHelper.py create mode 100644 sfa/util/server.py create mode 100644 sfa/util/sfalogging.py create mode 100644 sfa/util/sfatablesRuntime.py create mode 100644 sfa/util/sfaticket.py create mode 100644 sfa/util/soapprotocol.py create mode 100644 sfa/util/specdict.py create mode 100644 sfa/util/storage.py create mode 100644 sfa/util/table.py create mode 100755 sfa/util/threadmanager.py create mode 100644 sfa/util/xmlrpcprotocol.py create mode 100644 sfatables/README create mode 100644 sfatables/TO_CLEANUP create mode 100644 sfatables/__init__.py create mode 100644 sfatables/command.py create mode 100644 sfatables/commands/Add.py create mode 100644 sfatables/commands/Delete.py create mode 100644 sfatables/commands/Insert.py create mode 100644 sfatables/commands/List.py create mode 100644 sfatables/commands/SetDefault.py create mode 100644 sfatables/commands/__init__.py create mode 100644 sfatables/commands/moo.py create mode 100644 sfatables/globals.py create mode 100644 sfatables/matches/all.xml create mode 100644 sfatables/matches/hrn.xml create mode 100644 sfatables/matches/slice-whitelist.xml create mode 100644 sfatables/matches/slice.xml create mode 100644 sfatables/pretty.py create mode 100644 sfatables/processors/__sfatables_rule_wrap_up__.xsl create mode 100644 sfatables/processors/__sfatables_wrap_up__.xsl create mode 100644 sfatables/processors/accept.xsl create mode 100644 sfatables/processors/all.xsl create mode 100644 sfatables/processors/hrn.xsl create mode 100644 sfatables/processors/legacy-restrict-to-nodes.xsl create mode 100644 sfatables/processors/link/restrict_slice.xml create mode 100644 sfatables/processors/max_link_kbps.xsl create mode 100644 sfatables/processors/max_node_kbps.xsl create mode 100644 sfatables/processors/reject.xsl create mode 100644 sfatables/processors/restrict_to_flowspec.xsl create mode 100644 sfatables/processors/restrict_to_nodes.xsl create mode 100644 sfatables/processors/slice-hrn.xsl create mode 100644 sfatables/processors/slice-whitelist.xsl create mode 100644 sfatables/processors/test.xml create mode 100644 sfatables/runtime.py create mode 100755 sfatables/sfatables create mode 100644 sfatables/targets/ACCEPT.xml create mode 100644 sfatables/targets/REJECT.xml create mode 100644 sfatables/targets/RESTRICT_SLICE_DOMAIN.xml create mode 100644 sfatables/targets/RESTRICT_SLICE_PROP.xml create mode 100644 sfatables/test.rspec create mode 100644 sfatables/test.sfarspec create mode 100644 sfatables/vini.rspec create mode 100644 sfatables/xmlextension.py create mode 100644 sfatables/xmlrule.py create mode 100644 tests/client/README create mode 100644 tests/client/demoAggregate.sh create mode 100644 tests/client/testAggregate.py create mode 100644 tests/client/testSfi.sh create mode 100644 tests/client/testSfiDelegate.sh create mode 100644 tests/client/testSfiSliceRegister.sh create mode 100755 tests/testAll.py create mode 100755 tests/testCert.py create mode 100755 tests/testCred.py create mode 100755 tests/testGid.py create mode 100755 tests/testHierarchy.py create mode 100755 tests/testInterfaces.py create mode 100755 tests/testKeypair.py create mode 100755 tests/testMisc.py create mode 100755 tests/testRecord.py create mode 100755 tests/testRights.py create mode 100644 wsdl/Makefile create mode 100644 wsdl/apistub.py create mode 100644 wsdl/globals.py create mode 100755 wsdl/sfa2wsdl.py create mode 100644 xmlbuilder-0.9/LICENSE create mode 100644 xmlbuilder-0.9/MANIFEST.in create mode 100644 xmlbuilder-0.9/PKG-INFO create mode 100644 xmlbuilder-0.9/README.txt create mode 100644 xmlbuilder-0.9/setup.cfg create mode 100644 xmlbuilder-0.9/setup.py create mode 100644 xmlbuilder-0.9/xmlbuilder.egg-info/PKG-INFO create mode 100644 xmlbuilder-0.9/xmlbuilder.egg-info/SOURCES.txt create mode 100644 xmlbuilder-0.9/xmlbuilder.egg-info/dependency_links.txt create mode 100644 xmlbuilder-0.9/xmlbuilder.egg-info/top_level.txt create mode 100644 xmlbuilder-0.9/xmlbuilder/__init__.py create mode 100644 xmlbuilder-0.9/xmlbuilder/docs/long_descr.rst create mode 100644 xmlbuilder-0.9/xmlbuilder/tests/__init__.py diff --git a/CHANGES-0.2-to-0.8.txt b/CHANGES-0.2-to-0.8.txt new file mode 100644 index 00000000..00646320 --- /dev/null +++ b/CHANGES-0.2-to-0.8.txt @@ -0,0 +1,56 @@ +==================== +changes between 0.2 and 0.8 from a user's perspective +==================== + +-------------------- +- 3 packages named +-- sfa (libraries) +-- sfa-plc (server side) +-- sfa-client (client-side) + +-------------------- new names for commands +gimport.py -> sfa-import-plc.py +plc.py -> sfa-server.py +geni-config-tty -> sfa-config-tty + +-------------------- new names for config files & miscell +/etc/geni -> /etc/sfa +/etc/geni/configSfi.sh -> /etc/sfa/sfa_config +/etc/init.d/geniwrapper -> /etc/init.d/sfa + +/etc/sfa/config_sfa, +/etc/sfa/config_sfi, +/etc/sfa/aggregates.xml, +/etc/sfa/registries.xml + are now preserved across rpm updates + + +==================== +changes between 0.2 and 0.8 from a devel's perspective +==================== + +cmdline/ has moved to + sfa/client +first-class objects involved in the server side + sfa/server +plc-dependent code has moved to + sfa/plc +basic identification/authentication objects (up to credentials) have moved to + sfa/trust + (this also holds in trusted_roots the CA certs of PLC-PLE) +code for the methods have remained in + sfa/methods + +init.d instscript is now in + sfa/init.d + +config files and utilities are in + config/ + (should this move under sfa ?) + +-------------------- deprecated +gacks/ +gui/ +dummy/ + +some apparently test-related stuff formerly in cmdline hace moved to tests/client diff --git a/INSTALL.txt b/INSTALL.txt new file mode 100644 index 00000000..d748883f --- /dev/null +++ b/INSTALL.txt @@ -0,0 +1,146 @@ +This installation note assumes that you have installed and configured MyPLC in the usual manner, and you have set up your yum repo like for a MyPLC install. + +Once you have completed the server configuration, a brief introduction to the SFA user tools is here: + http://svn.planet-lab.org/wiki/SFAGuide + +----- +1) Install the SFA packages: + +# yum install sfa-plc sfa-client + +Note that the above command installs both sfa server (sfa-plc) and sfa client packages along with necessary dependency packages. Depending on the requirements, you may choose to install the appropriate one (server, client or both) for you. For e.g. to set up your own SFA server on top of your MyPLC, you need sfa-plc. On the other hand, if you plan to use an existing SFA server, you would typically need the sfa-client only. +------- +2) Note down the PLC_ROOT_USER, PLC_ROOT_PASSWORD, PLC_DB_USER and PLC_DB_PASSWORD of your MyPLC installation: + +# plc-config-tty +Enter command (u for usual changes, w to save, ? for help) s PLC_ROOT_USER +PLC_ROOT_USER = root@test.onelab.eu +Enter command (u for usual changes, w to save, ? for help) s PLC_ROOT_PASSWORD +PLC_ROOT_PASSWORD = test++ +Enter command (u for usual changes, w to save, ? for help) s PLC_DB_USER +PLC_DB_USER = pgsqluser +Enter command (u for usual changes, w to save, ? for help) s PLC_DB_PASSWORD +PLC_DB_PASSWORD = 4a333aba-a322-41b1-9c05-90b4f34d1332 + +These four configuration parameters are required for SFA server configuration +------- +3) Configure and start SFA servers: + +(a) # sfa-config-tty + + set SFA_PLC_USER to PLC_ROOT_USER + set SFA_PLC_PASSWORD to PLC_ROOT_PASSWORD + set SFA_PLC_DB_USER to PLC_DB_USER + set SFA_PLC_DB_PASSWORD to PLC_DB_PASSWORD +write and quit + +*NOTE* at this point you get a warning b/c the authorities hierarchy has not been created yet; ignore + +(b) # sfa-import-plc.py + +(o/p will look like this) +Import: creating top level authorities +Hierarchy: creating authority: plc +plc : +Import: creating table for authority plc +NOTICE: table "sfa$plc" does not exist, skipping + inserting authority record for plc +Import: adding plc to trusted list +Import_Site: importing site plc.internet2 +Hierarchy: creating authority: plc.internet2 + inserting authority record for plc.internet2 +Import_Site: importing site plc.pl +Hierarchy: creating authority: plc.pl + inserting authority record for plc.pl +Import: importing person plc.pl.root +Import: creating table for authority plc.pl +NOTICE: table "sfa$plc$pl" does not exist, skipping + +(c) run sfa-config-tty again and select q to come out of the config command +This will initialize /etc/sfa/authorities/server.key from /etc/sfa/authorities/plc/plc.pkey + +(d) # service sfa start +This will start Registry, Slice Manager and Aggregate Manager. Your ps command output would look like: + +# ps -ef | grep python +root 24944 1 0 May11 ? 00:00:00 /usr/bin/python /usr/bin/sfa-server.py -r -d +root 24957 1 0 May11 ? 00:00:00 /usr/bin/python /usr/bin/sfa-server.py -a -d +root 24970 1 0 May11 ? 00:00:00 /usr/bin/python /usr/bin/sfa-server.py -s -d +------- +4) Configure SFA client: + + (a) # mkdir ~/.sfi + (b)copy your private RSA key to ~/.sfi/username.pkey Replace username with your actual account name. NOTE: DSA KEYS WILL NOT WORK + (c) # cp /etc/sfa/sfi_config ~/.sfi/ + (d) edit ~/.sfi/sfi_config. A sample configuration looks like: + + SFI_AUTH='plc.pl' + SFI_USER='plc.pl.root' + SFI_REGISTRY='http://vplc25.inria.fr:12345/' + SFI_SM='http://vplc25.inria.fr:12347/' + +------ +5) Testing: + +At this stage you should be able to run sfi command. Some sample outputs are: + + (a) # sfi.py list plc.pl + plc.pl.netflow (slice) + plc.pl.sirius (slice) + plc.pl.root (user) + plc.pl.pif (node) + + (b) # sfi.py show plc.pl.pif + gid: + hrn: plc.pl.pif + uuid: 99878316891261700702442883738232624912 + hrn: plc.pl.pif + type: node + node_type: regular + hostname: pif.inria.fr + + (c) # sfi.py show plc.pl.root + gid: + hrn: plc.pl.root + uuid: 67306954103472941609600457537601239401 + hrn: plc.pl.root + type: user + last_name: Administrator + phone: None + key: plc.pl.root#user + first_name: Default + email: root@vplc25.inria.fr + + (d) # sfi.py slices + plc.pl.netflow + plc.pl.sirius + + (e) # sfi.py resources + + +------ + +6) Federation configuration: + +(a) Follow the same procedure to install and configure second MyPLC with SFA server. +(b) On each PLC, edit the /etc/sfa/registries.xml file + + set addr to ip or hostname of federated (remote) peer + set port to sfa service port on federated (remote) peer + set hrn to human readable name of federated (remote) peer interface +Sample configuration: + + + + + +(c) Likewise, edit the /etc/sfa/aggregates.xml +Sampel configuration + + + + + +(d) trade trusted root gid's (seen on /etc/sfa/trusted_roots) +we have to copy the gid of first SFA server to the /etc/sfa/trusted_roots directory of second one and vice-versa. + diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 00000000..08f6d5d3 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,20 @@ +Copyright (c) 2008 Board of Trustees, Princeton University + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and/or hardware specification (the “Work”) to +deal in the Work without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Work, and to permit persons to whom the Work +is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Work. + +THE WORK IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE WORK OR THE USE OR OTHER DEALINGS +IN THE WORK. diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..a1bd00a1 --- /dev/null +++ b/Makefile @@ -0,0 +1,94 @@ +# +## (Re)builds Python metafile (__init__.py) and documentation +# +# overwritten by the specfile +DESTDIR="/" + +########## +all: python wsdl + +install: python-install wsdl-install xmlbuilder-install + +clean: python-clean wsdl-clean + +uninstall: python-uninstall + +.PHONY: all install clean + +########## +python: + +xmlbuilder-install: + cd xmlbuilder-0.9 && python setup.py install --root=$(DESTDIR) && cd - + +python-install: + python setup.py install --root=$(DESTDIR) + chmod 444 $(DESTDIR)/etc/sfa/default_config.xml + +python-clean: + python setup.py clean + rm $(init) + +.PHONY: python python-install python-clean xmlbuilder-install +########## +wsdl: + $(MAKE) -C wsdl + +# propagate DESTDIR from the specfile +wsdl-install: + $(MAKE) -C wsdl install + +wsdl-clean: + $(MAKE) -C wsdl clean + +.PHONY: wsdl wsdl-install wsdl-clean +########## + +# are the .java files used ? +tags: + find . -type f | egrep -v '/\.svn/|TAGS|\.py[co]$$|\.doc$$|\.html$$|\.pdf$$' | xargs etags +.PHONY: tags + + +########## sync +# 2 forms are supported +# (*) if your plc root context has direct ssh access: +# make sync PLC=private.one-lab.org +# (*) otherwise, entering through the root context +# make sync PLCHOST=testbox1.inria.fr GUEST=vplc03.inria.fr + +ifdef GUEST +ifdef PLCHOST +SSHURL:=root@$(PLCHOST):/vservers/$(GUEST) +SSHCOMMAND:=ssh root@$(PLCHOST) vserver $(GUEST) +endif +endif +ifdef PLC +SSHURL:=root@$(PLC):/ +SSHCOMMAND:=ssh root@$(PLC) +endif + +LOCAL_RSYNC_EXCLUDES := --exclude '*.pyc' +RSYNC_EXCLUDES := --exclude .svn --exclude CVS --exclude '*~' --exclude TAGS $(LOCAL_RSYNC_EXCLUDES) +RSYNC_COND_DRY_RUN := $(if $(findstring n,$(MAKEFLAGS)),--dry-run,) +RSYNC := rsync -a -v $(RSYNC_COND_DRY_RUN) $(RSYNC_EXCLUDES) + +BINS = ./config/sfa-config-tty ./config/gen-sfa-cm-config.py \ + ./sfa/plc/sfa-import-plc.py ./sfa/plc/sfa-nuke-plc.py ./sfa/server/sfa-server.py \ + ./sfa/client/sfi.py ./sfa/client/getNodes.py ./sfa/client/getRecord.py \ + ./sfa/client/setRecord.py ./sfa/client/sfadump.py + +sync: +ifeq (,$(SSHURL)) + @echo "sync: You must define, either PLC, or PLCHOST & GUEST, on the command line" + @echo " e.g. make sync PLC=private.one-lab.org" + @echo " or make sync PLCHOST=testbox1.inria.fr GUEST=vplc03.inria.fr" + @exit 1 +else + +$(RSYNC) ./sfa/ $(SSHURL)/usr/lib/python2.5/site-packages/sfa/ + +$(RSYNC) $(BINS) $(SSHURL)/usr/bin + $(SSHCOMMAND) exec service sfa restart +endif + +.PHONY: sync +########## diff --git a/README.txt b/README.txt new file mode 100644 index 00000000..42255d4a --- /dev/null +++ b/README.txt @@ -0,0 +1,7 @@ +This module (sfa) is installed as part of MyPLC, available as +part of the PlanetLab development effort. For more information on +accessing, installing, developing and deploying PlanetLab software, +visit http://svn.planet-lab.org. + +For a brief introduction to the SFA user tools, please visit: + http://svn.planet-lab.org/wiki/SFAGuide diff --git a/TODO b/TODO new file mode 100644 index 00000000..b5628f47 --- /dev/null +++ b/TODO @@ -0,0 +1,41 @@ +- Build/Tags +* test rpm build/install + +- Stop invalid users +* a recently disabled/deleted user may still have a valid cred. Keep a list of valid/invalid users on the aggregate and check callers against this list + +- NM Plugin + * install the slice and node gid when the slice is created (create NM plugin to execute sfa_component_setup.py ?) + * test + +- Component manager + * install trusted certs when interface starts (component_manager_pl.init_server()) + * Redeem ticket - RedeemTicket/AdminTicket not working. Why? + ** This may be replaced by sfa + credentials + +- Registry +* fix legacy credential support +* move db tables into db with less overhead (tokyocabinet?) + +- GUI/Auth Service + * develop a simple service where users auth using username/passord and + receive their cred + * service manages users key/cert,creds + * gui requires user's cred (depends on Auth Service above) + +- Protogeni +* agree on standard set of privs +* on permission error, return priv needed to make call +* cache slice resource states (if aggregate goes down, how do we know what + slices were on it and recreate them? do we make some sort of transaction log) + +Questions +========= +- SM/Aggregate +* should the rspec contain only the resources a slice is using or all resources availa and mark what the slice is using. + +- Initscripts on sfa / geniwrapper +* should sfa have native initscript support or should we piggyback off of myplc? +* should this be in the rspec + + diff --git a/config/aggregates.xml b/config/aggregates.xml new file mode 100644 index 00000000..4630736c --- /dev/null +++ b/config/aggregates.xml @@ -0,0 +1,3 @@ + + + diff --git a/config/default_config.xml b/config/default_config.xml new file mode 100644 index 00000000..cfe76c24 --- /dev/null +++ b/config/default_config.xml @@ -0,0 +1,260 @@ + + + + + + + + + + + + General + Basic system variables. + + + + Human readable name + plc + The human readable name for this interface. + + + + Debug + false + Flag to turn debug on. + + + + + + + + Registry + The settings that affect the registry that will run + as part of this SFA instance. + + + + Enable Registry + true + Allows this local SFA instance to run as a + registry. + + + + Registry type + pl + The type of backend server for this + registry. Some registries may not be myplc. + + + + Hostname + localhost + The hostname where the registry is expected to + be found; using localhost when the local registry is enabled + seems reasonable. + + + + Port number + 12345 + The port where the registry is to be found. + + + + Root Authority + plc + The hrn of the registry's root auth. + + + + + + + + Aggregate + The settings that affect the aggregate manager that will run + as part of this SFA instance. + + + + Enable Aggregate + true + Allows this local SFA instance to run as an + aggregate manager. + + + + Aggregate type + pl + The type of backend server for this + aggregate. Some aggregates may not be myplc. + + + + RSpec Schema + /etc/sfa/pl.rng + The path to the default schema + + + + Hostname + localhost + The hostname where the aggregate is expected to + be found. + + + + Port number + 12346 + The port where the aggregate is to be found. + + + + + + + GENI Aggregate + The settings that affect the geni aggregate manager that will run + as part of this SFA instance. + + + + Enable GENI Aggregate + true + Allows this local SFA instance to run as an + GENI aggregate manager. + + + + GENI Aggregate type + pl + The type of backend server for this + aggregate. Some aggregates may not be myplc. + + + + Hostname + localhost + The hostname where the aggregate is expected to + be found. + + + + Port number + 12348 + The port where the aggregate is to be found. + + + + + + + + Slice Manager + The settings that affect the slice manager that will run + as part of this SFA instance. + + + + Enable Slice Manager + true + Allows this local SFA instance to run as a + slice manager. + + + + Slice Manager type + pl + The type of backend server for this + slice manager. Not all slice managers are myplc. + + + + Hostname + localhost + The hostname where the slice manager is expected to + be found. + + + + Port number + 12347 + The port where the slice manager is to be found. + + + + + + + + The settings that tell this SFA instance how to interact with the underlying PLC. Refer to plc-config-tty on this installation for more information. + + + + PLC login name for an admin user; SFA will carry on operations under this account. + root@localhost.localdomain + + + + + Password + root + The PLC password for SFA_PLC_USER. + + + + URL + https://localhost:443/PLCAPI/ + Full URL of PLC interface. + + + + Database name + planetlab5 + Planetlab database name. + + + + Datbase host + localhost + The host where the PLC database can be reached. + + + + Database port + 5432 + The port where the PLC database can be reached. + + + + Database user + pgsqluser + + + + + Database password + + The password for PLC_DB_USER. + + + + + + + + + + + + diff --git a/config/gen-sfa-cm-config.py b/config/gen-sfa-cm-config.py new file mode 100644 index 00000000..f8a0f70f --- /dev/null +++ b/config/gen-sfa-cm-config.py @@ -0,0 +1,58 @@ +#!/usr/bin/python +import os +import sys +import socket +sys.path.append('/usr/share/plc_api') +from sfa.util.config import Config as SfaConfig +from PLC.Config import Config as PlcConfig + +sfa_config = SfaConfig() +plc_config = PlcConfig() +default_host = socket.gethostbyname(socket.gethostname()) +all_vars = ['SFA_CONFIG_DIR', 'SFA_DATA_DIR', 'SFA_INTERFACE_HRN', + 'SFA_CM_SLICE_PREFIX', 'SFA_REGISTRY_HOST', 'SFA_REGISTRY_PORT', + 'SFA_AGGREGATE_HOST', 'SFA_AGGREGATE_PORT', + 'SFA_SM_HOST', 'SFA_SM_PORT', + 'SFA_CM_ENABLED', 'SFA_CM_HOST', 'SFA_CM_PORT', 'SFA_CM_TYPE', 'SFA_CM_SLICE_PREFIX', + 'SFA_API_DEBUG'] + +defaults = { + 'SFA_CM_ENABLED': '1', + 'SFA_CM_HOST': 'localhost', + 'SFA_CM_PORT': '12346', + 'SFA_CM_SLICE_PREFIX': plc_config.PLC_SLICE_PREFIX, + 'SFA_CM_TYPE': 'pl', + 'SFA_API_DEBUG': '0' + } + +host_defaults = { + 'SFA_REGISTRY_HOST': default_host, + 'SFA_AGGREGATE_HOST': default_host, + 'SFA_SM_HOST': default_host, + } + +const_dict = {} +for key in all_vars: + value = "" + + + if key in defaults: + value = defaults[key] + elif hasattr(sfa_config, key): + value = getattr(sfa_config, key) + # sfa_config may specify localhost instead of a resolvalbe host or ip + # if so replace this with the host's address + if key in host_defaults and value in ['localhost', '127.0.0.1']: + value = host_defaults[key] + const_dict[key] = value + +filename = sfa_config.config_path + os.sep + 'sfa_component_config' +conffile = open(filename, 'w') +format='%s="%s"\n' + +for var in all_vars: + conffile.write(format % (var, const_dict[var])) + +conffile.close() + + diff --git a/config/registries.xml b/config/registries.xml new file mode 100644 index 00000000..79967814 --- /dev/null +++ b/config/registries.xml @@ -0,0 +1,3 @@ + + + diff --git a/config/sfa-config-tty b/config/sfa-config-tty new file mode 100755 index 00000000..9b2c439e --- /dev/null +++ b/config/sfa-config-tty @@ -0,0 +1,41 @@ +#!/bin/env python + +import sys +import readline +import plc_config + +def validator(validated_variables): + pass +# maint_user = validated_variables["PLC_API_MAINTENANCE_USER"] +# root_user = validated_variables["PLC_ROOT_USER"] +# if maint_user == root_user: +# errStr="PLC_API_MAINTENANCE_USER=%s cannot be the same as PLC_ROOT_USER=%s"%(maint_user,root_user) +# raise plc_config.ConfigurationException(errStr) + +usual_variables = [ + "SFA_INTERFACE_HRN", + "SFA_REGISTRY_ROOT_AUTH", + "SFA_REGISTRY_HOST", + "SFA_AGGREGATE_HOST", + "SFA_SM_HOST", + "SFA_PLC_USER", + "SFA_PLC_PASSWORD", + "SFA_PLC_DB_HOST", + "SFA_PLC_DB_USER", + "SFA_PLC_DB_PASSWORD", + "SFA_PLC_URL", + ] + +configuration={ \ + 'name':'sfa', + 'service':"sfa", + 'usual_variables':usual_variables, + 'config_dir':"/etc/sfa", + 'validate_variables':{}, + 'validator':validator, + } + +if __name__ == '__main__': + command=sys.argv[0] + argv = sys.argv[1:] + plc_config.main(command,argv,configuration) diff --git a/config/sfa_component_config b/config/sfa_component_config new file mode 100644 index 00000000..137405eb --- /dev/null +++ b/config/sfa_component_config @@ -0,0 +1,116 @@ +# SFA Config file for the Component Manager +# + +# HRN +# Human readable name for this interface +SFA_INTERFACE_HRN="plc" + +# API Debug +# Are we logging +SFA_API_DEBUG=1 + +## ============================================================ +# Registry Configuration +# +# Enabled +# Enable the registry interface +SFA_REGISTRY_ENABLED=0 + +# +# The type of backend server for this registry +# Some registries may not be myplc +SFA_REGISTRY_TYPE='pl' + +# Root Auth +# The hrn of the registry's root auth +SFA_REGISTRY_ROOT_AUTH="plc" + +# Level1 Auth +# The hrn of the registry's level1 auth (sub authority) +# The full name of this interface (only secify if this +# interface is a sub authority) +# xxx could be determined from hrn above +SFA_REGISTRY_LEVEL1_AUTH="" + +# Hostname +# The fully qualified hostname of the registry server +SFA_REGISTRY_HOST="localhost" + +# Port +# SFA registry port +SFA_REGISTRY_PORT=12345 + +## ============================================================== +## Aggregate Configuration +## +## Enable aggregate inteface +## Enable the aggregate inteface. +SFA_AGGREGATE_ENABLED=0 + +# Aggregate Type +# +# The type of backend server for this aggregate +# Some aggregates may not be myplc +SFA_AGGREGATE_TYPE='pl' + +# +# +## Hostname +## The fully qualified hostname of the aggregate server +SFA_AGGREGATE_HOST="localhost" +# +## Port +## SFA aggregate server port +SFA_AGGREGATE_PORT=12346 + +## ============================================================== +# Slice Manager Configuration +# +# Enabled +# Enable the slice manager +SFA_SM_ENABLED=0 + +# Slice Manager type +# +## The type of backend server for this slice manager +## The slice manager doesnt rely on a specific backend server so +## you probably will never need to change this type unless you +## need to reimplement the slice manager +SFA_SM_TYPE='pl' + +# Host +## The fully qualified hostname or IP address of the slice manager server +SFA_SM_HOST="localhost" + +# Port +# SFA slice manager server port +SFA_SM_PORT=12347 + +## =============================================================== +# Component Manager Configuration +# +# Enabled +## Enable the slice manager +SFA_CM_ENABLED=1 + +# Component Manager type +# +# The type of backend server for this component manager +SFA_CM_TYPE='pl' +# +# Host +## The fully qualified hostname or IP address of the slice manager server +SFA_CM_HOST="localhost" +# +# Port +# SFA slice manager server port +SFA_CM_PORT=12346 + + +# Directory internal data gets stored +# using /etc/sfa until gec5 but /var/lib/sfa would be a more reasonable choice +SFA_CONFIG_DIR="/etc/sfa" + +# Directory internal data gets stored +SFA_DATA_DIR="/var/lib/sfa" + diff --git a/config/sfi_config b/config/sfi_config new file mode 100644 index 00000000..3314790a --- /dev/null +++ b/config/sfi_config @@ -0,0 +1,24 @@ +# user-level configuration for sfi + +### hrn of your authority +# For instance, the hrn of a user at the Princeton site on PlanetLab (PLC) +# would be plc.princeton. Likewise if the user was part of the NYU site, the HRN +# would be plc.nyu +SFI_AUTH='plc.princeton' + +### your user hrn +# This is your authority. +SFI_USER='plc.princeton.faiyaza' +# + +### where to find the registry +SFI_REGISTRY='http://www.planet-lab.org:12345/' + +# where to find the slice manager +SFI_SM='http://www.planet-lab.org:12347/' + +# where to find the geni aggregate manager +# XX this should be handled by the slice manger +# XX but we cant support it until the geni_am and sfa +# XX interfaces has been unified +SFI_GENI_AM='http://www.planet-lab.org:12348' diff --git a/docs/Geniwrapper_Design_Docu.html b/docs/Geniwrapper_Design_Docu.html new file mode 100644 index 00000000..8e8eefed --- /dev/null +++ b/docs/Geniwrapper_Design_Docu.html @@ -0,0 +1,1890 @@ + + + + + + + + + + + + + + + + + + + + + +
+
+ Geniwrapper Design Document +
+
+
+   +
+
+ 1.0 High Level Overview +
+
+   +
+
+ The purpose of Geniwrapper is to provide a Geni-like interface around the + existing planetlab infrastructure. The existing infrastructure consists of two + parts: planetlab central (PLC) and planetlab nodes. Geni defines three + interfaces: Registry, Slice, and Component Management.  A part of the wrapper is co-located with PLC (it exports the Registry and Slice interfaces), + and a part of the wrapper is co-located with each node (it exports the Slice + and Management interfaces). +
+
+   +
+
+ Geniwrapper is comprised of the following logical modules: utility + classesplc wrapper, component wrapper, and command + line client. Client-server communication uses a variant of XML-RPC called + the Geni protocol. Section 1 of this document presents a very brief + overview of each module. In-depth discussion occurs later. +
+
+   +
+
+ Much of this design adheres to the SFA, and as such this document avoids + duplication of the information already presented in the SFA. For example, the + description of privileges, which operations are allowed by a specific + privileges, and how privileges are assigned to principals is described fully + in the SFA and is therefore not duplicated here. +
+
+   +
+
+ NOTE: API documentation is extracted from code comments automatically + and is maintained in separate files, one documentation file corresponding to + each python source file. An effort has been made to keep API documentation + separate from this document, so that the API documentation may be + self-maintaining as the code is updated. +
+
+   +
+
+ Geniwrapper is checked into a subversion repository at + http://svn.planetlab.org/geniwrapper. + [TODO: verify link] +
+
+   +
+
+
+ 1.1 Utility classes +
+
+   +
+
+ Utility classes include python classes that implement certificates, GIDs, + credentials, and tickets. There are also utility classes for implementing + the server and client stubs and the security protocol. The utility modules + are designed to be generally re-usable. For example, the credential + management class may be used as part of the Geni Registry, Geni Components, + and the end-user tools that interact with Geni. +
+
+   +
+
+ The utility classes are located in the + util subdirectory. +
+
+
+   +
+
+ 1.2 PLC wrapper +
+
+   +
+
+ The plc wrapper is intended to be colocated with PLC. All communication + between the plc wrapper and PLC uses the PLCAPI interface and as such, + the plc wrapper can be run on a separate machine for ease of development. + In addition to the Geni registry operations (register, update, ...), + the plc wrapper also implements slice operations, such as GetTicket. +
+
+   +
+
+ The plc wrapper is located in the plc subdirectory. +
+
+   +
+
+ TODO: Most of the slice interface is yet to be implemented in plc wrapper. +
+
+   +
+
+ 1.3 The component wrapper +
+
+   +
+
+ The component wrapper is located on planetlab nodes. It implements + the slice interface, and the component management interface. Due to SFA + engineering decisions, some slice operations (i.e. GetTicket) are + not supported in the component wrapper. +
+
+   +
+
+ The component wrapper is located in the component subdirectory. +
+
+   +
+
+ 1.4 Command line client +
+
+   +
+
+ The command line client exports a client interface to Geni that may be used + for testing and demonstration purposes. It allows easy invocation of Geni api + functions and dumps the results in a human-readable format. +
+
+   +
+
+ The command line client is located in the cmdline + subdirectory +
+
+   +
+
+ 1.5 Geni Protocol +
+
+   +
+
+ The Geni protocol is based on XML-RPC. It is implemented primarily in the + geniserver.py and geniclient.py files located with the utility classes. + Modifications to the XML-RPC protocol include the following: +
+
+   +
+
    +
  1. + The transport mechanism uses HTTPS instead of HTTP. +
  2. +
  3. + HTTPS certificate verification is disabled so that custom Geni verification + based on GID can be done instead. +
  4. +
  5. + When an exception occurs on the server, verbose exception information is + sent to the client, to assist debugging efforts +
  6. +
+
+   +
+
+ Authentication: +
+
+   +
+
+ Authentication of the client by the server is done by using Credentials/GIDs. + Generally, each operation contains a credential as the first argument. This + credential includes the GID of the caller, which in turn contains the public + key of the caller. The server ensures that this public key matches the public + key that is being used to decrypt the HTTPS connection, thus ensuring the + caller must posess the private key that corresponds to the GID. +
+
+   +
+
+ Authentication of the server by the client is left as an exercise for the + client. It may be done easily by specifying the server's public key when the + client create the HTTPS connection. This presumes the client knows the public + key (or GID) of the server he is trying to connect to. +
+
+  
+ 1.6 Extending Geniwrapper to other environments
+
+ The PLC Wrapper and Component Wrapper are implemented to work on top of the + Planetlab environment, but Geniwrapper was designed specifically to be easy to + port to other platforms or environments. The utility classes are generally + planetlab-independent, and the planetlab specific code is located in the + directories that house the PLC and Component wrappers. The utility classes + implement most of the complexity of the Geni wrapper, allowing the PLC and + Component wrappers to be relatively lightweight.
+
+ For example, looking at the code for the stop_slice function implemented in + the component wrapper:
+
+     def stop_slice(self, cred_str):
+         + self.decode_authentication(cred_str, "stopslice")
+         slicename = + hrn_to_pl_slicename(self.object_gid.get_hrn())
+         print "stopslice:", slicename
+         accounts.get(slicename).stop()
+
+ The hrn_to_pl_slicename() function and accounts() class are planetlab-specific + and implement the actual stopping of the slice. The remaining code that + implements the Geni protocol, decodes credentials and authentication, etc., is + planetlab-independent, and could be easily used in a non-planetlab + environment.
+
+
+
+ 2.0 Utility Classes +
+
+   +
+
+ 2.1 Certificates and Keys (cert.py) +
+
+   +
+
+ Geniwrapper uses two crypto libraries: pyOpenSSL and M2Crypto to implement the + necessary crypto functionality. Ideally just one of these libraries would be + used, but unfortunately each of these libraries is independently lacking. The + pyOpenSSL library is missing many necessary functions, and the M2Crypto + library has crashed inside of some of the functions. The design decision is to + use pyOpenSSL whenever possible as it seems more stable, and only use M2Crypto + for those functions that are not possible in pyOpenSSL. +
+
+   +
+
+ 2.1.1 Keys +
+
+   +
+
+ Public-private key pairs are implemented by the Keypair class. A + Keypair object may represent both a public and private key pair, or it may + represent only a public key (this usage is consistent with OpenSSL). +
+

+      +

+
+ 2.1.2 Certificates +
+
+   +
+
+ The certificate class implements a general purpose X509 certificate, making + use of the appropriate pyOpenSSL or M2Crypto abstractions. It also adds + several addition features, such as the ability to maintain a chain of parent + certificates, and storage of application-specific data. +
+
+   +
+
+ Certificates include the ability to maintain a chain of parents. Each + certificate includes a pointer to it's parent certificate. When loaded from a + file or a string, the parent chain will be automatically loaded. When saving a + certificate to a file or a string, the caller can choose whether to save the + parent certificates as well. +
+
+   +
+
+ Example creation of a certificate: +
+
+   +
+
+       # create a key for an issuer
+       issuerKey = Keypair(create=True)
+       issuerSubject = "testissuer" +
+
+   +
+
+       # create a key for the certificate +
+
+       userKey = KeyPair(create=True) +
+
+   +
+
+       # create the certificate, set the issuer, and + sign it +
+
+       cert = Certificate(subject="test")
+       cert.set_issuer(issuerKey, issuerSubject) +
+
+       cert.set_pubkey(userKey)
+       cert.sign() +
+
+   +
+
+ 2.1.3 Certificate Verification +
+
+   +
+
+

+ Verification examines a chain of certificates to ensure that each parent + signs the child, and that some certificate in the chain is signed by a + trusted certificate. Verification is a basic recursion: +

+
    if this_certificate was signed by trusted_certs:
return
else
return verify_chain(parent, trusted_certs)
+
+
+ At each recursion, the parent is tested to ensure that it did sign the child. + If a parent did not sign a child, then an exception is thrown. If the bottom + of the recursion is reached and the certificate does not match a trusted root, + then an exception is thrown. +
+
+      
+ 2.2 GIDS (gid.py) +
+
+   +
+
+ GIDs are a derivative class of certificates and as such the GID class + inherits all the methods of the certificate class. A GID includes a tuple + of the following fields:  +
+
+   +
+
+    (uuid, hrn, public_key) +
+
+   +
+
+ UUID is a unique identifier and is created by the python uuid module (or the + utility function create_uuid() in gid.py). +
+
+   +
+
+ HRN is a human readable name. It is a dotted form similar to a backward domain + name. For example, planetlab.us.arizona.bakers. +
+
+   +
+
+ PUBLIC_KEY is the public key of the principal identified by the UUID/HRN. It + is a Keypair object as defined in the cert.py module. +
+
+   +
+
+ It is expected that there is a one-to-one pairing between UUIDs and HRN, but + it is uncertain how this would be inforced or if it needs to be enforced. +
+
+   +
+
+ 2.2.1 Encoding and Decoding +
+
+   +
+
+ The 5 fields of the GID tuple are stored in the subject-alt-name field of + the X509 certificate. Two routines are included to package and unpackage these + fields: Encode() and Decode(). Encode should be called prior to signing the + GID. Decode is automatically called on demand by the various get_*() + functions. +
+
+   +
+
+ 2.2.2 Verification of GIDs +
+
+   +
+Verification first performs the checks of the certificate class (verifying that +each parent signs the child, etc). In addition, GIDs also confirm that the +parent's HRN is a prefix of the child's HRN. Verifying these prefixes prevents a +rogue authority from signing a GID for a principal that is not a member of that +authority. For example, planetlab.us.arizona cannot sign a GID for +planetlab.us.princeton.foo. +
+   +
+
+ 2.3 Credentials (credential.py) +
+
+   +
+
+ Credentials are a derivative class of certificates and as such the credential + class inherits all the methods of the certificate class. A credential includes + a tuple of the following fields: +
+
+   +
+
+     (GIDCaller, GIDObject, LifeTime, Privileges, Delegate) +
+
+   +
+
+ GIDCaller identifies the holder of the credential. When a credential is + presented to a component, the security layer ensures that the client matches + the public key that is contained in GIDCaller. +
+
+   +
+
+ GIDObject identifies the object of the credential. This object depends upon + the type of the credential. For example, the credential for a user likely has + GIDObject == GIDCaller. Credentials for slices would include the GID of the + slice in the GIDObject field. Credentials for authorities include the GID of + the authority in the GIDObject field. +
+
+   +
+
+ LifeTime is the lifetime of the credential. Currently not implemented; expect + to implement it as an expiration date, and refuse credentials beyond that + date. +
+
+   +
+
+ Privileges is a Rights object that describes the rights that are granted to + the holder of the credential. +
+
+   +
+
+ Delegate is a True/False bit that indicates whether or not a credential can be + delegated to a different caller. +
+
+   +
+
+ 2.3.1 Encoding and Decoding +
+
+   +
+
+ The 5 fields of the credential tuple are stored in the subject-alt-name field + of the X509 certificate. Two routines are included to package and unpackage + these fields: Encode() and Decode(). Encode should be called prior to signing + the credential. Decode is automatically called on demand by the various + get_*() functions. +
+
+   +
+
+ 2.3.2 Verification of Credentials +
+
+   +
+
+ In addition to the checks for ordinary certificates, verification of + credentials also ensures that the delegate bit was set by each parent in the + chain. If a delegate bit was not set, then an exception is thrown. Each + credential must also contain a subset of the rights of the parent credential + (i.e. a user credential cannot delegate authority rights).
+
+ 2.4 Rights (rights.py)
+
+
Rights are implemented by two classes:
+
+ Right - represents a single right
+ RightList - represents a list of rights A right may allow several different + operations.
+
+ For example, the "info" right allows "listslices", "listcomponentresources", + etc.
+
+ 2.5 Records (record.py)
+
+
+   +
+
+ The GeniRecord class implements a Geni Record. The GeniRecord class implements + an abstract interface for the record, so that a client may use records without + having to understant the underlying implementation details, such as whether + the record is realized in the registry database, a local cache, or has been + transmitted over the wire by an interface. A GeniRecord is a tuple (Name, GID, + Type, Info). +
+
+   +
+
+   Name specifies the HRN of the object GID is the GID of the object +
+
+   +
+
+   Type is user | sa | ma | slice | component Info is comprised of the + following sub-fields +
+
+   +
+
+   Pointer is a pointer to the record in the PL database +
+
+   +
+
+   pl_info is planetlab-specific info (when talking to client) +
+
+   +
+
+   geni_info = geni-specific info (when talking to client) +
+
+   +
+
+ The pointer is interpreted depending on the type of the record. For example, + if the type=="user", then pointer is assumed to be a person_id that indexes + into the persons table. +
+
+   +
+
+ A given HRN may have more than one record, provided that the records are of + different types. For example, planetlab.us.arizona may have both an SA and a + MA record, but cannot have two SA records. +
+
+   +
+
+ 2.6 Tickets (geniticket.py) +
+
+   +
+
+ Similar to GIDs and Credentials, tickets also leverage the certificate object. +
+
+   +
+
+ A Ticket is tuple:
+    (gidCaller, gidObject, attributes, rspec, delegate)
+
+     gidCaller = GID of the caller performing the operation
+     gidObject = GID of the slice
+     attributes = slice attributes (keys, vref, instantiation, + etc)
+     rspec = resources +
+
+   +
+
+ Tickets are created by invoking GetTicket() on the plc wrapper. The slice + attributes and rspec are taken from the planetlab slice database and represent + the current state of the slice. As of yet, tickets do not include any concept + of time -- a ticket represents the state of the slice at the current time + only. +
+
+   +
+
+ Tickets are redeemed by invoking RedeemTicket() on the slice interface. The + attributes and spec are combined back into a planetlab slice record and handed + off to the node manager. +
+
+   +
+
+ Tickets are signed by an authority and include parentage information that + traces the chain of authorities back to a trusted root. +
+
+   +
+
+ 2.6.1 rspecs +
+
+   +
+
+ The rspec is currently a dictionary of {name: value} pairs. These pairs are + taken verbatim from the planetlab slice database. +
+
+   +
+
+ The general rule that is used is that things in the slice record that do not + specifically imply a tangible resource (initscripts, keys, etc) are treated as + attributes and things that do specify a tangible resource (disk, network, etc) + are treated as the rspec. +
+
+   +
+
+ TODO: The definition of an rspec is evolving. It remains to reconcile the + eclipse schema with Geniwrapper. Gacks is also using another rspec format, + which may be need to be reconciled with the eclipse schema and/or geniwrapper. +
+
+   +
+
+
+ 2.6.2 Encoding and Decoding +
+
+   +
+
+ The 5 fields of the credential tuple are stored in the subject-alt-name + field of the X509 certificate. Two routines are included to package and + unpackage these fields: Encode() and Decode(). Encode should be called prior + to signing the ticket. Decode is automatically called on demand by the + various get_*() functions. +
+
+   +
+
+ 2.6.3 Verification of Tickets +
+
+   +
+
+ Verification uses the standard parentage verification provided by the + certificate class. Specifically, each certificate is signed by a parent, and + some certificate must resolve to the trusted root set that is specified on + the component. +
+
+   +
+
+ Unlike credentials and GIDs, the parent of a ticket may be a degenerate + ticket that does not include the full 5-tuple (caller, object, attributes, + rspec, delegate). In such a case, the parent is just a placeholder in the + chain of authority used to convey the parentage information. +
+
+   +
+
+ Delegation of tickets is not something that is discussed in the SFA, but it + is supported in the ticket class and may be a useful feature. For example, + Alice may hold a ticket for a particular component, and delegate that ticket + to Bob. Bob could then instantiate a slice for Alice. This may be one way to + implement a slice manager.
+
+ 2.7 Hierarchy of Authorities (hierarchy.py)
+
+ This module implements a hierarchy of authorities and performs a similar + function as the "tree" module of the original geniwrapper prototype. An HRN + is assumed to be a string of authorities separated by dots. For example, + "planetlab.us.arizona.bakers". Each component of the HRN is a different + authority, with the last component being a leaf in the tree. Each authority + is stored in a subdirectory on the registry.
+
+ Inside this subdirectory are several files:
+ *.GID - GID file
+ *.PKEY - private key file
+ *.DBINFO - database info
+
+ The hierarchy class can be used to create GIDs, Credentials, and Tickets for + a given authority. +
+
+
+   +
+
+ The default behavior is that all authorities contained in the hierarchy will + be located together in a single physical registry. However, this is not + strictly necessary. The *.DBINFO files contain the database information for an + authority and can easily be configured to point to other machines. How an + authority would cause the DBINFO files to be installed in the correct places + is left as a separate exercise, possibly via an out-of-band management + interface or a web page. +
+
+
+ 2.8 Configuration Information (config.py)
+
+ This module holds configuration parameters for geniwrapper. There are two main + pieces of information that are used: the database connection and the PLCAPI + connection.
+
+ Geniwrapper uses a MYSQL database to store records. This database may be + co-located with the PLC database, or it may be a separate database. The + following parameters define the connection to the database. Note that + Geniwrapper does not access any of the PLC databases directly via a mysql + connection; All PLC databases are accessed via PLCAPI.
+
+

+ Geniwrapper uses a PLCAPI connection to perform operations on the registry, + such as creating and deleting slices. This connection requires an account on + the PLC server with full administrator access. The Url parameter controls + whether the connection uses PLCAPI directly (i.e. Geniwrapper is located on + the same machine as PLC), or uses a XMLRPC connection to the PLC machine. If + you wish to use the API directly, then remove the Url field from the + dictionary. +

+
+
+ 2.8.1 Database Configuration +
+
+   +
+
+ Below is an example database configuration from config.py: +
+
+   +
+
+ def get_default_dbinfo():
+     dbinfo={}
+     dbinfo['dbname'] = 'planetlab4'
+     dbinfo['address'] = 'localhost'
+     dbinfo['port'] = 5432
+     dbinfo['user'] = 'pgsqluser'
+     dbinfo['password'] = '4c77b272-c892-4bdf-a833-dddeeee1a2ed' +
+
+     return dbinfo +
+
+   +
+
+ This identifies several important pieces of the database configuration. The + name specifies the database name as used by pgsql. The address is the hostname + (or ip-address) of the machine that is hosting the database. It is most likely + the local machine. Port specifies the socket port where the pgsql is + listening. The user and password authenticate Geniwrapper to the pgsql + database. In this example, an existing PLC database was used. This is not + strictly necessary as only Geni-specific information is stored in this + database. A separate database could be used, on a separate machine than PLC if + desired. +
+
+   +
+
+ 2.8.2 PLCAPI Configuration +
+
+   +
+
+ Blow is an example PLCAPI configuration from config.py: +
+
+   +
+
+ def get_pl_auth():
+     pl_auth = {'Username': + 'root@198.0.0.132',
+     'AuthMethod': 'password',
+     'AuthString':  'root',
+     "Url": + "https://localhost:443/PLCAPI/"
+     } +
+
+     return pl_auth +
+
+   +
+
+ The PLCAPI configuration tells Geniwrapper how to connect to PLC. There are + two options: a local connection or a remote connection. If the Url field is + defined, then a remote connection is assumed, and Geniwrapper will attempt to + connect via XMLRPC to a remote PLCAPI server. If the Url field is not defined, + then Geniwrapper will assume that PYTHONPATH includes the relevant PLCAPI + classes to use PLCAPI directly. +
+
+   +
+
+ Username specifies the name of the PLCAPI user. It is suggested that a user + with full administrative authority be allowed. Otherwise, Geniwrapper will be + unable to lookup public keys and other information that PLC does not make + available publicly. Administrative permission is also required to create PLC + sites, users, etc. Authmethod and AuthString specify the password require to + use this account. +
+
+   +
+
+ 2.9 GeniServer and GeniClient +
+
+   +
+
+ Two files, geniserver.py and geniclient.py implement a basic Geni server and + client. +
+
+   +
+
+ Geniserver forms the basis of any server that exports a Geni interface. + Examples include the PLC and Component wrappers. The Geniserver class itself + does not export any useful API functions other than a "noop" function that can + be used to test the server interface. Descendant classes register additional + API functions by overriding the register_function() member of the geniserver + object. +
+
+   +
+
+ Geniserver provides a function, decode_authentication, that decodes + credentials. Credentials are supplied as the first parameter to many registry + and slice interface API functions. This function converts the credential + string supplied by the user into a credential object, checks to see that the + key the caller is using to encrypt the SSL connection matches the public key + in the caller GID of the credential, checks to see that the credential allows + the operation the caller is attempting to do, and finally verifies that the + parentage of the credential traces back to a trusted root. +
+
+   +
+
+ Geniclient provides a variety of client-side stubs for invoking operations on + Geni interfaces. These stubs convert objects into strings that may be encoded + by XMLRPC, call the associated XMLRPC function, and convert the results back + into objects. Use of the Geniclient class is optional, but it makes a + convenient mechanism to execute API calls. +
+
+   +
+
+ 3.0 The PLC Wrapper +
+
+   +
+
+ This wrapper implements the Registry and Slice interfaces. According to the + SFA, the basic functionality of a registry is to map HRNs into records. + However, because of the interactions between Geniwrapper and PLC, the registry + does more than act as a simple database. The registry performs API calls on + PLC that create slices, sites, users, etc., and as such may indirectly cause + slices to be instantiated on components, because components are also linked to + PLC. +
+
+   +
+
+ The mapping of Geni objects to planetlab objects is relatively + straightforward: +
+
+   +
+
+     slice = slice +
+
+     user = person +
+
+     component = node +
+
+     sa = site +
+
+     ma = site +
+
+   +
+
+ The one part that is slightly counterintuitive is SA and MA, which both map to + the planetlab site object. In a unified registry (a registry that serves as + both slice and component registry), these will map to the same site record in + the PLC database. However, there are two distinct Geni records, one for + the SA and one for the MA.  +
+
+   +
+
+ Registry and slice operations generally authenticate the caller by + credential. There are a few exceptions, and the registry API documents + should note those exceptions.  +
+
+   +
+
+ 3.1 PLC Wrapper Tools +
+
+   +
+
+ The registry include several additional tools that are used to manage it. + These include: +
+
+   +
+
+ import.py - imports existing PLC records into the registry +
+
+   +
+
+ nuke.py - deletes all Geni records +
+
+   +
+
+ 3.1 Bootstrapping the PLC Wrapper +
+
+   +
+
+ There are several items that need to be done before starting the plc wrapper. +
+
+   +
+
+ 1) Update util/config.py to match the parameters of your PLC installation. +
+
+   +
+
+ 2) Import the existing planetlab database, creating the appropriate geni + records. This is done by running the "import.py" tool. +
+
+   +
+
+ 3) Create a "trusted_roots" directory and place the certificate of the root + authority in that directory. Given the defaults in import.py, this certificate + would be named "planetlab.gid". For example, mkdir trusted_roots; cp + authorities/planetlab.gid trusted_roots/ +
+
+   +
+
+ 4.0 The Component Wrapper +
+
+
+ The Geni Component Wrapper implements the Geni Slice and Component Management + interfaces. It includes functions for redeeming tickets, + starting/stopping/resetting/deleting slices, and management such as rebooting + the component. +
+
+   +
+
+ The design of the component differs from the plc wrapper in the respect that + the component wrapper must be run in the same domain (VM) as the NM for the + node it is responsible for. That is, the component wrapper directly calls + the local node manager. +
+
+   +
+
+ 4.1 Component Authentication of Credentials +
+
+   +
+
+ The component authenticates credentials the same way that the plc wrapper + does. Specifically, there is a directory of trusted_root certificates (or + GIDs) on the component. Any credential presented to the component must include + in it's parentage some certificate in the set of trusted roots. Otherwise, and + exception is thrown. +
+
+   +
+
+ 4.2 The Ticket interface +
+
+   +
+
+ Mainpulating tickets is split between the PLC wrapper and the Component wrapper. + Specifically, the authoritative copy of planetlab state is stored on PLC and only cached on + the components. Thus, GetTicket() is implemented by the plc wrapper, and + RedeemTicket() is implemented by the component wrapper. Attempting to call GetTicket() + on a component will fail.
+
+ InstantiateSlice is not implemented, as that operation is a combination of + GetTicket/RedeemTicket and would therefore span the PLC and Component + wrappers.
+
+
+   +
+
+ 4.3 Sliver Credentials +
+
+   +
+
+ A recent Geni Architecture call mentioned the need for sliver credentials. A + sliver credential would be identical to a slice credential, but would 1) only + be redeemable on a particular component, and 2) would resolve to a + trusted_root unique to that component (likely the component's GID + certificate). Sliver credentials would be returned by the RedeemTicket call + and would give the caller the permission required to start and stop the + sliver, etc. +
+
+   +
+
+ Sliver credentials are not yet implemented, but their implementation would be + straightforward. +
+
+   +
+
+ 4.4 Bootstrapping the Component Wrapper +
+
+   +
+
+ The first step is to install some required libraries on the component. These + include the m2crypto and pyopenssl libraries. Installing the actual RPMs for + these libaries on a running component proved difficult due to additional + support packages that require installation (python-devel, etc). For + development purposes, it was sufficient to copy the installed/compiled version + of the libraries from the development machine to the component. +
+
+   +
+
+ The second step is to copy the files required by the component wrapper to + the node manager. They are copied to the /usr/share/Nodemanager directory. A + list of the files is contained in the copynode.sh script in the component + subdirectory. +
+
+   +
+
+ The third step is to copy the trusted root certificates to the component. They + are stored in /usr/share/Nodemanager/trusted_roots. This should include the + certificate for the registry. +
+
+   +
+
+ The fourth step is to start the component manager. This is done by + connecting to the component via SSH and running + /usr/share/Nodemanager/component.py. +
+
+
+ In a production environment, all of these steps would be integrated into the + DVD boot image for the planetlab node. +
+
+   +
+
+ 5.0 Command-Line Interface +
+
+   +
+
+ A command-line interface is provided that allows a user to interact with the + Geni Registry and Component. This command line interface is located in the + cmdline directory and can be invoked by running genicli.py. Specifying + "genicli.py help" will display a list of available commands. +
+
+   +
+
+ 5.1 Examples +
+
+   +
+
+ Several examples of using the CLI are presented in the form of shell scripts + in the cmdline directory. These scripts demonstrate creating slices, + authorities, users, nodes, and getting tickets and redeeming tickets. Rather + than duplicating all of those examples here, a few short examples are + presented below. +
+
+   +
+
+ 5.1.1 Getting a Credential +
+
+   +
+
+ python ./genicli.py --username root --credfile None --outfile test.cred + getCredential user planetlab.us.pl.account_test +
+
+   +
+
+ The credential for planetlab.us.pl.account_test is retrieved and stored in the + local file test.cred. The private ket test.pkey is used when opening the + XMLRPC connection and authenticates the client. test.pkey must match the + public key that is in the GID for the user record for + planetlab.us.pl.account_test. +
+
+   +
+
+ Sample output: (in human-readable summary) +
+
+   +
+
+ CREDENTIAL planetlab.us.pl.account_test
+       privs: refresh,resolve,info
+   gidCaller:
+           hrn: + planetlab.us.pl.account_test
+          uuid: + 276262316202422735940395896620385479122
+   gidObject:
+           hrn: + planetlab.us.pl.account_test
+          uuid: + 276262316202422735940395896620385479122
+    delegate: False +
+
+   +
+
+   +
+
+ 5.1.2 Resolving a record +
+
+   +
+
+ python ./genicli.py --username test resolve planetlab.us.pl.account_test +
+
+   +
+
+ The record for planetlab.us.pl.account_test is retrieved and printed to + stdout. The credential used comes from the local file test.cred. +
+
+   +
+
+ Sample output: (in human-readable summary) +
+
+   +
+
+ RECORD planetlab.us.pl.account_test
+         hrn: planetlab.us.pl.account_test
+        type: user
+         gid:
+           hrn: + planetlab.us.pl.account_test
+          uuid: + 276262316202422735940395896620385479122
+     pointer: 6
+   geni_info:
+         email : + test@test.com
+     pl_info:
+         bio : None
+         first_name : test
+         last_name : account
+         last_updated : 1222497672
+         uuid : None
+         roles : ['user']
+         title : None
+         url : None
+         key_ids : [1]
+         enabled : True
+         slice_ids : [24]
+         phone : None
+         peer_person_id : None
+         role_ids : [30]
+         person_id : 6
+         date_created : 1219083140
+         site_ids : [1]
+         peer_id : None
+         email : + test@test.com +
+
+   +
+
+ 5.1.3 Updating a record +
+
+   +
+
+ python ./genicli.py --username test update user planetlab.us.pl.account_test +
+
+   +
+
+ The record for planetlab.us.pl.account_test is updated. The credential used + comes from the local file test.cred. No changes are specified, so the only + thing that should be updated is the expiration time. +
+
+   +
+
+ 5.1.4 Resolving an authority +
+
+   +
+
+ An authority is an example of an HRN that might resolve to two different + records, an SA and a MA record. +
+
+   +
+
+ python ./genicli.py --username test resolve planetlab.us.pl +
+
+   +
+
+ Sample Output: (in human readable summary) +
+
+   +
+
+ RECORD planetlab.us.pl
+         hrn: planetlab.us.pl
+        type: sa
+         gid:
+           hrn: planetlab.us.pl
+          uuid: + 294786197975089072547582920862317666209
+     pointer: 1
+   geni_info:
+         pi : + ['planetlab.us.pl.Administrator_Default']
+     pl_info:
+         last_updated : 1224136003
+         node_ids : [1]
+         site_id : 1
+         pcu_ids : []
+         max_slices : 100
+         ext_consortium_id : None
+         peer_site_id : None
+         abbreviated_name : plctest
+         uuid : + 230749975723590978208303655640765327534
+         person_ids : [2, 4, 6]
+         slice_ids : [24, 1, 2]
+         latitude : None
+         peer_id : None
+         max_slivers : 1000
+         is_public : False
+         address_ids : []
+         name : plctest Central
+         url : + http://198.0.0.132/
+         enabled : True
+         longitude : None
+         login_base : pl
+         date_created : 1209428329
+ RESULT:
+ RECORD planetlab.us.pl
+         hrn: planetlab.us.pl
+        type: ma
+         gid:
+           hrn: planetlab.us.pl
+          uuid: + 294786197975089072547582920862317666209
+     pointer: 1
+   geni_info:
+         operator : []
+         owner : + ['planetlab.us.pl.Administrator_Default']
+     pl_info:
+         last_updated : 1224136003
+         node_ids : [1]
+         site_id : 1
+         pcu_ids : []
+         max_slices : 100
+         ext_consortium_id : None
+         peer_site_id : None
+         abbreviated_name : plctest
+         uuid : + 230749975723590978208303655640765327534
+         person_ids : [2, 4, 6]
+         slice_ids : [24, 1, 2]
+         latitude : None
+         peer_id : None
+         max_slivers : 1000
+         is_public : False
+         address_ids : []
+         name : plctest Central
+         url : + http://198.0.0.132/
+         enabled : True
+         longitude : None
+         login_base : pl
+         date_created : 1209428329 +
+
\ No newline at end of file diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 00000000..463dbaf6 --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,11 @@ +### this seems like totally out-of-date +doc: + pythondoc.py ../sfa/util/certificate.py ../sfa/util/credential.py ../sfa/util/gid.py \ + ../sfa/util/rights.py ../sfa/util/config.py ../sfa/trust/hierarchy.py \ + ../sfa/util/record.py ../sfa/util/client.py \ + ../sfa/util/server.py + + pythondoc.py ../sfa/registry/registry.py ../sfa/registry/import.py \ + ../sfa/registry/nuke.py + + pythondoc.py ../component/component.py diff --git a/docs/README b/docs/README new file mode 100644 index 00000000..3dad1aaf --- /dev/null +++ b/docs/README @@ -0,0 +1,5 @@ +This directory contains API documentation. See the developer's wiki for a +general design overview. + +API documentation is generated by using the pytondoc tool. +See http://effbot.org/zone/pythondoc.htm to obtain the tool. diff --git a/docs/geniwrapper.doc b/docs/geniwrapper.doc new file mode 100644 index 0000000000000000000000000000000000000000..e42b9af8994ab7580db5af54bc2254c9edfda4c7 GIT binary patch literal 186880 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

Hvt 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 z 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�j*EtRf%**Hams?pWpZ3whxOi!BbogSE-u~fJ~vc|a7ve>mMy&HGaYb864 zYh61t?3+~J^I6<}`)Lv5KdqN5U#2J|#T1Ii+ffixy_ziiGX4=cVHX3tQZaS7(}Yc# z#QnG$`3eN#>fl$r69U$WC;%Udguwr};d%>M{S6=vWx0k;7RZEw#3p={L9iHCFAat- zzkJ~J*}IS59=-JT;V&uN-ngN&bMr#?ZNBi6>o!0AJL)}AdAMQWzW4U6n*3;sxcT8_ zC!_!P^CQ=;=61I(-L!J*J{~x>6SV6*-2f}HL^wOT{4w0F{S`kD@r`AVvtlg zcgokucgbnF8;B4ACoFOq9CQ-z-OzZj_|NW z{KZ>5XzeZQH@)ffVXvA#0B$w!U`L#{IM`Gymf-JcKsHXImXSM(chI1LlMiZ)s`n!w z5QyL-i(77>y(P+Uf!9thzSo+&<+euKlq&g>TW&YY*8Sx+uko2PD3`7f?c1ZzZQo9=>lyl4sAlfws}!$u$;+r^qGjS`+6|%&;;rUxp9uN2-3W+(h;n{YJZuv(?*ZTOci!68ZIJox(_Btsgn1 z&s*aa8T}?BEpo=w;4FW^N$kziW_hBG7K>0A%r8V6h2g@}04&P_CU|y&Fg(m))qCI@ zo{qdn_P~o(dDBG8E|{3STUUwxVF#~QF(b^zEH#N(GO>*^5)T>nK>`4v3Oi_lIr4IO znK`q)efjQrw#pP^RV~)ePcFy*$xQT(T)%Aov8f@6(iT~Yf4Yu8e*Cc{qfRIdvuqes z=JehBsm`Ak{4#TSx?Vu`2?eZFtr>x5QLQ{)4%M5flgThV)4cq)4o!#3AC{guraOy*QLftXCLkkX*fxxv9TE zWOZyK4YZt9lfyLi;mgriejGimBBN$pv5{gmhQ{)76RT6g{d*2H&b==Z$w>Xff!&W( zjup2R9ek~6?{k?PrfHkv`TI^q|4s=6wBKfT-F`pS`5%X;n5G%JaK!dS2W<4tO^a8` zyZ(LsDaA`q+_tlXjy}A)JSmRYz_Cyv-wYV%M4P!_D>a8|m)t=u6mJx7Okl+VMj)m{ ziA$L>ajB%#P-+!B1o0%-)<+E<7A%dYrG3;tII*5nIyAL%ONJ3j*4wOzgjlw9_niG(S`E;vw;h~6Yvum|X2M{1o$K*CROdUzO2 zqC#1kBnMCtb}&NG_}At{{~0~;6b?SSdBc>cdc9`p;PM}%+u!^nUWny8Uz$|lX9Wqp z1^Lmw=-?~SKldaUYjkOW{DPP9=y%`6BafvSq;p>bF#{d;5BH;Cvq;=rlt1B^;4IS z7(|Dfm*$U&4oD7w*tLO3_{`u{z)jSalWoRXFvI{388Tft*#eLo6><={VM8ur`yt{+ zjzl6Jx{E3qYpkk&Di6y)*@z8aEsN$w?^<~zIA#?NZJCKpdrw5qM&FygTh_K03W|xn z>*`DrS(t%xVeYd-`=c*JD`{31EY$6O5o)$cI78pw6N9*NSJ~AJ@L^&aYVWcOZ zB;{0G_ zUoav)$80H!qZW5Q9KGJP^worBzf!KWR*$@G&iFLE_GsH=x1e0Q?7+5rF-=V!@m;u_ zWy|ZnZlE5!wsT{VR3g;1Z2Y9gFQoy?5?6mnxwaf|XjlkI{a=7dn5pdJA|pn3)&IyiDb^cd8Ea~~#Dzd`gDe63Y4FI;q_zRBZl zt$unF6>hD!)0|MVZAaHqSz-RY3*B*INmz_aDz9+VX)DM7p zTI!z!GN^y`CiiFb;a@n*T531-7$jz>AjMJj)B@;*2-%lQ4~Mdb0k3Tkg!ft@fjvIw zP&hac;cW(yK%u~ycmv!Z@&%fagnE+G&I;9#f`eQPnA%~y$jH$%_bHW|q6Z)NHoEup zIlKT{7QgyXW1Om3Ws63ij{fDL=N>qWbDnrfDAG?_HqhB#f&bjlJaKVW_&Bcl(?@vB z37g+I=jGBVYWw6z4nzl{-}ir7)i8ObODd9Z5=lmkc7E__)&Mq)M$dBU)EjGmmLbQ=cpwt@7qD_>jBFsA`$K+f&_$1|k0$(0U9?@SA z&VsdL!GijNo&vg{kIw8JBLevR>PQmm*MRRseR)``nK!0h^>!2#pNJs5wGFQk*M>MY z{JV6GR{y7Vps8FkJm0x1F z-A+3`3N|Jqw|xDIrGF`&?eQM%0V7SN6yRX;sw^Y`f>N5hJ}~=fqLn zcRzDi#RwlG-T6uMP3lDSN_EH9cpGtQs&FDT0Sl|hx-Bv1y-Om|YtJu9Ng~^c6Ml$% z7=4F7<_yk!9ScN6c8i97rn-Rs324-@_~tlSvqVWu&tWh<$U;^U;zSm3|GqkA)KP|h z0fM7n9i@eoV4lMcN(^M;lQ9H9VU@gMY4jXW(EmXf*l~jZMd3D=y?)HoPi&b#vMPyY z5+|0fyzAMmxvh9T9*1|2<)67?ZuGn8{^-ilu*J*E(3NN>wE~{kjz%1rZQEz1An17n zB~S-@wL0RZ9#J=Im6R49^039+F9zp#eJ}Lm0nZPK=OsFb0r;SB0C-Mt<}!J9-c-`r zq2XMc`d3!63JMG(?-CekTA!U;&$*|S-S%|f+R`x&nbmt`jyAf)XKj=w&KsmB;o6bp znFXvNwEOy#AGF)57Z=?Z~;PD z>7k%hB9}XYL4zyT)9ea0rxsAWNmQg{=hH4qWNJ3VLHiTY0;>f|Nd{3kA0vsBQRds3 zAXCq@GXkbWpF)^~g3A7cBw*rKN5cs?VO|NRIv0(J`B@nF2W@9~|C~>%#iaemVX?mk z2m;3fmb36qP9ksM$1^IgiWTu`H8CcMBi=>F0J}gZ;|B~IvBf1LBcq)ny;#{+_vGr0_m8Q!gH#+FTk!Mf@+7fh?6NJ`I={MZLU#4EBeXoS zsX!|ODpPklJkj%?>v_p8_>y`UYbyxxX*yxzC((bFb#BM*O4!bMn(!cV=$had@E{4* zA7iOqk_Y6?D)6QbDMdEoQXGMdnwesWuuE2p+>jRkvNy3`Njxkwh>doh+XaLJ=Nv56 zCE}Qa*zk_l#q=O}Q2?66)Ijml1r9+m{x6}|tF`##l(v&|YDX8Am=&!LMU&d!s*jH^ zoA=$QS-p3Jtn>s%BGUi;rF}|~G~}$uddiJ`{Ah|kk8Fruj^Sir=rTJ4#!!lbT#*dD z=K0Y>vmTe{T@Nk548_obWV67`#0lfvW{(TXqOK%Y^3$HzJeNFIJ!;lXc{H9xIGcg8 z@K{bvBORR-4-qQaN=WtSQa!1jMXW$4@T9T=c9ADZm*h!G60oVr1J&_vPUWRBy;|zQ z9uH!bMHoV!uMVUB%(Prs;p8aOp2=m>ndL}^A*}fdv3TrZ!*p|knjH3;=arXvSVSiY z0*wiczUIW{q|`LpPRWXMX-#86v$9#8S47K20$L38y%}7RAd|#D#yqS#7Xg{Q1Q~U3 z7l_(M+KPyXwwbPy96KLo3RGTJ1TU3<{{*03*oGFii7`bx-8BB6;Cl-`YoPF>(cX|x z5a(N^Sbvg^g@gWd(M?akqnC8a(_E*4~t2)*FXo4w)@%>HZbzEzn8504|0Vj*8X~3cj2%x<+3%Dl67hwS>&eL1_!?&M zA~;s`Qp9z&nw(XEg&@2Bq0faYf$zm=2d913`BX853Jd$)cAeX8_oh>E1PNr;G+VRX z7o@Ee3z6m*oLtf@6N&P~_Cm^yywE5KRgJMI2%L}vbLw+?a_Ah6JqcVwuv-REgmxYm zCNfS$oOlqiqD9ORGm_2+u!y9vD1gGEiFYT62^_9s@xE9r22F!n6|dwrY{Uj5U@0Ga z@Ji1L%~)ql!%)G;&~xD!&CP2m`lPxfnUT^|TvniXO<8r*)E6h=rsHGdr`J6`zU}Uj zZ3?k!t54V2C3reA^4qqm1ePJBNeaz>3IDKTTfR3DHdhQRiB9~gg<6mAu9L9jcyUT} zakS`YM6WfhyqD+?g#yr*5eGh+3?i@P+!RL1XeCBTTm@UItTi^W<0Uf$GuYXZh0H?b z3gZTLqhhUcr}20AZpHgjgHUP4W=bp2GG>WcYE&BI8U>Ba3`S;NO4I74khoedw8@u` zhCX2Erh62$>aZ;y{IRx$B;&?s97)8XSODkML{Sbgb3mp+<{y1 zwrFnjsgI*?9DQpq7VO{q&8EAD(2I|KvyplQ*Wf+T?a{ZQhoW2$9*ccnMGx-36I=fH z9`@hAIT|5Y2mX}cB(oEI(Jh>waTpyFToZzGU2}sA92*>>6pt^pkNOWM_U-a`L>U>o z68fm0dgEpi7(8mGKx|?Hq!!6Uf#uE+BvHli5~TtVw0v-9GuZQ&>Btx zGe>1k%~*AMVfTc3NtpaE%5Z*NewYyo zT3YU%ceYDA!npsg9S_Gav;b^z4aD9>Xn+edd1kpTFIk>1Z#8ro*5`>JN|EW5GNr7a zfFq6mdz%Ii1d% zt@`B!RUBK-wzCUZ0b+wtH4KZ95{r}$LRM?PH|PeKJmj4hF20qlV4~ZWy>H^9AYzH3 z_!YC$*NFWY98fJgVZhB(GUf*K0 zfFmToB&79I?mC^BsIiPI&I?B$nYvJtZ{7dWWB1LTBTH->_4K@^FYB7@t{K_=Q%djH z9sd2HwzsIacAof|(|`uziyK!bG6#0AyUX+Fk!XDMQQkGG!_)DXIJ=e;F-%Q&`_7L* zUgL%a1f)ME6Mex|r>aslslHraoupJ=uCDY|`s)I9!Lh2bnh61r;=m@mx>8Z;ZCAHz zmV58;-QnMsdRTQ>eOU8GimX~$nL;VDl;uiF*@q``8fhv{^}>?wR4POUBuc0I@X2GM zrRlWU;Ee0Tw{c46QiE8jptRCdFXc|7PeI^?XbGag3Y7z7PVCi&tS`aNIO-=TWJqC0 z8WH>t2H(3%8XA^eGY#<8DF&B(rY_9C6K0VYt7?lZya2pd*apc?KHef3IEcjnAZ--X zd>zpLknPDNHHP6r93W&GB%qR@LQbEyQWdEOr#yD7Zq2!KcQr?QqTjT?HdTYmb*`NI zTV6U>x%#=Uo|uR&KTkW$RLnY1KPor;#G3lWnOa@xo@r;J7d`IfCo?+IES{9!ZS|em z3QhIi#jpM31-d5!PP_qj#fzpKOo}@}{Q?y?ME!Ww(VUn-$%!*`gf}9tmtp)#)PGPS z^)q6@Got!sr@)|SVKV^;^98a3f+Rq#_MH!|MZlYeg#@2`3=d%_fC6COe~VkpS^y!G z*qM{%5oEf6HUJ6`!BZEd_9=A-SKjeLLuoQ2VQ2h1L!<~(GRiucO3~8A5~0C8e+T2g z_vy$R(N{|d+&eRu9;XVP-Dw=P`S$89Ec@)k8_LZzgf}ow58scs736CfXA}FfH5Kv- z%|!PE?_}Q`_Z;th-)djCPbM@cfGY&5E5%m2nX%YtOr+?M-W0K!m`@$pNgKpK_9QNe zN(zy*Mz6FVzVX$eKnx3Snoa`uM#$w8lS!0Nd(-I!^G8?=sfo}nK?V>3luto96M^eF zaKPz#r)|p1HIv+dGy9%hQePXGlXX6K!j|&U{>&|3-v98ow}&Xlc!qZ*s-qX9%RhW( zNwN1x1ZIv1>j*U(hfs7|bm-9ThPwHWo_ZOlW6N-#k$LC}^8)ZZ1-;9aS@qaLr5IA& z)l_A2lWsOORXbHTBY6d0K`p13sF!G$>6RsLqc*5FXxHnu=neWRy+Nnzr)bC=)A}kX zm_u!UET{3fb&z<0og!rLxE(1XsAiAl67_Zz1hb1A^$yD6O*QD`dbfw1q)$O&xit|w zu?TP`G=r4IJ0Pd>UnPa#loHy8YYDMf? ziaP8ML?0Y!sY!Ww{*ouAX4;tb(0#^k%1LS3)YQ5)Iq1!ezBoDAxOpkP=2haNRcm!} zRrJ}&XzDIJIxh|2fza8%?fThope}=ve&`DOcjkAf5Qn(LWR#M;Et$?}4r-g#`ZzpfSkx4UOl-$m6zebJ7BP-_YcvtS#Oi7Y}9qv7DZj=vY=_V+Ddm zPMgl@w9!ttn;a>OwS;-R-bDpSS5SZoyv{fYi&(WsK+{>lpkA-0JZ`tm7B4RFdfWmO zw7~&qe4K>V_u(^#?d>cEs?R$XaE6_0oV4=<)qyzB`ejhsu?KOmrf9_>z9!XXF^`N` zOpp_SwLxPZIN&_QnV?}5mK*P6AMpwq@Cvu2nY>$8-TFbA(4gtlVnU=Denb@x#ZX1Cds0#RNMvC%m_ak_JfbE{&bQ!J4Q>=csA?0yBbn*j@D`b3?>AT#O{^@)kFDy>)?AU=5_{6O&Z_6opY1C&qS$Vf$#!VbMooS_LbI6jWR)d~yUr?^%xVxg?t%!X8 zcnWZnx_wTxt_8Rn#Bzj(t_~rAY-k4f?@&9(=yQt3wNR;r__y-ln?x~gbczD7vktvO zCNTZ-&4V*Q7-D@Z@6xY;Jx+s>Z4tU-46*_WgqS2B${@eN|MnPC(Z7|RYwy;M%s5=*+;35 z*`=J6lID8*@IN^{LIGP~nHXjQiIg@>>baCHhh)?tX&&>#`G^jJIAWLz2cQKr0=17e z;7b4!@Puo`N-fmpcw!APMuS#!BlZQ;e4{U*7`u2jL7szU1c0r?SI_b6!gyY7XSn-W zwTz~8$)gteb0=YZ-kKd;x3%LCuB5WdR|gxC;!XI&=-=*bDzDpCOi>5RDvDF>ceGbS zm%zVrOIdcj*Y}8Cy=Lz8`>ONTgh!i9RVBL%XV0%4-!SeX&{hFHVgd6fplu=A$t5v5 zMo&??@u9h)1^Tu6^(LV*KaEb$aoExmpHF|tCPhuSk2Z4gEXwK9vRTW-N&^DHMWg^h z$Oi@4LDKp8E7f4KGT)%CCmo*g_(o3=sUwnZcDD!mYDjSwygn_7n1N_~6$sAOE1KK5 zYN<%iu$b=htf_wdLQR(G6MNyfy4y?Y6SZQ2B`qRS?QGcd*xn7zcg0DVQMqEB+{(B! z@~rDVe{ZEbaItUtsRHYxN^5d@t^C2~sFim=SY`R;huc(+roZif;n=h?%cNLLI6zm> zr=jjTm9vEsYGvgKjS2JFHS7}UBCBYYbe5Ikps9~iGGHfCIkDv-CF^*Ik?IK=Xmw9u zjVpfHWO1i>jd+(B>a$6zGkixcUu761-JX09Vu{&dmyws5G-&uFrDdTQUhYZk-wcM7$FJUjvY(kUnh-N*SQ37P5T>EoQ^(%Vzo(^uJ-rF183PLZZs zs7ycdd$di4cAZI**=3V5O+q3VCK2+_@vuQq8wVEca$uFi4qi&GsUKfK46QtdEL7@o z@$=d~TFJ?FDZo9mD>wzM$Rm;gQei9{ygaO9H|2tOytjx3j@734nljCj?C5ZlLv{}E zo^Q3eL7id3fI@+1NHc-Y3Me2o|7K1Eva%E6&LEMG!ojw0BZZf)Lp2%3 zeVG(R7RJJXYvEWa?nda%K;%to^emtVw4lY1Ho(F)L|zumqhE))_?2ipMqF5{(P_)HHO8^pHse(79K&MmiohL( ztGGp_i$`tN?n>E}x;A4yw`r6vLzAK1&Tbb85~)NwQIM!f)H3-H3Smx?^?1$)#dFfx zWaw2jAKE6wPk90&r6Ms1JBQzEh%pxTM4@=(X}Q01)Y>z0pLT-dO_T52;!UtHVK zzI07{`|Z*1t1Jx~+Y`GxpJ^-c8^_W@E@k{v(=p5~aQkQ`b4~q%ckVc}Va&Mnj5xnD zHN~7%VausqJpJilQF2hE_XZwWb^jgnH{G`e^f23zHG1BiV|R@xnWA7p7ZM=;e}s7# z{QupY5-}lRrLaLLK$ev3rW}Hi)_i2?60jakyDCXZr8enYDYQzWJ8L*DY6UOk&zy!6 zuNA*2rp2XVl!Qg_N&=I5tnhi1uq>F8O`ubv4C2Yb&L9;mA&Nn|whIToB}@TWxO|E9 zBHpY!5#tK*NnjynMS=YEEjeZ|n>^y)3{5Te+Q)C-AN^=r zzR4sI<+JQB|9Wys`RFXy_7}d(5Rx7FB37H2eUf?-OYMdtRlHT7a(HVU!P88@6)&>} zNuj5wl@lA|o2-_0lLY3g{~ihPfkU#CCUC43y)ssO5_Zve6EvkLkIJ7{A9tnzaw<9T zWDw*av}5>H=h{ANBb2)IEop@S+5K^l2N4j|-}EMej||52*Bm^6C#l}YGONWHd(%ow z(*mWXYfRuwiv_m4@;%F!EpN&&(hNf-WY={qX4aGi;DkV+ELx$gYmI)oef`8FD=Q{r z6$|3WuK9d#LxQD1Lu~HQbCFYc52JZ z?|tIl^Re2n0eTqU_yi(H{#&T9x98#)gNctDredK7n&A z-TlWTXU@D|PI})2h;lT~D){vAY52P}*SUO(Ve_GWO*P=UWK%(^T{q1g-5Bj;%d@Qu zw&XiXF1+UHbLf=bO=O7t<>!>jmxDo^Xp^5v{tRQc&QB#+RG@r!YV>w9CbsDPiv1ooYE-&^T}E{NAQK zksQ-fRp!_WcQ9{6KN*Zfqvuk zde*i~(+UCtE-ADIzNn_vCujroZi(>UIJHNao{%0$e>DBY^i%2Q)7f;u-y^xlAUKb z5nK&<&>JKtQRJ^jeuHRm2s-OX1I;iH;B}krNm-c-x8<#K1j7Zbd#Y$#aZPYZO1MFh zG-G7*9ZHEXuBPnZxYC!)3X^D&cV_j-)kdX&veZ

Rf%#h!Ts?T2*}aoEi;9)3W99 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 literal 0 HcmV?d00001 diff --git a/docs/pythondoc-cert.html b/docs/pythondoc-cert.html new file mode 100644 index 00000000..efff287f --- /dev/null +++ b/docs/pythondoc-cert.html @@ -0,0 +1,307 @@ + + + + +The cert Module + + +

The cert Module

+

Geniwrapper uses two crypto libraries: pyOpenSSL and M2Crypto to implement +the necessary crypto functionality. Ideally just one of these libraries +would be used, but unfortunately each of these libraries is independently +lacking. The pyOpenSSL library is missing many necessary functions, and +the M2Crypto library has crashed inside of some of the functions. The +design decision is to use pyOpenSSL whenever possible as it seems more +stable, and only use M2Crypto for those functions that are not possible +in pyOpenSSL. + +This module exports two classes: Keypair and Certificate.

+
+
Certificate(create=False, subject=None, string=None, filename=None) (class) [#]
+
+

The certificate class implements a general purpose X509 certificate, making +use of the appropriate pyOpenSSL or M2Crypto abstractions.

+

For more information about this class, see The Certificate Class.

+
+
Keypair(create=False, string=None, filename=None) (class) [#]
+
+

Public-private key pairs are implemented by the Keypair class.

+

For more information about this class, see The Keypair Class.

+
+
+

The Certificate Class

+
+
Certificate(create=False, subject=None, string=None, filename=None) (class) [#]
+
+

The certificate class implements a general purpose X509 certificate, making +use of the appropriate pyOpenSSL or M2Crypto abstractions. It also adds +several addition features, such as the ability to maintain a chain of +parent certificates, and storage of application-specific data. + +Certificates include the ability to maintain a chain of parents. Each +certificate includes a pointer to it's parent certificate. When loaded +from a file or a string, the parent chain will be automatically loaded. +When saving a certificate to a file or a string, the caller can choose +whether to save the parent certificates as well.

+
+
__init__(create=False, subject=None, string=None, filename=None) [#]
+
+

Create a certificate object.

+
+
create
+
+If create==True, then also create a blank X509 certificate.
+
subject
+
+If subject!=None, then create a blank certificate and set + it's subject name.
+
string
+
+If string!=None, load the certficate from the string.
+
filename
+
+If filename!=None, load the certficiate from the file.
+

+
+
add_extension(name, critical, value) [#]
+
+

Add an X509 extension to the certificate. Add_extension can only be called +once for a particular extension name, due to limitations in the underlying +library.

+
+
name
+
+string containing name of extension
+
value
+
+string containing value of the extension
+

+
+
create() [#]
+
+

Create a blank X509 certificate and store it in this object.

+
+
get_data() [#]
+
+

Return the data string that was previously set with set_data

+
+
get_extension(name) [#]
+
+

Get an X509 extension from the certificate

+
+
get_issuer(which="CN") [#]
+
+

Get the issuer name

+
+
get_parent() [#]
+
+

Return the certificate object of the parent of this certificate.

+
+
get_pubkey() [#]
+
+

Get the public key of the certificate. +It is returned in the form of a Keypair object.

+
+
get_subject(which="CN") [#]
+
+

Get the subject name of the certificate

+
+
is_pubkey(pkey) [#]
+
+

Return True if pkey is identical to the public key that is contained in the certificate.

+
+
pkey
+
+Keypair object
+

+
+
is_signed_by_cert(cert) [#]
+
+

Given a certificate cert, verify that this certificate was signed by the +public key contained in cert. Throw an exception otherwise.

+
+
cert
+
+certificate object
+

+
+
load_from_file(filename) [#]
+
+

Load the certificate from a file

+
+
load_from_pyopenssl_x509(x509) [#]
+
+

Given a pyOpenSSL X509 object, store that object inside of this +certificate object.

+
+
load_from_string(string) [#]
+
+

Load the certificate from a string

+
+
save_to_file(filename, save_parents=False) [#]
+
+

Save the certificate to a file.

+
+
save_parents
+
+If save_parents==True, then also save the parent certificates.
+

+
+
save_to_string(save_parents=False) [#]
+
+

Save the certificate to a string.

+
+
save_parents
+
+If save_parents==True, then also save the parent certificates.
+

+
+
set_data(str) [#]
+
+

Set_data is a wrapper around add_extension. It stores the parameter str in +the X509 subject_alt_name extension. Set_data can only be called once, due +to limitations in the underlying library.

+
+
set_issuer(key, subject=None, cert=None) [#]
+
+

Sets the issuer private key and name

+
+
key
+
+Keypair object containing the private key of the issuer
+
subject
+
+String containing the name of the issuer
+
cert
+
+(optional) Certificate object containing the name of the issuer
+

+
+
set_parent(p) [#]
+
+

Set the parent certficiate.

+
+
p
+
+certificate object.
+

+
+
set_pubkey(key) [#]
+
+

Get the public key of the certificate.

+
+
key
+
+Keypair object containing the public key
+

+
+
set_subject(name) [#]
+
+

Set the subject name of the certificate

+
+
sign() [#]
+
+

Sign the certificate using the issuer private key and issuer subject previous set with set_issuer().

+
+
verify(pkey) [#]
+
+

Verify the authenticity of a certificate.

+
+
pkey
+
+is a Keypair object representing a public key. If Pkey + did not sign the certificate, then an exception will be thrown.
+

+
+
verify_chain(trusted_certs=None) [#]
+
+

Verification examines a chain of certificates to ensure that each parent +signs the child, and that some certificate in the chain is signed by a +trusted certificate. + +Verification is a basic recursion:

+    if this_certificate was signed by trusted_certs:
+        return
+    else
+        return verify_chain(parent, trusted_certs)
+
+ +At each recursion, the parent is tested to ensure that it did sign the +child. If a parent did not sign a child, then an exception is thrown. If +the bottom of the recursion is reached and the certificate does not match +a trusted root, then an exception is thrown. + +

+
Trusted_certs
+
+is a list of certificates that are trusted.
+

+
+
+

The Keypair Class

+
+
Keypair(create=False, string=None, filename=None) (class) [#]
+
+

Public-private key pairs are implemented by the Keypair class. +A Keypair object may represent both a public and private key pair, or it +may represent only a public key (this usage is consistent with OpenSSL).

+
+
__init__(create=False, string=None, filename=None) [#]
+
+

Creates a Keypair object

+
+
create
+
+If create==True, creates a new public/private key and + stores it in the object
+
string
+
+If string!=None, load the keypair from the string (PEM)
+
filename
+
+If filename!=None, load the keypair from the file
+

+
+
as_pem() [#]
+
+

Return the private key in PEM format.

+
+
create() [#]
+
+

Create a RSA public/private key pair and store it inside the keypair object

+
+
get_m2_pkey() [#]
+
+

Return an OpenSSL pkey object

+
+
get_openssl_pkey() [#]
+
+

Given another Keypair object, return TRUE if the two keys are the same.

+
+
load_from_file(filename) [#]
+
+

Load the private key from a file. Implicity the private key includes the public key.

+
+
load_from_string(string) [#]
+
+

Load the private key from a string. Implicitly the private key includes the public key.

+
+
load_pubkey_from_file(filename) [#]
+
+

Load the public key from a string. No private key is loaded.

+
+
load_pubkey_from_string(string) [#]
+
+

Load the public key from a string. No private key is loaded.

+
+
save_to_file(filename) [#]
+
+

Save the private key to a file

+
+
filename
+
+name of file to store the keypair in
+

+
+
+ diff --git a/docs/pythondoc-component.html b/docs/pythondoc-component.html new file mode 100644 index 00000000..655f2862 --- /dev/null +++ b/docs/pythondoc-component.html @@ -0,0 +1,136 @@ + + + + +The component Module + + +

The component Module

+

Geni Component Wrapper + +This wrapper implements the Geni Component Interface

+
+
ComponentManager(ip, port, key_file, cert_file) (class) [#]
+
+

ComponentManager is a GeniServer that serves component interface requests.

+

For more information about this class, see The ComponentManager Class.

+
+
+

The ComponentManager Class

+
+
ComponentManager(ip, port, key_file, cert_file) (class) [#]
+
+

ComponentManager is a GeniServer that serves component interface requests.

+
+
decode_ticket(ticket_string) [#]
+
+

Examine the ticket that was provided by the caller, check that it is +signed and verified correctly. Throw an exception if something is +wrong with the ticket. + +This is similar to geniserver.decode_authentication

+
+
ticket_string
+
+the string representation of the ticket
+

+
+
delete_slice(cred_str) [#]
+
+

Delete a slice.

+
+
cred
+
+a credential identifying the caller (callerGID) and the slice + (objectGID)
+

+
+
geni_ticket_to_plc_rec(ticket) [#]
+
+

Convert a geni ticket into a PLC record that can be submitted to the +node manager. This involves some minor reformatting of the fields +contained in the ticket.

+
+
ticket
+
+a ticket object
+
Returns:
+
+a dictionary containing the PLC record info
+

+
+
list_slices(cred_str) [#]
+
+

List the slices on a component.

+
+
cred_str
+
+string representation of a credential object that + authorizes the caller
+
Returns:
+
+a list of slice names
+

+
+
reboot(cred_str) [#]
+
+

Reboot the component.

+
+
cred_str
+
+string representation of a credential object that + authorizes the caller
+

+
+
redeem_ticket(ticket_str) [#]
+
+

Redeem a ticket. + +The ticket is submitted to the node manager, and the slice is instantiated +or updated as appropriate. + +TODO: This operation should return a sliver credential and indicate +whether or not the component will accept only sliver credentials, or +will accept both sliver and slice credentials.

+
+
ticket_str
+
+the string representation of a ticket object
+

+
+
register_functions() [#]
+
+

Register the server RPCs for the component

+
+
reset_slice(cred_str) [#]
+
+

Reset a slice.

+
+
cred
+
+a credential identifying the caller (callerGID) and the slice + (objectGID)
+

+
+
start_slice(cred_str) [#]
+
+

Start a slice.

+
+
cred
+
+a credential identifying the caller (callerGID) and the slice + (objectGID)
+

+
+
stop_slice(cred_str) [#]
+
+

Stop a slice.

+
+
cred
+
+a credential identifying the caller (callerGID) and the slice + (objectGID)
+

+
+
+ diff --git a/docs/pythondoc-config.html b/docs/pythondoc-config.html new file mode 100644 index 00000000..a7240b24 --- /dev/null +++ b/docs/pythondoc-config.html @@ -0,0 +1,36 @@ + + + + +The config Module + + +

The config Module

+

Geniwrapper Configuration Info + +This module holds configuration parameters for geniwrapper. There are two +main pieces of information that are used: the database connection and +the PLCAPI connection

+
+
get_default_dbinfo() [#]
+
+

Geniwrapper uses a MYSQL database to store records. This database may be +co-located with the PLC database, or it may be a separate database. The +following parameters define the connection to the database. + +Note that Geniwrapper does not access any of the PLC databases directly via +a mysql connection; All PLC databases are accessed via PLCAPI.

+
+
get_pl_auth() [#]
+
+

Geniwrapper uses a PLCAPI connection to perform operations on the registry, +such as creating and deleting slices. This connection requires an account +on the PLC server with full administrator access. + +The Url parameter controls whether the connection uses PLCAPI directly (i.e. +Geniwrapper is located on the same machine as PLC), or uses a XMLRPC connection +to the PLC machine. If you wish to use the API directly, then remove the Url +field from the dictionary.

+
+
+ diff --git a/docs/pythondoc-credential.html b/docs/pythondoc-credential.html new file mode 100644 index 00000000..7c88af35 --- /dev/null +++ b/docs/pythondoc-credential.html @@ -0,0 +1,159 @@ + + + + +The credential Module + + +

The credential Module

+

Implements Geni Credentials + +Credentials are layered on top of certificates, and are essentially a +certificate that stores a tuple of parameters.

+
+
Credential(create=False, subject=None, string=None, filename=None) (class) [#]
+
+

Credential is a tuple: + (GIDCaller, GIDObject, LifeTime, Privileges, Delegate) + +These fields are encoded using xmlrpc into the subjectAltName field of the +x509 certificate.

+

For more information about this class, see The Credential Class.

+
+
+

The Credential Class

+
+
Credential(create=False, subject=None, string=None, filename=None) (class) [#]
+
+

Credential is a tuple: + (GIDCaller, GIDObject, LifeTime, Privileges, Delegate) + +These fields are encoded using xmlrpc into the subjectAltName field of the +x509 certificate. Note: Call encode() once the fields have been filled in +to perform this encoding.

+
+
__init__(create=False, subject=None, string=None, filename=None) [#]
+
+

Create a Credential object

+
+
create
+
+If true, create a blank x509 certificate
+
subject
+
+If subject!=None, create an x509 cert with the subject name
+
string
+
+If string!=None, load the credential from the string
+
filename
+
+If filename!=None, load the credential from the file
+

+
+
can_perform(op_name) [#]
+
+

determine whether the credential allows a particular operation to be +performed

+
+
op_name
+
+string specifying name of operation ("lookup", "update", etc)
+

+
+
decode() [#]
+
+

Retrieve the attributes of the credential from the alt-subject-name field +of the X509 certificate. This is automatically done by the various +get_* methods of this class and should not need to be called explicitly.

+
+
dump(dump_parents=False) [#]
+
+

Dump the contents of a credential to stdout in human-readable format

+
+
dump_parents
+
+If true, also dump the parent certificates
+

+
+
encode() [#]
+
+

Encode the attributes of the credential into a string and store that +string in the alt-subject-name field of the X509 object. This should be +done immediately before signing the credential.

+
+
get_delegate() [#]
+
+

get the delegate bit

+
+
get_gid_caller() [#]
+
+

get the GID of the object

+
+
get_gid_object() [#]
+
+

get the GID of the object

+
+
get_lifetime() [#]
+
+

get the lifetime of the credential

+
+
get_privileges() [#]
+
+

return the privileges as a RightList object

+
+
set_delegate(delegate) [#]
+
+

set the delegate bit

+
+
delegate
+
+boolean (True or False)
+

+
+
set_gid_caller(gid) [#]
+
+

set the GID of the caller

+
+
gid
+
+GID object of the caller
+

+
+
set_gid_object(gid) [#]
+
+

set the GID of the object

+
+
gid
+
+GID object of the object
+

+
+
set_lifetime(lifeTime) [#]
+
+

set the lifetime of this credential

+
+
lifetime
+
+lifetime of credential
+

+
+
set_privileges(privs) [#]
+
+

set the privileges

+
+
privs
+
+either a comma-separated list of privileges of a RightList object
+

+
+
verify_chain(trusted_certs=None) [#]
+
+

Verify that a chain of credentials is valid (see cert.py:verify). In +addition to the checks for ordinary certificates, verification also +ensures that the delegate bit was set by each parent in the chain. If +a delegate bit was not set, then an exception is thrown. + +Each credential must be a subset of the rights of the parent.

+
+
+ diff --git a/docs/pythondoc-geniclient.html b/docs/pythondoc-geniclient.html new file mode 100644 index 00000000..6620407d --- /dev/null +++ b/docs/pythondoc-geniclient.html @@ -0,0 +1,322 @@ + + + + +The geniclient Module + + +

The geniclient Module

+

This module implements the client-side of the Geni API. Stubs are provided +that convert the supplied parameters to the necessary format and send them +via XMLRPC to a Geni Server. + +TODO: Investigate ways to combine this with existing PLC API?

+
+
GeniClient(url, key_file, cert_file) (class) [#]
+
+

The GeniClient class provides stubs for executing Geni operations.

+

For more information about this class, see The GeniClient Class.

+
+
GeniTransport (class) [#]
+
+

For more information about this class, see The GeniTransport Class.

+
+
ServerException (class) [#]
+
+

ServerException, ExceptionUnmarshaller + +Used to convert server exception strings back to an exception.

+

For more information about this class, see The ServerException Class.

+
+
+

The GeniClient Class

+
+
GeniClient(url, key_file, cert_file) (class) [#]
+
+

The GeniClient class provides stubs for executing Geni operations. A given +client object connects to one server. To connect to multiple servers, create +multiple GeniClient objects. + +The Geni protocol uses an HTTPS connection, and the client's side of the +connection uses his private key. Generally, this private key must match the +public key that is containing in the GID that the client is providing for +those functions that take a GID.

+
+
create_gid(cred, name, uuid, pkey_string) [#]
+
+

Create a new GID. For MAs and SAs that are physically located on the +registry, this allows a owner/operator/PI to create a new GID and have it +signed by his respective authority.

+
+
cred
+
+credential of caller
+
name
+
+hrn for new GID
+
uuid
+
+unique identifier for new GID
+
pkey_string
+
+public-key string (TODO: why is this a string and not a keypair object?)
+
Returns:
+
+a GID object
+

+
+
delete_slice(cred) [#]
+
+

Delete a slice.

+
+
cred
+
+a credential identifying the caller (callerGID) and the slice + (objectGID)
+

+
+
get_credential(cred, type, name) [#]
+
+

Retrieve a credential for an object. + +If cred==None, then the behavior reverts to get_self_credential()

+
+
cred
+
+credential object specifying rights of the caller
+
type
+
+type of object (user | slice | sa | ma | node)
+
name
+
+human readable name of object
+
Returns:
+
+a credental object
+

+
+
get_gid(name) [#]
+
+

Retrieve the GID for an object. This function looks up a record in the +registry and returns the GID of the record if it exists. +TODO: Is this function needed? It's a shortcut for Resolve()

+
+
name
+
+hrn to look up
+
Returns:
+
+a GID object
+

+
+
get_self_credential(type, name) [#]
+
+

Get_self_credential a degenerate version of get_credential used by a +client to get his initial credential when he doesn't have one. This is +the same as get_credential(..., cred=None,...). + +The registry ensures that the client is the principal that is named by +(type, name) by comparing the public key in the record's GID to the +private key used to encrypt the client-side of the HTTPS connection. Thus +it is impossible for one principal to retrieve another principal's +credential without having the appropriate private key.

+
+
type
+
+type of object (user | slice | sa | ma | node
+
name
+
+human readable name of object
+
Returns:
+
+a credential object
+

+
+
get_ticket(cred, name, rspec) [#]
+
+

Retrieve a ticket. This operation is currently implemented on the +registry (see SFA, engineering decisions), and is not implemented on +components. + +The ticket is filled in with information from the PLC database. This +information includes resources, and attributes such as user keys and +initscripts.

+
+
cred
+
+credential object
+
name
+
+name of the slice to retrieve a ticket for
+
rspec
+
+resource specification dictionary
+
Returns:
+
+a ticket object
+

+
+
list(cred) [#]
+
+

List the records in an authority. The objectGID in the supplied credential +should name the authority that will be listed.

+
+
cred
+
+credential object specifying rights of the caller
+
Returns:
+
+list of record objects
+

+
+
list_slices(cred) [#]
+
+

List the slices on a component.

+
+
cred
+
+credential object that authorizes the caller
+
Returns:
+
+a list of slice names
+

+
+
redeem_ticket(ticket) [#]
+
+

Redeem a ticket. This operation is currently implemented on the +component. + +The ticket is submitted to the node manager, and the slice is instantiated +or updated as appropriate. + +TODO: This operation should return a sliver credential and indicate +whether or not the component will accept only sliver credentials, or +will accept both sliver and slice credentials.

+
+
ticket
+
+a ticket object containing the ticket
+

+
+
register(cred, record) [#]
+
+

Register an object with the registry. In addition to being stored in the +Geni database, the appropriate records will also be created in the +PLC databases. + +The geni_info and/or pl_info fields must in the record must be filled +out correctly depending on the type of record that is being registered. + +TODO: The geni_info member of the record should be parsed and the pl_info +adjusted as necessary (add/remove users from a slice, etc)

+
+
cred
+
+credential object specifying rights of the caller
+
Returns:
+
+record to register
+

+
+
remove(cred, record) [#]
+
+

Remove an object from the registry. If the object represents a PLC object, +then the PLC records will also be removed.

+
+
cred
+
+credential object specifying rights of the caller
+
record
+
+record to register. The only relevant + fields of the record are 'name' and 'type', which are used to lookup + the current copy of the record in the Geni database, to make sure + that the appopriate record is removed.
+

+
+
reset_slice(cred) [#]
+
+

Reset a slice.

+
+
cred
+
+a credential identifying the caller (callerGID) and the slice + (objectGID)
+

+
+
resolve(cred, name) [#]
+
+

Resolve an object in the registry. A given HRN may have multiple records +associated with it, and therefore multiple records may be returned. The +caller should check the type fields of the records to find the one that +he is interested in.

+
+
cred
+
+credential object specifying rights of the caller
+
name
+
+human readable name of object
+

+
+
start_slice(cred) [#]
+
+

Start a slice.

+
+
cred
+
+a credential identifying the caller (callerGID) and the slice + (objectGID)
+

+
+
stop_slice(cred) [#]
+
+

Stop a slice.

+
+
cred
+
+a credential identifying the caller (callerGID) and the slice + (objectGID)
+

+
+
update(cred, record) [#]
+
+

Update an object in the registry. Currently, this only updates the +PLC information associated with the record. The Geni fields (name, type, +GID) are fixed. + +The record is expected to have the pl_info field filled in with the data +that should be updated. + +TODO: The geni_info member of the record should be parsed and the pl_info +adjusted as necessary (add/remove users from a slice, etc)

+
+
cred
+
+credential object specifying rights of the caller
+
record
+
+a record object to be updated
+

+
+
+

The GeniTransport Class

+
+
GeniTransport (class) [#]
+
+

GeniTransport + +A transport for XMLRPC that works on top of HTTPS

+
+
+

The ServerException Class

+
+
ServerException (class) [#]
+
+

ServerException, ExceptionUnmarshaller + +Used to convert server exception strings back to an exception. + from usenet, Raghuram Devarakonda

+
+
+ diff --git a/docs/pythondoc-geniserver.html b/docs/pythondoc-geniserver.html new file mode 100644 index 00000000..9aa0996c --- /dev/null +++ b/docs/pythondoc-geniserver.html @@ -0,0 +1,83 @@ + + + + +The geniserver Module + + +

The geniserver Module

+

This module implements a general-purpose server layer for geni. +The same basic server should be usable on the registry, component, or +other interfaces. + +TODO: investigate ways to combine this with existing PLC server?

+
+
GeniServer(ip, port, key_file, cert_file) (class) [#]
+
+

Implements an HTTPS XML-RPC server.

+

For more information about this class, see The GeniServer Class.

+
+
SecureXMLRpcRequestHandler (class) [#]
+
+

taken from the web (XXX find reference).

+

For more information about this class, see The SecureXMLRpcRequestHandler Class.

+
+
SecureXMLRPCServer(server_address, HandlerClass, key_file, cert_file, logRequests=True) (class) [#]
+
+

Taken from the web (XXX find reference).

+

For more information about this class, see The SecureXMLRPCServer Class.

+
+
verify_callback(conn, x509, err, depth, preverify) [#]
+
+

Verification callback for pyOpenSSL. We do our own checking of keys because +we have our own authentication spec. Thus we disable several of the normal +prohibitions that OpenSSL places on certificates

+
+
+

The GeniServer Class

+
+
GeniServer(ip, port, key_file, cert_file) (class) [#]
+
+

Implements an HTTPS XML-RPC server. Generally it is expected that GENI +functions will take a credential string, which is passed to +decode_authentication. Decode_authentication() will verify the validity of +the credential, and verify that the user is using the key that matches the +GID supplied in the credential.

+
+
decode_authentication(cred_string, operation) [#]
+
+

Decode the credential string that was submitted by the caller. Several +checks are performed to ensure that the credential is valid, and that the +callerGID included in the credential matches the caller that is +connected to the HTTPS connection.

+
+
noop(cred, anything) [#]
+
+

Sample no-op server function. The no-op function decodes the credential +that was passed to it.

+
+
register_functions() [#]
+
+

Register functions that will be served by the XMLRPC server. This +function should be overrided by each descendant class.

+
+
run() [#]
+
+

Execute the server, serving requests forever.

+
+
+

The SecureXMLRpcRequestHandler Class

+
+
SecureXMLRpcRequestHandler (class) [#]
+
+

taken from the web (XXX find reference). Implents HTTPS xmlrpc request handler

+
+
+

The SecureXMLRPCServer Class

+
+
SecureXMLRPCServer(server_address, HandlerClass, key_file, cert_file, logRequests=True) (class) [#]
+
+

Taken from the web (XXX find reference). Implements an HTTPS xmlrpc server

+
+
+ diff --git a/docs/pythondoc-gid.html b/docs/pythondoc-gid.html new file mode 100644 index 00000000..c05dac43 --- /dev/null +++ b/docs/pythondoc-gid.html @@ -0,0 +1,103 @@ + + + + +The gid Module + + +

The gid Module

+

Implements GENI GID. GIDs are based on certificates, and the GID class is a +descendant of the certificate class.

+
+
create_uuid() [#]
+
+

Create a new uuid. Returns the UUID as a string.

+
+
GID(create=False, subject=None, string=None, filename=None, uuid=None, hrn=None) (class) [#]
+
+

GID is a tuplie: + (uuid, hrn, public_key) + +UUID is a unique identifier and is created by the python uuid module + (or the utility function create_uuid() in gid.py).

+

For more information about this class, see The GID Class.

+
+
+

The GID Class

+
+
GID(create=False, subject=None, string=None, filename=None, uuid=None, hrn=None) (class) [#]
+
+

GID is a tuplie: + (uuid, hrn, public_key) + +UUID is a unique identifier and is created by the python uuid module + (or the utility function create_uuid() in gid.py). + +HRN is a human readable name. It is a dotted form similar to a backward domain + name. For example, planetlab.us.arizona.bakers. + +PUBLIC_KEY is the public key of the principal identified by the UUID/HRN. +It is a Keypair object as defined in the cert.py module. + +It is expected that there is a one-to-one pairing between UUIDs and HRN, +but it is uncertain how this would be inforced or if it needs to be enforced. + +These fields are encoded using xmlrpc into the subjectAltName field of the +x509 certificate. Note: Call encode() once the fields have been filled in +to perform this encoding.

+
+
__init__(create=False, subject=None, string=None, filename=None, uuid=None, hrn=None) [#]
+
+

Create a new GID object

+
+
create
+
+If true, create the X509 certificate
+
subject
+
+If subject!=None, create the X509 cert and set the subject name
+
string
+
+If string!=None, load the GID from a string
+
filename
+
+If filename!=None, load the GID from a file
+

+
+
decode() [#]
+
+

Decode the subject-alt-name field of the X509 certificate into the +fields of the GID. This is automatically called by the various get_*() +functions in this class.

+
+
dump(indent=0, dump_parents=False) [#]
+
+

Dump the credential to stdout.

+
+
indent
+
+specifies a number of spaces to indent the output
+
dump_parents
+
+If true, also dump the parents of the GID
+

+
+
encode() [#]
+
+

Encode the GID fields and package them into the subject-alt-name field +of the X509 certificate. This must be called prior to signing the +certificate. It may only be called once per certificate.

+
+
verify_chain(trusted_certs=None) [#]
+
+

Verify the chain of authenticity of the GID. First perform the checks +of the certificate class (verifying that each parent signs the child, +etc). In addition, GIDs also confirm that the parent's HRN is a prefix +of the child's HRN. + +Verifying these prefixes prevents a rogue authority from signing a GID +for a principal that is not a member of that authority. For example, +planetlab.us.arizona cannot sign a GID for planetlab.us.princeton.foo.

+
+
+ diff --git a/docs/pythondoc-hierarchy.html b/docs/pythondoc-hierarchy.html new file mode 100644 index 00000000..ec7ee800 --- /dev/null +++ b/docs/pythondoc-hierarchy.html @@ -0,0 +1,209 @@ + + + + +The hierarchy Module + + +

The hierarchy Module

+

This module implements a hierarchy of authorities and performs a similar +function as the "tree" module of the original geniwrapper prototype. An HRN +is assumed to be a string of authorities separated by dots. For example, +"planetlab.us.arizona.bakers". Each component of the HRN is a different +authority, with the last component being a leaf in the tree. + +Each authority is stored in a subdirectory on the registry. Inside this +subdirectory are several files: + *.GID - GID file + *.PKEY - private key file + *.DBINFO - database info

+
+
AuthInfo(hrn, gid_filename, privkey_filename, dbinfo_filename) (class) [#]
+
+

The AuthInfo class contains the information for an authority.

+

For more information about this class, see The AuthInfo Class.

+
+
Hierarchy(basedir=".") (class) [#]
+
+

The Hierarchy class is responsible for managing the tree of authorities.

+

For more information about this class, see The Hierarchy Class.

+
+
+

The AuthInfo Class

+
+
AuthInfo(hrn, gid_filename, privkey_filename, dbinfo_filename) (class) [#]
+
+

The AuthInfo class contains the information for an authority. This information +includes the GID, private key, and database connection information.

+
+
__init__(hrn, gid_filename, privkey_filename, dbinfo_filename) [#]
+
+

Initialize and authority object.

+
+
hrn
+
+the human readable name of the authority
+
gid_filename
+
+the filename containing the GID
+
privkey_filename
+
+the filename containing the private key
+
dbinfo_filename
+
+the filename containing the database info
+

+
+
get_dbinfo() [#]
+
+

Get the dbinfo in the form of a dictionary

+
+
get_gid_object() [#]
+
+

Get the GID in the form of a GID object

+
+
get_pkey_object() [#]
+
+

Get the private key in the form of a Keypair object

+
+
set_gid_filename(fn) [#]
+
+

Set the filename of the GID

+
+
fn
+
+filename of file containing GID
+

+
+
update_gid_object(gid) [#]
+
+

Replace the GID with a new one. The file specified by gid_filename is +overwritten with the new GID object

+
+
gid
+
+object containing new GID
+

+
+
+

The Hierarchy Class

+
+
Hierarchy(basedir=".") (class) [#]
+
+

The Hierarchy class is responsible for managing the tree of authorities. +Each authority is a node in the tree and exists as an AuthInfo object. + +The tree is stored on disk in a hierarchical manner than reflects the +structure of the tree. Each authority is a subdirectory, and each subdirectory +contains the GID, pkey, and dbinfo files for that authority (as well as +subdirectories for each sub-authority)

+
+
auth_exists(hrn) [#]
+
+

Check to see if an authority exists. An authority exists if it's disk +files exist.

+
+
the
+
+human readable name of the authority to check
+

+
+
create_auth(hrn, create_parents=False) [#]
+
+

Create an authority. A private key for the authority and the associated +GID are created and signed by the parent authority.

+
+
hrn
+
+the human readable name of the authority to create
+
create_parents
+
+if true, also create the parents if they do not exist
+

+
+
create_gid(hrn, uuid, pkey) [#]
+
+

Create a new GID. The GID will be signed by the authority that is it's +immediate parent in the hierarchy (and recursively, the parents' GID +will be signed by its parent)

+
+
hrn
+
+the human readable name to store in the GID
+
uuid
+
+the unique identifier to store in the GID
+
pkey
+
+the public key to store in the GID
+

+
+
get_auth_cred(hrn) [#]
+
+

Retrieve an authority credential for an authority. The authority +credential will contain the authority privilege and will be signed by +the authority's parent.

+
+
hrn
+
+the human readable name of the authority
+

+
+
get_auth_filenames(hrn) [#]
+
+

Given a hrn, return the filenames of the GID, private key, and dbinfo +files.

+
+
hrn
+
+the human readable name of the authority
+

+
+
get_auth_info(hrn) [#]
+
+

Return the AuthInfo object for the specified authority. If the authority +does not exist, then an exception is thrown. As a side effect, disk files +and a subdirectory may be created to store the authority.

+
+
hrn
+
+the human readable name of the authority to create.
+

+
+
get_auth_ticket(hrn) [#]
+
+

Retrieve an authority ticket. An authority ticket is not actually a +redeemable ticket, but only serves the purpose of being included as the +parent of another ticket, in order to provide a chain of authentication +for a ticket. + +This looks almost the same as get_auth_cred, but works for tickets +XXX does similarity imply there should be more code re-use?

+
+
hrn
+
+the human readable name of the authority
+

+
+
refresh_gid(gid, hrn=None, uuid=None, pubkey=None) [#]
+
+

Refresh a GID. The primary use of this function is to refresh the +the expiration time of the GID. It may also be used to change the HRN, +UUID, or Public key of the GID.

+
+
gid
+
+the GID to refresh
+
hrn
+
+if !=None, change the hrn
+
uuid
+
+if !=None, change the uuid
+
pubkey
+
+if !=None, change the public key
+

+
+
+ diff --git a/docs/pythondoc-import.html b/docs/pythondoc-import.html new file mode 100644 index 00000000..0c66c158 --- /dev/null +++ b/docs/pythondoc-import.html @@ -0,0 +1,26 @@ + + + + +The import Module + + +

The import Module

+

Import PLC records into the Geni database. It is indended that this tool be +run once to create Geni records that reflect the current state of the +planetlab database. + +The import tool assumes that the existing PLC hierarchy should all be part +of "planetlab.us" (see the root_auth and level1_auth variables below). + +Public keys are extracted from the users' SSH keys automatically and used to +create GIDs. This is relatively experimental as a custom tool had to be +written to perform conversion from SSH to OpenSSL format. It only supports +RSA keys at this time, not DSA keys.

+
+
root_auth (variable) [#]
+
+

Two authorities are specified: the root authority and the level1 authority.

+
+
+ diff --git a/docs/pythondoc-record.html b/docs/pythondoc-record.html new file mode 100644 index 00000000..97b5d276 --- /dev/null +++ b/docs/pythondoc-record.html @@ -0,0 +1,169 @@ + + + + +The record Module + + +

The record Module

+

Implements support for geni records + +TODO: Use existing PLC database methods? or keep this separate?

+
+
GeniRecord(name=None, gid=None, type=None, pointer=None, dict=None) (class) [#]
+
+

The GeniRecord class implements a Geni Record.

+

For more information about this class, see The GeniRecord Class.

+
+
+

The GeniRecord Class

+
+
GeniRecord(name=None, gid=None, type=None, pointer=None, dict=None) (class) [#]
+
+

The GeniRecord class implements a Geni Record. A GeniRecord is a tuple +(Name, GID, Type, Info). + +Name specifies the HRN of the object +GID is the GID of the object +Type is user | sa | ma | slice | component + +Info is comprised of the following sub-fields + pointer = a pointer to the record in the PL database + pl_info = planetlab-specific info (when talking to client) + geni_info = geni-specific info (when talking to client) + +The pointer is interpreted depending on the type of the record. For example, +if the type=="user", then pointer is assumed to be a person_id that indexes +into the persons table. + +A given HRN may have more than one record, provided that the records are +of different types. For example, planetlab.us.arizona may have both an SA +and a MA record, but cannot have two SA records.

+
+
as_dict() [#]
+
+

Return the record in the form of a dictionary

+
+
dump(dump_parents=False) [#]
+
+

Dump the record to stdout

+
+
dump_parents
+
+if true, then the parents of the GID will be dumped
+

+
+
get_field_names() [#]
+
+

Returns a list of field names in this record. pl_info, geni_info are not +included because they are not part of the record that is stored in the +database, but are rather computed values from other entities

+
+
get_field_value_string(fieldname) [#]
+
+

Given a field name ("name", "gid", ...) return the value of that field.

+
+
name
+
+is the name of field to be returned
+

+
+
get_field_value_strings(fieldnames) [#]
+
+

Given a list of field names, return a list of values for those fields.

+
+
fieldnames
+
+is a list of field names
+

+
+
get_geni_info() [#]
+
+

Return the geni_info of the record, or an empty dictionary if none exists

+
+
get_gid_object() [#]
+
+

Return the GID of the record, in the form of a GID object +TODO: not the best name for the function, because we have things called +gidObjects in the Cred

+
+
get_key() [#]
+
+

Return a key that uniquely identifies this record among all records in +Geni. This key is used to uniquely identify the record in the Geni +database.

+
+
get_name() [#]
+
+

Return the name (HRN) of the record

+
+
get_pl_info() [#]
+
+

Return the pl_info of the record, or an empty dictionary if none exists

+
+
get_pointer() [#]
+
+

Return the pointer of the record. The pointer is an integer that may be +used to look up the record in the PLC database. The evaluation of pointer +depends on the type of the record

+
+
get_type() [#]
+
+

Return the type of the record

+
+
set_geni_info(geni_info) [#]
+
+

Set the geni info the record

+
+
geni_info
+
+is a dictionary containing geni info
+

+
+
set_gid(gid) [#]
+
+

Set the GID of the record

+
+
gid
+
+is a GID object or the string representation of a GID object
+

+
+
set_name(name) [#]
+
+

Set the name of the record

+
+
name
+
+is a string containing the HRN
+

+
+
set_pl_info(pl_info) [#]
+
+

Set the PLC info of the record

+
+
pl_info
+
+is a dictionary containing planetlab info
+

+
+
set_pointer(pointer) [#]
+
+

Set the pointer of the record

+
+
pointer
+
+is an integer containing the ID of a PLC record
+

+
+
set_type(type) [#]
+
+

Set the type of the record

+
+
type
+
+is a string: user | sa | ma | slice | component
+

+
+
+ diff --git a/docs/pythondoc-registry.html b/docs/pythondoc-registry.html new file mode 100644 index 00000000..5bc665e5 --- /dev/null +++ b/docs/pythondoc-registry.html @@ -0,0 +1,433 @@ + + + + +The registry Module + + +

The registry Module

+

Geni Registry Wrapper + +This wrapper implements the Geni Registry. + +There are several items that need to be done before starting the registry. + +1) Update util/config.py to match the parameters of your PLC installation. + +2) Import the existing planetlab database, creating the +appropriate geni records. This is done by running the "import.py" tool. + +3) Create a "trusted_roots" directory and place the certificate of the root +authority in that directory. Given the defaults in import.py, this certificate +would be named "planetlab.gid". For example, + + mkdir trusted_roots; cp authorities/planetlab.gid trusted_roots/

+
+
geni_fields_to_pl_fields(type, hrn, geni_fields, pl_fields) [#]
+
+

Convert geni fields to PLC fields for use when registering up updating +registry record in the PLC database

+
+
type
+
+type of record (user, slice, ...)
+
hrn
+
+human readable name
+
geni_fields
+
+dictionary of geni fields
+
pl_fields
+
+dictionary of PLC fields (output)
+

+
+
Registry(ip, port, key_file, cert_file) (class) [#]
+
+

Registry is a GeniServer that serves registry requests.

+

For more information about this class, see The Registry Class.

+
+
+

The Registry Class

+
+
Registry(ip, port, key_file, cert_file) (class) [#]
+
+

Registry is a GeniServer that serves registry requests. It also serves +component and slice operations that are implemented on the registry +due to SFA engineering decisions

+
+
connect_local_shell() [#]
+
+

Connect to a local shell via local API functions

+
+
connect_remote_shell() [#]
+
+

Connect to a remote shell via XMLRPC

+
+
create_gid(cred, name, uuid, pubkey_str) [#]
+
+

GENI_API: Create_gid + +Create a new GID. For MAs and SAs that are physically located on the +registry, this allows a owner/operator/PI to create a new GID and have it +signed by his respective authority.

+
+
cred
+
+credential of caller
+
name
+
+hrn for new GID
+
uuid
+
+unique identifier for new GID
+
pkey_string
+
+public-key string (TODO: why is this a string and not a keypair object?)
+
Returns:
+
+the string representation of a GID object
+

+
+
determine_rights(type, name) [#]
+
+

Determine tje rights that an object should have. The rights are entirely +dependent on the type of the object. For example, users automatically +get "refresh", "resolve", and "info".

+
+
type
+
+the type of the object (user | sa | ma | slice | node)
+
name
+
+human readable name of the object (not used at this time)
+
Returns:
+
+RightList object containing rights
+

+
+
fill_record_geni_info(record) [#]
+
+

Fill in the geni-specific fields of the record. + +Note: It is assumed the fill_record_pl_info() has already been performed +on the record.

+
+
fill_record_info(record) [#]
+
+

Given a Geni record, fill in the PLC-specific and Geni-specific fields +in the record.

+
+
fill_record_pl_info(record) [#]
+
+

Fill in the planetlab-specific fields of a Geni record. This involves +calling the appropriate PLC methods to retrieve the database record for +the object. + +PLC data is filled into the pl_info field of the record.

+
+
record
+
+record to fill in fields (in/out param)
+

+
+
get_auth_info(auth_hrn) [#]
+
+

Given an authority name, return the information for that authority. This +is basically a stub that calls the hierarchy module.

+
+
auth_hrn
+
+human readable name of authority
+

+
+
get_auth_table(auth_name) [#]
+
+

Given an authority name, return the database table for that authority. If +the database table does not exist, then one will be automatically +created.

+
+
auth_name
+
+human readable name of authority
+

+
+
get_credential(cred, type, name) [#]
+
+

GENI API: Get_credential + +Retrieve a credential for an object. + +If cred==None, then the behavior reverts to get_self_credential()

+
+
cred
+
+credential object specifying rights of the caller
+
type
+
+type of object (user | slice | sa | ma | node)
+
name
+
+human readable name of object
+
Returns:
+
+the string representation of a credental object
+

+
+
get_gid(name) [#]
+
+

GENI API: get_gid + +Retrieve the GID for an object. This function looks up a record in the +registry and returns the GID of the record if it exists. +TODO: Is this function needed? It's a shortcut for Resolve()

+
+
name
+
+hrn to look up
+
Returns:
+
+the string representation of a GID object
+

+
+
get_self_credential(type, name) [#]
+
+

GENI API: Get_self_credential + +Get_self_credential a degenerate version of get_credential used by a +client to get his initial credential when he doesn't have one. This is +the same as get_credential(..., cred=None,...). + +The registry ensures that the client is the principal that is named by +(type, name) by comparing the public key in the record's GID to the +private key used to encrypt the client-side of the HTTPS connection. Thus +it is impossible for one principal to retrieve another principal's +credential without having the appropriate private key.

+
+
type
+
+type of object (user | slice | sa | ma | node
+
name
+
+human readable name of object
+
Returns:
+
+the string representation of a credential object
+

+
+
get_ticket(cred, name, rspec) [#]
+
+

GENI API: get_ticket + +Retrieve a ticket. This operation is currently implemented on the +registry (see SFA, engineering decisions), and is not implemented on +components. + +The ticket is filled in with information from the PLC database. This +information includes resources, and attributes such as user keys and +initscripts.

+
+
cred
+
+credential string
+
name
+
+name of the slice to retrieve a ticket for
+
rspec
+
+resource specification dictionary
+
Returns:
+
+the string representation of a ticket object
+

+
+
list(cred) [#]
+
+

List the records in an authority. The objectGID in the supplied credential +should name the authority that will be listed. + +TODO: List doesn't take an hrn and uses the hrn contained in the + objectGid of the credential. Does this mean the only way to list an + authority is by having a credential for that authority?

+
+
cred
+
+credential string specifying rights of the caller
+
Returns:
+
+list of record dictionaries
+

+
+
lookup_users(auth_table, user_id_list, role="*") [#]
+
+

Look up user records given PLC user-ids. This is used as part of the +process for reverse-mapping PLC records into Geni records.

+
+
auth_table
+
+database table for the authority that holds the user records
+
user_id_list
+
+list of user ids
+
role
+
+either "*" or a string describing the role to look for ("pi", "user", ...) + +TODO: This function currently only searches one authority because it would +be inefficient to brute-force search all authorities for a user id. The +solution would likely be to implement a reverse mapping of user-id to +(type, hrn) pairs.
+

+
+
record_to_slice_info(record) [#]
+
+

Convert a PLC record into the slice information that will be stored in +a ticket. There are two parts to this information: attributes and +rspec. + +Attributes are non-resource items, such as keys and the initscript +RSpec is a set of resource specifications

+
+
record
+
+a record object
+
Returns:
+
+a tuple (attrs, rspec) of dictionaries
+

+
+
register(cred, record_dict) [#]
+
+

GENI API: register + +Register an object with the registry. In addition to being stored in the +Geni database, the appropriate records will also be created in the +PLC databases

+
+
cred
+
+credential string
+
record_dict
+
+dictionary containing record fields
+

+
+
register_functions() [#]
+
+

Register the server RPCs for the registry

+
+
remove(cred, record_dict) [#]
+
+

GENI API: remove + +Remove an object from the registry. If the object represents a PLC object, +then the PLC records will also be removed.

+
+
cred
+
+credential string
+
record_dict
+
+dictionary containing record fields. The only relevant + fields of the record are 'name' and 'type', which are used to lookup + the current copy of the record in the Geni database, to make sure + that the appopriate record is removed.
+

+
+
resolve(cred, name) [#]
+
+

GENI API: Resolve + +This is a wrapper around resolve_raw that converts records objects into +dictionaries before returning them to the user.

+
+
cred
+
+credential string authorizing the caller
+
name
+
+human readable name to resolve
+
Returns:
+
+a list of record dictionaries, or an empty list
+

+
+
resolve_raw(type, name, must_exist=True) [#]
+
+

Resolve a record. This is an internal version of the Resolve API call +and returns records in record object format rather than dictionaries +that may be sent over XMLRPC.

+
+
type
+
+type of record to resolve (user | sa | ma | slice | node)
+
name
+
+human readable name of object
+
must_exist
+
+if True, throw an exception if no records are found
+
Returns:
+
+a list of record objects, or an empty list []
+

+
+
update(cred, record_dict) [#]
+
+

GENI API: Register + +Update an object in the registry. Currently, this only updates the +PLC information associated with the record. The Geni fields (name, type, +GID) are fixed. + +The record is expected to have the pl_info field filled in with the data +that should be updated. + +TODO: The geni_info member of the record should be parsed and the pl_info +adjusted as necessary (add/remove users from a slice, etc)

+
+
cred
+
+credential string specifying rights of the caller
+
record
+
+a record dictionary to be updated
+

+
+
verify_auth_belongs_to_me(name) [#]
+
+

Verify that an authority belongs to this registry. This is basically left +up to the implementation of the hierarchy module. If the specified name +does not belong to this registry, an exception is thrown indicating the +caller should contact someone else.

+
+
auth_name
+
+human readable name of authority
+

+
+
verify_object_belongs_to_me(name) [#]
+
+

Verify that an object belongs to this registry. By extension, this implies +that the authority that owns the object belongs to this registry. If the +object does not belong to this registry, then an exception is thrown.

+
+
name
+
+human readable name of object
+

+
+
verify_object_permission(name) [#]
+
+

Verify that the object_gid that was specified in the credential allows +permission to the object 'name'. This is done by a simple prefix test. +For example, an object_gid for planetlab.us.arizona would match the +objects planetlab.us.arizona.slice1 and planetlab.us.arizona.

+
+
name
+
+human readable name to test
+

+
+
+ diff --git a/docs/pythondoc-rights.html b/docs/pythondoc-rights.html new file mode 100644 index 00000000..cc32deea --- /dev/null +++ b/docs/pythondoc-rights.html @@ -0,0 +1,111 @@ + + + + +The rights Module + + +

The rights Module

+

This Module implements rights and lists of rights for the Geni wrapper. Rights +are implemented by two classes: + +Right - represents a single right + +RightList - represents a list of rights + +A right may allow several different operations. For example, the "info" right +allows "listslices", "listcomponentresources", etc.

+
+
privilege_table (variable) [#]
+
+

privilege_table is a list of priviliges and what operations are allowed +per privilege.

+
+
Right(kind) (class) [#]
+
+

The Right class represents a single privilege.

+

For more information about this class, see The Right Class.

+
+
RightList(string=None) (class) [#]
+
+

A RightList object represents a list of privileges.

+

For more information about this class, see The RightList Class.

+
+
+

The Right Class

+
+
Right(kind) (class) [#]
+
+

The Right class represents a single privilege.

+
+
can_perform(op_name) [#]
+
+

Test to see if this right object is allowed to perform an operation. +Returns True if the operation is allowed, False otherwise.

+
+
op_name
+
+is a string naming the operation. For example "listslices".
+

+
+
is_superset(child) [#]
+
+

Test to see if this right is a superset of a child right. A right is a +superset if every operating that is allowed by the child is also allowed +by this object.

+
+
child
+
+is a Right object describing the child right
+

+
+
+

The RightList Class

+
+
RightList(string=None) (class) [#]
+
+

A RightList object represents a list of privileges.

+
+
add(right) [#]
+
+

Add a right to this list

+
+
right
+
+is either a Right object or a string describing the right
+

+
+
can_perform(op_name) [#]
+
+

Check to see if some right in this list allows an operation. This is +done by evaluating the can_perform function of each operation in the +list.

+
+
op_name
+
+is an operation to check, for example "listslices"
+

+
+
is_superset(child) [#]
+
+

Check to see if all of the rights in this rightlist are a superset +of all the rights in a child rightlist. A rightlist is a superset +if there is no operation in the child rightlist that cannot be +performed in the parent rightlist.

+
+
child
+
+is a rightlist object describing the child
+

+
+
load_from_string(string) [#]
+
+

Load the rightlist object from a string

+
+
save_to_string() [#]
+
+

Save the rightlist object to a string. It is saved in the format of a +comma-separated list.

+
+
+ diff --git a/docs/sfa-2008-08-08.pdf b/docs/sfa-2008-08-08.pdf new file mode 100644 index 0000000000000000000000000000000000000000..bf99df95c2a23ea363f5074b9dee95215b93fe40 GIT binary patch literal 469838 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

^`E*-G`2n2Qg5m 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⁣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 z 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

tVj8mucYC zJR&chl8eQ&C(jg&nJ3g#2AKFvFmzkcTEWt@e@FY>0|OE#2URd9JMdW%QSejyr&u|0 z%$?1X-~!>X(FLCsb%}OjiKCqF&c;|%9Ib4NH*-U^je#XSZJG1B{$)cr3~gqVI0Mb+ z<-|No6I1^7uy=X3Hyl-Jy`#MS0?}o9g4*>m$=U`6lJLV6V1XA+!}%?y0SZfnGO)&A zB$b%RN7}266wy-&mJ;_PGdV2z={ z=p1NBlXKF*>KH`*Y*B8@nysN}<6Qe4SqG5pbYNt3n=)pjw+QbTYl(I3%L|je-`mb(r$Q38aMHH=ayTTx8QGT8)`~~pREwnoeQF{E5-HouL(EH0w3onJHqO{nSta`jt9ha z3Y~e69Z=7Dx?63bTmJfz@FHY44lzS?CSn9ikOXHUMhy)$GyC}W78y}@Sv|tsFh5(onbBZh zq$C49ExS4Rp%8^0=Brp~_(-F30*iI;yMZ)ELqW``x^5hzDTDAW?=t>`N;Mv{Y? zW8~1ZUBQ3_I`H@ATzXS46+7E5I<@&ea9wn2+h~lifx}iEXZab*LcVZtUrX+F{86@0 zSvH`-jTYiQ_w+NElClPzm^6j~0(F~bGbovXS!eZ=+SK-OgscIzp{=FNBu^}D*{(Zw zH*`r?$_nN`TSeXfn1nwApGS`)2XA6-QDr^LI{U_Y%XH50BdzSIS=#VZvZq)~H=RC0 zbHc+j5KGY9P`>2%0~W0N&2dqUH_VwS9-A|_wmRzoTRm5nJh|oEaw?rZHiP)ir^%g) z^B8Kn{f?;|DpBp)xwVFW(cCC#$WLt-d@6l#?Y`Z1hr^;%o7?XVi&(*&Jj+jSPfcYF zAb5P6y7@W4rb>X9e@01Jqo@@RzoZ3+F#38C zoP+E+U3cCkaroi)6HWB=v`r6Cu?Y;BU;#nGs$xZ>m@=C{G@d;<2a-36uqUhquOeG` zw~J;Pu+ygxfbSv(Ebzi$Gsk1PK#SOU6De{>MA!=lM?O#=@kHxeq|S;mI2!VcoE$;5 zK=#l=+!B_)HE9gAtf+Zkj6NKOb~eJ!^h?Fszmd4gmRy2+rU0i!suTALDs!jA_nhy5 za~~|4Qr^EoiWKgTEIon5MIoXRrcGP!6>HJOd^X=TZ%G$8mho!6FbxI1?sNH{) zqy#oqa<1J8QohIpneE?&<~Cx%V;@|5N{6sUE~;n0ht8Ewzs6POUR^C7cNpq!6@!BX zCO3nt!^mbCmYCc!TVVyWDvWP`L(e&5nwu|%9R0P}h!QwANKslfk@^y9~n^;Z@HzW;J=(`$#3j?$znrx2_@QjC3yH z`D6}Aub>Q?8nZ$yR5I_fI`vYS^Hs_F6w8<9b%Hw_n5vV7o4Z7R=qbfGi_I$ z;Td|`l1t5d6o4&GJXdp-nJRZyXVjVPteq>hgWt_uMZ&Z4#fsHCdm3?$`Cv37&#uC- z5*Y@RG`?A*1i%9CP1I2V&ff3*kO{E9oPt+S{u>Ml^1d63uLo-PCrL`#_r_;s^fYaP z+Y-m6yCnGZ&gbnZr|)hhAXt0W0vgj+bqLW@iR=o+emEJlKK-T;MG1)Hu}T)*Zzhzy zL_`%`U=G{wD({9!!I)11;GOPBv_^TDqxI7+qF6lk_jW_h3t4mnxLQoyu&E5~9`DnEMG*VZHKSti$CT`p4$K@e9g6AdJs6~wHDOg` z#0+n7$tG_}b-nARlf4tYoW0$Zz%&#A;#7-Mml4g3fUIiqvW1sI#AgjzOm#FddO-(+0Rbz5`FOU+bOC+X zF~8!L)V;P@m4F(Bo*tekgjnQv1c6xMNR#K@h-!!Ibv^wY3nV0l-yH<6Uj+OhcIH{0 zP*1Zn?tyzAVeEnQsur(N=k<5&IH8PJcQrA35mydGj@MrxqAaKyW+v-wQ5yz^;cVH* zo!YG5E~JiyM)X<1o@LV87JB)W;Z=5G1#AkKyK;|PweprEOKm4`X~AJ=ZKIr-&O87? z?}&Tm5oE(p)dHX~^2$D-rc(KvSb^MN5H!d8pv@B-u=QeN`IoYAS`i$Kc11M`+Ab~a zX;c{o6u;B$B(Kc4vh_VA^L zG!%Lmq!RRKI%`WHwCon;`)BgxY)b0c9WXKnoJ+YFCuC}2ABAG|lL~X#$VrmOa9}FS zS_Oo5&5PS#r>@*?+X}XtMnN%f97t1PZf+BzDj1|8rYkc<8L=ckH!{M-s8Acry_6~d zS<6>Ghr0o&8sMA> zb`ogk4(LaWNv~UZ^D<1_0Y9_7nwW?wC{CE#2s1>0V4m;lT9-v?4U05@7 zp^_L-vt?$+DNti6v!RB8TF;|~oD!{ItP+jXKQEFn%Eu?En+2_eDgMN~{Txf&@LL~n zL$M$>d4z0Qc^lf9O*nvka}8)y>Rm$A$z$|5|FJ3y8YK!ICD~e&)caB11msS{oko4M zM23|mTpDp)7agn5cJw2UB{#k!sL&tzh{SIss2T(HhjQbUzVqOg{5(DF+*qCsy${2> zO;!RW!R;4LYv+KPSE$4@Q1&66uwZD8??Kc7ijb;Swd4?j6P^*p+s}Car9{Tn(9cud zYN?G_-N#qlFR{^~af9O5mv>0OFW|T1%FKmU!l=`|eUGo7>B(=hsHeY=TT0Pz^p8cm zG*aN*o+E+cG4%3l@$AF}S;)VnR6u=$Ig0tWep`C{pq2Uva5Lj)60bcgAn1WxTJjpQ zRA6L{DWy&sxpqYAj^nR9mi-6pj69uzc$AzO^RO60=-yZ{5-Eir= zY8ST~^JTRD=D*~wC?BiZG^~5-+TtR82$yN4H!~fHaVLa+mtLPz_>T+*>9yXWP)=$->Hap@m_^kgLAa0z8W%P(^tjbf6sqX$YNsu%H|9ulSOK$XY% zX{`qL!cdjp()U|egJ`=L2`!Mlk~H>Mk%{O8jl?AZK;Tfjbc$@xAODBs`aU}v&bp5x zB?B`r=kdPdiSIQdUaitn=wSwQhrd)q%u=8Ur_DZsgri7`rtbQkkPwBiB3N8w`$NH} zXyjZprlfSbAyB}o>P|k*ntnI$!iDEEJP?%t#j@ClX7~8DwK?K)_^f-QHS4~K;GdPS zvdrVItVOpm$h{e}$8J0%t8$|ay{M^Xo&#M-XH^#F*Z;N;VU?@{o{07k>97x`%!bZfu%Z|anu|n8 z?L2<9Y(Y|QWTEhfg=h7m;JM1vcfXmSSUh&O9^Rv6{@eoDJJ zo{!AIlRHu_{{mqJ!_|kTN6cw(M?^#vN`r|Ym+;Fj8V$FbGZ`2%!AP9@v)glTh0w9W zk4_>)$P0^@Lu5~b!=S7YkzVY(%VTN|0v-299W$beD(e$XuU zS9))PIk0`T`)7Mwj@4v6%Nb(uzks*cbuoI#{kBPNERAh%k#1jDFcc^Tmz+H`{#c%Y zVkuqCy~kiU5^?+SkM5eMpsR96mxp*M8GOw}OqI5j9RD;9ujj>vL`~s$13I;GH&g4e zyyvZuCk}&=Jc(>K%^;+jWWt<2dp-~S`e2mj_klVCLf`H6=C~-s4dok!V&s$5+Mz-MJ*WH)q$_1BI->f5dwj6RxkFLzFDh z6;{o2UJ1OjRa(D($$eaj({$(RbCZ3stwZIyc?E(f`D zR3VPuf|9&FpqhOq#f@t?7!haj&6~N@Rgj%n2ieoq)ST1cUNXdmueroC&`RuD=#sXS z!%Z@s9GVOyZ7&^OaMhBuO6jfb-ed0vYUS3p1{XEBACE9{eYpg*`c$7HlXdC{xF&j6 zc!uJtj{j#uD8ItIsWE~<&&kb@?SL^sDpG2`!jP$OkcbaZruOv__U zaZ9PlF5(7FP~d3Y6sb=Gr%HlL9Lq!W#8@ywr2OS37;GuIKFvVfD3J=2mXoVv==VBl zz2r{k2x5;yYgGfsbcP&e#! zpvy$y7J+a4doW_9KY9}kc2r{a{Q3`UMxFzxqy1z_OA-$&Ij3QzE_kT^i4H%$$-e@( z8Vp_j$w#8@3!z@RMvCp3nYh&(a?h(jGnsKg3J*(z9&ut?(&9)f9ryZL32<%6kM~DE zLQ$B9mP6qtsapnUQiy>XS}NwcHT%AT5Z%y1+(nmTaF){QUfXL(4`q}zya^XpWv0R^ zK}BlQEf6I0I`1xQ+jdtNi904@s${Ln=TY|u=Ej;gKjsQJA4)Pivm<1xjvU6l;oUGN zIM~1|Lz|O3VUpxX0{FLzK5i_hY3-k}jgp#ORmf)pFOGey4Vnl>6tTx|g27&QW~T4{ zjjwYi0Iwe23U4P#Y&x2uqbYzbMNg1(txa+aALqx z4c2}qfiwWpcAX>r>yhH%;NZKoo6BQO?ro?US`Cn*f=>GvA00mLOY$bzd8`xCEklO5vM|4O05EDT zYF$Z7%#;28{JC>pQu&-1!hPz4A&vg&l$N>XZ%_BF#&bzZHI2Q@WaOK=m z$?scwYfXh``OKh<0E`Wz$YW5xHl+-UHQ47CD6SQ_)!N&&{%e24t?HB)m@Yl;pd}-p z6G>@A(V6uz%e z&zpa4HOECw6}2s&_5UMI#@6EMvSeegAo-4HkF}2}_yDT$KW`s5G!$KN^g283sjgsUkm*I-Qs zo4uKVv%gCW;-kgrk#`Zen7- zMsoE#jLHQTk;f!let=LlW}rsnc;<|gn&|LbAEj2{Zx^8Vq}0q%!e2V-P#IBmb#-?+ zJl0%U$X&+;dK5)E(-iXc*rT9@m9xIDx_cJTLfk$!jf8s?22?eF6aW(8d51~f{?c(H z^c}~>C(tt9K^fNd8f@j@H*aPjgl}b-JV(29MSvqyMq2udMSYx*X>9<6xRDZ=PaYae z{Zloo#Ox+!;4xpqjcPjlRuIrmFob@Oij`kCdrGP=Ca0uWwlDXY+midDs|m+lHM7|L zBN6Q8){xb2dwp^t`z7T~Ri@j;rrYgL{NP28mx6Q%p@y~*dmD9f^Waay%WiwELk;6C z&2do;sjkMj73hd^J1%{>;waEf*6D5eJNzRe zew^iBCCwi~ZZQ7(dARcO1$;erTPd{&NLVuxldNY&m-lwJ&kLD+v8dNVz8-KG^<#{u zA`QDv4mGYjdqRqU^K*eqVKxw;EcX5F??l7d!t__`{6BJjHI6qy*MVj~un%K8e3rlC z{^)}w2yr7~ z)cGvnVN-#&>KN$E_wPGO^`c+_zi5^bMPSGm-b6b_;)a}zOtDnh7soygG5rYA4Vmf~ zvKv>O$V-<(D`9dk>W8gd1voW3d>QhWTlSI)gDPe)lXS_I?8FBma_-;8L?LocnFTlk zCEYpke4)4`C6g*&V@8Fb2Ss7~tGf3{H=Hs_Yvg`J5RU@QP^c#hb||zKBq7g`L)MwFoDd}qOcdh$(a>5nuwS-q4YT9|ZtuRMF&)uO2(>=n1&q|A{0HkA?Zg6LICci4V zZWC1jG*Dl+kBwlUr&TUgg#R1$dmiISLL_qVA$7dH5}fN0o-|iwMbLQMCn_=#O*{A( ze$gHgp(4HQKoWw0A-3OEnjKE4cgaMuEsM@6-Kcl?)nJ4wJo9HEh$8khaIxS(9RvCC z2@k&3vZ1{UXmFfAH8FYU7nD&vB0*VNv@XDf-&y!^l|RIyYQ0w&wvWf_kk0~E9)+DG zMUsC-pPCjaP;UH-CvVJ+G=c7FUlh&VKUMJRqXAwZ#&|;Big|Uvg~~rVQPFN4e}sj& zr4;2mz%?`H<0F+kIt{&Orl>hJs(oR_$i z+5*`V-~_yinHrfawI~SqJWwP$P8Zw_v`gJP->}sFr#dbPhLgh7cOj&}F_%BqIwBUz zjki7)5#9$J-}K!zmP_uXT&@YGn}h73SW1)mXsAJtFiSKTYGm5Gj%I zj@mN+b?pIUTc>C`1+e!JIRgeA0w+F(a^t~YUSD(Nij>H3MGv!t{ox#OVj5pw0nXQ$ z4CzTvE*xwEteapW9S-^J@2;a*m@kiCp`ZpmP$p4?s;j=c+zDW4GRg(`@>0c8)#j~y804f z1396&eC$x8}15BcwsbJ(OWKq>!^*2l8uYq%vxHx>_H-|&>8hlS15{{hNl zzA-#i2g!MFw2_OIZK42@OOk6U;o+?gc8AgW5Ye1{8U7HvraR)qO3_z6_HULtW`AK> z>tE3x$EO0B^L2mKP>jCcEDl5!h3&7EJ19|uA|pwRxk&rUke0U!8j|pm*Wx*}?3Q~$ z=`VAOZQt8W+4nHwD%;t%_nXV#ot*ZY)0?-m+^_N<+G!b@1=k5LXZUSp*t=q{Wn5fr zGTj3U+8gifuK4YJ^ZL4Jx*1f+q(}GJW^4=6 zc)_{c&CQta7goH6yhUyuYq^gfghAVl0@kiigDoYKG4OCJOB%rbS=i4yrplJHWifO8 zzR@y{rEIL2RH>H`1<@OR#jK7`Q^f)eyg4)(9!DyRp*iOxBX1!+6fbsJ7YlcMV9OS; zA909dK3R|TxQ6K=1u|bjuF~33i2WYFjR+CJ^8teUBj5H@_B|eMZFCv<#Y`;(GwIbG ze}Q1HiO2%A4TjXZWrNY$f|$M0{QctnrSEQeJ6>B`8B1R`lOp!(7WTX3J}xgf?k&32 z=yvIgjO(GJL!e@MGv};_j6 zz&?!?FzQv#v4)CZWSCR3NAsA8=w8Yb$@-@a9%Dbi$hGpvN>ekH6;w+3H^-wJ2P(=F z`!%f5j0VYkm2bSK^O5*i&EgbeP0U3)>zbxSo$g6?FmkKw1=P^;$poj1mk>+)-DA>e ziAI>1td>^>@b3uNt@fNqiFBN4n8^zKGM9fsBUYi^^{$IMYa0&H6fB^oPQ(bL*vXY8 zL)Dn7gE|3tB{=1!Low=AuonpXXVVYEiuyx52p0TLE=<&P)ZQQureO|{mA$DlWL+KTX6zMOaZ>9WyfCU7rM(OIQl#g*{ z3|T@Ew=oatKDma-$nY`b%sG9$7IkJK+n?cH(CE#I$TzHJBNCQ?($$jry z$@-hqVGpZC8ox$oAYxvBzDI%9vD@wvmpXm2TkR2fPr27y-N4JhP(ctLW6JSsXq=a} zCjNOw?bodBwfUt)iF9W-;7Hh=8x7gho#{x+AaHhbc0;RL#ECDUP0Te)dI07WpQyYiCp+; zWNjY>I#&ACNg)@FdueX<*dl|kghzjgh2@j}G3hiTs7Jg$GhZSQjNwefiq5o~RZ!mN z!cRBW@CL?@*}q=P7Sk4gC;d)>@J`Gbj)odKCN5b0AnCC@M!m}V#X(xu3;!K0n4#cE zL_e>nse_Rt!~G3YjTM<0h_3@nKJR?xu9i9GKkz&U z&d{Bo9~=9Ds>e>PbN#~*ert2d`kUa-Z$teoe6EclV7?g>%;w|K1YfabdXX3Nl)px< zFIpA|0UhBB(6~Y+jCz&y3q;eGAA_xT=5NWU^ZRn1e>+bs^OGX22z1R$HDWzzPSJU> zcVkOV^spi4nyNLcn}@&U7)a=vvGjNE$o0&1vjmT#LmS7EDY$-Wut43GfNd;l~_ z5PZd2H53C@878mbF_(YF;CS%etP@hq9^;AcmCi>Z@cCU<1Qu@T{Z~z-o$HK#@AUCn zcW(uZfP684qYNJZHxe0qLhSj>G`=0(Yb~F$sXUe zQPZmBg{}x+Hq%5?zulKZ8*3Q`d%IhlmDD<%a=vV*Uv>42BKu1Wv?@-Zb@<%Ymz|xZ ztO!|U;WeIM0S{qT6JVDM{qmTv?DszUSrJ$QTrOMQU$|9wOZ70g1M^CCeRVtK$O$wG zwbM14F@AS1|Ak#P&ft|g$VC-d#Zq)R)6$p1itw6EN>2eZ7BP_&Aq?Pvy<{U+#~`Mq z(<>fVOZ`o5+*yb)hJZmKmG>Vu68Xy<^IPZsgb~cprKta->E748dv32{d<+32ah;g2 zwEj%wRq!D+WLNeHwCPNVk~1l`b**mTZ@^B)DFZvpcXb~#>BM8dS32F8sI2gcw9&}w z9{{?#Um)-c3ia5;YYw_G^5cnjj+MTlAX|Ixl>!6N&NUNPqqotw=Ssse5Ccb~Nc$YP z+-k-_VMX}4O%E2(>}P4v27-z9!1Ijb?3yAT;6WWpCRN(Wo<|wLcI9J<ZYdy1@S;Kf4LZH-2z5dh*e6f#V0DQf{RC2V~CJ(6Z_Q!#Z!|Wdc)4zd-Px zm_2v0xZ*tfd0zM(ulu72*m`v<5XAi76yoXW{|S*V@_$17e~~3F3xelz8ul@!WsJ7B zF&F8^V@~DwhYbEi5Qb^o^e2r8vh~3&H}b!S7ftZ_kt(6}vw{uvTISN*l1vvNm)4R_Vb>-r zTbuPQ*{yBHVVf6n3@NS7f30n)isW4;#o?Iur>W7951t$1Hy=Tp7^`dXzhmz56KKYs zoDXAV+ni`zY^F(%cvFS#cm`tW=sOk7XZbY=&pXC+w>?(pi8RSSIv7lz6z0{3_e_r%6MMLt+39MC1u}y3j@msYV_JQ(V zLXw*0XQeW>x)-!X?VBMaUCBSb^doMQ1kLng!!EYG->$SLFK%AD^uWRi*6aRd+) zIIg@$!71k(+GL<;OkAELmT=V(;_vK*RBeRV?$r71)CC8l?!MdvzgKYUcWZq7T4?_V zSYWN2;5?*`5R$E>)%e2+(AL((J8sf{O3(dfW*kL`S5USyF~fSqBh&tom4Hd z-W&8i)!$O&=%z>0(j#JSADEw@7{=IAkF6}MgK@PDhH#v_(e8lSeO;d|#tk7tkfk3T z+Dd-qh6@PTt)9PAzGMDrlp05gDZ70sU&RE%Ip*L~mY;y*{!S-8M`d~8pYQ}DOqXHh zl`lynKKs9x(7I38A*&v8qdVU``WOZB!Oz7}^KIKR`{P|HA7l6+yKYoK<*3X?TsO{x z(qba=L)%xu3jy=MA8L6c>x+YA=5q@8(4IvLad+vEE?M|U*u)}M$AwR2;>JWNq1HKwfoJLc-_UD}ANeG>he!zWwyn#PfXwQoZ6`yPxqwQq*i0 z>7^uV@9zW$H?Bo!YH9`ttA?dVeBxSx|A-##9D4f5Y?5ZJ5}Z5Oo+R)^U})g4P0inO zToTRo&Hb*JYb&W|O2nRg>d-tnUgCR5R&bANoJh9z92e*^W@AZeB2!rSimm-Ah z**qS??Crj(0muX6Bm%W%i>B5g=G*y!C1m z3|@?iD7ge;+G1$EivNB|I6^5TD)QIt73Xs;E}t^i$)m7S9a%IgHjoN}-6NKW!3EnZ z^>IF4F*54>iBf-Jnt;FiT}Dm3MVEzPUu>OeQa7%Dj?AkYzj$>y8Znn-(!cz*j^_^y zOU9gI8GYR9Q>(C;B{uA(;bx1Odq+D$>di9sbmI-dO|P z%~#CBA`o=rATrqyJ16eh5PM>eB+dQEu}Gn|HFCvh1y~TOvL2Q=b&p64t}DZtj$RSQyMB18fN_7%kn@NjU2z zPZztrx}3{6YHsn#{V~Rv_#63|1l^vNVo2lEQ z!15c_hyU1T(5aKhD_OhJ6-Y+|z856aleoaA;3a|PQd<(IEhh4i`jXZ9fLC@)DBQ;d zXnX_m&+0&R-KIyYj8K8Ye6cn`EU*|k74GCTU01tP!49<178a~tvq6Y!CSdwCBUJ@b z`sw?#i1Hm@EZ#8OIK&$TA->fC`V0E0$w!D&slXb(1r!{9#TU&2>!^rtPUG;6OIj}MB z&WVkA)oeAYup_KrIh`f+-76f4L}2D9+rzA;BsrE=SIHyyW&HM~0^em7soU5s+@3N2 z{y}N(^b{Te!K1n;U?aH0m0~w8xU;}4On>|$KhAK4$vGqIL16Ld)9Z8YBm2_#j+A~Y zKhKR&jpYWrmu8pov-O1op8>Zci(6Y; zXN>rLT=i}4uVBSd{3T8_%!ehUOob3@!wO*Wv)BDYVo(~eV(9|XlmQ;eDAN+sO7MDS z*t$ld;6fb=!$<*DEEN<=y)DO%Y(vzMG!JBf2fTnL5bq+eoK3je_jUbO{}Ga?J~mwK zE?`oZT0-GhCO+8%D|6to^#GL8)^J*SB-!8ehf1O<3v&A^xlIBoC#DlX(Z(Iyq%I{YzLh!#hMX;FZZ}kQqu7$X%66T=5%2El7k) z=A7-$uTCU^D(iWHLaTa-0{R~91WW?ljXN$&`=y6Du)x7ef;4wO*IY%n9*jba0w>I3 z!qem@9>a=5+Z3!*_hu1|dKcedoULK>Fv0x~nSgj*Y_Z=ZqwTZmtC1);7yOnT%goZ> z%mD2mfEm|O-$MgCZ|H5n9J$~g8Lm>wq3#AI1A+r4E3=68dxHj;fPJEajWOUTC#+Jj z1$}W1u=qDRbTyRDFMbxSn&fV<;lw_Hh{yG6=NN4`G0PmEbzpdH8C-9 z!a6sq$lF!lt2>+zlOc+EeumFae?x3MpJdL`9dV)6K=OwdmZGrjLO14fP{(*#+h)Ix zx6N}VX}uASDp;5O{+ER@O_#TJK!c!Oq^h&LD^>H&PX3NaWsvNRtHovez{#|8CTZGg zac`|KxI>hDK=vJ?M{(S&KdP$IMzS||8oP~15G7Z zGWBM=i`(AsILrFDSGfZpqngyWh5J{5Jop+oQ%Ur>ZgniMh~n1_nYvVg7C{|Cf?fSN zYmVo*ph<95fM=^tPFbeWPIoK6tpT)sjtxq^y&dt(+x|6#uYk}^+zbKDl+0v<8Fzcp zJ+Oyb`JNag@Gm_qef~$7Ld|sjA}s8&Hj7<0-R#aRVm&O+7^7Obzf}8QF_X`op4~iG zz)>#KlfRRP93U%j$6&RJE;i#?{EvW^1O#kLH+Fi_*d#w}l6FySQ5h4>L8h|vQtzXRft-H)SU@cNC&gKN7o&cL@KJ5~N=X=I!m&!=3a zNZ?MvJO{DF;<1Zkt&xoG48rs|j8P`Fo;{yU6}2q%6%(s3+)DSmBrUzp?3k&OQ})ha z7z68+`O6@{DccmX1GkqPm~n*)9Ka>o3kn>MGORB9tIll}ya!J3iHH~}$gMPNQeZL5 zrGgLEN)*tKS7A$yn;0;q^q(ikY|`<42XFVDV2C-6}Eb8>A22FhiB zeH|^0dH=0`xYg*vk{go9mGT^4tbVK3&}t71C8mRU;)TL1pay=8W08Z|$<%)WvkzfV z9z1d{qJrR=LA^u)UP(OGni?2u;z1?xFq1O?lUG!>jy%-pC?*X$%q~g=Z|WT9baKvI ztqj3xJsqR<$_uyGF-LB?0f$nuA>Bv=DpIWG+o`M38)fwkdB_3WA~TEwpVk5#_%?2v zIvn#=#YyaLipK;s!*r8Ay=YFp5xe0%^3ydE1@tcaSk|un18Wuo49rVzF5bSrXOk#x z$g4BV;5s>HT2j5SG5Z1&v-WCml(`p6MSKh zI|5D8E+#6x#hTCa-^@3hqvtD0X;x4@b$7{aC+3S*DmSYk0A$XmGPh|-AVi{|57-@V zBUm>ad0yP-O%*gdWs=tW_I>%P6YdylHBOieLX=c%Zj14AV4F-9&=P+kB_IA+4gHd* z9P(x+D&Eg^z*Hg^n++?s{zX&kX;xn!38ss#U66e3mY|bUX0B8QgvE=%?0*s5EyG;O zDkKMn_MBUYH+Z-KAkHHxY~nV4LS zW`FcN9J5&j#RS^vM9<7{jU=vbtxVTh5f=<^^uSOaLfAB}hgr%0gW-LqH-X}tyS}JH zt9M~@7SR~BP=_t@uw9G__T$L#x=-W-Sz&8yt1*5nY6zgxkA36?Ue>>9Ep@UrlF_`` zJU~q`g(Z7oe-`0pyMgHfbZh>bK$4w5acfO`*R{dj&sCrP8rP5$HW;7$OEBI}fIX5p z9ZsoS5L(7{RR{?AX?kpc1!3y=e?UlM7ei_NCp8iUcpgPqbYT1kboempvDi3ikY+wl zM=GNlYIKD%#q^0z&YACC30S|E{x`oj%BI=jZ?WGsQdJXqGTj41`7dHtZ7%{b{e*wO zQnw`Ynl1^3tmf*1YTXoj)~-C{fS^D<#y8pi{h`T~6_+-IZeV}&z&)1x#%UL+SKeZL z6W_wS<^pb`qs`lS%;u~40Ib`v5)@@v)x4b_A0PLWOwdhT)h~qjBK3AWB|-6xI2ylymz`=jFym_p1GX_V`R2s z#CGa8sSYOGawc{y<&TKc&fQrAWoT9; z-xDlv_z)ac3CH~TLLc{p=tB|Dqfr-sY8<>yK1KynktlxS9)Gz8!L zTnGH0WJUh^OzH3=j5Tn(aDHoR>ztaA!)=Npb(C7ZfP~_nd488Lyhs}R0 zgCB!V3PtKR9QJ>aD`bM$(3>}#r(as?Tbo71*ZigaL^Y_}S;8dB>Y$J1pDHG+jMFYA zR{t#<5vaJ-Y`#S%b27Xtf1wA)ck(aB&p(u{>5>?qd!e)OkCZB7fqr!xLf6^@)|ygo zGMtCR7vc4x!$JRX|4cSnP(th_DJfNldesjX>Ld!-%>NQAn=Ghc(}iEaa3&9_zZ@@J zE)x5jsbo!=;mmAiCw7BTR5s<^Iyq-Hb+^TECjPj!B$W+9TrdIC&;KMj=sb=;=i{n> zy1lzK{?Q*7uc$Hsr@=ea@3|>|2pr7c?t$^~{4Kcp7&1qrxYe9jfX=}!Av4d{b-+LI zZyj=hrZ!BNdetvfI{0+fs#%>cUUkA3F*Qm2KMtvcZ}DISI{hG$N2yTSYPj11uu zUq9v{_1pfk##7Q?Yos^5th}}}Jup7wzm#~LpyvJxdwF%2hPiN&I_=Z)AZUZy;OE=i&8KdtelT1i>twaId@pyozk$G$^41Y)v5O!!bp+^+!ZpDTCei2STExcb+&~4J>Lw?2fEF!-CIGOdU&=G6;$nJ^ZUY_JlZIiU# zs)plqs+pH|cj<)qv`Gu^^cwiM4m9A!OP}@s{g$K#b%G|FHUB_Fqs6swX2sX2)}gPIP-AX8@R>IdsXb!D4m=$-nWl~k!^~sRD4JdthmzN2syNy zhtzl1J!T%$6|ixw=NhVFw9r1;%fnTFj{G$wRiZ`xU5)de0QPU#<3Z9cWPd%QW}|u^SPWWMqom`Mtbc_2;<$Qp&>yBvPwJ z5VbPhHJ8?T)+DW0;=^$#poL-@*q?k+WM6>-XTRil^z^Dcm3r*y?QOV7-rnZEIg9AE zJRYdJ7mgz6c28+g>w7o|2tzk-D;iwxaTx=Gr_ zr+;~1evs^Z1a&pK=uQKR{P0#DQeWsV`AB|saEtDIoWzb2`)kzc!}hGUBi{*W$+~YNAWUATe=<3LClqZ&E5hSnTr6U@CzhVn6Ny<6M)KVHJ88Pmb zvp$O;DgTEdL5kdH5k6xFpH{)4g)hcw7dv~qTb-n_AKYNoUPUt-Vn2bwYVuRG>^vQ*5T6^#%pKtzt|Im7F9Pw>#>%Q*za{!A zNYEa!x#&KB_7ht4EJB6eVrDX{34!VS917Bslxs{#(d{fWNVb?$H#BGZS=UV&LU{|OOMw| ziHgwjiP1r3*&_86D(-mc&dKcGuMz`ZY>gDF?PbyT4UXg?t#&%QTfhFe_nT@=CEy+i zat)-}wZT<>8;6-5Sm~uZGn2m#E5S07)&Oir+FKu-L5Y6q&O;VDJLiaxbYC=7v(fiZ2a$$img^tVkWu7y92uk$|Rj^qG3E4%jY#8gWybnY*IGxU+15 z`QGl(?D4X^?qLd%b{*>N#%XR@nS4Gqq)!(P6$kJ`#|G)TGVx5)mdSbbM>$We1j_S3 zf7|1dJmqgyBsGMSmZ8Nw`tlxww5RL9nsNCm+Vc_b@9Kp@G~_Ywi#@N`KaMm`>uvt< zSG>nHyn82~zn918erstKVZ2bjT1<7#?Ke7{i)X!jeMdM>6{*inxvMaGMO&QwP2QZG z91rt>>8^~8;J0~5iS6O;)`;^-n8Q;r@*b|JvRA#>$9iD&wGK1piixU6_m0lT$li}% z-Q29~nn}>}a@AK{G}!JZVb?lR#}4Zfda_j)z4?w+YM#NX$7U?-q`eu!ggn~#yr zcMYS6EM9QRKo*s*&muyen>QYpiWuH6&T64Q&s>th#h8|>lSAL^?30xh*(Yp)JxU2s zk*NdN?D4z)a6gAq>C_^f9D1P{P4gLZs<5ylE6qO!)>D`c%!cq(bdsm*070tFS-owK zGnaghP6pYz;3EP{hJ%LW)J|DRMAlS{24= zC*tbcc^xIF8ckqnjBE5oj( zd^{D#F6M4*P+`=a0XBPM&g(feJ)~%b>VdI1N-&hH7PF{kAGve+WhjGnlX+&poCPg% zM(lKv`W%7FP;6G@q&JX8n4E^8NU5k0=sM zM`JKiy;aY{RbMgDT1{`;gEAWXkvhhOcbJxzmLPdM>%yZm!fUgLnfxjQVzv16)vHHL z^{PLup`YK{x{o4z)4W+Lfug*rXsf?125MzGQotVM*8=Olj8?j|R*`y2=PMnR<33)C zNnwMXMee&53~zLDhLe|``KT}wC%ycQcVhT5;s+Y-B%@V#FWWfHjjMQW(BK%t^s0MoMoUve%|uf8yzxz6`z@zKEWGxW+Q7|~@qIpGa&W|&kM9YPYEj@VB< z483?4k84+_dSDyQ0a=k7%!@Tgf$q+VZDZtn)l5<^XAI;a7k;p)FfRVQ5)GrU1-YM{ zjG?J{8}VG7oZ&vLcf~L6!1_lO7vCsJG<2^8U_vcxW?(T5hqbMIrmbGnmU>d#GW}J30tp}yAzwIGe z&U?hM1@!uYhk4!>(ZlyL_(kd}6D%r>F=B7eA32HrWheu1_<*jG+v&-{(wQFEHSfDK z=A??$_(v$nM{rmw)&@?g4Xn;0r0mO91tSH*um_+4QSy`pu8|?#%n(@|Rg~Fbm$E#I zxVc}pDi|k8baXN7)6?)}l{|=zQ9i0Eh+bz|Y@oYUs_s1LkjDXFIIS{i!yk>)(4 zGroUTm-l5rq$O z4SC4!s}HgwVMgYrN2Ihc4UCKN8Qq#G@*v|hw>H*m;aQQ_=x$RV4N4&8?0U$+$S8n% z=>t%M0n`wMg6EH@Ibk*_Q$)(_F1_;*R@5L_nnh??2z@cwPHa5ga#Y+pavk;wyR~-{ zobyn%5(UrO^j@zD=9q+?`i1FZ26E*bix?hLO_jewu^QR!A0 z`!lnlyCVj4K*nj>H(v1RZYTC$z#d(OA?v90Gr;H=G=-!6b#m0euA^4RLrj$eQcd1s zzl$8Sxv$iahdi6anqRys_)Lq4@QAIbU%8E#IQLDEzfO)(z?^Y7pHB_d{plmPO;kTj zZeLSI6h35vYa~#d@d0u1((Ly_n2z!Z0z46DLQG6-7rrb7GETb~Ik;TQ>tmSyM);^P zpb9L=3|@)S_j#xksnbr!%)ZQu%pJOY{>VCfaOcuJ}vH)Mz*Sw~*A~kg?A&66L|9cLkAy#dsND5X2t`48_4EkZmBX zbe-!>lXSNwM)iO_?hV|%_e#`xE;B@GM-J!LFkTXmnUm0tBcyclrHtM^B>IQH3k&JzY%~je>8x3t&(i<#Y`z1$%C5z+E zItq~5{GBso(Bc4?RZaB|P zQsy^UAK4)xyg|pr=fZ-A_wFXzvU(|fZt64aQmTskcyFs_4e!|_7SD4mHJ)TNtoKdJ zn8=8^HZ%Si#zj39>NuA<1op=HX$`33eS)xA+b?%AHLIl(hP<<+BnoIeKD!NV>w@Dg znE+S9+V(rRr8Z(RqSa}1(mN=f93&;dhc`({Io{jKrwi{o8pnSEj{d-usY+YV>`cS2 z?Hn#8q4uEmj+VU-FX%(bFaN{=#W!ryzeU^ZmOpmm$7M*1|DaWUu0s0mR;lDKtyB_$ zTUPR0bzqZUdlSaZ0{hxBkpWA{itoLx_g?T4{NfF2N+{*M=@<)}ER-6&CYgp4sji~< z$|%Z!v26D%{V#7fv;|E@8;d%O)b#gN2IftEh8et;o3I}1ZM~Ani}(9%VHp$CR#K;5 z6n11HXZv4ifA3YKxW68F7+W|Xs+0!)E;<=1zhVKG(>kr0$a2%b)vktu$QdO)$S-=b zrryoMb!xN~4)Ev6IFagk?7Vsz28?X|U&()sF|-9$*bi5^Om{ZdwS*heN2(77F?Gw} zS4d~GSYH0Ae5hj*q163li`|yVN}5F>`8(Ba3~9ZOs{B~&edet@BYvrM>^W)w-l%4# zZuLv5%CfnMKK*j5==`pC1(ABJdMAHTl{Fn&5VQ9Tkf+7{mw6^gs1Nr1yx$1>%6*$K z8n7w~Qp~aI72#qGGhoy@UqWzXqmN)W87Z+kP~}HRa#5OM&V>^WBM}CSDezMIqd^|v z7QZdV(d_V61Ctt+!FdYw4@5^Y``kmPIdjTuz3^X}HGnSt_?#*5WZ!3V{P7~*e)u_5 zOE~R*Q^knqT)61S(sYv|aKz;cmEDOC0`;oJ`oim?quwsNi0^|A^(gu3rG712Dih$^ zlMkdLdpjFGgW;e1jJ^2GrmEc+>-M+j7VCBvw5W*GH^0Sbl<=>lIMfACTC#(oQA$t6 zjq%=n2#nM*m03hPJ#W3@(o3}}P*T?f(MNn)o9k1&+gcBWmzI{2%lls<@D}Ae?G=KW z2n|C{8z#K}=C!fVj20pTL6lf!Ya|@N>cKju38otNQpYqce5Qp~gROin3#Qr(T<=`0 zUG47jT|=Y&M2&scvhs9fq<7K}Hjp-52Xn~pQhrmj!hJ=xt7F8G2a?rmwi9?(Tse$8 zqsCqfCY{DhYA)l&86Pf0WYkFd9eiKVh;T2gK3GDMO!zvZ#77^<)UUri*_XaCJ#_#3 z*Wxc5BRh@g&b0{vUq9Zp$!hmf{_|`o@e#*-9Jq?oQyJr}=)0nx)KrpOo%+7of_dR+TZj$Slz6jUi6kh zgUCK0nl$j%?IZ>kcK6n-GZ+^QGcIj+a0W^Htv64m%{6}AXw?+(TT^V6>?3A8xWgOg z0q5}Cx7YIZ<|arD#X)m3ymZGEXETNyJ=ilWj223=khK4CL(PJ1kgFWY|G=5G9k&|n zRa)e<-%^m8xGrLlgn~K>5nY#?n>-MNIv!ooMiP2I&7&#;+Q zv^(6%$*8ZF@*4M;-rg#kE;4+x+@0g+SmR=JFwvqr+n3=}XI(-e@LL#9z0B6;IirowDd*7e(BQ;V(ci*;L_l3Xg`3er^vP<~=-tLM%Q z3yveS%1uDvtE+nL@6{i0e4yXo&sf}RMh*IHL>|PJjn(h9`Yj~cHh*YBWq~SMV0bR^&v2a1fYXR8z_la;7M^C_VjuuLksL16AwH$Lbq0ukVkFX6OXc0OPQ}=85!oTf7Y=@TOnkr z{}B2W1Uid55y$$6dAN}I1UDkCh?^#u0_JwvZz)hs>V+zm`}@oLd$3`$q&wZSJ3&~M zdF1}X@_)4a|AAxFp4*8V-7CF2YI9)U9#`wTBP7(?S#elIunT1ROyi9Lb8ATuJ)z3|=@brM4I2HDUedkZd5OBiync$0Sp8v&9YN66w)O zx7B;4b*GFdxLVm=DeLTZT;_j#DR;=I$bo5@OHU`JV{{gDWuAiJTfW}Cef4FAaJI00 zI!TGLg!q9q4P^EsnS+{44xfFAbEX8K965gvib(xKTsOY<6PT-BUGI!-3xDK5W&K@5 zMEf-=3lBv%Xq;UCTn0e;6^$n2@yngb6w`|@P@k7*B!qLG6+f^O;JY*3zuvt|u@?-B zG$(lk#euT{HW^b60~QY^%MYr2f2O!k8oAEQSM}PrZR_m>3Sd8&r;1;6Lc4Ghy6*eqJ%xX zsq{A+S2v6o)QtCp0CgBJVH00=M!nwK5zGMC`p*G>WU$MEHGU&x ze^o0P?OT%m0&hOn_>GiW7rFjXm=yn0VM2UZ-2?9Rev7uk*=%4^H-L#i)-?F%%AxKX zp6lM>GK2nqwanmnk$QV#>x|Ay`a|TzvZEC{_sRLQ)3wj80P7zVnS|fTl{Y*cUT4(@ zOZ%!4e#__R{y6GC7A-j`Yqx@|Pq)*29UJm)Bo`F3tJ@F3#73tK)>ii8yO$`Ym4B}{ znl-Zi$)8^ESW{1!&U~Z(F}7=J?U-EZ<;{5m$p1x4Q0tD>6?a)lPLGq{8@C!e$3(0* zHn0B|D&b%sbj7zb&?`*kqM$ot)08{v7Ez9>u#>dQ9qrWn3}DgZE?IHKn;v_Xtu0CM zw|8{MwCYiGc7qOsZUdV2X{FEAl6ra7%O5r{;7;67Vhxa+Aor#? zOQzQ=qxh0KB|nQ!Eg4yFx#z%Q4->Ol(~Ed6g-wXoVgh-fPlr2kYxm}{040k-Njxks zFnpGJJ2cmSIp&)6fC$1`?}&-CmvpaNw>ZokT=IsmQcN$7U3~8)LKoJFfZbU{m5-LA z5Lv#G)(Vn>C|J4B;N>wh2-LXwgpL`o4E3t-da~Ah#-~cpB(N|fR`{b}mP>U@I(+xW z&U&rrz_W)ugM=#^49FOO#+hhr%!YQFaH9U|OBVvv*7w5W^z3 zr6taw&UFTCeG>xSvO=O|KNSJG?@$vkaYvz4g9#Zs0;H;mR{}Pf{d9D>Kn$ z9FPh)NC!<2k8!JC9-U#|tMe>FVrrhZBw?+?grCMfSv=$XKhM9gJN$XjC1C3VTO0D@ zRsifypCkLn#}PBv{%|=KU5rk4o=|;Ri}|S)-&b*^r5}tJDq?ZIXRBcmhb#1c?x4ZQ}F(^z8Qg?TJUy!}&#WGKbv&9gnC| zcA&8S9qh54hF{{SC0V)tr!DcHPRf7!RsU(R{Xf*mJUdmh+s?zHII)-u-v8FMzdJww zvD;u6e@6?ZK}K3!RNhx5y3jdFEWJH-k543?!28}oV;qmp!fMQ$A9(e2GBU$NJ<`pGAgjB?=@g=#A_*LnRp1Liy#wRb%A~|6aC2N*MITQ_hC`-AX zQzgF;FuWCtHworMI#aaWg#?j7jhk6|?5&hBiEc=s#OjG{#)nTF$!nIm&4t1fA0>BB zlX)!GZt&Lj*u8!neQ?mkJD-OtTL?Gt+gp3XAM-wv;gbI2WcSNBAVpHBahfP72h(9? zoZ;meQSWu8SHtYCrTIOmfR?M-J~33ILIreS z7MRf&FF*y9EMeAn?mD0U(ZSx*{vK2e zDsUBMd(YAtDsa{I_C3ohmgWu?mQZQwQ-^GO;Lg`-v~j$@Kdr~-{(;ZNuAac_CUx-r zMtzOQgM4GDk>MxB1^5p?!ESnK8nuv;KT5xle{lOIb&V?|lwVF@QCI1x z;;Y4xuKDI?HlJojNO;x@H-evi+?^5-S_y9BV3rn8AgOO_YYXaHvAE(b%)+w2X0rA0 z*E^bDZ<~%@B>(5n|DkqPuZ=Yx><-?nJ-FZfP|Z4;`nWa=N&7h}*VA0f&a)n$6YlfC zW>oLfqhqAtdEj-zLLX}*J|eLW+y(B@X(cP56bpF~$jbp>p39l%W=0?p~H)n>z^QiQt zc&->rh^9XW3(}oP=wxR2Q)+*C&<^5byB_+JvT5Ku;Qza;9(NcLIoR=!4YUT`=(FYi zmQ`w216m>Ki{#!@eh?=gLq;WVNq|W3m}7dA1}$4_q50EXxumV?oF03N?hJYS z9Ud3bMP?Fy%_TG#sr2^PFn!k78e{nx6p{S+lw5q-hLNf(!Ce0`>{}`Yk{6#npAwm` zm@VEE3uC=~Oa?xHwTo#KWI1rcJdZo18Cxr3Gf6s3G=FLZehR!!nCfGlD}la(*FDg@ zDIz4}y|lV}I-2xP)5zk13@&u`uEuclrZccmB);g{qS5HOrg~g=orJbMVmvcCXB7w% zx(!1jIUY5bl{B}#58e&<)2~0Bg1>Ykuhjp()-JrDGYRD`QwR{*$Xm8 zf?MJrHB7`s*^RHgV>+hwV+%YQ1EItoX~PBv4^@((LD2;*8LThCp;_{XoNvY<8uZn%2fpIF)j zj)J8Z$bbFAl5ku?C=y>p;?|!~Ek!1qeZTyy<)4`ppVeQL_S27JtS_nJBz^xX5qstj zf&Rnrp*sGf;hzrof9Dco@xXTbk!fNOD& zI$V5(j-)V<{8MufLW!O>;nms|oTT2E3%RGk(6Jbths+sn&u&7fV{rJo6WwxpJ4j@+ zFIWqmBElsQQS`rj!-YMw0rDdehflM$CF|}b64~rE3$i!_&4LBTfo%3#)9X zNcM29s|z>^hM|Q6>L4+_{w4K2=XtOMyKLx}Vy9ev4R93fl3q-eEDlJT@I2=-j7k{~ zE=c%^IUMGGcbE>>LLWoRU)BXoO^#s!9zpnt+11wYRWBK?g}z4b3x0^dzXpgX#Csr6 z^RlTb2%%&?kftxHh?CTdq4j?&ZizFV@7io!vi&|32iFC(v9UqSAhp@)UT2;zOe2Q_ zvM2Oje$O#gHP0d*nyCLGLBNFJeSixS4!j#21p#NOFEH_%iGvQeO~`djyn@XFnXUQhO)=8vPyMXbGN1hIpqL|ND=SYy0FV)D{F znsTOOxcCYwj?vU0ddSjH)`Cs+1n(!c-lU8Rk-;=A@~4{GRN#po>84Ykqyz;ajw%f< z!V{GGMR@OMJj;03B+?q{E`OeB&c=cGH`s&HtH1d0X?~FwKgaE8AjNjI^J|N|ctTLH z&T#-SjXO|3=cCGaAqp-hR#s2 zyqiH^C*b`~!(u)`O?HCkvDrBgWJv=cpJ8mx)Q$Uvt)S>o-9`;v<kziA0MCI zY$b*dKV+7<^^_Ij-@p!t&cdfz2dau))~s2|e%!spycGxLc}!W#ObU_)NPCmcRo)bn z2SQ?+R7{9dqT-t&{UK@37Ygk0nnw?$l@I zlbU5Ngmg6IX$H=PXK@MUS;pR|TIB7&$0CC0ffr z%=<>_ZHqarjpyLAXG22b!#^_Nz)8VU?ztxoUeJ*sp0FQ$QdUl~o%+%KjI^9xgMgfQ z>&AbR~~IXBJkcEe=K^{FJo`sdbDH*`MQz6v_g6%sf)U2`Fr)~p1u5f z)=S8pK>um}GKwU2gCc@LpU3)W#&$wnz~ZJ)+rf^H+8f>&5&~gTyvQCUKQ@ERVI#Vn z4xvuNnO#w|gHRESu2n?ab9{KO^D^Ql*{6e^$~%;IW_?4eJ^5 zKYe+O0Jp27E!xv*;Vek(-Pt>-6X7^Qd?u;*^dYJ%-`~aN5CbMGw@BW-jYjpGSvaQ0 z$@_Rvl~D)yPg_|)$ToA?JI7inV=Y8+EzSwqRjfEp%z!6;cwTy~+37K%oSZ5zm?0A7 zVx~IzM&%Me@@9t;yS6x(zq!?dhmfCMKg=ZTBdIL&~Mg=vA<)Rvb&Q z?%sV>De@CQd~^s@Jn@*i&Wn#ru*m_4r%_Z&Izg01bMNCU6d46G_w;2f>!dSkwK%29 z%|NU+QM4b%(YX>f{ryF7@Fn-$@OF{naQ4IimUW0yjM`Z=*)gbaTG9umc{mDE(~=Ecj`^jy&Fu+$%m4;Exk$ut%xC(R-3USiFQlaGnr4e+-HrKgZ|4OQ{d zc7DpzQ_Le5I+JuUxohL*= zGtKtv$+0roY$harJzjF5@BWW%&2|+ukFHy4$rA&qZ*Nrin2^j@@t6aeWmUyxs+>91 z=wbq8Jvjr+A8aw1K|euoyE>HQsdqTJJ3l?9KUstaNVLiK>E4>KVxM3VC}z7wK4vp6 zLsDJuJs-pJP}aG2kseVH5nO2uSUhv+ii=#M)8ala{vreYV;3R_xfA3+ZS{gF%!i!9 z`p3J7hkc-=N2;{Dly|DO#WUv;Tkd)@2qP4x->4{Le;r63f?mgrzaIB~ofJ29oRnsQ zmf2rbKKsJALULC*D0lY9hHv-w!Z{X?&QI4s?NdVLR!gmx>e7j#4Mk@o6x{K_Sxc!Tmvoen5gz} z!b$5NBTXzfA;4peU0wx~PR$6G$MiYhmNtg6n32xBO6Let)f-%doh4E~pYj(DvqJOF zg{sPDyUz4Kyg6HGHW2-;PODJA$t58~wfe3!scgduVD6LB@^QG<)a^sH+LTF;ROfms z6kqn8Z5C-P5qMl+J@o=JJG=cm4T4QTcJ#IUNzHL0dRq6?S3uxTdU*L==!lk?D;r68 zmtAURhNpdM63}%4b%Z=*Ngl{|kGr94jWqaz_eOiJWHTYR*O%&Ss3<-y++Fy9n92p?t(j#X7P>{^MLrE&3<}LNwu%#CJUn+ia8? zCNh@JUjTEaP={tfmaYN1j?rz+dP^g5aX}2YB`HtIVnA#I??Qn_128Uck=T#~BuU_5 zf7R{gW332C15L!INka~B6s%2zqfki@p97=OGYhFV>nVWrt4-~urJnkXRx84g1V|ee z2RRGA*sSEc8}LNdG!V!xS^ad}mvO8)FULvokOA1hT}_wpuz?x(zxCtXOg~V1^-YUp zzk_E15C9tp@L#FoSidAn{SXHQ;xcZDXE~rj8#8J^+vW)aClYVm*KKE z04bkSaIA>qrrz!hNc>I!0Ck5rAKt}**dZshI*vu$UhYOabsbUAUOh7QywVxb?A z5rq%RBE;nAtOAXF$ay9J9de;b-^dzhmi3~$`7r2E;G+5Z8CGfXZ2Uu+coW7w1 zP<*X!2@;dH95XBg12Pr_m_&1c%Skcpm+Qx@Lc{>i_(l$8F(J36{<=N5-~UCydK60XrMNQH1iEVuOotH>2J3g|{@Rv_TV77@Irq28cj7)i43T zW9PH{*q;!ySu=1tqq;(3?FnP!VZ`zKy>Xwvg{?KAf7F#u%!tE*h&P&=LFU*O zTx*1W;>UP%fl>YQZ}LD@NMuPs9M?=Er3)9LW4*4Pt#%K&JI!Vpn<3P3+gaPQjXO+L z@`r8eSvUpOcSFX-z_>Di9eg>@Xp*MhhRAOib;t?XF(>oy8IoULX$pPc-A14DBFFks zG|Xr8^p^!g?2~Wm8heWg*qEOi*?Vcq2$1!G*uSI{lb3IK{xX3eHVT$|r;622yZgmsvrSED zCTaFi_}c1D1T&KVJ_#BkrjAjVq`iqV&{$1Ri9XdcP0EFv%9M4v@&-u3a-iy56>Dzy zrieFJg^1d@x>#R#DWQTJ969}Jz&eZ>ne51P3eYq`Z|-ja{XxgB4MEDFlnx=l+P8)r z1UwKXg8Mp0Zi48No=bmKDkqYECUZ4h_guNMA6G^mx(#vLfsET2j`2b5M%+p;ID%|x zD2%R%Ufh=1U)c7of>{PQq+KL9KX1S~-ITe5U4~ zW>O9V58opmHNbPicc6SGB?;(5Q~m~jU<11kdDj_hHDC3TWV*E7R95LtvZV5NjbeD9 zB&?^YvOFOIO#=>@s$$iUH%WBjTx~r!)e{)$l^cR;Ae}NzRYpy9Uv>42U(feu9B8q~ zVC9wZmAeLgE!W^8T%u`vHV*199Q#x`J&rIo2G)J$h6o=%e{go97<*!Cfc(nlebtZO zJaCeg;i4YdKD;APQ%E^s&;}WWz$JwEC=_oPG|PJ49KXLS z#hxk@nbE2$B(qGG)Ei~4_2oMjygJ^H;W5MjfUg>ws%w)ver40plMy(A@JTxKPgA;4 zA`r1O04(l_Wm4c+Q+G_*^=v$04wd^p{_gSe_~^mjsLscOmEnWMAm6X<_PoI$*jYi} zOG3hW$?qG_3l$U?_;;5pVBFQ_Ljou2H6Y--b5r>tlSJ0h(^X`kq>%ZC#L}Ns5RuZ` zKVmebgT)gyJPmJZB&>cmoA}uF(ISDrmW3gSa`+Jr_#+n2zkg?!Cy0dtE6E!s%Z5z; z!ubv3*O@?yqMOK96nqZg>u~*XCbwanO9K#o3}!v+quIv-p$W^};ezQ(AJyMZRWj zigYZT7qa^t7!&}2oDsKBM^lpp2;L27Bx_E6pA01S4oo29LXi5hjWSe6Kl_>}U;Fcy zIo}B{Ah-Zl9@&IS9b%JdgXfixAf# z#8$IrsWd<}2AcdMH!j0vjhw8APA;2IKSqfFp@KC?UlHflb%4A)&0Bd(CwyXUN6km< zvK4F8^R~KZCtMn zp+Ln<3iOoRbK6A7$YKb=$^bIN7D{eu5R4I#LDdfEE=Tj7BS?xbI{DulNPkN_pV>eJ zB6KFH{0H?Fxu-%{$SDza6vy;BXuj&ObPlNDSoen)4g_x0LYV&#^f4Je$LXKo>}ax;@d}LWE;PNl(AO zzi#2eZru!&P}W-veSxyd7%x!aQ=tB%eHCGO!$Le(UG<@=e0JIoU&C{tXbiMdc3i;$ zr2}kAxy+T=ioI*f=PV(NV)q5g5H&IG!1;7+8B)7*qfr`DltG8C^IdhrC)bmYs4~6@ z)TqPqVyEB|SS}@`8*V`zfhzx-X^)r>5Bzc}u0nZ_;DB#%4n~>!MaGJ? z5-ekHXl97Y4rW)Ui8zH0jIE93faTp#ZW{zBn}HRIBvCsTsr@}?}}^fwdIi+OIM9) zK?i^!4=R{*i39c0@#P;`tef5esvTat4l6^{IPKswdyQ@e{0WI&Lix4zJ{m16YZ2L+ z5qTsFW^C6~Ws(9v)Wo(WQZ1632)G*R?GCecG)Y=BwuZ*KE#KeeeXb^p9NH5tA_^1< zbgdcm^c=Wq1yc#S^;_}joyfU}Lj5a0v~B|D31ZSFAiBS*?VhcGTnqU8`+2T^BjGOl znDNeU7tqW@(^e{$TU=VNRWr;Unvw83FbVZMgFXbpfe!BX6Vleu*l#k7*pQj=IEEiO zZJrFHWadY4oAQSSPyv+cGPHBWL+kHkxADiu6-r`b#rhFvd7>`jIrsc+SJhT#j0y#( zKT!%01f<-LQTsuBUG!YUbtYyW32gi(zR&V7pwS|E1$>deJDi1^06YvR$gpb9Jy%dP zqlDM~<|~Ej-YltP%ZaaFCHB8aG3Xu>GWleKnS6Kpxw3pLObPgd8>O+qv-FjjC%{(X z^)i3Lv|>+|yA_*J!v;2+@bwn1uzMb`xJAW}qPqDyJqSPr5=YvCl||mN@$vCq|C8-n zwsKZY$viBL8qVT3E(8+e_s;TKjkOpY2M1^Zg`2Dv@#Je}v3xzS78-H7QX=X_}bhac=V`Hj6f-qvR3U`@&rEoJV zHS0Jl#A>YfhF^2BAgB#pDV{!1iGzB(Pm$b<(}2#NLm&~XMplskEiO=y)Iqx@dSJO` zqrQMjok8z(cXb4otUIu}YIb@U?SE_;%JD`C5`eYM5Pz9$Vn9PU@z!t5RY%yDj$$`e zWSch5Iq!PBlPBf-^LuInqOyH6pF`1=Zsj7tx&JJbh^fqL#qtetpB$J4k!HqL8>;SMBJ5-NdP>5cw@DMB-}b+T*YDMBEUSJ< zOG`_>Y4%wO1PN#i$Ds-ZLy)R0b5_9OBlZUBT%DhJZPel4NFoiw=mVh`TE44FbeM*{ zNpCOI&ow81qam7)wu58hj40}i}5_U(;w!1f$cqgy_ncx=#2diS_x&{v2G}41Dpyog{ zW>q(r{PK0%jo511sjNH3D1KrE&b|VLi+3MdR>b7q;6UGsL>A$wDKdWE1f3?w5A7z3_#RiP(kk{OWI&hm6rY$RxBs>87X!Z6 z%y|C+^^MiQ!`TP+no=V)_Ny|E5CisGNQH~sqXrKB9AUvw798HQs~uG$cQ+* zpY`@#Jpi4v>2Z*r{>F^oZ=dx zl)Z=&I2*;v27--xr(ClJM2$MkvhZjfC|vLAjR!}zK;Gj(4O?BzrVsRyf9mahbkOUc z>25V|->=n^d6W=xOZz@4xX(tcu<^64Shn+pKgtiI%79LTr`UZEM%?)4yF~ zB^Qv!i>e$~lWF~ITeIxU3f9I+(3YnOa*O4$RxDrAN7p-L2Ij1tWQ{Z(r5ua4;69ty zd*!8L&LMMnSczOZ4Q?a@aZrA-@Dvwfi#*R+MvtHVir&bjNER>Z(Wlg?At0qL!I}4i zuW=Dh99rtJeAHckE_?ypXHyyT#h^Qht2#;n8{5!z)8#u|4s@mZVnHnN$I>^{@uKv? zZqXG`fmADjj5C)N^TA!}+Ix-0SFA?YOBNqll{U&Hu?5^ouvG1lC(iDVn0aVf@!F%k z_P3a10SvomwH?R%`AhavNAIA82pl#dYeGHW%>Y z5EuLQY6!jnjHM*W-ii4vB0BLSM&OJqx$v3yPc@jMt`07m?7)iXkbt^mb0 z!wm-E_;}MHtdTjwzMnNSE%pZ%owC55rg&1FVF`N*tGK zXV`elC=qaA45?&hau9px@IxExQ7S8ZI?gQOf*7GUtY_obFCBo$hUKoIZPSJ{BG{aV1I*e#iDh$V&Dgd_eCjFAI*Er={yTql+2a$Z7(MV*`PVQ1bEo#3e*EOU7=?* zTn<;0MP8a&VY`oU&Eg07uLyGmD5TwibA&_G>1xeX%ET;R3TTeoBeT1Dt6kamxk9l|CRu*GJOHFO z4DWC25`o3{ct&mLK{jYphwjg|b+9BaKAa&^s}Gy8^Iu9G&eA6}V(azoC{dt6&Dfyp z`FcLv`i>`$<>H`bP@5qXce~+@e&@Naqfq`SWmi5Y%G}*BHEKxVmVnz102>5bnm}d) z(Pw&v$UI6Q+b1@C9OTE{(gXmbXh>g|(x>{a3 z7NEfNt^=sEk1-d8{lV$e2diNUbi+ILg?9^=72m!G*m3t6;k%bWshPP*Qbtf>kB4oO zsr;o4`u1ApFd}M5n>M%xSG#eWeY8piq%*@3!8t&4M4mu!?CS*zXwH23iWmo7!LGy9 zZ9DAM+ohTK|5y?A(gxjs-LInFzVIm(88L9js49;XoKsSah)|P7GHfyRxXCxVX3bon zd@iDa7xgs#L9$3mDJ=OBL%BBYERug}&8hQBm;znvu$b+&J#)(nh6&+MbXe5tPOGB4 zMhXj3688j8g^2_Br} zbc|o0$p4iiT?Ecf`Hug~FnfSPfpSf>U1=$d=_!3V^?xU{el<*Cb-Z5QuJyC6{8pUj z|HLHToxmmB_CkDuwGe)JN3}3lrM?PyDlrYuP%b zTE@|pKHiN3Uh6sp0*ZvX3OR1(a-q60W~HSF*&3}ke+ndWnA%Zkjx zFHcO)u1$CwHUU(tuZkHE!SD5raD5VVg*58!`*R)z_4IL3L$x#y8-M(FU8X~^(W34( zyP4VF)mxox>ET@hY)-_Tv0w(c%+;%xlgy*ooXAVR916Nl4$a}SU>P9BzpLkJ5q3NB z8}RJ^$BvzfUfQ4+)b5%Gelc)>=7{B&0jF7LQC7KfE;U4rcg=FnEDAt>TJVhoWxS{) z;s`57qLNYsA@2)40&Lm`aRRP|37mJy-Yr*a(gga;y2<4TT3wHzB`PVU&HOue==neo zTn{B}IGebFGLI;?JL0}Mf^5)VmxQ;Tfb0vOejxtLgT?8)VNCzQ&2WI5w=0W-FLM-+aM44MN(ZHdHf@m~y3{M-09&rmGpPZV=E zRTMw~H-aeesDT6T?Exnoj5+W>tO*Cu;b~oRoFVQqGPW^B+HbtwKdh`D9Og&4(};Qy*jQx6#W zZ7xU2#9kmXx2%vc5A7ZXE`;e?_;}mUgi=TDy41hye-P?pLcvEp9bMw=NB z=9U#|TI@!+oCh^tl$PV$h7MQgy#G{W<)(V`INEWdek8(UUB~O;dbz2M0MMd2M6^V0 zZdqZA_O6QoHX1G%QD4!8A?5Ko>f%Fm4(<@QTHU^-eCw1(=X0ZY_tsUbu@=w$WkBCP z(G|Sx3{qGfeShD90w0&4P~bqT#h~uQUIwY`gNiJC+hbua@vAvk872B3P{2_I zYVJLR=D0aoTzemcM^^w;)^OTzY38;3!!culZp(!-ZuR((MIKo-1m`6)l?E}!)Vpo! z{f>Z_UDI~RowGsfU6&Wp1e7$--0AQ&fU+=5QKFfL6|CM?7CC=J#iI#CC?er1MDB?tktMN@j3BX@hyb@teC>ump&K%@^i2I zH}Q$=IT}CP8ihxtPU3WlD;9n*cIo#6?HaoXU>n(c!A~|yN)guQJh`!Ght-%@F=|Hs z1r@tXxjVpBSN(+=1bM37N0#aqGEnAG0^9D)ggnRwEq`53hB*t5u3)~L_Es)Vy=7T3 zMeoW}@c!7$&_w_neJ>D|l)_v&3-rvfVnfiSd$U-YytjX^HW#B*4|(mhisQX+Fa^t@~sMWXK=erglQVtZgU#w;XX13*4n zX}6hF>i$LekG(Iwen0tY8v6PS=l4>3eLlZ=*)a#S6-I_2yBvw{*As4UT+c;+z)vLI z%hn{tx*4Ct7oPcprG6(D&4gJ^7Zw#z2^0n*5)zc<5wY7>8DKA7OX&kYwPrH|Z(6jRP$K$@OtCL8ia>xvu z?u8p`*wA!Qy=!O10Y>EsMw4j@Cgf3+qN`T835yNdqYx(gTH1_4q#6+LUpkDO2&+bF&YfS?cs+> zJs9Bhybk<7HeTSAsY^COuNB}QudSC8-;FfYq*1x;2lyP7z0*u(M2+K{$_Su<**MX~9>_ChqY~zrfjr~my9}2Pz@eW; zFjU*r;9jWd(Q25(zToRGJRbo>K0Gg5{MxZ`^5Mzj4k{pE z(xH!zOk$p{*5tW2HQ?kaW^}bJ|z)be&P$V^e7ARNC*32haST)NyQ?*Wu1GPtwfmIshUXc7}U>=XEyd zkKK=k^XAqzYWJ42{7!F;+>C$W=F>?8dl7W3Xg3MD}*K! z@_uZg4e>r&r}wEzJ^PF5Hsqa$=-my*oF0i7L@M#(PuFeHREPHJ-dcBr722s{-55h|Knir+~P=zwKGh z!@dy<&#SRZK0nPk$0**9%TXv8au#x9;Rg=P{3xWg3yJ~Yrr0~zLmm>c?KDNJvE}u# zhxqRas|huq*aIrMCfEAb6K)0bqYG0jSWY#zBLsBl(Bqc z9V1EYXrlP!otMFh3CHGY!+{a-^G5a6Ipa>(J8?RG16Ro#X-FPi;|&QTA#;$3n5ZNN z#51vSCuA8g4gpzN?;aKYHGKasz_)%Gsb!w)IxzHQS-FrfzC#DihYMI?W?>BpE6glO z-$Pw%fB*eZ|EpG*;$LIMBD`bzOj3Tv7*Uat9}_R;60!tBz>f)JQ#vA8SY_pmqFJj@ zU_iuGhc6y@0YdKX>$9o|Z&YORrJQnXCl$&NGq>pNZVOltuIdmD;`9ICiH#rP1Tpz+ zeiYlNWy}3p-Rryl^XJbzsb9-TjH2rIY8sku>b#LF)+K`YzzHfDn>4XgK8kb#th4d8eP;+fhNG{L}L8CmMV8Mo28nYm{Q_ zxE^RCXd=kS_w%i~vnZ&ngKP6}*G{>-;n#S>&}na$)alQv1{9tSlRlo8qk>*U_bYPn zV*;ahBxE$KV_uZi4jhdVZ4&Q?tVu9fvkM8~EbswM9Zl}N>0}?C^xZRoqqC0ZxJa2K ztyX3)KzqB}R7yqeKf~)WS55o}7A9&kPf~8w?PWHJ-Y(>B8f;Z1VJlT74r2<%>oK>p z`v)%Sa^lyCVN}uCZS^O+#j6}J;n@6WUOWjQHr`JQTErmXAU@rHd_545f8PtmI!PU` zaKY!z;cC9d_)FC^hCFveRUnNt_WAsBR$(@)_vR`S@%EVaruDLJt8D;~M?;G!_KPZqY5&Q`1W zzTh4JZcO>OzFhz~-|NX+@9}D-nx#IRG@?dU6M)hkIw__ znY$p{@+6@`I6dvf`hwJ=NIH2lqp;vzwTRkQR^`2(6W55rb$gsN_h<&qLwNoY&&+;N;rAj zHBqbF0sI|&(Xl$RT;=Bozh28gFj z%*rL6CaDZoB_+F}XmN0^Iz>D1Q=zQ_|8E;`4s^$b=&xs_T)$NKM$`3WUSZypdxCf0 zaS^s?(bcUU!VBKHgh1T%G(m8F73GVvUa?eZ{+;^+vMrxJjv@mmkS&qPX=E z_gO^?5F#ZBXfxAd2Tg-{0h437!oX@u`(mDS&O+tPb{TV*CqG={ z_NO)fP#ja%Y$}Ed+SB8unPE7bA1N6Dutt#j%y8#J!gyy(g=0EN3+MFKAiu9(+%EBd zu6~2O&u`fFJ?FSVYeJ+^-lv=kw|4to@5I3(&aBo&wk2`PfWGY^fnM1=&#=EZzr^@L zXk+W{8bq8a z{KZRTBdzAn%Wd{e5BfTS6-tl{@%ZZO1nn+}tN5LPoDJasp z;pn18;~nn5xZEOf)#-J5<8e{Ab#CZF?Do}MvlnXHBIFByt_+RQhk5w>akmuOXWSKe zIGP`wnHC!!wSNXLEs(91TlT)pSE8>y7A!yzUp=!Oj`fc_oF8a2r{uO0cKUv6+Wo_J z(kc2n`Rmj%g`W;yLCWjhU|z!|IO+rcqW-pAttd&2XiOwA<$Hut1^6#klkb^(5t>}; z-N^P(`J=G%hXVExPfSj(+(>C{O(`(S`;>6ug$PbXLeEr$T(+g4xgZ|sPeeZxDJd?26ROIAw&vLu~~zj4iX*}zrV9Mgu)E8Tp$$&7UnO#ETu}( zNMlc&MoQ*N@Fb)$Ongmg1yV5LTl&7viZ@ZEMAjy?8B&lRzeRR3`2cgUD zTu^Fivg+qEic9JUXZhki*|0m%e3oUo)c|}0^+Y`64~FvumIUWa`sBt&e(OSE23$iC zfH^8h$-D>Qr+=g_TZ7zoy@~~J=STQIIV{f{#OP#@(MIy8oygd4Md6_`=6<}Nz}vE| zmhTC>H)ye;>BNLp3VGkfn|11#pTqDu3t|6N^v;em5^Ix@5S&fgi^+A-hd9u-eQLR2 zwP40g^A~eA8D9u>B8|-bhQ&F%H{1FJvKanUKO~q@(&z1$7x1p!$0x(^czS|V9F7E^ z;mD=XFfjrXhm58(eoQlVIT8Lr-c{n@uYIPq9%Pn!ptMR2)omIpfVJ#`gl8c7PjM%4 z;9_rD;jagQ)_D1lWsq;_u_4eBITvSlAl`pZVT9{}Ar72KxF{ zc(0;8OwM~{VAb@10;fm+omp;EkH;XF4c(NXyrE0Y0w~t9{HHZl8fnJ4o!Cu@{m*RZ zQCJ(Ke>kVjffpZ0h*6T3DcE}X9RUGDc@V7pUcpvtR%#%dQC@EHk_(pA&oyxd!v7EX z(KSe)->_FAvJT~rCjvw;)h9Uh|M4#l3ktk)(^LrwCz!p=tXQd$W?WQ`Bii#{5Pcpr zcJlpObLf!`{e&oAosBgX`gxxI3jwoc=k70V-Z0i9z;670=xel(}O4s-B0;3CFe{_iPTkaez*o);OCL+-N6 ztqD;F?KmVhsNqaMOF~lq>0K&n_@HV*5WRhshU!Jk4%Wyoq~hGO)&EW>X=dW2?y>`- zvP!b;qt7ZDExx7!obgRCF)r@;-_2!b+EBu0Uu&BxTK3kIsDt(!1su7-|2Mg8)>J>m zytigPITLYIYN)CXEn(@6Nd7%+ z)06b%=f+8>X2a3?n$vO3ZrbY~_tvGi(>~!cyuARLkUg{BOo{S$-mg%Yff+#|Y?Snj z!#EH~&qYYcawYdW*#p$dccCt`j9s<67X0hd&1V^+z)p!_ozH=`dZO?m4kP6GnZG07{jJx?V6j*4Z$i%u$ZuOL77QDa*#5RNmQMNn& z6L6*SkT+xK_o?4n8JcI@44kpC$*X3xF1w&HENZH<>%p>8MNH)v(+*TPmMf~};Wy>* zthvES_AGdTABlsv0w$5+vN3S{HmQ?YDU}*sx+D_E=N&`XGhGvtwNA!Z1;|{|e~!Xv z8|`DW8D(X1z%RYUOI3y9fzFZdM>gzVjItHTRdmZLe1w#j7vT5YT^R~6I4r`pVhmSp zBo>*Z&_QSg#_eHyceja6iF}8tEkwWNBZfQI33rY zDb~q*_`c|_FeZ47+%3P{4F+?;EySaMg?=h#S7IWlxd7;!ui^2qsg#qGlMc~Vd4)jS z<5gVG)NtKu%a2u~F&7;QuJ}tU_c7a8Gh|qOoT!9n9mb6vcXo^A*6E=dAByv*8vn?+ zK%GUTwxdfz)>&g6Y=@ic;pNu~k&DUPniVJv=W};4Yy|(Ht#<(YIAkEWoe2cF8WF%K zrWy->s`Vi$2L}74F1$33equ2<$1P>V&djT6ns%6fp1(Vq55XI5>XBbMVEmDsqqy1) z2J@@Jc{AwmN1_MDzQ9D}ZVnDyvs)_qd^d{tTM21D`<6J(Z4~aqDcBZk=zQ(qvsB88 zAH#5XsxJ=JcCh)-{eUhGX1qXYA{&C7h1)$;sRSa|+uKuzT8!`fV~ToMsW2SOSihs%F`N(f93G-txkzav4B zq@9*kv`@uC&A8a}>8m)C#ot|=<1@OOD~CpTx#&7|-$Fcbl;ne6@MD7B;aB#M0H`eZ z25RDMYSgNZm%yUpHsi+n`hcz??K@%lDBN*uI6(*CoigR(57b$b^VTkc4}YOBoboPM zl;QvO`FDv0LJfk=RztgZj~2Sq+)|M`ru9Dg0`v7JDajEj*l|B?XmaWe$=(u@oJk=n z6g=gI=??j7Y7I80Fl=qR=L!-I64B-l#se#`WmlQ=7B@dri-#Dsz8*HvL?wDi&?rja z+Ec~7Uyhe83&xM-4%|HK9TVmIv~G=!yEqhpxa$?j>IObO(T@7`!S?BcB2cp= zWm5^i<9%(x=1pPiVJ(k0g=C$%g<EMmu zbTHcz1bqF%Tc8`-J1n47e?j_ABswOH(M_m_&H5gPw>*w!5xfS&h~Sw}#W?OoKSAPEU1y zgeQ;jsR(>e1B*NPvn0kG0IiV%0Y& zee6xY-Pf9H$x>?P-u|pz+CgEoYZq~5mGHY+oe%|c6?vsSt+16wny4pn5@nSyw+O_Q z{Lf?wXWb@TUUA>s;K|`IoMN8~yNnw5R=EIv`YVA4KSJ@qAK0@u`UMhiFGiO8HbJ}P;mN-3UlFhvF3hNrqUq=t}C2NRKYd5XoF9qQbU!`Z5SsZY+>Us3B7=N3?)|E z*OO08POdY@9ITDMOc%+8;P;x?{t9$wX|pm44A8sWZy(sj+4DyHL9CH4#5yibmopC= zE*b=KWT}CKWjVRyfN7IN;7UJXzo*xI3D%&M;+Rn`8RwwB3;wR812;+$sOrEe5cTg0 zL<&MAbhUh#DeP7fAG7N9T#EBe^9 zQn?gcD>(C|z7QhSRVNen(|xtfTaClic)sS}-(x#?VXZH%4Fn~wh)!Cq@%Gl&ss1#v zTQwBK9kN^^=tvX^^*fasI36H#A%dYOI&PvTHLoXX(>jH7M|=rl#gNSM{)QQjbsE zJzpBRtfP2-Kd6xdbh;&V(yHlyh&kQSJbl6=UA^CMRMVhim%riPX)>eKWAUT9*H>e0 zQ|feEim82ZrP_A!YmwZbUeJUzd?>GNzUUA)viXJDbj{SSqR*uMKdt>MsbogWca5eF zhleQ^mm9V-Hr|r>ALjXsO3A&T0A;r7%dnq*BL&9U;iV1-Hu2{_vqJd0=LX|u0S0ms zy=O3kC%QSPd}0FY5iKbvtd{}djj6KEdY{?puG#8}*{>D-PLmmr9xuuqnU(hOtwKGQ zK3@5FX~|Ty29&P8c%L{FJ6{soOt9NIb-W<#sa`o3K^ukxIYOwA$dQ+z-xBJOwW zVfLw6?T&9^!^X~m;RAZN4#Jb|CdfH_q8+*EooL>#0D4w0yo+9TBbGfI`58kV1C3W3 z|K(vguD$AjXn`RXV@r}C{e^VCI@f=Buru`lzvqo1@AGD@a1*00SHB~2^=XaU*c;O! zJ>PWWOL*k)dgieY^>bmr5I9t;=Z|4>jr}{ zASICkL}xUtP!MgPUKR$P&V0JqE`XXeH`>3Ia@$AQ+DP0b2oH>4%jS~uN_+aITFms} zqETKhmDP$R@F6gkmD!wu*(E!tv5~eWk>vd9vOL}1gYNW;FY{lhu_)w|BRUoxZJLWqOM<@K&C@6Xvp>R2w=d^?D{_y_e2Oq+&QQF*!z)SuIy` z|Nga8mt^e_3!9?-TyW7$>furcJtb~>HUUfaM!#A;5AR{Vyusw$P=S8X)#tV{c%bJ* zlwKPR6=)cZ@+Bu(&8(Ee_d_jjLUA*A=~)0IjrttVrTNl|yl1E|B`qy&_Tc&g@u60!Lfl%nfF%{=0BgAbm~Y+Pbi6zI0q!siE54G1!_wa5j)TfF{gMlXz;Y`6$+!BZ2p@LHU>k(cgY2>+~Y@$dB`@?b$i#=)VP*W285fm zfk6;%#p&)eA;IytT@m-wf@2Ib)!S1J-xFU6KeOLea1-k>Ov*~)%W%$aDD=St2j8HE zinoBq5U@k;nhuJ~>bp5PuA+%0kdhh!n-sWVy(Q5BlM+;3#8g(Wd8h3Pa73p3>cElB zV`?z-t;_fh+Q{KvBVVHlQND+5zwxEf5rjy13zrIs+-!|YFAGM15mt!LBBfWc=F~;J zM4Z^W{5;ArBZ>UcZ$~sI#P{vZ4eXe0jdoA>-c4Y}44Rp#!_%1U#oxH09LhNW-QxmD zs|ee3(|#3on4weiO~?Cd7Q8tHKCwVMdZgIQNtE}F^ZuN=1>c=IU49An5gArQ=bUw{ zL&3XPQZTc*JoF}N@DLu7sT-nqfUa?asRZOl^ISTc*&e74ZX%GFr|u%X=#~D%)9)>U zanTVZV?hKprw3J4RUIY_J@A#?);%bgB&Sa~GE`oIG4vyg#PeVug;2sM|8 zD)Kqi^$N6`2*Zao5-u4$&>}g}ls^?>!?)HJ5%s0j3J)pC=uY5*d-oMlaFLD^CSq8$ z4gEUVpjX_7Uf;ogZMW$$B?z)93&k)9F86DCa&o|ZSJ7zE-<7_QqHoUzv8i)daGSJK zB~(z`w9c#Ia&QhLpivmSlde)+FbJ(ixvU!HsWPl;9Sbp4XQX&O!J+h;{j9k_QBSIFr~Af%|ik=pXE1M z?0$#|h09abH#HYC;{}EgEfL2t>Uy5oRz&}&`kQNHFD$|i4`s~^x;nL_6r3vK8SBm{C zpi{`9)J0DVhH3#YbBrwWcNM)SvE%6$g?Y=5R?%q0?~Hl_L|qjwVWw|$W9OTSo<{rr z{BGF&AsLHmjbxxjN6I+EADNXJss&xY83B|z+s};R)V6*yPOYFsOBw0A3%WO-|C94} z`F-{v;6w91N*k{D(h=SwVmt)L`%L7g95rA2e%l1xAoK`wBGu3#W5ne6t=ZXVso{%) z4hmWccT#160mH#n_r0ptD}zhTB^)xSd2{iA{)*r;Ti3SM=1$xrc6l4#6f}W=QB4Km zfsY{`2S0MhI3!B9bl#|PEZhHi%D|7rgJvsQ@g#!u1J=w%ZL5YK79=LWejPHD`=tAo zhXl-=4If1ueQjBr`Z5fsn6g}%1rteO_cK=mJs|T#F=>|{I!)F(b7SO~#WhAM^UF{UFj9-1_t@E z4@Y6&ZI{nwtt(0odAP6;d2nvde7eYIJ6A1_z^uBhqLtNC|8^TonNSa-C&L4n2U>GJ zsV__BD#rEwzSeM41w#cvht#@Gy#*#cb21E08A(4L{0*p2G@0MB|MJ&UZyw<2c?dHg z(1|YWB`>!&3|*Bm=LUWFXp{~e-5ZAI6aL0rQBDY>#)`vOxEl%oS_{a^RMbayWY7ID zm0O7*(3BWV)i)6*?dz0r*ZJ;mjslwkYMfrkd9~R1;8mi2v8mfK$^8o;h?eV{D!7;5 z5Ou_Qm4<5f$G;6^DK22xZ7^W2J)UcESR-1&$YYgKsUxFGY%Sdng+48smX}tX6c{TzNL|6uT z>7K09PcA_Qt5r05_-_~qlq8y%nzD0@Hht^)RwI%rNZk8p7b%of;SCAICL>_7XK5=k z2?9s62H9uaExr63e5q6P*-LbP+1>`J@~`bYRI8-D@5G{O&sEG;MV+|=3201*8eG43 z(`F$Q5eBzuH z&XRq*N+a!R^52Zc?*%tqFqd@SztCH%E7ObT+Cj~17aS9xA^-^ppuhsIwyj2o>zk|1 zju}ZZztJqr1u@;(_t7h)DlsxM=YvU!cR2p)HZQ!4PxJ!H+*RXvxIJovjIGj$gi!t# zeZJ>_Jc$|q6(DLrD26bVG1z9@rE1WWr|(q8x>vMISSID}Z4=Kq6y~+GY`|}nI)R&Z zNbA(M^-2sfnK3iH!{@%~i0QuDjnMJ~GX7p&G_5~V;w4qRfs;0bn(z1K-2C%kX1u_c z#7o`+65KzJ=k@)kYD0%$rgdIJrDpd8iFTx!zmJc`7t#2vq6hhY^Cm?^HYSR0UwWjX zMg}Q;8#W@wKQ;x|k$&)$^p7FPlWn{cc#CUdJE#z~Log-k@GSB-D!IT-b_|PC#&2V) zs;V@?45^wA_5$>V*qMlcoH}aRdtlfuHVLT9(EhEl_*`Jvfzryay{VB|Gp;_8$X8Wx zFV!VuHoD>DLg3#5e7l$_%8w_=Sf(9bq$DG_Z5eBm=Bm(UQaFG_!9`L>3l zN8(R;FmlY-cfJNw{aBM%A$lSUy_valU4DD!Lw@YFreV0N9sjO#Pw-Xj4T13U0M0S^ z2NT{gMgHysR<4?;xB98?Oei)4+(%+5So&@R-pC>=bsKvv%fIUk%uWF?L@O1#fA>}5 z`EN%@ci9E^TABO{M-XGwEK%$v_(bU%(2L(zCI=}$VpJ`R@Fb8rbzWl@jS-|eOem!| zQY_Km*_hpsk}wsAspZ|?71K|_rP93bs_V}^mM2P=VfJa}D1F*76lsdyur{mdzrE`$ zB&vb?pAZGef$!E^c;Hv5{h?+DY{s+QkRBOM7)K07FlWQRA$CUP?p0C8p)fbdELUbZ z_*<~)J`{cyk{rtD9RO(Joyw_q)2#l!;8B|C!+Cw07# zt)ksRAFRxZGQGqm4*`7mzIeI!T4!6M9m@GKjAGz*l9Q?`Kj%knub9<_w+RqX9XZi< zv)GAN0t(||oSYvmlAv@B>vjo=gWU!A{H$LQjvZze&29}$lzm%0kv3)SDbOSVYj9>K!nYV7l;DyNFX>bRUSEvlpGxebC>~1&d>~y_P&I8 z{FrO+?pEL1C<}Ffx$hI`Fu6l#DY1rPzy(xL@SiC#thS3Y>7Kr2iC-kAzGgHEm7Z#& z?8pKxAw}@>?+6O3SEX*N@O>_E8)HrSq=b~bVZnm?57kQuk&_j|^s9;P`?@*_(5tVm zX(w+>Oui@hSb-koD0F*&X9OALIq=`sVG{brdK)XtLW-r?Bjnzcf5Q>Sh~D?NRdBD$ zDRiG{K0_$;bQDmzzP?4a{=Q_dmFU@EM{CNVjeMLB;KE2WpgQhv9MSh&R?Q5QkjqX6 zb}QrP;XKr3JF#n%toVXyL0tk#l!?p_GhX}Le7Ir>`~U=-wO$B3I`Ve===G{H4jC?s z*b**Ni;rrW{dHOGOK`)zwpd~t|Ie=yE*j-I>^?9f@CPFR)ws)UT% z6gh2qwyar4N)>$B^aV1Jl>|Q&+%%HCRuox7#bcD`z=7OR^PRwt(!rL~n8}HF`Swba z#Cp9S4wn=L{?rTO8x>PtZ8@7c3NOCkCk__AiU74 z$KTz3l~Kh^FK?T5b*PPl>wy^ z$>V6?mB3lBX@j4{bb)Q9hS-vbny)xf3;cxhpQ#)I=loV0mHz-0ImjlNJ?N}>K!mjo1s6Z-VnYGwAaO*#m;HKhlA z+g0&bt!VJrl3{vLV)1z*zBxp();c|&1sIkUe4ey5-IxIuhiXyEBL6M?cmsZx)PD-M zV)|CXeSzP>vAg759_RJlyza$B4g!!o@sdN>Br?jAx6}<0Zg+dPAIz2tC=GBM^fIps zo-xFGpQ{ahqu^<+_P1sU7ST*95vaKp=y1SwbV%omXm`hU>i<~M6Itj~4jg7)Z02;E z#ro^L<`1`vP3vHqpYIVtr^y31bFGuh$!_S1M3D|zW8xFq>u>2W?K#h02dtuwyzj$H zM8Wo4d%P*{+r@YxA)&hAb&tBH8zj+;61Z*EKta8Qk5&a_tE^XYSk%g%;ena^L<2YZ zb7!A_(fxQ^zrAO#>t%ylS1444=sRb29{u5G*S%$i^taZ&Ud+SN^5XXc^P?FHp)`OX z(>2V4HRI8#{nKo3>4h-DIvez2daEK3rE`J*kG;1JimPk(Mqx5}GWY-q5P}RIAUMHg zg1ZNIAKcx8gy8OwgbW&j6C_9=xHC8e2pTN7+pU2-@}6_*J9Tc|TVK_w_aB(qYxi2c zyLlA1ns5w|PEis7~_r4<-J+E+D3PE8ac&d87BFNrNsy4q=eXRitj? zn=yVeJ7Gm#H)IKH9f*8oZ}W8=R%16fDyfr=Ooc+<^8U4*pU!xe2e9s-VrL3V)qfDV zfW!M#>RzA^;Ji%3{{4mDq-)Y2jL-GNtDd8(l7Ggd5=5G_9mw*1bSMGUPr~l1XhJDA z7pW+Y_M(f=#i8H2&;j+5cWv=OGjV+^+&L2!c$Ppg_e*9Pi^_CsjdN(OrEhg(1 zz+Q!3s!E{+#-Ro4gjWBY;w$;4*D~6Pr`C8NNHbVN)3~U9 zp2%xTVFro=jEY#TcgkF+-+Pn9nEthre9Ht_dbXKQFC7n?9xGtFm!+wV#q)e;@7FK8 zU3*&vPSg~;*8%EA#)B`W7@xUI%Ub`cm-FS6lnF(8CINg<#IE%fcrc`jVJ3syJ{G29 z6q>YoSl&I3FO3uU4m9-T!>YNLr%W4b->9T$s_A{y+hU}Rl#e&`q=_W=R=U)4MyJ_{ zUBc&XDI7t;zCWJN+h;PAjwY5M)E7tuzWqJ@@PVB4;`S-^2EoG9K{%IGZ{(3H3C``1 zs`Y1hqR3_ai^Eat0)|qxiZt#|AgQ-7-M#Z8YYjMqcIqxg_BZX}Vwbc! ziFevkVk{V%?Vn^XR0>}KTg%ech;XTN^2Hy90OWk1-M+GeG*!s6RDtPaO{3?SLS$2G zeqSv(xhCEDEMB}d0eE?S$k$Jg8h0e+ei>DQ;QBEgm-^QV4Y?-grphg;AZyyQppX2{ zOiatZ$LGWiRoF^G<_FZL*Q?$5Hy&kgl<6a|UC#1ZkJxe^-R@jfi9iY-UCqk`mh?PM zmV1%6z4|!$k1=AqT(ryY-*_B>fONi3)v1$Jl-195^5L94A!+BD(M-I^D6&8i(w8_i zQ+1vqboJ&%UY34j9tOB+$7E?bFG}i%En4tSS?Kuy_XCJ^(XtX>YG`5115_tIq#M^j z1|4LV(PzE{5ix1C#+p8>W5pV@b#Z7wZMwJX(dmbiUQB(xgX6GODMAj@jU{AVIV37e zLI=H%f)BbA==zgpKeVKiJ2^X>#E*5Q1(%SJ33_p|12?b(q0mx}(Si+JFq9TJ$!81r zFsqm+lx!k9fHcM;T+q&oP(4+>v9))f!z-~aJaf?m+1JCNnj=c~oL)tV(t4?lhCys} z_<2IBN|abgb_ao{MN-ZQoH(78QN#=xb9w7y%VqJ+6tc>r?}3MuqV@<)H4E&t62z)p zPdn>TIf;%Fa<4}zJwO6i<>_>`$MTP0)AVbZTrz5Z-wdvO;Pi`+a?eZglyZxvd^HlV zQUgj53{SEOW0C@$d6AZ+{#Qa(%WTqEXv@~ry4qqe`-fVMRCfszz{tG}m7BYp4PPgJ zMTuRm?XOAmmKe2P4spq;Pc5B?)!-w8W`W4iq9DC|WQ$g|JcW*0W2{@Acup$VVRR7v zNNhDM_1rQ#5fdrdL|U-Wiurw4`4L1_>_}Bu&kZu8Dkaw-fcesz0V5C!HL%>T+kC?@ zwEU@s-sN>+Oh`*S6B4uVfFA}pW6c{a%f*!v9m-f47AT--HOuR1P!F9Ch0WO*o_14{ zd?iBuc|zkB1CNk{ZPB*8@j=Zp|H*dG;xl1MX2I8@+gxhY7ruUUa_l3Sg_YhEE0sf$ zx(Rf$QbL`4Qj1!u2YEujkoANEP>@@dNI;1_PdRpL=eD1NAkZJvL~2xDyS=;YCIDcg z{S?*kJ?KS*KSGqbPNQeO4@*7Qe8_@K41;+Tpi2+*oy8(wi$o+-oWJXKsOV5m1|Z$k%3UAZD^j zv$J?_1-sd>kP2Z)4E8R2!3?e{b7#XD-j1V zl!e$37nqN8%?vo1Y*smA^^A5ppE zK?1La227$D<8ZrIR7=_7C3dztgb*PP_R(FXPy5RpNT|X3R%Jk~H+$_7gkGO|i3#Zw z@P3rlJh5kzEu&GS1B#fma^#RWm$_85^ z2}d?wqJ;dl1@4dvZ~CnF_}EN6vrc}N9ZQ~2wjBT+x#s}^gRm;*@=#4hAYE0`)WWi0 zP!1}(M|fX1K41-R=->hE{z^tb31VL>Nw#~m)5)eAxeEXlLiLTwEA;K_NW(X&Vzp3V zru}GmurXHblmf9pE}kPjw1zqHg>>@Gf*7(Q3uEAD3BpLTbp>coD93nCIl9Kh^U>Q% zHh8?2at0U)gOXc09>|8~;}6{-0@Gljb{jUyaJlLO}R*0E>@v1|(CXTpJ;CNC;`p2zKcW3O_B)hIZdvE&KW zvp)z4L_zL!mrlc9RGkv_Zt7LknxMVaar(CF4?Mr z{r%o?m`?a3`N7f7_a5CONDB%MFi*0ydR+R3R+Covd9ATy5?TVf@R66svge=<>hqMR z@=$xqLt`n~*NII^7H5^N>D;f_kA^eEpW*-^Lu`R%qXH2*r5UN=+?zf3i*g7B*uL%&nd#F(#sgX(6?1WU# zRUjve#_czOD3U+_=_+MJSUI(rvq zjb{J1mrv8w>xMJgrrs-En_>hy0S}q=2Osawkp@rk**>V^%V#|*$F}$cKm}n+K`@_a z1`Br{8a=`=)y6J%f^mLJk~5jsF>oo*o+X0tK** zH*_HF>JvjQZ1)-cxh$C}v24|tX_H4uS!zJjODzEzYM>7uXy;WG+S|d!GnPj>`E}K} z|DZ;uMZB-hT^n8&XzlOf=6uuck8mpCMeQFQ6QNB1SnRlS`IHU3D-H3{lD=0l!)KFK z^F%KMKkZ!e?)B{s3UE`GIaQHQM3{1N?MjYFj|ed6#41nz7KT@W*#e$U&dzOo@P@Ay zuG4ldt_r3bCZq$p_W@v{K&S`#*Hnu6aqXO_!J7leB!$NvHeWKH_NQISg9_kD5(z3C z-L`#llYISk-_y>2&O#p|f6g@oszmY;qp@56<46sf#`-tn6RWvgA&no(qOj3r|4is< zMbiD((XpnRRaA!?nZ2W(e3^CVw`RE8C2No1`(zScbU#g<(qeyB65_-3v|)=ss}iDg zn>lFkXvz}+WR@VJhl<^pRmqFrt%`sHpee{;pqlP5+f%e1!%_AdNRs8^B;xMv z-LNF4Kra)3!xXVdbFc&qieL}?!6RLxz&}u?fGy|yu`R6_iUJVCUC_y<8uz)mI(aU| z6Mt`wfb#8UnAdQ3TbPJP_b~+3_7uKihi%@vPT4XJE2%|QCD$o`xDt#4%mfbwd8j-l zW-4Q!6N*44N#^S^UnT}L$(u0PE4P|9Wduy?>F?SqO%vGPc&QNcMg0gHs(cWIk~NkNe?2`qWMXiIoocyqoscDZboQ8=FQ0 zmip&=Lk?26Z_>d>Ns>$6QHE3CwbV7Xk~|@kiAcFJNf=X6AuTZx;Wn;zH~M;@Q-)XN2OmngM#e~smGo0 z5@^FvDv6z**2%PuN@}dWWd#QWFy7@|7mL*TABAFB>99@prm%SW55Fm|XUP|OF#e(Q zSFu)QkWH3)Ld{t9pXsZ>Y|zgv01KfUCb4Ncb%3;;sY+r%M~BxkbHbxW^fXb!tN?w= zE}S&mCI#50a*e`_OrNw@o)8}!usr~|vpq!O*QjNfw7*1v)~gCZL??WVeFaPp?Ia$! zvtb&5k(NlKWNl)=DJihkNt0h;Inf!7^=MD`8u>G)XW`_|7OQZb#`Vh2=^gDvRvv_)pyB{q zui2kL?9C#|SVIc5&7_3jXu&$r+@KLcN`Fuv8t?>p_U01ICJ6$T^$82N?tXJlJNKaU zVa7rQol=1HX)bTJvtAVIYB+V$G}Fm)3|I!^#fT^ggno?w8ji)qga0Z7%N}C-4*Ca1 z{9dr-3TEJ*aiqpRA?rBTf;gAf>oXLJ*!E{6T`C?cB}PJ0POWCl?Tx;hV-3DV*S-z@ zixdhu&gYrG46ce5UY=~*efqp^7ME;St$4Oq^03ik{3C}?WXK8B+Ojf&hSi5T^|eu& z3+w;^(_=*^{4pX);ZqZe0>ln%QBvI%v6Iw^b#V>Wsu|st&)7ChZE2yet-LWm8iF2hM$0FTFrXCLpqM%sge=L zJWR+pyE?dKH+nEX$B$v^>L>R~KBC6XnAvx>{=VlWIH1J}uzg^;y)PgnUQN6(z`xHl z#9wan-uaX{Yi%&cesOpo5);s}tE~R1MxLEUI4c=g3_@QYV(AXjh zYLXb8*G*__kAqNv%fM42g={o30go0!!150!&AP^n@pudUuTP=Ai#k=-q%&q~J|;fd zn74%ONJ2J;npY@5HQ=;tZArAHa6wNJ*JD~sGwq9%a(3%+uw{wSsQ^64vYa^Y;3pNi>L5aAQV_M!NNRBSQ!!Q`OoP_>CgBg}4T#y0 z!3>hL?=vaz&-D#g=Ob}~EZNb?EwL6gr4bWCk*bqfISTwTjLz#z%IQgT_X87XhV;Lz z_yz(tam_yr+)rKtNQGbUNF6)BY7jYq8OW_kdOgcLUmX- z`Qzny@U3pS@ji3kKMmTmxxUo5<@#}cq!T#KzHy9}a$YjEr-`;(Notn7l8@+7BDDVo zk7;k2!Ulk)D2IfM5&L~%IOMb?gB4VP@8qmIJ10e#Kp@NsdB^Z++|+$=b}RS1Pg_!z zS?B_id;&>+)Hj6-0RL2Y`^d6H&bsc!Ns^X>h~X)UA>%mh)$A;1pj*Gg1!bJul!NRU z*Oi#ZZWz?C;2f>Xtj4m_pm(je#w3>=pnI+vnjQr~38V(J(UALy`{2!WSF~{}?CMD2 zKa+HD-ld9fq+*3%(pM?+*F=!5;4Hb2p$KQWeXCg=>7?RfR>T72Lk&F$1MDA`mLKgV zRQr4v!`fcd3$;I9Eg3Q1lC075zG`l)LsYq#4sOQgU<+rtb&XHmlsm33U1MsY0>H6g zqN32_X44b=S(noyf}W~e&Z}M5!tEqa{X-s^i*bR%9}y4EPOY%EjZ%KxPwpX|Dvn1< z5mFy9X8}Rq5(ZMZRl6g+n7a5<@Q8YSo9*wM3|BIu zy9iiP6^*y!dM=PZLj(nI0k+JMw4SHySo?5n$EI@Ixt)sK~{lX+o&{s#Y>CVZ=CA^kBEd%E_hC)^~f zwm*NCm%1g4xqs|CpI*~VxA@-ZJ@MJ;3C*UC?N9~(T%B`1-0czrk4IQ|$C$Y6K_Cvo z%V@{A;gqt(qizIYy1&#Jv*eM6h6-|_hJLBH0{+4)ZDIa8H|!WB8+WAFJ@lmiJjl3q zq$)3SzQOmxqWRL}rrG;sXTHhrYUyC-)L&Sz;fy7vzs_^}9K(IU&j0wq#Z6YTSMC!2 z7Ch5y%is5SQ8;IQU*7p}vUHjFLXm7>zPbLi`+C52&t2G-;uoC-%Q?a2*;I+71@{#% zj(+WM^7%m9&i0Nj%hl4!jEZnm?aw1%!w12OC((}}4ne?;rLm<-9VT*~J&%_$StcTj z-{U{VnCcjBHf3Jl%eGBl!#?w3fd>RGrM{&(5|SM!AEWDud-`AtZ%h5`zU{z#Z4x~K z9oS6(cKGYoXew%~xTAI~`80F!*LVFky!3mKalmb7)>8#|QE?wg0{F%#{RPkfY*+$G zi<OZ{jZN_{0~lUhOEE(U&Y*HrrNakN5d2Y z&87f=PRW1px_OoIk;U%kwz==)`i+9jS~M=c%3P-wvI(f<)?>2ek5hY>QA^W5`=Vhn zCb*#xlt3E5w_=aoEh41*Xj;DSd4)tFd+yENA)Mc6fh6lbd-B<-v#PTkBnl2_!9!h4 zqSg=83-ay8*gx++UkuHYtK<{o#aju`3;NE`{I>t>$!B&m?Lf#B0D%4H&EFk^KTuRO z)xM)gd;}>+i}4z!7$Vi;eBDtZ_qW(-!Zi$24Bbg6V6Q*2*je^)GKwTpDPvF4OqT3p zOlLMbGOFf10>v{y7QhgF>BWC4D4o6k4R}Q=@tzx+Tk&NO*P8uoPa^DokSPX;2l!ee z-s8R-np-Dsd}!Al%as3S`QK9hzhM}a$)9iccaiYV*WCH<%AR*v zfnIlkfj8H27sZ@)^is|5*nnc}sf7#b%&xq-MNN&cCyAbW>E18D++3%YU%558n`JRF zWmY*=-u-FM_~$sm##X(3iD0A z050&BJ#YB7mbzDJUzYL?5SaQpzhXZ6*n3WLnnBj1KJfH9D~jex_4S#L#Xb*b-NfWP zd{~*+Fh<9e^jH}!+WR=YvP%5;j9=(F3oC5br-{RpBz@L;YiC5${hB#0pBw zPqM%T6@I>MoP4P|IA1sIejG_;Ya)b*{$*2I+dJTz%*UT6*sgBQ4=|;cqm(OXA{(~r}MI8h#y(BV| zq}l&^mMVB&8tVuci0iec%A3=%r; z`WNLjp`0LY(#uR+QquWalR{ACY~u~Pesdk&gX*2>e~0vGj@QxCc33&@IGjnW7$=WM zg508QS^5oz=h?O$pS6O4kTS7dv;4hzwG>q2|?tI^^6)#^#>C~A_FKGr-fS`uqf36+=a`CEpTBQG@g~k&V1&+PT zpkmL#0oZ>ISFp00qt0fNRt5R<<+rMT(f;lHUkbS0ned-3{WdsRh|uHh2lLC)bwc^q9`L_H zWPV=~B~7~Lb|-`_ziTc_{`)&Ev%JESk26=d$jCST59%XL*cNz|T=Gm~AQinP^!ehX zJ-^P(@k~ut&8Yp_M@u9aEnV^(vp5$UQJtOf^NCn%E|@fL+t|+7&$vyiG-p-5mrqlF zrcm>$B^YIofvon9W5sU<4herwEfJZQ3cWv>t9w<(3D;x#>JCxA(IIhx=GI6#jxGh+ z*ZzgaH#su@!7QV@-LhZwst+hBRJLnE&$>Tw*pj4cj{nz;=0+ZTc6_q(ofuofVw#7u zu3`JLEx&Ey{D9W*uhip*I%(Sw2a!)qwa^5)y1j@eTs}%TYR78){*gsg z*sLe*L-g^g!b}wYYVOj|kOOUB*zx*$0ZCaW*6?ZX?MypB`TE`p7vi}OgOc^c8dZ|xzdQeJmI~yhk${PoN)^@#o zLYj2%nCJ2iY&b41Nr|GH44(+iIj#=CE+T*FvX1;K+JvjMW&T&)k3OZd%M#5-E?r`t z)ZfjAkG%d%)Ht5z|BS$23W&Jfx(0*&pf7%ZIfwsWG2nlKZU0U-{5#q3za`o5Z(II< zYs>Py?goB!D^izwG7E~=Tas&QYsqsPT)%^Q-|EKk?~XkFq#OR1REx&NwOocfj3YJ+LXi$hLM1_hruCmjwhM zEOKUc7A}?$Hn!&wR)`9OMFM8yV&(*4k+3mxF%vU0u{Sk?2nnJ8?%4yiL_^+rkq6v( zz3Hlf;3~f8g!g#?0Dk7(I5NUZY4b9moRz6|* zlt_&qYTp_-*}4s&brk#~NBN;BPg<)n#>7GDeQ>KWR!+7v&GOG={<gRn#i3?UR^6c{Yz4n(wQzj*CL zI{MRNbAO_r*UmAwEZjUonR^E1l>g%;Djz4ty;hlDG!71GkrbzLt*QgnhcP~Ag9e87 zJwErfjiUsxxu>0f7{Pr0@acRxkix4lZ}V|>NJQt;nS^%Os|NH-V*9yJ!D!0m{sphO zuLCrniBCron_6dnfX#J?n5x||$$VasijF90uJ3vi?@)(2l1RQ#?t>=~Jp5F|0_2xg zG!piITqlBFtqwT8Y*{EKsF<1UCeexs7v)s&V%@|~l?_J`*Z)-Z@HM9@c4P>q<3x1> z=5Du#4|*oJS`I8Q$QU^|Pw%eoRlNKuT2z)IYv~wTrEOIIXz)AO`OWM*%BPJS{x3yY zf}h*QN46q3CttZ`BRcfe_eZK{O5=8Qzbrbov{FYIs%(d%kF(**Q81nKShg7S;E!Nh zZ#^>qV2f@QYLYulWEAC`d+e$wbo@2(Thzm)1XC^r3)izeTNxFCa-xOCw1OGOAsv5` zTv@eE6TJGP`9`ONrRyH))A61IygDvP+A&@~d*E922TXYc5yxRsq=77kHQWUR435DfqVilTlRci}FD3x3`8nLzbZ_fmt0Mw4PWE z)%Eq^*Z&byjHr0!gbKj-QBWcIq=@r8j zi`6msI1NvWN=WLl+9Ds3m{e#?OpvvFWFga)f#qx2{IkM5Z*^PW=es9|)~N1}sti&!t4q*nhDkOtGeB!`0tqRby7E z5H&cJNj#y2%stE{X=L4TB|o+{e@12_EztFaevGp=dv>7lhP1GmL=WWY;b*yl`s1mE zPBi_uX6Bj6C|k=%_Pe_7k+J+1K+lb$6&770HnLPj%UR0M9MoSMa|Ni@OvVmZ)FrVY zEXrdg?-`+qL&`Z@?C5mQvKN!6jh8_0VPYDPFB@+e1#I$nGrsb-9l59FR_-ikb(aTJ zPvaCN)$8Ce9Us&Dykvcnn<}Y1s*7g+jA-=p+W`Y1|H%*D@+s6N$sahrOjUWit|ifh zr|-ZIWW&FdJgglFo+c({EXKBc+Ej9VRJ}0cA3F0TchyGx?>b}nXiF32lL1XY2s$eWqM zj701`&~;cLtPn0Xb_h2wyB-oR|AJs7Es_Z&)+#yKo2Z((Ky)B1N@5Za7Bw>u7YK{A zt&xS9$nXE6zyC`^^dKyv_BQrTst!gbW)LK~s52Xc8#yq#kPw7L!rsp1_Ob*oGb@DS zH%Ag&%&ZVL-aGaro+H2T{Qknm%nJGQGbgfv?XSKx6^*UTOzygqw&jAbvE7aX5fb{B zXF*>4^I87#8^61}6Xl;Bv8cKlyW9%*_URxj8ZgsaFT?d5!Xjk`v#@l5aC32@|ML;= zhGY?exi~ACIf>faI@sIYYUICnN?VODe$sWju4ys3_A?vsR#2@}Dn#O@7OoIDu)W({(;$NEm@#&&j|VN?eK!Zwn$eDtKj7-9~c0 z5GX_-G**r!bg0}ZWYz2z`3iE7vge(4MtNYix~8ZsCeh^acrQF@T+2ej1R-7;=VuW?&1EzlKB?tl~_Q!=CS>38k3RB6NXiwt!u^Oy8@S2Ac> z``zUjt6@rNWOu4!?Z1*|yl;EkCl7ldtjR>Xkjgo4`&N%-_W+35`6?Cu7IFOB=Q8|# zM|aW($n8mAC|P2-=4KJ~~ct*Gctsmn-rZ2^0mue8;ISLnPkqIFnBUVNGo+ z486H_ZXnal01h0@&kZTBrdq~of=Y1>Kq`WJ* z69roS>X~@$Rp@hUy0{ghkSvoXYUYfKw(O#SnM6tc`^nz4a1N@lBn@WEWtPl!tI#_a z*f3KDW)6hEQ(3+fYCJFxt2asIOpQhvW(Zdk8e_>;Ji_-ia{8@A1jv+yqsRlUCiGHT z?bA#8B*mkMHPtIIgH)2+2hj|HlD(JI^DR&t(0E^3=BK{@D6pqc;cG(5FOAT5PNJ@YqVUlD%9=M&A-Gub4s}JJk{{eA9~5?{F4n+zY+v-F z-l>S5x!SIOgm1;l4QRAFF`52;9(<6gJ4ex$QsFzF2q)PoinPqq;1%tzJA2v(?rREe zjEKUWt|#M!2?cbb65{DN28(`=4?)V)okNXbjd8eu_zVwzosb4cf!)a=tEH;kt3YjF z5Y6P?_C6hrqB${3)Lof0Xp59#dc$Leqyy*HMq;|>Ienb^#B6tDp)FPA^(qWG8*~gz z8yGqL^wnlR*b_MKEUP7@h0|RXDRca!^plXm)x_xvhcs#Ac^MR-2yQBu`h@ICB^^Fp zhQCThw$?^>ycz8sI{^VKfv{hB`V2XOX*^mt3GqjLDvHU^IHYg24t)whbXdt2K67Rt z4s=k-%hs~$`VXWXDh$1uaxU7A|DhEmZaA$eSfob4j86(WQ=^;r;Hj+LV|aagPP^qR znw&Ftu8i3a_TjJDimv-nVH^=pN`rn^i=$w*{g|yTbJTY~>1lD+L9d**m$~CbNbGHi zh(Id*)K$B@B)m0UrEom&0Tzz!^|bbFLXo>O_^V(de%+X)ozZR6z05)}$vLOg2%X@# zz`HVuahJ$fiZY{xd|K`hdoJX9jZfw9EuN z(KAvu?BA1|1I;u>bx-{a&-KUo)CcNb)2ysZndbw^+dr4Vw<>#&+ePImlld`QT;jfL zd31J9A+;7^L1uqGpT_SyAPWi*{;Wiv!gpyP4<(ITJDgc6Hig$=XQ{0s1dCv+Ux`C!A31`5 zJI`BT{~zTrNf4N?m@`-Jx+y7qK3r2IZ~NQ!hCvG|xksQQ5 zMjJ(*jzR%Kz=0^t&qY|29v~Hd0SQo?k`x|6zk{JH6lT{W=C`*ux{0FXRAhYmKygb| z#*C`FQGZ#7JP#Wvh})9CRmcs)xK-^(DU_7@yBFA@h8DnGdj3tN^t-|$*0?S3PvY5| zNaUO(NA>BsK2IdL!w3eTLt(Mu+IwX0Zqg_@6}@(F<-4H-P<1!<`|57%FErw{epc6UNFWq$HL3R{?EM5zoSvtcS+503ns!vbTMauZyP{u%q z!id|$F(^PcMUqNLQL+?GFwECgs#9gWJ}E^jOVuH6t4w-zAyF!*+PZil21~10^`4J;lXQx z^R7NX`z)xI{hopW7^u2M7!rxMUNHc)pvrph)=d80 z@c*$$n2|@%_McqZrnQWXjg{zp7CP%zw5!7%{Vuj}em=eONfPZ=Pnp!vR5v_~G;lx* z190T^2Tvh?Z~)W+kdl&89Eqp<5E%@=0D<#JKjgw_fm|;FaAEl0)e5NvH3KX2RlVjU zQfu?HcH2RXpA&iTKpEcf`sG?5VR!= zg({wZB;?V^D~x*vn@+(n>$tUga6pSAXh9_gF;Vppu!qJ<*}jwOg|+^bFXwwEjogg9 z#t0Y$g*-#mwVM3&&KS%CL6!JW;?5^ndql=Lp2OM?LcfiC63`Y@=yG!*NRJnQ+fBOO zioX6eB(T(#x3#Le%UKTuUEl#a6n3s#YoiCA0*T@lPm~)&4-K;h?FR7jw(}TaARq*s zjKcifWpLtr`z$*=S6AnyH|I#@U9BtfuQwdz`=944l=$r8-0b4G zeUTbR1LuvMk!)-w&?$1d96Ue;)#ArqB*v

J?scnhDDnzrmljVH;Y(9OHLq1 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

N@phK{Wrhjc*A{){E62 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 literal 0 HcmV?d00001 diff --git a/docs/sfa-impl-2009-04-07.pdf b/docs/sfa-impl-2009-04-07.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2eb49c2b0be2cc9b2ab514a3896baf96025c4205 GIT binary patch literal 487170 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ഴ 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 xC=ftk5Rf_65{m&L69|Pyi0* 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

nM)mNf+jfHAtgE2Q*= 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%0A+K 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

KLo6p0oh&&&S^h+a06!A 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%0AyI%_k(WCS|gKR*gbZwo|28O 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 literal 0 HcmV?d00001 diff --git a/docs/sfa.doc b/docs/sfa.doc new file mode 100644 index 0000000000000000000000000000000000000000..55f3c6674bce30220696577d677478c703593d29 GIT binary patch literal 107008 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 b&S$(68y?(`rZbiBlYa4I$uO(ne>nUX!)x0- literal 0 HcmV?d00001 diff --git a/docs/sfa.pdf b/docs/sfa.pdf new file mode 100644 index 0000000000000000000000000000000000000000..873731bd74b26838fb4eaeb07aa13c0fc4ddac45 GIT binary patch literal 247679 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̾=Dis{moBHI!KivL#GWafgJR>U3! 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

f!Goae!Ph(%Hc2h`uglbH5jrGuiK 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%0Dto$Ans) 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 a{yM+EoGq0ruNI`W4n8w}eCzC~ng0RxLXNut literal 0 HcmV?d00001 diff --git a/keyconvert/keyconvert.py b/keyconvert/keyconvert.py new file mode 100755 index 00000000..de904ee6 --- /dev/null +++ b/keyconvert/keyconvert.py @@ -0,0 +1,115 @@ +#!/usr/bin/env python + +import sys +import base64 +import struct +import binascii +from M2Crypto import RSA, DSA, m2 + + +###### Workaround for bug in m2crypto-0.18 (on Fedora 8) +class RSA_pub_fix(RSA.RSA_pub): + def save_key_bio(self, bio, *args, **kw): + return self.save_pub_key_bio(bio) + +def rsa_new_pub_key((e, n)): + rsa = m2.rsa_new() + m2.rsa_set_e(rsa, e) + m2.rsa_set_n(rsa, n) + return RSA_pub_fix(rsa, 1) +###### +#rsa_new_pub_key = RSA.new_pub_key + + +def decode_key(fname): + """Convert base64 encoded openssh key to binary""" + contents = open(fname).read() + fields = contents.split() + + in_key = False + for f in fields: + f = f.strip() + if f.startswith("ssh-"): + in_key = True + continue + elif in_key: + return base64.b64decode(f) + + return None + + +# openssh binary key format +# +# a section: +# length = 4 bytes (32-bit big-endian integer) +# data = length bytes of string +# +# sections of the key ( for RSA ) +# [key-type (in ASCII)] [public exponent (bignum)] [primes (bignum)] +# +# sections of the key ( for DSA ) +# [key-type (in ASCII)] [p (bignum)] [q (bignum)] [g (bignum)] [y (bignum)] +# +# - baris +def read_key(key): + + def read_length(key): + length = key[0:4] + length = struct.unpack(">l", length)[0] + return length, key + + def read_values(key, count): + v = [] + for i in range(count): + length, key = read_length(key) + size = 4 + length + v.append(key[:size]) + key = key[size:] + return v + + length, key = read_length(key) + key = key[4:] + key_type = key[:length] + key = key[length:] + + if key_type == "ssh-rsa": + # prepare parameters for RSA.new_pub_key + v = read_values(key, 2) + e, n = v[0], v[1] + return key_type, e, n + + elif key_type == "ssh-dss": + # prepare parameters for DSA.set_params + v = read_values(key, 4) + p, q, g, y = v[0], v[1], v[2], v[3] + return key_type, p, q, g, y + + +def convert(fin, fout): + key = decode_key(fin) + ret = read_key(key) + key_type = ret[0] + + if key_type == "ssh-rsa": + e, n = ret[1:] + rsa = rsa_new_pub_key((e, n)) + rsa.save_pem(fout) + + elif key_type == "ssh-dss": + p, q, g, y = ret[1:] + dsa = DSA.set_params(p, q, g) + dsa.gen_key() + dsa.save_pub_key(fout) + # FIXME: This is wrong. + # M2Crypto doesn't allow us to set the public key parameter + raise(Exception, "DSA keys are not supported yet: M2Crypto doesn't allow us to set the public key parameter") + + +if __name__ == "__main__": + if len(sys.argv) != 3: + print "Usage: %s " + sys.exit(1) + + fin = sys.argv[1] + fout = sys.argv[2] + convert(fin, fout) diff --git a/keyconvert/test.sh b/keyconvert/test.sh new file mode 100755 index 00000000..5c5744a9 --- /dev/null +++ b/keyconvert/test.sh @@ -0,0 +1,33 @@ +# this scripts tests the key conversion routines +# it converts the _pub files in test/ from openssh to openssl +# it then verifies signatures with openssl (see keytest.sh) + +rm -rf testout +mkdir testout + +# rsa1 keys +# these are in a different format +#./keyconvert.py test/openssh_rsa1_512.pub testout/openssl_rsa1_512.pem +#./keyconvert.py test/openssh_rsa1_1024.pub testout/openssl_rsa1_1024.pem +#./keyconvert.py test/openssh_rsa1_2048.pub testout/openssl_rsa1_2048.pem + +# rsa2 keys +./keyconvert.py test/openssh_rsa_512.pub testout/openssl_rsa_512.pem +./keyconvert.py test/openssh_rsa_1024.pub testout/openssl_rsa_1024.pem +./keyconvert.py test/openssh_rsa_2048.pub testout/openssl_rsa_2048.pem + +# dsa keys +./keyconvert.py test/openssh_dsa_512.pub testout/openssl_dsa_512.pem +./keyconvert.py test/openssh_dsa_1024.pub testout/openssl_dsa_1024.pem +./keyconvert.py test/openssh_dsa_2048.pub testout/openssl_dsa_2048.pem + +# make a test file to encrypt +echo "this is a test to see if the key conversion routines work" > test.txt + +# test the keys +./testkey.sh -sha1 rsa_512 +./testkey.sh -sha1 rsa_1024 +./testkey.sh -sha1 rsa_2048 +./testkey.sh -dss1 dsa_512 +./testkey.sh -dss1 dsa_1024 +./testkey.sh -dss1 dsa_2048 diff --git a/keyconvert/test.txt b/keyconvert/test.txt new file mode 100644 index 00000000..0bd7ba19 --- /dev/null +++ b/keyconvert/test.txt @@ -0,0 +1 @@ +this is a test to see if the key conversion routines work diff --git a/keyconvert/test/openssh_dsa_1024 b/keyconvert/test/openssh_dsa_1024 new file mode 100644 index 00000000..f6c3f7db --- /dev/null +++ b/keyconvert/test/openssh_dsa_1024 @@ -0,0 +1,12 @@ +-----BEGIN DSA PRIVATE KEY----- +MIIBvQIBAAKBgQDx32kPfS+uiVq6pqgEGORLZx0EfSXvlluD/nKtLQoBxDY7JntP +oVyI29KPVSnsjqEAVI7r9pEJ/aszrc4jLj5dbjqehLF5qnkrr/XAcTv4MsxKuyDy +6R0AhU91YrkChO8JedxbUdf6lI3DLREaRIvLhHew05k34W0dGdEV/U/hvQIVANT3 +PYXSBKIShJovHfC4YQ65kOy3AoGBANs/BTSWWUEs3jppa65VZV/8WbV7Q3uV9PVu +Ljf6E9DKFI5PPbJOMPbX7XF3zrCRtiTVl1dTc/xH7LYXvHTVU469mRpdNDwCMF5r +y1bWbVVKhIrcrlVnEF3+up2jD7Xu+tfIn/YmJyrHhvKV842HLv+LAbUJbMQ/9POt +5w9RufrNAoGBAJYsrPd4VhUQwTzWW/LQmIevjT/X5T2putWXttsZ1KzMP2qi9rf8 +GATnPJahYq1DXgNSPcqIHF5FUgVEITJ3R/CTCFiKF/+N5yBzEXmbo+HGG8W1hKnp +QdzVKZq0esGwEKfkZ0lUPJCh5IYyRL8ceh8KRjEFSKuSEPZqwrngklw0AhUAg8tD +T7VLBFkDCC7bhsKqFkJ4AAo= +-----END DSA PRIVATE KEY----- diff --git a/keyconvert/test/openssh_dsa_1024.pub b/keyconvert/test/openssh_dsa_1024.pub new file mode 100644 index 00000000..d81b006a --- /dev/null +++ b/keyconvert/test/openssh_dsa_1024.pub @@ -0,0 +1 @@ +ssh-dss AAAAB3NzaC1kc3MAAACBAPHfaQ99L66JWrqmqAQY5EtnHQR9Je+WW4P+cq0tCgHENjsme0+hXIjb0o9VKeyOoQBUjuv2kQn9qzOtziMuPl1uOp6EsXmqeSuv9cBxO/gyzEq7IPLpHQCFT3ViuQKE7wl53FtR1/qUjcMtERpEi8uEd7DTmTfhbR0Z0RX9T+G9AAAAFQDU9z2F0gSiEoSaLx3wuGEOuZDstwAAAIEA2z8FNJZZQSzeOmlrrlVlX/xZtXtDe5X09W4uN/oT0MoUjk89sk4w9tftcXfOsJG2JNWXV1Nz/Efsthe8dNVTjr2ZGl00PAIwXmvLVtZtVUqEityuVWcQXf66naMPte7618if9iYnKseG8pXzjYcu/4sBtQlsxD/0863nD1G5+s0AAACBAJYsrPd4VhUQwTzWW/LQmIevjT/X5T2putWXttsZ1KzMP2qi9rf8GATnPJahYq1DXgNSPcqIHF5FUgVEITJ3R/CTCFiKF/+N5yBzEXmbo+HGG8W1hKnpQdzVKZq0esGwEKfkZ0lUPJCh5IYyRL8ceh8KRjEFSKuSEPZqwrngklw0 smbaker@test64 diff --git a/keyconvert/test/openssh_dsa_2048 b/keyconvert/test/openssh_dsa_2048 new file mode 100644 index 00000000..b43eb653 --- /dev/null +++ b/keyconvert/test/openssh_dsa_2048 @@ -0,0 +1,20 @@ +-----BEGIN DSA PRIVATE KEY----- +MIIDPgIBAAKCAQEAhvJpPI7AbHEyXauGmXyCGsVCkTXD4i9b/eobbwG1Hhm8FvtM +wq5oopWItMH0HMcKfBGmHlp46u5KJcYmrSsHSDX+6n9+Mw/Pn2Sldg26OTkyfsaV +qelapH0Q3ILt8fTrHosy9aosBiZbu4wPdjiBs441ekhGpZfsdaa3g657VGSG1YqH +S/eMw7fs068Vsp5ickYCapI+XICFnf2lQesC4gfElDRGOG3/6n0Pkhsw0TwXRgka +GgXfxHR4CPIlH7fV1/QIYXLXRU8ftkrwakIltSrl50pQOXDuCOGR49ng2JaxFdWv +sjUundZsmnWjGFFE2ORrTBFHagmwOsQXY4vOXwIVAJtUPdFxKVNC2t89reLuOGao +FFxJAoIBAQCAZYog0D72F0TIAIMIahnDDNjN2T3Sb3Zqhd27oExdUpbNDbM8F+qY +HpqJRtQRc59sSsroif+K0yEaeReOapEb6Cf1N4yGDppr1ClMBGHKk/Wsjf/ASqa8 +/mibtSF4P5I6e0w8FWrTrhu2vJ9W2ONRqVAUxgBMsEKXFXvkYtf31LKsQFUEcmtO +uXalXiKAdr+APQya6lDiUxGELjuNzwsGxjdo15wa6NcKLfHUv3XYU6WxL2USGFBW +5I1aHu/Uc7YGhl2I9fSulzotEc4PV40nlC54NVx65pQjeViJ4ZSSlrSm58xxfrdF +TnWvEJjSu6CAFYfWEzx5RtbjuWMk6yAdAoIBAFx7TsT+G3sryKRs4DRWSSlU8PAO +2I326UJps4CiiAS6x6XGnB9kLX3E/xfdmM9mrhQBNn0OPo5iCK2me1W2sXQ6QWD/ +dRhKwIcrHVexwu5iMtoMtMAeDI5P7/ahVSIxDAKkABD4hDJB3UcTDYXaz1/bNqW6 +FXYK2C9CrfhYF3NX28MU+eJhIFRpEaVU42bQ5OeDaJiz2tQeSrT5LqbV58RhARew +9tK1FOCBTBsJ+bBr4Q5f9bFNpSqqn513H/cc6qkuRCluxeGTAtNt5qdHYH+rvxey +FpBzy8MmXkHxsQWxZ1DAkaUgPaxXevNQRk/iNsk1W3zWqJ72KI5lNFgJ9yECFA/o +gWjBm06JTkYWBOgkYRRVRzr7 +-----END DSA PRIVATE KEY----- diff --git a/keyconvert/test/openssh_dsa_2048.pub b/keyconvert/test/openssh_dsa_2048.pub new file mode 100644 index 00000000..69d00b60 --- /dev/null +++ b/keyconvert/test/openssh_dsa_2048.pub @@ -0,0 +1 @@ +ssh-dss AAAAB3NzaC1kc3MAAAEBAIbyaTyOwGxxMl2rhpl8ghrFQpE1w+IvW/3qG28BtR4ZvBb7TMKuaKKViLTB9BzHCnwRph5aeOruSiXGJq0rB0g1/up/fjMPz59kpXYNujk5Mn7GlanpWqR9ENyC7fH06x6LMvWqLAYmW7uMD3Y4gbOONXpIRqWX7HWmt4Oue1RkhtWKh0v3jMO37NOvFbKeYnJGAmqSPlyAhZ39pUHrAuIHxJQ0Rjht/+p9D5IbMNE8F0YJGhoF38R0eAjyJR+31df0CGFy10VPH7ZK8GpCJbUq5edKUDlw7gjhkePZ4NiWsRXVr7I1Lp3WbJp1oxhRRNjka0wRR2oJsDrEF2OLzl8AAAAVAJtUPdFxKVNC2t89reLuOGaoFFxJAAABAQCAZYog0D72F0TIAIMIahnDDNjN2T3Sb3Zqhd27oExdUpbNDbM8F+qYHpqJRtQRc59sSsroif+K0yEaeReOapEb6Cf1N4yGDppr1ClMBGHKk/Wsjf/ASqa8/mibtSF4P5I6e0w8FWrTrhu2vJ9W2ONRqVAUxgBMsEKXFXvkYtf31LKsQFUEcmtOuXalXiKAdr+APQya6lDiUxGELjuNzwsGxjdo15wa6NcKLfHUv3XYU6WxL2USGFBW5I1aHu/Uc7YGhl2I9fSulzotEc4PV40nlC54NVx65pQjeViJ4ZSSlrSm58xxfrdFTnWvEJjSu6CAFYfWEzx5RtbjuWMk6yAdAAABAFx7TsT+G3sryKRs4DRWSSlU8PAO2I326UJps4CiiAS6x6XGnB9kLX3E/xfdmM9mrhQBNn0OPo5iCK2me1W2sXQ6QWD/dRhKwIcrHVexwu5iMtoMtMAeDI5P7/ahVSIxDAKkABD4hDJB3UcTDYXaz1/bNqW6FXYK2C9CrfhYF3NX28MU+eJhIFRpEaVU42bQ5OeDaJiz2tQeSrT5LqbV58RhARew9tK1FOCBTBsJ+bBr4Q5f9bFNpSqqn513H/cc6qkuRCluxeGTAtNt5qdHYH+rvxeyFpBzy8MmXkHxsQWxZ1DAkaUgPaxXevNQRk/iNsk1W3zWqJ72KI5lNFgJ9yE= smbaker@test64 diff --git a/keyconvert/test/openssh_dsa_512 b/keyconvert/test/openssh_dsa_512 new file mode 100644 index 00000000..003f01c0 --- /dev/null +++ b/keyconvert/test/openssh_dsa_512 @@ -0,0 +1,8 @@ +-----BEGIN DSA PRIVATE KEY----- +MIH4AgEAAkEAm3PK+DSgbavp8uFzwHkLBQkAQ+zYH7oQQfVf9qfj9McPwPSRjyE2 +euX37kG9V+8fMYGkrXiAnTF338/7l/BitQIVAPhdznYDxCFE+K7Fkmric3uRLhKl +AkASi9+yBXkSh/PBIB2VTwUNJ2Je2rMT/KArLw86dQuMdV2QPnCI4jwvFeWJW8q1 +CSKyBcwoxaSwPN6MAYNRLmPtAkA/5M4TgOWQjoUDc1DwwAFzl8kXc8Jywyz3Ck1a +uCgs+unOttuDT+ZYicDRSnq7G3paTGm5U9h3Pf4BOzqKymxmAhUAsvh3vpJX52p7 +WTaXKaBm7ysblAE= +-----END DSA PRIVATE KEY----- diff --git a/keyconvert/test/openssh_dsa_512.pub b/keyconvert/test/openssh_dsa_512.pub new file mode 100644 index 00000000..a4a4f6ed --- /dev/null +++ b/keyconvert/test/openssh_dsa_512.pub @@ -0,0 +1 @@ +ssh-dss AAAAB3NzaC1kc3MAAABBAJtzyvg0oG2r6fLhc8B5CwUJAEPs2B+6EEH1X/an4/THD8D0kY8hNnrl9+5BvVfvHzGBpK14gJ0xd9/P+5fwYrUAAAAVAPhdznYDxCFE+K7Fkmric3uRLhKlAAAAQBKL37IFeRKH88EgHZVPBQ0nYl7asxP8oCsvDzp1C4x1XZA+cIjiPC8V5YlbyrUJIrIFzCjFpLA83owBg1EuY+0AAABAP+TOE4DlkI6FA3NQ8MABc5fJF3PCcsMs9wpNWrgoLPrpzrbbg0/mWInA0Up6uxt6WkxpuVPYdz3+ATs6ispsZg== smbaker@test64 diff --git a/keyconvert/test/openssh_rsa1_1024 b/keyconvert/test/openssh_rsa1_1024 new file mode 100644 index 0000000000000000000000000000000000000000..1d814be45b6b0442fb7334ee848964120fb024c9 GIT binary patch literal 529 zcmV+s0`C1&Q%E3CQb|@pR7D_5MOh$5NlZl`Mo&^rK~x|yE-?xK000000000400aQI z^#g@OwPen0@MsoYThI?0S3ra0f0E_+=DgNnI`E*W*x;4#I@&~=%2=Q8X-LNA%(!It z=NN?ZEv@osF0u(5Qrc3(K%QGs6R&ovcffIr-5?J+Hh_CrTHVw)s<(`BXRto9;fOKOMEkc=KP95eSZ=jR1+pieW)$IQ*vT5h|HOehC~3La%RO_-=6B zKhIcwvhTYaas>;4vv^Idr9rj*(Vw?G5KG{q20szcH^U^-UXGSf&o@pbt zv+veRSA6tD;_9;_TkayTsEG2~V<92|uml>Qo?2e}$;fXgl4I|NG0~Rg!Ue|^3jEh1DuBuy4TQft2)KntD TAwx?(#~E|#6wS8{00000Z71}J literal 0 HcmV?d00001 diff --git a/keyconvert/test/openssh_rsa1_1024.pub b/keyconvert/test/openssh_rsa1_1024.pub new file mode 100644 index 00000000..8e8d3089 --- /dev/null +++ b/keyconvert/test/openssh_rsa1_1024.pub @@ -0,0 +1 @@ +1024 35 129881281989970257849297143265405883841808716551531717161470388680233069834806491515662719447667414192316994820475038514678885956467447964923197868990351993958234384078203216494595575140725420329195654521080877033819243506183873392482029450927674981321293693168525102276485740189208563187461931348496284073193 smbaker@test64 diff --git a/keyconvert/test/openssh_rsa1_2048 b/keyconvert/test/openssh_rsa1_2048 new file mode 100644 index 0000000000000000000000000000000000000000..adf13a28e55695e29d05e9e18e39559eb42bf128 GIT binary patch literal 977 zcmV;?11|hiQ%E3CQb|@pR7D_5MOh$5NlZl`Mo&^rK~x|yE-?xK000000000800;oZ zy#{v$u>d>7cB5#zvldqppecA>uMu_7*oc>KfA@i=4%8ko+`u!uk!W@bm91OUfqDyyjY zg`sJ@Z$uHu)Rr)HQt9Q1rBsYaZ6^kg3fe|NW0&{EJ&@@BPkZZ6u^;sfnpu>~6+%`NDGkjFpVXFXg!nRC zmgBBR>HJTH>PQ|KlSjF4U-bk4{oA4br@q8BV9MCcUU}Z9`e83S!bv%zhe`xR{Qp1`kE2w>y$d>#Ab@wN(OB<|_ZvM;P<&DEhy<95C=1A{2e7CRxXLMu{iFRh5E!{D}oKlhFHET}{?BR`-or5f20#cPFop+3nmY60Ra4Ao17ZsA_MUcw`3X3XnxiC z9tb^qxyV8+C^H=do|6Fp{P`A>JD#66EP signature.bin +openssl dgst $1 -signature signature.bin -verify testout/openssl_$2.pem test.txt +rm -rf signature.bin diff --git a/rspec/model/Registry.ecore b/rspec/model/Registry.ecore new file mode 100644 index 00000000..ae7ecaca --- /dev/null +++ b/rspec/model/Registry.ecore @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rspec/model/planetlab.ecore b/rspec/model/planetlab.ecore new file mode 100644 index 00000000..68dd1a74 --- /dev/null +++ b/rspec/model/planetlab.ecore @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rspec/model/planetlab.ecore_diagram b/rspec/model/planetlab.ecore_diagram new file mode 100644 index 00000000..df5642bc --- /dev/null +++ b/rspec/model/planetlab.ecore_diagram @@ -0,0 +1,228 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rspec/model/planetlab.genmodel b/rspec/model/planetlab.genmodel new file mode 100644 index 00000000..ce59a871 --- /dev/null +++ b/rspec/model/planetlab.genmodel @@ -0,0 +1,44 @@ + + + planetlab.ecore + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rspec/model/planetlab.xsd b/rspec/model/planetlab.xsd new file mode 100644 index 00000000..c6076024 --- /dev/null +++ b/rspec/model/planetlab.xsd @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rspec/sample_rspec.xml b/rspec/sample_rspec.xml new file mode 100644 index 00000000..886fc8a2 --- /dev/null +++ b/rspec/sample_rspec.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/setup.py b/setup.py new file mode 100755 index 00000000..f0f89a49 --- /dev/null +++ b/setup.py @@ -0,0 +1,103 @@ +#!/usr/bin/python + +""" +Installation script for the sfa module +""" + +import sys, os, os.path +from glob import glob +import shutil +from distutils.core import setup + +bins = [ + 'config/sfa-config-tty', + 'config/gen-sfa-cm-config.py', + 'sfa/plc/sfa-import-plc.py', + 'sfa/plc/sfa-nuke-plc.py', + 'sfa/server/sfa-ca.py', + 'sfa/server/sfa-server.py', + 'sfa/server/sfa-clean-peer-records.py', + 'sfa/server/sfa_component_setup.py', + 'sfa/client/sfi.py', + 'sfa/client/getNodes.py', + 'sfa/client/getRecord.py', + 'sfa/client/setRecord.py', + 'sfa/client/sfadump.py', + 'sfa/client/sfiListNodes.py', + 'sfa/client/sfiListSlivers.py', + 'sfa/client/sfiAddSliver.py', + 'sfa/client/sfiDeleteSliver.py', + 'sfa/client/sfiAddAttribute.py', + 'sfa/client/sfiDeleteAttribute.py', + 'sfatables/sfatables', + 'keyconvert/keyconvert.py' + ] + +package_dirs = [ + 'sfa', + 'sfa/client', + 'sfa/methods', + 'sfa/plc', + 'sfa/server', + 'sfa/trust', + 'sfa/util', + 'sfa/managers', + 'sfa/rspecs', + 'sfa/rspecs/aggregates', + 'sfatables', + 'sfatables/commands', + 'sfatables/processors', + ] + + +data_files = [('/etc/sfa/', [ 'config/aggregates.xml', + 'config/registries.xml', + 'config/default_config.xml', + 'config/sfi_config', + 'sfa/managers/pl/pl.rng']), + ('/etc/sfatables/matches/', glob('sfatables/matches/*.xml')), + ('/etc/sfatables/targets/', glob('sfatables/targets/*.xml')), + ('/etc/init.d/', ['sfa/init.d/sfa', 'sfa/init.d/sfa-cm'])] + +# add sfatables processors as data_files +processor_files = [f for f in glob('sfatables/processors/*') if os.path.isfile(f)] +data_files.append(('/etc/sfatables/processors/', processor_files)) +processor_subdirs = [d for d in glob('sfatables/processors/*') if os.path.isdir(d)] +for d in processor_subdirs: + etc_dir = os.path.join("/etc/sfatables/processors", os.path.basename(d)) + d_files = [f for f in glob(d + '/*') if os.path.isfile(f)] + data_files.append((etc_dir, processor_files)) + +initscripts = [ '/etc/init.d/sfa', '/etc/init.d/sfa-cm' ] + +if sys.argv[1] in ['uninstall', 'remove', 'delete', 'clean']: + python_path = sys.path + site_packages_path = [ os.path.join(p,'sfa') for p in python_path if p.endswith('site-packages')] + site_packages_path += [ os.path.join(p,'sfatables') for p in python_path if p.endswith('site-packages')] + remove_dirs = ['/etc/sfa/', '/etc/sfatables'] + site_packages_path + remove_bins = [ '/usr/bin/' + os.path.basename(bin) for bin in bins ] + remove_files = remove_bins + initscripts + + # remove files + for filepath in remove_files: + print "removing", filepath, "...", + try: + os.remove(filepath) + print "success" + except: print "failed" + # remove directories + for directory in remove_dirs: + print "removing", directory, "...", + try: + shutil.rmtree(directory) + print "success" + except: print "failed" +else: + # avoid repeating what's in the specfile already + setup(name='sfa', + packages = package_dirs, + data_files = data_files, + ext_modules = [], + py_modules = [], + scripts = bins) + diff --git a/sfa.spec b/sfa.spec new file mode 100644 index 00000000..6834fc3c --- /dev/null +++ b/sfa.spec @@ -0,0 +1,321 @@ +# +# $Id: sfa.spec 18704 2010-09-07 18:24:17Z tmack $ +# + +%define url $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa.spec $ + +%define name sfa +%define version 0.9 +%define taglevel 17 + +%define release %{taglevel}%{?pldistro:.%{pldistro}}%{?date:.%{date}} +%global python_sitearch %( python -c "from distutils.sysconfig import get_python_lib; print get_python_lib(1)" ) +%{!?python_sitelib: %define python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")} + +Name: %{name} +Version: %{version} +Release: %{release} +Source0: %{name}-%{version}.tar.bz2 +License: GPL +Group: Applications/System +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot + +Vendor: PlanetLab +Packager: PlanetLab Central +Distribution: PlanetLab %{plrelease} +URL: %(echo %{url} | cut -d ' ' -f 2) +Summary: the SFA python libraries +Group: Applications/System + +BuildRequires: make +Requires: python >= 2.5 +Requires: m2crypto +Requires: xmlsec1-openssl-devel +Requires: libxslt-python +Requires: python-ZSI +# xmlbuilder depends on lxml +Requires: python-lxml +Requires: python-setuptools +Requires: python-dateutil + +# python 2.5 has uuid module added, for python 2.4 we still need it. +# we can't really check for if we can load uuid as a python module, +# it'll be installed by "devel.pkgs". we have the epel repository so +# python-uuid will be provided. but we can test for the python +# version. +# %define has_py24 %( python -c "import sys;sys.exit(sys.version_info[0:2] == (2,4))" 2> /dev/null; echo $? ) +# %if %has_py24 +# +# this also didn't work very well. I'll just check for distroname - baris +#%if %{distroname} == "centos5" +#Requires: python-uuid +#%endif + +%package cm +Summary: the SFA wrapper around MyPLC's NodeManager +Group: Applications/System +Requires: sfa +Requires: pyOpenSSL >= 0.6 + +%package plc +Summary: the SFA wrapper arounf MyPLC +Group: Applications/System +Requires: sfa +Requires: python-psycopg2 +Requires: myplc-config +Requires: pyOpenSSL >= 0.7 + +%package client +Summary: the SFA experimenter-side CLI +Group: Applications/System +Requires: sfa +Requires: pyOpenSSL >= 0.7 + +%package sfatables +Summary: sfatables policy tool for SFA +Group: Applications/System +Requires: sfa + +%description +This package provides the python libraries that the SFA implementation requires + +%description cm +This package implements the SFA interface which serves as a layer +between the existing PlanetLab NodeManager interfaces and the SFA API. + +%description plc +This package implements the SFA interface which serves as a layer +between the existing PlanetLab interfaces and the SFA API. + +%description client +This package provides the client side of the SFA API, in particular +sfi.py, together with other utilities. + +%description sfatables +sfatables is a tool for defining access and admission control policies +in an SFA network, in much the same way as iptables is for ip +networks. This is the command line interface to manage sfatables + +%prep +%setup -q + +%build +make + +%install +rm -rf $RPM_BUILD_ROOT +make install DESTDIR="$RPM_BUILD_ROOT" + +%clean +rm -rf $RPM_BUILD_ROOT + +%files +# sfa and sfatables depend each other. +%{_bindir}/sfa-server.py* +/etc/sfatables/* +%{python_sitelib}/* +%{_bindir}/keyconvert.py* +/var/www/html/wsdl/*.wsdl + +%files cm +/etc/init.d/sfa-cm +%{_bindir}/sfa_component_setup.py* +# cron jobs here + +%files plc +%defattr(-,root,root) +%config /etc/sfa/default_config.xml +%config (noreplace) /etc/sfa/aggregates.xml +%config (noreplace) /etc/sfa/registries.xml +/etc/init.d/sfa +/etc/sfa/pl.rng +%{_bindir}/sfa-config-tty +%{_bindir}/sfa-import-plc.py* +%{_bindir}/sfa-clean-peer-records.py* +%{_bindir}/sfa-nuke-plc.py* +%{_bindir}/gen-sfa-cm-config.py* +%{_bindir}/sfa-ca.py* + +%files client +%config (noreplace) /etc/sfa/sfi_config +%{_bindir}/sfi* +%{_bindir}/getNodes.py* +%{_bindir}/getRecord.py* +%{_bindir}/setRecord.py* +%{_bindir}/sfadump.py* + +%files sfatables +%{_bindir}/sfatables + +%pre plc +[ -f %{_sysconfdir}/init.d/sfa ] && service sfa stop ||: + +%pre cm +[ -f %{_sysconfdir}/init.d/sfa-cm ] && service sfa-cm stop ||: + +%post plc +chkconfig --add sfa + +%post cm +chkconfig --add sfa-cm + +%changelog +* Thu Sep 16 2010 Tony Mack - sfa-0.9-17 +- fixed bugs is sfa/util/namespace.py, sfa/plc/network.py and sfa/managers/aggregate_manager_pl.py + +* Tue Sep 07 2010 Tony Mack - sfa-0.9-16 +- truncate login base of external (ProtoGeni, etc) slices to 20 characters + to avoid returning a PLCAPI exception that might confuse users. +- Enhance PLC aggregate performace by using a better filter when querying SliceTags. +- fix build errors. + +* Tue Aug 24 2010 Tony Mack - sfa-0.9-15 +- (Architecture) Credential format changed to match ProtoGENI xml format +- (Architecture) All interfaces export a new set of methods that are compatible + with the ProtoGeni Aggregate spec. These new methods are considered a + replacement for the pervious methods exported by the interfaces. All + previous methods are still exported and work as normal, but they are + considered deprecated and will not be supported in future releases. +- (Architecture) SFI has been updated to use the new interface methods. +- (Architecture) Changed keyconvet implementation from c to python. +- (Architecture) Slice Manager now attempts looks for a delegated credential + provided by the client before using its own server credential. +- (Archiceture) Slice Interface no longers stores cache of resources on disk. + This cache now exists only in memory and is cleared when service is restarted + or cache lifetime is exceeded. +- (Performance) SliceManager sends request to Aggregates in parallel instead + of sequentially. +- (Bug fix) SFA tickets now support the new rspec format. +- (Bug fix) SFI only uses cahced credential if they aren't expired. +- (Bug fix) Cerdential delegation modified to work with new credential format. +- (Enhancement) SFI -a --aggregatge option now sends requests directly to the + Aggregate instead of relaying through the Slice Manager. +- (Enhancement) Simplified caching. Accociated a global cache instance with + the api handler on every new server request, making it easier to access the + cache and use in more general ways. + +%changelog +* Thu May 11 2010 Tony Mack - sfa-0.9-11 +- SfaServer now uses a pool of threads to handle requests concurrently +- sfa.util.rspec no longer used to process/manage rspecs (deprecated). This is now handled by sfa.plc.network and is not backwards compatible +- PIs can now get a slice credential for any slice at their site without having to be a member of the slice +- Registry records for federated peers (defined in registries.xml, aggregates.xml) updated when sfa service is started +- Interfaces will try to fetch and install gids from peers listed in registries.xml/aggregates.xml if gid is not found in /etc/sfa/trusted_roots dir +- Component manager does not install gid files if slice already has them +- Server automatically fetches and installs peer certificats (defined in registries/aggregates.xml) when service is restarted. +- fix credential verification exploit (verify that the trusted signer is a parent of the object it it signed) +- made it easier for root authorities to sign their sub's certifiacate using the sfa-ca.py (sfa/server/sfa-ca.py) tool + +* Thu Jan 21 2010 anil vengalil - sfa-0.9-10 +- This tag is quite same as the previous one (sfa-0.9-9) except that the vini and max aggregate managers are also updated for urn support. Other features are: +- - sfa-config-tty now has the same features like plc-config-tty +- - Contains code to support both urn and hrn +- - Cleaned up request_hash related stuff +- - SM, AM and Registry code is organized under respective managers +- - Site and Slice synchronization across federated aggregates +- - Script to generate sfa_component_config + +* Fri Jan 15 2010 anil vengalil - sfa-0.9-9 +- sfa-config-tty now has the same features like plc-config-tty +- Contains code to support both urn and hrn +- Cleaned up request_hash related stuff +- SM, AM and Registry code is organized under respective managers +- Slice synchronization across federated aggregates +- some bugs are fixed + +* Wed Jan 06 2010 Thierry Parmentelat - sfa-0.9-8 +- checkpoint with fewer mentions of geni + +* Tue Jan 05 2010 Thierry Parmentelat - sfa-0.9-7 +- checkpointing +- this is believed to pass the tests; among other things: +- reworked configuration based on the myplc config with xml skeleton (no more sfa_config) + +* Mon Nov 16 2009 anil vengalil - sfa-0.9-6 +- This tag includes: +- - Sfatables +- - Preliminary version of hash based authentication +- - Initial code for Component Manager +- - Authority structure is moved to /var/lib/sfa/ +- - some bug-fixes + +* Fri Oct 09 2009 anil vengalil - sfa-0.9-5 +- Create_slice and get_resources methods are connected to sfatables. +- Other features include compatibility with RP, handling remote objects created as part of federation, preliminary version of sfatables, call tracability and logging. + +* Wed Oct 07 2009 anil vengalil - sfa-0.9-4 +- Bug fix on update and remove_peer_object methods +- Compatibility with RP, preliminiary version of sfatables, call tracability and logging + +* Mon Oct 05 2009 anil vengalil - sfa-0.9-3 +- Compatibility with RP, two additional methods to handle remote objects, call tracability and logging, PLCDB now has single table for sfa records, preliminary version of sfatables (still under development) + +* Fri Sep 18 2009 Thierry Parmentelat - sfa-0.9-2 +- compatibility with RefreshPeer +- incremental mechanism for importing PLC records into SFA tables +- unified single database (still inside the underlying PLC db postgresql server) +- includes/improves call traceability and logging features +- several bug fixes + +* Thu Sep 17 2009 Baris Metin +- added libxslt-python dependency + +* Thu Sep 10 2009 Thierry Parmentelat - sfa-0.9-1 +- unified single SFA database in the PLC-DB +- upcalls from PLCAPI to SFA methods +- SFA call traceability and logging features +- many bug fixes +- includes first/rough version of sfatables for policy implementation + +* Thu Jul 23 2009 Thierry Parmentelat - geniwrapper-0.8-6 +- snapshot after the GEC5 demo +- should be the last tag set in the geniwrapper module, are we are now moving to the sfa module + +* Wed Jul 15 2009 Thierry Parmentelat - geniwrapper-0.8-5 +- snapshot july 15 - has gone through superficial manual testing +- hopefully a good basis for gec5 demo +- multi-dir sfi client tested as well + +* Wed Jul 08 2009 Thierry Parmentelat - geniwrapper-0.8-4 +- rename geniwrapper.spec into sfa.spec + +* Wed Jul 08 2009 Thierry Parmentelat - geniwrapper-0.8-3 +- clean up in xmlrpc/soap, --protocol option to chose between both +- keyconvert packaged in /usr/bin, no /usr/share/keyconvert anymore +- hopefully more helpful context in case of crashes when importing +- bugfixes for using only /etc/sfa for site-dep files +- bugfixes in wsdl generation + +* Mon Jul 06 2009 Thierry Parmentelat - geniwrapper-0.8-2 +- cleanup of the config area; no dependency to a PLC config anymore as sfa can be run in standalone +- config variables in sfa_config now start with SFA_ and not GENI_ +- config.py can be loaded even with no config present + +* Sun Jul 05 2009 Thierry Parmentelat - geniwrapper-0.8-1 +- first step for cleanup and reorganization +- mass-renaming from geni to sfa (some are still needed) +- sfa/trust implements the security architecture + +* Wed Jul 01 2009 Thierry Parmentelat - geniwrapper-0.2-7 +- snapshot for reproducible builds + +* Thu Jun 25 2009 Thierry Parmentelat - geniwrapper-0.2-6 +- snapshot for the convenience of alpha users + +* Tue Jun 16 2009 Thierry Parmentelat - geniwrapper-0.2-5 +- build fix - keyconvert was getting installed in /usr/share/keyconvert/keyconvert + +* Tue Jun 16 2009 Thierry Parmentelat - geniwrapper-0.2-4 +- ongoing work - snapshot for 4.3-rc9 + +* Wed Jun 03 2009 Thierry Parmentelat - geniwrapper-0.2-3 +- various fixes + +* Sat May 30 2009 Thierry Parmentelat - geniwrapper-0.2-2 +- bugfixes - still a work in progress + +* Fri May 18 2009 Baris Metin +- initial package + + +%define module_current_branch 0.2 diff --git a/sfa/Makefile b/sfa/Makefile new file mode 100644 index 00000000..06d3355c --- /dev/null +++ b/sfa/Makefile @@ -0,0 +1,5 @@ +tags: + find . -name '*.py' | grep -v '/\.svn/' | xargs etags +.PHONY: tags + + diff --git a/sfa/__init__.py b/sfa/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/sfa/client/__init__.py b/sfa/client/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/sfa/client/getNodes.py b/sfa/client/getNodes.py new file mode 100644 index 00000000..b87fa407 --- /dev/null +++ b/sfa/client/getNodes.py @@ -0,0 +1,84 @@ +#!/usr/bin/python + +import sys +import os +from optparse import OptionParser +from pprint import pprint +from types import StringTypes + +from sfa.util.rspec import RSpec + +def create_parser(): + command = sys.argv[0] + argv = sys.argv[1:] + usage = "%(command)s [options]" % locals() + description = """getNodes will open a rspec file and print all key/values, or filter results based on a given key or set of keys.""" + parser = OptionParser(usage=usage,description=description) + parser.add_option("-i", "--infile", dest="infile", default=None, help = "input rspec file") + parser.add_option("-t", "--tag", dest="tag", default=None, help = "filter rspec for this tag") + parser.add_option("-a", "--attribute", dest="attribute", default=None, help = "comma separated list of attributes to display") + parser.add_option("-r", "--recursive", dest="print_children", default=False, action="store_true", help = "print the tag's child nodes") + + return parser + + +def print_dict(rdict, options, counter=1): + print_children = options.print_children + attributes = [] + if options.attribute: + attributes = options.attribute.split(',') + lists = [] + tab = " " + + if not isinstance(rdict, dict): + raise "%s not a dict" % rdict + for (key, value) in rdict.items(): + if isinstance(value, StringTypes): + if (attributes and key in attributes) or not attributes: + print tab * counter + "%s: %s" % (key, value) + elif isinstance(value, list): + for listitem in value: + if isinstance(listitem, dict): + lists.append((key, listitem)) + elif isinstance(value, dict): + lists.append((key, value)) + + if counter == 1 or print_children: + for (key, listitem) in lists: + if isinstance(listitem, dict): + print tab * (counter - 1) + key + print_dict(listitem, options, counter+1) + elif not attributes or (attributes and 'children' in attributes): + keys = set([key for (key, listitem) in lists]) + if keys: print tab * (counter) + "(children: %s)" % (",".join(keys)) + + +def main(): + parser = create_parser(); + (options, args) = parser.parse_args() + if not options.infile: + print "RSpec file not specified" + return + + rspec = RSpec() + try: + rspec.parseFile(options.infile) + except: + print "Error reading rspec file" + + if options.tag: + tag_name = options.tag + rspec_dicts = rspec.getDictsByTagName(tag_name) + rspec_dict = {tag_name: rspec_dicts} + else: + rspec_dict = rspec.toDict() + + print_dict(rspec_dict, options) + + return + +if __name__ == '__main__': + try: main() + except Exception, e: + raise + print e diff --git a/sfa/client/getRecord.py b/sfa/client/getRecord.py new file mode 100755 index 00000000..3926027d --- /dev/null +++ b/sfa/client/getRecord.py @@ -0,0 +1,91 @@ +#!/usr/bin/python + +""" +Filters/Prints record objects + + +faiyaza at cs dot princeton dot edu +Copyright (c) 2009 Board of Trustees, Princeton University + +$Id: getRecord.py 14252 2009-07-03 14:40:59Z thierry $ +$HeadURL$ +""" + +import sys +import os +from optparse import OptionParser +from pprint import pprint +from xml.parsers.expat import ExpatError + +from sfa.util.rspec import RecordSpec + + +def create_parser(): + command = sys.argv[0] + argv = sys.argv[1:] + usage = "%(command)s [options]" % locals() + description = """getRecord will parse a supplied (via stdin) record and print all values or key/values, and filter results based on a given key or set of keys.""" + parser = OptionParser(usage=usage,description=description) + parser.add_option("-d", "--debug", dest="DEBUG", action="store_true", + default=False, help = "record file path") + parser.add_option("-k", "--key", dest="withkey", action="store_true", + default=False, help = "print SSH keys and certificates") + parser.add_option("-p", "--plinfo", dest="plinfo", action="store_true", + default=False, help = "print PlanetLab specific internal fields") + + return parser + + +def printRec(record, filters, options): + line = "" + if len(filters): + for filter in filters: + if options.DEBUG: print "Filtering on %s" %filter + line += "%s: %s\n" % (filter, + printVal(record.dict["record"].get(filter, None))) + print line + else: + # print the wole thing + for (key, value) in record.dict["record"].iteritems(): + if (not options.withkey and key in ('gid', 'keys')) or\ + (not options.plinfo and key == 'pl_info'): + continue + line += "%s: %s\n" % (key, printVal(value)) + print line + + +# fix the iteratable values +def printVal(value): + line = "" + if type(value) in (tuple, list): + for i in value: + line += "%s " % i + elif value != None: + line += value + return line.rstrip("\n") + + +def main(): + parser = create_parser(); + (options, args) = parser.parse_args() + + stdin = sys.stdin.read() + + record = RecordSpec(xml = stdin) + + if not record.dict.has_key("record"): + raise "RecordError", "Input record does not have 'record' tag." + + if options.DEBUG: + record.pprint() + print "#####################################################" + + printRec(record, args, options) + +if __name__ == '__main__': + try: main() + except ExpatError, e: + print "RecordError. Is your record valid XML?" + print e + except Exception, e: + print e diff --git a/sfa/client/setRecord.py b/sfa/client/setRecord.py new file mode 100755 index 00000000..15911285 --- /dev/null +++ b/sfa/client/setRecord.py @@ -0,0 +1,112 @@ +#!/usr/bin/python + +""" +Updates record objects + + +faiyaza at cs dot princeton dot edu +Copyright (c) 2009 Board of Trustees, Princeton University + +$Id: setRecord.py 16200 2009-12-16 04:44:09Z thierry $ +$HeadURL$ +""" + +import sys +sys.path.append('.') +import os +from optparse import OptionParser +from pprint import pprint + +from sfa.util.rspec import RecordSpec + + +def create_parser(): + command = sys.argv[0] + argv = sys.argv[1:] + usage = "%(command)s [options]" % locals() + description = """setRecord will edit a record (from stdin), modify its contents, then print the new record to stdout""" + parser = OptionParser(usage=usage,description=description) + parser.add_option("-d", "--debug", dest="DEBUG", action="store_true", + default=False, help = "print debug info") + + return parser + + +def editDict(args, recordDict, options): + """ + Takes the arg list, seperates into tag/value, creates a dict, then munges args. + """ + # find out if its iterable. + for vect in args: + if vect.count("+="): + # append value + modDict({vect.split("+=")[0]: returnVal(vect.split("+=")[1])}, + recordDict, options) + + elif vect.count("="): + # reassign value + replaceDict({vect.split("=")[0]: returnVal("=".join(vect.split("=")[1:]))}, + recordDict, options) + else: + if vect in recordDict: + del recordDict[vect] + else: + raise TypeError, "Argument error: Records are updated with \n" \ + "key=val1,val2,valN or\n" \ + "key+=val1,val2,valN \n%s Unknown key/val" % vect + + +def replaceDict(newval, recordDict, options): + """ + Replaces field in dict + """ + # Check type of old field matches type of new field + for (key, val) in newval.iteritems(): + recordDict[key] = val + +def modDict(newval, recordDict, options): + """ + Checks type of existing field, addends new field + """ + for (key, val) in newval.iteritems(): + if (type(recordDict[key]) == list): + if (type(val) == list): + recordDict[key] = recordDict[key] + val + else: + recordDict[key].append(val) + elif type(val) == list: + val.append(recordDict[key]) + recordDict[key] = val + else: + recordDict[key] = [recordDict[key], val] + + +def returnVal(arg): + """ + if given input has ",", then its assumed to be a list. + """ + if arg.count(","): + return list(arg.split(",")) + else: + return arg + +def main(): + parser = create_parser(); + (options, args) = parser.parse_args() + + record = RecordSpec(xml = sys.stdin.read()) + + if args: + editDict(args, record.dict["record"], options) + if options.DEBUG: + print "New Record:\n%s" % record.dict + record.pprint() + + record.parseDict(record.dict) + s = record.toxml() + sys.stdout.write(s) + +if __name__ == '__main__': + try: main() + except Exception, e: + print e diff --git a/sfa/client/sfadump.py b/sfa/client/sfadump.py new file mode 100644 index 00000000..9d96da7f --- /dev/null +++ b/sfa/client/sfadump.py @@ -0,0 +1,94 @@ +#! /usr/bin/env python +# $Id: sfadump.py 16477 2010-01-05 16:31:37Z thierry $ +# $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/client/sfadump.py $ +from __future__ import with_statement + +import sys +import os, os.path +import tempfile +import xmlrpclib +from types import StringTypes, ListType +from optparse import OptionParser + +from sfa.trust.certificate import Certificate +from sfa.trust.credential import Credential +from sfa.util.record import SfaRecord +from sfa.util.rspec import RSpec + +def determine_sfa_filekind(fn): + cert = Certificate(filename = fn) + + data = cert.get_data() + if data: + dict = xmlrpclib.loads(data)[0][0] + else: + dict = {} + + if "gidCaller" in dict: + return "credential" + + if "uuid" in dict: + return "gid" + + return "unknown" + +def save_gid(gid): + hrn = gid.get_hrn() + lastpart = hrn.split(".")[-1] + filename = lastpart + ".gid" + + if os.path.exists(filename): + print filename, ": already exists... skipping" + return + + print filename, ": extracting gid of", hrn + + gid.save_to_file(filename, save_parents = True) + +def extract_gids(cred, extract_parents): + gidCaller = cred.get_gid_caller() + if gidCaller: + save_gid(gidCaller) + + gidObject = cred.get_gid_object() + if gidObject and ((gidCaller == None) or (gidCaller.get_hrn() != gidObject.get_hrn())): + save_gid(gidObject) + + if extract_parents: + parent = cred.get_parent() + if parent: + extract_gids(parent, extract_parents) + +def create_parser(): + # Generate command line parser + parser = OptionParser(usage="%prog [options] filename") + + parser.add_option("-e", "--extractgids", action="store_true", dest="extract_gids", default=False, help="Extract GIDs from credentials") + parser.add_option("-p", "--dumpparents", action="store_true", dest="dump_parents", default=False, help="Show parents") + + return parser + +def main(): + parser = create_parser() + (options, args) = parser.parse_args() + + if len(args) <= 0: + print "No filename given. Use -h for help." + return -1 + + filename = args[0] + kind = determine_sfa_filekind(filename) + + if kind=="credential": + cred = Credential(filename = filename) + cred.dump(dump_parents = options.dump_parents) + if options.extract_gids: + extract_gids(cred, extract_parents = options.dump_parents) + elif kind=="gid": + gid = Gid(filename = filename) + gid.dump(dump_parents = options.dump_parents) + else: + print "unknown filekind", kind + +if __name__=="__main__": + main() diff --git a/sfa/client/sfi.py b/sfa/client/sfi.py new file mode 100755 index 00000000..d299b89b --- /dev/null +++ b/sfa/client/sfi.py @@ -0,0 +1,937 @@ +#! /usr/bin/env python + +# sfi -- slice-based facility interface + +import sys +sys.path.append('.') +import os, os.path +import tempfile +import traceback +import socket +import random +import datetime +from lxml import etree +from StringIO import StringIO +from types import StringTypes, ListType +from optparse import OptionParser +from sfa.trust.certificate import Keypair, Certificate +from sfa.trust.credential import Credential +from sfa.util.sfaticket import SfaTicket +from sfa.util.record import * +from sfa.util.namespace import * +from sfa.util.xmlrpcprotocol import ServerException +import sfa.util.xmlrpcprotocol as xmlrpcprotocol +from sfa.util.config import Config +import zlib + +AGGREGATE_PORT=12346 +CM_PORT=12346 + +# utility methods here +# display methods +def display_rspec(rspec, format='rspec'): + if format in ['dns']: + tree = etree.parse(StringIO(rspec)) + root = tree.getroot() + result = root.xpath("./network/site/node/hostname/text()") + elif format in ['ip']: + # The IP address is not yet part of the new RSpec + # so this doesn't do anything yet. + tree = etree.parse(StringIO(rspec)) + root = tree.getroot() + result = root.xpath("./network/site/node/ipv4/text()") + else: + result = rspec + + print result + return + +def display_list(results): + for result in results: + print result + +def display_records(recordList, dump=False): + ''' Print all fields in the record''' + for record in recordList: + display_record(record, dump) + +def display_record(record, dump=False): + if dump: + record.dump() + else: + info = record.getdict() + print "%s (%s)" % (info['hrn'], info['type']) + return + + +def filter_records(type, records): + filtered_records = [] + for record in records: + if (record['type'] == type) or (type == "all"): + filtered_records.append(record) + return filtered_records + + +# save methods +def save_rspec_to_file(rspec, filename): + if not filename.endswith(".rspec"): + filename = filename + ".rspec" + + f = open(filename, 'w') + f.write(rspec) + f.close() + return + +def save_records_to_file(filename, recordList): + index = 0 + for record in recordList: + if index > 0: + save_record_to_file(filename + "." + str(index), record) + else: + save_record_to_file(filename, record) + index = index + 1 + +def save_record_to_file(filename, record): + if record['type'] in ['user']: + record = UserRecord(dict=record) + elif record['type'] in ['slice']: + record = SliceRecord(dict=record) + elif record['type'] in ['node']: + record = NodeRecord(dict=record) + elif record['type'] in ['authority', 'ma', 'sa']: + record = AuthorityRecord(dict=record) + else: + record = SfaRecord(dict=record) + str = record.save_to_string() + file(filename, "w").write(str) + return + + +# load methods +def load_record_from_file(filename): + str = file(filename, "r").read() + record = SfaRecord(string=str) + return record + + + +class Sfi: + + slicemgr = None + registry = None + user = None + authority = None + options = None + hashrequest = False + + def create_cmd_parser(self, command, additional_cmdargs=None): + cmdargs = {"list": "name", + "show": "name", + "remove": "name", + "add": "record", + "update": "record", + "aggregates": "[name]", + "registries": "[name]", + "get_gid": [], + "get_trusted_certs": "cred", + "slices": "", + "resources": "[name]", + "create": "name rspec", + "get_ticket": "name rspec", + "redeem_ticket": "ticket", + "delete": "name", + "reset": "name", + "start": "name", + "stop": "name", + "delegate": "name", + "status": "name", + "renew": "name", + "shutdown": "name", + "version": "", + } + + if additional_cmdargs: + cmdargs.update(additional_cmdargs) + + if command not in cmdargs: + print "Invalid command\n" + print "Commands: ", + for key in cmdargs.keys(): + print key + ",", + print "" + sys.exit(2) + + parser = OptionParser(usage="sfi [sfi_options] %s [options] %s" \ + % (command, cmdargs[command])) + + # user specifies remote aggregate/sm/component + if command in ("resources", "slices", "create", "delete", "start", "stop", "restart", "get_ticket", "redeem_ticket"): + parser.add_option("-a", "--aggregate", dest="aggregate", + default=None, help="aggregate host") + parser.add_option("-p", "--port", dest="port", + default=AGGREGATE_PORT, help="aggregate port") + parser.add_option("-c", "--component", dest="component", default=None, + help="component hrn") + + # registy filter option + if command in ("list", "show", "remove"): + parser.add_option("-t", "--type", dest="type", type="choice", + help="type filter ([all]|user|slice|authority|node|aggregate)", + choices=("all", "user", "slice", "authority", "node", "aggregate"), + default="all") + # display formats + if command in ("resources"): + parser.add_option("-f", "--format", dest="format", type="choice", + help="display format ([xml]|dns|ip)", default="xml", + choices=("xml", "dns", "ip")) + + if command in ("resources", "show", "list"): + parser.add_option("-o", "--output", dest="file", + help="output XML to file", metavar="FILE", default=None) + + if command in ("show", "list"): + parser.add_option("-f", "--format", dest="format", type="choice", + help="display format ([text]|xml)", default="text", + choices=("text", "xml")) + + if command in ("delegate"): + parser.add_option("-u", "--user", + action="store_true", dest="delegate_user", default=False, + help="delegate user credential") + parser.add_option("-s", "--slice", dest="delegate_slice", + help="delegate slice credential", metavar="HRN", default=None) + + return parser + + + def create_parser(self): + + # Generate command line parser + parser = OptionParser(usage="sfi [options] command [command_options] [command_args]", + description="Commands: gid,list,show,remove,add,update,nodes,slices,resources,create,delete,start,stop,reset") + parser.add_option("-r", "--registry", dest="registry", + help="root registry", metavar="URL", default=None) + parser.add_option("-s", "--slicemgr", dest="sm", + help="slice manager", metavar="URL", default=None) + default_sfi_dir = os.path.expanduser("~/.sfi/") + parser.add_option("-d", "--dir", dest="sfi_dir", + help="config & working directory - default is " + default_sfi_dir, + metavar="PATH", default=default_sfi_dir) + parser.add_option("-u", "--user", dest="user", + help="user name", metavar="HRN", default=None) + parser.add_option("-a", "--auth", dest="auth", + help="authority name", metavar="HRN", default=None) + parser.add_option("-v", "--verbose", + action="store_true", dest="verbose", default=False, + help="verbose mode") + parser.add_option("-D", "--debug", + action="store_true", dest="debug", default=False, + help="Debug (xml-rpc) protocol messages") + parser.add_option("-p", "--protocol", + dest="protocol", default="xmlrpc", + help="RPC protocol (xmlrpc or soap)") + parser.add_option("-k", "--hashrequest", + action="store_true", dest="hashrequest", default=False, + help="Create a hash of the request that will be authenticated on the server") + parser.disable_interspersed_args() + + return parser + + + # + # Establish Connection to SliceMgr and Registry Servers + # + def set_servers(self): + config_file = self.options.sfi_dir + os.sep + "sfi_config" + try: + config = Config (config_file) + except: + print "Failed to read configuration file", config_file + print "Make sure to remove the export clauses and to add quotes" + if not self.options.verbose: + print "Re-run with -v for more details" + else: + traceback.print_exc() + sys.exit(1) + + errors = 0 + # Set SliceMgr URL + if (self.options.sm is not None): + sm_url = self.options.sm + elif hasattr(config, "SFI_SM"): + sm_url = config.SFI_SM + else: + print "You need to set e.g. SFI_SM='http://your.slicemanager.url:12347/' in %s" % config_file + errors += 1 + + # Set Registry URL + if (self.options.registry is not None): + reg_url = self.options.registry + elif hasattr(config, "SFI_REGISTRY"): + reg_url = config.SFI_REGISTRY + else: + print "You need to set e.g. SFI_REGISTRY='http://your.registry.url:12345/' in %s" % config_file + errors += 1 + + + # Set user HRN + if (self.options.user is not None): + self.user = self.options.user + elif hasattr(config, "SFI_USER"): + self.user = config.SFI_USER + else: + print "You need to set e.g. SFI_USER='plc.princeton.username' in %s" % config_file + errors += 1 + + # Set authority HRN + if (self.options.auth is not None): + self.authority = self.options.auth + elif hasattr(config, "SFI_AUTH"): + self.authority = config.SFI_AUTH + else: + print "You need to set e.g. SFI_AUTH='plc.princeton' in %s" % config_file + errors += 1 + + if errors: + sys.exit(1) + + if self.options.verbose : + print "Contacting Slice Manager at:", sm_url + print "Contacting Registry at:", reg_url + + # Get key and certificate + key_file = self.get_key_file() + cert_file = self.get_cert_file(key_file) + self.key = Keypair(filename=key_file) + self.key_file = key_file + self.cert_file = cert_file + self.cert = Certificate(filename=cert_file) + # Establish connection to server(s) + self.registry = xmlrpcprotocol.get_server(reg_url, key_file, cert_file, self.options.debug) + self.slicemgr = xmlrpcprotocol.get_server(sm_url, key_file, cert_file, self.options.debug) + + return + + # + # Get various credential and spec files + # + # Establishes limiting conventions + # - conflates MAs and SAs + # - assumes last token in slice name is unique + # + # Bootstraps credentials + # - bootstrap user credential from self-signed certificate + # - bootstrap authority credential from user credential + # - bootstrap slice credential from user credential + # + + + def get_key_file(self): + file = os.path.join(self.options.sfi_dir, self.user.replace(self.authority + '.', '') + ".pkey") + #file = os.path.join(self.options.sfi_dir, get_leaf(self.user) + ".pkey") + if (os.path.isfile(file)): + return file + else: + print "Key file", file, "does not exist" + sys.exit(-1) + return + + def get_cert_file(self, key_file): + + #file = os.path.join(self.options.sfi_dir, get_leaf(self.user) + ".cert") + file = os.path.join(self.options.sfi_dir, self.user.replace(self.authority + '.', '') + ".cert") + if (os.path.isfile(file)): + return file + else: + k = Keypair(filename=key_file) + cert = Certificate(subject=self.user) + cert.set_pubkey(k) + cert.set_issuer(k, self.user) + cert.sign() + if self.options.verbose : + print "Writing self-signed certificate to", file + cert.save_to_file(file) + return file + + def get_cached_gid(self, file): + """ + Return a cached gid + """ + gid = None + if (os.path.isfile(file)): + gid = GID(filename=file) + return gid + + def get_gid(self, opts, args): + hrn = None + if args: + hrn = args[0] + gid = self._get_gid(hrn) + print gid.save_to_string(save_parents=True) + return gid + + def _get_gid(self, hrn=None): + if not hrn: + hrn = self.user + + gidfile = os.path.join(self.options.sfi_dir, hrn + ".gid") + gid = self.get_cached_gid(gidfile) + if not gid: + user_cred = self.get_user_cred() + records = self.registry.Resolve(hrn, user_cred.save_to_string(save_parents=True)) + if not records: + raise RecordNotFound(args[0]) + gid = GID(string=records[0]['gid']) + if self.options.verbose: + print "Writing gid to ", gidfile + gid.save_to_file(filename=gidfile) + return gid + + + def get_cached_credential(self, file): + """ + Return a cached credential only if it hasn't expired. + """ + if (os.path.isfile(file)): + credential = Credential(filename=file) + # make sure it isnt expired + if not credential.get_lifetime or \ + datetime.datetime.today() < credential.get_lifetime(): + return credential + return None + + def get_user_cred(self): + #file = os.path.join(self.options.sfi_dir, get_leaf(self.user) + ".cred") + file = os.path.join(self.options.sfi_dir, self.user.replace(self.authority + '.', '') + ".cred") + return self.get_cred(file, 'user', self.user) + + def get_auth_cred(self): + if not self.authority: + print "no authority specified. Use -a or set SF_AUTH" + sys.exit(-1) + file = os.path.join(self.options.sfi_dir, get_leaf("authority") + ".cred") + return self.get_cred(file, 'authority', self.authority) + + def get_slice_cred(self, name): + file = os.path.join(self.options.sfi_dir, "slice_" + get_leaf(name) + ".cred") + return self.get_cred(file, 'slice', name) + + def get_cred(self, file, type, hrn): + # attempt to load a cached credential + cred = self.get_cached_credential(file) + if not cred: + if type in ['user']: + cert_string = self.cert.save_to_string(save_parents=True) + user_name = self.user.replace(self.authority + ".", '') + if user_name.count(".") > 0: + user_name = user_name.replace(".", '_') + self.user = self.authority + "." + user_name + cred_str = self.registry.get_self_credential(cert_string, "user", hrn) + else: + # bootstrap slice credential from user credential + user_cred = self.get_user_cred().save_to_string(save_parents=True) + cred_str = self.registry.get_credential(user_cred, type, hrn) + + if not cred_str: + print "Failed to get %s credential" % (type) + sys.exit(-1) + + cred = Credential(string=cred_str) + cred.save_to_file(file, save_parents=True) + if self.options.verbose: + print "Writing %s credential to %s" %(type, file) + + return cred + + + def get_rspec_file(self, rspec): + if (os.path.isabs(rspec)): + file = rspec + else: + file = os.path.join(self.options.sfi_dir, rspec) + if (os.path.isfile(file)): + return file + else: + print "No such rspec file", rspec + sys.exit(1) + + def get_record_file(self, record): + if (os.path.isabs(record)): + file = record + else: + file = os.path.join(self.options.sfi_dir, record) + if (os.path.isfile(file)): + return file + else: + print "No such registry record file", record + sys.exit(1) + + def load_publickey_string(self, fn): + f = file(fn, "r") + key_string = f.read() + + # if the filename is a private key file, then extract the public key + if "PRIVATE KEY" in key_string: + outfn = tempfile.mktemp() + cmd = "openssl rsa -in " + fn + " -pubout -outform PEM -out " + outfn + os.system(cmd) + f = file(outfn, "r") + key_string = f.read() + os.remove(outfn) + + return key_string + + def get_component_server_from_hrn(self, hrn): + # direct connection to the nodes component manager interface + user_cred = self.get_user_cred().save_to_string(save_parents=True) + records = self.registry.Resolve(hrn, user_cred) + records = filter_records('node', records) + if not records: + print "No such component:", opts.component + record = records[0] + + return self.get_server(record['hostname'], CM_PORT, self.key_file, \ + self.cert_file, self.options.debug) + + def get_server(self, host, port, keyfile, certfile, debug): + """ + Return an instnace of an xmlrpc server connection + """ + url = "http://%s:%s" % (host, port) + return xmlrpcprotocol.get_server(url, keyfile, certfile, debug) + + def get_server_from_opts(self, opts): + """ + Return instance of an xmlrpc connection to a slice manager, aggregate + or component server depending on the specified opts + """ + server = self.slicemgr + # direct connection to an aggregate + if hasattr(opts, 'aggregate') and opts.aggregate: + server = self.get_server(opts.aggregate, opts.port, self.key_file, \ + self.cert_file, self.options.debug) + # direct connection to the nodes component manager interface + if hasattr(opts, 'component') and opts.component: + server = self.get_component_server_from_hrn(opts.component) + + return server + #========================================================================== + # Following functions implement the commands + # + # Registry-related commands + #========================================================================== + + def dispatch(self, command, cmd_opts, cmd_args): + getattr(self, command)(cmd_opts, cmd_args) + + # list entires in named authority registry + def list(self, opts, args): + user_cred = self.get_user_cred().save_to_string(save_parents=True) + hrn = args[0] + try: + list = self.registry.List(hrn, user_cred) + except IndexError: + raise Exception, "Not enough parameters for the 'list' command" + + # filter on person, slice, site, node, etc. + # THis really should be in the self.filter_records funct def comment... + list = filter_records(opts.type, list) + for record in list: + print "%s (%s)" % (record['hrn'], record['type']) + if opts.file: + file = opts.file + if not file.startswith(os.sep): + file = os.path.join(self.options.sfi_dir, file) + save_records_to_file(file, list) + return + + # show named registry record + def show(self, opts, args): + user_cred = self.get_user_cred().save_to_string(save_parents=True) + hrn = args[0] + records = self.registry.Resolve(hrn, user_cred) + records = filter_records(opts.type, records) + if not records: + print "No record of type", opts.type + for record in records: + if record['type'] in ['user']: + record = UserRecord(dict=record) + elif record['type'] in ['slice']: + record = SliceRecord(dict=record) + elif record['type'] in ['node']: + record = NodeRecord(dict=record) + elif record['type'] in ['authority', 'ma', 'sa']: + record = AuthorityRecord(dict=record) + else: + record = SfaRecord(dict=record) + if (opts.format == "text"): + record.dump() + else: + print record.save_to_string() + + if opts.file: + file = opts.file + if not file.startswith(os.sep): + file = os.path.join(self.options.sfi_dir, file) + save_records_to_file(file, records) + return + + 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: + print "Must specify either --user or --slice " + 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) + + print "delegated credential for", object_hrn, "to", delegee_hrn, "and wrote to", 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(): + print "Error: Object credential", object_hrn, "does not have delegate bit set" + 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) + hrn = args[0] + type = opts.type + if type in ['all']: + type = '*' + return self.registry.Remove(hrn, auth_cred, type) + + # add named registry record + def add(self, opts, args): + auth_cred = self.get_auth_cred().save_to_string(save_parents=True) + record_filepath = args[0] + rec_file = self.get_record_file(record_filepath) + record = load_record_from_file(rec_file).as_dict() + return self.registry.Register(record, auth_cred) + + # update named registry entry + def update(self, opts, args): + user_cred = self.get_user_cred() + rec_file = self.get_record_file(args[0]) + record = load_record_from_file(rec_file) + if record['type'] == "user": + if record.get_name() == user_cred.get_gid_object().get_hrn(): + cred = user_cred.save_to_string(save_parents=True) + else: + cred = self.get_auth_cred().save_to_string(save_parents=True) + elif record['type'] in ["slice"]: + try: + cred = self.get_slice_cred(record.get_name()).save_to_string(save_parents=True) + except ServerException, e: + # XXX smbaker -- once we have better error return codes, update this + # to do something better than a string compare + if "Permission error" in e.args[0]: + cred = self.get_auth_cred().save_to_string(save_parents=True) + else: + raise + elif record.get_type() in ["authority"]: + cred = self.get_auth_cred().save_to_string(save_parents=True) + elif record.get_type() == 'node': + cred = self.get_auth_cred().save_to_string(save_parents=True) + else: + raise "unknown record type" + record.get_type() + record = record.as_dict() + return self.registry.Update(record, cred) + + def get_trusted_certs(self, opts, args): + """ + return uhe trusted certs at this interface + """ + trusted_certs = self.registry.get_trusted_certs() + for trusted_cert in trusted_certs: + cert = Certificate(string=trusted_cert) + print cert.get_subject() + return + + def aggregates(self, opts, args): + """ + return a list of details about known aggregates + """ + user_cred = self.get_user_cred().save_to_string(save_parents=True) + hrn = None + if args: + hrn = args[0] + + result = self.registry.get_aggregates(user_cred, hrn) + display_list(result) + return + + def registries(self, opts, args): + """ + return a list of details about known registries + """ + user_cred = self.get_user_cred().save_to_string(save_parents=True) + hrn = None + if args: + hrn = args[0] + result = self.registry.get_registries(user_cred, hrn) + display_list(result) + return + + + # ================================================================== + # Slice-related commands + # ================================================================== + + + def version(self, opts, args): + server = self.get_server_from_opts(opts) + + print server.GetVersion() + + # list instantiated slices + def slices(self, opts, args): + """ + list instantiated slices + """ + user_cred = self.get_user_cred().save_to_string(save_parents=True) + delegated_cred = self.delegate_cred(user_cred, get_authority(self.authority)) + creds = [user_cred, delegated_cred] + server = self.get_server_from_opts(opts) + results = server.ListSlices(creds) + display_list(results) + return + + # show rspec for named slice + def resources(self, opts, args): + user_cred = self.get_user_cred().save_to_string(save_parents=True) + server = self.slicemgr + call_options = {} + server = self.get_server_from_opts(opts) + + if args: + cred = self.get_slice_cred(args[0]).save_to_string(save_parents=True) + hrn = args[0] + call_options = {'geni_slice_urn': hrn_to_urn(hrn, 'slice')} + else: + cred = user_cred + hrn = None + + delegated_cred = self.delegate_cred(cred, get_authority(self.authority)) + creds = [cred, delegated_cred] + result = server.ListResources(creds, call_options) + format = opts.format + display_rspec(result, format) + if (opts.file is not None): + file = opts.file + if not file.startswith(os.sep): + file = os.path.join(self.options.sfi_dir, file) + save_rspec_to_file(result, file) + return + + # created named slice with given rspec + def create(self, opts, args): + slice_hrn = args[0] + slice_urn = hrn_to_urn(slice_hrn, 'slice') + user_cred = self.get_user_cred() + slice_cred = self.get_slice_cred(slice_hrn).save_to_string(save_parents=True) + delegated_cred = self.delegate_cred(slice_cred, get_authority(self.authority)) + creds = [slice_cred, delegated_cred] + rspec_file = self.get_rspec_file(args[1]) + rspec = open(rspec_file).read() + server = self.get_server_from_opts(opts) + result = server.CreateSliver(slice_urn, creds, rspec, []) + print result + return result + + # get a ticket for the specified slice + def get_ticket(self, opts, args): + slice_hrn, rspec_path = args[0], args[1] + slice_urn = hrn_to_urn(slice_hrn, 'slice') + user_cred = self.get_user_cred() + slice_cred = self.get_slice_cred(slice_hrn).save_to_string(save_parents=True) + delegated_cred = self.delegate_cred(slice_cred, get_authority(self.authority)) + creds = [slice_cred, delegated_cred] + rspec_file = self.get_rspec_file(rspec_path) + rspec = open(rspec_file).read() + server = self.get_server_from_opts(opts) + ticket_string = server.GetTicket(slice_urn, creds, rspec, []) + file = os.path.join(self.options.sfi_dir, get_leaf(slice_hrn) + ".ticket") + print "writing ticket to ", file + ticket = SfaTicket(string=ticket_string) + ticket.save_to_file(filename=file, save_parents=True) + + def redeem_ticket(self, opts, args): + ticket_file = args[0] + + # get slice hrn from the ticket + # use this to get the right slice credential + ticket = SfaTicket(filename=ticket_file) + ticket.decode() + slice_hrn = ticket.gidObject.get_hrn() + slice_urn = hrn_to_urn(slice_hrn, 'slice') + #slice_hrn = ticket.attributes['slivers'][0]['hrn'] + user_cred = self.get_user_cred() + slice_cred = self.get_slice_cred(slice_hrn).save_to_string(save_parents=True) + + # get a list of node hostnames from the RSpec + tree = etree.parse(StringIO(ticket.rspec)) + root = tree.getroot() + hostnames = root.xpath("./network/site/node/hostname/text()") + + # create an xmlrpc connection to the component manager at each of these + # components and gall redeem_ticket + connections = {} + for hostname in hostnames: + try: + print "Calling redeem_ticket at %(hostname)s " % locals(), + server = self.get_server(hostname, CM_PORT, self.key_file, \ + self.cert_file, self.options.debug) + server.RedeemTicket(ticket.save_to_string(save_parents=True), slice_cred) + print "Success" + except socket.gaierror: + print "Failed:", + print "Componet Manager not accepting requests" + except Exception, e: + print "Failed:", e.message + return + + # delete named slice + def delete(self, opts, args): + slice_hrn = args[0] + slice_urn = hrn_to_urn(slice_hrn, 'slice') + slice_cred = self.get_slice_cred(slice_hrn).save_to_string(save_parents=True) + delegated_cred = self.delegate_cred(slice_cred, get_authority(self.authority)) + creds = [slice_cred, delegated_cred] + server = self.get_server_from_opts(opts) + return server.DeleteSliver(slice_urn, creds) + + # start named slice + def start(self, opts, args): + slice_hrn = args[0] + slice_urn = hrn_to_urn(slice_hrn, 'slice') + slice_cred = self.get_slice_cred(args[0]).save_to_string(save_parents=True) + delegated_cred = self.delegate_cred(slice_cred, get_authority(self.authority)) + creds = [slice_cred, delegated_cred] + server = self.get_server_from_opts(opts) + return server.Start(slice_urn, creds) + + # stop named slice + def stop(self, opts, args): + slice_hrn = args[0] + slice_urn = hrn_to_urn(slice_hrn, 'slice') + slice_cred = self.get_slice_cred(args[0]).save_to_string(save_parents=True) + delegated_cred = self.delegate_cred(slice_cred, get_authority(self.authority)) + creds = [slice_cred, delegated_cred] + server = self.get_server_from_opts(opts) + return server.Stop(slice_urn, creds) + + # reset named slice + def reset(self, opts, args): + slice_hrn = args[0] + slice_urn = hrn_to_urn(slice_hrn, 'slice') + server = self.get_server_from_opts(opts) + slice_cred = self.get_slice_cred(args[0]).save_to_string(save_parents=True) + delegated_cred = self.delegate_cred(slice_cred, get_authority(self.authority)) + creds = [slice_cred, delegated_cred] + return server.reset_slice(creds, slice_urn) + + def renew(self, opts, args): + slice_hrn = args[0] + slice_urn = hrn_to_urn(slice_hrn, 'slice') + server = self.get_server_from_opts(opts) + slice_cred = self.get_slice_cred(args[0]).save_to_string(save_parents=True) + delegated_cred = self.delegate_cred(slice_cred, get_authority(self.authority)) + creds = [slice_cred, delegated_cred] + time = args[1] + return server.RenewSliver(slice_urn, creds, time) + + + def status(self, opts, args): + slice_hrn = args[0] + slice_urn = hrn_to_urn(slice_hrn, 'slice') + slice_cred = self.get_slice_cred(slice_hrn).save_to_string(save_parents=True) + delegated_cred = self.delegate_cred(slice_cred, get_authority(self.authority)) + creds = [slice_cred, delegated_cred] + server = self.get_server_from_opts(opts) + print server.SliverStatus(slice_urn, creds) + + + def shutdown(self, opts, args): + slice_hrn = args[0] + slice_urn = hrn_to_urn(slice_hrn, 'slice') + slice_cred = self.get_slice_cred(slice_hrn).save_to_string(save_parents=True) + delegated_cred = self.delegate_cred(slice_cred, get_authority(self.authority)) + + server = self.get_server_from_opts(opts) + return server.Shutdown(slice_urn, [slice_cred]) + + # + # Main: parse arguments and dispatch to command + # + def main(self): + parser = self.create_parser() + (options, args) = parser.parse_args() + self.options = options + + if options.hashrequest: + self.hashrequest = True + + if len(args) <= 0: + print "No command given. Use -h for help." + return - 1 + + command = args[0] + (cmd_opts, cmd_args) = self.create_cmd_parser(command).parse_args(args[1:]) + if self.options.verbose : + print "Registry %s, sm %s, dir %s, user %s, auth %s" % (options.registry, options.sm, + options.sfi_dir, options.user, + options.auth) + print "Command %s" % command + if command in ("resources"): + print "resources cmd_opts %s" % cmd_opts.format + elif command in ("list", "show", "remove"): + print "cmd_opts.type %s" % cmd_opts.type + print "cmd_args %s" % cmd_args + + self.set_servers() + + try: + self.dispatch(command, cmd_opts, cmd_args) + except KeyError: + raise + print "Command not found:", command + sys.exit(1) + + return + +if __name__ == "__main__": + Sfi().main() diff --git a/sfa/client/sfiAddAttribute.py b/sfa/client/sfiAddAttribute.py new file mode 100755 index 00000000..33b94a3a --- /dev/null +++ b/sfa/client/sfiAddAttribute.py @@ -0,0 +1,36 @@ +#! /usr/bin/env python + +import sys +from sfa.util.rspecHelper import RSpec, Commands + +command = Commands(usage="%prog [options] [node1 node2...]", + description="Add sliver attributes to the RSpec. " + + "This command reads in an RSpec and outputs a modified " + + "RSpec. Use this to add attributes to individual nodes " + + "in your slice. If no nodes are specified, the " + + "attributes will be added to ALL nodes.", + epilog="NOTE: Only admins can actually set these " + + "attributes, with the exception of --delegations") +command.add_nodefile_option() +command.add_attribute_options() +command.prep() + +attrs = command.get_attribute_dict() +for name in attrs: + for value in attrs[name]: + if not command.nodes: + try: + command.rspec.add_default_sliver_attribute(name, value) + except: + print >> sys.stderr, "FAILED: on all nodes: %s=%s" % (name, value) + else: + for node in command.nodes: + try: + command.rspec.add_sliver_attribute(node, name, value) + except: + print >> sys.stderr, "FAILED: on node %s: %s=%s" % (node, name, value) + +print command.rspec + + + diff --git a/sfa/client/sfiAddSliver.py b/sfa/client/sfiAddSliver.py new file mode 100755 index 00000000..be1c51c2 --- /dev/null +++ b/sfa/client/sfiAddSliver.py @@ -0,0 +1,22 @@ +#! /usr/bin/env python + +import sys +from sfa.util.rspecHelper import RSpec, Commands + +command = Commands(usage="%prog [options] node1 node2...", + description="Add slivers to the RSpec. " + + "This command reads in an RSpec and outputs a modified " + + "RSpec. Use this to add nodes to your slice.") +command.add_nodefile_option() +command.prep() + +for node in command.nodes: + try: + command.rspec.add_sliver(node) + except: + print >> sys.stderr, "FAILED: %s" % node + +print command.rspec + + + diff --git a/sfa/client/sfiDeleteAttribute.py b/sfa/client/sfiDeleteAttribute.py new file mode 100755 index 00000000..8e8f0a28 --- /dev/null +++ b/sfa/client/sfiDeleteAttribute.py @@ -0,0 +1,37 @@ +#! /usr/bin/env python + +import sys +from sfa.util.rspecHelper import RSpec, Commands + +command = Commands(usage="%prog [options] [node1 node2...]", + description="Delete sliver attributes from the RSpec. " + + "This command reads in an RSpec and outputs a modified " + + "RSpec. Use this to remove attributes from nodes " + + "in your slice. If no nodes are specified, the " + + "attributes will be removed from ALL nodes.", + epilog="NOTE: Only admins can actually set these " + + "attributes, with the exception of --delegations") +command.add_nodefile_option() +command.add_attribute_options() +command.prep() + +attrs = command.get_attribute_dict() +for name in attrs: + print >> sys.stderr, name, attrs[name] + for value in attrs[name]: + if not command.nodes: + try: + command.rspec.remove_default_sliver_attribute(name, value) + except: + print >> sys.stderr, "FAILED: on all nodes: %s=%s" % (name, value) + else: + for node in command.nodes: + try: + command.rspec.remove_sliver_attribute(node, name, value) + except: + print >> sys.stderr, "FAILED: on node %s: %s=%s" % (node, name, value) + +print command.rspec + + + diff --git a/sfa/client/sfiDeleteSliver.py b/sfa/client/sfiDeleteSliver.py new file mode 100755 index 00000000..c8e769aa --- /dev/null +++ b/sfa/client/sfiDeleteSliver.py @@ -0,0 +1,22 @@ +#! /usr/bin/env python + +import sys +from sfa.util.rspecHelper import RSpec, Commands + +command = Commands(usage="%prog [options] node1 node2...", + description="Delete slivers from the RSpec. " + + "This command reads in an RSpec and outputs a modified " + + "RSpec. Use this to remove nodes from your slice.") +command.add_nodefile_option() +command.prep() + +for node in command.nodes: + try: + command.rspec.remove_sliver(node) + except: + print >> sys.stderr, "FAILED: %s" % node + +print command.rspec + + + diff --git a/sfa/client/sfiListNodes.py b/sfa/client/sfiListNodes.py new file mode 100755 index 00000000..df14fe38 --- /dev/null +++ b/sfa/client/sfiListNodes.py @@ -0,0 +1,17 @@ +#! /usr/bin/env python + +import sys +from sfa.util.rspecHelper import RSpec, Commands + +command = Commands(usage="%prog [options]", + description="List all nodes in the RSpec. " + + "Use this to display the list of nodes on which it is " + + "possible to create a slice.") +command.prep() + +nodes = command.rspec.get_node_list() +for node in nodes: + print node + + + diff --git a/sfa/client/sfiListSlivers.py b/sfa/client/sfiListSlivers.py new file mode 100755 index 00000000..685521ca --- /dev/null +++ b/sfa/client/sfiListSlivers.py @@ -0,0 +1,28 @@ +#! /usr/bin/env python + +import sys +from sfa.util.rspecHelper import RSpec, Commands + +command = Commands(usage="%prog [options]", + description="List all slivers in the RSpec. " + + "Use this to display the list of nodes belonging to " + + "the slice.") +command.add_show_attributes_option() +command.prep() + +nodes = command.rspec.get_sliver_list() +if command.opts.showatt: + defaults = command.rspec.get_default_sliver_attributes() + if defaults: + print "ALL NODES" + for (name, value) in defaults: + print " %s: %s" % (name, value) + +for node in nodes: + print node + if command.opts.showatt: + atts = command.rspec.get_sliver_attributes(node) + for (name, value) in atts: + print " %s: %s" % (name, value) + + diff --git a/sfa/cron.d/sfa.cron b/sfa/cron.d/sfa.cron new file mode 100644 index 00000000..c92afb6d --- /dev/null +++ b/sfa/cron.d/sfa.cron @@ -0,0 +1,8 @@ +SHELL=/bin/bash +PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin +MAILTO=server-msgs@planet-lab.org +HOME=/ +# +# minute hour day-of-month month day-of-week user command +0 * * * * /usr/bin/sfa-import-plc.py > /dev/null 2>&1 +0 0 * * * /usr/bin/sfa-clean-peer-records.py > /dev/null 2>&1 diff --git a/sfa/init.d/sfa b/sfa/init.d/sfa new file mode 100755 index 00000000..77490c74 --- /dev/null +++ b/sfa/init.d/sfa @@ -0,0 +1,113 @@ +#!/bin/bash +# +# sfa Wraps PLCAPI into the SFA compliant API +# +# chkconfig: 2345 5 99 +# +# description: Wraps PLCAPI into the SFA compliant API +# +# $Id: sfa 18662 2010-08-24 16:53:40Z tmack $ +# $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/init.d/sfa $ +# + +# Source config +[ -f /etc/sfa/sfa_config ] && . /etc/sfa/sfa_config + +# source function library +. /etc/init.d/functions + +# Regenerate configuration files - almost verbatim from plc.init +reload () +{ + force=$1 + + # Regenerate the main configuration file from default values + # overlaid with site-specific and current values. + # Thierry -- 2007-07-05 : values in plc_config.xml are *not* taken into account here + files=( + /etc/sfa/default_config.xml + /etc/sfa/configs/site.xml + ) + for file in "${files[@]}" ; do + if [ -n "$force" -o $file -nt /etc/sfa/sfa_config.xml ] ; then + tmp=$(mktemp /tmp/sfa_config.xml.XXXXXX) + plc-config --xml "${files[@]}" >$tmp + if [ $? -eq 0 ] ; then + mv $tmp /etc/sfa/sfa_config.xml + chmod 444 /etc/sfa/sfa_config.xml + else + echo "SFA: Warning: Invalid configuration file(s) detected" + rm -f $tmp + fi + break + fi + done + + # Convert configuration to various formats + if [ -n "$force" -o /etc/sfa/sfa_config.xml -nt /etc/sfa/sfa_config ] ; then + plc-config --shell /etc/sfa/sfa_config.xml >/etc/sfa/sfa_config + fi + if [ -n "$force" -o /etc/sfa/sfa_config.xml -nt /etc/sfa/sfa_config.py ] ; then + plc-config --python /etc/sfa/sfa_config.xml >/etc/sfa/sfa_config.py + fi +# if [ -n "$force" -o /etc/sfa/sfa_config.xml -nt /etc/sfa/php/sfa_config.php ] ; then +# mkdir -p /etc/sfa/php +# plc-config --php /etc/sfa/sfa_config.xml >/etc/sfa/php/sfa_config.php +# fi + + # [re]generate the sfa_component_config + gen-sfa-cm-config.py +} + +start() { + + reload + + if [ "$SFA_REGISTRY_ENABLED" ]; then + action $"SFA Registry" daemon /usr/bin/sfa-server.py -r -d $OPTIONS + fi + + if [ "$SFA_AGGREGATE_ENABLED" ]; then + action $"SFA Aggregate" daemon /usr/bin/sfa-server.py -a -d $OPTIONS + fi + + if [ "$SFA_SM_ENABLED" ]; then + action "SFA SliceMgr" daemon /usr/bin/sfa-server.py -s -d $OPTIONS + fi + + RETVAL=$? + [ $RETVAL -eq 0 ] && touch /var/lock/subsys/sfa + +} + +stop() { + action $"Shutting down SFA" killproc sfa-server.py + RETVAL=$? + + [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/sfa +} + + +case "$1" in + start) start ;; + stop) stop ;; + reload) reload force ;; + restart) stop; start ;; + condrestart) + if [ -f /var/lock/subsys/sfa ]; then + stop + start + fi + ;; + status) + status sfa + RETVAL=$? + ;; + *) + echo $"Usage: $0 {start|stop|reload|restart|condrestart|status}" + exit 1 + ;; +esac + +exit $RETVAL + diff --git a/sfa/init.d/sfa-cm b/sfa/init.d/sfa-cm new file mode 100755 index 00000000..e3bbd966 --- /dev/null +++ b/sfa/init.d/sfa-cm @@ -0,0 +1,80 @@ +#!/bin/bash +# +# sfa Wraps PLCAPI into the SFA compliant API +# +# chkconfig: 2345 5 99 +# +# description: Wraps PLCAPI into the SFA compliant API +# +# $Id: sfa 14304 2009-07-06 20:19:51Z thierry $ +# $URL: https://svn.planet-lab.org/svn/sfa/trunk/sfa/init.d/sfa $ +# + +# Source config +. /etc/sfa/sfa_config + +# source function library +. /etc/init.d/functions + +init_key() { + # if key doesnt exist use sfa_componenet_setup to get it + if [ ! -f /var/lib/sfa/server.key ]; then + /usr/bin/sfa_component_setup.py -k + fi +} + +start() { + echo -n $"Starting SFA: " + + if [ "$SFA_CM_ENABLED" ]; then + echo "Component Mgr" + # make sure server key (nodes private key) exists first + init_key + /usr/bin/sfa-server.py -c -d $OPTIONS + fi + + RETVAL=$? + echo + [ $RETVAL -eq 0 ] && touch /var/lock/subsys/sfa + +} + +stop() { + echo -n $"Shutting down SFA: " + killproc sfa-server.py + RETVAL=$? + + echo + [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/sfa +} + + + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + stop + start + ;; + condrestart) + if [ -f /var/lock/subsys/sfa ]; then + stop + start + fi + ;; + status) + status sfa + RETVAL=$? + ;; + *) + echo $"Usage: $0 {start|stop|restart|condrestart|status}" + exit 1 +esac + +exit $RETVAL + diff --git a/sfa/managers/__init__.py b/sfa/managers/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/sfa/managers/aggregate_manager_pl.py b/sfa/managers/aggregate_manager_pl.py new file mode 100644 index 00000000..f0338775 --- /dev/null +++ b/sfa/managers/aggregate_manager_pl.py @@ -0,0 +1,326 @@ +### $Id: slices.py 15842 2009-11-22 09:56:13Z anil $ +### $URL: https://svn.planet-lab.org/svn/sfa/trunk/sfa/plc/slices.py $ + +import datetime +import time +import traceback +import sys + +from types import StringTypes +from sfa.util.namespace import * +from sfa.util.rspec import * +from sfa.util.specdict import * +from sfa.util.faults import * +from sfa.util.record import SfaRecord +from sfa.util.policy import Policy +from sfa.util.record import * +from sfa.util.sfaticket import SfaTicket +from sfa.util.debug import log +from sfa.plc.slices import Slices +from sfa.trust.credential import Credential +import sfa.plc.peers as peers +from sfa.plc.network import * +from sfa.plc.api import SfaAPI +from sfa.plc.slices import * + + +def __get_registry_objects(slice_xrn, creds, users): + """ + + """ + hrn, type = urn_to_hrn(slice_xrn) + + hrn_auth = get_authority(hrn) + + # Build up objects that an SFA registry would return if SFA + # could contact the slice's registry directly + reg_objects = None + + if users: + reg_objects = {} + + site = {} + site['site_id'] = 0 + site['name'] = 'geni.%s' % hrn_auth[:20] + site['enabled'] = True + site['max_slices'] = 100 + + # Note: + # Is it okay if this login base is the same as one already at this myplc site? + # Do we need uniqueness? Should use hrn_auth instead of just the leaf perhaps? + site['login_base'] = hrn_auth[:20] + site['abbreviated_name'] = hrn_auth[:20] + site['max_slivers'] = 1000 + reg_objects['site'] = site + + slice = {} + slice['expires'] = int(time.mktime(Credential(string=creds[0]).get_lifetime().timetuple())) + slice['hrn'] = hrn + slice['name'] = site['login_base'] + "_" + get_leaf(hrn) + slice['url'] = hrn + slice['description'] = hrn + slice['pointer'] = 0 + reg_objects['slice_record'] = slice + + reg_objects['users'] = {} + for user in users: + user['key_ids'] = [] + hrn, _ = urn_to_hrn(user['urn']) + user['email'] = hrn + "@geni.net" + user['first_name'] = hrn + user['last_name'] = hrn + reg_objects['users'][user['email']] = user + + return reg_objects + +def __get_hostnames(nodes): + hostnames = [] + for node in nodes: + hostnames.append(node.hostname) + return hostnames + +def get_version(): + version = {} + version['geni_api'] = 1 + version['sfa'] = 1 + return version + +def slice_status(api, slice_xrn, creds): + result = {} + result['geni_urn'] = slice_xrn + result['geni_status'] = 'unknown' + result['geni_resources'] = {} + return result + +def create_slice(api, slice_xrn, creds, rspec, users): + """ + Create the sliver[s] (slice) at this aggregate. + Verify HRN and initialize the slice record in PLC if necessary. + """ + + reg_objects = __get_registry_objects(slice_xrn, creds, users) + + hrn, type = urn_to_hrn(slice_xrn) + peer = None + slices = Slices(api) + peer = slices.get_peer(hrn) + sfa_peer = slices.get_sfa_peer(hrn) + registry = api.registries[api.hrn] + credential = api.getCredential() + site_id, remote_site_id = slices.verify_site(registry, credential, hrn, + peer, sfa_peer, reg_objects) + + slice_record = slices.verify_slice(registry, credential, hrn, site_id, + remote_site_id, peer, sfa_peer, reg_objects) + + network = Network(api) + + slice = network.get_slice(api, hrn) + slice.peer_id = slice_record['peer_slice_id'] + current = __get_hostnames(slice.get_nodes()) + + network.addRSpec(rspec, api.config.SFA_AGGREGATE_RSPEC_SCHEMA) + request = __get_hostnames(network.nodesWithSlivers()) + + # remove nodes not in rspec + deleted_nodes = list(set(current).difference(request)) + + # add nodes from rspec + added_nodes = list(set(request).difference(current)) + + if peer: + api.plshell.UnBindObjectFromPeer(api.plauth, 'slice', slice.id, peer) + + api.plshell.AddSliceToNodes(api.plauth, slice.name, added_nodes) + api.plshell.DeleteSliceFromNodes(api.plauth, slice.name, deleted_nodes) + + network.updateSliceTags() + + if peer: + api.plshell.BindObjectToPeer(api.plauth, 'slice', slice.id, peer, + slice.peer_id) + + # print network.toxml() + + return True + + +def renew_slice(api, xrn, creds, exipration_time): + hrn, type = urn_to_hrn(xrn) + slicename = hrn_to_pl_slicename(hrn) + slices = api.plshell.GetSlices(api.plauth, {'name': slicename}, ['slice_id']) + if not slices: + raise RecordNotFound(hrn) + slice = slices[0] + slice['expires'] = expiration_time + api.plshell.UpdateSlice(api.plauth, slice['slice_id'], slice) + return 1 + +def start_slice(api, xrn, creds): + hrn, type = urn_to_hrn(xrn) + slicename = hrn_to_pl_slicename(hrn) + slices = api.plshell.GetSlices(api.plauth, {'name': slicename}, ['slice_id']) + if not slices: + raise RecordNotFound(hrn) + slice_id = slices[0]['slice_id'] + slice_tags = api.plshell.GetSliceTags(api.plauth, {'slice_id': slice_id, 'tagname': 'enabled'}, ['slice_tag_id']) + # just remove the tag if it exists + if slice_tags: + api.plshell.DeleteSliceTag(api.plauth, slice_tags[0]['slice_tag_id']) + + return 1 + +def stop_slice(api, xrn, creds): + hrn, type = urn_to_hrn(xrn) + slicename = hrn_to_pl_slicename(hrn) + slices = api.plshell.GetSlices(api.plauth, {'name': slicename}, ['slice_id']) + if not slices: + raise RecordNotFound(hrn) + slice_id = slices[0]['slice_id'] + slice_tags = api.plshell.GetSliceTags(api.plauth, {'slice_id': slice_id, 'tagname': 'enabled'}) + if not slice_tags: + api.plshell.AddSliceTag(api.plauth, slice_id, 'enabled', '0') + elif slice_tags[0]['value'] != "0": + tag_id = attributes[0]['slice_tag_id'] + api.plshell.UpdateSliceTag(api.plauth, tag_id, '0') + return 1 + +def reset_slice(api, xrn): + # XX not implemented at this interface + return 1 + +def delete_slice(api, xrn, creds): + hrn, type = urn_to_hrn(xrn) + slicename = hrn_to_pl_slicename(hrn) + slices = api.plshell.GetSlices(api.plauth, {'name': slicename}) + if not slices: + return 1 + slice = slices[0] + + # determine if this is a peer slice + peer = peers.get_peer(api, hrn) + if peer: + api.plshell.UnBindObjectFromPeer(api.plauth, 'slice', slice['slice_id'], peer) + api.plshell.DeleteSliceFromNodes(api.plauth, slicename, slice['node_ids']) + if peer: + api.plshell.BindObjectToPeer(api.plauth, 'slice', slice['slice_id'], peer, slice['peer_slice_id']) + return 1 + +def get_slices(api, creds): + # look in cache first + if api.cache: + slices = api.cache.get('slices') + if slices: + return slices + + # get data from db + slices = api.plshell.GetSlices(api.plauth, {'peer_id': None}, ['name']) + slice_hrns = [slicename_to_hrn(api.hrn, slice['name']) for slice in slices] + slice_urns = [hrn_to_urn(slice_hrn, 'slice') for slice_hrn in slice_hrns] + + # cache the result + if api.cache: + api.cache.add('slices', slice_urns) + + return slice_urns + +def get_rspec(api, creds, options): + # get slice's hrn from options + xrn = options.get('geni_slice_urn', None) + hrn, type = urn_to_hrn(xrn) + + # look in cache first + if api.cache and not xrn: + rspec = api.cache.get('nodes') + if rspec: + return rspec + + network = Network(api) + if (hrn): + if network.get_slice(api, hrn): + network.addSlice() + + rspec = network.toxml() + + # cache the result + if api.cache and not xrn: + api.cache.add('nodes', rspec) + + return rspec + + +def get_ticket(api, xrn, creds, rspec, users): + + reg_objects = __get_registry_objects(xrn, creds, users) + + slice_hrn, type = urn_to_hrn(xrn) + slices = Slices(api) + peer = slices.get_peer(slice_hrn) + sfa_peer = slices.get_sfa_peer(slice_hrn) + + # get the slice record + registry = api.registries[api.hrn] + credential = api.getCredential() + records = registry.Resolve(xrn, credential) + + # similar to create_slice, we must verify that the required records exist + # at this aggregate before we can issue a ticket + site_id, remote_site_id = slices.verify_site(registry, credential, slice_hrn, + peer, sfa_peer, reg_objects) + slice = slices.verify_slice(registry, credential, slice_hrn, site_id, + remote_site_id, peer, sfa_peer, reg_objects) + + # make sure we get a local slice record + record = None + for tmp_record in records: + if tmp_record['type'] == 'slice' and \ + not tmp_record['peer_authority']: + record = SliceRecord(dict=tmp_record) + if not record: + raise RecordNotFound(slice_hrn) + + # get sliver info + slivers = Slices(api).get_slivers(slice_hrn) + if not slivers: + raise SliverDoesNotExist(slice_hrn) + + # get initscripts + initscripts = [] + data = { + 'timestamp': int(time.time()), + 'initscripts': initscripts, + 'slivers': slivers + } + + # create the ticket + object_gid = record.get_gid_object() + new_ticket = SfaTicket(subject = object_gid.get_subject()) + new_ticket.set_gid_caller(api.auth.client_gid) + new_ticket.set_gid_object(object_gid) + new_ticket.set_issuer(key=api.key, subject=api.hrn) + new_ticket.set_pubkey(object_gid.get_pubkey()) + new_ticket.set_attributes(data) + new_ticket.set_rspec(rspec) + #new_ticket.set_parent(api.auth.hierarchy.get_auth_ticket(auth_hrn)) + new_ticket.encode() + new_ticket.sign() + + return new_ticket.save_to_string(save_parents=True) + + + +def main(): + api = SfaAPI() + """ + rspec = get_rspec(api, "plc.princeton.sapan", None) + #rspec = get_rspec(api, "plc.princeton.coblitz", None) + #rspec = get_rspec(api, "plc.pl.sirius", None) + print rspec + """ + f = open(sys.argv[1]) + xml = f.read() + f.close() + create_slice(api, "plc.princeton.sapan", xml) + +if __name__ == "__main__": + main() diff --git a/sfa/managers/component_manager_default.py b/sfa/managers/component_manager_default.py new file mode 100644 index 00000000..e6482d4a --- /dev/null +++ b/sfa/managers/component_manager_default.py @@ -0,0 +1,22 @@ + +def start_slice(api, slicename): + return + +def stop_slice(api, slicename): + return + +def delete_slice(api, slicename): + return + +def reset_slice(api, slicename): + return + +def get_slices(api): + return + +def reboot(): + return + +def redeem_ticket(api, ticket_string): + return + diff --git a/sfa/managers/component_manager_pl.py b/sfa/managers/component_manager_pl.py new file mode 100644 index 00000000..c26ca4d2 --- /dev/null +++ b/sfa/managers/component_manager_pl.py @@ -0,0 +1,73 @@ +import os +import xmlrpclib +from sfa.util.faults import * +from sfa.util.namespace import * +from sfa.util.sfaticket import SfaTicket + +def init_server(): + from sfa.server import sfa_component_setup + # get current trusted gids + try: + sfa_component_setup.get_trusted_certs() + except: + # our keypair may be old, try refreshing + sfa_component_setup.get_node_key() + sfa_component_setup.get_credential(force=True) + sfa_component_setup.get_trusted_certs() + +def get_version(): + version = {} + version['geni_api'] = 1 + return version + +def slice_status(api, slice_xrn, creds): + result = {} + result['geni_urn'] = slice_xrn + result['geni_status'] = 'unknown' + result['geni_resources'] = {} + return result + +def start_slice(api, xrn, creds): + hrn, type = urn_to_hrn(xrn) + slicename = hrn_to_pl_slicename(hrn) + api.nodemanger.Start(slicename) + +def stop_slice(api, xrn, creds): + hrn, type = urn_to_hrn(xrn) + slicename = hrn_to_pl_slicename(hrn) + api.nodemanager.Stop(slicename) + +def delete_slice(api, xrn, creds): + hrn, type = urn_to_hrn(xrn) + slicename = hrn_to_pl_slicename(hrn) + api.nodemanager.Destroy(slicename) + +def reset_slice(api, xrn): + hrn, type = urn_to_hrn(xrn) + slicename = hrn_to_pl_slicename(hrn) + if not api.sliver_exists(slicename): + raise SliverDoesNotExist(slicename) + api.nodemanager.ReCreate(slicename) + +def get_slices(api): + # this returns a tuple, the data we want is at index 1 + xids = api.nodemanager.GetXIDs() + # unfortunately the data we want is given to us as + # a string but we really want it as a dict + # lets eval it + slices = eval(xids[1]) + return slices.keys() + +def redeem_ticket(api, ticket_string): + ticket = SfaTicket(string=ticket_string) + ticket.decode() + hrn = ticket.attributes['slivers'][0]['hrn'] + slicename = hrn_to_pl_slicename(hrn) + if not api.sliver_exists(slicename): + raise SliverDoesNotExist(slicename) + + # convert ticket to format nm is used to + nm_ticket = xmlrpclib.dumps((ticket.attributes,), methodresponse=True) + api.nodemanager.AdminTicket(nm_ticket) + + diff --git a/sfa/managers/eucalyptus/eucalyptus.rnc b/sfa/managers/eucalyptus/eucalyptus.rnc new file mode 100644 index 00000000..271ca812 --- /dev/null +++ b/sfa/managers/eucalyptus/eucalyptus.rnc @@ -0,0 +1,89 @@ +start = RSpec +RSpec = element RSpec { + attribute type { xsd:NMTOKEN }, + cloud +} +cloud = element cloud { + attribute id { xsd:NMTOKEN }, + user_info?, + ipv4, + keypairs, + images, + cluster+ +} +user_info = element user_info { + credential +} +keypairs = element keypairs { keypair+ } +images = element images { image+ } +image = element image { + attribute id { xsd:ID }, + type, + arch, + state, + location +} +cluster = element cluster { + attribute id { xsd:ID }, + ipv4, + vm_types +} +vm_types = element vm_types { vm_type+ } +vm_type = element vm_type { + attribute name { xsd:ID }, + free_slots, + max_instances, + cores, + memory, + disk_space, + request?, + euca_instances? +} +request = element request { + instances, + kernel_image, + ramdisk, + disk_image, + keypair +} +euca_instances = element euca_instances { + euca_instance+ +} +euca_instance = element euca_instance { + attribute id { xsd:ID }, + state, + public_dns, + keypair +} +credential = element credential { text } +ipv4 = element ipv4 { text } +keypair = element keypair { text } +type = element type { text } +arch = element arch { text } +state = element state { text } +location = element location { text } +free_slots = element free_slots { text } +max_instances = element max_instances { text } +cores = element cores { text } +public_dns = element public_dns { text } +memory = element memory { + attribute unit { xsd:NMTOKEN }, + text +} +disk_space = element disk_space { + attribute unit { xsd:NMTOKEN }, + text +} +instances = element instances { xsd:unsignedInt } +kernel_image = element kernel_image { + attribute id { xsd:IDREF }, + empty +} +ramdisk = element ramdisk { + attribute id { xsd:IDREF }?, + empty +} +disk_image = element disk_image { + attribute id { xsd:IDREF }, + empty +} diff --git a/sfa/managers/eucalyptus/eucalyptus.rng b/sfa/managers/eucalyptus/eucalyptus.rng new file mode 100644 index 00000000..43c3f9a7 --- /dev/null +++ b/sfa/managers/eucalyptus/eucalyptus.rng @@ -0,0 +1,222 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sfa/managers/eucalyptus/eucalyptus.xml b/sfa/managers/eucalyptus/eucalyptus.xml new file mode 100644 index 00000000..9aca652b --- /dev/null +++ b/sfa/managers/eucalyptus/eucalyptus.xml @@ -0,0 +1,76 @@ + + + + + + foobarbaz + + 155.98.39.85 + + cortex + mykey + + + + machine + x86_64 + available + images/ttylinux.img.manifest.xml + + + kernel + x86_64 + available + images/vmlinuz-2.6.16.33-xen.manifest.xml + + + + 10.1.1.2 + + + 2 + 2 + 1 + 128 + 2 + + + 1 + + + + cortex + + + + 1 + 2 + 1 + 256 + 5 + + + 0 + 1 + 2 + 512 + 10 + + + 0 + 1 + 2 + 1024 + 20 + + + 0 + 0 + 4 + 2048 + 20 + + + + + diff --git a/sfa/managers/max/max.xml b/sfa/managers/max/max.xml new file mode 100644 index 00000000..f549ab7d --- /dev/null +++ b/sfa/managers/max/max.xml @@ -0,0 +1,90 @@ + + + geni.maxgigapop.net + Example MAX RSpec + + 1279848020 + 1280712039 + + + +

206.196.176.55
+ + generic + 2.0GHz + 1 + 256MB + 16GB + + + Ethernet + eth1 + 100Mbps + 10.10.10.2/24 + any + urn:aggregate=geni.maxgigapop.net:rspec=my-test-max-rspec-slice1:domain=dragon.maxgigapop.net:node=planetlab2:interface=eth1.any_1 + + + Ethernet + eth1 + 100Mbps + 10.10.30.1/24 + any + urn:aggregate=geni.maxgigapop.net:rspec=my-test-max-rspec-slice1:domain=dragon.maxgigapop.net:node=planetlab5:interface=eth1.any_2 + + + +
206.196.176.138
+ + generic + 2.0GHz + 1 + 256MB + 16GB + + + Ethernet + eth1 + 100Mbps + 10.10.20.2/24 + any + urn:aggregate=geni.maxgigapop.net:rspec=my-test-max-rspec-slice1:domain=dragon.maxgigapop.net:node=planetlab2:interface=eth1.any_3 + + + Ethernet + eth1 + 100Mbps + 10.10.30.2/24 + any + urn:aggregate=geni.maxgigapop.net:rspec=my-test-max-rspec-slice1:domain=dragon.maxgigapop.net:node=planetlab3:interface=eth1.any_2 + +
+ +
206.196.176.133
+ + generic + 2.0GHz + 1 + 256MB + 16GB + + + Ethernet + eth1 + 100Mbps + 10.10.10.1/24 + any + urn:aggregate=geni.maxgigapop.net:rspec=my-test-max-rspec-slice1:domain=dragon.maxgigapop.net:node=planetlab3:interface=eth1.any_1 + + + Ethernet + eth1 + 100Mbps + 10.10.20.1/24 + any + urn:aggregate=geni.maxgigapop.net:rspec=my-test-max-rspec-slice1:domain=dragon.maxgigapop.net:node=planetlab5:interface=eth1.any_3 + +
+ + diff --git a/sfa/managers/pl/pl.rnc b/sfa/managers/pl/pl.rnc new file mode 100644 index 00000000..098aa2e2 --- /dev/null +++ b/sfa/managers/pl/pl.rnc @@ -0,0 +1,56 @@ +start = RSpec +RSpec = element RSpec { + attribute type { xsd:NMTOKEN }, + ( network | request ) +} +network = element network { + attribute name { xsd:NMTOKEN }, + attribute slice { xsd:NMTOKEN }?, + sliver_defaults?, + site+ +} +sliver_defaults = element sliver_defaults { + sliver_elements +} +site = element site { + attribute id { xsd:ID }, + element name { text }, + node* +} +node = element node { + attribute id { xsd:ID }, + element hostname { text }, + element bw_limit { attribute units { xsd:NMTOKEN }, text }?, + sliver* +} +request = element request { + attribute name { xsd:NMTOKEN }, + sliver_defaults?, + sliver* +} +sliver = element sliver { + attribute nodeid { xsd:ID }?, + sliver_elements +} +sliver_elements = ( + element capabilities { text }? + & element codemux { text }* + & element cpu_pct { text }? + & element cpu_share { text }? + & element delegations { text }? + & element disk_max { text }? + & element initscript { text }? + & element ip_addresses {text }* + & element net_i2_max_kbyte { text }? + & element net_i2_max_rate { text }? + & element net_i2_min_rate { text }? + & element net_i2_share { text }? + & element net_i2_thresh_kbyte { text }? + & element net_max_kbyte { text }? + & element net_max_rate { text }? + & element net_min_rate { text }? + & element net_share { text }? + & element net_thresh_kbyte { text }? + & element vsys {text}* + & element vsys_vnet { text }? +) diff --git a/sfa/managers/pl/pl.rng b/sfa/managers/pl/pl.rng new file mode 100644 index 00000000..3b46f885 --- /dev/null +++ b/sfa/managers/pl/pl.rng @@ -0,0 +1,201 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sfa/managers/pl/pl.xml b/sfa/managers/pl/pl.xml new file mode 100644 index 00000000..3824f30a --- /dev/null +++ b/sfa/managers/pl/pl.xml @@ -0,0 +1,3420 @@ + + + + + HU Berlin - IWI + + planetlab1.wiwi.hu-berlin.de + + + planetlab2.wiwi.hu-berlin.de + + + + Williams College + + planetlab1.williams.edu + + + planetlab2.williams.edu + + + planetlab3.williams.edu + + + planetlab4.williams.edu + + + planetlab5.williams.edu + + + + Kentucky + + planetlab1.netlab.uky.edu + 100000 + + + planetlab2.netlab.uky.edu + 100000 + + + + UCSD + + planetlab1.ucsd.edu + + + planetlab2.ucsd.edu + + + planetlab3.ucsd.edu + + + + Arizona + + planetlab1.arizona-gigapop.net + + + planetlab2.arizona-gigapop.net + + + + LBL + + node1.lbnl.nodes.planet-lab.org + 10000 + + + node2.lbnl.nodes.planet-lab.org + 10000 + + + + UPenn + + planetlab1.cis.upenn.edu + 1000 + + + planetlab2.cis.upenn.edu + 1000 + + + + IRP + + planet1.pittsburgh.intel-research.net + 1000 + + + planet2.pittsburgh.intel-research.net + 1000 + + + planet3.pittsburgh.intel-research.net + 1000 + + + + IRB + + planet4.berkeley.intel-research.net + + + planet5.berkeley.intel-research.net + + + planet6.berkeley.intel-research.net + + + + Cambridge + + planetlab1.xeno.cl.cam.ac.uk + 10000 + + + planetlab2.xeno.cl.cam.ac.uk + 10000 + + + planetlab3.xeno.cl.cam.ac.uk + 10000 + + + + Harvard + + lefthand.eecs.harvard.edu + 10000 + + + righthand.eecs.harvard.edu + 10000 + + + + Wash + + planetlab01.cs.washington.edu + + + planetlab02.cs.washington.edu + + + planetlab03.cs.washington.edu + + + planetlab04.cs.washington.edu + + + planetlab05.cs.washington.edu + + + planetlab06.cs.washington.edu + + + + CarnegieMellon + + planetlab-1.cmcl.cs.cmu.edu + 5000 + + + planetlab-2.cmcl.cs.cmu.edu + 5000 + + + planetlab-3.cmcl.cs.cmu.edu + 5000 + + + + Michigan Technological University + + mtuplanetlab1.cs.mtu.edu + 500000 + + + mtuplanetlab2.cs.mtu.edu + + + + Duke + + planetlab1.cs.duke.edu + 10000 + + + planetlab2.cs.duke.edu + 10000 + + + planetlab3.cs.duke.edu + 10000 + + + planetlab4.cs.duke.edu + + + planetlab5.cs.duke.edu + + + planetlab6.cs.duke.edu + + + planetlab7.cs.duke.edu + + + + ISI + + planetlab1.postel.org + 10000 + + + planetlab2.postel.org + 10000 + + + planetlab3.postel.org + 1000 + + + planetlab4.postel.org + 1000 + + + + Kansas + + kupl1.ittc.ku.edu + 10000 + + + kupl2.ittc.ku.edu + 10000 + + + + WashU + + vn4.cse.wustl.edu + 100000 + + + vn5.cse.wustl.edu + 100000 + + + + Michigan + + planetlab1.eecs.umich.edu + 10000 + + + planetlab2.eecs.umich.edu + 10000 + + + planetlab3.eecs.umich.edu + + + planetlab4.eecs.umich.edu + + + planetlab5.eecs.umich.edu + + + + UCSB + + planet1.cs.ucsb.edu + 10000 + + + planet2.cs.ucsb.edu + 10000 + + + planet3.cs.ucsb.edu + 100000 + + + planet4.cs.ucsb.edu + 100000 + + + + MIT + + planetlab1.csail.mit.edu + 10000 + + + planetlab3.csail.mit.edu + 10000 + + + planetlab2.csail.mit.edu + 10000 + + + planetlab6.csail.mit.edu + 10000 + + + planetlab5.csail.mit.edu + 10000 + + + planetlab7.csail.mit.edu + 10000 + + + planetlab4.csail.mit.edu + 10000 + + + + UCB + + planetlab4.millennium.berkeley.edu + 10000 + + + planetlab12.millennium.berkeley.edu + 10000 + + + planetlab5.millennium.berkeley.edu + 10000 + + + planetlab13.millennium.berkeley.edu + 10000 + + + planetlab14.millennium.berkeley.edu + 10000 + + + planetlab6.millennium.berkeley.edu + 10000 + + + planetlab7.millennium.berkeley.edu + 10000 + + + planetlab10.millennium.berkeley.edu + 10000 + + + planetlab11.millennium.berkeley.edu + 10000 + + + planetlab9.millennium.berkeley.edu + 10000 + + + planetlab8.millennium.berkeley.edu + 10000 + + + planetlab3.millennium.berkeley.edu + 10000 + + + planetlab1.millennium.berkeley.edu + 10000 + + + planetlab2.millennium.berkeley.edu + 10000 + + + planetlab15.millennium.berkeley.edu + 10000 + + + planetlab16.millennium.berkeley.edu + 10000 + + + + Rice + + ricepl-1.cs.rice.edu + 10000 + + + ricepl-2.cs.rice.edu + 10000 + + + ricepl-3.cs.rice.edu + 10000 + + + ricepl-4.cs.rice.edu + 10000 + + + ricepl-5.cs.rice.edu + 10000 + + + + Kent State University + + pl1.planet.cs.kent.edu + + + pl2.planet.cs.kent.edu + + + pl3.planet.cs.kent.edu + + + + Bologna + + planetlab1.cs.unibo.it + 10000 + + + planetlab2.cs.unibo.it + 10000 + + + + Austin + + planetlab2.csres.utexas.edu + 10000 + + + planetlab1.csres.utexas.edu + 10000 + + + planetlab3.csres.utexas.edu + 10000 + + + planetlab4.csres.utexas.edu + + + planetlab5.csres.utexas.edu + + + planetlab6.csres.utexas.edu + + + planetlab7.csres.utexas.edu + + + + Utah + + planetlab4.flux.utah.edu + 10000 + + + planetlab5.flux.utah.edu + 10000 + + + planetlab6.flux.utah.edu + + + planetlab7.flux.utah.edu + + + + UCLA + + planetlab1.cs.ucla.edu + 10000 + + + planetlab2.cs.ucla.edu + 10000 + + + + Cornell + + planetlab2.cs.cornell.edu + 10000 + + + planetlab1.cs.cornell.edu + 10000 + + + planetlab3-dsl.cs.cornell.edu + + + planetlab4-dsl.cs.cornell.edu + + + planetlab5.cs.cornell.edu + + + planetlab6.cs.cornell.edu + + + + Tennessee + + pl1.eecs.utk.edu + 10000 + + + pl2.eecs.utk.edu + 10000 + + + + CalTech + + planlab1.cs.caltech.edu + 10000 + + + planlab2.cs.caltech.edu + 10000 + + + + UMass + + planetlab1.cs.umass.edu + 5000 + + + planetlab2.cs.umass.edu + 5000 + + + + Emory University + + node1.planetlab.mathcs.emory.edu + + + node2.planetlab.mathcs.emory.edu + + + + Universidad de Buenos Aires + + planet-lab1.uba.ar + + + planet-lab2.uba.ar + + + + Kookmin University + + netapp6.cs.kookmin.ac.kr + + + netapp7.cs.kookmin.ac.kr + + + dplab03.kookmin.ac.kr + 10000 + + + + Canterbury + + planetlab1.cosc.canterbury.ac.nz + + + planetlab2.cosc.canterbury.ac.nz + + + + UT Dallas + + planetlab1.utdallas.edu + + + planetlab2.utdallas.edu + + + + CUHK + + planetlab1.ie.cuhk.edu.hk + + + planetlab2.ie.cuhk.edu.hk + + + planetlab3.ie.cuhk.edu.hk + + + planetlab4.ie.cuhk.edu.hk + + + planetlab5.ie.cuhk.edu.hk + + + + WayneState + + planetlab1.cs.wayne.edu + 100000 + + + planetlab2.cs.wayne.edu + 100000 + + + + Osaka City University + + planetlab1.n.info.eng.osaka-cu.ac.jp + 1000 + + + planetlab2.n.info.eng.osaka-cu.ac.jp + 1000 + + + planetlab3.n.info.eng.osaka-cu.ac.jp + 1000 + + + planetlab4.n.info.eng.osaka-cu.ac.jp + 1000 + + + + Berlin + + planetlab01.tkn.tu-berlin.de + + + planetlab02.tkn.tu-berlin.de + + + + Maryland + + salt.planetlab.cs.umd.edu + + + osiris.planetlab.cs.umd.edu + + + whitefall.planetlab.cs.umd.edu + + + miranda.planetlab.cs.umd.edu + 1000000 + + + + Toronto + + pl2.csl.utoronto.ca + 5000 + + + pl1.csl.utoronto.ca + 5000 + + + + Koc University + + planet1.ku.edu.tr + 2000 + + + planet2.ku.edu.tr + 2000 + + + + RIT + + planet1.cs.rit.edu + + + planet2.cs.rit.edu + + + + Northwestern + + planetlab1.eecs.northwestern.edu + 10000 + + + planetlab2.eecs.northwestern.edu + 10000 + + + planetlab3.eecs.northwestern.edu + 10000 + + + + ChapelHill + + planetlab1.cs.unc.edu + + + planetlab2.cs.unc.edu + + + + Illinois + + planetlab2.cs.uiuc.edu + + + planetlab1.cs.uiuc.edu + + + planetlab3.cs.uiuc.edu + + + planetlab4.cs.uiuc.edu + + + planetlab5.cs.uiuc.edu + + + planetlab6.cs.uiuc.edu + + + + London + + planetlab1.cs.ucl.ac.uk + + + planetlab2.cs.ucl.ac.uk + + + + University of Patras + + planetlab1.ceid.upatras.gr + + + planetlab2.ceid.upatras.gr + + + + Toyohashi Univ of Tech + + pl1.planetlab.ics.tut.ac.jp + + + pl2.planetlab.ics.tut.ac.jp + + + + NTHU + + pads23.cs.nthu.edu.tw + 10000 + + + pads21.cs.nthu.edu.tw + 10000 + + + + Rochester + + planet2.cs.rochester.edu + 10000 + + + planet1.cs.rochester.edu + 10000 + + + + Purdue + + planetlab1.cs.purdue.edu + 10000 + + + planetlab2.cs.purdue.edu + 10000 + + + + Rutgers + + planetlab2.rutgers.edu + + + planetlab1.rutgers.edu + + + + HPLabs + + pli1-pa-4.hpl.hp.com + 10000 + + + pli1-pa-5.hpl.hp.com + 10000 + + + pli1-pa-6.hpl.hp.com + + + + MichState + + planetlab1.cse.msu.edu + + + planetlab2.cse.msu.edu + + + + Hopkins + + planetlab1.cnds.jhu.edu + 10000 + + + planetlab2.cnds.jhu.edu + 10000 + + + planetlab3.cnds.jhu.edu + + + planetlab4.cnds.jhu.edu + + + + SRI International + + pl-node-0.csl.sri.com + 524 + + + pl-node-1.csl.sri.com + 524 + + + + University of Ottawa + + pl1.rcc.uottawa.ca + + + pl2.rcc.uottawa.ca + + + + NotreDame + + planetlab2.cse.nd.edu + + + planetlab1.cse.nd.edu + + + planetlab3.cse.nd.edu + + + planetlab4.cse.nd.edu + + + + GT + + planet1.cc.gt.atl.ga.us + 100000 + + + planet2.cc.gt.atl.ga.us + 100000 + + + planet3.cc.gt.atl.ga.us + 100000 + + + planet4.cc.gt.atl.ga.us + 100000 + + + + SBU + + pl1.cewit.stonybrook.edu + 1000 + + + pl2.cewit.stonybrook.edu + 1000 + + + + UFMG + + planetlab1.pop-mg.rnp.br + 1000000 + + + planetlab2.pop-mg.rnp.br + 1000000 + + + + Vrije + + planetlab2.cs.vu.nl + + + planetlab1.cs.vu.nl + + + + Columbia + + planetlab1.cs.columbia.edu + 10000 + + + planetlab2.cs.columbia.edu + 10000 + + + planetlab3.cs.columbia.edu + 10000 + + + + McGill + + node-1.mcgillplanetlab.org + + + node-2.mcgillplanetlab.org + + + + TAMU + + planetlab1.tamu.edu + 100000 + + + planetlab2.tamu.edu + 10000 + + + + NICT + + planetlab1.koganei.wide.ad.jp + 10000 + + + planetlab2.koganei.wide.ad.jp + 10000 + + + planetlab1.nvlab.org + 10000 + + + + DePaul + + planetlab2.mnlab.cti.depaul.edu + 10000 + + + planetlab1.mnlab.cti.depaul.edu + + + + Universidade Federal do ABC + + planet-lab1.ufabc.edu.br + 2000 + + + planet-lab2.ufabc.edu.br + 1000 + + + + HPLabsI2 + + pli2-pa-1.hpl.hp.com + + + pli2-pa-2.hpl.hp.com + + + pli2-pa-3.hpl.hp.com + + + + UCD + + planetlab2.ece.ucdavis.edu + 10000 + + + planetlab1.ece.ucdavis.edu + 10000 + + + + kaist + + csplanetlab1.kaist.ac.kr + 10000 + + + csplanetlab2.kaist.ac.kr + 10000 + + + csplanetlab4.kaist.ac.kr + 10000 + + + csplanetlab3.kaist.ac.kr + 10000 + + + + UTokyo + + planetlab1.iii.u-tokyo.ac.jp + + + planetlab2.iii.u-tokyo.ac.jp + + + + UOregon + + planetlab4.cs.uoregon.edu + + + planetlab2.cs.uoregon.edu + + + planetlab3.cs.uoregon.edu + + + planetlab1.cs.uoregon.edu + + + + HP Labs, Bristol + + pli1-br-2.hpl.hp.com + 10000 + + + pli1-br-3.hpl.hp.com + 10000 + + + pli1-br-1.hpl.hp.com + 10000 + + + pli2-br-2.hpl.hp.com + + + pli2-br-1.hpl.hp.com + + + pli1-tlnx.hpl.hp.com + 10000 + + + + Eurecom + + planetlab2.eurecom.fr + 500 + + + planetlab1.eurecom.fr + 500 + + + + Technion + + ds-pl3.technion.ac.il + 2000 + + + ds-pl1.technion.ac.il + 2000 + + + ds-pl2.technion.ac.il + 2000 + + + + TU Madrid + + planetlab1.ls.fi.upm.es + 10000 + + + planetlab2.ls.fi.upm.es + 10000 + + + + Ben-Gurion + + planetlab1.bgu.ac.il + 10000 + + + planetlab2.bgu.ac.il + 10000 + + + + National Taiwan + + planetlab1.ntu.nodes.planet-lab.org + 2000 + + + planetlab2.ntu.nodes.planet-lab.org + 2000 + + + + SNU + + arari.snu.ac.kr + 10000 + + + recall.snu.ac.kr + 10000 + + + + NCSU + + planet02.csc.ncsu.edu + 10000 + + + planet03.csc.ncsu.edu + 10000 + + + planet11.csc.ncsu.edu + 10000 + + + planet12.csc.ncsu.edu + 10000 + + + + UCSC + + planetslug3.cse.ucsc.edu + 10000 + + + planetslug4.cse.ucsc.edu + + + planetslug5.cse.ucsc.edu + + + planetslug6.cse.ucsc.edu + + + planetslug7.cse.ucsc.edu + + + + Nebraska + + planetlab1.unl.edu + + + planetlab2.unl.edu + + + + SICS + + planetlab1.sics.se + 10000 + + + planetlab2.sics.se + 10000 + + + + Dartmouth + + planetlab1.cs.dartmouth.edu + 10000 + + + planetlab2.cs.dartmouth.edu + 5000 + + + + Warsaw + + planetlab3.mini.pw.edu.pl + + + planetlab4.mini.pw.edu.pl + + + + Stanford + + planet1.scs.stanford.edu + 10000 + + + planet2.scs.stanford.edu + 10000 + + + + StevensTech + + planetlab2.cs.stevens-tech.edu + 10000 + + + planetlab1.cs.stevens-tech.edu + 10000 + + + + NYU + + planet1.scs.cs.nyu.edu + 10000 + + + planet2.scs.cs.nyu.edu + 10000 + + + planetx.scs.cs.nyu.edu + 10000 + + + + ICS-Forth + + planetlab1.ics.forth.gr + 104857 + + + planetlab2.ics.forth.gr + 104857 + + + + Passau + + dschinni.planetlab.extranet.uni-passau.de + 1000 + + + aladdin.planetlab.extranet.uni-passau.de + + + + Polito + + planetlab1.polito.it + 1000 + + + planetlab2.polito.it + 1000 + + + + Howard + + nodeb.howard.edu + 10000 + + + nodea.howard.edu + 10000 + + + + Torino + + planetlab1.di.unito.it + + + planetlab2.di.unito.it + + + + PLA Univ of Sci and Tech + + plnodeb.plaust.edu.cn + + + plnodea.plaust.edu.cn + + + + Delft + + planetlab1.ewi.tudelft.nl + 5000 + + + planetlab2.ewi.tudelft.nl + 5000 + + + + ICU + + planetlab5.kaist.ac.kr + 10000 + + + planetlab6.kaist.ac.kr + 10000 + + + + St Andrews + + planetlab3.cs.st-andrews.ac.uk + + + planetlab4.cs.st-andrews.ac.uk + + + + CSLAB-ICCS at NTUA + + planetlab1.cslab.ece.ntua.gr + 104857 + + + planetlab2.cslab.ece.ntua.gr + 104857 + + + planetlab3.cslab.ece.ntua.gr + 104857 + + + planetlab4.cslab.ece.ntua.gr + 104857 + + + + Kaiserslautern + + planetlab1.informatik.uni-kl.de + 10000 + + + planetlab2.informatik.uni-kl.de + 10000 + + + + Victoria + + pl1.planetlab.uvic.ca + 1000000 + + + pl2.planetlab.uvic.ca + 1000000 + + + pl3.planetlab.uvic.ca + 1000000 + + + pl4.planetlab.uvic.ca + 1000000 + + + pl5.planetlab.uvic.ca + 1000000 + + + + nus + + planetlab1.comp.nus.edu.sg + 10000 + + + planetlab2.comp.nus.edu.sg + 10000 + + + planetlab3.comp.nus.edu.sg + 10000 + + + + KIT + + iraplab1.iralab.uni-karlsruhe.de + 10000 + + + iraplab2.iralab.uni-karlsruhe.de + 10000 + + + + UST-HK + + plab1.cs.ust.hk + 10000 + + + plab2.cs.ust.hk + 10000 + + + + Tromso + + planetlab1.cs.uit.no + + + planetlab2.cs.uit.no + + + + KJIST + + planetlab1.netmedia.gist.ac.kr + 100000 + + + planetlab2.netmedia.gist.ac.kr + 100000 + + + planetlab3.netmedia.gist.ac.kr + 100000 + + + + Cincinnati + + planetlab1.uc.edu + 10000 + + + planetlab2.uc.edu + 10000 + + + + Polytechnic + + planetlab1.poly.edu + 2000 + + + planetlab2.poly.edu + 2000 + + + + University of Minnesota + + planetlab1.dtc.umn.edu + 10000 + + + planetlab2.dtc.umn.edu + 10000 + + + + ATT + + planet2.att.nodes.planet-lab.org + 10000 + + + planet1.att.nodes.planet-lab.org + 10000 + + + + TRLabs + + planetlab1.win.trlabs.ca + 10000 + + + planetlab2.win.trlabs.ca + 10000 + + + + EPFL + + lsirextpc01.epfl.ch + + + lsirextpc02.epfl.ch + + + + Brown + + saturn.cs.brown.edu + 10000 + + + jupiter.cs.brown.edu + 10000 + + + pluto.cs.brown.edu + 10000 + + + earth.cs.brown.edu + 10000 + + + + University of Melbourne - CSSE + + plnode01.cs.mu.oz.au + 500 + + + plnode02.cs.mu.oz.au + 500 + + + + UiO + + planetlab2.ifi.uio.no + + + planetlab1.ifi.uio.no + + + + RNP + + planetlab1.pop-pa.rnp.br + + + planetlab2.pop-pa.rnp.br + + + + RNP - CE + + planetlab1.pop-ce.rnp.br + 10000 + + + planetlab2.pop-ce.rnp.br + 10000 + + + + RNP - RJ + + planetlab1.pop-rj.rnp.br + + + planetlab2.pop-rj.rnp.br + + + + RNP - RS + + planetlab1.pop-rs.rnp.br + 10000 + + + planetlab2.pop-rs.rnp.br + 10000 + + + + Simula Research Laboratory + + planetlab1.simula.no + + + planetlab2.simula.no + + + + NCCU + + ent1.cs.nccu.edu.tw + 10000 + + + ent2.cs.nccu.edu.tw + 10000 + + + + Wuerzburg + + planetlab2.informatik.uni-wuerzburg.de + 10000 + + + planetlab1.informatik.uni-wuerzburg.de + 10000 + + + + Hannover L3S + + planet1.l3s.uni-hannover.de + 10000 + + + planet2.l3s.uni-hannover.de + 10000 + + + + Wisconsin + + planetlab2.cs.wisc.edu + 10000 + + + planetlab3.wail.wisc.edu + + + planetlab4.wail.wisc.edu + + + + UChicago + + planetlab1.cs.uchicago.edu + 10000 + + + planetlab2.cs.uchicago.edu + 10000 + + + planetlab3.cs.uchicago.edu + 10000 + + + planetlab4.cs.uchicago.edu + 10000 + + + + National University of Kaohsiung + + planetlab1.csie.nuk.edu.tw + 10000 + + + planetlab2.csie.nuk.edu.tw + 10000 + + + + Taiwan + + planetlab1.iis.sinica.edu.tw + 10000 + + + planetlab2.iis.sinica.edu.tw + 10000 + + + + BostonU + + planetlab-01.bu.edu + + + planetlab-02.bu.edu + + + + Princeton + + alice.cs.princeton.edu + 10000 + + + planetlab-9.cs.princeton.edu + 10000 + + + delta.cs.princeton.edu + + + echo.cs.princeton.edu + + + hptest-1.cs.princeton.edu + + + planetlab-01.cs.princeton.edu + + + planetlab-02.cs.princeton.edu + + + planetlab-03.cs.princeton.edu + + + planetlab-04.cs.princeton.edu + + + planetlab-05.cs.princeton.edu + + + planetlab-06.cs.princeton.edu + + + hp-dl320-g6-loaner.cs.princeton.edu + + + + SUNY Binghamton + + pluto.cs.binghamton.edu + + + charon.cs.binghamton.edu + + + + NECLabs + + plab2.nec-labs.com + + + plab1.nec-labs.com + + + + UVA + + planetlab01.sys.virginia.edu + 500 + + + planetlab02.sys.virginia.edu + 500 + + + + JHU Info Security + + planetlab1.isi.jhu.edu + + + planetlab2.isi.jhu.edu + + + + Instituto Tecnologico Buenos Aires + + planet-lab1.itba.edu.ar + 256000 + + + planet-lab2.itba.edu.ar + 256000 + + + + Cal Poly SLO + + planetlab-1.calpoly-netlab.net + + + planetlab-2.calpoly-netlab.net + + + + Doshisha University + + nis-planet1.doshisha.ac.jp + + + nis-planet2.doshisha.ac.jp + + + + University of Waterloo + + plink.cs.uwaterloo.ca + + + plonk.cs.uwaterloo.ca + + + + UFPR/C3SL + + planetlab1.c3sl.ufpr.br + + + planetlab2.c3sl.ufpr.br + + + + University of Otago + + planetlab1.cs.otago.ac.nz + + + planetlab2.cs.otago.ac.nz + + + + University of Oklahoma + + roam1.cs.ou.edu + + + roam2.cs.ou.edu + + + + MLab - NUQ01 + + + MLab - ORD01 + + + MLab - MIA01 + + + MLab - LAX01 + + + MLab - LGA01 + + + MLab - DFW01 + + + MLab - ATL01 + + + SUNY Albany + + node1.planetlab.albany.edu + 6291 + + + node2.planetlab.albany.edu + 6291 + + + + University of Nevada, Reno + + planetlab1.scsr.nevada.edu + + + planetlab2.scsr.nevada.edu + + + + Cleveland State University + + planetlab2.csuohio.edu + + + planetlab1.csuohio.edu + + + + Tokyo Institute of Technology + + node1.planet-lab.titech.ac.jp + + + node2.planet-lab.titech.ac.jp + + + node3.planet-lab.titech.ac.jp + + + node4.planet-lab.titech.ac.jp + + + + Colgate University + + flow.colgate.edu + + + ebb.colgate.edu + + + + Ege University + + planetlab1.plab.ege.edu.tr + 10000 + + + planetlab2.plab.ege.edu.tr + 10000 + + + + MLab - LGA02 + + + MLab - SEA01 + + + Huawei Technologies + + pn1-planetlab.huawei.com + + + pn2-planetlab.huawei.com + + + + Peking University + + pl1.pku.edu.cn + + + pl3.pku.edu.cn + + + pl2.pku.edu.cn + + + + University of Auckland + + planetlab-1.cs.auckland.ac.nz + + + planetlab-2.cs.auckland.ac.nz + + + + Loyola University Chicago + + node0.planetlab.etl.luc.edu + 1000 + + + node1.planetlab.etl.luc.edu + 1000 + + + + MLab - AMS01 + + + MLab - AMS02 + + + MLab - LHR01 + + + MLab - PAR01 + + + MLab - HAM01 + + + Nile University + + planetlab2.nileu.edu.eg + 1024 + + + planetlab1.nileu.edu.eg + 1024 + + + + University of Illinois at Chicago + + planetlab-1.cs.uic.edu + 1000 + + + planetlab-2.cs.uic.edu + 1000 + + + + Suffolk University + + metis.mcs.suffolk.edu + 10000 + + + adrastea.mcs.suffolk.edu + 10000 + + + + National Chung Cheng University + + planetlab-1.webedu.ccu.edu.tw + + + planetlab-2.webedu.ccu.edu.tw + + + + Shanghai Jiaotong University + + planetlab-1.sjtu.edu.cn + + + planetlab-2.sjtu.edu.cn + + + + Jordan University of Science and Technology + + planetlab1.just.edu.jo + + + planetlab2.just.edu.jo + + + + Hellenic Telecommunications and Post Commission + + mlab1.gr-ix.gr + + + mlab2.gr-ix.gr + + + mlab3.gr-ix.gr + + + + Nanyang Technological University + + pnode2.pdcc-ntu.singaren.net.sg + + + pnode1.pdcc-ntu.singaren.net.sg + + + + MLab - ATH01 + + + Stanford OpenFlow + + + Monash University + + pl1.eng.monash.edu.au + + + pl2.eng.monash.edu.au + + + + Pusan National University + + mnc1.pusan.ac.kr + + + mnc2.pusan.ac.kr + + + + BBN Technologies + + plnode-01.gpolab.bbn.com + 1000 + + + plnode-02.gpolab.bbn.com + 1000 + + + plnode-03.gpolab.bbn.com + + + + Hiroshima City University + + pl1.sos.info.hiroshima-cu.ac.jp + + + pl2.sos.info.hiroshima-cu.ac.jp + + + + National University of Defense Technology + + planetlab-2.pdl.nudt.edu.cn + + + planetlab-1.pdl.nudt.edu.cn + + + + MLab - SYD01 + + + CWRU + + planetlab-4.EECS.CWRU.Edu + + + planetlab-5.EECS.CWRU.Edu + + + + NEU + + planetlabone.ccs.neu.edu + 1000000 + + + planetlabtwo.ccs.neu.edu + 1000000 + + + + Intel IT - Folsom + + planetdev02.fm.intel.com + + + planetdev01.fm.intel.com + + + planetdev04.fm.intel.com + + + planetdev05.fm.intel.com + + + + University of Colorado + + planetlab1.cs.colorado.edu + 500 + + + planetlab2.cs.colorado.edu + + + + HIIT + + planetlab1.hiit.fi + + + planetlab2.hiit.fi + + + planetlab3.hiit.fi + + + planetlab4.hiit.fi + + + + Georgetown + + planetlab1.georgetown.edu + 10000 + + + planetlab2.georgetown.edu + 10000 + + + + UDel + + planetlab1.pc.cis.udel.edu + 10000 + + + planetlab2.pc.cis.udel.edu + 10000 + + + + Neuchatel + + planetlab1.unineuchatel.ch + + + planetlab2.unineuchatel.ch + 1000 + + + + University of Zurich + + planetlab1.csg.uzh.ch + + + planetlab2.csg.uzh.ch + + + + Fraunhofer Institut + + planetlab2.itwm.fhg.de + + + planetlab1.itwm.fhg.de + + + planetlab3.itwm.fraunhofer.de + + + planetlab4.itwm.fraunhofer.de + + + planetlab5.itwm.fraunhofer.de + + + + Iowa State ECE + + planetlab-1.ece.iastate.edu + 5000 + + + planetlab-2.ece.iastate.edu + 5000 + + + planetlab-3.ece.iastate.edu + 5000 + + + planetlab-4.ece.iastate.edu + 5000 + + + Planetlab-6.ece.iastate.edu + + + planetlab-5.ece.iastate.edu + 5000 + + + + Darmstadt University of Technology + + host1.planetlab.informatik.tu-darmstadt.de + + + host2.planetlab.informatik.tu-darmstadt.de + + + host3.planetlab.informatik.tu-darmstadt.de + + + + Simon Fraser University + + cs-planetlab3.cs.surrey.sfu.ca + 500 + + + cs-planetlab4.cs.surrey.sfu.ca + + + + UConn + + planetlab1.engr.uconn.edu + + + planetlab2.engr.uconn.edu + + + + TUM + + planetlab2.lkn.ei.tum.de + 1000 + + + planetlab1.lkn.ei.tum.de + 10000 + + + + University of Florida + + planetlab1.acis.ufl.edu + 10000 + + + planetlab2.acis.ufl.edu + 10000 + + + + GMU + + plgmu1.ite.gmu.edu + 2000 + + + plgmu2.ite.gmu.edu + 2000 + + + plgmu3.ite.gmu.edu + 2000 + + + plgmu4.ite.gmu.edu + 2000 + + + + Universitat Rovira i Virgili + + planetlab.urv.net + + + planetlab2.urv.net + + + + University of Pittsburgh + + planetlab1.cs.pitt.edu + + + planetlab2.cs.pitt.edu + + + + UNC Charlotte + + planetlab02.uncc.edu + 1000 + + + planetlab01.uncc.edu + 1000 + + + planetlab03.uncc.edu + + + planetlab04.uncc.edu + + + + Telekomunikacja Polska + + planetlab2.warsaw.rd.tp.pl + 10000 + + + + Imperial College London + + planetlab-1.imperial.ac.uk + 10000 + + + planetlab-2.imperial.ac.uk + 10000 + + + planetlab-3.imperial.ac.uk + 10000 + + + planetlab-4.imperial.ac.uk + 10000 + + + + FAU Erlangen + + planetlab1.informatik.uni-erlangen.de + + + planetlab2.informatik.uni-erlangen.de + + + + KTH + + planetlab-1.ssvl.kth.se + 10000 + + + planetlab-2.ssvl.kth.se + 10000 + + + + NAIST + + planetlab-01.naist.jp + 100000 + + + planetlab-02.naist.jp + 100000 + + + planetlab-03.naist.jp + 100000 + + + planetlab-04.naist.jp + 100000 + + + + Telekomunikacja Polska - Swidnik + + + Duisburg-Essen + + planetlab1.exp-math.uni-essen.de + 3000 + + + planetlab2.exp-math.uni-essen.de + 3000 + + + + Colorado State University + + planetlab-1.cs.colostate.edu + 10000 + + + planetlab-2.cs.colostate.edu + 10000 + + + + The University of Hong Kong + + planetlab1.eee.hku.hk + 10000 + + + planetlab2.eee.hku.hk + 10000 + + + + UOI + + planetlab2.cs.uoi.gr + 500 + + + planetlab1.cs.uoi.gr + 500 + + + + Technical University Ilmenau + + planet1.prakinf.tu-ilmenau.de + + + planet2.prakinf.tu-ilmenau.de + + + planet3.prakinf.tu-ilmenau.de + + + + ADETTI/ISCTE + + planetlab-1.iscte.pt + + + planetlab-2.iscte.pt + + + + Brigham Young University + + planetlab1.byu.edu + 5000 + + + planetlab2.byu.edu + 5000 + + + + MPISWS + + planetlab01.mpi-sws.mpg.de + + + planetlab02.mpi-sws.mpg.de + + + planetlab03.mpi-sws.mpg.de + + + planetlab04.mpi-sws.mpg.de + + + planetlab05.mpi-sws.mpg.de + + + planetlab06.mpi-sws.mpg.de + + + + University of Toronto + + planetlab01.erin.utoronto.ca + 500 + + + planetlab02.erin.utoronto.ca + 500 + + + + Indiana + + pl1.ucs.indiana.edu + + + pl2.ucs.indiana.edu + + + + University of Bern, IAM + + planetlab01.cnds.unibe.ch + 100000 + + + planetlab02.cnds.unibe.ch + 100000 + + + planetlab03.cnds.unibe.ch + 100000 + + + planetlab04.cnds.unibe.ch + 100000 + + + + Collegium Budapest + + planet1.colbud.hu + + + planet2.colbud.hu + + + + Politecnico di Milano + + planetlab1.elet.polimi.it + + + planetlab2.elet.polimi.it + + + + Jacobs University Bremen + + planetlab1.eecs.jacobs-university.de + 500 + + + planetlab2.eecs.jacobs-university.de + 500 + + + + University of South Florida + + planetlab1.csee.usf.edu + + + planetlab2.csee.usf.edu + + + planetlab3.csee.usf.edu + + + planetlab4.csee.usf.edu + + + planetlab5.csee.usf.edu + + + planetlab6.csee.usf.edu + + + + Orbit + + orbpl1.rutgers.edu + 5000 + + + orbpl2.rutgers.edu + 5000 + + + + UC Riverside + + planet-lab1.cs.ucr.edu + + + planet-lab2.cs.ucr.edu + + + + Ohio State University + + planetlab-1.cse.ohio-state.edu + 1000 + + + planetlab-2.cse.ohio-state.edu + 1000 + + + + University of Goettingen + + planetlab1.informatik.uni-goettingen.de + + + planetlab2.informatik.uni-goettingen.de + + + + University of Cyprus + + planetlab-1.cs.ucy.ac.cy + 1000 + + + planetlab-2.cs.ucy.ac.cy + 1000 + + + + University of Puerto Rico at Mayaguez + + planetlab-01.ece.uprm.edu + + + planetlab-02.ece.uprm.edu + + + + University of Texas at El Paso + + planetlab1.utep.edu + + + planetlab2.utep.edu + + + + Osaka University + + pl2-higashi.ics.es.osaka-u.ac.jp + + + pl1-higashi.ics.es.osaka-u.ac.jp + + + pub1-s.ane.cmc.osaka-u.ac.jp + + + pub2-s.ane.cmc.osaka-u.ac.jp + + + int-pl1.ise.eng.osaka-u.ac.jp + + + int-pl2.ise.eng.osaka-u.ac.jp + + + + Fraunhofer HHI + + planet01.hhi.fraunhofer.de + 500 + + + planet02.hhi.fraunhofer.de + 500 + + + + Trinity College Dublin + + planetlab01.cs.tcd.ie + 10000 + + + planetlab02.cs.tcd.ie + 10000 + + + + University of California, Irvine + + planetlab-1a.ics.uci.edu + + + planetlab-2a.ics.uci.edu + + + planetlab-3.ics.uci.edu + + + + JAIST + + planet0.jaist.ac.jp + + + planet1.jaist.ac.jp + + + + University of Saskatchewan + + planetlab-1.usask.ca + + + planetlab-2.usask.ca + + + + Queen Mary, University of London + + planetlab1.nrl.dcs.qmul.ac.uk + 1000000 + + + planetlab2.nrl.dcs.qmul.ac.uk + 1000000 + + + + San Jose State University + + plab1.engr.sjsu.edu + 500 + + + plab2.engr.sjsu.edu + 500 + + + + IIT-Chicago + + server1.planetlab.iit-tech.net + 10485 + + + server2.planetlab.iit-tech.net + 10485 + + + server3.planetlab.iit-tech.net + 10485 + + + server4.planetlab.iit-tech.net + 10485 + + + + Wroclaw University of Technology + + planetlab2.ci.pwr.wroc.pl + + + planetlab1.ci.pwr.wroc.pl + + + + LARC - University of Sao Paulo + + plab1.larc.usp.br + + + plab2.larc.usp.br + + + + vanderbilt + + planetlab-1.vuse.vanderbilt.edu + 1000 + + + planetlab-2.vuse.vanderbilt.edu + 1000 + + + + Washington State University + + planetlab1.eecs.wsu.edu + 5000 + + + planetlab2.eecs.wsu.edu + 5000 + + + + Kansas State University + + plab4.eece.ksu.edu + + + plab3.eece.ksu.edu + + + + Universita + + planetlab-1.dis.uniroma1.it + 500 + + + planetlab-2.dis.uniroma1.it + 500 + + + + FeM TU-Ilmenau + + planetlab1.fem.tu-ilmenau.de + + + planetlab2.fem.tu-ilmenau.de + + + + Keio University + + planetlab1.sfc.wide.ad.jp + + + planetlab2.sfc.wide.ad.jp + + + + University of Missouri Kansas City + + kc-sce-plab1.umkc.edu + 1000 + + + kc-sce-plab2.umkc.edu + 1000 + + + + Klagenfurt University + + plab1-itec.uni-klu.ac.at + 1000 + + + plab2-itec.uni-klu.ac.at + 1000 + + + + University of Central Florida + + planetlab1.eecs.ucf.edu + + + planetlab2.eecs.ucf.edu + + + + Technische Universitaet Dresden + + planet1.inf.tu-dresden.de + + + planet2.inf.tu-dresden.de + + + + UTA + + planetlab1.uta.edu + + + planetlab2.uta.edu + + + + CESNET + + planetlab1.cesnet.cz + 10000 + + + planetlab2.cesnet.cz + + + planetlab1.fit.vutbr.cz + + + + University of Lisbon + + planetlab-1.di.fc.ul.pt + 500 + + + planetlab-2.di.fc.ul.pt + 500 + + + + Beijing Institute of Technology + + planetlab1.iin-bit.com.cn + 500 + + + planetlab2.iin-bit.com.cn + + + + Singapore AREN + + planetlab1.singaren.net.sg + + + planetlab2.singaren.net.sg + + + planetlab3.singaren.net.sg + + + planetlab4.singaren.net.sg + + + + WIDE Project + + planetlab0.otemachi.wide.ad.jp + + + planetlab1.otemachi.wide.ad.jp + + + planetlab0.dojima.wide.ad.jp + + + planetlab1.dojima.wide.ad.jp + + + + PL Colo - TP Warsaw + + + IST + + planetlab-1.tagus.ist.utl.pt + 10000 + + + planetlab-2.tagus.ist.utl.pt + 10000 + + + + CeCalCULA + + fobos.cecalc.ula.ve + + + deimos.cecalc.ula.ve + + + + National Taiwan University EE + + adam.ee.ntu.edu.tw + + + eve.ee.ntu.edu.tw + + + + RWTH Aachen + + freedom.informatik.rwth-aachen.de + + + peace.informatik.rwth-aachen.de + + + + Worcester Polytechnic Institute + + 75-130-96-12.static.oxfr.ma.charter.com + + + 75-130-96-13.static.oxfr.ma.charter.com + + + + Aston University + + planetlab1.aston.ac.uk + + + planetlab2.aston.ac.uk + + + + Zuse Institute Berlin + + planet1.zib.de + + + planet2.zib.de + + + + University of Innsbruck, Austria. + + plab1-c703.uibk.ac.at + 1000 + + + plab2-c703.uibk.ac.at + 1000 + + + + University of Stuttgart + + planetvs1.informatik.uni-stuttgart.de + 550 + + + planetvs2.informatik.uni-stuttgart.de + 550 + + + + University of Konstanz + + dannan.disy.inf.uni-konstanz.de + + + chronos.disy.inf.uni-konstanz.de + + + + Universidade do Algarve + + planetlab1.fct.ualg.pt + + + planetlab2.fct.ualg.pt + + + + University of Vienna + + planetlab2.ani.univie.ac.at + + + planetlab3.ani.univie.ac.at + + + planetlab4.ani.univie.ac.at + + + + Waseda University + + planetlab4.goto.info.waseda.ac.jp + + + planetlab5.goto.info.waseda.ac.jp + + + planetlab6.goto.info.waseda.ac.jp + + + + University of Houston + + planetlab-1.cs.uh.edu + 1000 + + + planetlab-2.cs.uh.edu + 1000 + + + + IRISA + + peeramidion.irisa.fr + + + peeramide.irisa.fr + + + + Arizona State University + + planetlab2.eas.asu.edu + + + planetlab1.eas.asu.edu + + + + University of Ljubljana + + planetlab1.fri.uni-lj.si + + + planetlab2.fri.uni-lj.si + + + + The Citadel + + planetlab1.citadel.edu + + + planetlab2.citadel.edu + + + + BME + + planetlab1.tmit.bme.hu + + + planetlab2.tmit.bme.hu + + + + Poznan Supercomputing + + planetlab-1.man.poznan.pl + + + planetlab-2.man.poznan.pl + + + + Lahore University of Management Pakistan + + planetlab01.lums.edu.pk + 500 + + + planetlab02.lums.edu.pk + 500 + + + + Universidad Publica de Navarra + + planetlab1.tlm.unavarra.es + + + planetlab2.tlm.unavarra.es + + + + ETH Zuerich - CS + + planetlab1.inf.ethz.ch + + + planetlab2.inf.ethz.ch + + + planetlab3.inf.ethz.ch + + + planetlab4.inf.ethz.ch + + + + Seoul National University - MMLAB + + pl1snu.koren21.net + 1000000 + + + pl2snu.koren21.net + 1000000 + + + + Virginia Tech + + planetlab-01.vt.nodes.planet-lab.org + + + planetlab-02.vt.nodes.planet-lab.org + + + planetlab-03.vt.nodes.planet-lab.org + + + planetlab-04.vt.nodes.planet-lab.org + + + + Facultad de Ingenieria - Univ. de la Republica + + planetlab-1.fing.edu.uy + + + planetlab-2.fing.edu.uy + + + + HAW Hamburg + + merkur.planetlab.haw-hamburg.de + + + mars.planetlab.haw-hamburg.de + + + + TU MIET + + mercury.silicon-valley.ru + + + venus.silicon-valley.ru + + + + DoCoMo Labs USA + + planetlabnode-1.docomolabs-usa.com + + + planetlabnode-2.docomolabs-usa.com + + + + PL Colo - CLARA Santiago + + planetlab1-santiago.lan.redclara.net + + + planetlab2-santiago.lan.redclara.net + + + + PL Colo - CLARA Sao Paulo + + planetlab1-saopaulo.lan.redclara.net + + + planetlab2-saopaulo.lan.redclara.net + + + + PL Colo - CLARA Buenos Aires + + planetlab1-buenosaires.lan.redclara.net + + + planetlab2-buenosaires.lan.redclara.net + + + + PL Colo - CLARA Tijuana + + planetlab1-tijuana.lan.redclara.net + + + planetlab2-tijuana.lan.redclara.net + + + + CWI + + 146-179.surfsnel.dsl.internl.net + 100000 + + + 147-179.surfsnel.dsl.internl.net + + + + Space Monitoring Data Center SINP MSU + + plab-1.sinp.msu.ru + 1000 + + + plab-2.sinp.msu.ru + 1000 + + + + RRC Kurchatovskiy Instutute + + pl1.grid.kiae.ru + + + pl2.grid.kiae.ru + + + + NETMODE Lab of NTUA + + vicky.planetlab.ntua.gr + + + stella.planetlab.ntua.gr + + + + diff --git a/sfa/managers/registry_manager_pl.py b/sfa/managers/registry_manager_pl.py new file mode 100644 index 00000000..1636eda3 --- /dev/null +++ b/sfa/managers/registry_manager_pl.py @@ -0,0 +1,421 @@ +import types +import time +from sfa.util.prefixTree import prefixTree +from sfa.util.record import SfaRecord +from sfa.util.table import SfaTable +from sfa.util.record import SfaRecord +from sfa.trust.gid import GID +from sfa.util.namespace import * +from sfa.trust.credential import * +from sfa.trust.certificate import * +from sfa.util.faults import * + +def get_version(api): + version = {} + version['geni_api'] = 1 + version['sfa'] = 1 + return version + +def get_credential(api, xrn, type, is_self=False): + # convert xrn to hrn + if type: + hrn = urn_to_hrn(xrn)[0] + else: + hrn, type = urn_to_hrn(xrn) + + # Is this a root or sub authority + auth_hrn = api.auth.get_authority(hrn) + if not auth_hrn or hrn == api.config.SFA_INTERFACE_HRN: + auth_hrn = hrn + # get record info + auth_info = api.auth.get_auth_info(auth_hrn) + table = SfaTable() + records = table.findObjects({'type': type, 'hrn': hrn}) + if not records: + raise RecordNotFound(hrn) + record = records[0] + + # verify_cancreate_credential requires that the member lists + # (researchers, pis, etc) be filled in + api.fill_record_info(record) + if record['type']=='user': + if not record['enabled']: + raise AccountNotEnabled(": PlanetLab account %s is not enabled. Please contact your site PI" %(record['email'])) + + # get the callers gid + # if this is a self cred the record's gid is the caller's gid + if is_self: + caller_hrn = hrn + caller_gid = record.get_gid_object() + else: + caller_gid = api.auth.client_cred.get_gid_caller() + caller_hrn = caller_gid.get_hrn() + + object_hrn = record.get_gid_object().get_hrn() + rights = api.auth.determine_user_rights(caller_hrn, record) + # make sure caller has rights to this object + if rights.is_empty(): + raise PermissionError(caller_hrn + " has no rights to " + record['name']) + + object_gid = GID(string=record['gid']) + new_cred = Credential(subject = object_gid.get_subject()) + new_cred.set_gid_caller(caller_gid) + new_cred.set_gid_object(object_gid) + new_cred.set_issuer_keys(auth_info.get_privkey_filename(), auth_info.get_gid_filename()) + #new_cred.set_pubkey(object_gid.get_pubkey()) + new_cred.set_privileges(rights) + new_cred.get_privileges().delegate_all_privileges(True) + auth_kind = "authority,ma,sa" + # Parent not necessary, verify with certs + #new_cred.set_parent(api.auth.hierarchy.get_auth_cred(auth_hrn, kind=auth_kind)) + new_cred.encode() + new_cred.sign() + + return new_cred.save_to_string(save_parents=True) + + +# The GENI GetVersion call +def GetVersion(): + version = {} + version['geni_api'] = 1 + return version + +def resolve(api, xrns, type=None, full=True): + + # load all know registry names into a prefix tree and attempt to find + # the longest matching prefix + if not isinstance(xrns, types.ListType): + xrns = [xrns] + hrns = [urn_to_hrn(xrn)[0] for xrn in xrns] + # create a dict whre key is an registry hrn and its value is a + # hrns at that registry (determined by the known prefix tree). + xrn_dict = {} + registries = api.registries + tree = prefixTree() + registry_hrns = registries.keys() + tree.load(registry_hrns) + for xrn in xrns: + registry_hrn = tree.best_match(urn_to_hrn(xrn)[0]) + if registry_hrn not in xrn_dict: + xrn_dict[registry_hrn] = [] + xrn_dict[registry_hrn].append(xrn) + + records = [] + for registry_hrn in xrn_dict: + # skip the hrn without a registry hrn + # XX should we let the user know the authority is unknown? + if not registry_hrn: + continue + + # if the best match (longest matching hrn) is not the local registry, + # forward the request + xrns = xrn_dict[registry_hrn] + if registry_hrn != api.hrn: + credential = api.getCredential() + peer_records = registries[registry_hrn].Resolve(xrns, credential) + records.extend([SfaRecord(dict=record).as_dict() for record in peer_records]) + + # try resolving the remaining unfound records at the local registry + remaining_hrns = set(hrns).difference([record['hrn'] for record in records]) + # convert set to list + remaining_hrns = [hrn for hrn in remaining_hrns] + table = SfaTable() + local_records = table.findObjects({'hrn': remaining_hrns}) + if full: + api.fill_record_info(local_records) + + # convert local record objects to dicts + records.extend([dict(record) for record in local_records]) + if not records: + raise RecordNotFound(str(hrns)) + + if type: + records = filter(lambda rec: rec['type'] in [type], records) + + return records + +def list(api, xrn, origin_hrn=None): + hrn, type = urn_to_hrn(xrn) + # load all know registry names into a prefix tree and attempt to find + # the longest matching prefix + records = [] + registries = api.registries + registry_hrns = registries.keys() + tree = prefixTree() + tree.load(registry_hrns) + registry_hrn = tree.best_match(hrn) + + #if there was no match then this record belongs to an unknow registry + if not registry_hrn: + raise MissingAuthority(xrn) + + # if the best match (longest matching hrn) is not the local registry, + # forward the request + records = [] + if registry_hrn != api.hrn: + credential = api.getCredential() + record_list = registries[registry_hrn].list(credential, xrn, origin_hrn) + records = [SfaRecord(dict=record).as_dict() for record in record_list] + + # if we still havnt found the record yet, try the local registry + if not records: + if not api.auth.hierarchy.auth_exists(hrn): + raise MissingAuthority(hrn) + + table = SfaTable() + records = table.find({'authority': hrn}) + + return records + + +def register(api, record): + + hrn, type = record['hrn'], record['type'] + urn = hrn_to_urn(hrn,type) + # validate the type + if type not in ['authority', 'slice', 'node', 'user']: + raise UnknownSfaType(type) + + # check if record already exists + table = SfaTable() + existing_records = table.find({'type': type, 'hrn': hrn}) + if existing_records: + raise ExistingRecord(hrn) + + record = SfaRecord(dict = record) + record['authority'] = get_authority(record['hrn']) + type = record['type'] + hrn = record['hrn'] + api.auth.verify_object_permission(hrn) + auth_info = api.auth.get_auth_info(record['authority']) + pub_key = None + # make sure record has a gid + if 'gid' not in record: + uuid = create_uuid() + pkey = Keypair(create=True) + if 'key' in record and record['key']: + if isinstance(record['key'], types.ListType): + pub_key = record['key'][0] + else: + pub_key = record['key'] + pkey = convert_public_key(pub_key) + + gid_object = api.auth.hierarchy.create_gid(urn, uuid, pkey) + gid = gid_object.save_to_string(save_parents=True) + record['gid'] = gid + record.set_gid(gid) + + if type in ["authority"]: + # update the tree + if not api.auth.hierarchy.auth_exists(hrn): + api.auth.hierarchy.create_auth(hrn_to_urn(hrn,'authority')) + + # get the GID from the newly created authority + gid = auth_info.get_gid_object() + record.set_gid(gid.save_to_string(save_parents=True)) + pl_record = api.sfa_fields_to_pl_fields(type, hrn, record) + sites = api.plshell.GetSites(api.plauth, [pl_record['login_base']]) + if not sites: + pointer = api.plshell.AddSite(api.plauth, pl_record) + else: + pointer = sites[0]['site_id'] + + record.set_pointer(pointer) + record['pointer'] = pointer + + elif (type == "slice"): + acceptable_fields=['url', 'instantiation', 'name', 'description'] + pl_record = api.sfa_fields_to_pl_fields(type, hrn, record) + for key in pl_record.keys(): + if key not in acceptable_fields: + pl_record.pop(key) + slices = api.plshell.GetSlices(api.plauth, [pl_record['name']]) + if not slices: + pointer = api.plshell.AddSlice(api.plauth, pl_record) + else: + pointer = slices[0]['slice_id'] + record.set_pointer(pointer) + record['pointer'] = pointer + + elif (type == "user"): + persons = api.plshell.GetPersons(api.plauth, [record['email']]) + if not persons: + pointer = api.plshell.AddPerson(api.plauth, dict(record)) + else: + pointer = persons[0]['person_id'] + + if 'enabled' in record and record['enabled']: + api.plshell.UpdatePerson(api.plauth, pointer, {'enabled': record['enabled']}) + # add this persons to the site only if he is being added for the first + # time by sfa and doesont already exist in plc + if not persons or not persons[0]['site_ids']: + login_base = get_leaf(record['authority']) + api.plshell.AddPersonToSite(api.plauth, pointer, login_base) + + # What roles should this user have? + api.plshell.AddRoleToPerson(api.plauth, 'user', pointer) + # Add the user's key + if pub_key: + api.plshell.AddPersonKey(api.plauth, pointer, {'key_type' : 'ssh', 'key' : pub_key}) + + elif (type == "node"): + pl_record = api.sfa_fields_to_pl_fields(type, hrn, record) + login_base = hrn_to_pl_login_base(record['authority']) + nodes = api.plshell.GetNodes(api.plauth, [pl_record['hostname']]) + if not nodes: + pointer = api.plshell.AddNode(api.plauth, login_base, pl_record) + else: + pointer = nodes[0]['node_id'] + + record['pointer'] = pointer + record.set_pointer(pointer) + record_id = table.insert(record) + record['record_id'] = record_id + + # update membership for researchers, pis, owners, operators + api.update_membership(None, record) + + return record.get_gid_object().save_to_string(save_parents=True) + +def update(api, record_dict): + new_record = SfaRecord(dict = record_dict) + type = new_record['type'] + hrn = new_record['hrn'] + urn = hrn_to_urn(hrn,type) + api.auth.verify_object_permission(hrn) + table = SfaTable() + # make sure the record exists + records = table.findObjects({'type': type, 'hrn': hrn}) + if not records: + raise RecordNotFound(hrn) + record = records[0] + record['last_updated'] = time.gmtime() + + # Update_membership needs the membership lists in the existing record + # filled in, so it can see if members were added or removed + api.fill_record_info(record) + + # Use the pointer from the existing record, not the one that the user + # gave us. This prevents the user from inserting a forged pointer + pointer = record['pointer'] + # update the PLC information that was specified with the record + + if (type == "authority"): + api.plshell.UpdateSite(api.plauth, pointer, new_record) + + elif type == "slice": + pl_record=api.sfa_fields_to_pl_fields(type, hrn, new_record) + if 'name' in pl_record: + pl_record.pop('name') + api.plshell.UpdateSlice(api.plauth, pointer, pl_record) + + elif type == "user": + # SMBAKER: UpdatePerson only allows a limited set of fields to be + # updated. Ideally we should have a more generic way of doing + # this. I copied the field names from UpdatePerson.py... + update_fields = {} + all_fields = new_record + for key in all_fields.keys(): + if key in ['first_name', 'last_name', 'title', 'email', + 'password', 'phone', 'url', 'bio', 'accepted_aup', + 'enabled']: + update_fields[key] = all_fields[key] + api.plshell.UpdatePerson(api.plauth, pointer, update_fields) + + if 'key' in new_record and new_record['key']: + # must check this key against the previous one if it exists + persons = api.plshell.GetPersons(api.plauth, [pointer], ['key_ids']) + person = persons[0] + keys = person['key_ids'] + keys = api.plshell.GetKeys(api.plauth, person['key_ids']) + key_exists = False + if isinstance(new_record['key'], types.ListType): + new_key = new_record['key'][0] + else: + new_key = new_record['key'] + + # Delete all stale keys + for key in keys: + if new_record['key'] != key['key']: + api.plshell.DeleteKey(api.plauth, key['key_id']) + else: + key_exists = True + if not key_exists: + api.plshell.AddPersonKey(api.plauth, pointer, {'key_type': 'ssh', 'key': new_key}) + + # update the openssl key and gid + pkey = convert_public_key(new_key) + uuid = create_uuid() + gid_object = api.auth.hierarchy.create_gid(urn, uuid, pkey) + gid = gid_object.save_to_string(save_parents=True) + record['gid'] = gid + record = SfaRecord(dict=record) + table.update(record) + + elif type == "node": + api.plshell.UpdateNode(api.plauth, pointer, new_record) + + else: + raise UnknownSfaType(type) + + # update membership for researchers, pis, owners, operators + api.update_membership(record, new_record) + + return 1 + +def remove(api, xrn, type, origin_hrn=None): + # convert xrn to hrn + if type: + hrn = urn_to_hrn(xrn)[0] + else: + hrn, type = urn_to_hrn(xrn) + + table = SfaTable() + filter = {'hrn': hrn} + if type and type not in ['all', '*']: + filter['type'] = type + records = table.find(filter) + if not records: + raise RecordNotFound(hrn) + record = records[0] + type = record['type'] + + credential = api.getCredential() + registries = api.registries + + # Try to remove the object from the PLCDB of federated agg. + # This is attempted before removing the object from the local agg's PLCDB and sfa table + if hrn.startswith(api.hrn) and type in ['user', 'slice', 'authority']: + for registry in registries: + if registry not in [api.hrn]: + try: + result=registries[registry].remove_peer_object(credential, record, origin_hrn) + except: + pass + if type == "user": + persons = api.plshell.GetPersons(api.plauth, record['pointer']) + # only delete this person if he has site ids. if he doesnt, it probably means + # he was just removed from a site, not actually deleted + if persons and persons[0]['site_ids']: + api.plshell.DeletePerson(api.plauth, record['pointer']) + elif type == "slice": + if api.plshell.GetSlices(api.plauth, record['pointer']): + api.plshell.DeleteSlice(api.plauth, record['pointer']) + elif type == "node": + if api.plshell.GetNodes(api.plauth, record['pointer']): + api.plshell.DeleteNode(api.plauth, record['pointer']) + elif type == "authority": + if api.plshell.GetSites(api.plauth, record['pointer']): + api.plshell.DeleteSite(api.plauth, record['pointer']) + else: + raise UnknownSfaType(type) + + table.remove(record) + + return 1 + +def remove_peer_object(api, record, origin_hrn=None): + pass + +def register_peer_object(api, record, origin_hrn=None): + pass diff --git a/sfa/managers/slice_manager_pl.py b/sfa/managers/slice_manager_pl.py new file mode 100644 index 00000000..42309781 --- /dev/null +++ b/sfa/managers/slice_manager_pl.py @@ -0,0 +1,308 @@ +### $Id: slices.py 15842 2009-11-22 09:56:13Z anil $ +### $URL: https://svn.planet-lab.org/svn/sfa/trunk/sfa/plc/slices.py $ + +import datetime +import time +import traceback +import sys +from copy import deepcopy +from lxml import etree +from StringIO import StringIO +from types import StringTypes +from sfa.util.rspecHelper import merge_rspecs +from sfa.util.namespace import * +from sfa.util.rspec import * +from sfa.util.specdict import * +from sfa.util.faults import * +from sfa.util.record import SfaRecord +from sfa.util.policy import Policy +from sfa.util.prefixTree import prefixTree +from sfa.util.sfaticket import * +from sfa.trust.credential import Credential +from sfa.util.threadmanager import ThreadManager +import sfa.util.xmlrpcprotocol as xmlrpcprotocol +from sfa.util.debug import log +import sfa.plc.peers as peers +from copy import copy + +def get_version(): + version = {} + version['geni_api'] = 1 + version['sfa'] = 1 + return version + +def slice_status(api, slice_xrn, creds ): + result = {} + result['geni_urn'] = slice_xrn + result['geni_status'] = 'unknown' + result['geni_resources'] = {} + return result + +def create_slice(api, xrn, creds, rspec, users): + hrn, type = urn_to_hrn(xrn) + + # Validate the RSpec against PlanetLab's schema --disabled for now + # The schema used here needs to aggregate the PL and VINI schemas + # schema = "/var/www/html/schemas/pl.rng" + schema = None + if schema: + try: + tree = etree.parse(StringIO(rspec)) + except etree.XMLSyntaxError: + message = str(sys.exc_info()[1]) + raise InvalidRSpec(message) + + relaxng_doc = etree.parse(schema) + relaxng = etree.RelaxNG(relaxng_doc) + + if not relaxng(tree): + error = relaxng.error_log.last_error + message = "%s (line %s)" % (error.message, error.line) + raise InvalidRSpec(message) + + # attempt to use delegated credential first + credential = api.getDelegatedCredential(creds) + if not credential: + credential = api.getCredential() + threads = ThreadManager() + for aggregate in api.aggregates: + # Just send entire RSpec to each aggregate + server = api.aggregates[aggregate] + threads.run(server.CreateSliver, xrn, credential, rspec, users) + + results = threads.get_results() + merged_rspec = merge_rspecs(results) + return merged_rspec + +def renew_slice(api, xrn, creds, expiration_time): + # attempt to use delegated credential first + credential = api.getDelegatedCredential(creds) + if not credential: + credential = api.getCredential() + threads = ThreadManager() + for aggregate in api.aggregates: + server = api.aggregates[aggregate] + threads.run(server.RenewSliver, xrn, credential, expiration_time) + threads.get_results() + return 1 + +def get_ticket(api, xrn, creds, rspec, users): + slice_hrn, type = urn_to_hrn(xrn) + # get the netspecs contained within the clients rspec + aggregate_rspecs = {} + tree= etree.parse(StringIO(rspec)) + elements = tree.findall('./network') + for element in elements: + aggregate_hrn = element.values()[0] + aggregate_rspecs[aggregate_hrn] = rspec + + # attempt to use delegated credential first + credential = api.getDelegatedCredential(creds) + if not credential: + credential = api.getCredential() + threads = ThreadManager() + for aggregate, aggregate_rspec in aggregate_rspecs.items(): + server = None + if aggregate in api.aggregates: + server = api.aggregates[aggregate] + else: + net_urn = hrn_to_urn(aggregate, 'authority') + # we may have a peer that knows about this aggregate + for agg in api.aggregates: + target_aggs = api.aggregates[agg].get_aggregates(credential, net_urn) + if not target_aggs or not 'hrn' in target_aggs[0]: + continue + # send the request to this address + url = target_aggs[0]['url'] + server = xmlrpcprotocol.get_server(url, api.key_file, api.cert_file) + # aggregate found, no need to keep looping + break + if server is None: + continue + threads.run(server.GetTicket, xrn, credential, aggregate_rspec, users) + + results = threads.get_results() + + # gather information from each ticket + rspecs = [] + initscripts = [] + slivers = [] + object_gid = None + for result in results: + agg_ticket = SfaTicket(string=result) + attrs = agg_ticket.get_attributes() + if not object_gid: + object_gid = agg_ticket.get_gid_object() + rspecs.append(agg_ticket.get_rspec()) + initscripts.extend(attrs.get('initscripts', [])) + slivers.extend(attrs.get('slivers', [])) + + # merge info + attributes = {'initscripts': initscripts, + 'slivers': slivers} + merged_rspec = merge_rspecs(rspecs) + + # create a new ticket + ticket = SfaTicket(subject = slice_hrn) + ticket.set_gid_caller(api.auth.client_gid) + ticket.set_issuer(key=api.key, subject=api.hrn) + ticket.set_gid_object(object_gid) + ticket.set_pubkey(object_gid.get_pubkey()) + #new_ticket.set_parent(api.auth.hierarchy.get_auth_ticket(auth_hrn)) + ticket.set_attributes(attributes) + ticket.set_rspec(merged_rspec) + ticket.encode() + ticket.sign() + return ticket.save_to_string(save_parents=True) + + +def delete_slice(api, xrn, creds): + # attempt to use delegated credential first + credential = api.getDelegatedCredential(creds) + if not credential: + credential = api.getCredential() + threads = ThreadManager() + for aggregate in api.aggregates: + server = api.aggregates[aggregate] + threads.run(server.DeleteSliver, xrn, credential) + threads.get_results() + return 1 + +def start_slice(api, xrn, creds): + # attempt to use delegated credential first + credential = api.getDelegatedCredential(creds) + if not credential: + credential = api.getCredential() + threads = ThreadManager() + for aggregate in api.aggregates: + server = api.aggregates[aggregate] + threads.run(server.Start, xrn, credential) + threads.get_results() + return 1 + +def stop_slice(api, xrn, creds): + # attempt to use delegated credential first + credential = api.getDelegatedCredential(creds) + if not credential: + credential = api.getCredential() + threads = ThreadManager() + for aggregate in api.aggregates: + server = api.aggregates[aggregate] + threads.run(server.Stop, xrn, credential) + threads.get_results() + return 1 + +def reset_slice(api, xrn): + """ + Not implemented + """ + return 1 + +def shutdown(api, xrn, creds): + """ + Not implemented + """ + return 1 + +def status(api, xrn, creds): + """ + Not implemented + """ + return 1 + +def get_slices(api, creds): + # look in cache first + if api.cache: + slices = api.cache.get('slices') + if slices: + return slices + + # attempt to use delegated credential first + credential = api.getDelegatedCredential(creds) + if not credential: + credential = api.getCredential() + threads = ThreadManager() + # fetch from aggregates + for aggregate in api.aggregates: + server = api.aggregates[aggregate] + threads.run(server.ListSlices, credential) + + # combime results + results = threads.get_results() + slices = [] + for result in results: + slices.extend(result) + + # cache the result + if api.cache: + api.cache.add('slices', slices) + + return slices + +def get_rspec(api, creds, options): + # get slice's hrn from options + xrn = options.get('geni_slice_urn', None) + hrn, type = urn_to_hrn(xrn) + + # get hrn of the original caller + origin_hrn = options.get('origin_hrn', None) + if not origin_hrn: + origin_hrn = Credential(string=creds[0]).get_gid_caller().get_hrn() + + # look in cache first + if api.cache and not xrn: + rspec = api.cache.get('nodes') + if rspec: + return rspec + + hrn, type = urn_to_hrn(xrn) + rspec = None + + # attempt to use delegated credential first + credential = api.getDelegatedCredential(creds) + if not credential: + credential = api.getCredential() + threads = ThreadManager() + for aggregate in api.aggregates: + # get the rspec from the aggregate + server = api.aggregates[aggregate] + my_opts = copy(options) + my_opts['geni_compressed'] = False + threads.run(server.ListResources, credential, my_opts) + #threads.run(server.get_resources, cred, xrn, origin_hrn) + + results = threads.get_results() + # combine the rspecs into a single rspec + for agg_rspec in results: + try: + tree = etree.parse(StringIO(agg_rspec)) + except etree.XMLSyntaxError: + message = str(agg_rspec) + ": " + str(sys.exc_info()[1]) + raise InvalidRSpec(message) + + root = tree.getroot() + if root.get("type") in ["SFA"]: + if rspec == None: + rspec = root + else: + for network in root.iterfind("./network"): + rspec.append(deepcopy(network)) + for request in root.iterfind("./request"): + rspec.append(deepcopy(request)) + + rspec = etree.tostring(rspec, xml_declaration=True, pretty_print=True) + # cache the result + if api.cache and not xrn: + api.cache.add('nodes', rspec) + + return rspec + +def main(): + r = RSpec() + r.parseFile(sys.argv[1]) + rspec = r.toDict() + create_slice(None,'plc.princeton.tmacktestslice',rspec) + +if __name__ == "__main__": + main() + diff --git a/sfa/managers/vini/__init__.py b/sfa/managers/vini/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/sfa/managers/vini/request.xml b/sfa/managers/vini/request.xml new file mode 100644 index 00000000..111f7b0e --- /dev/null +++ b/sfa/managers/vini/request.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sfa/managers/vini/topology.py b/sfa/managers/vini/topology.py new file mode 100755 index 00000000..cb65fb50 --- /dev/null +++ b/sfa/managers/vini/topology.py @@ -0,0 +1,38 @@ +#!/usr/bin/python + +# $Id: topology.py 14181 2009-07-01 19:46:07Z acb $ +# $URL: https://svn.planet-lab.org/svn/NodeManager-topo/trunk/topology.py $ + +# +# Links in the physical topology, gleaned from looking at the Internet2 +# and NLR topology maps. Link (a, b) connects sites with IDs a and b. +# +PhysicalLinks = [(2, 12), # I2 Princeton - New York + (4, 5), # NLR Chicago - Houston + (4, 6), # NLR Chicago - Atlanta + (4, 7), # NLR Chicago - Seattle + (4, 9), # NLR Chicago - New York + (4, 10), # NLR Chicago - Wash DC + (5, 6), # NLR Houston - Atlanta + (5, 8), # NLR Houston - Los Angeles + (6, 10), # NLR Atlanta - Wash DC + (6, 14), # NLR Atlanta - Ga Tech + (7, 8), # NLR Seattle - Los Angeles + (9, 10), # NLR New York - Wash DC + (11, 13), # I2 Chicago - Wash DC + (11, 15), # I2 Chicago - Atlanta + (11, 16), # I2 Chicago - CESNET + (11, 17), # I2 Chicago - Kansas City + (12, 13), # I2 New York - Wash DC + (13, 15), # I2 Wash DC - Atlanta + (14, 15), # Ga Tech - I2 Atlanta + (15, 19), # I2 Atlanta - Houston + (17, 19), # I2 Kansas City - Houston + (17, 22), # I2 Kansas City - Salt Lake City + (17, 24), # I2 Kansas City - UMKC + (19, 20), # I2 Houston - Los Angeles + (20, 21), # I2 Los Angeles - Seattle + (20, 22), # I2 Los Angeles - Salt Lake City + (21, 22)] # I2 Seattle - Salt Lake City + + diff --git a/sfa/managers/vini/utils.py b/sfa/managers/vini/utils.py new file mode 100644 index 00000000..b0d7e51e --- /dev/null +++ b/sfa/managers/vini/utils.py @@ -0,0 +1,719 @@ +from __future__ import with_statement +import re +import socket +from sfa.util.faults import * +from sfa.managers.vini.topology import PhysicalLinks +from xmlbuilder import XMLBuilder +from lxml import etree +import sys +from StringIO import StringIO + +VINI_RELAXNG_SCHEMA = "/var/www/html/schemas/vini.rng" + +# Taken from bwlimit.py +# +# See tc_util.c and http://physics.nist.gov/cuu/Units/binary.html. Be +# warned that older versions of tc interpret "kbps", "mbps", "mbit", +# and "kbit" to mean (in this system) "kibps", "mibps", "mibit", and +# "kibit" and that if an older version is installed, all rates will +# be off by a small fraction. +suffixes = { + "": 1, + "bit": 1, + "kibit": 1024, + "kbit": 1000, + "mibit": 1024*1024, + "mbit": 1000000, + "gibit": 1024*1024*1024, + "gbit": 1000000000, + "tibit": 1024*1024*1024*1024, + "tbit": 1000000000000, + "bps": 8, + "kibps": 8*1024, + "kbps": 8000, + "mibps": 8*1024*1024, + "mbps": 8000000, + "gibps": 8*1024*1024*1024, + "gbps": 8000000000, + "tibps": 8*1024*1024*1024*1024, + "tbps": 8000000000000 +} + + +def get_tc_rate(s): + """ + Parses an integer or a tc rate string (e.g., 1.5mbit) into bits/second + """ + + if type(s) == int: + return s + m = re.match(r"([0-9.]+)(\D*)", s) + if m is None: + return -1 + suffix = m.group(2).lower() + if suffixes.has_key(suffix): + return int(float(m.group(1)) * suffixes[suffix]) + else: + return -1 + +def format_tc_rate(rate): + """ + Formats a bits/second rate into a tc rate string + """ + + if rate >= 1000000000 and (rate % 1000000000) == 0: + return "%.0fgbit" % (rate / 1000000000.) + elif rate >= 1000000 and (rate % 1000000) == 0: + return "%.0fmbit" % (rate / 1000000.) + elif rate >= 1000: + return "%.0fkbit" % (rate / 1000.) + else: + return "%.0fbit" % rate + + +class Node: + def __init__(self, node, bps = 1000 * 1000000): + self.id = node['node_id'] + self.idtag = "n%s" % self.id + self.hostname = node['hostname'] + self.name = self.shortname = self.hostname.replace('.vini-veritas.net', '') + self.site_id = node['site_id'] + self.ipaddr = socket.gethostbyname(self.hostname) + self.bps = bps + self.links = set() + self.sliver = False + + def get_link_id(self, remote): + if self.id < remote.id: + link = (self.id<<7) + remote.id + else: + link = (remote.id<<7) + self.id + return link + + def get_iface_id(self, remote): + if self.id < remote.id: + iface = 1 + else: + iface = 2 + return iface + + def get_virt_ip(self, remote): + link = self.get_link_id(remote) + iface = self.get_iface_id(remote) + first = link >> 6 + second = ((link & 0x3f)<<2) + iface + return "192.168.%d.%d" % (first, second) + + def get_virt_net(self, remote): + link = self.get_link_id(remote) + first = link >> 6 + second = (link & 0x3f)<<2 + return "192.168.%d.%d/30" % (first, second) + + def get_site(self, sites): + return sites[self.site_id] + + def get_topo_rspec(self, link): + if link.end1 == self: + remote = link.end2 + elif link.end2 == self: + remote = link.end1 + else: + raise Error("Link does not connect to Node") + + my_ip = self.get_virt_ip(remote) + remote_ip = remote.get_virt_ip(self) + net = self.get_virt_net(remote) + bw = format_tc_rate(link.bps) + return (remote.id, remote.ipaddr, bw, my_ip, remote_ip, net) + + def add_link(self, link): + self.links.add(link) + + def add_tag(self, sites): + s = self.get_site(sites) + words = self.hostname.split(".") + index = words[0].replace("node", "") + if index.isdigit(): + self.tag = s.tag + index + else: + self.tag = None + + # Assumes there is at most one Link between two sites + def get_sitelink(self, node, sites): + site1 = sites[self.site_id] + site2 = sites[node.site_id] + sl = site1.links.intersection(site2.links) + if len(sl): + return sl.pop() + return None + + def add_sliver(self): + self.sliver = True + + def toxml(self, xml, hrn): + if not self.tag: + return + with xml.node(id = self.idtag): + with xml.hostname: + xml << self.hostname + with xml.kbps: + xml << str(int(self.bps/1000)) + if self.sliver: + with xml.sliver: + pass + + +class Link: + def __init__(self, end1, end2, bps = 1000 * 1000000, parent = None): + self.end1 = end1 + self.end2 = end2 + self.bps = bps + self.parent = parent + self.children = [] + + end1.add_link(self) + end2.add_link(self) + + if self.parent: + self.parent.children.append(self) + + def toxml(self, xml): + end_ids = "%s %s" % (self.end1.idtag, self.end2.idtag) + + if self.parent: + element = xml.vlink(endpoints=end_ids) + else: + element = xml.link(endpoints=end_ids) + + with element: + with xml.description: + xml << "%s -- %s" % (self.end1.name, self.end2.name) + with xml.kbps: + xml << str(int(self.bps/1000)) + for child in self.children: + child.toxml(xml) + + +class Site: + def __init__(self, site): + self.id = site['site_id'] + self.idtag = "s%s" % self.id + self.node_ids = site['node_ids'] + self.name = site['abbreviated_name'].replace(" ", "_") + self.tag = site['login_base'] + self.public = site['is_public'] + self.enabled = site['enabled'] + self.links = set() + + def get_sitenodes(self, nodes): + n = [] + for i in self.node_ids: + n.append(nodes[i]) + return n + + def add_link(self, link): + self.links.add(link) + + def toxml(self, xml, hrn, nodes): + if not (self.public and self.enabled and self.node_ids): + return + with xml.site(id = self.idtag): + with xml.name: + xml << self.name + + for node in self.get_sitenodes(nodes): + node.toxml(xml, hrn) + + +class Slice: + def __init__(self, slice): + self.id = slice['slice_id'] + self.name = slice['name'] + self.node_ids = set(slice['node_ids']) + self.slice_tag_ids = slice['slice_tag_ids'] + + def get_tag(self, tagname, slicetags, node = None): + for i in self.slice_tag_ids: + tag = slicetags[i] + if tag.tagname == tagname: + if (not node) or (node.id == tag.node_id): + return tag + else: + return None + + def get_nodes(self, nodes): + n = [] + for id in self.node_ids: + n.append(nodes[id]) + return n + + + # Add a new slice tag + def add_tag(self, tagname, value, slicetags, node = None): + record = {'slice_tag_id':None, 'slice_id':self.id, 'tagname':tagname, 'value':value} + if node: + record['node_id'] = node.id + else: + record['node_id'] = None + tag = Slicetag(record) + slicetags[tag.id] = tag + self.slice_tag_ids.append(tag.id) + tag.changed = True + tag.updated = True + return tag + + # Update a slice tag if it exists, else add it + def update_tag(self, tagname, value, slicetags, node = None): + tag = self.get_tag(tagname, slicetags, node) + if tag and tag.value == value: + value = "no change" + elif tag: + tag.value = value + tag.changed = True + else: + tag = self.add_tag(tagname, value, slicetags, node) + tag.updated = True + + def assign_egre_key(self, slicetags): + if not self.get_tag('egre_key', slicetags): + try: + key = free_egre_key(slicetags) + self.update_tag('egre_key', key, slicetags) + except: + # Should handle this case... + pass + return + + def turn_on_netns(self, slicetags): + tag = self.get_tag('netns', slicetags) + if (not tag) or (tag.value != '1'): + self.update_tag('netns', '1', slicetags) + return + + def turn_off_netns(self, slicetags): + tag = self.get_tag('netns', slicetags) + if tag and (tag.value != '0'): + tag.delete() + return + + def add_cap_net_admin(self, slicetags): + tag = self.get_tag('capabilities', slicetags) + if tag: + caps = tag.value.split(',') + for cap in caps: + if cap == "CAP_NET_ADMIN": + return + else: + newcaps = "CAP_NET_ADMIN," + tag.value + self.update_tag('capabilities', newcaps, slicetags) + else: + self.add_tag('capabilities', 'CAP_NET_ADMIN', slicetags) + return + + def remove_cap_net_admin(self, slicetags): + tag = self.get_tag('capabilities', slicetags) + if tag: + caps = tag.value.split(',') + newcaps = [] + for cap in caps: + if cap != "CAP_NET_ADMIN": + newcaps.append(cap) + if newcaps: + value = ','.join(newcaps) + self.update_tag('capabilities', value, slicetags) + else: + tag.delete() + return + + # Update the vsys/setup-link and vsys/setup-nat slice tags. + def add_vsys_tags(self, slicetags): + link = nat = False + for i in self.slice_tag_ids: + tag = slicetags[i] + if tag.tagname == 'vsys': + if tag.value == 'setup-link': + link = True + elif tag.value == 'setup-nat': + nat = True + if not link: + self.add_tag('vsys', 'setup-link', slicetags) + if not nat: + self.add_tag('vsys', 'setup-nat', slicetags) + return + + +class Slicetag: + newid = -1 + def __init__(self, tag): + self.id = tag['slice_tag_id'] + if not self.id: + # Make one up for the time being... + self.id = Slicetag.newid + Slicetag.newid -= 1 + self.slice_id = tag['slice_id'] + self.tagname = tag['tagname'] + self.value = tag['value'] + self.node_id = tag['node_id'] + self.updated = False + self.changed = False + self.deleted = False + + # Mark a tag as deleted + def delete(self): + self.deleted = True + self.updated = True + + def write(self, api): + if self.changed: + if int(self.id) > 0: + api.plshell.UpdateSliceTag(api.plauth, self.id, self.value) + else: + api.plshell.AddSliceTag(api.plauth, self.slice_id, + self.tagname, self.value, self.node_id) + elif self.deleted and int(self.id) > 0: + api.plshell.DeleteSliceTag(api.plauth, self.id) + + +""" +A topology is a compound object consisting of: +* a dictionary mapping site IDs to Site objects +* a dictionary mapping node IDs to Node objects +* the Site objects are connected via SiteLink objects representing + the physical topology and available bandwidth +* the Node objects are connected via Link objects representing + the requested or assigned virtual topology of a slice +""" +class Topology: + def __init__(self, api): + self.api = api + self.sites = get_sites(api) + self.nodes = get_nodes(api) + self.tags = get_slice_tags(api) + self.sitelinks = [] + self.nodelinks = [] + + for (s1, s2) in PhysicalLinks: + self.sitelinks.append(Link(self.sites[s1], self.sites[s2])) + + for id in self.nodes: + self.nodes[id].add_tag(self.sites) + + for t in self.tags: + tag = self.tags[t] + if tag.tagname == 'topo_rspec': + node1 = self.nodes[tag.node_id] + l = eval(tag.value) + for (id, realip, bw, lvip, rvip, vnet) in l: + allocbps = get_tc_rate(bw) + node1.bps -= allocbps + try: + node2 = self.nodes[id] + if node1.id < node2.id: + sl = node1.get_sitelink(node2, self.sites) + sl.bps -= allocbps + except: + pass + + + """ Lookup site based on id or idtag value """ + def lookupSite(self, id): + val = None + if isinstance(id, basestring): + id = int(id.lstrip('s')) + try: + val = self.sites[id] + except: + raise KeyError("site ID %s not found" % id) + return val + + def getSites(self): + sites = [] + for s in self.sites: + sites.append(self.sites[s]) + return sites + + """ Lookup node based on id or idtag value """ + def lookupNode(self, id): + val = None + if isinstance(id, basestring): + id = int(id.lstrip('n')) + try: + val = self.nodes[id] + except: + raise KeyError("node ID %s not found" % id) + return val + + def getNodes(self): + nodes = [] + for n in self.nodes: + nodes.append(self.nodes[n]) + return nodes + + def nodesInTopo(self): + nodes = [] + for n in self.nodes: + node = self.nodes[n] + if node.sliver: + nodes.append(node) + return nodes + + def lookupSliceTag(self, id): + val = None + try: + val = self.tags[id] + except: + raise KeyError("slicetag ID %s not found" % id) + return val + + def getSliceTags(self): + tags = [] + for t in self.tags: + tags.append(self.tags[t]) + return tags + + def lookupSiteLink(self, node1, node2): + site1 = self.sites[node1.site_id] + site2 = self.sites[node2.site_id] + for link in self.sitelinks: + if site1 == link.end1 and site2 == link.end2: + return link + if site2 == link.end1 and site1 == link.end2: + return link + return None + + + def __add_vlink(self, vlink, slicenodes, parent = None): + n1 = n2 = None + endpoints = vlink.get("endpoints") + if endpoints: + (end1, end2) = endpoints.split() + n1 = self.lookupNode(end1) + n2 = self.lookupNode(end2) + elif parent: + """ Try to infer the endpoints for the virtual link """ + site_endpoints = parent.get("endpoints") + (n1, n2) = self.__infer_endpoints(site_endpoints, slicenodes) + else: + raise Error("no endpoints given") + + #print "Added virtual link: %s -- %s" % (n1.tag, n2.tag) + bps = int(vlink.findtext("kbps")) * 1000 + sitelink = self.lookupSiteLink(n1, n2) + if not sitelink: + raise PermissionError("nodes %s and %s not adjacent" % + (n1.idtag, n2.idtag)) + self.nodelinks.append(Link(n1, n2, bps, sitelink)) + return + + """ + Infer the endpoints of the virtual link. If the slice exists on + only a single node at each end of the physical link, we'll assume that + the user wants the virtual link to terminate at these nodes. + """ + def __infer_endpoints(self, endpoints, slicenodes): + n = [] + ends = endpoints.split() + for end in ends: + found = 0 + site = self.lookupSite(end) + for id in site.node_ids: + if id in slicenodes: + n.append(slicenodes[id]) + found += 1 + if found != 1: + raise Error("could not infer endpoint for site %s" % site.id) + #print "Inferred endpoints: %s %s" % (n[0].idtag, n[1].idtag) + return n + + def nodeTopoFromRSpec(self, xml): + if self.nodelinks: + raise Error("virtual topology already present") + + nodedict = {} + for node in self.getNodes(): + nodedict[node.idtag] = node + + slicenodes = {} + + tree = etree.parse(StringIO(xml)) + + # Validate the incoming request against the RelaxNG schema + relaxng_doc = etree.parse(VINI_RELAXNG_SCHEMA) + relaxng = etree.RelaxNG(relaxng_doc) + + if not relaxng(tree): + error = relaxng.error_log.last_error + message = "%s (line %s)" % (error.message, error.line) + raise InvalidRSpec(message) + + rspec = tree.getroot() + + """ + Handle requests where the user has annotated a description of the + physical resources (nodes and links) with virtual ones (slivers + and vlinks). + """ + # Find slivers under node elements + for sliver in rspec.iterfind("./network/site/node/sliver"): + elem = sliver.getparent() + node = nodedict[elem.get("id")] + slicenodes[node.id] = node + node.add_sliver() + + # Find vlinks under link elements + for vlink in rspec.iterfind("./network/link/vlink"): + link = vlink.getparent() + self.__add_vlink(vlink, slicenodes, link) + + """ + Handle requests where the user has listed the virtual resources only + """ + # Find slivers that specify nodeid + for sliver in rspec.iterfind("./request/sliver[@nodeid]"): + node = nodedict[sliver.get("nodeid")] + slicenodes[node.id] = node + node.add_sliver() + + # Find vlinks that specify endpoints + for vlink in rspec.iterfind("./request/vlink[@endpoints]"): + self.__add_vlink(vlink, slicenodes) + + return + + def nodeTopoFromSliceTags(self, slice): + if self.nodelinks: + raise Error("virtual topology already present") + + for node in slice.get_nodes(self.nodes): + node.sliver = True + linktag = slice.get_tag('topo_rspec', self.tags, node) + if linktag: + l = eval(linktag.value) + for (id, realip, bw, lvip, rvip, vnet) in l: + if node.id < id: + bps = get_tc_rate(bw) + remote = self.lookupNode(id) + sitelink = self.lookupSiteLink(node, remote) + self.nodelinks.append(Link(node,remote,bps,sitelink)) + + def updateSliceTags(self, slice): + if not self.nodelinks: + return + + slice.update_tag('vini_topo', 'manual', self.tags) + slice.assign_egre_key(self.tags) + slice.turn_on_netns(self.tags) + slice.add_cap_net_admin(self.tags) + + for node in slice.get_nodes(self.nodes): + linkdesc = [] + for link in node.links: + linkdesc.append(node.get_topo_rspec(link)) + if linkdesc: + topo_str = "%s" % linkdesc + slice.update_tag('topo_rspec', topo_str, self.tags, node) + + # Update slice tags in database + for tag in self.getSliceTags(): + if tag.slice_id == slice.id: + if tag.tagname == 'topo_rspec' and not tag.updated: + tag.delete() + tag.write(self.api) + + """ + Check the requested topology against the available topology and capacity + """ + def verifyNodeTopo(self, hrn, topo): + for link in self.nodelinks: + if link.bps <= 0: + raise GeniInvalidArgument(bw, "BW") + + n1 = link.end1 + n2 = link.end2 + sitelink = self.lookupSiteLink(n1, n2) + if not sitelink: + raise PermissionError("%s: nodes %s and %s not adjacent" % (hrn, n1.tag, n2.tag)) + if sitelink.bps < link.bps: + raise PermissionError("%s: insufficient capacity between %s and %s" % (hrn, n1.tag, n2.tag)) + + """ + Produce XML directly from the topology specification. + """ + def toxml(self, hrn = None): + xml = XMLBuilder(format = True, tab_step = " ") + with xml.RSpec(type="VINI"): + if hrn: + element = xml.network(name="Public_VINI", slice=hrn) + else: + element = xml.network(name="Public_VINI") + + with element: + for site in self.getSites(): + site.toxml(xml, hrn, self.nodes) + for link in self.sitelinks: + link.toxml(xml) + + header = '\n' + return header + str(xml) + +""" +Create a dictionary of site objects keyed by site ID +""" +def get_sites(api): + tmp = [] + for site in api.plshell.GetSites(api.plauth): + t = site['site_id'], Site(site) + tmp.append(t) + return dict(tmp) + + +""" +Create a dictionary of node objects keyed by node ID +""" +def get_nodes(api): + tmp = [] + for node in api.plshell.GetNodes(api.plauth): + t = node['node_id'], Node(node) + tmp.append(t) + return dict(tmp) + +""" +Create a dictionary of slice objects keyed by slice ID +""" +def get_slice(api, slicename): + slice = api.plshell.GetSlices(api.plauth, [slicename]) + if slice: + return Slice(slice[0]) + else: + return None + +""" +Create a dictionary of slicetag objects keyed by slice tag ID +""" +def get_slice_tags(api): + tmp = [] + for tag in api.plshell.GetSliceTags(api.plauth): + t = tag['slice_tag_id'], Slicetag(tag) + tmp.append(t) + return dict(tmp) + +""" +Find a free EGRE key +""" +def free_egre_key(slicetags): + used = set() + for i in slicetags: + tag = slicetags[i] + if tag.tagname == 'egre_key': + used.add(int(tag.value)) + + for i in range(1, 256): + if i not in used: + key = i + break + else: + raise KeyError("No more EGRE keys available") + + return "%s" % key + diff --git a/sfa/managers/vini/vini.rnc b/sfa/managers/vini/vini.rnc new file mode 100644 index 00000000..0be7640a --- /dev/null +++ b/sfa/managers/vini/vini.rnc @@ -0,0 +1,70 @@ +start = RSpec +RSpec = element RSpec { + attribute type { xsd:NMTOKEN }, + ( network | request ) +} +network = element network { + attribute name { xsd:NMTOKEN }, + attribute slice { xsd:NMTOKEN }?, + sliver_defaults?, + site+, + link* +} +sliver_defaults = element sliver_defaults { + sliver_elements +} +site = element site { + attribute id { xsd:ID }, + element name { text }, + node* +} +node = element node { + attribute id { xsd:ID }, + element hostname { text }, + element bw_unallocated { attribute units { xsd:NMTOKEN }, text }?, + element bw_limit { attribute units { xsd:NMTOKEN }, text }?, + sliver* +} +link = element link { + attribute endpoints { xsd:IDREFS }, + element description { text }?, + element bw_unallocated { attribute units { xsd:NMTOKEN }, text }, + vlink* +} +request = element request { + attribute name { xsd:NMTOKEN }, + sliver_defaults?, + sliver*, + vlink* +} +sliver = element sliver { + attribute nodeid { xsd:ID }?, + sliver_elements +} +sliver_elements = ( + element capabilities { text }? + & element codemux { text }* + & element cpu_pct { text }? + & element cpu_share { text }? + & element delegations { text }? + & element disk_max { text }? + & element initscript { text }? + & element ip_addresses {text }* + & element net_i2_max_kbyte { text }? + & element net_i2_max_rate { text }? + & element net_i2_min_rate { text }? + & element net_i2_share { text }? + & element net_i2_thresh_kbyte { text }? + & element net_max_kbyte { text }? + & element net_max_rate { text }? + & element net_min_rate { text }? + & element net_share { text }? + & element net_thresh_kbyte { text }? + & element vsys {text}* + & element vsys_vnet { text }? +) +vlink = element vlink { + attribute endpoints { xsd:IDREFS }?, + element description { text }?, + element kbps { text }? +} diff --git a/sfa/managers/vini/vini.rng b/sfa/managers/vini/vini.rng new file mode 100644 index 00000000..1545cb5b --- /dev/null +++ b/sfa/managers/vini/vini.rng @@ -0,0 +1,255 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sfa/managers/vini/vini.xml b/sfa/managers/vini/vini.xml new file mode 100644 index 00000000..eb0049b3 --- /dev/null +++ b/sfa/managers/vini/vini.xml @@ -0,0 +1,373 @@ + + + + + Princeton + + node1.princeton.vini-veritas.net + 999000 + 1000000 + + + + PSG + + node1.psg.vini-veritas.net + 1000000 + 1000000 + + + node2.psg.vini-veritas.net + 1000000 + 1000000 + + + + NLR Chicago + + node1.chic.nlr.vini-veritas.net + 1000000 + 1000000 + + + node2.chic.nlr.vini-veritas.net + 1000000 + 1000000 + + + + NLR Houston + + node1.hous.nlr.vini-veritas.net + 1000000 + 1000000 + + + node2.hous.nlr.vini-veritas.net + 1000000 + 1000000 + + + + NLR Atlanta + + node1.atla.nlr.vini-veritas.net + 1000000 + 1000000 + + + node2.atla.nlr.vini-veritas.net + 1000000 + 1000000 + + + + NLR Seattle + + node1.seat.nlr.vini-veritas.net + 1000000 + 1000000 + + + node2.seat.nlr.vini-veritas.net + 1000000 + 1000000 + + + + NLR Los Angeles + + node1.losa.nlr.vini-veritas.net + 1000000 + 1000000 + + + node2.losa.nlr.vini-veritas.net + 1000000 + 1000000 + + + + NLR New York + + node1.newy.nlr.vini-veritas.net + 1000000 + 1000000 + + + node2.newy.nlr.vini-veritas.net + 1000000 + 1000000 + + + + NLR Wash DC + + node1.wash.nlr.vini-veritas.net + 1000000 + 1000000 + + + node2.wash.nlr.vini-veritas.net + 1000000 + 1000000 + + + + I2 Chicago + + node1.chic.internet2.vini-veritas.net + 963000 + 1000000 + + + node2.chic.internet2.vini-veritas.net + 1000000 + 1000000 + + + + I2 New York + + node1.newy.internet2.vini-veritas.net + 988000 + 1000000 + + + node2.newy.internet2.vini-veritas.net + 1000000 + 1000000 + + + + I2 Wash DC + + node1.wash.internet2.vini-veritas.net + 964000 + 1000000 + + + node2.wash.internet2.vini-veritas.net + 1000000 + 1000000 + + + + Georgia Tech + + node1.gatech.vini-veritas.net + 999000 + 1000000 + + + + I2 Atlanta + + node1.atla.internet2.vini-veritas.net + 964000 + 1000000 + + + node2.atla.internet2.vini-veritas.net + 1000000 + 1000000 + + + + CESNET + + node1.cesnet.vini-veritas.net + 1000000 + 1000000 + + + node2.cesnet.vini-veritas.net + 1000000 + + + + I2 Kansas City + + node1.kans.internet2.vini-veritas.net + 961000 + 1000000 + + + node2.kans.internet2.vini-veritas.net + 1000000 + 1000000 + + + + I2 Houston + + node1.hous.internet2.vini-veritas.net + 964000 + 1000000 + + + node2.hous.internet2.vini-veritas.net + 1000000 + 1000000 + + + + I2 Los Angeles + + node1.losa.internet2.vini-veritas.net + 964000 + 1000000 + + + node2.losa.internet2.vini-veritas.net + 1000000 + 1000000 + + + + I2 Seattle + + node1.seat.internet2.vini-veritas.net + 975000 + 1000000 + + + node2.seat.internet2.vini-veritas.net + 1000000 + 1000000 + + + + I2 Salt Lake + + node1.salt.internet2.vini-veritas.net + 962000 + 1000000 + + + node2.salt.internet2.vini-veritas.net + 1000000 + 1000000 + + + + UMKC + + node1.umkc.vini-veritas.net + 999000 + + + node2.umkc.vini-veritas.net + 1000000 + + + + Princeton -- I2 New York + 1000000 + + + NLR Chicago -- NLR Houston + 1000000 + + + NLR Chicago -- NLR Atlanta + 1000000 + + + NLR Chicago -- NLR Seattle + 1000000 + + + NLR Chicago -- NLR New York + 1000000 + + + NLR Chicago -- NLR Wash DC + 1000000 + + + NLR Houston -- NLR Atlanta + 1000000 + + + NLR Houston -- NLR Los Angeles + 1000000 + + + NLR Atlanta -- NLR Wash DC + 1000000 + + + NLR Atlanta -- Georgia Tech + 1000000 + + + NLR Seattle -- NLR Los Angeles + 1000000 + + + NLR New York -- NLR Wash DC + 1000000 + + + I2 Chicago -- I2 Wash DC + 988000 + + + I2 Chicago -- I2 Atlanta + 988000 + + + I2 Chicago -- CESNET + 1000000 + + + I2 Chicago -- I2 Kansas City + 987000 + + + I2 New York -- I2 Wash DC + 988000 + + + I2 Wash DC -- I2 Atlanta + 988000 + + + Georgia Tech -- I2 Atlanta + 1000000 + + + I2 Atlanta -- I2 Houston + 988000 + + + I2 Kansas City -- I2 Houston + 988000 + + + I2 Kansas City -- I2 Salt Lake + 987000 + + + I2 Kansas City -- UMKC + 999000 + + + I2 Houston -- I2 Los Angeles + 988000 + + + I2 Los Angeles -- I2 Seattle + 988000 + + + I2 Los Angeles -- I2 Salt Lake + 988000 + + + I2 Seattle -- I2 Salt Lake + 987000 + + + diff --git a/sfa/managers/vini/vini_network.py b/sfa/managers/vini/vini_network.py new file mode 100644 index 00000000..26d8a338 --- /dev/null +++ b/sfa/managers/vini/vini_network.py @@ -0,0 +1,469 @@ +from __future__ import with_statement +from sfa.util.faults import * +from xmlbuilder import XMLBuilder +from lxml import etree +import sys +from sfa.plc.network import * +from sfa.managers.vini.topology import PhysicalLinks + +# Taken from bwlimit.py +# +# See tc_util.c and http://physics.nist.gov/cuu/Units/binary.html. Be +# warned that older versions of tc interpret "kbps", "mbps", "mbit", +# and "kbit" to mean (in this system) "kibps", "mibps", "mibit", and +# "kibit" and that if an older version is installed, all rates will +# be off by a small fraction. +suffixes = { + "": 1, + "bit": 1, + "kibit": 1024, + "kbit": 1000, + "mibit": 1024*1024, + "mbit": 1000000, + "gibit": 1024*1024*1024, + "gbit": 1000000000, + "tibit": 1024*1024*1024*1024, + "tbit": 1000000000000, + "bps": 8, + "kibps": 8*1024, + "kbps": 8000, + "mibps": 8*1024*1024, + "mbps": 8000000, + "gibps": 8*1024*1024*1024, + "gbps": 8000000000, + "tibps": 8*1024*1024*1024*1024, + "tbps": 8000000000000 +} + + +def get_tc_rate(s): + """ + Parses an integer or a tc rate string (e.g., 1.5mbit) into bits/second + """ + + if type(s) == int: + return s + m = re.match(r"([0-9.]+)(\D*)", s) + if m is None: + return -1 + suffix = m.group(2).lower() + if suffixes.has_key(suffix): + return int(float(m.group(1)) * suffixes[suffix]) + else: + return -1 + +def format_tc_rate(rate): + """ + Formats a bits/second rate into a tc rate string + """ + + if rate >= 1000000000 and (rate % 1000000000) == 0: + return "%.0fgbit" % (rate / 1000000000.) + elif rate >= 1000000 and (rate % 1000000) == 0: + return "%.0fmbit" % (rate / 1000000.) + elif rate >= 1000: + return "%.0fkbit" % (rate / 1000.) + else: + return "%.0fbit" % rate + + +class ViniNode(Node): + def __init__(self, network, node, bps = 1000 * 1000000): + Node.__init__(self, network, node) + self.bps = bps + self.links = set() + self.name = self.hostname.replace('.vini-veritas.net', '') + + def get_link_id(self, remote): + if self.id < remote.id: + link = (self.id<<7) + remote.id + else: + link = (remote.id<<7) + self.id + return link + + def get_iface_id(self, remote): + if self.id < remote.id: + iface = 1 + else: + iface = 2 + return iface + + def get_virt_ip(self, remote): + link = self.get_link_id(remote) + iface = self.get_iface_id(remote) + first = link >> 6 + second = ((link & 0x3f)<<2) + iface + return "192.168.%d.%d" % (first, second) + + def get_virt_net(self, remote): + link = self.get_link_id(remote) + first = link >> 6 + second = (link & 0x3f)<<2 + return "192.168.%d.%d/30" % (first, second) + + def get_topo_rspec(self, link): + if link.end1 == self: + remote = link.end2 + elif link.end2 == self: + remote = link.end1 + else: + raise Error("Link does not connect to Node") + + my_ip = self.get_virt_ip(remote) + remote_ip = remote.get_virt_ip(self) + net = self.get_virt_net(remote) + bw = format_tc_rate(link.bps) + ipaddr = remote.get_primary_iface().ipv4 + return (remote.id, ipaddr, bw, my_ip, remote_ip, net) + + def add_link(self, link): + self.links.add(link) + + # Assumes there is at most one Link between two sites + def get_sitelink(self, node): + site1 = self.network.sites[self.site_id] + site2 = self.network.sites[node.site_id] + sl = site1.links.intersection(site2.links) + if len(sl): + return sl.pop() + return None + + def toxml(self, xml): + slice = self.network.slice + if self.whitelist and not self.sliver: + if not slice or slice.id not in self.whitelist: + return + + with xml.node(id = self.idtag): + with xml.hostname: + xml << self.hostname + with xml.bw_unallocated(units="kbps"): + xml << str(int(self.bps/1000)) + self.get_primary_iface().toxml(xml) + if self.sliver: + self.sliver.toxml(xml) + + +class ViniSite(Site): + def __init__(self, network, site): + Site.__init__(self, network, site) + self.links = set() + + def add_link(self, link): + self.links.add(link) + +class ViniSlice(Slice): + def assign_egre_key(self): + tag = self.get_tag('egre_key') + if not tag: + try: + key = self.network.free_egre_key() + except: + raise InvalidRSpec("ran out of EGRE keys!") + tag = self.update_tag('egre_key', key, None, 10) + return + + def turn_on_netns(self): + tag = self.get_tag('netns') + if (not tag) or (tag.value != '1'): + tag = self.update_tag('netns', '1', None, 10) + return + + def turn_off_netns(self): + tag = self.get_tag('netns') + if tag and (tag.value != '0'): + tag.delete() + return + + def add_cap_net_admin(self): + tag = self.get_tag('capabilities') + if tag: + caps = tag.value.split(',') + for cap in caps: + if cap == "CAP_NET_ADMIN": + newcaps = tag.value + break + else: + newcaps = "CAP_NET_ADMIN," + tag.value + self.update_tag('capabilities', newcaps, None, 10) + else: + tag = self.add_tag('capabilities', 'CAP_NET_ADMIN', None, 10) + return + + def remove_cap_net_admin(self): + tag = self.get_tag('capabilities') + if tag: + caps = tag.value.split(',') + newcaps = [] + for cap in caps: + if cap != "CAP_NET_ADMIN": + newcaps.append(cap) + if newcaps: + value = ','.join(newcaps) + self.update_tag('capabilities', value, None, 10) + else: + tag.delete() + return + +class Link: + def __init__(self, end1, end2, bps = 1000 * 1000000, parent = None): + self.end1 = end1 + self.end2 = end2 + self.bps = bps + self.parent = parent + self.children = [] + + end1.add_link(self) + end2.add_link(self) + + if self.parent: + self.parent.children.append(self) + + def toxml(self, xml): + end_ids = "%s %s" % (self.end1.idtag, self.end2.idtag) + + if self.parent: + with xml.vlink(endpoints=end_ids): + with xml.description: + xml << "%s -- %s" % (self.end1.name, self.end2.name) + with xml.kbps: + xml << str(int(self.bps/1000)) + else: + with xml.link(endpoints=end_ids): + with xml.description: + xml << "%s -- %s" % (self.end1.name, self.end2.name) + with xml.bw_unallocated(units="kbps"): + xml << str(int(self.bps/1000)) + for child in self.children: + child.toxml(xml) + + + +class ViniNetwork(Network): + def __init__(self, api, type = "SFA"): + Network.__init__(self, api, type) + self.sitelinks = [] + self.nodelinks = [] + + for (s1, s2) in PhysicalLinks: + self.sitelinks.append(Link(self.sites[s1], self.sites[s2])) + + for t in self.tags: + tag = self.tags[t] + if tag.tagname == 'topo_rspec': + node1 = self.nodes[tag.node_id] + l = eval(tag.value) + for (id, realip, bw, lvip, rvip, vnet) in l: + allocbps = get_tc_rate(bw) + node1.bps -= allocbps + try: + node2 = self.nodes[id] + if node1.id < node2.id: + sl = node1.get_sitelink(node2) + sl.bps -= allocbps + except: + pass + + def lookupSiteLink(self, node1, node2): + site1 = self.sites[node1.site_id] + site2 = self.sites[node2.site_id] + for link in self.sitelinks: + if site1 == link.end1 and site2 == link.end2: + return link + if site2 == link.end1 and site1 == link.end2: + return link + return None + + + """ + Check the requested topology against the available topology and capacity + """ + def verifyTopology(self): + for link in self.nodelinks: + if link.bps <= 0: + raise InvalidRSpec("must request positive bandwidth") + + n1 = link.end1 + n2 = link.end2 + sitelink = self.lookupSiteLink(n1, n2) + if not sitelink: + raise InvalidRSpec("nodes %s and %s are not adjacent" % + (n1.idtag, n2.idtag)) + if sitelink.bps < link.bps: + raise InvalidRSpec("not enough capacity between %s and %s" % + (n1.idtag, n2.idtag)) + + def __add_vlink(self, vlink, parent = None): + n1 = n2 = None + endpoints = vlink.get("endpoints") + if endpoints: + (end1, end2) = endpoints.split() + n1 = self.lookupNode(end1) + n2 = self.lookupNode(end2) + elif parent: + """ Try to infer the endpoints for the virtual link """ + site_endpoints = parent.get("endpoints") + (n1, n2) = self.__infer_endpoints(site_endpoints) + else: + raise InvalidRSpec("no endpoints given") + + #print "Added virtual link: %s -- %s" % (n1.tag, n2.tag) + bps = int(vlink.findtext("kbps")) * 1000 + sitelink = self.lookupSiteLink(n1, n2) + if not sitelink: + raise InvalidRSpec("nodes %s and %s are not adjacent" % + (n1.idtag, n2.idtag)) + self.nodelinks.append(Link(n1, n2, bps, sitelink)) + return + + """ + Infer the endpoints of the virtual link. If the slice exists on + only a single node at each end of the physical link, we'll assume that + the user wants the virtual link to terminate at these nodes. + """ + def __infer_endpoints(self, endpoints): + n = [] + ends = endpoints.split() + for end in ends: + found = 0 + site = self.lookupSite(end) + for id in site.node_ids: + if id in self.nodedict: + n.append(self.nodedict[id]) + found += 1 + if found != 1: + raise InvalidRSpec("could not infer endpoint for site %s" % + site.idtag) + #print "Inferred endpoints: %s %s" % (n[0].idtag, n[1].idtag) + return n + + def addRSpec(self, xml, schema = None): + Network.addRSpec(self, xml, schema) + self.nodedict = {} + for node in self.nodesWithSlivers(): + self.nodedict[node.id] = node + + # Find vlinks under link elements + for vlink in self.rspec.iterfind("./network/link/vlink"): + link = vlink.getparent() + self.__add_vlink(vlink, link) + + # Find vlinks that specify endpoints + for vlink in self.rspec.iterfind("./request/vlink[@endpoints]"): + self.__add_vlink(vlink) + + + def addSlice(self): + Network.addSlice(self) + + for node in self.slice.get_nodes(): + linktag = self.slice.get_tag('topo_rspec', node) + if linktag: + l = eval(linktag.value) + for (id, realip, bw, lvip, rvip, vnet) in l: + if node.id < id: + bps = get_tc_rate(bw) + remote = self.lookupNode(id) + sitelink = self.lookupSiteLink(node, remote) + self.nodelinks.append(Link(node,remote,bps,sitelink)) + + + def updateSliceTags(self): + slice = self.slice + + tag = slice.update_tag('vini_topo', 'manual', None, 10) + slice.assign_egre_key() + slice.turn_on_netns() + slice.add_cap_net_admin() + + for node in self.nodesWithSlivers(): + linkdesc = [] + for link in node.links: + linkdesc.append(node.get_topo_rspec(link)) + if linkdesc: + topo_str = "%s" % linkdesc + tag = slice.update_tag('topo_rspec', topo_str, node, 10) + + # Expire the un-updated topo_rspec tags + for tag in self.getSliceTags(): + if tag.tagname in ['topo_rspec']: + if not tag.was_updated(): + tag.delete() + + Network.updateSliceTags(self) + + """ + Find a free EGRE key + """ + def free_egre_key(self): + used = set() + for tag in self.getSliceTags(): + if tag.tagname == 'egre_key': + used.add(int(tag.value)) + + for i in range(1, 256): + if i not in used: + key = i + break + else: + raise KeyError("No more EGRE keys available") + + return str(key) + + """ + Produce XML directly from the topology specification. + """ + def toxml(self): + xml = XMLBuilder(format = True, tab_step = " ") + with xml.RSpec(type=self.type): + if self.slice: + element = xml.network(name=self.api.hrn, slice=self.slice.hrn) + else: + element = xml.network(name=self.api.hrn) + + with element: + if self.slice: + self.slice.toxml(xml) + for site in self.getSites(): + site.toxml(xml) + for link in self.sitelinks: + link.toxml(xml) + + header = '\n' + return header + str(xml) + + """ + Create a dictionary of ViniSite objects keyed by site ID + """ + def get_sites(self, api): + tmp = [] + for site in api.plshell.GetSites(api.plauth, {'peer_id': None}): + t = site['site_id'], ViniSite(self, site) + tmp.append(t) + return dict(tmp) + + + """ + Create a dictionary of ViniNode objects keyed by node ID + """ + def get_nodes(self, api): + tmp = [] + for node in api.plshell.GetNodes(api.plauth, {'peer_id': None}): + t = node['node_id'], ViniNode(self, node) + tmp.append(t) + return dict(tmp) + + """ + Return a ViniSlice object for a single slice + """ + def get_slice(self, api, hrn): + slicename = hrn_to_pl_slicename(hrn) + slice = api.plshell.GetSlices(api.plauth, [slicename]) + if slice: + self.slice = ViniSlice(self, slicename, slice[0]) + return self.slice + else: + return None + + + diff --git a/sfa/methods/CreateSliver.py b/sfa/methods/CreateSliver.py new file mode 100644 index 00000000..c21ceb4f --- /dev/null +++ b/sfa/methods/CreateSliver.py @@ -0,0 +1,52 @@ +from sfa.util.faults import * +from sfa.util.namespace import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.util.sfatablesRuntime import run_sfatables +import sys +from sfa.trust.credential import Credential +from sfa.util.sfalogging import logger + +class CreateSliver(Method): + """ + Allocate resources to a slice. This operation is expected to + start the allocated resources asynchornously after the operation + has successfully completed. Callers can check on the status of + the resources using SliverStatus. + + @param slice_urn (string) URN of slice to allocate to + @param credentials ([string]) of credentials + @param rspec (string) rspec to allocate + + """ + interfaces = ['aggregate', 'slicemgr'] + accepts = [ + Parameter(str, "Slice URN"), + Mixed(Parameter(str, "Credential string"), + Parameter(type([str]), "List of credentials")), + Parameter(str, "RSpec"), + Parameter(type([]), "List of user information") + ] + returns = Parameter(str, "Allocated RSpec") + + def call(self, slice_xrn, creds, rspec, users): + hrn, type = urn_to_hrn(slice_xrn) + + self.api.logger.info("interface: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, hrn, self.name)) + + # Find the valid credentials + valid_creds = self.api.auth.checkCredentials(creds, 'createsliver', hrn) + origin_hrn = Credential(string=valid_creds[0]).get_gid_caller().get_hrn() + + manager = self.api.get_interface_manager() + + # flter rspec through sfatables + if self.api.interface in ['aggregate']: + chain_name = 'OUTGOING' + elif self.api.interface in ['slicemgr']: + chain_name = 'FORWARD-OUTGOING' + rspec = run_sfatables(chain_name, hrn, origin_hrn, rspec) + allocated = manager.create_slice(self.api, slice_xrn, creds, rspec, users) + + return rspec + diff --git a/sfa/methods/DeleteSliver.py b/sfa/methods/DeleteSliver.py new file mode 100644 index 00000000..3ed3b47b --- /dev/null +++ b/sfa/methods/DeleteSliver.py @@ -0,0 +1,41 @@ +### $Id: stop_slice.py 17732 2010-04-19 21:10:45Z tmack $ +### $URL: https://svn.planet-lab.org/svn/sfa/trunk/sfa/methods/stop_slice.py $ + +from sfa.util.faults import * +from sfa.util.namespace import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.trust.auth import Auth +from sfa.trust.credential import Credential + +class DeleteSliver(Method): + """ + Remove the slice from all nodes and free the allocated resources + + @param xrn human readable name of slice to instantiate (hrn or urn) + @param cred credential string specifying the rights of the caller + @return 1 is successful, faults otherwise + """ + + interfaces = ['aggregate', 'slicemgr', 'component'] + + accepts = [ + Parameter(str, "Human readable name of slice to delete (hrn or urn)"), + Mixed(Parameter(str, "Credential string"), + Parameter(type([str]), "List of credentials")), + ] + + returns = Parameter(int, "1 if successful") + + def call(self, xrn, creds): + hrn, type = urn_to_hrn(xrn) + valid_creds = self.api.auth.checkCredentials(creds, 'deletesliver', hrn) + + #log the call + origin_hrn = Credential(string=valid_creds[0]).get_gid_caller().get_hrn() + self.api.logger.info("interface: %s\tcaller-hrn: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, origin_hrn, hrn, self.name)) + + manager = self.api.get_interface_manager() + manager.delete_slice(self.api, xrn, creds) + + return 1 diff --git a/sfa/methods/GetCredential.py b/sfa/methods/GetCredential.py new file mode 100644 index 00000000..df6e8688 --- /dev/null +++ b/sfa/methods/GetCredential.py @@ -0,0 +1,55 @@ +### $Id: get_credential.py 17576 2010-04-05 20:56:15Z tmack $ +### $URL: https://svn.planet-lab.org/svn/sfa/trunk/sfa/methods/get_credential.py $ + +from sfa.trust.credential import * +from sfa.trust.rights import * +from sfa.util.faults import * +from sfa.util.namespace import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.util.debug import log +from sfa.trust.credential import Credential + +class GetCredential(Method): + """ + Retrive a credential for an object + If cred == Nonee then the behavior reverts to get_self_credential + + @param hrn human readable name of object (hrn or urn) + @param cred credential object specifying rights of the caller + @param type type of object (user | slice | node | authority ) + + @return the string representation of a credential object + """ + + interfaces = ['registry'] + + accepts = [ + Mixed(Parameter(str, "Credential string"), + Parameter(type([str]), "List of credentials")), + Parameter(str, "Human readable name (hrn or urn)"), + Mixed(Parameter(str, "Record type"), + Parameter(None, "Type not specified")), + ] + + returns = Parameter(str, "String representation of a credential object") + + def call(self, creds, xrn, type): + + if type: + hrn = urn_to_hrn(xrn)[0] + else: + hrn, type = urn_to_hrn(xrn) + + # check creds + valid_creds = self.api.auth.checkCredentials(creds, 'getcredential') + self.api.auth.verify_object_belongs_to_me(hrn) + + #log the call + origin_hrn = Credential(string=valid_creds[0]).get_gid_caller().get_hrn() + self.api.logger.info("interface: %s\tcaller-hrn: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, origin_hrn, hrn, self.name)) + + manager = self.api.get_interface_manager() + + return manager.get_credential(self.api, xrn, type) + diff --git a/sfa/methods/GetGids.py b/sfa/methods/GetGids.py new file mode 100644 index 00000000..37ad7967 --- /dev/null +++ b/sfa/methods/GetGids.py @@ -0,0 +1,47 @@ +from sfa.util.faults import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.trust.auth import Auth +from sfa.trust.gid import GID +from sfa.trust.certificate import Certificate +from sfa.trust.credential import Credential + +class GetGids(Method): + """ + Get a list of record information (hrn, gid and type) for + the specified hrns. + + @param cred credential string + @param cert certificate string + @return + """ + + interfaces = ['registry'] + + accepts = [ + Mixed(Parameter(str, "Human readable name (hrn or xrn)"), + Parameter(type([str]), "List of Human readable names (hrn or xrn)")), + Mixed(Parameter(str, "Credential string"), + Parameter(type([str]), "List of credentials")), + ] + + returns = [Parameter(dict, "Dictionary of gids keyed on hrn")] + + def call(self, xrns, creds): + # validate the credential + valid_creds = self.api.auth.checkCredentials(creds, 'getgids') + origin_hrn = Credential(string=valid_creds[0]).get_gid_caller().get_hrn() + + # resolve the record + manager = self.api.get_interface_manager() + records = manager.resolve(self.api, xrns, full = False) + if not records: + raise RecordNotFound(hrns) + + gids = [] + allowed_fields = ['hrn', 'type', 'gid'] + for record in records: + for key in record.keys(): + if key not in allowed_fields: + del(record[key]) + return records diff --git a/sfa/methods/GetSelfCredential.py b/sfa/methods/GetSelfCredential.py new file mode 100644 index 00000000..a5c7d400 --- /dev/null +++ b/sfa/methods/GetSelfCredential.py @@ -0,0 +1,75 @@ +### $Id: get_credential.py 15321 2009-10-15 05:01:21Z tmack $ +### $URL: https://svn.planet-lab.org/svn/sfa/trunk/sfa/methods/get_credential.py $ + +from sfa.trust.credential import * +from sfa.trust.rights import * +from sfa.util.faults import * +from sfa.util.namespace import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.util.record import SfaRecord +from sfa.util.debug import log +from sfa.trust.certificate import Certificate + +class GetSelfCredential(Method): + """ + Retrive a credential for an object + @param cert certificate string + @param type type of object (user | slice | sa | ma | node) + @param hrn human readable name of object (hrn or urn) + + @return the string representation of a credential object + """ + + interfaces = ['registry'] + + accepts = [ + Parameter(str, "certificate"), + Parameter(str, "Human readable name (hrn or urn)"), + Mixed(Parameter(str, "Record type"), + Parameter(None, "Type not specified")), + ] + + returns = Parameter(str, "String representation of a credential object") + + def call(self, cert, xrn, type): + """ + get_self_credential a degenerate version of get_credential used by a client + to get his initial credential when de doesnt have one. This is the same as + get_credetial(..., cred = None, ...) + + The registry ensures that the client is the principal that is named by + (type, name) by comparing the public key in the record's GID to the + private key used to encrypt the client side of the HTTPS connection. Thus + it is impossible for one principal to retrive another principal's + credential without having the appropriate private key. + + @param type type of object (user | slice | sa | ma | node) + @param hrn human readable name of authority to list + @return string representation of a credential object + """ + if type: + hrn = urn_to_hrn(xrn)[0] + else: + hrn, type = urn_to_hrn(xrn) + self.api.auth.verify_object_belongs_to_me(hrn) + + origin_hrn = Certificate(string=cert).get_subject() + self.api.logger.info("interface: %s\tcaller-hrn: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, origin_hrn, hrn, self.name)) + + manager = self.api.get_interface_manager() + + # authenticate the gid + records = manager.resolve(self.api, xrn, type) + if not records: + raise RecordNotFound(hrn) + record = SfaRecord(dict=records[0]) + gid = record.get_gid_object() + gid_str = gid.save_to_string(save_parents=True) + self.api.auth.authenticateGid(gid_str, [cert, type, hrn]) + # authenticate the certificate against the gid in the db + certificate = Certificate(string=cert) + if not certificate.is_pubkey(gid.get_pubkey()): + raise ConnectionKeyGIDMismatch(gid.get_subject()) + + return manager.get_credential(self.api, xrn, type, is_self=True) diff --git a/sfa/methods/GetTicket.py b/sfa/methods/GetTicket.py new file mode 100644 index 00000000..119ae48d --- /dev/null +++ b/sfa/methods/GetTicket.py @@ -0,0 +1,64 @@ +### $Id: get_ticket.py 17732 2010-04-19 21:10:45Z tmack $ +### $URL: https://svn.planet-lab.org/svn/sfa/trunk/sfa/methods/get_ticket.py $ +import time +from sfa.util.faults import * +from sfa.util.namespace import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.trust.auth import Auth +from sfa.util.config import Config +from sfa.trust.credential import Credential +from sfa.util.sfatablesRuntime import run_sfatables + +class GetTicket(Method): + """ + Retrieve a ticket. This operation is currently implemented on PLC + only (see SFA, engineering decisions); it is not implemented on + components. + + The ticket is filled in with information from the PLC database. This + information includes resources, and attributes such as user keys and + initscripts. + + @param cred credential string + @param name name of the slice to retrieve a ticket for (hrn or urn) + @param rspec resource specification dictionary + + @return the string representation of a ticket object + """ + + interfaces = ['aggregate', 'slicemgr'] + + accepts = [ + Parameter(str, "Human readable name of slice to retrive a ticket for (hrn or urn)"), + Mixed(Parameter(str, "Credential string"), + Parameter(type([str]), "List of credentials")), + Parameter(str, "Resource specification (rspec)"), + Parameter(type([]), "List of user information") + ] + + returns = Parameter(str, "String represeneation of a ticket object") + + def call(self, xrn, creds, rspec, users): + hrn, type = urn_to_hrn(xrn) + # Find the valid credentials + valid_creds = self.api.auth.checkCredentials(creds, 'getticket', hrn) + origin_hrn = Credential(string=valid_creds[0]).get_gid_caller().get_hrn() + + #log the call + self.api.logger.info("interface: %s\tcaller-hrn: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, origin_hrn, hrn, self.name)) + + manager = self.api.get_interface_manager() + + # flter rspec through sfatables + if self.api.interface in ['aggregate']: + chain_name = 'OUTGOING' + elif self.api.interface in ['slicemgr']: + chain_name = 'FORWARD-OUTGOING' + rspec = run_sfatables(chain_name, hrn, origin_hrn, rspec) + + # remove nodes that are not available at this interface from the rspec + ticket = manager.get_ticket(self.api, xrn, creds, rspec, users) + + return ticket + diff --git a/sfa/methods/GetVersion.py b/sfa/methods/GetVersion.py new file mode 100644 index 00000000..8552daf7 --- /dev/null +++ b/sfa/methods/GetVersion.py @@ -0,0 +1,21 @@ +from sfa.util.faults import * +from sfa.util.namespace import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter + + +class GetVersion(Method): + """ + Returns this GENI Aggregate Manager's Version Information + @return version + """ + interfaces = ['registry','aggregate', 'slicemgr', 'component'] + accepts = [] + returns = Parameter(dict, "Version information") + + def call(self): + self.api.logger.info("interface: %s\tmethod-name: %s" % (self.api.interface, self.name)) + manager = self.api.get_interface_manager() + + return manager.get_version() + diff --git a/sfa/methods/List.py b/sfa/methods/List.py new file mode 100644 index 00000000..0730f2bb --- /dev/null +++ b/sfa/methods/List.py @@ -0,0 +1,38 @@ +### $Id: list.py 16588 2010-01-13 17:53:44Z anil $ +### $URL: https://svn.planet-lab.org/svn/sfa/trunk/sfa/methods/list.py $ + +from sfa.util.faults import * +from sfa.util.namespace import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.util.record import SfaRecord +from sfa.trust.credential import Credential + +class List(Method): + """ + List the records in an authority. + + @param cred credential string specifying the rights of the caller + @param hrn human readable name of authority to list (hrn or urn) + @return list of record dictionaries + """ + interfaces = ['registry'] + + accepts = [ + Parameter(str, "Human readable name (hrn or urn)"), + Mixed(Parameter(str, "Credential string"), + Parameter(type([str]), "List of credentials")), + ] + + returns = [SfaRecord] + + def call(self, xrn, creds): + hrn, type = urn_to_hrn(xrn) + valid_creds = self.api.auth.checkCredentials(creds, 'list') + + #log the call + origin_hrn = Credential(string=valid_creds[0]).get_gid_caller().get_hrn() + self.api.logger.info("interface: %s\tcaller-hrn: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, origin_hrn, hrn, self.name)) + + manager = self.api.get_interface_manager() + return manager.list(self.api, xrn) diff --git a/sfa/methods/ListResources.py b/sfa/methods/ListResources.py new file mode 100644 index 00000000..80b483e1 --- /dev/null +++ b/sfa/methods/ListResources.py @@ -0,0 +1,55 @@ +from sfa.util.faults import * +from sfa.util.namespace import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.trust.credential import Credential +from sfa.util.sfatablesRuntime import run_sfatables +import sys +import zlib + +class ListResources(Method): + """ + Returns information about available resources or resources allocated to this slice + @param credential list + @param options dictionary + @return string + """ + interfaces = ['aggregate', 'slicemgr'] + accepts = [ + Mixed(Parameter(str, "Credential string"), + Parameter(type([str]), "List of credentials")), + Parameter(dict, "Options") + ] + returns = Parameter(str, "List of resources") + + def call(self, creds, options): + self.api.logger.info("interface: %s\tmethod-name: %s" % (self.api.interface, self.name)) + + # get slice's hrn from options + xrn = options.get('geni_slice_urn', None) + hrn, _ = urn_to_hrn(xrn) + + # Find the valid credentials + valid_creds = self.api.auth.checkCredentials(creds, 'listnodes', hrn) + + # get hrn of the original caller + origin_hrn = options.get('origin_hrn', None) + if not origin_hrn: + origin_hrn = Credential(string=valid_creds[0]).get_gid_caller().get_hrn() + # get manager for this interface + manager = self.api.get_interface_manager() + rspec = manager.get_rspec(self.api, creds, options) + + # filter rspec through sfatables + if self.api.interface in ['aggregate']: + chain_name = 'OUTGOING' + elif self.api.interface in ['slicemgr']: + chain_name = 'FORWARD-OUTGOING' + filtered_rspec = run_sfatables(chain_name, hrn, origin_hrn, rspec) + + if options.has_key('geni_compressed') and options['geni_compressed'] == True: + filtered_rspec = zlib.compress(filtered_rspec).encode('base64') + + return filtered_rspec + + diff --git a/sfa/methods/ListSlices.py b/sfa/methods/ListSlices.py new file mode 100644 index 00000000..236d34f9 --- /dev/null +++ b/sfa/methods/ListSlices.py @@ -0,0 +1,37 @@ +### $Id: stop_slice.py 17732 2010-04-19 21:10:45Z tmack $ +### $URL: https://svn.planet-lab.org/svn/sfa/trunk/sfa/methods/stop_slice.py $ + +from sfa.util.faults import * +from sfa.util.namespace import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.trust.auth import Auth +from sfa.trust.credential import Credential + +class ListSlices(Method): + """ + List the slices instantiated at this interface + + @param cred credential string specifying the rights of the caller + @return 1 is successful, faults otherwise + """ + + interfaces = ['aggregate', 'slicemgr', 'component'] + + accepts = [ + Mixed(Parameter(str, "Credential string"), + Parameter(type([str]), "List of credentials")), + ] + + returns = Parameter(list, "List of slice names") + + def call(self, creds): + valid_creds = self.api.auth.checkCredentials(creds, 'listslices') + + #log the call + origin_hrn = Credential(string=valid_creds[0]).get_gid_caller().get_hrn() + self.api.logger.info("interface: %s\tcaller-hrn: %s\tmethod-name: %s"%(self.api.interface, origin_hrn, self.name)) + + manager = self.api.get_interface_manager() + return manager.get_slices(self.api, creds) + diff --git a/sfa/methods/RedeemTicket.py b/sfa/methods/RedeemTicket.py new file mode 100644 index 00000000..c471d5a6 --- /dev/null +++ b/sfa/methods/RedeemTicket.py @@ -0,0 +1,35 @@ +### $Id: reset_slice.py 15428 2009-10-23 15:28:03Z tmack $ +### $URL: https://svn.planet-lab.org/svn/sfa/trunk/sfacomponent/methods/reset_slice.py $ +import xmlrpclib +from sfa.util.faults import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed + +class RedeemTicket(Method): + """ + Deprecated. Use RedeemTicket instead. + + @param cred credential string specifying the rights of the caller + @param ticket + @return 1 is successful, faults otherwise + """ + + interfaces = ['component'] + + accepts = [ + Parameter(str, "Ticket string representation of SFA ticket"), + Mixed(Parameter(str, "Credential string"), + Parameter(type([str]), "List of credentials")), + ] + + returns = [Parameter(int, "1 if successful")] + + def call(self, ticket, creds): + valid_creds = self.api.auth.checkCredentials(cred, 'redeemticket') + self.api.auth.check_ticket(ticket) + + + # send the call to the right manager + manager = self.api.get_interface_manager() + manager.redeem_ticket(self.api, ticket) + return 1 diff --git a/sfa/methods/Register.py b/sfa/methods/Register.py new file mode 100644 index 00000000..4f5a452c --- /dev/null +++ b/sfa/methods/Register.py @@ -0,0 +1,51 @@ +### $Id: register.py 16477 2010-01-05 16:31:37Z thierry $ +### $URL: https://svn.planet-lab.org/svn/sfa/trunk/sfa/methods/register.py $ + +from sfa.trust.certificate import Keypair, convert_public_key +from sfa.trust.gid import * +from sfa.util.faults import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.util.record import SfaRecord +from sfa.util.debug import log +from sfa.trust.auth import Auth +from sfa.trust.gid import create_uuid +from sfa.trust.credential import Credential + +class Register(Method): + """ + Register an object with the registry. In addition to being stored in the + SFA database, the appropriate records will also be created in the + PLC databases + + @param cred credential string + @param record_dict dictionary containing record fields + + @return gid string representation + """ + + interfaces = ['registry'] + + accepts = [ + Parameter(dict, "Record dictionary containing record fields"), + Mixed(Parameter(str, "Credential string"), + Parameter(type([str]), "List of credentials")), + ] + + returns = Parameter(int, "String representation of gid object") + + def call(self, record, creds): + + valid_creds = self.api.auth.checkCredentials(creds, 'register') + + #log the call + origin_hrn = Credential(string=valid_creds[0]).get_gid_caller().get_hrn() + + hrn = None + if 'hrn' in record: + hrn = record['hrn'] + self.api.logger.info("interface: %s\tcaller-hrn: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, origin_hrn, hrn, self.name)) + + manager = self.api.get_interface_manager() + + return manager.register(self.api, record) diff --git a/sfa/methods/RegisterPeerObject.py b/sfa/methods/RegisterPeerObject.py new file mode 100644 index 00000000..68b3105c --- /dev/null +++ b/sfa/methods/RegisterPeerObject.py @@ -0,0 +1,73 @@ +### $Id: register.py 15001 2009-09-11 20:18:54Z tmack $ +### $URL: https://svn.planet-lab.org/svn/sfa/trunk/sfa/methods/register.py $ + +from sfa.trust.certificate import Keypair, convert_public_key +from sfa.trust.gid import * + +from sfa.util.faults import * +from sfa.util.namespace import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.util.record import SfaRecord +from sfa.util.table import SfaTable +from sfa.util.debug import log +from sfa.trust.auth import Auth +from sfa.trust.gid import create_uuid +from sfa.trust.credential import Credential + +class register_peer_object(Method): + """ + Register a peer object with the registry. In addition to being stored in the + SFA database, the appropriate records will also be created in the + PLC databases + + @param cred credential string + @param record_dict dictionary containing record fields + @return gid string representation + """ + + interfaces = ['registry'] + + accepts = [ + Parameter(str, "Credential string"), + Parameter(dict, "Record dictionary containing record fields"), + Mixed(Parameter(str, "Human readable name of the original caller"), + Parameter(None, "Origin hrn not specified")) + ] + + returns = Parameter(int, "1 if successful") + + def call(self, cred, record_dict, origin_hrn=None): + user_cred = Credential(string=cred) + + #log the call + if not origin_hrn: + origin_hrn = user_cred.get_gid_caller().get_hrn() + self.api.logger.info("interface: %s\tcaller-hrn: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, origin_hrn, None, self.name)) + + # validate the cred + self.api.auth.check(cred, "register") + + # make sure this is a peer record + if 'peer_authority' not in record_dict or \ + not record_dict['peer_authority']: + raise SfaInvalidArgument, "peer_authority must be specified" + + record = SfaRecord(dict = record_dict) + type, hrn, peer_authority = record['type'], record['hrn'], record['peer_authority'] + record['authority'] = get_authority(record['hrn']) + # verify permissions + self.api.auth.verify_cred_is_me(cred) + + # check if record already exists + table = SfaTable() + existing_records = table.find({'type': type, 'hrn': hrn, 'peer_authority': peer_authority}) + if existing_records: + for existing_record in existing_records: + if existing_record['pointer'] != record['pointer']: + record['record_id'] = existing_record['record_id'] + table.update(record) + else: + record_id = table.insert(record) + + return 1 diff --git a/sfa/methods/Remove.py b/sfa/methods/Remove.py new file mode 100644 index 00000000..82050b40 --- /dev/null +++ b/sfa/methods/Remove.py @@ -0,0 +1,52 @@ +### $Id: remove.py 16497 2010-01-07 03:33:24Z tmack $ +### $URL: https://svn.planet-lab.org/svn/sfa/trunk/sfa/methods/remove.py $ + +from sfa.util.faults import * +from sfa.util.namespace import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.util.debug import log +from sfa.trust.credential import Credential + +class Remove(Method): + """ + Remove an object from the registry. If the object represents a PLC object, + then the PLC records will also be removed. + + @param cred credential string + @param type record type + @param xrn human readable name of record to remove (hrn or urn) + + @return 1 if successful, faults otherwise + """ + + interfaces = ['registry'] + + accepts = [ + Parameter(str, "Human readable name of slice to instantiate (hrn or urn)"), + Mixed(Parameter(str, "Credential string"), + Parameter(type([str]), "List of credentials")), + Mixed(Parameter(str, "Record type"), + Parameter(None, "Type not specified")), + ] + + returns = Parameter(int, "1 if successful") + + def call(self, xrn, creds, type): + if not type: + hrn = urn_to_hrn(xrn)[0] + else: + hrn, type = urn_to_hrn(xrn) + + # validate the cred + valid_creds = self.api.auth.checkCredentials(creds, "remove") + self.api.auth.verify_object_permission(hrn) + + #log the call + origin_hrn = Credential(string=valid_creds[0]).get_gid_caller().get_hrn() + self.api.logger.info("interface: %s\tcaller-hrn: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, origin_hrn, hrn, self.name)) + + + manager = self.api.get_interface_manager() + + return manager.remove(self.api, xrn, type) diff --git a/sfa/methods/RemovePeerObject.py b/sfa/methods/RemovePeerObject.py new file mode 100644 index 00000000..ed46ea71 --- /dev/null +++ b/sfa/methods/RemovePeerObject.py @@ -0,0 +1,103 @@ +from sfa.util.faults import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.trust.auth import Auth +from sfa.util.record import SfaRecord +from sfa.util.table import SfaTable +from sfa.util.debug import log +from sfa.trust.credential import Credential +from types import StringTypes + +class remove_peer_object(Method): + """ + Remove an peer object from the PLC records of a local aggregate. + This method will be called by registry.remove() while removing + a record from the local aggreage's PLCDB and sfa table. This + method need not be directly called by end-user. + + @param cred credential string + @param record record as stored in the local registry + + @return 1 if successful, faults otherwise + """ + + interfaces = ['registry'] + + accepts = [ + Parameter(str, "Credential string"), + Parameter(dict, "Record dictionary"), + Mixed(Parameter(str, "Human readable name of the original caller"), + Parameter(None, "Origin hrn not specified")) + ] + + returns = Parameter(int, "1 if successful") + + def call(self, cred, record, origin_hrn=None): + user_cred = Credential(string=cred) + + #log the call + if not origin_hrn: + origin_hrn = user_cred.get_gid_caller().get_hrn() + self.api.logger.info("interface: %s\tcaller-hrn: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, origin_hrn, record['hrn'], self.name)) + + self.api.auth.check(cred, "remove") + + # Only allow the local interface or record owner to delete peer_records + try: self.api.auth.verify_object_permission(record['hrn']) + except: self.api.auth.verify_cred_is_me(cred) + + table = SfaTable() + hrn, type = record['hrn'], record['type'] + records = table.find({'hrn': hrn, 'type': type }) + for record in records: + if record['peer_authority']: + self.remove_plc_record(record) + table.remove(record) + + return 1 + + def remove_plc_record(self, record): + type = record['type'] + if type == "user": + persons = self.api.plshell.GetPersons(self.api.plauth, {'person_id' : record['pointer']}) + if not persons: + return 1 + person = persons[0] + if person['peer_id']: + peer = self.get_peer_name(person['peer_id']) + self.api.plshell.UnBindObjectFromPeer(self.api.plauth, 'person', person['person_id'], peer) + self.api.plshell.DeletePerson(self.api.plauth, person['person_id']) + + elif type == "slice": + slices=self.api.plshell.GetSlices(self.api.plauth, {'slice_id' : record['pointer']}) + if not slices: + return 1 + slice=slices[0] + if slice['peer_id']: + peer = self.get_peer_name(slice['peer_id']) + self.api.plshell.UnBindObjectFromPeer(self.api.plauth, 'slice', slice['slice_id'], peer) + self.api.plshell.DeleteSlice(self.api.plauth, slice['slice_id']) + elif type == "authority": + sites=self.api.plshell.GetSites(self.api.plauth, {'site_id' : record['pointer']}) + if not sites: + return 1 + site=sites[0] + if site['peer_id']: + peer = self.get_peer_name(site['peer_id']) + self.api.plshell.UnBindObjectFromPeer(self.api.plauth, 'site', site['site_id'], peer) + self.api.plshell.DeleteSite(self.api.plauth, site['site_id']) + + else: + raise UnknownSfaType(type) + + return 1 + + def get_peer_name(self, peer_id): + peers = self.api.plshell.GetPeers(self.api.plauth, [peer_id], ['peername', 'shortname', 'hrn_root']) + if not peers: + raise SfaInvalidArgument, "No such peer" + peer = peers[0] + return peer['shortname'] + + + diff --git a/sfa/methods/RenewSliver.py b/sfa/methods/RenewSliver.py new file mode 100644 index 00000000..efce45dd --- /dev/null +++ b/sfa/methods/RenewSliver.py @@ -0,0 +1,41 @@ +from sfa.util.faults import * +from sfa.util.namespace import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter +from sfa.trust.credential import Credential +from dateutil.parser import parse + +class RenewSliver(Method): + """ + Renews the resources in a sliver, extending the lifetime of the slice. + @param slice_urn (string) URN of slice to renew + @param credentials ([string]) of credentials + @param expiration_time (string) requested time of expiration + + """ + interfaces = ['aggregate', 'slicemgr'] + accepts = [ + Parameter(str, "Slice URN"), + Parameter(type([str]), "List of credentials"), + Parameter(str, "Expiration time in RFC 3339 format") + ] + returns = Parameter(bool, "Success or Failure") + + def call(self, slice_xrn, creds, expiration_time): + hrn, type = urn_to_hrn(slice_xrn) + + self.api.logger.info("interface: %s\ttarget-hrn: %s\tcaller-creds: %s\tmethod-name: %s"%(self.api.interface, hrn, creds, self.name)) + + # Find the valid credentials + valid_creds = self.api.auth.checkCredentials(creds, 'renewsliver', hrn) + + # Validate that the time does not go beyond the credential's expiration time + requested_time = parse(expiration_time) + if requested_time > Credential(string=valid_creds[0]).get_lifetime(): + raise InsufficientRights('SliverStatus: Credential expires before requested expiration time') + + manager = self.api.get_interface_manager() + manager.renew_slice(self.api, xrn, valid_creds, requested_time) + + return 1 + diff --git a/sfa/methods/Resolve.py b/sfa/methods/Resolve.py new file mode 100644 index 00000000..ec47e41b --- /dev/null +++ b/sfa/methods/Resolve.py @@ -0,0 +1,50 @@ +### $Id: resolve.py 17157 2010-02-21 04:19:34Z tmack $ +### $URL: https://svn.planet-lab.org/svn/sfa/trunk/sfa/methods/resolve.py $ +import traceback +import types +from sfa.util.faults import * +from sfa.util.namespace import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.util.debug import log +from sfa.trust.credential import Credential +from sfa.util.record import SfaRecord + +class Resolve(Method): + """ + Resolve a record. + + @param cred credential string authorizing the caller + @param hrn human readable name to resolve (hrn or urn) + @return a list of record dictionaries or empty list + """ + + interfaces = ['registry'] + + accepts = [ + Mixed(Parameter(str, "Human readable name (hrn or urn)"), + Parameter(list, "List of Human readable names ([hrn])")), + Mixed(Parameter(str, "Credential string"), + Parameter(list, "List of credentials)")) + ] + + returns = [SfaRecord] + + def call(self, xrns, creds): + if not isinstance(xrns, types.ListType): + xrns=[xrns] + hrns = [urn_to_hrn(xrn)[0] for xrn in xrns] + + #find valid credentials + valid_creds = self.api.auth.checkCredentials(creds, 'resolve') + + #log the call + origin_hrn = Credential(string=valid_creds[0]).get_gid_caller().get_hrn() + self.api.logger.info("interface: %s\tcaller-hrn: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, origin_hrn, hrns, self.name)) + + # send the call to the right manager + manager = self.api.get_interface_manager() + return manager.resolve(self.api, xrns) + + + diff --git a/sfa/methods/ResolveGENI.py b/sfa/methods/ResolveGENI.py new file mode 100644 index 00000000..c223bbe8 --- /dev/null +++ b/sfa/methods/ResolveGENI.py @@ -0,0 +1,30 @@ +from sfa.util.faults import * +from sfa.util.namespace import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter +from sfa.trust.credential import Credential + +class Resolve(Method): + """ + Lookup a URN and return information about the corresponding object. + @param urn + """ + + interfaces = ['registry'] + accepts = [ + Parameter(str, "URN"), + Parameter(type([str]), "List of credentials"), + ] + returns = Parameter(bool, "Success or Failure") + + def call(self, xrn): + + manager_base = 'sfa.managers' + + if self.api.interface in ['registry']: + mgr_type = self.api.config.SFA_REGISTRY_TYPE + manager_module = manager_base + ".registry_manager_%s" % mgr_type + manager = __import__(manager_module, fromlist=[manager_base]) + return manager.Resolve(self.api, xrn, '') + + return {} diff --git a/sfa/methods/Shutdown.py b/sfa/methods/Shutdown.py new file mode 100644 index 00000000..f8e32942 --- /dev/null +++ b/sfa/methods/Shutdown.py @@ -0,0 +1,25 @@ +from sfa.util.faults import * +from sfa.util.namespace import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter +from sfa.methods.Stop import Stop + +class Shutdown(Stop): + """ + Perform an emergency shut down of a sliver. This operation is intended for administrative use. + The sliver is shut down but remains available for further forensics. + + @param slice_urn (string) URN of slice to renew + @param credentials ([string]) of credentials + """ + interfaces = ['aggregate', 'slicemgr'] + accepts = [ + Parameter(str, "Slice URN"), + Parameter(type([str]), "List of credentials"), + ] + returns = Parameter(bool, "Success or Failure") + + def call(self, slice_xrn, creds): + + return Stop.call(self, slice_xrn, creds) + diff --git a/sfa/methods/SliverStatus.py b/sfa/methods/SliverStatus.py new file mode 100644 index 00000000..2233b702 --- /dev/null +++ b/sfa/methods/SliverStatus.py @@ -0,0 +1,31 @@ +from sfa.util.faults import * +from sfa.util.namespace import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed + +class SliverStatus(Method): + """ + Get the status of a sliver + + @param slice_urn (string) URN of slice to allocate to + + """ + interfaces = ['aggregate', 'slicemgr', 'component'] + accepts = [ + Parameter(str, "Slice URN"), + Mixed(Parameter(str, "Credential string"), + Parameter(type([str]), "List of credentials")), + ] + returns = Parameter(dict, "Status details") + + def call(self, slice_xrn, creds): + hrn, type = urn_to_hrn(slice_xrn) + valid_creds = self.api.auth.checkCredentials(creds, 'sliverstatus', hrn) + + self.api.logger.info("interface: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, hrn, self.name)) + + manager = self.api.get_interface_manager() + status = manager.slice_status(self.api, hrn, valid_creds) + + return status + diff --git a/sfa/methods/Start.py b/sfa/methods/Start.py new file mode 100644 index 00000000..958e34fa --- /dev/null +++ b/sfa/methods/Start.py @@ -0,0 +1,41 @@ +### $Id: stop_slice.py 17732 2010-04-19 21:10:45Z tmack $ +### $URL: https://svn.planet-lab.org/svn/sfa/trunk/sfa/methods/stop_slice.py $ + +from sfa.util.faults import * +from sfa.util.namespace import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.trust.auth import Auth +from sfa.trust.credential import Credential + +class Start(Method): + """ + Start the specified slice + + @param xrn human readable name of slice to instantiate (hrn or urn) + @param cred credential string specifying the rights of the caller + @return 1 is successful, faults otherwise + """ + + interfaces = ['aggregate', 'slicemgr', 'component'] + + accepts = [ + Parameter(str, "Human readable name of slice to start (hrn or urn)"), + Mixed(Parameter(str, "Credential string"), + Parameter(type([str]), "List of credentials")), + ] + + returns = Parameter(int, "1 if successful") + + def call(self, xrn, creds): + hrn, type = urn_to_hrn(xrn) + valid_creds = self.api.auth.checkCredentials(creds, 'startslice', hrn) + + #log the call + origin_hrn = Credential(string=valid_creds[0]).get_gid_caller().get_hrn() + self.api.logger.info("interface: %s\tcaller-hrn: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, origin_hrn, hrn, self.name)) + + manager = self.api.get_interface_manager() + manager.start_slice(self.api, xrn, creds) + + return 1 diff --git a/sfa/methods/Stop.py b/sfa/methods/Stop.py new file mode 100644 index 00000000..c871e05b --- /dev/null +++ b/sfa/methods/Stop.py @@ -0,0 +1,41 @@ +### $Id: stop_slice.py 17732 2010-04-19 21:10:45Z tmack $ +### $URL: https://svn.planet-lab.org/svn/sfa/trunk/sfa/methods/stop_slice.py $ + +from sfa.util.faults import * +from sfa.util.namespace import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.trust.auth import Auth +from sfa.trust.credential import Credential + +class Stop(Method): + """ + Stop the specified slice + + @param cred credential string specifying the rights of the caller + @param xrn human readable name of slice to instantiate (hrn or urn) + @return 1 is successful, faults otherwise + """ + + interfaces = ['aggregate', 'slicemgr', 'component'] + + accepts = [ + Parameter(str, "Human readable name of slice to instantiate (hrn or urn)"), + Mixed(Parameter(str, "Credential string"), + Parameter(type([str]), "List of credentials")), + ] + + returns = Parameter(int, "1 if successful") + + def call(self, xrn, creds): + hrn, type = urn_to_hrn(xrn) + valid_creds = self.api.auth.checkCredentials(creds, 'stopslice', hrn) + + #log the call + origin_hrn = Credential(string=valid_creds[0]).get_gid_caller().get_hrn() + self.api.logger.info("interface: %s\tcaller-hrn: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, origin_hrn, hrn, self.name)) + + manager = self.api.get_interface_manager() + manager.stop_slice(self.api, xrn, creds) + + return 1 diff --git a/sfa/methods/Update.py b/sfa/methods/Update.py new file mode 100644 index 00000000..3b8b55a2 --- /dev/null +++ b/sfa/methods/Update.py @@ -0,0 +1,41 @@ +### $Id: update.py 16477 2010-01-05 16:31:37Z thierry $ +### $URL: https://svn.planet-lab.org/svn/sfa/trunk/sfa/methods/update.py $ + +import time +from sfa.util.faults import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.util.debug import log +from sfa.trust.credential import Credential + +class Update(Method): + """ + Update an object in the registry. Currently, this only updates the + PLC information associated with the record. The SFA fields (name, type, + GID) are fixed. + + @param cred credential string specifying rights of the caller + @param record a record dictionary to be updated + + @return 1 if successful, faults otherwise + """ + + interfaces = ['registry'] + + accepts = [ + Parameter(dict, "Record dictionary to be updated"), + Parameter(str, "Credential string"), + ] + + returns = Parameter(int, "1 if successful") + + def call(self, record_dict, creds): + # validate the cred + valid_creds = self.api.auth.checkCredentials(creds, "update") + origin_hrn = Credential(string=valid_creds[0]).get_gid_caller().get_hrn() + self.api.logger.info("interface: %s\tcaller-hrn: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, origin_hrn, None, self.name)) + + manager = self.api.get_interface_manager() + + return manager.update(self.api, record_dict) + diff --git a/sfa/methods/UpdateSliver.py b/sfa/methods/UpdateSliver.py new file mode 100644 index 00000000..37252f20 --- /dev/null +++ b/sfa/methods/UpdateSliver.py @@ -0,0 +1,35 @@ +from sfa.util.faults import * +from sfa.util.namespace import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +import sys +from sfa.methods.CreateSliver import CreateSliver + +class UpdateSliver(CreateSliver): + """ + Allocate resources to a slice. This operation is expected to + start the allocated resources asynchornously after the operation + has successfully completed. Callers can check on the status of + the resources using SliverStatus. + + @param slice_urn (string) URN of slice to allocate to + @param credentials ([string]) of credentials + @param rspec (string) rspec to allocate + + """ + interfaces = ['aggregate', 'slicemgr'] + accepts = [ + Parameter(str, "Slice URN"), + Mixed(Parameter(str, "Credential string"), + Parameter(type([str]), "List of credentials")), + Parameter(str, "RSpec"), + Parameter(type([]), "List of user information") + ] + returns = Parameter(str, "Allocated RSpec") + + + + def call(self, slice_xrn, creds, rspec, users): + + return CreateSliver.call(self, slice_xrn, creds, rspec, users) + diff --git a/sfa/methods/__init__.py b/sfa/methods/__init__.py new file mode 100644 index 00000000..2bd195fd --- /dev/null +++ b/sfa/methods/__init__.py @@ -0,0 +1,45 @@ +## Please use make index to update this file +all = """ +create_slice +delete_slice +get_aggregates +get_credential +get_gids +get_key +get_registries +get_resources +get_self_credential +get_slices +get_ticket +get_trusted_certs +list +List +redeem_ticket +RedeemTicket +register +Register +register_peer_object +remove +Remove +reset_slice +resolve +Resolve +start_slice +stop_slice +update +Update +remove_peer_object +GetTicket +GetVersion +RedeemTicket +ListResources +ListSlices +CreateSliver +UpdateSliver +DeleteSliver +SliverStatus +RenewSliver +Start +Stop +Shutdown +""".split() diff --git a/sfa/methods/create_slice.py b/sfa/methods/create_slice.py new file mode 100644 index 00000000..cee2c4dc --- /dev/null +++ b/sfa/methods/create_slice.py @@ -0,0 +1,35 @@ +### $Id: create_slice.py 18560 2010-08-03 21:13:46Z tmack $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/methods/create_slice.py $ + +from sfa.util.faults import * +from sfa.util.namespace import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.methods.CreateSliver import CreateSliver + +class create_slice(CreateSliver): + """ + Deprecated. Use CreateSliver instead. + Instantiate the specified slice according to whats defined in the specified rspec + + @param cred credential string specifying the rights of the caller + @param hrn human readable name of slice to instantiate (hrn or xrn) + @param rspec resource specification + @return 1 is successful, faults otherwise + """ + + interfaces = ['aggregate', 'slicemgr'] + + accepts = [ + Parameter(str, "Credential string"), + Parameter(str, "Human readable name of slice to instantiate (hrn or xrn)"), + Parameter(str, "Resource specification"), + Mixed(Parameter(str, "Human readable name of the original caller"), + Parameter(None, "Origin hrn not specified")) + ] + + returns = Parameter(int, "1 if successful") + + def call(self, cred, xrn, requested_rspec, origin_hrn=None): + + return CreateSliver.call(self, xrn, cred, requested_rspec, []) diff --git a/sfa/methods/delete_slice.py b/sfa/methods/delete_slice.py new file mode 100644 index 00000000..06005ec4 --- /dev/null +++ b/sfa/methods/delete_slice.py @@ -0,0 +1,34 @@ +### $Id: delete_slice.py 18565 2010-08-03 22:24:09Z tmack $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/methods/delete_slice.py $ + +from sfa.util.faults import * +from sfa.util.namespace import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.methods.DeleteSliver import DeleteSliver + +class delete_slice(DeleteSliver): + """ + Deprecated. Use delete instead. + + Remove the slice from all nodes. + + @param cred credential string specifying the rights of the caller + @param xrn human readable name specifying the slice to delete (hrn or urn) + @return 1 if successful, faults otherwise + """ + + interfaces = ['aggregate', 'slicemgr', 'component'] + + accepts = [ + Parameter(str, "Credential string"), + Parameter(str, "Human readable name of slice to delete (hrn or urn)"), + Mixed(Parameter(str, "Human readable name of the original caller"), + Parameter(None, "Origin hrn not specified")) + ] + + returns = Parameter(int, "1 if successful") + + def call(self, cred, xrn, origin_hrn=None): + + return DeleteSliver.call(self, xrn, cred) diff --git a/sfa/methods/get_aggregates.py b/sfa/methods/get_aggregates.py new file mode 100644 index 00000000..c9609744 --- /dev/null +++ b/sfa/methods/get_aggregates.py @@ -0,0 +1,36 @@ +### $Id: get_slices.py 14387 2009-07-08 18:19:11Z faiyaza $ +### $URL: https://svn.planet-lab.org/svn/sfa/trunk/sfa/methods/get_aggregates.py $ +from types import StringTypes +from sfa.util.faults import * +from sfa.util.namespace import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.trust.auth import Auth +from sfa.server.aggregate import Aggregates + +class get_aggregates(Method): + """ + Get a list of connection information for all known aggregates. + + @param cred credential string specifying the rights of the caller + @param a Human readable name (hrn or urn), or list of hrns or None + @return list of dictionaries with aggregate information. + """ + + interfaces = ['registry', 'aggregate', 'slicemgr'] + + accepts = [ + Parameter(str, "Credential string"), + Mixed(Parameter(str, "Human readable name (hrn or urn)"), + Parameter(None, "hrn not specified")) + ] + + returns = [Parameter(dict, "Aggregate interface information")] + + def call(self, cred, xrn = None): + hrn, type = urn_to_hrn(xrn) + self.api.auth.check(cred, 'list') + aggregates = Aggregates(self.api).interfaces.values() + if hrn: + aggregates = [agg for agg in aggregates if agg['hrn'] == hrn] + return aggregates diff --git a/sfa/methods/get_credential.py b/sfa/methods/get_credential.py new file mode 100644 index 00000000..aa5c4c66 --- /dev/null +++ b/sfa/methods/get_credential.py @@ -0,0 +1,37 @@ +### $Id: get_credential.py 18596 2010-08-06 20:58:41Z tmack $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/methods/get_credential.py $ + +from sfa.trust.credential import * +from sfa.trust.rights import * +from sfa.util.faults import * +from sfa.util.namespace import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.methods.GetCredential import GetCredential + +class get_credential(GetCredential): + """ + Deprecated. Use GetCredential instead. + + Retrive a credential for an object + If cred == Nonee then the behavior reverts to get_self_credential + + @param cred credential object specifying rights of the caller + @param type type of object (user | slice | sa | ma | node) + @param hrn human readable name of object (hrn or urn) + + @return the string representation of a credential object + """ + + interfaces = ['registry'] + + accepts = [ + Mixed(Parameter(str, "credential"), + Parameter(None, "No credential")), + Parameter(str, "Human readable name (hrn or urn)") + ] + + returns = Parameter(str, "String representation of a credential object") + + def call(self, cred, type, xrn, origin_hrn=None): + return GetCredential.call(self, cred, xrn, type) diff --git a/sfa/methods/get_gids.py b/sfa/methods/get_gids.py new file mode 100644 index 00000000..c54af0a3 --- /dev/null +++ b/sfa/methods/get_gids.py @@ -0,0 +1,30 @@ +from sfa.util.faults import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.methods.GetGids import GetGids + +class get_gids(GetGids): + """ + Deprecated. Use GetGids instead. + + Get a list of record information (hrn, gid and type) for + the specified hrns. + + @param cred credential string + @param cert certificate string + @return + """ + + interfaces = ['registry'] + + accepts = [ + Parameter(str, "Certificate string"), + Mixed(Parameter(str, "Human readable name (hrn or xrn)"), + Parameter(type([str]), "List of Human readable names (hrn or xrn)")) + ] + + returns = [Parameter(dict, "Dictionary of gids keyed on hrn")] + + def call(self, cred, xrns): + + return GetGids.call(self, xrns, cred) diff --git a/sfa/methods/get_key.py b/sfa/methods/get_key.py new file mode 100644 index 00000000..46af3695 --- /dev/null +++ b/sfa/methods/get_key.py @@ -0,0 +1,88 @@ +### $Id: $ +### $URL: $ +import os +import tempfile +import commands +from sfa.util.faults import * +from sfa.util.namespace import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.trust.auth import Auth +from sfa.util.table import SfaTable +from sfa.trust.certificate import Keypair +from sfa.trust.gid import create_uuid + +class get_key(Method): + """ + Generate a new keypair and gid for requesting caller (component). + @return 1 If successful + """ + + interfaces = ['registry'] + + accepts = [] + + returns = Parameter(int, "1 if successful, faults otherwise") + + def call(self): + # verify that the callers's ip address exist in the db and is an inteface + # for a node in the db + (ip, port) = self.api.remote_addr + interfaces = self.api.plshell.GetInterfaces(self.api.plauth, {'ip': ip}, ['node_id']) + if not interfaces: + raise NonExistingRecord("no such ip %(ip)s" % locals()) + nodes = self.api.plshell.GetNodes(self.api.plauth, [interfaces[0]['node_id']], ['node_id', 'hostname']) + if not nodes: + raise NonExistingRecord("no such node using ip %(ip)s" % locals()) + node = nodes[0] + + # look up the sfa record + table = SfaTable() + records = table.findObjects({'type': 'node', 'pointer': node['node_id']}) + if not records: + raise RecordNotFound("pointer:" + str(node['node_id'])) + record = records[0] + + # generate a new keypair and gid + uuid = create_uuid() + pkey = Keypair(create=True) + urn = hrn_to_urn(record['hrn'], record['type']) + gid_object = self.api.auth.hierarchy.create_gid(urn, uuid, pkey) + gid = gid_object.save_to_string(save_parents=True) + record['gid'] = gid + record.set_gid(gid) + + # update the record + table.update(record) + + # attempt the scp the key + # and gid onto the node + # this will only work for planetlab based components + (kfd, key_filename) = tempfile.mkstemp() + (gfd, gid_filename) = tempfile.mkstemp() + pkey.save_to_file(key_filename) + gid_object.save_to_file(gid_filename, save_parents=True) + host = node['hostname'] + key_dest="/etc/sfa/node.key" + gid_dest="/etc/sfa/node.gid" + scp = "/usr/bin/scp" + #identity = "/etc/planetlab/root_ssh_key.rsa" + identity = "/etc/sfa/root_ssh_key" + scp_options=" -i %(identity)s " % locals() + scp_options+="-o StrictHostKeyChecking=no " % locals() + scp_key_command="%(scp)s %(scp_options)s %(key_filename)s root@%(host)s:%(key_dest)s" %\ + locals() + scp_gid_command="%(scp)s %(scp_options)s %(gid_filename)s root@%(host)s:%(gid_dest)s" %\ + locals() + + all_commands = [scp_key_command, scp_gid_command] + + for command in all_commands: + (status, output) = commands.getstatusoutput(command) + if status: + raise Exception, output + + for filename in [key_filename, gid_filename]: + os.unlink(filename) + + return 1 diff --git a/sfa/methods/get_registries.py b/sfa/methods/get_registries.py new file mode 100644 index 00000000..358874c8 --- /dev/null +++ b/sfa/methods/get_registries.py @@ -0,0 +1,36 @@ +### $Id: get_slices.py 14387 2009-07-08 18:19:11Z faiyaza $ +### $URL: https://svn.planet-lab.org/svn/sfa/trunk/sfa/methods/get_registries.py $ +from types import StringTypes +from sfa.util.faults import * +from sfa.util.namespace import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.trust.auth import Auth +from sfa.server.registry import Registries + +class get_registries(Method): + """ + Get a list of connection information for all known registries. + + @param cred credential string specifying the rights of the caller + @param a Human readable name (hrn or urn), or list of names or None + @return list of dictionaries with aggregate information. + """ + + interfaces = ['registry', 'aggregate', 'slicemgr'] + + accepts = [ + Parameter(str, "Credential string"), + Mixed(Parameter(str, "Human readable name (hrn or urn)"), + Parameter(None, "hrn not specified")) + ] + + returns = [Parameter(dict, "Registry interface information")] + + def call(self, cred, xrn = None): + hrn, type = urn_to_hrn(xrn) + self.api.auth.check(cred, 'list') + registries = Registries(self.api).interfaces.values() + if hrn: + registries = [reg for reg in registries if reg['hrn'] == hrn] + return registries diff --git a/sfa/methods/get_resources.py b/sfa/methods/get_resources.py new file mode 100644 index 00000000..79065e1a --- /dev/null +++ b/sfa/methods/get_resources.py @@ -0,0 +1,40 @@ +### $Id: get_resources.py 18562 2010-08-03 21:15:52Z tmack $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/methods/get_resources.py $ + +from sfa.util.faults import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.methods.ListResources import ListResources +# RSpecManager_pl is not used. This line is a check that ensures that everything is in place for the import to work. +import sfa.rspecs.aggregates.rspec_manager_pl + +class get_resources(ListResources): + """ + Deprecated. Use ListResources instead. + + Get an resource specification (rspec). The rspec may describe the resources + available at an authority or the resources being used by a slice. + + @param cred credential string specifying the rights of the caller + @param hrn human readable name of the slice we are interesed in or None + for an authority. + """ + + interfaces = ['aggregate', 'slicemgr'] + + accepts = [ + Parameter(str, "Credential string"), + Mixed(Parameter(str, "Human readable name (hrn or urn)"), + Parameter(None, "hrn not specified")), + Mixed(Parameter(str, "Human readable name of the original caller"), + Parameter(None, "Origin hrn not specified")) + ] + + returns = Parameter(str, "String representatin of an rspec") + + def call(self, cred, xrn=None, origin_hrn=None): + options = {'geni_slice_urn': xrn, + 'origin_hrn': origin_hrn + } + + return ListResources.call(self, cred, options) diff --git a/sfa/methods/get_self_credential.py b/sfa/methods/get_self_credential.py new file mode 100644 index 00000000..3bdaecc7 --- /dev/null +++ b/sfa/methods/get_self_credential.py @@ -0,0 +1,53 @@ +### $Id: get_credential.py 15321 2009-10-15 05:01:21Z tmack $ +### $URL: https://svn.planet-lab.org/svn/sfa/trunk/sfa/methods/get_credential.py $ + +from sfa.trust.credential import * +from sfa.trust.rights import * +from sfa.util.faults import * +from sfa.util.namespace import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.util.record import SfaRecord +from sfa.util.debug import log +from sfa.methods.GetSelfCredential import GetSelfCredential + +class get_self_credential(GetSelfCredential): + """ + Deprecated. Use GetSelfCredential instead. + + Retrive a credential for an object + @param cert certificate string + @param type type of object (user | slice | sa | ma | node) + @param hrn human readable name of object (hrn or urn) + + @return the string representation of a credential object + """ + + interfaces = ['registry'] + + accepts = [ + Parameter(str, "Human readable name (hrn or urn)"), + Parameter(str, "certificate"), + Mixed(Parameter(str, "Request hash"), + Parameter(None, "Request hash not specified")) + ] + + returns = Parameter(str, "String representation of a credential object") + + def call(self, cert, type, xrn, origin_hrn=None): + """ + get_self_credential a degenerate version of get_credential used by a client + to get his initial credential when de doesnt have one. This is the same as + get_credetial(..., cred = None, ...) + + The registry ensures that the client is the principal that is named by + (type, name) by comparing the public key in the record's GID to the + private key used to encrypt the client side of the HTTPS connection. Thus + it is impossible for one principal to retrive another principal's + credential without having the appropriate private key. + + @param type type of object (user | slice | sa | ma | node) + @param hrn human readable name of authority to list + @return string representation of a credential object + """ + return GetSelfCredential.call(self, cert, xrn, type) diff --git a/sfa/methods/get_slices.py b/sfa/methods/get_slices.py new file mode 100644 index 00000000..7b65b30b --- /dev/null +++ b/sfa/methods/get_slices.py @@ -0,0 +1,30 @@ +### $Id: get_slices.py 18582 2010-08-05 02:37:55Z tmack $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/methods/get_slices.py $ + +from sfa.util.faults import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.methods.ListSlices import ListSlices + +class get_slices(ListSlices): + """ + Deprecated. Use ListSlices instead. + Get a list of instantiated slices at this authority. + + @param cred credential string specifying the rights of the caller + @return list of human readable slice names (hrn). + """ + + interfaces = ['aggregate', 'slicemgr', 'component'] + + accepts = [ + Parameter(str, "Credential string"), + Mixed(Parameter(str, "Human readable name of the original caller"), + Parameter(None, "Origin hrn not specified")) + ] + + returns = [Parameter(str, "Human readable slice name (hrn)")] + + def call(self, cred, origin_hrn=None): + + return ListSlices.call(self, cred) diff --git a/sfa/methods/get_ticket.py b/sfa/methods/get_ticket.py new file mode 100644 index 00000000..bd984565 --- /dev/null +++ b/sfa/methods/get_ticket.py @@ -0,0 +1,43 @@ +### $Id: get_ticket.py 18584 2010-08-05 22:46:52Z tmack $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/methods/get_ticket.py $ +import time +from sfa.util.faults import * +from sfa.util.namespace import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.methods.GetTicket import GetTicket + +class get_ticket(GetTicket): + """ + Deprecated. Use GetTicket instead. + + Retrieve a ticket. This operation is currently implemented on PLC + only (see SFA, engineering decisions); it is not implemented on + components. + + The ticket is filled in with information from the PLC database. This + information includes resources, and attributes such as user keys and + initscripts. + + @param cred credential string + @param name name of the slice to retrieve a ticket for (hrn or urn) + @param rspec resource specification dictionary + + @return the string representation of a ticket object + """ + + interfaces = ['aggregate', 'slicemgr'] + + accepts = [ + Parameter(str, "Credential string"), + Parameter(str, "Human readable name of slice to retrive a ticket for (hrn or urn)"), + Parameter(str, "Resource specification (rspec)"), + Mixed(Parameter(str, "Human readable name of the original caller"), + Parameter(None, "Origin hrn not specified")) + ] + + returns = Parameter(str, "String represeneation of a ticket object") + + def call(self, cred, xrn, rspec, origin_hrn=None): + + return GetTicket.call(self, xrn, cred, rspec, None) diff --git a/sfa/methods/get_trusted_certs.py b/sfa/methods/get_trusted_certs.py new file mode 100644 index 00000000..6ae4d50e --- /dev/null +++ b/sfa/methods/get_trusted_certs.py @@ -0,0 +1,42 @@ + +### $URL: https://svn.planet-lab.org/svn/sfa/trunk/sfa/methods/reset_slices.py $ + +from sfa.util.faults import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.trust.auth import Auth +from sfa.trust.credential import Credential + +class get_trusted_certs(Method): + """ + @param cred credential string specifying the rights of the caller + @return list of gid strings + """ + + interfaces = ['registry', 'aggregate', 'slicemgr'] + + accepts = [ + Mixed(Parameter(str, "Credential string"), + Parameter(None, "Credential not specified")) + ] + + returns = Parameter(type([str]), "List of GID strings") + + def call(self, cred = None): + # If cred is not specified just return the gid for this interface. + # This is true when when a peer is attempting to initiate federation + # with this interface + print cred + if not cred: + gid_strings = [] + for gid in self.api.auth.trusted_cert_list: + if gid.get_hrn() == self.api.config.SFA_INTERFACE_HRN: + gid_strings.append(gid.save_to_string(save_parents=True)) + return gid_strings + + # authenticate the cred + self.api.auth.check(cred, 'gettrustedcerts') + gid_strings = [gid.save_to_string(save_parents=True) for \ + gid in self.api.auth.trusted_cert_list] + + return gid_strings diff --git a/sfa/methods/list.py b/sfa/methods/list.py new file mode 100644 index 00000000..0da6c077 --- /dev/null +++ b/sfa/methods/list.py @@ -0,0 +1,34 @@ +### $Id: list.py 18601 2010-08-06 21:20:23Z tmack $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/methods/list.py $ + +from sfa.util.faults import * +from sfa.util.namespace import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.util.record import SfaRecord +from sfa.methods.List import List + +class list(List): + """ + Deprecated. Use List instead. + + List the records in an authority. + + @param cred credential string specifying the rights of the caller + @param hrn human readable name of authority to list (hrn or urn) + @return list of record dictionaries + """ + interfaces = ['registry'] + + accepts = [ + Parameter(str, "Credential string"), + Parameter(str, "Human readable name (hrn or urn)"), + Mixed(Parameter(str, "Human readable name of the original caller"), + Parameter(None, "Origin hrn not specified")) + ] + + returns = [SfaRecord] + + def call(self, cred, xrn, origin_hrn=None): + + return List.call(self, xrn, cred) diff --git a/sfa/methods/redeem_ticket.py b/sfa/methods/redeem_ticket.py new file mode 100644 index 00000000..82985e7c --- /dev/null +++ b/sfa/methods/redeem_ticket.py @@ -0,0 +1,31 @@ +### $Id: reset_slice.py 15428 2009-10-23 15:28:03Z tmack $ +### $URL: https://svn.planet-lab.org/svn/sfa/trunk/sfacomponent/methods/reset_slice.py $ +import xmlrpclib +from sfa.util.faults import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.methods.RedeemTicket import RedeemTicket + +class redeem_ticket(RedeemTicket): + """ + Deprecated. Use RedeemTicket instead. + + Redeem a approved set of resource allocations (ticket). + + @param cred credential string specifying the rights of the caller + @param ticket + @return 1 is successful, faults otherwise + """ + + interfaces = ['component'] + + accepts = [ + Parameter(str, "Credential string representation of SFA credential"), + Parameter(str, "Ticket string representation of SFA ticket") + ] + + returns = [Parameter(int, "1 if successful")] + + def call(self, cred, ticket): + + return RedeemTicket.call(self, ticket, cred) diff --git a/sfa/methods/register.py b/sfa/methods/register.py new file mode 100644 index 00000000..f71bfbff --- /dev/null +++ b/sfa/methods/register.py @@ -0,0 +1,36 @@ +### $Id: register.py 18605 2010-08-06 21:43:22Z tmack $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/methods/register.py $ + +from sfa.trust.certificate import Keypair, convert_public_key +from sfa.trust.gid import * +from sfa.util.faults import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.methods.Register import Register + +class register(Register): + """ + Deprecated. Used Register instead. + + Register an object with the registry. In addition to being stored in the + SFA database, the appropriate records will also be created in the + PLC databases + + @param cred credential string + @param record_dict dictionary containing record fields + + @return gid string representation + """ + + interfaces = ['registry'] + + accepts = [ + Parameter(str, "Credential string"), + Parameter(dict, "Record dictionary containing record fields") + ] + + returns = Parameter(int, "String representation of gid object") + + def call(self, cred, record, origin_hrn=None): + + return Register.call(self, record, cred) diff --git a/sfa/methods/register_peer_object.py b/sfa/methods/register_peer_object.py new file mode 100644 index 00000000..68b3105c --- /dev/null +++ b/sfa/methods/register_peer_object.py @@ -0,0 +1,73 @@ +### $Id: register.py 15001 2009-09-11 20:18:54Z tmack $ +### $URL: https://svn.planet-lab.org/svn/sfa/trunk/sfa/methods/register.py $ + +from sfa.trust.certificate import Keypair, convert_public_key +from sfa.trust.gid import * + +from sfa.util.faults import * +from sfa.util.namespace import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.util.record import SfaRecord +from sfa.util.table import SfaTable +from sfa.util.debug import log +from sfa.trust.auth import Auth +from sfa.trust.gid import create_uuid +from sfa.trust.credential import Credential + +class register_peer_object(Method): + """ + Register a peer object with the registry. In addition to being stored in the + SFA database, the appropriate records will also be created in the + PLC databases + + @param cred credential string + @param record_dict dictionary containing record fields + @return gid string representation + """ + + interfaces = ['registry'] + + accepts = [ + Parameter(str, "Credential string"), + Parameter(dict, "Record dictionary containing record fields"), + Mixed(Parameter(str, "Human readable name of the original caller"), + Parameter(None, "Origin hrn not specified")) + ] + + returns = Parameter(int, "1 if successful") + + def call(self, cred, record_dict, origin_hrn=None): + user_cred = Credential(string=cred) + + #log the call + if not origin_hrn: + origin_hrn = user_cred.get_gid_caller().get_hrn() + self.api.logger.info("interface: %s\tcaller-hrn: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, origin_hrn, None, self.name)) + + # validate the cred + self.api.auth.check(cred, "register") + + # make sure this is a peer record + if 'peer_authority' not in record_dict or \ + not record_dict['peer_authority']: + raise SfaInvalidArgument, "peer_authority must be specified" + + record = SfaRecord(dict = record_dict) + type, hrn, peer_authority = record['type'], record['hrn'], record['peer_authority'] + record['authority'] = get_authority(record['hrn']) + # verify permissions + self.api.auth.verify_cred_is_me(cred) + + # check if record already exists + table = SfaTable() + existing_records = table.find({'type': type, 'hrn': hrn, 'peer_authority': peer_authority}) + if existing_records: + for existing_record in existing_records: + if existing_record['pointer'] != record['pointer']: + record['record_id'] = existing_record['record_id'] + table.update(record) + else: + record_id = table.insert(record) + + return 1 diff --git a/sfa/methods/remove.py b/sfa/methods/remove.py new file mode 100644 index 00000000..5d239394 --- /dev/null +++ b/sfa/methods/remove.py @@ -0,0 +1,38 @@ +### $Id: remove.py 18606 2010-08-06 21:57:54Z tmack $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/methods/remove.py $ + +from sfa.util.faults import * +from sfa.util.namespace import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.methods.Remove import Remove + +class remove(Remove): + """ + Deprecated. Use Remove instead. + + Remove an object from the registry. If the object represents a PLC object, + then the PLC records will also be removed. + + @param cred credential string + @param type record type + @param xrn human readable name of record to remove (hrn or urn) + + @return 1 if successful, faults otherwise + """ + + interfaces = ['registry'] + + accepts = [ + Parameter(str, "Credential string"), + Parameter(str, "Record type"), + Parameter(str, "Human readable name of slice to instantiate (hrn or urn)"), + Mixed(Parameter(str, "Human readable name of the original caller"), + Parameter(None, "Origin hrn not specified")) + ] + + returns = Parameter(int, "1 if successful") + + def call(self, cred, type, xrn, origin_hrn=None): + + return Remove.call(self, xrn, cred, type) diff --git a/sfa/methods/remove_peer_object.py b/sfa/methods/remove_peer_object.py new file mode 100644 index 00000000..ed46ea71 --- /dev/null +++ b/sfa/methods/remove_peer_object.py @@ -0,0 +1,103 @@ +from sfa.util.faults import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.trust.auth import Auth +from sfa.util.record import SfaRecord +from sfa.util.table import SfaTable +from sfa.util.debug import log +from sfa.trust.credential import Credential +from types import StringTypes + +class remove_peer_object(Method): + """ + Remove an peer object from the PLC records of a local aggregate. + This method will be called by registry.remove() while removing + a record from the local aggreage's PLCDB and sfa table. This + method need not be directly called by end-user. + + @param cred credential string + @param record record as stored in the local registry + + @return 1 if successful, faults otherwise + """ + + interfaces = ['registry'] + + accepts = [ + Parameter(str, "Credential string"), + Parameter(dict, "Record dictionary"), + Mixed(Parameter(str, "Human readable name of the original caller"), + Parameter(None, "Origin hrn not specified")) + ] + + returns = Parameter(int, "1 if successful") + + def call(self, cred, record, origin_hrn=None): + user_cred = Credential(string=cred) + + #log the call + if not origin_hrn: + origin_hrn = user_cred.get_gid_caller().get_hrn() + self.api.logger.info("interface: %s\tcaller-hrn: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, origin_hrn, record['hrn'], self.name)) + + self.api.auth.check(cred, "remove") + + # Only allow the local interface or record owner to delete peer_records + try: self.api.auth.verify_object_permission(record['hrn']) + except: self.api.auth.verify_cred_is_me(cred) + + table = SfaTable() + hrn, type = record['hrn'], record['type'] + records = table.find({'hrn': hrn, 'type': type }) + for record in records: + if record['peer_authority']: + self.remove_plc_record(record) + table.remove(record) + + return 1 + + def remove_plc_record(self, record): + type = record['type'] + if type == "user": + persons = self.api.plshell.GetPersons(self.api.plauth, {'person_id' : record['pointer']}) + if not persons: + return 1 + person = persons[0] + if person['peer_id']: + peer = self.get_peer_name(person['peer_id']) + self.api.plshell.UnBindObjectFromPeer(self.api.plauth, 'person', person['person_id'], peer) + self.api.plshell.DeletePerson(self.api.plauth, person['person_id']) + + elif type == "slice": + slices=self.api.plshell.GetSlices(self.api.plauth, {'slice_id' : record['pointer']}) + if not slices: + return 1 + slice=slices[0] + if slice['peer_id']: + peer = self.get_peer_name(slice['peer_id']) + self.api.plshell.UnBindObjectFromPeer(self.api.plauth, 'slice', slice['slice_id'], peer) + self.api.plshell.DeleteSlice(self.api.plauth, slice['slice_id']) + elif type == "authority": + sites=self.api.plshell.GetSites(self.api.plauth, {'site_id' : record['pointer']}) + if not sites: + return 1 + site=sites[0] + if site['peer_id']: + peer = self.get_peer_name(site['peer_id']) + self.api.plshell.UnBindObjectFromPeer(self.api.plauth, 'site', site['site_id'], peer) + self.api.plshell.DeleteSite(self.api.plauth, site['site_id']) + + else: + raise UnknownSfaType(type) + + return 1 + + def get_peer_name(self, peer_id): + peers = self.api.plshell.GetPeers(self.api.plauth, [peer_id], ['peername', 'shortname', 'hrn_root']) + if not peers: + raise SfaInvalidArgument, "No such peer" + peer = peers[0] + return peer['shortname'] + + + diff --git a/sfa/methods/reset_slice.py b/sfa/methods/reset_slice.py new file mode 100644 index 00000000..cd9026c4 --- /dev/null +++ b/sfa/methods/reset_slice.py @@ -0,0 +1,52 @@ +### $Id: reset_slices.py 15428 2009-10-23 15:28:03Z tmack $ +### $URL: https://svn.planet-lab.org/svn/sfa/trunk/sfa/methods/reset_slices.py $ + +from sfa.util.faults import * +from sfa.util.namespace import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.trust.auth import Auth +from sfa.plc.slices import Slices + +class reset_slice(Method): + """ + Reset the specified slice + + @param cred credential string specifying the rights of the caller + @param xrn human readable name of slice to instantiate (hrn or urn) + @return 1 is successful, faults otherwise + """ + + interfaces = ['aggregate', 'slicemgr', 'component'] + + accepts = [ + Parameter(str, "Credential string"), + Parameter(str, "Human readable name of slice to instantiate (hrn or urn)"), + Mixed(Parameter(str, "Human readable name of the original caller"), + Parameter(None, "Origin hrn not specified")) + ] + + returns = Parameter(int, "1 if successful") + + def call(self, cred, xrn, origin_hrn=None): + hrn, type = urn_to_hrn(xrn) + self.api.auth.check(cred, 'resetslice', hrn) + # send the call to the right manager + manager_base = 'sfa.managers' + if self.api.interface in ['component']: + mgr_type = self.api.config.SFA_CM_TYPE + manager_module = manager_base + ".component_manager_%s" % mgr_type + manager = __import__(manager_module, fromlist=[manager_base]) + manager.reset_slice(self.api, xrn) + elif self.api.interface in ['aggregate']: + mgr_type = self.api.config.SFA_AGGREGATE_TYPE + manager_module = manager_base + ".aggregate_manager_%s" % mgr_type + manager = __import__(manager_module, fromlist=[manager_base]) + manager.reset_slice(self.api, xrn) + elif self.api.interface in ['slicemgr']: + mgr_type = self.api.config.SFA_SM_TYPE + manager_module = manager_base + ".slice_manager_%s" % mgr_type + manager = __import__(manager_module, fromlist=[manager_base]) + manager.reset_slice(self.api, xrn) + + return 1 diff --git a/sfa/methods/resolve.py b/sfa/methods/resolve.py new file mode 100644 index 00000000..84f12081 --- /dev/null +++ b/sfa/methods/resolve.py @@ -0,0 +1,36 @@ +### $Id: resolve.py 18594 2010-08-06 20:00:50Z tmack $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/methods/resolve.py $ +import traceback +import types +from sfa.util.faults import * +from sfa.util.namespace import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.util.record import SfaRecord +from sfa.methods.Resolve import Resolve + +class resolve(Resolve): + """ + Deprecated. Use Resolve instead + Resolve a record. + + @param cred credential string authorizing the caller + @param hrn human readable name to resolve (hrn or urn) + @return a list of record dictionaries or empty list + """ + + interfaces = ['registry'] + + accepts = [ + Parameter(str, "Credential string"), + Mixed(Parameter(str, "Human readable name (hrn or urn)"), + Parameter(list, "List of Human readable names ([hrn])")) + ] + + returns = [SfaRecord] + + def call(self, cred, xrns, origin_hrn=None): + return Resolve.call(self, xrns, cred) + + + diff --git a/sfa/methods/start_slice.py b/sfa/methods/start_slice.py new file mode 100644 index 00000000..bfb741ce --- /dev/null +++ b/sfa/methods/start_slice.py @@ -0,0 +1,34 @@ +### $Id: start_slice.py 18566 2010-08-03 22:24:42Z tmack $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/methods/start_slice.py $ + +from sfa.util.faults import * +from sfa.util.namespace import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.methods.Start import Start + +class start_slice(Start): + """ + Deprecated. Use Start instead + + Start the specified slice + + @param cred credential string specifying the rights of the caller + @param hrn human readable name of slice to instantiate (urn or hrn) + @return 1 is successful, faults otherwise + """ + + interfaces = ['aggregate', 'slicemgr', 'component'] + + accepts = [ + Parameter(str, "Credential string"), + Parameter(str, "Human readable name of slice to instantiate (urn or hrn)"), + Mixed(Parameter(str, "Human readable name of the original caller"), + Parameter(None, "Origin hrn not specified")) + ] + + returns = [Parameter(int, "1 if successful")] + + def call(self, cred, xrn, origin_hrn=None): + + return Start.call(self, xrn, cred) diff --git a/sfa/methods/stop_slice.py b/sfa/methods/stop_slice.py new file mode 100644 index 00000000..a711c0b0 --- /dev/null +++ b/sfa/methods/stop_slice.py @@ -0,0 +1,33 @@ +### $Id: stop_slice.py 18567 2010-08-03 22:25:05Z tmack $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/methods/stop_slice.py $ + +from sfa.util.faults import * +from sfa.util.namespace import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.methods.Stop import Stop + +class stop_slice(Stop): + """ + Deprecated. Use Stop instead + Stop the specified slice + + @param cred credential string specifying the rights of the caller + @param xrn human readable name of slice to instantiate (hrn or urn) + @return 1 is successful, faults otherwise + """ + + interfaces = ['aggregate', 'slicemgr', 'component'] + + accepts = [ + Parameter(str, "Credential string"), + Parameter(str, "Human readable name of slice to instantiate (hrn or urn)"), + Mixed(Parameter(str, "Human readable name of the original caller"), + Parameter(None, "Origin hrn not specified")) + ] + + returns = Parameter(int, "1 if successful") + + def call(self, cred, xrn, origin_hrn=None): + + return Stop.call(self, xrn, cred) diff --git a/sfa/methods/update.py b/sfa/methods/update.py new file mode 100644 index 00000000..56b8ff59 --- /dev/null +++ b/sfa/methods/update.py @@ -0,0 +1,38 @@ +### $Id: update.py 18606 2010-08-06 21:57:54Z tmack $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/methods/update.py $ + +import time +from sfa.util.faults import * +from sfa.util.method import Method +from sfa.util.parameter import Parameter, Mixed +from sfa.methods.Update import Update + +class update(Update): + """ + Deprecated. Use Update instead. + + Update an object in the registry. Currently, this only updates the + PLC information associated with the record. The SFA fields (name, type, + GID) are fixed. + + @param cred credential string specifying rights of the caller + @param record a record dictionary to be updated + + @return 1 if successful, faults otherwise + """ + + interfaces = ['registry'] + + accepts = [ + Parameter(str, "Credential string"), + Parameter(dict, "Record dictionary to be updated"), + Mixed(Parameter(str, "Human readable name of the original caller"), + Parameter(None, "Origin hrn not specified")) + ] + + returns = Parameter(int, "1 if successful") + + def call(self, cred, record_dict, origin_hrn=None): + + return Update.call(self, record_dict, cred) + diff --git a/sfa/plc/__init__.py b/sfa/plc/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/sfa/plc/api-dev.py b/sfa/plc/api-dev.py new file mode 100644 index 00000000..29b0cc80 --- /dev/null +++ b/sfa/plc/api-dev.py @@ -0,0 +1,562 @@ +# +# SFA XML-RPC and SOAP interfaces +# +### $Id: api.py 17793 2010-04-26 21:40:57Z tmack $ +### $URL: https://svn.planet-lab.org/svn/sfa/trunk/sfa/plc/api.py $ +# + +import sys +import os +import traceback +import string +import xmlrpclib +from sfa.trust.auth import Auth +from sfa.util.config import * +from sfa.util.faults import * +from sfa.util.debug import * +from sfa.trust.rights import * +from sfa.trust.credential import * +from sfa.trust.certificate import * +from sfa.util.namespace import * +from sfa.util.api import * +from sfa.util.nodemanager import NodeManager +from sfa.util.sfalogging import * +from collections import defaultdict + + +class RecordInfo(): + + shell = None + auth = None + + # pl records + sites = {} + slices = {} + persons = {} + nodes = {} + keys = {} + + # sfa records + sfa_authorities = {} + sfa_slices = {} + sfa_users = {} + sfa_nodes = {} + + records = [] + + def __init__(self, api, records): + self.api = api + self.shell = api.plshell + self.auth = api.plauth + + site_ids = [] + slice_ids = [] + person_ids = [] + node_ids = [] + + # put records into groups based on types + for record in records: + pointer = record['pointer'] + if record['type'] == 'authority': + self.sfa_authorities[pointer] = record + self.records.append(record) + site_ids.append(record['pointer']) + elif record['type'] == 'slice': + self.sfa_slices[pointer] = record + self.records.append(record) + slice_ids.append(record['pointer']) + elif record['type'] == 'user': + self.sfa_users[pointer] = record + self.records.append(record) + person_ids.append(record['pointer']) + elif record['type'] == 'node': + self.sfa_nodes[pointer] = record + self.records.append(record) + node_ids.append(record['pointer']) + + # get pl info for these records + self.update_pl_sites(site_ids) + self.update_pl_slices(slice_ids) + self.update_pl_persons(person_ids) + self.update_pl_nodes(node_ids) + + site_ids = [] + slice_ids = [] + person_ids = [] + node_ids = [] + # now get pl records for all ids associated with + # these records + for record in records: + if 'site_id' in record: + site_ids.append(record['site_id']) + if 'site_ids' in records: + site_ids.extend(record['site_ids']) + if 'person_ids' in record: + person_ids.extend(record['person_ids']) + if 'slice_ids' in record: + slice_ids.extend(record['slice_ids']) + if 'node_ids' in record: + node_ids.extend(record['node_ids']) + + # get pl info for these records + self.update_pl_sites(site_ids) + self.update_pl_slices(slice_ids) + self.update_pl_persons(person_ids) + self.update_pl_nodes(node_ids) + + # convert pl ids to hrns + self.update_hrns() + + # update sfa info + self.update_sfa_info(person_ids) + + def update_pl_sites(self, site_ids): + """ + Update site records with PL info + """ + if not site_ids: + return + sites = self.shell.GetSites(self.auth, site_ids) + for site in sites: + site_id = site['site_id'] + self.sites[site_id] = site + if site_id in self.sfa_authorities: + self.sfa_authorities[site_id].update(site) + + def update_pl_slices(self, slice_ids): + """ + Update slice records with PL info + """ + if not slice_ids: + return + slices = self.shell.GetSlices(self.auth, slice_ids) + for slice in slices: + slice_id = slice['slice_id'] + self.slices[slice_id] = slice + if slice_id in self.sfa_slices: + self.sfa_slices[slice_id].update(slice) + + def update_pl_persons(self, person_ids): + """ + Update person records with PL info + """ + key_ids = [] + if not person_ids: + return + persons = self.shell.GetPersons(self.auth, person_ids) + for person in persons: + person_id = person['person_id'] + self.persons[person_id] = person + key_ids.extend(person['key_ids']) + if person_id in self.sfa_users: + self.sfa_users[person_id].update(person) + self.update_pl_keys(key_ids) + + def update_pl_keys(self, key_ids): + """ + Update user records with PL public key info + """ + if not key_ids: + return + keys = self.shell.GetKeys(self.auth, key_ids) + for key in keys: + person_id = key['person_id'] + self.keys[key['key_id']] = key + if person_id in self.sfa_users: + person = self.sfa_users[person_id] + if not 'keys' in person: + person['keys'] = [key['key']] + else: + person['keys'].append(key['key']) + + def update_pl_nodes(self, node_ids): + """ + Update node records with PL info + """ + if not node_ids: + return + nodes = self.shell.GetNodes(self.auth, node_ids) + for node in nodes: + node_id = node['node_id'] + self.nodes[node['node_id']] = node + if node_id in self.sfa_nodes: + self.sfa_nodes[node_id].update(node) + + + def update_hrns(self): + """ + Convert pl ids to hrns + """ + for record in self.records: + # get all necessary data + type = record['type'] + pointer = record['pointer'] + auth_hrn = self.api.hrn + login_base = '' + if pointer == -1: + continue + + if 'site_id' in record: + site = self.sites[record['site_id']] + login_base = site['login_base'] + record['site'] = ".".join([auth_hrn, login_base]) + if 'person_ids' in record: + emails = [self.persons[person_id]['email'] for person_id in record['person_ids'] \ + if person_id in self.persons] + usernames = [email.split('@')[0] for email in emails] + person_hrns = [".".join([auth_hrn, login_base, username]) for username in usernames] + record['persons'] = person_hrns + if 'slice_ids' in record: + slicenames = [self.slices[slice_id]['name'] for slice_id in record['slice_ids'] \ + if slice_id in self.slices] + slice_hrns = [slicename_to_hrn(auth_hrn, slicename) for slicename in slicenames] + record['slices'] = slice_hrns + if 'node_ids' in record: + hostnames = [self.nodes[node_id]['hostname'] for node_id in record['node_ids'] \ + if node_id in self.nodes] + node_hrns = [hostname_to_hrn(auth_hrn, login_base, hostname) for hostname in hostnames] + record['nodes'] = node_hrns + if 'site_ids' in record: + login_bases = [self.sites[site_id]['login_base'] for site_id in record['site_ids'] \ + if site_id in self.sites] + site_hrns = [".".join([auth_hrn, lbase]) for lbase in login_bases] + record['sites'] = site_hrns + + def update_sfa_info(self, person_ids): + from sfa.util.table import SfaTable + table = SfaTable() + persons = table.find({'type': 'user', 'pointer': person_ids}) + # create a hrns keyed on the sfa record's pointer. + # Its possible for multiple records to have the same pointer so + # the dict's value will be a list of hrns. + person_dict = defaultdict(list) + for person in persons: + person_dict[person['pointer']].append(person['hrn']) + + def startswith(prefix, values): + return [value for value in values if value.startswith(prefix)] + + for record in self.records: + authority = record['authority'] + if record['pointer'] == -1: + continue + + if record['type'] == 'slice': + # all slice users are researchers + record['PI'] = [] + record['researchers'] = [] + for person_id in record['person_ids']: + record['researchers'].extend(person_dict[person_id]) + # also add the pis at the slice's site + site = self.sites[record['site_id']] + for person_id in site['person_ids']: + person = self.persons[person_id] + if 'pi' in person['roles']: + # PLCAPI doesn't support per site roles + # (a pi has the pi role at every site he belongs to). + # We shouldnt allow this in SFA + record['PI'].extend(startswith(authority, person_dict[person_id])) + + elif record['type'] == 'authority': + record['PI'] = [] + record['operator'] = [] + record['owner'] = [] + for person_id in record['person_ids']: + person = self.persons[person_id] + if 'pi' in person['roles']: + # only get PI's at this site + record['PI'].extend(startswith(record['hrn'], person_dict[person_id])) + if 'tech' in person['roles']: + # only get PI's at this site + record['operator'].extend(startswith(record['hrn'], person_dict[person_id])) + if 'admin' in person['roles']: + record['owner'].extend(startswith(record['hrn'], person_dict[person_id])) + + elif record['type'] == 'node': + record['dns'] = record['hostname'] + + elif record['type'] == 'user': + record['email'] = record['email'] + + + + + + def get_records(self): + return self.records + + +class SfaAPI(BaseAPI): + + # flat list of method names + import sfa.methods + methods = sfa.methods.all + + def __init__(self, config = "/etc/sfa/sfa_config.py", encoding = "utf-8", + methods='sfa.methods', peer_cert = None, interface = None, + key_file = None, cert_file = None, cache = None): + BaseAPI.__init__(self, config=config, encoding=encoding, methods=methods, \ + peer_cert=peer_cert, interface=interface, key_file=key_file, \ + cert_file=cert_file, cache=cache) + + self.encoding = encoding + + from sfa.util.table import SfaTable + self.SfaTable = SfaTable + # Better just be documenting the API + if config is None: + return + + # Load configuration + self.config = Config(config) + self.auth = Auth(peer_cert) + self.interface = interface + self.key_file = key_file + self.key = Keypair(filename=self.key_file) + self.cert_file = cert_file + self.cert = Certificate(filename=self.cert_file) + self.credential = None + # Initialize the PLC shell only if SFA wraps a myPLC + rspec_type = self.config.get_aggregate_type() + if (rspec_type == 'pl' or rspec_type == 'vini'): + self.plshell = self.getPLCShell() + self.plshell_version = "4.3" + + self.hrn = self.config.SFA_INTERFACE_HRN + self.time_format = "%Y-%m-%d %H:%M:%S" + self.logger=get_sfa_logger() + + def getPLCShell(self): + self.plauth = {'Username': self.config.SFA_PLC_USER, + 'AuthMethod': 'password', + 'AuthString': self.config.SFA_PLC_PASSWORD} + + self.plshell_type = 'xmlrpc' + # connect via xmlrpc + url = self.config.SFA_PLC_URL + shell = xmlrpclib.Server(url, verbose = 0, allow_none = True) + return shell + + def getCredential(self): + if self.interface in ['registry']: + return self.getCredentialFromLocalRegistry() + else: + return self.getCredentialFromRegistry() + + def getCredentialFromRegistry(self): + """ + Get our credential from a remote registry + """ + type = 'authority' + path = self.config.SFA_DATA_DIR + filename = ".".join([self.interface, self.hrn, type, "cred"]) + cred_filename = path + os.sep + filename + try: + credential = Credential(filename = cred_filename) + return credential.save_to_string(save_parents=True) + except IOError: + from sfa.server.registry import Registries + registries = Registries(self) + registry = registries[self.hrn] + cert_string=self.cert.save_to_string(save_parents=True) + # get self credential + self_cred = registry.get_self_credential(cert_string, type, self.hrn) + # get credential + cred = registry.get_credential(self_cred, type, self.hrn) + + # save cred to file + Credential(string=cred).save_to_file(cred_filename, save_parents=True) + return cred + + def getCredentialFromLocalRegistry(self): + """ + Get our current credential directly from the local registry. + """ + + hrn = self.hrn + auth_hrn = self.auth.get_authority(hrn) + + # is this a root or sub authority + if not auth_hrn or hrn == self.config.SFA_INTERFACE_HRN: + auth_hrn = hrn + auth_info = self.auth.get_auth_info(auth_hrn) + table = self.SfaTable() + records = table.findObjects(hrn) + if not records: + raise RecordNotFound + record = records[0] + type = record['type'] + object_gid = record.get_gid_object() + new_cred = Credential(subject = object_gid.get_subject()) + new_cred.set_gid_caller(object_gid) + new_cred.set_gid_object(object_gid) + new_cred.set_issuer(key=auth_info.get_pkey_object(), subject=auth_hrn) + new_cred.set_pubkey(object_gid.get_pubkey()) + r1 = determine_rights(type, hrn) + new_cred.set_privileges(r1) + + auth_kind = "authority,ma,sa" + + new_cred.set_parent(self.auth.hierarchy.get_auth_cred(auth_hrn, kind=auth_kind)) + + new_cred.encode() + new_cred.sign() + + return new_cred.save_to_string(save_parents=True) + + + def loadCredential (self): + """ + Attempt to load credential from file if it exists. If it doesnt get + credential from registry. + """ + + # see if this file exists + # XX This is really the aggregate's credential. Using this is easier than getting + # the registry's credential from iteslf (ssl errors). + ma_cred_filename = self.config.SFA_DATA_DIR + os.sep + self.interface + self.hrn + ".ma.cred" + try: + self.credential = Credential(filename = ma_cred_filename) + except IOError: + self.credential = self.getCredentialFromRegistry() + + ## + # Convert SFA fields to PLC fields for use when registering up updating + # registry record in the PLC database + # + # @param type type of record (user, slice, ...) + # @param hrn human readable name + # @param sfa_fields dictionary of SFA fields + # @param pl_fields dictionary of PLC fields (output) + + def sfa_fields_to_pl_fields(self, type, hrn, record): + + def convert_ints(tmpdict, int_fields): + for field in int_fields: + if field in tmpdict: + tmpdict[field] = int(tmpdict[field]) + + pl_record = {} + #for field in record: + # pl_record[field] = record[field] + + if type == "slice": + if not "instantiation" in pl_record: + pl_record["instantiation"] = "plc-instantiated" + pl_record["name"] = hrn_to_pl_slicename(hrn) + if "url" in record: + pl_record["url"] = record["url"] + if "description" in record: + pl_record["description"] = record["description"] + if "expires" in record: + pl_record["expires"] = int(record["expires"]) + + elif type == "node": + if not "hostname" in pl_record: + if not "hostname" in record: + raise MissingSfaInfo("hostname") + pl_record["hostname"] = record["hostname"] + if not "model" in pl_record: + pl_record["model"] = "geni" + + elif type == "authority": + pl_record["login_base"] = hrn_to_pl_login_base(hrn) + + if not "name" in pl_record: + pl_record["name"] = hrn + + if not "abbreviated_name" in pl_record: + pl_record["abbreviated_name"] = hrn + + if not "enabled" in pl_record: + pl_record["enabled"] = True + + if not "is_public" in pl_record: + pl_record["is_public"] = True + + return pl_record + + + def fill_record_info(self, records): + """ + Given a SFA record, fill in the PLC specific and SFA specific + fields in the record. + """ + if not isinstance(records, list): + records = [records] + + record_info = RecordInfo(self, records) + return record_info.get_records() + + def update_membership_list(self, oldRecord, record, listName, addFunc, delFunc): + # get a list of the HRNs tht are members of the old and new records + if oldRecord: + oldList = oldRecord.get(listName, []) + else: + oldList = [] + newList = record.get(listName, []) + + # if the lists are the same, then we don't have to update anything + if (oldList == newList): + return + + # build a list of the new person ids, by looking up each person to get + # their pointer + newIdList = [] + table = self.SfaTable() + records = table.find({'type': 'user', 'hrn': newList}) + for rec in records: + newIdList.append(rec['pointer']) + + # build a list of the old person ids from the person_ids field + if oldRecord: + oldIdList = oldRecord.get("person_ids", []) + containerId = oldRecord.get_pointer() + else: + # if oldRecord==None, then we are doing a Register, instead of an + # update. + oldIdList = [] + containerId = record.get_pointer() + + # add people who are in the new list, but not the oldList + for personId in newIdList: + if not (personId in oldIdList): + addFunc(self.plauth, personId, containerId) + + # remove people who are in the old list, but not the new list + for personId in oldIdList: + if not (personId in newIdList): + delFunc(self.plauth, personId, containerId) + + def update_membership(self, oldRecord, record): + if record.type == "slice": + self.update_membership_list(oldRecord, record, 'researcher', + self.plshell.AddPersonToSlice, + self.plshell.DeletePersonFromSlice) + elif record.type == "authority": + # xxx TODO + pass + + + +class ComponentAPI(BaseAPI): + + def __init__(self, config = "/etc/sfa/sfa_config.py", encoding = "utf-8", methods='sfa.methods', + peer_cert = None, interface = None, key_file = None, cert_file = None): + + BaseAPI.__init__(self, config=config, encoding=encoding, methods=methods, peer_cert=peer_cert, + interface=interface, key_file=key_file, cert_file=cert_file) + self.encoding = encoding + + # Better just be documenting the API + if config is None: + return + + self.nodemanager = NodeManager(self.config) + + def sliver_exists(self): + sliver_dict = self.nodemanager.GetXIDs() + if slicename in sliver_dict.keys(): + return True + else: + return False diff --git a/sfa/plc/api.py b/sfa/plc/api.py new file mode 100644 index 00000000..b93f3712 --- /dev/null +++ b/sfa/plc/api.py @@ -0,0 +1,678 @@ +# +# SFA XML-RPC and SOAP interfaces +# +### $Id: api.py 18708 2010-09-07 21:35:41Z tmack $ +### $URL: https://svn.planet-lab.org/svn/sfa/trunk/sfa/plc/api.py $ +# + +import sys +import os +import traceback +import string +import xmlrpclib +import sfa.util.xmlrpcprotocol as xmlrpcprotocol +from sfa.trust.auth import Auth +from sfa.util.config import * +from sfa.util.faults import * +from sfa.util.debug import * +from sfa.trust.rights import * +from sfa.trust.credential import * +from sfa.trust.certificate import * +from sfa.util.namespace import * +from sfa.util.api import * +from sfa.util.nodemanager import NodeManager +from sfa.util.sfalogging import * +try: + from collections import defaultdict +except: + class defaultdict(dict): + def __init__(self, default_factory=None, *a, **kw): + if (default_factory is not None and + not hasattr(default_factory, '__call__')): + raise TypeError('first argument must be callable') + dict.__init__(self, *a, **kw) + self.default_factory = default_factory + def __getitem__(self, key): + try: + return dict.__getitem__(self, key) + except KeyError: + return self.__missing__(key) + def __missing__(self, key): + if self.default_factory is None: + raise KeyError(key) + self[key] = value = self.default_factory() + return value + def __reduce__(self): + if self.default_factory is None: + args = tuple() + else: + args = self.default_factory, + return type(self), args, None, None, self.items() + def copy(self): + return self.__copy__() + def __copy__(self): + return type(self)(self.default_factory, self) + def __deepcopy__(self, memo): + import copy + return type(self)(self.default_factory, + copy.deepcopy(self.items())) + def __repr__(self): + return 'defaultdict(%s, %s)' % (self.default_factory, + dict.__repr__(self)) +## end of http://code.activestate.com/recipes/523034/ }}} + +def list_to_dict(recs, key): + """ + convert a list of dictionaries into a dictionary keyed on the + specified dictionary key + """ + keys = [rec[key] for rec in recs] + return dict(zip(keys, recs)) + +class SfaAPI(BaseAPI): + + # flat list of method names + import sfa.methods + methods = sfa.methods.all + + def __init__(self, config = "/etc/sfa/sfa_config.py", encoding = "utf-8", + methods='sfa.methods', peer_cert = None, interface = None, + key_file = None, cert_file = None, cache = None): + BaseAPI.__init__(self, config=config, encoding=encoding, methods=methods, \ + peer_cert=peer_cert, interface=interface, key_file=key_file, \ + cert_file=cert_file, cache=cache) + + self.encoding = encoding + from sfa.util.table import SfaTable + self.SfaTable = SfaTable + # Better just be documenting the API + if config is None: + return + + # Load configuration + self.config = Config(config) + self.auth = Auth(peer_cert) + self.interface = interface + self.key_file = key_file + self.key = Keypair(filename=self.key_file) + self.cert_file = cert_file + self.cert = Certificate(filename=self.cert_file) + self.credential = None + # Initialize the PLC shell only if SFA wraps a myPLC + rspec_type = self.config.get_aggregate_type() + if (rspec_type == 'pl' or rspec_type == 'vini' or rspec_type == 'eucalyptus'): + self.plshell = self.getPLCShell() + self.plshell_version = "4.3" + + self.hrn = self.config.SFA_INTERFACE_HRN + self.time_format = "%Y-%m-%d %H:%M:%S" + self.logger=get_sfa_logger() + + def getPLCShell(self): + self.plauth = {'Username': self.config.SFA_PLC_USER, + 'AuthMethod': 'password', + 'AuthString': self.config.SFA_PLC_PASSWORD} + try: + sys.path.append(os.path.dirname(os.path.realpath("/usr/bin/plcsh"))) + self.plshell_type = 'direct' + import PLC.Shell + shell = PLC.Shell.Shell(globals = globals()) + except: + self.plshell_type = 'xmlrpc' + url = self.config.SFA_PLC_URL + shell = xmlrpclib.Server(url, verbose = 0, allow_none = True) + + return shell + + def getCredential(self): + """ + Retrun a valid credential for this interface. + """ + if self.interface in ['registry']: + return self.getCredentialFromLocalRegistry() + else: + return self.getCredentialFromRegistry() + + def getDelegatedCredential(self, creds): + """ + Attempt to find a credential delegated to us in + the specified list of creds. + """ + if creds and not isinstance(creds, list): + creds = [creds] + delegated_creds = filter_creds_by_caller(creds,self.hrn) + if not delegated_creds: + return None + return delegated_creds[0] + + def getCredentialFromRegistry(self): + """ + Get our credential from a remote registry + """ + type = 'authority' + path = self.config.SFA_DATA_DIR + filename = ".".join([self.interface, self.hrn, type, "cred"]) + cred_filename = path + os.sep + filename + try: + credential = Credential(filename = cred_filename) + return credential.save_to_string(save_parents=True) + except IOError: + from sfa.server.registry import Registries + registries = Registries(self) + registry = registries[self.hrn] + cert_string=self.cert.save_to_string(save_parents=True) + # get self credential + self_cred = registry.get_self_credential(cert_string, type, self.hrn) + # get credential + cred = registry.get_credential(self_cred, type, self.hrn) + + # save cred to file + Credential(string=cred).save_to_file(cred_filename, save_parents=True) + return cred + + def getCredentialFromLocalRegistry(self): + """ + Get our current credential directly from the local registry. + """ + + hrn = self.hrn + auth_hrn = self.auth.get_authority(hrn) + + # is this a root or sub authority + if not auth_hrn or hrn == self.config.SFA_INTERFACE_HRN: + auth_hrn = hrn + auth_info = self.auth.get_auth_info(auth_hrn) + table = self.SfaTable() + records = table.findObjects(hrn) + if not records: + raise RecordNotFound + record = records[0] + type = record['type'] + object_gid = record.get_gid_object() + new_cred = Credential(subject = object_gid.get_subject()) + new_cred.set_gid_caller(object_gid) + new_cred.set_gid_object(object_gid) + new_cred.set_issuer_keys(auth_info.get_privkey_filename(), auth_info.get_gid_filename()) + + r1 = determine_rights(type, hrn) + new_cred.set_privileges(r1) + + auth_kind = "authority,ma,sa" + + new_cred.set_parent(self.auth.hierarchy.get_auth_cred(auth_hrn, kind=auth_kind)) + + new_cred.encode() + new_cred.sign() + + return new_cred.save_to_string(save_parents=True) + + + def loadCredential (self): + """ + Attempt to load credential from file if it exists. If it doesnt get + credential from registry. + """ + + # see if this file exists + # XX This is really the aggregate's credential. Using this is easier than getting + # the registry's credential from iteslf (ssl errors). + ma_cred_filename = self.config.SFA_DATA_DIR + os.sep + self.interface + self.hrn + ".ma.cred" + try: + self.credential = Credential(filename = ma_cred_filename) + except IOError: + self.credential = self.getCredentialFromRegistry() + + ## + # Convert SFA fields to PLC fields for use when registering up updating + # registry record in the PLC database + # + # @param type type of record (user, slice, ...) + # @param hrn human readable name + # @param sfa_fields dictionary of SFA fields + # @param pl_fields dictionary of PLC fields (output) + + def sfa_fields_to_pl_fields(self, type, hrn, record): + + def convert_ints(tmpdict, int_fields): + for field in int_fields: + if field in tmpdict: + tmpdict[field] = int(tmpdict[field]) + + pl_record = {} + #for field in record: + # pl_record[field] = record[field] + + if type == "slice": + if not "instantiation" in pl_record: + pl_record["instantiation"] = "plc-instantiated" + pl_record["name"] = hrn_to_pl_slicename(hrn) + if "url" in record: + pl_record["url"] = record["url"] + if "description" in record: + pl_record["description"] = record["description"] + if "expires" in record: + pl_record["expires"] = int(record["expires"]) + + elif type == "node": + if not "hostname" in pl_record: + if not "hostname" in record: + raise MissingSfaInfo("hostname") + pl_record["hostname"] = record["hostname"] + if not "model" in pl_record: + pl_record["model"] = "geni" + + elif type == "authority": + pl_record["login_base"] = hrn_to_pl_login_base(hrn) + + if not "name" in pl_record: + pl_record["name"] = hrn + + if not "abbreviated_name" in pl_record: + pl_record["abbreviated_name"] = hrn + + if not "enabled" in pl_record: + pl_record["enabled"] = True + + if not "is_public" in pl_record: + pl_record["is_public"] = True + + return pl_record + + def fill_record_pl_info(self, records): + """ + Fill in the planetlab specific fields of a SFA record. This + involves calling the appropriate PLC method to retrieve the + database record for the object. + + PLC data is filled into the pl_info field of the record. + + @param record: record to fill in field (in/out param) + """ + # get ids by type + node_ids, site_ids, slice_ids = [], [], [] + person_ids, key_ids = [], [] + type_map = {'node': node_ids, 'authority': site_ids, + 'slice': slice_ids, 'user': person_ids} + + for record in records: + for type in type_map: + if type == record['type']: + type_map[type].append(record['pointer']) + + # get pl records + nodes, sites, slices, persons, keys = {}, {}, {}, {}, {} + if node_ids: + node_list = self.plshell.GetNodes(self.plauth, node_ids) + nodes = list_to_dict(node_list, 'node_id') + if site_ids: + site_list = self.plshell.GetSites(self.plauth, site_ids) + sites = list_to_dict(site_list, 'site_id') + if slice_ids: + slice_list = self.plshell.GetSlices(self.plauth, slice_ids) + slices = list_to_dict(slice_list, 'slice_id') + if person_ids: + person_list = self.plshell.GetPersons(self.plauth, person_ids) + persons = list_to_dict(person_list, 'person_id') + for person in persons: + key_ids.extend(persons[person]['key_ids']) + + pl_records = {'node': nodes, 'authority': sites, + 'slice': slices, 'user': persons} + + if key_ids: + key_list = self.plshell.GetKeys(self.plauth, key_ids) + keys = list_to_dict(key_list, 'key_id') + + # fill record info + for record in records: + # records with pointer==-1 do not have plc info. + # for example, the top level authority records which are + # authorities, but not PL "sites" + if record['pointer'] == -1: + continue + + for type in pl_records: + if record['type'] == type: + if record['pointer'] in pl_records[type]: + record.update(pl_records[type][record['pointer']]) + break + # fill in key info + if record['type'] == 'user': + pubkeys = [keys[key_id]['key'] for key_id in record['key_ids'] if key_id in keys] + record['keys'] = pubkeys + + # fill in record hrns + records = self.fill_record_hrns(records) + + return records + + def fill_record_hrns(self, records): + """ + convert pl ids to hrns + """ + + # get ids + slice_ids, person_ids, site_ids, node_ids = [], [], [], [] + for record in records: + if 'site_id' in record: + site_ids.append(record['site_id']) + if 'site_ids' in records: + site_ids.extend(record['site_ids']) + if 'person_ids' in record: + person_ids.extend(record['person_ids']) + if 'slice_ids' in record: + slice_ids.extend(record['slice_ids']) + if 'node_ids' in record: + node_ids.extend(record['node_ids']) + + # get pl records + slices, persons, sites, nodes = {}, {}, {}, {} + if site_ids: + site_list = self.plshell.GetSites(self.plauth, site_ids, ['site_id', 'login_base']) + sites = list_to_dict(site_list, 'site_id') + if person_ids: + person_list = self.plshell.GetPersons(self.plauth, person_ids, ['person_id', 'email']) + persons = list_to_dict(person_list, 'person_id') + if slice_ids: + slice_list = self.plshell.GetSlices(self.plauth, slice_ids, ['slice_id', 'name']) + slices = list_to_dict(slice_list, 'slice_id') + if node_ids: + node_list = self.plshell.GetNodes(self.plauth, node_ids, ['node_id', 'hostname']) + nodes = list_to_dict(node_list, 'node_id') + + # convert ids to hrns + for record in records: + + # get all relevant data + type = record['type'] + pointer = record['pointer'] + auth_hrn = self.hrn + login_base = '' + if pointer == -1: + continue + + if 'site_id' in record: + site = sites[record['site_id']] + login_base = site['login_base'] + record['site'] = ".".join([auth_hrn, login_base]) + if 'person_ids' in record: + emails = [persons[person_id]['email'] for person_id in record['person_ids'] \ + if person_id in persons] + usernames = [email.split('@')[0] for email in emails] + person_hrns = [".".join([auth_hrn, login_base, username]) for username in usernames] + record['persons'] = person_hrns + if 'slice_ids' in record: + slicenames = [slices[slice_id]['name'] for slice_id in record['slice_ids'] \ + if slice_id in slices] + slice_hrns = [slicename_to_hrn(auth_hrn, slicename) for slicename in slicenames] + record['slices'] = slice_hrns + if 'node_ids' in record: + hostnames = [nodes[node_id]['hostname'] for node_id in record['node_ids'] \ + if node_id in nodes] + node_hrns = [hostname_to_hrn(auth_hrn, login_base, hostname) for hostname in hostnames] + record['nodes'] = node_hrns + if 'site_ids' in record: + login_bases = [sites[site_id]['login_base'] for site_id in record['site_ids'] \ + if site_id in sites] + site_hrns = [".".join([auth_hrn, lbase]) for lbase in login_bases] + record['sites'] = site_hrns + + return records + + def fill_record_sfa_info(self, records): + + def startswith(prefix, values): + return [value for value in values if value.startswith(prefix)] + + # get person ids + person_ids = [] + site_ids = [] + for record in records: + person_ids.extend(record.get("person_ids", [])) + site_ids.extend(record.get("site_ids", [])) + if 'site_id' in record: + site_ids.append(record['site_id']) + + # get all pis from the sites we've encountered + # and store them in a dictionary keyed on site_id + site_pis = {} + if site_ids: + pi_filter = {'|roles': ['pi'], '|site_ids': site_ids} + pi_list = self.plshell.GetPersons(self.plauth, pi_filter, ['person_id', 'site_ids']) + for pi in pi_list: + # we will need the pi's hrns also + person_ids.append(pi['person_id']) + + # we also need to keep track of the sites these pis + # belong to + for site_id in pi['site_ids']: + if site_id in site_pis: + site_pis[site_id].append(pi) + else: + site_pis[site_id] = [pi] + + # get sfa records for all records associated with these records. + # we'll replace pl ids (person_ids) with hrns from the sfa records + # we obtain + + # get the sfa records + table = self.SfaTable() + person_list, persons = [], {} + person_list = table.find({'type': 'user', 'pointer': person_ids}) + # create a hrns keyed on the sfa record's pointer. + # Its possible for multiple records to have the same pointer so + # the dict's value will be a list of hrns. + persons = defaultdict(list) + for person in person_list: + persons[person['pointer']].append(person) + + # get the pl records + pl_person_list, pl_persons = [], {} + pl_person_list = self.plshell.GetPersons(self.plauth, person_ids, ['person_id', 'roles']) + pl_persons = list_to_dict(pl_person_list, 'person_id') + + # fill sfa info + for record in records: + # skip records with no pl info (top level authorities) + if record['pointer'] == -1: + continue + sfa_info = {} + type = record['type'] + if (type == "slice"): + # all slice users are researchers + record['PI'] = [] + record['researcher'] = [] + for person_id in record['person_ids']: + hrns = [person['hrn'] for person in persons[person_id]] + record['researcher'].extend(hrns) + + # pis at the slice's site + pl_pis = site_pis[record['site_id']] + pi_ids = [pi['person_id'] for pi in pl_pis] + for person_id in pi_ids: + hrns = [person['hrn'] for person in persons[person_id]] + record['PI'].extend(hrns) + record['geni_urn'] = hrn_to_urn(record['hrn'], 'slice') + record['geni_creator'] = record['PI'] + + elif (type == "authority"): + record['PI'] = [] + record['operator'] = [] + record['owner'] = [] + for pointer in record['person_ids']: + if pointer not in persons or pointer not in pl_persons: + # this means there is not sfa or pl record for this user + continue + hrns = [person['hrn'] for person in persons[pointer]] + roles = pl_persons[pointer]['roles'] + if 'pi' in roles: + record['PI'].extend(hrns) + if 'tech' in roles: + record['operator'].extend(hrns) + if 'admin' in roles: + record['owner'].extend(hrns) + # xxx TODO: OrganizationName + elif (type == "node"): + sfa_info['dns'] = record.get("hostname", "") + # xxx TODO: URI, LatLong, IP, DNS + + elif (type == "user"): + sfa_info['email'] = record.get("email", "") + sfa_info['geni_urn'] = hrn_to_urn(record['hrn'], 'user') + sfa_info['geni_certificate'] = record['gid'] + # xxx TODO: PostalAddress, Phone + record.update(sfa_info) + + def fill_record_info(self, records): + """ + Given a SFA record, fill in the PLC specific and SFA specific + fields in the record. + """ + if not isinstance(records, list): + records = [records] + + self.fill_record_pl_info(records) + self.fill_record_sfa_info(records) + + def update_membership_list(self, oldRecord, record, listName, addFunc, delFunc): + # get a list of the HRNs tht are members of the old and new records + if oldRecord: + oldList = oldRecord.get(listName, []) + else: + oldList = [] + newList = record.get(listName, []) + + # if the lists are the same, then we don't have to update anything + if (oldList == newList): + return + + # build a list of the new person ids, by looking up each person to get + # their pointer + newIdList = [] + table = self.SfaTable() + records = table.find({'type': 'user', 'hrn': newList}) + for rec in records: + newIdList.append(rec['pointer']) + + # build a list of the old person ids from the person_ids field + if oldRecord: + oldIdList = oldRecord.get("person_ids", []) + containerId = oldRecord.get_pointer() + else: + # if oldRecord==None, then we are doing a Register, instead of an + # update. + oldIdList = [] + containerId = record.get_pointer() + + # add people who are in the new list, but not the oldList + for personId in newIdList: + if not (personId in oldIdList): + addFunc(self.plauth, personId, containerId) + + # remove people who are in the old list, but not the new list + for personId in oldIdList: + if not (personId in newIdList): + delFunc(self.plauth, personId, containerId) + + def update_membership(self, oldRecord, record): + if record.type == "slice": + self.update_membership_list(oldRecord, record, 'researcher', + self.plshell.AddPersonToSlice, + self.plshell.DeletePersonFromSlice) + elif record.type == "authority": + # xxx TODO + pass + + + +class ComponentAPI(BaseAPI): + + def __init__(self, config = "/etc/sfa/sfa_config.py", encoding = "utf-8", methods='sfa.methods', + peer_cert = None, interface = None, key_file = None, cert_file = None): + + BaseAPI.__init__(self, config=config, encoding=encoding, methods=methods, peer_cert=peer_cert, + interface=interface, key_file=key_file, cert_file=cert_file) + self.encoding = encoding + + # Better just be documenting the API + if config is None: + return + + self.nodemanager = NodeManager(self.config) + + def sliver_exists(self): + sliver_dict = self.nodemanager.GetXIDs() + if slicename in sliver_dict.keys(): + return True + else: + return False + + def get_registry(self): + addr, port = self.config.SFA_REGISTRY_HOST, self.config.SFA_REGISTRY_PORT + url = "http://%(addr)s:%(port)s" % locals() + server = xmlrpcprotocol.get_server(url, self.key_file, self.cert_file) + return server + + def get_node_key(self): + # this call requires no authentication, + # so we can generate a random keypair here + subject="component" + (kfd, keyfile) = tempfile.mkstemp() + (cfd, certfile) = tempfile.mkstemp() + key = Keypair(create=True) + key.save_to_file(keyfile) + cert = Certificate(subject=subject) + cert.set_issuer(key=key, subject=subject) + cert.set_pubkey(key) + cert.sign() + cert.save_to_file(certfile) + registry = self.get_registry() + # the registry will scp the key onto the node + registry.get_key() + + def getCredential(self): + """ + Get our credential from a remote registry + """ + path = self.config.SFA_DATA_DIR + config_dir = self.config.config_path + cred_filename = path + os.sep + 'node.cred' + try: + credential = Credential(filename = cred_filename) + return credential.save_to_string(save_parents=True) + except IOError: + node_pkey_file = config_dir + os.sep + "node.key" + node_gid_file = config_dir + os.sep + "node.gid" + cert_filename = path + os.sep + 'server.cert' + if not os.path.exists(node_pkey_file) or \ + not os.path.exists(node_gid_file): + self.get_node_key() + + # get node's hrn + gid = GID(filename=node_gid_file) + hrn = gid.get_hrn() + # get credential from registry + cert_str = Certificate(filename=cert_filename).save_to_string(save_parents=True) + registry = self.get_registry() + cred = registry.get_self_credential(cert_str, 'node', hrn) + Credential(string=cred).save_to_file(credfile, save_parents=True) + + return cred + + def clean_key_cred(self): + """ + remove the existing keypair and cred and generate new ones + """ + files = ["server.key", "server.cert", "node.cred"] + for f in files: + filepath = KEYDIR + os.sep + f + if os.path.isfile(filepath): + os.unlink(f) + + # install the new key pair + # get_credential will take care of generating the new keypair + # and credential + self.get_node_key() + self.getCredential() + + diff --git a/sfa/plc/network.py b/sfa/plc/network.py new file mode 100644 index 00000000..1553e3ba --- /dev/null +++ b/sfa/plc/network.py @@ -0,0 +1,594 @@ +from __future__ import with_statement +import re +import socket +from sfa.util.namespace import * +from sfa.util.faults import * +from xmlbuilder import XMLBuilder +from lxml import etree +import sys +from StringIO import StringIO + + +class Sliver: + def __init__(self, node): + self.node = node + self.network = node.network + self.slice = node.network.slice + + def toxml(self, xml): + with xml.sliver: + self.slice.tags_to_xml(xml, self.node) + + +class Iface: + def __init__(self, network, iface): + self.network = network + self.id = iface['interface_id'] + self.idtag = "i%s" % self.id + self.ipv4 = iface['ip'] + self.bwlimit = iface['bwlimit'] + self.hostname = iface['hostname'] + self.primary = iface['is_primary'] + + """ + Just print out bwlimit right now + """ + def toxml(self, xml): + if self.bwlimit: + with xml.bw_limit(units="kbps"): + xml << str(self.bwlimit / 1000) + + +class Node: + def __init__(self, network, node): + self.network = network + self.id = node['node_id'] + self.idtag = "n%s" % self.id + self.hostname = node['hostname'] + self.site_id = node['site_id'] + self.iface_ids = node['interface_ids'] + self.sliver = None + self.whitelist = node['slice_ids_whitelist'] + + def get_primary_iface(self): + for id in self.iface_ids: + iface = self.network.lookupIface(id) + if iface.primary: + return iface + return None + + def get_site(self): + return self.network.lookupSite(self.site_id) + + def add_sliver(self): + self.sliver = Sliver(self) + + def toxml(self, xml): + slice = self.network.slice + if self.whitelist and not self.sliver: + if not slice or slice.id not in self.whitelist: + return + + with xml.node(id = self.idtag): + with xml.hostname: + xml << self.hostname + iface = self.get_primary_iface() + if iface: + iface.toxml(xml) + if self.sliver: + self.sliver.toxml(xml) + + +class Site: + def __init__(self, network, site): + self.network = network + self.id = site['site_id'] + self.idtag = "s%s" % self.id + self.node_ids = site['node_ids'] + self.node_ids.sort() + self.name = site['abbreviated_name'] + self.tag = site['login_base'] + self.public = site['is_public'] + self.enabled = site['enabled'] + self.links = set() + self.whitelist = False + + def get_sitenodes(self): + n = [] + for i in self.node_ids: + n.append(self.network.lookupNode(i)) + return n + + def toxml(self, xml): + if not (self.public and self.enabled and self.node_ids): + return + with xml.site(id = self.idtag): + with xml.name: + xml << self.name + for node in self.get_sitenodes(): + node.toxml(xml) + + +class Slice: + def __init__(self, network, hrn, slice): + self.hrn = hrn + self.network = network + self.id = slice['slice_id'] + self.name = slice['name'] + self.peer_id = slice['peer_id'] + self.node_ids = set(slice['node_ids']) + self.slice_tag_ids = slice['slice_tag_ids'] + + """ + Use with tags that can have more than one instance + """ + def get_multi_tag(self, tagname, node = None): + tags = [] + for i in self.slice_tag_ids: + try: + tag = self.network.lookupSliceTag(i) + if tag.tagname == tagname: + if not (node and node.id != tag.node_id): + tags.append(tag) + except InvalidRSpec, e: + # As they're not needed, we ignore some tag types from + # GetSliceTags call. See Slicetag.ignore_tags + pass + return tags + + """ + Use with tags that have only one instance + """ + def get_tag(self, tagname, node = None): + try: + for i in self.slice_tag_ids: + tag = self.network.lookupSliceTag(i) + if tag.tagname == tagname: + if (not node) or (node.id == tag.node_id): + return tag + except InvalidRSpec, e: + # As they're not needed, we ignore some tag types from + # GetSliceTags call. See Slicetag.ignore_tags + pass + return None + + def get_nodes(self): + n = [] + for id in self.node_ids: + if id in self.network.nodes: + n.append(self.network.nodes[id]) + return n + + # Add a new slice tag + def add_tag(self, tagname, value, node = None, role_id = 40): + tt = self.network.lookupTagType(tagname) + if not tt.permit_update(role_id): + raise InvalidRSpec("permission denied to modify '%s' tag" % tagname) + tag = Slicetag() + tag.initialize(tagname, value, node, self.network) + self.network.tags[tag.id] = tag + self.slice_tag_ids.append(tag.id) + return tag + + # Update a slice tag if it exists, else add it + def update_tag(self, tagname, value, node = None, role_id = 40): + tag = self.get_tag(tagname, node) + if tag: + if not tag.permit_update(role_id, value): + raise InvalidRSpec("permission denied to modify '%s' tag" % tagname) + tag.change(value) + else: + tag = self.add_tag(tagname, value, node, role_id) + return tag + + def update_multi_tag(self, tagname, value, node = None, role_id = 40): + tags = self.get_multi_tag(tagname, node) + for tag in tags: + if tag and tag.value == value: + break + else: + tag = self.add_tag(tagname, value, node, role_id) + return tag + + def tags_to_xml(self, xml, node = None): + tagtypes = self.network.getTagTypes() + for tt in tagtypes: + if tt.in_rspec: + if tt.multi: + tags = self.get_multi_tag(tt.tagname, node) + for tag in tags: + if not tag.was_deleted(): ### Debugging + xml << (tag.tagname, tag.value) + else: + tag = self.get_tag(tt.tagname, node) + if tag: + if not tag.was_deleted(): ### Debugging + xml << (tag.tagname, tag.value) + + def toxml(self, xml): + with xml.sliver_defaults: + self.tags_to_xml(xml) + + +class Slicetag: + newid = -1 + filter_fields = ['slice_tag_id','slice_id','tagname','value','node_id','category','min_role_id'] + ignore_tags = ['hmac','ssh_key'] + def __init__(self, tag = None): + if not tag: + return + self.id = tag['slice_tag_id'] + self.slice_id = tag['slice_id'] + self.tagname = tag['tagname'] + self.value = tag['value'] + self.node_id = tag['node_id'] + self.category = tag['category'] + self.min_role_id = tag['min_role_id'] + self.status = None + + # Create a new slicetag that will be written to the DB later + def initialize(self, tagname, value, node, network): + tt = network.lookupTagType(tagname) + self.id = Slicetag.newid + Slicetag.newid -=1 + self.slice_id = network.slice.id + self.tagname = tagname + self.value = value + if node: + self.node_id = node.id + else: + self.node_id = None + self.category = tt.category + self.min_role_id = tt.min_role_id + self.status = "new" + + def permit_update(self, role_id, value = None): + if value and self.value == value: + return True + if role_id > self.min_role_id: + return False + return True + + def change(self, value): + if self.value != value: + self.value = value + self.status = "change" + else: + self.status = "updated" + + # Mark a tag as deleted + def delete(self): + self.status = "delete" + + def was_added(self): + return (self.id < 0) + + def was_changed(self): + return (self.status == "change") + + def was_deleted(self): + return (self.status == "delete") + + def was_updated(self): + return (self.status != None) + + def write(self, api): + if self.was_added(): + api.plshell.AddSliceTag(api.plauth, self.slice_id, + self.tagname, self.value, self.node_id) + elif self.was_changed(): + api.plshell.UpdateSliceTag(api.plauth, self.id, self.value) + elif self.was_deleted(): + api.plshell.DeleteSliceTag(api.plauth, self.id) + + +class TagType: + ignore_tags = ['hmac','ssh_key'] + def __init__(self, tagtype): + self.id = tagtype['tag_type_id'] + self.category = tagtype['category'] + self.tagname = tagtype['tagname'] + self.min_role_id = tagtype['min_role_id'] + self.multi = False + self.in_rspec = False + if self.category == 'slice/rspec': + self.in_rspec = True + if self.tagname in ['codemux', 'ip_addresses', 'vsys']: + self.multi = True + + def permit_update(self, role_id): + if role_id > self.min_role_id: + return False + return True + + +class Network: + """ + A Network is a compound object consisting of: + * a dictionary mapping site IDs to Site objects + * a dictionary mapping node IDs to Node objects + * a dictionary mapping interface IDs to Iface objects + """ + def __init__(self, api, type = "SFA"): + self.api = api + self.type = type + self.sites = self.get_sites(api) + self.nodes = self.get_nodes(api) + self.ifaces = self.get_ifaces(api) + self.tags = self.get_slice_tags(api) + self.tagtypes = self.get_tag_types(api) + self.slice = None + + def lookupSite(self, id): + """ Lookup site based on id or idtag value """ + val = None + if isinstance(id, basestring): + id = int(id.lstrip('s')) + try: + val = self.sites[id] + except: + raise InvalidRSpec("site ID %s not found" % id) + return val + + def getSites(self): + sites = [] + for s in self.sites: + sites.append(self.sites[s]) + return sites + + def lookupNode(self, id): + """ Lookup node based on id or idtag value """ + val = None + if isinstance(id, basestring): + id = int(id.lstrip('n')) + try: + val = self.nodes[id] + except: + raise InvalidRSpec("node ID %s not found" % id) + return val + + def getNodes(self): + nodes = [] + for n in self.nodes: + nodes.append(self.nodes[n]) + return nodes + + def lookupIface(self, id): + """ Lookup iface based on id or idtag value """ + val = None + if isinstance(id, basestring): + id = int(id.lstrip('i')) + try: + val = self.ifaces[id] + except: + raise InvalidRSpec("interface ID %s not found" % id) + return val + + def getIfaces(self): + ifaces = [] + for i in self.ifaces: + ifaces.append(self.ifaces[i]) + return ifaces + + def nodesWithSlivers(self): + nodes = [] + for n in self.nodes: + node = self.nodes[n] + if node.sliver: + nodes.append(node) + return nodes + + def lookupSliceTag(self, id): + val = None + try: + val = self.tags[id] + except: + raise InvalidRSpec("slicetag ID %s not found" % id) + return val + + def getSliceTags(self): + tags = [] + for t in self.tags: + tags.append(self.tags[t]) + return tags + + def lookupTagType(self, name): + val = None + try: + val = self.tagtypes[name] + except: + raise InvalidRSpec("tag %s not found" % name) + return val + + def getTagTypes(self): + tags = [] + for t in self.tagtypes: + tags.append(self.tagtypes[t]) + return tags + + def __process_attributes(self, element, node=None): + """ + Process the elements under or + """ + if element is None: + return + + tagtypes = self.getTagTypes() + for tt in tagtypes: + if tt.in_rspec: + if tt.multi: + for e in element.iterfind("./" + tt.tagname): + self.slice.update_multi_tag(tt.tagname, e.text, node) + else: + e = element.find("./" + tt.tagname) + if e is not None: + self.slice.update_tag(tt.tagname, e.text, node) + + def addRSpec(self, xml, schema=None): + """ + Annotate the objects in the Network with information from the RSpec + """ + try: + tree = etree.parse(StringIO(xml)) + except etree.XMLSyntaxError: + message = str(sys.exc_info()[1]) + raise InvalidRSpec(message) + + # Filter out stuff that's not for us + rspec = tree.getroot() + for network in rspec.iterfind("./network"): + if network.get("name") != self.api.hrn: + rspec.remove(network) + for request in rspec.iterfind("./request"): + if request.get("name") != self.api.hrn: + rspec.remove(request) + + if schema: + # Validate the incoming request against the RelaxNG schema + relaxng_doc = etree.parse(schema) + relaxng = etree.RelaxNG(relaxng_doc) + + if not relaxng(tree): + error = relaxng.error_log.last_error + message = "%s (line %s)" % (error.message, error.line) + raise InvalidRSpec(message) + + self.rspec = rspec + + defaults = rspec.find(".//sliver_defaults") + self.__process_attributes(defaults) + + # Find slivers under node elements + for sliver in rspec.iterfind("./network/site/node/sliver"): + elem = sliver.getparent() + try: + node = self.lookupNode(elem.get("id")) + except: + # Don't worry about nodes from other aggregates + pass + else: + node.add_sliver() + self.__process_attributes(sliver, node) + + # Find slivers that specify nodeid + for sliver in rspec.iterfind("./request/sliver[@nodeid]"): + try: + node = self.lookupNode(sliver.get("nodeid")) + except: + # Don't worry about nodes from other aggregates + pass + else: + node.add_sliver() + self.__process_attributes(sliver, node) + + return + + def addSlice(self): + """ + Annotate the objects in the Network with information from the slice + """ + slice = self.slice + if not slice: + raise InvalidRSpec("no slice associated with network") + + for node in slice.get_nodes(): + node.add_sliver() + + def updateSliceTags(self): + """ + Write any slice tags that have been added or modified back to the DB + """ + for tag in self.getSliceTags(): + if tag.category == 'slice/rspec' and not tag.was_updated() and tag.permit_update(None, 40): + # The user wants to delete this tag + tag.delete() + + # Update slice tags in database + for tag in self.getSliceTags(): + if tag.slice_id == self.slice.id: + tag.write(self.api) + + def toxml(self): + """ + Produce XML directly from the topology specification. + """ + xml = XMLBuilder(format = True, tab_step = " ") + with xml.RSpec(type=self.type): + if self.slice: + element = xml.network(name=self.api.hrn, slice=self.slice.hrn) + else: + element = xml.network(name=self.api.hrn) + + with element: + if self.slice: + self.slice.toxml(xml) + for site in self.getSites(): + site.toxml(xml) + + header = '\n' + return header + str(xml) + + def get_sites(self, api): + """ + Create a dictionary of site objects keyed by site ID + """ + tmp = [] + for site in api.plshell.GetSites(api.plauth, {'peer_id': None}): + t = site['site_id'], Site(self, site) + tmp.append(t) + return dict(tmp) + + + def get_nodes(self, api): + """ + Create a dictionary of node objects keyed by node ID + """ + tmp = [] + for node in api.plshell.GetNodes(api.plauth, {'peer_id': None}): + t = node['node_id'], Node(self, node) + tmp.append(t) + return dict(tmp) + + def get_ifaces(self, api): + """ + Create a dictionary of node objects keyed by node ID + """ + tmp = [] + for iface in api.plshell.GetInterfaces(api.plauth): + t = iface['interface_id'], Iface(self, iface) + tmp.append(t) + return dict(tmp) + + def get_slice_tags(self, api): + """ + Create a dictionary of slicetag objects keyed by slice tag ID + """ + tmp = [] + for tag in api.plshell.GetSliceTags(api.plauth, {'~tagname':Slicetag.ignore_tags}, Slicetag.filter_fields): + t = tag['slice_tag_id'], Slicetag(tag) + tmp.append(t) + return dict(tmp) + + def get_tag_types(self, api): + """ + Create a list of tagtype obects keyed by tag name + """ + tmp = [] + for tag in api.plshell.GetTagTypes(api.plauth, {'~tagname':TagType.ignore_tags}): + t = tag['tagname'], TagType(tag) + tmp.append(t) + return dict(tmp) + + def get_slice(self, api, hrn): + """ + Return a Slice object for a single slice + """ + slicename = hrn_to_pl_slicename(hrn) + slice = api.plshell.GetSlices(api.plauth, [slicename]) + if len(slice): + self.slice = Slice(self, slicename, slice[0]) + return self.slice + else: + return None + + diff --git a/sfa/plc/peers.py b/sfa/plc/peers.py new file mode 100644 index 00000000..455c682a --- /dev/null +++ b/sfa/plc/peers.py @@ -0,0 +1,36 @@ +from sfa.util.namespace import * +from types import StringTypes + +def get_peer(api, hrn): + # Becaues of myplc federation, we first need to determine if this + # slice belongs to out local plc or a myplc peer. We will assume it + # is a local site, unless we find out otherwise + peer = None + + # get this slice's authority (site) + slice_authority = get_authority(hrn) + + # get this site's authority (sfa root authority or sub authority) + site_authority = get_authority(slice_authority).lower() + # check if we are already peered with this site_authority, if so + peers = api.plshell.GetPeers(api.plauth, {}, \ + ['peer_id', 'peername', 'shortname', 'hrn_root']) + for peer_record in peers: + names = [name.lower() for name in peer_record.values() if isinstance(name, StringTypes)] + if site_authority in names: + peer = peer_record['shortname'] + + return peer + + +def get_sfa_peer(api, hrn): + # return the authority for this hrn or None if we are the authority + sfa_peer = None + slice_authority = get_authority(hrn) + site_authority = get_authority(slice_authority) + + if site_authority != api.hrn: + sfa_peer = site_authority + + return sfa_peer + diff --git a/sfa/plc/remoteshell.py b/sfa/plc/remoteshell.py new file mode 100644 index 00000000..1241aefa --- /dev/null +++ b/sfa/plc/remoteshell.py @@ -0,0 +1,107 @@ +# remoteshell.py +# +# interface to the PLC api via xmlrpc +# +# RemoteShell() exports an API that looks identical to that exported by +# PLC.Shell.Shell(). It's meant to be a drop in replacement for running +# SFA on a different machine than PLC. + +### $Id: remoteshell.py 16477 2010-01-05 16:31:37Z thierry $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/plc/remoteshell.py $ + +import xmlrpclib + +class RemoteShell: + def __init__(self): + self.servers = {} + + def call(self, name, pl_auth, *args): + + key = pl_auth["Url"] + "#" + pl_auth["Username"] + + if not (key in self.servers): + server = xmlrpclib.Server(pl_auth["Url"], verbose = 0, allow_none=True) + #server.AdmAuthCheck(pl_auth) + server.AuthCheck(pl_auth) + self.servers[key] = server + + server = self.servers[key] + + arglist = ["pl_auth"] + for arg in args: + arglist.append(repr(arg)) + + str = "server." + name + "(" + ",".join(arglist) + ")" + result = eval(str) + + return result + + # TODO: there's probably an automatic way to import all these stubs + + def AddInitScript(self, pl_auth, *args): + return self.call("AddInitScript", pl_auth, *args) + + def AddNode(self, pl_auth, *args): + return self.call("AddNode", pl_auth, *args) + + def AddPerson(self, pl_auth, *args): + return self.call("AddPerson", pl_auth, *args) + + def AddPersonToSlice(self, pl_auth, *args): + return self.call("AddPersonToSlice", pl_auth, *args) + + def AddSite(self, pl_auth, *args): + return self.call("AddSite", pl_auth, *args) + + def AddSlice(self, pl_auth, *args): + return self.call("AddSlice", pl_auth, *args) + + def DeleteNode(self, pl_auth, *args): + return self.call("DeleteNode", pl_auth, *args) + + def DeletePerson(self, pl_auth, *args): + return self.call("DeletePerson", pl_auth, *args) + + def DeletePersonFromSlice(self, pl_auth, *args): + return self.call("DeletePersonFromSlice", pl_auth, *args) + + def DeleteSite(self, pl_auth, *args): + return self.call("DeleteSite", pl_auth, *args) + + def DeleteSlice(self, pl_auth, *args): + return self.call("DeleteSlice", pl_auth, *args) + + def GetInitScripts(self, pl_auth, *args): + return self.call("GetInitScripts", pl_auth, *args) + + def GetKeys(self, pl_auth, *args): + return self.call("GetKeys", pl_auth, *args) + + def GetNodes(self, pl_auth, *args): + return self.call("GetNodes", pl_auth, *args) + + def GetPersons(self, pl_auth, *args): + return self.call("GetPersons", pl_auth, *args) + + def GetSites(self, pl_auth, *args): + return self.call("GetSites", pl_auth, *args) + + def GetSliceAttributes(self, pl_auth, *args): + return self.call("GetSliceAttributes", pl_auth, *args) + + def GetSlices(self, pl_auth, *args): + return self.call("GetSlices", pl_auth, *args) + + def UpdateNode(self, pl_auth, *args): + return self.call("UpdateNode", pl_auth, *args) + + def UpdatePerson(self, pl_auth, *args): + return self.call("UpdatePerson", pl_auth, *args) + + def UpdateSite(self, pl_auth, *args): + return self.call("UpdateSite", pl_auth, *args) + + def UpdateSlice(self, pl_auth, *args): + return self.call("UpdateSlice", pl_auth, *args) + + diff --git a/sfa/plc/sfa-import-plc.py b/sfa/plc/sfa-import-plc.py new file mode 100755 index 00000000..a89eefad --- /dev/null +++ b/sfa/plc/sfa-import-plc.py @@ -0,0 +1,273 @@ +#!/usr/bin/python +# +### $Id: sfa-import-plc.py 18534 2010-07-27 16:49:53Z tmack $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/plc/sfa-import-plc.py $ +# +## +# Import PLC records into the SFA database. It is indended that this tool be +# run once to create SFA records that reflect the current state of the +# planetlab database. +# +# The import tool assumes that the existing PLC hierarchy should all be part +# of "planetlab.us" (see the root_auth and level1_auth variables below). +# +# Public keys are extracted from the users' SSH keys automatically and used to +# create GIDs. This is relatively experimental as a custom tool had to be +# written to perform conversion from SSH to OpenSSL format. It only supports +# RSA keys at this time, not DSA keys. +## + +import getopt +import sys +import tempfile +import logging.handlers +import logging +from sfa.util.record import * +from sfa.util.table import SfaTable +from sfa.util.namespace import * +from sfa.util.config import Config +from sfa.trust.certificate import convert_public_key, Keypair +from sfa.trust.trustedroot import * +from sfa.trust.hierarchy import * +from sfa.plc.api import * +from sfa.trust.gid import create_uuid +from sfa.plc.sfaImport import * +from sfa.util.report import trace, error + +def process_options(): + global hrn + + (options, args) = getopt.getopt(sys.argv[1:], '', []) + for opt in options: + name = opt[0] + val = opt[1] + + +def load_keys(filename): + keys = {} + tmp_dict = {} + try: + execfile(filename, tmp_dict) + if 'keys' in tmp_dict: + keys = tmp_dict['keys'] + return keys + except: + return keys + +def save_keys(filename, keys): + f = open(filename, 'w') + f.write("keys = %s" % str(keys)) + f.close() + +def main(): + # setup the logger + LOGFILE='/var/log/sfa_import_plc.log' + logging.basicConfig(level=logging.INFO, + format='%(asctime)s - %(message)s', + filename=LOGFILE) + rotate_handler = logging.handlers.RotatingFileHandler(LOGFILE, maxBytes=1000000, backupCount=5) + logger = logging.getLogger() + logger.addHandler(rotate_handler) + + process_options() + config = Config() + if not config.SFA_REGISTRY_ENABLED: + sys.exit(0) + root_auth = config.SFA_REGISTRY_ROOT_AUTH + interface_hrn = config.SFA_INTERFACE_HRN + keys_filename = config.config_path + os.sep + 'person_keys.py' + sfaImporter = sfaImport(logger) + shell = sfaImporter.shell + plc_auth = sfaImporter.plc_auth + AuthHierarchy = sfaImporter.AuthHierarchy + TrustedRoots = sfaImporter.TrustedRoots + table = SfaTable() + + if not table.exists(): + table.create() + + # create root authority + sfaImporter.create_top_level_auth_records(root_auth) + if not root_auth == interface_hrn: + sfaImporter.create_top_level_auth_records(interface_hrn) + + trace("Import: adding " + interface_hrn + " to trusted list", logger) + authority = AuthHierarchy.get_auth_info(interface_hrn) + TrustedRoots.add_gid(authority.get_gid_object()) + + if ".vini" in interface_hrn and interface_hrn.endswith('vini'): + # create a fake internet2 site first + i2site = {'name': 'Internet2', 'abbreviated_name': 'I2', + 'login_base': 'internet2', 'site_id': -1} + sfaImporter.import_site(interface_hrn, i2site) + + # create dict of all existing sfa records + existing_records = {} + existing_hrns = [] + key_ids = [] + person_keys = {} + results = table.find() + for result in results: + existing_records[(result['hrn'], result['type'])] = result + existing_hrns.append(result['hrn']) + + # Get all plc sites + sites = shell.GetSites(plc_auth, {'peer_id': None}) + sites_dict = {} + for site in sites: + sites_dict[site['login_base']] = site + + # Get all plc users + persons = shell.GetPersons(plc_auth, {'peer_id': None, 'enabled': True}, ['person_id', 'email', 'key_ids', 'site_ids']) + persons_dict = {} + for person in persons: + persons_dict[person['person_id']] = person + key_ids.extend(person['key_ids']) + + # Get all public keys + keys = shell.GetKeys(plc_auth, {'peer_id': None, 'key_id': key_ids}) + keys_dict = {} + for key in keys: + keys_dict[key['key_id']] = key['key'] + + # create a dict of person keys keyed on key_id + old_person_keys = load_keys(keys_filename) + for person in persons: + pubkeys = [] + for key_id in person['key_ids']: + pubkeys.append(keys_dict[key_id]) + person_keys[person['person_id']] = pubkeys + + # Get all plc nodes + nodes = shell.GetNodes(plc_auth, {'peer_id': None}, ['node_id', 'hostname', 'site_id']) + nodes_dict = {} + for node in nodes: + nodes_dict[node['node_id']] = node + + # Get all plc slices + slices = shell.GetSlices(plc_auth, {'peer_id': None}, ['slice_id', 'name']) + slices_dict = {} + for slice in slices: + slices_dict[slice['slice_id']] = slice + # start importing + for site in sites: + site_hrn = interface_hrn + "." + site['login_base'] + print "Importing site: %s" % site_hrn + + # import if hrn is not in list of existing hrns or if the hrn exists + # but its not a site record + if site_hrn not in existing_hrns or \ + (site_hrn, 'authority') not in existing_records: + site_hrn = sfaImporter.import_site(interface_hrn, site) + + # import node records + for node_id in site['node_ids']: + if node_id not in nodes_dict: + continue + node = nodes_dict[node_id] + hrn = hostname_to_hrn(interface_hrn, site['login_base'], node['hostname']) + if hrn not in existing_hrns or \ + (hrn, 'node') not in existing_records: + sfaImporter.import_node(site_hrn, node) + + # import slices + for slice_id in site['slice_ids']: + if slice_id not in slices_dict: + continue + slice = slices_dict[slice_id] + hrn = slicename_to_hrn(interface_hrn, slice['name']) + if hrn not in existing_hrns or \ + (hrn, 'slice') not in existing_records: + sfaImporter.import_slice(site_hrn, slice) + + # import persons + for person_id in site['person_ids']: + if person_id not in persons_dict: + continue + person = persons_dict[person_id] + hrn = email_to_hrn(site_hrn, person['email']) + old_keys = [] + new_keys = [] + if person_id in old_person_keys: + old_keys = old_person_keys[person_id] + if person_id in person_keys: + new_keys = person_keys[person_id] + update_record = False + for key in new_keys: + if key not in old_keys: + update_record = True + + if hrn not in existing_hrns or \ + (hrn, 'user') not in existing_records or update_record: + sfaImporter.import_person(site_hrn, person) + + # remove stale records + for (record_hrn, type) in existing_records.keys(): + record = existing_records[(record_hrn, type)] + # if this is the interface name dont do anything + if record_hrn == interface_hrn or \ + record_hrn == root_auth or \ + record['peer_authority']: + continue + # dont delete vini's internet2 placeholdder record + # normally this would be deleted becuase it does not have a plc record + if ".vini" in interface_hrn and interface_hrn.endswith('vini') and \ + record_hrn.endswith("internet2"): + continue + + found = False + + if type == 'authority': + for site in sites: + site_hrn = interface_hrn + "." + site['login_base'] + if site_hrn == record_hrn and site['site_id'] == record['pointer']: + found = True + break + + elif type == 'user': + login_base = get_leaf(get_authority(record_hrn)) + username = get_leaf(record_hrn) + if login_base in sites_dict: + site = sites_dict[login_base] + for person in persons: + tmp_username = person['email'].split("@")[0] + alt_username = person['email'].split("@")[0].replace(".", "_") + if username in [tmp_username, alt_username] and \ + site['site_id'] in person['site_ids'] and \ + person['person_id'] == record['pointer']: + found = True + break + + elif type == 'slice': + slicename = hrn_to_pl_slicename(record_hrn) + for slice in slices: + if slicename == slice['name'] and \ + slice['slice_id'] == record['pointer']: + found = True + break + + elif type == 'node': + login_base = get_leaf(get_authority(record_hrn)) + nodename = get_leaf(record_hrn) + if login_base in sites_dict: + site = sites_dict[login_base] + for node in nodes: + tmp_nodename = node['hostname'].split(".")[0] + if tmp_nodename == nodename and \ + node['site_id'] == site['site_id'] and \ + node['node_id'] == record['pointer']: + found = True + break + else: + continue + + if not found: + record_object = existing_records[(record_hrn, type)] + sfaImporter.delete_record(record_hrn, type) + + # save pub keys + trace('Import: saving current pub keys', logger) + save_keys(keys_filename, person_keys) + +if __name__ == "__main__": + main() diff --git a/sfa/plc/sfa-nuke-plc.py b/sfa/plc/sfa-nuke-plc.py new file mode 100755 index 00000000..2b1b41f5 --- /dev/null +++ b/sfa/plc/sfa-nuke-plc.py @@ -0,0 +1,32 @@ +#!/usr/bin/python +## +# Delete all the database records for SFA. This tool is used to clean out SFA +# records during testing. +# +# Authority info (maintained by the hierarchy module in a subdirectory tree) +# is not purged by this tool and may be deleted by a command like 'rm'. +## + +import getopt +import sys + +from sfa.trust.hierarchy import * +from sfa.util.record import * +from sfa.util.table import SfaTable + +def process_options(): + + (options, args) = getopt.getopt(sys.argv[1:], '', []) + for opt in options: + name = opt[0] + val = opt[1] + +def main(): + process_options() + + print "Purging SFA records from database" + table = SfaTable() + table.sfa_records_purge() + +if __name__ == "__main__": + main() diff --git a/sfa/plc/sfaImport.py b/sfa/plc/sfaImport.py new file mode 100644 index 00000000..b95bc5a6 --- /dev/null +++ b/sfa/plc/sfaImport.py @@ -0,0 +1,246 @@ +# +# The import tool assumes that the existing PLC hierarchy should all be part +# of "planetlab.us" (see the root_auth and level1_auth variables below). +# +# Public keys are extracted from the users' SSH keys automatically and used to +# create GIDs. This is relatively experimental as a custom tool had to be +# written to perform conversion from SSH to OpenSSL format. It only supports +# RSA keys at this time, not DSA keys. +## + +import getopt +import sys +import tempfile + +from sfa.util.record import * +from sfa.util.table import SfaTable +from sfa.util.namespace import * +from sfa.util.config import Config +from sfa.util.report import trace, error +from sfa.trust.certificate import convert_public_key, Keypair +from sfa.trust.trustedroot import * +from sfa.trust.hierarchy import * +from sfa.trust.gid import create_uuid + + +def un_unicode(str): + if isinstance(str, unicode): + return str.encode("ascii", "ignore") + else: + return str + +def cleanup_string(str): + # pgsql has a fit with strings that have high ascii in them, so filter it + # out when generating the hrns. + tmp = "" + for c in str: + if ord(c) < 128: + tmp = tmp + c + str = tmp + + str = un_unicode(str) + str = str.replace(" ", "_") + str = str.replace(".", "_") + str = str.replace("(", "_") + str = str.replace("'", "_") + str = str.replace(")", "_") + str = str.replace('"', "_") + return str + +class sfaImport: + + def __init__(self, logger=None): + self.logger = logger + self.AuthHierarchy = Hierarchy() + self.config = Config() + self.TrustedRoots = TrustedRootList(Config.get_trustedroots_dir(self.config)) + self.plc_auth = self.config.get_plc_auth() + self.root_auth = self.config.SFA_REGISTRY_ROOT_AUTH + + # connect to planetlab + self.shell = None + if "Url" in self.plc_auth: + from sfa.plc.remoteshell import RemoteShell + self.shell = RemoteShell() + else: + import PLC.Shell + self.shell = PLC.Shell.Shell(globals = globals()) + + + def create_top_level_auth_records(self, hrn): + AuthHierarchy = self.AuthHierarchy + urn = hrn_to_urn(hrn, 'authority') + # make sure parent exists + parent_hrn = get_authority(hrn) + if not parent_hrn: + parent_hrn = hrn + if not parent_hrn == hrn: + self.create_top_level_auth_records(parent_hrn) + + # create the authority if it doesnt already exist + if not AuthHierarchy.auth_exists(urn): + trace("Import: creating top level authorites", self.logger) + AuthHierarchy.create_auth(urn) + + # create the db record if it doesnt already exist + auth_info = AuthHierarchy.get_auth_info(hrn) + table = SfaTable() + auth_record = table.find({'type': 'authority', 'hrn': hrn}) + + if not auth_record: + auth_record = SfaRecord(hrn=hrn, gid=auth_info.get_gid_object(), type="authority", pointer=-1) + auth_record['authority'] = get_authority(auth_record['hrn']) + trace("Import: inserting authority record for " + hrn, self.logger) + table.insert(auth_record) + + + def import_person(self, parent_hrn, person): + AuthHierarchy = self.AuthHierarchy + hrn = email_to_hrn(parent_hrn, person['email']) + + # ASN.1 will have problems with hrn's longer than 64 characters + if len(hrn) > 64: + hrn = hrn[:64] + + trace("Import: importing person " + hrn, self.logger) + key_ids = [] + if 'key_ids' in person and person['key_ids']: + key_ids = person["key_ids"] + # get the user's private key from the SSH keys they have uploaded + # to planetlab + keys = self.shell.GetKeys(self.plc_auth, key_ids) + key = keys[0]['key'] + pkey = convert_public_key(key) + if not pkey: + pkey = Keypair(create=True) + else: + # the user has no keys + trace(" person " + hrn + " does not have a PL public key", self.logger) + # if a key is unavailable, then we still need to put something in the + # user's GID. So make one up. + pkey = Keypair(create=True) + + # create the gid + urn = hrn_to_urn(hrn, 'user') + person_gid = AuthHierarchy.create_gid(urn, create_uuid(), pkey) + table = SfaTable() + person_record = SfaRecord(hrn=hrn, gid=person_gid, type="user", pointer=person['person_id']) + person_record['authority'] = get_authority(person_record['hrn']) + existing_records = table.find({'hrn': hrn, 'type': 'user', 'pointer': person['person_id']}) + if not existing_records: + table.insert(person_record) + else: + trace("Import: %s exists, updating " % hrn, self.logger) + existing_record = existing_records[0] + person_record['record_id'] = existing_record['record_id'] + table.update(person_record) + + def import_slice(self, parent_hrn, slice): + AuthHierarchy = self.AuthHierarchy + slicename = slice['name'].split("_",1)[-1] + slicename = cleanup_string(slicename) + + if not slicename: + error("Import_Slice: failed to parse slice name " + slice['name'], self.logger) + return + + hrn = parent_hrn + "." + slicename + trace("Import: importing slice " + hrn, self.logger) + + pkey = Keypair(create=True) + urn = hrn_to_urn(hrn, 'slice') + slice_gid = AuthHierarchy.create_gid(urn, create_uuid(), pkey) + slice_record = SfaRecord(hrn=hrn, gid=slice_gid, type="slice", pointer=slice['slice_id']) + slice_record['authority'] = get_authority(slice_record['hrn']) + table = SfaTable() + existing_records = table.find({'hrn': hrn, 'type': 'slice', 'pointer': slice['slice_id']}) + if not existing_records: + table.insert(slice_record) + else: + trace("Import: %s exists, updating " % hrn, self.logger) + existing_record = existing_records[0] + slice_record['record_id'] = existing_record['record_id'] + table.update(slice_record) + + def import_node(self, parent_hrn, node): + AuthHierarchy = self.AuthHierarchy + nodename = node['hostname'].split(".")[0] + nodename = cleanup_string(nodename) + + if not nodename: + error("Import_node: failed to parse node name " + node['hostname'], self.logger) + return + + hrn = parent_hrn + "." + nodename + trace("Import: importing node " + hrn, self.logger) + # ASN.1 will have problems with hrn's longer than 64 characters + if len(hrn) > 64: + hrn = hrn[:64] + + table = SfaTable() + node_record = table.find({'type': 'node', 'hrn': hrn}) + pkey = Keypair(create=True) + urn = hrn_to_urn(hrn, 'node') + node_gid = AuthHierarchy.create_gid(urn, create_uuid(), pkey) + node_record = SfaRecord(hrn=hrn, gid=node_gid, type="node", pointer=node['node_id']) + node_record['authority'] = get_authority(node_record['hrn']) + existing_records = table.find({'hrn': hrn, 'type': 'node', 'pointer': node['node_id']}) + if not existing_records: + table.insert(node_record) + else: + trace("Import: %s exists, updating " % hrn, self.logger) + existing_record = existing_records[0] + node_record['record_id'] = existing_record['record_id'] + table.update(node_record) + + + def import_site(self, parent_hrn, site): + AuthHierarchy = self.AuthHierarchy + shell = self.shell + plc_auth = self.plc_auth + sitename = site['login_base'] + sitename = cleanup_string(sitename) + print 'importing site %s' % sitename + hrn = parent_hrn + "." + sitename + urn = hrn_to_urn(hrn, 'authority') + # Hardcode 'internet2' into the hrn for sites hosting + # internet2 nodes. This is a special operation for some vini + # sites only + if ".vini" in parent_hrn and parent_hrn.endswith('vini'): + if sitename.startswith("i2"): + #sitename = sitename.replace("ii", "") + hrn = ".".join([parent_hrn, "internet2", sitename]) + elif sitename.startswith("nlr"): + #sitename = sitename.replace("nlr", "") + hrn = ".".join([parent_hrn, "internet2", sitename]) + + trace("Import: importing site " + hrn, self.logger) + + # create the authority + if not AuthHierarchy.auth_exists(urn): + AuthHierarchy.create_auth(urn) + + auth_info = AuthHierarchy.get_auth_info(urn) + + table = SfaTable() + auth_record = SfaRecord(hrn=hrn, gid=auth_info.get_gid_object(), type="authority", pointer=site['site_id']) + auth_record['authority'] = get_authority(auth_record['hrn']) + existing_records = table.find({'hrn': hrn, 'type': 'authority', 'pointer': site['site_id']}) + if not existing_records: + table.insert(auth_record) + else: + trace("Import: %s exists, updating " % hrn, self.logger) + existing_record = existing_records[0] + auth_record['record_id'] = existing_record['record_id'] + table.update(auth_record) + + return hrn + + + def delete_record(self, hrn, type): + # delete the record + table = SfaTable() + record_list = table.find({'type': type, 'hrn': hrn}) + for record in record_list: + trace("Import: Removing record %s %s" % (type, hrn), self.logger) + table.remove(record) diff --git a/sfa/plc/slices.py b/sfa/plc/slices.py new file mode 100644 index 00000000..2344bc87 --- /dev/null +++ b/sfa/plc/slices.py @@ -0,0 +1,443 @@ +### $Id: slices.py 18613 2010-08-09 17:02:53Z tmack $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/plc/slices.py $ + +import datetime +import time +import traceback +import sys + +from types import StringTypes +from sfa.util.namespace import * +from sfa.util.rspec import * +from sfa.util.specdict import * +from sfa.util.faults import * +from sfa.util.record import SfaRecord +from sfa.util.policy import Policy +from sfa.util.prefixTree import prefixTree +from sfa.util.debug import log + +MAXINT = 2L**31-1 + +class Slices: + + rspec_to_slice_tag = {'max_rate':'net_max_rate'} + + def __init__(self, api, ttl = .5, origin_hrn=None): + self.api = api + #filepath = path + os.sep + filename + self.policy = Policy(self.api) + self.origin_hrn = origin_hrn + + def get_slivers(self, xrn, node=None): + hrn, type = urn_to_hrn(xrn) + + slice_name = hrn_to_pl_slicename(hrn) + # XX Should we just call PLCAPI.GetSliceTicket(slice_name) instead + # of doing all of this? + #return self.api.GetSliceTicket(self.auth, slice_name) + + # from PLCAPI.GetSlivers.get_slivers() + slice_fields = ['slice_id', 'name', 'instantiation', 'expires', 'person_ids', 'slice_tag_ids'] + slices = self.api.plshell.GetSlices(self.api.plauth, slice_name, slice_fields) + # Build up list of users and slice attributes + person_ids = set() + all_slice_tag_ids = set() + for slice in slices: + person_ids.update(slice['person_ids']) + all_slice_tag_ids.update(slice['slice_tag_ids']) + person_ids = list(person_ids) + all_slice_tag_ids = list(all_slice_tag_ids) + # Get user information + all_persons_list = self.api.plshell.GetPersons(self.api.plauth, {'person_id':person_ids,'enabled':True}, ['person_id', 'enabled', 'key_ids']) + all_persons = {} + for person in all_persons_list: + all_persons[person['person_id']] = person + + # Build up list of keys + key_ids = set() + for person in all_persons.values(): + key_ids.update(person['key_ids']) + key_ids = list(key_ids) + # Get user account keys + all_keys_list = self.api.plshell.GetKeys(self.api.plauth, key_ids, ['key_id', 'key', 'key_type']) + all_keys = {} + for key in all_keys_list: + all_keys[key['key_id']] = key + # Get slice attributes + all_slice_tags_list = self.api.plshell.GetSliceTags(self.api.plauth, all_slice_tag_ids) + all_slice_tags = {} + for slice_tag in all_slice_tags_list: + all_slice_tags[slice_tag['slice_tag_id']] = slice_tag + + slivers = [] + for slice in slices: + keys = [] + for person_id in slice['person_ids']: + if person_id in all_persons: + person = all_persons[person_id] + if not person['enabled']: + continue + for key_id in person['key_ids']: + if key_id in all_keys: + key = all_keys[key_id] + keys += [{'key_type': key['key_type'], + 'key': key['key']}] + attributes = [] + # All (per-node and global) attributes for this slice + slice_tags = [] + for slice_tag_id in slice['slice_tag_ids']: + if slice_tag_id in all_slice_tags: + slice_tags.append(all_slice_tags[slice_tag_id]) + # Per-node sliver attributes take precedence over global + # slice attributes, so set them first. + # Then comes nodegroup slice attributes + # Followed by global slice attributes + sliver_attributes = [] + + if node is not None: + for sliver_attribute in filter(lambda a: a['node_id'] == node['node_id'], slice_tags): + sliver_attributes.append(sliver_attribute['tagname']) + attributes.append({'tagname': sliver_attribute['tagname'], + 'value': sliver_attribute['value']}) + + # set nodegroup slice attributes + for slice_tag in filter(lambda a: a['nodegroup_id'] in node['nodegroup_ids'], slice_tags): + # Do not set any nodegroup slice attributes for + # which there is at least one sliver attribute + # already set. + if slice_tag not in slice_tags: + attributes.append({'tagname': slice_tag['tagname'], + 'value': slice_tag['value']}) + + for slice_tag in filter(lambda a: a['node_id'] is None, slice_tags): + # Do not set any global slice attributes for + # which there is at least one sliver attribute + # already set. + if slice_tag['tagname'] not in sliver_attributes: + attributes.append({'tagname': slice_tag['tagname'], + 'value': slice_tag['value']}) + + # XXX Sanity check; though technically this should be a system invariant + # checked with an assertion + if slice['expires'] > MAXINT: slice['expires']= MAXINT + + slivers.append({ + 'hrn': hrn, + 'name': slice['name'], + 'slice_id': slice['slice_id'], + 'instantiation': slice['instantiation'], + 'expires': slice['expires'], + 'keys': keys, + 'attributes': attributes + }) + + return slivers + + def get_peer(self, xrn): + hrn, type = urn_to_hrn(xrn) + # Becaues of myplc federation, we first need to determine if this + # slice belongs to out local plc or a myplc peer. We will assume it + # is a local site, unless we find out otherwise + peer = None + + # get this slice's authority (site) + slice_authority = get_authority(hrn) + + # get this site's authority (sfa root authority or sub authority) + site_authority = get_authority(slice_authority).lower() + + # check if we are already peered with this site_authority, if so + peers = self.api.plshell.GetPeers(self.api.plauth, {}, ['peer_id', 'peername', 'shortname', 'hrn_root']) + for peer_record in peers: + names = [name.lower() for name in peer_record.values() if isinstance(name, StringTypes)] + if site_authority in names: + peer = peer_record['shortname'] + + return peer + + def get_sfa_peer(self, xrn): + hrn, type = urn_to_hrn(xrn) + + # return the authority for this hrn or None if we are the authority + sfa_peer = None + slice_authority = get_authority(hrn) + site_authority = get_authority(slice_authority) + + if site_authority != self.api.hrn: + sfa_peer = site_authority + + return sfa_peer + + def verify_site(self, registry, credential, slice_hrn, peer, sfa_peer, reg_objects=None): + authority = get_authority(slice_hrn) + authority_urn = hrn_to_urn(authority, 'authority') + + if reg_objects: + site = reg_objects['site'] + else: + site_records = registry.Resolve(authority_urn, [credential]) + site = {} + for site_record in site_records: + if site_record['type'] == 'authority': + site = site_record + if not site: + raise RecordNotFound(authority) + + remote_site_id = site.pop('site_id') + + login_base = get_leaf(authority) + sites = self.api.plshell.GetSites(self.api.plauth, login_base) + + if not sites: + site_id = self.api.plshell.AddSite(self.api.plauth, site) + if peer: + self.api.plshell.BindObjectToPeer(self.api.plauth, 'site', site_id, peer, remote_site_id) + # mark this site as an sfa peer record + if sfa_peer and not reg_objects: + peer_dict = {'type': 'authority', 'hrn': authority, 'peer_authority': sfa_peer, 'pointer': site_id} + registry.register_peer_object(credential, peer_dict) + else: + site_id = sites[0]['site_id'] + remote_site_id = sites[0]['peer_site_id'] + + old_site = sites[0] + #the site is already on the remote agg. Let us update(e.g. max_slices field) it with the latest info. + self.sync_site(old_site, site, peer) + + + return (site_id, remote_site_id) + + def verify_slice(self, registry, credential, slice_hrn, site_id, remote_site_id, peer, sfa_peer, reg_objects=None): + slice = {} + slice_record = None + authority = get_authority(slice_hrn) + + if reg_objects: + slice_record = reg_objects['slice_record'] + else: + slice_records = registry.Resolve(slice_hrn, [credential]) + + for record in slice_records: + if record['type'] in ['slice']: + slice_record = record + if not slice_record: + raise RecordNotFound(hrn) + + + slicename = hrn_to_pl_slicename(slice_hrn) + parts = slicename.split("_") + login_base = parts[0] + slices = self.api.plshell.GetSlices(self.api.plauth, [slicename]) + if not slices: + slice_fields = {} + slice_keys = ['name', 'url', 'description'] + for key in slice_keys: + if key in slice_record and slice_record[key]: + slice_fields[key] = slice_record[key] + + # add the slice + slice_id = self.api.plshell.AddSlice(self.api.plauth, slice_fields) + slice = slice_fields + slice['slice_id'] = slice_id + + # mark this slice as an sfa peer record + if sfa_peer: + peer_dict = {'type': 'slice', 'hrn': slice_hrn, 'peer_authority': sfa_peer, 'pointer': slice_id} + registry.register_peer_object(credential, peer_dict) + + #this belongs to a peer + if peer: + self.api.plshell.BindObjectToPeer(self.api.plauth, 'slice', slice_id, peer, slice_record['pointer']) + slice['node_ids'] = [] + else: + slice = slices[0] + slice_id = slice['slice_id'] + site_id = slice['site_id'] + #the slice is alredy on the remote agg. Let us update(e.g. expires field) it with the latest info. + self.sync_slice(slice, slice_record, peer) + + slice['peer_slice_id'] = slice_record['pointer'] + self.verify_persons(registry, credential, slice_record, site_id, remote_site_id, peer, sfa_peer, reg_objects) + + return slice + + def verify_persons(self, registry, credential, slice_record, site_id, remote_site_id, peer, sfa_peer, reg_objects=None): + # get the list of valid slice users from the registry and make + # sure they are added to the slice + slicename = hrn_to_pl_slicename(slice_record['hrn']) + if reg_objects: + researchers = reg_objects['users'].keys() + else: + researchers = slice_record.get('researcher', []) + for researcher in researchers: + if reg_objects: + person_dict = reg_objects['users'][researcher] + else: + person_records = registry.Resolve(researcher, [credential]) + for record in person_records: + if record['type'] in ['user'] and record['enabled']: + person_record = record + if not person_record: + return 1 + person_dict = person_record + + local_person=False + if peer: + peer_id = self.api.plshell.GetPeers(self.api.plauth, {'shortname': peer}, ['peer_id'])[0]['peer_id'] + persons = self.api.plshell.GetPersons(self.api.plauth, {'email': [person_dict['email']], 'peer_id': peer_id}, ['person_id', 'key_ids']) + if not persons: + persons = self.api.plshell.GetPersons(self.api.plauth, [person_dict['email']], ['person_id', 'key_ids']) + if persons: + local_person=True + + else: + persons = self.api.plshell.GetPersons(self.api.plauth, [person_dict['email']], ['person_id', 'key_ids']) + + if not persons: + person_id=self.api.plshell.AddPerson(self.api.plauth, person_dict) + self.api.plshell.UpdatePerson(self.api.plauth, person_id, {'enabled' : True}) + + # mark this person as an sfa peer record + if sfa_peer: + peer_dict = {'type': 'user', 'hrn': researcher, 'peer_authority': sfa_peer, 'pointer': person_id} + registry.register_peer_object(credential, peer_dict) + + if peer: + self.api.plshell.BindObjectToPeer(self.api.plauth, 'person', person_id, peer, person_dict['pointer']) + key_ids = [] + else: + person_id = persons[0]['person_id'] + key_ids = persons[0]['key_ids'] + + + # if this is a peer person, we must unbind them from the peer or PLCAPI will throw + # an error + if peer: + self.api.plshell.UnBindObjectFromPeer(self.api.plauth, 'person', person_id, peer) + self.api.plshell.UnBindObjectFromPeer(self.api.plauth, 'site', site_id, peer) + + self.api.plshell.AddPersonToSlice(self.api.plauth, person_dict['email'], slicename) + self.api.plshell.AddPersonToSite(self.api.plauth, person_dict['email'], site_id) + if peer and not local_person: + self.api.plshell.BindObjectToPeer(self.api.plauth, 'person', person_id, peer, person_dict['pointer']) + if peer: + self.api.plshell.BindObjectToPeer(self.api.plauth, 'site', site_id, peer, remote_site_id) + + self.verify_keys(registry, credential, person_dict, key_ids, person_id, peer, local_person) + + def verify_keys(self, registry, credential, person_dict, key_ids, person_id, peer, local_person): + keylist = self.api.plshell.GetKeys(self.api.plauth, key_ids, ['key']) + keys = [key['key'] for key in keylist] + + #add keys that arent already there + key_ids = person_dict['key_ids'] + for personkey in person_dict['keys']: + if personkey not in keys: + key = {'key_type': 'ssh', 'key': personkey} + if peer: + self.api.plshell.UnBindObjectFromPeer(self.api.plauth, 'person', person_id, peer) + key_id = self.api.plshell.AddPersonKey(self.api.plauth, person_dict['email'], key) + if peer and not local_person: + self.api.plshell.BindObjectToPeer(self.api.plauth, 'person', person_id, peer, person_dict['pointer']) + if peer: + try: self.api.plshell.BindObjectToPeer(self.api.plauth, 'key', key_id, peer, key_ids.pop(0)) + + except: pass + + def create_slice_aggregate(self, xrn, rspec): + hrn, type = urn_to_hrn(xrn) + # Determine if this is a peer slice + peer = self.get_peer(hrn) + sfa_peer = self.get_sfa_peer(hrn) + + spec = RSpec(rspec) + # Get the slice record from sfa + slicename = hrn_to_pl_slicename(hrn) + slice = {} + slice_record = None + registry = self.api.registries[self.api.hrn] + credential = self.api.getCredential() + + site_id, remote_site_id = self.verify_site(registry, credential, hrn, peer, sfa_peer) + slice = self.verify_slice(registry, credential, hrn, site_id, remote_site_id, peer, sfa_peer) + + # find out where this slice is currently running + nodelist = self.api.plshell.GetNodes(self.api.plauth, slice['node_ids'], ['hostname']) + hostnames = [node['hostname'] for node in nodelist] + + # get netspec details + nodespecs = spec.getDictsByTagName('NodeSpec') + + # dict in which to store slice attributes to set for the nodes + nodes = {} + for nodespec in nodespecs: + if isinstance(nodespec['name'], list): + for nodename in nodespec['name']: + nodes[nodename] = {} + for k in nodespec.keys(): + rspec_attribute_value = nodespec[k] + if (self.rspec_to_slice_tag.has_key(k)): + slice_tag_name = self.rspec_to_slice_tag[k] + nodes[nodename][slice_tag_name] = rspec_attribute_value + elif isinstance(nodespec['name'], StringTypes): + nodename = nodespec['name'] + nodes[nodename] = {} + for k in nodespec.keys(): + rspec_attribute_value = nodespec[k] + if (self.rspec_to_slice_tag.has_key(k)): + slice_tag_name = self.rspec_to_slice_tag[k] + nodes[nodename][slice_tag_name] = rspec_attribute_value + + for k in nodespec.keys(): + rspec_attribute_value = nodespec[k] + if (self.rspec_to_slice_tag.has_key(k)): + slice_tag_name = self.rspec_to_slice_tag[k] + nodes[nodename][slice_tag_name] = rspec_attribute_value + + node_names = nodes.keys() + # remove nodes not in rspec + deleted_nodes = list(set(hostnames).difference(node_names)) + # add nodes from rspec + added_nodes = list(set(node_names).difference(hostnames)) + + if peer: + self.api.plshell.UnBindObjectFromPeer(self.api.plauth, 'slice', slice['slice_id'], peer) + + self.api.plshell.AddSliceToNodes(self.api.plauth, slicename, added_nodes) + + # Add recognized slice tags + for node_name in node_names: + node = nodes[node_name] + for slice_tag in node.keys(): + value = node[slice_tag] + if (isinstance(value, list)): + value = value[0] + + self.api.plshell.AddSliceTag(self.api.plauth, slicename, slice_tag, value, node_name) + + self.api.plshell.DeleteSliceFromNodes(self.api.plauth, slicename, deleted_nodes) + if peer: + self.api.plshell.BindObjectToPeer(self.api.plauth, 'slice', slice['slice_id'], peer, slice['peer_slice_id']) + + return 1 + + def sync_site(self, old_record, new_record, peer): + if old_record['max_slices'] != new_record['max_slices'] or old_record['max_slivers'] != new_record['max_slivers']: + if peer: + self.api.plshell.UnBindObjectFromPeer(self.api.plauth, 'site', old_record['site_id'], peer) + if old_record['max_slices'] != new_record['max_slices']: + self.api.plshell.UpdateSite(self.api.plauth, old_record['site_id'], {'max_slices' : new_record['max_slices']}) + if old_record['max_slivers'] != new_record['max_slivers']: + self.api.plshell.UpdateSite(self.api.plauth, old_record['site_id'], {'max_slivers' : new_record['max_slivers']}) + if peer: + self.api.plshell.BindObjectToPeer(self.api.plauth, 'site', old_record['site_id'], peer, old_record['peer_site_id']) + return 1 + + def sync_slice(self, old_record, new_record, peer): + if old_record['expires'] != new_record['expires']: + if peer: + self.api.plshell.UnBindObjectFromPeer(self.api.plauth, 'slice', old_record['slice_id'], peer) + self.api.plshell.UpdateSlice(self.api.plauth, old_record['slice_id'], {'expires' : new_record['expires']}) + if peer: + self.api.plshell.BindObjectToPeer(self.api.plauth, 'slice', old_record['slice_id'], peer, old_record['peer_slice_id']) + return 1 diff --git a/sfa/rspecs/__init__.py b/sfa/rspecs/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/sfa/rspecs/aggregates/__init__.py b/sfa/rspecs/aggregates/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/sfa/rspecs/aggregates/max.xml b/sfa/rspecs/aggregates/max.xml new file mode 100644 index 00000000..f549ab7d --- /dev/null +++ b/sfa/rspecs/aggregates/max.xml @@ -0,0 +1,90 @@ + + + geni.maxgigapop.net + Example MAX RSpec + + 1279848020 + 1280712039 + + + +
206.196.176.55
+ + generic + 2.0GHz + 1 + 256MB + 16GB + + + Ethernet + eth1 + 100Mbps + 10.10.10.2/24 + any + urn:aggregate=geni.maxgigapop.net:rspec=my-test-max-rspec-slice1:domain=dragon.maxgigapop.net:node=planetlab2:interface=eth1.any_1 + + + Ethernet + eth1 + 100Mbps + 10.10.30.1/24 + any + urn:aggregate=geni.maxgigapop.net:rspec=my-test-max-rspec-slice1:domain=dragon.maxgigapop.net:node=planetlab5:interface=eth1.any_2 + +
+ +
206.196.176.138
+ + generic + 2.0GHz + 1 + 256MB + 16GB + + + Ethernet + eth1 + 100Mbps + 10.10.20.2/24 + any + urn:aggregate=geni.maxgigapop.net:rspec=my-test-max-rspec-slice1:domain=dragon.maxgigapop.net:node=planetlab2:interface=eth1.any_3 + + + Ethernet + eth1 + 100Mbps + 10.10.30.2/24 + any + urn:aggregate=geni.maxgigapop.net:rspec=my-test-max-rspec-slice1:domain=dragon.maxgigapop.net:node=planetlab3:interface=eth1.any_2 + +
+ +
206.196.176.133
+ + generic + 2.0GHz + 1 + 256MB + 16GB + + + Ethernet + eth1 + 100Mbps + 10.10.10.1/24 + any + urn:aggregate=geni.maxgigapop.net:rspec=my-test-max-rspec-slice1:domain=dragon.maxgigapop.net:node=planetlab3:interface=eth1.any_1 + + + Ethernet + eth1 + 100Mbps + 10.10.20.1/24 + any + urn:aggregate=geni.maxgigapop.net:rspec=my-test-max-rspec-slice1:domain=dragon.maxgigapop.net:node=planetlab5:interface=eth1.any_3 + +
+
+
diff --git a/sfa/rspecs/aggregates/openflow.xml b/sfa/rspecs/aggregates/openflow.xml new file mode 100755 index 00000000..791baaba --- /dev/null +++ b/sfa/rspecs/aggregates/openflow.xml @@ -0,0 +1,101 @@ + + + tns:version + + + tns:nodeId + 0 + + 0 + tns:remoteNodeId + 0 + + readonly + 0F00 + 0F00 + 0 + 0 + 0F00 + 0F00 + 0 + 0 + 0 + + 0.0 + 0.0 + 0.0 + + + tns:switchFeatures + tns:controllerUrl + + + + tns:nodeId + 0 + + 0 + tns:remoteNodeId + 0 + + readonly + 0F00 + 0F00 + 0 + 0 + 0F00 + 0F00 + 0 + 0 + 0 + + 0.0 + 0.0 + 0.0 + + + 0.0 + 0.0 + + + tns:remoteURL + tns:remoteType + + tns:nodeId + 0 + + 0 + tns:remoteNodeId + 0 + + readonly + 0F00 + 0F00 + 0 + 0 + 0F00 + 0F00 + 0 + 0 + 0 + + 0.0 + 0.0 + 0.0 + + + + + readonly + 0F00 + 0F00 + 0 + 0 + 0F00 + 0F00 + 0 + 0 + 0 + + + diff --git a/sfa/rspecs/aggregates/rspec_manager_max.py b/sfa/rspecs/aggregates/rspec_manager_max.py new file mode 100644 index 00000000..c6504b99 --- /dev/null +++ b/sfa/rspecs/aggregates/rspec_manager_max.py @@ -0,0 +1,331 @@ +#!/usr/bin/python + +from sfa.util.rspec import RSpec +import sys +import pdb +from sfa.util.namespace import * +from sfa.util.rspec import * +from sfa.util.specdict import * +from sfa.util.faults import * +from sfa.util.storage import * +from sfa.util.policy import Policy +from sfa.util.debug import log +from sfa.server.aggregate import Aggregates +from sfa.server.registry import Registries +from sfa.util.faults import * + +import xml.dom.minidom + +SFA_MAX_CONF_FILE = '/etc/sfa/max_allocations' +SFA_MAX_DEFAULT_RSPEC = '/etc/sfa/max_physical.xml' +SFA_MAX_CANNED_RSPEC = '/etc/sfa/max_physical_canned.xml' + +topology = {} + +class SfaOutOfResource(SfaFault): + def __init__(self, interface): + faultString = "Interface " + interface + " not available" + SfaFault.__init__(self, 100, faultString, '') + +class SfaNoPairRSpec(SfaFault): + def __init__(self, interface, interface2): + faultString = "Interface " + interface + " should be paired with " + interface2 + SfaFault.__init__(self, 100, faultString, '') + +# Returns a mapping from interfaces to the nodes they lie on and their peer interfaces +# i -> node,i_peer + +def get_interface_map(): + r = RSpec() + r.parseFile(SFA_MAX_DEFAULT_RSPEC) + rspec = r.toDict() + capacity = rspec['rspec']['capacity'] + netspec = capacity[0]['netspec'][0] + linkdefs = {} + for n in netspec['nodespec']: + ifspecs = n['ifspec'] + nodename = n['node'] + for i in ifspecs: + ifname = i['name'] + linkid = i['linkid'] + + if (linkdefs.has_key(linkid)): + linkdefs[linkid].extend([(nodename,ifname)]) + else: + linkdefs[linkid]=[(nodename,ifname)] + + # topology maps interface x interface -> link,node1,node2 + topology={} + + for k in linkdefs.keys(): + (n1,i1) = linkdefs[k][0] + (n2,i2) = linkdefs[k][1] + + topology[i1] = (n1, i2) + topology[i2] = (n2, i1) + + + return topology + + +def allocations_to_rspec(allocations): + rspec = xml.dom.minidom.parse(SFA_MAX_DEFAULT_RSPEC) + req = rspec.firstChild.appendChild(rspec.createElement("request")) + for (iname,ip) in allocations: + ifspec = req.appendChild(rspec.createElement("ifspec")) + ifspec.setAttribute("name","tns:"+iname) + ifspec.setAttribute("ip",ip) + + return rspec.toxml() + + +def if_endpoints(ifs): + nodes=[] + for l in ifs: + nodes.extend(topology[l][0]) + return nodes + +def lock_state_file(): + # Noop for demo + return True + +def unlock_state_file(): + return True + # Noop for demo + +def read_alloc_dict(): + alloc_dict={} + rows = open(SFA_MAX_CONF_FILE).read().split('\n') + for r in rows: + columns = r.split(' ') + if (len(columns)==2): + hrn = columns[0] + allocs = columns[1].split(',') + ipallocs = map(lambda alloc:alloc.split('/'), allocs) + alloc_dict[hrn]=ipallocs + return alloc_dict + +def commit_alloc_dict(d): + f = open(SFA_MAX_CONF_FILE, 'w') + for hrn in d.keys(): + columns = d[hrn] + ipcolumns = map(lambda x:"/".join(x), columns) + row = hrn+' '+','.join(ipcolumns)+'\n' + f.write(row) + f.close() + +def collapse_alloc_dict(d): + ret = [] + for k in d.keys(): + ret.extend(d[k]) + return ret + + +def alloc_links(api, hrn, links_to_add, links_to_drop): + slicename=hrn_to_pl_slicename(hrn) + for (iface,ip) in links_to_add: + node = topology[iface][0][0] + try: + api.plshell.AddSliceTag(api.plauth, slicename, "ip_addresses", ip, node) + api.plshell.AddSliceTag(api.plauth, slicename, "vsys", "getvlan", node) + except Exception: + # Probably a duplicate tag. XXX July 21 + pass + return True + +def alloc_nodes(api,hrn, requested_ifs): + requested_nodes = if_endpoints(requested_ifs) + create_slice_max_aggregate(api, hrn, requested_nodes) + +# Taken from slices.py + +def create_slice_max_aggregate(api, hrn, nodes): + # Get the slice record from SFA + global topology + topology = get_interface_map() + slice = {} + registries = Registries(api) + registry = registries[api.hrn] + credential = api.getCredential() + records = registry.resolve(credential, hrn) + for record in records: + if record.get_type() in ['slice']: + slice = record.as_dict() + if not slice: + raise RecordNotFound(hrn) + + # Make sure slice exists at plc, if it doesnt add it + slicename = hrn_to_pl_slicename(hrn) + slices = api.plshell.GetSlices(api.plauth, [slicename], ['node_ids']) + if not slices: + parts = slicename.split("_") + login_base = parts[0] + # if site doesnt exist add it + sites = api.plshell.GetSites(api.plauth, [login_base]) + if not sites: + authority = get_authority(hrn) + site_records = registry.resolve(credential, authority) + site_record = {} + if not site_records: + raise RecordNotFound(authority) + site_record = site_records[0] + site = site_record.as_dict() + + # add the site + site.pop('site_id') + site_id = api.plshell.AddSite(api.plauth, site) + else: + site = sites[0] + + slice_fields = {} + slice_keys = ['name', 'url', 'description'] + for key in slice_keys: + if key in slice and slice[key]: + slice_fields[key] = slice[key] + api.plshell.AddSlice(api.plauth, slice_fields) + slice = slice_fields + slice['node_ids'] = 0 + else: + slice = slices[0] + + # get the list of valid slice users from the registry and make + # they are added to the slice + researchers = record.get('researcher', []) + for researcher in researchers: + person_record = {} + person_records = registry.resolve(credential, researcher) + for record in person_records: + if record.get_type() in ['user']: + person_record = record + if not person_record: + pass + person_dict = person_record.as_dict() + persons = api.plshell.GetPersons(api.plauth, [person_dict['email']], + ['person_id', 'key_ids']) + + # Create the person record + if not persons: + person_id=api.plshell.AddPerson(api.plauth, person_dict) + + # The line below enables the user account on the remote aggregate + # soon after it is created. + # without this the user key is not transfered to the slice + # (as GetSlivers returns key of only enabled users), + # which prevents the user from login to the slice. + # We may do additional checks before enabling the user. + + api.plshell.UpdatePerson(api.plauth, person_id, {'enabled' : True}) + key_ids = [] + else: + key_ids = persons[0]['key_ids'] + + api.plshell.AddPersonToSlice(api.plauth, person_dict['email'], + slicename) + + # Get this users local keys + keylist = api.plshell.GetKeys(api.plauth, key_ids, ['key']) + keys = [key['key'] for key in keylist] + + # add keys that arent already there + for personkey in person_dict['keys']: + if personkey not in keys: + key = {'key_type': 'ssh', 'key': personkey} + api.plshell.AddPersonKey(api.plauth, person_dict['email'], key) + + # find out where this slice is currently running + nodelist = api.plshell.GetNodes(api.plauth, slice['node_ids'], + ['hostname']) + hostnames = [node['hostname'] for node in nodelist] + + # remove nodes not in rspec + deleted_nodes = list(set(hostnames).difference(nodes)) + # add nodes from rspec + added_nodes = list(set(nodes).difference(hostnames)) + + api.plshell.AddSliceToNodes(api.plauth, slicename, added_nodes) + api.plshell.DeleteSliceFromNodes(api.plauth, slicename, deleted_nodes) + + return 1 + + +def get_rspec(api, hrn): + # Eg. config line: + # plc.princeton.sapan vlan23,vlan45 + + allocations = read_alloc_dict() + if (hrn and allocations.has_key(hrn)): + ret_rspec = allocations_to_rspec(allocations[hrn]) + else: + ret_rspec = open(SFA_MAX_CANNED_RSPEC).read() + + return (ret_rspec) + + +def create_slice(api, hrn, rspec_xml): + global topology + topology = get_interface_map() + + # Check if everything in rspec is either allocated by hrn + # or not allocated at all. + r = RSpec() + r.parseString(rspec_xml) + rspec = r.toDict() + + lock_state_file() + + allocations = read_alloc_dict() + requested_allocations = rspec_to_allocations (rspec) + current_allocations = collapse_alloc_dict(allocations) + try: + current_hrn_allocations=allocations[hrn] + except KeyError: + current_hrn_allocations=[] + + # Check request against current allocations + requested_interfaces = map(lambda(elt):elt[0], requested_allocations) + current_interfaces = map(lambda(elt):elt[0], current_allocations) + current_hrn_interfaces = map(lambda(elt):elt[0], current_hrn_allocations) + + for a in requested_interfaces: + if (a not in current_hrn_interfaces and a in current_interfaces): + raise SfaOutOfResource(a) + if (topology[a][1] not in requested_interfaces): + raise SfaNoPairRSpec(a,topology[a][1]) + # Request OK + + # Allocations to delete + allocations_to_delete = [] + for a in current_hrn_allocations: + if (a not in requested_allocations): + allocations_to_delete.extend([a]) + + # Ok, let's do our thing + alloc_nodes(api, hrn, requested_interfaces) + alloc_links(api, hrn, requested_allocations, allocations_to_delete) + allocations[hrn] = requested_allocations + commit_alloc_dict(allocations) + + unlock_state_file() + + return True + +def rspec_to_allocations(rspec): + ifs = [] + try: + ifspecs = rspec['rspec']['request'][0]['ifspec'] + for l in ifspecs: + ifs.extend([(l['name'].replace('tns:',''),l['ip'])]) + except KeyError: + # Bad RSpec + pass + return ifs + +def main(): + t = get_interface_map() + r = RSpec() + rspec_xml = open(sys.argv[1]).read() + #get_rspec(None,'foo') + create_slice(None, "plc.princeton.sap0", rspec_xml) + +if __name__ == "__main__": + main() diff --git a/sfa/rspecs/aggregates/rspec_manager_openflow.py b/sfa/rspecs/aggregates/rspec_manager_openflow.py new file mode 100755 index 00000000..a745b6ea --- /dev/null +++ b/sfa/rspecs/aggregates/rspec_manager_openflow.py @@ -0,0 +1,166 @@ +from sfa.util.faults import * +from sfa.util.namespace import * +from sfa.util.rspec import RSpec +from sfa.server.registry import Registries +from sfa.util.config import Config +from sfa.plc.nodes import * +import sys + +#The following is not essential +#from soaplib.wsgi_soap import SimpleWSGISoapApp +#from soaplib.serializers.primitive import * +#from soaplib.serializers.clazz import * + +import socket +import struct + +# Message IDs for all the SFA light calls +# This will be used by the aggrMgr controller +SFA_GET_RESOURCES = 101 +SFA_CREATE_SLICE = 102 +SFA_START_SLICE = 103 +SFA_STOP_SLICE = 104 +SFA_DELETE_SLICE = 105 +SFA_GET_SLICES = 106 +SFA_RESET_SLICES = 107 + +DEBUG = 1 + +def print_buffer(buf): + for i in range(0,len(buf)): + print('%x' % buf[i]) + +def extract(sock): + # Shud we first obtain the message length? + # msg_len = socket.ntohs(sock.recv(2)) + msg = "" + + while (1): + try: + chunk = sock.recv(1) + except socket.error, message: + if 'timed out' in message: + break + else: + sys.exit("Socket error: " + message) + + if len(chunk) == 0: + break + msg += chunk + + print 'Done extracting %d bytes of response from aggrMgr' % len(msg) + return msg + +def connect(server, port): + '''Connect to the Aggregate Manager module''' + sock = socket.socket ( socket.AF_INET, socket.SOCK_STREAM ) + sock.connect ( ( server, port) ) + sock.settimeout(1) + if DEBUG: print 'Connected!' + return sock + +def connect_aggrMgr(): + (aggr_mgr_ip, aggr_mgr_port) = Config().get_openflow_aggrMgr_info() + if DEBUG: print """Connecting to port %d of %s""" % (aggr_mgr_port, aggr_mgr_ip) + return connect(aggr_mgr_ip, aggr_mgr_port) + +def generate_slide_id(cred, hrn): + if cred == None: + cred = "" + if hrn == None: + hrn = "" + #return cred + '_' + hrn + return str(hrn) + +def msg_aggrMgr(cred, hrn, msg_id): + slice_id = generate_slide_id(cred, hrn) + + msg = struct.pack('> B%ds' % len(slice_id), msg_id, slice_id) + buf = struct.pack('> H', len(msg)+2) + msg + + try: + aggrMgr_sock = connect_aggrMgr() + aggrMgr_sock.send(buf) + aggrMgr_sock.close() + return 1 + except socket.error, message: + print "Socket error" + except IOerror, message: + print "IO error" + return 0 + +def start_slice(cred, hrn): + if DEBUG: print "Received start_slice call" + return msg_aggrMgr(SFA_START_SLICE) + +def stop_slice(cred, hrn): + if DEBUG: print "Received stop_slice call" + return msg_aggrMgr(SFA_STOP_SLICE) + +def delete_slice(cred, hrn): + if DEBUG: print "Received delete_slice call" + return msg_aggrMgr(SFA_DELETE_SLICE) + +def reset_slices(cred, hrn): + if DEBUG: print "Received reset_slices call" + return msg_aggrMgr(SFA_RESET_SLICES) + +def create_slice(cred, hrn, rspec): + if DEBUG: print "Received create_slice call" + slice_id = generate_slide_id(cred, hrn) + + msg = struct.pack('> B%ds%ds' % (len(slice_id)+1, len(rspec)), SFA_CREATE_SLICE, slice_id, rspec) + buf = struct.pack('> H', len(msg)+2) + msg + + try: + aggrMgr_sock = connect_aggrMgr() + aggrMgr_sock.send(buf) + if DEBUG: print "Sent %d bytes and closing connection" % len(buf) + aggrMgr_sock.close() + + if DEBUG: print "----------------" + return 1 + except socket.error, message: + print "Socket error" + except IOerror, message: + print "IO error" + return 0 + +def get_rspec(cred, hrn=None): + if DEBUG: print "Received get_rspec call" + slice_id = generate_slide_id(cred, hrn) + + msg = struct.pack('> B%ds' % len(slice_id), SFA_GET_RESOURCES, slice_id) + buf = struct.pack('> H', len(msg)+2) + msg + + try: + aggrMgr_sock = connect_aggrMgr() + aggrMgr_sock.send(buf) + resource_list = extract(aggrMgr_sock); + aggrMgr_sock.close() + + if DEBUG: print "----------------" + return resource_list + except socket.error, message: + print "Socket error" + except IOerror, message: + print "IO error" + return None + +""" +Returns the request context required by sfatables. At some point, this mechanism should be changed +to refer to "contexts", which is the information that sfatables is requesting. But for now, we just +return the basic information needed in a dict. +""" +def fetch_context(slice_hrn, user_hrn, contexts): + base_context = {'sfa':{'user':{'hrn':user_hrn}}} + return base_context + +def main(): + r = RSpec() + r.parseFile(sys.argv[1]) + rspec = r.toDict() + create_slice(None,'plc',rspec) + +if __name__ == "__main__": + main() diff --git a/sfa/rspecs/aggregates/rspec_manager_pl.py b/sfa/rspecs/aggregates/rspec_manager_pl.py new file mode 100644 index 00000000..ffc0a2b4 --- /dev/null +++ b/sfa/rspecs/aggregates/rspec_manager_pl.py @@ -0,0 +1,8 @@ +""" +Returns the request context required by sfatables. At some point, this mechanism should be changed +to refer to "contexts", which is the information that sfatables is requesting. But for now, we just +return the basic information needed in a dict. +""" +def fetch_context(slice_hrn, user_hrn, contexts): + base_context = {'sfa':{'user':{'hrn':user_hrn}}} + return base_context diff --git a/sfa/server/__init__.py b/sfa/server/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/sfa/server/aggregate.py b/sfa/server/aggregate.py new file mode 100644 index 00000000..07a8d204 --- /dev/null +++ b/sfa/server/aggregate.py @@ -0,0 +1,47 @@ +### $Id: aggregate.py 18632 2010-08-16 21:44:19Z tmack $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/server/aggregate.py $ + + +from sfa.util.server import SfaServer +from sfa.util.faults import * +from sfa.util.namespace import hrn_to_urn +from sfa.server.interface import Interfaces +import sfa.util.xmlrpcprotocol as xmlrpcprotocol +import sfa.util.soapprotocol as soapprotocol + + +class Aggregate(SfaServer): + + ## + # Create a new aggregate object. + # + # @param ip the ip address to listen on + # @param port the port to listen on + # @param key_file private key filename of registry + # @param cert_file certificate filename containing public key (could be a GID file) + def __init__(self, ip, port, key_file, cert_file): + SfaServer.__init__(self, ip, port, key_file, cert_file) + self.server.interface = 'aggregate' + +## +# Aggregates is a dictionary of aggregate connections keyed on the aggregate hrn + +class Aggregates(Interfaces): + + default_dict = {'aggregates': {'aggregate': [Interfaces.default_fields]}} + + def __init__(self, api, conf_file = "/etc/sfa/aggregates.xml"): + Interfaces.__init__(self, api, conf_file) + # set up a connection to the local registry + address = self.api.config.SFA_AGGREGATE_HOST + port = self.api.config.SFA_AGGREGATE_PORT + url = 'http://%(address)s:%(port)s' % locals() + local_aggregate = {'hrn': self.api.hrn, + 'urn': hrn_to_urn(self.api.hrn, 'authority'), + 'addr': address, + 'port': port, + 'url': url} + self.interfaces[self.api.hrn] = local_aggregate + + # get connections + self.update(self.get_connections()) diff --git a/sfa/server/component.py b/sfa/server/component.py new file mode 100644 index 00000000..c83ac4af --- /dev/null +++ b/sfa/server/component.py @@ -0,0 +1,35 @@ +# +# Component is a SfaServer that implements the Component interface +# +### $Id: +### $URL: +# + +import tempfile +import os +import time +import sys + +from sfa.util.componentserver import ComponentServer + +# GeniLight client support is optional +try: + from egeni.geniLight_client import * +except ImportError: + GeniClientLight = None + +## +# Component is a SfaServer that serves component operations. + +class Component(ComponentServer): + ## + # Create a new registry object. + # + # @param ip the ip address to listen on + # @param port the port to listen on + # @param key_file private key filename of registry + # @param cert_file certificate filename containing public key (could be a GID file) + + def __init__(self, ip, port, key_file, cert_file): + ComponentServer.__init__(self, ip, port, key_file, cert_file) + self.server.interface = 'component' diff --git a/sfa/server/interface.py b/sfa/server/interface.py new file mode 100644 index 00000000..dbc54891 --- /dev/null +++ b/sfa/server/interface.py @@ -0,0 +1,207 @@ +# +### $Id: interface.py 17583 2010-04-06 15:01:08Z tmack $ +### $URL: https://svn.planet-lab.org/svn/sfa/trunk/sfa/server/interface.py $ +# + +from sfa.util.faults import * +from sfa.util.storage import * +from sfa.util.namespace import * +from sfa.trust.gid import GID +from sfa.util.record import SfaRecord +import traceback +import sfa.util.xmlrpcprotocol as xmlrpcprotocol +import sfa.util.soapprotocol as soapprotocol + + +# GeniLight client support is optional +try: + from egeni.geniLight_client import * +except ImportError: + GeniClientLight = None + + +## +# In is a dictionary of registry connections keyed on the registry +# hrn + +class Interfaces(dict): + """ + Interfaces is a base class for managing information on the + peers we are federated with. It is responsible for the following: + + 1) Makes sure a record exist in the local registry for the each + fedeated peer + 2) Attepts to fetch and install trusted gids + 3) Provides connections (xmlrpc or soap) to federated peers + """ + + # fields that must be specified in the config file + default_fields = { + 'hrn': '', + 'addr': '', + 'port': '', + } + + # defined by the class + default_dict = {} + + types = ['authority'] + + def __init__(self, api, conf_file, type='authority'): + if type not in self.types: + raise SfaInfaildArgument('Invalid type %s: must be in %s' % (type, self.types)) + dict.__init__(self, {}) + self.api = api + self.type = type + # load config file + self.interface_info = XmlStorage(conf_file, self.default_dict) + self.interface_info.load() + interfaces = self.interface_info.values()[0].values()[0] + if not isinstance(interfaces, list): + interfaces = [self.interfaces] + # set the url and urn + for interface in interfaces: + hrn, address, port = interface['hrn'], interface['addr'], interface['port'] + url = 'http://%(address)s:%(port)s' % locals() + interface['url'] = url + interface['urn'] = hrn_to_urn(hrn, 'authority') + + self.interfaces = {} + required_fields = self.default_fields.keys() + for interface in interfaces: + valid = True + # skp any interface definition that has a null hrn, + # address or port + for field in required_fields: + if field not in interface or not interface[field]: + valid = False + break + if valid: + self.interfaces[interface['hrn']] = interface + + + def sync_interfaces(self): + """ + Install missing trusted gids and db records for our federated + interfaces + """ + # Attempt to get any missing peer gids + # There should be a gid file in /etc/sfa/trusted_roots for every + # peer registry found in in the registries.xml config file. If there + # are any missing gids, request a new one from the peer registry. + gids_current = self.api.auth.trusted_cert_list + hrns_current = [gid.get_hrn() for gid in gids_current] + hrns_expected = self.interfaces.keys() + new_hrns = set(hrns_expected).difference(hrns_current) + gids = self.get_peer_gids(new_hrns) + gids_current + # make sure there is a record for every gid + self.update_db_records(self.type, gids) + + def get_peer_gids(self, new_hrns): + """ + Install trusted gids from the specified interfaces. + """ + peer_gids = [] + if not new_hrns: + return peer_gids + trusted_certs_dir = self.api.config.get_trustedroots_dir() + for new_hrn in new_hrns: + if not new_hrn: + continue + # the gid for this interface should already be installed + if new_hrn == self.api.config.SFA_INTERFACE_HRN: + continue + try: + # get gid from the registry + interface_info = self.interfaces[new_hrn] + interface = self[new_hrn] + trusted_gids = interface.get_trusted_certs() + if trusted_gids: + # the gid we want shoudl be the first one in the list, + # but lets make sure + for trusted_gid in trusted_gids: + # default message + message = "interface: %s\t" % (self.api.interface) + message += "unable to install trusted gid for %s" % \ + (new_hrn) + gid = GID(string=trusted_gids[0]) + peer_gids.append(gid) + if gid.get_hrn() == new_hrn: + gid_filename = os.path.join(trusted_certs_dir, '%s.gid' % new_hrn) + gid.save_to_file(gid_filename, save_parents=True) + message = "interface: %s\tinstalled trusted gid for %s" % \ + (self.api.interface, new_hrn) + # log the message + self.api.logger.info(message) + except: + message = "interface: %s\tunable to install trusted gid for %s" % \ + (self.api.interface, new_hrn) + self.api.logger.info(message) + traceback.print_exc() + + # reload the trusted certs list + self.api.auth.load_trusted_certs() + return peer_gids + + def update_db_records(self, type, gids): + """ + Make sure there is a record in the local db for allowed registries + defined in the config file (registries.xml). Removes old records from + the db. + """ + # import SfaTable here so this module can be loaded by CompoenetAPI + from sfa.util.table import SfaTable + if not gids: + return + + # hrns that should have a record + hrns_expected = [gid.get_hrn() for gid in gids] + + # get hrns that actually exist in the db + table = SfaTable() + records = table.find({'type': type, 'pointer': -1}) + hrns_found = [record['hrn'] for record in records] + + # remove old records + for record in records: + if record['hrn'] not in hrns_expected and \ + record['hrn'] != self.api.config.SFA_INTERFACE_HRN: + table.remove(record) + + # add new records + for gid in gids: + hrn = gid.get_hrn() + if hrn not in hrns_found: + record = { + 'hrn': hrn, + 'type': type, + 'pointer': -1, + 'authority': get_authority(hrn), + 'gid': gid.save_to_string(save_parents=True), + } + record = SfaRecord(dict=record) + table.insert(record) + + def get_connections(self): + """ + read connection details for the trusted peer registries from file return + a dictionary of connections keyed on interface hrn. + """ + connections = {} + required_fields = self.default_fields.keys() + for interface in self.interfaces.values(): + # make sure the required fields are present and not null + + url = interface['url'] + # check which client we should use + # sfa.util.xmlrpcprotocol is default + client_type = 'xmlrpcprotocol' + if interface.has_key('client') and \ + interface['client'] in ['geniclientlight'] and \ + GeniClientLight: + client_type = 'geniclientlight' + connections[hrn] = GeniClientLight(url, self.api.key_file, self.api.cert_file) + else: + connections[interface['hrn']] = xmlrpcprotocol.get_server(url, self.api.key_file, self.api.cert_file) + + return connections diff --git a/sfa/server/modpython/SfaAggregateModPython.py b/sfa/server/modpython/SfaAggregateModPython.py new file mode 100755 index 00000000..e1ab86dc --- /dev/null +++ b/sfa/server/modpython/SfaAggregateModPython.py @@ -0,0 +1,70 @@ +# +# Apache mod_python interface +# +# Aaron Klingaman +# Mark Huang +# +# Copyright (C) 2004-2006 The Trustees of Princeton University +# + +import sys +import traceback +import xmlrpclib +from mod_python import apache + +from sfa.plc.api import SfaAPI +from sfa.util.debug import log + +api = SfaAPI(interface='aggregate') + +class unbuffered: + """ + Write to /var/log/httpd/error_log. See + + http://www.modpython.org/FAQ/faqw.py?req=edit&file=faq02.003.htp + """ + + def write(self, data): + sys.stderr.write(data) + sys.stderr.flush() + +#log = unbuffered() + +def handler(req): + try: + if req.method != "POST": + req.content_type = "text/html" + req.send_http_header() + req.write(""" + +SFA Aggregate API XML-RPC/SOAP Interface + +

SFA Aggregate API XML-RPC/SOAP Interface

+

Please use XML-RPC or SOAP to access the SFA API.

+ +""") + return apache.OK + + # Read request + request = req.read(int(req.headers_in['content-length'])) + + # mod_python < 3.2: The IP address portion of remote_addr is + # incorrect (always 0.0.0.0) when IPv6 is enabled. + # http://issues.apache.org/jira/browse/MODPYTHON-64?page=all + (remote_ip, remote_port) = req.connection.remote_addr + remote_addr = (req.connection.remote_ip, remote_port) + + # Handle request + response = api.handle(remote_addr, request) + + # Write response + req.content_type = "text/xml; charset=" + api.encoding + req.send_http_header() + req.write(response) + + return apache.OK + + except Exception, err: + # Log error in /var/log/httpd/(ssl_)?error_log + print >> log, err, traceback.format_exc() + return apache.HTTP_INTERNAL_SERVER_ERROR diff --git a/sfa/server/modpython/SfaRegistryModPython.py b/sfa/server/modpython/SfaRegistryModPython.py new file mode 100755 index 00000000..a9044ebb --- /dev/null +++ b/sfa/server/modpython/SfaRegistryModPython.py @@ -0,0 +1,69 @@ +# +# Apache mod_python interface +# +# Aaron Klingaman +# Mark Huang +# +# Copyright (C) 2004-2006 The Trustees of Princeton University +# + +import sys +import traceback +import xmlrpclib +from mod_python import apache +from sfa.util.debug import log +from sfa.plc.api import SfaAPI + +api = SfaAPI(interface='registry') + +class unbuffered: + """ + Write to /var/log/httpd/error_log. See + + http://www.modpython.org/FAQ/faqw.py?req=edit&file=faq02.003.htp + """ + + def write(self, data): + sys.stderr.write(data) + sys.stderr.flush() + +#log = unbuffered() + +def handler(req): + try: + if req.method != "POST": + req.content_type = "text/html" + req.send_http_header() + req.write(""" + +SFA Registry API XML-RPC/SOAP Interface + +

SFA Registry API XML-RPC/SOAP Interface

+

Please use XML-RPC or SOAP to access the SFA API.

+ +""") + return apache.OK + + # Read request + request = req.read(int(req.headers_in['content-length'])) + + # mod_python < 3.2: The IP address portion of remote_addr is + # incorrect (always 0.0.0.0) when IPv6 is enabled. + # http://issues.apache.org/jira/browse/MODPYTHON-64?page=all + (remote_ip, remote_port) = req.connection.remote_addr + remote_addr = (req.connection.remote_ip, remote_port) + + # Handle request + response = api.handle(remote_addr, request) + + # Write response + req.content_type = "text/xml; charset=" + api.encoding + req.send_http_header() + req.write(response) + + return apache.OK + + except Exception, err: + # Log error in /var/log/httpd/(ssl_)?error_log + print >> log, err, traceback.format_exc() + return apache.HTTP_INTERNAL_SERVER_ERROR diff --git a/sfa/server/modpython/SfaSliceMgrModPython.py b/sfa/server/modpython/SfaSliceMgrModPython.py new file mode 100755 index 00000000..7ad8e0d4 --- /dev/null +++ b/sfa/server/modpython/SfaSliceMgrModPython.py @@ -0,0 +1,70 @@ +# +# Apache mod_python interface +# +# Aaron Klingaman +# Mark Huang +# +# Copyright (C) 2004-2006 The Trustees of Princeton University +# + +import sys +import traceback +import xmlrpclib +from mod_python import apache + +from sfa.plc.api import SfaAPI +from sfa.util.debug import log + +api = SfaAPI(interface='slicemgr') + +class unbuffered: + """ + Write to /var/log/httpd/error_log. See + + http://www.modpython.org/FAQ/faqw.py?req=edit&file=faq02.003.htp + """ + + def write(self, data): + sys.stderr.write(data) + sys.stderr.flush() + +#log = unbuffered() + +def handler(req): + try: + if req.method != "POST": + req.content_type = "text/html" + req.send_http_header() + req.write(""" + +SFA SliceMgr API XML-RPC/SOAP Interface + +

SFA SliceMgr API XML-RPC/SOAP Interface

+

Please use XML-RPC or SOAP to access the SFA API.

+ +""") + return apache.OK + + # Read request + request = req.read(int(req.headers_in['content-length'])) + + # mod_python < 3.2: The IP address portion of remote_addr is + # incorrect (always 0.0.0.0) when IPv6 is enabled. + # http://issues.apache.org/jira/browse/MODPYTHON-64?page=all + (remote_ip, remote_port) = req.connection.remote_addr + remote_addr = (req.connection.remote_ip, remote_port) + + # Handle request + response = api.handle(remote_addr, request) + + # Write response + req.content_type = "text/xml; charset=" + api.encoding + req.send_http_header() + req.write(response) + + return apache.OK + + except Exception, err: + # Log error in /var/log/httpd/(ssl_)?error_log + print >> log, err, traceback.format_exc() + return apache.HTTP_INTERNAL_SERVER_ERROR diff --git a/sfa/server/modpython/sfa.aggregate.httpd.conf b/sfa/server/modpython/sfa.aggregate.httpd.conf new file mode 100644 index 00000000..2e6f4f44 --- /dev/null +++ b/sfa/server/modpython/sfa.aggregate.httpd.conf @@ -0,0 +1,24 @@ +Listen 12346 + + + ErrorLog logs/sfa_ssl_error_log + TransferLog logs/sfa_ssl_access_log + CustomLog logs/ssl_request_log \ + "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b + LogLevel warn + + SSLEngine on + SSLProtocol all -SSLv2 + + SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW + SSLCertificateFile /etc/sfa/authorities/server.cert + SSLCertificateKeyFile /etc/sfa/authorities/server.key + SetEnvIf User-Agent ".*MSIE.*" \ + nokeepalive ssl-unclean-shutdown \ + downgrade-1.0 force-response-1.0 + + SetHandler mod_python + PythonPath "sys.path + ['/usr/lib/python2.5/site-packages/sfa/', '/usr/lib/python2.5/site-packages/sfa/server/']" + PythonHandler SfaAggregateModPython + + diff --git a/sfa/server/modpython/sfa.registry.httpd.conf b/sfa/server/modpython/sfa.registry.httpd.conf new file mode 100644 index 00000000..714fe553 --- /dev/null +++ b/sfa/server/modpython/sfa.registry.httpd.conf @@ -0,0 +1,24 @@ +Listen 12345 + + + ErrorLog logs/sfa_ssl_error_log + TransferLog logs/sfa_ssl_access_log + CustomLog logs/ssl_request_log \ + "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b + LogLevel warn + + SSLEngine on + SSLProtocol all -SSLv2 + + SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW + SSLCertificateFile /etc/sfa/authorities/server.cert + SSLCertificateKeyFile /etc/sfa/authorities/server.key + SetEnvIf User-Agent ".*MSIE.*" \ + nokeepalive ssl-unclean-shutdown \ + downgrade-1.0 force-response-1.0 + + SetHandler mod_python + PythonPath "sys.path + ['/usr/lib/python2.5/site-packages/sfa/', '/usr/lib/python2.5/site-packages/sfa/server/']" + PythonHandler SfaRegistryModPython + + diff --git a/sfa/server/modpython/sfa.slicemgr.httpd.conf b/sfa/server/modpython/sfa.slicemgr.httpd.conf new file mode 100644 index 00000000..6e3a8e87 --- /dev/null +++ b/sfa/server/modpython/sfa.slicemgr.httpd.conf @@ -0,0 +1,24 @@ +Listen 12347 + + + ErrorLog logs/sfa_ssl_error_log + TransferLog logs/sfa_ssl_access_log + CustomLog logs/ssl_request_log \ + "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b + LogLevel warn + + SSLEngine on + SSLProtocol all -SSLv2 + + SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW + SSLCertificateFile /etc/sfa/authorities/server.cert + SSLCertificateKeyFile /etc/sfa/authorities/server.key + SetEnvIf User-Agent ".*MSIE.*" \ + nokeepalive ssl-unclean-shutdown \ + downgrade-1.0 force-response-1.0 + + SetHandler mod_python + PythonPath "sys.path + ['/usr/lib/python2.5/site-packages/sfa/', '/usr/lib/python2.5/site-packages/sfa/server/']" + PythonHandler SfaSliceMgrModPython + + diff --git a/sfa/server/modpythonapi/ApiExceptionCodes.py b/sfa/server/modpythonapi/ApiExceptionCodes.py new file mode 100644 index 00000000..cd811d23 --- /dev/null +++ b/sfa/server/modpythonapi/ApiExceptionCodes.py @@ -0,0 +1,2 @@ +FAULT_UNHANDLEDSERVEREXCEPTION = 901 +FAULT_BADREQUESTHASH = 902 diff --git a/sfa/server/modpythonapi/ApiExceptions.py b/sfa/server/modpythonapi/ApiExceptions.py new file mode 100644 index 00000000..834afd2c --- /dev/null +++ b/sfa/server/modpythonapi/ApiExceptions.py @@ -0,0 +1,15 @@ +import traceback +import xmlrpclib + +FAULTCODE = 900 + +class UnhandledServerException(xmlrpclib.Fault): + def __init__(self, type, value, tb): + exc_str = ''.join(traceback.format_exception(type, value, tb)) + faultString = exc_str # "Unhandled exception: " + str(type) + "\n" + exc_str + xmlrpclib.Fault.__init__(self, FAULTCODE + 1, faultString) + +class BadRequestHash(xmlrpclib.Fault): + def __init__(self, hash = None): + faultString = "bad request hash: " + str(hash) + xmlrpclib.Fault.__init__(self, FAULTCODE + 2, faultString) diff --git a/sfa/server/modpythonapi/AuthenticatedApi.py b/sfa/server/modpythonapi/AuthenticatedApi.py new file mode 100755 index 00000000..e86781f3 --- /dev/null +++ b/sfa/server/modpythonapi/AuthenticatedApi.py @@ -0,0 +1,66 @@ +import xmlrpclib + +from BaseApi import BaseApi + +from sfa.trust.credential import Credential +from sfa.trust.gid import GID +from sfa.trust.trustedroot import TrustedRootList + +from ApiExceptionCodes import * + +class BadRequestHash(xmlrpclib.Fault): + def __init__(self, hash = None): + faultString = "bad request hash: " + str(hash) + xmlrpclib.Fault.__init__(self, FAULT_BADREQUESTHASH, faultString) + +class AuthenticatedApi(BaseApi): + def __init__(self, encoding = "utf-8", trustedRootsDir=None): + BaseApi.__init__(self, encoding) + if trustedRootsDir: + self.trusted_cert_list = TrustedRootList(trustedRootsDir).get_list() + self.trusted_cert_file_list = TrustedRootList(trustedRootsDir).get_file_list() + else: + self.trusted_cert_list = None + + def register_functions(self): + BaseApi.register_functions(self) + self.register_function(self.gidNoop) + + def verifyGidRequestHash(self, gid, hash, arglist): + key = gid.get_pubkey() + if not key.verify_string(str(arglist), hash): + raise BadRequestHash(hash) + + def verifyCredRequestHash(self, cred, hash, arglist): + gid = cred.get_gid_caller() + self.verifyGidRequestHash(gid, hash, arglist) + + def validateGid(self, gid): + if self.trusted_cert_list: + gid.verify_chain(self.trusted_cert_list) + + def validateCred(self, cred): + if self.trusted_cert_list: + cred.verify(self.trusted_cert_file_list) + + def authenticateGid(self, gidStr, argList, requestHash): + gid = GID(string = gidStr) + self.validateGid(gid) + self.verifyGidRequestHash(gid, requestHash, argList) + return gid + + def authenticateCred(self, credStr, argList, requestHash): + cred = Credential(string = credStr) + self.validateCred(cred) + self.verifyCredRequestHash(cred, requestHash, argList) + return cred + + def gidNoop(self, gidStr, value, requestHash): + self.authenticateGid(gidStr, [gidStr, value], requestHash) + return value + + def credNoop(self, credStr, value, requestHash): + self.authenticateCred(credStr, [credStr, value], requestHash) + return value + + diff --git a/sfa/server/modpythonapi/AuthenticatedClient.py b/sfa/server/modpythonapi/AuthenticatedClient.py new file mode 100755 index 00000000..6b705fc4 --- /dev/null +++ b/sfa/server/modpythonapi/AuthenticatedClient.py @@ -0,0 +1,24 @@ +from sfa.trust.certificate import Keypair +from sfa.trust.gid import GID + +from BaseClient import BaseClient + +class AuthenticatedClient(BaseClient): + def __init__(self, url, private_key_file, gid_file=None, cred_file=None): + BaseClient.__init__(self, url) + self.private_key_file = private_key_file + self.gid_file = gid_file + self.cred_file = cred_file + self.private_key = Keypair(filename = self.private_key_file) + if gid_file: + self.gid = GID(filename = self.gid_file) + if cred_file: + self.cred = Credential(filename = self.cred_file) + + def computeRequestHash(self, argList): + return self.private_key.sign_string(str(argList)) + + def gidNoop(self, value): + gidStr = self.gid.save_to_string(True) + reqHash = self.computeRequestHash([gidStr, value]) + return self.server.gidNoop(gidStr, value, reqHash) diff --git a/sfa/server/modpythonapi/BaseApi.py b/sfa/server/modpythonapi/BaseApi.py new file mode 100755 index 00000000..95538ad3 --- /dev/null +++ b/sfa/server/modpythonapi/BaseApi.py @@ -0,0 +1,203 @@ +# +# PLCAPI XML-RPC and SOAP interfaces +# +# Aaron Klingaman +# Mark Huang +# +# Copyright (C) 2004-2006 The Trustees of Princeton University +# $Id: API.py 14587 2009-07-19 13:18:50Z thierry $ +# $URL: https://svn.planet-lab.org/svn/PLCAPI/trunk/PLC/API.py $ +# + +import sys +import traceback +import string + +import xmlrpclib +import logging +import logging.handlers + +from ApiExceptionCodes import * + +# Wrapper around xmlrpc fault to include a traceback of the server to the +# client. This is done to aid in debugging from a client perspective. + +class FaultWithTraceback(xmlrpclib.Fault): + def __init__(self, code, faultString, exc_info): + type, value, tb = exc_info + exc_str = ''.join(traceback.format_exception(type, value, tb)) + faultString = faultString + "\nFAULT_TRACEBACK:" + exc_str + xmlrpclib.Fault.__init__(self, code, faultString) + +# Exception to report to the caller when some non-XMLRPC fault occurs on the +# server. For example a TypeError. + +class UnhandledServerException(FaultWithTraceback): + def __init__(self, exc_info): + type, value, tb = exc_info + faultString = "Unhandled exception: " + str(type) + FaultWithTraceback.__init__(self, FAULT_UNHANDLEDSERVEREXCEPTION, faultString, exc_info) + +# See "2.2 Characters" in the XML specification: +# +# #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] +# avoiding +# [#x7F-#x84], [#x86-#x9F], [#xFDD0-#xFDDF] + +invalid_xml_ascii = map(chr, range(0x0, 0x8) + [0xB, 0xC] + range(0xE, 0x1F)) +xml_escape_table = string.maketrans("".join(invalid_xml_ascii), "?" * len(invalid_xml_ascii)) + +def xmlrpclib_escape(s, replace = string.replace): + """ + xmlrpclib does not handle invalid 7-bit control characters. This + function augments xmlrpclib.escape, which by default only replaces + '&', '<', and '>' with entities. + """ + + # This is the standard xmlrpclib.escape function + s = replace(s, "&", "&") + s = replace(s, "<", "<") + s = replace(s, ">", ">",) + + # Replace invalid 7-bit control characters with '?' + return s.translate(xml_escape_table) + +def xmlrpclib_dump(self, value, write): + """ + xmlrpclib cannot marshal instances of subclasses of built-in + types. This function overrides xmlrpclib.Marshaller.__dump so that + any value that is an instance of one of its acceptable types is + marshalled as that type. + + xmlrpclib also cannot handle invalid 7-bit control characters. See + above. + """ + + # Use our escape function + args = [self, value, write] + if isinstance(value, (str, unicode)): + args.append(xmlrpclib_escape) + + try: + # Try for an exact match first + f = self.dispatch[type(value)] + except KeyError: + # Try for an isinstance() match + for Type, f in self.dispatch.iteritems(): + if isinstance(value, Type): + f(*args) + return + raise TypeError, "cannot marshal %s objects" % type(value) + else: + f(*args) + +# You can't hide from me! +xmlrpclib.Marshaller._Marshaller__dump = xmlrpclib_dump + +# SOAP support is optional +try: + import SOAPpy + from SOAPpy.Parser import parseSOAPRPC + from SOAPpy.Types import faultType + from SOAPpy.NS import NS + from SOAPpy.SOAPBuilder import buildSOAP +except ImportError: + SOAPpy = None + +def import_deep(name): + mod = __import__(name) + components = name.split('.') + for comp in components[1:]: + mod = getattr(mod, comp) + return mod + +class BaseApi: + def __init__(self, encoding = "utf-8"): + self.encoding = encoding + self.init_logger() + self.funcs = {} + self.register_functions() + + def init_logger(self): + self.logger = logging.getLogger("ApiLogger") + self.logger.setLevel(logging.INFO) + self.logger.addHandler(logging.handlers.RotatingFileHandler(self.get_log_name(), maxBytes=100000, backupCount=5)) + + def get_log_name(self): + return "/tmp/apilogfile.txt" + + def register_functions(self): + self.register_function(self.noop) + + def register_function(self, function, name = None): + if name is None: + name = function.__name__ + self.funcs[name] = function + + def call(self, source, method, *args): + """ + Call the named method from the specified source with the + specified arguments. + """ + + if not method in self.funcs: + raise "Unknown method: " + method + + return self.funcs[method](*args) + + def handle(self, source, data): + """ + Handle an XML-RPC or SOAP request from the specified source. + """ + + # Parse request into method name and arguments + try: + interface = xmlrpclib + (args, method) = xmlrpclib.loads(data) + methodresponse = True + except Exception, e: + if SOAPpy is not None: + interface = SOAPpy + (r, header, body, attrs) = parseSOAPRPC(data, header = 1, body = 1, attrs = 1) + method = r._name + args = r._aslist() + # XXX Support named arguments + else: + raise e + + self.logger.debug("OP:" + str(method) + " from " + str(source)) + + try: + result = self.call(source, method, *args) + except xmlrpclib.Fault, fault: + self.logger.warning("FAULT: " + str(fault.faultCode) + " " + str(fault.faultString)) + self.logger.info(traceback.format_exc()) + # Handle expected faults + if interface == xmlrpclib: + result = FaultWithTraceback(fault.faultCode, fault.faultString, sys.exc_info()) + methodresponse = None + elif interface == SOAPpy: + result = faultParameter(NS.ENV_T + ":Server", "Method Failed", method) + result._setDetail("Fault %d: %s" % (fault.faultCode, fault.faultString)) + self.logger.debug + except: + self.logger.warning("EXCEPTION: " + str(sys.exc_info()[0])) + self.logger.info(traceback.format_exc()) + result = UnhandledServerException(sys.exc_info()) + methodresponse = None + + # Return result + if interface == xmlrpclib: + if not isinstance(result, xmlrpclib.Fault): + result = (result,) + data = xmlrpclib.dumps(result, methodresponse = True, encoding = self.encoding, allow_none = 1) + elif interface == SOAPpy: + data = buildSOAP(kw = {'%sResponse' % method: {'Result': result}}, encoding = self.encoding) + + return data + + def noop(self, value): + return value + + + diff --git a/sfa/server/modpythonapi/BaseClient.py b/sfa/server/modpythonapi/BaseClient.py new file mode 100755 index 00000000..448f9346 --- /dev/null +++ b/sfa/server/modpythonapi/BaseClient.py @@ -0,0 +1,46 @@ +import xmlrpclib + +from ApiExceptionCodes import * + +VerboseExceptions = False + +def EnableVerboseExceptions(x=True): + global VerboseExceptions + VerboseExceptions = x + +class ExceptionUnmarshaller(xmlrpclib.Unmarshaller): + def close(self): + try: + return xmlrpclib.Unmarshaller.close(self) + except xmlrpclib.Fault, e: + # if the server tagged some traceback info onto the end of the + # exception text, then print it out on the client. + + if "\nFAULT_TRACEBACK:" in e.faultString: + parts = e.faultString.split("\nFAULT_TRACEBACK:") + e.faultString = parts[0] + if VerboseExceptions: + print "\n|Server Traceback:", "\n|".join(parts[1].split("\n")) + + raise e + +class ExceptionReportingTransport(xmlrpclib.Transport): + def make_connection(self, host): + import httplib + if host.startswith("https:"): + return httplib.HTTPS(host) + else: + return httplib.HTTP(host) + + def getparser(self): + unmarshaller = ExceptionUnmarshaller() + parser = xmlrpclib.ExpatParser(unmarshaller) + return parser, unmarshaller + +class BaseClient(): + def __init__(self, url): + self.url = url + self.server = xmlrpclib.ServerProxy(self.url, ExceptionReportingTransport()) + + def noop(self, value): + return self.server.noop(value) diff --git a/sfa/server/modpythonapi/ModPython.py b/sfa/server/modpythonapi/ModPython.py new file mode 100755 index 00000000..64ceb990 --- /dev/null +++ b/sfa/server/modpythonapi/ModPython.py @@ -0,0 +1,68 @@ +# +# Apache mod_python interface +# +# Aaron Klingaman +# Mark Huang +# +# Copyright (C) 2004-2006 The Trustees of Princeton University +# + +import sys +import traceback +import xmlrpclib +from mod_python import apache + +from API import RemoteApi +api = RemoteApi() + +class unbuffered: + """ + Write to /var/log/httpd/error_log. See + + http://www.modpython.org/FAQ/faqw.py?req=edit&file=faq02.003.htp + """ + + def write(self, data): + sys.stderr.write(data) + sys.stderr.flush() + +#log = unbuffered() + +def handler(req): + try: + if req.method != "POST": + req.content_type = "text/html" + req.send_http_header() + req.write(""" + +PLCAPI XML-RPC/SOAP Interface + +

PLCAPI XML-RPC/SOAP Interface

+

Please use XML-RPC or SOAP to access the PLCAPI.

+ +""") + return apache.OK + + # Read request + request = req.read(int(req.headers_in['content-length'])) + + # mod_python < 3.2: The IP address portion of remote_addr is + # incorrect (always 0.0.0.0) when IPv6 is enabled. + # http://issues.apache.org/jira/browse/MODPYTHON-64?page=all + (remote_ip, remote_port) = req.connection.remote_addr + remote_addr = (req.connection.remote_ip, remote_port) + + # Handle request + response = api.handle(remote_addr, request) + + # Write response + req.content_type = "text/xml; charset=" + api.encoding + req.send_http_header() + req.write(response) + + return apache.OK + + except Exception, err: + # Log error in /var/log/httpd/(ssl_)?error_log + print >> log, err, traceback.format_exc() + return apache.HTTP_INTERNAL_SERVER_ERROR diff --git a/sfa/server/modpythonapi/TestApi.py b/sfa/server/modpythonapi/TestApi.py new file mode 100755 index 00000000..11daed51 --- /dev/null +++ b/sfa/server/modpythonapi/TestApi.py @@ -0,0 +1,19 @@ +from AuthenticatedApi import AuthenticatedApi, BadRequestHash + +class RemoteApi(AuthenticatedApi): + def __init__(self, encoding="utf-8", trustedRootsDir="/usr/local/testapi/var/trusted_roots"): + return AuthenticatedApi.__init__(self, encoding) + + def get_log_name(self): + return "/usr/local/testapi/var/logfile.txt" + + def register_functions(self): + AuthenticatedApi.register_functions(self) + self.register_function(self.typeError) + self.register_function(self.badRequestHash) + + def typeError(self): + raise TypeError() + + def badRequestHash(self): + raise BadRequestHash("somehashvalue") diff --git a/sfa/server/modpythonapi/installTest.sh b/sfa/server/modpythonapi/installTest.sh new file mode 100755 index 00000000..1a6514eb --- /dev/null +++ b/sfa/server/modpythonapi/installTest.sh @@ -0,0 +1,37 @@ +SFA_SRC_DIR=/home/smbaker/projects/sfa/trunk + +mkdir -p /usr/local/testapi/bin +mkdir -p /usr/local/testapi/bin/sfa/trust +mkdir -p /usr/local/testapi/bin/sfa/util +mkdir -p /usr/local/testapi/var/trusted_roots +mkdir -p /repository/testapi + +# source code for the API +cp BaseApi.py /usr/local/testapi/bin/ +cp AuthenticatedApi.py /usr/local/testapi/bin/ +cp TestApi.py /usr/local/testapi/bin/API.py +cp ModPython.py /usr/local/testapi/bin/ +cp ApiExceptionCodes.py /usr/local/testapi/bin/ + +# trusted root certificates that match gackstestuser.* +cp trusted_roots/*.gid /usr/local/testapi/var/trusted_roots/ + +# apache config file to enable the api +cp testapi.conf /etc/httpd/conf.d/ + +# copy over sfa stuff that we need +echo > /usr/local/testapi/bin/sfa/__init__.py +echo > /usr/local/testapi/bin/sfa/trust/__init__.py +echo > /usr/local/testapi/bin/sfa/util/__init__.py +cp $SFA_SRC_DIR/sfa/trust/gid.py /usr/local/testapi/bin/sfa/trust/ +cp $SFA_SRC_DIR/sfa/trust/certificate.py /usr/local/testapi/bin/sfa/trust/ +cp $SFA_SRC_DIR/sfa/trust/trustedroot.py /usr/local/testapi/bin/sfa/trust/ +cp $SFA_SRC_DIR/sfa/trust/credential.py /usr/local/testapi/bin/sfa/trust/ +cp $SFA_SRC_DIR/sfa/trust/rights.py /usr/local/testapi/bin/sfa/trust/ +cp $SFA_SRC_DIR/sfa/util/faults.py /usr/local/testapi/bin/sfa/util/ + +# make everything owned by apache +chown -R apache /usr/local/testapi +chown apache /etc/httpd/conf.d/testapi.conf + +/etc/init.d/httpd restart diff --git a/sfa/server/modpythonapi/test.py b/sfa/server/modpythonapi/test.py new file mode 100755 index 00000000..d3fafed9 --- /dev/null +++ b/sfa/server/modpythonapi/test.py @@ -0,0 +1,44 @@ +import sys +import traceback + +from BaseClient import BaseClient, EnableVerboseExceptions +from AuthenticatedClient import AuthenticatedClient + +EnableVerboseExceptions(True) + +HOST = "localhost" +URL = "http://" + HOST + "/TESTAPI/" +SURL = "https://" + HOST + "/TESTAPI/" + +print "*** testing some valid ops; these should print \"Hello, World\" ***" + +bc = BaseClient(URL) +print "HTTP noop:", bc.noop("Hello, World") + +ac = AuthenticatedClient(URL, "gackstestuser.pkey", "gackstestuser.gid") +print "HTTP gidNoop:", ac.gidNoop("Hello, World") + +bc = BaseClient(SURL) +print "HTTPS noop:", bc.noop("Hello, World") + +ac = AuthenticatedClient(URL, "gackstestuser.pkey", "gackstestuser.gid") +print "HTTPS gidNoop:", ac.gidNoop("Hello, World") + +print +print "*** testing some exception handling: ***" + +bc = BaseClient(URL) +print "HTTP typeError:", +try: + result = bc.server.typeError() + print result +except Exception, e: + print ''.join(traceback.format_exception(sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2])) + +print "HTTP badrequesthash:", +try: + result = bc.server.badRequestHash() + print result +except: + print ''.join(traceback.format_exception(sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2])) + diff --git a/sfa/server/modpythonapi/test.sh b/sfa/server/modpythonapi/test.sh new file mode 100755 index 00000000..cafa0fb8 --- /dev/null +++ b/sfa/server/modpythonapi/test.sh @@ -0,0 +1,3 @@ +export PYTHONPATH=/home/smbaker/projects/sfa/trunk + +python ./test.py diff --git a/sfa/server/modpythonapi/testapi.conf b/sfa/server/modpythonapi/testapi.conf new file mode 100644 index 00000000..5495fd24 --- /dev/null +++ b/sfa/server/modpythonapi/testapi.conf @@ -0,0 +1,5 @@ + + SetHandler mod_python + PythonPath "sys.path + ['/usr/local/testapi/bin/']" + PythonHandler ModPython + \ No newline at end of file diff --git a/sfa/server/registry.py b/sfa/server/registry.py new file mode 100644 index 00000000..020d8f5f --- /dev/null +++ b/sfa/server/registry.py @@ -0,0 +1,53 @@ +# +# Registry is a SfaServer that implements the Registry interface +# +### $Id: registry.py 18632 2010-08-16 21:44:19Z tmack $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/server/registry.py $ +# + +from sfa.util.server import SfaServer +from sfa.util.faults import * +from sfa.util.namespace import hrn_to_urn +from sfa.server.interface import Interfaces +import sfa.util.xmlrpcprotocol as xmlrpcprotocol +import sfa.util.soapprotocol as soapprotocol + + +## +# Registry is a SfaServer that serves registry and slice operations at PLC. +class Registry(SfaServer): + ## + # Create a new registry object. + # + # @param ip the ip address to listen on + # @param port the port to listen on + # @param key_file private key filename of registry + # @param cert_file certificate filename containing public key (could be a GID file) + + def __init__(self, ip, port, key_file, cert_file): + SfaServer.__init__(self, ip, port, key_file, cert_file) + self.server.interface = 'registry' + + +## +# Registries is a dictionary of registry connections keyed on the registry +# hrn + +class Registries(Interfaces): + + default_dict = {'registries': {'registry': [Interfaces.default_fields]}} + + def __init__(self, api, conf_file = "/etc/sfa/registries.xml"): + Interfaces.__init__(self, api, conf_file) + address = self.api.config.SFA_REGISTRY_HOST + port = self.api.config.SFA_REGISTRY_PORT + url = 'http://%(address)s:%(port)s' % locals() + local_registry = {'hrn': self.api.hrn, + 'urn': hrn_to_urn(self.api.hrn, 'authority'), + 'addr': address, + 'port': port, + 'url': url} + self.interfaces[self.api.hrn] = local_registry + + # get connections + self.update(self.get_connections()) diff --git a/sfa/server/sfa-ca.py b/sfa/server/sfa-ca.py new file mode 100755 index 00000000..c76b9857 --- /dev/null +++ b/sfa/server/sfa-ca.py @@ -0,0 +1,242 @@ +#!/usr/bin/python + +# +# SFA Certificate Signing and management +# + +import os +import sys +from optparse import OptionParser +from sfa.trust.certificate import Keypair, Certificate +from sfa.trust.gid import GID, create_uuid +from sfa.trust.hierarchy import Hierarchy +from sfa.util.config import Config +from collections import defaultdict + +def main(): + args = sys.argv + script_name = args[0] + parser = OptionParser(usage="%(script_name)s [options]" % locals()) + parser.add_option("-d", "--display", dest="display", default=None, + help="print contents of specified gid") + parser.add_option("-s", "--sign", dest="sign", default=None, + help="gid to sign" ) + parser.add_option("-k", "--key", dest="key", default=None, + help="keyfile to use for signing") + parser.add_option("-a", "--authority", dest="authority", default=None, + help="sign the gid using the specified authority ") + parser.add_option("-i", "--import", dest="importgid", default=None, + help="gid file to import into the registry") + parser.add_option("-e", "--export", dest="export", + help="name of gid to export from registry") + parser.add_option("-o", "--outfile", dest="outfile", + help="where to write the exprted gid") + parser.add_option("-v", "--verbose", dest="verbose", default=False, + action="store_true", help="be verbose") + + (options, args) = parser.parse_args() + + + if options.display: + display(options) + elif options.sign: + sign(options) + elif options.importgid: + import_gid(options) + elif options.export: + export_gid(options) + else: + parser.print_help() + sys.exit(1) + + +def display(options): + """ + Display the sepcified GID + """ + gidfile = os.path.abspath(options.display) + if not gidfile or not os.path.isfile(gidfile): + print "No such gid: %s" % gidfile + sys.exit(1) + gid = GID(filename=gidfile) + gid.dump(dump_parents=True) + +def sign_gid(gid, parent_key, parent_gid): + gid.set_issuer(parent_key, parent_gid.get_hrn()) + gid.set_parent(parent_gid) + gid.sign() + return gid + +def sign(options): + """ + Sign the specified gid + """ + hierarchy = Hierarchy() + config = Config() + default_authority = config.SFA_INTERFACE_HRN + auth_info = hierarchy.get_auth_info(default_authority) + + # load the gid + gidfile = os.path.abspath(options.sign) + if not os.path.isfile(gidfile): + print "no such gid: %s" % gidfile + sys.exit(1) + gid = GID(filename=gidfile) + + # remove previous parent + gid = GID(string=gid.save_to_string(save_parents=False)) + + # load the parent private info + authority = options.authority + # if no pkey was specified, then use the this authority's key + if not authority: + authority = default_authority + + if not hierarchy.auth_exists(authority): + print "no such authority: %s" % authority + + # load the parent gid and key + auth_info = hierarchy.get_auth_info(authority) + pkeyfile = auth_info.privkey_filename + parent_key = Keypair(filename=pkeyfile) + parent_gid = auth_info.gid_object + + # get the outfile + outfile = options.outfile + if not outfile: + outfile = os.path.abspath('./signed-%s.gid' % gid.get_hrn()) + + # check if gid already has a parent + + # sign the gid + if options.verbose: + print "Signing %s gid with parent %s" % \ + (gid.get_hrn(), parent_gid.get_hrn()) + gid = sign_gid(gid, parent_key, parent_gid) + # save the signed gid + if options.verbose: + print "Writing signed gid %s" % outfile + gid.save_to_file(outfile, save_parents=True) + + +def export_gid(options): + from sfa.util.table import SfaTable + # lookup the record for the specified hrn + hrn = options.export + + # check sfa table first + table = SfaTable() + records = table.find({'hrn': hrn, type: 'authority'}) + if not records: + # check the authorities hierarchy + hierarchy = Hierarchy() + try: + auth_info = hierarchy.get_auth_info() + gid = auth_info.gid_object + except: + print "Record: %s not found" % hrn + sys.exit(1) + else: + record = records[0] + gid = GID(string=record['gid']) + + # get the outfile + outfile = options.outfile + if not outfile: + outfile = os.path.abspath('./%s.gid' % gid.get_hrn()) + + # save it + if options.verbose: + print "Writing %s gid to %s" % (gid.get_hrn(), outfile) + gid.save_to_file(outfile, save_parents=True) + +def import_gid(options): + """ + Import the specified gid into the registry (db and authorities + hierarchy) overwriting any previous gid. + """ + from sfa.util.table import SfaTable + from sfa.util.record import SfaRecord + # load the gid + gidfile = os.path.abspath(options.importgid) + if not gidfile or not os.path.isfile(gidfile): + print "No such gid: %s" % gidfile + sys.exit(1) + gid = GID(filename=gidfile) + + # check if it exists within the hierarchy + hierarchy = Hierarchy() + if not hierarchy.auth_exists(gid.get_hrn()): + print "%s not found in hierarchy" % gid.get_hrn() + sys.exit(1) + + # check if record exists in db + table = SfaTable() + records = table.find({'hrn': gid.get_hrn(), 'type': 'authority'}) + if not records: + print "%s not found in record database" % get.get_hrn() + sys.exit(1) + + # update the database record + record = records[0] + record['gid'] = gid.save_to_string(save_parents=True) + table.update(record) + if options.verbose: + print "Imported %s gid into db" % record['hrn'] + + # update the hierarchy + auth_info = hierarchy.get_auth_info(gid.get_hrn()) + filename = auth_info.gid_filename + gid.save_to_file(filename, save_parents=True) + if options.verbose: + print "Writing %s gid to %s" % (gid.get_hrn(), filename) + + # re-sign all existing gids signed by this authority + # create a dictionary of records keyed on the record's authority + record_dict = defaultdict(list) + # only get regords that belong to this authority + # or any of its sub authorities + child_records = table.find({'hrn': '%s*' % gid.get_hrn()}) + if not child_records: + return + + for record in child_records: + record_dict[record['authority']].append(record) + + # start with the authority we just imported + authorities = [gid.get_hrn()] + while authorities: + next_authorities = [] + for authority in authorities: + # create a new signed gid for each record at this authority + # and update the registry + auth_info = hierarchy.get_auth_info(authority) + records = record_dict[authority] + for record in records: + record_gid = GID(string=record['gid']) + parent_pkey = Keypair(filename=auth_info.privkey_filename) + parent_gid = GID(filename=auth_info.gid_filename) + if options.verbose: + print "re-signing %s gid with parent %s" % \ + (record['hrn'], parent_gid.get_hrn()) + signed_gid = sign_gid(record_gid, parent_pkey, parent_gid) + record['gid'] = signed_gid.save_to_string(save_parents=True) + table.update(record) + + # if this is an authority then update the hierarchy + if record['type'] == 'authority': + record_info = hierarchy.get_auth_info(record['hrn']) + if options.verbose: + print "Writing %s gid to %s" % (record['hrn'], record_info.gid_filename) + signed_gid.save_to_file(filename=record_info.gid_filename, save_parents=True) + + # update list of next authorities + tmp_authorities = set([record['hrn'] for record in records \ + if record['type'] == 'authority']) + next_authorities.extend(tmp_authorities) + + # move on to next set of authorities + authorities = next_authorities + +if __name__ == '__main__': + main() diff --git a/sfa/server/sfa-clean-peer-records.py b/sfa/server/sfa-clean-peer-records.py new file mode 100644 index 00000000..5edb3f36 --- /dev/null +++ b/sfa/server/sfa-clean-peer-records.py @@ -0,0 +1,79 @@ +#!/usr/bin/python + +import sys +import os +import traceback +from sfa.util.namespace import * +from sfa.util.table import SfaTable +from sfa.util.prefixTree import prefixTree +from sfa.plc.api import SfaAPI +from sfa.util.config import Config +from sfa.trust.certificate import Keypair +from sfa.trust.hierarchy import Hierarchy +from sfa.util.report import trace, error +from sfa.server.registry import Registries +import sfa.util.xmlrpcprotocol as xmlrpcprotocol +import socket + +def main(): + config = Config() + if not config.SFA_REGISTRY_ENABLED: + sys.exit(0) + + # Get the path to the sfa server key/cert files from + # the sfa hierarchy object + sfa_hierarchy = Hierarchy() + sfa_key_path = sfa_hierarchy.basedir + key_file = os.path.join(sfa_key_path, "server.key") + cert_file = os.path.join(sfa_key_path, "server.cert") + key = Keypair(filename=key_file) + + # get a connection to our local sfa registry + # and a valid credential + authority = config.SFA_INTERFACE_HRN + url = 'http://%s:%s/' %(config.SFA_REGISTRY_HOST, config.SFA_REGISTRY_PORT) + registry = xmlrpcprotocol.get_server(url, key_file, cert_file) + sfa_api = SfaAPI(key_file = key_file, cert_file = cert_file, interface='registry') + credential = sfa_api.getCredential() + + # get peer registries + registries = Registries(sfa_api) + tree = prefixTree() + tree.load(registries.keys()) + + # get local peer records + table = SfaTable() + peer_records = table.find({'~peer_authority': None}) + found_records = [] + hrn_dict = {} + for record in peer_records: + registry_hrn = tree.best_match(record['hrn']) + if registry_hrn not in hrn_dict: + hrn_dict[registry_hrn] = [] + hrn_dict[registry_hrn].append(record['hrn']) + + # attempt to resolve the record at the authoritative interface + for registry_hrn in hrn_dict: + if registry_hrn in registries: + records = [] + target_hrns = hrn_dict[registry_hrn] + try: + records = registries[registry_hrn].Resolve(target_hrns, credential) + found_records.extend([record['hrn'] for record in records]) + except ServerException: + # an exception will be thrown if the record doenst exist + # if so remove the record from the local registry + continue + except: + # this deosnt necessarily mean the records dont exist + # lets give them the benefit of the doubt here (for now) + found_records.extend(target_hrns) + traceback.print_exc() + + # remove what wasnt found + for peer_record in peer_records: + if peer_record['hrn'] not in found_records: + registries[sfa_api.hrn].Remove(peer_record['hrn'], credential, peer_record['type']) + +if __name__ == '__main__': + main() diff --git a/sfa/server/sfa-server.py b/sfa/server/sfa-server.py new file mode 100755 index 00000000..a9e9b457 --- /dev/null +++ b/sfa/server/sfa-server.py @@ -0,0 +1,221 @@ +#!/usr/bin/python +# +### $Id: sfa-server.py 18662 2010-08-24 16:53:40Z tmack $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/server/sfa-server.py $ +# +# SFA PLC Wrapper +# +# This wrapper implements the SFA Registry and Slice Interfaces on PLC. +# Depending on command line options, it starts some combination of a +# Registry, an Aggregate Manager, and a Slice Manager. +# +# There are several items that need to be done before starting the wrapper +# server. +# +# NOTE: Many configuration settings, including the PLC maintenance account +# credentials, URI of the PLCAPI, and PLC DB URI and admin credentials are initialized +# from your MyPLC configuration (/etc/planetlab/plc_config*). Please make sure this information +# is up to date and accurate. +# +# 1) Import the existing planetlab database, creating the +# appropriate SFA records. This is done by running the "sfa-import-plc.py" tool. +# +# 2) Create a "trusted_roots" directory and place the certificate of the root +# authority in that directory. Given the defaults in sfa-import-plc.py, this +# certificate would be named "planetlab.gid". For example, +# +# mkdir trusted_roots; cp authorities/planetlab.gid trusted_roots/ +# +# TODO: Can all three servers use the same "registry" certificate? +## + +# TCP ports for the three servers +registry_port=12345 +aggregate_port=12346 +slicemgr_port=12347 +component_port=12346 +import os, os.path +import sys +from optparse import OptionParser +from sfa.trust.trustedroot import TrustedRootList +from sfa.trust.certificate import Keypair, Certificate +from sfa.trust.hierarchy import Hierarchy +from sfa.util.config import Config +from sfa.util.report import trace +from sfa.plc.api import SfaAPI +from sfa.server.registry import Registries +from sfa.server.aggregate import Aggregates + +# after http://www.erlenstar.demon.co.uk/unix/faq_2.html +def daemon(): + """Daemonize the current process.""" + if os.fork() != 0: os._exit(0) + os.setsid() + if os.fork() != 0: os._exit(0) + os.umask(0) + devnull = os.open(os.devnull, os.O_RDWR) + os.dup2(devnull, 0) + # xxx fixme - this is just to make sure that nothing gets stupidly lost - should use devnull + crashlog = os.open('/var/log/sfa.daemon', os.O_RDWR | os.O_APPEND | os.O_CREAT, 0644) + os.dup2(crashlog, 1) + os.dup2(crashlog, 2) + +def init_server_key(server_key_file, server_cert_file, config, hierarchy): + + subject = config.SFA_INTERFACE_HRN + # check if the server's private key exists. If it doesnt, + # get the right one from the authorities directory. If it cant be + # found in the authorities directory, generate a random one + if not os.path.exists(server_key_file): + hrn = config.SFA_INTERFACE_HRN.lower() + hrn_parts = hrn.split(".") + rel_key_path = hrn + pkey_filename = hrn+".pkey" + + # sub authority's have "." in their hrn. This must + # be converted to os.path separator + if len(hrn_parts) > 0: + rel_key_path = hrn.replace(".", os.sep) + pkey_filename= hrn_parts[-1]+".pkey" + + key_file = os.sep.join([hierarchy.basedir, rel_key_path, pkey_filename]) + if not os.path.exists(key_file): + # if it doesnt exist then this is probably a fresh interface + # with no records. Generate a random keypair for now + trace("server's public key not found in %s" % key_file) + trace("generating a random server key pair") + key = Keypair(create=True) + key.save_to_file(server_key_file) + cert = Certificate(subject=subject) + cert.set_issuer(key=key, subject=subject) + cert.set_pubkey(key) + cert.sign() + cert.save_to_file(server_cert_file, save_parents=True) + + else: + # the pkey was found in the authorites directory. lets + # copy it to where the server key should be and generate + # the cert + key = Keypair(filename=key_file) + key.save_to_file(server_key_file) + cert = Certificate(subject=subject) + cert.set_issuer(key=key, subject=subject) + cert.set_pubkey(key) + cert.sign() + cert.save_to_file(server_cert_file, save_parents=True) + + + # If private key exists and cert doesnt, recreate cert + if (os.path.exists(server_key_file)) and (not os.path.exists(server_cert_file)): + key = Keypair(filename=server_key_file) + cert = Certificate(subject=subject) + cert.set_issuer(key=key, subject=subject) + cert.set_pubkey(key) + cert.sign() + cert.save_to_file(server_cert_file) + +def init_server(options, config): + """ + Execute the init method defined in the manager file + """ + manager_base = 'sfa.managers' + if options.registry: + mgr_type = config.SFA_REGISTRY_TYPE + manager_module = manager_base + ".registry_manager_%s" % mgr_type + try: manager = __import__(manager_module, fromlist=[manager_base]) + except: manager = None + if manager and hasattr(manager, 'init_server'): + manager.init_server() + if options.am: + mgr_type = config.SFA_AGGREGATE_TYPE + manager_module = manager_base + ".aggregate_manager_%s" % mgr_type + try: manager = __import__(manager_module, fromlist=[manager_base]) + except: manager = None + if manager and hasattr(manager, 'init_server'): + manager.init_server() + if options.sm: + mgr_type = config.SFA_SM_TYPE + manager_module = manager_base + ".slice_manager_%s" % mgr_type + try: manager = __import__(manager_module, fromlist=[manager_base]) + except: manager = None + if manager and hasattr(manager, 'init_server'): + manager.init_server() + if options.cm: + mgr_type = config.SFA_CM_TYPE + manager_module = manager_base + ".component_manager_%s" % mgr_type + try: manager = __import__(manager_module, fromlist=[manager_base]) + except: manager = None + if manager and hasattr(manager, 'init_server'): + manager.init_server() + +def sync_interfaces(server_key_file, server_cert_file): + """ + Attempt to install missing trusted gids and db records for + our federated interfaces + """ + api = SfaAPI(key_file = server_key_file, cert_file = server_cert_file) + registries = Registries(api) + aggregates = Aggregates(api) + registries.sync_interfaces() + aggregates.sync_interfaces() + +def main(): + # xxx get rid of globals - name consistently CamelCase or under_score + global AuthHierarchy + global TrustedRoots + global registry_port + global aggregate_port + global slicemgr_port + + # Generate command line parser + parser = OptionParser(usage="sfa-server [options]") + parser.add_option("-r", "--registry", dest="registry", action="store_true", + help="run registry server", default=False) + parser.add_option("-s", "--slicemgr", dest="sm", action="store_true", + help="run slice manager", default=False) + parser.add_option("-a", "--aggregate", dest="am", action="store_true", + help="run aggregate manager", default=False) + parser.add_option("-c", "--component", dest="cm", action="store_true", + help="run component server", default=False) + parser.add_option("-v", "--verbose", dest="verbose", action="store_true", + help="verbose mode", default=False) + parser.add_option("-d", "--daemon", dest="daemon", action="store_true", + help="Run as daemon.", default=False) + (options, args) = parser.parse_args() + + + config = Config() + hierarchy = Hierarchy() + server_key_file = os.path.join(hierarchy.basedir, "server.key") + server_cert_file = os.path.join(hierarchy.basedir, "server.cert") + + init_server_key(server_key_file, server_cert_file, config, hierarchy) + init_server(options, config) + sync_interfaces(server_key_file, server_cert_file) + + if (options.daemon): daemon() + # start registry server + if (options.registry): + from sfa.server.registry import Registry + r = Registry("", registry_port, server_key_file, server_cert_file) + r.start() + + # start aggregate manager + if (options.am): + from sfa.server.aggregate import Aggregate + a = Aggregate("", aggregate_port, server_key_file, server_cert_file) + a.start() + + # start slice manager + if (options.sm): + from sfa.server.slicemgr import SliceMgr + s = SliceMgr("", slicemgr_port, server_key_file, server_cert_file) + s.start() + + if (options.cm): + from sfa.server.component import Component + c = Component("", component_port, server_key_file, server_cert_file) + c.start() + +if __name__ == "__main__": + main() diff --git a/sfa/server/sfa_component_setup.py b/sfa/server/sfa_component_setup.py new file mode 100755 index 00000000..628ae7a8 --- /dev/null +++ b/sfa/server/sfa_component_setup.py @@ -0,0 +1,311 @@ +#!/usr/bin/python +import sys +import os +import tempfile +from optparse import OptionParser +from sfa.util.config import Config +import sfa.util.xmlrpcprotocol as xmlrpcprotocol +from sfa.util.namespace import * +from sfa.util.faults import * +from sfa.trust.certificate import Keypair, Certificate +from sfa.trust.credential import Credential +from sfa.trust.gid import GID +from sfa.trust.hierarchy import Hierarchy + +KEYDIR = "/var/lib/sfa/" +CONFDIR = "/etc/sfa/" + +def handle_gid_mismatch_exception(f): + def wrapper(*args, **kwds): + try: return f(*args, **kwds) + except ConnectionKeyGIDMismatch: + # clean regen server keypair and try again + print "cleaning keys and trying again" + clean_key_cred() + return f(args, kwds) + + return wrapper + +def get_server(url=None, port=None, keyfile=None, certfile=None,verbose=False): + """ + returns an xmlrpc connection to the service a the specified + address + """ + if url: + url_parts = url.split(":") + if len(url_parts) >1: + pass + else: + url = "http://%(url)s:%(port)s" % locals() + else: + # connect to registry by default + config = Config() + addr, port = config.SFA_REGISTRY_HOST, config.SFA_REGISTRY_PORT + url = "http://%(addr)s:%(port)s" % locals() + + if verbose: + print "Contacting registry at: %(url)s" % locals() + + server = xmlrpcprotocol.get_server(url, keyfile, certfile) + return server + + +def create_default_dirs(): + config = Config() + hierarchy = Hierarchy() + config_dir = config.config_path + trusted_certs_dir = config.get_trustedroots_dir() + authorities_dir = hierarchy.basedir + all_dirs = [config_dir, trusted_certs_dir, authorities_dir] + for dir in all_dirs: + if not os.path.exists(dir): + os.makedirs(dir) + +def has_node_key(): + key_file = KEYDIR + os.sep + 'server.key' + return os.path.exists(key_file) + +def clean_key_cred(): + """ + remove the existing keypair and cred and generate new ones + """ + files = ["server.key", "server.cert", "node.cred"] + for f in files: + filepath = KEYDIR + os.sep + f + if os.path.isfile(filepath): + os.unlink(f) + + # install the new key pair + # get_credential will take care of generating the new keypair + # and credential + get_credential() + + +def get_node_key(registry=None, verbose=False): + # this call requires no authentication, + # so we can generate a random keypair here + subject="component" + (kfd, keyfile) = tempfile.mkstemp() + (cfd, certfile) = tempfile.mkstemp() + key = Keypair(create=True) + key.save_to_file(keyfile) + cert = Certificate(subject=subject) + cert.set_issuer(key=key, subject=subject) + cert.set_pubkey(key) + cert.sign() + cert.save_to_file(certfile) + + registry = get_server(url = registry, keyfile=keyfile, certfile=certfile) + registry.get_key() + +def create_server_keypair(keyfile=None, certfile=None, hrn="component", verbose=False): + """ + create the server key/cert pair in the right place + """ + key = Keypair(filename=keyfile) + key.save_to_file(keyfile) + cert = Certificate(subject=hrn) + cert.set_issuer(key=key, subject=hrn) + cert.set_pubkey(key) + cert.sign() + cert.save_to_file(certfile, save_parents=True) + +@handle_gid_mismatch_exception +def get_credential(registry=None, force=False, verbose=False): + config = Config() + hierarchy = Hierarchy() + key_dir= hierarchy.basedir + data_dir = config.data_path + config_dir = config.config_path + credfile = data_dir + os.sep + 'node.cred' + # check for existing credential + if not force and os.path.exists(credfile): + if verbose: + print "Loading Credential from %(credfile)s " % locals() + cred = Credential(filename=credfile).save_to_string(save_parents=True) + else: + if verbose: + print "Getting credential from registry" + # make sure node private key exists + node_pkey_file = config_dir + os.sep + "node.key" + node_gid_file = config_dir + os.sep + "node.gid" + if not os.path.exists(node_pkey_file) or \ + not os.path.exists(node_gid_file): + get_node_key(registry=registry, verbose=verbose) + + gid = GID(filename=node_gid_file) + hrn = gid.get_hrn() + # create server key and certificate + keyfile =data_dir + os.sep + "server.key" + certfile = data_dir + os.sep + "server.cert" + key = Keypair(filename=node_pkey_file) + key.save_to_file(keyfile) + create_server_keypair(keyfile, certfile, hrn, verbose) + + # get credential from registry + registry = get_server(url=registry, keyfile=keyfile, certfile=certfile) + cert = Certificate(filename=certfile) + cert_str = cert.save_to_string(save_parents=True) + cred = registry.GetSelfCredential(cert_str, hrn, 'node') + Credential(string=cred).save_to_file(credfile, save_parents=True) + + return cred + +@handle_gid_mismatch_exception +def get_trusted_certs(registry=None, verbose=False): + """ + refresh our list of trusted certs. + """ + # define useful variables + config = Config() + data_dir = config.SFA_DATA_DIR + config_dir = config.SFA_CONFIG_DIR + trusted_certs_dir = config.get_trustedroots_dir() + keyfile = data_dir + os.sep + "server.key" + certfile = data_dir + os.sep + "server.cert" + node_gid_file = config_dir + os.sep + "node.gid" + node_gid = GID(filename=node_gid_file) + hrn = node_gid.get_hrn() + # get credential + cred = get_credential(registry=registry, verbose=verbose) + # make sure server key cert pair exists + create_server_keypair(keyfile=keyfile, certfile=certfile, hrn=hrn, verbose=verbose) + registry = get_server(url=registry, keyfile=keyfile, certfile=certfile) + # get the trusted certs and save them in the right place + if verbose: + print "Getting trusted certs from registry" + trusted_certs = registry.get_trusted_certs(cred) + trusted_gid_names = [] + for gid_str in trusted_certs: + gid = GID(string=gid_str) + gid.decode() + relative_filename = gid.get_hrn() + ".gid" + trusted_gid_names.append(relative_filename) + gid_filename = trusted_certs_dir + os.sep + relative_filename + if verbose: + print "Writing GID for %s as %s" % (gid.get_hrn(), gid_filename) + gid.save_to_file(gid_filename, save_parents=True) + + # remove old certs + all_gids_names = os.listdir(trusted_certs_dir) + for gid_name in all_gids_names: + if gid_name not in trusted_gid_names: + if verbose: + print "Removing old gid ", gid_name + os.unlink(trusted_certs_dir + os.sep + gid_name) + +@handle_gid_mismatch_exception +def get_gids(registry=None, verbose=False): + """ + Get the gid for all instantiated slices on this node and store it + in /etc/sfa/slice.gid in the slice's filesystem + """ + # define useful variables + config = Config() + data_dir = config.data_path + config_dir = config.SFA_CONFIG_DIR + trusted_certs_dir = config.get_trustedroots_dir() + keyfile = data_dir + os.sep + "server.key" + certfile = data_dir + os.sep + "server.cert" + node_gid_file = config_dir + os.sep + "node.gid" + node_gid = GID(filename=node_gid_file) + hrn = node_gid.get_hrn() + interface_hrn = config.SFA_INTERFACE_HRN + # get credential + cred = get_credential(registry=registry, verbose=verbose) + # make sure server key cert pair exists + create_server_keypair(keyfile=keyfile, certfile=certfile, hrn=hrn, verbose=verbose) + registry = get_server(url=registry, keyfile=keyfile, certfile=certfile) + + if verbose: + print "Getting current slices on this node" + # get a list of slices on this node + from sfa.plc.api import ComponentAPI + api = ComponentAPI() + xids_tuple = api.nodemanager.GetXIDs() + slices = eval(xids_tuple[1]) + slicenames = slices.keys() + + # generate a list of slices that dont have gids installed + slices_without_gids = [] + for slicename in slicenames: + if not os.path.isfile("/vservers/%s/etc/slice.gid" % slicename) \ + or not os.path.isfile("/vservers/%s/etc/node.gid" % slicename): + slices_without_gids.append(slicename) + + # convert slicenames to hrns + hrns = [slicename_to_hrn(interface_hrn, slicename) \ + for slicename in slices_without_gids] + + # exit if there are no gids to install + if not hrns: + return + + if verbose: + print "Getting gids for slices on this node from registry" + # get the gids + # and save them in the right palce + records = registry.GetGids(hrns, cred) + for record in records: + # if this isnt a slice record skip it + if not record['type'] == 'slice': + continue + slicename = hrn_to_pl_slicename(record['hrn']) + # if this slice isnt really instatiated skip it + if not os.path.exists("/vservers/%(slicename)s" % locals()): + continue + + # save the slice gid in /etc/sfa/ in the vservers filesystem + vserver_path = "/vservers/%(slicename)s" % locals() + gid = record['gid'] + slice_gid_filename = os.sep.join([vserver_path, "etc", "slice.gid"]) + if verbose: + print "Saving GID for %(slicename)s as %(slice_gid_filename)s" % locals() + GID(string=gid).save_to_file(slice_gid_filename, save_parents=True) + # save the node gid in /etc/sfa + node_gid_filename = os.sep.join([vserver_path, "etc", "node.gid"]) + if verbose: + print "Saving node GID for %(slicename)s as %(node_gid_filename)s" % locals() + node_gid.save_to_file(node_gid_filename, save_parents=True) + + +def dispatch(options, args): + + create_default_dirs() + if options.key: + if options.verbose: + print "Getting the component's pkey" + get_node_key(registry=options.registry, verbose=options.verbose) + if options.certs: + if options.verbose: + print "Getting the component's trusted certs" + get_trusted_certs(verbose=options.verbose) + if options.gids: + if options.verbose: + print "Geting the component's GIDs" + get_gids(verbose=options.verbose) + +def main(): + args = sys.argv + prog_name = args[0] + parser = OptionParser(usage="%(prog_name)s [options]" % locals()) + parser.add_option("-v", "--verbose", dest="verbose", action="store_true", + default=False, help="Be verbose") + parser.add_option("-r", "--registry", dest="registry", default=None, + help="Url of registry to contact") + parser.add_option("-k", "--key", dest="key", action="store_true", + default=False, + help="Get the node's pkey from the registry") + parser.add_option("-c", "--certs", dest="certs", action="store_true", + default=False, + help="Get the trusted certs from the registry") + parser.add_option("-g", "--gids", dest="gids", action="store_true", + default=False, + help="Get gids for all the slices on the component") + + (options, args) = parser.parse_args() + + dispatch(options, args) + +if __name__ == '__main__': + main() diff --git a/sfa/server/slicemgr.py b/sfa/server/slicemgr.py new file mode 100644 index 00000000..2f706275 --- /dev/null +++ b/sfa/server/slicemgr.py @@ -0,0 +1,23 @@ +### $Id: slicemgr.py 16477 2010-01-05 16:31:37Z thierry $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/server/slicemgr.py $ + +import os +import sys +import datetime +import time +from sfa.util.server import * + +class SliceMgr(SfaServer): + + + ## + # Create a new slice manager object. + # + # @param ip the ip address to listen on + # @param port the port to listen on + # @param key_file private key filename of registry + # @param cert_file certificate filename containing public key (could be a GID file) + + def __init__(self, ip, port, key_file, cert_file, config = "/etc/sfa/sfa_config"): + SfaServer.__init__(self, ip, port, key_file, cert_file) + self.server.interface = 'slicemgr' diff --git a/sfa/trust/__init__.py b/sfa/trust/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/sfa/trust/auth.py b/sfa/trust/auth.py new file mode 100644 index 00000000..17f3ec81 --- /dev/null +++ b/sfa/trust/auth.py @@ -0,0 +1,321 @@ +# +# SfaAPI authentication +# +### $Id: auth.py 18648 2010-08-20 22:29:27Z tmack $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/trust/auth.py $ +# + + +from sfa.trust.certificate import Keypair, Certificate +from sfa.trust.credential import Credential +from sfa.trust.trustedroot import TrustedRootList +from sfa.util.faults import * +from sfa.trust.hierarchy import Hierarchy +from sfa.util.config import * +from sfa.util.namespace import * +from sfa.util.sfaticket import * +from sfa.util.sfalogging import logger +import sys + +class Auth: + """ + Credential based authentication + """ + + def __init__(self, peer_cert = None, config = None ): + self.peer_cert = peer_cert + self.hierarchy = Hierarchy() + if not config: + self.config = Config() + self.load_trusted_certs() + + def load_trusted_certs(self): + self.trusted_cert_list = TrustedRootList(self.config.get_trustedroots_dir()).get_list() + self.trusted_cert_file_list = TrustedRootList(self.config.get_trustedroots_dir()).get_file_list() + + + + def checkCredentials(self, creds, operation, hrn = None): + valid = [] + if not isinstance(creds, list): + creds = [creds] + for cred in creds: + try: + self.check(cred, operation, hrn) + valid.append(cred) + except: + error = sys.exc_info()[:2] + continue + + if not len(valid): + raise InsufficientRights('Access denied: %s -- %s' % (error[0],error[1])) + + return valid + + + def check(self, cred, operation, hrn = None): + """ + Check the credential against the peer cert (callerGID included + in the credential matches the caller that is connected to the + HTTPS connection, check if the credential was signed by a + trusted cert and check if the credential is allowd to perform + the specified operation. + """ + self.client_cred = Credential(string = cred) + self.client_gid = self.client_cred.get_gid_caller() + self.object_gid = self.client_cred.get_gid_object() + + # make sure the client_gid is not blank + if not self.client_gid: + raise MissingCallerGID(self.client_cred.get_subject()) + + # validate the client cert if it exists + if self.peer_cert: + self.verifyPeerCert(self.peer_cert, self.client_gid) + + # make sure the client is allowed to perform the operation + if operation: + if not self.client_cred.can_perform(operation): + raise InsufficientRights(operation) + + if self.trusted_cert_list: + self.client_cred.verify(self.trusted_cert_file_list) + else: + raise MissingTrustedRoots(self.config.get_trustedroots_dir()) + + # Make sure the credential's target matches the specified hrn. + # This check does not apply to trusted peers + trusted_peers = [gid.get_hrn() for gid in self.trusted_cert_list] + if hrn and self.client_gid.get_hrn() not in trusted_peers: + target_hrn = self.object_gid.get_hrn() + if not hrn == target_hrn: + raise PermissionError("Target hrn: %s doesn't match specified hrn: %s " % \ + (target_hrn, hrn) ) + return True + + def check_ticket(self, ticket): + """ + Check if the tickt was signed by a trusted cert + """ + if self.trusted_cert_list: + client_ticket = SfaTicket(string=ticket) + client_ticket.verify_chain(self.trusted_cert_list) + else: + raise MissingTrustedRoots(self.config.get_trustedroots_dir()) + + return True + + def verifyPeerCert(self, cert, gid): + # make sure the client_gid matches client's certificate + if not cert.is_pubkey(gid.get_pubkey()): + raise ConnectionKeyGIDMismatch(gid.get_subject()+":"+cert.get_subject()) + + def verifyGidRequestHash(self, gid, hash, arglist): + key = gid.get_pubkey() + if not key.verify_string(str(arglist), hash): + raise BadRequestHash(hash) + + def verifyCredRequestHash(self, cred, hash, arglist): + gid = cred.get_gid_caller() + self.verifyGidRequestHash(gid, hash, arglist) + + def validateGid(self, gid): + if self.trusted_cert_list: + gid.verify_chain(self.trusted_cert_list) + + def validateCred(self, cred): + if self.trusted_cert_list: + cred.verify(self.trusted_cert_file_list) + + def authenticateGid(self, gidStr, argList, requestHash=None): + gid = GID(string = gidStr) + self.validateGid(gid) + # request_hash is optional + if requestHash: + self.verifyGidRequestHash(gid, requestHash, argList) + return gid + + def authenticateCred(self, credStr, argList, requestHash=None): + cred = Credential(string = credStr) + self.validateCred(cred) + # request hash is optional + if requestHash: + self.verifyCredRequestHash(cred, requestHash, argList) + return cred + + def authenticateCert(self, certStr, requestHash): + cert = Certificate(string=certStr) + self.validateCert(self, cert) + + def gidNoop(self, gidStr, value, requestHash): + self.authenticateGid(gidStr, [gidStr, value], requestHash) + return value + + def credNoop(self, credStr, value, requestHash): + self.authenticateCred(credStr, [credStr, value], requestHash) + return value + + def verify_cred_is_me(self, credential): + is_me = False + cred = Credential(string=credential) + caller_gid = cred.get_gid_caller() + caller_hrn = caller_gid.get_hrn() + if caller_hrn != self.config.SFA_INTERFACE_HRN: + raise SfaPermissionDenied(self.config.SFA_INTEFACE_HRN) + + return + + def get_auth_info(self, auth_hrn): + """ + Given an authority name, return the information for that authority. + This is basically a stub that calls the hierarchy module. + + @param auth_hrn human readable name of authority + """ + + return self.hierarchy.get_auth_info(auth_hrn) + + + def veriry_auth_belongs_to_me(self, name): + """ + Verify that an authority belongs to our hierarchy. + This is basically left up to the implementation of the hierarchy + module. If the specified name does not belong, ane exception is + thrown indicating the caller should contact someone else. + + @param auth_name human readable name of authority + """ + + # get auth info will throw an exception if the authority doesnt exist + self.get_auth_info(name) + + + def verify_object_belongs_to_me(self, name): + """ + Verify that an object belongs to our hierarchy. By extension, + this implies that the authority that owns the object belongs + to our hierarchy. If it does not an exception is thrown. + + @param name human readable name of object + """ + auth_name = self.get_authority(name) + if not auth_name: + auth_name = name + if name == self.config.SFA_INTERFACE_HRN: + return + self.verify_auth_belongs_to_me(auth_name) + + def verify_auth_belongs_to_me(self, name): + # get auth info will throw an exception if the authority doesnt exist + self.get_auth_info(name) + + + def verify_object_permission(self, name): + """ + Verify that the object gid that was specified in the credential + allows permission to the object 'name'. This is done by a simple + prefix test. For example, an object_gid for plc.arizona would + match the objects plc.arizona.slice1 and plc.arizona. + + @param name human readable name to test + """ + object_hrn = self.object_gid.get_hrn() + if object_hrn == name: + return + if name.startswith(object_hrn + "."): + return + #if name.startswith(get_authority(name)): + #return + + raise PermissionError(name) + + def determine_user_rights(self, caller_hrn, record): + """ + Given a user credential and a record, determine what set of rights the + user should have to that record. + + This is intended to replace determine_rights() and + verify_cancreate_credential() + """ + + rl = RightList() + type = record['type'] + + + if type=="slice": + researchers = record.get("researcher", []) + pis = record.get("PI", []) + if (caller_hrn in researchers + pis): + rl.add("refresh") + rl.add("embed") + rl.add("bind") + rl.add("control") + rl.add("info") + + elif type == "authority": + pis = record.get("PI", []) + operators = record.get("operator", []) + if (caller_hrn == self.config.SFA_INTERFACE_HRN): + rl.add("authority") + rl.add("sa") + rl.add("ma") + if (caller_hrn in pis): + rl.add("authority") + rl.add("sa") + if (caller_hrn in operators): + rl.add("authority") + rl.add("ma") + + elif type == "user": + rl.add("refresh") + rl.add("resolve") + rl.add("info") + + elif type == "node": + rl.add("operator") + + return rl + + def verify_cancreate_credential(self, src_cred, record): + """ + Verify that a user can retrive a particular type of credential. + For slices, the user must be on the researcher list. For SA and + MA the user must be on the pi and operator lists respectively + """ + + type = record.get_type() + cred_object_hrn = src_cred.get_gid_object().get_hrn() + if cred_object_hrn in [self.config.SFA_REGISTRY_ROOT_AUTH]: + return + if type=="slice": + researchers = record.get("researcher", []) + if not (cred_object_hrn in researchers): + raise PermissionError(cred_object_hrn + " is not in researcher list for " + record.get_name()) + elif type == "sa": + pis = record.get("pi", []) + if not (cred_object_hrn in pis): + raise PermissionError(cred_object_hrn + " is not in pi list for " + record.get_name()) + elif type == "ma": + operators = record.get("operator", []) + if not (cred_object_hrn in operators): + raise PermissionError(cred_object_hrn + " is not in operator list for " + record.get_name()) + + def get_authority(self, hrn): + return get_authority(hrn) + + def filter_creds_by_caller(self, creds, caller_hrn): + """ + Returns a list of creds who's gid caller matches the + specified caller hrn + """ + if not isinstance(creds, list): + creds = [creds] + creds = [] + for cred in creds: + try: + tmp_cred = Credential(string=cred) + if tmp_cred.get_gid_caller().get_hrn() == caller_hrn: + creds.append(cred) + except: pass + return creds + diff --git a/sfa/trust/certificate.py b/sfa/trust/certificate.py new file mode 100644 index 00000000..2d33cff0 --- /dev/null +++ b/sfa/trust/certificate.py @@ -0,0 +1,604 @@ +#---------------------------------------------------------------------- +# Copyright (c) 2008 Board of Trustees, Princeton University +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and/or hardware specification (the "Work") to +# deal in the Work without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Work, and to permit persons to whom the Work +# is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Work. +# +# THE WORK IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE WORK OR THE USE OR OTHER DEALINGS +# IN THE WORK. +#---------------------------------------------------------------------- + +## +# SFA uses two crypto libraries: pyOpenSSL and M2Crypto to implement +# the necessary crypto functionality. Ideally just one of these libraries +# would be used, but unfortunately each of these libraries is independently +# lacking. The pyOpenSSL library is missing many necessary functions, and +# the M2Crypto library has crashed inside of some of the functions. The +# design decision is to use pyOpenSSL whenever possible as it seems more +# stable, and only use M2Crypto for those functions that are not possible +# in pyOpenSSL. +# +# This module exports two classes: Keypair and Certificate. +## +# +### $Id: certificate.py 18513 2010-07-14 17:00:23Z tmack $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/trust/certificate.py $ +# + +import os +import tempfile +import base64 +import traceback +from OpenSSL import crypto +import M2Crypto +from M2Crypto import X509 +from tempfile import mkstemp +from sfa.util.sfalogging import logger +from sfa.util.namespace import urn_to_hrn +from sfa.util.faults import * + +def convert_public_key(key): + keyconvert_path = "/usr/bin/keyconvert.py" + if not os.path.isfile(keyconvert_path): + raise IOError, "Could not find keyconvert in %s" % keyconvert_path + + # we can only convert rsa keys + if "ssh-dss" in key: + return None + + (ssh_f, ssh_fn) = tempfile.mkstemp() + ssl_fn = tempfile.mktemp() + os.write(ssh_f, key) + os.close(ssh_f) + + cmd = keyconvert_path + " " + ssh_fn + " " + ssl_fn + os.system(cmd) + + # this check leaves the temporary file containing the public key so + # that it can be expected to see why it failed. + # TODO: for production, cleanup the temporary files + if not os.path.exists(ssl_fn): + return None + + k = Keypair() + try: + k.load_pubkey_from_file(ssl_fn) + except: + traceback.print_exc() + k = None + + # remove the temporary files + os.remove(ssh_fn) + os.remove(ssl_fn) + + return k + +## +# Public-private key pairs are implemented by the Keypair class. +# A Keypair object may represent both a public and private key pair, or it +# may represent only a public key (this usage is consistent with OpenSSL). + +class Keypair: + key = None # public/private keypair + m2key = None # public key (m2crypto format) + + ## + # Creates a Keypair object + # @param create If create==True, creates a new public/private key and + # stores it in the object + # @param string If string!=None, load the keypair from the string (PEM) + # @param filename If filename!=None, load the keypair from the file + + def __init__(self, create=False, string=None, filename=None): + if create: + self.create() + if string: + self.load_from_string(string) + if filename: + self.load_from_file(filename) + + ## + # Create a RSA public/private key pair and store it inside the keypair object + + def create(self): + self.key = crypto.PKey() + self.key.generate_key(crypto.TYPE_RSA, 1024) + + ## + # Save the private key to a file + # @param filename name of file to store the keypair in + + def save_to_file(self, filename): + open(filename, 'w').write(self.as_pem()) + + ## + # Load the private key from a file. Implicity the private key includes the public key. + + def load_from_file(self, filename): + buffer = open(filename, 'r').read() + self.load_from_string(buffer) + + ## + # Load the private key from a string. Implicitly the private key includes the public key. + + def load_from_string(self, string): + self.key = crypto.load_privatekey(crypto.FILETYPE_PEM, string) + self.m2key = M2Crypto.EVP.load_key_string(string) + + ## + # Load the public key from a string. No private key is loaded. + + def load_pubkey_from_file(self, filename): + # load the m2 public key + m2rsakey = M2Crypto.RSA.load_pub_key(filename) + self.m2key = M2Crypto.EVP.PKey() + self.m2key.assign_rsa(m2rsakey) + + # create an m2 x509 cert + m2name = M2Crypto.X509.X509_Name() + m2name.add_entry_by_txt(field="CN", type=0x1001, entry="junk", len=-1, loc=-1, set=0) + m2x509 = M2Crypto.X509.X509() + m2x509.set_pubkey(self.m2key) + m2x509.set_serial_number(0) + m2x509.set_issuer_name(m2name) + m2x509.set_subject_name(m2name) + ASN1 = M2Crypto.ASN1.ASN1_UTCTIME() + ASN1.set_time(500) + m2x509.set_not_before(ASN1) + m2x509.set_not_after(ASN1) + junk_key = Keypair(create=True) + m2x509.sign(pkey=junk_key.get_m2_pkey(), md="sha1") + + # convert the m2 x509 cert to a pyopenssl x509 + m2pem = m2x509.as_pem() + pyx509 = crypto.load_certificate(crypto.FILETYPE_PEM, m2pem) + + # get the pyopenssl pkey from the pyopenssl x509 + self.key = pyx509.get_pubkey() + + ## + # Load the public key from a string. No private key is loaded. + + def load_pubkey_from_string(self, string): + (f, fn) = tempfile.mkstemp() + os.write(f, string) + os.close(f) + self.load_pubkey_from_file(fn) + os.remove(fn) + + ## + # Return the private key in PEM format. + + def as_pem(self): + return crypto.dump_privatekey(crypto.FILETYPE_PEM, self.key) + + ## + # Return an M2Crypto key object + + def get_m2_pkey(self): + if not self.m2key: + self.m2key = M2Crypto.EVP.load_key_string(self.as_pem()) + return self.m2key + + ## + # Returns a string containing the public key represented by this object. + + def get_pubkey_string(self): + m2pkey = self.get_m2_pkey() + return base64.b64encode(m2pkey.as_der()) + + ## + # Return an OpenSSL pkey object + + def get_openssl_pkey(self): + return self.key + + + ## + # Given another Keypair object, return TRUE if the two keys are the same. + + def is_same(self, pkey): + return self.as_pem() == pkey.as_pem() + + def sign_string(self, data): + k = self.get_m2_pkey() + k.sign_init() + k.sign_update(data) + return base64.b64encode(k.sign_final()) + + def verify_string(self, data, sig): + k = self.get_m2_pkey() + k.verify_init() + k.verify_update(data) + return M2Crypto.m2.verify_final(k.ctx, base64.b64decode(sig), k.pkey) + + def compute_hash(self, value): + return self.sign_string(str(value)) + +## +# The certificate class implements a general purpose X509 certificate, making +# use of the appropriate pyOpenSSL or M2Crypto abstractions. It also adds +# several addition features, such as the ability to maintain a chain of +# parent certificates, and storage of application-specific data. +# +# Certificates include the ability to maintain a chain of parents. Each +# certificate includes a pointer to it's parent certificate. When loaded +# from a file or a string, the parent chain will be automatically loaded. +# When saving a certificate to a file or a string, the caller can choose +# whether to save the parent certificates as well. + +class Certificate: + digest = "md5" + + cert = None + issuerKey = None + issuerSubject = None + parent = None + + separator="-----parent-----" + + ## + # Create a certificate object. + # + # @param create If create==True, then also create a blank X509 certificate. + # @param subject If subject!=None, then create a blank certificate and set + # it's subject name. + # @param string If string!=None, load the certficate from the string. + # @param filename If filename!=None, load the certficiate from the file. + + def __init__(self, create=False, subject=None, string=None, filename=None, intermediate=None): + self.data = {} + if create or subject: + self.create() + if subject: + self.set_subject(subject) + if string: + self.load_from_string(string) + if filename: + self.load_from_file(filename) + + if intermediate: + self.set_intermediate_ca(intermediate) + + ## + # Create a blank X509 certificate and store it in this object. + + def create(self): + self.cert = crypto.X509() + self.cert.set_serial_number(3) + self.cert.gmtime_adj_notBefore(0) + self.cert.gmtime_adj_notAfter(60*60*24*365*5) # five years + + ## + # Given a pyOpenSSL X509 object, store that object inside of this + # certificate object. + + def load_from_pyopenssl_x509(self, x509): + self.cert = x509 + + ## + # Load the certificate from a string + + def load_from_string(self, string): + # if it is a chain of multiple certs, then split off the first one and + # load it (support for the ---parent--- tag as well as normal chained certs) + + string = string.strip() + + + if not string.startswith('-----'): + string = '-----BEGIN CERTIFICATE-----\n%s\n-----END CERTIFICATE-----' % string + + parts = [] + + if string.count('-----BEGIN CERTIFICATE-----') > 1 and \ + string.count(Certificate.separator) == 0: + parts = string.split('-----END CERTIFICATE-----',1) + parts[0] += '-----END CERTIFICATE-----' + else: + parts = string.split(Certificate.separator, 1) + + self.cert = crypto.load_certificate(crypto.FILETYPE_PEM, parts[0]) + + # if there are more certs, then create a parent and let the parent load + # itself from the remainder of the string + if len(parts) > 1 and parts[1] != '': + self.parent = self.__class__() + self.parent.load_from_string(parts[1]) + + ## + # Load the certificate from a file + + def load_from_file(self, filename): + file = open(filename) + string = file.read() + self.load_from_string(string) + + ## + # Save the certificate to a string. + # + # @param save_parents If save_parents==True, then also save the parent certificates. + + def save_to_string(self, save_parents=True): + string = crypto.dump_certificate(crypto.FILETYPE_PEM, self.cert) + if save_parents and self.parent: + string = string + self.parent.save_to_string(save_parents) + return string + + ## + # Save the certificate to a file. + # @param save_parents If save_parents==True, then also save the parent certificates. + + def save_to_file(self, filename, save_parents=True, filep=None): + string = self.save_to_string(save_parents=save_parents) + if filep: + f = filep + else: + f = open(filename, 'w') + f.write(string) + f.close() + + ## + # Save the certificate to a random file in /tmp/ + # @param save_parents If save_parents==True, then also save the parent certificates. + def save_to_random_tmp_file(self, save_parents=True): + fp, filename = mkstemp(suffix='cert', text=True) + fp = os.fdopen(fp, "w") + self.save_to_file(filename, save_parents=True, filep=fp) + return filename + + ## + # Sets the issuer private key and name + # @param key Keypair object containing the private key of the issuer + # @param subject String containing the name of the issuer + # @param cert (optional) Certificate object containing the name of the issuer + + def set_issuer(self, key, subject=None, cert=None): + self.issuerKey = key + if subject: + # it's a mistake to use subject and cert params at the same time + assert(not cert) + if isinstance(subject, dict) or isinstance(subject, str): + req = crypto.X509Req() + reqSubject = req.get_subject() + if (isinstance(subject, dict)): + for key in reqSubject.keys(): + setattr(reqSubject, key, subject[key]) + else: + setattr(reqSubject, "CN", subject) + subject = reqSubject + # subject is not valid once req is out of scope, so save req + self.issuerReq = req + if cert: + # if a cert was supplied, then get the subject from the cert + subject = cert.cert.get_subject() + assert(subject) + self.issuerSubject = subject + + ## + # Get the issuer name + + def get_issuer(self, which="CN"): + x = self.cert.get_issuer() + return getattr(x, which) + + ## + # Set the subject name of the certificate + + def set_subject(self, name): + req = crypto.X509Req() + subj = req.get_subject() + if (isinstance(name, dict)): + for key in name.keys(): + setattr(subj, key, name[key]) + else: + setattr(subj, "CN", name) + self.cert.set_subject(subj) + ## + # Get the subject name of the certificate + + def get_subject(self, which="CN"): + x = self.cert.get_subject() + return getattr(x, which) + + ## + # Get the public key of the certificate. + # + # @param key Keypair object containing the public key + + def set_pubkey(self, key): + assert(isinstance(key, Keypair)) + self.cert.set_pubkey(key.get_openssl_pkey()) + + ## + # Get the public key of the certificate. + # It is returned in the form of a Keypair object. + + def get_pubkey(self): + m2x509 = X509.load_cert_string(self.save_to_string()) + pkey = Keypair() + pkey.key = self.cert.get_pubkey() + pkey.m2key = m2x509.get_pubkey() + return pkey + + def set_intermediate_ca(self, val): + self.intermediate = val + if val: + self.add_extension('basicConstraints', 1, 'CA:TRUE') + + + + ## + # Add an X509 extension to the certificate. Add_extension can only be called + # once for a particular extension name, due to limitations in the underlying + # library. + # + # @param name string containing name of extension + # @param value string containing value of the extension + + def add_extension(self, name, critical, value): + ext = crypto.X509Extension (name, critical, value) + self.cert.add_extensions([ext]) + + ## + # Get an X509 extension from the certificate + + def get_extension(self, name): + # pyOpenSSL does not have a way to get extensions + m2x509 = X509.load_cert_string(self.save_to_string()) + value = m2x509.get_ext(name).get_value() + return value + + ## + # Set_data is a wrapper around add_extension. It stores the parameter str in + # the X509 subject_alt_name extension. Set_data can only be called once, due + # to limitations in the underlying library. + + def set_data(self, str, field='subjectAltName'): + # pyOpenSSL only allows us to add extensions, so if we try to set the + # same extension more than once, it will not work + if self.data.has_key(field): + raise "Cannot set ", field, " more than once" + self.data[field] = str + self.add_extension(field, 0, str) + + ## + # Return the data string that was previously set with set_data + + def get_data(self, field='subjectAltName'): + if self.data.has_key(field): + return self.data[field] + + try: + uri = self.get_extension(field) + self.data[field] = uri + except LookupError: + return None + + return self.data[field] + + ## + # Sign the certificate using the issuer private key and issuer subject previous set with set_issuer(). + + def sign(self): + assert self.cert != None + assert self.issuerSubject != None + assert self.issuerKey != None + self.cert.set_issuer(self.issuerSubject) + self.cert.sign(self.issuerKey.get_openssl_pkey(), self.digest) + + ## + # Verify the authenticity of a certificate. + # @param pkey is a Keypair object representing a public key. If Pkey + # did not sign the certificate, then an exception will be thrown. + + def verify(self, pkey): + # pyOpenSSL does not have a way to verify signatures + m2x509 = X509.load_cert_string(self.save_to_string()) + m2pkey = pkey.get_m2_pkey() + # verify it + return m2x509.verify(m2pkey) + + # XXX alternatively, if openssl has been patched, do the much simpler: + # try: + # self.cert.verify(pkey.get_openssl_key()) + # return 1 + # except: + # return 0 + + ## + # Return True if pkey is identical to the public key that is contained in the certificate. + # @param pkey Keypair object + + def is_pubkey(self, pkey): + return self.get_pubkey().is_same(pkey) + + ## + # Given a certificate cert, verify that this certificate was signed by the + # public key contained in cert. Throw an exception otherwise. + # + # @param cert certificate object + + def is_signed_by_cert(self, cert): + k = cert.get_pubkey() + result = self.verify(k) + return result + + ## + # Set the parent certficiate. + # + # @param p certificate object. + + def set_parent(self, p): + self.parent = p + + ## + # Return the certificate object of the parent of this certificate. + + def get_parent(self): + return self.parent + + ## + # Verification examines a chain of certificates to ensure that each parent + # signs the child, and that some certificate in the chain is signed by a + # trusted certificate. + # + # Verification is a basic recursion:
+    #     if this_certificate was signed by trusted_certs:
+    #         return
+    #     else
+    #         return verify_chain(parent, trusted_certs)
+    # 
+ # + # At each recursion, the parent is tested to ensure that it did sign the + # child. If a parent did not sign a child, then an exception is thrown. If + # the bottom of the recursion is reached and the certificate does not match + # a trusted root, then an exception is thrown. + # + # @param Trusted_certs is a list of certificates that are trusted. + # + + def verify_chain(self, trusted_certs = None): + # Verify a chain of certificates. Each certificate must be signed by + # the public key contained in it's parent. The chain is recursed + # until a certificate is found that is signed by a trusted root. + # TODO: verify expiration time + #print "====Verify Chain=====" + # if this cert is signed by a trusted_cert, then we are set + for trusted_cert in trusted_certs: + #print "***************" + # TODO: verify expiration of trusted_cert ? + #print "CLIENT CERT", self.dump() + #print "TRUSTED CERT", trusted_cert.dump() + #print "Client is signed by Trusted?", self.is_signed_by_cert(trusted_cert) + if self.is_signed_by_cert(trusted_cert): + logger.debug("Cert %s signed by trusted cert %s", self.get_subject(), trusted_cert.get_subject()) + return trusted_cert + + # if there is no parent, then no way to verify the chain + if not self.parent: + #print self.get_subject(), "has no parent" + raise CertMissingParent(self.get_subject()) + + # if it wasn't signed by the parent... + if not self.is_signed_by_cert(self.parent): + #print self.get_subject(), "is not signed by parent" + return CertNotSignedByParent(self.get_subject()) + + # if the parent isn't verified... + self.parent.verify_chain(trusted_certs) + + return diff --git a/sfa/trust/credential.py b/sfa/trust/credential.py new file mode 100644 index 00000000..e082f756 --- /dev/null +++ b/sfa/trust/credential.py @@ -0,0 +1,851 @@ +#---------------------------------------------------------------------- +# Copyright (c) 2008 Board of Trustees, Princeton University +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and/or hardware specification (the "Work") to +# deal in the Work without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Work, and to permit persons to whom the Work +# is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Work. +# +# THE WORK IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE WORK OR THE USE OR OTHER DEALINGS +# IN THE WORK. +#---------------------------------------------------------------------- +## +# Implements SFA Credentials +# +# Credentials are signed XML files that assign a subject gid privileges to an object gid +## + +### $Id: credential.py 18654 2010-08-23 18:54:57Z tmack $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/trust/credential.py $ + +import os +import datetime +from xml.dom.minidom import Document, parseString +from tempfile import mkstemp +from sfa.trust.certificate import Keypair +from sfa.trust.credential_legacy import CredentialLegacy +from sfa.trust.rights import * +from sfa.trust.gid import * +from sfa.util.faults import * + +from sfa.util.sfalogging import logger +from dateutil.parser import parse + + + +# Two years, in seconds +DEFAULT_CREDENTIAL_LIFETIME = 60 * 60 * 24 * 365 * 2 + + +# TODO: +# . make privs match between PG and PL +# . Need to add support for other types of credentials, e.g. tickets + + +signature_template = \ +''' + + + + + + + + + + + + + + + + + + + + + + +''' + +## +# Convert a string into a bool + +def str2bool(str): + if str.lower() in ['yes','true','1']: + return True + return False + + +## +# Utility function to get the text of an XML element + +def getTextNode(element, subele): + sub = element.getElementsByTagName(subele)[0] + if len(sub.childNodes) > 0: + return sub.childNodes[0].nodeValue + else: + return None + +## +# Utility function to set the text of an XML element +# It creates the element, adds the text to it, +# and then appends it to the parent. + +def append_sub(doc, parent, element, text): + ele = doc.createElement(element) + ele.appendChild(doc.createTextNode(text)) + parent.appendChild(ele) + +## +# Signature contains information about an xmlsec1 signature +# for a signed-credential +# + +class Signature(object): + + def __init__(self, string=None): + self.refid = None + self.issuer_gid = None + self.xml = None + if string: + self.xml = string + self.decode() + + + def get_refid(self): + if not self.refid: + self.decode() + return self.refid + + def get_xml(self): + if not self.xml: + self.encode() + return self.xml + + def set_refid(self, id): + self.refid = id + + def get_issuer_gid(self): + if not self.gid: + self.decode() + return self.gid + + def set_issuer_gid(self, gid): + self.gid = gid + + def decode(self): + doc = parseString(self.xml) + sig = doc.getElementsByTagName("Signature")[0] + self.set_refid(sig.getAttribute("xml:id").strip("Sig_")) + keyinfo = sig.getElementsByTagName("X509Data")[0] + szgid = getTextNode(keyinfo, "X509Certificate") + szgid = "-----BEGIN CERTIFICATE-----\n%s\n-----END CERTIFICATE-----" % szgid + self.set_issuer_gid(GID(string=szgid)) + + def encode(self): + self.xml = signature_template % (self.get_refid(), self.get_refid()) + + +## +# A credential provides a caller gid with privileges to an object gid. +# A signed credential is signed by the object's authority. +# +# Credentials are encoded in one of two ways. The legacy style places +# it in the subjectAltName of an X509 certificate. The new credentials +# are placed in signed XML. +# +# WARNING: +# In general, a signed credential obtained externally should +# not be changed else the signature is no longer valid. So, once +# you have loaded an existing signed credential, do not call encode() or sign() on it. + +def filter_creds_by_caller(creds, caller_hrn): + """ + Returns a list of creds who's gid caller matches the + specified caller hrn + """ + if not isinstance(creds, list): creds = [creds] + caller_creds = [] + for cred in creds: + try: + tmp_cred = Credential(string=cred) + if tmp_cred.get_gid_caller().get_hrn() == caller_hrn: + caller_creds.append(cred) + except: pass + return caller_creds + +class Credential(object): + + ## + # Create a Credential object + # + # @param create If true, create a blank x509 certificate + # @param subject If subject!=None, create an x509 cert with the subject name + # @param string If string!=None, load the credential from the string + # @param filename If filename!=None, load the credential from the file + # FIXME: create and subject are ignored! + def __init__(self, create=False, subject=None, string=None, filename=None): + self.gidCaller = None + self.gidObject = None + self.expiration = None + self.privileges = None + self.issuer_privkey = None + self.issuer_gid = None + self.issuer_pubkey = None + self.parent = None + self.signature = None + self.xml = None + self.refid = None + self.legacy = None + + # Check if this is a legacy credential, translate it if so + if string or filename: + if string: + str = string + elif filename: + str = file(filename).read() + + if str.strip().startswith("-----"): + self.legacy = CredentialLegacy(False,string=str) + self.translate_legacy(str) + else: + self.xml = str + self.decode() + + # Find an xmlsec1 path + self.xmlsec_path = '' + paths = ['/usr/bin','/usr/local/bin','/bin','/opt/bin','/opt/local/bin'] + for path in paths: + if os.path.isfile(path + '/' + 'xmlsec1'): + self.xmlsec_path = path + '/' + 'xmlsec1' + break + + def get_subject(self): + if not self.gidObject: + self.decode() + return self.gidObject.get_subject() + + def get_signature(self): + if not self.signature: + self.decode() + return self.signature + + def set_signature(self, sig): + self.signature = sig + + + ## + # Translate a legacy credential into a new one + # + # @param String of the legacy credential + + def translate_legacy(self, str): + legacy = CredentialLegacy(False,string=str) + self.gidCaller = legacy.get_gid_caller() + self.gidObject = legacy.get_gid_object() + lifetime = legacy.get_lifetime() + if not lifetime: + # Default to two years + self.set_lifetime(DEFAULT_CREDENTIAL_LIFETIME) + else: + self.set_lifetime(int(lifetime)) + self.lifeTime = legacy.get_lifetime() + self.set_privileges(legacy.get_privileges()) + self.get_privileges().delegate_all_privileges(legacy.get_delegate()) + + ## + # Need the issuer's private key and name + # @param key Keypair object containing the private key of the issuer + # @param gid GID of the issuing authority + + def set_issuer_keys(self, privkey, gid): + self.issuer_privkey = privkey + self.issuer_gid = gid + + + ## + # Set this credential's parent + def set_parent(self, cred): + self.parent = cred + self.updateRefID() + + ## + # set the GID of the caller + # + # @param gid GID object of the caller + + def set_gid_caller(self, gid): + self.gidCaller = gid + # gid origin caller is the caller's gid by default + self.gidOriginCaller = gid + + ## + # get the GID of the object + + def get_gid_caller(self): + if not self.gidCaller: + self.decode() + return self.gidCaller + + ## + # set the GID of the object + # + # @param gid GID object of the object + + def set_gid_object(self, gid): + self.gidObject = gid + + ## + # get the GID of the object + + def get_gid_object(self): + if not self.gidObject: + self.decode() + return self.gidObject + + ## + # set the lifetime of this credential + # + # @param lifetime lifetime of credential + # . if lifeTime is a datetime object, it is used for the expiration time + # . if lifeTime is an integer value, it is considered the number of seconds + # remaining before expiration + + def set_lifetime(self, lifeTime): + if isinstance(lifeTime, int): + self.expiration = datetime.timedelta(seconds=lifeTime) + datetime.datetime.utcnow() + else: + self.expiration = lifeTime + + ## + # get the lifetime of the credential (in datetime format) + + def get_lifetime(self): + if not self.expiration: + self.decode() + return self.expiration + + + ## + # set the privileges + # + # @param privs either a comma-separated list of privileges of a RightList object + + def set_privileges(self, privs): + if isinstance(privs, str): + self.privileges = RightList(string = privs) + else: + self.privileges = privs + + + ## + # return the privileges as a RightList object + + def get_privileges(self): + if not self.privileges: + self.decode() + return self.privileges + + ## + # determine whether the credential allows a particular operation to be + # performed + # + # @param op_name string specifying name of operation ("lookup", "update", etc) + + def can_perform(self, op_name): + rights = self.get_privileges() + + if not rights: + return False + + return rights.can_perform(op_name) + + + ## + # Encode the attributes of the credential into an XML string + # This should be done immediately before signing the credential. + # WARNING: + # In general, a signed credential obtained externally should + # not be changed else the signature is no longer valid. So, once + # you have loaded an existing signed credential, do not call encode() or sign() on it. + + def encode(self): + # Create the XML document + doc = Document() + signed_cred = doc.createElement("signed-credential") + doc.appendChild(signed_cred) + + # Fill in the bit + cred = doc.createElement("credential") + cred.setAttribute("xml:id", self.get_refid()) + signed_cred.appendChild(cred) + append_sub(doc, cred, "type", "privilege") + append_sub(doc, cred, "serial", "8") + append_sub(doc, cred, "owner_gid", self.gidCaller.save_to_string()) + append_sub(doc, cred, "owner_urn", self.gidCaller.get_urn()) + append_sub(doc, cred, "target_gid", self.gidObject.save_to_string()) + append_sub(doc, cred, "target_urn", self.gidObject.get_urn()) + append_sub(doc, cred, "uuid", "") + if not self.expiration: + self.set_lifetime(DEFAULT_CREDENTIAL_LIFETIME) + self.expiration = self.expiration.replace(microsecond=0) + append_sub(doc, cred, "expires", self.expiration.isoformat()) + privileges = doc.createElement("privileges") + cred.appendChild(privileges) + + if self.privileges: + rights = self.get_privileges() + for right in rights.rights: + priv = doc.createElement("privilege") + append_sub(doc, priv, "name", right.kind) + append_sub(doc, priv, "can_delegate", str(right.delegate).lower()) + privileges.appendChild(priv) + + # Add the parent credential if it exists + if self.parent: + sdoc = parseString(self.parent.get_xml()) + p_cred = doc.importNode(sdoc.getElementsByTagName("credential")[0], True) + p = doc.createElement("parent") + p.appendChild(p_cred) + cred.appendChild(p) + + + # Create the tag + signatures = doc.createElement("signatures") + signed_cred.appendChild(signatures) + + # Add any parent signatures + if self.parent: + for cur_cred in self.get_credential_list()[1:]: + sdoc = parseString(cur_cred.get_signature().get_xml()) + ele = doc.importNode(sdoc.getElementsByTagName("Signature")[0], True) + signatures.appendChild(ele) + + # Get the finished product + self.xml = doc.toxml() + + + def save_to_random_tmp_file(self): + fp, filename = mkstemp(suffix='cred', text=True) + fp = os.fdopen(fp, "w") + self.save_to_file(filename, save_parents=True, filep=fp) + return filename + + def save_to_file(self, filename, save_parents=True, filep=None): + if not self.xml: + self.encode() + if filep: + f = filep + else: + f = open(filename, "w") + f.write(self.xml) + f.close() + + def save_to_string(self, save_parents=True): + if not self.xml: + self.encode() + return self.xml + + def get_refid(self): + if not self.refid: + self.refid = 'ref0' + return self.refid + + def set_refid(self, rid): + self.refid = rid + + ## + # Figure out what refids exist, and update this credential's id + # so that it doesn't clobber the others. Returns the refids of + # the parents. + + def updateRefID(self): + if not self.parent: + self.set_refid('ref0') + return [] + + refs = [] + + next_cred = self.parent + while next_cred: + refs.append(next_cred.get_refid()) + if next_cred.parent: + next_cred = next_cred.parent + else: + next_cred = None + + + # Find a unique refid for this credential + rid = self.get_refid() + while rid in refs: + val = int(rid[3:]) + rid = "ref%d" % (val + 1) + + # Set the new refid + self.set_refid(rid) + + # Return the set of parent credential ref ids + return refs + + def get_xml(self): + if not self.xml: + self.encode() + return self.xml + + ## + # Sign the XML file created by encode() + # + # WARNING: + # In general, a signed credential obtained externally should + # not be changed else the signature is no longer valid. So, once + # you have loaded an existing signed credential, do not call encode() or sign() on it. + + def sign(self): + if not self.issuer_privkey or not self.issuer_gid: + return + doc = parseString(self.get_xml()) + sigs = doc.getElementsByTagName("signatures")[0] + + # Create the signature template to be signed + signature = Signature() + signature.set_refid(self.get_refid()) + sdoc = parseString(signature.get_xml()) + sig_ele = doc.importNode(sdoc.getElementsByTagName("Signature")[0], True) + sigs.appendChild(sig_ele) + + self.xml = doc.toxml() + + + # Split the issuer GID into multiple certificates if it's a chain + chain = GID(filename=self.issuer_gid) + gid_files = [] + while chain: + gid_files.append(chain.save_to_random_tmp_file(False)) + if chain.get_parent(): + chain = chain.get_parent() + else: + chain = None + + + # Call out to xmlsec1 to sign it + ref = 'Sig_%s' % self.get_refid() + filename = self.save_to_random_tmp_file() + signed = os.popen('%s --sign --node-id "%s" --privkey-pem %s,%s %s' \ + % (self.xmlsec_path, ref, self.issuer_privkey, ",".join(gid_files), filename)).read() + os.remove(filename) + + for gid_file in gid_files: + os.remove(gid_file) + + self.xml = signed + + # This is no longer a legacy credential + if self.legacy: + self.legacy = None + + # Update signatures + self.decode() + + + ## + # Retrieve the attributes of the credential from the XML. + # This is automatically called by the various get_* methods of + # this class and should not need to be called explicitly. + + def decode(self): + if not self.xml: + return + doc = parseString(self.xml) + sigs = [] + signed_cred = doc.getElementsByTagName("signed-credential") + + # Is this a signed-cred or just a cred? + if len(signed_cred) > 0: + cred = signed_cred[0].getElementsByTagName("credential")[0] + signatures = signed_cred[0].getElementsByTagName("signatures") + if len(signatures) > 0: + sigs = signatures[0].getElementsByTagName("Signature") + else: + cred = doc.getElementsByTagName("credential")[0] + + + self.set_refid(cred.getAttribute("xml:id")) + self.set_lifetime(parse(getTextNode(cred, "expires"))) + self.gidCaller = GID(string=getTextNode(cred, "owner_gid")) + self.gidObject = GID(string=getTextNode(cred, "target_gid")) + + + # Process privileges + privs = cred.getElementsByTagName("privileges")[0] + rlist = RightList() + for priv in privs.getElementsByTagName("privilege"): + kind = getTextNode(priv, "name") + deleg = str2bool(getTextNode(priv, "can_delegate")) + if kind == '*': + # Convert * into the default privileges for the credential's type + _ , type = urn_to_hrn(self.gidObject.get_urn()) + rl = rlist.determine_rights(type, self.gidObject.get_urn()) + for r in rl.rights: + rlist.add(r) + else: + rlist.add(Right(kind.strip(), deleg)) + self.set_privileges(rlist) + + + # Is there a parent? + parent = cred.getElementsByTagName("parent") + if len(parent) > 0: + parent_doc = parent[0].getElementsByTagName("credential")[0] + parent_xml = parent_doc.toxml() + self.parent = Credential(string=parent_xml) + self.updateRefID() + + # Assign the signatures to the credentials + for sig in sigs: + Sig = Signature(string=sig.toxml()) + + for cur_cred in self.get_credential_list(): + if cur_cred.get_refid() == Sig.get_refid(): + cur_cred.set_signature(Sig) + + + ## + # Verify + # trusted_certs: A list of trusted GID filenames (not GID objects!) + # Chaining is not supported within the GIDs by xmlsec1. + # + # Verify that: + # . All of the signatures are valid and that the issuers trace back + # to trusted roots (performed by xmlsec1) + # . The XML matches the credential schema + # . That the issuer of the credential is the authority in the target's urn + # . In the case of a delegated credential, this must be true of the root + # . That all of the gids presented in the credential are valid + # . The credential is not expired + # + # -- For Delegates (credentials with parents) + # . The privileges must be a subset of the parent credentials + # . The privileges must have "can_delegate" set for each delegated privilege + # . The target gid must be the same between child and parents + # . The expiry time on the child must be no later than the parent + # . The signer of the child must be the owner of the parent + # + # -- Verify does *NOT* + # . ensure that an xmlrpc client's gid matches a credential gid, that + # must be done elsewhere + # + # @param trusted_certs: The certificates of trusted CA certificates + def verify(self, trusted_certs): + if not self.xml: + self.decode() + +# trusted_cert_objects = [GID(filename=f) for f in trusted_certs] + trusted_cert_objects = [] + ok_trusted_certs = [] + for f in trusted_certs: + try: + # Failures here include unreadable files + # or non PEM files + trusted_cert_objects.append(GID(filename=f)) + ok_trusted_certs.append(f) + except Exception, exc: + logger.error("Failed to load trusted cert from %s: %r", f, exc) + trusted_certs = ok_trusted_certs + + # Use legacy verification if this is a legacy credential + if self.legacy: + self.legacy.verify_chain(trusted_cert_objects) + if self.legacy.client_gid: + self.legacy.client_gid.verify_chain(trusted_cert_objects) + if self.legacy.object_gid: + self.legacy.object_gid.verify_chain(trusted_cert_objects) + return True + + # make sure it is not expired + if self.get_lifetime() < datetime.datetime.utcnow(): + raise CredentialNotVerifiable("Credential expired at %s" % self.expiration.isoformat()) + + # Verify the signatures + filename = self.save_to_random_tmp_file() + cert_args = " ".join(['--trusted-pem %s' % x for x in trusted_certs]) + + # Verify the gids of this cred and of its parents + for cur_cred in self.get_credential_list(): + cur_cred.get_gid_object().verify_chain(trusted_cert_objects) + cur_cred.get_gid_caller().verify_chain(trusted_cert_objects) + + refs = [] + refs.append("Sig_%s" % self.get_refid()) + + parentRefs = self.updateRefID() + for ref in parentRefs: + refs.append("Sig_%s" % ref) + + for ref in refs: + verified = os.popen('%s --verify --node-id "%s" %s %s 2>&1' \ + % (self.xmlsec_path, ref, cert_args, filename)).read() + if not verified.strip().startswith("OK"): + raise CredentialNotVerifiable("xmlsec1 error verifying cert: " + verified) + os.remove(filename) + + # Verify the parents (delegation) + if self.parent: + self.verify_parent(self.parent) + + # Make sure the issuer is the target's authority + self.verify_issuer() + return True + + ## + # Creates a list of the credential and its parents, with the root + # (original delegated credential) as the last item in the list + def get_credential_list(self): + cur_cred = self + list = [] + while cur_cred: + list.append(cur_cred) + if cur_cred.parent: + cur_cred = cur_cred.parent + else: + cur_cred = None + return list + + ## + # Make sure the credential's target gid was signed by (or is the same) the entity that signed + # the original credential or an authority over that namespace. + def verify_issuer(self): + root_cred = self.get_credential_list()[-1] + root_target_gid = root_cred.get_gid_object() + root_cred_signer = root_cred.get_signature().get_issuer_gid() + + if root_target_gid.is_signed_by_cert(root_cred_signer): + # cred signer matches target signer, return success + return + + root_target_gid_str = root_target_gid.save_to_string() + root_cred_signer_str = root_cred_signer.save_to_string() + if root_target_gid_str == root_cred_signer_str: + # cred signer is target, return success + return + + # See if it the signer is an authority over the domain of the target + # Maybe should be (hrn, type) = urn_to_hrn(root_cred_signer.get_urn()) + root_cred_signer_type = root_cred_signer.get_type() + if (root_cred_signer_type == 'authority'): + #logger.debug('Cred signer is an authority') + # signer is an authority, see if target is in authority's domain + hrn = root_cred_signer.get_hrn() + if root_target_gid.get_hrn().startswith(hrn): + return + + # We've required that the credential be signed by an authority + # for that domain. Reasonable and probably correct. + # A looser model would also allow the signer to be an authority + # in my control framework - eg My CA or CH. Even if it is not + # the CH that issued these, eg, user credentials. + + # Give up, credential does not pass issuer verification + + raise CredentialNotVerifiable("Could not verify credential owned by %s for object %s. Cred signer %s not the trusted authority for Cred target %s" % (self.gidCaller.get_urn(), self.gidObject.get_urn(), root_cred_signer.get_hrn(), root_target_gid.get_hrn())) + + + ## + # -- For Delegates (credentials with parents) verify that: + # . The privileges must be a subset of the parent credentials + # . The privileges must have "can_delegate" set for each delegated privilege + # . The target gid must be the same between child and parents + # . The expiry time on the child must be no later than the parent + # . The signer of the child must be the owner of the parent + def verify_parent(self, parent_cred): + # make sure the rights given to the child are a subset of the + # parents rights (and check delegate bits) + if not parent_cred.get_privileges().is_superset(self.get_privileges()): + raise ChildRightsNotSubsetOfParent( + self.parent.get_privileges().save_to_string() + " " + + self.get_privileges().save_to_string()) + + # make sure my target gid is the same as the parent's + if not parent_cred.get_gid_object().save_to_string() == \ + self.get_gid_object().save_to_string(): + raise CredentialNotVerifiable("Target gid not equal between parent and child") + + # make sure my expiry time is <= my parent's + if not parent_cred.get_lifetime() >= self.get_lifetime(): + raise CredentialNotVerifiable("Delegated credential expires after parent") + + # make sure my signer is the parent's caller + if not parent_cred.get_gid_caller().save_to_string(False) == \ + self.get_signature().get_issuer_gid().save_to_string(False): + raise CredentialNotVerifiable("Delegated credential not signed by parent caller") + + # Recurse + if parent_cred.parent: + parent_cred.verify_parent(parent_cred.parent) + + + def delegate(self, delegee_gidfile, caller_keyfile, caller_gidfile): + """ + Return a delegated copy of this credential, delegated to the + specified gid's user. + """ + # get the gid of the object we are delegating + object_gid = self.get_gid_object() + object_hrn = object_gid.get_hrn() + + # the hrn of the user who will be delegated to + delegee_gid = GID(filename=delegee_gidfile) + delegee_hrn = delegee_gid.get_hrn() + + #user_key = Keypair(filename=keyfile) + #user_hrn = self.get_gid_caller().get_hrn() + subject_string = "%s delegated to %s" % (object_hrn, delegee_hrn) + dcred = Credential(subject=subject_string) + dcred.set_gid_caller(delegee_gid) + dcred.set_gid_object(object_gid) + dcred.set_parent(self) + dcred.set_lifetime(self.get_lifetime()) + dcred.set_privileges(self.get_privileges()) + dcred.get_privileges().delegate_all_privileges(True) + #dcred.set_issuer_keys(keyfile, delegee_gidfile) + dcred.set_issuer_keys(caller_keyfile, caller_gidfile) + dcred.encode() + dcred.sign() + + return dcred + ## + # Dump the contents of a credential to stdout in human-readable format + # + # @param dump_parents If true, also dump the parent certificates + + def dump(self, dump_parents=False): + print "CREDENTIAL", self.get_subject() + + print " privs:", self.get_privileges().save_to_string() + + print " gidCaller:" + gidCaller = self.get_gid_caller() + if gidCaller: + gidCaller.dump(8, dump_parents) + + print " gidObject:" + gidObject = self.get_gid_object() + if gidObject: + gidObject.dump(8, dump_parents) + + + if self.parent and dump_parents: + print "PARENT", + self.parent.dump_parents() + diff --git a/sfa/trust/credential_legacy.py b/sfa/trust/credential_legacy.py new file mode 100644 index 00000000..c33ed6f3 --- /dev/null +++ b/sfa/trust/credential_legacy.py @@ -0,0 +1,247 @@ +## +# Implements SFA Credentials +# +# Credentials are layered on top of certificates, and are essentially a +# certificate that stores a tuple of parameters. +## + +### $Id: credential.py 17477 2010-03-25 16:49:34Z jkarlin $ +### $URL: svn+ssh://svn.planet-lab.org/svn/sfa/branches/geni-api/sfa/trust/credential.py $ + +import xmlrpclib + +from sfa.trust.certificate import Certificate +from sfa.trust.rights import * +from sfa.trust.gid import * +from sfa.util.faults import * +from sfa.util.sfalogging import * + +## +# Credential is a tuple: +# (GIDCaller, GIDObject, LifeTime, Privileges, Delegate) +# +# These fields are encoded using xmlrpc into the subjectAltName field of the +# x509 certificate. Note: Call encode() once the fields have been filled in +# to perform this encoding. + +class CredentialLegacy(Certificate): + gidCaller = None + gidObject = None + lifeTime = None + privileges = None + delegate = False + + ## + # Create a Credential object + # + # @param create If true, create a blank x509 certificate + # @param subject If subject!=None, create an x509 cert with the subject name + # @param string If string!=None, load the credential from the string + # @param filename If filename!=None, load the credential from the file + + def __init__(self, create=False, subject=None, string=None, filename=None): + Certificate.__init__(self, create, subject, string, filename) + + ## + # set the GID of the caller + # + # @param gid GID object of the caller + + def set_gid_caller(self, gid): + self.gidCaller = gid + # gid origin caller is the caller's gid by default + self.gidOriginCaller = gid + + ## + # get the GID of the object + + def get_gid_caller(self): + if not self.gidCaller: + self.decode() + return self.gidCaller + + ## + # set the GID of the object + # + # @param gid GID object of the object + + def set_gid_object(self, gid): + self.gidObject = gid + + ## + # get the GID of the object + + def get_gid_object(self): + if not self.gidObject: + self.decode() + return self.gidObject + + ## + # set the lifetime of this credential + # + # @param lifetime lifetime of credential + + def set_lifetime(self, lifeTime): + self.lifeTime = lifeTime + + ## + # get the lifetime of the credential + + def get_lifetime(self): + if not self.lifeTime: + self.decode() + return self.lifeTime + + ## + # set the delegate bit + # + # @param delegate boolean (True or False) + + def set_delegate(self, delegate): + self.delegate = delegate + + ## + # get the delegate bit + + def get_delegate(self): + if not self.delegate: + self.decode() + return self.delegate + + ## + # set the privileges + # + # @param privs either a comma-separated list of privileges of a RightList object + + def set_privileges(self, privs): + if isinstance(privs, str): + self.privileges = RightList(string = privs) + else: + self.privileges = privs + + ## + # return the privileges as a RightList object + + def get_privileges(self): + if not self.privileges: + self.decode() + return self.privileges + + ## + # determine whether the credential allows a particular operation to be + # performed + # + # @param op_name string specifying name of operation ("lookup", "update", etc) + + def can_perform(self, op_name): + rights = self.get_privileges() + if not rights: + return False + return rights.can_perform(op_name) + + ## + # Encode the attributes of the credential into a string and store that + # string in the alt-subject-name field of the X509 object. This should be + # done immediately before signing the credential. + + def encode(self): + dict = {"gidCaller": None, + "gidObject": None, + "lifeTime": self.lifeTime, + "privileges": None, + "delegate": self.delegate} + if self.gidCaller: + dict["gidCaller"] = self.gidCaller.save_to_string(save_parents=True) + if self.gidObject: + dict["gidObject"] = self.gidObject.save_to_string(save_parents=True) + if self.privileges: + dict["privileges"] = self.privileges.save_to_string() + str = xmlrpclib.dumps((dict,), allow_none=True) + self.set_data('URI:http://' + str) + + ## + # Retrieve the attributes of the credential from the alt-subject-name field + # of the X509 certificate. This is automatically done by the various + # get_* methods of this class and should not need to be called explicitly. + + def decode(self): + data = self.get_data().lstrip('URI:http://') + + if data: + dict = xmlrpclib.loads(data)[0][0] + else: + dict = {} + + self.lifeTime = dict.get("lifeTime", None) + self.delegate = dict.get("delegate", None) + + privStr = dict.get("privileges", None) + if privStr: + self.privileges = RightList(string = privStr) + else: + self.privileges = None + + gidCallerStr = dict.get("gidCaller", None) + if gidCallerStr: + self.gidCaller = GID(string=gidCallerStr) + else: + self.gidCaller = None + + gidObjectStr = dict.get("gidObject", None) + if gidObjectStr: + self.gidObject = GID(string=gidObjectStr) + else: + self.gidObject = None + + ## + # Verify that a chain of credentials is valid (see cert.py:verify). In + # addition to the checks for ordinary certificates, verification also + # ensures that the delegate bit was set by each parent in the chain. If + # a delegate bit was not set, then an exception is thrown. + # + # Each credential must be a subset of the rights of the parent. + + def verify_chain(self, trusted_certs = None): + # do the normal certificate verification stuff + Certificate.verify_chain(self, trusted_certs) + + if self.parent: + # make sure the parent delegated rights to the child + if not self.parent.get_delegate(): + raise MissingDelegateBit(self.parent.get_subject()) + + # make sure the rights given to the child are a subset of the + # parents rights + if not self.parent.get_privileges().is_superset(self.get_privileges()): + raise ChildRightsNotSubsetOfParent(self.get_subject() + + " " + self.parent.get_privileges().save_to_string() + + " " + self.get_privileges().save_to_string()) + + return + + ## + # Dump the contents of a credential to stdout in human-readable format + # + # @param dump_parents If true, also dump the parent certificates + + def dump(self, dump_parents=False): + print "CREDENTIAL", self.get_subject() + + print " privs:", self.get_privileges().save_to_string() + + print " gidCaller:" + gidCaller = self.get_gid_caller() + if gidCaller: + gidCaller.dump(8, dump_parents) + + print " gidObject:" + gidObject = self.get_gid_object() + if gidObject: + gidObject.dump(8, dump_parents) + + print " delegate:", self.get_delegate() + + if self.parent and dump_parents: + print "PARENT", + self.parent.dump(dump_parents) + diff --git a/sfa/trust/gid.py b/sfa/trust/gid.py new file mode 100644 index 00000000..05b58f98 --- /dev/null +++ b/sfa/trust/gid.py @@ -0,0 +1,219 @@ +#---------------------------------------------------------------------- +# Copyright (c) 2008 Board of Trustees, Princeton University +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and/or hardware specification (the "Work") to +# deal in the Work without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Work, and to permit persons to whom the Work +# is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Work. +# +# THE WORK IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE WORK OR THE USE OR OTHER DEALINGS +# IN THE WORK. +#---------------------------------------------------------------------- +## +# Implements SFA GID. GIDs are based on certificates, and the GID class is a +# descendant of the certificate class. +## + +### $Id: gid.py 18510 2010-07-13 18:32:48Z tmack $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/trust/gid.py $ +import xmlrpclib +import uuid +from sfa.trust.certificate import Certificate +from sfa.util.namespace import * +from sfa.util.sfalogging import logger + +## +# Create a new uuid. Returns the UUID as a string. + +def create_uuid(): + return str(uuid.uuid4().int) + +## +# GID is a tuple: +# (uuid, urn, public_key) +# +# UUID is a unique identifier and is created by the python uuid module +# (or the utility function create_uuid() in gid.py). +# +# HRN is a human readable name. It is a dotted form similar to a backward domain +# name. For example, planetlab.us.arizona.bakers. +# +# URN is a human readable identifier of form: +# "urn:publicid:IDN+toplevelauthority[:sub-auth.]*[\res. type]\ +object name" +# For example, urn:publicid:IDN+planetlab:us:arizona+user+bakers +# +# PUBLIC_KEY is the public key of the principal identified by the UUID/HRN. +# It is a Keypair object as defined in the cert.py module. +# +# It is expected that there is a one-to-one pairing between UUIDs and HRN, +# but it is uncertain how this would be inforced or if it needs to be enforced. +# +# These fields are encoded using xmlrpc into the subjectAltName field of the +# x509 certificate. Note: Call encode() once the fields have been filled in +# to perform this encoding. + + +class GID(Certificate): + uuid = None + hrn = None + urn = None + + ## + # Create a new GID object + # + # @param create If true, create the X509 certificate + # @param subject If subject!=None, create the X509 cert and set the subject name + # @param string If string!=None, load the GID from a string + # @param filename If filename!=None, load the GID from a file + + def __init__(self, create=False, subject=None, string=None, filename=None, uuid=None, hrn=None, urn=None): + + Certificate.__init__(self, create, subject, string, filename) + if subject: + logger.debug("Creating GID for subject: %s" % subject) + if uuid: + self.uuid = int(uuid) + if hrn: + self.hrn = hrn + self.urn = hrn_to_urn(hrn, 'unknown') + if urn: + self.urn = urn + self.hrn, type = urn_to_hrn(urn) + + def set_uuid(self, uuid): + if isinstance(uuid, str): + self.uuid = int(uuid) + else: + self.uuid = uuid + + def get_uuid(self): + if not self.uuid: + self.decode() + return self.uuid + + def set_hrn(self, hrn): + self.hrn = hrn + + def get_hrn(self): + if not self.hrn: + self.decode() + return self.hrn + + def set_urn(self, urn): + self.urn = urn + self.hrn, type = urn_to_hrn(urn) + + def get_urn(self): + if not self.urn: + self.decode() + return self.urn + + def get_type(self): + if not self.urn: + self.decode() + _, t = urn_to_hrn(self.urn) + return t + + ## + # Encode the GID fields and package them into the subject-alt-name field + # of the X509 certificate. This must be called prior to signing the + # certificate. It may only be called once per certificate. + + def encode(self): + if self.urn: + urn = self.urn + else: + urn = hrn_to_urn(self.hrn, None) + + str = "URI:" + urn + + if self.uuid: + str += ", " + "URI:" + uuid.UUID(int=self.uuid).urn + + self.set_data(str, 'subjectAltName') + + + + + ## + # Decode the subject-alt-name field of the X509 certificate into the + # fields of the GID. This is automatically called by the various get_*() + # functions in this class. + + def decode(self): + data = self.get_data('subjectAltName') + dict = {} + if data: + if data.lower().startswith('uri:http://'): + dict = xmlrpclib.loads(data[11:])[0][0] + else: + spl = data.split(', ') + for val in spl: + if val.lower().startswith('uri:urn:uuid:'): + dict['uuid'] = uuid.UUID(val[4:]).int + elif val.lower().startswith('uri:urn:publicid:idn+'): + dict['urn'] = val[4:] + + self.uuid = dict.get("uuid", None) + self.urn = dict.get("urn", None) + self.hrn = dict.get("hrn", None) + if self.urn: + self.hrn = urn_to_hrn(self.urn)[0] + + ## + # Dump the credential to stdout. + # + # @param indent specifies a number of spaces to indent the output + # @param dump_parents If true, also dump the parents of the GID + + def dump(self, indent=0, dump_parents=False): + print " "*indent, " hrn:", self.get_hrn() + print " "*indent, " urn:", self.get_urn() + print " "*indent, "uuid:", self.get_uuid() + + if self.parent and dump_parents: + print " "*indent, "parent:" + self.parent.dump(indent+4, dump_parents) + + ## + # Verify the chain of authenticity of the GID. First perform the checks + # of the certificate class (verifying that each parent signs the child, + # etc). In addition, GIDs also confirm that the parent's HRN is a prefix + # of the child's HRN. + # + # Verifying these prefixes prevents a rogue authority from signing a GID + # for a principal that is not a member of that authority. For example, + # planetlab.us.arizona cannot sign a GID for planetlab.us.princeton.foo. + + def verify_chain(self, trusted_certs = None): + # do the normal certificate verification stuff + trusted_root = Certificate.verify_chain(self, trusted_certs) + + if self.parent: + # make sure the parent's hrn is a prefix of the child's hrn + if not self.get_hrn().startswith(self.parent.get_hrn()): + #print self.get_hrn(), " ", self.parent.get_hrn() + raise GidParentHrn("This cert %s HRN doesnt start with parent HRN %s" % (self.get_hrn(), self.parent.get_hrn())) + else: + # make sure that the trusted root's hrn is a prefix of the child's + trusted_gid = GID(string=trusted_root.save_to_string()) + trusted_type = trusted_gid.get_type() + trusted_hrn = trusted_gid.get_hrn() + #if trusted_type == 'authority': + # trusted_hrn = trusted_hrn[:trusted_hrn.rindex('.')] + cur_hrn = self.get_hrn() + if not self.get_hrn().startswith(trusted_hrn): + raise GidParentHrn("Trusted roots HRN %s isnt start of this cert %s" % (trusted_hrn, cur_hrn)) + + return diff --git a/sfa/trust/hierarchy.py b/sfa/trust/hierarchy.py new file mode 100644 index 00000000..2515a0aa --- /dev/null +++ b/sfa/trust/hierarchy.py @@ -0,0 +1,364 @@ +## +# This module implements a hierarchy of authorities and performs a similar +# function as the "tree" module of the original SFA prototype. An HRN +# is assumed to be a string of authorities separated by dots. For example, +# "planetlab.us.arizona.bakers". Each component of the HRN is a different +# authority, with the last component being a leaf in the tree. +# +# Each authority is stored in a subdirectory on the registry. Inside this +# subdirectory are several files: +# *.GID - GID file +# *.PKEY - private key file +# *.DBINFO - database info +## + +### $Id: hierarchy.py 18243 2010-06-10 18:16:05Z tmack $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/trust/hierarchy.py $ + +import os + +from sfa.util.report import * +from sfa.trust.certificate import Keypair +from sfa.trust.credential import * +from sfa.trust.gid import GID, create_uuid +from sfa.util.namespace import * +from sfa.util.config import Config +from sfa.util.sfaticket import SfaTicket + +## +# The AuthInfo class contains the information for an authority. This information +# includes the GID, private key, and database connection information. + +class AuthInfo: + hrn = None + gid_object = None + gid_filename = None + privkey_filename = None + dbinfo_filename = None + + ## + # Initialize and authority object. + # + # @param xrn the human readable name of the authority (urn will be converted to hrn) + # @param gid_filename the filename containing the GID + # @param privkey_filename the filename containing the private key + # @param dbinfo_filename the filename containing the database info + + def __init__(self, xrn, gid_filename, privkey_filename, dbinfo_filename): + hrn, type = urn_to_hrn(xrn) + self.hrn = hrn + self.set_gid_filename(gid_filename) + self.privkey_filename = privkey_filename + self.dbinfo_filename = dbinfo_filename + + ## + # Set the filename of the GID + # + # @param fn filename of file containing GID + + def set_gid_filename(self, fn): + self.gid_filename = fn + self.gid_object = None + + def get_privkey_filename(self): + return self.privkey_filename + + def get_gid_filename(self): + return self.gid_filename + + ## + # Get the GID in the form of a GID object + + def get_gid_object(self): + if not self.gid_object: + self.gid_object = GID(filename = self.gid_filename) + return self.gid_object + + ## + # Get the private key in the form of a Keypair object + + def get_pkey_object(self): + return Keypair(filename = self.privkey_filename) + + ## + # Get the dbinfo in the form of a dictionary + + def get_dbinfo(self): + f = file(self.dbinfo_filename) + dict = eval(f.read()) + f.close() + return dict + + ## + # Replace the GID with a new one. The file specified by gid_filename is + # overwritten with the new GID object + # + # @param gid object containing new GID + + def update_gid_object(self, gid): + gid.save_to_file(self.gid_filename) + self.gid_object = gid + +## +# The Hierarchy class is responsible for managing the tree of authorities. +# Each authority is a node in the tree and exists as an AuthInfo object. +# +# The tree is stored on disk in a hierarchical manner than reflects the +# structure of the tree. Each authority is a subdirectory, and each subdirectory +# contains the GID, pkey, and dbinfo files for that authority (as well as +# subdirectories for each sub-authority) + +class Hierarchy: + ## + # Create the hierarchy object. + # + # @param basedir the base directory to store the hierarchy in + + def __init__(self, basedir = None): + if not basedir: + self.config = Config() + basedir = os.path.join(self.config.SFA_DATA_DIR, "authorities") + self.basedir = basedir + ## + # Given a hrn, return the filenames of the GID, private key, and dbinfo + # files. + # + # @param xrn the human readable name of the authority (urn will be convertd to hrn) + + def get_auth_filenames(self, xrn): + hrn, type = urn_to_hrn(xrn) + leaf = get_leaf(hrn) + parent_hrn = get_authority(hrn) + directory = os.path.join(self.basedir, hrn.replace(".", "/")) + + gid_filename = os.path.join(directory, leaf+".gid") + privkey_filename = os.path.join(directory, leaf+".pkey") + dbinfo_filename = os.path.join(directory, leaf+".dbinfo") + + return (directory, gid_filename, privkey_filename, dbinfo_filename) + + ## + # Check to see if an authority exists. An authority exists if it's disk + # files exist. + # + # @param the human readable name of the authority to check + + def auth_exists(self, xrn): + hrn, type = urn_to_hrn(xrn) + (directory, gid_filename, privkey_filename, dbinfo_filename) = \ + self.get_auth_filenames(hrn) + + return os.path.exists(gid_filename) and \ + os.path.exists(privkey_filename) and \ + os.path.exists(dbinfo_filename) + + ## + # Create an authority. A private key for the authority and the associated + # GID are created and signed by the parent authority. + # + # @param xrn the human readable name of the authority to create (urn will be converted to hrn) + # @param create_parents if true, also create the parents if they do not exist + + def create_auth(self, xrn, create_parents=False): + hrn, type = urn_to_hrn(xrn) + trace("Hierarchy: creating authority: " + hrn) + + # create the parent authority if necessary + parent_hrn = get_authority(hrn) + parent_urn = hrn_to_urn(parent_hrn, 'authority') + if (parent_hrn) and (not self.auth_exists(parent_urn)) and (create_parents): + self.create_auth(parent_urn, create_parents) + + (directory, gid_filename, privkey_filename, dbinfo_filename) = \ + self.get_auth_filenames(hrn) + + # create the directory to hold the files + try: + os.makedirs(directory) + # if the path already exists then pass + except OSError, (errno, strerr): + if errno == 17: + pass + + if os.path.exists(privkey_filename): + print "using existing key", privkey_filename, "for authority", hrn + pkey = Keypair(filename = privkey_filename) + else: + pkey = Keypair(create = True) + pkey.save_to_file(privkey_filename) + + gid = self.create_gid(xrn, create_uuid(), pkey) + gid.save_to_file(gid_filename, save_parents=True) + + # XXX TODO: think up a better way for the dbinfo to work + + dbinfo = Config().get_plc_dbinfo() + dbinfo_file = file(dbinfo_filename, "w") + dbinfo_file.write(str(dbinfo)) + dbinfo_file.close() + + ## + # Return the AuthInfo object for the specified authority. If the authority + # does not exist, then an exception is thrown. As a side effect, disk files + # and a subdirectory may be created to store the authority. + # + # @param xrn the human readable name of the authority to create (urn will be converted to hrn). + + def get_auth_info(self, xrn): + + #trace("Hierarchy: getting authority: " + hrn) + hrn, type = urn_to_hrn(xrn) + if not self.auth_exists(hrn): + raise MissingAuthority(hrn) + + (directory, gid_filename, privkey_filename, dbinfo_filename) = \ + self.get_auth_filenames(hrn) + + auth_info = AuthInfo(hrn, gid_filename, privkey_filename, dbinfo_filename) + + # check the GID and see if it needs to be refreshed + gid = auth_info.get_gid_object() + gid_refreshed = self.refresh_gid(gid) + if gid != gid_refreshed: + auth_info.update_gid_object(gid_refreshed) + + return auth_info + + ## + # Create a new GID. The GID will be signed by the authority that is it's + # immediate parent in the hierarchy (and recursively, the parents' GID + # will be signed by its parent) + # + # @param hrn the human readable name to store in the GID + # @param uuid the unique identifier to store in the GID + # @param pkey the public key to store in the GID + + def create_gid(self, xrn, uuid, pkey): + hrn, type = urn_to_hrn(xrn) + # Using hrn_to_urn() here to make sure the urn is in the right format + # If xrn was a hrn instead of a urn, then the gid's urn will be + # of type None + urn = hrn_to_urn(hrn, type) + gid = GID(subject=hrn, uuid=uuid, hrn=hrn, urn=urn) + + parent_hrn = get_authority(hrn) + if not parent_hrn or hrn == self.config.SFA_INTERFACE_HRN: + # if there is no parent hrn, then it must be self-signed. this + # is where we terminate the recursion + gid.set_issuer(pkey, hrn) + else: + # we need the parent's private key in order to sign this GID + parent_auth_info = self.get_auth_info(parent_hrn) + gid.set_issuer(parent_auth_info.get_pkey_object(), parent_auth_info.hrn) + gid.set_parent(parent_auth_info.get_gid_object()) + gid.set_intermediate_ca(True) + + gid.set_pubkey(pkey) + gid.encode() + gid.sign() + + return gid + + ## + # Refresh a GID. The primary use of this function is to refresh the + # the expiration time of the GID. It may also be used to change the HRN, + # UUID, or Public key of the GID. + # + # @param gid the GID to refresh + # @param hrn if !=None, change the hrn + # @param uuid if !=None, change the uuid + # @param pubkey if !=None, change the public key + + def refresh_gid(self, gid, xrn=None, uuid=None, pubkey=None): + # TODO: compute expiration time of GID, refresh it if necessary + gid_is_expired = False + + # update the gid if we need to + if gid_is_expired or xrn or uuid or pubkey: + + if not xrn: + xrn = gid.get_urn() + if not uuid: + uuid = gid.get_uuid() + if not pubkey: + pubkey = gid.get_pubkey() + + gid = self.create_gid(xrn, uuid, pubkey) + + return gid + + ## + # Retrieve an authority credential for an authority. The authority + # credential will contain the authority privilege and will be signed by + # the authority's parent. + # + # @param hrn the human readable name of the authority (urn is converted to hrn) + # @param authority type of credential to return (authority | sa | ma) + + def get_auth_cred(self, xrn, kind="authority"): + hrn, type = urn_to_hrn(xrn) + auth_info = self.get_auth_info(hrn) + gid = auth_info.get_gid_object() + + cred = Credential(subject=hrn) + cred.set_gid_caller(gid) + cred.set_gid_object(gid) + cred.set_privileges(kind) + cred.get_privileges().delegate_all_privileges(True) + #cred.set_pubkey(auth_info.get_gid_object().get_pubkey()) + + parent_hrn = get_authority(hrn) + if not parent_hrn or hrn == self.config.SFA_INTERFACE_HRN: + # if there is no parent hrn, then it must be self-signed. this + # is where we terminate the recursion + cred.set_issuer_keys(auth_info.get_privkey_filename(), auth_info.get_gid_filename()) + else: + # we need the parent's private key in order to sign this GID + parent_auth_info = self.get_auth_info(parent_hrn) + cred.set_issuer_keys(parent_auth_info.get_privkey_filename(), parent_auth_info.get_gid_filename()) + + + cred.set_parent(self.get_auth_cred(parent_hrn, kind)) + + cred.encode() + cred.sign() + + return cred + ## + # Retrieve an authority ticket. An authority ticket is not actually a + # redeemable ticket, but only serves the purpose of being included as the + # parent of another ticket, in order to provide a chain of authentication + # for a ticket. + # + # This looks almost the same as get_auth_cred, but works for tickets + # XXX does similarity imply there should be more code re-use? + # + # @param xrn the human readable name of the authority (urn is converted to hrn) + + def get_auth_ticket(self, xrn): + hrn, type = urn_to_hrn(xrn) + auth_info = self.get_auth_info(hrn) + gid = auth_info.get_gid_object() + + ticket = SfaTicket(subject=hrn) + ticket.set_gid_caller(gid) + ticket.set_gid_object(gid) + ticket.set_delegate(True) + ticket.set_pubkey(auth_info.get_gid_object().get_pubkey()) + + parent_hrn = get_authority(hrn) + if not parent_hrn: + # if there is no parent hrn, then it must be self-signed. this + # is where we terminate the recursion + ticket.set_issuer(auth_info.get_pkey_object(), hrn) + else: + # we need the parent's private key in order to sign this GID + parent_auth_info = self.get_auth_info(parent_hrn) + ticket.set_issuer(parent_auth_info.get_pkey_object(), parent_auth_info.hrn) + ticket.set_parent(self.get_auth_cred(parent_hrn)) + + ticket.encode() + ticket.sign() + + return ticket + diff --git a/sfa/trust/rights.py b/sfa/trust/rights.py new file mode 100644 index 00000000..59324e8d --- /dev/null +++ b/sfa/trust/rights.py @@ -0,0 +1,288 @@ +## +# This Module implements rights and lists of rights for the SFA. Rights +# are implemented by two classes: +# +# Right - represents a single right +# +# RightList - represents a list of rights +# +# A right may allow several different operations. For example, the "info" right +# allows "listslices", "listcomponentresources", etc. +## + + + +## +# privilege_table is a list of priviliges and what operations are allowed +# per privilege. +# Note that "*" is a privilege granted by ProtoGENI slice authorities, and we +# give it access to the GENI AM calls + +privilege_table = {"authority": ["register", "remove", "update", "resolve", "list", "getcredential", "*"], + "refresh": ["remove", "update"], + "resolve": ["resolve", "list", "getcredential"], + "sa": ["getticket", "redeemslice", "redeemticket", "createslice", "createsliver", "deleteslice", "deletesliver", "updateslice", + "getsliceresources", "getticket", "loanresources", "stopslice", "startslice", "renewsliver", + "deleteslice", "deletesliver", "resetslice", "listslices", "listnodes", "getpolicy", "sliverstatus"], + "embed": ["getticket", "redeemslice", "redeemticket", "createslice", "createsliver", "renewsliver", "deleteslice", "deletesliver", "updateslice", "sliverstatus", "getsliceresources", "shutdown"], + "bind": ["getticket", "loanresources", "redeemticket"], + "control": ["updateslice", "createslice", "createsliver", "renewsliver", "sliverstatus", "stopslice", "startslice", "deleteslice", "deletesliver", "resetslice", "getsliceresources", "getgids"], + "info": ["listslices", "listnodes", "getpolicy"], + "ma": ["setbootstate", "getbootstate", "reboot", "getgids", "gettrustedcerts"], + "operator": ["gettrustedcerts", "getgids"], + "*": ["createsliver", "deletesliver", "sliverstatus", "renewsliver", "shutdown"]} + + + +## +# Determine tje rights that an object should have. The rights are entirely +# dependent on the type of the object. For example, users automatically +# get "refresh", "resolve", and "info". +# +# @param type the type of the object (user | sa | ma | slice | node) +# @param name human readable name of the object (not used at this time) +# +# @return RightList object containing rights + +def determine_rights(type, name): + rl = RightList() + + # rights seem to be somewhat redundant with the type of the credential. + # For example, a "sa" credential implies the authority right, because + # a sa credential cannot be issued to a user who is not an owner of + # the authority + if type == "user": + rl.add("refresh") + rl.add("resolve") + rl.add("info") + elif type == "sa": + rl.add("authority") + rl.add("sa") + elif type == "ma": + rl.add("authority") + rl.add("ma") + elif type == "authority": + rl.add("authority") + rl.add("sa") + rl.add("ma") + elif type == "slice": + rl.add("refresh") + rl.add("embed") + rl.add("bind") + rl.add("control") + rl.add("info") + elif type == "component": + rl.add("operator") + return rl + + +## +# The Right class represents a single privilege. + + + +class Right: + ## + # Create a new right. + # + # @param kind is a string naming the right. For example "control" + + def __init__(self, kind, delegate=False): + self.kind = kind + self.delegate = delegate + + ## + # Test to see if this right object is allowed to perform an operation. + # Returns True if the operation is allowed, False otherwise. + # + # @param op_name is a string naming the operation. For example "listslices". + + def can_perform(self, op_name): + allowed_ops = privilege_table.get(self.kind.lower(), None) + if not allowed_ops: + return False + + # if "*" is specified, then all ops are permitted + if "*" in allowed_ops: + return True + + return (op_name.lower() in allowed_ops) + + ## + # Test to see if this right is a superset of a child right. A right is a + # superset if every operating that is allowed by the child is also allowed + # by this object. + # + # @param child is a Right object describing the child right + + def is_superset(self, child): + my_allowed_ops = privilege_table.get(self.kind.lower(), None) + child_allowed_ops = privilege_table.get(child.kind.lower(), None) + + if not self.delegate: + return False + + if "*" in my_allowed_ops: + return True + + for right in child_allowed_ops: + if not right in my_allowed_ops: + return False + + return True + +## +# A RightList object represents a list of privileges. + +class RightList: + ## + # Create a new rightlist object, containing no rights. + # + # @param string if string!=None, load the rightlist from the string + + def __init__(self, string=None): + self.rights = [] + if string: + self.load_from_string(string) + + def is_empty(self): + return self.rights == [] + + ## + # Add a right to this list + # + # @param right is either a Right object or a string describing the right + + def add(self, right, delegate=False): + if isinstance(right, str): + right = Right(right, delegate) + self.rights.append(right) + + ## + # Load the rightlist object from a string + + def load_from_string(self, string): + self.rights = [] + + # none == no rights, so leave the list empty + if not string: + return + + parts = string.split(",") + for part in parts: + if ':' in part: + spl = part.split(':') + kind = spl[0].strip() + delegate = bool(int(spl[1])) + else: + kind = part.strip() + delegate = 0 + self.rights.append(Right(kind, bool(delegate))) + + ## + # Save the rightlist object to a string. It is saved in the format of a + # comma-separated list. + + def save_to_string(self): + right_names = [] + for right in self.rights: + right_names.append('%s:%d' % (right.kind.strip(), right.delegate)) + + return ",".join(right_names) + + ## + # Check to see if some right in this list allows an operation. This is + # done by evaluating the can_perform function of each operation in the + # list. + # + # @param op_name is an operation to check, for example "listslices" + + def can_perform(self, op_name): + for right in self.rights: + if right.can_perform(op_name): + return True + return False + + ## + # Check to see if all of the rights in this rightlist are a superset + # of all the rights in a child rightlist. A rightlist is a superset + # if there is no operation in the child rightlist that cannot be + # performed in the parent rightlist. + # + # @param child is a rightlist object describing the child + + def is_superset(self, child): + for child_right in child.rights: + allowed = False + for my_right in self.rights: + if my_right.is_superset(child_right): + allowed = True + if not allowed: + return False + return True + + + ## + # set the delegate bit to 'delegate' on + # all privileges + # + # @param delegate boolean (True or False) + + def delegate_all_privileges(self, delegate): + for right in self.rights: + right.delegate = delegate + + ## + # true if all privileges have delegate bit set true + # false otherwise + + def get_all_delegate(self): + for right in self.rights: + if not right.delegate: + return False + return True + + + + ## + # Determine the rights that an object should have. The rights are entirely + # dependent on the type of the object. For example, users automatically + # get "refresh", "resolve", and "info". + # + # @param type the type of the object (user | sa | ma | slice | node) + # @param name human readable name of the object (not used at this time) + # + # @return RightList object containing rights + + def determine_rights(self, type, name): + rl = RightList() + + # rights seem to be somewhat redundant with the type of the credential. + # For example, a "sa" credential implies the authority right, because + # a sa credential cannot be issued to a user who is not an owner of + # the authority + + if type == "user": + rl.add("refresh") + rl.add("resolve") + rl.add("info") + elif type == "sa": + rl.add("authority") + rl.add("sa") + elif type == "ma": + rl.add("authority") + rl.add("ma") + elif type == "authority": + rl.add("authority") + rl.add("sa") + rl.add("ma") + elif type == "slice": + rl.add("refresh") + rl.add("embed") + rl.add("bind") + rl.add("control") + rl.add("info") + elif type == "component": + rl.add("operator") + + return rl diff --git a/sfa/trust/trusted_certs/plc_ca.crt b/sfa/trust/trusted_certs/plc_ca.crt new file mode 100644 index 00000000..840cb29a --- /dev/null +++ b/sfa/trust/trusted_certs/plc_ca.crt @@ -0,0 +1,18 @@ +-----BEGIN CERTIFICATE----- +MIIC7DCCAlWgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBoTELMAkGA1UEBhMCVVMx +EzARBgNVBAgTCk5ldyBKZXJzZXkxEjAQBgNVBAcTCVByaW5jZXRvbjESMBAGA1UE +ChMJUGxhbmV0TGFiMRIwEAYDVQQLEwlQbGFuZXRMYWIxGjAYBgNVBAMTEVBsYW5l +dExhYiBSb290IENBMSUwIwYJKoZIhvcNAQkBFhZzdXBwb3J0QHBsYW5ldC1sYWIu +b3JnMB4XDTA0MDIyMzE4MTMyMloXDTE0MDIyMDE4MTMyMlowgaExCzAJBgNVBAYT +AlVTMRMwEQYDVQQIEwpOZXcgSmVyc2V5MRIwEAYDVQQHEwlQcmluY2V0b24xEjAQ +BgNVBAoTCVBsYW5ldExhYjESMBAGA1UECxMJUGxhbmV0TGFiMRowGAYDVQQDExFQ +bGFuZXRMYWIgUm9vdCBDQTElMCMGCSqGSIb3DQEJARYWc3VwcG9ydEBwbGFuZXQt +bGFiLm9yZzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwtpNRNvNmIEX0zDu +JcMc3zLHZz9LuXjH+UqiktPIfiMhh1sUqZE2wDfppcGRLAdC7mrmZys5GjZTO0nf +bU/rV73hplTD8UPZojpbcvKLm5t0kocDG4aoUL+vDF7T8UlXl/T5UF0GWqFey9UY +luCI5UeKMYdyoxhaMGiL8IBK8DUCAwEAAaMyMDAwDwYDVR0TAQH/BAUwAwEB/zAd +BgNVHQ4EFgQU+DhxfTWp4xeIF2lUWngDOhC1lY8wDQYJKoZIhvcNAQEEBQADgYEA +qYakXhLdtk64ppM1KmjeD0M0bGU+ZFu421MH0whxv5RROgNEwCxXicbD/9FZ2uzo +ik7AdBAiZiyvoEkTxYkzpXHkdM6x0j6iDMjomtihUgkjtM+xaiQ6lqy9h583zhjg +2Te0bEteMD8w8zT3Vdg8AsOPsDRZgHS3TMmTSzDg6nI= +-----END CERTIFICATE----- diff --git a/sfa/trust/trusted_certs/ple_ca.crt b/sfa/trust/trusted_certs/ple_ca.crt new file mode 100644 index 00000000..cb00a40f --- /dev/null +++ b/sfa/trust/trusted_certs/ple_ca.crt @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDODCCAqGgAwIBAgICIAYwDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMCRlIx +GTAXBgNVBAcTEFNvcGhpYSBBbnRpcG9saXMxDjAMBgNVBAoTBUlOUklBMRkwFwYD +VQQLExBQbGFuZXRMYWIgRXVyb3BlMSEwHwYDVQQDExhQbGFuZXRMYWIgRXVyb3Bl +IFJvb3QgQ0EwHhcNMDkwNjE4MTI1NDAwWhcNMTkwNjE2MTI1NDAwWjB2MQswCQYD +VQQGEwJGUjEZMBcGA1UEBxMQU29waGlhIEFudGlwb2xpczEOMAwGA1UEChMFSU5S +SUExGTAXBgNVBAsTEFBsYW5ldExhYiBFdXJvcGUxITAfBgNVBAMTGFBsYW5ldExh +YiBFdXJvcGUgUm9vdCBDQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAxu3l +PiHQVVnkfANCyB+78ZXS0y1Nj2LaoqI/LdSZyKF8JPt+b5fXgOcOWrnNrCrS/9NV +hyX3s4Ps5HuiVxRZi3MPtxeXz5qbU7UH+k/kR9T/Po7DGa0KAP/TmzO3jhV6EalV +1DIkjs6wNZ5Ypv5m6M6puK1LZ+p92yPhePJPftECAwEAAaOB1DCB0TAdBgNVHQ4E +FgQUjbA0nGWCLFZ7L/SiSdvQuMQWhOQwgaEGA1UdIwSBmTCBloAUjbA0nGWCLFZ7 +L/SiSdvQuMQWhOSheqR4MHYxCzAJBgNVBAYTAkZSMRkwFwYDVQQHExBTb3BoaWEg +QW50aXBvbGlzMQ4wDAYDVQQKEwVJTlJJQTEZMBcGA1UECxMQUGxhbmV0TGFiIEV1 +cm9wZTEhMB8GA1UEAxMYUGxhbmV0TGFiIEV1cm9wZSBSb290IENBggIgBjAMBgNV +HRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAEZFa4EGGrqGSCZivYCiKiS3vhwP +WQ/84vTXVQr5ydiSc210bIVlPRFqdZAMd64uxdERb90734AVpGAQyBYq1ccA+yCF +v2hW8Cx87XObp0uoL0RniA1qOr3LO69rDJAS7n7EPHhAKjOXUkzb/vvXdIAPmbra +AQGvqcqKX7Fk9+wi +-----END CERTIFICATE----- diff --git a/sfa/trust/trustedroot.py b/sfa/trust/trustedroot.py new file mode 100644 index 00000000..63f781a8 --- /dev/null +++ b/sfa/trust/trustedroot.py @@ -0,0 +1,46 @@ +### $Id: trustedroot.py 18182 2010-06-02 20:42:30Z tmack $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/trust/trustedroot.py $ + +import os + +from sfa.trust.gid import * + +class TrustedRootList: + def __init__(self, dir): + self.basedir = dir + + # create the directory to hold the files + try: + os.makedirs(self.basedir) + # if the path already exists then pass + except OSError, (errno, strerr): + if errno == 17: + pass + + def add_gid(self, gid): + fn = os.path.join(self.basedir, gid.get_hrn() + ".gid") + + gid.save_to_file(fn) + + def get_list(self): + gid_list = [] + + file_list = os.listdir(self.basedir) + for gid_file in file_list: + fn = os.path.join(self.basedir, gid_file) + if os.path.isfile(fn): + gid = GID(filename = fn) + gid_list.append(gid) + + return gid_list + + def get_file_list(self): + gid_file_list = [] + + file_list = os.listdir(self.basedir) + for gid_file in file_list: + fn = os.path.join(self.basedir, gid_file) + if os.path.isfile(fn): + gid_file_list.append(fn) + + return gid_file_list diff --git a/sfa/util/PostgreSQL.py b/sfa/util/PostgreSQL.py new file mode 100644 index 00000000..984e5149 --- /dev/null +++ b/sfa/util/PostgreSQL.py @@ -0,0 +1,269 @@ +# +# PostgreSQL database interface. Sort of like DBI(3) (Database +# independent interface for Perl). +# +# + +import psycopg2 +import psycopg2.extensions +psycopg2.extensions.register_type(psycopg2.extensions.UNICODE) +# UNICODEARRAY not exported yet +psycopg2.extensions.register_type(psycopg2._psycopg.UNICODEARRAY) + +import pgdb +from types import StringTypes, NoneType +import traceback +import commands +import re +from pprint import pformat + +from sfa.util.faults import * +from sfa.util.debug import * + +if not psycopg2: + is8bit = re.compile("[\x80-\xff]").search + + def unicast(typecast): + """ + pgdb returns raw UTF-8 strings. This function casts strings that + apppear to contain non-ASCII characters to unicode objects. + """ + + def wrapper(*args, **kwds): + value = typecast(*args, **kwds) + + # pgdb always encodes unicode objects as UTF-8 regardless of + # the DB encoding (and gives you no option for overriding + # the encoding), so always decode 8-bit objects as UTF-8. + if isinstance(value, str) and is8bit(value): + value = unicode(value, "utf-8") + + return value + + return wrapper + + pgdb.pgdbTypeCache.typecast = unicast(pgdb.pgdbTypeCache.typecast) + +def handle_exception(f): + def wrapper(*args, **kwds): + try: return f(*args, **kwds) + except Exception, fault: + raise SfaDBError(str(fault)) + return wrapper + +class PostgreSQL: + def __init__(self, config): + self.config = config + self.debug = False +# self.debug = True + self.connection = None + + @handle_exception + def cursor(self): + if self.connection is None: + # (Re)initialize database connection + if psycopg2: + try: + # Try UNIX socket first + self.connection = psycopg2.connect(user = self.config.SFA_PLC_DB_USER, + password = self.config.SFA_PLC_DB_PASSWORD, + database = self.config.SFA_PLC_DB_NAME) + except psycopg2.OperationalError: + # Fall back on TCP + self.connection = psycopg2.connect(user = self.config.SFA_PLC_DB_USER, + password = self.config.SFA_PLC_DB_PASSWORD, + database = self.config.SFA_PLC_DB_NAME, + host = self.config.SFA_PLC_DB_HOST, + port = self.config.SFA_PLC_DB_PORT) + self.connection.set_client_encoding("UNICODE") + else: + self.connection = pgdb.connect(user = self.config.SFA_PLC_DB_USER, + password = self.config.SFA_PLC_DB_PASSWORD, + host = "%s:%d" % (self.config.SFA_PLC_DB_HOST, self.config.SFA_PLC_DB_PORT), + database = self.config.SFA_PLC_DB_NAME) + + (self.rowcount, self.description, self.lastrowid) = \ + (None, None, None) + + return self.connection.cursor() + + def close(self): + if self.connection is not None: + self.connection.close() + self.connection = None + + def quote(self, value): + """ + Returns quoted version of the specified value. + """ + + # The pgdb._quote function is good enough for general SQL + # quoting, except for array types. + if isinstance(value, (list, tuple, set)): + return "ARRAY[%s]" % ", ".join(map, self.quote, value) + else: + return pgdb._quote(value) + + quote = classmethod(quote) + + def param(self, name, value): + # None is converted to the unquoted string NULL + if isinstance(value, NoneType): + conversion = "s" + # True and False are also converted to unquoted strings + elif isinstance(value, bool): + conversion = "s" + elif isinstance(value, float): + conversion = "f" + elif not isinstance(value, StringTypes): + conversion = "d" + else: + conversion = "s" + + return '%(' + name + ')' + conversion + + param = classmethod(param) + + def begin_work(self): + # Implicit in pgdb.connect() + pass + + def commit(self): + self.connection.commit() + + def rollback(self): + self.connection.rollback() + + def do(self, query, params = None): + cursor = self.execute(query, params) + cursor.close() + return self.rowcount + + def next_id(self, table_name, primary_key): + sequence = "%(table_name)s_%(primary_key)s_seq" % locals() + sql = "SELECT nextval('%(sequence)s')" % locals() + rows = self.selectall(sql, hashref = False) + if rows: + return rows[0][0] + return None + + def last_insert_id(self, table_name, primary_key): + if isinstance(self.lastrowid, int): + sql = "SELECT %s FROM %s WHERE oid = %d" % \ + (primary_key, table_name, self.lastrowid) + rows = self.selectall(sql, hashref = False) + if rows: + return rows[0][0] + + return None + + # modified for psycopg2-2.0.7 + # executemany is undefined for SELECT's + # see http://www.python.org/dev/peps/pep-0249/ + # accepts either None, a single dict, a tuple of single dict - in which case it execute's + # or a tuple of several dicts, in which case it executemany's + def execute(self, query, params = None): + + cursor = self.cursor() + try: + + # psycopg2 requires %()s format for all parameters, + # regardless of type. + # this needs to be done carefully though as with pattern-based filters + # we might have percents embedded in the query + # so e.g. GetPersons({'email':'*fake*'}) was resulting in .. LIKE '%sake%' + if psycopg2: + query = re.sub(r'(%\([^)]*\)|%)[df]', r'\1s', query) + # rewrite wildcards set by Filter.py as '***' into '%' + query = query.replace ('***','%') + + if not params: + if self.debug: + print >> log,'execute0',query + cursor.execute(query) + elif isinstance(params,dict): + if self.debug: + print >> log,'execute-dict: params',params,'query',query%params + cursor.execute(query,params) + elif isinstance(params,tuple) and len(params)==1: + if self.debug: + print >> log,'execute-tuple',query%params[0] + cursor.execute(query,params[0]) + else: + param_seq=(params,) + if self.debug: + for params in param_seq: + print >> log,'executemany',query%params + cursor.executemany(query, param_seq) + (self.rowcount, self.description, self.lastrowid) = \ + (cursor.rowcount, cursor.description, cursor.lastrowid) + except Exception, e: + try: + self.rollback() + except: + pass + uuid = commands.getoutput("uuidgen") + print >> log, "Database error %s:" % uuid + print >> log, e + print >> log, "Query:" + print >> log, query + print >> log, "Params:" + print >> log, pformat(params) + raise SfaDBError("Please contact support: %s" % str(e)) + + return cursor + + def selectall(self, query, params = None, hashref = True, key_field = None): + """ + Return each row as a dictionary keyed on field name (like DBI + selectrow_hashref()). If key_field is specified, return rows + as a dictionary keyed on the specified field (like DBI + selectall_hashref()). + + If params is specified, the specified parameters will be bound + to the query. + """ + + cursor = self.execute(query, params) + rows = cursor.fetchall() + cursor.close() + self.commit() + if hashref or key_field is not None: + # Return each row as a dictionary keyed on field name + # (like DBI selectrow_hashref()). + labels = [column[0] for column in self.description] + rows = [dict(zip(labels, row)) for row in rows] + + if key_field is not None and key_field in labels: + # Return rows as a dictionary keyed on the specified field + # (like DBI selectall_hashref()). + return dict([(row[key_field], row) for row in rows]) + else: + return rows + + def fields(self, table, notnull = None, hasdef = None): + """ + Return the names of the fields of the specified table. + """ + + if hasattr(self, 'fields_cache'): + if self.fields_cache.has_key((table, notnull, hasdef)): + return self.fields_cache[(table, notnull, hasdef)] + else: + self.fields_cache = {} + + sql = "SELECT attname FROM pg_attribute, pg_class" \ + " WHERE pg_class.oid = attrelid" \ + " AND attnum > 0 AND relname = %(table)s" + + if notnull is not None: + sql += " AND attnotnull is %(notnull)s" + + if hasdef is not None: + sql += " AND atthasdef is %(hasdef)s" + + rows = self.selectall(sql, locals(), hashref = False) + + self.fields_cache[(table, notnull, hasdef)] = [row[0] for row in rows] + + return self.fields_cache[(table, notnull, hasdef)] diff --git a/sfa/util/__init__.py b/sfa/util/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/sfa/util/api.py b/sfa/util/api.py new file mode 100644 index 00000000..fa3bf175 --- /dev/null +++ b/sfa/util/api.py @@ -0,0 +1,273 @@ +# +# SFA XML-RPC and SOAP interfaces +# +### $Id: api.py 18586 2010-08-05 23:33:41Z tmack $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/util/api.py $ +# + +import sys +import os +import traceback +import string +import xmlrpclib + +from sfa.trust.auth import Auth +from sfa.util.config import * +from sfa.util.faults import * +from sfa.util.debug import * +from sfa.trust.credential import * +from sfa.trust.certificate import * +from sfa.util.namespace import * +from sfa.util.sfalogging import * + +# See "2.2 Characters" in the XML specification: +# +# #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] +# avoiding +# [#x7F-#x84], [#x86-#x9F], [#xFDD0-#xFDDF] + +invalid_xml_ascii = map(chr, range(0x0, 0x8) + [0xB, 0xC] + range(0xE, 0x1F)) +xml_escape_table = string.maketrans("".join(invalid_xml_ascii), "?" * len(invalid_xml_ascii)) + +def xmlrpclib_escape(s, replace = string.replace): + """ + xmlrpclib does not handle invalid 7-bit control characters. This + function augments xmlrpclib.escape, which by default only replaces + '&', '<', and '>' with entities. + """ + + # This is the standard xmlrpclib.escape function + s = replace(s, "&", "&") + s = replace(s, "<", "<") + s = replace(s, ">", ">",) + + # Replace invalid 7-bit control characters with '?' + return s.translate(xml_escape_table) + +def xmlrpclib_dump(self, value, write): + """ + xmlrpclib cannot marshal instances of subclasses of built-in + types. This function overrides xmlrpclib.Marshaller.__dump so that + any value that is an instance of one of its acceptable types is + marshalled as that type. + + xmlrpclib also cannot handle invalid 7-bit control characters. See + above. + """ + + # Use our escape function + args = [self, value, write] + if isinstance(value, (str, unicode)): + args.append(xmlrpclib_escape) + + try: + # Try for an exact match first + f = self.dispatch[type(value)] + except KeyError: + raise + # Try for an isinstance() match + for Type, f in self.dispatch.iteritems(): + if isinstance(value, Type): + f(*args) + return + raise TypeError, "cannot marshal %s objects" % type(value) + else: + f(*args) + +# You can't hide from me! +xmlrpclib.Marshaller._Marshaller__dump = xmlrpclib_dump + +# SOAP support is optional +try: + import SOAPpy + from SOAPpy.Parser import parseSOAPRPC + from SOAPpy.Types import faultType + from SOAPpy.NS import NS + from SOAPpy.SOAPBuilder import buildSOAP +except ImportError: + SOAPpy = None + + +def import_deep(name): + mod = __import__(name) + components = name.split('.') + for comp in components[1:]: + mod = getattr(mod, comp) + return mod + +class ManagerWrapper: + """ + This class acts as a wrapper around an SFA interface manager module, but + can be used with any python module. The purpose of this class is raise a + SfaNotImplemented exception if the a someone attepmts to use an attribute + (could be a callable) thats not available in the library by checking the + library using hasattr. This helps to communicate better errors messages + to the users and developers in the event that a specifiec operation + is not implemented by a libarary and will generally be more helpful than + the standard AttributeError + """ + def __init__(self, manager, interface): + self.manager = manager + self.interface = interface + + def __getattr__(self, method): + + if not hasattr(self.manager, method): + raise SfaNotImplemented(method, self.interface) + return getattr(self.manager, method) + +class BaseAPI: + + cache = None + protocol = None + + def __init__(self, config = "/etc/sfa/sfa_config.py", encoding = "utf-8", + methods='sfa.methods', peer_cert = None, interface = None, + key_file = None, cert_file = None, cache = cache): + + self.encoding = encoding + + # flat list of method names + self.methods_module = methods_module = __import__(methods, fromlist=[methods]) + self.methods = methods_module.all + + # Better just be documenting the API + if config is None: + return + + # Load configuration + self.config = Config(config) + self.auth = Auth(peer_cert) + self.hrn = self.config.SFA_INTERFACE_HRN + self.interface = interface + self.key_file = key_file + self.key = Keypair(filename=self.key_file) + self.cert_file = cert_file + self.cert = Certificate(filename=self.cert_file) + self.cache = cache + self.credential = None + self.source = None + self.time_format = "%Y-%m-%d %H:%M:%S" + self.logger=get_sfa_logger() + + # load registries + from sfa.server.registry import Registries + self.registries = Registries(self) + + # load aggregates + from sfa.server.aggregate import Aggregates + self.aggregates = Aggregates(self) + + + def get_interface_manager(self, manager_base = 'sfa.managers'): + """ + Returns the appropriate manager module for this interface. + Modules are usually found in sfa/managers/ + """ + + if self.interface in ['registry']: + mgr_type = self.config.SFA_REGISTRY_TYPE + manager_module = manager_base + ".registry_manager_%s" % mgr_type + elif self.interface in ['aggregate']: + mgr_type = self.config.SFA_AGGREGATE_TYPE + manager_module = manager_base + ".aggregate_manager_%s" % mgr_type + elif self.interface in ['slicemgr', 'sm']: + mgr_type = self.config.SFA_SM_TYPE + manager_module = manager_base + ".slice_manager_%s" % mgr_type + elif self.interface in ['component', 'cm']: + mgr_type = self.config.SFA_CM_TYPE + manager_module = manager_base + ".component_manager_%s" % mgr_type + else: + raise SfaAPIError("No manager for interface: %s" % self.interface) + manager = __import__(manager_module, fromlist=[manager_base]) + # this isnt necessary but will hlep to produce better error messages + # if someone tries to access an operation this manager doesn't implement + manager = ManagerWrapper(manager, self.interface) + + return manager + + def callable(self, method): + """ + Return a new instance of the specified method. + """ + # Look up method + if method not in self.methods: + raise SfaInvalidAPIMethod, method + + # Get new instance of method + try: + classname = method.split(".")[-1] + module = __import__(self.methods_module.__name__ + "." + method, globals(), locals(), [classname]) + callablemethod = getattr(module, classname)(self) + return getattr(module, classname)(self) + except ImportError, AttributeError: + raise SfaInvalidAPIMethod, method + + def call(self, source, method, *args): + """ + Call the named method from the specified source with the + specified arguments. + """ + function = self.callable(method) + function.source = source + self.source = source + return function(*args) + + + def handle(self, source, data, method_map): + """ + Handle an XML-RPC or SOAP request from the specified source. + """ + # Parse request into method name and arguments + try: + interface = xmlrpclib + self.protocol = 'xmlrpclib' + (args, method) = xmlrpclib.loads(data) + if method_map.has_key(method): + method = method_map[method] + methodresponse = True + + except Exception, e: + if SOAPpy is not None: + self.protocol = 'soap' + interface = SOAPpy + (r, header, body, attrs) = parseSOAPRPC(data, header = 1, body = 1, attrs = 1) + method = r._name + args = r._aslist() + # XXX Support named arguments + else: + raise e + + try: + result = self.call(source, method, *args) + except SfaFault, fault: + result = fault + except Exception, fault: + traceback.print_exc(file = log) + result = SfaAPIError(fault) + + + # Return result + response = self.prepare_response(result, method) + return response + + def prepare_response(self, result, method=""): + """ + convert result to a valid xmlrpc or soap response + """ + + if self.protocol == 'xmlrpclib': + if not isinstance(result, SfaFault): + result = (result,) + response = xmlrpclib.dumps(result, methodresponse = True, encoding = self.encoding, allow_none = 1) + elif self.protocol == 'soap': + if isinstance(result, Exception): + result = faultParameter(NS.ENV_T + ":Server", "Method Failed", method) + result._setDetail("Fault %d: %s" % (result.faultCode, result.faultString)) + else: + response = buildSOAP(kw = {'%sResponse' % method: {'Result': result}}, encoding = self.encoding) + else: + if isinstance(result, Exception): + raise result + + return response diff --git a/sfa/util/cache.py b/sfa/util/cache.py new file mode 100644 index 00000000..45961feb --- /dev/null +++ b/sfa/util/cache.py @@ -0,0 +1,62 @@ +# +# This module implements general purpose caching system +# +from __future__ import with_statement +import time +import threading +from datetime import datetime + +# maximum lifetime of cached data (in seconds) +MAX_CACHE_TTL = 60 * 60 + +class CacheData: + + data = None + created = None + expires = None + lock = None + + def __init__(self, data, ttl = MAX_CACHE_TTL): + self.lock = threading.RLock() + self.data = data + self.renew(ttl) + + def is_expired(self): + return time.time() > self.expires + + def get_created_date(self): + return str(datetime.fromtimestamp(self.created)) + + def get_expires_date(self): + return str(datetime.fromtimestamp(self.expires)) + + def renew(self, ttl = MAX_CACHE_TTL): + self.created = time.time() + self.expires = self.created + ttl + + def set_data(self, data, renew=True, ttl = MAX_CACHE_TTL): + with self.lock: + self.data = data + if renew: + self.renew(ttl) + + def get_data(self): + return self.data + +class Cache: + + cache = {} + lock = threading.RLock() + + def add(self, key, value, ttl = MAX_CACHE_TTL): + with self.lock: + if self.cache.has_key(key): + self.cache[key].set_data(value, ttl=ttl) + else: + self.cache[key] = CacheData(value, ttl) + + def get(self, key): + data = self.cache.get(key) + if not data or data.is_expired(): + return None + return data.get_data() diff --git a/sfa/util/client.py b/sfa/util/client.py new file mode 100644 index 00000000..4dcc92d0 --- /dev/null +++ b/sfa/util/client.py @@ -0,0 +1,382 @@ +## +# This module implements the client-side of the SFA API. Stubs are provided +# that convert the supplied parameters to the necessary format and send them +# via XMLRPC to an SFA Server. +# +# TODO: Investigate ways to combine this with existing PLC API? +## + +### $Id: client.py 16477 2010-01-05 16:31:37Z thierry $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/util/client.py $ + +from sfa.trust.certificate import * +from sfa.trust.gid import * +from sfa.trust.credential import * +from sfa.util.record import * +from sfa.util.sfaticket import SfaTicket + +## +# The GeniClient class provides stubs for executing SFA operations. A given +# client object connects to one server. To connect to multiple servers, create +# multiple GeniClient objects. +# +# The SFA protocol uses an HTTPS connection, and the client's side of the +# connection uses his private key. Generally, this private key must match the +# public key that is containing in the GID that the client is providing for +# those functions that take a GID. + +class GeniClient: + ## + # Create a new GeniClient object. + # + # @param url is the url of the server + # @param key_file = private key file of client + # @param cert_file = x.509 cert containing the client's public key. This + # could be a GID certificate, or any x.509 cert. + # @param protocol The ORPC protocol to use. Can be "soap" or "xmlrpc" + + def __init__(self, url, key_file, cert_file, protocol="xmlrpc"): + self.url = url + self.key_file = key_file + self.cert_file = cert_file + self.key = Keypair(filename = self.key_file) + + + if (protocol=="xmlrpc"): + import xmlrpcprotocol + self.server = xmlrpcprotocol.get_server(self.url, self.key_file, self.cert_file) + elif (protocol=="soap"): + import soapprotocol + self.server = soapprotocol.get_server(self.url, self.key_file, self.cert_file) + else: + raise Exception("Attempted use of undefined protocol %s"%protocol) + + + # ------------------------------------------------------------------------- + # Registry Interface + # ------------------------------------------------------------------------- + + ## + # Create a new GID. For MAs and SAs that are physically located on the + # registry, this allows a owner/operator/PI to create a new GID and have it + # signed by his respective authority. + # + # @param cred credential of caller + # @param name hrn for new GID + # @param uuid unique identifier for new GID + # @param pkey_string public-key string (TODO: why is this a string and not a keypair object?) + # + # @return a GID object + + def create_gid(self, cred, name, uuid, pkey_string): + gid_str = self.server.create_gid(cred.save_to_string(save_parents=True), name, uuid, pkey_string) + return GID(string=gid_str) + + ## + # Retrieve the GID for an object. This function looks up a record in the + # registry and returns the GID of the record if it exists. + # TODO: Is this function needed? It's a shortcut for Resolve() + # + # @param name hrn to look up + # + # @return a GID object + + #def get_gid(self, name): + # gid_str_list = self.server.get_gid(name) + # gid_list = [] + # for str in gid_str_list: + # gid_list.append(GID(string=str)) + # return gid_list + + + def get_gid(self, cert, hrn, type, request_hash): + cert_string = cert.save_to_string(save_parents=True) + gid_str = self.server.get_gid(cert_string, hrn, type, request_hash) + return GID(string=gid_str) + ## + # Get_self_credential a degenerate version of get_credential used by a + # client to get his initial credential when he doesn't have one. This is + # the same as get_credential(..., cred=None,...). + # + # The registry ensures that the client is the principal that is named by + # (type, name) by comparing the public key in the record's GID to the + # private key used to encrypt the client-side of the HTTPS connection. Thus + # it is impossible for one principal to retrieve another principal's + # credential without having the appropriate private key. + # + # @param type type of object (user | slice | sa | ma | node + # @param name human readable name of object + # + # @return a credential object + + def get_self_credential(self, type, name): + cred_str = self.server.get_self_credential(type, name) + return Credential(string = cred_str) + + ## + # Retrieve a credential for an object. + # + # If cred==None, then the behavior reverts to get_self_credential() + # + # @param cred credential object specifying rights of the caller + # @param type type of object (user | slice | sa | ma | node) + # @param name human readable name of object + # + # @return a credental object + + def get_credential(self, cred, type, name): + if cred: + cred = cred.save_to_string(save_parents=True) + cred_str = self.server.get_credential(cred, type, name) + return Credential(string = cred_str) + + ## + # List the records in an authority. The objectGID in the supplied credential + # should name the authority that will be listed. + # + # @param cred credential object specifying rights of the caller + # + # @return list of record objects + + def list(self, cred, auth_hrn, caller_cred=None): + result_dict_list = self.server.list(cred.save_to_string(save_parents=True), auth_hrn, caller_cred) + result_rec_list = [] + for dict in result_dict_list: + result_rec_list.append(SfaRecord(dict=dict)) + return result_rec_list + + ## + # Register an object with the registry. In addition to being stored in the + # SFA database, the appropriate records will also be created in the + # PLC databases. + # + # + # + # @param cred credential object specifying rights of the caller + # @param record to register + # + # @return GID object for the newly-registered record + + def register(self, cred, record, caller_cred=None): + gid_str = self.server.register(cred.save_to_string(save_parents=True), record.as_dict(), caller_cred) + return GID(string = gid_str) + + + ## + # Register a peer object with the registry. + # + # + # @param cred credential object specifying rights of the caller + # @param record to register + # + # @return GID object for the newly-registered record + + def register_peer_object(self, cred, record, caller_cred=None): + return self.server.register_peer_object(cred.save_to_string(save_parents=True), record, caller_cred) + + ## + # Remove an object from the registry. If the object represents a PLC object, + # then the PLC records will also be removed. + # + # @param cred credential object specifying rights of the caller + # @param type + # @param hrn + + def remove(self, cred, type, hrn, caller_cred=None): + return self.server.remove(cred.save_to_string(save_parents=True), type, hrn, caller_cred) + + ## + # Remove a peer object from the registry. If the object represents a PLC object, + # then the PLC records will also be removed. + # + # @param cred credential object specifying rights of the caller + # @param type + # @param hrn + + def remove_peer_object(self, cred, record, caller_cred=None): + result = self.server.remove_peer_object(cred.save_to_string(save_parents=True), record, caller_cred) + return result + + ## + # Resolve an object in the registry. A given HRN may have multiple records + # associated with it, and therefore multiple records may be returned. The + # caller should check the type fields of the records to find the one that + # he is interested in. + # + # @param cred credential object specifying rights of the caller + # @param name human readable name of object + + def resolve(self, cred, name, caller_cred=None): + result_dict_list = self.server.resolve(cred.save_to_string(save_parents=True), name, caller_cred) + result_rec_list = [] + for dict in result_dict_list: + if dict['type'] in ['authority']: + result_rec_list.append(AuthorityRecord(dict=dict)) + elif dict['type'] in ['node']: + result_rec_list.append(NodeRecord(dict=dict)) + elif dict['type'] in ['slice']: + result_rec_list.append(SliceRecord(dict=dict)) + elif dict['type'] in ['user']: + result_rec_list.append(UserRecord(dict=dict)) + else: + result_rec_list.append(SfaRecord(dict=dict)) + return result_rec_list + + ## + # Update an object in the registry. Currently, this only updates the + # PLC information associated with the record. The SFA fields (name, type, + # GID) are fixed. + # + # + # + # @param cred credential object specifying rights of the caller + # @param record a record object to be updated + + def update(self, cred, record, caller_cred=None): + result = self.server.update(cred.save_to_string(save_parents=True), record.as_dict(), caller_cred) + return result + + + #------------------------------------------------------------------------- + # Aggregate Interface + #------------------------------------------------------------------------- + + ## list resources + # + # @param cred a credential + # @param hrn slice hrn + + def get_resources(self, cred, hrn=None, caller_cred=None): + result = self.server.get_resources(cred.save_to_string(save_parents=True), hrn, caller_cred) + return result + + def get_aggregates(self, cred, hrn=None): + result = self.server.get_aggregates(cred.save_to_string(save_parents=True), hrn) + return result + + def get_registries(self, cred, hrn=None): + result = self.server.get_registries(cred.save_to_string(save_parents=True), hrn) + return result + + ## get policy + # + # @param cred a credential + + def get_policy(self, cred): + result = self.server.get_policy(cred.save_to_string(save_parents=True)) + return result + + ## create slice + # + # @param cred a credential + # @param rspec resource specification defining how to instantiate the slice + + def create_slice(self, cred, hrn, rspec, caller_cred=None): + result = self.server.create_slice(cred.save_to_string(save_parents=True), hrn, rspec, caller_cred) + return result + + + ## delete slice + # + # @param cred a credential + # @param hrn slice to delete + def delete_slice(self, cred, hrn, caller_cred=None): + result = self.server.delete_slice(cred.save_to_string(save_parents=True), hrn, caller_cred) + return result + + # ------------------------------------------------------------------------ + # Slice Interface + # ------------------------------------------------------------------------ + + ## + # Start a slice. + # + # @param cred a credential identifying the caller (callerGID) and the slice + # (objectGID) + + def start_slice(self, cred, hrn): + result = self.server.start_slice(cred.save_to_string(save_parents=True), hrn) + return result + + ## + # Stop a slice. + # + # @param cred a credential identifying the caller (callerGID) and the slice + # (objectGID) + + def stop_slice(self, cred, hrn): + result = self.server.stop_slice(cred.save_to_string(save_parents=True), hrn) + return result + + ## + # Reset a slice. + # + # @param cred a credential identifying the caller (callerGID) and the slice + # (objectGID) + + def reset_slice(self, cred, hrn): + result = self.server.reset_slice(cred.save_to_string(save_parents=True), hrn) + return result + + ## + # Delete a slice. + # + # @param cred a credential identifying the caller (callerGID) and the slice + # (objectGID) + + def delete_slice(self, cred, hrn, caller_cred=None): + result = self.server.delete_slice(cred.save_to_string(save_parents=True), hrn, caller_cred) + return result + + ## + # List the slices on a component. + # + # @param cred credential object that authorizes the caller + # + # @return a list of slice names + + def get_slices(self, cred): + result = self.server.get_slices(cred.save_to_string(save_parents=True)) + return result + + ## + # Retrieve a ticket. This operation is currently implemented on the + # registry (see SFA, engineering decisions), and is not implemented on + # components. + # + # The ticket is filled in with information from the PLC database. This + # information includes resources, and attributes such as user keys and + # initscripts. + # + # @param cred credential object + # @param name name of the slice to retrieve a ticket for + # @param rspec resource specification dictionary + # + # @return a ticket object + + def get_ticket(self, cred, name, rspec): + ticket_str = self.server.get_ticket(cred.save_to_string(save_parents=True), name, rspec) + ticket = SfaTicket(string=ticket_str) + return ticket + + ## + # Redeem a ticket. This operation is currently implemented on the + # component. + # + # The ticket is submitted to the node manager, and the slice is instantiated + # or updated as appropriate. + # + # TODO: This operation should return a sliver credential and indicate + # whether or not the component will accept only sliver credentials, or + # will accept both sliver and slice credentials. + # + # @param ticket a ticket object containing the ticket + + def redeem_ticket(self, ticket): + result = self.server.redeem_ticket(ticket.save_to_string(save_parents=True)) + return result + + + def remove_remote_object(self, cred, hrn, record): + result = self.server.remove_remote_object(cred.save_to_string(save_parents=True), hrn, record) + return result diff --git a/sfa/util/componentserver.py b/sfa/util/componentserver.py new file mode 100644 index 00000000..f0944a6e --- /dev/null +++ b/sfa/util/componentserver.py @@ -0,0 +1,138 @@ +## +# This module implements a general-purpose server layer for sfa. +# The same basic server should be usable on the registry, component, or +# other interfaces. +# +# TODO: investigate ways to combine this with existing PLC server? +## + +### $Id: componentserver.py 17275 2010-03-05 21:37:10Z tmack $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/util/componentserver.py $ + +import sys +import traceback +import threading +import socket, os +import SocketServer +import BaseHTTPServer +import SimpleHTTPServer +import SimpleXMLRPCServer +from OpenSSL import SSL +from sfa.trust.certificate import Keypair, Certificate +from sfa.trust.credential import * +from sfa.util.faults import * +from sfa.plc.api import ComponentAPI +from sfa.util.server import verify_callback, ThreadedServer +from sfa.util.debug import log + + +## +# taken from the web (XXX find reference). Implents HTTPS xmlrpc request handler + +class SecureXMLRpcRequestHandler(SimpleXMLRPCServer.SimpleXMLRPCRequestHandler): + """Secure XML-RPC request handler class. + + It it very similar to SimpleXMLRPCRequestHandler but it uses HTTPS for transporting XML data. + """ + def setup(self): + self.connection = self.request + self.rfile = socket._fileobject(self.request, "rb", self.rbufsize) + self.wfile = socket._fileobject(self.request, "wb", self.wbufsize) + + def do_POST(self): + """Handles the HTTPS POST request. + + It was copied out from SimpleXMLRPCServer.py and modified to shutdown the socket cleanly. + """ + try: + peer_cert = Certificate() + peer_cert.load_from_pyopenssl_x509(self.connection.get_peer_certificate()) + self.api = ComponentAPI(peer_cert = peer_cert, + interface = self.server.interface, + key_file = self.server.key_file, + cert_file = self.server.cert_file) + # get arguments + request = self.rfile.read(int(self.headers["content-length"])) + # In previous versions of SimpleXMLRPCServer, _dispatch + # could be overridden in this class, instead of in + # SimpleXMLRPCDispatcher. To maintain backwards compatibility, + # check to see if a subclass implements _dispatch and dispatch + # using that method if present. + #response = self.server._marshaled_dispatch(request, getattr(self, '_dispatch', None)) + # XX TODO: Need to get the real remote address + remote_addr = (remote_ip, remote_port) = self.connection.getpeername() + self.api.remote_addr = remote_addr + #remote_addr = (self.rfile.connection.remote_ip, remote_port) + #self.api.remote_addr = remote_addr + response = self.api.handle(remote_addr, request) + + + except Exception, fault: + raise + # This should only happen if the module is buggy + # internal error, report as HTTP server error + self.send_response(500) + self.end_headers() + traceback.print_exc() + else: + # got a valid XML RPC response + self.send_response(200) + self.send_header("Content-type", "text/xml") + self.send_header("Content-length", str(len(response))) + self.end_headers() + self.wfile.write(response) + + # shut down the connection + self.wfile.flush() + self.connection.shutdown() # Modified here! + +## +# Implements an HTTPS XML-RPC server. Generally it is expected that SFA +# functions will take a credential string, which is passed to +# decode_authentication. Decode_authentication() will verify the validity of +# the credential, and verify that the user is using the key that matches the +# GID supplied in the credential. + +class ComponentServer(threading.Thread): + + ## + # Create a new SfaServer object. + # + # @param ip the ip address to listen on + # @param port the port to listen on + # @param key_file private key filename of registry + # @param cert_file certificate filename containing public key + # (could be a GID file) + + def __init__(self, ip, port, key_file, cert_file, api=None): + threading.Thread.__init__(self) + self.key = Keypair(filename = key_file) + self.cert = Certificate(filename = cert_file) + self.server = ThreadedServer((ip, port), SecureXMLRpcRequestHandler, key_file, cert_file) + self.trusted_cert_list = None + self.register_functions() + + + ## + # Register functions that will be served by the XMLRPC server. This + # function should be overrided by each descendant class. + + def register_functions(self): + self.server.register_function(self.noop) + + ## + # Sample no-op server function. The no-op function decodes the credential + # that was passed to it. + + def noop(self, cred, anything): + self.decode_authentication(cred) + + return anything + + ## + # Execute the server, serving requests forever. + + def run(self): + self.server.serve_forever() + + diff --git a/sfa/util/config.py b/sfa/util/config.py new file mode 100644 index 00000000..fe92c867 --- /dev/null +++ b/sfa/util/config.py @@ -0,0 +1,128 @@ +## +# SFA Configuration Info +# +# This module holds configuration parameters for SFA. There are two +# main pieces of information that are used: the database connection and +# the PLCAPI connection +## + +## +# SFA uses a MYSQL database to store records. This database may be +# co-located with the PLC database, or it may be a separate database. The +# following parameters define the connection to the database. +# +# Note that SFA does not access any of the PLC databases directly via +# a mysql connection; All PLC databases are accessed via PLCAPI. + +### $Id: config.py 16803 2010-01-26 17:49:14Z acb $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/util/config.py $ + +import os.path +import traceback + +from sfa.util.debug import log + +class Config: + """ + Parse the bash/Python/PHP version of the configuration file. Very + fast but no type conversions. + """ + + def __init__(self, config_file = "/etc/sfa/sfa_config.py"): + self.config_file = None + self.config_path = None + self.data_path = None + self.load(config_file) + + def load(self, config_file): + try: + execfile(config_file, self.__dict__) + self.config_file = config_file + # path to configuration data + self.config_path = os.path.dirname(config_file) + + # path to server data + if not hasattr(self, 'SFA_DATA_DIR'): + # default to /var/lib/sfa not specified in config + self.SFA_DATA_DIR="/var/lib/sfa" + self.data_path = self.SFA_DATA_DIR + else: + self.data_path = self.SFA_DATA_DIR + + # path to config data + if not hasattr(self, 'SFA_CONFIG_DIR'): + # default to /var/lib/sfa not specified in config + self.SFA_CONFIG_DIR="/etc/sfa" + + if not hasattr(self, 'SFA_REGISTRY_LEVEL1_AUTH'): + self.SFA_REGISTRY_LEVEL1_AUTH=None + + # define interface types + # this will determine which manager to use + if not hasattr(self, 'SFA_REGISTRY_TYPE'): + self.SFA_REGISTRY_TYPE='pl' + + if not hasattr(self, 'SFA_AGGREGATE_TYPE'): + self.SFA_AGGREGATE_TYPE='pl' + + if not hasattr(self, 'SFA_SM_TYPE'): + self.SFA_SM_TYPE='pl' + + if not hasattr(self, 'SFA_CM_TYPE'): + self.SFA_COMPONENT_TYPE='pl' + + # create the data directory if it doesnt exist + if not os.path.isdir(self.SFA_DATA_DIR): + try: + os.mkdir(self.SFA_DATA_DIR) + except: pass + + except IOError, e: + raise IOError, "Could not find the configuration file: %s" % config_file + + def get_trustedroots_dir(self): + return self.config_path + os.sep + 'trusted_roots' + + def get_openflow_aggrMgr_info(self): + aggr_mgr_ip = 'localhost' + if (hasattr(self,'OPENFLOW_AGGREGATE_MANAGER_IP')): + aggr_mgr_ip = self.OPENFLOW_AGGREGATE_MANAGER_IP + + aggr_mgr_port = 2603 + if (hasattr(self,'OPENFLOW_AGGREGATE_MANAGER_PORT')): + aggr_mgr_port = self.OPENFLOW_AGGREGATE_MANAGER_PORT + + return (aggr_mgr_ip,aggr_mgr_port) + + def get_aggregate_type(self): + if (hasattr(self,'SFA_AGGREGATE_TYPE')): + return self.SFA_AGGREGATE_TYPE + else: + return "pl" + + def get_plc_dbinfo(self): + return { + 'dbname' : self.SFA_PLC_DB_NAME, + 'address' : self.SFA_PLC_DB_HOST, + 'port' : self.SFA_PLC_DB_PORT, + 'user' : self.SFA_PLC_DB_USER, + 'password' : self.SFA_PLC_DB_PASSWORD + } + + ## + # SFA uses a PLCAPI connection to perform operations on the registry, + # such as creating and deleting slices. This connection requires an account + # on the PLC server with full administrator access. + # + # The Url parameter controls whether the connection uses PLCAPI directly (i.e. + # SFA is located on the same machine as PLC), or uses a XMLRPC connection + # to the PLC machine. If you wish to use the API directly, then remove the Url + # field from the dictionary. + + def get_plc_auth(self): + return { + 'AuthMethod': 'capability', + 'Username': self.SFA_PLC_USER, + 'AuthString': self.SFA_PLC_PASSWORD, + "Url": self.SFA_PLC_URL + } diff --git a/sfa/util/debug.py b/sfa/util/debug.py new file mode 100644 index 00000000..71eb0642 --- /dev/null +++ b/sfa/util/debug.py @@ -0,0 +1,57 @@ +### $Id: debug.py 14192 2009-07-02 08:40:01Z thierry $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/util/debug.py $ + +import time +import sys +import syslog + +class unbuffered: + """ + Write to /var/log/httpd/error_log. See + + http://www.modpython.org/FAQ/faqw.py?req=edit&file=faq02.003.htp + """ + + def write(self, data): + sys.stderr.write(data) + sys.stderr.flush() + +log = unbuffered() + +def profile(callable): + """ + Prints the runtime of the specified callable. Use as a decorator, e.g., + + @profile + def foo(...): + ... + + Or, equivalently, + + def foo(...): + ... + foo = profile(foo) + + Or inline: + + result = profile(foo)(...) + """ + + def wrapper(*args, **kwds): + start = time.time() + result = callable(*args, **kwds) + end = time.time() + args = map(str, args) + args += ["%s = %s" % (name, str(value)) for (name, value) in kwds.items()] + print >> log, "%s (%s): %f s" % (callable.__name__, ", ".join(args), end - start) + return result + + return wrapper + +if __name__ == "__main__": + def sleep(seconds = 1): + time.sleep(seconds) + + sleep = profile(sleep) + + sleep(1) diff --git a/sfa/util/faults.py b/sfa/util/faults.py new file mode 100644 index 00000000..7391bdd0 --- /dev/null +++ b/sfa/util/faults.py @@ -0,0 +1,290 @@ +# +# SFA API faults +# +# + +### $Id: faults.py 18586 2010-08-05 23:33:41Z tmack $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/util/faults.py $ + +import xmlrpclib + +class SfaFault(xmlrpclib.Fault): + def __init__(self, faultCode, faultString, extra = None): + if extra: + faultString += ": " + str(extra) + xmlrpclib.Fault.__init__(self, faultCode, faultString) + +class SfaInvalidAPIMethod(SfaFault): + def __init__(self, method, interface = None, extra = None): + faultString = "Invalid method " + method + if interface: + faultString += " for interface " + interface + SfaFault.__init__(self, 100, faultString, extra) + +class SfaInvalidArgumentCount(SfaFault): + def __init__(self, got, min, max = min, extra = None): + if min != max: + expected = "%d-%d" % (min, max) + else: + expected = "%d" % min + faultString = "Expected %s arguments, got %d" % \ + (expected, got) + SfaFault.__init__(self, 101, faultString, extra) + +class SfaInvalidArgument(SfaFault): + def __init__(self, extra = None, name = None): + if name is not None: + faultString = "Invalid %s value" % name + else: + faultString = "Invalid argument" + SfaFault.__init__(self, 102, faultString, extra) + +class SfaAuthenticationFailure(SfaFault): + def __init__(self, extra = None): + faultString = "Failed to authenticate call" + SfaFault.__init__(self, 103, faultString, extra) + +class SfaDBError(SfaFault): + def __init__(self, extra = None): + faultString = "Database error" + SfaFault.__init__(self, 106, faultString, extra) + +class SfaPermissionDenied(SfaFault): + def __init__(self, extra = None): + faultString = "Permission denied" + SfaFault.__init__(self, 108, faultString, extra) + +class SfaNotImplemented(SfaFault): + def __init__(self, interface=None, extra = None): + faultString = "Not implemented" + if interface: + faultString += " at interface " + interface + SfaFault.__init__(self, 109, faultString, extra) + +class SfaAPIError(SfaFault): + def __init__(self, extra = None): + faultString = "Internal API error" + SfaFault.__init__(self, 111, faultString, extra) + +class MalformedHrnException(SfaFault): + def __init__(self, value, extra = None): + self.value = value + faultString = "Malformed HRN: %(value)s" % locals() + SfaFault.__init__(self, 102, faultString, extra) + def __str__(self): + return repr(self.value) + +class TreeException(SfaFault): + def __init__(self, value, extra = None): + self.value = value + faultString = "Tree Exception: %(value)s, " % locals() + SfaFault.__init__(self, 111, faultString, extra) + def __str__(self): + return repr(self.value) + +class NonExistingRecord(SfaFault): + def __init__(self, value, extra = None): + self.value = value + faultString = "Non exsiting record %(value)s, " % locals() + SfaFault.__init__(self, 111, faultString, extra) + def __str__(self): + return repr(self.value) + +class ExistingRecord(SfaFault): + def __init__(self, value, extra = None): + self.value = value + faultString = "Existing record: %(value)s, " % locals() + SfaFault.__init__(self, 111, faultString, extra) + def __str__(self): + return repr(self.value) + + +class NonexistingCredType(SfaFault): + def __init__(self, value, extra = None): + self.value = value + faultString = "Non existing record: %(value)s, " % locals() + SfaFault.__init__(self, 111, faultString, extra) + def __str__(self): + return repr(self.value) + +class NonexistingFile(SfaFault): + def __init__(self, value, extra = None): + self.value = value + faultString = "Non existing file: %(value)s, " % locals() + SfaFault.__init__(self, 111, faultString, extra) + def __str__(self): + return repr(self.value) + +class InvalidRPCParams(SfaFault): + def __init__(self, value, extra = None): + self.value = value + faultString = "Invalid RPC Params: %(value)s, " % locals() + SfaFault.__init__(self, 102, faultString, extra) + def __str__(self): + return repr(self.value) + +# SMBAKER exceptions follow + +class ConnectionKeyGIDMismatch(SfaFault): + def __init__(self, value, extra = None): + self.value = value + faultString = "Connection Key GID mismatch: %(value)s" % locals() + SfaFault.__init__(self, 102, faultString, extra) + def __str__(self): + return repr(self.value) + +class MissingCallerGID(SfaFault): + def __init__(self, value, extra = None): + self.value = value + faultString = "Missing Caller GID: %(value)s" % locals() + SfaFault.__init__(self, 102, faultString, extra) + def __str__(self): + return repr(self.value) + +class RecordNotFound(SfaFault): + def __init__(self, value, extra = None): + self.value = value + faultString = "Record not found: %(value)s" % locals() + SfaFault.__init__(self, 102, faultString, extra) + def __str__(self): + return repr(self.value) + +class UnknownSfaType(SfaFault): + def __init__(self, value, extra = None): + self.value = value + faultString = "Unknown SFA Type: %(value)s" % locals() + SfaFault.__init__(self, 102, faultString, extra) + def __str__(self): + return repr(self.value) + +class MissingAuthority(SfaFault): + def __init__(self, value, extra = None): + self.value = value + faultString = "Missing authority: %(value)s" % locals() + SfaFault.__init__(self, 102, faultString, extra) + def __str__(self): + return repr(self.value) + +class PlanetLabRecordDoesNotExist(SfaFault): + def __init__(self, value, extra = None): + self.value = value + faultString = "PlanetLab record does not exist : %(value)s" % locals() + SfaFault.__init__(self, 102, faultString, extra) + def __str__(self): + return repr(self.value) + +class PermissionError(SfaFault): + def __init__(self, value, extra = None): + self.value = value + faultString = "Permission error: %(value)s" % locals() + SfaFault.__init__(self, 108, faultString, extra) + def __str__(self): + return repr(self.value) + +class InsufficientRights(SfaFault): + def __init__(self, value, extra = None): + self.value = value + faultString = "Insufficient rights: %(value)s" % locals() + SfaFault.__init__(self, 108, faultString, extra) + def __str__(self): + return repr(self.value) + +class MissingDelegateBit(SfaFault): + def __init__(self, value, extra = None): + self.value = value + faultString = "Missing delegate bit: %(value)s" % locals() + SfaFault.__init__(self, 108, faultString, extra) + def __str__(self): + return repr(self.value) + +class ChildRightsNotSubsetOfParent(SfaFault): + def __init__(self, value, extra = None): + self.value = value + faultString = "Child rights not subset of parent: %(value)s" % locals() + SfaFault.__init__(self, 103, faultString, extra) + def __str__(self): + return repr(self.value) + +class CertMissingParent(SfaFault): + def __init__(self, value, extra = None): + self.value = value + faultString = "Cert missing parent: %(value)s" % locals() + SfaFault.__init__(self, 103, faultString, extra) + def __str__(self): + return repr(self.value) + +class CertNotSignedByParent(SfaFault): + def __init__(self, value, extra = None): + self.value = value + faultString = "Cert not signed by parent: %(value)s" % locals() + SfaFault.__init__(self, 103, faultString, extra) + def __str__(self): + return repr(self.value) + +class GidParentHrn(SfaFault): + def __init__(self, value, extra = None): + self.value = value + faultString = "Cert URN is not an extension of its parent: %(value)s" % locals() + SfaFault.__init__(self, 103, faultString, extra) + def __str__(self): + return repr(self.value) + +class GidInvalidParentHrn(SfaFault): + def __init__(self, value, extra = None): + self.value = value + faultString = "GID invalid parent hrn: %(value)s" % locals() + SfaFault.__init__(self, 102, faultString, extra) + def __str__(self): + return repr(self.value) + +class SliverDoesNotExist(SfaFault): + def __init__(self, value, extra = None): + self.value = value + faultString = "Sliver does not exist : %(value)s" % locals() + SfaFault.__init__(self, 102, faultString, extra) + def __str__(self): + return repr(self.value) + +class BadRequestHash(xmlrpclib.Fault): + def __init__(self, hash = None, extra = None): + faultString = "bad request hash: " + str(hash) + xmlrpclib.Fault.__init__(self, 902, faultString) + +class MissingTrustedRoots(SfaFault): + def __init__(self, value, extra = None): + self.value = value + faultString = "Trusted root directory does not exist: %(value)s" % locals() + SfaFault.__init__(self, 102, faultString, extra) + def __str__(self): + return repr(self.value) + +class MissingSfaInfo(SfaFault): + def __init__(self, value, extra = None): + self.value = value + faultString = "Missing information: %(value)s" % locals() + SfaFault.__init__(self, 102, faultString, extra) + def __str__(self): + return repr(self.value) + +class InvalidRSpec(SfaFault): + def __init__(self, value, extra = None): + self.value = value + faultString = "Invalid RSpec: %(value)s" % locals() + SfaFault.__init__(self, 108, faultString, extra) + def __str__(self): + return repr(self.value) + +class AccountNotEnabled(SfaFault): + def __init__(self, extra = None): + faultString = "Account Disabled" + SfaFault.__init__(self, 108, faultString, extra) + def __str__(self): + return repr(self.value) + +class CredentialNotVerifiable(SfaFault): + def __init__(self, value, extra = None): + self.value = value + faultString = "Unable to verify credential: %(value)s, " %locals() + SfaFault.__init__(self, 115, faultString, extra) + def __str__(self): + return repr(self.value) diff --git a/sfa/util/filter.py b/sfa/util/filter.py new file mode 100644 index 00000000..0e362506 --- /dev/null +++ b/sfa/util/filter.py @@ -0,0 +1,218 @@ +# $Id: filter.py 16477 2010-01-05 16:31:37Z thierry $ +# $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/util/filter.py $ +from types import StringTypes +try: + set +except NameError: + from sets import Set + set = Set + +import time +import pgdb + +from sfa.util.faults import * +from sfa.util.parameter import Parameter, Mixed, python_type + + +class Filter(Parameter, dict): + """ + A type of parameter that represents a filter on one or more + columns of a database table. + Special features provide support for negation, upper and lower bounds, + as well as sorting and clipping. + + + fields should be a dictionary of field names and types + Only filters on non-sequence type fields are supported. + example : fields = {'node_id': Parameter(int, "Node identifier"), + 'hostname': Parameter(int, "Fully qualified hostname", max = 255), + ...} + + + filter should be a dictionary of field names and values + representing the criteria for filtering. + example : filter = { 'hostname' : '*.edu' , site_id : [34,54] } + Whether the filter represents an intersection (AND) or a union (OR) + of these criteria is determined by the join_with argument + provided to the sql method below + + Special features: + + * a field starting with the ~ character means negation. + example : filter = { '~peer_id' : None } + + * a field starting with < [ ] or > means lower than or greater than + < > uses strict comparison + [ ] is for using <= or >= instead + example : filter = { ']event_id' : 2305 } + example : filter = { '>time' : 1178531418 } + in this example the integer value denotes a unix timestamp + + * if a value is a sequence type, then it should represent + a list of possible values for that field + example : filter = { 'node_id' : [12,34,56] } + + * a (string) value containing either a * or a % character is + treated as a (sql) pattern; * are replaced with % that is the + SQL wildcard character. + example : filter = { 'hostname' : '*.jp' } + + * fields starting with - are special and relate to row selection, i.e. sorting and clipping + * '-SORT' : a field name, or an ordered list of field names that are used for sorting + these fields may start with + (default) or - for denoting increasing or decreasing order + example : filter = { '-SORT' : [ '+node_id', '-hostname' ] } + * '-OFFSET' : the number of first rows to be ommitted + * '-LIMIT' : the amount of rows to be returned + example : filter = { '-OFFSET' : 100, '-LIMIT':25} + + A realistic example would read + GetNodes ( { 'node_type' : 'regular' , 'hostname' : '*.edu' , '-SORT' : 'hostname' , '-OFFSET' : 30 , '-LIMIT' : 25 } ) + and that would return regular (usual) nodes matching '*.edu' in alphabetical order from 31th to 55th + """ + + def __init__(self, fields = {}, filter = {}, doc = "Attribute filter"): + # Store the filter in our dict instance + valid_fields = {} + for field in filter: + if field in fields: + valid_fields[field] = filter[field] + dict.__init__(self, valid_fields) + + # Declare ourselves as a type of parameter that can take + # either a value or a list of values for each of the specified + # fields. + self.fields = dict ( [ ( field, Mixed (expected, [expected])) + for (field,expected) in fields.iteritems() + if python_type(expected) not in (list, tuple, set) ] ) + + # Null filter means no filter + Parameter.__init__(self, self.fields, doc = doc, nullok = True) + + def quote(self, value): + """ + Returns quoted version of the specified value. + """ + + # The pgdb._quote function is good enough for general SQL + # quoting, except for array types. + if isinstance(value, (list, tuple, set)): + return "ARRAY[%s]" % ", ".join(map(self.quote, value)) + else: + return pgdb._quote(value) + + def sql(self, join_with = "AND"): + """ + Returns a SQL conditional that represents this filter. + """ + + # So that we always return something + if join_with == "AND": + conditionals = ["True"] + elif join_with == "OR": + conditionals = ["False"] + else: + assert join_with in ("AND", "OR") + + # init + sorts = [] + clips = [] + + for field, value in self.iteritems(): + # handle negation, numeric comparisons + # simple, 1-depth only mechanism + + modifiers={'~' : False, + '<' : False, '>' : False, + '[' : False, ']' : False, + '-' : False, + } + + for char in modifiers.keys(): + if field[0] == char: + modifiers[char]=True; + field = field[1:] + break + + # filter on fields + if not modifiers['-']: + if field not in self.fields: + raise SfaInvalidArgument, "Invalid filter field '%s'" % field + + if isinstance(value, (list, tuple, set)): + # handling filters like '~slice_id':[] + # this should return true, as it's the opposite of 'slice_id':[] which is false + # prior to this fix, 'slice_id':[] would have returned ``slice_id IN (NULL) '' which is unknown + # so it worked by coincidence, but the negation '~slice_ids':[] would return false too + if not value: + field="" + operator="" + value = "FALSE" + else: + operator = "IN" + value = map(str, map(self.quote, value)) + value = "(%s)" % ", ".join(value) + else: + if value is None: + operator = "IS" + value = "NULL" + elif isinstance(value, StringTypes) and \ + (value.find("*") > -1 or value.find("%") > -1): + operator = "LIKE" + # insert *** in pattern instead of either * or % + # we dont use % as requests are likely to %-expansion later on + # actual replacement to % done in PostgreSQL.py + value = value.replace ('*','***') + value = value.replace ('%','***') + value = str(self.quote(value)) + else: + operator = "=" + if modifiers['<']: + operator='<' + if modifiers['>']: + operator='>' + if modifiers['[']: + operator='<=' + if modifiers[']']: + operator='>=' + else: + value = str(self.quote(value)) + + clause = "%s %s %s" % (field, operator, value) + + if modifiers['~']: + clause = " ( NOT %s ) " % (clause) + + conditionals.append(clause) + # sorting and clipping + else: + if field not in ('SORT','OFFSET','LIMIT'): + raise SfaInvalidArgument, "Invalid filter, unknown sort and clip field %r"%field + # sorting + if field == 'SORT': + if not isinstance(value,(list,tuple,set)): + value=[value] + for field in value: + order = 'ASC' + if field[0] == '+': + field = field[1:] + elif field[0] == '-': + field = field[1:] + order = 'DESC' + if field not in self.fields: + raise SfaInvalidArgument, "Invalid field %r in SORT filter"%field + sorts.append("%s %s"%(field,order)) + # clipping + elif field == 'OFFSET': + clips.append("OFFSET %d"%value) + # clipping continued + elif field == 'LIMIT' : + clips.append("LIMIT %d"%value) + + where_part = (" %s " % join_with).join(conditionals) + clip_part = "" + if sorts: + clip_part += " ORDER BY " + ",".join(sorts) + if clips: + clip_part += " " + " ".join(clips) +# print 'where_part=',where_part,'clip_part',clip_part + return (where_part,clip_part) diff --git a/sfa/util/method.py b/sfa/util/method.py new file mode 100644 index 00000000..40bc5a57 --- /dev/null +++ b/sfa/util/method.py @@ -0,0 +1,306 @@ +# +# Base class for all SfaAPI functions +# +# + +### $Id: method.py 18544 2010-07-30 20:42:56Z tmack $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/util/method.py $ + +import os, time +from types import * +from types import StringTypes +import traceback +import textwrap +import xmlrpclib + + +from sfa.util.faults import * +from sfa.util.parameter import Parameter, Mixed, python_type, xmlrpc_type +from sfa.trust.auth import Auth +from sfa.util.debug import profile, log + +# we inherit object because we use new-style classes for legacy methods +class Method (object): + """ + Base class for all SfaAPI functions. At a minimum, all SfaAPI + functions must define: + + interfaces = [allowed interfaces] + accepts = [Parameter(arg1_type, arg1_doc), Parameter(arg2_type, arg2_doc), ...] + returns = Parameter(return_type, return_doc) + call(arg1, arg2, ...): method body + + Argument types may be Python types (e.g., int, bool, etc.), typed + values (e.g., 1, True, etc.), a Parameter, or lists or + dictionaries of possibly mixed types, values, and/or Parameters + (e.g., [int, bool, ...] or {'arg1': int, 'arg2': bool}). + + Once function decorators in Python 2.4 are fully supported, + consider wrapping calls with accepts() and returns() functions + instead of performing type checking manually. + """ + + interfaces = [] + accepts = [] + returns = bool + status = "current" + + def call(self, *args): + """ + Method body for all SfaAPI functions. Must override. + + """ + + return True + + def __init__(self, api): + self.name = self.__class__.__name__ + self.api = api + + # Auth may set this to a Person instance (if an anonymous + # method, will remain None). + self.caller = None + + # API may set this to a (addr, port) tuple if known + self.source = None + + def __call__(self, *args, **kwds): + """ + Main entry point for all SfaAPI functions. Type checks + arguments, authenticates, and executes call(). + """ + + try: + start = time.time() + methodname = self.name + if not self.api.interface or self.api.interface not in self.interfaces: + raise SfaInvalidAPIMethod(methodname, self.api.interface) + + # legacy code cannot be type-checked, due to the way Method.args() works + if not hasattr(self,"skip_typecheck"): + (min_args, max_args, defaults) = self.args() + + # Check that the right number of arguments were passed in + if len(args) < len(min_args) or len(args) > len(max_args): + raise SfaInvalidArgumentCount(len(args), len(min_args), len(max_args)) + + for name, value, expected in zip(max_args, args, self.accepts): + self.type_check(name, value, expected, args) + + result = self.call(*args, **kwds) + runtime = time.time() - start + + if self.api.config.SFA_API_DEBUG or hasattr(self, 'message'): + # XX print to some log file + # print >> log, "some output" + pass + + return result + + except SfaFault, fault: + + caller = "" + + # Prepend caller and method name to expected faults + fault.faultString = caller + ": " + self.name + ": " + fault.faultString + runtime = time.time() - start + + if self.api.config.SFA_API_DEBUG: + traceback.print_exc() + raise fault + + + def help(self, indent = " "): + """ + Text documentation for the method. + """ + + (min_args, max_args, defaults) = self.args() + + text = "%s(%s) -> %s\n\n" % (self.name, ", ".join(max_args), xmlrpc_type(self.returns)) + + text += "Description:\n\n" + lines = [indent + line.strip() for line in self.__doc__.strip().split("\n")] + text += "\n".join(lines) + "\n\n" + + def param_text(name, param, indent, step): + """ + Format a method parameter. + """ + + text = indent + + # Print parameter name + if name: + param_offset = 32 + text += name.ljust(param_offset - len(indent)) + else: + param_offset = len(indent) + + # Print parameter type + param_type = python_type(param) + text += xmlrpc_type(param_type) + "\n" + + # Print parameter documentation right below type + if isinstance(param, Parameter): + wrapper = textwrap.TextWrapper(width = 70, + initial_indent = " " * param_offset, + subsequent_indent = " " * param_offset) + text += "\n".join(wrapper.wrap(param.doc)) + "\n" + param = param.type + + text += "\n" + + # Indent struct fields and mixed types + if isinstance(param, dict): + for name, subparam in param.iteritems(): + text += param_text(name, subparam, indent + step, step) + elif isinstance(param, Mixed): + for subparam in param: + text += param_text(name, subparam, indent + step, step) + elif isinstance(param, (list, tuple, set)): + for subparam in param: + text += param_text("", subparam, indent + step, step) + + return text + + text += "Parameters:\n\n" + for name, param in zip(max_args, self.accepts): + text += param_text(name, param, indent, indent) + + text += "Returns:\n\n" + text += param_text("", self.returns, indent, indent) + + return text + + def args(self): + """ + Returns a tuple: + + ((arg1_name, arg2_name, ...), + (arg1_name, arg2_name, ..., optional1_name, optional2_name, ...), + (None, None, ..., optional1_default, optional2_default, ...)) + + That represents the minimum and maximum sets of arguments that + this function accepts and the defaults for the optional arguments. + """ + + # Inspect call. Remove self from the argument list. + max_args = self.call.func_code.co_varnames[1:self.call.func_code.co_argcount] + defaults = self.call.func_defaults + if defaults is None: + defaults = () + + min_args = max_args[0:len(max_args) - len(defaults)] + defaults = tuple([None for arg in min_args]) + defaults + + return (min_args, max_args, defaults) + + def type_check(self, name, value, expected, args): + """ + Checks the type of the named value against the expected type, + which may be a Python type, a typed value, a Parameter, a + Mixed type, or a list or dictionary of possibly mixed types, + values, Parameters, or Mixed types. + + Extraneous members of lists must be of the same type as the + last specified type. For example, if the expected argument + type is [int, bool], then [1, False] and [14, True, False, + True] are valid, but [1], [False, 1] and [14, True, 1] are + not. + + Extraneous members of dictionaries are ignored. + """ + + # If any of a number of types is acceptable + if isinstance(expected, Mixed): + for item in expected: + try: + self.type_check(name, value, item, args) + return + except SfaInvalidArgument, fault: + pass + raise fault + + # If an authentication structure is expected, save it and + # authenticate after basic type checking is done. + #if isinstance(expected, Auth): + # auth = expected + #else: + # auth = None + + # Get actual expected type from within the Parameter structure + if isinstance(expected, Parameter): + min = expected.min + max = expected.max + nullok = expected.nullok + expected = expected.type + else: + min = None + max = None + nullok = False + + expected_type = python_type(expected) + + # If value can be NULL + if value is None and nullok: + return + + # Strings are a special case. Accept either unicode or str + # types if a string is expected. + if expected_type in StringTypes and isinstance(value, StringTypes): + pass + + # Integers and long integers are also special types. Accept + # either int or long types if an int or long is expected. + elif expected_type in (IntType, LongType) and isinstance(value, (IntType, LongType)): + pass + + elif not isinstance(value, expected_type): + raise SfaInvalidArgument("expected %s, got %s" % \ + (xmlrpc_type(expected_type), + xmlrpc_type(type(value))), + name) + + # If a minimum or maximum (length, value) has been specified + if expected_type in StringTypes: + if min is not None and \ + len(value.encode(self.api.encoding)) < min: + raise SfaInvalidArgument, "%s must be at least %d bytes long" % (name, min) + if max is not None and \ + len(value.encode(self.api.encoding)) > max: + raise SfaInvalidArgument, "%s must be at most %d bytes long" % (name, max) + elif expected_type in (list, tuple, set): + if min is not None and len(value) < min: + raise SfaInvalidArgument, "%s must contain at least %d items" % (name, min) + if max is not None and len(value) > max: + raise SfaInvalidArgument, "%s must contain at most %d items" % (name, max) + else: + if min is not None and value < min: + raise SfaInvalidArgument, "%s must be > %s" % (name, str(min)) + if max is not None and value > max: + raise SfaInvalidArgument, "%s must be < %s" % (name, str(max)) + + # If a list with particular types of items is expected + if isinstance(expected, (list, tuple, set)): + for i in range(len(value)): + if i >= len(expected): + j = len(expected) - 1 + else: + j = i + self.type_check(name + "[]", value[i], expected[j], args) + + # If a struct with particular (or required) types of items is + # expected. + elif isinstance(expected, dict): + for key in value.keys(): + if key in expected: + self.type_check(name + "['%s']" % key, value[key], expected[key], args) + for key, subparam in expected.iteritems(): + if isinstance(subparam, Parameter) and \ + subparam.optional is not None and \ + not subparam.optional and key not in value.keys(): + raise SfaInvalidArgument("'%s' not specified" % key, name) + + #if auth is not None: + # auth.check(self, *args) diff --git a/sfa/util/misc.py b/sfa/util/misc.py new file mode 100644 index 00000000..e81123b6 --- /dev/null +++ b/sfa/util/misc.py @@ -0,0 +1,49 @@ +### $Id: misc.py 16477 2010-01-05 16:31:37Z thierry $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/util/misc.py $ + +from sfa.util.faults import * + +def get_leaf(hrn): + parts = hrn.split(".") + return ".".join(parts[-1:]) + +def get_authority(hrn): + parts = hrn.split(".") + return ".".join(parts[:-1]) + +def hrn_to_pl_slicename(hrn): + parts = hrn.split(".") + return parts[-2] + "_" + parts[-1] + +# assuming hrn is the hrn of an authority, return the plc authority name +def hrn_to_pl_authname(hrn): + parts = hrn.split(".") + return parts[-1] + +# assuming hrn is the hrn of an authority, return the plc login_base +def hrn_to_pl_login_base(hrn): + return hrn_to_pl_authname(hrn) + +def hostname_to_hrn(auth_hrn, login_base, hostname): + """ + Convert hrn to plantelab name. + """ + sfa_hostname = ".".join([auth_hrn, login_base, hostname.split(".")[0]]) + return sfa_hostname + +def slicename_to_hrn(auth_hrn, slicename): + """ + Convert hrn to planetlab name. + """ + parts = slicename.split("_") + slice_hrn = ".".join([auth_hrn, parts[0]]) + "." + "_".join(parts[1:]) + + return slice_hrn + +def email_to_hrn(auth_hrn, email): + parts = email.split("@") + username = parts[0] + username = username.replace(".", "_") + person_hrn = ".".join([auth_hrn, username]) + + return person_hrn diff --git a/sfa/util/namespace.py b/sfa/util/namespace.py new file mode 100644 index 00000000..a868bb67 --- /dev/null +++ b/sfa/util/namespace.py @@ -0,0 +1,108 @@ +### $Id: namespace.py 18515 2010-07-15 20:41:59Z tmack $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/util/namespace.py $ + +from sfa.util.faults import * +URN_PREFIX = "urn:publicid:IDN" + +def get_leaf(hrn): + parts = hrn.split(".") + return ".".join(parts[-1:]) + +def get_authority(xrn): + hrn, type = urn_to_hrn(xrn) + if type and type == 'authority': + return hrn + + parts = hrn.split(".") + return ".".join(parts[:-1]) + +def hrn_to_pl_slicename(hrn): + parts = hrn.split(".") + return parts[-2] + "_" + parts[-1] + +# assuming hrn is the hrn of an authority, return the plc authority name +def hrn_to_pl_authname(hrn): + parts = hrn.split(".") + return parts[-1] + +# assuming hrn is the hrn of an authority, return the plc login_base +def hrn_to_pl_login_base(hrn): + return hrn_to_pl_authname(hrn) + +def hostname_to_hrn(auth_hrn, login_base, hostname): + """ + Convert hrn to plantelab name. + """ + sfa_hostname = ".".join([auth_hrn, login_base, hostname.split(".")[0]]) + return sfa_hostname + +def slicename_to_hrn(auth_hrn, slicename): + """ + Convert hrn to planetlab name. + """ + parts = slicename.split("_") + slice_hrn = ".".join([auth_hrn, parts[0]]) + "." + "_".join(parts[1:]) + + return slice_hrn + +def email_to_hrn(auth_hrn, email): + parts = email.split("@") + username = parts[0] + username = username.replace(".", "_").replace("+", "_") + person_hrn = ".".join([auth_hrn, username]) + + return person_hrn + +def urn_to_hrn(urn): + """ + convert a urn to hrn + return a tuple (hrn, type) + """ + + # if this is already a hrn dont do anything + if not urn or not urn.startswith(URN_PREFIX): + return urn, None + + name = urn[len(URN_PREFIX):] + hrn_parts = name.split("+") + + type = hrn_parts.pop(2) + + # convert hrn_parts (list) into hrn (str) by doing the following + # remove blank elements + # replace ':' with '.' + # join list elements using '.' + hrn = '.'.join([part.replace(':', '.') for part in hrn_parts if part]) + + # Remove the authority name (e.g. '.sa') + if type == 'authority': + hrn = hrn.replace ('.sa', '') + + return str(hrn), str(type) + + +def hrn_to_urn(hrn, type=None): + """ + convert an hrn and type to a urn string + """ + # if this is already a urn dont do anything + if not hrn or hrn.startswith(URN_PREFIX): + return hrn + + authority = get_authority(hrn) + name = get_leaf(hrn) + + if type == 'authority': + authority = hrn + name = 'sa' + + if authority.startswith("plc"): + if type == None: + urn = "+".join(['',authority.replace('.',':'),name]) + else: + urn = "+".join(['',authority.replace('.',':'),type,name]) + + else: + urn = "+".join(['',authority,type,name]) + + return URN_PREFIX + urn diff --git a/sfa/util/nodemanager.py b/sfa/util/nodemanager.py new file mode 100644 index 00000000..1671b9d6 --- /dev/null +++ b/sfa/util/nodemanager.py @@ -0,0 +1,46 @@ +import tempfile +import commands +import os + +class NodeManager: + + method = None + + def __init__(self, config): + self.config = config + + def __getattr__(self, method): + self.method = method + return self.__call__ + + def __call__(self, *args): + method = self.method + sfa_slice_prefix = self.config.SFA_CM_SLICE_PREFIX + sfa_slice = sfa_slice_prefix + "_sfacm" + python = "/usr/bin/python" + vserver_path = "/vservers/%s" % (sfa_slice) + script_path = "/tmp/" + path = "%(vserver_path)s/%(script_path)s" % locals() + (fd, filename) = tempfile.mkstemp(dir=path) + scriptname = script_path + os.sep + filename.split(os.sep)[-1:][0] + # define the script to execute + script = """ +#!%(python)s +import xmlrpclib +s = xmlrpclib.ServerProxy('http://127.0.0.1:812') +print s.%(method)s%(args)s""" % locals() + + try: + # write the script to a temporary file + f = open(filename, 'w') + f.write(script % locals()) + f.close() + # make the file executeable + chmod_cmd = "/bin/chmod 775 %(filename)s" % locals() + (status, output) = commands.getstatusoutput(chmod_cmd) + + # execute the commad as a slice with root NM privs + cmd = 'su - %(sfa_slice)s -c "%(python)s %(scriptname)s"' % locals() + (status, output) = commands.getstatusoutput(cmd) + return (status, output) + finally: os.unlink(filename) diff --git a/sfa/util/parameter.py b/sfa/util/parameter.py new file mode 100644 index 00000000..367d106e --- /dev/null +++ b/sfa/util/parameter.py @@ -0,0 +1,108 @@ +# +# Shared type definitions +# +# Mark Huang +# Copyright (C) 2006 The Trustees of Princeton University +# +# $Id: parameter.py 16477 2010-01-05 16:31:37Z thierry $ +# + +### $Id: parameter.py 16477 2010-01-05 16:31:37Z thierry $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/util/parameter.py $ + +from types import * +from sfa.util.faults import * + +class Parameter: + """ + Typed value wrapper. Use in accepts and returns to document method + parameters. Set the optional and default attributes for + sub-parameters (i.e., dict fields). + """ + + def __init__(self, type, doc = "", + min = None, max = None, + optional = None, + ro = False, + nullok = False): + # Basic type of the parameter. Must be a builtin type + # that can be marshalled by XML-RPC. + self.type = type + + # Documentation string for the parameter + self.doc = doc + + # Basic value checking. For numeric types, the minimum and + # maximum possible values, inclusive. For string types, the + # minimum and maximum possible UTF-8 encoded byte lengths. + self.min = min + self.max = max + + # Whether the sub-parameter is optional or not. If None, + # unknown whether it is optional. + self.optional = optional + + # Whether the DB field is read-only. + self.ro = ro + + # Whether the DB field can be NULL. + self.nullok = nullok + + def type(self): + return self.type + + def __repr__(self): + return repr(self.type) + +class Mixed(tuple): + """ + A list (technically, a tuple) of types. Use in accepts and returns + to document method parameters that may return mixed types. + """ + + def __new__(cls, *types): + return tuple.__new__(cls, types) + + +def python_type(arg): + """ + Returns the Python type of the specified argument, which may be a + Python type, a typed value, or a Parameter. + """ + + if isinstance(arg, Parameter): + arg = arg.type + + if isinstance(arg, type): + return arg + else: + return type(arg) + +def xmlrpc_type(arg): + """ + Returns the XML-RPC type of the specified argument, which may be a + Python type, a typed value, or a Parameter. + """ + + arg_type = python_type(arg) + + if arg_type == NoneType: + return "nil" + elif arg_type == IntType or arg_type == LongType: + return "int" + elif arg_type == bool: + return "boolean" + elif arg_type == FloatType: + return "double" + elif arg_type in StringTypes: + return "string" + elif arg_type == ListType or arg_type == TupleType: + return "array" + elif arg_type == DictType: + return "struct" + elif arg_type == Mixed: + # Not really an XML-RPC type but return "mixed" for + # documentation purposes. + return "mixed" + else: + raise SfaAPIError, "XML-RPC cannot marshal %s objects" % arg_type diff --git a/sfa/util/policy.py b/sfa/util/policy.py new file mode 100644 index 00000000..3e8332c9 --- /dev/null +++ b/sfa/util/policy.py @@ -0,0 +1,23 @@ +### $Id: policy.py 15724 2009-11-11 19:52:12Z tmack $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/util/policy.py $ + +import os + +from sfa.util.storage import * +from sfa.util.debug import log + +class Policy(SimpleStorage): + + def __init__(self, api): + self.api = api + path = self.api.config.SFA_CONFIG_DIR + filename = ".".join([self.api.interface, self.api.hrn, "policy"]) + filepath = path + os.sep + filename + self.policy_file = filepath + default_policy = {'slice_whitelist': [], + 'slice_blacklist': [], + 'node_whitelist': [], + 'node_blacklist': []} + SimpleStorage.__init__(self, self.policy_file, default_policy) + self.load() + diff --git a/sfa/util/prefixTree.py b/sfa/util/prefixTree.py new file mode 100755 index 00000000..93b0c5cd --- /dev/null +++ b/sfa/util/prefixTree.py @@ -0,0 +1,97 @@ +class prefixNode: + + def __init__(self, prefix): + self.prefix = prefix + self.children = [] + + +class prefixTree: + + def __init__(self): + self.root = prefixNode("") + + def insert(self, prefix, node = None): + """ + insert a prefix into the tree + """ + if not node: + node = self.root + + parts = prefix.split(".") + length = len(parts) + + if length > 1: + for i in range(1, length + 1): + name = ".".join(parts[:i]) + if not self.exists(name) and not name == prefix: + self.insert(name) + + if prefix.startswith(node.prefix): + if prefix == node.prefix: + pass + elif not node.children: + node.children.append(prefixNode(prefix)) + else: + inserted = False + for child in node.children: + if prefix.startswith(child.prefix): + self.insert(prefix, child) + inserted = True + if not inserted: + node.children.append(prefixNode(prefix)) + + def load(self, prefix_list): + """ + load a list of prefixes into the tree + """ + for prefix in prefix_list: + self.insert(prefix) + + def exists(self, prefix, node = None): + """ + returns true if the specified prefix exists anywhere in the tree, + false if it doesnt. + """ + if not node: + node = self.root + + if not prefix.startswith(node.prefix): + return False + elif node.prefix == prefix: + return True + elif not node.children: + return False + else: + for child in node.children: + if prefix.startswith(child.prefix): + return self.exists(prefix, child) + + def best_match(self, prefix, node = None): + """ + searches the tree and returns the prefix that best matches the + specified prefix + """ + if not node: + node = self.root + + if prefix.startswith(node.prefix): + if not node.children: + return node.prefix + for child in node.children: + if prefix.startswith(child.prefix): + return self.best_match(prefix, child) + return node.prefix + + def dump(self, node = None): + """ + print the tree + """ + if not node: + node = self.root + print node.prefix + + for child in node.children: + print child.prefix, + + for child in node.children: + self.dump(child) diff --git a/sfa/util/record.py b/sfa/util/record.py new file mode 100644 index 00000000..a0d836c5 --- /dev/null +++ b/sfa/util/record.py @@ -0,0 +1,399 @@ +## +# Implements support for SFA records +# +# TODO: Use existing PLC database methods? or keep this separate? +## + +### $Id: record.py 17916 2010-05-04 21:01:12Z tmack $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/util/record.py $ + +from types import StringTypes + +from sfa.trust.gid import * + +import sfa.util.report +from sfa.util.rspec import * +from sfa.util.parameter import * +from sfa.util.namespace import * +from sfa.util.row import Row + +class SfaRecord(Row): + """ + The SfaRecord class implements an SFA Record. A SfaRecord is a tuple + (Hrn, GID, Type, Info). + + Hrn specifies the Human Readable Name of the object + GID is the GID of the object + Type is user | authority | slice | component + + Info is comprised of the following sub-fields + pointer = a pointer to the record in the PL database + + The pointer is interpreted depending on the type of the record. For example, + if the type=="user", then pointer is assumed to be a person_id that indexes + into the persons table. + + A given HRN may have more than one record, provided that the records are + of different types. + """ + + table_name = 'sfa' + + primary_key = 'record_id' + + ### the wsdl generator assumes this is named 'fields' + internal_fields = { + 'record_id': Parameter(int, 'An id that uniquely identifies this record', ro=True), + 'pointer': Parameter(int, 'An id that uniquely identifies this record in an external database ') + } + + fields = { + 'authority': Parameter(str, "The authority for this record"), + 'peer_authority': Parameter(str, "The peer authority for this record"), + 'hrn': Parameter(str, "Human readable name of object"), + 'gid': Parameter(str, "GID of the object"), + 'type': Parameter(str, "Record type"), + 'last_updated': Parameter(int, 'Date and time of last update', ro=True), + 'date_created': Parameter(int, 'Date and time this record was created', ro=True), + } + all_fields = dict(fields.items() + internal_fields.items()) + ## + # Create an SFA Record + # + # @param name if !=None, assign the name of the record + # @param gid if !=None, assign the gid of the record + # @param type one of user | authority | slice | component + # @param pointer is a pointer to a PLC record + # @param dict if !=None, then fill in this record from the dictionary + + def __init__(self, hrn=None, gid=None, type=None, pointer=None, peer_authority=None, dict=None, string=None): + self.dirty = True + self.hrn = None + self.gid = None + self.type = None + self.pointer = None + self.set_peer_auth(peer_authority) + if hrn: + self.set_name(hrn) + if gid: + self.set_gid(gid) + if type: + self.set_type(type) + if pointer: + self.set_pointer(pointer) + if dict: + self.load_from_dict(dict) + if string: + self.load_from_string(string) + + + def validate_last_updated(self, last_updated): + return time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime()) + + def update(self, new_dict): + if isinstance(new_dict, list): + new_dict = new_dict[0] + + # Convert any boolean strings to real bools + for key in new_dict: + if isinstance(new_dict[key], StringTypes): + if new_dict[key].lower() in ["true"]: + new_dict[key] = True + elif new_dict[key].lower() in ["false"]: + new_dict[key] = False + dict.update(self, new_dict) + + ## + # Set the name of the record + # + # @param hrn is a string containing the HRN + + def set_name(self, hrn): + """ + Set the name of the record + """ + self.hrn = hrn + self['hrn'] = hrn + self.dirty = True + + ## + # Set the GID of the record + # + # @param gid is a GID object or the string representation of a GID object + + def set_gid(self, gid): + """ + Set the GID of the record + """ + + if isinstance(gid, StringTypes): + self.gid = gid + self['gid'] = gid + else: + self.gid = gid.save_to_string(save_parents=True) + self['gid'] = gid.save_to_string(save_parents=True) + self.dirty = True + + ## + # Set the type of the record + # + # @param type is a string: user | authority | slice | component + + def set_type(self, type): + """ + Set the type of the record + """ + self.type = type + self['type'] = type + self.dirty = True + + ## + # Set the pointer of the record + # + # @param pointer is an integer containing the ID of a PLC record + + def set_pointer(self, pointer): + """ + Set the pointer of the record + """ + self.pointer = pointer + self['pointer'] = pointer + self.dirty = True + + + def set_peer_auth(self, peer_authority): + self.peer_authority = peer_authority + self['peer_authority'] = peer_authority + self.dirty = True + + ## + # Return the name (HRN) of the record + + def get_name(self): + """ + Return the name (HRN) of the record + """ + return self.hrn + + ## + # Return the type of the record + + def get_type(self): + """ + Return the type of the record + """ + return self.type + + ## + # Return the pointer of the record. The pointer is an integer that may be + # used to look up the record in the PLC database. The evaluation of pointer + # depends on the type of the record + + def get_pointer(self): + """ + Return the pointer of the record. The pointer is an integer that may be + used to look up the record in the PLC database. The evaluation of pointer + depends on the type of the record + """ + return self.pointer + + ## + # Return the GID of the record, in the form of a GID object + # TODO: not the best name for the function, because we have things called + # gidObjects in the Cred + + def get_gid_object(self): + """ + Return the GID of the record, in the form of a GID object + """ + return GID(string=self.gid) + + ## + # Returns a list of field names in this record. + + def get_field_names(self): + """ + Returns a list of field names in this record. + """ + return self.fields.keys() + + ## + # Given a field name ("hrn", "gid", ...) return the value of that field. + # + # @param fieldname is the name of field to be returned + + def get_field_value_string(self, fieldname): + """ + Given a field name ("hrn", "gid", ...) return the value of that field. + """ + if fieldname == "authority": + val = get_authority(self['hrn']) + else: + try: + val = getattr(self, fieldname) + except: + val = self[fieldname] + if isinstance(val, str): + return "'" + str(val) + "'" + else: + return str(val) + + ## + # Given a list of field names, return a list of values for those public. + # + # @param fieldnames is a list of field names + + def get_field_value_strings(self, fieldnames): + """ + Given a list of field names, return a list of values for those public. + """ + return [ self.get_field_value_string (fieldname) for fieldname in fieldnames ] + + ## + # Return the record in the form of a dictionary + + def as_dict(self): + """ + Return the record in the form of a dictionary + """ + return dict(self) + + ## + # Load the record from a dictionary + # + # @param dict dictionary to load record public from + + def load_from_dict(self, dict): + """ + Load the record from a dictionary + """ + self.set_name(dict['hrn']) + gidstr = dict.get("gid", None) + if gidstr: + self.set_gid(dict['gid']) + + if "pointer" in dict: + self.set_pointer(dict['pointer']) + + self.set_type(dict['type']) + self.update(dict) + + ## + # Save the record to a string. The string contains an XML representation of + # the record. + + def save_to_string(self): + """ + Save the record to a string. The string contains an XML representation of + the record. + """ + recorddict = self.as_dict() + filteredDict = dict([(key, val) for (key, val) in recorddict.iteritems() if key in self.fields.keys()]) + record = RecordSpec() + record.parseDict(filteredDict) + str = record.toxml() + #str = xmlrpclib.dumps((dict,), allow_none=True) + return str + + ## + # Load the record from a string. The string is assumed to contain an XML + # representation of the record. + + def load_from_string(self, str): + """ + Load the record from a string. The string is assumed to contain an XML + representation of the record. + """ + #dict = xmlrpclib.loads(str)[0][0] + + record = RecordSpec() + record.parseString(str) + record_dict = record.toDict() + sfa_dict = record_dict['record'] + self.load_from_dict(sfa_dict) + + ## + # Dump the record to stdout + # + # @param dump_parents if true, then the parents of the GID will be dumped + + def dump(self, dump_parents=False): + """ + Walk tree and dump records. + """ + #print "RECORD", self.name + #print " hrn:", self.name + #print " type:", self.type + #print " gid:" + #if (not self.gid): + # print " None" + #else: + # self.get_gid_object().dump(8, dump_parents) + #print " pointer:", self.pointer + + order = SfaRecord.fields.keys() + for key in self.keys(): + if key not in order: + order.append(key) + for key in order: + if key in self and key in self.fields: + if key in 'gid' and self[key]: + gid = GID(string=self[key]) + print " %s:" % key + gid.dump(8, dump_parents) + else: + print " %s: %s" % (key, self[key]) + + def getdict(self): + return dict(self) + + +class UserRecord(SfaRecord): + + fields = { + 'email': Parameter(str, 'email'), + 'first_name': Parameter(str, 'First name'), + 'last_name': Parameter(str, 'Last name'), + 'phone': Parameter(str, 'Phone Number'), + 'keys': Parameter(str, 'Public key'), + 'slices': Parameter([str], 'List of slices this user belongs to'), + } + fields.update(SfaRecord.fields) + +class SliceRecord(SfaRecord): + fields = { + 'name': Parameter(str, 'Slice name'), + 'url': Parameter(str, 'Slice url'), + 'expires': Parameter(int, 'Date and time this slice exipres'), + 'researcher': Parameter([str], 'List of users for this slice'), + 'PI': Parameter([str], 'List of PIs responsible for this slice'), + 'description': Parameter([str], 'Description of this slice'), + } + fields.update(SfaRecord.fields) + + +class NodeRecord(SfaRecord): + fields = { + 'hostname': Parameter(str, 'This nodes dns name'), + 'node_type': Parameter(str, 'Type of node this is'), + 'node_type': Parameter(str, 'Type of node this is'), + 'latitude': Parameter(str, 'latitude'), + 'longitude': Parameter(str, 'longitude'), + } + fields.update(SfaRecord.fields) + + +class AuthorityRecord(SfaRecord): + fields = { + 'name': Parameter(str, 'Name'), + 'login_base': Parameter(str, 'login base'), + 'enabled': Parameter(bool, 'Is this site enabled'), + 'url': Parameter(str, 'URL'), + 'nodes': Parameter([str], 'List of nodes at this site'), + 'operator': Parameter([str], 'List of operators'), + 'researcher': Parameter([str], 'List of researchers'), + 'PI': Parameter([str], 'List of Principal Investigators'), + } + fields.update(SfaRecord.fields) + + diff --git a/sfa/util/report.py b/sfa/util/report.py new file mode 100644 index 00000000..9a882f07 --- /dev/null +++ b/sfa/util/report.py @@ -0,0 +1,11 @@ +def trace(x, logger=None): + if logger: + logger.info(x) + else: + print x + +def error(x, logger=None): + if logger: + logger.error(x) + else: + print x diff --git a/sfa/util/row.py b/sfa/util/row.py new file mode 100644 index 00000000..7334fccd --- /dev/null +++ b/sfa/util/row.py @@ -0,0 +1,57 @@ + +class Row(dict): + + # Set this to the name of the table that stores the row. + # e.g. table_name = "nodes" + table_name = None + + # Set this to the name of the primary key of the table. It is + # assumed that the this key is a sequence if it is not set when + # sync() is called. + # e.g. primary_key="record_id" + primary_key = None + + # Set this to the names of tables that reference this table's + # primary key. + join_tables = [] + + def validate(self): + """ + Validates values. Will validate a value with a custom function + if a function named 'validate_[key]' exists. + """ + # Warn about mandatory fields + # XX TODO: Support checking for mandatory fields later + #mandatory_fields = self.db.fields(self.table_name, notnull = True, hasdef = False) + #for field in mandatory_fields: + # if not self.has_key(field) or self[field] is None: + # raise SfaInvalidArgument, field + " must be specified and cannot be unset in class %s"%self.__class__.__name__ + + # Validate values before committing + for key, value in self.iteritems(): + if value is not None and hasattr(self, 'validate_' + key): + validate = getattr(self, 'validate_' + key) + self[key] = validate(value) + + + def validate_timestamp(self, timestamp, check_future = False): + """ + Validates the specified GMT timestamp string (must be in + %Y-%m-%d %H:%M:%S format) or number (seconds since UNIX epoch, + i.e., 1970-01-01 00:00:00 GMT). If check_future is True, + raises an exception if timestamp is not in the future. Returns + a GMT timestamp string. + """ + + time_format = "%Y-%m-%d %H:%M:%S" + if isinstance(timestamp, StringTypes): + # calendar.timegm() is the inverse of time.gmtime() + timestamp = calendar.timegm(time.strptime(timestamp, time_format)) + + # Human readable timestamp string + human = time.strftime(time_format, time.gmtime(timestamp)) + + if check_future and timestamp < time.time(): + raise SfaInvalidArgument, "'%s' not in the future" % human + + return human diff --git a/sfa/util/rspec.py b/sfa/util/rspec.py new file mode 100644 index 00000000..bd2cf8bd --- /dev/null +++ b/sfa/util/rspec.py @@ -0,0 +1,420 @@ +### $Id: rspec.py 18557 2010-08-03 19:18:39Z tmack $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/util/rspec.py $ + +import sys +import pprint +import os +import httplib +from xml.dom import minidom +from types import StringTypes, ListType +from lxml import etree +from StringIO import StringIO + + +class RSpec: + + def __init__(self, xml = None, xsd = None, NSURL = None): + ''' + Class to manipulate RSpecs. Reads and parses rspec xml into python dicts + and reads python dicts and writes rspec xml + + self.xsd = # Schema. Can be local or remote file. + self.NSURL = # If schema is remote, Name Space URL to query (full path minus filename) + self.rootNode = # root of the DOM + self.dict = # dict of the RSpec. + self.schemaDict = {} # dict of the Schema + ''' + + self.xsd = xsd + self.rootNode = None + self.dict = {} + self.schemaDict = {} + self.NSURL = NSURL + if xml: + if type(xml) == file: + self.parseFile(xml) + if type(xml) in StringTypes: + self.parseString(xml) + self.dict = self.toDict() + if xsd: + self._parseXSD(self.NSURL + self.xsd) + + + def _getText(self, nodelist): + rc = "" + for node in nodelist: + if node.nodeType == node.TEXT_NODE: + rc = rc + node.data + return rc + + # The rspec is comprised of 2 parts, and 1 reference: + # attributes/elements describe individual resources + # complexTypes are used to describe a set of attributes/elements + # complexTypes can include a reference to other complexTypes. + + + def _getName(self, node): + '''Gets name of node. If tag has no name, then return tag's localName''' + name = None + if not node.nodeName.startswith("#"): + if node.localName: + name = node.localName + elif node.attributes.has_key("name"): + name = node.attributes.get("name").value + return name + + + # Attribute. {name : nameofattribute, {items: values}) + def _attributeDict(self, attributeDom): + '''Traverse single attribute node. Create a dict {attributename : {name: value,}]}''' + node = {} # parsed dict + for attr in attributeDom.attributes.keys(): + node[attr] = attributeDom.attributes.get(attr).value + return node + + + def appendToDictOrCreate(self, dict, key, value): + if (dict.has_key(key)): + dict[key].append(value) + else: + dict[key]=[value] + return dict + + def toGenDict(self, nodeDom=None, parentdict=None, siblingdict={}, parent=None): + """ + convert an XML to a nested dict: + * Non-terminal nodes (elements with string children and attributes) are simple dictionaries + * Terminal nodes (the rest) are nested dictionaries + """ + + if (not nodeDom): + nodeDom=self.rootNode + + curNodeName = nodeDom.localName + + if (nodeDom.hasChildNodes()): + childdict={} + for attribute in nodeDom.attributes.keys(): + childdict = self.appendToDictOrCreate(childdict, attribute, nodeDom.getAttribute(attribute)) + for child in nodeDom.childNodes[:-1]: + if (child.nodeValue): + siblingdict = self.appendToDictOrCreate(siblingdict, curNodeName, child.nodeValue) + else: + childdict = self.toGenDict(child, None, childdict, curNodeName) + + child = nodeDom.childNodes[-1] + if (child.nodeValue): + siblingdict = self.appendToDictOrCreate(siblingdict, curNodeName, child.nodeValue) + if (childdict): + siblingdict = self.appendToDictOrCreate(siblingdict, curNodeName, childdict) + else: + siblingdict = self.toGenDict(child, siblingdict, childdict, curNodeName) + else: + childdict={} + for attribute in nodeDom.attributes.keys(): + childdict = self.appendToDictOrCreate(childdict, attribute, nodeDom.getAttribute(attribute)) + + self.appendToDictOrCreate(siblingdict, curNodeName, childdict) + + if (parentdict is not None): + parentdict = self.appendToDictOrCreate(parentdict, parent, siblingdict) + return parentdict + else: + return siblingdict + + + + def toDict(self, nodeDom = None): + """ + convert this rspec to a dict and return it. + """ + node = {} + if not nodeDom: + nodeDom = self.rootNode + + elementName = nodeDom.nodeName + if elementName and not elementName.startswith("#"): + # attributes have tags and values. get {tag: value}, else {type: value} + node[elementName] = self._attributeDict(nodeDom) + # resolve the child nodes. + if nodeDom.hasChildNodes(): + for child in nodeDom.childNodes: + childName = self._getName(child) + + # skip null children + if not childName: continue + + # initialize the possible array of children + if not node[elementName].has_key(childName): node[elementName][childName] = [] + + if isinstance(child, minidom.Text): + # add if data is not empty + if child.data.strip(): + node[elementName][childName].append(nextchild.data) + elif child.hasChildNodes() and isinstance(child.childNodes[0], minidom.Text): + for nextchild in child.childNodes: + node[elementName][childName].append(nextchild.data) + else: + childdict = self.toDict(child) + for value in childdict.values(): + node[elementName][childName].append(value) + + return node + + + def toxml(self): + """ + convert this rspec to an xml string and return it. + """ + return self.rootNode.toxml() + + + def toprettyxml(self): + """ + print this rspec in xml in a pretty format. + """ + return self.rootNode.toprettyxml() + + + def __removeWhitespaceNodes(self, parent): + for child in list(parent.childNodes): + if child.nodeType == minidom.Node.TEXT_NODE and child.data.strip() == '': + parent.removeChild(child) + else: + self.__removeWhitespaceNodes(child) + + def parseFile(self, filename): + """ + read a local xml file and store it as a dom object. + """ + dom = minidom.parse(filename) + self.__removeWhitespaceNodes(dom) + self.rootNode = dom.childNodes[0] + + + def parseString(self, xml): + """ + read an xml string and store it as a dom object. + """ + dom = minidom.parseString(xml) + self.__removeWhitespaceNodes(dom) + self.rootNode = dom.childNodes[0] + + + def _httpGetXSD(self, xsdURI): + # split the URI into relevant parts + host = xsdURI.split("/")[2] + if xsdURI.startswith("https"): + conn = httplib.HTTPSConnection(host, + httplib.HTTPSConnection.default_port) + elif xsdURI.startswith("http"): + conn = httplib.HTTPConnection(host, + httplib.HTTPConnection.default_port) + conn.request("GET", xsdURI) + # If we can't download the schema, raise an exception + r1 = conn.getresponse() + if r1.status != 200: + raise Exception + return r1.read().replace('\n', '').replace('\t', '').strip() + + + def _parseXSD(self, xsdURI): + """ + Download XSD from URL, or if file, read local xsd file and set + schemaDict. + + Since the schema definiton is a global namespace shared by and + agreed upon by others, this should probably be a URL. Check + for URL, download xsd, parse, or if local file, use that. + """ + schemaDom = None + if xsdURI.startswith("http"): + try: + schemaDom = minidom.parseString(self._httpGetXSD(xsdURI)) + except Exception, e: + # logging.debug("%s: web file not found" % xsdURI) + # logging.debug("Using local file %s" % self.xsd") + print e + print "Can't find %s on the web. Continuing." % xsdURI + if not schemaDom: + if os.path.exists(xsdURI): + # logging.debug("using local copy.") + print "Using local %s" % xsdURI + schemaDom = minidom.parse(xsdURI) + else: + raise Exception("Can't find xsd locally") + self.schemaDict = self.toDict(schemaDom.childNodes[0]) + + + def dict2dom(self, rdict, include_doc = False): + """ + convert a dict object into a dom object. + """ + + def elementNode(tagname, rd): + element = minidom.Element(tagname) + for key in rd.keys(): + if isinstance(rd[key], StringTypes) or isinstance(rd[key], int): + element.setAttribute(key, str(rd[key])) + elif isinstance(rd[key], dict): + child = elementNode(key, rd[key]) + element.appendChild(child) + elif isinstance(rd[key], list): + for item in rd[key]: + if isinstance(item, dict): + child = elementNode(key, item) + element.appendChild(child) + elif isinstance(item, StringTypes) or isinstance(item, int): + child = minidom.Element(key) + text = minidom.Text() + text.data = item + child.appendChild(text) + element.appendChild(child) + return element + + # Minidom does not allow documents to have more then one + # child, but elements may have many children. Because of + # this, the document's root node will be the first key/value + # pair in the dictionary. + node = elementNode(rdict.keys()[0], rdict.values()[0]) + if include_doc: + rootNode = minidom.Document() + rootNode.appendChild(node) + else: + rootNode = node + return rootNode + + + def parseDict(self, rdict, include_doc = True): + """ + Convert a dictionary into a dom object and store it. + """ + self.rootNode = self.dict2dom(rdict, include_doc).childNodes[0] + + + def getDictsByTagName(self, tagname, dom = None): + """ + Search the dom for all elements with the specified tagname + and return them as a list of dicts + """ + if not dom: + dom = self.rootNode + dicts = [] + doms = dom.getElementsByTagName(tagname) + dictlist = [self.toDict(d) for d in doms] + for item in dictlist: + for value in item.values(): + dicts.append(value) + return dicts + + def getDictByTagNameValue(self, tagname, value, dom = None): + """ + Search the dom for the first element with the specified tagname + and value and return it as a dict. + """ + tempdict = {} + if not dom: + dom = self.rootNode + dicts = self.getDictsByTagName(tagname, dom) + + for rdict in dicts: + if rdict.has_key('name') and rdict['name'] in [value]: + return rdict + + return tempdict + + + def filter(self, tagname, attribute, blacklist = [], whitelist = [], dom = None): + """ + Removes all elements where: + 1. tagname matches the element tag + 2. attribute matches the element attribte + 3. attribute value is in valuelist + """ + + tempdict = {} + if not dom: + dom = self.rootNode + + if dom.localName in [tagname] and dom.attributes.has_key(attribute): + if whitelist and dom.attributes.get(attribute).value not in whitelist: + dom.parentNode.removeChild(dom) + if blacklist and dom.attributes.get(attribute).value in blacklist: + dom.parentNode.removeChild(dom) + + if dom.hasChildNodes(): + for child in dom.childNodes: + self.filter(tagname, attribute, blacklist, whitelist, child) + + + def merge(self, rspecs, tagname, dom=None): + """ + Merge this rspec with the requested rspec based on the specified + starting tag name. The start tag (and all of its children) will be merged + """ + tempdict = {} + if not dom: + dom = self.rootNode + + whitelist = [] + blacklist = [] + + if dom.localName in [tagname] and dom.attributes.has_key(attribute): + if whitelist and dom.attributes.get(attribute).value not in whitelist: + dom.parentNode.removeChild(dom) + if blacklist and dom.attributes.get(attribute).value in blacklist: + dom.parentNode.removeChild(dom) + + if dom.hasChildNodes(): + for child in dom.childNodes: + self.filter(tagname, attribute, blacklist, whitelist, child) + + def validateDicts(self): + types = { + 'EInt' : int, + 'EString' : str, + 'EByteArray' : list, + 'EBoolean' : bool, + 'EFloat' : float, + 'EDate' : date} + + + def pprint(self, r = None, depth = 0): + """ + Pretty print the dict + """ + line = "" + if r == None: r = self.dict + # Set the dept + for tab in range(0,depth): line += " " + # check if it's nested + if type(r) == dict: + for i in r.keys(): + print line + "%s:" % i + self.pprint(r[i], depth + 1) + elif type(r) in (tuple, list): + for j in r: self.pprint(j, depth + 1) + # not nested so just print. + else: + print line + "%s" % r + + + +class RecordSpec(RSpec): + + root_tag = 'record' + def parseDict(self, rdict, include_doc = False): + """ + Convert a dictionary into a dom object and store it. + """ + self.rootNode = self.dict2dom(rdict, include_doc) + + def dict2dom(self, rdict, include_doc = False): + record_dict = rdict + if not len(rdict.keys()) == 1: + record_dict = {self.root_tag : rdict} + return RSpec.dict2dom(self, record_dict, include_doc) + + +# vim:ts=4:expandtab + diff --git a/sfa/util/rspecHelper.py b/sfa/util/rspecHelper.py new file mode 100755 index 00000000..8d002393 --- /dev/null +++ b/sfa/util/rspecHelper.py @@ -0,0 +1,326 @@ +#! /usr/bin/env python + +import sys +from copy import deepcopy +from lxml import etree +from StringIO import StringIO +from optparse import OptionParser + + +def merge_rspecs(rspecs): + """ + Merge merge a list of RSpecs into 1 RSpec, and return the result. + rspecs must be a valid RSpec string or list of RSpec strings. + """ + if not rspecs or not isinstance(rspecs, list): + return rspecs + + rspec = None + for tmp_rspec in rspecs: + try: + tree = etree.parse(StringIO(tmp_rspec)) + except etree.XMLSyntaxError: + # consider failing silently here + message = str(agg_rspec) + ": " + str(sys.exc_info()[1]) + raise InvalidRSpec(message) + + root = tree.getroot() + if root.get("type") in ["SFA"]: + if rspec == None: + rspec = root + else: + for network in root.iterfind("./network"): + rspec.append(deepcopy(network)) + for request in root.iterfind("./request"): + rspec.append(deepcopy(request)) + return etree.tostring(rspec, xml_declaration=True, pretty_print=True) + +class RSpec: + def __init__(self, xml): + parser = etree.XMLParser(remove_blank_text=True) + tree = etree.parse(StringIO(xml), parser) + self.rspec = tree.getroot() + + def get_node_element(self, hostname): + names = self.rspec.iterfind("./network/site/node/hostname") + for name in names: + if name.text == hostname: + return name.getparent() + return None + + def get_node_list(self): + result = self.rspec.xpath("./network/site/node/hostname/text()") + return result + + def get_sliver_list(self): + result = self.rspec.xpath("./network/site/node[sliver]/hostname/text()") + return result + + def add_sliver(self, hostname): + node = self.get_node_element(hostname) + etree.SubElement(node, "sliver") + + def remove_sliver(self, hostname): + node = self.get_node_element(hostname) + node.remove(node.find("sliver")) + + def attributes_list(self, elem): + opts = [] + if elem is not None: + for e in elem: + opts.append((e.tag, e.text)) + return opts + + def get_default_sliver_attributes(self): + defaults = self.rspec.find(".//sliver_defaults") + return self.attributes_list(defaults) + + def get_sliver_attributes(self, hostname): + node = self.get_node_element(hostname) + sliver = node.find("sliver") + return self.attributes_list(sliver) + + def add_attribute(self, elem, name, value): + opt = etree.SubElement(elem, name) + opt.text = value + + def add_default_sliver_attribute(self, name, value): + defaults = self.rspec.find(".//sliver_defaults") + if defaults is None: + defaults = etree.Element("sliver_defaults") + network = self.rspec.find(".//network") + network.insert(0, defaults) + self.add_attribute(defaults, name, value) + + def add_sliver_attribute(self, hostname, name, value): + node = self.get_node_element(hostname) + sliver = node.find("sliver") + self.add_attribute(sliver, name, value) + + def remove_attribute(self, elem, name, value): + if elem is not None: + opts = elem.iterfind(name) + if opts is not None: + for opt in opts: + if opt.text == value: + elem.remove(opt) + + def remove_default_sliver_attribute(self, name, value): + defaults = self.rspec.find(".//sliver_defaults") + self.remove_attribute(defaults, name, value) + + def remove_sliver_attribute(self, hostname, name, value): + node = self.get_node_element(hostname) + sliver = node.find("sliver") + self.remove_attribute(sliver, name, value) + + def get_site_nodes(self, siteid): + query = './/site[@id="%s"]/node/hostname/text()' % siteid + result = self.rspec.xpath(query) + return result + + def get_link_list(self): + linklist = [] + links = self.rspec.iterfind(".//link") + for link in links: + (end1, end2) = link.get("endpoints").split() + name = link.find("description") + linklist.append((name.text, + self.get_site_nodes(end1), + self.get_site_nodes(end2))) + return linklist + + def get_vlink_list(self): + vlinklist = [] + vlinks = self.rspec.iterfind(".//vlink") + for vlink in vlinks: + endpoints = vlink.get("endpoints") + (end1, end2) = endpoints.split() + query = './/node[@id="%s"]/hostname/text()' + node1 = self.rspec.xpath(query % end1)[0] + node2 = self.rspec.xpath(query % end2)[0] + desc = "%s <--> %s" % (node1, node2) + kbps = vlink.find("kbps") + vlinklist.append((endpoints, desc, kbps.text)) + return vlinklist + + def query_links(self, fromnode, tonode): + fromsite = fromnode.getparent() + tosite = tonode.getparent() + fromid = fromsite.get("id") + toid = tosite.get("id") + + query = ".//link[@endpoints = '%s %s']" % (fromid, toid) + results = self.rspec.xpath(query) + if results == None: + query = ".//link[@endpoints = '%s %s']" % (toid, fromid) + results = self.rspec.xpath(query) + return results + + def query_vlinks(self, endpoints): + query = ".//vlink[@endpoints = '%s']" % endpoints + results = self.rspec.xpath(query) + return results + + + def add_vlink(self, fromhost, tohost, kbps): + fromnode = self.get_node_element(fromhost) + tonode = self.get_node_element(tohost) + links = self.query_links(fromnode, tonode) + + for link in links: + vlink = etree.SubElement(link, "vlink") + fromid = fromnode.get("id") + toid = tonode.get("id") + vlink.set("endpoints", "%s %s" % (fromid, toid)) + self.add_attribute(vlink, "kbps", kbps) + + + def remove_vlink(self, endpoints): + vlinks = self.query_vlinks(endpoints) + for vlink in vlinks: + vlink.getparent().remove(vlink) + + def toxml(self): + return etree.tostring(self.rspec, pretty_print=True, + xml_declaration=True) + + def __str__(self): + return self.toxml() + + def save(self, filename): + f = open(filename, "w") + f.write(self.toxml()) + f.close() + + +class Commands: + def __init__(self, usage, description, epilog=None): + self.parser = OptionParser(usage=usage, description=description, + epilog=epilog) + self.parser.add_option("-i", "", dest="infile", metavar="FILE", + help="read RSpec from FILE (default is stdin)") + self.parser.add_option("-o", "", dest="outfile", metavar="FILE", + help="write output to FILE (default is stdout)") + self.nodefile = False + self.attributes = {} + + def add_nodefile_option(self): + self.nodefile = True + self.parser.add_option("-n", "", dest="nodefile", + metavar="FILE", + help="read node list from FILE"), + + def add_show_attributes_option(self): + self.parser.add_option("-s", "--show-attributes", action="store_true", + dest="showatt", default=False, + help="show sliver attributes") + + def add_attribute_options(self): + self.parser.add_option("", "--capabilities", action="append", + metavar="", + help="Vserver bcapabilities") + self.parser.add_option("", "--codemux", action="append", + metavar="", + help="Demux HTTP between slices using " + + "localhost ports") + self.parser.add_option("", "--cpu-pct", action="append", + metavar="", + help="Reserved CPU percent (e.g., 25)") + self.parser.add_option("", "--cpu-share", action="append", + metavar="", + help="Number of CPU shares (e.g., 5)") + self.parser.add_option("", "--delegations", + metavar="", action="append", + help="List of slices with delegation authority") + self.parser.add_option("", "--disk-max", + metavar="", action="append", + help="Disk quota (1k disk blocks)") + self.parser.add_option("", "--initscript", + metavar="", action="append", + help="Slice initialization script (e.g., stork)") + self.parser.add_option("", "--ip-addresses", action="append", + metavar="", + help="Add an IP address to a sliver") + self.parser.add_option("", "--net-i2-max-kbyte", + metavar="", action="append", + help="Maximum daily network Tx limit " + + "to I2 hosts.") + self.parser.add_option("", "--net-i2-max-rate", + metavar="", action="append", + help="Maximum bandwidth over I2 routes") + self.parser.add_option("", "--net-i2-min-rate", + metavar="", action="append", + help="Minimum bandwidth over I2 routes") + self.parser.add_option("", "--net-i2-share", + metavar="", action="append", + help="Number of bandwidth shares over I2 routes") + self.parser.add_option("", "--net-i2-thresh-kbyte", + metavar="", action="append", + help="Limit sent to I2 hosts before warning, " + + "throttling") + self.parser.add_option("", "--net-max-kbyte", + metavar="", action="append", + help="Maximum daily network Tx limit " + + "to non-I2 hosts.") + self.parser.add_option("", "--net-max-rate", + metavar="", action="append", + help="Maximum bandwidth over non-I2 routes") + self.parser.add_option("", "--net-min-rate", + metavar="", action="append", + help="Minimum bandwidth over non-I2 routes") + self.parser.add_option("", "--net-share", + metavar="", action="append", + help="Number of bandwidth shares over non-I2 " + + "routes") + self.parser.add_option("", "--net-thresh-kbyte", + metavar="", action="append", + help="Limit sent to non-I2 hosts before " + + "warning, throttling") + self.parser.add_option("", "--vsys", + metavar="", action="append", + help="Vsys script (e.g., fd_fusemount)") + self.parser.add_option("", "--vsys-vnet", + metavar="", action="append", + help="Allocate a virtual private network") + + def get_attribute_dict(self): + attrlist = ['capabilities','codemux','cpu_pct','cpu_share', + 'delegations','disk_max','initscript','ip_addresses', + 'net_i2_max_kbyte','net_i2_max_rate','net_i2_min_rate', + 'net_i2_share','net_i2_thresh_kbyte', + 'net_max_kbyte','net_max_rate','net_min_rate', + 'net_share','net_thresh_kbyte', + 'vsys','vsys_vnet'] + attrdict = {} + for attr in attrlist: + value = getattr(self.opts, attr, None) + if value is not None: + attrdict[attr] = value + return attrdict + + def prep(self): + (self.opts, self.args) = self.parser.parse_args() + + if self.opts.infile: + sys.stdin = open(self.opts.infile, "r") + xml = sys.stdin.read() + self.rspec = RSpec(xml) + + if self.nodefile: + if self.opts.nodefile: + f = open(self.opts.nodefile, "r") + self.nodes = f.read().split() + f.close() + else: + self.nodes = self.args + + if self.opts.outfile: + sys.stdout = open(self.opts.outfile, "w") + + + + + + + diff --git a/sfa/util/server.py b/sfa/util/server.py new file mode 100644 index 00000000..4f26186f --- /dev/null +++ b/sfa/util/server.py @@ -0,0 +1,280 @@ +## +# This module implements a general-purpose server layer for sfa. +# The same basic server should be usable on the registry, component, or +# other interfaces. +# +# TODO: investigate ways to combine this with existing PLC server? +## + +### $Id: server.py 18501 2010-07-09 20:20:48Z tmack $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/util/server.py $ + +import sys +import traceback +import threading +import socket, os +import SocketServer +import BaseHTTPServer +import SimpleHTTPServer +import SimpleXMLRPCServer +from OpenSSL import SSL +from Queue import Queue +from sfa.trust.certificate import Keypair, Certificate +from sfa.trust.credential import * +from sfa.util.faults import * +from sfa.plc.api import SfaAPI +from sfa.util.cache import Cache +from sfa.util.debug import log +from sfa.util.sfalogging import logger +## +# Verification callback for pyOpenSSL. We do our own checking of keys because +# we have our own authentication spec. Thus we disable several of the normal +# prohibitions that OpenSSL places on certificates + +def verify_callback(conn, x509, err, depth, preverify): + # if the cert has been preverified, then it is ok + if preverify: + #print " preverified" + return 1 + + + # the certificate verification done by openssl checks a number of things + # that we aren't interested in, so we look out for those error messages + # and ignore them + + # XXX SMBAKER: I don't know what this error is, but it's being returned + # by newer pl nodes. + if err == 9: + #print " X509_V_ERR_CERT_NOT_YET_VALID" + return 1 + + # allow self-signed certificates + if err == 18: + #print " X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT" + return 1 + + # allow certs that don't have an issuer + if err == 20: + #print " X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY" + return 1 + + # allow chained certs with self-signed roots + if err == 19: + return 1 + + # allow certs that are untrusted + if err == 21: + #print " X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE" + return 1 + + # allow certs that are untrusted + if err == 27: + #print " X509_V_ERR_CERT_UNTRUSTED" + return 1 + + print " error", err, "in verify_callback" + + return 0 + +## +# taken from the web (XXX find reference). Implents HTTPS xmlrpc request handler +class SecureXMLRpcRequestHandler(SimpleXMLRPCServer.SimpleXMLRPCRequestHandler): + """Secure XML-RPC request handler class. + + It it very similar to SimpleXMLRPCRequestHandler but it uses HTTPS for transporting XML data. + """ + def setup(self): + self.connection = self.request + self.rfile = socket._fileobject(self.request, "rb", self.rbufsize) + self.wfile = socket._fileobject(self.request, "wb", self.wbufsize) + + def do_POST(self): + """Handles the HTTPS POST request. + + It was copied out from SimpleXMLRPCServer.py and modified to shutdown + the socket cleanly. + """ + try: + peer_cert = Certificate() + peer_cert.load_from_pyopenssl_x509(self.connection.get_peer_certificate()) + self.api = SfaAPI(peer_cert = peer_cert, + interface = self.server.interface, + key_file = self.server.key_file, + cert_file = self.server.cert_file, + cache = self.cache) + # get arguments + request = self.rfile.read(int(self.headers["content-length"])) + remote_addr = (remote_ip, remote_port) = self.connection.getpeername() + self.api.remote_addr = remote_addr + response = self.api.handle(remote_addr, request, self.server.method_map) + except Exception, fault: + # This should only happen if the module is buggy + # internal error, report as HTTP server error + traceback.print_exc() + response = self.api.prepare_response(fault) + #self.send_response(500) + #self.end_headers() + + # got a valid response + self.send_response(200) + self.send_header("Content-type", "text/xml") + self.send_header("Content-length", str(len(response))) + self.end_headers() + self.wfile.write(response) + + # shut down the connection + self.wfile.flush() + self.connection.shutdown() # Modified here! + +## +# Taken from the web (XXX find reference). Implements an HTTPS xmlrpc server +class SecureXMLRPCServer(BaseHTTPServer.HTTPServer,SimpleXMLRPCServer.SimpleXMLRPCDispatcher): + def __init__(self, server_address, HandlerClass, key_file, cert_file, logRequests=True): + """Secure XML-RPC server. + + It it very similar to SimpleXMLRPCServer but it uses HTTPS for transporting XML data. + """ + self.logRequests = logRequests + self.interface = None + self.key_file = key_file + self.cert_file = cert_file + self.method_map = {} + # add cache to the request handler + HandlerClass.cache = Cache() + #for compatibility with python 2.4 (centos53) + if sys.version_info < (2, 5): + SimpleXMLRPCServer.SimpleXMLRPCDispatcher.__init__(self) + else: + SimpleXMLRPCServer.SimpleXMLRPCDispatcher.__init__(self, True, None) + SocketServer.BaseServer.__init__(self, server_address, HandlerClass) + ctx = SSL.Context(SSL.SSLv23_METHOD) + ctx.use_privatekey_file(key_file) + ctx.use_certificate_file(cert_file) + # If you wanted to verify certs against known CAs.. this is how you would do it + #ctx.load_verify_locations('/etc/sfa/trusted_roots/plc.gpo.gid') + ctx.set_verify(SSL.VERIFY_PEER | SSL.VERIFY_FAIL_IF_NO_PEER_CERT, verify_callback) + ctx.set_verify_depth(5) + ctx.set_app_data(self) + self.socket = SSL.Connection(ctx, socket.socket(self.address_family, + self.socket_type)) + self.server_bind() + self.server_activate() + + # _dispatch + # + # Convert an exception on the server to a full stack trace and send it to + # the client. + + def _dispatch(self, method, params): + try: + return SimpleXMLRPCServer.SimpleXMLRPCDispatcher._dispatch(self, method, params) + except: + # can't use format_exc() as it is not available in jython yet + # (evein in trunk). + type, value, tb = sys.exc_info() + raise xmlrpclib.Fault(1,''.join(traceback.format_exception(type, value, tb))) + +## From Active State code: http://code.activestate.com/recipes/574454/ +# This is intended as a drop-in replacement for the ThreadingMixIn class in +# module SocketServer of the standard lib. Instead of spawning a new thread +# for each request, requests are processed by of pool of reusable threads. +class ThreadPoolMixIn(SocketServer.ThreadingMixIn): + """ + use a thread pool instead of a new thread on every request + """ + # XX TODO: Make this configurable + # config = Config() + # numThreads = config.SFA_SERVER_NUM_THREADS + numThreads = 25 + allow_reuse_address = True # seems to fix socket.error on server restart + + def serve_forever(self): + """ + Handle one request at a time until doomsday. + """ + # set up the threadpool + self.requests = Queue() + + for x in range(self.numThreads): + t = threading.Thread(target = self.process_request_thread) + t.setDaemon(1) + t.start() + + # server main loop + while True: + self.handle_request() + + self.server_close() + + + def process_request_thread(self): + """ + obtain request from queue instead of directly from server socket + """ + while True: + SocketServer.ThreadingMixIn.process_request_thread(self, *self.requests.get()) + + + def handle_request(self): + """ + simply collect requests and put them on the queue for the workers. + """ + try: + request, client_address = self.get_request() + except socket.error: + return + if self.verify_request(request, client_address): + self.requests.put((request, client_address)) + +class ThreadedServer(ThreadPoolMixIn, SecureXMLRPCServer): + pass +## +# Implements an HTTPS XML-RPC server. Generally it is expected that SFA +# functions will take a credential string, which is passed to +# decode_authentication. Decode_authentication() will verify the validity of +# the credential, and verify that the user is using the key that matches the +# GID supplied in the credential. + +class SfaServer(threading.Thread): + + ## + # Create a new SfaServer object. + # + # @param ip the ip address to listen on + # @param port the port to listen on + # @param key_file private key filename of registry + # @param cert_file certificate filename containing public key + # (could be a GID file) + + def __init__(self, ip, port, key_file, cert_file): + threading.Thread.__init__(self) + self.key = Keypair(filename = key_file) + self.cert = Certificate(filename = cert_file) + #self.server = SecureXMLRPCServer((ip, port), SecureXMLRpcRequestHandler, key_file, cert_file) + self.server = ThreadedServer((ip, port), SecureXMLRpcRequestHandler, key_file, cert_file) + self.trusted_cert_list = None + self.register_functions() + + + ## + # Register functions that will be served by the XMLRPC server. This + # function should be overridden by each descendant class. + + def register_functions(self): + self.server.register_function(self.noop) + + ## + # Sample no-op server function. The no-op function decodes the credential + # that was passed to it. + + def noop(self, cred, anything): + self.decode_authentication(cred) + return anything + + ## + # Execute the server, serving requests forever. + + def run(self): + self.server.serve_forever() + + diff --git a/sfa/util/sfalogging.py b/sfa/util/sfalogging.py new file mode 100644 index 00000000..0e17ccba --- /dev/null +++ b/sfa/util/sfalogging.py @@ -0,0 +1,22 @@ +import logging +import os + +#SFA access log initialization +TMPDIR = os.getenv("TMPDIR", "/tmp") +SFA_HTTPD_ACCESS_LOGFILE = TMPDIR + "/" + 'sfa_httpd_access.log' +SFA_ACCESS_LOGFILE='/var/log/sfa_access.log' +logger=logging.getLogger() +logger.setLevel(logging.INFO) + +try: + logfile=logging.FileHandler(SFA_ACCESS_LOGFILE) +except IOError: + # This is usually a permissions error becaue the file is + # owned by root, but httpd is trying to access it. + logfile=logging.FileHandler(SFA_HTTPD_ACCESS_LOGFILE) + +formatter = logging.Formatter("%(asctime)s - %(message)s") +logfile.setFormatter(formatter) +logger.addHandler(logfile) +def get_sfa_logger(): + return logger diff --git a/sfa/util/sfatablesRuntime.py b/sfa/util/sfatablesRuntime.py new file mode 100644 index 00000000..14ec6f74 --- /dev/null +++ b/sfa/util/sfatablesRuntime.py @@ -0,0 +1,38 @@ +from sfatables.runtime import SFATablesRules + +def fetch_context(slice_hrn, user_hrn, contexts): + """ + Returns the request context required by sfatables. At some point, this + mechanism should be changed to refer to "contexts", which is the + information that sfatables is requesting. But for now, we just return + the basic information needed in a dict. + """ + slice_hrn = urn_to_hrn(slice_xrn)[0] + user_hrn = urn_to_hrn(user_xrn)[0] + base_context = {'sfa':{'user':{'hrn':user_hrn}, 'slice':{'hrn':slice_hrn}}} + return base_context + +def run_sfatables(chain, hrn, origin_hrn, rspec, context_callback = None ): + """ + Run the rspec through sfatables + @param chain Name of rule chain + @param hrn Object's hrn + @param origin_hrn Original caller's hrn + @param rspec Incoming rspec + @param context_callback Callback used to generate the request context + + @return rspec + """ + if not context_callback: + context_callback = fetch_context + + chain = chain.upper() + rules = SFATablesRules(chain) + if rules.sorted_rule_list: + contexts = rules.contexts + request_context = context_callback(hrn, origin_hrn, contexts) + rules.set_context(request_context) + newrspec = rules.apply(rspec) + else: + newrspec = rspec + return newrspec diff --git a/sfa/util/sfaticket.py b/sfa/util/sfaticket.py new file mode 100644 index 00000000..670ad145 --- /dev/null +++ b/sfa/util/sfaticket.py @@ -0,0 +1,130 @@ +# +# implements SFA tickets +# + +### $Id: sfaticket.py 18530 2010-07-23 21:27:18Z tmack $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/util/sfaticket.py $ + +import xmlrpclib + +from sfa.trust.certificate import Certificate +from sfa.trust.rights import * +from sfa.trust.gid import * + +# Ticket is tuple: +# (gidCaller, gidObject, attributes, rspec, delegate) +# +# gidCaller = GID of the caller performing the operation +# gidObject = GID of the slice +# attributes = slice attributes (keys, vref, instantiation, etc) +# rspec = resources + +class SfaTicket(Certificate): + gidCaller = None + gidObject = None + attributes = {} + rspec = {} + delegate = False + + def __init__(self, create=False, subject=None, string=None, filename=None): + Certificate.__init__(self, create, subject, string, filename) + + def set_gid_caller(self, gid): + self.gidCaller = gid + + def get_gid_caller(self): + if not self.gidCaller: + self.decode() + return self.gidCaller + + def set_gid_object(self, gid): + self.gidObject = gid + + def get_gid_object(self): + if not self.gidObject: + self.decode() + return self.gidObject + + def set_attributes(self, gid): + self.attributes = gid + + def get_attributes(self): + if not self.attributes: + self.decode() + return self.attributes + + def set_rspec(self, gid): + self.rspec = gid + + def get_rspec(self): + if not self.rspec: + self.decode() + return self.rspec + + def set_delegate(self, delegate): + self.delegate = delegate + + def get_delegate(self): + if not self.delegate: + self.decode() + return self.delegate + + def encode(self): + dict = {"gidCaller": None, + "gidObject": None, + "attributes": self.attributes, + "rspec": self.rspec, + "delegate": self.delegate} + if self.gidCaller: + dict["gidCaller"] = self.gidCaller.save_to_string(save_parents=True) + if self.gidObject: + dict["gidObject"] = self.gidObject.save_to_string(save_parents=True) + str = "URI:" + xmlrpclib.dumps((dict,), allow_none=True) + self.set_data(str) + + def decode(self): + data = self.get_data() + if data: + dict = xmlrpclib.loads(self.get_data()[4:])[0][0] + else: + dict = {} + + self.attributes = dict.get("attributes", {}) + self.rspec = dict.get("rspec", {}) + self.delegate = dict.get("delegate", False) + + gidCallerStr = dict.get("gidCaller", None) + if gidCallerStr: + self.gidCaller = GID(string=gidCallerStr) + else: + self.gidCaller = None + + gidObjectStr = dict.get("gidObject", None) + if gidObjectStr: + self.gidObject = GID(string=gidObjectStr) + else: + self.gidObject = None + + def dump(self, dump_parents=False): + print "TICKET", self.get_subject() + + print " gidCaller:" + gidCaller = self.get_gid_caller() + if gidCaller: + gidCaller.dump(8, dump_parents) + + print " gidObject:" + gidObject = self.get_gid_object() + if gidObject: + gidObject.dump(8, dump_parents) + + print " attributes:" + for attrname in self.get_attributes().keys(): + print " ", attrname, self.get_attributes()[attrname] + + print " rspec:" + print " ", self.get_rspec() + + if self.parent and dump_parents: + print "PARENT", + self.parent.dump(dump_parents) diff --git a/sfa/util/soapprotocol.py b/sfa/util/soapprotocol.py new file mode 100644 index 00000000..8d9b3d15 --- /dev/null +++ b/sfa/util/soapprotocol.py @@ -0,0 +1,36 @@ +# SOAP-specific code for SFA Client + +import pdb +from ZSI.client import Binding +from httplib import HTTPSConnection + +def xmlrpc_like_callable (soap_callable, *x): + soap_result = soap_callable(*x) + xmlrpc_result = soap_result['Result'] + return xmlrpc_result + +class SFACallable: + def __init__(self, soap_callable): + self.soap_callable = soap_callable + + def __call__(self, *args): + outer_result = self.soap_callable(*args) + return outer_result['Result'] + + +class SFASoapBinding(Binding): + def __getattr__(self, attr): + soap_callable = Binding.__getattr__(self, attr) + return SFACallable(soap_callable) + + +def get_server(url, key_file, cert_file): + auth = { + 'transport' : HTTPSConnection, + 'transdict' : {'cert_file' : cert_file, + 'key_file' : key_file + }, + } + + return SFASoapBinding(url=url, **auth) + diff --git a/sfa/util/specdict.py b/sfa/util/specdict.py new file mode 100644 index 00000000..ed1bb4c3 --- /dev/null +++ b/sfa/util/specdict.py @@ -0,0 +1,134 @@ +## +# SpecDict +# +# SpecDict defines a means for converting a dictionary with plc specific keys +# to a dict with rspec specific keys. +# +# SpecDict.fields dict defines all the rspec specific attribute and their +# expected type. +# +# SpecDict.plc_fields defines a one to one mapping of plc attribute to rspec +# attribute + +### $Id: specdict.py 15485 2009-10-26 18:31:09Z sapanb $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/util/specdict.py $ + +from types import StringTypes, ListType + +class SpecDict(dict): + """ + Base class of SpecDict objects. + """ + fields = {} + plc_fields = {} + type = None + + def __init__(self, spec_dict): + # convert plc dict and initialize self + sdict = self.plcToSpec(spec_dict) + dict.__init__(self, sdict) + + + def plcToSpec(self, spec_dict): + """ + Defines how to convert a plc dict to rspec dict + """ + spec = {} + for field in self.fields: + value = "" + expected = self.fields[field] + if isinstance(expected, StringTypes): + if self.plc_fields.has_key(field): + plc_field = self.plc_fields[field] + if spec_dict.has_key(plc_field): + value = spec_dict[plc_field] + elif isinstance(expected, ListType): + expected = expected[0] + if self.plc_fields.has_key(field): + plc_field = self.plc_fields[field] + if spec_dict.has_key(plc_field): + value = [expected(value) for value in spec_dict[plc_field]] + spec[field] = value + return {self.type: spec} + +# +# fields = { geni_field: type. Could be class for nested classes, otherwise prob str} +# plc_fields = {geni_field : plc_field} +# + +class IfSpecDict(SpecDict): + type = 'IfSpec' + fields = {'name': '', + 'addr': '', + 'type': '', + 'init_params': '', + 'min_rate': '', + 'max_rate': '', + 'max_kbyte': '', + 'ip_spoof': ''} + plc_fields = {'name': 'is_primary', # XXX needs munging to return name instead of True or False + 'addr': 'ip', + 'type': 'type'} + +class LinkSpecDict(SpecDict): + type = 'LinkSpec' + fields = {'min_alloc': '', + 'max_alloc': '', + 'type': '', + 'start_time': '', + 'bw': '', + 'duration': '', + 'init_params': '', + 'endpoints': [IfSpecDict]} + plc_fields = {'min_alloc': 'min_alloc', + 'max_alloc': 'max_alloc', + 'type': 'type', + 'start_time': 'start_time', + 'bw': 'bw', + 'duration': 'duration', + 'init_params': 'init_params', + 'endpoints': 'endpoints'} + + +class NodeSpecDict(SpecDict): + type = 'NodeSpec' + fields = {'name': '', + 'type': '', + 'init_params': '', + 'cpu_min': '', + 'cpu_share': '', + 'cpu_pct': '', + 'disk_max': '', + 'start_time': '', + 'duration': '', + 'net_if': [IfSpecDict]} + + plc_fields = {'name': 'hostname', + 'net_if': 'interfaces'} + +class NetSpecDict(SpecDict): + type = 'NetSpec' + fields = {'name': '', + 'start_time': '', + 'duration': '', + 'nodes': [NodeSpecDict], + 'links': [LinkSpecDict], + } + plc_fields = {'name': 'name', + 'start_time': 'start_time', + 'duration': 'duration', + 'nodes': 'nodes', + 'links': 'links'} + +class RSpecDict(SpecDict): + type = 'RSpec' + fields = {'start_time': '', + 'duration': '', + 'networks': [NetSpecDict] + } + plc_fields = {'networks': 'networks', + 'start_time': 'start_tim', + 'duration': 'duration' + } + +# vim:ts=4:expandtab diff --git a/sfa/util/storage.py b/sfa/util/storage.py new file mode 100644 index 00000000..6ed30d38 --- /dev/null +++ b/sfa/util/storage.py @@ -0,0 +1,73 @@ +### $Id: storage.py 14252 2009-07-03 14:40:59Z thierry $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/util/storage.py $ + +import os + +from sfa.util.rspec import RecordSpec + +class SimpleStorage(dict): + """ + Handles storing and loading python dictionaries. The storage file created + is a string representation of the native python dictionary. + """ + db_filename = None + type = 'dict' + + def __init__(self, db_filename, db = {}): + + dict.__init__(self, db) + self.db_filename = db_filename + + def load(self): + if os.path.exists(self.db_filename) and os.path.isfile(self.db_filename): + db_file = open(self.db_filename, 'r') + dict.__init__(self, eval(db_file.read())) + elif os.path.exists(self.db_filename) and not os.path.isfile(self.db_filename): + raise IOError, '%s exists but is not a file. please remove it and try again' \ + % self.db_filename + else: + self.write() + self.load() + + def write(self): + db_file = open(self.db_filename, 'w') + db_file.write(str(self)) + db_file.close() + + def sync(self): + self.write() + +class XmlStorage(SimpleStorage): + """ + Handles storing and loading python dictionaries. The storage file created + is a xml representation of the python dictionary. + """ + db_filename = None + type = 'xml' + + def load(self): + """ + Parse an xml file and store it as a dict + """ + data = RecordSpec() + if os.path.exists(self.db_filename) and os.path.isfile(self.db_filename): + data.parseFile(self.db_filename) + dict.__init__(self, data.toDict()) + elif os.path.exists(self.db_filename) and not os.path.isfile(self.db_filename): + raise IOError, '%s exists but is not a file. please remove it and try again' \ + % self.db_filename + else: + self.write() + self.load() + + def write(self): + data = RecordSpec() + data.parseDict(self) + db_file = open(self.db_filename, 'w') + db_file.write(data.toprettyxml()) + db_file.close() + + def sync(self): + self.write() + + diff --git a/sfa/util/table.py b/sfa/util/table.py new file mode 100644 index 00000000..de9fe2ec --- /dev/null +++ b/sfa/util/table.py @@ -0,0 +1,196 @@ +### $Id: table.py 18182 2010-06-02 20:42:30Z tmack $ +### $URL: http://svn.planet-lab.org/svn/sfa/trunk/sfa/util/table.py $ +# +# implements support for SFA records stored in db tables +# +# TODO: Use existing PLC database methods? or keep this separate? + +import report +import pgdb + +from sfa.util.PostgreSQL import * +from sfa.trust.gid import * +from sfa.util.record import * +from sfa.util.debug import * +from sfa.util.config import * +from sfa.util.filter import * + +class SfaTable(list): + + SFA_TABLE_PREFIX = "sfa" + + def __init__(self, record_filter = None): + + # pgsql doesn't like table names with "." in them, to replace it with "$" + self.tablename = SfaTable.SFA_TABLE_PREFIX + self.config = Config() + self.db = PostgreSQL(self.config) + + if record_filter: + records = self.find(record_filter) + for record in records: + self.append(record) + + def exists(self): + sql = "SELECT * from pg_tables" + tables = self.db.selectall(sql) + tables = filter(lambda row: row['tablename'].startswith(self.SFA_TABLE_PREFIX), tables) + if tables: + return True + return False + def db_fields(self, obj=None): + + db_fields = self.db.fields(self.SFA_TABLE_PREFIX) + return dict( [ (key,value) for (key, value) in obj.items() \ + if key in db_fields and + self.is_writable(key, value, SfaRecord.fields)] ) + + @staticmethod + def is_writable (key,value,dict): + # if not mentioned, assume it's writable (e.g. deleted ...) + if key not in dict: return True + # if mentioned but not linked to a Parameter object, idem + if not isinstance(dict[key], Parameter): return True + # if not marked ro, it's writable + if not dict[key].ro: return True + + return False + + + def create(self): + + querystr = "CREATE TABLE " + self.tablename + " ( \ + record_id serial PRIMARY KEY , \ + hrn text NOT NULL, \ + authority text NOT NULL, \ + peer_authority text, \ + gid text, \ + type text NOT NULL, \ + pointer integer, \ + date_created timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, \ + last_updated timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP);" + template = "CREATE INDEX %s_%s_idx ON %s (%s);" + indexes = [template % ( self.tablename, field, self.tablename, field) \ + for field in ['hrn', 'type', 'authority', 'peer_authority', 'pointer']] + # IF EXISTS doenst exist in postgres < 8.2 + try: + self.db.do('DROP TABLE IF EXISTS ' + self.tablename) + except: + try: + self.db.do('DROP TABLE' + self.tablename) + except: + pass + + self.db.do(querystr) + for index in indexes: + self.db.do(index) + + self.db.commit() + + def remove(self, record): + params = {'record_id': record['record_id']} + template = "DELETE FROM %s " % self.tablename + sql = template + "WHERE record_id = %(record_id)s" + self.db.do(sql, params) + + # if this is a site, remove all records where 'authority' == the + # site's hrn + if record['type'] == 'authority': + params = {'authority': record['hrn']} + sql = template + "WHERE authority = %(authority)s" + self.db.do(sql, params) + self.db.commit() + + def insert(self, record): + db_fields = self.db_fields(record) + keys = db_fields.keys() + values = [self.db.param(key, value) for (key, value) in db_fields.items()] + query_str = "INSERT INTO " + self.tablename + \ + "(" + ",".join(keys) + ") " + \ + "VALUES(" + ",".join(values) + ")" + self.db.do(query_str, db_fields) + self.db.commit() + result = self.find({'hrn': record['hrn'], 'type': record['type'], 'peer_authority': record['peer_authority']}) + if not result: + record_id = None + elif isinstance(result, list): + record_id = result[0]['record_id'] + else: + record_id = result['record_id'] + + return record_id + + def update(self, record): + db_fields = self.db_fields(record) + keys = db_fields.keys() + values = [self.db.param(key, value) for (key, value) in db_fields.items()] + columns = ["%s = %s" % (key, value) for (key, value) in zip(keys, values)] + query_str = "UPDATE %s SET %s WHERE record_id = %s" % \ + (self.tablename, ", ".join(columns), record['record_id']) + self.db.do(query_str, db_fields) + self.db.commit() + + def quote_string(self, value): + return str(self.db.quote(value)) + + def quote(self, value): + return self.db.quote(value) + + def find(self, record_filter = None, columns=None): + if not columns: + columns = "*" + else: + columns = ",".join(columns) + sql = "SELECT %s FROM %s WHERE True " % (columns, self.tablename) + + if isinstance(record_filter, (list, tuple, set)): + ints = filter(lambda x: isinstance(x, (int, long)), record_filter) + strs = filter(lambda x: isinstance(x, StringTypes), record_filter) + record_filter = Filter(SfaRecord.all_fields, {'record_id': ints, 'hrn': strs}) + sql += "AND (%s) %s " % record_filter.sql("OR") + elif isinstance(record_filter, dict): + record_filter = Filter(SfaRecord.all_fields, record_filter) + sql += " AND (%s) %s" % record_filter.sql("AND") + elif isinstance(record_filter, StringTypes): + record_filter = Filter(SfaRecord.all_fields, {'hrn':[record_filter]}) + sql += " AND (%s) %s" % record_filter.sql("AND") + elif isinstance(record_filter, int): + record_filter = Filter(SfaRecord.all_fields, {'record_id':[record_filter]}) + sql += " AND (%s) %s" % record_filter.sql("AND") + + results = self.db.selectall(sql) + if isinstance(results, dict): + results = [results] + return results + + def findObjects(self, record_filter = None, columns=None): + + results = self.find(record_filter, columns) + result_rec_list = [] + for result in results: + if result['type'] in ['authority']: + result_rec_list.append(AuthorityRecord(dict=result)) + elif result['type'] in ['node']: + result_rec_list.append(NodeRecord(dict=result)) + elif result['type'] in ['slice']: + result_rec_list.append(SliceRecord(dict=result)) + elif result['type'] in ['user']: + result_rec_list.append(UserRecord(dict=result)) + else: + result_rec_list.append(SfaRecord(dict=result)) + return result_rec_list + + + def drop(self): + try: + self.db.do('DROP TABLE IF EXISTS ' + self.tablename) + self.db.commit() + except: + try: + self.db.do('DROP TABLE ' + self.tablename) + self.db.commit() + except: + pass + + def sfa_records_purge(self): + self.drop() diff --git a/sfa/util/threadmanager.py b/sfa/util/threadmanager.py new file mode 100755 index 00000000..3d5dd03e --- /dev/null +++ b/sfa/util/threadmanager.py @@ -0,0 +1,71 @@ +import threading +import time +from Queue import Queue + +def ThreadedMethod(callable, queue): + """ + A function decorator that returns a running thread. The thread + runs the specified callable and stores the result in the specified + results queue + """ + def wrapper(args, kwds): + class ThreadInstance(threading.Thread): + def run(self): + try: + queue.put(callable(*args, **kwds)) + except: + # ignore errors + pass + thread = ThreadInstance() + thread.start() + return thread + return wrapper + + + +class ThreadManager: + """ + ThreadManager executes a callable in a thread and stores the result + in a thread safe queue. + """ + queue = Queue() + threads = [] + + def run (self, method, *args, **kwds): + """ + Execute a callable in a separate thread. + """ + method = ThreadedMethod(method, self.queue) + thread = method(args, kwds) + self.threads.append(thread) + + start = run + + def get_results(self): + """ + Return a list of all the results so far. Blocks until + all threads are finished. + """ + for thread in self.threads: + thread.join() + results = [] + while not self.queue.empty(): + results.append(self.queue.get()) + return results + +if __name__ == '__main__': + + def f(name, n, sleep=1): + nums = [] + for i in range(n, n+5): + print "%s: %s" % (name, i) + nums.append(i) + time.sleep(sleep) + return nums + + threads = ThreadManager() + threads.run(f, "Thread1", 10, 2) + threads.run(f, "Thread2", -10, 1) + + results = threads.get_results() + print "Results:", results diff --git a/sfa/util/xmlrpcprotocol.py b/sfa/util/xmlrpcprotocol.py new file mode 100644 index 00000000..11a4317d --- /dev/null +++ b/sfa/util/xmlrpcprotocol.py @@ -0,0 +1,54 @@ +# XMLRPC-specific code for SFA Client + +import xmlrpclib + +## +# ServerException, ExceptionUnmarshaller +# +# Used to convert server exception strings back to an exception. +# from usenet, Raghuram Devarakonda + +class ServerException(Exception): + pass + +class ExceptionUnmarshaller(xmlrpclib.Unmarshaller): + def close(self): + try: + return xmlrpclib.Unmarshaller.close(self) + except xmlrpclib.Fault, e: + raise ServerException(e.faultString) + +## +# XMLRPCTransport +# +# A transport for XMLRPC that works on top of HTTPS + +class XMLRPCTransport(xmlrpclib.Transport): + key_file = None + cert_file = None + def make_connection(self, host): + # create a HTTPS connection object from a host descriptor + # host may be a string, or a (host, x509-dict) tuple + import httplib + host, extra_headers, x509 = self.get_host_info(host) + try: + HTTPS = httplib.HTTPS() + except AttributeError: + raise NotImplementedError( + "your version of httplib doesn't support HTTPS" + ) + else: + return httplib.HTTPS(host, None, key_file=self.key_file, cert_file=self.cert_file) #**(x509 or {})) + + def getparser(self): + unmarshaller = ExceptionUnmarshaller() + parser = xmlrpclib.ExpatParser(unmarshaller) + return parser, unmarshaller + +def get_server(url, key_file, cert_file, debug=False): + transport = XMLRPCTransport() + transport.key_file = key_file + transport.cert_file = cert_file + + return xmlrpclib.ServerProxy(url, transport, allow_none=True, verbose=debug) + diff --git a/sfatables/README b/sfatables/README new file mode 100644 index 00000000..892442ff --- /dev/null +++ b/sfatables/README @@ -0,0 +1,265 @@ +sfatables is a tool for defining access and admission control policies +in an SFA network, in much the same way as iptables is for ip +networks. This file gives an overview of the tool and then describes +its design and implementation. + +Example command +--------------- + +An sfatables configuration consists of lists of rules that are applied +to incoming and outgoing rspecs. Each rule consists of a 'match', to +evaluate a given request against a certain set of criteria and a +'target', to perform a corresponding action. Rules are manipulated by +using the 'sfatables' command. + +Consider the following example: + +sfatables -A INCOMING -- -m hrn --user-hrn plc.princeton -- -j RESTRICT_TO_NODES --blacklist plc.mit + +The statement in this example has three parts: the command, the match +and the target, separated by the token '--'. + +* The command is '-A', which means 'Add rule.' + +* The match is defined in the segment '-m hrn --user-hrn + plc.princeton.' Here, '-m hrn' specifies the 'match type', and + '--user-hrn' provides an argument specific to the match type. + +* The target is defined by the segment '-j RESTRICT_TO_NODES + --blacklist plc.princeton.' '-j RESTRICT_TO_NODES' defines the + target type (RESTRICT_TO_NODES) and '--blacklist' defines a + parameter specific to this type. + +sfatables comes with a default set of matches and targets, which can +be extended using a simple interface. + +When you execute this command, you should see it in your current +configuration by running 'sfatables -L INCOMING' + +# ./sfatables -L INCOMING + +# Rule Match Arguments Target Arguments +# 1 hrn user-hrn=plc.princeton.* RESTRICT_TO_NODES blacklist=plc.mit + +With this configuration, every time a request is received from +plc.princeton.*, nodes matching the blacklist prefix (plc.mit) are +dropped from the rspec. + +The basis for deploying rules using sfatables is the library of +matches and targets. A set of such rules constitutes a 'policy', which +as we will see is a portable piece of information that can be +exchanged with users, peers, and policy makers to make resource +allocation and peering a more effective process. + +XPath crash course -- read this now, or deal with frustration in the +remainder of the document +----------------------------------------------------- + +XPath is used to select sets of nodes in an XML file. It is like the +'SELECT' command in SQL, but has the advantage of applying to tree +structures, which are more general than relations. That is, while a +relation (a table) has a depth = 2, a tree can have an arbitrary +depth. This property allows us to consicely refer to criteria such as 'the nodes in the +site corresponding to a user named Alice.' This particular command +might look like: '/user[name='Alice']/site/node.' + +An XPath expression is like a directory path, with the following key +differences. + +* In a directory path the relationship between X/Y is a parent-child + relationship. In XPath, this can be one of a large number of + relationships, including 'sibling', 'parent', 'ancestor', + 'descendant' etc. The most frequently used relationships are: + + child - e.g. site/node + + and + + descendant - e.g. user//node + +* Each level can be filtered with a predicate; e.g., + 'site[startswith(@hrn,'plc')]/nodes' means all nodes in sites that + have the prefix 'plc'. + +* Some terms have an '@' in them, meaning that they are attributes; + e.g., to retrieve the value of p in the following data, we would use + the expression "/x/y/@p" + + + + + +Example match +------------- + +A match specification consists of a 'context', a set of arguments, and +a 'processor.' The context defines the information associated with a +request that this match operates on. Think of it as the input +parameters to the match. The arguments define values specific to the +rule. The processor refers to the program that actually evaluates the +match. + + + + + + user-hrn + HRN of the user requesting resouces + HRN + + + + + +Now, when we run the command in the previous example: + +sfatables -A INCOMING -- -m hrn --user-hrn plc.princeton -- -j RESTRICT_TO_NODES --blacklist plc.mit + +... this match specification is parameterized and dropped in the +sfatables configuration directory. The paramterized version of the +match is given below: + + + + + + + user-hrn + HRN of the user requesting resouces + HRN + plc.princeton <------------------ + + + + + +Notice the additional 'value' tag. Let's list the entries in the +configuration directory. + +# ls -l /etc/sfatables/INCOMING + +sapan@joyce ~/Projects/planetlab/sfa/sfatables/targets $ +total 16 +-rw-r--r-- 1 sapan sapan 671 Sep 11 12:13 sfatables-1-match +-rw-r--r-- 1 sapan sapan 646 Sep 11 12:13 sfatables-1-target + +As you can see, a configuration is simply a set of match-target pairs. + +Finally, this is what the match processor looks like: + + + + + + + + True + + + False + + + + + + + +It is written in XSLT. If the syntax of XSLT were not XML-based, then +it might have looked as follows: + +context-hrn = //sfa/user/hrn +request-hrn = //request/user/hrn + +result = + if (starts_with(context-hrn,request-hrn)) then + True + else + False + return result + +This is exactly what the previous fragment of code says, albeit in a +different format. + +Example target +-------------- + +Targets are specified just like matches. If you haven't read the match +example, then now is a good time to do that. Here's an example target: + + + + + + + whitelist + Prefix of nodes to whitelist for this match. + PREFIX + + + blacklist + Prefix of nodes to blacklist for this match. + PREFIX + + + + + +and the corresponding target processor: + + + + + + + + + + + + + + + + + + + + + + + + + +[TODO: explain this target] + + +Contexts +-------- + +Matches and targets are associated with specific contexts. A target may use a +variety of criteria to process a request, and may need to look them up in the +SFA database. The 'context' contains an xpath expression that isolates the +items that a match or target may refer to. For example, if a match needs access +to the nodes corresponding to a slice's site, then the context may be '/sfa/slice[@name=/context/slice/@name]/nodes'. + + +Here's a summary of the model: +----------------------------- + +An AM can inherit from a set of elements (E). + +Each element in E is associated with three things: + + * A er... 'micro-rspec' + + * an abstract database schema - S, which the AM is expected to be + able to generate on the fly. + + * a set of matches and targets. + +Matches and targets may use pieces of information from S by specifying +them in their context (see the 'context' part of matches and targets +above). diff --git a/sfatables/TO_CLEANUP b/sfatables/TO_CLEANUP new file mode 100644 index 00000000..bb7db58c --- /dev/null +++ b/sfatables/TO_CLEANUP @@ -0,0 +1,3 @@ +1# Load sfatables rules only once, not on every request. +2# Set request context based on the context requested by the match/target. +3# Remember the element type at run time diff --git a/sfatables/__init__.py b/sfatables/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/sfatables/command.py b/sfatables/command.py new file mode 100644 index 00000000..1cb58e7d --- /dev/null +++ b/sfatables/command.py @@ -0,0 +1,26 @@ +import os, time + +class Command: + options = [] + help = '' + type='command' + matches = False + targets = False + action = 'store_const' + + def __init__(self): + self.options = [] + self.help = '' + self.type = 'command' + self.matches = False + self.targets = False + self.action = 'store_const' + + return + + def call(self, coptions, moptions, toptions): + # Override this function + return True + + def __call__(self, coptions, moptions, toptions): + return self.call(coptions,moptions,toptions) diff --git a/sfatables/commands/Add.py b/sfatables/commands/Add.py new file mode 100644 index 00000000..e7657fff --- /dev/null +++ b/sfatables/commands/Add.py @@ -0,0 +1,70 @@ +import os, time +import libxml2 +from sfatables.command import Command +from sfatables.globals import * + +class Add(Command): + def __init__(self): + self.options = [('-A','--add')] + self.help = 'Add a rule to a chain' + self.matches = True + self.targets = True + return + + def getnextfilename(self,type,chain): + dir = sfatables_config + "/"+chain; + last_rule_number = 0 + + for (root, dirs, files) in os.walk(dir): + for file in files: + if (file.startswith('sfatables-') and file.endswith(type)): + number_str = file.split('-')[1] + number = int(number_str) + if (number>last_rule_number): + last_rule_number = number + + return "sfatables-%d-%s"%(last_rule_number+1,type) + + def call_gen(self, chain, type, dir, options): + filename = os.path.join(dir, options.name+".xml") + xmldoc = libxml2.parseFile(filename) + + p = xmldoc.xpathNewContext() + + supplied_arguments = options.arguments + if (hasattr(options,'element') and options.element): + element = options.element + else: + element='*' + + for option in supplied_arguments: + option_name = option['name'] + option_value = getattr(options,option_name) + + if (hasattr(options,option_name) and getattr(options,option_name)): + context = p.xpathEval("//rule[@element='%s' or @element='*']/argument[name='%s']"%(element, option_name)) + if (not context): + raise Exception('Unknown option %s for match %s and element %s'%(option,option['name'], element)) + else: + # Add the value of option + valueNode = libxml2.newNode('value') + valueNode.addContent(option_value) + context[0].addChild(valueNode) + + filename = self.getnextfilename(type,chain) + file_path = os.path.join(sfatables_config, chain, filename) + if not os.path.isdir(os.path.dirname(file_path)): + os.makedirs(os.path.dirname(file_path)) + xmldoc.saveFile(file_path) + p.xpathFreeContext() + xmldoc.freeDoc() + + return True + + def call(self, command_options, match_options, target_options): + chain = command_options.args[0] + ret = self.call_gen(chain, 'match',match_dir, match_options) + if (ret): + ret = self.call_gen(chain, 'target',target_dir, target_options) + + return ret diff --git a/sfatables/commands/Delete.py b/sfatables/commands/Delete.py new file mode 100644 index 00000000..50b1d626 --- /dev/null +++ b/sfatables/commands/Delete.py @@ -0,0 +1,32 @@ +import os, time +from sfatables.globals import * +from sfatables.command import Command + +class Delete(Command): + options = [('-D','--delete')] + help = 'Delete a rule from a chain' + key='delete_rule' + matches = False + targets = False + + def __init__(self): + return + + def call(self, command_options, match_options, target_options): + + if (len(command_options.args)<2): + print "Please specify the chain and the rule number to delete, e.g. sfatables -D INCOMING 1." + return + + chain = command_options.args[0] + + + rule_number = command_options.args[1] + chain_dir = sfatables_config + "/" + chain + + match_path = chain_dir + "/" + "sfatables-%s-match"%rule_number + target_path = chain_dir + "/" + "sfatables-%s-target"%rule_number + + os.unlink(match_path) + os.unlink(target_path) + diff --git a/sfatables/commands/Insert.py b/sfatables/commands/Insert.py new file mode 100644 index 00000000..d4010920 --- /dev/null +++ b/sfatables/commands/Insert.py @@ -0,0 +1,65 @@ +import os, time +import libxml2 +from sfatables.command import Command +from sfatables.globals import * + +class Insert(Command): + def __init__(self): + self.options = [('-I','--insert')] + self.help = 'Insert a rule into a chain' + self.matches = True + self.targets = True + return + + def call_gen(self, chain, type, dir, options, file_path): + filename = os.path.join(dir, options.name+".xml") + xmldoc = libxml2.parseFile(filename) + + p = xmldoc.xpathNewContext() + + supplied_arguments = options.arguments + if (hasattr(options,'element') and options.element): + element = options.element + else: + element='*' + + for option in supplied_arguments: + option_name = option['name'] + option_value = getattr(options,option_name) + + if (hasattr(options,option_name) and getattr(options,option_name)): + context = p.xpathEval("//rule[@element='%s' or @element='*']/argument[name='%s']"%(element, option_name)) + if (not context): + raise Exception('Unknown option %s for match %s and element %s'%(option,option['name'], element)) + else: + # Add the value of option + valueNode = libxml2.newNode('value') + valueNode.addContent(option_value) + context[0].addChild(valueNode) + + if not os.path.isdir(os.path.dirname(file_path)): + os.makedirs(os.path.dirname(file_path)) + xmldoc.saveFile(file_path) + p.xpathFreeContext() + xmldoc.freeDoc() + + return True + + def call(self, command_options, match_options, target_options): + if (len(command_options.args)<2): + print "Please specify the chain and the rule number to insert, e.g. sfatables -I INCOMING 1 -- ...." + return + + chain = command_options.args[0] + + rule_number = command_options.args[1] + chain_dir = sfatables_config + "/" + chain + + match_path = chain_dir + "/" + "sfatables-%s-match"%rule_number + target_path = chain_dir + "/" + "sfatables-%s-target"%rule_number + + ret = self.call_gen(chain, 'match',match_dir, match_options, match_path) + if (ret): + ret = self.call_gen(chain, 'target',target_dir, target_options, target_path) + + return ret diff --git a/sfatables/commands/List.py b/sfatables/commands/List.py new file mode 100644 index 00000000..95d20381 --- /dev/null +++ b/sfatables/commands/List.py @@ -0,0 +1,103 @@ +import os, time +import libxml2 +import pdb + +from sfatables.globals import * +from sfatables.pretty import Pretty +from sfatables.command import Command + +class List(Command): + + def __init__(self): + self.options = [('-L','--list')] + self.help = 'List a chain' + self.key='list_rule' + self.matches = False + self.targets = False + + return + + def get_info(self, type, xmlextension_path): + xmldoc = libxml2.parseFile(xmlextension_path) + p = xmldoc.xpathNewContext() + + ext_name_node = p.xpathEval("/%s/@name"%type) + ext_name = ext_name_node[0].content + + name_nodes = p.xpathEval("//rule/argument[value!='']/name") + value_nodes = p.xpathEval("//rule/argument[value!='']/value") + element_nodes = p.xpathEval("//argument[value!='']/parent::rule/@element") + + if (len(element_nodes)>1): + raise Exception("Invalid rule %s contains multiple elements."%xmlextension_path) + + element = [] + argument_str = "" + if element_nodes: + element = element_nodes[0].content + + names = [n.content for n in name_nodes] + values = [v.content for v in value_nodes] + + name_values = zip(names,values) + name_value_pairs = map(lambda (n,v):n+'='+v, name_values) + + argument_str = ",".join(name_value_pairs) + + p.xpathFreeContext() + xmldoc.freeDoc() + + return {'name':ext_name, 'arguments':argument_str, 'element':element} + + def get_rule_list(self, chain_dir_path): + broken_semantics = os.walk(chain_dir_path) + rule_numbers = {} + + for (root, dirs, files) in broken_semantics: + for file in files: + if (file.startswith('sfatables')): + (magic,number,type) = file.split('-') + rule_numbers[int(number)]=1 + + rule_list = rule_numbers.keys() + rule_list.sort() + return rule_list + + def call(self, command_options, match_options, target_options): + if (len(command_options.args) < 1): + print "Please specify the name of the chain you would like to list, e.g. sfatables -L INCOMING." + return + + chain = command_options.args[0] + chain_dir = os.path.join(sfatables_config, chain) + + rule_list = self.get_rule_list(chain_dir) + + pretty = Pretty(['Rule','Match','Arguments','Target','Element','Arguments']) + + for number in rule_list: + match_file = "sfatables-%d-%s"%(number,'match') + target_file = "sfatables-%d-%s"%(number,'target') + + match_path = sfatables_config + '/' + chain + '/' + match_file + target_path = sfatables_config + '/' + chain + '/' + target_file + + match_info = self.get_info ('match',match_path) + target_info = self.get_info ('target',target_path) + + pretty.push_row(["%d"%number, + match_info['name'], + match_info['arguments'], + target_info['name'], + target_info['element'], + target_info['arguments']]) + + pretty.pprint() + + + + + + + + diff --git a/sfatables/commands/SetDefault.py b/sfatables/commands/SetDefault.py new file mode 100644 index 00000000..b840706b --- /dev/null +++ b/sfatables/commands/SetDefault.py @@ -0,0 +1,19 @@ +import os, time +from sfatables.command import Command + +class SetDefault(Command): + options = [('-P','--default')] + help = 'Set the default rule for a chain' + key='set_default_rule' + matches = False + targets = False + + def __init__(self): + return + + def call(self): + # Override this function + return True + + def __call__(self, option, opt_str, value, parser, *args, **kwargs): + return self.call(option) diff --git a/sfatables/commands/__init__.py b/sfatables/commands/__init__.py new file mode 100644 index 00000000..273696c1 --- /dev/null +++ b/sfatables/commands/__init__.py @@ -0,0 +1,7 @@ +all = """ +Add +Delete +Insert +List +SetDefault +""".split() diff --git a/sfatables/commands/moo.py b/sfatables/commands/moo.py new file mode 100644 index 00000000..bd8c88ef --- /dev/null +++ b/sfatables/commands/moo.py @@ -0,0 +1,210 @@ +import os, time + +class Command: + commandline_options = [] + help = "Add a new rule" + + def __init__(self): + if (len(commandline_options!=2)): + raise Exception("Internal error: each command must supply 2 command line options") + + + def __call__(self, option, opt_str, value, parser, *args, **kwargs): + return True + + + + def help(self, indent = " "): + """ + Text documentation for the method. + """ + + (min_args, max_args, defaults) = self.args() + + text = "%s(%s) -> %s\n\n" % (self.name, ", ".join(max_args), xmlrpc_type(self.returns)) + + text += "Description:\n\n" + lines = [indent + line.strip() for line in self.__doc__.strip().split("\n")] + text += "\n".join(lines) + "\n\n" + + def param_text(name, param, indent, step): + """ + Format a method parameter. + """ + + text = indent + + # Print parameter name + if name: + param_offset = 32 + text += name.ljust(param_offset - len(indent)) + else: + param_offset = len(indent) + + # Print parameter type + param_type = python_type(param) + text += xmlrpc_type(param_type) + "\n" + + # Print parameter documentation right below type + if isinstance(param, Parameter): + wrapper = textwrap.TextWrapper(width = 70, + initial_indent = " " * param_offset, + subsequent_indent = " " * param_offset) + text += "\n".join(wrapper.wrap(param.doc)) + "\n" + param = param.type + + text += "\n" + + # Indent struct fields and mixed types + if isinstance(param, dict): + for name, subparam in param.iteritems(): + text += param_text(name, subparam, indent + step, step) + elif isinstance(param, Mixed): + for subparam in param: + text += param_text(name, subparam, indent + step, step) + elif isinstance(param, (list, tuple, set)): + for subparam in param: + text += param_text("", subparam, indent + step, step) + + return text + + text += "Parameters:\n\n" + for name, param in zip(max_args, self.accepts): + text += param_text(name, param, indent, indent) + + text += "Returns:\n\n" + text += param_text("", self.returns, indent, indent) + + return text + + def args(self): + """ + Returns a tuple: + + ((arg1_name, arg2_name, ...), + (arg1_name, arg2_name, ..., optional1_name, optional2_name, ...), + (None, None, ..., optional1_default, optional2_default, ...)) + + That represents the minimum and maximum sets of arguments that + this function accepts and the defaults for the optional arguments. + """ + + # Inspect call. Remove self from the argument list. + max_args = self.call.func_code.co_varnames[1:self.call.func_code.co_argcount] + defaults = self.call.func_defaults + if defaults is None: + defaults = () + + min_args = max_args[0:len(max_args) - len(defaults)] + defaults = tuple([None for arg in min_args]) + defaults + + return (min_args, max_args, defaults) + + def type_check(self, name, value, expected, args): + """ + Checks the type of the named value against the expected type, + which may be a Python type, a typed value, a Parameter, a + Mixed type, or a list or dictionary of possibly mixed types, + values, Parameters, or Mixed types. + + Extraneous members of lists must be of the same type as the + last specified type. For example, if the expected argument + type is [int, bool], then [1, False] and [14, True, False, + True] are valid, but [1], [False, 1] and [14, True, 1] are + not. + + Extraneous members of dictionaries are ignored. + """ + + # If any of a number of types is acceptable + if isinstance(expected, Mixed): + for item in expected: + try: + self.type_check(name, value, item, args) + return + except SfaInvalidArgument, fault: + pass + raise fault + + # If an authentication structure is expected, save it and + # authenticate after basic type checking is done. + #if isinstance(expected, Auth): + # auth = expected + #else: + # auth = None + + # Get actual expected type from within the Parameter structure + if isinstance(expected, Parameter): + min = expected.min + max = expected.max + nullok = expected.nullok + expected = expected.type + else: + min = None + max = None + nullok = False + + expected_type = python_type(expected) + + # If value can be NULL + if value is None and nullok: + return + + # Strings are a special case. Accept either unicode or str + # types if a string is expected. + if expected_type in StringTypes and isinstance(value, StringTypes): + pass + + # Integers and long integers are also special types. Accept + # either int or long types if an int or long is expected. + elif expected_type in (IntType, LongType) and isinstance(value, (IntType, LongType)): + pass + + elif not isinstance(value, expected_type): + raise SfaInvalidArgument("expected %s, got %s" % \ + (xmlrpc_type(expected_type), + xmlrpc_type(type(value))), + name) + + # If a minimum or maximum (length, value) has been specified + if expected_type in StringTypes: + if min is not None and \ + len(value.encode(self.api.encoding)) < min: + raise SfaInvalidArgument, "%s must be at least %d bytes long" % (name, min) + if max is not None and \ + len(value.encode(self.api.encoding)) > max: + raise SfaInvalidArgument, "%s must be at most %d bytes long" % (name, max) + elif expected_type in (list, tuple, set): + if min is not None and len(value) < min: + raise SfaInvalidArgument, "%s must contain at least %d items" % (name, min) + if max is not None and len(value) > max: + raise SfaInvalidArgument, "%s must contain at most %d items" % (name, max) + else: + if min is not None and value < min: + raise SfaInvalidArgument, "%s must be > %s" % (name, str(min)) + if max is not None and value > max: + raise SfaInvalidArgument, "%s must be < %s" % (name, str(max)) + + # If a list with particular types of items is expected + if isinstance(expected, (list, tuple, set)): + for i in range(len(value)): + if i >= len(expected): + j = len(expected) - 1 + else: + j = i + self.type_check(name + "[]", value[i], expected[j], args) + + # If a struct with particular (or required) types of items is + # expected. + elif isinstance(expected, dict): + for key in value.keys(): + if key in expected: + self.type_check(name + "['%s']" % key, value[key], expected[key], args) + for key, subparam in expected.iteritems(): + if isinstance(subparam, Parameter) and \ + subparam.optional is not None and \ + not subparam.optional and key not in value.keys(): + raise SfaInvalidArgument("'%s' not specified" % key, name) + + #if auth is not None: + # auth.check(self, *args) diff --git a/sfatables/globals.py b/sfatables/globals.py new file mode 100644 index 00000000..fe6788d7 --- /dev/null +++ b/sfatables/globals.py @@ -0,0 +1,5 @@ +import os.path + +sfatables_config = '/etc/sfatables' +match_dir = os.path.join(sfatables_config, "matches") +target_dir = os.path.join(sfatables_config, "targets") diff --git a/sfatables/matches/all.xml b/sfatables/matches/all.xml new file mode 100644 index 00000000..f21fc09e --- /dev/null +++ b/sfatables/matches/all.xml @@ -0,0 +1,12 @@ + + + + + + + diff --git a/sfatables/matches/hrn.xml b/sfatables/matches/hrn.xml new file mode 100644 index 00000000..14bc26e2 --- /dev/null +++ b/sfatables/matches/hrn.xml @@ -0,0 +1,19 @@ + + + + + + + + user-hrn + HRN of the user requesting resouces + HRN + + + + diff --git a/sfatables/matches/slice-whitelist.xml b/sfatables/matches/slice-whitelist.xml new file mode 100644 index 00000000..ad3c8401 --- /dev/null +++ b/sfatables/matches/slice-whitelist.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/sfatables/matches/slice.xml b/sfatables/matches/slice.xml new file mode 100644 index 00000000..e3ee7db9 --- /dev/null +++ b/sfatables/matches/slice.xml @@ -0,0 +1,19 @@ + + + + + + + + hrn + HRN of the slice requesting resources + HRN + + + + diff --git a/sfatables/pretty.py b/sfatables/pretty.py new file mode 100644 index 00000000..9498aac1 --- /dev/null +++ b/sfatables/pretty.py @@ -0,0 +1,38 @@ +#!/usr/bin/python + +class Pretty: + rows = [] + column_width = [] + + def __init__(self, header): + self.rows.append(header) + for c in header: + self.column_width.append(len(header)) + + def push_row (self, row): + self.rows.append(row) + num = 0 + for c in row: + if (self.column_width[num] < len(c)): + self.column_width[num] = len(c) + num = num + 1 + return + + def pprint (self): + print '\n' + + for rule in self.rows: + cur_line = "" + num = 0 + + for r in rule: + cur_line = cur_line + "%s "%r + if (self.column_width[num] > len(r)): + padding0 = ''.zfill(self.column_width[num] - len(r)) + padding = padding0.replace('0',' ') + cur_line = cur_line + padding + num = num + 1 + + print cur_line + + diff --git a/sfatables/processors/__sfatables_rule_wrap_up__.xsl b/sfatables/processors/__sfatables_rule_wrap_up__.xsl new file mode 100644 index 00000000..00e43b60 --- /dev/null +++ b/sfatables/processors/__sfatables_rule_wrap_up__.xsl @@ -0,0 +1,15 @@ + + + + + + + + + + + + + diff --git a/sfatables/processors/__sfatables_wrap_up__.xsl b/sfatables/processors/__sfatables_wrap_up__.xsl new file mode 100644 index 00000000..3b73dc38 --- /dev/null +++ b/sfatables/processors/__sfatables_wrap_up__.xsl @@ -0,0 +1,14 @@ + + + + + + + + + + + + diff --git a/sfatables/processors/accept.xsl b/sfatables/processors/accept.xsl new file mode 100644 index 00000000..9a397ef7 --- /dev/null +++ b/sfatables/processors/accept.xsl @@ -0,0 +1,12 @@ + + + + + + + + + + diff --git a/sfatables/processors/all.xsl b/sfatables/processors/all.xsl new file mode 100644 index 00000000..469220c9 --- /dev/null +++ b/sfatables/processors/all.xsl @@ -0,0 +1,8 @@ + + + + + + + diff --git a/sfatables/processors/hrn.xsl b/sfatables/processors/hrn.xsl new file mode 100644 index 00000000..47a8b621 --- /dev/null +++ b/sfatables/processors/hrn.xsl @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sfatables/processors/legacy-restrict-to-nodes.xsl b/sfatables/processors/legacy-restrict-to-nodes.xsl new file mode 100644 index 00000000..6548cebd --- /dev/null +++ b/sfatables/processors/legacy-restrict-to-nodes.xsl @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sfatables/processors/link/restrict_slice.xml b/sfatables/processors/link/restrict_slice.xml new file mode 100644 index 00000000..2a3f1b5c --- /dev/null +++ b/sfatables/processors/link/restrict_slice.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sfatables/processors/max_link_kbps.xsl b/sfatables/processors/max_link_kbps.xsl new file mode 100644 index 00000000..7170fd81 --- /dev/null +++ b/sfatables/processors/max_link_kbps.xsl @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sfatables/processors/max_node_kbps.xsl b/sfatables/processors/max_node_kbps.xsl new file mode 100644 index 00000000..89b4df85 --- /dev/null +++ b/sfatables/processors/max_node_kbps.xsl @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sfatables/processors/reject.xsl b/sfatables/processors/reject.xsl new file mode 100644 index 00000000..0c07e5e6 --- /dev/null +++ b/sfatables/processors/reject.xsl @@ -0,0 +1,8 @@ + + + + + Your resource-allocation request has been rejected. + + + diff --git a/sfatables/processors/restrict_to_flowspec.xsl b/sfatables/processors/restrict_to_flowspec.xsl new file mode 100644 index 00000000..a919da75 --- /dev/null +++ b/sfatables/processors/restrict_to_flowspec.xsl @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sfatables/processors/restrict_to_nodes.xsl b/sfatables/processors/restrict_to_nodes.xsl new file mode 100644 index 00000000..12ff4cd5 --- /dev/null +++ b/sfatables/processors/restrict_to_nodes.xsl @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sfatables/processors/slice-hrn.xsl b/sfatables/processors/slice-hrn.xsl new file mode 100644 index 00000000..1ba59422 --- /dev/null +++ b/sfatables/processors/slice-hrn.xsl @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sfatables/processors/slice-whitelist.xsl b/sfatables/processors/slice-whitelist.xsl new file mode 100644 index 00000000..8ca8deb2 --- /dev/null +++ b/sfatables/processors/slice-whitelist.xsl @@ -0,0 +1,54 @@ + + + + + + + + + + plc.princeton.acb + plc.princeton.sapanb + plc.princeton.codeen + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sfatables/processors/test.xml b/sfatables/processors/test.xml new file mode 100644 index 00000000..49857349 --- /dev/null +++ b/sfatables/processors/test.xml @@ -0,0 +1,3 @@ + +plc.princeton.sapanb + diff --git a/sfatables/runtime.py b/sfatables/runtime.py new file mode 100644 index 00000000..a5363352 --- /dev/null +++ b/sfatables/runtime.py @@ -0,0 +1,110 @@ +#!/usr/bin/python + +import sys +import os +import pdb +import libxml2 + +from optparse import OptionParser +from sfatables import commands +from sfatables.globals import * +from sfatables.commands.List import * +from sfatables.xmlrule import * + +class SFATablesRules: + def __init__(self, chain_name): + self.active_context = {} + self.contexts = None # placeholder for rspec_manger + self.sorted_rule_list = [] + self.final_processor = '__sfatables_wrap_up__.xsl' + chain_dir_path = os.path.join(sfatables_config,chain_name) + rule_list = List().get_rule_list(chain_dir_path) + for rule_number in rule_list: + self.sorted_rule_list = self.sorted_rule_list + [XMLRule(chain_name, rule_number)] + return + + def wrap_up(self, doc): + filepath = os.path.join(sfatables_config, 'processors', self.final_processor) + + if not os.path.exists(filepath): + raise Exception('Could not find final rule filter') + + styledoc = libxml2.parseFile(filepath) + style = libxslt.parseStylesheetDoc(styledoc) + result = style.applyStylesheet(doc, None) + stylesheet_result = style.saveResultToString(result) + style.freeStylesheet() + doc.freeDoc() + result.freeDoc() + + return stylesheet_result + + def set_context(self, request_context): + self.active_context = request_context + return + + def create_xml_node(self, name, context_dict): + node = libxml2.newNode(name) + for k in context_dict.keys(): + if (type(context_dict[k])==dict): + childNode = self.create_xml_node(k, context_dict[k]) + node.addChild(childNode) + else: + childNode = libxml2.newNode(k) + childNode.addContent(context_dict[k]) + node.addChild(childNode) + return node + + def add_request_context_to_rspec(self, doc): + p = doc.xpathNewContext() + context = p.xpathEval("//RSpec") + if (not context): + raise Exception('Request is not an rspec') + else: + # Add the request context + requestNode = self.create_xml_node('request-context',self.active_context) + context[0].addChild(requestNode) + p.xpathFreeContext() + return doc + + + def apply(self, rspec): + if (self.sorted_rule_list): + doc = libxml2.parseDoc(rspec) + doc = self.add_request_context_to_rspec(doc) + + intermediate_rspec = doc + + for rule in self.sorted_rule_list: + (matched,intermediate_rspec) = rule.apply_interpreted(intermediate_rspec) + if (rule.terminal and matched): + break + + final_rspec = self.wrap_up(intermediate_rspec) + else: + final_rspec = rspec + + return final_rspec + + def print_rules(self): + for rule in self.sorted_rule_list: + print rule.processors + +def main(): + incoming = SFATablesRules('INCOMING') + incoming.set_context({'sfa':{'user':{'hrn':'plc.princeton.sapanb'}}}) + + outgoing = SFATablesRules('OUTGOING') + print "%d rules loaded for INCOMING chain"%len(incoming.sorted_rule_list) + incoming.print_rules() + + print "%d rules loaded for OUTGOING chain"%len(outgoing.sorted_rule_list) + outgoing.print_rules() + + rspec = open(sys.argv[1]).read() + newrspec = incoming.apply(rspec) + print newrspec + return + +if __name__=="__main__": + main() diff --git a/sfatables/sfatables b/sfatables/sfatables new file mode 100755 index 00000000..b413ef1a --- /dev/null +++ b/sfatables/sfatables @@ -0,0 +1,138 @@ +#!/usr/bin/python + +# This file parses an sfatables command and generates XML files that parameterize +# matches and targets. Each such XML file defines a rule. Rules are dropped in directories +# that represent 'chains.' SFA loads rules from various chains and invokes them at certain +# 'hook points.' For example, it invokes rules in the 'OUTGOING' chain before returning +# the output of 'get_resources.' + +import sys +import os +import pdb +import glob +import libxml2 + +from optparse import OptionParser +from sfatables import commands +from sfatables.xmlextension import Xmlextension +from sfatables.globals import * + +def load_commands(module, list): + command_dict={} + + for command_name in list: + command_module = __import__(".".join([module,command_name]),fromlist=[module]) + command = getattr(command_module, command_name) + command_dict[command_name]=command() + + return command_dict + +def load_xml_extensions(module, ext_dir): + ext_dict={} + + exts = glob.glob(ext_dir + os.path.sep + "*") + for ext in exts: + module = Xmlextension(ext) + # get the filename and get rid of the ".xml" extension + ext_name = os.path.extsep.join(os.path.splitext(os.path.basename(ext))[:-1]) + ext_dict[ext_name]=module + + return ext_dict + + +def create_parser(command_dict): + parser = OptionParser(usage="sfatables [command] [chain] [match] [target]", + description='See "man sfatables" for more detail.') + + for k in command_dict.keys(): + command = command_dict[k] + for (short_option,long_option) in command.options: + parser.add_option(short_option,long_option,dest=command.type,action=command.action,const=k,help=command.help,metavar="CHAIN") + + return parser + +def create_parser_xml_ext(ext_dict): + parser = OptionParser(usage="sfatables [command] [chain] [match] [target]", + description='See "man sfatables" for more detail.') + + for k in ext_dict.keys(): + command = ext_dict[k] + for arg in command.arguments: + parser.add_option('',"--"+arg['name'],dest=arg['name'],help=arg['help'],metavar=arg['target']) + + return parser + + +def partition(sep, lst): + ret = [] + curpart = [] + for item in lst: + if (item==sep): + ret.append(curpart) + curpart=[] + else: + curpart.append(item) + ret.append(curpart) + + return ret + + +def main(): + # sfatables -- -- + pargs = partition('--', sys.argv[1:]) + + command_dict = load_commands("sfatables.commands",commands.all) + command_parser = create_parser(command_dict) + (options, args) = command_parser.parse_args(pargs[0]) + setattr(options, 'args', args) + + command = command_dict[options.command] + + if (command.matches): + if (len(pargs)<2): + raise Exception("Must specify match for this command") + match_dict = load_xml_extensions("sfatables.matches",match_dir) + match_parser = create_parser_xml_ext(match_dict) + matches_str = ",".join(match_dict.keys()) + match_parser.add_option('-m','--match',dest='name',help='Match name (one of %s)'%matches_str, metavar = 'MATCH') + match_parser.add_option('-n','--negate',dest='negate',help='Negate result',action='store_true') + (match_options, args) = match_parser.parse_args(pargs[1]) + try: + name = match_options.name + except Exception: + print "Must specify match name with -m" + + if (match_dict.has_key(name)): + setattr(match_options, 'arguments', match_dict[name].arguments) + else: + raise Exception('Match %s not found'%name) + + else: + match_options=None + + if (command.targets): + if (len(pargs)<3): + raise Exception("Must specify a target for this command") + target_dict = load_xml_extensions("sfatables.targets",target_dir) + target_parser = create_parser_xml_ext(target_dict) + targets_str = ",".join(target_dict.keys()) + target_parser.add_option('-j','--jump',dest='name',help='Target name (one of %s)'%targets_str, metavar = 'TARGET') + target_parser.add_option('-e','--element',dest='element',help='Element name', metavar = 'ELEMENT') + (target_options, args) = target_parser.parse_args(pargs[2]) + try: + name = target_options.name + except Exception: + print "Must specify target name with -j" + + if (target_dict.has_key(name)): + setattr(target_options, 'arguments', target_dict[name].arguments) + else: + raise Exception('Target %s not found'%name) + + else: + target_options = None + + command(options, match_options, target_options) + +if __name__=='__main__': + main() diff --git a/sfatables/targets/ACCEPT.xml b/sfatables/targets/ACCEPT.xml new file mode 100644 index 00000000..d97c68d6 --- /dev/null +++ b/sfatables/targets/ACCEPT.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/sfatables/targets/REJECT.xml b/sfatables/targets/REJECT.xml new file mode 100644 index 00000000..8beeb3c1 --- /dev/null +++ b/sfatables/targets/REJECT.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/sfatables/targets/RESTRICT_SLICE_DOMAIN.xml b/sfatables/targets/RESTRICT_SLICE_DOMAIN.xml new file mode 100644 index 00000000..3fc08418 --- /dev/null +++ b/sfatables/targets/RESTRICT_SLICE_DOMAIN.xml @@ -0,0 +1,63 @@ + + + + + + whitelist-dns-suffix + Suffix of nodes to whitelist for this match. + SUFFIX + + + blacklist-dns-suffix + Suffix of nodes to blacklist for this match. + SUFFIX + + + + + + + + whitelist + Prefix of nodes to whitelist for this match. + PREFIX + + + blacklist + Prefix of nodes to blacklist for this match. + PREFIX + + + + + + + whitelist-switch + Switch id to whitelist. + PREFIX + + + + whitelist-tpsrc + Source port to whitelist. + PREFIX + + + whitelist-tpdst + Destination port to whitelist. + PREFIX + + + whitelist-ipdst + Destination IP to whitelist. + PREFIX + + + whitelist-ipsrc + Source IP to whitelist. + PREFIX + + + + + diff --git a/sfatables/targets/RESTRICT_SLICE_PROP.xml b/sfatables/targets/RESTRICT_SLICE_PROP.xml new file mode 100644 index 00000000..4f6c1462 --- /dev/null +++ b/sfatables/targets/RESTRICT_SLICE_PROP.xml @@ -0,0 +1,26 @@ + + + + + + max-node-kbps + Maximum node bandwidth in kilobytes per second. + kbps + + + on-node + Node to impose the limit on. Empty => all nodes. + kbps + + + + + + + max-link-kbps + Maximum link bandwidth in kilobytes per second. + kbps + + + + diff --git a/sfatables/test.rspec b/sfatables/test.rspec new file mode 100644 index 00000000..387594b8 --- /dev/null +++ b/sfatables/test.rspec @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/sfatables/test.sfarspec b/sfatables/test.sfarspec new file mode 100644 index 00000000..641095e4 --- /dev/null +++ b/sfatables/test.sfarspec @@ -0,0 +1,16 @@ + + + + plc.princeton.sapanb + user-hrnplc.princeton.sapanb + blacklist-dns-suffixbing + + + + + + + + + + diff --git a/sfatables/vini.rspec b/sfatables/vini.rspec new file mode 100644 index 00000000..ffe034ce --- /dev/null +++ b/sfatables/vini.rspec @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sfatables/xmlextension.py b/sfatables/xmlextension.py new file mode 100644 index 00000000..5e298db9 --- /dev/null +++ b/sfatables/xmlextension.py @@ -0,0 +1,47 @@ +# Matches and targets are specified using XML files. +# They provide the following information: +# - The context required by the match +# - The processor that actually implements the match or target +# - The parameters that the processor needs to evaluate the context + +import libxml2 +from sfatables.globals import * + +class Xmlextension: + def __init__(self, file_path): + + self.context = "" + self.processor = "" + self.operand = "VALUE" + self.arguments = [] + self.terminal = 0 + + self.xmldoc = libxml2.parseFile(file_path) + + # TODO: Check xmldoc against a schema + p = self.xmldoc.xpathNewContext() + + # + # + # + + context = p.xpathEval('//context/@select') + self.context = context[0].content + + processor = p.xpathEval('//processor/@filename') + self.context = processor[0].content + + name = p.xpathEval('//rule/argument/name') + help = p.xpathEval('//rule/argument/help') + target = p.xpathEval('//rule/argument/operand') + + context = p.xpathEval('//attributes/attribute[@terminal="yes"]') + self.terminal = (context != []) + + self.arguments = map(lambda (name,help,target):{'name':name.content,'help':help.content,'target':target.content}, zip(name,help,target)) + + p.xpathFreeContext() + self.xmldoc.freeDoc() + + return + diff --git a/sfatables/xmlrule.py b/sfatables/xmlrule.py new file mode 100644 index 00000000..52bea31e --- /dev/null +++ b/sfatables/xmlrule.py @@ -0,0 +1,138 @@ +import libxml2 +import libxslt +from sfatables.globals import * + +class XMLRule: + def apply_processor(self, type, doc, output_xpath_filter=None): + processor = self.processors[type] + + # XXX TO CLEAN UP + filepath = os.path.join(sfatables_config, 'processors', processor) + # XXX + + styledoc = libxml2.parseFile(filepath) + style = libxslt.parseStylesheetDoc(styledoc) + result = style.applyStylesheet(doc, None) + if (output_xpath_filter): + p = result.xpathNewContext() + xpath_result = p.xpathEval(output_xpath_filter) + if (xpath_result == []): + raise Exception("Could not apply processor %s."%processor) + + stylesheet_result = xpath_result + p.xpathFreeContext() + else: + stylesheet_result = result #style.saveResultToString(result) + + style.freeStylesheet() + #doc.freeDoc() + #result.freeDoc() + + return stylesheet_result + + def wrap_up(self, doc): + filepath = os.path.join(sfatables_config, 'processors', self.final_processor) + + if not os.path.exists(filepath): + raise Exception('Could not find final rule filter') + + styledoc = libxml2.parseFile(filepath) + style = libxslt.parseStylesheetDoc(styledoc) + result = style.applyStylesheet(doc, None) + stylesheet_result = result#style.saveResultToString(result) + style.freeStylesheet() + #doc.freeDoc() + #result.freeDoc() + + return stylesheet_result + + def match(self, rspec): + match_result = self.apply_processor('match',rspec,"//result/@verdict") + return (match_result[0].content=='True') + + def target(self, rspec): + target_result = self.apply_processor('target',rspec,None) + return target_result + + def add_rule_context_to_rspec(self, doc): + p = doc.xpathNewContext() + context = p.xpathEval("//RSpec") + if (not context): + raise Exception('Request is not an rspec') + else: + # Add the request context + matchNode = libxml2.newNode('match-context') + for match_argument in self.arguments['match']: + matchNode.addChild(match_argument) + + targetNode = libxml2.newNode('target-context') + for target_argument in self.arguments['target']: + targetNode.addChild(target_argument) + + context[0].addChild(matchNode) + context[0].addChild(targetNode) + p.xpathFreeContext() + + return doc + + def apply_interpreted(self, rspec): + rspec = self.add_rule_context_to_rspec(rspec) + # Interpreted + # + # output = + # if (match(match_args, rspec) + # then target(target_args, rspec) + # else rspec + + import pdb + if (self.match(rspec)): + return (True,self.wrap_up(self.target(rspec))) + else: + return (False,self.wrap_up(rspec)) + + + def apply_compiled(rspec): + # Not supported yet + return None + + def load_xml_extension (self, type, chain, rule_number): + filename = sfatables_config+"/"+chain+"/"+"sfatables-%d-%s"%(rule_number,type) + + self.xmldoc = libxml2.parseFile(filename) + p = self.xmldoc.xpathNewContext() + + context = p.xpathEval('//context/@select') + self.context[type] = context[0].content + + processor = p.xpathEval('//processor/@filename') + + context = p.xpathEval('//attributes/attribute[@terminal="yes"]') + if (context != []): + self.terminal = 1 + + self.processors[type] = processor[0].content + self.arguments[type] = p.xpathEval('//rule//argument[value!=""]') + + p.xpathFreeContext() + + + def __init__(self, chain=None, rule_number=None): + self.rule_number = None + self.chain = None + self.xmldoc = None + self.terminal = 0 + self.final_processor = '__sfatables_rule_wrap_up__.xsl' + + self.arguments = {'match':None,'target':None} + self.processors = {'match':None,'target':None} + self.context = {'match':None,'target':None} + + if (chain and rule_number): + self.load_xml_extension('match', chain, rule_number) + self.load_xml_extension('target',chain, rule_number) + self.rule_number = rule_number + self.chain = chain + return + + def free(self): + self.xmldoc.freeDoc() diff --git a/tests/client/README b/tests/client/README new file mode 100644 index 00000000..6d4ae3d9 --- /dev/null +++ b/tests/client/README @@ -0,0 +1 @@ +these files used to be in geniwrapper/cmdline diff --git a/tests/client/demoAggregate.sh b/tests/client/demoAggregate.sh new file mode 100644 index 00000000..ccb4b5f5 --- /dev/null +++ b/tests/client/demoAggregate.sh @@ -0,0 +1,56 @@ +#!/bin/bash + +export PATH=$PATH:/etc/sfa +source sfi_config +CWD=$(pwd) + +DEMO_AUTH='planetlab.us' +DEMO_PL_AUTH='planetlab.us.pl' + +echo XXXXX ------------------------------------------------ +echo XXXXX list contents of authority +echo XXXXX ------------------------------------------------ + +python $(CWD)/sfi.py list $DEMO_PL_AUTH + +echo XXXXX ------------------------------------------------ +echo XXXXX show contents of authority +echo XXXXX ------------------------------------------------ + +python $(CWD)/sfi.py show $DEMO_PL_AUTH + + +echo XXXXX ------------------------------------------------ +echo XXXXX show users authority +echo XXXXX ------------------------------------------------ + +python $(CWD)/sfi.py show $DEMO_PL_AUTH + +echo XXXXX ------------------------------------------------ +echo XXXXX list available node +rspec+ +echo XXXXX ------------------------------------------------ + +python $(CWD)/sfi.py nodes + +echo XXXXX ------------------------------------------------ +echo XXXXX list available node +dns+ +echo XXXXX ------------------------------------------------ + +python $(CWD)/sfi.py nodes dns + +echo XXXXX ------------------------------------------------ +echo XXXXX list slices at the aggregate +echo XXXXX ------------------------------------------------ + +python $(CWD)/sfi.py slices + + +echo XXXXX ------------------------------------------------ +echo XXXXX list resources being used by pl_tmack +echo XXXXX ------------------------------------------------ + +python $(CWD)/sfi.py resources planetlab.us.pl.tmack + + + + diff --git a/tests/client/testAggregate.py b/tests/client/testAggregate.py new file mode 100644 index 00000000..0f9e77e0 --- /dev/null +++ b/tests/client/testAggregate.py @@ -0,0 +1,32 @@ +from pprint import pprint + +from sfa.util.client import * +from sfa.trust.credential import * + +cred = Credential(filename = 'tmack.pl.sa.cred') +slicehrn = 'planetlab.us.pl.tmack' +print cred.get_privileges().save_to_string() + +r = GeniClient('https://128.112.139.120:12345', 'tmack.pkey', 'tmack.cert') +a = GeniClient('https://128.112.139.120:12346', 'tmack.pkey', 'tmack.cert') + +#pprint(r.list(cred, 'planetlab.us.princeton')) +pprint(a.get_policy(cred)) + +print "components at this aggregate" +components = a.list_components() +pprint(components) + +print "resources being used by %(slicehrn)s" % locals() +tmack_components = a.list_resources(cred, slicehrn) +pprint(tmack_components) + +#print "removing %(slicehrn)s from all nodes" % locals() +#a.delete_slice(cred, slicehrn) + +print "adding %(slicehrn)s back to its original nodes" % locals() +a.list_resources(cred, slicehrn) +a.create_slice(cred, slicehrn, components) +a.list_resources(cred, slicehrn) + + diff --git a/tests/client/testSfi.sh b/tests/client/testSfi.sh new file mode 100644 index 00000000..2d2d1802 --- /dev/null +++ b/tests/client/testSfi.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +export PATH=$PATH:/etc/sfa +source sfi_config +CWD=$(pwd) + +rm -f saved_record.* + +python $(CWD)/sfi.py show -o saved_record.$SFI_USER $SFI_USER +python $(CWD)/sfi.py list -o saved_record.$SFI_AUTH $SFI_AUTH + +#rm -f saved_record.* diff --git a/tests/client/testSfiDelegate.sh b/tests/client/testSfiDelegate.sh new file mode 100644 index 00000000..72f6057f --- /dev/null +++ b/tests/client/testSfiDelegate.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +export PATH=$PATH:/etc/sfa +source sfi_config +CWD=$(pwd) + +rm -f saved_record.* + +python $(CWD)/sfi.py show $SFI_USER +python $(CWD)/sfi.py delegate --user plc.arizona.gackscentral + +#rm -f saved_record.* diff --git a/tests/client/testSfiSliceRegister.sh b/tests/client/testSfiSliceRegister.sh new file mode 100644 index 00000000..0e651238 --- /dev/null +++ b/tests/client/testSfiSliceRegister.sh @@ -0,0 +1,84 @@ +#!/bin/bash + +export PATH=$PATH:/etc/sfa +source sfi_config +CWD=$(pwd) + +# private key to use when creating GID for new slice +export TEST_KEY=$CWD/testkey.pkey + +export TEST_SLICE_GID=$CWD/testslice.gid +export TEST_SLICE_RECORD=$CWD/testslice.record +export TEST_SLICE_HRN=$SFI_AUTH.testslice + +rm ~/.sfi/*.cred + +echo XXXXX ------------------------------------------------------------------- +echo XXXXX Removing the test slice. this will cause an error if the slice does +echo XXXXX not exist -- this error can be ignored +echo XXXXX ------------------------------------------------------------------- + +python $(CWD)/sfi.py remove --type slice $TEST_SLICE_HRN + +echo XXXXX ------------------------------------------------------------------- +echo XXXXX Creating a record for the test slice +echo XXXXX ------------------------------------------------------------------- + +python $(CWD)/editRecord.py --hrn $TEST_SLICE_HRN --pubkeyfile $TEST_KEY --type slice --addresearcher $SFI_USER --outfile $TEST_SLICE_RECORD + +echo XXXXX ------------------------------------------------------------------- +echo XXXXX Adding the test slice, $TEST_SLICE_HRN +echo XXXXX ------------------------------------------------------------------- + +python $(CWD)/sfi.py add $TEST_SLICE_RECORD + +echo XXXXX ------------------------------------------------------------------- +echo XXXXX The slice should have one researcher, $SFI_USER +echo XXXXX ------------------------------------------------------------------- + +python $(CWD)/sfi.py show $TEST_SLICE_HRN + +echo XXXXX ------------------------------------------------------------------- +echo XXXXX Adding $TEST_USER_2 to the slice researchers +echo XXXXX ------------------------------------------------------------------- + +python $(CWD)/editRecord.py --infile $TEST_SLICE_RECORD --outfile $TEST_SLICE_RECORD --addresearcher $TEST_USER_2 + +echo XXXXX ------------------------------------------------------------------- +echo XXXXX Updating the slice +echo XXXXX ------------------------------------------------------------------- + +python $(CWD)/sfi.py update $TEST_SLICE_RECORD + +echo XXXXX ------------------------------------------------------------------- +echo XXXXX The slice record should now have two users: $SFI_USER, $TEST_USER_2 +echo XXXXX ------------------------------------------------------------------- + +python $(CWD)/sfi.py show $TEST_SLICE_HRN + +echo XXXXX ------------------------------------------------------------------- +echo XXXXX Removing $SFI_USER from the slice researchers +echo XXXXX ------------------------------------------------------------------- + +python $(CWD)/editRecord.py --infile $TEST_SLICE_RECORD --outfile $TEST_SLICE_RECORD --delresearcher $SFI_USER + +echo XXXXX ------------------------------------------------------------------- +echo XXXXX Updating the slice +echo XXXXX ------------------------------------------------------------------- + +python $(CWD)/sfi.py update $TEST_SLICE_RECORD + +echo XXXXX ------------------------------------------------------------------- +echo XXXXX The slice record should now have one users: $TEST_USER_2 +echo XXXXX ------------------------------------------------------------------- + +python $(CWD)/sfi.py show $TEST_SLICE_HRN + +echo XXXXX ------------------------------------------------------------------- +echo XXXXX Updating the slice +echo XXXXX ... this verifies escalation from slice_cred to auth_cred +echo XXXXX ------------------------------------------------------------------- + +rm ~/.sfi/slice_testslice.cred +python $(CWD)/sfi.py update $TEST_SLICE_RECORD + diff --git a/tests/testAll.py b/tests/testAll.py new file mode 100755 index 00000000..9990ffce --- /dev/null +++ b/tests/testAll.py @@ -0,0 +1,12 @@ +from testRights import * +from testCert import * +from testGid import * +from testCred import * +from testKeypair import * +from testMisc import * +from testHierarchy import * +from testRecord import * +from testTable import * + +if __name__ == "__main__": + unittest.main() diff --git a/tests/testCert.py b/tests/testCert.py new file mode 100755 index 00000000..0a6a90c4 --- /dev/null +++ b/tests/testCert.py @@ -0,0 +1,204 @@ +import unittest +import xmlrpclib +from sfa.trust.certificate import Certificate, Keypair + +class TestCert(unittest.TestCase): + def setUp(self): + pass + + def testCreate(self): + cert = Certificate() + cert.create() + + def testSetAndGetSubject(self): + cert = Certificate() + cert.create() + cert.set_subject("test") + subj = cert.get_subject() + self.assertEqual(subj, "test") + + def testSign(self): + cert = Certificate(subject="test") + + # create an issuer and sign the certificate + issuerKey = Keypair(create=True) + issuerSubject = "testissuer" + cert.set_issuer(issuerKey, issuerSubject) + cert.sign() + + def testAddExtension(self): + cert = Certificate(subject="test") + cert.add_extension("subjectAltName", 0, "URI:http://foovalue") + + self.assertEqual(cert.get_extension("subjectAltName"), + "URI:http://foovalue") + + def testSetData(self): + cert = Certificate(subject="test") + data = "this is a test" + cert.set_data(data) + self.assertEqual(cert.get_data(), data) + + # try something a bit more complicated, like an xmlrpc encoding of + # some parameters + cert = Certificate(subject="test") + data = xmlrpclib.dumps((1, "foo", ["a", "b"], {"c": "d", "e": "f"}, True)) + cert.set_data(data) + self.assertEqual(cert.get_data(), data) + + + def testSaveAndLoadString(self): + cert = Certificate(subject="test") + cert.add_extension("subjectAltName", 0, "URI:http://foovalue") + + # create an issuer and sign the certificate + issuerKey = Keypair(create=True) + issuerSubject = "testissuer" + cert.set_issuer(issuerKey, issuerSubject) + cert.sign() + + certstr = cert.save_to_string() + + #print certstr + + cert2 = Certificate() + cert2.load_from_string(certstr) + + # read back the subject and make sure it is correct + subj = cert2.get_subject() + self.assertEqual(subj, "test") + + # read back the issuer and make sure it is correct + issuerName = cert2.get_issuer() + self.assertEqual(issuerName, "testissuer") + + # read back the extension and make sure it is correct + self.assertEqual(cert2.get_extension("subjectAltName"), + "URI:http://foovalue") + + def testLongExtension(self): + cert = Certificate(subject="test") + + # should produce something around 256 KB + veryLongString = "URI:http://" + shortString = "" + for i in range(1, 80): + shortString = shortString + "abcdefghijklmnopqrstuvwxyz012345" + for i in range(1, 100): + veryLongString = veryLongString + shortString + str(i) + + cert.add_extension("subjectAltName", 0, veryLongString) + + # create an issuer and sign the certificate + issuerKey = Keypair(create=True) + issuerSubject = "testissuer" + cert.set_issuer(issuerKey, issuerSubject) + cert.sign() + + certstr = cert.save_to_string() + + cert2 = Certificate() + cert2.load_from_string(certstr) + val = cert2.get_extension("subjectAltName") + self.assertEqual(val, veryLongString) + + def testVerify(self): + cert = Certificate(subject="test") + + # create an issuer and sign the certificate + issuerKey = Keypair(create=True) + issuerSubject = "testissuer" + cert.set_issuer(issuerKey, issuerSubject) + cert.sign() + + result = cert.verify(issuerKey) + self.assert_(result) + + # create another key + issuerKey2 = Keypair(create=True) + issuerSubject2 = "wrongissuer" + + # and make sure it doesn't verify + result = cert.verify(issuerKey2) + self.assert_(not result) + + # load the cert from a string, and verify again + cert2 = Certificate(string = cert.save_to_string()) + result = cert2.verify(issuerKey) + self.assert_(result) + result = cert2.verify(issuerKey2) + self.assert_(not result) + + def test_is_signed_by(self): + cert1 = Certificate(subject="one") + + key1 = Keypair() + key1.create() + cert1.set_pubkey(key1) + + # create an issuer and sign the certificate + issuerKey = Keypair(create=True) + issuerSubject = "testissuer" + cert1.set_issuer(issuerKey, issuerSubject) + cert1.sign() + + cert2 = Certificate(subject="two") + + key2 = Keypair(create=True) + cert2.set_pubkey(key2) + + cert2.set_issuer(key1, cert=cert1) + + # cert2 is signed by cert1 + self.assert_(cert2.is_signed_by_cert(cert1)) + # cert1 is not signed by cert2 + self.assert_(not cert1.is_signed_by_cert(cert2)) + + def test_parents(self): + cert_root = Certificate(subject="root") + key_root = Keypair(create=True) + cert_root.set_pubkey(key_root) + cert_root.set_issuer(key_root, "root") + cert_root.sign() + + cert1 = Certificate(subject="one") + key1 = Keypair(create=True) + cert1.set_pubkey(key1) + cert1.set_issuer(key_root, "root") + cert1.sign() + + cert2 = Certificate(subject="two") + key2 = Keypair(create=True) + cert2.set_pubkey(key2) + cert2.set_issuer(key1, cert=cert1) + cert2.set_parent(cert1) + cert2.sign() + + cert3 = Certificate(subject="three") + key3 = Keypair(create=True) + cert3.set_pubkey(key3) + cert3.set_issuer(key2, cert=cert2) + cert3.set_parent(cert2) + cert3.sign() + + self.assert_(cert1.verify(key_root)) + self.assert_(cert2.is_signed_by_cert(cert1)) + self.assert_(cert3.is_signed_by_cert(cert2)) + + cert3.verify_chain([cert_root]) + + # now save the chain to a string and load it into a new certificate + str_chain = cert3.save_to_string(save_parents=True) + cert4 = Certificate(string = str_chain) + + # verify the newly loaded chain still verifies + cert4.verify_chain([cert_root]) + + # verify the parentage + self.assertEqual(cert4.get_parent().get_subject(), "two") + self.assertEqual(cert4.get_parent().get_parent().get_subject(), "one") + + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/testCred.py b/tests/testCred.py new file mode 100755 index 00000000..32fac4af --- /dev/null +++ b/tests/testCred.py @@ -0,0 +1,173 @@ +import unittest +from sfa.trust.credential import * +from sfa.trust.rights import * +from sfa.trust.gid import * +from sfa.trust.certificate import * + +class TestCred(unittest.TestCase): + def setUp(self): + pass + + def testCreate(self): + cred = Credential(create=True) + + def testDefaults(self): + cred = Credential(subject="testCredential") + + self.assertEqual(cred.get_gid_caller(), None) + self.assertEqual(cred.get_gid_object(), None) + + def testLoadSave(self): + cred = Credential(subject="testCredential") + + gidCaller = GID(subject="caller", uuid=create_uuid(), hrn="foo.caller") + gidObject = GID(subject="object", uuid=create_uuid(), hrn="foo.object") + lifeTime = 12345 + delegate = True + rights = "embed:1,bind:1" + + cred.set_gid_caller(gidCaller) + self.assertEqual(cred.get_gid_caller().get_subject(), gidCaller.get_subject()) + + cred.set_gid_object(gidObject) + self.assertEqual(cred.get_gid_object().get_subject(), gidObject.get_subject()) + + cred.set_lifetime(lifeTime) + + cred.set_privileges(rights) + self.assertEqual(cred.get_privileges().save_to_string(), rights) + + cred.get_privileges().delegate_all_privileges(delegate) + + cred.encode() + + cred_str = cred.save_to_string() + + # re-load the credential from a string and make sure its fields are + # intact + cred2 = Credential(string = cred_str) + self.assertEqual(cred2.get_gid_caller().get_subject(), gidCaller.get_subject()) + self.assertEqual(cred2.get_gid_object().get_subject(), gidObject.get_subject()) + self.assertEqual(cred2.get_privileges().get_all_delegate(), delegate) + self.assertEqual(cred2.get_privileges().save_to_string(), rights) + + + + def createSignedGID(self, subject, urn, issuer_pkey = None, issuer_gid = None): + gid = GID(subject=subject, uuid=1, urn=urn) + keys = Keypair(create=True) + gid.set_pubkey(keys) + if issuer_pkey: + gid.set_issuer(issuer_pkey, str(issuer_gid.get_issuer())) + else: + gid.set_issuer(keys, subject) + + gid.encode() + gid.sign() + return gid, keys + + + + + def testDelegationAndVerification(self): + gidAuthority, keys = self.createSignedGID("site", "urn:publicid:IDN+plc+authority+site") + gidCaller, ckeys = self.createSignedGID("site.foo", "urn:publicid:IDN+plc:site+user+foo", + keys, gidAuthority) + gidObject, _ = self.createSignedGID("site.slice", "urn:publicid:IDN+plc:site+slice+bar_slice", + keys, gidAuthority) + gidDelegatee, _ = self.createSignedGID("site.delegatee", "urn:publicid:IDN+plc:site+user+delegatee", + keys, gidAuthority) + + cred = Credential() + cred.set_gid_caller(gidCaller) + cred.set_gid_object(gidObject) + cred.set_lifetime(3600) + cred.set_privileges("embed:1, bind:1") + cred.encode() + + gidAuthority.save_to_file("/tmp/auth_gid") + keys.save_to_file("/tmp/auth_key") + cred.set_issuer_keys("/tmp/auth_key", "/tmp/auth_gid") + cred.sign() + + + cred.verify(['/tmp/auth_gid']) + + # Test copying + cred2 = Credential(string=cred.save_to_string()) + cred2.verify(['/tmp/auth_gid']) + + + # Test delegation + delegated = Credential() + delegated.set_gid_caller(gidDelegatee) + delegated.set_gid_object(gidObject) + delegated.set_parent(cred) + delegated.set_lifetime(600) + delegated.set_privileges("embed:1, bind:1") + gidCaller.save_to_file("/tmp/caller_gid") + ckeys.save_to_file("/tmp/caller_pkey") + + delegated.set_issuer_keys("/tmp/caller_pkey", "/tmp/caller_gid") + + delegated.encode() + + delegated.sign() + + # This should verify + delegated.verify(['/tmp/auth_gid']) + + backup = Credential(string=delegated.get_xml()) + + # Test that verify catches an incorrect lifetime + delegated.set_lifetime(6000) + delegated.encode() + delegated.sign() + try: + delegated.verify(['/tmp/auth_gid']) + assert(1==0) + except CredentialNotVerifiable: + pass + + # Test that verify catches an incorrect signer + delegated = Credential(string=backup.get_xml()) + delegated.set_issuer_keys("/tmp/auth_key", "/tmp/auth_gid") + delegated.encode() + delegated.sign() + + try: + delegated.verify(['/tmp/auth_gid']) + assert(1==0) + except CredentialNotVerifiable: + pass + + + # Test that verify catches a changed gid + delegated = Credential(string=backup.get_xml()) + delegated.set_gid_object(delegated.get_gid_caller()) + delegated.encode() + delegated.sign() + + try: + delegated.verify(['/tmp/auth_gid']) + assert(1==0) + except CredentialNotVerifiable: + pass + + + # Test that verify catches a credential with the wrong authority for the object + test = Credential(string=cred.get_xml()) + test.set_issuer_keys("/tmp/caller_pkey", "/tmp/caller_gid") + test.encode() + test.sign() + + try: + test.verify(['/tmp/auth_gid']) + assert(1==0) + except CredentialNotVerifiable: + pass + + # Test that * gets translated properly + +if __name__ == "__main__": + unittest.main() diff --git a/tests/testGid.py b/tests/testGid.py new file mode 100755 index 00000000..85f92407 --- /dev/null +++ b/tests/testGid.py @@ -0,0 +1,63 @@ +import unittest +import xmlrpclib +from sfa.trust.certificate import Keypair +from sfa.trust.gid import * + +class TestGid(unittest.TestCase): + def setUp(self): + pass + + def testSetGetHrn(self): + gid = GID(subject="test") + hrn = "test.hrn" + + gid.set_hrn(hrn) + self.assertEqual(gid.get_hrn(), hrn) + + def testSetGetUuid(self): + gid = GID(subject="test") + u = uuid.uuid4().int + + gid.set_uuid(u) + self.assertEqual(gid.get_uuid(), u) + + def testEncodeDecode(self): + gid = GID(subject="test") + u = uuid.uuid4().int + hrn = "test.hrn" + + gid.set_uuid(u) + gid.set_hrn(hrn) + + gid.encode() + gid.decode() + + self.assertEqual(gid.get_hrn(), hrn) + self.assertEqual(gid.get_uuid(), u) + + def testSaveAndLoadString(self): + gid = GID(subject="test") + + u = uuid.uuid4().int + hrn = "test.hrn" + + gid.set_uuid(u) + gid.set_hrn(hrn) + + # create an issuer and sign the certificate + issuerKey = Keypair(create = True) + issuerSubject = "testissuer" + gid.set_issuer(issuerKey, issuerSubject) + gid.sign() + + certstr = gid.save_to_string() + + #print certstr + + gid2 = GID(string = certstr) + + self.assertEqual(gid.get_hrn(), hrn) + self.assertEqual(gid.get_uuid(), u) + +if __name__ == "__main__": + unittest.main() diff --git a/tests/testHierarchy.py b/tests/testHierarchy.py new file mode 100755 index 00000000..723c6db5 --- /dev/null +++ b/tests/testHierarchy.py @@ -0,0 +1,51 @@ +import unittest +import os +from sfa.util.faults import * +from sfa.trust.hierarchy import * +from sfa.util.config import * + +BASEDIR = "test_hierarchy" +PURGE_BASEDIR = "rm -rf test_hierarchy" + +class TestHierarchy(unittest.TestCase): + def setUp(self): + os.system(PURGE_BASEDIR) + pass + + def testInit(self): + h = Hierarchy(BASEDIR) + + def testGetAuthInfo(self): + h = Hierarchy(BASEDIR) + + name = "planetlab.us.arizona.stork" + + self.assertEqual(h.auth_exists(name), False) + + self.assertRaises(MissingAuthority, h.get_auth_info, name) + + h.create_auth(name, create_parents=True) + auth_info = h.get_auth_info(name) + self.assert_(auth_info) + + gid = auth_info.get_gid_object() + self.assert_(gid) + self.assertEqual(gid.get_subject(), name) + + pubkey = auth_info.get_pkey_object() + self.assert_(gid) + + # try to get it again, make sure it's still there + auth_info2 = h.get_auth_info(name) + self.assert_(auth_info2) + + gid = auth_info2.get_gid_object() + self.assert_(gid) + self.assertEqual(gid.get_subject(), name) + + pubkey = auth_info2.get_pkey_object() + self.assert_(gid) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/testInterfaces.py b/tests/testInterfaces.py new file mode 100755 index 00000000..c43da2c7 --- /dev/null +++ b/tests/testInterfaces.py @@ -0,0 +1,321 @@ +#!/usr/bin/python +import sys +import os +import random +import string +import unittest +import sfa.util.xmlrpcprotocol as xmlrpc +from unittest import TestCase +from optparse import OptionParser +from sfa.util.xmlrpcprotocol import ServerException +from sfa.util.namespace import * +from sfa.util.config import * +from sfa.trust.certificate import * +from sfa.trust.credential import * +from sfa.util.sfaticket import * +from sfa.util.rspec import * +from sfa.client import sfi + +def random_string(size): + return "".join(random.sample(string.letters, size)) + +class Client: + registry = None + aggregate = None + sm = None + cm = None + key = None + cert = None + credential = None + type = None + def __init__(self, options): + try: self.config = config = Config(options.config_file) + except: + print "failed to read config_file %s" % options.config_file + sys.exit(1) + key_path = os.path.dirname(options.config_file) + user_name = self.config.SFI_USER.split('.')[-1:][0] + key_file = key_path + os.sep + user_name + '.pkey' + cert_file = key_path + os.sep + user_name + '.cert' + self.key = Keypair(filename=key_file) + self.cert = Certificate(subject=self.config.SFI_USER) + self.cert.set_pubkey(self.key) + self.cert.set_issuer(self.key, self.config.SFI_USER) + self.cert.sign() + self.cert.save_to_file(cert_file) + SFI_AGGREGATE = config.SFI_SM.replace('12347', '12346') + SFI_CM = 'http://' + options.cm_host + ':12346' + self.registry = xmlrpc.get_server(config.SFI_REGISTRY, key_file, cert_file) + self.aggregate = xmlrpc.get_server(SFI_AGGREGATE, key_file, cert_file) + self.sm = xmlrpc.get_server(config.SFI_SM, key_file, cert_file) + self.cm = xmlrpc.get_server(SFI_CM, key_file, cert_file) + self.hrn = config.SFI_USER + # XX defaulting to user, but this should be configurable so we can + # test from components persepctive + self.type = 'user' + self.credential = self.get_credential(self.hrn) + + def get_credential(self, hrn = None, type = 'user'): + if not hrn: hrn = self.hrn + if hrn == self.hrn: + cert = self.cert.save_to_string(save_parents=True) + request_hash = self.key.compute_hash([cert, 'user', hrn]) + credential = self.registry.get_self_credential(cert, type, hrn, request_hash) + return credential + else: + if not self.credential: + self.credential = self.get_credential(self.hrn, 'user') + return self.registry.get_credential(self.credential, type, hrn) + +class BasicTestCase(unittest.TestCase): + def __init__(self, testname, client, test_slice=None): + unittest.TestCase.__init__(self, testname) + self.client = client + self.slice = test_slice + + def setUp(self): + self.registry = self.client.registry + self.aggregate = self.client.aggregate + self.sm = self.client.sm + self.cm = self.client.cm + self.credential = self.client.credential + self.hrn = self.client.hrn + self.type = self.client.type + +# Registry tests +class RegistryTest(BasicTestCase): + + def setUp(self): + """ + Make sure test records dont exsit + """ + BasicTestCase.setUp(self) + + def testGetSelfCredential(self): + cred = self.client.get_credential() + # this will raise an openssl error if the credential string isnt valid + Credential(string=cred) + + def testRegister(self): + authority = get_authority(self.hrn) + auth_cred = self.client.get_credential(authority, 'authority') + auth_record = {'hrn': '.'.join([authority, random_string(10).lower()]), + 'type': 'authority'} + node_record = {'hrn': '.'.join([authority, random_string(10)]), + 'type': 'node', + 'hostname': random_string(6) + '.' + random_string(6)} + slice_record = {'hrn': '.'.join([authority, random_string(10)]), + 'type': 'slice', 'researcher': [self.hrn]} + user_record = {'hrn': '.'.join([authority, random_string(10)]), + 'type': 'user', + 'email': random_string(6) +'@'+ random_string(5) +'.'+ random_string(3), + 'first_name': random_string(7), + 'last_name': random_string(7)} + + all_records = [auth_record, node_record, slice_record, user_record] + for record in all_records: + try: + self.registry.register(auth_cred, record) + self.registry.resolve(self.credential, record['hrn']) + except: + raise + finally: + try: self.registry.remove(auth_cred, record['type'], record['hrn']) + except: pass + + + def testRegisterPeerObject(self): + assert True + + def testUpdate(self): + authority = get_authority(self.hrn) + auth_cred = self.client.get_credential(authority, 'authority') + records = self.registry.resolve(self.credential, self.hrn) + if not records: assert False + record = records[0] + self.registry.update(auth_cred, record) + + def testResolve(self): + authority = get_authority(self.hrn) + self.registry.resolve(self.credential, self.hrn) + + def testRemove(self): + authority = get_authority(self.hrn) + auth_cred = self.client.get_credential(authority, 'authority') + record = {'hrn': ".".join([authority, random_string(10)]), + 'type': 'slice'} + self.registry.register(auth_cred, record) + self.registry.remove(auth_cred, record['type'], record['hrn']) + # should generate an exception + try: + self.registry.resolve(self.credential, record['hrn']) + assert False + except: + assert True + + def testRemovePeerObject(self): + assert True + + def testList(self): + authority = get_authority(self.client.hrn) + self.registry.list(self.credential, authority) + + def testGetRegistries(self): + self.registry.get_registries(self.credential) + + def testGetAggregates(self): + self.registry.get_aggregates(self.credential) + + def testGetTrustedCerts(self): + # this should fail unless we are a node + callable = self.registry.get_trusted_certs + server_exception = False + try: + callable(self.credential) + except ServerException: + server_exception = True + finally: + if self.type in ['user'] and not server_exception: + assert False + + +class AggregateTest(BasicTestCase): + def setUp(self): + BasicTestCase.setUp(self) + + def testGetSlices(self): + self.aggregate.get_slices(self.credential) + + def testGetResources(self): + # available resources + agg_rspec = self.aggregate.get_resources(self.credential) + # resources used by a slice + slice_rspec = self.aggregate.get_resources(self.credential, self.slice['hrn']) + # will raise an exception if the rspec isnt valid + RSpec(xml=agg_rspec) + RSpec(xml=slice_rspec) + + def testCreateSlice(self): + # get availabel resources + rspec = self.aggregate.get_resources(self.credential) + slice_credential = self.client.get_credential(self.slice['hrn'], 'slice') + self.aggregate.create_slice(slice_credential, self.slice['hrn'], rspec) + + def testDeleteSlice(self): + slice_credential = self.client.get_credential(self.slice['hrn'], 'slice') + self.aggregate.delete_slice(slice_credential, self.slice['hrn']) + + def testGetTicket(self): + slice_credential = self.client.get_credential(self.slice['hrn'], 'slice') + rspec = self.aggregate.get_resources(self.credential) + ticket = self.aggregate.get_ticket(slice_credential, self.slice['hrn'], rspec) + # will raise an exception if the ticket inst valid + SfaTicket(string=ticket) + +class SlicemgrTest(AggregateTest): + def setUp(self): + AggregateTest.setUp(self) + + # force calls to go through slice manager + self.aggregate = self.sm + + # get the slice credential + + +class ComponentTest(BasicTestCase): + def setUp(self): + BasicTestCase.setUp(self) + self.slice_cred = self.client.get_credential(self.slice['hrn'], 'slice') + + def testStartSlice(self): + self.cm.start_slice(self.slice_cred, self.slice['hrn']) + + def testStopSlice(self): + self.cm.stop_slice(self.slice_cred, self.slice['hrn']) + + def testDeleteSlice(self): + self.cm.delete_slice(self.slice_cred, self.slice['hrn']) + + def testRestartSlice(self): + self.cm.restart_slice(self.slice_cred, self.slice['hrn']) + + def testGetSlices(self): + self.cm.get_slices(self.slice_cred, self.slice['hrn']) + + def testRedeemTicket(self): + rspec = self.aggregate.get_resources(self.credential) + ticket = self.aggregate.get_ticket(slice_cred, self.slice['hrn'], rspec) + self.cm.redeem_ticket(slice_cred, ticket) + + +def test_names(testcase): + return [name for name in dir(testcase) if name.startswith('test')] + +def create_slice(client): + # register a slice that will be used for some test + authority = get_authority(client.hrn) + auth_cred = client.get_credential(authority, 'authority') + slice_record = {'hrn': ".".join([authority, random_string(10)]), + 'type': 'slice', 'researcher': [client.hrn]} + client.registry.register(auth_cred, slice_record) + return slice_record + +def delete_slice(cleint, slice): + authority = get_authority(client.hrn) + auth_cred = client.get_credential(authority, 'authority') + if slice: + client.registry.remove(auth_cred, 'slice', slice['hrn']) + +if __name__ == '__main__': + + args = sys.argv + prog_name = args[0] + default_config_dir = os.path.expanduser('~/.sfi/sfi_config') + default_cm = "echo.cs.princeton.edu" + parser = OptionParser(usage="%(prog_name)s [options]" % locals()) + parser.add_option('-f', '--config_file', dest='config_file', default=default_config_dir, + help='config file. default is %s' % default_config_dir) + parser.add_option('-r', '--registry', dest='registry', action='store_true', + default=False, help='run registry tests') + parser.add_option('-a', '--aggregate', dest='aggregate', action='store_true', + default=False, help='run aggregate tests') + parser.add_option('-s', '--slicemgr', dest='slicemgr', action='store_true', + default=False, help='run slicemgr tests') + parser.add_option('-c', '--component', dest='component', action='store_true', + default=False, help='run component tests') + parser.add_option('-d', '--cm_host', dest='cm_host', default=default_cm, + help='dns name of component to test. default is %s' % default_cm) + parser.add_option('-A', '--all', dest='all', action='store_true', + default=False, help='run component tests') + + options, args = parser.parse_args() + suite = unittest.TestSuite() + client = Client(options) + test_slice = {} + + # create the test slice if necessary + if options.all or options.slicemgr or options.aggregate \ + or options.component: + test_slice = create_slice(client) + + if options.registry or options.all: + for name in test_names(RegistryTest): + suite.addTest(RegistryTest(name, client)) + + if options.aggregate or options.all: + for name in test_names(AggregateTest): + suite.addTest(AggregateTest(name, client, test_slice)) + + if options.slicemgr or options.all: + for name in test_names(SlicemgrTest): + suite.addTest(SlicemgrTest(name, client, test_slice)) + + if options.component or options.all: + for name in test_names(ComponentTest): + suite.addTest(ComponentTest(name, client, test_slice)) + + # run tests + unittest.TextTestRunner(verbosity=2).run(suite) + + # remove teset slice + delete_slice(client, test_slice) diff --git a/tests/testKeypair.py b/tests/testKeypair.py new file mode 100755 index 00000000..ebe1edec --- /dev/null +++ b/tests/testKeypair.py @@ -0,0 +1,53 @@ +#!/usr/bin/python +import sys +sys.path.append('..') + +import unittest +import xmlrpclib +import base64 +from sfa.trust.certificate import Keypair + +class TestKeypair(unittest.TestCase): + def setUp(self): + pass + + def testCreate(self): + k = Keypair() + k.create() + + def testSaveLoadFile(self): + k = Keypair() + k.create() + + k.save_to_file("test.key") + + k2 = Keypair() + k2.load_from_file("test.key") + + self.assertEqual(k.as_pem(), k2.as_pem()) + + def test_get_m2_pkey(self): + k = Keypair() + k.create() + + m2 = k.get_m2_pkey() + self.assert_(m2 != None) + + def test_get_openssl_pkey(self): + k = Keypair() + k.create() + + pk = k.get_openssl_pkey() + self.assert_(pk != None) + + def test_sign_verify(self): + k = Keypair() + k.create() + + data = "this is a test" + sig = k.sign_string(data) + + print k.verify_string(data, sig) + +if __name__ == "__main__": + unittest.main() diff --git a/tests/testMisc.py b/tests/testMisc.py new file mode 100755 index 00000000..831d9495 --- /dev/null +++ b/tests/testMisc.py @@ -0,0 +1,18 @@ +import unittest +from sfa.util.misc import * + +class TestMisc(unittest.TestCase): + def setUp(self): + pass + + def testGetLeft(self): + self.assertEqual(get_leaf("foo"), "foo") + self.assertEqual(get_leaf("foo.bar"), "bar") + + def testGetAuthority(self): + self.assertEqual(get_authority("foo"), "") + self.assertEqual(get_authority("foo.bar"), "foo") + self.assertEqual(get_authority("foo.bar.x"), "foo.bar") + +if __name__ == "__main__": + unittest.main() diff --git a/tests/testRecord.py b/tests/testRecord.py new file mode 100755 index 00000000..081a9bf9 --- /dev/null +++ b/tests/testRecord.py @@ -0,0 +1,15 @@ +import unittest +import xmlrpclib +from sfa.trust.gid import * +from sfa.trust.config import * +from sfa.util.record import * + +class TestRecord(unittest.TestCase): + def setUp(self): + pass + + def testCreate(self): + r = SfaRecord() + +if __name__ == "__main__": + unittest.main() diff --git a/tests/testRights.py b/tests/testRights.py new file mode 100755 index 00000000..a67a25ff --- /dev/null +++ b/tests/testRights.py @@ -0,0 +1,86 @@ +import unittest +from sfa.trust.rights import * + +class TestRight(unittest.TestCase): + def setUp(self): + pass + + def testRightInit(self): + right = Right("embed") + self.assertEqual(right.kind, "embed") + + def testRightCanPerform(self): + right = Right("embed") + self.assert_(right.can_perform("getticket")) + self.assert_(not right.can_perform("resolve")) + + def testIsSuperset(self): + pright = Right("sa") + cright = Right("embed") + self.assert_(pright.is_superset(cright)) + self.assert_(not cright.is_superset(pright)) + + pright = Right("embed") + cright = Right("embed") + self.assert_(pright.is_superset(cright)) + self.assert_(cright.is_superset(pright)) + + pright = Right("control") + cright = Right("embed") + self.assert_(not pright.is_superset(cright)) + self.assert_(not cright.is_superset(pright)) + +class TestRightList(unittest.TestCase): + def setUp(self): + pass + + def testInit(self): + # create a blank right list + rightList = RightList() + + # create a right list with "embed" in it + rightList = RightList(string="embed") + + def testAsString(self): + rightList = RightList() + self.assertEqual(rightList.save_to_string(), "") + + rightList = RightList(string="embed") + self.assertEqual(rightList.save_to_string(), "embed") + + rightList = RightList(string="embed,resolve") + self.assertEqual(rightList.save_to_string(), "embed,resolve") + + def testCanPerform(self): + rightList = RightList(string="embed") + self.assert_(rightList.can_perform("getticket")) + self.assert_(not rightList.can_perform("resolve")) + + rightList = RightList(string="embed,resolve") + self.assert_(rightList.can_perform("getticket")) + self.assert_(rightList.can_perform("resolve")) + + def testIsSuperset(self): + pRightList = RightList(string="sa") + cRightList = RightList(string="embed") + self.assert_(pRightList.is_superset(cRightList)) + self.assert_(not cRightList.is_superset(pRightList)) + + pRightList = RightList(string="embed") + cRightList = RightList(string="embed") + self.assert_(pRightList.is_superset(cRightList)) + self.assert_(cRightList.is_superset(pRightList)) + + pRightList = RightList(string="control") + cRightList = RightList(string="embed") + self.assert_(not pRightList.is_superset(cRightList)) + self.assert_(not cRightList.is_superset(pRightList)) + + pRightList = RightList(string="control,sa") + cRightList = RightList(string="embed") + self.assert_(pRightList.is_superset(cRightList)) + self.assert_(not cRightList.is_superset(pRightList)) + + +if __name__ == "__main__": + unittest.main() diff --git a/wsdl/Makefile b/wsdl/Makefile new file mode 100644 index 00000000..1abba026 --- /dev/null +++ b/wsdl/Makefile @@ -0,0 +1,49 @@ +# attempt to update at build-time + +WSDLS = sfa.wsdl registry.wsdl slice-manager.wsdl aggregate.wsdl + +all: $(WSDLS) + +# temporary: turn off wsdl generation as it is failing +#TEMPORARY_OFF = yes + +ifdef TEMPORARY_OFF +registry.wsdl slice-manager.wsdl aggregate.wsdl sfa.wsdl: + touch $@ +else +registry.wsdl: + PYTHONPATH=../ ./sfa2wsdl.py --registry > $@ + +slice-manager.wsdl: + PYTHONPATH=../ ./sfa2wsdl.py --slice-manager > $@ + +aggregate.wsdl: + PYTHONPATH=../ ./sfa2wsdl.py --aggregate > $@ + +sfa.wsdl: + PYTHONPATH=../ ./sfa2wsdl.py --registry --slice-manager --aggregate > $@ +endif + +#################### install +# DESTDIR set but the calling Makefile in ../ +INSTALL_PATH=/var/www/html/wsdl +INSTALLED=$(foreach wsdl,$(WSDLS),$(DESTDIR)$(INSTALL_PATH)/$(wsdl)) + +install: $(INSTALLED) + +$(DESTDIR)$(INSTALL_PATH): + install -d -m 0755 $(DESTDIR)$(INSTALL_PATH) + +$(DESTDIR)$(INSTALL_PATH)/%: wsdl=$(notdir $@) +$(DESTDIR)$(INSTALL_PATH)/%: $(DESTDIR)$(INSTALL_PATH) % + install -c -m 0755 $(wsdl) $@ + +#################### clean +clean: + rm -f *wsdl + +install-clean: + rm -f $(INSTALLED) + +.PHONY: all clean install install-clean + diff --git a/wsdl/apistub.py b/wsdl/apistub.py new file mode 100644 index 00000000..198883f0 --- /dev/null +++ b/wsdl/apistub.py @@ -0,0 +1,12 @@ +import sfa.methods + + +methods = sfa.methods.all + +def callable(method): + classname = method.split(".")[-1] + module = __import__("sfa.methods." + method, globals(), locals(), [classname]) + callablemethod = getattr(module, classname)(None) + return getattr(module, classname)(None) + + diff --git a/wsdl/globals.py b/wsdl/globals.py new file mode 100644 index 00000000..36c1042f --- /dev/null +++ b/wsdl/globals.py @@ -0,0 +1,4 @@ +#!/usr/bin/python + +plc_ns="http://www.planet-lab.org/sfa" +version="2009/07" diff --git a/wsdl/sfa2wsdl.py b/wsdl/sfa2wsdl.py new file mode 100755 index 00000000..f3a6b934 --- /dev/null +++ b/wsdl/sfa2wsdl.py @@ -0,0 +1,342 @@ +#!/usr/bin/python +# +# Sapan Bhatia +# +# Generates a WSDL for sfa + + +import os, sys +import time +import pdb +import xml.dom.minidom +import xml.dom.ext +import apistub +import inspect + +from types import * +from optparse import OptionParser + +from sfa.util.parameter import Parameter,Mixed + +import globals + +class SoapError(Exception): + def __init__(self, value): + self.value = value + def __str__(self): + return repr(self.value) +try: + set +except NameError: + from sets import Set + set = Set + +class WSDLGen: + complex_types = {} + services = {} + num_types = 0 + wsdl = None + types = None + + def __init__(self, interface_options): + self.interface_options = interface_options + + def filter_argname(self,argname): + if (not self.interface_options.lite or (argname!="cred")): + if (argname.find('(') != -1): + # The name has documentation in it :-/ + brackright = argname.split('(')[1] + if (brackright.find(')') == -1): + raise Exception("Please fix the argument %s to be well-formed.\n"%argname) + inbrack = brackright.split(')')[0] + argname = inbrack + return argname + + def fold_complex_type_names(self,acc, arg): + name = arg.doc + if (type(acc)==list): + acc.append(name) + else: + p_i_b = acc.doc + acc = [p_i_b,name] + return acc + + def fold_complex_type(self,acc, arg): + name = self.name_complex_type(arg) + self.complex_types[arg]=name + if (type(acc)==list): + acc.append(name) + else: + p_i_b = self.name_complex_type(acc) + acc = [p_i_b,name] + return acc + + def name_complex_type(self,arg): + + types_section = self.types.getElementsByTagName("xsd:schema")[0] + + #pdb.set_trace() + if (isinstance(arg, Mixed)): + inner_types = reduce(self.fold_complex_type, arg) + inner_names = reduce(self.fold_complex_type_names, arg) + if (inner_types[-1]=="none"): + inner_types=inner_types[:-1] + min_args = 0 + else: + min_args = 1 + + self.num_types=self.num_types+1 + type_name = "Type%d"%self.num_types + complex_type = types_section.appendChild(self.types.createElement("xsd:complexType")) + complex_type.setAttribute("name", type_name) + + choice = complex_type.appendChild(self.types.createElement("xsd:choice")) + for n,t in zip(inner_names,inner_types): + element = choice.appendChild(self.types.createElement("element")) + n = self.filter_argname(n) + element.setAttribute("name", n) + element.setAttribute("type", "%s"%t) + element.setAttribute("minOccurs","%d"%min_args) + return "xsdl:%s"%type_name + elif (isinstance(arg, Parameter)): + return (self.name_simple_type(arg.type)) + elif type(arg) == ListType or type(arg) == TupleType: + inner_type = self.name_complex_type(arg[0]) + self.num_types=self.num_types+1 + type_name = "Type%d"%self.num_types + complex_type = types_section.appendChild(self.types.createElement("xsd:complexType")) + type_name = self.filter_argname(type_name) + complex_type.setAttribute("name", type_name) + complex_content = complex_type.appendChild(self.types.createElement("xsd:complexContent")) + restriction = complex_content.appendChild(self.types.createElement("xsd:restriction")) + restriction.setAttribute("base","soapenc:Array") + attribute = restriction.appendChild(self.types.createElement("xsd:attribute")) + attribute.setAttribute("ref","soapenc:arrayType") + attribute.setAttribute("wsdl:arrayType","%s[]"%inner_type) + + return "xsdl:%s"%type_name + + elif type(arg) == DictType or arg == DictType or (inspect.isclass(arg) and issubclass(arg, dict)): + self.num_types=self.num_types+1 + type_name = "Type%d"%self.num_types + complex_type = types_section.appendChild(self.types.createElement("xsd:complexType")) + type_name = self.filter_argname(type_name) + complex_type.setAttribute("name", type_name) + complex_content = complex_type.appendChild(self.types.createElement("xsd:sequence")) + + for k in arg.fields: + inner_type = self.name_complex_type(arg.fields[k]) + element=complex_content.appendChild(self.types.createElement("xsd:element")) + element.setAttribute("name",k) + element.setAttribute("type",inner_type) + + return "xsdl:%s"%type_name + else: + return (self.name_simple_type(arg)) + + def name_simple_type(self,arg_type): + # A Parameter is reported as an instance, even though it is serialized as a type <> + if type(arg_type) == InstanceType: + return (self.name_simple_type(arg_type.type)) + if arg_type == None: + return "none" + if arg_type == DictType: + return "xsd:anyType" + if arg_type in (ListType, TupleType): + return "xsd:arrayType" + elif arg_type == IntType or arg_type == LongType: + return "xsd:int" + elif arg_type == bool: + return "xsd:boolean" + elif arg_type == FloatType: + return "xsd:double" + elif arg_type in StringTypes: + return "xsd:string" + else: + pdb.set_trace() + raise SoapError, "Cannot handle %s objects" % arg_type + + def param_type(self, arg): + return (self.name_complex_type(arg)) + + def add_wsdl_ports_and_bindings (self): + for method in apistub.methods: + + # Skip system. methods + if "system." in method: + continue + + function = apistub.callable(method) # Commented documentation + #lines = ["// " + line.strip() for line in function.__doc__.strip().split("\n")] + #print "\n".join(lines) + #print + + + in_el = self.wsdl.firstChild.appendChild(self.wsdl.createElement("message")) + in_el.setAttribute("name", method + "_in") + + for service_name in function.interfaces: + if (self.services.has_key(service_name)): + if (not method in self.services[service_name]): + self.services[service_name].append(method) + else: + self.services[service_name]=[method] + + # Arguments + + if (function.accepts): + (min_args, max_args, defaults) = function.args() + for (argname,argtype) in zip(max_args,function.accepts): + argname = self.filter_argname(argname) + arg_part = in_el.appendChild(self.wsdl.createElement("part")) + arg_part.setAttribute("name", argname) + arg_part.setAttribute("type", self.param_type(argtype)) + + # Return type + return_type = function.returns + out_el = self.wsdl.firstChild.appendChild(self.wsdl.createElement("message")) + out_el.setAttribute("name", method + "_out") + ret_part = out_el.appendChild(self.wsdl.createElement("part")) + ret_part.setAttribute("name", "Result") + ret_part.setAttribute("type", self.param_type(return_type)) + + # Port connecting arguments with return type + + port_el = self.wsdl.firstChild.appendChild(self.wsdl.createElement("portType")) + port_el.setAttribute("name", method + "_port") + + op_el = port_el.appendChild(self.wsdl.createElement("operation")) + op_el.setAttribute("name", method) + inp_el=self.wsdl.createElement("input") + inp_el.setAttribute("message","tns:" + method + "_in") + inp_el.setAttribute("name",method+"_request") + op_el.appendChild(inp_el) + out_el = self.wsdl.createElement("output") + out_el.setAttribute("message","tns:" + method + "_out") + out_el.setAttribute("name",method+"_response") + op_el.appendChild(out_el) + + # Bindings + + bind_el = self.wsdl.firstChild.appendChild(self.wsdl.createElement("binding")) + bind_el.setAttribute("name", method + "_binding") + bind_el.setAttribute("type", "tns:" + method + "_port") + + soap_bind = bind_el.appendChild(self.wsdl.createElement("soap:binding")) + soap_bind.setAttribute("style", "rpc") + soap_bind.setAttribute("transport","http://schemas.xmlsoap.org/soap/http") + + + wsdl_op = bind_el.appendChild(self.wsdl.createElement("operation")) + wsdl_op.setAttribute("name", method) + wsdl_op.appendChild(self.wsdl.createElement("soap:operation")).setAttribute("soapAction", + "urn:" + method) + + + wsdl_input = wsdl_op.appendChild(self.wsdl.createElement("input")) + input_soap_body = wsdl_input.appendChild(self.wsdl.createElement("soap:body")) + input_soap_body.setAttribute("use", "encoded") + input_soap_body.setAttribute("namespace", "urn:" + method) + input_soap_body.setAttribute("encodingStyle","http://schemas.xmlsoap.org/soap/encoding/") + + + wsdl_output = wsdl_op.appendChild(self.wsdl.createElement("output")) + output_soap_body = wsdl_output.appendChild(self.wsdl.createElement("soap:body")) + output_soap_body.setAttribute("use", "encoded") + output_soap_body.setAttribute("namespace", "urn:" + method) + output_soap_body.setAttribute("encodingStyle","http://schemas.xmlsoap.org/soap/encoding/") + + + def add_wsdl_services(self): + for service in self.services.keys(): + if (getattr(self.interface_options,service)): + service_el = self.wsdl.firstChild.appendChild(self.wsdl.createElement("service")) + service_el.setAttribute("name", service) + + for method in self.services[service]: + name=method + servport_el = service_el.appendChild(self.wsdl.createElement("port")) + servport_el.setAttribute("name", name + "_port") + servport_el.setAttribute("binding", "tns:" + name + "_binding") + + soapaddress = servport_el.appendChild(self.wsdl.createElement("soap:address")) + soapaddress.setAttribute("location", "%s/%s" % (globals.plc_ns,service)) + + + def compute_wsdl_definitions(self): + wsdl_text_header = """ + + """ % (globals.plc_ns,globals.plc_ns,globals.plc_ns) + + self.wsdl = xml.dom.minidom.parseString(wsdl_text_header) + + + def compute_wsdl_definitions_and_types(self): + wsdl_text_header = """ + + + + + """ % (globals.plc_ns, globals.plc_ns, globals.plc_ns, globals.plc_ns) + self.types = xml.dom.minidom.parseString(wsdl_text_header) + + + def add_wsdl_types(self): + wsdl_types = self.wsdl.importNode(self.types.getElementsByTagName("types")[0], True) + self.wsdl.firstChild.appendChild(wsdl_types) + + def generate_wsdl(self): + self.compute_wsdl_definitions_and_types() + self.compute_wsdl_definitions() + self.add_wsdl_ports_and_bindings() + self.add_wsdl_types() + self.add_wsdl_services() + + def pretty_print(self): + if (self.wsdl): + xml.dom.ext.PrettyPrint(self.wsdl) + else: + raise Exception("Empty WSDL") + +def main(): + parser = OptionParser() + parser.add_option("-r", "--registry", dest="registry", action="store_true", + help="Generate registry.wsdl", metavar="FILE") + parser.add_option("-s", "--slice-manager", + action="store_true", dest="slicemgr", + help="Generate sm.wsdl") + parser.add_option("-a", "--aggregate", action="store_true", dest="aggregate", + help="Generate am.wsdl") + parser.add_option("-c", "--component", action="store_true", dest="component", + help="Generate cm.wsdl") + parser.add_option("-g", "--geni-aggregate", action="store_true", dest="geni_am", + help="Generate gm.wsdl") + parser.add_option("-l", "--lite", action="store_true", dest="lite", + help="Generate LITE version of the interface, in which calls exclude credentials") + (interface_options, args) = parser.parse_args() + + gen = WSDLGen(interface_options) + gen.generate_wsdl() + gen.pretty_print() + + +if __name__ == "__main__": + main() diff --git a/xmlbuilder-0.9/LICENSE b/xmlbuilder-0.9/LICENSE new file mode 100644 index 00000000..0d0f57c4 --- /dev/null +++ b/xmlbuilder-0.9/LICENSE @@ -0,0 +1,21 @@ +The MIT License + +Copyright (c) 2008 Konstantin Danilov aka koder + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/xmlbuilder-0.9/MANIFEST.in b/xmlbuilder-0.9/MANIFEST.in new file mode 100644 index 00000000..207725e9 --- /dev/null +++ b/xmlbuilder-0.9/MANIFEST.in @@ -0,0 +1,2 @@ +include xmlbuild/docs *.rst +include . LICENSE \ No newline at end of file diff --git a/xmlbuilder-0.9/PKG-INFO b/xmlbuilder-0.9/PKG-INFO new file mode 100644 index 00000000..d931c15a --- /dev/null +++ b/xmlbuilder-0.9/PKG-INFO @@ -0,0 +1,80 @@ +Metadata-Version: 1.0 +Name: xmlbuilder +Version: 0.9 +Summary: Pythonic way to create xml files +Home-page: http://pypi.python.org/pypi/xmlbuilder +Author: koder +Author-email: koder_dot_mail@gmail_dot_com +License: MIT +Download-URL: http://pypi.python.org/pypi/xmlbuilder +Description: Example of usage: + ----------------- + + + from __future__ import with_statement + from xmlbuilder import XMLBuilder + x = XMLBuilder(format=True) + with x.root(a = 1): + with x.data: + [x << ('node',{'val':i}) for i in range(10)] + + print str(x) + + will print + + <root a="1"> + <data> + <node val="0" /> + <node val="1" /> + <node val="2" /> + <node val="3" /> + <node val="4" /> + <node val="5" /> + <node val="6" /> + <node val="7" /> + <node val="8" /> + <node val="9" /> + </data> + </root> + + Mercurial repo:http://hg.assembla.com/MyPackages/ + + Documentations + -------------- + `XMLBuilder` is simple library build on top of `ElementTree.TreeBuilder` to + simplify xml files creation as much as possible. Althow it can produce + structured result with identated child tags. `XMLBuilder` use python `with` + statement to define xml tag levels and `<<` operator for simple cases - + text and tag without childs. + + First we need to create xmlbuilder + + from xmlbuilder import XMLBuilder + # params - encoding = 'utf8', + # builder = None, - ElementTree.TreeBuilder + # tab_level = None, - current tab l;evel - for formatted output only + # format = False, - create formatted output + # tab_step = " " * 4 - indentation step + xml = XMLBuilder() + + + Use `with` statement to make document structure + #create and open tag 'root_tag' with text 'text' and attributes + with xml.root_tag(text,attr1=val1,attr2=val2): + #create and open tag 'sub_tag' + with xml.sub_tag(text,attr3=val3): + #create tag which are not valid python identificator + with xml('one-more-sub-tag',attr7=val37): + xml << "Some textual data" + #here tag 'one-more-sub-tag' are closed + #Tags without children can be created using `<<` operator + for val in range(15): + xml << ('message',"python rocks!"[:i]) + #create 15 child tag like <message> python r</message> + #all tags closed + node = ~x # get etree.ElementTree object + xml_data = str(x) + unicode_xml_data = unicode(x) + +Keywords: xml +Platform: UNKNOWN diff --git a/xmlbuilder-0.9/README.txt b/xmlbuilder-0.9/README.txt new file mode 100644 index 00000000..7a7131fc --- /dev/null +++ b/xmlbuilder-0.9/README.txt @@ -0,0 +1 @@ +Pythonic way to build xml files \ No newline at end of file diff --git a/xmlbuilder-0.9/setup.cfg b/xmlbuilder-0.9/setup.cfg new file mode 100644 index 00000000..b14b0bc3 --- /dev/null +++ b/xmlbuilder-0.9/setup.cfg @@ -0,0 +1,5 @@ +[egg_info] +tag_build = +tag_date = 0 +tag_svn_revision = 0 + diff --git a/xmlbuilder-0.9/setup.py b/xmlbuilder-0.9/setup.py new file mode 100644 index 00000000..931cb315 --- /dev/null +++ b/xmlbuilder-0.9/setup.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python +#------------------------------------------------------------------------------- +import os +import sys +import glob +import os.path +from setuptools import setup +#from distutils.core import setup +#------------------------------------------------------------------------------- +if 'upload' in sys.argv: + # for .pypirc file + try: + os.environ['HOME'] + except KeyError: + os.environ['HOME'] = '..\\' +#------------------------------------------------------------------------------- +fpath = lambda x : os.path.join(*x.split('/')) +#------------------------------------------------------------------------------- +PYPI_URL = 'http://pypi.python.org/pypi/xmlbuilder' +ld = open(fpath('xmlbuilder/docs/long_descr.rst')).read() +ld = ld.replace('&','&').replace('<','<').replace('>','>') +setup( + name = "xmlbuilder", + fullname = "xmlbuilder", + version = "0.9", + packages = ["xmlbuilder"], + package_dir = {'xmlbuilder':'xmlbuilder'}, + author = "koder", + author_email = "koder_dot_mail@gmail_dot_com", + maintainer = 'koder', + maintainer_email = "koder_dot_mail@gmail_dot_com", + description = "Pythonic way to create xml files", + license = "MIT", + keywords = "xml", + test_suite = "xml_buider.tests", + url = PYPI_URL, + download_url = PYPI_URL, + long_description = ld, + #include_package_data = True, + #package_data = {'xmlbuilder':["docs/*.rst"]}, + #data_files = [('', ['xmlbuilder/docs/long_descr.rst'])] +) +#------------------------------------------------------------------------------- diff --git a/xmlbuilder-0.9/xmlbuilder.egg-info/PKG-INFO b/xmlbuilder-0.9/xmlbuilder.egg-info/PKG-INFO new file mode 100644 index 00000000..bb65a9de --- /dev/null +++ b/xmlbuilder-0.9/xmlbuilder.egg-info/PKG-INFO @@ -0,0 +1,80 @@ +Metadata-Version: 1.0 +Name: xmlbuilder +Version: 0.9 +Summary: Pythonic way to create xml files +Home-page: http://pypi.python.org/pypi/xmlbuilder +Author: koder +Author-email: koder_dot_mail@gmail_dot_com +License: MIT +Download-URL: http://pypi.python.org/pypi/xmlbuilder +Description: Example of usage: + ----------------- + + + from __future__ import with_statement + from xmlbuilder import XMLBuilder + x = XMLBuilder(format=True) + with x.root(a = 1): + with x.data: + [x << ('node',{'val':i}) for i in range(10)] + + print str(x) + + will print + + <root a="1"> + <data> + <node val="0" /> + <node val="1" /> + <node val="2" /> + <node val="3" /> + <node val="4" /> + <node val="5" /> + <node val="6" /> + <node val="7" /> + <node val="8" /> + <node val="9" /> + </data> + </root> + + Mercurial repo:http://hg.assembla.com/MyPackages/ + + Documentations + -------------- + `XMLBuilder` is simple library build on top of `ElementTree.TreeBuilder` to + simplify xml files creation as much as possible. Althow it can produce + structured result with identated child tags. `XMLBuilder` use python `with` + statement to define xml tag levels and `<<` operator for simple cases - + text and tag without childs. + + First we need to create xmlbuilder + + from xmlbuilder import XMLBuilder + # params - encoding = 'utf8', + # builder = None, - ElementTree.TreeBuilder + # tab_level = None, - current tab l;evel - for formatted output only + # format = False, - create formatted output + # tab_step = " " * 4 - indentation step + xml = XMLBuilder() + + + Use `with` statement to make document structure + #create and open tag 'root_tag' with text 'text' and attributes + with xml.root_tag(text,attr1=val1,attr2=val2): + #create and open tag 'sub_tag' + with xml.sub_tag(text,attr3=val3): + #create tag which are not valid python identificator + with xml('one-more-sub-tag',attr7=val37): + xml << "Some textual data" + #here tag 'one-more-sub-tag' are closed + #Tags without children can be created using `<<` operator + for val in range(15): + xml << ('message',"python rocks!"[:i]) + #create 15 child tag like <message> python r</message> + #all tags closed + node = ~x # get etree.ElementTree object + xml_data = str(x) + unicode_xml_data = unicode(x) + +Keywords: xml +Platform: UNKNOWN diff --git a/xmlbuilder-0.9/xmlbuilder.egg-info/SOURCES.txt b/xmlbuilder-0.9/xmlbuilder.egg-info/SOURCES.txt new file mode 100644 index 00000000..4cc27de9 --- /dev/null +++ b/xmlbuilder-0.9/xmlbuilder.egg-info/SOURCES.txt @@ -0,0 +1,13 @@ +LICENSE +MANIFEST.in +PKG-INFO +README.txt +setup.cfg +setup.py +xmlbuilder/__init__.py +xmlbuilder.egg-info/PKG-INFO +xmlbuilder.egg-info/SOURCES.txt +xmlbuilder.egg-info/dependency_links.txt +xmlbuilder.egg-info/top_level.txt +xmlbuilder/docs/long_descr.rst +xmlbuilder/tests/__init__.py \ No newline at end of file diff --git a/xmlbuilder-0.9/xmlbuilder.egg-info/dependency_links.txt b/xmlbuilder-0.9/xmlbuilder.egg-info/dependency_links.txt new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/xmlbuilder-0.9/xmlbuilder.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/xmlbuilder-0.9/xmlbuilder.egg-info/top_level.txt b/xmlbuilder-0.9/xmlbuilder.egg-info/top_level.txt new file mode 100644 index 00000000..9f1d4861 --- /dev/null +++ b/xmlbuilder-0.9/xmlbuilder.egg-info/top_level.txt @@ -0,0 +1 @@ +xmlbuilder diff --git a/xmlbuilder-0.9/xmlbuilder/__init__.py b/xmlbuilder-0.9/xmlbuilder/__init__.py new file mode 100644 index 00000000..1be17b0f --- /dev/null +++ b/xmlbuilder-0.9/xmlbuilder/__init__.py @@ -0,0 +1,153 @@ +#!/usr/bin/env python +#------------------------------------------------------------------------------- +from __future__ import with_statement +#------------------------------------------------------------------------------- +from xml.etree.ElementTree import TreeBuilder,tostring +#------------------------------------------------------------------------------- +__all__ = ["XMLBuilder"] +__doc__ = """ +XMLBuilder is simple library build on top of ElementTree.TreeBuilder to +simplify xml files creation as much as possible. Althow it can produce +structured result with identated child tags. `XMLBuilder` use python `with` +statement to define xml tag levels and `<<` operator for simple cases - +text and tag without childs. + +from __future__ import with_statement +from xmlbuilder import XMLBuilder +x = XMLBuilder(format=True) +with x.root(a = 1): + with x.data: + [x << ('node',{'val':i}) for i in range(10)] + +etree_node = ~x +print str(x) +""" +#------------------------------------------------------------------------------- +class _XMLNode(object): + """Class for internal usage""" + def __init__(self,parent,name,builder): + self.builder = builder + self.name = name + self.text = [] + self.attrs = {} + self.entered = False + self.parent = parent + def __call__(self,*dt,**mp): + text = "".join(dt) + if self.entered: + self.builder.data(text) + else: + self.text.append(text) + if self.entered: + raise ValueError("Can't add attributes to already opened element") + smp = dict((k,str(v)) for k,v in mp.items()) + self.attrs.update(smp) + return self + def __enter__(self): + self.parent += 1 + self.builder.start(self.name,self.attrs) + self.builder.data("".join(self.text)) + self.entered = True + return self + def __exit__(self,x,y,z): + self.parent -= 1 + self.builder.end(self.name) + return False +#------------------------------------------------------------------------------- +class XMLBuilder(object): + """XmlBuilder(encoding = 'utf-8', # result xml file encoding + builder = None, #etree.TreeBuilder or compatible class + tab_level = None, #current tabulation level - string + format = False, # make formatted output + tab_step = " " * 4) # tabulation step + use str(builder) or unicode(builder) to get xml text or + ~builder to obtaine etree.ElementTree + """ + def __init__(self,encoding = 'utf-8', + builder = None, + tab_level = None, + format = False, + tab_step = " " * 4): + self.__builder = builder or TreeBuilder() + self.__encoding = encoding + if format : + if tab_level is None: + tab_level = "" + if tab_level is not None: + if not format: + raise ValueError("format is False, but tab_level not None") + self.__tab_level = tab_level # current format level + self.__tab_step = tab_step # format step + self.__has_sub_tag = False # True, if current tag had childrens + self.__node = None + # called from _XMLNode when tag opened + def __iadd__(self,val): + self.__has_sub_tag = False + if self.__tab_level is not None: + self.__builder.data("\n" + self.__tab_level) + self.__tab_level += self.__tab_step + return self + # called from XMLNode when tag closed + def __isub__(self,val): + if self.__tab_level is not None: + self.__tab_level = self.__tab_level[:-len(self.__tab_step)] + if self.__has_sub_tag: + self.__builder.data("\n" + self.__tab_level) + self.__has_sub_tag = True + return self + def __getattr__(self,name): + return _XMLNode(self,name,self.__builder) + def __call__(self,name,*dt,**mp): + x = _XMLNode(self,name,self.__builder) + x(*dt,**mp) + return x + #create new tag or add text + #possible shift values + #string - text + #tuple(string1,string2,dict) - new tag with name string1,attrs = dict,and text string2 + #dict and string2 are optional + def __lshift__(self,val): + if isinstance(val,basestring): + self.__builder.data(val) + else: + self.__has_sub_tag = True + assert hasattr(val,'__len__'),\ + 'Shifted value should be tuple or list like object not %r' % val + assert hasattr(val,'__getitem__'),\ + 'Shifted value should be tuple or list like object not %r' % val + name = val[0] + if len(val) == 3: + text = val[1] + attrs = val[2] + elif len(val) == 1: + text = "" + attrs = {} + elif len(val) == 2: + if isinstance(val[1],basestring): + text = val[1] + attrs = {} + else: + text = "" + attrs = val[1] + if self.__tab_level is not None: + self.__builder.data("\n" + self.__tab_level) + self.__builder.start(name, + dict((k,str(v)) for k,v in attrs.items())) + if text: + self.__builder.data(text) + self.__builder.end(name) + return self # to allow xml << some1 << some2 << some3 + #close builder + def __invert__(self): + if self.__node is not None: + return self.__node + self.__node = self.__builder.close() + return self.__node + def __str__(self): + """return generated xml""" + return tostring(~self,self.__encoding) + def __unicode__(self): + """return generated xml""" + res = tostring(~self,self.__encoding) + return res.decode(self.__encoding) +#------------------------------------------------------------------------------- diff --git a/xmlbuilder-0.9/xmlbuilder/docs/long_descr.rst b/xmlbuilder-0.9/xmlbuilder/docs/long_descr.rst new file mode 100644 index 00000000..4e82bc85 --- /dev/null +++ b/xmlbuilder-0.9/xmlbuilder/docs/long_descr.rst @@ -0,0 +1,68 @@ +Example of usage: +----------------- + + +from __future__ import with_statement +from xmlbuilder import XMLBuilder +x = XMLBuilder(format=True) +with x.root(a = 1): + with x.data: + [x << ('node',{'val':i}) for i in range(10)] + +print str(x) + +will print + + + + + + + + + + + + + + + + +Mercurial repo:http://hg.assembla.com/MyPackages/ + +Documentations +-------------- +`XMLBuilder` is simple library build on top of `ElementTree.TreeBuilder` to +simplify xml files creation as much as possible. Althow it can produce +structured result with identated child tags. `XMLBuilder` use python `with` +statement to define xml tag levels and `<<` operator for simple cases - +text and tag without childs. + +First we need to create xmlbuilder + + from xmlbuilder import XMLBuilder + # params - encoding = 'utf8', + # builder = None, - ElementTree.TreeBuilder + # tab_level = None, - current tab l;evel - for formatted output only + # format = False, - create formatted output + # tab_step = " " * 4 - indentation step + xml = XMLBuilder() + + +Use `with` statement to make document structure + #create and open tag 'root_tag' with text 'text' and attributes + with xml.root_tag(text,attr1=val1,attr2=val2): + #create and open tag 'sub_tag' + with xml.sub_tag(text,attr3=val3): + #create tag which are not valid python identificator + with xml('one-more-sub-tag',attr7=val37): + xml << "Some textual data" + #here tag 'one-more-sub-tag' are closed + #Tags without children can be created using `<<` operator + for val in range(15): + xml << ('message',"python rocks!"[:i]) + #create 15 child tag like python r + #all tags closed + node = ~x # get etree.ElementTree object + xml_data = str(x) + unicode_xml_data = unicode(x) diff --git a/xmlbuilder-0.9/xmlbuilder/tests/__init__.py b/xmlbuilder-0.9/xmlbuilder/tests/__init__.py new file mode 100644 index 00000000..67eaa67f --- /dev/null +++ b/xmlbuilder-0.9/xmlbuilder/tests/__init__.py @@ -0,0 +1,99 @@ +#!/usr/bin/env python +from __future__ import with_statement +#------------------------------------------------------------------------------- +import unittest +from xml.etree.ElementTree import fromstring +#------------------------------------------------------------------------------- +from xmlbuilder import XMLBuilder +#------------------------------------------------------------------------------- +def xmlStructureEqual(xml1,xml2): + tree1 = fromstring(xml1) + tree2 = fromstring(xml2) + return _xmlStructureEqual(tree1,tree2) +#------------------------------------------------------------------------------- +def _xmlStructureEqual(tree1,tree2): + if tree1.tag != tree2.tag: + return False + attr1 = list(tree1.attrib.items()) + attr1.sort() + attr2 = list(tree2.attrib.items()) + attr2.sort() + if attr1 != attr2: + return False + return tree1.getchildren() == tree2.getchildren() +#------------------------------------------------------------------------------- +result1 = \ +""" + + + + + xyz + abc + + + + test + + +""".strip() +#------------------------------------------------------------------------------- +class TestXMLBuilder(unittest.TestCase): + def testShift(self): + xml = (XMLBuilder() << ('root',)) + self.assertEqual(str(xml),"") + + xml = XMLBuilder() + xml << ('root',"some text") + self.assertEqual(str(xml),"some text") + + xml = XMLBuilder() + xml << ('root',{'x':1,'y':'2'}) + self.assert_(xmlStructureEqual(str(xml),"some text")) + + xml = XMLBuilder() + xml << ('root',{'x':1,'y':'2'}) + self.assert_(xmlStructureEqual(str(xml),"")) + + xml = XMLBuilder() + xml << ('root',{'x':1,'y':'2'}) + self.assert_(not xmlStructureEqual(str(xml),"")) + + + xml = XMLBuilder() + xml << ('root',"gonduras.ua",{'x':1,'y':'2'}) + self.assert_(xmlStructureEqual(str(xml),"gonduras.ua")) + + xml = XMLBuilder() + xml << ('root',"gonduras.ua",{'x':1,'y':'2'}) + self.assert_(xmlStructureEqual(str(xml),"gonduras.com")) + #--------------------------------------------------------------------------- + def testWith(self): + xml = XMLBuilder() + with xml.root(lenght = 12): + pass + self.assertEqual(str(xml),'') + + xml = XMLBuilder() + with xml.root(): + xml << "text1" << "text2" << ('some_node',) + self.assertEqual(str(xml),"text1text2") + #--------------------------------------------------------------------------- + def testFormat(self): + x = XMLBuilder('utf-8',format = True) + with x.root(): + x << ('array',) + with x.array(len = 10): + with x.el(val = 0): + pass + with x.el('xyz',val = 1): + pass + x << ("el","abc",{'val':2}) << ('el',dict(val=3)) + x << ('el',dict(val=4)) << ('el',dict(val='5')) + with x('sup-el',val = 23): + x << "test " + self.assertEqual(str(x),result1) +#------------------------------------------------------------------------------- +if __name__ == '__main__': + unittest.main() +#------------------------------------------------------------------------------- -- 2.47.0