Cela ne répond pas directement à la question, mais je ne pense pas que la bonne question soit posée ici. Il me semble que le demandeur veut un programme qui agira vraisemblablement différemment s'il a certaines autorisations ou non, mais je dirais que la vérification de sudo n'est pas la façon de le faire. Premièrement, de nombreux systèmes peuvent ne pas implémenter un "sudo", ce n'est en aucun cas requis sous Linux ou de nombreux Unix.
Par exemple, un utilisateur peut déjà être connecté en tant que root, ce qui rend le sudo absurde ou peut-être que le système a des utilisateurs non root qui ont toujours les capacités d'effectuer la tâche administrative que le programme peut souhaiter effectuer. Enfin, peut-être que le système n'a pas de racine ou de sudo du tout et utilise à la place un système de contrôle d'accès obligatoire avec différentes capacités et aucun catch superutilisateur vers sudo. Ou l'utilisateur peut être créé, mais dans un compte qui a des autorisations -less- que son propre compte pour des raisons de sécurité (je lance souvent du code non approuvé avec un utilisateur temporaire non privilégié qui ne peut écrire sur des disques virtuels que pour supprimer, pas augmenter mes autorisations ). C'est globalement une mauvaise idée de supposer un modèle d'autorisations spécifique comme sudo ou l'existence de root ou de supposer qu'un utilisateur sudoed a des privilèges particuliers.
Si vous voulez savoir si vous avez les autorisations pour effectuer une opération, le meilleur moyen est généralement de simplement essayer de le faire, puis de vérifier errno pour les problèmes d'autorisations s'il échoue ou s'il s'agit d'une opération en plusieurs étapes qui doit soit échouer, soit réussir. vous pouvez vérifier si une opération fonctionnera avec des fonctions comme la fonction d' accès POSIX (méfiez-vous des conditions de concurrence possibles ici si les autorisations sont activement modifiées)
Si en plus vous avez besoin de connaître l'utilisateur réel derrière le sudo, vous pouvez utiliser la fonction getlogin qui devrait fonctionner pour toute session interactive avec un terminal sous-jacent et vous permettrait par exemple de trouver qui exécute `` réellement '' la commande pour l'audit ou de trouver le répertoire personnel de l'utilisateur réel pour enregistrer les journaux.
Enfin, si ce que vous voulez vraiment, c'est de savoir si un utilisateur a un accès root (toujours une mauvaise idée mais moins spécifique à l'implémentation), vous pouvez utiliser getuid pour vérifier un uid de 0 et donc root.