dovecot-2.1: "Mailbox doesn't exist" error mixed up using storag...
dovecot at dovecot.org
dovecot at dovecot.org
Sun Mar 24 12:09:45 EET 2013
details: http://hg.dovecot.org/dovecot-2.1/rev/eece943c7521
changeset: 14936:eece943c7521
user: Timo Sirainen <tss at iki.fi>
date: Sun Mar 24 12:09:39 2013 +0200
description:
"Mailbox doesn't exist" error mixed up using storage and virtual mailbox names.
This could have allowed a user to figure out existence of a mailbox without
having lookup ACL.
diffstat:
src/lib-storage/index/cydir/cydir-storage.c | 2 +-
src/lib-storage/index/dbox-common/dbox-storage.c | 2 +-
src/lib-storage/index/maildir/maildir-storage.c | 2 +-
src/lib-storage/index/mbox/mbox-storage.c | 2 +-
src/lib-storage/index/pop3c/pop3c-storage.c | 2 +-
src/lib-storage/index/raw/raw-storage.c | 2 +-
src/lib-storage/list/mailbox-list-delete.c | 8 ++++----
src/lib-storage/list/mailbox-list-fs.c | 4 ++--
src/lib-storage/list/mailbox-list-maildir.c | 4 ++--
src/lib-storage/mailbox-list-private.h | 4 ++++
src/plugins/acl/acl-mailbox.c | 2 +-
src/plugins/virtual/virtual-config.c | 2 +-
12 files changed, 20 insertions(+), 16 deletions(-)
diffs (191 lines):
diff -r a588b743d695 -r eece943c7521 src/lib-storage/index/cydir/cydir-storage.c
--- a/src/lib-storage/index/cydir/cydir-storage.c Sun Oct 30 12:39:53 2011 +0100
+++ b/src/lib-storage/index/cydir/cydir-storage.c Sun Mar 24 12:09:39 2013 +0200
@@ -68,7 +68,7 @@
/* 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",
diff -r a588b743d695 -r eece943c7521 src/lib-storage/index/dbox-common/dbox-storage.c
--- a/src/lib-storage/index/dbox-common/dbox-storage.c Sun Oct 30 12:39:53 2011 +0100
+++ b/src/lib-storage/index/dbox-common/dbox-storage.c Sun Mar 24 12:09:39 2013 +0200
@@ -184,7 +184,7 @@
;
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",
diff -r a588b743d695 -r eece943c7521 src/lib-storage/index/maildir/maildir-storage.c
--- a/src/lib-storage/index/maildir/maildir-storage.c Sun Oct 30 12:39:53 2011 +0100
+++ b/src/lib-storage/index/maildir/maildir-storage.c Sun Mar 24 12:09:39 2013 +0200
@@ -367,7 +367,7 @@
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,
diff -r a588b743d695 -r eece943c7521 src/lib-storage/index/mbox/mbox-storage.c
--- a/src/lib-storage/index/mbox/mbox-storage.c Sun Oct 30 12:39:53 2011 +0100
+++ b/src/lib-storage/index/mbox/mbox-storage.c Sun Mar 24 12:09:39 2013 +0200
@@ -470,7 +470,7 @@
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;
diff -r a588b743d695 -r eece943c7521 src/lib-storage/index/pop3c/pop3c-storage.c
--- a/src/lib-storage/index/pop3c/pop3c-storage.c Sun Oct 30 12:39:53 2011 +0100
+++ b/src/lib-storage/index/pop3c/pop3c-storage.c Sun Mar 24 12:09:39 2013 +0200
@@ -165,7 +165,7 @@
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;
}
diff -r a588b743d695 -r eece943c7521 src/lib-storage/index/raw/raw-storage.c
--- a/src/lib-storage/index/raw/raw-storage.c Sun Oct 30 12:39:53 2011 +0100
+++ b/src/lib-storage/index/raw/raw-storage.c Sun Mar 24 12:09:39 2013 +0200
@@ -151,7 +151,7 @@
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);
diff -r a588b743d695 -r eece943c7521 src/lib-storage/list/mailbox-list-delete.c
--- a/src/lib-storage/list/mailbox-list-delete.c Sun Oct 30 12:39:53 2011 +0100
+++ b/src/lib-storage/list/mailbox-list-delete.c Sun Mar 24 12:09:39 2013 +0200
@@ -68,7 +68,7 @@
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 @@
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 @@
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 @@
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,
diff -r a588b743d695 -r eece943c7521 src/lib-storage/list/mailbox-list-fs.c
--- a/src/lib-storage/list/mailbox-list-fs.c Sun Oct 30 12:39:53 2011 +0100
+++ b/src/lib-storage/list/mailbox-list-fs.c Sun Mar 24 12:09:39 2013 +0200
@@ -393,7 +393,7 @@
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 @@
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);
diff -r a588b743d695 -r eece943c7521 src/lib-storage/list/mailbox-list-maildir.c
--- a/src/lib-storage/list/mailbox-list-maildir.c Sun Oct 30 12:39:53 2011 +0100
+++ b/src/lib-storage/list/mailbox-list-maildir.c Sun Mar 24 12:09:39 2013 +0200
@@ -428,7 +428,7 @@
"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 @@
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;
}
diff -r a588b743d695 -r eece943c7521 src/lib-storage/mailbox-list-private.h
--- a/src/lib-storage/mailbox-list-private.h Sun Oct 30 12:39:53 2011 +0100
+++ b/src/lib-storage/mailbox-list-private.h Sun Mar 24 12:09:39 2013 +0200
@@ -11,6 +11,10 @@
#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;
diff -r a588b743d695 -r eece943c7521 src/plugins/acl/acl-mailbox.c
--- a/src/plugins/acl/acl-mailbox.c Sun Oct 30 12:39:53 2011 +0100
+++ b/src/plugins/acl/acl-mailbox.c Sun Mar 24 12:09:39 2013 +0200
@@ -159,7 +159,7 @@
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));
}
}
diff -r a588b743d695 -r eece943c7521 src/plugins/virtual/virtual-config.c
--- a/src/plugins/virtual/virtual-config.c Sun Oct 30 12:39:53 2011 +0100
+++ b/src/plugins/virtual/virtual-config.c Sun Mar 24 12:09:39 2013 +0200
@@ -378,7 +378,7 @@
"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);
More information about the dovecot-cvs
mailing list