cleanup
authorLarry Peterson <llp@cs.princeton.edu>
Fri, 2 Jan 2009 15:38:00 +0000 (15:38 +0000)
committerLarry Peterson <llp@cs.princeton.edu>
Fri, 2 Jan 2009 15:38:00 +0000 (15:38 +0000)
cmdline/sfi.py
util/geniserver.py
util/rights.py

index 2d6f188..75d7233 100755 (executable)
@@ -70,13 +70,8 @@ def set_servers(options):
    cert_file = get_cert_file(key_file)
 
    # Establish connection to server(s)
-   # SliceMgr and Registry may be available on the same server
-   if (sm_url == registry_url):
-      slicemgr = GeniClient(sm_url, key_file, cert_file)
-      registry = slicemgr
-   else:
-      slicemgr = GeniClient(sm_url, key_file, cert_file)
-      registry = GeniClient(registry_url, key_file, cert_file)
+   slicemgr = GeniClient(sm_url, key_file, cert_file)
+   registry = GeniClient(registry_url, key_file, cert_file)
    return
 
 #
@@ -361,7 +356,7 @@ def slices(opts, args):
 def resources(opts, args):
    global slicemgr
    slice_cred = get_slice_cred(args[0]) 
-   result = slicemgr.get_resources(slice_cred, args[0])
+   result = slicemgr.get_slice_resources(slice_cred, args[0])
    display_rspec(opts.format, result)
    return
 
@@ -372,7 +367,7 @@ def create(opts, args):
    rspec_file = get_rspec_file(args[1])
    with open(rspec_file) as f:
       rspec = f.read()
-   return slicemgr.instantiate(slice_cred, rspec)
+   return slicemgr.create_slice(slice_cred, rspec)
 
 # delete named slice
 def delete(opts, args):
index b8cc047..c4ba7cf 100644 (file)
@@ -10,25 +10,26 @@ import SimpleXMLRPCServer
 
 import sys
 import traceback
+import threading
 import SocketServer
-import BaseHTTPServer\r
-import SimpleHTTPServer\r
-import SimpleXMLRPCServer\r
-\r
-from excep import *\r
-from cert import *\r
-from credential import *\r
-\r
-import socket, os\r
-from OpenSSL import SSL\r
-\r
-##\r
-# Verification callback for pyOpenSSL. We do our own checking of keys because\r
-# we have our own authentication spec. Thus we disable several of the normal\r
-# prohibitions that OpenSSL places on certificates\r
-\r
-def verify_callback(conn, x509, err, depth, preverify):\r
-    # if the cert has been preverified, then it is ok\r
+import BaseHTTPServer
+import SimpleHTTPServer
+import SimpleXMLRPCServer
+
+from excep import *
+from cert import *
+from credential import *
+
+import socket, os
+from OpenSSL import SSL
+
+##
+# 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
@@ -71,90 +72,90 @@ def verify_callback(conn, x509, err, depth, preverify):
     print "  error", err, "in verify_callback"
 
     return 0\r
