Provided by: manpages-es_1.55-10_all bug

NOMBRE

       utmp, wtmp - registro de sesiones

SINOPSIS

       #include <utmp.h>

DESCRIPCI'ON

       El fichero utmp nos permite obtener informacion de quienes estan usando
       el sistema actualmente. Puede haber mas usuarios usando el  sistema  en
       el momento actual ya que no todos los programas usan utmp como registro
       de sesiones.

       Atenci'on: utmp no debe ser modificable  ya  que  muchos  programas  del
       sistema  dependen  (tontamente)  de  su  integridad. Corre el riesgo de
       tener  ficheros  de  registro  (logfiles)  del  sistema  falsos  y   de
       modificaciones  en  ficheros  del  sistema si deja que cualquiera pueda
       escribir en utmp.

       El fichero es una secuencia de entradas  con  la  siguiente  estructura
       declarada  en  el fichero cabecera (dese cuenta que esta es solo una de
       las posibles definiciones; los  detalles  dependen  de  la  version  de
       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;    /* estado de terminacion del
                                               proceso.  */
                short int e_exit;           /* estado de salida del
                                               proceso.  */
              };

              struct utmp {
                short ut_type;              /* tipo de login */
                pid_t ut_pid;               /* pid del proceso de login */
                char ut_line[UT_LINESIZE];  /* nombre de dispositivo de tty */
                char ut_id[2];              /* id de inicio o nombre abreviado
                                               de tty */
                char ut_user[UT_NAMESIZE];  /* nombre de usuario */
                char ut_host[UT_HOSTSIZE];  /* nombre de la maquina para login
                                               remoto */
                struct exit_status ut_exit; /* estado de salida de un proceso
                                               marcado como DEAD_PROCESS. */
                long ut_session;            /* ID de sesion, usado para el
                                               manejo de ventanas */
                struct timeval ut_tv;       /* instante en el que se hizo la
                                               entrada. */
                int32_t ut_addr_v6[4];      /* direccion IP de la maquina
                                               remota. */
                char pad[20];               /* Reservado para uso futuro.  */
              };

              /* Para compatibilidad hacia atras.  */
              #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]

       Esta  estructura  nos da el nombre del fichero especial asociado con el
       terminal del usuario, el login del usuario y el momento  de  inicio  de
       sesion  en  el formato de time(2).  Los campos del tipo cadena terminan
       en '\0' si son mas cortos que el tamano del campo.

       Las primeras entradas que se crean siempre proceden  del  procesamiento
       de  inittab(5)  por  parte  de  init(8).   Sin embargo, antes de que se
       procese una entrada, init(8) limpia utmp asignando a ut_type  el  valor
       DEAD_PROCESS,  limpiando  los  campos  ut_user,  ut_host  y ut_time con
       caracteres  nulos  para  cada  registro  cuyo  campo  ut_type  no   sea
       DEAD_PROCESS  ni  RUN_LVL  y  donde  no  exista  ningun proceso con PID
       ut_pid. Si no se puede encontrar ningun registro vacio con el ut_id que
       se necesita, init crea uno nuevo.  Asigna un valor a ut_id a partir del
       inittab, a ut_pid y a ut_time a partir de los valores actuales y asigna
       a ut_type el valor INIT_PROCESS.

       getty(8)  busca  la  entrada  por  el pid, cambia el valor de ut_type a
       LOGIN_PROCESS, cambia ut_time, asigna un valor a ut_line y espera a que
       se   establezca   la  conexion.   login(8),  despues  de  que  se  haya
       autenticado un usuario, cambia el  valor  de  ut_type  a  USER_PROCESS,
       cambia ut_time y asigna un valor a ut_host y a ut_addr.  Dependiendo de
       getty(8) y login(8), los registros se  pueden  buscar  por  ut_line  en
       lugar de por ut_pid, como es preferible.

       Cuando  init(8) encuentra que un proceso ha terminado, busca su entrada
       utmp por ut_pid, asinga  a  ut_type  el  valor  DEAD_PROCESS  y  limpia
       ut_user, ut_host y ut_time con bytes nulos.

       xterm(1)  y otros emuladores de terminal crean directamente un registro
       USER_PROCESS y generan ut_id  utilizando  las  ultimas  dos  letras  de
       /dev/ttyp%c  o  utilizando  p%d  para  /dev/pts/%d.  Si  encuentran  un
       DEAD_PROCESS para este id, lo reutilizan, en caso contrario, crean  una
       nueva  entrada. Si pueden, las marcaran como DEAD_PROCESS al terminar y
       se aconseja que tambien rellenen con nulos los campos ut_line, ut_time,
       ut_user y ut_host.

       xdm(8)  no  debe  crear  un  registro  utmp,  ya que no hay un terminal
       asignado. Si se le perimte crear uno provocara errores como  wtmp,  tal
       como lo hace ftpd(8).

       telnetd(8)  establece  una  entrada  LOGIN_PROCESS  y  deja  el resto a
       login(8), como es habitual.   Despues  de  que  termine  la  sesion  de
       telnet, telnetd(8) limpia utmp de la forma descrita.

       El  ficherowtmp  registra  todos  los  inicios  y finales de sesion. Su
       formato es como el de utmp salvo ue un nombre nulo de usuario indica el
       fin  de  sesion  en la terminal asociada. Ademas, el nombre de terminal
       "~" con nombre de  usuario  "shutdown"  r  "reboot"  indica  un  cierre
       (shutdown)  o  rearranque  del  sistema y el par de nombres de terminal
       "|"/"}" registra la fecha antigua/nueva del sistema  cuando  la  cambia
       date(1).  wtmp es mantenido por login(1), e init(1) y algunas versiones
       de getty(1).  Ninguno de estos programas crea el fichero, por lo que si
       se borra se desactiva el mantenimiento de los registros.

