La RHS:

Le rôle de la Right Hand Side est de réécrire l'adresse qui coincide avec la LHS. Les opérateurs sont différents de la LHS; A la place on trouve des opérateurs numériques: 1, 2, 3, etc.. correspondant à la position de l'opérateur dans la LHS. L'opérateur numérique de la RHS est égal à l'opérateur de la RHS:

R$+ @ $+    $1!$2
 -^    -^
 $1  $2

Si l'adresse arnaud.fileux@domaine.com est envoyée dans l'espace de travail, on aura la réécriture suivante: arnaud.fileux!domaine.com

R$+                @      $+                           $1      !    $2
 -^                 -^      -^                             -^       -^    -^ 
arnaud.fileux ($1) @ domaine.com ($2)     donne arnaud.fileux ! domaine.com

 

Si dans la RHS on inverse les 2 opérateurs numériques $1 et $2

R$+ @ $+    $2!$1
 -^    -^
 $1  $2

Si l'adresse arnaud.fileux@domaine.com est envoyé dans l'espace de travail, on aura la réécriture suivante: domaine.com!arnaud.fileux puisque dans la RHS nous avons inverser les opérateurs $1 et $2.

    R$+             @        $+                      $2         !        $1
     -^              -^         -^                        -^         -^        -^    
arnaud.fileux ($1)  @   domaine.com ($2)     donne domaine.com ! arnaud.fileux 

 

En fonction des règles dans la LHS, les adresses seront interprétées différemment:

Exemples :

1 Adresse envoyée arnaud.fileux@domaine.com

R$*        Ok ca coincide et l'adresse envoyée est: arnaud.fileux@domaine.com. la RHS ne peut contenir que $1 car un seul opérateur dans la LHS. $1 sera égal à arnaud.fileux@domaine.com dans ce cas.

R$* @ $*        Ok ca coincide et l'adresse est découpée dans l'espace de travail (la RHS peut contenir $1 et $2 car 2 opérateurs dans la LHS). Dans ce cas $1 est égal à arnaud.fileux et $2 est égal à domaine.com.

R$*<$*>$*     Ca ne coincide pas. Il n'y a pas de réécriture (pas de signes < et > dans l'adresse envoyée).

		R$*       <     $*   > $*        			 
 		 -^        -^    
arnaud.fileux@domaine.com  Problème: pas de signe "<" la règle ne coincide pas

 

2 Adresse envoyée arnaud.fileux <domaine.com>

R$*<$*>$*      Le premier opérateur vaut arnaud.fileux ($1 dans la RHS), le 2ème opérateur vaut domaine.com ($2 dans la RHS) et le 3ème opérateur est nul. ($3 est nul).

       R$*          <      $*           >     $*
        -^           -^      -^            -^      -^    
arnaud.fileux ($1)  <  domaine.com ($2) >    ($3)     Ok ca coincide
  

 

R$*      Un seul opérateur qui est arnaud.fileux<@domaine.com> ($1 vaut arnaud.fileux<domaine.com> dans la RHS ).

		R$*
 		 -^
arnaud.fileux < domaine.com > ($1)     Ok ca coincide

 

Autres opérateurs de la RHS

Nous avons déjà vu les opérateurs numériques dans la RHS, ils sont étroitement liés aux opérateurs de la LHS. Il existe d'autres opérateurs:

