80 lines
2.3 KiB
Python
Executable file
80 lines
2.3 KiB
Python
Executable file
#! /usr/bin/env python
|
|
# -*- coding: iso-8859-15 -*-
|
|
|
|
import sys, signal
|
|
from gen_confs import gen_config, anim, cprint, OK, ERREUR
|
|
|
|
sys.path.append('/usr/scripts/gestion')
|
|
from ldap_crans import crans_ldap, crans, ann_scol, preattr, ldap
|
|
|
|
class droits(crans_ldap,gen_config) :
|
|
####### Les groupes
|
|
base_group_dn = 'ou=Group,dc=crans,dc=org'
|
|
|
|
# Quels droits donnent l'appartenacne à quel groupe ?
|
|
groupes = { 'adm' : [ u'Nounou' ] ,
|
|
'respbats' : [ u'Câbleur' , u'Déconnecteur', u'Nounou' ] ,
|
|
'moderateurs' : [ u'Modérateur' ] ,
|
|
'disconnect' : [ u'Déconnecteur' ] ,
|
|
'webcvs' : [ u'CVSWeb'] }
|
|
|
|
####### Les ML
|
|
# Le + devant un nom de ML indique une synchronisqtion
|
|
# ML <-> fonction partielle : il n'y a pas d'effacement
|
|
# des abonnés si le droit est retiré
|
|
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' ] }
|
|
|
|
def restart(s) :
|
|
# Rien à faire
|
|
pass
|
|
|
|
def __str__(self):
|
|
return "droits"
|
|
|
|
def build_group(self) :
|
|
""" Reconstruit les groupes dans la base LDAP """
|
|
self.anim.iter = len( self.groupes.keys() )
|
|
for group, fonctions in self.groupes.items() :
|
|
self.anim.cycle()
|
|
# Qui doit être dans ce groupe ?
|
|
res = []
|
|
for f in fonctions :
|
|
res += self.search('droits=%s' % f)['adherent']
|
|
|
|
# Récupération de la constitution du groupe actuel
|
|
dn = 'cn=%s,%s' % (group, self.base_group_dn)
|
|
data = self.conn.search_s(dn ,0,'objectClass=posixGroup')[0][1]
|
|
init_data = data.copy()
|
|
|
|
# Supression de tout les membres
|
|
data['memberUid'] = []
|
|
|
|
# Ajout des bonnes personnes
|
|
for adher in res :
|
|
uid = preattr(adher.compte())[1]
|
|
if uid and uid not in data['memberUid'] :
|
|
data['memberUid'].append(uid)
|
|
|
|
# Sauvegarde
|
|
modlist = ldap.modlist.modifyModlist(init_data,data)
|
|
self.conn.modify_s(dn,modlist)
|
|
|
|
def gen_conf(self) :
|
|
self.anim = anim('\tconfiguration groupes')
|
|
try :
|
|
self.build_group()
|
|
self.anim.reinit()
|
|
print OK
|
|
except :
|
|
self.anim.reinit()
|
|
print ERREUR
|
|
if self.debug :
|
|
import traceback
|
|
traceback.print_exc()
|
|
|
|
self.anim = anim('\tconfiguration ML Crans')
|
|
print 'TODO'
|