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
This commit is contained in:
parent
f9e7c67e4c
commit
e7d52a4de5
2 changed files with 23 additions and 11 deletions
|
@ -1,3 +1,10 @@
|
|||
2012-12-24 Lars Ingebrigtsen <larsi@gnus.org>
|
||||
|
||||
* 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 <michael.albinus@gmx.de>
|
||||
|
||||
* notifications.el (notifications-notify): Protect body with
|
||||
|
|
|
@ -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)))))
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue