From fff95fdfb5c8ba917eb80f82b439ee3066e5a051 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Mon, 10 May 2004 02:32:43 +0300 Subject: [PATCH] maildir: don't use ".temp" prefix for temporary files, since in ~/Maildir they conflict with mailbox namespace. --HG-- branch : HEAD --- src/lib-storage/index/index-storage.h | 1 + src/lib-storage/index/maildir/maildir-storage.c | 9 ++++++++- src/lib-storage/index/maildir/maildir-uidlist.c | 5 +++-- src/lib-storage/index/mbox/mbox-storage.c | 3 ++- src/lib-storage/subscription-file/subscription-file.c | 4 ++-- src/lib-storage/subscription-file/subscription-file.h | 2 +- 6 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/lib-storage/index/index-storage.h b/src/lib-storage/index/index-storage.h index 52c45774db..1739c6695a 100644 --- a/src/lib-storage/index/index-storage.h +++ b/src/lib-storage/index/index-storage.h @@ -42,6 +42,7 @@ struct index_storage { char *index_dir; char *control_dir; char *inbox_path; /* INBOX location */ + char *temp_prefix; /* prefix for temporary files */ char *user; /* name of user accessing the storage */ diff --git a/src/lib-storage/index/maildir/maildir-storage.c b/src/lib-storage/index/maildir/maildir-storage.c index da38995f59..868bcf6cb1 100644 --- a/src/lib-storage/index/maildir/maildir-storage.c +++ b/src/lib-storage/index/maildir/maildir-storage.c @@ -1,6 +1,7 @@ /* Copyright (C) 2002-2003 Timo Sirainen */ #include "lib.h" +#include "hostpid.h" #include "home-expand.h" #include "mkdir-parents.h" #include "unlink-directory.h" @@ -92,6 +93,10 @@ maildir_create(const char *data, const char *user, storage->storage.hierarchy_sep = hierarchy_sep; storage->storage.namespace = i_strdup(namespace); + /* the default ".temp.xxx" prefix would be treated as directory */ + storage->temp_prefix = + i_strconcat("temp.", my_hostname, ".", my_pid, ".", NULL); + storage->dir = i_strdup(home_expand(root_dir)); storage->inbox_path = i_strdup(home_expand(inbox_dir)); storage->index_dir = i_strdup(home_expand(index_dir)); @@ -108,6 +113,7 @@ static void maildir_free(struct mail_storage *_storage) index_storage_deinit(storage); + i_free(storage->temp_prefix); i_free(storage->dir); i_free(storage->inbox_path); i_free(storage->index_dir); @@ -731,7 +737,8 @@ static int maildir_set_subscribed(struct mail_storage *_storage, "/" SUBSCRIPTION_FILE_NAME, NULL); name = maildir_fix_mailbox_name(storage, name, FALSE); - return subsfile_set_subscribed(_storage, path, name, set); + return subsfile_set_subscribed(_storage, path, storage->temp_prefix, + name, set); } static int maildir_get_mailbox_name_status(struct mail_storage *_storage, diff --git a/src/lib-storage/index/maildir/maildir-uidlist.c b/src/lib-storage/index/maildir/maildir-uidlist.c index f882153470..1a7a9a6f51 100644 --- a/src/lib-storage/index/maildir/maildir-uidlist.c +++ b/src/lib-storage/index/maildir/maildir-uidlist.c @@ -79,8 +79,9 @@ int maildir_uidlist_try_lock(struct maildir_uidlist *uidlist) path = t_strconcat(uidlist->ibox->control_dir, "/" MAILDIR_UIDLIST_NAME, NULL); old_mask = umask(0777 & ~uidlist->ibox->mail_create_mode); - fd = file_dotlock_open(path, NULL, NULL, 0, 0, - UIDLIST_LOCK_STALE_TIMEOUT, NULL, NULL); + fd = file_dotlock_open(path, uidlist->ibox->storage->temp_prefix, + NULL, 0, 0, UIDLIST_LOCK_STALE_TIMEOUT, + NULL, NULL); umask(old_mask); if (fd == -1) { if (errno == EAGAIN) diff --git a/src/lib-storage/index/mbox/mbox-storage.c b/src/lib-storage/index/mbox/mbox-storage.c index 29ddff21f4..b8e2372513 100644 --- a/src/lib-storage/index/mbox/mbox-storage.c +++ b/src/lib-storage/index/mbox/mbox-storage.c @@ -728,7 +728,8 @@ static int mbox_set_subscribed(struct mail_storage *_storage, path = t_strconcat(storage->dir, "/" SUBSCRIPTION_FILE_NAME, NULL); name = mbox_fix_mailbox_name(storage, name, FALSE); - return subsfile_set_subscribed(_storage, path, name, set); + return subsfile_set_subscribed(_storage, path, storage->temp_prefix, + name, set); } static int mbox_get_mailbox_name_status(struct mail_storage *_storage, diff --git a/src/lib-storage/subscription-file/subscription-file.c b/src/lib-storage/subscription-file/subscription-file.c index 44312e9bce..9868ac052d 100644 --- a/src/lib-storage/subscription-file/subscription-file.c +++ b/src/lib-storage/subscription-file/subscription-file.c @@ -68,7 +68,7 @@ static const char *next_line(struct mail_storage *storage, const char *path, } int subsfile_set_subscribed(struct mail_storage *storage, const char *path, - const char *name, int set) + const char *temp_prefix, const char *name, int set) { const char *line; struct istream *input; @@ -79,7 +79,7 @@ int subsfile_set_subscribed(struct mail_storage *storage, const char *path, name = "INBOX"; /* FIXME: set lock notification callback */ - fd_out = file_dotlock_open(path, NULL, NULL, + fd_out = file_dotlock_open(path, temp_prefix, NULL, SUBSCRIPTION_FILE_LOCK_TIMEOUT, SUBSCRIPTION_FILE_CHANGE_TIMEOUT, SUBSCRIPTION_FILE_IMMEDIATE_TIMEOUT, diff --git a/src/lib-storage/subscription-file/subscription-file.h b/src/lib-storage/subscription-file/subscription-file.h index 364ee754e1..a51d81a5cb 100644 --- a/src/lib-storage/subscription-file/subscription-file.h +++ b/src/lib-storage/subscription-file/subscription-file.h @@ -14,6 +14,6 @@ int subsfile_list_deinit(struct subsfile_list_context *ctx); const char *subsfile_list_next(struct subsfile_list_context *ctx); int subsfile_set_subscribed(struct mail_storage *storage, const char *path, - const char *name, int set); + const char *temp_prefix, const char *name, int set); #endif -- 2.47.3