ACCESS(2)

NOM
access - Verifier les permissions d'acces a un fichier.

SYNOPSIS
#include <unistd.h>

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

DESCRIPTION
access verifie si le processus serait autorise a lire, ecrire, executer, ou tester l'existence d'un fichier (ou d'un autre objet appartenant au systeme de fichiers), dont le nom est pathname. Si pathname est un lien symbolique, ce sont les permissions du fichier pointe par celui-ci qui sont testees. mode est un masque constitue d'un ou plusieurs arguments lies par un OU binaire ( | ) R_OK, W_OK, X_OK et F_OK. Les requetes R_OK, W_OK et X_OK servent respectivement a tester la lecture, l'ecriture, et l'execution du fichier. La requete F_OK teste si la verification d'existence du fichier serait autorisee (ceci dependant des permissions des repertoires apparaissant dans le chemin pathname et eventuellement des liens symboliques rencontres sur ce chemin). Le test est effectue avec les User-ID et Group-ID reels du processus, plutot qu'avec les IDs effectifs qui sont utilises lorsque l'on tente l'operation. Ceci permet aux programmes Set-UID de determiner les autorisations de l'utilisateur ayant invoque le programme. Seuls les bits d'acces sont verifies, et non pas le contenu du fichier. Ainsi si l'ecriture est autorisee dans un repertoire, ceci signifie que l'on peut creer des fichiers dans ce repertoire, et non pas que l'on puisse y ecrire comme dans un fichier. Egalement, un fichier DOS peut etre considere comme executable, alors que l'appel systeme execve(2) echouera evidemment.

VALEUR RENVOYEE
access renvoie 0 s'il reussit, ou -1 s'il echoue, auquel cas errno contient le code d'erreur.

RESTRICTIONS
access renvoie une erreur si l'un quelconque des types d'acces est refuse, meme si les autres sont acceptes.

Il est possible qu'access ne fonctionne pas correctement sur un serveur NFS si les correspondances d'UID son activees, car ces correspondances sont gerees par le serveur, et masquees au client qui effectue les verifications d'autorisation.

ERREURS

EACCES
    L'acces serait refuse, soit au fichier lui-meme, soit a l'un des repertoires dans pathname.

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

EINVAL
    mode etait mal specifie.

ENAMETOOLONG
    pathname est trop long.

ENOENT
    Un repertoire contenu dans le pathname aurait ete accessible mais n'existe pas ou est un lien symbolique pointant dans le vide.

ENOTDIR
    Un element contenu dans le chemin pathname n'est pas un repertoire.

ENOMEM
    Pas assez de memoire pour le noyau.

ELOOP
    pathname contient une reference circulaire (a travers un lien symbolique).

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);
}

CONFORMITE
SVID, AT&T, POSIX, X/OPEN, BSD 4.3

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