From 21ecd7369aa2aa24d26775c3fe5edcb437914774 Mon Sep 17 00:00:00 2001 From: David Bremner Date: Tue, 9 Dec 2014 21:01:10 +0100 Subject: [PATCH] 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. --- crypto.c | 10 +++++----- notmuch-client.h | 1 + notmuch-reply.c | 3 ++- notmuch-show.c | 3 ++- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/crypto.c b/crypto.c index 6f4a6db9..026640fe 100644 --- a/crypto.c +++ b/crypto.c @@ -24,12 +24,12 @@ /* Create a GPG context (GMime 2.6) */ static notmuch_crypto_context_t * -create_gpg_context (void) +create_gpg_context (const char *gpgpath) { notmuch_crypto_context_t *gpgctx; /* TODO: GMimePasswordRequestFunc */ - gpgctx = g_mime_gpg_context_new (NULL, "gpg"); + gpgctx = g_mime_gpg_context_new (NULL, gpgpath ? gpgpath : "gpg"); if (! gpgctx) return NULL; @@ -43,13 +43,13 @@ create_gpg_context (void) /* Create a GPG context (GMime 2.4) */ static notmuch_crypto_context_t * -create_gpg_context (void) +create_gpg_context (const char* gpgpath) { GMimeSession *session; notmuch_crypto_context_t *gpgctx; 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); if (! gpgctx) @@ -83,7 +83,7 @@ notmuch_crypto_get_context (notmuch_crypto_t *crypto, const char *protocol) if (strcasecmp (protocol, "application/pgp-signature") == 0 || strcasecmp (protocol, "application/pgp-encrypted") == 0) { if (! crypto->gpgctx) { - crypto->gpgctx = create_gpg_context (); + crypto->gpgctx = create_gpg_context (crypto->gpgpath); if (! crypto->gpgctx) fprintf (stderr, "Failed to construct gpg context.\n"); } diff --git a/notmuch-client.h b/notmuch-client.h index 5e0d4750..c25c4ea8 100644 --- a/notmuch-client.h +++ b/notmuch-client.h @@ -80,6 +80,7 @@ typedef struct notmuch_crypto { notmuch_crypto_context_t* gpgctx; notmuch_bool_t verify; notmuch_bool_t decrypt; + const char *gpgpath; } notmuch_crypto_t; typedef struct notmuch_show_params { diff --git a/notmuch-reply.c b/notmuch-reply.c index 7c1c8095..e18370f8 100644 --- a/notmuch-reply.c +++ b/notmuch-reply.c @@ -769,7 +769,8 @@ notmuch_reply_command (notmuch_config_t *config, int argc, char *argv[]) .part = -1, .crypto = { .verify = FALSE, - .decrypt = FALSE + .decrypt = FALSE, + .gpgpath = NULL } }; int format = FORMAT_DEFAULT; diff --git a/notmuch-show.c b/notmuch-show.c index d416fbd5..d292f29f 100644 --- a/notmuch-show.c +++ b/notmuch-show.c @@ -1082,7 +1082,8 @@ notmuch_show_command (notmuch_config_t *config, int argc, char *argv[]) .output_body = TRUE, .crypto = { .verify = FALSE, - .decrypt = FALSE + .decrypt = FALSE, + .gpgpath = NULL }, .include_html = FALSE }; -- 2.26.2