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