dwww Home | Manual pages | Find package

fexecve(3)                 Library Functions Manual                 fexecve(3)

NOM
       fexecve - Exécuter un programme indiqué par un descripteur de fichier

BIBLIOTHÈQUE
       Bibliothèque C standard (libc, -lc)

SYNOPSIS
       #include <unistd.h>

       int fexecve(int fd, char *const argv[], char *const envp[]);

   Exigences  de  macros  de  test de fonctionnalités pour la glibc (consulter
   feature_test_macros(7)) :

       fexecve() :
           Depuis la glibc 2.10 :
               _POSIX_C_SOURCE >= 200809L
           Avant la glibc 2.10 :
               _GNU_SOURCE

DESCRIPTION
       fexecve() effectue la même tâche que execve(2), excepté que le  fichier
       à  exécuter est indiqué à l’aide d’un descripteur de fichier fd au lieu
       d'un chemin. Le descripteur de fichier fd doit être ouvert  en  lecture
       seule  (O_RDONLY)  ou  avec le drapeau O_PATH, et l'appelant doit avoir
       les permissions nécessaires pour exécuter le fichier lié au descripteur
       de fichier.

VALEUR RENVOYÉE
       En  cas  de réussite, la fonction fexecve() ne rend pas la main. En cas
       d'erreur, la fonction renvoie -1 et errno  est  définie  avec  le  code
       d'erreur correspondant.

ERREURS
       Les erreurs sont les mêmes que pour execve(2), avec en plus :

       EINVAL fd  n'est  pas  un  descripteur  de fichier valable, ou argv est
              NULL, ou envp est NULL.

       ENOENT Le drapeau close-on-exec est défini pour le descripteur  de  fi-
              chier fd et fd est associé à un script. Voir BOGUES.

       ENOSYS Le  noyau  ne prend pas en charge l'appel système execveat(2) et
              l'accès à l'arborescence /proc a échoué.

VERSIONS
       fexecve() est disponible depuis la glibc 2.3.2.

ATTRIBUTS
       Pour une explication des termes utilisés dans cette section,  consulter
       attributes(7).

       ┌─────────────────────────────────────┬──────────────────────┬─────────┐
       │InterfaceAttributValeur  │
       ├─────────────────────────────────────┼──────────────────────┼─────────┤
       │fexecve()                            │ Sécurité des threads │ MT-Safe │
       └─────────────────────────────────────┴──────────────────────┴─────────┘

STANDARDS
       POSIX.1-2008.  Cette  fonction n'est pas spécifiée dans POSIX.1-2001 et
       n'est que rarement disponible sur d'autres systèmes. Cette fonction est
       spécifiée dans POSIX.1-2008.

NOTES
       Sous Linux avec les versions 2.26 et antérieures de la glibc, fexecve()
       est implémentée en utilisant l'arborescence proc(5) ; /proc  doit  donc
       être  montée et disponible au moment de l'appel. Depuis la version 2.27
       de la glibc et si le noyau prend en charge l'appel système execveat(2),
       fexecve()  est implémenté en utilisant cet appel système, ce qui a pour
       avantage de ne pas nécessiter le montage de /proc.

       L’idée derrière fexecve() est de permettre  à  l’appelant  de  vérifier
       (avec une somme de contrôle) le contenu d’un exécutable avant de l’exé-
       cuter. Juste ouvrir le fichier et calculer  la  somme  de  contrôle  du
       contenu  avant de faire un execve() ne suffirait pas puisque, entre les
       deux étapes, la partie chemin du nom du fichier ou le  nom  de  fichier
       lui-même  pourraient  avoir  été  modifiés (par exemple en modifiant la
       cible d’un lien symbolique). fexecve() n’atténue pas le problème lié au
       fait  que le contenu d’un fichier pourrait être modifié entre le calcul
       de la somme de contrôle et l’appel à fexecve(). Pour cela, la  solution
       consiste  à  s’assurer  que  les permissions sur le fichier l’empêchent
       d’être modifié par un utilisateur malveillant.

       L'idée sous-jacente à l'utilisation de fexecve() consiste à définir  le
       drapeau  close-on-exec  pour le descripteur de fichier fd de façon à ce
       que ce dernier ne se propage pas vers le programme exécuté.  Cette  ap-
       proche  est  naturelle  pour deux raisons. Premièrement, elle évite une
       consommation inutile de descripteurs de fichiers (normalement, le  pro-
       gramme  exécuté  n'a  nul  besoin d'un descripteur de fichier associé à
       lui-même). Deuxièmement, si fexecve() est utilisé de manière récursive,
       l'emploi du drapeau close-on-exec empêche l'épuisement des descripteurs
       de fichiers disponibles qui pourrait découler du fait que chaque  étape
       du  traitement récursif provoque la transmission d'un ou plusieurs des-
       cripteurs de fichiers au nouveau programme (voir tout de même BOGUES  à
       ce sujet).

BOGUES
       Si  le descripteur de fichier fd est associé à un script (autrement dit
       un fichier texte exécutable dont la première ligne qui commence par les
       caractères  #!  désigne  l'interpréteur  du  script),  et si le drapeau
       close-on-exec a été défini pour le descripteur de fichier fd, fexecve()
       échoue avec un code d'erreur ENOENT. Cette erreur est due au fait qu'au
       moment où l'interpréteur du script s'exécute, le descripteur de fichier
       fd  a  déjà  été fermé à cause de la présence du drapeau close-on-exec.
       C'est pourquoi le drapeau close-on-exec ne peut pas être défini pour le
       descripteur de fichier fd si ce dernier est associé à un script, ce qui
       provoquerait les problèmes décrits dans NOTES.

VOIR AUSSI
       execve(2), execveat(2)

TRADUCTION
       La traduction française de cette page de manuel a été créée par  Chris-
       tophe  Blaess  <https://www.blaess.fr/christophe/>, Stéphan Rafin <ste-
       phan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, Fran-
       çois  Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Gué-
       rard <fevrier@tigreraye.org>, Jean-Luc  Coulon  (f5ibh)  <jean-luc.cou-
       lon@wanadoo.fr>,  Julien  Cristau <jcristau@debian.org>, Thomas Huriaux
       <thomas.huriaux@gmail.com>, Nicolas François  <nicolas.francois@centra-
       liens.net>,  Florentin  Duneau <fduneau@gmail.com>, Simon Paillard <si-
       mon.paillard@resel.enst-bretagne.fr>,   Denis   Barbier    <barbier@de-
       bian.org>,  David  Prévot  <david@tilapin.org>  et  Lucien  Gentis <lu-
       cien.gentis@waika9.com>

       Cette traduction est une documentation libre ; veuillez vous reporter à
       la        GNU        General       Public       License       version 3
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ concernant  les  conditions
       de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si  vous découvrez un bogue dans la traduction de cette page de manuel,
       veuillez envoyer un message à ⟨debian-l10n-french@lists.debian.org⟩.

Pages du manuel de Linux 6.03  15 décembre 2022                     fexecve(3)

Generated by dwww version 1.15 on Sat Jun 29 01:44:03 CEST 2024.