| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 #include "services/authentication/accounts_db_manager.h" | 5 #include "services/authentication/accounts_db_manager.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/strings/string_tokenizer.h" | 10 #include "base/strings/string_tokenizer.h" |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 174 | 174 |
| 175 if (error != mojo::files::Error::OK) { | 175 if (error != mojo::files::Error::OK) { |
| 176 LOG(ERROR) << "Read() error on accounts db: " << error; | 176 LOG(ERROR) << "Read() error on accounts db: " << error; |
| 177 error_ = CREDENTIALS_DB_READ_ERROR; | 177 error_ = CREDENTIALS_DB_READ_ERROR; |
| 178 return; | 178 return; |
| 179 } | 179 } |
| 180 | 180 |
| 181 if (bytes_read.size() != 0) { | 181 if (bytes_read.size() != 0) { |
| 182 // Deserialize data from file | 182 // Deserialize data from file |
| 183 const char* data = reinterpret_cast<const char*>(&bytes_read[0]); | 183 const char* data = reinterpret_cast<const char*>(&bytes_read[0]); |
| 184 | 184 if (!creds_store_.Deserialize((void*)data, bytes_read.size())) { |
| 185 // Validate the file contents before deserializing | 185 LOG(ERROR) << "Deserialize() error on accounts db."; |
| 186 mojo::internal::BoundsChecker bounds_checker(data, bytes_read.size(), 0); | |
| 187 std::string error; | |
| 188 mojo::internal::ValidationError verror = | |
| 189 internal::CredentialStore_Data::Validate(data, &bounds_checker, &error); | |
| 190 if (verror != mojo::internal::ValidationError::NONE) { | |
| 191 LOG(ERROR) << "Validation() error on accounts db [" | |
| 192 << ValidationErrorToString(verror) << "][" << error << "]"; | |
| 193 error_ = CREDENTIALS_DB_VALIDATE_ERROR; | 186 error_ = CREDENTIALS_DB_VALIDATE_ERROR; |
| 194 return; | 187 return; |
| 195 } | 188 } |
| 196 | |
| 197 creds_store_.Deserialize((void*)data); | |
| 198 // When we have multiple versions, this is not a fatal error, but a sign | 189 // When we have multiple versions, this is not a fatal error, but a sign |
| 199 // that we need to update (or reinitialize) the db. | 190 // that we need to update (or reinitialize) the db. |
| 200 CHECK_EQ(creds_store_.version, kCredsDbVersion); | 191 CHECK_EQ(creds_store_.version, kCredsDbVersion); |
| 201 } else { | 192 } else { |
| 202 creds_store_.version = kCredsDbVersion; | 193 creds_store_.version = kCredsDbVersion; |
| 203 } | 194 } |
| 204 | 195 |
| 205 db_init_option_ |= CREDENTIALS_DB_INIT_SUCCESS; | 196 db_init_option_ |= CREDENTIALS_DB_INIT_SUCCESS; |
| 206 } | 197 } |
| 207 | 198 |
| 208 void AccountsDbManager::OnAuthorizationsFileReadResponse( | 199 void AccountsDbManager::OnAuthorizationsFileReadResponse( |
| 209 const mojo::files::Error error, | 200 const mojo::files::Error error, |
| 210 const mojo::Array<uint8_t> bytes_read) { | 201 const mojo::Array<uint8_t> bytes_read) { |
| 211 CHECK(error_ == NONE); | 202 CHECK(error_ == NONE); |
| 212 | 203 |
| 213 if (error != mojo::files::Error::OK) { | 204 if (error != mojo::files::Error::OK) { |
| 214 LOG(ERROR) << "Read() error on auth db: " << error; | 205 LOG(ERROR) << "Read() error on auth db: " << error; |
| 215 error_ = AUTHORIZATIONS_DB_READ_ERROR; | 206 error_ = AUTHORIZATIONS_DB_READ_ERROR; |
| 216 return; | 207 return; |
| 217 } | 208 } |
| 218 | 209 |
| 219 if (bytes_read.size() != 0) { | 210 if (bytes_read.size() != 0) { |
| 220 // Deserialize data from file | 211 // Deserialize data from file |
| 221 const char* data = reinterpret_cast<const char*>(&bytes_read[0]); | 212 const char* data = reinterpret_cast<const char*>(&bytes_read[0]); |
| 222 | 213 if (!auth_grants_.Deserialize((void*)data, bytes_read.size())) { |
| 223 // Validate the file contents before deserializing | 214 LOG(ERROR) << "Deserialize() error on auth db."; |
| 224 mojo::internal::BoundsChecker bounds_checker(data, bytes_read.size(), 0); | |
| 225 if (internal::Db_Data::Validate(data, &bounds_checker, nullptr) != | |
| 226 mojo::internal::ValidationError::NONE) { | |
| 227 LOG(ERROR) << "Validation() error on auth db."; | |
| 228 error_ = AUTHORIZATIONS_DB_VALIDATE_ERROR; | 215 error_ = AUTHORIZATIONS_DB_VALIDATE_ERROR; |
| 229 return; | 216 return; |
| 230 } | 217 } |
| 231 | 218 |
| 232 auth_grants_.Deserialize((void*)data); | |
| 233 // When we have multiple versions, this is not a fatal error, but a sign | 219 // When we have multiple versions, this is not a fatal error, but a sign |
| 234 // that we need to update (or reinitialize) the db. | 220 // that we need to update (or reinitialize) the db. |
| 235 CHECK_EQ(auth_grants_.version, kAuthDbVersion); | 221 CHECK_EQ(auth_grants_.version, kAuthDbVersion); |
| 236 } else { | 222 } else { |
| 237 auth_grants_.version = kAuthDbVersion; | 223 auth_grants_.version = kAuthDbVersion; |
| 238 } | 224 } |
| 239 | 225 |
| 240 db_init_option_ |= AUTHORIZATIONS_DB_INIT_SUCCESS; | 226 db_init_option_ |= AUTHORIZATIONS_DB_INIT_SUCCESS; |
| 241 } | 227 } |
| 242 | 228 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 283 CHECK(error_ == NONE); | 269 CHECK(error_ == NONE); |
| 284 | 270 |
| 285 if (mojo::files::Error::OK != error) { | 271 if (mojo::files::Error::OK != error) { |
| 286 LOG(ERROR) << "Write() error on auth db:" << error; | 272 LOG(ERROR) << "Write() error on auth db:" << error; |
| 287 error_ = AUTHORIZATIONS_DB_WRITE_ERROR; | 273 error_ = AUTHORIZATIONS_DB_WRITE_ERROR; |
| 288 return; | 274 return; |
| 289 } | 275 } |
| 290 } | 276 } |
| 291 | 277 |
| 292 } // namespace authentication | 278 } // namespace authentication |
| OLD | NEW |