Provided by: manpages-it_2.80-3_all bug

NOME

       utmp, wtmp - registri dei login

SINTASSI

       #include <utmp.h>

DESCRIZIONE

       Il  file  utmp permette di scoprire informazioni su chi sta usando attualmente il sistema.
       Ci possono essere più utenti che stanno usando il sistema di quelli riportati, poiché  non
       tutti i programmi usano registrazioni utmp.

       Attenzione:  utmp  non deve essere scrivibile, poiché molti programmi di sistema dipendono
       (stupidamente) dalla sua integrità.  Si rischia di avere file di log contraffatti  e  file
       del sistema modificati lasciando utmp scrivibile da qualsiasi utente.

       Il  file  è  una sequenza di voci con la seguente struttura dichiarata nel file di include
       (si noti che questa è solo una delle numerose definizioni in giro;  i  dettagli  dipendono
       dalla versione di 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;    /* stato di chiusura del processo */
             short int e_exit;           /* stato di uscita del processo */
           };

           struct utmp {
             short ut_type;              /* tipo di login */
             pid_t ut_pid;               /* PID del processo di login */
             char ut_line[UT_LINESIZE];  /* nome del dispositivo tty - "/dev/" */
             char ut_id[4];              /* identificativo di init o nome tty abbrev. */
             char ut_user[UT_NAMESIZE];  /* nome utente */
             char ut_host[UT_HOSTSIZE];  /* nome dell'host per il login remoto */
             struct exit_status ut_exit; /* Lo stato di uscita di un processo
                                            marcato come DEAD_PROCESS */

             /* I campi ut_session e ut_tv devono essere della stessa dimensione sia
                compilati per 32 che per 64 bit. Ciò permette a file dati e memoria condivisa di essere condivisi tra
                applicazioni 32-bit e applicazioni 64-bit. */
           #if __WORDSIZE == 64 && defined __WORDSIZE_COMPAT32
             int32_t ut_session;         /* ID della sessione, usato per il windowing */
             struct {
               int32_t tv_sec;           /* Secondi */
               int32_t tv_usec;          /* Microsecondi */
             } ut_tv;                    /* Creata una voce Time */
           #else
              long int ut_session;        /* ID della sessione, usato per il windowing */
              struct timeval ut_tv;       /* Creata una voce Time */
           #endif

             int32_t ut_addr_v6[4];       /* Indirizzo IP dell'host remoto */
             char __unused[20];           /* Riservato per usi futuri */
           };

           /* Trucchi per la compatibilità all'indietro.  */
           #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]

       Questa  struttura  dà il nome del file speciale associato con il terminale utente, il nome
       di login dell'utente, e l'ora di login nel formato  di  time(2).   I  campi  stringa  sono
       terminati con '\0' se sono più corti della dimensione del campo.

       Le prime voci del file sono il risultato di init(8) quando processa inittab(5).  Prima che
       una voce sia eseguita, però,  init(8)  pulisce  il  file  utmp  assegnando  il  valore  di
       DEAD_PROCESS  a  ut_type,  pulendo  ut_user,  ut_host  e  ut_time  con byte nulli per ogni
       registrazione il cui ut_type non sia DEAD_PROCESS o RUN_LVL, e quelle per cui non esistono
       processi  con  PID ut_pid.  Se non si trovano registrazioni vuote con la ut_id necessaria,
       init ne crea una nuova.  Poi assegna ut_id dal file inittab, assegna i  valori  attuali  a
       ut_pid e fIut_time e assegna INIT_PROCESS a ut_type.

       mingetty(8) (o agetty(8)) localizza le voci tramite il PID, cambia ut_type perché contenga
       LOGIN_PROCESS, aggiorna ut_time,  assegna  ut_line  e  aspetta  che  venga  stabilita  una
       connessione.   login(1),  dopo  aver  autenticato  un  utente, cambia ut_type perché valga
       USER_PROCESS, aggiorna ut_time e imposta ut_host e ut_addr.  In base al  comportamento  di
       mingetty(8)  (o  agetty(8))  e  login(1),  le  registrazioni possono essere indirizzate da
       ut_line invece del metodo preferibile, ut_pid.

       Quando init(8) scopre che un processo è  terminato,  ricerca  la  sua  voce  utmp  tramite
       ut_pid,  assegna  il  valore  DEAD_PROCESS a ut_type e pulisce ut_user, ut_host e ut_time,
       assegnandogli dei byte nulli.

       xterm(1) e altri emulatori terminale creano direttamente un record USER_PROCESS e generano
       il  ut_id  usando  le  ultime due lettere di /dev/ttyp%c o usando p%d per /dev/pts/%d.  Se
       essi trovano un DEAD_PROCESS per questo ID, lo  riciclano,  altrimenti  creano  una  nuova
       voce.  Se possono, lo marcheranno come DEAD_PROCESS all'uscita e si consiglia che azzerino
       anche ut_line, ut_time, ut_user, e ut_host.

       telnetd(8) imposta una voce LOGIN_PROCESS e lascia il resto a  login(1)  come  al  solito.
       Dopo che la sessione telnet termina telnetd(8) pulisce utmp nel modo descritto.

       Il  file  wtmp  registra  tutti  i login e logout.  Il suo formato è esattamente come utmp
       tranne che un nome utente nullo indica un logout sul terminale associato.  Inoltre il nome
       terminale ~ con nome utente shutdown o reboot indica uno spegnimento o riavvio del sistema
       e la coppia di nomi di terminale |/} fa il log della vecchia/nuova ora di  sistema  quando
       date(1)  la  cambia.   wtmp  è  mantenuto  da  login(1),  init(8), e da alcune versioni di
       getty(8) (cioè mingetty(8) o agetty(8)).  Il file  non  è  creato  da  nessuno  di  questi
       programmi, quindi se esso viene rimosso la registrazione è disattivata.

       Notare  che  su  piattaforme  biarch, come sistemi che possono far girare sia applicazioni
       32-bit che 64-bit (x86-64, ppc64, s390x, etc.), ut_tv è della stessa  dimensione  in  modo
       32-bit  e  in modo 64-bit.  Lo stesso vale per ut_session e ut_time se sono presenti.  Ciò
       permette a file dati e memoria condivisa di essere condivisi  tra  applicazioni  32-bit  e
       applicazioni  64-bit.   Poiché  ut_tv  potrebbe  non  essere  lo stesso di struct timeval,
       allora, invece della chiamata:

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

       si raccomanda il seguente metodo per impostare il campo:

           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;

