dovecot-2.2: lib-storage: Improved mailbox_list_mkdir() error ha...

dovecot at dovecot.org dovecot at dovecot.org
Wed Sep 26 00:39:02 EEST 2012


details:   http://hg.dovecot.org/dovecot-2.2/rev/69b406249e47
changeset: 15110:69b406249e47
user:      Timo Sirainen <tss at iki.fi>
date:      Wed Sep 26 00:23:02 2012 +0300
description:
lib-storage: Improved mailbox_list_mkdir() error handling.

diffstat:

 src/lib-storage/mailbox-list.c |  14 +++++++++++---
 src/lib-storage/mailbox-list.h |   3 ++-
 2 files changed, 13 insertions(+), 4 deletions(-)

diffs (41 lines):

diff -r f6225edc2c1e -r 69b406249e47 src/lib-storage/mailbox-list.c
--- a/src/lib-storage/mailbox-list.c	Tue Sep 25 23:38:14 2012 +0300
+++ b/src/lib-storage/mailbox-list.c	Wed Sep 26 00:23:02 2012 +0300
@@ -1421,13 +1421,21 @@
 	}
 	if (mkdir_parents_chgrp(path, perm.dir_create_mode,
 				perm.file_create_gid,
-				perm.file_create_gid_origin) < 0 &&
-	    errno != EEXIST) {
+				perm.file_create_gid_origin) == 0)
+		return 1;
+	else if (errno == EEXIST)
+		return 0;
+	else if (errno == ENOTDIR) {
+		mailbox_list_set_error(list, MAIL_ERROR_NOTPOSSIBLE,
+			"Mailbox doesn't allow inferior mailboxes");
+		return -1;
+	} else if (mailbox_list_set_error_from_errno(list)) {
+		return -1;
+	} else {
 		mailbox_list_set_critical(list, "mkdir_parents(%s) failed: %m",
 					  path);
 		return -1;
 	}
-	return 0;
 }
 
 int mailbox_list_mkdir_parent(struct mailbox_list *list,
diff -r f6225edc2c1e -r 69b406249e47 src/lib-storage/mailbox-list.h
--- a/src/lib-storage/mailbox-list.h	Tue Sep 25 23:38:14 2012 +0300
+++ b/src/lib-storage/mailbox-list.h	Wed Sep 26 00:23:02 2012 +0300
@@ -162,7 +162,8 @@
 void mailbox_list_get_root_permissions(struct mailbox_list *list,
 				       mode_t *file_mode_r, mode_t *dir_mode_r,
 				       gid_t *gid_r, const char **gid_origin_r);
-/* Create path's directory with proper permissions. */
+/* Create path's directory with proper permissions. Returns 1 if created,
+   0 if it already existed, -1 if error. */
 int mailbox_list_mkdir(struct mailbox_list *list,
 		       const char *mailbox, const char *path) ATTR_NULL(2);
 /* Like mailbox_list_mkdir(), but create path's parent parent directory.


More information about the dovecot-cvs mailing list