Provided by: manpages-pl_20060617-3_all bug

NAZWA

       utmp, wtmp - zapisy o logowaniu

SK/LADNIA

       #include <utmp.h>

OPIS

       Plik  utmp  umoliwia  znalezienie  informacji o tym, kto w danej chwili
       korzysta z systemu. Z systemu moe korzysta wicej  uytkownikow,  poniewa
       nie wszystkie programy zapisuj informacje do utmp.

       Ostrzeenie:   utmp  musi  by  niezapisywalnym  plikiem,  poniewa  wiele
       programow systemowych (glupio) polega na  jego  integralnoci.  Istnieje
       ryzyko sfalszowania logow systemowych i modyfikacji plikow systemowych,
       jeli utmp bdzie zapisywalny dla uytkownikow.

       Plik  ten  jest  sekwencj  wpisow  o   postaci   nastpujcej   struktury
       zdeklarowanej w pliku naglowkowym (naley zwroci uwag, e jest to jedna z
       wielu definicji; szczegoly zale od wersji libc):

          #define UT_UNKNOWN      0
          #define RUN_LVL         1
          #define BOOT_TIME       2
          #define NEW_TIME        3
          #define OLD_TIME        4
          #define INIT_PROCESS    5
          #define LOGIN_PROCESS   6
          #define USER_PROCESS    7
          #define DEAD_PROCESS    8
          #define ACCOUNTING      9

          #define UT_LINESIZE     12
          #define UT_NAMESIZE     32
          #define UT_HOSTSIZE     256

          struct exit_status {
            short int e_termination;    /* kod przerwania procesu. */
            short int e_exit;           /* kod zakoczenia procesu. */
          };

          struct utmp {
            short ut_type;              /* rodzaj logowania */
            pid_t ut_pid;               /* PID procesu logujcego */
            char ut_line[UT_LINESIZE];  /* nazwa urzdzenia tty - "/dev/" */
            char ut_id[4];              /* id init lub skrot nazwy tty */
            char ut_user[UT_NAMESIZE];  /* nazwa uytkownika */
            char ut_host[UT_HOSTSIZE];  /* nazwa hosta dla zdalnego logowania */
            struct exit_status ut_exit; /* kod zakoczenia procesu
                                           oznaczonego jako DEAD_PROCESS */

            /* Pola ut_session i ut_tv musz mie ten sam rozmiar, gdy s
               kompilowane 32- i 64-bitowo.Pozwala to dzielenie plikow danych
               pamici wspoldzielonej pomidzy aplikacjami 32- i 64-bitowymi*/
          #if __WORDSIZE == 64 && defined __WORDSIZE_COMPAT32
            int32_t ut_session;         /* ID sesji, sluy do okienkowania */
            struct {
              int32_t tv_sec;           /* Sekundy */
              int32_t tv_usec;          /* Mikrosekundy */
            } ut_tv;                    /* Czas utworzenia wpisu */
          #else
             long int ut_session;       /* ID sesji, sluy do okienkowania */
             struct timeval ut_tv;      /* Czas utworzenia wpisu */
          #endif

            int32_t ut_addr_v6[4];      /* Adres IP zdalnego komputera */
            char __unused[20];          /* Zarezerwowane na przyszlo */
          };

          /* Dla zgodnoci w wczeniejszymi wersjami */
          #define ut_name ut_user
          #ifndef _NO_UT_TIME
          #define ut_time ut_tv.tv_sec
          #endif
          #define ut_xtime ut_tv.tv_sec
          #define ut_addr ut_addr_v6[0]

       Struktura ta podaje nazw pliku specjalnego  skojarzonego  z  terminalem
       uytkownika,  nazw uytkownika i czas zalogowania w postaci time(2). Pola
       tekstowe s zakoczone przez '\0', jeeli s krotsze ni rozmiar pola.

       Pierwsze  wpisy,  jakie  kiedykolwiek  utworzono,  pochodz  od  init(8)
       przetwarzajcego  inittab(5). Zanim jakikolwiek wpis zostanie utworzony,
       init(8) czyci utmp przez wpisanie DEAD_PROCESS do  ut_type,  wypelniajc
       ut_user,  ut_host  i  ut_time  bajtami  null we wszystkich rekordach, w
       ktorych ut_type nie jest ustawione na DEAD_PROCESS lub  RUN_LVL  i  dla
       ktorych  nie  istnieje proces o PID rownym ut_pid. Jeli nie znajdzie si
       aden pusty rekord z wymaganym ut_id, init tworzy nowy. Wpisuje do niego
       ut_id  z  inittab,  ut_pid  i  ut_time  nadaje biece wartoci, a ut_type
       nadaje warto INIT_PROCESS.

       getty(8)  lokalizuje  wpis  po  numerze   PID,   zmienia   ut_type   na
       LOGIN_PROCESS,  zmienia ut_time, ustawia ut_line i czeka na zestawienie
       polczenia. Po autentykacji  uytkownika,  login(8)  zmienia  ut_type  na
       USER_PROCESS,  zmienia  ut_time  i  nadaje  wartoci  ut_host i ut_addr.
       Zalenie od wersji getty(8) i login(8), rekordy mog  by  wyszukiwane  na
       podstawie ut_line zamiast preferowanego ut_pid.

       Gdy  init(8)  stwierdzi,  e proces zakoczyl prac, to znajduje jego wpis
       utmp wedlug ut_pid, ustawia ut_type na DEAD_PROCESS i wypelnia ut_user,
       ut_host oraz ut_time bajtami null.

       xterm(1)   i   inne   emulatory   terminali  tworz  bezporednio  rekord
       USER_PROCESS i generuj ut_id, uywajc ostatnich dwoch liter  /dev/ttyp%c
       lub   uywajc   p%d  dla  /dev/pts/%d.  Jeli  znajd  dla  tego  id  wpis
       DEAD_PROCESS, utylizuj go, w innym wypadku tworz nowy wpis.  Jeli  mog,
       zaznaczaj  go jako DEAD_PROCESS podczas koczenia pracy i jest zalecane,
       by zerowaly rownie ut_line, ut_time, ut_user oraz ut_host.

       xdm(1)  nie  powinien  tworzy  rekordu   w   utmp,   poniewa   nie   ma
       przydzielonego   terminala.   Pozwalanie   mu  na  utworzenie  takowego
       spowoduje bldy takie jak 'finger: cannot stat /dev/machine.dom'. Jednak
       powinien on tworzy wpisy wtmp, tak jak to czyni ftpd(8).

       telnetd(8)  ustawia  wpis  LOGIN_PROCESS  i  zostawia  po  prostu reszt
       programowi login(8). Po zakoczeniu sesji telnetu, telnetd(8) czyci utmp
       w opisany sposob.

       Plik  wtmp  ledzi wszystkie zalogowania i wylogowania. Jego format jest
       taki jak utmp, poza tym, e pusta  nazwa  uytkownika  wskazuje  na  jego
       wylogowanie  z  odpowiedniego  terminala. Co wicej, nazwa terminala ~ w
       polczeniu z nazw uytkownika shutdown czy reboot wskazuje  na  zamknicie
       lub  restart  systemu, a para nazw terminali |/} loguje nowy/stary czas
       systemowy  w  przypadku  jego  zmiany  za  pomoc  date(1).  wtmp   jest
       obslugiwane przez login(1), init(1) oraz niektore wersje getty(1). aden
       z tych programow nie tworzy tego pliku, wic jeli zostanie  on  usunity,
       zapisy do niego zostan wylczone.

       Prosz  zauway, e na platformach, ktore mog uruchamia zarowno 32-bitowe,
       jaki 64-bitowe aplikacje (x86-64, ppc64,  s390x  itd.),  rozmiary  pola
       ut_tvmusi  by  taki same w trybie 32-bitowym, co w 64-bitowym. Podobnie
       jest z polami ut_session i  ut_time,  jeli  s  obecne.  Pozwala  to  na
       dzielenie plikow danych i pamici wspoldzielonej pomidzy aplikacjami 32-
       i 64-bitowymi. Poniewa ut_tv moe nie by takie samo jak struct  timeval,
       to zamiast wywolywania:

              gettimeofday((struct timeval *) &ut.ut_tv, NULL);

       zaleca si uywanie poniszej metody do ustawiania wartoci w tym polu:

              struct utmp ut;
              struct timeval tv;

              gettimeofday(&tv, NULL);
              ut.ut_tv.tv_sec = tv.tv_sec;
              ut.ut_tv.tv_usec = tv.tv_usec;

