NOM
getlogin, getlogin_r, cuserid - Obtenir le nom de l’utilisateur
SYNOPSIS
#include <unistd.h>
char *getlogin(void);
int getlogin_r(char *buf, size_t bufsize);
#include <stdio.h>
char *cuserid(char *string);
Exigences de macros de test de fonctionnalités pour la glibc (voir
feature_test_macros(7)) :
getlogin_r() : _REENTRANT || _POSIX_C_SOURCE >= 199506L
cuserid() : _XOPEN_SOURCE
La fonction getlogin() renvoie un pointeur sur une chaîne de caractères
contenant le nom de l’utilisateur connecté sur le terminal contrôlant
le processus, ou un pointeur NULL si cette information n’est pas
disponible. La chaîne est allouée de manière statique et peut donc être
écrasée lors des appels ultérieurs à getlogin() ou à cuserid().
getlogin_r() renvoie le même nom d’utilisateur dans le tableau buf de
taille bufsize.
La fonction cuserid() renvoie un pointeur sur une chaîne de caractères
contenant le nom de l’utilisateur associé à l’UID effectif du
processus. Si string n’est pas un pointeur NULL, ce doit être une table
contenant au moins L_cuserid caractères. La chaîne sera alors renvoyée
dans cette table. Sinon (si string vaut NULL), un pointeur sur une
chaîne allouée statiquement sera renvoyé. Cette chaîne peut être
écrasée par des appels ultérieurs à getlogin().
La constante symbolique L_cuserid est un entier indiquant la longueur
nécessaire pour stocker un nom d’utilisateur. L_cuserid est déclarée
dans <stdio.h>.
Ces fonctions permettent d’identifier correctement l’utilisateur qui
exécute le programme (cuserid()), ou l’utilisateur connecté à la
session (getlogin()). Ces deux éléments peuvent différer si le bit
Set-UID du programme est validé.
La plupart du temps, il est plus utile d’utiliser la variable
d’environnement LOGNAME pour déterminer l’utilisateur. Ceci est plus
flexible car il est justement possible de modifier LOGNAME
arbitrairement.
VALEUR RENVOYÉE
getlogin() renvoie un pointeur sur le nom de l’utilisateur si elle
réussit, et NULL si elle échoue. getlogin_r() renvoie 0 si elle réussit
et une valeur non nulle si elle échoue.
ERREURS
POSIX spécifie
EMFILE Le processus appelant a déjà le nombre maximal autorisé de
fichiers ouverts.
ENFILE Le système a déjà le nombre maximal autorisé de fichiers
ouverts.
ENXIO Le processus appelant n’a pas de terminal (tty) contrôlant.
ERANGE (getlogin_r) La longueur du nom d’utilisateur, en incluant le
caractère NUL final, est plus grande que bufsize.
Linux/glibc a aussi les erreurs :
ENOENT Il n’y a pas d’entrée correspondante dans le fichier utmp.
ENOMEM Pas assez de mémoire pour allouer la structure passwd.
ENOTTY L’entrée standard ne fait pas référence à un terminal (voir
BOGUES).
FICHIERS
/etc/passwd
Fichier de base de données des mots de passe
/var/run/utmp
(traditionnellement /etc/utmp ; certaines versions de la libc
utilisent /var/adm/utmp)
CONFORMITÉ
getlogin() et getlogin_r() sont spécifiées dans POSIX.1-2001.
System V dispose d’une fonction cuserid() qui utilise l’UID réel plutôt
que l’UID effectif. La fonction cuserid() a été incorporée dans la
version POSIX de 1988, mais supprimée de la version de 1990. Elle était
présente dans SUSv2, mais elle a été supprimée de POSIX.1-2001.
OpenBSD a getlogin() et setlogin(), et un nom d’utilisateur associé à
une session, même s’il n’a pas de terminal de contrôle.
BOGUES
Malheureusement, il est souvent assez facile de tromper getlogin().
Parfois, il ne fonctionne pas du tout car certains programmes
n’utilisent pas le fichier utmp correctement. Souvent, il ne retourne
que les 8 premiers caractères du nom. L’utilisateur connecté sur le
terminal de contrôle d’un programme n’est pas nécessairement celui qui
a lancé le programme. Évitez getlogin() pour des problèmes de sécurité.
Veuillez noter que la glibc ne suit pas la spécification POSIX et
utilise stdin au lieu de /dev/tty. Un bogue (les autres systèmes
récents, comme SunOS 5.8, HP-UX 11.11 et FreeBSD 4.8 renvoient
l’identifiant de connexion même si stdin est redirigée).
Personne ne sait précisément ce que fait cuserid(). Évitez-le dans des
programmes portables. Évitez-le de toute manière. Utilisez
getpwuid(geteuid()) à la place si vous en avez besoin. N’utilisez pas
cuserid().
VOIR AUSSI
geteuid(2), getuid(2), utmp(5)
COLOPHON
Cette page fait partie de la publication 3.23 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
Cette page de manuel a été traduite et mise à jour par Christophe
Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis par
Alain Portal <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et mise à
disposition sur http://manpagesfr.free.fr/.
Les mises à jour et corrections de la version présente dans Debian sont
directement gérées par Florentin Duneau <fduneau@gmail.com> et l’équipe
francophone de traduction de Debian.
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> ».