Expand PMF_FN_* macros.
[netbsd-mini2440.git] / external / ibm-public / postfix / dist / README_FILES / DEBUG_README
blob6e041d733a08056dcd623821f3d28b62b2551458
1 P\bPo\bos\bst\btf\bfi\bix\bx D\bDe\beb\bbu\bug\bgg\bgi\bin\bng\bg H\bHo\bow\bwt\bto\bo
3 -------------------------------------------------------------------------------
5 P\bPu\bur\brp\bpo\bos\bse\be o\bof\bf t\bth\bhi\bis\bs d\bdo\boc\bcu\bum\bme\ben\bnt\bt
7 This document describes how to debug parts of the Postfix mail system when
8 things do not work according to expectation. The methods vary from making
9 Postfix log a lot of detail, to running some daemon processes under control of
10 a call tracer or debugger.
12 The text assumes that the Postfix main.cf and master.cf configuration files are
13 stored in directory /etc/postfix. You can use the command "p\bpo\bos\bst\btc\bco\bon\bnf\bf
14 c\bco\bon\bnf\bfi\big\bg_\b_d\bdi\bir\bre\bec\bct\bto\bor\bry\by" to find out the actual location of this directory on your
15 machine.
17 Listed in order of increasing invasiveness, the debugging techniques are as
18 follows:
20   * Look for obvious signs of trouble
21   * Debugging Postfix from inside
22   * Try turning off chroot operation in master.cf
23   * Verbose logging for specific SMTP connections
24   * Record the SMTP session with a network sniffer
25   * Making Postfix daemon programs more verbose
26   * Manually tracing a Postfix daemon process
27   * Automatically tracing a Postfix daemon process
28   * Running daemon programs with the interactive ddd debugger
29   * Running daemon programs with the interactive gdb debugger
30   * Running daemon programs under a non-interactive debugger
31   * Unreasonable behavior
32   * Reporting problems to postfix-users@postfix.org
34 L\bLo\boo\bok\bk f\bfo\bor\br o\bob\bbv\bvi\bio\bou\bus\bs s\bsi\big\bgn\bns\bs o\bof\bf t\btr\bro\bou\bub\bbl\ble\be
36 Postfix logs all failed and successful deliveries to a logfile. The file is
37 usually called /var/log/maillog or /var/log/mail; the exact pathname is defined
38 in the /etc/syslog.conf file.
40 When Postfix does not receive or deliver mail, the first order of business is
41 to look for errors that prevent Postfix from working properly:
43     % e\beg\bgr\bre\bep\bp '\b'(\b(w\bwa\bar\brn\bni\bin\bng\bg|\b|e\ber\brr\bro\bor\br|\b|f\bfa\bat\bta\bal\bl|\b|p\bpa\ban\bni\bic\bc)\b):\b:'\b' /\b/s\bso\bom\bme\be/\b/l\blo\bog\bg/\b/f\bfi\bil\ble\be |\b| m\bmo\bor\bre\be
45 Note: the most important message is near the BEGINNING of the output. Error
46 messages that come later are less useful.
48 The nature of each problem is indicated as follows:
50   * "p\bpa\ban\bni\bic\bc" indicates a problem in the software itself that only a programmer
51     can fix. Postfix cannot proceed until this is fixed.
53   * "f\bfa\bat\bta\bal\bl" is the result of missing files, incorrect permissions, incorrect
54     configuration file settings that you can fix. Postfix cannot proceed until
55     this is fixed.
57   * "e\ber\brr\bro\bor\br" reports an error condition. For safety reasons, a Postfix process
58     will terminate when more than 13 of these happen.
60   * "w\bwa\bar\brn\bni\bin\bng\bg" indicates a non-fatal error. These are problems that you may not
61     be able to fix (such as a broken DNS server elsewhere on the network) but
62     may also indicate local configuration errors that could become a problem
63     later.
65 D\bDe\beb\bbu\bug\bgg\bgi\bin\bng\bg P\bPo\bos\bst\btf\bfi\bix\bx f\bfr\bro\bom\bm i\bin\bns\bsi\bid\bde\be
67 Postfix version 2.1 and later can produce mail delivery reports for debugging
68 purposes. These reports not only show sender/recipient addresses after address
69 rewriting and alias expansion or forwarding, they also show information about
70 delivery to mailbox, delivery to non-Postfix command, responses from remote
71 SMTP servers, and so on.
73 Postfix can produce two types of mail delivery reports for debugging:
75   * What-if: report what would happen, but do not actually deliver mail. This
76     mode of operation is requested with:
78     % /\b/u\bus\bsr\br/\b/s\bsb\bbi\bin\bn/\b/s\bse\ben\bnd\bdm\bma\bai\bil\bl -\b-b\bbv\bv a\bad\bdd\bdr\bre\bes\bss\bs.\b..\b..\b.
79     Mail Delivery Status Report will be mailed to <your login name>.
81   * What happened: deliver mail and report successes and/or failures, including
82     replies from remote SMTP servers. This mode of operation is requested with:
84     % /\b/u\bus\bsr\br/\b/s\bsb\bbi\bin\bn/\b/s\bse\ben\bnd\bdm\bma\bai\bil\bl -\b-v\bv a\bad\bdd\bdr\bre\bes\bss\bs.\b..\b..\b.
85     Mail Delivery Status Report will be mailed to <your login name>.
87 These reports contain information that is generated by Postfix delivery agents.
88 Since these run as daemon processes that cannot interact with users directly,
89 the result is sent as mail to the sender of the test message. The format of
90 these reports is practically identical to that of ordinary non-delivery
91 notifications.
93 For a detailed example of a mail delivery status report, see the debugging
94 section at the end of the ADDRESS_REWRITING_README document.
96 T\bTr\bry\by t\btu\bur\brn\bni\bin\bng\bg o\bof\bff\bf c\bch\bhr\bro\boo\bot\bt o\bop\bpe\ber\bra\bat\bti\bio\bon\bn i\bin\bn m\bma\bas\bst\bte\ber\br.\b.c\bcf\bf
98 A common mistake is to turn on chroot operation in the master.cf file without
99 going through all the necessary steps to set up a chroot environment. This
100 causes Postfix daemon processes to fail due to all kinds of missing files.
102 The example below shows an SMTP server that is configured with chroot turned
103 off:
105     /etc/postfix/master.cf:
106         # =============================================================
107         # service type  private unpriv  c\bch\bhr\bro\boo\bot\bt  wakeup  maxproc command
108         #               (yes)   (yes)   (\b(y\bye\bes\bs)\b)   (never) (100)
109         # =============================================================
110         smtp      inet  n       -       n\bn       -       -       smtpd
112 Inspect master.cf for any processes that have chroot operation not turned off.
113 If you find any, save a copy of the master.cf file, and edit the entries in
114 question. After executing the command "p\bpo\bos\bst\btf\bfi\bix\bx r\bre\bel\blo\boa\bad\bd", see if the problem has
115 gone away.
117 If turning off chrooted operation made the problem go away, then
118 congratulations. Leaving Postfix running in this way is adequate for most
119 sites. If you prefer chrooted operation, see the Postfix
120 BASIC_CONFIGURATION_README file for information about how to prepare Postfix
121 for chrooted operation.
123 V\bVe\ber\brb\bbo\bos\bse\be l\blo\bog\bgg\bgi\bin\bng\bg f\bfo\bor\br s\bsp\bpe\bec\bci\bif\bfi\bic\bc S\bSM\bMT\bTP\bP c\bco\bon\bnn\bne\bec\bct\bti\bio\bon\bns\bs
125 In /etc/postfix/main.cf, list the remote site name or address in the
126 debug_peer_list parameter. For example, in order to make the software log a lot
127 of information to the syslog daemon for connections from or to the loopback
128 interface:
130     /etc/postfix/main.cf:
131         debug_peer_list = 127.0.0.1
133 You can specify one or more hosts, domains, addresses or net/masks. To make the
134 change effective immediately, execute the command "p\bpo\bos\bst\btf\bfi\bix\bx r\bre\bel\blo\boa\bad\bd".
136 R\bRe\bec\bco\bor\brd\bd t\bth\bhe\be S\bSM\bMT\bTP\bP s\bse\bes\bss\bsi\bio\bon\bn w\bwi\bit\bth\bh a\ba n\bne\bet\btw\bwo\bor\brk\bk s\bsn\bni\bif\bff\bfe\ber\br
138 This example uses t\btc\bcp\bpd\bdu\bum\bmp\bp. In order to record a conversation you need to
139 specify a large enough buffer with the "-\b-s\bs" option or else you will miss some
140 or all of the packet payload.
142     # t\btc\bcp\bpd\bdu\bum\bmp\bp -\b-w\bw /\b/f\bfi\bil\ble\be/\b/n\bna\bam\bme\be -\b-s\bs 0\b0 h\bho\bos\bst\bt e\bex\bxa\bam\bmp\bpl\ble\be.\b.c\bco\bom\bm a\ban\bnd\bd p\bpo\bor\brt\bt 2\b25\b5
144 Older tcpdump versions don't support "-\b-s\bs 0\b0"; in that case, use "-\b-s\bs 2\b20\b00\b00\b0"
145 instead.
147 Run this for a while, stop with Ctrl-C when done. To view the data use a binary
148 viewer, e\bet\bth\bhe\ber\bre\bea\bal\bl, or good old l\ble\bes\bss\bs.
150 M\bMa\bak\bki\bin\bng\bg P\bPo\bos\bst\btf\bfi\bix\bx d\bda\bae\bem\bmo\bon\bn p\bpr\bro\bog\bgr\bra\bam\bms\bs m\bmo\bor\bre\be v\bve\ber\brb\bbo\bos\bse\be
152 Append one or more "-\b-v\bv" options to selected daemon definitions in /etc/postfix/
153 master.cf and type "p\bpo\bos\bst\btf\bfi\bix\bx r\bre\bel\blo\boa\bad\bd". This will cause a lot of activity to be
154 logged to the syslog daemon. For example, to make the Postfix SMTP server
155 process more verbose:
157     /etc/postfix/master.cf:
158         smtp      inet  n       -       n       -       -       smtpd -v
160 To diagnose problems with address rewriting specify a "-\b-v\bv" option for the
161 cleanup(8) and/or trivial-rewrite(8) daemon, and to diagnose problems with mail
162 delivery specify a "-\b-v\bv" option for the qmgr(8) or oqmgr(8) queue manager, or
163 for the lmtp(8), local(8), pipe(8), smtp(8), or virtual(8) delivery agent.
165 M\bMa\ban\bnu\bua\bal\bll\bly\by t\btr\bra\bac\bci\bin\bng\bg a\ba P\bPo\bos\bst\btf\bfi\bix\bx d\bda\bae\bem\bmo\bon\bn p\bpr\bro\boc\bce\bes\bss\bs
167 Many systems allow you to inspect a running process with a system call tracer.
168 For example:
170     # t\btr\bra\bac\bce\be -\b-p\bp p\bpr\bro\boc\bce\bes\bss\bs-\b-i\bid\bd (SunOS 4)
171     # s\bst\btr\bra\bac\bce\be -\b-p\bp p\bpr\bro\boc\bce\bes\bss\bs-\b-i\bid\bd (Linux and many others)
172     # t\btr\bru\bus\bss\bs -\b-p\bp p\bpr\bro\boc\bce\bes\bss\bs-\b-i\bid\bd (Solaris, FreeBSD)
173     # k\bkt\btr\bra\bac\bce\be -\b-p\bp p\bpr\bro\boc\bce\bes\bss\bs-\b-i\bid\bd (generic 4.4BSD)
175 Even more informative are traces of system library calls. Examples:
177     # l\blt\btr\bra\bac\bce\be -\b-p\bp p\bpr\bro\boc\bce\bes\bss\bs-\b-i\bid\bd (Linux, also ported to FreeBSD and BSD/OS)
178     # s\bso\bot\btr\bru\bus\bss\bs -\b-p\bp p\bpr\bro\boc\bce\bes\bss\bs-\b-i\bid\bd (Solaris)
180 See your system documentation for details.
182 Tracing a running process can give valuable information about what a process is
183 attempting to do. This is as much information as you can get without running an
184 interactive debugger program, as described in a later section.
186 A\bAu\but\bto\bom\bma\bat\bti\bic\bca\bal\bll\bly\by t\btr\bra\bac\bci\bin\bng\bg a\ba P\bPo\bos\bst\btf\bfi\bix\bx d\bda\bae\bem\bmo\bon\bn p\bpr\bro\boc\bce\bes\bss\bs
188 Postfix can attach a call tracer whenever a daemon process starts. Call tracers
189 come in several kinds.
191  1. System call tracers such as t\btr\bra\bac\bce\be, t\btr\bru\bus\bss\bs, s\bst\btr\bra\bac\bce\be, or k\bkt\btr\bra\bac\bce\be. These show the
192     communication between the process and the kernel.
194  2. Library call tracers such as s\bso\bot\btr\bru\bus\bss\bs and l\blt\btr\bra\bac\bce\be. These show calls of
195     library routines, and give a better idea of what is going on within the
196     process.
198 Append a -\b-D\bD option to the suspect command in /etc/postfix/master.cf, for
199 example:
201     /etc/postfix/master.cf:
202         smtp      inet  n       -       n       -       -       smtpd -D
204 Edit the debugger_command definition in /etc/postfix/main.cf so that it invokes
205 the call tracer of your choice, for example:
207     /etc/postfix/main.cf:
208         debugger_command =
209              PATH=/bin:/usr/bin:/usr/local/bin;
210              (truss -p $process_id 2>&1 | logger -p mail.info) & sleep 5
212 Type "p\bpo\bos\bst\btf\bfi\bix\bx r\bre\bel\blo\boa\bad\bd" and watch the logfile.
214 R\bRu\bun\bnn\bni\bin\bng\bg d\bda\bae\bem\bmo\bon\bn p\bpr\bro\bog\bgr\bra\bam\bms\bs w\bwi\bit\bth\bh t\bth\bhe\be i\bin\bnt\bte\ber\bra\bac\bct\bti\biv\bve\be d\bdd\bdd\bd d\bde\beb\bbu\bug\bgg\bge\ber\br
216 If you have X Windows installed on the Postfix machine, then an interactive
217 debugger such as d\bdd\bdd\bd can be convenient.
219 Edit the debugger_command definition in /etc/postfix/main.cf so that it invokes
220 d\bdd\bdd\bd:
222     /etc/postfix/main.cf:
223         debugger_command =
224              PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
225              ddd $daemon_directory/$process_name $process_id & sleep 5
227 Be sure that g\bgd\bdb\bb is in the command search path, and export X\bXA\bAU\bUT\bTH\bHO\bOR\bRI\bIT\bTY\bY so that X
228 access control works, for example:
230     % s\bse\bet\bte\ben\bnv\bv X\bXA\bAU\bUT\bTH\bHO\bOR\bRI\bIT\bTY\bY ~\b~/\b/.\b.X\bXa\bau\but\bth\bho\bor\bri\bit\bty\by (csh syntax)
231     $ e\bex\bxp\bpo\bor\brt\bt X\bXA\bAU\bUT\bTH\bHO\bOR\bRI\bIT\bTY\bY=\b=$\b$H\bHO\bOM\bME\bE/\b/.\b.X\bXa\bau\but\bth\bho\bor\bri\bit\bty\by (sh syntax)
233 Append a -\b-D\bD option to the suspect daemon definition in /etc/postfix/master.cf,
234 for example:
236     /etc/postfix/master.cf:
237         smtp      inet  n       -       n       -       -       smtpd -D
239 Stop and start the Postfix system. This is necessary so that Postfix runs with
240 the proper X\bXA\bAU\bUT\bTH\bHO\bOR\bRI\bIT\bTY\bY and D\bDI\bIS\bSP\bPL\bLA\bAY\bY settings.
242 Whenever the suspect daemon process is started, a debugger window pops up and
243 you can watch in detail what happens.
245 R\bRu\bun\bnn\bni\bin\bng\bg d\bda\bae\bem\bmo\bon\bn p\bpr\bro\bog\bgr\bra\bam\bms\bs w\bwi\bit\bth\bh t\bth\bhe\be i\bin\bnt\bte\ber\bra\bac\bct\bti\biv\bve\be g\bgd\bdb\bb d\bde\beb\bbu\bug\bgg\bge\ber\br
247 If you have the screen command installed on the Postfix machine, then you can
248 run an interactive debugger such as g\bgd\bdb\bb as follows.
250 Edit the debugger_command definition in /etc/postfix/main.cf so that it runs
251 g\bgd\bdb\bb inside a detached s\bsc\bcr\bre\bee\ben\bn session:
253     /etc/postfix/main.cf:
254         debugger_command =
255             PATH=/bin:/usr/bin:/sbin:/usr/sbin; export PATH; HOME=/root;
256             export HOME; screen -e^tt -dmS $process_name gdb
257             $daemon_directory/$process_name $process_id & sleep 2
259 Be sure that g\bgd\bdb\bb is in the command search path.
261 Append a -\b-D\bD option to the suspect daemon definition in /etc/postfix/master.cf,
262 for example:
264     /etc/postfix/master.cf:
265         smtp      inet  n       -       n       -       -       smtpd -D
267 Execute the command "p\bpo\bos\bst\btf\bfi\bix\bx r\bre\bel\blo\boa\bad\bd" and wait until a daemon process is started
268 (you can see this in the maillog file).
270 Then attach to the screen, and debug away:
272     # HOME=/root screen -r
273     gdb) continue
274     gdb) where
276 R\bRu\bun\bnn\bni\bin\bng\bg d\bda\bae\bem\bmo\bon\bn p\bpr\bro\bog\bgr\bra\bam\bms\bs u\bun\bnd\bde\ber\br a\ba n\bno\bon\bn-\b-i\bin\bnt\bte\ber\bra\bac\bct\bti\biv\bve\be d\bde\beb\bbu\bug\bgg\bge\ber\br
278 If you do not have X Windows installed on the Postfix machine, or if you are
279 not familiar with interactive debuggers, then you can try to run g\bgd\bdb\bb in non-
280 interactive mode, and have it print a stack trace when the process crashes.
282 Edit the debugger_command definition in /etc/postfix/main.cf so that it invokes
283 the g\bgd\bdb\bb debugger:
285     /etc/postfix/main.cf:
286         debugger_command =
287             PATH=/bin:/usr/bin:/usr/local/bin; export PATH; (echo cont; echo
288             where; sleep 8640000) | gdb $daemon_directory/$process_name
289             $process_id 2>&1
290             >$config_directory/$process_name.$process_id.log & sleep 5
292 Append a -\b-D\bD option to the suspect daemon in /etc/postfix/master.cf, for
293 example:
295     /etc/postfix/master.cf:
296         smtp      inet  n       -       n       -       -       smtpd -D
298 Type "p\bpo\bos\bst\btf\bfi\bix\bx r\bre\bel\blo\boa\bad\bd" to make the configuration changes effective.
300 Whenever a suspect daemon process is started, an output file is created, named
301 after the daemon and process ID (for example, smtpd.12345.log). When the
302 process crashes, a stack trace (with output from the "w\bwh\bhe\ber\bre\be" command) is
303 written to its logfile.
305 U\bUn\bnr\bre\bea\bas\bso\bon\bna\bab\bbl\ble\be b\bbe\beh\bha\bav\bvi\bio\bor\br
307 Sometimes the behavior exhibited by Postfix just does not match the source
308 code. Why can a program deviate from the instructions given by its author?
309 There are two possibilities.
311   * The compiler has erred. This rarely happens.
313   * The hardware has erred. Does the machine have ECC memory?
315 In both cases, the program being executed is not the program that was supposed
316 to be executed, so anything could happen.
318 There is a third possibility:
320   * Bugs in system software (kernel or libraries).
322 Hardware-related failures usually do not reproduce in exactly the same way
323 after power cycling and rebooting the system. There's little Postfix can do
324 about bad hardware. Be sure to use hardware that at the very least can detect
325 memory errors. Otherwise, Postfix will just be waiting to be hit by a bit
326 error. Critical systems deserve real hardware.
328 When a compiler makes an error, the problem can be reproduced whenever the
329 resulting program is run. Compiler errors are most likely to happen in the code
330 optimizer. If a problem is reproducible across power cycles and system reboots,
331 it can be worthwhile to rebuild Postfix with optimization disabled, and to see
332 if optimization makes a difference.
334 In order to compile Postfix with optimizations turned off:
336     % m\bma\bak\bke\be t\bti\bid\bdy\by
337     % m\bma\bak\bke\be m\bma\bak\bke\bef\bfi\bil\ble\bes\bs O\bOP\bPT\bT=\b=
339 This produces a set of Makefiles that do not request compiler optimization.
341 Once the makefiles are set up, build the software:
343     % m\bma\bak\bke\be
344     % s\bsu\bu
345     Password:
346     # m\bma\bak\bke\be i\bin\bns\bst\bta\bal\bll\bl
348 If the problem goes away, then it is time to ask your vendor for help.
350 R\bRe\bep\bpo\bor\brt\bti\bin\bng\bg p\bpr\bro\bob\bbl\ble\bem\bms\bs t\bto\bo p\bpo\bos\bst\btf\bfi\bix\bx-\b-u\bus\bse\ber\brs\bs@\b@p\bpo\bos\bst\btf\bfi\bix\bx.\b.o\bor\brg\bg
352 The people who participate on postfix-users@postfix.org are very helpful,
353 especially if YOU provide them with sufficient information. Remember, these
354 volunteers are willing to help, but their time is limited.
356 When reporting a problem, be sure to include the following information.
358   * A summary of the problem. Please do not just send some logging without
359     explanation of what YOU believe is wrong.
361   * Complete error messages. Please use cut-and-paste, or use attachments,
362     instead of reciting information from memory.
364   * Postfix logging. See the text at the top of the DEBUG_README document to
365     find out where logging is stored. Please do not frustrate the helpers by
366     word wrapping the logging. If the logging is more than a few kbytes of
367     text, consider posting an URL on a web or ftp site.
369   * Consider using a test email address so that you don't have to reveal email
370     addresses or passwords of innocent people.
372   * If you can't use a test email address, please anonymize email addresses and
373     host names consistently. Replace each letter by "A", each digit by "D" so
374     that the helpers can still recognize syntactical errors.
376   * Output from "p\bpo\bos\bst\btc\bco\bon\bnf\bf -\b-n\bn". Please do not send your main.cf file, or 500+
377     lines of p\bpo\bos\bst\btc\bco\bon\bnf\bf output.
379   * Better, provide output from the p\bpo\bos\bst\btf\bfi\bin\bng\bge\ber\br tool. This can be found at http:
380     //ftp.wl0.org/SOURCES/postfinger.
382   * If the problem is SASL related, consider including the output from the
383     s\bsa\bas\bsl\blf\bfi\bin\bng\bge\ber\br tool. This can be found at http://postfix.state-of-mind.de/
384     patrick.koetter/saslfinger/.
386   * If the problem is about too much mail in the queue, consider including
387     output from the q\bqs\bsh\bha\bap\bpe\be tool, as described in the QSHAPE_README file.
389   * If the problem is protocol related (connections time out, or an SMTP server
390     complains about syntax errors etc.) consider recording a session with
391     t\btc\bcp\bpd\bdu\bum\bmp\bp, as described in the DEBUG_README document.