unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
* [PATCH 1/2] CLI: set up infrastructure to make path to gpg configurable.
@ 2014-12-09 20:01 David Bremner
  2014-12-09 20:01 ` [PATCH 2/2] CLI: make gpg binary used by libgmime configurable David Bremner
  2015-03-07 17:13 ` [PATCH 1/2] CLI: set up infrastructure to make path to gpg configurable Jani Nikula
  0 siblings, 2 replies; 7+ messages in thread
From: David Bremner @ 2014-12-09 20:01 UTC (permalink / raw)
  To: notmuch

GMIME takes a path to gpg, but we hardcode that path.  In this commit
we push hardcoding all the way up to the top level of a notmuch
command, where we can later make it configurable.
---
 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 6f4a6db..026640f 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 5e0d475..c25c4ea 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 7c1c809..e18370f 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 d416fbd..d292f29 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.1.3

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/2] CLI: make gpg binary used by libgmime configurable.
  2014-12-09 20:01 [PATCH 1/2] CLI: set up infrastructure to make path to gpg configurable David Bremner
@ 2014-12-09 20:01 ` David Bremner
  2015-03-07 17:20   ` Jani Nikula
  2015-03-07 17:13 ` [PATCH 1/2] CLI: set up infrastructure to make path to gpg configurable Jani Nikula
  1 sibling, 1 reply; 7+ messages in thread
From: David Bremner @ 2014-12-09 20:01 UTC (permalink / raw)
  To: notmuch

Previously we set up a way for the top level notmuch command to choose
which gpg binary was invoked by libgmime. In this commit we add the
(mostly boilplate) code to allow the notmuch-config command to read
and write this path, and use it in the appropriate struct.
---
 notmuch-client.h |  7 +++++++
 notmuch-config.c | 15 +++++++++++++++
 notmuch-reply.c  |  2 ++
 notmuch-show.c   |  2 ++
 4 files changed, 26 insertions(+)

diff --git a/notmuch-client.h b/notmuch-client.h
index c25c4ea..fad81d5 100644
--- a/notmuch-client.h
+++ b/notmuch-client.h
@@ -279,6 +279,13 @@ notmuch_config_set_database_path (notmuch_config_t *config,
 				  const char *database_path);
 
 const char *
+notmuch_config_get_gpg_path (notmuch_config_t *config);
+
+void
+notmuch_config_set_gpg_path (notmuch_config_t *config,
+				  const char *gpg_path);
+
+const char *
 notmuch_config_get_user_name (notmuch_config_t *config);
 
 void
diff --git a/notmuch-config.c b/notmuch-config.c
index a564bca..7aef1b6 100644
--- a/notmuch-config.c
+++ b/notmuch-config.c
@@ -107,6 +107,7 @@ struct _notmuch_config {
     notmuch_bool_t is_new;
 
     char *database_path;
+    char *gpg_path;
     char *user_name;
     char *user_primary_email;
     const char **user_other_email;
@@ -690,6 +691,20 @@ notmuch_config_set_search_exclude_tags (notmuch_config_t *config,
 		      &(config->search_exclude_tags));
 }
 
+const char *
+notmuch_config_get_gpg_path (notmuch_config_t *config)
+{
+    return _config_get (config, &config->gpg_path, "gpg", "path");
+}
+
+void
+notmuch_config_set_gpg_path (notmuch_config_t *config,
+			      const char *gpg_path)
+{
+    _config_set (config, &config->gpg_path, "gpg", "path", gpg_path);
+}
+
+
 /* Given a configuration item of the form <group>.<key> return the
  * component group and key. If any error occurs, print a message on
  * stderr and return 1. Otherwise, return 0.
diff --git a/notmuch-reply.c b/notmuch-reply.c
index e18370f..d6d3315 100644
--- a/notmuch-reply.c
+++ b/notmuch-reply.c
@@ -822,6 +822,8 @@ notmuch_reply_command (notmuch_config_t *config, int argc, char *argv[])
 	return EXIT_FAILURE;
     }
 
+    params.crypto.gpgpath = notmuch_config_get_gpg_path (config);
+
     if (notmuch_database_open (notmuch_config_get_database_path (config),
 			       NOTMUCH_DATABASE_MODE_READ_ONLY, &notmuch))
 	return EXIT_FAILURE;
diff --git a/notmuch-show.c b/notmuch-show.c
index d292f29..b0d4609 100644
--- a/notmuch-show.c
+++ b/notmuch-show.c
@@ -1204,6 +1204,8 @@ notmuch_show_command (notmuch_config_t *config, int argc, char *argv[])
 	return EXIT_FAILURE;
     }
 
+    params.crypto.gpgpath = notmuch_config_get_gpg_path (config);
+
     if (notmuch_database_open (notmuch_config_get_database_path (config),
 			       NOTMUCH_DATABASE_MODE_READ_ONLY, &notmuch))
 	return EXIT_FAILURE;
-- 
2.1.3

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] CLI: set up infrastructure to make path to gpg configurable.
  2014-12-09 20:01 [PATCH 1/2] CLI: set up infrastructure to make path to gpg configurable David Bremner
  2014-12-09 20:01 ` [PATCH 2/2] CLI: make gpg binary used by libgmime configurable David Bremner
