250 OK
RCPT TO
250 OK
-BDAT 329 LAST
-*data 329
+BDAT 331 LAST
+*data 331
250 OK
QUIT
225 OK
250 good mail cmd
RCPT TO
250 acceptable rcpt cmd
-BDAT 329 LAST
-*data 330
+BDAT 331 LAST
+*data 332
250 OK got that data
QUIT
225 OK quitting
250 OK
RCPT TO
250 OK
-BDAT 329 LAST
-*data 328
+BDAT 331 LAST
+*data 330
250 OK
QUIT
225 OK
250 OK
RCPT TO
250 OK
-BDAT 329 LAST
-*data 329
+BDAT 331 LAST
+*data 331
500 oops
QUIT
225 OK
250 OK
RCPT TO
250 OK
-BDAT 329 LAST
-*data 329
+BDAT 331 LAST
+*data 331
400 not right now
QUIT
225 OK
****
#
#
-###################################################
-#
-# Pipelined cases
-#
-# Basic short message
+# Server rejects RCPT. Client should not proceed to BDAT.
server PORT_S
220 Greetings
EHLO
250-Hello there
-250-PIPELINING
250 CHUNKING
MAIL FROM
+250 OK
RCPT TO
-BDAT 329 LAST
-*data 329
-250 OK mail
-250 OK rcpt
-250 OK bdat
+550 sorry, no
QUIT
-225 OK
-*eof
****
sudo exim -odf -bS
EHLO test
MAIL FROM:<sender@source.dom>
-RCPT TO:<p@test.ex>
+RCPT TO:<ebad@test.ex>
DATA
Subject: foo
QUIT
****
#
-# Error case: server wrongly expected more data, client gets timeout for data-ack
+#
+###################################################
+#
+# Pipelined cases
+#
+# Basic short message
server PORT_S
220 Greetings
EHLO
250 CHUNKING
MAIL FROM
RCPT TO
-BDAT 329 LAST
-*data 330
-250 good mail cmd
+BDAT 331 LAST
+*data 331
+250 OK mail
+250 OK rcpt
+250 OK bdat
+QUIT
+225 OK
+*eof
****
sudo exim -odf -bS
EHLO test
MAIL FROM:<sender@source.dom>
-RCPT TO:<q@test.ex>
+RCPT TO:<p@test.ex>
DATA
Subject: foo
QUIT
****
#
+# Error case: server wrongly expected more data, client gets timeout for data-ack
+# XXX This is a problem with data/quit pipelining. The succeeding SMTP command cannot
+# be distinguished from the data, by the errroneous server.
+# Of course, we could avoid such pipelining on the client side, when BDAT is used.
+# But - is this any worse than a server failing to spot the data-dot under DATA?
+# I think not; both are culpable, and there is only so much the client can do.
+#server PORT_S
+#220 Greetings
+#EHLO
+#250-Hello there
+#250-PIPELINING
+#250 CHUNKING
+#MAIL FROM
+#RCPT TO
+#BDAT 331 LAST
+#*data 332
+#250 good mail cmd
+#****
+#sudo exim -odf -bS
+#EHLO test
+#MAIL FROM:<sender@source.dom>
+#RCPT TO:<q@test.ex>
+#DATA
+#Subject: foo
+#
+#data
+#.
+#QUIT
+#****
+#
# Error case: server wrongly expected less data
# client get the data-ack, sends quit - but server
# sees a munged quit due to the outstanding data tail
250 CHUNKING
MAIL FROM
RCPT TO
-BDAT 329 LAST
-*data 328
+BDAT 331 LAST
+*data 330
250 OK mail
250 OK rcpt
250 OK bdat
250 CHUNKING
MAIL FROM
RCPT TO
-BDAT 329 LAST
-*data 329
+BDAT 331 LAST
+*data 331
550 unacceptable mail-from
550 rcpt ungood lacking mail-from
500 bdat ungood lacking mail-from
250 CHUNKING
MAIL FROM
RCPT TO
-BDAT 330 LAST
-*data 330
+BDAT 332 LAST
+*data 332
450 greylisted mail-from
550 rcpt ungood lacking mail-from
500 bdat ungood lacking mail-from
250 CHUNKING
MAIL FROM
RCPT TO
-BDAT 329 LAST
-*data 329
+BDAT 331 LAST
+*data 331
250 OK mail
550 no such recipient
500 oops bdat
250 CHUNKING
MAIL FROM
RCPT TO
-BDAT 329 LAST
-*data 329
+BDAT 331 LAST
+*data 331
250 OK mail
250 OK rcpt
500 oops bdat
250 CHUNKING
MAIL FROM
RCPT TO
-BDAT 329 LAST
-*data 329
+BDAT 331 LAST
+*data 331
250 OK mail
250 OK rcpt
400 not right now bdat