From 6d4412eed75dcaa076cfd844e744be30144c0aa6 Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Fri, 26 Jul 2024 22:10:36 +0200 Subject: [PATCH] Tramp: Handle hops with "%" in their names * lisp/net/tramp.el (tramp-dissect-file-name, tramp-compute-multi-hops): Handle hops with "%" in their names, like USER%DOMAIN or POD%NAMESPACE. (cherry picked from commit d7665595f7bfca86b65e75fa624b0fc7a63fbb41) --- lisp/net/tramp.el | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index 33ff3319367..0ca525b137b 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -1768,17 +1768,23 @@ default values are used." (unless nodefault (when hop (setq v (tramp-dissect-hop-name hop) - hop (and hop (tramp-make-tramp-hop-name v)))) + hop (tramp-make-tramp-hop-name v))) (let ((tramp-default-host (or (and v (not (string-search "%h" (tramp-file-name-host v))) (tramp-file-name-host v)) tramp-default-host))) (setq method (tramp-find-method method user host) user (tramp-find-user method user host) - host (tramp-find-host method user host) - hop - (and hop - (format-spec hop (format-spec-make ?h host ?u user)))))) + host (tramp-find-host method user host)) + (when hop + ;; Replace placeholders. The hop could contain "%" + ;; which is not intended as format character, for + ;; example in USER%DOMAIN or POD%NAMESPACE. + (setq hop + (replace-regexp-in-string + (rx "%" (group (= 2 alnum))) "%%\\1" hop) + hop + (format-spec hop (format-spec-make ?h host ?u user)))))) ;; Return result. (prog1 @@ -4920,8 +4926,13 @@ Do not set it manually, it is used buffer-local in `tramp-get-lock-pid'.") (if (null proxy) ;; No more hops needed. (setq choices nil) - ;; Replace placeholders. + ;; Replace placeholders. The proxy could contain "%" which + ;; is not intended as format character, for example in + ;; USER%DOMAIN or POD%NAMESPACE. (setq proxy + (replace-regexp-in-string + (rx "%" (group (= 2 alnum))) "%%\\1" proxy) + proxy (format-spec proxy (format-spec-make -- 2.39.5