[Enhancement] sasl enable kerberos support (#32483)

Signed-off-by: Kevin Xiaohua Cai <caixiaohua@starrocks.com>
Co-authored-by: Your Name <you@example.com>
This commit is contained in:
Kevin Cai 2023-10-18 01:56:53 -05:00 committed by GitHub
parent 4c889fe4c2
commit 025921a93d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 91 additions and 2 deletions

View File

@ -280,6 +280,21 @@ set_target_properties(brpc PROPERTIES IMPORTED_LOCATION ${THIRDPARTY_DIR}/lib64/
add_library(rocksdb STATIC IMPORTED GLOBAL)
set_target_properties(rocksdb PROPERTIES IMPORTED_LOCATION ${THIRDPARTY_DIR}/lib/librocksdb.a)
add_library(krb5support STATIC IMPORTED)
set_target_properties(krb5support PROPERTIES IMPORTED_LOCATION ${THIRDPARTY_DIR}/lib/libkrb5support.a)
add_library(krb5 STATIC IMPORTED)
set_target_properties(krb5 PROPERTIES IMPORTED_LOCATION ${THIRDPARTY_DIR}/lib/libkrb5.a)
add_library(com_err STATIC IMPORTED)
set_target_properties(com_err PROPERTIES IMPORTED_LOCATION ${THIRDPARTY_DIR}/lib/libcom_err.a)
add_library(k5crypto STATIC IMPORTED)
set_target_properties(k5crypto PROPERTIES IMPORTED_LOCATION ${THIRDPARTY_DIR}/lib/libk5crypto.a)
add_library(gssapi_krb5 STATIC IMPORTED)
set_target_properties(gssapi_krb5 PROPERTIES IMPORTED_LOCATION ${THIRDPARTY_DIR}/lib/libgssapi_krb5.a)
add_library(sasl STATIC IMPORTED GLOBAL)
set_target_properties(sasl PROPERTIES IMPORTED_LOCATION ${THIRDPARTY_DIR}/lib/libsasl2.a)
@ -847,6 +862,11 @@ set(STARROCKS_DEPENDENCIES
hyperscan
simdjson
sasl
gssapi_krb5
krb5
krb5support
k5crypto
com_err
librdkafka_cpp
librdkafka
libpulsar
@ -898,6 +918,7 @@ set(STARROCKS_LINK_LIBS ${STARROCKS_LINK_LIBS}
${STARROCKS_DEPENDENCIES}
-static-libstdc++
-static-libgcc
-lresolv
)
# Add sanitize static link flags or jemalloc

View File

@ -566,11 +566,21 @@ build_rocksdb() {
cp -r include/rocksdb $TP_INCLUDE_DIR
}
# kerberos
build_kerberos() {
check_if_source_exist $KRB5_SOURCE
cd $TP_SOURCE_DIR/$KRB5_SOURCE/src
CFLAGS="-fcommon" LDFLAGS="-L$TP_INSTALL_DIR/lib -pthread -ldl" \
./configure --prefix=$TP_INSTALL_DIR --enable-static --disable-shared --with-spake-openssl=$TP_INSTALL_DIR
make -j$PARALLEL
make install
}
# sasl
build_sasl() {
check_if_source_exist $SASL_SOURCE
cd $TP_SOURCE_DIR/$SASL_SOURCE
CFLAGS= ./autogen.sh --prefix=$TP_INSTALL_DIR --enable-gssapi=no --enable-static=yes --enable-shared=no --with-openssl=$TP_INSTALL_DIR
CFLAGS= LDFLAGS="-L$TP_INSTALL_DIR/lib -lresolv -pthread -ldl" ./autogen.sh --prefix=$TP_INSTALL_DIR --enable-gssapi=yes --enable-static --disable-shared --with-openssl=$TP_INSTALL_DIR --with-gss_impl=mit
make -j$PARALLEL
make install
}
@ -1236,6 +1246,7 @@ build_thrift
build_leveldb
build_brpc
build_rocksdb
build_kerberos
build_sasl
build_librdkafka
build_flatbuffers

View File

@ -477,6 +477,15 @@ fi
echo "Finished patching $SERDES_SOURCE"
cd -
# patch sasl2
cd $TP_SOURCE_DIR/$SASL_SOURCE
if [ ! -f $PATCHED_MARK ] && [ $SASL_SOURCE = "cyrus-sasl-2.1.28" ]; then
patch -p1 < $TP_PATCH_DIR/sasl2-add-k5support-link.patch
touch $PATCHED_MARK
fi
echo "Finished patching $SASL_SOURCE"
cd -
# patch arrow
if [[ -d $TP_SOURCE_DIR/$ARROW_SOURCE ]] ; then
cd $TP_SOURCE_DIR/$ARROW_SOURCE

View File

@ -0,0 +1,42 @@
diff --git a/Makefile.am b/Makefile.am
index f7d3b22e..b5a622aa 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -65,7 +65,7 @@ else
INSTALLOSX =
endif
-SUBDIRS=include sasldb common lib plugins utils $(PWC) $(SAM) $(SAD)
+SUBDIRS=include sasldb common lib plugins $(PWC) $(SAM) $(SAD)
EXTRA_DIST=config doc docsrc win32 mac dlcompat-20010505 NTMakefile \
INSTALL.TXT libsasl2.pc.in
diff --git a/m4/sasl2.m4 b/m4/sasl2.m4
index 80371ef0..dd4e12e1 100644
--- a/m4/sasl2.m4
+++ b/m4/sasl2.m4
@@ -116,9 +116,12 @@ if test "$gssapi" != no; then
fi
if test "$gss_impl" = "auto" -o "$gss_impl" = "mit"; then
+ # check for libkrb5support first
+ AC_CHECK_LIB(krb5support,krb5int_getspecific,K5SUP=-lkrb5support K5SUPSTATIC=$gssapi_dir/libkrb5support.a,,${LIB_SOCKET})
+
gss_failed=0
AC_CHECK_LIB(gssapi_krb5,gss_unwrap,gss_impl="mit",gss_failed=1,
- ${GSSAPIBASE_LIBS} -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err ${LIB_SOCKET})
+ ${GSSAPIBASE_LIBS} -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err ${K5SUP} ${LIB_SOCKET})
if test "$gss_impl" != "auto" -a "$gss_failed" = "1"; then
gss_impl="failed"
fi
@@ -170,8 +173,8 @@ if test "$gssapi" != no; then
fi
if test "$gss_impl" = "mit"; then
- GSSAPIBASE_LIBS="$GSSAPIBASE_LIBS -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err"
- GSSAPIBASE_STATIC_LIBS="$GSSAPIBASE_LIBS $gssapi_dir/libgssapi_krb5.a $gssapi_dir/libkrb5.a $gssapi_dir/libk5crypto.a $gssapi_dir/libcom_err.a"
+ GSSAPIBASE_LIBS="$GSSAPIBASE_LIBS -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err ${K5SUP}"
+ GSSAPIBASE_STATIC_LIBS="$GSSAPIBASE_LIBS $gssapi_dir/libgssapi_krb5.a $gssapi_dir/libkrb5.a $gssapi_dir/libk5crypto.a $gssapi_dir/libcom_err.a ${K5SUPSTATIC}"
elif test "$gss_impl" = "heimdal"; then
CPPFLAGS="$CPPFLAGS"
GSSAPIBASE_LIBS="$GSSAPIBASE_LIBS -lgssapi -lkrb5 -lasn1 -lroken ${LIB_CRYPT} ${LIB_DES} -lcom_err"

8
thirdparty/vars.sh vendored
View File

@ -210,6 +210,12 @@ SASL_NAME=cyrus-sasl-2.1.28.tar.gz
SASL_SOURCE=cyrus-sasl-2.1.28
SASL_MD5SUM="7dcf3919b3085a1d09576438171bda91"
# kerberos MIT
KRB5_DOWNLOAD="https://kerberos.org/dist/krb5/1.19/krb5-1.19.4.tar.gz"
KRB5_NAME=krb5-1.19.4.tar.gz
KRB5_SOURCE=krb5-1.19.4
KRB5_MD5SUM="ef76083e58f8c49066180642d7c2814a"
# librdkafka
LIBRDKAFKA_DOWNLOAD="https://github.com/confluentinc/librdkafka/archive/refs/tags/v2.0.2.tar.gz"
LIBRDKAFKA_NAME=librdkafka-2.0.2.tar.gz
@ -405,7 +411,7 @@ LLVM_MD5SUM="dc13938a604f70379d3b38d09031de98"
# all thirdparties which need to be downloaded is set in array TP_ARCHIVES
TP_ARCHIVES="LIBEVENT OPENSSL THRIFT PROTOBUF GFLAGS GLOG GTEST RAPIDJSON SIMDJSON SNAPPY GPERFTOOLS ZLIB LZ4 BZIP CURL \
RE2 BOOST LEVELDB BRPC ROCKSDB SASL LIBRDKAFKA PULSAR FLATBUFFERS ARROW BROTLI ZSTD S2 BITSHUFFLE CROARINGBITMAP \
RE2 BOOST LEVELDB BRPC ROCKSDB KRB5 SASL LIBRDKAFKA PULSAR FLATBUFFERS ARROW BROTLI ZSTD S2 BITSHUFFLE CROARINGBITMAP \
JEMALLOC CCTZ FMT RYU BREAK_PAD HADOOP JDK RAGEL HYPERSCAN MARIADB JINDOSDK AWS_SDK_CPP VPACK OPENTELEMETRY \
BENCHMARK FAST_FLOAT CACHELIB STARCACHE STREAMVBYTE JANSSON AVRO SERDES GCS_CONNECTOR LZO2 DATASKETCHES \
ASYNC_PROFILER FIU LIBDEFLATE LLVM"