plucky (3) getpwuid.3.gz

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

NAZWA

       getpwnam, getpwnam_r, getpwuid, getpwuid_r - odczytuje wpis z pliku hasel

BIBLIOTEKA

       Standardowa biblioteka C (libc, -lc)

SKŁADNIA

       #include <sys/types.h>
       #include <pwd.h>

       struct passwd *getpwnam(const char *name);
       struct passwd *getpwuid(uid_t uid);

       int getpwnam_r(const char *restrict name, struct passwd *restrict pwd,
                      char buf[restrict .buflen], size_t buflen,
                      struct passwd **restrict result);
       int getpwuid_r(uid_t uid, struct passwd *restrict pwd,
                      char buf[restrict .buflen], size_t buflen,
                      struct passwd **restrict result);

   Wymagane ustawienia makr biblioteki glibc (patrz feature_test_macros(7)):

       getpwnam_r(), getpwuid_r():
           _POSIX_C_SOURCE
               || /* glibc w wersji <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE

OPIS

       Funkcja  getpwnam()  zwraca wskaźnik do struktury, zawierającej pola powstałe z rozłożenia tego rekordu z
       bazy haseł (na przykład z lokalnego pliku haseł /etc/passwd albo z NIS-a  lub  LDAP-a),  który  odpowiada
       użytkownikowi o nazwie name.

       Funkcja  getpwuid()  zwraca  wskaźnik  do struktury, zawierającej pola powstałe z rozłożenia tego rekordu
       bazy danych haseł, który odpowiada użytkownikowi o identyfikatorze uid.

       Struktura passwd jest następująco zdefiniowana w pliku <pwd.h>:

           struct passwd {
               char   *pw_name;       /* nazwa użytkownika */
               char   *pw_passwd;     /* hasło użytkownika */
               uid_t   pw_uid;        /* identyfikator użytkownika */
               gid_t   pw_gid;        /* identyfikator grupy */
               char   *pw_gecos;      /* informacje o użytkowniku */
               char   *pw_dir;        /* katalog domowy */
               char   *pw_shell;      /* program powłoki */
           };

       Więcej informacji tych polach można znaleźć w podręczniku passwd(5).

       Funkcje  getpwnam_r() i getpwuid_r() zwracają  te  same  informacje,  co  getpwnam()  i  getpwuid(),  ale
       zapisują  pobraną  strukturę passwd w przestrzeni wskazywanej przez argument pwd. Pola tekstowe, na które
       wskazują członkowie struktury passwd są przekazywane w buforze buf o rozmiarze buflen. W zmiennej *result
       jest  zapisywany wskaźnik do wyniku funkcji (w przypadku powodzenia) lub NULL (jeśli nie znaleziono wpisu
       w bazie lub gdy wystąpił błąd).

       Wywołanie

           sysconf(_SC_GETPW_R_SIZE_MAX)

       zwraca albo -1, bez zmieniania wartości errno, albo początkowy sugerowany rozmiar dla bufora  buf  (jeśli
       ten  rozmiar  jest  za  mały, to opisywane funkcje  zwrócą błąd ERANGE - wtedy proces wywołujący powinien
       spróbować ponownie z większym buforem).

WARTOŚĆ ZWRACANA

       Funkcje getpwnam() i getpwuid() zwracają wskaźnik do struktury passwd albo  NULL,  jeśli  nie  znaleziono
       pasującego  wpisu  lub  gdy wystąpił błąd. W przypadku wystąpienia błędu ustawiają errno, wskazując błąd.
       Aby móc sprawdzić wartość errno po wywołaniu tych funkcji, należy ją przed wywołaniem ustawić na zero.

       Zwrócona wartość może wskazywać na statyczny obszar, który może być  nadpisany  przez  kolejne  wywołania
       getpwent(3), getpwnam() lub getpwuid() (zwróconego wskaźnika nie należy przekazywać do funkcji free(3)).

       getpwnam_r()  i  getpwuid_r(), jeśli się powiodą, to zwracają zero i ustawiają *result na  pwd. Jeśli nie
       znaleziono pasującego rekordu w bazie haseł, to funkcje zwracają 0 i wpisują NULL do *result. W przypadku
       błędu zawracany jest numer błędu i *result jest ustawiany na NULL.

BŁĘDY

       0 lub ENOENT, lub ESRCH, lub EBADF, lub EPERM, lub ...
              Podany argument name lub uid nie został znaleziony.

       EINTR  Przechwycono sygnał, patrz signal(7).

       EIO    Błąd wejścia/wyjścia.

       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.

       ENOMEM Zabrakło pamięci na przydzielenie struktury passwd.

       ERANGE Przekazano niewystarczający bufor.

UWAGA

       Baza  danych  haseł użytkownika zazwyczaj oznacza plik /etc/passwd. Jednakże w nowszych systemach może to
       także  oznaczać  bazy  używające  NIS-a,  LDAP-a  oraz  innych  lokalnych   plików   skonfigurowanych   w
       /etc/nsswitch.conf.

