return box;
}
+struct mailbox *mailbox_alloc_delivery(struct mail_user *user,
+ const char *name, enum mailbox_flags flags)
+{
+ struct mail_namespace *ns;
+
+ flags |= MAILBOX_FLAG_SAVEONLY |
+ MAILBOX_FLAG_POST_SESSION;
+
+ ns = mail_namespace_find(user->namespaces, name);
+ if (strcmp(name, ns->prefix) == 0 &&
+ (ns->flags & NAMESPACE_FLAG_INBOX_USER) != 0) {
+ /* delivering to a namespace prefix means we actually want to
+ deliver to the INBOX instead */
+ name = "INBOX";
+ ns = mail_namespace_find_inbox(user->namespaces);
+ }
+
+ if (strcasecmp(name, "INBOX") == 0) {
+ /* deliveries to INBOX must always succeed,
+ regardless of ACLs */
+ flags |= MAILBOX_FLAG_IGNORE_ACLS;
+ }
+
+ return mailbox_alloc(ns->list, name, flags);
+}
+
void mailbox_set_reason(struct mailbox *box, const char *reason)
{
i_assert(reason != NULL);
struct mailbox *mailbox_alloc_guid(struct mailbox_list *list,
const guid_128_t guid,
enum mailbox_flags flags);
+/* Initialize mailbox for delivery without actually opening any files or
+ verifying that it exists. */
+struct mailbox *mailbox_alloc_delivery(struct mail_user *user,
+ const char *name, enum mailbox_flags flags);
/* Set a human-readable reason for why this mailbox is being accessed.
This is used for logging purposes. */
void mailbox_set_reason(struct mailbox *box, const char *reason);