:> jean-luc.chretien@tice.ac-caen.fr
* @auteurs Equipe TICE Crdp de Caen
* @auteurs Olivier LECLUSE
* @Licence Distribue selon les termes de la licence GPL
* @note Ce script est conserve pour le cas d'un serveur esclave avec repertoires classes deportes (utilise admind)
* @note Remplace par rep_classe.php
*/
/**
* @Repertoire: partages/
* file: delete_folders_classes.php
*/
include "entete.inc.php";
include "ldap.inc.php";
include "ihm.inc.php";
require_once ("lang.inc.php");
bindtextdomain('se3-partages',"/var/www/se3/locale");
textdomain ('se3-partages');
if (is_admin("se3_is_admin",$login)=="Y") {
echo "
".gettext("Suppression de répertoire classe")."
";
// Definition des messages d'alerte
$alerte_1="".gettext("Votre demande de suppression de ressources classes n'a pas été prise en compte car une tâche d'administration est en cours sur le serveur ");
$alerte_2=gettext(", veuillez réitérer votre demande plus tard. Si le problème persiste, veuillez contacter le super-utilisateur du serveur SE3.")."
\n";
$alerte_3="".gettext("Votre demande de suppression de ressources classes a échouée. Si le problème persiste, veuillez contacter le super-utilisateur du serveur SE3.")."
\n";
// Definition des messages d'info
$info_1 = gettext("Cette tâche est ordonnancée, vous recevrez un mail de confirmation de suppression de ressources dans quelques instants...");
// Prepositionnement variables
$mono_srv = false;
$multi_srv = false;
// Recherche de la nature mono ou multi serveur de la plateforme SE3
$master=search_machines ("(l=maitre)", "computers");
$slaves= search_machines ("(l=esclave)", "computers");
if ( count($master) == 0 ) {
echo gettext("ERREUR : Il n'y a pas de serveur maitre déclaré dans l'annuaire !
Veuillez contacter le super utilisateur du serveur SE3.
");
} elseif ( count($master) == 1 && count($slaves) == 0 ) {
// Plateforme mono-serveur
$mono_srv = true;
} elseif ( count($master) == 1 && count($slaves) > 0 ) {
$multi_srv = true;
}
// Fin Recherche de la nature mono ou multi serveur de la plateforme SE3
if ( $mono_srv ) {
// configuration mono serveur : determination des parametres du serveur
$serveur=search_machines ("(l=maitre)", "computers");
$cn_srv= $serveur[0]["cn"];
$stat_srv = $serveur[0]["l"];
$ipHostNumber = $serveur[0]["ipHostNumber"];
} elseif ($multi_srv) {
// configuration multi-serveurs : presentation d'un form de selection du serveur
if ( !$selected_srv && !$del_folders_classes) {
echo "".gettext("Sélection du serveur ou vous souhaitez supprimer des ressources classes:")."
";
$servers=search_computers ("(|(l=esclave)(l=maitre))");
echo "\n";
echo $form;
} elseif ( $selected_srv && $multi_srv) {
// configuration multi serveurs : determination des parametres du serveur
$serveur=search_machines ("(cn=$cn_srv)", "computers");
$stat_srv = $serveur[0]["l"];
$ipHostNumber = $serveur[0]["ipHostNumber"];
}
}
// Recherche des ressources classes existantes
if ($stat_srv == "maitre") {
// Serveur maitre : Recherche des ressources classes existantes
// ouverture du repertoire Classes
$loop=0;
$repClasses = dir ("/var/se3/Classes/");
// recuperation de chaque entree
while ($ressource = $repClasses->read()) {
if ( preg("/^Classe_/", $ressource) ) {
$list_ressources[$loop]= $ressource;
$loop++;
}
}
$repClasses->close();
} elseif ($stat_srv == "esclave") {
// Serveur esclave : Recherche des ressources classes existantes
exec ("ssh -l remote_adm $ipHostNumber 'ls /var/se3/Classes'", $list_ressources, $ReturnValue);
}
// Fin Recherche des ressources classes existantes
// Presentaion du formulaire de selection des ressources a supprimer
if ( (!$del_folders_classes && ($stat_srv == "maitre" || $stat_srv == "esclave") ) || ( $del_folders_classes && count($list_del_classes)==0 ) ) {
echo "".gettext("Suppression de ressources Classes sur le serveur "). "$cn_srv
\n";
if (count($list_ressources) == 0 ) {
echo "".gettext("Pas de ressources a supprimer sur ce serveur !")."
\n";
} else {
if ( count($list_ressources)>10) $size=10; else $size=count($list_ressources);
echo "\n";
// Verification selection d'au moins une classe
if ( $del_folders_classes && count($list_del_classes)==0 ) {
echo "".gettext("Vous devez sélectionner au moins une classe !")."
\n";
}
}
} elseif ($del_folders_classes) {
// Creation du script bash
echo "".gettext("Vous avez sélectionné "). count($list_del_classes).gettext(" classe(s) à supprimer sur le serveur")." $stat_srv $cn_srv
\n";
// Construction du script admin.sh
$path_Classes="/var/se3/Classes";
$commandes = "#!/bin/bash\n";
$commandes .="#".gettext(" Effacement repertoire(s) Classe")." \n";
$commandes .="cd $path_Classes\n";
for ($loop=0; $loop /tmp/admind.tmp <<-EOF\n";
$commandes.= gettext("La suppression des ressources Classes suivantes :\n");
for ($loop=0; $loop < count($list_del_classes); $loop++) {
$commandes.=$list_del_classes[$loop]."\n";
}
$commandes.= gettext("sur le serveur")." $cn_srv ".gettext("a été effectuée avec succès.")."\n";
$commandes.= "\n";
$commandes.= "EOF\n";
$commandes.= "mail -s \"$Subject\" $mel_adm < /tmp/admind.tmp\n";
// Depot du script tmp_$stat_srv.sh sur le serveur maitre
$fp=@fopen("/var/remote_adm/tmp_".$stat_srv.".sh","w");
if($fp) {
fputs($fp,$commandes."\n");
fclose($fp);
chmod ("/var/remote_adm/tmp_$stat_srv.sh", 0600);
// Si creation sur le maitre
if ( $stat_srv == "maitre" ) {
// Si pas de presence de admin.sh
if ( !is_file("/var/remote_adm/admin.sh") ) {
// Renommage et chmod +x du script sur le maitre
rename ("/var/remote_adm/tmp_".$stat_srv.".sh", "/var/remote_adm/admin.sh");
chmod ("/var/remote_adm/admin.sh", 0700);
if (file_exists("/var/remote_adm/admin.sh"))
echo $info_1;
else echo $alerte_3;
} else {
// Message d'alerte : Presence d'un admin.sh !!
echo $alerte_1.$stat_srv." ".$cn_srv.$alerte_2;
}
// Si creation sur un esclave copie du maitre vers l'esclave
} elseif ( $stat_srv == "esclave" ) {
// Recherche de la presence d'un admin.sh sur le serveur esclave
exec ("ssh -l remote_adm $ipHostNumber 'ls /var/remote_adm/admin.sh'", $AllOutput, $ReturnValue);
// Si pas de presence de admin.sh sur l'esclave
if (! $AllOutput[0]) {
// Copie du script sur l'esclave avec scp
exec ("/usr/bin/scp /var/remote_adm/tmp_$stat_srv.sh remote_adm@$ipHostNumber:tmp_$stat_srv.sh", $AllOutput, $ReturnValue);
// chmod +x , renommage du script bash et gogogo
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);
if ($ReturnValue==0) {
// Effacement de tmp_esclave.sh cree sur le maitre
unlink ("/var/remote_adm/tmp_esclave.sh");
echo $info_1;
}else echo $alerte_3;
} else {
// Message d'alerte : Presence d'un admin.sh sur l'esclave!!
echo $alerte_1.$stat_srv." ".$cn_srv.$alerte_2;
}
}
} else {
echo "".gettext("ERREUR : Impossible de créer le fichier"). "$path_to_wwwse3/Admin/tmp_$stat_srv
\n";
}
} // Fin creation du script bash
} // Fin if is_admin
include ("pdp.inc.php");
?>