| 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_;
|
|
|