]> git.proxmox.com Git - mirror_lxc.git/commitdiff
fix checking hook script exit code
authorDwight Engen <dwight.engen@oracle.com>
Mon, 15 Apr 2013 17:43:14 +0000 (13:43 -0400)
committerStéphane Graber <stgraber@ubuntu.com>
Tue, 16 Apr 2013 10:16:53 +0000 (12:16 +0200)
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@oracle.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
src/lxc/conf.c

index 917c0526b20e5ad60b337a2d102d29ab06615a62..cf97eeffd16c535fb47c0ad0905f2efce5b8a72d 100644 (file)
@@ -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;