je programme une fonction rmall pour supprimer un répertoire mais il ne doit pas supprimer un répertoire si l'utilisateur ne possède pas les droits pour supprimer un répertoire.
Je voudrais savoir si il y a une fonction en c qui permet de déterminer si l'utilisateur possède ou non le droit de supprimer un répertoire.
Coucou! Enfait, ce que DRX veut dire (je suppose) c'est que vu que ton OS t’empêche de modifier des objets dont t'as pas les droits dessus, tu peux lancer ton script, et si l'utilisateur courant à les droits, et bien il le supprimera, et sinon, tu auras un joli message te disant que tu n'as pas les droits pour le faire. Mais pas besoin de vérifier si les droits existent pour faire une action qui nécessitent ces droits, c'est redondant.
« Je n’ai pas besoin de preuve. Les lois de la nature, contrairement aux lois de la grammaire, ne permettent aucune exception. » D. Mendeleïev
Avertissement : Utiliser access() pour vérifier si un utilisateur
a le droit, par exemple, d'ouvrir un fichier avant d'effectuer réellement l'ouverture
avec open(2), risque de créer un trou de sécurité. En effet, l'utilisateur peut exploiter
le petit intervalle de temps entre la vérification et l'accès pour modifier le fichier
(via un lien symbolique en général). Pour cette raison, l'utilisation de cet appel
système devrait être évitée.
Au pire il suffit de faire le test, tu créés un répertoire avec tes droits, tu tests ton programme sans et tu tentes de l'effacer, tu verra bien.
Si je comprend bien l'idée d'utiliser access, c'est de vérifier les droits pour lancer ou non un delete. Moi, je dis lance le delete et si tu te prends une baffe, c'est qu'il n'y avait pas les droits nécessaires.
Après, je n'y connais pas trop en linux, mais vu que même Win vérifie les droits d'accès des programmes aux fichiers, je suis à peu près certain que Linux ne s'y trompe pas.
Je crois que tu n'as pas compris le problème, stat aura le même défaut dans ce cas-ci.
drx a écrit:
Après, je n'y connais pas trop en linux, mais vu que même Win vérifie les droits d'accès des programmes aux fichiers, je suis à peu près certain que Linux ne s'y trompe pas.
Bien sûr, GNU/Linux supporte les permissions de POSIX. Il suffit de lire les pages de POSIX pour s'en rendre compte (exemples: open, fopen, mkdir, rmdir, remove, rmdir, unlink, mknod, …).
- Edité par Mad scientist 24 avril 2017 à 15:32:58
Sauf que c'est toujours redondant. rmdir va nécessairement vérifier que tu as les droits pour supprimer le répertoire, c'est POSIX qui le dit. Avec fstat tu te compliques la vie pour rien, tu as des chances d'introduire des erreurs vicieuses, de monopoliser une ressource plus longtemps que nécessaire et d'avoir une pénalité sur les performances.
EDIT: En plus tu as toujours le même problème, vu que tu dois fermer le dossier avant de le supprimer, sinon rmdir peut échouer avec l'erreur EBUSY.
- Edité par Mad scientist 24 avril 2017 à 15:57:22
enfin faudrait juste connaître les fonctionnalités de la commande rmall que le PO souhaite implémenter. S'il y a un comportement récursif du genre tout ou rien = soit on supprime tout, soit on ne supprime rien alors il va falloir passer par des vérifications tout en sachant qu'entre la vérification et l'effacement il peut y avoir des changements et donc des problèmes qui seraient éventuellement à gérer ...
Si c'est un comportement plus classique du genre «on efface ce qu'on peut» alors pas de vérifications et on se lance tête baissée.
Donc : que doit faire cette commande rmall ? un rmdir ? un rm -rf ou autre chose ?
- Edité par PicoDev 24 avril 2017 à 15:48:15
First solve the problem. Then, write the code. ~ John Johnson
programmer un shell en c
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Bonhomme !! | Jeu de plateforme : Prototype.
« Je n’ai pas besoin de preuve. Les lois de la nature, contrairement aux lois de la grammaire, ne permettent aucune exception. »
D. Mendeleïev
Bonhomme !! | Jeu de plateforme : Prototype.