]> granicus.if.org Git - python/commitdiff
remove duplicate close() from ssl.py; expose unwrap and add test for it
authorBill Janssen <janssen@parc.com>
Tue, 12 Aug 2008 16:31:21 +0000 (16:31 +0000)
committerBill Janssen <janssen@parc.com>
Tue, 12 Aug 2008 16:31:21 +0000 (16:31 +0000)
Lib/ssl.py
Lib/test/test_ssl.py

index e45e16bb14ac657332ded229a6bcb90e4959191b..c9ee71a08505ba700546a7393ef53b517771aebd 100644 (file)
@@ -234,14 +234,18 @@ class SSLSocket (socket):
         else:
             return 0
 
+    def unwrap (self):
+        if self._sslobj:
+            s = self._sslobj.shutdown()
+            self._sslobj = None
+            return s
+        else:
+            raise ValueError("No SSL wrapper around " + str(self))
+
     def shutdown (self, how):
         self._sslobj = None
         socket.shutdown(self, how)
 
-    def close (self):
-        self._sslobj = None
-        socket.close(self)
-
     def close (self):
         if self._makefile_refs < 1:
             self._sslobj = None
index 79dad649ce668358a970e93430940c63d77285b7..fca8a572bf99123ff051fd399dcdf6e69cf3c3e4 100644 (file)
@@ -282,6 +282,14 @@ else:
                             self.write("OK\n")
                             if not self.wrap_conn():
                                 return
+                        elif self.server.starttls_server and self.sslconn and msg.strip() == 'ENDTLS':
+                            if test_support.verbose and self.server.connectionchatty:
+                                sys.stdout.write(" server: read ENDTLS from client, sending OK...\n")
+                            self.write("OK\n")
+                            self.sslconn.unwrap()
+                            self.sslconn = None
+                            if test_support.verbose and self.server.connectionchatty:
+                                sys.stdout.write(" server: connection is now unencrypted...\n")
                         else:
                             if (test_support.verbose and
                                 self.server.connectionchatty):
@@ -867,7 +875,7 @@ else:
 
         def testSTARTTLS (self):
 
-            msgs = ("msg 1", "MSG 2", "STARTTLS", "MSG 3", "msg 4")
+            msgs = ("msg 1", "MSG 2", "STARTTLS", "MSG 3", "msg 4", "ENDTLS", "msg 5", "msg 6")
 
             server = ThreadedEchoServer(CERTFILE,
                                         ssl_version=ssl.PROTOCOL_TLSv1,
@@ -907,8 +915,15 @@ else:
                                     " client:  read %s from server, starting TLS...\n"
                                     % repr(outdata))
                             conn = ssl.wrap_socket(s, ssl_version=ssl.PROTOCOL_TLSv1)
-
                             wrapped = True
+                        elif (indata == "ENDTLS" and
+                            outdata.strip().lower().startswith("ok")):
+                            if test_support.verbose:
+                                sys.stdout.write(
+                                    " client:  read %s from server, ending TLS...\n"
+                                    % repr(outdata))
+                            s = conn.unwrap()
+                            wrapped = False
                         else:
                             if test_support.verbose:
                                 sys.stdout.write(