getlogin(3) Library Functions Manual getlogin(3) NOM getlogin, getlogin_r, cuserid -- Obtenir le nom de l'utilisateur BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include char *getlogin(void); int getlogin_r(char buf[.bufsize], size_t bufsize); #include char *cuserid(char *string); Exigences de macros de test de fonctionnalites pour la glibc (consulter feature_test_macros(7)) : getlogin_r() : _POSIX_C_SOURCE >= 199506L cuserid() : Depuis la glibc 2.24 : (_XOPEN_SOURCE && ! (_POSIX_C_SOURCE >= 200112L) || _GNU_SOURCE Pour la glibc anterieure et egale a 2.23 : _XOPEN_SOURCE DESCRIPTION La fonction getlogin() renvoie un pointeur sur une chaine de caracteres contenant le nom de l'utilisateur connecte sur le terminal controlant le processus, ou un pointeur NULL si cette information n'est pas disponible. La chaine est allouee de maniere statique et peut donc etre ecrasee lors des appels ulterieurs a getlogin() ou a cuserid(). getlogin_r() renvoie le meme nom d'utilisateur dans le tableau buf de taille bufsize. La fonction cuserid() renvoie un pointeur sur une chaine de caracteres contenant le nom de l'utilisateur associe a l'UID effectif du processus. Si string n'est pas un pointeur NULL, ce doit etre une table contenant au moins L_cuserid caracteres. La chaine sera alors renvoyee dans cette table. Sinon (si string vaut NULL), un pointeur sur une chaine allouee statiquement sera renvoye. Cette chaine peut etre ecrasee par des appels ulterieurs a getlogin(). La constante symbolique L_cuserid est un entier indiquant la longueur necessaire pour stocker un nom d'utilisateur. L_cuserid est declaree dans . Ces fonctions permettent d'identifier correctement l'utilisateur qui execute le programme (cuserid()), ou l'utilisateur connecte a la session (getlogin()). Ces deux elements peuvent differer si le bit Set-UID du programme est valide. La plupart du temps, il est plus utile d'utiliser la variable d'environnement LOGNAME pour determiner l'utilisateur. Ceci est plus flexible car il est justement possible de modifier LOGNAME arbitrairement. VALEUR RENVOYEE getlogin() renvoie un pointeur sur le nom de l'utilisateur si elle reussit. En cas d'echec, NULL est renvoye et errno est defini pour indiquer l'erreur. getlogin_r() renvoie 0 si elle reussit et une valeur non nulle si elle echoue. ERREURS POSIX specifie : EMFILE La limite du nombre de descripteurs de fichiers par processus a ete atteinte. ENFILE La limite du nombre total de fichiers ouverts pour le systeme entier a ete atteinte. ENXIO Le processus appelant n'a pas de terminal (tty) controlant. ERANGE (getlogin_r) La longueur du nom d'utilisateur, en incluant le caractere NULL final (<< \0 >>), est plus grande que bufsize. Linux/glibc a aussi les erreurs : ENOENT Il n'y a pas d'entree correspondante dans le fichier utmp. ENOMEM Pas assez de memoire pour allouer la structure passwd. ENOTTY L'entree standard ne fait pas reference a un terminal (voir BOGUES). FICHIERS /etc/passwd Fichier de base de donnees des mots de passe /var/run/utmp (traditionnellement /etc/utmp ; certaines versions de la libc utilisent /var/adm/utmp) ATTRIBUTS Pour une explication des termes utilises dans cette section, consulter attributes(7). +-------------+--------------------------+-----------------------------+ |Interface | Attribut | Valeur | +-------------+--------------------------+-----------------------------+ |getlogin() | Securite des threads | MT-Unsafe race:getlogin | | | | race:utent sig:ALRM timer | | | | locale | +-------------+--------------------------+-----------------------------+ |getlogin_r() | Securite des threads | MT-Unsafe race:utent | | | | sig:ALRM timer locale | +-------------+--------------------------+-----------------------------+ |cuserid() | Securite des threads | MT-Unsafe | | | | race:cuserid/!string locale | +-------------+--------------------------+-----------------------------+ Dans la table ci-dessus, utent dans race:utent signifie que si une des fonctions setutent(3), getutent(3) o endutent(3) est utilisee en parallele dans differents threads d'un programme, des situations de competition de donnees peuvent se produire. getlogin() et getlogin_r() appellent ces fonctions, c'est pourquoi race:utent est utilise pour le rappeler aux utilisateurs. VERSIONS OpenBSD a getlogin() et setlogin(), et un nom d'utilisateur associe a une session, meme s'il n'a pas de terminal de controle. STANDARDS getlogin() getlogin_r() POSIX.1-2008. cuserid() Aucun. STANDARDS getlogin() getlogin_r() : POSIX.1-2001, OpenBSD. cuserid() System V, POSIX.1-1988. Supprime dans POSIX.1-1990. SUSv2. Supprime dans POSIX.1-2001. System V possede une fonction cuserid() qui utilise l'UID reel plutot que l'UID effectif. 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 caracteres du nom. L'utilisateur connecte sur le terminal de controle d'un programme n'est pas necessairement celui qui a lance le programme. Evitez getlogin() pour des problemes de securite. Veuillez noter que la glibc ne suit pas la specification POSIX et utilise stdin au lieu de /dev/tty. Un bogue (les autres systemes recents, comme SunOS 5.8, HP-UX 11.11 et FreeBSD 4.8 renvoient l'identifiant de connexion meme si stdin est redirigee). Personne ne sait precisement ce que fait cuserid(). Evitez-le dans des programmes portables. Evitez-le de toute maniere. Utilisez getpwuid(geteuid()) a la place si vous en avez besoin. N'utilisez pas cuserid(). VOIR AUSSI logname(1), geteuid(2), getuid(2), utmp(5) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Jean-Pierre Giraud Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 getlogin(3)