GSS_S_PROMPTING_NEEDED is a bit
[cyrus-sasl.git] / cmulocal / kerberos_v4.m4
1 dnl kerberos_v4.m4--Kerberos 4 libraries and includes
2 dnl Derrick Brashear
3 dnl from KTH krb and Arla
4 dnl $Id: kerberos_v4.m4,v 1.28 2005/04/26 19:14:08 shadow Exp $
5
6 AC_DEFUN([CMU_KRB_SENDAUTH_PROTO], [
7 AC_MSG_CHECKING(for krb_sendauth prototype)
8 AC_TRY_COMPILE(
9 [#include <krb.h>
10 int krb_sendauth (long options, int fd, KTEXT ktext, char *service,
11                   char *inst, char *realm, u_long checksum,
12                   MSG_DAT *msg_data, CREDENTIALS *cred,
13                   Key_schedule schedule, struct sockaddr_in *laddr,
14                   struct sockaddr_in *faddr, char *version);],
15 [int foo = krb_sendauth(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); ],
16 ac_cv_krb_sendauth_proto=no,
17 ac_cv_krb_sendauth_proto=yes)
18 AC_MSG_RESULT($ac_cv_krb_sendauth_proto)
19 if test "$ac_cv_krb_sendauth_proto" = yes; then
20         AC_DEFINE(HAVE_KRB_SENDAUTH_PROTO)dnl
21 fi
22 AC_MSG_RESULT($ac_cv_krb_sendauth_proto)
23 ])
24
25 AC_DEFUN([CMU_KRB_SET_KEY_PROTO], [
26 AC_MSG_CHECKING(for krb_set_key prototype)
27 AC_CACHE_VAL(ac_cv_krb_set_key_proto, [
28 cmu_save_CPPFLAGS="$CPPFLAGS"
29 CPPFLAGS="${CPPFLAGS} ${KRB_INC_FLAGS}"
30 AC_TRY_COMPILE(
31 [#include <krb.h>
32 int krb_set_key(char *key, int cvt);],
33 [int foo = krb_set_key(0, 0);],
34 ac_cv_krb_set_key_proto=no,
35 ac_cv_krb_set_key_proto=yes)
36 ])
37 CPPFLAGS="${cmu_save_CPPFLAGS}"
38 if test "$ac_cv_krb_set_key_proto" = yes; then
39         AC_DEFINE(HAVE_KRB_SET_KEY_PROTO)dnl
40 fi
41 AC_MSG_RESULT($ac_cv_krb_set_key_proto)
42 ])
43
44 AC_DEFUN([CMU_KRB4_32_DEFN], [
45 AC_MSG_CHECKING(for KRB4_32 definition)
46 AC_CACHE_VAL(ac_cv_krb4_32_defn, [
47 cmu_save_CPPFLAGS="$CPPFLAGS"
48 CPPFLAGS="${CPPFLAGS} ${KRB_INC_FLAGS}"
49 AC_TRY_COMPILE(
50 [#include <krb.h>
51 ],
52 [KRB4_32 foo = 1;],
53 ac_cv_krb4_32_defn=yes,
54 ac_cv_krb4_32_defn=no)
55 ])
56 CPPFLAGS="${cmu_save_CPPFLAGS}"
57 if test "$ac_cv_krb4_32_defn" = yes; then
58         AC_DEFINE(HAVE_KRB4_32_DEFINE)dnl
59 fi
60 AC_MSG_RESULT($ac_cv_krb4_32_defn)
61 ])
62
63 AC_DEFUN([CMU_KRB_RD_REQ_PROTO], [
64 AC_MSG_CHECKING(for krb_rd_req prototype)
65 AC_CACHE_VAL(ac_cv_krb_rd_req_proto, [
66 cmu_save_CPPFLAGS="$CPPFLAGS"
67 CPPFLAGS="${CPPFLAGS} ${KRB_INC_FLAGS}"
68 AC_TRY_COMPILE(
69 [#include <krb.h>
70 int krb_rd_req(KTEXT authent, char *service, char *instance,
71 unsigned KRB_INT32 from_addr, AUTH_DAT *ad, char *fn);],
72 [int foo = krb_rd_req(0,0,0,0,0,0);],
73 ac_cv_krb_rd_req_proto=no,
74 ac_cv_krb_rd_req_proto=yes)
75 ])
76 CPPFLAGS="${cmu_save_CPPFLAGS}"
77 if test "$ac_cv_krb_rd_req_proto" = yes; then
78         AC_DEFINE(HAVE_KRB_RD_REQ_PROTO)dnl
79 fi
80 AC_MSG_RESULT($ac_cv_krb_rd_req_proto)
81 ])
82
83 AC_DEFUN([CMU_KRB_INC_WHERE1], [
84 saved_CPPFLAGS=$CPPFLAGS
85 CPPFLAGS="$saved_CPPFLAGS -I$1"
86 AC_TRY_COMPILE([#include <krb.h>],
87 [struct ktext foo;],
88 ac_cv_found_krb_inc=yes,
89 ac_cv_found_krb_inc=no)
90 if test "$ac_cv_found_krb_inc" = "no"; then
91   CPPFLAGS="$saved_CPPFLAGS -I$1 -I$1/kerberosIV"
92   AC_TRY_COMPILE([#include <krb.h>],
93   [struct ktext foo;],
94   [ac_cv_found_krb_inc=yes],
95   ac_cv_found_krb_inc=no)
96 fi
97 CPPFLAGS=$saved_CPPFLAGS
98 ])
99
100 AC_DEFUN([CMU_KRB_INC_WHERE], [
101    for i in $1; do
102       AC_MSG_CHECKING(for kerberos headers in $i)
103       CMU_KRB_INC_WHERE1($i)
104       CMU_TEST_INCPATH($i, krb)
105       if test "$ac_cv_found_krb_inc" = "yes"; then
106         ac_cv_krb_where_inc=$i
107         AC_MSG_RESULT(found)
108         break
109       else
110         AC_MSG_RESULT(not found)
111       fi
112     done
113 ])
114
115 #
116 # Test for kerberos lib files
117 #
118
119 AC_DEFUN([CMU_KRB_LIB_WHERE1], [
120 saved_LIBS=$LIBS
121 LIBS="$saved_LIBS -L$1 -lkrb ${KRB_LIBDES}"
122 AC_TRY_LINK(,
123 [dest_tkt();],
124 [ac_cv_found_krb_lib=yes],
125 ac_cv_found_krb_lib=no)
126 LIBS=$saved_LIBS
127 ])
128
129 AC_DEFUN([CMU_KRB_LIB_WHERE], [
130    for i in $1; do
131       AC_MSG_CHECKING(for kerberos libraries in $i)
132       CMU_KRB_LIB_WHERE1($i)
133       dnl deal with false positives from implicit link paths
134       CMU_TEST_LIBPATH($i, krb)
135       if test "$ac_cv_found_krb_lib" = "yes" ; then
136         ac_cv_krb_where_lib=$i
137         AC_MSG_RESULT(found)
138         break
139       else
140         AC_MSG_RESULT(not found)
141       fi
142     done
143 ])
144
145 AC_DEFUN([CMU_KRB4], [
146 AC_REQUIRE([CMU_FIND_LIB_SUBDIR])
147 AC_REQUIRE([CMU_SOCKETS])
148 AC_REQUIRE([CMU_LIBSSL])
149 AC_ARG_WITH(krb4,
150         [  --with-krb4=PREFIX      Compile with Kerberos 4 support],
151         [if test "X$with_krb4" = "X"; then
152                 with_krb4=yes
153         fi])
154 AC_ARG_WITH(krb4-lib,
155         [  --with-krb4-lib=dir     use kerberos 4 libraries in dir],
156         [if test "$withval" = "yes" -o "$withval" = "no"; then
157                 AC_MSG_ERROR([No argument for --with-krb4-lib])
158         fi])
159 AC_ARG_WITH(krb4-include,
160         [  --with-krb4-include=dir use kerberos 4 headers in dir],
161         [if test "$withval" = "yes" -o "$withval" = "no"; then
162                 AC_MSG_ERROR([No argument for --with-krb4-include])
163         fi])
164
165         if test "X$with_krb4" != "X"; then
166           if test "$with_krb4" != "yes" -a "$with_krb4" != "no"; then
167             ac_cv_krb_where_lib=$with_krb4/$CMU_LIB_SUBDIR
168             ac_cv_krb_where_inc=$with_krb4/include
169           fi
170         fi
171        
172         if test "$with_krb4" != "no"; then
173           if test "X$with_krb4_lib" != "X"; then
174             ac_cv_krb_where_lib=$with_krb4_lib
175           fi
176           if test "X$with_krb4_include" != "X"; then
177             ac_cv_krb_where_inc=$with_krb4_include
178           fi
179           if test "X$ac_cv_krb_where_inc" = "X"; then
180             CMU_KRB_INC_WHERE(/usr/athena/include /usr/include/kerberosIV /usr/local/include /usr/include/kerberos)
181           fi
182
183           AC_MSG_CHECKING([if libdes is needed])
184           AC_TRY_LINK([],[des_quad_cksum();],KRB_DES_LIB="",KRB_DES_LIB="maybe")
185           if test "X$KRB_DES_LIB" != "X"; then
186               LIBS="$cmu_save_LIBS -ldes"
187               AC_TRY_LINK([], [des_quad_cksum();],KRB_DES_LIB="yes")
188               if test "X$KRB_DES_LIB" = "Xyes"; then
189                   AC_MSG_RESULT([yes])
190                   KRB_LIBDES="-ldes"
191                   KRB_LIBDESA='$(KRB_LIB_DIR)/libdes.a'
192               else
193                   LIBS="$cmu_save_LIBS $LIBSSL_LIB_FLAGS"
194                   AC_TRY_LINK([],
195                   [des_quad_cksum();],KRB_DES_LIB="libcrypto")
196                   if test "X$KRB_DES_LIB" = "Xlibcrypto"; then
197                       AC_MSG_RESULT([libcrypto])
198                       KRB_LIBDES="$LIBSSL_LIB_FLAGS"
199                       KRB_LIBDESA="$LIBSSL_LIB_FLAGS"
200                   else
201                       LIBS="$cmu_save_LIBS -L$LIBSSL_LIB_DIR -ldescompat $LIBSSL_LIB_FLAGS"
202                       AC_TRY_LINK([],
203                       [des_quad_cksum();],KRB_DES_LIB="libcrypto+descompat")
204                       if test "X$KRB_DES_LIB" = "Xlibcrypto+descompat"; then
205                           AC_MSG_RESULT([libcrypto+descompat])
206                           KRB_LIBDES="-L$LIBSSL_LIB_DIR -ldescompat $LIBSSL_LIB_FLAGS"
207                           KRB_LIBDESA="-L$LIBSSL_LIB_DIR -ldescompat $LIBSSL_LIB_FLAGS"
208                       else
209                           AC_MSG_RESULT([unknown])
210                           AC_MSG_ERROR([Could not use -ldes])
211                       fi 
212                   fi 
213               fi 
214           else
215              AC_MSG_RESULT([no])
216           fi
217           if test "X$ac_cv_krb_where_lib" = "X"; then
218             CMU_KRB_LIB_WHERE(/usr/athena/$CMU_LIB_SUBDIR /usr/local/$CMU_LIB_SUBDIR /usr/$CMU_LIB_SUBDIR)
219           fi
220         fi
221           LIBS="${cmu_save_LIBS}"
222
223
224         AC_MSG_CHECKING([whether to include kerberos 4])
225         if test "X$ac_cv_krb_where_lib" = "X" -o "X$ac_cv_krb_where_inc" = "X"; then
226           ac_cv_found_krb=no
227           AC_MSG_RESULT(no)
228         else
229           ac_cv_found_krb=yes
230           AC_MSG_RESULT(yes)
231           KRB_INC_DIR=$ac_cv_krb_where_inc
232           KRB_LIB_DIR=$ac_cv_krb_where_lib
233           KRB_INC_FLAGS="-I${KRB_INC_DIR}"
234           KRB_LIB_FLAGS="-L${KRB_LIB_DIR} -lkrb ${KRB_LIBDES}"
235           LIBS="${cmu_save_LIBS} ${KRB_LIB_FLAGS}"
236           AC_CHECK_LIB(resolv, dns_lookup, KRB_LIB_FLAGS="${KRB_LIB_FLAGS} -lresolv",,"${KRB_LIB_FLAGS}")
237           AC_CHECK_LIB(crypt, crypt, KRB_LIB_FLAGS="${KRB_LIB_FLAGS} -lcrypt",,"${KRB_LIB_FLAGS}")
238           LIBS="${LIBS} ${KRB_LIB_FLAGS}"
239           AC_CHECK_FUNCS(krb_get_int krb_life_to_time)
240           AC_SUBST(KRB_INC_FLAGS)
241           AC_SUBST(KRB_LIB_FLAGS)
242           LIBS="${cmu_save_LIBS}"
243           AC_DEFINE(HAVE_KRB4,,[Kerberos V4 is present])dnl zephyr uses this
244           AC_DEFINE(KERBEROS,,[Use kerberos 4. find out what needs this symbol])
245           if test "X$RPATH" = "X"; then
246                 RPATH=""
247           fi
248           case "${host}" in
249             *-*-linux*)
250               if test "X$RPATH" = "X"; then
251                 RPATH="-Wl,-rpath,${KRB_LIB_DIR}"
252               else 
253                 RPATH="${RPATH}:${KRB_LIB_DIR}"
254               fi
255               ;;
256             *-*-hpux*)
257               if test "X$RPATH" = "X"; then
258                 RPATH="-Wl,+b${KRB_LIB_DIR}"
259               else 
260                 RPATH="${RPATH}:${KRB_LIB_DIR}"
261               fi
262               ;;
263             *-*-irix*)
264               if test "X$RPATH" = "X"; then
265                 RPATH="-Wl,-rpath,${KRB_LIB_DIR}"
266               else 
267                 RPATH="${RPATH}:${KRB_LIB_DIR}"
268               fi
269               ;;
270             *-*-solaris2*)
271               if test "$ac_cv_prog_gcc" = yes; then
272                 if test "X$RPATH" = "X"; then
273                   RPATH="-Wl,-R${KRB_LIB_DIR}"
274                 else 
275                   RPATH="${RPATH}:${KRB_LIB_DIR}"
276                 fi
277               else
278                 RPATH="${RPATH} -R${KRB_LIB_DIR}"
279               fi
280               ;;
281           esac
282           AC_SUBST(RPATH)
283         fi
284         ])
285