Rewrite of auth-source.el and change all the API calls.
authorTed Zlatanov <tzz@lifelogs.com>
Sat, 12 Feb 2011 13:37:18 +0000 (07:37 -0600)
committerTed Zlatanov <tzz@lifelogs.com>
Sat, 12 Feb 2011 13:41:17 +0000 (07:41 -0600)
Merged from tzz-auth-source-rewrite branch with slight rebasing to
preserve 0bca1908b8a435b5ade1dbebeb9f98207e81d9c4 and
bcfcbbaf5361e3019ab21b4e96967150f74e2a62 to nntp.el and
proto-stream.el respectively.

* sieve-manage.el: Autoload `auth-source-search'.
(sieve-sasl-auth): Use it.

* nnimap.el: Autoload `auth-source-forget+'.
(nnimap-open-connection-1): Use it if the connection fails.

* password-cache.el (password-cache-remove): Accept secrets that are
not strings.

* mail-source.el: Autoload `auth-source-search'.
(mail-source-keyword-map): Note order matters.
(mail-source-set-1): Get all the mail-source source values and
defaults and search auth-source on those if needed.  This can all
probably be simplified.

* nnimap.el: Autoload `auth-source-search'.
(nnimap-credentials): Use it.
(nnimap-open-connection-1): Ask for the virtual server and physical
address in one shot.

* nntp.el: Autoload `auth-source-search'.
(nntp-send-authinfo): Use it.  Note TODO.

* auth-source.el: Require `password-cache'.
(auth-source-hide-passwords, auth-source-cache): Remove and mark
obsolete.
(auth-source-magic): Marker for `password-cache' keys.
(auth-source-do-cache): Update docstring.
(auth-source-search): Use and check cache.
(auth-source-forget-all-cached, auth-source-remember)
(auth-source-recall, auth-source-forget, auth-source-forget+)
(auth-source-specmatchp): Caching support functions.
(auth-source-forget-user-or-password, auth-source-forget-all-cached):
Remove and obsolete.
(auth-source-user-or-password): Remove caching to further discourage
using it.  Always hide passwords.

* auth-source.el (auth-source-secrets-search)
(auth-source-user-or-password): Use `append' instead of `nconc'.
(auth-source-user-or-password): Build return list better and protect
against nil :secret.

* auth-source.el (top): Require 'eieio unconditionally.  Autoload
`secrets-get-attributes' instead of `secrets-get-attribute'.
(auth-source-secrets-search): Limit search when `max' is greater than
number of results.

* auth-source.el (auth-source-secrets-search): Add examples.

* auth-source.el (auth-sources): Allow for simpler defaults for Secrets
API with a string "secrets:collection-name" and with 'default.
(auth-source-backend-parse): Parse "secrets:collection-name" and
'default.  Recurse on parses instead of repeating code.  Use the
Secrets API is the source is not nil and 'ignore otherwise.  Emit a
message when ignoring a source.
(auth-source-search): List ignored search keys at the top level.
(auth-source-netrc-create): Use `case' instead of `cond'.
(auth-source-secrets-search): Created with TODOs.
(auth-source-secrets-create): Created with TODOs.
(auth-source-retrieve, auth-source-create, auth-source-delete)
(auth-source-protocol-defaults, auth-source-user-or-password-imap)
(auth-source-user-or-password-pop3, auth-source-user-or-password-ssh)
(auth-source-user-or-password-sftp)
(auth-source-user-or-password-smtp): Removed.
(auth-source-user-or-password): Deprecated and modified to be a wrapper
around `auth-source-search'.  Not tested thoroughly.

* auth-source.el: Bring in assoc and eioeio libraries.
(secrets-enabled): New variable to track the status of the Secrets API.
(auth-source-backend): New EIOEIO class to represent a backend.
(auth-source-creation-defaults): New variable to set prompt defaults
during token creation (see the `auth-source-search' docstring for
details).
(auth-sources): Simplify to allow a simple string as a netrc backend
spec.
(auth-source-backend-parse): Parse a backend from an `auth-sources' spec.
(auth-source-backend-parse-parameters): Fill in the backend parameters.
(auth-source-search): Main auth-source API entry point.
(auth-source-delete): Wrapper around `auth-source-search' for deletion.
(auth-source-search-collection): Helper function for searching.
(auth-source-netrc-parse, auth-source-netrc-normalize)
(auth-source-netrc-search, auth-source-netrc-create): Netrc backend.
Supports search, create, and delete.
(auth-source-secrets-search, auth-source-secrets-create): Secrets API
backend stubs.
(auth-source-user-or-password): Call `auth-source-search' but it's not
ready yet.

lisp/nntp.el
lisp/proto-stream.el

index 1b3023a..4b42637 100644 (file)
@@ -781,7 +781,8 @@ command whose response triggered the error."
       ;; The first time this is run, this variable is `try'.  So we
       ;; try.
       (when (eq nntp-server-list-active-group 'try)
-       (nntp-try-list-active (gnus-group-real-name (gnus-info-group (car infos)))))
+       (nntp-try-list-active
+        (gnus-group-real-name (gnus-info-group (car infos)))))
       (with-current-buffer (nntp-find-connection-buffer nntp-server-buffer)
        (erase-buffer)
        (let ((nntp-inhibit-erase t)
@@ -800,7 +801,8 @@ command whose response triggered the error."
                   (car infos)))
          (received 0)
          (last-point 1))
-      (when buf
+      (when (and buf
+                count)
        (with-current-buffer buf
          (while (and (gnus-buffer-live-p buf)
                      (progn
index 9117ac9..fdf2abf 100644 (file)
@@ -94,7 +94,15 @@ query server for capabilities.  For instance, for IMAP this is
 :starttls-function -- a function that takes one parameter, which
 is the response to the capaibility command.  It should return nil
 if it turns out that the server doesn't support STARTTLS, or the
-command to switch on STARTTLS otherwise."
+command to switch on STARTTLS otherwise.
+
+The return value from this function is a four-element list, where
+the first element is the stream (if connection was successful);
+the second element is the \"greeting\", i. e., the string the
+server sent over on initial contact; the third element is the
+capability string; and the fourth element is either `network' or
+`tls', depending on whether the connection ended up being
+encrypted or not."
   (let ((type (or (cadr (memq :type parameters)) 'network)))
     (cond
      ((eq type 'starttls)