Skip to content

Commit aab92e1

Browse files
committed
PHPC-1185: Support GSSAPI via mongodb-sasl config option
While libmongoc's CheckSasl.m4 was able to detect Cyrus SASL 1.x, PHPC's config.m4 always required 2.x so we've not imported that bit. This also prefers native GSSAPI on macOS over Cyrus SASL (PHPC-1142).
1 parent 4574ee2 commit aab92e1

File tree

2 files changed

+96
-55
lines changed

2 files changed

+96
-55
lines changed

config.m4

Lines changed: 3 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -314,9 +314,9 @@ if test "$PHP_MONGODB" != "no"; then
314314
PHP_ADD_SOURCES_X(PHP_EXT_DIR(mongodb)[src/libmongoc/src/mongoc], $PHP_MONGODB_MONGOC_SOURCES, $PHP_MONGODB_MONGOC_CFLAGS, shared_objects_mongodb, yes)
315315

316316
m4_include(scripts/build/autotools/m4/pkg.m4)
317-
318317
m4_include(scripts/build/autotools/CheckHost.m4)
319318
m4_include(scripts/build/autotools/CheckSSL.m4)
319+
m4_include(scripts/build/autotools/CheckSasl.m4)
320320

321321
AC_SUBST(MONGOC_NO_AUTOMATIC_GLOBALS, 1)
322322

@@ -338,58 +338,6 @@ if test "$PHP_MONGODB" != "no"; then
338338
fi
339339
fi
340340

341-
342-
PHP_ARG_WITH([mongodb-sasl],
343-
[for Cyrus SASL support],
344-
[AC_HELP_STRING([--with-mongodb-sasl=@<:@auto/no/DIR@:>@],
345-
[MongoDB: Cyrus SASL support [default=auto]])],
346-
[auto],
347-
[no])
348-
349-
AC_SUBST(MONGOC_ENABLE_SASL, 0)
350-
AC_SUBST(MONGOC_HAVE_SASL_CLIENT_DONE, 0)
351-
AC_SUBST(MONGOC_ENABLE_SASL_CYRUS, 0)
352-
AC_SUBST(MONGOC_ENABLE_SASL_SSPI, 0)
353-
AC_SUBST(MONGOC_ENABLE_SASL_GSSAPI, 0)
354-
355-
if test "$PHP_MONGODB_SASL" != "no"; then
356-
AC_MSG_CHECKING(for SASL)
357-
for i in $PHP_MONGODB_SASL /usr /usr/local; do
358-
if test -f $i/include/sasl/sasl.h; then
359-
MONGODB_SASL_DIR=$i
360-
AC_MSG_RESULT(found in $i)
361-
break
362-
fi
363-
done
364-
365-
if test -z "$MONGODB_SASL_DIR"; then
366-
AC_MSG_RESULT(not found)
367-
if test "$PHP_MONGODB_SASL" != "auto"; then
368-
AC_MSG_ERROR([sasl.h not found!])
369-
fi
370-
else
371-
372-
PHP_CHECK_LIBRARY(sasl2, sasl_version,
373-
[
374-
PHP_ADD_INCLUDE($MONGODB_SASL_DIR/include)
375-
PHP_ADD_LIBRARY_WITH_PATH(sasl2, $MONGODB_SASL_DIR/$PHP_LIBDIR, MONGODB_SHARED_LIBADD)
376-
AC_SUBST(MONGOC_ENABLE_SASL, 1)
377-
AC_SUBST(MONGOC_ENABLE_SASL_CYRUS, 1)
378-
], [
379-
if test "$MONGODB_SASL" != "auto"; then
380-
AC_MSG_ERROR([MongoDB SASL check failed. Please check config.log for more information.])
381-
fi
382-
], [
383-
-L$MONGODB_SASL_DIR/$PHP_LIBDIR
384-
])
385-
386-
PHP_CHECK_LIBRARY(sasl2, sasl_client_done,
387-
[
388-
AC_SUBST(MONGOC_HAVE_SASL_CLIENT_DONE, 1)
389-
])
390-
fi
391-
fi
392-
393341
m4_include(src/libmongoc/build/autotools/m4/ax_prototype.m4)
394342
m4_include(src/libmongoc/build/autotools/CheckCompiler.m4)
395343

@@ -404,11 +352,11 @@ if test "$PHP_MONGODB" != "no"; then
404352
AC_CHECK_FUNCS([shm_open], [SHM_LIB=], [AC_CHECK_LIB([rt], [shm_open], [SHM_LIB=-lrt], [SHM_LIB=])])
405353
MONGODB_SHARED_LIBADD="$MONGODB_SHARED_LIBADD $SHM_LIB"
406354

407-
EXTRA_CFLAGS="$PTHREAD_CFLAGS $SASL_CFLAGS"
355+
EXTRA_CFLAGS="$PTHREAD_CFLAGS"
408356
PHP_SUBST(EXTRA_CFLAGS)
409357
PHP_SUBST(EXTRA_LDFLAGS)
410358

411-
MONGODB_SHARED_LIBADD="$MONGODB_SHARED_LIBADD $PTHREAD_LIBS $SASL_LIBS $SNAPPY_LIBS $ZLIB_LIBS"
359+
MONGODB_SHARED_LIBADD="$MONGODB_SHARED_LIBADD $PTHREAD_LIBS $SNAPPY_LIBS $ZLIB_LIBS"
412360
PHP_SUBST(MONGODB_SHARED_LIBADD)
413361

414362
PHP_NEW_EXTENSION(mongodb, $PHP_MONGODB_SOURCES, $ext_shared,, $PHP_MONGODB_CFLAGS)

