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; }
/** * 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; }