From fa965cbf7420c7ee5a0dde0df472592cd3aa2a1d Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Thu, 6 Mar 2014 14:23:04 +0100 Subject: [PATCH] * net/tramp.el (tramp-error): VEC-OR-PROC can be nil. (tramp-action-password): Clear password cache if needed. (tramp-read-passwd): Do not clear password cache. * net/tramp-gvfs.el (tramp-gvfs-handler-askpassword): Clear password cache unless it is the first password request. --- lisp/ChangeLog | 9 +++++++++ lisp/net/tramp-gvfs.el | 8 ++++++-- lisp/net/tramp.el | 26 +++++++++++++++----------- 3 files changed, 30 insertions(+), 13 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ae71a8f8e65..57057e8a24e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,12 @@ +2014-03-06 Michael Albinus + + * net/tramp.el (tramp-error): VEC-OR-PROC can be nil. + (tramp-action-password): Clear password cache if needed. + (tramp-read-passwd): Do not clear password cache. + + * net/tramp-gvfs.el (tramp-gvfs-handler-askpassword): Clear password + cache unless it is the first password request. + 2014-03-06 Glenn Morris * simple.el (newline): Doc tweak. diff --git a/lisp/net/tramp-gvfs.el b/lisp/net/tramp-gvfs.el index 320e00c681d..52189e091fb 100644 --- a/lisp/net/tramp-gvfs.el +++ b/lisp/net/tramp-gvfs.el @@ -1180,10 +1180,14 @@ ADDRESS can have the form \"xx:xx:xx:xx:xx:xx\" or \"[xx:xx:xx:xx:xx:xx]\"." (zerop (logand flags tramp-gvfs-password-need-username)))) (setq user (read-string "User name: "))) (when (and (zerop (length domain)) - (not (zerop (logand flags tramp-gvfs-password-need-domain)))) + (not + (zerop (logand flags tramp-gvfs-password-need-domain)))) (setq domain (read-string "Domain name: "))) (tramp-message l 6 "%S %S %S %d" message user domain flags) + (unless (tramp-get-connection-property l "first-password-request" nil) + (tramp-clear-passwd l)) + (setq tramp-current-method l-method tramp-current-user user tramp-current-host l-host @@ -1474,7 +1478,7 @@ connection if a previous connection has died for some reason." (format "Opening connection for %s using %s" host method) (format "Opening connection for %s@%s using %s" user host method)) - ;; Enable auth-source and password-cache. + ;; Enable `auth-source'. (tramp-set-connection-property vec "first-password-request" t) ;; There will be a callback of "askPassword" when a password is diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index 7d88869a0d1..face017946d 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -1560,12 +1560,13 @@ signal identifier to be raised, remaining arguments passed to `tramp-message'. Finally, signal SIGNAL is raised." (let (tramp-message-show-message) (tramp-backtrace vec-or-proc) - (tramp-message - vec-or-proc 1 "%s" - (error-message-string - (list signal - (get signal 'error-message) - (apply 'format fmt-string arguments)))) + (when vec-or-proc + (tramp-message + vec-or-proc 1 "%s" + (error-message-string + (list signal + (get signal 'error-message) + (apply 'format fmt-string arguments))))) (signal signal (list (apply 'format fmt-string arguments))))) (defsubst tramp-error-with-buffer @@ -3400,6 +3401,12 @@ of." (with-current-buffer (process-buffer proc) (let ((enable-recursive-minibuffers t) (case-fold-search t)) + ;; Let's check whether a wrong password has been sent already. + ;; Sometimes, the process returns a new password request + ;; immediately after rejecting the previous (wrong) one. + (goto-char (point-min)) + (when (search-forward-regexp tramp-wrong-passwd-regexp nil t) + (tramp-clear-passwd vec)) (tramp-check-for-regexp proc tramp-password-prompt-regexp) (tramp-message vec 3 "Sending %s" (match-string 1)) ;; We don't call `tramp-send-string' in order to hide the @@ -3508,8 +3515,8 @@ The terminal type can be configured with `tramp-terminal-type'." PROC and VEC indicate the remote connection to be used. POS, if set, is the starting point of the region to be deleted in the connection buffer." - ;; Enable `auth-source' and `password-cache'. We must use - ;; tramp-current-* variables in case we have several hops. + ;; Enable `auth-source'. We must use tramp-current-* variables in + ;; case we have several hops. (tramp-set-connection-property (tramp-dissect-file-name (tramp-make-tramp-file-name @@ -4131,9 +4138,6 @@ Invokes `password-read' if available, `read-passwd' else." "password" tramp-current-host tramp-current-method))) ;; Try the password cache. (when (functionp 'password-read) - (unless (tramp-get-connection-property - v "first-password-request" nil) - (tramp-compat-funcall 'password-cache-remove key)) (let ((password (tramp-compat-funcall 'password-read pw-prompt key))) (tramp-compat-funcall 'password-cache-add key password) -- 2.39.2