From 189afc8dc2a4a01e6e97493e167ad6d2db6ff065 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Thu, 13 Apr 2017 12:47:55 -0700 Subject: test: enable setuid/setgid test Refactor test for situations where it was expected to fail. Move from disabled directory to parallel. PR-URL: https://github.com/nodejs/node/pull/12403 Reviewed-By: James M Snell Reviewed-By: Colin Ihrig Reviewed-By: Yuta Hiroto Reviewed-By: Sakthipriyan Vairamani Reviewed-By: Santiago Gimeno --- test/disabled/test-setuidgid.js | 44 ------------------- test/parallel/test-process-setuid-setgid.js | 68 +++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 44 deletions(-) delete mode 100644 test/disabled/test-setuidgid.js create mode 100644 test/parallel/test-process-setuid-setgid.js diff --git a/test/disabled/test-setuidgid.js b/test/disabled/test-setuidgid.js deleted file mode 100644 index 25d29e7981..0000000000 --- a/test/disabled/test-setuidgid.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -'use strict'; -// Requires special privileges -const common = require('../common'); -const assert = require('assert'); - -var oldgid = process.getgid(); -process.setgid('nobody'); -var newgid = process.getgid(); -assert.notStrictEqual(newgid, oldgid, 'gids expected to be different'); - -var olduid = process.getuid(); -process.setuid('nobody'); -var newuid = process.getuid(); -assert.notStrictEqual(newuid, olduid, 'uids expected to be different'); - -try { - process.setuid('nobody1234'); -} catch (e) { - assert.strictEqual(e.message, - 'failed to resolve group', - 'unexpected error message' - ); -} diff --git a/test/parallel/test-process-setuid-setgid.js b/test/parallel/test-process-setuid-setgid.js new file mode 100644 index 0000000000..38a677970c --- /dev/null +++ b/test/parallel/test-process-setuid-setgid.js @@ -0,0 +1,68 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +'use strict'; +const common = require('../common'); + +const assert = require('assert'); + +if (common.isWindows) { + // uid/gid functions are POSIX only + assert.strictEqual(process.getuid, undefined); + assert.strictEqual(process.setuid, undefined); + assert.strictEqual(process.getgid, undefined); + assert.strictEqual(process.setgid, undefined); + return; +} + +assert.throws(() => { + process.setuid('fhqwhgadshgnsdhjsdbkhsdabkfabkveybvf'); +}, /^Error: setuid user id does not exist$/); + +// If we're not running as super user... +if (process.getuid() !== 0) { + assert.doesNotThrow(() => { + process.getgid(); + process.getuid(); + }); + + assert.throws( + () => { process.setgid('nobody'); }, + /^Error: (EPERM, .+|setgid group id does not exist)$/ + ); + + assert.throws( + () => { process.setuid('nobody'); }, + /^Error: EPERM, / + ); + return; +} + +// If we are running as super user... +const oldgid = process.getgid(); +process.setgid('nobody'); +const newgid = process.getgid(); +assert.notStrictEqual(newgid, oldgid); + +const olduid = process.getuid(); +process.setuid('nobody'); +const newuid = process.getuid(); +assert.notStrictEqual(newuid, olduid); -- cgit v1.2.3