]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
4404. [misc] Allow krb5-config to be used when configuring gssapi.
authorMark Andrews <marka@isc.org>
Mon, 4 Jul 2016 05:46:50 +0000 (15:46 +1000)
committerMark Andrews <marka@isc.org>
Mon, 4 Jul 2016 05:46:50 +0000 (15:46 +1000)
                        [RT #42580]

CHANGES
configure
configure.in

diff --git a/CHANGES b/CHANGES
index b4fd50ae272e25172488ec0a5ea18aa85dff39f7..38498e29d34b43dd88b796dcd3e564db47bde289 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+4404.  [misc]          Allow krb5-config to be used when configuring gssapi.
+                       [RT #42580]
+
 4403.  [bug]           Rename variables and arguments that shadow: basename,
                        clone and gai_error.
 
index 59e02d1523585477915acf9ffd8d931b1230b0bf..bc9bb81fbf5fd907c49e0485b2b1b8648d599910 100755 (executable)
--- a/configure
+++ b/configure
@@ -858,6 +858,7 @@ ISC_PLATFORM_KRB5HEADER
 ISC_PLATFORM_GSSAPI_KRB5_HEADER
 ISC_PLATFORM_GSSAPIHEADER
 ISC_PLATFORM_HAVEGSSAPI
+KRB5_CONFIG
 GEOIPLINKOBJS
 GEOIPLINKSRCS
 LWRES_PLATFORM_NEEDSYSSELECTH
@@ -1729,7 +1730,7 @@ Optional Packages:
                         (or the compiler's sysroot if not specified).
   --with-python=PATH      specify path to python interpreter
   --with-geoip=PATH       Build with GeoIP support (yes|no|path)
-  --with-gssapi=PATH      Specify path for system-supplied GSSAPI [default=yes]
+  --with-gssapi=[PATH|[/path/]krb5-config]      Specify path for system-supplied GSSAPI [default=yes]
   --with-randomdev=PATH   Specify path for random device
   --with-locktype=ARG     Specify mutex lock type (adaptive or standard)
   --with-libtool          use GNU libtool
@@ -14073,6 +14074,140 @@ else
 fi
 
 
+# first try using krb5-config, if that does not work then fall back to "yes" method.
+
+case "$use_gssapi" in
+*/krb5-config|krb5-config)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: trying $use_gssapi" >&5
+$as_echo "trying $use_gssapi" >&6; }
+    if test "$use_gssapi" = krb5-config
+    then
+        # Extract the first word of "$use_gssapi", so it can be a program name with args.
+set dummy $use_gssapi; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_KRB5_CONFIG+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $KRB5_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_KRB5_CONFIG="$KRB5_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_KRB5_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+KRB5_CONFIG=$ac_cv_path_KRB5_CONFIG
+if test -n "$KRB5_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $KRB5_CONFIG" >&5
+$as_echo "$KRB5_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    else
+       KRB5_CONFIG="$use_gssapi"
+    fi
+    gssapi_cflags=`$KRB5_CONFIG --cflags gssapi`
+    gssapi_libs=`$KRB5_CONFIG --libs gssapi`
+    saved_cppflags="$CPPFLAGS"
+    CPPFLAGS="$gssapi_cflags $CPPFLAGS"
+    for ac_header in gssapi.h gssapi/gssapi.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+ ISC_PLATFORM_GSSAPIHEADER="#define ISC_PLATFORM_GSSAPIHEADER <$ac_header>"
+fi
+
+done
+
+    if test "$ISC_PLATFORM_GSSAPIHEADER" = ""; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: krb5-config: gssapi.h not found" >&5
+$as_echo "krb5-config: gssapi.h not found" >&6; }
+       CPPFLAGS="$saved_cppflags"
+       use_gssapi="yes"
+    else
+       for ac_header in krb5/krb5.h krb5.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+ ISC_PLATFORM_KRB5HEADER="#define ISC_PLATFORM_KRB5HEADER <$ac_header>"
+fi
+
+done
+
+       if test "$ISC_PLATFORM_KRB5HEADER" = ""; then
+           { $as_echo "$as_me:${as_lineno-$LINENO}: result: krb5-config: krb5.h not found" >&5
+$as_echo "krb5-config: krb5.h not found" >&6; }
+           CPPFLAGS="$saved_cppflags"
+           use_gssapi="yes"
+       else
+           CPPFLAGS="$saved_cppflags"
+           saved_libs="$LIBS"
+           LIBS=$gssapi_libs
+           { $as_echo "$as_me:${as_lineno-$LINENO}: checking krb5-config linking as $LIBS" >&5
+$as_echo_n "checking krb5-config linking as $LIBS... " >&6; }
+           cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+gss_acquire_cred();krb5_init_context()
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gssapi_linked=yes
+else
+  gssapi_linked=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+           case $gssapi_linked in
+               yes) { $as_echo "$as_me:${as_lineno-$LINENO}: result: krb5-config: linked" >&5
+$as_echo "krb5-config: linked" >&6; };;
+               no)  { $as_echo "$as_me:${as_lineno-$LINENO}: result: krb5-config: could not determine proper GSSAPI linkage" >&5
+$as_echo "krb5-config: could not determine proper GSSAPI linkage" >&6; }
+                   use_gssapi="yes"
+                   ;;
+           esac
+           LIBS=$saved_libs
+       fi
+    fi
+    if test "$use_gssapi" = "yes"; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GSSAPI library, non krb5-config method" >&5
+$as_echo_n "checking for GSSAPI library, non krb5-config method... " >&6; }
+    fi
+    ;;
+esac
+
 # gssapi is just the framework, we really require kerberos v5, so
 # look for those headers (the gssapi headers must be there, too)
 # The problem with this implementation is that it doesn't allow
