From 0d5879790c9b64d0a5867ee181656360adc08b77 Mon Sep 17 00:00:00 2001 From: Jeremy Harris Date: Tue, 8 Jan 2013 19:09:34 +0000 Subject: [PATCH] Client PRDR logging --- src/src/deliver.c | 14 ++++++++++++++ src/src/structs.h | 4 ++++ src/src/transports/smtp.c | 3 +++ test/log/5510 | 3 +++ test/stdout/5510 | 31 +++++++++++++++++++++++++++++++ 5 files changed, 55 insertions(+) create mode 100644 test/log/5510 create mode 100644 test/stdout/5510 diff --git a/src/src/deliver.c b/src/src/deliver.c index 5f704a8b1..23e63d553 100644 --- a/src/src/deliver.c +++ b/src/src/deliver.c @@ -785,6 +785,11 @@ else } } + #ifdef EXPERIMENTAL_PRDR + if (addr->flags & af_prdr_used) + s = string_append(s, &size, &ptr, 1, US" PRDR"); + #endif + if ((log_extra_selector & LX_smtp_confirmation) != 0 && addr->message != NULL) { @@ -2913,6 +2918,11 @@ while (!done) while (*ptr++); break; +#ifdef EXPERIMENTAL_PRDR + case 'P': + addr->flags |= af_prdr_used; break; +#endif + case 'A': if (addr == NULL) { @@ -4017,6 +4027,10 @@ for (delivery_count = 0; addr_remote != NULL; delivery_count++) rmt_dlv_checked_write(fd, big_buffer, ptr - big_buffer); } + #ifdef EXPERIMENTAL_PRDR + if (addr->flags & af_prdr_used) rmt_dlv_checked_write(fd, "P", 1); + #endif + /* Retry information: for most success cases this will be null. */ for (r = addr->retries; r != NULL; r = r->next) diff --git a/src/src/structs.h b/src/src/structs.h index 5fc01e9e5..d11e91adb 100644 --- a/src/src/structs.h +++ b/src/src/structs.h @@ -483,6 +483,10 @@ typedef struct address_item_propagated { #define af_pass_message 0x02000000 /* pass message in bounces */ #define af_bad_reply 0x04000000 /* filter could not generate autoreply */ +#ifdef EXPERIMENTAL_PRDR +# define af_prdr_used 0x08000000 /* delivery used SMTP PRDR */ +#endif + /* These flags must be propagated when a child is created */ #define af_propagate (af_ignore_error) diff --git a/src/src/transports/smtp.c b/src/src/transports/smtp.c index 7efacba85..9a5d02421 100644 --- a/src/src/transports/smtp.c +++ b/src/src/transports/smtp.c @@ -1876,6 +1876,9 @@ if (!ok) ok = TRUE; else addr->host_used = thost; addr->special_action = flag; addr->message = conf; +#ifdef EXPERIMENTAL_PRDR + if (prdr_active) addr->flags |= af_prdr_used; +#endif flag = '-'; #ifdef EXPERIMENTAL_PRDR diff --git a/test/log/5510 b/test/log/5510 new file mode 100644 index 000000000..5793091e9 --- /dev/null +++ b/test/log/5510 @@ -0,0 +1,3 @@ +1999-03-02 09:44:33 10HmaX-0005vi-00 <= userx@test.ex U=CALLER P=local S=sss +1999-03-02 09:44:33 10HmaX-0005vi-00 => usery@test.ex R=r0 T=t1 H=127.0.0.1 [127.0.0.1] PRDR C="250 first rcpt was good" +1999-03-02 09:44:33 10HmaX-0005vi-00 Completed diff --git a/test/stdout/5510 b/test/stdout/5510 new file mode 100644 index 000000000..3d592222a --- /dev/null +++ b/test/stdout/5510 @@ -0,0 +1,31 @@ + +******** SERVER ******** +Listening on port 1224 ... +Connection request from [127.0.0.1] +220 Server ready +EHLO myhost.test.ex +250- +250-PRDR +250 OK +MAIL FROM: PRDR +250 OK +RCPT TO: +250 OK +DATA +300 gimme yer body +Received: from CALLER by myhost.test.ex with local (Exim x.yz) + (envelope-from ) + id 10HmaX-0005vi-00 + for usery@test.ex; Tue, 2 Mar 1999 09:44:33 +0000 +Message-Id: +From: userx@test.ex +Date: Tue, 2 Mar 1999 09:44:33 +0000 + +Some message text. +. +353 prdr responses coming up +250 first rcpt was good +250 OK, overall +QUIT +250 OK +End of script -- 2.25.1