gpg: Let --fetch-key return an exit code on failure.

* g10/keyserver.c (keyserver_fetch): Return an error code.
* g10/gpg.c (main) <aFetchKeys>: Return 1 in case of no data.
--

GnuPG-bug-id: 5376
This commit is contained in:
Werner Koch 2021-06-25 09:55:27 +02:00
parent 95d707e093
commit 9579c77862
No known key found for this signature in database
GPG Key ID: E3FDFF218E45B72B
2 changed files with 20 additions and 4 deletions

View File

@ -4874,12 +4874,14 @@ main (int argc, char **argv)
for( ; argc; argc--, argv++ )
append_to_strlist2( &sl, *argv, utf8_strings );
rc = keyserver_fetch (ctrl, sl, opt.key_origin);
free_strlist (sl);
if(rc)
{
write_status_failure ("fetch-keys", rc);
log_error ("key fetch failed: %s\n",gpg_strerror (rc));
if (gpg_err_code (rc) == GPG_ERR_NO_DATA)
g10_exit (1); /* In this case return 1 and not 2. */
}
free_strlist(sl);
break;
case aExportSecret:

View File

@ -1648,6 +1648,8 @@ keyserver_fetch (ctrl_t ctrl, strlist_t urilist, int origin)
strlist_t sl;
estream_t datastream;
unsigned int save_options = opt.keyserver_options.import_options;
int any_success = 0;
gpg_error_t firsterr = 0;
/* Switch on fast-import, since fetch can handle more than one
import and we don't want each set to rebuild the trustdb.
@ -1671,13 +1673,25 @@ keyserver_fetch (ctrl_t ctrl, strlist_t urilist, int origin)
import_print_stats (stats_handle);
import_release_stats_handle (stats_handle);
any_success = 1;
}
else
log_info (_("WARNING: unable to fetch URI %s: %s\n"),
sl->d, gpg_strerror (err));
{
log_info (_("WARNING: unable to fetch URI %s: %s\n"),
sl->d, gpg_strerror (err));
if (!firsterr)
firsterr = err;
}
es_fclose (datastream);
}
if (!urilist)
err = gpg_error (GPG_ERR_NO_NAME);
else if (any_success)
err = 0;
else
err = firsterr;
opt.keyserver_options.import_options = save_options;
/* If the original options didn't have fast import, and the trustdb
@ -1685,7 +1699,7 @@ keyserver_fetch (ctrl_t ctrl, strlist_t urilist, int origin)
if (!(opt.keyserver_options.import_options&IMPORT_FAST))
check_or_update_trustdb (ctrl);
return 0;
return err;
}