]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-imap-metadata: Add imap_metadata_transaction_validated_only()
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Tue, 30 Jul 2019 08:04:44 +0000 (11:04 +0300)
committerVille Savolainen <ville.savolainen@dovecot.fi>
Tue, 10 Sep 2019 07:02:09 +0000 (10:02 +0300)
src/lib-imap-storage/imap-metadata.c
src/lib-imap-storage/imap-metadata.h

index 6b16138950339d8d0b7ece91d0a6cf1bbb0a4677..260684877d357af6d4ce1eec4efb9bece2d4a10f 100644 (file)
@@ -13,6 +13,7 @@ struct imap_metadata_transaction {
        char *error_string;
 
        bool server:1;
+       bool validated_only:1;
 };
 
 bool imap_metadata_verify_entry_name(const char *name,
@@ -99,6 +100,10 @@ imap_metadata_entry2key(struct imap_metadata_transaction *imtrans,
                i_assert((*key_r)[0] == '/');
                *key_r += 1;
        }
+
+       if (imtrans->validated_only)
+               *type_r |= MAIL_ATTRIBUTE_TYPE_FLAG_VALIDATED;
+
        if (str_begins(*key_r, MAILBOX_ATTRIBUTE_PREFIX_DOVECOT_PVT)) {
                /* Dovecot's internal attribute (mailbox or server).
                   don't allow accessing this. */
@@ -245,6 +250,12 @@ imap_metadata_transaction_begin_server(struct mail_user *user)
        return imtrans;
 }
 
+void imap_metadata_transaction_validated_only(struct imap_metadata_transaction *imtrans,
+                                             bool set)
+{
+       imtrans->validated_only = set;
+}
+
 static void
 imap_metadata_transaction_finish(struct imap_metadata_transaction **_imtrans)
 {
index 3de23b98ac1339237fce254d4824118a6ae22ff6..ef88e6128709ce4f15e0c231e36f8bcd02d94b25 100644 (file)
@@ -44,6 +44,10 @@ imap_metadata_transaction_begin_mailbox(struct mail_user *user,
 struct imap_metadata_transaction *
 imap_metadata_transaction_begin_server(struct mail_user *user);
 
+/* Allow access only to validated attributes within this transaction. */
+void imap_metadata_transaction_validated_only(struct imap_metadata_transaction *imtrans,
+                                             bool set);
+
 int imap_metadata_transaction_commit(
        struct imap_metadata_transaction **_imtrans,
        enum mail_error *error_code_r, const char **client_error_r);