mirror of
git://git.gnupg.org/gnupg.git
synced 2024-12-22 10:19:57 +01:00
d261f5e5d0
* common/comopt.h (struct gnupg_comopt_s): New. * common/comopt.c (struct gnupg_comopt_s): Define here in the data segment.
140 lines
3.7 KiB
C
140 lines
3.7 KiB
C
/* comopt.c - Common options for GnUPG (common.conf)
|
|
* Copyright (C) 2021 g10 Code GmbH
|
|
*
|
|
* This file is part of GnuPG.
|
|
*
|
|
* This file is free software; you can redistribute it and/or modify
|
|
* it under the terms of either
|
|
*
|
|
* - the GNU Lesser General Public License as published by the Free
|
|
* Software Foundation; either version 3 of the License, or (at
|
|
* your option) any later version.
|
|
*
|
|
* or
|
|
*
|
|
* - the GNU General Public License as published by the Free
|
|
* Software Foundation; either version 2 of the License, or (at
|
|
* your option) any later version.
|
|
*
|
|
* or both in parallel, as here.
|
|
*
|
|
* This file 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/>.
|
|
* SPDX-License-Identifier: (LGPL-3.0-or-later OR GPL-2.0-or-later)
|
|
*/
|
|
|
|
#include <config.h>
|
|
#include <stdlib.h>
|
|
#include <errno.h>
|
|
#include <ctype.h>
|
|
|
|
#include "util.h"
|
|
#include "i18n.h"
|
|
#include "comopt.h"
|
|
|
|
|
|
enum opt_values
|
|
{
|
|
aNull = 0,
|
|
|
|
oLogFile = 500,
|
|
oUseKeyboxd,
|
|
oKeyboxdProgram,
|
|
oNoAutostart,
|
|
|
|
oNoop
|
|
};
|
|
|
|
static gpgrt_opt_t opts[] = {
|
|
ARGPARSE_s_s (oLogFile, "log-file", "@"),
|
|
ARGPARSE_s_n (oUseKeyboxd, "use-keyboxd", "@"),
|
|
ARGPARSE_s_n (oNoAutostart, "no-autostart", "@"),
|
|
ARGPARSE_s_s (oKeyboxdProgram, "keyboxd-program", "@"),
|
|
|
|
ARGPARSE_end ()
|
|
};
|
|
|
|
|
|
struct gnupg_comopt_s comopt = {NULL};
|
|
|
|
|
|
/* Parse the common options in the homedir and etc. This needs to be
|
|
* called after the gpgrt config directories are set. MODULE_ID is one of
|
|
* the GNUPG_MODULE_NAME_ constants. If verbose is true info about
|
|
* the parsing is printed. Note that this function is not
|
|
* thread-safe. */
|
|
gpg_error_t
|
|
parse_comopt (int module_id, int verbose)
|
|
{
|
|
gpg_error_t err = 0;
|
|
gpgrt_argparse_t pargs;
|
|
int argc = 0;
|
|
char **argv = NULL;
|
|
|
|
/* Reset all options in case we are called a second time. */
|
|
xfree (comopt.logfile);
|
|
xfree (comopt.keyboxd_program);
|
|
memset (&comopt, 0, sizeof comopt);
|
|
|
|
/* Start the parser. */
|
|
pargs.argc = &argc;
|
|
pargs.argv = &argv;
|
|
pargs.flags = (ARGPARSE_FLAG_NOVERSION
|
|
| ARGPARSE_FLAG_SYS
|
|
| ARGPARSE_FLAG_USER
|
|
);
|
|
while (gpgrt_argparser (&pargs, opts, "common" EXTSEP_S "conf" ))
|
|
{
|
|
switch (pargs.r_opt)
|
|
{
|
|
case ARGPARSE_CONFFILE:
|
|
if (verbose)
|
|
log_info (_("reading options from '%s'\n"),
|
|
pargs.r_type? pargs.r.ret_str: "[cmdline]");
|
|
break;
|
|
|
|
case oLogFile:
|
|
comopt.logfile = pargs.r.ret_str;
|
|
break;
|
|
|
|
case oUseKeyboxd:
|
|
comopt.use_keyboxd = 1;
|
|
break;
|
|
|
|
case oNoAutostart:
|
|
comopt.no_autostart = 1;
|
|
break;
|
|
|
|
case oKeyboxdProgram:
|
|
comopt.keyboxd_program = pargs.r.ret_str;
|
|
break;
|
|
|
|
default:
|
|
pargs.err = ARGPARSE_PRINT_WARNING;
|
|
err = gpg_error (GPG_ERR_GENERAL);
|
|
break;
|
|
}
|
|
}
|
|
|
|
gpgrt_argparse (NULL, &pargs, NULL); /* Release internal state. */
|
|
|
|
if (comopt.logfile && !(!strncmp (comopt.logfile, "socket:", 7)
|
|
|| !strncmp (comopt.logfile, "tcp:", 4)) )
|
|
{
|
|
/* Letting all modules write to the same log file is not a good
|
|
* idea. Append the module name. */
|
|
char *p;
|
|
|
|
p = xstrconcat (comopt.logfile, "-", gnupg_module_name (module_id), NULL);
|
|
xfree (comopt.logfile);
|
|
comopt.logfile = p;
|
|
}
|
|
|
|
return err;
|
|
}
|