xref: /titanic_44/usr/src/cmd/ssh/include/defines.h (revision 0cd13cbfb4270b840b4bd22ec5f673b2b6a2c02b)
1 /*
2  * Copyright (c) 1999-2003 Damien Miller.  All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
14  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
15  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
16  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
17  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
18  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
19  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
20  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
22  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23  */
24 /*
25  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
26  * Use is subject to license terms.
27  */
28 
29 #ifndef	_DEFINES_H
30 #define	_DEFINES_H
31 
32 #pragma ident	"%Z%%M%	%I%	%E% SMI"
33 
34 #ifdef __cplusplus
35 extern "C" {
36 #endif
37 
38 /* $Id: defines.h,v 1.96 2002/09/26 00:38:48 tim Exp $ */
39 
40 
41 /* Constants */
42 #ifndef SHUT_RDWR
43 enum
44 {
45 	SHUT_RD = 0,	/* No more receptions.  */
46 	SHUT_WR,	/* No more transmissions.  */
47 	SHUT_RDWR	/* No more receptions or transmissions. */
48 };
49 #define	SHUT_RD   SHUT_RD
50 #define	SHUT_WR   SHUT_WR
51 #define	SHUT_RDWR SHUT_RDWR
52 #endif
53 
54 #ifndef IPTOS_LOWDELAY
55 #define	IPTOS_LOWDELAY		0x10
56 #define	IPTOS_THROUGHPUT	0x08
57 #define	IPTOS_RELIABILITY	0x04
58 #define	IPTOS_LOWCOST		0x02
59 #define	IPTOS_MINCOST		IPTOS_LOWCOST
60 #endif /* IPTOS_LOWDELAY */
61 
62 #ifndef MAXPATHLEN
63 #ifdef PATH_MAX
64 #define	MAXPATHLEN PATH_MAX
65 #else /* PATH_MAX */
66 #define	MAXPATHLEN 64 /* Should be safe */
67 #endif /* PATH_MAX */
68 #endif /* MAXPATHLEN */
69 
70 #ifndef STDIN_FILENO
71 #define	STDIN_FILENO    0
72 #endif
73 
74 #ifndef STDOUT_FILENO
75 #define	STDOUT_FILENO   1
76 #endif
77 
78 #ifndef STDERR_FILENO
79 #define	STDERR_FILENO   2
80 #endif
81 
82 /* Disable groupaccess if NGROUPS_UMAX, NGROUPS_MAX and NGROUPS are not set */
83 #ifndef NGROUPS_UMAX
84 #ifdef NGROUPS_MAX
85 #define	NGROUPS_UMAX NGROUPS_MAX
86 #elif defined(NGROUPS)
87 #define	NGROUPS_UMAX NGROUPS
88 #else
89 #define	NGROUPS_UMAX 0
90 #endif
91 #endif
92 
93 #ifndef O_NONBLOCK	/* Non Blocking Open */
94 #define	O_NONBLOCK	00004
95 #endif
96 
97 #ifndef S_ISDIR
98 #define	S_ISDIR(mode)	(((mode) & (_S_IFMT)) == (_S_IFDIR))
99 #endif /* S_ISDIR */
100 
101 #ifndef S_ISREG
102 #define	S_ISREG(mode)	(((mode) & (_S_IFMT)) == (_S_IFREG))
103 #endif /* S_ISREG */
104 
105 #ifndef S_ISLNK
106 #define	S_ISLNK(mode)	(((mode) & S_IFMT) == S_IFLNK)
107 #endif /* S_ISLNK */
108 
109 #ifndef S_IXUSR
110 #define	S_IXUSR			0000100	/* execute/search permission, */
111 #define	S_IXGRP			0000010	/* execute/search permission, */
112 #define	S_IXOTH			0000001	/* execute/search permission, */
113 #define	_S_IWUSR		0000200	/* write permission, */
114 #define	S_IWUSR			_S_IWUSR /* write permission, owner */
115 #define	S_IWGRP			0000020	/* write permission, group */
116 #define	S_IWOTH			0000002	/* write permission, other */
117 #define	S_IRUSR			0000400	/* read permission, owner */
118 #define	S_IRGRP			0000040	/* read permission, group */
119 #define	S_IROTH			0000004	/* read permission, other */
120 #define	S_IRWXU			0000700	/* read, write, execute */
121 #define	S_IRWXG			0000070	/* read, write, execute */
122 #define	S_IRWXO			0000007	/* read, write, execute */
123 #endif /* S_IXUSR */
124 
125 #if !defined(MAP_ANON) && defined(MAP_ANONYMOUS)
126 #define	MAP_ANON MAP_ANONYMOUS
127 #endif
128 
129 #ifndef MAP_FAILED
130 #define	MAP_FAILED ((void *)-1)
131 #endif
132 
133 /* *-*-nto-qnx doesn't define this constant in the system headers */
134 #ifdef MISSING_NFDBITS
135 #define	NFDBITS (8 * sizeof (unsigned long))
136 #endif
137 
138 /*
139  * SCO Open Server 3 has INADDR_LOOPBACK defined in rpc/rpc.h but including
140  * rpc/rpc.h breaks Solaris 6
141  */
142 #ifndef INADDR_LOOPBACK
143 #define	INADDR_LOOPBACK ((ulong_t)0x7f000001)
144 #endif
145 
146 /* Types */
147 
148 /*
149  * If sys/types.h does not supply intXX_t, supply them ourselves (or die trying)
150  */
151 #ifndef HAVE_U_INT
152 /* for now, we can't remove u_int without changing almost all other files */
153 /* CSTYLED */
154 typedef unsigned int u_int;
155 #endif
156 
157 #ifndef HAVE_INTXX_T
158 #if (SIZEOF_CHAR == 1)
159 typedef char int8_t;
160 #else
161 #error "8 bit int type not found."
162 #endif
163 #if (SIZEOF_SHORT_INT == 2)
164 typedef short int int16_t;
165 #else
166 #ifdef _UNICOS
167 #if (SIZEOF_SHORT_INT == 4)
168 typedef short int16_t;
169 #else
170 typedef long  int16_t;
171 #endif
172 #else
173 #error "16 bit int type not found."
174 #endif /* _UNICOS */
175 #endif
176 #if (SIZEOF_INT == 4)
177 typedef int int32_t;
178 #else
179 #ifdef _UNICOS
180 typedef long  int32_t;
181 #else
182 #error "32 bit int type not found."
183 #endif /* _UNICOS */
184 #endif
185 #endif
186 
187 /* If sys/types.h does not supply u_intXX_t, supply them ourselves */
188 #ifndef HAVE_U_INTXX_T
189 #ifdef HAVE_UINTXX_T
190 typedef uint8_t u_int8_t;
191 typedef uint16_t u_int16_t;
192 typedef uint32_t u_int32_t;
193 #define	HAVE_U_INTXX_T 1
194 #else
195 #if (SIZEOF_CHAR == 1)
196 typedef unsigned char u_int8_t;
197 #else
198 #error "8 bit int type not found."
199 #endif
200 #if (SIZEOF_SHORT_INT == 2)
201 typedef unsigned short int u_int16_t;
202 #else
203 #ifdef _UNICOS
204 #if (SIZEOF_SHORT_INT == 4)
205 typedef unsigned short u_int16_t;
206 #else
207 typedef unsigned long  u_int16_t;
208 #endif
209 #else
210 #error "16 bit int type not found."
211 #endif
212 #endif
213 #if (SIZEOF_INT == 4)
214 typedef unsigned int u_int32_t;
215 #else
216 #ifdef _UNICOS
217 typedef unsigned long  u_int32_t;
218 #else
219 #error "32 bit int type not found."
220 #endif
221 #endif
222 #endif
223 #define	__BIT_TYPES_DEFINED__
224 #endif
225 
226 /* 64-bit types */
227 #ifndef HAVE_INT64_T
228 #if (SIZEOF_LONG_INT == 8)
229 typedef long int int64_t;
230 #define	HAVE_INT64_T 1
231 #else
232 #if (SIZEOF_LONG_LONG_INT == 8)
233 typedef long long int int64_t;
234 #define	HAVE_INT64_T 1
235 #endif
236 #endif
237 #endif
238 
239 #ifndef HAVE_U_INT64_T
240 #if (SIZEOF_LONG_INT == 8)
241 typedef unsigned long int u_int64_t;
242 #define	HAVE_U_INT64_T 1
243 #else
244 #if (SIZEOF_LONG_LONG_INT == 8)
245 typedef unsigned long long int u_int64_t;
246 #define	HAVE_U_INT64_T 1
247 #endif
248 #endif
249 #endif
250 
251 #if !defined(HAVE_LONG_LONG_INT) && (SIZEOF_LONG_LONG_INT == 8)
252 #define	HAVE_LONG_LONG_INT 1
253 #endif
254 
255 #ifndef HAVE_U_CHAR
256 /* for now, we can't remove u_char without changing almost all other files */
257 /* CSTYLED */
258 typedef unsigned char u_char;
259 #define	HAVE_U_CHAR
260 #endif /* HAVE_U_CHAR */
261 
262 #ifndef SIZE_T_MAX
263 #define	SIZE_T_MAX ULONG_MAX
264 #endif /* SIZE_T_MAX */
265 
266 #ifndef HAVE_SIZE_T
267 typedef unsigned int size_t;
268 #define	HAVE_SIZE_T
269 #endif /* HAVE_SIZE_T */
270 
271 #ifndef HAVE_SSIZE_T
272 typedef int ssize_t;
273 #define	HAVE_SSIZE_T
274 #endif /* HAVE_SSIZE_T */
275 
276 #ifndef HAVE_CLOCK_T
277 typedef long clock_t;
278 #define	HAVE_CLOCK_T
279 #endif /* HAVE_CLOCK_T */
280 
281 #ifndef HAVE_SA_FAMILY_T
282 typedef int sa_family_t;
283 #define	HAVE_SA_FAMILY_T
284 #endif /* HAVE_SA_FAMILY_T */
285 
286 #ifndef HAVE_PID_T
287 typedef int pid_t;
288 #define	HAVE_PID_T
289 #endif /* HAVE_PID_T */
290 
291 #ifndef HAVE_SIG_ATOMIC_T
292 typedef int sig_atomic_t;
293 #define	HAVE_SIG_ATOMIC_T
294 #endif /* HAVE_SIG_ATOMIC_T */
295 
296 #ifndef HAVE_MODE_T
297 typedef int mode_t;
298 #define	HAVE_MODE_T
299 #endif /* HAVE_MODE_T */
300 
301 #if !defined(HAVE_SS_FAMILY_IN_SS) && defined(HAVE___SS_FAMILY_IN_SS)
302 #define	ss_family __ss_family
303 #endif /* !defined(HAVE_SS_FAMILY_IN_SS) && defined(HAVE_SA_FAMILY_IN_SS) */
304 
305 #ifndef HAVE_SYS_UN_H
306 struct	sockaddr_un {
307 	short	sun_family;		/* AF_UNIX */
308 	char	sun_path[108];		/* path name (gag) */
309 };
310 #endif /* HAVE_SYS_UN_H */
311 
312 #if defined(BROKEN_SYS_TERMIO_H) && !defined(_STRUCT_WINSIZE)
313 #define	_STRUCT_WINSIZE
314 struct winsize {
315 	unsigned short ws_row;		/* rows, in characters */
316 	unsigned short ws_col;		/* columns, in character */
317 	unsigned short ws_xpixel;	/* horizontal size, pixels */
318 	unsigned short ws_ypixel;	/* vertical size, pixels */
319 };
320 #endif
321 
322 /* *-*-nto-qnx does not define this type in the system headers */
323 #ifdef MISSING_FD_MASK
324 typedef unsigned long int fd_mask;
325 #endif
326 
327 /* Paths */
328 
329 #ifndef _PATH_BSHELL
330 #define	_PATH_BSHELL "/bin/sh"
331 #endif
332 
333 #ifndef _PATH_CSHELL
334 #define	_PATH_CSHELL "/bin/csh"
335 #endif
336 
337 #ifndef _PATH_SHELLS
338 #define	_PATH_SHELLS "/etc/shells"
339 #endif
340 
341 #ifdef USER_PATH
342 #ifdef _PATH_STDPATH
343 #undef _PATH_STDPATH
344 #endif
345 #define	_PATH_STDPATH USER_PATH
346 #endif
347 
348 #ifndef _PATH_STDPATH
349 #define	_PATH_STDPATH "/usr/bin"
350 #endif
351 
352 #ifndef _PATH_DEVNULL
353 #define	_PATH_DEVNULL "/dev/null"
354 #endif
355 
356 #ifndef MAIL_DIRECTORY
357 #define	MAIL_DIRECTORY "/var/spool/mail"
358 #endif
359 
360 #ifndef MAILDIR
361 #define	MAILDIR MAIL_DIRECTORY
362 #endif
363 
364 #if !defined(_PATH_MAILDIR) && defined(MAILDIR)
365 #define	_PATH_MAILDIR MAILDIR
366 #endif /* !defined(_PATH_MAILDIR) && defined(MAILDIR) */
367 
368 #ifndef _PATH_RSH
369 #ifdef RSH_PATH
370 #define	_PATH_RSH RSH_PATH
371 #else /* RSH_PATH */
372 #define	_PATH_RSH "/usr/bin/rsh"
373 #endif /* RSH_PATH */
374 #endif /* _PATH_RSH */
375 
376 #ifndef _PATH_NOLOGIN
377 #define	_PATH_NOLOGIN "/etc/nologin"
378 #endif
379 
380 /* Define this to be the path of the xauth program. */
381 #ifdef XAUTH_PATH
382 #define	_PATH_XAUTH XAUTH_PATH
383 #endif /* XAUTH_PATH */
384 
385 /* derived from XF4/xc/lib/dps/Xlibnet.h */
386 #ifndef X_UNIX_PATH
387 #ifdef __hpux
388 #define	X_UNIX_PATH "/var/spool/sockets/X11/%u"
389 #else
390 #define	X_UNIX_PATH "/tmp/.X11-unix/X%u"
391 #endif
392 #endif /* X_UNIX_PATH */
393 
394 #define	_PATH_UNIX_X X_UNIX_PATH
395 
396 #ifndef _PATH_TTY
397 #define	_PATH_TTY "/dev/tty"
398 #endif
399 
400 /* Macros */
401 
402 #if defined(HAVE_LOGIN_GETCAPBOOL) && defined(HAVE_LOGIN_CAP_H)
403 #define	HAVE_LOGIN_CAP
404 #endif
405 
406 #ifndef MAX
407 #define	MAX(a, b) (((a) > (b)) ? (a) : (b))
408 #define	MIN(a, b) (((a) < (b)) ? (a) : (b))
409 #endif
410 
411 #ifndef roundup
412 #define	roundup(x, y)   ((((x) + ((y) - 1)) / (y)) * (y))
413 #endif
414 
415 #ifndef timersub
416 #define	timersub(a, b, result)						\
417 	do {								\
418 		(result)->tv_sec = (a)->tv_sec - (b)->tv_sec;		\
419 		(result)->tv_usec = (a)->tv_usec - (b)->tv_usec;	\
420 		if ((result)->tv_usec < 0) {				\
421 			--(result)->tv_sec;				\
422 			(result)->tv_usec += 1000000;			\
423 		}							\
424 	} while (0)
425 #endif
426 
427 #ifndef __P
428 #define	__P(x) x
429 #endif
430 
431 #if !defined(IN6_IS_ADDR_V4MAPPED)
432 #define	IN6_IS_ADDR_V4MAPPED(a) \
433 	((((u_int32_t *)(a))[0] == 0) && (((u_int32_t *)(a))[1] == 0) && \
434 	(((u_int32_t *)(a))[2] == htonl(0xffff)))
435 #endif /* !defined(IN6_IS_ADDR_V4MAPPED) */
436 
437 #if !defined(__GNUC__) || (__GNUC__ < 2)
438 #define	__attribute__(x)
439 #endif /* !defined(__GNUC__) || (__GNUC__ < 2) */
440 
441 #if !defined(HAVE_ATTRIBUTE__BOUNDED__) && !defined(__bounded__)
442 #define	__bounded__(x, y, z)
443 #endif
444 
445 /* *-*-nto-qnx doesn't define this macro in the system headers */
446 #ifdef MISSING_HOWMANY
447 #define	howmany(x, y)	(((x) + ((y) - 1)) / (y))
448 #endif
449 
450 #ifndef OSSH_ALIGNBYTES
451 #define	OSSH_ALIGNBYTES	(sizeof (int) - 1)
452 #endif
453 
454 #ifndef __CMSG_ALIGN
455 #define	__CMSG_ALIGN(p) (((uint_t)(p) + OSSH_ALIGNBYTES) &~ OSSH_ALIGNBYTES)
456 #endif
457 
458 /* Length of the contents of a control message of length len */
459 #ifndef CMSG_LEN
460 #define	CMSG_LEN(len)	(__CMSG_ALIGN(sizeof (struct cmsghdr)) + (len))
461 #endif
462 
463 /* Length of the space taken up by a padded control message of length len */
464 #ifndef CMSG_SPACE
465 #define	CMSG_SPACE(len)	\
466 	(__CMSG_ALIGN(sizeof (struct cmsghdr)) + __CMSG_ALIGN(len))
467 #endif
468 
469 /* Function replacement / compatibility hacks */
470 
471 #if !defined(HAVE_GETADDRINFO) && (defined(HAVE_OGETADDRINFO) || \
472 	defined(HAVE_NGETADDRINFO))
473 #define	HAVE_GETADDRINFO
474 #endif
475 
476 #ifndef HAVE_GETOPT_OPTRESET
477 #undef getopt
478 #undef opterr
479 #undef optind
480 #undef optopt
481 #undef optreset
482 #undef optarg
483 #define	getopt(ac, av, o)	BSDgetopt(ac, av, o)
484 #define	opterr			BSDopterr
485 #define	optind			BSDoptind
486 #define	optopt			BSDoptopt
487 #define	optreset		BSDoptreset
488 #define	optarg			BSDoptarg
489 #endif
490 
491 /* In older versions of libpam, pam_strerror takes a single argument */
492 #ifdef HAVE_OLD_PAM
493 #define	PAM_STRERROR(a, b) pam_strerror((b))
494 #else
495 #define	PAM_STRERROR(a, b) pam_strerror((a), (b))
496 #endif
497 
498 #ifdef PAM_SUN_CODEBASE
499 #define	PAM_MSG_MEMBER(msg, n, member) ((*(msg))[(n)].member)
500 #else
501 #define	PAM_MSG_MEMBER(msg, n, member) ((msg)[(n)]->member)
502 #endif
503 
504 #if defined(BROKEN_GETADDRINFO) && defined(HAVE_GETADDRINFO)
505 #undef HAVE_GETADDRINFO
506 #endif
507 
508 #if defined(BROKEN_GETADDRINFO) && defined(HAVE_FREEADDRINFO)
509 #undef HAVE_FREEADDRINFO
510 #endif
511 
512 #if defined(BROKEN_GETADDRINFO) && defined(HAVE_GAI_STRERROR)
513 #undef HAVE_GAI_STRERROR
514 #endif
515 
516 #if !defined(HAVE_MEMMOVE) && defined(HAVE_BCOPY)
517 #define	memmove(s1, s2, n) bcopy((s2), (s1), (n))
518 #endif /* !defined(HAVE_MEMMOVE) && defined(HAVE_BCOPY) */
519 
520 #if defined(HAVE_VHANGUP) && !defined(HAVE_DEV_PTMX)
521 #define	USE_VHANGUP
522 #endif /* defined(HAVE_VHANGUP) && !defined(HAVE_DEV_PTMX) */
523 
524 #ifndef GETPGRP_VOID
525 #define	getpgrp() getpgrp(0)
526 #endif
527 
528 /* OPENSSL_free() is Free() in versions before OpenSSL 0.9.6 */
529 #if !defined(OPENSSL_VERSION_NUMBER) || (OPENSSL_VERSION_NUMBER < 0x0090600f)
530 #define	OPENSSL_free(x) Free(x)
531 #endif
532 
533 #if !defined(HAVE___func__) && defined(HAVE___FUNCTION__)
534 #define	__func__ __FUNCTION__
535 #elif !defined(HAVE___func__)
536 #define	__func__ ""
537 #endif
538 
539 /*
540  * Define this to use pipes instead of socketpairs for communicating with the
541  * client program.  Socketpairs do not seem to work on all systems.
542  *
543  * configure.ac sets this for a few OS's which are known to have problems
544  * but you may need to set it yourself
545  */
546 /* #define	USE_PIPES 1 */
547 
548 /*
549  * login recorder definitions
550  */
551 
552 /* FIXME: put default paths back in */
553 #ifndef UTMP_FILE
554 #ifdef _PATH_UTMP
555 #define	UTMP_FILE _PATH_UTMP
556 #else
557 #ifdef CONF_UTMP_FILE
558 #define	UTMP_FILE CONF_UTMP_FILE
559 #endif
560 #endif
561 #endif
562 
563 #ifndef WTMP_FILE
564 #ifdef _PATH_WTMP
565 #define	WTMP_FILE _PATH_WTMP
566 #else
567 #ifdef CONF_WTMP_FILE
568 #define	WTMP_FILE CONF_WTMP_FILE
569 #endif
570 #endif
571 #endif
572 
573 /* pick up the user's location for lastlog if given */
574 #ifndef LASTLOG_FILE
575 #ifdef _PATH_LASTLOG
576 #define	LASTLOG_FILE _PATH_LASTLOG
577 #else
578 #ifdef CONF_LASTLOG_FILE
579 #define	LASTLOG_FILE CONF_LASTLOG_FILE
580 #endif
581 #endif
582 #endif
583 
584 /* The login() library function in libutil is first choice */
585 #if defined(HAVE_LOGIN) && !defined(DISABLE_LOGIN)
586 #define	USE_LOGIN
587 #else
588 /* Simply select your favourite login types. */
589 /* Can't do if-else because some systems use several... <sigh> */
590 #if defined(UTMPX_FILE) && !defined(DISABLE_UTMPX)
591 #define	USE_UTMPX
592 #endif
593 #if defined(UTMP_FILE) && !defined(DISABLE_UTMP)
594 #define	USE_UTMP
595 #endif
596 #if defined(WTMPX_FILE) && !defined(DISABLE_WTMPX)
597 #define	USE_WTMPX
598 #endif
599 #if defined(WTMP_FILE) && !defined(DISABLE_WTMP)
600 #define	USE_WTMP
601 #endif
602 #endif
603 
604 /* I hope that the presence of LASTLOG_FILE is enough to detect this */
605 #if defined(LASTLOG_FILE) && !defined(DISABLE_LASTLOG)
606 #define	USE_LASTLOG
607 #endif
608 
609 /* end of login recorder definitions */
610 
611 #ifdef __cplusplus
612 }
613 #endif
614 
615 #endif /* _DEFINES_H */
616