"); $DEBUG=="false"; function draw_table_result ( $msg_cat, $type1, $type2, $type3, $mode="" ) { $html="\n"; $html.="\n"; $html.="\n"; $html.="\n"; $html.="\n"; $html.="\n"; $html.="\n"; if($mode=='') { $html.="\n"; $html.="\n"; $html.="\n"; } else { $html.="\n"; $html.="\n"; $html.="\n"; } $html.="\n"; $html.="\n"; echo $html; } // Fin function draw_table_result /** * Fonction qui affiche les info-bulles * @Parametres msg le n du message a afficher * @return l'info-bulle */ function msgaide($msg) { return (" "); } $msg1="Recherche les comptes des utilisateurs qui ne sont plus affectés à un groupe principal et transfert ces comptes à la corbeille."; $msg2="Visualise la liste des comptes transférés dans la corbeille."; $msg3="Permet de réactiver un ou des comptes sous reserve que les uid et/ou les uidNumber de ces comptes soient encore libre."; $msg4="Efface les répertoires homes des utilisateurs situés dans la corbeille."; $msg4bis="Déplace les répertoires homes des utilisateurs situés dans la corbeille vers le dossier temporaire
/home/admin/_Trash_users.
"; $msg4bis.="Cela donne un délais avant effacement et laisse la place libre dans /home/ pour un nouveau compte de meme uid."; $msg5="Supprime les comptes de la corbeille !
ATTENTION : Ne supprimer les comptes de la corbeille que lorsque vous avez effectué l\'effacement des homes sur l\'ensemble des serveurs qui partagent votre annuaire avec votre LCS ou votre SE3.
"; $msg5 .="Le système lance ensuite une recherche des fichiers n\'appartenant plus à personne sur les ressources partagées de /var/se3 "; $msg6="Ce compte, n\'est pas récupérable car il possède un uid ou un uidnumber désormais occupé."; $msg7="Programme un scanne des partitions de stockage /home et /var/se3 à 20h00. le scanne recherche les fichiers qui n\'appartiennent plus à personne. Cela arrive lorsqu\'un utilsateur est parti mais qu\'il a laissé des fichiers en place."; $msg8="Supprime le répertoire temporaire
/home/admin/_Trash_users dans lequel sont stockés d\'anciens homes."; // Messages $msg_confirm = "Avant de vider la corbeille, assurez-vous d'avoir préalablement nettoyé les homes des comptes orphelins sur l'ensemble des serveurs qui partagent votre annuaire avec SE3.
"; $msg_confirm .= "Nettoyage !"; echo "\n"; echo " \n"; echo " ...::: Interface d'administration Serveur SE3 :::...\n"; // Initialisation variables : $PHP_SELF = $_SERVER['PHP_SELF']; // Methode POST $filtre = $_POST['filtre']; //$filter_type = $_POST['filter']; $filter_type = $_POST['filter_type']; $nbr = $_POST['nbr']; $cat = $_POST['cat']; // Methodes POST ou GET if ( isset($_POST['phase']) ) $phase = $_POST['phase']; elseif ( isset($_GET['phase']) ) $phase = $_GET['phase']; if ( isset($_POST['do']) ) $do = $_POST['do']; elseif ( isset($_GET['do']) ) $do = $_GET['do']; $mode_clean=isset($_POST['mode_clean']) ? $_POST['mode_clean'] : (isset($_GET['mode_clean']) ? $_GET['mode_clean'] : NULL); // Redirection vers phase suivante, gestion du sablier ### DEBUG echo "debug1 do:$do phase:$phase
"; // Cas 1 : Transfert des utilisateurs dans la Trash if( $do==1 && $phase!=1 ) { ### DEBUG echo "debug2 do:$do phase:$phase
"; echo "\n"; } // Cas 2 : Examiner le contenu de la corbeille if( $do==2 && $phase!=1 ) { ### DEBUG echo "debug2 do:$do phase:$phase
"; echo "\n"; } // Cas 3 : Effacer les homes des comptes orphelins if( $do==3 && $phase!=1 ) { ### DEBUG echo "debug2 do:$do phase:$phase
"; if(isset($mode_clean)) { echo "\n"; } else { echo "\n"; } } // Cas 4 : Vider la corbeille if( $do==4 && $phase==1 ) { ### DEBUG echo "debug2 do:$do phase:$phase
"; echo "\n"; } // Cas 10 : Recuperation des utilisateurs de Trash vers People if( $do==10 && $phase==2 ) { ### DEBUG echo "debug2 $do $phase
"; echo "\n"; } // Fin traitement des redirections echo " \n"; echo " \n"; //if (is_admin("se3_is_admin",$login)=="Y") { //Aide $_SESSION["pageaide"]="Annuaire#Nettoyage_des_comptes"; $html = "

