Skip to content

Commit b81f168

Browse files
dodo040akallabeth
authored andcommitted
initial commit for kerberos support
1 parent ff59cf0 commit b81f168

27 files changed

+3208
-400
lines changed

CMakeLists.txt

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -674,14 +674,14 @@ set(OPENH264_FEATURE_TYPE "OPTIONAL")
674674
set(OPENH264_FEATURE_PURPOSE "codec")
675675
set(OPENH264_FEATURE_DESCRIPTION "use OpenH264 library")
676676

677-
set(KRB5_FEATURE_TYPE "OPTIONAL")
678-
set(KRB5_FEATURE_PURPOSE "auth")
679-
set(KRB5_FEATURE_DESCRIPTION "add kerberos support")
680-
681677
set(GSM_FEATURE_TYPE "OPTIONAL")
682678
set(GSM_FEATURE_PURPOSE "codec")
683679
set(GSM_FEATURE_DESCRIPTION "GSM audio codec library")
684680

681+
set(GSSAPI_FEATURE_TYPE "OPTIONAL")
682+
set(GSSAPI_FEATURE_PURPOSE "auth")
683+
set(GSSAPI_FEATURE_DESCRIPTION "add kerberos support")
684+
685685
if(WIN32)
686686
set(X11_FEATURE_TYPE "DISABLED")
687687
set(WAYLAND_FEATURE_TYPE "DISABLED")
@@ -775,7 +775,22 @@ find_feature(JPEG ${JPEG_FEATURE_TYPE} ${JPEG_FEATURE_PURPOSE} ${JPEG_FEATURE_DE
775775
find_feature(x264 ${X264_FEATURE_TYPE} ${X264_FEATURE_PURPOSE} ${X264_FEATURE_DESCRIPTION})
776776
find_feature(OpenH264 ${OPENH264_FEATURE_TYPE} ${OPENH264_FEATURE_PURPOSE} ${OPENH264_FEATURE_DESCRIPTION})
777777
find_feature(GSM ${GSM_FEATURE_TYPE} ${GSM_FEATURE_PURPOSE} ${GSM_FEATURE_DESCRIPTION})
778-
find_feature(KRB5 ${KRB5_FEATURE_TYPE} ${KRB5_FEATURE_PURPOSE} ${KRB5_FEATURE_DESCRIPTION})
778+
779+
find_feature(GSSAPI ${GSSAPI_FEATURE_TYPE} ${GSSAPI_FEATURE_PURPOSE} ${GSSAPI_FEATURE_DESCRIPTION})
780+
781+
if ( (WITH_GSSAPI) AND (NOT GSS_FOUND))
782+
message(WARNING "-DWITH_GSSAPI=ON is set, but not GSSAPI implementation was found, disabling")
783+
else()
784+
if(GSS_FLAVOUR STREQUAL "MIT")
785+
message(STATUS "MIT Kerberos suppport")
786+
add_definitions("-DWITH_GSSAPI -DWITH_GSSAPI_MIT")
787+
elseif(GSS_FLAVOUR STREQUAL "HEIMDAL")
788+
message(STATUS "Heimdal Kerberos support")
789+
add_definitions("-DWITH_GSSAPI -DWITH_GSSAPI_HEIMDAL")
790+
else()
791+
message(STATUS "Kerberos version not detected")
792+
endif()
793+
endif()
779794

780795
if(TARGET_ARCH MATCHES "x86|x64")
781796
if (NOT APPLE)

ci/cmake-preloads/config-debian-squeeze.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ message("PRELOADING cache")
22
set (WITH_MANPAGES OFF CACHE BOOL "man pages")
33
set (CMAKE_BUILD_TYPE "Debug" CACHE STRING "build type")
44
set (WITH_CUPS OFF CACHE BOOL "CUPS printing")
5-
set (WITH_KRB5 ON CACHE BOOL "Kerberos support")
5+
set (WITH_GSSAPI ON CACHE BOOL "Kerberos support")
66
set (WITH_ALSA OFF CACHE BOOL "alsa audio")
77
set (WITH_FFMPEG OFF CACHE BOOL "ffmepg support")
88
set (WITH_XV OFF CACHE BOOL "xvideo support")

ci/cmake-preloads/config-linux-all.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ set (WITH_PULSE ON CACHE BOOL "pulse")
77
set (WITH_CHANNELS ON CACHE BOOL "channels")
88
set (BUILTIN_CHANNELS ON CACHE BOOL "static channels")
99
set (WITH_CUPS ON CACHE BOOL "cups")
10-
set (WITH_KRB5 ON CACHE BOOL "Kerberos support")
10+
set (WITH_GSSAPI ON CACHE BOOL "Kerberos support")
1111
set (WITH_PCSC ON CACHE BOOL "PCSC")
1212
set (WITH_JPEG ON CACHE BOOL "jepg")
1313
set (WITH_GSTREAMER_0_10 ON CACHE BOOL "gstreamer")

ci/cmake-preloads/config-ubuntu-1204.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ message("PRELOADING cache")
22
set (WITH_MANPAGES OFF CACHE BOOL "man pages")
33
set (CMAKE_BUILD_TYPE "Debug" CACHE STRING "build type")
44
set (WITH_CUPS OFF CACHE BOOL "CUPS printing")
5-
set (WITH_KRB5 ON CACHE BOOL "Kerberos support")
5+
set (WITH_GSSAPI ON CACHE BOOL "Kerberos support")
66
set (WITH_ALSA OFF CACHE BOOL "alsa audio")
77
set (WITH_FFMPEG OFF CACHE BOOL "ffmepg support")
88
set (WITH_XV OFF CACHE BOOL "xvideo support")

cmake/FindGSSAPI.cmake

Lines changed: 288 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,288 @@
1+
# - Try to find the GSS Kerberos library
2+
# Once done this will define
3+
#
4+
# GSS_ROOT_DIR - Set this variable to the root installation of GSS
5+
#
6+
# Read-Only variables:
7+
# GSS_FOUND - system has the Heimdal library
8+
# GSS_FLAVOUR - "MIT" or "Heimdal" if anything found.
9+
# GSS_INCLUDE_DIR - the Heimdal include directory
10+
# GSS_LIBRARIES - The libraries needed to use GSS
11+
# GSS_LINK_DIRECTORIES - Directories to add to linker search path
12+
# GSS_LINKER_FLAGS - Additional linker flags
13+
# GSS_COMPILER_FLAGS - Additional compiler flags
14+
# GSS_VERSION - This is set to version advertised by pkg-config or read from manifest.
15+
# In case the library is found but no version info availabe it'll be set to "unknown"
16+
17+
set(_MIT_MODNAME mit-krb5-gssapi)
18+
set(_HEIMDAL_MODNAME heimdal-gssapi)
19+
20+
include(CheckIncludeFile)
21+
include(CheckIncludeFiles)
22+
include(CheckTypeSize)
23+
24+
set(_GSS_ROOT_HINTS
25+
"${GSS_ROOT_DIR}"
26+
"$ENV{GSS_ROOT_DIR}"
27+
)
28+
29+
# try to find library using system pkg-config if user didn't specify root dir
30+
if(NOT GSS_ROOT_DIR AND NOT "$ENV{GSS_ROOT_DIR}")
31+
if(UNIX)
32+
find_package(PkgConfig QUIET)
33+
pkg_search_module(_GSS_PKG ${_MIT_MODNAME} ${_HEIMDAL_MODNAME})
34+
list(APPEND _GSS_ROOT_HINTS "${_GSS_PKG_PREFIX}")
35+
elseif(WIN32)
36+
list(APPEND _GSS_ROOT_HINTS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MIT\\Kerberos;InstallDir]")
37+
endif()
38+
endif()
39+
40+
if(NOT _GSS_FOUND) #not found by pkg-config. Let's take more traditional approach.
41+
find_file(_GSS_CONFIGURE_SCRIPT
42+
NAMES
43+
"krb5-config"
44+
HINTS
45+
${_GSS_ROOT_HINTS}
46+
PATH_SUFFIXES
47+
bin
48+
NO_CMAKE_PATH
49+
NO_CMAKE_ENVIRONMENT_PATH
50+
)
51+
52+
# if not found in user-supplied directories, maybe system knows better
53+
find_file(_GSS_CONFIGURE_SCRIPT
54+
NAMES
55+
"krb5-config"
56+
PATH_SUFFIXES
57+
bin
58+
)
59+
60+
if(_GSS_CONFIGURE_SCRIPT)
61+
execute_process(
62+
COMMAND ${_GSS_CONFIGURE_SCRIPT} "--cflags" "gssapi"
63+
OUTPUT_VARIABLE _GSS_CFLAGS
64+
RESULT_VARIABLE _GSS_CONFIGURE_FAILED
65+
)
66+
if(NOT _GSS_CONFIGURE_FAILED) # 0 means success
67+
# should also work in an odd case when multiple directories are given
68+
string(STRIP "${_GSS_CFLAGS}" _GSS_CFLAGS)
69+
string(REGEX REPLACE " +-I" ";" _GSS_CFLAGS "${_GSS_CFLAGS}")
70+
string(REGEX REPLACE " +-([^I][^ \\t;]*)" ";-\\1" _GSS_CFLAGS "${_GSS_CFLAGS}")
71+
72+
foreach(_flag ${_GSS_CFLAGS})
73+
if(_flag MATCHES "^-I.*")
74+
string(REGEX REPLACE "^-I" "" _val "${_flag}")
75+
list(APPEND _GSS_INCLUDE_DIR "${_val}")
76+
else()
77+
list(APPEND _GSS_COMPILER_FLAGS "${_flag}")
78+
endif()
79+
endforeach()
80+
endif()
81+
82+
execute_process(
83+
COMMAND ${_GSS_CONFIGURE_SCRIPT} "--libs" "gssapi"
84+
OUTPUT_VARIABLE _GSS_LIB_FLAGS
85+
RESULT_VARIABLE _GSS_CONFIGURE_FAILED
86+
)
87+
if(NOT _GSS_CONFIGURE_FAILED) # 0 means success
88+
# this script gives us libraries and link directories. Blah. We have to deal with it.
89+
# string(STRIP "krb5support ${_GSS_LIB_FLAGS}" _GSS_LIB_FLAGS)
90+
string(STRIP "${_GSS_LIB_FLAGS}" _GSS_LIB_FLAGS)
91+
string(REGEX REPLACE " +-(L|l)" ";-\\1" _GSS_LIB_FLAGS "${_GSS_LIB_FLAGS}")
92+
string(REGEX REPLACE " +-([^Ll][^ \\t;]*)" ";-\\1" _GSS_LIB_FLAGS "${_GSS_LIB_FLAGS}")
93+
94+
foreach(_flag ${_GSS_LIB_FLAGS})
95+
if(_flag MATCHES "^-l.*")
96+
string(REGEX REPLACE "^-l" "" _val "${_flag}")
97+
list(APPEND _GSS_LIBRARIES "${_val}")
98+
elseif(_flag MATCHES "^-L.*")
99+
string(REGEX REPLACE "^-L" "" _val "${_flag}")
100+
list(APPEND _GSS_LINK_DIRECTORIES "${_val}")
101+
else()
102+
list(APPEND _GSS_LINKER_FLAGS "${_flag}")
103+
endif()
104+
endforeach()
105+
endif()
106+
107+
108+
execute_process(
109+
COMMAND ${_GSS_CONFIGURE_SCRIPT} "--version"
110+
OUTPUT_VARIABLE _GSS_VERSION
111+
RESULT_VARIABLE _GSS_CONFIGURE_FAILED
112+
)
113+
114+
# older versions may not have the "--version" parameter. In this case we just don't care.
115+
if(_GSS_CONFIGURE_FAILED)
116+
set(_GSS_VERSION 0)
117+
endif()
118+
119+
120+
execute_process(
121+
COMMAND ${_GSS_CONFIGURE_SCRIPT} "--vendor"
122+
OUTPUT_VARIABLE _GSS_VENDOR
123+
RESULT_VARIABLE _GSS_CONFIGURE_FAILED
124+
)
125+
126+
# older versions may not have the "--vendor" parameter. In this case we just don't care.
127+
if(_GSS_CONFIGURE_FAILED)
128+
set(GSS_FLAVOUR "Heimdal") # most probably, shouldn't really matter
129+
else()
130+
if(_GSS_VENDOR MATCHES ".*H|heimdal.*")
131+
set(GSS_FLAVOUR "Heimdal")
132+
else()
133+
set(GSS_FLAVOUR "MIT")
134+
endif()
135+
endif()
136+
137+
else() # either there is no config script or we are on platform that doesn't provide one (Windows?)
138+
139+
find_path(_GSS_INCLUDE_DIR
140+
NAMES
141+
"gssapi/gssapi.h"
142+
HINTS
143+
${_GSS_ROOT_HINTS}
144+
PATH_SUFFIXES
145+
include
146+
inc
147+
)
148+
149+
if(_GSS_INCLUDE_DIR) #jay, we've found something
150+
set(CMAKE_REQUIRED_INCLUDES "${_GSS_INCLUDE_DIR}")
151+
check_include_files( "gssapi/gssapi_generic.h;gssapi/gssapi_krb5.h" _GSS_HAVE_MIT_HEADERS)
152+
153+
if(_GSS_HAVE_MIT_HEADERS)
154+
set(GSS_FLAVOUR "MIT")
155+
else()
156+
# prevent compiling the header - just check if we can include it
157+
set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -D__ROKEN_H__")
158+
check_include_file( "roken.h" _GSS_HAVE_ROKEN_H)
159+
160+
check_include_file( "heimdal/roken.h" _GSS_HAVE_HEIMDAL_ROKEN_H)
161+
if(_GSS_HAVE_ROKEN_H OR _GSS_HAVE_HEIMDAL_ROKEN_H)
162+
set(GSS_FLAVOUR "Heimdal")
163+
endif()
164+
set(CMAKE_REQUIRED_DEFINITIONS "")
165+
endif()
166+
else()
167+
# I'm not convinced if this is the right way but this is what autotools do at the moment
168+
find_path(_GSS_INCLUDE_DIR
169+
NAMES
170+
"gssapi.h"
171+
HINTS
172+
${_GSS_ROOT_HINTS}
173+
PATH_SUFFIXES
174+
include
175+
inc
176+
)
177+
178+
if(_GSS_INCLUDE_DIR)
179+
set(GSS_FLAVOUR "Heimdal")
180+
endif()
181+
endif()
182+
183+
# if we have headers, check if we can link libraries
184+
if(GSS_FLAVOUR)
185+
set(_GSS_LIBDIR_SUFFIXES "")
186+
set(_GSS_LIBDIR_HINTS ${_GSS_ROOT_HINTS})
187+
get_filename_component(_GSS_CALCULATED_POTENTIAL_ROOT "${_GSS_INCLUDE_DIR}" PATH)
188+
list(APPEND _GSS_LIBDIR_HINTS ${_GSS_CALCULATED_POTENTIAL_ROOT})
189+
190+
if(WIN32)
191+
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
192+
list(APPEND _GSS_LIBDIR_SUFFIXES "lib/AMD64")
193+
if(GSS_FLAVOUR STREQUAL "MIT")
194+
set(_GSS_LIBNAME "gssapi64")
195+
else()
196+
set(_GSS_LIBNAME "libgssapi")
197+
endif()
198+
else()
199+
list(APPEND _GSS_LIBDIR_SUFFIXES "lib/i386")
200+
if(GSS_FLAVOUR STREQUAL "MIT")
201+
set(_GSS_LIBNAME "gssapi32")
202+
else()
203+
set(_GSS_LIBNAME "libgssapi")
204+
endif()
205+
endif()
206+
else()
207+
list(APPEND _GSS_LIBDIR_SUFFIXES "lib;lib64") # those suffixes are not checked for HINTS
208+
if(GSS_FLAVOUR STREQUAL "MIT")
209+
set(_GSS_LIBNAME "gssapi_krb5")
210+
else()
211+
set(_GSS_LIBNAME "gssapi")
212+
endif()
213+
endif()
214+
215+
find_library(_GSS_LIBRARIES
216+
NAMES
217+
${_GSS_LIBNAME}
218+
HINTS
219+
${_GSS_LIBDIR_HINTS}
220+
PATH_SUFFIXES
221+
${_GSS_LIBDIR_SUFFIXES}
222+
)
223+
224+
endif()
225+
226+
endif()
227+
else()
228+
if(_GSS_PKG_${_MIT_MODNAME}_VERSION)
229+
set(GSS_FLAVOUR "MIT")
230+
set(_GSS_VERSION _GSS_PKG_${_MIT_MODNAME}_VERSION)
231+
else()
232+
set(GSS_FLAVOUR "Heimdal")
233+
set(_GSS_VERSION _GSS_PKG_${_MIT_HEIMDAL}_VERSION)
234+
endif()
235+
endif()
236+
237+
set(GSS_INCLUDE_DIR ${_GSS_INCLUDE_DIR})
238+
set(GSS_LIBRARIES ${_GSS_LIBRARIES})
239+
set(GSS_LINK_DIRECTORIES ${_GSS_LINK_DIRECTORIES})
240+
set(GSS_LINKER_FLAGS ${_GSS_LINKER_FLAGS})
241+
set(GSS_COMPILER_FLAGS ${_GSS_COMPILER_FLAGS})
242+
set(GSS_VERSION ${_GSS_VERSION})
243+
244+
if(GSS_FLAVOUR)
245+
246+
if(NOT GSS_VERSION AND GSS_FLAVOUR STREQUAL "Heimdal")
247+
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
248+
set(HEIMDAL_MANIFEST_FILE "Heimdal.Application.amd64.manifest")
249+
else()
250+
set(HEIMDAL_MANIFEST_FILE "Heimdal.Application.x86.manifest")
251+
endif()
252+
253+
if(EXISTS "${GSS_INCLUDE_DIR}/${HEIMDAL_MANIFEST_FILE}")
254+
file(STRINGS "${GSS_INCLUDE_DIR}/${HEIMDAL_MANIFEST_FILE}" heimdal_version_str
255+
REGEX "^.*version=\"[0-9]\\.[^\"]+\".*$")
256+
257+
string(REGEX MATCH "[0-9]\\.[^\"]+"
258+
GSS_VERSION "${heimdal_version_str}")
259+
endif()
260+
261+
if(NOT GSS_VERSION)
262+
set(GSS_VERSION "Heimdal Unknown")
263+
endif()
264+
elseif(NOT GSS_VERSION AND GSS_FLAVOUR STREQUAL "MIT")
265+
get_filename_component(_MIT_VERSION "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MIT\\Kerberos\\SDK\\CurrentVersion;VersionString]" NAME CACHE)
266+
if(WIN32 AND _MIT_VERSION)
267+
set(GSS_VERSION "${_MIT_VERSION}")
268+
else()
269+
set(GSS_VERSION "MIT Unknown")
270+
endif()
271+
endif()
272+
endif()
273+
274+
275+
include(FindPackageHandleStandardArgs)
276+
277+
set(_GSS_REQUIRED_VARS GSS_LIBRARIES GSS_FLAVOUR)
278+
279+
find_package_handle_standard_args(GSS
280+
REQUIRED_VARS
281+
${_GSS_REQUIRED_VARS}
282+
VERSION_VAR
283+
GSS_VERSION
284+
FAIL_MESSAGE
285+
"Could NOT find GSS, try to set the path to GSS root folder in the system variable GSS_ROOT_DIR"
286+
)
287+
288+
mark_as_advanced(GSS_INCLUDE_DIR GSS_LIBRARIES)

cmake/FindKRB5.cmake

Lines changed: 0 additions & 28 deletions
This file was deleted.

config.h.in

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@
6161
/* Plugins */
6262
#cmakedefine BUILTIN_CHANNELS
6363
#cmakedefine WITH_RDPDR
64-
#cmakedefine WITH_KRB5
6564

6665
/* Debug */
6766
#cmakedefine WITH_DEBUG_CERTIFICATE

0 commit comments

Comments
 (0)