]> git.eshelyaron.com Git - emacs.git/commitdiff
(open-tls-stream): Restore the 2007-11-04 change accidentally removed
authorGlenn Morris <rgm@gnu.org>
Mon, 3 Mar 2008 02:11:04 +0000 (02:11 +0000)
committerGlenn Morris <rgm@gnu.org>
Mon, 3 Mar 2008 02:11:04 +0000 (02:11 +0000)
by the 2007-12-05 merge from Gnus.

lisp/ChangeLog
lisp/net/tls.el

index be67b888ada805e0d6a55012f5691e22f2e08733..a5a4ce7dcb524f589602b8c69f06adf36ef4196a 100644 (file)
@@ -1,3 +1,8 @@
+2008-03-03  Glenn Morris  <rgm@gnu.org>
+
+       * net/tls.el (open-tls-stream): Restore the 2007-11-04 change
+       accidentally removed by the 2007-12-05 merge from Gnus.
+
 2008-03-02  Dan Nicolaescu  <dann@ics.uci.edu>
 
        * progmodes/compile.el (compilation-menu-map): Add menu entries
index 40cc5f623db77fca4aab8242a6517a7681a2e3c8..9360a905861074e7c126408b3288f196adc95b97 100644 (file)
@@ -239,38 +239,55 @@ Fourth arg PORT is an integer specifying a port to connect to."
                      (memq (process-status process) '(open run))
                      (progn
                        (goto-char (point-min))
-                       (not (setq done (re-search-forward tls-success nil t)))))
+                       (not (setq done (re-search-forward
+                                        tls-success nil t)))))
            (unless (accept-process-output process 1)
              (sit-for 1)))
          (message "Opening TLS connection with `%s'...%s" cmd
                   (if done "done" "failed"))
-         (if done
-             (setq done process)
-           (delete-process process))))
-      (when done
-       (save-excursion
-         (set-buffer buffer)
-         (when
-             (or
-              (and tls-checktrust
-                   (progn
-                     (goto-char (point-min))
-                     (re-search-forward tls-untrusted nil t))
-                   (or
-                    (and (not (eq tls-checktrust 'ask))
-                         (message "The certificate presented by `%s' is NOT trusted." host))
-                    (not (yes-or-no-p
-                          (format "The certificate presented by `%s' is NOT trusted. Accept anyway? " host)))))
-              (and tls-hostmismatch
-                   (progn
-                     (goto-char (point-min))
-                     (re-search-forward tls-hostmismatch nil t))
-                   (not (yes-or-no-p
-                         (format "Host name in certificate doesn't match `%s'. Connect anyway? " host)))))
-           (setq done nil)
-           (delete-process process))))
-      (message "Opening TLS connection to `%s'...%s"
-              host (if done "done" "failed")))
+         (if (not done)
+             (delete-process process)
+           ;; advance point to after all informational messages that
+           ;; `openssl s_client' and `gnutls' print
+           (let ((start-of-data nil))
+             (while
+                  (not (setq start-of-data
+                             ;; the string matching `tls-end-of-info'
+                             ;; might come in separate chunks from
+                             ;; `accept-process-output', so start the
+                             ;; search where `tls-success' ended
+                             (save-excursion
+                               (if (re-search-forward tls-end-of-info nil t)
+                                   (match-end 0)))))
+               (accept-process-output process 1))
+             (if start-of-data
+                 ;; move point to start of client data
+                 (goto-char start-of-data)))
+         (setq done process))))
+      (when (and done
+                (or
+                 (and tls-checktrust
+                      (save-excursion
+                        (goto-char (point-min))
+                        (re-search-forward tls-untrusted nil t))
+                      (or
+                       (and (not (eq tls-checktrust 'ask))
+                            (message "The certificate presented by `%s' is \
+NOT trusted." host))
+                       (not (yes-or-no-p
+                             (format "The certificate presented by `%s' is \
+NOT trusted. Accept anyway? " host)))))
+                 (and tls-hostmismatch
+                      (save-excursion
+                        (goto-char (point-min))
+                        (re-search-forward tls-hostmismatch nil t))
+                      (not (yes-or-no-p
+                            (format "Host name in certificate doesn't \
+match `%s'. Connect anyway? " host))))))
+       (setq done nil)
+       (delete-process process)))
+    (message "Opening TLS connection to `%s'...%s"
+            host (if done "done" "failed"))
     (when use-temp-buffer
       (if done (set-process-buffer process nil))
       (kill-buffer buffer))