-\r
-##\r
-# Taken from the web (XXX find reference). Implements an HTTPS xmlrpc server\r
-
-class SecureXMLRPCServer(BaseHTTPServer.HTTPServer,SimpleXMLRPCServer.SimpleXMLRPCDispatcher):\r
-    def __init__(self, server_address, HandlerClass, key_file, cert_file, logRequests=True):\r
-        """Secure XML-RPC server.\r
-\r
-        It it very similar to SimpleXMLRPCServer but it uses HTTPS for transporting XML data.\r
-        """\r
-        self.logRequests = logRequests\r
-\r
-        SimpleXMLRPCServer.SimpleXMLRPCDispatcher.__init__(self, True, None)\r
-        SocketServer.BaseServer.__init__(self, server_address, HandlerClass)\r
-        ctx = SSL.Context(SSL.SSLv23_METHOD)\r
-        ctx.use_privatekey_file(key_file)\r
-        ctx.use_certificate_file(cert_file)\r
-        ctx.set_verify(SSL.VERIFY_PEER | SSL.VERIFY_FAIL_IF_NO_PEER_CERT, verify_callback)\r
-        ctx.set_app_data(self)\r
-        self.socket = SSL.Connection(ctx, socket.socket(self.address_family,\r
-                                                        self.socket_type))\r
-        self.server_bind()\r
-        self.server_activate()\r
-\r
-    # _dispatch\r
+
+##
+# 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
+
+        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)
+        ctx.set_verify(SSL.VERIFY_PEER | SSL.VERIFY_FAIL_IF_NO_PEER_CERT, verify_callback)
+        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):\r
-        try:\r
-            return SimpleXMLRPCServer.SimpleXMLRPCDispatcher._dispatch(self, method, params)\r
-        except:\r
-            # can't use format_exc() as it is not available in jython yet (even\r
-            # in trunk).\r
-            type, value, tb = sys.exc_info()\r
-            raise xmlrpclib.Fault(1,''.join(traceback.format_exception(type, value, tb)))\r
-\r
-##\r
-# taken from the web (XXX find reference). Implents HTTPS xmlrpc request handler\r
-\r
-class SecureXMLRpcRequestHandler(SimpleXMLRPCServer.SimpleXMLRPCRequestHandler):\r
-    """Secure XML-RPC request handler class.\r
-\r
-    It it very similar to SimpleXMLRPCRequestHandler but it uses HTTPS for transporting XML data.\r
-    """\r
-    def setup(self):\r
-        self.connection = self.request\r
-        self.rfile = socket._fileobject(self.request, "rb", self.rbufsize)\r
-        self.wfile = socket._fileobject(self.request, "wb", self.wbufsize)\r
-\r
-    def do_POST(self):\r
-        """Handles the HTTPS POST request.\r
-\r
-        It was copied out from SimpleXMLRPCServer.py and modified to shutdown the socket cleanly.\r
-        """\r
-\r
-        try:\r
-            # get arguments\r
-            data = self.rfile.read(int(self.headers["content-length"]))\r
-            # In previous versions of SimpleXMLRPCServer, _dispatch\r
-            # could be overridden in this class, instead of in\r
-            # SimpleXMLRPCDispatcher. To maintain backwards compatibility,\r
-            # check to see if a subclass implements _dispatch and dispatch\r
-            # using that method if present.\r
-            response = self.server._marshaled_dispatch(\r
-                    data, getattr(self, '_dispatch', None)\r
-                )\r
-        except: # This should only happen if the module is buggy\r
-            # internal error, report as HTTP server error\r
-            self.send_response(500)\r
-\r
-            self.end_headers()\r
-        else:\r
-            # got a valid XML RPC response\r
-            self.send_response(200)\r
-            self.send_header("Content-type", "text/xml")\r
-            self.send_header("Content-length", str(len(response)))\r
-            self.end_headers()\r
-            self.wfile.write(response)\r
-\r
-            # shut down the connection\r
-            self.wfile.flush()\r
-            self.connection.shutdown() # Modified here!\r
+    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)))
+
+##
+# 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:
+            # get arguments
+            data = 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(
+                    data, getattr(self, '_dispatch', None)
+                )
+        except: # This should only happen if the module is buggy
+            # internal error, report as HTTP server error
+            self.send_response(500)
+
+            self.end_headers()
+        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 GENI
@@ -163,7 +164,7 @@ class SecureXMLRpcRequestHandler(SimpleXMLRPCServer.SimpleXMLRPCRequestHandler):
 # the credential, and verify that the user is using the key that matches the
 # GID supplied in the credential.
 
-class GeniServer():
+class GeniServer(threading.Thread):
 
     ##
     # Create a new GeniServer object.
@@ -171,7 +172,8 @@ class GeniServer():
     # @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)
+    # @param cert_file certificate filename containing public key 
+    #   (could be a GID file)
 
     def __init__(self, ip, port, key_file, cert_file):
         self.key = Keypair(filename = key_file)
@@ -195,7 +197,7 @@ class GeniServer():
         if not self.client_gid:
             raise MissingCallerGID(self.client_cred.get_subject())
 
-        # make sure the client_gid matches the certificate that the client is using
+        # make sure the client_gid matches client's certificate
         peer_cert = self.server.peer_cert
         if not peer_cert.is_pubkey(self.client_gid.get_pubkey()):
             raise ConnectionKeyGIDMismatch(self.client_gid.get_subject())
index 92ab583..c2af9dc 100644 (file)
@@ -18,10 +18,10 @@ privilege_table = {"authority": ["*"],
                    "refresh": ["remove", "update"],
                    "resolve": ["resolve", "list", "getcredential"],
                    "sa": ["*"],
-                   "embed": ["getticket", "createslice", "deleteslice", "updateslice"],
+                   "embed": ["getticket", "redeemslice", "createslice", "deleteslice", "updateslice", "getsliceresources"],
                    "bind": ["getticket", "loanresources"],
-                   "control": ["updateslice", "stopslice", "startslice", "deleteslice", "resetslice"],
-                   "info": ["listslices", "listcomponentresources", "getsliceresources"],
+                   "control": ["updateslice", "createslice", "stopslice", "startslice", "deleteslice", "resetslice", "getsliceresources"],
+                   "info": ["listslices", "listnodes"],
                    "ma": ["*"]}
 
 ##