From: Todd C. Miller Date: Wed, 31 Aug 2016 14:39:26 +0000 (-0600) Subject: Use W_EXITCODE to construct the wait status if sudo could not execute X-Git-Tag: SUDO_1_8_18^2~45 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e147ba1fecd96e74b9357fe59e954575b3359235;p=sudo Use W_EXITCODE to construct the wait status if sudo could not execute the command. Fixes the sudo exit value for exec(3) failure. --- diff --git a/include/sudo_compat.h b/include/sudo_compat.h index ee65655a6..2e35131ce 100644 --- a/include/sudo_compat.h +++ b/include/sudo_compat.h @@ -284,6 +284,11 @@ extern int errno; # define WCOREDUMP(x) ((x) & 0x80) #endif +/* W_EXITCODE is not POSIX but the encoding of wait status is. */ +#ifndef W_EXITCODE +# define W_EXITCODE(ret, sig) ((ret) << 8 | (sig)) +#endif + /* Number of bits in a byte. */ #ifndef NBBY # ifdef __NBBY diff --git a/src/sudo.c b/src/sudo.c index e61aed2a4..8fd910f45 100644 --- a/src/sudo.c +++ b/src/sudo.c @@ -1130,13 +1130,14 @@ done: /* * Run the command and wait for it to complete. + * Returns wait status suitable for use with the wait(2) macros. */ int run_command(struct command_details *details) { struct plugin_container *plugin; struct command_status cstat; - int status = 1; + int status = W_EXITCODE(1, 0); debug_decl(run_command, SUDO_DEBUG_EXEC) cstat.type = CMD_INVALID; @@ -1155,7 +1156,6 @@ run_command(struct command_details *details) "calling I/O close with errno %d", cstat.val); iolog_close(plugin, 0, cstat.val); } - status = 1; break; case CMD_WSTATUS: /* Command ran, exited or was killed. */