Use W_EXITCODE to construct the wait status if sudo could not execute

the command.  Fixes the sudo exit value for exec(3) failure.
This commit is contained in:
Todd C. Miller
2016-08-31 08:39:26 -06:00
parent a9570e64ff
commit e147ba1fec
2 changed files with 7 additions and 2 deletions

View File

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

View File

@@ -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. */