static void client_send_capabilities(struct client *client) { struct managesieve_client *msieve_client = (struct managesieve_client *) client; const char *saslcap; T_BEGIN { saslcap = client_authenticate_get_capabilities(client); /* Default capabilities */ client_send_raw(client, t_strconcat("\"IMPLEMENTATION\" \"", msieve_client->set->managesieve_implementation_string, "\"\r\n", NULL)); client_send_raw(client, t_strconcat("\"SIEVE\" \"", msieve_client->set->managesieve_sieve_capability, "\"\r\n", NULL)); if ( msieve_client->set->managesieve_notify_capability != NULL ) client_send_raw(client, t_strconcat("\"NOTIFY\" \"", msieve_client->set->managesieve_notify_capability, "\"\r\n", NULL)); client_send_raw (client, t_strconcat("\"SASL\" \"", saslcap, "\"\r\n", NULL)); /* STARTTLS */ if (ssl_initialized && !client->tls) client_send_raw(client, "\"STARTTLS\"\r\n" ); /* Protocol version */ client_send_raw(client, "\"VERSION\" \"1.0\"\r\n"); /* XCLIENT */ if (client->trusted) client_send_raw(client, "\"XCLIENT\"\r\n"); } T_END; }
static const char *get_capability(struct client *client) { struct imap_client *imap_client = (struct imap_client *)client; string_t *cap_str = t_str_new(256); bool explicit_capability = FALSE; if (*imap_client->set->imap_capability == '\0') str_append(cap_str, CAPABILITY_BANNER_STRING); else if (*imap_client->set->imap_capability != '+') { explicit_capability = TRUE; str_append(cap_str, imap_client->set->imap_capability); } else { str_append(cap_str, CAPABILITY_BANNER_STRING); str_append_c(cap_str, ' '); str_append(cap_str, imap_client->set->imap_capability + 1); } if (!explicit_capability) { if (imap_client->set->imap_literal_minus) str_append(cap_str, " LITERAL-"); else str_append(cap_str, " LITERAL+"); } if (client_is_tls_enabled(client) && !client->tls) str_append(cap_str, " STARTTLS"); if (is_login_cmd_disabled(client)) str_append(cap_str, " LOGINDISABLED"); client_authenticate_get_capabilities(client, cap_str); return str_c(cap_str); }