"CAPABILITY list is missing IMAP4REV1");
return -1;
}
- 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 {
+ conn->capabilities &= ENUM_NEGATE(conn->client->set->parsed_disabled_capabilities);
#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);
+ 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;
}
{ "fetch-empty-is-expunged", IMAPC_FEATURE_FETCH_EMPTY_IS_EXPUNGED },
{ "no-msn-updates", IMAPC_FEATURE_NO_MSN_UPDATES },
{ "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 }
};
return -1;
continue;
}
+ if (str_begins(*str, "no-", &value)) {
+ enum imapc_capability capa =
+ imapc_capability_lookup(value);
+ if (capa != 0) {
+ set->parsed_disabled_capabilities |= capa;
+ continue;
+ }
+ }
if (list->name == NULL) {
*error_r = t_strdup_printf("imapc_features: "
"Unknown feature: %s", *str);
IMAPC_FEATURE_FETCH_EMPTY_IS_EXPUNGED = 0x4000,
IMAPC_FEATURE_NO_MSN_UPDATES = 0x8000,
IMAPC_FEATURE_NO_ACL = 0x10000,
- IMAPC_FEATURE_NO_METADATA = 0x20000,
- IMAPC_FEATURE_NO_QRESYNC = 0x40000,
- IMAPC_FEATURE_NO_IMAP4REV2 = 0x80000,
};
enum imapc_capability {
const char *pop3_deleted_flag;
enum imapc_features parsed_features;
+ enum imapc_capability parsed_disabled_capabilities;
+
unsigned int throttle_init_msecs;
unsigned int throttle_max_msecs;
unsigned int throttle_shrink_min_msecs;
extern const struct setting_parser_info imapc_setting_parser_info;
+/* <settings checks> */
enum imapc_capability imapc_capability_lookup(const char *str);
+/* </settings checks> */
#endif
/* If we got here then we want to access metadata in the imapc backend.
Check if that is possible. */
struct imapc_mailbox *mbox = IMAPC_MAILBOX(box);
- enum imapc_capability capabilities = 0;
-
- if (!IMAPC_HAS_FEATURE(mbox->storage, IMAPC_FEATURE_NO_METADATA)) {
- if (mbox->capabilities == 0 &&
- imapc_client_get_capabilities(mbox->storage->client->client,
- &mbox->capabilities) < 0)
- return HANDLE_ERROR;
- capabilities = mbox->capabilities;
- }
- if (!HAS_ALL_BITS(capabilities, IMAPC_CAPABILITY_METADATA)) {
+ if (mbox->capabilities == 0 &&
+ imapc_client_get_capabilities(mbox->storage->client->client,
+ &mbox->capabilities) < 0)
+ return HANDLE_ERROR;
+
+ if (!HAS_ALL_BITS(mbox->capabilities, IMAPC_CAPABILITY_METADATA)) {
mail_storage_set_error(box->storage, MAIL_ERROR_UNAVAILABLE,
"Can't access metadata on imapc backend");
return HANDLE_UNAVAILABLE;