diff lisp/gnus/pop3.el @ 111745:c392bf1fd90c

* pop3.el (pop3-open-server): Read server greeting before starting TLS negotiation.
author Chong Yidong <cyd@stupidchicken.com>
date Fri, 19 Nov 2010 11:25:09 -0500
parents 1d1d5d9bd884
children 141d3f14d8c3 376148b31b5e
line wrap: on
line diff
--- a/lisp/gnus/pop3.el	Wed Nov 17 22:44:35 2010 -0500
+++ b/lisp/gnus/pop3.el	Fri Nov 19 11:25:09 2010 -0500
@@ -259,21 +259,22 @@
 	      ;; gnutls-cli, openssl don't accept service names
 	      (if (equal port "pop3")
 		  (setq port 110))
-	      (let ((process (starttls-open-stream "POP" (current-buffer)
-						   mailhost (or port 110))))
-		(pop3-send-command process "STLS")
-		(let ((response (pop3-read-response process t)))
-		  (if (and response (string-match "+OK" response))
-		      (starttls-negotiate process)
-		    (pop3-quit process)
-		    (error "POP server doesn't support starttls")))
-		process))
-	     (t 
+	      ;; Delay STLS until server greeting is read (Bug#7438).
+	      (starttls-open-stream "POP" (current-buffer)
+				    mailhost (or port 110)))
+	     (t
 	      (open-network-stream "POP" (current-buffer) mailhost port))))
       (let ((response (pop3-read-response process t)))
 	(setq pop3-timestamp
 	      (substring response (or (string-match "<" response) 0)
 			 (+ 1 (or (string-match ">" response) -1)))))
+      (when (eq pop3-stream-type 'starttls)
+	(pop3-send-command process "STLS")
+	(let ((response (pop3-read-response process t)))
+	  (if (and response (string-match "+OK" response))
+	      (starttls-negotiate process)
+	    (pop3-quit process)
+	    (error "POP server doesn't support starttls"))))
       process)))
 
 ;; Support functions