From f6ef5b8dd3f1b8d6af104304a9988ff1f8edd182 Mon Sep 17 00:00:00 2001 From: David Oberhollenzer Date: Fri, 8 May 2020 02:44:33 +0200 Subject: Implement a "subreaper" service flag For particularly hostile daemons. Signed-off-by: David Oberhollenzer --- lib/include/service.h | 2 ++ lib/init/rdsvc.c | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) (limited to 'lib') diff --git a/lib/include/service.h b/lib/include/service.h index 0fbf018..05ab8de 100644 --- a/lib/include/service.h +++ b/lib/include/service.h @@ -39,6 +39,8 @@ enum { /* truncate stdout */ SVC_FLAG_TRUNCATE_OUT = 0x01, + SVC_FLAG_SUB_REAPER = 0x08, + SVC_FLAG_HAS_EXEC = 0x10, }; diff --git a/lib/init/rdsvc.c b/lib/init/rdsvc.c index 09ed156..c461d98 100644 --- a/lib/init/rdsvc.c +++ b/lib/init/rdsvc.c @@ -204,6 +204,22 @@ static int svc_target(void *user, char *arg, rdline_t *rd) return 0; } +static int svc_subreaper(void *user, char *arg, rdline_t *rd) +{ + service_t *svc = user; + + if (try_unescape(arg, rd)) + return -1; + + if (strcmp(arg, "yes") == 0 || strcmp(arg, "on") == 0 || + strcmp(arg, "true") == 0) { + svc->flags |= SVC_FLAG_SUB_REAPER; + } else { + svc->flags &= ~SVC_FLAG_SUB_REAPER; + } + return 0; +} + static const cfg_param_t svc_params[] = { { "description", 0, svc_desc }, { "exec", 1, svc_exec }, @@ -212,6 +228,7 @@ static const cfg_param_t svc_params[] = { { "tty", 0, svc_tty }, { "before", 0, svc_before }, { "after", 0, svc_after }, + { "subreaper", 0, svc_subreaper }, }; service_t *rdsvc(int dirfd, const char *filename) -- cgit v1.2.3