From 41a289a722277911bc49e3e098f5ed6a03329d03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Mon, 22 Sep 2008 11:13:57 +0200 Subject: [PATCH] Fix request handler with ssl socket for issue386 --- trytond/netsvc.py | 20 +++++++++++--------- trytond/webdavsvc.py | 4 ++-- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/trytond/netsvc.py b/trytond/netsvc.py index 9d9db40f2d..a49e441ac7 100644 --- a/trytond/netsvc.py +++ b/trytond/netsvc.py @@ -32,20 +32,22 @@ xmlrpclib.Marshaller.dispatch[Decimal] = \ class SSLSocket(object): def __init__(self, socket): - self.socket = socket - from OpenSSL import SSL - ctx = SSL.Context(SSL.SSLv23_METHOD) - ctx.use_privatekey_file(CONFIG['privatekey']) - ctx.use_certificate_file(CONFIG['certificate']) - self.ssl_socket = SSL.Connection(ctx, socket) + if not hasattr(socket, 'sock_shutdown'): + from OpenSSL import SSL + ctx = SSL.Context(SSL.SSLv23_METHOD) + ctx.use_privatekey_file(CONFIG['privatekey']) + ctx.use_certificate_file(CONFIG['certificate']) + self.socket = SSL.Connection(ctx, socket) + else: + self.socket = socket def shutdown(self, how): - return self.ssl_socket.sock_shutdown(how) + return self.socket.sock_shutdown(how) def __getattr__(self, name): if name == 'shutdown': return self.shutdown - return getattr(self.ssl_socket, name) + return getattr(self.socket, name) class Service(object): @@ -155,7 +157,7 @@ class SimpleXMLRPCRequestHandler(GenericXMLRPCRequestHandler, class SecureXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): def setup(self): - self.connection = self.request + self.connection = SSLSocket(self.request) self.rfile = socket._fileobject(self.request, "rb", self.rbufsize) self.wfile = socket._fileobject(self.request, "wb", self.wbufsize) diff --git a/trytond/webdavsvc.py b/trytond/webdavsvc.py index 21097cee67..b51fe50f5e 100644 --- a/trytond/webdavsvc.py +++ b/trytond/webdavsvc.py @@ -8,7 +8,7 @@ from DAV.errors import * from DAV.constants import COLLECTION, OBJECT from DAV.utils import get_uriparentpath, get_urifilename from DAV.davcmd import copyone, copytree, moveone, movetree, delone, deltree -from netsvc import LocalService +from netsvc import LocalService, SSLSocket import security import pooler from version import PACKAGE, VERSION, WEBSITE @@ -317,6 +317,6 @@ class WebDAVAuthRequestHandler(AuthServer.BufferedAuthRequestHandler, class SecureWebDAVAuthRequestHandler(WebDAVAuthRequestHandler): def setup(self): - self.connection = self.request + self.connection = SSLSocket(self.request) self.rfile = socket._fileobject(self.request, "rb", self.rbufsize) self.wfile = socket._fileobject(self.request, "wb", self.wbufsize)