* auth-source.el (auth-source-forget-user-or-password): Clarify docs.
authorTeodor Zlatanov <tzz@lifelogs.com>
Mon, 26 Jan 2009 15:23:27 +0000 (15:23 +0000)
committerTeodor Zlatanov <tzz@lifelogs.com>
Mon, 26 Jan 2009 15:23:27 +0000 (15:23 +0000)
(auth-source-forget-all-cached): New convenience function.
(auth-source-user-or-password): Accept list of modes or a single mode.

* mail-source.el (mail-source-bind, mail-source-set-1): Use list of
auth-source modes.

* netrc.el (netrc-machine-user-or-password): Use list of
auth-source modes.

* nnimap.el (nnimap-open-connection): Use list of
auth-source modes.

* nntp.el (nntp-send-authinfo): Use list of
auth-source modes.

lisp/ChangeLog
lisp/auth-source.el
lisp/mail-source.el
lisp/netrc.el
lisp/nnimap.el
lisp/nntp.el

index b3235f0..c887068 100644 (file)
@@ -1,3 +1,25 @@
+2009-01-26  Teodor Zlatanov  <tzlatanov@jumptrading.com>
+
+       * auth-source.el (auth-source-forget-user-or-password): Clarify docs.
+       (auth-source-forget-all-cached): New convenience function.
+       (auth-source-user-or-password): Accept list of modes or a single mode.
+
+       * mail-source.el (mail-source-bind, mail-source-set-1): Use list of
+       auth-source modes.
+
+       * netrc.el (netrc-machine-user-or-password): Use list of
+       auth-source modes.
+
+       * nnimap.el (nnimap-open-connection): Use list of
+       auth-source modes.
+
+       * nntp.el (nntp-send-authinfo): Use list of
+       auth-source modes.
+
+2009-01-26  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * nntp.el (nntp-send-authinfo): 
+
 2009-01-16  Teodor Zlatanov  <tzz@lifelogs.com>
 
        * auth-source.el: Update docs to reflect epa-file-enable is to be used
index 27de702..1bec08f 100644 (file)
@@ -163,12 +163,20 @@ Returns fallback choices (where PROTOCOL or HOST are nil) with FALLBACK t."
   (interactive "slogin/password: \nsHost: \nsProtocol: \n") ;for testing
   (remhash (format "%s %s:%s" mode host protocol) auth-source-cache))
 
