if(authp->picked == CURLAUTH_NTLM ||
authp->picked == CURLAUTH_NTLM_SSO) {
/* NTLM authentication is picked and activated */
- CURLntlm ntlm =
+ CURLcode ntlm =
Curl_input_ntlm(conn, (bool)(httpcode == 407), start);
- if(CURLNTLM_BAD != ntlm) {
+ if(CURLE_OK == ntlm) {
data->state.authproblem = FALSE;
#ifdef WINBIND_NTLM_AUTH_ENABLED
if(authp->picked == CURLAUTH_NTLM_SSO) {
from the beginning of the NTLM message.
*/
-CURLntlm Curl_input_ntlm(struct connectdata *conn,
+CURLcode Curl_input_ntlm(struct connectdata *conn,
bool proxy, /* if proxy or not */
const char *header) /* rest of the www-authenticate:
header */
#ifndef USE_WINDOWS_SSPI
static const char type2_marker[] = { 0x02, 0x00, 0x00, 0x00 };
#endif
+ CURLcode result = CURLE_OK;
#ifdef USE_NSS
- if(CURLE_OK != Curl_nss_force_init(conn->data))
- return CURLNTLM_BAD;
+ result = Curl_nss_force_init(conn->data);
+ if(result)
+ return result;
#endif
ntlm = proxy ? &conn->proxyntlm : &conn->ntlm;
unsigned char *buffer;
size = Curl_base64_decode(header, &buffer);
if(!buffer)
- return CURLNTLM_BAD;
+ return CURLE_OUT_OF_MEMORY;
ntlm->state = NTLMSTATE_TYPE2; /* we got a type-2 */
(memcmp(buffer + 8, type2_marker, sizeof(type2_marker)) != 0)) {
/* This was not a good enough type-2 message */
free(buffer);
- return CURLNTLM_BAD;
+ infof(conn->data, "NTLM handshake failure (bad type-2 message)\n");
+ return CURLE_REMOTE_ACCESS_DENIED;
}
ntlm->flags = readint_le(&buffer[20]);
free(buffer);
}
else {
- if(ntlm->state >= NTLMSTATE_TYPE1)
- return CURLNTLM_BAD;
+ if(ntlm->state >= NTLMSTATE_TYPE1) {
+ infof(conn->data, "NTLM handshake failure (internal error)\n");
+ return CURLE_REMOTE_ACCESS_DENIED;
+ }
ntlm->state = NTLMSTATE_TYPE1; /* we should sent away a type-1 */
}
}
- return CURLNTLM_FINE;
+ return result;
}
#ifndef USE_WINDOWS_SSPI
*
***************************************************************************/
-typedef enum {
- CURLNTLM_NONE, /* not a ntlm */
- CURLNTLM_BAD, /* an ntlm, but one we don't like */
- CURLNTLM_FIRST, /* the first 401-reply we got with NTLM */
- CURLNTLM_FINE, /* an ntlm we act on */
-
- CURLNTLM_LAST /* last entry in this enum, don't use */
-} CURLntlm;
-
/* this is for ntlm header input */
-CURLntlm Curl_input_ntlm(struct connectdata *conn, bool proxy,
+CURLcode Curl_input_ntlm(struct connectdata *conn, bool proxy,
const char *header);
/* this is for creating ntlm header output */