Logging: server pipelining offer but no uptake
authorJeremy Harris <jgh146exb@wizmail.org>
Wed, 22 Aug 2018 12:20:54 +0000 (13:20 +0100)
committerJeremy Harris <jgh146exb@wizmail.org>
Wed, 22 Aug 2018 12:20:54 +0000 (13:20 +0100)
doc/doc-docbook/spec.xfpt
src/src/globals.c
src/src/globals.h
src/src/receive.c
src/src/smtp_in.c
test/confs/0216
test/log/0216
test/scripts/0000-Basic/0216

index a9b5d96..9ab06ed 100644 (file)
@@ -36566,7 +36566,7 @@ the following table:
 &`I   `&        local interface used
 &`id  `&        message id for incoming message
 &`K   `&        CHUNKING extension used
-&`L   `&        on &`<=`& and &`=>`& lines: PIPELINING extension offered or used
+&`L   `&        on &`<=`& and &`=>`& lines: PIPELINING extension used
 &`M8S `&        8BITMIME status for incoming message
 &`P   `&        on &`<=`& lines: protocol used
 &`    `&        on &`=>`& and &`**`& lines: return path
@@ -36677,7 +36677,7 @@ selection marked by asterisks:
 &` queue_time                 `&  time on queue for one recipient
 &` queue_time_overall         `&  time on queue for whole message
 &` pid                        `&  Exim process id
-&` pipelining                 `&  PIPELINING, advertisement on <= lines, use on => lines
+&` pipelining                 `&  PIPELINING use, on <= and => lines
 &` proxy                      `&  proxy address on <= and => lines
 &` receive_time               `&  time taken to receive message
 &` received_recipients        `&  recipients on <= lines
@@ -36880,11 +36880,14 @@ local port is a random ephemeral port.
 &%pid%&: The current process id is added to every log line, in square brackets,
 immediately after the time and date.
 .next
+.new
 .cindex log pipelining
 .cindex pipelining "logging outgoing"
 &%pipelining%&: A field is added to delivery and accept
 log lines when the ESMTP PIPELINING extension was used.
 The field is a single "L".
+On accept lines, where PIPELINING was offered but not used by the client,
+the field has a minus appended.
 .next
 .cindex "log" "queue run"
 .cindex "queue runner" "logging"
index f1c6a74..ee1db4b 100644 (file)
@@ -1355,6 +1355,7 @@ double  smtp_delay_rcpt        = 0.0;
 BOOL    smtp_enforce_sync      = TRUE;
 FILE   *smtp_in                = NULL;
 BOOL    smtp_in_pipelining_advertised = FALSE;
+BOOL    smtp_in_pipelining_used = FALSE;
 BOOL    smtp_input             = FALSE;
 int     smtp_load_reserve      = -1;
 int     smtp_mailcmd_count     = 0;
index 684c05d..5b234e2 100644 (file)
@@ -855,6 +855,7 @@ extern uschar *smtp_etrn_command;      /* Command to run */
 extern BOOL    smtp_etrn_serialize;    /* Only one at once */
 extern FILE   *smtp_in;                /* Incoming SMTP input file */
 extern BOOL    smtp_in_pipelining_advertised; /* server advertised PIPELINING */
+extern BOOL    smtp_in_pipelining_used; /* server noted client using PIPELINING */
 extern int     smtp_load_reserve;      /* Only from reserved if load > this */
 extern int     smtp_mailcmd_count;     /* Count of MAIL commands */
 extern int     smtp_max_synprot_errors;/* Max syntax/protocol errors */
index 39f5b67..7e5aac1 100644 (file)
@@ -1321,7 +1321,7 @@ if (sender_ident)
 if (received_protocol)
   g = string_append(g, 2, US" P=", received_protocol);
 if (LOGGING(pipelining) && smtp_in_pipelining_advertised)
-  g = string_catn(g, US" L", 2);
+  g = string_catn(g, US" L-", smtp_in_pipelining_used ? 2 : 3);
 return g;
 }
 
index e59dece..8405945 100644 (file)
@@ -391,7 +391,9 @@ if (  !smtp_enforce_sync || !sender_host_address
    || sender_host_notsocket || !smtp_in_pipelining_advertised)
   return FALSE;
 
-return !wouldblock_reading();
+if (wouldblock_reading()) return FALSE;
+smtp_in_pipelining_used = TRUE;
+return TRUE;
 }
 
 
@@ -2428,7 +2430,7 @@ count_nonmail = TRUE_UNSET;
 synprot_error_count = unknown_command_count = nonmail_command_count = 0;
 smtp_delay_mail = smtp_rlm_base;
 auth_advertised = FALSE;
-smtp_in_pipelining_advertised = FALSE;
+smtp_in_pipelining_advertised = smtp_in_pipelining_used = FALSE;
 pipelining_enable = TRUE;
 sync_cmd_limit = NON_SYNC_CMD_NON_PIPELINING;
 smtp_exit_function_called = FALSE;    /* For avoiding loop in not-quit exit */
index b7f9070..69af543 100644 (file)
@@ -1,6 +1,7 @@
 # Exim test configuration 0216
 
 SERVER=
+HAP=
 
 .include DIR/aux-var/std_conf_prefix
 
@@ -36,6 +37,7 @@ send_to_server:
   hosts = 127.0.0.1
   port = PORT_D
   max_rcpt = 0
+  HAP
 
 
 # ----- Retry -----
index 61f44ee..e2dc156 100644 (file)
 1999-03-02 09:44:33 10HmaX-0005vi-00 -> a498@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 OK id=10HmaY-0005vi-00"
 1999-03-02 09:44:33 10HmaX-0005vi-00 -> a499@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 OK id=10HmaY-0005vi-00"
 1999-03-02 09:44:33 10HmaX-0005vi-00 Completed
+1999-03-02 09:44:33 10HmaZ-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local S=sss
+1999-03-02 09:44:33 10HmaZ-0005vi-00 => b@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] C="250 OK id=10HmbA-0005vi-00"
+1999-03-02 09:44:33 10HmaZ-0005vi-00 Completed
 
 ******** SERVER ********
 1999-03-02 09:44:33 exim x.yz daemon started: pid=pppp, no queue runs, listening for SMTP on port 1225
 1999-03-02 09:44:33 10HmaY-0005vi-00 <= CALLER@myhost.test.ex H=localhost (myhost.test.ex) [127.0.0.1] P=esmtp L S=sss id=E10HmaX-0005vi-00@myhost.test.ex
+1999-03-02 09:44:33 10HmbA-0005vi-00 <= CALLER@myhost.test.ex H=localhost (myhost.test.ex) [127.0.0.1] P=esmtp L- S=sss id=E10HmaZ-0005vi-00@myhost.test.ex
index 50ae023..0e6eb1d 100644 (file)
@@ -109,5 +109,15 @@ Testing
 ****
 exim -M $msg1
 ****
+#
+#
+# Try to spot, in logging, offer but no uptake of PIPELINING
+exim b@test.ex
+testing
+****
+exim -DHAP=hosts_avoid_pipelining=* -M $msg2
+****
+#
+#
 killdaemon
 no_msglog_check