Example #1
0
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;
}
Example #2
0
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);
    }
}
Example #3
0
/**
 * 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'");
}
Example #4
0
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'");
}