From ddb7ffeeb8ace6501eb453f50f0f9f6852eda21f Mon Sep 17 00:00:00 2001 From: Lars Magne Ingebrigtsen Date: Wed, 22 Jun 2011 16:48:31 +0200 Subject: [PATCH] When the .authinfo file has a user name but not a password, prompt for the password. --- lisp/ChangeLog | 2 ++ lisp/gnus/auth-source.el | 10 ++++++++-- lisp/mail/smtpmail.el | 15 +++++++++------ 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 0c72fbf47db..57f4608ab72 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -2,6 +2,8 @@ * mail/smtpmail.el (smtpmail-via-smtp): Make sure we don't send QUIT twice. + (smtpmail-try-auth-methods): Require user name and password from + auth-source. 2011-06-22 Martin Rudalics diff --git a/lisp/gnus/auth-source.el b/lisp/gnus/auth-source.el index d3261b137b2..6fe033fea79 100644 --- a/lisp/gnus/auth-source.el +++ b/lisp/gnus/auth-source.el @@ -713,7 +713,8 @@ Returns the deleted entries." when (string-match (concat "^" auth-source-magic) (symbol-name sym)) ;; remove that key - do (password-cache-remove (symbol-name sym)))) + do (password-cache-remove (symbol-name sym))) + (setq auth-source-netrc-cache nil)) (defun auth-source-remember (spec found) "Remember FOUND search results for SPEC." @@ -1144,6 +1145,9 @@ See `auth-source-search' for details on SPEC." ;; we know (because of an assertion in auth-source-search) that the ;; :create parameter is either t or a list (which includes nil) (create-extra (if (eq t create) nil create)) + (current-data (car (auth-source-search :max 1 + :host host + :port port))) (required (append base-required create-extra)) (file (oref backend source)) (add "") @@ -1178,7 +1182,9 @@ See `auth-source-search' for details on SPEC." (dolist (r required) (let* ((data (aget valist r)) ;; take the first element if the data is a list - (data (auth-source-netrc-element-or-first data)) + (data (or (auth-source-netrc-element-or-first data) + (plist-get current-data + (intern (format ":%s" r) obarray)))) ;; this is the default to be offered (given-default (aget auth-source-creation-defaults r)) ;; the default supplementals are simple: diff --git a/lisp/mail/smtpmail.el b/lisp/mail/smtpmail.el index 58a517ba836..b1685067c08 100644 --- a/lisp/mail/smtpmail.el +++ b/lisp/mail/smtpmail.el @@ -483,12 +483,15 @@ The list is in preference order.") '((user . "SMTP user at %h: ") (secret . "SMTP password for %u@%h: "))) (auth-info (car - (auth-source-search :max 1 - :host host - :port (if port - (format "%s" port) - "smtp") - :create ask-for-password))) + (auth-source-search + :max 1 + :host host + :port (if port + (format "%s" port) + "smtp") + :require (and ask-for-password + '(:user :secret)) + :create ask-for-password))) (user (plist-get auth-info :user)) (password (plist-get auth-info :secret)) (save-function (and ask-for-password -- 2.39.2