Fix auth-source-pass.el to properly handle special inputs
authorJelle Licht <jlicht@fsfe.org>
Mon, 8 Jan 2018 16:34:38 +0000 (17:34 +0100)
committerNicolas Petton <nicolas@petton.fr>
Tue, 5 Jun 2018 13:51:26 +0000 (15:51 +0200)
* 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
test/lisp/auth-source-pass-tests.el

index 96aefc8dd7e00018ec6735d8a277183814af24fe..461cba02dd436b545a075804a6f5000936217848 100644 (file)
 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."
index 0f072592d00a742d6e06417ded9a4abdbd91a962..431e4e411d94780b148cdd0f32b64adeb84e4a32 100644 (file)
@@ -73,6 +73,17 @@ This function is intended to be set to `auth-source-debug`."
            (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)