misc-progs: setuid: Return exit code from called process

This patch will return the exit code from the called process which has
not been done before. This made it more difficult to catch any
unsuccessful calls from the web UI.

Partly Fixes: #12863
Tested-by: Jon Murphy <jon.murphy@ipfire.org>
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
This commit is contained in:
Michael Tremer
2023-05-24 09:08:41 +00:00
parent db9c7fb826
commit ed1a24686c

View File

@@ -104,16 +104,20 @@ static int system_core(char* command, char** args, uid_t uid, gid_t gid, char *e
}
default: /* parent */
do {
if (waitpid(pid, &status, 0) == -1) {
if (errno != EINTR)
return -1;
} else {
return status;
}
} while (1);
}
// Wait until the child process has finished
waitpid(pid, &status, 0);
// The child was terminated by a signal
if (WIFSIGNALED(status))
return 128 + WTERMSIG(status);
// Return the exit code if available
if (WIFEXITED(status))
return WEXITSTATUS(status);
// Something unexpected happened, exiting with error
return EXIT_FAILURE;
}
}
int run(char* command, char** argv) {