Projet

Général

Profil

Tâche #20738

Scénario #20629: Traitement express MEN (23-25)

Erreur à l'ouverture de session pour un utilisateur ayant une apostrophe dans son nom ou prénom

Ajouté par Laurent Brillard il y a presque 7 ans. Mis à jour il y a presque 7 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Début:
06/06/2017
Echéance:
% réalisé:

100%

Temps estimé:
3.00 h
Temps passé:
Restant à faire (heures):
0.0

Description

Bonjour,

Sur Scribe 2.5.2, avec une alimentation par fichiers AAF, les utilisateurs ayant une apostrophe dans leur nom ou leur prénom (2 cas vus en établissements) ont une erreur à l'ouverture de leur session Windows :

Logon.exe

Une erreur s'est produite lors de l'appel distant (remote_logon) :
(1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server...

Palliatif : supprimer l'apostrophe dans la fiche via l'EAD mais cela n'est pas durable.

Ce problème ne se produisait pas en Scribe 2.3.

Merci d'avance de ce que vous pourrez faire !
Laurent Brillard

login.py Voir - /usr/lib/python2.7/dist-packages/scribe/login.py (15,6 ko) Joël Cuissinat, 07/06/2017 17:15


Demandes liées

Lié à Scribe - Demande #21400: Problème à l'ouverture de session pour les logins contenant des caractères spéciaux Fermé 19/09/2017

Révisions associées

Révision e701f82e (diff)
Ajouté par Joël Cuissinat il y a presque 7 ans

Gestion des utilisateurs avec apostrophe

  • scribe/login.py : utilisation de la syntaxe préconisée pour "db.cursor"

Ref: #20738

Révision 282abdc1 (diff)
Ajouté par Daniel Dehennin il y a presque 7 ans

Correction de l’utilisation de l’API MySQLdb.cursors

Il faut toujours passer un tuple pour les substitutions même lorsqu’il
n’y en a qu’une.

  • scribe/login.py (log_connexion_db): Passage des valeurs uniques en
    tant que tuple.

Ref: #20738

Historique

#1 Mis à jour par Joël Cuissinat il y a presque 7 ans

  • Tracker changé de Demande à Tâche
  • Projet changé de Scribe à controle-vnc
  • Temps estimé mis à 3.00 h
  • Tâche parente mis à #20629
  • Restant à faire (heures) mis à 3.0

#2 Mis à jour par Joël Cuissinat il y a presque 7 ans

  • Statut changé de Nouveau à En cours
  • Assigné à mis à Joël Cuissinat

#3 Mis à jour par Joël Cuissinat il y a presque 7 ans

Le problème ayant visiblement été introduit par l'utilisation de MySQL en tant que backend du client Scribe, il faudrait vérifier et corriger à partir de la version 2.5.1 : http://eole.ac-dijon.fr/documentations/2.5/partielles/HTML/ModuleScribe/co/07-changements.html#qN193

#4 Mis à jour par Joël Cuissinat il y a presque 7 ans

C'est bien lorsqu'on essaie d'enregistrer/mettre à jour le "displayName" de l'utilisateur dans la base :

      File "/usr/share/eole/controlevnc/controle_vnc_serveur.py", line 329, in remote_logon
        return gest_sessions.Logon().logon(self.ip, os_type, self.blocage)
      File "/usr/share/eole/controlevnc/gest_sessions.py", line 34, in logon
        Connexions().get_infos(self.ip, os_type)
      File "/usr/share/eole/controlevnc/connexions.py", line 421, in get_infos
        os_type, ip)
      File "/usr/lib/python2.7/dist-packages/scribe/login.py", line 249, in log_connexion_db
        c.execute("UPDATE log SET netbios='%s', user='%s', sid='%s', display_name='%s', prim_group='%s', os='%s' WHERE ip='%s'" % (netbios, user, sid, display_name,primgrp, ostype, ip))

On peut également simuler l'erreur avec le script dyn-logon :

root@scribe:~# /usr/share/eole/fichier/dyn-logon.py -u toto  -o Vista -m truc -i 55
Traceback (most recent call last):
  File "/usr/share/eole/fichier/dyn-logon.py", line 70, in main
    logon(user, ostype, machine, adresse_ip, pid)
  File "/usr/lib/python2.7/dist-packages/scribe/login.py", line 130, in logon
    ostype, adresse_ip)
  File "/usr/lib/python2.7/dist-packages/scribe/login.py", line 256, in log_connexion_db
    c.execute("INSERT INTO log (netbios, ip, user, sid, display_name, prim_group, os) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s')" % (netbios, ip, user, sid, display_name, primgrp, ostype))
  File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 174, in execute
    self.errorhandler(self, exc, value)
  File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
    raise errorclass, errorvalue
ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Toro L'TOTO', 'eleves', 'Vista')' at line 1")
None
(1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Toro L'TOTO', 'eleves', 'Vista')' at line 1")

