Mac bustage fix. Bug 299305, Mac GSSAPI fixes following bug 295109. a=#developers

This commit is contained in:
mark%moxienet.com 2005-07-01 05:01:28 +00:00
parent ed977a6937
commit f0daba2e6d
4 changed files with 37 additions and 12 deletions

View File

@ -499,7 +499,7 @@ MOZ_PSM=@MOZ_PSM@
# Gssapi (krb5) libraries and headers for the Negotiate auth method
GSSAPI_INCLUDES = @GSSAPI_INCLUDES@
GSSAPI_LIBS = @GSSAPI_LIBS@
USE_GSSAPI = @USE_GSSAPI@
# for Qt build
MOC=@MOC@

View File

@ -4646,14 +4646,13 @@ if test -n "$USE_GSSAPI" && test `echo "$MOZ_EXTENSIONS" | grep -c negotiateauth
dnl Try to set GSSAPI_INCLUDES ...
dnl
AC_CHECK_HEADERS(gssapi.h,
[GSSAPI_INCLUDES="$_GSSAPI_INC"])
if test -z "$GSSAPI_INCLUDES" ; then
[GSSAPI_INCLUDES="$_GSSAPI_INC" _GSSAPI_FOUND=1])
if test -z "$_GSSAPI_FOUND" ; then
AC_CHECK_HEADERS(gssapi/gssapi.h,
[GSSAPI_INCLUDES="$_GSSAPI_INC"])
[GSSAPI_INCLUDES="$_GSSAPI_INC" _GSSAPI_FOUND=1])
fi
CPPFLAGS="$_SAVE_CPPFLAGS $GSSAPI_INCLUDES"
if test -z "$GSSAPI_INCLUDES" ; then
if test -z "$_GSSAPI_FOUND" ; then
if test -n "$GSSAPI_DIR" ; then
AC_PATH_PROG(KRB5CONFIG, krb5-config, :, [$GSSAPI_DIR/bin:$PATH:/usr/bin])
else
@ -4661,8 +4660,7 @@ if test -n "$USE_GSSAPI" && test `echo "$MOZ_EXTENSIONS" | grep -c negotiateauth
fi
if test -n "$KRB5CONFIG" -a -x "$KRB5CONFIG" ; then
GSSAPI_INCLUDES=`$KRB5CONFIG --cflags gssapi 2>/dev/null`
CPPFLAGS="$_SAVE_CPPFLAGS $GSSAPI_INCLUDES"
_GSSAPI_FOUND=1
fi
fi
@ -4670,9 +4668,10 @@ if test -n "$USE_GSSAPI" && test `echo "$MOZ_EXTENSIONS" | grep -c negotiateauth
dnl If GSSAPI libs were not found, remove extension from the list to be
dnl built.
dnl
if test -z "$GSSAPI_INCLUDES" ; then
if test -z "$_GSSAPI_FOUND" ; then
AC_MSG_WARN([Cannot build negotiateauth without GSSAPI. Removing negotatiate from MOZ_EXTENSIONS.])
MOZ_EXTENSIONS=`echo $MOZ_EXTENSIONS | sed -e 's|negotiateauth||'`
USE_GSSAPI=
fi
LIBS="$_SAVE_LIBS"
@ -4680,8 +4679,8 @@ if test -n "$USE_GSSAPI" && test `echo "$MOZ_EXTENSIONS" | grep -c negotiateauth
CPPFLAGS="$_SAVE_CPPFLAGS"
AC_SUBST(GSSAPI_INCLUDES)
AC_SUBST(GSSAPI_LIBS)
fi
AC_SUBST(USE_GSSAPI)
dnl Remove dupes

View File

@ -71,7 +71,7 @@ EXTRA_DSO_LDOPTS = \
$(MOZ_COMPONENT_LIBS) \
$(NULL)
ifneq (,$(GSSAPI_INCLUDES))
ifeq (1,$(USE_GSSAPI))
LOCAL_INCLUDES = -DUSE_GSSAPI $(GSSAPI_INCLUDES)
CPPSRCS += nsNegotiateAuthGSSAPI.cpp
endif

View File

@ -23,6 +23,7 @@
* Wyllys Ingersoll <wyllys.ingersoll@sun.com>
* Christopher Nebergall <cneberg@sandia.gov>
* Darin Fisher <darin@meer.net>
* Mark Mentovai <mark@moxienet.com>
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
@ -114,6 +115,15 @@ typedef OM_uint32 (*gss_release_name_type)(
OM_uint32 *,
gss_name_t *);
#ifdef XP_MACOSX
typedef KLStatus (*KLCacheHasValidTickets_type)(
KLPrincipal,
KLKerberosVersion,
KLBoolean *,
KLPrincipal *,
char **);
#endif
//-----------------------------------------------------------------------------
// We define GSS_C_NT_HOSTBASED_SERVICE explicitly since it may be referenced
@ -154,6 +164,12 @@ static PRBool gssFunInit = PR_FALSE;
#define gss_release_buffer_ptr ((gss_release_buffer_type)*gssFunPtr[6])
#define gss_release_name_ptr ((gss_release_name_type)*gssFunPtr[7])
#ifdef XP_MACOSX
PRFuncPtr *KLCacheHasValidTicketsPtr;
#define KLCacheHasValidTickets_ptr \
((KLCacheHasValidTickets_type)*KLCacheHasValidTicketsPtr)
#endif
static nsresult
gssInit()
{
@ -202,6 +218,15 @@ gssInit()
return NS_ERROR_FAILURE;
}
}
#ifdef XP_MACOSX
if (gssNativeImp &&
!((PRFuncPtr)KLCacheHasValidTickets_ptr =
PR_FindFunctionSymbol(lib, "KLCacheHasValidTickets"))) {
LOG(("Fail to load KLCacheHasValidTickets function from gssapi library\n"));
PR_UnloadLibrary(lib);
return NS_ERROR_FAILURE;
}
#endif
gssFunInit = PR_TRUE;
return NS_OK;
@ -395,7 +420,8 @@ nsNegotiateAuth::GetNextToken(const void *inToken,
KLBoolean found;
if (gssNativeImp &&
(KLCacheHasValidTickets(NULL, kerberosVersion_V5, &found, NULL, NULL)
(KLCacheHasValidTickets_ptr(NULL, kerberosVersion_V5, &found, NULL,
NULL)
!= klNoErr || !found))
{
major_status = GSS_S_FAILURE;