Provided by: manpages-de_0.8-1_all bug

BEZEICHNUNG

       utmp, wtmp - login Eintrage

       Diese  Handbuchseite ist eventuell veraltet. Im Zweifelsfall ziehen Sie
       die englischsprachige Handbuchseite zu Rate, indem Sie

              man -LC 5 utmp

       eingeben.

"UBERSICHT

       #include <utmp.h>

BESCHREIBUNG

       Die utmp Datei gibt Auskunft daruber, wer das System im Moment benutzt.
       Da  nicht  alle  Programme  utmp  benutzen,  kann  es  jedoch noch mehr
       Benutzer im System geben.

       Warnung:  utmp  darf  nicht  allgemein  schreibbar  sein,  weil   viele
       Systemprogramme  von der Korrektheit dieser Datei abhangig sind.  Falls
       Sie utmp fur jeden schreibbar lassen, riskieren Sie falsche Eintrage in
       Systemlogdateien und Modifikationen von Systemdateien.

       Die  Datei  besteht  aus einer Sequenz von Eintragen der Struktur utmp,
       die uber die Include-Datei deklariert wird.  Das Format  von  utmp  ist
       nicht   strikt  festgelegt,  sondern  hangt  ab  von  der  Version  der
       verwendeten libc.  Das folgende Beispiel ist glibc 2.2.5 entnommen:

              #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           32
              #define UT_NAMESIZE           32
              #define UT_HOSTSIZE           256

              struct exit_status {
                short int e_termination;    /* Abbruchstatus des Prozesses.  */
                short int e_exit;           /* Ruckgabestatus des Prozesses.  */
              };

              struct utmp {
                short int ut_type;          /* Typ des Eintrags */
                pid_t ut_pid;               /* Kennung des Anmeldeprozesses */
                char ut_line[UT_LINESIZE];  /* Geratename - "/dev/" */
                char ut_id[4];              /* init id or abgek. Leitungsname */
                char ut_user[UT_NAMESIZE];  /* Benutzer login-Name */
                char ut_host[UT_HOSTSIZE];  /* Rechner-Name bei remote login */
                struct exit_status ut_exit; /* Ruckgabestatus eines Prozesses, der
                                               als DEAD_PROCESS markiert ist. */
                long int ut_session;        /* Sessionkennung, benutzt, um mehrere
                                               Fenster zu unterscheiden. */
                struct timeval ut_tv;       /* Zeit, zu der der Eintrag erstellt
                                               wurde. */
                int32_t ut_addr_v6[4];      /* Internetadresse des Ursprungsrechners
                                               der Login-Verbindung. */
                char __unused[20];          /* Unbenutzt, reserviert fur spatere
                                               Verwendung. */
              };

       Diese Struktur enthalt den Namen der Geratedatei fur das  Terminal  des
       Benutzers,  seinen Login-Namen und den Zeitpunkt im Format von time(2),
       an dem er sich eingeloggt hat.  Zeichenketten sind mit '\0' terminiert,
       falls sie kurzer als das Feld sind, das sie enthalt.

       Die  ersten  Eintrage, die je erstellt werden, entstehen durch init(8),
       der inittab(5) verarbeitet.   Bevor  ein  solcher  Eintrag  verarbeitet
       wird,  raumt  init(8)  utmp auf, indem bei jedem Eintrag dessen ut_type
       nicht DEAD_PROCESS oder RUN_LVL ist und fur den kein  Prozess  mit  der
       PID  ut_pid  existiert,  ut_type  auf  DEAD_PROCESS  gesetzt  wird  und
       ut_user, ut_host und ut_time mit Null-Bytes gefullt werden.  Falls kein
       leerer  Eintrag  mit  der benotigten ut_id gefunden wird, erstellt init
       einen.  Dabei wird ut_id von inittab ubernommen, ut_pid und ut_time auf
       die aktuellen Werte und ut_type auf INIT_PROCESS gesetzt wird.

       getty(8)  findet  den  Eintrag  mittels  der  PID,  andert  ut_type  zu
       LOGIN_PROCESS, andert ut_time, setzt ut_line und  wartet  darauf,  dass
       eine  Verbindung  hergestellt  wird.   Nachdem  login(8) einen Benutzer
       authentifizieren konnte, andert  es  ut_type  zu  USER_PROCESS,  andert
       ut_time  und  setzt ut_host und ut_addr.  Je nach getty(8) und login(8)
       konnten Eintrage auch mittels ut_line anstatt der vorzuziehenden ut_pid
       gefunden werden.

       Wenn init(8) feststellt, dass ein Prozess beendet wurde, lokalisiert es
       den entsprechenden utmp  Eintrag  mittels  ut_pid,  setzt  ut_type  auf
       DEAD_PROCESS und fullt ut_user, ut_host und ut_time mit Null-Bytes.

       xterm(1)   und   andere   Terminal-Emulatoren  erstellen  direkt  einen
       USER_PROCESS- Eintrag und erzeugen die ut_id entweder durch die letzten
       beiden  Zeichen  von /dev/ttyp%c oder durch p%d bei /dev/pts/%d.  Falls
       sie einen DEAD_PROCESS- Eintrag fur diese ID  finden,  wird  er  wieder
       benutzt,  ansonsten  wird  ein  neuer Eintrag erstellt.  Falls moglich,
       markieren sie vor Beendigung den Eintrag als DEAD_PROCESS und  es  wird
       geraten,  dass  sie  ut_line,  ut_time,  ut_user und ut_host mit Nullen
       fullen.

       xdm(8) sollte keinen utmp-Eintrag erstellen, weil es kein  zugeordnetes
       Terminal  gibt.  Falls es trotzdem gemacht wird, werden Fehlermeldungen
       wie finger: cannot stat /dev/machine.dom die  Folge  sein.   Es  sollte
       jedoch  ein  wtmp Eintrag erzeugt werden, genau wie es auch bei ftpd(8)
       geschieht.

       telnetd(8) erzeugt einen LOGIN_PROCESS-Eintrag und lasst  login(8)  den
       Rest  erledigen.   Nachdem  die  telnet-Sitzung  beendet  ist, markiert
       telnetd(8) den utmp- Eintrag in der oben beschriebenen Art und Weise.

       Die wtmp Datei zeichnet alle An- und Abmeldungen im  System  auf.   Das
       Format  gleicht  utmp,  mit  der Ausnahme, dass ein leerer Benutzername
       eine Abmeldung vom angegebenen Terminal  anzeigt.   Weiterhin  bedeutet
       die Terminalleitung "~" mit dem Benutzernamens "shutdown" oder "reboot"
       ein Herunterfahren bzw.  den Neustart des  Systems  und  das  Paar  der
       Terminalleitungen  "|"/"}"  zeichnet die alte/neue Systemzeit auf, wenn
       diese durch date(1) geandert wird.  wtmp wird durch  login(1),  init(8)
       und  getty(1) verwaltet.  Keins dieser Programme erstellt die Datei, so
       dass, falls  sie  geloscht  wird,  keine  Aufzeichnungen  mehr  gemacht
       werden.

