getlogin(3) Library Functions Manual getlogin(3) NAZWA getlogin, getlogin_r, cuserid - odczytuje nazwe 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(): Od glibc 2.24: (_XOPEN_SOURCE && ! (_POSIX_C_SOURCE >= 200112L) || _GNU_SOURCE Do glibc 2.23 wlacznie: _XOPEN_SOURCE OPIS getlogin() zwraca wskaznik do lancucha zawierajacego nazwe uzytkownika zalogowanego na terminalu sterujacym procesu lub wskaznik null, jesli nie mozna tej informacji okreslic. Lancuch 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 lancucha 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; lancuch jest zwracany w tej tablicy. W przeciwnym przypadku, zwracany jest wskaznik do lancucha w obszarze pamieci statycznej. Lancuch jest alokowany statycznie i moze zostac nadpisany przez pozniejsze wywolania tej funkcji lub funkcji getlogin(). Makro L_cuserid jest stala calkowita okreslajaca, jak 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() po pomyslnym zakonczeniu zwraca wskaznik do nazwy uzytkownika. W przypadku bledu zwracany jest NULL i ustawiane errno, wskazujac blad. getlogin_r() zwraca 0, jesli skonczy sie sukcesem, lub wartosc niezerowa, gdy wystapi blad. BLEDY POSIX okresla: 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) Dlugosc nazwy uzytkownika, lacznie z koncowym znakiem null, ('\0'), jest wieksza niz bufsize. Linux/glibc zwraca takze: 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-niebezpieczne | | | | race:getlogin race:utent | | | | sig:ALRM timer locale | +-------------+--------------------------+-----------------------------+ |getlogin_r() | Bezpieczenstwo watkowe | MT-niebezpieczne race:utent | | | | sig:ALRM timer locale | +-------------+--------------------------+-----------------------------+ |cuserid() | Bezpieczenstwo watkowe | MT-niebezpieczne | | | | 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() Brak. STANDARDY getlogin() getlogin_r(): POSIX.1-2001. OpenBSD. cuserid() System V, POSIX.1-1988. Usuniete w POSIX.1-1990. SUSv2. Usuniete w POSIX.1-2001. System V ma funkcje cuserid(), uzywajaca rzeczywistego identyfikatora uzytkownika, zamiast efektywnego identyfikatora uzytkownika. 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.9.1 15 czerwca 2024 r. getlogin(3)