diff roundup/scripts/roundup_server.py @ 4276:0c024cf74252

Correct initial- and end-handshakes for SSL
author Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
date Wed, 14 Oct 2009 10:06:49 +0000
parents 0a684518d609
children 236939e4137b
line wrap: on
line diff
--- a/roundup/scripts/roundup_server.py	Wed Oct 14 09:11:54 2009 +0000
+++ b/roundup/scripts/roundup_server.py	Wed Oct 14 10:06:49 2009 +0000
@@ -29,8 +29,6 @@
 except ImportError:
     SSL = None
 
-from time import sleep
-
 # python version check
 from roundup import configuration, version_check
 from roundup import __version__ as roundup_version
@@ -76,7 +74,7 @@
 
 def auto_ssl():
     print _('WARNING: generating temporary SSL certificate')
-    import OpenSSL, time, random, sys
+    import OpenSSL, random
     pkey = OpenSSL.crypto.PKey()
     pkey.generate_key(OpenSSL.crypto.TYPE_RSA, 768)
     cert = OpenSSL.crypto.X509()
@@ -128,7 +126,7 @@
                         try:
                             return self.__fileobj.readline(*args)
                         except SSL.WantReadError:
-                            sleep (.1)
+                            time.sleep(.1)
 
                 def read(self, *args):
                     """ SSL.Connection can return WantRead """
@@ -136,7 +134,7 @@
                         try:
                             return self.__fileobj.read(*args)
                         except SSL.WantReadError:
-                            sleep (.1)
+                            time.sleep(.1)
 
                 def __getattr__(self, attrib):
                     return getattr(self.__fileobj, attrib)
@@ -590,6 +588,20 @@
             DEBUG_MODE = self["MULTIPROCESS"] == "debug"
             CONFIG = self
 
+            def setup(self):
+                if self.CONFIG["SSL"]:
+                    # perform initial ssl handshake. This will set
+                    # internal state correctly so that later closing SSL
+                    # socket works (with SSL end-handshake started)
+                    self.request.do_handshake()
+                RoundupRequestHandler.setup(self)
+
+            def finish(self):
+                RoundupRequestHandler.finish(self)
+                if self.CONFIG["SSL"]:
+                    self.request.shutdown()
+                    self.request.close()
+
         if self["SSL"]:
             base_server = SecureHTTPServer
         else:

Roundup Issue Tracker: http://roundup-tracker.org/