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