While toying around I noticed the GSSAPI mechanism doesn't work in dovecot.

I think the BUILTIN_GSSAPI define is missing prohibiting registration of the 
GSSAPI mechansim.
see: src/auth/mech-gssapi.c, src/auth/mech.c

This replacement of the 'patch-configure_in' file made it possible for me to 
authenticate using GSSAPI. It just adds the line:
AC_DEFINE(BUILTIN_GSSAPI,, GSSAPI support is built in)
(since I was just playing with dovecot, consider it (very) lightly tested)

--- configure.in.orig   Wed Feb  4 00:41:16 2009
+++ configure.in        Sun Jul  5 18:15:05 2009
@@ -13,6 +13,7 @@
 AC_HEADER_STDC
 AC_C_INLINE
 AC_PROG_LIBTOOL
+LIBS="${LIBS} -liconv"
 AM_ICONV
 
 AC_CHECK_HEADERS(strings.h stdint.h unistd.h dirent.h malloc.h inttypes.h \
@@ -1797,74 +1798,16 @@
 
 have_gssapi=no
 if test $want_gssapi != no; then
-       AC_CHECK_PROG(KRB5CONFIG, krb5-config, YES, NO)
-       if test $KRB5CONFIG = YES; then
-               if ! krb5-config --version gssapi 2>/dev/null > /dev/null; then
-                 # krb5-config doesn't support gssapi.
-                 KRB5_LIBS="`krb5-config --libs`"
-                 KRB5_CFLAGS=`krb5-config --cflags`
-                 AC_CHECK_LIB(gss, gss_acquire_cred, [
-                   # Solaris
-                   KRB5_LIBS="$KRB5_LIBS -lgss"
-                 ], [
-                   # failed
-                   KRB5_LIBS=
-                 ], $KRB5_LIBS)
-               else
-                 KRB5_LIBS=`krb5-config --libs gssapi`
-                 KRB5_CFLAGS=`krb5-config --cflags gssapi`
-               fi
-               if test "$KRB5_LIBS" != ""; then
-                       AC_SUBST(KRB5_LIBS)
-                       AC_SUBST(KRB5_CFLAGS)
-                       
-                       # Although krb5-config exists, all systems still don't
-                       # have gssapi.h
-                       old_CFLAGS=$CFLAGS
-                       CFLAGS="$CFLAGS $KRB5_CFLAGS"
-                       AC_CHECK_HEADER([gssapi/gssapi.h], [
-                               AC_DEFINE(HAVE_GSSAPI_GSSAPI_H,, GSSAPI headers 
in gssapi/gssapi.h)
-                               have_gssapi=yes
-                       ])
-                       AC_CHECK_HEADER([gssapi.h], [
-                               AC_DEFINE(HAVE_GSSAPI_H,, GSSAPI headers in 
gssapi.h)
-                               have_gssapi=yes
-                       ])
-                       if test $have_gssapi = yes; then
-                               AC_DEFINE(HAVE_GSSAPI,, Build with GSSAPI 
support)
-                               AC_CHECK_HEADERS(gssapi/gssapi_ext.h 
gssapi_krb5.h gssapi/gssapi_krb5.h)
-                               AC_CHECK_LIB(gss, __gss_userok, [
-                                       AC_DEFINE(HAVE___GSS_USEROK,,
-                                               Define if you have 
__gss_userok())
-                                       KRB5_LIBS="$KRB5_LIBS -lgss"
-                               ],, $KRB5_LIBS)
-
-                               # MIT has a #define for Heimdal 
acceptor_identity, but it's way too
-                               # difficult to test for it..
-                               old_LIBS=$LIBS
-                               LIBS="$LIBS $KRB5_LIBS"
-                               
AC_CHECK_FUNCS(gsskrb5_register_acceptor_identity 
krb5_gss_register_acceptor_identity)
-                               LIBS=$old_LIBS
-
-                               if test x$want_gssapi_plugin != xyes; then
-                                 AUTH_LIBS="$AUTH_LIBS $KRB5_LIBS"
-                                 AUTH_CFLAGS="$AUTH_CFLAGS $KRB5_CFLAGS"
-                                 AC_DEFINE(BUILTIN_GSSAPI,, GSSAPI support is 
built in)
-                               else
-                                 have_gssapi_plugin=yes
-                               fi
-                       else
-                         if test $want_gssapi = yes; then
-                           AC_ERROR([Can't build with GSSAPI support: gssapi.h 
not found])
-                         fi
-                       fi
-                       CFLAGS=$old_CFLAGS
-               fi
-       else
-         if test $want_gssapi = yes; then
-           AC_ERROR([Can't build with GSSAPI support: krb5-config not found])
-         fi
-       fi
+       # no krb5-config on OpenBSD, bring in the necessary libs and includes
+       # manually
+       AC_CHECK_HEADER([kerberosV/gssapi.h], [
+               AC_DEFINE(HAVE_GSSAPI,, Build with GSSAPI support)
+               AC_DEFINE(HAVE_GSSAPI_H,, Build with GSSAPI support)
+               AC_DEFINE(HAVE_GSSKRB5_REGISTER_ACCEPTOR_IDENTITY,, Have the 
gsskrb5_register_acceptor_identity function)
+               AC_DEFINE(BUILTIN_GSSAPI,, GSSAPI support is built in)
+               have_gssapi=yes
+       ])
+       AUTH_LIBS="$LIBS -lkrb5 -lgssapi -lcrypto"
 fi
 AM_CONDITIONAL(GSSAPI_PLUGIN, test "$have_gssapi_plugin" = "yes")
 

Reply via email to