dovecot: Moved mail_create_mode/gid from struct maildir_mailbox ...
dovecot at dovecot.org
dovecot at dovecot.org
Sun Oct 21 18:58:04 EEST 2007
details: http://hg.dovecot.org/dovecot/rev/7eb8fd17f8c5
changeset: 6598:7eb8fd17f8c5
user: Timo Sirainen <tss at iki.fi>
date: Sun Oct 21 17:41:47 2007 +0300
description:
Moved mail_create_mode/gid from struct maildir_mailbox to struct mailbox.
diffstat:
8 files changed, 33 insertions(+), 32 deletions(-)
src/lib-storage/index/index-storage.c | 5 +++++
src/lib-storage/index/maildir/maildir-copy.c | 13 +++++--------
src/lib-storage/index/maildir/maildir-keywords.c | 8 ++++----
src/lib-storage/index/maildir/maildir-save.c | 15 ++++++++-------
src/lib-storage/index/maildir/maildir-storage.c | 9 +++------
src/lib-storage/index/maildir/maildir-storage.h | 3 ---
src/lib-storage/index/maildir/maildir-uidlist.c | 8 ++++----
src/lib-storage/mail-storage-private.h | 4 ++++
diffs (195 lines):
diff -r 7b5b3b0c7002 -r 7eb8fd17f8c5 src/lib-storage/index/index-storage.c
--- a/src/lib-storage/index/index-storage.c Sun Oct 21 17:41:30 2007 +0300
+++ b/src/lib-storage/index/index-storage.c Sun Oct 21 17:41:47 2007 +0300
@@ -404,6 +404,11 @@ void index_storage_mailbox_init(struct i
ibox->box.storage = storage;
ibox->box.name = p_strdup(ibox->box.pool, name);
+ if (ibox->box.file_create_mode == 0) {
+ ibox->box.file_create_mode = 0600;
+ ibox->box.file_create_gid = (gid_t)-1;
+ }
+
array_create(&ibox->box.module_contexts,
ibox->box.pool, sizeof(void *), 5);
diff -r 7b5b3b0c7002 -r 7eb8fd17f8c5 src/lib-storage/index/maildir/maildir-copy.c
--- a/src/lib-storage/index/maildir/maildir-copy.c Sun Oct 21 17:41:30 2007 +0300
+++ b/src/lib-storage/index/maildir/maildir-copy.c Sun Oct 21 17:41:47 2007 +0300
@@ -201,13 +201,10 @@ maildir_copy_hardlink(struct maildir_tra
}
static bool
-maildir_compatible_file_modes(struct maildir_mailbox *mbox1,
- struct mailbox *box2)
-{
- struct maildir_mailbox *mbox2 = (struct maildir_mailbox *)box2;
-
- return mbox1->mail_create_mode == mbox2->mail_create_mode &&
- mbox2->mail_create_gid == mbox2->mail_create_gid;
+maildir_compatible_file_modes(struct mailbox *box1, struct mailbox *box2)
+{
+ return box1->file_create_mode == box2->file_create_mode &&
+ box1->file_create_gid == box2->file_create_gid;
}
int maildir_copy(struct mailbox_transaction_context *_t, struct mail *mail,
@@ -221,7 +218,7 @@ int maildir_copy(struct mailbox_transact
if (mbox->storage->copy_with_hardlinks &&
mail->box->storage == mbox->ibox.box.storage &&
- maildir_compatible_file_modes(mbox, mail->box)) {
+ maildir_compatible_file_modes(&mbox->ibox.box, mail->box)) {
t_push();
ret = maildir_copy_hardlink(t, mail, flags,
keywords, dest_mail);
diff -r 7b5b3b0c7002 -r 7eb8fd17f8c5 src/lib-storage/index/maildir/maildir-keywords.c
--- a/src/lib-storage/index/maildir/maildir-keywords.c Sun Oct 21 17:41:30 2007 +0300
+++ b/src/lib-storage/index/maildir/maildir-keywords.c Sun Oct 21 17:41:47 2007 +0300
@@ -306,9 +306,9 @@ static int maildir_keywords_write_fd(str
return -1;
}
- if (st.st_gid != mbox->mail_create_gid &&
- mbox->mail_create_gid != (gid_t)-1) {
- if (fchown(fd, (uid_t)-1, mbox->mail_create_gid) < 0) {
+ if (st.st_gid != mbox->ibox.box.file_create_gid &&
+ mbox->ibox.box.file_create_gid != (gid_t)-1) {
+ if (fchown(fd, (uid_t)-1, mbox->ibox.box.file_create_gid) < 0) {
mail_storage_set_critical(mk->storage,
"fchown(%s) failed: %m", path);
}
@@ -354,7 +354,7 @@ static int maildir_keywords_commit(struc
malicious symlinks */
lock_path = t_strconcat(mk->path, ".lock", NULL);
(void)unlink(lock_path);
- old_mask = umask(0777 & ~mk->mbox->mail_create_mode);
+ old_mask = umask(0777 & ~mk->mbox->ibox.box.file_create_mode);
fd = file_dotlock_open(&mk->dotlock_settings, mk->path,
DOTLOCK_CREATE_FLAG_NONBLOCK, &dotlock);
umask(old_mask);
diff -r 7b5b3b0c7002 -r 7eb8fd17f8c5 src/lib-storage/index/maildir/maildir-save.c
--- a/src/lib-storage/index/maildir/maildir-save.c Sun Oct 21 17:41:30 2007 +0300
+++ b/src/lib-storage/index/maildir/maildir-save.c Sun Oct 21 17:41:47 2007 +0300
@@ -288,6 +288,7 @@ static int maildir_create_tmp(struct mai
static int maildir_create_tmp(struct maildir_mailbox *mbox, const char *dir,
const char **fname_r)
{
+ struct mailbox *box = &mbox->ibox.box;
struct stat st;
unsigned int prefix_len;
const char *tmp_fname = NULL;
@@ -310,12 +311,12 @@ static int maildir_create_tmp(struct mai
if (stat(str_c(path), &st) == 0) {
/* try another file name */
} else if (errno != ENOENT) {
- mail_storage_set_critical(&mbox->storage->storage,
+ mail_storage_set_critical(box->storage,
"stat(%s) failed: %m", str_c(path));
return -1;
} else {
/* doesn't exist */
- mode_t old_mask = umask(0777 & ~mbox->mail_create_mode);
+ mode_t old_mask = umask(0777 & ~box->file_create_mode);
fd = open(str_c(path),
O_WRONLY | O_CREAT | O_TRUNC | O_EXCL, 0777);
umask(old_mask);
@@ -330,15 +331,15 @@ static int maildir_create_tmp(struct mai
*fname_r = tmp_fname;
if (fd == -1) {
if (ENOSPACE(errno)) {
- mail_storage_set_error(&mbox->storage->storage,
+ mail_storage_set_error(box->storage,
MAIL_ERROR_NOSPACE, MAIL_ERRSTR_NO_SPACE);
} else {
- mail_storage_set_critical(&mbox->storage->storage,
+ mail_storage_set_critical(box->storage,
"open(%s) failed: %m", str_c(path));
}
- } else if (mbox->mail_create_gid != (gid_t)-1) {
- if (fchown(fd, (uid_t)-1, mbox->mail_create_gid) < 0) {
- mail_storage_set_critical(&mbox->storage->storage,
+ } else if (box->file_create_gid != (gid_t)-1) {
+ if (fchown(fd, (uid_t)-1, box->file_create_gid) < 0) {
+ mail_storage_set_critical(box->storage,
"fchown(%s) failed: %m", str_c(path));
}
}
diff -r 7b5b3b0c7002 -r 7eb8fd17f8c5 src/lib-storage/index/maildir/maildir-storage.c
--- a/src/lib-storage/index/maildir/maildir-storage.c Sun Oct 21 17:41:30 2007 +0300
+++ b/src/lib-storage/index/maildir/maildir-storage.c Sun Oct 21 17:41:47 2007 +0300
@@ -428,12 +428,9 @@ maildir_open(struct maildir_storage *sto
mail_index_ext_register(index, "maildir",
sizeof(mbox->maildir_hdr), 0, 0);
- if (!shared) {
- mbox->mail_create_mode = 0600;
- mbox->mail_create_gid = (gid_t)-1;
- } else {
- mbox->mail_create_mode = st.st_mode & 0666;
- mbox->mail_create_gid = st.st_gid;
+ if (shared) {
+ mbox->ibox.box.file_create_mode = st.st_mode & 0666;
+ mbox->ibox.box.file_create_gid = st.st_gid;
mbox->ibox.box.private_flags_mask = MAIL_SEEN;
}
diff -r 7b5b3b0c7002 -r 7eb8fd17f8c5 src/lib-storage/index/maildir/maildir-storage.h
--- a/src/lib-storage/index/maildir/maildir-storage.h Sun Oct 21 17:41:30 2007 +0300
+++ b/src/lib-storage/index/maildir/maildir-storage.h Sun Oct 21 17:41:47 2007 +0300
@@ -86,9 +86,6 @@ struct maildir_mailbox {
struct maildir_index_header maildir_hdr;
uint32_t maildir_ext_id;
- mode_t mail_create_mode;
- gid_t mail_create_gid;
-
unsigned int syncing_commit:1;
};
diff -r 7b5b3b0c7002 -r 7eb8fd17f8c5 src/lib-storage/index/maildir/maildir-uidlist.c
--- a/src/lib-storage/index/maildir/maildir-uidlist.c Sun Oct 21 17:41:30 2007 +0300
+++ b/src/lib-storage/index/maildir/maildir-uidlist.c Sun Oct 21 17:41:47 2007 +0300
@@ -134,7 +134,7 @@ static int maildir_uidlist_lock_timeout(
}
path = t_strconcat(mbox->control_dir, "/" MAILDIR_UIDLIST_NAME, NULL);
- old_mask = umask(0777 & ~mbox->mail_create_mode);
+ old_mask = umask(0777 & ~mbox->ibox.box.file_create_mode);
ret = file_dotlock_create(&uidlist->dotlock_settings, path,
nonblock ? DOTLOCK_CREATE_FLAG_NONBLOCK : 0,
&uidlist->dotlock);
@@ -885,7 +885,7 @@ static int maildir_uidlist_recreate(stru
temp_path = t_strconcat(mbox->control_dir,
"/" MAILDIR_UIDLIST_NAME ".tmp", NULL);
- old_mask = umask(0777 & ~mbox->mail_create_mode);
+ old_mask = umask(0777 & ~mbox->ibox.box.file_create_mode);
fd = open(temp_path, O_RDWR | O_CREAT | O_TRUNC, 0777);
umask(old_mask);
@@ -895,8 +895,8 @@ static int maildir_uidlist_recreate(stru
return -1;
}
- if (mbox->mail_create_gid != (gid_t)-1) {
- if (fchown(fd, (uid_t)-1, mbox->mail_create_gid) < 0) {
+ if (mbox->ibox.box.file_create_gid != (gid_t)-1) {
+ if (fchown(fd, (uid_t)-1, mbox->ibox.box.file_create_gid) < 0) {
mail_storage_set_critical(&mbox->storage->storage,
"fchown(%s) failed: %m", temp_path);
}
diff -r 7b5b3b0c7002 -r 7eb8fd17f8c5 src/lib-storage/mail-storage-private.h
--- a/src/lib-storage/mail-storage-private.h Sun Oct 21 17:41:30 2007 +0300
+++ b/src/lib-storage/mail-storage-private.h Sun Oct 21 17:41:47 2007 +0300
@@ -181,6 +181,10 @@ struct mailbox {
/* User's private flags if this is a shared mailbox */
enum mail_flags private_flags_mask;
+ /* mode and GID to use for newly created files */
+ mode_t file_create_mode;
+ gid_t file_create_gid;
+
/* Mailbox notification settings: */
unsigned int notify_min_interval;
mailbox_notify_callback_t *notify_callback;
More information about the dovecot-cvs
mailing list