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")