[ Index ] |
|
Code source de SPIP 1.9.2c |
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 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Wed Nov 21 10:20:27 2007 | par Balluche grâce à PHPXref 0.7 |
![]() |