You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
2.5 KiB
67 lines
2.5 KiB
4 months ago
|
// Copyright 2016 The Chromium OS Authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style license that can be
|
||
|
// found in the LICENSE file.
|
||
|
|
||
|
#ifndef LIBBRILLO_INSTALL_ATTRIBUTES_LIBINSTALLATTRIBUTES_H_
|
||
|
#define LIBBRILLO_INSTALL_ATTRIBUTES_LIBINSTALLATTRIBUTES_H_
|
||
|
|
||
|
#include <map>
|
||
|
#include <string>
|
||
|
|
||
|
#include <base/files/file_path.h>
|
||
|
#include <brillo/brillo_export.h>
|
||
|
|
||
|
// Simple caching reader for the (verified) install attributes, a TPM-backed
|
||
|
// write once read many store. Install attributes may be written exactly once
|
||
|
// by a single, atomic write-and-lock operation encompassing zero or more
|
||
|
// attributes. Once locked, install attributes cannot be re-written unless TPM
|
||
|
// is reset (eg. by powerwashing the device).
|
||
|
class BRILLO_EXPORT InstallAttributesReader {
|
||
|
public:
|
||
|
static const char kAttrMode[];
|
||
|
|
||
|
// Constants for the possible device modes.
|
||
|
static const char kDeviceModeConsumer[];
|
||
|
static const char kDeviceModeEnterprise[];
|
||
|
static const char kDeviceModeEnterpriseAD[];
|
||
|
static const char kDeviceModeLegacyRetail[];
|
||
|
static const char kDeviceModeConsumerKiosk[];
|
||
|
|
||
|
InstallAttributesReader();
|
||
|
virtual ~InstallAttributesReader();
|
||
|
|
||
|
// Try to load install attributes (unless cached already) and return the
|
||
|
// attribute for |key| or an empty string in case |key| doesn't exist or in
|
||
|
// case install attributes couldn't (yet) be loaded. The latter is expected
|
||
|
// during OOBE (install attributes haven't yet been finalized) or early in the
|
||
|
// boot sequence (install attributes haven't yet been verified).
|
||
|
const std::string& GetAttribute(const std::string& key);
|
||
|
|
||
|
// Try to load install attributes (unless cached already) and return whether
|
||
|
// they have yet been written-and-locked.
|
||
|
bool IsLocked();
|
||
|
|
||
|
protected:
|
||
|
// Attributes cache.
|
||
|
std::map<std::string, std::string> attributes_;
|
||
|
|
||
|
// Path to the *verified* install attributes file on disk.
|
||
|
base::FilePath install_attributes_path_;
|
||
|
|
||
|
// Whether install attributes have been read successfully. Reading a file
|
||
|
// containing an empty attributes proto indicates consumer mode and counts as
|
||
|
// successful, too.
|
||
|
bool initialized_ = false;
|
||
|
|
||
|
private:
|
||
|
// Try to load the verified install attributes from disk. This is expected to
|
||
|
// fail when install attributes haven't yet been finalized (OOBE) or verified
|
||
|
// (early in the boot sequence).
|
||
|
void TryToLoad();
|
||
|
|
||
|
// Empty string to return on error.
|
||
|
std::string empty_string_;
|
||
|
};
|
||
|
|
||
|
#endif // LIBBRILLO_INSTALL_ATTRIBUTES_LIBINSTALLATTRIBUTES_H_
|