CLI: set up infrastructure to make path to gpg configurable.

GMIME takes a path to gpg, but we hardcode that path.  In this commit
we set up argument passing and option storage to allow this path to
specified in the top level notmuch command.
This commit is contained in:
David Bremner 2014-12-09 21:01:10 +01:00
parent aed5ec4350
commit 21ecd7369a
4 changed files with 10 additions and 7 deletions

View file

@ -24,12 +24,12 @@
/* Create a GPG context (GMime 2.6) */ /* Create a GPG context (GMime 2.6) */
static notmuch_crypto_context_t * static notmuch_crypto_context_t *
create_gpg_context (void) create_gpg_context (const char *gpgpath)
{ {
notmuch_crypto_context_t *gpgctx; notmuch_crypto_context_t *gpgctx;
/* TODO: GMimePasswordRequestFunc */ /* TODO: GMimePasswordRequestFunc */
gpgctx = g_mime_gpg_context_new (NULL, "gpg"); gpgctx = g_mime_gpg_context_new (NULL, gpgpath ? gpgpath : "gpg");
if (! gpgctx) if (! gpgctx)
return NULL; return NULL;
@ -43,13 +43,13 @@ create_gpg_context (void)
/* Create a GPG context (GMime 2.4) */ /* Create a GPG context (GMime 2.4) */
static notmuch_crypto_context_t * static notmuch_crypto_context_t *
create_gpg_context (void) create_gpg_context (const char* gpgpath)
{ {
GMimeSession *session; GMimeSession *session;
notmuch_crypto_context_t *gpgctx; notmuch_crypto_context_t *gpgctx;
session = g_object_new (g_mime_session_get_type (), NULL); session = g_object_new (g_mime_session_get_type (), NULL);
gpgctx = g_mime_gpg_context_new (session, "gpg"); gpgctx = g_mime_gpg_context_new (session, gpgpath ? gpgpath : "gpg");
g_object_unref (session); g_object_unref (session);
if (! gpgctx) if (! gpgctx)
@ -83,7 +83,7 @@ notmuch_crypto_get_context (notmuch_crypto_t *crypto, const char *protocol)
if (strcasecmp (protocol, "application/pgp-signature") == 0 || if (strcasecmp (protocol, "application/pgp-signature") == 0 ||
strcasecmp (protocol, "application/pgp-encrypted") == 0) { strcasecmp (protocol, "application/pgp-encrypted") == 0) {
if (! crypto->gpgctx) { if (! crypto->gpgctx) {
crypto->gpgctx = create_gpg_context (); crypto->gpgctx = create_gpg_context (crypto->gpgpath);
if (! crypto->gpgctx) if (! crypto->gpgctx)
fprintf (stderr, "Failed to construct gpg context.\n"); fprintf (stderr, "Failed to construct gpg context.\n");
} }

View file

@ -80,6 +80,7 @@ typedef struct notmuch_crypto {
notmuch_crypto_context_t* gpgctx; notmuch_crypto_context_t* gpgctx;
notmuch_bool_t verify; notmuch_bool_t verify;
notmuch_bool_t decrypt; notmuch_bool_t decrypt;
const char *gpgpath;
} notmuch_crypto_t; } notmuch_crypto_t;
typedef struct notmuch_show_params { typedef struct notmuch_show_params {

View file

@ -769,7 +769,8 @@ notmuch_reply_command (notmuch_config_t *config, int argc, char *argv[])
.part = -1, .part = -1,
.crypto = { .crypto = {
.verify = FALSE, .verify = FALSE,
.decrypt = FALSE .decrypt = FALSE,
.gpgpath = NULL
} }
}; };
int format = FORMAT_DEFAULT; int format = FORMAT_DEFAULT;

View file

@ -1082,7 +1082,8 @@ notmuch_show_command (notmuch_config_t *config, int argc, char *argv[])
.output_body = TRUE, .output_body = TRUE,
.crypto = { .crypto = {
.verify = FALSE, .verify = FALSE,
.decrypt = FALSE .decrypt = FALSE,
.gpgpath = NULL
}, },
.include_html = FALSE .include_html = FALSE
}; };