Skip to content
Extraits de code Groupes Projets
Valider 4d2edaf6 rédigé par cerdic's avatar cerdic
Parcourir les fichiers

sauvegarde sans authentification FTP

nommage daté et incremental des noms de sauvegarde dump_20061008_000.xml.gz pour echapper a un ecrasement malveillant
liste radio des dumps disponibles pour la restauration
parent 2dd14be9
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -42,8 +42,9 @@ function exec_admin_tech_dist() ...@@ -42,8 +42,9 @@ function exec_admin_tech_dist()
debut_gauche(); debut_gauche();
$dir_dump = _DIR_TRANSFERT . $connect_login . '/'; $dir_dump = _DIR_TRANSFERT . $connect_login . '/';
} }
$file = joli_repertoire($dir_dump . _SPIP_DUMP); include_spip('exec/export_all');
$zfile = joli_repertoire($dir_dump . _SPIP_DUMP . '.gz'); $file = joli_repertoire($dir_dump . export_nom_fichier_dump($dir_dump,false));
$zfile = joli_repertoire($dir_dump . export_nom_fichier_dump($dir_dump,true));
$dir_dump = joli_repertoire($dir_dump); $dir_dump = joli_repertoire($dir_dump);
debut_droite(); debut_droite();
...@@ -96,11 +97,20 @@ echo "</TABLE>"; ...@@ -96,11 +97,20 @@ echo "</TABLE>";
// //
if ($connect_toutes_rubriques) { if ($connect_toutes_rubriques) {
$liste_dump = preg_files(_DIR_DUMP,str_replace("@stamp@","(_[0-9]{6,8}_[0-9]{1,3})?",_SPIP_DUMP)."(.gz)?",50,false);
$selected = end($liste_dump);
$liste_choix = "<p><ul>";
foreach($liste_dump as $key=>$fichier){
$affiche_fichier = substr($fichier,strlen(_DIR_DUMP));
$liste_choix.="<li><input type='radio' name='archive' value='$affiche_fichier' id='dump_$key' ".
(($fichier==$selected)?"checked='checked' ":"")."/><label for='dump_$key'>$affiche_fichier</label></li>\n";
}
if ($flag_gz) { if ($flag_gz) {
$fichier_defaut = _SPIP_DUMP . '.gz'; $fichier_defaut = str_replace("@stamp@","",_SPIP_DUMP) . '.gz';
$texte_compresse = _T('texte_compresse_ou_non')."&nbsp;"; $texte_compresse = _T('texte_compresse_ou_non')."&nbsp;";
} else { } else {
$fichier_defaut = _SPIP_DUMP; $fichier_defaut = str_replace("@stamp@","",_SPIP_DUMP);
$texte_compresse = _T('texte_non_compresse')."&nbsp;"; $texte_compresse = _T('texte_non_compresse')."&nbsp;";
} }
...@@ -114,7 +124,9 @@ echo "</TABLE>"; ...@@ -114,7 +124,9 @@ echo "</TABLE>";
_T('texte_restaurer_sauvegarde', array('dossier' => '<i>'.$dir_dump.'</i>')), _T('texte_restaurer_sauvegarde', array('dossier' => '<i>'.$dir_dump.'</i>')),
"\n<p>", "\n<p>",
_T('entree_nom_fichier', array('texte_compresse' => $texte_compresse)), _T('entree_nom_fichier', array('texte_compresse' => $texte_compresse)),
"\n<p><FONT SIZE=3><ul><INPUT TYPE='text' NAME='archive' VALUE='$fichier_defaut' SIZE='30'></ul></FONT>", $liste_choix,
"<li><input type='radio' name='archive' value='' />",
"\n<FONT SIZE=3><INPUT TYPE='text' NAME='archive_perso' VALUE='$fichier_defaut' SIZE='30'></FONT></li></ul>",
"\n<p><DIV align='right'><INPUT CLASS='fondo' TYPE='submit' VALUE='"._T('bouton_restaurer_base')."'></DIV></FORM>", "\n<p><DIV align='right'><INPUT CLASS='fondo' TYPE='submit' VALUE='"._T('bouton_restaurer_base')."'></DIV></FORM>",
"\n</td></tr>", "\n</td></tr>",
"</TABLE>"; "</TABLE>";
......
...@@ -15,8 +15,6 @@ if (!defined("_ECRIRE_INC_VERSION")) return; ...@@ -15,8 +15,6 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
$GLOBALS['version_archive'] = '1.3'; $GLOBALS['version_archive'] = '1.3';
#include_spip('exec/export'); // celui dans le meme repertoire, pas celui de ecrire
include_spip('inc/admin');
include_spip('base/serial'); include_spip('base/serial');
include_spip('base/auxiliaires'); include_spip('base/auxiliaires');
include_spip('inc/indexation'); // pour la fonction primary_index_table include_spip('inc/indexation'); // pour la fonction primary_index_table
...@@ -58,6 +56,16 @@ if (!isset($EXPORT_tables_noexport)){ ...@@ -58,6 +56,16 @@ if (!isset($EXPORT_tables_noexport)){
} }
$GLOBALS['flag_ob_flush'] = function_exists('ob_flush'); $GLOBALS['flag_ob_flush'] = function_exists('ob_flush');
function export_nom_fichier_dump($dir,$gz=true){
$archive = _SPIP_DUMP;
if ($gz) $archive .= '.gz';
$cpt=0;
$stamp = date('Ymd');
while ((file_exists($dir.($nom = str_replace('@stamp@',"_{$stamp}_".substr("00$cpt",-3),$archive))))&&($cpt<999))
$cpt++;
return $nom;
}
// http://doc.spip.org/@exec_export_all_dist // http://doc.spip.org/@exec_export_all_dist
function exec_export_all_dist() function exec_export_all_dist()
{ {
...@@ -69,10 +77,9 @@ function exec_export_all_dist() ...@@ -69,10 +77,9 @@ function exec_export_all_dist()
$dir = _DIR_TRANSFERT . $connect_login . '/'; $dir = _DIR_TRANSFERT . $connect_login . '/';
} }
if (!$archive) { if (!$archive)
if ($gz) $archive = _SPIP_DUMP . '.gz'; $archive = export_nom_fichier_dump($dir,$gz);
else $archive = _SPIP_DUMP;
}
// utiliser une version fraiche des metas (ie pas le cache) // utiliser une version fraiche des metas (ie pas le cache)
include_spip('inc/meta'); include_spip('inc/meta');
...@@ -89,13 +96,6 @@ function exec_export_all_dist() ...@@ -89,13 +96,6 @@ function exec_export_all_dist()
else else
$start = ($status_dump[2]==0)&&($status_dump[3]==0); $start = ($status_dump[2]==0)&&($status_dump[3]==0);
} }
if ($start){
// phase admin en debut de dump
// apres, on continue sans verif :
// sur la duree du dump cela genere de demandes recurrentes d'authent
debut_admin(generer_url_post_ecrire("export_all","archive=$archive&gz=$gz"), $action);
fin_admin($action);
}
install_debut_html(_T('info_sauvegarde')); install_debut_html(_T('info_sauvegarde'));
......
...@@ -80,12 +80,12 @@ function import_charge_version($version_archive) ...@@ -80,12 +80,12 @@ function import_charge_version($version_archive)
// http://doc.spip.org/@exec_import_all_dist // http://doc.spip.org/@exec_import_all_dist
function exec_import_all_dist() function exec_import_all_dist()
{ {
global $archive;
// si l'appel est explicite, // si l'appel est explicite,
// passer par l'authentification ftp et attendre d'etre rappele // passer par l'authentification ftp et attendre d'etre rappele
if (!$GLOBALS['meta']["debut_restauration"]) { if (!$GLOBALS['meta']["debut_restauration"]) {
// cas de l'appel apres demande de confirmation // cas de l'appel apres demande de confirmation
$archive=_request('archive');
if (!strlen($archive)) $archive=_request('archive_perso');
if ($archive) { if ($archive) {
$action = _T('info_restauration_sauvegarde', array('archive' => $archive)); $action = _T('info_restauration_sauvegarde', array('archive' => $archive));
$commentaire = verifier_version_sauvegarde ($archive); $commentaire = verifier_version_sauvegarde ($archive);
......
...@@ -969,7 +969,7 @@ function spip_initialisation() { ...@@ -969,7 +969,7 @@ function spip_initialisation() {
// qq chaines standard // qq chaines standard
define('_ACCESS_FILE_NAME', '.htaccess'); define('_ACCESS_FILE_NAME', '.htaccess');
define('_AUTH_USER_FILE', '.htpasswd'); define('_AUTH_USER_FILE', '.htpasswd');
define('_SPIP_DUMP', 'dump.xml'); define('_SPIP_DUMP', 'dump@stamp@.xml');
define('_DOCTYPE_ECRIRE', "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>\n"); define('_DOCTYPE_ECRIRE', "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>\n");
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter