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().
Change-Id: Iba581a8377e25a6478d4d2ec2e8b29e181d8640c
This commit is contained in:
parent
b67fed557f
commit
bac3536cc9
1 changed files with 12 additions and 4 deletions
|
|
@ -471,13 +471,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…
Add table
Reference in a new issue