diff --git a/src/shell.js b/src/shell.js index 9aae7e476..88fa86a1a 100644 --- a/src/shell.js +++ b/src/shell.js @@ -91,11 +91,13 @@ function sudo(tag, args, options, callback) { const sudoArgs = [ '-S' ]; // -S makes sudo read stdin for password if (options.preserveEnv) sudoArgs.push('-E'); // -E preserves environment - if (options.ipc) sudoArgs.push('--close-from=4'); // keep the ipc open. requires closefrom_override in sudoers file callback = once(callback); // exit may or may not be called after an 'error' - if (options.ipc) options.stdio = ['pipe', 'pipe', 'pipe', 'ipc']; + if (options.ipc) { + sudoArgs.push('--close-from=4'); // keep the ipc open. requires closefrom_override in sudoers file + options.stdio = ['pipe', 'pipe', 'pipe', 'ipc']; + } const spawnArgs = sudoArgs.concat(args); @@ -103,10 +105,10 @@ function sudo(tag, args, options, callback) { const cp = child_process.spawn(SUDO, spawnArgs, options); let stdoutResult = ''; - if (!options.streamStdout) cp.stdout.on('data', (data) => stdoutResult += data.toString('utf8')); + if (options.captureStdout) cp.stdout.on('data', (data) => stdoutResult += data.toString('utf8')); cp.on('exit', function (code, signal) { - if (code === 0) return callback(null, options.streamStdout ? null : stdoutResult); + if (code === 0) return callback(null, options.captureStdout ? stdoutResult : null); const e = new BoxError(BoxError.SHELL_ERROR, `${tag} exited with code ${code} signal ${signal}`); e.code = code; e.signal = signal; diff --git a/src/support.js b/src/support.js index be3fb0bc7..289ed6ec0 100644 --- a/src/support.js +++ b/src/support.js @@ -34,7 +34,7 @@ function sshInfo() { } async function getRemoteSupport() { - const [error, stdoutResult] = await safe(shell.promises.sudo('support', [ AUTHORIZED_KEYS_CMD, 'is-enabled', sshInfo().filePath ], {})); + const [error, stdoutResult] = await safe(shell.promises.sudo('support', [ AUTHORIZED_KEYS_CMD, 'is-enabled', sshInfo().filePath ], { captureStdout: true })); if (error) throw new BoxError(BoxError.FS_ERROR, error); return stdoutResult.trim() === 'true'; diff --git a/src/system.js b/src/system.js index f6cff8730..7810b2fd5 100644 --- a/src/system.js +++ b/src/system.js @@ -44,7 +44,7 @@ const REBOOT_CMD = path.join(__dirname, 'scripts/reboot.sh'); async function du(file) { assert.strictEqual(typeof file, 'string'); - const [error, stdoutResult] = await safe(shell.promises.sudo('system', [ DU_CMD, file ], {})); + const [error, stdoutResult] = await safe(shell.promises.sudo('system', [ DU_CMD, file ], { captureStdout: true })); if (error) throw new BoxError(BoxError.FS_ERROR, error); return parseInt(stdoutResult.trim(), 10); @@ -53,7 +53,7 @@ async function du(file) { async function hdparm(file) { assert.strictEqual(typeof file, 'string'); - const [error, stdoutResult] = await safe(shell.promises.sudo('system', [ HDPARM_CMD, file ], {})); + const [error, stdoutResult] = await safe(shell.promises.sudo('system', [ HDPARM_CMD, file ], { captureStdout: true })); if (error) throw new BoxError(BoxError.FS_ERROR, error); const lines = stdoutResult.split('\n');