Les réécritures d'adresses et les règles
Les règles
Sendmail utilise des règles de réécritures pour plusieurs raisons:
Réécrire les adresses expéditrices (MAIL FROM:)
Réécrire les adresses destinataires ( RCPT TO:)
Réécrire toutes les adresses.
Vérifier les adresses (protection relaying, mail bombing,..).
Déterminer le mailer destinataire ( un MUA local ou un MTA distant).
Sendmail recoit au moins 2 adresses: une adresse expéditeur et une adresse destinataire. Les adresses reçues sont testées pour réécritures dans la section REWRITING RULES du fichier de configuration:
################################################################# #################################################################
##### REWRITING RULES
################################################################# #################################################################
############################################
### Ruleset 3 -- Name Canonicalization ###
############################################
Scanonify=3
# handle null input (translate to <@> special case)
R$@ $@ <@> # strip group: syntax (not inside angle brackets!) and trailing semicolon
R$* $: $1 <@> mark addresses
R$* < $* > $* <@> $: $1 < $2 > $3 unmark
R@ $* <@> $: @ $1 unmark @host:... R$* :: $*
etc,...<@>
Le chemin des adresses au travers des règles.
L'adresses sont mises en mémoire dans l'emplacement appelé workspace. Plusieurs règles peuvent alors réécrire les adresses.Certaines règles respectent un ordre séquentiel de réécriture (d'abord la règle 3 puis la règle 0). D'autre règles intéragissent différemment. Sans rentrer dans le détail voiçi les règles empruntées.
Toute adresse est d'abord envoyée à la règle 3.
Ensuite la règle 0 détermine ou le courrier doit être envoyé.
Pendant ces passages, des réécritures vont modifier les formats d'adresses.
Après la règle 0, le nom symbolique du mailer destinataire est connu, ce mailer fait subir aux adresses d'autres réécritures (S=EnvFromL/HdrFromL, R=EnvToL/HdrToL) avant d'envoyer le courrier.
Indépendament, les règles check_* vont tester les adresses et les réécrire (pour vérifier si les adresses sont autorisées à traverser le système).
Les règles check_* ne réécrivent pas au final l'adresse mais (réécriture juste local à la règle pour test). Les règles numérotées réalisent les réécritures. Une règle peut appelée une autre règle. Une règle peut réécrire plusieurs fois une même adresse.

Types de règles
Les réécritures sont décomposées en plusieurs règles, chacune réalisant une tâche précise.
La règle 3 : Mettre aux normes (RFC) l'adresse email.
La règle 0 : définit qui (autre mailer MUA ou MTA) doit prendre en charge le mail en fonction de l'adresse email reçue.
check_* : ces règles sont utilisées pour vérifier les adresses ( destinataire et expéditeur).
Pour tester une règle, il vous suffit de lancer Sendmail en mode test et debugg. Exemple de la règle 0:
# /usr/sbin/sendmail -C/etc/mail/sendmail.cf -bt -d21.4
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
Le principe de réécriture
Une règle ressemble à quelque chose comme:
R$*<@>$* $@ $>Parse0 $1
R$*<@ $=w .> $@ $>Parse0 $1
R$*<@$+ >$* $#error $@ 5.1.3 $: "501 User address required"
Les explications pour comprendre ce principe est décrit içi.