Home | History | Annotate | Download | only in include
      1 /*
      2  * Copyright (c) 1999-2003 Damien Miller.  All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  * 1. Redistributions of source code must retain the above copyright
      8  *    notice, this list of conditions and the following disclaimer.
      9  * 2. Redistributions in binary form must reproduce the above copyright
     10  *    notice, this list of conditions and the following disclaimer in the
     11  *    documentation and/or other materials provided with the distribution.
     12  *
     13  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     14  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     15  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     16  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     17  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     18  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     19  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     20  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     21  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     22  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     23  */
     24 /*
     25  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
     26  * Use is subject to license terms.
     27  */
     28 
     29 #ifndef	_DEFINES_H
     30 #define	_DEFINES_H
     31 
     32 #pragma ident	"%Z%%M%	%I%	%E% SMI"
     33 
     34 #ifdef __cplusplus
     35 extern "C" {
     36 #endif
     37 
     38 /* $Id: defines.h,v 1.96 2002/09/26 00:38:48 tim Exp $ */
     39 
     40 
     41 /* Constants */
     42 #ifndef SHUT_RDWR
     43 enum
     44 {
     45 	SHUT_RD = 0,	/* No more receptions.  */
     46 	SHUT_WR,	/* No more transmissions.  */
     47 	SHUT_RDWR	/* No more receptions or transmissions. */
     48 };
     49 #define	SHUT_RD   SHUT_RD
     50 #define	SHUT_WR   SHUT_WR
     51 #define	SHUT_RDWR SHUT_RDWR
     52 #endif
     53 
     54 #ifndef IPTOS_LOWDELAY
     55 #define	IPTOS_LOWDELAY		0x10
     56 #define	IPTOS_THROUGHPUT	0x08
     57 #define	IPTOS_RELIABILITY	0x04
     58 #define	IPTOS_LOWCOST		0x02
     59 #define	IPTOS_MINCOST		IPTOS_LOWCOST
     60 #endif /* IPTOS_LOWDELAY */
     61 
     62 #ifndef MAXPATHLEN
     63 #ifdef PATH_MAX
     64 #define	MAXPATHLEN PATH_MAX
     65 #else /* PATH_MAX */
     66 #define	MAXPATHLEN 64 /* Should be safe */
     67 #endif /* PATH_MAX */
     68 #endif /* MAXPATHLEN */
     69 
     70 #ifndef STDIN_FILENO
     71 #define	STDIN_FILENO    0
     72 #endif
     73 
     74 #ifndef STDOUT_FILENO
     75 #define	STDOUT_FILENO   1
     76 #endif
     77 
     78 #ifndef STDERR_FILENO
     79 #define	STDERR_FILENO   2
     80 #endif
     81 
     82 /* Disable groupaccess if NGROUPS_UMAX, NGROUPS_MAX and NGROUPS are not set */
     83 #ifndef NGROUPS_UMAX
     84 #ifdef NGROUPS_MAX
     85 #define	NGROUPS_UMAX NGROUPS_MAX
     86 #elif defined(NGROUPS)
     87 #define	NGROUPS_UMAX NGROUPS
     88 #else
     89 #define	NGROUPS_UMAX 0
     90 #endif
     91 #endif
     92 
     93 #ifndef O_NONBLOCK	/* Non Blocking Open */
     94 #define	O_NONBLOCK	00004
     95 #endif
     96 
     97 #ifndef S_ISDIR
     98 #define	S_ISDIR(mode)	(((mode) & (_S_IFMT)) == (_S_IFDIR))
     99 #endif /* S_ISDIR */
    100 
    101 #ifndef S_ISREG
    102 #define	S_ISREG(mode)	(((mode) & (_S_IFMT)) == (_S_IFREG))
    103 #endif /* S_ISREG */
    104 
    105 #ifndef S_ISLNK
    106 #define	S_ISLNK(mode)	(((mode) & S_IFMT) == S_IFLNK)
    107 #endif /* S_ISLNK */
    108 
    109 #ifndef S_IXUSR
    110 #define	S_IXUSR			0000100	/* execute/search permission, */
    111 #define	S_IXGRP			0000010	/* execute/search permission, */
    112 #define	S_IXOTH			0000001	/* execute/search permission, */
    113 #define	_S_IWUSR		0000200	/* write permission, */
    114 #define	S_IWUSR			_S_IWUSR /* write permission, owner */
    115 #define	S_IWGRP			0000020	/* write permission, group */
    116 #define	S_IWOTH			0000002	/* write permission, other */
    117 #define	S_IRUSR			0000400	/* read permission, owner */
    118 #define	S_IRGRP			0000040	/* read permission, group */
    119 #define	S_IROTH			0000004	/* read permission, other */
    120 #define	S_IRWXU			0000700	/* read, write, execute */
    121 #define	S_IRWXG			0000070	/* read, write, execute */
    122 #define	S_IRWXO			0000007	/* read, write, execute */
    123 #endif /* S_IXUSR */
    124 
    125 #if !defined(MAP_ANON) && defined(MAP_ANONYMOUS)
    126 #define	MAP_ANON MAP_ANONYMOUS
    127 #endif
    128 
    129 #ifndef MAP_FAILED
    130 #define	MAP_FAILED ((void *)-1)
    131 #endif
    132 
    133 /* *-*-nto-qnx doesn't define this constant in the system headers */
    134 #ifdef MISSING_NFDBITS
    135 #define	NFDBITS (8 * sizeof (unsigned long))
    136 #endif
    137 
    138 /*
    139  * SCO Open Server 3 has INADDR_LOOPBACK defined in rpc/rpc.h but including
    140  * rpc/rpc.h breaks Solaris 6
    141  */
    142 #ifndef INADDR_LOOPBACK
    143 #define	INADDR_LOOPBACK ((ulong_t)0x7f000001)
    144 #endif
    145 
    146 /* Types */
    147 
    148 /*
    149  * If sys/types.h does not supply intXX_t, supply them ourselves (or die trying)
    150  */
    151 #ifndef HAVE_U_INT
    152 /* for now, we can't remove u_int without changing almost all other files */
    153 /* CSTYLED */
    154 typedef unsigned int u_int;
    155 #endif
    156 
    157 #ifndef HAVE_INTXX_T
    158 #if (SIZEOF_CHAR == 1)
    159 typedef char int8_t;
    160 #else
    161 #error "8 bit int type not found."
    162 #endif
    163 #if (SIZEOF_SHORT_INT == 2)
    164 typedef short int int16_t;
    165 #else
    166 #ifdef _UNICOS
    167 #if (SIZEOF_SHORT_INT == 4)
    168 typedef short int16_t;
    169 #else
    170 typedef long  int16_t;
    171 #endif
    172 #else
    173 #error "16 bit int type not found."
    174 #endif /* _UNICOS */
    175 #endif
    176 #if (SIZEOF_INT == 4)
    177 typedef int int32_t;
    178 #else
    179 #ifdef _UNICOS
    180 typedef long  int32_t;
    181 #else
    182 #error "32 bit int type not found."
    183 #endif /* _UNICOS */
    184 #endif
    185 #endif
    186 
    187 /* If sys/types.h does not supply u_intXX_t, supply them ourselves */
    188 #ifndef HAVE_U_INTXX_T
    189 #ifdef HAVE_UINTXX_T
    190 typedef uint8_t u_int8_t;
    191 typedef uint16_t u_int16_t;
    192 typedef uint32_t u_int32_t;
    193 #define	HAVE_U_INTXX_T 1
    194 #else
    195 #if (SIZEOF_CHAR == 1)
    196 typedef unsigned char u_int8_t;
    197 #else
    198 #error "8 bit int type not found."
    199 #endif
    200 #if (SIZEOF_SHORT_INT == 2)
    201 typedef unsigned short int u_int16_t;
    202 #else
    203 #ifdef _UNICOS
    204 #if (SIZEOF_SHORT_INT == 4)
    205 typedef unsigned short u_int16_t;
    206 #else
    207 typedef unsigned long  u_int16_t;
    208 #endif
    209 #else
    210 #error "16 bit int type not found."
    211 #endif
    212 #endif
    213 #if (SIZEOF_INT == 4)
    214 typedef unsigned int u_int32_t;
    215 #else
    216 #ifdef _UNICOS
    217 typedef unsigned long  u_int32_t;
    218 #else
    219 #error "32 bit int type not found."
    220 #endif
    221 #endif
    222 #endif
    223 #define	__BIT_TYPES_DEFINED__
    224 #endif
    225 
    226 /* 64-bit types */
    227 #ifndef HAVE_INT64_T
    228 #if (SIZEOF_LONG_INT == 8)
    229 typedef long int int64_t;
    230 #define	HAVE_INT64_T 1
    231 #else
    232 #if (SIZEOF_LONG_LONG_INT == 8)
    233 typedef long long int int64_t;
    234 #define	HAVE_INT64_T 1
    235 #endif
    236 #endif
    237 #endif
    238 
    239 #ifndef HAVE_U_INT64_T
    240 #if (SIZEOF_LONG_INT == 8)
    241 typedef unsigned long int u_int64_t;
    242 #define	HAVE_U_INT64_T 1
    243 #else
    244 #if (SIZEOF_LONG_LONG_INT == 8)
    245 typedef unsigned long long int u_int64_t;
    246 #define	HAVE_U_INT64_T 1
    247 #endif
    248 #endif
    249 #endif
    250 
    251 #if !defined(HAVE_LONG_LONG_INT) && (SIZEOF_LONG_LONG_INT == 8)
    252 #define	HAVE_LONG_LONG_INT 1
    253 #endif
    254 
    255 #ifndef HAVE_U_CHAR
    256 /* for now, we can't remove u_char without changing almost all other files */
    257 /* CSTYLED */
    258 typedef unsigned char u_char;
    259 #define	HAVE_U_CHAR
    260 #endif /* HAVE_U_CHAR */
    261 
    262 #ifndef SIZE_T_MAX
    263 #define	SIZE_T_MAX ULONG_MAX
    264 #endif /* SIZE_T_MAX */
    265 
    266 #ifndef HAVE_SIZE_T
    267 typedef unsigned int size_t;
    268 #define	HAVE_SIZE_T
    269 #endif /* HAVE_SIZE_T */
    270 
    271 #ifndef HAVE_SSIZE_T
    272 typedef int ssize_t;
    273 #define	HAVE_SSIZE_T
    274 #endif /* HAVE_SSIZE_T */
    275 
    276 #ifndef HAVE_CLOCK_T
    277 typedef long clock_t;
    278 #define	HAVE_CLOCK_T
    279 #endif /* HAVE_CLOCK_T */
    280 
    281 #ifndef HAVE_SA_FAMILY_T
    282 typedef int sa_family_t;
    283 #define	HAVE_SA_FAMILY_T
    284 #endif /* HAVE_SA_FAMILY_T */
    285 
    286 #ifndef HAVE_PID_T
    287 typedef int pid_t;
    288 #define	HAVE_PID_T
    289 #endif /* HAVE_PID_T */
    290 
    291 #ifndef HAVE_SIG_ATOMIC_T
    292 typedef int sig_atomic_t;
    293 #define	HAVE_SIG_ATOMIC_T
    294 #endif /* HAVE_SIG_ATOMIC_T */
    295 
    296 #ifndef HAVE_MODE_T
    297 typedef int mode_t;
    298 #define	HAVE_MODE_T
    299 #endif /* HAVE_MODE_T */
    300 
    301 #if !defined(HAVE_SS_FAMILY_IN_SS) && defined(HAVE___SS_FAMILY_IN_SS)
    302 #define	ss_family __ss_family
    303 #endif /* !defined(HAVE_SS_FAMILY_IN_SS) && defined(HAVE_SA_FAMILY_IN_SS) */
    304 
    305 #ifndef HAVE_SYS_UN_H
    306 struct	sockaddr_un {
    307 	short	sun_family;		/* AF_UNIX */
    308 	char	sun_path[108];		/* path name (gag) */
    309 };
    310 #endif /* HAVE_SYS_UN_H */
    311 
    312 #if defined(BROKEN_SYS_TERMIO_H) && !defined(_STRUCT_WINSIZE)
    313 #define	_STRUCT_WINSIZE
    314 struct winsize {
    315 	unsigned short ws_row;		/* rows, in characters */
    316 	unsigned short ws_col;		/* columns, in character */
    317 	unsigned short ws_xpixel;	/* horizontal size, pixels */
    318 	unsigned short ws_ypixel;	/* vertical size, pixels */
    319 };
    320 #endif
    321 
    322 /* *-*-nto-qnx does not define this type in the system headers */
    323 #ifdef MISSING_FD_MASK
    324 typedef unsigned long int fd_mask;
    325 #endif
    326 
    327 /* Paths */
    328 
    329 #ifndef _PATH_BSHELL
    330 #define	_PATH_BSHELL "/bin/sh"
    331 #endif
    332 
    333 #ifndef _PATH_CSHELL
    334 #define	_PATH_CSHELL "/bin/csh"
    335 #endif
    336 
    337 #ifndef _PATH_SHELLS
    338 #define	_PATH_SHELLS "/etc/shells"
    339 #endif
    340 
    341 #ifdef USER_PATH
    342 #ifdef _PATH_STDPATH
    343 #undef _PATH_STDPATH
    344 #endif
    345 #define	_PATH_STDPATH USER_PATH
    346 #endif
    347 
    348 #ifndef _PATH_STDPATH
    349 #define	_PATH_STDPATH "/usr/bin"
    350 #endif
    351 
    352 #ifndef _PATH_DEVNULL
    353 #define	_PATH_DEVNULL "/dev/null"
    354 #endif
    355 
    356 #ifndef MAIL_DIRECTORY
    357 #define	MAIL_DIRECTORY "/var/spool/mail"
    358 #endif
    359 
    360 #ifndef MAILDIR
    361 #define	MAILDIR MAIL_DIRECTORY
    362 #endif
    363 
    364 #if !defined(_PATH_MAILDIR) && defined(MAILDIR)
    365 #define	_PATH_MAILDIR MAILDIR
    366 #endif /* !defined(_PATH_MAILDIR) && defined(MAILDIR) */
    367 
    368 #ifndef _PATH_RSH
    369 #ifdef RSH_PATH
    370 #define	_PATH_RSH RSH_PATH
    371 #else /* RSH_PATH */
    372 #define	_PATH_RSH "/usr/bin/rsh"
    373 #endif /* RSH_PATH */
    374 #endif /* _PATH_RSH */
    375 
    376 #ifndef _PATH_NOLOGIN
    377 #define	_PATH_NOLOGIN "/etc/nologin"
    378 #endif
    379 
    380 /* Define this to be the path of the xauth program. */
    381 #ifdef XAUTH_PATH
    382 #define	_PATH_XAUTH XAUTH_PATH
    383 #endif /* XAUTH_PATH */
    384 
    385 /* derived from XF4/xc/lib/dps/Xlibnet.h */
    386 #ifndef X_UNIX_PATH
    387 #ifdef __hpux
    388 #define	X_UNIX_PATH "/var/spool/sockets/X11/%u"
    389 #else
    390 #define	X_UNIX_PATH "/tmp/.X11-unix/X%u"
    391 #endif
    392 #endif /* X_UNIX_PATH */
    393 
    394 #define	_PATH_UNIX_X X_UNIX_PATH
    395 
    396 #ifndef _PATH_TTY
    397 #define	_PATH_TTY "/dev/tty"
    398 #endif
    399 
    400 /* Macros */
    401 
    402 #if defined(HAVE_LOGIN_GETCAPBOOL) && defined(HAVE_LOGIN_CAP_H)
    403 #define	HAVE_LOGIN_CAP
    404 #endif
    405 
    406 #ifndef MAX
    407 #define	MAX(a, b) (((a) > (b)) ? (a) : (b))
    408 #define	MIN(a, b) (((a) < (b)) ? (a) : (b))
    409 #endif
    410 
    411 #ifndef roundup
    412 #define	roundup(x, y)   ((((x) + ((y) - 1)) / (y)) * (y))
    413 #endif
    414 
    415 #ifndef timersub
    416 #define	timersub(a, b, result)						\
    417 	do {								\
    418 		(result)->tv_sec = (a)->tv_sec - (b)->tv_sec;		\
    419 		(result)->tv_usec = (a)->tv_usec - (b)->tv_usec;	\
    420 		if ((result)->tv_usec < 0) {				\
    421 			--(result)->tv_sec;				\
    422 			(result)->tv_usec += 1000000;			\
    423 		}							\
    424 	} while (0)
    425 #endif
    426 
    427 #ifndef __P
    428 #define	__P(x) x
    429 #endif
    430 
    431 #if !defined(IN6_IS_ADDR_V4MAPPED)
    432 #define	IN6_IS_ADDR_V4MAPPED(a) \
    433 	((((u_int32_t *)(a))[0] == 0) && (((u_int32_t *)(a))[1] == 0) && \
    434 	(((u_int32_t *)(a))[2] == htonl(0xffff)))
    435 #endif /* !defined(IN6_IS_ADDR_V4MAPPED) */
    436 
    437 #if !defined(__GNUC__) || (__GNUC__ < 2)
    438 #define	__attribute__(x)
    439 #endif /* !defined(__GNUC__) || (__GNUC__ < 2) */
    440 
    441 #if !defined(HAVE_ATTRIBUTE__BOUNDED__) && !defined(__bounded__)
    442 #define	__bounded__(x, y, z)
    443 #endif
    444 
    445 /* *-*-nto-qnx doesn't define this macro in the system headers */
    446 #ifdef MISSING_HOWMANY
    447 #define	howmany(x, y)	(((x) + ((y) - 1)) / (y))
    448 #endif
    449 
    450 #ifndef OSSH_ALIGNBYTES
    451 #define	OSSH_ALIGNBYTES	(sizeof (int) - 1)
    452 #endif
    453 
    454 #ifndef __CMSG_ALIGN
    455 #define	__CMSG_ALIGN(p) (((uint_t)(p) + OSSH_ALIGNBYTES) &~ OSSH_ALIGNBYTES)
    456 #endif
    457 
    458 /* Length of the contents of a control message of length len */
    459 #ifndef CMSG_LEN
    460 #define	CMSG_LEN(len)	(__CMSG_ALIGN(sizeof (struct cmsghdr)) + (len))
    461 #endif
    462 
    463 /* Length of the space taken up by a padded control message of length len */
    464 #ifndef CMSG_SPACE
    465 #define	CMSG_SPACE(len)	\
    466 	(__CMSG_ALIGN(sizeof (struct cmsghdr)) + __CMSG_ALIGN(len))
    467 #endif
    468 
    469 /* Function replacement / compatibility hacks */
    470 
    471 #if !defined(HAVE_GETADDRINFO) && (defined(HAVE_OGETADDRINFO) || \
    472 	defined(HAVE_NGETADDRINFO))
    473 #define	HAVE_GETADDRINFO
    474 #endif
    475 
    476 #ifndef HAVE_GETOPT_OPTRESET
    477 #undef getopt
    478 #undef opterr
    479 #undef optind
    480 #undef optopt
    481 #undef optreset
    482 #undef optarg
    483 #define	getopt(ac, av, o)	BSDgetopt(ac, av, o)
    484 #define	opterr			BSDopterr
    485 #define	optind			BSDoptind
    486 #define	optopt			BSDoptopt
    487 #define	optreset		BSDoptreset
    488 #define	optarg			BSDoptarg
    489 #endif
    490 
    491 /* In older versions of libpam, pam_strerror takes a single argument */
    492 #ifdef HAVE_OLD_PAM
    493 #define	PAM_STRERROR(a, b) pam_strerror((b))
    494 #else
    495 #define	PAM_STRERROR(a, b) pam_strerror((a), (b))
    496 #endif
    497 
    498 #ifdef PAM_SUN_CODEBASE
    499 #define	PAM_MSG_MEMBER(msg, n, member) ((*(msg))[(n)].member)
    500 #else
    501 #define	PAM_MSG_MEMBER(msg, n, member) ((msg)[(n)]->member)
    502 #endif
    503 
    504 #if defined(BROKEN_GETADDRINFO) && defined(HAVE_GETADDRINFO)
    505 #undef HAVE_GETADDRINFO
    506 #endif
    507 
    508 #if defined(BROKEN_GETADDRINFO) && defined(HAVE_FREEADDRINFO)
    509 #undef HAVE_FREEADDRINFO
    510 #endif
    511 
    512 #if defined(BROKEN_GETADDRINFO) && defined(HAVE_GAI_STRERROR)
    513 #undef HAVE_GAI_STRERROR
    514 #endif
    515 
    516 #if !defined(HAVE_MEMMOVE) && defined(HAVE_BCOPY)
    517 #define	memmove(s1, s2, n) bcopy((s2), (s1), (n))
    518 #endif /* !defined(HAVE_MEMMOVE) && defined(HAVE_BCOPY) */
    519 
    520 #if defined(HAVE_VHANGUP) && !defined(HAVE_DEV_PTMX)
    521 #define	USE_VHANGUP
    522 #endif /* defined(HAVE_VHANGUP) && !defined(HAVE_DEV_PTMX) */
    523 
    524 #ifndef GETPGRP_VOID
    525 #define	getpgrp() getpgrp(0)
    526 #endif
    527 
    528 /* OPENSSL_free() is Free() in versions before OpenSSL 0.9.6 */
    529 #if !defined(OPENSSL_VERSION_NUMBER) || (OPENSSL_VERSION_NUMBER < 0x0090600f)
    530 #define	OPENSSL_free(x) Free(x)
    531 #endif
    532 
    533 #if !defined(HAVE___func__) && defined(HAVE___FUNCTION__)
    534 #define	__func__ __FUNCTION__
    535 #elif !defined(HAVE___func__)
    536 #define	__func__ ""
    537 #endif
    538 
    539 /*
    540  * Define this to use pipes instead of socketpairs for communicating with the
    541  * client program.  Socketpairs do not seem to work on all systems.
    542  *
    543  * configure.ac sets this for a few OS's which are known to have problems
    544  * but you may need to set it yourself
    545  */
    546 /* #define	USE_PIPES 1 */
    547 
    548 /*
    549  * login recorder definitions
    550  */
    551 
    552 /* FIXME: put default paths back in */
    553 #ifndef UTMP_FILE
    554 #ifdef _PATH_UTMP
    555 #define	UTMP_FILE _PATH_UTMP
    556 #else
    557 #ifdef CONF_UTMP_FILE
    558 #define	UTMP_FILE CONF_UTMP_FILE
    559 #endif
    560 #endif
    561 #endif
    562 
    563 #ifndef WTMP_FILE
    564 #ifdef _PATH_WTMP
    565 #define	WTMP_FILE _PATH_WTMP
    566 #else
    567 #ifdef CONF_WTMP_FILE
    568 #define	WTMP_FILE CONF_WTMP_FILE
    569 #endif
    570 #endif
    571 #endif
    572 
    573 /* pick up the user's location for lastlog if given */
    574 #ifndef LASTLOG_FILE
    575 #ifdef _PATH_LASTLOG
    576 #define	LASTLOG_FILE _PATH_LASTLOG
    577 #else
    578 #ifdef CONF_LASTLOG_FILE
    579 #define	LASTLOG_FILE CONF_LASTLOG_FILE
    580 #endif
    581 #endif
    582 #endif
    583 
    584 /* The login() library function in libutil is first choice */
    585 #if defined(HAVE_LOGIN) && !defined(DISABLE_LOGIN)
    586 #define	USE_LOGIN
    587 #else
    588 /* Simply select your favourite login types. */
    589 /* Can't do if-else because some systems use several... <sigh> */
    590 #if defined(UTMPX_FILE) && !defined(DISABLE_UTMPX)
    591 #define	USE_UTMPX
    592 #endif
    593 #if defined(UTMP_FILE) && !defined(DISABLE_UTMP)
    594 #define	USE_UTMP
    595 #endif
    596 #if defined(WTMPX_FILE) && !defined(DISABLE_WTMPX)
    597 #define	USE_WTMPX
    598 #endif
    599 #if defined(WTMP_FILE) && !defined(DISABLE_WTMP)
    600 #define	USE_WTMP
    601 #endif
    602 #endif
    603 
    604 /* I hope that the presence of LASTLOG_FILE is enough to detect this */
    605 #if defined(LASTLOG_FILE) && !defined(DISABLE_LASTLOG)
    606 #define	USE_LASTLOG
    607 #endif
    608 
    609 /* end of login recorder definitions */
    610 
    611 #ifdef __cplusplus
    612 }
    613 #endif
    614 
    615 #endif /* _DEFINES_H */
    616