@ 2015-03-07 17:13 ` Jani Nikula
  2015-03-09 20:51   ` [Patch v2 " David Bremner
  1 sibling, 1 reply; 7+ messages in thread
From: Jani Nikula @ 2015-03-07 17:13 UTC (permalink / raw)
  To: David Bremner, notmuch

On Tue, 09 Dec 2014, David Bremner <david@tethera.net> wrote:
> GMIME takes a path to gpg, but we hardcode that path.  In this commit
> we push hardcoding all the way up to the top level of a notmuch
> command, where we can later make it configurable.

Mmmh, to be pedantic, this does not push the hardcoding to the top
level, since "gpg" still remains at the lowest level. But it allows
specifying the path at the top level. Which I think is fine.

LGTM.


> ---
>  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 6f4a6db..026640f 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 5e0d475..c25c4ea 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 7c1c809..e18370f 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 d416fbd..d292f29 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.1.3
>
> _______________________________________________
> notmuch mailing list
> notmuch@notmuchmail.org
> http://notmuchmail.org/mailman/listinfo/notmuch

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/2] CLI: make gpg binary used by libgmime configurable.
  2014-12-09 20:01 ` [PATCH 2/2] CLI: make gpg binary used by libgmime configurable David Bremner
@ 2015-03-07 17:20   ` Jani Nikula
  0 siblings, 0 replies; 7+ messages in thread
From: Jani Nikula @ 2015-03-07 17:20 UTC (permalink / raw)
  To: David Bremner, notmuch

On Tue, 09 Dec 2014, David Bremner <david@tethera.net> wrote:
> Previously we set up a way for the top level notmuch command to choose
> which gpg binary was invoked by libgmime. In this commit we add the
> (mostly boilplate) code to allow the notmuch-config command to read
> and write this path, and use it in the appropriate struct.

This should probably add the section comment in notmuch_config_open().

For a lot of things we add the default to the config if it isn't there
already. I'm undecided whether this is a good approach in general, and
whether we should push the "gpg" hardcoding to the config code. For the
time being I'm fine with this as it is, and we should probably have a
look at the config code at a later time anyway.

Is "gpg" as a section name too specific? Does this lead to having to add
other sections for crypto/security/privacy stuff if it isn't related to
gpg? *shrug*.

BR,
Jani.


