ACCESS
Section: Manuel du programmeur Linux (2) Updated: 18 juillet 2003 Index
NOM
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
ERREURS
RESTRICTIONS
CONFORMITÉ
VOIR AUSSI
TRADUCTION
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 permissions du fichier pointé
par celui-ci qui sont testées.
mode
est un masque constitué des 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 l'existence du fichier.
Les tests dépendent 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 contenu du fichier.
Ainsi si l'autorisation d'écriture dans un répertoire, indique la possibilité
d'y créer des fichiers, et pas d'y écrire comme dans un fichier. De même,
un fichier DOS peut être considéré comme exécutable, alors que l'appel
execve(2)
échouera évidemment.
Si le processus a les privilèges suffisants, une implémentation peut indiquer
un succès pour
X_OK
même si le fichier n'a aucun bit d'exécution positionné.
VALEUR RENVOYÉE
L'appel renvoie 0 s'il réussit (toutes les requêtes sont autorisées),
ou -1 s'il échoue (au moins une requête du
mode
est interdite),
auquel cas
errno
contient le code d'erreur.
ERREURS
access
doit échouer si :
- 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.
- ELOOP
-
Trop de liens symboliques ont été rencontrés en parcourant
pathname.
- ENAMETOOLONG
-
pathname
est trop long.
- ENOENT
-
Un répertoire contenu dans le
pathname
aurait été accessible mais n'existe pas, ou est un lien symbolique
pointant dans le vide.
- ENOTDIR
-
Un élément contenu dans le chemin
pathname
n'est pas un répertoire.
- EROFS
-
On demande une écriture sur un système de fichiers en lecture-seule.
access
peut échouer si :
- EFAULT
-
pathname
pointe en dehors de l'espace d'adressage accessible.
- EINVAL
-
mode
était mal spécifié.
- EIO
-
Une erreur d'entrée/sortie s'est produite.
- ENOMEM
-
Le noyau n'a pas assez de mémoire.
- ETXTBSY
-
On a demandé l'écriture dans un fichier exécutable
qui en cours d'utilisation.
RESTRICTIONS
access
renvoie une erreur si l'un quelconque des types d'accès est refusé,
même si les autres sont acceptés.
access
peut fonctionner incorrectement 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érifications 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 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).
CONFORMITÉ
SVID, AT&T, POSIX, X/OPEN, BSD 4.3
VOIR AUSSI
TRADUCTION
Christophe Blaess, 1996-2003.
|