next up previous contents index
Next: Expédition directe Up: Mise au point Previous: Option test   Contents   Index

Niveaux de debug

Le mode -bt vu précédemment est suffisant pour détecter la majeure partie des problèmes. Toutefois, il existe certains cas où il faut faire appel à des diagnostics plus élaborés. Le programme sendmailest très complet dans ce domaine, puisqu'il est capable de tracer un grand nombre d'actions.

Il y a un grand nombre de niveaux de debug, mais les plus immédiatement utiles sont :

Niveau Signification
21.1 affiche l'adresse en cause en cas de récursion infinie
21.2 affiche les adresses à l'entrée et à la sortie d'un ensemble, ainsi que les variables demandant une évaluation lors de l'expansion
21.3 affiche les adresses lors des appels aux ensembles
21.4 affiche les adresses réécrites par les ensembles
21.10 affiche les règles non utilisées
21.15 visualise le comportement de l'algorithme
21.35 affiche la reconnaissance de l'adresse en fonction de la partie gauche des règles
21.36 affiche en détail la reconnaissance de l'adresse

En pratique, le niveau -d21.2 permet de suivre l'envoi d'un courrier et le niveau -d21.15 permet d'analyser le fonctionnement des règles de réécriture. Par exemple2.5 :

soleil# /usr/lib/sendmail -C $HOME/sendmail.cf.new -d21.2 pda
From: pda
To: pda

essai
^D

provoque l'affichage de

rewrite: ruleset  3   input: pda
rewrite: ruleset 19   input: pda
rewrite: ruleset 19   input: pda < @ . LOCAL >
rewrite: ruleset 19 returns: pda < @ . LOCAL >
rewrite: ruleset 19 returns: pda < @ . LOCAL >
rewrite: ruleset  3 returns: pda < @ . LOCAL >
rewrite: ruleset  0   input: pda < @ . LOCAL >
rewrite: ruleset  0 returns: $# local $: pda
rewrite: ruleset  4   input: pda
rewrite: ruleset  4 returns: pda

rewrite: ruleset  3   input: pda
rewrite: ruleset 19   input: pda
rewrite: ruleset 19   input: pda < @ . LOCAL >
rewrite: ruleset 19 returns: pda < @ . LOCAL >
rewrite: ruleset 19 returns: pda < @ . LOCAL >
rewrite: ruleset  3 returns: pda < @ . LOCAL >
rewrite: ruleset  1   input: pda < @ . LOCAL >
rewrite: ruleset 17   input: pda < @ . LOCAL >
rewrite: ruleset 17 returns: Pierre . David < @ . LOCAL >
rewrite: ruleset  1 returns: Pierre . David < @ . LOCAL >
rewrite: ruleset  4   input: Pierre . David < @ . LOCAL >
rewrite: ruleset  4 returns: Pierre . David

rewrite: ruleset  3   input: pda
rewrite: ruleset 19   input: pda
rewrite: ruleset 19   input: pda < @ . LOCAL >
rewrite: ruleset 19 returns: pda < @ . LOCAL >
rewrite: ruleset 19 returns: pda < @ . LOCAL >
rewrite: ruleset  3 returns: pda < @ . LOCAL >
rewrite: ruleset  0   input: pda < @ . LOCAL >
rewrite: ruleset  0 returns: $# local $: pda
rewrite: ruleset  2   input: pda
rewrite: ruleset  2 returns: pda
rewrite: ruleset 20   input: pda
rewrite: ruleset 20 returns: pda
rewrite: ruleset  4   input: pda
rewrite: ruleset  4 returns: pda

La première série correspond à la sélection de l'agent de transport à l'aide de l'adresse figurant dans l'enveloppe (c'est-à-dire l'argument de sendmail). La deuxième série montre la réécriture de l'adresse de l'expéditeur et la troisième l'adresse du destinataire.

Le niveau -d21.15 détaille très finement le fonctionnement de l'algorithme des règles de réécriture. Par exemple :

soleil$ /usr/lib/sendmail -C $HOME/sendmail.cf.new -bt -d21.15
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> 1 pda<@.LOCAL>
rewrite: ruleset  1   input: pda < @ . LOCAL >
-----trying rule: $*
-----rule matches: $: $> 17 $1
$1: 7b033de4="pda" 7b033de8="<" 7b033dea="@" 7b033dec="." 7b033dee="LOCAL" 7b033df4=">"
-----callsubr 17
rewrite: ruleset 17   input: pda < @ . LOCAL >
-----trying rule: $* < @ $+ . LOCAL > $*
----- rule fails
-----trying rule: $* < @ $* . LOCAL > $*
-----rule matches: $@ $( revaliases $1 $) < @ $2 . LOCAL > $3
$1: 7b033de4="pda"
$2:
$3:
rewritten as: Pierre . David < @ . LOCAL >
rewrite: ruleset 17 returns: Pierre . David < @ . LOCAL >
rewritten as: Pierre . David < @ . LOCAL >
rewrite: ruleset  1 returns: Pierre . David < @ . LOCAL >
>

Pour ne pas trop alourdir l'exemple, l'ensemble de règles numéro 1 est directement appelé avec une adresse en forme canonique (pda<@.LOCAL>). Cet ensemble 1 reconnaît le motif $*, et donc appelle l'ensemble 17. Dans ce nouvel ensemble, la première règle échoue, la deuxième réussit, et la réécriture conduit à l'adresse finale.

Il existe de nombreux autres catégories et niveaux de debug. Les catégories sont listées dans les sources de sendmail(fichier src/TRACEFLAGS).


next up previous contents index
Next: Expédition directe Up: Mise au point Previous: Option test   Contents   Index
Pierre DAVID 2001-11-26