[ Index ]
 

Code source de SPIP 1.8.3

Accédez au Source d'autres logiciels libres | Soutenez Angelica Josefina !

title

Body

[fermer]

/ecrire/ -> inc_auth_ldap.php3 (source)

   1  <?php
   2  
   3  /***************************************************************************\
   4   *  SPIP, Systeme de publication pour l'internet                           *
   5   *                                                                         *
   6   *  Copyright (c) 2001-2005                                                *
   7   *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
   8   *                                                                         *
   9   *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
  10   *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
  11  \***************************************************************************/
  12  
  13  
  14  //
  15  // Ce fichier ne sera execute qu'une fois
  16  if (defined("_ECRIRE_INC_AUTH_LDAP")) return;
  17  define("_ECRIRE_INC_AUTH_LDAP", "1");
  18  
  19  class Auth_ldap {
  20      var $user_dn;
  21      var $nom, $login, $email, $pass, $statut, $bio;
  22  
  23  	function init() {
  24          // Verifier la presence de LDAP
  25          if (!$GLOBALS['ldap_present']) return false;
  26          return spip_connect_ldap();
  27      }
  28  
  29  	function verifier_challenge_md5($login, $mdpass_actuel, $mdpass_futur) {
  30          return false;
  31      }
  32  
  33  	function verifier($login, $pass) {
  34          global $ldap_link, $ldap_base;
  35  
  36          // Securite, au cas ou le serveur LDAP est tres laxiste
  37          if (!$login || !$pass) return false;
  38  
  39          // Attributs testes pour egalite avec le login
  40          $atts = array('sAMAccountName', 'uid', 'login', 'userid', 'cn', 'sn');
  41          $login_search = ereg_replace("[^-@._[:space:][:alnum:]]", "", $login); // securite
  42  
  43          // Tenter une recherche pour essayer de retrouver le DN
  44          reset($atts);
  45          while (list(, $att) = each($atts)) {
  46              $filter = "$att=$login_search";
  47              $result = @ldap_search($ldap_link, $ldap_base, $filter, array("dn"));
  48              $info = @ldap_get_entries($ldap_link, $result);
  49              // Ne pas accepter les resultats si plus d'une entree
  50              // (on veut un attribut unique)
  51              if (is_array($info) AND $info['count'] == 1) {
  52                  $dn = $info[0]['dn'];
  53                  if (@ldap_bind($ldap_link, $dn, $pass)) {
  54                      $this->user_dn = $dn;
  55                      $this->login = $login;
  56                      return true;
  57                  }
  58              }
  59          }
  60  
  61          // Si echec, essayer de deviner le DN
  62          reset($atts);
  63          while (list(, $att) = each($atts)) {
  64              $dn = "$att=$login_search, $ldap_base";
  65              if (@ldap_bind($ldap_link, $dn, $pass)) {
  66                  $this->user_dn = $dn;
  67                  $this->login = $login;
  68                  return true;
  69              }
  70          }
  71          return false;
  72      }
  73  
  74  	function lire() {
  75          global $ldap_link, $ldap_base;
  76          $this->nom = $this->email = $this->pass = $this->statut = '';
  77  
  78          if (!$this->login) return false;
  79  
  80          // Si l'auteur existe dans la base, y recuperer les infos
  81          $query = "SELECT * FROM spip_auteurs WHERE login='".addslashes($this->login)."' AND source='ldap'";
  82          $result = spip_query($query);
  83  
  84          if ($row = spip_fetch_array($result)) {
  85              $this->nom = $row['nom'];
  86              $this->email = $row['email'];
  87              $this->statut = $row['statut'];
  88              $this->bio = $row['bio'];
  89              return true;
  90          }
  91  
  92          // Lire les infos sur l'auteur depuis LDAP
  93          $result = @ldap_read($ldap_link, $this->user_dn, "objectClass=*", array("uid", "cn", "mail", "description"));
  94          
  95          // Si l'utilisateur ne peut lire ses infos, se reconnecter avec le compte principal
  96          if (!$result) {
  97              if (spip_connect_ldap())
  98                  $result = @ldap_read($ldap_link, $this->user_dn, "objectClass=*", array("uid", "cn", "mail", "description"));
  99              else
 100                  return false;
 101          }
 102          if (!$result) return false;
 103  
 104          // Recuperer les donnees de l'auteur
 105          $info = @ldap_get_entries($ldap_link, $result);
 106          if (!is_array($info)) return false;
 107          for ($i = 0; $i < $info["count"]; $i++) {
 108              $val = $info[$i];
 109              if (is_array($val)) {
 110                  if (!$this->nom) $this->nom = $val['cn'][0];
 111                  if (!$this->email) $this->email = $val['mail'][0];
 112                  if (!$this->login) $this->login = $val['uid'][0];
 113                  if (!$this->bio) $this->bio = $val['description'][0];
 114              }
 115          }
 116  
 117          // Convertir depuis UTF-8 (jeu de caracteres par defaut)
 118          include_ecrire ('inc_charsets.php3');
 119          $this->nom = importer_charset($this->nom, 'utf-8');
 120          $this->email = importer_charset($this->email, 'utf-8');
 121          $this->login = importer_charset($this->login, 'utf-8');
 122          $this->bio = importer_charset($this->bio, 'utf-8');
 123  
 124          return true;
 125      }
 126  
 127  	function activer() {
 128          $nom = addslashes($this->nom);
 129          $login = strtolower(addslashes($this->login));
 130          $email = addslashes($this->email);
 131          $bio = addslashes($this->bio);
 132          $statut = lire_meta("ldap_statut_import");
 133  
 134          if (!$statut) return false;
 135  
 136          // Si l'auteur n'existe pas, l'inserer avec le statut par defaut (defini a l'install)
 137          $query = "SELECT id_auteur FROM spip_auteurs WHERE login='$login'";
 138          $result = spip_query($query);
 139          if (spip_num_rows($result)) return false;
 140  
 141          $query = "INSERT IGNORE INTO spip_auteurs (source, nom, login, email, bio, statut, pass) ".
 142              "VALUES ('ldap', '$nom', '$login', '$email', '$bio', '$statut', '')";
 143          return spip_query($query);
 144      }
 145  }
 146  
 147  
 148  ?>


Généré le : Thu Feb 22 22:27:47 2007 par Balluche grâce à PHPXref 0.7