From: Lars Ingebrigtsen Date: Mon, 24 Dec 2012 12:14:04 +0000 (+0100) Subject: Make smtpmail forget the password if the server says it's invalid X-Git-Tag: emacs-24.3.90~173^2~7^2~505 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=e7d52a4de53b86c780c9ee0fbd6239450550756f;p=emacs.git Make smtpmail forget the password if the server says it's invalid * mail/smtpmail.el (smtpmail-try-auth-method): Refactored out into its own function. (smtpmail-try-auth-methods): Forget the user name/password if the login is unsuccessful. Fixes: debbugs:12424 --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index fa5985de74d..1438a230550 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2012-12-24 Lars Ingebrigtsen + + * mail/smtpmail.el (smtpmail-try-auth-method): Refactored out into + its own function. + (smtpmail-try-auth-methods): Forget the user name/password if the + login is unsuccessful (bug#12424). + 2012-12-22 Michael Albinus * notifications.el (notifications-notify): Protect body with diff --git a/lisp/mail/smtpmail.el b/lisp/mail/smtpmail.el index 69a405436a7..db7b003ca5c 100644 --- a/lisp/mail/smtpmail.el +++ b/lisp/mail/smtpmail.el @@ -529,6 +529,18 @@ The list is in preference order.") password (plist-get auth-info :secret))) (when (functionp password) (setq password (funcall password))) + (let ((result (catch 'done + (smtpmail-try-auth-method process mech user password)))) + (if (stringp result) + (progn + (auth-source-forget+ :host host :port port) + (throw 'done result)) + (when save-function + (funcall save-function)) + result)))) + +(defun smtpmail-try-auth-method (process mech user password) + (let (ret) (cond ((or (not mech) (not user) @@ -554,16 +566,11 @@ The list is in preference order.") ;; are taken as a response to the server, and the ;; authentication fails. (encoded (base64-encode-string response t))) - (smtpmail-command-or-throw process encoded) - (when save-function - (funcall save-function))))) + (smtpmail-command-or-throw process encoded)))) ((eq mech 'login) (smtpmail-command-or-throw process "AUTH LOGIN") - (smtpmail-command-or-throw - process (base64-encode-string user t)) - (smtpmail-command-or-throw process (base64-encode-string password t)) - (when save-function - (funcall save-function))) + (smtpmail-command-or-throw process (base64-encode-string user t)) + (smtpmail-command-or-throw process (base64-encode-string password t))) ((eq mech 'plain) ;; We used to send an empty initial request, and wait for an ;; empty response, and then send the password, but this @@ -574,9 +581,7 @@ The list is in preference order.") process (concat "AUTH PLAIN " (base64-encode-string (concat "\0" user "\0" password) t)) - 235) - (when save-function - (funcall save-function))) + 235)) (t (error "Mechanism %s not implemented" mech)))))