Partage
  • Partager sur Facebook
  • Partager sur Twitter

programmer un shell en c

    17 avril 2017 à 8:21:37

    bonjour tout le monde,

    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.

    merci d'avance.

    • Partager sur Facebook
    • Partager sur Twitter
      17 avril 2017 à 8:26:04

      Salut,

      Si l'utilisateur n'as pas les droits, c'est l'OS qui empêchera le programme de modifier les dossiers.

      • Partager sur Facebook
      • Partager sur Twitter

      Bonhomme !! | Jeu de plateforme : Prototype.

        18 avril 2017 à 8:00:19

        pouvez-vous me donner plus de detail svp ?

        merci

        -
        Edité par IroquoisPliskin1 18 avril 2017 à 8:00:39

        • Partager sur Facebook
        • Partager sur Twitter
          18 avril 2017 à 8:53:39

          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.
          • Partager sur Facebook
          • Partager sur Twitter

          « 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

            22 avril 2017 à 8:06:49

            d'accord,je comprends mieux.

            merci pour vos réponses.

            • Partager sur Facebook
            • Partager sur Twitter
              23 avril 2017 à 5:10:52

              Hello,


              Wtf les réponses randoms. Utilise la fonction access : http://manpagesfr.free.fr/man/man2/access.2.html

              KirbXCoucou a écrit:

              Mais pas besoin de vérifier si les droits existent pour faire une action qui nécessitent ces droits, c'est redondant.

              J'en rigole encore.

              • Partager sur Facebook
              • Partager sur Twitter
              "Skill will accomplish what is denied to force" (Mertvago,1995)
                23 avril 2017 à 10:51:18

                Salut,

                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.

                • Partager sur Facebook
                • Partager sur Twitter

                Bonhomme !! | Jeu de plateforme : Prototype.

                  24 avril 2017 à 1:37:46

                  • Partager sur Facebook
                  • Partager sur Twitter
                  "Skill will accomplish what is denied to force" (Mertvago,1995)
                    24 avril 2017 à 13:11:11

                    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

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Un vrai cours de: (C | C++ | Haskell débutant | Haskell intermédiaire | Rust).
                      24 avril 2017 à 15:34:50

                      Mad scientist a écrit:

                      Je crois que tu n'as pas compris le problème, stat aura le même défaut dans ce cas-ci.

                      Autant pour moi je voulais parler de fstat j'ai confondu dans le feu de l'action :  https://linux.die.net/man/2/fstat
                      • Partager sur Facebook
                      • Partager sur Twitter
                      "Skill will accomplish what is denied to force" (Mertvago,1995)
                        24 avril 2017 à 15:43:09

                        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

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Un vrai cours de: (C | C++ | Haskell débutant | Haskell intermédiaire | Rust).
                          24 avril 2017 à 15:47:48

                          Bonjour,

                          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

                          • Partager sur Facebook
                          • Partager sur Twitter
                          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.
                          • Editeur
                          • Markdown