From 013a4ebb14b24e2bc5178b36b13774572fb3c092 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Mon, 24 Apr 2017 18:51:53 +0300 Subject: [PATCH] imap: Use client_add_capability() for adding all dynamic capabilities --- src/imap/imap-client.c | 31 +++++++++++++------------------ 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/src/imap/imap-client.c b/src/imap/imap-client.c index 26fc621041..4131abea13 100644 --- a/src/imap/imap-client.c +++ b/src/imap/imap-client.c @@ -92,7 +92,6 @@ struct client *client_create(int fd_in, int fd_out, const char *session_id, struct client *client; const char *ident; pool_t pool; - bool explicit_capability = FALSE; /* always use nonblocking I/O */ net_set_nonblock(fd_in, TRUE); @@ -143,31 +142,28 @@ struct client *client_create(int fd_in, int fd_out, const char *session_id, if (*set->imap_capability == '\0') str_append(client->capability_string, CAPABILITY_STRING); else if (*set->imap_capability != '+') { - explicit_capability = TRUE; str_append(client->capability_string, set->imap_capability); } else { str_append(client->capability_string, CAPABILITY_STRING); str_append_c(client->capability_string, ' '); str_append(client->capability_string, set->imap_capability + 1); } - if (!explicit_capability) { - if (client->set->imap_literal_minus) - str_append(client->capability_string, " LITERAL-"); - else - str_append(client->capability_string, " LITERAL+"); - } - if (user->fuzzy_search && !explicit_capability) { + if (client->set->imap_literal_minus) + client_add_capability(client, "LITERAL-"); + else + client_add_capability(client, "LITERAL+"); + if (user->fuzzy_search) { /* Enable FUZZY capability only when it actually has a chance of working */ - str_append(client->capability_string, " SEARCH=FUZZY"); + client_add_capability(client, "SEARCH=FUZZY"); } mail_set = mail_user_set_get_storage_set(user); - if (mail_set->mailbox_list_index && !explicit_capability) { + if (mail_set->mailbox_list_index) { /* NOTIFY is enabled only when mailbox list indexes are enabled, although even that doesn't necessarily guarantee it always */ - str_append(client->capability_string, " NOTIFY"); + client_add_capability(client, "NOTIFY"); } if (*set->imap_urlauth_host != '\0' && @@ -175,18 +171,17 @@ struct client *client_create(int fd_in, int fd_out, const char *session_id, /* Enable URLAUTH capability only when dict is configured correctly */ client_init_urlauth(client); - if (!explicit_capability) - str_append(client->capability_string, " URLAUTH URLAUTH=BINARY"); + client_add_capability(client, "URLAUTH"); + client_add_capability(client, "URLAUTH=BINARY"); } if (set->imap_metadata && *mail_set->mail_attribute_dict != '\0') { client->imap_metadata_enabled = TRUE; - if (!explicit_capability) - str_append(client->capability_string, " METADATA"); + client_add_capability(client, "METADATA"); } - if (!explicit_capability && user_has_special_use_mailboxes(user)) { + if (user_has_special_use_mailboxes(user)) { /* Advertise SPECIAL-USE only if there are actually some SPECIAL-USE flags in mailbox configuration. */ - str_append(client->capability_string, " SPECIAL-USE"); + client_add_capability(client, "SPECIAL-USE"); } ident = mail_user_get_anvil_userip_ident(client->user); -- 2.47.3