Skip to content

Commit 0298e0a

Browse files
authored
Merge pull request libgit2#5238 from tiennou/feature/macos-gss
macOS GSS Support
2 parents 9333fc2 + 3e86251 commit 0298e0a

File tree

9 files changed

+99
-15
lines changed

9 files changed

+99
-15
lines changed

azure-pipelines.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ jobs:
7979
TMPDIR: $(Agent.TempDirectory)
8080
PKG_CONFIG_PATH: /usr/local/opt/openssl/lib/pkgconfig
8181
CMAKE_GENERATOR: Ninja
82-
CMAKE_OPTIONS: -DREGEX_BACKEND=regcomp_l -DDEPRECATE_HARD=ON -DUSE_LEAK_CHECKER=leaks
82+
CMAKE_OPTIONS: -DREGEX_BACKEND=regcomp_l -DDEPRECATE_HARD=ON -DUSE_LEAK_CHECKER=leaks -DUSE_GSSAPI=ON
8383
SKIP_SSH_TESTS: true
8484

8585
- job: windows_vs_amd64

azure-pipelines/nightly.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ jobs:
7979
TMPDIR: $(Agent.TempDirectory)
8080
PKG_CONFIG_PATH: /usr/local/opt/openssl/lib/pkgconfig
8181
CMAKE_GENERATOR: Ninja
82-
CMAKE_OPTIONS: -DREGEX_BACKEND=regcomp_l -DDEPRECATE_HARD=ON -DUSE_LEAK_CHECKER=leaks
82+
CMAKE_OPTIONS: -DREGEX_BACKEND=regcomp_l -DDEPRECATE_HARD=ON -DUSE_LEAK_CHECKER=leaks -DUSE_GSSAPI=ON
8383
RUN_INVASIVE_TESTS: true
8484
SKIP_SSH_TESTS: true
8585

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Find GSS.framework
2+
# This will define :
3+
#
4+
# GSSFRAMEWORK_FOUND
5+
# GSSFRAMEWORK_INCLUDE_DIR
6+
# GSSFRAMEWORK_LIBRARIES
7+
# GSSFRAMEWORK_LDFLAGS
8+
#
9+
10+
FIND_PATH(GSSFRAMEWORK_INCLUDE_DIR NAMES GSS.h)
11+
FIND_LIBRARY(GSSFRAMEWORK_LIBRARIES NAMES GSS)
12+
IF (GSSFRAMEWORK_INCLUDE_DIR AND GSSFRAMEWORK_LIBRARIES)
13+
IF (NOT CoreFoundation_FIND_QUIETLY)
14+
MESSAGE(STATUS "Found GSS.framework ${GSSFRAMEWORK_LIBRARIES}")
15+
ENDIF()
16+
SET(GSSFRAMEWORK_FOUND TRUE)
17+
SET(GSSFRAMEWORK_LDFLAGS "-framework GSS")
18+
ENDIF ()
19+
20+
IF (GSS_FIND_REQUIRED AND NOT GSSFRAMEWORK_FOUND)
21+
MESSAGE(FATAL_ERROR "CoreFoundation not found")
22+
ENDIF()
23+
24+
MARK_AS_ADVANCED(
25+
GSSFRAMEWORK_INCLUDE_DIR
26+
GSSFRAMEWORK_LIBRARIES
27+
GSSFRAMEWORK_LDFLAGS
28+
)

cmake/Modules/SelectGSSAPI.cmake

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# Select the backend to use
2+
3+
# We try to find any packages our backends might use
4+
5+
FIND_PACKAGE(GSSAPI)
6+
IF (CMAKE_SYSTEM_NAME MATCHES "Darwin")
7+
INCLUDE(FindGSSFramework)
8+
ENDIF()
9+
10+
# Auto-select GSS backend
11+
IF (USE_GSSAPI STREQUAL ON)
12+
IF (GSSFRAMEWORK_FOUND)
13+
SET(GSS_BACKEND "GSS.framework")
14+
ELSEIF(GSSAPI_FOUND)
15+
SET(GSS_BACKEND "gssapi")
16+
ELSE()
17+
MESSAGE(FATAL_ERROR "Unable to autodetect a usable GSS backend."
18+
"Please pass the backend name explicitly (-DUSE_GSS=backend)")
19+
ENDIF()
20+
ELSEIF(USE_GSSAPI)
21+
# Backend was explicitly set
22+
SET(GSS_BACKEND ${USE_GSSAPI})
23+
ELSE()
24+
SET(GSS_BACKEND NO)
25+
ENDIF()
26+
27+
IF(GSS_BACKEND)
28+
# Check that we can find what's required for the selected backend
29+
IF (GSS_BACKEND STREQUAL "GSS.framework")
30+
IF (NOT GSSFRAMEWORK_FOUND)
31+
MESSAGE(FATAL_ERROR "Asked for GSS.framework backend, but it wasn't found")
32+
ENDIF()
33+
34+
LIST(APPEND LIBGIT2_LIBS ${GSSFRAMEWORK_LIBRARIES})
35+
36+
SET(GIT_GSSFRAMEWORK 1)
37+
ADD_FEATURE_INFO(SPNEGO GIT_GSSFRAMEWORK "SPNEGO authentication support (${GSS_BACKEND})")
38+
ELSEIF (GSS_BACKEND STREQUAL "gssapi")
39+
IF (NOT GSSAPI_FOUND)
40+
MESSAGE(FATAL_ERROR "Asked for gssapi GSS backend, but it wasn't found")
41+
ENDIF()
42+
43+
LIST(APPEND LIBGIT2_LIBS ${GSSAPI_LIBRARIES})
44+
45+
SET(GIT_GSSAPI 1)
46+
ADD_FEATURE_INFO(SPNEGO GIT_GSSAPI "SPNEGO authentication support (${GSS_BACKEND})")
47+
ELSE()
48+
MESSAGE(FATAL_ERROR "Asked for backend ${GSS_BACKEND} but it wasn't found")
49+
ENDIF()
50+
ELSE()
51+
SET(GIT_GSSAPI 0)
52+
ADD_FEATURE_INFO(SPNEGO NO "")
53+
ENDIF()

