[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/se3master/var/www/se3/partages/ -> synchro_folders_classes.php (source)

   1  <?php
   2  
   3  
   4     /**
   5     
   6     * Permet de synchroniser les partages Classe
   7     * @Version $Id: synchro_folders_classes.php 6176 2011-02-27 23:00:23Z dbo $ 
   8     
   9     * @Projet LCS / SambaEdu 
  10     
  11     * @auteurs  jLCF >:>  jean-luc.chretien@tice.ac-caen.fr
  12     * @auteurs Equipe TICE Crdp de Caen
  13     * @auteurs Olivier LECLUSE
  14  
  15     * @Licence Distribue selon les termes de la licence GPL
  16     
  17     * @note Ce script est conserve pour le cas d'un serveur esclave avec repertoires classes deportes (utilise admind)
  18     * @note Remplace par rep_classe.php 
  19     */
  20  
  21     /**
  22  
  23     * @Repertoire: partages/
  24     * file: synchro_folders_classes.php
  25  
  26    */    
  27  
  28  
  29  include  "entete.inc.php";
  30  include  "ldap.inc.php";
  31  include  "ihm.inc.php";
  32  
  33  require_once  ("lang.inc.php");
  34  bindtextdomain('se3-partages',"/var/www/se3/locale");
  35  textdomain ('se3-partages');
  36  
  37  
  38  $DEBUG = false;
  39  
  40  if (is_admin("se3_is_admin",$login)=="Y") {
  41          // Aide en ligne
  42                  $titre=gettext("Aide en ligne");
  43                  $texte=gettext("<p>Vous &#234tes administrateur du serveur SE3.<BR>Avec le menu ci-dessous, vous pouvez synchroniser les sous r&#233pertoires Classes avec la base des utilisateurs de votre annuaire.<p><u>Contexte d'usage</u> :<br><blockquote><li>Vous avez cr&#233&#233 des ressources classes &#224 partir du menu «Cr&#233er partages classes».<li>Vous avez ult&#233rieurement cr&#233&#233 des membres dans les groupes classes de votre annuaire.</blockquote><p>Avec le menu «synchronisation r&#233pertoire classes» vous programmez un op&#233ration de synchrornisation entre le contenu des groupes Classes de l'annuaire et les sous r&#233pertoires de chaque classe, c'est &#224 dire qu'il y aura cr&#233ation des sous-r&#233pertoires des nouveaux membres des groupes Classes  et application des droits n&#233cessaires aux membres des Equipes.    <p>La proc&#233dure de synchronisation se d&#233roulera en deux phases :<li><u>1&#231re phase</u> : Recherche des ressources &#224 synchroniser,</li><li><u>2&#231me phase</u> : Synchronisation des ressources.</li><p><i>Nota</i> : Le processus de synchronisation (en particulier) dans le cas d'un serveur esclave peut &#234tre assez long, fin de synchronisation un compte rendu s'affichera dans votre navigateur et vous recevrez un mail.</p><hr>");
  44                  mkhelp($titre,$texte);
  45       // Fin Aide en ligne
  46  
  47  echo "<h1>".gettext("Rafraichissement des classes")."</h1>";
  48  
  49  #------------------------------------------
  50      // Definition des messages d'alerte
  51      $alerte_1="<div class='error_msg'>".gettext("Votre demande de synchronisation des ressources classes n'a pas &#233t&#233 prise en compte car une t&#226;che d'administration est en cours sur le serveur <b>");
  52      $alerte_2=gettext("</b>, veuillez r&#233it&#233rer votre demande plus tard. Si le probl&#231me persiste, veuillez contacter le super-utilisateur du serveur SE3.")."</div><BR>\n";
  53      $alerte_3="<div class='error_msg'>".gettext("Votre demande de synchronisation des ressources classes a &#233chou&#233e.&nbsp; Si le probl&#231me persiste, veuillez contacter le super-utilisateur du serveur SE3.")."</div><BR>\n";
  54      $alerte_4="<div class='error_msg'>".gettext("La recherche des ressources a synchroniser &#224 &#233chou&#233e !&nbsp;Si le probl&#231me persiste, veuillez contacter le super-utilisateur du serveur SE3.")." </div><BR>\n";
  55      $alerte_5="<div class='error_msg'>".gettext("ERREUR : Impossible de cr&#233er le fichier d'ordonnancement (phase 2) de synchronisation des ressources classes !")."</div><BR>\n";
  56      $alerte_6="<div  class='error_msg'>".gettext("ERREUR : Impossible de cr&#233er le fichier d'ordonnancement (phase 1) de recherche de synchronisation des ressources classes !")."</div>\n";
  57  
  58       // Definition des messages d'info
  59      $info_1 = gettext("<b>[phase 1]</b> Une t&#226;che de recherche des ressources classe &#224 synchroniser est ordonnanc&#233e...<BR>");
  60      $info_2 = gettext("<b>[phase 2]</b> Une t&#226;che de synchronisation est ordonnanc&#233e...<BR>Vous recevrez un m&#232;l de compte rendu de synchronisation dans quelques instants...");
  61      $info_3 = gettext("<b>[phase 2]</b> Il n'y a pas de ressources Classes &#224 synchroniser sur le serveur&nbsp;");
  62  
  63      // Prepositionnement variables
  64      $Verif_Empty = true;
  65  
  66      if ( mono_srv() ) {
  67          // configuration mono serveur  : determination des parametres du serveur
  68          $serveur=search_machines ("(l=maitre)", "computers");
  69          $cn_srv= $serveur[0]["cn"];
  70          $stat_srv = $serveur[0]["l"];
  71          $ipHostNumber =  $serveur[0]["ipHostNumber"];
  72          } else {
  73           // configuration multi-serveurs : presentation d'un form de selection du serveur
  74          if ( !$selected_srv && !$End_ph1) {
  75              echo "<H3>".gettext("S&#233lection du serveur ou vous souhaitez cr&#233er la ressource classe :")." </H3>\n";
  76              $servers=search_computers ("(|(l=esclave)(l=maitre))");
  77              echo "<form action=\"synchro_folders_classes.php\" method=\"post\">\n";
  78               for ($loop=0; $loop < count($servers); $loop++) {
  79                  echo $servers[$loop]["description"]." ".$servers[$loop]["cn"]."&nbsp;<input type=\"radio\" name=\"cn_srv\" value =\"".$servers[$loop]["cn"]."\"";
  80                  if ($loop==0) echo "checked";
  81                  echo "><BR>\n";
  82              }
  83                  $form="<input type=\"reset\" value=\"".gettext("R&#233initialiser la s&#233lection")."\">\n";
  84                  $form ="<input type=\"hidden\" name=\"selected_srv\" value=\"true\">\n";
  85                  $form.="<input type=\"submit\" value=\"".gettext("Valider")."\">\n";
  86                  $form.="</form>\n";
  87                  echo $form;
  88          } else {
  89                  // Determination des parametres du serveur cible dans le cas d'une conf multi-serveurs
  90                  $serveur=search_machines ("(cn=$cn_srv)", "computers");
  91                  $stat_srv = $serveur[0]["l"];
  92                  $ipHostNumber =  $serveur[0]["ipHostNumber"];
  93                }
  94       }
  95      // Fin selection et recherche des caracteristiques du serveur
  96  
  97      // Debut procedure de synchro
  98      if ( $stat_srv)  {
  99          // [Phase 1] Synchronisation
 100          echo "<h3>".gettext("Synchronisation en cours sur les classes :")."</h3>";
 101          // Fabrication du script admin.sh<td width=50%>Professeurs</td> pour obtenir la liste des sous rep Classes_N
 102          // ainsi que les acl des professeurs
 103          $commandes = "#!/bin/bash\n";
 104          $commandes .="#".gettext("Recherche des ressources classes pr&#233sentes sur le serveur")." $stat_srv $cn_srv\n";
 105          $commandes .="cd /var/se3/Classes\n";
 106          $commandes .="for rep in *; do\n";
 107          $commandes .="  echo Membres:\$rep:>> /tmp/synchro.txt\n";
 108          $commandes .="  ls \$rep -I _travail -I _profs >> /tmp/synchro.txt\n";
 109          #$commandes .="  echo Equipe:\$rep:>> /tmp/synchro.txt\n";
 110          #$commandes .="  getfacl -d  --omit-header \$rep | grep user >> /tmp/synchro.txt\n";
 111          $commandes .="done\n";
 112          $commandes.="touch /tmp/end_synchro\n";
 113          if ( $stat_srv=="maitre") {$commandes.="chown www-se3:$defaultgid /tmp/synchro.txt /tmp/end_synchro\n";}
 114          else {$commandes.="chown remote_adm:lcs-users /tmp/synchro.txt /tmp/end_synchro\n";}
 115          $commandes.="chmod 666 /tmp/synchro.txt /tmp/end_synchro\n";
 116          // Depot du script tmp_$stat_srv.sh sur le serveur maitre
 117          $fp=@fopen("/var/remote_adm/tmp_".$stat_srv.".sh","w");
 118          if($fp) {
 119              fputs($fp,$commandes."\n");
 120              fclose($fp);
 121              chmod ("/var/remote_adm/tmp_$stat_srv.sh", 0600);
 122              // Si serveur maitre  renommage du script  tmp_master.sh en admin.sh
 123              if ($stat_srv == "maitre" ) {
 124                  // Si pas de presence de admin.sh
 125                  if ( !is_file("/var/remote_adm/admin.sh") ) {
 126                      // Renommage et chmod +x du script sur le maitre
 127                      rename ("/var/remote_adm/tmp_".$stat_srv.".sh", "/var/remote_adm/admin.sh");
 128                      chmod ("/var/remote_adm/admin.sh", 0750);
 129                      if (file_exists("/var/remote_adm/admin.sh")) {
 130                          echo $info_1;
 131                          $flag_sync = true;
 132                      } else {
 133                          echo $alerte_3;
 134                          // Dans ce cas la procedure de synchronisation est interrompue
 135                          exit;
 136                      }
 137                  } else {
 138                      // Message d'alerte  : Presence d'un admin.sh !!
 139                      echo $alerte_1.$stat_srv."&nbsp;".$cn_srv.$alerte_2;
 140                      // Dans ce cas la procedure de synchronisation est interrompue
 141                      exit;
 142                  }
 143              } elseif ( $stat_srv == "esclave" ) {
 144                  // Si serveur esclave : scp de admin.sh
 145                  //  Recherche de la presence d'un admin.sh sur le serveur esclave
 146                  exec ("ssh -l remote_adm $ipHostNumber 'ls /var/remote_adm/admin.sh'", $AllOutput, $ReturnValue);
 147                  // Si pas de presence de admin.sh sur l'esclave
 148                  if (! $AllOutput[0]) {
 149                      // Copie du script sur l'esclave avec scp
 150                      exec ("/usr/bin/scp /var/remote_adm/tmp_$stat_srv.sh remote_adm@$ipHostNumber:tmp_$stat_srv.sh", $AllOutput, $ReturnValue);
 151                      // chmod +x , renommage du script bash
 152                      exec ("ssh -l remote_adm  $ipHostNumber 'chmod +x /var/remote_adm/tmp_$stat_srv.sh;mv  /var/remote_adm/tmp_$stat_srv.sh /var/remote_adm/admin.sh'", $AllOutput, $ReturnValue);
 153                      if ($ReturnValue==0) {
 154                          echo $info_1;
 155                          $flag_sync = true;
 156                      } else {
 157                          echo $alerte_3;
 158                          // Dans ce cas la procedure de synchronisation est interrompue
 159                          exit;
 160                      }
 161                  } else {
 162                          // Message d'alerte : Presence d'un admin_esclave.sh !!
 163                          echo $alerte_1.$stat_srv."&nbsp;".$cn_srv.$alerte_2;
 164                          // Dans ce cas la procedure de synchronisation est interrompue
 165                          exit;
 166                  }
 167              }
 168              // Attente de synchro.txt et traitement du contenu dans le cas de srv esclave
 169              if ($stat_srv == "esclave" && $flag_sync ) {
 170                  // Attente et transfert sur le srv maitre de synchro.txt dans le cas du srv esclave
 171                  for ($wait=0; $wait<5; $wait++) {
 172                      if ( is_file("/tmp/end_synchro") ) {
 173                          break;
 174                      }
 175                      sleep (2);
 176                      exec ("scp remote_adm@$ipHostNumber:/tmp/synchro.txt /tmp", $AllOutput, $ReturnValue);
 177                  }
 178                  // Effacement de synchro.txt et end_synchro sur srv esclave
 179                  exec ("ssh -l remote_adm $ipHostNumber 'rm /tmp/end_synchro;rm /tmp/synchro.txt' ", $AllOutput, $ReturnValue);
 180                  system("touch /tmp/end_synchro");
 181              }
 182              // Attente de synchro.txt sur srv maitre
 183              if ($flag_sync ) {
 184                     // Attente de synchro.txt
 185                  $loop=0;
 186                  while ( $loop < 1000000 && !is_file("/tmp/end_synchro") ) {
 187                      $loop++;
 188                  }
 189              }
 190              // Interpretation de synchro.txt si il est present dans le cas contraire : Msg d'alerte n°4 !
 191              if ( is_file( "/tmp/synchro.txt" )  ) {
 192                  // Interpretation de synchro.txt
 193  
 194                  ##DEBUG1
 195                  if ($DEBUG) {
 196                      echo gettext("interpretation")." synchro.txt<br>";
 197                  } ## Fin DEBUG1
 198  
 199                  $loop=0; $loop1=0;$loop2=0;
 200                  // Lecture du fichier de synchro et initialisation du tableau $T_Ressources :
 201                  $file_synchro = @fopen ("/tmp/synchro.txt", "r") ;
 202                  if ($file_synchro ) {
 203                      while (!feof ( $file_synchro)) {
 204                          // Chargement d'un tableau groupe et memberUid
 205                          $res = fgets( $file_synchro, 50);
 206                          if (preg_split("/^Membres:Classe_/", $res)) {
 207                              $tmp = preg_split ("/[\:\]/",$res,3);
 208                              $T_Classes[$loop]=$tmp[1];
 209                              $loop++;
 210                              $loop1=0;
 211                              $loop2=0;
 212                          } elseif ( !preg_match("/^user:/", $res) && !preg_match("^Equipe:Classe", $res) && $res!="") {
 213                              $T_Ressources[$T_Classes[$loop-1]]["memberUid"][$loop1]=$res;
 214                              $loop1++;
 215                          } 
 216  /*
 217                                                    elseif (preg_match("/^user:/",$res) && !preg_match("/user::rwx/",$res) && $res!="") {
 218                              // elimination du bruit
 219                              $tmp = preg_split ("/[\:\]/",$res,3);
 220                              $T_Ressources[$T_Classes[$loop-1]]["member"][$loop2]=$tmp[1];
 221                              $loop2++;
 222                          }
 223  */
 224                      }
 225                  }
 226                  // Effacer synchro.txt et le marqueur end_synchro
 227                  exec (" rm /tmp/synchro.txt; rm /tmp/end_synchro");
 228  
 229                  ## DEBUG
 230                  if ($DEBUG) {
 231                      echo "<u>/var/se3</u> => ".gettext("Nbr Rep Ressources :") .count ($T_Classes)."<br><br>";
 232                      for ($loop=0; $loop<count ($T_Classes); $loop++) {
 233                          echo   $T_Classes[$loop]."<br>";
 234                          echo gettext("Nbr Membres Classe: ").count ($T_Ressources[$T_Classes[$loop]]["memberUid"])."<br>";
 235                          echo "<blockquote>";
 236                          for  ($loop1=0; $loop1<count ($T_Ressources[$T_Classes[$loop]]["memberUid"]); $loop1++) {
 237                              echo $T_Ressources[$T_Classes[$loop]]["memberUid"][$loop1]."<br>";
 238                          }
 239                          echo "</blockquote>";
 240  /*
 241                          echo gettext("Nbr Membres Equipe: ").count ($T_Ressources[$T_Classes[$loop]]["member"])."<br>";
 242                          echo "<blockquote>";
 243                          for  ($loop2=0; $loop2<count ($T_Ressources[$T_Classes[$loop]]["member"]); $loop2++) {
 244                              echo $T_Ressources[$T_Classes[$loop]]["member"][$loop2]."<br>";
 245                          }
 246                          echo "</blockquote>";
 247  */
 248                      }
 249                  } ## Fin DEBUG
 250  
 251                  // Recherche des membres des ressources dans l'annuaire et initialisation du tableau $T_Annuaire :
 252                  for ($loop=0; $loop<count ($T_Classes); $loop++) {
 253                      $uids = search_uids ("(cn=".$T_Classes[$loop].")");
 254                      $T_Annu[$loop]=$T_Classes[$loop];
 255                      for ($loop1=0; $loop1<count($uids); $loop1++) {
 256                          $T_Annu[$T_Classes[$loop]]["memberUid"][$loop1]=$uids[$loop1]["uid"];
 257                      }
 258                  }
 259  /*
 260                  for ($loop=0; $loop<count ($T_Classes); $loop++) {
 261                      $T_Equipe=preg_replace("/Classe_/","Equipe_",$T_Classes[$loop]);
 262                      $uids = search_uids ("(cn=$T_Equipe)");
 263                      for ($loop1=0; $loop1<count($uids); $loop1++) {
 264                          $T_Annu[$T_Classes[$loop]]["member"][$loop1]=$uids[$loop1]["uid"];
 265                      }
 266                  }
 267  */
 268                  ## DEBUG
 269                  if ($DEBUG) {
 270                      echo "<u>".gettext("Annuaire")."</u> => ".gettext("Nbr Rep Ressources : ").count ($T_Classes)."<br><br>";
 271                      for ($loop=0; $loop<count ($T_Classes); $loop++) {
 272                          echo   $T_Classes[$loop]."<br>";
 273                          echo gettext("Nbr Membres Classe: ").count ($T_Annu[$T_Classes[$loop]]["memberUid"])."<br>";
 274                          echo "<blockquote>";
 275                          for  ($loop1=0; $loop1<count ($T_Annu[$T_Classes[$loop]]["memberUid"]); $loop1++) {
 276                              echo $T_Annu[$T_Classes[$loop]]["memberUid"][$loop1]."<br>";
 277                          }
 278  /*
 279                          echo "</blockquote>";
 280                          echo gettext("Nbr Membres Equipe: ").count ($T_Annu[$T_Classes[$loop]]["member"])."<br>";
 281                          echo "<blockquote>";
 282                          for  ($loop2=0; $loop2<count ($T_Annu[$T_Classes[$loop]]["member"]); $loop2++) {
 283                              echo $T_Annu[$T_Classes[$loop]]["member"][$loop2]."<br>";
 284                          }
 285                          echo "</blockquote>";
 286  */
 287                      }
 288                  } ## Fin DEBUG
 289  
 290                  // Calcul d'un tableau differentiel de synchronisation
 291                  for ($loop=0; $loop<count($T_Classes);$loop++) {
 292                      $i=0;$k=0;
 293                      // Cas des membres de la classe
 294                      if ( count($T_Ressources[$T_Classes[$loop]]["memberUid"]) !=0) {
 295                          for ($loop1=0;$loop1<count($T_Annu[$T_Classes[$loop]]["memberUid"]);$loop1++) {
 296                              for ($loop2=0;$loop2<count($T_Ressources[$T_Classes[$loop]]["memberUid"]);$loop2++) {
 297                                  if  (preg_match(/$T_Annu[$T_Classes[$loop]]["memberUid"][$loop1]/,$T_Ressources[$T_Classes[$loop]]["memberUid"][$loop2]) ) {
 298                                      $found=true;
 299                                      break;
 300                                  }   else {  $found=false;  }
 301                              }
 302                              if ( !$found) {
 303                                  $T_diff[$T_Classes[$loop]]["memberUid"][$i]=$T_Annu[$T_Classes[$loop]]["memberUid"][$loop1] ;
 304                                  $i++;
 305                              }
 306                          }
 307                      } elseif (count($T_Annu[$T_Classes[$loop]]["memberUid"]) !=0) {
 308                          // Cas d'une classe creee sans membres dans la classe :(
 309                          if ($DEBUG) echo gettext("Cas d'une classe creee sans membre dans la classe, nbr member : ").count($T_Annu[$T_Classes[$loop]]["memberUid"])."<br>";
 310                          for ($loop1=0;$loop1<count($T_Annu[$T_Classes[$loop]]["memberUid"]);$loop1++) {
 311                              $T_diff[$T_Classes[$loop]]["memberUid"][$loop1]=$T_Annu[$T_Classes[$loop]]["memberUid"][$loop1] ;
 312                          }
 313                      }
 314  
 315                      // Cas des membres des equipes
 316  /*
 317                      if ( count($T_Ressources[$T_Classes[$loop]]["member"]) !=0) {
 318                          for ($loop1=0;$loop1<count($T_Annu[$T_Classes[$loop]]["member"]);$loop1++) {
 319                              for ($loop2=0;$loop2<count($T_Ressources[$T_Classes[$loop]]["member"]);$loop2++) {
 320                                  if  (preg_match(/$T_Annu[$T_Classes[$loop]]["member"][$loop1]/,$T_Ressources[$T_Classes[$loop]]["member"][$loop2]) ) {
 321                                      $found=true;
 322                                      break;
 323                                  } else {  $found=false;  }
 324                              }
 325                              if ( !$found) {
 326                                  $T_diff[$T_Classes[$loop]]["member"][$k]=$T_Annu[$T_Classes[$loop]]["member"][$loop1] ;
 327                                  $k++;
 328                              }
 329                          }
 330                      } elseif (count($T_Annu[$T_Classes[$loop]]["member"]) !=0 ) {
 331                          // Cas d'une classe creee sans membres dans l'equipe
 332                          if ($DEBUG) echo gettext("Cas d'une classe creee sans membre dans l'equipe, nbr member : ").count($T_Annu[$T_Classes[$loop]]["member"])."<br>";
 333                          for ($loop1=0;$loop1<count($T_Annu[$T_Classes[$loop]]["member"]);$loop1++) {
 334                              $T_diff[$T_Classes[$loop]]["member"][$loop1]=$T_Annu[$T_Classes[$loop]]["member"][$loop1] ;
 335                          }
 336                      }
 337  */
 338                  }
 339                  if ($DEBUG) echo "DEBUG >> ".count ($T_diff[$T_Classes[$loop]]["member"])."<br>";
 340  
 341                  // Fin Calcul du tableau differentiel de synchronisation
 342                  // Verification si il y a necessite d'une synchro
 343                  for ($loop=0; $loop<count ($T_Classes); $loop++)  {
 344                      if ( count ($T_diff[$T_Classes[$loop]]["memberUid"]) > 0
 345                                               # || count ($T_diff[$T_Classes[$loop]]["member"]) > 0
 346                          ) { $synchro=true; } else $synchro=false;
 347                      if ($synchro) break;
 348                  }
 349                  // [Phase 2] Synchronisation
 350                  if ($synchro) {
 351                      // Affichage du contenu du tableau differentiel de synchronisation
 352                      echo "<p><u>".gettext("Une op&#233ration de synchronisation est n&#233cessaire sur")."</u> :<br><br>";
 353                      for ($loop=0; $loop<count ($T_Classes); $loop++) {
 354                          if ( count ($T_diff[$T_Classes[$loop]]["memberUid"]) > 0 || count ($T_diff[$T_Classes[$loop]]["member"]) > 0 ) {
 355                              echo "<table border=1px cellspacing=0 cellpadding=0  align=center width=70%>\n<tr>\n<td>\n<h3 style=\"text-align:center\">";
 356                              echo   $T_Classes[$loop]."</h3>\n</td>\n</tr>\n<tr>\n<td width=50%>\n".gettext("Cr&#233;ation des r&#233;pertoire &#233;leves pour :")."</td>\n</tr>\n<tr>";
 357                              if ( count ($T_diff[$T_Classes[$loop]]["memberUid"]) > 0 ) {
 358                                  echo "<td>";
 359                                  for  ($loop1=0; $loop1<count ($T_diff[$T_Classes[$loop]]["memberUid"]); $loop1++) {
 360                                      echo "&nbsp;".$T_diff[$T_Classes[$loop]]["memberUid"][$loop1]."<br>";
 361                                  }
 362                                  echo "</td>";
 363                              } else echo "<td>".gettext("Pas d'&#233;l&#232;ves &#224; ajouter")."</td>";
 364  /*
 365                              if ( count ($T_diff[$T_Classes[$loop]]["member"]) > 0 ) {
 366                                  echo "<td>";
 367                                  for  ($loop2=0; $loop2<count ($T_diff[$T_Classes[$loop]]["member"]); $loop2++) {;
 368                                      echo "&nbsp;".$T_diff[$T_Classes[$loop]]["member"][$loop2]."<br>";
 369                                  }
 370                                  echo "</td>";
 371                              } else echo "<td>".gettext("Pas de professeurs &#224 ajouter")."</td>";
 372  */
 373                              echo "</tr></table><br>";
 374                          }
 375                      }
 376                      // Fin Affichage du tableau differentiel de synchronisation
 377                      // Fabrication du script admin.sh pour synchroniser les partages
 378                      $commandes = "#!/bin/bash\n";
 379                      $commandes .= "#".gettext("Script de synchronisation des partages Classes\n");
 380  #                    $commandes.="\n#".gettext("Application des acl posix pour les professeurs de l'equipe pedagogique\n");
 381                      for ($loop=0; $loop<count($T_Classes); $loop++) {
 382                          $folder_classe = "/var/se3/Classes/".$T_Classes[$loop];
 383  /*
 384                          for ($loop1=0; $loop1<count($T_diff[$T_Classes[$loop]]["member"]); $loop1++) {
 385                              $prof = $T_diff[$T_Classes[$loop]]["member"][$loop1];
 386                              $commandes.="setfacl -R -m d:u:$prof:rwx $folder_classe\n";
 387                              $commandes.="setfacl -m u:$prof:rx $folder_classe\n";
 388                              $commandes.="setfacl -R -m u:$prof:rwx $folder_classe/*\n";
 389                              $commandes.="\n";
 390                          }
 391  */
 392                          if (count($T_diff[$T_Classes[$loop]]["memberUid"])>0) $commandes.="#".gettext("Creation des sous dossiers eleves\n");
 393                          for ($loop1=0; $loop1<count($T_diff[$T_Classes[$loop]]["memberUid"]); $loop1++) {
 394                              $eleve = $T_diff[$T_Classes[$loop]]["memberUid"][$loop1];
 395                              $commandes.="mkdir $folder_classe/$eleve\n";
 396                              $commandes.="chown admin:nogroup $folder_classe/$eleve\n";
 397                              $commandes.="chmod 700 $folder_classe/$eleve\n";
 398                              $commandes.="setfacl -m u:$eleve:rwx $folder_classe/$eleve\n";
 399                              $commandes.="setfacl -m d:u:$eleve:rwx $folder_classe/$eleve\n";
 400                              $commandes.="setfacl -m m::rwx $folder_classe/$eleve\n";
 401                              $commandes.="\n";
 402                          }
 403                      }
 404                      // mel CR de synchronisation des ressources Classes
 405                      $Subject=gettext("[SE3 T&#226;che d'administration] Synchronisation des ressources Classes sur")." $stat_srv $cn_srv\n";
 406                       list($user,$groups)=people_get_variables("admin", true);
 407                      $mel_adm=$user["email"];
 408                      $commandes.="\n#".gettext("Mel CR Synchronisation des ressources Classes sur")." $stat_srv $cn_srv\n";
 409                      $commandes.="cat > /tmp/admind.tmp <<-EOF\n";
 410                      $commandes.= gettext("La synchronisation des ressources Classes suivantes :\n");
 411                      for ($loop=0; $loop<count ($T_Classes); $loop++) {
 412                          if ( count ($T_diff[$T_Classes[$loop]]["memberUid"]) > 0 || count ($T_diff[$T_Classes[$loop]]["member"]) > 0 )
 413                              $commandes.=$T_Classes[$loop]."\n";
 414                          }
 415                      $commandes.= gettext("sur le serveur")." $stat_srv $cn_srv ".gettext("a &#233;t&#233; effectu&#233;e avec succ&#232s.\n");
 416                      $commandes.= "\n";
 417                      $commandes.= "EOF\n";
 418                      $commandes.= "mail -s \"$Subject\" $mel_adm < /tmp/admind.tmp\n";
 419                      // Fin Fabrication du script admin.sh pour synchroniser les partages
 420                      ## DEBUG
 421                      // Affichage du script admin.sh de synchro
 422                      if ($DEBUG) {
 423                          $tmp=$commandes;
 424                          $tmp=preg_replace("/\n/","<br>",$tmp);
 425                          echo $tmp."<br>";
 426                      }## Fin DEBUG
 427                      // Depot du script admin.sh sur le maitre
 428                      $fp=@fopen("/var/remote_adm/tmp_".$stat_srv.".sh","w");
 429                      if($fp) {
 430                          fputs($fp,$commandes."\n");
 431                          fclose($fp);
 432                          chmod ("/var/remote_adm/tmp_$stat_srv.sh", 0600);
 433                          // Si serveur maitre  renommage du script  tmp_master.sh en admin.sh
 434                          if ($stat_srv == "maitre" ) {
 435                              sleep (2);
 436                              // Si pas de presence de admin.sh
 437                              if ( !is_file("/var/remote_adm/admin.sh") ) {
 438                                  // Renommage et chmod +x du script sur le maitre
 439                                  rename ("/var/remote_adm/tmp_".$stat_srv.".sh", "/var/remote_adm/admin.sh");
 440                                  chmod ("/var/remote_adm/admin.sh", 0750);
 441                                  if (file_exists("/var/remote_adm/admin.sh")) {
 442                                      echo $info_2;
 443                                  } else {
 444                                      echo $alerte_3;
 445                                      // Dans ce cas la procedure de synchronisation est interrompue
 446                                      exit;
 447                                  }
 448                              } else {
 449                                  // Message d'alerte  : Presence d'un admin.sh !!
 450                                  echo $alerte_1.$stat_srv."&nbsp;".$cn_srv.$alerte_2;
 451                                  // Dans ce cas la procedure de synchronisation est interrompue
 452                                  exit;
 453                              }
 454                          } else {
 455                              // Si serveur esclave : scp de admin.sh sur le srv esclave
 456                              //  Recherche de la presence d'un admin.sh sur le serveur esclave
 457                              exec ("ssh -l remote_adm $ipHostNumber 'ls /var/remote_adm/admin.sh'", $AllOutput, $ReturnValue);
 458                              // Si pas de presence de admin.sh sur l'esclave
 459                              if (! $AllOutput[0]) {
 460                                  // Copie du script sur l'esclave avec scp
 461                                  exec ("scp /var/remote_adm/tmp_$stat_srv.sh remote_adm@$ipHostNumber:tmp_$stat_srv.sh", $AllOutput, $ReturnValue);
 462                                  // chmod +x , renommage du script bash
 463                                  exec ("ssh -l remote_adm  $ipHostNumber 'chmod +x /var/remote_adm/tmp_$stat_srv.sh;mv  /var/remote_adm/tmp_$stat_srv.sh /var/remote_adm/admin.sh'", $AllOutput, $ReturnValue);
 464                                  if ($ReturnValue==0) {
 465                                      echo $info_2;
 466                                      // Effacement de tmp_esclave.sh cr&#233;&#233; sur le maitre
 467                                      unlink ("/var/remote_adm/tmp_esclave.sh");
 468                                  } else {
 469                                      echo $alerte_3;
 470                                      // Dans ce cas la procedure de synchronisation est interrompue
 471                                      exit;
 472                                  }
 473                              } else {
 474                                  // Message d'alerte : Presence d'un admin_esclave.sh !!
 475                                  echo $alerte_1.$stat_srv."&nbsp;".$cn_srv.$alerte_2;
 476                                  // Dans ce cas la procedure de synchronisation est interrompue
 477                                  exit;
 478                              }
 479                          }
 480                      } else {
 481                          echo $alerte_5;
 482                      }
 483                  } else {
 484                      echo $info_3.$stat_srv."&nbsp;".$cn_srv.".";
 485                  }
 486              } else {
 487                  echo $alerte_4;
 488              }
 489          } else {
 490              echo $alerte_6;
 491          }
 492      }
 493  }  // Fin is_admin
 494  include ("pdp.inc.php");
 495  ?>


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