2
0
mirror of https://github.com/vdukhovni/postfix synced 2025-08-22 01:49:47 +00:00

postfix-3.10-20240917

This commit is contained in:
Wietse Z Venema 2024-09-17 00:00:00 -05:00 committed by Viktor Dukhovni
parent e6eb5ba2b6
commit 7655cf261d
37 changed files with 228 additions and 534 deletions

View File

@ -28199,4 +28199,24 @@ Apologies for any names omitted.
with guidance to enforce that the From: header address
matches the envelope sender (MAIL FROM) address. File:
proto/postconf.proto.
20240909
Bitrot: some platforms prefer the pkgconf command over pkg-config,
which in turn has superseded icu-config. File: makedefs.
20230910
Cleanup: the enable_threaded_bounces feature was re-implemented.
This simplifies the code and improves the handling of
multiline Message-Id: headers (no software should generate
those, but...). Files: bounce/bounce_notify_util.c,
cleanup/cleanup.h, cleanup/cleanup_extracted.c,
cleanup/cleanup_message.c, cleanup/cleanup_state.c,
global/mail_proto.h, multiple bounce testfiles.
20240917
Minor feature: "postcat -f" option to prepend the filename
to each output line. This simplifies test data development.
File: postcat/postcat.c.

View File

@ -6,6 +6,12 @@ Wish list:
Disable -DSNAPSHOT and -DNONPROD in makedefs.
Add tests for Message-ID extraction in the cleanup daemon.
The postdrop code should be more explicit about what
attrributes it will pass through. rec_attr_map() is not
supposed to be an approver.
Many master.cf services don't expect wakeup calls, resulting
in weird warnings. Maybe the master daemon could signal the
wakeup intent through a child process command-line option,
@ -16,6 +22,13 @@ Wish list:
using FIFOs anymore, and trigger servers could use a proper
(attribute, value) protocol.
The Sendmail feature _FFR_MDS_NEGOTIATE allows negotiating
a larger milter command data size limit. To be investigated:
what parts of the protocol are included in this limit when
sending a message header (header name, protocol formatting,
etc.) and how this will interact with the Postfix built-in
header_size_limit (default: 102400).
SEND_ATTR_FUNC should send the name of the object being sent,
so that SCAN_ATTR_FUNC can check it.

View File

@ -66,33 +66,34 @@ MAKEDEFS(1) MAKEDEFS(1)
<b>-DNO_EAI</b>
Do not build with EAI (SMTPUTF8) support. By default, EAI
support is compiled in when the "pkg-config" command is
found, or the deprecated "icu-config" command.
support is compiled in when the "pkgconf" or "pkg-config"
command are found, or the deprecated "icu-config" com-
mand.
<b>-DNO_INLINE</b>
Do not require support for C99 "inline" functions.
Instead, implement argument typechecks for
non-(printf/scanf)-like functions with ternary operators
Instead, implement argument typechecks for
non-(printf/scanf)-like functions with ternary operators
and unreachable code.
<b>-DNO_IPV6</b>
Do not build with IPv6 support. By default, IPv6 support
is compiled in on platforms that are known to have IPv6
is compiled in on platforms that are known to have IPv6
support.
Note: this directive is for debugging and testing only.
It is not guaranteed to work on all platforms. If you
don't want IPv6 support, set "<a href="postconf.5.html#inet_protocols">inet_protocols</a> = ipv4" in
Note: this directive is for debugging and testing only.
It is not guaranteed to work on all platforms. If you
don't want IPv6 support, set "<a href="postconf.5.html#inet_protocols">inet_protocols</a> = ipv4" in
<a href="postconf.5.html">main.cf</a>.
<b>-DNO_IP_CYRUS_SASL_AUTH</b>
Don't pass remote SMTP client and Postfix SMTP server IP
address and port information to the Cyrus SASL library.
Don't pass remote SMTP client and Postfix SMTP server IP
address and port information to the Cyrus SASL library.
This is compatible with Postfix &lt; 3.2.
<b>-DNO_KQUEUE</b>
Do not build with FreeBSD/NetBSD/OpenBSD/MacOSX KQUEUE
support. By default, KQUEUE support is compiled in on
Do not build with FreeBSD/NetBSD/OpenBSD/MacOSX KQUEUE
support. By default, KQUEUE support is compiled in on
platforms that are known to support it.
<b>-DNO_NIS</b>
@ -112,45 +113,45 @@ MAKEDEFS(1) MAKEDEFS(1)
Disable support for POSIX getpwnam_r/getpwuid_r.
<b>-DNO_RES_NCALLS</b>
Do not build with the threadsafe resolver(5) API
Do not build with the threadsafe resolver(5) API
(res_ninit() etc.).
<b>-DNO_SIGSETJMP</b>
Use setjmp()/longjmp() instead of sigsetjmp()/sig-
longjmp(). By default, Postfix uses sigsetjmp()/sig-
Use setjmp()/longjmp() instead of sigsetjmp()/sig-
longjmp(). By default, Postfix uses sigsetjmp()/sig-
longjmp() when they appear to work.
<b>-DNO_SNPRINTF</b>
Use sprintf() instead of snprintf(). By default, Postfix
Use sprintf() instead of snprintf(). By default, Postfix
uses snprintf() except on ancient systems.
<b>DEBUG=</b><i>debug</i><b>_</b><i>level</i>
Specifies a non-default debugging level. The default is <b>-g</b>.
Specifies a non-default debugging level. The default is <b>-g</b>.
Specify <b>DEBUG=</b> to turn off debugging.
<b>OPT=</b><i>optimization</i><b>_</b><i>level</i>
Specifies a non-default optimization level. The default is <b>-O</b>.
Specifies a non-default optimization level. The default is <b>-O</b>.
Specify <b>OPT=</b> to turn off optimization.
<b>POSTFIX_INSTALL_OPTS=</b><i>-option...</i>
Specifies options for the postfix-install command, separated by
whitespace. Currently, the only supported option is
Specifies options for the postfix-install command, separated by
whitespace. Currently, the only supported option is
<b>-keep-build-mtime</b>.
<b>SHLIB_CFLAGS=</b><i>flags</i>
Override the compiler flags (typically, "-fPIC") for Postfix
Override the compiler flags (typically, "-fPIC") for Postfix
dynamically-linked libraries and database plugins.
This feature was introduced with Postfix 3.0.
<b>SHLIB_RPATH=</b><i>rpath</i>
Override the runpath (typically, "'-Wl,-rpath,${SHLIB_DIR}'")
Override the runpath (typically, "'-Wl,-rpath,${SHLIB_DIR}'")
for Postfix dynamically-linked libraries.
This feature was introduced with Postfix 3.0.
<b>SHLIB_SUFFIX=</b><i>suffix</i>
Override the filename suffix (typically, ".so") for Postfix
Override the filename suffix (typically, ".so") for Postfix
dynamically-linked libraries and database plugins.
This feature was introduced with Postfix 3.0.
@ -158,7 +159,7 @@ MAKEDEFS(1) MAKEDEFS(1)
<b>shared=yes</b>
<b>shared=no</b>
Enable (disable) Postfix builds with dynamically-linked
Enable (disable) Postfix builds with dynamically-linked
libraries typically named $<a href="postconf.5.html#shlib_directory">shlib_directory</a>/libpostfix-*.so.*.
This feature was introduced with Postfix 3.0.
@ -166,39 +167,39 @@ MAKEDEFS(1) MAKEDEFS(1)
<b>dynamicmaps=yes</b>
<b>dynamicmaps=no</b>
Enable (disable) Postfix builds with the configuration file
Enable (disable) Postfix builds with the configuration file
$<a href="postconf.5.html#meta_directory">meta_directory</a>/dynamicmaps.cf and dynamically-loadable database
plugins typically named postfix-*.so.*. The setting "dynam-
icmaps=yes" implicitly enables Postfix dynamically-linked
plugins typically named postfix-*.so.*. The setting "dynam-
icmaps=yes" implicitly enables Postfix dynamically-linked
libraries.
This feature was introduced with Postfix 3.0.
<b>pie=yes</b>
<b>pie=no</b> Enable (disable) Postfix builds with position-independent exe-
<b>pie=no</b> Enable (disable) Postfix builds with position-independent exe-
cutables, on platforms where this is supported.
This feature was introduced with Postfix 3.0.
<i>installation</i><b>_</b><i>parameter</i><b>=</b><i>value</i>...
Override the compiled-in default value of the specified instal-
lation parameter(s). The following parameters are supported in
Override the compiled-in default value of the specified instal-
lation parameter(s). The following parameters are supported in
this context:
<a href="postconf.5.html#command_directory">command_directory</a> <a href="postconf.5.html#config_directory">config_directory</a> <a href="postconf.5.html#daemon_directory">daemon_directory</a> <a href="postconf.5.html#data_directory">data_direc</a>-
<a href="postconf.5.html#data_directory">tory</a> <a href="postconf.5.html#default_database_type">default_database_type</a> <a href="postconf.5.html#html_directory">html_directory</a> <a href="postconf.5.html#mail_spool_directory">mail_spool_directory</a>
<a href="postconf.5.html#mailq_path">mailq_path</a> <a href="postconf.5.html#manpage_directory">manpage_directory</a> <a href="postconf.5.html#meta_directory">meta_directory</a> <a href="postconf.5.html#newaliases_path">newaliases_path</a>
<a href="postconf.5.html#queue_directory">queue_directory</a> <a href="postconf.5.html#readme_directory">readme_directory</a> <a href="postconf.5.html#sendmail_path">sendmail_path</a> <a href="postconf.5.html#shlib_directory">shlib_directory</a>
<a href="postconf.5.html#command_directory">command_directory</a> <a href="postconf.5.html#config_directory">config_directory</a> <a href="postconf.5.html#daemon_directory">daemon_directory</a> <a href="postconf.5.html#data_directory">data_direc</a>-
<a href="postconf.5.html#data_directory">tory</a> <a href="postconf.5.html#default_database_type">default_database_type</a> <a href="postconf.5.html#html_directory">html_directory</a> <a href="postconf.5.html#mail_spool_directory">mail_spool_directory</a>
<a href="postconf.5.html#mailq_path">mailq_path</a> <a href="postconf.5.html#manpage_directory">manpage_directory</a> <a href="postconf.5.html#meta_directory">meta_directory</a> <a href="postconf.5.html#newaliases_path">newaliases_path</a>
<a href="postconf.5.html#queue_directory">queue_directory</a> <a href="postconf.5.html#readme_directory">readme_directory</a> <a href="postconf.5.html#sendmail_path">sendmail_path</a> <a href="postconf.5.html#shlib_directory">shlib_directory</a>
<a href="postconf.5.html#openssl_path">openssl_path</a>
See the <a href="postconf.5.html">postconf(5)</a> manpage for a description of these parame-
See the <a href="postconf.5.html">postconf(5)</a> manpage for a description of these parame-
ters.
This feature was introduced with Postfix 3.0.
<b>WARN=</b><i>warning</i><b>_</b><i>flags</i>
Specifies non-default gcc compiler warning options for use when
Specifies non-default gcc compiler warning options for use when
"make" is invoked in a source subdirectory only.
<b>LICENSE</b>

