1
0
mirror of git://git.gnupg.org/gnupg.git synced 2024-11-11 21:48:50 +01:00

gpgconf: Ignore non-installed components with --apply-profile.

* tools/gpgconf-comp.c (retrieve_options_from_program): Add arg
only_installed.
(gc_component_retrieve_options): Use this if we want to process all
components.
--

Note that this also also ignores them in --with-defaults.  This is
useful for systems which come without scdaemon.

GnuPG-bug-id: 3313
Signed-off-by: Werner Koch <wk@gnupg.org>
This commit is contained in:
Werner Koch 2017-10-24 12:01:07 +02:00
parent 560d85ecff
commit 6e808ae470
No known key found for this signature in database
GPG Key ID: E3FDFF218E45B72B

View File

@ -2085,9 +2085,12 @@ get_config_filename (gc_component_t component, gc_backend_t backend)
/* Retrieve the options for the component COMPONENT from backend /* Retrieve the options for the component COMPONENT from backend
BACKEND, which we already know is a program-type backend. */ * BACKEND, which we already know is a program-type backend. With
* ONLY_INSTALLED set components which are not installed are silently
* ignored. */
static void static void
retrieve_options_from_program (gc_component_t component, gc_backend_t backend) retrieve_options_from_program (gc_component_t component, gc_backend_t backend,
int only_installed)
{ {
gpg_error_t err; gpg_error_t err;
const char *pgmname; const char *pgmname;
@ -2107,6 +2110,11 @@ retrieve_options_from_program (gc_component_t component, gc_backend_t backend)
argv[0] = "--gpgconf-list"; argv[0] = "--gpgconf-list";
argv[1] = NULL; argv[1] = NULL;
if (only_installed && access (pgmname, X_OK))
{
return; /* The component is not installed. */
}
err = gnupg_spawn_process (pgmname, argv, NULL, NULL, 0, err = gnupg_spawn_process (pgmname, argv, NULL, NULL, 0,
NULL, &outfp, NULL, &pid); NULL, &outfp, NULL, &pid);
if (err) if (err)
@ -2378,7 +2386,7 @@ retrieve_options_from_file (gc_component_t component, gc_backend_t backend)
/* Retrieve the currently active options and their defaults from all /* Retrieve the currently active options and their defaults from all
involved backends for this component. Using -1 for component will involved backends for this component. Using -1 for component will
retrieve all options from all components. */ retrieve all options from all installed components. */
void void
gc_component_retrieve_options (int component) gc_component_retrieve_options (int component)
{ {
@ -2420,7 +2428,8 @@ gc_component_retrieve_options (int component)
assert (backend != GC_BACKEND_ANY); assert (backend != GC_BACKEND_ANY);
if (gc_backend[backend].program) if (gc_backend[backend].program)
retrieve_options_from_program (component, backend); retrieve_options_from_program (component, backend,
process_all);
else else
retrieve_options_from_file (component, backend); retrieve_options_from_file (component, backend);
} }