1
0
mirror of git://git.gnupg.org/gnupg.git synced 2024-12-22 10:19:57 +01:00
gnupg/tools/gpgconf.h
Werner Koch b4f1159a5b
gpgconf: Rewrite the gpgconf-comp module.
* tools/gpgconf.h (gc_component_t): Change type to ...
(gc_component_id_t): this.
(GC_COMPONENT_ANY): New, so that we can use that in gpgconf-comp.c
directly.
* tools/gpgconf-comp.c: Major rework.
--

The primary reason for this rework is to support the global options.
A second reason is to clean up the code and simplify it so that we do
not anymore need to maintain a list of options in the components _and_
in gpgconf-comp.c.

What we do now is to

 1. Read the option tables directly from the components using
    the new generic --dump-option-table option.  This includes
    the header (group) descriptions.

 2. Read the default values from the components as before using
    --gpgconf-list and update gpgconf's internal tables with
    that info.

 3. Read the options using gpgrt_argparser in the same way as we do
    this in the components.

The changes also do away with the second level notion of backends;
they were only used for dirmngr's extra dirmngr_ldapservers.conf file.
We intend to remove that file and replace it with a regular option so
that it will be similar on how OpenPGP keyservers are specified.

The whole thing will currently be slower than before (in particular on
Windows) but we can optimize that by keeping a cached version of the
option tables and the default values in a per homedir cache file.

There is also some work planned to remove most of the data returned by
--gpgconf-list.  What can also be done is to replace the internal
tables, which list the gpgconf maintainable options, by a configuration
file so that admins are able to maintain the list of these options.

GnuPG-bug-id: 4788
Signed-off-by: Werner Koch <wk@gnupg.org>
2020-03-12 10:16:56 +01:00

132 lines
3.8 KiB
C

/* gpgconf.h - Global definitions for gpgconf
* Copyright (C) 2003 Free Software Foundation, Inc.
*
* This file is part of GnuPG.
*
* GnuPG is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* GnuPG is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <https://www.gnu.org/licenses/>.
*/
#ifndef GPGCONF_H
#define GPGCONF_H
#include "../common/util.h"
/* We keep all global options in the structure OPT. */
EXTERN_UNLESS_MAIN_MODULE
struct
{
int verbose; /* Verbosity level. */
int quiet; /* Be extra quiet. */
int dry_run; /* Don't change any persistent data. */
int runtime; /* Make changes active at runtime. */
int null; /* Option -0 active. */
char *outfile; /* Name of output file. */
int component; /* The active component. */
} opt;
/*-- gpgconf.c --*/
void gpgconf_write_status (int no, const char *format,
...) GPGRT_ATTR_PRINTF(2,3);
void gpgconf_failure (gpg_error_t err) GPGRT_ATTR_NORETURN;
/*-- gpgconf-comp.c --*/
/* Component system. Each component is a set of options that can be
* configured at the same time. If you change this, don't forget to
* update gc_component[] in gpgconf-comp.c. */
typedef enum
{
/* Any component, used as a wildcard arg. */
GC_COMPONENT_ANY,
/* The classic GPG for OpenPGP. */
GC_COMPONENT_GPG,
/* The GPG Agent. */
GC_COMPONENT_GPG_AGENT,
/* The Smardcard Daemon. */
GC_COMPONENT_SCDAEMON,
/* GPG for S/MIME. */
GC_COMPONENT_GPGSM,
/* The LDAP Directory Manager for CRLs. */
GC_COMPONENT_DIRMNGR,
/* The external Pinentry. */
GC_COMPONENT_PINENTRY,
/* The number of components. */
GC_COMPONENT_NR
} gc_component_id_t;
/* Initialize the components. */
void gc_components_init (void);
/* Percent-Escape special characters. The string is valid until the
next invocation of the function. */
char *gc_percent_escape (const char *src);
void gc_error (int status, int errnum, const char *fmt, ...);
/* Launch given component. */
gpg_error_t gc_component_launch (int component);
/* Kill given component. */
void gc_component_kill (int component);
/* Reload given component. */
void gc_component_reload (int component);
/* List all components that are available. */
void gc_component_list_components (estream_t out);
/* List all programs along with their status. */
void gc_check_programs (estream_t out);
/* Find the component with the name NAME. Returns -1 if not
found. */
int gc_component_find (const char *name);
/* Retrieve the currently active options and their defaults from all
involved backends for this component. */
void gc_component_retrieve_options (int component);
/* List all options of the component COMPONENT. */
void gc_component_list_options (int component, estream_t out);
/* Read the modifications from IN and apply them. */
void gc_component_change_options (int component, estream_t in, estream_t out,
int verbatim);
/* Check the options of a single component. Returns 0 if everything
is OK. */
int gc_component_check_options (int component, estream_t out,
const char *conf_file);
/* Process global configuration file. */
int gc_process_gpgconf_conf (const char *fname, int update, int defaults,
estream_t listfp);
/* Apply a profile. */
gpg_error_t gc_apply_profile (const char *fname);
#endif /*GPGCONF_H*/