Skip to content

Commit 7610638

Browse files
authored
Merge pull request libgit2#4453 from libgit2/ethomson/spnego
winhttp: properly support ntlm and negotiate
2 parents d621024 + 526dea1 commit 7610638

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

src/transports/winhttp.c

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -172,16 +172,25 @@ static int apply_default_credentials(HINTERNET request, int mechanisms)
172172
* is "medium" which applies to the intranet and sounds like it would correspond
173173
* to Internet Explorer security zones, but in fact does not. */
174174
DWORD data = WINHTTP_AUTOLOGON_SECURITY_LEVEL_LOW;
175+
DWORD native_scheme = 0;
175176

176-
if ((mechanisms & GIT_WINHTTP_AUTH_NTLM) == 0 &&
177-
(mechanisms & GIT_WINHTTP_AUTH_NEGOTIATE) == 0) {
177+
if ((mechanisms & GIT_WINHTTP_AUTH_NTLM) != 0)
178+
native_scheme |= WINHTTP_AUTH_SCHEME_NTLM;
179+
180+
if ((mechanisms & GIT_WINHTTP_AUTH_NEGOTIATE) != 0)
181+
native_scheme |= WINHTTP_AUTH_SCHEME_NEGOTIATE;
182+
183+
if (!native_scheme) {
178184
giterr_set(GITERR_NET, "invalid authentication scheme");
179185
return -1;
180186
}
181187

182188
if (!WinHttpSetOption(request, WINHTTP_OPTION_AUTOLOGON_POLICY, &data, sizeof(DWORD)))
183189
return -1;
184190

191+
if (!WinHttpSetCredentials(request, WINHTTP_AUTH_TARGET_SERVER, native_scheme, NULL, NULL, NULL))
192+
return -1;
193+
185194
return 0;
186195
}
187196

@@ -606,12 +615,12 @@ static int parse_unauthorized_response(
606615
if (WINHTTP_AUTH_SCHEME_NTLM & supported) {
607616
*allowed_types |= GIT_CREDTYPE_USERPASS_PLAINTEXT;
608617
*allowed_types |= GIT_CREDTYPE_DEFAULT;
609-
*allowed_mechanisms = GIT_WINHTTP_AUTH_NEGOTIATE;
618+
*allowed_mechanisms |= GIT_WINHTTP_AUTH_NTLM;
610619
}
611620

612621
if (WINHTTP_AUTH_SCHEME_NEGOTIATE & supported) {
613622
*allowed_types |= GIT_CREDTYPE_DEFAULT;
614-
*allowed_mechanisms = GIT_WINHTTP_AUTH_NEGOTIATE;
623+
*allowed_mechanisms |= GIT_WINHTTP_AUTH_NEGOTIATE;
615624
}
616625

617626
if (WINHTTP_AUTH_SCHEME_BASIC & supported) {

0 commit comments

Comments
 (0)