Fix reception of (quoted) local-parts with embedded spaces. Bug 2025
authorJeremy Harris <jgh146exb@wizmail.org>
Tue, 24 Jan 2017 18:17:10 +0000 (18:17 +0000)
committerJeremy Harris <jgh146exb@wizmail.org>
Tue, 24 Jan 2017 18:17:10 +0000 (18:17 +0000)
src/src/smtp_in.c
test/confs/0579 [new file with mode: 0644]
test/scripts/0000-Basic/0579 [new file with mode: 0644]

index 9c647efda8db520f56f0d46499497c376bfbde55..8de12156d911901d80bc82d6774b74f03cfb7907 100644 (file)
@@ -1674,7 +1674,13 @@ uschar *n;
 uschar *v = smtp_cmd_data + Ustrlen(smtp_cmd_data) - 1;
 while (isspace(*v)) v--;
 v[1] = 0;
-while (v > smtp_cmd_data && *v != '=' && !isspace(*v)) v--;
+while (v > smtp_cmd_data && *v != '=' && !isspace(*v))
+  {
+  /* Take care to not stop at a space embedded in a quoted local-part */
+
+  if (*v == '"') do v--; while (*v != '"' && v > smtp_cmd_data+1);
+  v--;
+  }
 
 n = v;
 if (*v == '=')
diff --git a/test/confs/0579 b/test/confs/0579
new file mode 100644 (file)
index 0000000..5e61752
--- /dev/null
@@ -0,0 +1,31 @@
+# Exim test configuration 0579
+
+.include DIR/aux-var/std_conf_prefix
+
+primary_hostname = myhost.test.ex
+
+# ----- Main settings -----
+
+domainlist local_domains = test.ex
+log_selector = +received_recipients
+
+acl_smtp_rcpt = accept logwrite=cmd '$smtp_command'
+
+# ------ ACLs ------
+
+begin acl
+
+# ------ Routers ------
+
+begin routers
+
+r1:
+  driver = redirect
+  data = :blackhole:
+
+
+# ------ Transports ------
+
+begin transports
+
+# End
diff --git a/test/scripts/0000-Basic/0579 b/test/scripts/0000-Basic/0579
new file mode 100644 (file)
index 0000000..7a5f3ff
--- /dev/null
@@ -0,0 +1,28 @@
+# local-part with space, esmtp reception
+#
+exim -DSERVER=server -bd -oX PORT_D
+****
+#
+client 127.0.0.1 PORT_D
+??? 220
+EHLO test
+??? 250-
+??? 250-
+??? 250-
+??? 250-
+??? 250 HELP
+MAIL FROM:<>
+??? 250
+RCPT TO:<"name with spaces"@test.ex>
+??? 250
+DATA
+??? 354
+Subject: test
+
+body
+.
+??? 250
+QUIT
+??? 221
+****
+killdaemon