Message Cron Daemon - Problème avec le plugin "LDAP syncing scripts" (local_ldap)

Message Cron Daemon - Problème avec le plugin "LDAP syncing scripts" (local_ldap)

par Philippe VIEN,
Nombre de réponses : 14

Bonjour à tous,

Contexte technique

Demande

Bonjour

Je reçois depuis quelques jours, et ce toutes les 6 minutes, le message suivant :

De : Cron Daemon

PHP Notice:  Undefined index: member;range=0-* in /home/agora.cfaiprovence.com/public_html/local/ldap/locallib.php on line 380

PHP Warning:  count(): Parameter must be an array or an object that implements Countable in /home/agora.cfaiprovence.com/public_html/local/ldap/locallib.php on line 380

 

Sans que je sache si cela est lié, les 1er messages ont démarré après que j’ai supprimer un utilisateur inscrit depuis plus d’un an, qui ne s’était jamais connecté sur la plateforme et qui n’était enrôlé dans aucun espace de cours. Cette suppression faisait suite à un autre message de Cron Daemon (reçut toutes les minutes jusqu’à suppression de l’utlisateur) :

De : Cron Daemon

PHP Notice:  email_to_user: User 3220 (Jean DURAND) email (jean durand@untruc.com) is invalid! Not sending.* line 5977 of /lib/moodlelib.php: call to debugging()

* line 6398 of /lib/moodlelib.php: call to email_to_user()

* line 68 of /lib/classes/task/send_new_user_passwords_task.php: call to setnew_password_and_mail()

* line 253 of /lib/cronlib.php: call to core\task\send_new_user_passwords_task->execute()

* line 120 of /lib/cronlib.php: call to cron_run_inner_scheduled_task()

* line 73 of /lib/cronlib.php: call to cron_run_scheduled_tasks()

* line 178 of /admin/cli/cron.php: call to cron_run()  in /home/agora.cfaiprovence.com/public_html/lib/weblib.php on line 3257 PHP Notice:  Could not create and mail new user password! in /home/agora.cfaiprovence.com/public_html/lib/classes/task/send_new_user_passwords_task.php on line 72

Dès que j’ai supprimé l’utilisateur en question, les messages relatifs au problème du plugin « local_ldap » ont débuté.

J’ai alors effectué une mise jour de la plateforme (en 4.0 vers la 4.1.1) et des plugins, en vain ... J’ai alors désinstallé puis réinstallé le plugin « local_ldap » mais le message continu d’arriver toutes les 6 minutes et ce, bien que la synchronisation des utilisateurs et des cohortes fonctionne. En effet les nouveaux inscrits sur notre Active Directory se retrouvent bien inscrit dans Moodle et dans la cohorte du nom de leur OU d’origine.

Remarques :

  • Tous les plugins sont également à jour.
  • La méthode d’authentification LDAP et le Plugin de synchronisation des cohortes « local_ldap » ont été paramétrés (correctement normalement !) par notre responsable réseau.
  • Enfin, lorsque je lance le cron manuellement, celui s’exécute sans problème.
  • Je joints au cas où le fichier local/ldap/locallib.php 

Je vous remercie par avance pour l’attention que vous pourrez porter à mon problème.

Bien cordialement,

 

Philippe VIEN



Moyenne des évaluations  -
En réponse à Philippe VIEN

Re: Message Cron Daemon - Problème avec le plugin "LDAP syncing scripts" (local_ldap)