FILE

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

CONFORME A

       Le voci Linux utmp non sono conformi nè a v7/BSD nè a SYSV; esse sono un  mix  delle  due.
       v7/BSD  ha  meno  campi;  più  importante,  esso non ha ut_type, e ciò fa sì che programmi
       nativi v7/BSD visualizzino (per esempio) voci morte o di login.  Inoltre,  non  c'è  alcun
       file  di  configurazione che alloca slot alle sessioni.  BSD fa questo perché non ha campi
       ut_id.  In Linux (come in System V), il campo ut_id di un  record  non  cambierà  mai  una
       volta  che  è  stato  impostato,  e  ciò riserva questo spazio senza bisogno di un file di
       configurazione.  Cancellare ut_id può dar luogo a delle race condition che portano a  voci
       utmp  corrotte  e  a  potenziali  buchi di sicurezza.  Cancellare i campi menzionati sopra
       riempiendoli con byte nulli non è richiesto dalla  semantica  System  V,  ma  permette  di
       eseguire  molti  programmi che assumono la semantica BSD e che non modificano utmp.  Linux
       usa le convenzioni BSD per i contenuti di linea, come documentato in precedenza.

       System V usa solo il campo type per marcare le righe e registra messaggi informativi come,
       per esempio, "new time" nel campo line.  UT_UNKNOWN sembra essere una invenzione di Linux.
       System V non ha campi ut_host o ut_addr_v6.

       A differenza di vari altri sistemi, dove la registrazione in utmp può essere  disabilitata
       cancellando  il file, utmp deve sempre esistere in Linux.  Se si vuole disabilitare who(1)
       basta togliere il permesso di lettura globale al file utmp.

       Si noti che lo struct di utmp è cambiato tra libc5 e libc6.  Di conseguenza, un  programma
       che usi il vecchio struct di libc5 altera /var/run/utmp e/o /var/log/wtmp.

NOTE

       Il  formato  del  file  dipende  dalla  macchina, perciò si raccomanda di modificarlo solo
       macchine della stessa architettura di quella su cui il file è stato creato.

       Si noti che su piattaforme che possono eseguire applicazioni sia a  32-bit  che  a  64-bit
       (x86-64,  ppc64, s390x, etc.), le dimensioni dei campi di una struttura utmp devono essere
       le stesse in modalità 32-bit e in modalità 64-bit.  Ciò è raggiunto cambiando il  tipo  di
       ut_session  in  int32_t, e quello di ut_tv in una struttura con due campi int32_t tv_sec e
       tv_usec.  (Quindi, per riempirlo, mettere  l'ora  in  una  reale  struct  timeval,  quindi
       copiare i due campi in ut_tv.)

BACHI

       Questa  pagina  di  manuale  si basa su quella di libc5, ora le cose potrebbero funzionare
       diversamente.

VEDERE ANCHE

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

COLOPHON

       Questa pagina fa parte del rilascio 2.80 del progetto man-pages di Linux.  Si può  trovare
       una   descrizione   del   progetto,   e  informazioni  su  come  riportare  bachi,  presso
       http://www.kernel.org/doc/man-pages/.   Per  la  traduzione  in  italiano  si   può   fare
       riferimento a http://www.pluto.it/ildp/collaborare/