Bring the changes from SecureXMLRPCServer.py
bzr revid: p_christ@hol.gr-20081223161823-xq6npt18t19hegri
This commit is contained in:
parent
a8229141bc
commit
a89ae314d2
|
@ -318,6 +318,7 @@ class SSLSocket(object):
|
||||||
ctx = SSL.Context(SSL.SSLv23_METHOD)
|
ctx = SSL.Context(SSL.SSLv23_METHOD)
|
||||||
ctx.use_privatekey_file(tools.config['secure_pkey_file'])
|
ctx.use_privatekey_file(tools.config['secure_pkey_file'])
|
||||||
ctx.use_certificate_file(tools.config['secure_cert_file'])
|
ctx.use_certificate_file(tools.config['secure_cert_file'])
|
||||||
|
|
||||||
self.socket = SSL.Connection(ctx, socket)
|
self.socket = SSL.Connection(ctx, socket)
|
||||||
else:
|
else:
|
||||||
self.socket = socket
|
self.socket = socket
|
||||||
|
@ -327,6 +328,21 @@ class SSLSocket(object):
|
||||||
|
|
||||||
def __getattr__(self, name):
|
def __getattr__(self, name):
|
||||||
return getattr(self.socket, name)
|
return getattr(self.socket, name)
|
||||||
|
|
||||||
|
class doesitgohere():
|
||||||
|
def recv(self, bufsize):
|
||||||
|
""" Another bugfix: SSL's recv() may raise
|
||||||
|
recoverable exceptions, which simply need us to retry
|
||||||
|
the call
|
||||||
|
"""
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
return self.socket.recv(bufsize)
|
||||||
|
except SSL.WantReadError:
|
||||||
|
pass
|
||||||
|
except SSL.WantWriteError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class SimpleXMLRPCRequestHandler(GenericXMLRPCRequestHandler, SimpleXMLRPCServer.SimpleXMLRPCRequestHandler):
|
class SimpleXMLRPCRequestHandler(GenericXMLRPCRequestHandler, SimpleXMLRPCServer.SimpleXMLRPCRequestHandler):
|
||||||
rpc_paths = map(lambda s: '/xmlrpc/%s' % s, _service)
|
rpc_paths = map(lambda s: '/xmlrpc/%s' % s, _service)
|
||||||
|
@ -338,10 +354,20 @@ class SecureXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
self.wfile = socket._fileobject(self.request, "wb", self.wbufsize)
|
self.wfile = socket._fileobject(self.request, "wb", self.wbufsize)
|
||||||
|
|
||||||
class SimpleThreadedXMLRPCServer(SocketServer.ThreadingMixIn, SimpleXMLRPCServer.SimpleXMLRPCServer):
|
class SimpleThreadedXMLRPCServer(SocketServer.ThreadingMixIn, SimpleXMLRPCServer.SimpleXMLRPCServer):
|
||||||
|
encoding = None
|
||||||
|
allow_none = False
|
||||||
|
|
||||||
def server_bind(self):
|
def server_bind(self):
|
||||||
self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
||||||
SimpleXMLRPCServer.SimpleXMLRPCServer.server_bind(self)
|
SimpleXMLRPCServer.SimpleXMLRPCServer.server_bind(self)
|
||||||
|
|
||||||
|
def handle_error(self, request, client_address):
|
||||||
|
""" Override the error handler
|
||||||
|
"""
|
||||||
|
import traceback
|
||||||
|
Logger().notifyChannel("init", LOG_ERROR,"Server error in request from %s:\n%s" %
|
||||||
|
(client_address,traceback.format_exc()))
|
||||||
|
|
||||||
class SecureThreadedXMLRPCServer(SimpleThreadedXMLRPCServer):
|
class SecureThreadedXMLRPCServer(SimpleThreadedXMLRPCServer):
|
||||||
def __init__(self, server_address, HandlerClass, logRequests=1):
|
def __init__(self, server_address, HandlerClass, logRequests=1):
|
||||||
SimpleThreadedXMLRPCServer.__init__(self, server_address, HandlerClass, logRequests)
|
SimpleThreadedXMLRPCServer.__init__(self, server_address, HandlerClass, logRequests)
|
||||||
|
@ -349,6 +375,14 @@ class SecureThreadedXMLRPCServer(SimpleThreadedXMLRPCServer):
|
||||||
self.server_bind()
|
self.server_bind()
|
||||||
self.server_activate()
|
self.server_activate()
|
||||||
|
|
||||||
|
def handle_error(self, request, client_address):
|
||||||
|
""" Override the error handler
|
||||||
|
"""
|
||||||
|
import traceback
|
||||||
|
e_type, e_value, e_traceback = sys.exc_info()
|
||||||
|
Logger().notifyChannel("init", LOG_ERROR,"SSL Request handler error in request from %s: %s\n%s" %
|
||||||
|
(client_address,str(e_type),traceback.format_exc()))
|
||||||
|
|
||||||
class HttpDaemon(threading.Thread):
|
class HttpDaemon(threading.Thread):
|
||||||
def __init__(self, interface, port, secure=False):
|
def __init__(self, interface, port, secure=False):
|
||||||
threading.Thread.__init__(self)
|
threading.Thread.__init__(self)
|
||||||
|
|
|
@ -191,20 +191,19 @@ class configmanager(object):
|
||||||
keys = ['interface', 'port', 'db_name', 'db_user', 'db_password', 'db_host',
|
keys = ['interface', 'port', 'db_name', 'db_user', 'db_password', 'db_host',
|
||||||
'db_port', 'logfile', 'pidfile', 'smtp_port',
|
'db_port', 'logfile', 'pidfile', 'smtp_port',
|
||||||
'email_from', 'smtp_server', 'smtp_user', 'smtp_password', 'price_accuracy',
|
'email_from', 'smtp_server', 'smtp_user', 'smtp_password', 'price_accuracy',
|
||||||
'netinterface', 'netport', 'db_maxconn', 'import_partial', 'addons_path']
|
'netinterface', 'netport', 'db_maxconn', 'import_partial', 'addons_path',
|
||||||
|
'netrpc', 'xmlrpc', 'syslog', 'without_demo']
|
||||||
|
|
||||||
if hasSSL:
|
if hasSSL:
|
||||||
keys.extend(['smtp_ssl', 'secure_cert_file', 'secure_pkey_file'])
|
keys.extend(['smtp_ssl', 'secure_cert_file', 'secure_pkey_file'])
|
||||||
|
keys.append('secure')
|
||||||
|
|
||||||
for arg in keys:
|
for arg in keys:
|
||||||
if getattr(opt, arg):
|
if getattr(opt, arg):
|
||||||
self.options[arg] = getattr(opt, arg)
|
self.options[arg] = getattr(opt, arg)
|
||||||
|
|
||||||
keys = ['language', 'translate_out', 'translate_in', 'upgrade', 'debug_mode',
|
keys = ['language', 'translate_out', 'translate_in', 'upgrade', 'debug_mode',
|
||||||
'stop_after_init', 'without_demo', 'netrpc', 'xmlrpc', 'syslog']
|
'stop_after_init']
|
||||||
|
|
||||||
if hasSSL:
|
|
||||||
keys.append('secure')
|
|
||||||
|
|
||||||
for arg in keys:
|
for arg in keys:
|
||||||
self.options[arg] = getattr(opt, arg)
|
self.options[arg] = getattr(opt, arg)
|
||||||
|
|
Loading…
Reference in New Issue