]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
"Mailbox doesn't exist" error mixed up using storage and virtual mailbox names.
authorTimo Sirainen <tss@iki.fi>
Sun, 24 Mar 2013 10:09:39 +0000 (12:09 +0200)
committerTimo Sirainen <tss@iki.fi>
Sun, 24 Mar 2013 10:09:39 +0000 (12:09 +0200)
This could have allowed a user to figure out existence of a mailbox without
having lookup ACL.

12 files changed:
src/lib-storage/index/cydir/cydir-storage.c
src/lib-storage/index/dbox-common/dbox-storage.c
src/lib-storage/index/maildir/maildir-storage.c
src/lib-storage/index/mbox/mbox-storage.c
src/lib-storage/index/pop3c/pop3c-storage.c
src/lib-storage/index/raw/raw-storage.c
src/lib-storage/list/mailbox-list-delete.c
src/lib-storage/list/mailbox-list-fs.c
src/lib-storage/list/mailbox-list-maildir.c
src/lib-storage/mailbox-list-private.h
src/plugins/acl/acl-mailbox.c
src/plugins/virtual/virtual-config.c

index 8427c1fb07d4a0ec73e10b8d2c40270c32689e92..6268834cdc4c53b952ec8fa4d1c23cada6fb40a0 100644 (file)
@@ -68,7 +68,7 @@ static int cydir_mailbox_open(struct mailbox *box)
                /* exists, open it */
        } else if (errno == ENOENT) {
                mail_storage_set_error(box->storage, MAIL_ERROR_NOTFOUND,
-                       T_MAIL_ERR_MAILBOX_NOT_FOUND(box->name));
+                       T_MAIL_ERR_MAILBOX_NOT_FOUND(box->vname));
                return -1;
        } else if (errno == EACCES) {
                mail_storage_set_critical(box->storage, "%s",
index 714521b1f2a6cf01c4a68113f979808878b5053b..ae6b3058c580c8b5f268d7af2addbb39a46b3880 100644 (file)
@@ -184,7 +184,7 @@ int dbox_mailbox_open(struct mailbox *box)
                ;
        else if (errno == ENOENT || errno == ENAMETOOLONG) {
                mail_storage_set_error(box->storage, MAIL_ERROR_NOTFOUND,
-                       T_MAIL_ERR_MAILBOX_NOT_FOUND(box->name));
+                       T_MAIL_ERR_MAILBOX_NOT_FOUND(box->vname));
                return -1;
        } else if (errno == EACCES) {
                mail_storage_set_critical(box->storage, "%s",
index 904ebdda50581865ad4ea87eb77e7c6f6574d777..bfccec51c40b6faf449edb3a74a82f5d9f81d855 100644 (file)
@@ -367,7 +367,7 @@ static int maildir_mailbox_open(struct mailbox *box)
 
        if (errno == ENOENT || errno == ENAMETOOLONG) {
                mail_storage_set_error(box->storage, MAIL_ERROR_NOTFOUND,
-                       T_MAIL_ERR_MAILBOX_NOT_FOUND(box->name));
+                       T_MAIL_ERR_MAILBOX_NOT_FOUND(box->vname));
                return -1;
        } else {
                mail_storage_set_critical(box->storage,
index 32f1cb8c72565e1ffdfb7fd101c6a538fb6a94b8..fd0a7e0aeaaf3f90fea0d1775be5dd8322b3f9b8 100644 (file)
@@ -470,7 +470,7 @@ static int mbox_mailbox_open(struct mailbox *box)
                return -1;
        } else if (ENOTFOUND(errno)) {
                mail_storage_set_error(box->storage, MAIL_ERROR_NOTFOUND,
-                       T_MAIL_ERR_MAILBOX_NOT_FOUND(box->name));
+                       T_MAIL_ERR_MAILBOX_NOT_FOUND(box->vname));
                return -1;
        } else if (mail_storage_set_error_from_errno(box->storage)) {
                return -1;
index b09306a0df9c366b3482cfeec37b3cfcc835ff4b..3703b538042a682d01c4f0b3a5af5e5aef9b92a4 100644 (file)
@@ -165,7 +165,7 @@ static int pop3c_mailbox_open(struct mailbox *box)
 
        if (strcmp(box->name, "INBOX") != 0) {
                mail_storage_set_error(box->storage, MAIL_ERROR_NOTFOUND,
-                                      T_MAIL_ERR_MAILBOX_NOT_FOUND(box->name));
+                                      T_MAIL_ERR_MAILBOX_NOT_FOUND(box->vname));
                return -1;
        }
 
index 1054e81ea749a97fb344afb914f6b68508d864a1..14825377b7ef05af4bb671350bc8042c1f09b729 100644 (file)
@@ -151,7 +151,7 @@ static int raw_mailbox_open(struct mailbox *box)
                if (ENOTFOUND(errno)) {
                        mail_storage_set_error(box->storage,
                                MAIL_ERROR_NOTFOUND,
-                               T_MAIL_ERR_MAILBOX_NOT_FOUND(box->name));
+                               T_MAIL_ERR_MAILBOX_NOT_FOUND(box->vname));
                } else if (!mail_storage_set_error_from_errno(box->storage)) {
                        mail_storage_set_critical(box->storage,
                                "open(%s) failed: %m", path);
index e4c57f9859e809801a71cd85c724fda5f54795df..70aaae688dc89cba0118731e48581e49e098ce90 100644 (file)
@@ -68,7 +68,7 @@ int mailbox_list_delete_maildir_via_trash(struct mailbox_list *list,
                                continue;
                        }
                        mailbox_list_set_error(list, MAIL_ERROR_NOTFOUND,
-                               T_MAIL_ERR_MAILBOX_NOT_FOUND(name));
+                               T_MAILBOX_LIST_ERR_NOT_FOUND(list, name));
                        return -1;
                }
                if (errno == EXDEV) {
@@ -130,7 +130,7 @@ int mailbox_list_delete_mailbox_file(struct mailbox_list *list,
                return 0;
        else if (ENOTFOUND(errno)) {
                mailbox_list_set_error(list, MAIL_ERROR_NOTFOUND,
-                                      T_MAIL_ERR_MAILBOX_NOT_FOUND(name));
+                                      T_MAILBOX_LIST_ERR_NOT_FOUND(list, name));
                return -1;
        } else {
                if (!mailbox_list_set_error_from_errno(list)) {
@@ -158,7 +158,7 @@ int mailbox_list_delete_mailbox_nonrecursive(struct mailbox_list *list,
        if (dir == NULL) {
                if (errno == ENOENT) {
                        mailbox_list_set_error(list, MAIL_ERROR_NOTFOUND,
-                               T_MAIL_ERR_MAILBOX_NOT_FOUND(name));
+                               T_MAILBOX_LIST_ERR_NOT_FOUND(list, name));
                } else {
                        if (!mailbox_list_set_error_from_errno(list)) {
                                mailbox_list_set_critical(list,
@@ -340,7 +340,7 @@ int mailbox_list_delete_symlink_default(struct mailbox_list *list,
 
        if (errno == ENOENT) {
                mailbox_list_set_error(list, MAIL_ERROR_NOTFOUND,
-                       T_MAIL_ERR_MAILBOX_NOT_FOUND(name));
+                       T_MAILBOX_LIST_ERR_NOT_FOUND(list, name));
        } else if (errno == EISDIR ||
                   errno == EPERM) { /* Solaris */
                mailbox_list_set_error(list, MAIL_ERROR_NOTPOSSIBLE,
index 99705aedcf28e3246a623afd1e1388685d12660c..62c51bdd5efbff0c8e738a4cdc008fd2dca1cfd5 100644 (file)
@@ -393,7 +393,7 @@ static int fs_list_delete_dir(struct mailbox_list *list, const char *name)
 
        if (errno == ENOENT || errno == ENOTDIR) {
                mailbox_list_set_error(list, MAIL_ERROR_NOTFOUND,
-                       T_MAIL_ERR_MAILBOX_NOT_FOUND(name));
+                       T_MAILBOX_LIST_ERR_NOT_FOUND(list, name));
        } else if (errno == ENOTEMPTY || errno == EEXIST) {
                /* mbox workaround: if only .imap/ directory is preventing the
                   deletion, remove it */
@@ -586,7 +586,7 @@ static int fs_list_rename_mailbox(struct mailbox_list *oldlist,
        if (rename(oldpath, newpath) < 0) {
                if (ENOTFOUND(errno)) {
                        mailbox_list_set_error(oldlist, MAIL_ERROR_NOTFOUND,
-                               T_MAIL_ERR_MAILBOX_NOT_FOUND(oldname));
+                               T_MAILBOX_LIST_ERR_NOT_FOUND(oldlist, oldname));
                } else if (!mailbox_list_set_error_from_errno(oldlist)) {
                        mailbox_list_set_critical(oldlist,
                                "rename(%s, %s) failed: %m", oldpath, newpath);
index 84a4bdc675d6dba5355e3337b9e677a6fd5f703c..146dd39a391019294e5882ba2096d322c57a762d 100644 (file)
@@ -428,7 +428,7 @@ static int maildir_list_delete_dir(struct mailbox_list *list, const char *name)
                                       "Mailbox exists");
        } else if (errno == ENOENT || errno == ENOTDIR) {
                mailbox_list_set_error(list, MAIL_ERROR_NOTFOUND,
-                       T_MAIL_ERR_MAILBOX_NOT_FOUND(name));
+                       T_MAILBOX_LIST_ERR_NOT_FOUND(list, name));
        } else {
                mailbox_list_set_critical(list, "stat(%s) failed: %m", path);
        }
@@ -613,7 +613,7 @@ maildir_list_rename_mailbox(struct mailbox_list *oldlist, const char *oldname,
                        return -1;
                if (!found && ret == 0) {
                        mailbox_list_set_error(oldlist, MAIL_ERROR_NOTFOUND,
-                               T_MAIL_ERR_MAILBOX_NOT_FOUND(oldname));
+                               T_MAILBOX_LIST_ERR_NOT_FOUND(oldlist, oldname));
                        return -1;
                }
 
index 5c5a2922e04ae436d78f239d64cfe997f9dacb31..30d3eb53e22d0d191d6bc9404f1378f6b8a7bb1d 100644 (file)
 
 #define MAILBOX_LOG_FILE_NAME "dovecot.mailbox.log"
 
+#define T_MAILBOX_LIST_ERR_NOT_FOUND(list, name) \
+       t_strdup_printf(MAIL_ERRSTR_MAILBOX_NOT_FOUND, \
+                       mailbox_list_get_vname(list, name))
+
 enum mailbox_log_record_type;
 struct stat;
 struct dirent;
index 0cb19bc6728fbb9151416531c885cf84061e1cc6..883937acf66c970392bc8e89cf1b45bef693fcd7 100644 (file)
@@ -159,7 +159,7 @@ static void acl_mailbox_fail_not_found(struct mailbox *box)
                                       MAIL_ERRSTR_NO_PERMISSION);
        } else if (ret == 0) {
                mail_storage_set_error(box->storage, MAIL_ERROR_NOTFOUND,
-                               T_MAIL_ERR_MAILBOX_NOT_FOUND(box->name));
+                               T_MAIL_ERR_MAILBOX_NOT_FOUND(box->vname));
        }
 }
 
index f21bb7d405456bcbc32bb07b220b842f163796e4..502ceac5c9004ed29e3fa2f928442752605806f2 100644 (file)
@@ -378,7 +378,7 @@ int virtual_config_read(struct virtual_mailbox *mbox)
                                "Virtual mailbox missing configuration file");
                } else if (errno == ENOENT) {
                        mail_storage_set_error(storage, MAIL_ERROR_NOTFOUND,
-                               T_MAIL_ERR_MAILBOX_NOT_FOUND(mbox->box.name));
+                               T_MAIL_ERR_MAILBOX_NOT_FOUND(mbox->box.vname));
                } else {
                        mail_storage_set_critical(storage,
                                "stat(%s) failed: %m", box_path);