OVH Cloud OVH Cloud

nom de fichier interdit ?

31 réponses
Avatar
Sébastien Kirche
Bonjour,

énigme lors de transferts par ftp dans un répertoire d'une partition
fat32 de ma machine (noyau 2.6.15) : impossible de récupérer l'un d'eux
(erreur : ne peut ouvrir le fichier local, argument invalide).

J'ai réussi à le télécharger sur une autre partition en ext3 mais
ensuite toujours impossible de le transférer sur la partition fat32
(erreur : impossible d'écrire dans le fichier ou de l'ouvrir suivant la
manip).

Le fichier récalcitrant s'appelle 'AUX.HDF.tar.gz'. Est-ce que le
problème pourrait avoir une relation au fait que 'AUX' est un nom
spécial pour MSDOS et Windows (tout comme LPT, CON, COM...) ?
--
Sébastien Kirche

10 réponses

1 2 3 4
Avatar
Sébastien Kirche
Le 19 mars 2007 à 11:36, Sébastien Monbrun aka TiChou a dit :

Un point intéressant c'est que echo > AUX.autrefichier échoue
également (argument invalide).


C'est donc que tu as un noyau patché pour interdire les noms de
fichiers commençant par aux, con, prn, lpt1, etc.


[ ~]% cd /mnt/hda3/
[ hda3]% echo > con.truc
zsh: argument invalide: con.truc
[ hda3]% echo > prn.machin
zsh: argument invalide: prn.machin
[ hda3]% echo > lpt1.bidule
zsh: argument invalide: lpt1.bidule

On dirait. Mais c'est complètement con comme truc :/