#5 Mis à jour par Joël Cuissinat il y a presque 7 ans

  • Projet changé de controle-vnc à scribe-backend

#6 Mis à jour par Joël Cuissinat il y a presque 7 ans

Il faut utiliser la syntaxe python préconisée pour MySQLdb : https://stackoverflow.com/questions/775296/python-mysql-parameterized-queries

#7 Mis à jour par Joël Cuissinat il y a presque 7 ans

  • Fichier login.py Voir ajouté
  • % réalisé changé de 0 à 100
  • Restant à faire (heures) changé de 3.0 à 0.5

Correction de la librairie python /usr/lib/python2.7/dist-packages/scribe/login.py (fichier joint pour test/correction manuelle).

Compilation de paquets candidats et mise à jour des changelog pour 2.5.1, 2.5.2, 2.6.0, 2.6.1 + fusion dans master.

#8 Mis à jour par Laurent Brillard il y a presque 7 ans

Merci Joël, je mets en test...

#9 Mis à jour par Scrum Master il y a presque 7 ans

  • Projet changé de scribe-backend à Distribution EOLE
  • Statut changé de En cours à Résolu

#10 Mis à jour par Laurent Brillard il y a presque 7 ans

Joël, j'ai mis en place le fichier logon.py et apparemment cela plantait les ouvertures de session...
Y a-t-il autre chose à faire que de copier le fichier au bon endroit ?

#11 Mis à jour par Daniel Dehennin il y a presque 7 ans

  1. Intégration d’une machine au domaine du scribe
  2. Modification du displayName de prof.3a depuis l’EAD ⮕ Identité = prof D'l'a 3a
  3. Connexion avec le compte prof.3a

#12 Mis à jour par Daniel Dehennin il y a presque 7 ans

  • Restant à faire (heures) changé de 0.5 à 0.25

Cela fonctionne pour moi avec mon correctif.

#13 Mis à jour par Fabrice Barconnière il y a presque 7 ans

  • Description mis à jour (diff)
  • Restant à faire (heures) changé de 0.25 à 0.0

#14 Mis à jour par Fabrice Barconnière il y a presque 7 ans

Test sur Scribe 2.6.1 OK

#15 Mis à jour par Scrum Master il y a presque 7 ans

  • Statut changé de Résolu à Fermé

#16 Mis à jour par Laurent Brillard il y a presque 7 ans

Bonjour,

Sur un Scribe 2.5.2 de test, OK, sur un Scribe d'établissement, j'ai l'erreur :

# service controle-vnc start
Unhandled Error
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/twisted/application/app.py", line 642, in run
    runApp(config)
  File "/usr/lib/python2.7/dist-packages/twisted/scripts/twistd.py", line 23, in runApp
    _SomeApplicationRunner(config).run()
  File "/usr/lib/python2.7/dist-packages/twisted/application/app.py", line 376, in run
    self.application = self.createOrGetApplication()
  File "/usr/lib/python2.7/dist-packages/twisted/application/app.py", line 441, in createOrGetApplication
    application = getApplication(self.config, passphrase)
--- <exception caught here> ---
  File "/usr/lib/python2.7/dist-packages/twisted/application/app.py", line 452, in getApplication
    application = service.loadApplication(filename, style, passphrase)
  File "/usr/lib/python2.7/dist-packages/twisted/application/service.py", line 405, in loadApplication
    application = sob.loadValueFromFile(filename, 'application', passphrase)
  File "/usr/lib/python2.7/dist-packages/twisted/persisted/sob.py", line 210, in loadValueFromFile
    exec fileObj in d, d
  File "/usr/share/eole/controlevnc/controle_vnc_serveur.py", line 35, in <module>
    from connexions import Connexions, Session
  File "/usr/share/eole/controlevnc/connexions.py", line 19, in <module>
    from scribe.login import Ldap, log_connexion_db
exceptions.SyntaxError: invalid syntax (login.py, line 1)

Failed to load application: invalid syntax (login.py, line 1)

 * already running
 * Starting controle VNC: controle-vnc                                   [fail] 

D'où peux venir le problème ?

#17 Mis à jour par Laurent Brillard il y a presque 7 ans

Erreur de ma part, le fichier n'était pas correctement téléchargé. Je re-teste.
Désolé...

#18 Mis à jour par Joël Cuissinat il y a plus de 6 ans

  • Lié à Demande #21400: Problème à l'ouverture de session pour les logins contenant des caractères spéciaux ajouté

Formats disponibles : Atom PDF