diff --git a/Python/etc/ldap/ldap.conf b/Python/etc/ldap/ldap.conf index 7e30d73..df0b4cb 100644 --- a/Python/etc/ldap/ldap.conf +++ b/Python/etc/ldap/ldap.conf @@ -1,7 +1,7 @@ # -*- mode: python; coding: utf-8 -*- include("mode/space") -include("ip") +include("ldap") header("Acces a la base ldap") @@ -9,8 +9,5 @@ header("Acces a la base ldap") @# This file should be world readable but not world writable. @BASE dc=crans, dc=org -if has("db-server"): - %URI "ldapi://%2fvar%2frun%2fslapd%2fldapi/" - %TLS_CACERT "/etc/ssl/certs/CAcrans.pem" -else: - %URI "ldap://%s/" % admipof("ldap") +%URI "%s" % ldap_socket +@#TLS_CACERT /etc/ssl/certs/CAcrans.pem diff --git a/Python/etc/libnss-ldap.conf b/Python/etc/libnss-ldap.conf index aee33c5..b824333 100644 --- a/Python/etc/libnss-ldap.conf +++ b/Python/etc/libnss-ldap.conf @@ -17,12 +17,8 @@ info["perms"] = 0644 @# | Configuration de la communication avec le serveur | @# +---------------------------------------------------+ -if has("db-server"): - @# Socket unix du serveur - %uri "ldapi://%2fvar%2frun%2fslapd%2fldapi/" -else: - @# Addresse du serveur - %uri "ldap://%s/" % admipof("ldap") +@# Base LDAP +%uri "%s" % ldap_socket @# The distinguished name of the search base. %base "dc=crans,dc=org" @@ -60,27 +56,12 @@ else: # On n'utilise ldap pour résoudre les bases de données # passwd, group et shadow -# Vert a besoin de tous les utilisateurs pour quelques trucs, genre les scripts de vérif des débris, etc. -droits = [] -if has("users") or has("vert"): - # Sur le serveur des adhérents, on veut que tout - # les adhérents soit reconnus comme utilisateurs locaux - %nss_base_passwd "ou=data,dc=crans,dc=org?one" -else: - # Sur les autres serveurs on filtre pour que seuls - # les nounous et les apprentis le soit. - # Il est important de mettre ce filtrage au niveau de - # libnss-ldap et pam-ldap car ssh utilise pam pour les - # mots de passe mais pour l'authentification par clés - # il n'utilise que nss - droits.append("nss_base_passwd ou=data,dc=crans,dc=org?one?|(droits=Nounou)(droits=Apprenti)") - if has("imprimeurs"): - droits.append("(droits=Imprimeur)") - if has("webmasters"): - droits.append("(droits=WebMaster)") - if has("bureau"): - droits.append("(droits=Bureau)") - print ''.join(droits) +if ldap_filter: + passwd_filter = "?%s" % ldap_filter +else: + passwd_filter = "" + +%nss_base_passwd "ou=data,dc=crans,dc=org?one%s" % passwd_filter %nss_base_shadow "ou=data,dc=crans,dc=org?one" %nss_base_group "ou=Group,dc=crans,dc=org?one" diff --git a/Python/etc/nss-ldapd.conf b/Python/etc/nss-ldapd.conf index b640e4c..1b83480 100644 --- a/Python/etc/nss-ldapd.conf +++ b/Python/etc/nss-ldapd.conf @@ -2,7 +2,7 @@ include("mode/space") include("secrets") -include("ip") +include("ldap") header(""" Fichier de configuration pour libnss-ldapd. @@ -25,12 +25,7 @@ info["perms"] = 0600 @# | Configuration de la communication avec le serveur | @# +---------------------------------------------------+ @ -if has("db-server"): - @# Socket unix du serveur - %uri "ldapi://%2fvar%2frun%2fslapd%2fldapi/" -else: - @# Addresse du serveur - %uri "ldap://%s/" % admipof("ldap") +%uri "%s" % ldap_socket @ @# Le distinguished name de la base de recherche %base "dc=crans,dc=org" @@ -61,22 +56,7 @@ else: @base shadow ou=data,dc=crans,dc=org @base group ou=Group,dc=crans,dc=org -if not has('users'): - # Sur les serveurs autres que zamok, on filtre pour que seuls - # les nounous et les apprentis soient vus. - # Il est important de mettre ce filtrage au niveau de - # libnss-ldap et pam-ldap car ssh utilise pam pour les - # mots de passe mais pour l'authentification par clés - # il n'utilise que nss - droits = ['(|'] - droits.append("(droits=Nounou)(droits=Apprenti)") - if has("imprimeurs"): - droits.append("(droits=Imprimeur)") - if has("webmasters"): - droits.append("(droits=WebMaster)") - if has("bureau"): - droits.append("(droits=Bureau)") - droits.append(')') +if ldap_filter: @ @# Filtre de recherche - print "filter passwd", ''.join(droits) + print "filter passwd (%s)" % ldap_filter diff --git a/Python/etc/pam_ldap.conf b/Python/etc/pam_ldap.conf index 082dc0f..3be0d10 100644 --- a/Python/etc/pam_ldap.conf +++ b/Python/etc/pam_ldap.conf @@ -2,7 +2,7 @@ include("mode/space") include("secrets") -include("ip") +include("ldap") header(""" Fichier de configuration de libpam-ldap. @@ -17,13 +17,8 @@ Pour des informations détaillées voir pam_ldap.conf(5) @# The distinguished name of the search base. %base "dc=crans,dc=org" -if has("db-server"): - # Le serveur principale ainsi que les réplica se connectent par - # socket unix - %uri "ldapi://%2fvar%2frun%2fslapd%2fldapi/" -else: - # Les autres c'est par le réseau - %uri "ldap://%s/" % admipof("ldap") +@# Base LDAP +%uri "%s" % ldap_socket @# The LDAP version to use (defaults to 3 @# if supported by client library) @@ -71,26 +66,12 @@ if not has("db-main"): # On n'utilise ldap pour résoudre les bases de données # passwd, group et shadow -droits = [] -if has("users"): - # Sur le serveur des adhérents, on veut que tout - # les adhérents soit reconnus comme utilisateurs locaux - %nss_base_passwd "ou=data,dc=crans,dc=org?one" -else: - # Sur les autres serveurs on filtre pour que seuls - # les nounous et les apprentis le soit. - # Il est important de mettre ce filtrage au niveau de - # libnss-ldap et pam-ldap car ssh utilise pam pour les - # mots de passe mais pour l'authentification par clés - # il n'utilise que nss - droits.append("nss_base_passwd ou=data,dc=crans,dc=org?one?|(droits=Nounou)(droits=Apprenti)") - if has("imprimeurs"): - droits.append("(droits=Imprimeur)") - if has("webmasters"): - droits.append("(droits=WebMaster)") - if has("bureau"): - droits.append("(droits=Bureau)") - print ''.join(droits) +if ldap_filter: + passwd_filter = "?%s" % ldap_filter +else: + passwd_filter = "" + +%nss_base_passwd "ou=data,dc=crans,dc=org?one%s" % passwd_filter %nss_base_shadow "ou=data,dc=crans,dc=org?one" %nss_base_group "ou=Group,dc=crans,dc=org?one" diff --git a/etc/python/common.py b/etc/python/common.py index b966230..cebd763 100644 --- a/etc/python/common.py +++ b/etc/python/common.py @@ -76,12 +76,3 @@ def onoff(b): def outl(line): out(line) out("\n") - -# Le serveur qui gère la base de données -if has("db-server"): - # Pour ceux qui ont la base ou une copie en locale - # on regarde dans celle-ci - ldap_host = "ldap://localhost/" -else: - # Sinon on regarde dans la base principale - ldap_host = "ldap://ldap.adm.crans.org/" diff --git a/etc/python/ldap.py b/etc/python/ldap.py new file mode 100644 index 0000000..9074999 --- /dev/null +++ b/etc/python/ldap.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +# +# Configuration du serveur LDAP +# + +from ip import admipof + +# ldap_host correspond à l'adresse réseau de la base +# ldap_socket à l'adresse physique de la base (donc physique si possible) + +# Le serveur qui gère la base de données +if has("db-server"): + # Pour ceux qui ont la base ou une copie en locale + # on regarde dans celle-ci + ldap_host = "ldap://127.0.0.1/" + ldap_socket = "ldapi://%2fvar%2frun%2fslapd%2fldapi/" +elif has("new-db"): + # On regarde dans la base de test + ldap_host = "ldap://%s/" % admipof("newldap") + ldap_socket = ldap_host +else: + # On regarde dans la base principale + ldap_host = "ldap://%s/" % admipof("ldap") + ldap_socket = ldap_host + +# Filtre de droits pour la connexion +if has("users") or has("vert"): + # Sur le serveur des adhérents, on veut que tout + # les adhérents soit reconnus comme utilisateurs locaux + ldap_filter = '' +else: + # Sur les autres serveurs on filtre pour que seuls + # les nounous et les apprentis le soit. + droits = ["|(droits=Nounou)(droits=Apprenti)"] + if has("imprimeurs"): + droits.append("(droits=Imprimeur)") + if has("webmasters"): + droits.append("(droits=WebMaster)") + if has("bureau"): + droits.append("(droits=Bureau)") + ldap_filter = ''.join(droits) diff --git a/etc/python/template/postfix/ldap.py b/etc/python/template/postfix/ldap.py index d220e3d..3c35fa7 100644 --- a/etc/python/template/postfix/ldap.py +++ b/etc/python/template/postfix/ldap.py @@ -6,6 +6,7 @@ # result: le champ a recuperer dans le resultat include("secrets") +include("ldap") keysep = " = " @# Connexion LDAP