ueventd: deprecate paths without /etc/

ueventd.rc scripts belong in the /etc/ directory of their given
partition, not the root of the partition.  This can cause problems,
especially since Android.bp cannot write to the root directly, forcing
vendors to use Android.mk for these files.  Note that
/system/etc/ueventd.rc moved long ago.

Test: Tree-hugger
Change-Id: I2dcaafc3c3f687f76ab6bc38af979c8b43346db0
This commit is contained in:
Tom Cherry 2020-12-11 09:26:55 -08:00 committed by Yifan Hong
parent f2d359cbaa
commit 71dd7064cc
4 changed files with 20 additions and 7 deletions

View file

@ -16,6 +16,7 @@
#include "ueventd.h"
#include <android/api-level.h>
#include <ctype.h>
#include <dirent.h>
#include <fcntl.h>
@ -266,6 +267,17 @@ void ColdBoot::Run() {
LOG(INFO) << "Coldboot took " << cold_boot_timer.duration().count() / 1000.0f << " seconds";
}
static UeventdConfiguration GetConfiguration() {
// TODO: Remove these legacy paths once Android S is no longer supported.
if (android::base::GetIntProperty("ro.product.first_api_level", 10000) <= __ANDROID_API_S__) {
auto hardware = android::base::GetProperty("ro.hardware", "");
return ParseConfig({"/system/etc/ueventd.rc", "/vendor/ueventd.rc", "/odm/ueventd.rc",
"/ueventd." + hardware + ".rc"});
}
return ParseConfig({"/system/etc/ueventd.rc"});
}
int ueventd_main(int argc, char** argv) {
/*
* init sets the umask to 077 for forked processes. We need to
@ -283,7 +295,7 @@ int ueventd_main(int argc, char** argv) {
std::vector<std::unique_ptr<UeventHandler>> uevent_handlers;
auto ueventd_configuration = ParseConfig("/system/etc/ueventd.rc");
auto ueventd_configuration = GetConfiguration();
uevent_handlers.emplace_back(std::make_unique<DeviceHandler>(
std::move(ueventd_configuration.dev_permissions),

View file

@ -230,7 +230,7 @@ Result<void> SubsystemParser::EndSection() {
return {};
}
UeventdConfiguration ParseConfig(const std::string& config) {
UeventdConfiguration ParseConfig(const std::vector<std::string>& configs) {
Parser parser;
UeventdConfiguration ueventd_configuration;
@ -260,7 +260,9 @@ UeventdConfiguration ParseConfig(const std::string& config) {
std::bind(ParseEnabledDisabledLine, _1,
&ueventd_configuration.enable_parallel_restorecon));
parser.ParseConfig(config);
for (const auto& config : configs) {
parser.ParseConfig(config);
}
return ueventd_configuration;
}

View file

@ -36,7 +36,7 @@ struct UeventdConfiguration {
bool enable_parallel_restorecon = false;
};
UeventdConfiguration ParseConfig(const std::string& config);
UeventdConfiguration ParseConfig(const std::vector<std::string>& configs);
} // namespace init
} // namespace android

View file

@ -1,6 +1,5 @@
import /vendor/ueventd.rc
import /odm/ueventd.rc
import /ueventd.${ro.hardware}.rc
import /vendor/etc/ueventd.rc
import /odm/etc/ueventd.rc
firmware_directories /etc/firmware/ /odm/firmware/ /vendor/firmware/ /firmware/image/
uevent_socket_rcvbuf_size 16M