Provided by: manpages-fr_3.27fr1.4-1_all bug

NOM

       utmp, wtmp - Enregistrements de connexion

SYNOPSIS

       #include <utmp.h>

DESCRIPTION

       Le  fichier  utmp  permet de voir qui est connecte sur le systeme. Tous
       les programmes n'utilisant pas les  enregistrement  utmp,  il  se  peut
       qu'il y ait plus d'utilisateurs que ceux affiches.

       Attention :  utmp ne doit pas etre accessible en ecriture par la classe
       d'utilisateurs  << autres >>,  car  de  nombreux  programmes   systemes
       dependent   (malheureusement)   de  son  integrite.  En  laissant  utmp
       accessible en ecriture pour les utilisateurs n'etant ni le proprietaire
       ni  dans  le  groupe  proprietaire,  vous  prenez  le risque d'avoir de
       mauvais fichiers de journalisation, et des  modifications  de  fichiers
       systeme.

       Le  fichier est une suite de structures utmp, declarees comme ceci dans
       <utmp.h> (notez qu'il ne s'agit que d'une des definitions  existantes ;
       les details dependent de la version de la bibliotheque C) :

           /* Valeurs pour le champ ut_type, ci-dessous */

           #define EMPTY         0 /* L'enregistrement ne contient pas
                                      d'information valable (connu auparavant
                                      comme UT_UNKNOWN sous Linux) */
           #define RUN_LVL       1 /* Modification du niveau d'execution systeme
                                      (consultez init(8)) */
           #define BOOT_TIME     2 /* Date de demarrage du systeme
                                      (en ut_tv) */
           #define NEW_TIME      3 /* Heure apres le changement d'heure systeme
                                      (en ut_tv) */
           #define OLD_TIME      4 /* Heure avant le changement d'heure systeme
                                      (en ut_tv) */
           #define INIT_PROCESS  5 /* Processus lance par init(8) */
           #define LOGIN_PROCESS 6 /* Processus leader de session pour
                                      la connexion de l'utilisateur */
           #define USER_PROCESS  7 /* Processus normal */
           #define DEAD_PROCESS  8 /* Processus termine */
           #define ACCOUNTING    9 /* Pas implemente */

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

           struct exit_status {              /* Type pour ut_exit ci-dessous */
               short int e_termination;      /* code de fin de processus     */
               short int e_exit;             /* code de sortie de processus  */
           };

           struct utmp {
               short   ut_type;              /* Type d'enregistrement */
               pid_t   ut_pid;               /* PID du processus */
               char    ut_line[UT_LINESIZE]; /* Nom du peripherique tty
                                                - << /dev/ >> */
               char    ut_id[4];             /* Suffixe du nom de terminal,
                                                ou identifiant inittab(5)
               char    ut_user[UT_NAMESIZE]; /* Nom d'utilisateur */
               char    ut_host[UT_HOSTSIZE]; /* Nom d'hote pour connexion distante,
                                                ou version du noyau pour les
                                                messages du niveau d'execution
                                                (run-level) */
               struct  exit_status ut_exit;  /* Code de fin d'un processus
                                                deja marque DEAD_PROCESS ;
                                                pas utilise par init(8) de Linux. */
               /* Les champs ut_session et ut_tv fields doivent avoir la meme
                  taille lors de la compilation, 32 et 64 bits. Cela permet aux
                  fichiers de donnees et a la memoire partagee d'etre partages
                  entre les applications 32 et 64 bits. */
           #if __WORDSIZE == 64 && defined __WORDSIZE_COMPAT32
               int32_t ut_session;           /* ID de session  (getsid(2)),
                                                utilise pour le fenetrage */
               struct {
                   int32_t tv_sec;           /* Secondes */
                   int32_t tv_usec;          /* Microsecondes */
               } ut_tv;                      /* Horodatage */
           #else
               long int ut_session;          /* ID de session */
               struct timeval ut_tv;         /* Horodatage */
           #endif

               int32_t ut_addr_v6[4];        /* Adresse IP hote distant ;
                                                les adresses IPv4 utilisent
                                                seulement ut_addr_v6[0] */
               char __unused[20];            /* Reserve pour utilisation future */
           };

           /* Bidouille pour compatibilite ascendante */
           #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]

       Cette  structure donne le nom du fichier special associe au terminal de
       l'utilisateur, le nom d'utilisateur, l'heure de connexion sous la forme
       time(2).  Les  chaines de caracteres se terminent par << \0 >> si elles
       sont plus courtes que les longueurs definies dans la structure.

       Le premier enregistrement cree est  le  traitement  de  inittab(5)  par
       init(8).  Neanmoins,  avant  ca,  init(8) positionne le champ ut_type a
       DEAD_PROCESS, et efface ut_user, ut_host et ut_time (remplis  avec  des
       octets  nuls)  de  tous  les  enregistrement  dont  l'ut_type  n'est ni
       DEAD_PROCESS ni RUN_LVL, et si aucun processus de PID ut_pid  n'existe.
       Si  aucun  enregistrement  vide  n'est  trouve  avec  le ut_id correct,
       init(8) en  cree  un  nouveau.  Il  positionne  ut_id  en  s'aidant  de
       l'inittab,  ut_pid  et  ut_time avec les valeurs actuelles et ut_type a
       INIT_PROCESS.

       mingetty(8) (ou agetty(8)) recupere l'entree correspondant a  son  PID,
       donne  a  ut_type  la  valeur  LOGIN_PROCESS,  modifie ut_time, definit
       ut_line et attend  l'etablissement  d'une  connexion.  Une  fois  qu'un
       utilisateur  a  ete  authentifie,  login(1)  donne  a ut_type la valeur
       USER_PROCESS, modifie ut_time et definit ut_host et ut_addr. Selon  les
       utilitaires  mingetty(8)  (ou  agetty(8))  et  login(1)  utilises,  les
       enregistrements sont parfois identifies par ut_line plutot que  ut_pid,
       qui est preferable.

       Quand  init(8) s'apercoit qu'un processus est termine, il identifie son
       enregistrement  utmp  grace  au  champ  ut_pid,  positionne  ut_type  a
       DEAD_PROCESS  et  efface  ut_user,  ut_host  et ut_time avec des octets
       nuls.

       xterm(1), et d'autres emulateurs de terminaux,  creent  directement  un
       enregistrement  USER_PROCESS,  engendrant  ut_id  grace a la chaine qui
       suffixe le nom du terminal (les caracteres  qui  suivent  /dev/[pt]ty.)
       S'ils  trouvent un DEAD_PROCESS correspondant a cet ID, ils le recycle,
       sinon  ils  en  creent  un   nouveau.   Si   possible,   ils   marquent
       l'enregistrement comme etant DEAD_PROCESS lorsqu'ils se terminent et il
       faut tenir compte du fait qu'ils effacent egalement  ut_line,  ut_time,
       ut_user et ut_host.

       telnetd(8) construit un enregistrement LOGIN_PROCESS et laisse le reste
       du travail a login(1). Une fois que la  session  telnet  est  terminee,
       telnetd(8) efface l'utmp de la maniere decrite plus haut.

       Le  fichier  wtmp enregistre les connexions et deconnexions. Son format
       est exactement le meme que utmp excepte qu'un utilisateur  nul  indique
       une  deconnexion  sur  le terminal associe. De plus, un nom de terminal
       << ~ >> associe a un nom d'utilisateur << shutdown >>  ou  << reboot >>
       indique   un   arret   ou   un   redemarrage   du  systeme.  Une  paire
       d'enregistrements avec les noms  de  terminaux  << |/} >>  indique  une
       modification  de  l'heure  systeme  avec  date(1).  Le fichier wtmp est
       maintenu par login(1),  init(8)  et  quelques  uns  des  getty(8)  (par
       exemple  mingetty(8)  ou agetty(8)). Aucun de ces programmes ne cree le
       fichier. Aussi, si on le supprime, les  enregistrements  de  connexions
       sont arretes.

