Imported Upstream version 1.8.7
[debian/sudo] / configure.in
1 dnl
2 dnl Process this file with GNU autoconf to produce a configure script.
3 dnl
4 dnl Copyright (c) 1994-1996,1998-2013 Todd C. Miller <Todd.Miller@courtesan.com>
5 dnl
6 AC_INIT([sudo], [1.8.7], [http://www.sudo.ws/bugs/], [sudo])
7 AC_CONFIG_HEADER([config.h pathnames.h])
8 dnl
9 dnl Note: this must come after AC_INIT
10 dnl
11 AC_MSG_NOTICE([Configuring Sudo version $PACKAGE_VERSION])
12 dnl
13 dnl Variables that get substituted in the Makefile and man pages
14 dnl
15 AC_SUBST([HAVE_BSM_AUDIT])
16 AC_SUBST([SHELL])
17 AC_SUBST([LIBTOOL])
18 AC_SUBST([CFLAGS])
19 AC_SUBST([PROGS])
20 AC_SUBST([CPPFLAGS])
21 AC_SUBST([LDFLAGS])
22 AC_SUBST([SUDOERS_LDFLAGS])
23 AC_SUBST([LT_LDFLAGS])
24 AC_SUBST([LT_LDMAP])
25 AC_SUBST([LT_LDOPT])
26 AC_SUBST([LT_LDDEP])
27 AC_SUBST([LT_LDEXPORTS])
28 AC_SUBST([COMMON_OBJS])
29 AC_SUBST([SUDOERS_OBJS])
30 AC_SUBST([SUDO_OBJS])
31 AC_SUBST([LIBS])
32 AC_SUBST([SUDO_LIBS])
33 AC_SUBST([SUDOERS_LIBS])
34 AC_SUBST([NET_LIBS])
35 AC_SUBST([AFS_LIBS])
36 AC_SUBST([REPLAY_LIBS])
37 AC_SUBST([GETGROUPS_LIB])
38 AC_SUBST([OSDEFS])
39 AC_SUBST([AUTH_OBJS])
40 AC_SUBST([MANTYPE])
41 AC_SUBST([MANDIRTYPE])
42 AC_SUBST([MANCOMPRESS])
43 AC_SUBST([MANCOMPRESSEXT])
44 AC_SUBST([SHLIB_MODE])
45 AC_SUBST([SUDOERS_MODE])
46 AC_SUBST([SUDOERS_UID])
47 AC_SUBST([SUDOERS_GID])
48 AC_SUBST([DEVEL])
49 AC_SUBST([BAMAN])
50 AC_SUBST([LCMAN])
51 AC_SUBST([PSMAN])
52 AC_SUBST([SEMAN])
53 AC_SUBST([devdir])
54 AC_SUBST([mansectsu])
55 AC_SUBST([mansectform])
56 AC_SUBST([mansrcdir])
57 AC_SUBST([NOEXECFILE])
58 AC_SUBST([NOEXECDIR])
59 AC_SUBST([SOEXT])
60 AC_SUBST([noexec_file])
61 AC_SUBST([sesh_file])
62 AC_SUBST([INSTALL_NOEXEC])
63 AC_SUBST([DONT_LEAK_PATH_INFO])
64 AC_SUBST([BSDAUTH_USAGE])
65 AC_SUBST([SELINUX_USAGE])
66 AC_SUBST([LDAP])
67 AC_SUBST([LOGINCAP_USAGE])
68 AC_SUBST([ZLIB])
69 AC_SUBST([ZLIB_SRC])
70 AC_SUBST([LIBTOOL_DEPS])
71 AC_SUBST([ac_config_libobj_dir])
72 AC_SUBST([CONFIGURE_ARGS])
73 AC_SUBST([LIBDL])
74 AC_SUBST([LT_STATIC])
75 AC_SUBST([LIBINTL])
76 AC_SUBST([SUDO_NLS])
77 AC_SUBST([LOCALEDIR_SUFFIX])
78 AC_SUBST([COMPAT_TEST_PROGS])
79 AC_SUBST([CROSS_COMPILING])
80 AC_SUBST([PIE_LDFLAGS])
81 AC_SUBST([PIE_CFLAGS])
82 AC_SUBST([SSP_LDFLAGS])
83 AC_SUBST([SSP_CFLAGS])
84 AC_SUBST([NO_VIZ])
85 dnl
86 dnl Variables that get substituted in docs (not overridden by environment)
87 dnl
88 AC_SUBST([iolog_dir])dnl real initial value from SUDO_IO_LOGDIR
89 AC_SUBST([timedir])dnl real initial value from SUDO_TIMEDIR
90 AC_SUBST([timeout])
91 AC_SUBST([password_timeout])
92 AC_SUBST([sudo_umask])
93 AC_SUBST([umask_override])
94 AC_SUBST([passprompt])
95 AC_SUBST([long_otp_prompt])
96 AC_SUBST([lecture])
97 AC_SUBST([logfac])
98 AC_SUBST([goodpri])
99 AC_SUBST([badpri])
100 AC_SUBST([loglen])
101 AC_SUBST([ignore_dot])
102 AC_SUBST([mail_no_user])
103 AC_SUBST([mail_no_host])
104 AC_SUBST([mail_no_perms])
105 AC_SUBST([mailto])
106 AC_SUBST([mailsub])
107 AC_SUBST([badpass_message])
108 AC_SUBST([fqdn])
109 AC_SUBST([runas_default])
110 AC_SUBST([env_editor])
111 AC_SUBST([env_reset])
112 AC_SUBST([passwd_tries])
113 AC_SUBST([tty_tickets])
114 AC_SUBST([insults])
115 AC_SUBST([root_sudo])
116 AC_SUBST([path_info])
117 AC_SUBST([ldap_conf])
118 AC_SUBST([ldap_secret])
119 AC_SUBST([sssd_lib])
120 AC_SUBST([nsswitch_conf])
121 AC_SUBST([netsvc_conf])
122 AC_SUBST([secure_path])
123 AC_SUBST([editor])
124 AC_SUBST([pam_session])
125 AC_SUBST([PLUGINDIR])
126 #
127 # Begin initial values for man page substitution
128 #
129 iolog_dir=/var/log/sudo-io
130 timedir=/var/adm/sudo
131 timeout=5
132 password_timeout=5
133 sudo_umask=0022
134 umask_override=off
135 passprompt="Password:"
136 long_otp_prompt=off
137 lecture=once
138 logfac=auth
139 goodpri=notice
140 badpri=alert
141 loglen=80
142 ignore_dot=off
143 mail_no_user=on
144 mail_no_host=off
145 mail_no_perms=off
146 mailto=root
147 mailsub="*** SECURITY information for %h ***"
148 badpass_message="Sorry, try again."
149 fqdn=off
150 runas_default=root
151 env_editor=off
152 env_reset=on
153 editor=vi
154 passwd_tries=3
155 tty_tickets=on
156 insults=off
157 root_sudo=on
158 path_info=on
159 ldap_conf=/etc/ldap.conf
160 ldap_secret=/etc/ldap.secret
161 netsvc_conf=/etc/netsvc.conf
162 noexec_file=/usr/local/libexec/sudo/sudo_noexec.so
163 sesh_file=/usr/local/libexec/sudo/sesh
164 nsswitch_conf=/etc/nsswitch.conf
165 secure_path="not set"
166 pam_session=on
167 PLUGINDIR=/usr/local/libexec/sudo
168 #
169 # End initial values for man page substitution
170 #
171 dnl
172 dnl Initial values for Makefile variables listed above
173 dnl May be overridden by environment variables..
174 dnl
175 INSTALL_NOEXEC=
176 devdir='$(srcdir)'
177 PROGS="sudo"
178 : ${MANDIRTYPE='man'}
179 : ${mansrcdir='.'}
180 : ${SHLIB_MODE='0644'}
181 : ${SUDOERS_MODE='0440'}
182 : ${SUDOERS_UID='0'}
183 : ${SUDOERS_GID='0'}
184 DEVEL=
185 LDAP="#"
186 BAMAN=0
187 LCMAN=0
188 PSMAN=0
189 SEMAN=0
190 LIBINTL=
191 ZLIB=
192 ZLIB_SRC=
193 AUTH_OBJS=
194 AUTH_REG=
195 AUTH_EXCL=
196 AUTH_EXCL_DEF=
197 AUTH_DEF=passwd
198 SUDO_NLS=disabled
199 LOCALEDIR_SUFFIX=
200 LT_LDEXPORTS="-export-symbols \$(shlib_exp)"
201 LT_LDDEP="\$(shlib_exp)"
202 NO_VIZ="-DNO_VIZ"
203 OS_INIT=os_init_common
204
205 dnl
206 dnl Other vaiables
207 dnl
208 CHECKSHADOW=true
209 shadow_defs=
210 shadow_funcs=
211 shadow_libs=
212 shadow_libs_optional=
213 CONFIGURE_ARGS="$@"
214
215 dnl
216 dnl LD_PRELOAD equivalents
217 dnl
218 RTLD_PRELOAD_VAR="LD_PRELOAD"
219 RTLD_PRELOAD_ENABLE_VAR=
220 RTLD_PRELOAD_DELIM=":"
221 RTLD_PRELOAD_DEFAULT=
222
223 dnl
224 dnl libc replacement functions live in compat
225 dnl
226 AC_CONFIG_LIBOBJ_DIR(compat)
227
228 #
229 # Prior to sudo 1.8.7, sudo stored libexec files in $libexecdir.
230 # Starting with sudo 1.8.7, $libexecdir/sudo is used so strip
231 # off an extraneous "/sudo" from libexecdir.
232 #
233 case "$libexecdir" in
234     */sudo)
235         AC_MSG_WARN([libexecdir should not include the "sudo" subdirectory])
236         libexecdir=`expr "$libexecdir" : '\\(.*\\)/sudo$'`
237         ;;
238 esac
239
240 dnl
241 dnl Deprecated --with options (these all warn or generate an error)
242 dnl
243
244 AC_ARG_WITH(otp-only, [AS_HELP_STRING([--with-otp-only], [deprecated])],
245 [case $with_otp_only in
246     yes)        with_passwd="no"
247                 AC_MSG_NOTICE([--with-otp-only option deprecated, treating as --without-passwd])
248                 ;;
249 esac])
250
251 AC_ARG_WITH(alertmail, [AS_HELP_STRING([--with-alertmail], [deprecated])],
252 [case $with_alertmail in
253     *)          with_mailto="$with_alertmail"
254                 AC_MSG_NOTICE([--with-alertmail option deprecated, treating as --mailto])
255                 ;;
256 esac])
257
258 dnl
259 dnl Options for --with
260 dnl
261
262 AC_ARG_WITH(devel, [AS_HELP_STRING([--with-devel], [add development options])],
263 [case $with_devel in
264     yes)        AC_MSG_NOTICE([Setting up for development: -Wall, flex, yacc])
265                 OSDEFS="${OSDEFS} -DSUDO_DEVEL"
266                 DEVEL="true"
267                 devdir=.
268                 ;;
269     no)         ;;
270     *)          AC_MSG_WARN([Ignoring unknown argument to --with-devel: $with_devel])
271                 ;;
272 esac])
273
274 AC_ARG_WITH(CC, [AS_HELP_STRING([--with-CC], [C compiler to use])],
275 [case $with_CC in
276     *)          AC_MSG_ERROR([the --with-CC option is no longer supported, please set the CC environment variable instead.])
277                 ;;
278 esac])
279
280 AC_ARG_WITH(rpath, [AS_HELP_STRING([--with-rpath], [deprecated, use --disable-rpath])],
281 [AC_MSG_WARN([--with-rpath deprecated, rpath is now the default])])
282
283 AC_ARG_WITH(blibpath, [AS_HELP_STRING([--with-blibpath[=PATH]], [deprecated])],
284 [AC_MSG_WARN([--with-blibpath deprecated, use --with-libpath])])
285
286 dnl
287 dnl Handle BSM auditing support.
288 dnl
289 AC_ARG_WITH(bsm-audit, [AS_HELP_STRING([--with-bsm-audit], [enable BSM audit support])],
290 [case $with_bsm_audit in
291     yes)        AC_DEFINE(HAVE_BSM_AUDIT)
292                 SUDOERS_LIBS="${SUDOERS_LIBS} -lbsm"
293                 SUDOERS_OBJS="${SUDOERS_OBJS} bsm_audit.lo"
294                 ;;
295     no)         ;;
296     *)          AC_MSG_ERROR(["--with-bsm-audit does not take an argument."])
297                 ;;
298 esac])
299
300 dnl
301 dnl Handle Linux auditing support.
302 dnl
303 AC_ARG_WITH(linux-audit, [AS_HELP_STRING([--with-linux-audit], [enable Linux audit support])],
304 [case $with_linux_audit in
305     yes)        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <libaudit.h>]], [[int i = AUDIT_USER_CMD; (void)i;]])], [
306                     AC_DEFINE(HAVE_LINUX_AUDIT)
307                     SUDO_LIBS="${SUDO_LIBS} -laudit"
308                     SUDOERS_LIBS="${SUDO_LIBS} -laudit"
309                     SUDOERS_OBJS="${SUDOERS_OBJS} linux_audit.lo"
310                 ], [
311                     AC_MSG_ERROR([unable to find AUDIT_USER_CMD in libaudit.h for --with-linux-audit])
312                 ])
313                 ;;
314     no)         ;;
315     *)          AC_MSG_ERROR(["--with-linux-audit does not take an argument."])
316                 ;;
317 esac])
318
319 dnl
320 dnl Handle SSSD support.
321 dnl
322 AC_ARG_WITH(sssd, [AS_HELP_STRING([--with-sssd], [enable SSSD support])],
323 [case $with_sssd in
324     yes)        SUDOERS_OBJS="${SUDOERS_OBJS} sssd.lo"
325                 AC_DEFINE(HAVE_SSSD)
326                 ;;
327     no)         ;;
328     *)          AC_MSG_ERROR(["--with-sssd does not take an argument."])
329                 ;;
330 esac])
331
332 AC_ARG_WITH(sssd-lib, [AS_HELP_STRING([--with-sssd-lib], [path to the SSSD library])])
333 sssd_lib="\"LIBDIR\""
334 test -n "$with_sssd_lib" && sssd_lib="$with_sssd_lib"
335 SUDO_DEFINE_UNQUOTED(_PATH_SSSD_LIB, "$sssd_lib", [Path to the SSSD library])
336
337 AC_ARG_WITH(incpath, [AS_HELP_STRING([--with-incpath], [additional places to look for include files])],
338 [case $with_incpath in
339     yes)        AC_MSG_ERROR(["must give --with-incpath an argument."])
340                 ;;
341     no)         AC_MSG_ERROR(["--without-incpath not supported."])
342                 ;;
343     *)          AC_MSG_NOTICE([Adding ${with_incpath} to CPPFLAGS])
344                 for i in ${with_incpath}; do
345                     SUDO_APPEND_CPPFLAGS(-I${i})
346                 done
347                 ;;
348 esac])
349
350 AC_ARG_WITH(libpath, [AS_HELP_STRING([--with-libpath], [additional places to look for libraries])],
351 [case $with_libpath in
352     yes)        AC_MSG_ERROR(["must give --with-libpath an argument."])
353                 ;;
354     no)         AC_MSG_ERROR(["--without-libpath not supported."])
355                 ;;
356     *)          AC_MSG_NOTICE([Adding ${with_libpath} to LDFLAGS])
357                 ;;
358 esac])
359
360 AC_ARG_WITH(libraries, [AS_HELP_STRING([--with-libraries], [additional libraries to link with])],
361 [case $with_libraries in
362     yes)        AC_MSG_ERROR(["must give --with-libraries an argument."])
363                 ;;
364     no)         AC_MSG_ERROR(["--without-libraries not supported."])
365                 ;;
366     *)          AC_MSG_NOTICE([Adding ${with_libraries} to LIBS])
367                 ;;
368 esac])
369
370 AC_ARG_WITH(efence, [AS_HELP_STRING([--with-efence], [link with -lefence for malloc() debugging])],
371 [case $with_efence in
372     yes)        AC_MSG_NOTICE([Sudo will link with -lefence (Electric Fence)])
373                 LIBS="${LIBS} -lefence"
374                 if test -f /usr/local/lib/libefence.a; then
375                     with_libpath="${with_libpath} /usr/local/lib"
376                 fi
377                 ;;
378     no)         ;;
379     *)          AC_MSG_WARN([Ignoring unknown argument to --with-efence: $with_efence])
380                 ;;
381 esac])
382
383 AC_ARG_WITH(csops, [AS_HELP_STRING([--with-csops], [add CSOps standard options])],
384 [case $with_csops in
385     yes)        AC_MSG_NOTICE([Adding CSOps standard options])
386                 CHECKSIA=false
387                 with_ignore_dot=yes
388                 insults=on
389                 with_classic_insults=yes
390                 with_csops_insults=yes
391                 with_env_editor=yes
392                 : ${mansectsu='8'}
393                 : ${mansectform='5'}
394                 ;;
395     no)         ;;
396     *)          AC_MSG_WARN([Ignoring unknown argument to --with-csops: $with_csops])
397                 ;;
398 esac])
399
400 AC_ARG_WITH(passwd, [AS_HELP_STRING([--without-passwd], [don't use passwd/shadow file for authentication])],
401 [case $with_passwd in
402     yes|no)     AC_MSG_CHECKING(whether to use shadow/passwd file authentication)
403                 AC_MSG_RESULT($with_passwd)
404                 AUTH_DEF=""
405                 test "$with_passwd" = "yes" && AUTH_REG="$AUTH_REG passwd"
406                 ;;
407     *)          AC_MSG_ERROR(["Sorry, --with-passwd does not take an argument."])
408                 ;;
409 esac])
410
411 AC_ARG_WITH(skey, [AS_HELP_STRING([--with-skey[=DIR]], [enable S/Key support ])],
412 [case $with_skey in
413     no)         ;;
414     *)          AC_DEFINE(HAVE_SKEY)
415                 AC_MSG_CHECKING(whether to try S/Key authentication)
416                 AC_MSG_RESULT(yes)
417                 AUTH_REG="$AUTH_REG S/Key"
418                 ;;
419 esac])
420
421 AC_ARG_WITH(opie, [AS_HELP_STRING([--with-opie[=DIR]], [enable OPIE support ])],
422 [case $with_opie in
423     no)         ;;
424     *)          AC_DEFINE(HAVE_OPIE)
425                 AC_MSG_CHECKING(whether to try NRL OPIE authentication)
426                 AC_MSG_RESULT(yes)
427                 AUTH_REG="$AUTH_REG NRL_OPIE"
428                 ;;
429 esac])
430
431 AC_ARG_WITH(long-otp-prompt, [AS_HELP_STRING([--with-long-otp-prompt], [use a two line OTP (skey/opie) prompt])],
432 [case $with_long_otp_prompt in
433     yes)        AC_DEFINE(LONG_OTP_PROMPT)
434                 AC_MSG_CHECKING(whether to use a two line prompt for OTP authentication)
435                 AC_MSG_RESULT(yes)
436                 long_otp_prompt=on
437                 ;;
438     no)         long_otp_prompt=off
439                 ;;
440     *)          AC_MSG_ERROR(["--with-long-otp-prompt does not take an argument."])
441                 ;;
442 esac])
443
444 AC_ARG_WITH(SecurID, [AS_HELP_STRING([--with-SecurID[[=DIR]]], [enable SecurID support])],
445 [case $with_SecurID in
446     no)         ;;
447     *)          AC_DEFINE(HAVE_SECURID)
448                 AC_MSG_CHECKING(whether to use SecurID for authentication)
449                 AC_MSG_RESULT(yes)
450                 AUTH_EXCL="$AUTH_EXCL SecurID"
451                 ;;
452 esac])
453
454 AC_ARG_WITH(fwtk, [AS_HELP_STRING([--with-fwtk[[=DIR]]], [enable FWTK AuthSRV support])],
455 [case $with_fwtk in
456     no)         ;;
457     *)          AC_DEFINE(HAVE_FWTK)
458                 AC_MSG_CHECKING(whether to use FWTK AuthSRV for authentication)
459                 AC_MSG_RESULT(yes)
460                 AUTH_EXCL="$AUTH_EXCL FWTK"
461                 ;;
462 esac])
463
464 AC_ARG_WITH(kerb5, [AS_HELP_STRING([--with-kerb5[[=DIR]]], [enable Kerberos V support])],
465 [case $with_kerb5 in
466     no)         ;;
467     *)          AC_MSG_CHECKING(whether to try Kerberos V authentication)
468                 AC_MSG_RESULT(yes)
469                 AUTH_REG="$AUTH_REG kerb5"
470                 ;;
471 esac])
472
473 AC_ARG_WITH(aixauth, [AS_HELP_STRING([--with-aixauth], [enable AIX general authentication support])],
474 [case $with_aixauth in
475     yes)        AUTH_EXCL="$AUTH_EXCL AIX_AUTH";;
476     no)         ;;
477     *)          AC_MSG_ERROR(["--with-aixauth does not take an argument."])
478                 ;;
479 esac])
480
481 AC_ARG_WITH(pam, [AS_HELP_STRING([--with-pam], [enable PAM support])],
482 [case $with_pam in
483     yes)        AUTH_EXCL="$AUTH_EXCL PAM";;
484     no)         ;;
485     *)          AC_MSG_ERROR(["--with-pam does not take an argument."])
486                 ;;
487 esac])
488
489 AC_ARG_WITH(AFS, [AS_HELP_STRING([--with-AFS], [enable AFS support])],
490 [case $with_AFS in
491     yes)        AC_DEFINE(HAVE_AFS)
492                 AC_MSG_CHECKING(whether to try AFS (kerberos) authentication)
493                 AC_MSG_RESULT(yes)
494                 AUTH_REG="$AUTH_REG AFS"
495                 ;;
496     no)         ;;
497     *)          AC_MSG_ERROR(["--with-AFS does not take an argument."])
498                 ;;
499 esac])
500
501 AC_ARG_WITH(DCE, [AS_HELP_STRING([--with-DCE], [enable DCE support])],
502 [case $with_DCE in
503     yes)        AC_DEFINE(HAVE_DCE)
504                 AC_MSG_CHECKING(whether to try DCE (kerberos) authentication)
505                 AC_MSG_RESULT(yes)
506                 AUTH_REG="$AUTH_REG DCE"
507                 ;;
508     no)         ;;
509     *)          AC_MSG_ERROR(["--with-DCE does not take an argument."])
510                 ;;
511 esac])
512
513 AC_ARG_WITH(logincap, [AS_HELP_STRING([--with-logincap], [enable BSD login class support])],
514 [case $with_logincap in
515     yes|no)     ;;
516     *)          AC_MSG_ERROR(["--with-logincap does not take an argument."])
517                 ;;
518 esac])
519
520 AC_ARG_WITH(bsdauth, [AS_HELP_STRING([--with-bsdauth], [enable BSD authentication support])],
521 [case $with_bsdauth in
522     yes)        AUTH_EXCL="$AUTH_EXCL BSD_AUTH";;
523     no)         ;;
524     *)          AC_MSG_ERROR(["--with-bsdauth does not take an argument."])
525                 ;;
526 esac])
527
528 AC_ARG_WITH(project, [AS_HELP_STRING([--with-project], [enable Solaris project support])],
529 [case $with_project in
530     yes|no)     ;;
531     no) ;;
532     *)          AC_MSG_ERROR(["--with-project does not take an argument."])
533                 ;;
534 esac])
535
536 AC_MSG_CHECKING(whether to lecture users the first time they run sudo)
537 AC_ARG_WITH(lecture, [AS_HELP_STRING([--without-lecture], [don't print lecture for first-time sudoer])],
538 [case $with_lecture in
539     yes|short|always)   lecture=once
540                 ;;
541     no|none|never)      lecture=never
542                 ;;
543     *)          AC_MSG_ERROR(["unknown argument to --with-lecture: $with_lecture"])
544                 ;;
545 esac])
546 if test "$lecture" = "once"; then
547     AC_MSG_RESULT(yes)
548 else
549     AC_DEFINE(NO_LECTURE)
550     AC_MSG_RESULT(no)
551 fi
552
553 AC_MSG_CHECKING(whether sudo should log via syslog or to a file by default)
554 AC_ARG_WITH(logging, [AS_HELP_STRING([--with-logging], [log via syslog, file, or both])],
555 [case $with_logging in
556     yes)        AC_MSG_ERROR(["must give --with-logging an argument."])
557                 ;;
558     no)         AC_MSG_ERROR(["--without-logging not supported."])
559                 ;;
560     syslog)     AC_DEFINE(LOGGING, SLOG_SYSLOG)
561                 AC_MSG_RESULT(syslog)
562                 ;;
563     file)       AC_DEFINE(LOGGING, SLOG_FILE)
564                 AC_MSG_RESULT(file)
565                 ;;
566     both)       AC_DEFINE(LOGGING, SLOG_BOTH)
567                 AC_MSG_RESULT(both)
568                 ;;
569     *)          AC_MSG_ERROR(["unknown argument to --with-logging: $with_logging"])
570                 ;;
571 esac], [AC_DEFINE(LOGGING, SLOG_SYSLOG) AC_MSG_RESULT(syslog)])
572
573 AC_ARG_WITH(logfac, [AS_HELP_STRING([--with-logfac], [syslog facility to log with (default is "auth")])],
574 [case $with_logfac in
575     yes)        AC_MSG_ERROR(["must give --with-logfac an argument."])
576                 ;;
577     no)         AC_MSG_ERROR(["--without-logfac not supported."])
578                 ;;
579     authpriv|auth|daemon|user|local0|local1|local2|local3|local4|local5|local6|local7)          logfac=$with_logfac
580                 ;;
581     *)          AC_MSG_ERROR(["$with_logfac is not a supported syslog facility."])
582                 ;;
583 esac])
584
585 AC_MSG_CHECKING(at which syslog priority to log commands)
586 AC_ARG_WITH(goodpri, [AS_HELP_STRING([--with-goodpri], [syslog priority for commands (def is "notice")])],
587 [case $with_goodpri in
588     yes)        AC_MSG_ERROR(["must give --with-goodpri an argument."])
589                 ;;
590     no)         AC_MSG_ERROR(["--without-goodpri not supported."])
591                 ;;
592     alert|crit|debug|emerg|err|info|notice|warning)
593                 goodpri=$with_goodpri
594                 ;;
595     *)          AC_MSG_ERROR(["$with_goodpri is not a supported syslog priority."])
596                 ;;
597 esac])
598 AC_DEFINE_UNQUOTED(PRI_SUCCESS, "$goodpri", [The syslog priority sudo will use for successful attempts.])
599 AC_MSG_RESULT($goodpri)
600
601 AC_MSG_CHECKING(at which syslog priority to log failures)
602 AC_ARG_WITH(badpri, [AS_HELP_STRING([--with-badpri], [syslog priority for failures (def is "alert")])],
603 [case $with_badpri in
604     yes)        AC_MSG_ERROR(["must give --with-badpri an argument."])
605                 ;;
606     no)         AC_MSG_ERROR(["--without-badpri not supported."])
607                 ;;
608     alert|crit|debug|emerg|err|info|notice|warning)
609                 badpri=$with_badpri
610                 ;;
611     *)          AC_MSG_ERROR([$with_badpri is not a supported syslog priority.])
612                 ;;
613 esac])
614 AC_DEFINE_UNQUOTED(PRI_FAILURE, "$badpri", [The syslog priority sudo will use for unsuccessful attempts/errors.])
615 AC_MSG_RESULT($badpri)
616
617 AC_ARG_WITH(logpath, [AS_HELP_STRING([--with-logpath], [path to the sudo log file])],
618 [case $with_logpath in
619     yes)        AC_MSG_ERROR(["must give --with-logpath an argument."])
620                 ;;
621     no)         AC_MSG_ERROR(["--without-logpath not supported."])
622                 ;;
623 esac])
624
625 AC_MSG_CHECKING(how long a line in the log file should be)
626 AC_ARG_WITH(loglen, [AS_HELP_STRING([--with-loglen], [maximum length of a log file line (default is 80)])],
627 [case $with_loglen in
628     yes)        AC_MSG_ERROR(["must give --with-loglen an argument."])
629                 ;;
630     no)         AC_MSG_ERROR(["--without-loglen not supported."])
631                 ;;
632     [[0-9]]*)   loglen=$with_loglen
633                 ;;
634     *)          AC_MSG_ERROR(["you must enter a number, not $with_loglen"])
635                 ;;
636 esac])
637 AC_DEFINE_UNQUOTED(MAXLOGFILELEN, $loglen, [The max number of chars per log file line (for line wrapping).])
638 AC_MSG_RESULT($loglen)
639
640 AC_MSG_CHECKING(whether sudo should ignore '.' or '' in \$PATH)
641 AC_ARG_WITH(ignore-dot, [AS_HELP_STRING([--with-ignore-dot], [ignore '.' in the PATH])],
642 [case $with_ignore_dot in
643     yes)        ignore_dot=on
644                 ;;
645     no)         ignore_dot=off
646                 ;;
647     *)          AC_MSG_ERROR(["--with-ignore-dot does not take an argument."])
648                 ;;
649 esac])
650 if test "$ignore_dot" = "on"; then
651     AC_DEFINE(IGNORE_DOT_PATH)
652     AC_MSG_RESULT(yes)
653 else
654     AC_MSG_RESULT(no)
655 fi
656
657 AC_MSG_CHECKING(whether to send mail when a user is not in sudoers)
658 AC_ARG_WITH(mail-if-no-user, [AS_HELP_STRING([--without-mail-if-no-user], [do not send mail if user not in sudoers])],
659 [case $with_mail_if_no_user in
660     yes)        mail_no_user=on
661                 ;;
662     no)         mail_no_user=off
663                 ;;
664     *)          AC_MSG_ERROR(["--with-mail-if-no-user does not take an argument."])
665                 ;;
666 esac])
667 if test "$mail_no_user" = "on"; then
668     AC_DEFINE(SEND_MAIL_WHEN_NO_USER)
669     AC_MSG_RESULT(yes)
670 else
671     AC_MSG_RESULT(no)
672 fi
673
674 AC_MSG_CHECKING(whether to send mail when user listed but not for this host)
675 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])],
676 [case $with_mail_if_no_host in
677     yes)        mail_no_host=on
678                 ;;
679     no)         mail_no_host=off
680                 ;;
681     *)          AC_MSG_ERROR(["--with-mail-if-no-host does not take an argument."])
682                 ;;
683 esac])
684 if test "$mail_no_host" = "on"; then
685     AC_DEFINE(SEND_MAIL_WHEN_NO_HOST)
686     AC_MSG_RESULT(yes)
687 else
688     AC_MSG_RESULT(no)
689 fi
690
691 AC_MSG_CHECKING(whether to send mail when a user tries a disallowed command)
692 AC_ARG_WITH(mail-if-noperms, [AS_HELP_STRING([--with-mail-if-noperms], [send mail if user not allowed to run command])],
693 [case $with_mail_if_noperms in
694     yes)        mail_noperms=on
695                 ;;
696     no)         mail_noperms=off
697                 ;;
698     *)          AC_MSG_ERROR(["--with-mail-if-noperms does not take an argument."])
699                 ;;
700 esac])
701 if test "$mail_noperms" = "on"; then
702     AC_DEFINE(SEND_MAIL_WHEN_NOT_OK)
703     AC_MSG_RESULT(yes)
704 else
705     AC_MSG_RESULT(no)
706 fi
707
708 AC_MSG_CHECKING(who should get the mail that sudo sends)
709 AC_ARG_WITH(mailto, [AS_HELP_STRING([--with-mailto], [who should get sudo mail (default is "root")])],
710 [case $with_mailto in
711     yes)        AC_MSG_ERROR(["must give --with-mailto an argument."])
712                 ;;
713     no)         AC_MSG_ERROR(["--without-mailto not supported."])
714                 ;;
715     *)          mailto=$with_mailto
716                 ;;
717 esac])
718 AC_DEFINE_UNQUOTED(MAILTO, "$mailto", [The user or email address that sudo mail is sent to.])
719 AC_MSG_RESULT([$mailto])
720
721 AC_ARG_WITH(mailsubject, [AS_HELP_STRING([--with-mailsubject], [subject of sudo mail])],
722 [case $with_mailsubject in
723     yes)        AC_MSG_ERROR(["must give --with-mailsubject an argument."])
724                 ;;
725     no)         AC_MSG_WARN([Sorry, --without-mailsubject not supported.])
726                 ;;
727     *)          mailsub="$with_mailsubject"
728                 AC_MSG_CHECKING(sudo mail subject)
729                 AC_MSG_RESULT([Using alert mail subject: $mailsub])
730                 ;;
731 esac])
732 AC_DEFINE_UNQUOTED(MAILSUBJECT, "$mailsub", [The subject of the mail sent by sudo to the MAILTO user/address.])
733
734 AC_MSG_CHECKING(for bad password prompt)
735 AC_ARG_WITH(passprompt, [AS_HELP_STRING([--with-passprompt], [default password prompt])],
736 [case $with_passprompt in
737     yes)        AC_MSG_ERROR(["must give --with-passprompt an argument."])
738                 ;;
739     no)         AC_MSG_WARN([Sorry, --without-passprompt not supported.])
740                 ;;
741     *)          passprompt="$with_passprompt"
742 esac])
743 AC_MSG_RESULT($passprompt)
744 AC_DEFINE_UNQUOTED(PASSPROMPT, "$passprompt", [The default password prompt.])
745
746 AC_MSG_CHECKING(for bad password message)
747 AC_ARG_WITH(badpass-message, [AS_HELP_STRING([--with-badpass-message], [message the user sees when the password is wrong])],
748 [case $with_badpass_message in
749     yes)        AC_MSG_ERROR(["Must give --with-badpass-message an argument."])
750                 ;;
751     no)         AC_MSG_WARN([Sorry, --without-badpass-message not supported.])
752                 ;;
753     *)          badpass_message="$with_badpass_message"
754                 ;;
755 esac])
756 AC_DEFINE_UNQUOTED(INCORRECT_PASSWORD, "$badpass_message", [The message given when a bad password is entered.])
757 AC_MSG_RESULT([$badpass_message])
758
759 AC_MSG_CHECKING(whether to expect fully qualified hosts in sudoers)
760 AC_ARG_WITH(fqdn, [AS_HELP_STRING([--with-fqdn], [expect fully qualified hosts in sudoers])],
761 [case $with_fqdn in
762     yes)        fqdn=on
763                 ;;
764     no)         fqdn=off
765                 ;;
766     *)          AC_MSG_ERROR(["--with-fqdn does not take an argument."])
767                 ;;
768 esac])
769 if test "$fqdn" = "on"; then
770     AC_DEFINE(FQDN)
771     AC_MSG_RESULT(yes)
772 else
773     AC_MSG_RESULT(no)
774 fi
775
776 AC_ARG_WITH(timedir, [AS_HELP_STRING([--with-timedir], [path to the sudo timestamp dir])],
777 [case $with_timedir in
778     yes)        AC_MSG_ERROR(["must give --with-timedir an argument."])
779                 ;;
780     no)         AC_MSG_ERROR(["--without-timedir not supported."])
781                 ;;
782 esac])
783
784 AC_ARG_WITH(iologdir, [AS_HELP_STRING([--with-iologdir=DIR], [directory to store sudo I/O log files in])],
785 [case $with_iologdir in
786     yes)    ;;
787     no)     AC_MSG_ERROR(["--without-iologdir not supported."])
788             ;;
789 esac])
790
791 AC_ARG_WITH(sendmail, [AS_HELP_STRING([--with-sendmail], [set path to sendmail])
792 AS_HELP_STRING([--without-sendmail], [do not send mail at all])],
793 [case $with_sendmail in
794     yes)        with_sendmail=""
795                 ;;
796     no)         ;;
797     *)          SUDO_DEFINE_UNQUOTED(_PATH_SUDO_SENDMAIL, "$with_sendmail")
798                 ;;
799 esac])
800
801 AC_ARG_WITH(sudoers-mode, [AS_HELP_STRING([--with-sudoers-mode], [mode of sudoers file (defaults to 0440)])],
802 [case $with_sudoers_mode in
803     yes)        AC_MSG_ERROR(["must give --with-sudoers-mode an argument."])
804                 ;;
805     no)         AC_MSG_ERROR(["--without-sudoers-mode not supported."])
806                 ;;
807     [[1-9]]*)   SUDOERS_MODE=0${with_sudoers_mode}
808                 ;;
809     0*)         SUDOERS_MODE=$with_sudoers_mode
810                 ;;
811     *)          AC_MSG_ERROR(["you must use an octal mode, not a name."])
812                 ;;
813 esac])
814
815 AC_ARG_WITH(sudoers-uid, [AS_HELP_STRING([--with-sudoers-uid], [uid that owns sudoers file (defaults to 0)])],
816 [case $with_sudoers_uid in
817     yes)        AC_MSG_ERROR(["must give --with-sudoers-uid an argument."])
818                 ;;
819     no)         AC_MSG_ERROR(["--without-sudoers-uid not supported."])
820                 ;;
821     [[0-9]]*)   SUDOERS_UID=$with_sudoers_uid
822                 ;;
823     *)          AC_MSG_ERROR(["you must use an unsigned numeric uid, not a name."])
824                 ;;
825 esac])
826
827 AC_ARG_WITH(sudoers-gid, [AS_HELP_STRING([--with-sudoers-gid], [gid that owns sudoers file (defaults to 0)])],
828 [case $with_sudoers_gid in
829     yes)        AC_MSG_ERROR(["must give --with-sudoers-gid an argument."])
830                 ;;
831     no)         AC_MSG_ERROR(["--without-sudoers-gid not supported."])
832                 ;;
833     [[0-9]]*)   SUDOERS_GID=$with_sudoers_gid
834                 ;;
835     *)          AC_MSG_ERROR(["you must use an unsigned numeric gid, not a name."])
836                 ;;
837 esac])
838
839 AC_MSG_CHECKING(for umask programs should be run with)
840 AC_ARG_WITH(umask, [AS_HELP_STRING([--with-umask], [umask with which the prog should run (default is 022)])
841 AS_HELP_STRING([--without-umask], [Preserves the umask of the user invoking sudo.])],
842 [case $with_umask in
843     yes)        AC_MSG_ERROR(["must give --with-umask an argument."])
844                 ;;
845     no)         sudo_umask=0777
846                 ;;
847     [[0-9]]*)   sudo_umask=$with_umask
848                 ;;
849     *)          AC_MSG_ERROR(["you must enter a numeric mask."])
850                 ;;
851 esac])
852 AC_DEFINE_UNQUOTED(SUDO_UMASK, $sudo_umask, [The umask that the sudo-run prog should use.])
853 if test "$sudo_umask" = "0777"; then
854     AC_MSG_RESULT(user)
855 else
856     AC_MSG_RESULT($sudo_umask)
857 fi
858
859 AC_ARG_WITH(umask-override, [AS_HELP_STRING([--with-umask-override], [Use the umask specified in sudoers even if it is less restrictive than the user's.])],
860 [case $with_umask_override in
861     yes)        AC_DEFINE(UMASK_OVERRIDE)
862                 umask_override=on
863                 ;;
864     no)         umask_override=off
865                 ;;
866     *)          AC_MSG_ERROR(["--with-umask-override does not take an argument."])
867                 ;;
868 esac])
869
870 AC_MSG_CHECKING(for default user to run commands as)
871 AC_ARG_WITH(runas-default, [AS_HELP_STRING([--with-runas-default], [User to run commands as (default is "root")])],
872 [case $with_runas_default in
873     yes)        AC_MSG_ERROR(["must give --with-runas-default an argument."])
874                 ;;
875     no)         AC_MSG_ERROR(["--without-runas-default not supported."])
876                 ;;
877     *)          runas_default="$with_runas_default"
878                 ;;
879 esac])
880 AC_DEFINE_UNQUOTED(RUNAS_DEFAULT, "$runas_default", [The user sudo should run commands as by default.])
881 AC_MSG_RESULT([$runas_default])
882
883 AC_ARG_WITH(exempt, [AS_HELP_STRING([--with-exempt=group], [no passwd needed for users in this group])],
884 [case $with_exempt in
885     yes)        AC_MSG_ERROR(["must give --with-exempt an argument."])
886                 ;;
887     no)         AC_MSG_ERROR(["--without-exempt not supported."])
888                 ;;
889     *)          AC_DEFINE_UNQUOTED(EXEMPTGROUP, "$with_exempt", [If defined, users in this group need not enter a passwd (ie "sudo").])
890                 AC_MSG_CHECKING(for group to be exempt from password)
891                 AC_MSG_RESULT([$with_exempt])
892                 ;;
893 esac])
894
895 AC_MSG_CHECKING(for editor that visudo should use)
896 AC_ARG_WITH(editor, [AS_HELP_STRING([--with-editor=path], [Default editor for visudo (defaults to vi)])],
897 [case $with_editor in
898     yes)        AC_MSG_ERROR(["must give --with-editor an argument."])
899                 ;;
900     no)         AC_MSG_ERROR(["--without-editor not supported."])
901                 ;;
902     *)          AC_DEFINE_UNQUOTED(EDITOR, "$with_editor", [A colon-separated list of pathnames to be used as the editor for visudo.])
903                 AC_MSG_RESULT([$with_editor])
904                 editor="$with_editor"
905                 ;;
906 esac], [AC_DEFINE(EDITOR, _PATH_VI) AC_MSG_RESULT(vi)])
907
908 AC_MSG_CHECKING(whether to obey EDITOR and VISUAL environment variables)
909 AC_ARG_WITH(env-editor, [AS_HELP_STRING([--with-env-editor], [Use the environment variable EDITOR for visudo])],
910 [case $with_env_editor in
911     yes)        env_editor=on
912                 ;;
913     no)         env_editor=off
914                 ;;
915     *)          AC_MSG_ERROR(["--with-env-editor does not take an argument."])
916                 ;;
917 esac])
918 if test "$env_editor" = "on"; then
919     AC_DEFINE(ENV_EDITOR)
920     AC_MSG_RESULT(yes)
921 else
922     AC_MSG_RESULT(no)
923 fi
924
925 AC_MSG_CHECKING(number of tries a user gets to enter their password)
926 AC_ARG_WITH(passwd-tries, [AS_HELP_STRING([--with-passwd-tries], [number of tries to enter password (default is 3)])],
927 [case $with_passwd_tries in
928     yes)        ;;
929     no)         AC_MSG_ERROR(["--without-editor not supported."])
930                 ;;
931     [[1-9]]*)   passwd_tries=$with_passwd_tries
932                 ;;
933     *)          AC_MSG_ERROR(["you must enter the numer of tries, > 0"])
934                 ;;
935 esac])
936 AC_DEFINE_UNQUOTED(TRIES_FOR_PASSWORD, $passwd_tries, [The number of tries a user gets to enter their password.])
937 AC_MSG_RESULT($passwd_tries)
938
939 AC_MSG_CHECKING(time in minutes after which sudo will ask for a password again)
940 AC_ARG_WITH(timeout, [AS_HELP_STRING([--with-timeout], [minutes before sudo asks for passwd again (def is 5 minutes)])],
941 [case $with_timeout in
942     yes)        ;;
943     no)         timeout=0
944                 ;;
945     [[0-9]]*)   timeout=$with_timeout
946                 ;;
947     *)          AC_MSG_ERROR(["you must enter the numer of minutes."])
948                 ;;
949 esac])
950 AC_DEFINE_UNQUOTED(TIMEOUT, $timeout, [The number of minutes before sudo asks for a password again.])
951 AC_MSG_RESULT($timeout)
952
953 AC_MSG_CHECKING(time in minutes after the password prompt will time out)
954 AC_ARG_WITH(password-timeout, [AS_HELP_STRING([--with-password-timeout], [passwd prompt timeout in minutes (default is 5 minutes)])],
955 [case $with_password_timeout in
956     yes)        ;;
957     no)         password_timeout=0
958                 ;;
959     [[0-9]]*)   password_timeout=$with_password_timeout
960                 ;;
961     *)          AC_MSG_ERROR(["you must enter the numer of minutes."])
962                 ;;
963 esac])
964 AC_DEFINE_UNQUOTED(PASSWORD_TIMEOUT, $password_timeout, [The passwd prompt timeout (in minutes).])
965 AC_MSG_RESULT($password_timeout)
966
967 AC_MSG_CHECKING(whether to use per-tty ticket files)
968 AC_ARG_WITH(tty-tickets, [AS_HELP_STRING([--with-tty-tickets], [use a different ticket file for each tty])],
969 [case $with_tty_tickets in
970     yes)        tty_tickets=on
971                 ;;
972     no)         tty_tickets=off
973                 ;;
974     *)          AC_MSG_ERROR(["--with-tty-tickets does not take an argument."])
975                 ;;
976 esac])
977 if test "$tty_tickets" = "off"; then
978     AC_DEFINE(NO_TTY_TICKETS)
979     AC_MSG_RESULT(no)
980 else
981     AC_MSG_RESULT(yes)
982 fi
983
984 AC_MSG_CHECKING(whether to include insults)
985 AC_ARG_WITH(insults, [AS_HELP_STRING([--with-insults], [insult the user for entering an incorrect password])],
986 [case $with_insults in
987     yes)        insults=on
988                 with_classic_insults=yes
989                 with_csops_insults=yes
990                 ;;
991     disabled)   insults=off
992                 with_classic_insults=yes
993                 with_csops_insults=yes
994                 ;;
995     no)         insults=off
996                 ;;
997     *)          AC_MSG_ERROR(["--with-insults does not take an argument."])
998                 ;;
999 esac])
1000 if test "$insults" = "on"; then
1001     AC_DEFINE(USE_INSULTS)
1002     AC_MSG_RESULT(yes)
1003 else
1004     AC_MSG_RESULT(no)
1005 fi
1006
1007 AC_ARG_WITH(all-insults, [AS_HELP_STRING([--with-all-insults], [include all the sudo insult sets])],
1008 [case $with_all_insults in
1009     yes)        with_classic_insults=yes
1010                 with_csops_insults=yes
1011                 with_hal_insults=yes
1012                 with_goons_insults=yes
1013                 ;;
1014     no)         ;;
1015     *)          AC_MSG_ERROR(["--with-all-insults does not take an argument."])
1016                 ;;
1017 esac])
1018
1019 AC_ARG_WITH(classic-insults, [AS_HELP_STRING([--with-classic-insults], [include the insults from the "classic" sudo])],
1020 [case $with_classic_insults in
1021     yes)        AC_DEFINE(CLASSIC_INSULTS)
1022                 ;;
1023     no)         ;;
1024     *)          AC_MSG_ERROR(["--with-classic-insults does not take an argument."])
1025                 ;;
1026 esac])
1027
1028 AC_ARG_WITH(csops-insults, [AS_HELP_STRING([--with-csops-insults], [include CSOps insults])],
1029 [case $with_csops_insults in
1030     yes)        AC_DEFINE(CSOPS_INSULTS)
1031                 ;;
1032     no)         ;;
1033     *)          AC_MSG_ERROR(["--with-csops-insults does not take an argument."])
1034                 ;;
1035 esac])
1036
1037 AC_ARG_WITH(hal-insults, [AS_HELP_STRING([--with-hal-insults], [include 2001-like insults])],
1038 [case $with_hal_insults in
1039     yes)        AC_DEFINE(HAL_INSULTS)
1040                 ;;
1041     no)         ;;
1042     *)          AC_MSG_ERROR(["--with-hal-insults does not take an argument."])
1043                 ;;
1044 esac])
1045
1046 AC_ARG_WITH(goons-insults, [AS_HELP_STRING([--with-goons-insults], [include the insults from the "Goon Show"])],
1047 [case $with_goons_insults in
1048     yes)        AC_DEFINE(GOONS_INSULTS)
1049                 ;;
1050     no)         ;;
1051     *)          AC_MSG_ERROR(["--with-goons-insults does not take an argument."])
1052                 ;;
1053 esac])
1054
1055 AC_ARG_WITH(nsswitch, [AS_HELP_STRING([--with-nsswitch[[=PATH]]], [path to nsswitch.conf])],
1056 [case $with_nsswitch in
1057     no)         ;;
1058     yes)        with_nsswitch="/etc/nsswitch.conf"
1059                 ;;
1060     *)          ;;
1061 esac])
1062
1063 AC_ARG_WITH(ldap, [AS_HELP_STRING([--with-ldap[[=DIR]]], [enable LDAP support])],
1064 [case $with_ldap in
1065     no)         ;;
1066     *)          AC_DEFINE(HAVE_LDAP)
1067                 AC_MSG_CHECKING(whether to use sudoers from LDAP)
1068                 AC_MSG_RESULT(yes)
1069                 ;;
1070 esac])
1071
1072 AC_ARG_WITH(ldap-conf-file, [AS_HELP_STRING([--with-ldap-conf-file], [path to LDAP configuration file])])
1073 test -n "$with_ldap_conf_file" && ldap_conf="$with_ldap_conf_file"
1074 SUDO_DEFINE_UNQUOTED(_PATH_LDAP_CONF, "$ldap_conf", [Path to the ldap.conf file])
1075
1076 AC_ARG_WITH(ldap-secret-file, [AS_HELP_STRING([--with-ldap-secret-file], [path to LDAP secret password file])])
1077 test -n "$with_ldap_secret_file" && ldap_secret="$with_ldap_secret_file"
1078 SUDO_DEFINE_UNQUOTED(_PATH_LDAP_SECRET, "$ldap_secret", [Path to the ldap.secret file])
1079
1080 AC_ARG_WITH(pc-insults, [AS_HELP_STRING([--with-pc-insults], [replace politically incorrect insults with less offensive ones])],
1081 [case $with_pc_insults in
1082     yes)        AC_DEFINE(PC_INSULTS)
1083                 ;;
1084     no)         ;;
1085     *)          AC_MSG_ERROR(["--with-pc-insults does not take an argument."])
1086                 ;;
1087 esac])
1088
1089 dnl include all insult sets on one line
1090 if test "$insults" = "on"; then
1091     AC_MSG_CHECKING(which insult sets to include)
1092     i=""
1093     test "$with_goons_insults" = "yes" && i="goons ${i}"
1094     test "$with_hal_insults" = "yes" && i="hal ${i}"
1095     test "$with_csops_insults" = "yes" && i="csops ${i}"
1096     test "$with_classic_insults" = "yes" && i="classic ${i}"
1097     AC_MSG_RESULT([$i])
1098 fi
1099
1100 AC_MSG_CHECKING(whether to override the user's path)
1101 AC_ARG_WITH(secure-path, [AS_HELP_STRING([--with-secure-path], [override the user's path with a built-in one])],
1102 [case $with_secure_path in
1103     yes)        with_secure_path="/bin:/usr/ucb:/usr/bin:/usr/sbin:/sbin:/usr/etc:/etc"
1104                 AC_DEFINE_UNQUOTED(SECURE_PATH, "$with_secure_path")
1105                 AC_MSG_RESULT([$with_secure_path])
1106                 secure_path="set to $with_secure_path"
1107                 ;;
1108     no)         AC_MSG_RESULT(no)
1109                 ;;
1110     *)          AC_DEFINE_UNQUOTED(SECURE_PATH, "$with_secure_path")
1111                 AC_MSG_RESULT([$with_secure_path])
1112                 secure_path="set to F<$with_secure_path>"
1113                 ;;
1114 esac], AC_MSG_RESULT(no))
1115
1116 AC_MSG_CHECKING(whether to get ip addresses from the network interfaces)
1117 AC_ARG_WITH(interfaces, [AS_HELP_STRING([--without-interfaces], [don't try to read the ip addr of ether interfaces])],
1118 [case $with_interfaces in
1119     yes)        AC_MSG_RESULT(yes)
1120                 ;;
1121     no)         AC_DEFINE(STUB_LOAD_INTERFACES)
1122                 AC_MSG_RESULT(no)
1123                 ;;
1124     *)          AC_MSG_ERROR(["--with-interfaces does not take an argument."])
1125                 ;;
1126 esac], AC_MSG_RESULT(yes))
1127
1128 AC_ARG_WITH(stow, [AS_HELP_STRING([--with-stow], [deprecated])],
1129 [case $with_stow in
1130     *)          AC_MSG_NOTICE([--with-stow option deprecated, now is defalt behavior])
1131                 ;;
1132 esac])
1133
1134 AC_MSG_CHECKING(whether to use an askpass helper)
1135 AC_ARG_WITH(askpass, [AS_HELP_STRING([--with-askpass=PATH], [Fully qualified pathname of askpass helper])],
1136 [case $with_askpass in
1137     yes)        AC_MSG_ERROR(["--with-askpass takes a path as an argument."])
1138                 ;;
1139     no)         ;;
1140     *)          ;;
1141 esac], [
1142     with_askpass=no
1143     AC_MSG_RESULT(no)
1144 ])
1145 if test X"$with_askpass" != X"no"; then
1146     SUDO_DEFINE_UNQUOTED(_PATH_SUDO_ASKPASS, "$with_askpass")
1147 else
1148     SUDO_DEFINE_UNQUOTED(_PATH_SUDO_ASKPASS, NULL)
1149 fi
1150
1151 AC_ARG_WITH(plugindir, [AS_HELP_STRING([--with-plugindir], [set directory to load plugins from])],
1152 [case $with_plugindir in
1153     no)         AC_MSG_ERROR(["illegal argument: --without-plugindir."])
1154                 ;;
1155     *)          ;;
1156 esac], [with_plugindir="$libexecdir/sudo"])
1157
1158 AC_ARG_WITH(man, [AS_HELP_STRING([--with-man], [manual pages use man macros])],
1159 [case $with_man in
1160     yes)        MANTYPE=man
1161                 ;;
1162     no)         AC_MSG_ERROR(["--without-man not supported."])
1163                 ;;
1164     *)          AC_MSG_ERROR(["ignoring unknown argument to --with-man: $with_man."])
1165                 ;;
1166 esac])
1167
1168 AC_ARG_WITH(mdoc, [AS_HELP_STRING([--with-mdoc], [manual pages use mdoc macros])],
1169 [case $with_mdoc in
1170     yes)        MANTYPE=mdoc
1171                 ;;
1172     no)         AC_MSG_ERROR(["--without-mdoc not supported."])
1173                 ;;
1174     *)          AC_MSG_ERROR(["ignoring unknown argument to --with-mdoc: $with_mdoc."])
1175                 ;;
1176 esac])
1177
1178 dnl
1179 dnl Options for --enable
1180 dnl
1181
1182 AC_MSG_CHECKING(whether to do user authentication by default)
1183 AC_ARG_ENABLE(authentication,
1184 [AS_HELP_STRING([--disable-authentication], [Do not require authentication by default])],
1185 [ case "$enableval" in
1186     yes)        AC_MSG_RESULT(yes)
1187                 ;;
1188     no)         AC_MSG_RESULT(no)
1189                 AC_DEFINE(NO_AUTHENTICATION)
1190                 ;;
1191     *)          AC_MSG_RESULT(no)
1192                 AC_MSG_WARN([Ignoring unknown argument to --enable-authentication: $enableval])
1193                 ;;
1194   esac
1195 ], AC_MSG_RESULT(yes))
1196
1197 AC_MSG_CHECKING(whether to disable running the mailer as root)
1198 AC_ARG_ENABLE(root-mailer,
1199 [AS_HELP_STRING([--disable-root-mailer], [Don't run the mailer as root, run as the user])],
1200 [ case "$enableval" in
1201     yes)        AC_MSG_RESULT(no)
1202                 ;;
1203     no)         AC_MSG_RESULT(yes)
1204                 AC_DEFINE(NO_ROOT_MAILER)
1205                 ;;
1206     *)          AC_MSG_RESULT(no)
1207                 AC_MSG_WARN([Ignoring unknown argument to --enable-root-mailer: $enableval])
1208                 ;;
1209   esac
1210 ], AC_MSG_RESULT(no))
1211
1212 AC_ARG_ENABLE(setreuid,
1213 [AS_HELP_STRING([--disable-setreuid], [Don't try to use the setreuid() function])],
1214 [ case "$enableval" in
1215     no)         SKIP_SETREUID=yes
1216                 ;;
1217     *)          ;;
1218   esac
1219 ])
1220
1221 AC_ARG_ENABLE(setresuid,
1222 [AS_HELP_STRING([--disable-setresuid], [Don't try to use the setresuid() function])],
1223 [ case "$enableval" in
1224     no)         SKIP_SETRESUID=yes
1225                 ;;
1226     *)          ;;
1227   esac
1228 ])
1229
1230 AC_MSG_CHECKING(whether to disable shadow password support)
1231 AC_ARG_ENABLE(shadow,
1232 [AS_HELP_STRING([--disable-shadow], [Never use shadow passwords])],
1233 [ case "$enableval" in
1234     yes)        AC_MSG_RESULT(no)
1235                 ;;
1236     no)         AC_MSG_RESULT(yes)
1237                 CHECKSHADOW="false"
1238                 ;;
1239     *)          AC_MSG_RESULT(no)
1240                 AC_MSG_WARN([Ignoring unknown argument to --enable-shadow: $enableval])
1241                 ;;
1242   esac
1243 ], AC_MSG_RESULT(no))
1244
1245 AC_MSG_CHECKING(whether root should be allowed to use sudo)
1246 AC_ARG_ENABLE(root-sudo,
1247 [AS_HELP_STRING([--disable-root-sudo], [Don't allow root to run sudo])],
1248 [ case "$enableval" in
1249     yes)        AC_MSG_RESULT(yes)
1250                 ;;
1251     no)         AC_DEFINE(NO_ROOT_SUDO)
1252                 AC_MSG_RESULT(no)
1253                 root_sudo=off
1254                 ;;
1255     *)          AC_MSG_ERROR(["--enable-root-sudo does not take an argument."])
1256                 ;;
1257   esac
1258 ], AC_MSG_RESULT(yes))
1259
1260 AC_MSG_CHECKING(whether to log the hostname in the log file)
1261 AC_ARG_ENABLE(log-host,
1262 [AS_HELP_STRING([--enable-log-host], [Log the hostname in the log file])],
1263 [ case "$enableval" in
1264     yes)        AC_MSG_RESULT(yes)
1265                 AC_DEFINE(HOST_IN_LOG)
1266                 ;;
1267     no)         AC_MSG_RESULT(no)
1268                 ;;
1269     *)          AC_MSG_RESULT(no)
1270                 AC_MSG_WARN([Ignoring unknown argument to --enable-log-host: $enableval])
1271                 ;;
1272   esac
1273 ], AC_MSG_RESULT(no))
1274
1275 AC_MSG_CHECKING(whether to invoke a shell if sudo is given no arguments)
1276 AC_ARG_ENABLE(noargs-shell,
1277 [AS_HELP_STRING([--enable-noargs-shell], [If sudo is given no arguments run a shell])],
1278 [ case "$enableval" in
1279     yes)        AC_MSG_RESULT(yes)
1280                 AC_DEFINE(SHELL_IF_NO_ARGS)
1281                 ;;
1282     no)         AC_MSG_RESULT(no)
1283                 ;;
1284     *)          AC_MSG_RESULT(no)
1285                 AC_MSG_WARN([Ignoring unknown argument to --enable-noargs-shell: $enableval])
1286                 ;;
1287   esac
1288 ], AC_MSG_RESULT(no))
1289
1290 AC_MSG_CHECKING(whether to set \$HOME to target user in shell mode)
1291 AC_ARG_ENABLE(shell-sets-home,
1292 [AS_HELP_STRING([--enable-shell-sets-home], [Set $HOME to target user in shell mode])],
1293 [ case "$enableval" in
1294     yes)        AC_MSG_RESULT(yes)
1295                 AC_DEFINE(SHELL_SETS_HOME)
1296                 ;;
1297     no)         AC_MSG_RESULT(no)
1298                 ;;
1299     *)          AC_MSG_RESULT(no)
1300                 AC_MSG_WARN([Ignoring unknown argument to --enable-shell-sets-home: $enableval])
1301                 ;;
1302   esac
1303 ], AC_MSG_RESULT(no))
1304
1305 AC_MSG_CHECKING(whether to disable 'command not found' messages)
1306 AC_ARG_ENABLE(path_info,
1307 [AS_HELP_STRING([--disable-path-info], [Print 'command not allowed' not 'command not found'])],
1308 [ case "$enableval" in
1309     yes)        AC_MSG_RESULT(no)
1310                 ;;
1311     no)         AC_MSG_RESULT(yes)
1312                 AC_DEFINE(DONT_LEAK_PATH_INFO)
1313                 path_info=off
1314                 ;;
1315     *)          AC_MSG_RESULT(no)
1316                 AC_MSG_WARN([Ignoring unknown argument to --enable-path-info: $enableval])
1317                 ;;
1318   esac
1319 ], AC_MSG_RESULT(no))
1320
1321 AC_MSG_CHECKING(whether to enable environment debugging)
1322 AC_ARG_ENABLE(env_debug,
1323 [AS_HELP_STRING([--enable-env-debug], [Whether to enable environment debugging.])],
1324 [ case "$enableval" in
1325     yes)        AC_MSG_RESULT(yes)
1326                 AC_DEFINE(ENV_DEBUG)
1327                 ;;
1328     no)         AC_MSG_RESULT(no)
1329                 ;;
1330     *)          AC_MSG_RESULT(no)
1331                 AC_MSG_WARN([Ignoring unknown argument to --enable-env-debug: $enableval])
1332                 ;;
1333   esac
1334 ], AC_MSG_RESULT(no))
1335
1336 AC_ARG_ENABLE(zlib,
1337 [AS_HELP_STRING([--enable-zlib[[=PATH]]], [Whether to enable or disable zlib])],
1338 [], [enable_zlib=yes])
1339
1340 AC_MSG_CHECKING(whether to enable environment resetting by default)
1341 AC_ARG_ENABLE(env_reset,
1342 [AS_HELP_STRING([--enable-env-reset], [Whether to enable environment resetting by default.])],
1343 [ case "$enableval" in
1344     yes)        env_reset=on
1345                 ;;
1346     no)         env_reset=off
1347                 ;;
1348     *)          env_reset=on
1349                 AC_MSG_WARN([Ignoring unknown argument to --enable-env-reset: $enableval])
1350                 ;;
1351   esac
1352 ])
1353 if test "$env_reset" = "on"; then
1354     AC_MSG_RESULT(yes)
1355     AC_DEFINE(ENV_RESET, 1)
1356 else
1357     AC_MSG_RESULT(no)
1358     AC_DEFINE(ENV_RESET, 0)
1359 fi
1360
1361 AC_ARG_ENABLE(warnings,
1362 [AS_HELP_STRING([--enable-warnings], [Whether to enable compiler warnings])],
1363 [ case "$enableval" in
1364     yes)    ;;
1365     no)     ;;
1366     *)      AC_MSG_WARN([Ignoring unknown argument to --enable-warnings: $enableval])
1367             ;;
1368   esac
1369 ])
1370
1371 AC_ARG_ENABLE(werror,
1372 [AS_HELP_STRING([--enable-werror], [Whether to enable the -Werror compiler option])],
1373 [ case "$enableval" in
1374     yes)    ;;
1375     no)     ;;
1376     *)      AC_MSG_WARN([Ignoring unknown argument to --enable-werror: $enableval])
1377             ;;
1378   esac
1379 ])
1380
1381 AC_ARG_ENABLE(hardening,
1382 [AS_HELP_STRING([--disable-hardening], [Do not use compiler/linker exploit mitigation options])],
1383 [], [enable_hardening=yes])
1384
1385 AC_ARG_ENABLE(pie,
1386 [AS_HELP_STRING([--enable-pie], [Build sudo as a position independent executable.])])
1387
1388 AC_ARG_ENABLE(admin-flag,
1389 [AS_HELP_STRING([--enable-admin-flag], [Whether to create a Ubuntu-style admin flag file])],
1390 [ case "$enableval" in
1391     yes)    AC_DEFINE(USE_ADMIN_FLAG)
1392             ;;
1393     no)     ;;
1394     *)      AC_MSG_WARN([Ignoring unknown argument to --enable-admin-flag: $enableval])
1395             ;;
1396   esac
1397 ])
1398
1399 AC_ARG_ENABLE(nls,
1400 [AS_HELP_STRING([--disable-nls], [Disable natural language support using gettext])],
1401 [], [enable_nls=yes])
1402
1403 AC_ARG_ENABLE(rpath,
1404 [AS_HELP_STRING([--disable-rpath], [Disable passing of -Rpath to the linker])],
1405 [], [enable_rpath=yes])
1406
1407 AC_ARG_WITH(selinux, [AS_HELP_STRING([--with-selinux], [enable SELinux support])],
1408 [case $with_selinux in
1409     yes)        SELINUX_USAGE="[[-r role]] [[-t type]] "
1410                 AC_DEFINE(HAVE_SELINUX)
1411                 SUDO_LIBS="${SUDO_LIBS} -lselinux"
1412                 SUDO_OBJS="${SUDO_OBJS} selinux.o"
1413                 PROGS="${PROGS} sesh"
1414                 SEMAN=1
1415                 AC_CHECK_LIB([selinux], [setkeycreatecon],
1416                     [AC_DEFINE(HAVE_SETKEYCREATECON)])
1417                 ;;
1418     no)         ;;
1419     *)          AC_MSG_ERROR(["--with-selinux does not take an argument."])
1420                 ;;
1421 esac], [with_selinux=no])
1422
1423 dnl
1424 dnl gss_krb5_ccache_name() may not work on Heimdal so we don't use it by default
1425 dnl
1426 AC_ARG_ENABLE(gss_krb5_ccache_name,
1427 [AS_HELP_STRING([--enable-gss-krb5-ccache-name], [Use GSS-API to set the Kerberos V cred cache name])],
1428 [check_gss_krb5_ccache_name=$enableval], [check_gss_krb5_ccache_name=no])
1429
1430 dnl
1431 dnl C compiler checks
1432 dnl
1433 AC_SEARCH_LIBS([strerror], [cposix])
1434 AC_PROG_CPP
1435 AC_CHECK_TOOL(AR, ar, false)
1436 AC_CHECK_TOOL(RANLIB, ranlib, :)
1437 if test X"$AR" = X"false"; then
1438     AC_MSG_ERROR([the "ar" utility is required to build sudo])
1439 fi
1440
1441 if test "x$ac_cv_prog_cc_c89" = "xno"; then
1442     AC_MSG_ERROR([Sudo version $PACKAGE_VERSION requires an ANSI C compiler to build.])
1443 fi
1444
1445 dnl
1446 dnl If the user specified --disable-static, override them or we'll
1447 dnl be unable to build the executables in the sudoers plugin dir.
1448 dnl
1449 if test "$enable_static" = "no"; then
1450     AC_MSG_WARN([Ignoring --disable-static, sudo does not install static libs])
1451     enable_static=yes
1452 fi
1453
1454 dnl
1455 dnl Libtool setup, we require libtool 2.2.6b or higher
1456 dnl
1457 AC_CANONICAL_HOST
1458 AC_CONFIG_MACRO_DIR([m4])
1459 LT_PREREQ([2.2.6b])
1460 LT_INIT([dlopen])
1461
1462 dnl
1463 dnl Allow the user to specify an alternate libtool.
1464 dnl XXX - should be able to skip LT_INIT if we are using a different libtool
1465 dnl
1466 AC_ARG_WITH(libtool, [AS_HELP_STRING([--with-libtool=PATH], [specify path to libtool])],
1467 [case $with_libtool in
1468     yes|builtin) ;;
1469     no)         AC_MSG_ERROR(["--without-libtool not supported."])
1470                 ;;
1471     system)     LIBTOOL=libtool
1472                 ;;
1473     *)          LIBTOOL="$with_libtool"
1474                 ;;
1475 esac])
1476
1477 dnl
1478 dnl Defer with_noexec until after libtool magic runs
1479 dnl
1480 if test "$enable_shared" = "no"; then
1481     with_noexec=no
1482     enable_dlopen=no
1483     lt_cv_dlopen=none
1484     lt_cv_dlopen_libs=
1485     ac_cv_func_dlopen=no
1486     LT_LDFLAGS=-static
1487 else
1488     eval _shrext="$shrext_cmds"
1489     # Darwin uses .dylib for libraries but .so for modules
1490     if test X"$_shrext" = X".dylib"; then
1491         SOEXT=".so"
1492     else
1493         SOEXT="$_shrext"
1494     fi
1495 fi
1496 AC_MSG_CHECKING(path to sudo_noexec.so)
1497 AC_ARG_WITH(noexec, [AS_HELP_STRING([--with-noexec[=PATH]], [fully qualified pathname of sudo_noexec.so])],
1498 [case $with_noexec in
1499     yes)        with_noexec="$libexecdir/sudo/sudo_noexec.so"
1500                 ;;
1501     no)         ;;
1502     *)          ;;
1503 esac], [with_noexec="$libexecdir/sudo/sudo_noexec.so"])
1504 AC_MSG_RESULT($with_noexec)
1505 NOEXECFILE="sudo_noexec.so"
1506 NOEXECDIR="`echo $with_noexec|sed -e 's:^${\([[^}]]*\)}:$(\1):' -e 's:^\(.*\)/[[^/]]*:\1:'`"
1507
1508 dnl
1509 dnl Find programs we use
1510 dnl
1511 AC_PATH_PROG(UNAMEPROG, [uname], [uname])
1512 AC_PATH_PROG(TRPROG, [tr], [tr])
1513 AC_PATH_PROG(MANDOCPROG, [mandoc], [mandoc])
1514 if test "$MANDOCPROG" != "mandoc"; then
1515     : ${MANTYPE='mdoc'}
1516 else
1517     AC_PATH_PROG(NROFFPROG, [nroff])
1518     if test -n "$NROFFPROG"; then
1519         test -n "$MANTYPE" && sudo_cv_var_mantype="$MANTYPE"
1520         AC_CACHE_CHECK([which macro set to use for manual pages],
1521             [sudo_cv_var_mantype],
1522             [
1523                 sudo_cv_var_mantype="man"
1524                 echo ".Sh NAME" > conftest
1525                 echo ".Nm sudo" >> conftest
1526                 echo ".Nd sudo" >> conftest
1527                 echo ".Sh DESCRIPTION" >> conftest
1528                 echo "sudo" >> conftest
1529                 if $NROFFPROG -mdoc conftest >/dev/null 2>&1; then
1530                     sudo_cv_var_mantype="mdoc"
1531                 fi
1532                 rm -f conftest
1533             ]
1534         )
1535         MANTYPE="$sudo_cv_var_mantype"
1536     else
1537         MANTYPE=cat
1538         MANDIRTYPE=cat
1539         mansrcdir='$(srcdir)'
1540     fi
1541 fi
1542
1543 dnl
1544 dnl What kind of beastie are we being run on?
1545 dnl Barf if config.cache was generated on another host.
1546 dnl
1547 if test -n "$sudo_cv_prev_host"; then
1548     if test "$sudo_cv_prev_host" != "$host"; then
1549         AC_MSG_ERROR([config.cache was created on a different host; remove it and re-run configure.])
1550     else
1551         AC_MSG_CHECKING(previous host type)
1552         AC_CACHE_VAL(sudo_cv_prev_host, sudo_cv_prev_host="$host")
1553         AC_MSG_RESULT([$sudo_cv_prev_host])
1554     fi
1555 else
1556     # this will produce no output since there is no cached value
1557     AC_CACHE_VAL(sudo_cv_prev_host, sudo_cv_prev_host="$host")
1558 fi
1559
1560 dnl
1561 dnl We want to be able to differentiate between different rev's
1562 dnl
1563 if test -n "$host_os"; then
1564     OS=`echo $host_os | sed 's/[[0-9]].*//'`
1565     OSREV=`echo $host_os | sed 's/^[[^0-9\.]]*\([[0-9\.]]*\).*$/\1/'`
1566     OSMAJOR=`echo $OSREV | sed 's/\..*$//'`
1567 else
1568     OS="unknown"
1569     OSREV=0
1570     OSMAJOR=0
1571 fi
1572
1573 case "$host" in
1574     *-*-sunos4*)
1575                 # LD_PRELOAD is space-delimited
1576                 RTLD_PRELOAD_DELIM=" "
1577
1578                 # getcwd(3) opens a pipe to getpwd(1)!?!
1579                 BROKEN_GETCWD=1
1580
1581                 # system headers lack prototypes but gcc helps...
1582                 if test -n "$GCC"; then
1583                     OSDEFS="${OSDEFS} -D__USE_FIXED_PROTOTYPES__"
1584                 fi
1585
1586                 shadow_funcs="getpwanam issecure"
1587                 ;;
1588     *-*-solaris2*)
1589                 # LD_PRELOAD is space-delimited
1590                 RTLD_PRELOAD_DELIM=" "
1591
1592                 # Solaris-specific initialization
1593                 OS_INIT=os_init_solaris
1594                 SUDO_OBJS="${SUDO_OBJS} solaris.o"
1595
1596                 # To get the crypt(3) prototype (so we pass -Wall)
1597                 OSDEFS="${OSDEFS} -D__EXTENSIONS__"
1598                 # AFS support needs -lucb
1599                 if test "$with_AFS" = "yes"; then
1600                     AFS_LIBS="-lc -lucb"
1601                 fi
1602                 : ${mansectsu='1m'}
1603                 : ${mansectform='4'}
1604                 test -z "$with_pam" && AUTH_EXCL_DEF="PAM"
1605                 AC_CHECK_FUNCS(priv_set, [PSMAN=1])
1606                 ;;
1607     *-*-aix*)
1608                 # To get all prototypes (so we pass -Wall)
1609                 OSDEFS="${OSDEFS} -D_ALL_SOURCE -D_LINUX_SOURCE_COMPAT"
1610                 SUDOERS_LDFLAGS="${SUDOERS_LDFLAGS} -Wl,-bI:\$(srcdir)/aixcrypt.exp"
1611
1612                 # On AIX 6 and higher default to PAM, else default to LAM
1613                 if test $OSMAJOR -ge 6; then
1614                     if test X"$with_pam" = X""; then
1615                         AUTH_EXCL_DEF="PAM"
1616                     fi
1617                 else
1618                     if test X"$with_aixauth" = X""; then
1619                         AC_CHECK_FUNCS(authenticate, [AUTH_EXCL_DEF="AIX_AUTH"])
1620                     fi
1621                 fi
1622
1623                 # AIX analog of nsswitch.conf, enabled by default
1624                 AC_ARG_WITH(netsvc, [AS_HELP_STRING([--with-netsvc[[=PATH]]], [path to netsvc.conf])],
1625                 [case $with_netsvc in
1626                     no)         ;;
1627                     yes)        with_netsvc="/etc/netsvc.conf"
1628                                 ;;
1629                     *)          ;;
1630                 esac])
1631                 if test -z "$with_nsswitch" -a -z "$with_netsvc"; then
1632                     with_netsvc="/etc/netsvc.conf"
1633                 fi
1634
1635                 # LDR_PRELOAD is only supported in AIX 5.3 and later
1636                 if test $OSMAJOR -lt 5; then
1637                     with_noexec=no
1638                 else
1639                     RTLD_PRELOAD_VAR="LDR_PRELOAD"
1640                 fi
1641
1642                 # AIX-specific functions
1643                 AC_CHECK_FUNCS(getuserattr setauthdb setrlimit64)
1644                 COMMON_OBJS="$COMMON_OBJS aix.lo"
1645                 ;;
1646     *-*-hiuxmpp*)
1647                 : ${mansectsu='1m'}
1648                 : ${mansectform='4'}
1649
1650                 # HP-UX shared libs must be executable
1651                 SHLIB_MODE=0755
1652                 ;;
1653     *-*-hpux*)
1654                 # AFS support needs -lBSD
1655                 if test "$with_AFS" = "yes"; then
1656                     AFS_LIBS="-lc -lBSD"
1657                 fi
1658                 : ${mansectsu='1m'}
1659                 : ${mansectform='4'}
1660
1661                 # HP-UX shared libs must be executable
1662                 SHLIB_MODE=0755
1663
1664                 # The HP bundled compiler cannot generate shared libs
1665                 if test -z "$GCC"; then
1666                     AC_CACHE_CHECK([for HP bundled C compiler],
1667                         [sudo_cv_var_hpccbundled],
1668                         [if $CC -V 2>&1 | grep '^(Bundled)' >/dev/null 2>&1; then
1669                             sudo_cv_var_hpccbundled=yes
1670                         else
1671                             sudo_cv_var_hpccbundled=no
1672                         fi]
1673                     )
1674                     if test "$sudo_cv_var_hpccbundled" = "yes"; then
1675                         AC_MSG_ERROR([The HP bundled C compiler is unable to build Sudo, you must use gcc or the HP ANSI C compiler instead.])
1676                     fi
1677                 fi
1678
1679                 # Build PA-RISC1.1 objects for better portability
1680                 case "$host_cpu" in
1681                     hppa[[2-9]]*)
1682                         _CFLAGS="$CFLAGS"
1683                         if test -n "$GCC"; then
1684                             portable_flag="-march=1.1"
1685                         else
1686                             portable_flag="+DAportable"
1687                         fi
1688                         CFLAGS="$CFLAGS $portable_flag"
1689                         AC_CACHE_CHECK([whether $CC understands $portable_flag],
1690                             [sudo_cv_var_daportable],
1691                             [AC_LINK_IFELSE(
1692                                 [AC_LANG_PROGRAM([[]], [[]])],
1693                                     [sudo_cv_var_daportable=yes],
1694                                     [sudo_cv_var_daportable=no]
1695                                 )
1696                             ]
1697                         )
1698                         if test X"$sudo_cv_var_daportable" != X"yes"; then
1699                             CFLAGS="$_CFLAGS"
1700                         fi
1701                         ;;
1702                 esac
1703
1704                 case "$host_os" in
1705                         hpux[[1-8]].*)
1706                             AC_DEFINE(BROKEN_SYSLOG)
1707                         ;;
1708                         hpux9.*)
1709                             AC_DEFINE(BROKEN_SYSLOG)
1710
1711                             shadow_funcs="getspwuid"
1712
1713                             # DCE support (requires ANSI C compiler)
1714                             if test "$with_DCE" = "yes"; then
1715                                 # order of libs in 9.X is important. -lc_r must be last
1716                                 SUDOERS_LIBS="${SUDOERS_LIBS} -ldce -lM -lc_r"
1717                                 LIBS="${LIBS} -ldce -lM -lc_r"
1718                                 SUDO_APPEND_CPPFLAGS(-D_REENTRANT)
1719                                 SUDO_APPEND_CPPFLAGS(-I/usr/include/reentrant)
1720                             fi
1721                         ;;
1722                         hpux10.*)
1723                             shadow_funcs="getprpwnam iscomsec"
1724                             shadow_libs="-lsec"
1725                             # HP-UX 10.20 libc has an incompatible getline
1726                             ac_cv_func_getline="no"
1727                         ;;
1728                         *)
1729                             shadow_funcs="getspnam iscomsec"
1730                             shadow_libs="-lsec"
1731                             test -z "$with_pam" && AUTH_EXCL_DEF="PAM"
1732                         ;;
1733                 esac
1734                 AC_CHECK_FUNCS(pstat_getproc)
1735                 ;;
1736     *-dec-osf*)
1737                 # ignore envariables wrt dynamic lib path
1738                 # XXX - sudo LDFLAGS instead?
1739                 SUDOERS_LDFLAGS="${SUDOERS_LDFLAGS} -Wl,-no_library_replacement"
1740
1741                 : ${CHECKSIA='true'}
1742                 AC_MSG_CHECKING(whether to disable sia support on Digital UNIX)
1743                 AC_ARG_ENABLE(sia,
1744                 [AS_HELP_STRING([--disable-sia], [Disable SIA on Digital UNIX])],
1745                 [ case "$enableval" in
1746                     yes)        AC_MSG_RESULT(no)
1747                                 CHECKSIA=true
1748                                 ;;
1749                     no)         AC_MSG_RESULT(yes)
1750                                 CHECKSIA=false
1751                                 ;;
1752                     *)          AC_MSG_RESULT(no)
1753                                 AC_MSG_WARN([Ignoring unknown argument to --enable-sia: $enableval])
1754                                 ;;
1755                   esac
1756                 ], AC_MSG_RESULT(no))
1757
1758                 shadow_funcs="getprpwnam dispcrypt"
1759                 # OSF/1 4.x and higher need -ldb too
1760                 if test $OSMAJOR -lt 4; then
1761                     shadow_libs="-lsecurity -laud -lm"
1762                 else
1763                     shadow_libs="-lsecurity -ldb -laud -lm"
1764                 fi
1765
1766                 # use SIA by default, if we have it
1767                 test "$CHECKSIA" = "true" && AUTH_EXCL_DEF="SIA"
1768
1769                 #
1770                 # Some versions of Digital Unix ship with a broken
1771                 # copy of prot.h, which we need for shadow passwords.
1772                 # XXX - make should remove this as part of distclean
1773                 #
1774                 AC_MSG_CHECKING([for broken prot.h])
1775                 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1776 #include <sys/types.h>
1777 #include <sys/security.h>
1778 #include <prot.h>
1779                 ]], [[exit(0);]])], [AC_MSG_RESULT(no)], [AC_MSG_RESULT([yes, fixing locally])
1780                 sed 's:<acl.h>:<sys/acl.h>:g' < /usr/include/prot.h > prot.h
1781                 ])
1782                 # ":DEFAULT" must be appended to _RLD_LIST
1783                 RTLD_PRELOAD_VAR="_RLD_LIST"
1784                 RTLD_PRELOAD_DEFAULT="DEFAULT"
1785                 : ${mansectsu='8'}
1786                 : ${mansectform='4'}
1787                 ;;
1788     *-*-irix*)
1789                 OSDEFS="${OSDEFS} -D_BSD_TYPES"
1790                 if test -z "$NROFFPROG"; then
1791                     if test "$prefix" = "/usr/local" -a "$mandir" = '${datarootdir}/man'; then
1792                         if test -d /usr/share/catman/local; then
1793                             mandir="/usr/share/catman/local"
1794                         else
1795                             mandir="/usr/catman/local"
1796                         fi
1797                     fi
1798                     # Compress cat pages with pack
1799                     MANCOMPRESS='pack'
1800                     MANCOMPRESSEXT='.z'
1801                 else
1802                     if test "$prefix" = "/usr/local" -a "$mandir" = '${datarootdir}/man'; then
1803                         if test -d "/usr/share/man/local"; then
1804                             mandir="/usr/share/man/local"
1805                         else
1806                             mandir="/usr/man/local"
1807                         fi
1808                     fi
1809                 fi
1810                 # IRIX <= 4 needs -lsun
1811                 if test "$OSMAJOR" -le 4; then
1812                     AC_CHECK_LIB(sun, getpwnam, [LIBS="${LIBS} -lsun"])
1813                 fi
1814                 # ":DEFAULT" must be appended to _RLD_LIST
1815                 RTLD_PRELOAD_VAR="_RLD_LIST"
1816                 RTLD_PRELOAD_DEFAULT="DEFAULT"
1817                 : ${mansectsu='1m'}
1818                 : ${mansectform='4'}
1819                 ;;
1820     *-*-linux*|*-*-k*bsd*-gnu)
1821                 OSDEFS="${OSDEFS} -D_GNU_SOURCE"
1822                 # Some Linux versions need to link with -lshadow
1823                 shadow_funcs="getspnam"
1824                 shadow_libs_optional="-lshadow"
1825                 test -z "$with_pam" && AUTH_EXCL_DEF="PAM"
1826                 ;;
1827     *-convex-bsd*)
1828                 OSDEFS="${OSDEFS} -D_CONVEX_SOURCE"
1829                 if test -z "$GCC"; then
1830                     CFLAGS="${CFLAGS} -D__STDC__"
1831                 fi
1832
1833                 shadow_defs="-D_AUDIT -D_ACL -DSecureWare"
1834                 shadow_funcs="getprpwnam"
1835                 shadow_libs="-lprot"
1836                 ;;
1837     *-*-ultrix*)
1838                 OS="ultrix"
1839                 shadow_funcs="getauthuid"
1840                 shadow_libs="-lauth"
1841                 ;;
1842     *-*-riscos*)
1843                 LIBS="${LIBS} -lsun -lbsd"
1844                 SUDO_APPEND_CPPFLAGS(-I/usr/include)
1845                 SUDO_APPEND_CPPFLAGS(-I/usr/include/bsd)
1846                 OSDEFS="${OSDEFS} -D_MIPS"
1847                 : ${mansectsu='1m'}
1848                 : ${mansectform='4'}
1849                 ;;
1850     *-*-isc*)
1851                 OSDEFS="${OSDEFS} -D_ISC"
1852                 LIB_CRYPT=1
1853                 SUDOERS_LIBS="${SUDOERS_LIBS} -lcrypt"
1854
1855                 shadow_funcs="getspnam"
1856                 shadow_libs="-lsec"
1857
1858                 : ${mansectsu='1m'}
1859                 : ${mansectform='4'}
1860                 ;;
1861     *-*-sco*|*-sco-*)
1862                 shadow_funcs="getprpwnam"
1863                 shadow_libs="-lprot -lx"
1864                 : ${mansectsu='1m'}
1865                 : ${mansectform='4'}
1866                 ;;
1867     m88k-motorola-sysv*)
1868                 # motorolla's cc (a variant of gcc) does -O but not -O2
1869                 CFLAGS=`echo $CFLAGS | sed 's/-O2/-O/g'`
1870                 : ${mansectsu='1m'}
1871                 : ${mansectform='4'}
1872                 ;;
1873     *-sequent-sysv*)
1874                 shadow_funcs="getspnam"
1875                 shadow_libs="-lsec"
1876                 : ${mansectsu='1m'}
1877                 : ${mansectform='4'}
1878                 ;;
1879     *-ncr-sysv4*|*-ncr-sysvr4*)
1880                 AC_CHECK_LIB(c89, strcasecmp, [LIBS="${LIBS} -lc89"])
1881                 : ${mansectsu='1m'}
1882                 : ${mansectform='4'}
1883                 ;;
1884     *-ccur-sysv4*|*-ccur-sysvr4*)
1885                 LIBS="${LIBS} -lgen"
1886                 : ${mansectsu='1m'}
1887                 : ${mansectform='4'}
1888                 ;;
1889     *-*-bsdi*)
1890                 SKIP_SETREUID=yes
1891                 # Check for newer BSD auth API
1892                 if test -z "$with_bsdauth"; then
1893                     AC_CHECK_FUNCS(auth_challenge, [AUTH_EXCL_DEF="BSD_AUTH"])
1894                 fi
1895                 ;;
1896     *-*-freebsd*)
1897                 # FreeBSD has a real setreuid(2) starting with 2.1 and
1898                 # backported to 2.0.5.  We just take 2.1 and above...
1899                 case "$OSREV" in
1900                 0.*|1.*|2.0*)
1901                     SKIP_SETREUID=yes
1902                     ;;
1903                 esac
1904                 OSDEFS="${OSDEFS} -D_BSD_SOURCE"
1905                 if test "${with_skey-'no'}" = "yes"; then
1906                      SUDOERS_LIBS="${SUDOERS_LIBS} -lmd"
1907                 fi
1908                 CHECKSHADOW="false"
1909                 test -z "$with_pam" && AUTH_EXCL_DEF="PAM"
1910                 : ${with_logincap='maybe'}
1911                 ;;
1912     *-*-*openbsd*)
1913                 # OpenBSD-specific initialization
1914                 OS_INIT=os_init_openbsd
1915                 SUDO_OBJS="${SUDO_OBJS} openbsd.o"
1916
1917                 # OpenBSD has a real setreuid(2) starting with 3.3 but
1918                 # we will use setresuid(2) instead.
1919                 SKIP_SETREUID=yes
1920                 OSDEFS="${OSDEFS} -D_BSD_SOURCE"
1921                 CHECKSHADOW="false"
1922                 # OpenBSD >= 3.0 supports BSD auth
1923                 if test -z "$with_bsdauth"; then
1924                     if test "$OSMAJOR" -ge 3; then
1925                         AUTH_EXCL_DEF="BSD_AUTH"
1926                     fi
1927                 fi
1928                 : ${with_logincap='maybe'}
1929                 ;;
1930     *-*-*netbsd*)
1931                 # NetBSD has a real setreuid(2) starting with 1.3.2
1932                 case "$OSREV" in
1933                 0.9*|1.[[012]]*|1.3|1.3.1)
1934                     SKIP_SETREUID=yes
1935                     ;;
1936                 esac
1937                 CHECKSHADOW="false"
1938                 test -z "$with_pam" && AUTH_EXCL_DEF="PAM"
1939                 : ${with_logincap='maybe'}
1940                 ;;
1941     *-*-dragonfly*)
1942                 OSDEFS="${OSDEFS} -D_BSD_SOURCE"
1943                 if test "${with_skey-'no'}" = "yes"; then
1944                      SUDOERS_LIBS="${SUDOERS_LIBS} -lmd"
1945                 fi
1946                 CHECKSHADOW="false"
1947                 test -z "$with_pam" && AUTH_EXCL_DEF="PAM"
1948                 : ${with_logincap='yes'}
1949                 ;;
1950     *-*-*bsd*)
1951                 CHECKSHADOW="false"
1952                 ;;
1953     *-*-darwin*)
1954                 # Darwin has a real setreuid(2) starting with 9.0
1955                 if test $OSMAJOR -lt 9; then
1956                     SKIP_SETREUID=yes
1957                 fi
1958                 CHECKSHADOW="false"
1959                 test -z "$with_pam" && AUTH_EXCL_DEF="PAM"
1960                 : ${with_logincap='yes'}
1961                 RTLD_PRELOAD_VAR="DYLD_INSERT_LIBRARIES"
1962                 RTLD_PRELOAD_ENABLE_VAR="DYLD_FORCE_FLAT_NAMESPACE"
1963                 ;;
1964     *-*-nextstep*)
1965                 # lockf() on is broken on the NeXT -- use flock instead
1966                 ac_cv_func_lockf=no
1967                 ac_cv_func_flock=yes
1968                 RTLD_PRELOAD_VAR="DYLD_INSERT_LIBRARIES"
1969                 RTLD_PRELOAD_ENABLE_VAR="DYLD_FORCE_FLAT_NAMESPACE"
1970                 ;;
1971     *-*-*sysv4*)
1972                 : ${mansectsu='1m'}
1973                 : ${mansectform='4'}
1974                 ;;
1975     *-*-sysv*)
1976                 : ${mansectsu='1m'}
1977                 : ${mansectform='4'}
1978                 ;;
1979     *-gnu*)
1980                 OSDEFS="${OSDEFS} -D_GNU_SOURCE"
1981                 ;;
1982 esac
1983
1984 dnl
1985 dnl Library preloading to support NOEXEC
1986 dnl
1987 if test -n "$with_noexec"; then
1988     SUDO_DEFINE_UNQUOTED(RTLD_PRELOAD_VAR, "$RTLD_PRELOAD_VAR")
1989     SUDO_DEFINE_UNQUOTED(RTLD_PRELOAD_DELIM, "$RTLD_PRELOAD_DELIM")
1990     if test -n "$RTLD_PRELOAD_DEFAULT"; then
1991         SUDO_DEFINE_UNQUOTED(RTLD_PRELOAD_DEFAULT, "$RTLD_PRELOAD_DEFAULT")
1992     fi
1993     if test -n "$RTLD_PRELOAD_ENABLE_VAR"; then
1994         SUDO_DEFINE_UNQUOTED(RTLD_PRELOAD_ENABLE_VAR, "$RTLD_PRELOAD_ENABLE_VAR")
1995     fi
1996 fi
1997
1998 dnl
1999 dnl Check for mixing mutually exclusive and regular auth methods
2000 dnl
2001 AUTH_REG=${AUTH_REG# }
2002 AUTH_EXCL=${AUTH_EXCL# }
2003 if test -n "$AUTH_EXCL"; then
2004     set -- $AUTH_EXCL
2005     if test $# != 1; then
2006         AC_MSG_ERROR([More than one mutually exclusive authentication method specified: $AUTH_EXCL])
2007     fi
2008     if test -n "$AUTH_REG"; then
2009         AC_MSG_ERROR([Cannot mix mutually exclusive ($AUTH_EXCL) and regular ($AUTH_REG) authentication methods])
2010     fi
2011 fi
2012 dnl
2013 dnl Only one of S/Key and OPIE may be specified
2014 dnl
2015 if test X"${with_skey}${with_opie}" = X"yesyes"; then
2016     AC_MSG_ERROR(["cannot use both S/Key and OPIE"])
2017 fi
2018
2019 dnl
2020 dnl Use BSD-style man sections by default
2021 dnl
2022 : ${mansectsu='8'}
2023 : ${mansectform='5'}
2024
2025 dnl
2026 dnl Add in any libpaths or libraries specified via configure
2027 dnl
2028 if test -n "$with_libpath"; then
2029     for i in ${with_libpath}; do
2030         SUDO_APPEND_LIBPATH(LDFLAGS, [$i])
2031     done
2032 fi
2033 if test -n "$with_libraries"; then
2034     for i in ${with_libraries}; do
2035         case $i in
2036             -l*)        ;;
2037             *.a)        ;;
2038             *.o)        ;;
2039             *)  i="-l${i}";;
2040         esac
2041         LIBS="${LIBS} ${i}"
2042     done
2043 fi
2044
2045 dnl
2046 dnl C compiler checks (to be done after os checks)
2047 dnl
2048 AC_PROG_GCC_TRADITIONAL
2049 AC_C_CONST
2050 AC_C_VOLATILE
2051 # Check for variadic macro support in cpp
2052 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
2053 AC_INCLUDES_DEFAULT
2054 #if defined(__GNUC__) && __GNUC__ == 2
2055 # define sudo_fprintf(fp, fmt...) fprintf((fp), (fmt))
2056 #else
2057 # define sudo_fprintf(fp, ...) fprintf((fp), __VA_ARGS__)
2058 #endif
2059 ], [sudo_fprintf(stderr, "a %s", "test");])], [], [AC_MSG_ERROR([Your C compiler doesn't support variadic macros, try building with gcc instead])])
2060
2061 dnl
2062 dnl Program checks
2063 dnl
2064 AC_PROG_YACC
2065 AC_PATH_PROG([FLEX], [flex], [flex])
2066 SUDO_PROG_MV
2067 SUDO_PROG_BSHELL
2068 if test -z "$with_sendmail"; then
2069     SUDO_PROG_SENDMAIL
2070 fi
2071 SUDO_PROG_VI
2072 dnl
2073 dnl Check for authpriv support in syslog
2074 dnl
2075 AC_MSG_CHECKING(which syslog facility sudo should log with)
2076 if test X"$with_logfac" = X""; then
2077     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <syslog.h>]], [[int i = LOG_AUTHPRIV; (void)i;]])], [logfac=authpriv])
2078 fi
2079 AC_DEFINE_UNQUOTED(LOGFAC, "$logfac", [The syslog facility sudo will use.])
2080 AC_MSG_RESULT($logfac)
2081 dnl
2082 dnl Header file checks
2083 dnl
2084 AC_HEADER_STDC
2085 AC_HEADER_DIRENT
2086 AC_HEADER_TIME
2087 AC_HEADER_STDBOOL
2088 AC_HEADER_MAJOR
2089 AC_CHECK_HEADERS(malloc.h netgroup.h paths.h spawn.h utime.h utmpx.h sys/sockio.h sys/bsdtypes.h sys/select.h sys/stropts.h sys/sysmacros.h)
2090 AC_CHECK_HEADERS([endian.h] [sys/endian.h] [machine/endian.h], [break])
2091 AC_CHECK_HEADERS([procfs.h] [sys/procfs.h], [AC_CHECK_MEMBERS(struct psinfo.pr_ttydev, [AC_CHECK_FUNCS(_ttyname_dev)], [], [AC_INCLUDES_DEFAULT
2092 #ifdef HAVE_PROCFS_H
2093 #include <procfs.h>
2094 #endif
2095 #ifdef HAVE_SYS_PROCFS_H
2096 #include <sys/procfs.h>
2097 #endif
2098 ])]
2099 break)
2100 dnl
2101 dnl Check for large file support.  HP-UX 11.23 has a broken sys/type.h
2102 dnl when large files support is enabled so work around it.
2103 dnl
2104 AC_SYS_LARGEFILE
2105 case "$host_os" in
2106     hpux11.*)
2107         AC_CACHE_CHECK([whether sys/types.h needs _XOPEN_SOURCE_EXTENDED], [sudo_cv_xopen_source_extended],
2108         [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT
2109         #include <sys/socket.h>], [])], [sudo_cv_xopen_source_extended=no], [
2110             AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#define _XOPEN_SOURCE_EXTENDED
2111             AC_INCLUDES_DEFAULT
2112             #include <sys/socket.h>], [])], [sudo_cv_xopen_source_extended=yes],
2113             [sudo_cv_xopen_source_extended=error])
2114         ])])
2115         if test "$sudo_cv_xopen_source_extended" = "yes"; then
2116             OSDEFS="${OSDEFS} -D_XOPEN_SOURCE_EXTENDED"
2117             SUDO_DEFINE(_XOPEN_SOURCE_EXTENDED)
2118         fi
2119         ;;
2120 esac
2121 AC_SYS_POSIX_TERMIOS
2122 if test "$ac_cv_sys_posix_termios" != "yes"; then
2123     AC_MSG_ERROR([Must have POSIX termios to build sudo])
2124 fi
2125 SUDO_MAILDIR
2126 if test ${with_logincap-'no'} != "no"; then
2127     AC_CHECK_HEADERS(login_cap.h, [LOGINCAP_USAGE='[[-c class|-]] '; LCMAN=1
2128         case "$OS" in
2129             freebsd|netbsd)
2130                 SUDO_LIBS="${SUDO_LIBS} -lutil"
2131                 SUDOERS_LIBS="${SUDOERS_LIBS} -lutil"
2132                 ;;
2133         esac
2134     ])
2135 fi
2136 if test ${with_project-'no'} != "no"; then
2137     AC_CHECK_HEADER(project.h, [
2138         AC_CHECK_LIB(project, setproject, [
2139             AC_DEFINE(HAVE_PROJECT_H)
2140             SUDO_LIBS="${SUDO_LIBS} -lproject"
2141         ])
2142     ], [])
2143 fi
2144 dnl
2145 dnl typedef checks
2146 dnl
2147 AC_TYPE_MODE_T
2148 AC_TYPE_UID_T
2149 AC_CHECK_TYPE([__signed char], [], [AC_CHECK_TYPE([signed char], [AC_DEFINE(__signed, signed)], [AC_DEFINE(__signed, [])])])
2150 AC_CHECK_TYPE([sig_atomic_t], [], [AC_DEFINE(sig_atomic_t, int)], [#include <sys/types.h>
2151 #include <signal.h>])
2152 AC_CHECK_TYPES([sigaction_t], [], [], [#include <sys/types.h>
2153 #include <signal.h>])
2154 AC_CHECK_TYPES([struct timespec], [], [], [#include <sys/types.h>
2155 #if TIME_WITH_SYS_TIME
2156 # include <sys/time.h>
2157 #endif
2158 #include <time.h>])
2159 AC_CHECK_TYPES([struct in6_addr], [], [], [#include <sys/types.h>
2160 #include <netinet/in.h>])
2161 AC_TYPE_LONG_LONG_INT
2162 if test X"$ac_cv_type_long_long_int" != X"yes"; then
2163     AC_MSG_ERROR(["C compiler does not appear have required long long support"])
2164 fi
2165 AC_CHECK_SIZEOF([long int])
2166 AC_CHECK_TYPE(size_t, unsigned int)
2167 AC_CHECK_TYPE(ssize_t, int)
2168 AC_CHECK_TYPE(dev_t, int)
2169 AC_CHECK_TYPE(ino_t, unsigned int)
2170 AC_CHECK_TYPE(uint8_t, unsigned char)
2171 AC_CHECK_TYPE(uint32_t, unsigned int)
2172 AC_CHECK_TYPE(uint64_t, unsigned long long)
2173 AC_CHECK_TYPE(socklen_t, [], [AC_DEFINE(socklen_t, unsigned int)], [
2174 AC_INCLUDES_DEFAULT
2175 #include <sys/socket.h>])
2176 SUDO_UID_T_LEN
2177 SUDO_SOCK_SA_LEN
2178 dnl
2179 dnl Check for utmp/utmpx struct members.
2180 dnl We need to include OSDEFS for glibc which only has __e_termination
2181 dnl visible when _GNU_SOURCE is *not* defined.
2182 dnl
2183 _CFLAGS="$CFLAGS"
2184 CFLAGS="$CFLAGS $OSDEFS"
2185 if test $ac_cv_header_utmpx_h = "yes"; then
2186     AC_CHECK_MEMBERS([struct utmpx.ut_id, struct utmpx.ut_pid, struct utmpx.ut_tv, struct utmpx.ut_type], [], [], [
2187         #include <sys/types.h>
2188         #include <utmpx.h>
2189     ])
2190     dnl
2191     dnl Check for ut_exit.__e_termination first, then ut_exit.e_termination
2192     dnl
2193     AC_CHECK_MEMBERS([struct utmpx.ut_exit.__e_termination], [AC_DEFINE(HAVE_STRUCT_UTMPX_UT_EXIT)], [
2194         AC_CHECK_MEMBERS([struct utmpx.ut_exit.e_termination], [AC_DEFINE(HAVE_STRUCT_UTMPX_UT_EXIT)], [], [
2195             #include <sys/types.h>
2196             #include <utmpx.h>
2197         ])
2198     ], [
2199         #include <sys/types.h>
2200         #include <utmpx.h>
2201     ])
2202 else
2203     AC_CHECK_MEMBERS([struct utmp.ut_id, struct utmp.ut_pid, struct utmp.ut_tv, struct utmp.ut_type, struct utmp.ut_user], [], [], [
2204         #include <sys/types.h>
2205         #include <utmp.h>
2206     ])
2207     dnl
2208     dnl Check for ut_exit.__e_termination first, then ut_exit.e_termination
2209     dnl
2210     AC_CHECK_MEMBERS([struct utmp.ut_exit.__e_termination], [AC_DEFINE(HAVE_STRUCT_UTMP_UT_EXIT)], [
2211         AC_CHECK_MEMBERS([struct utmp.ut_exit.e_termination], [AC_DEFINE(HAVE_STRUCT_UTMP_UT_EXIT)], [], [
2212             #include <sys/types.h>
2213             #include <utmp.h>
2214         ])
2215     ], [
2216         #include <sys/types.h>
2217         #include <utmp.h>
2218     ])
2219 fi
2220 CFLAGS="$_CFLAGS"
2221
2222 dnl
2223 dnl Function checks
2224 dnl
2225 AC_FUNC_GETGROUPS
2226 AC_CHECK_FUNCS(glob nl_langinfo regcomp setenv strftime strrchr strtoll \
2227                sysconf tzset)
2228 AC_CHECK_FUNCS(getgrouplist, [], [
2229     case "$host_os" in
2230     aix*)
2231         AC_CHECK_FUNCS(getgrset)
2232         ;;
2233     *)
2234         AC_CHECK_FUNC(nss_search, [
2235             AC_CHECK_FUNC(_nss_XbyY_buf_alloc, [
2236                 # Solaris
2237                 AC_CHECK_FUNC(_nss_initf_group, [
2238                     AC_CHECK_HEADERS(nss_dbdefs.h)
2239                     AC_DEFINE([HAVE_NSS_SEARCH])
2240                     AC_DEFINE([HAVE__NSS_XBYY_BUF_ALLOC])
2241                     AC_DEFINE([HAVE__NSS_INITF_GROUP])
2242                 ])
2243             ], [
2244                 # HP-UX
2245                 AC_CHECK_FUNC(__nss_XbyY_buf_alloc, [
2246                     AC_CHECK_FUNC(__nss_initf_group, [
2247                         AC_CHECK_HEADERS(nss_dbdefs.h)
2248                         AC_DEFINE([HAVE_NSS_SEARCH])
2249                         AC_DEFINE([HAVE___NSS_XBYY_BUF_ALLOC])
2250                         AC_DEFINE([HAVE___NSS_INITF_GROUP])
2251                     ])
2252                 ])
2253             ])
2254         ])
2255         ;;
2256     esac
2257     AC_LIBOBJ(getgrouplist)
2258 ])
2259 AC_CHECK_FUNCS(getline, [], [
2260     AC_LIBOBJ(getline)
2261     AC_CHECK_FUNCS(fgetln)
2262 ])
2263 dnl
2264 dnl If libc supports _FORTIFY_SOURCE check functions, use it.
2265 dnl
2266 if test "$enable_hardening" != "no"; then
2267     O_CPPFLAGS="$CPPFLAGS"
2268     CPPFLAGS="$CPPFLAGS -D_FORTIFY_SOURCE=2"
2269     AC_CHECK_FUNC(__sprintf_chk, [
2270         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[char buf[4]; (void)sprintf(buf, "%s", "foo");]])], [OSDEFS="${OSDEFS} -D_FORTIFY_SOURCE=2"], [])
2271     ], [])
2272     CPPFLAGS="$O_CPPFLAGS"
2273 fi
2274
2275 utmp_style=LEGACY
2276 AC_CHECK_FUNCS(getutxid getutid, [utmp_style=POSIX; break])
2277 if test "$utmp_style" = "LEGACY"; then
2278     AC_CHECK_FUNCS(getttyent ttyslot, [break])
2279     AC_CHECK_FUNCS(fseeko)
2280 fi
2281
2282 AC_CHECK_FUNCS(sysctl, [AC_CHECK_MEMBERS([struct kinfo_proc.ki_tdev], [],
2283     [
2284         AC_CHECK_MEMBERS([struct kinfo_proc2.p_tdev], [], [
2285             AC_CHECK_MEMBERS([struct kinfo_proc.p_tdev], [], [
2286                 AC_CHECK_MEMBERS([struct kinfo_proc.kp_eproc.e_tdev], [], [], [
2287                     #include <sys/param.h>
2288                     #include <sys/sysctl.h>
2289                 ])
2290             ], [
2291                 #include <sys/param.h>
2292                 #include <sys/sysctl.h>
2293             ])
2294         ],
2295         [
2296             #include <sys/param.h>
2297             #include <sys/sysctl.h>
2298         ])
2299     ],
2300     [
2301         #include <sys/param.h>
2302         #include <sys/sysctl.h>
2303         #include <sys/user.h>
2304     ])
2305 ])
2306
2307 AC_CHECK_FUNCS(openpty, [AC_CHECK_HEADERS(libutil.h util.h pty.h, [break])], [
2308     AC_CHECK_LIB(util, openpty, [
2309         AC_CHECK_HEADERS(libutil.h util.h pty.h, [break])
2310         case "$SUDO_LIBS" in
2311             *-lutil*) ;;
2312             *) SUDO_LIBS="${SUDO_LIBS} -lutil";;
2313         esac
2314         AC_DEFINE(HAVE_OPENPTY)
2315     ], [
2316         AC_CHECK_FUNCS(_getpty, [], [
2317             AC_CHECK_FUNCS(grantpt, [
2318                 AC_CHECK_FUNCS(posix_openpt)
2319             ], [
2320                 AC_CHECK_FUNCS(revoke)
2321             ])
2322         ])
2323     ])
2324 ])
2325 AC_CHECK_FUNCS(unsetenv, [SUDO_FUNC_UNSETENV_VOID], [])
2326 SUDO_FUNC_PUTENV_CONST
2327 if test -z "$SKIP_SETRESUID"; then
2328     AC_CHECK_FUNCS(setresuid, [
2329         SKIP_SETREUID=yes
2330         AC_CHECK_FUNCS(getresuid)
2331     ])
2332 fi
2333 if test -z "$SKIP_SETREUID"; then
2334     AC_CHECK_FUNCS(setreuid)
2335 fi
2336 AC_CHECK_FUNCS(seteuid)
2337 if test X"$with_interfaces" != X"no"; then
2338     AC_CHECK_FUNCS(getifaddrs, [AC_CHECK_FUNCS(freeifaddrs)])
2339 fi
2340 if test -z "$BROKEN_GETCWD"; then
2341     AC_REPLACE_FUNCS(getcwd)
2342 fi
2343 AC_CHECK_FUNCS(lockf flock, [break])
2344 AC_CHECK_FUNCS(innetgr _innetgr, [AC_CHECK_FUNCS(getdomainname) [break]])
2345 AC_CHECK_FUNCS(utimes, [AC_CHECK_FUNCS(futimes futimesat, [break])], [AC_CHECK_FUNCS(futime) AC_LIBOBJ(utimes)])
2346 AC_CHECK_FUNCS(killpg, [], [AC_LIBOBJ(killpg)])
2347 SUDO_FUNC_FNMATCH([AC_DEFINE(HAVE_FNMATCH)], [AC_LIBOBJ(fnmatch)
2348     COMPAT_TEST_PROGS="${COMPAT_TEST_PROGS}${COMPAT_TEST_PROGS+ }fnm_test"
2349 ])
2350 SUDO_FUNC_ISBLANK
2351 AC_REPLACE_FUNCS(memrchr pw_dup strlcpy strlcat)
2352 AC_CHECK_FUNCS(nanosleep, [], [
2353     # On Solaris, nanosleep is in librt
2354     AC_CHECK_LIB(rt, nanosleep, [REPLAY_LIBS="${REPLAY_LIBS} -lrt"], [AC_LIBOBJ(nanosleep)])
2355 ])
2356 AC_CHECK_FUNCS(closefrom, [], [AC_LIBOBJ(closefrom)
2357     AC_CHECK_DECL(F_CLOSEM, AC_DEFINE(HAVE_FCNTL_CLOSEM), [],
2358         [ #include <limits.h>
2359           #include <fcntl.h> ])
2360 ])
2361 AC_CHECK_FUNCS(mkstemps mkdtemp, [], [
2362     AC_CHECK_FUNCS(random lrand48, [break])
2363     AC_LIBOBJ(mktemp)
2364 ])
2365 AC_CHECK_FUNCS(snprintf vsnprintf asprintf vasprintf, , [NEED_SNPRINTF=1])
2366 if test X"$ac_cv_type_struct_timespec" != X"no"; then
2367     AC_CHECK_MEMBER([struct stat.st_mtim], [AC_DEFINE(HAVE_ST_MTIM)]
2368         [AC_CHECK_MEMBER([struct stat.st_mtim.st__tim], AC_DEFINE(HAVE_ST__TIM))],
2369         [AC_CHECK_MEMBER([struct stat.st_mtimespec], AC_DEFINE([HAVE_ST_MTIMESPEC]))])
2370 fi
2371 dnl
2372 dnl Check for the dirfd function/macro.  If not found, look for dd_fd in DIR.
2373 dnl
2374 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
2375 #include <$ac_header_dirent>]], [[DIR *d; (void)dirfd(d);]])], [AC_DEFINE(HAVE_DIRFD)], [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
2376 #include <$ac_header_dirent>]], [[DIR d; memset(&d, 0, sizeof(d)); return(d.dd_fd);]])], [AC_DEFINE(HAVE_DD_FD)], [])])
2377 AC_CHECK_MEMBERS([struct dirent.d_type], [], [], [
2378 AC_INCLUDES_DEFAULT
2379 #include <$ac_header_dirent>
2380 ])
2381 dnl
2382 dnl If NEED_SNPRINTF is set, add snprintf.c to LIBOBJS
2383 dnl (it contains snprintf, vsnprintf, asprintf, and vasprintf)
2384 dnl
2385 if test -n "$NEED_SNPRINTF"; then
2386     AC_LIBOBJ(snprintf)
2387 fi
2388 dnl
2389 dnl If socket(2) not in libc, check -lsocket and -linet
2390 dnl May need to link with *both* -lnsl and -lsocket due to unresolved symbols
2391 dnl
2392 AC_CHECK_FUNC(socket, [], [
2393     for libs in "-lsocket" "-linet" "-lsocket -lnsl"; do
2394         _libs=
2395         for lib in $libs; do
2396             case "$NET_LIBS" in
2397                 *"$lib"*)   ;;
2398                 *)          _libs="$_libs $lib";;
2399             esac
2400         done
2401         libs="${_libs# }"
2402         test -z "$libs" && continue
2403         lib="`echo \"$libs\"|sed -e 's/^-l//' -e 's/ .*$//'`"
2404         extralibs="`echo \"$libs\"|sed 's/^-l[[^ ]]*//'`"
2405         SUDO_CHECK_LIB($lib, socket, [NET_LIBS="${NET_LIBS} $libs"; LIBS="${LIBS} $libs"; break], [], [$extralibs])
2406     done
2407 ])
2408 dnl
2409 dnl If inet_addr(3) not in libc, check -lnsl and -linet
2410 dnl May need to link with *both* -lnsl and -lsocket due to unresolved symbols
2411 dnl
2412 AC_CHECK_FUNC(inet_addr, [], [
2413     AC_CHECK_FUNC(__inet_addr, [], [
2414         for libs in "-lsocket" "-linet" "-lsocket -lnsl"; do
2415             _libs=
2416             for lib in $libs; do
2417                 case "$NET_LIBS" in
2418                     *"$lib"*)   ;;
2419                     *)          _libs="$_libs $lib";;
2420                 esac
2421             done
2422             libs="${_libs# }"
2423             test -z "$libs" && continue
2424             lib="`echo \"$libs\"|sed -e 's/^-l//' -e 's/ .*$//'`"
2425             extralibs="`echo \"$libs\"|sed 's/^-l[[^ ]]*//'`"
2426             SUDO_CHECK_LIB($lib, inet_addr, [NET_LIBS="${NET_LIBS} $libs"; LIBS="${LIBS} $libs"; break], [], [$extralibs])
2427         done
2428     ])
2429 ])
2430 dnl
2431 dnl If syslog(3) not in libc, check -lsocket, -lnsl and -linet
2432 dnl
2433 AC_CHECK_FUNC(syslog, [], [
2434     for libs in "-lsocket" "-linet" "-lsocket -lnsl"; do
2435         _libs=
2436         for lib in $libs; do
2437             case "$NET_LIBS" in
2438                 *"$lib"*)   ;;
2439                 *)          _libs="$_libs $lib";;
2440             esac
2441         done
2442         libs="${_libs# }"
2443         test -z "$libs" && continue
2444         lib="`echo \"$libs\"|sed -e 's/^-l//' -e 's/ .*$//'`"
2445         extralibs="`echo \"$libs\"|sed 's/^-l[[^ ]]*//'`"
2446         SUDO_CHECK_LIB($lib, syslog, [NET_LIBS="${NET_LIBS} $libs"; LIBS="${LIBS} $libs"; break], [], [$extralibs])
2447     done
2448 ])
2449 dnl
2450 dnl If getaddrinfo(3) not in libc, check -lsocket and -linet
2451 dnl May need to link with *both* -lnsl and -lsocket due to unresolved symbols.
2452 dnl
2453 AC_CHECK_FUNCS(getaddrinfo, [], [
2454     found=no
2455     for libs in "-lsocket" "-linet" "-lsocket -lnsl"; do
2456         _libs=
2457         for lib in $libs; do
2458             case "$NET_LIBS" in
2459                 *"$lib"*)   ;;
2460                 *)          _libs="$_libs $lib";;
2461             esac
2462         done
2463         libs="${_libs# }"
2464         test -z "$libs" && continue
2465         lib="`echo \"$libs\"|sed -e 's/^-l//' -e 's/ .*$//'`"
2466         extralibs="`echo \"$libs\"|sed 's/^-l[[^ ]]*//'`"
2467         SUDO_CHECK_LIB($lib, getaddrinfo, [NET_LIBS="${NET_LIBS} $libs"; LIBS="${LIBS} $libs"; found=yes; break], [], [$extralibs])
2468     done
2469     if test X"$found" != X"no"; then
2470         AC_DEFINE(HAVE_GETADDRINFO)
2471     fi
2472 ])
2473 dnl
2474 dnl Check for getprogname() or __progname
2475 dnl
2476 AC_CHECK_FUNCS(getprogname, , [
2477     AC_MSG_CHECKING([for __progname])
2478     AC_CACHE_VAL(sudo_cv___progname, [
2479     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[extern char *__progname; (void)puts(__progname);]])], [sudo_cv___progname=yes], [sudo_cv___progname=no])])
2480     if test "$sudo_cv___progname" = "yes"; then
2481         AC_DEFINE(HAVE___PROGNAME)
2482     else
2483         AC_LIBOBJ(getprogname)
2484     fi
2485     AC_MSG_RESULT($sudo_cv___progname)
2486 ])
2487 dnl
2488 dnl Check for __func__ or __FUNCTION__
2489 dnl
2490 AC_MSG_CHECKING([for __func__])
2491 AC_CACHE_VAL(sudo_cv___func__, [
2492 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[(void)puts(__func__);]])], [sudo_cv___func__=yes], [sudo_cv___func__=no])])
2493 AC_MSG_RESULT($sudo_cv___func__)
2494 if test "$sudo_cv___func__" = "yes"; then
2495     AC_DEFINE(HAVE___FUNC__)
2496 elif test -n "$GCC"; then
2497     AC_MSG_CHECKING([for __FUNCTION__])
2498     AC_CACHE_VAL(sudo_cv___FUNCTION__, [
2499     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[(void)puts(__FUNCTION__);]])], [sudo_cv___FUNCTION__=yes], [sudo_cv___FUNCTION__=no])])
2500     AC_MSG_RESULT($sudo_cv___FUNCTION__)
2501     if test "$sudo_cv___FUNCTION__" = "yes"; then
2502         AC_DEFINE(HAVE___FUNC__)
2503         AC_DEFINE(__func__, __FUNCTION__, [Define to __FUNCTION__ if your compiler supports __FUNCTION__ but not __func__])
2504     fi
2505 fi
2506
2507 # gettext() and friends may be located in libc (Linux and Solaris)
2508 # or in libintl.  However, it is possible to have libintl installed
2509 # even when gettext() is present in libc.  In the case of GNU libintl,
2510 # gettext() will be defined to gettext_libintl in libintl.h.
2511 # Since gcc prefers /usr/local/include to /usr/include, we need to
2512 # make sure we use the gettext() that matches the include file.
2513 if test "$enable_nls" != "no"; then
2514     if test "$enable_nls" != "yes"; then
2515         SUDO_APPEND_CPPFLAGS(-I${enable_nls}/include)
2516         SUDO_APPEND_LIBPATH(LDFLAGS, [$enable_nls/lib])
2517     fi
2518     OLIBS="$LIBS"
2519     for l in "libc" "-lintl" "-lintl -liconv"; do
2520         if test "$l" = "libc"; then
2521             # If user specified a dir for libintl ignore libc
2522             if test "$enable_nls" != "yes"; then
2523                 continue
2524             fi
2525             gettext_name=sudo_cv_gettext
2526             AC_MSG_CHECKING([for gettext])
2527         else
2528             LIBS="$OLIBS $l"
2529             gettext_name=sudo_cv_gettext"`echo $l|sed -e 's/ //g' -e 's/-/_/g'`"
2530             AC_MSG_CHECKING([for gettext in $l])
2531         fi
2532         AC_CACHE_VAL($gettext_name, [
2533                 AC_LINK_IFELSE(
2534                     [
2535                         AC_LANG_PROGRAM([[#include <libintl.h>]], [(void)gettext((char *)0);])
2536                     ], [eval $gettext_name=yes], [eval $gettext_name=no]
2537                 )
2538         ])
2539         eval gettext_result="\$$gettext_name"
2540         AC_MSG_RESULT($gettext_result)
2541         if test "$gettext_result" = "yes"; then
2542             AC_CHECK_FUNCS(ngettext)
2543             break
2544         fi
2545     done
2546     LIBS="$OLIBS"
2547
2548     if test "$sudo_cv_gettext" = "yes"; then
2549         AC_DEFINE(HAVE_LIBINTL_H)
2550         SUDO_NLS=enabled
2551         # For Solaris we need links from lang to lang.UTF-8 in localedir
2552         case "$host_os" in
2553             solaris2*) LOCALEDIR_SUFFIX=".UTF-8";;
2554         esac
2555     elif test "$sudo_cv_gettext_lintl" = "yes"; then
2556         AC_DEFINE(HAVE_LIBINTL_H)
2557         SUDO_NLS=enabled
2558         LIBINTL="-lintl"
2559     elif test "$sudo_cv_gettext_lintl_liconv" = "yes"; then
2560         AC_DEFINE(HAVE_LIBINTL_H)
2561         SUDO_NLS=enabled
2562         LIBINTL="-lintl -liconv"
2563     fi
2564 fi
2565
2566 dnl
2567 dnl Deferred zlib option processing.
2568 dnl By default we use the system zlib if it is present.
2569 dnl If a directory was specified for zlib (or we are use sudo's version),
2570 dnl prepend the include dir to make sure we get the right zlib header.
2571 dnl
2572 case "$enable_zlib" in
2573     yes)
2574         AC_CHECK_LIB(z, gzdopen, [
2575             AC_CHECK_HEADERS(zlib.h, [ZLIB="-lz"], [enable_zlib=builtin])
2576         ])
2577         ;;
2578     no)
2579         ;;
2580     system)
2581         AC_DEFINE(HAVE_ZLIB_H)
2582         ZLIB="-lz"
2583         ;;
2584     builtin)
2585         # handled below
2586         ;;
2587     *)
2588         AC_DEFINE(HAVE_ZLIB_H)
2589         SUDO_APPEND_CPPFLAGS(-I${enable_zlib}/include)
2590         SUDO_APPEND_LIBPATH(ZLIB, [$enable_zlib/lib])
2591         ZLIB="${ZLIB} -lz"
2592         ;;
2593 esac
2594 if test X"$enable_zlib" = X"builtin"; then
2595     AC_DEFINE(HAVE_ZLIB_H)
2596     CPPFLAGS='-I$(top_builddir)/zlib -I$(top_srcdir)/zlib '"${CPPFLAGS}"
2597     ZLIB="${ZLIB}"' $(top_builddir)/zlib/libz.la'
2598     ZLIB_SRC=zlib
2599     AC_CONFIG_HEADER([zlib/zconf.h])
2600     AC_CONFIG_FILES([zlib/Makefile])
2601 fi
2602
2603 dnl
2604 dnl Check for errno declaration in errno.h
2605 dnl
2606 AC_CHECK_DECLS([errno], [], [], [
2607 AC_INCLUDES_DEFAULT
2608 #include <errno.h>
2609 ])
2610
2611 dnl
2612 dnl Check for h_errno declaration in netdb.h
2613 dnl
2614 AC_CHECK_DECLS([h_errno], [], [], [
2615 AC_INCLUDES_DEFAULT
2616 #include <netdb.h>
2617 ])
2618
2619 dnl
2620 dnl Check for strsignal() or sys_siglist
2621 dnl
2622 AC_CHECK_FUNCS(strsignal, [], [
2623     AC_LIBOBJ(strsignal)
2624     HAVE_SIGLIST="false"
2625     AC_CHECK_DECLS([sys_siglist, _sys_siglist, __sys_siglist], [
2626         HAVE_SIGLIST="true"
2627         break
2628     ], [ ], [
2629 AC_INCLUDES_DEFAULT
2630 #include <signal.h>
2631     ])
2632     if test "$HAVE_SIGLIST" != "true"; then
2633         AC_LIBOBJ(siglist)
2634     fi
2635 ])
2636
2637 dnl
2638 dnl Check for sig2str(), sys_signame or sys_sigabbrev
2639 dnl
2640 AC_CHECK_FUNCS(sig2str, [], [
2641     AC_LIBOBJ(sig2str)
2642     HAVE_SIGNAME="false"
2643     AC_CHECK_DECLS([sys_signame, _sys_signame, __sys_signame, sys_sigabbrev], [
2644         HAVE_SIGNAME="true"
2645         break
2646     ], [ ], [
2647 AC_INCLUDES_DEFAULT
2648 #include <signal.h>
2649     ])
2650     if test "$HAVE_SIGNAME" != "true"; then
2651         AC_CACHE_CHECK([for undeclared sys_sigabbrev],
2652             [sudo_cv_var_sys_sigabbrev],
2653             [AC_LINK_IFELSE(
2654                 [AC_LANG_PROGRAM([[extern char **sys_sigabbrev;]], [[return sys_sigabbrev[1];]])],
2655                     [sudo_cv_var_sys_sigabbrev=yes],
2656                     [sudo_cv_var_sys_sigabbrev=no]
2657                 )
2658             ]
2659         )
2660         if test "$sudo_cv_var_sys_sigabbrev" = yes; then
2661             AC_DEFINE(HAVE_SYS_SIGABBREV)
2662         else
2663             AC_LIBOBJ(signame)
2664         fi
2665     fi
2666 ])
2667
2668 dnl
2669 dnl nsswitch.conf and its equivalents
2670 dnl
2671 if test ${with_netsvc-"no"} != "no"; then
2672     SUDO_DEFINE_UNQUOTED(_PATH_NETSVC_CONF, "${with_netsvc-/etc/netsvc.conf}")
2673     netsvc_conf=${with_netsvc-/etc/netsvc.conf}
2674 elif test ${with_nsswitch-"yes"} != "no"; then
2675     SUDO_DEFINE_UNQUOTED(_PATH_NSSWITCH_CONF, "${with_nsswitch-/etc/nsswitch.conf}")
2676     nsswitch_conf=${with_nsswitch-/etc/nsswitch.conf}
2677 fi
2678
2679 dnl
2680 dnl Mutually exclusive auth checks come first, followed by
2681 dnl non-exclusive ones.  Note: passwd must be last of all!
2682 dnl
2683
2684 dnl
2685 dnl Convert default authentication methods to with_* if
2686 dnl no explicit authentication scheme was specified.
2687 dnl
2688 if test -z "${AUTH_EXCL}${AUTH_REG}" -a -n "$AUTH_EXCL_DEF"; then
2689     for auth in $AUTH_EXCL_DEF; do
2690         case $auth in
2691             AIX_AUTH)   with_aixauth=maybe;;
2692             BSD_AUTH)   with_bsdauth=maybe;;
2693             PAM)        with_pam=maybe;;
2694             SIA)        CHECKSIA=true;;
2695         esac
2696     done
2697 fi
2698
2699 dnl
2700 dnl PAM support.  Systems that use PAM by default set with_pam=default
2701 dnl and we do the actual tests here.
2702 dnl
2703 if test ${with_pam-"no"} != "no"; then
2704     #
2705     # Check for pam_start() in libpam first, then for pam_appl.h.
2706     #
2707     found_pam_lib=no
2708     AC_CHECK_LIB(pam, pam_start, [found_pam_lib=yes], [], [$lt_cv_dlopen_libs])
2709     #
2710     # Some PAM implementations (MacOS X for example) put the PAM headers
2711     # in /usr/include/pam instead of /usr/include/security...
2712     #
2713     found_pam_hdrs=no
2714     AC_CHECK_HEADERS([security/pam_appl.h] [pam/pam_appl.h], [found_pam_hdrs=yes; break])
2715     if test "$found_pam_lib" = "yes" -a "$found_pam_hdrs" = "yes"; then
2716         # Found both PAM libs and headers
2717         with_pam=yes
2718     elif test "$with_pam" = "yes"; then
2719         if test "$found_pam_lib" = "no"; then
2720             AC_MSG_ERROR(["--with-pam specified but unable to locate PAM development library."])
2721         fi
2722         if test "$found_pam_hdrs" = "no"; then
2723             AC_MSG_ERROR(["--with-pam specified but unable to locate PAM development headers."])
2724         fi
2725     elif test "$found_pam_lib" != "$found_pam_hdrs"; then
2726         if test "$found_pam_lib" = "no"; then
2727             AC_MSG_ERROR(["found PAM headers but no PAM development library; specify --without-pam to build without PAM"])
2728         fi
2729         if test "$found_pam_hdrs" = "no"; then
2730             AC_MSG_ERROR(["found PAM library but no PAM development headers; specify --without-pam to build without PAM"])
2731         fi
2732     fi
2733
2734     if test "$with_pam" = "yes"; then
2735         # Older PAM implementations lack pam_getenvlist
2736         OLIBS="$LIBS"
2737         LIBS="$LIBS -lpam $lt_cv_dlopen_libs"
2738         AC_CHECK_FUNCS(pam_getenvlist)
2739         LIBS="$OLIBS"
2740
2741         # We already link with -ldl if needed (see LIBDL below)
2742         SUDOERS_LIBS="${SUDOERS_LIBS} -lpam"
2743         AC_DEFINE(HAVE_PAM)
2744         AUTH_OBJS="$AUTH_OBJS pam.lo";
2745         AUTH_EXCL=PAM
2746
2747         AC_ARG_WITH(pam-login, [AS_HELP_STRING([--with-pam-login], [enable specific PAM session for sudo -i])],
2748         [case $with_pam_login in
2749             yes)        AC_DEFINE([HAVE_PAM_LOGIN])
2750                         AC_MSG_CHECKING(whether to use PAM login)
2751                         AC_MSG_RESULT(yes)
2752                         ;;
2753             no)         ;;
2754             *)          AC_MSG_ERROR(["--with-pam-login does not take an argument."])
2755                         ;;
2756         esac])
2757
2758         AC_MSG_CHECKING(whether to use PAM session support)
2759         AC_ARG_ENABLE(pam_session,
2760         [AS_HELP_STRING([--disable-pam-session], [Disable PAM session support])],
2761             [ case "$enableval" in
2762                 yes)    AC_MSG_RESULT(yes)
2763                         ;;
2764                 no)     AC_MSG_RESULT(no)
2765                         AC_DEFINE(NO_PAM_SESSION)
2766                         pam_session=off
2767                         ;;
2768                 *)      AC_MSG_RESULT(no)
2769                         AC_MSG_WARN([Ignoring unknown argument to --enable-pam-session: $enableval])
2770                         ;;
2771             esac], AC_MSG_RESULT(yes))
2772     fi
2773 fi
2774
2775 dnl
2776 dnl AIX general authentication
2777 dnl If set to "maybe" only enable if no other exclusive method in use.
2778 dnl
2779 if test ${with_aixauth-'no'} != "no"; then
2780     if test X"$with_aixauth" != X"maybe" -o X"$AUTH_EXCL" = X""; then
2781         AC_MSG_NOTICE([using AIX general authentication])
2782         AC_DEFINE(HAVE_AIXAUTH)
2783         AUTH_OBJS="$AUTH_OBJS aix_auth.lo";
2784         SUDOERS_LIBS="${SUDOERS_LIBS} -ls"
2785         AUTH_EXCL=AIX_AUTH
2786     fi
2787 fi
2788
2789 dnl
2790 dnl BSD authentication
2791 dnl If set to "maybe" only enable if no other exclusive method in use.
2792 dnl
2793 if test ${with_bsdauth-'no'} != "no"; then
2794     AC_CHECK_HEADER(bsd_auth.h, AC_DEFINE(HAVE_BSD_AUTH_H)
2795         [AUTH_OBJS="$AUTH_OBJS bsdauth.lo"]
2796         [BSDAUTH_USAGE='[[-a auth_type]] ']
2797         [AUTH_EXCL=BSD_AUTH; BAMAN=1],
2798         [AC_MSG_ERROR([BSD authentication was specified but bsd_auth.h could not be found])])
2799 fi
2800
2801 dnl
2802 dnl SIA authentication for Tru64 Unix
2803 dnl
2804 if test ${CHECKSIA-'false'} = "true"; then
2805     AC_CHECK_FUNCS(sia_ses_init, [found=true], [found=false])
2806     if test "$found" = "true"; then
2807         AUTH_EXCL=SIA
2808         AUTH_OBJS="$AUTH_OBJS sia.lo"
2809     fi
2810 fi
2811
2812 dnl
2813 dnl extra FWTK libs + includes
2814 dnl
2815 if test ${with_fwtk-'no'} != "no"; then
2816     if test "$with_fwtk" != "yes"; then
2817         SUDO_APPEND_LIBPATH(SUDOERS_LDFLAGS, [${with_fwtk}])
2818         SUDO_APPEND_CPPFLAGS(-I${with_fwtk})
2819         with_fwtk=yes
2820     fi
2821     SUDOERS_LIBS="${SUDOERS_LIBS} -lauth -lfwall"
2822     AUTH_OBJS="$AUTH_OBJS fwtk.lo"
2823 fi
2824
2825 dnl
2826 dnl extra SecurID lib + includes
2827 dnl
2828 if test ${with_SecurID-'no'} != "no"; then
2829     if test "$with_SecurID" != "yes"; then
2830         :
2831     elif test -d /usr/ace/examples; then
2832         with_SecurID=/usr/ace/examples
2833     else
2834         with_SecurID=/usr/ace
2835     fi
2836     SUDO_APPEND_CPPFLAGS(-I${with_SecurID})
2837     SUDO_APPEND_LIBPATH(SUDOERS_LDFLAGS, [${with_SecurID}])
2838     SUDOERS_LIBS="${SUDOERS_LIBS} -laceclnt -lpthread"
2839     AUTH_OBJS="$AUTH_OBJS securid5.lo";
2840 fi
2841
2842 dnl
2843 dnl Non-mutually exclusive auth checks come next.
2844 dnl Note: passwd must be last of all!
2845 dnl
2846
2847 dnl
2848 dnl Convert default authentication methods to with_* if
2849 dnl no explicit authentication scheme was specified.
2850 dnl
2851 if test -z "${AUTH_EXCL}" -a -n "$AUTH_DEF"; then
2852     for auth in $AUTH_DEF; do
2853         case $auth in
2854             passwd)     : ${with_passwd='maybe'};;
2855         esac
2856     done
2857 fi
2858
2859 dnl
2860 dnl Kerberos V
2861 dnl There is an easy way and a hard way...
2862 dnl
2863 if test ${with_kerb5-'no'} != "no"; then
2864     AC_CHECK_PROG(KRB5CONFIG, krb5-config, yes, "")
2865     if test -n "$KRB5CONFIG"; then
2866         AC_DEFINE(HAVE_KERB5)
2867         AUTH_OBJS="$AUTH_OBJS kerb5.lo"
2868         CPPFLAGS="$CPPFLAGS `krb5-config --cflags`"
2869         SUDOERS_LIBS="$SUDOERS_LIBS `krb5-config --libs`"
2870         dnl
2871         dnl Try to determine whether we have Heimdal or MIT Kerberos
2872         dnl
2873         AC_MSG_CHECKING(whether we are using Heimdal)
2874         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <krb5.h>]], [[const char *tmp = heimdal_version;]])], [
2875                 AC_MSG_RESULT(yes)
2876                 AC_DEFINE(HAVE_HEIMDAL)
2877             ], [
2878                 AC_MSG_RESULT(no)
2879             ]
2880         )
2881     else
2882         AC_DEFINE(HAVE_KERB5)
2883         dnl
2884         dnl Use the specified directory, if any, else search for correct inc dir
2885         dnl
2886         if test "$with_kerb5" = "yes"; then
2887             found=no
2888             O_CPPFLAGS="$CPPFLAGS"
2889             for dir in "" "kerberosV/" "krb5/" "kerberos5/" "kerberosv5/"; do
2890                 CPPFLAGS="$O_CPPFLAGS -I/usr/include/${dir}"
2891                 AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[#include <krb5.h>]])], [found=yes; break])
2892             done
2893             if test X"$found" = X"no"; then
2894                 CPPFLAGS="$O_CPPFLAGS"
2895                 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])
2896             fi
2897         else
2898             dnl XXX - try to include krb5.h here too
2899             SUDO_APPEND_LIBPATH(SUDOERS_LDFLAGS, [${with_kerb5}/lib])
2900             SUDO_APPEND_CPPFLAGS(-I${with_kerb5}/include)
2901         fi
2902
2903         dnl
2904         dnl Try to determine whether we have Heimdal or MIT Kerberos
2905         dnl
2906         AC_MSG_CHECKING(whether we are using Heimdal)
2907         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <krb5.h>]], [[const char *tmp = heimdal_version;]])], [
2908                 AC_MSG_RESULT(yes)
2909                 AC_DEFINE(HAVE_HEIMDAL)
2910                 # XXX - need to check whether -lcrypo is needed!
2911                 SUDOERS_LIBS="${SUDOERS_LIBS} -lkrb5 -lcrypto -ldes -lcom_err -lasn1"
2912                 AC_CHECK_LIB(roken, main, [SUDOERS_LIBS="${SUDOERS_LIBS} -lroken"])
2913             ], [
2914                 AC_MSG_RESULT(no)
2915                 SUDOERS_LIBS="${SUDOERS_LIBS} -lkrb5 -lk5crypto -lcom_err"
2916                 AC_CHECK_LIB(krb5support, main, [SUDOERS_LIBS="${SUDOERS_LIBS} -lkrb5support"])
2917         ])
2918         AUTH_OBJS="$AUTH_OBJS kerb5.lo"
2919     fi
2920     _LIBS="$LIBS"
2921     LIBS="${LIBS} ${SUDOERS_LIBS}"
2922     AC_CHECK_FUNCS(krb5_verify_user krb5_init_secure_context)
2923     AC_CHECK_FUNCS(krb5_get_init_creds_opt_alloc, [
2924         AC_CACHE_CHECK([whether krb5_get_init_creds_opt_free takes a context],
2925             sudo_cv_krb5_get_init_creds_opt_free_two_args, [
2926                 AC_COMPILE_IFELSE(
2927                     [AC_LANG_PROGRAM(
2928                         [[#include <krb5.h>]],
2929                         [[krb5_get_init_creds_opt_free(NULL, NULL);]]
2930                     )],
2931                     [sudo_cv_krb5_get_init_creds_opt_free_two_args=yes],
2932                     [sudo_cv_krb5_get_init_creds_opt_free_two_args=no]
2933                 )
2934             ]
2935         )
2936     ])
2937     if test X"$sudo_cv_krb5_get_init_creds_opt_free_two_args" = X"yes"; then
2938         AC_DEFINE(HAVE_KRB5_GET_INIT_CREDS_OPT_FREE_TWO_ARGS)
2939     fi
2940     LIBS="$_LIBS"
2941     AC_MSG_CHECKING(whether to use an instance name for Kerberos V)
2942     AC_ARG_ENABLE(kerb5-instance,
2943     [AS_HELP_STRING([--enable-kerb5-instance], [instance string to append to the username (separated by a slash)])],
2944         [ case "$enableval" in
2945             yes)        AC_MSG_ERROR(["must give --enable-kerb5-instance an argument."])
2946                         ;;
2947             no)         AC_MSG_RESULT(no)
2948                         ;;
2949             *)          SUDO_DEFINE_UNQUOTED(SUDO_KRB5_INSTANCE, "$enableval")
2950                         AC_MSG_RESULT([$enableval])
2951                         ;;
2952         esac], AC_MSG_RESULT(no))
2953 fi
2954
2955 dnl
2956 dnl extra AFS libs and includes
2957 dnl
2958 if test ${with_AFS-'no'} = "yes"; then
2959
2960     # looks like the "standard" place for AFS libs is /usr/afsws/lib
2961     AFSLIBDIRS="/usr/lib/afs /usr/afsws/lib /usr/afsws/lib/afs"
2962     for i in $AFSLIBDIRS; do
2963         if test -d ${i}; then
2964             SUDO_APPEND_LIBPATH(SUDOERS_LDFLAGS, [$i])
2965             FOUND_AFSLIBDIR=true
2966         fi
2967     done
2968     if test -z "$FOUND_AFSLIBDIR"; then
2969         AC_MSG_WARN([Unable to locate AFS libraries, you will have to edit the Makefile and add -L/path/to/afs/libs to SUDOERS_LDFLAGS or rerun configure with the --with-libpath options.])
2970     fi
2971
2972     # Order is important here.  Note that we build AFS_LIBS from right to left
2973     # since AFS_LIBS may be initialized with BSD compat libs that must go last
2974     AFS_LIBS="-laudit ${AFS_LIBS}"
2975     for i in $AFSLIBDIRS; do
2976         if test -f ${i}/util.a; then
2977             AFS_LIBS="${i}/util.a ${AFS_LIBS}"
2978             FOUND_UTIL_A=true
2979             break;
2980         fi
2981     done
2982     if test -z "$FOUND_UTIL_A"; then
2983         AFS_LIBS="-lutil ${AFS_LIBS}"
2984     fi
2985     AFS_LIBS="-lkauth -lprot -lubik -lauth -lrxkad -lsys -ldes -lrx -llwp -lcom_err ${AFS_LIBS}"
2986
2987     # AFS includes may live in /usr/include on some machines...
2988     for i in /usr/afsws/include; do
2989         if test -d ${i}; then
2990             SUDO_APPEND_CPPFLAGS(-I${i})
2991             FOUND_AFSINCDIR=true
2992         fi
2993     done
2994
2995     if test -z "$FOUND_AFSLIBDIR"; then
2996         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.])
2997     fi
2998
2999     AUTH_OBJS="$AUTH_OBJS afs.lo"
3000 fi
3001
3002 dnl
3003 dnl extra DCE obj + lib
3004 dnl Order of libs in HP-UX 10.x is important, -ldce must be last.
3005 dnl
3006 if test ${with_DCE-'no'} = "yes"; then
3007     DCE_OBJS="${DCE_OBJS} dce_pwent.o"
3008     SUDOERS_LIBS="${SUDOERS_LIBS} -ldce"
3009     AUTH_OBJS="$AUTH_OBJS dce.lo"
3010 fi
3011
3012 dnl
3013 dnl extra S/Key lib and includes
3014 dnl
3015 if test "${with_skey-'no'}" = "yes"; then
3016     O_LDFLAGS="$LDFLAGS"
3017     if test "$with_skey" != "yes"; then
3018         SUDO_APPEND_CPPFLAGS(-I${with_skey}/include)
3019         LDFLAGS="$LDFLAGS -L${with_skey}/lib"
3020         SUDO_APPEND_LIBPATH(SUDOERS_LDFLAGS, [${with_skey}/lib])
3021         AC_CHECK_HEADER([skey.h], [found=yes], [found=no], [#include <stdio.h>])
3022     else
3023         found=no
3024         O_CPPFLAGS="$CPPFLAGS"
3025         for dir in "" "/usr/local" "/usr/contrib"; do
3026             test -n "$dir" && CPPFLAGS="$O_CPPFLAGS -I${dir}/include"
3027             AC_CHECK_HEADER([skey.h], [found=yes; break], [],
3028                 [#include <stdio.h>])
3029         done
3030         if test "$found" = "no" -o -z "$dir"; then
3031             CPPFLAGS="$O_CPPFLAGS"
3032         else
3033             LDFLAGS="$LDFLAGS -L${dir}/lib"
3034             SUDO_APPEND_LIBPATH(SUDOERS_LDFLAGS, [${dir}/lib])
3035         fi
3036         if test "$found" = "no"; then
3037             AC_MSG_WARN([Unable to locate skey.h, you will have to edit the Makefile and add -I/path/to/skey/includes to CPPFLAGS])
3038         fi
3039     fi
3040     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 SUDOERS_LDFLAGS])])
3041     AC_CHECK_LIB(skey, skeyaccess, AC_DEFINE(HAVE_SKEYACCESS))
3042
3043     AC_MSG_CHECKING([for RFC1938-compliant skeychallenge])
3044     AC_COMPILE_IFELSE(
3045         [AC_LANG_PROGRAM(
3046             [[#include <stdio.h>
3047             #include <skey.h>]],
3048             [[skeychallenge(NULL, NULL, NULL, 0);]]
3049         )], [
3050             AC_DEFINE(HAVE_RFC1938_SKEYCHALLENGE)
3051             AC_MSG_RESULT([yes])
3052         ], [
3053             AC_MSG_RESULT([no])
3054         ]
3055     )
3056
3057     LDFLAGS="$O_LDFLAGS"
3058     SUDOERS_LIBS="${SUDOERS_LIBS} -lskey"
3059     AUTH_OBJS="$AUTH_OBJS rfc1938.lo"
3060 fi
3061
3062 dnl
3063 dnl extra OPIE lib and includes
3064 dnl
3065 if test "${with_opie-'no'}" = "yes"; then
3066     O_LDFLAGS="$LDFLAGS"
3067     if test "$with_opie" != "yes"; then
3068         SUDO_APPEND_CPPFLAGS(-I${with_opie}/include)
3069         LDFLAGS="$LDFLAGS -L${with_opie}/lib"
3070         SUDO_APPEND_LIBPATH(SUDOERS_LDFLAGS, [${with_opie}/lib])
3071         AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[#include <opie.h>]])], [found=yes], [found=no])
3072     else
3073         found=no
3074         O_CPPFLAGS="$CPPFLAGS"
3075         for dir in "" "/usr/local" "/usr/contrib"; do
3076             test -n "$dir" && CPPFLAGS="$O_CPPFLAGS -I${dir}/include"
3077             AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[#include <opie.h>]])], [found=yes; break])
3078         done
3079         if test "$found" = "no" -o -z "$dir"; then
3080             CPPFLAGS="$O_CPPFLAGS"
3081         else
3082             LDFLAGS="$LDFLAGS -L${dir}/lib"
3083             SUDO_APPEND_LIBPATH(SUDOERS_LDFLAGS, [${dir}/lib])
3084         fi
3085         if test "$found" = "no"; then
3086             AC_MSG_WARN([Unable to locate opie.h, you will have to edit the Makefile and add -I/path/to/opie/includes to CPPFLAGS])
3087         fi
3088     fi
3089     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 SUDOERS_LDFLAGS])])
3090     LDFLAGS="$O_LDFLAGS"
3091     SUDOERS_LIBS="${SUDOERS_LIBS} -lopie"
3092     AUTH_OBJS="$AUTH_OBJS rfc1938.lo"
3093 fi
3094
3095 dnl
3096 dnl Check for shadow password routines if we have not already done so.
3097 dnl If there is a specific list of functions to check we do that first.
3098 dnl Otherwise, we check for SVR4-style and then SecureWare-style.
3099 dnl
3100 if test ${with_passwd-'no'} != "no"; then
3101     dnl
3102     dnl if crypt(3) not in libc, look elsewhere
3103     dnl
3104     if test -z "$LIB_CRYPT"; then
3105         _LIBS="$LIBS"
3106         AC_SEARCH_LIBS([crypt], [crypt crypt_d ufc], [test -n "$ac_lib" && SUDOERS_LIBS="${SUDOERS_LIBS} $ac_res"])
3107         LIBS="$_LIBS"
3108     fi
3109
3110     if test "$CHECKSHADOW" = "true" -a -n "$shadow_funcs"; then
3111         _LIBS="$LIBS"
3112         LIBS="$LIBS $shadow_libs"
3113         found=no
3114         AC_CHECK_FUNCS($shadow_funcs, [found=yes])
3115         if test "$found" = "yes"; then
3116             SUDOERS_LIBS="$SUDOERS_LIBS $shadow_libs"
3117         elif test -n "$shadow_libs_optional"; then
3118             LIBS="$LIBS $shadow_libs_optional"
3119             AC_CHECK_FUNCS($shadow_funcs, [found=yes])
3120             if test "$found" = "yes"; then
3121                 SUDOERS_LIBS="$SUDOERS_LIBS $shadow_libs $shadow_libs_optional"
3122             fi
3123         fi
3124         if test "$found" = "yes"; then
3125             case "$shadow_funcs" in
3126                 *getprpwnam*) SECUREWARE=1;;
3127             esac
3128             test -n "$shadow_defs" && OSDEFS="${OSDEFS} $shadow_defs"
3129         else
3130             LIBS="$_LIBS"
3131         fi
3132         CHECKSHADOW=false
3133     fi
3134     if test "$CHECKSHADOW" = "true"; then
3135         AC_SEARCH_LIBS([getspnam], [gen], [AC_DEFINE(HAVE_GETSPNAM)] [CHECKSHADOW=false; test -n "$ac_lib" && SUDOERS_LIBS="${SUDOERS_LIBS} $ac_res"])
3136     fi
3137     if test "$CHECKSHADOW" = "true"; then
3138         AC_SEARCH_LIBS([getprpwnam], [sec security prot], [AC_DEFINE(HAVE_GETPRPWNAM)] [CHECKSHADOW=false; SECUREWARE=1; test -n "$ac_lib" && SUDOERS_LIBS="${SUDOERS_LIBS} $ac_res"])
3139     fi
3140     if test -n "$SECUREWARE"; then
3141         AC_CHECK_FUNCS(bigcrypt set_auth_parameters initprivs)
3142         AUTH_OBJS="$AUTH_OBJS secureware.lo"
3143     fi
3144 fi
3145
3146 dnl
3147 dnl extra lib and .o file for LDAP support
3148 dnl
3149 if test ${with_ldap-'no'} != "no"; then
3150     O_LDFLAGS="$LDFLAGS"
3151     if test "$with_ldap" != "yes"; then
3152         SUDO_APPEND_LIBPATH(SUDOERS_LDFLAGS, [${with_ldap}/lib])
3153         LDFLAGS="$LDFLAGS -L${with_ldap}/lib"
3154         SUDO_APPEND_CPPFLAGS(-I${with_ldap}/include)
3155         with_ldap=yes
3156     fi
3157     SUDOERS_OBJS="${SUDOERS_OBJS} ldap.lo"
3158     LDAP=""
3159
3160     _LIBS="$LIBS"
3161     LDAP_LIBS=""
3162     IBMLDAP_EXTRA=""
3163     found=no
3164     # On HP-UX, libibmldap has a hidden dependency on libCsup
3165     case "$host_os" in
3166         hpux*) AC_CHECK_LIB(Csup, main, [IBMLDAP_EXTRA=" -lCsup"]);;
3167     esac
3168     AC_SEARCH_LIBS(ldap_init, "ldap" "ldap -llber" "ldap -llber -lssl -lcrypto" "ibmldap${IBMLDAP_EXTRA}" "ibmldap -lidsldif${IBMLDAP_EXTRA}", [
3169         test "$ac_res" != "none required" && LDAP_LIBS="$ac_res"
3170         found=yes
3171     ])
3172     # If nothing linked, try -lldap and hope for the best
3173     if test "$found" = "no"; then
3174         LDAP_LIBS="-lldap"
3175     fi
3176     LIBS="${_LIBS} ${LDAP_LIBS}"
3177     dnl check if we need to link with -llber for ber_set_option
3178     OLIBS="$LIBS"
3179     AC_SEARCH_LIBS([ber_set_option], [lber], [found=yes], [found=no])
3180     if test X"$found" = X"yes" -a X"$LIBS" != X"$OLIBS"; then
3181         LDAP_LIBS="$LDAP_LIBS -llber"
3182     fi
3183     dnl check if ldap.h includes lber.h for us
3184     AC_MSG_CHECKING([whether lber.h is needed])
3185     AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
3186     #include <ldap.h>]], [[(void)ldap_init(0, 0)]])], [AC_MSG_RESULT([no])], [
3187     AC_MSG_RESULT([yes])
3188     AC_DEFINE(HAVE_LBER_H)])
3189
3190     AC_CHECK_HEADERS([sasl/sasl.h] [sasl.h], [
3191         AC_CHECK_FUNCS(ldap_sasl_interactive_bind_s)
3192         break
3193     ])
3194     AC_CHECK_HEADERS([ldap_ssl.h] [mps/ldap_ssl.h], [break], [], [#include <ldap.h>])
3195     AC_CHECK_FUNCS(ldap_initialize ldap_start_tls_s ldapssl_init ldapssl_set_strength ldap_unbind_ext_s ldap_str2dn ldap_create ldap_sasl_bind_s ldap_ssl_init ldap_ssl_client_init ldap_start_tls_s_np)
3196     AC_CHECK_FUNCS(ldap_search_ext_s ldap_search_st, [break])
3197
3198     if test X"$check_gss_krb5_ccache_name" = X"yes"; then
3199         AC_CHECK_LIB(gssapi, gss_krb5_ccache_name,
3200             AC_DEFINE(HAVE_GSS_KRB5_CCACHE_NAME)
3201             [LDAP_LIBS="${LDAP_LIBS} -lgssapi"],
3202             AC_CHECK_LIB(gssapi_krb5, gss_krb5_ccache_name,
3203                 AC_DEFINE(HAVE_GSS_KRB5_CCACHE_NAME)
3204                 [LDAP_LIBS="${LDAP_LIBS} -lgssapi_krb5"])
3205         )
3206
3207         # gssapi headers may be separate or part of Kerberos V
3208         found=no
3209         O_CPPFLAGS="$CPPFLAGS"
3210         for dir in "" "kerberosV" "krb5" "kerberos5" "kerberosv5"; do
3211             test X"$dir" != X"" && CPPFLAGS="$O_CPPFLAGS -I/usr/include/${dir}"
3212             AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[#include <gssapi/gssapi.h>]])], [found="gssapi/gssapi.h"; break], [AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[#include <gssapi.h>]])], [found="gssapi.h"; break])])
3213         done
3214         if test X"$found" != X"no"; then
3215             AC_CHECK_HEADERS([$found])
3216             if test X"$found" = X"gssapi/gssapi.h"; then
3217                 AC_CHECK_HEADERS([gssapi/gssapi_krb5.h])
3218             fi
3219         else
3220             CPPFLAGS="$O_CPPFLAGS"
3221             AC_MSG_WARN([Unable to locate gssapi.h, you will have to edit the Makefile and add -I/path/to/gssapi/includes to CPPFLAGS])
3222         fi
3223     fi
3224
3225     SUDOERS_LIBS="${SUDOERS_LIBS} ${LDAP_LIBS}"
3226     LIBS="$_LIBS"
3227     LDFLAGS="$O_LDFLAGS"
3228 fi
3229
3230 #
3231 # How to do dynamic object loading.
3232 # We support dlopen() and sh_load(), else fall back to static loading.
3233 #
3234 case "$lt_cv_dlopen" in
3235     dlopen)
3236         AC_DEFINE(HAVE_DLOPEN)
3237         SUDO_OBJS="$SUDO_OBJS locale_stub.o"
3238         LT_STATIC="--tag=disable-static"
3239         ;;
3240     shl_load)
3241         AC_DEFINE(HAVE_SHL_LOAD)
3242         SUDO_OBJS="$SUDO_OBJS locale_stub.o"
3243         LT_STATIC="--tag=disable-static"
3244         AC_LIBOBJ(dlopen)
3245         ;;
3246     *)
3247         if test X"${ac_cv_func_dlopen}" = X"yes"; then
3248             AC_MSG_ERROR(["dlopen present but libtool doesn't appear to support your platform."])
3249         fi
3250         # Preload sudoers module symbols
3251         SUDO_OBJS="${SUDO_OBJS} preload.o"
3252         SUDO_LIBS="${SUDO_LIBS} \$(top_builddir)/plugins/sudoers/sudoers.la"
3253         LT_STATIC=""
3254         AC_LIBOBJ(dlopen)
3255         ;;
3256 esac
3257
3258 #
3259 # Add library needed for dynamic loading, if any.
3260 #
3261 LIBDL="$lt_cv_dlopen_libs"
3262 if test X"$LIBDL" != X""; then
3263     SUDO_LIBS="${SUDO_LIBS} $LIBDL"
3264     SUDOERS_LIBS="${SUDOERS_LIBS} $LIBDL"
3265 fi
3266
3267 # On HP-UX, you cannot dlopen() a shared object that uses pthreads unless
3268 # the main program is linked against -lpthread.  We have no knowledge of
3269 # what libraries a plugin may depend on (e.g. HP-UX LDAP which uses pthreads)
3270 # so always link against -lpthread on HP-UX if it is available.
3271 # This check should go after all other libraries tests.
3272 case "$host_os" in
3273     hpux*)
3274         AC_CHECK_LIB(pthread, main, [SUDO_LIBS="${SUDO_LIBS} -lpthread"])
3275         OSDEFS="${OSDEFS} -D_REENTRANT"
3276         ;;
3277 esac
3278
3279 dnl
3280 dnl Check for log file, timestamp and iolog locations
3281 dnl
3282 if test "$utmp_style" = "LEGACY"; then
3283     SUDO_PATH_UTMP
3284 fi
3285 SUDO_LOGFILE
3286 SUDO_TIMEDIR
3287 SUDO_IO_LOGDIR
3288
3289 dnl
3290 dnl Turn warnings into errors.
3291 dnl All compiler/loader tests after this point will fail if
3292 dnl a warning is displayed (nornally, warnings are not fata).
3293 dnl
3294 AC_LANG_WERROR
3295
3296 dnl
3297 dnl If compiler supports the -static-libgcc flag use it unless we have
3298 dnl GNU ld (which can avoid linking in libgcc when it is not needed).
3299 dnl This test relies on AC_LANG_WERROR
3300 dnl
3301 if test -n "$GCC" -a "$lt_cv_prog_gnu_ld" != "yes" -a -n "$GCC"; then
3302     AX_CHECK_COMPILE_FLAG([-static-libgcc], [LT_LDFLAGS="$LT_LDFLAGS -Wc,-static-libgcc"])
3303 fi
3304
3305 dnl
3306 dnl Check for symbol visibility support.
3307 dnl This test relies on AC_LANG_WERROR
3308 dnl
3309 if test -n "$GCC"; then
3310     AX_CHECK_COMPILE_FLAG([-fvisibility=hidden], [
3311         AC_DEFINE(HAVE_DSO_VISIBILITY)
3312         CFLAGS="${CFLAGS} -fvisibility=hidden"
3313         LT_LDEXPORTS=
3314         LT_LDDEP=
3315         NO_VIZ=
3316     ])
3317 else
3318     case "$host_os" in
3319         hpux*)
3320             AX_CHECK_COMPILE_FLAG([-Bhidden_def], [
3321                 AC_DEFINE(HAVE_DSO_VISIBILITY)
3322                 CFLAGS="${CFLAGS} -Bhidden_def"
3323                 LT_LDEXPORTS=
3324                 LT_LDDEP=
3325             ])
3326             ;;
3327         solaris2*)
3328             AX_CHECK_COMPILE_FLAG([-xldscope=hidden], [
3329                 AC_DEFINE(HAVE_DSO_VISIBILITY)
3330                 CFLAGS="${CFLAGS} -xldscope=hidden"
3331                 LT_LDEXPORTS=
3332                 LT_LDDEP=
3333             ])
3334             ;;
3335     esac
3336 fi
3337
3338 dnl
3339 dnl If the compiler doesn't have symbol visibility support, it may
3340 dnl support version scripts (only GNU and Solaris ld).
3341 dnl This test relies on AC_LANG_WERROR
3342 dnl
3343 if test -n "$LT_LDEXPORTS"; then
3344     if test "$lt_cv_prog_gnu_ld" = "yes"; then
3345         AC_CACHE_CHECK([whether ld supports anonymous map files],
3346             [sudo_cv_var_gnu_ld_anon_map],
3347             [
3348                 sudo_cv_var_gnu_ld_anon_map=no
3349                 cat > conftest.map <<-EOF
3350                 {
3351                     global: foo;
3352                     local:  *;
3353                 };
3354 EOF
3355                 _CFLAGS="$CFLAGS"
3356                 CFLAGS="$CFLAGS $lt_prog_compiler_pic"
3357                 _LDFLAGS="$LDFLAGS"
3358                 LDFLAGS="$LDFLAGS -fpic -shared -Wl,--version-script,./conftest.map"
3359                 AC_LINK_IFELSE([AC_LANG_PROGRAM([[int foo;]], [[]])],
3360                     [sudo_cv_var_gnu_ld_anon_map=yes])
3361                 CFLAGS="$_CFLAGS"
3362                 LDFLAGS="$_LDFLAGS"
3363             ]
3364         )
3365         if test "$sudo_cv_var_gnu_ld_anon_map" = "yes"; then
3366             LT_LDEXPORTS=; LT_LDDEP="\$(shlib_map)"; LT_LDMAP="-Wl,--version-script,\$(shlib_map)"
3367         fi
3368     else
3369         case "$host_os" in
3370             solaris2*)
3371                 AC_CACHE_CHECK([whether ld supports anonymous map files],
3372                     [sudo_cv_var_solaris_ld_anon_map],
3373                     [
3374                         sudo_cv_var_solaris_ld_anon_map=no
3375                         cat > conftest.map <<-EOF
3376                         {
3377                             global: foo;
3378                             local:  *;
3379                         };
3380 EOF
3381                         _CFLAGS="$CFLAGS"
3382                         CFLAGS="$CFLAGS $lt_prog_compiler_pic"
3383                         _LDFLAGS="$LDFLAGS"
3384                         LDFLAGS="$LDFLAGS -shared -Wl,-M,./conftest.map"
3385                         AC_LINK_IFELSE([AC_LANG_PROGRAM([[int foo;]], [[]])],
3386                             [sudo_cv_var_solaris_ld_anon_map=yes])
3387                         CFLAGS="$_CFLAGS"
3388                         LDFLAGS="$_LDFLAGS"
3389                     ]
3390                 )
3391                 if test "$sudo_cv_var_solaris_ld_anon_map" = "yes"; then
3392                     LT_LDEXPORTS=; LT_LDDEP="\$(shlib_map)"; LT_LDMAP="-Wl,-M,\$(shlib_map)"
3393                 fi
3394                 ;;
3395             hpux*)
3396                 AC_CACHE_CHECK([whether ld supports controlling exported symbols],
3397                     [sudo_cv_var_hpux_ld_symbol_export],
3398                     [
3399                         sudo_cv_var_hpux_ld_symbol_export=no
3400                         echo "+e foo" > conftest.opt
3401                         _CFLAGS="$CFLAGS"
3402                         CFLAGS="$CFLAGS $lt_prog_compiler_pic"
3403                         _LDFLAGS="$LDFLAGS"
3404                         if test -n "$GCC"; then
3405                             LDFLAGS="$LDFLAGS -shared -Wl,-c,./conftest.opt"
3406                         else
3407                             LDFLAGS="$LDFLAGS -Wl,-b -Wl,-c,./conftest.opt"
3408                         fi
3409                         AC_LINK_IFELSE([AC_LANG_PROGRAM([[int foo;]], [[]])],
3410                             [sudo_cv_var_hpux_ld_symbol_export=yes])
3411                         CFLAGS="$_CFLAGS"
3412                         LDFLAGS="$_LDFLAGS"
3413                         rm -f conftest.opt
3414                     ]
3415                 )
3416                 if test "$sudo_cv_var_hpux_ld_symbol_export" = "yes"; then
3417                     LT_LDEXPORTS=; LT_LDDEP="\$(shlib_opt)"; LT_LDOPT="-Wl,-c,\$(shlib_opt)"
3418                 fi
3419                 ;;
3420         esac
3421     fi
3422 fi
3423
3424 dnl
3425 dnl Check for PIE executable support if using gcc.
3426 dnl This test relies on AC_LANG_WERROR
3427 dnl
3428 if test -n "$GCC"; then
3429     if test -z "$enable_pie"; then
3430         case "$host_os" in
3431             linux*)
3432                 # Attempt to build with PIE support
3433                 enable_pie="maybe"
3434                 ;;
3435         esac
3436     fi
3437     if test -n "$enable_pie"; then
3438         if test "$enable_pie" = "no"; then
3439             AX_CHECK_COMPILE_FLAG([-fno-pie], [
3440                 _CFLAGS="$CFLAGS"
3441                 CFLAGS="$CFLAGS -fno-pie"
3442                 AX_CHECK_LINK_FLAG([-nopie], [
3443                     PIE_CFLAGS="-fno-pie"
3444                     PIE_LDFLAGS="-nopie"
3445                 ])
3446                 CFLAGS="$_CFLAGS"
3447             ])
3448         else
3449             AX_CHECK_COMPILE_FLAG([-fPIE], [
3450                 _CFLAGS="$CFLAGS"
3451                 CFLAGS="$CFLAGS -fPIE"
3452                 AX_CHECK_LINK_FLAG([-pie], [
3453                     if test "$enable_pie" = "maybe"; then
3454                         SUDO_WORKING_PIE([enable_pie=yes], [])
3455                     fi
3456                     if test "$enable_pie" = "yes"; then
3457                         PIE_CFLAGS="-fPIE"
3458                         PIE_LDFLAGS="-Wc,-fPIE -pie"
3459                     fi
3460                 ])
3461                 CFLAGS="$_CFLAGS"
3462             ])
3463         fi
3464     fi
3465 fi
3466 if test "$enable_pie" != "yes"; then
3467     # Solaris 11.1 and higher supports tagging binaries to use ASLR
3468     case "$host_os" in
3469         solaris2.1[[1-9]]|solaris2.[[2-9]][[0-9]])
3470             AX_CHECK_LINK_FLAG([-Wl,-z,aslr], [PIE_LDFLAGS="${PIE_LDFLAGS}${PIE_LDFLAGS+ }-Wl,-z,aslr"])
3471             ;;
3472     esac
3473 fi
3474
3475 dnl
3476 dnl Check for -fstack-protector and -z relro support
3477 dnl This test relies on AC_LANG_WERROR
3478 dnl
3479 if test "$enable_hardening" != "no"; then
3480     if test -n "$GCC"; then
3481         AX_CHECK_COMPILE_FLAG([-fstack-protector-all], [
3482             AX_CHECK_LINK_FLAG([-fstack-protector-all], [
3483                 SSP_CFLAGS="-fstack-protector-all"
3484                 SSP_LDFLAGS="-Wc,-fstack-protector-all"
3485             ])
3486         ])
3487         if test -z "$SSP_CFLAGS"; then
3488             AX_CHECK_COMPILE_FLAG([-fstack-protector], [
3489                 AX_CHECK_LINK_FLAG([-fstack-protector], [
3490                     SSP_CFLAGS="-fstack-protector"
3491                     SSP_LDFLAGS="-Wc,-fstack-protector"
3492                 ])
3493             ])
3494         fi
3495     fi
3496     AX_CHECK_LINK_FLAG([-Wl,-z,relro], [LDFLAGS="${LDFLAGS} -Wl,-z,relro"])
3497 fi
3498
3499 dnl
3500 dnl Use passwd auth module?
3501 dnl
3502 case "$with_passwd" in
3503 yes|maybe)
3504     AUTH_OBJS="$AUTH_OBJS getspwuid.lo passwd.lo"
3505     ;;
3506 *)
3507     AC_DEFINE(WITHOUT_PASSWD)
3508     if test -z "$AUTH_OBJS"; then
3509         AC_MSG_ERROR([no authentication methods defined.])
3510     fi
3511     ;;
3512 esac
3513 AUTH_OBJS=${AUTH_OBJS# }
3514 _AUTH=`echo "$AUTH_OBJS" | sed -e 's/\.lo//g' -e 's/getspwuid *//'`
3515 AC_MSG_NOTICE([using the following authentication methods: $_AUTH])
3516
3517 dnl
3518 dnl LIBS may contain duplicates from SUDO_LIBS, SUDOERS_LIBS, or NET_LIBS
3519 dnl
3520 if test -n "$LIBS"; then
3521     L="$LIBS"
3522     LIBS=
3523     for l in ${L}; do
3524         dupe=0
3525         for sl in ${SUDO_LIBS} ${SUDOERS_LIBS} ${NET_LIBS}; do
3526             test $l = $sl && dupe=1
3527         done
3528         test $dupe = 0 && LIBS="${LIBS} $l"
3529     done
3530 fi
3531
3532 dnl
3533 dnl OS-specific initialization
3534 dnl
3535 AC_DEFINE_UNQUOTED(os_init, $OS_INIT, [Define to an OS-specific initialization function or `os_init_common'.])
3536
3537 dnl
3538 dnl We add -Wall and -Werror after all tests so they don't cause failures
3539 dnl
3540 if test -n "$GCC"; then
3541     if test X"$enable_warnings" = X"yes" -o X"$with_devel" = X"yes"; then
3542         CFLAGS="${CFLAGS} -Wall"
3543     fi
3544     if test X"$enable_werror" = X"yes"; then
3545         CFLAGS="${CFLAGS} -Werror"
3546     fi
3547 fi
3548
3549 dnl
3550 dnl Skip regress tests and sudoers sanity check if cross compiling.
3551 dnl
3552 CROSS_COMPILING="$cross_compiling"
3553
3554 dnl
3555 dnl Set exec_prefix
3556 dnl
3557 test "$exec_prefix" = "NONE" && exec_prefix='$(prefix)'
3558
3559 dnl
3560 dnl Defer setting _PATH_SUDO_NOEXEC until after exec_prefix is set
3561 dnl XXX - this is gross!
3562 dnl
3563 if test X"$with_noexec" != X"no" -o X"$with_selinux" != X"no" -o "$enabled_shared" != X"no"; then
3564     oexec_prefix="$exec_prefix"
3565     if test "$exec_prefix" = '$(prefix)'; then
3566         if test "$prefix" = "NONE"; then
3567             exec_prefix="$ac_default_prefix"
3568         else
3569             exec_prefix="$prefix"
3570         fi
3571     fi
3572     if test X"$with_noexec" != X"no"; then
3573         PROGS="${PROGS} libsudo_noexec.la"
3574         INSTALL_NOEXEC="install-noexec"
3575
3576         noexec_file="$with_noexec"
3577         _noexec_file=
3578         while test X"$noexec_file" != X"$_noexec_file"; do
3579             _noexec_file="$noexec_file"
3580             eval noexec_file="$_noexec_file"
3581         done
3582         SUDO_DEFINE_UNQUOTED(_PATH_SUDO_NOEXEC, "$noexec_file", [The fully qualified pathname of sudo_noexec.so])
3583     fi
3584     if test X"$with_selinux" != X"no"; then
3585         sesh_file="$libexecdir/sudo/sesh"
3586         _sesh_file=
3587         while test X"$sesh_file" != X"$_sesh_file"; do
3588             _sesh_file="$sesh_file"
3589             eval sesh_file="$_sesh_file"
3590         done
3591         SUDO_DEFINE_UNQUOTED(_PATH_SUDO_SESH, "$sesh_file")
3592     fi
3593     if test X"$enable_shared" != X"no"; then
3594         PLUGINDIR="$with_plugindir"
3595         _PLUGINDIR=
3596         while test X"$PLUGINDIR" != X"$_PLUGINDIR"; do
3597             _PLUGINDIR="$PLUGINDIR"
3598             eval PLUGINDIR="$_PLUGINDIR"
3599         done
3600         SUDO_DEFINE_UNQUOTED(_PATH_SUDO_PLUGIN_DIR, "$PLUGINDIR/")
3601         SUDO_DEFINE_UNQUOTED(SUDOERS_PLUGIN, "sudoers.so")
3602     fi
3603     exec_prefix="$oexec_prefix"
3604 fi
3605 if test X"$with_selinux" = X"no"; then
3606     SUDO_DEFINE_UNQUOTED(_PATH_SUDO_SESH, NULL)
3607 fi
3608
3609 dnl
3610 dnl Add -R options to LDFLAGS, etc.
3611 dnl
3612 if test X"$LDFLAGS_R" != X""; then
3613     LDFLAGS="$LDFLAGS $LDFLAGS_R"
3614 fi
3615 if test X"$SUDOERS_LDFLAGS_R" != X""; then
3616     SUDOERS_LDFLAGS="$SUDOERS_LDFLAGS $SUDOERS_LDFLAGS_R"
3617 fi
3618 if test X"$ZLIB_R" != X""; then
3619     ZLIB="$ZLIB_R $ZLIB"
3620 fi
3621
3622 dnl
3623 dnl Override default configure dirs for the Makefile
3624 dnl
3625 if test X"$prefix" = X"NONE"; then
3626     test "$mandir" = '${datarootdir}/man' && mandir='$(prefix)/man'
3627 else
3628     test "$mandir" = '${datarootdir}/man' && mandir='$(datarootdir)/man'
3629 fi
3630 test "$bindir" = '${exec_prefix}/bin' && bindir='$(exec_prefix)/bin'
3631 test "$sbindir" = '${exec_prefix}/sbin' && sbindir='$(exec_prefix)/sbin'
3632 test "$libexecdir" = '${exec_prefix}/libexec' && libexecdir='$(exec_prefix)/libexec'
3633 test "$includedir" = '${prefix}/include' && includedir='$(prefix)/include'
3634 test "$datarootdir" = '${prefix}/share' && datarootdir='$(prefix)/share'
3635 test "$docdir" = '${datarootdir}/doc/${PACKAGE_TARNAME}' && docdir='$(datarootdir)/doc/$(PACKAGE_TARNAME)'
3636 test "$localedir" = '${datarootdir}/locale' && localedir='$(datarootdir)/locale'
3637 test "$localstatedir" = '${prefix}/var' && localstatedir='$(prefix)/var'
3638 test "$sysconfdir" = '${prefix}/etc' -a X"$with_stow" != X"yes" && sysconfdir='/etc'
3639
3640 dnl
3641 dnl Substitute into the Makefile and man pages
3642 dnl
3643 AC_CONFIG_FILES([Makefile common/Makefile compat/Makefile doc/Makefile include/Makefile src/sudo_usage.h src/Makefile plugins/sample/Makefile plugins/group_file/Makefile plugins/system_group/Makefile plugins/sudoers/Makefile plugins/sudoers/sudoers])
3644 AC_OUTPUT
3645
3646 dnl
3647 dnl Spew any text the user needs to know about
3648 dnl
3649 if test "$with_pam" = "yes"; then
3650     case $host_os in
3651         hpux*)
3652             if test -f /usr/lib/security/libpam_hpsec.so.1; then
3653                 AC_MSG_NOTICE([You may wish to add the following line to /etc/pam.conf])
3654                 AC_MSG_NOTICE([sudo session required libpam_hpsec.so.1 bypass_umask bypass_last_login])
3655             fi
3656             ;;
3657         linux*)
3658             AC_MSG_NOTICE([You will need to customize sample.pam and install it as /etc/pam.d/sudo])
3659             ;;
3660     esac
3661 fi
3662
3663 dnl
3664 dnl Autoheader templates
3665 dnl
3666 AH_TEMPLATE(BROKEN_SYSLOG, [Define to 1 if the `syslog' function returns a non-zero int to denote failure.])
3667 AH_TEMPLATE(CLASSIC_INSULTS, [Define to 1 if you want the insults from the "classic" version sudo.])
3668 AH_TEMPLATE(CSOPS_INSULTS, [Define to 1 if you want insults culled from the twisted minds of CSOps.])
3669 AH_TEMPLATE(SUDOERS_PLUGIN, [The name of the sudoers plugin, including extension.])
3670 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.])
3671 AH_TEMPLATE(ENV_DEBUG, [Define to 1 to enable environment function debugging.])
3672 AH_TEMPLATE(ENV_EDITOR, [Define to 1 if you want visudo to honor the EDITOR and VISUAL env variables.])
3673 AH_TEMPLATE(FQDN, [Define to 1 if you want to require fully qualified hosts in sudoers.])
3674 AH_TEMPLATE(ENV_RESET, [Define to 1 to enable environment resetting by default.])
3675 AH_TEMPLATE(GOONS_INSULTS, [Define to 1 if you want insults from the "Goon Show".])
3676 AH_TEMPLATE(HAL_INSULTS, [Define to 1 if you want 2001-like insults.])
3677 AH_TEMPLATE(HAVE_AFS, [Define to 1 if you use AFS.])
3678 AH_TEMPLATE(HAVE_AIXAUTH, [Define to 1 if you use AIX general authentication.])
3679 AH_TEMPLATE(HAVE_BSD_AUTH_H, [Define to 1 if you use BSD authentication.])
3680 AH_TEMPLATE(HAVE_BSM_AUDIT, [Define to 1 to enable BSM audit support.])
3681 AH_TEMPLATE(HAVE_DCE, [Define to 1 if you use OSF DCE.])
3682 AH_TEMPLATE(HAVE_DD_FD, [Define to 1 if your `DIR' contains dd_fd.])
3683 AH_TEMPLATE(HAVE_DIRFD, [Define to 1 if you have the `dirfd' function or macro.])
3684 AH_TEMPLATE(HAVE_DISPCRYPT, [Define to 1 if you have the `dispcrypt' function.])
3685 AH_TEMPLATE(HAVE_DLOPEN, [Define to 1 if you have the `dlopen' function.])
3686 AH_TEMPLATE(HAVE_FCNTL_CLOSEM, [Define to 1 if your system has the F_CLOSEM fcntl.])
3687 AH_TEMPLATE(HAVE_FNMATCH, [Define to 1 if you have the `fnmatch' function.])
3688 AH_TEMPLATE(HAVE_FWTK, [Define to 1 if you use the FWTK authsrv daemon.])
3689 AH_TEMPLATE(HAVE_GETAUTHUID, [Define to 1 if you have the `getauthuid' function. (ULTRIX 4.x  shadow passwords).])
3690 AH_TEMPLATE(HAVE_GETPRPWNAM, [Define to 1 if you have the `getprpwnam' function.  (SecureWare-style shadow passwords).])
3691 AH_TEMPLATE(HAVE_GETPWANAM, [Define to 1 if you have the `getpwanam' function. (SunOS 4.x shadow passwords).])
3692 AH_TEMPLATE(HAVE_GETSPNAM, [Define to 1 if you have the `getspnam' function (SVR4-style shadow passwords).])
3693 AH_TEMPLATE(HAVE_GETSPWUID, [Define to 1 if you have the `getspwuid' function. (HP-UX <= 9.X shadow passwords).])
3694 AH_TEMPLATE(HAVE_GSS_KRB5_CCACHE_NAME, [Define to 1 if you have the `gss_krb5_ccache_name' function.])
3695 AH_TEMPLATE(HAVE_HEIMDAL, [Define to 1 if your Kerberos is Heimdal.])
3696 AH_TEMPLATE(HAVE_ISCOMSEC, [Define to 1 if you have the `iscomsec' function. (HP-UX >= 10.x check for shadow enabled).])
3697 AH_TEMPLATE(HAVE_ISSECURE, [Define to 1 if you have the `issecure' function. (SunOS 4.x check for shadow enabled).])
3698 AH_TEMPLATE(HAVE_KERB5, [Define to 1 if you use Kerberos V.])
3699 AH_TEMPLATE(HAVE_KRB5_GET_INIT_CREDS_OPT_ALLOC, [Define to 1 if you have the `krb5_get_init_creds_opt_alloc' function.])
3700 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.])
3701 AH_TEMPLATE(HAVE_KRB5_INIT_SECURE_CONTEXT, [Define to 1 if you have the `krb5_init_secure_context' function.])
3702 AH_TEMPLATE(HAVE_KRB5_VERIFY_USER, [Define to 1 if you have the `krb5_verify_user' function.])
3703 AH_TEMPLATE(HAVE_LBER_H, [Define to 1 if your LDAP needs <lber.h>. (OpenLDAP does not).])
3704 AH_TEMPLATE(HAVE_LDAP, [Define to 1 if you use LDAP for sudoers.])
3705 AH_TEMPLATE(HAVE_LIBINTL_H, [Define to 1 if you have the <libintl.h> header file.])
3706 AH_TEMPLATE(HAVE_LINUX_AUDIT, [Define to 1 to enable Linux audit support.])
3707 AH_TEMPLATE(HAVE_SSSD, [Define to 1 to enable SSSD support.])
3708 AH_TEMPLATE(HAVE_OPIE, [Define to 1 if you use NRL OPIE.])
3709 AH_TEMPLATE(HAVE_PAM, [Define to 1 if you use PAM authentication.])
3710 AH_TEMPLATE(HAVE_PAM_LOGIN, [Define to 1 if you use a specific PAM session for sudo -i.])
3711 AH_TEMPLATE(HAVE_PROJECT_H, [Define to 1 if you have the <project.h> header file.])
3712 AH_TEMPLATE(HAVE_SECURID, [Define to 1 if you use SecurID for authentication.])
3713 AH_TEMPLATE(HAVE_SELINUX, [Define to 1 to enable SELinux RBAC support.])
3714 AH_TEMPLATE(HAVE_SETKEYCREATECON, [Define to 1 if you have the `setkeycreatecon' function.])
3715 AH_TEMPLATE(HAVE_SHL_LOAD, [Define to 1 if you have the `shl_load' function.])
3716 AH_TEMPLATE(HAVE_SKEY, [Define to 1 if you use S/Key.])
3717 AH_TEMPLATE(HAVE_SKEYACCESS, [Define to 1 if your S/Key library has skeyaccess().])
3718 AH_TEMPLATE(HAVE_RFC1938_SKEYCHALLENGE, [Define to 1 if the skeychallenge() function is RFC1938-compliant and takes 4 arguments.])
3719 AH_TEMPLATE(HAVE_ST__TIM, [Define to 1 if your struct stat uses an st__tim union.])
3720 AH_TEMPLATE(HAVE_ST_MTIM, [Define to 1 if your struct stat has an st_mtim member.])
3721 AH_TEMPLATE(HAVE_ST_MTIMESPEC, [Define to 1 if your struct stat has an st_mtimespec member.])
3722 AH_TEMPLATE(HAVE___PROGNAME, [Define to 1 if your crt0.o defines the __progname symbol for you.])
3723 AH_TEMPLATE(HOST_IN_LOG, [Define to 1 if you want the hostname to be entered into the log file.])
3724 AH_TEMPLATE(IGNORE_DOT_PATH, [Define to 1 if you want to ignore '.' and empty PATH elements.])
3725 AH_TEMPLATE(LOGGING, [Define to SLOG_SYSLOG, SLOG_FILE, or SLOG_BOTH.])
3726 AH_TEMPLATE(LONG_OTP_PROMPT, [Define to 1 if you want a two line OTP (S/Key or OPIE) prompt.])
3727 AH_TEMPLATE(NO_AUTHENTICATION, [Define to 1 if you don't want sudo to prompt for a password by default.])
3728 AH_TEMPLATE(NO_LECTURE, [Define to 1 if you don't want users to get the lecture the first they user sudo.])
3729 AH_TEMPLATE(NO_PAM_SESSION, [Define to 1 if you don't want to use sudo's PAM session support.])
3730 AH_TEMPLATE(NO_ROOT_MAILER, [Define to avoid runing the mailer as root.])
3731 AH_TEMPLATE(NO_ROOT_SUDO, [Define to 1 if root should not be allowed to use sudo.])
3732 AH_TEMPLATE(NO_TTY_TICKETS, [Define to 1 if you want a single ticket file instead of per-tty files.])
3733 AH_TEMPLATE(PC_INSULTS, [Define to 1 to replace politically incorrect insults with less offensive ones.])
3734 AH_TEMPLATE(SECURE_PATH, [Define to 1 to override the user's path with a built-in one.])
3735 AH_TEMPLATE(SEND_MAIL_WHEN_NOT_OK, [Define to 1 to send mail when the user is not allowed to run a command.])
3736 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.])
3737 AH_TEMPLATE(SEND_MAIL_WHEN_NO_USER, [Define to 1 to send mail when the user is not in the sudoers file.])
3738 AH_TEMPLATE(SHELL_IF_NO_ARGS, [Define to 1 if you want sudo to start a shell if given no arguments.])
3739 AH_TEMPLATE(SHELL_SETS_HOME, [Define to 1 if you want sudo to set $HOME in shell mode.])
3740 AH_TEMPLATE(STUB_LOAD_INTERFACES, [Define to 1 if the code in interfaces.c does not compile for you.])
3741 AH_TEMPLATE(UMASK_OVERRIDE, [Define to 1 to use the umask specified in sudoers even when it is less restrictive than the invoking user's.])
3742 AH_TEMPLATE(USE_ADMIN_FLAG, [Define to 1 if you want to create ~/.sudo_as_admin_successful if the user is in the admin group the first time they run sudo.])
3743 AH_TEMPLATE(USE_INSULTS, [Define to 1 if you want to insult the user for entering an incorrect password.])
3744 AH_TEMPLATE(USE_STOW, [Define to 1 if you use GNU stow packaging.])
3745 AH_TEMPLATE(WITHOUT_PASSWD, [Define to avoid using the passwd/shadow file for authentication.])
3746 AH_TEMPLATE(sig_atomic_t, [Define to `int' if <signal.h> does not define.])
3747 AH_TEMPLATE(__signed, [Define to `signed' or nothing if compiler does not support a signed type qualifier.])
3748 AH_TEMPLATE(socklen_t, [Define to `unsigned int' if <sys/socket.h> doesn't define.])
3749 AH_TEMPLATE(HAVE_STRUCT_UTMP_UT_EXIT, [Define to 1 if `ut_exit' is a member of `struct utmp'.])
3750 AH_TEMPLATE(HAVE_STRUCT_UTMPX_UT_EXIT, [Define to 1 if `ut_exit' is a member of `struct utmpx'.])
3751 AH_TEMPLATE(HAVE___FUNC__, [Define to 1 if the compiler supports the C99 __func__ variable.])
3752 AH_TEMPLATE(SUDO_KRB5_INSTANCE, [An instance string to append to the username (separated by a slash) for Kerberos V authentication.])
3753 AH_TEMPLATE(RTLD_PRELOAD_VAR, [The environment variable that controls preloading of dynamic objects.])
3754 AH_TEMPLATE(RTLD_PRELOAD_ENABLE_VAR, [An extra environment variable that is required to enable preloading (if any).])
3755 AH_TEMPLATE(RTLD_PRELOAD_DELIM, [The delimiter to use when defining multiple preloaded objects.])
3756 AH_TEMPLATE(RTLD_PRELOAD_DEFAULT, [The default value of preloaded objects (if any).])
3757 AH_TEMPLATE(HAVE_DSO_VISIBILITY, [Define to 1 if the compiler supports the __visibility__ attribute.])
3758 AH_TEMPLATE(HAVE_SYS_SIGABBREV, [Define to 1 if your libc has the `sys_sigabbrev' symbol.])
3759 AH_TEMPLATE(HAVE_NSS_SEARCH, [Define to 1 if you have the `nss_search' function.])
3760 AH_TEMPLATE(HAVE__NSS_INITF_GROUP, [Define to 1 if you have the `_nss_initf_group' function.])
3761 AH_TEMPLATE(HAVE___NSS_INITF_GROUP, [Define to 1 if you have the `__nss_initf_group' function.])
3762 AH_TEMPLATE(HAVE__NSS_XBYY_BUF_ALLOC, [Define to 1 if you have the `_nss_XbyY_buf_alloc' function.])
3763 AH_TEMPLATE(HAVE___NSS_XBYY_BUF_ALLOC, [Define to 1 if you have the `__nss_XbyY_buf_alloc' function.])
3764
3765 dnl
3766 dnl Bits to copy verbatim into config.h.in
3767 dnl
3768 AH_TOP([#ifndef _SUDO_CONFIG_H
3769 #define _SUDO_CONFIG_H])
3770
3771 AH_BOTTOM([/*
3772  * Macros to convert ctime and mtime into timevals.
3773  */
3774 #define timespec2timeval(_ts, _tv) do {                                 \
3775     (_tv)->tv_sec = (_ts)->tv_sec;                                      \
3776     (_tv)->tv_usec = (_ts)->tv_nsec / 1000;                             \
3777 } while (0)
3778
3779 #ifdef HAVE_ST_MTIM
3780 # ifdef HAVE_ST__TIM
3781 #  define ctim_get(_x, _y)      timespec2timeval(&(_x)->st_ctim.st__tim, (_y))
3782 #  define mtim_get(_x, _y)      timespec2timeval(&(_x)->st_mtim.st__tim, (_y))
3783 # else
3784 #  define ctim_get(_x, _y)      timespec2timeval(&(_x)->st_ctim, (_y))
3785 #  define mtim_get(_x, _y)      timespec2timeval(&(_x)->st_mtim, (_y))
3786 # endif
3787 #else
3788 # ifdef HAVE_ST_MTIMESPEC
3789 #  define ctim_get(_x, _y)      timespec2timeval(&(_x)->st_ctimespec, (_y))
3790 #  define mtim_get(_x, _y)      timespec2timeval(&(_x)->st_mtimespec, (_y))
3791 # else
3792 #  define ctim_get(_x, _y)      do { (_y)->tv_sec = (_x)->st_ctime; (_y)->tv_usec = 0; } while (0)
3793 #  define mtim_get(_x, _y)      do { (_y)->tv_sec = (_x)->st_mtime; (_y)->tv_usec = 0; } while (0)
3794 # endif /* HAVE_ST_MTIMESPEC */
3795 #endif /* HAVE_ST_MTIM */
3796
3797 #ifdef __GNUC__
3798 # define ignore_result(x) do {                                                 \
3799     __typeof__(x) y = (x);                                                     \
3800     (void)y;                                                                   \
3801 } while(0)
3802 #else
3803 # define ignore_result(x)       (void)(x)
3804 #endif
3805
3806 /* BSD compatibility on some SVR4 systems. */
3807 #ifdef __svr4__
3808 # define BSD_COMP
3809 #endif /* __svr4__ */
3810
3811 #endif /* _SUDO_CONFIG_H */])