* net/tramp.el (tramp-action-login): Set connection property "login-as".
authorMichael Albinus <michael.albinus@gmx.de>
Sun, 22 Jan 2012 12:55:36 +0000 (13:55 +0100)
committerMichael Albinus <michael.albinus@gmx.de>
Sun, 22 Jan 2012 12:55:36 +0000 (13:55 +0100)
* 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)

lisp/ChangeLog
lisp/net/tramp-cache.el
lisp/net/tramp-sh.el
lisp/net/tramp.el

index 63679e1..8ada003 100644 (file)
@@ -1,3 +1,15 @@
+2012-01-22  Michael Albinus  <michael.albinus@gmx.de>
+
+       * 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  <michael.albinus@gmx.de>
 
        * net/tramp-sh.el (tramp-default-user-alist): Don't add "plink",
index 03a5fe5..d222dd1 100644 (file)
@@ -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)
index e078a22..38e1973 100644 (file)
@@ -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" "")
index 98295c6..f13315b 100644 (file)
@@ -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)