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 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 ((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 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 _CRAY 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 /* _CRAY */ 136 # endif 137 # if (SIZEOF_INT == 4) 138 typedef int int32_t; 139 # else 140 # ifdef _CRAY 141 typedef 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 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 _CRAY 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 _CRAY 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 HAVE_SIZE_T 220 typedef unsigned int size_t; 221 # define HAVE_SIZE_T 222 #endif /* HAVE_SIZE_T */ 223 224 #ifndef HAVE_SSIZE_T 225 typedef int ssize_t; 226 # define HAVE_SSIZE_T 227 #endif /* HAVE_SSIZE_T */ 228 229 #ifndef HAVE_CLOCK_T 230 typedef long clock_t; 231 # define HAVE_CLOCK_T 232 #endif /* HAVE_CLOCK_T */ 233 234 #ifndef HAVE_SA_FAMILY_T 235 typedef int sa_family_t; 236 # define HAVE_SA_FAMILY_T 237 #endif /* HAVE_SA_FAMILY_T */ 238 239 #ifndef HAVE_PID_T 240 typedef int pid_t; 241 # define HAVE_PID_T 242 #endif /* HAVE_PID_T */ 243 244 #ifndef HAVE_SIG_ATOMIC_T 245 typedef int sig_atomic_t; 246 # define HAVE_SIG_ATOMIC_T 247 #endif /* HAVE_SIG_ATOMIC_T */ 248 249 #ifndef HAVE_MODE_T 250 typedef 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 259 struct 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 267 struct 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