2
0
mirror of https://github.com/vdukhovni/postfix synced 2025-08-22 18:07:41 +00:00

postfix-3.6-20200925

This commit is contained in:
Wietse Venema 2020-09-25 00:00:00 -05:00 committed by Viktor Dukhovni
parent e4f3f9ea70
commit f7ae9a62e3
37 changed files with 910 additions and 173 deletions

View File

@ -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.

View File

@ -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

View File

@ -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 <bug1.in
$(SHLIB_ENV) ../postcat/postcat -ov bug1.file.tmp 2>/dev/null >bug1.tmp
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <bug1.in
$(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov bug1.file.tmp 2>/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 <bug2.in
$(SHLIB_ENV) ../postcat/postcat -ov bug2.file.tmp 2>/dev/null >bug2.tmp
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <bug2.in
$(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov bug2.file.tmp 2>/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 <bug3.in
$(SHLIB_ENV) ../postcat/postcat -ov bug3.file.tmp 2>/dev/null >bug3.tmp
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <bug3.in
$(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov bug3.file.tmp 2>/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 <cleanup_milter.in1
$(SHLIB_ENV) ../postcat/postcat -ov test-queue-file.tmp 2>/dev/null >cleanup_milter.tmp
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in1
$(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file.tmp 2>/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 <cleanup_milter.in2
$(SHLIB_ENV) ../postcat/postcat -ov test-queue-file2.tmp 2>/dev/null >cleanup_milter.tmp
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in2
$(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file2.tmp 2>/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 <cleanup_milter.in3
$(SHLIB_ENV) ../postcat/postcat -ov test-queue-file3.tmp 2>/dev/null >cleanup_milter.tmp
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in3
$(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file3.tmp 2>/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 <cleanup_milter.in4a
$(SHLIB_ENV) ../postcat/postcat -ov test-queue-file4.tmp 2>/dev/null >cleanup_milter.tmp
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in4a
$(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file4.tmp 2>/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 <cleanup_milter.in4b
$(SHLIB_ENV) ../postcat/postcat -ov test-queue-file4.tmp 2>/dev/null >cleanup_milter.tmp
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in4b
$(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file4.tmp 2>/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 <cleanup_milter.in4c
$(SHLIB_ENV) ../postcat/postcat -ov test-queue-file4.tmp 2>/dev/null >cleanup_milter.tmp
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in4c
$(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file4.tmp 2>/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 <cleanup_milter.in5
$(SHLIB_ENV) ../postcat/postcat -ov test-queue-file5.tmp 2>/dev/null >cleanup_milter.tmp
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in5
$(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file5.tmp 2>/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 <cleanup_milter.in6a
$(SHLIB_ENV) ../postcat/postcat -ov test-queue-file6.tmp 2>/dev/null >cleanup_milter.tmp
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in6a
$(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file6.tmp 2>/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 <cleanup_milter.in6b
$(SHLIB_ENV) ../postcat/postcat -ov test-queue-file6.tmp 2>/dev/null >cleanup_milter.tmp
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in6b
$(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file6.tmp 2>/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 <cleanup_milter.in6c
$(SHLIB_ENV) ../postcat/postcat -ov test-queue-file6.tmp 2>/dev/null >cleanup_milter.tmp
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in6c
$(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file6.tmp 2>/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 <cleanup_milter.in7
$(SHLIB_ENV) ../postcat/postcat -ov test-queue-file7.tmp 2>/dev/null >cleanup_milter.tmp
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in7
$(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file7.tmp 2>/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 <cleanup_milter.in8
$(SHLIB_ENV) ../postcat/postcat -ov test-queue-file8.tmp 2>/dev/null >cleanup_milter.tmp
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in8
$(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file8.tmp 2>/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 <cleanup_milter.in9
$(SHLIB_ENV) ../postcat/postcat -ov test-queue-file9.tmp 2>/dev/null >cleanup_milter.tmp
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in9
$(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file9.tmp 2>/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 <cleanup_milter.in10a
$(SHLIB_ENV) ../postcat/postcat -ov test-queue-file10.tmp 2>/dev/null >cleanup_milter.tmp
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in10a
$(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file10.tmp 2>/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 <cleanup_milter.in10b
$(SHLIB_ENV) ../postcat/postcat -ov test-queue-file10.tmp 2>/dev/null >cleanup_milter.tmp
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in10b
$(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file10.tmp 2>/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 <cleanup_milter.in10c
$(SHLIB_ENV) ../postcat/postcat -ov test-queue-file10.tmp 2>/dev/null >cleanup_milter.tmp
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in10c
$(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file10.tmp 2>/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 <cleanup_milter.in10d
$(SHLIB_ENV) ../postcat/postcat -ov test-queue-file10.tmp 2>/dev/null >cleanup_milter.tmp
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in10d
$(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file10.tmp 2>/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 <cleanup_milter.in10e
$(SHLIB_ENV) ../postcat/postcat -ov test-queue-file10.tmp 2>/dev/null >cleanup_milter.tmp
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in10e
$(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file10.tmp 2>/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 <cleanup_milter.in11
$(SHLIB_ENV) ../postcat/postcat -ov test-queue-file11.tmp 2>/dev/null >cleanup_milter.tmp
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in11
$(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file11.tmp 2>/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 <cleanup_milter.in12
$(SHLIB_ENV) ../postcat/postcat -ov test-queue-file12.tmp 2>/dev/null >cleanup_milter.tmp
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in12
$(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file12.tmp 2>/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 <cleanup_milter.in13a
$(SHLIB_ENV) ../postcat/postcat -ov test-queue-file13a.tmp 2>/dev/null >cleanup_milter.tmp
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in13a
$(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file13a.tmp 2>/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 <cleanup_milter.in13b
$(SHLIB_ENV) ../postcat/postcat -ov test-queue-file13b.tmp 2>/dev/null >cleanup_milter.tmp
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in13b
$(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file13b.tmp 2>/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 <cleanup_milter.in13c
$(SHLIB_ENV) ../postcat/postcat -ov test-queue-file13c.tmp 2>/dev/null >cleanup_milter.tmp
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in13c
$(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file13c.tmp 2>/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 <cleanup_milter.in13d
$(SHLIB_ENV) ../postcat/postcat -ov test-queue-file13d.tmp 2>/dev/null >cleanup_milter.tmp
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in13d
$(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file13d.tmp 2>/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 <cleanup_milter.in13e
$(SHLIB_ENV) ../postcat/postcat -ov test-queue-file13e.tmp 2>/dev/null >cleanup_milter.tmp
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in13e
$(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file13e.tmp 2>/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 <cleanup_milter.in13g
$(SHLIB_ENV) ../postcat/postcat -ov test-queue-file13g.tmp 2>/dev/null >cleanup_milter.tmp
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in13g
$(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file13g.tmp 2>/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 <cleanup_milter.in13h
$(SHLIB_ENV) ../postcat/postcat -ov test-queue-file13h.tmp 2>/dev/null >cleanup_milter.tmp
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in13h
$(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file13h.tmp 2>/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 <cleanup_milter.in13i
$(SHLIB_ENV) ../postcat/postcat -ov test-queue-file13i.tmp 2>/dev/null >cleanup_milter.tmp
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in13i
$(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file13i.tmp 2>/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 <cleanup_milter.in13f
$(SHLIB_ENV) ../postcat/postcat -ov test-queue-file13f.tmp 2>/dev/null >cleanup_milter.tmp
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in13f
$(SHLIB_ENV) $(VALGRIND) ../postcat/postcat -ov test-queue-file13f.tmp 2>/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.in14a 2>cleanup_milter.tmp1
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in14a 2>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.in14b 2>cleanup_milter.tmp1
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in14b 2>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.in14c 2>cleanup_milter.tmp1
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in14c 2>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.in14d 2>cleanup_milter.tmp1
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in14d 2>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.in14e 2>cleanup_milter.tmp1
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in14e 2>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.in14f 2>cleanup_milter.tmp1
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in14f 2>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.in14g 2>cleanup_milter.tmp1
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in14g 2>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.in15a 2>cleanup_milter.tmp1
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in15a 2>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.in15b 2>cleanup_milter.tmp1
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in15b 2>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.in15c 2>cleanup_milter.tmp1
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in15c 2>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.in15d 2>cleanup_milter.tmp1
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in15d 2>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.in15e 2>cleanup_milter.tmp1
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in15e 2>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.in15f 2>cleanup_milter.tmp1
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in15f 2>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.in15g 2>cleanup_milter.tmp1
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in15g 2>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.in15h 2>cleanup_milter.tmp1
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in15h 2>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.in15i 2>cleanup_milter.tmp1
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in15i 2>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.in16a 2>cleanup_milter.tmp1
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in16a 2>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.in16b 2>cleanup_milter.tmp1
$(SHLIB_ENV) $(VALGRIND) ./cleanup_milter <cleanup_milter.in16b 2>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.in17a 2>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.in17b 2>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.in17c 2>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.in17d 2>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.in17e 2>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.in17f 2>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.in17g 2>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 \

View File

@ -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) {

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -0,0 +1 @@
./cleanup_milter: flags = enable_header_body_filter enable_milters

View File

@ -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 ***

View File

@ -0,0 +1 @@
./cleanup_milter: flags = enable_header_body_filter enable_milters

View File

@ -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 ***

View File

@ -0,0 +1 @@
./cleanup_milter: flags = enable_header_body_filter enable_milters

View File

@ -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 ***

View File

@ -0,0 +1 @@
./cleanup_milter: flags = enable_header_body_filter enable_milters

View File

@ -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 ***

View File

@ -0,0 +1,2 @@
./cleanup_milter: enable_original_recipient: 0
./cleanup_milter: flags = enable_header_body_filter enable_milters

View File

@ -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 ***

View File

@ -0,0 +1,2 @@
./cleanup_milter: enable_original_recipient: 0
./cleanup_milter: flags = enable_header_body_filter enable_milters

View File

@ -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 ***

View File

@ -0,0 +1,2 @@
./cleanup_milter: enable_original_recipient: 0
./cleanup_milter: flags = enable_header_body_filter enable_milters

View File

@ -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 ***

View File

@ -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) :

Binary file not shown.

View File

@ -125,7 +125,7 @@ TESTPROG= domain_list dot_lockfile mail_addr_crunch mail_addr_find \
data_redirect addr_match_list safe_ultostr verify_sender_addr \
mail_version mail_dict server_acl uxtext mail_parm_split \
fold_addr smtp_reply_footer mail_addr_map normalize_mailhost_addr \
haproxy_srvr map_search
haproxy_srvr map_search delivered_hdr
LIBS = ../../lib/lib$(LIB_PREFIX)util$(LIB_SUFFIX)
LIB_DIR = ../../lib
@ -393,6 +393,9 @@ haproxy_srvr: haproxy_srvr.c $(LIB) $(LIBS)
map_search: map_search.c $(LIB) $(LIBS)
$(CC) $(CFLAGS) -DTEST -o $@ $@.c $(LIB) $(LIBS) $(SYSLIBS)
delivered_hdr: delivered_hdr.c $(LIB) $(LIBS)
$(CC) $(CFLAGS) -DTEST -o $@ $@.c $(LIB) $(LIBS) $(SYSLIBS)
tests: tok822_test mime_tests strip_addr_test tok822_limit_test \
xtext_test scache_multi_test ehlo_mask_test \
namadr_list_test mail_conf_time_test header_body_checks_tests \
@ -400,7 +403,8 @@ tests: tok822_test mime_tests strip_addr_test tok822_limit_test \
safe_ultostr_test mail_parm_split_test fold_addr_test \
smtp_reply_footer_test off_cvt_test mail_addr_crunch_test \
mail_addr_find_test mail_addr_map_test quote_822_local_test \
normalize_mailhost_addr_test haproxy_srvr_test map_search_test
normalize_mailhost_addr_test haproxy_srvr_test map_search_test \
delivered_hdr_test
mime_tests: mime_test mime_nest mime_8bit mime_dom mime_trunc mime_cvt \
mime_cvt2 mime_cvt3 mime_garb1 mime_garb2 mime_garb3 mime_garb4
@ -728,6 +732,11 @@ map_search_test: update map_search map_search.ref
diff map_search.ref map_search.tmp
rm -f map_search.tmp
delivered_hdr_test: update delivered_hdr delivered_hdr.ref
-$(SHLIB_ENV) $(VALGRIND) ./delivered_hdr >delivered_hdr.tmp 2>&1
diff delivered_hdr.ref delivered_hdr.tmp
rm -f delivered_hdr.tmp
printfck: $(OBJS) $(PROG)
rm -rf printfck
mkdir printfck

View File

@ -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);
}

View File

@ -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

View File

@ -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 <msg_vstream.h>
#include <mail_params.h>
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

View File

@ -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)

View File

@ -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

View File

@ -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.in >vstream_test.tmp 2>&1
vstream_test: vstream vstream_test.in vstream_test.ref
$(SHLIB_ENV) ${VALGRIND} ./vstream <vstream_test.in >vstream_test.tmp 2>&1
diff vstream_test.ref vstream_test.tmp
rm -f vstream_test.tmp

View File

@ -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 <msg_vstream.h>
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 */

View File

@ -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

View File

@ -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.