Provided by: manpages-pl-dev_4.19.0-7_all bug

NAZWA

       getpwnam, getpwnam_r, getpwuid, getpwuid_r - odczytanie wpisu 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

       The  getpwnam()  and getpwuid()  functions return a pointer to a passwd structure, or NULL
       if the matching entry is not found or an error occurs.  If an error occurs, errno  is  set
       to  indicate  the  error.  If one wants to check errno after the call, it should be set to
       zero before the call.

       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 or ENOENT or ESRCH or EBADF or EPERM or ...
              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-Unsafe race:pwnam locale                     │
       ├──────────────┼────────────────────────┼─────────────────────────────────────────────────┤
       │getpwuid()    │ Bezpieczeństwo wątkowe │ MT-Unsafe race:pwuid locale                     │
       ├──────────────┼────────────────────────┼─────────────────────────────────────────────────┤
       │getpwnam_r(), │ Bezpieczeństwo wątkowe │ MT-Safe locale                                  │
       │getpwuid_r()  │                        │                                                 │
       └──────────────┴────────────────────────┴─────────────────────────────────────────────────┘

STANDARDY

       POSIX.1-2001, POSIX.1-2008, SVr4, 4.3BSD. Pole pw_gecos nie jest wymienione w  standardzie
       POSIX, ale większość implementacji je zawiera.

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ślone */
               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("Name: %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> i Robert  Luberda
       <robert@debian.org>

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