mkdir : droits récursifs ? - C - Programmation
Marsh Posté le 03-09-2008 à 12:34:47
Avec 777, il n'y aurait aucune restriction.
Mais je ne suis pas certain que le problème vienne des droits du répertoire.
Je n'ai jamais crée de répertoire dont le nom se termine par un slash. Donc, j'ai un doute à ce sujet.
J'aurais plutôt écrit :
Code :
|
N.B. J'ai créé une variable mon_texte parce que c'est plus lisible pour la maintenance de ne pas mettre deux choses différentes (un nom de répertoire et un nom de fichier) dans la même variable. Par contre j'ai supprimé la variable mode, qui n'a pas vraiment d'intérêt, parce qu'il est peu probable qu'elle soit utilisée ailleurs. J'ai ajouté le mode d'ouverture "ab" (ou "at" si c'est du texte) ou "rb", etc. J'ai ajouté le test pour savoir si l'ouverture se passe bien.
Marsh Posté le 03-09-2008 à 23:37:40
Tu veux dire quoi quand tu dis que les fichiers que tu créé dans le répertoire ne te sont pas accessibles ? Montre un ls -ld /home/toto/filstoto et un ls -l /home/toto/filstoto/Mon_texte.dat
Marsh Posté le 04-09-2008 à 09:50:31
Merci pour vos réponses :
@olivthill,
J'ai le même résultat avec ta méthode. J'ai l'impression que le processus créé le répertoire, peut l'utiliser à sa guise et après avoir fini, il bloque l'accès à ces fichiers.
@matafan,
ls -ld /home/toto/filstoto donne d-wxr-l--x
ls -l donne filstoto/ " permission denied total 2
C'est quoi ce l ???
NB : j'ai réussi à arranger le problème (mon programme C lance à la fin un shell). Dans ce shell, j'ai ajouté les droits à la mano (chmod -R 755 /home/toto/filstoto). Et ça a marché.
Je reste sceptique quand même ...
Marsh Posté le 04-09-2008 à 11:32:21
Taz t'as donné la réponse juste au dessus.
Les droits sont octaux, pas décimaux.
C'est donc 0755 que tu dois donner à mkdir et non 755.
Marsh Posté le 04-09-2008 à 11:53:04
LaTex_man a écrit : D'après ce charabia, on dirait que mon 755 n'est pas récursif. |
Un mode n'est jamais récursif. Quand tu crées un fichier de façon neutre (vi fichier, echo >fichier, etc), le fichier est créé avec des droits par défaut qui sont
777 - umask - droit "x" si le fichier n'est pas répertoire.
Donc quand tu crées un répertoire aved des droits, pour peu que ces droits aient bien été écrits (c'est à dire en octal et non en décimal) ce répertoire est créé avec les droits demandés.
Ensuite, quand tu créeras, dans ce répertoire, d'autres répertoires ou fichiers, si tu ne spécifies pas de droit particulier, ces répertoires et fichiers seront créés avec la règle ci-dessus.
LaTex_man a écrit : Je crois que je n'ai pas bien compris cette phrase dans l'explication de mkdir
|
Ca n'a pas de rapport avec les droits mais avec le phénomène setuid/setgid. Quand un setuid est positionné sur un répertoire, alors tout fichier (et donc tout répertoire car un répertoire n'est qu'un fichier particulier) créé dans ce répertoire là appartiendra au propriétaire du répertoire en question (et non à celui qui le crée comme c'est le cas par défaut).
Et quand un setgid est positionné sur un répertoire, alors tout fichier créé dans ce répertoire là sera du même groupe que le groupe du répertoire en question (et non du groupe de celui qui le crée comme c'est le cas par défaut).
Marsh Posté le 05-09-2008 à 22:03:27
ReplyMarsh Posté le 06-09-2008 à 08:27:28
matafan a écrit : |
Exact
Marsh Posté le 03-09-2008 à 09:37:19
Bonjour,
Il existe l'équivalent de mkdir dans le C.
Très bien.
J'ai utilisé mkdir pour créer un dossier avec un mode int que j'ai fixé à 755.
Le problème est que le répertoire créé (que le processus utilise allègrement) m'est accessible mais pas les fichiers que j'ai mis dedans !!
Je crois que je n'ai pas bien compris cette phrase dans l'explication de mkdir
Le répertoire nouvellement créé aura pour propriétaire l'UID effectif du processus. Si le répertoire au-dessus du nouveau répertoire a son bit Set-GID à 1, ou si le système de fichier est monté avec une sémantique de groupe BSD, le nouveau répertoire héritera de l'appartenance au groupe de son parent. Sinon il appartiendra au groupe correspondant au GID effectif du processus.
Si le répertoire parent a son bit Set-GID à 1, le nouveau répertoire aura aussi son bit Set-GID à 1.
Source
D'après ce charabia, on dirait que mon 755 n'est pas récursif.
Voici un morceau du code