> ---
>  notmuch-client.h |  7 +++++++
>  notmuch-config.c | 15 +++++++++++++++
>  notmuch-reply.c  |  2 ++
>  notmuch-show.c   |  2 ++
>  4 files changed, 26 insertions(+)
>
> diff --git a/notmuch-client.h b/notmuch-client.h
> index c25c4ea..fad81d5 100644
> --- a/notmuch-client.h
> +++ b/notmuch-client.h
> @@ -279,6 +279,13 @@ notmuch_config_set_database_path (notmuch_config_t *config,
>  				  const char *database_path);
>  
>  const char *
> +notmuch_config_get_gpg_path (notmuch_config_t *config);
> +
> +void
> +notmuch_config_set_gpg_path (notmuch_config_t *config,
> +				  const char *gpg_path);
> +
> +const char *
>  notmuch_config_get_user_name (notmuch_config_t *config);
>  
>  void
> diff --git a/notmuch-config.c b/notmuch-config.c
> index a564bca..7aef1b6 100644
> --- a/notmuch-config.c
> +++ b/notmuch-config.c
> @@ -107,6 +107,7 @@ struct _notmuch_config {
>      notmuch_bool_t is_new;
>  
>      char *database_path;
> +    char *gpg_path;
>      char *user_name;
>      char *user_primary_email;
>      const char **user_other_email;
> @@ -690,6 +691,20 @@ notmuch_config_set_search_exclude_tags (notmuch_config_t *config,
>  		      &(config->search_exclude_tags));
>  }
>  
> +const char *
> +notmuch_config_get_gpg_path (notmuch_config_t *config)
> +{
> +    return _config_get (config, &config->gpg_path, "gpg", "path");
> +}
> +
> +void
> +notmuch_config_set_gpg_path (notmuch_config_t *config,
> +			      const char *gpg_path)
> +{
> +    _config_set (config, &config->gpg_path, "gpg", "path", gpg_path);
> +}
> +
> +
>  /* Given a configuration item of the form <group>.<key> return the
>   * component group and key. If any error occurs, print a message on
>   * stderr and return 1. Otherwise, return 0.
> diff --git a/notmuch-reply.c b/notmuch-reply.c
> index e18370f..d6d3315 100644
> --- a/notmuch-reply.c
> +++ b/notmuch-reply.c
> @@ -822,6 +822,8 @@ notmuch_reply_command (notmuch_config_t *config, int argc, char *argv[])
>  	return EXIT_FAILURE;
>      }
>  
> +    params.crypto.gpgpath = notmuch_config_get_gpg_path (config);
> +
>      if (notmuch_database_open (notmuch_config_get_database_path (config),
>  			       NOTMUCH_DATABASE_MODE_READ_ONLY, &notmuch))
>  	return EXIT_FAILURE;
> diff --git a/notmuch-show.c b/notmuch-show.c
> index d292f29..b0d4609 100644
> --- a/notmuch-show.c
> +++ b/notmuch-show.c
> @@ -1204,6 +1204,8 @@ notmuch_show_command (notmuch_config_t *config, int argc, char *argv[])
>  	return EXIT_FAILURE;
>      }
>  
> +    params.crypto.gpgpath = notmuch_config_get_gpg_path (config);
> +
>      if (notmuch_database_open (notmuch_config_get_database_path (config),
>  			       NOTMUCH_DATABASE_MODE_READ_ONLY, &notmuch))
>  	return EXIT_FAILURE;
> -- 
> 2.1.3
>
> _______________________________________________
> notmuch mailing list
> notmuch@notmuchmail.org
> http://notmuchmail.org/mailman/listinfo/notmuch

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Patch v2 1/2] CLI: set up infrastructure to make path to gpg configurable.
  2015-03-07 17:13 ` [PATCH 1/2] CLI: set up infrastructure to make path to gpg configurable Jani Nikula
@ 2015-03-09 20:51   ` David Bremner
  2015-03-09 20:51     ` [Patch v2 2/2] CLI: make gpg binary used by libgmime configurable David Bremner
  2015-03-11  7:15     ` [Patch v2 1/2] CLI: set up infrastructure to make path to gpg configurable David Bremner
  0 siblings, 2 replies; 7+ messages in thread
From: David Bremner @ 2015-03-09 20:51 UTC (permalink / raw)
  To: Jani Nikula, David Bremner, notmuch

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 6f4a6db..026640f 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 5e0d475..c25c4ea 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 7c1c809..e18370f 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 d416fbd..d292f29 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.1.4

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [Patch v2 2/2] CLI: make gpg binary used by libgmime configurable.
  2015-03-09 20:51   ` [Patch v2 " David Bremner
@ 2015-03-09 20:51     ` David Bremner
  2015-03-11  7:15     ` [Patch v2 1/2] CLI: set up infrastructure to make path to gpg configurable David Bremner
  1 sibling, 0 replies; 7+ messages in thread
From: David Bremner @ 2015-03-09 20:51 UTC (permalink / raw)
  To: Jani Nikula, David Bremner, notmuch

Previously we set up a way for the top level notmuch command to choose
which gpg binary was invoked by libgmime. In this commit we add the
(mostly boilerplate) code to allow the notmuch-config command to read
and write this path, and use it in the appropriate struct.
---
 doc/man1/notmuch-config.rst |  8 ++++++++
 notmuch-client.h            |  7 +++++++
 notmuch-config.c            | 35 ++++++++++++++++++++++++++++++++++-
 notmuch-reply.c             |  2 ++
 notmuch-show.c              |  2 ++
 5 files changed, 53 insertions(+), 1 deletion(-)

diff --git a/doc/man1/notmuch-config.rst b/doc/man1/notmuch-config.rst
index 2676a86..40c1272 100644
--- a/doc/man1/notmuch-config.rst
+++ b/doc/man1/notmuch-config.rst
@@ -125,6 +125,14 @@ The available configuration items are described below.
 
         Default: ``true``.
 
+    **crypto.gpg_path**
+
+        Name (or full path) of gpg binary to use in verification and
+        decryption of PGP/MIME messages.
+    
+        Default: ``gpg``.
+
+
 ENVIRONMENT
 ===========
 
diff --git a/notmuch-client.h b/notmuch-client.h
index c25c4ea..fb3021c 100644
--- a/notmuch-client.h
+++ b/notmuch-client.h
@@ -279,6 +279,13 @@ notmuch_config_set_database_path (notmuch_config_t *config,
 				  const char *database_path);
 
 const char *
+notmuch_config_get_crypto_gpg_path (notmuch_config_t *config);
+
+void
+notmuch_config_set_crypto_gpg_path (notmuch_config_t *config,
+				  const char *gpg_path);
+
+const char *
 notmuch_config_get_user_name (notmuch_config_t *config);
 
 void
diff --git a/notmuch-config.c b/notmuch-config.c
index a564bca..2d5c297 100644
--- a/notmuch-config.c
+++ b/notmuch-config.c
@@ -101,12 +101,21 @@ static const char search_config_comment[] =
     "\t\tsearch results by default.  Using an excluded tag in a\n"
     "\t\tquery will override that exclusion.\n";
 
+static const char crypto_config_comment[] =
+    " Cryptography related configuration\n"
+    "\n"
+    " The following option is supported here:\n"
+    "\n"
+    "\tgpg_path\n"
+    "\t\tbinary name or full path to invoke gpg.\n";
+
 struct _notmuch_config {
     char *filename;
     GKeyFile *key_file;
     notmuch_bool_t is_new;
 
     char *database_path;
+    char *crypto_gpg_path;
     char *user_name;
     char *user_primary_email;
     const char **user_other_email;
@@ -244,6 +253,7 @@ notmuch_config_open (void *ctx,
     int file_had_user_group;
     int file_had_maildir_group;
     int file_had_search_group;
+    int file_had_crypto_group;
 
     notmuch_config_t *config = talloc (ctx, notmuch_config_t);
     if (config == NULL) {
@@ -277,6 +287,7 @@ notmuch_config_open (void *ctx,
     config->maildir_synchronize_flags = TRUE;
     config->search_exclude_tags = NULL;
     config->search_exclude_tags_length = 0;
+    config->crypto_gpg_path = NULL;
 
     if (! g_key_file_load_from_file (config->key_file,
 				     config->filename,
@@ -326,7 +337,7 @@ notmuch_config_open (void *ctx,
     file_had_user_group = g_key_file_has_group (config->key_file, "user");
     file_had_maildir_group = g_key_file_has_group (config->key_file, "maildir");
     file_had_search_group = g_key_file_has_group (config->key_file, "search");
-
+    file_had_crypto_group = g_key_file_has_group (config->key_file, "crypto");
 
     if (notmuch_config_get_database_path (config) == NULL) {
 	char *path = getenv ("MAILDIR");
@@ -406,6 +417,10 @@ notmuch_config_open (void *ctx,
 	g_error_free (error);
     }
 
+    if (notmuch_config_get_crypto_gpg_path (config) == NULL) {
+	notmuch_config_set_crypto_gpg_path (config, "gpg");
+    }
+    
     /* Whenever we know of configuration sections that don't appear in
      * the configuration file, we add some comments to help the user
      * understand what can be done. */
