From 5218790e76c665b070730b892ad2196edf42defe Mon Sep 17 00:00:00 2001 From: Jelle Licht Date: Mon, 8 Jan 2018 17:34:38 +0100 Subject: [PATCH 07/14] Fix auth-source-pass.el to properly handle special inputs * lisp/auth-source-pass.el (auth-source-pass-search): Warn when passing multiple hosts in SPEC. Early return and warn when passing a wildcard as host in SPEC. Early return when host is nil. * test/lisp/auth-source-pass-tests.el (auth-source-pass-any-host, auth-source-pass-undefined-host): Add corresponding tests. --- lisp/auth-source-pass.el | 12 ++++++++++-- test/lisp/auth-source-pass-tests.el | 11 +++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/lisp/auth-source-pass.el b/lisp/auth-source-pass.el index 96aefc8dd7..461cba02dd 100644 --- a/lisp/auth-source-pass.el +++ b/lisp/auth-source-pass.el @@ -45,10 +45,18 @@ See `auth-source-search' for details on SPEC." (cl-assert (or (null type) (eq type (oref backend type))) t "Invalid password-store search: %s %s") - (when (listp host) + (when (consp host) + (warn "auth-source-pass ignores all but first host in spec.") ;; Take the first non-nil item of the list of hosts (setq host (seq-find #'identity host))) - (list (auth-source-pass--build-result host port user))) + (cond ((eq host t) + (warn "auth-source-pass does not handle host wildcards.") + nil) + ((null host) + ;; Do not build a result, as none will match when HOST is nil + nil) + (t + (list (auth-source-pass--build-result host port user))))) (defun auth-source-pass--build-result (host port user) "Build auth-source-pass entry matching HOST, PORT and USER." diff --git a/test/lisp/auth-source-pass-tests.el b/test/lisp/auth-source-pass-tests.el index 0f072592d0..431e4e411d 100644 --- a/test/lisp/auth-source-pass-tests.el +++ b/test/lisp/auth-source-pass-tests.el @@ -73,6 +73,17 @@ auth-source-pass--with-store (auth-source-pass--debug-log nil)) ,@body))) +(ert-deftest auth-source-pass-any-host () + (auth-source-pass--with-store '(("foo" ("port" . "foo-port") ("host" . "foo-user")) + ("bar")) + (should-not (auth-source-pass-search :host t)))) + +(ert-deftest auth-source-pass-undefined-host () + (auth-source-pass--with-store '(("foo" ("port" . "foo-port") ("host" . "foo-user")) + ("bar")) + (should-not (auth-source-pass-search :host nil)))) + + (ert-deftest auth-source-pass-find-match-matching-at-entry-name () (auth-source-pass--with-store '(("foo")) (should (equal (auth-source-pass--find-match "foo" nil nil) -- 2.17.0