mirror of
https://github.com/troglobit/finit.git
synced 2026-10-29 12:40:44 +00:00
Fix in-service cgroup parser regression
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
1 parent
36c6aa73aa
commit
9ee2be121f
1 file changed
+14
-6
+14
-6
@@ -1164,9 +1164,14 @@ static void parse_env(svc_t *svc, char *env)
|
|||||||
strlcpy(svc->env, env, sizeof(svc->env));
|
strlcpy(svc->env, env, sizeof(svc->env));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the @cgroup argument can be, e.g., .system:mem.max:1234 or just the
|
||||||
|
* default group with some cfg, e.g., :mem.max:1234 as a side effect,
|
||||||
|
* cgroupinit also work, selecting group init.
|
||||||
|
*/
|
||||||
static void parse_cgroup(svc_t *svc, char *cgroup)
|
static void parse_cgroup(svc_t *svc, char *cgroup)
|
||||||
{
|
{
|
||||||
char *ptr = cgroup;
|
char *ptr = NULL;
|
||||||
|
|
||||||
if (!cgroup)
|
if (!cgroup)
|
||||||
return;
|
return;
|
||||||
@@ -1175,10 +1180,14 @@ static void parse_cgroup(svc_t *svc, char *cgroup)
|
|||||||
ptr = strchr(cgroup, ':');
|
ptr = strchr(cgroup, ':');
|
||||||
if (ptr)
|
if (ptr)
|
||||||
*ptr++ = 0;
|
*ptr++ = 0;
|
||||||
|
group:
|
||||||
strlcpy(svc->cgroup.name, &cgroup[1], sizeof(svc->cgroup.name));
|
strlcpy(svc->cgroup.name, &cgroup[1], sizeof(svc->cgroup.name));
|
||||||
if (!ptr)
|
if (!ptr)
|
||||||
return;
|
return;
|
||||||
}
|
} else if (cgroup[0] == ':') {
|
||||||
|
ptr = &cgroup[1];
|
||||||
|
} else
|
||||||
|
goto group;
|
||||||
|
|
||||||
if (strlen(ptr) >= sizeof(svc->cgroup)) {
|
if (strlen(ptr) >= sizeof(svc->cgroup)) {
|
||||||
errx(1, "%s: cgroup settings too long (>%zu chars)", svc_ident(svc, NULL, 0), sizeof(svc->cgroup));
|
errx(1, "%s: cgroup settings too long (>%zu chars)", svc_ident(svc, NULL, 0), sizeof(svc->cgroup));
|
||||||
@@ -1508,10 +1517,9 @@ int service_register(int type, char *cfg, struct rlimit rlimit[], char *file)
|
|||||||
ready_script = arg;
|
ready_script = arg;
|
||||||
else if (MATCH_CMD(cmd, "env:", arg))
|
else if (MATCH_CMD(cmd, "env:", arg))
|
||||||
env = arg;
|
env = arg;
|
||||||
else if (MATCH_CMD(cmd, "cgroup:", arg))
|
/* catch both cgroup: and cgroup. handled in parse_cgroup() */
|
||||||
cgroup = arg; /* only settings */
|
else if (MATCH_CMD(cmd, "cgroup", arg))
|
||||||
else if (MATCH_CMD(cmd, "cgroup.", arg))
|
cgroup = arg;
|
||||||
cgroup = arg; /* with group */
|
|
||||||
else if (MATCH_CMD(cmd, "conflict:", arg))
|
else if (MATCH_CMD(cmd, "conflict:", arg))
|
||||||
conflict = arg;
|
conflict = arg;
|
||||||
else if (MATCH_CMD(cmd, "if:", arg))
|
else if (MATCH_CMD(cmd, "if:", arg))
|
||||||
|
|||||||
Reference in new issue
Block a user