dovecot: Don't copy mails with hardlinks if source and destinati...
dovecot at dovecot.org
dovecot at dovecot.org
Tue Aug 7 11:56:19 EEST 2007
details: http://hg.dovecot.org/dovecot/rev/3f6154a837c6
changeset: 6206:3f6154a837c6
user: Timo Sirainen <tss at iki.fi>
date: Tue Aug 07 11:54:42 2007 +0300
description:
Don't copy mails with hardlinks if source and destination file mode/gid are
different.
diffstat:
1 file changed, 12 insertions(+), 1 deletion(-)
src/lib-storage/index/maildir/maildir-copy.c | 13 ++++++++++++-
diffs (30 lines):
diff -r 65e12fa51d4d -r 3f6154a837c6 src/lib-storage/index/maildir/maildir-copy.c
--- a/src/lib-storage/index/maildir/maildir-copy.c Tue Aug 07 11:42:45 2007 +0300
+++ b/src/lib-storage/index/maildir/maildir-copy.c Tue Aug 07 11:54:42 2007 +0300
@@ -200,6 +200,16 @@ maildir_copy_hardlink(struct maildir_tra
return 1;
}
+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;
+}
+
int maildir_copy(struct mailbox_transaction_context *_t, struct mail *mail,
enum mail_flags flags, struct mail_keywords *keywords,
struct mail *dest_mail)
@@ -210,7 +220,8 @@ int maildir_copy(struct mailbox_transact
int ret;
if (mbox->storage->copy_with_hardlinks &&
- mail->box->storage == mbox->ibox.box.storage) {
+ mail->box->storage == mbox->ibox.box.storage &&
+ maildir_compatible_file_modes(mbox, mail->box)) {
t_push();
ret = maildir_copy_hardlink(t, mail, flags,
keywords, dest_mail);
More information about the dovecot-cvs
mailing list