From 2db18f3ffa5ade74429c6533e4bb22a3ee93cb6d Mon Sep 17 00:00:00 2001 From: Lars Magne Ingebrigtsen Date: Sun, 26 Jun 2011 10:13:07 +0200 Subject: [PATCH] Use built-in TLS support if `gnutls-available-p' is true. --- lisp/ChangeLog | 6 ++++++ lisp/net/network-stream.el | 17 +++++++++++------ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 52cb69b7d66..9c67ce8e0e5 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2011-06-26 Lars Magne Ingebrigtsen + + * net/network-stream.el (network-stream-open-starttls): Use + built-in TLS support if `gnutls-available-p' is true. + (network-stream-open-tls): Ditto. + 2011-06-26 Leo Liu * register.el (registerv): New struct. diff --git a/lisp/net/network-stream.el b/lisp/net/network-stream.el index 161d7252d6e..94507f16540 100644 --- a/lisp/net/network-stream.el +++ b/lisp/net/network-stream.el @@ -46,7 +46,8 @@ (require 'starttls) (require 'auth-source) -(declare-function gnutls-negotiate "gnutls" t t) ; defun* +(autoload 'gnutls-negotiate "gnutls") +(autoload 'open-gnutls-stream "gnutls") ;;;###autoload (defun open-network-stream (name buffer host service &rest parameters) @@ -207,11 +208,13 @@ functionality. (greeting (network-stream-get-response stream start eoc)) (capabilities (network-stream-command stream capability-command eoc)) (resulting-type 'plain) + (builtin-starttls (and (fboundp 'gnutls-available-p) + (gnutls-available-p))) starttls-command) ;; If we have built-in STARTTLS support, try to upgrade the ;; connection. - (when (and (or (fboundp 'open-gnutls-stream) + (when (and (or builtin-starttls (and (or require-tls (plist-get parameters :use-starttls-if-possible)) (executable-find "gnutls-cli"))) @@ -221,7 +224,7 @@ functionality. (not (eq (plist-get parameters :type) 'plain))) ;; If using external STARTTLS, drop this connection and start ;; anew with `starttls-open-stream'. - (unless (fboundp 'open-gnutls-stream) + (unless builtin-starttls (delete-process stream) (setq start (with-current-buffer buffer (point-max))) (let* ((starttls-use-gnutls t) @@ -248,7 +251,7 @@ functionality. (when (string-match success-string (network-stream-command stream starttls-command eoc)) ;; The server said it was OK to begin STARTTLS negotiations. - (if (fboundp 'open-gnutls-stream) + (if builtin-starttls (let ((cert (network-stream-certificate host service parameters))) (gnutls-negotiate :process stream :hostname host :keylist (and cert (list cert)))) @@ -296,7 +299,8 @@ functionality. (defun network-stream-open-tls (name buffer host service parameters) (with-current-buffer buffer (let* ((start (point-max)) - (use-builtin-gnutls (fboundp 'open-gnutls-stream)) + (use-builtin-gnutls (and (fboundp 'gnutls-available-p) + (gnutls-available-p))) (stream (funcall (if use-builtin-gnutls 'open-gnutls-stream @@ -307,7 +311,8 @@ functionality. (list nil nil nil 'plain) ;; If we're using tls.el, we have to delete the output from ;; openssl/gnutls-cli. - (when (and (null use-builtin-gnutls) eoc) + (when (and (null use-builtin-gnutls) + eoc) (network-stream-get-response stream start eoc) (goto-char (point-min)) (when (re-search-forward eoc nil t) -- 2.11.4.GIT