From 7a31ab675e30de858c690dcff8f1daf447358dae Mon Sep 17 00:00:00 2001 From: Tao Bao Date: Mon, 3 Jun 2019 12:10:54 -0700 Subject: minadbd: More allowed properties. Most of these properties are already part of the fingerprint. This CL allows querying them directly, instead of encouraging users to decode from fingerprints. Bug: 134027350 Test: Boot into rescue mode on taimen. Run `adb rescue getprop` with new props. Change-Id: Id4667fcaf0e908c391085b22e22c957acd01d9c4 Merged-In: Id4667fcaf0e908c391085b22e22c957acd01d9c4 (cherry picked from commit 3b9ef341be618885407bc302ffc235585bc01c5d) --- minadbd/minadbd_services.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/minadbd/minadbd_services.cpp b/minadbd/minadbd_services.cpp index 1c4c0f494..e271c36fe 100644 --- a/minadbd/minadbd_services.cpp +++ b/minadbd/minadbd_services.cpp @@ -158,8 +158,15 @@ static void RescueInstallHostService(unique_fd sfd, const std::string& args) { static void RescueGetpropHostService(unique_fd sfd, const std::string& prop) { static const std::unordered_set kGetpropAllowedProps = { - "ro.build.fingerprint", "ro.build.date.utc", + "ro.build.fingerprint", + "ro.build.flavor", + "ro.build.id", + "ro.build.product", + "ro.build.tags", + "ro.build.version.incremental", + "ro.product.device", + "ro.product.vendor.device", }; auto allowed = kGetpropAllowedProps.find(prop) != kGetpropAllowedProps.end(); if (!allowed) { -- cgit v1.2.3 From 5359d777e624ddc6b50ae7221d61e83ff52bab80 Mon Sep 17 00:00:00 2001 From: Tao Bao Date: Tue, 4 Jun 2019 11:20:00 -0700 Subject: 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 Merged-In: Ic0864ca0fb51505ec1e4f38af2464591aa576201 (cherry picked from commit d8db81a01464c53c9bd6dbff32194faed85b6ccc) --- minadbd/minadbd_services.cpp | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/minadbd/minadbd_services.cpp b/minadbd/minadbd_services.cpp index e271c36fe..7181fcf45 100644 --- a/minadbd/minadbd_services.cpp +++ b/minadbd/minadbd_services.cpp @@ -25,10 +25,10 @@ #include #include +#include #include #include #include -#include #include #include @@ -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 kGetpropAllowedProps = { + static const std::set 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; } -- cgit v1.2.3 From e3cc180d3121c98a5b5c14e0dbaa080169b46ae6 Mon Sep 17 00:00:00 2001 From: Tao Bao Date: Mon, 10 Jun 2019 12:41:44 -0700 Subject: minadbd: `adb rescue getprop` returns newline-terminated result. This change addresses the comment in [1], which makes the results of `adb shell getprop foo` and `adb rescue getprop foo` more consistent. That is, both will return newline-terminated results now. [1] https://r.android.com/c/platform/bootable/recovery/+/976340/3/minadbd/minadbd_services.cpp#188 Fixes: 134027350 Test: Run the following commands on taimen (under rescue mode): `adb rescue getprop ro.build.fingerprint` `adb rescue getprop ro.nonexistent` `adb rescue getprop` Change-Id: I5af47f8ea4d569b8507e259daef87749c0945f47 Merged-In: I5af47f8ea4d569b8507e259daef87749c0945f47 (cherry picked from commit 57a27890cec050d36a0d2d6e7db008cd22eb0560) --- minadbd/minadbd_services.cpp | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/minadbd/minadbd_services.cpp b/minadbd/minadbd_services.cpp index 7181fcf45..68f940cd8 100644 --- a/minadbd/minadbd_services.cpp +++ b/minadbd/minadbd_services.cpp @@ -156,9 +156,10 @@ 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]". +// Answers the query on a given property |prop|, by writing the result to the given |sfd|. The +// result will be newline-terminated, so nonexistent or nonallowed query will be answered with "\n". +// If given an empty string, dumps all the supported properties (analogous to `adb shell getprop`) +// in lines, e.g. "[prop]: [value]". static void RescueGetpropHostService(unique_fd sfd, const std::string& prop) { static const std::set kGetpropAllowedProps = { "ro.build.date.utc", @@ -171,10 +172,6 @@ static void RescueGetpropHostService(unique_fd sfd, const std::string& prop) { "ro.product.device", "ro.product.vendor.device", }; - if (!prop.empty() && kGetpropAllowedProps.find(prop) == kGetpropAllowedProps.end()) { - return; - } - std::string result; if (prop.empty()) { for (const auto& key : kGetpropAllowedProps) { @@ -184,11 +181,11 @@ static void RescueGetpropHostService(unique_fd sfd, const std::string& prop) { } result += "[" + key + "]: [" + value + "]\n"; } - } else { - result = android::base::GetProperty(prop, ""); + } else if (kGetpropAllowedProps.find(prop) != kGetpropAllowedProps.end()) { + result = android::base::GetProperty(prop, "") + "\n"; } if (result.empty()) { - return; + result = "\n"; } if (!android::base::WriteFully(sfd, result.data(), result.size())) { exit(kMinadbdHostSocketIOError); -- cgit v1.2.3