/* Using LAYOUT=index and mailbox is being opened with a corrupted
mailbox name. Try to revert to the previously known good name. */
bool corrupted_mailbox_name:1;
+ /* mailbox_open() returned MAIL_ERROR_NOTFOUND because the mailbox
+ doesn't have the LOOKUP ACL right. */
+ bool acl_no_lookup_right:1;
};
struct mail_vfuncs {
if (mailbox_create(box, NULL, FALSE) < 0) {
errstr = mailbox_get_last_internal_error(box, &error);
+ if (error == MAIL_ERROR_NOTFOUND && box->acl_no_lookup_right) {
+ /* ACL prevents creating this mailbox */
+ return -1;
+ }
if (error != MAIL_ERROR_EXISTS) {
mailbox_set_critical(box,
"Failed to autocreate mailbox: %s",
mailbox_close(box);
ret = box->v.open(box);
- if (ret < 0 && box->inbox_user &&
+ if (ret < 0 && box->inbox_user && !box->acl_no_lookup_right &&
!box->storage->user->inbox_open_error_logged) {
box->storage->user->inbox_open_error_logged = TRUE;
mailbox_set_critical(box,
mail_storage_set_error(box->storage, MAIL_ERROR_PERM,
MAIL_ERRSTR_NO_PERMISSION);
} else if (ret == 0) {
+ box->acl_no_lookup_right = TRUE;
mail_storage_set_error(box->storage, MAIL_ERROR_NOTFOUND,
T_MAIL_ERR_MAILBOX_NOT_FOUND(box->vname));
}