+(defun auth-source-forget-all-cached ()
+  "Forget all cached auth-source authentication tokens."
+  (interactive)
+  (setq auth-source-cache (make-hash-table :test 'equal)))
+
 (defun auth-source-user-or-password (mode host protocol)
-  "Find user or password (from the string MODE) matching HOST and PROTOCOL."
+  "Find MODE (string or list of strings) matching HOST and PROTOCOL.
+MODE can be \"login\" or \"password\" for example."
   (gnus-message 9
                "auth-source-user-or-password: get %s for %s (%s)"
                mode host protocol)
-  (let* ((cname (format "%s %s:%s" mode host protocol))
+  (let* ((listy (listp mode))
+        (mode (if listy mode (list mode)))
+        (cname (format "%s %s:%s" mode host protocol))
         (found (gethash cname auth-source-cache)))
     (if found
        (progn
@@ -176,7 +184,7 @@ Returns fallback choices (where PROTOCOL or HOST are nil) with FALLBACK t."
                        "auth-source-user-or-password: cached %s=%s for %s (%s)"
                        mode
                        ;; don't show the password
-                       (if (equal mode "password") "SECRET" found)
+                       (if (member "password" mode) "SECRET" found)
                        host protocol)
          found)
       (dolist (choice (auth-source-pick host protocol))
@@ -191,8 +199,9 @@ Returns fallback choices (where PROTOCOL or HOST are nil) with FALLBACK t."
                        "auth-source-user-or-password: found %s=%s for %s (%s)"
                        mode
                        ;; don't show the password
-                       (if (equal mode "password") "SECRET" found)
+                       (if (member "password" mode) "SECRET" found)
                        host protocol)
+         (setq found (if listy found (car-safe found)))
          (when auth-source-do-cache
            (puthash cname found auth-source-cache)))
        (return found)))))
index f144e91..7dbe30b 100644 (file)
@@ -453,10 +453,11 @@ the `mail-source-keyword-map' variable."
 (put 'mail-source-bind 'lisp-indent-function 1)
 (put 'mail-source-bind 'edebug-form-spec '(sexp body))
 
+;; TODO: use the list format for auth-source-user-or-password modes
 (defun mail-source-set-1 (source)
   (let* ((type (pop source))
         (defaults (cdr (assq type mail-source-keyword-map)))
-        default value keyword user-auth pass-auth)
+        default value keyword auth-info user-auth pass-auth)
     (while (setq default (pop defaults))
       ;; for each default :SYMBOL, set SYMBOL to the plist value for :SYMBOL
       ;; using `mail-source-value' to evaluate the plist value
@@ -469,20 +470,21 @@ the `mail-source-keyword-map' variable."
            ((and
             (eq keyword :user)
             (setq user-auth 
-                  (auth-source-user-or-password
-                   "login"
-                   ;; this is "host" in auth-sources
-                   (if (boundp 'server) (symbol-value 'server) "")
-                   type)))
+                  (nth 0 (auth-source-user-or-password
+                          '("login" "password")
+                          ;; this is "host" in auth-sources
+                          (if (boundp 'server) (symbol-value 'server) "")
+                          type))))
             user-auth)
            ((and
-            (eq keyword :password)
-            (setq pass-auth 
-                  (auth-source-user-or-password
-                   "password"
-                   ;; this is "host" in auth-sources
-                   (if (boundp 'server) (symbol-value 'server) "")
-                   type)))
+             (eq keyword :password)
+             (setq pass-auth
+                   (nth 1
+                        (auth-source-user-or-password
+                         '("login" "password")
+                         ;; this is "host" in auth-sources
+                         (if (boundp 'server) (symbol-value 'server) "")
+                         type))))
             pass-auth)
            (t (if (setq value (plist-get source keyword))
                 (mail-source-value value)
index 9c7f017..80ae1b5 100644 (file)
@@ -158,11 +158,22 @@ MODE can be \"login\" or \"password\", suitable for passing to
        (ports (or ports '(nil)))
        (defaults (or defaults '(nil)))
        info)
-    (dolist (machine machines)
-      (dolist (default defaults)
-       (dolist (port ports)
-         (let ((alist (netrc-machine authinfo-list machine port default)))
-           (setq info (or (netrc-get alist mode) info))))))
+    (if (listp mode)
+       (setq info 
+             (mapcar 
+              (lambda (mode-element) 
+                (netrc-machine-user-or-password
+                 mode-element
+                 authinfo-list
+                 machines
+                 ports
+                 defaults))
+              mode))
+      (dolist (machine machines)
+       (dolist (default defaults)
+         (dolist (port ports)
+           (let ((alist (netrc-machine authinfo-list machine port default)))
+             (setq info (or (netrc-get alist mode) info)))))))
     info))
 
 (defun netrc-get (alist type)
index 96b8329..d4f5fb2 100644 (file)
@@ -805,8 +805,12 @@ If EXAMINE is non-nil the group is selected read-only."
           (port (if nnimap-server-port
                     (int-to-string nnimap-server-port)
                   "imap"))
+          (auth-info 
+           (auth-source-user-or-password '("login" "password") server port))
+          (auth-user (nth 0 auth-info))
+          (auth-passwd (nth 1 auth-info))
           (user (or
-                 (auth-source-user-or-password "login" server port) ; this is preferred to netrc-*
+                 auth-user ; this is preferred to netrc-*
                  (netrc-machine-user-or-password
                   "login"
                   list
@@ -816,7 +820,7 @@ If EXAMINE is non-nil the group is selected read-only."
                   (list port)
                   (list "imap" "imaps" "143" "993"))))
           (passwd (or
-                   (auth-source-user-or-password "password" server port) ; this is preferred to netrc-*
+                   auth-passwd ; this is preferred to netrc-*
                    (netrc-machine-user-or-password
                     "password"
                     list
index 6e9978d..8a6c9a2 100644 (file)
@@ -1179,14 +1179,18 @@ If SEND-IF-FORCE, only send authinfo to the server if the
   (let* ((list (netrc-parse nntp-authinfo-file))
         (alist (netrc-machine list nntp-address "nntp"))
         (force (or (netrc-get alist "force") nntp-authinfo-force))
+        (auth-info 
+         (auth-source-user-or-password '("login" "password") nntp-address "nntp"))
+        (auth-user (nth 0 auth-info))
+        (auth-passwd (nth 1 auth-info))
         (user (or
                ;; this is preferred to netrc-*
-               (auth-source-user-or-password "login" nntp-address "nntp")
+               auth-user
                (netrc-get alist "login")
                nntp-authinfo-user))
         (passwd (or
                  ;; this is preferred to netrc-*
-                 (auth-source-user-or-password "password" nntp-address "nntp")
+                 auth-passwd
                  (netrc-get alist "password"))))
     (when (or (not send-if-force)
              force)