* bug#49243: 27.2; [PATCH] Merge auth-source-pass changes from upstream
@ 2021-06-27 16:02 Damien Cassou
2021-06-28 13:08 ` Robert Pluim
2021-06-30 13:09 ` Lars Ingebrigtsen
0 siblings, 2 replies; 8+ messages in thread
From: Damien Cassou @ 2021-06-27 16:02 UTC (permalink / raw)
To: 49243
[-- Attachment #1: Type: text/plain, Size: 687 bytes --]
Hi,
please find attached a few patches for auth-source-pass that were merged
upstream.
Damien Cassou (2):
; * lisp/auth-source-pass.el: Improve docstrings
; * lisp/auth-source-pass.el: Remove useless metadata
Iku Iwasa (1):
lisp/auth-source-pass.el: Support multiple hosts in search spec
Tino Calancha (1):
lisp/auth-source-pass.el: Keep legitimate spaces inside data
lisp/auth-source-pass.el | 61 ++++++++++++++++-------------
test/lisp/auth-source-pass-tests.el | 24 +++++++++++-
2 files changed, 57 insertions(+), 28 deletions(-)
--
Damien Cassou
"Success is the ability to go from one failure to another without
losing enthusiasm." --Winston Churchill
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-lisp-auth-source-pass.el-Support-multiple-hosts-in-s.patch --]
[-- Type: text/x-patch, Size: 6559 bytes --]
From 622955a93036328d06daae4779299d53eb3115af Mon Sep 17 00:00:00 2001
From: Iku Iwasa <iku.iwasa@gmail.com>
Date: Sun, 27 Jun 2021 17:36:00 +0200
Subject: [PATCH 1/4] lisp/auth-source-pass.el: Support multiple hosts in
search spec
* lisp/auth-source-pass.el (auth-source-pass-search): Accept a list of
strings for argument HOST.
(auth-source-pass--build-result): Rename argument HOST to HOSTS. Also
return value "host" from entry if it exists.
(auth-source-pass--find-match): Rename argument HOST to HOSTS. Iterate
over each host in HOSTS.
* test/lisp/auth-source-pass-tests.el: Add corresponding tests
---
lisp/auth-source-pass.el | 40 ++++++++++++++++++-----------
test/lisp/auth-source-pass-tests.el | 18 ++++++++++++-
2 files changed, 42 insertions(+), 16 deletions(-)
diff --git a/lisp/auth-source-pass.el b/lisp/auth-source-pass.el
index a7b959c47f..6e33970486 100644
--- a/lisp/auth-source-pass.el
+++ b/lisp/auth-source-pass.el
@@ -61,13 +61,12 @@ auth-source-pass-search
&key backend type host user port
&allow-other-keys)
"Given a property list SPEC, return search matches from the :backend.
-See `auth-source-search' for details on SPEC."
+See `auth-source-search' for details on SPEC.
+
+HOST can be a string or a list of strings, but USER and PORT are expected
+to be a string only."
(cl-assert (or (null type) (eq type (oref backend type)))
t "Invalid password-store search: %s %s")
- (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)))
(cond ((eq host t)
(warn "auth-source-pass does not handle host wildcards.")
nil)
@@ -78,12 +77,14 @@ auth-source-pass-search
(when-let ((result (auth-source-pass--build-result host port user)))
(list result)))))
-(defun auth-source-pass--build-result (host port user)
- "Build auth-source-pass entry matching HOST, PORT and USER."
- (let ((entry-data (auth-source-pass--find-match host user port)))
+(defun auth-source-pass--build-result (hosts port user)
+ "Build auth-source-pass entry matching HOSTS, PORT and USER.
+
+HOSTS can be a string or a list of strings."
+ (let ((entry-data (auth-source-pass--find-match hosts user port)))
(when entry-data
(let ((retval (list
- :host host
+ :host (auth-source-pass--get-attr "host" entry-data)
:port (or (auth-source-pass--get-attr "port" entry-data) port)
:user (or (auth-source-pass--get-attr "user" entry-data) user)
:secret (lambda () (auth-source-pass--get-attr 'secret entry-data)))))
@@ -194,12 +195,21 @@ auth-source-pass-entries
(lambda (file) (file-name-sans-extension (file-relative-name file store-dir)))
(directory-files-recursively store-dir "\\.gpg\\'"))))
-(defun auth-source-pass--find-match (host user port)
- "Return password-store entry data matching HOST, USER and PORT.
-
-Disambiguate between user provided inside HOST (e.g., user@server.com) and
-inside USER by giving priority to USER. Same for PORT."
- (apply #'auth-source-pass--find-match-unambiguous (auth-source-pass--disambiguate host user port)))
+(defun auth-source-pass--find-match (hosts user port)
+ "Return password-store entry data matching HOSTS, USER and PORT.
+
+Disambiguate between user provided inside HOSTS (e.g., user@server.com) and
+inside USER by giving priority to USER. Same for PORT.
+HOSTS can be a string or a list of strings."
+ (seq-some (lambda (host)
+ (let ((entry (apply #'auth-source-pass--find-match-unambiguous
+ (auth-source-pass--disambiguate host user port))))
+ (if (or (null entry) (assoc "host" entry))
+ entry
+ (cons (cons "host" host) entry))))
+ (if (listp hosts)
+ hosts
+ (list hosts))))
(defun auth-source-pass--disambiguate (host &optional user port)
"Return (HOST USER PORT) after disambiguation.
diff --git a/test/lisp/auth-source-pass-tests.el b/test/lisp/auth-source-pass-tests.el
index bfbef53db9..a2f84f20e8 100644
--- a/test/lisp/auth-source-pass-tests.el
+++ b/test/lisp/auth-source-pass-tests.el
@@ -424,21 +424,37 @@ auth-source-pass-build-result-return-parameters
(auth-source-pass--with-store-find-foo
'(("foo" ("secret" . "foo password")))
(let ((result (auth-source-pass--build-result "foo" 512 "user")))
+ (should (equal (plist-get result :host) "foo"))
(should (equal (plist-get result :port) 512))
(should (equal (plist-get result :user) "user")))))
(ert-deftest auth-source-pass-build-result-return-entry-values ()
(auth-source-pass--with-store-find-foo '(("foo" ("port" . 512) ("user" . "anuser")))
(let ((result (auth-source-pass--build-result "foo" nil nil)))
+ (should (equal (plist-get result :host) "foo"))
(should (equal (plist-get result :port) 512))
(should (equal (plist-get result :user) "anuser")))))
(ert-deftest auth-source-pass-build-result-entry-takes-precedence ()
- (auth-source-pass--with-store-find-foo '(("foo" ("port" . 512) ("user" . "anuser")))
+ (auth-source-pass--with-store-find-foo '(("foo" ("host" . "bar") ("port" . 512) ("user" . "anuser")))
(let ((result (auth-source-pass--build-result "foo" 1024 "anotheruser")))
+ (should (equal (plist-get result :host) "bar"))
(should (equal (plist-get result :port) 512))
(should (equal (plist-get result :user) "anuser")))))
+(ert-deftest auth-source-pass-build-result-with-multiple-hosts ()
+ (auth-source-pass--with-store-find-foo
+ '(("foo" ("secret" . "foo password")))
+ (let ((result (auth-source-pass--build-result '("bar" "foo") 512 "user")))
+ (should (equal (plist-get result :host) "foo"))
+ (should (equal (plist-get result :port) 512))
+ (should (equal (plist-get result :user) "user")))))
+
+(ert-deftest auth-source-pass-build-result-with-multiple-hosts-no-match ()
+ (auth-source-pass--with-store-find-foo
+ '(("foo" ("secret" . "foo password")))
+ (should-not (auth-source-pass--build-result '("bar" "baz") 512 "user"))))
+
(ert-deftest auth-source-pass-can-start-from-auth-source-search ()
(auth-source-pass--with-store '(("gitlab.com" ("user" . "someone")))
(auth-source-pass-enable)
--
2.31.1
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: 0002-lisp-auth-source-pass.el-Improve-docstrings.patch --]
[-- Type: text/x-patch, Size: 2166 bytes --]
From a65fe185e40fce68d7fdb7735b6e7effae31d0ee Mon Sep 17 00:00:00 2001
From: Damien Cassou <damien@cassou.me>
Date: Sun, 27 Jun 2021 17:38:59 +0200
Subject: [PATCH 2/4] ; * lisp/auth-source-pass.el: Improve docstrings
---
lisp/auth-source-pass.el | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/lisp/auth-source-pass.el b/lisp/auth-source-pass.el
index 6e33970486..0f8be84dc2 100644
--- a/lisp/auth-source-pass.el
+++ b/lisp/auth-source-pass.el
@@ -60,11 +60,10 @@ auth-source-pass-port-separator
(cl-defun auth-source-pass-search (&rest spec
&key backend type host user port
&allow-other-keys)
- "Given a property list SPEC, return search matches from the :backend.
-See `auth-source-search' for details on SPEC.
+ "Given some search query, return matching credentials.
-HOST can be a string or a list of strings, but USER and PORT are expected
-to be a string only."
+See `auth-source-search' for details on the parameters SPEC, BACKEND, TYPE,
+HOST, USER and PORT."
(cl-assert (or (null type) (eq type (oref backend type)))
t "Invalid password-store search: %s %s")
(cond ((eq host t)
@@ -126,7 +125,7 @@ auth-source-pass-get
The key used to retrieve the password is the symbol `secret'.
The convention used as the format for a password-store file is
-the following (see https://www.passwordstore.org/#organization):
+the following (see URL `https://www.passwordstore.org/#organization'):
secret
key1: value1
@@ -278,7 +277,7 @@ auth-source-pass--entries-matching-suffix
(defun auth-source-pass--generate-entry-suffixes (hostname user port)
"Return a list of possible entry path suffixes in the password-store.
-Based on the supported pathname patterns for HOSTNAME, USER, &
+Based on the supported filename patterns for HOSTNAME, USER, &
PORT, return a list of possible suffixes for matching entries in
the password-store.
@@ -326,3 +325,5 @@ auth-source-pass--name-port-user-suffixes
(provide 'auth-source-pass)
;;; auth-source-pass.el ends here
+
+;; LocalWords: backend hostname
--
2.31.1
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #4: 0003-lisp-auth-source-pass.el-Remove-useless-metadata.patch --]
[-- Type: text/x-patch, Size: 762 bytes --]
From 228647fdd051b3874561659d02f2f31d15b3c620 Mon Sep 17 00:00:00 2001
From: Damien Cassou <damien@cassou.me>
Date: Sun, 27 Jun 2021 17:51:54 +0200
Subject: [PATCH 3/4] ; * lisp/auth-source-pass.el: Remove useless metadata
---
lisp/auth-source-pass.el | 2 --
1 file changed, 2 deletions(-)
diff --git a/lisp/auth-source-pass.el b/lisp/auth-source-pass.el
index 0f8be84dc2..c512c6fe4f 100644
--- a/lisp/auth-source-pass.el
+++ b/lisp/auth-source-pass.el
@@ -6,8 +6,6 @@
;; Nicolas Petton <nicolas@petton.fr>
;; Keith Amidon <camalot@picnicpark.org>
;; Version: 5.0.0
-;; Package-Requires: ((emacs "25"))
-;; Url: https://github.com/DamienCassou/auth-password-store
;; Created: 07 Jun 2015
;; This file is part of GNU Emacs.
--
2.31.1
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #5: 0004-lisp-auth-source-pass.el-Keep-legitimate-spaces-insi.patch --]
[-- Type: text/x-patch, Size: 2937 bytes --]
From 57f564556374f892a93c7879bc2629da8f58cb23 Mon Sep 17 00:00:00 2001
From: Tino Calancha <tino.calancha@gmail.com>
Date: Sun, 27 Jun 2021 17:53:30 +0200
Subject: [PATCH 4/4] lisp/auth-source-pass.el: Keep legitimate spaces inside
data
Users should be able to store a field as follows:
message: remember: Destroy the image and you will break the enemy
and later, recover the message untouched, i.e.:
"remember: Destroy the image and you will break the enemy"
* lisp/auth-source-pass.el (auth-source-pass--parse-data): Preserve
inner spaces at data.
* test/lisp/auth-source-pass-tests.el
(auth-source-pass-parse-with-colons-in-data): Add test.
---
lisp/auth-source-pass.el | 12 +++++-------
test/lisp/auth-source-pass-tests.el | 6 ++++++
2 files changed, 11 insertions(+), 7 deletions(-)
diff --git a/lisp/auth-source-pass.el b/lisp/auth-source-pass.el
index c512c6fe4f..914f8d2f1b 100644
--- a/lisp/auth-source-pass.el
+++ b/lisp/auth-source-pass.el
@@ -167,15 +167,13 @@ auth-source-pass--parse-secret
(defun auth-source-pass--parse-data (contents)
"Parse the password-store data in the string CONTENTS and return an alist.
CONTENTS is the contents of a password-store formatted file."
- (let ((lines (split-string contents "\n" t "[ \t]+")))
+ (let ((lines (cdr (split-string contents "\n" t "[ \t]+"))))
(seq-remove #'null
(mapcar (lambda (line)
- (let ((pair (mapcar (lambda (s) (string-trim s))
- (split-string line ":"))))
- (when (> (length pair) 1)
- (cons (car pair)
- (mapconcat #'identity (cdr pair) ":")))))
- (cdr lines)))))
+ (when-let ((pos (seq-position line ?:)))
+ (cons (string-trim (substring line 0 pos))
+ (string-trim (substring line (1+ pos))))))
+ lines))))
(defun auth-source-pass--do-debug (&rest msg)
"Call `auth-source-do-debug` with MSG and a prefix."
diff --git a/test/lisp/auth-source-pass-tests.el b/test/lisp/auth-source-pass-tests.el
index a2f84f20e8..d050ac5b69 100644
--- a/test/lisp/auth-source-pass-tests.el
+++ b/test/lisp/auth-source-pass-tests.el
@@ -49,6 +49,12 @@ auth-source-pass-parse-with-trailing-spaces
'(("key1" . "val1")
("key2" . "val2"))))))
+(ert-deftest auth-source-pass-parse-with-colons-in-data ()
+ (let ((content "pass\n--\nkey1 :val1\nkey2: please: keep my space after colon\n\n"))
+ (should (equal (auth-source-pass--parse-data content)
+ '(("key1" . "val1")
+ ("key2" . "please: keep my space after colon"))))))
+
(defvar auth-source-pass--debug-log nil
"Contains a list of all messages passed to `auth-source-do-debug`.")
--
2.31.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* bug#49243: 27.2; [PATCH] Merge auth-source-pass changes from upstream
2021-06-27 16:02 bug#49243: 27.2; [PATCH] Merge auth-source-pass changes from upstream Damien Cassou
@ 2021-06-28 13:08 ` Robert Pluim
2021-06-30 13:09 ` Lars Ingebrigtsen
1 sibling, 0 replies; 8+ messages in thread
From: Robert Pluim @ 2021-06-28 13:08 UTC (permalink / raw)
To: Damien Cassou; +Cc: 49243
>>>>> On Sun, 27 Jun 2021 18:02:01 +0200, Damien Cassou <damien@cassou.me> said:
Damien> Hi,
Damien> please find attached a few patches for auth-source-pass that were merged
Damien> upstream.
Damien> Damien Cassou (2):
Damien> ; * lisp/auth-source-pass.el: Improve docstrings
Damien> ; * lisp/auth-source-pass.el: Remove useless metadata
Damien> Iku Iwasa (1):
Damien> lisp/auth-source-pass.el: Support multiple hosts in search spec
Hmm, if auth-source-search supports multiple hosts, it would be good
if that were documented in the info manual.
Robert
--
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#49243: 27.2; [PATCH] Merge auth-source-pass changes from upstream
2021-06-27 16:02 bug#49243: 27.2; [PATCH] Merge auth-source-pass changes from upstream Damien Cassou
2021-06-28 13:08 ` Robert Pluim
@ 2021-06-30 13:09 ` Lars Ingebrigtsen
2021-06-30 16:09 ` Damien Cassou
1 sibling, 1 reply; 8+ messages in thread
From: Lars Ingebrigtsen @ 2021-06-30 13:09 UTC (permalink / raw)
To: Damien Cassou; +Cc: 49243
Damien Cassou <damien@cassou.me> writes:
> please find attached a few patches for auth-source-pass that were merged
> upstream.
Thanks; looks good to me. You can still push directly to Emacs, I
think? Or do you want me to apply the patches?
--
(domestic pets only, the antidote for overdose, milk.)
bloggy blog: http://lars.ingebrigtsen.no
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#49243: 27.2; [PATCH] Merge auth-source-pass changes from upstream
2021-06-30 13:09 ` Lars Ingebrigtsen
@ 2021-06-30 16:09 ` Damien Cassou
2021-06-30 17:56 ` Robert Pluim
2021-07-02 10:54 ` Lars Ingebrigtsen
0 siblings, 2 replies; 8+ messages in thread
From: Damien Cassou @ 2021-06-30 16:09 UTC (permalink / raw)
To: Lars Ingebrigtsen; +Cc: 49243
Lars Ingebrigtsen <larsi@gnus.org> writes:
> Thanks; looks good to me. You can still push directly to Emacs, I
> think? Or do you want me to apply the patches?
I would feel safer if you do it for me :-).
> Hmm, if auth-source-search supports multiple hosts, it would be good
> if that were documented in the info manual.
not sure because supporting only one host was a bug: auth-source-pass
wasn't implementing the auth-source protocol correctly.
--
Damien Cassou
"Success is the ability to go from one failure to another without
losing enthusiasm." --Winston Churchill
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#49243: 27.2; [PATCH] Merge auth-source-pass changes from upstream
2021-06-30 16:09 ` Damien Cassou
@ 2021-06-30 17:56 ` Robert Pluim
2021-07-02 13:33 ` Damien Cassou
2021-07-02 10:54 ` Lars Ingebrigtsen
1 sibling, 1 reply; 8+ messages in thread
From: Robert Pluim @ 2021-06-30 17:56 UTC (permalink / raw)
To: Damien Cassou; +Cc: Lars Ingebrigtsen, 49243
>>>>> On Wed, 30 Jun 2021 18:09:32 +0200, Damien Cassou <damien@cassou.me> said:
Damien> Lars Ingebrigtsen <larsi@gnus.org> writes:
>> Thanks; looks good to me. You can still push directly to Emacs, I
>> think? Or do you want me to apply the patches?
Damien> I would feel safer if you do it for me :-).
>> Hmm, if auth-source-search supports multiple hosts, it would be good
>> if that were documented in the info manual.
Damien> not sure because supporting only one host was a bug: auth-source-pass
Damien> wasn't implementing the auth-source protocol correctly.
That last bit was me, not Lars. I was trying to nudge you to go look
at the 'developers' section of the auth-source info manual and bring
its documentation in line with the implementation, since it currently
doesnʼt say anything about multiple hosts.
Robert
--
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#49243: 27.2; [PATCH] Merge auth-source-pass changes from upstream
2021-06-30 16:09 ` Damien Cassou
2021-06-30 17:56 ` Robert Pluim
@ 2021-07-02 10:54 ` Lars Ingebrigtsen
1 sibling, 0 replies; 8+ messages in thread
From: Lars Ingebrigtsen @ 2021-07-02 10:54 UTC (permalink / raw)
To: Damien Cassou; +Cc: 49243
Damien Cassou <damien@cassou.me> writes:
> Lars Ingebrigtsen <larsi@gnus.org> writes:
>> Thanks; looks good to me. You can still push directly to Emacs, I
>> think? Or do you want me to apply the patches?
>
> I would feel safer if you do it for me :-).
Sure; no prob. :-) Pushed now to Emacs 28.
--
(domestic pets only, the antidote for overdose, milk.)
bloggy blog: http://lars.ingebrigtsen.no
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#49243: 27.2; [PATCH] Merge auth-source-pass changes from upstream
2021-06-30 17:56 ` Robert Pluim
@ 2021-07-02 13:33 ` Damien Cassou
2021-07-02 13:48 ` Robert Pluim
0 siblings, 1 reply; 8+ messages in thread
From: Damien Cassou @ 2021-07-02 13:33 UTC (permalink / raw)
To: Robert Pluim; +Cc: 49243
Robert Pluim <rpluim@gmail.com> writes:
> That last bit was me, not Lars. I was trying to nudge you to go look
> at the 'developers' section of the auth-source info manual and bring
> its documentation in line with the implementation, since it currently
> doesnʼt say anything about multiple hosts.
I've just checked. The info manual says:
-- Function: auth-source-search &rest spec &key type max host user port
secret require create delete &allow-other-keys
This function searches (or modifies) authentication backends
according to SPEC. See the function’s doc-string for details.
And the docstring says:
A string value is always matched literally. A symbol is matched as
its string value, literally. All the SPEC values can be single values
(symbol or string) or lists thereof (in which case any of the search
terms matches).
I think this is good enough.
--
Damien Cassou
"Success is the ability to go from one failure to another without
losing enthusiasm." --Winston Churchill
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#49243: 27.2; [PATCH] Merge auth-source-pass changes from upstream
2021-07-02 13:33 ` Damien Cassou
@ 2021-07-02 13:48 ` Robert Pluim
0 siblings, 0 replies; 8+ messages in thread
From: Robert Pluim @ 2021-07-02 13:48 UTC (permalink / raw)
To: Damien Cassou; +Cc: 49243
>>>>> On Fri, 02 Jul 2021 15:33:36 +0200, Damien Cassou <damien@cassou.me> said:
Damien> Robert Pluim <rpluim@gmail.com> writes:
>> That last bit was me, not Lars. I was trying to nudge you to go look
>> at the 'developers' section of the auth-source info manual and bring
>> its documentation in line with the implementation, since it currently
>> doesnʼt say anything about multiple hosts.
Damien> I've just checked. The info manual says:
Damien> -- Function: auth-source-search &rest spec &key type max host user port
Damien> secret require create delete &allow-other-keys
Damien> This function searches (or modifies) authentication backends
Damien> according to SPEC. See the function’s doc-string for details.
Damien> And the docstring says:
Damien> A string value is always matched literally. A symbol is matched as
Damien> its string value, literally. All the SPEC values can be single values
Damien> (symbol or string) or lists thereof (in which case any of the search
Damien> terms matches).
Ah, I didnʼt go back to the docstring
Damien> I think this is good enough.
Yes
Damien> "Success is the ability to go from one failure to another without
Damien> losing enthusiasm." --Winston Churchill
:-)
Robert
--
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2021-07-02 13:48 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-06-27 16:02 bug#49243: 27.2; [PATCH] Merge auth-source-pass changes from upstream Damien Cassou
2021-06-28 13:08 ` Robert Pluim
2021-06-30 13:09 ` Lars Ingebrigtsen
2021-06-30 16:09 ` Damien Cassou
2021-06-30 17:56 ` Robert Pluim
2021-07-02 13:33 ` Damien Cassou
2021-07-02 13:48 ` Robert Pluim
2021-07-02 10:54 ` Lars Ingebrigtsen
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).