common: Prepare for more flags in start_new_service.

* common/asshelp.h (ASSHELP_FLAG_AUTOSTART): New.
* common/asshelp.c (start_new_service): Rename arg autostart to flags
and adjust checks.
(start_new_gpg_agent): Likewise.  Change all callers.
(start_new_keyboxd): Likewise.  Change all callers.
(start_new_dirmngr): Likewise.  Change all callers.
--

It is easier to have a generic flags arg instead of adding more and
more dedicated args.  verbose and debug are kept as they are because
they are not boolean.
This commit is contained in:
Werner Koch 2023-08-29 13:18:13 +02:00
parent 716e59b0b6
commit a430f22549
No known key found for this signature in database
GPG Key ID: E3FDFF218E45B72B
14 changed files with 48 additions and 29 deletions

View File

@ -386,7 +386,8 @@ start_new_service (assuan_context_t *r_ctx,
const char *opt_lc_ctype, const char *opt_lc_ctype,
const char *opt_lc_messages, const char *opt_lc_messages,
session_env_t session_env, session_env_t session_env,
int autostart, int verbose, int debug, unsigned int flags,
int verbose, int debug,
gpg_error_t (*status_cb)(ctrl_t, int, ...), gpg_error_t (*status_cb)(ctrl_t, int, ...),
ctrl_t status_cb_arg) ctrl_t status_cb_arg)
{ {
@ -445,7 +446,7 @@ start_new_service (assuan_context_t *r_ctx,
} }
err = assuan_socket_connect (ctx, sockname, 0, connect_flags); err = assuan_socket_connect (ctx, sockname, 0, connect_flags);
if (err && autostart) if (err && (flags & ASSHELP_FLAG_AUTOSTART))
{ {
char *abs_homedir; char *abs_homedir;
lock_spawn_t lock; lock_spawn_t lock;
@ -547,7 +548,8 @@ start_new_service (assuan_context_t *r_ctx,
xfree (sockname); xfree (sockname);
if (err) if (err)
{ {
if (autostart || gpg_err_code (err) != GPG_ERR_ASS_CONNECT_FAILED) if ((flags & ASSHELP_FLAG_AUTOSTART)
|| gpg_err_code (err) != GPG_ERR_ASS_CONNECT_FAILED)
log_error ("can't connect to the %s: %s\n", log_error ("can't connect to the %s: %s\n",
printed_name, gpg_strerror (err)); printed_name, gpg_strerror (err));
assuan_release (ctx); assuan_release (ctx);
@ -599,55 +601,58 @@ start_new_gpg_agent (assuan_context_t *r_ctx,
const char *opt_lc_ctype, const char *opt_lc_ctype,
const char *opt_lc_messages, const char *opt_lc_messages,
session_env_t session_env, session_env_t session_env,
int autostart, int verbose, int debug, unsigned int flags,
int verbose, int debug,
gpg_error_t (*status_cb)(ctrl_t, int, ...), gpg_error_t (*status_cb)(ctrl_t, int, ...),
ctrl_t status_cb_arg) ctrl_t status_cb_arg)
{ {
return start_new_service (r_ctx, GNUPG_MODULE_NAME_AGENT, return start_new_service (r_ctx, GNUPG_MODULE_NAME_AGENT,
errsource, agent_program, errsource, agent_program,
opt_lc_ctype, opt_lc_messages, session_env, opt_lc_ctype, opt_lc_messages, session_env,
autostart, verbose, debug, flags, verbose, debug,
status_cb, status_cb_arg); status_cb, status_cb_arg);
} }
/* Try to connect to the dirmngr via a socket. On platforms /* Try to connect to the dirmngr via a socket. On platforms
supporting it, start it up if needed and if AUTOSTART is true. supporting it, start it up if needed and if ASSHELP_FLAG_AUTOSTART is set.
Returns a new assuan context at R_CTX or an error code. */ Returns a new assuan context at R_CTX or an error code. */
gpg_error_t gpg_error_t
start_new_keyboxd (assuan_context_t *r_ctx, start_new_keyboxd (assuan_context_t *r_ctx,
gpg_err_source_t errsource, gpg_err_source_t errsource,
const char *keyboxd_program, const char *keyboxd_program,
int autostart, int verbose, int debug, unsigned int flags,
int verbose, int debug,
gpg_error_t (*status_cb)(ctrl_t, int, ...), gpg_error_t (*status_cb)(ctrl_t, int, ...),
ctrl_t status_cb_arg) ctrl_t status_cb_arg)
{ {
return start_new_service (r_ctx, GNUPG_MODULE_NAME_KEYBOXD, return start_new_service (r_ctx, GNUPG_MODULE_NAME_KEYBOXD,
errsource, keyboxd_program, errsource, keyboxd_program,
NULL, NULL, NULL, NULL, NULL, NULL,
autostart, verbose, debug, flags, verbose, debug,
status_cb, status_cb_arg); status_cb, status_cb_arg);
} }
/* Try to connect to the dirmngr via a socket. On platforms /* Try to connect to the dirmngr via a socket. On platforms
supporting it, start it up if needed and if AUTOSTART is true. supporting it, start it up if needed and if ASSHELP_FLAG_AUTOSTART is set.
Returns a new assuan context at R_CTX or an error code. */ Returns a new assuan context at R_CTX or an error code. */
gpg_error_t gpg_error_t
start_new_dirmngr (assuan_context_t *r_ctx, start_new_dirmngr (assuan_context_t *r_ctx,
gpg_err_source_t errsource, gpg_err_source_t errsource,
const char *dirmngr_program, const char *dirmngr_program,
int autostart, int verbose, int debug, unsigned int flags,
int verbose, int debug,
gpg_error_t (*status_cb)(ctrl_t, int, ...), gpg_error_t (*status_cb)(ctrl_t, int, ...),
ctrl_t status_cb_arg) ctrl_t status_cb_arg)
{ {
#ifndef USE_DIRMNGR_AUTO_START #ifndef USE_DIRMNGR_AUTO_START
autostart = 0; flags &= ~ASSHELP_FLAG_AUTOSTART; /* Clear flag. */
#endif #endif
return start_new_service (r_ctx, GNUPG_MODULE_NAME_DIRMNGR, return start_new_service (r_ctx, GNUPG_MODULE_NAME_DIRMNGR,
errsource, dirmngr_program, errsource, dirmngr_program,
NULL, NULL, NULL, NULL, NULL, NULL,
autostart, verbose, debug, flags, verbose, debug,
status_cb, status_cb_arg); status_cb, status_cb_arg);
} }

View File

@ -37,6 +37,8 @@
#include "util.h" #include "util.h"
/*-- asshelp.c --*/ /*-- asshelp.c --*/
#define ASSHELP_FLAG_AUTOSTART 1 /* Autostart the new service. */
void setup_libassuan_logging (unsigned int *debug_var_address, void setup_libassuan_logging (unsigned int *debug_var_address,
int (*log_monitor)(assuan_context_t ctx, int (*log_monitor)(assuan_context_t ctx,
@ -61,7 +63,8 @@ start_new_gpg_agent (assuan_context_t *r_ctx,
const char *opt_lc_ctype, const char *opt_lc_ctype,
const char *opt_lc_messages, const char *opt_lc_messages,
session_env_t session_env, session_env_t session_env,
int autostart, int verbose, int debug, unsigned int flags,
int verbose, int debug,
gpg_error_t (*status_cb)(ctrl_t, int, ...), gpg_error_t (*status_cb)(ctrl_t, int, ...),
ctrl_t status_cb_arg); ctrl_t status_cb_arg);
@ -71,7 +74,8 @@ gpg_error_t
start_new_keyboxd (assuan_context_t *r_ctx, start_new_keyboxd (assuan_context_t *r_ctx,
gpg_err_source_t errsource, gpg_err_source_t errsource,
const char *keyboxd_program, const char *keyboxd_program,
int autostart, int verbose, int debug, unsigned int flags,
int verbose, int debug,
gpg_error_t (*status_cb)(ctrl_t, int, ...), gpg_error_t (*status_cb)(ctrl_t, int, ...),
ctrl_t status_cb_arg); ctrl_t status_cb_arg);
@ -81,7 +85,8 @@ gpg_error_t
start_new_dirmngr (assuan_context_t *r_ctx, start_new_dirmngr (assuan_context_t *r_ctx,
gpg_err_source_t errsource, gpg_err_source_t errsource,
const char *dirmngr_program, const char *dirmngr_program,
int autostart, int verbose, int debug, unsigned int flags,
int verbose, int debug,
gpg_error_t (*status_cb)(ctrl_t, int, ...), gpg_error_t (*status_cb)(ctrl_t, int, ...),
ctrl_t status_cb_arg); ctrl_t status_cb_arg);

View File

@ -94,7 +94,8 @@ start_agent (void)
agentargs.lc_ctype, agentargs.lc_ctype,
agentargs.lc_messages, agentargs.lc_messages,
agentargs.session_env, agentargs.session_env,
1, agentargs.verbosity, 0, NULL, NULL); ASSHELP_FLAG_AUTOSTART,
agentargs.verbosity, 0, NULL, NULL);
if (!err) if (!err)
{ {
/* Tell the agent that we support Pinentry notifications. No /* Tell the agent that we support Pinentry notifications. No

View File

@ -308,7 +308,7 @@ main (int argc, char **argv )
opt.dirmngr_program opt.dirmngr_program
? opt.dirmngr_program ? opt.dirmngr_program
: gnupg_module_name (GNUPG_MODULE_NAME_DIRMNGR), : gnupg_module_name (GNUPG_MODULE_NAME_DIRMNGR),
! cmd_ping, cmd_ping? 0 : ASSHELP_FLAG_AUTOSTART,
opt.verbose, opt.verbose,
0, 0,
NULL, NULL); NULL, NULL);

View File

@ -248,7 +248,8 @@ start_agent (ctrl_t ctrl, int flag_for_card)
opt.agent_program, opt.agent_program,
opt.lc_ctype, opt.lc_messages, opt.lc_ctype, opt.lc_messages,
opt.session_env, opt.session_env,
opt.autostart, opt.verbose, DBG_IPC, opt.autostart?ASSHELP_FLAG_AUTOSTART:0,
opt.verbose, DBG_IPC,
NULL, NULL); NULL, NULL);
if (!opt.autostart && gpg_err_code (rc) == GPG_ERR_NO_AGENT) if (!opt.autostart && gpg_err_code (rc) == GPG_ERR_NO_AGENT)
{ {

View File

@ -166,7 +166,8 @@ create_context (ctrl_t ctrl, assuan_context_t *r_ctx)
err = start_new_dirmngr (&ctx, err = start_new_dirmngr (&ctx,
GPG_ERR_SOURCE_DEFAULT, GPG_ERR_SOURCE_DEFAULT,
opt.dirmngr_program, opt.dirmngr_program,
opt.autostart, opt.verbose, DBG_IPC, opt.autostart?ASSHELP_FLAG_AUTOSTART:0,
opt.verbose, DBG_IPC,
NULL /*gpg_status2*/, ctrl); NULL /*gpg_status2*/, ctrl);
if (!opt.autostart && gpg_err_code (err) == GPG_ERR_NO_DIRMNGR) if (!opt.autostart && gpg_err_code (err) == GPG_ERR_NO_DIRMNGR)
{ {

View File

@ -150,7 +150,8 @@ create_new_context (ctrl_t ctrl, assuan_context_t *r_ctx)
err = start_new_keyboxd (&ctx, err = start_new_keyboxd (&ctx,
GPG_ERR_SOURCE_DEFAULT, GPG_ERR_SOURCE_DEFAULT,
opt.keyboxd_program, opt.keyboxd_program,
opt.autostart, opt.verbose, DBG_IPC, opt.autostart?ASSHELP_FLAG_AUTOSTART:0,
opt.verbose, DBG_IPC,
NULL, ctrl); NULL, ctrl);
if (!opt.autostart && gpg_err_code (err) == GPG_ERR_NO_KEYBOXD) if (!opt.autostart && gpg_err_code (err) == GPG_ERR_NO_KEYBOXD)
{ {

View File

@ -118,7 +118,8 @@ start_agent (ctrl_t ctrl)
opt.agent_program, opt.agent_program,
opt.lc_ctype, opt.lc_messages, opt.lc_ctype, opt.lc_messages,
opt.session_env, opt.session_env,
opt.autostart, opt.verbose, DBG_IPC, opt.autostart?ASSHELP_FLAG_AUTOSTART:0,
opt.verbose, DBG_IPC,
gpgsm_status2, ctrl); gpgsm_status2, ctrl);
if (!opt.autostart && gpg_err_code (rc) == GPG_ERR_NO_AGENT) if (!opt.autostart && gpg_err_code (rc) == GPG_ERR_NO_AGENT)

View File

@ -228,7 +228,8 @@ start_dirmngr_ext (ctrl_t ctrl, assuan_context_t *ctx_r)
err = start_new_dirmngr (&ctx, GPG_ERR_SOURCE_DEFAULT, err = start_new_dirmngr (&ctx, GPG_ERR_SOURCE_DEFAULT,
opt.dirmngr_program, opt.dirmngr_program,
opt.autostart, opt.verbose, DBG_IPC, opt.autostart?ASSHELP_FLAG_AUTOSTART:0,
opt.verbose, DBG_IPC,
gpgsm_status2, ctrl); gpgsm_status2, ctrl);
if (!opt.autostart && gpg_err_code (err) == GPG_ERR_NO_DIRMNGR) if (!opt.autostart && gpg_err_code (err) == GPG_ERR_NO_DIRMNGR)
{ {

View File

@ -523,7 +523,8 @@ create_new_context (ctrl_t ctrl, assuan_context_t *r_ctx)
err = start_new_keyboxd (&ctx, err = start_new_keyboxd (&ctx,
GPG_ERR_SOURCE_DEFAULT, GPG_ERR_SOURCE_DEFAULT,
opt.keyboxd_program, opt.keyboxd_program,
opt.autostart, opt.verbose, DBG_IPC, opt.autostart?ASSHELP_FLAG_AUTOSTART:0,
opt.verbose, DBG_IPC,
NULL, ctrl); NULL, ctrl);
if (!opt.autostart && gpg_err_code (err) == GPG_ERR_NO_KEYBOXD) if (!opt.autostart && gpg_err_code (err) == GPG_ERR_NO_KEYBOXD)
{ {

View File

@ -65,7 +65,8 @@ connect_dirmngr (assuan_context_t *r_ctx)
err = start_new_dirmngr (&ctx, err = start_new_dirmngr (&ctx,
GPG_ERR_SOURCE_DEFAULT, GPG_ERR_SOURCE_DEFAULT,
NULL, NULL,
opt.autostart, opt.verbose, opt.debug_ipc, opt.autostart?ASSHELP_FLAG_AUTOSTART:0,
opt.verbose, opt.debug_ipc,
NULL, NULL); NULL, NULL);
if (!opt.autostart && gpg_err_code (err) == GPG_ERR_NO_DIRMNGR) if (!opt.autostart && gpg_err_code (err) == GPG_ERR_NO_DIRMNGR)
{ {

View File

@ -299,7 +299,8 @@ start_agent (unsigned int flags)
opt.agent_program, opt.agent_program,
opt.lc_ctype, opt.lc_messages, opt.lc_ctype, opt.lc_messages,
opt.session_env, opt.session_env,
opt.autostart, opt.verbose, DBG_IPC, opt.autostart?ASSHELP_FLAG_AUTOSTART:0,
opt.verbose, DBG_IPC,
NULL, NULL); NULL, NULL);
if (!opt.autostart && gpg_err_code (err) == GPG_ERR_NO_AGENT) if (!opt.autostart && gpg_err_code (err) == GPG_ERR_NO_AGENT)
{ {

View File

@ -396,7 +396,7 @@ start_agent (assuan_context_t *ctx_p)
opt.agent_program, opt.agent_program,
NULL, NULL, NULL, NULL,
session_env, session_env,
opt.autostart, opt.autostart?ASSHELP_FLAG_AUTOSTART:0,
!opt.quiet, 0, !opt.quiet, 0,
NULL, NULL); NULL, NULL);

View File

@ -2341,14 +2341,14 @@ start_agent (void)
err = start_new_dirmngr (&ctx, err = start_new_dirmngr (&ctx,
GPG_ERR_SOURCE_DEFAULT, GPG_ERR_SOURCE_DEFAULT,
opt.dirmngr_program, opt.dirmngr_program,
opt.autostart, opt.autostart?ASSHELP_FLAG_AUTOSTART:0,
!opt.quiet, 0, !opt.quiet, 0,
NULL, NULL); NULL, NULL);
else if (opt.use_keyboxd) else if (opt.use_keyboxd)
err = start_new_keyboxd (&ctx, err = start_new_keyboxd (&ctx,
GPG_ERR_SOURCE_DEFAULT, GPG_ERR_SOURCE_DEFAULT,
opt.keyboxd_program, opt.keyboxd_program,
opt.autostart, opt.autostart?ASSHELP_FLAG_AUTOSTART:0,
!opt.quiet, 0, !opt.quiet, 0,
NULL, NULL); NULL, NULL);
else else
@ -2357,7 +2357,7 @@ start_agent (void)
opt.agent_program, opt.agent_program,
NULL, NULL, NULL, NULL,
session_env, session_env,
opt.autostart, opt.autostart?ASSHELP_FLAG_AUTOSTART:0,
!opt.quiet, 0, !opt.quiet, 0,
NULL, NULL); NULL, NULL);