]> code.delx.au - gnu-emacs/blobdiff - lisp/net/network-stream.el
* lisp/net/tramp-sh.el (tramp-methods) <doas>: Add. (Bug#22542)
[gnu-emacs] / lisp / net / network-stream.el
index e7b3150b792a7f4ac3b0adce9aad36a69dc7665c..59ac2995c05c814568fc6859e2fbdc163a135f22 100644 (file)
@@ -1,6 +1,6 @@
 ;;; network-stream.el --- open network processes, possibly with encryption
 
-;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2016 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: network
@@ -46,6 +46,7 @@
 (require 'starttls)
 (require 'auth-source)
 (require 'nsm)
+(require 'puny)
 
 (autoload 'gnutls-negotiate "gnutls")
 (autoload 'open-gnutls-stream "gnutls")
@@ -121,7 +122,7 @@ values:
 
 :client-certificate should either be a list where the first
   element is the certificate key file name, and the second
-  element is the certificate file name itself, or `t', which
+  element is the certificate file name itself, or t, which
   means that `auth-source' will be queried for the key and the
   certificate.  This parameter will only be used when doing TLS
   or STARTTLS connections.
@@ -148,7 +149,7 @@ asynchronously, if possible."
                                (plist-get parameters :capability-command))))))
        ;; The simplest case: wrapper around `make-network-process'.
        (make-network-process :name name :buffer buffer
-                             :host host :service service
+                             :host (puny-encode-domain host) :service service
                              :nowait (plist-get parameters :nowait))
       (let ((work-buffer (or buffer
                             (generate-new-buffer " *stream buffer*")))
@@ -198,7 +199,8 @@ asynchronously, if possible."
 (defun network-stream-open-plain (name buffer host service parameters)
   (let ((start (with-current-buffer buffer (point)))
        (stream (make-network-process :name name :buffer buffer
-                                     :host host :service service
+                                     :host (puny-encode-domain host)
+                                      :service service
                                      :nowait (plist-get parameters :nowait))))
     (when (plist-get parameters :warn-unless-encrypted)
       (setq stream (nsm-verify-connection stream host service nil t)))
@@ -219,7 +221,8 @@ asynchronously, if possible."
                                 eoc))
         ;; Return (STREAM GREETING CAPABILITIES RESULTING-TYPE)
         (stream (make-network-process :name name :buffer buffer
-                                      :host host :service service))
+                                      :host (puny-encode-domain host)
+                                       :service service))
         (greeting (and (not (plist-get parameters :nogreeting))
                        (network-stream-get-response stream start eoc)))
         (capabilities (network-stream-command stream capability-command
@@ -296,7 +299,8 @@ asynchronously, if possible."
          (unless require-tls
            (setq stream
                  (make-network-process :name name :buffer buffer
-                                       :host host :service service))
+                                       :host (puny-encode-domain host)
+                                        :service service))
            (network-stream-get-response stream start eoc)))
        ;; Re-get the capabilities, which may have now changed.
        (setq capabilities
@@ -374,10 +378,12 @@ asynchronously, if possible."
          (when (re-search-forward eoc nil t)
            (goto-char (match-beginning 0))
            (delete-region (point-min) (line-beginning-position))))
-       (let* ((capability-command (plist-get parameters :capability-command)))
+       (let ((capability-command (plist-get parameters :capability-command))
+             (eo-capa (or (plist-get parameters :end-of-capability)
+                          eoc)))
          (list stream
                (network-stream-get-response stream start eoc)
-               (network-stream-command stream capability-command eoc)
+               (network-stream-command stream capability-command eo-capa)
                'tls))))))
 
 (defun network-stream-open-shell (name buffer host service parameters)