]> git.eshelyaron.com Git - emacs.git/commitdiff
auth-source: Fix wrong-type-argument when searching secret services
authorMichael Albinus <michael.albinus@gmx.de>
Mon, 22 Aug 2022 14:56:57 +0000 (16:56 +0200)
committerMichael Albinus <michael.albinus@gmx.de>
Mon, 22 Aug 2022 14:56:57 +0000 (16:56 +0200)
`auth-source-search' can be called with an integer port number,
while the backend implementation doesn't allow non-string attributes.

* doc/misc/auth.texi (Secret Service API): Attribute values are
stringified.

* lisp/auth-source.el (auth-source-secrets-search):
Ensure attributes are string.  (Bug#55199)

doc/misc/auth.texi
lisp/auth-source.el

index 91a9afd9c9f541bbfde321582d2e5b77f332403d..9dc63af6bccbd820752aaf2f6a6d3b8e13c05e16 100644 (file)
@@ -384,7 +384,7 @@ This function creates a new item in @var{collection} with label
 @var{item} and password @var{password}.  The label @var{item} does not
 have to be unique in @var{collection}.  @var{attributes} are key-value
 pairs set for the created item.  The keys are keyword symbols,
-starting with a colon.  Example:
+starting with a colon; values are strings.  Example:
 
 @example
 ;;; The collection is "session", the label is "my item"
@@ -466,6 +466,10 @@ then fall back to @file{~/.authinfo.gpg}.
                      "~/.authinfo.gpg"))
 @end example
 
+Attribute values in the auth-source spec, which are not strings (like
+port numbers), are stringified prior calling the @file{secrets.el}
+functions.
+
 @node The Unix password store
 @chapter The Unix password store
 
index f198362f1066cad7ebbe2c81a8c540e61f027f7c..c79e5b81f762f9f35dfdd4b79912cbddca14d2b8 100644 (file)
@@ -1618,10 +1618,13 @@ authentication tokens:
          (search-specs (auth-source-secrets-listify-pattern
                         (apply #'append (mapcar
                                       (lambda (k)
-                                        (if (or (null (plist-get spec k))
-                                                (eq t (plist-get spec k)))
-                                            nil
-                                          (list k (plist-get spec k))))
+                                        (let ((v (plist-get spec k)))
+                                          (if (or (null v)
+                                                  (eq t v))
+                                              nil
+                                            (list
+                                             k
+                                             (auth-source-ensure-strings v)))))
                                       search-keys))))
          ;; needed keys (always including host, login, port, and secret)
          (returned-keys (delete-dups (append