From 840575d1dc2f74f3d7c76833ba5cf3b7cedfca24 Mon Sep 17 00:00:00 2001 From: Markus Makela Date: Thu, 13 Oct 2016 16:28:57 +0300 Subject: [PATCH] MXS-862: Add FindGSSAPI.cmake and missing includes Added FindGSSAPI.cmake which allows the modules to be built only if the libraries are found. The log manager header was not included by the GSSAPI modules. --- CMakeLists.txt | 1 + cmake/FindGSSAPI.cmake | 98 +++++++++++++++++++ server/modules/authenticator/CMakeLists.txt | 20 ++-- server/modules/authenticator/gssapi_auth.c | 1 + .../authenticator/gssapi_auth_common.c | 1 + .../authenticator/gssapi_backend_auth.c | 1 + 6 files changed, 114 insertions(+), 8 deletions(-) create mode 100644 cmake/FindGSSAPI.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 745459863..c8f5a14a4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,6 +42,7 @@ find_package(CURL) find_package(RabbitMQ) find_package(LibUUID) find_package(Avro) +find_package(GSSAPI) # Find or build PCRE2 # Read BuildPCRE2 for details about how to add pcre2 as a dependency to a target diff --git a/cmake/FindGSSAPI.cmake b/cmake/FindGSSAPI.cmake new file mode 100644 index 000000000..d4323f839 --- /dev/null +++ b/cmake/FindGSSAPI.cmake @@ -0,0 +1,98 @@ +# - Try to detect the GSSAPI support +# Once done this will define +# +# GSSAPI_FOUND - system supports GSSAPI +# GSSAPI_INCS - the GSSAPI include directory +# GSSAPI_LIBS - the libraries needed to use GSSAPI +# GSSAPI_FLAVOR - the type of API - MIT or HEIMDAL + +# Copyright (c) 2006, Pino Toscano, +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +if(GSSAPI_LIBS AND GSSAPI_FLAVOR) + + # in cache already + set(GSSAPI_FOUND TRUE) + +else(GSSAPI_LIBS AND GSSAPI_FLAVOR) + + find_program(KRB5_CONFIG NAMES krb5-config heimdal-krb5-config PATHS + /opt/local/bin + ONLY_CMAKE_FIND_ROOT_PATH # this is required when cross compiling with cmake 2.6 and ignored with cmake 2.4, Alex + ) + mark_as_advanced(KRB5_CONFIG) + + #reset vars + set(GSSAPI_INCS) + set(GSSAPI_LIBS) + set(GSSAPI_FLAVOR) + + if(KRB5_CONFIG) + + set(HAVE_KRB5_GSSAPI TRUE) + exec_program(${KRB5_CONFIG} ARGS --libs gssapi RETURN_VALUE _return_VALUE OUTPUT_VARIABLE GSSAPI_LIBS) + if(_return_VALUE) + message(STATUS "GSSAPI configure check failed.") + set(HAVE_KRB5_GSSAPI FALSE) + endif(_return_VALUE) + + exec_program(${KRB5_CONFIG} ARGS --cflags gssapi RETURN_VALUE _return_VALUE OUTPUT_VARIABLE GSSAPI_INCS) + string(REGEX REPLACE "(\r?\n)+$" "" GSSAPI_INCS "${GSSAPI_INCS}") + string(REGEX REPLACE " *-I" ";" GSSAPI_INCS "${GSSAPI_INCS}") + + exec_program(${KRB5_CONFIG} ARGS --vendor RETURN_VALUE _return_VALUE OUTPUT_VARIABLE gssapi_flavor_tmp) + set(GSSAPI_FLAVOR_MIT) + if(gssapi_flavor_tmp MATCHES ".*Massachusetts.*") + set(GSSAPI_FLAVOR "MIT") + else(gssapi_flavor_tmp MATCHES ".*Massachusetts.*") + set(GSSAPI_FLAVOR "HEIMDAL") + endif(gssapi_flavor_tmp MATCHES ".*Massachusetts.*") + + if(NOT HAVE_KRB5_GSSAPI) + if (gssapi_flavor_tmp MATCHES "Sun Microsystems.*") + message(STATUS "Solaris Kerberos does not have GSSAPI; this is normal.") + set(GSSAPI_LIBS) + set(GSSAPI_INCS) + else(gssapi_flavor_tmp MATCHES "Sun Microsystems.*") + message(WARNING "${KRB5_CONFIG} failed unexpectedly.") + endif(gssapi_flavor_tmp MATCHES "Sun Microsystems.*") + endif(NOT HAVE_KRB5_GSSAPI) + + if(GSSAPI_LIBS) # GSSAPI_INCS can be also empty, so don't rely on that + set(GSSAPI_FOUND TRUE CACHE STRING "") + message(STATUS "Found GSSAPI: ${GSSAPI_LIBS}") + + set(GSSAPI_INCS ${GSSAPI_INCS} CACHE STRING "") + set(GSSAPI_LIBS ${GSSAPI_LIBS} CACHE STRING "") + set(GSSAPI_FLAVOR ${GSSAPI_FLAVOR} CACHE STRING "") + + mark_as_advanced(GSSAPI_INCS GSSAPI_LIBS GSSAPI_FLAVOR) + + endif(GSSAPI_LIBS) + + endif(KRB5_CONFIG) + +endif(GSSAPI_LIBS AND GSSAPI_FLAVOR) diff --git a/server/modules/authenticator/CMakeLists.txt b/server/modules/authenticator/CMakeLists.txt index c8928b726..a7f6da3e1 100644 --- a/server/modules/authenticator/CMakeLists.txt +++ b/server/modules/authenticator/CMakeLists.txt @@ -8,15 +8,19 @@ target_link_libraries(MySQLBackendAuth maxscale-common MySQLCommon) set_target_properties(MySQLBackendAuth PROPERTIES VERSION "1.0.0") install_module(MySQLBackendAuth core) -add_library(GSSAPIAuth SHARED gssapi_auth.c gssapi_auth_common.c) -target_link_libraries(GSSAPIAuth maxscale-common gssapi_krb5 MySQLCommon) -set_target_properties(GSSAPIAuth PROPERTIES VERSION "1.0.0") -install_module(GSSAPIAuth core) +if (GSSAPI_FOUND) + include_directories(${GSSAPI_INCS}) -add_library(GSSAPIBackendAuth SHARED gssapi_backend_auth.c gssapi_auth_common.c) -target_link_libraries(GSSAPIBackendAuth maxscale-common gssapi_krb5 MySQLCommon) -set_target_properties(GSSAPIBackendAuth PROPERTIES VERSION "1.0.0") -install_module(GSSAPIBackendAuth core) + add_library(GSSAPIAuth SHARED gssapi_auth.c gssapi_auth_common.c) + target_link_libraries(GSSAPIAuth maxscale-common ${GSSAPI_LIBS} MySQLCommon) + set_target_properties(GSSAPIAuth PROPERTIES VERSION "1.0.0") + install_module(GSSAPIAuth core) + + add_library(GSSAPIBackendAuth SHARED gssapi_backend_auth.c gssapi_auth_common.c) + target_link_libraries(GSSAPIBackendAuth maxscale-common ${GSSAPI_LIBS} MySQLCommon) + set_target_properties(GSSAPIBackendAuth PROPERTIES VERSION "1.0.0") + install_module(GSSAPIBackendAuth core) +endif() add_library(NullAuthAllow SHARED null_auth_allow.c) target_link_libraries(NullAuthAllow maxscale-common) diff --git a/server/modules/authenticator/gssapi_auth.c b/server/modules/authenticator/gssapi_auth.c index 90abc0f33..6b94c1b94 100644 --- a/server/modules/authenticator/gssapi_auth.c +++ b/server/modules/authenticator/gssapi_auth.c @@ -14,6 +14,7 @@ #include #include #include +#include #include #include "gssapi_auth.h" diff --git a/server/modules/authenticator/gssapi_auth_common.c b/server/modules/authenticator/gssapi_auth_common.c index 60815288e..8fa64627a 100644 --- a/server/modules/authenticator/gssapi_auth_common.c +++ b/server/modules/authenticator/gssapi_auth_common.c @@ -13,6 +13,7 @@ #include "gssapi_auth.h" #include +#include void* gssapi_auth_alloc(void *instance) { diff --git a/server/modules/authenticator/gssapi_backend_auth.c b/server/modules/authenticator/gssapi_backend_auth.c index d1b7903bc..cd1a0a6e1 100644 --- a/server/modules/authenticator/gssapi_backend_auth.c +++ b/server/modules/authenticator/gssapi_backend_auth.c @@ -14,6 +14,7 @@ #include #include #include +#include #include #include "gssapi_auth.h"