[lxc-devel] [PATCH v2] fix checking hook script exit code

Dwight Engen dwight.engen at oracle.com
Mon Apr 15 17:43:14 UTC 2013


pclose returns the exit status from wait, we need to check that to see if
the script itself failed or not. Tested a script that returned 0, 1, and
also one that did a sleep and then was killed by a signal.

Signed-off-by: Dwight Engen <dwight.engen at oracle.com>
---
 src/lxc/conf.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/lxc/conf.c b/src/lxc/conf.c
index c416da5..43cbbd8 100644
--- a/src/lxc/conf.c
+++ b/src/lxc/conf.c
@@ -299,6 +299,7 @@ static int run_buffer(char *buffer)
 {
 	FILE *f;
 	char *output;
+	int ret;
 
 	f = popen(buffer, "r");
 	if (!f) {
@@ -318,9 +319,17 @@ static int run_buffer(char *buffer)
 
 	free(output);
 
-	if (pclose(f) == -1) {
+	ret = pclose(f);
+	if (ret == -1) {
 		SYSERROR("Script exited on error");
 		return -1;
+	} else if (WIFEXITED(ret) && WEXITSTATUS(ret) != 0) {
+		ERROR("Script exited with status %d", WEXITSTATUS(ret));
+		return -1;
+	} else if (WIFSIGNALED(ret)) {
+		ERROR("Script terminated by signal %d (%s)", WTERMSIG(ret),
+		      strsignal(WTERMSIG(ret)));
+		return -1;
 	}
 
 	return 0;
-- 
1.7.12.3






More information about the lxc-devel mailing list