Projet

Général

Profil

checkmultietab.py

Script de mise à jour des "members" - Joël Cuissinat, 05/04/2022 15:24

Télécharger (1,78 ko)

 
1
#-*-coding:utf-8-*-
2
import sys
3
import ldap
4
from scribe.ldapconf import AD_ADDRESS, AD_USER, AD_BASE, AD_PWDFILE
5
sys.path.append('/usr/share')
6
from ead2.backend.actions.scribe.tool.etablissements import get_etabs
7

    
8
def get_group(conn, group):
9
    """
10
    renvoie le DN d'un groupe
11
    """
12
    ldb_filter = '(&(objectclass=group)(cn={}))'
13
    res = conn.search(AD_BASE, ldap.SCOPE_SUBTREE,
14
                      ldb_filter.format(group), ['cn'])
15
    return conn.result(res)[1][0][0]
16

    
17

    
18

    
19
AD_USERDN = "CN={0},CN=Users,{1}".format(AD_USER, AD_BASE)
20
AD_PWD = open(AD_PWDFILE).read().strip()
21
ldap.set_option(ldap.OPT_REFERRALS, 0)
22
ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
23
connexion = ldap.initialize('ldaps://{}'.format(AD_ADDRESS))
24
connexion.simple_bind_s(AD_USERDN, AD_PWD)
25

    
26
eleves = get_group(connexion, 'eleves')
27
if eleves is None:
28
    print("Erreur : groupe eleves non trouvé dans AD")
29
professeurs = get_group(connexion, 'professeurs')
30
if professeurs is None:
31
    print("Erreur : groupe professeurs non trouvé dans AD")
32

    
33
eleves_members = []
34
professeurs_members = ['CN=admin,CN=Users,{}'.format(AD_BASE),]
35

    
36
root, etabs = get_etabs()
37
for etab in etabs:
38
    ele = get_group(connexion, 'eleves-{}'.format(etab))
39
    if ele is None:
40
        print("Erreur : groupe eleves-{} non trouvé dans AD")
41
    else:
42
        eleves_members.append(ele)
43
    ens = get_group(connexion, 'profs-{}'.format(etab))
44
    if ens is None:
45
        print("Erreur : groupe profs-{} non trouvé dans AD")
46
    else:
47
        professeurs_members.append(ens)
48

    
49
print('Mise à jour du groupe eleves')
50
datas = (ldap.MOD_REPLACE, 'member', eleves_members)
51
connexion.modify_s(eleves, [datas])
52

    
53
print('Mise à jour du groupe professeurs')
54
datas = (ldap.MOD_REPLACE, 'member', professeurs_members)
55
connexion.modify_s(professeurs, [datas])