Provided by: manpages-fr-dev_3.65d1p1-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.

       L'appel

           sysconf(_SC_GETPW_R_SIZE_MAX)

       renvoie soit -1 sans modifier errno, soit une suggestion de taille initiale pour  buf  (si
       cette  taille  est  trop  petite,  l'appel  échoue avec ERANGE, auquel cas l'appelant peut
       réessayer avec un tampon plus grand).

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

ATTRIBUTS

   Multithreading (voir pthreads(7))
       Les fonctions getpwnam() et getpwuid() ne sont pas sûres dans un contexte multithread.

       Les fonctions getpwnam_r() et getpwuid_r() sont sûres dans un contexte multithread.

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.65 du projet man-pages Linux. Une description
       du projet et des  instructions  pour  signaler  des  anomalies  peuvent  être  trouvées  à
       l'adresse http://www.kernel.org/doc/man-pages/.

TRADUCTION

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

       Christophe    Blaess    <http://www.blaess.fr/christophe/>   (1996-2003),   Alain   Portal
       <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> ».