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.use_privatekey_file(tools.config['secure_pkey_file'])
|
||||
ctx.use_certificate_file(tools.config['secure_cert_file'])
|
||||
|
||||
self.socket = SSL.Connection(ctx, socket)
|
||||
else:
|
||||
self.socket = socket
|
||||
|
@ -327,6 +328,21 @@ class SSLSocket(object):
|
|||
|
||||
def __getattr__(self, 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):
|
||||
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)
|
||||
|
||||
class SimpleThreadedXMLRPCServer(SocketServer.ThreadingMixIn, SimpleXMLRPCServer.SimpleXMLRPCServer):
|
||||
encoding = None
|
||||
allow_none = False
|
||||
|
||||
def server_bind(self):
|
||||
self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
||||
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):
|
||||
def __init__(self, server_address, HandlerClass, logRequests=1):
|
||||
SimpleThreadedXMLRPCServer.__init__(self, server_address, HandlerClass, logRequests)
|
||||
|
@ -349,6 +375,14 @@ class SecureThreadedXMLRPCServer(SimpleThreadedXMLRPCServer):
|
|||
self.server_bind()
|
||||
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):
|
||||
def __init__(self, interface, port, secure=False):
|
||||
threading.Thread.__init__(self)
|
||||
|
|
|
@ -191,20 +191,19 @@ class configmanager(object):
|
|||
keys = ['interface', 'port', 'db_name', 'db_user', 'db_password', 'db_host',
|
||||
'db_port', 'logfile', 'pidfile', 'smtp_port',
|
||||
'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:
|
||||
keys.extend(['smtp_ssl', 'secure_cert_file', 'secure_pkey_file'])
|
||||
keys.append('secure')
|
||||
|
||||
for arg in keys:
|
||||
if getattr(opt, arg):
|
||||
self.options[arg] = getattr(opt, arg)
|
||||
|
||||
keys = ['language', 'translate_out', 'translate_in', 'upgrade', 'debug_mode',
|
||||
'stop_after_init', 'without_demo', 'netrpc', 'xmlrpc', 'syslog']
|
||||
|
||||
if hasSSL:
|
||||
keys.append('secure')
|
||||
'stop_after_init']
|
||||
|
||||
for arg in keys:
|
||||
self.options[arg] = getattr(opt, arg)
|
||||
|
|
Loading…
Reference in New Issue