DATEIEN

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

KONFORM ZU

       Linux utmp Eintrage sind weder zu v7/BSD noch zu SYSV konform: Sie sind
       eine Vereinigung von beidem.  v7/BSD  hat  weniger  Felder,  vor  allem
       fehlt  ut_type,  was ursprungliche v7/BSD-ahnliche Programme veranlaBt,
       tote  und  login-Eintrage  anzuzeigen.    Weiterhin   gibt   es   keine
       Konfigurationsdatei,  die  jeder  Session eine Eintragsnummer zuordnet.
       Dies wird in BSD gemacht, weil dort ut_id  fehlt.   In  Linux  (wie  in
       SYSV), wird das ut_id Feld eines Eintrags nach dem initialen Setzen nie
       wieder   geandert,    wodurch    diese    Eintragnummer    ohne    jede
       Konfigurationsdatei  reserviert  wird.  ut_id zu loschen fuhrt zu Race-
       Conditions  und  resultiert  in   beschadigten   utmp   Eintragen   und
       potenziellen Sicherheitslochern.  Die SYSV-Semantik verlangt nicht, die
       oben angegebenen Felder mit Null-Bytes  zu  loschen,  aber  es  erlaubt
       viele  Programme  zu  benutzen,  die die BSD-Semantik benutzen und utmp
       nicht verandern.  Wie beschrieben, benutzt Linux  die  BSD-Konventionen
       fur Leitungsnamen.  SYSV benutzt nur das Typ-Feld um solche Eintrage zu
       markieren und zeichnet Meldungen wie "new time" im  Leitungs-Feld  auf.
       SYSV  hat  ein  Feld  mehr,  um den Exit-Status von beendeten Prozessen
       aufzuzeichnen.  UT_UNKNOWN scheint eine Linux Erfindung  zu  sein.   In
       Linux  gibt  es  keinen  ACCOUNTING  Typ.   SYSV  hat kein ut_host oder
       ut_addr Feld.  Anders als bei verschiedenen anderen Systemen,  wo  utmp
       Aufzeichnungen durch Loschen der Datei abgeschaltet werden konnen, muss
       utmp bei Linux immer vorhanden  sein.   Falls  who(1)  verboten  werden
       soll, dann kann man utmp einfach nicht allgemein lesbar machen.

EINSCHR"ANKUNGEN

       Das  Dateiformat  ist maschinengebunden.  Es wird daher empfohlen, dass
       es nur auf der Architektur verarbeitet wird, auf der es erstellt wurde.

FEHLER

       Ein GroBteil der obigen Beschreibung basiert auf der  libc5.   Aktuelle
       Versionen konnten inzwischen ein anderes Verfahren verwenden.

SIEHE AUCH

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