1/* Copyright 1993,1994 by Paul Vixie
2 * All rights reserved
3 */
4
5/*
6 * Copyright (c) 1997 by Internet Software Consortium
7 *
8 * Permission to use, copy, modify, and distribute this software for any
9 * purpose with or without fee is hereby granted, provided that the above
10 * copyright notice and this permission notice appear in all copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
13 * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
14 * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
15 * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
18 * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
19 * SOFTWARE.
20 */
21
22/* reorder these #include's at your peril */
23
24#include <sys/param.h>
25#include <sys/types.h>
26#include <sys/time.h>
27#include <sys/wait.h>
28#include <sys/fcntl.h>
29#include <sys/file.h>
30#include <sys/stat.h>
31
32#include <bitstring.h>
33#include <ctype.h>
34#include <dirent.h>
35#include <err.h>
36#include <errno.h>
37#include <fcntl.h>
38#include <grp.h>
39#include <libutil.h>
40#include <locale.h>
41#include <pwd.h>
42#include <signal.h>
43#include <stdarg.h>
44#include <stdio.h>
45#include <stdlib.h>
46#include <string.h>
47#include <time.h>
48#include <unistd.h>
49#include <utime.h>
50
51#if defined(SYSLOG)
52# include <syslog.h>
53#endif
54
55#if (defined(BSD)) && (BSD >= 199103) || defined(__linux) || defined(AIX)
56# include <paths.h>
57#endif /*BSD*/
58
59#if !defined(_PATH_SENDMAIL)
60# define _PATH_SENDMAIL "/usr/lib/sendmail"
61#endif /*SENDMAIL*/
62
63#if defined(__bsdi__) && (_BSDI_VERSION > 199510)
64#include <login_cap.h>
65#endif /* __bsdi__ */
66
67#define DIR_T	struct dirent
68#define WAIT_T	int
69#define SIG_T	sig_t
70#define TIME_T	time_t
71#define PID_T	pid_t
72
73#ifndef TZNAME_ALREADY_DEFINED
74extern char *tzname[2];
75#endif
76#define TZONE(tm) tzname[(tm).tm_isdst]
77
78#if (BSD >= 198606)
79# define HAVE_FCHOWN
80# define HAVE_FCHMOD
81#endif
82
83#if (BSD >= 199103)
84# define HAVE_SAVED_UIDS
85#endif
86
87#define MY_UID(pw) getuid()
88#define MY_GID(pw) getgid()
89
90#if !defined(AIX) && !defined(UNICOS)
91# define SYS_TIME_H 1
92#else
93# define SYS_TIME_H 0
94#endif
95
96/* getopt() isn't part of POSIX.  some systems define it in <stdlib.h> anyway.
97 * of those that do, some complain that our definition is different and some
98 * do not.  to add to the misery and confusion, some systems define getopt()
99 * in ways that we cannot predict or comprehend, yet do not define the adjunct
100 * external variables needed for the interface.
101 */
102#if (!defined(BSD) || (BSD < 198911))
103int	getopt(int, char * const *, const char *);
104#endif
105
106#if (!defined(BSD) || (BSD < 199103))
107extern	char *optarg;
108extern	int optind, opterr, optopt;
109#endif
110
111/* digital unix needs this but does not give us a way to identify it.
112 */
113extern	int		flock(int, int);
114
115/* not all systems who provice flock() provide these definitions.
116 */
117#ifndef LOCK_SH
118# define LOCK_SH 1
119#endif
120#ifndef LOCK_EX
121# define LOCK_EX 2
122#endif
123#ifndef LOCK_NB
124# define LOCK_NB 4
125#endif
126#ifndef LOCK_UN
127# define LOCK_UN 8
128#endif
129