function verifier_visiteur() { // Rq: pour que cette fonction marche depuis mes_options // il faut forcer l'init si ce n'est fait // mais on risque de perturber des plugins en initialisant trop tot // certaines constantes @spip_initialisation_core(_DIR_RACINE . _NOM_PERMANENTS_INACCESSIBLES, _DIR_RACINE . _NOM_PERMANENTS_ACCESSIBLES, _DIR_RACINE . _NOM_TEMPORAIRES_INACCESSIBLES, _DIR_RACINE . _NOM_TEMPORAIRES_ACCESSIBLES); // Demarrer une session NON AUTHENTIFIEE si on donne son nom // dans un formulaire sans login (ex: #FORMULAIRE_FORUM) // Attention on separe bien session_nom et nom, pour eviter // les melanges entre donnees SQL et variables plus aleatoires $variables_session = array('session_nom', 'session_email'); foreach ($variables_session as $var) { if (_request($var) !== null) { $init = true; break; } } if (isset($init)) { #@spip_initialisation_suite(); $session = charger_fonction('session', 'inc'); $session(); include_spip('inc/texte'); foreach ($variables_session as $var) { if (($a = _request($var)) !== null) { $GLOBALS['visiteur_session'][$var] = safehtml($a); } } if (!isset($GLOBALS['visiteur_session']['id_auteur'])) { $GLOBALS['visiteur_session']['id_auteur'] = 0; } $session($GLOBALS['visiteur_session']); return 0; } $h = (isset($_SERVER['PHP_AUTH_USER']) and !$GLOBALS['ignore_auth_http']); if ($h or isset($_COOKIE['spip_session']) or isset($_COOKIE[$GLOBALS['cookie_prefix'] . '_session'])) { $session = charger_fonction('session', 'inc'); if ($session()) { return $GLOBALS['visiteur_session']['statut']; } if ($h and isset($_SERVER['PHP_AUTH_PW'])) { include_spip('inc/auth'); $h = lire_php_auth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']); } if ($h) { $GLOBALS['visiteur_session'] = $h; return $GLOBALS['visiteur_session']['statut']; } } // au moins son navigateur nous dit la langue preferee de cet inconnu include_spip('inc/lang'); utiliser_langue_visiteur(); return false; }
function action_cookie_dist($set_cookie_admin = null, $change_session = null) { $redirect_echec = $redirect = null; $test_echec_cookie = null; $url = ""; if (is_null($set_cookie_admin)) { $set_cookie_admin = _request('cookie_admin'); $change_session = _request('change_session'); $test_echec_cookie = _request('test_echec_cookie'); // La cible de notre operation de connexion $url = securiser_redirect_action(_request('url')); $redirect = $url ? $url : generer_url_ecrire('accueil'); $redirect_echec = _request('url_echec'); if (!isset($redirect_echec)) { if (strpos($redirect, _DIR_RESTREINT_ABS) !== false) { $redirect_echec = generer_url_public('login', '', true); } else { $redirect_echec = $redirect; } } } // rejoue le cookie pour renouveler spip_session if ($change_session == 'oui') { $session = charger_fonction('session', 'inc'); $session(true); spip_log("statut 204 pour " . $_SERVER['REQUEST_URI']); http_status(204); // No Content return; } // tentative de connexion en auth_http if (_request('essai_auth_http') and !$GLOBALS['ignore_auth_http']) { include_spip('inc/auth'); if (@$_SERVER['PHP_AUTH_USER'] and @$_SERVER['PHP_AUTH_PW'] and $auteur = lire_php_auth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'])) { auth_loger($auteur); redirige_par_entete(parametre_url($redirect, 't', time(), '&')); } else { ask_php_auth(_T('info_connexion_refusee'), _T('login_login_pass_incorrect'), _T('login_retour_site'), "url=" . rawurlencode($redirect), _T('login_nouvelle_tentative'), strpos($url, _DIR_RESTREINT_ABS) !== false); } } else { // en cas de login sur bonjour=oui, on tente de poser un cookie // puis de passer au login qui diagnostiquera l'echec de cookie // le cas echeant. if ($test_echec_cookie == 'oui') { spip_setcookie('spip_session', 'test_echec_cookie'); if ($redirect) { $redirect = parametre_url(parametre_url($redirect_echec, 'var_echec_cookie', 'oui', '&'), 'url', rawurlencode($redirect), '&'); } } else { $cook = isset($_COOKIE['spip_admin']) ? $_COOKIE['spip_admin'] : ''; // Suppression cookie d'admin ? if ($set_cookie_admin == "non") { if ($cook) { spip_setcookie('spip_admin', $cook, time() - 3600 * 24); } } else { if ($set_cookie_admin) { spip_setcookie('spip_admin', $set_cookie_admin, time() + 14 * 24 * 3600); } } } } // Redirection finale if ($redirect) { redirige_par_entete($redirect, true); } }
/** * Retourne la description d'un authentifie par cookie ou http_auth * Et affecte la globale $connect_login * * @return array|bool|string */ function auth_mode() { global $auth_can_disconnect, $ignore_auth_http, $ignore_remote_user; global $connect_login; // // Initialiser variables (eviter hacks par URL) // $connect_login = ''; $id_auteur = NULL; $auth_can_disconnect = false; // // Recuperer les donnees d'identification // // Session valide en cours ? if (isset($_COOKIE['spip_session'])) { $session = charger_fonction('session', 'inc'); if ($id_auteur = $session() or $id_auteur === 0) { $auth_can_disconnect = true; $connect_login = $GLOBALS['visiteur_session']['login']; } else { unset($_COOKIE['spip_session']); } } // Essayer auth http si significatif // (ignorer les login d'intranet independants de spip) if (!$ignore_auth_http) { if (isset($_SERVER['PHP_AUTH_USER']) and isset($_SERVER['PHP_AUTH_PW']) and $r = lire_php_auth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) or isset($_SERVER['REMOTE_USER']) and $r = lire_php_auth($_SERVER['PHP_AUTH_USER'] = $_SERVER['REMOTE_USER'], '')) { if (!$id_auteur) { $_SERVER['PHP_AUTH_PW'] = ''; $auth_can_disconnect = true; $GLOBALS['visiteur_session'] = $r; $connect_login = $GLOBALS['visiteur_session']['login']; $id_auteur = $r['id_auteur']; } else { // cas de la session en plus de PHP_AUTH /* if ($id_auteur != $r['id_auteur']){ spip_log("vol de session $id_auteur" . join(', ', $r)); unset($_COOKIE['spip_session']); $id_auteur = ''; } */ } } else { if (isset($_SERVER['REMOTE_USER'])) { $connect_login = $_SERVER['REMOTE_USER']; } } } $where = is_numeric($id_auteur) ? "id_auteur={$id_auteur}" : (!strlen($connect_login) ? '' : "login="******"*, en_ligne AS quand", "spip_auteurs", "{$where} AND statut!='5poubelle'"); }
function auth_mode() { global $auth_can_disconnect, $ignore_auth_http, $ignore_remote_user; global $connect_login ; // // Initialiser variables (eviter hacks par URL) // $connect_login = ''; $id_auteur = NULL; $auth_can_disconnect = false; // // Recuperer les donnees d'identification // // Session valide en cours ? if (isset($_COOKIE['spip_session'])) { $session = charger_fonction('session', 'inc'); if ($id_auteur = $session() OR $id_auteur===0 // reprise sur restauration ) { $auth_can_disconnect = true; $connect_login = $GLOBALS['visiteur_session']['login']; } else unset($_COOKIE['spip_session']); } // Essayer auth http si significatif // (ignorer les login d'intranet independants de spip) if (!$ignore_auth_http) { if ( (isset($_SERVER['PHP_AUTH_USER']) AND isset($_SERVER['PHP_AUTH_PW']) AND $r = lire_php_auth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'])) OR // Si auth http differtente de basic, PHP_AUTH_PW // est indisponible mais tentons quand meme pour // autocreation via LDAP (isset($_SERVER['REMOTE_USER']) AND $r = lire_php_auth($_SERVER['PHP_AUTH_USER'] = $_SERVER['REMOTE_USER'], '')) ) { if (!$id_auteur) { $_SERVER['PHP_AUTH_PW'] = ''; $auth_can_disconnect = true; $GLOBALS['visiteur_session'] = $r; $connect_login = $GLOBALS['visiteur_session']['login']; } else { // cas de la session en plus de PHP_AUTH /* if ($id_auteur != $r['id_auteur']){ spip_log("vol de session $id_auteur" . join(', ', $r)); unset($_COOKIE['spip_session']); $id_auteur = ''; } */ } } // Authentification .htaccess old style, car .htaccess semble // souvent definir *aussi* PHP_AUTH_USER et PHP_AUTH_PW else if (isset($_SERVER['REMOTE_USER'])) $connect_login = $_SERVER['REMOTE_USER']; } $where = (is_numeric($id_auteur) /*AND $id_auteur>0*/ // reprise lors des restaurations ) ? "id_auteur=$id_auteur" : (!strlen($connect_login) ? '' : "login="******"*, en_ligne AS quand", "spip_auteurs", "$where AND statut!='5poubelle'"); }