Mauvais filtre

This commit is contained in:
2025-08-18 11:30:59 +02:00
parent eeccc1317f
commit 65717509ac

View File

@ -1,8 +1,15 @@
diff --git usr/bin/importation_scribe usr/bin/importation_scribe diff --git usr/lib/python3/dist-packages/bin/importation_scribe usr/lib/python3/dist-packages/bin/importation_scribe
index 0db4982..bb6ff94 100755 index 0db4982..77a89aa 100755
--- usr/bin/importation_scribe --- usr/lib/python3/dist-packages/bin/importation_scribe
+++ usr/bin/importation_scribe +++ usr/lib/python3/dist-packages/bin/importation_scribe
@@ -49,7 +49,7 @@ from os.path import isfile, dirname @@ -42,21 +42,21 @@ choix de la source de données et imports
- personnels administratifs
- comptes invités
"""
import sys
from os import environ, getcwd, chdir
from os.path import isfile, dirname
from pyeole.process import system_out, system_code from pyeole.process import system_out, system_code
from scribe.storage import init_store from scribe.storage import init_store
from scribe.eoleldap import Ldap from scribe.eoleldap import Ldap
@ -11,17 +18,35 @@ index 0db4982..bb6ff94 100755
from scribe.eoletools import nscd_start, nscd_stop from scribe.eoletools import nscd_start, nscd_stop
from scribe.parsing import sconet, aaf, be1d, scribecsv2 from scribe.parsing import sconet, aaf, be1d, scribecsv2
from scribe.importation import preferences, writer, config from scribe.importation import preferences, writer, config
@@ -465,6 +465,9 @@ class Console: from scribe.importation import log
#______________________________________________________________________________
# utilitaires de manipulation de la console
class OutOfRange(Exception):
""" Exception OutOfRange """
@@ -458,33 +458,41 @@ class Console:
"""
log.add_lock()
log.debuglog("Arrêt de LSC...", title=True)
nscd_stop()
connexion = Ldap()
connexion.connect()
if SUPPORT_ETAB:
prefs = preferences.get_enseignants_prefs() prefs = preferences.get_enseignants_prefs()
etab = prefs.get_default('etab') etab = prefs.get_default('etab')
etab_prefix = prefs.get_default('etab_prefix') etab_prefix = prefs.get_default('etab_prefix')
+ branche_etab = BRANCHE_ETAB % {'etab': etab} + branche_etab = BRANCHE_ETAB % {'etab': etab}
+ purge_option = 'keep' + purge_option = 'keep'
+ old_logins = connexion._search(PROF_FILTER, 'uid', suffix=branche_etab) + old_logins = connexion._search('(&{})'.format(PROF_FILTER), 'uid', suffix=branche_etab)
else: else:
etab = None etab = None
etab_prefix = '' etab_prefix = ''
@@ -476,8 +479,13 @@ class Console: if self.import_type != 'maj':
writer.purge_equipes(connexion=connexion, etab=etab)
writer.verify_classe(store=self.store, connexion=connexion,
etab_prefix=etab_prefix)
writer.write_matiere(store=self.store, connexion=connexion,
etab=etab, etab_prefix=etab_prefix) etab=etab, etab_prefix=etab_prefix)
writer.verify_option(store=self.store, connexion=connexion, writer.verify_option(store=self.store, connexion=connexion,
etab_prefix=etab_prefix) etab_prefix=etab_prefix)
@ -36,11 +61,25 @@ index 0db4982..bb6ff94 100755
if self.data_type in ['sconet', 'aaf']: if self.data_type in ['sconet', 'aaf']:
writer.write_service(store=self.store, connexion=connexion, writer.write_service(store=self.store, connexion=connexion,
etab=etab, etab_prefix=etab_prefix) etab=etab, etab_prefix=etab_prefix)
writer.write_administratif(store=self.store, connexion=connexion,
etab=etab)
writer.write_samba(connexion)
connexion.close()
log.debuglog("Démarrage de LSC...", title=True)
nscd_start()
log.del_lock()
diff --git usr/lib/python3/dist-packages/scribe/importation/writer.py usr/lib/python3/dist-packages/scribe/importation/writer.py diff --git usr/lib/python3/dist-packages/scribe/importation/writer.py usr/lib/python3/dist-packages/scribe/importation/writer.py
index 34ce0fb..40865d5 100644 index 34ce0fb..40865d5 100644
--- usr/lib/python3/dist-packages/scribe/importation/writer.py --- usr/lib/python3/dist-packages/scribe/importation/writer.py
+++ usr/lib/python3/dist-packages/scribe/importation/writer.py +++ usr/lib/python3/dist-packages/scribe/importation/writer.py
@@ -841,9 +841,6 @@ def _maj_enseignant(enseignant, user, login, etab, administratif=False): @@ -834,23 +834,20 @@ def _maj_enseignant(enseignant, user, login, etab, administratif=False):
enseignant : store.Enseignant()
user : eoleuser.Enseignant()
login : uid de l'utilisateur dans ldap
administratif : personnel administratif avec un compte enseignant
"""
log.log.debug("maj de %s" % login)
classe = []
groups = [] groups = []
# attention : des administratifs peuvent avoir un compte enseignant # attention : des administratifs peuvent avoir un compte enseignant
if isinstance(enseignant, Enseignant): if isinstance(enseignant, Enseignant):
@ -50,7 +89,21 @@ index 34ce0fb..40865d5 100644
for joint in enseignant.get_classes(): for joint in enseignant.get_classes():
groups.append('profs-%s' % str(joint.classe.nom)) groups.append('profs-%s' % str(joint.classe.nom))
if joint.profprincipal: if joint.profprincipal:
@@ -881,6 +878,7 @@ def write_enseignant(store, connexion, etab=None, current_ead_user=config.DEFAUL classe.append(str(joint.classe.nom))
for matiere in enseignant.get_matieres():
groups.append(str(matiere.nom))
for option in enseignant.get_groupes():
groups.append('profs-%s' % str(option.nom))
disciplines = eval(enseignant.disciplines)
else:
@@ -874,64 +871,70 @@ def _maj_enseignant(enseignant, user, login, etab, administratif=False):
else:
info = "%s;%s;%s;%s" % (str(enseignant.nom), str(enseignant.prenom),
login, ATTRIB)
log.write_info(info, config.ENS_INFO)
def write_enseignant(store, connexion, etab=None, current_ead_user=config.DEFAULT_USER):
"""
insertion des enseignants insertion des enseignants
""" """
num = 0 num = 0
@ -58,7 +111,19 @@ index 34ce0fb..40865d5 100644
log.infolog("Intégration des enseignants...", title=True) log.infolog("Intégration des enseignants...", title=True)
log.write_header(config.ENS_HEADER, config.ENS_INFO) log.write_header(config.ENS_HEADER, config.ENS_INFO)
user = LdapEnseignant() user = LdapEnseignant()
@@ -900,10 +898,10 @@ def write_enseignant(store, connexion, etab=None, current_ead_user=config.DEFAUL user.ldap_admin = connexion
prefs = preferences.get_enseignants_prefs()
quota = prefs.get_default('quota')
if FORCED_PASSWORD_MODIFICATION_ALLOWED:
change_pwd = prefs.get_default('change_pwd') == 'oui'
else:
change_pwd = False
new_passwords = []
for enseignant in store.query(Enseignant):
if enseignant.force_login:
# login forcé
if user._is_enseignant(str(enseignant.force_login)):
login = str(enseignant.force_login)
else: else:
login = '' login = ''
else: else:
@ -71,7 +136,12 @@ index 34ce0fb..40865d5 100644
else: else:
# nouvel enseignant # nouvel enseignant
if str(enseignant.nom) == '' or str(enseignant.prenom) == '': if str(enseignant.nom) == '' or str(enseignant.prenom) == '':
@@ -916,6 +914,7 @@ def write_enseignant(store, connexion, etab=None, current_ead_user=config.DEFAUL log.infolog("Enseignant n°%s invalide" % str(enseignant.int_id))
continue
try:
login = _new_enseignant(enseignant, user, prefs, etab=etab, new_passwords=new_passwords)
except BadLogin as message:
log.infolog(str(message))
continue continue
# enregistrement du login attribué # enregistrement du login attribué
enseignant.login = str(login) enseignant.login = str(login)
@ -79,7 +149,7 @@ index 34ce0fb..40865d5 100644
num += 1 num += 1
if num % config.DEBUG_NUM == 0: if num % config.DEBUG_NUM == 0:
log.debuglog("%d enseignants traités..." % num) log.debuglog("%d enseignants traités..." % num)
@@ -923,8 +922,12 @@ def write_enseignant(store, connexion, etab=None, current_ead_user=config.DEFAUL if EOLE_AD:
_sync_passwords(user, new_passwords, change_pwd=change_pwd) _sync_passwords(user, new_passwords, change_pwd=change_pwd)
_create_dirs(user, quota, new_passwords) _create_dirs(user, quota, new_passwords)
log.infolog("TOTAL : %d enseignants" % num) log.infolog("TOTAL : %d enseignants" % num)
@ -92,7 +162,21 @@ index 34ce0fb..40865d5 100644
# -------------------- administratifs -------------------- # # -------------------- administratifs -------------------- #
@@ -1027,7 +1030,7 @@ def write_administratif(store, connexion, etab=None, current_ead_user=config.DEF
def _new_administratif(administratif, user, prefs, etab=None, new_passwords=[]):
"""
traitement d'un nouvel administratif (création)
administratif : store.Administratif()
user : eoleuser.Administratif()
"""
@@ -1020,21 +1023,21 @@ def write_administratif(store, connexion, etab=None, current_ead_user=config.DEF
if user._is_administratif(str(administratif.force_login)):
login = str(administratif.force_login)
else:
login = ''
else:
login = _administratif_exists(administratif, user)
if login != '':
# personnel existe # personnel existe
_maj_administratif(administratif, user, login) _maj_administratif(administratif, user, login)
else: else:
@ -101,11 +185,25 @@ index 34ce0fb..40865d5 100644
if login != '': if login != '':
# le personnel a été crée comme un professeur... # le personnel a été crée comme un professeur...
log.infolog("(%s a un compte enseignant)" % login) log.infolog("(%s a un compte enseignant)" % login)
ldap_ens = LdapEnseignant()
ldap_ens.ldap_admin = connexion
_maj_enseignant(administratif, ldap_ens, login, etab, administratif=True)
else:
# nouveau personnel
if str(administratif.nom) == '' or str(administratif.prenom) == '':
log.infolog("Administratif n°%s invalide" % str(administratif.int_id))
diff --git usr/lib/python3/dist-packages/scribe/linker.py usr/lib/python3/dist-packages/scribe/linker.py diff --git usr/lib/python3/dist-packages/scribe/linker.py usr/lib/python3/dist-packages/scribe/linker.py
index 4cc6082..94099e9 100644 index 4cc6082..94099e9 100644
--- usr/lib/python3/dist-packages/scribe/linker.py --- usr/lib/python3/dist-packages/scribe/linker.py
+++ usr/lib/python3/dist-packages/scribe/linker.py +++ usr/lib/python3/dist-packages/scribe/linker.py
@@ -10,7 +10,7 @@ @@ -3,21 +3,21 @@
# Eole NG - 2009
# Copyright Pole de Competence Eole (Ministere Education - Academie Dijon)
# Licence CeCill cf /root/LicenceEole.txt
# eole@ac-dijon.fr
###########################################################################
"""
recherche les liens entre les utilisateurs importes
et l'annuaire ldap et l'annuaire ldap
""" """
from scribe.ldapconf import ELEVE_FILTER, PROF_FILTER, ADMINISTRATIF_FILTER, \ from scribe.ldapconf import ELEVE_FILTER, PROF_FILTER, ADMINISTRATIF_FILTER, \
@ -114,7 +212,21 @@ index 4cc6082..94099e9 100644
from scribe.eoletools import deformate_date, strip_adresse from scribe.eoletools import deformate_date, strip_adresse
from scribe.eoleldap import Ldap from scribe.eoleldap import Ldap
@@ -103,7 +103,7 @@ def _responsable_exists(responsable, user): def _eleve_exists(eleve, user):
"""
recherche si un élève existe déjà dans l'annuaire
eleve : storage.Eleve()
user : eoleuser.Eleve()
"""
filtres = []
@@ -96,21 +96,21 @@ def _responsable_exists(responsable, user):
if responsable.mail and res.get('mailPerso', [''])[0] == str(responsable.mail):
# mail + nom + prenom (#6061) mais mail + nom => mauvaise idée (#4191)
return res['uid'][0]
if responsable.adresse.adresse and \
strip_adresse(res.get('ENTPersonAdresse', [''])[0]) == \
strip_adresse(str(responsable.adresse.adresse)):
# adresse + nom + prenom (#6934)
return res['uid'][0] return res['uid'][0]
return '' return ''
@ -123,7 +235,21 @@ index 4cc6082..94099e9 100644
""" """
recherche si un enseignant existe déjà dans l'annuaire recherche si un enseignant existe déjà dans l'annuaire
enseignant : storage.Enseignant() enseignant : storage.Enseignant()
@@ -133,8 +133,12 @@ def _enseignant_exists(enseignant, user): user : eoleuser.Enseignant()
"""
filtres = []
if enseignant.date and enseignant.date != '01/01/0001':
date = deformate_date(str(enseignant.date))
if enseignant.int_id:
# date + id interne
@@ -126,22 +126,26 @@ def _enseignant_exists(enseignant, user):
# mail (federation) + nom
filtres.append("(&%s(FederationKey=%s)(sn=%s))" % (PROF_FILTER,
str(enseignant.mail), str(enseignant.nom) ))
if enseignant.int_id:
# nom + id interne
filtres.append("(&%s(sn=%s)(intid=%s))" % (PROF_FILTER,
str(enseignant.nom), str(enseignant.int_id) ))
# beurk (homonymes) -> à améliorer # beurk (homonymes) -> à améliorer
#filtres.append("(&%s(cn=%s %s)(objectClass=enseignant))" % (USER_FILTER, #filtres.append("(&%s(cn=%s %s)(objectClass=enseignant))" % (USER_FILTER,
# str(enseignant.prenom), str(enseignant.nom))) # str(enseignant.prenom), str(enseignant.nom)))
@ -137,3 +263,10 @@ index 4cc6082..94099e9 100644
if res != {}: if res != {}:
return res['uid'][0] return res['uid'][0]
return '' return ''
def _administratif_exists(administratif, user):
"""
recherche si un administratif existe déjà dans l'annuaire
administratif : storage.Administratif()
user : eoleuser.Administratif()
"""