Provided by: manpages-pl-dev_4.21.0-2_all bug

NAZWA

       getlogin, getlogin_r, cuserid - odczytanie nazwy 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():
           Since glibc 2.24:
               (_XOPEN_SOURCE && ! (_POSIX_C_SOURCE >= 200112L)
                   || _GNU_SOURCE
           Up to and including glibc 2.23:
               _XOPEN_SOURCE

OPIS

       getlogin() zwraca wskaźnik do napisu zawierającego nazwę użytkownika zalogowanego na terminalu sterującym
       procesu  lub  wskaźnik  null,  jeśli nie można tej informacji określić. Napis 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  napisu  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; napis  jest  zwracany  w  tej  tablicy.  W  przeciwnym
       przypadku,  zwracany  jest  wskaźnik  do  napisu  w  obszarze  pamięci  statycznej.  Napis 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ą, jaka 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()   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.

BŁĘDY

       POSIX specifies:

       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)  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 Zabrakło pamięci na przydzielenie struktury passwd.

       ENOTTY Standardowe wejście nie odnosi się do terminala (patrz BŁĘDY IMPLEMENTACJI).

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).
       ┌──────────────┬────────────────────────┬───────────────────────────────────────────────────────────────┐
       │ InterfejsAtrybutWartość                                                       │
       ├──────────────┼────────────────────────┼───────────────────────────────────────────────────────────────┤
       │ getlogin()   │ Bezpieczeństwo wątkowe │ MT-Unsafe race:getlogin race:utent sig:ALRM timer locale      │
       ├──────────────┼────────────────────────┼───────────────────────────────────────────────────────────────┤
       │ getlogin_r() │ Bezpieczeństwo wątkowe │ MT-Unsafe race:utent sig:ALRM timer locale                    │
       ├──────────────┼────────────────────────┼───────────────────────────────────────────────────────────────┤
       │ cuserid()    │ Bezpieczeństwo wątkowe │ MT-Unsafe 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.

STANDARDY

       getlogin() i getlogin_r(): POSIX.1-2001, POSIX.1-2008.

       System V zawiera funkcję cuserid(), która posługuje się raczej rzeczywistym  identyfikatorem  użytkownika
       niż  efektywnym  identyfikatorem  użytkownika. Funkcję cuserid() włączono w wersji POSIX z roku 1988, ale
       usunięto ją w wersji z roku 1990. Była obecna w SUSv2, ale została usunięta w POSIX.1-2001.

       OpenBSD ma getlogin() i setlogin() oraz nazwę użytkownika powiązanego z sesją,  nawet  jeśli  nie  ma  on
       terminala sterującego.

BŁĘDY

       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.03                            5 lutego 2023 r.                                     getlogin(3)