mirror of
git://git.gnupg.org/gnupg.git
synced 2025-01-03 12:11:33 +01:00
tools: New option --keyboxd for gpg-connect-agent.
* configure.ac: New option --keyboxd-pgm. (KEYBOXD_NAME, KEYBOXD_DISP_NAME): New ac_defines. * common/util.h: Add substitutes for new error codes. (GNUPG_MODULE_NAME_KEYBOXD): New. * common/homedir.c (gnupg_module_name): Support GNUPG_MODULE_NAME_KEYBOXD. * common/asshelp.c (SECS_TO_WAIT_FOR_KEYBOXD): New. (wait_for_sock): Support keyboxd. (start_new_service): Ditto. (start_new_keyboxd): New. * tools/gpg-connect-agent.c: New options --keyboxd and --keyboxd-program. (start_agent): Implement new option. -- This change allows us to test the new keyboxd using our standard helper. It also provides the necessary code to start keyboxd on the fly. Signed-off-by: Werner Koch <wk@gnupg.org>
This commit is contained in:
parent
e22ebf3570
commit
0611f548bc
@ -56,9 +56,11 @@
|
|||||||
operation after we started them before giving up. */
|
operation after we started them before giving up. */
|
||||||
#ifdef HAVE_W32CE_SYSTEM
|
#ifdef HAVE_W32CE_SYSTEM
|
||||||
# define SECS_TO_WAIT_FOR_AGENT 30
|
# define SECS_TO_WAIT_FOR_AGENT 30
|
||||||
|
# define SECS_TO_WAIT_FOR_KEYBOXD 30
|
||||||
# define SECS_TO_WAIT_FOR_DIRMNGR 30
|
# define SECS_TO_WAIT_FOR_DIRMNGR 30
|
||||||
#else
|
#else
|
||||||
# define SECS_TO_WAIT_FOR_AGENT 5
|
# define SECS_TO_WAIT_FOR_AGENT 5
|
||||||
|
# define SECS_TO_WAIT_FOR_KEYBOXD 5
|
||||||
# define SECS_TO_WAIT_FOR_DIRMNGR 5
|
# define SECS_TO_WAIT_FOR_DIRMNGR 5
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -308,17 +310,14 @@ unlock_spawning (lock_spawn_t *lock, const char *name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Helper for start_new_gpg_agent and start_new_dirmngr.
|
/* Helper to start a service.
|
||||||
* Values for WHICH are:
|
* SECS gives the number of seconds to wait. SOCKNAME is the name of
|
||||||
* 0 - Start gpg-agent
|
|
||||||
* 1 - Start dirmngr
|
|
||||||
* SECS give the number of seconds to wait. SOCKNAME is the name of
|
|
||||||
* the socket to connect. VERBOSE is the usual verbose flag. CTX is
|
* the socket to connect. VERBOSE is the usual verbose flag. CTX is
|
||||||
* the assuan context. DID_SUCCESS_MSG will be set to 1 if a success
|
* the assuan context. DID_SUCCESS_MSG will be set to 1 if a success
|
||||||
* messages has been printed.
|
* messages has been printed.
|
||||||
*/
|
*/
|
||||||
static gpg_error_t
|
static gpg_error_t
|
||||||
wait_for_sock (int secs, int which, const char *sockname,
|
wait_for_sock (int secs, int module_name_id, const char *sockname,
|
||||||
int verbose, assuan_context_t ctx, int *did_success_msg)
|
int verbose, assuan_context_t ctx, int *did_success_msg)
|
||||||
{
|
{
|
||||||
gpg_error_t err = 0;
|
gpg_error_t err = 0;
|
||||||
@ -343,8 +342,10 @@ wait_for_sock (int secs, int which, const char *sockname,
|
|||||||
/* next_sleep_us); */
|
/* next_sleep_us); */
|
||||||
if (secsleft < lastalert)
|
if (secsleft < lastalert)
|
||||||
{
|
{
|
||||||
log_info (which == 1?
|
log_info (module_name_id == GNUPG_MODULE_NAME_DIRMNGR?
|
||||||
_("waiting for the dirmngr to come up ... (%ds)\n"):
|
_("waiting for the dirmngr to come up ... (%ds)\n"):
|
||||||
|
module_name_id == GNUPG_MODULE_NAME_KEYBOXD?
|
||||||
|
_("waiting for the keyboxd to come up ... (%ds)\n"):
|
||||||
_("waiting for the agent to come up ... (%ds)\n"),
|
_("waiting for the agent to come up ... (%ds)\n"),
|
||||||
secsleft);
|
secsleft);
|
||||||
lastalert = secsleft;
|
lastalert = secsleft;
|
||||||
@ -357,8 +358,10 @@ wait_for_sock (int secs, int which, const char *sockname,
|
|||||||
{
|
{
|
||||||
if (verbose)
|
if (verbose)
|
||||||
{
|
{
|
||||||
log_info (which == 1?
|
log_info (module_name_id == GNUPG_MODULE_NAME_DIRMNGR?
|
||||||
_("connection to the dirmngr established\n"):
|
_("connection to the dirmngr established\n"):
|
||||||
|
module_name_id == GNUPG_MODULE_NAME_KEYBOXD?
|
||||||
|
_("connection to the keyboxd established\n"):
|
||||||
_("connection to the agent established\n"));
|
_("connection to the agent established\n"));
|
||||||
*did_success_msg = 1;
|
*did_success_msg = 1;
|
||||||
}
|
}
|
||||||
@ -429,6 +432,14 @@ start_new_service (assuan_context_t *r_ctx,
|
|||||||
no_service_err = GPG_ERR_NO_DIRMNGR;
|
no_service_err = GPG_ERR_NO_DIRMNGR;
|
||||||
seconds_to_wait = SECS_TO_WAIT_FOR_DIRMNGR;
|
seconds_to_wait = SECS_TO_WAIT_FOR_DIRMNGR;
|
||||||
break;
|
break;
|
||||||
|
case GNUPG_MODULE_NAME_KEYBOXD:
|
||||||
|
sockname = make_filename (gnupg_socketdir (), KEYBOXD_SOCK_NAME, NULL);
|
||||||
|
lock_name = "keyboxd";
|
||||||
|
printed_name = "keyboxd";
|
||||||
|
status_start_line = "starting_keyboxd ? 0 0";
|
||||||
|
no_service_err = GPG_ERR_NO_KEYBOXD;
|
||||||
|
seconds_to_wait = SECS_TO_WAIT_FOR_KEYBOXD;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
err = gpg_error (GPG_ERR_INV_ARG);
|
err = gpg_error (GPG_ERR_INV_ARG);
|
||||||
assuan_release (ctx);
|
assuan_release (ctx);
|
||||||
@ -520,7 +531,7 @@ start_new_service (assuan_context_t *r_ctx,
|
|||||||
printed_name, program? program : program_name,
|
printed_name, program? program : program_name,
|
||||||
gpg_strerror (err));
|
gpg_strerror (err));
|
||||||
else
|
else
|
||||||
err = wait_for_sock (seconds_to_wait, 0,
|
err = wait_for_sock (seconds_to_wait, module_name_id,
|
||||||
sockname, verbose, ctx, &did_success_msg);
|
sockname, verbose, ctx, &did_success_msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -595,6 +606,25 @@ start_new_gpg_agent (assuan_context_t *r_ctx,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Try to connect to the dirmngr via a socket. On platforms
|
||||||
|
supporting it, start it up if needed and if AUTOSTART is true.
|
||||||
|
Returns a new assuan context at R_CTX or an error code. */
|
||||||
|
gpg_error_t
|
||||||
|
start_new_keyboxd (assuan_context_t *r_ctx,
|
||||||
|
gpg_err_source_t errsource,
|
||||||
|
const char *keyboxd_program,
|
||||||
|
int autostart, int verbose, int debug,
|
||||||
|
gpg_error_t (*status_cb)(ctrl_t, int, ...),
|
||||||
|
ctrl_t status_cb_arg)
|
||||||
|
{
|
||||||
|
return start_new_service (r_ctx, GNUPG_MODULE_NAME_KEYBOXD,
|
||||||
|
errsource, keyboxd_program,
|
||||||
|
NULL, NULL, NULL,
|
||||||
|
autostart, verbose, debug,
|
||||||
|
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 AUTOSTART is true.
|
||||||
Returns a new assuan context at R_CTX or an error code. */
|
Returns a new assuan context at R_CTX or an error code. */
|
||||||
|
@ -65,6 +65,16 @@ start_new_gpg_agent (assuan_context_t *r_ctx,
|
|||||||
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);
|
||||||
|
|
||||||
|
/* This function is used to connect to the keyboxd. If needed the
|
||||||
|
* keyboxd is started. */
|
||||||
|
gpg_error_t
|
||||||
|
start_new_keyboxd (assuan_context_t *r_ctx,
|
||||||
|
gpg_err_source_t errsource,
|
||||||
|
const char *keyboxd_program,
|
||||||
|
int autostart, int verbose, int debug,
|
||||||
|
gpg_error_t (*status_cb)(ctrl_t, int, ...),
|
||||||
|
ctrl_t status_cb_arg);
|
||||||
|
|
||||||
/* This function is used to connect to the dirmngr. On some platforms
|
/* This function is used to connect to the dirmngr. On some platforms
|
||||||
the function is able starts a dirmngr process if needed. */
|
the function is able starts a dirmngr process if needed. */
|
||||||
gpg_error_t
|
gpg_error_t
|
||||||
|
@ -1115,6 +1115,13 @@ gnupg_module_name (int which)
|
|||||||
X(bindir, "dirmngr", DIRMNGR_NAME);
|
X(bindir, "dirmngr", DIRMNGR_NAME);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
case GNUPG_MODULE_NAME_KEYBOXD:
|
||||||
|
#ifdef GNUPG_DEFAULT_KEYBOXD
|
||||||
|
return GNUPG_DEFAULT_KEYBOXD;
|
||||||
|
#else
|
||||||
|
X(bindir, "keyboxd", KEYBOXD_NAME);
|
||||||
|
#endif
|
||||||
|
|
||||||
case GNUPG_MODULE_NAME_PROTECT_TOOL:
|
case GNUPG_MODULE_NAME_PROTECT_TOOL:
|
||||||
#ifdef GNUPG_DEFAULT_PROTECT_TOOL
|
#ifdef GNUPG_DEFAULT_PROTECT_TOOL
|
||||||
return GNUPG_DEFAULT_PROTECT_TOOL;
|
return GNUPG_DEFAULT_PROTECT_TOOL;
|
||||||
|
@ -43,6 +43,10 @@
|
|||||||
#define GPG_ERR_NO_AUTH 314
|
#define GPG_ERR_NO_AUTH 314
|
||||||
#define GPG_ERR_BAD_AUTH 315
|
#define GPG_ERR_BAD_AUTH 315
|
||||||
#endif /*GPG_ERROR_VERSION_NUMBER*/
|
#endif /*GPG_ERROR_VERSION_NUMBER*/
|
||||||
|
#if GPG_ERROR_VERSION_NUMBER < 0x012500 /* 1.37 */
|
||||||
|
#define GPG_ERR_NO_KEYBOXD 316
|
||||||
|
#define GPG_ERR_KEYBOXD 317
|
||||||
|
#endif /*GPG_ERROR_VERSION_NUMBER*/
|
||||||
|
|
||||||
/* Hash function used with libksba. */
|
/* Hash function used with libksba. */
|
||||||
#define HASH_FNC ((void (*)(void *, const void*,size_t))gcry_md_write)
|
#define HASH_FNC ((void (*)(void *, const void*,size_t))gcry_md_write)
|
||||||
@ -243,6 +247,7 @@ const char *gnupg_libdir (void);
|
|||||||
const char *gnupg_datadir (void);
|
const char *gnupg_datadir (void);
|
||||||
const char *gnupg_localedir (void);
|
const char *gnupg_localedir (void);
|
||||||
const char *gnupg_cachedir (void);
|
const char *gnupg_cachedir (void);
|
||||||
|
const char *gpg_agent_socket_name (void);
|
||||||
const char *dirmngr_socket_name (void);
|
const char *dirmngr_socket_name (void);
|
||||||
|
|
||||||
char *_gnupg_socketdir_internal (int skip_checks, unsigned *r_info);
|
char *_gnupg_socketdir_internal (int skip_checks, unsigned *r_info);
|
||||||
@ -261,6 +266,7 @@ char *_gnupg_socketdir_internal (int skip_checks, unsigned *r_info);
|
|||||||
#define GNUPG_MODULE_NAME_GPGCONF 10
|
#define GNUPG_MODULE_NAME_GPGCONF 10
|
||||||
#define GNUPG_MODULE_NAME_DIRMNGR_LDAP 11
|
#define GNUPG_MODULE_NAME_DIRMNGR_LDAP 11
|
||||||
#define GNUPG_MODULE_NAME_GPGV 12
|
#define GNUPG_MODULE_NAME_GPGV 12
|
||||||
|
#define GNUPG_MODULE_NAME_KEYBOXD 13
|
||||||
const char *gnupg_module_name (int which);
|
const char *gnupg_module_name (int which);
|
||||||
void gnupg_module_name_flush_some (void);
|
void gnupg_module_name_flush_some (void);
|
||||||
void gnupg_set_builddir (const char *newdir);
|
void gnupg_set_builddir (const char *newdir);
|
||||||
|
13
configure.ac
13
configure.ac
@ -191,6 +191,14 @@ AM_CONDITIONAL(GNUPG_DIRMNGR_PGM, test -n "$GNUPG_DIRMNGR_PGM")
|
|||||||
show_gnupg_dirmngr_pgm="(default)"
|
show_gnupg_dirmngr_pgm="(default)"
|
||||||
test -n "$GNUPG_DIRMNGR_PGM" && show_gnupg_dirmngr_pgm="$GNUPG_DIRMNGR_PGM"
|
test -n "$GNUPG_DIRMNGR_PGM" && show_gnupg_dirmngr_pgm="$GNUPG_DIRMNGR_PGM"
|
||||||
|
|
||||||
|
AC_ARG_WITH(keyboxd-pgm,
|
||||||
|
[ --with-keyboxd-pgm=PATH Use PATH as the default for the keyboxd)],
|
||||||
|
GNUPG_KEYBOXD_PGM="$withval", GNUPG_KEYBOXD_PGM="" )
|
||||||
|
AC_SUBST(GNUPG_KEYBOXD_PGM)
|
||||||
|
AM_CONDITIONAL(GNUPG_KEYBOXD_PGM, test -n "$GNUPG_KEYBOXD_PGM")
|
||||||
|
show_gnupg_keyboxd_pgm="(default)"
|
||||||
|
test -n "$GNUPG_KEYBOXD_PGM" && show_gnupg_keyboxd_pgm="$GNUPG_KEYBOXD_PGM"
|
||||||
|
|
||||||
AC_ARG_WITH(protect-tool-pgm,
|
AC_ARG_WITH(protect-tool-pgm,
|
||||||
[ --with-protect-tool-pgm=PATH Use PATH as the default for the protect-tool)],
|
[ --with-protect-tool-pgm=PATH Use PATH as the default for the protect-tool)],
|
||||||
GNUPG_PROTECT_TOOL_PGM="$withval", GNUPG_PROTECT_TOOL_PGM="" )
|
GNUPG_PROTECT_TOOL_PGM="$withval", GNUPG_PROTECT_TOOL_PGM="" )
|
||||||
@ -1870,6 +1878,10 @@ AC_DEFINE_UNQUOTED(DIRMNGR_NAME, "dirmngr", [The name of the dirmngr])
|
|||||||
AC_DEFINE_UNQUOTED(DIRMNGR_DISP_NAME, "DirMngr",
|
AC_DEFINE_UNQUOTED(DIRMNGR_DISP_NAME, "DirMngr",
|
||||||
[The displayed name of dirmngr])
|
[The displayed name of dirmngr])
|
||||||
|
|
||||||
|
AC_DEFINE_UNQUOTED(KEYBOXD_NAME, "keyboxd", [The name of the keyboxd])
|
||||||
|
AC_DEFINE_UNQUOTED(KEYBOXD_DISP_NAME, "Keyboxd",
|
||||||
|
[The displayed name of keyboxd])
|
||||||
|
|
||||||
AC_DEFINE_UNQUOTED(G13_NAME, "g13", [The name of the g13 tool])
|
AC_DEFINE_UNQUOTED(G13_NAME, "g13", [The name of the g13 tool])
|
||||||
AC_DEFINE_UNQUOTED(G13_DISP_NAME, "G13", [The displayed name of g13])
|
AC_DEFINE_UNQUOTED(G13_DISP_NAME, "G13", [The displayed name of g13])
|
||||||
|
|
||||||
@ -2090,6 +2102,7 @@ echo "
|
|||||||
Default agent: $show_gnupg_agent_pgm
|
Default agent: $show_gnupg_agent_pgm
|
||||||
Default pinentry: $show_gnupg_pinentry_pgm
|
Default pinentry: $show_gnupg_pinentry_pgm
|
||||||
Default scdaemon: $show_gnupg_scdaemon_pgm
|
Default scdaemon: $show_gnupg_scdaemon_pgm
|
||||||
|
Default keyboxd: $show_gnupg_keyboxd_pgm
|
||||||
Default dirmngr: $show_gnupg_dirmngr_pgm
|
Default dirmngr: $show_gnupg_dirmngr_pgm
|
||||||
|
|
||||||
Dirmngr auto start: $dirmngr_auto_start
|
Dirmngr auto start: $dirmngr_auto_start
|
||||||
|
@ -1328,11 +1328,22 @@ Specify the directory manager (keyserver client) program to be started
|
|||||||
if none is running. This has only an effect if used together with the
|
if none is running. This has only an effect if used together with the
|
||||||
option @option{--dirmngr}.
|
option @option{--dirmngr}.
|
||||||
|
|
||||||
|
@item --keyboxd-program @var{file}
|
||||||
|
@opindex keyboxd-program
|
||||||
|
Specify the keybox daemon program to be started if none is running.
|
||||||
|
This has only an effect if used together with the option
|
||||||
|
@option{--keyboxd}.
|
||||||
|
|
||||||
@item --dirmngr
|
@item --dirmngr
|
||||||
@opindex dirmngr
|
@opindex dirmngr
|
||||||
Connect to a running directory manager (keyserver client) instead of
|
Connect to a running directory manager (keyserver client) instead of
|
||||||
to the gpg-agent. If a dirmngr is not running, start it.
|
to the gpg-agent. If a dirmngr is not running, start it.
|
||||||
|
|
||||||
|
@item --keyboxd
|
||||||
|
@opindex keyboxd
|
||||||
|
Connect to a running keybox daemon instead of
|
||||||
|
to the gpg-agent. If a keyboxd is not running, start it.
|
||||||
|
|
||||||
@item -S
|
@item -S
|
||||||
@itemx --raw-socket @var{name}
|
@itemx --raw-socket @var{name}
|
||||||
@opindex raw-socket
|
@opindex raw-socket
|
||||||
|
@ -60,12 +60,14 @@ enum cmd_and_opt_values
|
|||||||
oHomedir,
|
oHomedir,
|
||||||
oAgentProgram,
|
oAgentProgram,
|
||||||
oDirmngrProgram,
|
oDirmngrProgram,
|
||||||
|
oKeyboxdProgram,
|
||||||
oHex,
|
oHex,
|
||||||
oDecode,
|
oDecode,
|
||||||
oNoExtConnect,
|
oNoExtConnect,
|
||||||
oDirmngr,
|
oDirmngr,
|
||||||
|
oKeyboxd,
|
||||||
oUIServer,
|
oUIServer,
|
||||||
oNoAutostart,
|
oNoAutostart
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -79,6 +81,7 @@ static ARGPARSE_OPTS opts[] = {
|
|||||||
ARGPARSE_s_n (oHex, "hex", N_("print data out hex encoded")),
|
ARGPARSE_s_n (oHex, "hex", N_("print data out hex encoded")),
|
||||||
ARGPARSE_s_n (oDecode,"decode", N_("decode received data lines")),
|
ARGPARSE_s_n (oDecode,"decode", N_("decode received data lines")),
|
||||||
ARGPARSE_s_n (oDirmngr,"dirmngr", N_("connect to the dirmngr")),
|
ARGPARSE_s_n (oDirmngr,"dirmngr", N_("connect to the dirmngr")),
|
||||||
|
ARGPARSE_s_n (oKeyboxd,"keyboxd", N_("connect to the keyboxd")),
|
||||||
ARGPARSE_s_n (oUIServer, "uiserver", "@"),
|
ARGPARSE_s_n (oUIServer, "uiserver", "@"),
|
||||||
ARGPARSE_s_s (oRawSocket, "raw-socket",
|
ARGPARSE_s_s (oRawSocket, "raw-socket",
|
||||||
N_("|NAME|connect to Assuan socket NAME")),
|
N_("|NAME|connect to Assuan socket NAME")),
|
||||||
@ -97,6 +100,7 @@ static ARGPARSE_OPTS opts[] = {
|
|||||||
ARGPARSE_s_s (oHomedir, "homedir", "@" ),
|
ARGPARSE_s_s (oHomedir, "homedir", "@" ),
|
||||||
ARGPARSE_s_s (oAgentProgram, "agent-program", "@"),
|
ARGPARSE_s_s (oAgentProgram, "agent-program", "@"),
|
||||||
ARGPARSE_s_s (oDirmngrProgram, "dirmngr-program", "@"),
|
ARGPARSE_s_s (oDirmngrProgram, "dirmngr-program", "@"),
|
||||||
|
ARGPARSE_s_s (oKeyboxdProgram, "keyboxd-program", "@"),
|
||||||
|
|
||||||
ARGPARSE_end ()
|
ARGPARSE_end ()
|
||||||
};
|
};
|
||||||
@ -111,9 +115,11 @@ struct
|
|||||||
const char *homedir; /* Configuration directory name */
|
const char *homedir; /* Configuration directory name */
|
||||||
const char *agent_program; /* Value of --agent-program. */
|
const char *agent_program; /* Value of --agent-program. */
|
||||||
const char *dirmngr_program; /* Value of --dirmngr-program. */
|
const char *dirmngr_program; /* Value of --dirmngr-program. */
|
||||||
|
const char *keyboxd_program; /* Value of --keyboxd-program. */
|
||||||
int hex; /* Print data lines in hex format. */
|
int hex; /* Print data lines in hex format. */
|
||||||
int decode; /* Decode received data lines. */
|
int decode; /* Decode received data lines. */
|
||||||
int use_dirmngr; /* Use the dirmngr and not gpg-agent. */
|
int use_dirmngr; /* Use the dirmngr and not gpg-agent. */
|
||||||
|
int use_keyboxd; /* Use the keyboxd and not gpg-agent. */
|
||||||
int use_uiserver; /* Use the standard UI server. */
|
int use_uiserver; /* Use the standard UI server. */
|
||||||
const char *raw_socket; /* Name of socket to connect in raw mode. */
|
const char *raw_socket; /* Name of socket to connect in raw mode. */
|
||||||
const char *tcp_socket; /* Name of server to connect in tcp mode. */
|
const char *tcp_socket; /* Name of server to connect in tcp mode. */
|
||||||
@ -1200,10 +1206,12 @@ main (int argc, char **argv)
|
|||||||
case oHomedir: gnupg_set_homedir (pargs.r.ret_str); break;
|
case oHomedir: gnupg_set_homedir (pargs.r.ret_str); break;
|
||||||
case oAgentProgram: opt.agent_program = pargs.r.ret_str; break;
|
case oAgentProgram: opt.agent_program = pargs.r.ret_str; break;
|
||||||
case oDirmngrProgram: opt.dirmngr_program = pargs.r.ret_str; break;
|
case oDirmngrProgram: opt.dirmngr_program = pargs.r.ret_str; break;
|
||||||
|
case oKeyboxdProgram: opt.keyboxd_program = pargs.r.ret_str; break;
|
||||||
case oNoAutostart: opt.autostart = 0; break;
|
case oNoAutostart: opt.autostart = 0; break;
|
||||||
case oHex: opt.hex = 1; break;
|
case oHex: opt.hex = 1; break;
|
||||||
case oDecode: opt.decode = 1; break;
|
case oDecode: opt.decode = 1; break;
|
||||||
case oDirmngr: opt.use_dirmngr = 1; break;
|
case oDirmngr: opt.use_dirmngr = 1; break;
|
||||||
|
case oKeyboxd: opt.use_keyboxd = 1; break;
|
||||||
case oUIServer: opt.use_uiserver = 1; break;
|
case oUIServer: opt.use_uiserver = 1; break;
|
||||||
case oRawSocket: opt.raw_socket = pargs.r.ret_str; break;
|
case oRawSocket: opt.raw_socket = pargs.r.ret_str; break;
|
||||||
case oTcpSocket: opt.tcp_socket = pargs.r.ret_str; break;
|
case oTcpSocket: opt.tcp_socket = pargs.r.ret_str; break;
|
||||||
@ -1879,7 +1887,10 @@ main (int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (opt.verbose)
|
if (opt.verbose)
|
||||||
log_info ("closing connection to agent\n");
|
log_info ("closing connection to %s\n",
|
||||||
|
opt.use_dirmngr? "dirmngr" :
|
||||||
|
opt.use_keyboxd? "keyboxd" :
|
||||||
|
"agent");
|
||||||
|
|
||||||
/* XXX: We would like to release the context here, but libassuan
|
/* XXX: We would like to release the context here, but libassuan
|
||||||
nicely says good bye to the server, which results in a SIGPIPE if
|
nicely says good bye to the server, which results in a SIGPIPE if
|
||||||
@ -2224,6 +2235,13 @@ start_agent (void)
|
|||||||
opt.autostart,
|
opt.autostart,
|
||||||
!opt.quiet, 0,
|
!opt.quiet, 0,
|
||||||
NULL, NULL);
|
NULL, NULL);
|
||||||
|
else if (opt.use_keyboxd)
|
||||||
|
err = start_new_keyboxd (&ctx,
|
||||||
|
GPG_ERR_SOURCE_DEFAULT,
|
||||||
|
opt.keyboxd_program,
|
||||||
|
opt.autostart,
|
||||||
|
!opt.quiet, 0,
|
||||||
|
NULL, NULL);
|
||||||
else
|
else
|
||||||
err = start_new_gpg_agent (&ctx,
|
err = start_new_gpg_agent (&ctx,
|
||||||
GPG_ERR_SOURCE_DEFAULT,
|
GPG_ERR_SOURCE_DEFAULT,
|
||||||
@ -2239,12 +2257,15 @@ start_agent (void)
|
|||||||
{
|
{
|
||||||
if (!opt.autostart
|
if (!opt.autostart
|
||||||
&& (gpg_err_code (err)
|
&& (gpg_err_code (err)
|
||||||
== (opt.use_dirmngr? GPG_ERR_NO_DIRMNGR : GPG_ERR_NO_AGENT)))
|
== (opt.use_dirmngr? GPG_ERR_NO_DIRMNGR :
|
||||||
|
opt.use_keyboxd? GPG_ERR_NO_KEYBOXD : GPG_ERR_NO_AGENT)))
|
||||||
{
|
{
|
||||||
/* In the no-autostart case we don't make gpg-connect-agent
|
/* In the no-autostart case we don't make gpg-connect-agent
|
||||||
fail on a missing server. */
|
fail on a missing server. */
|
||||||
log_info (opt.use_dirmngr?
|
log_info (opt.use_dirmngr?
|
||||||
_("no dirmngr running in this session\n"):
|
_("no dirmngr running in this session\n"):
|
||||||
|
opt.use_keyboxd?
|
||||||
|
_("no keybox daemon running in this session\n"):
|
||||||
_("no gpg-agent running in this session\n"));
|
_("no gpg-agent running in this session\n"));
|
||||||
exit (0);
|
exit (0);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user