Provided by: manpages-fr-dev_4.21.0-2_all bug

NOM

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

BIBLIOTHÈQUE

       Bibliothèque C standard (libc, -lc)

SYNOPSIS

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

       struct passwd *getpwnam(const char *nom);
       struct passwd *getpwuid(uid_t uid);

       int getpwnam_r(const char *restrict nom, struct passwd *restrict pwd,
                      char tampon[restrict .taille_tampon], size_t taille_tampon,
                      struct passwd **restrict result);
       int getpwuid_r(uid_t uid, struct passwd *restrict pwd,
                      char tampon[restrict .taille_tampon], size_t taille_tampon,
                      struct passwd **restrict result);

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

       getpwnam_r(), getpwuid_r() :
           _POSIX_C_SOURCE
               || /* glibc <= 2.19 : */ _BSD_SOURCE || _SVID_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 nom.

       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 de taille taille_tampon. 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 définie pour indiquer l'erreur.  Si  on  souhaite  vérifier  errno
       après l'appel, celle-ci doit être définie à 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 0 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 est défini à NULL.

ERREURS

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

       EINTR  Un signal a été intercepté ; consultez signal(7).

       EIO    Erreur d'entrée-sortie.

       EMFILE La limite du nombre de descripteurs de fichiers par processus a été atteinte.

       ENFILE La  limite  du  nombre  total  de  fichiers  ouverts  pour  le système entier a été
              atteinte.

       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 des  utilisateurs  renvoie  la  plupart  du  temps  à
       /etc/passwd.  Cependant, sur les systèmes récents, elle renvoie aussi aux bases de données
       sur le réseau utilisant NIS, LDAP, ou à d'autres fichiers  locaux  comme  configurés  dans
       /etc/nsswitch.conf.

FICHIERS

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

       /etc/nsswitch.conf
              Fichier  de  configuration  des bases de données du système et de NSS (Name Service
              Switch)

ATTRIBUTS

       Pour une explication des termes utilisés dans cette section, consulter attributes(7).

       ┌──────────────┬──────────────────────┬───────────────────────────────────────────────────┐
       │InterfaceAttributValeur                                            │
       ├──────────────┼──────────────────────┼───────────────────────────────────────────────────┤
       │getpwnam()    │ Sécurité des threads │ MT-Unsafe race:pwnam locale                       │
       ├──────────────┼──────────────────────┼───────────────────────────────────────────────────┤
       │getpwuid()    │ Sécurité des threads │ MT-Unsafe race:pwuid locale                       │
       ├──────────────┼──────────────────────┼───────────────────────────────────────────────────┤
       │getpwnam_r(), │ Sécurité des threads │ MT-Safe locale                                    │
       │getpwuid_r()  │                      │                                                   │
       └──────────────┴──────────────────────┴───────────────────────────────────────────────────┘

STANDARDS

       POSIX.1-2001, POSIX.1-2008, SVr4, 4.3BSD. 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 doit lire la valeur  de  HOME
       (au  lieu  de la valeur de getpwuid(getuid())->pw_dir) puisque cela 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.

EXEMPLES

       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 <errno.h>
       #include <pwd.h>
       #include <stdint.h>
       #include <stdio.h>
       #include <stdlib.h>
       #include <unistd.h>

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

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

           bufsize = sysconf(_SC_GETPW_R_SIZE_MAX);
           if (bufsize == -1)          /* Valeur indéterminée */
               bufsize = 16384;        /* Devrait largement suffire */

           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("Non trouvé\n");
               else {
                   errno = s;
                   perror("getpwnam_r");
               }
               exit(EXIT_FAILURE);
           }

           printf("Nom : %s; UID : %jd\n", pwd.pw_gecos,
                  (intmax_t) 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)

TRADUCTION

       La traduction française de cette  page  de  manuel  a  été  créée  par  Christophe  Blaess
       <https://www.blaess.fr/christophe/>,  Stéphan  Rafin  <stephan.rafin@laposte.net>, Thierry
       Vignaud <tvignaud@mandriva.com>, François Micaux, Alain  Portal  <aportal@univ-montp2.fr>,
       Jean-Philippe    Guérard   <fevrier@tigreraye.org>,   Jean-Luc   Coulon   (f5ibh)   <jean-
       luc.coulon@wanadoo.fr>,   Julien    Cristau    <jcristau@debian.org>,    Thomas    Huriaux
       <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin
       Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>,  Denis
       Barbier  <barbier@debian.org>,  David  Prévot <david@tilapin.org> et Jean-Philippe MENGUAL
       <jpmengual@debian.org>

       Cette traduction est une documentation libre ; veuillez vous reporter  à  la  GNU  General
       Public   License   version 3  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  concernant  les
       conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un
       message à ⟨debian-l10n-french@lists.debian.org⟩.