From: Timo Sirainen Date: Wed, 15 Jan 2020 13:35:26 +0000 (+0200) Subject: lib-storage, imap, doveadm: Add and use MAILBOX_FLAG_ATTRIBUTE_SESSION X-Git-Tag: 2.3.10~125 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=69024d3b0f4ec850723ed4874ff88c481511f5ca;p=thirdparty%2Fdovecot%2Fcore.git lib-storage, imap, doveadm: Add and use MAILBOX_FLAG_ATTRIBUTE_SESSION --- diff --git a/src/doveadm/doveadm-mail-mailbox-metadata.c b/src/doveadm/doveadm-mail-mailbox-metadata.c index ec5b6023a5..2fad6e97de 100644 --- a/src/doveadm/doveadm-mail-mailbox-metadata.c +++ b/src/doveadm/doveadm-mail-mailbox-metadata.c @@ -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); diff --git a/src/imap/cmd-setmetadata.c b/src/imap/cmd-setmetadata.c index 841507c815..6ef287cee1 100644 --- a/src/imap/cmd-setmetadata.c +++ b/src/imap/cmd-setmetadata.c @@ -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); diff --git a/src/lib-imap-storage/imap-metadata.c b/src/lib-imap-storage/imap-metadata.c index 0674bada0f..34b5064312 100644 --- a/src/lib-imap-storage/imap-metadata.c +++ b/src/lib-imap-storage/imap-metadata.c @@ -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; diff --git a/src/lib-storage/mail-storage.h b/src/lib-storage/mail-storage.h index 48f2d6baf9..6b66164599 100644 --- a/src/lib-storage/mail-storage.h +++ b/src/lib-storage/mail-storage.h @@ -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 {