diff --git a/ecrire/inc/actions.php b/ecrire/inc/actions.php index 2d99c504845262589a24154fdbfadbe1d8a6a130..7f5dd790c0b154e64a0b4c95c9d4f69a5a64c1b7 100644 --- a/ecrire/inc/actions.php +++ b/ecrire/inc/actions.php @@ -23,27 +23,42 @@ function inc_controler_action_auteur_dist() $arg = _request('arg'); $hash = _request('hash'); $action = _request('action'); - $id_auteur = $GLOBALS['auteur_session']['id_auteur']; - if (!verifier_action_auteur("$action-$arg", $hash, $id_auteur)) { + if (!verifier_action_auteur("$action-$arg", $hash)) { include_spip('inc/minipres'); minipres(_T('info_acces_interdit')); } } // http://doc.spip.org/@caracteriser_auteur -function caracteriser_auteur($id_auteur=0) { +function caracteriser_auteur() { global $auteur_session; - if (!$id_auteur = intval($id_auteur)) - $id_auteur = $auteur_session['id_auteur']; + static $caracterisation = array(); + if ($caracterisation) return $caracterisation; + + $id_auteur = $auteur_session['id_auteur']; + if (!$id_auteur) { + // si l'auteur courant n'est pas connu alors qu'il peut demander une action + // c'est une connexion par php_auth, on se rabat sur le cookie. + // S'il n'avait pas le droit de realiser cette action, le hash sera faux. + if (isset($_COOKIE['spip_session']) + AND (preg_match('/^(\d+)/',$_COOKIE['spip_session'],$r))) { + return array($r[1], ''); + // Necessaire aux forums anonymes. + // Pour le reste, ca echouera. + } else return array('',''); + } // Eviter l'acces SQL si le pass est connu de PHP + if ($auteur_session['pass']) - return array($id_auteur, $auteur_session['pass']); + return $caracterisation = array($id_auteur, $auteur_session['pass']); else { $t = spip_query("SELECT id_auteur, pass FROM spip_auteurs WHERE id_auteur=$id_auteur"); - if (!$t = spip_fetch_array($t)) die(_L("Faut pas se gener")); - return array($t['id_auteur'], $t['pass']); + if ($t = spip_fetch_array($t)) + return $caracterisation = array($t['id_auteur'], $t['pass']); + spip_log("auteur $id_auteur sans caracterisation"); + die(_T('info_acces_interdit')); } } @@ -53,14 +68,14 @@ function _action_auteur($action, $id_auteur, $pass, $nom_alea) { } // http://doc.spip.org/@calculer_action_auteur -function calculer_action_auteur($action, $id_auteur = 0) { - list($id_auteur, $pass) = caracteriser_auteur($id_auteur); +function calculer_action_auteur($action) { + list($id_auteur, $pass) = caracteriser_auteur(); return _action_auteur($action, $id_auteur, $pass, 'alea_ephemere'); } // http://doc.spip.org/@verifier_action_auteur -function verifier_action_auteur($action, $valeur, $id_auteur = 0) { - list($id_auteur, $pass) = caracteriser_auteur($id_auteur); +function verifier_action_auteur($action, $valeur) { + list($id_auteur, $pass) = caracteriser_auteur(); if ($valeur == _action_auteur($action, $id_auteur, $pass, 'alea_ephemere')) return true; @@ -226,7 +241,8 @@ function verifier_php_auth() { } } } - } + } + return false; } // diff --git a/ecrire/inc/auth.php b/ecrire/inc/auth.php index 540f14d6346546e6baaf557d4df7d2def00977f2..571df92098c8bd4e7650180d4368c818d6a92bd0 100644 --- a/ecrire/inc/auth.php +++ b/ecrire/inc/auth.php @@ -43,7 +43,9 @@ function acces_mots() { // http://doc.spip.org/@acces_article function acces_article($id_article) { - global $connect_id_auteur; + global $connect_id_auteur, $connect_toutes_rubriques; + + if ($connect_toutes_rubriques) return true; $row = spip_fetch_array(spip_query("SELECT id_rubrique, statut FROM spip_articles WHERE id_article=$id_article")); @@ -120,10 +122,10 @@ function inc_auth_dist() { $var_f = charger_fonction('session', 'inc'); if ($connect_id_auteur = $var_f()) { $auth_can_disconnect = true; - } + } else unset($_COOKIE['spip_session']); } - // sinon, essayer auth http si significatif + // Essayer auth http si significatif // (ignorer les login d'intranet independants de spip) if (!$ignore_auth_http AND !$connect_id_auteur) { if ($_SERVER['PHP_AUTH_USER'] AND $_SERVER['PHP_AUTH_PW']) {