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(size_t bufsize;
               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ă:

EMFILE
    Limita per proces a numărului de descriptori de fișiere deschise a fost atinsă.

ENFILE
    Limita la nivel de sistem a numărului total de fișiere deschise a fost atinsă.

ENXIO
    Procesul apelant nu are terminal de control.

ERANGE
    (getlogin_r) Lungimea numelui de utilizator, inclusiv octetul nul de terminare ('\0'), este mai mare decât bufsize.

Linux/glibc are, de asemenea:

ENOENT
    Nu există nicio intrare corespunzătoare în fișierul utmp.

ENOMEM
    Insufficient memory to allocate passwd structure.

ENOTTY
    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

getlogin()
getlogin_r()
    POSIX.1-2008.

cuserid()
    Niciunul.

STANDARDE

getlogin()
getlogin_r():
    POSIX.1-2001. OpenBSD.

cuserid()
    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 (https://www.gnu.org/licenses/gpl-3.0.html) 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.