| Index: chrome/browser/chromeos/policy/device_local_account_policy_store.cc
|
| diff --git a/chrome/browser/chromeos/policy/device_local_account_policy_store.cc b/chrome/browser/chromeos/policy/device_local_account_policy_store.cc
|
| index 553d5cf7077bbf5a85842aea0691389ddf1f3d3e..527a5d4175d5182c02ef9458dd062312b47cea3e 100644
|
| --- a/chrome/browser/chromeos/policy/device_local_account_policy_store.cc
|
| +++ b/chrome/browser/chromeos/policy/device_local_account_policy_store.cc
|
| @@ -45,6 +45,7 @@ void DeviceLocalAccountPolicyStore::Store(
|
| const em::PolicyFetchResponse& policy) {
|
| weak_factory_.InvalidateWeakPtrs();
|
| CheckKeyAndValidate(
|
| + true,
|
| make_scoped_ptr(new em::PolicyFetchResponse(policy)),
|
| base::Bind(&DeviceLocalAccountPolicyStore::StoreValidatedPolicy,
|
| weak_factory_.GetWeakPtr()));
|
| @@ -59,6 +60,7 @@ void DeviceLocalAccountPolicyStore::ValidateLoadedPolicyBlob(
|
| scoped_ptr<em::PolicyFetchResponse> policy(new em::PolicyFetchResponse());
|
| if (policy->ParseFromString(policy_blob)) {
|
| CheckKeyAndValidate(
|
| + false,
|
| policy.Pass(),
|
| base::Bind(&DeviceLocalAccountPolicyStore::UpdatePolicy,
|
| weak_factory_.GetWeakPtr()));
|
| @@ -147,16 +149,19 @@ void DeviceLocalAccountPolicyStore::HandleStoreResult(bool success) {
|
| }
|
|
|
| void DeviceLocalAccountPolicyStore::CheckKeyAndValidate(
|
| + bool valid_timestamp_required,
|
| scoped_ptr<em::PolicyFetchResponse> policy,
|
| const UserCloudPolicyValidator::CompletionCallback& callback) {
|
| device_settings_service_->GetOwnershipStatusAsync(
|
| base::Bind(&DeviceLocalAccountPolicyStore::Validate,
|
| weak_factory_.GetWeakPtr(),
|
| + valid_timestamp_required,
|
| base::Passed(&policy),
|
| callback));
|
| }
|
|
|
| void DeviceLocalAccountPolicyStore::Validate(
|
| + bool valid_timestamp_required,
|
| scoped_ptr<em::PolicyFetchResponse> policy_response,
|
| const UserCloudPolicyValidator::CompletionCallback& callback,
|
| chromeos::DeviceSettingsService::OwnershipStatus ownership_status) {
|
| @@ -175,9 +180,14 @@ void DeviceLocalAccountPolicyStore::Validate(
|
| background_task_runner()));
|
| validator->ValidateUsername(account_id_);
|
| validator->ValidatePolicyType(dm_protocol::kChromePublicAccountPolicyType);
|
| + // The timestamp is verified when storing a new policy downloaded from the
|
| + // server but not when loading a cached policy from disk.
|
| + // See SessionManagerOperation::ValidateDeviceSettings for the rationale.
|
| validator->ValidateAgainstCurrentPolicy(
|
| policy(),
|
| - CloudPolicyValidatorBase::TIMESTAMP_REQUIRED,
|
| + valid_timestamp_required
|
| + ? CloudPolicyValidatorBase::TIMESTAMP_REQUIRED
|
| + : CloudPolicyValidatorBase::TIMESTAMP_NOT_REQUIRED,
|
| CloudPolicyValidatorBase::DM_TOKEN_REQUIRED);
|
| validator->ValidatePayload();
|
| validator->ValidateSignature(*key->public_key(), false);
|
|
|