aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2019-03-25 14:13:59 +0000
committerWerner Koch <[email protected]>2019-03-25 14:14:32 +0000
commit2f3eebf1865a85f8c09a1c052513260ed55acec6 (patch)
tree31763bdbb7bfc6c389ab34868c81a50a7867fa03
parentdoc: Clarify option --no-keyring. (diff)
downloadgnupg-2f3eebf1865a85f8c09a1c052513260ed55acec6.tar.gz
gnupg-2f3eebf1865a85f8c09a1c052513260ed55acec6.zip
wkd: New command --print-wkd-url for gpg-wks-client.
* tools/gpg-wks-client.c (aPrintWKDURL): New. (opts): Add option. (main): Implement. * tools/wks-util.c (wks_cmd_print_wkd_url): New. Signed-off-by: Werner Koch <[email protected]>
-rw-r--r--doc/wks.texi8
-rw-r--r--tools/gpg-wks-client.c19
-rw-r--r--tools/gpg-wks.h1
-rw-r--r--tools/wks-util.c27
4 files changed, 50 insertions, 5 deletions
diff --git a/doc/wks.texi b/doc/wks.texi
index ee847aad7..2fa3c2492 100644
--- a/doc/wks.texi
+++ b/doc/wks.texi
@@ -101,10 +101,14 @@ fingerprint and the mailbox separated by a space. The command
@option{--remove-key} removes a key from that directory, its only
argument is a user-id.
-The command @option{--print-wkd-hash} prints a WKD user id identifier
-and the corresponding mailbox from the user-ids given on the command
+The command @option{--print-wkd-hash} prints the WKD user-id identifiers
+and the corresponding mailboxes from the user-ids given on the command
line or via stdin (one user-id per line).
+The command @option{--print-wkd-url} prints the URLs used to fetch the
+key for the given user-ids from WKD. The meanwhile preferred format
+with sub-domains is used here.
+
@command{gpg-wks-client} is not commonly invoked directly and thus it
is not installed in the bin directory. Here is an example how it can
be invoked manually to check for a Web Key Directory entry for
diff --git a/tools/gpg-wks-client.c b/tools/gpg-wks-client.c
index f1750bf4c..050c8aa21 100644
--- a/tools/gpg-wks-client.c
+++ b/tools/gpg-wks-client.c
@@ -62,6 +62,7 @@ enum cmd_and_opt_values
aInstallKey,
aRemoveKey,
aPrintWKDHash,
+ aPrintWKDURL,
oGpgProgram,
oSend,
@@ -93,6 +94,8 @@ static ARGPARSE_OPTS opts[] = {
"remove a key from a directory"),
ARGPARSE_c (aPrintWKDHash, "print-wkd-hash",
"Print the WKD identifier for the given user ids"),
+ ARGPARSE_c (aPrintWKDURL, "print-wkd-url",
+ "Print the WKD URL for the given user id"),
ARGPARSE_group (301, ("@\nOptions:\n ")),
@@ -236,6 +239,7 @@ parse_arguments (ARGPARSE_ARGS *pargs, ARGPARSE_OPTS *popts)
case aInstallKey:
case aRemoveKey:
case aPrintWKDHash:
+ case aPrintWKDURL:
cmd = pargs->r_opt;
break;
@@ -384,13 +388,24 @@ main (int argc, char **argv)
break;
case aPrintWKDHash:
+ case aPrintWKDURL:
if (!argc)
- err = proc_userid_from_stdin (wks_cmd_print_wkd_hash, "printing hash");
+ {
+ if (cmd == aPrintWKDHash)
+ err = proc_userid_from_stdin (wks_cmd_print_wkd_hash,
+ "printing WKD hash");
+ else
+ err = proc_userid_from_stdin (wks_cmd_print_wkd_url,
+ "printing WKD URL");
+ }
else
{
for (err = delayed_err = 0; !err && argc; argc--, argv++)
{
- err = wks_cmd_print_wkd_hash (*argv);
+ if (cmd == aPrintWKDHash)
+ err = wks_cmd_print_wkd_hash (*argv);
+ else
+ err = wks_cmd_print_wkd_url (*argv);
if (gpg_err_code (err) == GPG_ERR_INV_USER_ID)
{
/* Diagnostic already printed. */
diff --git a/tools/gpg-wks.h b/tools/gpg-wks.h
index 99969c1ef..9acd7c37f 100644
--- a/tools/gpg-wks.h
+++ b/tools/gpg-wks.h
@@ -104,6 +104,7 @@ gpg_error_t wks_compute_hu_fname (char **r_fname, const char *addrspec);
gpg_error_t wks_cmd_install_key (const char *fname, const char *userid);
gpg_error_t wks_cmd_remove_key (const char *userid);
gpg_error_t wks_cmd_print_wkd_hash (const char *userid);
+gpg_error_t wks_cmd_print_wkd_url (const char *userid);
/*-- wks-receive.c --*/
diff --git a/tools/wks-util.c b/tools/wks-util.c
index fee46d633..29e9248b4 100644
--- a/tools/wks-util.c
+++ b/tools/wks-util.c
@@ -1104,7 +1104,7 @@ wks_cmd_remove_key (const char *userid)
}
-/* Print the WKD hash for the user ids to stdout. */
+/* Print the WKD hash for the user id to stdout. */
gpg_error_t
wks_cmd_print_wkd_hash (const char *userid)
{
@@ -1121,3 +1121,28 @@ wks_cmd_print_wkd_hash (const char *userid)
xfree (addrspec);
return err;
}
+
+
+/* Print the WKD URL for the user id to stdout. */
+gpg_error_t
+wks_cmd_print_wkd_url (const char *userid)
+{
+ gpg_error_t err;
+ char *addrspec, *fname;
+ char *domain;
+
+ err = wks_fname_from_userid (userid, 1, &fname, &addrspec);
+ if (err)
+ return err;
+
+ domain = strchr (addrspec, '@');
+ if (domain)
+ *domain++ = 0;
+
+ es_printf ("https://openpgpkey.%s/.well-known/openpgpkey/%s/hu/%s?l=%s\n",
+ domain, domain, fname, addrspec);
+
+ xfree (fname);
+ xfree (addrspec);
+ return err;
+}