@@ -433,6 +448,10 @@ notmuch_config_open (void *ctx,
 	g_key_file_set_comment (config->key_file, "search", NULL,
 				search_config_comment, NULL);
 
+    if (! file_had_crypto_group)
+	g_key_file_set_comment (config->key_file, "crypto", NULL,
+				crypto_config_comment, NULL);
+
     return config;
 }
 
@@ -690,6 +709,20 @@ notmuch_config_set_search_exclude_tags (notmuch_config_t *config,
 		      &(config->search_exclude_tags));
 }
 
+const char *
+notmuch_config_get_crypto_gpg_path (notmuch_config_t *config)
+{
+    return _config_get (config, &config->crypto_gpg_path, "crypto", "gpg_path");
+}
+
+void
+notmuch_config_set_crypto_gpg_path (notmuch_config_t *config,
+			      const char *gpg_path)
+{
+    _config_set (config, &config->crypto_gpg_path, "crypto", "gpg_path", gpg_path);
+}
+
+
 /* Given a configuration item of the form <group>.<key> return the
  * component group and key. If any error occurs, print a message on
  * stderr and return 1. Otherwise, return 0.
diff --git a/notmuch-reply.c b/notmuch-reply.c
index e18370f..d51fdfc 100644
--- a/notmuch-reply.c
+++ b/notmuch-reply.c
@@ -822,6 +822,8 @@ notmuch_reply_command (notmuch_config_t *config, int argc, char *argv[])
 	return EXIT_FAILURE;
     }
 
+    params.crypto.gpgpath = notmuch_config_get_crypto_gpg_path (config);
+
     if (notmuch_database_open (notmuch_config_get_database_path (config),
 			       NOTMUCH_DATABASE_MODE_READ_ONLY, &notmuch))
 	return EXIT_FAILURE;
diff --git a/notmuch-show.c b/notmuch-show.c
index d292f29..43bf71c 100644
--- a/notmuch-show.c
+++ b/notmuch-show.c
@@ -1204,6 +1204,8 @@ notmuch_show_command (notmuch_config_t *config, int argc, char *argv[])
 	return EXIT_FAILURE;
     }
 
+    params.crypto.gpgpath = notmuch_config_get_crypto_gpg_path (config);
+
     if (notmuch_database_open (notmuch_config_get_database_path (config),
 			       NOTMUCH_DATABASE_MODE_READ_ONLY, &notmuch))
 	return EXIT_FAILURE;
-- 
2.1.4

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [Patch v2 1/2] CLI: set up infrastructure to make path to gpg configurable.
  2015-03-09 20:51   ` [Patch v2 " David Bremner
  2015-03-09 20:51     ` [Patch v2 2/2] CLI: make gpg binary used by libgmime configurable David Bremner
@ 2015-03-11  7:15     ` David Bremner
  1 sibling, 0 replies; 7+ messages in thread
From: David Bremner @ 2015-03-11  7:15 UTC (permalink / raw)
  To: Jani Nikula, notmuch

David Bremner <david@tethera.net> writes:

> 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.

Pushed these two, with two trivial test fixes for the new variable.

d

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2015-03-11  7:18 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-12-09 20:01 [PATCH 1/2] CLI: set up infrastructure to make path to gpg configurable David Bremner
2014-12-09 20:01 ` [PATCH 2/2] CLI: make gpg binary used by libgmime configurable David Bremner
2015-03-07 17:20   ` Jani Nikula
2015-03-07 17:13 ` [PATCH 1/2] CLI: set up infrastructure to make path to gpg configurable Jani Nikula
2015-03-09 20:51   ` [Patch v2 " David Bremner
2015-03-09 20:51     ` [Patch v2 2/2] CLI: make gpg binary used by libgmime configurable David Bremner
2015-03-11  7:15     ` [Patch v2 1/2] CLI: set up infrastructure to make path to gpg configurable David Bremner

Code repositories for project(s) associated with this public inbox

	https://yhetil.org/notmuch.git/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).