Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1278 connectés 

  FORUM HardWare.fr
  Programmation
  C

  mkdir : droits récursifs ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

mkdir : droits récursifs ?

n°1781726
LaTex_man
Posté le 03-09-2008 à 09:37:19  profilanswer
 

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
 

Citation :

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
 

Code :
  1. char dir_final[150];
  2. strcat(dir_final,"/home/toto/filstoto/" ); /* Toto Existe déjà*/
  3. /*C'est fils toto qui n'existe pas et qu'on veut créer*/
  4. int mode = 755;
  5. mkdir(dir_final,mode);
  6. strcat(dir_final,"Mon_texte.dat" );
  7. fopen(dir_final);
  8. /* etc etc ... */
  9. ...

mood
Publicité
Posté le 03-09-2008 à 09:37:19  profilanswer
 

n°1781917
olivthill
Posté le 03-09-2008 à 12:34:47  profilanswer
 

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 :
  1. char dir_final[150], mon_texte[200]; FILE *fp;
  2. strcat(dir_final,"/home/toto/filstoto" ); /* Toto Existe déjà*/
  3. /*C'est fils toto qui n'existe pas et qu'on veut créer*/
  4. mkdir(dir_final, 755);
  5. sprintf(mon_texte, "%s/%s", dir_final, "Mon_texte.dat" );
  6. fp = fopen(mon_texte, "ab" );
  7. if (fp == NULL) {
  8.    fprintf(stderr, "Error: Cannot open %s\n", mon_texte);
  9.    return -1;
  10. }
  11. /* etc etc ... */

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.

n°1782349
matafan
Posté le 03-09-2008 à 23:37:40  profilanswer
 

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

n°1782388
Taz
bisounours-codeur
Posté le 04-09-2008 à 01:02:39  profilanswer
 

755 != 0755 ...

n°1782426
LaTex_man
Posté le 04-09-2008 à 09:50:31  profilanswer
 

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 ...  :o  


Message édité par LaTex_man le 04-09-2008 à 10:02:07
n°1782478
regexp42
Eplucheur de RFC.
Posté le 04-09-2008 à 11:32:21  profilanswer
 

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.
 

n°1782491
Sve@r
Posté le 04-09-2008 à 11:53:04  profilanswer
 

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
 

Citation :

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


 
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).
 


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1783319
matafan
Posté le 05-09-2008 à 22:03:27  profilanswer
 

Taz a écrit :

755 != 0755 ...


Ah oui bien vu, tout le monde c'est fait avoir un jour :lol:

n°1783340
Sve@r
Posté le 06-09-2008 à 08:27:28  profilanswer
 

matafan a écrit :


Ah oui bien vu, tout le monde c'est fait avoir un jour :lol:


Exact  :ange:  


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  mkdir : droits récursifs ?

 

Sujets relatifs
gestion des droits d'acces [VBA excel] [RESOLU]modifciation des droits d'un repertoire : CACLS
Changer droits d'accès ACL des imprimantes[c++] Récupérer les droits d'accès de fichiers/dossiers sous windows
conservation de droits avec cwrsyncprobleme mysql + droits
Problème droits d'accès répertoire en C#[ Oracle ] Vue et problème de droits
[CHMOD] Changer les droits DANS plusieurs dossiersGestion des droits
Plus de sujets relatifs à : mkdir : droits récursifs ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR