From: Stephan Bosch Date: Mon, 15 Jul 2019 19:50:11 +0000 (+0200) Subject: lib-smtp: smtp-params - Assume all capabilities are supported when adding parameter... X-Git-Tag: 2.3.7.1~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=40844e85fcdfba93b9a9224ed1bc0ae62bde5d14;p=thirdparty%2Fdovecot%2Fcore.git lib-smtp: smtp-params - Assume all capabilities are supported when adding parameter event fields. The actual capabilities are not really needed, since any assigned field is relevent for event processing, whether the remote end will accept it or not. This also fixes an assert failure occuring for proxied connections. Since the server and client (proxy) connections can have different capabilities and since the client connection does not have a proper capability list available in the beginning of the handshake, the event created for a client transaction would cause an assert failure when parameters were assigned that did not match the capabilities (none). --- diff --git a/src/lib-smtp/smtp-client-transaction.c b/src/lib-smtp/smtp-client-transaction.c index 29bd52d684..39b9b35376 100644 --- a/src/lib-smtp/smtp-client-transaction.c +++ b/src/lib-smtp/smtp-client-transaction.c @@ -138,14 +138,12 @@ static void smtp_client_transaction_rcpt_update_event( struct smtp_client_transaction_rcpt *rcpt) { - struct smtp_client_connection *conn = rcpt->trans->conn; const char *to = smtp_address_encode(rcpt->rcpt_to); event_set_append_log_prefix(rcpt->event, t_strdup_printf("rcpt <%s>: ", to)); event_add_str(rcpt->event, "rcpt_to", to); - smtp_params_rcpt_add_to_event(&rcpt->rcpt_params, conn->caps.standard, - rcpt->event); + smtp_params_rcpt_add_to_event(&rcpt->rcpt_params, rcpt->event); } static struct smtp_client_transaction_rcpt * @@ -828,7 +826,6 @@ static void smtp_client_transaction_mail_cb(const struct smtp_reply *reply, struct smtp_client_transaction *trans) { - struct smtp_client_connection *conn = trans->conn; struct smtp_client_transaction_mail *mail = trans->mail_head; bool success = smtp_reply_is_success(reply); @@ -880,7 +877,6 @@ smtp_client_transaction_mail_cb(const struct smtp_reply *reply, event_add_str(trans->event, "mail_from", smtp_address_encode(mail->mail_from)); smtp_params_mail_add_to_event(&mail->mail_params, - conn->caps.standard, trans->event); } @@ -945,7 +941,6 @@ void smtp_client_transaction_start( event_add_str(trans->event, "mail_from", smtp_address_encode(mail->mail_from)); smtp_params_mail_add_to_event(&mail->mail_params, - conn->caps.standard, trans->event); struct event_passthrough *e = diff --git a/src/lib-smtp/smtp-params.c b/src/lib-smtp/smtp-params.c index be8037a073..b76218910f 100644 --- a/src/lib-smtp/smtp-params.c +++ b/src/lib-smtp/smtp-params.c @@ -656,12 +656,9 @@ smtp_params_mail_get_extra(const struct smtp_params_mail *params, static void smtp_params_mail_add_auth_to_event(const struct smtp_params_mail *params, - enum smtp_capability caps, struct event *event) { /* AUTH: RFC 4954 */ - if ((caps & SMTP_CAPABILITY_AUTH) == 0) - return; if (params->auth == NULL) return; @@ -671,7 +668,6 @@ smtp_params_mail_add_auth_to_event(const struct smtp_params_mail *params, static void smtp_params_mail_add_body_to_event(const struct smtp_params_mail *params, - enum smtp_capability caps, struct event *event) { /* BODY: RFC 6152 */ @@ -682,12 +678,9 @@ smtp_params_mail_add_body_to_event(const struct smtp_params_mail *params, event_add_str(event, "mail_param_body", "7BIT"); break; case SMTP_PARAM_MAIL_BODY_TYPE_8BITMIME: - i_assert((caps & SMTP_CAPABILITY_8BITMIME) != 0); event_add_str(event, "mail_param_body", "8BITMIME"); break; case SMTP_PARAM_MAIL_BODY_TYPE_BINARYMIME: - i_assert((caps & SMTP_CAPABILITY_BINARYMIME) != 0 && - (caps & SMTP_CAPABILITY_CHUNKING) != 0); event_add_str(event, "mail_param_body", "BINARYMIME"); break; case SMTP_PARAM_MAIL_BODY_TYPE_EXTENSION: @@ -700,12 +693,9 @@ smtp_params_mail_add_body_to_event(const struct smtp_params_mail *params, static void smtp_params_mail_add_envid_to_event(const struct smtp_params_mail *params, - enum smtp_capability caps, struct event *event) { /* ENVID: RFC 3461, Section 4.4 */ - if ((caps & SMTP_CAPABILITY_DSN) == 0) - return; if (params->envid == NULL) return; @@ -714,12 +704,9 @@ smtp_params_mail_add_envid_to_event(const struct smtp_params_mail *params, static void smtp_params_mail_add_ret_to_event(const struct smtp_params_mail *params, - enum smtp_capability caps, struct event *event) { /* RET: RFC 3461, Section 4.3 */ - if ((caps & SMTP_CAPABILITY_DSN) == 0) - return; switch (params->ret) { case SMTP_PARAM_MAIL_RET_UNSPECIFIED: break; @@ -736,12 +723,9 @@ smtp_params_mail_add_ret_to_event(const struct smtp_params_mail *params, static void smtp_params_mail_add_size_to_event(const struct smtp_params_mail *params, - enum smtp_capability caps, struct event *event) { /* SIZE: RFC 1870 */ - if ((caps & SMTP_CAPABILITY_SIZE) == 0) - return; if (params->size == 0) return; @@ -749,14 +733,13 @@ smtp_params_mail_add_size_to_event(const struct smtp_params_mail *params, } void smtp_params_mail_add_to_event(const struct smtp_params_mail *params, - enum smtp_capability caps, struct event *event) { - smtp_params_mail_add_auth_to_event(params, caps, event); - smtp_params_mail_add_body_to_event(params, caps, event); - smtp_params_mail_add_envid_to_event(params, caps, event); - smtp_params_mail_add_ret_to_event(params, caps, event); - smtp_params_mail_add_size_to_event(params, caps, event); + smtp_params_mail_add_auth_to_event(params, event); + smtp_params_mail_add_body_to_event(params, event); + smtp_params_mail_add_envid_to_event(params, event); + smtp_params_mail_add_ret_to_event(params, event); + smtp_params_mail_add_size_to_event(params, event); } /* @@ -1257,12 +1240,9 @@ bool smtp_params_rcpt_equals(const struct smtp_params_rcpt *params1, static void smtp_params_rcpt_add_notify_to_event(const struct smtp_params_rcpt *params, - enum smtp_capability caps, struct event *event) { /* NOTIFY: RFC 3461, Section 4.1 */ - if ((caps & SMTP_CAPABILITY_DSN) == 0) - return; if (params->notify == SMTP_PARAM_RCPT_NOTIFY_UNSPECIFIED) return; if ((params->notify & SMTP_PARAM_RCPT_NOTIFY_NEVER) != 0) { @@ -1289,15 +1269,11 @@ smtp_params_rcpt_add_notify_to_event(const struct smtp_params_rcpt *params, static void smtp_params_rcpt_add_orcpt_to_event(const struct smtp_params_rcpt *params, - enum smtp_capability caps, struct event *event) { /* ORCPT: RFC 3461, Section 4.2 */ if (params->orcpt.addr_type == NULL) return; - if ((caps & SMTP_CAPABILITY_DSN) == 0 && - (caps & SMTP_CAPABILITY__ORCPT) == 0) - return; event_add_str(event, "rcpt_param_orcpt_type", params->orcpt.addr_type); @@ -1312,9 +1288,8 @@ smtp_params_rcpt_add_orcpt_to_event(const struct smtp_params_rcpt *params, } void smtp_params_rcpt_add_to_event(const struct smtp_params_rcpt *params, - enum smtp_capability caps, struct event *event) { - smtp_params_rcpt_add_notify_to_event(params, caps, event); - smtp_params_rcpt_add_orcpt_to_event(params, caps, event); + smtp_params_rcpt_add_notify_to_event(params, event); + smtp_params_rcpt_add_orcpt_to_event(params, event); } diff --git a/src/lib-smtp/smtp-params.h b/src/lib-smtp/smtp-params.h index b9eeb4a474..bda8785e15 100644 --- a/src/lib-smtp/smtp-params.h +++ b/src/lib-smtp/smtp-params.h @@ -124,7 +124,6 @@ smtp_params_mail_get_extra(const struct smtp_params_mail *params, /* events */ void smtp_params_mail_add_to_event(const struct smtp_params_mail *params, - enum smtp_capability caps, struct event *event); /* @@ -171,7 +170,6 @@ bool smtp_params_rcpt_equals(const struct smtp_params_rcpt *params1, /* events */ void smtp_params_rcpt_add_to_event(const struct smtp_params_rcpt *params, - enum smtp_capability caps, struct event *event); #endif diff --git a/src/lib-smtp/smtp-server-recipient.c b/src/lib-smtp/smtp-server-recipient.c index d6adb6dcff..e878732af8 100644 --- a/src/lib-smtp/smtp-server-recipient.c +++ b/src/lib-smtp/smtp-server-recipient.c @@ -13,13 +13,11 @@ smtp_server_recipient_call_hooks(struct smtp_server_recipient **_rcpt, static void smtp_server_recipient_update_event(struct smtp_server_recipient_private *prcpt) { - struct smtp_server_connection *conn = prcpt->rcpt.conn; struct event *event = prcpt->rcpt.event; const char *path = smtp_address_encode(prcpt->rcpt.path); event_add_str(event, "rcpt_to", path); - smtp_params_rcpt_add_to_event(&prcpt->rcpt.params, - conn->set.capabilities, event); + smtp_params_rcpt_add_to_event(&prcpt->rcpt.params, event); event_set_append_log_prefix(event, t_strdup_printf("rcpt %s: ", path)); } diff --git a/src/lib-smtp/smtp-server-transaction.c b/src/lib-smtp/smtp-server-transaction.c index ddc10eb6f5..44ea3594ab 100644 --- a/src/lib-smtp/smtp-server-transaction.c +++ b/src/lib-smtp/smtp-server-transaction.c @@ -15,14 +15,12 @@ static void smtp_server_transaction_update_event(struct smtp_server_transaction *trans) { - struct smtp_server_connection *conn = trans->conn; struct event *event = trans->event; event_add_str(event, "transaction_id", trans->id); event_add_str(event, "mail_from", smtp_address_encode(trans->mail_from)); - smtp_params_mail_add_to_event(&trans->params, conn->set.capabilities, - event); + smtp_params_mail_add_to_event(&trans->params, event); event_set_append_log_prefix(event, t_strdup_printf("trans %s: ", trans->id)); }