Skip to content
Extraits de code Groupes Projets
Valider d6051063 rédigé par esj's avatar esj
Parcourir les fichiers

Admin_repair réparait TOUTES les tables de la base, sans tenir compte du...

Admin_repair réparait TOUTES les tables de la base, sans tenir compte du préfixe du site demandeur. Le temps devenant important, on subissait un time_out et la meta admin bloquait au coup d'après. On en profite pour gérer plus finement cette méta, afin de récupérer la main lorsque le temps d'admin est visiblement trop long.
parent b4433605
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -14,14 +14,16 @@ if (!defined("_ECRIRE_INC_VERSION")) return; ...@@ -14,14 +14,16 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
// http://doc.spip.org/@base_admin_repair_dist // http://doc.spip.org/@base_admin_repair_dist
function base_admin_repair_dist() { function base_admin_repair_dist() {
$res1= spip_query("SHOW TABLES");
$connexion = $GLOBALS['connexions'][0];
$prefixe = $connexion['prefixe'];
$res1= spip_query("SHOW TABLES LIKE " . _q("$prefixe%"));
$res = ""; $res = "";
if ($res1) { while ($r = sql_fetch($res1)) { if ($res1) { while ($r = sql_fetch($res1)) {
$tab = array_shift($r); $tab = array_shift($r);
$res .= "<p><b>$tab</b> "; $res .= "<p><b>$tab</b> ";
spip_log("Repare $tab");
$result_repair = spip_query("REPAIR TABLE ".$tab); $result_repair = spip_query("REPAIR TABLE ".$tab);
if (!$result_repair) return false; if (!$result_repair) return false;
...@@ -44,14 +46,14 @@ function base_admin_repair_dist() { ...@@ -44,14 +46,14 @@ function base_admin_repair_dist() {
$res .= " "._T('texte_table_ok')."<br />\n"; $res .= " "._T('texte_table_ok')."<br />\n";
} }
} }
include_spip('inc/rubriques');
calculer_rubriques();
if (!$res) { if (!$res) {
$res = "<br /><br /><span style='color: red; font-weight: bold;'><tt>"._T('avis_erreur_mysql').' '.sql_errno().': '.sql_error() ."</tt></span><br /><br /><br />\n"; $res = "<br /><br /><span style='color: red; font-weight: bold;'><tt>"._T('avis_erreur_mysql').' '.sql_errno().': '.sql_error() ."</tt></span><br /><br /><br />\n";
} else {
include_spip('inc/rubriques');
calculer_rubriques();
} }
include_spip('inc/minipres'); include_spip('inc/minipres');
echo minipres(_T('texte_tentative_recuperation'), $res); echo minipres(_T('texte_tentative_recuperation'),
$res . generer_form_ecrire('accueil', '','',_T('public:accueil_site')));
} }
?> ?>
...@@ -29,7 +29,8 @@ function inc_admin_dist($script, $titre, $comment='', $retour='') ...@@ -29,7 +29,8 @@ function inc_admin_dist($script, $titre, $comment='', $retour='')
spip_log("meta: $script " . join(',', $_POST)); spip_log("meta: $script " . join(',', $_POST));
ecrire_meta($script, serialize($_POST)); ecrire_meta($script, serialize($_POST));
ecrire_metas(); ecrire_metas();
} else admin_verifie_session($script); } elseif ($script !== 'admin_repair')
admin_verifie_session($script);
$base = charger_fonction($script, 'base'); $base = charger_fonction($script, 'base');
$base($titre,$reprise); $base($titre,$reprise);
...@@ -40,27 +41,40 @@ function inc_admin_dist($script, $titre, $comment='', $retour='') ...@@ -40,27 +41,40 @@ function inc_admin_dist($script, $titre, $comment='', $retour='')
// Gestion dans la meta "admin" du script d'administation demande, // Gestion dans la meta "admin" du script d'administation demande,
// pour eviter des executions en parallele, notamment apres Time-Out. // pour eviter des executions en parallele, notamment apres Time-Out.
// Cette meta contient le nom du script et, a un codage pres, du demandeur. // Cette meta contient le nom du script et, a un hachage pres, du demandeur.
// Le code de ecrire/index.php devie toute demande d'execution d'un script // Le code de ecrire/index.php devie toute demande d'execution d'un script
// vers le script d'administration indique par cette meta si elle est là. // vers le script d'administration indique par cette meta si elle est là.
// Au niveau de la fonction inc_admin, on controle la meta 'admin'. // Au niveau de la fonction inc_admin, on controle la meta 'admin'.
// Si la meta n'est pas la, c'est le debut on la cree // Si la meta n'est pas la,
// Sinon, on verifie que le connecte est bien celui ayant entame // c'est le debut on la cree.
// l'operation d'administration, // Sinon, si le hachage actuel est le meme que celui en base,
// Si le connecte n'est pas le bon, on refuse la connexion. // c'est une reprise, on continue
// Sinon, si le hachage differe a cause du connecte,
// c'est une arrivee inoppotune, on refuse sa connexion.
// Enfin, si hachage differe pour une autre raison
// c'est que l'operation se passe mal, on la stoppe
// http://doc.spip.org/@admin_verifie_session // http://doc.spip.org/@admin_verifie_session
function admin_verifie_session($script) { function admin_verifie_session($script) {
include_spip('base/abstract_sql'); include_spip('base/abstract_sql');
$signal = $script . ' ' . fichier_admin($action); $pref = sprintf("_%d_",$GLOBALS['auteur_session']['id_auteur']) .
$signal = fichier_admin($script, "$script$pref");
$row = sql_fetsel('valeur', 'spip_meta', "nom='admin'"); $row = sql_fetsel('valeur', 'spip_meta', "nom='admin'");
if (!$row) { if (!$row) {
ecrire_meta('admin', $signal,'non'); ecrire_meta('admin', $signal,'non');
ecrire_metas(); ecrire_metas();
} elseif ($row['valeur'] != $signal) } else {
die(_T('info_travaux_texte')); if (($s = $row['valeur']) != $signal) {
else spip_log("reprise de $script"); if (intval(susbtr($s, strpos($s,'_')+1))<>
$GLOBALS['auteur_session']['id_auteur']) {
include_spip('inc/minipres');
echo minipres(_T('info_travaux_texte'));
exit;
}
}
}
spip_log("admin $pref" . ($row ? " (reprise)" : ''));
} }
// http://doc.spip.org/@dir_admin // http://doc.spip.org/@dir_admin
...@@ -74,9 +88,10 @@ function dir_admin() ...@@ -74,9 +88,10 @@ function dir_admin()
} }
// http://doc.spip.org/@fichier_admin // http://doc.spip.org/@fichier_admin
function fichier_admin($action) { function fichier_admin($action, $pref='admin_') {
return "admin_".substr(md5($action.(time() & ~2047).$GLOBALS['auteur_session']['login']), 0, 10); return $pref .
substr(md5($action.(time() & ~2047).$GLOBALS['auteur_session']['login']), 0, 10);
} }
// demande la creation d'un repertoire et sort // demande la creation d'un repertoire et sort
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter