/** * Retrouver un dn * @param string $dn * @param array $desc * @param string $serveur * @return array */ function auth_ldap_retrouver($dn, $desc = array(), $serveur = '') { // Lire les infos sur l'utilisateur a partir de son DN depuis LDAP if (!($ldap = spip_connect_ldap($serveur))) { spip_log("ldap {$serveur} injoignable"); return array(); } $ldap_link = $ldap['link']; if (!$desc) { $desc = $ldap['attributes'] ? $ldap['attributes'] : $GLOBALS['ldap_attributes']; unset($desc['login']); } $result = @ldap_read($ldap_link, $dn, "objectClass=*", array_values($desc)); if (!$result) { return array(); } // Recuperer les donnees du premier (unique?) compte de l'auteur $val = @ldap_get_entries($ldap_link, $result); if (!is_array($val) or !is_array($val[0])) { return array(); } $val = $val[0]; // Convertir depuis UTF-8 (jeu de caracteres par defaut) include_spip('inc/charsets'); foreach ($desc as $k => $v) { $desc[$k] = importer_charset($val[strtolower($v)][0], 'utf-8'); } return $desc; }
/** * * @param string $login * @param string $pw * @param string $serveur * @return array */ function lire_php_auth($login, $pw, $serveur = '') { $row = sql_fetsel('*', 'spip_auteurs', 'login='******'text'), '', '', '', '', $serveur); if (!$row) { if (spip_connect_ldap($serveur) and $auth_ldap = charger_fonction('ldap', 'auth', true)) { return $auth_ldap($login, $pw, $serveur, true); } return false; } // su pas de source definie // ou auth/xxx introuvable, utiliser 'spip' if (!($auth_methode = $row['source']) or !($auth = charger_fonction($auth_methode, 'auth', true))) { $auth = charger_fonction('spip', 'auth', true); } $auteur = ''; if ($auth) { $auteur = $auth($login, $pw, $serveur, true); } // verifier que ce n'est pas un message d'erreur if (is_array($auteur) and count($auteur)) { return $auteur; } return false; }
include_once _DIR_RESTREINT_ABS.'auth/ldap.php'; include_once 'config/ldap.php'; spip_connect(); ### DBG fich_debug("DBG >> login : $login\n"); // Si l'utilisateur figure deja dans la base, y recuperer les infos $result = spip_query("SELECT * FROM spip_auteurs WHERE login="******" AND source='ldap'"); if (!spip_num_rows($result)) { ### DBG fich_debug("DBG >> Login : $login n'est pas dans la base.\n"); fich_debug("DBG >> statut : ".$GLOBALS['meta']["ldap_statut_import"]."\n"); fich_debug("DBG >> ldap_base : ".$GLOBALS['ldap_base']."\n"); // sinon importer les infos depuis LDAP, // avec le statut par defaut a l'install // Inserer les infos dans la base spip spip_connect_ldap(); auth_ldap_inserer("uid=$login,ou=People,".$GLOBALS['ldap_base'], $GLOBALS['meta']["ldap_statut_import"], $login); $result = spip_query("SELECT * FROM spip_auteurs WHERE login="******" AND source='ldap'"); } $row_auteur = spip_fetch_array($result); ### DBG fich_debug("DBG >> statut :".$row_auteur['statut']."\n"); if ($row_auteur['statut'] == '0minirezo') $cookie_admin = "@".$session_login; $var_f = charger_fonction('session', 'inc'); $cookie_session = $var_f($row_auteur); ### DBG fich_debug("DBG >> $cookie_session\n"); // On poste le cookie de session spip_setcookie('spip_session', $cookie_session);
function ecrire_acces() { $htaccess = _DIR_RESTREINT . _ACCESS_FILE_NAME; $htpasswd = _DIR_TMP . _AUTH_USER_FILE; // Cette variable de configuration peut etre posee par un plugin // par exemple acces_restreint ; // si .htaccess existe, outrepasser spip_meta if (($GLOBALS['meta']['creer_htpasswd'] != 'oui') AND !@file_exists($htaccess)) { spip_unlink($htpasswd); spip_unlink($htpasswd."-admin"); return; } # remarque : ici on laisse passer les "nouveau" de maniere a leur permettre # de devenir redacteur le cas echeant (auth http)... a nettoyer // attention, il faut au prealable se connecter a la base (necessaire car utilise par install) if (spip_connect_ldap()) return; $p1 = ''; // login:htpass pour tous $p2 = ''; // login:htpass pour les admins $s = sql_select("login, htpass, statut", "spip_auteurs", sql_in("statut", array('1comite','0minirezo','nouveau'))); while ($t = sql_fetch($s)) { if (strlen($t['login']) AND strlen($t['htpass'])) { $p1 .= $t['login'].':'.$t['htpass']."\n"; if ($t['statut'] == '0minirezo') $p2 .= $t['login'].':'.$t['htpass']."\n"; } } if ($p1) { ecrire_fichier($htpasswd, $p1); ecrire_fichier($htpasswd.'-admin', $p2); spip_log("Ecriture de $htpasswd et $htpasswd-admin"); } }
function lire() { // read global $ldap_link, $ldap_base, $flag_utf8_decode; $this->nom = $this->email = $this->pass = $this->statut = ''; if (!$this->login) { return false; } // If the author exists in the database, fetch his infos $query = "SELECT * FROM spip_auteurs WHERE login='******' AND source='ldap'"; $result = lcm_query($query); if ($row = lcm_fetch_array($result)) { $this->nom = $row['nom']; $this->email = $row['email']; $this->statut = $row['statut']; $this->bio = $row['bio']; return true; } // Read the info on the author from LDAP $result = @ldap_read($ldap_link, $this->user_dn, "objectClass=*", array("uid", "cn", "mail", "description")); // If the user cannot read his informations, reconnect with the main account if (!$result) { if (spip_connect_ldap()) { $result = @ldap_read($ldap_link, $this->user_dn, "objectClass=*", array("uid", "cn", "mail", "description")); } else { return false; } } if (!$result) { return false; } // Fetch the author's data $info = @ldap_get_entries($ldap_link, $result); if (!is_array($info)) { return false; } for ($i = 0; $i < $info["count"]; $i++) { $val = $info[$i]; if (is_array($val)) { if (!$this->nom) { $this->nom = $val['cn'][0]; } if (!$this->email) { $this->email = $val['mail'][0]; } if (!$this->login) { $this->login = $val['uid'][0]; } if (!$this->bio) { $this->bio = $val['description'][0]; } } } // Convert from UTF-8 (default encoding) if ($flag_utf8_decode) { $this->nom = utf8_decode($this->nom); $this->email = utf8_decode($this->email); $this->login = utf8_decode($this->login); $this->bio = utf8_decode($this->bio); } return true; }