1
|
|
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])
|