diff options
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; |