From 47797a3e5992a6936c327fc410b8746405c06a4f Mon Sep 17 00:00:00 2001 From: Mrunal Patel Date: Fri, 30 Oct 2015 19:08:26 -0400 Subject: [PATCH 1/2] Skip if container command isn't /sbin/init Signed-off-by: Mrunal Patel --- systemdhook.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/systemdhook.c b/systemdhook.c index 2f654ab..327356c 100644 --- a/systemdhook.c +++ b/systemdhook.c @@ -304,7 +304,18 @@ int main(int argc, char *argv[]) } char *mount_label = YAJL_GET_STRING(v_mount); - fprintf(stdout, "Mount Label parsed as: %s", mount_label); + const char *cmd_path[] = { "Path", (const char *)0 }; + yajl_val v_cmd = yajl_tree_get(config_node, cmd_path, yajl_t_string); + if (!v_cmd) { + fprintf(stderr, "Path not found in config\n"); + goto out; + } + char *cmd = YAJL_GET_STRING(v_cmd); + + if (strcmp("/sbin/init", cmd)) { + fprintf(stdout, "Skipping as container command is %s, not /sbin/init\n", cmd); + goto success; + } if (!strncmp("prestart", argv[1], sizeof("prestart"))) { if (prestart(rootfs, id, target_pid, mount_label) != 0) { @@ -319,6 +330,7 @@ int main(int argc, char *argv[]) goto out; } +success: ret = 0; out: yajl_tree_free(node); From f8b18bd8b7c98418588c7ba47716a81c1a375cd2 Mon Sep 17 00:00:00 2001 From: Mrunal Patel Date: Mon, 2 Nov 2015 19:10:18 -0500 Subject: [PATCH 2/2] Check for basename 'init' or 'systemd' else skip hooks Signed-off-by: Mrunal Patel --- systemdhook.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/systemdhook.c b/systemdhook.c index 327356c..92d9ecc 100644 --- a/systemdhook.c +++ b/systemdhook.c @@ -312,7 +312,8 @@ int main(int argc, char *argv[]) } char *cmd = YAJL_GET_STRING(v_cmd); - if (strcmp("/sbin/init", cmd)) { + char *cmd_file_name = basename(cmd); + if (strcmp("init", cmd_file_name) && strcmp("systemd", cmd_file_name)) { fprintf(stdout, "Skipping as container command is %s, not /sbin/init\n", cmd); goto success; }