scripts/build/autotools/CheckSasl.m4

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
PHP_ARG_WITH([mongodb-sasl],
2+
[whether to enable SASL for Kerberos authentication],
3+
[AS_HELP_STRING([--with-mongodb-sasl=@<:@auto/no/cyrus/gssapi@:>@],
4+
[MongoDB: Enable SASL for Kerberos authentication [default=auto]])],
5+
[auto],
6+
[no])
7+
8+
AS_IF([test "$os_darwin" = "yes" -a \( "$PHP_MONGODB_SASL" = "gssapi" -o "$PHP_MONGODB_SASL" = "auto" \)],[
9+
dnl PHP_FRAMEWORKS is only used for SAPI builds, so use MONGODB_SHARED_LIBADD for shared builds
10+
if test "$ext_shared" = "yes"; then
11+
MONGODB_SHARED_LIBADD="-framework GSS $MONGODB_SHARED_LIBADD"
12+
else
13+
PHP_ADD_FRAMEWORK([GSS])
14+
fi
15+
PHP_MONGODB_SASL="gssapi"
16+
])
17+
18+
AS_IF([test "$PHP_MONGODB_SASL" = "cyrus" -o "$PHP_MONGODB_SASL" = "auto"],[
19+
found_cyrus="no"
20+
21+
PKG_CHECK_MODULES([PHP_MONGODB_SASL],[libsasl2],[
22+
PHP_EVAL_INCLINE([$PHP_MONGODB_SASL_CFLAGS])
23+
PHP_EVAL_LIBLINE([$PHP_MONGODB_SASL_LIBS],[MONGODB_SHARED_LIBADD])
24+
PHP_MONGODB_SASL="cyrus"
25+
found_cyrus="yes"
26+
],[
27+
PHP_CHECK_LIBRARY([sasl2],
28+
[sasl_client_init],
29+
[have_sasl2_lib="yes"],
30+
[have_sasl2_lib="no"])
31+
32+
AC_CHECK_HEADER([sasl/sasl.h],
33+
[have_sasl_headers=yes],
34+
[have_sasl_headers=no])
35+
36+
if test "$have_sasl2_lib" = "yes" -a "$have_sasl_headers" = "yes"; then
37+
PHP_ADD_LIBRARY([sasl2],,[MONGODB_SHARED_LIBADD])
38+
PHP_MONGODB_SASL="cyrus"
39+
found_cyrus="yes"
40+
fi
41+
])
42+
43+
if test "$PHP_MONGODB_SASL" = "cyrus" -a "$found_cyrus" != "yes"; then
44+
AC_MSG_ERROR([Cyrus SASL libraries and development headers could not be found])
45+
fi
46+
])
47+
48+
AS_IF([test "$PHP_MONGODB_SASL" = "gssapi" -o "$PHP_MONGODB_SASL" = "auto"],[
49+
found_gssapi="no"
50+
51+
PKG_CHECK_MODULES([PHP_MONGODB_SASL],[krb5-gssapi],[
52+
PHP_EVAL_INCLINE([$PHP_MONGODB_SASL_CFLAGS])
53+
PHP_EVAL_LIBLINE([$PHP_MONGODB_SASL_LIBS],[MONGODB_SHARED_LIBADD])
54+
PHP_MONGODB_SASL="gssapi"
55+
found_gssapi="yes"
56+
])
57+
58+
if test "$PHP_MONGODB_SASL" = "gssapi" -a "$found_gssapi" != "yes"; then
59+
AC_MSG_ERROR([GSSAPI libraries and development headers could not be found])
60+
fi
61+
])
62+
63+
AS_IF([test "$PHP_MONGODB_SASL" = "auto"],[
64+
PHP_MONGODB_SASL="no"
65+
])
66+
67+
AC_MSG_CHECKING([which SASL library to use])
68+
AC_MSG_RESULT([$PHP_MONGODB_SASL])
69+
70+
dnl Disable Windows SSPI
71+
AC_SUBST(MONGOC_ENABLE_SASL_SSPI, 0)
72+
73+
if test "$PHP_MONGODB_SASL" = "cyrus" -o "$PHP_MONGODB_SASL" = "gssapi"; then
74+
AC_SUBST(MONGOC_ENABLE_SASL, 1)
75+
if test "$PHP_MONGODB_SASL" = "cyrus" ; then
76+
AC_SUBST(MONGOC_ENABLE_SASL_CYRUS, 1)
77+
AC_SUBST(MONGOC_ENABLE_SASL_GSSAPI, 0)
78+
if test "x$have_sasl_client_done" = "xyes"; then
79+
AC_SUBST(MONGOC_HAVE_SASL_CLIENT_DONE, 1)
80+
else
81+
AC_SUBST(MONGOC_HAVE_SASL_CLIENT_DONE, 0)
82+
fi
83+
elif test "$PHP_MONGODB_SASL" = "gssapi"; then
84+
AC_SUBST(MONGOC_ENABLE_SASL_CYRUS, 0)
85+
AC_SUBST(MONGOC_ENABLE_SASL_GSSAPI, 1)
86+
AC_SUBST(MONGOC_HAVE_SASL_CLIENT_DONE, 0)
87+
fi
88+
else
89+
AC_SUBST(MONGOC_ENABLE_SASL, 0)
90+
AC_SUBST(MONGOC_ENABLE_SASL_CYRUS, 0)
91+
AC_SUBST(MONGOC_ENABLE_SASL_GSSAPI, 0)
92+
AC_SUBST(MONGOC_HAVE_SASL_CLIENT_DONE, 0)
93+
fi

0 commit comments

Comments
 (0)