]> granicus.if.org Git - shadow/blob - lib/defines.h
[svn-upgrade] Integrating new upstream version, shadow (4.0.1)
[shadow] / lib / defines.h
1 /* $Id: defines.h,v 1.20 2001/11/19 09:23:52 kloczek Exp $ */
2 /* some useful defines */
3
4 #ifndef _DEFINES_H_
5 #define _DEFINES_H_
6
7 #define ISDIGIT_LOCALE(c) (IN_CTYPE_DOMAIN (c) && isdigit (c))
8
9 /* Take care of NLS matters.  */
10
11 #if HAVE_LOCALE_H
12 # include <locale.h>
13 #endif
14 #if !HAVE_SETLOCALE
15 # define setlocale(Category, Locale) /* empty */
16 #endif
17
18 #define gettext_noop(String) (String)
19 /* #define gettext_def(String) "#define String" */
20
21 #if ENABLE_NLS
22 # include <libintl.h>
23 # define _(Text) gettext (Text)
24 #else
25 # undef bindtextdomain
26 # define bindtextdomain(Domain, Directory) /* empty */
27 # undef textdomain
28 # define textdomain(Domain) /* empty */
29 # define _(Text) Text
30 #endif
31
32 #if STDC_HEADERS
33 # include <stdlib.h>
34 # include <string.h>
35 #else  /* not STDC_HEADERS */
36 # ifndef HAVE_STRCHR
37 #  define strchr index
38 #  define strrchr rindex
39 # endif
40 char *strchr(), *strrchr(), *strtok();
41 # ifndef HAVE_MEMCPY
42 #  define memcpy(d, s, n) bcopy((s), (d), (n))
43 # endif
44 #endif /* not STDC_HEADERS */
45
46 #if HAVE_ERRNO_H
47 # include <errno.h>
48 #endif
49
50 /* Solaris 2.4 defines __SVR4, but not SVR4 -j. */
51
52 #ifdef __SVR4
53 # ifndef SVR4
54 #  define SVR4 __SVR4
55 # endif
56 #endif
57
58 #include <sys/stat.h>
59 #include <sys/types.h>
60 #if HAVE_SYS_WAIT_H
61 # include <sys/wait.h>
62 #endif
63 #ifndef WEXITSTATUS
64 # define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8)
65 #endif
66 #ifndef WIFEXITED
67 # define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
68 #endif
69
70 #if HAVE_UNISTD_H
71 # include <unistd.h>
72 #endif
73
74 #if TIME_WITH_SYS_TIME
75 # include <sys/time.h>
76 # include <time.h>
77 #else  /* not TIME_WITH_SYS_TIME */
78 # if HAVE_SYS_TIME_H
79 #  include <sys/time.h>
80 # else
81 #  include <time.h>
82 # endif
83 #endif /* not TIME_WITH_SYS_TIME */
84
85 #ifdef HAVE_MEMSET
86 # define memzero(ptr, size) memset((void *)(ptr), 0, (size))
87 #else
88 # define memzero(ptr, size) bzero((char *)(ptr), (size))
89 #endif
90 #define strzero(s) memzero(s, strlen(s))  /* warning: evaluates twice */
91
92 #ifdef HAVE_DIRENT_H  /* DIR_SYSV */
93 # include <dirent.h>
94 # define DIRECT dirent
95 #else
96 # ifdef HAVE_SYS_NDIR_H  /* DIR_XENIX */
97 #  include <sys/ndir.h>
98 # endif
99 # ifdef HAVE_SYS_DIR_H  /* DIR_??? */
100 #  include <sys/dir.h>
101 # endif
102 # ifdef HAVE_NDIR_H  /* DIR_BSD */
103 #  include <ndir.h>
104 # endif
105 # define DIRECT direct
106 #endif
107
108 #ifdef SHADOWPWD
109 /*
110  * Possible cases:
111  * - /usr/include/shadow.h exists and includes the shadow group stuff.
112  * - /usr/include/shadow.h exists, but we use our own gshadow.h.
113  * - /usr/include/shadow.h doesn't exist, use our own shadow.h and gshadow.h.
114  */
115 #if HAVE_SHADOW_H
116 #include <shadow.h>
117 #if defined(SHADOWGRP) && !defined(GSHADOW)
118 #include "gshadow_.h"
119 #endif
120 #else  /* not HAVE_SHADOW_H */
121 #include "shadow_.h"
122 #ifdef SHADOWGRP
123 #include "gshadow_.h"
124 #endif
125 #endif  /* not HAVE_SHADOW_H */
126 #endif  /* SHADOWPWD */
127
128 #include <limits.h>
129
130 #ifndef NGROUPS_MAX
131 #ifdef  NGROUPS
132 #define NGROUPS_MAX     NGROUPS
133 #else
134 #define NGROUPS_MAX     64
135 #endif
136 #endif
137
138 #ifdef USE_SYSLOG
139 #include <syslog.h>
140
141 #ifndef LOG_WARN
142 #define LOG_WARN LOG_WARNING
143 #endif
144
145 /* LOG_NOWAIT is deprecated */
146 #ifndef LOG_NOWAIT
147 #define LOG_NOWAIT 0
148 #endif
149
150 /* LOG_AUTH is deprecated, use LOG_AUTHPRIV instead */
151 #ifndef LOG_AUTHPRIV
152 #define LOG_AUTHPRIV LOG_AUTH
153 #endif
154
155 /* cleaner than lots of #ifdefs everywhere - use this as follows:
156    SYSLOG((LOG_CRIT, "user %s cracked root", user)); */
157 #if HAVE_SETLOCALE
158 /* Temporarily set LC_TIME to "C" to avoid strange dates in syslog.
159    This is a workaround for a more general syslog(d) design problem -
160    syslogd should log the current system time for each event, and not
161    trust the formatted time received from the unix domain (or worse,
162    UDP) socket.  -MM */
163 #define SYSLOG(x)                                                       \
164         do {                                                            \
165                 char *saved_locale = setlocale(LC_ALL, NULL);           \
166                 if (saved_locale)                                       \
167                         saved_locale = strdup(saved_locale);            \
168                 if (saved_locale)                                       \
169                         setlocale(LC_TIME, "C");                        \
170                 syslog x ;                                              \
171                 if (saved_locale) {                                     \
172                         setlocale(LC_ALL, saved_locale);                \
173                         free(saved_locale);                             \
174                 }                                                       \
175         } while (0)
176 #else  /* !HAVE_SETLOCALE */
177 #define SYSLOG(x) syslog x
178 #endif /* !HAVE_SETLOCALE */
179
180 #else  /* !USE_SYSLOG */
181
182 #define SYSLOG(x)  /* empty */
183 #define openlog(a,b,c)  /* empty */
184 #define closelog()  /* empty */
185
186 #endif  /* !USE_SYSLOG */
187
188 /* The default syslog settings can now be changed here,
189    in just one place.  */
190
191 #ifndef SYSLOG_OPTIONS
192 /* #define SYSLOG_OPTIONS (LOG_PID | LOG_CONS | LOG_NOWAIT) */
193 #define SYSLOG_OPTIONS (LOG_PID)
194 #endif
195
196 #ifndef SYSLOG_FACILITY
197 #define SYSLOG_FACILITY LOG_AUTHPRIV
198 #endif
199
200 #define OPENLOG(progname) openlog(progname, SYSLOG_OPTIONS, SYSLOG_FACILITY)
201
202 #ifndef F_OK
203 # define F_OK 0
204 # define X_OK 1
205 # define W_OK 2
206 # define R_OK 4
207 #endif
208
209 #ifndef SEEK_SET
210 # define SEEK_SET 0
211 # define SEEK_CUR 1
212 # define SEEK_END 2
213 #endif
214
215 #ifdef STAT_MACROS_BROKEN
216 # define S_ISDIR(x) ((x) & S_IFMT) == S_IFDIR)
217 # define S_ISREG(x) ((x) & S_IFMT) == S_IFREG)
218 # ifdef S_IFLNK
219 #  define S_ISLNK(x) ((x) & S_IFMT) == S_IFLNK)
220 # endif
221 #endif
222
223 #ifndef S_ISLNK
224 #define S_ISLNK(x) (0)
225 #endif
226
227 #if HAVE_LCHOWN
228 #define LCHOWN lchown
229 #else
230 #define LCHOWN chown
231 #endif
232
233 #if HAVE_LSTAT
234 #define LSTAT lstat
235 #else
236 #define LSTAT stat
237 #endif
238
239 #if HAVE_TERMIOS_H
240 # include <termios.h>
241 # define STTY(fd, termio) tcsetattr(fd, TCSANOW, termio)
242 # define GTTY(fd, termio) tcgetattr(fd, termio)
243 # define TERMIO struct termios
244 # define USE_TERMIOS
245 #else  /* assumed HAVE_TERMIO_H */
246 # include <sys/ioctl.h>
247 # include <termio.h>
248 # define STTY(fd, termio) ioctl(fd, TCSETA, termio)
249 # define GTTY(fd, termio) ioctl(fd, TCGETA, termio)
250 # define TEMRIO struct termio
251 # define USE_TERMIO
252 #endif
253
254 /*
255  * Password aging constants
256  *
257  * DAY - seconds / day
258  * WEEK - seconds / week
259  * SCALE - seconds / aging unit
260  */
261
262 /* Solaris defines this in shadow.h */
263 #ifndef DAY
264 #define DAY (24L*3600L)
265 #endif
266
267 #define WEEK (7*DAY)
268
269 #ifdef ITI_AGING
270 #define SCALE 1
271 #else
272 #define SCALE DAY
273 #endif
274
275 /* Copy string pointed by B to array A with size checking.  It was originally
276    in lmain.c but is _very_ useful elsewhere.  Some setuid root programs with
277    very sloppy coding used to assume that BUFSIZ will always be enough...  */
278
279                                         /* danger - side effects */
280 #define STRFCPY(A,B) \
281         (strncpy((A), (B), sizeof(A) - 1), (A)[sizeof(A) - 1] = '\0')
282
283 /* get rid of a few ugly repeated #ifdefs in pwent.c and grent.c */
284 /* XXX - this is ugly too, configure should test it and not check for
285    any hardcoded system names, if possible.  --marekm */
286 #if defined(SVR4) || defined(AIX) || defined(__linux__)
287 #define SETXXENT_TYPE void
288 #define SETXXENT_RET(x) return
289 #define SETXXENT_TEST(x) x; if (0) /* compiler should optimize this away */
290 #else
291 #define SETXXENT_TYPE int
292 #define SETXXENT_RET(x) return(x)
293 #define SETXXENT_TEST(x) if (x)
294 #endif
295
296 #ifndef PASSWD_FILE
297 #define PASSWD_FILE "/etc/passwd"
298 #endif
299
300 #ifndef GROUP_FILE
301 #define GROUP_FILE "/etc/group"
302 #endif
303
304 #ifdef SHADOWPWD
305 #ifndef SHADOW_FILE
306 #define SHADOW_FILE "/etc/shadow"
307 #endif
308 #endif
309
310 #ifdef SHADOWGRP
311 #ifndef SGROUP_FILE
312 #define SGROUP_FILE "/etc/gshadow"
313 #endif
314 #endif
315
316 #define PASSWD_PAG_FILE  PASSWD_FILE ".pag"
317 #define GROUP_PAG_FILE   GROUP_FILE  ".pag"
318 #define SHADOW_PAG_FILE  SHADOW_FILE ".pag"
319 #define SGROUP_PAG_FILE  SGROUP_FILE ".pag"
320
321 #ifndef NULL
322 #define NULL ((void *) 0)
323 #endif
324
325 #ifdef sun  /* hacks for compiling on SunOS */
326 # ifndef SOLARIS
327 extern int fputs();
328 extern char *strdup();
329 extern char *strerror();
330 # endif
331 #endif
332
333 #ifndef HAVE_SNPRINTF
334 #include "snprintf.h"
335 #endif
336
337 /*
338  * string to use for the pw_passwd field in /etc/passwd when using
339  * shadow passwords - most systems use "x" but there are a few
340  * exceptions, so it can be changed here if necessary.  --marekm
341  */
342 #ifndef SHADOW_PASSWD_STRING
343 #define SHADOW_PASSWD_STRING "x"
344 #endif
345
346 #endif  /* _DEFINES_H_ */