src/CMakeLists.txt

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -233,15 +233,9 @@ IF (USE_NTLMCLIENT)
233233
ENDIF()
234234
ADD_FEATURE_INFO(ntlmclient GIT_NTLM "NTLM authentication support for Unix")
235235

236-
# Optional external dependency: libgssapi
237-
IF (USE_GSSAPI)
238-
FIND_PACKAGE(GSSAPI)
239-
ENDIF()
240-
IF (GSSAPI_FOUND)
241-
SET(GIT_GSSAPI 1)
242-
LIST(APPEND LIBGIT2_LIBS ${GSSAPI_LIBRARIES})
243-
ENDIF()
244-
ADD_FEATURE_INFO(SPNEGO GIT_GSSAPI "SPNEGO authentication support")
236+
# Optional external dependency: GSSAPI
237+
238+
INCLUDE(SelectGSSAPI)
245239

246240
# Optional external dependency: iconv
247241
IF (USE_ICONV)

src/features.h.in

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@
2727

2828
#cmakedefine GIT_NTLM 1
2929
#cmakedefine GIT_GSSAPI 1
30-
#cmakedefine GIT_WINHTTP 1
31-
#cmakedefine GIT_NTLM 1
30+
#cmakedefine GIT_GSSFRAMEWORK 1
3231

32+
#cmakedefine GIT_WINHTTP 1
3333
#cmakedefine GIT_HTTPS 1
3434
#cmakedefine GIT_OPENSSL 1
3535
#cmakedefine GIT_SECURE_TRANSPORT 1

src/transports/auth_negotiate.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,19 @@
77

88
#include "auth_negotiate.h"
99

10-
#ifdef GIT_GSSAPI
10+
#if defined(GIT_GSSAPI) || defined(GIT_GSSFRAMEWORK)
1111

1212
#include "git2.h"
1313
#include "buffer.h"
1414
#include "auth.h"
1515
#include "git2/sys/cred.h"
1616

17+
#ifdef GIT_GSSFRAMEWORK
18+
#import <GSS/GSS.h>
19+
#elif defined(GIT_GSSAPI)
1720
#include <gssapi.h>
1821
#include <krb5.h>
22+
#endif
1923

2024
static gss_OID_desc negotiate_oid_spnego =
2125
{ 6, (void *) "\x2b\x06\x01\x05\x05\x02" };

src/transports/auth_negotiate.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
#include "git2.h"
1313
#include "auth.h"
1414

15-
#ifdef GIT_GSSAPI
15+
#if defined(GIT_GSSAPI) || defined(GIT_GSSFRAMEWORK)
1616

1717
extern int git_http_auth_negotiate(
1818
git_http_auth_context **out,

src/util.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -719,6 +719,10 @@ static int GIT_STDLIB_CALL git__qsort_r_glue_cmp(
719719
}
720720
#endif
721721

722+
723+
#if !defined(HAVE_QSORT_R_BSD) && \
724+
!defined(HAVE_QSORT_R_GNU) && \
725+
!defined(HAVE_QSORT_S)
722726
static void swap(uint8_t *a, uint8_t *b, size_t elsize)
723727
{
724728
char tmp[256];
@@ -744,6 +748,7 @@ static void insertsort(
744748
for (j = i; j > base && cmp(j, j - elsize, payload) < 0; j -= elsize)
745749
swap(j, j - elsize, elsize);
746750
}
751+
#endif
747752

748753
void git__qsort_r(
749754
void *els, size_t nel, size_t elsize, git__sort_r_cmp cmp, void *payload)

0 commit comments

Comments
 (0)