#!/usr/bin/perl -w ##### # $Id: cleanClasses.pl 7061 2012-04-02 09:22:45Z dbo $ # Nettoie l'arborescence des partages Classes # efface les vieux dossiers ( dossiers eleve/Archive et .eleve ) # syntaxe : cleanClasses.pl ALL|Classe # - ALL : pour passer en revue toutes les classes # - NomClasse : par exemple 1-S1 pour nettoyer la Classe Classe_1-S1 # # Denis Bonnenfant (denis.bonnenfant@diderot.org) # ##### # supprime les Warnings du module Se.pm BEGIN { $SIG{'__WARN__'} = sub { warn $_[0] if $DOWARN } } use Se; $DOWARN = 1; # Warnings activés à nouveau $PathClasses = '/var/se3/Classes'; die("Syntaxe : cleanClasses.pl ALL|Classe") if ($#ARGV != 0); ($Classe) = @ARGV; if ($Classe eq 'ALL') { $FILTRE = "(cn=Classe_*)"; } else { $FILTRE = "(cn=Classe_$Classe)"; } $lcs_ldap = Net::LDAP->new("$slapdIp"); $lcs_ldap->bind( dn => $adminDn, password => $adminPw, version => '3'); $res = $lcs_ldap->search(base => "$groupsDn", scope => 'one', filter => "$FILTRE"); die $res->error if $res->code; if (($res->entries)[0]) { # Au moins une classe a été trouvée foreach $objClasse ($res->entries) { $cnClasse = $objClasse->get_value('cn'); $Classe = $cnClasse; $Classe =~ s/^Classe_// ; print "Nettoyage de la classe : $Classe
\n"; #Vérification l'existence du posixGroup Equipe_$Classe $resProfs = $lcs_ldap->search(base => "$groupsDn", scope => 'one', filter => "(&(cn=Equipe_$Classe)(objectClass=posixGroup))"); warn $resProfs->error if $resProfs->code; if (!($resProfs->entries)[0]) { warn "Erreur: Le posixGroup Equipe_$Classe n'existe pas!
\n"; } else { if ( -d "$PathClasses/$cnClasse") { # premiere passe : on efface les anciens élèves system("rm -fr $PathClasses/$cnClasse/.* 2>/dev/null"); # on efface les archives print("Effacement des dossiers archives de $cnClasse
\n"); @eleve = <$PathClasses/$cnClasse/*>; foreach $eleve (@eleve) { if ( $eleve =~ m!^$PathClasses/$cnClasse/_! ) { print "répertoire '$eleve' ignoré.
\n"; } else { # D.B. On met à jour ls eanciens eleves de la classe # test de l'inversion prenom.nom dans le cas de login prenom.nom $login = $eleve ; $login =~ s!^$PathClasses/$cnClasse/!! ; @NOM = split(/\./, $login); if ( @NOM == 2 ) { # on inverse $login = @NOM[1] . "." . @NOM[0]; } } if ( -d "$eleve/Archives" ) { print("Effacement du dossier Archives de $login,
\n"); system("rm -fr $eleve/Archives"); } } } } } } exit 0 ;