PLIKI

       /var/run/utmp
       /var/log/wtmp

ZGODNE Z

       Wpisy  utmp  Linuksa  nie s zgodne ani z v7/BSD ani z Systemem V, ale s
       mieszanin tych dwoch. v7/BSD ma mniej pol; najwaniejszym problemem jest
       brak  ut_type,  ktory  powoduje e natywne programy v7/BSD wywietlaj (na
       przyklad)  wpisy   dead   lub   login.   Co   wicej,   nie   ma   pliku
       konfiguracyjnego,  ktory  przydziela  rekordy  sesjom.  BSD  tak  robi,
       poniewa nie ma on pol ut_id. W Linuksie (tak jak w  Systemie  V),  pole
       ut_id  rekordu  nigdy  nie  ulega zmianie, kiedy raz zostanie mu nadana
       warto, co rezerwuje ten rekord  bez  potrzeby  pliku  konfiguracyjnego.
       Czyszczenie  ut_id moe prowadzi do sytuacji wycigu, ktorych skutkiem bd
       uszkodzone  wpisy  w  utmp  i  potencjalne  dziury  w   bezpieczestwie.
       Czyszczenie  wymienionych  wyej  pol przez wypelnianie ich bajtami null
       nie  jest  wymagane  przy  semantyce  Systemu  V,   lecz   pozwala   na
       uruchamianie  wielu  programow,  ktore  zakladaj  semantyk  BSD  a  nie
       modyfikuj utmp. Linux uywa konwencji BSD dla zawartoci pola  line,  jak
       opisano wyej.

       System  V  uywa  pola type tylko do ich zaznaczania i loguje komunikaty
       informacyjne, takie jak np.  "new time" w polu line. UT_UNKNOWN  wydaje
       si by wymylone w Linuksie. System V nie ma pol ut_host czy ut_addr_v6.

       W przeciwiestwie do wielu innych systemow, gdzie utmp mona wylczy przez
       usunicie tego pliku,  w  Linuksie  utmp  zawsze  musi  istnie.  W  celu
       wylczenia who(1) naley jedynie uniemoliwi odczyt utmp dla calego wiata.

       Trzeba  zwroci uwag, e struktura utmp z libc5 ulegla zmianie w libc6. Z
       tego powodu binaria korzystajce ze starej struktury libc5  bd  uszkadza
       /var/run/utmp  i/lub /var/log/wtmp. System Debian zawiera polatan wersj
       libc5, ktora korzysta z nowego formatu  utmp.  Natomiast  wci  istnieje
       problem z wtmp, gdy dostp do tego pliku odbywa si w libc5 bezporednio.

