| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "chrome/browser/net/sqlite_server_bound_cert_store.h" | 5 #include "chrome/browser/net/sqlite_server_bound_cert_store.h" |
| 6 | 6 |
| 7 #include <list> | 7 #include <list> |
| 8 | 8 |
| 9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 276 while (smt.Step()) { | 276 while (smt.Step()) { |
| 277 std::string origin = smt.ColumnString(0); | 277 std::string origin = smt.ColumnString(0); |
| 278 std::string cert_from_db; | 278 std::string cert_from_db; |
| 279 smt.ColumnBlobAsString(1, &cert_from_db); | 279 smt.ColumnBlobAsString(1, &cert_from_db); |
| 280 // Parse the cert and extract the real value and then update the DB. | 280 // Parse the cert and extract the real value and then update the DB. |
| 281 scoped_refptr<net::X509Certificate> cert( | 281 scoped_refptr<net::X509Certificate> cert( |
| 282 net::X509Certificate::CreateFromBytes( | 282 net::X509Certificate::CreateFromBytes( |
| 283 cert_from_db.data(), cert_from_db.size())); | 283 cert_from_db.data(), cert_from_db.size())); |
| 284 if (cert) { | 284 if (cert) { |
| 285 if (cur_version == 2) { | 285 if (cur_version == 2) { |
| 286 update_expires_smt.Reset(); | 286 update_expires_smt.Reset(true); |
| 287 update_expires_smt.BindInt64(0, | 287 update_expires_smt.BindInt64(0, |
| 288 cert->valid_expiry().ToInternalValue()); | 288 cert->valid_expiry().ToInternalValue()); |
| 289 update_expires_smt.BindString(1, origin); | 289 update_expires_smt.BindString(1, origin); |
| 290 if (!update_expires_smt.Run()) { | 290 if (!update_expires_smt.Run()) { |
| 291 LOG(WARNING) << "Unable to update server bound cert database to " | 291 LOG(WARNING) << "Unable to update server bound cert database to " |
| 292 << "version 4."; | 292 << "version 4."; |
| 293 return false; | 293 return false; |
| 294 } | 294 } |
| 295 } | 295 } |
| 296 | 296 |
| 297 update_creation_smt.Reset(); | 297 update_creation_smt.Reset(true); |
| 298 update_creation_smt.BindInt64(0, cert->valid_start().ToInternalValue()); | 298 update_creation_smt.BindInt64(0, cert->valid_start().ToInternalValue()); |
| 299 update_creation_smt.BindString(1, origin); | 299 update_creation_smt.BindString(1, origin); |
| 300 if (!update_creation_smt.Run()) { | 300 if (!update_creation_smt.Run()) { |
| 301 LOG(WARNING) << "Unable to update server bound cert database to " | 301 LOG(WARNING) << "Unable to update server bound cert database to " |
| 302 << "version 4."; | 302 << "version 4."; |
| 303 return false; | 303 return false; |
| 304 } | 304 } |
| 305 } else { | 305 } else { |
| 306 // If there's a cert we can't parse, just leave it. It'll get replaced | 306 // If there's a cert we can't parse, just leave it. It'll get replaced |
| 307 // with a new one if we ever try to use it. | 307 // with a new one if we ever try to use it. |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 399 sql::Transaction transaction(db_.get()); | 399 sql::Transaction transaction(db_.get()); |
| 400 if (!transaction.Begin()) | 400 if (!transaction.Begin()) |
| 401 return; | 401 return; |
| 402 | 402 |
| 403 for (PendingOperationsList::iterator it = ops.begin(); | 403 for (PendingOperationsList::iterator it = ops.begin(); |
| 404 it != ops.end(); ++it) { | 404 it != ops.end(); ++it) { |
| 405 // Free the certs as we commit them to the database. | 405 // Free the certs as we commit them to the database. |
| 406 scoped_ptr<PendingOperation> po(*it); | 406 scoped_ptr<PendingOperation> po(*it); |
| 407 switch (po->op()) { | 407 switch (po->op()) { |
| 408 case PendingOperation::CERT_ADD: { | 408 case PendingOperation::CERT_ADD: { |
| 409 add_smt.Reset(); | 409 add_smt.Reset(true); |
| 410 add_smt.BindString(0, po->cert().server_identifier()); | 410 add_smt.BindString(0, po->cert().server_identifier()); |
| 411 const std::string& private_key = po->cert().private_key(); | 411 const std::string& private_key = po->cert().private_key(); |
| 412 add_smt.BindBlob(1, private_key.data(), private_key.size()); | 412 add_smt.BindBlob(1, private_key.data(), private_key.size()); |
| 413 const std::string& cert = po->cert().cert(); | 413 const std::string& cert = po->cert().cert(); |
| 414 add_smt.BindBlob(2, cert.data(), cert.size()); | 414 add_smt.BindBlob(2, cert.data(), cert.size()); |
| 415 add_smt.BindInt(3, po->cert().type()); | 415 add_smt.BindInt(3, po->cert().type()); |
| 416 add_smt.BindInt64(4, po->cert().expiration_time().ToInternalValue()); | 416 add_smt.BindInt64(4, po->cert().expiration_time().ToInternalValue()); |
| 417 add_smt.BindInt64(5, po->cert().creation_time().ToInternalValue()); | 417 add_smt.BindInt64(5, po->cert().creation_time().ToInternalValue()); |
| 418 if (!add_smt.Run()) | 418 if (!add_smt.Run()) |
| 419 NOTREACHED() << "Could not add a server bound cert to the DB."; | 419 NOTREACHED() << "Could not add a server bound cert to the DB."; |
| 420 break; | 420 break; |
| 421 } | 421 } |
| 422 case PendingOperation::CERT_DELETE: | 422 case PendingOperation::CERT_DELETE: |
| 423 del_smt.Reset(); | 423 del_smt.Reset(true); |
| 424 del_smt.BindString(0, po->cert().server_identifier()); | 424 del_smt.BindString(0, po->cert().server_identifier()); |
| 425 if (!del_smt.Run()) | 425 if (!del_smt.Run()) |
| 426 NOTREACHED() << "Could not delete a server bound cert from the DB."; | 426 NOTREACHED() << "Could not delete a server bound cert from the DB."; |
| 427 break; | 427 break; |
| 428 | 428 |
| 429 default: | 429 default: |
| 430 NOTREACHED(); | 430 NOTREACHED(); |
| 431 break; | 431 break; |
| 432 } | 432 } |
| 433 } | 433 } |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 510 if (backend_.get()) | 510 if (backend_.get()) |
| 511 backend_->SetClearLocalStateOnExit(clear_local_state); | 511 backend_->SetClearLocalStateOnExit(clear_local_state); |
| 512 } | 512 } |
| 513 | 513 |
| 514 void SQLiteServerBoundCertStore::Flush(const base::Closure& completion_task) { | 514 void SQLiteServerBoundCertStore::Flush(const base::Closure& completion_task) { |
| 515 if (backend_.get()) | 515 if (backend_.get()) |
| 516 backend_->Flush(completion_task); | 516 backend_->Flush(completion_task); |
| 517 else if (!completion_task.is_null()) | 517 else if (!completion_task.is_null()) |
| 518 MessageLoop::current()->PostTask(FROM_HERE, completion_task); | 518 MessageLoop::current()->PostTask(FROM_HERE, completion_task); |
| 519 } | 519 } |
| OLD | NEW |