diff options
author | wtc@chromium.org <wtc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-02-28 01:29:24 +0000 |
---|---|---|
committer | wtc@chromium.org <wtc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-02-28 01:29:24 +0000 |
commit | 3f918787e1073e17439e55ed34f23ffdc31f891f (patch) | |
tree | 3e591f7dc3c54e8859815486057725366532ca22 /net/http/http_auth_handler_ntlm.h | |
parent | 0a5f0a187c73e47417511ea2ed988c5b3876f563 (diff) | |
download | chromium_src-3f918787e1073e17439e55ed34f23ffdc31f891f.zip chromium_src-3f918787e1073e17439e55ed34f23ffdc31f891f.tar.gz chromium_src-3f918787e1073e17439e55ed34f23ffdc31f891f.tar.bz2 |
Implement the NTLM authentication scheme by porting
Mozilla's implementation.
R=darin,eroman
BUG=6567,6824
Review URL: http://codereview.chromium.org/28144
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@10667 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/http/http_auth_handler_ntlm.h')
-rw-r--r-- | net/http/http_auth_handler_ntlm.h | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/net/http/http_auth_handler_ntlm.h b/net/http/http_auth_handler_ntlm.h new file mode 100644 index 0000000..05ce06b --- /dev/null +++ b/net/http/http_auth_handler_ntlm.h @@ -0,0 +1,60 @@ +// Copyright (c) 2009 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef NET_HTTP_HTTP_AUTH_HANDLER_NTLM_H_ +#define NET_HTTP_HTTP_AUTH_HANDLER_NTLM_H_ + +#include <string> + +#include "base/scoped_ptr.h" +#include "net/http/http_auth_handler.h" + +namespace net { + +class NTLMAuthModule; + +// Code for handling HTTP NTLM authentication. +class HttpAuthHandlerNTLM : public HttpAuthHandler { + public: + HttpAuthHandlerNTLM(); + + virtual ~HttpAuthHandlerNTLM(); + + virtual bool NeedsIdentity(); + + virtual std::string GenerateCredentials(const std::wstring& username, + const std::wstring& password, + const HttpRequestInfo* request, + const ProxyInfo* proxy); + + protected: + virtual bool Init(std::string::const_iterator challenge_begin, + std::string::const_iterator challenge_end) { + return ParseChallenge(challenge_begin, challenge_end); + } + + private: + // 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_; + + // The base64-encoded string following "NTLM" in the "WWW-Authenticate" or + // "Proxy-Authenticate" response header. + std::string auth_data_; +}; + +} // namespace net + +#endif // NET_HTTP_HTTP_AUTH_HANDLER_NTLM_H_ |