]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage, imap, doveadm: Add and use MAILBOX_FLAG_ATTRIBUTE_SESSION
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Wed, 15 Jan 2020 13:35:26 +0000 (15:35 +0200)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Thu, 23 Jan 2020 12:36:05 +0000 (12:36 +0000)
src/doveadm/doveadm-mail-mailbox-metadata.c
src/imap/cmd-setmetadata.c
src/lib-imap-storage/imap-metadata.c
src/lib-storage/mail-storage.h

index ec5b6023a5f94ac77a56638fba31d54727471ec5..2fad6e97def2250731d991aded4645dd92f443c8 100644 (file)
@@ -39,14 +39,16 @@ cmd_mailbox_metadata_open_mailbox(struct metadata_cmd_context *mctx,
                   so ignore them. */
                *ns_r = mail_namespace_find_inbox(user->namespaces);
                *box_r = mailbox_alloc((*ns_r)->list, "INBOX",
-                                      MAILBOX_FLAG_IGNORE_ACLS);
+                                      MAILBOX_FLAG_IGNORE_ACLS |
+                                      MAILBOX_FLAG_ATTRIBUTE_SESSION);
 
                mctx->key = t_strconcat(MAILBOX_ATTRIBUTE_PREFIX_DOVECOT_PVT_SERVER,
                                        mctx->key, NULL);
        } else {
                /* mailbox attributes */
                *ns_r = mail_namespace_find(user->namespaces, mctx->mailbox);
-               *box_r = mailbox_alloc((*ns_r)->list, mctx->mailbox, 0);
+               *box_r = mailbox_alloc((*ns_r)->list, mctx->mailbox,
+                                      MAILBOX_FLAG_ATTRIBUTE_SESSION);
        }
        mailbox_set_reason(*box_r, mctx->ctx.cmd->name);
 
index 841507c815433b128958a317995d0fa1fb95082c..6ef287cee1128a187cf4f134537a76ef32886c76 100644 (file)
@@ -312,7 +312,8 @@ cmd_setmetadata_mailbox(struct imap_setmetadata_context *ctx,
            mailbox_equals(client->mailbox, ns, mailbox))
                ctx->box = client->mailbox;
        else {
-               ctx->box = mailbox_alloc(ns->list, mailbox, 0);
+               ctx->box = mailbox_alloc(ns->list, mailbox,
+                                        MAILBOX_FLAG_ATTRIBUTE_SESSION);
                mailbox_set_reason(ctx->box, "SETMETADATA");
                if (mailbox_open(ctx->box) < 0) {
                        client_send_box_error(cmd, ctx->box);
index 0674bada0f5886c3a557218d1ef8d14e9f3650dc..34b5064312752968e114b826fa527c8e3231493e 100644 (file)
@@ -244,7 +244,8 @@ imap_metadata_transaction_begin_server(struct mail_user *user)
 
        ns = mail_namespace_find_inbox(user->namespaces);
        /* Server metadata shouldn't depend on INBOX's ACLs, so ignore them. */
-       box = mailbox_alloc(ns->list, "INBOX", MAILBOX_FLAG_IGNORE_ACLS);
+       box = mailbox_alloc(ns->list, "INBOX", MAILBOX_FLAG_IGNORE_ACLS |
+                           MAILBOX_FLAG_ATTRIBUTE_SESSION);
        mailbox_set_reason(box, "Server METADATA");
        imtrans = imap_metadata_transaction_begin(box);
        imtrans->server = TRUE;
index 48f2d6baf9a76f079a4bb5c60190026908ee2f86..6b66164599b61f5e661a154370389c62cfdeae5f 100644 (file)
@@ -76,6 +76,10 @@ enum mailbox_flags {
        /* Interpret name argument for mailbox_alloc_for_user() as a SPECIAL-USE
           flag. */
        MAILBOX_FLAG_SPECIAL_USE        = 0x8000,
+       /* Mailbox is opened for reading/writing attributes. This allows ACL
+          plugin to determine correctly whether the mailbox should be allowed
+          to be opened. */
+       MAILBOX_FLAG_ATTRIBUTE_SESSION  = 0x10000,
 };
 
 enum mailbox_feature {