From 1f30038ba9d1ee8f809905b57d580a98e389e884 Mon Sep 17 00:00:00 2001 From: pauget Date: Tue, 7 Sep 2004 12:16:53 +0200 Subject: [PATCH] Synchro des ML avec les droits. darcs-hash:20040907101653-41617-f85bada9023467dccb92930336376ef3cd255eff.gz --- gestion/gen_confs/droits.py | 82 +++++++++++++++++++++++++++++++++++-- 1 file changed, 79 insertions(+), 3 deletions(-) diff --git a/gestion/gen_confs/droits.py b/gestion/gen_confs/droits.py index bcb82a20..ca584952 100755 --- a/gestion/gen_confs/droits.py +++ b/gestion/gen_confs/droits.py @@ -4,9 +4,16 @@ import sys, signal from gen_confs import gen_config, anim, cprint, OK, ERREUR +# Imports pour LDAP sys.path.append('/usr/scripts/gestion') from ldap_crans import crans_ldap, crans, ann_scol, preattr, ldap +# Imports pour mailman +sys.path.append('/usr/lib/mailman') +from Mailman import MailList +from Mailman import Utils +from Mailman.UserDesc import UserDesc + class droits(crans_ldap,gen_config) : ####### Les groupes base_group_dn = 'ou=Group,dc=crans,dc=org' @@ -25,8 +32,8 @@ class droits(crans_ldap,gen_config) : mailing_listes = { 'roots' : [ u'Nounou', u'Apprenti' ], '+nounou' : [ u'Nounou', u'Apprenti' ], 'respbats' : [ u'Câbleur', u'Nounou' ], - 'moderateurs' : [ u'Modérateur' ], - 'disconnect' : [ u'Déconnecteur' ] } + '+moderateurs' : [ u'Modérateur' ], + '+disconnect' : [ u'Déconnecteur' ] } def restart(s) : # Rien à faire @@ -63,6 +70,60 @@ class droits(crans_ldap,gen_config) : modlist = ldap.modlist.modifyModlist(init_data,data) self.conn.modify_s(dn,modlist) + + def sync_ML(self) : + self.anim.iter = len( self.mailing_listes.keys() ) + for ML, fonctions in self.mailing_listes.items() : + self.anim.cycle() + if ML[0] == '+' : + ML = ML[1:] + only_add = 1 + else : + only_add = 0 + + # Instance correspondant à la ML + mlist = MailList.MailList(ML) + self.mlist_to_unlock = mlist + + # Qui doit être dans cette ML ? + res = [] + for f in fonctions : + res += self.search('droits=%s' % f)['adherent'] + + # Liste des personnes déja inscrites + deja_inscrits = {} # { email en miniscules : email avec case n'importe comment } + for addr in mlist.getMemberCPAddresses(mlist.getMembers()): + deja_inscrits[addr.lower()] = addr + + # Mails à ajouter + to_add = [] + mail_traite = [] + for adher in res : + mail = adher.mail().lower() + if mail in mail_traite : continue + mail_traite.append(mail) + if mail.find('@') == -1 : mail += '@crans.org' + if mail not in deja_inscrits.keys() : + # Visiblement pas inscrit + to_add.append([ mail, adher.Nom() ]) + else : + # L'adhérent est déja inscrit + deja_inscrits.pop(mail) + + # Ajout + for mail, nom in to_add : + pw = Utils.MakeRandomPassword() + userdesc = UserDesc( mail, nom, pw) + mlist.ApprovedAddMember(userdesc) + if not only_add : + # Supression des personnes inscritees en trop + for mail in deja_inscrits.values() : + mlist.ApprovedDeleteMember(mail) + + mlist.Save() + mlist.Unlock() + self.mlist_to_unlock = None + def gen_conf(self) : self.anim = anim('\tconfiguration groupes') try : @@ -77,4 +138,19 @@ class droits(crans_ldap,gen_config) : traceback.print_exc() self.anim = anim('\tconfiguration ML Crans') - print 'TODO' + try : + self.sync_ML() + self.anim.reinit() + print OK + except : + self.anim.reinit() + try : + # Au cas où... + self.mlist_to_unlock.Unlock() + except : + pass + print ERREUR + if self.debug : + import traceback + traceback.print_exc() +