par Céline Perves,
Avatar Développeurs Avatar Développeurs de plugins Avatar Moodleurs particulièrement utiles
Bonjour,
au vu de la ligne à laquelle se rapporte l'erreur
for ($g = 0; $g < (count($groupe[0][$attribut]) - 1); $g++) {
je dirais que le ldap ne renvoi plus ce qui est attendu
il faudrait regarder ce que contient $groupe[0] il semblerait qu'il ne contienne pas l'index attendu qui est dans $attribut
En réponse à Céline Perves

Re: Message Cron Daemon - Problème avec le plugin "LDAP syncing scripts" (local_ldap)

par Philippe VIEN,

Bonjour,

Merci beaucoup pour votre retour.

En effet, je comprends (plus ou moins !) que le problème semble venir du fait que l'index "member;range=0-*" n'a pas été défini correctement et que la  fonction "count()" a été appelée avec un argument qui n'est pas un tableau ou un objet tel qu'attendu. Mais je ne comprends pas pourquoi ce problème survient brusquement sans qu'aucunes modification n'ait été faites (excepter la suppression d'un utilisateur-fantôme) ? Je me demande donc si ces problèmes ligne 380 ne sont pas la conséquence d’autre chose ? ...

Par ailleurs, n'étant pas expert (vous l'aurez compris !) j'avoue ne pas savoir comment procéder pour "regarder ce que contient $groupe[0]". Je me dis qu'il doit être possible de modifier le fichier localib.php pour lire (et sans doute afficher) le contenu de la variable $groupe[0] mais ceci est en dehors de mon champ de compétence. Si cela vous est possible, je vous serais très reconnaissant de me donner quelques indications quant à la manière de procéder (et je me tournerai vers l'administrateur de notre serveur...).

Merci encore pour votre sollicitude.

Bien cordialement,

Philippe VIEN

En réponse à Philippe VIEN

Re: Message Cron Daemon - Problème avec le plugin "LDAP syncing scripts" (local_ldap)

par Céline Perves,
Avatar Développeurs Avatar Développeurs de plugins Avatar Moodleurs particulièrement utiles

Bonjour

pour regarder le contenu de la variable plusieurs possibilités

  • regarder ce que contient le retour de la requête ldap
    • la requête est "(&({$this->config->group_attribute}=" . ldap_filter_addslashes(trim($group)) . ")(objectClass={$this->config->group_class}))"
    • les champ this->config sont ceux renseignés dans le paramétrage du plugin
    • ldap_filter_addslashes remplace des caractères spéciaux
    • ceci permettrait de voir ce qu'il y a en retour et donc de voir ce qu'il y a dans $group[0]
  • Autre solution ajouter des sorties dans le code
    • avec un var_dump : echo var_dump($group)
    • avec error_log(json_encode($group)) -> ceci sortira le contenu dans le fichier d'erreur de votre serveur web

J'espère que cela vous aidera

Bonne Journée

Céline

Moyenne des évaluations Utile (1)
En réponse à Céline Perves

Re: Message Cron Daemon - Problème avec le plugin "LDAP syncing scripts" (local_ldap)

par Céline Perves,
Avatar Développeurs Avatar Développeurs de plugins Avatar Moodleurs particulièrement utiles
Bonjour,
comme je suis le plugin local_ldap sur github j'ai vu passer des notifications avec des corrections qui pourraient au minimum vous éclairer sur le soucis rencontré
l'issue concernée est https://github.com/LafColITS/moodle-local_ldap/issues/34 , le code est pour l'instant sur le commit 649a881604df956d6914e9002d7739bf4c9a378e
cela pourrait même régler le problème
Bonne Journée
Céline
Moyenne des évaluations Utile (1)
En réponse à Céline Perves

Re: Message Cron Daemon - Problème avec le plugin "LDAP syncing scripts" (local_ldap)

par Philippe VIEN,
Bonjour,

Mille mercis encore pour vos recommandations et votre patience !

J'ai bien considéré le lien vers github que vous m'avez conseillé où il me semble (car je ne suis pas sûr à 100% d'avoir tout saisi) que le problème provient de la durée et de la mauvaise exécution de la tâche programmée. J'ai donc consulté les journaux de la tâche en question qui ne mentionnent aucun problème d’exécution...

Comme vous le suggérez également, j'ai ensuite téléchargé et installé le code (disponible ICI) ... Et il semble que cela règle mon problème !!!
En effet, le nouveau code est installé depuis bientôt 30 minutes et je ne reçois plus de mail d'erreur !

Je vous renouvèle donc mes sincères remerciements.

Bien cordialement,

Philippe VIEN
En réponse à Philippe VIEN

Re: Message Cron Daemon - Problème avec le plugin "LDAP syncing scripts" (local_ldap)

par Céline Perves,
Avatar Développeurs Avatar Développeurs de plugins Avatar Moodleurs particulièrement utiles
Ravie d'avoir pu vous aider
il faudra quand même vérifier que cela synchronise encore des choses et que ça n' pas seulement évité de logguer des erreurs
pour le fichier de log auquel je faisait référence pour apache il est dans /var/log/apache, pour nginx je ne sais plus
Bonne Journée
Céline
En réponse à Céline Perves

Re: Message Cron Daemon - Problème avec le plugin "LDAP syncing scripts" (local_ldap)

par Philippe VIEN,

Bonjour,

Hélas, vous aviez raison, je me suis un peu emballé ! ...

L'installation du "nouveau plugin" a permis de ne plus recevoir de mail d'erreur, mais il ne synchronisait plus les utilisateurs (toutes les cohortes étaient vides !).

J'ai donc réinstallé la dernière version du plugin disponible depuis Moodle plugins, les utilisateurs et les cohortes sont de nouveau synchronisés et le message d'erreur a repris avec sa fréquence habituelle ! ...

Retour à la case départ donc ! ... Je ne sais pas si le contenu des fichiers transmis (par ailleurs) a du sens !? Quant au fichier "erreur" trouvé effectivement dans /var/log/apache2, il ne contient que les deux lignes ci dessous :

[Tue Feb 28 06:25:10.407756 2023] [mpm_event:notice] [pid 25926:tid 139762377962624] AH00489: Apache/2.4.38 (Debian) mod_fcgid/2.3.9 OpenSSL/1.1.1n configured -- resuming normal operations
[Tue Feb 28 06:25:10.407809 2023] [core:notice] [pid 25926:tid 139762377962624] AH00094: Command line: '/usr/sbin/apache2'

Merci encore pour votre patience.

Cordialement,

Philippe VIEN

En réponse à Philippe VIEN

Re: Message Cron Daemon - Problème avec le plugin "LDAP syncing scripts" (local_ldap)

par Céline Perves,
Avatar Développeurs Avatar Développeurs de plugins Avatar Moodleurs particulièrement utiles
avez vous un moyen de lancer la requête ldap hors moodle?
pour voir quelle requête est lancée il faudrait récupérer la chaine dans le code Moodle, puis la lancer en ligne de commande ou via un navigateur ldap comme apache Directory Studio par exemple
En réponse à Céline Perves

Re: Message Cron Daemon - Problème avec le plugin "LDAP syncing scripts" (local_ldap)

par Philippe VIEN,
Bonjour,

Encore merci pour votre retour.

J’avoue ne pas savoir comment lancer une requête ldap, bien que je puisse contacter l’administrateur de notre serveur qui peut sans doute le faire en ligne de commande, mais je ne sais pas non plus quelle requête il faudrait lancer ? Ce prestataire n’est pas utilisateur – connaisseur - de Moodle, donc si vous avez une préconisation ou une indication particulière que je pourrais lui transmettre, je suis preneur …

Par ailleurs, lorsque je me penche sur le contenu du fichier « CronDaemon avec $groupe » (que j’ai transmis dans un autre message ci-dessous) je conste que l’erreur survient lorsque le groupe (ou l’OU) est vide ?!
La ligne ci-dessous semble montrer que $groupe contient 1 membre dans l’OU « 3205 PERF ……. » et cela ne génère pas d’erreur.
{"count":1,"0":{"member;range=0-*":{"count":1,"0":"CN=Julien FENELON,OU=3205 PERFECTIONNEMENT PROCEDE MAG 135,OU=nvxinscritsFC,OU=APPRENTI,DC=apprenti,DC=local"},"0":"member;range=0-*","count":1,"dn":"CN=3205 PERFECTIONNEMENT PROCEDE MAG 135,OU=3205 PERFECTIONNEMENT PROCEDE MAG 135,OU=nvxinscritsFC,OU=APPRENTI,DC=apprenti,DC=local"}}

En revanche, ci-dessous il n’y pas de membre dans l’OU « 3142 CQPM …. » est une erreur apparait !
{"count":1,"0":{"count":0,"dn":"CN=3142 CQPM 284,OU=3142 CQPM 284,OU=nvxinscritsFC,OU=APPRENTI,DC=apprenti,DC=local"}}
PHP Notice: Undefined index: member;range=0-* in /home/agora.cfaiprovence.com/public_html/local/ldap/locallib.php on line 383
PHP Warning: count(): Parameter must be an array or an object that implements Countable in /home/agora.cfaiprovence.com/public_html/local/ldap/locallib.php on line 383

On dirait que le code ne gère pas les cas où il n’y a pas de membre dans le groupe !? Si cela est vérifié, est-il possible d’envisager une modification (pérenne et /ou officielle) du code ? qu'en pensez vous ?
En réponse à Philippe VIEN

Re: Message Cron Daemon - Problème avec le plugin "LDAP syncing scripts" (local_ldap)

par Céline Perves,
Avatar Développeurs Avatar Développeurs de plugins Avatar Moodleurs particulièrement utiles
il semble effectivement que le cas vide ne soit pas pris en compte comme il faut
vous pouvez faire une issue au développeur avec les données que vous avez mis dans le message auquel je répond
il reverra son code pour que cela fonctionne
En réponse à Céline Perves

Re: Message Cron Daemon - Problème avec le plugin "LDAP syncing scripts" (local_ldap)

par Philippe VIEN,

J'ose encore vous demander comment procéder pour "faire une issue au développeur" ?

En réponse à Philippe VIEN

Re: Message Cron Daemon - Problème avec le plugin "LDAP syncing scripts" (local_ldap)

par Céline Perves,
Avatar Développeurs Avatar Développeurs de plugins Avatar Moodleurs particulièrement utiles
je crois que vous avez réussi sans moi... désolée je n'avait pas vu la notification
En réponse à Céline Perves

Re: Message Cron Daemon - Problème avec le plugin "LDAP syncing scripts" (local_ldap)

par Céline Perves,
Avatar Développeurs Avatar Développeurs de plugins Avatar Moodleurs particulièrement utiles
j'ai vu ce matin que quelqu'un se plaignait de soucis de pagination ldap avec le plugin depuis quelque semaines
il y avait déjà eu une correction cette semaine mais semble t'il insuffisante
peut être qu'en se servant des tests unitaires avec un lot de données proches des vôtre on pourrait trouver où ce situe le soucis
de mon côté, méfiante je vais voir pour faire des tests (je suis en train de préparer la migration de nos plate-formes en Moodle 4.1)
En réponse à Céline Perves

Re: Message Cron Daemon - Problème avec le plugin "LDAP syncing scripts" (local_ldap)

par Philippe VIEN,
Bonjour,

Encore un grand merci pour votre considération.

Concernant vos recommandations, j'ai choisis de suivre de la 2ème solution ...

J'ai donc ajouté les 2 lignes de code proposées dans le fichier locallib.php juste avant la ligne 380.

echo var_dump($group);
error_log(json_encode($group));


Ne sachant pas comment lancer le fichier locallib.php, j'ai attendu de recevoir le mail de "Cron Daemon", que j'ajoute en pièce jointe.

J'ai ensuite modifier les lignes de code proposées en remplaçant $group par $groupe. Je joints également le mail que j'ai reçu après cette modification.

echo var_dump($groupe);
error_log(json_encode($groupe));


Par ailleurs, je n'ai pas su trouver le fichier "erreur" dont vous parlez ... J'ai cherché dans le répertoire "logs" mais rien de probant a priori ...

Encore merci pour votre aide précieuse.

Cordialement,

Philippe VIEN