FICHIERS

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

CONFORMIT'E

       POSIX.1 ne specifie pas de structure utmp, mais une appelee utmpx, avec
       des specifications pour les champs  ut_type,  ut_pid,  ut_line,  ut_id,
       ut_user  et  ut_tv.  POSIX.1  ne  specifie  pas  les tailles des champs
       ut_line et ut_user.

       Linux definit la structure utmpx comme etant la meme que  la  structure
       utmp.

   Comparaison avec des syst`emes historiques
       Les  enregistrements  utmp  de  Linux ne se conforment ni a v7/BSD ni a
       System V. Ils sont en realite un melange des deux.

       v7/BSD comporte moins de champs ; par exemple pas de  ut_type,  ce  qui
       conduit  les  programmes  natifs  de v7/BSD a afficher des entrees (par
       exemple) des entrees << mortes >> ou d'identification (<< login >>). De
       plus,  il  n'y a pas de fichier de configuration pour allouer les slots
       aux sessions. BSD le fait parce qu'il lui manque le champ ut_id.

       Sous Linux (comme sous System V), le champ ut_id d'un enregistrement ne
       sera  jamais  modifie  apres  son initialisation. L'effacement de ut_id
       peut engendrer des conditions de concurrence  conduisant  a  avoir  des
       entrees  utmp  corrompues  et,  potentiellement, des trous de securite.
       Effacer les champs mentionnes ci-dessus en  les  remplissant  avec  des
       zeros  binaires  n'est  pas  requis par la semantique de System V, mais
       cela permet l'execution de nombreux programmes qui  s'appuient  sur  la
       semantique  de  BSD  et  qui  ne  modifient pas utmp. Linux utilise les
       conventions BSD en ce qui concerne le  contenu  des  lignes,  tels  que
       c'est precise plus haut.

       System V n'a pas de champ ut_host ni ut_addr_v6.

NOTES

       Contrairement a d'autres systemes, sur lesquels l'effacement du fichier
       arrete la journalisation, le fichier utmp doit  toujours  exister  sous
       Linux.  Si  vous  desirez desactiver who(1), laissez le fichier utmp en
       place, mais ne le laissez pas lisible par tout le monde.

       Le format de ces fichiers depend de la machine, et il est recommande de
       ne les utiliser que sur la machine ou ils ont ete crees.

       Notez  que  sur les plates-formes biarch, c'est-a-dire les systemes qui
       utilisent a la fois des applications 32  et  64  bits  (x86_64,  ppc64,
       s390x, etc.), ut_tv est de la meme taille en mode 32 bits et en mode 64
       bits. De meme en ce qui concerne ut_session et ut_time s'ils  existent.
       Ceci  permet  aux  fichiers  de donnees et a la memoire partagee d'etre
       partages entre les applications 32 bits et 64 bits. Cela  est  fait  en
       modifiant  le  type  de ut_session en int32_t, et celui de ut_tv en une
       structure avec deux champs  int32_t,  tv_sec  et  tv_usec.  Puisque  la
       structure  ut_tv  est  differente  de  la structure timeval, au lieu de
       l'appel :

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

       il est recommande d'utiliser la methode suivante pour definir ce champ

           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;

       Notez que l'implementation de la structure  utmp  a  change  entre  les
       bibliotheques  C  libc5  et  libc6.  A  cause  de  ceci,  les  fichiers
       executables utilisant l'ancien format libc5 risquent  d'endommager  les
       fichiers /var/run/utmp et/ou /var/log/wtmp.

BOGUES

       Cette page de manuel est basee sur la libc5, et les choses fonctionnent
       peut-etre differemment a present.

VOIR AUSSI

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

COLOPHON

       Cette  page  fait  partie  de  la  publication 3.27 du projet man-pages
       Linux. Une description du projet et des instructions pour signaler  des
       anomalies       peuvent       etre       trouvees      a      l'adresse
       <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

       Depuis 2010, cette traduction est maintenue a l'aide  de  l'outil  po4a
       <URL:http://po4a.alioth.debian.org/>   par   l'equipe   de   traduction
       francophone       au       sein        du        projet        perkamon
       <URL:http://perkamon.alioth.debian.org/>.

       Christophe  Blaess  <URL:http://www.blaess.fr/christophe/> (1996-2003),
       Alain Portal  <URL:http://manpagesfr.free.fr/>  (2003-2006).   Jean-Luc
       Coulon et l'equipe francophone de traduction de Debian (2006-2009).

       Veuillez   signaler   toute   erreur   de   traduction  en  ecrivant  a
       <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
       paquet manpages-fr.

       Vous  pouvez  toujours avoir acces a la version anglaise de ce document
       en utilisant la commande << man -L C <section> <page_de_man> >>.