]> git.eshelyaron.com Git - emacs.git/commitdiff
net/tramp.el (tramp-ssh-controlmaster-options): Use "%C"
authorMichael Albinus <michael.albinus@gmx.de>
Mon, 2 Feb 2015 09:16:04 +0000 (10:16 +0100)
committerMichael Albinus <michael.albinus@gmx.de>
Mon, 2 Feb 2015 09:16:04 +0000 (10:16 +0100)
Fixes: debbugs:19702
* net/tramp.el (tramp-ssh-controlmaster-options): Use "%C" for
ControlPath if possible.

lisp/ChangeLog
lisp/net/tramp.el

index cc42bcecc9c9976a746a0efc7f9efd6f434b1b25..8ef533e1aa6a8387e555f1c5ba72e7bcffa225a9 100644 (file)
@@ -1,3 +1,8 @@
+2015-02-02  Michael Albinus  <michael.albinus@gmx.de>
+
+       * net/tramp.el (tramp-ssh-controlmaster-options): Use "%C" for
+       ControlPath if possible.  (Bug#19702)
+
 2015-02-02  Glenn Morris  <rgm@gnu.org>
 
        * emacs-lisp/authors.el (authors-obsolete-files-regexps)
index 3afb487ec3d339dd591126fb64480e941ae83518..c442806b90f7cf31f4a9e9cd3a78eb56a7afd477 100644 (file)
@@ -311,17 +311,25 @@ useful only in combination with `tramp-default-proxies-alist'.")
   (let ((result "")
        (case-fold-search t))
     (ignore-errors
-      (with-temp-buffer
-       (call-process "ssh" nil t nil "-o" "ControlMaster")
-       (goto-char (point-min))
-       (when (search-forward-regexp "missing.+argument" nil t)
-         (setq result "-o ControlPath=%t.%%r@%%h:%%p -o ControlMaster=auto")))
-      (unless (zerop (length result))
+      (when (executable-find "ssh")
        (with-temp-buffer
-         (call-process "ssh" nil t nil "-o" "ControlPersist")
+         (call-process "ssh" nil t nil "-o" "ControlMaster")
          (goto-char (point-min))
          (when (search-forward-regexp "missing.+argument" nil t)
-           (setq result (concat result " -o ControlPersist=no"))))))
+           (setq result "-o ControlMaster=auto")))
+       (unless (zerop (length result))
+         (with-temp-buffer
+           (call-process
+            "ssh" nil t nil "-o" "ControlPath=%C" "host.does.not.exist")
+           (goto-char (point-min))
+           (if (search-forward-regexp "unknown.+key" nil t)
+               (setq result (concat result " -o ControlPath=%t.%%r@%%h:%%p"))
+             (setq result (concat result " -o ControlPath=%t.%%C"))))
+         (with-temp-buffer
+           (call-process "ssh" nil t nil "-o" "ControlPersist")
+           (goto-char (point-min))
+           (when (search-forward-regexp "missing.+argument" nil t)
+             (setq result (concat result " -o ControlPersist=no")))))))
     result)
     "Call ssh to detect whether it supports the Control* arguments.
 Return a string to be used in `tramp-methods'.")