aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2017-07-24 19:07:03 +0000
committerWerner Koch <[email protected]>2017-07-24 19:10:58 +0000
commit87b5421ca84bbea68217c9ed771ee8c0a98a4d0c (patch)
tree07df766cc85680c315c81f953079f2bd30139e65
parentgpg: Store key origin info for new keys from a keyserver (diff)
downloadgnupg-87b5421ca84bbea68217c9ed771ee8c0a98a4d0c.tar.gz
gnupg-87b5421ca84bbea68217c9ed771ee8c0a98a4d0c.zip
gpg: Extend --key-origin to take an optional URL arg.
* g10/getkey.c (parse_key_origin): Parse appended URL. * g10/options.h (struct opt): Add field 'key_origin_url'. * g10/gpg.c (main) <aImport>: Pass that option to import_keys. * g10/import.c (apply_meta_data): Extend for file and url. * g10/keyserver.c (keyserver_fetch): Pass the url to import_keys_es_stream. -- Example: gpg --key-origin url,myscheme://bla --import FILE Signed-off-by: Werner Koch <[email protected]>
Diffstat (limited to '')
-rw-r--r--doc/gpg.texi8
-rw-r--r--g10/getkey.c15
-rw-r--r--g10/gpg.c2
-rw-r--r--g10/import.c26
-rw-r--r--g10/keyserver.c2
-rw-r--r--g10/options.h1
6 files changed, 49 insertions, 5 deletions
diff --git a/doc/gpg.texi b/doc/gpg.texi
index 9147bdf4b..dddb93031 100644
--- a/doc/gpg.texi
+++ b/doc/gpg.texi
@@ -2260,12 +2260,14 @@ hint to optimize its buffer allocation strategy. It is also used by
the @option{--status-fd} line ``PROGRESS'' to provide a value for
``total'' if that is not available by other means.
-@item --key-origin @var{string}
+@item --key-origin @var{string}[,@var{url}]
@opindex key-origin
gpg can track the origin of a key. Certain origins are implicitly
known (e.g. keyserver, web key directory) and set. For a standard
-import the origin of the keys imported can be set with this optionb.
-To list the possible values use "help" for @var{string}.
+import the origin of the keys imported can be set with this option.
+To list the possible values use "help" for @var{string}. Some origins
+can store an optional @var{url} argument. That URL can appended to
+@var{string} after a comma.
@item --import-options @code{parameters}
@opindex import-options
diff --git a/g10/getkey.c b/g10/getkey.c
index 74eed132f..390e2dc48 100644
--- a/g10/getkey.c
+++ b/g10/getkey.c
@@ -4325,6 +4325,11 @@ int
parse_key_origin (char *string)
{
int i;
+ char *comma;
+
+ comma = strchr (string, ',');
+ if (comma)
+ *comma = 0;
if (!ascii_strcasecmp (string, "help"))
{
@@ -4338,9 +4343,19 @@ parse_key_origin (char *string)
if (!ascii_strcasecmp (string, key_origin_list[i].name))
{
opt.key_origin = key_origin_list[i].origin;
+ xfree (opt.key_origin_url);
+ opt.key_origin_url = NULL;
+ if (comma && comma[1])
+ {
+ opt.key_origin_url = xstrdup (comma+1);
+ trim_spaces (opt.key_origin_url);
+ }
+
return 1;
}
+ if (comma)
+ *comma = ',';
return 0;
}
diff --git a/g10/gpg.c b/g10/gpg.c
index 7495e179d..52b6089e9 100644
--- a/g10/gpg.c
+++ b/g10/gpg.c
@@ -4515,7 +4515,7 @@ main (int argc, char **argv)
opt.import_options |= IMPORT_FAST; /* fall through */
case aImport:
import_keys (ctrl, argc? argv:NULL, argc, NULL,
- opt.import_options, opt.key_origin, NULL);
+ opt.import_options, opt.key_origin, opt.key_origin_url);
break;
/* TODO: There are a number of command that use this same
diff --git a/g10/import.c b/g10/import.c
index d22c8f457..f18ef48f2 100644
--- a/g10/import.c
+++ b/g10/import.c
@@ -1425,6 +1425,22 @@ apply_meta_data (kbnode_t keyblock, int origin, const char *url)
if (!pk->updateurl)
return gpg_error_from_syserror ();
}
+ else if (origin == KEYORG_FILE)
+ {
+ pk->keyorg = origin;
+ pk->keyupdate = curtime;
+ }
+ else if (origin == KEYORG_URL)
+ {
+ pk->keyorg = origin;
+ pk->keyupdate = curtime;
+ if (url)
+ {
+ pk->updateurl = xtrystrdup (url);
+ if (!pk->updateurl)
+ return gpg_error_from_syserror ();
+ }
+ }
}
else if (node->pkt->pkttype == PKT_USER_ID)
{
@@ -1458,6 +1474,16 @@ apply_meta_data (kbnode_t keyblock, int origin, const char *url)
uid->keyorg = origin;
uid->keyupdate = curtime;
}
+ else if (origin == KEYORG_FILE)
+ {
+ uid->keyorg = origin;
+ uid->keyupdate = curtime;
+ }
+ else if (origin == KEYORG_URL)
+ {
+ uid->keyorg = origin;
+ uid->keyupdate = curtime;
+ }
}
}
diff --git a/g10/keyserver.c b/g10/keyserver.c
index 4d2a2c873..a8c222d3f 100644
--- a/g10/keyserver.c
+++ b/g10/keyserver.c
@@ -1884,7 +1884,7 @@ keyserver_fetch (ctrl_t ctrl, strlist_t urilist, int origin)
stats_handle = import_new_stats_handle();
import_keys_es_stream (ctrl, datastream, stats_handle, NULL, NULL,
opt.keyserver_options.import_options,
- NULL, NULL, origin, NULL);
+ NULL, NULL, origin, sl->d);
import_print_stats (stats_handle);
import_release_stats_handle (stats_handle);
diff --git a/g10/options.h b/g10/options.h
index 21249e9ea..83f402853 100644
--- a/g10/options.h
+++ b/g10/options.h
@@ -266,6 +266,7 @@ struct
/* The value of --key-origin. See parse_key_origin(). */
int key_origin;
+ char *key_origin_url;
int passphrase_repeat;
int pinentry_mode;