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