Chromium Code Reviews| Index: net/http/http_auth_handler_digest.cc |
| diff --git a/net/http/http_auth_handler_digest.cc b/net/http/http_auth_handler_digest.cc |
| index e8cb819cef70ec390e5aebc5a3fefd7187d9eeb9..28d2f58aa9bcc1fe147b315082be28b031b4784d 100644 |
| --- a/net/http/http_auth_handler_digest.cc |
| +++ b/net/http/http_auth_handler_digest.cc |
| @@ -114,16 +114,21 @@ HttpAuth::AuthorizationResult HttpAuthHandlerDigest::HandleAnotherChallenge( |
| return HttpAuth::AUTHORIZATION_RESULT_INVALID; |
| HttpUtil::NameValuePairsIterator parameters = challenge->param_pairs(); |
| + std::string realm; |
| - // Try to find the "stale" value. |
| + // Try to find the "stale" value, and also keep track of the realm |
| + // for the new challenge. |
| while (parameters.GetNext()) { |
| - if (!LowerCaseEqualsASCII(parameters.name(), "stale")) |
| - continue; |
| - if (LowerCaseEqualsASCII(parameters.value(), "true")) |
| - return HttpAuth::AUTHORIZATION_RESULT_STALE; |
| + if (LowerCaseEqualsASCII(parameters.name(), "stale")) { |
| + if (LowerCaseEqualsASCII(parameters.value(), "true")) |
| + return HttpAuth::AUTHORIZATION_RESULT_STALE; |
|
wtc
2011/02/22 23:17:32
IMPORTANT: what if the new challenge has both stal
cbentzel
2011/02/23 14:49:54
It could happen, but it seems unexpected. It seems
asanka
2011/02/23 18:06:40
RFC 2617 states that the 'stale' value should only
|
| + } else if (LowerCaseEqualsASCII(parameters.name(), "realm")) { |
| + realm = parameters.value(); |
| + } |
| } |
| - |
| - return HttpAuth::AUTHORIZATION_RESULT_REJECT; |
| + return (realm_ != realm) ? |
| + HttpAuth::AUTHORIZATION_RESULT_DIFFERENT_REALM : |
| + HttpAuth::AUTHORIZATION_RESULT_REJECT; |
| } |
| bool HttpAuthHandlerDigest::Init(HttpAuth::ChallengeTokenizer* challenge) { |