]> 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>
Thu, 18 Jul 2019 10:47:47 +0000 (13:47 +0300)
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-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 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 d6adb6dcff503fd25f91d4f3e9b18d2f4ce1b513..e878732af855b19e6230fe5152c7c4b12206db7d 100644 (file)
@@ -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));
 }
index ddc10eb6f5ad99420d36e14753c02a8397bdb4ac..44ea3594ab37e2510796c2298ee392180c224b79 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));
 }