From 8f25c2bc56c65825e59651522ceb7b4855eb8205 Mon Sep 17 00:00:00 2001 From: Teodor Zlatanov Date: Sun, 27 Apr 2014 22:08:43 +0000 Subject: [PATCH] lisp/gnus.auth-source.el (auth-source-search): return boolean on :max 0 * lisp/gnus.auth-source.el (auth-source-search, auth-source-search-backends): Treat :max 0 as an indicator that a boolean return is wanted, as documented. Reported by Joe Bloggs. --- lisp/gnus/ChangeLog | 6 ++++++ lisp/gnus/auth-source.el | 22 +++++++++++++++------- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index ca3071495db..f766dd539cf 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,3 +1,9 @@ +2014-04-27 Teodor Zlatanov + + * auth-source.el (auth-source-search, auth-source-search-backends): + Treat :max 0 as an indicator that a boolean return is wanted, as + documented. Reported by Joe Bloggs. + 2014-04-20 Katsumi Yamaoka * gnus-icalendar.el: Require gnus-art. diff --git a/lisp/gnus/auth-source.el b/lisp/gnus/auth-source.el index 42db423ac8a..2efb16b8611 100644 --- a/lisp/gnus/auth-source.el +++ b/lisp/gnus/auth-source.el @@ -654,9 +654,11 @@ Use `auth-source-delete' in ELisp code instead of calling 'secrets are the only ones supported right now. :max N means to try to return at most N items (defaults to 1). -When 0 the function will return just t or nil to indicate if any -matches were found. More than N items may be returned, depending -on the search and the backend. +More than N items may be returned, depending on the search and +the backend. + +When :max is 0 the function will return just t or nil to indicate +if any matches were found. :host (X Y Z) means to match only hosts X, Y, or Z according to the match rules above. Defaults to t. @@ -757,18 +759,22 @@ must call it to obtain the actual value." (when auth-source-do-cache (auth-source-remember spec found))) - found)) + (if (zerop max) + (not (null found)) + found))) (defun auth-source-search-backends (backends spec max create delete require) - (let (matches) + (let ((max (if (zerop max) 1 max)) ; stop with 1 match if we're asked for zero + matches) (dolist (backend backends) - (when (> max (length matches)) ; when we need more matches... + (when (> max (length matches)) ; if we need more matches... (let* ((bmatches (apply (slot-value backend 'search-function) :backend backend :type (slot-value backend :type) ;; note we're overriding whatever the spec - ;; has for :require, :create, and :delete + ;; has for :max, :require, :create, and :delete + :max max :require require :create create :delete delete @@ -783,6 +789,7 @@ must call it to obtain the actual value." (setq matches (append matches bmatches)))))) matches)) +;; (auth-source-search :max 0) ;; (auth-source-search :max 1) ;; (funcall (plist-get (nth 0 (auth-source-search :max 1)) :secret)) ;; (auth-source-search :host "nonesuch" :type 'netrc :K 1) @@ -1653,6 +1660,7 @@ authentication tokens: ;; (let ((auth-sources '("macos-keychain-internet:/Users/tzz/Library/Keychains/login.keychain"))) (auth-source-search :max 1)) ;; (let ((auth-sources '("macos-keychain-generic:Login"))) (auth-source-search :max 1 :host "git.gnus.org")) +;; (let ((auth-sources '("macos-keychain-generic:Login"))) (auth-source-search :max 1)) (defun* auth-source-macos-keychain-search (&rest spec -- 2.39.5