[*] Factorisation de la configuration LDAP

Ignore-this: a03d38134f839406206dc21026694d4d

darcs-hash:20090414022624-ffbb2-6a5db51778c1494d92f9640b9711ee9e8700cd4d.gz
This commit is contained in:
Nicolas Dandrimont 2009-04-14 04:26:24 +02:00
parent 4b58822507
commit 0fea65cd45
7 changed files with 66 additions and 94 deletions

View file

@ -1,7 +1,7 @@
# -*- mode: python; coding: utf-8 -*- # -*- mode: python; coding: utf-8 -*-
include("mode/space") include("mode/space")
include("ip") include("ldap")
header("Acces a la base 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. @# This file should be world readable but not world writable.
@BASE dc=crans, dc=org @BASE dc=crans, dc=org
if has("db-server"): %URI "%s" % ldap_socket
%URI "ldapi://%2fvar%2frun%2fslapd%2fldapi/" @#TLS_CACERT /etc/ssl/certs/CAcrans.pem
%TLS_CACERT "/etc/ssl/certs/CAcrans.pem"
else:
%URI "ldap://%s/" % admipof("ldap")

View file

@ -17,12 +17,8 @@ info["perms"] = 0644
@# | Configuration de la communication avec le serveur | @# | Configuration de la communication avec le serveur |
@# +---------------------------------------------------+ @# +---------------------------------------------------+
if has("db-server"): @# Base LDAP
@# Socket unix du serveur %uri "%s" % ldap_socket
%uri "ldapi://%2fvar%2frun%2fslapd%2fldapi/"
else:
@# Addresse du serveur
%uri "ldap://%s/" % admipof("ldap")
@# The distinguished name of the search base. @# The distinguished name of the search base.
%base "dc=crans,dc=org" %base "dc=crans,dc=org"
@ -60,27 +56,12 @@ else:
# On n'utilise ldap pour résoudre les bases de données # On n'utilise ldap pour résoudre les bases de données
# passwd, group et shadow # 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_shadow "ou=data,dc=crans,dc=org?one"
%nss_base_group "ou=Group,dc=crans,dc=org?one" %nss_base_group "ou=Group,dc=crans,dc=org?one"

View file

@ -2,7 +2,7 @@
include("mode/space") include("mode/space")
include("secrets") include("secrets")
include("ip") include("ldap")
header(""" header("""
Fichier de configuration pour libnss-ldapd. Fichier de configuration pour libnss-ldapd.
@ -25,12 +25,7 @@ info["perms"] = 0600
@# | Configuration de la communication avec le serveur | @# | Configuration de la communication avec le serveur |
@# +---------------------------------------------------+ @# +---------------------------------------------------+
@ @
if has("db-server"): %uri "%s" % ldap_socket
@# Socket unix du serveur
%uri "ldapi://%2fvar%2frun%2fslapd%2fldapi/"
else:
@# Addresse du serveur
%uri "ldap://%s/" % admipof("ldap")
@ @
@# Le distinguished name de la base de recherche @# Le distinguished name de la base de recherche
%base "dc=crans,dc=org" %base "dc=crans,dc=org"
@ -61,22 +56,7 @@ else:
@base shadow ou=data,dc=crans,dc=org @base shadow ou=data,dc=crans,dc=org
@base group ou=Group,dc=crans,dc=org @base group ou=Group,dc=crans,dc=org
if not has('users'): if ldap_filter:
# 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(')')
@ @
@# Filtre de recherche @# Filtre de recherche
print "filter passwd", ''.join(droits) print "filter passwd (%s)" % ldap_filter

View file

@ -2,7 +2,7 @@
include("mode/space") include("mode/space")
include("secrets") include("secrets")
include("ip") include("ldap")
header(""" header("""
Fichier de configuration de libpam-ldap. 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. @# The distinguished name of the search base.
%base "dc=crans,dc=org" %base "dc=crans,dc=org"
if has("db-server"): @# Base LDAP
# Le serveur principale ainsi que les réplica se connectent par %uri "%s" % ldap_socket
# socket unix
%uri "ldapi://%2fvar%2frun%2fslapd%2fldapi/"
else:
# Les autres c'est par le réseau
%uri "ldap://%s/" % admipof("ldap")
@# The LDAP version to use (defaults to 3 @# The LDAP version to use (defaults to 3
@# if supported by client library) @# 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 # On n'utilise ldap pour résoudre les bases de données
# passwd, group et shadow # 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_shadow "ou=data,dc=crans,dc=org?one"
%nss_base_group "ou=Group,dc=crans,dc=org?one" %nss_base_group "ou=Group,dc=crans,dc=org?one"

View file

@ -76,12 +76,3 @@ def onoff(b):
def outl(line): def outl(line):
out(line) out(line)
out("\n") 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/"

41
etc/python/ldap.py Normal file
View file

@ -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)

View file

@ -6,6 +6,7 @@
# result: le champ a recuperer dans le resultat # result: le champ a recuperer dans le resultat
include("secrets") include("secrets")
include("ldap")
keysep = " = " keysep = " = "
@# Connexion LDAP @# Connexion LDAP