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