Imported Debian patch 1.6.9p11-1
[debian/sudo] / configure.in
1 dnl
2 dnl Process this file with GNU autoconf to produce a configure script.
3 dnl $Sudo: configure.in,v 1.413.2.36 2008/01/03 16:05:42 millert Exp $
4 dnl
5 dnl Copyright (c) 1994-1996,1998-2007 Todd C. Miller <Todd.Miller@courtesan.com>
6 dnl
7 AC_INIT([sudo], [1.6.9])
8 AC_CONFIG_HEADER(config.h pathnames.h)
9 dnl
10 dnl This won't work before AC_INIT
11 dnl
12 AC_MSG_NOTICE([Configuring Sudo version 1.6.9])
13 dnl
14 dnl Variables that get substituted in the Makefile and man pages
15 dnl
16 AC_SUBST(LIBTOOL)
17 AC_SUBST(CFLAGS)
18 AC_SUBST(PROGS)
19 AC_SUBST(CPPFLAGS)
20 AC_SUBST(LDFLAGS)
21 AC_SUBST(SUDO_LDFLAGS)
22 AC_SUBST(SUDO_OBJS)
23 AC_SUBST(LIBS)
24 AC_SUBST(SUDO_LIBS)
25 AC_SUBST(NET_LIBS)
26 AC_SUBST(AFS_LIBS)
27 AC_SUBST(GETGROUPS_LIB)
28 AC_SUBST(OSDEFS)
29 AC_SUBST(AUTH_OBJS)
30 AC_SUBST(MANTYPE)
31 AC_SUBST(MAN_POSTINSTALL)
32 AC_SUBST(SUDOERS_MODE)
33 AC_SUBST(SUDOERS_UID)
34 AC_SUBST(SUDOERS_GID)
35 AC_SUBST(DEV)
36 AC_SUBST(mansectsu)
37 AC_SUBST(mansectform)
38 AC_SUBST(mansrcdir)
39 AC_SUBST(NOEXECDIR)
40 AC_SUBST(noexec_file)
41 AC_SUBST(INSTALL_NOEXEC)
42 AC_SUBST(DONT_LEAK_PATH_INFO)
43 dnl
44 dnl Variables that get substituted in docs (not overridden by environment)
45 dnl
46 AC_SUBST(timedir)dnl initial value from SUDO_TIMEDIR
47 AC_SUBST(timeout)
48 AC_SUBST(password_timeout)
49 AC_SUBST(sudo_umask)
50 AC_SUBST(passprompt)
51 AC_SUBST(long_otp_prompt)
52 AC_SUBST(lecture)
53 AC_SUBST(logfac)
54 AC_SUBST(goodpri)
55 AC_SUBST(badpri)
56 AC_SUBST(loglen)
57 AC_SUBST(ignore_dot)
58 AC_SUBST(mail_no_user)
59 AC_SUBST(mail_no_host)
60 AC_SUBST(mail_no_perms)
61 AC_SUBST(mailto)
62 AC_SUBST(mailsub)
63 AC_SUBST(badpass_message)
64 AC_SUBST(fqdn)
65 AC_SUBST(runas_default)
66 AC_SUBST(env_editor)
67 AC_SUBST(passwd_tries)
68 AC_SUBST(tty_tickets)
69 AC_SUBST(insults)
70 AC_SUBST(root_sudo)
71 AC_SUBST(path_info)
72 dnl
73 dnl Initial values for above
74 dnl
75 timeout=5
76 password_timeout=5
77 sudo_umask=0022
78 passprompt="Password:"
79 long_otp_prompt=off
80 lecture=once
81 logfac=local2
82 goodpri=notice
83 badpri=alert
84 loglen=80
85 ignore_dot=off
86 mail_no_user=on
87 mail_no_host=off
88 mail_no_perms=off
89 mailto=root
90 mailsub='*** SECURITY information for %h ***'
91 badpass_message='Sorry, try again.'
92 fqdn=off
93 runas_default=root
94 env_editor=off
95 passwd_tries=3
96 tty_tickets=off
97 insults=off
98 root_sudo=on
99 path_info=on
100 INSTALL_NOEXEC=
101 dnl
102 dnl Initial values for Makefile variables listed above
103 dnl May be overridden by environment variables..
104 dnl
105 PROGS="sudo visudo"
106 : ${MANTYPE='man'}
107 : ${mansrcdir='.'}
108 : ${SUDOERS_MODE='0440'}
109 : ${SUDOERS_UID='0'}
110 : ${SUDOERS_GID='0'}
111 DEV="#"
112 AUTH_OBJS=
113 AUTH_REG=
114 AUTH_EXCL=
115 AUTH_EXCL_DEF=
116 AUTH_DEF=passwd
117
118 dnl
119 dnl Other vaiables
120 dnl
121 CHECKSHADOW=true
122 shadow_defs=
123 shadow_funcs=
124 shadow_libs=
125 shadow_libs_optional=
126
127 dnl
128 dnl Override default configure dirs...
129 dnl
130 test "$mandir" = '${prefix}/man' && mandir='$(prefix)/man'
131 test "$bindir" = '${exec_prefix}/bin' && bindir='$(exec_prefix)/bin'
132 test "$sbindir" = '${exec_prefix}/sbin' && sbindir='$(exec_prefix)/sbin'
133 test "$sysconfdir" = '${prefix}/etc' -a X"$with_stow" != X"yes" && sysconfdir='/etc'
134
135 dnl
136 dnl Deprecated --with options (these all warn or generate an error)
137 dnl
138
139 AC_ARG_WITH(otp-only, [  --with-otp-only         deprecated],
140 [case $with_otp_only in
141     yes)        with_passwd="no"
142                 AC_MSG_NOTICE([--with-otp-only option deprecated, treating as --without-passwd])
143                 ;;
144 esac])
145
146 AC_ARG_WITH(alertmail, [  --with-alertmail        deprecated],
147 [case $with_alertmail in
148     *)          with_mailto="$with_alertmail"
149                 AC_MSG_NOTICE([--with-alertmail option deprecated, treating as --mailto])
150                 ;;
151 esac])
152
153 dnl
154 dnl Options for --with
155 dnl
156
157 AC_ARG_WITH(CC, [  --with-CC               C compiler to use],
158 [case $with_CC in
159     yes)        AC_MSG_ERROR(["must give --with-CC an argument."])
160                 ;;
161     no)         AC_MSG_ERROR(["illegal argument: --without-CC."])
162                 ;;
163     *)          CC=$with_CC
164                 ;;
165 esac])
166
167 AC_ARG_WITH(rpath, [  --with-rpath            pass -R flag in addition to -L for lib paths],
168 [case $with_rpath in
169     yes|no)     ;;
170     *)          AC_MSG_ERROR(["--with-rpath does not take an argument."])
171                 ;;
172 esac])
173
174 AC_ARG_WITH(blibpath, [  --with-blibpath[=PATH]    pass -blibpath flag to ld for additional lib paths],
175 [case $with_blibpath in
176     yes|no)     ;;
177     *)          AC_MSG_NOTICE([will pass -blibpath:${with_blibpath} to the loader.])
178                 ;;
179 esac])
180
181 AC_ARG_WITH(incpath, [  --with-incpath          additional places to look for include files],
182 [case $with_incpath in
183     yes)        AC_MSG_ERROR(["must give --with-incpath an argument."])
184                 ;;
185     no)         AC_MSG_ERROR(["--without-incpath not supported."])
186                 ;;
187     *)          AC_MSG_NOTICE([Adding ${with_incpath} to CPPFLAGS])
188                 for i in ${with_incpath}; do
189                     CPPFLAGS="${CPPFLAGS} -I${i}"
190                 done
191                 ;;
192 esac])
193
194 AC_ARG_WITH(libpath, [  --with-libpath          additional places to look for libraries],
195 [case $with_libpath in
196     yes)        AC_MSG_ERROR(["must give --with-libpath an argument."])
197                 ;;
198     no)         AC_MSG_ERROR(["--without-libpath not supported."])
199                 ;;
200     *)          AC_MSG_NOTICE([Adding ${with_libpath} to LDFLAGS])
201                 ;;
202 esac])
203
204 AC_ARG_WITH(libraries, [  --with-libraries        additional libraries to link with],
205 [case $with_libraries in
206     yes)        AC_MSG_ERROR(["must give --with-libraries an argument."])
207                 ;;
208     no)         AC_MSG_ERROR(["--without-libraries not supported."])
209                 ;;
210     *)          AC_MSG_NOTICE([Adding ${with_libraries} to LIBS])
211                 ;;
212 esac])
213
214 AC_ARG_WITH(devel, [  --with-devel            add development options],
215 [case $with_devel in
216     yes)        AC_MSG_NOTICE([Setting up for development: -Wall, flex, yacc])
217                 PROGS="${PROGS} testsudoers"
218                 OSDEFS="${OSDEFS} -DSUDO_DEVEL"
219                 DEV=""
220                 ;;
221     no)         ;;
222     *)          AC_MSG_WARN([Ignoring unknown argument to --with-devel: $with_devel])
223                 ;;
224 esac])
225
226 AC_ARG_WITH(efence, [  --with-efence           link with -lefence for malloc() debugging],
227 [case $with_efence in
228     yes)        AC_MSG_NOTICE([Sudo will link with -lefence (Electric Fence)])
229                 LIBS="${LIBS} -lefence"
230                 if test -f /usr/local/lib/libefence.a; then
231                     with_libpath="${with_libpath} /usr/local/lib"
232                 fi
233                 ;;
234     no)         ;;
235     *)          AC_MSG_WARN([Ignoring unknown argument to --with-efence: $with_efence])
236                 ;;
237 esac])
238
239 AC_ARG_WITH(csops, [  --with-csops            add CSOps standard options],
240 [case $with_csops in
241     yes)        AC_MSG_NOTICE([Adding CSOps standard options])
242                 CHECKSIA=false
243                 with_ignore_dot=yes
244                 insults=on
245                 with_classic_insults=yes
246                 with_csops_insults=yes
247                 with_env_editor=yes
248                 : ${mansectsu='8'}
249                 : ${mansectform='5'}
250                 ;;
251     no)         ;;
252     *)          AC_MSG_WARN([Ignoring unknown argument to --with-csops: $with_csops])
253                 ;;
254 esac])
255
256 AC_ARG_WITH(passwd, [  --without-passwd        don't use passwd/shadow file for authentication],
257 [case $with_passwd in
258     yes|no)     AC_MSG_CHECKING(whether to use shadow/passwd file authentication)
259                 AC_MSG_RESULT($with_passwd)
260                 AUTH_DEF=""
261                 test "$with_passwd" = "yes" && AUTH_REG="$AUTH_REG passwd"
262                 ;;
263     *)          AC_MSG_ERROR(["Sorry, --with-passwd does not take an argument."])
264                 ;;
265 esac])
266
267 AC_ARG_WITH(skey, [  --with-skey[=DIR]         enable S/Key support ],
268 [case $with_skey in
269     no)         with_skey=""
270                 ;;
271     *)          AC_DEFINE(HAVE_SKEY)
272                 AC_MSG_CHECKING(whether to try S/Key authentication)
273                 AC_MSG_RESULT(yes)
274                 AUTH_REG="$AUTH_REG S/Key"
275                 ;;
276 esac])
277
278 AC_ARG_WITH(opie, [  --with-opie[=DIR]         enable OPIE support ],
279 [case $with_opie in
280     no)         with_opie=""
281                 ;;
282     *)          AC_DEFINE(HAVE_OPIE)
283                 AC_MSG_CHECKING(whether to try NRL OPIE authentication)
284                 AC_MSG_RESULT(yes)
285                 AUTH_REG="$AUTH_REG NRL_OPIE"
286                 ;;
287 esac])
288
289 AC_ARG_WITH(long-otp-prompt, [  --with-long-otp-prompt  use a two line OTP (skey/opie) prompt],
290 [case $with_long_otp_prompt in
291     yes)        AC_DEFINE(LONG_OTP_PROMPT)
292                 AC_MSG_CHECKING(whether to use a two line prompt for OTP authentication)
293                 AC_MSG_RESULT(yes)
294                 long_otp_prompt=on
295                 ;;
296     no)         long_otp_prompt=off
297                 ;;
298     *)          AC_MSG_ERROR(["--with-long-otp-prompt does not take an argument."])
299                 ;;
300 esac])
301
302 AC_ARG_WITH(SecurID, [  --with-SecurID[[=DIR]]    enable SecurID support],
303 [case $with_SecurID in
304     no)         with_SecurID="";;
305     *)          AC_DEFINE(HAVE_SECURID)
306                 AC_MSG_CHECKING(whether to use SecurID for authentication)
307                 AC_MSG_RESULT(yes)
308                 AUTH_EXCL="$AUTH_EXCL SecurID"
309                 ;;
310 esac])
311
312 AC_ARG_WITH(fwtk, [  --with-fwtk[[=DIR]]       enable FWTK AuthSRV support],
313 [case $with_fwtk in
314     no)         with_fwtk="";;
315     *)          AC_DEFINE(HAVE_FWTK)
316                 AC_MSG_CHECKING(whether to use FWTK AuthSRV for authentication)
317                 AC_MSG_RESULT(yes)
318                 AUTH_EXCL="$AUTH_EXCL FWTK"
319                 ;;
320 esac])
321
322 AC_ARG_WITH(kerb4, [  --with-kerb4[[=DIR]]      enable Kerberos IV support],
323 [case $with_kerb4 in
324     no)         with_kerb4="";;
325     *)          AC_MSG_CHECKING(whether to try kerberos IV authentication)
326                 AC_MSG_RESULT(yes)
327                 AUTH_REG="$AUTH_REG kerb4"
328                 ;;
329 esac])
330
331 AC_ARG_WITH(kerb5, [  --with-kerb5[[=DIR]]      enable Kerberos V support],
332 [case $with_kerb5 in
333     no)         with_kerb5="";;
334     *)          AC_MSG_CHECKING(whether to try Kerberos V authentication)
335                 AC_MSG_RESULT(yes)
336                 AUTH_REG="$AUTH_REG kerb5"
337                 ;;
338 esac])
339
340 AC_ARG_WITH(aixauth, [  --with-aixauth          enable AIX general authentication support],
341 [case $with_aixauth in
342     yes)        AUTH_EXCL="$AUTH_EXCL AIX_AUTH";;
343     no)         ;;
344     *)          AC_MSG_ERROR(["--with-aixauth does not take an argument."])
345                 ;;
346 esac])
347
348 AC_ARG_WITH(pam, [  --with-pam              enable PAM support],
349 [case $with_pam in
350     yes)        AUTH_EXCL="$AUTH_EXCL PAM";;
351     no)         ;;
352     *)          AC_MSG_ERROR(["--with-pam does not take an argument."])
353                 ;;
354 esac])
355
356 AC_ARG_WITH(AFS, [  --with-AFS              enable AFS support],
357 [case $with_AFS in
358     yes)        AC_DEFINE(HAVE_AFS)
359                 AC_MSG_CHECKING(whether to try AFS (kerberos) authentication)
360                 AC_MSG_RESULT(yes)
361                 AUTH_REG="$AUTH_REG AFS"
362                 ;;
363     no)         ;;
364     *)          AC_MSG_ERROR(["--with-AFS does not take an argument."])
365                 ;;
366 esac])
367
368 AC_ARG_WITH(DCE, [  --with-DCE              enable DCE support],
369 [case $with_DCE in
370     yes)        AC_DEFINE(HAVE_DCE)
371                 AC_MSG_CHECKING(whether to try DCE (kerberos) authentication)
372                 AC_MSG_RESULT(yes)
373                 AUTH_REG="$AUTH_REG DCE"
374                 ;;
375     no)         ;;
376     *)          AC_MSG_ERROR(["--with-DCE does not take an argument."])
377                 ;;
378 esac])
379
380 AC_ARG_WITH(logincap, [  --with-logincap         enable BSD login class support],
381 [case $with_logincap in
382     yes|no)     ;;
383     *)          AC_MSG_ERROR(["--with-logincap does not take an argument."])
384                 ;;
385 esac])
386
387 AC_ARG_WITH(bsdauth, [  --with-bsdauth          enable BSD authentication support],
388 [case $with_bsdauth in
389     yes)        AUTH_EXCL="$AUTH_EXCL BSD_AUTH";;
390     no)         ;;
391     *)          AC_MSG_ERROR(["--with-bsdauth does not take an argument."])
392                 ;;
393 esac])
394
395 AC_ARG_WITH(project, [  --with-project          enable Solaris project support],
396 [case $with_project in
397     yes|no)     ;;
398     no) ;;
399     *)          AC_MSG_ERROR(["--with-project does not take an argument."])
400                 ;;
401 esac])
402
403 AC_MSG_CHECKING(whether to lecture users the first time they run sudo)
404 AC_ARG_WITH(lecture, [  --without-lecture       don't print lecture for first-time sudoer],
405 [case $with_lecture in
406     yes|short|always)   lecture=once
407                 ;;
408     no|none|never)      lecture=never
409                 ;;
410     *)          AC_MSG_ERROR(["unknown argument to --with-lecture: $with_lecture"])
411                 ;;
412 esac])
413 if test "$lecture" = "once"; then
414     AC_MSG_RESULT(yes)
415 else
416     AC_DEFINE(NO_LECTURE)
417     AC_MSG_RESULT(no)
418 fi
419
420 AC_MSG_CHECKING(whether sudo should log via syslog or to a file by default)
421 AC_ARG_WITH(logging, [  --with-logging          log via syslog, file, or both],
422 [case $with_logging in
423     yes)        AC_MSG_ERROR(["must give --with-logging an argument."])
424                 ;;
425     no)         AC_MSG_ERROR(["--without-logging not supported."])
426                 ;;
427     syslog)     AC_DEFINE(LOGGING, SLOG_SYSLOG)
428                 AC_MSG_RESULT(syslog)
429                 ;;
430     file)       AC_DEFINE(LOGGING, SLOG_FILE)
431                 AC_MSG_RESULT(file)
432                 ;;
433     both)       AC_DEFINE(LOGGING, SLOG_BOTH)
434                 AC_MSG_RESULT(both)
435                 ;;
436     *)          AC_MSG_ERROR(["unknown argument to --with-logging: $with_logging"])
437                 ;;
438 esac], [AC_DEFINE(LOGGING, SLOG_SYSLOG) AC_MSG_RESULT(syslog)])
439
440 AC_MSG_CHECKING(which syslog facility sudo should log with)
441 AC_ARG_WITH(logfac, [  --with-logfac           syslog facility to log with (default is "local2")],
442 [case $with_logfac in
443     yes)        AC_MSG_ERROR(["must give --with-logfac an argument."])
444                 ;;
445     no)         AC_MSG_ERROR(["--without-logfac not supported."])
446                 ;;
447     authpriv|auth|daemon|user|local0|local1|local2|local3|local4|local5|local6|local7)          logfac=$with_logfac
448                 ;;
449     *)          AC_MSG_ERROR(["$with_logfac is not a supported syslog facility."])
450                 ;;
451 esac])
452 AC_DEFINE_UNQUOTED(LOGFAC, "$logfac", [The syslog facility sudo will use.])
453 AC_MSG_RESULT($logfac)
454
455 AC_MSG_CHECKING(at which syslog priority to log commands)
456 AC_ARG_WITH(goodpri, [  --with-goodpri          syslog priority for commands (def is "notice")],
457 [case $with_goodpri in
458     yes)        AC_MSG_ERROR(["must give --with-goodpri an argument."])
459                 ;;
460     no)         AC_MSG_ERROR(["--without-goodpri not supported."])
461                 ;;
462     alert|crit|debug|emerg|err|info|notice|warning)
463                 goodpri=$with_goodpri
464                 ;;
465     *)          AC_MSG_ERROR(["$with_goodpri is not a supported syslog priority."])
466                 ;;
467 esac])
468 AC_DEFINE_UNQUOTED(PRI_SUCCESS, "$goodpri", [The syslog priority sudo will use for successful attempts.])
469 AC_MSG_RESULT($goodpri)
470
471 AC_MSG_CHECKING(at which syslog priority to log failures)
472 AC_ARG_WITH(badpri, [  --with-badpri           syslog priority for failures (def is "alert")],
473 [case $with_badpri in
474     yes)        AC_MSG_ERROR(["must give --with-badpri an argument."])
475                 ;;
476     no)         AC_MSG_ERROR(["--without-badpri not supported."])
477                 ;;
478     alert|crit|debug|emerg|err|info|notice|warning)
479                 badpri=$with_badpri
480                 ;;
481     *)          AC_MSG_ERROR([$with_badpri is not a supported syslog priority.])
482                 ;;
483 esac])
484 AC_DEFINE_UNQUOTED(PRI_FAILURE, "$badpri", [The syslog priority sudo will use for unsuccessful attempts/errors.])
485 AC_MSG_RESULT($badpri)
486
487 AC_ARG_WITH(logpath, [  --with-logpath          path to the sudo log file],
488 [case $with_logpath in
489     yes)        AC_MSG_ERROR(["must give --with-logpath an argument."])
490                 ;;
491     no)         AC_MSG_ERROR(["--without-logpath not supported."])
492                 ;;
493 esac])
494
495 AC_MSG_CHECKING(how long a line in the log file should be)
496 AC_ARG_WITH(loglen, [  --with-loglen           maximum length of a log file line (default is 80)],
497 [case $with_loglen in
498     yes)        AC_MSG_ERROR(["must give --with-loglen an argument."])
499                 ;;
500     no)         AC_MSG_ERROR(["--without-loglen not supported."])
501                 ;;
502     [[0-9]]*)   loglen=$with_loglen
503                 ;;
504     *)          AC_MSG_ERROR(["you must enter a number, not $with_loglen"])
505                 ;;
506 esac])
507 AC_DEFINE_UNQUOTED(MAXLOGFILELEN, $loglen, [The max number of chars per log file line (for line wrapping).])
508 AC_MSG_RESULT($loglen)
509
510 AC_MSG_CHECKING(whether sudo should ignore '.' or '' in \$PATH)
511 AC_ARG_WITH(ignore-dot, [  --with-ignore-dot       ignore '.' in the PATH],
512 [case $with_ignore_dot in
513     yes)        ignore_dot=on
514                 ;;
515     no)         ignore_dot=off
516                 ;;
517     *)          AC_MSG_ERROR(["--with-ignore-dot does not take an argument."])
518                 ;;
519 esac])
520 if test "$ignore_dot" = "on"; then
521     AC_DEFINE(IGNORE_DOT_PATH)
522     AC_MSG_RESULT(yes)
523 else
524     AC_MSG_RESULT(no)
525 fi
526
527 AC_MSG_CHECKING(whether to send mail when a user is not in sudoers)
528 AC_ARG_WITH(mail-if-no-user, [  --without-mail-if-no-user do not send mail if user not in sudoers],
529 [case $with_mail_if_no_user in
530     yes)        mail_no_user=on
531                 ;;
532     no)         mail_no_user=off
533                 ;;
534     *)          AC_MSG_ERROR(["--with-mail-if-no-user does not take an argument."])
535                 ;;
536 esac])
537 if test "$mail_no_user" = "on"; then
538     AC_DEFINE(SEND_MAIL_WHEN_NO_USER)
539     AC_MSG_RESULT(yes)
540 else
541     AC_MSG_RESULT(no)
542 fi
543
544 AC_MSG_CHECKING(whether to send mail when user listed but not for this host)
545 AC_ARG_WITH(mail-if-no-host, [  --with-mail-if-no-host  send mail if user in sudoers but not for this host],
546 [case $with_mail_if_no_host in
547     yes)        mail_no_host=on
548                 ;;
549     no)         mail_no_host=off
550                 ;;
551     *)          AC_MSG_ERROR(["--with-mail-if-no-host does not take an argument."])
552                 ;;
553 esac])
554 if test "$mail_no_host" = "on"; then
555     AC_DEFINE(SEND_MAIL_WHEN_NO_HOST)
556     AC_MSG_RESULT(yes)
557 else
558     AC_MSG_RESULT(no)
559 fi
560
561 AC_MSG_CHECKING(whether to send mail when a user tries a disallowed command)
562 AC_ARG_WITH(mail-if-noperms, [  --with-mail-if-noperms  send mail if user not allowed to run command],
563 [case $with_mail_if_noperms in
564     yes)        mail_noperms=on
565                 ;;
566     no)         mail_noperms=off
567                 ;;
568     *)          AC_MSG_ERROR(["--with-mail-if-noperms does not take an argument."])
569                 ;;
570 esac])
571 if test "$mail_noperms" = "on"; then
572     AC_DEFINE(SEND_MAIL_WHEN_NOT_OK)
573     AC_MSG_RESULT(yes)
574 else
575     AC_MSG_RESULT(no)
576 fi
577
578 AC_MSG_CHECKING(who should get the mail that sudo sends)
579 AC_ARG_WITH(mailto, [  --with-mailto           who should get sudo mail (default is "root")],
580 [case $with_mailto in
581     yes)        AC_MSG_ERROR(["must give --with-mailto an argument."])
582                 ;;
583     no)         AC_MSG_ERROR(["--without-mailto not supported."])
584                 ;;
585     *)          mailto=$with_mailto
586                 ;;
587 esac])
588 AC_DEFINE_UNQUOTED(MAILTO, "$mailto", [The user or email address that sudo mail is sent to.])
589 AC_MSG_RESULT([$mailto])
590
591 AC_ARG_WITH(mailsubject, [  --with-mailsubject      subject of sudo mail],
592 [case $with_mailsubject in
593     yes)        AC_MSG_ERROR(["must give --with-mailsubject an argument."])
594                 ;;
595     no)         AC_MSG_WARN([Sorry, --without-mailsubject not supported.])
596                 ;;
597     *)          mailsub="$with_mailsubject"
598                 AC_MSG_CHECKING(sudo mail subject)
599                 AC_MSG_RESULT([Using alert mail subject: $mailsub])
600                 ;;
601 esac])
602 AC_DEFINE_UNQUOTED(MAILSUBJECT, "$mailsub", [The subject of the mail sent by sudo to the MAILTO user/address.])
603
604 AC_MSG_CHECKING(for bad password prompt)
605 AC_ARG_WITH(passprompt, [  --with-passprompt       default password prompt],
606 [case $with_passprompt in
607     yes)        AC_MSG_ERROR(["must give --with-passprompt an argument."])
608                 ;;
609     no)         AC_MSG_WARN([Sorry, --without-passprompt not supported.])
610                 ;;
611     *)          passprompt="$with_passprompt"
612 esac])
613 AC_MSG_RESULT($passprompt)
614 AC_DEFINE_UNQUOTED(PASSPROMPT, "$passprompt", [The default password prompt.])
615
616 AC_MSG_CHECKING(for bad password message)
617 AC_ARG_WITH(badpass-message, [  --with-badpass-message  message the user sees when the password is wrong],
618 [case $with_badpass_message in
619     yes)        AC_MSG_ERROR(["Must give --with-badpass-message an argument."])
620                 ;;
621     no)         AC_MSG_WARN([Sorry, --without-badpass-message not supported.])
622                 ;;
623     *)          badpass_message="$with_badpass_message"
624                 ;;
625 esac])
626 AC_DEFINE_UNQUOTED(INCORRECT_PASSWORD, "$badpass_message", [The message given when a bad password is entered.])
627 AC_MSG_RESULT([$badpass_message])
628
629 AC_MSG_CHECKING(whether to expect fully qualified hosts in sudoers)
630 AC_ARG_WITH(fqdn, [  --with-fqdn             expect fully qualified hosts in sudoers],
631 [case $with_fqdn in
632     yes)        fqdn=on
633                 ;;
634     no)         fqdn=off
635                 ;;
636     *)          AC_MSG_ERROR(["--with-fqdn does not take an argument."])
637                 ;;
638 esac])
639 if test "$fqdn" = "on"; then
640     AC_DEFINE(FQDN)
641     AC_MSG_RESULT(yes)
642 else
643     AC_MSG_RESULT(no)
644 fi
645
646 AC_ARG_WITH(timedir, [  --with-timedir          path to the sudo timestamp dir],
647 [case $with_timedir in
648     yes)        AC_MSG_ERROR(["must give --with-timedir an argument."])
649                 ;;
650     no)         AC_MSG_ERROR(["--without-timedir not supported."])
651                 ;;
652 esac])
653
654 AC_ARG_WITH(sendmail, [  --with-sendmail=path    set path to sendmail
655   --without-sendmail      do not send mail at all],
656 [case $with_sendmail in
657     yes)        with_sendmail=""
658                 ;;
659     no)         ;;
660     *)          SUDO_DEFINE_UNQUOTED(_PATH_SUDO_SENDMAIL, "$with_sendmail")
661                 ;;
662 esac])
663
664 AC_ARG_WITH(sudoers-mode, [  --with-sudoers-mode     mode of sudoers file (defaults to 0440)],
665 [case $with_sudoers_mode in
666     yes)        AC_MSG_ERROR(["must give --with-sudoers-mode an argument."])
667                 ;;
668     no)         AC_MSG_ERROR(["--without-sudoers-mode not supported."])
669                 ;;
670     [[1-9]]*)   SUDOERS_MODE=0${with_sudoers_mode}
671                 ;;
672     0*)         SUDOERS_MODE=$with_sudoers_mode
673                 ;;
674     *)          AC_MSG_ERROR(["you must use an octal mode, not a name."])
675                 ;;
676 esac])
677
678 AC_ARG_WITH(sudoers-uid, [  --with-sudoers-uid      uid that owns sudoers file (defaults to 0)],
679 [case $with_sudoers_uid in
680     yes)        AC_MSG_ERROR(["must give --with-sudoers-uid an argument."])
681                 ;;
682     no)         AC_MSG_ERROR(["--without-sudoers-uid not supported."])
683                 ;;
684     [[0-9]]*)   SUDOERS_UID=$with_sudoers_uid
685                 ;;
686     *)          AC_MSG_ERROR(["you must use an unsigned numeric uid, not a name."])
687                 ;;
688 esac])
689
690 AC_ARG_WITH(sudoers-gid, [  --with-sudoers-gid      gid that owns sudoers file (defaults to 0)],
691 [case $with_sudoers_gid in
692     yes)        AC_MSG_ERROR(["must give --with-sudoers-gid an argument."])
693                 ;;
694     no)         AC_MSG_ERROR(["--without-sudoers-gid not supported."])
695                 ;;
696     [[0-9]]*)   SUDOERS_GID=$with_sudoers_gid
697                 ;;
698     *)          AC_MSG_ERROR(["you must use an unsigned numeric gid, not a name."])
699                 ;;
700 esac])
701
702 AC_MSG_CHECKING(for umask programs should be run with)
703 AC_ARG_WITH(umask, [  --with-umask            umask with which the prog should run (default is 022)
704   --without-umask         Preserves the umask of the user invoking sudo.],
705 [case $with_umask in
706     yes)        AC_MSG_ERROR(["must give --with-umask an argument."])
707                 ;;
708     no)         sudo_umask=0777
709                 ;;
710     [[0-9]]*)   sudo_umask=$with_umask
711                 ;;
712     *)          AC_MSG_ERROR(["you must enter a numeric mask."])
713                 ;;
714 esac])
715 AC_DEFINE_UNQUOTED(SUDO_UMASK, $sudo_umask, [The umask that the root-run prog should use.])
716 if test "$sudo_umask" = "0777"; then
717     AC_MSG_RESULT(user)
718 else
719     AC_MSG_RESULT($sudo_umask)
720 fi
721
722 AC_MSG_CHECKING(for default user to run commands as)
723 AC_ARG_WITH(runas-default, [  --with-runas-default    User to run commands as (default is "root")],
724 [case $with_runas_default in
725     yes)        AC_MSG_ERROR(["must give --with-runas-default an argument."])
726                 ;;
727     no)         AC_MSG_ERROR(["--without-runas-default not supported."])
728                 ;;
729     *)          runas_default="$with_runas_default"
730                 ;;
731 esac])
732 AC_DEFINE_UNQUOTED(RUNAS_DEFAULT, "$runas_default", [The user sudo should run commands as by default.])
733 AC_MSG_RESULT([$runas_default])
734
735 AC_ARG_WITH(exempt, [  --with-exempt=group     no passwd needed for users in this group],
736 [case $with_exempt in
737     yes)        AC_MSG_ERROR(["must give --with-exempt an argument."])
738                 ;;
739     no)         AC_MSG_ERROR(["--without-exempt not supported."])
740                 ;;
741     *)          AC_DEFINE_UNQUOTED(EXEMPTGROUP, "$with_exempt", [If defined, users in this group need not enter a passwd (ie "sudo").])
742                 AC_MSG_CHECKING(for group to be exempt from password)
743                 AC_MSG_RESULT([$with_exempt])
744                 ;;
745 esac])
746
747 AC_MSG_CHECKING(for editor that visudo should use)
748 AC_ARG_WITH(editor, [  --with-editor=path      Default editor for visudo (defaults to vi)],
749 [case $with_editor in
750     yes)        AC_MSG_ERROR(["must give --with-editor an argument."])
751                 ;;
752     no)         AC_MSG_ERROR(["--without-editor not supported."])
753                 ;;
754     *)          AC_DEFINE_UNQUOTED(EDITOR, "$with_editor", [A colon-separated list of pathnames to be used as the editor for visudo.])
755                 AC_MSG_RESULT([$with_editor])
756                 ;;
757 esac], [AC_DEFINE(EDITOR, _PATH_VI) AC_MSG_RESULT(vi)])
758
759 AC_MSG_CHECKING(whether to obey EDITOR and VISUAL environment variables)
760 AC_ARG_WITH(env-editor, [  --with-env-editor       Use the environment variable EDITOR for visudo],
761 [case $with_env_editor in
762     yes)        env_editor=on
763                 ;;
764     no)         env_editor=off
765                 ;;
766     *)          AC_MSG_ERROR(["--with-env-editor does not take an argument."])
767                 ;;
768 esac])
769 if test "$env_editor" = "on"; then
770     AC_DEFINE(ENV_EDITOR)
771     AC_MSG_RESULT(yes)
772 else
773     AC_MSG_RESULT(no)
774 fi
775
776 AC_MSG_CHECKING(number of tries a user gets to enter their password)
777 AC_ARG_WITH(passwd-tries, [  --with-passwd-tries     number of tries to enter password (default is 3)],
778 [case $with_passwd_tries in
779     yes)        ;;
780     no)         AC_MSG_ERROR(["--without-editor not supported."])
781                 ;;
782     [[1-9]]*)   passwd_tries=$with_passwd_tries
783                 ;;
784     *)          AC_MSG_ERROR(["you must enter the numer of tries, > 0"])
785                 ;;
786 esac])
787 AC_DEFINE_UNQUOTED(TRIES_FOR_PASSWORD, $passwd_tries, [The number of tries a user gets to enter their password.])
788 AC_MSG_RESULT($passwd_tries)
789
790 AC_MSG_CHECKING(time in minutes after which sudo will ask for a password again)
791 AC_ARG_WITH(timeout, [  --with-timeout          minutes before sudo asks for passwd again (def is 5 minutes)],
792 [case $with_timeout in
793     yes)        ;;
794     no)         timeout=0
795                 ;;
796     [[0-9]]*)   timeout=$with_timeout
797                 ;;
798     *)          AC_MSG_ERROR(["you must enter the numer of minutes."])
799                 ;;
800 esac])
801 AC_DEFINE_UNQUOTED(TIMEOUT, $timeout, [The number of minutes before sudo asks for a password again.])
802 AC_MSG_RESULT($timeout)
803
804 AC_MSG_CHECKING(time in minutes after the password prompt will time out)
805 AC_ARG_WITH(password-timeout, [  --with-password-timeout passwd prompt timeout in minutes (default is 5 minutes)],
806 [case $with_password_timeout in
807     yes)        ;;
808     no)         password_timeout=0
809                 ;;
810     [[0-9]]*)   password_timeout=$with_password_timeout
811                 ;;
812     *)          AC_MSG_ERROR(["you must enter the numer of minutes."])
813                 ;;
814 esac])
815 AC_DEFINE_UNQUOTED(PASSWORD_TIMEOUT, $password_timeout, [The passwd prompt timeout (in minutes).])
816 AC_MSG_RESULT($password_timeout)
817
818 AC_MSG_CHECKING(whether to use per-tty ticket files)
819 AC_ARG_WITH(tty-tickets, [  --with-tty-tickets      use a different ticket file for each tty],
820 [case $with_tty_tickets in
821     yes)        tty_tickets=on
822                 ;;
823     no)         tty_tickets=off
824                 ;;
825     *)          AC_MSG_ERROR(["--with-tty-tickets does not take an argument."])
826                 ;;
827 esac])
828 if test "$tty_tickets" = "on"; then
829     AC_DEFINE(USE_TTY_TICKETS)
830     AC_MSG_RESULT(yes)
831 else
832     AC_MSG_RESULT(no)
833 fi
834
835 AC_MSG_CHECKING(whether to include insults)
836 AC_ARG_WITH(insults, [  --with-insults          insult the user for entering an incorrect password],
837 [case $with_insults in
838     yes)        insults=on
839                 with_classic_insults=yes
840                 with_csops_insults=yes
841                 ;;
842     no)         insults=off
843                 ;;
844     *)          AC_MSG_ERROR(["--with-insults does not take an argument."])
845                 ;;
846 esac])
847 if test "$insults" = "on"; then
848     AC_DEFINE(USE_INSULTS)
849     AC_MSG_RESULT(yes)
850 else
851     AC_MSG_RESULT(no)
852 fi
853
854 AC_ARG_WITH(all-insults, [  --with-all-insults      include all the sudo insult sets],
855 [case $with_all_insults in
856     yes)        with_classic_insults=yes
857                 with_csops_insults=yes
858                 with_hal_insults=yes
859                 with_goons_insults=yes
860                 ;;
861     no)         ;;
862     *)          AC_MSG_ERROR(["--with-all-insults does not take an argument."])
863                 ;;
864 esac])
865
866 AC_ARG_WITH(classic-insults, [  --with-classic-insults  include the insults from the "classic" sudo],
867 [case $with_classic_insults in
868     yes)        AC_DEFINE(CLASSIC_INSULTS)
869                 ;;
870     no)         ;;
871     *)          AC_MSG_ERROR(["--with-classic-insults does not take an argument."])
872                 ;;
873 esac])
874
875 AC_ARG_WITH(csops-insults, [  --with-csops-insults    include CSOps insults],
876 [case $with_csops_insults in
877     yes)        AC_DEFINE(CSOPS_INSULTS)
878                 ;;
879     no)         ;;
880     *)          AC_MSG_ERROR(["--with-csops-insults does not take an argument."])
881                 ;;
882 esac])
883
884 AC_ARG_WITH(hal-insults, [  --with-hal-insults      include 2001-like insults],
885 [case $with_hal_insults in
886     yes)        AC_DEFINE(HAL_INSULTS)
887                 ;;
888     no)         ;;
889     *)          AC_MSG_ERROR(["--with-hal-insults does not take an argument."])
890                 ;;
891 esac])
892
893 AC_ARG_WITH(goons-insults, [  --with-goons-insults    include the insults from the "Goon Show"],
894 [case $with_goons_insults in
895     yes)        AC_DEFINE(GOONS_INSULTS)
896                 ;;
897     no)         ;;
898     *)          AC_MSG_ERROR(["--with-goons-insults does not take an argument."])
899                 ;;
900 esac])
901
902 AC_ARG_WITH(ldap, [  --with-ldap[[=DIR]]       enable LDAP support],
903 [case $with_ldap in
904     no)         with_ldap="";;
905     *)          AC_DEFINE(HAVE_LDAP)
906                 AC_MSG_CHECKING(whether to use sudoers from LDAP)
907                 AC_MSG_RESULT(yes)
908                 ;;
909 esac])
910 AC_ARG_WITH(ldap-conf-file, [  --with-ldap-conf-file   path to LDAP configuration file],
911 [AC_DEFINE_UNQUOTED(_PATH_LDAP_CONF, "$with_ldap_conf_file", [Path to the ldap.conf file])])
912 AC_ARG_WITH(ldap-secret-file, [  --with-ldap-secret-file path to LDAP secret password file],
913 [AC_DEFINE_UNQUOTED(_PATH_LDAP_SECRET, "$with_ldap_secret_file", [Path to the ldap.secret file])])
914
915 AC_ARG_WITH(pc-insults, [  --with-pc-insults       replace politically incorrect insults with less offensive ones],
916 [case $with_pc_insults in
917     yes)        AC_DEFINE(PC_INSULTS)
918                 ;;
919     no)         ;;
920     *)          AC_MSG_ERROR(["--with-pc-insults does not take an argument."])
921                 ;;
922 esac])
923
924 dnl include all insult sets on one line
925 if test "$insults" = "on"; then
926     AC_MSG_CHECKING(which insult sets to include)
927     i=""
928     test "$with_goons_insults" = "yes" && i="goons ${i}"
929     test "$with_hal_insults" = "yes" && i="hal ${i}"
930     test "$with_csops_insults" = "yes" && i="csops ${i}"
931     test "$with_classic_insults" = "yes" && i="classic ${i}"
932     AC_MSG_RESULT([$i])
933 fi
934
935 AC_MSG_CHECKING(whether to override the user's path)
936 AC_ARG_WITH(secure-path, [  --with-secure-path      override the user's path with a built-in one],
937 [case $with_secure_path in
938     yes)        AC_DEFINE_UNQUOTED(SECURE_PATH, "/bin:/usr/ucb:/usr/bin:/usr/sbin:/sbin:/usr/etc:/etc")
939                 AC_MSG_RESULT([:/usr/ucb:/usr/bin:/usr/sbin:/sbin:/usr/etc:/etc])
940                 ;;
941     no)         AC_MSG_RESULT(no)
942                 ;;
943     *)          AC_DEFINE_UNQUOTED(SECURE_PATH, "$with_secure_path")
944                 AC_MSG_RESULT([$with_secure_path])
945                 ;;
946 esac], AC_MSG_RESULT(no))
947
948 AC_MSG_CHECKING(whether to get ip addresses from the network interfaces)
949 AC_ARG_WITH(interfaces, [  --without-interfaces    don't try to read the ip addr of ether interfaces],
950 [case $with_interfaces in
951     yes)        AC_MSG_RESULT(yes)
952                 ;;
953     no)         AC_DEFINE(STUB_LOAD_INTERFACES)
954                 AC_MSG_RESULT(no)
955                 ;;
956     *)          AC_MSG_ERROR(["--with-interfaces does not take an argument."])
957                 ;;
958 esac], AC_MSG_RESULT(yes))
959
960 AC_MSG_CHECKING(whether stow should be used)
961 AC_ARG_WITH(stow, [  --with-stow             properly handle GNU stow packaging],
962 [case $with_stow in
963     yes)        AC_MSG_RESULT(yes)
964                 AC_DEFINE(USE_STOW)
965                 ;;
966     no)         AC_MSG_RESULT(no)
967                 ;;
968     *)          AC_MSG_ERROR(["--with-stow does not take an argument."])
969                 ;;
970 esac], AC_MSG_RESULT(no))
971
972 dnl
973 dnl Options for --enable
974 dnl
975
976 AC_MSG_CHECKING(whether to do user authentication by default)
977 AC_ARG_ENABLE(authentication,
978 [  --disable-authentication
979                           Do not require authentication by default],
980 [ case "$enableval" in
981     yes)        AC_MSG_RESULT(yes)
982                 ;;
983     no)         AC_MSG_RESULT(no)
984                 AC_DEFINE(NO_AUTHENTICATION)
985                 ;;
986     *)          AC_MSG_RESULT(no)
987                 AC_MSG_WARN([Ignoring unknown argument to --enable-authentication: $enableval])
988                 ;;
989   esac
990 ], AC_MSG_RESULT(yes))
991
992 AC_MSG_CHECKING(whether to disable running the mailer as root)
993 AC_ARG_ENABLE(root-mailer,
994 [  --disable-root-mailer   Don't run the mailer as root, run as the user],
995 [ case "$enableval" in
996     yes)        AC_MSG_RESULT(no)
997                 ;;
998     no)         AC_MSG_RESULT(yes)
999                 AC_DEFINE(NO_ROOT_MAILER)
1000                 ;;
1001     *)          AC_MSG_RESULT(no)
1002                 AC_MSG_WARN([Ignoring unknown argument to --enable-root-mailer: $enableval])
1003                 ;;
1004   esac
1005 ], AC_MSG_RESULT(no))
1006
1007 AC_ARG_ENABLE(setreuid,
1008 [  --disable-setreuid      Don't try to use the setreuid() function],
1009 [ case "$enableval" in
1010     no)         SKIP_SETREUID=yes
1011                 ;;
1012     *)          ;;
1013   esac
1014 ])
1015
1016 AC_ARG_ENABLE(setresuid,
1017 [  --disable-setresuid     Don't try to use the setresuid() function],
1018 [ case "$enableval" in
1019     no)         SKIP_SETRESUID=yes
1020                 ;;
1021     *)          ;;
1022   esac
1023 ])
1024
1025 AC_MSG_CHECKING(whether to disable shadow password support)
1026 AC_ARG_ENABLE(shadow,
1027 [  --disable-shadow        Never use shadow passwords],
1028 [ case "$enableval" in
1029     yes)        AC_MSG_RESULT(no)
1030                 ;;
1031     no)         AC_MSG_RESULT(yes)
1032                 CHECKSHADOW="false"
1033                 ;;
1034     *)          AC_MSG_RESULT(no)
1035                 AC_MSG_WARN([Ignoring unknown argument to --enable-shadow: $enableval])
1036                 ;;
1037   esac
1038 ], AC_MSG_RESULT(no))
1039
1040 AC_MSG_CHECKING(whether root should be allowed to use sudo)
1041 AC_ARG_ENABLE(root-sudo,
1042 [  --disable-root-sudo     Don't allow root to run sudo],
1043 [ case "$enableval" in
1044     yes)        AC_MSG_RESULT(yes)
1045                 ;;
1046     no)         AC_DEFINE(NO_ROOT_SUDO)
1047                 AC_MSG_RESULT(no)
1048                 root_sudo=off
1049                 ;;
1050     *)          AC_MSG_ERROR(["--enable-root-sudo does not take an argument."])
1051                 ;;
1052   esac
1053 ], AC_MSG_RESULT(yes))
1054
1055 AC_MSG_CHECKING(whether to log the hostname in the log file)
1056 AC_ARG_ENABLE(log-host,
1057 [  --enable-log-host       Log the hostname in the log file],
1058 [ case "$enableval" in
1059     yes)        AC_MSG_RESULT(yes)
1060                 AC_DEFINE(HOST_IN_LOG)
1061                 ;;
1062     no)         AC_MSG_RESULT(no)
1063                 ;;
1064     *)          AC_MSG_RESULT(no)
1065                 AC_MSG_WARN([Ignoring unknown argument to --enable-log-host: $enableval])
1066                 ;;
1067   esac
1068 ], AC_MSG_RESULT(no))
1069
1070 AC_MSG_CHECKING(whether to invoke a shell if sudo is given no arguments)
1071 AC_ARG_ENABLE(noargs-shell,
1072 [  --enable-noargs-shell   If sudo is given no arguments run a shell],
1073 [ case "$enableval" in
1074     yes)        AC_MSG_RESULT(yes)
1075                 AC_DEFINE(SHELL_IF_NO_ARGS)
1076                 ;;
1077     no)         AC_MSG_RESULT(no)
1078                 ;;
1079     *)          AC_MSG_RESULT(no)
1080                 AC_MSG_WARN([Ignoring unknown argument to --enable-noargs-shell: $enableval])
1081                 ;;
1082   esac
1083 ], AC_MSG_RESULT(no))
1084
1085 AC_MSG_CHECKING(whether to set \$HOME to target user in shell mode)
1086 AC_ARG_ENABLE(shell-sets-home,
1087 [  --enable-shell-sets-home
1088                           set $HOME to target user in shell mode],
1089 [ case "$enableval" in
1090     yes)        AC_MSG_RESULT(yes)
1091                 AC_DEFINE(SHELL_SETS_HOME)
1092                 ;;
1093     no)         AC_MSG_RESULT(no)
1094                 ;;
1095     *)          AC_MSG_RESULT(no)
1096                 AC_MSG_WARN([Ignoring unknown argument to --enable-shell-sets-home: $enableval])
1097                 ;;
1098   esac
1099 ], AC_MSG_RESULT(no))
1100
1101 AC_MSG_CHECKING(whether to disable 'command not found' messages)
1102 AC_ARG_ENABLE(path_info,
1103 [  --disable-path-info     Print 'command not allowed' not 'command not found'],
1104 [ case "$enableval" in
1105     yes)        AC_MSG_RESULT(no)
1106                 ;;
1107     no)         AC_MSG_RESULT(yes)
1108                 AC_DEFINE(DONT_LEAK_PATH_INFO)
1109                 path_info=off
1110                 ;;
1111     *)          AC_MSG_RESULT(no)
1112                 AC_MSG_WARN([Ignoring unknown argument to --enable-path-info: $enableval])
1113                 ;;
1114   esac
1115 ], AC_MSG_RESULT(no))
1116
1117 dnl
1118 dnl If we don't have egrep we can't do anything...
1119 dnl
1120 AC_CHECK_PROG(EGREPPROG, egrep, egrep)
1121 if test -z "$EGREPPROG"; then
1122     AC_MSG_ERROR([Sorry, configure requires egrep to run.])
1123 fi
1124
1125 dnl
1126 dnl Prevent configure from adding the -g flag unless in devel mode
1127 dnl
1128 if test "$with_devel" != "yes"; then
1129     ac_cv_prog_cc_g=no
1130 fi
1131
1132 dnl
1133 dnl C compiler checks
1134 dnl
1135 AC_ISC_POSIX
1136 AC_PROG_CPP
1137
1138 dnl
1139 dnl Libtool magic; enable shared libs and disable static libs
1140 dnl
1141 AC_CANONICAL_HOST
1142 AC_CANONICAL_TARGET([])
1143 AC_DISABLE_STATIC
1144 AC_PROG_LIBTOOL
1145
1146 dnl
1147 dnl Defer with_noexec until after libtool magic runs
1148 dnl
1149 if test "$enable_shared" = "no"; then
1150     with_noexec=no
1151 else
1152     eval _shrext="$shrext_cmds"
1153 fi
1154 AC_MSG_CHECKING(path to sudo_noexec.so)
1155 AC_ARG_WITH(noexec, [  --with-noexec[=PATH]      fully qualified pathname of sudo_noexec.so],
1156 [case $with_noexec in
1157     yes)        with_noexec="$libexecdir/sudo_noexec$_shrext"
1158                 ;;
1159     no)         ;;
1160     *)          ;;
1161 esac], [with_noexec="$libexecdir/sudo_noexec$_shrext"])
1162 AC_MSG_RESULT($with_noexec)
1163 NOEXECDIR="`echo $with_noexec|sed 's:^\(.*\)/[[^/]]*:\1:'`"
1164
1165 dnl
1166 dnl It is now safe to modify CFLAGS and CPPFLAGS
1167 dnl
1168 if test "$with_devel" = "yes" -a -n "$GCC"; then
1169     CFLAGS="${CFLAGS} -Wall"
1170 fi
1171
1172 dnl
1173 dnl Find programs we use
1174 dnl
1175 AC_CHECK_PROG(UNAMEPROG, uname, uname)
1176 AC_CHECK_PROG(TRPROG, tr, tr)
1177 AC_CHECK_PROG(NROFFPROG, nroff, nroff)
1178 if test -z "$NROFFPROG"; then
1179     MANTYPE="cat"
1180     mansrcdir='$(srcdir)'
1181 fi
1182
1183 dnl
1184 dnl What kind of beastie are we being run on?
1185 dnl Barf if config.cache was generated on another host.
1186 dnl
1187 if test -n "$sudo_cv_prev_host"; then
1188     if test "$sudo_cv_prev_host" != "$host"; then
1189         AC_MSG_ERROR([config.cache was created on a different host; remove it and re-run configure.])
1190     else
1191         AC_MSG_CHECKING(previous host type)
1192         AC_CACHE_VAL(sudo_cv_prev_host, sudo_cv_prev_host="$host")
1193         AC_MSG_RESULT([$sudo_cv_prev_host])
1194     fi
1195 else
1196     # this will produce no output since there is no cached value
1197     AC_CACHE_VAL(sudo_cv_prev_host, sudo_cv_prev_host="$host")
1198 fi
1199
1200 dnl
1201 dnl We want to be able to differentiate between different rev's
1202 dnl
1203 if test -n "$host_os"; then
1204     OS=`echo $host_os | sed 's/[[0-9]].*//'`
1205     OSREV=`echo $host_os | sed 's/^[[^0-9\.]]*\([[0-9\.]]*\).*$/\1/'`
1206     OSMAJOR=`echo $OSREV | sed 's/\..*$//'`
1207 else
1208     OS="unknown"
1209     OSREV=0
1210     OSMAJOR=0
1211 fi
1212
1213 case "$host" in
1214     *-*-sunos4*)
1215                 # getcwd(3) opens a pipe to getpwd(1)!?!
1216                 BROKEN_GETCWD=1
1217
1218                 # system headers lack prototypes but gcc helps...
1219                 if test -n "$GCC"; then
1220                     OSDEFS="${OSDEFS} -D__USE_FIXED_PROTOTYPES__"
1221                 fi
1222
1223                 shadow_funcs="getpwanam issecure"
1224                 ;;
1225     *-*-solaris2*)
1226                 # To get the crypt(3) prototype (so we pass -Wall)
1227                 OSDEFS="${OSDEFS} -D__EXTENSIONS__"
1228                 # AFS support needs -lucb
1229                 if test "$with_AFS" = "yes"; then
1230                     AFS_LIBS="-lc -lucb"
1231                 fi
1232                 : ${mansectsu='1m'}
1233                 : ${mansectform='4'}
1234                 : ${with_rpath='yes'}
1235                 test -z "$with_pam" && AUTH_EXCL_DEF="PAM"
1236                 ;;
1237     *-*-aix*)
1238                 # To get all prototypes (so we pass -Wall)
1239                 OSDEFS="${OSDEFS} -D_XOPEN_EXTENDED_SOURCE -D_ALL_SOURCE"
1240                 SUDO_LDFLAGS="${SUDO_LDFLAGS} -Wl,-bI:\$(srcdir)/aixcrypt.exp"
1241                 if test X"$with_blibpath" != X"no"; then
1242                     AC_MSG_CHECKING([if linker accepts -Wl,-blibpath])
1243                     O_LDFLAGS="$LDFLAGS"
1244                     LDFLAGS="$O_LDFLAGS -Wl,-blibpath:/usr/lib:/lib"
1245                     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [
1246                         if test -n "$with_blibpath" -a "$with_blibpath" != "yes"; then
1247                             blibpath="$with_blibpath"
1248                         elif test -n "$GCC"; then
1249                             blibpath="/usr/lib:/lib:/usr/local/lib"
1250                         else
1251                             blibpath="/usr/lib:/lib"
1252                         fi
1253                         AC_MSG_RESULT(yes)
1254                     ], [AC_MSG_RESULT(no)])
1255                 fi
1256                 LDFLAGS="$O_LDFLAGS"
1257
1258                 # Use authenticate(3) as the default authentication method
1259                 if test X"$with_aixauth" = X""; then
1260                     AC_CHECK_FUNCS(authenticate, [AUTH_EXCL_DEF="AIX_AUTH"])
1261                 fi
1262                 ;;
1263     *-*-hiuxmpp*)
1264                 : ${mansectsu='1m'}
1265                 : ${mansectform='4'}
1266                 ;;
1267     *-*-hpux*)
1268                 # AFS support needs -lBSD
1269                 if test "$with_AFS" = "yes"; then
1270                     AFS_LIBS="-lc -lBSD"
1271                 fi
1272                 : ${mansectsu='1m'}
1273                 : ${mansectform='4'}
1274
1275                 case "$host" in
1276                         *-*-hpux[1-8].*)
1277                             AC_DEFINE(BROKEN_SYSLOG)
1278
1279                             # Not sure if setuid binaries are safe in < 9.x
1280                             if test -n "$GCC"; then
1281                                 SUDO_LDFLAGS="${SUDO_LDFLAGS} -static"
1282                             else
1283                                 SUDO_LDFLAGS="${SUDO_LDFLAGS} -Wl,-a,archive"
1284                             fi
1285                         ;;
1286                         *-*-hpux9.*)
1287                             AC_DEFINE(BROKEN_SYSLOG)
1288
1289                             shadow_funcs="getspwuid"
1290
1291                             # DCE support (requires ANSI C compiler)
1292                             if test "$with_DCE" = "yes"; then
1293                                 # order of libs in 9.X is important. -lc_r must be last
1294                                 SUDO_LIBS="${SUDO_LIBS} -ldce -lM -lc_r"
1295                                 LIBS="${LIBS} -ldce -lM -lc_r"
1296                                 CPPFLAGS="${CPPFLAGS} -D_REENTRANT -I/usr/include/reentrant"
1297                             fi
1298                         ;;
1299                         *-*-hpux10.*)
1300                             shadow_funcs="getprpwnam iscomsec"
1301                             shadow_libs="-lsec"
1302                         ;;
1303                         *)
1304                             shadow_funcs="getspnam iscomsec"
1305                             shadow_libs="-lsec"
1306                             test -z "$with_pam" && AUTH_EXCL_DEF="PAM"
1307                         ;;
1308                 esac
1309                 ;;
1310     *-dec-osf*)
1311                 # ignore envariables wrt dynamic lib path
1312                 SUDO_LDFLAGS="${SUDO_LDFLAGS} -Wl,-no_library_replacement"
1313
1314                 : ${CHECKSIA='true'}
1315                 AC_MSG_CHECKING(whether to disable sia support on Digital UNIX)
1316                 AC_ARG_ENABLE(sia,
1317                 [  --disable-sia           Disable SIA on Digital UNIX],
1318                 [ case "$enableval" in
1319                     yes)        AC_MSG_RESULT(no)
1320                                 CHECKSIA=true
1321                                 ;;
1322                     no)         AC_MSG_RESULT(yes)
1323                                 CHECKSIA=false
1324                                 ;;
1325                     *)          AC_MSG_RESULT(no)
1326                                 AC_MSG_WARN([Ignoring unknown argument to --enable-sia: $enableval])
1327                                 ;;
1328                   esac
1329                 ], AC_MSG_RESULT(no))
1330
1331                 shadow_funcs="getprpwnam dispcrypt"
1332                 # OSF/1 4.x and higher need -ldb too
1333                 if test $OSMAJOR -lt 4; then
1334                     shadow_libs="-lsecurity -laud -lm"
1335                 else
1336                     shadow_libs="-lsecurity -ldb -laud -lm"
1337                 fi
1338
1339                 # use SIA by default, if we have it
1340                 test "$CHECKSIA" = "true" && AUTH_EXCL_DEF="SIA"
1341
1342                 #
1343                 # Some versions of Digital Unix ship with a broken
1344                 # copy of prot.h, which we need for shadow passwords.
1345                 # XXX - make should remove this as part of distclean
1346                 #
1347                 AC_MSG_CHECKING([for broken prot.h])
1348                 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1349 #include <sys/types.h>
1350 #include <sys/security.h>
1351 #include <prot.h>
1352                 ]], [[exit(0);]])], [AC_MSG_RESULT(no)], [AC_MSG_RESULT([yes, fixing locally])
1353                 sed 's:<acl.h>:<sys/acl.h>:g' < /usr/include/prot.h > prot.h
1354                 ])
1355                 : ${mansectsu='8'}
1356                 : ${mansectform='4'}
1357                 ;;
1358     *-*-irix*)
1359                 OSDEFS="${OSDEFS} -D_BSD_TYPES"
1360                 if test -z "$NROFFPROG"; then
1361                     MAN_POSTINSTALL='   /bin/rm -f $(mandirsu)/sudo.$(mansectsu).z $(mandirsu)/visudo.$(mansectsu).z $(mandirform)/sudoers.$(mansectform).z ; /usr/bin/pack $(mandirsu)/sudo.$(mansectsu) $(mandirsu)/visudo.$(mansectsu) $(mandirform)/sudoers.$(mansectform)'
1362                     if test "$prefix" = "/usr/local" -a "$mandir" = '$(prefix)/man'; then
1363                         if test -d /usr/share/catman/local; then
1364                             mandir="/usr/share/catman/local"
1365                         else
1366                             mandir="/usr/catman/local"
1367                         fi
1368                     fi
1369                 else
1370                     if test "$prefix" = "/usr/local" -a "$mandir" = '$(prefix)/man'; then
1371                         if test -d "/usr/share/man/local"; then
1372                             mandir="/usr/share/man/local"
1373                         else
1374                             mandir="/usr/man/local"
1375                         fi
1376                     fi
1377                 fi
1378                 # IRIX <= 4 needs -lsun
1379                 if test "$OSMAJOR" -le 4; then
1380                     AC_CHECK_LIB(sun, getpwnam, [LIBS="${LIBS} -lsun"])
1381                 fi
1382                 : ${mansectsu='1m'}
1383                 : ${mansectform='4'}
1384                 ;;
1385     *-*-linux*)
1386                 OSDEFS="${OSDEFS} -D_GNU_SOURCE"
1387                 # Some Linux versions need to link with -lshadow
1388                 shadow_funcs="getspnam"
1389                 shadow_libs_optional="-lshadow"
1390                 test -z "$with_pam" && AUTH_EXCL_DEF="PAM"
1391                 ;;
1392     *-convex-bsd*)
1393                 OSDEFS="${OSDEFS} -D_CONVEX_SOURCE"
1394                 if test -z "$GCC"; then
1395                     CFLAGS="${CFLAGS} -D__STDC__"
1396                 fi
1397
1398                 shadow_defs="-D_AUDIT -D_ACL -DSecureWare"
1399                 shadow_funcs="getprpwnam"
1400                 shadow_libs="-lprot"
1401                 ;;
1402     *-*-ultrix*)
1403                 OS="ultrix"
1404                 shadow_funcs="getauthuid"
1405                 shadow_libs="-lauth"
1406                 ;;
1407     *-*-riscos*)
1408                 LIBS="${LIBS} -lsun -lbsd"
1409                 CPPFLAGS="${CPPFLAGS} -I/usr/include -I/usr/include/bsd"
1410                 OSDEFS="${OSDEFS} -D_MIPS"
1411                 : ${mansectsu='1m'}
1412                 : ${mansectform='4'}
1413                 ;;
1414     *-*-isc*)
1415                 OSDEFS="${OSDEFS} -D_ISC"
1416                 LIB_CRYPT=1
1417                 SUDO_LIBS="${SUDO_LIBS} -lcrypt"
1418                 LIBS="${LIBS} -lcrypt"
1419
1420                 shadow_funcs="getspnam"
1421                 shadow_libs="-lsec"
1422
1423                 : ${mansectsu='1m'}
1424                 : ${mansectform='4'}
1425                 ;;
1426     *-*-sco*|*-sco-*)
1427                 shadow_funcs="getprpwnam"
1428                 shadow_libs="-lprot -lx"
1429                 : ${mansectsu='1m'}
1430                 : ${mansectform='4'}
1431                 ;;
1432     m88k-motorola-sysv*)
1433                 # motorolla's cc (a variant of gcc) does -O but not -O2
1434                 CFLAGS=`echo $CFLAGS | sed 's/-O2/-O/g'`
1435                 : ${mansectsu='1m'}
1436                 : ${mansectform='4'}
1437                 ;;
1438     *-sequent-sysv*)
1439                 shadow_funcs="getspnam"
1440                 shadow_libs="-lsec"
1441                 : ${mansectsu='1m'}
1442                 : ${mansectform='4'}
1443                 : ${with_rpath='yes'}
1444                 ;;
1445     *-ncr-sysv4*|*-ncr-sysvr4*)
1446                 AC_CHECK_LIB(c89, strcasecmp, AC_DEFINE(HAVE_STRCASECMP) [LIBS="${LIBS} -lc89"; ac_cv_func_strcasecmp=yes])
1447                 : ${mansectsu='1m'}
1448                 : ${mansectform='4'}
1449                 : ${with_rpath='yes'}
1450                 ;;
1451     *-ccur-sysv4*|*-ccur-sysvr4*)
1452                 LIBS="${LIBS} -lgen"
1453                 SUDO_LIBS="${SUDO_LIBS} -lgen"
1454                 : ${mansectsu='1m'}
1455                 : ${mansectform='4'}
1456                 : ${with_rpath='yes'}
1457                 ;;
1458     *-*-bsdi*)
1459                 SKIP_SETREUID=yes
1460                 # Use shlicc for BSD/OS [23].x unless asked to do otherwise
1461                 if test "${with_CC+set}" != set -a "$ac_cv_prog_CC" = gcc; then
1462                     case "$OSMAJOR" in
1463                         2|3)    AC_MSG_NOTICE([using shlicc as CC])
1464                                 ac_cv_prog_CC=shlicc
1465                                 CC="$ac_cv_prog_CC"
1466                                 ;;
1467                     esac
1468                 fi
1469                 # Check for newer BSD auth API (just check for >= 3.0?)
1470                 if test -z "$with_bsdauth"; then
1471                     AC_CHECK_FUNCS(auth_challenge, [AUTH_EXCL_DEF="BSD_AUTH"])
1472                 fi
1473                 ;;
1474     *-*-freebsd*)
1475                 # FreeBSD has a real setreuid(2) starting with 2.1 and
1476                 # backported to 2.0.5.  We just take 2.1 and above...
1477                 case "$OSREV" in
1478                 0.*|1.*|2.0*)
1479                     SKIP_SETREUID=yes
1480                     ;;
1481                 esac
1482                 if test "$with_skey" = "yes"; then
1483                      SUDO_LIBS="${SUDO_LIBS} -lmd"
1484                 fi
1485                 CHECKSHADOW="false"
1486                 test -z "$with_pam" && AUTH_EXCL_DEF="PAM"
1487                 : ${with_logincap='maybe'}
1488                 ;;
1489     *-*-*openbsd*)
1490                 # OpenBSD has a real setreuid(2) starting with 3.3 but
1491                 # we will use setreuid(2) instead.
1492                 SKIP_SETREUID=yes
1493                 CHECKSHADOW="false"
1494                 # OpenBSD >= 3.0 supports BSD auth
1495                 if test -z "$with_bsdauth"; then
1496                     case "$OSREV" in
1497                     [0-2].*)
1498                         ;;
1499                     *)
1500                         AUTH_EXCL_DEF="BSD_AUTH"
1501                         ;;
1502                     esac
1503                 fi
1504                 : ${with_logincap='maybe'}
1505                 ;;
1506     *-*-*netbsd*)
1507                 # NetBSD has a real setreuid(2) starting with 1.3.2
1508                 case "$OSREV" in
1509                 0.9*|1.[012]*|1.3|1.3.1)
1510                     SKIP_SETREUID=yes
1511                     ;;
1512                 esac
1513                 CHECKSHADOW="false"
1514                 test -z "$with_pam" && AUTH_EXCL_DEF="PAM"
1515                 : ${with_logincap='maybe'}
1516                 ;;
1517     *-*-dragonfly*)
1518                 if test "$with_skey" = "yes"; then
1519                      SUDO_LIBS="${SUDO_LIBS} -lmd"
1520                 fi
1521                 CHECKSHADOW="false"
1522                 test -z "$with_pam" && AUTH_EXCL_DEF="PAM"
1523                 : ${with_logincap='yes'}
1524                 ;;
1525     *-*-*bsd*)
1526                 CHECKSHADOW="false"
1527                 ;;
1528     *-*-darwin*)
1529                 SKIP_SETREUID=yes
1530                 CHECKSHADOW="false"
1531                 test -z "$with_pam" && AUTH_EXCL_DEF="PAM"
1532                 : ${with_logincap='yes'}
1533                 ;;
1534     *-*-nextstep*)
1535                 # lockf() on is broken on the NeXT -- use flock instead
1536                 ac_cv_func_lockf=no
1537                 ac_cv_func_flock=yes
1538                 ;;
1539     *-*-*sysv4*)
1540                 : ${mansectsu='1m'}
1541                 : ${mansectform='4'}
1542                 : ${with_rpath='yes'}
1543                 ;;
1544     *-*-sysv*)
1545                 : ${mansectsu='1m'}
1546                 : ${mansectform='4'}
1547                 ;;
1548     *-gnu*)
1549                 OSDEFS="${OSDEFS} -D_GNU_SOURCE"
1550                 ;;
1551 esac
1552
1553 dnl
1554 dnl Check for mixing mutually exclusive and regular auth methods
1555 dnl
1556 AUTH_REG=${AUTH_REG# }
1557 AUTH_EXCL=${AUTH_EXCL# }
1558 if test -n "$AUTH_EXCL"; then
1559     set -- $AUTH_EXCL
1560     if test $# != 1; then
1561         AC_MSG_ERROR([More than one mutually exclusive authentication method specified: $AUTH_EXCL])
1562     fi
1563     if test -n "$AUTH_REG"; then
1564         AC_MSG_ERROR([Cannot mix mutually exclusive ($AUTH_EXCL) and regular ($AUTH_REG) authentication methods])
1565     fi
1566 fi
1567 dnl
1568 dnl Only one of S/Key and OPIE may be specified
1569 dnl
1570 if test X"${with_skey}${with_opie}" = X"yesyes"; then
1571     AC_MSG_ERROR(["cannot use both S/Key and OPIE"])
1572 fi
1573
1574 dnl
1575 dnl Use BSD-style man sections by default
1576 dnl
1577 : ${mansectsu='8'}
1578 : ${mansectform='5'}
1579
1580 dnl
1581 dnl Add in any libpaths or libraries specified via configure
1582 dnl
1583 if test -n "$with_libpath"; then
1584     for i in ${with_libpath}; do
1585         SUDO_APPEND_LIBPATH(LDFLAGS, [$i])
1586     done
1587 fi
1588 if test -n "$with_libraries"; then
1589     for i in ${with_libraries}; do
1590         case $i in
1591             -l*)        ;;
1592             *.a)        ;;
1593             *.o)        ;;
1594             *)  i="-l${i}";;
1595         esac
1596         LIBS="${LIBS} ${i}"
1597     done
1598 fi
1599
1600 dnl
1601 dnl C compiler checks (to be done after os checks)
1602 dnl
1603 AC_PROG_GCC_TRADITIONAL
1604 AC_C_CONST
1605 AC_C_VOLATILE
1606 dnl
1607 dnl Program checks
1608 dnl
1609 AC_PROG_YACC
1610 SUDO_PROG_MV
1611 SUDO_PROG_BSHELL
1612 if test -z "$with_sendmail"; then
1613     SUDO_PROG_SENDMAIL
1614 fi
1615 if test -z "$with_editor"; then
1616     SUDO_PROG_VI
1617 fi
1618 dnl
1619 dnl Header file checks
1620 dnl
1621 AC_HEADER_STDC
1622 AC_HEADER_DIRENT
1623 AC_HEADER_TIME
1624 AC_CHECK_HEADERS(malloc.h paths.h utime.h netgroup.h sys/sockio.h sys/bsdtypes.h sys/select.h)
1625 AC_CHECK_HEADERS([err.h], [], [AC_LIBOBJ(err)])
1626 dnl ultrix termio/termios are broken
1627 if test "$OS" != "ultrix"; then
1628     AC_SYS_POSIX_TERMIOS
1629     if test "$ac_cv_sys_posix_termios" = "yes"; then
1630         AC_DEFINE(HAVE_TERMIOS_H)
1631     else
1632         AC_CHECK_HEADERS(termio.h)
1633     fi
1634 fi
1635 if test ${with_logincap-'no'} != "no"; then
1636     AC_CHECK_HEADERS(login_cap.h, [
1637         case "$OS" in
1638             freebsd|netbsd)     SUDO_LIBS="${SUDO_LIBS} -lutil"
1639             ;;
1640         esac
1641     ])
1642 fi
1643 if test ${with_project-'no'} != "no"; then
1644     AC_CHECK_HEADER(project.h, AC_DEFINE(HAVE_PROJECT_H)
1645         [SUDO_LIBS="${SUDO_LIBS} -lproject"], -)
1646 fi
1647 dnl
1648 dnl typedef checks
1649 dnl
1650 AC_TYPE_MODE_T
1651 AC_TYPE_UID_T
1652 AC_CHECK_TYPES([sig_atomic_t], , [AC_DEFINE(sig_atomic_t, int)], [#include <sys/types.h>
1653 #include <signal.h>])
1654 AC_CHECK_TYPES([sigaction_t], [AC_DEFINE(HAVE_SIGACTION_T)], [], [#include <sys/types.h>
1655 #include <signal.h>])
1656 AC_CHECK_TYPE([struct timespec], [AC_DEFINE(HAVE_TIMESPEC)], [], [#include <sys/types.h>
1657 #if TIME_WITH_SYS_TIME
1658 # include <sys/time.h>
1659 #endif
1660 #include <time.h>])
1661 AC_CHECK_TYPES([struct in6_addr], [AC_DEFINE(HAVE_IN6_ADDR)], [], [#include <sys/types.h>
1662 #include <netinet/in.h>])
1663 SUDO_TYPE_SIZE_T
1664 SUDO_TYPE_SSIZE_T
1665 SUDO_TYPE_DEV_T
1666 SUDO_TYPE_INO_T
1667 SUDO_FULL_VOID
1668 SUDO_UID_T_LEN
1669 SUDO_TYPE_LONG_LONG
1670 SUDO_SOCK_SA_LEN
1671 dnl
1672 dnl only set RETSIGTYPE if it is not set already
1673 dnl
1674 case "$DEFS" in
1675     *"RETSIGTYPE"*)     ;;
1676     *)                  AC_TYPE_SIGNAL;;
1677 esac
1678 dnl
1679 dnl Function checks
1680 dnl
1681 AC_FUNC_GETGROUPS
1682 AC_CHECK_FUNCS(strchr strrchr memchr memcpy memset sysconf tzset \
1683                strftime setrlimit initgroups getgroups fstat gettimeofday \
1684                setlocale getaddrinfo)
1685 if test -z "$SKIP_SETRESUID"; then
1686     AC_CHECK_FUNCS(setresuid, [SKIP_SETREUID=yes])
1687 fi
1688 if test -z "$SKIP_SETREUID"; then
1689     AC_CHECK_FUNCS(setreuid, [SKIP_SETEUID=yes])
1690 fi
1691 if test -z "$SKIP_SETEUID"; then
1692     AC_CHECK_FUNCS(seteuid)
1693 fi
1694 if test X"$with_interfaces" != X"no"; then
1695     AC_CHECK_FUNCS(getifaddrs, [AC_CHECK_FUNCS(freeifaddrs)])
1696 fi
1697 if test -z "$BROKEN_GETCWD"; then
1698     AC_REPLACE_FUNCS(getcwd)
1699 fi
1700 AC_CHECK_FUNCS(glob, [AC_MSG_CHECKING(for GLOB_BRACE and GLOB_TILDE in glob.h)
1701 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <glob.h>]], [[int i = GLOB_BRACE | GLOB_TILDE; (void)i;]])], [AC_DEFINE(HAVE_EXTENDED_GLOB)
1702     AC_MSG_RESULT(yes)], [AC_LIBOBJ(glob)
1703     AC_MSG_RESULT(no)])], [AC_LIBOBJ(glob)])
1704 AC_CHECK_FUNCS(lockf flock, [break])
1705 AC_CHECK_FUNCS(waitpid wait3, [break])
1706 AC_CHECK_FUNCS(innetgr _innetgr, [AC_CHECK_FUNCS(getdomainname) [break]])
1707 AC_CHECK_FUNCS(lsearch, [], [AC_CHECK_LIB([compat], [lsearch], [AC_CHECK_HEADER([search.h], [AC_DEFINE(HAVE_LSEARCH)] [LIBS="${LIBS} -lcompat"], [AC_LIBOBJ(lsearch)], -)], [AC_LIBOBJ(lsearch)])])
1708 AC_CHECK_FUNCS(utimes, [AC_CHECK_FUNCS(futimes futimesat, [break])], [AC_CHECK_FUNCS(futime) AC_LIBOBJ(utimes)])
1709 SUDO_FUNC_FNMATCH([AC_DEFINE(HAVE_FNMATCH)], [AC_LIBOBJ(fnmatch)])
1710 SUDO_FUNC_ISBLANK
1711 AC_REPLACE_FUNCS(memrchr strerror strcasecmp sigaction strlcpy strlcat)
1712 AC_CHECK_FUNCS(closefrom, [], [AC_LIBOBJ(closefrom)
1713     AC_CHECK_DECL(F_CLOSEM, AC_DEFINE(HAVE_FCNTL_CLOSEM), [],
1714         [ #include <limits.h>
1715           #include <fcntl.h> ])
1716 ])
1717 AC_CHECK_FUNCS(mkstemp, [], [SUDO_OBJS="${SUDO_OBJS} mkstemp.o"
1718     AC_CHECK_FUNCS(random lrand48, [break])
1719 ])
1720 AC_CHECK_FUNCS(snprintf vsnprintf asprintf vasprintf, , [NEED_SNPRINTF=1])
1721 if test X"$ac_cv_type_struct_timespec" != X"no"; then
1722     AC_CHECK_MEMBER([struct stat.st_mtim], [AC_DEFINE(HAVE_ST_MTIM)]
1723         [AC_CHECK_MEMBER([struct stat.st_mtim.st__tim], AC_DEFINE(HAVE_ST__TIM))],
1724         [AC_CHECK_MEMBER([struct stat.st_mtimespec], AC_DEFINE([HAVE_ST_MTIMESPEC]))])
1725     AC_MSG_CHECKING([for two-parameter timespecsub])
1726     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
1727 #include <sys/time.h>]], [[struct timespec ts1, ts2;
1728 ts1.tv_sec = 1; ts1.tv_nsec = 0; ts2.tv_sec = 0; ts2.tv_nsec = 0;
1729 #ifndef timespecsub
1730 #error missing timespecsub
1731 #endif
1732 timespecsub(&ts1, &ts2);]])], [AC_DEFINE(HAVE_TIMESPECSUB2)
1733     AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)])
1734 fi
1735 dnl
1736 dnl Check for the dirfd function/macro.  If not found, look for dd_fd in DIR.
1737 dnl
1738 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
1739 #include <$ac_header_dirent>]], [[DIR *d; (void)dirfd(d);]])], [AC_DEFINE(HAVE_DIRFD)], [AC_TRY_LINK([#include <sys/types.h>
1740 #include <$ac_header_dirent>], [DIR d; memset(&d, 0, sizeof(d)); return(d.dd_fd);], [AC_DEFINE(HAVE_DD_FD)])])
1741 dnl
1742 dnl If NEED_SNPRINTF is set, add snprintf.c to LIBOBJS
1743 dnl (it contains snprintf, vsnprintf, asprintf, and vasprintf)
1744 dnl
1745 if test -n "$NEED_SNPRINTF"; then
1746     AC_LIBOBJ(snprintf)
1747 fi
1748 dnl
1749 dnl If socket(2) not in libc, check -lsocket and -linet
1750 dnl May need to link with *both* -lnsl and -lsocket due to unresolved symbols
1751 dnl In this case we look for main(), not socket() to avoid using a cached value
1752 dnl
1753 AC_CHECK_FUNC(socket, , [AC_CHECK_LIB(socket, socket, [NET_LIBS="${NET_LIBS} -lsocket"; LIBS="${LIBS} -lsocket"], AC_CHECK_LIB(inet, socket, [NET_LIBS="${NET_LIBS} -linet"; LIBS="${LIBS} -linet"], AC_MSG_WARN(unable to find socket() trying -lsocket -lnsl)
1754 AC_CHECK_LIB(socket, socket, [NET_LIBS="${NET_LIBS} -lsocket -lnsl"; LIBS="${LIBS} -lsocket -lnsl"], , -lnsl)))])
1755 dnl
1756 dnl If inet_addr(3) not in libc, check -lnsl and -linet
1757 dnl May need to link with *both* -lnsl and -lsocket due to unresolved symbols
1758 dnl
1759 AC_CHECK_FUNC(inet_addr, , [AC_CHECK_FUNC(__inet_addr, , AC_CHECK_LIB(nsl, inet_addr, [NET_LIBS="${NET_LIBS} -lnsl"; LIBS="${LIBS} -lnsl"], AC_CHECK_LIB(inet, inet_addr, [NET_LIBS="${NET_LIBS} -linet"; LIBS="${LIBS} -linet"], AC_MSG_WARN(unable to find inet_addr() trying -lsocket -lnsl)
1760 AC_CHECK_LIB(socket, inet_addr, [NET_LIBS="${NET_LIBS} -lsocket -lnsl"; LIBS="${LIBS} -lsocket -lnsl"], , -lnsl))))])
1761 dnl
1762 dnl If syslog(3) not in libc, check -lsocket, -lnsl and -linet
1763 dnl
1764 AC_CHECK_FUNC(syslog, , [AC_CHECK_LIB(socket, syslog, [NET_LIBS="${NET_LIBS} -lsocket"; LIBS="${LIBS} -lsocket"], AC_CHECK_LIB(nsl, syslog, [NET_LIBS="${NET_LIBS} -lnsl"; LIBS="${LIBS} -lnsl"], AC_CHECK_LIB(inet, syslog, [NET_LIBS="${NET_LIBS} -linet"; LIBS="${LIBS} -linet"])))])
1765 dnl
1766 dnl Bison and DCE use alloca(3), if not in libc, use the sudo one (from gcc)
1767 dnl (gcc includes its own alloca(3) but other compilers may not)
1768 dnl
1769 if test "$with_DCE" = "yes" -o "$ac_cv_prog_YACC" = "bison -y"; then
1770     AC_FUNC_ALLOCA
1771 fi
1772 dnl
1773 dnl Check for getprogname() or __progname
1774 dnl
1775 AC_CHECK_FUNCS(getprogname, , [
1776     AC_MSG_CHECKING([for __progname])
1777     AC_CACHE_VAL(sudo_cv___progname, [
1778     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[extern char *__progname; (void)puts(__progname);]])], [sudo_cv___progname=yes], [sudo_cv___progname=no])])
1779     if test "$sudo_cv___progname" = "yes"; then
1780         AC_DEFINE(HAVE___PROGNAME)
1781     else
1782         AC_LIBOBJ(getprogname)
1783     fi
1784     AC_MSG_RESULT($sudo_cv___progname)
1785 ])
1786
1787 dnl
1788 dnl Mutually exclusive auth checks come first, followed by
1789 dnl non-exclusive ones.  Note: passwd must be last of all!
1790 dnl
1791
1792 dnl
1793 dnl Convert default authentication methods to with_* if
1794 dnl no explicit authentication scheme was specified.
1795 dnl
1796 if test -z "${AUTH_EXCL}${AUTH_REG}" -a -n "$AUTH_EXCL_DEF"; then
1797     for auth in $AUTH_EXCL_DEF; do
1798         case $auth in
1799             AIX_AUTH)   with_aixauth=maybe;;
1800             BSD_AUTH)   with_bsdauth=maybe;;
1801             PAM)        with_pam=maybe;;
1802             SIA)        CHECKSIA=true;;
1803         esac
1804     done
1805 fi
1806
1807 dnl
1808 dnl PAM support.  Systems that use PAM by default set with_pam=default
1809 dnl and we do the actual tests here.
1810 dnl
1811 if test ${with_pam-"no"} != "no"; then
1812     dnl
1813     dnl Linux may need this
1814     dnl
1815     AC_CHECK_LIB([dl], [main], [SUDO_LIBS="${SUDO_LIBS} -lpam -ldl"], [SUDO_LIBS="${SUDO_LIBS} -lpam"])
1816     ac_cv_lib_dl=ac_cv_lib_dl_main
1817
1818     dnl
1819     dnl Some PAM implementations (MacOS X for example) put the PAM headers
1820     dnl in /usr/include/pam instead of /usr/include/security...
1821     dnl
1822     AC_CHECK_HEADERS([security/pam_appl.h] [pam/pam_appl.h], [with_pam=yes; break])
1823     if test "$with_pam" = "yes"; then
1824         AC_DEFINE(HAVE_PAM)
1825         AUTH_OBJS="$AUTH_OBJS pam.o";
1826         AUTH_EXCL=PAM
1827         AC_MSG_CHECKING(whether to use PAM session support)
1828         AC_ARG_ENABLE(pam_session,
1829         [  --disable-pam-session   Disable PAM session support],
1830             [ case "$enableval" in
1831                 yes)    AC_MSG_RESULT(yes)
1832                         ;;
1833                 no)             AC_MSG_RESULT(no)
1834                             AC_DEFINE(NO_PAM_SESSION)
1835                             ;;
1836                 *)              AC_MSG_RESULT(no)
1837                             AC_MSG_WARN([Ignoring unknown argument to --enable-pam-session: $enableval])
1838                             ;;
1839             esac], AC_MSG_RESULT(yes))
1840         case $host in
1841             *-*-linux*|*-*-solaris*)
1842                     AC_CHECK_FUNCS(dgettext, [],
1843                         [AC_CHECK_LIB(intl, dgettext, [LIBS="${LIBS} -lintl"]
1844                         [AC_DEFINE(HAVE_DGETTEXT)])])
1845                     ;;
1846         esac
1847     fi
1848 fi
1849
1850 dnl
1851 dnl AIX general authentication
1852 dnl If set to "maybe" only enable if no other exclusive method in use.
1853 dnl
1854 if test ${with_aixauth-'no'} != "no"; then
1855     if test X"$with_aixauth" != X"maybe" -o X"$AUTH_EXCL" = X""; then
1856         AC_MSG_NOTICE([using AIX general authentication])
1857         AC_DEFINE(HAVE_AIXAUTH)
1858         AUTH_OBJS="$AUTH_OBJS aix_auth.o";
1859         SUDO_LIBS="${SUDO_LIBS} -ls"
1860         AUTH_EXCL=AIX_AUTH
1861     fi
1862 fi
1863
1864 dnl
1865 dnl BSD authentication
1866 dnl If set to "maybe" only enable if no other exclusive method in use.
1867 dnl
1868 if test ${with_bsdauth-'no'} != "no"; then
1869     AC_CHECK_HEADER(bsd_auth.h, AC_DEFINE(HAVE_BSD_AUTH_H)
1870         [AUTH_OBJS="$AUTH_OBJS bsdauth.o"]
1871         [BSDAUTH_USAGE='[[-a auth_type]] ']
1872         [AUTH_EXCL=BSD_AUTH],
1873         [AC_MSG_ERROR([BSD authentication was specified but bsd_auth.h could not be found])])
1874 fi
1875
1876 dnl
1877 dnl SIA authentication for Tru64 Unix
1878 dnl
1879 if test ${CHECKSIA-'false'} = "true"; then
1880     AC_CHECK_FUNCS(sia_ses_init, [found=true], [found=false])
1881     if test "$found" = "true"; then
1882         AUTH_EXCL=SIA
1883         AUTH_OBJS="$AUTH_OBJS sia.o"
1884     fi
1885 fi
1886
1887 dnl
1888 dnl extra FWTK libs + includes
1889 dnl
1890 if test ${with_fwtk-'no'} != "no"; then
1891     if test "$with_fwtk" != "yes"; then
1892         SUDO_APPEND_LIBPATH(SUDO_LDFLAGS, [${with_fwtk}])
1893         CPPFLAGS="${CPPFLAGS} -I${with_fwtk}"
1894         with_fwtk=yes
1895     fi
1896     SUDO_LIBS="${SUDO_LIBS} -lauth -lfwall"
1897     AUTH_OBJS="$AUTH_OBJS fwtk.o"
1898 fi
1899
1900 dnl
1901 dnl extra SecurID lib + includes
1902 dnl
1903 if test ${with_SecurID-'no'} != "no"; then
1904     if test "$with_SecurID" != "yes"; then
1905         :
1906     elif test -d /usr/ace/examples; then
1907         with_SecurID=/usr/ace/examples
1908     else
1909         with_SecurID=/usr/ace
1910     fi
1911     CPPFLAGS="${CPPFLAGS} -I${with_SecurID}"
1912     _LDFLAGS="${LDFLAGS}"
1913     SUDO_APPEND_LIBPATH(LDFLAGS, [${with_SecurID}])
1914     #
1915     # Determine whether to use the new or old SecurID API
1916     #
1917     AC_CHECK_LIB(aceclnt, SD_Init,
1918         [
1919             AUTH_OBJS="$AUTH_OBJS securid5.o";
1920             SUDO_LIBS="${SUDO_LIBS} -laceclnt -lpthread"
1921         ]
1922         [
1923             SUDO_APPEND_LIBPATH(SUDO_LDFLAGS, [${with_SecurID}])
1924         ], [
1925             AUTH_OBJS="$AUTH_OBJS securid.o";
1926             SUDO_LIBS="${SUDO_LIBS} ${with_SecurID}/sdiclient.a"
1927         ],
1928         [
1929             -lpthread
1930         ]
1931     )
1932     LDFLAGS="${_LDFLAGS}"
1933 fi
1934
1935 dnl
1936 dnl Non-mutually exclusive auth checks come next.
1937 dnl Note: passwd must be last of all!
1938 dnl
1939
1940 dnl
1941 dnl Convert default authentication methods to with_* if
1942 dnl no explicit authentication scheme was specified.
1943 dnl
1944 if test -z "${AUTH_EXCL}" -a -n "$AUTH_DEF"; then
1945     for auth in $AUTH_DEF; do
1946         case $auth in
1947             passwd)     : ${with_passwd='maybe'};;
1948         esac
1949     done
1950 fi
1951
1952 dnl
1953 dnl Kerberos IV
1954 dnl
1955 if test ${with_kerb4-'no'} != "no"; then
1956     AC_DEFINE(HAVE_KERB4)
1957     dnl
1958     dnl Use the specified directory, if any, else search for correct inc dir
1959     dnl
1960     O_LDFLAGS="$LDFLAGS"
1961     if test "$with_kerb4" = "yes"; then
1962         found=no
1963         O_CPPFLAGS="$CPPFLAGS"
1964         for dir in "" "kerberosIV/" "krb4/" "kerberos4/" "kerberosv4/"; do
1965             CPPFLAGS="$O_CPPFLAGS -I/usr/include/${dir}"
1966             AC_PREPROC_IFELSE([#include <krb.h>], [found=yes; break])
1967         done
1968         test X"$found" = X"no" && CPPFLAGS="$O_CPPFLAGS"
1969     else
1970         SUDO_APPEND_LIBPATH(LDFLAGS, [${with_kerb4}/lib])
1971         SUDO_APPEND_LIBPATH(SUDO_LDFLAGS, [${with_kerb4}/lib])
1972         CPPFLAGS="$CPPFLAGS -I${with_kerb4}/include"
1973         AC_CHECK_HEADER([krb.h], [found=yes], [found=no])
1974     fi
1975     if test X"$found" = X"no"; then
1976         AC_MSG_WARN([Unable to locate Kerberos IV include files, you will have to edit the Makefile and add -I/path/to/krb/includes to CPPFLAGS])
1977     fi
1978
1979     dnl
1980     dnl Check for -ldes vs. -ldes425
1981     dnl
1982     AC_CHECK_LIB(des, des_cbc_encrypt, [K4LIBS="-ldes"], [
1983         AC_CHECK_LIB(des425, des_cbc_encrypt, [K4LIBS="-ldes425"], [K4LIBS=""])
1984     ])
1985     dnl
1986     dnl Try to determine whether we have KTH or MIT/CNS Kerberos IV
1987     dnl
1988     AC_MSG_CHECKING(whether we are using KTH Kerberos IV)
1989     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <krb.h>]], [[const char *tmp = krb4_version;]])], [
1990             AC_MSG_RESULT(yes)
1991             K4LIBS="${K4LIBS} -lcom_err"
1992             AC_CHECK_LIB(roken, main, [K4LIBS="${K4LIBS} -lroken"])
1993         ], [
1994             AC_MSG_RESULT(no)
1995         ]
1996     )
1997     dnl
1998     dnl The actual Kerberos IV lib might be -lkrb or -lkrb4
1999     dnl
2000     AC_CHECK_LIB(krb, main, [K4LIBS="-lkrb $K4LIBS"], [
2001         AC_CHECK_LIB(krb4, main, [K4LIBS="-lkrb4 $K4LIBS"],
2002             [K4LIBS="-lkrb $K4LIBS"]
2003             [AC_MSG_WARN([Unable to locate Kerberos IV libraries, you will have to edit the Makefile and add -L/path/to/krb/libs to SUDO_LDFLAGS and possibly add Kerberos libs to SUDO_LIBS])]
2004         , [$K4LIBS])
2005     ], [$K4LIBS])
2006     LDFLAGS="$O_LDFLAGS"
2007     SUDO_LIBS="${SUDO_LIBS} $K4LIBS"
2008     AUTH_OBJS="$AUTH_OBJS kerb4.o"
2009 fi
2010
2011 dnl
2012 dnl Kerberos V
2013 dnl There is an easy way and a hard way...
2014 dnl
2015 if test ${with_kerb5-'no'} != "no"; then
2016     AC_CHECK_PROG(KRB5CONFIG, krb5-config, yes, "")
2017     if test -n "$KRB5CONFIG"; then
2018         AC_DEFINE(HAVE_KERB5)
2019         AUTH_OBJS="$AUTH_OBJS kerb5.o"
2020         CPPFLAGS="$CPPFLAGS `krb5-config --cflags`"
2021         SUDO_LIBS="$SUDO_LIBS `krb5-config --libs`"
2022         dnl
2023         dnl Try to determine whether we have Heimdal or MIT Kerberos
2024         dnl
2025         AC_MSG_CHECKING(whether we are using Heimdal)
2026         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <krb5.h>]], [[const char *tmp = heimdal_version;]])], [
2027                 AC_MSG_RESULT(yes)
2028                 AC_DEFINE(HAVE_HEIMDAL)
2029             ], [
2030                 AC_MSG_RESULT(no)
2031             ]
2032         )
2033     fi
2034 fi
2035 if test ${with_kerb5-'no'} != "no" -a -z "$KRB5CONFIG"; then
2036     AC_DEFINE(HAVE_KERB5)
2037     dnl
2038     dnl Use the specified directory, if any, else search for correct inc dir
2039     dnl
2040     if test "$with_kerb5" = "yes"; then
2041         found=no
2042         O_CPPFLAGS="$CPPFLAGS"
2043         for dir in "" "kerberosV/" "krb5/" "kerberos5/" "kerberosv5/"; do
2044             CPPFLAGS="$O_CPPFLAGS -I/usr/include/${dir}"
2045             AC_PREPROC_IFELSE([#include <krb5.h>], [found=yes; break])
2046         done
2047         if test X"$found" = X"no"; then
2048             CPPFLAGS="$O_CPPFLAGS"
2049             AC_MSG_WARN([Unable to locate Kerberos V include files, you will have to edit the Makefile and add -I/path/to/krb/includes to CPPFLAGS])
2050         fi
2051     else
2052         dnl XXX - try to include krb5.h here too
2053         SUDO_APPEND_LIBPATH(SUDO_LDFLAGS, [${with_kerb5}/lib])
2054         CPPFLAGS="$CPPFLAGS -I${with_kerb5}/include"
2055     fi
2056
2057     dnl
2058     dnl Try to determine whether we have Heimdal or MIT Kerberos
2059     dnl
2060     AC_MSG_CHECKING(whether we are using Heimdal)
2061     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <krb5.h>]], [[const char *tmp = heimdal_version;]])], [
2062             AC_MSG_RESULT(yes)
2063             AC_DEFINE(HAVE_HEIMDAL)
2064             SUDO_LIBS="${SUDO_LIBS} -lkrb5 -lcrypto -ldes -lcom_err -lasn1"
2065             AC_CHECK_LIB(roken, main, [SUDO_LIBS="${SUDO_LIBS} -lroken"])
2066         ], [
2067             AC_MSG_RESULT(no)
2068             SUDO_LIBS="${SUDO_LIBS} -lkrb5 -lk5crypto -lcom_err"
2069             AC_CHECK_LIB(krb5support, main, [SUDO_LIBS="${SUDO_LIBS} -lkrb5support,"])
2070     ])
2071     AUTH_OBJS="$AUTH_OBJS kerb5.o"
2072     _LIBS="$LIBS"
2073     LIBS="${LIBS} ${SUDO_LIBS}"
2074     AC_CHECK_FUNCS(krb5_verify_user krb5_init_secure_context)
2075     LIBS="$_LIBS"
2076 fi
2077
2078 dnl
2079 dnl extra AFS libs and includes
2080 dnl
2081 if test ${with_AFS-'no'} = "yes"; then
2082
2083     # looks like the "standard" place for AFS libs is /usr/afsws/lib
2084     AFSLIBDIRS="/usr/lib/afs /usr/afsws/lib /usr/afsws/lib/afs"
2085     for i in $AFSLIBDIRS; do
2086         if test -d ${i}; then
2087             SUDO_APPEND_LIBPATH(SUDO_LDFLAGS, [$i])
2088             FOUND_AFSLIBDIR=true
2089         fi
2090     done
2091     if test -z "$FOUND_AFSLIBDIR"; then
2092         AC_MSG_WARN([Unable to locate AFS libraries, you will have to edit the Makefile and add -L/path/to/afs/libs to SUDO_LDFLAGS or rerun configure with the --with-libpath options.])
2093     fi
2094
2095     # Order is important here.  Note that we build AFS_LIBS from right to left
2096     # since AFS_LIBS may be initialized with BSD compat libs that must go last
2097     AFS_LIBS="-laudit ${AFS_LIBS}"
2098     for i in $AFSLIBDIRS; do
2099         if test -f ${i}/util.a; then
2100             AFS_LIBS="${i}/util.a ${AFS_LIBS}"
2101             FOUND_UTIL_A=true
2102             break;
2103         fi
2104     done
2105     if test -z "$FOUND_UTIL_A"; then
2106         AFS_LIBS="-lutil ${AFS_LIBS}"
2107     fi
2108     AFS_LIBS="-lkauth -lprot -lubik -lauth -lrxkad -lsys -ldes -lrx -llwp -lcom_err ${AFS_LIBS}"
2109
2110     # AFS includes may live in /usr/include on some machines...
2111     for i in /usr/afsws/include; do
2112         if test -d ${i}; then
2113             CPPFLAGS="${CPPFLAGS} -I${i}"
2114             FOUND_AFSINCDIR=true
2115         fi
2116     done
2117
2118     if test -z "$FOUND_AFSLIBDIR"; then
2119         AC_MSG_WARN([Unable to locate AFS include dir, you may have to edit the Makefile and add -I/path/to/afs/includes to CPPFLAGS or rerun configure with the --with-incpath options.])
2120     fi
2121
2122     AUTH_OBJS="$AUTH_OBJS afs.o"
2123 fi
2124
2125 dnl
2126 dnl extra DCE obj + lib
2127 dnl Order of libs in HP-UX 10.x is important, -ldce must be last.
2128 dnl
2129 if test ${with_DCE-'no'} = "yes"; then
2130     DCE_OBJS="${DCE_OBJS} dce_pwent.o"
2131     SUDO_LIBS="${SUDO_LIBS} -ldce"
2132     AUTH_OBJS="$AUTH_OBJS dce.o"
2133 fi
2134
2135 dnl
2136 dnl extra S/Key lib and includes
2137 dnl
2138 if test ${with_skey-'no'} = "yes"; then
2139     O_LDFLAGS="$LDFLAGS"
2140     if test "$with_skey" != "yes"; then
2141         CPPFLAGS="${CPPFLAGS} -I${with_skey}/include"
2142         SUDO_APPEND_LIBPATH(LDFLAGS, [${with_skey}/lib])
2143         SUDO_APPEND_LIBPATH(SUDO_LDFLAGS, [${with_skey}/lib])
2144         AC_PREPROC_IFELSE([#include <skey.h>], [found=yes], [found=no])
2145     else
2146         found=no
2147         O_CPPFLAGS="$CPPFLAGS"
2148         for dir in "" "/usr/local" "/usr/contrib"; do
2149             test -n "$dir" && CPPFLAGS="$O_CPPFLAGS -I${dir}/include"
2150             AC_PREPROC_IFELSE([#include <skey.h>], [found=yes; break])
2151         done
2152         if test "$found" = "no" -o -z "$dir"; then
2153             CPPFLAGS="$O_CPPFLAGS"
2154         else
2155             SUDO_APPEND_LIBPATH(LDFLAGS, [${dir}/lib])
2156             SUDO_APPEND_LIBPATH(SUDO_LDFLAGS, [${dir}/lib])
2157         fi
2158     fi
2159     if test "$found" = "no"; then
2160         AC_MSG_WARN([Unable to locate skey.h, you will have to edit the Makefile and add -I/path/to/skey/includes to CPPFLAGS])
2161     fi
2162     AC_CHECK_LIB(skey, main, [found=yes], [AC_MSG_WARN([Unable to locate libskey.a, you will have to edit the Makefile and add -L/path/to/skey/lib to SUDO_LDFLAGS])])
2163     AC_CHECK_LIB(skey, skeyaccess, AC_DEFINE(HAVE_SKEYACCESS))
2164     LDFLAGS="$O_LDFLAGS"
2165     SUDO_LIBS="${SUDO_LIBS} -lskey"
2166     AUTH_OBJS="$AUTH_OBJS rfc1938.o"
2167 fi
2168
2169 dnl
2170 dnl extra OPIE lib and includes
2171 dnl
2172 if test ${with_opie-'no'} = "yes"; then
2173     O_LDFLAGS="$LDFLAGS"
2174     if test "$with_opie" != "yes"; then
2175         CPPFLAGS="${CPPFLAGS} -I${with_opie}/include"
2176         SUDO_APPEND_LIBPATH(LDFLAGS, [${with_opie}/lib])
2177         SUDO_APPEND_LIBPATH(SUDO_LDFLAGS, [${with_opie}/lib])
2178         AC_PREPROC_IFELSE([#include <opie.h>], [found=yes], [found=no])
2179     else
2180         found=no
2181         O_CPPFLAGS="$CPPFLAGS"
2182         for dir in "" "/usr/local" "/usr/contrib"; do
2183             test -n "$dir" && CPPFLAGS="$O_CPPFLAGS -I${dir}/include"
2184             AC_PREPROC_IFELSE([#include <opie.h>], [found=yes; break])
2185         done
2186         if test "$found" = "no" -o -z "$dir"; then
2187             CPPFLAGS="$O_CPPFLAGS"
2188         else
2189             SUDO_APPEND_LIBPATH(LDFLAGS, [${dir}/lib])
2190             SUDO_APPEND_LIBPATH(SUDO_LDFLAGS, [${dir}/lib])
2191         fi
2192     fi
2193     if test "$found" = "no"; then
2194         AC_MSG_WARN([Unable to locate opie.h, you will have to edit the Makefile and add -I/path/to/opie/includes to CPPFLAGS])
2195     fi
2196     AC_CHECK_LIB(opie, main, [found=yes], [AC_MSG_WARN([Unable to locate libopie.a, you will have to edit the Makefile and add -L/path/to/opie/lib to SUDO_LDFLAGS])])
2197     LDFLAGS="$O_LDFLAGS"
2198     SUDO_LIBS="${SUDO_LIBS} -lopie"
2199     AUTH_OBJS="$AUTH_OBJS rfc1938.o"
2200 fi
2201
2202 dnl
2203 dnl Check for shadow password routines if we have not already done so.
2204 dnl If there is a specific list of functions to check we do that first.
2205 dnl Otherwise, we check for SVR4-style and then SecureWare-style.
2206 dnl
2207 if test ${with_passwd-'no'} != "no"; then
2208     dnl
2209     dnl if crypt(3) not in libc, look elsewhere
2210     dnl
2211     if test -z "$LIB_CRYPT" -a "$with_passwd" != "no"; then
2212         AC_SEARCH_LIBS([crypt], [crypt crypt_d ufc], [test -n "$ac_lib" && SUDO_LIBS="${SUDO_LIBS} $ac_res"])
2213     fi
2214
2215     if test "$CHECKSHADOW" = "true" -a -n "$shadow_funcs"; then
2216         _LIBS="$LIBS"
2217         LIBS="$LIBS $shadow_libs"
2218         found=no
2219         AC_CHECK_FUNCS($shadow_funcs, [found=yes])
2220         if test "$found" = "yes"; then
2221             SUDO_LIBS="$SUDO_LIBS $shadow_libs"
2222         elif test -n "$shadow_libs_optional"; then
2223             LIBS="$LIBS $shadow_libs_optional"
2224             AC_CHECK_FUNCS($shadow_funcs, [found=yes])
2225             if test "$found" = "yes"; then
2226                 SUDO_LIBS="$SUDO_LIBS $shadow_libs $shadow_libs_optional"
2227             fi
2228         fi
2229         if test "$found" = "yes"; then
2230             case "$shadow_funcs" in
2231                 *getprpwnam*) SECUREWARE=1;;
2232             esac
2233             test -n "$shadow_defs" && OSDEFS="${OSDEFS} $shadow_defs"
2234         else
2235             LIBS="$_LIBS"
2236         fi
2237         CHECKSHADOW=false
2238     fi
2239     if test "$CHECKSHADOW" = "true"; then
2240         AC_SEARCH_LIBS([getspnam], [gen], [AC_DEFINE(HAVE_GETSPNAM)] [CHECKSHADOW=false; test -n "$ac_lib" && SUDO_LIBS="${SUDO_LIBS} $ac_res"])
2241     fi
2242     if test "$CHECKSHADOW" = "true"; then
2243         AC_SEARCH_LIBS([getprpwnam], [sec security prot], [AC_DEFINE(HAVE_GETPRPWNAM)] [CHECKSHADOW=false; SECUREWARE=1; test -n "$ac_lib" && SUDO_LIBS="${SUDO_LIBS} $ac_res"])
2244     fi
2245     if test -n "$SECUREWARE"; then
2246         AC_CHECK_FUNCS(bigcrypt set_auth_parameters initprivs)
2247         AUTH_OBJS="$AUTH_OBJS secureware.o"
2248     fi
2249 fi
2250
2251 dnl
2252 dnl extra lib and .o file for LDAP support
2253 dnl
2254 if test ${with_ldap-'no'} != "no"; then
2255     _LDFLAGS="$LDFLAGS"
2256     if test "$with_ldap" != "yes"; then
2257         SUDO_APPEND_LIBPATH(SUDO_LDFLAGS, [${with_ldap}/lib])
2258         SUDO_APPEND_LIBPATH(LDFLAGS, [${with_ldap}/lib])
2259         CPPFLAGS="${CPPFLAGS} -I${with_ldap}/include"
2260         with_ldap=yes
2261     fi
2262     SUDO_OBJS="${SUDO_OBJS} ldap.o"
2263
2264     AC_MSG_CHECKING([for LDAP libraries])
2265     LDAP_LIBS=""
2266     _LIBS="$LIBS"
2267     found=no
2268     for l in -lldap -llber '-lssl -lcrypto'; do
2269         LIBS="${LIBS} $l"
2270         LDAP_LIBS="${LDAP_LIBS} $l"
2271         AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
2272         #include <lber.h>
2273         #include <ldap.h>]], [[(void)ldap_init(0, 0)]])], [found=yes; break])
2274     done
2275     dnl if nothing linked just try with -lldap
2276     if test "$found" = "no"; then
2277         LDAP_LIBS=" -lldap"
2278         AC_MSG_RESULT([not found, using -lldap])
2279     else
2280         AC_MSG_RESULT([$LDAP_LIBS])
2281     fi
2282     dnl try again w/o explicitly including lber.h
2283     AC_MSG_CHECKING([whether lber.h is needed])
2284     AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
2285     #include <ldap.h>]], [[(void)ldap_init(0, 0)]])], [AC_MSG_RESULT([no])], [
2286     AC_MSG_RESULT([yes])
2287     AC_DEFINE(HAVE_LBER_H)])
2288
2289     AC_CHECK_FUNCS(ldap_initialize ldap_start_tls_s ldapssl_init)
2290
2291     SUDO_LIBS="${SUDO_LIBS}${LDAP_LIBS}"
2292     LIBS="$_LIBS"
2293     LDFLAGS="$_LDFLAGS"
2294     # XXX - OpenLDAP has deprecated ldap_get_values()
2295     CPPFLAGS="${CPPFLAGS} -DLDAP_DEPRECATED"
2296 fi
2297
2298 dnl
2299 dnl Add $blibpath to SUDO_LDFLAGS if specified by the user or if we
2300 dnl added -L dirpaths to SUDO_LDFLAGS.
2301 dnl
2302 if test -n "$blibpath"; then
2303     if test -n "$blibpath_add"; then
2304         SUDO_LDFLAGS="$SUDO_LDFLAGS -Wl,-blibpath:${blibpath}${blibpath_add}"
2305     elif test -n "$with_blibpath" -a "$with_blibpath" != "yes"; then
2306         SUDO_LDFLAGS="$SUDO_LDFLAGS -Wl,-blibpath:${blibpath}"
2307     fi
2308 fi
2309
2310 dnl
2311 dnl Check for log file and timestamp locations
2312 dnl
2313 SUDO_LOGFILE
2314 SUDO_TIMEDIR
2315
2316 dnl
2317 dnl Use passwd (and secureware) auth modules?
2318 dnl
2319 case "$with_passwd" in
2320 yes|maybe)
2321     AUTH_OBJS="$AUTH_OBJS passwd.o"
2322     ;;
2323 *)
2324     AC_DEFINE(WITHOUT_PASSWD)
2325     if test -z "$AUTH_OBJS"; then
2326         AC_MSG_ERROR([no authentication methods defined.])
2327     fi
2328     ;;
2329 esac
2330 AUTH_OBJS=${AUTH_OBJS# }
2331 _AUTH=`echo "$AUTH_OBJS" | sed 's/\.o//g'`
2332 AC_MSG_NOTICE([using the following authentication methods: $_AUTH])
2333
2334 dnl
2335 dnl LIBS may contain duplicates from SUDO_LIBS or NET_LIBS so prune it.
2336 dnl
2337 if test -n "$LIBS"; then
2338     L="$LIBS"
2339     LIBS=
2340     for l in ${L}; do
2341         dupe=0
2342         for sl in ${SUDO_LIBS} ${NET_LIBS}; do
2343             test $l = $sl && dupe=1
2344         done
2345         test $dupe = 0 && LIBS="${LIBS} $l"
2346     done
2347 fi
2348
2349 dnl
2350 dnl Set exec_prefix
2351 dnl
2352 test "$exec_prefix" = "NONE" && exec_prefix='$(prefix)'
2353
2354 dnl
2355 dnl Defer setting _PATH_SUDO_NOEXEC until after exec_prefix is set
2356 dnl XXX - this is gross!
2357 dnl
2358 if test "$with_noexec" != "no"; then
2359     PROGS="${PROGS} sudo_noexec.la"
2360     INSTALL_NOEXEC="install-noexec"
2361
2362     oexec_prefix="$exec_prefix"
2363     if test "$exec_prefix" = '$(prefix)'; then
2364         if test "$prefix" = "NONE"; then
2365             exec_prefix="$ac_default_prefix"
2366         else
2367             exec_prefix="$prefix"
2368         fi
2369     fi
2370     eval noexec_file="$with_noexec"
2371     AC_DEFINE_UNQUOTED(_PATH_SUDO_NOEXEC, "$noexec_file", [The fully qualified pathname of sudo_noexec.so])
2372     exec_prefix="$oexec_prefix"
2373 fi
2374
2375 dnl
2376 dnl Substitute into the Makefile and man pages
2377 dnl
2378 AC_CONFIG_FILES([Makefile sudo.man visudo.man sudoers.man])
2379 AC_OUTPUT
2380
2381 dnl
2382 dnl Spew any text the user needs to know about
2383 dnl
2384 if test "$with_pam" = "yes"; then
2385     case $host in
2386         *-*-linux*)
2387             AC_MSG_NOTICE([You will need to customize sample.pam and install it as /etc/pam.d/sudo])
2388             ;;
2389     esac
2390 fi
2391
2392 dnl
2393 dnl Autoheader templates
2394 dnl
2395 AH_TEMPLATE(BROKEN_SYSLOG, [Define to 1 if the `syslog' function returns a non-zero int to denote failure.])
2396 AH_TEMPLATE(CLASSIC_INSULTS, [Define to 1 if you want the insults from the "classic" version sudo.])
2397 AH_TEMPLATE(CSOPS_INSULTS, [Define to 1 if you want insults culled from the twisted minds of CSOps.])
2398 AH_TEMPLATE(DONT_LEAK_PATH_INFO, [Define to 1 if you want sudo to display "command not allowed" instead of "command not found" when a command cannot be found.])
2399 AH_TEMPLATE(ENV_EDITOR, [Define to 1 if you want visudo to honor the EDITOR and VISUAL env variables.])
2400 AH_TEMPLATE(FQDN, [Define to 1 if you want to require fully qualified hosts in sudoers.])
2401 AH_TEMPLATE(GOONS_INSULTS, [Define to 1 if you want insults from the "Goon Show".])
2402 AH_TEMPLATE(HAL_INSULTS, [Define to 1 if you want 2001-like insults.])
2403 AH_TEMPLATE(HAVE_AFS, [Define to 1 if you use AFS.])
2404 AH_TEMPLATE(HAVE_AIXAUTH, [Define to 1 if you use AIX general authentication.])
2405 AH_TEMPLATE(HAVE_BSD_AUTH_H, [Define to 1 if you use BSD authentication.])
2406 AH_TEMPLATE(HAVE_DCE, [Define to 1 if you use OSF DCE.])
2407 AH_TEMPLATE(HAVE_DD_FD, [Define to 1 if your `DIR' contains dd_fd.])
2408 AH_TEMPLATE(HAVE_DIRFD, [Define to 1 if you have the `dirfd' function or macro.])
2409 AH_TEMPLATE(HAVE_DGETTEXT, [Define to 1 if you have the `dgettext' function.])
2410 AH_TEMPLATE(HAVE_DISPCRYPT, [Define to 1 if you have the `dispcrypt' function.])
2411 AH_TEMPLATE(HAVE_EXTENDED_GLOB, [Define to 1 if your glob.h defines the GLOB_BRACE and GLOB_TILDE flags.])
2412 AH_TEMPLATE(HAVE_FCNTL_CLOSEM, [Define to 1 if your system has the F_CLOSEM fcntl.])
2413 AH_TEMPLATE(HAVE_FNMATCH, [Define to 1 if you have the `fnmatch' function.])
2414 AH_TEMPLATE(HAVE_FWTK, [Define to 1 if you use the FWTK authsrv daemon.])
2415 AH_TEMPLATE(HAVE_GETAUTHUID, [Define to 1 if you have the `getauthuid' function. (ULTRIX 4.x  shadow passwords)])
2416 AH_TEMPLATE(HAVE_GETPRPWNAM, [Define to 1 if you have the `getprpwnam' function.  (SecureWare-style shadow passwords)])
2417 AH_TEMPLATE(HAVE_GETPWANAM, [Define to 1 if you have the `getpwanam' function. (SunOS 4.x shadow passwords)])
2418 AH_TEMPLATE(HAVE_GETSPNAM, [Define to 1 if you have the `getspnam' function (SVR4-style shadow passwords)])
2419 AH_TEMPLATE(HAVE_GETSPWUID, [Define to 1 if you have the `getspwuid' function. (HP-UX <= 9.X shadow passwords)])
2420 AH_TEMPLATE(HAVE_HEIMDAL, [Define to 1 if your Kerberos is Heimdal.])
2421 AH_TEMPLATE(HAVE_IN6_ADDR, [Define to 1 if <netinet/in.h> contains struct in6_addr.])
2422 AH_TEMPLATE(HAVE_ISCOMSEC, [Define to 1 if you have the `iscomsec' function. (HP-UX >= 10.x check for shadow enabled)])
2423 AH_TEMPLATE(HAVE_ISSECURE, [Define to 1 if you have the `issecure' function. (SunOS 4.x check for shadow enabled)])
2424 AH_TEMPLATE(HAVE_KERB4, [Define to 1 if you use Kerberos IV.])
2425 AH_TEMPLATE(HAVE_KERB5, [Define to 1 if you use Kerberos V.])
2426 AH_TEMPLATE(HAVE_LBER_H, [Define to 1 if your LDAP needs <lber.h>. (OpenLDAP does not)])
2427 AH_TEMPLATE(HAVE_LDAP, [Define to 1 if you use LDAP for sudoers.])
2428 AH_TEMPLATE(HAVE_OPIE, [Define to 1 if you use NRL OPIE.])
2429 AH_TEMPLATE(HAVE_PAM, [Define to 1 if you use PAM authentication.])
2430 AH_TEMPLATE(HAVE_PROJECT_H, [Define to 1 if you have the <project.h> header file.])
2431 AH_TEMPLATE(HAVE_SECURID, [Define to 1 if you use SecurID for authentication.])
2432 AH_TEMPLATE(HAVE_SIA, [Define to 1 if you use SIA authentication.])
2433 AH_TEMPLATE(HAVE_SIGACTION_T, [Define to 1 if <signal.h> has the sigaction_t typedef.])
2434 AH_TEMPLATE(HAVE_SKEY, [Define to 1 if you use S/Key.])
2435 AH_TEMPLATE(HAVE_SKEYACCESS, [Define to 1 if your S/Key library has skeyaccess().])
2436 AH_TEMPLATE(HAVE_ST__TIM, [Define to 1 if your struct stat uses an st__tim union])
2437 AH_TEMPLATE(HAVE_ST_MTIM, [Define to 1 if your struct stat has an st_mtim member])
2438 AH_TEMPLATE(HAVE_ST_MTIMESPEC, [Define to 1 if your struct stat has an st_mtimespec member])
2439 AH_TEMPLATE(HAVE_TERMIOS_H, [Define to 1 if you have the <termios.h> header file and the `tcgetattr' function.])
2440 AH_TEMPLATE(HAVE_TIMESPEC, [Define to 1 if you have struct timespec in sys/time.h])
2441 AH_TEMPLATE(HAVE_TIMESPECSUB2, [Define to 1 if you have a timespecsub macro or function that takes two arguments (not three)])
2442 AH_TEMPLATE(HAVE___PROGNAME, [Define to 1 if your crt0.o defines the __progname symbol for you.])
2443 AH_TEMPLATE(HOST_IN_LOG, [Define to 1 if you want the hostname to be entered into the log file.])
2444 AH_TEMPLATE(IGNORE_DOT_PATH, [Define to 1 if you want to ignore '.' and empty PATH elements])
2445 AH_TEMPLATE(LOGGING, [Define to SLOG_SYSLOG, SLOG_FILE, or SLOG_BOTH.])
2446 AH_TEMPLATE(LONG_OTP_PROMPT, [Define to 1 if you want a two line OTP (S/Key or OPIE) prompt.])
2447 AH_TEMPLATE(NO_AUTHENTICATION, [Define to 1 if you don't want sudo to prompt for a password by default.])
2448 AH_TEMPLATE(NO_LECTURE, [Define to 1 if you don't want users to get the lecture the first they user sudo.])
2449 AH_TEMPLATE(NO_ROOT_MAILER, [Define to avoid runing the mailer as root.])
2450 AH_TEMPLATE(NO_ROOT_SUDO, [Define to 1 if root should not be allowed to use sudo.])
2451 AH_TEMPLATE(PC_INSULTS, [Define to 1 to replace politically incorrect insults with less offensive ones.])
2452 AH_TEMPLATE(SECURE_PATH, [Define to 1 to override the user's path with a built-in one.])
2453 AH_TEMPLATE(SEND_MAIL_WHEN_NOT_OK, [Define to 1 to send mail when the user is not allowed to run a command.])
2454 AH_TEMPLATE(SEND_MAIL_WHEN_NO_HOST, [Define to 1 to send mail when the user is not allowed to run sudo on this host.])
2455 AH_TEMPLATE(SEND_MAIL_WHEN_NO_USER, [Define to 1 to send mail when the user is not in the sudoers file.])
2456 AH_TEMPLATE(SHELL_IF_NO_ARGS, [Define to 1 if you want sudo to start a shell if given no arguments.])
2457 AH_TEMPLATE(SHELL_SETS_HOME, [Define to 1 if you want sudo to set $HOME in shell mode.])
2458 AH_TEMPLATE(STUB_LOAD_INTERFACES, [Define to 1 if the code in interfaces.c does not compile for you.])
2459 AH_TEMPLATE(USE_INSULTS, [Define to 1 if you want to insult the user for entering an incorrect password.])
2460 AH_TEMPLATE(USE_STOW, [Define to 1 if you use GNU stow packaging.])
2461 AH_TEMPLATE(USE_TTY_TICKETS, [Define to 1 if you want a different ticket file for each tty.])
2462 AH_TEMPLATE(WITHOUT_PASSWD, [Define to avoid using the passwd/shadow file for authentication.])
2463 AH_TEMPLATE(sig_atomic_t, [Define to `int' if <signal.h> does not define.])
2464
2465 dnl
2466 dnl Bits to copy verbatim into config.h.in
2467 dnl
2468 AH_TOP([#ifndef _SUDO_CONFIG_H
2469 #define _SUDO_CONFIG_H])
2470
2471 AH_BOTTOM([/*
2472  * Macros to pull sec and nsec parts of mtime from struct stat.
2473  * We need to be able to convert between timeval and timespec
2474  * so the last 3 digits of tv_nsec are not significant.
2475  */
2476 #ifdef HAVE_ST_MTIM
2477 # ifdef HAVE_ST__TIM
2478 #  define mtim_getsec(_x)       ((_x).st_mtim.st__tim.tv_sec)
2479 #  define mtim_getnsec(_x)      (((_x).st_mtim.st__tim.tv_nsec / 1000) * 1000)
2480 # else
2481 #  define mtim_getsec(_x)       ((_x).st_mtim.tv_sec)
2482 #  define mtim_getnsec(_x)      (((_x).st_mtim.tv_nsec / 1000) * 1000)
2483 # endif
2484 #else
2485 # ifdef HAVE_ST_MTIMESPEC
2486 #  define mtim_getsec(_x)       ((_x).st_mtimespec.tv_sec)
2487 #  define mtim_getnsec(_x)      (((_x).st_mtimespec.tv_nsec / 1000) * 1000)
2488 # else
2489 #  define mtim_getsec(_x)       ((_x).st_mtime)
2490 #  define mtim_getnsec(_x)      (0)
2491 # endif /* HAVE_ST_MTIMESPEC */
2492 #endif /* HAVE_ST_MTIM */
2493
2494 /*
2495  * Emulate a subset of waitpid() if we don't have it.
2496  */
2497 #ifdef HAVE_WAITPID
2498 # define sudo_waitpid(p, s, o)  waitpid(p, s, o)
2499 #else
2500 # ifdef HAVE_WAIT3
2501 #  define sudo_waitpid(p, s, o) wait3(s, o, NULL)
2502 # endif
2503 #endif
2504
2505 /* GNU stow needs /etc/sudoers to be a symlink. */
2506 #ifdef USE_STOW
2507 # define stat_sudoers   stat
2508 #else
2509 # define stat_sudoers   lstat
2510 #endif
2511
2512 /* Macros to set/clear/test flags. */
2513 #undef SET
2514 #define SET(t, f)       ((t) |= (f))
2515 #undef CLR
2516 #define CLR(t, f)       ((t) &= ~(f))
2517 #undef ISSET
2518 #define ISSET(t, f)     ((t) & (f))
2519
2520 /* New ANSI-style OS defs for HP-UX and ConvexOS. */
2521 #if defined(hpux) && !defined(__hpux)
2522 # define __hpux         1
2523 #endif /* hpux */
2524
2525 #if defined(convex) && !defined(__convex__)
2526 # define __convex__     1
2527 #endif /* convex */
2528
2529 /* BSD compatibility on some SVR4 systems. */
2530 #ifdef __svr4__
2531 # define BSD_COMP
2532 #endif /* __svr4__ */
2533
2534 #endif /* _SUDO_CONFIG_H */])