Provided by: manpages-fr-dev_4.13-4_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    (consulter
   feature_test_macros(7)) :

       getpwnam_r(), getpwuid_r() :
           _POSIX_C_SOURCE
               || /* Versions de la 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 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 or ENOENT or ESRCH or EBADF or EPERM or ...
              Le nom name 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

       The user password database mostly refers to /etc/passwd. However, with recent  systems  it
       also  refers to network wide databases using NIS, LDAP and other local files as configured
       in /etc/nsswitch.conf.

FICHIERS

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

       /etc/nsswitch.conf
              System Databases and Name Service Switch configuration file

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()  │                      │                             │
       └──────────────┴──────────────────────┴─────────────────────────────┘

CONFORMITÉ

       POSIX.1-2001, POSIX.1-2008, SVr4, 4.3BSD. The pw_gecos field is not  specified  in  POSIX,
       but is present on most implementations.

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.

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 <pwd.h>
       #include <stdint.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: %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)

COLOPHON

       Cette  page  fait partie de la publication 5.10 du projet man-pages Linux. Une description
       du projet et des instructions pour signaler des anomalies et la dernière version de  cette
       page peuvent être trouvées à l'adresse https://www.kernel.org/doc/man-pages/.

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> et David Prévot <david@tilapin.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 ⟨⟩.