[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
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 êtes administrateur du serveur SE3.<BR>Avec le menu ci-dessous, vous pouvez synchroniser les sous répertoires Classes avec la base des utilisateurs de votre annuaire.<p><u>Contexte d'usage</u> :<br><blockquote><li>Vous avez créé des ressources classes à partir du menu «Créer partages classes».<li>Vous avez ultérieurement créé des membres dans les groupes classes de votre annuaire.</blockquote><p>Avec le menu «synchronisation répertoire classes» vous programmez un opération de synchrornisation entre le contenu des groupes Classes de l'annuaire et les sous répertoires de chaque classe, c'est à dire qu'il y aura création des sous-répertoires des nouveaux membres des groupes Classes et application des droits nécessaires aux membres des Equipes. <p>La procédure de synchronisation se déroulera en deux phases :<li><u>1çre phase</u> : Recherche des ressources à synchroniser,</li><li><u>2çme phase</u> : Synchronisation des ressources.</li><p><i>Nota</i> : Le processus de synchronisation (en particulier) dans le cas d'un serveur esclave peut être 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 été prise en compte car une tâche d'administration est en cours sur le serveur <b>"); 52 $alerte_2=gettext("</b>, veuillez réitérer votre demande plus tard. Si le problçme 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 échouée. Si le problçme 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 à échouée ! Si le problçme persiste, veuillez contacter le super-utilisateur du serveur SE3.")." </div><BR>\n"; 55 $alerte_5="<div class='error_msg'>".gettext("ERREUR : Impossible de créer 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éer 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âche de recherche des ressources classe à synchroniser est ordonnancée...<BR>"); 60 $info_2 = gettext("<b>[phase 2]</b> Une tâche de synchronisation est ordonnancée...<BR>Vous recevrez un mè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 à synchroniser sur le serveur "); 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élection du serveur ou vous souhaitez créer 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"]." <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éinitialiser la sélection")."\">\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ésentes 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." ".$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." ".$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ération de synchronisation est nécessaire 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éation des répertoire é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 " ".$T_diff[$T_Classes[$loop]]["memberUid"][$loop1]."<br>"; 361 } 362 echo "</td>"; 363 } else echo "<td>".gettext("Pas d'élèves à 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 " ".$T_diff[$T_Classes[$loop]]["member"][$loop2]."<br>"; 369 } 370 echo "</td>"; 371 } else echo "<td>".gettext("Pas de professeurs à 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â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 été effectuée avec succès.\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." ".$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éé 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." ".$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." ".$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 ?>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Tue Mar 17 22:47:18 2015 | Cross-referenced by PHPXref 0.7.1 |