Gestion des comptes orphelins

\n"; $html .= "

Opérations courantes

\n"; if ($do !="1") $html .= "
  • Transfert des comptes orphelins dans la corbeille".msgaide($msg1)."
  • \n"; if ($do !="2") $html .= "
  • Examiner le contenu de la corbeille".msgaide($msg2)."
  • \n"; $html .= "
  • Récupération de comptes orphelins depuis la corbeille".msgaide($msg3)."
  • \n"; //if ($do !="3") $html .= "
  • Effacer les homes des comptes orphelins".msgaide($msg4)."
  • \n"; if ($do !="3") { $html .= "
  • Effacer les «homes» des comptes orphelins".msgaide($msg4)."ou les deplacer vers un dossier temporaire _Trash_users".msgaide($msg4bis)."
  • \n"; $html .= "
  • Supprimer le dossier temporaire _Trash_users".msgaide($msg8)."
  • \n"; } if ($do !="4") $html .= "
  • Vider la corbeille et purger les fichiers inutiles sur /var/se3".msgaide($msg5)."

  • \n"; $html .= "

    Résolution de problème

    \n"; $html .= "
  • Programmer la recherche et la suppression des fichiers utilisateurs obsolètes sur les partitions de stockage".msgaide($msg7)."
  • \n"; $html .="

    "; echo $html; // Actions switch ($do) { case 1: // Transfert des comptes orphelins dans la corbeille if ( $phase != 1 ) // Affichage du sablier echo "
     Transfert des comptes orphelins dans la corbeille en cours. Veuillez patienter...
    "; else { // On commence par controler s'il n'y a pas des utilisateurs qui ne sont plus ni dans Profs ni dans Eleves alors qu'ils ont le droit no_Trash_user $tmp_tab_no_Trash_user=gof_members("no_Trash_user","rights",1); if(count($tmp_tab_no_Trash_user)>0) { echo "

    Controle des titulaires du droit no_Trash_user avant d'effectuer le transfert des comptes orphelins.

    \n"; echo "
    \n"; $cpt_retablissement_no_trash=0; $attribut=array("cn"); for($loop=0;$loop"; /* $grp_no_Trash=""; $tabtmp=get_tab_attribut("groups", "(&(cn=Profs)(memberuid=$uid))", $attribut); if(count($tabtmp)>0) { $grp_no_Trash="Profs"; } else { $tabtmp=get_tab_attribut("groups", "(&(cn=Eleves)(memberuid=$uid))", $attribut); if(count($tabtmp)>0) { $grp_no_Trash="Eleves"; } } */ // S'ils ont ete supprimes de Eleves et Profs, on ne peut plus les reaffecter dans le bon groupe // Par defaut, on les declare Profs (parce qu'il y a plus de chance qu'on mette un Prof en no_Trash_user qu'un eleve) et on alerte. $grp_no_Trash="Profs"; //echo "\$grp_no_Trash=$grp_no_Trash
    "; //if($grp_no_Trash!="") { if(($grp_no_Trash!="")&&($uid!="admin")) { $attribut=array("uid"); $compte_existe=get_tab_attribut("people", "uid=$uid", $attribut); if(count($compte_existe)==0) { // Le compte n'existe plus... et on a oublie de nettoyer no_Trash_user $attributs=array(); $attributs["member"]="uid=$uid,".$dn["people"]; echo "Le compte $uid n'existe plus.
    Suppression de l'association de $uid au droit no_Trash_user: "; if(modify_attribut("cn=no_Trash_user", "rights", $attributs, "del")) { echo "SUCCES"; } else { echo "ECHEC"; } } else { // On controle si le compte est membre du groupe $grp_no_Trash $attribut=array("memberuid"); $memberUid=get_tab_attribut("groups", "(&(cn=$grp_no_Trash)(memberuid=$uid))", $attribut); if(count($memberUid)>0) { echo "$uid est deja membre du groupe $grp_no_Trash."; } else { echo "Rétablissement de $uid comme membre du groupe $grp_no_Trash: "; $attributs=array(); $attributs["memberuid"]=$uid; if(modify_attribut ("cn=$grp_no_Trash", "groups", $attributs, "add")) { echo "SUCCES"; } else { echo "ECHEC"; } $cpt_retablissement_no_trash++; } } echo "
    \n"; } } if($cpt_retablissement_no_trash>0) { echo "

    Un ou des utilisateurs ont été rétablis comme membres du groupe Profs pour éviter une mise à la corbeille.
    Si ce n'était pas leur groupe d'appartenance initiale, il faudra corriger manuellement dans Annuaire/Accès à l'annuaire

    \n"; } echo "
    \n"; } // Transfert des comptes orphelins dans la corbeille exec ("/usr/share/se3/sbin/searchAndDelete.pl" ,$AllOutPut,$ReturnValue); if ($ReturnValue == "0") echo "Le transfert des comptes orphelins dans la corbeille s'est déroulé avec succès.
    "; else echo "
    Echec du tansfert des comptes orphelins dans la corbeille !
    "; } break; case 2 : //Examiner le contenu de la corbeille if ( $phase != 1 ) // Affichage du sablier echo "
     Examen du contenu de la poubelle. Veuillez patienter...
    "; else { $users = search_people_trash ("cn=*"); echo "

    \"Corbeille\" Il y a ".count($users)." utilisateur"; if (count($users) > 1 ) echo "s"; echo " dans la corbeille.

    \n"; echo "\n"; } break; case 3 : // Nettoyage des repertoires home if ( $phase != 1 ) // Affichage du sablier echo "
     Le nettoyage des répertoires «homes» est en cours. Veuillez patienter...
    "; else { //echo "\$_GET['mode_clean']=".$_GET['mode_clean']."
    "; if($mode_clean=='mv') { echo "

    Déplacement des homes des comptes orhelins en cours...

    "; system ("/usr/bin/sudo /usr/share/se3/scripts/clean_homes.sh -m" ,$ReturnValue); //echo "\$ReturnValue=$ReturnValue
    "; if($ReturnValue!="0") {echo "
    Une erreur s'est produite !
    ";} for($loop=0;$loop"; echo $AllOutPut[$loop]." "; } echo "

    Terminé.

    \n"; } else { system ("/usr/bin/sudo /usr/share/se3/scripts/clean_homes.sh -d" ,$ReturnValue); if ($ReturnValue == "0") { echo "Le nettoyage des répertoires «homes» s'est déroulé avec succès.
    "; } else { echo "
    Echec du nettoyage des répertoires «homes» !
    "; } } } break; case 4; // Vidage de la corbeille if ( $phase != 1 && $phase != 2 ) // Affichage du message de confirmation echo "
    $msg_confirm
    "; elseif ($phase == 1 ) // Affichage du sablier echo "
     Vidage de la corbeille en cours. Veuillez patienter...
    "; elseif ($phase == 2 ) { //echo "Le nettoyage de la corbeille s'est déroulé avec succès.
    "; $users = search_people_trash ("cn=*"); for ($loop=0; $loop
    "; echo "Une recherche sur les ressources partagées pour suppression des fichiers obsolètes a été lancée en arrière plan.
    "; echo "Un mail récapitulatif vous sera envoyé"; system ("/usr/bin/sudo /usr/share/se3/scripts/clean_homes.sh -sv " ,$ReturnValue); // if ($ReturnValue == "0") { // echo "
    Le nettoyage de /var/se3 s'est déroulé avec succès.
    "; // } // else { // echo "
    Echec du nettoyage des répertoires «/var/se3» !
    "; // } } else echo "
    Echec du nettoyage de la corbeille !
    "; } break; case 5 : //Grand menage !! echo "

    Grand ménage : suppression des fichiers obsolètes sur /home et /var/se3

    "; system ("/usr/bin/sudo /usr/share/se3/scripts/clean_homes.sh -sc" ,$ReturnValue); //echo "\$ReturnValue=$ReturnValue
    "; if($ReturnValue!="0") {echo "
    Une erreur s'est produite???
    ";} else { echo "
    Programmation pour 20h00 effectuée, un mail récapitulatif vous sera envoyé.
    "; } break; echo "Un mail récapitulatif vous sera envoyé"; case 6 : //Supression de trash_users !! echo "

    Supression du dossier /home/admin/Trash_users en cours....

    "; system ("/usr/bin/sudo /usr/share/se3/scripts/clean_homes.sh -t" ,$ReturnValue); //echo "\$ReturnValue=$ReturnValue
    "; if($ReturnValue!="0") { echo "
    Une erreur s'est produite !
    "; } else { echo "
    Suppression Ok !
    "; } break; case 10; // Recuperation de comptes orphelins // Choix d'un filtre de recherche if ( $phase != 1 && $phase != 2 && $phase != 3) { $html="

    Recherche des comptes orphelins à transférer :

    \n"; $html.="
    \n"; $html.="
    \n"; $html.="Filtre de recherche "; $html.="\n"; $html.="\n"; $html.="\n"; $html.="\n"; $html.="
    \n"; echo $html; } elseif ( $phase == 1 ) { // Affichage de la liste des comptes orphelins // Interpretation du type de filtre if ($filter_type == "contient" ) if ($filtre!="*") $filtre="*".$filtre."*"; if ($filter_type == "commence" ) $filtre=$filtre."*"; if ($filter_type == "finit" ) $filtre="*".$filtre; // Recherche des utilisateurs repondant au critere $users = search_people_trash ("cn=$filtre"); echo "
    \"Corbeille\" Il y a ".count($users)." utilisateur"; if ( count($users) >= 2 ) echo "s"; echo " dans la corbeille qui répond"; if ( count($users) >= 2 ) echo "ent"; echo " au filtre de recherche.
    \n"; // Affichage de la liste des utilisateurs a recuperer if ( count($users) > 0) { $html="
    \n"; // Tableau d'affichage des resultats draw_table_result ("Catégorie", "Eleve", "Professeur", "Administratif","waouh"); for ($loop=0; $loop\n"; $NoRecup = false; # test si on peut recuperer le compte $attribut[0]="uidnumber"; $tab=get_tab_attribut("people", "uid=*", $attribut); for($i=0;$i\n"; } else { $html.="
    \n"; $html.="\n"; $html.="\n"; } } $html.="\n
    Utilisateur$msg_cat
    $type1$type2$type3$type1
    "; $html.=""; $html.=" / "; $html.=""; $html.="
    $type2
    "; $html.=""; $html.=" / "; $html.=""; $html.="
    $type3
    "; $html.=""; $html.=" / "; $html.=""; $html.="
    \n"; $html.="\n"; $html.="\n"; $html.="
    \n"; $html.="\n"; $html.=" \n"; $html.="
    \n"; $html.="\n"; } else $html = "
    Pas de transfert à effectuer !
    \n"; echo $html; } elseif ( $phase == 2 ) { // Transfert des comptes de trash -> peoples et positionnement des groupes principaux // Transfert des utilisateurs selectionne dans /tmp/list_recup for ($loop=0; $loop<$nbr;$loop++) { if ( isset($cat[$loop]) ) { $tmp = $cat[$loop]; exec ("echo $tmp >> /tmp/list_recup"); } } // Affichage du sablier echo "
    Récupération des comptes orphelins en cours. Veuillez patienter...
    "; } elseif ( $phase == 3 ) { // Recuperation des utilisateurs selectionnes if ( file_exists("/tmp/list_recup") ) { $fd = fopen("/tmp/list_recup", "r"); draw_table_result ("Récupération dans la catégorie", "Eleve", "Professeur", "Administratif"); while ( !feof($fd) ) { $tmp = fgets($fd, 255); $trash_member=explode("@@", $tmp); // Nettoyage des espaces dans trash_member[1] $categorie=trim($trash_member[1]); // uid => $trash_member[0] // Categorie $trash_member[1] if ( $trash_member[0] != "" ) { // Lecture des params de l'utilisateur selectionne dans la trash $user = search_people_trash ("uid=$trash_member[0]"); // Positionnement des constantes "objectclass" $user[0]["sambaacctflags"]="[U ]"; $user[0]["objectclass"][0]="top"; $user[0]["objectclass"][1]="posixAccount"; $user[0]["objectclass"][2]="shadowAccount"; $user[0]["objectclass"][3]="person"; $user[0]["objectclass"][4]="inetOrgPerson"; $user[0]["objectclass"][5]="sambaAccount"; $user[0]["objectclass"][5]="sambaSamAccount"; ### DEBUG if ( $DEBUG=="true" ) { echo "------------------------------------------
    "; echo "sambaacctflags :".$user[0]["sambaacctflags"]."
    "; echo "sambapwdmustchange :".$user[0]["sambapwdmustchange"]."
    "; echo "sambantpassword :".$user[0]["sambantpassword"]."
    "; echo "sambalmpassword :".$user[0]["sambalmpassword"]."
    "; echo "sambaSID :".$user[0]["sambasid"]."
    "; echo "SambaprimaryGroup".$user[0]["sambaprimarygroupsid"]."
    "; echo "userPassword :".$user[0]["userpassword"]."
    "; echo "gecos :".$user[0]["gecos"]."
    "; echo "employeenumber :".$user[0]["employeenumber"]."
    "; echo "homedirectory :".$user[0]["homedirectory"]."
    "; echo "gidnumber :".$user[0]["gidnumber"]."
    "; echo "uidnumber :".$user[0]["uidnumber"]."
    "; echo "loginshell :".$user[0]["loginshell"]."
    "; echo "objectclass :".$user[0]["objectclass"][0]."
    "; echo "objectclass :".$user[0]["objectclass"][1]."
    "; echo "objectclass :".$user[0]["objectclass"][2]."
    "; echo "objectclass :".$user[0]["objectclass"][3]."
    "; echo "objectclass :".$user[0]["objectclass"][4]."
    "; echo "objectclass :".$user[0]["objectclass"][5]."
    "; echo "mail :".$user[0]["mail"]."
    "; echo "sn :".$user[0]["sn"]."
    "; echo "givenname :".$user[0]["givenname"]."
    "; echo "cn :".$user[0]["cn"]."
    "; echo "uid :".$user[0]["uid"]."
    "; echo "------------------------------------------
    "; } ### FIN DEBUG // Modification de l'entree dn ou=Trash -> ou=People $ds = @ldap_connect ( $ldap_server, $ldap_port ); if ( $ds ) { $r = @ldap_bind ( $ds, $adminDn, $adminPw ); // Bind en admin if ($r) { // Ajout dans la branche people if ( @ldap_add ($ds, "uid=".$user[0]["uid"].",".$dn["people"],$user[0] ) ) { // Suppression de la branche Trash @ldap_delete ($ds, "uid=".$user[0]["uid"].",".$dn["trash"] ); // Ajout au groupe principal @exec ("/usr/share/se3/sbin/groupAddUser.pl $trash_member[0] $categorie"); $recup=true; } else $recup=false; } } ldap_close ( $ds ); // Affichage des utilisateurs recuperes $html=""; if ( $recup ) $html.=""; $html.=utf8_decode( $user[0]["cn"] ); if ( $recup ) $html.=""; $html.="\n"; if ( $recup ) { $html.=""; if ( $categorie == "Eleves" ) $html.="X"; else $html.=" "; $html.="\n"; $html.=""; if ( $categorie == "Profs" ) $html.="X"; else $html.=" "; $html.="\n"; $html.=""; if ( $categorie == "Administratifs" ) $html.="X"; else $html.=" "; $html.="\n"; } else $html.="Compte irrécupérable !\n"; echo $html; } } fclose($fd); unlink ("/tmp/list_recup"); echo "\n\n"; } else echo "
    Vous n'avez pas sélectionné d'utilisateur(s) à récupérer!
    "; } break; // Fin case } //} else echo "Vous n'avez pas les droits nécessaires pour cette action..."; include ("pdp.inc.php"); ?>