,----[ /usr/src/linux-source-2.6.15/fs/vfat/namei.c ]
| static int vfat_valid_longname(const unsigned char *name, unsigned int len)
| {
| if (name[len - 1] == ' ')
| return -EINVAL;
| if (len >= 256)
| return -ENAMETOOLONG;
|
| /* MS-DOS "device special files" */
| if (len == 3 || (len > 3 && name[3] == '.')) { /* basename == 3 */
| if (!strnicmp(name, "aux", 3) ||
| !strnicmp(name, "con", 3) ||
| !strnicmp(name, "nul", 3) ||
| !strnicmp(name, "prn", 3))
| return -EINVAL;
| }
| if (len == 4 || (len > 4 && name[4] == '.')) { /* basename == 4 */
| /* "com1", "com2", ... */
| if ('1' <= name[3] && name[3] <= '9') {
| if (!strnicmp(name, "com", 3) ||
| !strnicmp(name, "lpt", 3))
| return -EINVAL;
| }
| }
|
| return 0;
| }
`----

En creusant un peu la question, il semble que cette restriction soit
standard, j'ai vu des patches passés sur la ml du noyau pour la faire
sauter.

--
Sébastien Kirche


Avatar
Nicolas George
Sébastien Kirche wrote in message :
En creusant un peu la question, il semble que cette restriction soit
standard, j'ai vu des patches passés sur la ml du noyau pour la faire
sauter.


Effectivement, avec les arbres que j'ai sous la main, ça a sauté entre le
2.6.14.1 et le 2.6.19.

Avatar
Pascal Hambourg
Sébastien Kirche wrote in message :

En creusant un peu la question, il semble que cette restriction soit
standard, j'ai vu des patches passés sur la ml du noyau pour la faire
sauter.


Effectivement, avec les arbres que j'ai sous la main, ça a sauté entre le
2.6.14.1 et le 2.6.19.


Dans le changelog du 2.6.17 :

[PATCH] fat: kill reserved names

Since these names on old MSDOS is used as device, so, current fat
driver doesn't allow a user to create those names. But many OSes and
even Windows can create those names actually, now.

This patch removes the reserved name check.


Avatar
YBM
Sébastien Kirche wrote in message :

En creusant un peu la question, il semble que cette restriction soit
standard, j'ai vu des patches passés sur la ml du noyau pour la faire
sauter.


Effectivement, avec les arbres que j'ai sous la main, ça a sauté entre le
2.6.14.1 et le 2.6.19.


Dans le changelog du 2.6.17 :

[PATCH] fat: kill reserved names

Since these names on old MSDOS is used as device, so, current fat
driver doesn't allow a user to create those names. But many OSes and
even Windows can create those names actually, now.

This patch removes the reserved name check.


Ça doit être rigole de monter un disque avec de tels fichiers ou
répertoires sur un Win 9x (je ne sais plus si 98 est concerné) :
il suffit de mettre un <img src="file:///c:nulcon"> dans
une page Web pour planter complètement (même pas un écran bleu)
un Windows 9x...



Avatar
Pascal Hambourg

Ceci dit, Linux a aussi des noms réservés.


Lesquels, par exemple ?


Il y a . et ..,


Certes. Au fait, ces deux-là sont-ils vraiment dans le contenu
"physique" de chaque répertoire (sur le disque) ou bien sont-ils
seulement "virtuels" et créés par le noyau ?

sans compter que '/' et NUL sont scandaleusement interdits
dans les noms de fichiers.


C'est des caractères, pas des noms de fichiers.



Avatar
Denis Beauregard
Le Mon, 19 Mar 2007 20:38:32 +0100, YBM écrivait
dans fr.comp.os.linux.configuration:

Ça doit être rigole de monter un disque avec de tels fichiers ou
répertoires sur un Win 9x (je ne sais plus si 98 est concerné) :
il suffit de mettre un <img src="file:///c:nulcon"> dans
une page Web pour planter complètement (même pas un écran bleu)
un Windows 9x...


La présence du fichier n'a aucun effet en soi. Il y a quelques
années (vers 1990), un de mes collègues avait été victime de
vandalisme. C'était un PC utilisé dans un endroit isolé, donc
personne n'était sur place. Quand il a fait une visite de routine,
il a trouvé qu'il y avait un fichier appelé *.

Il ne s'est pas laissé piégé, mais imaginez la surprise d'un
débutant qui aurait voulu l'effacer avec un del *.


Denis

Avatar
Nicolas George
Pascal Hambourg wrote in message <etmp9h$22vd$:
Certes. Au fait, ces deux-là sont-ils vraiment dans le contenu
"physique" de chaque répertoire (sur le disque) ou bien sont-ils
seulement "virtuels" et créés par le noyau ?


Ça dépend probablement des filesystems, mais en général ils sont bien là.

C'est des caractères, pas des noms de fichiers.


Mais ça implique une grande quantité de noms interdits.

Avatar
Pascal Hambourg

C'est des caractères, pas des noms de fichiers.


Mais ça implique une grande quantité de noms interdits.


Ma question portait sur l'existence de noms réservés (sous-entendu à un
usage spécifique, comme . et ..), pas interdits.


Avatar
YBM
Le Mon, 19 Mar 2007 20:38:32 +0100, YBM écrivait
dans fr.comp.os.linux.configuration:

Ça doit être rigole de monter un disque avec de tels fichiers ou
répertoires sur un Win 9x (je ne sais plus si 98 est concerné) :
il suffit de mettre un <img src="file:///c:nulcon"> dans
une page Web pour planter complètement (même pas un écran bleu)
un Windows 9x...


La présence du fichier n'a aucun effet en soi.


Que ce passe-t-il si on essaye d'ouvrir un fichier (classique, existant)
nommé c:nulcon ?

Il y a quelques
années (vers 1990), un de mes collègues avait été victime de
vandalisme. C'était un PC utilisé dans un endroit isolé, donc
personne n'était sur place. Quand il a fait une visite de routine,
il a trouvé qu'il y avait un fichier appelé *.


ah ! pctools... Faudrait voir si avec debugfs on pourrait pas
créer un fichier nommé "/" sur un fs ext3.

à la hache ça marche évidemment :

:~# ls -lia /mnt/
total 21
2 drwxr-xr-x 21 root root 4096 2007-03-08 00:32 /
2 drwxr-xr-x 3 root root 1024 2007-03-20 08:35 .
2 drwxr-xr-x 21 root root 4096 2007-03-08 00:32 ..
11 drwx------ 2 root root 12288 2007-03-20 08:35 lost+found
? ?--------- ? ? ? ? ? /mnt/to/o
14 -rw-r--r-- 1 root root 0 2007-03-20 08:35 titi
:~# file /mnt/*
/mnt//: directory
/mnt/lost+found: directory
/mnt/titi: empty
/mnt/to/o: ERROR: cannot open `/mnt/to/o' (No such file or directory)