View File

@ -11,7 +11,7 @@ POSTCAT(1) POSTCAT(1)
postcat - show Postfix queue file contents
<b>SYNOPSIS</b>
<b>postcat</b> [<b>-bdehnoqv</b>] [<b>-c</b> <i>config</i><b>_</b><i>dir</i>] [<i>files</i>...]
<b>postcat</b> [<b>-bdefhnoqv</b>] [<b>-c</b> <i>config</i><b>_</b><i>dir</i>] [<i>files</i>...]
<b>DESCRIPTION</b>
The <a href="postcat.1.html"><b>postcat</b>(1)</a> command prints the contents of the named <i>files</i> in
@ -41,6 +41,8 @@ POSTCAT(1) POSTCAT(1)
This feature is available in Postfix 2.7 and later.
<b>-f</b> Prepend the file name to each output line.
<b>-h</b> Show message header content. The <b>-h</b> option produces output from
the beginning of the message up to, but not including, the first
non-header line.

View File

@ -61,7 +61,8 @@
# are known to support it.
# .IP \fB-DNO_EAI\fR
# Do not build with EAI (SMTPUTF8) support. By default, EAI
# support is compiled in when the "pkg-config" command is
# support is compiled in when the "pkgconf" or "pkg-config"
# command are
# found, or the deprecated "icu-config" command.
# .IP \fB-DNO_INLINE\fR
# Do not require support for C99 "inline" functions. Instead,
@ -878,8 +879,10 @@ esac
case "$CCARGS" in
*-DNO_EAI*) CCARGS="$CCARGS "'-DDEF_SMTPUTF8_ENABLE=\"no\"';;
*) icu_cppflags=`((pkg-config --cflags icu-uc icu-i18n) ||
(pkgconf --cflags icu-uc icu-i18n) ||
(icu-config --cppflags)) 2>/dev/null` && {
icu_ldflags=`((pkg-config --libs icu-uc icu-i18n) ||
(pkgconf --libs icu-uc icu-i18n) ||
(icu-config --ldflags)) 2>/dev/null` && {
trap 'rm -f makedefs.test makedefs.test.[co]' 1 2 3 15
cat >makedefs.test.c <<'EOF'

View File

@ -64,7 +64,8 @@ By default, EPOLL support is compiled in on platforms that
are known to support it.
.IP \fB\-DNO_EAI\fR
Do not build with EAI (SMTPUTF8) support. By default, EAI
support is compiled in when the "pkg\-config" command is
support is compiled in when the "pkgconf" or "pkg\-config"
command are
found, or the deprecated "icu\-config" command.
.IP \fB\-DNO_INLINE\fR
Do not require support for C99 "inline" functions. Instead,

View File

@ -8,7 +8,7 @@ show Postfix queue file contents
.SH "SYNOPSIS"
.na
.nf
\fBpostcat\fR [\fB\-bdehnoqv\fR] [\fB\-c \fIconfig_dir\fR] [\fIfiles\fR...]
\fBpostcat\fR [\fB\-bdefhnoqv\fR] [\fB\-c \fIconfig_dir\fR] [\fIfiles\fR...]
.SH DESCRIPTION
.ad
.fi
@ -39,6 +39,8 @@ Print the decimal type of each record.
Show message envelope content.
.sp
This feature is available in Postfix 2.7 and later.
.IP \fB\-f\fR
Prepend the file name to each output line.
.IP \fB\-h\fR
Show message header content. The \fB\-h\fR option produces
output from the beginning of the message up to, but not

View File

@ -128,3 +128,5 @@ proto proto mysql_table proto pgsql_table proto ldap_table
an unknown or unimplemented command File smtpd smtpd c
inside more consistent Files proto master pipe pipe c
unimplemented commands in the SMTP server File smtpd smtpd c
cleanup cleanup h cleanup cleanup_extracted c
File postcat postcat c

View File

@ -1841,3 +1841,4 @@ foqvx
ILP
xxfi
optionsv
bdefhnoqv

View File

@ -81,3 +81,4 @@ cgi
mozilla
Dilyan
Palauzov
pkgconf

View File

@ -39,12 +39,7 @@ Makefile: Makefile.in
test: $(TESTPROG)
tests: update template_test obs_template_test 2template_test \
with-msgid-with-long-line_test \
with-msgid-with-eoh-event_test \
with-msgid-no-eoh-event_test \
no-msgid-with-eoh-event_test \
no-msgid-no-eoh-event_test \
with-msgid-with-filter_test
with-message-id_test no-message-id_test
root_tests:
@ -72,9 +67,9 @@ template_test: $(PROG) template_test.ref
echo myhostname=example.com >>main.cf
echo header_from_format=standard >>main.cf
touch -t 197101010000 main.cf
MAIL_CONFIG=. ./$(PROG) -SVzndump_templates >template_test.tmp
MAIL_CONFIG=. $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -SVzndump_templates >template_test.tmp
diff template_test.ref template_test.tmp
MAIL_CONFIG=. ./$(PROG) -SVzndump_templates \
MAIL_CONFIG=. $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -SVzndump_templates \
-o bounce_template_file=template_test.ref > template_test.tmp
diff template_test.ref template_test.tmp
rm -f template_test.tmp main.cf
@ -84,7 +79,7 @@ obs_template_test: $(PROG) obs_template_test.ref
echo myhostname=example.com >>main.cf
echo header_from_format=obsolete >>main.cf
touch -t 197101010000 main.cf
MAIL_CONFIG=. ./$(PROG) -SVzndump_templates >template_test.tmp
MAIL_CONFIG=. $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -SVzndump_templates >template_test.tmp
diff obs_template_test.ref template_test.tmp
rm -f template_test.tmp main.cf
@ -92,29 +87,31 @@ obs_template_test: $(PROG) obs_template_test.ref
echo queue_directory=. >main.cf
echo myhostname=example.com >>main.cf
touch -t 197101010000 main.cf
MAIL_CONFIG=. ./$(PROG) -SVzndump_templates \
MAIL_CONFIG=. $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -SVzndump_templates \
-o bounce_template_file=2template_test.in > template_test.tmp
diff template_test.ref template_test.tmp
rm -f template_test.tmp main.cf
with-msgid-with-long-line_test: bounce_notify_util_tester \
msgfile-with-msgid-with-long-line logfile-with-msgid-with-long-line \
with-msgid-with-long-line-no-thread.ref \
with-msgid-with-long-line-with-thread.ref
# This tests only the handling of an extracted message ID. The
# tests for extracting a message ID belong with the cleanup code.
with-message-id_test: bounce_notify_util_tester \
msgfile-with-message-id logfile-with-message-id \
with-message-id-no-thread.ref \
with-message-id-with-thread.ref
rm -rf queue main.cf
echo 'enable_threaded_bounces = no' >main.cf
echo 'queue_directory = queue' >>main.cf
echo 'myhostname = mail.example' >>main.cf
touch -t 197101010000 main.cf
mkdir -p queue/active queue/bounce
cp logfile-with-msgid-with-long-line queue/bounce/msgid
cp msgfile-with-msgid-with-long-line queue/active/msgid
cp logfile-with-message-id queue/bounce/msgid
cp msgfile-with-message-id queue/active/msgid
$(SHLIB_ENV) $(VALGRIND) ./bounce_notify_util_tester \
-c. bounce active msgid 2>&1 | \
sed 's;msgid.[0-9]*/mail.example;msgid.unix-time/mail.example;' \
> with-msgid-with-long-line-no-thread.tmp
diff with-msgid-with-long-line-no-thread.ref with-msgid-with-long-line-no-thread.tmp
rm -f with-msgid-with-long-line-no-thread.tmp
> with-message-id-no-thread.tmp
diff with-message-id-no-thread.ref with-message-id-no-thread.tmp
rm -f with-message-id-no-thread.tmp
:
rm -rf queue main.cf
echo 'enable_threaded_bounces = yes' >main.cf
@ -122,34 +119,34 @@ with-msgid-with-long-line_test: bounce_notify_util_tester \
echo 'myhostname = mail.example' >>main.cf
touch -t 197101010000 main.cf
mkdir -p queue/active queue/bounce
cp logfile-with-msgid-with-long-line queue/bounce/msgid
cp msgfile-with-msgid-with-long-line queue/active/msgid
cp logfile-with-message-id queue/bounce/msgid
cp msgfile-with-message-id queue/active/msgid
$(SHLIB_ENV) $(VALGRIND) ./bounce_notify_util_tester \
-c. bounce active msgid 2>&1 | \
sed 's;msgid.[0-9]*/mail.example;msgid.unix-time/mail.example;' \
> with-msgid-with-long-line-with-thread.tmp
diff with-msgid-with-long-line-with-thread.ref with-msgid-with-long-line-with-thread.tmp
rm -f with-msgid-with-long-line-with-thread.tmp
> with-message-id-with-thread.tmp
diff with-message-id-with-thread.ref with-message-id-with-thread.tmp
rm -f with-message-id-with-thread.tmp
rm -rf queue main.cf
with-msgid-with-eoh-event_test: bounce_notify_util_tester \
msgfile-with-msgid-with-eoh-event logfile-with-msgid-with-eoh-event \
with-msgid-with-eoh-event-no-thread.ref \
with-msgid-with-eoh-event-with-thread.ref
no-message-id_test: bounce_notify_util_tester \
msgfile-no-message-id logfile-no-message-id \
no-message-id-no-thread.ref \
no-message-id-with-thread.ref
rm -rf queue main.cf
echo 'enable_threaded_bounces = no' >main.cf
echo 'queue_directory = queue' >>main.cf
echo 'myhostname = mail.example' >>main.cf
touch -t 197101010000 main.cf
mkdir -p queue/active queue/bounce
cp logfile-with-msgid-with-eoh-event queue/bounce/msgid
cp msgfile-with-msgid-with-eoh-event queue/active/msgid
cp logfile-no-message-id queue/bounce/msgid
cp msgfile-no-message-id queue/active/msgid
$(SHLIB_ENV) $(VALGRIND) ./bounce_notify_util_tester \
-c. bounce active msgid 2>&1 | \
sed 's;msgid.[0-9]*/mail.example;msgid.unix-time/mail.example;' \
> with-msgid-with-eoh-event-no-thread.tmp
diff with-msgid-with-eoh-event-no-thread.ref with-msgid-with-eoh-event-no-thread.tmp
rm -f with-msgid-with-eoh-event-no-thread.tmp
> no-message-id-no-thread.tmp
diff no-message-id-no-thread.ref no-message-id-no-thread.tmp
rm -f no-message-id-no-thread.tmp
:
rm -rf queue main.cf
echo 'enable_threaded_bounces = yes' >main.cf
@ -157,154 +154,14 @@ with-msgid-with-eoh-event_test: bounce_notify_util_tester \
echo 'myhostname = mail.example' >>main.cf
touch -t 197101010000 main.cf
mkdir -p queue/active queue/bounce
cp logfile-with-msgid-with-eoh-event queue/bounce/msgid
cp msgfile-with-msgid-with-eoh-event queue/active/msgid
cp logfile-no-message-id queue/bounce/msgid
cp msgfile-no-message-id queue/active/msgid
$(SHLIB_ENV) $(VALGRIND) ./bounce_notify_util_tester \
-c. bounce active msgid 2>&1 | \
sed 's;msgid.[0-9]*/mail.example;msgid.unix-time/mail.example;' \
> with-msgid-with-eoh-event-with-thread.tmp
diff with-msgid-with-eoh-event-with-thread.ref with-msgid-with-eoh-event-with-thread.tmp
rm -f with-msgid-with-eoh-event-with-thread.tmp
rm -rf queue main.cf
with-msgid-no-eoh-event_test: bounce_notify_util_tester \
msgfile-with-msgid-no-eoh-event logfile-with-msgid-no-eoh-event \
with-msgid-no-eoh-event-no-thread.ref \
with-msgid-no-eoh-event-with-thread.ref
rm -rf queue main.cf
echo 'enable_threaded_bounces = no' >main.cf
echo 'queue_directory = queue' >>main.cf
echo 'myhostname = mail.example' >>main.cf
touch -t 197101010000 main.cf
mkdir -p queue/active queue/bounce
cp logfile-with-msgid-no-eoh-event queue/bounce/msgid
cp msgfile-with-msgid-no-eoh-event queue/active/msgid
$(SHLIB_ENV) $(VALGRIND) ./bounce_notify_util_tester \
-c. bounce active msgid 2>&1 | \
sed 's;msgid.[0-9]*/mail.example;msgid.unix-time/mail.example;' \
> with-msgid-no-eoh-event-no-thread.tmp
diff with-msgid-no-eoh-event-no-thread.ref with-msgid-no-eoh-event-no-thread.tmp
rm -f with-msgid-no-eoh-event-no-thread.tmp
:
rm -rf queue main.cf
echo 'enable_threaded_bounces = yes' >main.cf
echo 'queue_directory = queue' >>main.cf
echo 'myhostname = mail.example' >>main.cf
touch -t 197101010000 main.cf
mkdir -p queue/active queue/bounce
cp logfile-with-msgid-no-eoh-event queue/bounce/msgid
cp msgfile-with-msgid-no-eoh-event queue/active/msgid
$(SHLIB_ENV) $(VALGRIND) ./bounce_notify_util_tester \
-c. bounce active msgid 2>&1 | \
sed 's;msgid.[0-9]*/mail.example;msgid.unix-time/mail.example;' \
> with-msgid-no-eoh-event-with-thread.tmp
diff with-msgid-no-eoh-event-with-thread.ref with-msgid-no-eoh-event-with-thread.tmp
rm -f with-msgid-no-eoh-event-with-thread.tmp
rm -rf queue main.cf
no-msgid-with-eoh-event_test: bounce_notify_util_tester \
msgfile-no-msgid-with-eoh-event logfile-no-msgid-with-eoh-event \
no-msgid-with-eoh-event-no-thread.ref \
no-msgid-with-eoh-event-with-thread.ref
rm -rf queue main.cf
echo 'enable_threaded_bounces = no' >main.cf
echo 'queue_directory = queue' >>main.cf
echo 'myhostname = mail.example' >>main.cf
touch -t 197101010000 main.cf
mkdir -p queue/active queue/bounce
cp logfile-no-msgid-with-eoh-event queue/bounce/msgid
cp msgfile-no-msgid-with-eoh-event queue/active/msgid
$(SHLIB_ENV) $(VALGRIND) ./bounce_notify_util_tester \
-c. bounce active msgid 2>&1 | \
sed 's;msgid.[0-9]*/mail.example;msgid.unix-time/mail.example;' \
> no-msgid-with-eoh-event-no-thread.tmp
diff no-msgid-with-eoh-event-no-thread.ref no-msgid-with-eoh-event-no-thread.tmp
rm -f no-msgid-with-eoh-event-no-thread.tmp
:
rm -rf queue main.cf
echo 'enable_threaded_bounces = yes' >main.cf
echo 'queue_directory = queue' >>main.cf
echo 'myhostname = mail.example' >>main.cf
touch -t 197101010000 main.cf
mkdir -p queue/active queue/bounce
cp logfile-no-msgid-with-eoh-event queue/bounce/msgid
cp msgfile-no-msgid-with-eoh-event queue/active/msgid
$(SHLIB_ENV) $(VALGRIND) ./bounce_notify_util_tester \
-c. bounce active msgid 2>&1 | \
sed 's;msgid.[0-9]*/mail.example;msgid.unix-time/mail.example;' \
> no-msgid-with-eoh-event-with-thread.tmp
diff no-msgid-with-eoh-event-with-thread.ref no-msgid-with-eoh-event-with-thread.tmp
rm -f no-msgid-with-eoh-event-with-thread.tmp
rm -rf queue main.cf
no-msgid-no-eoh-event_test: bounce_notify_util_tester \
msgfile-no-msgid-no-eoh-event logfile-no-msgid-no-eoh-event \
no-msgid-no-eoh-event-no-thread.ref \
no-msgid-no-eoh-event-with-thread.ref
rm -rf queue main.cf
echo 'enable_threaded_bounces = no' >main.cf
echo 'queue_directory = queue' >>main.cf
echo 'myhostname = mail.example' >>main.cf
touch -t 197101010000 main.cf
mkdir -p queue/active queue/bounce
cp logfile-no-msgid-no-eoh-event queue/bounce/msgid
cp msgfile-no-msgid-no-eoh-event queue/active/msgid
$(SHLIB_ENV) $(VALGRIND) ./bounce_notify_util_tester \
-c. bounce active msgid 2>&1 | \
sed 's;msgid.[0-9]*/mail.example;msgid.unix-time/mail.example;' \
> no-msgid-no-eoh-event-no-thread.tmp
diff no-msgid-no-eoh-event-no-thread.ref no-msgid-no-eoh-event-no-thread.tmp
rm -f no-msgid-no-eoh-event-no-thread.tmp
:
rm -rf queue main.cf
echo 'enable_threaded_bounces = yes' >main.cf
echo 'queue_directory = queue' >>main.cf
echo 'myhostname = mail.example' >>main.cf
touch -t 197101010000 main.cf
mkdir -p queue/active queue/bounce
cp logfile-no-msgid-no-eoh-event queue/bounce/msgid
cp msgfile-no-msgid-no-eoh-event queue/active/msgid
$(SHLIB_ENV) $(VALGRIND) ./bounce_notify_util_tester \
-c. bounce active msgid 2>&1 | \
sed 's;msgid.[0-9]*/mail.example;msgid.unix-time/mail.example;' \
> no-msgid-no-eoh-event-with-thread.tmp
diff no-msgid-no-eoh-event-with-thread.ref no-msgid-no-eoh-event-with-thread.tmp
rm -f no-msgid-no-eoh-event-with-thread.tmp
rm -rf queue main.cf
with-msgid-with-filter_test: bounce_notify_util_tester \
msgfile-with-msgid-with-filter logfile-with-msgid-with-filter \
with-msgid-with-filter-no-thread.ref \
with-msgid-with-filter-with-thread.ref
rm -rf queue main.cf
echo 'enable_threaded_bounces = no' >main.cf
echo 'queue_directory = queue' >>main.cf
echo 'myhostname = mail.example' >>main.cf
touch -t 197101010000 main.cf
mkdir -p queue/active queue/bounce
cp logfile-with-msgid-with-filter queue/bounce/msgid
cp msgfile-with-msgid-with-filter queue/active/msgid
$(SHLIB_ENV) $(VALGRIND) ./bounce_notify_util_tester \
-c. bounce active msgid 2>&1 | \
sed 's;msgid.[0-9]*/mail.example;msgid.unix-time/mail.example;' \
> with-msgid-with-filter-no-thread.tmp
diff with-msgid-with-filter-no-thread.ref with-msgid-with-filter-no-thread.tmp
rm -f with-msgid-with-filter-no-thread.tmp
:
rm -rf queue main.cf
echo 'enable_threaded_bounces = yes' >main.cf
echo 'queue_directory = queue' >>main.cf
echo 'myhostname = mail.example' >>main.cf
touch -t 197101010000 main.cf
mkdir -p queue/active queue/bounce
cp logfile-with-msgid-with-filter queue/bounce/msgid
cp msgfile-with-msgid-with-filter queue/active/msgid
$(SHLIB_ENV) $(VALGRIND) ./bounce_notify_util_tester \
-c. bounce active msgid 2>&1 | \
sed 's;msgid.[0-9]*/mail.example;msgid.unix-time/mail.example;' \
> with-msgid-with-filter-with-thread.tmp
diff with-msgid-with-filter-with-thread.ref with-msgid-with-filter-with-thread.tmp
rm -f with-msgid-with-filter-with-thread.tmp
> no-message-id-with-thread.tmp
diff no-message-id-with-thread.ref no-message-id-with-thread.tmp
rm -f no-message-id-with-thread.tmp
rm -rf queue main.cf
depend: $(MAKES)

View File

@ -230,10 +230,7 @@ static BOUNCE_INFO *bounce_mail_alloc(const char *service,
{
BOUNCE_INFO *bounce_info;
int rec_type;
int prev_type;
int all_headers_seen = 0;
int skip_message_segment = 0;
int in_envelope = 1;
/*
* Bundle up a bunch of parameters and initialize information that will
@ -322,9 +319,8 @@ static BOUNCE_INFO *bounce_mail_alloc(const char *service,
DELIVER_LOCK_MODE) < 0)
msg_fatal("cannot get shared lock on %s: %m",
VSTREAM_PATH(bounce_info->orig_fp));
for (prev_type = 0;
(rec_type = rec_get(bounce_info->orig_fp, bounce_info->buf, 0)) > 0;
prev_type = rec_type) {
while ((rec_type =
rec_get(bounce_info->orig_fp, bounce_info->buf, 0)) > 0) {
/*
* Postfix version dependent: data offset in SIZE record.
@ -368,76 +364,28 @@ static BOUNCE_INFO *bounce_mail_alloc(const char *service,
msg_warn("%s: no sender before message content record",
bounce_info->queue_id);
bounce_info->orig_offs = vstream_ftell(bounce_info->orig_fp);
if (var_threaded_bounce == 0)
skip_message_segment = 1;
else
in_envelope = 0;
skip_message_segment = 1;
}
/*
* Extract Message-ID for threaded bounces.
* Extract Message-ID from extracted segment, for use in threaded
* bounces.
*/
else if (in_envelope == 0
&& (rec_type == REC_TYPE_NORM || rec_type == REC_TYPE_CONT)) {
const HEADER_OPTS *hdr;
char *cp;
else if (rec_type == REC_TYPE_ATTR && var_threaded_bounce) {
char *cp = STR(bounce_info->buf);
ssize_t len = sizeof(MAIL_ATTR_MESSAGE_ID);
char *err;
/*
* Skip records that we cannot use. Degrade if we could not
* skip over the message content.
*/
if (var_threaded_bounce == 0 || all_headers_seen
|| prev_type == REC_TYPE_CONT) {
/* void */ ;
}
/*
* Extract message-id header value.
*/
else if (is_header(STR(bounce_info->buf))) {
if ((hdr = header_opts_find(
vstring_str(bounce_info->buf))) != 0
&& hdr->type == HDR_MESSAGE_ID) {
vstring_truncate(bounce_info->buf,
trimblanks(STR(bounce_info->buf),
LEN(bounce_info->buf))
- STR(bounce_info->buf));
cp = STR(bounce_info->buf) + strlen(hdr->name) + 1;
while (ISSPACE(*cp))
cp++;
if (*cp == '<' && vstring_end(bounce_info->buf)[-1] == '>')
vstring_strcpy(bounce_info->orig_msgid, cp);
else
msg_warn("%s: ignoring malformed Message-ID",
bounce_info->queue_id);
if (strncmp(cp, MAIL_ATTR_MESSAGE_ID "=", len) == 0) {
cp += len;
if ((err = extpar(&cp, "<>", EXTPAR_FLAG_NONE)) != 0) {
msg_warn("%s: malformed Message-ID attribute: %s",
bounce_info->queue_id, err);
myfree(err);
} else {
vstring_sprintf(bounce_info->orig_msgid, "<%s>", cp);
}
}
/*
* Skip remainder of multiline header.
*/
else if (ISSPACE(*STR(bounce_info->buf))) {
/* void */ ;
}
/*
* Start of body.
*/
else {
all_headers_seen = 1;
skip_message_segment = 1;
}
}
/*
* In case we ever want to process records from the extracted
* segment, and in case there was no "start of body" event.
*/
else if (rec_type == REC_TYPE_XTRA) {
if (VSTRING_LEN(bounce_info->orig_msgid) == 0)
if (var_threaded_bounce)
all_headers_seen = 1;
in_envelope = 1;
}
/*
@ -446,7 +394,7 @@ static BOUNCE_INFO *bounce_mail_alloc(const char *service,
if (bounce_info->orig_offs > 0
&& bounce_info->arrival_time > 0
&& VSTRING_LEN(bounce_info->sender) > 0
&& (var_threaded_bounce == 0 || all_headers_seen
&& (var_threaded_bounce == 0
|| VSTRING_LEN(bounce_info->orig_msgid) > 0)) {
break;
}

View File

@ -1,7 +1,7 @@
recipient = rcpt-address
original_recipient = rcpt-orig_addr
offset = 272
offset = 281
notify_flags = rcpt-dsn_notify
status = dsn-status
action = dsn-action

View File

@ -0,0 +1,13 @@
recipient = rcpt-address
original_recipient = rcpt-orig_addr
offset = 280
notify_flags = rcpt-dsn_notify
status = dsn-status
action = dsn-action
diag_type = dsn-dtype
diag_text = dsn-dtext
mta_type = dsn-mtype
mta_mname = dsn-mname
reason = dsn-reason

Binary file not shown.

Binary file not shown.

View File

@ -24,7 +24,7 @@ Reporting-MTA: dns; mail.example
Original-Envelope-Id: TEST-ENVID
X-Postfix-Queue-ID: msgid
X-Postfix-Sender: rfc822; sender@sender.example
Arrival-Date: Sat, 05 Dec 2020 13:31:48 -0500 (EST)
Arrival-Date: Wed, 11 Sep 2024 18:05:54 -0400 (EDT)
Final-Recipient: rfc822; rcpt-address
Original-Recipient: rfc822; rcpt-orig_addr
@ -38,11 +38,12 @@ Content-Description: Undelivered Message
Content-Type: message/rfc822
Return-Path: <sender@sender.example>
Received: by wzv.porcupine.org (Postfix, from userid 0)
id 4CpJ7m6tprz4w4Y; Sat, 5 Dec 2020 18:31:48 +0000 (UTC)
From: <sender@sender.example>
To: <recipient@recipient.example>
Message-Id: <12345@mta-name.example>
Subject: with-msgid-no-eoh-event
Received: by wzv.porcupine.org (Postfix, from userid 1000)
id 4X3vqF3bwhz5Yqq; Wed, 11 Sep 2024 18:05:54 -0400 (EDT)
From: sender@sender.example
To: recipient@recipient.example
Subject: no-message-id
asdasdd
--msgid.unix-time/mail.example--

View File

@ -24,7 +24,7 @@ Reporting-MTA: dns; mail.example
Original-Envelope-Id: TEST-ENVID
X-Postfix-Queue-ID: msgid
X-Postfix-Sender: rfc822; sender@sender.example
Arrival-Date: Sun, 29 Nov 2020 10:30:41 -0500 (EST)
Arrival-Date: Wed, 11 Sep 2024 18:05:54 -0400 (EDT)
Final-Recipient: rfc822; rcpt-address
Original-Recipient: rfc822; rcpt-orig_addr
@ -38,12 +38,12 @@ Content-Description: Undelivered Message
Content-Type: message/rfc822
Return-Path: <sender@sender.example>
Received: by wzv.porcupine.org (Postfix, from userid 0)
id 4CkXPY0myNz4w4g; Sun, 29 Nov 2020 15:30:41 +0000 (UTC)
From: <sender@sender.example>
To: <recipient@recipient.example>
Message-Id: <12345@mta-name.example>
Subject: with-msgid-no-eoh-event
Date: Sun, 29 Nov 2020 15:30:41 +0000 (UTC)
Received: by wzv.porcupine.org (Postfix, from userid 1000)
id 4X3vqF3bwhz5Yqq; Wed, 11 Sep 2024 18:05:54 -0400 (EDT)
From: sender@sender.example
To: recipient@recipient.example
Subject: no-message-id
asdasdd
--msgid.unix-time/mail.example--

View File

@ -24,7 +24,7 @@ Reporting-MTA: dns; mail.example
Original-Envelope-Id: TEST-ENVID
X-Postfix-Queue-ID: msgid
X-Postfix-Sender: rfc822; sender@sender.example
Arrival-Date: Sun, 29 Nov 2020 10:30:41 -0500 (EST)
Arrival-Date: Wed, 11 Sep 2024 18:05:54 -0400 (EDT)
Final-Recipient: rfc822; rcpt-address
Original-Recipient: rfc822; rcpt-orig_addr
@ -38,14 +38,14 @@ Content-Description: Undelivered Message
Content-Type: message/rfc822
Return-Path: <sender@sender.example>
Received: by wzv.porcupine.org (Postfix, from userid 0)
id 4CkXPY10M8z4w4l; Sun, 29 Nov 2020 15:30:41 +0000 (UTC)
From: <sender@sender.example>
To: <recipient@recipient.example>
Message-Id: <12345@mta-name.example>
Subject: with-msgid-with-eoh-event
Date: Sun, 29 Nov 2020 15:30:41 +0000 (UTC)
Received: by wzv.porcupine.org (Postfix, from userid 1000)
id 4X3vqF3RdBz5Yqn; Wed, 11 Sep 2024 18:05:54 -0400 (EDT)
From: sender@sender.example
To: recipient@recipient.example
Subject: existing-message-id
Message-Id: <existing>
Date: Wed, 11 Sep 2024 18:05:54 -0400 (EDT)
body text
asdasdd
--msgid.unix-time/mail.example--

View File

@ -1,8 +1,8 @@
From: Mail Delivery System <MAILER-DAEMON>
Subject: Undelivered Mail Returned to Sender
To: test-recipient
References: <12345@mta-name.example>
In-Reply-To: <12345@mta-name.example>
References: <existing>
In-Reply-To: <existing>
Auto-Submitted: auto-replied
MIME-Version: 1.0
Content-Type: multipart/report; report-type=delivery-status;
@ -26,7 +26,7 @@ Reporting-MTA: dns; mail.example
Original-Envelope-Id: TEST-ENVID
X-Postfix-Queue-ID: msgid
X-Postfix-Sender: rfc822; sender@sender.example
Arrival-Date: Sat, 05 Dec 2020 13:31:48 -0500 (EST)
Arrival-Date: Wed, 11 Sep 2024 18:05:54 -0400 (EDT)
Final-Recipient: rfc822; rcpt-address
Original-Recipient: rfc822; rcpt-orig_addr
@ -40,11 +40,14 @@ Content-Description: Undelivered Message
Content-Type: message/rfc822
Return-Path: <sender@sender.example>
Received: by wzv.porcupine.org (Postfix, from userid 0)
id 4CpJ7m6tprz4w4Y; Sat, 5 Dec 2020 18:31:48 +0000 (UTC)
From: <sender@sender.example>
To: <recipient@recipient.example>
Message-Id: <12345@mta-name.example>
Subject: with-msgid-no-eoh-event
Received: by wzv.porcupine.org (Postfix, from userid 1000)
id 4X3vqF3RdBz5Yqn; Wed, 11 Sep 2024 18:05:54 -0400 (EDT)
From: sender@sender.example
To: recipient@recipient.example
Subject: existing-message-id
Message-Id: <existing>
Date: Wed, 11 Sep 2024 18:05:54 -0400 (EDT)
asdasdd
--msgid.unix-time/mail.example--

View File

@ -1,51 +0,0 @@
From: Mail Delivery System <MAILER-DAEMON>
Subject: Undelivered Mail Returned to Sender
To: test-recipient
References: <12345@mta-name.example>
In-Reply-To: <12345@mta-name.example>
Auto-Submitted: auto-replied
MIME-Version: 1.0
Content-Type: multipart/report; report-type=delivery-status;
boundary="msgid.unix-time/mail.example"
Content-Transfer-Encoding: 7bit
This is a MIME-encapsulated message.
--msgid.unix-time/mail.example
Content-Description: Notification
Content-Type: text/plain; charset=us-ascii
<rcpt-address> (expanded from <rcpt-orig_addr>): dsn-reason
--msgid.unix-time/mail.example
Content-Description: Delivery report
Content-Type: message/delivery-status
Reporting-MTA: dns; mail.example
Original-Envelope-Id: TEST-ENVID
X-Postfix-Queue-ID: msgid
X-Postfix-Sender: rfc822; sender@sender.example
Arrival-Date: Sun, 29 Nov 2020 10:30:41 -0500 (EST)
Final-Recipient: rfc822; rcpt-address
Original-Recipient: rfc822; rcpt-orig_addr
Action: failed
Status: dsn-status
Remote-MTA: dsn-mtype; dsn-mname
Diagnostic-Code: dsn-dtype; dsn-dtext
--msgid.unix-time/mail.example
Content-Description: Undelivered Message
Content-Type: message/rfc822
Return-Path: <sender@sender.example>
Received: by wzv.porcupine.org (Postfix, from userid 0)
id 4CkXPY0myNz4w4g; Sun, 29 Nov 2020 15:30:41 +0000 (UTC)
From: <sender@sender.example>
To: <recipient@recipient.example>
Message-Id: <12345@mta-name.example>
Subject: with-msgid-no-eoh-event
Date: Sun, 29 Nov 2020 15:30:41 +0000 (UTC)
--msgid.unix-time/mail.example--

View File

@ -1,53 +0,0 @@
From: Mail Delivery System <MAILER-DAEMON>
Subject: Undelivered Mail Returned to Sender
To: test-recipient
References: <12345@mta-name.example>
In-Reply-To: <12345@mta-name.example>
Auto-Submitted: auto-replied
MIME-Version: 1.0
Content-Type: multipart/report; report-type=delivery-status;
boundary="msgid.unix-time/mail.example"
Content-Transfer-Encoding: 7bit
This is a MIME-encapsulated message.
--msgid.unix-time/mail.example
Content-Description: Notification
Content-Type: text/plain; charset=us-ascii
<rcpt-address> (expanded from <rcpt-orig_addr>): dsn-reason
--msgid.unix-time/mail.example
Content-Description: Delivery report
Content-Type: message/delivery-status
Reporting-MTA: dns; mail.example
Original-Envelope-Id: TEST-ENVID
X-Postfix-Queue-ID: msgid
X-Postfix-Sender: rfc822; sender@sender.example
Arrival-Date: Sun, 29 Nov 2020 10:30:41 -0500 (EST)
Final-Recipient: rfc822; rcpt-address
Original-Recipient: rfc822; rcpt-orig_addr
Action: failed
Status: dsn-status
Remote-MTA: dsn-mtype; dsn-mname
Diagnostic-Code: dsn-dtype; dsn-dtext
--msgid.unix-time/mail.example
Content-Description: Undelivered Message
Content-Type: message/rfc822
Return-Path: <sender@sender.example>
Received: by wzv.porcupine.org (Postfix, from userid 0)
id 4CkXPY10M8z4w4l; Sun, 29 Nov 2020 15:30:41 +0000 (UTC)
From: <sender@sender.example>
To: <recipient@recipient.example>
Message-Id: <12345@mta-name.example>
Subject: with-msgid-with-eoh-event
Date: Sun, 29 Nov 2020 15:30:41 +0000 (UTC)
body text
--msgid.unix-time/mail.example--

View File

@ -1,50 +0,0 @@
From: Mail Delivery System <MAILER-DAEMON>
Subject: Undelivered Mail Returned to Sender
To: test-recipient
Auto-Submitted: auto-replied
MIME-Version: 1.0
Content-Type: multipart/report; report-type=delivery-status;
boundary="msgid.unix-time/mail.example"
Content-Transfer-Encoding: 7bit
This is a MIME-encapsulated message.
--msgid.unix-time/mail.example
Content-Description: Notification
Content-Type: text/plain; charset=us-ascii
<rcpt-address> (expanded from <rcpt-orig_addr>): dsn-reason
--msgid.unix-time/mail.example
Content-Description: Delivery report
Content-Type: message/delivery-status
Reporting-MTA: dns; mail.example
Original-Envelope-Id: TEST-ENVID
X-Postfix-Queue-ID: msgid
X-Postfix-Sender: rfc822; sender@sender.example
Arrival-Date: Sun, 29 Nov 2020 10:30:41 -0500 (EST)
Final-Recipient: rfc822; rcpt-address
Original-Recipient: rfc822; rcpt-orig_addr
Action: failed
Status: dsn-status
Remote-MTA: dsn-mtype; dsn-mname
Diagnostic-Code: dsn-dtype; dsn-dtext
--msgid.unix-time/mail.example
Content-Description: Undelivered Message
Content-Type: message/rfc822
Return-Path: <sender@sender.example>
Received: by wzv.porcupine.org (Postfix, from userid 0)
id 4CkXPY194lz4w4n; Sun, 29 Nov 2020 15:30:41 +0000 (UTC)
From: <sender@sender.example>
To: <recipient@recipient.example>
Whatever: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Message-Id: <12345@mta-name.example>
Subject: with-msgid-with-long-line
Date: Sun, 29 Nov 2020 15:30:41 +0000 (UTC)
--msgid.unix-time/mail.example--

View File

@ -1,52 +0,0 @@
From: Mail Delivery System <MAILER-DAEMON>
Subject: Undelivered Mail Returned to Sender
To: test-recipient
References: <12345@mta-name.example>
In-Reply-To: <12345@mta-name.example>
Auto-Submitted: auto-replied
MIME-Version: 1.0
Content-Type: multipart/report; report-type=delivery-status;
boundary="msgid.unix-time/mail.example"
Content-Transfer-Encoding: 7bit
This is a MIME-encapsulated message.
--msgid.unix-time/mail.example
Content-Description: Notification
Content-Type: text/plain; charset=us-ascii
<rcpt-address> (expanded from <rcpt-orig_addr>): dsn-reason
--msgid.unix-time/mail.example
Content-Description: Delivery report
Content-Type: message/delivery-status
Reporting-MTA: dns; mail.example
Original-Envelope-Id: TEST-ENVID
X-Postfix-Queue-ID: msgid
X-Postfix-Sender: rfc822; sender@sender.example
Arrival-Date: Sun, 29 Nov 2020 10:30:41 -0500 (EST)
Final-Recipient: rfc822; rcpt-address
Original-Recipient: rfc822; rcpt-orig_addr
Action: failed
Status: dsn-status
Remote-MTA: dsn-mtype; dsn-mname
Diagnostic-Code: dsn-dtype; dsn-dtext
--msgid.unix-time/mail.example
Content-Description: Undelivered Message
Content-Type: message/rfc822
Return-Path: <sender@sender.example>
Received: by wzv.porcupine.org (Postfix, from userid 0)
id 4CkXPY194lz4w4n; Sun, 29 Nov 2020 15:30:41 +0000 (UTC)
From: <sender@sender.example>
To: <recipient@recipient.example>
Whatever: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Message-Id: <12345@mta-name.example>
Subject: with-msgid-with-long-line
Date: Sun, 29 Nov 2020 15:30:41 +0000 (UTC)
--msgid.unix-time/mail.example--

View File

@ -94,6 +94,7 @@ typedef struct CLEANUP_STATE {
char *hdr_rewrite_context; /* header rewrite context */
char *filter; /* from header/body patterns */
char *redirect; /* from header/body patterns */
char *message_id; /* from Message-ID header */
char *dsn_envid; /* DSN envelope ID */
int dsn_ret; /* DSN full/hdrs */
int dsn_notify; /* DSN never/delay/fail/success */

View File

@ -184,6 +184,10 @@ void cleanup_extracted_process(CLEANUP_STATE *state, int type,
cleanup_out_string(state, REC_TYPE_FILT, state->filter);
if (state->redirect != 0)
cleanup_out_string(state, REC_TYPE_RDR, state->redirect);
if (state->message_id != 0) {
cleanup_out_format(state, REC_TYPE_ATTR, "%s=%s",
MAIL_ATTR_MESSAGE_ID, state->message_id);
}
if ((encoding = nvtable_find(state->attr, MAIL_ATTR_ENCODING)) != 0)
cleanup_out_format(state, REC_TYPE_ATTR, "%s=%s",
MAIL_ATTR_ENCODING, encoding);
@ -307,8 +311,8 @@ void cleanup_extracted_finish(CLEANUP_STATE *state)
cleanup_addr_bcc(state, var_always_bcc);
/*
* Flush non-Milter header/body_checks BCC recipients. Clear hbc_rcpt
* so that it can be used for other purposes.
* Flush non-Milter header/body_checks BCC recipients. Clear hbc_rcpt so
* that it can be used for other purposes.
*/
if (state->hbc_rcpt) {
if (CLEANUP_OUT_OK(state) && state->recip != 0) {

View File

@ -626,8 +626,14 @@ static void cleanup_header_callback(void *context, int header_class,
*/
else {
state->headers_seen |= (1 << hdr_opts->type);
if (hdr_opts->type == HDR_MESSAGE_ID)
if (hdr_opts->type == HDR_MESSAGE_ID) {
ssize_t len;
msg_info("%s: message-id=%s", state->queue_id, hdrval);
if (state->message_id == 0 && (len = balpar(hdrval, "<>")) > 0)
/* This Message ID may end up in threaded bounces. */
state->message_id = printable(mystrndup(hdrval, len), ' ');
}
if (hdr_opts->type == HDR_RESENT_MESSAGE_ID)
msg_info("%s: resent-message-id=%s", state->queue_id, hdrval);
if (hdr_opts->type == HDR_RECEIVED) {
@ -730,6 +736,10 @@ static void cleanup_header_done_callback(void *context)
vstring_str(state->temp1));
state->headers_seen |= (1 << (state->resent[0] ?
HDR_RESENT_MESSAGE_ID : HDR_MESSAGE_ID));
if (state->resent[0] == 0 && state->message_id == 0)
state->message_id = concatenate("<", vstring_str(state->temp1),
">", (char *) 0);
}
if ((state->headers_seen & (1 << HDR_MESSAGE_ID)) == 0)
msg_info("%s: message-id=<>", state->queue_id);

View File

@ -117,6 +117,7 @@ CLEANUP_STATE *cleanup_state_alloc(VSTREAM *src)
state->hdr_rewrite_context = MAIL_ATTR_RWR_LOCAL;
state->filter = 0;
state->redirect = 0;
state->message_id = 0;
state->dsn_envid = 0;
state->dsn_ret = 0;
state->dsn_notify = 0;
@ -179,6 +180,8 @@ void cleanup_state_free(CLEANUP_STATE *state)
myfree(state->filter);
if (state->redirect)
myfree(state->redirect);
if (state->message_id)
myfree(state->message_id);
if (state->dsn_envid)
myfree(state->dsn_envid);
if (state->dsn_orcpt)

View File

@ -260,6 +260,8 @@ extern char *mail_pathname(const char *, const char *);
#define MAIL_ATTR_ORG_NONE "unknown" /* origin unknown */
#define MAIL_ATTR_ORG_LOCAL "local" /* local submission */
#define MAIL_ATTR_MESSAGE_ID "message_id" /* Used for threaded bounce */
/*
* XCLIENT/XFORWARD in SMTP.
*/

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 "20240902"
#define MAIL_RELEASE_DATE "20240917"
#define MAIL_VERSION_NUMBER "3.10"
#ifdef SNAPSHOT

View File

@ -4,7 +4,7 @@
/* SUMMARY
/* show Postfix queue file contents
/* SYNOPSIS
/* \fBpostcat\fR [\fB-bdehnoqv\fR] [\fB-c \fIconfig_dir\fR] [\fIfiles\fR...]
/* \fBpostcat\fR [\fB-bdefhnoqv\fR] [\fB-c \fIconfig_dir\fR] [\fIfiles\fR...]
/* DESCRIPTION
/* The \fBpostcat\fR(1) command prints the contents of the
/* named \fIfiles\fR in human-readable form. The files are
@ -33,6 +33,8 @@
/* Show message envelope content.
/* .sp
/* This feature is available in Postfix 2.7 and later.
/* .IP \fB-f\fR
/* Prepend the file name to each output line.
/* .IP \fB-h\fR
/* Show message header content. The \fB-h\fR option produces
/* output from the beginning of the message up to, but not
@ -147,6 +149,7 @@
#define PC_FLAG_PRINT_RTYPE_DEC (1<<5) /* print decimal record type */
#define PC_FLAG_PRINT_RTYPE_SYM (1<<6) /* print symbolic record type */
#define PC_FLAG_RAW (1<<7) /* don't follow pointers */
#define PC_FLAG_PRINT_PATHNAME (1<<8) /* print pathname */
#define PC_MASK_PRINT_TEXT (PC_FLAG_PRINT_HEADER | PC_FLAG_PRINT_BODY)
#define PC_MASK_PRINT_ALL (PC_FLAG_PRINT_ENV | PC_MASK_PRINT_TEXT)
@ -244,6 +247,8 @@ static void postcat(VSTREAM *fp, VSTRING *buffer, int flags)
* changed.
*/
#define PRINT_MARKER(flags, fp, offset, type, text) do { \
if ((flags) & PC_FLAG_PRINT_PATHNAME) \
vstream_printf("%s: ", VSTREAM_PATH(fp)); \
if ((flags) & PC_FLAG_PRINT_OFFSET) \
vstream_printf("%9lu ", (unsigned long) (offset)); \
if (flags & PC_FLAG_PRINT_RTYPE_DEC) \
@ -253,6 +258,8 @@ static void postcat(VSTREAM *fp, VSTRING *buffer, int flags)
} while (0)
#define PRINT_RECORD(flags, offset, type, value) do { \
if ((flags) & PC_FLAG_PRINT_PATHNAME) \
vstream_printf("%s: ", VSTREAM_PATH(fp)); \
if ((flags) & PC_FLAG_PRINT_OFFSET) \
vstream_printf("%9lu ", (unsigned long) (offset)); \
if (flags & PC_FLAG_PRINT_RTYPE_DEC) \
@ -363,6 +370,8 @@ static void postcat(VSTREAM *fp, VSTRING *buffer, int flags)
*/
if (do_print == 0)
continue;
if (flags & PC_FLAG_PRINT_PATHNAME)
vstream_printf("%s: ", VSTREAM_PATH(fp));
if (flags & PC_FLAG_PRINT_OFFSET)
vstream_printf("%9lu ", (unsigned long) offset);
if (flags & PC_FLAG_PRINT_RTYPE_DEC)
@ -491,7 +500,7 @@ int main(int argc, char **argv)
/*
* Parse JCL.
*/
while ((ch = GETOPT(argc, argv, "bc:dehoqrs:v")) > 0) {
while ((ch = GETOPT(argc, argv, "bc:defhoqrs:v")) > 0) {
switch (ch) {
case 'b':
flags |= PC_FLAG_PRINT_BODY;
@ -503,6 +512,9 @@ int main(int argc, char **argv)
case 'd':
flags |= PC_FLAG_PRINT_RTYPE_DEC;
break;
case 'f':
flags |= PC_FLAG_PRINT_PATHNAME;
break;
case 'e':
flags |= PC_FLAG_PRINT_ENV;
break;