Provided by: manpages-pl-dev_4.18.1-1_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
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩   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⟩.