changeset 12399:97e60c1a4f8d

lmtp: Don't allow mixed proxy/non-proxy RCPT TO destinations. Although the code attempts to handle this case already, the DATA replies aren't sent in correct order.
author Timo Sirainen <tss@iki.fi>
date Mon, 08 Nov 2010 18:38:31 +0000
parents 748e613fd73a
children d0d3aca1c958
files src/lmtp/commands.c
diffstat 1 files changed, 15 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/lmtp/commands.c	Mon Nov 08 18:37:25 2010 +0000
+++ b/src/lmtp/commands.c	Mon Nov 08 18:38:31 2010 +0000
@@ -256,9 +256,16 @@
 		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 @@
 			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;