Skip to content

Commit 43a8b3c

Browse files
isurufbluca
authored andcommitted
Add gssapi support to cmake
1 parent aa885c5 commit 43a8b3c

File tree

7 files changed

+91
-0
lines changed

7 files changed

+91
-0
lines changed

.github/workflows/CI.yaml

+7
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,13 @@ jobs:
5555
DRAFT: enabled
5656
PACKAGES: cmake libsodium-dev
5757
TLS: enabled
58+
- os: ubuntu-latest
59+
BUILD_TYPE: cmake
60+
CURVE: libsodium
61+
DRAFT: enabled
62+
GSSAPI: enabled
63+
PACKAGES: cmake libsodium-dev libkrb5-dev
64+
TLS: enabled
5865
- os: ubuntu-latest
5966
BUILD_TYPE: cmake
6067
DRAFT: enabled

CMakeLists.txt

+26
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,16 @@ else() # ENABLE_CURVE
295295
message(STATUS "CURVE security is disabled")
296296
endif()
297297

298+
option(WITH_GSSAPI_KRB5 "Use libgssapi_krb5" OFF)
299+
if(WITH_GSSAPI_KRB5)
300+
find_package("gssapi_krb5" REQUIRED)
301+
message(STATUS "Using GSSAPI_KRB5")
302+
include_directories(${GSSAPI_KRB5_INCLUDE_DIRS})
303+
link_directories(${GSSAPI_KRB5_LIBRARY_DIRS})
304+
set(HAVE_LIBGSSAPI_KRB5 1)
305+
endif()
306+
307+
298308
set(SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
299309

300310
option(WITH_MILITANT "Enable militant assertions" OFF)
@@ -1218,6 +1228,10 @@ if(ZMQ_HAVE_TIPC)
12181228
list(APPEND cxx-sources tipc_address.cpp tipc_connecter.cpp tipc_listener.cpp)
12191229
endif()
12201230

1231+
if(WITH_GSSAPI_KRB5)
1232+
list(APPEND cxx-sources gssapi_client.cpp gssapi_mechanism_base.cpp gssapi_server.cpp)
1233+
endif()
1234+
12211235
# -----------------------------------------------------------------------------
12221236
# source generators
12231237

@@ -1491,6 +1505,10 @@ if(BUILD_SHARED)
14911505
endif()
14921506
endif()
14931507

1508+
if(WITH_GSSAPI_KRB5)
1509+
target_link_libraries(libzmq ${GSSAPI_KRB5_LIBRARIES})
1510+
endif()
1511+
14941512
if(HAVE_WS2_32)
14951513
target_link_libraries(libzmq ws2_32)
14961514
elseif(HAVE_WS2)
@@ -1541,6 +1559,10 @@ if(BUILD_STATIC)
15411559
endif()
15421560
endif()
15431561

1562+
if(WITH_GSSAPI_KRB5)
1563+
target_link_libraries(libzmq-static ${GSSAPI_KRB5_LIBRARIES})
1564+
endif()
1565+
15441566
if(HAVE_WS2_32)
15451567
target_link_libraries(libzmq-static ws2_32)
15461568
elseif(HAVE_WS2)
@@ -1610,6 +1632,10 @@ if(BUILD_SHARED)
16101632
target_link_libraries(${perf-tool} ${SODIUM_LIBRARIES})
16111633
endif()
16121634

1635+
if(WITH_GSSAPI_KRB5)
1636+
target_link_libraries(${perf-tool} ${GSSAPI_KRB5_LIBRARIES})
1637+
endif()
1638+
16131639
if(ZMQ_BUILD_FRAMEWORK)
16141640
# Copy perf-tools binaries into Framework
16151641
add_custom_command(
+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
if (NOT MSVC)
2+
find_package(PkgConfig REQUIRED)
3+
pkg_check_modules(PC_GSSAPI_KRB5 "libgssapi_krb5")
4+
if (PC_GSSAPI_KRB5_FOUND)
5+
set(pkg_config_names_private "${pkg_config_names_private} libgssapi_krb5")
6+
endif()
7+
if (NOT PC_GSSAPI_KRB5_FOUND)
8+
pkg_check_modules(PC_GSSAPI_KRB5 "gssapi_krb5")
9+
if (PC_GSSAPI_KRB5_FOUND)
10+
set(pkg_config_names_private "${pkg_config_names_private} gssapi_krb5")
11+
endif()
12+
endif (NOT PC_GSSAPI_KRB5_FOUND)
13+
if (PC_GSSAPI_KRB5_FOUND)
14+
set(GSSAPI_KRB5_INCLUDE_HINTS ${PC_GSSAPI_KRB5_INCLUDE_DIRS} ${PC_GSSAPI_KRB5_INCLUDE_DIRS}/*)
15+
set(GSSAPI_KRB5_LIBRARY_HINTS ${PC_GSSAPI_KRB5_LIBRARY_DIRS} ${PC_GSSAPI_KRB5_LIBRARY_DIRS}/*)
16+
else()
17+
set(pkg_config_libs_private "${pkg_config_libs_private} -lgssapi_krb5")
18+
endif()
19+
endif (NOT MSVC)
20+
21+
# some libraries install the headers is a subdirectory of the include dir
22+
# returned by pkg-config, so use a wildcard match to improve chances of finding
23+
# headers and libraries.
24+
find_path(
25+
GSSAPI_KRB5_INCLUDE_DIRS
26+
NAMES gssapi/gssapi_krb5.h
27+
HINTS ${GSSAPI_KRB5_INCLUDE_HINTS}
28+
)
29+
30+
set (GSSAPI_NAMES libgssapi_krb5 gssapi_krb5)
31+
if (${CMAKE_SIZEOF_VOID_P} STREQUAL 8)
32+
set (GSSAPI_NAMES ${GSSAPI_NAMES} gssapi64)
33+
elseif (${CMAKE_SIZEOF_VOID_P} STREQUAL 4)
34+
set (GSSAPI_NAMES ${GSSAPI_NAMES} gssapi32)
35+
endif()
36+
37+
find_library(
38+
GSSAPI_KRB5_LIBRARIES
39+
NAMES ${GSSAPI_NAMES}
40+
HINTS ${GSSAPI_KRB5_LIBRARY_HINTS}
41+
)
42+
43+
include(FindPackageHandleStandardArgs)
44+
find_package_handle_standard_args(gssapi_krb5 DEFAULT_MSG GSSAPI_KRB5_LIBRARIES GSSAPI_KRB5_INCLUDE_DIRS)
45+
mark_as_advanced(GSSAPI_KRB5_FOUND GSSAPI_KRB5_LIBRARIES GSSAPI_KRB5_INCLUDE_DIRS)

builds/cmake/ci_build.sh

+4
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ elif [ $CURVE == "libsodium" ]; then
4949
fi
5050
fi
5151

52+
if [ "$GSSAPI" == "enabled" ]; then
53+
CMAKE_OPTS+=("-DWITH_GSSAPI_KRB5=ON")
54+
fi
55+
5256
CMAKE_PREFIXES=()
5357
MAKE_PREFIXES=()
5458
PARALLEL_MAKE_OPT="-j5"

builds/cmake/platform.hpp.in

+1
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@
7777
#cmakedefine ZMQ_HAVE_CURVE
7878
#cmakedefine ZMQ_USE_LIBSODIUM
7979
#cmakedefine SODIUM_STATIC
80+
#cmakedefine HAVE_LIBGSSAPI_KRB5
8081
#cmakedefine ZMQ_USE_GNUTLS
8182
#cmakedefine ZMQ_USE_RADIX_TREE
8283
#cmakedefine HAVE_IF_NAMETOINDEX

tests/CMakeLists.txt

+4
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,10 @@ foreach(test ${tests})
288288
target_link_libraries(${test} ${RT_LIBRARY})
289289
endif()
290290

291+
if (WITH_GSSAPI_KRB5)
292+
target_link_libraries(${static} ${GSSAPI_KRB5_LIBRARIES})
293+
endif()
294+
291295
if(CMAKE_SYSTEM_NAME MATCHES "QNX")
292296
target_link_libraries(${test} socket)
293297
target_link_libraries(${test} m)

unittests/CMakeLists.txt

+4
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ foreach(test ${unittests})
4343
target_link_libraries(${test} m)
4444
endif()
4545

46+
if (WITH_GSSAPI_KRB5)
47+
target_link_libraries(${static} ${GSSAPI_KRB5_LIBRARIES})
48+
endif()
49+
4650
if(WIN32)
4751
add_test(
4852
NAME ${test}

0 commit comments

Comments
 (0)