From f7ae9a62e3c028168effa6b5459e0915cc754b80 Mon Sep 17 00:00:00 2001 From: Wietse Venema Date: Fri, 25 Sep 2020 00:00:00 -0500 Subject: [PATCH] postfix-3.6-20200925 --- postfix/HISTORY | 18 ++ postfix/WISHLIST | 3 - postfix/src/cleanup/Makefile.in | 302 ++++++++++++-------- postfix/src/cleanup/cleanup_milter.c | 20 ++ postfix/src/cleanup/cleanup_milter.in17a | 9 + postfix/src/cleanup/cleanup_milter.in17b | 10 + postfix/src/cleanup/cleanup_milter.in17c | 12 + postfix/src/cleanup/cleanup_milter.in17d | 18 ++ postfix/src/cleanup/cleanup_milter.in17e | 12 + postfix/src/cleanup/cleanup_milter.in17f | 15 + postfix/src/cleanup/cleanup_milter.in17g | 23 ++ postfix/src/cleanup/cleanup_milter.ref17a1 | 1 + postfix/src/cleanup/cleanup_milter.ref17a2 | 30 ++ postfix/src/cleanup/cleanup_milter.ref17b1 | 1 + postfix/src/cleanup/cleanup_milter.ref17b2 | 31 ++ postfix/src/cleanup/cleanup_milter.ref17c1 | 1 + postfix/src/cleanup/cleanup_milter.ref17c2 | 31 ++ postfix/src/cleanup/cleanup_milter.ref17d1 | 1 + postfix/src/cleanup/cleanup_milter.ref17d2 | 35 +++ postfix/src/cleanup/cleanup_milter.ref17e1 | 2 + postfix/src/cleanup/cleanup_milter.ref17e2 | 30 ++ postfix/src/cleanup/cleanup_milter.ref17f1 | 2 + postfix/src/cleanup/cleanup_milter.ref17f2 | 30 ++ postfix/src/cleanup/cleanup_milter.ref17g1 | 2 + postfix/src/cleanup/cleanup_milter.ref17g2 | 33 +++ postfix/src/cleanup/cleanup_out_recipient.c | 1 + postfix/src/cleanup/test-queue-file17 | Bin 0 -> 654 bytes postfix/src/global/Makefile.in | 13 +- postfix/src/global/been_here.c | 79 +++++ postfix/src/global/been_here.h | 2 + postfix/src/global/delivered_hdr.c | 81 +++++- postfix/src/global/delivered_hdr.ref | 3 + postfix/src/global/mail_version.h | 2 +- postfix/src/util/Makefile.in | 10 +- postfix/src/util/vstream.c | 178 +++++++++--- postfix/src/util/vstream_test.ref | 41 ++- postfix/src/util/vstring.h | 1 + 37 files changed, 910 insertions(+), 173 deletions(-) create mode 100644 postfix/src/cleanup/cleanup_milter.in17a create mode 100644 postfix/src/cleanup/cleanup_milter.in17b create mode 100644 postfix/src/cleanup/cleanup_milter.in17c create mode 100644 postfix/src/cleanup/cleanup_milter.in17d create mode 100644 postfix/src/cleanup/cleanup_milter.in17e create mode 100644 postfix/src/cleanup/cleanup_milter.in17f create mode 100644 postfix/src/cleanup/cleanup_milter.in17g create mode 100644 postfix/src/cleanup/cleanup_milter.ref17a1 create mode 100644 postfix/src/cleanup/cleanup_milter.ref17a2 create mode 100644 postfix/src/cleanup/cleanup_milter.ref17b1 create mode 100644 postfix/src/cleanup/cleanup_milter.ref17b2 create mode 100644 postfix/src/cleanup/cleanup_milter.ref17c1 create mode 100644 postfix/src/cleanup/cleanup_milter.ref17c2 create mode 100644 postfix/src/cleanup/cleanup_milter.ref17d1 create mode 100644 postfix/src/cleanup/cleanup_milter.ref17d2 create mode 100644 postfix/src/cleanup/cleanup_milter.ref17e1 create mode 100644 postfix/src/cleanup/cleanup_milter.ref17e2 create mode 100644 postfix/src/cleanup/cleanup_milter.ref17f1 create mode 100644 postfix/src/cleanup/cleanup_milter.ref17f2 create mode 100644 postfix/src/cleanup/cleanup_milter.ref17g1 create mode 100644 postfix/src/cleanup/cleanup_milter.ref17g2 create mode 100644 postfix/src/cleanup/test-queue-file17 create mode 100644 postfix/src/global/delivered_hdr.ref diff --git a/postfix/HISTORY b/postfix/HISTORY index 408c9ce38..5b9f68cb6 100644 --- a/postfix/HISTORY +++ b/postfix/HISTORY @@ -25153,3 +25153,21 @@ Apologies for any names omitted. Cleanup: replaced hard-coded 'private' with named constant. File: global/scache_clnt.c. + + Bugfix (introduced: Postfix 2.3): when deleting a recipient + with a milter, delete the recipient from the duplicate + filter, so that the recipient can be added back. Files: + global/been_here.[hc], cleanup/cleanup_milter.c, + cleanup/Makefile.in, lots of cleanup unit test files. + +20200925 + + Cleanup: vstream_fseek() support for reading or writing + memory buffer streams, and minor cleanups in VSTREAM support + for reading/writing VSTRINGs. Also added unit tests. Files: + util/vstream.c, util/vstring.h. + + Bugfix (introduced: before Postfix alpha): the code that + looks for Delivered-To: headers ignored headers longer than + $line_length_limit. Also added unit tests. File: + global/delivered_hdr.c. diff --git a/postfix/WISHLIST b/postfix/WISHLIST index b2eff8711..6ff3680d1 100644 --- a/postfix/WISHLIST +++ b/postfix/WISHLIST @@ -29,9 +29,6 @@ Wish list: Update makedefs and sys-defs.h for current Linux kernels and *BSD releases. - When deleting a recipient with a milter, delete the recipient from - the duplicate filter, so that the recipient can be added back. - DNS wrapper class, like XSASL, to support different stub resolvers without contaminating Postfix programs with the idiosyncracies of stub resolvers. Handle differences in diff --git a/postfix/src/cleanup/Makefile.in b/postfix/src/cleanup/Makefile.in index 546aae1c9..2b8f11917 100644 --- a/postfix/src/cleanup/Makefile.in +++ b/postfix/src/cleanup/Makefile.in @@ -86,23 +86,25 @@ milter_tests: cleanup_milter_test bug_tests \ cleanup_milter_test15a cleanup_milter_test15b cleanup_milter_test15c \ cleanup_milter_test15d cleanup_milter_test15e cleanup_milter_test15f \ cleanup_milter_test15g cleanup_milter_test15h cleanup_milter_test15i \ - cleanup_milter_test16a cleanup_milter_test16b + cleanup_milter_test16a cleanup_milter_test16b cleanup_milter_test17a \ + cleanup_milter_test17b cleanup_milter_test17c cleanup_milter_test17d \ + cleanup_milter_test17e cleanup_milter_test17f cleanup_milter_test17g root_tests: cleanup_masquerade_test: cleanup_masquerade cleanup_masq.ref rm -f cleanup_masq.tmp - $(SHLIB_ENV) ./cleanup_masquerade '' a.b.c,b.c xxx@aa.a.b.c >>cleanup_masq.tmp - $(SHLIB_ENV) ./cleanup_masquerade '' A.B.C,B.C xxx@aa.a.b.c >>cleanup_masq.tmp - $(SHLIB_ENV) ./cleanup_masquerade '' a.b.c,b.c xxx@AA.A.B.C >>cleanup_masq.tmp - $(SHLIB_ENV) ./cleanup_masquerade 'xxx' a.b.c,b.c xxx@aa.a.b.c >>cleanup_masq.tmp - $(SHLIB_ENV) ./cleanup_masquerade 'yyy' a.b.c,b.c xxx@aa.a.b.c >>cleanup_masq.tmp - $(SHLIB_ENV) ./cleanup_masquerade '' !a.b.c,b.c xxx@aa.a.b.c >>cleanup_masq.tmp - $(SHLIB_ENV) ./cleanup_masquerade '' a.b.c,b.c xxx@a.b.c >>cleanup_masq.tmp - $(SHLIB_ENV) ./cleanup_masquerade '' !a.b.c,b.c xxx@a.b.c >>cleanup_masq.tmp - $(SHLIB_ENV) ./cleanup_masquerade '' a.b.c,b.c xxx@aaa.b.c >>cleanup_masq.tmp - $(SHLIB_ENV) ./cleanup_masquerade '' a.b.c,b.c xxx@b.c >>cleanup_masq.tmp - $(SHLIB_ENV) ./cleanup_masquerade 'fail:whatever' xy xxx@b.c >>cleanup_masq.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_masquerade '' a.b.c,b.c xxx@aa.a.b.c >>cleanup_masq.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_masquerade '' A.B.C,B.C xxx@aa.a.b.c >>cleanup_masq.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_masquerade '' a.b.c,b.c xxx@AA.A.B.C >>cleanup_masq.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_masquerade 'xxx' a.b.c,b.c xxx@aa.a.b.c >>cleanup_masq.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_masquerade 'yyy' a.b.c,b.c xxx@aa.a.b.c >>cleanup_masq.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_masquerade '' !a.b.c,b.c xxx@aa.a.b.c >>cleanup_masq.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_masquerade '' a.b.c,b.c xxx@a.b.c >>cleanup_masq.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_masquerade '' !a.b.c,b.c xxx@a.b.c >>cleanup_masq.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_masquerade '' a.b.c,b.c xxx@aaa.b.c >>cleanup_masq.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_masquerade '' a.b.c,b.c xxx@b.c >>cleanup_masq.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_masquerade 'fail:whatever' xy xxx@b.c >>cleanup_masq.tmp diff cleanup_masq.ref cleanup_masq.tmp rm -f cleanup_masq.tmp @@ -115,10 +117,10 @@ bug1_test: cleanup_milter bug1.file bug1.in bug1.ref bug1.text.ref \ ../postcat/postcat cp bug1.file bug1.file.tmp chmod u+w bug1.file.tmp - $(SHLIB_ENV) ./cleanup_milter /dev/null >bug1.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter /dev/null >bug1.tmp diff bug1.ref bug1.tmp - $(SHLIB_ENV) ../postcat/postcat bug1.file.tmp 2>/dev/null >bug1.tmp + $(SHLIB_ENV) $(VALGRIND) ../postcat/postcat bug1.file.tmp 2>/dev/null >bug1.tmp diff bug1.text.ref bug1.tmp rm -f bug1.file.tmp bug1.tmp @@ -126,10 +128,10 @@ bug2_test: cleanup_milter bug2.file bug2.in bug2.ref bug2.text.ref \ ../postcat/postcat cp bug2.file bug2.file.tmp chmod u+w bug2.file.tmp - $(SHLIB_ENV) ./cleanup_milter /dev/null >bug2.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter /dev/null >bug2.tmp diff bug2.ref bug2.tmp - $(SHLIB_ENV) ../postcat/postcat bug2.file.tmp 2>/dev/null >bug2.tmp + $(SHLIB_ENV) $(VALGRIND) ../postcat/postcat bug2.file.tmp 2>/dev/null >bug2.tmp diff bug2.text.ref bug2.tmp rm -f bug2.file.tmp bug2.tmp @@ -137,10 +139,10 @@ bug3_test: cleanup_milter bug3.file bug3.in bug3.ref bug3.text.ref \ ../postcat/postcat cp bug3.file bug3.file.tmp chmod u+w bug3.file.tmp - $(SHLIB_ENV) ./cleanup_milter /dev/null >bug3.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter /dev/null >bug3.tmp diff bug3.ref bug3.tmp - $(SHLIB_ENV) ../postcat/postcat bug3.file.tmp 2>/dev/null >bug3.tmp + $(SHLIB_ENV) $(VALGRIND) ../postcat/postcat bug3.file.tmp 2>/dev/null >bug3.tmp diff bug3.text.ref bug3.tmp rm -f bug3.file.tmp bug3.tmp @@ -150,8 +152,8 @@ cleanup_milter_test: cleanup_milter test-queue-file cleanup_milter.in1 \ cleanup_milter.ref1 ../postcat/postcat cp test-queue-file test-queue-file.tmp chmod u+w test-queue-file.tmp - $(SHLIB_ENV) ./cleanup_milter /dev/null >cleanup_milter.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter /dev/null >cleanup_milter.tmp diff cleanup_milter.ref1 cleanup_milter.tmp rm -f test-queue-file.tmp cleanup_milter.tmp @@ -159,8 +161,8 @@ cleanup_milter_test2: cleanup_milter test-queue-file2 cleanup_milter.in2 \ cleanup_milter.ref2 ../postcat/postcat cp test-queue-file2 test-queue-file2.tmp chmod u+w test-queue-file2.tmp - $(SHLIB_ENV) ./cleanup_milter /dev/null >cleanup_milter.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter /dev/null >cleanup_milter.tmp diff cleanup_milter.ref2 cleanup_milter.tmp rm -f test-queue-file2.tmp cleanup_milter.tmp @@ -168,8 +170,8 @@ cleanup_milter_test3: cleanup_milter test-queue-file3 cleanup_milter.in3 \ cleanup_milter.ref3 ../postcat/postcat cp test-queue-file3 test-queue-file3.tmp chmod u+w test-queue-file3.tmp - $(SHLIB_ENV) ./cleanup_milter /dev/null >cleanup_milter.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter /dev/null >cleanup_milter.tmp diff cleanup_milter.ref3 cleanup_milter.tmp rm -f test-queue-file3.tmp cleanup_milter.tmp @@ -178,18 +180,18 @@ cleanup_milter_test4: cleanup_milter test-queue-file4 cleanup_milter.in4a \ test-queue-file4 ../postcat/postcat cp test-queue-file4 test-queue-file4.tmp chmod u+w test-queue-file4.tmp - $(SHLIB_ENV) ./cleanup_milter /dev/null >cleanup_milter.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter /dev/null >cleanup_milter.tmp diff cleanup_milter.ref4 cleanup_milter.tmp cp test-queue-file4 test-queue-file4.tmp chmod u+w test-queue-file4.tmp - $(SHLIB_ENV) ./cleanup_milter /dev/null >cleanup_milter.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter /dev/null >cleanup_milter.tmp diff cleanup_milter.ref4 cleanup_milter.tmp cp test-queue-file4 test-queue-file4.tmp chmod u+w test-queue-file4.tmp - $(SHLIB_ENV) ./cleanup_milter /dev/null >cleanup_milter.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter /dev/null >cleanup_milter.tmp diff cleanup_milter.ref4 cleanup_milter.tmp rm -f test-queue-file4.tmp cleanup_milter.tmp @@ -197,8 +199,8 @@ cleanup_milter_test5: cleanup_milter test-queue-file5 cleanup_milter.in5 \ cleanup_milter.ref5 ../postcat/postcat cp test-queue-file5 test-queue-file5.tmp chmod u+w test-queue-file5.tmp - $(SHLIB_ENV) ./cleanup_milter /dev/null >cleanup_milter.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter /dev/null >cleanup_milter.tmp diff cleanup_milter.ref5 cleanup_milter.tmp rm -f test-queue-file5.tmp cleanup_milter.tmp @@ -209,8 +211,8 @@ cleanup_milter_test6a: cleanup_milter test-queue-file6 cleanup_milter.in6a \ cleanup_milter.ref6a test-queue-file6 ../postcat/postcat cp test-queue-file6 test-queue-file6.tmp chmod u+w test-queue-file6.tmp - $(SHLIB_ENV) ./cleanup_milter /dev/null >cleanup_milter.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter /dev/null >cleanup_milter.tmp diff cleanup_milter.ref6a cleanup_milter.tmp rm -f test-queue-file6.tmp cleanup_milter.tmp @@ -218,8 +220,8 @@ cleanup_milter_test6b: cleanup_milter test-queue-file6 cleanup_milter.in6b \ cleanup_milter.ref6b ../postcat/postcat cp test-queue-file6 test-queue-file6.tmp chmod u+w test-queue-file6.tmp - $(SHLIB_ENV) ./cleanup_milter /dev/null >cleanup_milter.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter /dev/null >cleanup_milter.tmp diff cleanup_milter.ref6b cleanup_milter.tmp rm -f test-queue-file6.tmp cleanup_milter.tmp @@ -227,8 +229,8 @@ cleanup_milter_test6c: cleanup_milter test-queue-file6 cleanup_milter.in6c \ cleanup_milter.ref6c ../postcat/postcat cp test-queue-file6 test-queue-file6.tmp chmod u+w test-queue-file6.tmp - $(SHLIB_ENV) ./cleanup_milter /dev/null >cleanup_milter.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter /dev/null >cleanup_milter.tmp diff cleanup_milter.ref6c cleanup_milter.tmp rm -f test-queue-file6.tmp cleanup_milter.tmp @@ -236,8 +238,8 @@ cleanup_milter_test7: cleanup_milter test-queue-file7 cleanup_milter.in7 \ cleanup_milter.ref7 ../postcat/postcat cp test-queue-file7 test-queue-file7.tmp chmod u+w test-queue-file7.tmp - $(SHLIB_ENV) ./cleanup_milter /dev/null >cleanup_milter.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter /dev/null >cleanup_milter.tmp diff cleanup_milter.ref7 cleanup_milter.tmp rm -f test-queue-file7.tmp cleanup_milter.tmp @@ -245,8 +247,8 @@ cleanup_milter_test8: cleanup_milter test-queue-file8 cleanup_milter.in8 \ cleanup_milter.ref8 ../postcat/postcat cp test-queue-file8 test-queue-file8.tmp chmod u+w test-queue-file8.tmp - $(SHLIB_ENV) ./cleanup_milter /dev/null >cleanup_milter.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter /dev/null >cleanup_milter.tmp diff cleanup_milter.ref8 cleanup_milter.tmp rm -f test-queue-file8.tmp cleanup_milter.tmp @@ -254,8 +256,8 @@ cleanup_milter_test9: cleanup_milter test-queue-file9 cleanup_milter.in9 \ cleanup_milter.ref9 ../postcat/postcat cp test-queue-file9 test-queue-file9.tmp chmod u+w test-queue-file9.tmp - $(SHLIB_ENV) ./cleanup_milter /dev/null >cleanup_milter.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter /dev/null >cleanup_milter.tmp diff cleanup_milter.ref9 cleanup_milter.tmp rm -f test-queue-file9.tmp cleanup_milter.tmp @@ -263,8 +265,8 @@ cleanup_milter_test10a: cleanup_milter test-queue-file10 cleanup_milter.in10a \ cleanup_milter.ref10a ../postcat/postcat cp test-queue-file10 test-queue-file10.tmp chmod u+w test-queue-file10.tmp - $(SHLIB_ENV) ./cleanup_milter /dev/null >cleanup_milter.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter /dev/null >cleanup_milter.tmp diff cleanup_milter.ref10a cleanup_milter.tmp rm -f test-queue-file10.tmp cleanup_milter.tmp @@ -272,8 +274,8 @@ cleanup_milter_test10b: cleanup_milter test-queue-file10 cleanup_milter.in10b \ cleanup_milter.ref10b ../postcat/postcat cp test-queue-file10 test-queue-file10.tmp chmod u+w test-queue-file10.tmp - $(SHLIB_ENV) ./cleanup_milter /dev/null >cleanup_milter.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter /dev/null >cleanup_milter.tmp diff cleanup_milter.ref10b cleanup_milter.tmp rm -f test-queue-file10.tmp cleanup_milter.tmp @@ -281,8 +283,8 @@ cleanup_milter_test10c: cleanup_milter test-queue-file10 cleanup_milter.in10c \ cleanup_milter.ref10c ../postcat/postcat cp test-queue-file10 test-queue-file10.tmp chmod u+w test-queue-file10.tmp - $(SHLIB_ENV) ./cleanup_milter /dev/null >cleanup_milter.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter /dev/null >cleanup_milter.tmp diff cleanup_milter.ref10c cleanup_milter.tmp rm -f test-queue-file10.tmp cleanup_milter.tmp @@ -290,8 +292,8 @@ cleanup_milter_test10d: cleanup_milter test-queue-file10 cleanup_milter.in10c \ cleanup_milter.ref10d ../postcat/postcat cp test-queue-file10 test-queue-file10.tmp chmod u+w test-queue-file10.tmp - $(SHLIB_ENV) ./cleanup_milter /dev/null >cleanup_milter.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter /dev/null >cleanup_milter.tmp diff cleanup_milter.ref10d cleanup_milter.tmp rm -f test-queue-file10.tmp cleanup_milter.tmp @@ -299,8 +301,8 @@ cleanup_milter_test10e: cleanup_milter test-queue-file10 cleanup_milter.in10c \ cleanup_milter.ref10e ../postcat/postcat cp test-queue-file10 test-queue-file10.tmp chmod u+w test-queue-file10.tmp - $(SHLIB_ENV) ./cleanup_milter /dev/null >cleanup_milter.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter /dev/null >cleanup_milter.tmp diff cleanup_milter.ref10e cleanup_milter.tmp rm -f test-queue-file10.tmp cleanup_milter.tmp @@ -308,8 +310,8 @@ cleanup_milter_test11: cleanup_milter test-queue-file11 cleanup_milter.in11 \ cleanup_milter.ref11 ../postcat/postcat cp test-queue-file11 test-queue-file11.tmp chmod u+w test-queue-file11.tmp - $(SHLIB_ENV) ./cleanup_milter /dev/null >cleanup_milter.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter /dev/null >cleanup_milter.tmp diff cleanup_milter.ref11 cleanup_milter.tmp rm -f test-queue-file11.tmp cleanup_milter.tmp @@ -317,8 +319,8 @@ cleanup_milter_test12: cleanup_milter test-queue-file12 cleanup_milter.in12 \ cleanup_milter.ref12 ../postcat/postcat cp test-queue-file12 test-queue-file12.tmp chmod u+w test-queue-file12.tmp - $(SHLIB_ENV) ./cleanup_milter /dev/null >cleanup_milter.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter /dev/null >cleanup_milter.tmp diff cleanup_milter.ref12 cleanup_milter.tmp rm -f test-queue-file12.tmp cleanup_milter.tmp @@ -326,8 +328,8 @@ cleanup_milter_test13a: cleanup_milter test-queue-file13a cleanup_milter.in13a \ cleanup_milter.ref13a ../postcat/postcat cp test-queue-file13a test-queue-file13a.tmp chmod u+w test-queue-file13a.tmp - $(SHLIB_ENV) ./cleanup_milter /dev/null >cleanup_milter.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter /dev/null >cleanup_milter.tmp diff cleanup_milter.ref13a cleanup_milter.tmp rm -f test-queue-file13a.tmp cleanup_milter.tmp @@ -335,8 +337,8 @@ cleanup_milter_test13b: cleanup_milter test-queue-file13b cleanup_milter.in13b \ cleanup_milter.ref13b ../postcat/postcat cp test-queue-file13b test-queue-file13b.tmp chmod u+w test-queue-file13b.tmp - $(SHLIB_ENV) ./cleanup_milter /dev/null >cleanup_milter.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter /dev/null >cleanup_milter.tmp diff cleanup_milter.ref13b cleanup_milter.tmp rm -f test-queue-file13b.tmp cleanup_milter.tmp @@ -344,8 +346,8 @@ cleanup_milter_test13c: cleanup_milter test-queue-file13c cleanup_milter.in13c \ cleanup_milter.ref13c ../postcat/postcat cp test-queue-file13c test-queue-file13c.tmp chmod u+w test-queue-file13c.tmp - $(SHLIB_ENV) ./cleanup_milter /dev/null >cleanup_milter.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter /dev/null >cleanup_milter.tmp diff cleanup_milter.ref13c cleanup_milter.tmp rm -f test-queue-file13c.tmp cleanup_milter.tmp @@ -353,8 +355,8 @@ cleanup_milter_test13d: cleanup_milter test-queue-file13d cleanup_milter.in13d \ cleanup_milter.ref13d ../postcat/postcat cp test-queue-file13d test-queue-file13d.tmp chmod u+w test-queue-file13d.tmp - $(SHLIB_ENV) ./cleanup_milter /dev/null >cleanup_milter.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter /dev/null >cleanup_milter.tmp diff cleanup_milter.ref13d cleanup_milter.tmp rm -f test-queue-file13d.tmp cleanup_milter.tmp @@ -362,8 +364,8 @@ cleanup_milter_test13e: cleanup_milter test-queue-file13e cleanup_milter.in13e \ cleanup_milter.ref13e ../postcat/postcat cp test-queue-file13e test-queue-file13e.tmp chmod u+w test-queue-file13e.tmp - $(SHLIB_ENV) ./cleanup_milter /dev/null >cleanup_milter.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter /dev/null >cleanup_milter.tmp diff cleanup_milter.ref13e cleanup_milter.tmp rm -f test-queue-file13e.tmp cleanup_milter.tmp @@ -371,8 +373,8 @@ cleanup_milter_test13g: cleanup_milter test-queue-file13g cleanup_milter.in13g \ cleanup_milter.ref13g ../postcat/postcat cp test-queue-file13g test-queue-file13g.tmp chmod u+w test-queue-file13g.tmp - $(SHLIB_ENV) ./cleanup_milter /dev/null >cleanup_milter.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter /dev/null >cleanup_milter.tmp diff cleanup_milter.ref13g cleanup_milter.tmp rm -f test-queue-file13g.tmp cleanup_milter.tmp @@ -380,8 +382,8 @@ cleanup_milter_test13h: cleanup_milter test-queue-file13h cleanup_milter.in13h \ cleanup_milter.ref13h ../postcat/postcat cp test-queue-file13h test-queue-file13h.tmp chmod u+w test-queue-file13h.tmp - $(SHLIB_ENV) ./cleanup_milter /dev/null >cleanup_milter.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter /dev/null >cleanup_milter.tmp diff cleanup_milter.ref13h cleanup_milter.tmp rm -f test-queue-file13h.tmp cleanup_milter.tmp @@ -389,8 +391,8 @@ cleanup_milter_test13i: cleanup_milter test-queue-file13i cleanup_milter.in13i \ cleanup_milter.ref13i ../postcat/postcat cp test-queue-file13i test-queue-file13i.tmp chmod u+w test-queue-file13i.tmp - $(SHLIB_ENV) ./cleanup_milter /dev/null >cleanup_milter.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter /dev/null >cleanup_milter.tmp diff cleanup_milter.ref13i cleanup_milter.tmp rm -f test-queue-file13i.tmp cleanup_milter.tmp @@ -398,8 +400,8 @@ cleanup_milter_test13f: cleanup_milter test-queue-file13f cleanup_milter.in13f \ cleanup_milter.ref13f ../postcat/postcat cp test-queue-file13f test-queue-file13f.tmp chmod u+w test-queue-file13f.tmp - $(SHLIB_ENV) ./cleanup_milter /dev/null >cleanup_milter.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter /dev/null >cleanup_milter.tmp diff cleanup_milter.ref13f cleanup_milter.tmp rm -f test-queue-file13f.tmp cleanup_milter.tmp @@ -408,9 +410,9 @@ cleanup_milter_test14a: cleanup_milter test-queue-file14 cleanup_milter.in14a \ cleanup_milter.reg14a cp test-queue-file14 test-queue-file14a.tmp chmod u+w test-queue-file14a.tmp - $(SHLIB_ENV) ./cleanup_milter cleanup_milter.tmp1 + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter cleanup_milter.tmp1 diff cleanup_milter.ref14a1 cleanup_milter.tmp1 - $(SHLIB_ENV) ../postcat/postcat -ov test-queue-file14a.tmp 2>/dev/null >cleanup_milter.tmp2 + $(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file14a.tmp 2>/dev/null >cleanup_milter.tmp2 diff cleanup_milter.ref14a2 cleanup_milter.tmp2 rm -f test-queue-file14a.tmp cleanup_milter.tmp1 cleanup_milter.tmp2 @@ -419,9 +421,9 @@ cleanup_milter_test14b: cleanup_milter test-queue-file14 cleanup_milter.in14b \ cleanup_milter.reg14b cp test-queue-file14 test-queue-file14b.tmp chmod u+w test-queue-file14b.tmp - $(SHLIB_ENV) ./cleanup_milter cleanup_milter.tmp1 + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter cleanup_milter.tmp1 diff cleanup_milter.ref14b1 cleanup_milter.tmp1 - $(SHLIB_ENV) ../postcat/postcat -ov test-queue-file14b.tmp 2>/dev/null >cleanup_milter.tmp2 + $(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file14b.tmp 2>/dev/null >cleanup_milter.tmp2 diff cleanup_milter.ref14b2 cleanup_milter.tmp2 rm -f test-queue-file14b.tmp cleanup_milter.tmp1 cleanup_milter.tmp2 @@ -430,9 +432,9 @@ cleanup_milter_test14c: cleanup_milter test-queue-file14 cleanup_milter.in14c \ cleanup_milter.reg14c cp test-queue-file14 test-queue-file14c.tmp chmod u+w test-queue-file14c.tmp - $(SHLIB_ENV) ./cleanup_milter cleanup_milter.tmp1 + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter cleanup_milter.tmp1 diff cleanup_milter.ref14c1 cleanup_milter.tmp1 - $(SHLIB_ENV) ../postcat/postcat -ov test-queue-file14c.tmp 2>/dev/null >cleanup_milter.tmp2 + $(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file14c.tmp 2>/dev/null >cleanup_milter.tmp2 diff cleanup_milter.ref14c2 cleanup_milter.tmp2 rm -f test-queue-file14c.tmp cleanup_milter.tmp1 cleanup_milter.tmp2 @@ -441,9 +443,9 @@ cleanup_milter_test14d: cleanup_milter test-queue-file14 cleanup_milter.in14d \ cleanup_milter.reg14d cp test-queue-file14 test-queue-file14d.tmp chmod u+w test-queue-file14d.tmp - $(SHLIB_ENV) ./cleanup_milter cleanup_milter.tmp1 + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter cleanup_milter.tmp1 diff cleanup_milter.ref14d1 cleanup_milter.tmp1 - $(SHLIB_ENV) ../postcat/postcat -ov test-queue-file14d.tmp 2>/dev/null >cleanup_milter.tmp2 + $(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file14d.tmp 2>/dev/null >cleanup_milter.tmp2 diff cleanup_milter.ref14d2 cleanup_milter.tmp2 rm -f test-queue-file14d.tmp cleanup_milter.tmp1 cleanup_milter.tmp2 @@ -452,9 +454,9 @@ cleanup_milter_test14e: cleanup_milter test-queue-file14 cleanup_milter.in14e \ cleanup_milter.reg14e cp test-queue-file14 test-queue-file14e.tmp chmod u+w test-queue-file14e.tmp - $(SHLIB_ENV) ./cleanup_milter cleanup_milter.tmp1 + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter cleanup_milter.tmp1 diff cleanup_milter.ref14e1 cleanup_milter.tmp1 - $(SHLIB_ENV) ../postcat/postcat -ov test-queue-file14e.tmp 2>/dev/null >cleanup_milter.tmp2 + $(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file14e.tmp 2>/dev/null >cleanup_milter.tmp2 diff cleanup_milter.ref14e2 cleanup_milter.tmp2 rm -f test-queue-file14e.tmp cleanup_milter.tmp1 cleanup_milter.tmp2 @@ -463,9 +465,9 @@ cleanup_milter_test14f: cleanup_milter test-queue-file14 cleanup_milter.in14f \ cleanup_milter.reg14f cp test-queue-file14 test-queue-file14f.tmp chmod u+w test-queue-file14f.tmp - $(SHLIB_ENV) ./cleanup_milter cleanup_milter.tmp1 + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter cleanup_milter.tmp1 diff cleanup_milter.ref14f1 cleanup_milter.tmp1 - $(SHLIB_ENV) ../postcat/postcat -ov test-queue-file14f.tmp 2>/dev/null >cleanup_milter.tmp2 + $(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file14f.tmp 2>/dev/null >cleanup_milter.tmp2 diff cleanup_milter.ref14f2 cleanup_milter.tmp2 rm -f test-queue-file14f.tmp cleanup_milter.tmp1 cleanup_milter.tmp2 @@ -474,9 +476,9 @@ cleanup_milter_test14g: cleanup_milter test-queue-file14 cleanup_milter.in14g \ cleanup_milter.reg14g cp test-queue-file14 test-queue-file14g.tmp chmod u+w test-queue-file14g.tmp - $(SHLIB_ENV) ./cleanup_milter cleanup_milter.tmp1 + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter cleanup_milter.tmp1 diff cleanup_milter.ref14g1 cleanup_milter.tmp1 - $(SHLIB_ENV) ../postcat/postcat -ov test-queue-file14g.tmp 2>/dev/null >cleanup_milter.tmp2 + $(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file14g.tmp 2>/dev/null >cleanup_milter.tmp2 diff cleanup_milter.ref14g2 cleanup_milter.tmp2 rm -f test-queue-file14g.tmp cleanup_milter.tmp1 cleanup_milter.tmp2 @@ -485,9 +487,9 @@ cleanup_milter_test15a: cleanup_milter test-queue-file15 cleanup_milter.in15a \ cleanup_milter.reg15a cp test-queue-file15 test-queue-file15a.tmp chmod u+w test-queue-file15a.tmp - $(SHLIB_ENV) ./cleanup_milter cleanup_milter.tmp1 + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter cleanup_milter.tmp1 diff cleanup_milter.ref15a1 cleanup_milter.tmp1 - $(SHLIB_ENV) ../postcat/postcat -ov test-queue-file15a.tmp 2>/dev/null >cleanup_milter.tmp2 + $(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file15a.tmp 2>/dev/null >cleanup_milter.tmp2 diff cleanup_milter.ref15a2 cleanup_milter.tmp2 rm -f test-queue-file15a.tmp cleanup_milter.tmp1 cleanup_milter.tmp2 @@ -496,9 +498,9 @@ cleanup_milter_test15b: cleanup_milter test-queue-file15 cleanup_milter.in15b \ cleanup_milter.reg15b cp test-queue-file15 test-queue-file15b.tmp chmod u+w test-queue-file15b.tmp - $(SHLIB_ENV) ./cleanup_milter cleanup_milter.tmp1 + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter cleanup_milter.tmp1 diff cleanup_milter.ref15b1 cleanup_milter.tmp1 - $(SHLIB_ENV) ../postcat/postcat -ov test-queue-file15b.tmp 2>/dev/null >cleanup_milter.tmp2 + $(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file15b.tmp 2>/dev/null >cleanup_milter.tmp2 diff cleanup_milter.ref15b2 cleanup_milter.tmp2 rm -f test-queue-file15b.tmp cleanup_milter.tmp1 cleanup_milter.tmp2 @@ -507,9 +509,9 @@ cleanup_milter_test15c: cleanup_milter test-queue-file15 cleanup_milter.in15c \ cleanup_milter.reg15c cp test-queue-file15 test-queue-file15c.tmp chmod u+w test-queue-file15c.tmp - $(SHLIB_ENV) ./cleanup_milter cleanup_milter.tmp1 + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter cleanup_milter.tmp1 diff cleanup_milter.ref15c1 cleanup_milter.tmp1 - $(SHLIB_ENV) ../postcat/postcat -ov test-queue-file15c.tmp 2>/dev/null >cleanup_milter.tmp2 + $(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file15c.tmp 2>/dev/null >cleanup_milter.tmp2 diff cleanup_milter.ref15c2 cleanup_milter.tmp2 rm -f test-queue-file15c.tmp cleanup_milter.tmp1 cleanup_milter.tmp2 @@ -518,9 +520,9 @@ cleanup_milter_test15d: cleanup_milter test-queue-file15 cleanup_milter.in15d \ cleanup_milter.reg15d cp test-queue-file15 test-queue-file15d.tmp chmod u+w test-queue-file15d.tmp - $(SHLIB_ENV) ./cleanup_milter cleanup_milter.tmp1 + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter cleanup_milter.tmp1 diff cleanup_milter.ref15d1 cleanup_milter.tmp1 - $(SHLIB_ENV) ../postcat/postcat -ov test-queue-file15d.tmp 2>/dev/null >cleanup_milter.tmp2 + $(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file15d.tmp 2>/dev/null >cleanup_milter.tmp2 diff cleanup_milter.ref15d2 cleanup_milter.tmp2 rm -f test-queue-file15d.tmp cleanup_milter.tmp1 cleanup_milter.tmp2 @@ -529,9 +531,9 @@ cleanup_milter_test15e: cleanup_milter test-queue-file15 cleanup_milter.in15e \ cleanup_milter.reg15e cp test-queue-file15 test-queue-file15e.tmp chmod u+w test-queue-file15e.tmp - $(SHLIB_ENV) ./cleanup_milter cleanup_milter.tmp1 + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter cleanup_milter.tmp1 diff cleanup_milter.ref15e1 cleanup_milter.tmp1 - $(SHLIB_ENV) ../postcat/postcat -ov test-queue-file15e.tmp 2>/dev/null >cleanup_milter.tmp2 + $(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file15e.tmp 2>/dev/null >cleanup_milter.tmp2 diff cleanup_milter.ref15e2 cleanup_milter.tmp2 rm -f test-queue-file15e.tmp cleanup_milter.tmp1 cleanup_milter.tmp2 @@ -540,9 +542,9 @@ cleanup_milter_test15f: cleanup_milter test-queue-file15 cleanup_milter.in15f \ cleanup_milter.reg15f cp test-queue-file15 test-queue-file15f.tmp chmod u+w test-queue-file15f.tmp - $(SHLIB_ENV) ./cleanup_milter cleanup_milter.tmp1 + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter cleanup_milter.tmp1 diff cleanup_milter.ref15f1 cleanup_milter.tmp1 - $(SHLIB_ENV) ../postcat/postcat -ov test-queue-file15f.tmp 2>/dev/null >cleanup_milter.tmp2 + $(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file15f.tmp 2>/dev/null >cleanup_milter.tmp2 diff cleanup_milter.ref15f2 cleanup_milter.tmp2 rm -f test-queue-file15f.tmp cleanup_milter.tmp1 cleanup_milter.tmp2 @@ -551,9 +553,9 @@ cleanup_milter_test15g: cleanup_milter test-queue-file15 cleanup_milter.in15g \ cleanup_milter.reg15g cp test-queue-file15 test-queue-file15g.tmp chmod u+w test-queue-file15g.tmp - $(SHLIB_ENV) ./cleanup_milter cleanup_milter.tmp1 + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter cleanup_milter.tmp1 diff cleanup_milter.ref15g1 cleanup_milter.tmp1 - $(SHLIB_ENV) ../postcat/postcat -ov test-queue-file15g.tmp 2>/dev/null >cleanup_milter.tmp2 + $(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file15g.tmp 2>/dev/null >cleanup_milter.tmp2 diff cleanup_milter.ref15g2 cleanup_milter.tmp2 rm -f test-queue-file15g.tmp cleanup_milter.tmp1 cleanup_milter.tmp2 @@ -562,9 +564,9 @@ cleanup_milter_test15h: cleanup_milter test-queue-file15 cleanup_milter.in15h \ cleanup_milter.reg15h cp test-queue-file15 test-queue-file15h.tmp chmod u+w test-queue-file15h.tmp - $(SHLIB_ENV) ./cleanup_milter cleanup_milter.tmp1 + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter cleanup_milter.tmp1 diff cleanup_milter.ref15h1 cleanup_milter.tmp1 - $(SHLIB_ENV) ../postcat/postcat -ov test-queue-file15h.tmp 2>/dev/null >cleanup_milter.tmp2 + $(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file15h.tmp 2>/dev/null >cleanup_milter.tmp2 diff cleanup_milter.ref15h2 cleanup_milter.tmp2 rm -f test-queue-file15h.tmp cleanup_milter.tmp1 cleanup_milter.tmp2 @@ -573,9 +575,9 @@ cleanup_milter_test15i: cleanup_milter test-queue-file15 cleanup_milter.in15i \ cleanup_milter.reg15i cp test-queue-file15 test-queue-file15i.tmp chmod u+w test-queue-file15i.tmp - $(SHLIB_ENV) ./cleanup_milter cleanup_milter.tmp1 + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter cleanup_milter.tmp1 diff cleanup_milter.ref15i1 cleanup_milter.tmp1 - $(SHLIB_ENV) ../postcat/postcat -ov test-queue-file15i.tmp 2>/dev/null >cleanup_milter.tmp2 + $(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file15i.tmp 2>/dev/null >cleanup_milter.tmp2 diff cleanup_milter.ref15i2 cleanup_milter.tmp2 rm -f test-queue-file15i.tmp cleanup_milter.tmp1 cleanup_milter.tmp2 @@ -583,9 +585,9 @@ cleanup_milter_test16a: cleanup_milter test-queue-file16 cleanup_milter.in16a \ cleanup_milter.ref16a1 ../postcat/postcat cleanup_milter.ref16a2 cp test-queue-file16 test-queue-file16a.tmp chmod u+w test-queue-file16a.tmp - $(SHLIB_ENV) ./cleanup_milter cleanup_milter.tmp1 + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter cleanup_milter.tmp1 diff cleanup_milter.ref16a1 cleanup_milter.tmp1 - $(SHLIB_ENV) ../postcat/postcat -ov test-queue-file16a.tmp 2>/dev/null >cleanup_milter.tmp2 + $(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file16a.tmp 2>/dev/null >cleanup_milter.tmp2 diff cleanup_milter.ref16a2 cleanup_milter.tmp2 rm -f test-queue-file16a.tmp cleanup_milter.tmp1 cleanup_milter.tmp2 @@ -593,12 +595,82 @@ cleanup_milter_test16b: cleanup_milter test-queue-file16 cleanup_milter.in16b \ cleanup_milter.ref16b1 ../postcat/postcat cleanup_milter.ref16b2 cp test-queue-file16 test-queue-file16b.tmp chmod u+w test-queue-file16b.tmp - $(SHLIB_ENV) ./cleanup_milter cleanup_milter.tmp1 + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter cleanup_milter.tmp1 diff cleanup_milter.ref16b1 cleanup_milter.tmp1 - $(SHLIB_ENV) ../postcat/postcat -ov test-queue-file16b.tmp 2>/dev/null >cleanup_milter.tmp2 + $(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file16b.tmp 2>/dev/null >cleanup_milter.tmp2 diff cleanup_milter.ref16b2 cleanup_milter.tmp2 rm -f test-queue-file16b.tmp cleanup_milter.tmp1 cleanup_milter.tmp2 +cleanup_milter_test17a: cleanup_milter test-queue-file17 cleanup_milter.in17a \ + cleanup_milter.ref17a1 ../postcat/postcat cleanup_milter.ref17a2 + cp test-queue-file17 test-queue-file17a.tmp + chmod u+w test-queue-file17a.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter cleanup_milter.tmp1 + diff cleanup_milter.ref17a1 cleanup_milter.tmp1 + $(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file17a.tmp 2>/dev/null >cleanup_milter.tmp2 + diff cleanup_milter.ref17a2 cleanup_milter.tmp2 + rm -f test-queue-file17a.tmp cleanup_milter.tmp1 cleanup_milter.tmp2 + +cleanup_milter_test17b: cleanup_milter test-queue-file17 cleanup_milter.in17b \ + cleanup_milter.ref17b1 ../postcat/postcat cleanup_milter.ref17b2 + cp test-queue-file17 test-queue-file17b.tmp + chmod u+w test-queue-file17b.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter cleanup_milter.tmp1 + diff cleanup_milter.ref17b1 cleanup_milter.tmp1 + $(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file17b.tmp 2>/dev/null >cleanup_milter.tmp2 + diff cleanup_milter.ref17b2 cleanup_milter.tmp2 + rm -f test-queue-file17b.tmp cleanup_milter.tmp1 cleanup_milter.tmp2 + +cleanup_milter_test17c: cleanup_milter test-queue-file17 cleanup_milter.in17c \ + cleanup_milter.ref17c1 ../postcat/postcat cleanup_milter.ref17c2 + cp test-queue-file17 test-queue-file17c.tmp + chmod u+w test-queue-file17c.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter cleanup_milter.tmp1 + diff cleanup_milter.ref17c1 cleanup_milter.tmp1 + $(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file17c.tmp 2>/dev/null >cleanup_milter.tmp2 + diff cleanup_milter.ref17c2 cleanup_milter.tmp2 + rm -f test-queue-file17c.tmp cleanup_milter.tmp1 cleanup_milter.tmp2 + +cleanup_milter_test17d: cleanup_milter test-queue-file17 cleanup_milter.in17d \ + cleanup_milter.ref17d1 ../postcat/postcat cleanup_milter.ref17d2 + cp test-queue-file17 test-queue-file17d.tmp + chmod u+w test-queue-file17d.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter cleanup_milter.tmp1 + diff cleanup_milter.ref17d1 cleanup_milter.tmp1 + $(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file17d.tmp 2>/dev/null >cleanup_milter.tmp2 + diff cleanup_milter.ref17d2 cleanup_milter.tmp2 + rm -f test-queue-file17d.tmp cleanup_milter.tmp1 cleanup_milter.tmp2 + +cleanup_milter_test17e: cleanup_milter test-queue-file17 cleanup_milter.in17e \ + cleanup_milter.ref17e1 ../postcat/postcat cleanup_milter.ref17e2 + cp test-queue-file17 test-queue-file17e.tmp + chmod u+w test-queue-file17e.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter cleanup_milter.tmp1 + diff cleanup_milter.ref17e1 cleanup_milter.tmp1 + $(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file17e.tmp 2>/dev/null >cleanup_milter.tmp2 + diff cleanup_milter.ref17e2 cleanup_milter.tmp2 + rm -f test-queue-file17e.tmp cleanup_milter.tmp1 cleanup_milter.tmp2 + +cleanup_milter_test17f: cleanup_milter test-queue-file17 cleanup_milter.in17f \ + cleanup_milter.ref17f1 ../postcat/postcat cleanup_milter.ref17f2 + cp test-queue-file17 test-queue-file17f.tmp + chmod u+w test-queue-file17f.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter cleanup_milter.tmp1 + diff cleanup_milter.ref17f1 cleanup_milter.tmp1 + $(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file17f.tmp 2>/dev/null >cleanup_milter.tmp2 + diff cleanup_milter.ref17f2 cleanup_milter.tmp2 + rm -f test-queue-file17f.tmp cleanup_milter.tmp1 cleanup_milter.tmp2 + +cleanup_milter_test17g: cleanup_milter test-queue-file17 cleanup_milter.in17g \ + cleanup_milter.ref17g1 ../postcat/postcat cleanup_milter.ref17g2 + cp test-queue-file17 test-queue-file17g.tmp + chmod u+w test-queue-file17g.tmp + $(SHLIB_ENV) $(VALGRIND) ./cleanup_milter cleanup_milter.tmp1 + diff cleanup_milter.ref17g1 cleanup_milter.tmp1 + $(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file17g.tmp 2>/dev/null >cleanup_milter.tmp2 + diff cleanup_milter.ref17g2 cleanup_milter.tmp2 + rm -f test-queue-file17g.tmp cleanup_milter.tmp1 cleanup_milter.tmp2 + depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ diff --git a/postfix/src/cleanup/cleanup_milter.c b/postfix/src/cleanup/cleanup_milter.c index fb0fdaf5a..556a50895 100644 --- a/postfix/src/cleanup/cleanup_milter.c +++ b/postfix/src/cleanup/cleanup_milter.c @@ -1803,6 +1803,11 @@ static const char *cleanup_del_rcpt(void *context, const char *ext_rcpt) } count++; } + if (var_enable_orcpt) + /* Matches been_here() call in cleanup_out_recipient(). */ + been_here_drop(state->dups, "%s\n%d\n%s\n%s", + dsn_orcpt ? dsn_orcpt : "", dsn_notify, + orig_rcpt ? orig_rcpt : "", STR(int_rcpt_buf)); /* FALLTHROUGH */ case REC_TYPE_DRCP: /* canceled recipient */ case REC_TYPE_DONE: /* can't happen */ @@ -1818,6 +1823,9 @@ static const char *cleanup_del_rcpt(void *context, const char *ext_rcpt) break; } } + /* Matches been_here_fixed() call in cleanup_out_recipient(). */ + if (var_enable_orcpt == 0 && count > 0) + been_here_drop_fixed(state->dups, STR(int_rcpt_buf)); if (msg_verbose) msg_info("%s: deleted %d records for recipient \"%s\"", @@ -2549,6 +2557,18 @@ int main(int unused_argc, char **argv) } else { open_queue_file(state, argv->argv[1]); } + } else if (strcmp(argv->argv[0], "enable_original_recipient") == 0) { + if (argv->argc == 1) { + msg_info("enable_original_recipient: %d", var_enable_orcpt); + } else if (argv->argc != 2) { + msg_warn("bad enable_original_recipient argument count: %ld", + (long) argv->argc); + } else if (!alldig(argv->argv[1])) { + msg_warn("non-numeric enable_original_recipient argument: %s", + argv->argv[1]); + } else { + var_enable_orcpt = atoi(argv->argv[1]); + } } else if (state->dst == 0) { msg_warn("no open queue file"); } else if (strcmp(argv->argv[0], "close") == 0) { diff --git a/postfix/src/cleanup/cleanup_milter.in17a b/postfix/src/cleanup/cleanup_milter.in17a new file mode 100644 index 000000000..c7eb3614b --- /dev/null +++ b/postfix/src/cleanup/cleanup_milter.in17a @@ -0,0 +1,9 @@ +#verbose on +open test-queue-file17a.tmp +# +# Delete a recipient. Then add the recipient back. + +del_rcpt user@example.com +add_rcpt user@example.com + +close diff --git a/postfix/src/cleanup/cleanup_milter.in17b b/postfix/src/cleanup/cleanup_milter.in17b new file mode 100644 index 000000000..654f9f5e2 --- /dev/null +++ b/postfix/src/cleanup/cleanup_milter.in17b @@ -0,0 +1,10 @@ +#verbose on +open test-queue-file17b.tmp +# +# Delete a recipient. Then add the recipient back, with a DSN NOTIFY +# record instead of a DSN original recipient. + +del_rcpt user@example.com +add_rcpt_par user@example.com NOTIFY=never + +close diff --git a/postfix/src/cleanup/cleanup_milter.in17c b/postfix/src/cleanup/cleanup_milter.in17c new file mode 100644 index 000000000..8c34db415 --- /dev/null +++ b/postfix/src/cleanup/cleanup_milter.in17c @@ -0,0 +1,12 @@ +#verbose on +open test-queue-file17c.tmp +# +# Delete a recipient. Then add the recipient back, with a DSN NOTIFY +# record instead of a DSN original recipient. Then add the same again. +# The second command should be ignored as a duplicate. + +del_rcpt user@example.com +add_rcpt_par user@example.com NOTIFY=never +add_rcpt_par user@example.com NOTIFY=never + +close diff --git a/postfix/src/cleanup/cleanup_milter.in17d b/postfix/src/cleanup/cleanup_milter.in17d new file mode 100644 index 000000000..46ac8ffeb --- /dev/null +++ b/postfix/src/cleanup/cleanup_milter.in17d @@ -0,0 +1,18 @@ +#verbose on +open test-queue-file17d.tmp +# +# Delete a recipient. Then add the recipient back, with a DSN NOTIFY +# record instead of a DSN original recipient. Then add the same again. +# The second command should be ignored as a duplicate. + +del_rcpt user@example.com +add_rcpt_par user@example.com NOTIFY=never +add_rcpt_par user@example.com NOTIFY=never + +# The above has confirmed that recipient is in the duplicate filter. +# Now verify that del_rcpt will delete it, and that a subsequent +# add_rcpt_par will NOT be ignored. +del_rcpt user@example.com +add_rcpt_par user@example.com NOTIFY=never + +close diff --git a/postfix/src/cleanup/cleanup_milter.in17e b/postfix/src/cleanup/cleanup_milter.in17e new file mode 100644 index 000000000..e2e254641 --- /dev/null +++ b/postfix/src/cleanup/cleanup_milter.in17e @@ -0,0 +1,12 @@ +#verbose on +open test-queue-file17e.tmp +# +# Delete a recipient. Then add the recipient back. + +enable_original_recipient 0 +enable_original_recipient + +del_rcpt user@example.com +add_rcpt user@example.com + +close diff --git a/postfix/src/cleanup/cleanup_milter.in17f b/postfix/src/cleanup/cleanup_milter.in17f new file mode 100644 index 000000000..03d85c022 --- /dev/null +++ b/postfix/src/cleanup/cleanup_milter.in17f @@ -0,0 +1,15 @@ +#verbose on +open test-queue-file17f.tmp +# +# Delete a recipient. Then add the recipient back. + +enable_original_recipient 0 +enable_original_recipient + +del_rcpt user@example.com +add_rcpt user@example.com + +# Adding the recipient another time should be a NOOP. +add_rcpt user@example.com + +close diff --git a/postfix/src/cleanup/cleanup_milter.in17g b/postfix/src/cleanup/cleanup_milter.in17g new file mode 100644 index 000000000..e7225eca8 --- /dev/null +++ b/postfix/src/cleanup/cleanup_milter.in17g @@ -0,0 +1,23 @@ +#verbose on +open test-queue-file17g.tmp +# +# Delete a recipient. This leaves a deleted recipient in the queue +# file. Then add the recipient back. +# +enable_original_recipient 0 +enable_original_recipient + +del_rcpt user@example.com +add_rcpt user@example.com + +# Adding the recipient another time should be a NOOP. +add_rcpt user@example.com + +# Deleting the recipient should remove it from the duplicate filter. +# This leaves a deleted recipient in the queue file. +# Therefore adding the recipient will not be a NOOP. + +del_rcpt user@example.com +add_rcpt user@example.com + +close diff --git a/postfix/src/cleanup/cleanup_milter.ref17a1 b/postfix/src/cleanup/cleanup_milter.ref17a1 new file mode 100644 index 000000000..eab5a83d6 --- /dev/null +++ b/postfix/src/cleanup/cleanup_milter.ref17a1 @@ -0,0 +1 @@ +./cleanup_milter: flags = enable_header_body_filter enable_milters diff --git a/postfix/src/cleanup/cleanup_milter.ref17a2 b/postfix/src/cleanup/cleanup_milter.ref17a2 new file mode 100644 index 000000000..18037a85e --- /dev/null +++ b/postfix/src/cleanup/cleanup_milter.ref17a2 @@ -0,0 +1,30 @@ +*** ENVELOPE RECORDS test-queue-file17a.tmp *** + 0 message_size: 343 215 1 0 343 0 + 97 message_arrival_time: Tue Nov 18 16:43:29 2014 + 116 create_time: Tue Nov 18 16:43:29 2014 + 140 named_attribute: rewrite_context=local + 163 sender_fullname: Wietse Venema + 178 sender: user@example.com + 196 pointer_record: 654 + 654 original_recipient: user@example.com + 672 recipient: user@example.com + 690 pointer_record: 213 + 213 *** MESSAGE CONTENTS test-queue-file17a.tmp *** + 215 regular_text: Received: by host.example.com (Postfix, from userid 1001) + 274 regular_text: id 663E22172797; Tue, 18 Nov 2014 16:43:29 -0500 (EST) + 331 regular_text: To: user@example.com + 353 regular_text: Subject: test + 368 padding: 0 + 371 regular_text: Message-Id: <20141118214329.663E22172797@host.example.com> + 431 regular_text: Date: Tue, 18 Nov 2014 16:43:29 -0500 (EST) + 476 regular_text: From: user@example.com (Wietse Venema) + 516 pointer_record: 0 + 533 regular_text: + 535 regular_text: test + 541 pointer_record: 0 + 558 *** HEADER EXTRACTED test-queue-file17a.tmp *** + 560 pointer_record: 0 + 577 named_attribute: dsn_orig_rcpt=rfc822;user@example.com + 616 original_recipient: user@example.com + 634 canceled_recipient: user@example.com + 652 *** MESSAGE FILE END test-queue-file17a.tmp *** diff --git a/postfix/src/cleanup/cleanup_milter.ref17b1 b/postfix/src/cleanup/cleanup_milter.ref17b1 new file mode 100644 index 000000000..eab5a83d6 --- /dev/null +++ b/postfix/src/cleanup/cleanup_milter.ref17b1 @@ -0,0 +1 @@ +./cleanup_milter: flags = enable_header_body_filter enable_milters diff --git a/postfix/src/cleanup/cleanup_milter.ref17b2 b/postfix/src/cleanup/cleanup_milter.ref17b2 new file mode 100644 index 000000000..4df043d4a --- /dev/null +++ b/postfix/src/cleanup/cleanup_milter.ref17b2 @@ -0,0 +1,31 @@ +*** ENVELOPE RECORDS test-queue-file17b.tmp *** + 0 message_size: 343 215 1 0 343 0 + 97 message_arrival_time: Tue Nov 18 16:43:29 2014 + 116 create_time: Tue Nov 18 16:43:29 2014 + 140 named_attribute: rewrite_context=local + 163 sender_fullname: Wietse Venema + 178 sender: user@example.com + 196 pointer_record: 654 + 654 named_attribute: notify_flags=1 + 670 original_recipient: user@example.com + 688 recipient: user@example.com + 706 pointer_record: 213 + 213 *** MESSAGE CONTENTS test-queue-file17b.tmp *** + 215 regular_text: Received: by host.example.com (Postfix, from userid 1001) + 274 regular_text: id 663E22172797; Tue, 18 Nov 2014 16:43:29 -0500 (EST) + 331 regular_text: To: user@example.com + 353 regular_text: Subject: test + 368 padding: 0 + 371 regular_text: Message-Id: <20141118214329.663E22172797@host.example.com> + 431 regular_text: Date: Tue, 18 Nov 2014 16:43:29 -0500 (EST) + 476 regular_text: From: user@example.com (Wietse Venema) + 516 pointer_record: 0 + 533 regular_text: + 535 regular_text: test + 541 pointer_record: 0 + 558 *** HEADER EXTRACTED test-queue-file17b.tmp *** + 560 pointer_record: 0 + 577 named_attribute: dsn_orig_rcpt=rfc822;user@example.com + 616 original_recipient: user@example.com + 634 canceled_recipient: user@example.com + 652 *** MESSAGE FILE END test-queue-file17b.tmp *** diff --git a/postfix/src/cleanup/cleanup_milter.ref17c1 b/postfix/src/cleanup/cleanup_milter.ref17c1 new file mode 100644 index 000000000..eab5a83d6 --- /dev/null +++ b/postfix/src/cleanup/cleanup_milter.ref17c1 @@ -0,0 +1 @@ +./cleanup_milter: flags = enable_header_body_filter enable_milters diff --git a/postfix/src/cleanup/cleanup_milter.ref17c2 b/postfix/src/cleanup/cleanup_milter.ref17c2 new file mode 100644 index 000000000..509af4115 --- /dev/null +++ b/postfix/src/cleanup/cleanup_milter.ref17c2 @@ -0,0 +1,31 @@ +*** ENVELOPE RECORDS test-queue-file17c.tmp *** + 0 message_size: 343 215 1 0 343 0 + 97 message_arrival_time: Tue Nov 18 16:43:29 2014 + 116 create_time: Tue Nov 18 16:43:29 2014 + 140 named_attribute: rewrite_context=local + 163 sender_fullname: Wietse Venema + 178 sender: user@example.com + 196 pointer_record: 654 + 654 named_attribute: notify_flags=1 + 670 original_recipient: user@example.com + 688 recipient: user@example.com + 706 pointer_record: 213 + 213 *** MESSAGE CONTENTS test-queue-file17c.tmp *** + 215 regular_text: Received: by host.example.com (Postfix, from userid 1001) + 274 regular_text: id 663E22172797; Tue, 18 Nov 2014 16:43:29 -0500 (EST) + 331 regular_text: To: user@example.com + 353 regular_text: Subject: test + 368 padding: 0 + 371 regular_text: Message-Id: <20141118214329.663E22172797@host.example.com> + 431 regular_text: Date: Tue, 18 Nov 2014 16:43:29 -0500 (EST) + 476 regular_text: From: user@example.com (Wietse Venema) + 516 pointer_record: 0 + 533 regular_text: + 535 regular_text: test + 541 pointer_record: 0 + 558 *** HEADER EXTRACTED test-queue-file17c.tmp *** + 560 pointer_record: 0 + 577 named_attribute: dsn_orig_rcpt=rfc822;user@example.com + 616 original_recipient: user@example.com + 634 canceled_recipient: user@example.com + 652 *** MESSAGE FILE END test-queue-file17c.tmp *** diff --git a/postfix/src/cleanup/cleanup_milter.ref17d1 b/postfix/src/cleanup/cleanup_milter.ref17d1 new file mode 100644 index 000000000..eab5a83d6 --- /dev/null +++ b/postfix/src/cleanup/cleanup_milter.ref17d1 @@ -0,0 +1 @@ +./cleanup_milter: flags = enable_header_body_filter enable_milters diff --git a/postfix/src/cleanup/cleanup_milter.ref17d2 b/postfix/src/cleanup/cleanup_milter.ref17d2 new file mode 100644 index 000000000..846ac33cd --- /dev/null +++ b/postfix/src/cleanup/cleanup_milter.ref17d2 @@ -0,0 +1,35 @@ +*** ENVELOPE RECORDS test-queue-file17d.tmp *** + 0 message_size: 343 215 1 0 343 0 + 97 message_arrival_time: Tue Nov 18 16:43:29 2014 + 116 create_time: Tue Nov 18 16:43:29 2014 + 140 named_attribute: rewrite_context=local + 163 sender_fullname: Wietse Venema + 178 sender: user@example.com + 196 pointer_record: 654 + 654 named_attribute: notify_flags=1 + 670 original_recipient: user@example.com + 688 canceled_recipient: user@example.com + 706 pointer_record: 723 + 723 named_attribute: notify_flags=1 + 739 original_recipient: user@example.com + 757 recipient: user@example.com + 775 pointer_record: 213 + 213 *** MESSAGE CONTENTS test-queue-file17d.tmp *** + 215 regular_text: Received: by host.example.com (Postfix, from userid 1001) + 274 regular_text: id 663E22172797; Tue, 18 Nov 2014 16:43:29 -0500 (EST) + 331 regular_text: To: user@example.com + 353 regular_text: Subject: test + 368 padding: 0 + 371 regular_text: Message-Id: <20141118214329.663E22172797@host.example.com> + 431 regular_text: Date: Tue, 18 Nov 2014 16:43:29 -0500 (EST) + 476 regular_text: From: user@example.com (Wietse Venema) + 516 pointer_record: 0 + 533 regular_text: + 535 regular_text: test + 541 pointer_record: 0 + 558 *** HEADER EXTRACTED test-queue-file17d.tmp *** + 560 pointer_record: 0 + 577 named_attribute: dsn_orig_rcpt=rfc822;user@example.com + 616 original_recipient: user@example.com + 634 canceled_recipient: user@example.com + 652 *** MESSAGE FILE END test-queue-file17d.tmp *** diff --git a/postfix/src/cleanup/cleanup_milter.ref17e1 b/postfix/src/cleanup/cleanup_milter.ref17e1 new file mode 100644 index 000000000..b78b1a285 --- /dev/null +++ b/postfix/src/cleanup/cleanup_milter.ref17e1 @@ -0,0 +1,2 @@ +./cleanup_milter: enable_original_recipient: 0 +./cleanup_milter: flags = enable_header_body_filter enable_milters diff --git a/postfix/src/cleanup/cleanup_milter.ref17e2 b/postfix/src/cleanup/cleanup_milter.ref17e2 new file mode 100644 index 000000000..7e523f69e --- /dev/null +++ b/postfix/src/cleanup/cleanup_milter.ref17e2 @@ -0,0 +1,30 @@ +*** ENVELOPE RECORDS test-queue-file17e.tmp *** + 0 message_size: 343 215 1 0 343 0 + 97 message_arrival_time: Tue Nov 18 16:43:29 2014 + 116 create_time: Tue Nov 18 16:43:29 2014 + 140 named_attribute: rewrite_context=local + 163 sender_fullname: Wietse Venema + 178 sender: user@example.com + 196 pointer_record: 654 + 654 original_recipient: user@example.com + 672 recipient: user@example.com + 690 pointer_record: 213 + 213 *** MESSAGE CONTENTS test-queue-file17e.tmp *** + 215 regular_text: Received: by host.example.com (Postfix, from userid 1001) + 274 regular_text: id 663E22172797; Tue, 18 Nov 2014 16:43:29 -0500 (EST) + 331 regular_text: To: user@example.com + 353 regular_text: Subject: test + 368 padding: 0 + 371 regular_text: Message-Id: <20141118214329.663E22172797@host.example.com> + 431 regular_text: Date: Tue, 18 Nov 2014 16:43:29 -0500 (EST) + 476 regular_text: From: user@example.com (Wietse Venema) + 516 pointer_record: 0 + 533 regular_text: + 535 regular_text: test + 541 pointer_record: 0 + 558 *** HEADER EXTRACTED test-queue-file17e.tmp *** + 560 pointer_record: 0 + 577 named_attribute: dsn_orig_rcpt=rfc822;user@example.com + 616 original_recipient: user@example.com + 634 canceled_recipient: user@example.com + 652 *** MESSAGE FILE END test-queue-file17e.tmp *** diff --git a/postfix/src/cleanup/cleanup_milter.ref17f1 b/postfix/src/cleanup/cleanup_milter.ref17f1 new file mode 100644 index 000000000..b78b1a285 --- /dev/null +++ b/postfix/src/cleanup/cleanup_milter.ref17f1 @@ -0,0 +1,2 @@ +./cleanup_milter: enable_original_recipient: 0 +./cleanup_milter: flags = enable_header_body_filter enable_milters diff --git a/postfix/src/cleanup/cleanup_milter.ref17f2 b/postfix/src/cleanup/cleanup_milter.ref17f2 new file mode 100644 index 000000000..ce185910e --- /dev/null +++ b/postfix/src/cleanup/cleanup_milter.ref17f2 @@ -0,0 +1,30 @@ +*** ENVELOPE RECORDS test-queue-file17f.tmp *** + 0 message_size: 343 215 1 0 343 0 + 97 message_arrival_time: Tue Nov 18 16:43:29 2014 + 116 create_time: Tue Nov 18 16:43:29 2014 + 140 named_attribute: rewrite_context=local + 163 sender_fullname: Wietse Venema + 178 sender: user@example.com + 196 pointer_record: 654 + 654 original_recipient: user@example.com + 672 recipient: user@example.com + 690 pointer_record: 213 + 213 *** MESSAGE CONTENTS test-queue-file17f.tmp *** + 215 regular_text: Received: by host.example.com (Postfix, from userid 1001) + 274 regular_text: id 663E22172797; Tue, 18 Nov 2014 16:43:29 -0500 (EST) + 331 regular_text: To: user@example.com + 353 regular_text: Subject: test + 368 padding: 0 + 371 regular_text: Message-Id: <20141118214329.663E22172797@host.example.com> + 431 regular_text: Date: Tue, 18 Nov 2014 16:43:29 -0500 (EST) + 476 regular_text: From: user@example.com (Wietse Venema) + 516 pointer_record: 0 + 533 regular_text: + 535 regular_text: test + 541 pointer_record: 0 + 558 *** HEADER EXTRACTED test-queue-file17f.tmp *** + 560 pointer_record: 0 + 577 named_attribute: dsn_orig_rcpt=rfc822;user@example.com + 616 original_recipient: user@example.com + 634 canceled_recipient: user@example.com + 652 *** MESSAGE FILE END test-queue-file17f.tmp *** diff --git a/postfix/src/cleanup/cleanup_milter.ref17g1 b/postfix/src/cleanup/cleanup_milter.ref17g1 new file mode 100644 index 000000000..b78b1a285 --- /dev/null +++ b/postfix/src/cleanup/cleanup_milter.ref17g1 @@ -0,0 +1,2 @@ +./cleanup_milter: enable_original_recipient: 0 +./cleanup_milter: flags = enable_header_body_filter enable_milters diff --git a/postfix/src/cleanup/cleanup_milter.ref17g2 b/postfix/src/cleanup/cleanup_milter.ref17g2 new file mode 100644 index 000000000..938eeed47 --- /dev/null +++ b/postfix/src/cleanup/cleanup_milter.ref17g2 @@ -0,0 +1,33 @@ +*** ENVELOPE RECORDS test-queue-file17g.tmp *** + 0 message_size: 343 215 1 0 343 0 + 97 message_arrival_time: Tue Nov 18 16:43:29 2014 + 116 create_time: Tue Nov 18 16:43:29 2014 + 140 named_attribute: rewrite_context=local + 163 sender_fullname: Wietse Venema + 178 sender: user@example.com + 196 pointer_record: 654 + 654 original_recipient: user@example.com + 672 canceled_recipient: user@example.com + 690 pointer_record: 707 + 707 original_recipient: user@example.com + 725 recipient: user@example.com + 743 pointer_record: 213 + 213 *** MESSAGE CONTENTS test-queue-file17g.tmp *** + 215 regular_text: Received: by host.example.com (Postfix, from userid 1001) + 274 regular_text: id 663E22172797; Tue, 18 Nov 2014 16:43:29 -0500 (EST) + 331 regular_text: To: user@example.com + 353 regular_text: Subject: test + 368 padding: 0 + 371 regular_text: Message-Id: <20141118214329.663E22172797@host.example.com> + 431 regular_text: Date: Tue, 18 Nov 2014 16:43:29 -0500 (EST) + 476 regular_text: From: user@example.com (Wietse Venema) + 516 pointer_record: 0 + 533 regular_text: + 535 regular_text: test + 541 pointer_record: 0 + 558 *** HEADER EXTRACTED test-queue-file17g.tmp *** + 560 pointer_record: 0 + 577 named_attribute: dsn_orig_rcpt=rfc822;user@example.com + 616 original_recipient: user@example.com + 634 canceled_recipient: user@example.com + 652 *** MESSAGE FILE END test-queue-file17g.tmp *** diff --git a/postfix/src/cleanup/cleanup_out_recipient.c b/postfix/src/cleanup/cleanup_out_recipient.c index 40735e2c6..5e965fa67 100644 --- a/postfix/src/cleanup/cleanup_out_recipient.c +++ b/postfix/src/cleanup/cleanup_out_recipient.c @@ -155,6 +155,7 @@ void cleanup_out_recipient(CLEANUP_STATE *state, if ((state->flags & CLEANUP_FLAG_MAP_OK) == 0 || cleanup_virt_alias_maps == 0) { + /* Matches been_here_drop{,_fixed}() calls cleanup_del_rcpt(). */ if ((var_enable_orcpt ? been_here(state->dups, "%s\n%d\n%s\n%s", dsn_orcpt, dsn_notify, orcpt, recip) : diff --git a/postfix/src/cleanup/test-queue-file17 b/postfix/src/cleanup/test-queue-file17 new file mode 100644 index 0000000000000000000000000000000000000000..3f7c5f3e61beb1d2a6e0148b77e1c3b049fac16b GIT binary patch literal 654 zcma)(%}>HW5XCX^;(@4%dY+30B9NVJX=xDyQAj+n8fes8Q_7$MI1>sf z+S1&G**AR3M7J^>Pdelivered_hdr.tmp 2>&1 + diff delivered_hdr.ref delivered_hdr.tmp + rm -f delivered_hdr.tmp + printfck: $(OBJS) $(PROG) rm -rf printfck mkdir printfck diff --git a/postfix/src/global/been_here.c b/postfix/src/global/been_here.c index 9390c8e85..8147829c4 100644 --- a/postfix/src/global/been_here.c +++ b/postfix/src/global/been_here.c @@ -26,6 +26,14 @@ /* BH_TABLE *dup_filter; /* char *format; /* +/* int been_here_drop_fixed(dup_filter, string) +/* BH_TABLE *dup_filter; +/* char *string; +/* +/* int been_here_drop(dup_filter, format, ...) +/* BH_TABLE *dup_filter; +/* char *format; +/* /* void been_here_free(dup_filter) /* BH_TABLE *dup_filter; /* DESCRIPTION @@ -46,6 +54,16 @@ /* been_here_check_fixed() and been_here_check() are similar /* but do not update the duplicate filter. /* +/* been_here_drop_fixed() looks up a fixed string in the given +/* table, and deletes the entry if the string was found. The +/* result is non-zero (true) if the string was found, zero +/* (false) otherwise. +/* +/* been_here_drop() formats its arguments, looks up the result +/* in the given table, and removes the entry if the formatted +/* result was found. The result is non-zero (true) if the +/* formatted result was found, zero (false) otherwise. +/* /* been_here_free() releases storage for a duplicate filter. /* /* Arguments: @@ -249,3 +267,64 @@ int been_here_check_fixed(BH_TABLE *dup_filter, const char *string) return (status); } + +/* been_here_drop - remove filter entry with finer control */ + +int been_here_drop(BH_TABLE *dup_filter, const char *fmt,...) +{ + VSTRING *buf = vstring_alloc(100); + int status; + va_list ap; + + /* + * Construct the string to be dropped. + */ + va_start(ap, fmt); + vstring_vsprintf(buf, fmt, ap); + va_end(ap); + + /* + * Drop the filter entry. + */ + status = been_here_drop_fixed(dup_filter, vstring_str(buf)); + + /* + * Cleanup. + */ + vstring_free(buf); + return (status); +} + +/* been_here_drop_fixed - remove filter entry */ + +int been_here_drop_fixed(BH_TABLE *dup_filter, const char *string) +{ + VSTRING *folded_string; + const char *lookup_key; + int status; + + /* + * Special processing: case insensitive lookup. + */ + if (dup_filter->flags & BH_FLAG_FOLD) { + folded_string = vstring_alloc(100); + lookup_key = casefold(folded_string, string); + } else { + folded_string = 0; + lookup_key = string; + } + + /* + * Drop the filter entry. + */ + if ((status = been_here_check_fixed(dup_filter, lookup_key)) != 0) + htable_delete(dup_filter->table, lookup_key, (void (*) (void *)) 0); + + /* + * Cleanup. + */ + if (folded_string) + vstring_free(folded_string); + + return (status); +} diff --git a/postfix/src/global/been_here.h b/postfix/src/global/been_here.h index 2c13894f6..460191389 100644 --- a/postfix/src/global/been_here.h +++ b/postfix/src/global/been_here.h @@ -35,6 +35,8 @@ extern int been_here_fixed(BH_TABLE *, const char *); extern int PRINTFLIKE(2, 3) been_here(BH_TABLE *, const char *,...); extern int been_here_check_fixed(BH_TABLE *, const char *); extern int PRINTFLIKE(2, 3) been_here_check(BH_TABLE *, const char *,...); +extern int been_here_drop_fixed(BH_TABLE *, const char *); +extern int PRINTFLIKE(2, 3) been_here_drop(BH_TABLE *, const char *,...); /* LICENSE /* .ad diff --git a/postfix/src/global/delivered_hdr.c b/postfix/src/global/delivered_hdr.c index 5a0b6f263..d86c9e7c2 100644 --- a/postfix/src/global/delivered_hdr.c +++ b/postfix/src/global/delivered_hdr.c @@ -115,6 +115,8 @@ DELIVERED_HDR_INFO *delivered_hdr_init(VSTREAM *fp, off_t offset, int flags) char *cp; DELIVERED_HDR_INFO *info; const HEADER_OPTS *hdr; + int curr_type; + int prev_type; /* * Sanity check. @@ -130,15 +132,20 @@ DELIVERED_HDR_INFO *delivered_hdr_init(VSTREAM *fp, off_t offset, int flags) /* * XXX Assume that mail_copy() produces delivered-to headers that fit in - * a REC_TYPE_NORM record. Lowercase the delivered-to addresses for - * consistency. + * a REC_TYPE_NORM or REC_TYPE_CONT record. Lowercase the delivered-to + * addresses for consistency. * * XXX Don't get bogged down by gazillions of delivered-to headers. */ #define DELIVERED_HDR_LIMIT 1000 - while (rec_get(fp, info->buf, 0) == REC_TYPE_NORM - && info->table->used < DELIVERED_HDR_LIMIT) { + for (prev_type = REC_TYPE_NORM; + info->table->used < DELIVERED_HDR_LIMIT + && ((curr_type = rec_get(fp, info->buf, 0)) == REC_TYPE_NORM + || curr_type == REC_TYPE_CONT); + prev_type = curr_type) { + if (prev_type != REC_TYPE_NORM) + continue; if (is_header(STR(info->buf))) { if ((hdr = header_opts_find(STR(info->buf))) != 0 && hdr->type == HDR_DELIVERED_TO) { @@ -186,3 +193,69 @@ void delivered_hdr_free(DELIVERED_HDR_INFO *info) htable_free(info->table, (void (*) (void *)) 0); myfree((void *) info); } + +#ifdef TEST + +#include +#include + +char *var_drop_hdrs; + +int main(int arc, char **argv) +{ + + /* + * We write test records to a VSTRING, then read with delivered_hdr_init. + */ + VSTRING *mem_bp; + VSTREAM *mem_fp; + DELIVERED_HDR_INFO *dp; + struct test_case { + int rec_type; + const char *content; + int expect_find; + }; + const struct test_case test_cases[] = { + REC_TYPE_CONT, "Delivered-To: one", 1, + REC_TYPE_NORM, "Delivered-To: two", 0, + REC_TYPE_NORM, "Delivered-To: three", 1, + 0, + }; + const struct test_case *tp; + int actual_find; + int errors; + + msg_vstream_init(argv[0], VSTREAM_ERR); + + var_drop_hdrs = mystrdup(DEF_DROP_HDRS); + + mem_bp = vstring_alloc(VSTREAM_BUFSIZE); + if ((mem_fp = vstream_memopen(mem_bp, O_WRONLY)) == 0) + msg_panic("vstream_memopen O_WRONLY failed: %m"); + +#define REC_PUT_LIT(fp, type, lit) rec_put((fp), (type), (lit), strlen(lit)) + + for (tp = test_cases; tp->content != 0; tp++) + REC_PUT_LIT(mem_fp, tp->rec_type, tp->content); + + if (vstream_fclose(mem_fp)) + msg_panic("vstream_fclose fail: %m"); + + if ((mem_fp = vstream_memopen(mem_bp, O_RDONLY)) == 0) + msg_panic("vstream_memopen O_RDONLY failed: %m"); + + dp = delivered_hdr_init(mem_fp, 0, FOLD_ADDR_ALL); + + for (errors = 0, tp = test_cases; tp->content != 0; tp++) { + actual_find = + delivered_hdr_find(dp, tp->content + sizeof("Delivered-To:")); + msg_info("test case: %c >%s<: %s (expected: %s)", + tp->rec_type, tp->content, + actual_find == tp->expect_find ? "PASS" : "FAIL", + tp->expect_find ? "MATCH" : "NO MATCH"); + errors += (actual_find != tp->expect_find);; + } + exit(errors); +} + +#endif diff --git a/postfix/src/global/delivered_hdr.ref b/postfix/src/global/delivered_hdr.ref new file mode 100644 index 000000000..1e71d5787 --- /dev/null +++ b/postfix/src/global/delivered_hdr.ref @@ -0,0 +1,3 @@ +./delivered_hdr: test case: L >Delivered-To: one<: PASS (expected: MATCH) +./delivered_hdr: test case: N >Delivered-To: two<: PASS (expected: NO MATCH) +./delivered_hdr: test case: N >Delivered-To: three<: PASS (expected: MATCH) diff --git a/postfix/src/global/mail_version.h b/postfix/src/global/mail_version.h index f6ce1d215..129950725 100644 --- a/postfix/src/global/mail_version.h +++ b/postfix/src/global/mail_version.h @@ -20,7 +20,7 @@ * Patches change both the patchlevel and the release date. Snapshots have no * patchlevel; they change the release date only. */ -#define MAIL_RELEASE_DATE "20200920" +#define MAIL_RELEASE_DATE "20200925" #define MAIL_VERSION_NUMBER "3.6" #ifdef SNAPSHOT diff --git a/postfix/src/util/Makefile.in b/postfix/src/util/Makefile.in index d2815bee7..4a5bee332 100644 --- a/postfix/src/util/Makefile.in +++ b/postfix/src/util/Makefile.in @@ -938,22 +938,22 @@ vbuf_print_test: vbuf_print vbuf_print_test.in vbuf_print_test.ref rm -f vbuf_print_test.tmp dict_union_test: dict_open dict_union_test.in dict_union_test.ref - $(SHLIB_ENV) sh -x dict_union_test.in >dict_union_test.tmp 2>&1 + $(SHLIB_ENV) ${VALGRIND} sh -x dict_union_test.in >dict_union_test.tmp 2>&1 diff dict_union_test.ref dict_union_test.tmp rm -f dict_union_test.tmp dict_pipe_test: dict_open dict_pipe_test.in dict_pipe_test.ref - $(SHLIB_ENV) sh -x dict_pipe_test.in >dict_pipe_test.tmp 2>&1 + $(SHLIB_ENV) ${VALGRIND} sh -x dict_pipe_test.in >dict_pipe_test.tmp 2>&1 diff dict_pipe_test.ref dict_pipe_test.tmp rm -f dict_pipe_test.tmp vstring_test: dict_open vstring vstring_test.ref - $(SHLIB_ENV) ./vstring one two three >vstring_test.tmp 2>&1 + $(SHLIB_ENV) ${VALGRIND} ./vstring one two three >vstring_test.tmp 2>&1 diff vstring_test.ref vstring_test.tmp rm -f vstring_test.tmp -vstream_test: dict_open vstream vstream_test.in vstream_test.ref - $(SHLIB_ENV) ./vstream vstream_test.tmp 2>&1 +vstream_test: vstream vstream_test.in vstream_test.ref + $(SHLIB_ENV) ${VALGRIND} ./vstream vstream_test.tmp 2>&1 diff vstream_test.ref vstream_test.tmp rm -f vstream_test.tmp diff --git a/postfix/src/util/vstream.c b/postfix/src/util/vstream.c index d63489bac..2869b7e9f 100644 --- a/postfix/src/util/vstream.c +++ b/postfix/src/util/vstream.c @@ -684,6 +684,8 @@ static void vstream_buf_alloc(VBUF *bp, ssize_t len) */ bp->data = (unsigned char *) (bp->data ? myrealloc((void *) bp->data, len) : mymalloc(len)); + if (bp->flags & VSTREAM_FLAG_MEMORY) + memset(bp->data + bp->len, 0, len - bp->len); bp->len = len; if (bp->flags & VSTREAM_FLAG_READ) { bp->ptr = bp->data + used; @@ -1148,25 +1150,25 @@ off_t vstream_fseek(VSTREAM *stream, off_t offset, int whence) /* * TODO: support data length (data length != buffer length). Without data - * length information, vstream_fseek() would break vstream_fflush() for - * memory streams. + * length information, Without explicit data length information, + * vstream_memopen(O_RDONLY) has to set the VSTREAM buffer length to the + * vstring payload length to avoid accessing unwritten data after + * vstream_fseek(), because for lseek() compatibility, vstream_fseek() + * must allow seeking past the end of a file. */ if (stream->buf.flags & VSTREAM_FLAG_MEMORY) { -#ifdef PENDING_VSTREAM_FSEEK_FOR_MEMORY if (whence == SEEK_CUR) offset += (bp->ptr - bp->data); else if (whence == SEEK_END) offset += bp->len; - if (offset < 0 || offset > bp->data_len) { + if (offset < 0) { errno = EINVAL; return (-1); } + if (offset > bp->len && (bp->flags & VSTREAM_FLAG_WRITE)) + vstream_buf_space(bp, offset - bp->len); VSTREAM_BUF_AT_OFFSET(bp, offset); return (offset); -#else - errno = EOPNOTSUPP; - return (-1); -#endif } /* @@ -1351,9 +1353,10 @@ int vstream_fflush(VSTREAM *stream) /* * With VSTRING, the write pointer must be positioned behind the end of - * data. Without knowing the actual data length, VSTREAM can't support - * vstream_fseek() for memory streams, because vstream_fflush() would - * leave the VSTRING in a broken state. + * data. But vstream_fseek() changes the write position, and causes the + * data length to be forgotten. Before flushing to vstream, remember the + * current write position, move the write pointer and do what needs to be + * done, then move the write pointer back to the saved location. */ if (stream->buf.flags & VSTREAM_FLAG_MEMORY) { if (stream->buf.flags & VSTREAM_FLAG_WRITE) { @@ -1363,6 +1366,7 @@ int vstream_fflush(VSTREAM *stream) VSTREAM_BUF_AT_OFFSET(&stream->buf, stream->buf.data_len); #endif memcpy(&string->vbuf, &stream->buf, sizeof(stream->buf)); + string->vbuf.flags &= VSTRING_FLAG_MASK; VSTRING_TERMINATE(string); } return (0); @@ -1770,6 +1774,7 @@ VSTREAM *vstream_memreopen(VSTREAM *stream, VSTRING *string, int flags) switch (VSTREAM_ACC_MASK(flags)) { case O_RDONLY: stream->buf.flags |= VSTREAM_FLAG_READ; + /* Prevent reading unwritten data after vstream_fseek(). */ stream->buf.len = stream->buf.ptr - stream->buf.data; VSTREAM_BUF_AT_OFFSET(&stream->buf, 0); break; @@ -1779,7 +1784,8 @@ VSTREAM *vstream_memreopen(VSTREAM *stream, VSTRING *string, int flags) break; case O_APPEND: stream->buf.flags |= VSTREAM_FLAG_WRITE; - VSTREAM_BUF_AT_END(&stream->buf); + VSTREAM_BUF_AT_OFFSET(&stream->buf, + stream->buf.ptr - stream->buf.data); break; default: msg_panic("vstream_memopen: flags must be one of " @@ -1794,6 +1800,14 @@ static void copy_line(ssize_t bufsize) { int c; + /* + * Demonstrates that VSTREAM_CTL_BUFSIZE increases the buffer size, but + * does not decrease it. Uses VSTREAM_ERR for non-test output to avoid + * interfering with the test. + */ + vstream_fprintf(VSTREAM_ERR, "buffer size test: copy text with %ld buffer size, ignore requests to shrink\n", + (long) bufsize); + vstream_fflush(VSTREAM_ERR); vstream_control(VSTREAM_IN, CA_VSTREAM_CTL_BUFSIZE(bufsize), VSTREAM_CTL_END); vstream_control(VSTREAM_OUT, CA_VSTREAM_CTL_BUFSIZE(bufsize), VSTREAM_CTL_END); while ((c = VSTREAM_GETC(VSTREAM_IN)) != VSTREAM_EOF) { @@ -1802,59 +1816,141 @@ static void copy_line(ssize_t bufsize) break; } vstream_fflush(VSTREAM_OUT); + vstream_fprintf(VSTREAM_ERR, "actual read/write buffer sizes: %ld/%ld\n\n", + (long) VSTREAM_IN->buf.len, (long) VSTREAM_OUT->buf.len); + vstream_fflush(VSTREAM_ERR); } static void printf_number(void) { - vstream_printf("%d\n", 1234567890); + + /* + * Demonstrates that vstream_printf() use vbuf_print(). + */ + vstream_printf("formatting test: print a number\n"); + vstream_printf("%d\n\n", 1234567890); vstream_fflush(VSTREAM_OUT); } static void do_memory_stream(void) { VSTRING *buf = vstring_alloc(1); - VSTREAM *fp = vstream_memopen(buf, O_WRONLY); - -#ifdef PENDING_VSTREAM_FSEEK_FOR_MEMORY + VSTREAM *fp; off_t offset; - -#endif int ch; - vstream_fprintf(fp, "hallo world\n"); + /* + * Preload the string. + */ + vstream_printf("memory stream test prep: prefill the VSTRING\n"); + vstring_strcpy(buf, "01234567"); + vstream_printf("VSTRING content length: %ld/%ld, content: %s\n", + (long) VSTRING_LEN(buf), (long) buf->vbuf.len, + vstring_str(buf)); + VSTREAM_PUTCHAR('\n'); + vstream_fflush(VSTREAM_OUT); + + /* + * Test: open the memory VSTREAM in write-only mode, and clobber it. + */ + vstream_printf("memory stream test: open the VSTRING for writing, overwrite, close\n"); + fp = vstream_memopen(buf, O_WRONLY); + vstream_printf("initial memory VSTREAM write offset: %ld/%ld\n", + (long) vstream_ftell(fp), (long) fp->buf.len); + vstream_fprintf(fp, "hallo"); + vstream_printf("final memory VSTREAM write offset: %ld/%ld\n", + (long) vstream_ftell(fp), (long) fp->buf.len); + vstream_fclose(fp); + vstream_printf("VSTRING content length: %ld/%ld, content: %s\n", + (long) VSTRING_LEN(buf), (long) buf->vbuf.len, + vstring_str(buf)); + VSTREAM_PUTCHAR('\n'); + vstream_fflush(VSTREAM_OUT); + + /* + * Test: open the memory VSTREAM for append. vstream_memopen() sets the + * buffer length to the VSTRING buffer length, and positions the write + * pointer at the VSTRING write position. Write some content, then + * overwrite one character. + */ + vstream_printf("memory stream test: open the VSTRING for append, write multiple, then overwrite 1\n"); + fp = vstream_memopen(buf, O_APPEND); + vstream_printf("initial memory VSTREAM write offset: %ld/%ld\n", + (long) vstream_ftell(fp), (long) fp->buf.len); + vstream_fprintf(fp, " world"); + vstream_printf("final memory VSTREAM write offset: %ld/%ld\n", + (long) vstream_ftell(fp), (long) fp->buf.len); if (vstream_fflush(fp)) msg_fatal("vstream_fflush: %m"); - vstream_printf("final memory stream write offset: %ld\n", - (long) vstream_ftell(fp)); -#ifdef PENDING_VSTREAM_FSEEK_FOR_MEMORY - vstream_fflush(fp); - vstream_printf("buffer size: %ld, content: %s", - (long) VSTRING_LEN(buf), vstring_str(buf)); + vstream_printf("VSTRING content length: %ld/%ld, content: %s\n", + (long) VSTRING_LEN(buf), (long) buf->vbuf.len, + vstring_str(buf)); + VSTREAM_PUTCHAR('\n'); + + /* + * While the stream is still open, replace the second character. + */ + vstream_printf("replace second character and close\n"); if ((offset = vstream_fseek(fp, 1, SEEK_SET)) != 1) msg_panic("unexpected vstream_fseek return: %ld, expected: %ld", (long) offset, (long) 1); VSTREAM_PUTC('e', fp); -#endif + + /* + * Skip to the end of the content, so that vstream_fflush() will update + * the VSTRING with the right content length. + */ + if ((offset = vstream_fseek(fp, VSTRING_LEN(buf), SEEK_SET)) != VSTRING_LEN(buf)) + msg_panic("unexpected vstream_fseek return: %ld, expected: %ld", + (long) offset, (long) VSTRING_LEN(buf)); vstream_fclose(fp); - vstream_printf("buffer size: %ld, content: %s", - (long) VSTRING_LEN(buf), vstring_str(buf)); + vstream_printf("VSTRING content length: %ld/%ld, content: %s\n", + (long) VSTRING_LEN(buf), (long) buf->vbuf.len, + vstring_str(buf)); + VSTREAM_PUTCHAR('\n'); vstream_fflush(VSTREAM_OUT); + /* + * TODO: test that in write/append mode, seek past the end of data will + * result in zero-filled space. + */ + + /* + * Test: Open the VSTRING for reading. This time, vstream_memopen() will + * set the VSTREAM buffer length to the content length of the VSTRING, so + * that it won't attempt to read past the end of the content. + */ + vstream_printf("memory stream test: open VSTRING for reading, then read\n"); fp = vstream_memopen(buf, O_RDONLY); - vstream_printf("reading memory stream: "); + vstream_printf("initial memory VSTREAM read offset: %ld/%ld\n", + (long) vstream_ftell(fp), (long) fp->buf.len); + vstream_printf("reading memory VSTREAM: "); while ((ch = VSTREAM_GETC(fp)) != VSTREAM_EOF) VSTREAM_PUTCHAR(ch); -#ifdef PENDING_VSTREAM_FSEEK_FOR_MEMORY - vstream_printf("reading memory stream from offset 6: "); - if ((offset = vstream_fseek(fp, 6, SEEK_SET)) != 6) + VSTREAM_PUTCHAR('\n'); + vstream_printf("final memory VSTREAM read offset: %ld/%ld\n", + (long) vstream_ftell(fp), (long) fp->buf.len); + vstream_printf("seeking to offset %ld should work: ", + (long) fp->buf.len + 1); + vstream_fflush(VSTREAM_OUT); + if ((offset = vstream_fseek(fp, fp->buf.len + 1, SEEK_SET)) != fp->buf.len + 1) msg_panic("unexpected vstream_fseek return: %ld, expected: %ld", - (long) offset, (long) 6); - while ((ch = VSTREAM_GETC(fp)) != VSTREAM_EOF) - VSTREAM_PUTCHAR(ch); -#endif - vstream_printf("final memory stream read offset: %ld\n", - (long) vstream_ftell(fp)); + (long) offset, (long) fp->buf.len + 1); + vstream_printf("PASS\n"); + vstream_fflush(VSTREAM_OUT); + vstream_printf("VSTREAM_GETC should return VSTREAM_EOF\n"); + ch = VSTREAM_GETC(fp); + if (ch != VSTREAM_EOF) + msg_panic("unexpected vstream_fseek VSTREAM_GETC return: %d, expected: %d", + ch, VSTREAM_EOF); + vstream_printf("PASS\n"); + vstream_printf("final memory VSTREAM read offset: %ld/%ld\n", + (long) vstream_ftell(fp), (long) fp->buf.len); + vstream_printf("VSTRING content length: %ld/%ld, content: %s\n", + (long) VSTRING_LEN(buf), (long) buf->vbuf.len, + vstring_str(buf)); + VSTREAM_PUTCHAR('\n'); vstream_fflush(VSTREAM_OUT); vstream_fclose(fp); vstring_free(buf); @@ -1863,14 +1959,18 @@ static void do_memory_stream(void) /* * Exercise some of the features. */ + +#include + int main(int argc, char **argv) { + msg_vstream_init(argv[0], VSTREAM_ERR); /* * Test buffer expansion and shrinking. Formatted print may silently * expand the write buffer and cause multiple bytes to be written. */ - copy_line(1); /* one-byte read/write */ + copy_line(1); /* one-byte read/write */ copy_line(2); /* two-byte read/write */ copy_line(1); /* two-byte read/write */ printf_number(); /* multi-byte write */ diff --git a/postfix/src/util/vstream_test.ref b/postfix/src/util/vstream_test.ref index cf03053ae..eaa9952ba 100644 --- a/postfix/src/util/vstream_test.ref +++ b/postfix/src/util/vstream_test.ref @@ -1,8 +1,41 @@ +buffer size test: copy text with 1 buffer size, ignore requests to shrink abcdef +actual read/write buffer sizes: 1/1 + +buffer size test: copy text with 2 buffer size, ignore requests to shrink ghijkl +actual read/write buffer sizes: 2/2 + +buffer size test: copy text with 1 buffer size, ignore requests to shrink mnopqr +actual read/write buffer sizes: 2/2 + +formatting test: print a number 1234567890 -final memory stream write offset: 12 -buffer size: 12, content: hallo world -reading memory stream: hallo world -final memory stream read offset: 12 + +memory stream test prep: prefill the VSTRING +VSTRING content length: 8/8, content: 01234567 + +memory stream test: open the VSTRING for writing, overwrite, close +initial memory VSTREAM write offset: 0/8 +final memory VSTREAM write offset: 5/8 +VSTRING content length: 5/8, content: hallo + +memory stream test: open the VSTRING for append, write multiple, then overwrite 1 +initial memory VSTREAM write offset: 5/8 +final memory VSTREAM write offset: 11/16 +VSTRING content length: 11/16, content: hallo world + +replace second character and close +VSTRING content length: 11/16, content: hello world + +memory stream test: open VSTRING for reading, then read +initial memory VSTREAM read offset: 0/11 +reading memory VSTREAM: hello world +final memory VSTREAM read offset: 11/11 +seeking to offset 12 should work: PASS +VSTREAM_GETC should return VSTREAM_EOF +PASS +final memory VSTREAM read offset: 12/11 +VSTRING content length: 11/16, content: hello world + diff --git a/postfix/src/util/vstring.h b/postfix/src/util/vstring.h index 144e74551..49fd960aa 100644 --- a/postfix/src/util/vstring.h +++ b/postfix/src/util/vstring.h @@ -62,6 +62,7 @@ CHECK_VAL_HELPER_DCL(VSTRING_CTL, ssize_t); /* Flags 24..31 are reserved for VSTRING. */ #define VSTRING_FLAG_EXACT (1<<24) /* exact allocation for tests */ +#define VSTRING_FLAG_MASK (255 << 24) /* * Macros. Unsafe macros have UPPERCASE names.