diff options
author | Amin Hassani <ahassani@chromium.org> | 2020-09-16 11:19:28 -0700 |
---|---|---|
committer | Amin Hassani <ahassani@chromium.org> | 2020-09-17 10:17:36 -0700 |
commit | e53b39b8b9c5c0871841bbbb86f23657c0b7f91b (patch) | |
tree | 12746e5e7e4716ba7fc94d3ed5c1a36c4d47d474 /common/utils.cc | |
parent | a02a1f1dc837f22226499d9856a949fb180d099a (diff) | |
parent | 9956320ffa4edb340d20bd7f3c852a9e87437bd3 (diff) |
update_engine: Merge remote-tracking branch 'cros/upstream' into cros/master
Done with:
git merge cros/upstream --commit -s recursive
- Added EC key support and its unittests.
- Resolved a conlict on error codes. Since Android versions are not
uploading any UMA metrics, I gave the priority to the Android version
Since they can't be changed.
- Changed the openssl functions to get1 version (from get0) version
because of a current issue with gale. Once the issue is resolved we
need to change them back.
- Some remaining styling issues fixed by clang-format
BUG=b:163153182
TEST=CQ passes
TEST=unittests
Change-Id: Ib95034422b92433ce26e28336bc4806b34910d38
Diffstat (limited to 'common/utils.cc')
-rw-r--r-- | common/utils.cc | 53 |
1 files changed, 51 insertions, 2 deletions
diff --git a/common/utils.cc b/common/utils.cc index 50b45fa0..9e1e6c58 100644 --- a/common/utils.cc +++ b/common/utils.cc @@ -30,6 +30,7 @@ #include <sys/resource.h> #include <sys/stat.h> #include <sys/types.h> +#include <time.h> #include <unistd.h> #include <algorithm> @@ -819,7 +820,7 @@ ErrorCode GetBaseErrorCode(ErrorCode code) { return base_code; } -string StringVectorToString(const vector<string> &vec_str) { +string StringVectorToString(const vector<string>& vec_str) { string str = "["; for (vector<string>::const_iterator i = vec_str.begin(); i != vec_str.end(); ++i) { @@ -848,7 +849,7 @@ string CalculateP2PFileId(const brillo::Blob& payload_hash, encoded_hash.c_str()); } -bool ConvertToOmahaInstallDate(Time time, int *out_num_days) { +bool ConvertToOmahaInstallDate(Time time, int* out_num_days) { time_t unix_time = time.ToTimeT(); // Output of: date +"%s" --date="Jan 1, 2007 0:00 PST". const time_t kOmahaEpoch = 1167638400; @@ -978,10 +979,58 @@ void ParseRollbackKeyVersion(const string& raw_version, } } +string GetFilePath(int fd) { + base::FilePath proc("/proc/self/fd/" + std::to_string(fd)); + base::FilePath file_name; + + if (!base::ReadSymbolicLink(proc, &file_name)) { + return "not found"; + } + return file_name.value(); +} + +string GetTimeAsString(time_t utime) { + struct tm tm; + CHECK_EQ(localtime_r(&utime, &tm), &tm); + char str[16]; + CHECK_EQ(strftime(str, sizeof(str), "%Y%m%d-%H%M%S", &tm), 15u); + return str; +} + string GetExclusionName(const string& str_to_convert) { return base::NumberToString(base::StringPieceHash()(str_to_convert)); } +static bool ParseTimestamp(const std::string& str, int64_t* out) { + if (!base::StringToInt64(str, out)) { + LOG(WARNING) << "Invalid timestamp: " << str; + return false; + } + return true; +} + +ErrorCode IsTimestampNewer(const std::string& old_version, + const std::string& new_version) { + if (old_version.empty() || new_version.empty()) { + LOG(WARNING) + << "One of old/new timestamp is empty, permit update anyway. Old: " + << old_version << " New: " << new_version; + return ErrorCode::kSuccess; + } + int64_t old_ver = 0; + if (!ParseTimestamp(old_version, &old_ver)) { + return ErrorCode::kError; + } + int64_t new_ver = 0; + if (!ParseTimestamp(new_version, &new_ver)) { + return ErrorCode::kDownloadManifestParseError; + } + if (old_ver > new_ver) { + return ErrorCode::kPayloadTimestampError; + } + return ErrorCode::kSuccess; +} + } // namespace utils } // namespace chromeos_update_engine |