Skip to content

Commit

Permalink
initctl: touch does not support template services
Browse files Browse the repository at this point in the history
Fixes #403

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
  • Loading branch information
troglobit committed Apr 3, 2024
1 parent 052136c commit 7b501f2
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 0 deletions.
10 changes: 10 additions & 0 deletions src/serv.c
Original file line number Diff line number Diff line change
Expand Up @@ -374,6 +374,15 @@ int serv_touch(char *arg)
return serv_list("enabled");
}

/* 1. Try /etc/finit.d/enabled/$arg.conf to handle template@.conf */
paste(path, sizeof(path), finit_rcsd, "enabled/");
strlcat(path, arg, sizeof(path));
if (!suffix(path, sizeof(path), ".conf") && fexist(path)) {
fn = path;
goto touchit;
}

/* 2. Try /etc/finit.d/available/$arg.conf and other combos (legacy) */
fn = conf(path, sizeof(path), arg, 0);
if (!fexist(fn)) {
if (!strstr(arg, "finit.conf"))
Expand All @@ -385,6 +394,7 @@ int serv_touch(char *arg)
fn = path;
}

touchit:
/* libite:touch() follows symlinks */
if (utimensat(AT_FDCWD, fn, NULL, AT_SYMLINK_NOFOLLOW))
ERR(noerr ? 0 : 71, "failed marking %s for reload", fn);
Expand Down
20 changes: 20 additions & 0 deletions src/util.h
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,26 @@ static inline int paste(char *buf, size_t len, const char *dir, const char *file
fisslashdir(dir) ? "" : file[0] == '/' ? "" : "/", file);
}

/* ensure path has suffix */
static inline int suffix(char *path, size_t len, const char *sfx)
{
size_t slen = strlen(sfx);
size_t plen = strlen(path);

if (plen < slen)
slen = strlcat(path, sfx, len);
else {
plen -= slen;
if (strcmp(&path[plen], sfx))
slen = strlcat(path, sfx, len);
}

if (slen >= len)
return -1;

return 0;
}

#endif /* FINIT_UTIL_H_ */

/**
Expand Down

0 comments on commit 7b501f2

Please sign in to comment.