Merge chagnes made in Gnus trunk.
auth.texi (GnuPG and EasyPG Assistant Configuration): Mention the default now is to have two files in `auth-sources'. nnimap.el (nnimap-open-connection-1): Delete duplicate server names when getting credentials. gnus-util.el (gnus-delete-duplicates): New function. nnimap.el (nnimap-credentials): Instead of picking the first port as a creation default, pass the whole port list down. It will be completed. auth-source.el (auth-source-search): Updated docs to talk about multiple creation choices. (auth-source-netrc-create): Accept a list as a value (from the search parameters) and do completion on that list. Keep a separate netrc line with the password obscured for showing the user. nnimap.el (nnimap-open-connection-1): Make the `nnimap-address' the first choice to `auth-source-search' so it will be used for entry creation instead of the server's Gnus-specific name. (nnimap-credentials): Rely on the auth-source library to select which port is actually wanted in the new netrc entry, so don't override `auth-source-creation-defaults'.
This commit is contained in:
parent
2a095cec7a
commit
7ba93e9439
6 changed files with 81 additions and 22 deletions
|
|
@ -2,6 +2,8 @@
|
|||
|
||||
* auth.texi (Help for users): Use :port instead of :protocol for all
|
||||
auth-source docs.
|
||||
(GnuPG and EasyPG Assistant Configuration): Mention the default now is
|
||||
to have two files in `auth-sources'.
|
||||
|
||||
2011-02-16 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
|
|
|
|||
|
|
@ -262,7 +262,9 @@ TODO: how to include docstring?
|
|||
@appendix GnuPG and EasyPG Assistant Configuration
|
||||
|
||||
If you don't customize @code{auth-sources}, the auth-source library
|
||||
reads @code{~/.authinfo.gpg}, which is a GnuPG encrypted file.
|
||||
reads @code{~/.authinfo.gpg}, which is a GnuPG encrypted file. Then
|
||||
it will check @code{~/.authinfo} but it's not recommended to use such
|
||||
an unencrypted file.
|
||||
|
||||
In Emacs 23 or later there is an option @code{auto-encryption-mode} to
|
||||
automatically decrypt @code{*.gpg} files. It is enabled by default.
|
||||
|
|
|
|||
|
|
@ -1,5 +1,29 @@
|
|||
2011-02-17 Lars Ingebrigtsen <larsi@gnus.org>
|
||||
|
||||
* nnimap.el (nnimap-open-connection-1): Delete duplicate server names
|
||||
when getting credentials.
|
||||
|
||||
* gnus-util.el (gnus-delete-duplicates): New function.
|
||||
|
||||
2011-02-17 Teodor Zlatanov <tzz@lifelogs.com>
|
||||
|
||||
* nnimap.el (nnimap-credentials): Instead of picking the first port as
|
||||
a creation default, pass the whole port list down. It will be
|
||||
completed.
|
||||
|
||||
* auth-source.el (auth-source-search): Updated docs to talk about
|
||||
multiple creation choices.
|
||||
(auth-source-netrc-create): Accept a list as a value (from the search
|
||||
parameters) and do completion on that list. Keep a separate netrc line
|
||||
with the password obscured for showing the user.
|
||||
|
||||
* nnimap.el (nnimap-open-connection-1): Make the `nnimap-address' the
|
||||
first choice to `auth-source-search' so it will be used for entry
|
||||
creation instead of the server's Gnus-specific name.
|
||||
(nnimap-credentials): Rely on the auth-source library to select which
|
||||
port is actually wanted in the new netrc entry, so don't override
|
||||
`auth-source-creation-defaults'.
|
||||
|
||||
* auth-source.el (auth-source-netrc-parse): Use :port instead of
|
||||
:protocol and accept a missing user, host, or port as a wildcard match.
|
||||
(auth-source-debug): Default to off.
|
||||
|
|
|
|||
|
|
@ -453,8 +453,8 @@ which says:
|
|||
search to find only entries that have P set to 'pppp'.\"
|
||||
|
||||
When multiple values are specified in the search parameter, the
|
||||
first one is used for creation. So :host (X Y Z) would create a
|
||||
token for host X, for instance.
|
||||
user is prompted for which one. So :host (X Y Z) would ask the
|
||||
user to choose between X, Y, and Z.
|
||||
|
||||
This creation can fail if the search was not specific enough to
|
||||
create a new token (it's up to the backend to decide that). You
|
||||
|
|
@ -851,6 +851,7 @@ See `auth-source-search' for details on SPEC."
|
|||
(required (append base-required create-extra))
|
||||
(file (oref backend source))
|
||||
(add "")
|
||||
(show "")
|
||||
;; `valist' is an alist
|
||||
valist
|
||||
;; `artificial' will be returned if no creation is needed
|
||||
|
|
@ -858,12 +859,16 @@ See `auth-source-search' for details on SPEC."
|
|||
|
||||
;; only for base required elements (defined as function parameters):
|
||||
;; fill in the valist with whatever data we may have from the search
|
||||
;; we take the first value if it's a list, the whole value otherwise
|
||||
;; we complete the first value if it's a list and use the value otherwise
|
||||
(dolist (br base-required)
|
||||
(when (symbol-value br)
|
||||
(aput 'valist br (if (listp (symbol-value br))
|
||||
(nth 0 (symbol-value br))
|
||||
(symbol-value br)))))
|
||||
(let ((br-choice (cond
|
||||
;; all-accepting choice (predicate is t)
|
||||
((eq t (symbol-value br)) nil)
|
||||
;; just the value otherwise
|
||||
(t (symbol-value br)))))
|
||||
(when br-choice
|
||||
(aput 'valist br br-choice)))))
|
||||
|
||||
;; for extra required elements, see if the spec includes a value for them
|
||||
(dolist (er create-extra)
|
||||
|
|
@ -894,6 +899,8 @@ See `auth-source-search' for details on SPEC."
|
|||
(user-value (aget valist 'user))
|
||||
(host-value (aget valist 'host))
|
||||
(port-value (aget valist 'port))
|
||||
;; note this handles lists by just printing them
|
||||
;; later we allow the user to use completing-read to pick
|
||||
(info-so-far (concat (if user-value
|
||||
(format "%s@" user-value)
|
||||
"[USER?]")
|
||||
|
|
@ -921,6 +928,16 @@ See `auth-source-search' for details on SPEC."
|
|||
(format "Enter %s for %s%s: "
|
||||
r info-so-far default-string)
|
||||
nil nil default))
|
||||
((listp data)
|
||||
(completing-read
|
||||
(format "Enter %s for %s (TAB to see the choices): "
|
||||
r info-so-far)
|
||||
data
|
||||
nil ; no predicate
|
||||
t ; require a match
|
||||
;; note the default is nil, but if the user
|
||||
;; hits RET we'll get "", which is handled OK later
|
||||
nil))
|
||||
(t data))))
|
||||
|
||||
(when data
|
||||
|
|
@ -934,20 +951,25 @@ See `auth-source-search' for details on SPEC."
|
|||
;; when r is not an empty string...
|
||||
(when (and (stringp data)
|
||||
(< 0 (length data)))
|
||||
;; append the key (the symbol name of r) and the value in r
|
||||
(setq add (concat add
|
||||
(format "%s%s %S"
|
||||
;; prepend a space
|
||||
(if (zerop (length add)) "" " ")
|
||||
;; remap auth-source tokens to netrc
|
||||
(case r
|
||||
(let ((printer (lambda (hide)
|
||||
;; append the key (the symbol name of r)
|
||||
;; and the value in r
|
||||
(format "%s%s %S"
|
||||
;; prepend a space
|
||||
(if (zerop (length add)) "" " ")
|
||||
;; remap auth-source tokens to netrc
|
||||
(case r
|
||||
('user "login")
|
||||
('host "machine")
|
||||
('secret "password")
|
||||
('port "port") ; redundant but clearer
|
||||
(t (symbol-name r)))
|
||||
;; the value will be printed in %S format
|
||||
data))))))
|
||||
;; the value will be printed in %S format
|
||||
(if (and hide (eq r 'secret))
|
||||
"HIDDEN_SECRET"
|
||||
data)))))
|
||||
(setq add (concat add (funcall printer nil)))
|
||||
(setq show (concat show (funcall printer t)))))))
|
||||
|
||||
(with-temp-buffer
|
||||
(when (file-exists-p file)
|
||||
|
|
@ -964,7 +986,7 @@ See `auth-source-search' for details on SPEC."
|
|||
(goto-char (point-max))
|
||||
|
||||
;; ask AFTER we've successfully opened the file
|
||||
(if (y-or-n-p (format "Add to file %s: line [%s]" file add))
|
||||
(if (y-or-n-p (format "Add to file %s: line [%s]" file show))
|
||||
(progn
|
||||
(unless (bolp)
|
||||
(insert "\n"))
|
||||
|
|
|
|||
|
|
@ -871,6 +871,15 @@ Bind `print-quoted' and `print-readably' to t, and `print-length' and
|
|||
(when (file-exists-p file)
|
||||
(delete-file file)))
|
||||
|
||||
(defun gnus-delete-duplicates (list)
|
||||
"Remove duplicate entries from LIST."
|
||||
(let ((result nil))
|
||||
(while list
|
||||
(unless (member (car list) result)
|
||||
(push (car list) result))
|
||||
(pop list))
|
||||
(nreverse result)))
|
||||
|
||||
(defun gnus-delete-directory (directory)
|
||||
"Delete files in DIRECTORY. Subdirectories remain.
|
||||
If there's no subdirectory, delete DIRECTORY as well."
|
||||
|
|
|
|||
|
|
@ -277,8 +277,7 @@ textual parts.")
|
|||
(current-buffer)))
|
||||
|
||||
(defun nnimap-credentials (address ports)
|
||||
(let* ((auth-source-creation-defaults `((port . ,(nth 0 ports))))
|
||||
(found (nth 0 (auth-source-search :max 1
|
||||
(let* ((found (nth 0 (auth-source-search :max 1
|
||||
:host address
|
||||
:port ports
|
||||
:create t)))
|
||||
|
|
@ -385,9 +384,10 @@ textual parts.")
|
|||
;; Look for the credentials based on
|
||||
;; the virtual server name and the address
|
||||
(nnimap-credentials
|
||||
(list
|
||||
(nnoo-current-server 'nnimap)
|
||||
nnimap-address)
|
||||
(gnus-delete-duplicates
|
||||
(list
|
||||
nnimap-address
|
||||
(nnoo-current-server 'nnimap)))
|
||||
ports))))
|
||||
(setq nnimap-object nil)
|
||||
(let ((nnimap-inhibit-logging t))
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue