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 (consultez
feature_test_macros(7)) :
getlogin_r() : _REENTRANT || _POSIX_C_SOURCE >= 199506L
cuserid() : _XOPEN_SOURCE
DESCRIPTION¶
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)
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.44 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> ».