Provided by: manpages-pl-dev_4.26.0-1_all 

NAZWA
getlogin, getlogin_r, cuserid - odczytuje nazwę użytkownika
BIBLIOTEKA
Standardowa biblioteka C (libc, -lc)
SKŁADNIA
#include <unistd.h>
char *getlogin(void);
int getlogin_r(char buf[.bufsize], size_t bufsize);
#include <stdio.h>
char *cuserid(char *string);
Wymagane ustawienia makr biblioteki glibc (patrz feature_test_macros(7)):
getlogin_r():
_POSIX_C_SOURCE >= 199506L
cuserid():
Od glibc 2.24:
(_XOPEN_SOURCE && ! (_POSIX_C_SOURCE >= 200112L)
|| _GNU_SOURCE
Do glibc 2.23 włącznie:
_XOPEN_SOURCE
OPIS
getlogin() zwraca wskaźnik do łańcucha zawierającego nazwę użytkownika zalogowanego na terminalu
sterującym procesu lub wskaźnik null, jeśli nie można tej informacji określić. Łańcuch jest alokowany
statycznie i może zostać nadpisany przez późniejsze wywołanie tej funkcji lub funkcji cuserid().
getlogin_r() zwraca tę samą nazwę użytkownika w tablicy buf o rozmiarze bufsize.
cuserid() zwraca wskaźnik do łańcucha zawierającego nazwę użytkownika skojarzonego z efektywnym
identyfikatorem użytkownika procesu. Jeśli string nie jest wskaźnikiem null, to powinien być tablicą,
która może pomieścić co najmniej L_cuserid znaków; łańcuch jest zwracany w tej tablicy. W przeciwnym
przypadku, zwracany jest wskaźnik do łańcucha w obszarze pamięci statycznej. Łańcuch jest alokowany
statycznie i może zostać nadpisany przez późniejsze wywołania tej funkcji lub funkcji getlogin().
Makro L_cuserid jest stałą całkowitą określającą, jak duża tablica może być potrzebna do przechowania
nazwy użytkownika. L_cuserid jest zadeklarowane w <stdio.h>.
Funkcje te pozwalają programowi pozytywnie zidentyfikować użytkownika, na prawach którego działa program
(cuserid()) lub użytkownika zalogowanego w danej sesji (getlogin(). (Mogą to być różni użytkownicy, gdy
wchodzą w grę programy z ustawionym bitem set-user-ID).
W większości zastosowań, bardziej przydatne dla określenia, kim jest użytkownik, jest posługiwanie się
zmienną środowiskową LOGNAME. Jest to bardziej elastyczne, właśnie dlatego, że użytkownik może dowolnie
ustawić LOGNAME.
WARTOŚĆ ZWRACANA
getlogin() po pomyślnym zakończeniu zwraca wskaźnik do nazwy użytkownika. W przypadku błędu zwracany jest
NULL i ustawiane errno, wskazując błąd. getlogin_r() zwraca 0, jeśli skończy się sukcesem, lub wartość
niezerową, gdy wystąpi błąd.
BŁĘDY
POSIX określa:
EMFILE Zostało osiągnięte ograniczenie na liczbę otwartych deskryptorów plików dla procesu.
ENFILE Zostało osiągnięte systemowe ograniczenie na całkowitą liczbę otwartych plików.
ENXIO Proces wywołujący nie ma przypisanego terminala sterującego.
ERANGE (getlogin_r) Długość nazwy użytkownika, łącznie z końcowym znakiem null, ('\0'), jest większa niż
bufsize.
Linux/glibc zwraca także:
ENOENT Brak odpowiedniego wpisu w pliku utmp.
ENOMEM Zabrakło pamięci na przydzielenie struktury passwd.
ENOTTY Standardowe wejście nie odnosi się do terminala (patrz USTERKI).
PLIKI
/etc/passwd
baza danych o hasłach
/var/run/utmp
(tradycyjnie /etc/utmp; niektóre wersje libc używały /var/adm/utmp)
ATRYBUTY
Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku attributes(7).
┌──────────────┬────────────────────────┬───────────────────────────────────────────────────────────────┐
│ Interfejs │ Atrybut │ Wartość │
├──────────────┼────────────────────────┼───────────────────────────────────────────────────────────────┤
│ getlogin() │ Bezpieczeństwo wątkowe │ MT-niebezpieczne race:getlogin race:utent sig:ALRM timer │
│ │ │ locale │
├──────────────┼────────────────────────┼───────────────────────────────────────────────────────────────┤
│ getlogin_r() │ Bezpieczeństwo wątkowe │ MT-niebezpieczne race:utent sig:ALRM timer locale │
├──────────────┼────────────────────────┼───────────────────────────────────────────────────────────────┤
│ cuserid() │ Bezpieczeństwo wątkowe │ MT-niebezpieczne race:cuserid/!string locale │
└──────────────┴────────────────────────┴───────────────────────────────────────────────────────────────┘
W powyższej tabeli utent w race:utent oznacza, że jeśli któraś z funkcji setutent(3), getutent(3) lub
endutent(3) jest używana równolegle w różnych wątkach programu, może nastąpić sytuacja wyścigu danych.
Ponieważ getlogin() i getlogin_r() wywołują te funkcje, stąd dla przypomnienia użytkownikom używamy
race:utent.
WERSJE
OpenBSD ma getlogin() i setlogin() oraz nazwę użytkownika powiązanego z sesją, nawet jeśli nie ma on
terminala sterującego.
STANDARDY
getlogin()
getlogin_r()
POSIX.1-2008.
cuserid()
Brak.
STANDARDY
getlogin()
getlogin_r():
POSIX.1-2001. OpenBSD.
cuserid()
System V, POSIX.1-1988. Usunięte w POSIX.1-1990. SUSv2. Usunięte w POSIX.1-2001.
System V ma funkcję cuserid(), używającą rzeczywistego identyfikatora użytkownika, zamiast
efektywnego identyfikatora użytkownika.
USTERKI
Na nieszczęście, raczej łatwo jest ogłupić getlogin(). Czasem nie działa ona wcale, gdyż jakiś program
namieszał w pliku utmp. Często zwraca jedynie pierwszych 8 znaków nazwy logowania. Ponadto użytkownik
obecnie zalogowany na terminalu sterującym programu nie musi być użytkownikiem, który ten program
uruchomił. Ze względów związanych z bezpieczeństwem, należy unikać getlogin().
Proszę zauważyć, że glibc nie przestrzega wymagań POSIX i używa stdin zamiast /dev/tty. Jest to błąd.
(Inne nowe systemy, takie jak SunOS 5.8, HP-UX 11.11 i FreeBSD 4.8, zwracają nazwę zalogowanego
użytkownika także wtedy, gdy stdin został przekierowany).
Nikt dokładnie nie wie, co robi cuserid(); należy jej unikać w przenośnych programach. W ogóle należy jej
unikać i używać zamiast niej getpwuid(geteuid()), jeśli jest to to, czego potrzeba. Nie należy używać
cuserid().
ZOBACZ TAKŻE
logname(1), geteuid(2), getuid(2), utmp(5)
TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Andrzej Krzysztofowicz
<ankry@green.mf.pg.gda.pl>, Robert Luberda <robert@debian.org> i Michał Kułach <michal.kulach@gmail.com>
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać
zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ
ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-
list@lists.sourceforge.net.
Linux man-pages 6.9.1 15 czerwca 2024 r. getlogin(3)