FICHEROS

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

CONFORME A

       Las  entradas  utmp de Linux no se corresponden ni con las de v7/BSD ni
       con las de SYSV; son una mezcla de  ambos  tipos.  v7/BSD  tiene  menos
       campos;  lo mas importante es la falta de ut_type, lo que provocara que
       los  programas  nativos  de  v7/BSD  muestren  (por  ejemplo)  entradas
       truncadas   o   de   sesion.   Ademas,  no  existe  ningun  fichero  de
       configuracion que asigne entradas a las sesiones. BSD lo hace  de  esta
       manera por la ausencia de los campos ut_id. En Linux (como en SYSV), el
       campo ut_id de un registro nunca  cambiara  una  vez  que  se  le  haya
       asignado  un  valor,  lo  que  reserva  esa entrada sin necesidad de un
       fichero  de  configuracion.  Limpiar  el  campo  ut_id  puede  producir
       condiciones  de  carrera  que  conduzcan  a entradas utmp corruptas y a
       agujeros de seguridad potenciales. La semantica de SYSV no necesita  la
       limpieza  de  los  campos  mencionados  anteriormente rellenandolos con
       bytes nulos, pero esto permite ejecutar muchos  programas  que  suponen
       una  semantica  BSD y que no modifican utmp. Linux usa las convenciones
       de BSD para los contenidos de las lineas, tal y como se ha  documentado
       mas arriba.

       SYSV solo usa el campo de tipo para marcarlas y para grabar en el campo
       de linea mensajes informativos tales como, por ejemplo,    "new  time".
       UT_UNKNOWN  parece  ser  un  invento de Linux. SYSV no tiene los campos
       ut_host ni ut_addr.

       A diferencia de otros sistemas, donde el  registro  de  informacion  en
       utmp  se  puede  desabilitar borrando el fichero, en Linux este fichero
       siempre debe existir. Si quiere deshabilitar who(1) elimine el  permiso
       de lectura de utmp de los permisos correspondientes a "otros".

       Note  que  la  estructura  utmp  de  libc5  ha  cambiado en libc6. Como
       consecuencia de esto, los binarios que usen la  antigua  estructura  de
       libc5 corromperan /var/run/utmp y/o /var/log/wtmp.  Los sistemas Debian
       incluyen una libc5 parcheada que usa  el  nuevo  formato  de  utmp.  El
       problema  todavia  existe  con  wtmp  ya que se utiliza directamente en
       libc5.

FALLOS

       Esta pagina de manual se basa en la de libc5; ahora  las  cosas  pueden
       funcionar de forma diferente.

RESTRICCIONES

       El  formato  del  fichero  es  dependiente de la maquina, por lo que se
       recomienda que sea procesado unicamente en la arquitectura  de  maquina
       donde se creo.

V'EASE TAMBI'EN

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