aboutsummaryrefslogtreecommitdiff
path: root/modules/FindGSSAPI.cmake
blob: a89d6181ce79a25c8a059f7723da54feab5bdf8c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# - 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

IF (DEFINED CACHED_GSSAPI)

  # in cache already
  IF ("${CACHED_GSSAPI}" STREQUAL "YES")
    SET(GSSAPI_FOUND TRUE)
  ENDIF ("${CACHED_GSSAPI}" STREQUAL "YES")

ELSE (DEFINED CACHED_GSSAPI)

  FIND_PROGRAM(KRB5_CONFIG NAMES krb5-config PATHS
     /usr/bin
     /usr/local/bin
     /opt/local/bin
  )
  
  #reset vars
  set(GSSAPI_INCS)
  set(GSSAPI_LIBS)
  set(GSSAPI_FLAVOR)
  
  IF(KRB5_CONFIG)
  
    EXEC_PROGRAM(${KRB5_CONFIG} ARGS --libs gssapi RETURN_VALUE _return_VALUE OUTPUT_VARIABLE GSSAPI_LIBS)
  
    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(GSSAPI_LIBS) # GSSAPI_INCS can be also empty, so don't rely on that
      SET(CACHED_GSSAPI "YES")
      SET(GSSAPI_FOUND TRUE)
      message(STATUS "Found GSSAPI: ${GSSAPI_LIBS}")

      set(GSSAPI_INCS ${GSSAPI_INCS} CACHE STRING "The GSSAPI include directory" )
      set(GSSAPI_LIBS ${GSSAPI_LIBS} CACHE STRING "The libraries needed to use GSSAPI" )
      set(GSSAPI_FLAVOR ${GSSAPI_FLAVOR} CACHE STRING "The type of gss api, MIT or HEIMDAL")

      MARK_AS_ADVANCED(GSSAPI_INCS GSSAPI_LIBS GSSAPI_FLAVOR)

    ELSE(GSSAPI_LIBS)
      SET(CACHED_GSSAPI "NO")
    ENDIF(GSSAPI_LIBS)
  
  ELSE(KRB5_CONFIG)

      SET(CACHED_GSSAPI "NO")  

  ENDIF(KRB5_CONFIG)
  
  set(CACHED_GSSAPI ${CACHED_GSSAPI} CACHE INTERNAL "If gssapi (krb5) was checked")

ENDIF (DEFINED CACHED_GSSAPI)