[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/se3-clonage/sources/www/tftp/ -> action_rest_tftp.php (source)

   1  <?php
   2  /* $Id: action_rest_tftp.php 8426 2015-02-03 08:08:34Z crob $
   3  ===========================================
   4     Projet SE3
   5     Dispositif SE3+TFTP+Sauvegarde/Restauration/Clonage
   6     Stephane Boireau
   7     Distribué selon les termes de la licence GPL
   8  =============================================
   9  */
  10  
  11  // loading libs and init
  12  include  "entete.inc.php";
  13  include  "ldap.inc.php";
  14  include  "ihm.inc.php";
  15  //require_once "../dhcp/dhcpd.inc.php";
  16  include  "printers.inc.php";
  17  
  18  require ("lib_action_tftp.php");
  19  
  20  //aide
  21  $_SESSION["pageaide"]="Le_module_Clonage_des_stations#Programmer_une_restauration";
  22  
  23  // On active les rapports d'erreurs:
  24  //error_reporting(E_ALL);
  25  
  26  // Bibliothèque prototype Ajax pour afficher en décalé l'état des machines:
  27  echo "<script type='text/javascript' src='../includes/prototype.js'></script>\n";
  28  
  29  // CSS pour mes tableaux:
  30  echo "<link type='text/css' rel='stylesheet' href='tftp.css' />\n";
  31  
  32  if ((is_admin("system_is_admin",$login)=="Y")||(ldap_get_right("parc_can_clone",$login)=="Y"))
  33  {
  34      // Choix des parcs:
  35      $parc=isset($_POST['parc']) ? $_POST['parc'] : (isset($_GET['parc']) ? $_GET['parc'] : NULL);
  36      // Choix des machines:
  37      $id_machine=isset($_POST['id_machine']) ? $_POST['id_machine'] : (isset($_GET['id_machine']) ? $_GET['id_machine'] : NULL);
  38  
  39      $parametrage_action=isset($_POST['parametrage_action']) ? $_POST['parametrage_action'] : (isset($_GET['parametrage_action']) ? $_GET['parametrage_action'] : NULL);
  40  
  41      $pref_distrib_svgrest=crob_getParam('pref_distrib_svgrest');
  42      if(($pref_distrib_svgrest=='slitaz')||($pref_distrib_svgrest=='sysresccd')) {$valeur_par_defaut=$pref_distrib_svgrest;}
  43      else {$valeur_par_defaut="slitaz";}
  44      $distrib=isset($_POST['distrib']) ? $_POST['distrib'] : $valeur_par_defaut;
  45  
  46      $sysresccd_kernel=isset($_POST['sysresccd_kernel']) ? $_POST['sysresccd_kernel'] : "rescue32";
  47  
  48      // Création de la table dès que possible:
  49      creation_tftp_tables();
  50  
  51      // Paramètres SliTaz:
  52      $nom_image=isset($_POST['nom_image']) ? $_POST['nom_image'] : (isset($_GET['nom_image']) ? $_GET['nom_image'] : NULL);
  53      $src_part=isset($_POST['src_part']) ? $_POST['src_part'] : (isset($_GET['src_part']) ? $_GET['src_part'] : NULL);
  54      $dest_part=isset($_POST['dest_part']) ? $_POST['dest_part'] : (isset($_GET['dest_part']) ? $_GET['dest_part'] : NULL);
  55      $auto_reboot=isset($_POST['auto_reboot']) ? $_POST['auto_reboot'] : (isset($_GET['auto_reboot']) ? $_GET['auto_reboot'] : NULL);
  56      $delais_reboot=isset($_POST['delais_reboot']) ? $_POST['delais_reboot'] : (isset($_GET['delais_reboot']) ? $_GET['delais_reboot'] : NULL);
  57  
  58      // Paramètres concernant l'action immédiate sur les machines choisies:
  59      $wake=isset($_POST['wake']) ? $_POST['wake'] : (isset($_GET['wake']) ? $_GET['wake'] : "n");
  60      $shutdown_reboot=isset($_POST['shutdown_reboot']) ? $_POST['shutdown_reboot'] : (isset($_GET['shutdown_reboot']) ? $_GET['shutdown_reboot'] : NULL);
  61  
  62      $type_src_part=isset($_POST['type_src_part']) ? $_POST['type_src_part'] : "partition";
  63      $src_srv=isset($_POST['src_srv']) ? $_POST['src_srv'] : "";
  64      $src_partage=isset($_POST['src_partage']) ? $_POST['src_partage'] : "";
  65      $src_sous_dossier=isset($_POST['src_sous_dossier']) ? $_POST['src_sous_dossier'] : "";
  66      $src_compte=isset($_POST['src_compte']) ? $_POST['src_compte'] : "";
  67      $src_mdp=isset($_POST['src_mdp']) ? $_POST['src_mdp'] : "";
  68  
  69      $type_svg=isset($_POST['type_svg']) ? $_POST['type_svg'] : "partimage";
  70  
  71      echo "<h1>".gettext("Action restauration TFTP")."</h1>\n";
  72  
  73      $restriction_parcs="n";
  74      if(is_admin("system_is_admin",$login)!="Y") {
  75          $restriction_parcs="y";
  76          $tab_delegated_parcs=list_delegated_parcs($login);
  77          if(count($tab_delegated_parcs)==0) {
  78              echo "<p>Aucun parc ne vous a été délégué.</p>\n";
  79              include ("pdp.inc.php");
  80              die();
  81          }
  82      }
  83  
  84  
  85      $temoin_fichiers_requis="y";
  86      $chemin_tftpboot="/tftpboot";
  87      $tab_udpcast_file=array("bzImage", "rootfs.gz");
  88      for($loop=0;$loop<count($tab_udpcast_file);$loop++) {
  89          if(!file_exists($chemin_tftpboot."/".$tab_udpcast_file[$loop])) {
  90              echo "<span style='color:red'>".$chemin_tftpboot."/".$tab_udpcast_file[$loop]." est absent.</span><br />\n";
  91              echo "Effectuez le telechargement SliTaz en <a href='config_tftp.php'>Configurer le module TFTP</a><br />\n";
  92              $temoin_fichiers_requis="n";
  93          }
  94      }
  95  
  96      if($temoin_fichiers_requis=="n") {
  97          echo "<p style='color:red'>ABANDON&nbsp;: Un ou des fichiers requis sont manquants.</p>\n";
  98          include ("pdp.inc.php");
  99          die();
 100      }
 101  
 102  
 103      if(!isset($parc)){
 104  
 105          echo "<p>Choisissez un ou des parcs:</p>\n";
 106  
 107          $list_parcs=search_machines("objectclass=groupOfNames","parcs");
 108          if ( count($list_parcs)==0) {
 109              echo "<br><br>";
 110              echo gettext("Il n'existe aucun parc. Vous devez d'abord créer un parc");
 111              include ("pdp.inc.php");
 112              exit;
 113          }
 114          sort($list_parcs);
 115  
 116          echo "<form method=\"post\" action=\"".$_SERVER['PHP_SELF']."\">\n";
 117  
 118          // Affichage des parcs sur 3/4 colonnes
 119          $nb_parcs_par_colonne=round(count($list_parcs)/3);
 120          echo "<table border='0'>\n";
 121          echo "<tr valign='top'>\n";
 122          echo "<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>\n";
 123          echo "<td align='left'>\n";
 124          for ($loop=0; $loop < count($list_parcs); $loop++) {
 125              if(($loop>0)&&(round($loop/$nb_parcs_par_colonne)==$loop/$nb_parcs_par_colonne)){
 126                  echo "</td>\n";
 127                  echo "<td align='left'>\n";
 128              }
 129  
 130              if(($restriction_parcs=="n")||(in_array($list_parcs[$loop]["cn"], $tab_delegated_parcs))) {
 131                  echo "<label for='parc_$loop'><input type='checkbox' id='parc_$loop' name='parc[]' value=\"".$list_parcs[$loop]["cn"]."\"";
 132                  if(count($list_parcs)==1) {echo " checked";}
 133                  echo " />".$list_parcs[$loop]["cn"]."</label>\n";
 134                  echo "<br />\n";
 135              }
 136          }
 137  
 138          echo "</td>\n";
 139          echo "</tr>\n";
 140          echo "</table>\n";
 141  
 142          echo "<p align='center'><input type=\"submit\" name=\"submit\" value=\"Valider\" /></p>\n";
 143  
 144          echo "</form>\n";
 145  
 146  
 147          echo "<script type='text/javascript'>
 148  nb_parcs=0;
 149  id_parc='';
 150  for(i=0;i<$loop;i++) {
 151      if(document.getElementById('parc_'+i)) {
 152          nb_parcs++;
 153          id_parc='parc_'+i;
 154      }
 155  }
 156  if(nb_parcs==1) {
 157      document.getElementById(id_parc).checked=true;
 158  }
 159  </script>\n";
 160  
 161          echo "<p><a href='index.php'>Retour à l'index</a>.</p>\n";
 162      }
 163      else {
 164          if(!isset($_POST['parametrage_action'])){
 165  
 166              echo "<form method=\"post\" action=\"".$_SERVER['PHP_SELF']."\">\n";
 167              echo "<input type=\"hidden\" name=\"parametrage_action\" value=\"1\" />\n";
 168              $max_eff_parc=0;
 169              for($i=0;$i<count($parc);$i++){
 170  
 171                  echo "<h2>Parc $parc[$i]</h2>\n";
 172                  echo "<input type=\"hidden\" name=\"parc[]\" value=\"$parc[$i]\" />\n";
 173  
 174                  $mp=gof_members($parc[$i],"parcs",1);
 175                  $nombre_machine=count($mp);
 176                  sort($mp);
 177  
 178                  //echo "<table border='1'>\n";
 179                  echo "<table class='crob'>\n";
 180                  echo "<tr>\n";
 181  
 182                  echo "<th>Nom</th>\n";
 183                  echo "<th>Etat</th>\n";
 184                  echo "<th>Session</th>\n";
 185                  echo "<th>Config DHCP</th>\n";
 186                                  echo "<th>Dernier Rapport</th>\n";
 187                                  
 188                  //echo "<th>Restauration</th>\n";
 189                  echo "<th>Restauration<br />\n";
 190                  echo "<a href='#' onclick='check_machine($i,\"check\");return false'><img src=\"../elements/images/enabled.gif\" border='0' alt=\"Tout cocher\" title=\"Tout cocher\" /></a>\n";
 191                  echo " / <a href='#' onclick='check_machine($i,\"uncheck\");return false'><img src=\"../elements/images/disabled.gif\" border='0' alt=\"Tout décocher\" title=\"Tout décocher\" /></a>\n";
 192                  echo "</th>\n";
 193                  echo "<th>Actions programmées</th>\n";
 194                  echo "</tr>\n";
 195  
 196                  for ($loop=0; $loop < count($mp); $loop++) {
 197                      $mpenc=urlencode($mp[$loop]);
 198  
 199                      // Test si on a une imprimante ou une machine
 200                      $resultat=search_imprimantes("printer-name=$mpenc","printers");
 201                      $suisje_printer="non";
 202                      for ($loopp=0; $loopp < count($resultat); $loopp++) {
 203                          if ($mpenc==$resultat[$loopp]['printer-name']) {
 204                              $suisje_printer="yes";
 205                              continue;
 206                          }
 207                      }
 208  
 209                      if($suisje_printer=="non") {
 210                          // Réinitialisation:
 211                          $id_machine="";
 212  
 213                          echo "<tr>\n";
 214                          echo "<td width='20%'>".$mp[$loop]."</td>\n";
 215  
 216                          // Etat: allumé ou éteint
 217                          echo "<td width='20%'>";
 218                          $mp_curr=search_machines2("(&(cn=$mpenc)(objectClass=ipHost))","computers");
 219                          if ($mp_curr[0]["ipHostNumber"]) {
 220                              $iphost=$mp_curr[0]["ipHostNumber"];
 221  
 222                              echo "<div id='divip$loop'>Patientez</div>\n";
 223                              echo "<script type='text/javascript'>
 224                                  // <![CDATA[
 225                                  new Ajax.Updater($('divip$loop'),'ajax_lib.php?ip=$iphost&mode=ping_ip',{method: 'get'});
 226                                  //]]>
 227                              </script>\n";
 228                          }
 229                          echo "</td>\n";
 230  
 231  
 232                          // Session: ouverte ou pas... sous quelle identité
 233                          echo "<td width='20%'>\n";
 234                          echo "<div id='divsession$loop'>Patientez</div>\n";
 235                          echo "<script type='text/javascript'>
 236                              // <![CDATA[
 237                              new Ajax.Updater($('divsession$loop'),'ajax_lib.php?nom_machine=".$mp[$loop]."&mode=session',{method: 'get'});
 238                              //]]>
 239                          </script>\n";
 240                          echo "</td>\n";
 241  
 242  
 243                          // Etat config DHCP:
 244                          // Par la suite il ne faudra pas prendre les IP dans l'annuaire,
 245                          // mais dans la config DHCP parce que ce sont ces IP qui seront attribuées lors du boot PXE
 246                          echo "<td width='20%'>\n";
 247                          //$mp_curr=search_machines("(&(cn=$mpenc)(objectClass=ipHost))","computers");
 248                          if ($mp_curr[0]["macAddress"]) {
 249                              $sql="SELECT * FROM se3_dhcp WHERE mac='".$mp_curr[0]["macAddress"]."';";
 250                              //echo "$sql<br />";
 251                              $res=mysql_query($sql);
 252                              if(mysql_num_rows($res)>0) {
 253                                  $lig=mysql_fetch_object($res);
 254                                  $id_machine=$lig->id;
 255  
 256                                  //echo $lig->ip;
 257                                  echo "<img src=\"../elements/images/enabled.gif\" border='0' alt=\"$lig->ip\" title=\"$lig->ip\" />";
 258                              }
 259                              else {
 260                                  echo "<img src=\"../elements/images/disabled.gif\" border='0' alt=\"Pas d'adresse IP attribuée\" title=\"Pas d'adresse IP attribuée\" />";
 261                              }
 262                          }
 263                          else {
 264                              echo "<img src=\"../elements/images/disabled.gif\" border='0' alt=\"Pas d'adresse MAC dans l'annuaire???\" title=\"Pas d'adresse MAC dans l'annuaire???\" />";
 265                          }
 266                          echo "</td>\n";
 267  
 268                                                  //dernier rapport
 269                                                  
 270                                                  $sql="SELECT * FROM se3_tftp_rapports WHERE name='".$mp[$loop]."' ORDER BY date DESC LIMIT 1;";
 271                                                  $res_rapport_tftp=mysql_query($sql);
 272                                                  if(mysql_num_rows($res_rapport_tftp)>0) {
 273                                                      $lig=mysql_fetch_object($res_rapport_tftp);
 274                                                      echo "<td align=\"center\">";
 275                                                      echo "<span style='font-size: x-small;' title='Dernier rapport: $lig->tache ($lig->statut)'><a href=\"../tftp/visu_rapport.php?id_machine=$lig->id\" target='_blank'>".$lig->date."</a></span>\n";
 276                                                      $st="$lig->statut";
 277                                                      if($st=="SUCCES") {
 278                              $cl="green";
 279                              } else {
 280                              $cl="red";
 281                                                          }
 282                                                      echo "<FONT color=$cl size=1>"."$lig->statut"."</font>";
 283                                                      echo "</td>\n";
 284                                                  }
 285                                                  else {
 286                                                      echo "<td align=\"center\" style='color:purple'>".gettext("Aucun rapport")."</td>\n";
 287                                                      }
 288                                                  
 289                                                  
 290                                                  
 291  
 292                          // Sélection des machines à sauvegarder:
 293                          echo "<td width='20%'>\n";
 294                          /*
 295                          foreach($mp_curr[0] as $champ => $valeur) {
 296                              echo "\$mp_curr[0]['$champ']=$valeur<br />";
 297                          }
 298                          */
 299                          if($id_machine!=""){
 300                              echo "<input type='checkbox' name='id_machine[]' id='machine_".$i."_".$loop."' value='$id_machine' />\n";
 301                          }
 302                          else {
 303                              echo "<img src=\"../elements/images/disabled.gif\" border='0' alt=\"Il faut commencer par effectuer la configuration DHCP\" title=\"Il faut commencer par effectuer la configuration DHCP\" />";
 304                          }
 305                          echo "</td>\n";
 306  
 307  
 308                          // Action programmée
 309                          echo "<td>\n";
 310                          if($id_machine!=""){
 311                              $sql="SELECT * FROM se3_tftp_action WHERE id='".$id_machine."';";
 312                              $res=mysql_query($sql);
 313                              if(mysql_num_rows($res)>0) {
 314                                  $lig=mysql_fetch_object($res);
 315                                  echo "<a href='visu_action.php?id_machine=$id_machine' target='_blank'>$lig->type programmé(e)</a>";
 316                              }
 317                              else {
 318                                  echo "<img src=\"../elements/images/disabled.gif\" border='0' alt=\"Pas d'action programmée\" title=\"Pas d'action programmée\" />";
 319                              }
 320                          }
 321                          echo "</td>\n";
 322  
 323                          echo "</tr>\n";
 324                      }
 325                  }
 326                  echo "</table>\n";
 327                  if($max_eff_parc<$loop) {$max_eff_parc=$loop;}
 328              }
 329  
 330              echo "<script type='text/javascript'>
 331  	function check_machine(num_parc,mode) {
 332          for(i=0;i<$max_eff_parc;i++){
 333              if(document.getElementById('machine_'+num_parc+'_'+i)){
 334                  if(mode=='check'){
 335                      document.getElementById('machine_'+num_parc+'_'+i).checked=true;
 336                  }
 337                  else{
 338                      document.getElementById('machine_'+num_parc+'_'+i).checked=false;
 339                  }
 340              }
 341          }
 342      }
 343  </script>\n";
 344  
 345              echo "<p align='center'><input type=\"submit\" name=\"submit\" value=\"Valider\" /></p>\n";
 346              echo "</form>\n";
 347  
 348  
 349          }
 350          else {
 351              $validation_parametres=isset($_POST['validation_parametres']) ? $_POST['validation_parametres'] : (isset($_GET['validation_parametres']) ? $_GET['validation_parametres'] : NULL);
 352              if(!isset($validation_parametres)) {
 353                  echo "<h2>Paramétrage de la restauration</h2>\n";
 354  
 355                  $nombre_machines=count($id_machine);
 356                  if($nombre_machines==0){
 357                      echo "<p>ERREUR: Il faut choisir au moins une machine.</p>\n";
 358  
 359                      echo "<p><a href='#' onclick='history.go(-1);'>Retour au choix des machines à restaurer</a>.</p>\n";
 360  
 361                      echo "<p><a href='".$_SERVER['PHP_SELF']."'>Retour au choix du/des parc(s)</a>.</p>\n";
 362                      include ("pdp.inc.php");
 363                      exit();
 364                  }
 365  
 366                  echo "<form method=\"post\" action=\"".$_SERVER['PHP_SELF']."\" name=\"form1\">\n";
 367                  echo "<input type=\"hidden\" name=\"parametrage_action\" value=\"1\" />\n";
 368                  // Liste des parcs:
 369                  for($i=0;$i<count($parc);$i++){
 370                      echo "<input type=\"hidden\" name=\"parc[]\" value=\"$parc[$i]\" />\n";
 371                  }
 372  
 373                  // Liste des machines sur lesquelles lancer la restauration:
 374                  $chaine="";
 375                  for($i=0;$i<count($id_machine);$i++){
 376                      if($i>0) {$chaine.=", ";}
 377                      $sql="SELECT * FROM se3_dhcp WHERE id='".$id_machine[$i]."';";
 378                      //echo "$sql<br />";
 379                      $res=mysql_query($sql);
 380                      if(mysql_num_rows($res)>0) {
 381                          $lig=mysql_fetch_object($res);
 382                          $chaine.=$lig->name;
 383                          echo "<input type=\"hidden\" name=\"id_machine[]\" value=\"$id_machine[$i]\" />\n";
 384                      }
 385                  }
 386                  if(count($id_machine)>1){$s="s";}else{$s="";}
 387                  echo "<p>Machine$s concernée$s: $chaine</p>\n";
 388  
 389  
 390  
 391                  $aujourdhui = getdate();
 392                  $mois_se3 = sprintf("%02d",$aujourdhui['mon']);
 393                  $jour_se3 = sprintf("%02d",$aujourdhui['mday']);
 394                  $annee_se3 = $aujourdhui['year'];
 395                  $heure_se3 = sprintf("%02d",$aujourdhui['hours']);
 396                  $minute_se3 = sprintf("%02d",$aujourdhui['minutes']);
 397                  $seconde_se3 = sprintf("%02d",$aujourdhui['seconds']);
 398  
 399                  $date_se3=$annee_se3.$mois_se3.$jour_se3;
 400  
 401                  echo "<p>Choisissez les paramètres de restauration: <br />\n";
 402  
 403                  $temoin_sysresccd=check_sysresccd_files();
 404  
 405                  if($temoin_sysresccd=="y") {
 406                      // Il faut aussi le noyau et l'initram.igz dans /tftpboot, 
 407                      echo "<input type='radio' name='distrib' id='distrib_slitaz' value='slitaz' onchange='affiche_sections_distrib()' ";
 408                      if($pref_distrib_svgrest!="sysresccd") {echo "checked ";}
 409                      echo "/><label for='distrib_slitaz'>Utiliser la distribution SliTaz</label><br />\n";
 410                      echo "<input type='radio' name='distrib' id='distrib_sysresccd' value='sysresccd' onchange='affiche_sections_distrib()' ";
 411                      if($pref_distrib_svgrest=="sysresccd") {echo "checked ";}
 412                      echo "/><label for='distrib_sysresccd'>Utiliser la distribution SysRescCD</label> (<i>plus long à booter et 300Mo de RAM minimum, mais meilleure détection des pilotes</i>)<br />\n";
 413  
 414  
 415  echo "<div id='div_sysresccd_kernel'>\n";
 416  echo "<table border='0'>\n";
 417  echo "<tr>\n";
 418  echo "<td valign='top'>\n";
 419  echo "Utiliser le noyau&nbsp;: ";
 420  echo "</td>\n";
 421  echo "<td>\n";
 422  echo "<input type='radio' name='sysresccd_kernel' id='sysresccd_kernel_auto' value='auto' checked /><label for='sysresccd_kernel_auto'>auto</label><br />\n";
 423  echo "<input type='radio' name='sysresccd_kernel' id='sysresccd_kernel_rescuecd' value='rescue32' /><label for='sysresccd_kernel_rescuecd'>rescue32</label><br />\n";
 424  echo "<input type='radio' name='sysresccd_kernel' id='sysresccd_kernel_altker32' value='altker32' /><label for='sysresccd_kernel_altker32'>altker32</label><br />\n";
 425  echo "<input type='radio' name='sysresccd_kernel' id='sysresccd_kernel_rescue64' value='rescue64' /><label for='sysresccd_kernel_rescue64'>rescue64</label><br />\n";
 426  echo "<input type='radio' name='sysresccd_kernel' id='sysresccd_kernel_altker64' value='altker64' /><label for='sysresccd_kernel_altker64'>altker64</label><br />\n";
 427  echo "</td>\n";
 428  echo "</tr>\n";
 429  echo "</table>\n";
 430  echo "</div>\n";
 431  
 432                  }
 433                  else {
 434                      echo "<input type=\"hidden\" name=\"distrib\" value=\"slitaz\" />\n";
 435                  }
 436  
 437                  echo "<table border='0'>\n";
 438                  echo "<tr><td>Nom de l'image à restaurer: </td><td><input type='text' name='nom_image' value='' />\n";
 439                  echo "<u onmouseover=\"this.T_SHADOWWIDTH=5;this.T_STICKY=1;return escape".gettext("('Si vous laissez vide, la sauvegarde la plus récente réussie est utilisée.')")."\"><img name=\"action_image1\"  src=\"../elements/images/help-info.gif\"></u>\n";
 440                  echo "</td></tr>\n";
 441  
 442                  echo "<tr><td>Partition à restaurer: </td><td><input type='text' name='dest_part' value='auto' />\n";
 443                  echo "<u onmouseover=\"this.T_SHADOWWIDTH=5;this.T_STICKY=1;return escape".gettext("('Proposer hda1, sda1,... selon les cas, ou laissez \'auto\' si la première partition du disque est bien la partition système à restaurer.')")."\"><img name=\"action_image2\"  src=\"../elements/images/help-info.gif\"></u>\n";
 444                  echo "</td></tr>\n";
 445  
 446                  /*
 447                  echo "<tr><td>Partition de stockage de l'image: </td><td><input type='text' name='src_part' value='auto' />\n";
 448                  echo "<u onmouseover=\"this.T_SHADOWWIDTH=5;this.T_STICKY=1;return escape".gettext("('Proposer hda5, sda5,... selon les cas, ou laissez \'auto\' si la première partition Linux (<i>ou à défaut W$ après la partition système</i>) est bien la partition de stockage.')")."\"><img name=\"action_image3\"  src=\"../elements/images/help-info.gif\"></u>\n";
 449                  echo "</td></tr>\n";
 450                  */
 451  
 452                  $srcd_scripts_vers=crob_getParam('srcd_scripts_vers');
 453                  if(($temoin_sysresccd=="y")&&($srcd_scripts_vers!='')&&($srcd_scripts_vers>=20111008)) {
 454                      echo "<tr><td><input type='radio' name='type_src_part' id='type_src_part_partition' value='partition' checked /><label for='type_src_part_partition'> Partition de stockage de l'image: </label></td><td><input type='text' name='src_part' value='auto' />\n";
 455                      echo "<u onmouseover=\"this.T_SHADOWWIDTH=5;this.T_STICKY=1;return escape".gettext("('Proposer hda5, sda5,... selon les cas, ou laissez \'auto\' si la première partition Linux (<i>ou à défaut W$ après la partition système</i>) est bien la partition de stockage.')")."\"><img name=\"action_image3\"  src=\"../elements/images/help-info.gif\"></u>\n";
 456                      echo "</td></tr>\n";
 457  
 458                      echo "<tr id='tr_src_part_smb'><td style='vertical-align:top'><b>Ou</b><br /><input type='radio' name='type_src_part' id='type_src_part_smb' value='smb' /><label for='type_src_part_smb'> Effectuer une restauration depuis un partage Window$/Samba&nbsp;:</label><br />(<i>tous les champs doivent être renseignés<br />si vous optez pour ce choix</i>)</td>\n";
 459                      echo "<td>\n";
 460                      echo "<br />\n";
 461  
 462                      $svg_default_srv=crob_getParam('svg_default_srv');
 463                      if($svg_default_srv=='') {$svg_default_srv=crob_getParam('se3ip');}
 464                      $svg_default_partage=crob_getParam('svg_default_partage');
 465                      $svg_default_dossier=crob_getParam('svg_default_dossier');
 466                      $svg_default_compte=crob_getParam('svg_default_compte');
 467  
 468                          echo "<table>\n";
 469                          echo "<tr>\n";
 470                          echo "<td>Serveur&nbsp;:</td>\n";
 471                          echo "<td><input type='text' name='src_srv' id='src_srv' value='".$svg_default_srv."' onchange=\"document.getElementById('type_src_part_smb').checked=true;\" /></td>\n";
 472                          echo "</tr>\n";
 473  
 474                          echo "<tr>\n";
 475                          echo "<td>Partage&nbsp;:</td>\n";
 476                          echo "<td><input type='text' name='src_partage' id='src_partage' value='$svg_default_partage' onchange=\"document.getElementById('type_src_part_smb').checked=true;\" /></td>\n";
 477                          echo "</tr>\n";
 478  
 479                          echo "<tr>\n";
 480                          echo "<td style='vertical-align:top;'>Sous-dossier&nbsp;:</td>\n";
 481                          echo "<td>\n";
 482                          echo "<input type='text' name='src_sous_dossier' id='src_sous_dossier' value='$svg_default_dossier' onchange=\"document.getElementById('type_src_part_smb').checked=true;\" />\n";
 483                          echo "<br />\n";
 484                          echo "Si un sous-dossier &lt;ADRESSE_MAC&gt; du dossier proposé ici existe, la sauvegarde y sera d'abord recherchée, avant de se rabattre sur le sous-dossier proposé lui-même si un tel dossier n'existe pas.\n";
 485                          echo "</td>\n";
 486                          echo "</tr>\n";
 487  
 488                          echo "<tr>\n";
 489                          echo "<td>Compte&nbsp;:</td>\n";
 490                          echo "<td><input type='text' name='src_compte' id='src_compte' value='$svg_default_compte' onchange=\"document.getElementById('type_src_part_smb').checked=true;\" /></td>\n";
 491                          echo "</tr>\n";
 492  
 493                          echo "<tr>\n";
 494                          echo "<td style='vertical-align:top'>Mot de passe&nbsp;:</td>\n";
 495                          echo "<td><input type='text' name='src_mdp' id='src_mdp' value='' onchange=\"document.getElementById('type_src_part_smb').checked=true;\" autocomplete=\"off\" /><br /><b>Attention&nbsp;:</b> Le mot de passe circule en clair.<br />Evitez d'utiliser un compte comme admin ou adminse3.</td>\n";
 496                          echo "</tr>\n";
 497                          echo "</table>\n";
 498                      echo "</td></tr>\n";
 499  
 500                      /*
 501                      // Le type de sauvegarde est indentifié par le script d'après le nom de l'image
 502                      echo "<tr><td style='vertical-align:top'>Type de sauvegarde&nbsp;: </td>\n";
 503                      echo "<td>\n";
 504                      echo "<input type='radio' name='type_svg' id='type_svg_partimage' value='partimage' checked /><label for='type_svg_partimage'> partimage</label><br />\n";
 505                      echo "<input type='radio' name='type_svg' id='type_svg_ntfsclone' value='ntfsclone' /><label for='type_svg_ntfsclone'> ntfsclone</label><br />\n";
 506                      echo "<input type='radio' name='type_svg' id='type_svg_fsarchiver' value='fsarchiver' /><label for='type_svg_fsarchiver'> fsarchiver</label><br />\n";
 507                      echo "</td></tr>\n";
 508                      */
 509                  }
 510                  else {
 511                      echo "<tr><td>Partition de stockage: </td><td><input type='text' name='src_part' value='auto' />\n";
 512                      echo "<u onmouseover=\"this.T_SHADOWWIDTH=5;this.T_STICKY=1;return escape".gettext("('Proposer hda5, sda5,... selon les cas, ou laissez \'auto\' si la première partition Linux (<i>ou à défaut W$ après la partition système</i>) est bien la partition de stockage.')")."\"><img name=\"action_image3\"  src=\"../elements/images/help-info.gif\"></u>\n";
 513                      echo "</td></tr>\n";
 514                  }
 515  
 516  
 517                  if(($temoin_sysresccd=="y")&&(crob_getParam('srcd_scripts_vers')>='20110910')) {
 518                      echo "<tr id='tr_authorized_keys'>\n";
 519                      echo "<td>Url authorized_keys&nbsp;: </td>\n";
 520                      echo "<td><input type='checkbox' name='prendre_en_compte_url_authorized_keys' value='y' /> \n";
 521                      echo "<input type='text' name='url_authorized_keys' value='".crob_getParam('url_authorized_keys')."' size='40' />\n";
 522                      echo "<u onmouseover=\"this.T_SHADOWWIDTH=5;this.T_STICKY=1;return escape".gettext("('Un fichier authorized_keys peut &ecirc;tre mis en place pour permettre un acc&egrave;s SSH au poste restaur&eacute;.')")."\">\n";
 523                      echo "<img name=\"action_image3\"  src=\"../elements/images/help-info.gif\"></u>\n";
 524                      echo "</td>\n";
 525                      echo "</tr>\n";
 526                  }
 527  
 528                  echo "<tr><td valign='top'>Rebooter en fin de restauration: </td>\n";
 529                  echo "<td>\n";
 530                  echo "<input type='radio' name='auto_reboot' value='y' checked />\n";
 531                  echo "</td>\n";
 532                  echo "</tr>\n";
 533  
 534                  echo "<tr><td valign='top'>Eteindre en fin de restauration: </td>\n";
 535                  echo "<td>\n";
 536                  echo "<input type='radio' name='auto_reboot' value='halt' />\n";
 537                  echo "</td>\n";
 538                  echo "</tr>\n";
 539  
 540                  echo "<tr><td valign='top'>Ne pas rebooter ni éteindre la machine<br />en fin de restauration: </td>\n";
 541                  echo "<td>\n";
 542                  echo "<input type='radio' name='auto_reboot' value='n' />\n";
 543                  echo "</td>\n";
 544                  echo "</tr>\n";
 545  
 546                  echo "<tr><td valign='top'>\n";
 547                  echo "Délai avant reboot/arrêt:</td>\n";
 548                  echo "<td>\n";
 549                  echo "<input type='text' name='delais_reboot' value='90' size='3' />\n";
 550                  echo "<u onmouseover=\"this.T_SHADOWWIDTH=5;this.T_STICKY=1;return escape".gettext("('Le délai doit être supérieur à 60 secondes pour permettre la récupération du rapport de restauration.')")."\"><img name=\"action_image4\"  src=\"../elements/images/help-info.gif\"></u>\n";
 551                  echo "</td>\n";
 552                  echo "</tr>\n";
 553  
 554                  echo "<tr><td valign='top'>Pour la ou les machines sélectionnées: </td>\n";
 555                  echo "<td>\n";
 556                      echo "<table border='0'>\n";
 557                      echo "<tr><td valign='top'><input type='checkbox' id='wake' name='wake' value='y' checked /> </td><td><label for='wake'>Démarrer les machines par Wake-On-Lan/etherwake<br />si elles sont éteintes.</label></td></tr>\n";
 558                      echo "<tr><td valign='top'><input type='radio' id='shutdown_reboot_wait1' name='shutdown_reboot' value='wait1' /> </td><td><label for='shutdown_reboot_wait1'>Attendre le reboot des machines<br />même si aucune session n'est ouverte,</label></td></tr>\n";
 559                      echo "<tr><td valign='top'><input type='radio' id='shutdown_reboot_wait2' name='shutdown_reboot' value='wait2' checked /> </td><td><label for='shutdown_reboot_wait2'>Redémarrer les machines sans session ouverte<br />et attendre le reboot pour les machines<br />qui ont des sessions ouvertes,</label></td></tr>\n";
 560                      echo "<tr><td valign='top'><input type='radio' id='shutdown_reboot_reboot' name='shutdown_reboot' value='reboot' /> </td><td><label for='shutdown_reboot_reboot'>Redémarrer les machines<br />même si une session est ouverte (<i>pô cool</i>).</label></td></tr>\n";
 561                      echo "</table>\n";
 562                  echo "</td></tr>\n";
 563  
 564                  echo "</table>\n";
 565  
 566                  echo "<input type=\"hidden\" name=\"validation_parametres\" value=\"y\" />\n";
 567  
 568                  echo "<p id='bouton_submit' style='text-align:center; display:none;'><input type=\"button\" name=\"bouton_validation_parametres2\" value=\"Valider\" onclick=\"check_smb_et_valide_formulaire('Un ou des champs ne sont pas remplis. Etes-vous s&ucirc;r de vouloir poursuivre ?');\" /></p>\n";
 569  
 570                  echo "<noscript>";
 571                  echo "<p align='center'><input type=\"submit\" name=\"bouton_validation_parametres\" value=\"Valider\" /></p>\n";
 572                  echo "</noscript>";
 573  
 574                  echo "</form>\n";
 575  
 576  echo "<script type='text/javascript'>
 577  // Si javascript est actif, on de-cache le bouton_submit:
 578  if(document.getElementById('bouton_submit')) {document.getElementById('bouton_submit').style.display='';}
 579  
 580  function affiche_sections_distrib() {
 581      if(document.getElementById('distrib_sysresccd').checked==true) {
 582          distrib='sysresccd';
 583      }
 584      else {
 585          distrib='slitaz';
 586      }
 587      //alert(distrib);
 588  
 589      if(distrib=='slitaz') {
 590          document.getElementById('div_sysresccd_kernel').style.display='none';
 591          document.getElementById('tr_authorized_keys').style.display='none';
 592          if(document.getElementById('tr_src_part_smb')) {document.getElementById('tr_src_part_smb').style.display='none';}
 593      }
 594      else {
 595          document.getElementById('div_sysresccd_kernel').style.display='block';
 596          document.getElementById('tr_authorized_keys').style.display='';
 597          if(document.getElementById('tr_src_part_smb')) {document.getElementById('tr_src_part_smb').style.display='';}
 598      }
 599  }
 600  
 601  affiche_sections_distrib();
 602  
 603  function check_smb_et_valide_formulaire(themessage) {
 604      if(document.getElementById('type_src_part_smb')) {
 605          if(document.getElementById('type_src_part_smb').checked==true) {
 606              // On vérifie si les champs sont non vides
 607              src_srv=''
 608              src_partage=''
 609              src_sous_dossier=''
 610              src_compte=''
 611              src_mdp=''
 612              if(document.getElementById('src_srv')) {src_srv=document.getElementById('src_srv').value;}
 613              if(document.getElementById('src_partage')) {src_partage=document.getElementById('src_partage').value;}
 614              if(document.getElementById('src_sous_dossier')) {src_sous_dossier=document.getElementById('src_sous_dossier').value;}
 615              if(document.getElementById('src_compte')) {src_compte=document.getElementById('src_compte').value;}
 616              if(document.getElementById('src_mdp')) {src_mdp=document.getElementById('src_mdp').value;}
 617  
 618              if((src_srv!='')&&(src_partage!='')&&(src_sous_dossier!='')&&(src_compte!='')&&(src_mdp!='')) {
 619                  document.form1.submit();
 620              }
 621              else {
 622                  var is_confirmed = confirm(themessage);
 623                  if(is_confirmed){
 624                      document.form1.submit();
 625                  }
 626              }
 627          }
 628          else {
 629              document.form1.submit();
 630          }
 631      }
 632      else {
 633          document.form1.submit();
 634      }
 635  }
 636  </script>\n";
 637  
 638  
 639                  //======================================================
 640                  $temoin_svg_existantes=0;
 641                  $chaine_tab="<p>Liste des sauvegardes existantes:</p>\n";
 642                  $chaine_tab.="<table class='crob'>\n";
 643                  $chaine_tab.="<tr>\n";
 644                  $chaine_tab.="<th>Id</th>\n";
 645                  $chaine_tab.="<th>Nom</th>\n";
 646                  $chaine_tab.="<th>Partition</th>\n";
 647                  $chaine_tab.="<th>Sauvegarde</th>\n";
 648                  $chaine_tab.="<th>Date</th>\n";
 649                  $chaine_tab.="<th>Descriptif</th>\n";
 650                  $chaine_tab.="</tr>\n";
 651                  for($i=0;$i<count($id_machine);$i++){
 652                      $sql="SELECT * FROM se3_tftp_sauvegardes WHERE id='".$id_machine[$i]."';";
 653                      //echo "$sql<br />";
 654                      $res=mysql_query($sql);
 655                      $sql="SELECT * FROM se3_tftp_sauvegardes WHERE id='".$id_machine[$i]."' ORDER BY date DESC;";
 656                      //echo "$sql<br />";
 657                      $res=mysql_query($sql);
 658                      if(mysql_num_rows($res)>0) {
 659                          while($lig=mysql_fetch_object($res)) {
 660                              $chaine_tab.="<tr>\n";
 661                              $chaine_tab.="<td>$lig->id</td>\n";
 662                              $chaine_tab.="<td>$lig->name</td>\n";
 663                              $chaine_tab.="<td>$lig->partition</td>\n";
 664                              $chaine_tab.="<td>$lig->image</td>\n";
 665                              $chaine_tab.="<td>".mysql_date_to_fr_date($lig->date)."</td>\n";
 666                              $chaine_tab.="<td style='text-align:left'><pre>$lig->descriptif</pre></td>\n";
 667                              $chaine_tab.="</tr>\n";
 668  
 669                              $temoin_svg_existantes++;
 670                          }
 671                      }
 672                  }
 673                  $chaine_tab.="</table>\n";
 674                  $chaine_tab.="<p><br /></p>\n";
 675                  if($temoin_svg_existantes>0) {
 676                      echo $chaine_tab;
 677                  }
 678                  //======================================================
 679  
 680                  echo "<p><i>NOTES:</i></p>\n";
 681                  echo "<ul>\n";
 682                  echo "<li>Ce choix nécessite une partition de sauvegarde sur la machine.</li>\n";
 683                  echo "<li>Si le nom de l'image est laissé vide, c'est la sauvegarde la plus récente tagguée 'SUCCES' qui est utilisée.<br />C'est-à-dire qu'il doit exister un fichier NOM_SAUVEGARDE.SUCCES.txt<br />Les sauvegardes sont recherchées dans un dossier /oscar/ à la racine de la partition (<i>si le nom de l'image est laissé vide</i>).</li>\n";
 684                  echo "<li>Il faudra stocker dans une table les informations sur les sauvegardes effectuées/trouvées pour pouvoir ne proposer ici que des choix valides.</li>\n";
 685                  echo "<li><b>Attention:</b > Le délai avant reboot ajouté au temps de l'opération lancée doit dépasser la périodicité du script controle_actions_tftp.sh en crontab.<br />
 686                  Ce délai doit aussi permettre de récupérer en http://IP_CLIENT/~hacker/Public/*.txt des informations sur le succès ou l'échec de l'opération.<br />
 687                  Une tâche cron se charge d'effectuer le 'wget' sur les infos, puis le remplissage d'une table MySQL.<br />
 688                  La tâche cron est lancée toutes les 60s.</li>\n";
 689                  echo "<li>Pour que la restauration puisse être entièrement provoquée depuis le serveur, il faut que les postes clients soient configurés pour booter en PXE (<i>ou au moins s'éveiller (wol) en bootant sur le réseau</i>).<br />Dans le cas contraire, vous devrez passer sur les postes et presser F12 pour choisir de booter en PXE.</li>\n";
 690                  echo "</ul>\n";
 691  
 692  
 693              }
 694              else {
 695                  echo "<h2>Validation des paramètres de la restauration</h2>\n";
 696  
 697                  $opt_url_authorized_keys="";
 698                  if((isset($_POST['prendre_en_compte_url_authorized_keys']))&&(isset($_POST['url_authorized_keys']))&&($_POST['url_authorized_keys']!='')&&(preg_replace('|[A-Za-z0-9/:_\.\-]|','',$_POST['url_authorized_keys'])=='')) {
 699                      $opt_url_authorized_keys="url_authorized_keys=".$_POST['url_authorized_keys'];
 700                      crob_setParam('url_authorized_keys',$_POST['url_authorized_keys'],'Url fichier authorized_keys pour acces ssh aux clients TFTP');
 701                  }
 702  
 703                  echo "<p>Rappel des paramètres:</p>\n";
 704  
 705                  $sauvegarde_pref=crob_setParam('pref_distrib_svgrest', $distrib, 'Distrib preferee pour les sauvegardes et restaurations');
 706  
 707                  $temoin_sysresccd=check_sysresccd_files();
 708  
 709                  if($temoin_sysresccd=="y") {
 710                      echo "<table class='crob'>\n";
 711                      echo "<tr>\n";
 712                      echo "<th style='text-align:left;'>Distribution linux à utiliser: </th>\n";
 713                      echo "<td>\n";
 714                      echo $distrib;
 715                      if($distrib=='sysresccd') {
 716                          echo " (<i>noyau $sysresccd_kernel</i>)";
 717                      }
 718                      echo "<input type=\"hidden\" name=\"distrib\" value=\"$distrib\" />\n";
 719                      echo "</td>\n";
 720                      echo "</tr>\n";
 721                  }
 722                  else {
 723                      echo "<input type=\"hidden\" name=\"distrib\" value=\"slitaz\" />\n";
 724                      echo "<table class='crob'>\n";
 725                  }
 726  
 727                  echo "<tr>\n";
 728                  echo "<th style='text-align:left;'>Nom de l'image: </th>\n";
 729                  echo "<td>\n";
 730                  if($nom_image=="") {echo "Détecté automatiquement lors de la restauration.";} else {echo $nom_image;}
 731                  echo "</td>\n";
 732                  echo "</tr>\n";
 733  
 734                  echo "<tr>\n";
 735                  echo "<th style='text-align:left;'>Partition à restaurer: </th>\n";
 736                  echo "<td>\n";
 737                  if($dest_part=="auto") {echo "Détectée automatiquement lors de la restauration.";} else {echo $dest_part;}
 738                  echo "</td>\n";
 739                  echo "</tr>\n";
 740  
 741                  if($type_src_part=='partition') {
 742                      echo "<tr>\n";
 743                      echo "<th style='text-align:left;'>Partition de stockage de la sauvegarde: </th>\n";
 744                      echo "<td>\n";
 745                      if($src_part=="auto") {echo "Détectée automatiquement lors de la restauration.";} else {echo $src_part;}
 746                      echo "</td>\n";
 747                      echo "</tr>\n";
 748                  }
 749                  elseif($type_src_part=='smb') {
 750                      if($src_srv!='') {crob_setParam('svg_default_srv',$_POST['src_srv'],'Serveur samba par défaut de destination des sauvegardes (TFTP)');}
 751                      if($src_partage!='') {crob_setParam('svg_default_partage',$_POST['src_partage'],'Partage samba par défaut de destination des sauvegardes (TFTP)');}
 752                      if($src_sous_dossier!='') {crob_setParam('svg_default_dossier',$_POST['src_sous_dossier'],'Sous-dossier par défaut de destination des sauvegardes (TFTP)');}
 753                      if($src_compte!='') {crob_setParam('svg_default_compte',$_POST['src_compte'],'Compte par défaut pour le montage de la destination des sauvegardes (TFTP)');}
 754  
 755                      echo "<tr>\n";
 756                      echo "<th style='text-align:left; vertical-align:top;'>Sauvegarde dans un partage Window$/Samba: </th>\n";
 757                      echo "<td>\n";
 758                          echo "<table>\n";
 759                          echo "<tr>\n";
 760                          echo "<td>Serveur&nbsp;:</td>\n";
 761                          echo "<td>$src_srv</td>\n";
 762                          echo "</tr>\n";
 763  
 764                          echo "<tr>\n";
 765                          echo "<td>Partage&nbsp;:</td>\n";
 766                          echo "<td>$src_partage</td>\n";
 767                          echo "</tr>\n";
 768  
 769                          echo "<tr>\n";
 770                          echo "<td>Sous-dossier&nbsp;:</td>\n";
 771                          echo "<td>$src_sous_dossier</td>\n";
 772                          echo "</tr>\n";
 773  
 774                          echo "<tr>\n";
 775                          echo "<td>Compte&nbsp;:</td>\n";
 776                          echo "<td>$src_compte</td>\n";
 777                          echo "</tr>\n";
 778  
 779                          echo "<tr>\n";
 780                          echo "<td>Mot de passe&nbsp;:</td>\n";
 781                          echo "<td>XXXXXXXX</td>\n";
 782                          echo "</tr>\n";
 783                          echo "</table>\n";
 784  
 785                      echo "</td>\n";
 786                      echo "</tr>\n";
 787                  }
 788                  else {
 789                      echo "</table>\n";
 790                      echo "<p style='color:red'>ANOMALIE&nbsp;: Le type de la destination de sauvegarde est inconnu.</p>\n";
 791                      include ("pdp.inc.php");
 792                      die();
 793                  }
 794  
 795                  /*
 796                  echo "<tr>\n";
 797                  echo "<th style='text-align:left;'>Type de sauvegarde: </th>\n";
 798                  echo "<td>$type_svg</td>\n";
 799                  echo "</tr>\n";
 800                  */
 801  
 802                  echo "<tr>\n";
 803                  echo "<th style='text-align:left;'>Rebooter en fin de restauration: </th>\n";
 804                  echo "<td>\n";
 805                  echo $auto_reboot;
 806                  echo "</td>\n";
 807                  echo "</tr>\n";
 808  
 809                  //if($auto_reboot=='y') {
 810                  if(($auto_reboot=='y')||($auto_reboot=='halt')) {
 811                      echo "<tr>\n";
 812                      echo "<th style='text-align:left;'>Délai avant reboot: </th>\n";
 813                      echo "<td>\n";
 814                      echo "$delais_reboot s";
 815                      echo "</td>\n";
 816                      echo "</tr>\n";
 817                  }
 818  
 819                  echo "</table>\n";
 820  
 821  
 822                  echo "<p>Génération du fichier dans /tftpboot/pxelinux.cfg/ pour la restauration.<br />\n";
 823  
 824                  // BOUCLE SUR LA LISTE DES $id_machine[$i]
 825  
 826                  // Numéro de l'opération de sauvegarde:
 827                  $num_op=get_free_se3_action_tftp_num_op();
 828                  for($i=0;$i<count($id_machine);$i++) {
 829                      $sql="SELECT * FROM se3_dhcp WHERE id='".$id_machine[$i]."';";
 830                      //echo "$sql<br />";
 831                      $res=mysql_query($sql);
 832                      if(mysql_num_rows($res)==0) {
 833                          echo "<span style='color:red;'>La machine d'identifiant $id_machine[$i] n'existe pas dans 'se3_dhcp'.</span><br />\n";
 834                      }
 835                      else {
 836                          $temoin_erreur="n";
 837  
 838                          $lig=mysql_fetch_object($res);
 839                          $mac_machine=$lig->mac;
 840                          $nom_machine=$lig->name;
 841                          $ip_machine=$lig->ip;
 842  
 843                          if($restriction_parcs=="y") {
 844                              $temoin_erreur='y';
 845                              for($loop=0; $loop<count($tab_delegated_parcs);$loop++) {
 846                                  // La machine est-elle dans un des parcs délégués?
 847                                  if(is_machine_in_parc($nom_machine,$tab_delegated_parcs[$loop])) {$temoin_erreur='n';break;}
 848                              }
 849                          }
 850  
 851                          if($temoin_erreur=="y") {
 852                              echo "<p style='color:red'>La machine $nom_machine ne vous est pas déléguée</p>\n";
 853                          }
 854                          else {
 855                              echo "Génération pour $nom_machine: ";
 856      
 857                              $corrige_mac=strtolower(strtr($mac_machine,":","-"));
 858      
 859                              $chemin="/usr/share/se3/scripts";
 860      
 861                              if($distrib=='slitaz') {
 862                                  $ajout_kernel="";
 863                              }
 864                              else {
 865                                  $ajout_kernel="|kernel=$sysresccd_kernel";
 866                              }
 867      
 868                              if($distrib=='slitaz') {
 869                                  //$resultat=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'restaure' '$corrige_mac' '$ip_machine' '$nom_machine' '$nom_image' '$src_part' '$dest_part' '$auto_reboot' '$delais_reboot'", $retour);
 870                                  $resultat=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'restaure' 'mac=$corrige_mac ip=$ip_machine pc=$nom_machine nom_image=$nom_image src_part=$src_part dest_part=$dest_part auto_reboot=$auto_reboot delais_reboot=$delais_reboot'", $retour);
 871  
 872                                  $info_src_part=$src_part;
 873                              }
 874                              else {
 875                                  //$resultat=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'sysresccd_restaure' '$corrige_mac' '$ip_machine' '$nom_machine' '$nom_image' '$src_part' '$dest_part' '$auto_reboot' '$delais_reboot'", $retour);
 876                                  //$resultat=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'sysresccd_restaure' 'mac=$corrige_mac ip=$ip_machine pc=$nom_machine nom_image=$nom_image src_part=$src_part dest_part=$dest_part auto_reboot=$auto_reboot delais_reboot=$delais_reboot kernel=$sysresccd_kernel $opt_url_authorized_keys'", $retour);
 877  
 878                                  if($type_src_part=='smb') {
 879                                      //$resultat=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'sysresccd_restaure' 'mac=$corrige_mac ip=$ip_machine pc=$nom_machine nom_image=$nom_image src_part=smb:$src_compte:$src_mdp@$src_srv:$src_partage:$src_sous_dossier dest_part=$dest_part type_svg=$type_svg auto_reboot=$auto_reboot delais_reboot=$delais_reboot kernel=$sysresccd_kernel $opt_url_authorized_keys'", $retour);
 880                                      $resultat=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'sysresccd_restaure' 'mac=$corrige_mac ip=$ip_machine pc=$nom_machine nom_image=$nom_image src_part=smb:$src_compte:$src_mdp@$src_srv:$src_partage:$src_sous_dossier dest_part=$dest_part auto_reboot=$auto_reboot delais_reboot=$delais_reboot kernel=$sysresccd_kernel $opt_url_authorized_keys'", $retour);
 881  
 882                                      $info_src_part="smb:$src_compte:XXXXXXXX@$src_srv:$src_partage:$src_sous_dossier";
 883                                  }
 884                                  else {
 885                                      //$resultat=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'sysresccd_restaure' 'mac=$corrige_mac ip=$ip_machine pc=$nom_machine nom_image=$nom_image src_part=$src_part dest_part=$dest_part type_svg=$type_svg auto_reboot=$auto_reboot delais_reboot=$delais_reboot kernel=$sysresccd_kernel $opt_url_authorized_keys'", $retour);
 886                                      $resultat=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'sysresccd_restaure' 'mac=$corrige_mac ip=$ip_machine pc=$nom_machine nom_image=$nom_image src_part=$src_part dest_part=$dest_part auto_reboot=$auto_reboot delais_reboot=$delais_reboot kernel=$sysresccd_kernel $opt_url_authorized_keys'", $retour);
 887  
 888                                      $info_src_part=$src_part;
 889                                  }
 890                              }
 891      
 892                              if(count($retour)>0){
 893                                  echo "<span style='color:red;'>ECHEC de la génération du fichier</span><br />\n";
 894                                  for($j=0;$j<count($retour);$j++){
 895                                      echo "$retour[$j]<br />\n";
 896                                  }
 897                                  $temoin_erreur="y";
 898                              }
 899                              else {
 900                                  $sql="DELETE FROM se3_tftp_action WHERE id='$id_machine[$i]';";
 901                                  $suppr=mysql_query($sql);
 902      
 903                                  $timestamp=time();
 904                                  $sql="INSERT INTO se3_tftp_action SET id='$id_machine[$i]',
 905                                                                          mac='$mac_machine',
 906                                                                          name='$nom_machine',
 907                                                                          date='$timestamp',
 908                                                                          type='restauration',
 909                                                                          num_op='$num_op',
 910                                                                          infos='nom_image=$nom_image|src_part=$info_src_part|dest_part=$dest_part|auto_reboot=$auto_reboot|delais_reboot=$delais_reboot}$ajout_kernel';";
 911                                  $insert=mysql_query($sql);
 912                                  if(!$insert) {
 913                                      echo "<span style='color:red;'>ECHEC de l'enregistrement dans 'se3_tftp_action'</span><br />\n";
 914                                      $temoin_erreur="y";
 915                                  }
 916      
 917                                  // Génération du lanceur de récupération:
 918                                  //$dossier="/var/se3/tmp/tftp/$id_machine[$i]";
 919                                  $dossier="/etc/se3/www-tools/tftp/$id_machine[$i]";
 920                                  if(!file_exists($dossier)) { mkdir($dossier,0700);}
 921                                  $lanceur_recup="$dossier/lanceur_recup_rapport_action_tftp.sh";
 922                                  $fich=fopen($lanceur_recup,"w+");
 923                                  $timestamp_limit=time()+4*3600;
 924                                  //fwrite($fich,"/usr/share/se3/scripts/recup_rapport.php '$id_machine[$i]' '$ip_machine' 'restauration' '$timestamp_limit'");
 925                                  if($distrib=='slitaz') {
 926                                      $mode_restauration="restauration";
 927                                  }
 928                                  else {
 929                                      $mode_restauration="restauration_sysresccd";
 930                                  }
 931                                  fwrite($fich,"sudo /usr/share/se3/scripts/recup_rapport.php '$id_machine[$i]' '$ip_machine' '$mode_restauration' '$timestamp_limit'");
 932                                  fclose($fich);
 933                                  chmod($lanceur_recup,0750);
 934      
 935                                  // Ménage dans les tâches précédentes
 936                                  @exec("sudo /usr/share/se3/scripts/se3_tftp_menage_atq.sh $id_machine[$i]",$retour);
 937      
 938                                  // Planification de la tâche
 939                                  //@exec("at -f $lanceur_recup now + 1 minute 2>/dev/null",$retour);
 940                                  @exec("at -f $lanceur_recup now + 1 minute 2>$dossier/at.txt",$retour);
 941                                  if($retour) {
 942                                      echo "<span style='color:red;'>ECHEC de la planification de la tâche.</span><br />\n";
 943                                      for($j=0;$j<count($retour);$j++){echo "$retour[$j]<br />\n";}
 944                                      $temoin_erreur="y";
 945                                  }
 946      
 947                                  if($temoin_erreur=="n") {
 948                                      echo "<span style='color:green;'>OK</span>\n";
 949                                      // Application de l'action choisie:
 950                                      echo " <span id='wake_shutdown_or_reboot_$i'></span>";
 951      
 952                                      echo "<script type='text/javascript'>
 953                                          // <![CDATA[
 954                                          new Ajax.Updater($('wake_shutdown_or_reboot_$i'),'ajax_lib.php?ip=$ip_machine&nom=$nom_machine&mode=wake_shutdown_or_reboot&wake=$wake&shutdown_reboot=$shutdown_reboot',{method: 'get'});
 955                                          //]]>
 956                                      </script>\n";
 957      
 958      
 959                                      echo "<br />\n";
 960                                  }
 961                              }
 962                          }
 963                      }
 964                  }
 965  
 966                  // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
 967                  // POUVOIR TAGUER DANS LA TABLE se3_dhcp LES MACHINES QUI PEUVENT BOOTER EN PXE
 968                  // Ajouter un champ?
 969                  // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
 970  
 971  
 972                  // On n'affiche le fichier que pour le dernier (à titre d'info):
 973                  if(isset($corrige_mac)) {
 974                      $fich=fopen("/tftpboot/pxelinux.cfg/01-$corrige_mac","r");
 975                      if($fich) {
 976                          echo "<p>Pour information, voici le contenu du fichier généré:<br />\n";
 977                          echo "<pre style='color:green;'>";
 978                          while(!feof($fich)) {
 979                              $ligne=fgets($fich,4096);
 980                              echo htmlentities($ligne);
 981                          }
 982                          echo "</pre>\n";
 983                          fclose($fich);
 984                      }
 985                      else {
 986                          echo "<p style='color:red;'>Il n'a pas été possible d'ouvrir le fichier /tftpboot/pxelinux.cfg/01-$corrige_mac</p>\n";
 987                      }
 988                  }
 989              }
 990          }
 991          echo "<p><a href='".$_SERVER['PHP_SELF']."'>Retour au choix du/des parc(s)</a>.</p>\n";
 992      }
 993  }
 994  else {
 995      print (gettext("Vous n'avez pas les droits nécessaires pour ouvrir cette page..."));
 996  }
 997  
 998  // Footer
 999  include ("pdp.inc.php");
1000  ?>


Generated: Tue Mar 17 22:47:18 2015 Cross-referenced by PHPXref 0.7.1