Scroll to navigation

getlogin(3) Library Functions Manual getlogin(3)

NUME

getlogin, getlogin_r, cuserid - obține numele de utilizator

BIBLIOTECA

Biblioteca C standard (libc, -lc)

SINOPSIS

#include <unistd.h>
char *getlogin(void);
int getlogin_r(char buf[.bufsize], size_t bufsize);
#include <stdio.h>
char *cuserid(char *string);

Cerințe pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultați feature_test_macros(7)):

getlogin_r():


_POSIX_C_SOURCE >= 199506L

cuserid():


Începând cu glibc 2.24
(_XOPEN_SOURCE && ! (_POSIX_C_SOURCE >= 200112L)
|| _GNU_SOURCE
Până la versiunea glibc 2.23 inclusiv:
_XOPEN_SOURCE

DESCRIERE

getlogin() returnează un indicator către un șir care conține numele utilizatorului conectat la terminalul de control al procesului sau un indicator nul dacă această informație nu poate fi determinată. Șirul este alocat static și poate fi suprascris la apelurile ulterioare ale acestei funcții sau ale funcției cuserid().

getlogin_r() returnează același nume de utilizator în matricea buf de dimensiune bufsize.

cuserid() returnează un indicator către un șir care conține un nume de utilizator asociat cu ID-ul efectiv al utilizatorului procesului. Dacă string nu este un indicator nul, acesta trebuie să fie o matrice care poate conține cel puțin L_cuserid caractere; șirul este returnat în această matrice. În caz contrar, este returnat un indicator către un șir dintr-o zonă statică. Acest șir este alocat static și poate fi suprascris la apelurile ulterioare ale acestei funcții sau ale funcției getlogin().

Macrocomanda L_cuserid este o constantă de număr întreg care indică lungimea matricei de care aveți nevoie pentru a stoca un nume de utilizator. L_cuserid este declarată în <stdio.h>.

Aceste funcții permit programului dvs. să identifice cu certitudine utilizatorul care rulează (cuserid()) sau utilizatorul care s-a conectat la această sesiune (getlogin()). (Acestea pot diferi atunci când sunt implicate programe set-user-ID.)

În majoritatea cazurilor, este mai util să utilizați variabila de mediu LOGNAME pentru a afla cine este utilizatorul. Aceasta este mai flexibilă tocmai pentru că utilizatorul poate defini LOGNAME în mod arbitrar.

VALOAREA RETURNATĂ

getlogin() returnează un indicator către numele de utilizator în cazul succesului și NULL în cazul eșecului, cu errno configurată pentru a indica eroarea. getlogin_r() returnează 0 în caz de succes și o valoare diferită de zero în caz de eșec.

ERORI-IEȘIRE

POSIX specifică:

Limita per proces a numărului de descriptori de fișiere deschise a fost atinsă.
Limita la nivel de sistem a numărului total de fișiere deschise a fost atinsă.
Procesul apelant nu are terminal de control.
(getlogin_r) Lungimea numelui de utilizator, inclusiv octetul nul de terminare ('\0'), este mai mare decât bufsize.

Linux/glibc are, de asemenea:

Nu există nicio intrare corespunzătoare în fișierul utmp.
Insufficient memory to allocate passwd structure.
Intrarea standard nu se referă la un terminal. A se vedea secțiunea «ERORI».

FIȘIERE

/etc/passwd
fișier de bază de date de parole
/var/run/utmp
(în mod tradițional /etc/utmp; unele versiuni libc utilizau /var/adm/utmp)

ATRIBUTE

Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).

Interfață Atribut Valoare
getlogin() Siguranța firelor MT-Unsafe race:getlogin race:utent sig:ALRM timer locale
getlogin_r() Siguranța firelor MT-Unsafe race:utent sig:ALRM timer locale
cuserid() Siguranța firelor MT-Unsafe race:cuserid/!string locale

În tabelul de mai sus, utent din race:utent înseamnă că, dacă oricare dintre funcțiile setutent(3), getutent(3) sau endutent(3) sunt utilizate în paralel în diferite fire ale unui program, pot apărea conflicte de date. getlogin() și getlogin_r() apelează aceste funcții, așa că folosim race:utent pentru a reaminti utilizatorilor.

VERSIUNI

OpenBSD are getlogin() și setlogin(), precum și un nume de utilizator asociat unei sesiuni, chiar dacă aceasta nu are un terminal de control.

STANDARDE

POSIX.1-2008.
Niciunul.

STANDARDE

POSIX.1-2001. OpenBSD.
System V, POSIX.1-1988. Eliminat în POSIX.1-1990. SUSv2. Eliminat în POSIX.1-2001.
System V are o funcție cuserid() care utilizează ID-ul real al utilizatorului în locul ID-ului efectiv al utilizatorului.

ERORI

Din păcate, este destul de ușor să păcălești getlogin(). Uneori nu funcționează deloc, deoarece unele programe au stricat fișierul utmp. Adesea, afișează doar primele 8 caractere ale numelui de utilizator. Utilizatorul conectat în prezent la terminalul de control al programului nostru nu trebuie să fie neapărat utilizatorul care l-a pornit. Evită getlogin() din motive de securitate.

Rețineți că glibc nu respectă specificația POSIX și utilizează stdin în loc de /dev/tty. O eroare. (Alte sisteme recente, precum SunOS 5.8, HP-UX 11.11 și FreeBSD 4.8, returnează numele de conectare și atunci când stdin este redirecționat.)

Nimeni nu știe cu exactitate ce face cuserid(); evitați-l în programele portabile. Sau evitați-l cu totul: folosiți în schimb getpwuid(geteuid()), dacă asta ați vrut să spuneți. Nu folosiți cuserid().

CONSULTAȚI ȘI

logname(1), geteuid(2), getuid(2), utmp(5)

TRADUCERE

Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.

15 iunie 2024 Pagini de manual de Linux 6.9.1