après un fsck c'est mieux, mais il y a "." en double :

# ls -lia /mnt/
total 18
2 drwxr-xr-x 3 root root 1024 2007-03-20 08:35 .
2 drwxr-xr-x 3 root root 1024 2007-03-20 08:35 .
2 drwxr-xr-x 21 root root 4096 2007-03-08 00:32 ..
11 drwx------ 2 root root 12288 2007-03-20 08:35 lost+found
14 -rw-r--r-- 1 root root 0 2007-03-20 08:35 titi
12 -rw-r--r-- 1 root root 0 2007-03-20 08:35 to.o


Avatar
Denis Beauregard
Le Tue, 20 Mar 2007 08:40:30 +0100, YBM écrivait
dans fr.comp.os.linux.configuration:

Le Mon, 19 Mar 2007 20:38:32 +0100, YBM écrivait
dans fr.comp.os.linux.configuration:

Ça doit être rigole de monter un disque avec de tels fichiers ou
répertoires sur un Win 9x (je ne sais plus si 98 est concerné) :
il suffit de mettre un <img src="file:///c:nulcon"> dans
une page Web pour planter complètement (même pas un écran bleu)
un Windows 9x...


La présence du fichier n'a aucun effet en soi.


Que ce passe-t-il si on essaye d'ouvrir un fichier (classique, existant)
nommé c:nulcon ?


C'est autre chose ! Avoir un fichier dangereux c'est comme avoir un
virus inactif. Si on ne fait rien, c'est sans danger.

Il y a quelques
années (vers 1990), un de mes collègues avait été victime de
vandalisme. C'était un PC utilisé dans un endroit isolé, donc
personne n'était sur place. Quand il a fait une visite de routine,
il a trouvé qu'il y avait un fichier appelé *.


ah ! pctools... Faudrait voir si avec debugfs on pourrait pas
créer un fichier nommé "/" sur un fs ext3.

à la hache ça marche évidemment :

:~# ls -lia /mnt/
total 21
2 drwxr-xr-x 21 root root 4096 2007-03-08 00:32 /
2 drwxr-xr-x 3 root root 1024 2007-03-20 08:35 .
2 drwxr-xr-x 21 root root 4096 2007-03-08 00:32 ..
11 drwx------ 2 root root 12288 2007-03-20 08:35 lost+found
? ?--------- ? ? ? ? ? /mnt/to/o
14 -rw-r--r-- 1 root root 0 2007-03-20 08:35 titi
:~# file /mnt/*
/mnt//: directory
/mnt/lost+found: directory
/mnt/titi: empty
/mnt/to/o: ERROR: cannot open `/mnt/to/o' (No such file or directory)

après un fsck c'est mieux, mais il y a "." en double :

# ls -lia /mnt/
total 18
2 drwxr-xr-x 3 root root 1024 2007-03-20 08:35 .
2 drwxr-xr-x 3 root root 1024 2007-03-20 08:35 .
2 drwxr-xr-x 21 root root 4096 2007-03-08 00:32 ..
11 drwx------ 2 root root 12288 2007-03-20 08:35 lost+found
14 -rw-r--r-- 1 root root 0 2007-03-20 08:35 titi
12 -rw-r--r-- 1 root root 0 2007-03-20 08:35 to.o



et si on faisait un fichier /* -r, puis un rm * du dossier ?



Denis



1 2 3 4