LDAP avec Sendmail

 

Introduction

Exemple de prise en charge LDAP avec OpenLDAP et Sendmail.

Compilation

Options nécessaires pour la compilation:

APPENDDEF(`confMAPDEF',`-DLDAPMAP') 
APPENDDEF(`conf_sendmail_LIBS',`-lldap -llber')     

Eventuellement précisez les chemins pour les bibliothèques et fichiers include ou vous avez installé LDAP:

 APPENDDEF(`confINCDIRS',`-I/usr/local/include') 
 APPENDDEF(`confLIBDIRS',`-L/usr/local/lib')    


Vérifier que Sendmail prend en charge LDAP:

/usr/sbin/sendmail -bt -d0.1

Version 8.11.3

Compiled with: LDAPMAP MAP_REGEX LOG MATCHGECOS MIME7TO8 MIME8TO7 NAMED_BIND NETINET NETUNIX NEWDB NIS QUEUE SASL SCANF SMTP USERDB XDEBUG

 

Configuration

KR /etc/mail/relay-domains
Kldapmap ldap -b"o=DECAS, c=Fr" -h "ldap.decaservices.com" -k "mail=%s" -v mailRoutingAddress

Sparse=0 
R$* 			$: $>Parse0 $1 initial parsing 
R$*<@$=R.> 		$: $>91 $1@$2   #appel de la regle 91
R$<@>	<@>		$#local $: <@> special case error msgs
R$* 			$: $>ParseLocal $1 handle local hacks
R$* 			$: $>Parse1 $1 final parsing  

#Regle pour reecriture LDAP
S91
R$+@$+				 $: $(ldapmap $1@$2 $: INVALIDUSER.$1 $)
RINVALIDUSER.$*		 $#error $@ 5.7.2 $: Utilisateur  inconnu $1
R$+					 $#local $@ ldap.decaservices.com $: $1
  

Tests

> 0 arnaud.fileux<@decaservices.com.> 
parse input: arnaud . fileux < @ decaservices . com . > 
 -----trying rule: $* 
-----rule matches: $: $> Parse0 $1   
-----callsubr Parse0 (199) 
Parse0 		input: arnaud . fileux < @ decaservices . com . > 
-----trying rule: < @ >
----- rule fails 
-----trying rule: $* : $* ; < @ >
----- rule fails
-----trying rule: @ < @ $* >
----- rule fails
-----trying rule: < @ $+ >
----- rule fails 
-----trying rule: $* 
-----rule matches: $: < > $1 
rewritten as: < > arnaud . fileux < @ decaservices . com . >
-----trying rule: < > $* < @ [ $+ ] > $* 
----- rule fails
 -----trying rule: < > $* < $* : $* > $*
----- rule fails
-----trying rule: < > $* 
-----rule matches: $1 
rewritten as: arnaud . fileux < @ decaservices . com . > 
-----trying rule: < > $* 
----- rule fails 
-----trying rule: $* < @ . $* > $*
----- rule fails
-----trying rule: $* < @ $* . . $* > $* 
----- rule fails 
-----trying rule: $* , $~O $*   
----- rule fails
-----trying rule: $* < @ > $*
----- rule fails 
-----trying rule: < @ $=w . > : $*
----- rule fails
-----trying rule: $- < @ $=w . >
----- rule fails 
-----trying rule: < @ $+ >
----- rule fails
-----trying rule: $* $=O $* < @ $=w . >
----- rule fails 
-----trying rule: $-
----- rule fails
-----trying rule: < @ *LOCAL* >
----- rule fails 
-----trying rule: $* $=O $* < @ *LOCAL* >
----- rule fails 
-----trying rule: $* < @ *LOCAL* >
----- rule fails
Parse0 returns: arnaud . fileux < @ decaservices . com . > 
rewritten as: arnaud . fileux < @ decaservices . com . >
-----trying rule: $* < @ $=R . > 
-----rule matches: $: $> 91 $1 @ $2 
-----callsubr 91 (91)
 91				 input: arnaud . fileux @ decaservices . com
-----trying rule: $+ @ $+ 
-----rule matches: $: $( ldapmap $1 @ $2 $: INVALIDUSER . $1 $) 
rewritten as: arno 
-----trying rule: INVALIDUSER . $*
----- rule fails 
-----trying rule: $+
-----rule matches: $# local $@ ldap.decaservices.com $: $1
rewritten as: $# local $@ ldap.decaservices.com $: arno
91 		returns: $# local $@ ldap.decaservices.com $: arno 
rewritten as: $# local $@ ldap.decaservices.com $: arno
parse returns: $# local $@ ldap.decaservices.com $: arno 
>