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