You are viewing a plain text version of this content. The canonical link for it is here.
Posted to tashi-commits@incubator.apache.org by st...@apache.org on 2012/02/08 22:29:43 UTC
svn commit: r1242148 - in /incubator/tashi/branches/stroucki-rpyc:
etc/NodeManager.cfg etc/TashiDefaults.cfg
src/tashi/clustermanager/clustermanager.py
src/tashi/nodemanager/nodemanager.py src/tashi/rpycservices/rpycservices.py
Author: stroucki
Date: Wed Feb 8 22:29:43 2012
New Revision: 1242148
URL: http://svn.apache.org/viewvc?rev=1242148&view=rev
Log:
corrections
Modified:
incubator/tashi/branches/stroucki-rpyc/etc/NodeManager.cfg
incubator/tashi/branches/stroucki-rpyc/etc/TashiDefaults.cfg
incubator/tashi/branches/stroucki-rpyc/src/tashi/clustermanager/clustermanager.py
incubator/tashi/branches/stroucki-rpyc/src/tashi/nodemanager/nodemanager.py
incubator/tashi/branches/stroucki-rpyc/src/tashi/rpycservices/rpycservices.py
Modified: incubator/tashi/branches/stroucki-rpyc/etc/NodeManager.cfg
URL: http://svn.apache.org/viewvc/incubator/tashi/branches/stroucki-rpyc/etc/NodeManager.cfg?rev=1242148&r1=1242147&r2=1242148&view=diff
==============================================================================
--- incubator/tashi/branches/stroucki-rpyc/etc/NodeManager.cfg (original)
+++ incubator/tashi/branches/stroucki-rpyc/etc/NodeManager.cfg Wed Feb 8 22:29:43 2012
@@ -84,4 +84,5 @@ statsInterval = 0.0
[Security]
authAndEncrypt = False
+certFile = /tmp/cert.pem
Modified: incubator/tashi/branches/stroucki-rpyc/etc/TashiDefaults.cfg
URL: http://svn.apache.org/viewvc/incubator/tashi/branches/stroucki-rpyc/etc/TashiDefaults.cfg?rev=1242148&r1=1242147&r2=1242148&view=diff
==============================================================================
--- incubator/tashi/branches/stroucki-rpyc/etc/TashiDefaults.cfg (original)
+++ incubator/tashi/branches/stroucki-rpyc/etc/TashiDefaults.cfg Wed Feb 8 22:29:43 2012
@@ -17,6 +17,7 @@
[Security]
authAndEncrypt = False
+certFile = /tmp/cert.pem
[AccessClusterManager]
#If username and password are left empty, user will be prompted for username and password on the command line.
Modified: incubator/tashi/branches/stroucki-rpyc/src/tashi/clustermanager/clustermanager.py
URL: http://svn.apache.org/viewvc/incubator/tashi/branches/stroucki-rpyc/src/tashi/clustermanager/clustermanager.py?rev=1242148&r1=1242147&r2=1242148&view=diff
==============================================================================
--- incubator/tashi/branches/stroucki-rpyc/src/tashi/clustermanager/clustermanager.py (original)
+++ incubator/tashi/branches/stroucki-rpyc/src/tashi/clustermanager/clustermanager.py Wed Feb 8 22:29:43 2012
@@ -26,7 +26,6 @@ import tashi
from tashi.rpycservices import rpycservices
from rpyc.utils.server import ThreadedServer
-from tashi.rpycservices import UsernamePasswordAuthenticator
log = None
@@ -45,7 +44,7 @@ def startClusterManager(config):
users[user.name] = user.passwd
users[config.get('AllowedUsers', 'nodeManagerUser')] = config.get('AllowedUsers', 'nodeManagerPassword')
users[config.get('AllowedUsers', 'agentUser')] = config.get('AllowedUsers', 'agentPassword')
- authenticator = UsernamePasswordAuthenticator(users)
+ authenticator = rpycservices.UsernamePasswordAuthenticator(config, users)
t = ThreadedServer(service=rpycservices.ManagerService, hostname='0.0.0.0', port=int(config.get('ClusterManagerService', 'port')), auto_register=False, authenticator=authenticator)
else:
t = ThreadedServer(service=rpycservices.ManagerService, hostname='0.0.0.0', port=int(config.get('ClusterManagerService', 'port')), auto_register=False)
Modified: incubator/tashi/branches/stroucki-rpyc/src/tashi/nodemanager/nodemanager.py
URL: http://svn.apache.org/viewvc/incubator/tashi/branches/stroucki-rpyc/src/tashi/nodemanager/nodemanager.py?rev=1242148&r1=1242147&r2=1242148&view=diff
==============================================================================
--- incubator/tashi/branches/stroucki-rpyc/src/tashi/nodemanager/nodemanager.py (original)
+++ incubator/tashi/branches/stroucki-rpyc/src/tashi/nodemanager/nodemanager.py Wed Feb 8 22:29:43 2012
@@ -27,7 +27,6 @@ from tashi import boolean
from tashi.rpycservices import rpycservices
from rpyc.utils.server import ThreadedServer
-from tashi.rpycservices import UsernamePasswordAuthenticator
@signalHandler(signal.SIGTERM)
def handleSIGTERM(signalNumber, stackFrame):
@@ -50,7 +49,7 @@ def main():
if boolean(config.get("Security", "authAndEncrypt")):
users = {}
users[config.get('AllowedUsers', 'clusterManagerUser')] = config.get('AllowedUsers', 'clusterManagerPassword')
- authenticator = UsernamePasswordAuthenticator(users)
+ authenticator = rpycservices.UsernamePasswordAuthenticator(config, users)
t = ThreadedServer(service=rpycservices.ManagerService, hostname='0.0.0.0', port=int(config.get('NodeManagerService', 'port')), auto_register=False, authenticator=authenticator)
else:
t = ThreadedServer(service=rpycservices.ManagerService, hostname='0.0.0.0', port=int(config.get('NodeManagerService', 'port')), auto_register=False)
Modified: incubator/tashi/branches/stroucki-rpyc/src/tashi/rpycservices/rpycservices.py
URL: http://svn.apache.org/viewvc/incubator/tashi/branches/stroucki-rpyc/src/tashi/rpycservices/rpycservices.py?rev=1242148&r1=1242147&r2=1242148&view=diff
==============================================================================
--- incubator/tashi/branches/stroucki-rpyc/src/tashi/rpycservices/rpycservices.py (original)
+++ incubator/tashi/branches/stroucki-rpyc/src/tashi/rpycservices/rpycservices.py Wed Feb 8 22:29:43 2012
@@ -17,6 +17,10 @@
import rpyc
from tashi.rpycservices.rpyctypes import Instance, Host, User
+import ssl
+import hashlib
+import sys
+
import cPickle
clusterManagerRPCs = ['createVm', 'shutdownVm', 'destroyVm', 'suspendVm', 'resumeVm', 'migrateVm', 'pauseVm', 'unpauseVm', 'getHosts', 'getNetworks', 'getUsers', 'getInstances', 'vmmSpecificCall', 'registerNodeManager', 'vmUpdate', 'activateVm', 'registerHost', 'getImages', 'copyImage']
@@ -43,10 +47,8 @@ def clean(args):
return args
class client:
- import hashlib
-
def __init__(self, host, port, username=None, password=None):
- """Client for ManagerService. If username and password are provided, rpyc.tlslite_connect will be used to connect, else rpyc.connect will be used."""
+ """Client for ManagerService. If username and password are provided, rpyc.ssl_connect will be used to connect, else rpyc.connect will be used."""
self.host = host
self.port = int(port)
self.username = username
@@ -61,7 +63,7 @@ class client:
print "XXXstroucki hello line %s" % (hello)
if hello != "tashi server sha1":
raise AuthenticationError("Wrong protocol version")
- sock.write("%s|%s" % (self.username, hashlib.sha1(self.password)))
+ sock.write("%s|%s" % (self.username, hashlib.sha1(self.password).hexdigest()))
sock.flush()
result = sock.read()
print "XXXstroucki result line %s" % (result)
@@ -92,18 +94,22 @@ class client:
return res
return connectWrap
-class UsernamePasswordAuthenticator(object):
- import ssl
- import hashlib
+class AuthenticationError(Exception):
+ pass
- def __init__(self, userdict):
+class UsernamePasswordAuthenticator(object):
+ def __init__(self, config, userdict):
+ self.userdict = {}
+ self.certfile = config.get("Security", "certFile")
+ if self.certfile is None:
+ raise AuthenticationError("SSL cert file must be defined")
for username, password in userdict.iteritems():
- self.userdict[username] = hashlib.sha1(password)
+ self.userdict[username] = hashlib.sha1(password).hexdigest()
def __call__(self, sock):
try:
- sock2 = ssl.wrap.socket(sock, server_side = True)
- except: ssl.SSLError:
+ sock2 = ssl.wrap_socket(sock, certfile=self.certfile, server_side = True)
+ except ssl.SSLError:
raise AuthenticationError(str(sys.exc_info()))
try:
@@ -113,7 +119,7 @@ class UsernamePasswordAuthenticator(obje
(username, password) = auth.split('|')
hash = self.userdict[username]
- if (hashlib.sha1(password) == hash):
+ if (hashlib.sha1(password).hexdigest() == hash):
pass
else:
raise AuthenticationError("Authentication failed")