1 /*
   2  * CDDL HEADER START
   3  *
   4  * The contents of this file are subject to the terms of the
   5  * Common Development and Distribution License, Version 1.0 only
   6  * (the "License").  You may not use this file except in compliance
   7  * with the License.
   8  *
   9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
  10  * or http://www.opensolaris.org/os/licensing.
  11  * See the License for the specific language governing permissions
  12  * and limitations under the License.
  13  *
  14  * When distributing Covered Code, include this CDDL HEADER in each
  15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  16  * If applicable, add the following below this CDDL HEADER, with the
  17  * fields enclosed by brackets "[]" replaced with your own identifying
  18  * information: Portions Copyright [yyyy] [name of copyright owner]
  19  *
  20  * CDDL HEADER END
  21  */
  22 /*      Copyright (c) 1988 AT&T     */
  23 /*        All Rights Reserved   */
  24 
  25 
  26 /*
  27  * Copyright 2014 Garrett D'Amore <garrett@damore.org>
  28  *
  29  * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
  30  * Use is subject to license terms.
  31  */
  32 
  33 
  34 #ifndef _UTMP_H
  35 #define _UTMP_H
  36 
  37 /*
  38  * Note:  The getutent(3c) family of interfaces are obsolete.
  39  * The getutxent(3c) family provide a superset of this functionality
  40  * and should be used in place of getutent(3c).
  41  */
  42 
  43 #include <sys/types.h>
  44 
  45 #ifdef  __cplusplus
  46 extern "C" {
  47 #endif
  48 
  49 #if !defined(_XPG4_2) || defined(__EXTENSIONS__)
  50 #define UTMP_FILE       "/var/adm/utmp"
  51 #define WTMP_FILE       "/var/adm/wtmp"
  52 #endif
  53 
  54 #define ut_name ut_user
  55 
  56 #if !defined(_XPG4_2) || defined(__EXTENSIONS__)
  57 struct exit_status {
  58         short e_termination;    /* Process termination status */
  59         short e_exit;           /* Process exit status */
  60 };
  61 #else
  62 struct ut_exit_status {
  63         short ut_e_termination; /* Process termination status */
  64         short ut_e_exit;        /* Process exit status */
  65 };
  66 #endif /* !defined(_XPG4_2) || defined(__EXTENSIONS__) */
  67 
  68 #if !defined(_XPG4_2) || defined(__EXTENSIONS__)
  69 
  70 /*
  71  * This data structure describes the utmp entries returned by
  72  * the getutent(3c) family of APIs.  It does not (necessarily)
  73  * correspond to the contents of the utmp or wtmp files.
  74  *
  75  * Applications should only interact with this subsystem via
  76  * the getutxent(3c) family of APIs, as the getutent(3c) family
  77  * are obsolete.
  78  */
  79 struct utmp {
  80         char ut_user[8];                /* User login name */
  81         char ut_id[4];                  /* /etc/inittab id(usually line #) */
  82         char ut_line[12];               /* device name (console, lnxx) */
  83         short ut_pid;                   /* short for compat. - process id */
  84         short ut_type;                  /* type of entry */
  85         struct exit_status ut_exit;     /* The exit status of a process */
  86                                         /* marked as DEAD_PROCESS. */
  87         time_t ut_time;                 /* time entry was made */
  88 };
  89 
  90 #include <sys/types32.h>
  91 #include <inttypes.h>
  92 
  93 /*
  94  * This data structure describes the utmp *file* contents using
  95  * fixed-width data types.  It should only be used by the implementation.
  96  *
  97  * Applications should use the getutxent(3c) family of routines to interact
  98  * with this database.
  99  */
 100 
 101 struct futmp {
 102         char ut_user[8];                /* User login name */
 103         char ut_id[4];                  /* /etc/inittab id */
 104         char ut_line[12];               /* device name (console, lnxx) */
 105         int16_t ut_pid;                 /* process id */
 106         int16_t ut_type;                /* type of entry */
 107         struct {
 108                 int16_t e_termination;  /* Process termination status */
 109                 int16_t e_exit;         /* Process exit status */
 110         } ut_exit;                      /* The exit status of a process */
 111         time32_t ut_time;               /* time entry was made */
 112 };
 113 
 114 #endif /* !defined(_XPG4_2) || defined(__EXTENSIONS__) */
 115 
 116 /*      Definitions for ut_type                                         */
 117 
 118 #define EMPTY           0
 119 #define RUN_LVL         1
 120 #define BOOT_TIME       2
 121 #define OLD_TIME        3
 122 #define NEW_TIME        4
 123 #define INIT_PROCESS    5       /* Process spawned by "init" */
 124 #define LOGIN_PROCESS   6       /* A "getty" process waiting for login */
 125 #define USER_PROCESS    7       /* A user process */
 126 #define DEAD_PROCESS    8
 127 
 128 #if !defined(_XPG4_2) || defined(__EXTENSIONS__)
 129 
 130 #define ACCOUNTING      9
 131 #define DOWN_TIME       10
 132 
 133 #define UTMAXTYPE       DOWN_TIME       /* Largest legal value of ut_type */
 134 
 135 /*      Special strings or formats used in the "ut_line" field when     */
 136 /*      accounting for something other than a process.                  */
 137 /*      No string for the ut_line field can be more than 11 chars +     */
 138 /*      a NULL in length.                                               */
 139 
 140 #define RUNLVL_MSG      "run-level %c"
 141 #define BOOT_MSG        "system boot"
 142 #define OTIME_MSG       "old time"
 143 #define NTIME_MSG       "new time"
 144 #define PSRADM_MSG      "%03d  %s"      /* processor on or off */
 145 #define DOWN_MSG        "system down"
 146 
 147 /*      Define and macro for determing if a normal user wrote the entry */
 148 /*       and marking the utmpx entry as a normal user */
 149 #define NONROOT_USR     2
 150 #define nonuser(ut)     ((ut).ut_exit.e_exit == NONROOT_USR ? 1 : 0)
 151 #define setuser(ut)     ((ut).ut_exit.e_exit = NONROOT_USR)
 152 
 153 
 154 extern void endutent(void);
 155 extern struct utmp *getutent(void);
 156 extern struct utmp *getutid(const struct utmp *);
 157 extern struct utmp *getutline(const struct utmp *);
 158 extern struct utmp *pututline(const struct utmp *);
 159 extern void setutent(void);
 160 extern int utmpname(const char *);
 161 
 162 #endif /* !defined(_XPG4_2) || defined(__EXTENSIONS__) */
 163 
 164 #ifdef  __cplusplus
 165 }
 166 #endif
 167 
 168 #endif  /* _UTMP_H */