aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Bremner <david@tethera.net>2014-12-09 21:01:11 +0100
committerDavid Bremner <david@tethera.net>2015-03-11 08:04:00 +0100
commitc883e632bf0a3692fa4ca7aa77604e0e60820295 (patch)
treec6ce8a5052663308d36f95b7f7b836af6be4ed4d
parent21ecd7369aa2aa24d26775c3fe5edcb437914774 (diff)
CLI: make gpg binary used by libgmime configurable.
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. Update tests for new default variable
-rw-r--r--doc/man1/notmuch-config.rst8
-rw-r--r--notmuch-client.h7
-rw-r--r--notmuch-config.c35
-rw-r--r--notmuch-reply.c2
-rw-r--r--notmuch-show.c2
-rwxr-xr-xtest/T030-config.sh1
-rwxr-xr-xtest/T040-setup.sh3
7 files changed, 56 insertions, 2 deletions
diff --git a/doc/man1/notmuch-config.rst b/doc/man1/notmuch-config.rst
index 2676a86c..40c12721 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 c25c4ea8..fb3021cc 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 a564bcae..2d5c297b 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 e18370f8..d51fdfc3 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 d292f29f..43bf71c8 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;
diff --git a/test/T030-config.sh b/test/T030-config.sh
index ca4cf330..7d14a85f 100755
--- a/test/T030-config.sh
+++ b/test/T030-config.sh
@@ -54,6 +54,7 @@ new.tags=unread;inbox;
new.ignore=
search.exclude_tags=
maildir.synchronize_flags=true
+crypto.gpg_path=gpg
foo.string=this is another string value
foo.list=this;is another;list value;"
diff --git a/test/T040-setup.sh b/test/T040-setup.sh
index b1972e70..0e9f279a 100755
--- a/test/T040-setup.sh
+++ b/test/T040-setup.sh
@@ -28,6 +28,7 @@ user.other_email=another.suite@example.com;
new.tags=foo;bar;
new.ignore=
search.exclude_tags=baz;
-maildir.synchronize_flags=true"
+maildir.synchronize_flags=true
+crypto.gpg_path=gpg"
test_done