oracular (3) cuserid.3.gz

Provided by: manpages-pl-dev_4.23.1-1_all bug

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).

       ┌─────────────┬────────────────────────┬─────────────────────────────────────────────────────────────────┐
       │InterfejsAtrybutWartość                                                         │
       ├─────────────┼────────────────────────┼─────────────────────────────────────────────────────────────────┤
       │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 ⟨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⟩.