Exemple #1
0
function auth_spip_dist ($login, $pass, $serveur='') {

	// retrouver le login
	$login = auth_spip_retrouver_login($login);
	// login inconnu, n'allons pas plus loin
	if (!$login) return array();

	$md5pass = $md5next = "";
	$shapass = $shanext = "";

	if (preg_match(",^\{([0-9a-f]{64});([0-9a-f]{64})\}$,i",$pass,$regs)){
		$shapass = $regs[1];
		$shanext = $regs[2];
		$pass="";
	}
	// compat avec une base mixte md5/sha256 : le js a envoye les 2 hash
	elseif (preg_match(",^\{([0-9a-f]{64});([0-9a-f]{64});([0-9a-f]{32});([0-9a-f]{32})\}$,i",$pass,$regs)){
		$shapass = $regs[1];
		$shanext = $regs[2];
		$md5pass = $regs[3];
		$md5next = $regs[4];
		$pass="";
	}

	// si envoi non crypte, crypter maintenant
	elseif ($pass) {
		$row = sql_fetsel("alea_actuel, alea_futur", "spip_auteurs", "login="******"*", "spip_auteurs", "login="******" AND pass="******" AND statut<>'5poubelle'",'','','','',$serveur);

	// compat avec les anciennes bases en md5
	if (!$row AND $md5pass)
		$row = sql_fetsel("*", "spip_auteurs", "login="******" AND pass="******" AND statut<>'5poubelle'",'','','','',$serveur);

	// login/mot de passe incorrect
	if (!$row) return array();

	// fait tourner le codage du pass dans la base
	if ($shanext) {

		include_spip('inc/acces'); // pour creer_uniqid
		@sql_update('spip_auteurs', array('alea_actuel' => 'alea_futur', 'pass' => sql_quote($shanext), 'alea_futur' => sql_quote(creer_uniqid())), "id_auteur=" . $row['id_auteur'].' AND pass IN ('.sql_quote($shapass).', '.sql_quote($md5pass).')','',$serveur);
		// En profiter pour verifier la securite de tmp/
		// Si elle ne fonctionne pas a l'installation, prevenir
		if (!verifier_htaccess(_DIR_TMP) AND defined('_ECRIRE_INSTALL'))
			return false;
	}
	return $row;
}
Exemple #2
0
/**
 * Authentifie et si ok retourne le tableau de la ligne SQL de l'utilisateur
 * Si risque de secu repere a l'installation retourne False
 *
 * @param string $login
 * @param string $pass
 * @param string $serveur
 * @param bool $phpauth
 * @return array|bool
 */
function auth_spip_dist($login, $pass, $serveur = '', $phpauth = false)
{
    // retrouver le login
    $login = auth_spip_retrouver_login($login);
    // login inconnu, n'allons pas plus loin
    if (!$login) {
        return array();
    }
    $md5pass = "";
    $shapass = $shanext = "";
    if (preg_match(",^\\{([0-9a-f]{64});([0-9a-f]{64})\\}\$,i", $pass, $regs)) {
        $shapass = $regs[1];
        $shanext = $regs[2];
    } elseif (preg_match(",^\\{([0-9a-f]{64});([0-9a-f]{64});([0-9a-f]{32});([0-9a-f]{32})\\}\$,i", $pass, $regs)) {
        $shapass = $regs[1];
        $shanext = $regs[2];
        $md5pass = $regs[3];
        //$md5next = $regs[4];
    } elseif ($pass) {
        $row = sql_fetsel("alea_actuel, alea_futur", "spip_auteurs", "login="******"*", "spip_auteurs", "login="******" AND pass="******" AND statut<>'5poubelle'", '', '', '', '', $serveur);
    // compat avec les anciennes bases en md5
    if (!$row and $md5pass) {
        $row = sql_fetsel("*", "spip_auteurs", "login="******" AND pass="******" AND statut<>'5poubelle'", '', '', '', '', $serveur);
    }
    // login/mot de passe incorrect
    if (!$row) {
        return array();
    }
    // fait tourner le codage du pass dans la base
    // sauf si phpauth : cela reviendrait a changer l'alea a chaque hit, et aucune action verifiable par securiser_action()
    if ($shanext and !$phpauth) {
        include_spip('inc/acces');
        // pour creer_uniqid
        @sql_update('spip_auteurs', array('alea_actuel' => 'alea_futur', 'pass' => sql_quote($shanext, $serveur, 'text'), 'alea_futur' => sql_quote(creer_uniqid(), $serveur, 'text')), "id_auteur=" . $row['id_auteur'] . ' AND pass IN (' . sql_quote($shapass, $serveur, 'text') . ', ' . sql_quote($md5pass, $serveur, 'text') . ')', '', $serveur);
        // En profiter pour verifier la securite de tmp/
        // Si elle ne fonctionne pas a l'installation, prevenir
        if (!verifier_htaccess(_DIR_TMP) and defined('_ECRIRE_INSTALL')) {
            return false;
        }
    }
    return $row;
}