Imported Upstream version 1.6.9p10
[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.34 2007/12/19 19:29:29 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), [AC_CHECK_MEMBER([struct stat.st_mtimespec], AC_DEFINE([HAVE_ST_MTIMESPEC]))])
1723     AC_MSG_CHECKING([for two-parameter timespecsub])
1724     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
1725 #include <sys/time.h>]], [[struct timespec ts1, ts2;
1726 ts1.tv_sec = 1; ts1.tv_nsec = 0; ts2.tv_sec = 0; ts2.tv_nsec = 0;
1727 #ifndef timespecsub
1728 #error missing timespecsub
1729 #endif
1730 timespecsub(&ts1, &ts2);]])], [AC_DEFINE(HAVE_TIMESPECSUB2)
1731     AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)])
1732 fi
1733 dnl
1734 dnl Check for the dirfd function/macro.  If not found, look for dd_fd in DIR.
1735 dnl
1736 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
1737 #include <$ac_header_dirent>]], [[DIR d; (void)dirfd(&d);]])], [AC_DEFINE(HAVE_DIRFD)], [AC_TRY_LINK([#include <sys/types.h>
1738 #include <$ac_header_dirent>], [DIR d; memset(&d, 0, sizeof(d)); return(d.dd_fd);], [AC_DEFINE(HAVE_DD_FD)])])
1739 dnl
1740 dnl If NEED_SNPRINTF is set, add snprintf.c to LIBOBJS
1741 dnl (it contains snprintf, vsnprintf, asprintf, and vasprintf)
1742 dnl
1743 if test -n "$NEED_SNPRINTF"; then
1744     AC_LIBOBJ(snprintf)
1745 fi
1746 dnl
1747 dnl If socket(2) not in libc, check -lsocket and -linet
1748 dnl May need to link with *both* -lnsl and -lsocket due to unresolved symbols
1749 dnl In this case we look for main(), not socket() to avoid using a cached value
1750 dnl
1751 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)
1752 AC_CHECK_LIB(socket, socket, [NET_LIBS="${NET_LIBS} -lsocket -lnsl"; LIBS="${LIBS} -lsocket -lnsl"], , -lnsl)))])
1753 dnl
1754 dnl If inet_addr(3) not in libc, check -lnsl and -linet
1755 dnl May need to link with *both* -lnsl and -lsocket due to unresolved symbols
1756 dnl
1757 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)
1758 AC_CHECK_LIB(socket, inet_addr, [NET_LIBS="${NET_LIBS} -lsocket -lnsl"; LIBS="${LIBS} -lsocket -lnsl"], , -lnsl))))])
1759 dnl
1760 dnl If syslog(3) not in libc, check -lsocket, -lnsl and -linet
1761 dnl
1762 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"])))])
1763 dnl
1764 dnl Bison and DCE use alloca(3), if not in libc, use the sudo one (from gcc)
1765 dnl (gcc includes its own alloca(3) but other compilers may not)
1766 dnl
1767 if test "$with_DCE" = "yes" -o "$ac_cv_prog_YACC" = "bison -y"; then
1768     AC_FUNC_ALLOCA
1769 fi
1770 dnl
1771 dnl Check for getprogname() or __progname
1772 dnl
1773 AC_CHECK_FUNCS(getprogname, , [
1774     AC_MSG_CHECKING([for __progname])
1775     AC_CACHE_VAL(sudo_cv___progname, [
1776     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[extern char *__progname; (void)puts(__progname);]])], [sudo_cv___progname=yes], [sudo_cv___progname=no])])
1777     if test "$sudo_cv___progname" = "yes"; then
1778         AC_DEFINE(HAVE___PROGNAME)
1779     else
1780         AC_LIBOBJ(getprogname)
1781     fi
1782     AC_MSG_RESULT($sudo_cv___progname)
1783 ])
1784
1785 dnl
1786 dnl Mutually exclusive auth checks come first, followed by
1787 dnl non-exclusive ones.  Note: passwd must be last of all!
1788 dnl
1789
1790 dnl
1791 dnl Convert default authentication methods to with_* if
1792 dnl no explicit authentication scheme was specified.
1793 dnl
1794 if test -z "${AUTH_EXCL}${AUTH_REG}" -a -n "$AUTH_EXCL_DEF"; then
1795     for auth in $AUTH_EXCL_DEF; do
1796         case $auth in
1797             AIX_AUTH)   with_aixauth=maybe;;
1798             BSD_AUTH)   with_bsdauth=maybe;;
1799             PAM)        with_pam=maybe;;
1800             SIA)        CHECKSIA=true;;
1801         esac
1802     done
1803 fi
1804
1805 dnl
1806 dnl PAM support.  Systems that use PAM by default set with_pam=default
1807 dnl and we do the actual tests here.
1808 dnl
1809 if test ${with_pam-"no"} != "no"; then
1810     dnl
1811     dnl Linux may need this
1812     dnl
1813     AC_CHECK_LIB([dl], [main], [SUDO_LIBS="${SUDO_LIBS} -lpam -ldl"], [SUDO_LIBS="${SUDO_LIBS} -lpam"])
1814     ac_cv_lib_dl=ac_cv_lib_dl_main
1815
1816     dnl
1817     dnl Some PAM implementations (MacOS X for example) put the PAM headers
1818     dnl in /usr/include/pam instead of /usr/include/security...
1819     dnl
1820     AC_CHECK_HEADERS([security/pam_appl.h] [pam/pam_appl.h], [with_pam=yes; break])
1821     if test "$with_pam" = "yes"; then
1822         AC_DEFINE(HAVE_PAM)
1823         AUTH_OBJS="$AUTH_OBJS pam.o";
1824         AUTH_EXCL=PAM
1825         AC_MSG_CHECKING(whether to use PAM session support)
1826         AC_ARG_ENABLE(pam_session,
1827         [  --disable-pam-session   Disable PAM session support],
1828             [ case "$enableval" in
1829                 yes)    AC_MSG_RESULT(yes)
1830                         ;;
1831                 no)             AC_MSG_RESULT(no)
1832                             AC_DEFINE(NO_PAM_SESSION)
1833                             ;;
1834                 *)              AC_MSG_RESULT(no)
1835                             AC_MSG_WARN([Ignoring unknown argument to --enable-pam-session: $enableval])
1836                             ;;
1837             esac], AC_MSG_RESULT(yes))
1838         case $host in
1839             *-*-linux*|*-*-solaris*)
1840                     AC_CHECK_FUNCS(dgettext, [],
1841                         [AC_CHECK_LIB(intl, dgettext, [LIBS="${LIBS} -lintl"]
1842                         [AC_DEFINE(HAVE_DGETTEXT)])])
1843                     ;;
1844         esac
1845     fi
1846 fi
1847
1848 dnl
1849 dnl AIX general authentication
1850 dnl If set to "maybe" only enable if no other exclusive method in use.
1851 dnl
1852 if test ${with_aixauth-'no'} != "no"; then
1853     if test X"$with_aixauth" != X"maybe" -o X"$AUTH_EXCL" = X""; then
1854         AC_MSG_NOTICE([using AIX general authentication])
1855         AC_DEFINE(HAVE_AIXAUTH)
1856         AUTH_OBJS="$AUTH_OBJS aix_auth.o";
1857         SUDO_LIBS="${SUDO_LIBS} -ls"
1858         AUTH_EXCL=AIX_AUTH
1859     fi
1860 fi
1861
1862 dnl
1863 dnl BSD authentication
1864 dnl If set to "maybe" only enable if no other exclusive method in use.
1865 dnl
1866 if test ${with_bsdauth-'no'} != "no"; then
1867     AC_CHECK_HEADER(bsd_auth.h, AC_DEFINE(HAVE_BSD_AUTH_H)
1868         [AUTH_OBJS="$AUTH_OBJS bsdauth.o"]
1869         [BSDAUTH_USAGE='[[-a auth_type]] ']
1870         [AUTH_EXCL=BSD_AUTH],
1871         [AC_MSG_ERROR([BSD authentication was specified but bsd_auth.h could not be found])])
1872 fi
1873
1874 dnl
1875 dnl SIA authentication for Tru64 Unix
1876 dnl
1877 if test ${CHECKSIA-'false'} = "true"; then
1878     AC_CHECK_FUNCS(sia_ses_init, [found=true], [found=false])
1879     if test "$found" = "true"; then
1880         AUTH_EXCL=SIA
1881         AUTH_OBJS="$AUTH_OBJS sia.o"
1882     fi
1883 fi
1884
1885 dnl
1886 dnl extra FWTK libs + includes
1887 dnl
1888 if test ${with_fwtk-'no'} != "no"; then
1889     if test "$with_fwtk" != "yes"; then
1890         SUDO_APPEND_LIBPATH(SUDO_LDFLAGS, [${with_fwtk}])
1891         CPPFLAGS="${CPPFLAGS} -I${with_fwtk}"
1892         with_fwtk=yes
1893     fi
1894     SUDO_LIBS="${SUDO_LIBS} -lauth -lfwall"
1895     AUTH_OBJS="$AUTH_OBJS fwtk.o"
1896 fi
1897
1898 dnl
1899 dnl extra SecurID lib + includes
1900 dnl
1901 if test ${with_SecurID-'no'} != "no"; then
1902     if test "$with_SecurID" != "yes"; then
1903         :
1904     elif test -d /usr/ace/examples; then
1905         with_SecurID=/usr/ace/examples
1906     else
1907         with_SecurID=/usr/ace
1908     fi
1909     CPPFLAGS="${CPPFLAGS} -I${with_SecurID}"
1910     _LDFLAGS="${LDFLAGS}"
1911     SUDO_APPEND_LIBPATH(LDFLAGS, [${with_SecurID}])
1912     #
1913     # Determine whether to use the new or old SecurID API
1914     #
1915     AC_CHECK_LIB(aceclnt, SD_Init,
1916         [
1917             AUTH_OBJS="$AUTH_OBJS securid5.o";
1918             SUDO_LIBS="${SUDO_LIBS} -laceclnt -lpthread"
1919         ]
1920         [
1921             SUDO_APPEND_LIBPATH(SUDO_LDFLAGS, [${with_SecurID}])
1922         ], [
1923             AUTH_OBJS="$AUTH_OBJS securid.o";
1924             SUDO_LIBS="${SUDO_LIBS} ${with_SecurID}/sdiclient.a"
1925         ],
1926         [
1927             -lpthread
1928         ]
1929     )
1930     LDFLAGS="${_LDFLAGS}"
1931 fi
1932
1933 dnl
1934 dnl Non-mutually exclusive auth checks come next.
1935 dnl Note: passwd must be last of all!
1936 dnl
1937
1938 dnl
1939 dnl Convert default authentication methods to with_* if
1940 dnl no explicit authentication scheme was specified.
1941 dnl
1942 if test -z "${AUTH_EXCL}" -a -n "$AUTH_DEF"; then
1943     for auth in $AUTH_DEF; do
1944         case $auth in
1945             passwd)     : ${with_passwd='maybe'};;
1946         esac
1947     done
1948 fi
1949
1950 dnl
1951 dnl Kerberos IV
1952 dnl
1953 if test ${with_kerb4-'no'} != "no"; then
1954     AC_DEFINE(HAVE_KERB4)
1955     dnl
1956     dnl Use the specified directory, if any, else search for correct inc dir
1957     dnl
1958     O_LDFLAGS="$LDFLAGS"
1959     if test "$with_kerb4" = "yes"; then
1960         found=no
1961         O_CPPFLAGS="$CPPFLAGS"
1962         for dir in "" "kerberosIV/" "krb4/" "kerberos4/" "kerberosv4/"; do
1963             CPPFLAGS="$O_CPPFLAGS -I/usr/include/${dir}"
1964             AC_PREPROC_IFELSE([#include <krb.h>], [found=yes; break])
1965         done
1966         test X"$found" = X"no" && CPPFLAGS="$O_CPPFLAGS"
1967     else
1968         SUDO_APPEND_LIBPATH(LDFLAGS, [${with_kerb4}/lib])
1969         SUDO_APPEND_LIBPATH(SUDO_LDFLAGS, [${with_kerb4}/lib])
1970         CPPFLAGS="$CPPFLAGS -I${with_kerb4}/include"
1971         AC_CHECK_HEADER([krb.h], [found=yes], [found=no])
1972     fi
1973     if test X"$found" = X"no"; then
1974         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])
1975     fi
1976
1977     dnl
1978     dnl Check for -ldes vs. -ldes425
1979     dnl
1980     AC_CHECK_LIB(des, des_cbc_encrypt, [K4LIBS="-ldes"], [
1981         AC_CHECK_LIB(des425, des_cbc_encrypt, [K4LIBS="-ldes425"], [K4LIBS=""])
1982     ])
1983     dnl
1984     dnl Try to determine whether we have KTH or MIT/CNS Kerberos IV
1985     dnl
1986     AC_MSG_CHECKING(whether we are using KTH Kerberos IV)
1987     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <krb.h>]], [[const char *tmp = krb4_version;]])], [
1988             AC_MSG_RESULT(yes)
1989             K4LIBS="${K4LIBS} -lcom_err"
1990             AC_CHECK_LIB(roken, main, [K4LIBS="${K4LIBS} -lroken"])
1991         ], [
1992             AC_MSG_RESULT(no)
1993         ]
1994     )
1995     dnl
1996     dnl The actual Kerberos IV lib might be -lkrb or -lkrb4
1997     dnl
1998     AC_CHECK_LIB(krb, main, [K4LIBS="-lkrb $K4LIBS"], [
1999         AC_CHECK_LIB(krb4, main, [K4LIBS="-lkrb4 $K4LIBS"],
2000             [K4LIBS="-lkrb $K4LIBS"]
2001             [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])]
2002         , [$K4LIBS])
2003     ], [$K4LIBS])
2004     LDFLAGS="$O_LDFLAGS"
2005     SUDO_LIBS="${SUDO_LIBS} $K4LIBS"
2006     AUTH_OBJS="$AUTH_OBJS kerb4.o"
2007 fi
2008
2009 dnl
2010 dnl Kerberos V
2011 dnl There is an easy way and a hard way...
2012 dnl
2013 if test ${with_kerb5-'no'} != "no"; then
2014     AC_CHECK_PROG(KRB5CONFIG, krb5-config, yes, "")
2015     if test -n "$KRB5CONFIG"; then
2016         AC_DEFINE(HAVE_KERB5)
2017         AUTH_OBJS="$AUTH_OBJS kerb5.o"
2018         CPPFLAGS="$CPPFLAGS `krb5-config --cflags`"
2019         SUDO_LIBS="$SUDO_LIBS `krb5-config --libs`"
2020         dnl
2021         dnl Try to determine whether we have Heimdal or MIT Kerberos
2022         dnl
2023         AC_MSG_CHECKING(whether we are using Heimdal)
2024         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <krb5.h>]], [[const char *tmp = heimdal_version;]])], [
2025                 AC_MSG_RESULT(yes)
2026                 AC_DEFINE(HAVE_HEIMDAL)
2027             ], [
2028                 AC_MSG_RESULT(no)
2029             ]
2030         )
2031     fi
2032 fi
2033 if test ${with_kerb5-'no'} != "no" -a -z "$KRB5CONFIG"; then
2034     AC_DEFINE(HAVE_KERB5)
2035     dnl
2036     dnl Use the specified directory, if any, else search for correct inc dir
2037     dnl
2038     if test "$with_kerb5" = "yes"; then
2039         found=no
2040         O_CPPFLAGS="$CPPFLAGS"
2041         for dir in "" "kerberosV/" "krb5/" "kerberos5/" "kerberosv5/"; do
2042             CPPFLAGS="$O_CPPFLAGS -I/usr/include/${dir}"
2043             AC_PREPROC_IFELSE([#include <krb5.h>], [found=yes; break])
2044         done
2045         if test X"$found" = X"no"; then
2046             CPPFLAGS="$O_CPPFLAGS"
2047             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])
2048         fi
2049     else
2050         dnl XXX - try to include krb5.h here too
2051         SUDO_APPEND_LIBPATH(SUDO_LDFLAGS, [${with_kerb5}/lib])
2052         CPPFLAGS="$CPPFLAGS -I${with_kerb5}/include"
2053     fi
2054
2055     dnl
2056     dnl Try to determine whether we have Heimdal or MIT Kerberos
2057     dnl
2058     AC_MSG_CHECKING(whether we are using Heimdal)
2059     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <krb5.h>]], [[const char *tmp = heimdal_version;]])], [
2060             AC_MSG_RESULT(yes)
2061             AC_DEFINE(HAVE_HEIMDAL)
2062             SUDO_LIBS="${SUDO_LIBS} -lkrb5 -lcrypto -ldes -lcom_err -lasn1"
2063             AC_CHECK_LIB(roken, main, [SUDO_LIBS="${SUDO_LIBS} -lroken"])
2064         ], [
2065             AC_MSG_RESULT(no)
2066             SUDO_LIBS="${SUDO_LIBS} -lkrb5 -lk5crypto -lcom_err"
2067             AC_CHECK_LIB(krb5support, main, [SUDO_LIBS="${SUDO_LIBS} -lkrb5support,"])
2068     ])
2069     AUTH_OBJS="$AUTH_OBJS kerb5.o"
2070     _LIBS="$LIBS"
2071     LIBS="${LIBS} ${SUDO_LIBS}"
2072     AC_CHECK_FUNCS(krb5_verify_user krb5_init_secure_context)
2073     LIBS="$_LIBS"
2074 fi
2075
2076 dnl
2077 dnl extra AFS libs and includes
2078 dnl
2079 if test ${with_AFS-'no'} = "yes"; then
2080
2081     # looks like the "standard" place for AFS libs is /usr/afsws/lib
2082     AFSLIBDIRS="/usr/lib/afs /usr/afsws/lib /usr/afsws/lib/afs"
2083     for i in $AFSLIBDIRS; do
2084         if test -d ${i}; then
2085             SUDO_APPEND_LIBPATH(SUDO_LDFLAGS, [$i])
2086             FOUND_AFSLIBDIR=true
2087         fi
2088     done
2089     if test -z "$FOUND_AFSLIBDIR"; then
2090         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.])
2091     fi
2092
2093     # Order is important here.  Note that we build AFS_LIBS from right to left
2094     # since AFS_LIBS may be initialized with BSD compat libs that must go last
2095     AFS_LIBS="-laudit ${AFS_LIBS}"
2096     for i in $AFSLIBDIRS; do
2097         if test -f ${i}/util.a; then
2098             AFS_LIBS="${i}/util.a ${AFS_LIBS}"
2099             FOUND_UTIL_A=true
2100             break;
2101         fi
2102     done
2103     if test -z "$FOUND_UTIL_A"; then
2104         AFS_LIBS="-lutil ${AFS_LIBS}"
2105     fi
2106     AFS_LIBS="-lkauth -lprot -lubik -lauth -lrxkad -lsys -ldes -lrx -llwp -lcom_err ${AFS_LIBS}"
2107
2108     # AFS includes may live in /usr/include on some machines...
2109     for i in /usr/afsws/include; do
2110         if test -d ${i}; then
2111             CPPFLAGS="${CPPFLAGS} -I${i}"
2112             FOUND_AFSINCDIR=true
2113         fi
2114     done
2115
2116     if test -z "$FOUND_AFSLIBDIR"; then
2117         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.])
2118     fi
2119
2120     AUTH_OBJS="$AUTH_OBJS afs.o"
2121 fi
2122
2123 dnl
2124 dnl extra DCE obj + lib
2125 dnl Order of libs in HP-UX 10.x is important, -ldce must be last.
2126 dnl
2127 if test ${with_DCE-'no'} = "yes"; then
2128     DCE_OBJS="${DCE_OBJS} dce_pwent.o"
2129     SUDO_LIBS="${SUDO_LIBS} -ldce"
2130     AUTH_OBJS="$AUTH_OBJS dce.o"
2131 fi
2132
2133 dnl
2134 dnl extra S/Key lib and includes
2135 dnl
2136 if test ${with_skey-'no'} = "yes"; then
2137     O_LDFLAGS="$LDFLAGS"
2138     if test "$with_skey" != "yes"; then
2139         CPPFLAGS="${CPPFLAGS} -I${with_skey}/include"
2140         SUDO_APPEND_LIBPATH(LDFLAGS, [${with_skey}/lib])
2141         SUDO_APPEND_LIBPATH(SUDO_LDFLAGS, [${with_skey}/lib])
2142         AC_PREPROC_IFELSE([#include <skey.h>], [found=yes], [found=no])
2143     else
2144         found=no
2145         O_CPPFLAGS="$CPPFLAGS"
2146         for dir in "" "/usr/local" "/usr/contrib"; do
2147             test -n "$dir" && CPPFLAGS="$O_CPPFLAGS -I${dir}/include"
2148             AC_PREPROC_IFELSE([#include <skey.h>], [found=yes; break])
2149         done
2150         if test "$found" = "no" -o -z "$dir"; then
2151             CPPFLAGS="$O_CPPFLAGS"
2152         else
2153             SUDO_APPEND_LIBPATH(LDFLAGS, [${dir}/lib])
2154             SUDO_APPEND_LIBPATH(SUDO_LDFLAGS, [${dir}/lib])
2155         fi
2156     fi
2157     if test "$found" = "no"; then
2158         AC_MSG_WARN([Unable to locate skey.h, you will have to edit the Makefile and add -I/path/to/skey/includes to CPPFLAGS])
2159     fi
2160     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])])
2161     AC_CHECK_LIB(skey, skeyaccess, AC_DEFINE(HAVE_SKEYACCESS))
2162     LDFLAGS="$O_LDFLAGS"
2163     SUDO_LIBS="${SUDO_LIBS} -lskey"
2164     AUTH_OBJS="$AUTH_OBJS rfc1938.o"
2165 fi
2166
2167 dnl
2168 dnl extra OPIE lib and includes
2169 dnl
2170 if test ${with_opie-'no'} = "yes"; then
2171     O_LDFLAGS="$LDFLAGS"
2172     if test "$with_opie" != "yes"; then
2173         CPPFLAGS="${CPPFLAGS} -I${with_opie}/include"
2174         SUDO_APPEND_LIBPATH(LDFLAGS, [${with_opie}/lib])
2175         SUDO_APPEND_LIBPATH(SUDO_LDFLAGS, [${with_opie}/lib])
2176         AC_PREPROC_IFELSE([#include <opie.h>], [found=yes], [found=no])
2177     else
2178         found=no
2179         O_CPPFLAGS="$CPPFLAGS"
2180         for dir in "" "/usr/local" "/usr/contrib"; do
2181             test -n "$dir" && CPPFLAGS="$O_CPPFLAGS -I${dir}/include"
2182             AC_PREPROC_IFELSE([#include <opie.h>], [found=yes; break])
2183         done
2184         if test "$found" = "no" -o -z "$dir"; then
2185             CPPFLAGS="$O_CPPFLAGS"
2186         else
2187             SUDO_APPEND_LIBPATH(LDFLAGS, [${dir}/lib])
2188             SUDO_APPEND_LIBPATH(SUDO_LDFLAGS, [${dir}/lib])
2189         fi
2190     fi
2191     if test "$found" = "no"; then
2192         AC_MSG_WARN([Unable to locate opie.h, you will have to edit the Makefile and add -I/path/to/opie/includes to CPPFLAGS])
2193     fi
2194     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])])
2195     LDFLAGS="$O_LDFLAGS"
2196     SUDO_LIBS="${SUDO_LIBS} -lopie"
2197     AUTH_OBJS="$AUTH_OBJS rfc1938.o"
2198 fi
2199
2200 dnl
2201 dnl Check for shadow password routines if we have not already done so.
2202 dnl If there is a specific list of functions to check we do that first.
2203 dnl Otherwise, we check for SVR4-style and then SecureWare-style.
2204 dnl
2205 if test ${with_passwd-'no'} != "no"; then
2206     dnl
2207     dnl if crypt(3) not in libc, look elsewhere
2208     dnl
2209     if test -z "$LIB_CRYPT" -a "$with_passwd" != "no"; then
2210         AC_SEARCH_LIBS([crypt], [crypt crypt_d ufc], [test -n "$ac_lib" && SUDO_LIBS="${SUDO_LIBS} $ac_res"])
2211     fi
2212
2213     if test "$CHECKSHADOW" = "true" -a -n "$shadow_funcs"; then
2214         _LIBS="$LIBS"
2215         LIBS="$LIBS $shadow_libs"
2216         found=no
2217         AC_CHECK_FUNCS($shadow_funcs, [found=yes])
2218         if test "$found" = "yes"; then
2219             SUDO_LIBS="$SUDO_LIBS $shadow_libs"
2220         elif test -n "$shadow_libs_optional"; then
2221             LIBS="$LIBS $shadow_libs_optional"
2222             AC_CHECK_FUNCS($shadow_funcs, [found=yes])
2223             if test "$found" = "yes"; then
2224                 SUDO_LIBS="$SUDO_LIBS $shadow_libs $shadow_libs_optional"
2225             fi
2226         fi
2227         if test "$found" = "yes"; then
2228             case "$shadow_funcs" in
2229                 *getprpwnam*) SECUREWARE=1;;
2230             esac
2231             test -n "$shadow_defs" && OSDEFS="${OSDEFS} $shadow_defs"
2232         else
2233             LIBS="$_LIBS"
2234         fi
2235         CHECKSHADOW=false
2236     fi
2237     if test "$CHECKSHADOW" = "true"; then
2238         AC_SEARCH_LIBS([getspnam], [gen], [AC_DEFINE(HAVE_GETSPNAM)] [CHECKSHADOW=false; test -n "$ac_lib" && SUDO_LIBS="${SUDO_LIBS} $ac_res"])
2239     fi
2240     if test "$CHECKSHADOW" = "true"; then
2241         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"])
2242     fi
2243     if test -n "$SECUREWARE"; then
2244         AC_CHECK_FUNCS(bigcrypt set_auth_parameters initprivs)
2245         AUTH_OBJS="$AUTH_OBJS secureware.o"
2246     fi
2247 fi
2248
2249 dnl
2250 dnl extra lib and .o file for LDAP support
2251 dnl
2252 if test ${with_ldap-'no'} != "no"; then
2253     _LDFLAGS="$LDFLAGS"
2254     if test "$with_ldap" != "yes"; then
2255         SUDO_APPEND_LIBPATH(SUDO_LDFLAGS, [${with_ldap}/lib])
2256         SUDO_APPEND_LIBPATH(LDFLAGS, [${with_ldap}/lib])
2257         CPPFLAGS="${CPPFLAGS} -I${with_ldap}/include"
2258         with_ldap=yes
2259     fi
2260     SUDO_OBJS="${SUDO_OBJS} ldap.o"
2261
2262     AC_MSG_CHECKING([for LDAP libraries])
2263     LDAP_LIBS=""
2264     _LIBS="$LIBS"
2265     found=no
2266     for l in -lldap -llber '-lssl -lcrypto'; do
2267         LIBS="${LIBS} $l"
2268         LDAP_LIBS="${LDAP_LIBS} $l"
2269         AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
2270         #include <lber.h>
2271         #include <ldap.h>]], [[(void)ldap_init(0, 0)]])], [found=yes; break])
2272     done
2273     dnl if nothing linked just try with -lldap
2274     if test "$found" = "no"; then
2275         LDAP_LIBS=" -lldap"
2276         AC_MSG_RESULT([not found, using -lldap])
2277     else
2278         AC_MSG_RESULT([$LDAP_LIBS])
2279     fi
2280     dnl try again w/o explicitly including lber.h
2281     AC_MSG_CHECKING([whether lber.h is needed])
2282     AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
2283     #include <ldap.h>]], [[(void)ldap_init(0, 0)]])], [AC_MSG_RESULT([no])], [
2284     AC_MSG_RESULT([yes])
2285     AC_DEFINE(HAVE_LBER_H)])
2286
2287     AC_CHECK_FUNCS(ldap_initialize ldap_start_tls_s ldapssl_init)
2288
2289     SUDO_LIBS="${SUDO_LIBS}${LDAP_LIBS}"
2290     LIBS="$_LIBS"
2291     LDFLAGS="$_LDFLAGS"
2292     # XXX - OpenLDAP has deprecated ldap_get_values()
2293     CPPFLAGS="${CPPFLAGS} -DLDAP_DEPRECATED"
2294 fi
2295
2296 dnl
2297 dnl Add $blibpath to SUDO_LDFLAGS if specified by the user or if we
2298 dnl added -L dirpaths to SUDO_LDFLAGS.
2299 dnl
2300 if test -n "$blibpath"; then
2301     if test -n "$blibpath_add"; then
2302         SUDO_LDFLAGS="$SUDO_LDFLAGS -Wl,-blibpath:${blibpath}${blibpath_add}"
2303     elif test -n "$with_blibpath" -a "$with_blibpath" != "yes"; then
2304         SUDO_LDFLAGS="$SUDO_LDFLAGS -Wl,-blibpath:${blibpath}"
2305     fi
2306 fi
2307
2308 dnl
2309 dnl Check for log file and timestamp locations
2310 dnl
2311 SUDO_LOGFILE
2312 SUDO_TIMEDIR
2313
2314 dnl
2315 dnl Use passwd (and secureware) auth modules?
2316 dnl
2317 case "$with_passwd" in
2318 yes|maybe)
2319     AUTH_OBJS="$AUTH_OBJS passwd.o"
2320     ;;
2321 *)
2322     AC_DEFINE(WITHOUT_PASSWD)
2323     if test -z "$AUTH_OBJS"; then
2324         AC_MSG_ERROR([no authentication methods defined.])
2325     fi
2326     ;;
2327 esac
2328 AUTH_OBJS=${AUTH_OBJS# }
2329 _AUTH=`echo "$AUTH_OBJS" | sed 's/\.o//g'`
2330 AC_MSG_NOTICE([using the following authentication methods: $_AUTH])
2331
2332 dnl
2333 dnl LIBS may contain duplicates from SUDO_LIBS or NET_LIBS so prune it.
2334 dnl
2335 if test -n "$LIBS"; then
2336     L="$LIBS"
2337     LIBS=
2338     for l in ${L}; do
2339         dupe=0
2340         for sl in ${SUDO_LIBS} ${NET_LIBS}; do
2341             test $l = $sl && dupe=1
2342         done
2343         test $dupe = 0 && LIBS="${LIBS} $l"
2344     done
2345 fi
2346
2347 dnl
2348 dnl Set exec_prefix
2349 dnl
2350 test "$exec_prefix" = "NONE" && exec_prefix='$(prefix)'
2351
2352 dnl
2353 dnl Defer setting _PATH_SUDO_NOEXEC until after exec_prefix is set
2354 dnl XXX - this is gross!
2355 dnl
2356 if test "$with_noexec" != "no"; then
2357     PROGS="${PROGS} sudo_noexec.la"
2358     INSTALL_NOEXEC="install-noexec"
2359
2360     oexec_prefix="$exec_prefix"
2361     if test "$exec_prefix" = '$(prefix)'; then
2362         if test "$prefix" = "NONE"; then
2363             exec_prefix="$ac_default_prefix"
2364         else
2365             exec_prefix="$prefix"
2366         fi
2367     fi
2368     eval noexec_file="$with_noexec"
2369     AC_DEFINE_UNQUOTED(_PATH_SUDO_NOEXEC, "$noexec_file", [The fully qualified pathname of sudo_noexec.so])
2370     exec_prefix="$oexec_prefix"
2371 fi
2372
2373 dnl
2374 dnl Substitute into the Makefile and man pages
2375 dnl
2376 AC_CONFIG_FILES([Makefile sudo.man visudo.man sudoers.man])
2377 AC_OUTPUT
2378
2379 dnl
2380 dnl Spew any text the user needs to know about
2381 dnl
2382 if test "$with_pam" = "yes"; then
2383     case $host in
2384         *-*-linux*)
2385             AC_MSG_NOTICE([You will need to customize sample.pam and install it as /etc/pam.d/sudo])
2386             ;;
2387     esac
2388 fi
2389
2390 dnl
2391 dnl Autoheader templates
2392 dnl
2393 AH_TEMPLATE(BROKEN_SYSLOG, [Define to 1 if the `syslog' function returns a non-zero int to denote failure.])
2394 AH_TEMPLATE(CLASSIC_INSULTS, [Define to 1 if you want the insults from the "classic" version sudo.])
2395 AH_TEMPLATE(CSOPS_INSULTS, [Define to 1 if you want insults culled from the twisted minds of CSOps.])
2396 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.])
2397 AH_TEMPLATE(ENV_EDITOR, [Define to 1 if you want visudo to honor the EDITOR and VISUAL env variables.])
2398 AH_TEMPLATE(FQDN, [Define to 1 if you want to require fully qualified hosts in sudoers.])
2399 AH_TEMPLATE(GOONS_INSULTS, [Define to 1 if you want insults from the "Goon Show".])
2400 AH_TEMPLATE(HAL_INSULTS, [Define to 1 if you want 2001-like insults.])
2401 AH_TEMPLATE(HAVE_AFS, [Define to 1 if you use AFS.])
2402 AH_TEMPLATE(HAVE_AIXAUTH, [Define to 1 if you use AIX general authentication.])
2403 AH_TEMPLATE(HAVE_BSD_AUTH_H, [Define to 1 if you use BSD authentication.])
2404 AH_TEMPLATE(HAVE_DCE, [Define to 1 if you use OSF DCE.])
2405 AH_TEMPLATE(HAVE_DD_FD, [Define to 1 if your `DIR' contains dd_fd.])
2406 AH_TEMPLATE(HAVE_DIRFD, [Define to 1 if you have the `dirfd' function or macro.])
2407 AH_TEMPLATE(HAVE_DGETTEXT, [Define to 1 if you have the `dgettext' function.])
2408 AH_TEMPLATE(HAVE_DISPCRYPT, [Define to 1 if you have the `dispcrypt' function.])
2409 AH_TEMPLATE(HAVE_EXTENDED_GLOB, [Define to 1 if your glob.h defines the GLOB_BRACE and GLOB_TILDE flags.])
2410 AH_TEMPLATE(HAVE_FCNTL_CLOSEM, [Define to 1 if your system has the F_CLOSEM fcntl.])
2411 AH_TEMPLATE(HAVE_FNMATCH, [Define to 1 if you have the `fnmatch' function.])
2412 AH_TEMPLATE(HAVE_FWTK, [Define to 1 if you use the FWTK authsrv daemon.])
2413 AH_TEMPLATE(HAVE_GETAUTHUID, [Define to 1 if you have the `getauthuid' function. (ULTRIX 4.x  shadow passwords)])
2414 AH_TEMPLATE(HAVE_GETPRPWNAM, [Define to 1 if you have the `getprpwnam' function.  (SecureWare-style shadow passwords)])
2415 AH_TEMPLATE(HAVE_GETPWANAM, [Define to 1 if you have the `getpwanam' function. (SunOS 4.x shadow passwords)])
2416 AH_TEMPLATE(HAVE_GETSPNAM, [Define to 1 if you have the `getspnam' function (SVR4-style shadow passwords)])
2417 AH_TEMPLATE(HAVE_GETSPWUID, [Define to 1 if you have the `getspwuid' function. (HP-UX <= 9.X shadow passwords)])
2418 AH_TEMPLATE(HAVE_HEIMDAL, [Define to 1 if your Kerberos is Heimdal.])
2419 AH_TEMPLATE(HAVE_IN6_ADDR, [Define to 1 if <netinet/in.h> contains struct in6_addr.])
2420 AH_TEMPLATE(HAVE_ISCOMSEC, [Define to 1 if you have the `iscomsec' function. (HP-UX >= 10.x check for shadow enabled)])
2421 AH_TEMPLATE(HAVE_ISSECURE, [Define to 1 if you have the `issecure' function. (SunOS 4.x check for shadow enabled)])
2422 AH_TEMPLATE(HAVE_KERB4, [Define to 1 if you use Kerberos IV.])
2423 AH_TEMPLATE(HAVE_KERB5, [Define to 1 if you use Kerberos V.])
2424 AH_TEMPLATE(HAVE_LBER_H, [Define to 1 if your LDAP needs <lber.h>. (OpenLDAP does not)])
2425 AH_TEMPLATE(HAVE_LDAP, [Define to 1 if you use LDAP for sudoers.])
2426 AH_TEMPLATE(HAVE_OPIE, [Define to 1 if you use NRL OPIE.])
2427 AH_TEMPLATE(HAVE_PAM, [Define to 1 if you use PAM authentication.])
2428 AH_TEMPLATE(HAVE_PROJECT_H, [Define to 1 if you have the <project.h> header file.])
2429 AH_TEMPLATE(HAVE_SECURID, [Define to 1 if you use SecurID for authentication.])
2430 AH_TEMPLATE(HAVE_SIA, [Define to 1 if you use SIA authentication.])
2431 AH_TEMPLATE(HAVE_SIGACTION_T, [Define to 1 if <signal.h> has the sigaction_t typedef.])
2432 AH_TEMPLATE(HAVE_SKEY, [Define to 1 if you use S/Key.])
2433 AH_TEMPLATE(HAVE_SKEYACCESS, [Define to 1 if your S/Key library has skeyaccess().])
2434 AH_TEMPLATE(HAVE_ST_MTIM, [Define to 1 if your struct stat has an st_mtim member])
2435 AH_TEMPLATE(HAVE_ST_MTIMESPEC, [Define to 1 if your struct stat has an st_mtimespec member])
2436 AH_TEMPLATE(HAVE_TERMIOS_H, [Define to 1 if you have the <termios.h> header file and the `tcgetattr' function.])
2437 AH_TEMPLATE(HAVE_TIMESPEC, [Define to 1 if you have struct timespec in sys/time.h])
2438 AH_TEMPLATE(HAVE_TIMESPECSUB2, [Define to 1 if you have a timespecsub macro or function that takes two arguments (not three)])
2439 AH_TEMPLATE(HAVE___PROGNAME, [Define to 1 if your crt0.o defines the __progname symbol for you.])
2440 AH_TEMPLATE(HOST_IN_LOG, [Define to 1 if you want the hostname to be entered into the log file.])
2441 AH_TEMPLATE(IGNORE_DOT_PATH, [Define to 1 if you want to ignore '.' and empty PATH elements])
2442 AH_TEMPLATE(LOGGING, [Define to SLOG_SYSLOG, SLOG_FILE, or SLOG_BOTH.])
2443 AH_TEMPLATE(LONG_OTP_PROMPT, [Define to 1 if you want a two line OTP (S/Key or OPIE) prompt.])
2444 AH_TEMPLATE(NO_AUTHENTICATION, [Define to 1 if you don't want sudo to prompt for a password by default.])
2445 AH_TEMPLATE(NO_LECTURE, [Define to 1 if you don't want users to get the lecture the first they user sudo.])
2446 AH_TEMPLATE(NO_ROOT_MAILER, [Define to avoid runing the mailer as root.])
2447 AH_TEMPLATE(NO_ROOT_SUDO, [Define to 1 if root should not be allowed to use sudo.])
2448 AH_TEMPLATE(PC_INSULTS, [Define to 1 to replace politically incorrect insults with less offensive ones.])
2449 AH_TEMPLATE(SECURE_PATH, [Define to 1 to override the user's path with a built-in one.])
2450 AH_TEMPLATE(SEND_MAIL_WHEN_NOT_OK, [Define to 1 to send mail when the user is not allowed to run a command.])
2451 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.])
2452 AH_TEMPLATE(SEND_MAIL_WHEN_NO_USER, [Define to 1 to send mail when the user is not in the sudoers file.])
2453 AH_TEMPLATE(SHELL_IF_NO_ARGS, [Define to 1 if you want sudo to start a shell if given no arguments.])
2454 AH_TEMPLATE(SHELL_SETS_HOME, [Define to 1 if you want sudo to set $HOME in shell mode.])
2455 AH_TEMPLATE(STUB_LOAD_INTERFACES, [Define to 1 if the code in interfaces.c does not compile for you.])
2456 AH_TEMPLATE(USE_INSULTS, [Define to 1 if you want to insult the user for entering an incorrect password.])
2457 AH_TEMPLATE(USE_STOW, [Define to 1 if you use GNU stow packaging.])
2458 AH_TEMPLATE(USE_TTY_TICKETS, [Define to 1 if you want a different ticket file for each tty.])
2459 AH_TEMPLATE(WITHOUT_PASSWD, [Define to avoid using the passwd/shadow file for authentication.])
2460 AH_TEMPLATE(sig_atomic_t, [Define to `int' if <signal.h> does not define.])
2461
2462 dnl
2463 dnl Bits to copy verbatim into config.h.in
2464 dnl
2465 AH_TOP([#ifndef _SUDO_CONFIG_H
2466 #define _SUDO_CONFIG_H])
2467
2468 AH_BOTTOM([/*
2469  * Macros to pull sec and nsec parts of mtime from struct stat.
2470  * We need to be able to convert between timeval and timespec
2471  * so the last 3 digits of tv_nsec are not significant.
2472  */
2473 #ifdef HAVE_ST_MTIM
2474 # define mtim_getsec(_x)        ((_x).st_mtim.tv_sec)
2475 # define mtim_getnsec(_x)       (((_x).st_mtim.tv_nsec / 1000) * 1000)
2476 #else
2477 # ifdef HAVE_ST_MTIMESPEC
2478 #  define mtim_getsec(_x)       ((_x).st_mtimespec.tv_sec)
2479 #  define mtim_getnsec(_x)      (((_x).st_mtimespec.tv_nsec / 1000) * 1000)
2480 # else
2481 #  define mtim_getsec(_x)       ((_x).st_mtime)
2482 #  define mtim_getnsec(_x)      (0)
2483 # endif /* HAVE_ST_MTIMESPEC */
2484 #endif /* HAVE_ST_MTIM */
2485
2486 /*
2487  * Emulate a subset of waitpid() if we don't have it.
2488  */
2489 #ifdef HAVE_WAITPID
2490 # define sudo_waitpid(p, s, o)  waitpid(p, s, o)
2491 #else
2492 # ifdef HAVE_WAIT3
2493 #  define sudo_waitpid(p, s, o) wait3(s, o, NULL)
2494 # endif
2495 #endif
2496
2497 /* GNU stow needs /etc/sudoers to be a symlink. */
2498 #ifdef USE_STOW
2499 # define stat_sudoers   stat
2500 #else
2501 # define stat_sudoers   lstat
2502 #endif
2503
2504 /* Macros to set/clear/test flags. */
2505 #undef SET
2506 #define SET(t, f)       ((t) |= (f))
2507 #undef CLR
2508 #define CLR(t, f)       ((t) &= ~(f))
2509 #undef ISSET
2510 #define ISSET(t, f)     ((t) & (f))
2511
2512 /* New ANSI-style OS defs for HP-UX and ConvexOS. */
2513 #if defined(hpux) && !defined(__hpux)
2514 # define __hpux         1
2515 #endif /* hpux */
2516
2517 #if defined(convex) && !defined(__convex__)
2518 # define __convex__     1
2519 #endif /* convex */
2520
2521 /* BSD compatibility on some SVR4 systems. */
2522 #ifdef __svr4__
2523 # define BSD_COMP
2524 #endif /* __svr4__ */
2525
2526 #endif /* _SUDO_CONFIG_H */])