Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(96)

Unified Diff: net/http/http_auth_handler_ntlm.cc

Issue 2904633002: Replace NTLMv1 implementation with a functionally equivalent one.
Patch Set: Cleanup Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: net/http/http_auth_handler_ntlm.cc
diff --git a/net/http/http_auth_handler_ntlm.cc b/net/http/http_auth_handler_ntlm.cc
index cecf3b2917d7848d76c770a8fce25ee545c60903..36b2ac01ce85b0c9d468727e215a3e2c19be1cbc 100644
--- a/net/http/http_auth_handler_ntlm.cc
+++ b/net/http/http_auth_handler_ntlm.cc
@@ -49,13 +49,6 @@ int HttpAuthHandlerNTLM::GenerateAuthTokenImpl(
LOG(ERROR) << "Username and password are expected to be non-NULL.";
return ERR_MISSING_AUTH_CREDENTIALS;
}
- // TODO(wtc): See if we can use char* instead of void* for in_buf and
- // out_buf. This change will need to propagate to GetNextToken,
- // GenerateType1Msg, and GenerateType3Msg, and perhaps further.
- const void* in_buf;
- void* out_buf;
- uint32_t in_buf_len, out_buf_len;
- std::string decoded_auth_data;
// The username may be in the form "DOMAIN\user". Parse it into the two
// components.
@@ -73,32 +66,33 @@ int HttpAuthHandlerNTLM::GenerateAuthTokenImpl(
domain_ = domain;
credentials_.Set(user, credentials->password());
- // Initial challenge.
+ std::string decoded_auth_data;
if (auth_data_.empty()) {
- in_buf_len = 0;
- in_buf = NULL;
+ // There is no |auth_data_| because the client sends the first message.
int rv = InitializeBeforeFirstChallenge();
if (rv != OK)
return rv;
} else {
+ // When |auth_data_| is present it contains the Challenge message.
if (!base::Base64Decode(auth_data_, &decoded_auth_data)) {
LOG(ERROR) << "Unexpected problem Base64 decoding.";
return ERR_UNEXPECTED;
}
- in_buf_len = decoded_auth_data.length();
- in_buf = decoded_auth_data.data();
}
- int rv = GetNextToken(in_buf, in_buf_len, &out_buf, &out_buf_len);
- if (rv != OK)
- return rv;
+ ntlm::Buffer next_token = GetNextToken(
+ ntlm::Buffer(reinterpret_cast<const uint8_t*>(decoded_auth_data.data()),
+ decoded_auth_data.size()));
+ if (next_token.empty())
+ return ERR_UNEXPECTED;
// Base64 encode data in output buffer and prepend "NTLM ".
- std::string encode_input(static_cast<char*>(out_buf), out_buf_len);
std::string encode_output;
- base::Base64Encode(encode_input, &encode_output);
- // OK, we are done with |out_buf|
- free(out_buf);
+ base::Base64Encode(
+ base::StringPiece(reinterpret_cast<const char*>(next_token.data()),
+ next_token.size()),
+ &encode_output);
+
*auth_token = std::string("NTLM ") + encode_output;
return OK;
#endif

Powered by Google App Engine
This is Rietveld 408576698