Commit 7ba93e94 authored by Gnus developers's avatar Gnus developers Committed by Katsumi Yamaoka

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'.
parent 2a095cec
......@@ -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.
......
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))
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment