OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef NET_HTTP_HTTP_AUTH_HANDLER_NTLM_H_ | 5 #ifndef NET_HTTP_HTTP_AUTH_HANDLER_NTLM_H_ |
6 #define NET_HTTP_HTTP_AUTH_HANDLER_NTLM_H_ | 6 #define NET_HTTP_HTTP_AUTH_HANDLER_NTLM_H_ |
7 | 7 |
| 8 #include <stddef.h> |
| 9 #include <stdint.h> |
| 10 |
8 #include "build/build_config.h" | 11 #include "build/build_config.h" |
9 | 12 |
10 // This contains the portable and the SSPI implementations for NTLM. | 13 // This contains the portable and the SSPI implementations for NTLM. |
11 // We use NTLM_SSPI for Windows, and NTLM_PORTABLE for other platforms. | 14 // We use NTLM_SSPI for Windows, and NTLM_PORTABLE for other platforms. |
12 #if defined(OS_WIN) | 15 #if defined(OS_WIN) |
13 #define NTLM_SSPI | 16 #define NTLM_SSPI |
14 #else | 17 #else |
15 #define NTLM_PORTABLE | 18 #define NTLM_PORTABLE |
16 #endif | 19 #endif |
17 | 20 |
18 #if defined(NTLM_SSPI) | 21 #if defined(NTLM_SSPI) |
19 #define SECURITY_WIN32 1 | 22 #define SECURITY_WIN32 1 |
20 #include <windows.h> | 23 #include <windows.h> |
21 #include <security.h> | 24 #include <security.h> |
22 #include "net/http/http_auth_sspi_win.h" | 25 #include "net/http/http_auth_sspi_win.h" |
23 #endif | 26 #endif |
24 | 27 |
25 #include <string> | 28 #include <string> |
26 | 29 |
27 #include "base/basictypes.h" | |
28 #include "base/strings/string16.h" | 30 #include "base/strings/string16.h" |
29 #include "net/http/http_auth_handler.h" | 31 #include "net/http/http_auth_handler.h" |
30 #include "net/http/http_auth_handler_factory.h" | 32 #include "net/http/http_auth_handler_factory.h" |
31 | 33 |
32 namespace net { | 34 namespace net { |
33 | 35 |
34 class HttpAuthPreferences; | 36 class HttpAuthPreferences; |
35 | 37 |
36 // Code for handling HTTP NTLM authentication. | 38 // Code for handling HTTP NTLM authentication. |
37 class NET_EXPORT_PRIVATE HttpAuthHandlerNTLM : public HttpAuthHandler { | 39 class NET_EXPORT_PRIVATE HttpAuthHandlerNTLM : public HttpAuthHandler { |
(...skipping 22 matching lines...) Expand all Loading... |
60 private: | 62 private: |
61 #if defined(NTLM_SSPI) | 63 #if defined(NTLM_SSPI) |
62 ULONG max_token_length_; | 64 ULONG max_token_length_; |
63 bool is_unsupported_; | 65 bool is_unsupported_; |
64 scoped_ptr<SSPILibrary> sspi_library_; | 66 scoped_ptr<SSPILibrary> sspi_library_; |
65 #endif // defined(NTLM_SSPI) | 67 #endif // defined(NTLM_SSPI) |
66 }; | 68 }; |
67 | 69 |
68 #if defined(NTLM_PORTABLE) | 70 #if defined(NTLM_PORTABLE) |
69 // A function that generates n random bytes in the output buffer. | 71 // A function that generates n random bytes in the output buffer. |
70 typedef void (*GenerateRandomProc)(uint8* output, size_t n); | 72 typedef void (*GenerateRandomProc)(uint8_t* output, size_t n); |
71 | 73 |
72 // A function that returns the local host name. Returns an empty string if | 74 // A function that returns the local host name. Returns an empty string if |
73 // the local host name is not available. | 75 // the local host name is not available. |
74 typedef std::string (*HostNameProc)(); | 76 typedef std::string (*HostNameProc)(); |
75 | 77 |
76 // For unit tests to override and restore the GenerateRandom and | 78 // For unit tests to override and restore the GenerateRandom and |
77 // GetHostName functions. | 79 // GetHostName functions. |
78 class ScopedProcSetter { | 80 class ScopedProcSetter { |
79 public: | 81 public: |
80 ScopedProcSetter(GenerateRandomProc random_proc, | 82 ScopedProcSetter(GenerateRandomProc random_proc, |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
132 static HostNameProc SetHostNameProc(HostNameProc proc); | 134 static HostNameProc SetHostNameProc(HostNameProc proc); |
133 #endif | 135 #endif |
134 | 136 |
135 // Parse the challenge, saving the results into this instance. | 137 // Parse the challenge, saving the results into this instance. |
136 HttpAuth::AuthorizationResult ParseChallenge( | 138 HttpAuth::AuthorizationResult ParseChallenge( |
137 HttpAuthChallengeTokenizer* tok, bool initial_challenge); | 139 HttpAuthChallengeTokenizer* tok, bool initial_challenge); |
138 | 140 |
139 // Given an input token received from the server, generate the next output | 141 // Given an input token received from the server, generate the next output |
140 // token to be sent to the server. | 142 // token to be sent to the server. |
141 int GetNextToken(const void* in_token, | 143 int GetNextToken(const void* in_token, |
142 uint32 in_token_len, | 144 uint32_t in_token_len, |
143 void** out_token, | 145 void** out_token, |
144 uint32* out_token_len); | 146 uint32_t* out_token_len); |
145 | 147 |
146 // Create an NTLM SPN to identify the |origin| server. | 148 // Create an NTLM SPN to identify the |origin| server. |
147 static std::string CreateSPN(const GURL& origin); | 149 static std::string CreateSPN(const GURL& origin); |
148 | 150 |
149 #if defined(NTLM_SSPI) | 151 #if defined(NTLM_SSPI) |
150 HttpAuthSSPI auth_sspi_; | 152 HttpAuthSSPI auth_sspi_; |
151 #endif | 153 #endif |
152 | 154 |
153 #if defined(NTLM_PORTABLE) | 155 #if defined(NTLM_PORTABLE) |
154 static GenerateRandomProc generate_random_proc_; | 156 static GenerateRandomProc generate_random_proc_; |
155 static HostNameProc get_host_name_proc_; | 157 static HostNameProc get_host_name_proc_; |
156 #endif | 158 #endif |
157 | 159 |
158 base::string16 domain_; | 160 base::string16 domain_; |
159 AuthCredentials credentials_; | 161 AuthCredentials credentials_; |
160 | 162 |
161 // The base64-encoded string following "NTLM" in the "WWW-Authenticate" or | 163 // The base64-encoded string following "NTLM" in the "WWW-Authenticate" or |
162 // "Proxy-Authenticate" response header. | 164 // "Proxy-Authenticate" response header. |
163 std::string auth_data_; | 165 std::string auth_data_; |
164 | 166 |
165 #if defined(NTLM_SSPI) | 167 #if defined(NTLM_SSPI) |
166 const HttpAuthPreferences* http_auth_preferences_; | 168 const HttpAuthPreferences* http_auth_preferences_; |
167 #endif | 169 #endif |
168 }; | 170 }; |
169 | 171 |
170 } // namespace net | 172 } // namespace net |
171 | 173 |
172 #endif // NET_HTTP_HTTP_AUTH_HANDLER_NTLM_H_ | 174 #endif // NET_HTTP_HTTP_AUTH_HANDLER_NTLM_H_ |
OLD | NEW |