aboutsummaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
Diffstat (limited to 'common')
-rw-r--r--common/asshelp.c48
-rw-r--r--common/asshelp.h10
-rw-r--r--common/homedir.c7
-rw-r--r--common/util.h6
4 files changed, 62 insertions, 9 deletions
diff --git a/common/asshelp.c b/common/asshelp.c
index 84bc546e2..a5724fad5 100644
--- a/common/asshelp.c
+++ b/common/asshelp.c
@@ -56,9 +56,11 @@
operation after we started them before giving up. */
#ifdef HAVE_W32CE_SYSTEM
# define SECS_TO_WAIT_FOR_AGENT 30
+# define SECS_TO_WAIT_FOR_KEYBOXD 30
# define SECS_TO_WAIT_FOR_DIRMNGR 30
#else
# define SECS_TO_WAIT_FOR_AGENT 5
+# define SECS_TO_WAIT_FOR_KEYBOXD 5
# define SECS_TO_WAIT_FOR_DIRMNGR 5
#endif
@@ -308,17 +310,14 @@ unlock_spawning (lock_spawn_t *lock, const char *name)
}
-/* Helper for start_new_gpg_agent and start_new_dirmngr.
- * Values for WHICH are:
- * 0 - Start gpg-agent
- * 1 - Start dirmngr
- * SECS give the number of seconds to wait. SOCKNAME is the name of
+/* Helper to start a service.
+ * SECS gives the number of seconds to wait. SOCKNAME is the name of
* 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
* messages has been printed.
*/
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)
{
gpg_error_t err = 0;
@@ -343,8 +342,10 @@ wait_for_sock (int secs, int which, const char *sockname,
/* next_sleep_us); */
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"):
+ 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"),
secsleft);
lastalert = secsleft;
@@ -357,8 +358,10 @@ wait_for_sock (int secs, int which, const char *sockname,
{
if (verbose)
{
- log_info (which == 1?
+ log_info (module_name_id == GNUPG_MODULE_NAME_DIRMNGR?
_("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"));
*did_success_msg = 1;
}
@@ -429,6 +432,14 @@ start_new_service (assuan_context_t *r_ctx,
no_service_err = GPG_ERR_NO_DIRMNGR;
seconds_to_wait = SECS_TO_WAIT_FOR_DIRMNGR;
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:
err = gpg_error (GPG_ERR_INV_ARG);
assuan_release (ctx);
@@ -520,7 +531,7 @@ start_new_service (assuan_context_t *r_ctx,
printed_name, program? program : program_name,
gpg_strerror (err));
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);
}
@@ -599,6 +610,25 @@ start_new_gpg_agent (assuan_context_t *r_ctx,
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
+ 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_dirmngr (assuan_context_t *r_ctx,
gpg_err_source_t errsource,
const char *dirmngr_program,
diff --git a/common/asshelp.h b/common/asshelp.h
index a04a0775c..b2f4e538f 100644
--- a/common/asshelp.h
+++ b/common/asshelp.h
@@ -65,6 +65,16 @@ start_new_gpg_agent (assuan_context_t *r_ctx,
gpg_error_t (*status_cb)(ctrl_t, int, ...),
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
the function is able starts a dirmngr process if needed. */
gpg_error_t
diff --git a/common/homedir.c b/common/homedir.c
index 9c680a57f..4425d7811 100644
--- a/common/homedir.c
+++ b/common/homedir.c
@@ -1115,6 +1115,13 @@ gnupg_module_name (int which)
X(bindir, "dirmngr", DIRMNGR_NAME);
#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:
#ifdef GNUPG_DEFAULT_PROTECT_TOOL
return GNUPG_DEFAULT_PROTECT_TOOL;
diff --git a/common/util.h b/common/util.h
index bd6cd1ff5..8f8a06a41 100644
--- a/common/util.h
+++ b/common/util.h
@@ -43,6 +43,10 @@
#define GPG_ERR_NO_AUTH 314
#define GPG_ERR_BAD_AUTH 315
#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. */
#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_localedir (void);
const char *gnupg_cachedir (void);
+const char *gpg_agent_socket_name (void);
const char *dirmngr_socket_name (void);
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_DIRMNGR_LDAP 11
#define GNUPG_MODULE_NAME_GPGV 12
+#define GNUPG_MODULE_NAME_KEYBOXD 13
const char *gnupg_module_name (int which);
void gnupg_module_name_flush_some (void);
void gnupg_set_builddir (const char *newdir);