paznaky v jmenech souboru

Pavel Kankovsky peak na argo.troja.mff.cuni.cz
Čtvrtek Srpen 26 22:18:50 CEST 2004


On Thu, 26 Aug 2004, Petr Duchon wrote:

[kraceno]
> $files = `find $paths -mtime $interval -type f`;
> $files =~ s/\n/ /g;
> $cmd ="/bin/tar c --atime-preserve $files | /usr/bin/bzip2 > $destination";
> system($cmd);

1. Jmena souboru mohou obsahovat konce radek, tabelatory, mezery.
2. Jmena souboru mohou zacinat pomlckou.
3. Jmena souboru mohou obsahovat napr. stredniky a zpetne apostrofy.


On Thu, 26 Aug 2004, Ivo Panacek wrote:

>     ... preserve "'.join('" "', na filelist).'" ...

4. Jmena souboru mohou obsahovat uvozovky (a take apostrofy).

Ad 1. Jedno jmeno muze byt povazovano za dve.
Ad 2. Jmeno souboru muze byt tarem mylne povazovano za opsnu.
Ad 3. Cast jmena muze byt shellem povazovana za prikaz a vykonana!
Ad 4. Primocare obaleni uvozovkami nic neresi.

Jake z toho plyne ponauceni? Jmena souboru, u kterych nemate 100% jistotu,
ze pochazeji vyhradne z duveryhodneho zdroje a ze neobsahuji zadne
podivnosti, nikdy ale NIKDY nevkladejte do shelloveho prikazu, pokud je
Vam zivot mily.

Nejlepsi je samozrejme jiz doporucovane reseni s --files-from.
I kdyz to vlastne asi uplne neresi problem jmen souboru obsahujicich
konec radky... hmm...

V kazdem pripade, pokud by se to melo udelat postupem podobnym puvodne
naznacenemu, tak by to melo byt neco jako:

$files = `find .... -print0`;
@files = split("\0", $files);
open(STDOUT, "| /usr/bin/bzip2 > $destination");
exec("/bin/tar", "c", "--atime-preserve", "--", @files);

Ovsem je zde jeste problem ten, ze seznam souboru muze prekrocit limit
na delku argumentu execve(). A samozrejme take problem, ze otevreni
ciziho souboru se nemusi obejit bez negativnich nasledku (napr. muze
byt ten soubor mezi tim, co na nej tar udela lstat() a open() nahrazen
nejakym linkem...zvlast zabavny by mohl byt link na neci terminal...).


--Pavel Kankovsky aka Peak  [ Boycott Microsoft--http://www.vcnet.com/bms ]
"Resistance is futile. Open your source code and prepare for assimilation."



Další informace o konferenci Linux