From f579cd472cbf3d9af52c87b65473b56ce918abba Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Mon, 22 Aug 2022 16:56:57 +0200 Subject: [PATCH] auth-source: Fix wrong-type-argument when searching secret services `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 | 6 +++++- lisp/auth-source.el | 11 +++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/doc/misc/auth.texi b/doc/misc/auth.texi index 91a9afd9c9f..9dc63af6bcc 100644 --- a/doc/misc/auth.texi +++ b/doc/misc/auth.texi @@ -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 diff --git a/lisp/auth-source.el b/lisp/auth-source.el index f198362f106..c79e5b81f76 100644 --- a/lisp/auth-source.el +++ b/lisp/auth-source.el @@ -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 -- 2.39.5