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.
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
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
../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
../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
../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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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 \
}
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 */
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\"",
} 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) {
--- /dev/null
+#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
--- /dev/null
+#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
--- /dev/null
+#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
--- /dev/null
+#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
--- /dev/null
+#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
--- /dev/null
+#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
--- /dev/null
+#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
--- /dev/null
+./cleanup_milter: flags = enable_header_body_filter enable_milters
--- /dev/null
+*** 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 ***
--- /dev/null
+./cleanup_milter: flags = enable_header_body_filter enable_milters
--- /dev/null
+*** 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 ***
--- /dev/null
+./cleanup_milter: flags = enable_header_body_filter enable_milters
--- /dev/null
+*** 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 ***
--- /dev/null
+./cleanup_milter: flags = enable_header_body_filter enable_milters
--- /dev/null
+*** 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 ***
--- /dev/null
+./cleanup_milter: enable_original_recipient: 0
+./cleanup_milter: flags = enable_header_body_filter enable_milters
--- /dev/null
+*** 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 ***
--- /dev/null
+./cleanup_milter: enable_original_recipient: 0
+./cleanup_milter: flags = enable_header_body_filter enable_milters
--- /dev/null
+*** 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 ***
--- /dev/null
+./cleanup_milter: enable_original_recipient: 0
+./cleanup_milter: flags = enable_header_body_filter enable_milters
--- /dev/null
+*** 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 ***
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) :
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
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 \
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
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
/* 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
/* 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:
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);
+}
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
char *cp;
DELIVERED_HDR_INFO *info;
const HEADER_OPTS *hdr;
+ int curr_type;
+ int prev_type;
/*
* Sanity check.
/*
* 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) {
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
--- /dev/null
+./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)
* 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
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
*/
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;
/*
* 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
}
/*
/*
* 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) {
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);
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;
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 "
{
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) {
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);
/*
* 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 */
+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
+
/* 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.