getlogin(3) Library Functions Manual getlogin(3) NAZWA getlogin, getlogin_r, cuserid - odczytanie nazwy uzytkownika BIBLIOTEKA Standardowa biblioteka C (libc, -lc) SKLADNIA #include char *getlogin(void); int getlogin_r(char buf[.bufsize], size_t bufsize); #include char *cuserid(char *string); Wymagane ustawienia makr biblioteki glibc (patrz feature_test_macros(7)): getlogin_r(): _POSIX_C_SOURCE >= 199506L cuserid(): Since glibc 2.24: (_XOPEN_SOURCE && ! (_POSIX_C_SOURCE >= 200112L) || _GNU_SOURCE Up to and including glibc 2.23: _XOPEN_SOURCE OPIS getlogin() zwraca wskaznik do napisu zawierajacego nazwe uzytkownika zalogowanego na terminalu sterujacym procesu lub wskaznik null, jesli nie mozna tej informacji okreslic. Napis jest alokowany statycznie i moze zostac nadpisany przez pozniejsze wywolanie tej funkcji lub funkcji cuserid(). getlogin_r() zwraca te sama nazwe uzytkownika w tablicy buf o rozmiarze bufsize. cuserid() zwraca wskaznik do napisu zawierajacego nazwe uzytkownika skojarzonego z efektywnym identyfikatorem uzytkownika procesu. Jesli string nie jest wskaznikiem null, to powinien byc tablica, ktora moze pomiescic co najmniej L_cuserid znakow; napis jest zwracany w tej tablicy. W przeciwnym przypadku, zwracany jest wskaznik do napisu w obszarze pamieci statycznej. Napis jest alokowany statycznie i moze zostac nadpisany przez pozniejsze wywolania tej funkcji lub funkcji getlogin(). Makro L_cuserid jest stala calkowita okreslajaca, jaka duza tablica moze byc potrzebna do przechowania nazwy uzytkownika. L_cuserid jest zadeklarowane w . Funkcje te pozwalaja programowi pozytywnie zidentyfikowac uzytkownika, na prawach ktorego dziala program (cuserid()) lub uzytkownika zalogowanego w danej sesji (getlogin(). (Moga to byc rozni uzytkownicy, gdy wchodza w gre programy z ustawionym bitem set-user-ID). W wiekszosci zastosowan, bardziej przydatne dla okreslenia, kim jest uzytkownik, jest poslugiwanie sie zmienna srodowiskowa LOGNAME. Jest to bardziej elastyczne, wlasnie dlatego, ze uzytkownik moze dowolnie ustawic LOGNAME. WARTOSC ZWRACANA getlogin() returns a pointer to the username when successful, and NULL on failure, with errno set to indicate the error. getlogin_r() returns 0 when successful, and nonzero on failure. BLEDY POSIX specifies: EMFILE Zostalo osiagniete ograniczenie na liczbe otwartych deskryptorow plikow dla procesu. ENFILE Zostalo osiagniete systemowe ograniczenie na calkowita liczbe otwartych plikow. ENXIO Proces wywolujacy nie ma przypisanego terminala sterujacego. ERANGE (getlogin_r) The length of the username, including the terminating null byte ('\0'), is larger than bufsize. Linux/glibc also has: ENOENT Brak odpowiedniego wpisu w pliku utmp. ENOMEM Zabraklo pamieci na przydzielenie struktury passwd. ENOTTY Standardowe wejscie nie odnosi sie do terminala (patrz USTERKI). PLIKI /etc/passwd baza danych o haslach /var/run/utmp (tradycyjnie /etc/utmp; niektore wersje libc uzywaly /var/adm/utmp) ATRYBUTY Informacje o pojeciach uzywanych w tym rozdziale mozna znalezc w podreczniku attributes(7). +-------------+--------------------------+-----------------------------+ |Interfejs | Atrybut | Wartosc | +-------------+--------------------------+-----------------------------+ |getlogin() | Bezpieczenstwo watkowe | MT-Unsafe race:getlogin | | | | race:utent sig:ALRM timer | | | | locale | +-------------+--------------------------+-----------------------------+ |getlogin_r() | Bezpieczenstwo watkowe | MT-Unsafe race:utent | | | | sig:ALRM timer locale | +-------------+--------------------------+-----------------------------+ |cuserid() | Bezpieczenstwo watkowe | MT-Unsafe | | | | race:cuserid/!string locale | +-------------+--------------------------+-----------------------------+ W powyzszej tabeli utent w race:utent oznacza, ze jesli ktoras z funkcji setutent(3), getutent(3) lub endutent(3) jest uzywana rownolegle w roznych watkach programu, moze nastapic sytuacja wyscigu danych. Poniewaz getlogin() i getlogin_r() wywoluja te funkcje, stad dla przypomnienia uzytkownikom uzywamy race:utent. WERSJE OpenBSD ma getlogin() i setlogin() oraz nazwe uzytkownika powiazanego z sesja, nawet jesli nie ma on terminala sterujacego. STANDARDY getlogin() getlogin_r() POSIX.1-2008. cuserid() None. STANDARDY getlogin() getlogin_r(): POSIX.1-2001. OpenBSD. cuserid() System V, POSIX.1-1988. Removed in POSIX.1-1990. SUSv2. Removed in POSIX.1-2001. System V has a cuserid() function which uses the real user ID rather than the effective user ID. USTERKI Na nieszczescie, raczej latwo jest oglupic getlogin(). Czasem nie dziala ona wcale, gdyz jakis program namieszal w pliku utmp. Czesto zwraca jedynie pierwszych 8 znakow nazwy logowania. Ponadto uzytkownik obecnie zalogowany na terminalu sterujacym programu nie musi byc uzytkownikiem, ktory ten program uruchomil. Ze wzgledow zwiazanych z bezpieczenstwem, nalezy unikac getlogin(). Prosze zauwazyc, ze glibc nie przestrzega wymagan POSIX i uzywa stdin zamiast /dev/tty. Jest to blad. (Inne nowe systemy, takie jak SunOS 5.8, HP-UX 11.11 i FreeBSD 4.8, zwracaja nazwe zalogowanego uzytkownika takze wtedy, gdy stdin zostal przekierowany). Nikt dokladnie nie wie, co robi cuserid(); nalezy jej unikac w przenosnych programach. W ogole nalezy jej unikac i uzywac zamiast niej getpwuid(geteuid()), jesli jest to to, czego potrzeba. Nie nalezy uzywac cuserid(). ZOBACZ TAKZE logname(1), geteuid(2), getuid(2), utmp(5) TLUMACZENIE Autorami polskiego tlumaczenia niniejszej strony podrecznika sa: Andrzej Krzysztofowicz , Robert Luberda i Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Linux man-pages 6.06 31 pazdziernika 2023 r. getlogin(3)