minadbd: Support adb rescue getprop.

It dumps all the allowed properties, similar to `adb shell getprop`.

Bug: 134027350
Test: Run the command under rescue mode.
Change-Id: Ic0864ca0fb51505ec1e4f38af2464591aa576201
This commit is contained in:
Tao Bao 2019-06-04 11:20:00 -07:00
parent 1ef7f92871
commit d8db81a014

View file

@ -25,10 +25,10 @@
#include <functional>
#include <memory>
#include <set>
#include <string>
#include <string_view>
#include <thread>
#include <unordered_set>
#include <android-base/file.h>
#include <android-base/logging.h>
@ -156,8 +156,11 @@ static void RescueInstallHostService(unique_fd sfd, const std::string& args) {
}
}
// Answers the query on a given property. The result will be written to the given sfd. If given an
// empty string, dumps all the supported properties (similar to `adb shell getprop`) in lines, e.g.
// "[prop]: [value]".
static void RescueGetpropHostService(unique_fd sfd, const std::string& prop) {
static const std::unordered_set<std::string> kGetpropAllowedProps = {
static const std::set<std::string> kGetpropAllowedProps = {
"ro.build.date.utc",
"ro.build.fingerprint",
"ro.build.flavor",
@ -168,12 +171,22 @@ static void RescueGetpropHostService(unique_fd sfd, const std::string& prop) {
"ro.product.device",
"ro.product.vendor.device",
};
auto allowed = kGetpropAllowedProps.find(prop) != kGetpropAllowedProps.end();
if (!allowed) {
if (!prop.empty() && kGetpropAllowedProps.find(prop) == kGetpropAllowedProps.end()) {
return;
}
auto result = android::base::GetProperty(prop, "");
std::string result;
if (prop.empty()) {
for (const auto& key : kGetpropAllowedProps) {
auto value = android::base::GetProperty(key, "");
if (value.empty()) {
continue;
}
result += "[" + key + "]: [" + value + "]\n";
}
} else {
result = android::base::GetProperty(prop, "");
}
if (result.empty()) {
return;
}