Thread remove_tree CHILD_DIR löscht PARENT_DIR (8 answers)
Opened by Andreas at 2011-11-11 15:37

Gast Andreas
 2011-11-11 15:37
#154118 #154118
Hallo,
mir war ein folgenschwerer Fehler unterlaufen. Ich wollte mit "remove_tree" alle Ordner in einem Verzeichnis löschen, deren Name nicht in einem Hash definiert waren. Das Ergebnis war, das alles im Parent-Odner, welcher das Root-Verzeichnis des Webservers war, gelöscht wurde. OK, die Zugriffsrechte hätten das verhindern sollen, es ist aber nunmal passiert. Zukünftig werde ich die Zugriffsrechte besser kontrollieren und remove_tree nur eindeutig definierte absolute Pfade übergeben, aber kann mir jemand erklären, was hier genau schief gelaufen ist?

Hat remove_tree den "../"-Ordner gelöscht oder ist Perl ins "../"-Verzeichnis gewechselt, nachdem der relative Pfad "./" gelöscht wurde? Oder was anderes?

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
use File::Path qw(remove_tree);

chdir("$MEDIA_DIR"); # absoluter Pfad 
opendir(DIR, ".") || die $!;
@entries = readdir(DIR);
closedir(DIR);
foreach (@entries) {
        # Hier habe ich die "."-Ordner "vergessen"
        remove_tree("$_") unless defined $media{"_$_"};
}

Last edited: 2011-11-11 15:46:34 +0100 (CET)

View full thread remove_tree CHILD_DIR löscht PARENT_DIR