From: Markus Valentin Date: Tue, 18 Mar 2025 10:29:23 +0000 (+0100) Subject: lib-imap-client: Add IMAP4rev2 capability detection support X-Git-Tag: 2.4.2~884 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=29d58002db00ab69d86ee32399893beabf52697d;p=thirdparty%2Fdovecot%2Fcore.git lib-imap-client: Add IMAP4rev2 capability detection support --- diff --git a/src/lib-imap-client/imapc-client.c b/src/lib-imap-client/imapc-client.c index a33a1d625b..0f39961d4e 100644 --- a/src/lib-imap-client/imapc-client.c +++ b/src/lib-imap-client/imapc-client.c @@ -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 } }; diff --git a/src/lib-imap-client/imapc-client.h b/src/lib-imap-client/imapc-client.h index 2fcd6455eb..a8517ea0be 100644 --- a/src/lib-imap-client/imapc-client.h +++ b/src/lib-imap-client/imapc-client.h @@ -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; diff --git a/src/lib-imap-client/imapc-connection.c b/src/lib-imap-client/imapc-connection.c index e770944b5a..6467e01732 100644 --- a/src/lib-imap-client/imapc-connection.c +++ b/src/lib-imap-client/imapc-connection.c @@ -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; } diff --git a/src/lib-imap-client/imapc-settings.c b/src/lib-imap-client/imapc-settings.c index 544b3e6ee6..74db173453 100644 --- a/src/lib-imap-client/imapc-settings.c +++ b/src/lib-imap-client/imapc-settings.c @@ -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 } }; diff --git a/src/lib-imap-client/imapc-settings.h b/src/lib-imap-client/imapc-settings.h index e3f3c70695..352217d0c5 100644 --- a/src/lib-imap-client/imapc-settings.h +++ b/src/lib-imap-client/imapc-settings.h @@ -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, }; /* */