From: Philip Kaludercic <philipk@posteo.net>
To: Lars Ingebrigtsen <larsi@gnus.org>
Cc: Eli Zaretskii <eliz@gnu.org>, emacs-devel@gnu.org
Subject: Re: [PATCH] Fix random selection of keyserver
Date: Mon, 31 May 2021 11:13:41 +0000 [thread overview]
Message-ID: <87pmx7noka.fsf@icterid> (raw)
In-Reply-To: <875yyzgtvk.fsf@gnus.org> (Lars Ingebrigtsen's message of "Mon, 31 May 2021 11:00:47 +0200")
[-- Attachment #1: Type: text/plain, Size: 710 bytes --]
Lars Ingebrigtsen <larsi@gnus.org> writes:
> Philip Kaludercic <philipk@posteo.net> writes:
>
>> Perhaps, the intent of this patch was just to fix the currently broken
>> behaviour suggested by epa-keyserver's type.
>>
>> I am not sure if a :set function could be used to randomize the
>> keyserver for every request. Then again, is might not even really be
>> necessary to provide such a feature.
>
> I wonder whether it might make sense instead to allow `epa-keyserver' to
> be a list, and if so, then choose a random server from that list.
> That'd give users control over what servers to use when randomising.
That does seem to be a better approach, how does the patch below look
like?
--
Philip K.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Improve-random-selection-of-keyservers.patch --]
[-- Type: text/x-diff, Size: 3278 bytes --]
From fdbb17539a465c49aad93cef4e0b8b4b76699561 Mon Sep 17 00:00:00 2001
From: Philip Kaludercic <philipk@posteo.net>
Date: Sun, 30 May 2021 20:34:54 +0200
Subject: [PATCH] Improve random selection of keyservers
* epa-ks.el (epa-keyserver): Interpret a list as a pool
(epa-ks--query-url): Add new auxiliary function
(epa-ks--fetch-key): Use epa-ks--query-url
(epa-search-keys): Use epa-ks--query-url
---
lisp/epa-ks.el | 42 +++++++++++++++++++++++++-----------------
1 file changed, 25 insertions(+), 17 deletions(-)
diff --git a/lisp/epa-ks.el b/lisp/epa-ks.el
index a33025b112..1d17c1399c 100644
--- a/lisp/epa-ks.el
+++ b/lisp/epa-ks.el
@@ -42,8 +42,9 @@ epa-keyserver
"Domain of keyserver.
This is used by `epa-ks-lookup-key', for looking up public keys."
- :type '(choice :tag "Keyserver"
- (const random)
+ :type `(choice :tag "Keyserver"
+ (repeat :tag "Random pool"
+ (string :tag "Keyserver address"))
(const "keyring.debian.org")
(const "keys.gnupg.net")
(const "keyserver.ubuntu.com")
@@ -141,20 +142,33 @@ epa-ks-do-key-to-fetch
(epa-ks--fetch-key id))))
(tabulated-list-clear-all-tags))
+(defun epa-ks--query-url (query exact)
+ "Return URL for QUERY.
+If EXACT is non-nil, don't accept approximate matches."
+ (format "https://%s/pks/lookup?%s"
+ (cond ((null epa-keyserver)
+ (user-error "Empty keyserver pool"))
+ ((listp epa-keyserver)
+ (nth (random (length epa-keyserver))
+ epa-keyserver))
+ ((stringp epa-keyserver)
+ epa-keyserver)
+ ((error "Invalid type for `epa-keyserver'")))
+ (url-build-query-string
+ (append `(("search" ,query)
+ ("options" "mr")
+ ("op" "index"))
+ (and exact '(("exact" "on")))))))
+
(defun epa-ks--fetch-key (id)
"Send request to import key with specified ID."
(url-retrieve
- (format "https://%s/pks/lookup?%s"
- epa-keyserver
- (url-build-query-string
- `(("search" ,(concat "0x" (url-hexify-string id)))
- ("options" "mr")
- ("op" "get"))))
+ (epa-ks--query-url (concat "0x" (url-hexify-string id)) t)
(lambda (status)
(when (plist-get status :error)
(error "Request failed: %s"
- (caddr (assq (caddr (plist-get status :error))
- url-http-codes))))
+ (caddr (assq (caddr (plist-get status :error))
+ url-http-codes))))
(forward-paragraph)
(save-excursion
(goto-char (point-max))
@@ -224,13 +238,7 @@ epa-search-keys
(erase-buffer))
(epa-ks-search-mode))
(url-retrieve
- (format "https://%s/pks/lookup?%s"
- epa-keyserver
- (url-build-query-string
- (append `(("search" ,query)
- ("options" "mr")
- ("op" "index"))
- (and exact '(("exact" "on"))))))
+ (epa-ks--query-url query exact)
(lambda (status)
(when (plist-get status :error)
(when buf
--
2.30.2
next prev parent reply other threads:[~2021-05-31 11:13 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-30 18:36 [PATCH] Fix random selection of keyserver Philip Kaludercic
2021-05-30 18:57 ` Eli Zaretskii
2021-05-30 19:46 ` Philip Kaludercic
2021-05-31 9:00 ` Lars Ingebrigtsen
2021-05-31 11:13 ` Philip Kaludercic [this message]
2021-05-31 11:43 ` Andreas Schwab
2021-05-31 12:04 ` Philip Kaludercic
2021-06-01 5:49 ` Lars Ingebrigtsen
2021-05-31 11:45 ` Eli Zaretskii
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87pmx7noka.fsf@icterid \
--to=philipk@posteo.net \
--cc=eliz@gnu.org \
--cc=emacs-devel@gnu.org \
--cc=larsi@gnus.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).