[Dovecot] Problem with incorrect permissions with shared folders

Timo Sirainen tss at iki.fi
Sun Jan 30 10:40:40 EET 2005


On 24.1.2005, at 14:30, Dave Hatton wrote:

> So dovecot doesn't appear to be honouring the permissions on 
> dovecot-shared
> when creating folders.

Right. It was supposed to be used only for mails within a mailbox.

>
> Also, when creating a folder in a shared folder should the create 
> process
> automatically copy the dovecot-shared file down to the new folder to 
> allow
> this to be shared as well?

I guess:

Index: lib-storage/index/maildir/maildir-storage.c
===================================================================
RCS file: 
/var/lib/cvs/dovecot/src/lib-storage/index/maildir/maildir-storage.c,v
retrieving revision 1.89
diff -u -r1.89 maildir-storage.c
--- lib-storage/index/maildir/maildir-storage.c	29 Dec 2004 19:10:27 
-0000	1.89
+++ lib-storage/index/maildir/maildir-storage.c	30 Jan 2005 08:39:14 
-0000
@@ -482,12 +482,36 @@
  	}
  }

+static int maildir_create_shared(struct mail_storage *storage,
+				 const char *path, mode_t mode, gid_t gid)
+{
+	mode_t old_mask = umask(0);
+	int fd;
+
+	fd = open(path, O_WRONLY | O_CREAT, mode);
+	umask(old_mask);
+
+	if (fd == -1) {
+		mail_storage_set_critical(storage,
+					  "open(%s) failed: %m", path);
+		return -1;
+	}
+
+	if (fchown(fd, (uid_t)-1, gid) < 0) {
+		mail_storage_set_critical(storage,
+					  "fchown(%s) failed: %m", path);
+	}
+	(void)close(fd);
+	return 0;
+}
+
  static int maildir_mailbox_create(struct mail_storage *_storage,
  				  const char *name,
  				  int directory __attr_unused__)
  {
  	struct index_storage *storage = (struct index_storage *)_storage;
-	const char *path;
+	struct stat st;
+	const char *path, *shared_path;

  	mail_storage_clear_error(_storage);

@@ -505,6 +529,15 @@
  		return -1;
  	}

+	/* if dovecot-shared exists in the root dir, copy it to the
+	   created mailbox */
+	shared_path = t_strconcat(storage->dir, "/dovecot-shared", NULL);
+	if (stat(shared_path, &st) == 0) {
+		path = t_strconcat(path, "/dovecot-shared", NULL);
+		(void)maildir_create_shared(_storage, path,
+					    st.st_mode & 0666, st.st_gid);
+	}
+
  	return 0;
  }

-------------- next part --------------
A non-text attachment was scrubbed...
Name: PGP.sig
Type: application/pgp-signature
Size: 186 bytes
Desc: This is a digitally signed message part
URL: <http://dovecot.org/pipermail/dovecot/attachments/20050130/7f5e9690/attachment-0001.bin>


More information about the dovecot mailing list