1dnl ### autoheader templates ########################################
2AH_TEMPLATE([CONFIGINVOCATION], [./configure invocation])
3AH_TEMPLATE([DEFPORT], [Socket used to communicate])
4AH_TEMPLATE([DEFBASEPORT], [Base socket used for secondary channel])
5AH_TEMPLATE([MASTERHOST], [Hostname of console server])
6AH_TEMPLATE([CONFIGFILE], [Config file path])
7AH_TEMPLATE([CLIENTCONFIGFILE], [Client config file path])
8AH_TEMPLATE([PASSWDFILE], [Password file path])
9AH_TEMPLATE([LOGFILEPATH], [Logfile path])
10AH_TEMPLATE([MAXMEMB], [Number of consoles per child process])
11AH_TEMPLATE([CONNECTTIMEOUT], [TCP connection timeout])
12AH_TEMPLATE([PIDFILE], [pidfile to write to])
13AH_TEMPLATE([USE_LIBWRAP], [use tcp_wrappers libwrap])
14dnl AH_TEMPLATE([HAVE_POSIX_REGCOMP], [have POSIX regcomp])
15AH_TEMPLATE([HAVE_PAM], [have PAM support])
16AH_TEMPLATE([HAVE_OPENSSL], [have openssl support])
17AH_TEMPLATE([HAVE_GSSAPI], [have gss-api support])
18AH_TEMPLATE([HAVE_FREEIPMI], [have freeipmi support])
19AH_TEMPLATE([STRIP_REALM], [retry username without @REALM with gss-api authentication])
20AH_TEMPLATE([HAVE_DMALLOC], [have dmalloc support])
21AH_TEMPLATE([HAVE_SA_LEN],[Defined if sa_len member exists in struct sockaddr])
22AH_TEMPLATE([TRUST_REVERSE_DNS],[Defined if we trust reverse DNS])
23AH_TEMPLATE([USE_EXTENDED_MESSAGES],[Defined if we produce extended messages])
24AH_TEMPLATE([USE_UNIX_DOMAIN_SOCKETS],[Defined if we use Unix domain sockets])
25AH_TEMPLATE([USE_IPV6], [Defined if building with IPv6 support])
26AH_TEMPLATE([UDSDIR], [Directory for Unix domain sockets])
27AH_TEMPLATE([FOR_CYCLADES_TS], [Defined if building for a Cyclades TS])
28AH_TEMPLATE([REQ_SERVER_CERT], [Defined if client requires server SSL certificate])
29AH_TEMPLATE([TRUST_UDS_CRED], [Defined if we trust credentials from UDS client])
30
31dnl ### Normal initialization. ######################################
32AC_INIT([conserver],m4_esyscmd_s([./package/get-version number]))
33AC_PREREQ(2.59)
34AC_CONFIG_SRCDIR([conserver/main.c])
35AC_CONFIG_HEADER(config.h)
36
37AC_DEFINE_UNQUOTED(CONFIGINVOCATION, "$0 $@")
38
39dnl ### Set some option defaults. ###################################
40if test -z "$CFLAGS"; then
41  CFLAGS="-O"
42fi
43MKDIR="mkdir -p -m 755"
44AC_SUBST(MKDIR)
45
46AC_SUBST(CONSERVER_VERSION, m4_esyscmd_s([./package/get-version number]))
47AC_SUBST(CONSERVER_DATE, m4_esyscmd_s([./package/get-version date]))
48
49
50dnl ### Custom settings. ############################################
51dnl AC_MSG_CHECKING(whether to allow 64bit compilation)
52dnl AC_ARG_WITH(64bit,
53dnl 	AC_HELP_STRING([--with-64bit],[Allow 64bit compilation]),
54dnl 		[case "$withval" in
55dnl 		    yes)
56dnl 			with_64bit=yes
57dnl 			;;
58dnl 		    *)
59dnl 			with_64bit=no
60dnl 			;;
61dnl 		esac], [with_64bit=no])
62dnl AC_MSG_RESULT($with_64bit)
63
64AC_MSG_CHECKING(for port number specification)
65AC_ARG_WITH(port,
66	AS_HELP_STRING([--with-port=PORT],[Specify port number @<:@conserver@:>@]),
67	[case "$withval" in
68	    yes|no)
69		AC_DEFINE_UNQUOTED(DEFPORT, "conserver")
70		AC_MSG_RESULT(port 'conserver')
71		;;
72	    *)
73		AC_DEFINE_UNQUOTED(DEFPORT, "$withval")
74		AC_MSG_RESULT(port '$withval')
75		;;
76	esac],
77	[AC_DEFINE_UNQUOTED(DEFPORT, "conserver")
78	AC_MSG_RESULT(port 'conserver')])
79
80AC_MSG_CHECKING(for secondary channel base port)
81AC_ARG_WITH(base,
82	AS_HELP_STRING([--with-base=PORT], [Base port for secondary channel @<:@0@:>@]),
83	[case "$withval" in
84	    yes|no)
85		AC_DEFINE_UNQUOTED(DEFBASEPORT, "0")
86		AC_MSG_RESULT(port '0')
87		;;
88	    *)
89		AC_DEFINE_UNQUOTED(DEFBASEPORT, "$withval")
90		AC_MSG_RESULT(port '$withval')
91		;;
92	esac],
93	[AC_DEFINE_UNQUOTED(DEFBASEPORT, "0")
94	AC_MSG_RESULT(port '0')])
95
96AC_MSG_CHECKING(for master conserver hostname)
97AC_ARG_WITH(master,
98	AS_HELP_STRING([--with-master=MASTER],[Specify master server hostname @<:@console@:>@]),
99	[case "$withval" in
100	    yes|no)
101		AC_DEFINE_UNQUOTED(MASTERHOST, "console")
102		AC_MSG_RESULT('console')
103		;;
104	    *)
105		AC_DEFINE_UNQUOTED(MASTERHOST, "$withval")
106		AC_MSG_RESULT('$withval')
107		;;
108	esac],
109	[AC_DEFINE_UNQUOTED(MASTERHOST, "console")
110	AC_MSG_RESULT('console')])
111
112AC_MSG_CHECKING(for client configuration filename)
113AC_ARG_WITH(ccffile,
114	AS_HELP_STRING([--with-ccffile=CFFILE],[Specify client config filename @<:@SYSCONFDIR/console.cf@:>@]),
115	[case "$withval" in
116	    yes|no)
117		AC_DEFINE_UNQUOTED(CLIENTCONFIGFILE, [SYSCONFDIR "/console.cf"])
118		AC_MSG_RESULT('$sysconfdir/console.cf')
119		;;
120	    [[\\/]]* | ?:[[\\/]]* )
121		AC_DEFINE_UNQUOTED(CLIENTCONFIGFILE, ["$withval"])
122		AC_MSG_RESULT('$withval')
123		;;
124	    *)
125		AC_DEFINE_UNQUOTED(CLIENTCONFIGFILE, [SYSCONFDIR "/$withval"])
126		AC_MSG_RESULT('$sysconfdir/$withval')
127		;;
128	esac],
129	[AC_DEFINE_UNQUOTED(CLIENTCONFIGFILE, [SYSCONFDIR "/console.cf"])
130	AC_MSG_RESULT('$sysconfdir/console.cf')])
131
132AC_MSG_CHECKING(for configuration filename)
133AC_ARG_WITH(cffile,
134	AS_HELP_STRING([--with-cffile=CFFILE],[Specify config filename @<:@SYSCONFDIR/conserver.cf@:>@]),
135	[case "$withval" in
136	    yes|no)
137		AC_DEFINE_UNQUOTED(CONFIGFILE, [SYSCONFDIR "/conserver.cf"])
138		AC_MSG_RESULT('$sysconfdir/conserver.cf')
139		;;
140	    [[\\/]]* | ?:[[\\/]]* )
141		AC_DEFINE_UNQUOTED(CONFIGFILE, ["$withval"])
142		AC_MSG_RESULT('$withval')
143		;;
144	    *)
145		AC_DEFINE_UNQUOTED(CONFIGFILE, [SYSCONFDIR "/$withval"])
146		AC_MSG_RESULT('$sysconfdir/$withval')
147		;;
148	esac],
149	[AC_DEFINE_UNQUOTED(CONFIGFILE, [SYSCONFDIR "/conserver.cf"])
150	AC_MSG_RESULT('$sysconfdir/conserver.cf')])
151
152AC_MSG_CHECKING(for password filename)
153AC_ARG_WITH(pwdfile,
154	AS_HELP_STRING([--with-pwdfile=PWDFILE],[Specify password filename @<:@SYSCONFDIR/conserver.passwd@:>@]),
155	[case "$withval" in
156	    yes|no)
157		AC_DEFINE_UNQUOTED(PASSWDFILE, [SYSCONFDIR "/conserver.passwd"])
158		AC_MSG_RESULT('$sysconfdir/conserver.passwd')
159		;;
160	    [[\\/]]* | ?:[[\\/]]* )
161		AC_DEFINE_UNQUOTED(PASSWDFILE, ["$withval"])
162		AC_MSG_RESULT('$withval')
163		;;
164	    *)
165		AC_DEFINE_UNQUOTED(PASSWDFILE, [SYSCONFDIR "/$withval"])
166		AC_MSG_RESULT('$sysconfdir/$withval')
167		;;
168	esac],
169	[AC_DEFINE_UNQUOTED(PASSWDFILE, [SYSCONFDIR "/conserver.passwd"])
170	AC_MSG_RESULT('$sysconfdir/conserver.passwd')])
171
172AC_MSG_CHECKING(for log filename)
173AC_ARG_WITH(logfile,
174	AS_HELP_STRING([--with-logfile=LOGFILE],[Specify log filename @<:@/var/log/conserver@:>@]),
175	[case "$withval" in
176	    yes|no)
177		AC_DEFINE_UNQUOTED(LOGFILEPATH, "/var/log/conserver")
178		AC_MSG_RESULT('/var/log/conserver')
179		;;
180	    *)
181		AC_DEFINE_UNQUOTED(LOGFILEPATH, "$withval")
182		AC_MSG_RESULT('$withval')
183		;;
184	esac],
185	[AC_DEFINE_UNQUOTED(LOGFILEPATH, "/var/log/conserver")
186	AC_MSG_RESULT('/var/log/conserver')])
187
188AC_SUBST(PIDFILE)
189AC_MSG_CHECKING(for PID filename)
190AC_ARG_WITH(pidfile,
191	AS_HELP_STRING([--with-pidfile=PIDFILE],[Specify PID filepath @<:@/var/run/conserver.pid@:>@]),
192	[case "$withval" in
193	    yes|no)
194		PIDFILE="/var/run/conserver.pid"
195		;;
196	    *)
197		PIDFILE="$withval"
198		;;
199	esac],
200	[PIDFILE="/var/run/conserver.pid"])
201AC_DEFINE_UNQUOTED(PIDFILE, "$PIDFILE")
202AC_MSG_RESULT('$PIDFILE')
203
204AC_MSG_CHECKING(for MAXMEMB setting)
205AC_ARG_WITH(maxmemb,
206	AS_HELP_STRING([--with-maxmemb=MAXMEMB],[Specify maximum consoles per process @<:@16@:>@]),
207	[case "$withval" in
208	    yes|no)
209		AC_DEFINE_UNQUOTED(MAXMEMB, 16)
210		AC_MSG_RESULT(16)
211		;;
212	    *)
213		if expr "$withval" : '[[0-9]]*$' >/dev/null 2>&1 &&
214		   test "$withval" -gt 0 -a "$withval" -lt 256; then
215		    AC_DEFINE_UNQUOTED(MAXMEMB, $withval)
216		    AC_MSG_RESULT($withval)
217		else
218		    AC_DEFINE_UNQUOTED(MAXMEMB, 16)
219		    AC_MSG_RESULT([value out of bounds (0<x<256) - setting to 16])
220		fi
221		;;
222	esac],
223	[AC_DEFINE_UNQUOTED(MAXMEMB, 16)
224	AC_MSG_RESULT(16)])
225
226AC_MSG_CHECKING(for connect() timeout)
227AC_ARG_WITH(timeout,
228	AS_HELP_STRING([--with-timeout=TIMEOUT],[Specify connect() timeout in seconds @<:@10@:>@]),
229	[if expr "$withval" : '[[0-9]]*$' >/dev/null 2>&1 &&
230	    test "$withval" -gt 0 -a "$withval" -lt 300; then
231		AC_DEFINE_UNQUOTED(CONNECTTIMEOUT, $withval)
232		AC_MSG_RESULT($withval)
233	else
234		AC_DEFINE_UNQUOTED(CONNECTTIMEOUT, 10)
235		AC_MSG_RESULT([value out of bounds (0<x<300) - setting to 10])
236	fi],
237	[AC_DEFINE_UNQUOTED(CONNECTTIMEOUT, 10)
238	AC_MSG_RESULT(10)])
239
240AC_MSG_CHECKING(whether to trust reverse DNS)
241AC_ARG_WITH(trustrevdns,
242	AS_HELP_STRING([--with-trustrevdns],[Trust reverse DNS information]),
243	[case "$withval" in
244	    yes)
245		AC_DEFINE(TRUST_REVERSE_DNS)
246		AC_MSG_RESULT(yes)
247		;;
248	    *)
249		AC_MSG_RESULT(no)
250		;;
251	esac],[AC_MSG_RESULT(no)])
252
253AC_MSG_CHECKING(whether to display extended messages)
254AC_ARG_WITH(extmsgs,
255	AS_HELP_STRING([--with-extmsgs],[Produce extended messages]),
256	[case "$withval" in
257	    yes)
258		AC_DEFINE(USE_EXTENDED_MESSAGES)
259		AC_MSG_RESULT(yes)
260		;;
261	    *)
262		AC_MSG_RESULT(no)
263		;;
264	esac],[AC_MSG_RESULT(no)])
265
266use_dash_r=no
267AC_MSG_CHECKING(whether to use -R paths as well as -L)
268AC_ARG_WITH(rpath,
269	AS_HELP_STRING([--with-rpath],[Use -R as well as -L for libraries]),
270	[case "$withval" in
271	    yes|no)
272		AC_MSG_RESULT($withval)
273		use_dash_r=$withval
274		;;
275	    *)
276		AC_MSG_RESULT(no)
277		;;
278	esac],
279	[AC_MSG_RESULT(no)])
280
281AC_MSG_CHECKING(whether we are building for a Cyclades TS)
282AC_ARG_WITH(cycladests,
283	AS_HELP_STRING([--with-cycladests],[(deprecated - noop) Build for a Cyclades TS]),
284	[case "$withval" in
285	    yes)
286		AC_DEFINE(FOR_CYCLADES_TS)
287		AC_MSG_RESULT(yes)
288		;;
289	    *)
290		AC_MSG_RESULT(no)
291		;;
292	esac],[AC_MSG_RESULT(no)])
293
294
295dnl ### Check for compiler et al. ###################################
296AC_PROG_CC
297AC_PROG_INSTALL
298AC_PROG_LN_S
299AC_PROG_MAKE_SET
300
301dnl ### Compiler characteristics. ##################################
302AC_AIX
303AC_C_CONST
304
305dnl AC_CHECK_SIZEOF(long)
306dnl if test "$ac_cv_sizeof_long" -gt 4; then
307dnl     if test "$with_64bit" != "yes"; then
308dnl 	AC_MSG_ERROR([cannot build on >32bit systems (to override use --with-64bit)])
309dnl     else
310dnl 	AC_MSG_WARN([building a 64bit version of conserver - good luck!])
311dnl     fi
312dnl fi
313
314dnl ### Checks for header files. ###################################
315AC_HEADER_STDC
316AC_CHECK_HEADERS(sys/ioctl.h)
317
318AC_SYS_POSIX_TERMIOS
319if test "$ac_cv_sys_posix_termios" != "yes"; then
320    AC_MSG_ERROR([POSIX termios interface required])
321fi
322
323AC_CHECK_HEADERS(unistd.h getopt.h sys/vlimit.h sys/resource.h ttyent.h sys/ttold.h sys/uio.h sys/ioctl_compat.h usersec.h sys/select.h stropts.h sys/audit.h shadow.h sys/time.h crypt.h sysexits.h types.h sys/sockio.h sys/param.h sys/un.h)
324dnl sys/proc.h needs sys/param.h on openbsd, apparently
325AC_CHECK_HEADERS(sys/proc.h, [], [],
326[#if HAVE_SYS_PARAM_H
327#include <sys/param.h>
328#endif
329])
330AC_HEADER_TIME
331AC_HEADER_SYS_WAIT
332AC_TYPE_MODE_T
333AC_TYPE_SIGNAL
334AC_TYPE_PID_T
335AC_TYPE_SIZE_T
336AC_TYPE_UID_T
337
338AC_CHECK_TYPE([sig_atomic_t],,
339    AC_DEFINE(sig_atomic_t, volatile int,
340	[Define if <signal.h> does not define sig_atomic_t]),
341    [#include <signal.h>])
342
343AC_CHECK_TYPE([in_addr_t],[AC_DEFINE(HAVE_IN_ADDR_T,1,
344	[Defined if in_addr_t exists])],,[$ac_includes_default
345#include <netinet/in.h>])
346AC_CHECK_TYPE([socklen_t],[AC_DEFINE(HAVE_SOCKLEN_T,1,
347	[Defined if socklen_t exists])],,[$ac_includes_default
348#include <sys/socket.h>])
349
350AC_MSG_CHECKING(for sa_len in struct sockaddr)
351AC_TRY_COMPILE([#include <sys/types.h>
352	#include <sys/socket.h>],
353	[struct sockaddr s; s.sa_len=0;],
354	[AC_MSG_RESULT(yes)
355	 AC_DEFINE(HAVE_SA_LEN)],
356	[AC_MSG_RESULT(no)])
357
358
359dnl ### Host specific checks. ######################################
360AC_CANONICAL_HOST
361
362case "$host" in
363*-*-hpux*)
364    CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED=1"
365    AC_CHECK_LIB(xnet,t_error,,AC_MSG_ERROR([-lxnet needed on HP-UX]))
366    AC_CHECK_LIB(sec,getspnam)
367    AC_CHECK_HEADERS(hpsecurity.h prot.h)
368    AC_CHECK_FUNCS(bigcrypt iscomsec getprpwnam)
369    ;;
370esac
371
372dnl ### Check for libraries. #######################################
373AC_SEARCH_LIBS(socket,socket)
374AC_SEARCH_LIBS(gethostbyname,nsl)
375AC_SEARCH_LIBS(crypt,crypt)
376
377AC_SUBST(CONSLIBS)
378AC_SUBST(CONSCPPFLAGS)
379AC_SUBST(CONSLDFLAGS)
380
381AC_MSG_CHECKING(whether to use Unix domain sockets)
382cons_with_uds="NO"
383AC_ARG_WITH(uds,
384	AS_HELP_STRING([--with-uds@<:@=DIR@:>@    ],
385	    [Use Unix domain sockets for client/server communication @<:@/tmp/conserver@:>@]),
386	[case "$withval" in
387	    yes)
388		AC_DEFINE_UNQUOTED(UDSDIR, "/tmp/conserver")
389		AC_DEFINE(USE_UNIX_DOMAIN_SOCKETS)
390		AC_MSG_RESULT([/tmp/conserver])
391		cons_with_uds="YES"
392		;;
393	    no)
394		AC_MSG_RESULT(no)
395		;;
396	    *)
397		AC_DEFINE_UNQUOTED(UDSDIR, "$withval")
398		AC_DEFINE(USE_UNIX_DOMAIN_SOCKETS)
399		AC_MSG_RESULT('$withval')
400		cons_with_uds="YES"
401		if expr "$withval" : '/' >/dev/null 2>&1; then
402		    :
403		else
404		    echo "*** WARNING *** you may have better success using a fully-qualified path"
405		    echo "*** WARNING *** instead of '$withval'"
406		fi
407		;;
408	esac
409
410	if test $cons_with_uds = YES; then
411	    AC_MSG_CHECKING(whether to trust UDS credentials)
412	    AC_ARG_WITH(trust-uds-cred,
413		    AS_HELP_STRING([--with-trust-uds-cred],[Trust UDS credentials obtained via socket]),
414		    [case "$withval" in
415			yes)
416			    AC_TRY_COMPILE([#include <sys/types.h>
417				    #include <sys/socket.h>],
418				    [
419struct ucred u;
420u.uid = 0;
421#if !defined(SO_PEERCRED)
422#error "no SO_PEERCRED defined"
423#endif
424				    ],
425				    [AC_MSG_RESULT(yes)
426				     AC_DEFINE(UDS_CRED_STYPE, ucred, [Defined to UDS credential structure name])
427				     AC_DEFINE(UDS_CRED_UID, uid, [Defined to UDS credential structure uid field])
428				     AC_DEFINE(UDS_CRED_SO, SO_PEERCRED, [Defined to UDS credential socket option])
429				     AC_DEFINE(TRUST_UDS_CRED)],
430				    [
431					AC_TRY_COMPILE([#include <sys/types.h>
432						#include <sys/socket.h>],
433						[
434struct peercred_struct u;
435u.euid = 0;
436#if !defined(SO_PEERID)
437#error "no SO_PEERID defined"
438#endif
439						],
440						[AC_MSG_RESULT(yes)
441						 AC_DEFINE(UDS_CRED_STYPE, peercred_struct, [Defined to UDS credential structure name])
442						 AC_DEFINE(UDS_CRED_UID, euid, [Defined to UDS credential structure uid field])
443						 AC_DEFINE(UDS_CRED_SO, SO_PEERID, [Defined to UDS credential socket option])
444						 AC_DEFINE(TRUST_UDS_CRED)],
445						[AC_MSG_RESULT(no)])
446				    ])
447			    ;;
448			*)
449			    AC_MSG_RESULT(no)
450			    ;;
451		    esac],[AC_MSG_RESULT(no)])
452	fi
453	],[AC_MSG_RESULT(no)])
454
455cons_with_libwrap="NO"
456AC_ARG_WITH(libwrap,
457    AS_HELP_STRING([--with-libwrap@<:@=PATH@:>@],
458	[Compile in libwrap (tcp_wrappers) support]),
459    [if test "$withval" != "no"; then
460	if test "$withval" != "yes"; then
461	    WRAPCPPFLAGS="-I$withval/include"
462	    if test "$use_dash_r" != "yes"; then
463		WRAPLDFLAGS="-L$withval/lib"
464	    else
465		WRAPLDFLAGS="-L$withval/lib -R$withval/lib"
466	    fi
467	else
468	    WRAPCPPFLAGS=""
469	    WRAPLDFLAGS=""
470	fi
471
472	oCPPFLAGS="$CPPFLAGS"
473	oLDFLAGS="$LDFLAGS"
474	oLIBS="$LIBS"
475
476	CPPFLAGS="$CPPFLAGS $WRAPCPPFLAGS"
477	LDFLAGS="$LDFLAGS $WRAPLDFLAGS"
478
479	AC_CHECK_HEADER(tcpd.h,
480	    [LIBS="$LIBS -lwrap"
481	    AC_MSG_CHECKING(for TCP wrappers library -lwrap)
482	    AC_TRY_LINK([#include <tcpd.h>
483		int allow_severity = 0;
484		int deny_severity  = 0;
485		],[hosts_access((void *)0)],
486		[AC_MSG_RESULT(yes)
487		 cons_with_libwrap="YES"
488		 AC_DEFINE(USE_LIBWRAP)
489		 CONSLIBS="$CONSLIBS -lwrap"
490		 CONSLDFLAGS="$CONSLDFLAGS $WRAPLDFLAGS"
491		 CONSCPPFLAGS="$CONSCPPFLAGS $WRAPCPPFLAGS"],
492		[AC_MSG_RESULT(no)
493		 LIBS="$LIBS -lnsl"
494		 AC_MSG_CHECKING(for TCP wrappers library -lwrap with -lnsl)
495		 AC_TRY_LINK([#include <tcpd.h>
496		    int allow_severity = 0;
497		    int deny_severity  = 0;
498		    ],[hosts_access((void *)0)],
499		    [AC_MSG_RESULT(yes)
500		     cons_with_libwrap="YES"
501		     AC_DEFINE(USE_LIBWRAP)
502		     CONSLIBS="$CONSLIBS -lwrap -lnsl"
503		     CONSLDFLAGS="$CONSLDFLAGS $WRAPLDFLAGS"
504		     CONSCPPFLAGS="$CONSCPPFLAGS $WRAPCPPFLAGS"],
505		    [AC_MSG_RESULT(no)])])],)
506	LIBS="$oLIBS"
507	CPPFLAGS="$oCPPFLAGS"
508	LDFLAGS="$oLDFLAGS"
509    fi]
510)
511
512cons_with_openssl="NO"
513AC_ARG_WITH(openssl,
514    AS_HELP_STRING([--with-openssl@<:@=PATH@:>@],
515	[Compile in OpenSSL support]),
516    [if test "$withval" != "no"; then
517	if test "$withval" != "yes"; then
518	    OPENSSLCPPFLAGS="-I$withval/include"
519	    if test "$use_dash_r" != "yes"; then
520		OPENSSLLDFLAGS="-L$withval/lib"
521	    else
522		OPENSSLLDFLAGS="-L$withval/lib -R$withval/lib"
523	    fi
524	else
525	    OPENSSLCPPFLAGS=""
526	    OPENSSLLDFLAGS=""
527	fi
528
529	oCPPFLAGS="$CPPFLAGS"
530	oLDFLAGS="$LDFLAGS"
531	oLIBS="$LIBS"
532	have_openssl=no
533
534	CPPFLAGS="$CPPFLAGS $OPENSSLCPPFLAGS"
535	LDFLAGS="$LDFLAGS $OPENSSLLDFLAGS"
536
537	AC_CHECK_HEADER([openssl/ssl.h],
538	    [LIBS="$LIBS -lssl -lcrypto"
539	    AC_MSG_CHECKING(for openssl libraries -lssl and -lcrypto)
540	    AC_TRY_LINK([#include <openssl/ssl.h>
541		],[SSL_CTX_new(NULL)],
542		[AC_MSG_RESULT(yes)
543		cons_with_openssl="YES"
544		AC_DEFINE(HAVE_OPENSSL)
545		have_openssl=yes],
546		[AC_MSG_RESULT(no)])],)
547
548	if test $have_openssl = no; then
549	    LIBS="$oLIBS"
550	    CPPFLAGS="$oCPPFLAGS"
551	    LDFLAGS="$oLDFLAGS"
552	fi
553
554	AC_MSG_CHECKING(whether to require server cert)
555	AC_ARG_WITH(req-server-cert,
556		AS_HELP_STRING([--with-req-server-cert],[Require server SSL certificate by client]),
557		[case "$withval" in
558		    yes)
559			AC_DEFINE(REQ_SERVER_CERT)
560			AC_MSG_RESULT(yes)
561			;;
562		    *)
563			AC_MSG_RESULT(no)
564			;;
565		esac],[AC_MSG_RESULT(no)])
566    fi]
567)
568
569cons_with_gssapi="NO"
570cons_strip_realm="NO"
571AC_ARG_WITH(gssapi,
572    AS_HELP_STRING([--with-gssapi@<:@=PATH@:>@],
573	[Compile in GSS-API support]),
574    [if test "$withval" != "no"; then
575	if test "$withval" != "yes"; then
576	    GSSAPICPPFLAGS="-I$withval/include"
577	    if test "$use_dash_r" != "yes"; then
578		GSSAPILDFLAGS="-L$withval/lib"
579	    else
580		GSSAPILDFLAGS="-L$withval/lib -R$withval/lib"
581	    fi
582	else
583	    GSSAPICPPFLAGS=""
584	    GSSAPILDFLAGS=""
585	fi
586
587	oCPPFLAGS="$CPPFLAGS"
588	oLDFLAGS="$LDFLAGS"
589	oLIBS="$LIBS"
590	have_gssapi=no
591
592	CPPFLAGS="$CPPFLAGS $GSSAPICPPFLAGS"
593	LDFLAGS="$LDFLAGS $GSSAPILDFLAGS"
594
595	AC_CHECK_HEADER([gssapi/gssapi.h],
596	    [LIBS="$oLIBS -lgssapi"
597	    AC_MSG_CHECKING(for gssapi library -lgssapi)
598	    AC_TRY_LINK([#include <gssapi/gssapi.h>
599		],[gss_create_empty_oid_set(NULL, NULL)],
600		[AC_MSG_RESULT(yes)
601		cons_with_gssapi="YES"
602		AC_DEFINE(HAVE_GSSAPI)
603		have_gssapi=yes],
604		[AC_MSG_RESULT(no)
605		LIBS="$oLIBS -lgssglue"
606		AC_MSG_CHECKING(for gssapi library -lgssglue)
607		AC_TRY_LINK([#include <gssapi/gssapi.h>
608		    ],[gss_create_empty_oid_set(NULL, NULL)],
609		    [AC_MSG_RESULT(yes)
610		    cons_with_gssapi="YES"
611		    AC_DEFINE(HAVE_GSSAPI)
612		    have_gssapi=yes],
613		    [AC_MSG_RESULT(no)
614		    LIBS="$oLIBS -lgss"
615		    AC_MSG_CHECKING(for gssapi library -lgss)
616		    AC_TRY_LINK([#include <gssapi/gssapi.h>
617			],[gss_create_empty_oid_set(NULL, NULL)],
618			[AC_MSG_RESULT(yes)
619			cons_with_gssapi="YES"
620			AC_DEFINE(HAVE_GSSAPI)
621			have_gssapi=yes],
622			[AC_MSG_RESULT(no)])])])],)
623
624	if test $have_gssapi = no; then
625	    LIBS="$oLIBS"
626	    CPPFLAGS="$oCPPFLAGS"
627	    LDFLAGS="$oLDFLAGS"
628	else
629	    AC_MSG_CHECKING(whether to fallback to username without @REALM)
630	    AC_ARG_WITH(striprealm,
631		    AS_HELP_STRING([--with-striprealm],[retry username without @REALM with gss-api authentication]),
632		    [case "$withval" in
633			yes)
634			    AC_DEFINE(STRIP_REALM)
635			    AC_MSG_RESULT(yes)
636			    cons_strip_realm="YES"
637			    ;;
638			*)
639			    AC_MSG_RESULT(no)
640			    ;;
641		    esac],[AC_MSG_RESULT(no)])
642	fi
643    fi]
644)
645
646cons_with_freeipmi="NO"
647AC_ARG_WITH(freeipmi,
648    AS_HELP_STRING([--with-freeipmi@<:@=PATH@:>@],
649	[Compile in FreeIPMI support]),
650    [if test "$withval" != "no"; then
651	if test "$withval" != "yes"; then
652	    FREEIPMICPPFLAGS="-I$withval/include"
653	    if test "$use_dash_r" != "yes"; then
654		FREEIPMILDFLAGS="-L$withval/lib"
655	    else
656		FREEIPMILDFLAGS="-L$withval/lib -R$withval/lib"
657	    fi
658	else
659	    FREEIPMICPPFLAGS=""
660	    FREEIPMILDFLAGS=""
661	fi
662
663	oCPPFLAGS="$CPPFLAGS"
664	oLDFLAGS="$LDFLAGS"
665	oLIBS="$LIBS"
666	have_freeipmi=no
667
668	CPPFLAGS="$CPPFLAGS $FREEIPMICPPFLAGS"
669	LDFLAGS="$LDFLAGS $FREEIPMILDFLAGS"
670
671	AC_CHECK_HEADER([ipmiconsole.h],
672	    [LIBS="$LIBS -lipmiconsole"
673	    AC_MSG_CHECKING(for freeipmi libraries -lipmiconsole)
674	    AC_TRY_LINK([#include <ipmiconsole.h>
675		],[ipmiconsole_ctx_fd(0)],
676		[AC_MSG_RESULT(yes)
677		cons_with_freeipmi="YES"
678		AC_DEFINE(HAVE_FREEIPMI)
679		CONSLIBS="$CONSLIBS -lipmiconsole"
680		have_freeipmi=yes],
681		[AC_MSG_RESULT(no)])],)
682
683	LIBS="$oLIBS"
684	if test $have_freeipmi = no; then
685	    CPPFLAGS="$oCPPFLAGS"
686	    LDFLAGS="$oLDFLAGS"
687	fi
688    fi]
689)
690
691cons_with_dmalloc="NO"
692AC_ARG_WITH(dmalloc,
693    AS_HELP_STRING([--with-dmalloc@<:@=PATH@:>@],
694	[Compile in dmalloc support]),
695    [if test "$withval" != "no"; then
696	if test "$withval" != "yes"; then
697	    DMALLOCCPPFLAGS="-I$withval/include"
698	    if test "$use_dash_r" != "yes"; then
699		DMALLOCLDFLAGS="-L$withval/lib"
700	    else
701		DMALLOCLDFLAGS="-L$withval/lib -R$withval/lib"
702	    fi
703	else
704	    DMALLOCCPPFLAGS=""
705	    DMALLOCLDFLAGS=""
706	fi
707
708	oCPPFLAGS="$CPPFLAGS"
709	oLDFLAGS="$LDFLAGS"
710	oLIBS="$LIBS"
711	have_dmalloc=no
712
713	CPPFLAGS="$CPPFLAGS $DMALLOCCPPFLAGS"
714	LDFLAGS="$LDFLAGS $DMALLOCLDFLAGS"
715
716	AC_CHECK_HEADER([dmalloc.h],
717	    [LIBS="$LIBS -ldmalloc"
718	    AC_MSG_CHECKING(for dmalloc libraries -ldmalloc)
719	    AC_TRY_LINK([#include <dmalloc.h>
720		],[dmalloc_debug(0)],
721		[AC_MSG_RESULT(yes)
722		cons_with_dmalloc="YES"
723		AC_DEFINE(HAVE_DMALLOC)
724		have_dmalloc=yes],
725		[AC_MSG_RESULT(no)])],)
726
727	if test $have_dmalloc = no; then
728	    LIBS="$oLIBS"
729	    CPPFLAGS="$oCPPFLAGS"
730	    LDFLAGS="$oLDFLAGS"
731	fi
732    fi]
733)
734
735
736dnl ### Check for needed functions. ################################
737
738dnl dnl The following basically stollen from the less-358 distribution, but
739dnl dnl modified for my own purposes
740dnl AC_MSG_CHECKING(for POSIX regex)
741dnl AC_ARG_WITH(regex,
742dnl     AC_HELP_STRING([--with-regex],
743dnl 	[Use regular expressions in conserver.passwd]),
744dnl 	[if test "$withval" = yes; then
745dnl 	    AC_TRY_RUN([
746dnl 		#include <sys/types.h>
747dnl 		#include <regex.h>
748dnl 		main() { regex_t r; regmatch_t rm; char *text = "xabcy";
749dnl 		if (regcomp(&r, "abc", 0)) exit(1);
750dnl 		if (regexec(&r, text, 1, &rm, 0)) exit(1);
751dnl 		if (rm.rm_so != 1) exit(1); /* check for correct offset */
752dnl 		exit(0); }
753dnl 	    ],have_posix_regex=yes,have_posix_regex=no,have_posix_regex=unknown)
754dnl 	    if test $have_posix_regex = yes; then
755dnl 	      AC_MSG_RESULT(yes)
756dnl 	      AC_DEFINE(HAVE_POSIX_REGCOMP)
757dnl 	    elif test $have_posix_regex = unknown; then
758dnl 		AC_TRY_LINK([
759dnl 		    #include <sys/types.h>
760dnl 		    #include <regex.h>],
761dnl 		[regex_t *r; regfree(r);],
762dnl 		AC_MSG_RESULT(yes)
763dnl 		AC_DEFINE(HAVE_POSIX_REGCOMP))
764dnl 	    else
765dnl 	      AC_MSG_RESULT(no)
766dnl 	    fi
767dnl 	else
768dnl 	    AC_MSG_RESULT(no)
769dnl 	fi],[AC_MSG_RESULT(no)])
770
771cons_with_pam="NO"
772AC_MSG_CHECKING(for PAM support)
773AC_ARG_WITH(pam,
774    AS_HELP_STRING([--with-pam],
775	[Enable PAM support]),
776	[if test "$withval" = yes; then
777	    oLIBS="$LIBS"
778
779	    AC_CHECK_HEADER(security/pam_appl.h,
780		[LIBS="$LIBS -lpam"
781		AC_MSG_CHECKING(for PAM library -lpam)
782		AC_TRY_LINK_FUNC([pam_start],
783		    [AC_MSG_RESULT(yes)
784		    cons_with_pam="YES"
785		    AC_DEFINE(HAVE_PAM)
786		    CONSLIBS="$CONSLIBS -lpam"],
787		    [LIBS="$LIBS -ldl"
788		    AC_MSG_RESULT(no)
789		    AC_MSG_CHECKING(for PAM library -lpam with -ldl)
790		    AC_TRY_LINK_FUNC([pam_end],
791			[AC_MSG_RESULT(yes)
792			cons_with_pam="YES"
793			AC_DEFINE(HAVE_PAM)
794			CONSLIBS="$CONSLIBS -lpam -ldl"],
795			[AC_MSG_RESULT(no)])])],)
796
797	    LIBS="$oLIBS"
798	else
799	    AC_MSG_RESULT(no)
800	fi],[AC_MSG_RESULT(no)])
801
802cons_with_ipv6="NO"
803AC_MSG_CHECKING(whether to support IPv6)
804AC_ARG_WITH(ipv6,
805	AS_HELP_STRING([--with-ipv6],
806	    [(experimental) Use IPv6 for client/server communication]),
807	[case "$withval" in
808	    yes)
809		AC_DEFINE(USE_IPV6)
810		AC_MSG_RESULT(yes)
811		cons_with_ipv6="YES"
812		;;
813	    *)
814		AC_MSG_RESULT(no)
815		;;
816	esac],[AC_MSG_RESULT(no)])
817
818
819dnl Checks for pty allocation...
820dnl According to the xemacs distribution:
821dnl   getpt()  is the preferred pty allocation method on glibc systems.
822dnl   _getpty() is the preferred pty allocation method on SGI systems.
823dnl   grantpt(), unlockpt(), ptsname() are defined by Unix98.
824dnl   openpty() is the preferred pty allocation method on BSD and Tru64 systems.
825dnl   openpty() might be declared in:
826dnl   - pty.h (Tru64 or Linux)
827dnl   - libutil.h (FreeBSD)
828dnl   - util.h (NetBSD)
829dnl Conserver doesn't support getpt() or _getpt() yet.
830AC_CHECK_HEADERS(pty.h libutil.h util.h)
831AC_CHECK_LIB(util, openpty)
832AC_CHECK_FUNCS(openpty)
833
834AC_CHECK_FUNCS(getopt strerror getrlimit getsid setsid getuserattr setgroups tcgetpgrp tcsetpgrp tcgetattr tcsetattr tcsendbreak setpgrp getutent setttyent getspnam setlinebuf setvbuf ptsname grantpt unlockpt sigaction setsockopt getdtablesize putenv memset memcpy memcmp memmove sysconf getlogin inet_aton setproctitle gettimeofday strlcpy closefrom)
835AC_CHECK_FUNC(strcasecmp,
836	[AC_DEFINE(HAVE_STRCASECMP, 1, [Define if strcasecmp is available])],
837	[AC_CHECK_FUNC(stricmp,
838		[AC_DEFINE(HAVE_STRICMP, 1, [Define if stricmp is available])],
839		[AC_MSG_ERROR([strcasecmp or stricmp must be available])])])
840
841dnl    Checks for libbsm functions
842AC_CHECK_HEADERS(bsm/audit.h)
843AC_CHECK_LIB(bsm, getaudit)
844AC_CHECK_FUNCS(getaudit getaudit_addr)
845
846
847dnl ### Create output files. #######################################
848AC_CONFIG_FILES([Makefile conserver/Makefile conserver.cf/Makefile console/Makefile autologin/Makefile contrib/chat/Makefile])
849AC_CONFIG_FILES([conserver/conserver.rc], [chmod +x conserver/conserver.rc])
850AC_CONFIG_FILES([conserver.cf/conserver.cf.man conserver.cf/conserver.passwd.man conserver/conserver.man console/console.man])
851AC_OUTPUT
852
853[
854echo "=============================================================="
855echo "                      Feature Summary"
856echo ""
857echo "  Unix domain sockets (--with-uds)       : $cons_with_uds"
858echo "         TCP wrappers (--with-libwrap)   : $cons_with_libwrap"
859echo "              OpenSSL (--with-openssl)   : $cons_with_openssl"
860echo "              GSS-API (--with-gssapi)    : $cons_with_gssapi"
861echo "             FreeIPMI (--with-freeipmi)  : $cons_with_freeipmi"
862if [ $cons_with_gssapi = "YES" ]; then
863echo "         strip @REALM (--with-striprealm): $cons_strip_realm"
864fi
865echo "              dmalloc (--with-dmalloc)   : $cons_with_dmalloc"
866echo "          PAM support (--with-pam)       : $cons_with_pam"
867echo "         IPv6 support (--with-ipv6)      : $cons_with_ipv6"
868echo ""
869echo "=============================================================="
870]
871