[ Index ]
 

Code source de SPIP 1.9.2c

Accédez au Source d'autres logiciels libres

title

Body

[fermer]

/ecrire/inc/ -> auth_ldap.php (source)

   1  <?php
   2  
   3  /***************************************************************************\
   4   *  SPIP, Systeme de publication pour l'internet                           *
   5   *                                                                         *
   6   *  Copyright (c) 2001-2007                                                *
   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  if (!defined("_ECRIRE_INC_VERSION")) return;
  14  
  15  // Authentifie via LDAP et retourne la ligne SQL decrivant l'utilisateur si ok
  16  
  17  // http://doc.spip.org/@inc_auth_ldap_dist
  18  function inc_auth_ldap_dist ($login, $pass) {
  19  
  20      // Securite contre un serveur LDAP laxiste
  21      if (!$login || !$pass) return array();
  22  
  23      // Serveur joignable ?
  24      if (!@spip_connect_ldap()) return array();
  25  
  26      // Utilisateur connu ?
  27      if (!($dn = auth_ldap_search($login, $pass))) return array();
  28  
  29      // Si l'utilisateur figure deja dans la base, y recuperer les infos
  30      $result = spip_query("SELECT * FROM spip_auteurs WHERE login=" . _q($login) . " AND source='ldap'");
  31  
  32      // sinon importer les infos depuis LDAP, 
  33      // avec le statut par defaut a l'install
  34      if (!spip_num_rows($result))
  35          $result = auth_ldap_inserer($dn, $GLOBALS['meta']["ldap_statut_import"]);
  36      return $result ? spip_fetch_array($result) : array(); 
  37  }
  38  
  39  // http://doc.spip.org/@auth_ldap_search
  40  function auth_ldap_search($login, $pass)
  41  {
  42      global $ldap_link, $ldap_base;
  43  
  44      // Attributs testes pour egalite avec le login
  45      $atts = array('sAMAccountName', 'uid', 'login', 'userid', 'cn', 'sn');
  46      $login_search = ereg_replace("[^-@._[:space:][:alnum:]]", "", $login); // securite
  47  
  48      // Tenter une recherche pour essayer de retrouver le DN
  49      reset($atts);
  50      while (list(, $att) = each($atts)) {
  51          $result = @ldap_search($ldap_link, $ldap_base, "$att=$login_search", array("dn"));
  52          $info = @ldap_get_entries($ldap_link, $result);
  53              // Ne pas accepter les resultats si plus d'une entree
  54              // (on veut un attribut unique)
  55          if (is_array($info) AND $info['count'] == 1) {
  56              $dn = $info[0]['dn'];
  57              if (@ldap_bind($ldap_link, $dn, $pass)) return $dn;
  58          }
  59      }
  60  
  61      if (!isset($dn)) {
  62          // Si echec, essayer de deviner le DN
  63          reset($atts);
  64          while (list(, $att) = each($atts)) {
  65              if (@ldap_bind($ldap_link, $dn, $pass))
  66                  return "$att=$login_search, $ldap_base";
  67          }
  68      }
  69      return '';
  70  }
  71  
  72  // http://doc.spip.org/@auth_ldap_inserer
  73  function auth_ldap_inserer($dn, $statut)
  74  {
  75      global $ldap_link, $ldap_base;
  76  
  77      // refuser d'importer n'importe qui 
  78      if (!$statut) return false;
  79  
  80      // Lire les infos sur l'utilisateur depuis LDAP
  81      $result = @ldap_read($ldap_link, $dn, "objectClass=*", array("uid", "cn", "mail", "description"));
  82          
  83      // Si l'utilisateur ne peut lire ses infos, 
  84      // se reconnecter avec le compte principal
  85      if (!$result AND spip_connect_ldap())
  86          $result = @ldap_read($ldap_link, $dn, "objectClass=*", array("uid", "cn", "mail", "description"));
  87  
  88      if (!$result) return array();
  89  
  90          // Recuperer les donnees de l'auteur
  91      $info = @ldap_get_entries($ldap_link, $result);
  92      if (!is_array($info)) return array();
  93      for ($i = 0; $i < $info["count"]; $i++) {
  94          $val = $info[$i];
  95          if (is_array($val)) {
  96                  if (!$nom) $nom = $val['cn'][0];
  97                  if (!$email) $email = $val['mail'][0];
  98                  if (!$login) $login = $val['uid'][0];
  99                  if (!$bio) $bio = $val['description'][0];
 100          }
 101      }
 102  
 103      // Convertir depuis UTF-8 (jeu de caracteres par defaut)
 104      include_spip('inc/charsets');
 105      $nom = importer_charset($nom, 'utf-8');
 106      $email = importer_charset($email, 'utf-8');
 107      $bio = importer_charset($bio, 'utf-8');
 108      $login = strtolower(importer_charset($login, 'utf-8'));
 109  
 110      include_spip('base/abstract_sql');
 111      $n = spip_abstract_insert('spip_auteurs', '(source, nom, login, email, bio, statut, pass)', "('ldap', " . _q($nom) . ", " . _q($login) . ", " . _q($email) . ", " . _q($bio) . ", " . _q($statut) . ", '')");
 112  
 113      return spip_query("SELECT * FROM spip_auteurs WHERE id_auteur=$n");
 114  }
 115  ?>


Généré le : Wed Nov 21 10:20:27 2007 par Balluche grâce à PHPXref 0.7
  Clicky Web Analytics