]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-smtp: smtp-params - Assume all capabilities are supported when adding parameter...
authorStephan Bosch <stephan.bosch@open-xchange.com>
Mon, 15 Jul 2019 19:50:11 +0000 (21:50 +0200)
committerTimo Sirainen <timo.sirainen@open-xchange.com>
Tue, 16 Jul 2019 07:15:51 +0000 (07:15 +0000)
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).

src/lib-lda/mail-deliver.c
src/lib-smtp/smtp-client-transaction.c
src/lib-smtp/smtp-params.c
src/lib-smtp/smtp-params.h
src/lib-smtp/smtp-server-recipient.c
src/lib-smtp/smtp-server-transaction.c

index 9102742833f3b4d858a79f841a7caa430af1a5ad..d1d3d499aa7ce16dd574d25948205a65a12c8feb 100644 (file)
@@ -332,8 +332,7 @@ void mail_deliver_init(struct mail_deliver_context *ctx,
                event_add_str(ctx->event, "rcpt_to",
                              smtp_address_encode(ctx->rcpt_to));
        }
-       smtp_params_rcpt_add_to_event(&ctx->rcpt_params,
-                                     SMTP_CAPABILITY__ORCPT, ctx->event);
+       smtp_params_rcpt_add_to_event(&ctx->rcpt_params, ctx->event);
 }
 
 void mail_deliver_deinit(struct mail_deliver_context *ctx)
index 29bd52d6845a0faae1ed0a85e6fa1a0c5e275ab5..39b9b353768c12d98398cf58315003b54d2b268f 100644 (file)
@@ -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 =
index be8037a0738fe460b3f9fc32c05c060b6aaad49a..b76218910f5005c39be58b1e550d8fc5718b3db2 100644 (file)
@@ -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);
 }
index b9eeb4a4743cbd2df1f3d2c03b33fece2880e9dc..bda8785e15ceed490e3b3af3832f379e4f68d59f 100644 (file)
@@ -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
index b343eb7302ac5faff4cb48d380f29666a3e8e769..2d4543fb2bb8632af5f0f8ef538c1ec9dc21e474 100644 (file)
 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));
 }
index afdd69bbde6605e30f56bb29a1e38d83ef5e059f..e3cd0e77ca1d446c594c8783aaef7797ef129e29 100644 (file)
 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));
 }