opérateurs $@ (réécriture et sortie de l'espace de travail.)

Lorsqu'une règle coincide, l'adresse est réécrite puis l'adresse reste dans l'espace de travail et continu les tentatives de réécritures avec les règles qui suivent:

imaginons que l'on ait les règles suivantes:

	Rxxx        yyy  coincide et passe à la règle du dessous
	Ryyy        zzz


Si l'on passe dans l'espace de travail l'adresse xxx alors une première réécriture sera effectuée en yyy puis la règle du dessous coincidant, il y aura réécriture de yyy en xxx. Si on place l'opérateur @ dans la RHS alors l'adresse une fois réécrite sort de l'espace de travail et ne passe pas à l'adresse suivante.


	Rxxx          $@ yyy  coincide mais ne passe pas à la règle du dessous
	Ryyy           zzz

opérateurs $: (boucle tant que l'adresse coincide)

R<$*>        $:  $1

Si l'adresse suivante est passée dans l'espace de travail: <<<@domaine.com>>>

1ère réécriture:

	R<           $*                     >      $:               $1
 	 -^           -^                      -^      -^                -^    
	 <  < <  domaine.com > > égal à $1  >         réécrit en < <  domaine.com > > et recommence la règle

 

Alors nous aurons les réécritures successives:

<<<@domaine.com>>> ( $1 vaut <<@domaine.com>> )         donne        <<@domaine.com>>

<<@domaine.com>> ( $1 vaut <@domaine.com> )         donne        <@domaine.com>

<@domaine.com> ( $1 vaut @domaine.com )         donne        @domaine.com

@domaine.com        la règle ne coincide plus...arrêt et retourne @domaine.com

Opérateurs $> (appel d'une règle.)

Si l'on a la règle


	Rxxx          $>98 yyy  appel règle 98

Si l'adresse passée dans l'espace de travail est xxx alors la règle du dessus appelle la règle 98 et lui passe l'adresse yyy


	R$*          $>98 <$1>  appel règle 98
 

Si l'adresse passée est arnaud.fileux@domaine.com alors l'adresse coincide et $1 vaut arnaud.fileux@domaine.com et c'est l'adresse <arnaud.fileux@domaine.com> qui est passée à la règle 98

Opérateurs $# (appel d'un agent de délivrance)

Cet opérateur est utilisé dans les règles 0 et 5 et sert à définir quel sera l'agent de livraison pour un type d'adresse.

Si l'on souhaite que le domaine domaine.com soit considéré local et doit envoyer le courrier au programme de livraison local procmail par exemple, un extrait de la règle ressemblera à:

	R$*@domaine.com          $#local 

Le local définit içi doit correspondre à un mailer présent dans la définition des mailers du fichier de configuration de sendmail:

Mlocal, P=/usr/bin/procmail, F=lsDFMAw5:/|@qSPfhn9, S=EnvFromL/HdrFromL, R=EnvToL/HdrToL, T=DNS/RFC822/X-Unix,

L'agent de délivrance symbolique error est utilisé lorsque l'adresse testée est refusée par Sendmail (ex: protection Relaying dans les règles check_*). On l'utilise de la manière suivante:

  R$*@spamming.com             $#error      $@ 5.7.2     $:Pas de relaying pour le domaine spamming.com
         -^                        -^             -^                      -^    
    adresse testée      agent de délivrance    DSN         Commentaire envoyé par Sendmail à l'expéditeur

Opérateurs $[ $]

Les opérateurs entre les crochets [ ] sont considérés comme des noms d'hôte et peuvent alors être soumis à des résolutions DNS. Ce sont par exemples des noms de machines vers lesquels Sendmail routera le courrier destiné à un nom de domaine spécifique.

Opérateurs $( $)

Ces opérateurs sont utilisés avec les noms symboliques d'accès aux bases de données (virtusertable, mailertable,...).

exemple:

	R$+<@$=m.>		$:<@$2>			suppression des points qui trainent...
	R$+<@$=m>		$:$(virtuser $1@$2 $)<?>
	R$+<?>			$# local $: localhost $@ $1

Içi, nous recherchons les utilisateurs de notre domaine ( $=m ) et nous allons réécrire leur adresse telle qu'elle est décrite dans le fichier virtusertable par exemple en le nom de login de l'utilisateur. Si il y a réécriture, le courrier est local (ce type de règle s'utilise dans la règle 0).

Le test en mode debugg pour la règle çi-dessus donne: /usr/sbin/sendmail -bt -d21.12

 

Vous pouvez aussi utiliser cet opérateur pour rejeter les utilisateurs non déclarés en réception (dans la règle check_rcpt). Par exemple, avec toujours le même fichier virtusertable, vous rajoutez une condition si l'utilisateur local n'existe pas:

:

	R$+<@$=m.>		$:<@$2>			suppression des pointsqui trainent...
	R$+<@$=m>		$:$(virtuser $1@$2 $:$1.INVALIDUSER $)<?>
	R$+.INVALIDUSER<?>	$#error $@ 5.7.1 $: Utilisateur inconnu $1
	R$+<?>			$# local $: localhost $@ $1

Le test en mode debugg donne: /usr/sbin/sendmail -bt -d21.12