PLIKI

       /etc/passwd
              lokalny plik bazy z hasłami

       /etc/nsswitch.conf
              plik konfiguracyjny System Databases i Name Service Switch

ATRYBUTY

       Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku attributes(7).

       ┌───────────────────────────┬────────────────────────┬───────────────────────────────────────────────────┐
       │InterfejsAtrybutWartość                                           │
       ├───────────────────────────┼────────────────────────┼───────────────────────────────────────────────────┤
       │getpwnam()                 │ Bezpieczeństwo wątkowe │ MT-niebezpieczne race:pwnam locale                │
       ├───────────────────────────┼────────────────────────┼───────────────────────────────────────────────────┤
       │getpwuid()                 │ Bezpieczeństwo wątkowe │ MT-niebezpieczne race:pwuid locale                │
       ├───────────────────────────┼────────────────────────┼───────────────────────────────────────────────────┤
       │getpwnam_r(), getpwuid_r() │ Bezpieczeństwo wątkowe │ MT-bezpieczne locale                              │
       └───────────────────────────┴────────────────────────┴───────────────────────────────────────────────────┘

WERSJE

       Pole pw_gecos nie jest wymienione w standardzie POSIX, ale większość implementacji je zawiera.

STANDARDY

       POSIX.1-2008.

HISTORIA

       POSIX.1-2001, SVr4, 4.3BSD.

UWAGI

       Sformułowania podane w rozdziale „WARTOŚĆ ZWRACANA” pochodzą ze standardu POSIX.1-2001. Nie uwzględnia on
       jednak sytuacji „nie znaleziono wpisu w bazie” jako błąd i dlatego nie określa, jaką wartość powinno mieć
       errno  w takim przypadku. Jednakże uniemożliwia to rozpoznawanie błędów. Można by dowodzić, że zgodnie ze
       standardem POSIX errno powinno  pozostać  niezmienione,  jeśli  nie  znaleziono  wpisu.  Eksperymentalnie
       stwierdzono,  że  różne  systemy uniksowe ustawiają różne wartości: 0, ENOENT, EBADF, ESRCH, EWOULDBLOCK,
       EPERM i być może jeszcze jakieś inne.

       Pole pw_dir zawiera nazwę początkowego katalogu bieżącego użytkownika. Programy do logowania użytkowników
       używają wartości tego pola do zainicjowania zmiennej środowiskowej HOME powłok zgłoszeniowych. Aplikacja,
       która chce określić katalog domowy użytkownika powinna sprawdzać wartość zmiennej  HOME  (a  nie  wartość
       pola   getpwuid(getuid())->pw_dir),   ponieważ  pozwala  to  użytkownikowi  zmienić  znaczenie  „katalogu
       domowego”. Aby określić katalog domowy innego użytkownika, należy użyć  getpwnam("username")->pw_dir  lub
       czegoś podobnego.

PRZYKŁADY

       Poniższy  program  obrazuje  użycie  funkcji   getpwnam_r()  do  znalezienia  pełnej nazwy i numerycznego
       identyfikatora użytkownika przekazanego w argumencie linii poleceń.

       #include <errno.h>
       #include <pwd.h>
       #include <stdint.h>
       #include <stdio.h>
       #include <stdlib.h>
       #include <unistd.h>

       int
       main(int argc, char *argv[])
       {
           struct passwd pwd;
           struct passwd *result;
           char *buf;
           long bufsize;
           int s;

           if (argc != 2) {
               fprintf(stderr, "Użycie: %s nazwa-użytkownika\n", argv[0]);
               exit(EXIT_FAILURE);
           }

           bufsize = sysconf(_SC_GETPW_R_SIZE_MAX);
           if (bufsize == -1)          /* Wartość nie była określona */
               bufsize = 16384;        /* Powinno w zupełności wystarczyć */

           buf = malloc(bufsize);
           if (buf == NULL) {
               perror("malloc");
               exit(EXIT_FAILURE);
           }

           s = getpwnam_r(argv[1], &pwd, buf, bufsize, &result);
           if (result == NULL) {
               if (s == 0)
                   printf("Nie znaleziono\n");
               else {
                   errno = s;
                   perror("getpwnam_r");
               }
               exit(EXIT_FAILURE);
           }

           printf("Nazwa: %s; UID: %jd\n", pwd.pw_gecos,
                  (intmax_t) pwd.pw_uid);
           exit(EXIT_SUCCESS);
       }

ZOBACZ TAKŻE

       endpwent(3), fgetpwent(3), getgrnam(3), getpw(3),  getpwent(3),  getspnam(3),  putpwent(3),  setpwent(3),
       nsswitch.conf(5), passwd(5)

TŁUMACZENIE

       Autorami  polskiego  tłumaczenia  niniejszej  strony podręcznika są: Przemek Borys <pborys@dione.ids.pl>,
       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⟩.