Provided by:
manpages-fr-dev_3.27fr1.4-1_all 
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 fonctionnalites 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 donnees des mots de
passe (par exemple, la base de donnees 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 donnees des mots de
passe correspondant a l'ID utilisateur uid.
Les fonctions getpwnam_r() et getpwuid_r() obtiennent les memes
informations mais enregistrent la structure passwd trouvee dans
l'espace pointe par pwd. Cette structure passwd contient des pointeurs
vers des chaines, et ces chaines sont enregistrees dans le tampon buf
de taille buflen. Un pointeur vers le resultat (en cas de succes) ou
NULL (au cas ou aucune entree n'ait ete trouvee ou qu'une erreur soit
survenue) est enregistre dans *result.
La structure passwd est definie 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; /* Nom reel */
char *pw_dir; /* Repertoire personnel */
char *pw_shell; /* Interpreteur de commande */
};
La taille maximum necessaire pour buf peut etre recuperee en utilisant
sysconf(3) avec le parametre _SC_GETPW_R_SIZE_MAX.
VALEUR RENVOY'EE
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 trouve. En cas d'erreur, errno
est positionnee en consequence. Si on souhaite verifier errno apres
l'appel, celle-ci devrait etre positionnee a zero avant l'appel.
La valeur de retour peut pointer vers une zone statique et donc etre
ecrasee par des appels successifs a getpwent(3), getpwnam() ou
getpwuid(). (Ne pas passer le pointeur renvoye a free(3).)
En cas de succes, getpwnam_r() et getpwuid_r() renvoient zero et
definissent *result a pwd. Si aucun mot de passe ne correspond, ces
fonctions renvoient 0 et definissent *result a NULL. En cas d'erreur,
un code d'erreur est renvoye et *result et definit a NULL.
ERREURS
0 ou ENOENT ou ESRCH ou EBADF ou EPERM ou ...
Le nom name ou l'identifiant uid n'ont pas ete trouves.
EINTR Un signal a ete intercepte.
EIO Erreur d'entree-sortie.
EMFILE Le nombre maximal (OPEN_MAX) de fichiers ouverts par le
processus est atteint.
ENFILE Le nombre maximal de fichiers ouverts sur le systeme est
atteint.
ENOMEM Pas assez de memoire pour allouer la structure passwd.
ERANGE L'espace tampon fourni est insuffisant.
NOTE
La base de donnees des mots de passe utilisateur est la plupart du
temps /etc/passwd. Cependant, sur les systemes recents, elle peut faire
reference a une base de donnees reseau NIS, LDAP et les autres fichiers
locaux sont configures dans /etc/nsswitch.conf.
FICHIERS
/etc/passwd
Base de donnees des mots de passe locaux
/etc/nsswitch.conf
Fichier de configuration des base de donnees systeme et des
options des noms de services
CONFORMIT'E
SVr4, BSD 4.3, POSIX.1-2001.
NOTES
La description "VALEUR RENVOYEE" ci-dessus vient de POSIX.1-2001. Elle
ne considere pas le cas << non trouve >> comme une erreur, et ne
specifie pas errno dans ce cas. Cela rend la detection d'erreur
impossible. On peut dire que, d'apres POSIX, errno est inchangee dans
le cas ou aucune entree n'est trouvee. Des essais sur de nombreux
systemes Unix ont fait apparaitre differentes valeurs dans ce cas : 0,
ENOENT, EBADF, ESRCH, EWOULDBLOCK, EPERM et probablement d'autres.
Le champ pw_dir contient le nom du repertoire de travail initial de
l'utilisateur. Les programmes de connexion (<< login >>) utilisent ce
champ pour initialiser la variable d'environnement HOME pour les
interpreteurs de commandes initiaux. Une application qui souhaite
determiner le repertoire personnel des utilisateurs devrait lire la
valeur de HOME (au lieu de la valeur de getpwuid(getuid())->pw_dir)
puisque que ceci permet a l'utilisateur de modifier << son repertoire
personnel >> lorsqu'il est connecte. Pour determiner le repertoire
personnel << initial >> d'un autre utilisateur, il est necessaire
d'utiliser getpwnam("utilisateur")->pw_dir ou un equivalent.
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
parametre.
#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.27 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent etre trouvees a l'adresse
<URL:http://www.kernel.org/doc/man-pages/>.
TRADUCTION
Depuis 2010, cette traduction est maintenue a l'aide de l'outil po4a
<URL:http://po4a.alioth.debian.org/> par l'equipe 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'equipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en ecrivant a
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir acces a la version anglaise de ce document
en utilisant la commande << man -L C <section> <page_de_man> >>.