Rev 609 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/***************************************************************************\* SPIP, Systeme de publication pour l'internet ** ** Copyright (c) 2001-2005 ** Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James ** ** Ce programme est un logiciel libre distribue sous licence GNU/GPL. ** Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *\***************************************************************************///// Ce fichier ne sera execute qu'une foisif (defined("_ECRIRE_INC_AUTH")) return;define("_ECRIRE_INC_AUTH", "1");include_ecrire ("inc_connect.php3");include_ecrire ("inc_meta.php3");include_ecrire ("inc_session.php3");define("_DIR_LOGIN", _DIR_RESTREINT ? "" : "../");define("_DIR_LOGED_IN", _DIR_RESTREINT ? "" : _DIR_RESTREINT_ABS);//// Fonctions de gestion de l'acces restreint aux rubriques//function acces_rubrique($id_rubrique) {global $connect_toutes_rubriques;global $connect_id_rubrique;return ($connect_toutes_rubriques OR $connect_id_rubrique[$id_rubrique]);}function acces_restreint_rubrique($id_rubrique) {global $connect_id_rubrique;global $connect_statut;return ($connect_statut == "0minirezo" AND $connect_id_rubrique[$id_rubrique]);}function auth() {global $_POST, $_GET, $_COOKIE, $_SERVER;global $auth_can_disconnect, $ignore_auth_http, $ignore_remote_user;global $connect_id_auteur, $connect_nom, $connect_bio, $connect_email;global $connect_nom_site, $connect_url_site, $connect_login, $connect_pass;global $connect_activer_imessage, $connect_activer_messagerie;global $connect_statut, $connect_toutes_rubriques, $connect_id_rubrique;global $auteur_session, $prefs;global $clean_link;//// Si pas MySQL, fini//if (!$GLOBALS['db_ok']) {spip_log("Erreur base de donnees");include_ecrire('inc_presentation.php3');install_debut_html(_T('info_travaux_titre'));echo _T('titre_probleme_technique');echo "<p><tt>".spip_sql_errno()." ".spip_sql_error()."</tt></p>";install_fin_html();exit;}//// Initialiser variables (eviter hacks par URL)//$auth_login = "";$auth_pass = "";$auth_pass_ok = false;$auth_can_disconnect = false;$auth_htaccess = false;//// Recuperer les donnees d'identification//// Authentification sessionif ($cookie_session = $_COOKIE['spip_session']) {if (verifier_session($cookie_session)) {if ($auteur_session['statut'] == '0minirezo'OR $auteur_session['statut'] == '1comite') {$auth_login = $auteur_session['login'];$auth_pass_ok = true;$auth_can_disconnect = true;}}}// Peut-etre sommes-nous en auth http?else if ($_SERVER['PHP_AUTH_USER'] && $_SERVER['PHP_AUTH_PW']&& !$ignore_auth_http) {// Si le login existe dans la base, se logerif (verifier_php_auth()) {$auth_login = $_SERVER['PHP_AUTH_USER'];$auth_pass_ok = true;$auth_can_disconnect = true;$_SERVER['PHP_AUTH_PW'] = '';}// Sinon c'est un login d'intranet independant de spip, on ignore}// Authentification .htaccess old style, car .htaccess semble// souvent definir *aussi* PHP_AUTH_USER et PHP_AUTH_PWelse if ($GLOBALS['_SERVER']['REMOTE_USER']&& !$ignore_remote_user) {$auth_login = $GLOBALS['_SERVER']['REMOTE_USER'];$auth_pass_ok = true;$auth_htaccess = true;}// Tentative de login echecif ($_GET['bonjour'] == 'oui' AND !$auth_login) {$link = new Link(_DIR_LOGIN . "spip_cookie.php3?test_echec_cookie=oui");$clean_link->delVar('bonjour');$url = str_replace('/./', '/', _DIR_LOGED_IN .$clean_link->getUrl());$link->addVar('url', $url);redirige_par_entete($link->getUrl());exit;}// Si pas authentifie, demander login / mdpif (!$auth_login) {$url = str_replace('/./', '/', _DIR_LOGED_IN. $clean_link->getUrl());redirige_par_entete(_DIR_LOGIN . "spip_login.php3?url=".urlencode($url));exit;}//// Chercher le login dans la table auteurs//$auth_login = addslashes($auth_login);$query = "SELECT * FROM spip_auteurs WHERE login='$auth_login' AND statut!='5poubelle' AND statut!='6forum'";$result = @spip_query($query);if ($row = spip_fetch_array($result)) {$connect_id_auteur = $row['id_auteur'];$connect_nom = $row['nom'];$connect_bio = $row['bio'];$connect_email = $row['email'];$connect_nom_site = $row['nom_site'];$connect_url_site = $row['url_site'];$connect_login = $row['login'];$connect_pass = $row['pass'];$connect_statut = $row['statut'];$connect_activer_messagerie = "oui"; //$row["messagerie"];$connect_activer_imessage = "oui "; //$row["imessage"];// Special : si dans la fiche auteur on modifie les valeurs// de messagerie, utiliser ces valeurs plutot que celle de la base.// D'ou leger bug si on modifie la fiche de quelqu'un d'autre.// regler les preferences de l'auteur$prefs = unserialize($row['prefs']);// vieux ! on pourra supprimer post 1.6 finale...if (! isset($prefs['display'])) { // recuperer les cookies ou creer defautif (!$GLOBALS['set_disp'] = $GLOBALS['_COOKIE']['spip_display'])$GLOBALS['set_disp'] = 2;if (!$GLOBALS['set_couleur'] = $GLOBALS['_COOKIE']['spip_couleur'])$GLOBALS['set_couleur'] = 6;if (!$GLOBALS['set_options'] = $GLOBALS['_COOKIE']['spip_options'])$GLOBALS['set_options'] = 'basiques';}// Indiquer connexionif ($connect_activer_messagerie != "non") {@spip_query("UPDATE spip_auteurs SET en_ligne=NOW() WHERE id_auteur='$connect_id_auteur'");}// Si administrateur, recuperer les rubriques gerees par l'adminif ($connect_statut == '0minirezo') {$query_admin = "SELECT id_rubrique FROM spip_auteurs_rubriques WHERE id_auteur=$connect_id_auteur AND id_rubrique!='0'";$result_admin = spip_query($query_admin);$connect_toutes_rubriques = (@spip_num_rows($result_admin) == 0);if ($connect_toutes_rubriques) {$connect_id_rubrique = array();}else {for (;;) {$r = '';while ($row_admin = spip_fetch_array($result_admin)) {$id_rubrique = $row_admin['id_rubrique'];$r[] = $id_rubrique;$connect_id_rubrique[$id_rubrique] = $id_rubrique;}if (!$r) break;$r = join(',', $r);$query_admin = "SELECT id_rubrique FROM spip_rubriques WHERE id_parent IN ($r) AND id_rubrique NOT IN ($r)";$result_admin = spip_query($query_admin);}}}// Si pas admin, acces egal a toutes rubriqueselse {$connect_toutes_rubriques = false;$connect_id_rubrique = array();}}else {// ici on est dans un cas limite : l'auteur a ete identifie OK// mais il n'existe pas dans la table auteur. Cause possible,// notamment, une restauration de base de donnees dans laquelle// il n'existe pas.include_ecrire('inc_presentation.php3');include_ecrire('inc_texte.php3');install_debut_html(_T('avis_erreur_connexion'));echo "<br><br><p>"._T('texte_inc_auth_1', array('auth_login' => $auth_login))." <a href='" ._DIR_LOGIN . "spip_cookie.php3?logout=$auth_login'>"._T('texte_inc_auth_2')."</A>"._T('texte_inc_auth_3');install_fin_html();exit;}if (!$auth_pass_ok) {redirige_par_entete(_DIR_LOGIN . "spip_login.php3?var_erreur=pass");}// Si c'est un nouvel inscrit, le passer de 'nouveau' a '1comite'// (code presque mort, utilise peut-etre encore sous .htpasswd ?)if ($connect_statut == 'nouveau') {$connect_statut =(lire_meta('accepter_inscriptions') == 'oui') ? '1comite' : '6forum';spip_query("UPDATE spip_auteurs SET statut='$connect_statut'WHERE id_auteur=$connect_id_auteur");}return true;}if (!auth()) exit;?>