Commit 8e7da691 by Dwight Engen Committed by Stéphane Graber

fix checking hook script exit code

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: 's avatarDwight Engen <dwight.engen@oracle.com> Acked-by: 's avatarSerge E. Hallyn <serge.hallyn@ubuntu.com>
parent 2796cf79
......@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment