[ Index ] |
|
Code source de SPIP 1.8.3 |
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 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Thu Feb 22 22:27:47 2007 | par Balluche grâce à PHPXref 0.7 |