CLI: set up infrastructure to make path to gpg configurable.
authorDavid Bremner <david@tethera.net>
Tue, 9 Dec 2014 20:01:10 +0000 (21:01 +0100)
committerDavid Bremner <david@tethera.net>
Mon, 9 Mar 2015 07:19:28 +0000 (08:19 +0100)
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
notmuch-client.h
notmuch-reply.c
notmuch-show.c

index 6f4a6db9d0f1be2026f73068b6696e5557640d80..026640fee8b2cd5006becda9f0ff76ce801f4847 100644 (file)
--- a/crypto.c
+++ b/crypto.c
 
 /* 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");
        }
index 5e0d47508c6af495c4c5097a29e9d5b5cc72742b..c25c4ea888445a11636e849a9a692b9765a445c4 100644 (file)
@@ -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 {
index 7c1c80959ed6cee221479353bbb84345a6875055..e18370f8579107a84be9e2e515e8f3bfb05ed7d2 100644 (file)
@@ -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;
index d416fbd5ccb73593ec44fd976bd331de0bf13be6..d292f29fe0591ee74fb60ae4a94e1b46d098793a 100644 (file)
@@ -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
     };