diff options
author | Werner Koch <[email protected]> | 2017-07-24 19:07:03 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2017-07-24 19:10:58 +0000 |
commit | 87b5421ca84bbea68217c9ed771ee8c0a98a4d0c (patch) | |
tree | 07df766cc85680c315c81f953079f2bd30139e65 | |
parent | gpg: Store key origin info for new keys from a keyserver (diff) | |
download | gnupg-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.texi | 8 | ||||
-rw-r--r-- | g10/getkey.c | 15 | ||||
-rw-r--r-- | g10/gpg.c | 2 | ||||
-rw-r--r-- | g10/import.c | 26 | ||||
-rw-r--r-- | g10/keyserver.c | 2 | ||||
-rw-r--r-- | g10/options.h | 1 |
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; } @@ -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; |