init: expand arguments of services when they start
Arguments of commands are expanded based on properties if they contain ${property.name}, however this is not currently done for arguments of services. This patch makes it that arguments of services are expanded each time that the service starts at the point immediately before execve(). Bug: 28788401 Change-Id: Iba581a8377e25a6478d4d2ec2e8b29e181d8640c
This commit is contained in:
parent
515f091f5e
commit
b79e076e5e
1 changed files with 12 additions and 4 deletions
|
@ -460,13 +460,21 @@ bool Service::Start() {
|
|||
}
|
||||
}
|
||||
|
||||
std::vector<std::string> expanded_args;
|
||||
std::vector<char*> strs;
|
||||
for (const auto& s : args_) {
|
||||
strs.push_back(const_cast<char*>(s.c_str()));
|
||||
expanded_args.resize(args_.size());
|
||||
strs.push_back(const_cast<char*>(args_[0].c_str()));
|
||||
for (std::size_t i = 1; i < args_.size(); ++i) {
|
||||
if (!expand_props(args_[i], &expanded_args[i])) {
|
||||
ERROR("%s: cannot expand '%s'\n", args_[0].c_str(), args_[i].c_str());
|
||||
_exit(127);
|
||||
}
|
||||
strs.push_back(const_cast<char*>(expanded_args[i].c_str()));
|
||||
}
|
||||
strs.push_back(nullptr);
|
||||
if (execve(args_[0].c_str(), (char**) &strs[0], (char**) ENV) < 0) {
|
||||
ERROR("cannot execve('%s'): %s\n", args_[0].c_str(), strerror(errno));
|
||||
|
||||
if (execve(strs[0], (char**) &strs[0], (char**) ENV) < 0) {
|
||||
ERROR("cannot execve('%s'): %s\n", strs[0], strerror(errno));
|
||||
}
|
||||
|
||||
_exit(127);
|
||||
|
|
Loading…
Reference in a new issue