@@ -14117,6 +14252,11 @@ $as_echo "disabled" >&6; }
        yes)
                as_fn_error $? "--with-gssapi must specify a path" "$LINENO" 5
                ;;
+       */krb5-config|krb5-config)
+               USE_GSSAPI='-DGSSAPI'
+               DST_GSSAPI_INC="$gssapi_cflags"
+               DNS_GSSAPI_LIBS="$gssapi_libs"
+               ;;
        *)
                { $as_echo "$as_me:${as_lineno-$LINENO}: result: looking in $use_gssapi/lib" >&5
 $as_echo "looking in $use_gssapi/lib" >&6; }
index debbcd675d2f6ac29a2b450d665795dc8c0203f0..2da78c8f62f3a815b4615ae49fb19f26a444a751 100644 (file)
@@ -842,9 +842,59 @@ AC_SUBST(GEOIPLINKOBJS)
 
 AC_MSG_CHECKING(for GSSAPI library)
 AC_ARG_WITH(gssapi,
-[  --with-gssapi=PATH      Specify path for system-supplied GSSAPI [[default=yes]]],
+[  --with-gssapi=[[PATH|[/path/]krb5-config]]      Specify path for system-supplied GSSAPI [[default=yes]]],
     use_gssapi="$withval", use_gssapi="yes")
 
+# first try using krb5-config, if that does not work then fall back to "yes" method.
+
+case "$use_gssapi" in
+*/krb5-config|krb5-config)
+    AC_MSG_RESULT(trying $use_gssapi)
+    if test "$use_gssapi" = krb5-config
+    then
+       AC_PATH_PROG(KRB5_CONFIG, $use_gssapi)
+    else
+       KRB5_CONFIG="$use_gssapi"
+    fi
+    gssapi_cflags=`$KRB5_CONFIG --cflags gssapi`
+    gssapi_libs=`$KRB5_CONFIG --libs gssapi`
+    saved_cppflags="$CPPFLAGS"
+    CPPFLAGS="$gssapi_cflags $CPPFLAGS"
+    AC_CHECK_HEADERS(gssapi.h gssapi/gssapi.h,
+       [ISC_PLATFORM_GSSAPIHEADER="#define ISC_PLATFORM_GSSAPIHEADER <$ac_header>"])
+    if test "$ISC_PLATFORM_GSSAPIHEADER" = ""; then
+       AC_MSG_RESULT([krb5-config: gssapi.h not found])
+       CPPFLAGS="$saved_cppflags"
+       use_gssapi="yes"
+    else
+       AC_CHECK_HEADERS(krb5/krb5.h krb5.h,
+           [ISC_PLATFORM_KRB5HEADER="#define ISC_PLATFORM_KRB5HEADER <$ac_header>"])
+       if test "$ISC_PLATFORM_KRB5HEADER" = ""; then
+           AC_MSG_RESULT([krb5-config: krb5.h not found])
+           CPPFLAGS="$saved_cppflags"
+           use_gssapi="yes"
+       else
+           CPPFLAGS="$saved_cppflags"
+           saved_libs="$LIBS"
+           LIBS=$gssapi_libs
+           AC_MSG_CHECKING([krb5-config linking as $LIBS])
+           AC_TRY_LINK( , [gss_acquire_cred();krb5_init_context()],
+               gssapi_linked=yes, gssapi_linked=no)
+           case $gssapi_linked in
+               yes) AC_MSG_RESULT([krb5-config: linked]);;
+               no)  AC_MSG_RESULT([krb5-config: could not determine proper GSSAPI linkage])
+                   use_gssapi="yes"
+                   ;;
+           esac
+           LIBS=$saved_libs
+       fi
+    fi
+    if test "$use_gssapi" = "yes"; then
+       AC_MSG_CHECKING([for GSSAPI library, non krb5-config method])
+    fi
+    ;;
+esac
+
 # gssapi is just the framework, we really require kerberos v5, so
 # look for those headers (the gssapi headers must be there, too)
 # The problem with this implementation is that it doesn't allow
@@ -888,6 +938,11 @@ case "$use_gssapi" in
        yes)
                AC_MSG_ERROR([--with-gssapi must specify a path])
                ;;
+       */krb5-config|krb5-config)
+               USE_GSSAPI='-DGSSAPI'
+               DST_GSSAPI_INC="$gssapi_cflags"
+               DNS_GSSAPI_LIBS="$gssapi_libs"
+               ;;
        *)
                AC_MSG_RESULT(looking in $use_gssapi/lib)
                USE_GSSAPI='-DGSSAPI'