]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-imap-client: Add IMAP4rev2 capability detection support
authorMarkus Valentin <markus.valentin@open-xchange.com>
Tue, 18 Mar 2025 10:29:23 +0000 (11:29 +0100)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Fri, 21 Mar 2025 12:45:30 +0000 (12:45 +0000)
src/lib-imap-client/imapc-client.c
src/lib-imap-client/imapc-client.h
src/lib-imap-client/imapc-connection.c
src/lib-imap-client/imapc-settings.c
src/lib-imap-client/imapc-settings.h

index a33a1d625b25a36dbad7de88694e456581a53528..0f39961d4e950505cd344ac0e102b476e3359a37 100644 (file)
@@ -37,6 +37,7 @@ const struct imapc_capability_name imapc_capability_names[] = {
        { "METADATA", IMAPC_CAPABILITY_METADATA },
 
        { "IMAP4REV1", IMAPC_CAPABILITY_IMAP4REV1 },
+       { "IMAP4REV2", IMAPC_CAPABILITY_IMAP4REV2 },
        { NULL, 0 }
 };
 
index 2fcd6455eb192093949e60ae662c707bc9b5de75..a8517ea0be5cb5449cd2fa2e92890bbba22ce280 100644 (file)
@@ -35,7 +35,8 @@ enum imapc_capability {
        IMAPC_CAPABILITY_SAVEDATE       = 0x8000,
        IMAPC_CAPABILITY_METADATA       = 0x10000,
 
-       IMAPC_CAPABILITY_IMAP4REV1      = 0x40000000
+       IMAPC_CAPABILITY_IMAP4REV2      = 0x20000000,
+       IMAPC_CAPABILITY_IMAP4REV1      = 0x40000000,
 };
 struct imapc_capability_name {
        const char *name;
index e770944b5acaa07f2a422aeecfdd1a5245772c8d..6467e01732e4f2d9276ec5f5d38434c438469450 100644 (file)
@@ -785,6 +785,16 @@ imapc_connection_parse_capability(struct imapc_connection *conn,
        }
        if ((conn->client->set->parsed_features & IMAPC_FEATURE_NO_QRESYNC) != 0)
                conn->capabilities &= ENUM_NEGATE(IMAPC_CAPABILITY_QRESYNC);
+       if ((conn->client->set->parsed_features & IMAPC_FEATURE_NO_IMAP4REV2) != 0)
+               conn->capabilities &= ENUM_NEGATE(IMAPC_CAPABILITY_IMAP4REV2);
+       else {
+#ifndef EXPERIMENTAL_IMAP4REV2
+               e_debug(conn->event,
+                       "Disable IMAP4REV2 capability, as it is not supported with this build");
+               conn->capabilities &= ENUM_NEGATE(IMAPC_CAPABILITY_IMAP4REV2);
+#endif
+       }
+
        return 0;
 }
 
index 544b3e6ee67b72e70e3f7119aaa8444a84942286..74db173453f05d67190ed76da3b284c0628dfe49 100644 (file)
@@ -122,6 +122,7 @@ static const struct imapc_feature_list imapc_feature_list[] = {
        { "no-acl", IMAPC_FEATURE_NO_ACL },
        { "no-metadata", IMAPC_FEATURE_NO_METADATA },
        { "no-qresync", IMAPC_FEATURE_NO_QRESYNC },
+       { "no-imap4rev2", IMAPC_FEATURE_NO_IMAP4REV2 },
        { NULL, 0 }
 };
 
index e3f3c70695cd6092eafd392254538339e955103e..352217d0c54e785ba74afb344e482aeeb94772ca 100644 (file)
@@ -27,6 +27,7 @@ enum imapc_features {
        IMAPC_FEATURE_NO_ACL                    = 0x10000,
        IMAPC_FEATURE_NO_METADATA               = 0x20000,
        IMAPC_FEATURE_NO_QRESYNC                = 0x40000,
+       IMAPC_FEATURE_NO_IMAP4REV2              = 0x80000,
 };
 /* </settings checks> */