mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-21 18:38:08 +01:00
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
This commit is contained in:
parent
21ecd7369a
commit
c883e632bf
7 changed files with 56 additions and 2 deletions
|
@ -125,6 +125,14 @@ The available configuration items are described below.
|
||||||
|
|
||||||
Default: ``true``.
|
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
|
ENVIRONMENT
|
||||||
===========
|
===========
|
||||||
|
|
||||||
|
|
|
@ -278,6 +278,13 @@ void
|
||||||
notmuch_config_set_database_path (notmuch_config_t *config,
|
notmuch_config_set_database_path (notmuch_config_t *config,
|
||||||
const char *database_path);
|
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 *
|
const char *
|
||||||
notmuch_config_get_user_name (notmuch_config_t *config);
|
notmuch_config_get_user_name (notmuch_config_t *config);
|
||||||
|
|
||||||
|
|
|
@ -101,12 +101,21 @@ static const char search_config_comment[] =
|
||||||
"\t\tsearch results by default. Using an excluded tag in a\n"
|
"\t\tsearch results by default. Using an excluded tag in a\n"
|
||||||
"\t\tquery will override that exclusion.\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 {
|
struct _notmuch_config {
|
||||||
char *filename;
|
char *filename;
|
||||||
GKeyFile *key_file;
|
GKeyFile *key_file;
|
||||||
notmuch_bool_t is_new;
|
notmuch_bool_t is_new;
|
||||||
|
|
||||||
char *database_path;
|
char *database_path;
|
||||||
|
char *crypto_gpg_path;
|
||||||
char *user_name;
|
char *user_name;
|
||||||
char *user_primary_email;
|
char *user_primary_email;
|
||||||
const char **user_other_email;
|
const char **user_other_email;
|
||||||
|
@ -244,6 +253,7 @@ notmuch_config_open (void *ctx,
|
||||||
int file_had_user_group;
|
int file_had_user_group;
|
||||||
int file_had_maildir_group;
|
int file_had_maildir_group;
|
||||||
int file_had_search_group;
|
int file_had_search_group;
|
||||||
|
int file_had_crypto_group;
|
||||||
|
|
||||||
notmuch_config_t *config = talloc (ctx, notmuch_config_t);
|
notmuch_config_t *config = talloc (ctx, notmuch_config_t);
|
||||||
if (config == NULL) {
|
if (config == NULL) {
|
||||||
|
@ -277,6 +287,7 @@ notmuch_config_open (void *ctx,
|
||||||
config->maildir_synchronize_flags = TRUE;
|
config->maildir_synchronize_flags = TRUE;
|
||||||
config->search_exclude_tags = NULL;
|
config->search_exclude_tags = NULL;
|
||||||
config->search_exclude_tags_length = 0;
|
config->search_exclude_tags_length = 0;
|
||||||
|
config->crypto_gpg_path = NULL;
|
||||||
|
|
||||||
if (! g_key_file_load_from_file (config->key_file,
|
if (! g_key_file_load_from_file (config->key_file,
|
||||||
config->filename,
|
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_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_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_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) {
|
if (notmuch_config_get_database_path (config) == NULL) {
|
||||||
char *path = getenv ("MAILDIR");
|
char *path = getenv ("MAILDIR");
|
||||||
|
@ -406,6 +417,10 @@ notmuch_config_open (void *ctx,
|
||||||
g_error_free (error);
|
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
|
/* Whenever we know of configuration sections that don't appear in
|
||||||
* the configuration file, we add some comments to help the user
|
* the configuration file, we add some comments to help the user
|
||||||
* understand what can be done. */
|
* understand what can be done. */
|
||||||
|
@ -433,6 +448,10 @@ notmuch_config_open (void *ctx,
|
||||||
g_key_file_set_comment (config->key_file, "search", NULL,
|
g_key_file_set_comment (config->key_file, "search", NULL,
|
||||||
search_config_comment, 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;
|
return config;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -690,6 +709,20 @@ notmuch_config_set_search_exclude_tags (notmuch_config_t *config,
|
||||||
&(config->search_exclude_tags));
|
&(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
|
/* Given a configuration item of the form <group>.<key> return the
|
||||||
* component group and key. If any error occurs, print a message on
|
* component group and key. If any error occurs, print a message on
|
||||||
* stderr and return 1. Otherwise, return 0.
|
* stderr and return 1. Otherwise, return 0.
|
||||||
|
|
|
@ -822,6 +822,8 @@ notmuch_reply_command (notmuch_config_t *config, int argc, char *argv[])
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
params.crypto.gpgpath = notmuch_config_get_crypto_gpg_path (config);
|
||||||
|
|
||||||
if (notmuch_database_open (notmuch_config_get_database_path (config),
|
if (notmuch_database_open (notmuch_config_get_database_path (config),
|
||||||
NOTMUCH_DATABASE_MODE_READ_ONLY, ¬much))
|
NOTMUCH_DATABASE_MODE_READ_ONLY, ¬much))
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
|
|
|
@ -1204,6 +1204,8 @@ notmuch_show_command (notmuch_config_t *config, int argc, char *argv[])
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
params.crypto.gpgpath = notmuch_config_get_crypto_gpg_path (config);
|
||||||
|
|
||||||
if (notmuch_database_open (notmuch_config_get_database_path (config),
|
if (notmuch_database_open (notmuch_config_get_database_path (config),
|
||||||
NOTMUCH_DATABASE_MODE_READ_ONLY, ¬much))
|
NOTMUCH_DATABASE_MODE_READ_ONLY, ¬much))
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
|
|
|
@ -54,6 +54,7 @@ new.tags=unread;inbox;
|
||||||
new.ignore=
|
new.ignore=
|
||||||
search.exclude_tags=
|
search.exclude_tags=
|
||||||
maildir.synchronize_flags=true
|
maildir.synchronize_flags=true
|
||||||
|
crypto.gpg_path=gpg
|
||||||
foo.string=this is another string value
|
foo.string=this is another string value
|
||||||
foo.list=this;is another;list value;"
|
foo.list=this;is another;list value;"
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,7 @@ user.other_email=another.suite@example.com;
|
||||||
new.tags=foo;bar;
|
new.tags=foo;bar;
|
||||||
new.ignore=
|
new.ignore=
|
||||||
search.exclude_tags=baz;
|
search.exclude_tags=baz;
|
||||||
maildir.synchronize_flags=true"
|
maildir.synchronize_flags=true
|
||||||
|
crypto.gpg_path=gpg"
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
|
Loading…
Reference in a new issue