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.en...@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



------------------------------------------------------------------------------
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis & visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter
_______________________________________________
Lxc-devel mailing list
Lxc-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/lxc-devel

Reply via email to