defines.h revision 162852
155682Smarkm/* 255682Smarkm * Copyright (c) 1999-2003 Damien Miller. All rights reserved. 355682Smarkm * 455682Smarkm * Redistribution and use in source and binary forms, with or without 555682Smarkm * modification, are permitted provided that the following conditions 655682Smarkm * are met: 755682Smarkm * 1. Redistributions of source code must retain the above copyright 855682Smarkm * notice, this list of conditions and the following disclaimer. 955682Smarkm * 2. Redistributions in binary form must reproduce the above copyright 1055682Smarkm * notice, this list of conditions and the following disclaimer in the 1155682Smarkm * documentation and/or other materials provided with the distribution. 1255682Smarkm * 1355682Smarkm * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 1455682Smarkm * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 1555682Smarkm * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 1655682Smarkm * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 1755682Smarkm * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 1855682Smarkm * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 1955682Smarkm * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2055682Smarkm * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2155682Smarkm * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 2255682Smarkm * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2355682Smarkm */ 2455682Smarkm 2555682Smarkm#ifndef _DEFINES_H 2655682Smarkm#define _DEFINES_H 2755682Smarkm 2855682Smarkm/* $Id: defines.h,v 1.138 2006/09/21 13:13:30 dtucker Exp $ */ 2955682Smarkm 3055682Smarkm 3155682Smarkm/* Constants */ 3255682Smarkm 3355682Smarkm#if defined(HAVE_DECL_SHUT_RD) && HAVE_DECL_SHUT_RD == 0 3455682Smarkmenum 3555682Smarkm{ 3655682Smarkm SHUT_RD = 0, /* No more receptions. */ 3755682Smarkm SHUT_WR, /* No more transmissions. */ 3855682Smarkm SHUT_RDWR /* No more receptions or transmissions. */ 39102644Snectar}; 4055682Smarkm# define SHUT_RD SHUT_RD 41233294Sstas# define SHUT_WR SHUT_WR 42102644Snectar# define SHUT_RDWR SHUT_RDWR 43102644Snectar#endif 44102644Snectar 45102644Snectar#ifndef IPTOS_LOWDELAY 46102644Snectar# define IPTOS_LOWDELAY 0x10 47102644Snectar# define IPTOS_THROUGHPUT 0x08 48102644Snectar# define IPTOS_RELIABILITY 0x04 49102644Snectar# define IPTOS_LOWCOST 0x02 50102644Snectar# define IPTOS_MINCOST IPTOS_LOWCOST 51102644Snectar#endif /* IPTOS_LOWDELAY */ 52102644Snectar 53102644Snectar#ifndef MAXPATHLEN 54102644Snectar# ifdef PATH_MAX 55102644Snectar# define MAXPATHLEN PATH_MAX 56120945Snectar# else /* PATH_MAX */ 57120945Snectar# define MAXPATHLEN 64 58102644Snectar/* realpath uses a fixed buffer of size MAXPATHLEN, so force use of ours */ 59102644Snectar# ifndef BROKEN_REALPATH 60102644Snectar# define BROKEN_REALPATH 1 61102644Snectar# endif /* BROKEN_REALPATH */ 62127808Snectar# endif /* PATH_MAX */ 63127808Snectar#endif /* MAXPATHLEN */ 64178825Sdfr 65178825Sdfr#ifndef PATH_MAX 66178825Sdfr# ifdef _POSIX_PATH_MAX 67127808Snectar# define PATH_MAX _POSIX_PATH_MAX 68102644Snectar# endif 69102644Snectar#endif 70102644Snectar 71102644Snectar#ifndef MAXSYMLINKS 72178825Sdfr# define MAXSYMLINKS 5 73178825Sdfr#endif 74102644Snectar 75102644Snectar#ifndef STDIN_FILENO 76102644Snectar# define STDIN_FILENO 0 77102644Snectar#endif 78102644Snectar#ifndef STDOUT_FILENO 79102644Snectar# define STDOUT_FILENO 1 80102644Snectar#endif 81102644Snectar#ifndef STDERR_FILENO 82102644Snectar# define STDERR_FILENO 2 83102644Snectar#endif 84102644Snectar 85102644Snectar#ifndef NGROUPS_MAX /* Disable groupaccess if NGROUP_MAX is not set */ 86102644Snectar#ifdef NGROUPS 8755682Smarkm#define NGROUPS_MAX NGROUPS 8855682Smarkm#else 8955682Smarkm#define NGROUPS_MAX 0 90102644Snectar#endif 9155682Smarkm#endif 9255682Smarkm 9355682Smarkm#if defined(HAVE_DECL_O_NONBLOCK) && HAVE_DECL_O_NONBLOCK == 0 94102644Snectar# define O_NONBLOCK 00004 /* Non Blocking Open */ 9555682Smarkm#endif 9678527Sassar 9755682Smarkm#ifndef S_ISDIR 9855682Smarkm# define S_ISDIR(mode) (((mode) & (_S_IFMT)) == (_S_IFDIR)) 9955682Smarkm#endif /* S_ISDIR */ 10055682Smarkm 10155682Smarkm#ifndef S_ISREG 10255682Smarkm# define S_ISREG(mode) (((mode) & (_S_IFMT)) == (_S_IFREG)) 10355682Smarkm#endif /* S_ISREG */ 10472445Sassar 10555682Smarkm#ifndef S_ISLNK 10672445Sassar# define S_ISLNK(mode) (((mode) & S_IFMT) == S_IFLNK) 107127808Snectar#endif /* S_ISLNK */ 108127808Snectar 109127808Snectar#ifndef S_IXUSR 11055682Smarkm# define S_IXUSR 0000100 /* execute/search permission, */ 111102644Snectar# define S_IXGRP 0000010 /* execute/search permission, */ 112102644Snectar# define S_IXOTH 0000001 /* execute/search permission, */ 113102644Snectar# define _S_IWUSR 0000200 /* write permission, */ 114102644Snectar# define S_IWUSR _S_IWUSR /* write permission, owner */ 115102644Snectar# define S_IWGRP 0000020 /* write permission, group */ 116102644Snectar# define S_IWOTH 0000002 /* write permission, other */ 117102644Snectar# define S_IRUSR 0000400 /* read permission, owner */ 118102644Snectar# define S_IRGRP 0000040 /* read permission, group */ 11955682Smarkm# define S_IROTH 0000004 /* read permission, other */ 120102644Snectar# define S_IRWXU 0000700 /* read, write, execute */ 121102644Snectar# define S_IRWXG 0000070 /* read, write, execute */ 122102644Snectar# define S_IRWXO 0000007 /* read, write, execute */ 123102644Snectar#endif /* S_IXUSR */ 12455682Smarkm 12555682Smarkm#if !defined(MAP_ANON) && defined(MAP_ANONYMOUS) 12655682Smarkm#define MAP_ANON MAP_ANONYMOUS 12755682Smarkm#endif 12855682Smarkm 12955682Smarkm#ifndef MAP_FAILED 13055682Smarkm# define MAP_FAILED ((void *)-1) 13155682Smarkm#endif 13255682Smarkm 13355682Smarkm/* *-*-nto-qnx doesn't define this constant in the system headers */ 13455682Smarkm#ifdef MISSING_NFDBITS 13555682Smarkm# define NFDBITS (8 * sizeof(unsigned long)) 13655682Smarkm#endif 13755682Smarkm 13855682Smarkm/* 13955682SmarkmSCO Open Server 3 has INADDR_LOOPBACK defined in rpc/rpc.h but 14055682Smarkmincluding rpc/rpc.h breaks Solaris 6 14155682Smarkm*/ 14255682Smarkm#ifndef INADDR_LOOPBACK 14355682Smarkm#define INADDR_LOOPBACK ((u_long)0x7f000001) 14455682Smarkm#endif 145233294Sstas 14655682Smarkm/* Types */ 14755682Smarkm 14855682Smarkm/* If sys/types.h does not supply intXX_t, supply them ourselves */ 14955682Smarkm/* (or die trying) */ 15078527Sassar 15155682Smarkm#ifndef HAVE_U_INT 15255682Smarkmtypedef unsigned int u_int; 15355682Smarkm#endif 15455682Smarkm 15555682Smarkm#ifndef HAVE_INTXX_T 15655682Smarkm# if (SIZEOF_CHAR == 1) 15755682Smarkmtypedef char int8_t; 15855682Smarkm# else 15955682Smarkm# error "8 bit int type not found." 16055682Smarkm# endif 16155682Smarkm# if (SIZEOF_SHORT_INT == 2) 16255682Smarkmtypedef short int int16_t; 16355682Smarkm# else 16455682Smarkm# ifdef _UNICOS 16555682Smarkm# if (SIZEOF_SHORT_INT == 4) 16655682Smarkmtypedef short int16_t; 16755682Smarkm# else 16855682Smarkmtypedef long int16_t; 16955682Smarkm# endif 17055682Smarkm# else 17155682Smarkm# error "16 bit int type not found." 17255682Smarkm# endif /* _UNICOS */ 17355682Smarkm# endif 17455682Smarkm# if (SIZEOF_INT == 4) 17555682Smarkmtypedef int int32_t; 17655682Smarkm# else 17755682Smarkm# ifdef _UNICOS 17855682Smarkmtypedef long int32_t; 17955682Smarkm# else 18055682Smarkm# error "32 bit int type not found." 18155682Smarkm# endif /* _UNICOS */ 18255682Smarkm# endif 18355682Smarkm#endif 18455682Smarkm 18555682Smarkm/* If sys/types.h does not supply u_intXX_t, supply them ourselves */ 18655682Smarkm#ifndef HAVE_U_INTXX_T 18755682Smarkm# ifdef HAVE_UINTXX_T 18855682Smarkmtypedef uint8_t u_int8_t; 18955682Smarkmtypedef uint16_t u_int16_t; 19055682Smarkmtypedef uint32_t u_int32_t; 19155682Smarkm# define HAVE_U_INTXX_T 1 19255682Smarkm# else 19355682Smarkm# if (SIZEOF_CHAR == 1) 19455682Smarkmtypedef unsigned char u_int8_t; 19555682Smarkm# else 19655682Smarkm# error "8 bit int type not found." 19755682Smarkm# endif 19855682Smarkm# if (SIZEOF_SHORT_INT == 2) 19955682Smarkmtypedef unsigned short int u_int16_t; 20055682Smarkm# else 20155682Smarkm# ifdef _UNICOS 20255682Smarkm# if (SIZEOF_SHORT_INT == 4) 20355682Smarkmtypedef unsigned short u_int16_t; 20455682Smarkm# else 20555682Smarkmtypedef unsigned long u_int16_t; 20655682Smarkm# endif 20755682Smarkm# else 20855682Smarkm# error "16 bit int type not found." 20955682Smarkm# endif 21055682Smarkm# endif 21155682Smarkm# if (SIZEOF_INT == 4) 21255682Smarkmtypedef unsigned int u_int32_t; 21355682Smarkm# else 21455682Smarkm# ifdef _UNICOS 21555682Smarkmtypedef unsigned long u_int32_t; 21655682Smarkm# else 21755682Smarkm# error "32 bit int type not found." 21855682Smarkm# endif 21955682Smarkm# endif 220233294Sstas# endif 22155682Smarkm#define __BIT_TYPES_DEFINED__ 22255682Smarkm#endif 22355682Smarkm 22455682Smarkm/* 64-bit types */ 22555682Smarkm#ifndef HAVE_INT64_T 22655682Smarkm# if (SIZEOF_LONG_INT == 8) 22755682Smarkmtypedef long int int64_t; 22855682Smarkm# else 22955682Smarkm# if (SIZEOF_LONG_LONG_INT == 8) 23055682Smarkmtypedef long long int int64_t; 23155682Smarkm# endif 23255682Smarkm# endif 23355682Smarkm#endif 23472445Sassar#ifndef HAVE_U_INT64_T 23555682Smarkm# if (SIZEOF_LONG_INT == 8) 23655682Smarkmtypedef unsigned long int u_int64_t; 23755682Smarkm# else 23855682Smarkm# if (SIZEOF_LONG_LONG_INT == 8) 23955682Smarkmtypedef unsigned long long int u_int64_t; 24055682Smarkm# endif 24155682Smarkm# endif 24255682Smarkm#endif 24355682Smarkm 24455682Smarkm#ifndef HAVE_U_CHAR 24555682Smarkmtypedef unsigned char u_char; 24672445Sassar# define HAVE_U_CHAR 24772445Sassar#endif /* HAVE_U_CHAR */ 24872445Sassar 24972445Sassar#ifndef SIZE_T_MAX 25072445Sassar#define SIZE_T_MAX ULONG_MAX 25172445Sassar#endif /* SIZE_T_MAX */ 25272445Sassar 25372445Sassar#ifndef HAVE_SIZE_T 25455682Smarkmtypedef unsigned int size_t; 25555682Smarkm# define HAVE_SIZE_T 25655682Smarkm# define SIZE_T_MAX UINT_MAX 25755682Smarkm#endif /* HAVE_SIZE_T */ 25855682Smarkm 25955682Smarkm#ifndef HAVE_SSIZE_T 26055682Smarkmtypedef int ssize_t; 26155682Smarkm# define HAVE_SSIZE_T 26255682Smarkm#endif /* HAVE_SSIZE_T */ 26355682Smarkm 26455682Smarkm#ifndef HAVE_CLOCK_T 26555682Smarkmtypedef long clock_t; 26655682Smarkm# define HAVE_CLOCK_T 26755682Smarkm#endif /* HAVE_CLOCK_T */ 26855682Smarkm 26955682Smarkm#ifndef HAVE_SA_FAMILY_T 27055682Smarkmtypedef int sa_family_t; 27155682Smarkm# define HAVE_SA_FAMILY_T 27255682Smarkm#endif /* HAVE_SA_FAMILY_T */ 27355682Smarkm 27455682Smarkm#ifndef HAVE_PID_T 27555682Smarkmtypedef int pid_t; 27655682Smarkm# define HAVE_PID_T 27755682Smarkm#endif /* HAVE_PID_T */ 27855682Smarkm 27955682Smarkm#ifndef HAVE_SIG_ATOMIC_T 28055682Smarkmtypedef int sig_atomic_t; 28155682Smarkm# define HAVE_SIG_ATOMIC_T 28272445Sassar#endif /* HAVE_SIG_ATOMIC_T */ 28372445Sassar 28472445Sassar#ifndef HAVE_MODE_T 28572445Sassartypedef int mode_t; 28672445Sassar# define HAVE_MODE_T 28772445Sassar#endif /* HAVE_MODE_T */ 28855682Smarkm 28972445Sassar#if !defined(HAVE_SS_FAMILY_IN_SS) && defined(HAVE___SS_FAMILY_IN_SS) 29055682Smarkm# define ss_family __ss_family 29172445Sassar#endif /* !defined(HAVE_SS_FAMILY_IN_SS) && defined(HAVE_SA_FAMILY_IN_SS) */ 29272445Sassar 29355682Smarkm#ifndef HAVE_SYS_UN_H 29455682Smarkmstruct sockaddr_un { 29555682Smarkm short sun_family; /* AF_UNIX */ 29655682Smarkm char sun_path[108]; /* path name (gag) */ 29755682Smarkm}; 29855682Smarkm#endif /* HAVE_SYS_UN_H */ 29955682Smarkm 30055682Smarkm#ifndef HAVE_IN_ADDR_T 30155682Smarkmtypedef u_int32_t in_addr_t; 30255682Smarkm#endif 30355682Smarkm 30455682Smarkm#if defined(BROKEN_SYS_TERMIO_H) && !defined(_STRUCT_WINSIZE) 30555682Smarkm#define _STRUCT_WINSIZE 30655682Smarkmstruct winsize { 30755682Smarkm unsigned short ws_row; /* rows, in characters */ 30855682Smarkm unsigned short ws_col; /* columns, in character */ 30955682Smarkm unsigned short ws_xpixel; /* horizontal size, pixels */ 31055682Smarkm unsigned short ws_ypixel; /* vertical size, pixels */ 31155682Smarkm}; 31255682Smarkm#endif 31355682Smarkm 31455682Smarkm/* *-*-nto-qnx does not define this type in the system headers */ 31555682Smarkm#ifdef MISSING_FD_MASK 31655682Smarkm typedef unsigned long int fd_mask; 31755682Smarkm#endif 31855682Smarkm 31955682Smarkm/* Paths */ 32055682Smarkm 32155682Smarkm#ifndef _PATH_BSHELL 32255682Smarkm# define _PATH_BSHELL "/bin/sh" 32355682Smarkm#endif 32455682Smarkm#ifndef _PATH_CSHELL 32555682Smarkm# define _PATH_CSHELL "/bin/csh" 32655682Smarkm#endif 32755682Smarkm#ifndef _PATH_SHELLS 32855682Smarkm# define _PATH_SHELLS "/etc/shells" 32955682Smarkm#endif 33055682Smarkm 33155682Smarkm#ifdef USER_PATH 33255682Smarkm# ifdef _PATH_STDPATH 33355682Smarkm# undef _PATH_STDPATH 33455682Smarkm# endif 33555682Smarkm# define _PATH_STDPATH USER_PATH 33655682Smarkm#endif 33755682Smarkm 33855682Smarkm#ifndef _PATH_STDPATH 33955682Smarkm# define _PATH_STDPATH "/usr/bin:/bin:/usr/sbin:/sbin" 34055682Smarkm#endif 34155682Smarkm 34255682Smarkm#ifndef SUPERUSER_PATH 34355682Smarkm# define SUPERUSER_PATH _PATH_STDPATH 34455682Smarkm#endif 34555682Smarkm 34655682Smarkm#ifndef _PATH_DEVNULL 34755682Smarkm# define _PATH_DEVNULL "/dev/null" 34855682Smarkm#endif 34955682Smarkm 35055682Smarkm#ifndef MAIL_DIRECTORY 35155682Smarkm# define MAIL_DIRECTORY "/var/spool/mail" 35255682Smarkm#endif 35355682Smarkm 35455682Smarkm#ifndef MAILDIR 35555682Smarkm# define MAILDIR MAIL_DIRECTORY 35655682Smarkm#endif 35755682Smarkm 35855682Smarkm#if !defined(_PATH_MAILDIR) && defined(MAILDIR) 35955682Smarkm# define _PATH_MAILDIR MAILDIR 36055682Smarkm#endif /* !defined(_PATH_MAILDIR) && defined(MAILDIR) */ 36155682Smarkm 36255682Smarkm#ifndef _PATH_NOLOGIN 36355682Smarkm# define _PATH_NOLOGIN "/etc/nologin" 36455682Smarkm#endif 36555682Smarkm 36655682Smarkm/* Define this to be the path of the xauth program. */ 36755682Smarkm#ifdef XAUTH_PATH 36855682Smarkm#define _PATH_XAUTH XAUTH_PATH 36955682Smarkm#endif /* XAUTH_PATH */ 37055682Smarkm 37155682Smarkm/* derived from XF4/xc/lib/dps/Xlibnet.h */ 37255682Smarkm#ifndef X_UNIX_PATH 37355682Smarkm# ifdef __hpux 37455682Smarkm# define X_UNIX_PATH "/var/spool/sockets/X11/%u" 37555682Smarkm# else 37655682Smarkm# define X_UNIX_PATH "/tmp/.X11-unix/X%u" 37755682Smarkm# endif 37855682Smarkm#endif /* X_UNIX_PATH */ 37955682Smarkm#define _PATH_UNIX_X X_UNIX_PATH 38055682Smarkm 38155682Smarkm#ifndef _PATH_TTY 38255682Smarkm# define _PATH_TTY "/dev/tty" 38355682Smarkm#endif 38455682Smarkm 38555682Smarkm/* Macros */ 38655682Smarkm 38755682Smarkm#if defined(HAVE_LOGIN_GETCAPBOOL) && defined(HAVE_LOGIN_CAP_H) 38855682Smarkm# define HAVE_LOGIN_CAP 38955682Smarkm#endif 39055682Smarkm 39155682Smarkm#ifndef MAX 39255682Smarkm# define MAX(a,b) (((a)>(b))?(a):(b)) 39355682Smarkm# define MIN(a,b) (((a)<(b))?(a):(b)) 39455682Smarkm#endif 39555682Smarkm 39655682Smarkm#ifndef roundup 39755682Smarkm# define roundup(x, y) ((((x)+((y)-1))/(y))*(y)) 39855682Smarkm#endif 39955682Smarkm 40055682Smarkm#ifndef timersub 40155682Smarkm#define timersub(a, b, result) \ 40255682Smarkm do { \ 40355682Smarkm (result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \ 40455682Smarkm (result)->tv_usec = (a)->tv_usec - (b)->tv_usec; \ 40555682Smarkm if ((result)->tv_usec < 0) { \ 40655682Smarkm --(result)->tv_sec; \ 40755682Smarkm (result)->tv_usec += 1000000; \ 40855682Smarkm } \ 40955682Smarkm } while (0) 41055682Smarkm#endif 41155682Smarkm 41255682Smarkm#ifndef TIMEVAL_TO_TIMESPEC 41355682Smarkm#define TIMEVAL_TO_TIMESPEC(tv, ts) { \ 41455682Smarkm (ts)->tv_sec = (tv)->tv_sec; \ 41555682Smarkm (ts)->tv_nsec = (tv)->tv_usec * 1000; \ 41655682Smarkm} 41755682Smarkm#endif 41855682Smarkm 41955682Smarkm#ifndef TIMESPEC_TO_TIMEVAL 42055682Smarkm#define TIMESPEC_TO_TIMEVAL(tv, ts) { \ 42155682Smarkm (tv)->tv_sec = (ts)->tv_sec; \ 42255682Smarkm (tv)->tv_usec = (ts)->tv_nsec / 1000; \ 42355682Smarkm} 42455682Smarkm#endif 42555682Smarkm 42655682Smarkm#ifndef __P 42755682Smarkm# define __P(x) x 42855682Smarkm#endif 42955682Smarkm 43055682Smarkm#if !defined(IN6_IS_ADDR_V4MAPPED) 43155682Smarkm# define IN6_IS_ADDR_V4MAPPED(a) \ 43255682Smarkm ((((u_int32_t *) (a))[0] == 0) && (((u_int32_t *) (a))[1] == 0) && \ 43355682Smarkm (((u_int32_t *) (a))[2] == htonl (0xffff))) 43455682Smarkm#endif /* !defined(IN6_IS_ADDR_V4MAPPED) */ 43555682Smarkm 43655682Smarkm#if !defined(__GNUC__) || (__GNUC__ < 2) 43755682Smarkm# define __attribute__(x) 43855682Smarkm#endif /* !defined(__GNUC__) || (__GNUC__ < 2) */ 43955682Smarkm 44055682Smarkm#ifndef __dead 44155682Smarkm# define __dead __attribute__((noreturn)) 44255682Smarkm#endif 44355682Smarkm 44455682Smarkm#if !defined(HAVE_ATTRIBUTE__SENTINEL__) && !defined(__sentinel__) 44555682Smarkm# define __sentinel__ 44655682Smarkm#endif 44755682Smarkm 44855682Smarkm#if !defined(HAVE_ATTRIBUTE__BOUNDED__) && !defined(__bounded__) 44955682Smarkm# define __bounded__(x, y, z) 45055682Smarkm#endif 45155682Smarkm 45255682Smarkm/* *-*-nto-qnx doesn't define this macro in the system headers */ 45355682Smarkm#ifdef MISSING_HOWMANY 45455682Smarkm# define howmany(x,y) (((x)+((y)-1))/(y)) 45555682Smarkm#endif 45655682Smarkm 45755682Smarkm#ifndef OSSH_ALIGNBYTES 45855682Smarkm#define OSSH_ALIGNBYTES (sizeof(int) - 1) 45955682Smarkm#endif 46055682Smarkm#ifndef __CMSG_ALIGN 46155682Smarkm#define __CMSG_ALIGN(p) (((u_int)(p) + OSSH_ALIGNBYTES) &~ OSSH_ALIGNBYTES) 46255682Smarkm#endif 46355682Smarkm 46455682Smarkm/* Length of the contents of a control message of length len */ 46555682Smarkm#ifndef CMSG_LEN 46655682Smarkm#define CMSG_LEN(len) (__CMSG_ALIGN(sizeof(struct cmsghdr)) + (len)) 46755682Smarkm#endif 46855682Smarkm 46955682Smarkm/* Length of the space taken up by a padded control message of length len */ 47055682Smarkm#ifndef CMSG_SPACE 47155682Smarkm#define CMSG_SPACE(len) (__CMSG_ALIGN(sizeof(struct cmsghdr)) + __CMSG_ALIGN(len)) 47255682Smarkm#endif 47355682Smarkm 47455682Smarkm/* given pointer to struct cmsghdr, return pointer to data */ 47555682Smarkm#ifndef CMSG_DATA 47655682Smarkm#define CMSG_DATA(cmsg) ((u_char *)(cmsg) + __CMSG_ALIGN(sizeof(struct cmsghdr))) 47755682Smarkm#endif /* CMSG_DATA */ 47855682Smarkm 47955682Smarkm/* 48055682Smarkm * RFC 2292 requires to check msg_controllen, in case that the kernel returns 48155682Smarkm * an empty list for some reasons. 48255682Smarkm */ 48355682Smarkm#ifndef CMSG_FIRSTHDR 48455682Smarkm#define CMSG_FIRSTHDR(mhdr) \ 48555682Smarkm ((mhdr)->msg_controllen >= sizeof(struct cmsghdr) ? \ 48655682Smarkm (struct cmsghdr *)(mhdr)->msg_control : \ 48755682Smarkm (struct cmsghdr *)NULL) 48855682Smarkm#endif /* CMSG_FIRSTHDR */ 48955682Smarkm 49055682Smarkm#ifndef offsetof 49155682Smarkm# define offsetof(type, member) ((size_t) &((type *)0)->member) 49255682Smarkm#endif 49355682Smarkm 49455682Smarkm/* Set up BSD-style BYTE_ORDER definition if it isn't there already */ 49555682Smarkm/* XXX: doesn't try to cope with strange byte orders (PDP_ENDIAN) */ 49655682Smarkm#ifndef BYTE_ORDER 49755682Smarkm# ifndef LITTLE_ENDIAN 49855682Smarkm# define LITTLE_ENDIAN 1234 49955682Smarkm# endif /* LITTLE_ENDIAN */ 50055682Smarkm# ifndef BIG_ENDIAN 50155682Smarkm# define BIG_ENDIAN 4321 50255682Smarkm# endif /* BIG_ENDIAN */ 50355682Smarkm# ifdef WORDS_BIGENDIAN 50455682Smarkm# define BYTE_ORDER BIG_ENDIAN 50555682Smarkm# else /* WORDS_BIGENDIAN */ 50655682Smarkm# define BYTE_ORDER LITTLE_ENDIAN 50755682Smarkm# endif /* WORDS_BIGENDIAN */ 50855682Smarkm#endif /* BYTE_ORDER */ 50955682Smarkm 51055682Smarkm/* Function replacement / compatibility hacks */ 51155682Smarkm 51255682Smarkm#if !defined(HAVE_GETADDRINFO) && (defined(HAVE_OGETADDRINFO) || defined(HAVE_NGETADDRINFO)) 51355682Smarkm# define HAVE_GETADDRINFO 51455682Smarkm#endif 51555682Smarkm 51655682Smarkm#ifndef HAVE_GETOPT_OPTRESET 51755682Smarkm# undef getopt 51855682Smarkm# undef opterr 51955682Smarkm# undef optind 52055682Smarkm# undef optopt 52155682Smarkm# undef optreset 52255682Smarkm# undef optarg 52355682Smarkm# define getopt(ac, av, o) BSDgetopt(ac, av, o) 52455682Smarkm# define opterr BSDopterr 52555682Smarkm# define optind BSDoptind 52655682Smarkm# define optopt BSDoptopt 52755682Smarkm# define optreset BSDoptreset 52855682Smarkm# define optarg BSDoptarg 52955682Smarkm#endif 53055682Smarkm 53155682Smarkm#if defined(BROKEN_GETADDRINFO) && defined(HAVE_GETADDRINFO) 53255682Smarkm# undef HAVE_GETADDRINFO 53355682Smarkm#endif 53455682Smarkm#if defined(BROKEN_GETADDRINFO) && defined(HAVE_FREEADDRINFO) 53555682Smarkm# undef HAVE_FREEADDRINFO 53655682Smarkm#endif 53755682Smarkm#if defined(BROKEN_GETADDRINFO) && defined(HAVE_GAI_STRERROR) 53855682Smarkm# undef HAVE_GAI_STRERROR 53955682Smarkm#endif 54055682Smarkm 54155682Smarkm#if defined(BROKEN_UPDWTMPX) && defined(HAVE_UPDWTMPX) 54255682Smarkm# undef HAVE_UPDWTMPX 54355682Smarkm#endif 54455682Smarkm 54555682Smarkm#if defined(HAVE_OPENLOG_R) && defined(SYSLOG_DATA_INIT) && \ 54655682Smarkm defined(SYSLOG_R_SAFE_IN_SIGHAND) 54755682Smarkm# define DO_LOG_SAFE_IN_SIGHAND 54855682Smarkm#endif 54955682Smarkm 55055682Smarkm#if !defined(HAVE_MEMMOVE) && defined(HAVE_BCOPY) 55155682Smarkm# define memmove(s1, s2, n) bcopy((s2), (s1), (n)) 55255682Smarkm#endif /* !defined(HAVE_MEMMOVE) && defined(HAVE_BCOPY) */ 55355682Smarkm 55455682Smarkm#if defined(HAVE_VHANGUP) && !defined(HAVE_DEV_PTMX) 55555682Smarkm# define USE_VHANGUP 55655682Smarkm#endif /* defined(HAVE_VHANGUP) && !defined(HAVE_DEV_PTMX) */ 55755682Smarkm 558233294Sstas#ifndef GETPGRP_VOID 55955682Smarkm# include <unistd.h> 560233294Sstas# define getpgrp() getpgrp(0) 56155682Smarkm#endif 56255682Smarkm 56355682Smarkm#ifdef USE_BSM_AUDIT 56455682Smarkm# define SSH_AUDIT_EVENTS 56555682Smarkm# define CUSTOM_SSH_AUDIT_EVENTS 56655682Smarkm#endif 56755682Smarkm 56855682Smarkm/* OPENSSL_free() is Free() in versions before OpenSSL 0.9.6 */ 56955682Smarkm#if !defined(OPENSSL_VERSION_NUMBER) || (OPENSSL_VERSION_NUMBER < 0x0090600f) 57055682Smarkm# define OPENSSL_free(x) Free(x) 57155682Smarkm#endif 57255682Smarkm 57355682Smarkm#if !defined(HAVE___func__) && defined(HAVE___FUNCTION__) 57455682Smarkm# define __func__ __FUNCTION__ 57555682Smarkm#elif !defined(HAVE___func__) 57655682Smarkm# define __func__ "" 57755682Smarkm#endif 57855682Smarkm 57955682Smarkm#if defined(KRB5) && !defined(HEIMDAL) 58055682Smarkm# define krb5_get_err_text(context,code) error_message(code) 58155682Smarkm#endif 58255682Smarkm 58355682Smarkm#if defined(SKEYCHALLENGE_4ARG) 58455682Smarkm# define _compat_skeychallenge(a,b,c,d) skeychallenge(a,b,c,d) 58555682Smarkm#else 58655682Smarkm# define _compat_skeychallenge(a,b,c,d) skeychallenge(a,b,c) 58755682Smarkm#endif 58855682Smarkm 58955682Smarkm/* Maximum number of file descriptors available */ 59055682Smarkm#ifdef HAVE_SYSCONF 591# define SSH_SYSFDMAX sysconf(_SC_OPEN_MAX) 592#else 593# define SSH_SYSFDMAX 10000 594#endif 595 596#if defined(__Lynx__) 597 /* 598 * LynxOS defines these in param.h which we do not want to include since 599 * it will also pull in a bunch of kernel definitions. 600 */ 601# define ALIGNBYTES (sizeof(int) - 1) 602# define ALIGN(p) (((unsigned)p + ALIGNBYTES) & ~ALIGNBYTES) 603 /* Missing prototypes on LynxOS */ 604 int snprintf (char *, size_t, const char *, ...); 605 int mkstemp (char *); 606 char *crypt (const char *, const char *); 607 int seteuid (uid_t); 608 int setegid (gid_t); 609 char *mkdtemp (char *); 610 int rresvport_af (int *, sa_family_t); 611 int innetgr (const char *, const char *, const char *, const char *); 612#endif 613 614/* 615 * Define this to use pipes instead of socketpairs for communicating with the 616 * client program. Socketpairs do not seem to work on all systems. 617 * 618 * configure.ac sets this for a few OS's which are known to have problems 619 * but you may need to set it yourself 620 */ 621/* #define USE_PIPES 1 */ 622 623/** 624 ** login recorder definitions 625 **/ 626 627/* FIXME: put default paths back in */ 628#ifndef UTMP_FILE 629# ifdef _PATH_UTMP 630# define UTMP_FILE _PATH_UTMP 631# else 632# ifdef CONF_UTMP_FILE 633# define UTMP_FILE CONF_UTMP_FILE 634# endif 635# endif 636#endif 637#ifndef WTMP_FILE 638# ifdef _PATH_WTMP 639# define WTMP_FILE _PATH_WTMP 640# else 641# ifdef CONF_WTMP_FILE 642# define WTMP_FILE CONF_WTMP_FILE 643# endif 644# endif 645#endif 646/* pick up the user's location for lastlog if given */ 647#ifndef LASTLOG_FILE 648# ifdef _PATH_LASTLOG 649# define LASTLOG_FILE _PATH_LASTLOG 650# else 651# ifdef CONF_LASTLOG_FILE 652# define LASTLOG_FILE CONF_LASTLOG_FILE 653# endif 654# endif 655#endif 656 657#if defined(HAVE_SHADOW_H) && !defined(DISABLE_SHADOW) 658# define USE_SHADOW 659#endif 660 661/* The login() library function in libutil is first choice */ 662#if defined(HAVE_LOGIN) && !defined(DISABLE_LOGIN) 663# define USE_LOGIN 664 665#else 666/* Simply select your favourite login types. */ 667/* Can't do if-else because some systems use several... <sigh> */ 668# if defined(UTMPX_FILE) && !defined(DISABLE_UTMPX) 669# define USE_UTMPX 670# endif 671# if defined(UTMP_FILE) && !defined(DISABLE_UTMP) 672# define USE_UTMP 673# endif 674# if defined(WTMPX_FILE) && !defined(DISABLE_WTMPX) 675# define USE_WTMPX 676# endif 677# if defined(WTMP_FILE) && !defined(DISABLE_WTMP) 678# define USE_WTMP 679# endif 680 681#endif 682 683#ifndef UT_LINESIZE 684# define UT_LINESIZE 8 685#endif 686 687/* I hope that the presence of LASTLOG_FILE is enough to detect this */ 688#if defined(LASTLOG_FILE) && !defined(DISABLE_LASTLOG) 689# define USE_LASTLOG 690#endif 691 692#ifdef HAVE_OSF_SIA 693# ifdef USE_SHADOW 694# undef USE_SHADOW 695# endif 696# define CUSTOM_SYS_AUTH_PASSWD 1 697#endif 698 699#ifdef HAVE_LIBIAF 700# define CUSTOM_SYS_AUTH_PASSWD 1 701#endif 702 703/* HP-UX 11.11 */ 704#ifdef BTMP_FILE 705# define _PATH_BTMP BTMP_FILE 706#endif 707 708#if defined(USE_BTMP) && defined(_PATH_BTMP) 709# define CUSTOM_FAILED_LOGIN 710#endif 711 712/** end of login recorder definitions */ 713 714#ifdef BROKEN_GETGROUPS 715# define getgroups(a,b) ((a)==0 && (b)==NULL ? NGROUPS_MAX : getgroups((a),(b))) 716#endif 717 718#if defined(HAVE_MMAP) && defined(BROKEN_MMAP) 719# undef HAVE_MMAP 720#endif 721 722#ifndef IOV_MAX 723# if defined(_XOPEN_IOV_MAX) 724# define IOV_MAX _XOPEN_IOV_MAX 725# elif defined(DEF_IOV_MAX) 726# define IOV_MAX DEF_IOV_MAX 727# else 728# define IOV_MAX 16 729# endif 730#endif 731 732#endif /* _DEFINES_H */ 733