defines.h revision 99060
1#ifndef _DEFINES_H 2#define _DEFINES_H 3 4/* $Id: defines.h,v 1.92 2002/06/24 16:26:49 stevesk 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_NOLOGIN 320# define _PATH_NOLOGIN "/etc/nologin" 321#endif 322 323/* Define this to be the path of the xauth program. */ 324#ifdef XAUTH_PATH 325#define _PATH_XAUTH XAUTH_PATH 326#endif /* XAUTH_PATH */ 327 328/* derived from XF4/xc/lib/dps/Xlibnet.h */ 329#ifndef X_UNIX_PATH 330# ifdef __hpux 331# define X_UNIX_PATH "/var/spool/sockets/X11/%u" 332# else 333# define X_UNIX_PATH "/tmp/.X11-unix/X%u" 334# endif 335#endif /* X_UNIX_PATH */ 336#define _PATH_UNIX_X X_UNIX_PATH 337 338#ifndef _PATH_TTY 339# define _PATH_TTY "/dev/tty" 340#endif 341 342/* Macros */ 343 344#if defined(HAVE_LOGIN_GETCAPBOOL) && defined(HAVE_LOGIN_CAP_H) 345# define HAVE_LOGIN_CAP 346#endif 347 348#ifndef MAX 349# define MAX(a,b) (((a)>(b))?(a):(b)) 350# define MIN(a,b) (((a)<(b))?(a):(b)) 351#endif 352 353#ifndef roundup 354# define roundup(x, y) ((((x)+((y)-1))/(y))*(y)) 355#endif 356 357#ifndef timersub 358#define timersub(a, b, result) \ 359 do { \ 360 (result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \ 361 (result)->tv_usec = (a)->tv_usec - (b)->tv_usec; \ 362 if ((result)->tv_usec < 0) { \ 363 --(result)->tv_sec; \ 364 (result)->tv_usec += 1000000; \ 365 } \ 366 } while (0) 367#endif 368 369#ifndef __P 370# define __P(x) x 371#endif 372 373#if !defined(IN6_IS_ADDR_V4MAPPED) 374# define IN6_IS_ADDR_V4MAPPED(a) \ 375 ((((u_int32_t *) (a))[0] == 0) && (((u_int32_t *) (a))[1] == 0) && \ 376 (((u_int32_t *) (a))[2] == htonl (0xffff))) 377#endif /* !defined(IN6_IS_ADDR_V4MAPPED) */ 378 379#if !defined(__GNUC__) || (__GNUC__ < 2) 380# define __attribute__(x) 381#endif /* !defined(__GNUC__) || (__GNUC__ < 2) */ 382 383/* *-*-nto-qnx doesn't define this macro in the system headers */ 384#ifdef MISSING_HOWMANY 385# define howmany(x,y) (((x)+((y)-1))/(y)) 386#endif 387 388#ifndef OSSH_ALIGNBYTES 389#define OSSH_ALIGNBYTES (sizeof(int) - 1) 390#endif 391#ifndef __CMSG_ALIGN 392#define __CMSG_ALIGN(p) (((u_int)(p) + OSSH_ALIGNBYTES) &~ OSSH_ALIGNBYTES) 393#endif 394 395/* Length of the contents of a control message of length len */ 396#ifndef CMSG_LEN 397#define CMSG_LEN(len) (__CMSG_ALIGN(sizeof(struct cmsghdr)) + (len)) 398#endif 399 400/* Length of the space taken up by a padded control message of length len */ 401#ifndef CMSG_SPACE 402#define CMSG_SPACE(len) (__CMSG_ALIGN(sizeof(struct cmsghdr)) + __CMSG_ALIGN(len)) 403#endif 404 405/* Function replacement / compatibility hacks */ 406 407#if !defined(HAVE_GETADDRINFO) && (defined(HAVE_OGETADDRINFO) || defined(HAVE_NGETADDRINFO)) 408# define HAVE_GETADDRINFO 409#endif 410 411#ifndef HAVE_GETOPT_OPTRESET 412# undef getopt 413# undef opterr 414# undef optind 415# undef optopt 416# undef optreset 417# undef optarg 418# define getopt(ac, av, o) BSDgetopt(ac, av, o) 419# define opterr BSDopterr 420# define optind BSDoptind 421# define optopt BSDoptopt 422# define optreset BSDoptreset 423# define optarg BSDoptarg 424#endif 425 426/* In older versions of libpam, pam_strerror takes a single argument */ 427#ifdef HAVE_OLD_PAM 428# define PAM_STRERROR(a,b) pam_strerror((b)) 429#else 430# define PAM_STRERROR(a,b) pam_strerror((a),(b)) 431#endif 432 433#ifdef PAM_SUN_CODEBASE 434# define PAM_MSG_MEMBER(msg, n, member) ((*(msg))[(n)].member) 435#else 436# define PAM_MSG_MEMBER(msg, n, member) ((msg)[(n)]->member) 437#endif 438 439#if defined(BROKEN_GETADDRINFO) && defined(HAVE_GETADDRINFO) 440# undef HAVE_GETADDRINFO 441#endif 442#if defined(BROKEN_GETADDRINFO) && defined(HAVE_FREEADDRINFO) 443# undef HAVE_FREEADDRINFO 444#endif 445#if defined(BROKEN_GETADDRINFO) && defined(HAVE_GAI_STRERROR) 446# undef HAVE_GAI_STRERROR 447#endif 448 449#if !defined(HAVE_MEMMOVE) && defined(HAVE_BCOPY) 450# define memmove(s1, s2, n) bcopy((s2), (s1), (n)) 451#endif /* !defined(HAVE_MEMMOVE) && defined(HAVE_BCOPY) */ 452 453#if defined(HAVE_VHANGUP) && !defined(HAVE_DEV_PTMX) 454# define USE_VHANGUP 455#endif /* defined(HAVE_VHANGUP) && !defined(HAVE_DEV_PTMX) */ 456 457#ifndef GETPGRP_VOID 458# define getpgrp() getpgrp(0) 459#endif 460 461/* OPENSSL_free() is Free() in versions before OpenSSL 0.9.6 */ 462#if !defined(OPENSSL_VERSION_NUMBER) || (OPENSSL_VERSION_NUMBER < 0x0090600f) 463# define OPENSSL_free(x) Free(x) 464#endif 465 466#if !defined(HAVE___func__) && defined(HAVE___FUNCTION__) 467# define __func__ __FUNCTION__ 468#elif !defined(HAVE___func__) 469# define __func__ "" 470#endif 471 472/* 473 * Define this to use pipes instead of socketpairs for communicating with the 474 * client program. Socketpairs do not seem to work on all systems. 475 * 476 * configure.ac sets this for a few OS's which are known to have problems 477 * but you may need to set it yourself 478 */ 479/* #define USE_PIPES 1 */ 480 481/** 482 ** login recorder definitions 483 **/ 484 485/* FIXME: put default paths back in */ 486#ifndef UTMP_FILE 487# ifdef _PATH_UTMP 488# define UTMP_FILE _PATH_UTMP 489# else 490# ifdef CONF_UTMP_FILE 491# define UTMP_FILE CONF_UTMP_FILE 492# endif 493# endif 494#endif 495#ifndef WTMP_FILE 496# ifdef _PATH_WTMP 497# define WTMP_FILE _PATH_WTMP 498# else 499# ifdef CONF_WTMP_FILE 500# define WTMP_FILE CONF_WTMP_FILE 501# endif 502# endif 503#endif 504/* pick up the user's location for lastlog if given */ 505#ifndef LASTLOG_FILE 506# ifdef _PATH_LASTLOG 507# define LASTLOG_FILE _PATH_LASTLOG 508# else 509# ifdef CONF_LASTLOG_FILE 510# define LASTLOG_FILE CONF_LASTLOG_FILE 511# endif 512# endif 513#endif 514 515 516/* The login() library function in libutil is first choice */ 517#if defined(HAVE_LOGIN) && !defined(DISABLE_LOGIN) 518# define USE_LOGIN 519 520#else 521/* Simply select your favourite login types. */ 522/* Can't do if-else because some systems use several... <sigh> */ 523# if defined(UTMPX_FILE) && !defined(DISABLE_UTMPX) 524# define USE_UTMPX 525# endif 526# if defined(UTMP_FILE) && !defined(DISABLE_UTMP) 527# define USE_UTMP 528# endif 529# if defined(WTMPX_FILE) && !defined(DISABLE_WTMPX) 530# define USE_WTMPX 531# endif 532# if defined(WTMP_FILE) && !defined(DISABLE_WTMP) 533# define USE_WTMP 534# endif 535 536#endif 537 538/* I hope that the presence of LASTLOG_FILE is enough to detect this */ 539#if defined(LASTLOG_FILE) && !defined(DISABLE_LASTLOG) 540# define USE_LASTLOG 541#endif 542 543/** end of login recorder definitions */ 544 545#endif /* _DEFINES_H */ 546