summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
authorMichael Albinus <michael.albinus@gmx.de>2018-04-19 11:04:01 +0200
committerMichael Albinus <michael.albinus@gmx.de>2018-04-19 11:04:01 +0200
commit4e464fa98ae677451b4e4b722b0cf545a97ebbba (patch)
treee694e794300787c87224eb761e833e15f2572713 /lisp
parent0ac64af1d4a9ff8af0f6418b81fc7ea6eed465db (diff)
downloademacs-4e464fa98ae677451b4e4b722b0cf545a97ebbba.tar.gz
Handle chrooted environments in Tramp
* doc/misc/tramp.texi (Frequently Asked Questions): New item, chrooted environments. * lisp/net/tramp.el (tramp-local-host-regexp): Make it a defcustom. Allow nil. (tramp-local-host-p): * lisp/net/tramp-sh.el (tramp-compute-multi-hops): Handle this.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/net/tramp-sh.el2
-rw-r--r--lisp/net/tramp.el15
2 files changed, 12 insertions, 5 deletions
diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el
index 3ba3d956efc..2fb5566a3bf 100644
--- a/lisp/net/tramp-sh.el
+++ b/lisp/net/tramp-sh.el
@@ -4634,7 +4634,7 @@ Goes through the list `tramp-inline-compress-commands'."
;; host name in their command template. In this case, the remote
;; file name must use either a local host name (first hop), or a
;; host name matching the previous hop.
- (let ((previous-host tramp-local-host-regexp))
+ (let ((previous-host (or tramp-local-host-regexp "")))
(setq choices target-alist)
(while (setq item (pop choices))
(let ((host (tramp-file-name-host item)))
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index 52ff021c500..5c785b16d89 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -428,13 +428,19 @@ host runs a registered shell, it shall be added to this list, too."
:require 'tramp)
;;;###tramp-autoload
-(defconst tramp-local-host-regexp
+(defcustom tramp-local-host-regexp
(concat
"\\`"
(regexp-opt
(list "localhost" "localhost6" (system-name) "127.0.0.1" "::1") t)
"\\'")
- "Host names which are regarded as local host.")
+ "Host names which are regarded as local host.
+If the local host runs a chrooted environment, set this to nil."
+ :version "27.1"
+ :group 'tramp
+ :type '(choice (const :tag "Chrooted environment" nil)
+ (regexp :tag "Host regexp"))
+ :require 'tramp)
(defvar tramp-completion-function-alist nil
"Alist of methods for remote files.
@@ -4239,11 +4245,12 @@ be granted."
;;;###tramp-autoload
(defun tramp-local-host-p (vec)
- "Return t if this points to the local host, nil otherwise."
+ "Return t if this points to the local host, nil otherwise.
+This handles also chrooted environments, which are not regarded as local."
(let ((host (tramp-file-name-host vec))
(port (tramp-file-name-port vec)))
(and
- (stringp host)
+ (stringp tramp-local-host-regexp) (stringp host)
(string-match tramp-local-host-regexp host)
;; A port is an indication for an ssh tunnel or alike.
(null port)