IFS et droits
Bonjour à tous,
J'ai fais un programme qui génère des fichiers dans l'IFS à l'aide des fonctions suivantes (open() write() ...:
https://www.ibm.com/support/knowledgece ... /unix2.htm
Mon problème est que la création de fichier ne reprend pas les droits du répertoire (comme on peut le spécifier dans le CPYTOIMPF). Du coup le profil qui doit prendre le fichier n'a pas les droits de suppression etc...
Est-ce que a une idée sur comment lui spécifier de reprendre les droits du répertoire?
Mon autre solution c'est de faire un changement de propriétaire mais du coup c'est moi qui n'a plus les droits
Merci d'avance pour votre aide.
Florian
J'ai fais un programme qui génère des fichiers dans l'IFS à l'aide des fonctions suivantes (open() write() ...:
https://www.ibm.com/support/knowledgece ... /unix2.htm
Mon problème est que la création de fichier ne reprend pas les droits du répertoire (comme on peut le spécifier dans le CPYTOIMPF). Du coup le profil qui doit prendre le fichier n'a pas les droits de suppression etc...
Est-ce que a une idée sur comment lui spécifier de reprendre les droits du répertoire?
Mon autre solution c'est de faire un changement de propriétaire mais du coup c'est moi qui n'a plus les droits
Merci d'avance pour votre aide.
Florian
Je sais assez large sur les droits, j'ai du RWX pour tout le monde.
Mais pour moi ça concerne que les données.
Voici mon code (enfin la partie concernée)
Mais pour moi ça concerne que les données.
Voici mon code (enfin la partie concernée)
Code : Tout sélectionner
le fichier n'existe pas déjà
if (access(%trimr(WoutputFile): F_OK) < 0) and
(access(%trimr(WNewoutputFile): F_OK) < 0);
// création du fichier
Woutfile = open(%trimr(WoutputFile): O_WRONLY + O_CREAT
:S_IRWXU + S_IRWXG + S_IRWXO);
cpt = 1;
Dow prm_message(cpt) <> *blanks;
//Ecriture de l'historique
callp WriteHistory(Prm_societe:Prm_stock:'S':prm_message(cpt));
message = %trim(prm_message(cpt)) + CRLF;
callp Translate(%len(%trim(message)): message: 'QTCPASC');
Wlen = WRITE(Woutfile:%addr(message):%len(%trimr(message)));
cpt += 1;
EndDo;
ecriture = *on;
EndIf;
Enddo;
callp close(Woutfile);
//Renommage du fichier
renres = rename(%trim(WoutputFile):%trim(WNewOutputFile));
-
- Site Admin
- Messages : 813
- Enregistré le : mer. 14 févr. 2007, 18:00:03
- Localisation : Nantes
- Contact :
droits sur un fichier
Voici ce que j'avais noté
Donnez au propriétaire du répertoire le droit de suppression (sur le répertoire lui même) normalement les fichiers en hériterons.Pour les droits sur objets pour un fichier stream, le propriétaire du fichier (le créateur) aura les mêmes droit que le propriétaire du répertoire.
le groupe principal aura les même droit que le groupe principal du répertoire
*PUBLIC aura les mêmes droits que *PUBLIC sur le répertoire.
Christian Massé (Volubis.fr)
Mon soucis est que le propriétaire du répertoire c'est l'administrateur (il a tous les droits).
Ensuite on a donné tout les droits au Profil1 et profil2.
Le profil1 va générer les fichiers et c'est le profil2 qui va les supprimer (système d'échange de fichiers).
Du coup le profil1 peut faire tout ce qui veut avec le fichier mais le profil2 n'a que les droits RWX sur les données mais pas sur l'objet.
Petite remarque : si le profil2 fait une copie du fichier (il devient le propriétaire du fichier copié), il peut faire tout ce qu'il veut avec.
Ensuite on a donné tout les droits au Profil1 et profil2.
Le profil1 va générer les fichiers et c'est le profil2 qui va les supprimer (système d'échange de fichiers).
Du coup le profil1 peut faire tout ce qui veut avec le fichier mais le profil2 n'a que les droits RWX sur les données mais pas sur l'objet.
Petite remarque : si le profil2 fait une copie du fichier (il devient le propriétaire du fichier copié), il peut faire tout ce qu'il veut avec.
J'ai trouvé il y a peu de temps la solution.
En fait lors de l'appel de l'API open() il faut rajouter O_INHERITMODE
Exemple:
En fait lors de l'appel de l'API open() il faut rajouter O_INHERITMODE
Exemple:
Code : Tout sélectionner
Woutfile = open(%trimr(WoutputFile):
O_WRONLY + O_CREAT + O_INHERITMODE:0);