]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
maildir: don't use ".temp" prefix for temporary files, since in ~/Maildir they
authorTimo Sirainen <tss@iki.fi>
Sun, 9 May 2004 23:32:43 +0000 (02:32 +0300)
committerTimo Sirainen <tss@iki.fi>
Sun, 9 May 2004 23:32:43 +0000 (02:32 +0300)
conflict with mailbox namespace.

--HG--
branch : HEAD

src/lib-storage/index/index-storage.h
src/lib-storage/index/maildir/maildir-storage.c
src/lib-storage/index/maildir/maildir-uidlist.c
src/lib-storage/index/mbox/mbox-storage.c
src/lib-storage/subscription-file/subscription-file.c
src/lib-storage/subscription-file/subscription-file.h

index 52c45774dbf99541453ea2615dce4458ae1d3c51..1739c6695a570929a5ac2baa0415770e86280944 100644 (file)
@@ -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 */
 
index da38995f59fe48955a06fba11b215ec140f3ae29..868bcf6cb1eb468ba64110dd35cd4a0ca04d6d33 100644 (file)
@@ -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,
index f882153470c67bc8a1784df387b8d987929fc8ab..1a7a9a6f51e1c96f9d95c544a5f13bdce1af6660 100644 (file)
@@ -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)
index 29ddff21f4632c3e74b7d5e1e7dfc9d536f7c8b3..b8e23725138aa947c1abdc2476b692a87b925ddd 100644 (file)
@@ -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,
index 44312e9bceb48dc7b247f00eb58c2f7278d7b154..9868ac052d273cf29f32c53436cd00571b2ad4c7 100644 (file)
@@ -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,
index 364ee754e18cb2201a79c79342484b4f6e180218..a51d81a5cb8c3c1201e537121e815c939fde1ad3 100644 (file)
@@ -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