X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=notmuch-insert.c;h=1d3b015053deef8062c2f17a08d8cfe47231d9fe;hp=4d6b0a7fba2feb66d7d8ae3de5ca77cf5aa0bfce;hb=33382c2b5ba2537952a60ea378feff36961e4713;hpb=c5356b9ed56e42d36ca18206155b62c94cfbd79d diff --git a/notmuch-insert.c b/notmuch-insert.c index 4d6b0a7f..1d3b0150 100644 --- a/notmuch-insert.c +++ b/notmuch-insert.c @@ -99,7 +99,7 @@ is_valid_folder_name (const char *folder) if ((p[0] == '.') && (p[1] == '.') && (p[2] == '\0' || p[2] == '/')) return false; p = strchr (p, '/'); - if (!p) + if (! p) return true; p++; } @@ -120,7 +120,7 @@ mkdir_recursive (const void *ctx, const char *path, int mode) /* First check the common case: directory already exists. */ r = stat (path, &st); if (r == 0) { - if (! S_ISDIR (st.st_mode)) { + if (! S_ISDIR (st.st_mode)) { fprintf (stderr, "Error: '%s' is not a directory: %s\n", path, strerror (EEXIST)); return false; @@ -159,10 +159,10 @@ mkdir_recursive (const void *ctx, const char *path, int mode) * otherwise. Partial results are not cleaned up on errors. */ static bool -maildir_create_folder (const void *ctx, const char *maildir) +maildir_create_folder (const void *ctx, const char *maildir, bool world_readable) { const char *subdirs[] = { "cur", "new", "tmp" }; - const int mode = 0700; + const int mode = (world_readable ? 0755 : 0700); char *subdir; unsigned int i; @@ -211,10 +211,11 @@ tempfilename (const void *ctx) * is not touched). */ static int -maildir_mktemp (const void *ctx, const char *maildir, char **path_out) +maildir_mktemp (const void *ctx, const char *maildir, bool world_readable, char **path_out) { char *filename, *path; int fd; + const int mode = (world_readable ? 0644 : 0600); do { filename = tempfilename (ctx); @@ -227,7 +228,7 @@ maildir_mktemp (const void *ctx, const char *maildir, char **path_out) return -1; } - fd = open (path, O_WRONLY | O_CREAT | O_TRUNC | O_EXCL, 0600); + fd = open (path, O_WRONLY | O_CREAT | O_TRUNC | O_EXCL, mode); } while (fd == -1 && errno == EEXIST); if (fd == -1) { @@ -281,7 +282,7 @@ copy_fd (int fdout, int fdin) } while (remain > 0); } - return (!interrupted && !empty); + return (! interrupted && ! empty); } /* @@ -289,12 +290,12 @@ copy_fd (int fdout, int fdin) * the file, or NULL on errors. */ static char * -maildir_write_tmp (const void *ctx, int fdin, const char *maildir) +maildir_write_tmp (const void *ctx, int fdin, const char *maildir, bool world_readable) { char *path; int fdout; - fdout = maildir_mktemp (ctx, maildir, &path); + fdout = maildir_mktemp (ctx, maildir, world_readable, &path); if (fdout < 0) return NULL; @@ -310,7 +311,7 @@ maildir_write_tmp (const void *ctx, int fdin, const char *maildir) return path; -FAIL: + FAIL: close (fdout); unlink (path); @@ -323,11 +324,11 @@ FAIL: * errors. */ static char * -maildir_write_new (const void *ctx, int fdin, const char *maildir) +maildir_write_new (const void *ctx, int fdin, const char *maildir, bool world_readable) { char *cleanpath, *tmppath, *newpath, *newdir; - tmppath = maildir_write_tmp (ctx, fdin, maildir); + tmppath = maildir_write_tmp (ctx, fdin, maildir, world_readable); if (! tmppath) return NULL; cleanpath = tmppath; @@ -359,7 +360,7 @@ maildir_write_new (const void *ctx, int fdin, const char *maildir) return newpath; -FAIL: + FAIL: unlink (cleanpath); return NULL; @@ -456,7 +457,8 @@ notmuch_insert_command (notmuch_config_t *config, int argc, char *argv[]) const char *folder = ""; bool create_folder = false; bool keep = false; - bool no_hooks = false; + bool hooks = true; + bool world_readable = false; bool synchronize_flags; char *maildir; char *newpath; @@ -464,10 +466,11 @@ notmuch_insert_command (notmuch_config_t *config, int argc, char *argv[]) unsigned int i; notmuch_opt_desc_t options[] = { - { .opt_string = &folder, .name = "folder" }, + { .opt_string = &folder, .name = "folder", .allow_empty = true }, { .opt_bool = &create_folder, .name = "create-folder" }, { .opt_bool = &keep, .name = "keep" }, - { .opt_bool = &no_hooks, .name = "no-hooks" }, + { .opt_bool = &hooks, .name = "hooks" }, + { .opt_bool = &world_readable, .name = "world-readable" }, { .opt_inherit = notmuch_shared_indexing_options }, { .opt_inherit = notmuch_shared_options }, { } @@ -523,7 +526,7 @@ notmuch_insert_command (notmuch_config_t *config, int argc, char *argv[]) } strip_trailing (maildir, '/'); - if (create_folder && ! maildir_create_folder (config, maildir)) + if (create_folder && ! maildir_create_folder (config, maildir, world_readable)) return EXIT_FAILURE; /* Set up our handler for SIGINT. We do not set SA_RESTART so that copying @@ -535,7 +538,7 @@ notmuch_insert_command (notmuch_config_t *config, int argc, char *argv[]) sigaction (SIGINT, &action, NULL); /* Write the message to the Maildir new directory. */ - newpath = maildir_write_new (config, STDIN_FILENO, maildir); + newpath = maildir_write_new (config, STDIN_FILENO, maildir, world_readable); if (! newpath) { return EXIT_FAILURE; } @@ -547,7 +550,7 @@ notmuch_insert_command (notmuch_config_t *config, int argc, char *argv[]) notmuch_exit_if_unmatched_db_uuid (notmuch); - status = notmuch_process_shared_indexing_options (notmuch, config); + status = notmuch_process_shared_indexing_options (notmuch); if (status != NOTMUCH_STATUS_SUCCESS) { fprintf (stderr, "Error: Failed to process index options. (%s)\n", notmuch_status_to_string (status)); @@ -581,7 +584,7 @@ notmuch_insert_command (notmuch_config_t *config, int argc, char *argv[]) } } - if (! no_hooks && status == NOTMUCH_STATUS_SUCCESS) { + if (hooks && status == NOTMUCH_STATUS_SUCCESS) { /* Ignore hook failures. */ notmuch_run_hook (db_path, "post-insert"); }