From f1e06f7bffc1407f7e597f714b2969fc6d1d8eed Mon Sep 17 00:00:00 2001 From: Thierry Volpiatto Date: Sun, 23 Mar 2014 10:22:16 +0100 Subject: [PATCH] * net/tramp.el (tramp-read-passwd): Suspend the timers while reading the password. --- lisp/ChangeLog | 5 ++++ lisp/net/tramp.el | 76 ++++++++++++++++++++++++++--------------------- 2 files changed, 47 insertions(+), 34 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index feb78f59fc7..f00bef537f6 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2014-03-23 Thierry Volpiatto + + * net/tramp.el (tramp-read-passwd): Suspend the timers while reading + the password. + 2014-03-23 Dmitry Gutov * emacs-lisp/package.el (package-show-package-list): If the buffer diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index b9b64ed70f8..5f448ecdbbd 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -4119,40 +4119,48 @@ Invokes `password-read' if available, `read-passwd' else." (with-current-buffer (process-buffer proc) (tramp-check-for-regexp proc tramp-password-prompt-regexp) (format "%s for %s " (capitalize (match-string 1)) key)))) - auth-info auth-passwd) - (with-parsed-tramp-file-name key nil - (prog1 - (or - ;; See if auth-sources contains something useful, if it's - ;; bound. `auth-source-user-or-password' is an obsoleted - ;; function, it has been replaced by `auth-source-search'. - (and (boundp 'auth-sources) - (tramp-get-connection-property v "first-password-request" nil) - ;; Try with Tramp's current method. - (if (fboundp 'auth-source-search) - (setq auth-info - (tramp-compat-funcall - 'auth-source-search - :max 1 - :user (or tramp-current-user t) - :host tramp-current-host - :port tramp-current-method) - auth-passwd (plist-get (nth 0 auth-info) :secret) - auth-passwd (if (functionp auth-passwd) - (funcall auth-passwd) - auth-passwd)) - (tramp-compat-funcall - 'auth-source-user-or-password - "password" tramp-current-host tramp-current-method))) - ;; Try the password cache. - (when (functionp 'password-read) - (let ((password - (tramp-compat-funcall 'password-read pw-prompt key))) - (tramp-compat-funcall 'password-cache-add key password) - password)) - ;; Else, get the password interactively. - (read-passwd pw-prompt)) - (tramp-set-connection-property v "first-password-request" nil))))) + ;; We suspend the timers while reading the password. + (stimers (with-timeout-suspend)) + auth-info auth-passwd) + + (unwind-protect + (with-parsed-tramp-file-name key nil + (prog1 + (or + ;; See if auth-sources contains something useful, if + ;; it's bound. `auth-source-user-or-password' is an + ;; obsoleted function, it has been replaced by + ;; `auth-source-search'. + (and (boundp 'auth-sources) + (tramp-get-connection-property + v "first-password-request" nil) + ;; Try with Tramp's current method. + (if (fboundp 'auth-source-search) + (setq auth-info + (tramp-compat-funcall + 'auth-source-search + :max 1 + :user (or tramp-current-user t) + :host tramp-current-host + :port tramp-current-method) + auth-passwd (plist-get (nth 0 auth-info) :secret) + auth-passwd (if (functionp auth-passwd) + (funcall auth-passwd) + auth-passwd)) + (tramp-compat-funcall + 'auth-source-user-or-password + "password" tramp-current-host tramp-current-method))) + ;; Try the password cache. + (when (functionp 'password-read) + (let ((password + (tramp-compat-funcall 'password-read pw-prompt key))) + (tramp-compat-funcall 'password-cache-add key password) + password)) + ;; Else, get the password interactively. + (read-passwd pw-prompt)) + (tramp-set-connection-property v "first-password-request" nil))) + ;; Reenable the timers. + (with-timeout-unsuspend stimers)))) ;;;###tramp-autoload (defun tramp-clear-passwd (vec) -- 2.39.2