Provided by: manpages-fr-dev_3.32d0.2p4-1_all bug

NOM

       getpwnam,  getpwnam_r, getpwuid, getpwuid_r - Lire un enregistrement du
       fichier des mots de passe

SYNOPSIS

       #include <sys/types.h>
       #include <pwd.h>

       struct passwd *getpwnam(const char *name);

       struct passwd *getpwuid(uid_t uid);

       int getpwnam_r(const char *name, struct passwd *pwd,
                   char *buf, size_t buflen, struct passwd **result);

       int getpwuid_r(uid_t uid, struct passwd *pwd,
                   char *buf, size_t buflen, struct passwd **result);

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

       getpwnam_r(), getpwuid_r() :
           _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _BSD_SOURCE ||
           _SVID_SOURCE || _POSIX_SOURCE

DESCRIPTION

       La fonction getpwnam() renvoie un pointeur sur une structure  contenant
       les divers champs de l'enregistrement de la base de données des mots de
       passe (par exemple, la base de données locale /etc/passwd, NIS ou LDAP)
       correspondant au nom d'utilisateur name.

       La  fonction getpwuid() renvoie un pointeur sur une structure contenant
       les divers champs de l'enregistrement de la base de données des mots de
       passe correspondant à l'ID utilisateur uid.

       La structure passwd est définie dans <pwd.h> comme ceci :

           struct passwd {
               char   *pw_name;       /* Nom d'utilisateur */
               char   *pw_passwd;     /* Mot de passe de l'utilisateur */
               uid_t   pw_uid;        /* ID de l'utilisateur */
               gid_t   pw_gid;        /* ID du groupe */
               char   *pw_gecos;      /* Information utilisateur */
               char   *pw_dir;        /* Répertoire personnel */
               char   *pw_shell;      /* Interpréteur de commande */
           };

       Consultez passwd(5) pour plus d'informations sur ces champs.

       Les  fonctions  getpwnam_r()  et  getpwuid_r()  fournissent  les  mêmes
       informations  que  getpwnam()  et  getpwuid()  mais   enregistrent   la
       structure  passwd trouvée dans l'espace pointé par pwd. Cette structure
       passwd contient des pointeurs vers des chaînes  qui  sont  enregistrées
       dans  le  tampon buf de taille buflen. Un pointeur vers le résultat (en
       cas de succès) ou NULL (au cas où aucune entrée n'ait  été  trouvée  ou
       qu'une erreur soit survenue) est enregistré dans *result.

       La taille maximale nécessaire pour buf peut être récupérée en utilisant
       sysconf(3) avec le paramètre _SC_GETPW_R_SIZE_MAX.

VALEUR RENVOYÉE

       Les fonctions getpwnam() et getpwuid() renvoient un  pointeur  sur  une
       structure   passwd,   ou   NULL   si  une  erreur  se  produit,  ou  si
       l'enregistrement correspondant n'est pas trouvé. En cas d'erreur, errno
       est  positionnée  en  conséquence.  Si on souhaite vérifier errno après
       l'appel, celle-ci devrait être positionnée à zéro avant l'appel.

       La valeur de retour peut pointer vers une zone statique  et  donc  être
       écrasée   par  des  appels  successifs  à  getpwent(3),  getpwnam()  ou
       getpwuid(). (Ne pas passer le pointeur renvoyé à free(3).)

       En cas de  succès,  getpwnam_r()  et  getpwuid_r()  renvoient  zéro  et
       définissent  *result  à  pwd.  Si aucun mot de passe ne correspond, ces
       fonctions renvoient 0 et définissent *result à NULL. En  cas  d'erreur,
       un code d'erreur est renvoyé et *result et définit à NULL.

ERREURS

       0 ou ENOENT ou ESRCH ou EBADF ou EPERM ou ...
              Le nom name ou l'identifiant uid n'ont pas été trouvés.

       EINTR  Un signal a été intercepté.

       EIO    Erreur d'entrée-sortie.

       EMFILE Le   nombre  maximal  (OPEN_MAX)  de  fichiers  ouverts  par  le
              processus est atteint.

       ENFILE Le nombre  maximal  de  fichiers  ouverts  sur  le  système  est
              atteint.

       ENOMEM Pas assez de mémoire pour allouer la structure passwd.

       ERANGE L'espace tampon fourni est insuffisant.

NOTE

       La  base  de  données  des  mots de passe utilisateur est la plupart du
       temps /etc/passwd. Cependant, sur les systèmes récents, elle peut faire
       référence à une base de données réseau NIS, LDAP et les autres fichiers
       locaux sont configurés dans /etc/nsswitch.conf.

FICHIERS

       /etc/passwd
              Base de données des mots de passe locaux

       /etc/nsswitch.conf
              Fichier de configuration des base  de  données  système  et  des
              options des noms de services

CONFORMITÉ

       SVr4,  4.3BSD,  POSIX.1-2001. Le champ pw_gecos n'est pas spécifié dans
       POSIX, mais il est présent sur la plupart des implémentations.

NOTES

       La description "VALEUR RENVOYÉE" ci-dessus vient de POSIX.1-2001.  Elle
       ne considère pas le cas « non trouvé » comme une erreur, et ne spécifie
       pas errno dans ce cas. Cela rend la détection d'erreur  impossible.  On
       peut dire que, d'après POSIX, errno est inchangée dans le cas où aucune
       entrée n'est trouvée. Des essais sur de nombreux systèmes UNIX ont fait
       apparaître  différentes  valeurs dans ce cas : 0, ENOENT, EBADF, ESRCH,
       EWOULDBLOCK, EPERM et probablement d'autres.

       Le champ pw_dir contient le nom du répertoire  de  travail  initial  de
       l'utilisateur.  Les  programmes  de  connexion (« login ») utilisent ce
       champ pour  initialiser  la  variable  d'environnement  HOME  pour  les
       interpréteurs  de  commandes  initiaux.  Une  application  qui souhaite
       déterminer le répertoire personnel des  utilisateurs  devrait  lire  la
       valeur  de  HOME  (au  lieu de la valeur de getpwuid(getuid())->pw_dir)
       puisque que ceci permet à l'utilisateur de  modifier  « son  répertoire
       personnel »  lorsqu'il  est  connecté.  Pour  déterminer  le répertoire
       personnel  « initial »  d'un  autre  utilisateur,  il  est   nécessaire
       d'utiliser getpwnam("utilisateur")->pw_dir ou un équivalent.

EXEMPLE

       Le  programme suivant est un exemple d'utilisation de getpwnam_r() pour
       trouver le nom complet et l'identifiant du nom d'utilisateur fourni  en
       paramètre.

       #include <pwd.h>
       #include <stdio.h>
       #include <stdlib.h>
       #include <unistd.h>
       #include <errno.h>

       int
       main(int argc, char *argv[])
       {
           struct passwd pwd;
           struct passwd *result;
           char *buf;
           size_t bufsize;
           int s;

           if (argc != 2) {
               fprintf(stderr, "Usage: %s username\n", argv[0]);
               exit(EXIT_FAILURE);
           }

           bufsize = sysconf(_SC_GETPW_R_SIZE_MAX);
           if (bufsize == -1)          /* Value was indeterminate */
               bufsize = 16384;        /* Should be more than enough */

           buf = malloc(bufsize);
           if (buf == NULL) {
               perror("malloc");
               exit(EXIT_FAILURE);
           }

           s = getpwnam_r(argv[1], &pwd, buf, bufsize, &result);
           if (result == NULL) {
               if (s == 0)
                   printf("Not found\n");
               else {
                   errno = s;
                   perror("getpwnam_r");
               }
               exit(EXIT_FAILURE);
           }

           printf("Name: %s; UID: %ld\n", pwd.pw_gecos, (long) pwd.pw_uid);
           exit(EXIT_SUCCESS);
       }

VOIR AUSSI

       endpwent(3),    fgetpwent(3),   getgrnam(3),   getpw(3),   getpwent(3),
       getspnam(3), putpwent(3), setpwent(3), nsswitch.conf(5), passwd(5)

COLOPHON

       Cette page fait partie de  la  publication  3.32  du  projet  man-pages
       Linux.  Une description du projet et des instructions pour signaler des
       anomalies      peuvent      être       trouvées       à       l'adresse
       <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

       Depuis  2010,  cette  traduction est maintenue à l'aide de l'outil po4a
       <URL:http://po4a.alioth.debian.org/>   par   l'équipe   de   traduction
       francophone        au        sein        du       projet       perkamon
       <URL:http://perkamon.alioth.debian.org/>.

       Christophe Blaess  <URL:http://www.blaess.fr/christophe/>  (1996-2003),
       Alain  Portal  <URL:http://manpagesfr.free.fr/>  (2003-2006). Florentin
       Duneau et l'équipe francophone de traduction de Debian (2006-2009).

       Veuillez  signaler  toute  erreur   de   traduction   en   écrivant   à
       <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
       paquet manpages-fr.

       Vous pouvez toujours avoir accès à la version anglaise de  ce  document
       en utilisant la commande « man -L C <section> <page_de_man> ».