On Fri, Feb 14, 2014 at 09:39:00AM +0100, Sven Schwyn wrote:
> > As "root" or as "postfix"?
>
> I can resolve the domain as both.
>
> > Is this domain using a dedicated master.cf transport? Is that
> > transport's smtp(8) delivery agent chrooted?
>
> The master.cf is untouched as it comes with the Gentoo package.
> Nothing is chrooted. (It's a send-only machine and therefore incoming
> connections are blocked anyway.)
>
> smtp unix - - n - - smtp
> relay unix - - n - - smtp
Compile and install Postfix from source with debug symbols enabled.
You should use your operating system's source package if available.
You can use non-default install paths. For example:
DEST=/var/tmp/postfix
CCARGS='-DHAS_PCRE'
AUXLIBS='-lpcre'
while read -r name val
do
CCARGS="$CCARGS $(printf -- '-D%s=\\"%s\\"' $name $val)"
done <<EOF
DEF_COMMAND_DIR $DEST/sbin
DEF_CONFIG_DIR $DEST/etc
DEF_DAEMON_DIR $DEST/libexec
DEF_QUEUE_DIR $DEST/spool
DEF_DATA_DIR $DEST/data
DEF_MAILQ_PATH $DEST/sbin/mailq
DEF_HTML_DIR $DEST/html
DEF_MANPAGE_DIR $DEST/man
DEF_NEWALIAS_PATH $DEST/sbin/newaliases
DEF_README_DIR $DEST/readme
DEF_SENDMAIL_PATH $DEST/sbin/sendmail
EOF
make -f Makefile.init "CCARGS=$CCARGS" "AUXLIBS=$AUXLIBS" "OPT=-g" makefiles
make
Then as root:
# make upgrade
# PATH=/var/tmp/postfix/sbin:$PATH
# postconf -e "master_service_disable = inet"
Enable smtp(8) transport debugging:
/var/tmp/postfix/etc/master.cf:
smtp unix - - n - - smtp -D
Set gdb to run inside gnu screen(1) and set smtp as the content
filter before discarding all mail.
/var/tmp/postfix/etc/main.cf:
default_transport = discard:silently
content_filter = smtp
syslog_name = postfix-debug
debugger_command =
PATH=/bin:/usr/bin:/sbin:/usr/sbin; export PATH; HOME=/root;
export HOME; screen -e^tt -dmS $process_name gdb
$daemon_directory/$process_name $process_id & sleep 2
(the escape character is "Ctrl-t" so as not to conflict with gdb's readline
"Ctrl-a", use whatever you prefer).
Find the value of "RES_DEBUG" in the relevant include file on your
system. On many systems the following will work:
$ printf "#include <resolv.h>\nRES_DEBUG\n" | cpp | tail -1
0x00000002
As root, (with /var/tmp/postfix/sbin still first in your PATH)
start the custom-built postfix and send a probe message to bluewin.ch:
# postfix start
# sendmail -f [email protected] -bv [email protected]
Attach to smtp(8) running under the debugger and set a break-point in
the smtp_domain_addr function
# cd /tmp; screen -DR
... type "Ctrl-tH" to create screen log file
(gdb) break smtp_domain_addr
(gdb) continue
... stops in smtp_domain_addr ...
(gdb) break dns_query
(gdb) continue
... stops in dns_query, use RES_DEBUG value from above ...
(gdb) next
(gdb) set flags = flags | 0x00000002
(gdb) finish
(gdb) next
(gdb) print status
(gdb) print reply.rcode
(gdb) continue
... type "Ctrl-tH" to close/save screen log file
... type "Ctrl-td" to detach the screen
# postfix stop
Post the screen transcript file here (edit it to remove terminal
control sequences and other noise), along with logging from
"postfix-debug" from your mail log file.
--
Viktor.