OGRANICZENIA

       Format  pliku  jest  zaleny  od maszyny, wic jest zalecane, by plik byl
       przetwarzany tylko na maszynie na ktorej zostal utworzony.

       Prosz zauway, e na platformach, ktore mog uruchamia zarowno  32-bitowe,
       jaki  64-bitowe  aplikacje  (x86-64, ppc64, s390x itd.), rozmiary pol w
       strukturze  utmp  musz  by  takie  same  w  trybie  32-bitowym,  co   w
       64-bitowym,  Osiga  si to przez zmian typu ut_session na int32_t, ut_tv
       na struktur z dwoma polami typu int32_t: tv_sec i tv_usec (Dlatego, aby
       j wypelni, naley najpierw pobra czas do rzeczywistej struktury timeval,
       a nastpnie skopiowa oba pola do ut_tv.)

B/LDY

       Ta strona podrcznika zostala oparta na stronie z wersji  libc5,  rzeczy
       mog obecnie dziala inaczej.

ZOBACZ TAKE

       ac(1),  date(1),  last(1),  login(1),  who(1), getutent(3), updwtmp(3),
       init(8)

INFORMACJE O T/LUMACZENIU

       Powysze tlumaczenie pochodzi z nieistniejcego ju  Projektu  Tlumaczenia
       Manuali  i  moe nie by aktualne. W razie zauwaenia ronic midzy powyszym
       opisem a rzeczywistym zachowaniem  opisywanego  programu  lub  funkcji,
       prosimy o zapoznanie si z oryginaln (angielsk) wersj strony podrcznika.

Formaty plikow                    2004-10-31                           UTMP(5)