Allow setting read-only properties with value length > 92 characters

Bug: 23102347
Bug: 34954705
Test: read and write properties with value length > 92 characters
Change-Id: Ie196c1fdacc0489508c633e98fe9f4ad7a27dc6e
This commit is contained in:
Tom Cherry 2017-10-10 13:35:01 -07:00
parent 63a0008df7
commit 1cf8d699a4

View file

@ -57,6 +57,7 @@
#include "persistent_properties.h"
#include "util.h"
using android::base::StartsWith;
using android::base::StringPrintf;
using android::base::Timer;
@ -153,7 +154,7 @@ static uint32_t PropertySetImpl(const std::string& name, const std::string& valu
return PROP_ERROR_INVALID_NAME;
}
if (valuelen >= PROP_VALUE_MAX) {
if (valuelen >= PROP_VALUE_MAX && !StartsWith(name, "ro.")) {
LOG(ERROR) << "property_set(\"" << name << "\", \"" << value << "\") failed: "
<< "value too long";
return PROP_ERROR_INVALID_VALUE;
@ -162,7 +163,7 @@ static uint32_t PropertySetImpl(const std::string& name, const std::string& valu
prop_info* pi = (prop_info*) __system_property_find(name.c_str());
if (pi != nullptr) {
// ro.* properties are actually "write-once".
if (android::base::StartsWith(name, "ro.")) {
if (StartsWith(name, "ro.")) {
LOG(ERROR) << "property_set(\"" << name << "\", \"" << value << "\") failed: "
<< "property already set";
return PROP_ERROR_READ_ONLY_PROPERTY;
@ -180,7 +181,7 @@ static uint32_t PropertySetImpl(const std::string& name, const std::string& valu
// Don't write properties to disk until after we have read all default
// properties to prevent them from being overwritten by default values.
if (persistent_properties_loaded && android::base::StartsWith(name, "persist.")) {
if (persistent_properties_loaded && StartsWith(name, "persist.")) {
WritePersistentProperty(name, value);
}
property_changed(name, value);
@ -401,7 +402,7 @@ static void handle_property_set(SocketConnection& socket,
char* source_ctx = nullptr;
getpeercon(socket.socket(), &source_ctx);
if (android::base::StartsWith(name, "ctl.")) {
if (StartsWith(name, "ctl.")) {
if (check_control_mac_perms(value.c_str(), source_ctx, &cr)) {
handle_control_message(name.c_str() + 4, value.c_str());
if (!legacy_protocol) {