ACCESS(2)          Manuel du programmeur Linux          ACCESS(2)


NOM
       access - Vérifier les permissions d'accès à un fichier.

SYNOPSIS
       #include <unistd.h>

       int access(const char *pathname, int mode);

DESCRIPTION
       access  vérifie  si  le  processus serait autorisé à lire,
       écrire, exécuter, ou tester l'existence d'un  fichier  (ou
       d'un autre objet appartenant au système de fichiers), dont
       le nom est pathname.

       Si pathname est un lien symbolique, ce  sont  les  permis­
       sions du fichier pointé par celui-ci qui sont testées.

       mode  est  un masque constitué d'un ou plusieurs arguments
       liés par un OU binaire ( | ) R_OK, W_OK, X_OK et  F_OK.

       Les requêtes R_OK, W_OK et X_OK servent  respectivement  à
       tester  la lecture, l'écriture, et l'exécution du fichier.
       La requête F_OK teste si la  vérification  d'existence  du
       fichier  serait  autorisée (ceci dépendant des permissions
       des répertoires apparaissant dans le  chemin  pathname  et
       éventuellement  des  liens  symboliques  rencontrés sur ce
       chemin).

       Le test est effectué avec les User-ID et Group-ID réels du
       processus,  plutôt  qu'avec  les  IDs  effectifs  qui sont
       utilisés lorsque l'on tente l'opération. Ceci  permet  aux
       programmes  Set-UID  de  déterminer  les  autorisations de
       l'utilisateur ayant invoqué le programme.

       Seuls les bits d'accès sont vérifiés, et non pas  le  con­
       tenu  du  fichier.  Ainsi si l'écriture est autorisée dans
       un répertoire, ceci  signifie  que  l'on  peut  créer  des
       fichiers  dans ce répertoire, et non pas que l'on puisse y
       écrire comme dans un fichier.  Egalement, un  fichier  DOS
       peut  être  considéré  comme exécutable, alors que l'appel
       système execve(2) échouera évidemment.


VALEUR RENVOYÉE
       access renvoie 0 s'il réussit (toutes  les  requêtes  sont
       autorisées),  ou  -1 s'il échoue (au moins une requête est
       interdite), auquel cas errno contient le code d'erreur.

ERREURS
       EACCES  L'accès serait refusé au fichier lui-même,  ou  il
               n'est pas permis de parcourir l'un des répertoires
               de pathname.

       EROFS   On demande une écriture sur un système de fichiers



Linux                     26 Avril 1998                         1





ACCESS(2)          Manuel du programmeur Linux          ACCESS(2)


               en lecture-seule.

       EFAULT  pathname  pointe en dehors de l'espace d'adressage
               accessible.

       EINVAL  mode était mal spécifié.

       ENAMETOOLONG
               pathname est trop long.

       ENOENT  Un répertoire contenu dans le pathname aurait  été
               accessible  mais n'existe pas, ou est un lien sym­
               bolique pointant dans le vide.

       ENOTDIR Un élément contenu dans le chemin  pathname  n'est
               pas un répertoire.

       ENOMEM  Pas assez de mémoire pour le noyau.

       ELOOP   pathname  contient  une  référence  circulaire  (à
               travers un lien symbolique).

       EIO     erreur générique d'entrée/sortie.

EXEMPLE
               #include <stdio.h>
               #include <unistd.h>

       int
       main (void)
       {
               char * nom_fichier = "/etc/passwd";
               if (access (nom_fichier, W_OK) == 0) {
                       fprintf (stdout, "Ecriture Ok !");
                       if (getuid() != 0) { /* 0 <=> Super-User */
                               fprintf (stdout, "Danger !");
                       }
               }
               return (0);
       }

RESTRICTIONS
       access renvoie une erreur si  l'un  quelconque  des  types
       d'accès est refusé, même si les autres sont acceptés.

       Il  est  possible qu'access ne fonctionne pas correctement
       sur un serveur  NFS  si  les  correspondances  d'UID  sont
       activées,  car  ces  correspondances  sont  gérées  par le
       serveur, et masquées au client qui effectue les  vérifica­
       tions d'autorisation.

       Utiliser  access  pour  vérifier  si  un  utilisateur a le
       droit, par exemple, d'ouvrir un fichier avant  d'effectuer
       réellement   l'ouverture,  risque  de  créer  un  trou  de



Linux                     26 Avril 1998                         2





ACCESS(2)          Manuel du programmeur Linux          ACCESS(2)


       sécurité.  En effet, l'utilisateur peut exploiter le petit
       intervalle  de  temps  entre  la  vérification  et l'accès
       effectif pour modifier le fichier.

CONFORMITÉ
       SVID, AT&T, POSIX, X/OPEN, BSD 4.3

VOIR AUSSI
       stat(2) open(2) chmod(2) chown(2) setuid(2) setgid(2).


TRADUCTION
       Christophe Blaess, 1997.












































Linux                     26 Avril 1998                         3