]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
imapc, lib-imap-client: Add imapc_features=no-qresync to disable QRESYNC
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Mon, 22 Apr 2024 09:01:07 +0000 (12:01 +0300)
committerTimo Sirainen <timo.sirainen@open-xchange.com>
Fri, 3 May 2024 07:35:58 +0000 (10:35 +0300)
This can be used to silently work around the Zimbra bug of not sending
[CLOSED] imap-resp-code.

src/lib-imap-client/imapc-client.c
src/lib-imap-client/imapc-client.h
src/lib-imap-client/imapc-connection.c
src/lib-storage/index/imapc/imapc-settings.c
src/lib-storage/index/imapc/imapc-settings.h
src/lib-storage/index/imapc/imapc-storage.c

index 5806a80c500915962afab5140162586bbcc84da2..18d85af97a73c0d00a13b0ef020bf7fea4ffe88e 100644 (file)
@@ -73,6 +73,7 @@ imapc_client_init(const struct imapc_client_settings *set,
        client->set.sasl_mechanisms = p_strdup(pool, set->sasl_mechanisms);
        client->set.session_id_prefix = p_strdup(pool, set->session_id_prefix);
        client->set.use_proxyauth = set->use_proxyauth;
+       client->set.no_qresync = set->no_qresync;
        client->set.dns_client_socket_path =
                p_strdup(pool, set->dns_client_socket_path);
        client->set.temp_path_prefix =
index 5c81be616c5e33a6e98673f36bfaef0a88fdb7ac..4feac18ed2044bc67ccdfce20849a711e5e875e8 100644 (file)
@@ -87,6 +87,7 @@ struct imapc_client_settings {
           order). The default is to use only LOGIN command or SASL PLAIN. */
        const char *sasl_mechanisms;
        bool use_proxyauth; /* Use Sun/Oracle PROXYAUTH command */
+       bool no_qresync; /* Don't use QRESYNC extension */
        unsigned int max_idle_time;
        /* If ID capability is advertised, send a unique "x-session-ext-id",
           which begins with this prefix. */
index 30e8afef025474278ad29b8d2af5b04282cab620..4c3b6f3985d65f82c4b1e6b2925f147c84e7aa3a 100644 (file)
@@ -787,6 +787,8 @@ imapc_connection_parse_capability(struct imapc_connection *conn,
                        "CAPABILITY list is missing IMAP4REV1");
                return -1;
        }
+       if (conn->client->set.no_qresync)
+               conn->capabilities &= ENUM_NEGATE(IMAPC_CAPABILITY_QRESYNC);
        return 0;
 }
 
index 6183f8f21d835d5eca658d6932bab9320d0b06fe..e5753be23be36e56fa5cc5305c94fca7295526e3 100644 (file)
@@ -106,6 +106,7 @@ static const struct imapc_feature_list imapc_feature_list[] = {
        { "fetch-empty-is-expunged", IMAPC_FEATURE_FETCH_EMPTY_IS_EXPUNGED },
        { "no-msn-updates", IMAPC_FEATURE_NO_MSN_UPDATES },
        { "acl", IMAPC_FEATURE_ACL },
+       { "no-qresync", IMAPC_FEATURE_NO_QRESYNC },
        { NULL, 0 }
 };
 
index e4c1da1740b7a0077db357c8d800f11a0ec6d296..09ca6ae8dba18f755be7b9174b1e558ad93414a6 100644 (file)
@@ -22,6 +22,7 @@ enum imapc_features {
        IMAPC_FEATURE_FETCH_EMPTY_IS_EXPUNGED   = 0x4000,
        IMAPC_FEATURE_NO_MSN_UPDATES            = 0x8000,
        IMAPC_FEATURE_ACL                       = 0x10000,
+       IMAPC_FEATURE_NO_QRESYNC                = 0x40000,
 };
 /* </settings checks> */
 
index 2c9fcdfa4d23ecba8d14377c0b53ab64d39178c8..ddc3e08d93680b41233dfdcc5b7e8c48bf1b9f3b 100644 (file)
@@ -334,6 +334,7 @@ int imapc_storage_client_create(struct mail_namespace *ns,
        }
        set.sasl_mechanisms = imapc_set->imapc_sasl_mechanisms;
        set.use_proxyauth = (imapc_set->parsed_features & IMAPC_FEATURE_PROXYAUTH) != 0;
+       set.no_qresync = (imapc_set->parsed_features & IMAPC_FEATURE_NO_QRESYNC) != 0;
        set.cmd_timeout_msecs = imapc_set->imapc_cmd_timeout * 1000;
        set.connect_retry_count = imapc_set->imapc_connection_retry_count;
        set.connect_retry_interval_msecs = imapc_set->imapc_connection_retry_interval;