X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=notmuch-config.c;h=d252bb25d4bb565d78c88a14e5719949259a076d;hp=8f1f48d07b51301a0f08be1a39b7ab6beb3ba7f1;hb=87aa5aea5601a145c1163069a6d3ce7c4d190f1f;hpb=488b2619643de6776e2649d97b480da8db049023 diff --git a/notmuch-config.c b/notmuch-config.c index 8f1f48d0..d252bb25 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; @@ -217,7 +226,7 @@ get_username_from_passwd_file (void *ctx) * These default configuration settings are determined as * follows: * - * database_path: $HOME/mail + * database_path: $MAILDIR, otherwise $HOME/mail * * user_name: $NAME variable if set, otherwise * read from /etc/passwd @@ -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,22 +287,29 @@ 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, G_KEY_FILE_KEEP_COMMENTS, &error)) { - /* If create_new is true, then the caller is prepared for a - * default configuration file in the case of FILE NOT - * FOUND. Otherwise, any read failure is an error. - */ - if (create_new && - error->domain == G_FILE_ERROR && - error->code == G_FILE_ERROR_NOENT) - { - g_error_free (error); - config->is_new = TRUE; + if (error->domain == G_FILE_ERROR && error->code == G_FILE_ERROR_NOENT) { + /* If create_new is true, then the caller is prepared for a + * default configuration file in the case of FILE NOT + * FOUND. + */ + if (create_new) { + g_error_free (error); + config->is_new = TRUE; + } else { + fprintf (stderr, "Configuration file %s not found.\n" + "Try running 'notmuch setup' to create a configuration.\n", + config->filename); + talloc_free (config); + g_error_free (error); + return NULL; + } } else { @@ -320,18 +337,24 @@ 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 = talloc_asprintf (config, "%s/mail", - getenv ("HOME")); + char *path = getenv ("MAILDIR"); + if (path) + path = talloc_strdup (config, path); + else + path = talloc_asprintf (config, "%s/mail", + getenv ("HOME")); notmuch_config_set_database_path (config, path); talloc_free (path); } if (notmuch_config_get_user_name (config) == NULL) { char *name = getenv ("NAME"); - if (! name) + if (name) + name = talloc_strdup (config, name); + else name = get_name_from_passwd_file (config); notmuch_config_set_user_name (config, name); talloc_free (name); @@ -394,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. */ @@ -421,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; } @@ -678,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 . return the * component group and key. If any error occurs, print a message on * stderr and return 1. Otherwise, return 0. @@ -827,8 +872,19 @@ int notmuch_config_command (notmuch_config_t *config, int argc, char *argv[]) { int ret; + int opt_index; + + opt_index = notmuch_minimal_options ("config", argc, argv); + if (opt_index < 0) + return EXIT_FAILURE; + + if (notmuch_requested_db_uuid) + fprintf (stderr, "Warning: ignoring --uuid=%s\n", + notmuch_requested_db_uuid); - argc--; argv++; /* skip subcommand argument */ + /* skip at least subcommand argument */ + argc-= opt_index; + argv+= opt_index; if (argc < 1) { fprintf (stderr, "Error: notmuch config requires at least one argument.\n");