Index: net/http/http_auth_handler_ntlm.h |
=================================================================== |
--- net/http/http_auth_handler_ntlm.h (revision 12289) |
+++ net/http/http_auth_handler_ntlm.h (working copy) |
@@ -9,6 +9,7 @@ |
#include "base/basictypes.h" |
#include "base/scoped_ptr.h" |
+#include "base/string16.h" |
#include "net/http/http_auth_handler.h" |
namespace net { |
@@ -21,12 +22,30 @@ |
// A function that generates n random bytes in the output buffer. |
typedef void (*GenerateRandomProc)(uint8* output, size_t n); |
- // A function that returns the local host name as a null-terminated string |
- // in the output buffer. Returns an empty string if the local host name is |
- // not available. |
- // TODO(wtc): return a std::string instead. |
- typedef void (*HostNameProc)(char* name, size_t namelen); |
+ // A function that returns the local host name. Returns an empty string if |
+ // the local host name is not available. |
+ typedef std::string (*HostNameProc)(); |
+ // For unit tests to override and restore the GenerateRandom and |
+ // GetHostName functions. |
+ class ScopedProcSetter { |
+ public: |
+ ScopedProcSetter(GenerateRandomProc random_proc, |
+ HostNameProc host_name_proc) { |
+ old_random_proc_ = SetGenerateRandomProc(random_proc); |
+ old_host_name_proc_ = SetHostNameProc(host_name_proc); |
+ } |
+ |
+ ~ScopedProcSetter() { |
+ SetGenerateRandomProc(old_random_proc_); |
+ SetHostNameProc(old_host_name_proc_); |
+ } |
+ |
+ private: |
+ GenerateRandomProc old_random_proc_; |
+ HostNameProc old_host_name_proc_; |
+ }; |
+ |
HttpAuthHandlerNTLM(); |
virtual ~HttpAuthHandlerNTLM(); |
@@ -38,10 +57,6 @@ |
const HttpRequestInfo* request, |
const ProxyInfo* proxy); |
- // For unit tests to override the GenerateRandom and GetHostName functions. |
- static void SetGenerateRandomProc(GenerateRandomProc proc); |
- static void SetHostNameProc(HostNameProc proc); |
- |
protected: |
virtual bool Init(std::string::const_iterator challenge_begin, |
std::string::const_iterator challenge_end) { |
@@ -49,21 +64,30 @@ |
} |
private: |
+ // For unit tests to override the GenerateRandom and GetHostName functions. |
+ // Returns the old function. |
+ static GenerateRandomProc SetGenerateRandomProc(GenerateRandomProc proc); |
+ static HostNameProc SetHostNameProc(HostNameProc proc); |
+ |
// Parse the challenge, saving the results into this instance. |
// Returns true on success. |
bool ParseChallenge(std::string::const_iterator challenge_begin, |
std::string::const_iterator challenge_end); |
- // The actual implementation of NTLM. |
- // |
- // TODO(wtc): This artificial separation of the NTLM auth module from the |
- // NTLM auth handler comes from the Mozilla code. It is due to an |
- // architecture constraint of Mozilla's (all crypto code must reside in the |
- // "PSM" component), so that the NTLM code, which does crypto, must be |
- // separated from the "netwerk" component. Our source tree doesn't have |
- // this constraint, so we may want to merge NTLMAuthModule into this class. |
- scoped_ptr<NTLMAuthModule> ntlm_module_; |
+ // Given an input token received from the server, generate the next output |
+ // token to be sent to the server. |
+ int GetNextToken(const void* in_token, |
+ uint32 in_token_len, |
+ void** out_token, |
+ uint32* out_token_len); |
+ static GenerateRandomProc generate_random_proc_; |
+ static HostNameProc get_host_name_proc_; |
+ |
+ string16 domain_; |
+ string16 username_; |
+ string16 password_; |
+ |
// The base64-encoded string following "NTLM" in the "WWW-Authenticate" or |
// "Proxy-Authenticate" response header. |
std::string auth_data_; |