From: Michael Albinus Date: Sun, 22 Jan 2012 12:55:36 +0000 (+0100) Subject: * net/tramp.el (tramp-action-login): Set connection property "login-as". X-Git-Tag: emacs-pretest-24.0.93~91 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=a5509865d7a0dd40bfb6217693ca2684a517d6d0;p=emacs.git * net/tramp.el (tramp-action-login): Set connection property "login-as". * net/tramp-cache.el (tramp-dump-connection-properties): Do not dump properties, when "login-as" is set. * net/tramp-sh.el (tramp-methods): Add user spec to "pscp" and "psftp". (tramp-default-user-alist): Don't add "pscp". (tramp-do-copy-or-rename-file-out-of-band): Use connection property "login-as", if set. (Bug#10530) --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 63679e1580f..8ada003d23d 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,15 @@ +2012-01-22 Michael Albinus + + * net/tramp.el (tramp-action-login): Set connection property "login-as". + + * net/tramp-cache.el (tramp-dump-connection-properties): Do not dump + properties, when "login-as" is set. + + * net/tramp-sh.el (tramp-methods): Add user spec to "pscp" and "psftp". + (tramp-default-user-alist): Don't add "pscp". + (tramp-do-copy-or-rename-file-out-of-band): Use connection + property "login-as", if set. (Bug#10530) + 2012-01-21 Michael Albinus * net/tramp-sh.el (tramp-default-user-alist): Don't add "plink", diff --git a/lisp/net/tramp-cache.el b/lisp/net/tramp-cache.el index 03a5fe5b88e..d222dd1011d 100644 --- a/lisp/net/tramp-cache.el +++ b/lisp/net/tramp-cache.el @@ -243,7 +243,7 @@ PROPERTY is set persistent when KEY is a vector." (aset key 3 nil)) (let ((hash (or (gethash key tramp-cache-data) (puthash key (make-hash-table :test 'equal) - tramp-cache-data)))) + tramp-cache-data)))) (puthash property value hash) (setq tramp-cache-data-changed t) (tramp-message key 7 "%s %s" property value) @@ -329,10 +329,15 @@ KEY identifies the connection, it is either a process or a vector." tramp-cache-data-changed (stringp tramp-persistency-file-name)) (let ((cache (copy-hash-table tramp-cache-data))) - ;; Remove temporary data. + ;; Remove temporary data. If there is the key "login-as", we + ;; don't save either, because all other properties might + ;; depend on the login name, and we want to give the + ;; possibility to use another login name later on. (maphash (lambda (key value) - (if (and (vectorp key) (not (tramp-file-name-localname key))) + (if (and (vectorp key) + (not (tramp-file-name-localname key)) + (not (gethash "login-as" value))) (progn (remhash "process-name" value) (remhash "process-buffer" value) diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index e078a227061..38e19730a6d 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el @@ -380,7 +380,7 @@ detected as prompt when being sent on echoing hosts, therefore.") (tramp-remote-shell "/bin/sh") (tramp-remote-shell-args ("-c")) (tramp-copy-program "pscp") - (tramp-copy-args (("-P" "%p") ("-scp") ("-p" "%k") + (tramp-copy-args (("-l" "%u") ("-P" "%p") ("-scp") ("-p" "%k") ("-q") ("-r"))) (tramp-copy-keep-date t) (tramp-copy-recursive t) @@ -394,7 +394,7 @@ detected as prompt when being sent on echoing hosts, therefore.") (tramp-remote-shell "/bin/sh") (tramp-remote-shell-args ("-c")) (tramp-copy-program "pscp") - (tramp-copy-args (("-P" "%p") ("-sftp") ("-p" "%k") + (tramp-copy-args (("-l" "%u") ("-P" "%p") ("-sftp") ("-p" "%k") ("-q") ("-r"))) (tramp-copy-keep-date t) (tramp-copy-recursive t) @@ -419,13 +419,12 @@ detected as prompt when being sent on echoing hosts, therefore.") `(,(concat "\\`" (regexp-opt '("su" "sudo" "ksu")) "\\'") nil "root")) ;; Do not add "ssh" based methods, otherwise ~/.ssh/config would be ignored. -;; Do not add "plink" and "psftp", they ask interactively for the user. +;; Do not add "plink" based methods, they ask interactively for the user. ;;;###tramp-autoload (add-to-list 'tramp-default-user-alist `(,(concat "\\`" - (regexp-opt - '("rcp" "remcp" "rsh" "telnet" "krlogin" "pscp" "fcp")) + (regexp-opt '("rcp" "remcp" "rsh" "telnet" "krlogin" "fcp")) "\\'") nil ,(user-login-name))) @@ -2281,8 +2280,10 @@ The method used must be an out-of-band method." ;; Set variables for computing the prompt for reading ;; password. (setq tramp-current-method (tramp-file-name-method v) - tramp-current-user (tramp-file-name-user v) - tramp-current-host (tramp-file-name-real-host v)) + tramp-current-user (or (tramp-file-name-user v) + (tramp-get-connection-property + v "login-as" nil)) + tramp-current-host (tramp-file-name-real-host v)) ;; Expand hops. Might be necessary for gateway methods. (setq v (car (tramp-compute-multi-hops v))) @@ -2309,8 +2310,15 @@ The method used must be an out-of-band method." (setq port (string-to-number (match-string 2 host)) host (string-to-number (match-string 1 host)))) + ;; Check for user. There might be an interactive setting. + (setq user (or (tramp-file-name-user v) + (tramp-get-connection-property v "login-as" nil))) + ;; Compose copy command. - (setq spec (format-spec-make + (setq host (or host "") + user (or user "") + port (or port "") + spec (format-spec-make ?h host ?u user ?p port ?t (tramp-get-connection-property (tramp-get-connection-process v) "temp-file" "") diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index 98295c6617a..f13315bc662 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -3115,13 +3115,15 @@ beginning of local filename are not substituted." (defun tramp-action-login (proc vec) "Send the login name." (when (not (stringp tramp-current-user)) - (save-window-excursion - (let ((enable-recursive-minibuffers t)) - (pop-to-buffer (tramp-get-connection-buffer vec)) - (setq tramp-current-user (read-string (match-string 0)))))) - (tramp-message vec 3 "Sending login name `%s'" tramp-current-user) + (setq tramp-current-user + (with-connection-property vec "login-as" + (save-window-excursion + (let ((enable-recursive-minibuffers t)) + (pop-to-buffer (tramp-get-connection-buffer vec)) + (read-string (match-string 0))))))) (with-current-buffer (tramp-get-connection-buffer vec) (tramp-message vec 6 "\n%s" (buffer-string))) + (tramp-message vec 3 "Sending login name `%s'" tramp-current-user) (tramp-send-string vec (concat tramp-current-user tramp-local-end-of-line))) (defun tramp-action-password (proc vec)