166 lines
5.1 KiB
Python
166 lines
5.1 KiB
Python
# -*- mode: python; coding: utf-8 -*-
|
|
|
|
include("ip")
|
|
|
|
header("Serveur LDAP")
|
|
|
|
@#######################################################################
|
|
@# Directives globales:
|
|
@
|
|
@# On permet le binding en version 2 pour login_ldap sur ragnarok
|
|
@allow bind_v2
|
|
@
|
|
@# Définition des schémas et objectClasses
|
|
@include /etc/ldap/schema/core.schema
|
|
@include /etc/ldap/schema/cosine.schema
|
|
@include /etc/ldap/schema/nis.schema
|
|
@include /etc/ldap/schema/inetorgperson.schema
|
|
@include /etc/ldap/schema/amavis.schema
|
|
@include /etc/ldap/schema/dyngroup.schema
|
|
@include /etc/ldap/schema/crans.schema
|
|
@
|
|
@# Emplacement du pidfile
|
|
@pidfile /var/run/slapd/slapd.pid
|
|
@
|
|
@# Arguments passés au serveur
|
|
@argsfile /var/run/slapd/slapd.args
|
|
@
|
|
@# Niveau de journalisation
|
|
@loglevel 0
|
|
@
|
|
@# Stockage des modules
|
|
@modulepath /usr/lib/ldap
|
|
@moduleload back_bdb
|
|
@moduleload dynlist
|
|
if has("db-main"):
|
|
@moduleload syncprov
|
|
@
|
|
@# Limitation du nombre de réponses
|
|
@sizelimit 1000000000
|
|
@
|
|
@# Méthode pour crypter les mots de passe
|
|
@password-hash {SSHA}
|
|
@
|
|
|
|
@#######################################################################
|
|
@# Directives de configuration pour le backend bdb
|
|
@backend bdb
|
|
@
|
|
@#######################################################################
|
|
@# Configuration de la base de données principale
|
|
@database bdb
|
|
@
|
|
@# Base de recherche principale
|
|
@suffix "dc=crans,dc=org"
|
|
@
|
|
@# Répertoire de stockage de la base de données
|
|
@directory "/var/lib/ldap"
|
|
@
|
|
@# Pour générer dynamiquement les membres des groupes posix
|
|
@overlay dynlist
|
|
@dynlist-attrset groupeCrans memberURL memberUid:uid
|
|
@
|
|
@# Options d'indexation pour la base de données
|
|
@index entryUUID,entryCSN eq
|
|
@index objectClass,memberUid,uid,uidNumber eq
|
|
@index cn,sn eq,approx,sub
|
|
@index mailAlias,mail,canonicalAlias eq
|
|
@index macAddress eq
|
|
@index nom,host,hostAlias eq,approx,sub
|
|
@index chbre eq,subinitial
|
|
@index paiement,droits eq
|
|
@
|
|
@# Sauvegarde des timestamps de modifications des objets
|
|
@lastmod on
|
|
@
|
|
|
|
if has("db-main"):
|
|
@# Overlay pour la synchronisation par syncprov
|
|
@overlay syncprov
|
|
@syncprov-checkpoint 100 10
|
|
@syncprov-sessionlog 100
|
|
|
|
else:
|
|
include("secrets")
|
|
rid = admip()
|
|
# L'identifiant du réplica est choisi comme étant la dernière partie de l'adresse ip
|
|
rid = rid[rid.rfind(".")+1:]
|
|
@# Réplication de la base
|
|
@# LDAP a besoin de la déclaration du rootdn
|
|
@rootdn "cn=admin,dc=crans,dc=org"
|
|
@
|
|
@# SyncRepl
|
|
print "syncrepl rid=%s" % rid
|
|
@ provider=ldap://vert.adm.crans.org
|
|
@ searchbase="dc=crans,dc=org"
|
|
@ type=refreshAndPersist
|
|
print ' binddn="%s"' % secrets.ldap_replica_auth_dn
|
|
@ bindmethod=simple
|
|
print ' credentials=%s' % secrets.ldap_replica_password
|
|
@ retry="30 20 300 3"
|
|
@
|
|
@# Redirection des requêtes en écriture, ...
|
|
@updateref ldap://vert.adm.crans.org
|
|
|
|
@
|
|
@# L'attribut userPassword doit pouvoir être écrit uniquement par
|
|
@# soi-même, l'admin, les replicas. Dovecot peut le lire, et on peut
|
|
@# s'authentifier avec anonymement
|
|
@
|
|
@access to attrs=userPassword
|
|
|
|
if not has("db-replicat-test"):
|
|
@ by dn.regex="cn=admin,dc=crans,dc=org" write
|
|
|
|
@ by dn.regex="cn=replica,dc=crans,dc=org" write
|
|
@ by dn.regex="cn=dovecot,dc=crans,dc=org" read
|
|
@ by anonymous auth
|
|
@ by self write
|
|
@ by * none
|
|
@
|
|
@# Permettre l'accès à la base pour des trucs comme
|
|
@# "supportedSASLMechanisms", pour éviter des problèmes
|
|
@# possibles si les méthodes SASL ne sont pas connues.
|
|
@access to dn.base="" by * read
|
|
@
|
|
@# Pour postfix
|
|
@access to dn.regex="^(a|c)id=[0-9]+,ou=data,dc=crans,dc=org$$"
|
|
@ attrs=mailAlias,canonicalAlias,uid,mail,entry,objectClass,contourneGreylist,rewriteMailHeaders
|
|
@ by dn.regex="cn=postfix,dc=crans,dc=org" read
|
|
@ by * break
|
|
@
|
|
@# Pour intranet
|
|
@access to dn.regex="^(a|c)id=[0-9]+,ou=data,dc=crans,dc=org$$"
|
|
@ attrs=uid,entry,objectClass
|
|
@ by dn.regex="cn=intranet,dc=crans,dc=org" read
|
|
@ by * break
|
|
@
|
|
@# Pour dovecot
|
|
@access to dn.regex="^(a|c)id=[0-9]+,ou=data,dc=crans,dc=org$$"
|
|
@ attrs=uid,homeDirectory,uidNumber,gidNumber,userPassword,objectClass,entry
|
|
@ by dn.regex="cn=dovecot,dc=crans,dc=org" read
|
|
@ by * break
|
|
@
|
|
@# Informations accessibles à tous
|
|
@access to dn.regex="^(a|c)id=[0-9]+,ou=data,dc=crans,dc=org$$"
|
|
@ attrs=uid,homeDirectory,uidNumber,gidNumber,gecos,objectClass,entry
|
|
@ by anonymous read
|
|
@ by * break
|
|
@
|
|
@access to dn="ou=data,dc=crans,dc=org"
|
|
@ by anonymous search
|
|
@ by * break
|
|
@
|
|
@access to dn.subtree="ou=Group,dc=crans,dc=org"
|
|
@ by anonymous read
|
|
@ by * break
|
|
@
|
|
@# L'admin et la réplication peut tout lire
|
|
@# can read everything.
|
|
@access to *
|
|
@ by dn.regex="cn=admin,dc=crans,dc=org" write
|
|
@ by dn.regex="cn=replica,dc=crans,dc=org" write
|
|
@ by sockname.regex="ldapi" read
|
|
@ by dn.regex="cn=readonly,dc=crans,dc=org" read
|
|
@ by self read
|
|
@ by * none
|