]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lmtp: Don't allow mixed proxy/non-proxy RCPT TO destinations.
authorTimo Sirainen <tss@iki.fi>
Mon, 8 Nov 2010 18:38:31 +0000 (18:38 +0000)
committerTimo Sirainen <tss@iki.fi>
Mon, 8 Nov 2010 18:38:31 +0000 (18:38 +0000)
Although the code attempts to handle this case already, the DATA replies
aren't sent in correct order.

src/lmtp/commands.c

index a9c841d542027f457a1cf61f82595f1fdd6dc11d..ccc376c2cdd7b782265a165acb3bab8225de4372 100644 (file)
@@ -256,9 +256,16 @@ static bool client_proxy_rcpt(struct client *client, const char *address,
                client_send_line(client, "554 5.4.6 <%s> "
                                 "Proxying loops to itself", address);
                pool_unref(&pool);
-               return FALSE;
+               return TRUE;
        }
 
+       if (array_count(&client->state.rcpt_to) != 0) {
+               client_send_line(client, "451 4.3.0 <%s> "
+                       "Can't handle mixed proxy/non-proxy destinations",
+                       address);
+               pool_unref(&pool);
+               return TRUE;
+       }
        if (client->proxy == NULL) {
                client->proxy = lmtp_proxy_init(client->set->hostname,
                                                dns_client_socket_path,
@@ -375,6 +382,13 @@ int cmd_rcpt(struct client *client, const char *args)
                        return 0;
        }
 
+       if (client->proxy != NULL) {
+               client_send_line(client, "451 4.3.0 <%s> "
+                       "Can't handle mixed proxy/non-proxy destinations",
+                       address);
+               return 0;
+       }
+
        memset(&input, 0, sizeof(input));
        input.module = input.service = "lmtp";
        input.username = username;