Provided by: manpages-fr-dev_4.23.1-1_all bug

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 fichier 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é.

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.

HISTORIQUE

       glibc 2.3.2.

       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.

NOTES

       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  approche  est  naturelle  pour  deux  raisons.
       Premièrement,  elle  évite  une  consommation  inutile   de   descripteurs   de   fichiers
       (normalement,  le  programme  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 descripteurs 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 Christophe Blaess
       <https://www.blaess.fr/christophe/>, Stéphan  Rafin  <stephan.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.coulon@wanadoo.fr>,    Julien    Cristau    <jcristau@debian.org>,    Thomas   Huriaux
       <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin
       Duneau  <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis
       Barbier  <barbier@debian.org>,  David  Prévot   <david@tilapin.org>   et   Lucien   Gentis
       <lucien.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⟩.