Initial support for templating and instantiating services

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
Joachim Wiberg committed 2023-04-24 20:14:30 +02:00
1 parent 334d4a708a
commit 700c32fd73
5 files changed
+139 -13

No files matched your search

+16 -8
View File
@@ -253,18 +253,18 @@ static char *conf(char *path, size_t len, char *name, int creat)
int serv_enable(char *arg)
{
char src[strlen(arg) + 6];
size_t arglen, len;
char corr[40];
char *ptr;
if (!arg || !arg[0]) {
WARNX("missing argument to enable, may be one of:");
return serv_list("available");
}
if (!strstr(arg, ".conf")) {
snprintf(corr, sizeof(corr), "%s.conf", arg);
arg = corr;
}
strlcpy(src, arg, sizeof(src));
if (!strstr(src, ".conf"))
strlcat(src, ".conf", sizeof(src));
if (chdir(finit_rcsd))
ERR(72, "failed cd %s", finit_rcsd);
@@ -272,13 +272,21 @@ int serv_enable(char *arg)
if (icreate && mkdir("enabled", 0755) && EEXIST != errno)
ERR(73, "failed creating %s/enabled directory", finit_rcsd);
len = snprintf(NULL, 0, "%s/available/%s", finit_rcsd, arg);
len = snprintf(NULL, 0, "%s/available/%s", finit_rcsd, src);
arglen = snprintf(NULL, 0, "%s/enabled/%s", finit_rcsd, arg);
char argpath[arglen + 1], path[len + 1];
snprintf(path, sizeof(path), "%s/available/%s", finit_rcsd, arg);
snprintf(path, sizeof(path), "%s/available/%s", finit_rcsd, src);
/* check for template instatiation */
ptr = strchr(path, '@');
if (ptr++) {
*ptr = 0;
strlcat(path, ".conf", sizeof(path));
}
if (!fexist(path))
ERRX(72, "cannot find %s", path);
ERRX(72, "cannot find %s%s", ptr ? "template ": "", path);
snprintf(argpath, sizeof(argpath), "%s/enabled/%s", finit_rcsd, arg);
if (fexist(argpath))