diff --git a/Python/etc/apt/sources.list/gen.py b/Python/etc/apt/sources.list/gen.py
new file mode 100644
index 0000000..2509053
--- /dev/null
+++ b/Python/etc/apt/sources.list/gen.py
@@ -0,0 +1,24 @@
+# -*- mode: python; coding: utf-8 -*-
+
+include("mode/space")
+header()
+
+if has("debian-mirror"):
+ mirror = "file:/mirror/"
+else:
+ mirror = "ftp:/mirror.adm.crans.org/"
+
+def source(args):
+ %deb mirror + args
+ %deb-src mirror + args
+
+source("debian etch main contrib")
+source("debian-volatile etch/volatile main contrib")
+source("debian-security etch/updates main")
+
+if has("test"):
+ @# Mplayer...
+ source("debian-multimedia etch main")
+
+@# Paquet construit a la main
+source("custom ./")
diff --git a/Python/etc/postfix/ldap-aliases.cf/gen.py b/Python/etc/postfix/ldap-aliases.cf/gen.py
new file mode 100644
index 0000000..a29cef7
--- /dev/null
+++ b/Python/etc/postfix/ldap-aliases.cf/gen.py
@@ -0,0 +1,7 @@
+# -*- mode: python; coding: utf-8 -*-
+
+header("Recherche des alias dans la base ldap.")
+
+query="(|(mailAlias=%s)(canonicalAlias=%s))"
+result="uid"
+dump("template/postfix/ldap")
diff --git a/Python/etc/postfix/ldap-aliases.cf/info.xml b/Python/etc/postfix/ldap-aliases.cf/info.xml
new file mode 100644
index 0000000..0c1af3e
--- /dev/null
+++ b/Python/etc/postfix/ldap-aliases.cf/info.xml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/Python/etc/postfix/ldap-canonical.cf/gen.py b/Python/etc/postfix/ldap-canonical.cf/gen.py
new file mode 100644
index 0000000..050840b
--- /dev/null
+++ b/Python/etc/postfix/ldap-canonical.cf/gen.py
@@ -0,0 +1,7 @@
+# -*- mode: python; coding: utf-8 -*-
+
+header()
+
+query="(&(mail=%s)(canonicalAlias=*))"
+result="canonicalAlias"
+dump("template/postfix/ldap")
diff --git a/Python/etc/postfix/ldap-canonical.cf/info.xml b/Python/etc/postfix/ldap-canonical.cf/info.xml
new file mode 100644
index 0000000..0c1af3e
--- /dev/null
+++ b/Python/etc/postfix/ldap-canonical.cf/info.xml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/Python/etc/postfix/ldap-sqlgrey.cf/gen.py b/Python/etc/postfix/ldap-sqlgrey.cf/gen.py
new file mode 100644
index 0000000..536275a
--- /dev/null
+++ b/Python/etc/postfix/ldap-sqlgrey.cf/gen.py
@@ -0,0 +1,7 @@
+# -*- mode: python; coding: utf-8 -*-
+
+header("Test si le greylisting est active pour un certain compte.")
+
+query="(|(uid=%u)(mailAlias=%u)(canonicalAlias=%u))"
+result="contourneGreylist"
+dump("template/postfix/ldap")
diff --git a/Python/etc/postfix/ldap-sqlgrey.cf/info.xml b/Python/etc/postfix/ldap-sqlgrey.cf/info.xml
new file mode 100644
index 0000000..0c1af3e
--- /dev/null
+++ b/Python/etc/postfix/ldap-sqlgrey.cf/info.xml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/Python/etc/postfix/transport/gen.py b/Python/etc/postfix/transport/gen.py
new file mode 100644
index 0000000..dafc5f4
--- /dev/null
+++ b/Python/etc/postfix/transport/gen.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8; mode: python -*-
+
+header("Transport des mails.")
+
+if has("mailing-list-manager"):
+ @# Les mailing-listes sont delivrees localement
+ @lists.crans.org local
+else:
+ @lists.crans.org smtp:[lists.adm.crans.org]
+
+if has("news-server"):
+ @# Le corbeau, c'est ici
+ @corbeau@crans.org local
+
+if not has("users"):
+ @# C'est le serveur des adherents qui fait les livraisons des
+ @# adresses clubs et adherents
+ @crans.org smtp:[users.adm.crans.org]
+ @crans.ens-cachan.fr smtp:[users.adm.crans.org]
+ @install-party.ens-cachan.fr smtp:[users.adm.crans.org]
+ @clubs.ens-cachan.fr smtp:[users.adm.crans.org]
diff --git a/etc/python/common.py b/etc/python/common.py
index 1eb271e..2ee80f5 100644
--- a/etc/python/common.py
+++ b/etc/python/common.py
@@ -28,17 +28,20 @@ def comment(line):
'''Écrit un commentaire'''
out("# " + line + "\n")
-def header(desc, mode="conf-unix"):
+emacs_mode = "conf-unix"
+
+def header(desc=None, mode=None):
'''Écrit une en-tête de fichier avec un commentaire'''
- comment("-*- mode: %s; coding: utf-8 -*-" % mode)
+ comment("-*- mode: %s; coding: utf-8 -*-" % (mode or emacs_mode))
@#
@# Fichier gere par BCfg2
@#
- lines = desc.split('\n')
- if lines[-1] == "":
- lines.pop()
- for line in lines:
- comment(line)
+ if desc:
+ lines = desc.split('\n')
+ if lines[-1] == "":
+ lines.pop()
+ for line in lines:
+ comment(line)
out("\n")
def var(name, value, doc=None):
@@ -69,3 +72,16 @@ def onoff(b):
return "on"
else:
return "off"
+
+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/mode/space.py b/etc/python/mode/space.py
new file mode 100644
index 0000000..5504498
--- /dev/null
+++ b/etc/python/mode/space.py
@@ -0,0 +1,7 @@
+# -*- coding: utf-8; mode: python -*-
+#
+# Pour les fichiers de configurations du type conf-space comme définit
+# dans emacs
+
+keysep = " "
+emacs_mode = "conf-space"
diff --git a/etc/python/secrets.py b/etc/python/secrets.py
new file mode 100644
index 0000000..996e73e
--- /dev/null
+++ b/etc/python/secrets.py
@@ -0,0 +1,7 @@
+# -*- mode: python; coding: utf-8 -*-
+#
+# Recuperation des mots de passe
+
+import sys
+sys.path.append("/etc/crans/secrets")
+import secrets
diff --git a/etc/python/template/postfix/ldap.py b/etc/python/template/postfix/ldap.py
new file mode 100644
index 0000000..2c7a81e
--- /dev/null
+++ b/etc/python/template/postfix/ldap.py
@@ -0,0 +1,23 @@
+# -*- mode: python; coding: utf-8 -*-
+
+# Ce fichier sert de template pour les fichiers /etc/postfix/ldap-*.cf
+# Pour l'utuliser, il faut l'inclure en instanciant les variables:
+# query: requete faite a la base
+# result: le champ a recuperer dans le resultat
+
+include("secrets")
+
+@# Connexion LDAP
+%server_host = ldap_host
+%search_base = "ou=data,dc=crans,dc=org"
+%version = 3
+%bind = True
+%bind_dn = secrets.ldap_postfix_auth_dn
+%bind_pw = secrets.ldap_postfix_password
+
+@# Requete faite a la base, %s est remplace
+@# par l'alias recherche
+%query_filter = query
+
+@# Le champ qui nous interresse en particulier
+%result_attribute = result