# Based on gssapi.m4 by Brendan Cully 20010529 dnl MU_CHECK_GSSAPI(PREFIX) dnl Search for a GSSAPI implementation in the standard locations plus PREFIX, dnl if it is set and not "yes". dnl Defines GSSAPI_CFLAGS and GSSAPI_LIBS if found. dnl Defines GSSAPI_IMPL to "GSS", "Heimdal", "MIT", or "OldMIT", or dnl "none" if not found AC_DEFUN([MU_CHECK_GSSAPI], [ if test "x$mu_cv_lib_gssapi_libs" = x; then cached="" GSSAPI_PREFIX=[$1] GSSAPI_IMPL="none" # First try krb5-config case $GSSAPI_PREFIX in yes|probe) krb5_path="$PATH";; *) krb5_path="$GSSAPI_PREFIX/bin" esac AC_PATH_PROG(KRB5CFGPATH, krb5-config, none, $krb5_path) AC_CHECK_HEADER(gss.h, [wantgss=yes], [wantgss=no]) if test $wantgss != no; then save_LIBS=$LIBS AC_CHECK_LIB(gss, gss_check_version, [GSSAPI_LIBS=-lgss], [wantgss=no]) if test $wantgss != no; then LIBS="$LIBS $GSSAPI_LIBS" AC_TRY_RUN([ #include int main() { return gss_check_version ("0.0.9") == (char*) 0; }], [:], [wantgss=no], [wantgss=no]) fi LIBS=$save_LIBS fi if test $wantgss != no; then GSSAPI_IMPL="GSS" AC_DEFINE(WITH_GSS,1,[Define if mailutils is using GSS library for GSSAPI]) elif test "$KRB5CFGPATH" != "none"; then GSSAPI_CFLAGS="$CPPFLAGS `$KRB5CFGPATH --cflags gssapi`" GSSAPI_LIBS="`$KRB5CFGPATH --libs gssapi`" GSSAPI_IMPL="Heimdal" else ## OK, try the old code saved_CPPFLAGS="$CPPFLAGS" saved_LDFLAGS="$LDFLAGS" saved_LIBS="$LIBS" case $GSSAPI_PREFIX in yes|probe) ;; *) GSSAPI_CFLAGS="-I$GSSAPI_PREFIX/include" GSSAPI_LDFLAGS="-L$GSSAPI_PREFIX/lib" CPPFLAGS="$CPPFLAGS $GSSAPI_CFLAGS" LDFLAGS="$LDFLAGS $GSSAPI_LDFLAGS" esac ## Check for new MIT kerberos V support AC_CHECK_LIB(gssapi_krb5, gss_init_sec_context, [GSSAPI_IMPL="MIT", GSSAPI_LIBS="$GSSAPI_LDFLAGS -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err"] ,, -lkrb5 -lk5crypto -lcom_err) ## Heimdal kerberos V support if test "$GSSAPI_IMPL" = "none"; then AC_CHECK_LIB(gssapi, gss_init_sec_context, [GSSAPI_IMPL="Heimdal" GSSAPI_LDFLAGS="$GSSAPI_LDFLAGS -lgssapi -lkrb5 -ldes -lasn1 -lroken" GSSAPI_LIBS="$GSSAPI_LDFLAGS -lcrypt -lcom_err"] ,, -lkrb5 -ldes -lasn1 -lroken -lcrypt -lcom_err) fi ## Old MIT Kerberos V ## Note: older krb5 distributions use -lcrypto instead of ## -lk5crypto, which collides with OpenSSL. One way of dealing ## with that is to extract all objects from krb5's libcrypto ## and from openssl's libcrypto into the same directory, then ## to create a new libcrypto from these. if test "$GSSAPI_IMPL" = "none"; then AC_CHECK_LIB(gssapi_krb5, g_order_init, [GSSAPI_IMPL="OldMIT", GSSAPI_LIBS="$GSSAPI_LDFLAGS -lgssapi_krb5 -lkrb5 -lcrypto -lcom_err"] ,, -lkrb5 -lcrypto -lcom_err) fi CPPFLAGS="$saved_CPPFLAGS" LDFLAGS="$saved_LDFLAGS" LIBS="$saved_LIBS" fi saved_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $GSSAPI_CFLAGS" AC_CHECK_HEADERS(gssapi.h gssapi/gssapi.h gssapi/gssapi_generic.h) AC_CHECK_DECL(GSS_C_NT_HOSTBASED_SERVICE,, [ AC_DEFINE(GSS_C_NT_HOSTBASED_SERVICE, gss_nt_service_name, [Work around buggy MIT library])],[ #ifdef WITH_GSS # include #else # ifdef HAVE_GSSAPI_H # include # else # ifdef HAVE_GSSAPI_GSSAPI_H # include # endif # ifdef HAVE_GSSAPI_GSSAPI_GENERIC_H # include # endif # endif #endif ]) CPPFLAGS="$saved_CPPFLAGS" mu_cv_lib_gssapi_cflags="$GSSAPI_CFLAGS" mu_cv_lib_gssapi_libs="$GSSAPI_LIBS" mu_cv_lib_gssapi_impl="$GSSAPI_IMPL" else cached=" (cached) " GSSAPI_CFLAGS="$mu_cv_lib_gssapi_cflags" GSSAPI_LIBS="$mu_cv_lib_gssapi_libs" GSSAPI_IMPL="$mu_cv_lib_gssapi_impl" fi AC_MSG_CHECKING(GSSAPI implementation) AC_MSG_RESULT(${cached}$GSSAPI_IMPL) ])