defines.h revision 296373
1126261Smlaier/* 2145836Smlaier * Copyright (c) 1999-2003 Damien Miller. All rights reserved. 3126258Smlaier * 4126258Smlaier * Redistribution and use in source and binary forms, with or without 5126258Smlaier * modification, are permitted provided that the following conditions 6126258Smlaier * are met: 7126258Smlaier * 1. Redistributions of source code must retain the above copyright 8126258Smlaier * notice, this list of conditions and the following disclaimer. 9126258Smlaier * 2. Redistributions in binary form must reproduce the above copyright 10126258Smlaier * notice, this list of conditions and the following disclaimer in the 11126258Smlaier * documentation and/or other materials provided with the distribution. 12126258Smlaier * 13126258Smlaier * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 14126258Smlaier * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 15126258Smlaier * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 16126258Smlaier * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 17126258Smlaier * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 18126258Smlaier * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 19126258Smlaier * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 20126258Smlaier * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 21126258Smlaier * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 22126258Smlaier * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23126258Smlaier */ 24126258Smlaier 25126258Smlaier#ifndef _DEFINES_H 26126258Smlaier#define _DEFINES_H 27126258Smlaier 28126258Smlaier/* $Id: defines.h,v 1.183 2014/09/02 19:33:26 djm Exp $ */ 29126258Smlaier 30127145Smlaier 31126261Smlaier/* Constants */ 32126261Smlaier 33126261Smlaier#if defined(HAVE_DECL_SHUT_RD) && HAVE_DECL_SHUT_RD == 0 34126261Smlaierenum 35127145Smlaier{ 36126258Smlaier SHUT_RD = 0, /* No more receptions. */ 37126258Smlaier SHUT_WR, /* No more transmissions. */ 38126261Smlaier SHUT_RDWR /* No more receptions or transmissions. */ 39126261Smlaier}; 40126261Smlaier# define SHUT_RD SHUT_RD 41127145Smlaier# define SHUT_WR SHUT_WR 42127145Smlaier# define SHUT_RDWR SHUT_RDWR 43126261Smlaier#endif 44126258Smlaier 45126258Smlaier/* 46130613Smlaier * Definitions for IP type of service (ip_tos) 47126258Smlaier */ 48126258Smlaier#include <netinet/in_systm.h> 49126258Smlaier#include <netinet/ip.h> 50126258Smlaier#ifndef IPTOS_LOWDELAY 51145836Smlaier# define IPTOS_LOWDELAY 0x10 52127145Smlaier# define IPTOS_THROUGHPUT 0x08 53145836Smlaier# define IPTOS_RELIABILITY 0x04 54126261Smlaier# define IPTOS_LOWCOST 0x02 55129907Smlaier# define IPTOS_MINCOST IPTOS_LOWCOST 56126261Smlaier#endif /* IPTOS_LOWDELAY */ 57130613Smlaier 58130613Smlaier/* 59126261Smlaier * Definitions for DiffServ Codepoints as per RFC2474 60126258Smlaier */ 61126258Smlaier#ifndef IPTOS_DSCP_AF11 62126261Smlaier# define IPTOS_DSCP_AF11 0x28 63126258Smlaier# define IPTOS_DSCP_AF12 0x30 64126258Smlaier# define IPTOS_DSCP_AF13 0x38 65130933Sbrooks# define IPTOS_DSCP_AF21 0x48 66130933Sbrooks# define IPTOS_DSCP_AF22 0x50 67130933Sbrooks# define IPTOS_DSCP_AF23 0x58 68126258Smlaier# define IPTOS_DSCP_AF31 0x68 69126258Smlaier# define IPTOS_DSCP_AF32 0x70 70126258Smlaier# define IPTOS_DSCP_AF33 0x78 71145836Smlaier# define IPTOS_DSCP_AF41 0x88 72145836Smlaier# define IPTOS_DSCP_AF42 0x90 73126258Smlaier# define IPTOS_DSCP_AF43 0x98 74126258Smlaier# define IPTOS_DSCP_EF 0xb8 75126258Smlaier#endif /* IPTOS_DSCP_AF11 */ 76130613Smlaier#ifndef IPTOS_DSCP_CS0 77126258Smlaier# define IPTOS_DSCP_CS0 0x00 78130613Smlaier# define IPTOS_DSCP_CS1 0x20 79130613Smlaier# define IPTOS_DSCP_CS2 0x40 80126258Smlaier# define IPTOS_DSCP_CS3 0x60 81126258Smlaier# define IPTOS_DSCP_CS4 0x80 82126258Smlaier# define IPTOS_DSCP_CS5 0xa0 83126258Smlaier# define IPTOS_DSCP_CS6 0xc0 84126258Smlaier# define IPTOS_DSCP_CS7 0xe0 85126258Smlaier#endif /* IPTOS_DSCP_CS0 */ 86126258Smlaier#ifndef IPTOS_DSCP_EF 87126258Smlaier# define IPTOS_DSCP_EF 0xb8 88126258Smlaier#endif /* IPTOS_DSCP_EF */ 89145836Smlaier 90145836Smlaier#ifndef PATH_MAX 91145836Smlaier# ifdef _POSIX_PATH_MAX 92145836Smlaier# define PATH_MAX _POSIX_PATH_MAX 93145836Smlaier# endif 94145836Smlaier#endif 95145836Smlaier 96145836Smlaier#ifndef MAXPATHLEN 97145836Smlaier# ifdef PATH_MAX 98145836Smlaier# define MAXPATHLEN PATH_MAX 99145836Smlaier# else /* PATH_MAX */ 100145836Smlaier# define MAXPATHLEN 64 101126258Smlaier/* realpath uses a fixed buffer of size MAXPATHLEN, so force use of ours */ 102126258Smlaier# ifndef BROKEN_REALPATH 103126258Smlaier# define BROKEN_REALPATH 1 104127145Smlaier# endif /* BROKEN_REALPATH */ 105127145Smlaier# endif /* PATH_MAX */ 106126261Smlaier#endif /* MAXPATHLEN */ 107126261Smlaier 108126258Smlaier#ifndef HOST_NAME_MAX 109126258Smlaier# include "netdb.h" /* for MAXHOSTNAMELEN */ 110126258Smlaier# if defined(_POSIX_HOST_NAME_MAX) 111126258Smlaier# define HOST_NAME_MAX _POSIX_HOST_NAME_MAX 112126258Smlaier# elif defined(MAXHOSTNAMELEN) 113126258Smlaier# define HOST_NAME_MAX MAXHOSTNAMELEN 114126258Smlaier# else 115126258Smlaier# define HOST_NAME_MAX 255 116126258Smlaier# endif 117126258Smlaier#endif /* HOST_NAME_MAX */ 118127145Smlaier 119130613Smlaier#if defined(HAVE_DECL_MAXSYMLINKS) && HAVE_DECL_MAXSYMLINKS == 0 120126261Smlaier# define MAXSYMLINKS 5 121130613Smlaier#endif 122126258Smlaier 123127145Smlaier#ifndef STDIN_FILENO 124130613Smlaier# define STDIN_FILENO 0 125130613Smlaier#endif 126130613Smlaier#ifndef STDOUT_FILENO 127130613Smlaier# define STDOUT_FILENO 1 128130613Smlaier#endif 129130613Smlaier#ifndef STDERR_FILENO 130130613Smlaier# define STDERR_FILENO 2 131130613Smlaier#endif 132130613Smlaier 133128209Sbrooks#ifndef NGROUPS_MAX /* Disable groupaccess if NGROUP_MAX is not set */ 134128209Sbrooks#ifdef NGROUPS 135126261Smlaier#define NGROUPS_MAX NGROUPS 136126258Smlaier#else 137126261Smlaier#define NGROUPS_MAX 0 138130613Smlaier#endif 139130613Smlaier#endif 140126258Smlaier 141130613Smlaier#if defined(HAVE_DECL_O_NONBLOCK) && HAVE_DECL_O_NONBLOCK == 0 142126258Smlaier# define O_NONBLOCK 00004 /* Non Blocking Open */ 143126258Smlaier#endif 144126258Smlaier 145130613Smlaier#ifndef S_IFSOCK 146130613Smlaier# define S_IFSOCK 0 147130613Smlaier#endif /* S_IFSOCK */ 148130613Smlaier 149130613Smlaier#ifndef S_ISDIR 150130613Smlaier# define S_ISDIR(mode) (((mode) & (_S_IFMT)) == (_S_IFDIR)) 151130613Smlaier#endif /* S_ISDIR */ 152126258Smlaier 153145836Smlaier#ifndef S_ISREG 154127145Smlaier# define S_ISREG(mode) (((mode) & (_S_IFMT)) == (_S_IFREG)) 155126258Smlaier#endif /* S_ISREG */ 156130613Smlaier 157130613Smlaier#ifndef S_ISLNK 158130613Smlaier# define S_ISLNK(mode) (((mode) & S_IFMT) == S_IFLNK) 159126261Smlaier#endif /* S_ISLNK */ 160126258Smlaier 161127145Smlaier#ifndef S_IXUSR 162126261Smlaier# define S_IXUSR 0000100 /* execute/search permission, */ 163126261Smlaier# define S_IXGRP 0000010 /* execute/search permission, */ 164141584Smlaier# define S_IXOTH 0000001 /* execute/search permission, */ 165130933Sbrooks# define _S_IWUSR 0000200 /* write permission, */ 166126261Smlaier# define S_IWUSR _S_IWUSR /* write permission, owner */ 167128209Sbrooks# define S_IWGRP 0000020 /* write permission, group */ 168126261Smlaier# define S_IWOTH 0000002 /* write permission, other */ 169126261Smlaier# define S_IRUSR 0000400 /* read permission, owner */ 170126261Smlaier# define S_IRGRP 0000040 /* read permission, group */ 171126261Smlaier# define S_IROTH 0000004 /* read permission, other */ 172130613Smlaier# define S_IRWXU 0000700 /* read, write, execute */ 173126261Smlaier# define S_IRWXG 0000070 /* read, write, execute */ 174130613Smlaier# define S_IRWXO 0000007 /* read, write, execute */ 175130613Smlaier#endif /* S_IXUSR */ 176126261Smlaier 177126261Smlaier#if !defined(MAP_ANON) && defined(MAP_ANONYMOUS) 178126261Smlaier#define MAP_ANON MAP_ANONYMOUS 179126261Smlaier#endif 180126261Smlaier 181126261Smlaier#ifndef MAP_FAILED 182126261Smlaier# define MAP_FAILED ((void *)-1) 183126261Smlaier#endif 184126261Smlaier 185128209Sbrooks/* 186126261SmlaierSCO Open Server 3 has INADDR_LOOPBACK defined in rpc/rpc.h but 187126261Smlaierincluding rpc/rpc.h breaks Solaris 6 188126261Smlaier*/ 189130613Smlaier#ifndef INADDR_LOOPBACK 190126261Smlaier#define INADDR_LOOPBACK ((u_long)0x7f000001) 191126261Smlaier#endif 192130613Smlaier 193126261Smlaier/* Types */ 194130613Smlaier 195130613Smlaier/* If sys/types.h does not supply intXX_t, supply them ourselves */ 196130613Smlaier/* (or die trying) */ 197130613Smlaier 198130613Smlaier#ifndef HAVE_U_INT 199130613Smlaiertypedef unsigned int u_int; 200130613Smlaier#endif 201130613Smlaier 202130613Smlaier#ifndef HAVE_INTXX_T 203130613Smlaiertypedef signed char int8_t; 204141584Smlaier# if (SIZEOF_SHORT_INT == 2) 205130613Smlaiertypedef short int int16_t; 206130613Smlaier# else 207130613Smlaier# ifdef _UNICOS 208130613Smlaier# if (SIZEOF_SHORT_INT == 4) 209130613Smlaiertypedef short int16_t; 210130613Smlaier# else 211130613Smlaiertypedef long int16_t; 212130613Smlaier# endif 213130613Smlaier# else 214126261Smlaier# error "16 bit int type not found." 215126261Smlaier# endif /* _UNICOS */ 216126261Smlaier# endif 217126261Smlaier# if (SIZEOF_INT == 4) 218126261Smlaiertypedef int int32_t; 219126261Smlaier# else 220126261Smlaier# ifdef _UNICOS 221130613Smlaiertypedef long int32_t; 222130613Smlaier# else 223141584Smlaier# error "32 bit int type not found." 224126261Smlaier# endif /* _UNICOS */ 225126261Smlaier# endif 226126261Smlaier#endif 227141584Smlaier 228126261Smlaier/* If sys/types.h does not supply u_intXX_t, supply them ourselves */ 229126261Smlaier#ifndef HAVE_U_INTXX_T 230126261Smlaier# ifdef HAVE_UINTXX_T 231126261Smlaiertypedef uint8_t u_int8_t; 232126261Smlaiertypedef uint16_t u_int16_t; 233126261Smlaiertypedef uint32_t u_int32_t; 234126258Smlaier# define HAVE_U_INTXX_T 1 235126258Smlaier# else 236126258Smlaiertypedef unsigned char u_int8_t; 237126258Smlaier# if (SIZEOF_SHORT_INT == 2) 238130613Smlaiertypedef unsigned short int u_int16_t; 239130613Smlaier# else 240126258Smlaier# ifdef _UNICOS 241130613Smlaier# if (SIZEOF_SHORT_INT == 4) 242130613Smlaiertypedef unsigned short u_int16_t; 243130613Smlaier# else 244130613Smlaiertypedef unsigned long u_int16_t; 245145836Smlaier# endif 246130613Smlaier# else 247130613Smlaier# error "16 bit int type not found." 248130613Smlaier# endif 249126258Smlaier# endif 250126258Smlaier# if (SIZEOF_INT == 4) 251126258Smlaiertypedef unsigned int u_int32_t; 252126258Smlaier# else 253126258Smlaier# ifdef _UNICOS 254126258Smlaiertypedef unsigned long u_int32_t; 255126258Smlaier# else 256126258Smlaier# error "32 bit int type not found." 257126258Smlaier# endif 258126258Smlaier# endif 259126258Smlaier# endif 260130613Smlaier#define __BIT_TYPES_DEFINED__ 261130613Smlaier#endif 262126258Smlaier 263126258Smlaier/* 64-bit types */ 264126258Smlaier#ifndef HAVE_INT64_T 265126258Smlaier# if (SIZEOF_LONG_INT == 8) 266126258Smlaiertypedef long int int64_t; 267126258Smlaier# else 268126258Smlaier# if (SIZEOF_LONG_LONG_INT == 8) 269126261Smlaiertypedef long long int int64_t; 270126258Smlaier# endif 271126258Smlaier# endif 272126258Smlaier#endif 273126258Smlaier#ifndef HAVE_U_INT64_T 274126258Smlaier# if (SIZEOF_LONG_INT == 8) 275126258Smlaiertypedef unsigned long int u_int64_t; 276126258Smlaier# else 277130613Smlaier# if (SIZEOF_LONG_LONG_INT == 8) 278130613Smlaiertypedef unsigned long long int u_int64_t; 279130613Smlaier# endif 280130613Smlaier# endif 281130613Smlaier#endif 282130613Smlaier 283126258Smlaier#ifndef HAVE_UINTXX_T 284126258Smlaiertypedef u_int8_t uint8_t; 285126258Smlaiertypedef u_int16_t uint16_t; 286126258Smlaiertypedef u_int32_t uint32_t; 287126258Smlaiertypedef u_int64_t uint64_t; 288126258Smlaier#endif 289126258Smlaier 290126258Smlaier#ifndef HAVE_INTMAX_T 291126258Smlaiertypedef long long intmax_t; 292126258Smlaier#endif 293126258Smlaier 294126258Smlaier#ifndef HAVE_UINTMAX_T 295126258Smlaiertypedef unsigned long long uintmax_t; 296126258Smlaier#endif 297130613Smlaier 298126258Smlaier#ifndef HAVE_U_CHAR 299126258Smlaiertypedef unsigned char u_char; 300126258Smlaier# define HAVE_U_CHAR 301130613Smlaier#endif /* HAVE_U_CHAR */ 302130613Smlaier 303130613Smlaier#ifndef ULLONG_MAX 304130613Smlaier# define ULLONG_MAX ((unsigned long long)-1) 305130613Smlaier#endif 306130613Smlaier 307130613Smlaier#ifndef SIZE_T_MAX 308130613Smlaier#define SIZE_T_MAX ULONG_MAX 309130613Smlaier#endif /* SIZE_T_MAX */ 310130613Smlaier 311130613Smlaier#ifndef HAVE_SIZE_T 312130613Smlaiertypedef unsigned int size_t; 313130613Smlaier# define HAVE_SIZE_T 314130613Smlaier# define SIZE_T_MAX UINT_MAX 315130613Smlaier#endif /* HAVE_SIZE_T */ 316130613Smlaier 317130613Smlaier#ifndef SIZE_MAX 318130613Smlaier#define SIZE_MAX SIZE_T_MAX 319130613Smlaier#endif 320130613Smlaier 321130613Smlaier#ifndef HAVE_SSIZE_T 322130613Smlaiertypedef int ssize_t; 323130613Smlaier# define HAVE_SSIZE_T 324130613Smlaier#endif /* HAVE_SSIZE_T */ 325130613Smlaier 326130613Smlaier#ifndef HAVE_CLOCK_T 327130613Smlaiertypedef long clock_t; 328130613Smlaier# define HAVE_CLOCK_T 329130613Smlaier#endif /* HAVE_CLOCK_T */ 330130613Smlaier 331130613Smlaier#ifndef HAVE_SA_FAMILY_T 332130613Smlaiertypedef int sa_family_t; 333130613Smlaier# define HAVE_SA_FAMILY_T 334130613Smlaier#endif /* HAVE_SA_FAMILY_T */ 335130613Smlaier 336130613Smlaier#ifndef HAVE_PID_T 337130613Smlaiertypedef int pid_t; 338130613Smlaier# define HAVE_PID_T 339130613Smlaier#endif /* HAVE_PID_T */ 340130613Smlaier 341130613Smlaier#ifndef HAVE_SIG_ATOMIC_T 342145836Smlaiertypedef int sig_atomic_t; 343145836Smlaier# define HAVE_SIG_ATOMIC_T 344145836Smlaier#endif /* HAVE_SIG_ATOMIC_T */ 345130613Smlaier 346130613Smlaier#ifndef HAVE_MODE_T 347130613Smlaiertypedef int mode_t; 348130613Smlaier# define HAVE_MODE_T 349130613Smlaier#endif /* HAVE_MODE_T */ 350130613Smlaier 351130613Smlaier#if !defined(HAVE_SS_FAMILY_IN_SS) && defined(HAVE___SS_FAMILY_IN_SS) 352130613Smlaier# define ss_family __ss_family 353130613Smlaier#endif /* !defined(HAVE_SS_FAMILY_IN_SS) && defined(HAVE_SA_FAMILY_IN_SS) */ 354145836Smlaier 355130613Smlaier#ifndef HAVE_SYS_UN_H 356130613Smlaierstruct sockaddr_un { 357130613Smlaier short sun_family; /* AF_UNIX */ 358130613Smlaier char sun_path[108]; /* path name (gag) */ 359130613Smlaier}; 360130613Smlaier#endif /* HAVE_SYS_UN_H */ 361130613Smlaier 362130613Smlaier#ifndef HAVE_IN_ADDR_T 363130613Smlaiertypedef u_int32_t in_addr_t; 364130613Smlaier#endif 365130613Smlaier#ifndef HAVE_IN_PORT_T 366145836Smlaiertypedef u_int16_t in_port_t; 367130613Smlaier#endif 368130613Smlaier 369130613Smlaier#if defined(BROKEN_SYS_TERMIO_H) && !defined(_STRUCT_WINSIZE) 370130613Smlaier#define _STRUCT_WINSIZE 371145836Smlaierstruct winsize { 372145836Smlaier unsigned short ws_row; /* rows, in characters */ 373130613Smlaier unsigned short ws_col; /* columns, in character */ 374130613Smlaier unsigned short ws_xpixel; /* horizontal size, pixels */ 375130613Smlaier unsigned short ws_ypixel; /* vertical size, pixels */ 376130613Smlaier}; 377130613Smlaier#endif 378130613Smlaier 379130613Smlaier/* bits needed for select that may not be in the system headers */ 380130613Smlaier#ifndef HAVE_FD_MASK 381130613Smlaier typedef unsigned long int fd_mask; 382130613Smlaier#endif 383130613Smlaier 384130613Smlaier#if defined(HAVE_DECL_NFDBITS) && HAVE_DECL_NFDBITS == 0 385130613Smlaier# define NFDBITS (8 * sizeof(unsigned long)) 386130613Smlaier#endif 387130613Smlaier 388130613Smlaier#if defined(HAVE_DECL_HOWMANY) && HAVE_DECL_HOWMANY == 0 389130613Smlaier# define howmany(x,y) (((x)+((y)-1))/(y)) 390130613Smlaier#endif 391130613Smlaier 392130613Smlaier/* Paths */ 393130613Smlaier 394130613Smlaier#ifndef _PATH_BSHELL 395130613Smlaier# define _PATH_BSHELL "/bin/sh" 396130613Smlaier#endif 397130613Smlaier 398130613Smlaier#ifdef USER_PATH 399130613Smlaier# ifdef _PATH_STDPATH 400130613Smlaier# undef _PATH_STDPATH 401130613Smlaier# endif 402130613Smlaier# define _PATH_STDPATH USER_PATH 403145836Smlaier#endif 404130613Smlaier 405130613Smlaier#ifndef _PATH_STDPATH 406130613Smlaier# define _PATH_STDPATH "/usr/bin:/bin:/usr/sbin:/sbin" 407130613Smlaier#endif 408130613Smlaier 409130613Smlaier#ifndef SUPERUSER_PATH 410130613Smlaier# define SUPERUSER_PATH _PATH_STDPATH 411130613Smlaier#endif 412130613Smlaier 413130613Smlaier#ifndef _PATH_DEVNULL 414130613Smlaier# define _PATH_DEVNULL "/dev/null" 415130613Smlaier#endif 416130613Smlaier 417130613Smlaier/* user may have set a different path */ 418130613Smlaier#if defined(_PATH_MAILDIR) && defined(MAIL_DIRECTORY) 419130613Smlaier# undef _PATH_MAILDIR 420130613Smlaier#endif /* defined(_PATH_MAILDIR) && defined(MAIL_DIRECTORY) */ 421130613Smlaier 422130613Smlaier#ifdef MAIL_DIRECTORY 423130613Smlaier# define _PATH_MAILDIR MAIL_DIRECTORY 424130613Smlaier#endif 425130613Smlaier 426130613Smlaier#ifndef _PATH_NOLOGIN 427130613Smlaier# define _PATH_NOLOGIN "/etc/nologin" 428130613Smlaier#endif 429130613Smlaier 430130613Smlaier/* Define this to be the path of the xauth program. */ 431130613Smlaier#ifdef XAUTH_PATH 432130613Smlaier#define _PATH_XAUTH XAUTH_PATH 433130613Smlaier#endif /* XAUTH_PATH */ 434130613Smlaier 435130613Smlaier/* derived from XF4/xc/lib/dps/Xlibnet.h */ 436130613Smlaier#ifndef X_UNIX_PATH 437130613Smlaier# ifdef __hpux 438130613Smlaier# define X_UNIX_PATH "/var/spool/sockets/X11/%u" 439130613Smlaier# else 440130613Smlaier# define X_UNIX_PATH "/tmp/.X11-unix/X%u" 441130613Smlaier# endif 442130613Smlaier#endif /* X_UNIX_PATH */ 443130613Smlaier#define _PATH_UNIX_X X_UNIX_PATH 444130613Smlaier 445130613Smlaier#ifndef _PATH_TTY 446130613Smlaier# define _PATH_TTY "/dev/tty" 447130613Smlaier#endif 448130613Smlaier 449130613Smlaier/* Macros */ 450130613Smlaier 451130613Smlaier#if defined(HAVE_LOGIN_GETCAPBOOL) && defined(HAVE_LOGIN_CAP_H) 452130613Smlaier# define HAVE_LOGIN_CAP 453130613Smlaier#endif 454130613Smlaier 455130613Smlaier#ifndef MAX 456130613Smlaier# define MAX(a,b) (((a)>(b))?(a):(b)) 457130613Smlaier# define MIN(a,b) (((a)<(b))?(a):(b)) 458130613Smlaier#endif 459145836Smlaier 460130613Smlaier#ifndef roundup 461130613Smlaier# define roundup(x, y) ((((x)+((y)-1))/(y))*(y)) 462130613Smlaier#endif 463130613Smlaier 464130613Smlaier#ifndef timersub 465130613Smlaier#define timersub(a, b, result) \ 466130613Smlaier do { \ 467130613Smlaier (result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \ 468130613Smlaier (result)->tv_usec = (a)->tv_usec - (b)->tv_usec; \ 469130613Smlaier if ((result)->tv_usec < 0) { \ 470130613Smlaier --(result)->tv_sec; \ 471130613Smlaier (result)->tv_usec += 1000000; \ 472130613Smlaier } \ 473130613Smlaier } while (0) 474130613Smlaier#endif 475145836Smlaier 476145836Smlaier#ifndef TIMEVAL_TO_TIMESPEC 477145836Smlaier#define TIMEVAL_TO_TIMESPEC(tv, ts) { \ 478145836Smlaier (ts)->tv_sec = (tv)->tv_sec; \ 479130613Smlaier (ts)->tv_nsec = (tv)->tv_usec * 1000; \ 480145836Smlaier} 481145836Smlaier#endif 482130613Smlaier 483130613Smlaier#ifndef TIMESPEC_TO_TIMEVAL 484130613Smlaier#define TIMESPEC_TO_TIMEVAL(tv, ts) { \ 485130613Smlaier (tv)->tv_sec = (ts)->tv_sec; \ 486130613Smlaier (tv)->tv_usec = (ts)->tv_nsec / 1000; \ 487130613Smlaier} 488130613Smlaier#endif 489130613Smlaier 490130613Smlaier#ifndef __P 491130613Smlaier# define __P(x) x 492130613Smlaier#endif 493130613Smlaier 494130613Smlaier#if !defined(IN6_IS_ADDR_V4MAPPED) 495145836Smlaier# define IN6_IS_ADDR_V4MAPPED(a) \ 496145836Smlaier ((((u_int32_t *) (a))[0] == 0) && (((u_int32_t *) (a))[1] == 0) && \ 497145836Smlaier (((u_int32_t *) (a))[2] == htonl (0xffff))) 498145836Smlaier#endif /* !defined(IN6_IS_ADDR_V4MAPPED) */ 499145836Smlaier 500130613Smlaier#if !defined(__GNUC__) || (__GNUC__ < 2) 501145836Smlaier# define __attribute__(x) 502145836Smlaier#endif /* !defined(__GNUC__) || (__GNUC__ < 2) */ 503130613Smlaier 504130613Smlaier#if !defined(HAVE_ATTRIBUTE__SENTINEL__) && !defined(__sentinel__) 505130613Smlaier# define __sentinel__ 506130613Smlaier#endif 507130613Smlaier 508130613Smlaier#if !defined(HAVE_ATTRIBUTE__BOUNDED__) && !defined(__bounded__) 509130613Smlaier# define __bounded__(x, y, z) 510130613Smlaier#endif 511130613Smlaier 512130613Smlaier#if !defined(HAVE_ATTRIBUTE__NONNULL__) && !defined(__nonnull__) 513130613Smlaier# define __nonnull__(x) 514130613Smlaier#endif 515130613Smlaier 516130613Smlaier#ifndef OSSH_ALIGNBYTES 517130613Smlaier#define OSSH_ALIGNBYTES (sizeof(int) - 1) 518130613Smlaier#endif 519130613Smlaier#ifndef __CMSG_ALIGN 520130613Smlaier#define __CMSG_ALIGN(p) (((u_int)(p) + OSSH_ALIGNBYTES) &~ OSSH_ALIGNBYTES) 521130613Smlaier#endif 522130613Smlaier 523130613Smlaier/* Length of the contents of a control message of length len */ 524130613Smlaier#ifndef CMSG_LEN 525130613Smlaier#define CMSG_LEN(len) (__CMSG_ALIGN(sizeof(struct cmsghdr)) + (len)) 526130613Smlaier#endif 527130613Smlaier 528130613Smlaier/* Length of the space taken up by a padded control message of length len */ 529130613Smlaier#ifndef CMSG_SPACE 530130613Smlaier#define CMSG_SPACE(len) (__CMSG_ALIGN(sizeof(struct cmsghdr)) + __CMSG_ALIGN(len)) 531130613Smlaier#endif 532130613Smlaier 533130613Smlaier/* given pointer to struct cmsghdr, return pointer to data */ 534130613Smlaier#ifndef CMSG_DATA 535130613Smlaier#define CMSG_DATA(cmsg) ((u_char *)(cmsg) + __CMSG_ALIGN(sizeof(struct cmsghdr))) 536130613Smlaier#endif /* CMSG_DATA */ 537130613Smlaier 538130613Smlaier/* 539130613Smlaier * RFC 2292 requires to check msg_controllen, in case that the kernel returns 540130613Smlaier * an empty list for some reasons. 541130613Smlaier */ 542130613Smlaier#ifndef CMSG_FIRSTHDR 543130613Smlaier#define CMSG_FIRSTHDR(mhdr) \ 544130613Smlaier ((mhdr)->msg_controllen >= sizeof(struct cmsghdr) ? \ 545130613Smlaier (struct cmsghdr *)(mhdr)->msg_control : \ 546130613Smlaier (struct cmsghdr *)NULL) 547130613Smlaier#endif /* CMSG_FIRSTHDR */ 548130613Smlaier 549130613Smlaier#if defined(HAVE_DECL_OFFSETOF) && HAVE_DECL_OFFSETOF == 0 550130613Smlaier# define offsetof(type, member) ((size_t) &((type *)0)->member) 551130613Smlaier#endif 552130613Smlaier 553130613Smlaier/* Set up BSD-style BYTE_ORDER definition if it isn't there already */ 554130613Smlaier/* XXX: doesn't try to cope with strange byte orders (PDP_ENDIAN) */ 555130613Smlaier#ifndef BYTE_ORDER 556130613Smlaier# ifndef LITTLE_ENDIAN 557130613Smlaier# define LITTLE_ENDIAN 1234 558130613Smlaier# endif /* LITTLE_ENDIAN */ 559130613Smlaier# ifndef BIG_ENDIAN 560130613Smlaier# define BIG_ENDIAN 4321 561130613Smlaier# endif /* BIG_ENDIAN */ 562130613Smlaier# ifdef WORDS_BIGENDIAN 563130613Smlaier# define BYTE_ORDER BIG_ENDIAN 564130613Smlaier# else /* WORDS_BIGENDIAN */ 565130613Smlaier# define BYTE_ORDER LITTLE_ENDIAN 566130613Smlaier# endif /* WORDS_BIGENDIAN */ 567145836Smlaier#endif /* BYTE_ORDER */ 568145836Smlaier 569130613Smlaier/* Function replacement / compatibility hacks */ 570130613Smlaier 571130613Smlaier#if !defined(HAVE_GETADDRINFO) && (defined(HAVE_OGETADDRINFO) || defined(HAVE_NGETADDRINFO)) 572130613Smlaier# define HAVE_GETADDRINFO 573130613Smlaier#endif 574130613Smlaier 575130613Smlaier#ifndef HAVE_GETOPT_OPTRESET 576130613Smlaier# undef getopt 577130613Smlaier# undef opterr 578130613Smlaier# undef optind 579130613Smlaier# undef optopt 580130613Smlaier# undef optreset 581130613Smlaier# undef optarg 582130613Smlaier# define getopt(ac, av, o) BSDgetopt(ac, av, o) 583130613Smlaier# define opterr BSDopterr 584130613Smlaier# define optind BSDoptind 585130613Smlaier# define optopt BSDoptopt 586130613Smlaier# define optreset BSDoptreset 587130613Smlaier# define optarg BSDoptarg 588130613Smlaier#endif 589130613Smlaier 590145836Smlaier#if defined(BROKEN_GETADDRINFO) && defined(HAVE_GETADDRINFO) 591145836Smlaier# undef HAVE_GETADDRINFO 592145836Smlaier#endif 593145836Smlaier#if defined(BROKEN_GETADDRINFO) && defined(HAVE_FREEADDRINFO) 594145836Smlaier# undef HAVE_FREEADDRINFO 595145836Smlaier#endif 596145836Smlaier#if defined(BROKEN_GETADDRINFO) && defined(HAVE_GAI_STRERROR) 597145836Smlaier# undef HAVE_GAI_STRERROR 598145836Smlaier#endif 599145836Smlaier 600145836Smlaier#if defined(HAVE_GETADDRINFO) 601145836Smlaier# if defined(HAVE_DECL_AI_NUMERICSERV) && HAVE_DECL_AI_NUMERICSERV == 0 602145836Smlaier# define AI_NUMERICSERV 0 603145836Smlaier# endif 604145836Smlaier#endif 605145836Smlaier 606145836Smlaier#if defined(BROKEN_UPDWTMPX) && defined(HAVE_UPDWTMPX) 607145836Smlaier# undef HAVE_UPDWTMPX 608145836Smlaier#endif 609145836Smlaier 610145836Smlaier#if defined(BROKEN_SHADOW_EXPIRE) && defined(HAS_SHADOW_EXPIRE) 611145836Smlaier# undef HAS_SHADOW_EXPIRE 612145836Smlaier#endif 613145836Smlaier 614145836Smlaier#if defined(HAVE_OPENLOG_R) && defined(SYSLOG_DATA_INIT) && \ 615145836Smlaier defined(SYSLOG_R_SAFE_IN_SIGHAND) 616145836Smlaier# define DO_LOG_SAFE_IN_SIGHAND 617145836Smlaier#endif 618145836Smlaier 619145836Smlaier#if !defined(HAVE_MEMMOVE) && defined(HAVE_BCOPY) 620145836Smlaier# define memmove(s1, s2, n) bcopy((s2), (s1), (n)) 621145836Smlaier#endif /* !defined(HAVE_MEMMOVE) && defined(HAVE_BCOPY) */ 622145836Smlaier 623145836Smlaier#ifndef GETPGRP_VOID 624145836Smlaier# include <unistd.h> 625145836Smlaier# define getpgrp() getpgrp(0) 626145836Smlaier#endif 627145836Smlaier 628145836Smlaier#ifdef USE_BSM_AUDIT 629145836Smlaier# define SSH_AUDIT_EVENTS 630145836Smlaier# define CUSTOM_SSH_AUDIT_EVENTS 631145836Smlaier#endif 632145836Smlaier 633145836Smlaier#ifdef USE_LINUX_AUDIT 634145836Smlaier# define SSH_AUDIT_EVENTS 635145836Smlaier# define CUSTOM_SSH_AUDIT_EVENTS 636145836Smlaier#endif 637145836Smlaier 638145836Smlaier#if !defined(HAVE___func__) && defined(HAVE___FUNCTION__) 639145836Smlaier# define __func__ __FUNCTION__ 640145836Smlaier#elif !defined(HAVE___func__) 641145836Smlaier# define __func__ "" 642145836Smlaier#endif 643145836Smlaier 644145836Smlaier#if defined(KRB5) && !defined(HEIMDAL) 645145836Smlaier# define krb5_get_err_text(context,code) error_message(code) 646145836Smlaier#endif 647145836Smlaier 648145836Smlaier#if defined(SKEYCHALLENGE_4ARG) 649145836Smlaier# define _compat_skeychallenge(a,b,c,d) skeychallenge(a,b,c,d) 650145836Smlaier#else 651145836Smlaier# define _compat_skeychallenge(a,b,c,d) skeychallenge(a,b,c) 652145836Smlaier#endif 653145836Smlaier 654130613Smlaier/* Maximum number of file descriptors available */ 655130613Smlaier#ifdef HAVE_SYSCONF 656130613Smlaier# define SSH_SYSFDMAX sysconf(_SC_OPEN_MAX) 657130613Smlaier#else 658130613Smlaier# define SSH_SYSFDMAX 10000 659145836Smlaier#endif 660145836Smlaier 661130613Smlaier#ifdef FSID_HAS_VAL 662130613Smlaier/* encode f_fsid into a 64 bit value */ 663130613Smlaier#define FSID_TO_ULONG(f) \ 664130613Smlaier ((((u_int64_t)(f).val[0] & 0xffffffffUL) << 32) | \ 665130613Smlaier ((f).val[1] & 0xffffffffUL)) 666130613Smlaier#elif defined(FSID_HAS___VAL) 667130613Smlaier#define FSID_TO_ULONG(f) \ 668130613Smlaier ((((u_int64_t)(f).__val[0] & 0xffffffffUL) << 32) | \ 669130613Smlaier ((f).__val[1] & 0xffffffffUL)) 670130613Smlaier#else 671130613Smlaier# define FSID_TO_ULONG(f) ((f)) 672130613Smlaier#endif 673130613Smlaier 674130613Smlaier#if defined(__Lynx__) 675130613Smlaier /* 676130613Smlaier * LynxOS defines these in param.h which we do not want to include since 677130613Smlaier * it will also pull in a bunch of kernel definitions. 678130613Smlaier */ 679130613Smlaier# define ALIGNBYTES (sizeof(int) - 1) 680130613Smlaier# define ALIGN(p) (((unsigned)p + ALIGNBYTES) & ~ALIGNBYTES) 681130613Smlaier /* Missing prototypes on LynxOS */ 682130613Smlaier int snprintf (char *, size_t, const char *, ...); 683130613Smlaier int mkstemp (char *); 684130613Smlaier char *crypt (const char *, const char *); 685130613Smlaier int seteuid (uid_t); 686130613Smlaier int setegid (gid_t); 687130613Smlaier char *mkdtemp (char *); 688130613Smlaier int rresvport_af (int *, sa_family_t); 689130613Smlaier int innetgr (const char *, const char *, const char *, const char *); 690130613Smlaier#endif 691130613Smlaier 692130613Smlaier/* 693145836Smlaier * Define this to use pipes instead of socketpairs for communicating with the 694130613Smlaier * client program. Socketpairs do not seem to work on all systems. 695130613Smlaier * 696130613Smlaier * configure.ac sets this for a few OS's which are known to have problems 697130613Smlaier * but you may need to set it yourself 698130613Smlaier */ 699130613Smlaier/* #define USE_PIPES 1 */ 700130613Smlaier 701130613Smlaier/** 702130613Smlaier ** login recorder definitions 703130613Smlaier **/ 704130613Smlaier 705130613Smlaier/* FIXME: put default paths back in */ 706130613Smlaier#ifndef UTMP_FILE 707130613Smlaier# ifdef _PATH_UTMP 708130613Smlaier# define UTMP_FILE _PATH_UTMP 709130613Smlaier# else 710130613Smlaier# ifdef CONF_UTMP_FILE 711130613Smlaier# define UTMP_FILE CONF_UTMP_FILE 712130613Smlaier# endif 713130613Smlaier# endif 714130613Smlaier#endif 715130613Smlaier#ifndef WTMP_FILE 716130613Smlaier# ifdef _PATH_WTMP 717130613Smlaier# define WTMP_FILE _PATH_WTMP 718130613Smlaier# else 719130613Smlaier# ifdef CONF_WTMP_FILE 720130613Smlaier# define WTMP_FILE CONF_WTMP_FILE 721130613Smlaier# endif 722130613Smlaier# endif 723130613Smlaier#endif 724130613Smlaier/* pick up the user's location for lastlog if given */ 725130613Smlaier#ifndef LASTLOG_FILE 726130613Smlaier# ifdef _PATH_LASTLOG 727130613Smlaier# define LASTLOG_FILE _PATH_LASTLOG 728130613Smlaier# else 729130613Smlaier# ifdef CONF_LASTLOG_FILE 730130613Smlaier# define LASTLOG_FILE CONF_LASTLOG_FILE 731130613Smlaier# endif 732130613Smlaier# endif 733145836Smlaier#endif 734145836Smlaier 735145836Smlaier#if defined(HAVE_SHADOW_H) && !defined(DISABLE_SHADOW) 736145836Smlaier# define USE_SHADOW 737145836Smlaier#endif 738130613Smlaier 739130613Smlaier/* The login() library function in libutil is first choice */ 740130613Smlaier#if defined(HAVE_LOGIN) && !defined(DISABLE_LOGIN) 741130613Smlaier# define USE_LOGIN 742145836Smlaier 743145836Smlaier#else 744145836Smlaier/* Simply select your favourite login types. */ 745145836Smlaier/* Can't do if-else because some systems use several... <sigh> */ 746145836Smlaier# if !defined(DISABLE_UTMPX) 747145836Smlaier# define USE_UTMPX 748145836Smlaier# endif 749145836Smlaier# if defined(UTMP_FILE) && !defined(DISABLE_UTMP) 750145836Smlaier# define USE_UTMP 751145836Smlaier# endif 752145836Smlaier# if defined(WTMPX_FILE) && !defined(DISABLE_WTMPX) 753145836Smlaier# define USE_WTMPX 754145836Smlaier# endif 755145836Smlaier# if defined(WTMP_FILE) && !defined(DISABLE_WTMP) 756145836Smlaier# define USE_WTMP 757145836Smlaier# endif 758145836Smlaier 759145836Smlaier#endif 760145836Smlaier 761145836Smlaier#ifndef UT_LINESIZE 762145836Smlaier# define UT_LINESIZE 8 763145836Smlaier#endif 764145836Smlaier 765145836Smlaier/* I hope that the presence of LASTLOG_FILE is enough to detect this */ 766145836Smlaier#if defined(LASTLOG_FILE) && !defined(DISABLE_LASTLOG) 767145836Smlaier# define USE_LASTLOG 768145836Smlaier#endif 769145836Smlaier 770145836Smlaier#ifdef HAVE_OSF_SIA 771145836Smlaier# ifdef USE_SHADOW 772145836Smlaier# undef USE_SHADOW 773145836Smlaier# endif 774145836Smlaier# define CUSTOM_SYS_AUTH_PASSWD 1 775145836Smlaier#endif 776145836Smlaier 777145836Smlaier#if defined(HAVE_LIBIAF) && defined(HAVE_SET_ID) && !defined(HAVE_SECUREWARE) 778145836Smlaier# define CUSTOM_SYS_AUTH_PASSWD 1 779145836Smlaier#endif 780145836Smlaier#if defined(HAVE_LIBIAF) && defined(HAVE_SET_ID) && !defined(BROKEN_LIBIAF) 781145836Smlaier# define USE_LIBIAF 782145836Smlaier#endif 783145836Smlaier 784145836Smlaier/* HP-UX 11.11 */ 785145836Smlaier#ifdef BTMP_FILE 786145836Smlaier# define _PATH_BTMP BTMP_FILE 787145836Smlaier#endif 788145836Smlaier 789145836Smlaier#if defined(USE_BTMP) && defined(_PATH_BTMP) 790145836Smlaier# define CUSTOM_FAILED_LOGIN 791145836Smlaier#endif 792145836Smlaier 793145836Smlaier/** end of login recorder definitions */ 794145836Smlaier 795145836Smlaier#ifdef BROKEN_GETGROUPS 796130613Smlaier# define getgroups(a,b) ((a)==0 && (b)==NULL ? NGROUPS_MAX : getgroups((a),(b))) 797130613Smlaier#endif 798130613Smlaier 799130613Smlaier#if defined(HAVE_MMAP) && defined(BROKEN_MMAP) 800130613Smlaier# undef HAVE_MMAP 801145836Smlaier#endif 802130613Smlaier 803130613Smlaier#ifndef IOV_MAX 804130613Smlaier# if defined(_XOPEN_IOV_MAX) 805130613Smlaier# define IOV_MAX _XOPEN_IOV_MAX 806130613Smlaier# elif defined(DEF_IOV_MAX) 807130613Smlaier# define IOV_MAX DEF_IOV_MAX 808130613Smlaier# else 809130613Smlaier# define IOV_MAX 16 810130613Smlaier# endif 811130613Smlaier#endif 812130613Smlaier 813130613Smlaier#ifndef EWOULDBLOCK 814130613Smlaier# define EWOULDBLOCK EAGAIN 815130613Smlaier#endif 816130613Smlaier 817130613Smlaier#ifndef INET6_ADDRSTRLEN /* for non IPv6 machines */ 818130613Smlaier#define INET6_ADDRSTRLEN 46 819130613Smlaier#endif 820130613Smlaier 821130613Smlaier#ifndef SSH_IOBUFSZ 822130613Smlaier# define SSH_IOBUFSZ 8192 823130613Smlaier#endif 824130613Smlaier 825130613Smlaier/* 826130613Smlaier * Platforms that have arc4random_uniform() and not arc4random_stir() 827130613Smlaier * shouldn't need the latter. 828130613Smlaier */ 829130613Smlaier#if defined(HAVE_ARC4RANDOM) && defined(HAVE_ARC4RANDOM_UNIFORM) && \ 830130613Smlaier !defined(HAVE_ARC4RANDOM_STIR) 831130613Smlaier# define arc4random_stir() 832145836Smlaier#endif 833130613Smlaier 834130613Smlaier#ifndef HAVE_VA_COPY 835130613Smlaier# ifdef HAVE___VA_COPY 836130613Smlaier# define va_copy(dest, src) __va_copy(dest, src) 837130613Smlaier# else 838130613Smlaier# define va_copy(dest, src) (dest) = (src) 839130613Smlaier# endif 840130613Smlaier#endif 841130613Smlaier 842130613Smlaier#ifndef __predict_true 843130613Smlaier# if defined(__GNUC__) && \ 844130613Smlaier ((__GNUC__ > (2)) || (__GNUC__ == (2) && __GNUC_MINOR__ >= (96))) 845130613Smlaier# define __predict_true(exp) __builtin_expect(((exp) != 0), 1) 846130613Smlaier# define __predict_false(exp) __builtin_expect(((exp) != 0), 0) 847130613Smlaier# else 848130613Smlaier# define __predict_true(exp) ((exp) != 0) 849130613Smlaier# define __predict_false(exp) ((exp) != 0) 850130613Smlaier# endif /* gcc version */ 851130613Smlaier#endif /* __predict_true */ 852130613Smlaier 853130613Smlaier#endif /* _DEFINES_H */ 854130613Smlaier