]> granicus.if.org Git - sudo/commitdiff
Use W_EXITCODE to construct the wait status if sudo could not execute
authorTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 31 Aug 2016 14:39:26 +0000 (08:39 -0600)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 31 Aug 2016 14:39:26 +0000 (08:39 -0600)
the command.  Fixes the sudo exit value for exec(3) failure.

include/sudo_compat.h
src/sudo.c

index ee65655a6c8920b36204f3cdcea774fda8722d33..2e35131cef64227f4ed55d944e6e1e0b69f2fed5 100644 (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
index e61aed2a4682f2f683e5ce35cbf9f97598d1e8d5..8fd910f45b4173b86b745951a49bba6e67f97e26 100644 (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. */