defines.h revision 294332
1104630Ssam/* 2104478Ssam * Copyright (c) 1999-2003 Damien Miller. All rights reserved. 3139749Simp * 4104478Ssam * Redistribution and use in source and binary forms, with or without 5104478Ssam * modification, are permitted provided that the following conditions 6104478Ssam * are met: 7162969Sjhb * 1. Redistributions of source code must retain the above copyright 8104478Ssam * notice, this list of conditions and the following disclaimer. 9104478Ssam * 2. Redistributions in binary form must reproduce the above copyright 10104478Ssam * notice, this list of conditions and the following disclaimer in the 11104478Ssam * documentation and/or other materials provided with the distribution. 12104478Ssam * 13104478Ssam * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 14104478Ssam * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 15104478Ssam * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 16104478Ssam * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 17104478Ssam * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 18104478Ssam * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 19104478Ssam * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 20104478Ssam * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 21104478Ssam * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 22104478Ssam * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23104478Ssam */ 24104478Ssam 25104478Ssam#ifndef _DEFINES_H 26104478Ssam#define _DEFINES_H 27104478Ssam 28104478Ssam/* $Id: defines.h,v 1.183 2014/09/02 19:33:26 djm Exp $ */ 29104478Ssam 30104478Ssam 31104478Ssam/* Constants */ 32104478Ssam 33104478Ssam#if defined(HAVE_DECL_SHUT_RD) && HAVE_DECL_SHUT_RD == 0 34104478Ssamenum 35104478Ssam{ 36104478Ssam SHUT_RD = 0, /* No more receptions. */ 37104478Ssam SHUT_WR, /* No more transmissions. */ 38104478Ssam SHUT_RDWR /* No more receptions or transmissions. */ 39104478Ssam}; 40104478Ssam# define SHUT_RD SHUT_RD 41119418Sobrien# define SHUT_WR SHUT_WR 42119418Sobrien# define SHUT_RDWR SHUT_RDWR 43119418Sobrien#endif 44104478Ssam 45104478Ssam/* 46104478Ssam * Definitions for IP type of service (ip_tos) 47104478Ssam */ 48112124Ssam#include <netinet/in_systm.h> 49112124Ssam#include <netinet/ip.h> 50104478Ssam#ifndef IPTOS_LOWDELAY 51104478Ssam# define IPTOS_LOWDELAY 0x10 52104478Ssam# define IPTOS_THROUGHPUT 0x08 53104478Ssam# define IPTOS_RELIABILITY 0x04 54104478Ssam# define IPTOS_LOWCOST 0x02 55104478Ssam# define IPTOS_MINCOST IPTOS_LOWCOST 56129879Sphk#endif /* IPTOS_LOWDELAY */ 57104478Ssam 58104478Ssam/* 59104478Ssam * Definitions for DiffServ Codepoints as per RFC2474 60104478Ssam */ 61104478Ssam#ifndef IPTOS_DSCP_AF11 62104478Ssam# define IPTOS_DSCP_AF11 0x28 63104478Ssam# define IPTOS_DSCP_AF12 0x30 64104478Ssam# define IPTOS_DSCP_AF13 0x38 65104478Ssam# define IPTOS_DSCP_AF21 0x48 66104478Ssam# define IPTOS_DSCP_AF22 0x50 67104478Ssam# define IPTOS_DSCP_AF23 0x58 68104478Ssam# define IPTOS_DSCP_AF31 0x68 69104478Ssam# define IPTOS_DSCP_AF32 0x70 70104478Ssam# define IPTOS_DSCP_AF33 0x78 71104478Ssam# define IPTOS_DSCP_AF41 0x88 72104478Ssam# define IPTOS_DSCP_AF42 0x90 73104478Ssam# define IPTOS_DSCP_AF43 0x98 74104478Ssam# define IPTOS_DSCP_EF 0xb8 75104478Ssam#endif /* IPTOS_DSCP_AF11 */ 76167755Ssam#ifndef IPTOS_DSCP_CS0 77104478Ssam# define IPTOS_DSCP_CS0 0x00 78167755Ssam# define IPTOS_DSCP_CS1 0x20 79167755Ssam# define IPTOS_DSCP_CS2 0x40 80119287Simp# define IPTOS_DSCP_CS3 0x60 81119287Simp# define IPTOS_DSCP_CS4 0x80 82104478Ssam# define IPTOS_DSCP_CS5 0xa0 83104478Ssam# define IPTOS_DSCP_CS6 0xc0 84104478Ssam# define IPTOS_DSCP_CS7 0xe0 85104478Ssam#endif /* IPTOS_DSCP_CS0 */ 86104478Ssam#ifndef IPTOS_DSCP_EF 87104478Ssam# define IPTOS_DSCP_EF 0xb8 88104478Ssam#endif /* IPTOS_DSCP_EF */ 89104478Ssam 90163648Sru#ifndef PATH_MAX 91111416Ssam# ifdef _POSIX_PATH_MAX 92104478Ssam# define PATH_MAX _POSIX_PATH_MAX 93104478Ssam# endif 94104478Ssam#endif 95104478Ssam 96112124Ssam#ifndef MAXPATHLEN 97112124Ssam# ifdef PATH_MAX 98112124Ssam# define MAXPATHLEN PATH_MAX 99104478Ssam# else /* PATH_MAX */ 100104478Ssam# define MAXPATHLEN 64 101104478Ssam/* realpath uses a fixed buffer of size MAXPATHLEN, so force use of ours */ 102104478Ssam# ifndef BROKEN_REALPATH 103104478Ssam# define BROKEN_REALPATH 1 104104478Ssam# endif /* BROKEN_REALPATH */ 105104478Ssam# endif /* PATH_MAX */ 106104478Ssam#endif /* MAXPATHLEN */ 107104478Ssam 108104478Ssam#ifndef HOST_NAME_MAX 109104478Ssam# include "netdb.h" /* for MAXHOSTNAMELEN */ 110194023Savg# if defined(_POSIX_HOST_NAME_MAX) 111104478Ssam# define HOST_NAME_MAX _POSIX_HOST_NAME_MAX 112167755Ssam# elif defined(MAXHOSTNAMELEN) 113167755Ssam# define HOST_NAME_MAX MAXHOSTNAMELEN 114167755Ssam# else 115167755Ssam# define HOST_NAME_MAX 255 116167755Ssam# endif 117104478Ssam#endif /* HOST_NAME_MAX */ 118104478Ssam 119104478Ssam#if defined(HAVE_DECL_MAXSYMLINKS) && HAVE_DECL_MAXSYMLINKS == 0 120104478Ssam# define MAXSYMLINKS 5 121104478Ssam#endif 122104478Ssam 123104478Ssam#ifndef STDIN_FILENO 124104478Ssam# define STDIN_FILENO 0 125104478Ssam#endif 126167755Ssam#ifndef STDOUT_FILENO 127167755Ssam# define STDOUT_FILENO 1 128167755Ssam#endif 129167755Ssam#ifndef STDERR_FILENO 130167755Ssam# define STDERR_FILENO 2 131167755Ssam#endif 132227843Smarius 133104478Ssam#ifndef NGROUPS_MAX /* Disable groupaccess if NGROUP_MAX is not set */ 134104478Ssam#ifdef NGROUPS 135104478Ssam#define NGROUPS_MAX NGROUPS 136104478Ssam#else 137104478Ssam#define NGROUPS_MAX 0 138104478Ssam#endif 139104478Ssam#endif 140104478Ssam 141104478Ssam#if defined(HAVE_DECL_O_NONBLOCK) && HAVE_DECL_O_NONBLOCK == 0 142105251Smarkm# define O_NONBLOCK 00004 /* Non Blocking Open */ 143112124Ssam#endif 144112124Ssam 145112124Ssam#ifndef S_IFSOCK 146104478Ssam# define S_IFSOCK 0 147104478Ssam#endif /* S_IFSOCK */ 148104478Ssam 149111416Ssam#ifndef S_ISDIR 150104478Ssam# define S_ISDIR(mode) (((mode) & (_S_IFMT)) == (_S_IFDIR)) 151104478Ssam#endif /* S_ISDIR */ 152104478Ssam 153104478Ssam#ifndef S_ISREG 154104478Ssam# define S_ISREG(mode) (((mode) & (_S_IFMT)) == (_S_IFREG)) 155104478Ssam#endif /* S_ISREG */ 156108823Ssam 157108823Ssam#ifndef S_ISLNK 158104478Ssam# define S_ISLNK(mode) (((mode) & S_IFMT) == S_IFLNK) 159104478Ssam#endif /* S_ISLNK */ 160104478Ssam 161104478Ssam#ifndef S_IXUSR 162104478Ssam# define S_IXUSR 0000100 /* execute/search permission, */ 163104478Ssam# define S_IXGRP 0000010 /* execute/search permission, */ 164104478Ssam# define S_IXOTH 0000001 /* execute/search permission, */ 165104478Ssam# define _S_IWUSR 0000200 /* write permission, */ 166104478Ssam# define S_IWUSR _S_IWUSR /* write permission, owner */ 167104478Ssam# define S_IWGRP 0000020 /* write permission, group */ 168104630Ssam# define S_IWOTH 0000002 /* write permission, other */ 169104630Ssam# define S_IRUSR 0000400 /* read permission, owner */ 170104478Ssam# define S_IRGRP 0000040 /* read permission, group */ 171104478Ssam# define S_IROTH 0000004 /* read permission, other */ 172104478Ssam# define S_IRWXU 0000700 /* read, write, execute */ 173104478Ssam# define S_IRWXG 0000070 /* read, write, execute */ 174104478Ssam# define S_IRWXO 0000007 /* read, write, execute */ 175104478Ssam#endif /* S_IXUSR */ 176227309Sed 177227309Sed#if !defined(MAP_ANON) && defined(MAP_ANONYMOUS) 178109595Ssam#define MAP_ANON MAP_ANONYMOUS 179104478Ssam#endif 180104478Ssam 181104478Ssam#ifndef MAP_FAILED 182104478Ssam# define MAP_FAILED ((void *)-1) 183104478Ssam#endif 184104478Ssam 185109595Ssam/* 186109595SsamSCO Open Server 3 has INADDR_LOOPBACK defined in rpc/rpc.h but 187104478Ssamincluding rpc/rpc.h breaks Solaris 6 188104478Ssam*/ 189104478Ssam#ifndef INADDR_LOOPBACK 190104478Ssam#define INADDR_LOOPBACK ((u_long)0x7f000001) 191104478Ssam#endif 192104478Ssam 193104478Ssam/* Types */ 194104478Ssam 195104478Ssam/* If sys/types.h does not supply intXX_t, supply them ourselves */ 196104478Ssam/* (or die trying) */ 197104478Ssam 198104478Ssam#ifndef HAVE_U_INT 199109595Ssamtypedef unsigned int u_int; 200109595Ssam#endif 201104478Ssam 202105215Sphk#ifndef HAVE_INTXX_T 203104478Ssamtypedef signed char int8_t; 204104478Ssam# if (SIZEOF_SHORT_INT == 2) 205114105Ssamtypedef short int int16_t; 206114105Ssam# else 207114105Ssam# ifdef _UNICOS 208142880Simp# if (SIZEOF_SHORT_INT == 4) 209104478Ssamtypedef short int16_t; 210104478Ssam# else 211104478Ssamtypedef long int16_t; 212142880Simp# endif 213104478Ssam# else 214111646Ssam# error "16 bit int type not found." 215111646Ssam# endif /* _UNICOS */ 216111646Ssam# endif 217104478Ssam# if (SIZEOF_INT == 4) 218104478Ssamtypedef int int32_t; 219110522Ssam# else 220191894Sphilip# ifdef _UNICOS 221191894Sphiliptypedef long int32_t; 222110522Ssam# else 223142880Simp# error "32 bit int type not found." 224104478Ssam# endif /* _UNICOS */ 225104478Ssam# endif 226104478Ssam#endif 227104478Ssam 228104478Ssam/* If sys/types.h does not supply u_intXX_t, supply them ourselves */ 229104478Ssam#ifndef HAVE_U_INTXX_T 230104478Ssam# ifdef HAVE_UINTXX_T 231104478Ssamtypedef uint8_t u_int8_t; 232104478Ssamtypedef uint16_t u_int16_t; 233104478Ssamtypedef uint32_t u_int32_t; 234111646Ssam# define HAVE_U_INTXX_T 1 235111646Ssam# else 236104478Ssamtypedef unsigned char u_int8_t; 237104478Ssam# if (SIZEOF_SHORT_INT == 2) 238104478Ssamtypedef unsigned short int u_int16_t; 239104478Ssam# else 240110522Ssam# ifdef _UNICOS 241191894Sphilip# if (SIZEOF_SHORT_INT == 4) 242104478Ssamtypedef unsigned short u_int16_t; 243104478Ssam# else 244104478Ssamtypedef unsigned long u_int16_t; 245104478Ssam# endif 246104478Ssam# else 247104478Ssam# error "16 bit int type not found." 248104478Ssam# endif 249114105Ssam# endif 250114105Ssam# if (SIZEOF_INT == 4) 251114105Ssamtypedef unsigned int u_int32_t; 252114105Ssam# else 253114105Ssam# ifdef _UNICOS 254114105Ssamtypedef unsigned long u_int32_t; 255104478Ssam# else 256104478Ssam# error "32 bit int type not found." 257104478Ssam# endif 258104478Ssam# endif 259112124Ssam# endif 260112124Ssam#define __BIT_TYPES_DEFINED__ 261112124Ssam#endif 262256377Smarkm 263112124Ssam/* 64-bit types */ 264112124Ssam#ifndef HAVE_INT64_T 265104478Ssam# if (SIZEOF_LONG_INT == 8) 266104478Ssamtypedef long int int64_t; 267104478Ssam# else 268104478Ssam# if (SIZEOF_LONG_LONG_INT == 8) 269104478Ssamtypedef long long int int64_t; 270254263Sscottl# endif 271104478Ssam# endif 272104478Ssam#endif 273104478Ssam#ifndef HAVE_U_INT64_T 274104478Ssam# if (SIZEOF_LONG_INT == 8) 275104478Ssamtypedef unsigned long int u_int64_t; 276104478Ssam# else 277104478Ssam# if (SIZEOF_LONG_LONG_INT == 8) 278104478Ssamtypedef unsigned long long int u_int64_t; 279104478Ssam# endif 280104478Ssam# endif 281104478Ssam#endif 282104478Ssam 283104478Ssam#ifndef HAVE_UINTXX_T 284104478Ssamtypedef u_int8_t uint8_t; 285104478Ssamtypedef u_int16_t uint16_t; 286104478Ssamtypedef u_int32_t uint32_t; 287104478Ssamtypedef u_int64_t uint64_t; 288104478Ssam#endif 289104478Ssam 290104478Ssam#ifndef HAVE_INTMAX_T 291111646Ssamtypedef long long intmax_t; 292111646Ssam#endif 293104478Ssam 294104478Ssam#ifndef HAVE_UINTMAX_T 295104478Ssamtypedef unsigned long long uintmax_t; 296104478Ssam#endif 297104478Ssam 298104478Ssam#ifndef HAVE_U_CHAR 299104478Ssamtypedef unsigned char u_char; 300114105Ssam# define HAVE_U_CHAR 301114105Ssam#endif /* HAVE_U_CHAR */ 302114105Ssam 303191894Sphilip#ifndef ULLONG_MAX 304191894Sphilip# define ULLONG_MAX ((unsigned long long)-1) 305114105Ssam#endif 306114105Ssam 307114105Ssam#ifndef SIZE_T_MAX 308104478Ssam#define SIZE_T_MAX ULONG_MAX 309104478Ssam#endif /* SIZE_T_MAX */ 310104478Ssam 311104478Ssam#ifndef HAVE_SIZE_T 312104478Ssamtypedef unsigned int size_t; 313104478Ssam# define HAVE_SIZE_T 314162969Sjhb# define SIZE_T_MAX UINT_MAX 315254263Sscottl#endif /* HAVE_SIZE_T */ 316104478Ssam 317162969Sjhb#ifndef SIZE_MAX 318104478Ssam#define SIZE_MAX SIZE_T_MAX 319104478Ssam#endif 320104478Ssam 321127135Snjl#ifndef HAVE_SSIZE_T 322127135Snjltypedef int ssize_t; 323104478Ssam# define HAVE_SSIZE_T 324104478Ssam#endif /* HAVE_SSIZE_T */ 325104478Ssam 326104478Ssam#ifndef HAVE_CLOCK_T 327104478Ssamtypedef long clock_t; 328104478Ssam# define HAVE_CLOCK_T 329104478Ssam#endif /* HAVE_CLOCK_T */ 330104478Ssam 331104478Ssam#ifndef HAVE_SA_FAMILY_T 332104478Ssamtypedef int sa_family_t; 333104478Ssam# define HAVE_SA_FAMILY_T 334127135Snjl#endif /* HAVE_SA_FAMILY_T */ 335127135Snjl 336104478Ssam#ifndef HAVE_PID_T 337104478Ssamtypedef int pid_t; 338108823Ssam# define HAVE_PID_T 339104478Ssam#endif /* HAVE_PID_T */ 340104478Ssam 341104478Ssam#ifndef HAVE_SIG_ATOMIC_T 342104478Ssamtypedef int sig_atomic_t; 343104478Ssam# define HAVE_SIG_ATOMIC_T 344115747Ssam#endif /* HAVE_SIG_ATOMIC_T */ 345166901Spiso 346104478Ssam#ifndef HAVE_MODE_T 347108823Ssamtypedef int mode_t; 348104478Ssam# define HAVE_MODE_T 349104478Ssam#endif /* HAVE_MODE_T */ 350167755Ssam 351104478Ssam#if !defined(HAVE_SS_FAMILY_IN_SS) && defined(HAVE___SS_FAMILY_IN_SS) 352104478Ssam# define ss_family __ss_family 353108823Ssam#endif /* !defined(HAVE_SS_FAMILY_IN_SS) && defined(HAVE_SA_FAMILY_IN_SS) */ 354104478Ssam 355104478Ssam#ifndef HAVE_SYS_UN_H 356104478Ssamstruct sockaddr_un { 357104478Ssam short sun_family; /* AF_UNIX */ 358104478Ssam char sun_path[108]; /* path name (gag) */ 359232874Sscottl}; 360104478Ssam#endif /* HAVE_SYS_UN_H */ 361104478Ssam 362104478Ssam#ifndef HAVE_IN_ADDR_T 363104478Ssamtypedef u_int32_t in_addr_t; 364108823Ssam#endif 365104478Ssam#ifndef HAVE_IN_PORT_T 366108823Ssamtypedef u_int16_t in_port_t; 367104478Ssam#endif 368117126Sscottl 369104478Ssam#if defined(BROKEN_SYS_TERMIO_H) && !defined(_STRUCT_WINSIZE) 370104478Ssam#define _STRUCT_WINSIZE 371108823Ssamstruct winsize { 372104478Ssam unsigned short ws_row; /* rows, in characters */ 373104478Ssam unsigned short ws_col; /* columns, in character */ 374104478Ssam unsigned short ws_xpixel; /* horizontal size, pixels */ 375104478Ssam unsigned short ws_ypixel; /* vertical size, pixels */ 376104478Ssam}; 377104478Ssam#endif 378104478Ssam 379104478Ssam/* bits needed for select that may not be in the system headers */ 380104478Ssam#ifndef HAVE_FD_MASK 381104478Ssam typedef unsigned long int fd_mask; 382104478Ssam#endif 383104478Ssam 384104478Ssam#if defined(HAVE_DECL_NFDBITS) && HAVE_DECL_NFDBITS == 0 385104478Ssam# define NFDBITS (8 * sizeof(unsigned long)) 386104478Ssam#endif 387104478Ssam 388104478Ssam#if defined(HAVE_DECL_HOWMANY) && HAVE_DECL_HOWMANY == 0 389104478Ssam# define howmany(x,y) (((x)+((y)-1))/(y)) 390104478Ssam#endif 391104478Ssam 392104478Ssam/* Paths */ 393104478Ssam 394104478Ssam#ifndef _PATH_BSHELL 395104478Ssam# define _PATH_BSHELL "/bin/sh" 396104478Ssam#endif 397104478Ssam 398115747Ssam#ifdef USER_PATH 399115747Ssam# ifdef _PATH_STDPATH 400115747Ssam# undef _PATH_STDPATH 401115747Ssam# endif 402104478Ssam# define _PATH_STDPATH USER_PATH 403104478Ssam#endif 404104478Ssam 405167755Ssam#ifndef _PATH_STDPATH 406167755Ssam# define _PATH_STDPATH "/usr/bin:/bin:/usr/sbin:/sbin" 407167755Ssam#endif 408167755Ssam 409104478Ssam#ifndef SUPERUSER_PATH 410104478Ssam# define SUPERUSER_PATH _PATH_STDPATH 411104478Ssam#endif 412104478Ssam 413104478Ssam#ifndef _PATH_DEVNULL 414104478Ssam# define _PATH_DEVNULL "/dev/null" 415104478Ssam#endif 416104478Ssam 417104478Ssam/* user may have set a different path */ 418104478Ssam#if defined(_PATH_MAILDIR) && defined(MAIL_DIRECTORY) 419104478Ssam# undef _PATH_MAILDIR 420104478Ssam#endif /* defined(_PATH_MAILDIR) && defined(MAIL_DIRECTORY) */ 421104478Ssam 422104478Ssam#ifdef MAIL_DIRECTORY 423104478Ssam# define _PATH_MAILDIR MAIL_DIRECTORY 424104478Ssam#endif 425104478Ssam 426104478Ssam#ifndef _PATH_NOLOGIN 427104478Ssam# define _PATH_NOLOGIN "/etc/nologin" 428112124Ssam#endif 429112124Ssam 430112124Ssam/* Define this to be the path of the xauth program. */ 431112124Ssam#ifdef XAUTH_PATH 432112124Ssam#define _PATH_XAUTH XAUTH_PATH 433112124Ssam#endif /* XAUTH_PATH */ 434112124Ssam 435112124Ssam/* derived from XF4/xc/lib/dps/Xlibnet.h */ 436112124Ssam#ifndef X_UNIX_PATH 437104478Ssam# ifdef __hpux 438104478Ssam# define X_UNIX_PATH "/var/spool/sockets/X11/%u" 439104478Ssam# else 440104478Ssam# define X_UNIX_PATH "/tmp/.X11-unix/X%u" 441104478Ssam# endif 442104478Ssam#endif /* X_UNIX_PATH */ 443104478Ssam#define _PATH_UNIX_X X_UNIX_PATH 444104478Ssam 445104478Ssam#ifndef _PATH_TTY 446104478Ssam# define _PATH_TTY "/dev/tty" 447104478Ssam#endif 448104478Ssam 449104478Ssam/* Macros */ 450104478Ssam 451104478Ssam#if defined(HAVE_LOGIN_GETCAPBOOL) && defined(HAVE_LOGIN_CAP_H) 452104478Ssam# define HAVE_LOGIN_CAP 453104478Ssam#endif 454104478Ssam 455104478Ssam#ifndef MAX 456104478Ssam# define MAX(a,b) (((a)>(b))?(a):(b)) 457104478Ssam# define MIN(a,b) (((a)<(b))?(a):(b)) 458104478Ssam#endif 459283291Sjkim 460104478Ssam#ifndef roundup 461104478Ssam# define roundup(x, y) ((((x)+((y)-1))/(y))*(y)) 462104478Ssam#endif 463104478Ssam 464104478Ssam#ifndef timersub 465115747Ssam#define timersub(a, b, result) \ 466115747Ssam do { \ 467104478Ssam (result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \ 468104478Ssam (result)->tv_usec = (a)->tv_usec - (b)->tv_usec; \ 469104478Ssam if ((result)->tv_usec < 0) { \ 470104478Ssam --(result)->tv_sec; \ 471167755Ssam (result)->tv_usec += 1000000; \ 472104630Ssam } \ 473167755Ssam } while (0) 474104630Ssam#endif 475104478Ssam 476104478Ssam#ifndef TIMEVAL_TO_TIMESPEC 477108823Ssam#define TIMEVAL_TO_TIMESPEC(tv, ts) { \ 478108823Ssam (ts)->tv_sec = (tv)->tv_sec; \ 479108823Ssam (ts)->tv_nsec = (tv)->tv_usec * 1000; \ 480108823Ssam} 481108823Ssam#endif 482108823Ssam 483108823Ssam#ifndef TIMESPEC_TO_TIMEVAL 484108823Ssam#define TIMESPEC_TO_TIMEVAL(tv, ts) { \ 485104478Ssam (tv)->tv_sec = (ts)->tv_sec; \ 486104478Ssam (tv)->tv_usec = (ts)->tv_nsec / 1000; \ 487104478Ssam} 488104478Ssam#endif 489104478Ssam 490104478Ssam#ifndef __P 491104478Ssam# define __P(x) x 492104478Ssam#endif 493104478Ssam 494104478Ssam#if !defined(IN6_IS_ADDR_V4MAPPED) 495104478Ssam# define IN6_IS_ADDR_V4MAPPED(a) \ 496104478Ssam ((((u_int32_t *) (a))[0] == 0) && (((u_int32_t *) (a))[1] == 0) && \ 497108823Ssam (((u_int32_t *) (a))[2] == htonl (0xffff))) 498108823Ssam#endif /* !defined(IN6_IS_ADDR_V4MAPPED) */ 499115747Ssam 500115747Ssam#if !defined(__GNUC__) || (__GNUC__ < 2) 501115747Ssam# define __attribute__(x) 502104478Ssam#endif /* !defined(__GNUC__) || (__GNUC__ < 2) */ 503104478Ssam 504104478Ssam#if !defined(HAVE_ATTRIBUTE__SENTINEL__) && !defined(__sentinel__) 505104478Ssam# define __sentinel__ 506104478Ssam#endif 507112124Ssam 508112124Ssam#if !defined(HAVE_ATTRIBUTE__BOUNDED__) && !defined(__bounded__) 509112124Ssam# define __bounded__(x, y, z) 510112124Ssam#endif 511112124Ssam 512108823Ssam#if !defined(HAVE_ATTRIBUTE__NONNULL__) && !defined(__nonnull__) 513108823Ssam# define __nonnull__(x) 514108823Ssam#endif 515108823Ssam 516163648Sru#ifndef OSSH_ALIGNBYTES 517108823Ssam#define OSSH_ALIGNBYTES (sizeof(int) - 1) 518108823Ssam#endif 519108823Ssam#ifndef __CMSG_ALIGN 520115747Ssam#define __CMSG_ALIGN(p) (((u_int)(p) + OSSH_ALIGNBYTES) &~ OSSH_ALIGNBYTES) 521159224Spjd#endif 522108823Ssam 523108823Ssam/* Length of the contents of a control message of length len */ 524108823Ssam#ifndef CMSG_LEN 525108823Ssam#define CMSG_LEN(len) (__CMSG_ALIGN(sizeof(struct cmsghdr)) + (len)) 526108823Ssam#endif 527108823Ssam 528108823Ssam/* Length of the space taken up by a padded control message of length len */ 529115747Ssam#ifndef CMSG_SPACE 530108823Ssam#define CMSG_SPACE(len) (__CMSG_ALIGN(sizeof(struct cmsghdr)) + __CMSG_ALIGN(len)) 531104478Ssam#endif 532104478Ssam 533104478Ssam/* given pointer to struct cmsghdr, return pointer to data */ 534104478Ssam#ifndef CMSG_DATA 535104478Ssam#define CMSG_DATA(cmsg) ((u_char *)(cmsg) + __CMSG_ALIGN(sizeof(struct cmsghdr))) 536104478Ssam#endif /* CMSG_DATA */ 537104478Ssam 538104478Ssam/* 539104478Ssam * RFC 2292 requires to check msg_controllen, in case that the kernel returns 540104478Ssam * an empty list for some reasons. 541104478Ssam */ 542104478Ssam#ifndef CMSG_FIRSTHDR 543104478Ssam#define CMSG_FIRSTHDR(mhdr) \ 544104478Ssam ((mhdr)->msg_controllen >= sizeof(struct cmsghdr) ? \ 545194023Savg (struct cmsghdr *)(mhdr)->msg_control : \ 546104478Ssam (struct cmsghdr *)NULL) 547104478Ssam#endif /* CMSG_FIRSTHDR */ 548104478Ssam 549104478Ssam#if defined(HAVE_DECL_OFFSETOF) && HAVE_DECL_OFFSETOF == 0 550104478Ssam# define offsetof(type, member) ((size_t) &((type *)0)->member) 551194023Savg#endif 552104478Ssam 553104478Ssam/* Set up BSD-style BYTE_ORDER definition if it isn't there already */ 554104478Ssam/* XXX: doesn't try to cope with strange byte orders (PDP_ENDIAN) */ 555104478Ssam#ifndef BYTE_ORDER 556104478Ssam# ifndef LITTLE_ENDIAN 557104478Ssam# define LITTLE_ENDIAN 1234 558104478Ssam# endif /* LITTLE_ENDIAN */ 559104478Ssam# ifndef BIG_ENDIAN 560104478Ssam# define BIG_ENDIAN 4321 561104478Ssam# endif /* BIG_ENDIAN */ 562104478Ssam# ifdef WORDS_BIGENDIAN 563104478Ssam# define BYTE_ORDER BIG_ENDIAN 564104478Ssam# else /* WORDS_BIGENDIAN */ 565104478Ssam# define BYTE_ORDER LITTLE_ENDIAN 566104478Ssam# endif /* WORDS_BIGENDIAN */ 567104478Ssam#endif /* BYTE_ORDER */ 568104478Ssam 569104478Ssam/* Function replacement / compatibility hacks */ 570104478Ssam 571104478Ssam#if !defined(HAVE_GETADDRINFO) && (defined(HAVE_OGETADDRINFO) || defined(HAVE_NGETADDRINFO)) 572104478Ssam# define HAVE_GETADDRINFO 573104478Ssam#endif 574104478Ssam 575104478Ssam#ifndef HAVE_GETOPT_OPTRESET 576104478Ssam# undef getopt 577104478Ssam# undef opterr 578104478Ssam# undef optind 579104478Ssam# undef optopt 580104478Ssam# undef optreset 581104478Ssam# undef optarg 582104478Ssam# define getopt(ac, av, o) BSDgetopt(ac, av, o) 583104478Ssam# define opterr BSDopterr 584104478Ssam# define optind BSDoptind 585104478Ssam# define optopt BSDoptopt 586104478Ssam# define optreset BSDoptreset 587104478Ssam# define optarg BSDoptarg 588104478Ssam#endif 589104478Ssam 590104478Ssam#if defined(BROKEN_GETADDRINFO) && defined(HAVE_GETADDRINFO) 591104478Ssam# undef HAVE_GETADDRINFO 592104478Ssam#endif 593104478Ssam#if defined(BROKEN_GETADDRINFO) && defined(HAVE_FREEADDRINFO) 594104478Ssam# undef HAVE_FREEADDRINFO 595104478Ssam#endif 596115747Ssam#if defined(BROKEN_GETADDRINFO) && defined(HAVE_GAI_STRERROR) 597104478Ssam# undef HAVE_GAI_STRERROR 598104478Ssam#endif 599104478Ssam 600104478Ssam#if defined(HAVE_GETADDRINFO) 601104478Ssam# if defined(HAVE_DECL_AI_NUMERICSERV) && HAVE_DECL_AI_NUMERICSERV == 0 602104478Ssam# define AI_NUMERICSERV 0 603104478Ssam# endif 604104478Ssam#endif 605115747Ssam 606104478Ssam#if defined(BROKEN_UPDWTMPX) && defined(HAVE_UPDWTMPX) 607104478Ssam# undef HAVE_UPDWTMPX 608104478Ssam#endif 609104478Ssam 610104478Ssam#if defined(BROKEN_SHADOW_EXPIRE) && defined(HAS_SHADOW_EXPIRE) 611104478Ssam# undef HAS_SHADOW_EXPIRE 612104478Ssam#endif 613163648Sru 614104478Ssam#if defined(HAVE_OPENLOG_R) && defined(SYSLOG_DATA_INIT) && \ 615104478Ssam defined(SYSLOG_R_SAFE_IN_SIGHAND) 616108471Ssam# define DO_LOG_SAFE_IN_SIGHAND 617104478Ssam#endif 618104478Ssam 619104478Ssam#if !defined(HAVE_MEMMOVE) && defined(HAVE_BCOPY) 620104478Ssam# define memmove(s1, s2, n) bcopy((s2), (s1), (n)) 621104478Ssam#endif /* !defined(HAVE_MEMMOVE) && defined(HAVE_BCOPY) */ 622104478Ssam 623104478Ssam#ifndef GETPGRP_VOID 624104478Ssam# include <unistd.h> 625104478Ssam# define getpgrp() getpgrp(0) 626104478Ssam#endif 627104478Ssam 628104478Ssam#ifdef USE_BSM_AUDIT 629104478Ssam# define SSH_AUDIT_EVENTS 630104478Ssam# define CUSTOM_SSH_AUDIT_EVENTS 631104478Ssam#endif 632104478Ssam 633104478Ssam#ifdef USE_LINUX_AUDIT 634104478Ssam# define SSH_AUDIT_EVENTS 635104478Ssam# define CUSTOM_SSH_AUDIT_EVENTS 636104478Ssam#endif 637115747Ssam 638104478Ssam#if !defined(HAVE___func__) && defined(HAVE___FUNCTION__) 639104478Ssam# define __func__ __FUNCTION__ 640104478Ssam#elif !defined(HAVE___func__) 641104478Ssam# define __func__ "" 642104478Ssam#endif 643104478Ssam 644104478Ssam#if defined(KRB5) && !defined(HEIMDAL) 645104478Ssam# define krb5_get_err_text(context,code) error_message(code) 646104478Ssam#endif 647104478Ssam 648115747Ssam#if defined(SKEYCHALLENGE_4ARG) 649104478Ssam# define _compat_skeychallenge(a,b,c,d) skeychallenge(a,b,c,d) 650104478Ssam#else 651104478Ssam# define _compat_skeychallenge(a,b,c,d) skeychallenge(a,b,c) 652108823Ssam#endif 653104478Ssam 654104478Ssam/* Maximum number of file descriptors available */ 655104478Ssam#ifdef HAVE_SYSCONF 656104478Ssam# define SSH_SYSFDMAX sysconf(_SC_OPEN_MAX) 657108823Ssam#else 658104478Ssam# define SSH_SYSFDMAX 10000 659104478Ssam#endif 660104478Ssam 661163648Sru#ifdef FSID_HAS_VAL 662104478Ssam/* encode f_fsid into a 64 bit value */ 663104478Ssam#define FSID_TO_ULONG(f) \ 664104478Ssam ((((u_int64_t)(f).val[0] & 0xffffffffUL) << 32) | \ 665104478Ssam ((f).val[1] & 0xffffffffUL)) 666104478Ssam#elif defined(FSID_HAS___VAL) 667104478Ssam#define FSID_TO_ULONG(f) \ 668104478Ssam ((((u_int64_t)(f).__val[0] & 0xffffffffUL) << 32) | \ 669104478Ssam ((f).__val[1] & 0xffffffffUL)) 670115747Ssam#else 671104478Ssam# define FSID_TO_ULONG(f) ((f)) 672104478Ssam#endif 673104478Ssam 674104478Ssam#if defined(__Lynx__) 675104478Ssam /* 676104478Ssam * LynxOS defines these in param.h which we do not want to include since 677104478Ssam * it will also pull in a bunch of kernel definitions. 678104478Ssam */ 679104478Ssam# define ALIGNBYTES (sizeof(int) - 1) 680104478Ssam# define ALIGN(p) (((unsigned)p + ALIGNBYTES) & ~ALIGNBYTES) 681104478Ssam /* Missing prototypes on LynxOS */ 682104478Ssam int snprintf (char *, size_t, const char *, ...); 683104478Ssam int mkstemp (char *); 684104478Ssam char *crypt (const char *, const char *); 685104478Ssam int seteuid (uid_t); 686104478Ssam int setegid (gid_t); 687115747Ssam char *mkdtemp (char *); 688104478Ssam int rresvport_af (int *, sa_family_t); 689104478Ssam int innetgr (const char *, const char *, const char *, const char *); 690115747Ssam#endif 691104478Ssam 692104478Ssam/* 693104478Ssam * Define this to use pipes instead of socketpairs for communicating with the 694158828Spjd * client program. Socketpairs do not seem to work on all systems. 695158828Spjd * 696158828Spjd * configure.ac sets this for a few OS's which are known to have problems 697158828Spjd * but you may need to set it yourself 698104478Ssam */ 699104478Ssam/* #define USE_PIPES 1 */ 700104478Ssam 701104478Ssam/** 702104478Ssam ** login recorder definitions 703104478Ssam **/ 704158828Spjd 705104478Ssam/* FIXME: put default paths back in */ 706104478Ssam#ifndef UTMP_FILE 707104478Ssam# ifdef _PATH_UTMP 708104478Ssam# define UTMP_FILE _PATH_UTMP 709104478Ssam# else 710104478Ssam# ifdef CONF_UTMP_FILE 711104478Ssam# define UTMP_FILE CONF_UTMP_FILE 712111416Ssam# endif 713104478Ssam# endif 714104478Ssam#endif 715104478Ssam#ifndef WTMP_FILE 716104478Ssam# ifdef _PATH_WTMP 717104478Ssam# define WTMP_FILE _PATH_WTMP 718104478Ssam# else 719104478Ssam# ifdef CONF_WTMP_FILE 720108471Ssam# define WTMP_FILE CONF_WTMP_FILE 721108471Ssam# endif 722108471Ssam# endif 723111416Ssam#endif 724111416Ssam/* pick up the user's location for lastlog if given */ 725108471Ssam#ifndef LASTLOG_FILE 726108471Ssam# ifdef _PATH_LASTLOG 727108471Ssam# define LASTLOG_FILE _PATH_LASTLOG 728108471Ssam# else 729108471Ssam# ifdef CONF_LASTLOG_FILE 730111416Ssam# define LASTLOG_FILE CONF_LASTLOG_FILE 731111416Ssam# endif 732111416Ssam# endif 733111416Ssam#endif 734111416Ssam 735111416Ssam#if defined(HAVE_SHADOW_H) && !defined(DISABLE_SHADOW) 736111416Ssam# define USE_SHADOW 737111416Ssam#endif 738111416Ssam 739111416Ssam/* The login() library function in libutil is first choice */ 740111416Ssam#if defined(HAVE_LOGIN) && !defined(DISABLE_LOGIN) 741111416Ssam# define USE_LOGIN 742111416Ssam 743111416Ssam#else 744104478Ssam/* Simply select your favourite login types. */ 745108471Ssam/* Can't do if-else because some systems use several... <sigh> */ 746104478Ssam# if !defined(DISABLE_UTMPX) 747104478Ssam# define USE_UTMPX 748108471Ssam# endif 749108471Ssam# if defined(UTMP_FILE) && !defined(DISABLE_UTMP) 750111416Ssam# define USE_UTMP 751104478Ssam# endif 752111416Ssam# if defined(WTMPX_FILE) && !defined(DISABLE_WTMPX) 753111416Ssam# define USE_WTMPX 754111416Ssam# endif 755111416Ssam# if defined(WTMP_FILE) && !defined(DISABLE_WTMP) 756111416Ssam# define USE_WTMP 757111416Ssam# endif 758104478Ssam 759111416Ssam#endif 760104478Ssam 761104478Ssam#ifndef UT_LINESIZE 762104478Ssam# define UT_LINESIZE 8 763104478Ssam#endif 764104478Ssam 765104478Ssam/* I hope that the presence of LASTLOG_FILE is enough to detect this */ 766163648Sru#if defined(LASTLOG_FILE) && !defined(DISABLE_LASTLOG) 767104478Ssam# define USE_LASTLOG 768104478Ssam#endif 769104478Ssam 770104478Ssam#ifdef HAVE_OSF_SIA 771104478Ssam# ifdef USE_SHADOW 772104478Ssam# undef USE_SHADOW 773104478Ssam# endif 774104478Ssam# define CUSTOM_SYS_AUTH_PASSWD 1 775104478Ssam#endif 776104478Ssam 777104478Ssam#if defined(HAVE_LIBIAF) && defined(HAVE_SET_ID) && !defined(HAVE_SECUREWARE) 778104478Ssam# define CUSTOM_SYS_AUTH_PASSWD 1 779104478Ssam#endif 780104478Ssam#if defined(HAVE_LIBIAF) && defined(HAVE_SET_ID) && !defined(BROKEN_LIBIAF) 781104478Ssam# define USE_LIBIAF 782163648Sru#endif 783104478Ssam 784104478Ssam/* HP-UX 11.11 */ 785104478Ssam#ifdef BTMP_FILE 786104478Ssam# define _PATH_BTMP BTMP_FILE 787104478Ssam#endif 788104478Ssam 789104478Ssam#if defined(USE_BTMP) && defined(_PATH_BTMP) 790104478Ssam# define CUSTOM_FAILED_LOGIN 791104478Ssam#endif 792108471Ssam 793108471Ssam/** end of login recorder definitions */ 794108471Ssam 795108823Ssam#ifdef BROKEN_GETGROUPS 796104478Ssam# define getgroups(a,b) ((a)==0 && (b)==NULL ? NGROUPS_MAX : getgroups((a),(b))) 797104478Ssam#endif 798104478Ssam 799111416Ssam#if defined(HAVE_MMAP) && defined(BROKEN_MMAP) 800104478Ssam# undef HAVE_MMAP 801111416Ssam#endif 802104478Ssam 803111416Ssam#ifndef IOV_MAX 804111416Ssam# if defined(_XOPEN_IOV_MAX) 805111416Ssam# define IOV_MAX _XOPEN_IOV_MAX 806111416Ssam# elif defined(DEF_IOV_MAX) 807111416Ssam# define IOV_MAX DEF_IOV_MAX 808104478Ssam# else 809111416Ssam# define IOV_MAX 16 810111416Ssam# endif 811104478Ssam#endif 812111416Ssam 813111416Ssam#ifndef EWOULDBLOCK 814111416Ssam# define EWOULDBLOCK EAGAIN 815111416Ssam#endif 816104478Ssam 817163648Sru#ifndef INET6_ADDRSTRLEN /* for non IPv6 machines */ 818111416Ssam#define INET6_ADDRSTRLEN 46 819111416Ssam#endif 820111416Ssam 821108471Ssam#ifndef SSH_IOBUFSZ 822108471Ssam# define SSH_IOBUFSZ 8192 823111416Ssam#endif 824104478Ssam 825104478Ssam/* 826159225Spjd * Platforms that have arc4random_uniform() and not arc4random_stir() 827159225Spjd * shouldn't need the latter. 828159225Spjd */ 829159225Spjd#if defined(HAVE_ARC4RANDOM) && defined(HAVE_ARC4RANDOM_UNIFORM) && \ 830159225Spjd !defined(HAVE_ARC4RANDOM_STIR) 831159225Spjd# define arc4random_stir() 832159225Spjd#endif 833159225Spjd 834159225Spjd#ifndef HAVE_VA_COPY 835159225Spjd# ifdef HAVE___VA_COPY 836159225Spjd# define va_copy(dest, src) __va_copy(dest, src) 837159225Spjd# else 838159225Spjd# define va_copy(dest, src) (dest) = (src) 839159225Spjd# endif 840159225Spjd#endif 841159225Spjd 842159225Spjd#ifndef __predict_true 843159225Spjd# if defined(__GNUC__) && \ 844159225Spjd ((__GNUC__ > (2)) || (__GNUC__ == (2) && __GNUC_MINOR__ >= (96))) 845159225Spjd# define __predict_true(exp) __builtin_expect(((exp) != 0), 1) 846159225Spjd# define __predict_false(exp) __builtin_expect(((exp) != 0), 0) 847159225Spjd# else 848159225Spjd# define __predict_true(exp) ((exp) != 0) 849159225Spjd# define __predict_false(exp) ((exp) != 0) 850159225Spjd# endif /* gcc version */ 851159225Spjd#endif /* __predict_true */ 852159225Spjd 853159225Spjd#endif /* _DEFINES_H */ 854159225Spjd