1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-01-30 12:21:25 -08:00

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.
This commit is contained in:
Michael Albinus 2018-04-19 11:04:01 +02:00
parent 0ac64af1d4
commit 4e464fa98a
3 changed files with 23 additions and 5 deletions

View file

@ -3294,6 +3294,7 @@ Keep the file @option{tramp-persistency-file-name}, which is where
@value{tramp} caches remote information about hosts and files. Caching
is enabled by default. Don't disable it.
@vindex remote-file-name-inhibit-cache
Set @code{remote-file-name-inhibit-cache} to @code{nil} if remote
files are not independently updated outside @value{tramp}'s control.
That cache cleanup will be necessary if the remote directories or
@ -3427,6 +3428,16 @@ first saving to a temporary file.
@end itemize
@item
@value{tramp} fails in a chrooted environment
@vindex tramp-local-host-regexp
When connecting to a local host, @value{tramp} uses some internal
optimizations. They fail, when there is a chrooted environment. In
order to disable those optimizations, set user option
@option{tramp-local-host-regexp} to @code{nil}.
@item
@value{tramp} does not recognize if a @command{ssh} session hangs

View file

@ -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)))

View file

@ -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)