IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Erreur LDAP non capturée [PHP 5.6]


Sujet :

Langage PHP

  1. #1
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut Erreur LDAP non capturée
    Bonjour,

    J'essaie un ldap_bind pour vérifier un mot de passe (l'existence de l'utilisateur est préalablement vérifiée dans le programme, ainsi que son statut d'utilisateur LDAP ou externe) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    			/** 3) Vérifier le mot de passe de l'utilisateur */
    			if($utilisateur->getUtiLdap() == true)
    			{
    				// Vérification via LDAP
    				try 
    				{
    					$ds = ldap_connect(Configuration::get('ldap_host'));
    					ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
    					$util = ldap_bind($ds, 'uid='.$username.','.Configuration::get('ldap_base_dn'), $password);
    					ldap_close($ds);
    				}
    				catch (Exception $e)
    				{
    					// Mauvais mot de passe par rapport au LDAP
    					$this->setObjErreur();
    					$this->getObjErreur()->ajouterErreur('Mauvais mot de passe (LDAP) !'); // TODO i18n
     
    					// Réaffichage du formulaire de connexion
    					$this->afficherPageConnexion($this->getObjErreur()->getListeErreurs());
    				}
    			} // Fin de if($utilisateur->getUtiLdap() == true)
    Malgré le try / catch, comme j'ai quand même le warning suivant qui s'affiche en dev (en prod, je n'afficherai plus les erreurs) :
    Warning: ldap_bind(): Unable to bind to server: Invalid credentials in mon/chemin/vers/mon/programme.php on line 68
    Pire : Le code à l'intérieur du catch ne s'exécute pas et j'ai une page blanche.

    La ligne 68 est bien entendu la ligne du ldap_bind.

    Et si je saisis le bon mot de passe, pas d'erreur donc la connexion au ldap n'est pas en cause.

    Ce comportement est-il normal ?

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Pour l'exception (ou plutôt l'absence d'exception), je dirais que oui, c'est normal : rien dans la doc ne me laisse à penser que les fonctions ldap lancent des exceptions nativement (peut-être en PHP7, mais tu as taggué ton thread PHP 5.6) Donc, à moins que tu n'ais intégré une gestion d'erreurs personnalisée, l'absence d'exception ne m'étonne pas.

    Pour gérer l'erreur, je crains qu'il ne faille faire du code moche pour générer une exception manuellement Tu peux mettre quelque chose de ce genre en place :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $util = @ldap_bind($ds, 'uid='.$username.','.Configuration::get('ldap_base_dn'), $password);
    if ($util === false) {
       // Oops...
        throw new Exception("LDAP bind dans les choux !");
    }
    Eventuellement, tu peux enrichir ton exception en te basant sur ce commentaire de la doc : http://php.net/manual/fr/function.ldap-bind.php#103034 et des fonctions comme ldap_​error et ldap_​errno

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    C'est ce que j'avais fait au départ et je voulais faire ça plus propre mais tant pis.

    Comme je vais désactiver l'affichage des erreurs en prod (ou au moins des warnings), ça devrait suffire.
    Je reviens donc à mon code de départ.

    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 5.6] Capture de l'erreur LDAP ne fonctionne pas
    Par CinePhil dans le forum Langage
    Réponses: 2
    Dernier message: 05/07/2017, 17h31
  2. Réponses: 7
    Dernier message: 03/05/2007, 12h44
  3. Réponses: 8
    Dernier message: 08/09/2006, 14h09
  4. Réponses: 7
    Dernier message: 07/03/2006, 09h34
  5. [CR8][Delphi6] erreur imprimante non supportée
    Par Sebastien L. dans le forum SDK
    Réponses: 3
    Dernier message: 12/09/2002, 15h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo