1 #ifndef _DEFINES_H 2 #define _DEFINES_H 3 4 /* $Id: defines.h,v 1.97 2003/01/24 00:50:32 djm Exp $ */ 5 6 7 /* Constants */ 8 9 #ifndef SHUT_RDWR 10 enum 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 /* 101 SCO Open Server 3 has INADDR_LOOPBACK defined in rpc/rpc.h but 102 including rpc/rpc.h breaks Solaris 6 103 */ 104 #ifndef INADDR_LOOPBACK 105 #define INADDR_LOOPBACK ((u_long)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 115 typedef unsigned int u_int; 116 #endif 117 118 #ifndef HAVE_INTXX_T 119 # if (SIZEOF_CHAR == 1) 120 typedef char int8_t; 121 # else 122 # error "8 bit int type not found." 123 # endif 124 # if (SIZEOF_SHORT_INT == 2) 125 typedef short int int16_t; 126 # else 127 # ifdef _UNICOS 128 # if (SIZEOF_SHORT_INT == 4) 129 typedef short int16_t; 130 # else 131 typedef long int16_t; 132 # endif 133 # else 134 # error "16 bit int type not found." 135 # endif /* _UNICOS */ 136 # endif 137 # if (SIZEOF_INT == 4) 138 typedef int int32_t; 139 # else 140 # ifdef _UNICOS 141 typedef long int32_t; 142 # else 143 # error "32 bit int type not found." 144 # endif /* _UNICOS */ 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 151 typedef uint8_t u_int8_t; 152 typedef uint16_t u_int16_t; 153 typedef uint32_t u_int32_t; 154 # define HAVE_U_INTXX_T 1 155 # else 156 # if (SIZEOF_CHAR == 1) 157 typedef unsigned char u_int8_t; 158 # else 159 # error "8 bit int type not found." 160 # endif 161 # if (SIZEOF_SHORT_INT == 2) 162 typedef unsigned short int u_int16_t; 163 # else 164 # ifdef _UNICOS 165 # if (SIZEOF_SHORT_INT == 4) 166 typedef unsigned short u_int16_t; 167 # else 168 typedef 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) 175 typedef unsigned int u_int32_t; 176 # else 177 # ifdef _UNICOS 178 typedef 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) 190 typedef long int int64_t; 191 # define HAVE_INT64_T 1 192 # else 193 # if (SIZEOF_LONG_LONG_INT == 8) 194 typedef 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) 201 typedef unsigned long int u_int64_t; 202 # define HAVE_U_INT64_T 1 203 # else 204 # if (SIZEOF_LONG_LONG_INT == 8) 205 typedef 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 215 typedef unsigned char u_char; 216 # define HAVE_U_CHAR 217 #endif /* HAVE_U_CHAR */ 218 219 #ifndef SIZE_T_MAX 220 #define SIZE_T_MAX ULONG_MAX 221 #endif /* SIZE_T_MAX */ 222 223 #ifndef HAVE_SIZE_T 224 typedef unsigned int size_t; 225 # define HAVE_SIZE_T 226 #endif /* HAVE_SIZE_T */ 227 228 #ifndef HAVE_SSIZE_T 229 typedef int ssize_t; 230 # define HAVE_SSIZE_T 231 #endif /* HAVE_SSIZE_T */ 232 233 #ifndef HAVE_CLOCK_T 234 typedef long clock_t; 235 # define HAVE_CLOCK_T 236 #endif /* HAVE_CLOCK_T */ 237 238 #ifndef HAVE_SA_FAMILY_T 239 typedef int sa_family_t; 240 # define HAVE_SA_FAMILY_T 241 #endif /* HAVE_SA_FAMILY_T */ 242 243 #ifndef HAVE_PID_T 244 typedef int pid_t; 245 # define HAVE_PID_T 246 #endif /* HAVE_PID_T */ 247 248 #ifndef HAVE_SIG_ATOMIC_T 249 typedef int sig_atomic_t; 250 # define HAVE_SIG_ATOMIC_T 251 #endif /* HAVE_SIG_ATOMIC_T */ 252 253 #ifndef HAVE_MODE_T 254 typedef int mode_t; 255 # define HAVE_MODE_T 256 #endif /* HAVE_MODE_T */ 257 258 #if !defined(HAVE_SS_FAMILY_IN_SS) && defined(HAVE___SS_FAMILY_IN_SS) 259 # define ss_family __ss_family 260 #endif /* !defined(HAVE_SS_FAMILY_IN_SS) && defined(HAVE_SA_FAMILY_IN_SS) */ 261 262 #ifndef HAVE_SYS_UN_H 263 struct sockaddr_un { 264 short sun_family; /* AF_UNIX */ 265 char sun_path[108]; /* path name (gag) */ 266 }; 267 #endif /* HAVE_SYS_UN_H */ 268 269 #if defined(BROKEN_SYS_TERMIO_H) && !defined(_STRUCT_WINSIZE) 270 #define _STRUCT_WINSIZE 271 struct winsize { 272 unsigned short ws_row; /* rows, in characters */ 273 unsigned short ws_col; /* columns, in character */ 274 unsigned short ws_xpixel; /* horizontal size, pixels */ 275 unsigned short ws_ypixel; /* vertical size, pixels */ 276 }; 277 #endif 278 279 /* *-*-nto-qnx does not define this type in the system headers */ 280 #ifdef MISSING_FD_MASK 281 typedef unsigned long int fd_mask; 282 #endif 283 284 /* Paths */ 285 286 #ifndef _PATH_BSHELL 287 # define _PATH_BSHELL "/bin/sh" 288 #endif 289 #ifndef _PATH_CSHELL 290 # define _PATH_CSHELL "/bin/csh" 291 #endif 292 #ifndef _PATH_SHELLS 293 # define _PATH_SHELLS "/etc/shells" 294 #endif 295 296 #ifdef USER_PATH 297 # ifdef _PATH_STDPATH 298 # undef _PATH_STDPATH 299 # endif 300 # define _PATH_STDPATH USER_PATH 301 #endif 302 303 #ifndef _PATH_STDPATH 304 # define _PATH_STDPATH "/usr/bin:/bin:/usr/sbin:/sbin" 305 #endif 306 307 #ifndef _PATH_DEVNULL 308 # define _PATH_DEVNULL "/dev/null" 309 #endif 310 311 #ifndef MAIL_DIRECTORY 312 # define MAIL_DIRECTORY "/var/spool/mail" 313 #endif 314 315 #ifndef MAILDIR 316 # define MAILDIR MAIL_DIRECTORY 317 #endif 318 319 #if !defined(_PATH_MAILDIR) && defined(MAILDIR) 320 # define _PATH_MAILDIR MAILDIR 321 #endif /* !defined(_PATH_MAILDIR) && defined(MAILDIR) */ 322 323 #ifndef _PATH_NOLOGIN 324 # define _PATH_NOLOGIN "/etc/nologin" 325 #endif 326 327 /* Define this to be the path of the xauth program. */ 328 #ifdef XAUTH_PATH 329 #define _PATH_XAUTH XAUTH_PATH 330 #endif /* XAUTH_PATH */ 331 332 /* derived from XF4/xc/lib/dps/Xlibnet.h */ 333 #ifndef X_UNIX_PATH 334 # ifdef __hpux 335 # define X_UNIX_PATH "/var/spool/sockets/X11/%u" 336 # else 337 # define X_UNIX_PATH "/tmp/.X11-unix/X%u" 338 # endif 339 #endif /* X_UNIX_PATH */ 340 #define _PATH_UNIX_X X_UNIX_PATH 341 342 #ifndef _PATH_TTY 343 # define _PATH_TTY "/dev/tty" 344 #endif 345 346 /* Macros */ 347 348 #if defined(HAVE_LOGIN_GETCAPBOOL) && defined(HAVE_LOGIN_CAP_H) 349 # define HAVE_LOGIN_CAP 350 #endif 351 352 #ifndef MAX 353 # define MAX(a,b) (((a)>(b))?(a):(b)) 354 # define MIN(a,b) (((a)<(b))?(a):(b)) 355 #endif 356 357 #ifndef roundup 358 # define roundup(x, y) ((((x)+((y)-1))/(y))*(y)) 359 #endif 360 361 #ifndef timersub 362 #define timersub(a, b, result) \ 363 do { \ 364 (result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \ 365 (result)->tv_usec = (a)->tv_usec - (b)->tv_usec; \ 366 if ((result)->tv_usec < 0) { \ 367 --(result)->tv_sec; \ 368 (result)->tv_usec += 1000000; \ 369 } \ 370 } while (0) 371 #endif 372 373 #ifndef TIMEVAL_TO_TIMESPEC 374 #define TIMEVAL_TO_TIMESPEC(tv, ts) { \ 375 (ts)->tv_sec = (tv)->tv_sec; \ 376 (ts)->tv_nsec = (tv)->tv_usec * 1000; \ 377 } 378 #endif 379 380 #ifndef TIMESPEC_TO_TIMEVAL 381 #define TIMESPEC_TO_TIMEVAL(tv, ts) { \ 382 (tv)->tv_sec = (ts)->tv_sec; \ 383 (tv)->tv_usec = (ts)->tv_nsec / 1000; \ 384 } 385 #endif 386 387 #ifndef __P 388 # define __P(x) x 389 #endif 390 391 #if !defined(IN6_IS_ADDR_V4MAPPED) 392 # define IN6_IS_ADDR_V4MAPPED(a) \ 393 ((((u_int32_t *) (a))[0] == 0) && (((u_int32_t *) (a))[1] == 0) && \ 394 (((u_int32_t *) (a))[2] == htonl (0xffff))) 395 #endif /* !defined(IN6_IS_ADDR_V4MAPPED) */ 396 397 #if !defined(__GNUC__) || (__GNUC__ < 2) 398 # define __attribute__(x) 399 #endif /* !defined(__GNUC__) || (__GNUC__ < 2) */ 400 401 /* *-*-nto-qnx doesn't define this macro in the system headers */ 402 #ifdef MISSING_HOWMANY 403 # define howmany(x,y) (((x)+((y)-1))/(y)) 404 #endif 405 406 #ifndef OSSH_ALIGNBYTES 407 #define OSSH_ALIGNBYTES (sizeof(int) - 1) 408 #endif 409 #ifndef __CMSG_ALIGN 410 #define __CMSG_ALIGN(p) (((u_int)(p) + OSSH_ALIGNBYTES) &~ OSSH_ALIGNBYTES) 411 #endif 412 413 /* Length of the contents of a control message of length len */ 414 #ifndef CMSG_LEN 415 #define CMSG_LEN(len) (__CMSG_ALIGN(sizeof(struct cmsghdr)) + (len)) 416 #endif 417 418 /* Length of the space taken up by a padded control message of length len */ 419 #ifndef CMSG_SPACE 420 #define CMSG_SPACE(len) (__CMSG_ALIGN(sizeof(struct cmsghdr)) + __CMSG_ALIGN(len)) 421 #endif 422 423 /* Function replacement / compatibility hacks */ 424 425 #if !defined(HAVE_GETADDRINFO) && (defined(HAVE_OGETADDRINFO) || defined(HAVE_NGETADDRINFO)) 426 # define HAVE_GETADDRINFO 427 #endif 428 429 #ifndef HAVE_GETOPT_OPTRESET 430 # undef getopt 431 # undef opterr 432 # undef optind 433 # undef optopt 434 # undef optreset 435 # undef optarg 436 # define getopt(ac, av, o) BSDgetopt(ac, av, o) 437 # define opterr BSDopterr 438 # define optind BSDoptind 439 # define optopt BSDoptopt 440 # define optreset BSDoptreset 441 # define optarg BSDoptarg 442 #endif 443 444 /* In older versions of libpam, pam_strerror takes a single argument */ 445 #ifdef HAVE_OLD_PAM 446 # define PAM_STRERROR(a,b) pam_strerror((b)) 447 #else 448 # define PAM_STRERROR(a,b) pam_strerror((a),(b)) 449 #endif 450 451 #ifdef PAM_SUN_CODEBASE 452 # define PAM_MSG_MEMBER(msg, n, member) ((*(msg))[(n)].member) 453 #else 454 # define PAM_MSG_MEMBER(msg, n, member) ((msg)[(n)]->member) 455 #endif 456 457 #if defined(BROKEN_GETADDRINFO) && defined(HAVE_GETADDRINFO) 458 # undef HAVE_GETADDRINFO 459 #endif 460 #if defined(BROKEN_GETADDRINFO) && defined(HAVE_FREEADDRINFO) 461 # undef HAVE_FREEADDRINFO 462 #endif 463 #if defined(BROKEN_GETADDRINFO) && defined(HAVE_GAI_STRERROR) 464 # undef HAVE_GAI_STRERROR 465 #endif 466 467 #if !defined(HAVE_MEMMOVE) && defined(HAVE_BCOPY) 468 # define memmove(s1, s2, n) bcopy((s2), (s1), (n)) 469 #endif /* !defined(HAVE_MEMMOVE) && defined(HAVE_BCOPY) */ 470 471 #if defined(HAVE_VHANGUP) && !defined(HAVE_DEV_PTMX) 472 # define USE_VHANGUP 473 #endif /* defined(HAVE_VHANGUP) && !defined(HAVE_DEV_PTMX) */ 474 475 #ifndef GETPGRP_VOID 476 # define getpgrp() getpgrp(0) 477 #endif 478 479 /* OPENSSL_free() is Free() in versions before OpenSSL 0.9.6 */ 480 #if !defined(OPENSSL_VERSION_NUMBER) || (OPENSSL_VERSION_NUMBER < 0x0090600f) 481 # define OPENSSL_free(x) Free(x) 482 #endif 483 484 #if !defined(HAVE___func__) && defined(HAVE___FUNCTION__) 485 # define __func__ __FUNCTION__ 486 #elif !defined(HAVE___func__) 487 # define __func__ "" 488 #endif 489 490 /* 491 * Define this to use pipes instead of socketpairs for communicating with the 492 * client program. Socketpairs do not seem to work on all systems. 493 * 494 * configure.ac sets this for a few OS's which are known to have problems 495 * but you may need to set it yourself 496 */ 497 /* #define USE_PIPES 1 */ 498 499 /** 500 ** login recorder definitions 501 **/ 502 503 /* FIXME: put default paths back in */ 504 #ifndef UTMP_FILE 505 # ifdef _PATH_UTMP 506 # define UTMP_FILE _PATH_UTMP 507 # else 508 # ifdef CONF_UTMP_FILE 509 # define UTMP_FILE CONF_UTMP_FILE 510 # endif 511 # endif 512 #endif 513 #ifndef WTMP_FILE 514 # ifdef _PATH_WTMP 515 # define WTMP_FILE _PATH_WTMP 516 # else 517 # ifdef CONF_WTMP_FILE 518 # define WTMP_FILE CONF_WTMP_FILE 519 # endif 520 # endif 521 #endif 522 /* pick up the user's location for lastlog if given */ 523 #ifndef LASTLOG_FILE 524 # ifdef _PATH_LASTLOG 525 # define LASTLOG_FILE _PATH_LASTLOG 526 # else 527 # ifdef CONF_LASTLOG_FILE 528 # define LASTLOG_FILE CONF_LASTLOG_FILE 529 # endif 530 # endif 531 #endif 532 533 534 /* The login() library function in libutil is first choice */ 535 #if defined(HAVE_LOGIN) && !defined(DISABLE_LOGIN) 536 # define USE_LOGIN 537 538 #else 539 /* Simply select your favourite login types. */ 540 /* Can't do if-else because some systems use several... <sigh> */ 541 # if defined(UTMPX_FILE) && !defined(DISABLE_UTMPX) 542 # define USE_UTMPX 543 # endif 544 # if defined(UTMP_FILE) && !defined(DISABLE_UTMP) 545 # define USE_UTMP 546 # endif 547 # if defined(WTMPX_FILE) && !defined(DISABLE_WTMPX) 548 # define USE_WTMPX 549 # endif 550 # if defined(WTMP_FILE) && !defined(DISABLE_WTMP) 551 # define USE_WTMP 552 # endif 553 554 #endif 555 556 /* I hope that the presence of LASTLOG_FILE is enough to detect this */ 557 #if defined(LASTLOG_FILE) && !defined(DISABLE_LASTLOG) 558 # define USE_LASTLOG 559 #endif 560 561 /** end of login recorder definitions */ 562 563 #endif /* _DEFINES_H */ 564