@@ -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