1
0
mirror of git://git.gnupg.org/gnupg.git synced 2025-01-03 12:11:33 +01:00

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 <wk@gnupg.org>
This commit is contained in:
Werner Koch 2017-07-24 21:07:03 +02:00
parent 2ca0381d07
commit 87b5421ca8
No known key found for this signature in database
GPG Key ID: E3FDFF218E45B72B
6 changed files with 49 additions and 5 deletions

View File

@ -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 the @option{--status-fd} line ``PROGRESS'' to provide a value for
``total'' if that is not available by other means. ``total'' if that is not available by other means.
@item --key-origin @var{string} @item --key-origin @var{string}[,@var{url}]
@opindex key-origin @opindex key-origin
gpg can track the origin of a key. Certain origins are implicitly gpg can track the origin of a key. Certain origins are implicitly
known (e.g. keyserver, web key directory) and set. For a standard 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. import the origin of the keys imported can be set with this option.
To list the possible values use "help" for @var{string}. 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} @item --import-options @code{parameters}
@opindex import-options @opindex import-options

View File

@ -4325,6 +4325,11 @@ int
parse_key_origin (char *string) parse_key_origin (char *string)
{ {
int i; int i;
char *comma;
comma = strchr (string, ',');
if (comma)
*comma = 0;
if (!ascii_strcasecmp (string, "help")) if (!ascii_strcasecmp (string, "help"))
{ {
@ -4338,9 +4343,19 @@ parse_key_origin (char *string)
if (!ascii_strcasecmp (string, key_origin_list[i].name)) if (!ascii_strcasecmp (string, key_origin_list[i].name))
{ {
opt.key_origin = key_origin_list[i].origin; 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; return 1;
} }
if (comma)
*comma = ',';
return 0; return 0;
} }

View File

@ -4515,7 +4515,7 @@ main (int argc, char **argv)
opt.import_options |= IMPORT_FAST; /* fall through */ opt.import_options |= IMPORT_FAST; /* fall through */
case aImport: case aImport:
import_keys (ctrl, argc? argv:NULL, argc, NULL, 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; break;
/* TODO: There are a number of command that use this same /* TODO: There are a number of command that use this same

View File

@ -1425,6 +1425,22 @@ apply_meta_data (kbnode_t keyblock, int origin, const char *url)
if (!pk->updateurl) if (!pk->updateurl)
return gpg_error_from_syserror (); 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) 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->keyorg = origin;
uid->keyupdate = curtime; 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;
}
} }
} }

View File

@ -1884,7 +1884,7 @@ keyserver_fetch (ctrl_t ctrl, strlist_t urilist, int origin)
stats_handle = import_new_stats_handle(); stats_handle = import_new_stats_handle();
import_keys_es_stream (ctrl, datastream, stats_handle, NULL, NULL, import_keys_es_stream (ctrl, datastream, stats_handle, NULL, NULL,
opt.keyserver_options.import_options, opt.keyserver_options.import_options,
NULL, NULL, origin, NULL); NULL, NULL, origin, sl->d);
import_print_stats (stats_handle); import_print_stats (stats_handle);
import_release_stats_handle (stats_handle); import_release_stats_handle (stats_handle);

View File

@ -266,6 +266,7 @@ struct
/* The value of --key-origin. See parse_key_origin(). */ /* The value of --key-origin. See parse_key_origin(). */
int key_origin; int key_origin;
char *key_origin_url;
int passphrase_repeat; int passphrase_repeat;
int pinentry_mode; int pinentry_mode;