node-pty 0.11.0-beta30 → 0.11.0-beta31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/binding.gyp CHANGED
@@ -69,21 +69,6 @@
69
69
  ]
70
70
  }, { # OS!="win"
71
71
  'targets': [
72
- {
73
- 'target_name': 'spawn-helper',
74
- 'type': 'executable',
75
- 'cflags': ['-Wall'],
76
- 'sources': [
77
- 'src/unix/spawn-helper.cc',
78
- ],
79
- 'conditions': [
80
- ['OS=="mac"', {
81
- "xcode_settings": {
82
- "MACOSX_DEPLOYMENT_TARGET":"10.7"
83
- }
84
- }]
85
- ]
86
- },
87
72
  {
88
73
  'target_name': 'pty',
89
74
  'include_dirs' : [
@@ -20,19 +20,15 @@ exports.UnixTerminal = void 0;
20
20
  * Copyright (c) 2018, Microsoft Corporation (MIT License).
21
21
  */
22
22
  var net = require("net");
23
- var path = require("path");
24
23
  var terminal_1 = require("./terminal");
25
24
  var utils_1 = require("./utils");
26
25
  var pty;
27
- var helperPath;
28
26
  try {
29
27
  pty = require('../build/Release/pty.node');
30
- helperPath = '../build/Release/spawn-helper';
31
28
  }
32
29
  catch (outerError) {
33
30
  try {
34
31
  pty = require('../build/Debug/pty.node');
35
- helperPath = '../build/Debug/spawn-helper';
36
32
  }
37
33
  catch (innerError) {
38
34
  console.error('innerError', innerError);
@@ -40,9 +36,6 @@ catch (outerError) {
40
36
  throw outerError;
41
37
  }
42
38
  }
43
- helperPath = path.resolve(__dirname, helperPath);
44
- helperPath = helperPath.replace('app.asar', 'app.asar.unpacked');
45
- helperPath = helperPath.replace('node_modules.asar', 'node_modules.asar.unpacked');
46
39
  var DEFAULT_FILE = 'sh';
47
40
  var DEFAULT_NAME = 'xterm';
48
41
  var DESTROY_SOCKET_TIMEOUT_MS = 200;
@@ -65,7 +58,6 @@ var UnixTerminal = /** @class */ (function (_super) {
65
58
  _this._rows = opt.rows || terminal_1.DEFAULT_ROWS;
66
59
  var uid = (_a = opt.uid) !== null && _a !== void 0 ? _a : -1;
67
60
  var gid = (_b = opt.gid) !== null && _b !== void 0 ? _b : -1;
68
- var closeFDs = opt.closeFDs || false;
69
61
  var env = utils_1.assign({}, opt.env);
70
62
  if (opt.env === process.env) {
71
63
  _this._sanitizeEnv(env);
@@ -103,7 +95,7 @@ var UnixTerminal = /** @class */ (function (_super) {
103
95
  _this.emit('exit', code, signal);
104
96
  };
105
97
  // fork
106
- var term = pty.fork(file, args, parsedEnv, cwd, _this._cols, _this._rows, uid, gid, (encoding === 'utf8'), closeFDs, onexit, helperPath);
98
+ var term = pty.fork(file, args, parsedEnv, cwd, _this._cols, _this._rows, uid, gid, (encoding === 'utf8'), onexit);
107
99
  _this._socket = new PipeSocket(term.fd);
108
100
  if (encoding !== null) {
109
101
  _this._socket.setEncoding(encoding);
@@ -1 +1 @@
1
- {"version":3,"file":"unixTerminal.js","sourceRoot":"","sources":["../src/unixTerminal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"unixTerminal.js","sourceRoot":"","sources":["../src/unixTerminal.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,42 @@
3
3
  * Copyright (c) 2017, Daniel Imms (MIT License).
4
4
  * Copyright (c) 2018, Microsoft Corporation (MIT License).
5
5
  */
6
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
7
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
8
+ return new (P || (P = Promise))(function (resolve, reject) {
9
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
10
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
11
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
12
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
13
+ });
14
+ };
15
+ var __generator = (this && this.__generator) || function (thisArg, body) {
16
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
17
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
18
+ function verb(n) { return function (v) { return step([n, v]); }; }
19
+ function step(op) {
20
+ if (f) throw new TypeError("Generator is already executing.");
21
+ while (_) try {
22
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
23
+ if (y = 0, t) op = [op[0] & 2, t.value];
24
+ switch (op[0]) {
25
+ case 0: case 1: t = op; break;
26
+ case 4: _.label++; return { value: op[1], done: false };
27
+ case 5: _.label++; y = op[1]; op = [0]; continue;
28
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
29
+ default:
30
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
31
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
32
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
33
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
34
+ if (t[2]) _.ops.pop();
35
+ _.trys.pop(); continue;
36
+ }
37
+ op = body.call(thisArg, _);
38
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
39
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
40
+ }
41
+ };
6
42
  Object.defineProperty(exports, "__esModule", { value: true });
7
43
  var unixTerminal_1 = require("./unixTerminal");
8
44
  var assert = require("assert");
@@ -212,68 +248,43 @@ if (process.platform !== 'win32') {
212
248
  });
213
249
  });
214
250
  describe('spawn', function () {
215
- it('should handle exec() errors', function (done) {
216
- try {
217
- new unixTerminal_1.UnixTerminal('/bin/bogus.exe', []);
218
- done(new Error('should have failed'));
219
- }
220
- catch (_a) {
221
- done();
222
- }
223
- });
224
- it('should handle chdir() errors', function (done) {
225
- try {
226
- new unixTerminal_1.UnixTerminal('/bin/echo', [], { cwd: '/nowhere' });
227
- done(new Error('should have failed'));
228
- }
229
- catch (e) {
230
- assert.strictEqual(e.toString(), 'Error: chdir() failed: No such file or directory');
231
- done();
232
- }
233
- });
234
- it('should handle setuid() errors', function (done) {
235
- try {
236
- new unixTerminal_1.UnixTerminal('/bin/echo', [], { uid: 999999 });
237
- done(new Error('should have failed'));
238
- }
239
- catch (e) {
240
- assert.strictEqual(e.toString(), 'Error: setuid() failed: Operation not permitted');
241
- done();
242
- }
243
- });
244
251
  if (process.platform === 'linux') {
245
- it('should not close on exec when closeFDs is not defined', function (done) {
246
- var data = "\n var pty = require('./lib/index');\n var ptyProcess = pty.spawn('node', ['-e', 'setTimeout(() => console.log(\"hello from terminal\"), 300);']);\n ptyProcess.on('data', function (data) {\n console.log(data);\n });\n setTimeout(() => null, 500);\n console.log('ready', ptyProcess.pid);\n ";
247
- var buffer = [];
248
- var readFd = fs.openSync(FIXTURES_PATH, 'r');
249
- var p = cp.spawn('node', ['-e', data], {
250
- stdio: ['ignore', 'pipe', 'pipe', readFd]
251
- });
252
- var sub = '';
253
- p.stdout.on('data', function (data) {
254
- if (!data.toString().indexOf('ready')) {
255
- sub = data.toString().split(' ')[1].slice(0, -1);
256
- try {
257
- fs.statSync("/proc/" + sub + "/fd/" + readFd);
258
- }
259
- catch (_) {
260
- done('not reachable');
261
- }
262
- setTimeout(function () {
263
- process.kill(parseInt(sub), 'SIGINT'); // SIGINT to child
264
- p.kill('SIGINT'); // SIGINT to parent
265
- }, 200);
266
- }
267
- else {
268
- buffer.push(data.toString().replace(/^\s+|\s+$/g, ''));
269
- }
252
+ it('should handle exec() errors', function (done) {
253
+ var term = new unixTerminal_1.UnixTerminal('/bin/bogus.exe', []);
254
+ term.on('exit', function (code, signal) {
255
+ assert.strictEqual(code, 1);
256
+ done();
270
257
  });
271
- p.on('close', function () {
258
+ });
259
+ it('should handle chdir() errors', function (done) {
260
+ var term = new unixTerminal_1.UnixTerminal('/bin/echo', [], { cwd: '/nowhere' });
261
+ term.on('exit', function (code, signal) {
262
+ assert.strictEqual(code, 1);
272
263
  done();
273
264
  });
274
265
  });
275
- it('should close on exec when closeFDs is true', function (done) {
276
- var data = "\n var pty = require('./lib/index');\n var ptyProcess = pty.spawn('node', ['-e', 'setTimeout(() => console.log(\"hello from terminal\"), 300);'], {\n closeFDs: true\n });\n ptyProcess.on('data', function (data) {\n console.log(data);\n });\n setTimeout(() => null, 500);\n console.log('ready', ptyProcess.pid);\n ";
266
+ }
267
+ else if (process.platform === 'darwin') {
268
+ it('should handle exec() errors', function (done) {
269
+ try {
270
+ new unixTerminal_1.UnixTerminal('/bin/bogus.exe', []);
271
+ done(new Error('should have failed'));
272
+ }
273
+ catch (_a) {
274
+ done();
275
+ }
276
+ });
277
+ it('should handle chdir() errors', function (done) {
278
+ try {
279
+ new unixTerminal_1.UnixTerminal('/bin/echo', [], { cwd: '/nowhere' });
280
+ done(new Error('should have failed'));
281
+ }
282
+ catch (e) {
283
+ done();
284
+ }
285
+ });
286
+ it('should close on exec', function (done) {
287
+ var data = "\n var pty = require('./lib/index');\n var ptyProcess = pty.spawn('node', ['-e', 'setTimeout(() => console.log(\"hello from terminal\"), 300);']);\n ptyProcess.on('data', function (data) {\n console.log(data);\n });\n setTimeout(() => null, 500);\n console.log('ready', ptyProcess.pid);\n ";
277
288
  var buffer = [];
278
289
  var readFd = fs.openSync(FIXTURES_PATH, 'r');
279
290
  var p = cp.spawn('node', ['-e', data], {
@@ -304,6 +315,29 @@ if (process.platform !== 'win32') {
304
315
  });
305
316
  });
306
317
  }
318
+ it('should not leak child process', function (done) {
319
+ var count = cp.execSync('ps -ax | grep node | wc -l');
320
+ var term = new unixTerminal_1.UnixTerminal('node', ['-e', "\n console.log('ready');\n setTimeout(()=>console.log('timeout'), 200);"
321
+ ]);
322
+ term.on('data', function (data) { return __awaiter(void 0, void 0, void 0, function () {
323
+ var newCount;
324
+ return __generator(this, function (_a) {
325
+ switch (_a.label) {
326
+ case 0:
327
+ if (!(data === 'ready\r\n')) return [3 /*break*/, 2];
328
+ process.kill(term.pid, 'SIGINT');
329
+ return [4 /*yield*/, setTimeout(function () { return null; }, 1000)];
330
+ case 1:
331
+ _a.sent();
332
+ newCount = cp.execSync('ps -ax | grep node | wc -l');
333
+ assert.strictEqual(count.toString(), newCount.toString());
334
+ done();
335
+ _a.label = 2;
336
+ case 2: return [2 /*return*/];
337
+ }
338
+ });
339
+ }); });
340
+ });
307
341
  });
308
342
  });
309
343
  }
@@ -1 +1 @@
1
- {"version":3,"file":"unixTerminal.test.js","sourceRoot":"","sources":["../src/unixTerminal.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"unixTerminal.test.js","sourceRoot":"","sources":["../src/unixTerminal.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "author": {
5
5
  "name": "Microsoft Corporation"
6
6
  },
7
- "version": "0.11.0-beta30",
7
+ "version": "0.11.0-beta31",
8
8
  "license": "MIT",
9
9
  "main": "./lib/index.js",
10
10
  "types": "./typings/node-pty.d.ts",
@@ -9,7 +9,6 @@ var BUILD_FILES = [
9
9
  path.join(RELEASE_DIR, 'conpty_console_list.pdb'),
10
10
  path.join(RELEASE_DIR, 'pty.node'),
11
11
  path.join(RELEASE_DIR, 'pty.pdb'),
12
- path.join(RELEASE_DIR, 'spawn-helper'),
13
12
  path.join(RELEASE_DIR, 'winpty-agent.exe'),
14
13
  path.join(RELEASE_DIR, 'winpty-agent.pdb'),
15
14
  path.join(RELEASE_DIR, 'winpty.dll'),
package/src/interfaces.ts CHANGED
@@ -109,7 +109,6 @@ interface IBasePtyForkOptions {
109
109
  export interface IPtyForkOptions extends IBasePtyForkOptions {
110
110
  uid?: number;
111
111
  gid?: number;
112
- closeFDs?: boolean;
113
112
  }
114
113
 
115
114
  export interface IWindowsPtyForkOptions extends IBasePtyForkOptions {
package/src/native.d.ts CHANGED
@@ -18,7 +18,7 @@ interface IWinptyNative {
18
18
  }
19
19
 
20
20
  interface IUnixNative {
21
- fork(file: string, args: string[], parsedEnv: string[], cwd: string, cols: number, rows: number, uid: number, gid: number, closeFDs: boolean, useUtf8: boolean, onExitCallback: (code: number, signal: number) => void, helperPath: string): IUnixProcess;
21
+ fork(file: string, args: string[], parsedEnv: string[], cwd: string, cols: number, rows: number, uid: number, gid: number, useUtf8: boolean, onExitCallback: (code: number, signal: number) => void): IUnixProcess;
22
22
  open(cols: number, rows: number): IUnixOpenProcess;
23
23
  process(fd: number, pty: string): string;
24
24
  resize(fd: number, cols: number, rows: number): void;
package/src/unix/pty.cc CHANGED
@@ -29,26 +29,15 @@
29
29
  #include <sys/wait.h>
30
30
  #include <fcntl.h>
31
31
  #include <signal.h>
32
- #include <spawn.h>
33
-
34
- #include "comms.h"
35
32
 
36
33
  /* forkpty */
37
34
  /* http://www.gnu.org/software/gnulib/manual/html_node/forkpty.html */
38
- #if defined(__GLIBC__) || defined(__CYGWIN__)
35
+ #if defined(__linux__)
39
36
  #include <pty.h>
40
- #elif defined(__APPLE__) || defined(__OpenBSD__) || defined(__NetBSD__)
37
+ #elif defined(__APPLE__)
41
38
  #include <util.h>
42
- #elif defined(__FreeBSD__)
43
- #include <libutil.h>
44
- #elif defined(__sun)
45
- #include <stropts.h> /* for I_PUSH */
46
- #else
47
- #include <pty.h>
48
39
  #endif
49
40
 
50
- #include <termios.h> /* tcgetattr, tty_ioctl */
51
-
52
41
  /* Some platforms name VWERASE and VDISCARD differently */
53
42
  #if !defined(VWERASE) && defined(VWERSE)
54
43
  #define VWERASE VWERSE
@@ -62,8 +51,13 @@
62
51
  #include <stdio.h>
63
52
  #include <stdint.h>
64
53
  #elif defined(__APPLE__)
65
- #include <sys/sysctl.h>
66
54
  #include <libproc.h>
55
+ #include <os/availability.h>
56
+ #include <paths.h>
57
+ #include <spawn.h>
58
+ #include <sys/event.h>
59
+ #include <sys/sysctl.h>
60
+ #include <termios.h>
67
61
  #endif
68
62
 
69
63
  /* NSIG - macro for highest signal + 1, should be defined */
@@ -71,15 +65,36 @@
71
65
  #define NSIG 32
72
66
  #endif
73
67
 
74
- #ifdef POSIX_SPAWN_CLOEXEC_DEFAULT
75
- #define HAVE_POSIX_SPAWN_CLOEXEC_DEFAULT 1
76
- #else
77
- #define HAVE_POSIX_SPAWN_CLOEXEC_DEFAULT 0
78
- #define POSIX_SPAWN_CLOEXEC_DEFAULT 0
68
+ /* macOS 10.14 back does not define this constant */
69
+ #ifndef POSIX_SPAWN_SETSID
70
+ #define POSIX_SPAWN_SETSID 1024
71
+ #endif
72
+
73
+ /* environ for execvpe */
74
+ /* node/src/node_child_process.cc */
75
+ #if !defined(__APPLE__)
76
+ extern char **environ;
79
77
  #endif
80
78
 
81
- #ifndef POSIX_SPAWN_USEVFORK
82
- #define POSIX_SPAWN_USEVFORK 0
79
+ #if defined(__APPLE__)
80
+ extern "C" {
81
+ // Changes the current thread's directory to a path or directory file
82
+ // descriptor. libpthread only exposes a syscall wrapper starting in
83
+ // macOS 10.12, but the system call dates back to macOS 10.5. On older OSes,
84
+ // the syscall is issued directly.
85
+ int pthread_chdir_np(const char* dir) API_AVAILABLE(macosx(10.12));
86
+ int pthread_fchdir_np(int fd) API_AVAILABLE(macosx(10.12));
87
+ }
88
+
89
+ #define HANDLE_EINTR(x) ({ \
90
+ int eintr_wrapper_counter = 0; \
91
+ decltype(x) eintr_wrapper_result; \
92
+ do { \
93
+ eintr_wrapper_result = (x); \
94
+ } while (eintr_wrapper_result == -1 && errno == EINTR && \
95
+ eintr_wrapper_counter++ < 100); \
96
+ eintr_wrapper_result; \
97
+ })
83
98
  #endif
84
99
 
85
100
  /**
@@ -114,11 +129,6 @@ pty_nonblock(int);
114
129
  static char *
115
130
  pty_getproc(int, char *);
116
131
 
117
- static int
118
- pty_openpty(int *, int *, char *,
119
- const struct termios *,
120
- const struct winsize *);
121
-
122
132
  static void
123
133
  pty_waitpid(void *);
124
134
 
@@ -128,16 +138,21 @@ pty_after_waitpid(uv_async_t *);
128
138
  static void
129
139
  pty_after_close(uv_handle_t *);
130
140
 
131
- static void throw_for_errno(const char* message, int _errno) {
132
- Nan::ThrowError((
133
- message + std::string(strerror(_errno))
134
- ).c_str());
135
- }
141
+ #if defined(__APPLE__) || defined(__OpenBSD__)
142
+ static void
143
+ pty_posix_spawn(char** argv, char** env,
144
+ char* cwd,
145
+ const struct termios *termp,
146
+ const struct winsize *winp,
147
+ int* master,
148
+ pid_t* pid,
149
+ int* err);
150
+ #endif
136
151
 
137
152
  NAN_METHOD(PtyFork) {
138
153
  Nan::HandleScope scope;
139
154
 
140
- if (info.Length() != 12 ||
155
+ if (info.Length() != 10 ||
141
156
  !info[0]->IsString() ||
142
157
  !info[1]->IsArray() ||
143
158
  !info[2]->IsArray() ||
@@ -147,11 +162,9 @@ NAN_METHOD(PtyFork) {
147
162
  !info[6]->IsNumber() ||
148
163
  !info[7]->IsNumber() ||
149
164
  !info[8]->IsBoolean() ||
150
- !info[9]->IsBoolean() ||
151
- !info[10]->IsFunction() ||
152
- !info[11]->IsString()) {
165
+ !info[9]->IsFunction()) {
153
166
  return Nan::ThrowError(
154
- "Usage: pty.fork(file, args, env, cwd, cols, rows, uid, gid, utf8, closeFDs, onexit, helperPath)");
167
+ "Usage: pty.fork(file, args, env, cwd, cols, rows, uid, gid, utf8, onexit)");
155
168
  }
156
169
 
157
170
  // file
@@ -172,6 +185,7 @@ NAN_METHOD(PtyFork) {
172
185
 
173
186
  // cwd
174
187
  Nan::Utf8String cwd_(info[3]);
188
+ char* cwd = strdup(*cwd_);
175
189
 
176
190
  // size
177
191
  struct winsize winp;
@@ -180,9 +194,11 @@ NAN_METHOD(PtyFork) {
180
194
  winp.ws_xpixel = 0;
181
195
  winp.ws_ypixel = 0;
182
196
 
197
+ #if !defined(__APPLE__)
183
198
  // uid / gid
184
199
  int uid = info[6]->IntegerValue(Nan::GetCurrentContext()).FromJust();
185
200
  int gid = info[7]->IntegerValue(Nan::GetCurrentContext()).FromJust();
201
+ #endif
186
202
 
187
203
  // termios
188
204
  struct termios t = termios();
@@ -219,36 +235,35 @@ NAN_METHOD(PtyFork) {
219
235
  term->c_cc[VSTATUS] = 20;
220
236
  #endif
221
237
 
222
- // closeFDs
223
- bool closeFDs = Nan::To<bool>(info[9]).FromJust();
224
- bool explicitlyCloseFDs = closeFDs && !HAVE_POSIX_SPAWN_CLOEXEC_DEFAULT;
225
-
226
- // helperPath
227
- Nan::Utf8String helper_path_(info[11]);
228
- char *helper_path = strdup(*helper_path_);
238
+ cfsetispeed(term, B38400);
239
+ cfsetospeed(term, B38400);
229
240
 
230
- const int EXTRA_ARGS = 6;
231
241
  int argc = argv_->Length();
232
- int argl = argc + EXTRA_ARGS + 1;
242
+ int argl = argc + 2;
233
243
  char **argv = new char*[argl];
234
- argv[0] = strdup(helper_path);
235
- argv[1] = strdup(*cwd_);
236
- argv[2] = strdup(std::to_string(uid).c_str());
237
- argv[3] = strdup(std::to_string(gid).c_str());
238
- argv[4] = strdup(explicitlyCloseFDs ? "1": "0");
239
- argv[5] = strdup(*file);
244
+ argv[0] = strdup(*file);
240
245
  argv[argl - 1] = NULL;
241
246
  for (int i = 0; i < argc; i++) {
242
247
  Nan::Utf8String arg(Nan::Get(argv_, i).ToLocalChecked());
243
- argv[i + EXTRA_ARGS] = strdup(*arg);
248
+ argv[i + 1] = strdup(*arg);
244
249
  }
245
250
 
246
- cfsetispeed(term, B38400);
247
- cfsetospeed(term, B38400);
248
-
251
+ pid_t pid;
252
+ int master;
253
+ #if defined(__APPLE__)
254
+ int err = 0;
255
+ pty_posix_spawn(argv, env, cwd, term, &winp, &master, &pid, &err);
256
+ if (err != 0) {
257
+ Nan::ThrowError("posix_spawnp failed.");
258
+ goto done;
259
+ }
260
+ if (pty_nonblock(master) == -1) {
261
+ Nan::ThrowError("Could not set master fd to nonblocking.");
262
+ goto done;
263
+ }
264
+ #else
249
265
  sigset_t newmask, oldmask;
250
- int flags = POSIX_SPAWN_USEVFORK;
251
-
266
+ struct sigaction sig_action;
252
267
  // temporarily block all signals
253
268
  // this is needed due to a race condition in openpty
254
269
  // and to avoid running signal handlers in the child
@@ -256,72 +271,69 @@ NAN_METHOD(PtyFork) {
256
271
  sigfillset(&newmask);
257
272
  pthread_sigmask(SIG_SETMASK, &newmask, &oldmask);
258
273
 
259
- int master, slave;
260
- int ret = pty_openpty(&master, &slave, nullptr, term, &winp);
261
- if (ret == -1) {
262
- perror("openpty failed");
263
- Nan::ThrowError("openpty failed.");
264
- goto done;
265
- }
274
+ pid = forkpty(&master, nullptr, static_cast<termios*>(term), static_cast<winsize*>(&winp));
266
275
 
267
- int comms_pipe[2];
268
- if (pipe(comms_pipe)) {
269
- perror("pipe() failed");
270
- Nan::ThrowError("pipe() failed.");
271
- goto done;
272
- }
276
+ if (!pid) {
277
+ // remove all signal handler from child
278
+ sig_action.sa_handler = SIG_DFL;
279
+ sig_action.sa_flags = 0;
280
+ sigemptyset(&sig_action.sa_mask);
281
+ for (int i = 0 ; i < NSIG ; i++) { // NSIG is a macro for all signals + 1
282
+ sigaction(i, &sig_action, NULL);
283
+ }
284
+ } else {
285
+ for (int i = 0; i < argl; i++) free(argv[i]);
286
+ delete[] argv;
273
287
 
274
- posix_spawn_file_actions_t acts;
275
- posix_spawn_file_actions_init(&acts);
276
- posix_spawn_file_actions_adddup2(&acts, slave, STDIN_FILENO);
277
- posix_spawn_file_actions_adddup2(&acts, slave, STDOUT_FILENO);
278
- posix_spawn_file_actions_adddup2(&acts, slave, STDERR_FILENO);
279
- posix_spawn_file_actions_adddup2(&acts, comms_pipe[1], COMM_PIPE_FD);
280
- posix_spawn_file_actions_addclose(&acts, comms_pipe[1]);
288
+ for (int i = 0; i < envc; i++) free(env[i]);
289
+ delete[] env;
281
290
 
282
- posix_spawnattr_t attrs;
283
- posix_spawnattr_init(&attrs);
284
- if (closeFDs) {
285
- flags |= POSIX_SPAWN_CLOEXEC_DEFAULT;
291
+ free(cwd);
286
292
  }
287
- posix_spawnattr_setflags(&attrs, flags);
288
-
289
- { // suppresses "jump bypasses variable initialization" errors
290
- pid_t pid;
291
- auto error = posix_spawn(&pid, argv[0], &acts, &attrs, argv, env);
292
293
 
293
- close(comms_pipe[1]);
294
+ // reenable signals
295
+ pthread_sigmask(SIG_SETMASK, &oldmask, NULL);
294
296
 
295
- // reenable signals
296
- pthread_sigmask(SIG_SETMASK, &oldmask, NULL);
297
-
298
- if (error) {
299
- throw_for_errno("posix_spawn failed: ", error);
297
+ switch (pid) {
298
+ case -1:
299
+ Nan::ThrowError("forkpty(3) failed.");
300
300
  goto done;
301
- }
301
+ case 0:
302
+ if (strlen(cwd)) {
303
+ if (chdir(cwd) == -1) {
304
+ perror("chdir(2) failed.");
305
+ _exit(1);
306
+ }
307
+ }
302
308
 
303
- int helper_error[2];
304
- auto bytes_read = read(comms_pipe[0], &helper_error, sizeof(helper_error));
305
- close(comms_pipe[0]);
306
-
307
- if (bytes_read == sizeof(helper_error)) {
308
- if (helper_error[0] == COMM_ERR_EXEC) {
309
- throw_for_errno("exec() failed: ", helper_error[1]);
310
- } else if (helper_error[0] == COMM_ERR_CHDIR) {
311
- throw_for_errno("chdir() failed: ", helper_error[1]);
312
- } else if (helper_error[0] == COMM_ERR_SETUID) {
313
- throw_for_errno("setuid() failed: ", helper_error[1]);
314
- } else if (helper_error[0] == COMM_ERR_SETGID) {
315
- throw_for_errno("setgid() failed: ", helper_error[1]);
309
+ if (uid != -1 && gid != -1) {
310
+ if (setgid(gid) == -1) {
311
+ perror("setgid(2) failed.");
312
+ _exit(1);
313
+ }
314
+ if (setuid(uid) == -1) {
315
+ perror("setuid(2) failed.");
316
+ _exit(1);
317
+ }
316
318
  }
317
- goto done;
318
- }
319
319
 
320
- if (pty_nonblock(master) == -1) {
321
- Nan::ThrowError("Could not set master fd to nonblocking.");
322
- goto done;
323
- }
320
+ {
321
+ char **old = environ;
322
+ environ = env;
323
+ execvp(argv[0], argv);
324
+ environ = old;
325
+ perror("execvp(3) failed.");
326
+ _exit(1);
327
+ }
328
+ default:
329
+ if (pty_nonblock(master) == -1) {
330
+ Nan::ThrowError("Could not set master fd to nonblocking.");
331
+ goto done;
332
+ }
333
+ }
334
+ #endif
324
335
 
336
+ {
325
337
  v8::Local<v8::Object> obj = Nan::New<v8::Object>();
326
338
  Nan::Set(obj,
327
339
  Nan::New<v8::String>("fd").ToLocalChecked(),
@@ -336,7 +348,7 @@ NAN_METHOD(PtyFork) {
336
348
  pty_baton *baton = new pty_baton();
337
349
  baton->exit_code = 0;
338
350
  baton->signal_code = 0;
339
- baton->cb.Reset(v8::Local<v8::Function>::Cast(info[10]));
351
+ baton->cb.Reset(v8::Local<v8::Function>::Cast(info[9]));
340
352
  baton->pid = pid;
341
353
  baton->async.data = baton;
342
354
 
@@ -344,21 +356,20 @@ NAN_METHOD(PtyFork) {
344
356
 
345
357
  uv_thread_create(&baton->tid, pty_waitpid, static_cast<void*>(baton));
346
358
 
347
- info.GetReturnValue().Set(obj);
359
+ return info.GetReturnValue().Set(obj);
348
360
  }
361
+
349
362
  done:
350
- posix_spawn_file_actions_destroy(&acts);
351
- posix_spawnattr_destroy(&attrs);
363
+ #if defined(__APPLE__)
364
+ for (int i = 0; i < argl; i++) free(argv[i]);
365
+ delete[] argv;
352
366
 
353
- if (argv) {
354
- for (int i = 0; i < argl; i++) free(argv[i]);
355
- delete[] argv;
356
- }
357
- if (env) {
358
- for (int i = 0; i < envc; i++) free(env[i]);
359
- delete[] env;
360
- }
361
- free(helper_path);
367
+ for (int i = 0; i < envc; i++) free(env[i]);
368
+ delete[] env;
369
+
370
+ free(cwd);
371
+ #endif
372
+ return info.GetReturnValue().SetUndefined();
362
373
  }
363
374
 
364
375
  NAN_METHOD(PtyOpen) {
@@ -379,7 +390,7 @@ NAN_METHOD(PtyOpen) {
379
390
 
380
391
  // pty
381
392
  int master, slave;
382
- int ret = pty_openpty(&master, &slave, nullptr, NULL, &winp);
393
+ int ret = openpty(&master, &slave, nullptr, NULL, static_cast<winsize*>(&winp));
383
394
 
384
395
  if (ret == -1) {
385
396
  return Nan::ThrowError("openpty(3) failed.");
@@ -486,11 +497,44 @@ static void
486
497
  pty_waitpid(void *data) {
487
498
  int ret;
488
499
  int stat_loc;
489
-
490
500
  pty_baton *baton = static_cast<pty_baton*>(data);
491
-
492
501
  errno = 0;
493
-
502
+ #if defined(__APPLE__)
503
+ // Based on
504
+ // https://source.chromium.org/chromium/chromium/src/+/main:base/process/kill_mac.cc;l=35-69?
505
+ int kq = HANDLE_EINTR(kqueue());
506
+ struct kevent change = {0};
507
+ EV_SET(&change, baton->pid, EVFILT_PROC, EV_ADD, NOTE_EXIT, 0, NULL);
508
+ ret = HANDLE_EINTR(kevent(kq, &change, 1, NULL, 0, NULL));
509
+ if (ret == -1) {
510
+ if (errno == ESRCH) {
511
+ // At this point, one of the following has occurred:
512
+ // 1. The process has died but has not yet been reaped.
513
+ // 2. The process has died and has already been reaped.
514
+ // 3. The process is in the process of dying. It's no longer
515
+ // kqueueable, but it may not be waitable yet either. Mark calls
516
+ // this case the "zombie death race".
517
+ ret = HANDLE_EINTR(waitpid(baton->pid, &stat_loc, WNOHANG));
518
+ if (ret == 0) {
519
+ ret = kill(baton->pid, SIGKILL);
520
+ if (ret != -1) {
521
+ HANDLE_EINTR(waitpid(baton->pid, &stat_loc, 0));
522
+ }
523
+ }
524
+ }
525
+ } else {
526
+ struct kevent event = {0};
527
+ ret = HANDLE_EINTR(kevent(kq, NULL, 0, &event, 1, NULL));
528
+ if (ret == 1) {
529
+ if ((event.fflags & NOTE_EXIT) &&
530
+ (event.ident == static_cast<uintptr_t>(baton->pid))) {
531
+ // The process is dead or dying. This won't block for long, if at
532
+ // all.
533
+ HANDLE_EINTR(waitpid(baton->pid, &stat_loc, 0));
534
+ }
535
+ }
536
+ }
537
+ #else
494
538
  if ((ret = waitpid(baton->pid, &stat_loc, 0)) != baton->pid) {
495
539
  if (ret == -1 && errno == EINTR) {
496
540
  return pty_waitpid(baton);
@@ -503,6 +547,7 @@ pty_waitpid(void *data) {
503
547
  assert(false);
504
548
  }
505
549
  }
550
+ #endif
506
551
 
507
552
  if (WIFEXITED(stat_loc)) {
508
553
  baton->exit_code = WEXITSTATUS(stat_loc); // errno?
@@ -648,50 +693,194 @@ pty_getproc(int fd, char *tty) {
648
693
 
649
694
  #endif
650
695
 
651
- /**
652
- * openpty(3) / forkpty(3)
653
- */
696
+ #if defined(__APPLE__)
697
+ static void
698
+ pty_posix_spawn(char** argv, char** env,
699
+ char* cwd,
700
+ const struct termios *termp,
701
+ const struct winsize *winp,
702
+ int* master,
703
+ pid_t* pid,
704
+ int* err) {
705
+ int low_fds[3];
706
+ size_t count = 0;
707
+ const char *p;
708
+ const char *z;
709
+ size_t l;
710
+ size_t k;
711
+ int seen_eacces;
712
+ const char *path;
713
+ char** env_iterator;
714
+ const char path_var[] = "PATH=";
715
+
716
+ for (; count < 3; count++) {
717
+ low_fds[count] = posix_openpt(O_RDWR);
718
+ if (low_fds[count] >= STDERR_FILENO)
719
+ break;
720
+ }
654
721
 
655
- static int
656
- pty_openpty(int *amaster,
657
- int *aslave,
658
- char *name,
659
- const struct termios *termp,
660
- const struct winsize *winp) {
661
- #if defined(__sun)
662
- char *slave_name;
722
+ int flags = POSIX_SPAWN_CLOEXEC_DEFAULT |
723
+ POSIX_SPAWN_SETSIGDEF |
724
+ POSIX_SPAWN_SETSIGMASK |
725
+ POSIX_SPAWN_SETSID;
726
+ *master = posix_openpt(O_RDWR);
727
+ if (*master == -1) {
728
+ return;
729
+ }
730
+
731
+ int res = grantpt(*master) || unlockpt(*master);
732
+ if (res == -1) {
733
+ return;
734
+ }
735
+
736
+ // Use TIOCPTYGNAME instead of ptsname() to avoid threading problems.
663
737
  int slave;
664
- int master = open("/dev/ptmx", O_RDWR | O_NOCTTY);
665
- if (master == -1) return -1;
666
- if (amaster) *amaster = master;
738
+ char slave_pty_name[128];
739
+ res = ioctl(*master, TIOCPTYGNAME, slave_pty_name);
740
+ if (res == -1) {
741
+ return;
742
+ }
667
743
 
668
- if (grantpt(master) == -1) goto err;
669
- if (unlockpt(master) == -1) goto err;
744
+ slave = open(slave_pty_name, O_RDWR | O_NOCTTY);
745
+ if (slave == -1) {
746
+ return;
747
+ }
670
748
 
671
- slave_name = ptsname(master);
672
- if (slave_name == NULL) goto err;
673
- if (name) strcpy(name, slave_name);
749
+ if (termp) {
750
+ res = tcsetattr(slave, TCSANOW, termp);
751
+ if (res == -1) {
752
+ return;
753
+ };
754
+ }
674
755
 
675
- slave = open(slave_name, O_RDWR | O_NOCTTY);
676
- if (slave == -1) goto err;
677
- if (aslave) *aslave = slave;
756
+ if (winp) {
757
+ res = ioctl(slave, TIOCSWINSZ, winp);
758
+ if (res == -1) {
759
+ return;
760
+ }
761
+ }
678
762
 
679
- ioctl(slave, I_PUSH, "ptem");
680
- ioctl(slave, I_PUSH, "ldterm");
681
- ioctl(slave, I_PUSH, "ttcompat");
763
+ posix_spawn_file_actions_t acts;
764
+ posix_spawn_file_actions_init(&acts);
765
+ posix_spawn_file_actions_adddup2(&acts, slave, STDIN_FILENO);
766
+ posix_spawn_file_actions_adddup2(&acts, slave, STDOUT_FILENO);
767
+ posix_spawn_file_actions_adddup2(&acts, slave, STDERR_FILENO);
768
+ posix_spawn_file_actions_addclose(&acts, slave);
769
+ posix_spawn_file_actions_addclose(&acts, *master);
770
+ if (strlen(cwd)) {
771
+ if (__builtin_available(macOS 10.15, *)) {
772
+ posix_spawn_file_actions_addchdir_np(&acts, cwd);
773
+ } else {
774
+ *err = pthread_chdir_np(cwd);
775
+ if (*err != 0) {
776
+ goto done;
777
+ }
778
+ }
779
+ }
682
780
 
683
- if (termp) tcsetattr(slave, TCSAFLUSH, termp);
684
- if (winp) ioctl(slave, TIOCSWINSZ, winp);
781
+ posix_spawnattr_t attrs;
782
+ posix_spawnattr_init(&attrs);
783
+ *err = posix_spawnattr_setflags(&attrs, flags);
784
+ if (*err != 0) {
785
+ goto done;
786
+ }
685
787
 
686
- return 0;
788
+ sigset_t signal_set;
789
+ /* Reset all signal the child to their default behavior */
790
+ sigfillset(&signal_set);
791
+ *err = posix_spawnattr_setsigdefault(&attrs, &signal_set);
792
+ if (*err != 0) {
793
+ goto done;
794
+ }
687
795
 
688
- err:
689
- close(master);
690
- return -1;
691
- #else
692
- return openpty(amaster, aslave, name, (termios *)termp, (winsize *)winp);
693
- #endif
796
+ /* Reset the signal mask for all signals */
797
+ sigemptyset(&signal_set);
798
+ *err = posix_spawnattr_setsigmask(&attrs, &signal_set);
799
+ if (*err != 0) {
800
+ goto done;
801
+ }
802
+
803
+ // path resolution is copied from
804
+ // https://github.com/libuv/libuv/blob/7b84d5b0ecb737b4cc30ce63eade690d994e00a6/src/unix/process.c#L695-L764
805
+ if (strchr(argv[0], '/') != NULL) {
806
+ do
807
+ *err = posix_spawn(pid, argv[0], &acts, &attrs, argv, env);
808
+ while (*err == EINTR);
809
+ } else {
810
+
811
+ for (env_iterator = env; *env_iterator != NULL; env_iterator++) {
812
+ if (strncmp(*env_iterator, path_var, sizeof(path_var) - 1) == 0) {
813
+ /* Found "PATH=" at the beginning of the string */
814
+ path = *env_iterator + sizeof(path_var) - 1;
815
+ }
816
+ }
817
+
818
+ if (path == NULL)
819
+ path = _PATH_DEFPATH;
820
+
821
+ k = strnlen(argv[0], NAME_MAX + 1);
822
+ if (k > NAME_MAX)
823
+ goto done;
824
+
825
+ l = strnlen(path, PATH_MAX - 1) + 1;
826
+
827
+ for (p = path;; p = z) {
828
+ /* Compose the new process file from the entry in the PATH
829
+ * environment variable and the actual file name */
830
+ char b[PATH_MAX + NAME_MAX];
831
+ z = strchr(p, ':');
832
+ if (!z)
833
+ z = p + strlen(p);
834
+ if ((size_t)(z - p) >= l) {
835
+ if (!*z++)
836
+ break;
837
+
838
+ continue;
839
+ }
840
+ memcpy(b, p, z - p);
841
+ b[z - p] = '/';
842
+ memcpy(b + (z - p) + (z > p), argv[0], k + 1);
843
+
844
+ do
845
+ *err = posix_spawn(pid, b, &acts, &attrs, argv, env);
846
+ while (*err == EINTR);
847
+
848
+ switch (*err) {
849
+ case EACCES:
850
+ seen_eacces = 1;
851
+ break; /* continue search */
852
+ case ENOENT:
853
+ case ENOTDIR:
854
+ break; /* continue search */
855
+ default:
856
+ goto done;
857
+ }
858
+
859
+ if (!*z++)
860
+ break;
861
+ }
862
+
863
+ if (seen_eacces)
864
+ goto done;
865
+ }
866
+
867
+ // Restore the thread's working directory if it was changed.
868
+ if (strlen(cwd)) {
869
+ if (__builtin_available(macOS 10.15, *)) {
870
+ // __builtin_available is special and cannot be negated.
871
+ } else {
872
+ pthread_fchdir_np(-1);
873
+ }
874
+ }
875
+ done:
876
+ posix_spawn_file_actions_destroy(&acts);
877
+ posix_spawnattr_destroy(&attrs);
878
+
879
+ for (; count > 0; count--) {
880
+ close(low_fds[count]);
881
+ }
694
882
  }
883
+ #endif
695
884
 
696
885
  /**
697
886
  * Init
@@ -255,75 +255,42 @@ if (process.platform !== 'win32') {
255
255
  });
256
256
  });
257
257
  describe('spawn', () => {
258
- it('should handle exec() errors', (done) => {
259
- try {
260
- new UnixTerminal('/bin/bogus.exe', []);
261
- done(new Error('should have failed'));
262
- } catch {
263
- done();
264
- }
265
- });
266
- it('should handle chdir() errors', (done) => {
267
- try {
268
- new UnixTerminal('/bin/echo', [], { cwd: '/nowhere' });
269
- done(new Error('should have failed'));
270
- } catch (e) {
271
- assert.strictEqual((e as any).toString(), 'Error: chdir() failed: No such file or directory');
272
- done();
273
- }
274
- });
275
- it('should handle setuid() errors', (done) => {
276
- try {
277
- new UnixTerminal('/bin/echo', [], { uid: 999999 });
278
- done(new Error('should have failed'));
279
- } catch (e) {
280
- assert.strictEqual((e as any).toString(), 'Error: setuid() failed: Operation not permitted');
281
- done();
282
- }
283
- });
284
258
  if (process.platform === 'linux') {
285
- it('should not close on exec when closeFDs is not defined', (done) => {
286
- const data = `
287
- var pty = require('./lib/index');
288
- var ptyProcess = pty.spawn('node', ['-e', 'setTimeout(() => console.log("hello from terminal"), 300);']);
289
- ptyProcess.on('data', function (data) {
290
- console.log(data);
291
- });
292
- setTimeout(() => null, 500);
293
- console.log('ready', ptyProcess.pid);
294
- `;
295
- const buffer: string[] = [];
296
- const readFd = fs.openSync(FIXTURES_PATH, 'r');
297
- const p = cp.spawn('node', ['-e', data], {
298
- stdio: ['ignore', 'pipe', 'pipe', readFd]
299
- });
300
- let sub = '';
301
- p.stdout!.on('data', (data) => {
302
- if (!data.toString().indexOf('ready')) {
303
- sub = data.toString().split(' ')[1].slice(0, -1);
304
- try {
305
- fs.statSync(`/proc/${sub}/fd/${readFd}`);
306
- } catch (_) {
307
- done('not reachable');
308
- }
309
- setTimeout(() => {
310
- process.kill(parseInt(sub), 'SIGINT'); // SIGINT to child
311
- p.kill('SIGINT'); // SIGINT to parent
312
- }, 200);
313
- } else {
314
- buffer.push(data.toString().replace(/^\s+|\s+$/g, ''));
315
- }
259
+ it('should handle exec() errors', (done) => {
260
+ const term = new UnixTerminal('/bin/bogus.exe', []);
261
+ term.on('exit', (code, signal) => {
262
+ assert.strictEqual(code, 1);
263
+ done();
316
264
  });
317
- p.on('close', () => {
265
+ });
266
+ it('should handle chdir() errors', (done) => {
267
+ const term = new UnixTerminal('/bin/echo', [], { cwd: '/nowhere' });
268
+ term.on('exit', (code, signal) => {
269
+ assert.strictEqual(code, 1);
318
270
  done();
319
271
  });
320
272
  });
321
- it('should close on exec when closeFDs is true', (done) => {
273
+ } else if (process.platform === 'darwin') {
274
+ it('should handle exec() errors', (done) => {
275
+ try {
276
+ new UnixTerminal('/bin/bogus.exe', []);
277
+ done(new Error('should have failed'));
278
+ } catch {
279
+ done();
280
+ }
281
+ });
282
+ it('should handle chdir() errors', (done) => {
283
+ try {
284
+ new UnixTerminal('/bin/echo', [], { cwd: '/nowhere' });
285
+ done(new Error('should have failed'));
286
+ } catch (e) {
287
+ done();
288
+ }
289
+ });
290
+ it('should close on exec', (done) => {
322
291
  const data = `
323
292
  var pty = require('./lib/index');
324
- var ptyProcess = pty.spawn('node', ['-e', 'setTimeout(() => console.log("hello from terminal"), 300);'], {
325
- closeFDs: true
326
- });
293
+ var ptyProcess = pty.spawn('node', ['-e', 'setTimeout(() => console.log("hello from terminal"), 300);']);
327
294
  ptyProcess.on('data', function (data) {
328
295
  console.log(data);
329
296
  });
@@ -358,6 +325,22 @@ if (process.platform !== 'win32') {
358
325
  });
359
326
  });
360
327
  }
328
+ it('should not leak child process', (done) => {
329
+ const count = cp.execSync('ps -ax | grep node | wc -l');
330
+ const term = new UnixTerminal('node', [ '-e', `
331
+ console.log('ready');
332
+ setTimeout(()=>console.log('timeout'), 200);`
333
+ ]);
334
+ term.on('data', async (data) => {
335
+ if (data === 'ready\r\n') {
336
+ process.kill(term.pid, 'SIGINT');
337
+ await setTimeout(() => null, 1000);
338
+ const newCount = cp.execSync('ps -ax | grep node | wc -l');
339
+ assert.strictEqual(count.toString(), newCount.toString());
340
+ done();
341
+ }
342
+ });
343
+ });
361
344
  });
362
345
  });
363
346
  }
@@ -11,14 +11,11 @@ import { ArgvOrCommandLine } from './types';
11
11
  import { assign } from './utils';
12
12
 
13
13
  let pty: IUnixNative;
14
- let helperPath: string;
15
14
  try {
16
15
  pty = require('../build/Release/pty.node');
17
- helperPath = '../build/Release/spawn-helper';
18
16
  } catch (outerError) {
19
17
  try {
20
18
  pty = require('../build/Debug/pty.node');
21
- helperPath = '../build/Debug/spawn-helper';
22
19
  } catch (innerError) {
23
20
  console.error('innerError', innerError);
24
21
  // Re-throw the exception from the Release require if the Debug require fails as well
@@ -26,10 +23,6 @@ try {
26
23
  }
27
24
  }
28
25
 
29
- helperPath = path.resolve(__dirname, helperPath);
30
- helperPath = helperPath.replace('app.asar', 'app.asar.unpacked');
31
- helperPath = helperPath.replace('node_modules.asar', 'node_modules.asar.unpacked');
32
-
33
26
  const DEFAULT_FILE = 'sh';
34
27
  const DEFAULT_NAME = 'xterm';
35
28
  const DESTROY_SOCKET_TIMEOUT_MS = 200;
@@ -69,7 +62,6 @@ export class UnixTerminal extends Terminal {
69
62
  this._rows = opt.rows || DEFAULT_ROWS;
70
63
  const uid = opt.uid ?? -1;
71
64
  const gid = opt.gid ?? -1;
72
- const closeFDs = opt.closeFDs || false;
73
65
  const env: IProcessEnv = assign({}, opt.env);
74
66
 
75
67
  if (opt.env === process.env) {
@@ -112,7 +104,7 @@ export class UnixTerminal extends Terminal {
112
104
  };
113
105
 
114
106
  // fork
115
- const term = pty.fork(file, args, parsedEnv, cwd, this._cols, this._rows, uid, gid, (encoding === 'utf8'), closeFDs, onexit, helperPath);
107
+ const term = pty.fork(file, args, parsedEnv, cwd, this._cols, this._rows, uid, gid, (encoding === 'utf8'), onexit);
116
108
 
117
109
  this._socket = new PipeSocket(term.fd);
118
110
  if (encoding !== null) {
@@ -78,17 +78,11 @@ declare module 'node-pty' {
78
78
 
79
79
  export interface IPtyForkOptions extends IBasePtyForkOptions {
80
80
  /**
81
- * Security warning: use this option with great caution unless `closeFDs` is also set,
81
+ * Security warning: use this option with great caution,
82
82
  * as opened file descriptors with higher privileges might leak to the child program.
83
83
  */
84
84
  uid?: number;
85
85
  gid?: number;
86
-
87
- /**
88
- * Close all open file after spawning the child process (UNIX only).
89
- * Carries a performance penalty on Linux.
90
- */
91
- closeFDs?: boolean;
92
86
  }
93
87
 
94
88
  export interface IWindowsPtyForkOptions extends IBasePtyForkOptions {
package/src/unix/comms.h DELETED
@@ -1,5 +0,0 @@
1
- #define COMM_PIPE_FD (STDERR_FILENO + 1)
2
- #define COMM_ERR_EXEC 1
3
- #define COMM_ERR_CHDIR 2
4
- #define COMM_ERR_SETUID 3
5
- #define COMM_ERR_SETGID 4
@@ -1,70 +0,0 @@
1
- #include <errno.h>
2
- #include <fcntl.h>
3
- #include <signal.h>
4
- #include <string>
5
- #include <sys/ioctl.h>
6
- #include <sys/resource.h>
7
- #include <termios.h>
8
- #include <unistd.h>
9
- #include <string.h>
10
-
11
- #include "comms.h"
12
-
13
- void bail (int type, int code) {
14
- int buf[2] = { type, code };
15
- (void)! write(COMM_PIPE_FD, &buf, sizeof(buf));
16
- _exit(1);
17
- }
18
-
19
- int main (int argc, char** argv) {
20
- sigset_t empty_set;
21
- sigemptyset(&empty_set);
22
- pthread_sigmask(SIG_SETMASK, &empty_set, nullptr);
23
-
24
- setsid();
25
-
26
- #if defined(TIOCSCTTY)
27
- // glibc does this
28
- if (ioctl(STDIN_FILENO, TIOCSCTTY, NULL) == -1) {
29
- _exit(1);
30
- }
31
- #else
32
- char *slave_path = ttyname(STDIN_FILENO);
33
- // open implicit attaches a process to a terminal device if:
34
- // - process has no controlling terminal yet
35
- // - O_NOCTTY is not set
36
- close(open(slave_path, O_RDWR));
37
- #endif
38
-
39
- char *cwd = argv[1];
40
- int uid = std::stoi(argv[2]);
41
- int gid = std::stoi(argv[3]);
42
- bool closeFDs = std::stoi(argv[4]);
43
- char *file = argv[5];
44
- argv = &argv[5];
45
-
46
- fcntl(COMM_PIPE_FD, F_SETFD, FD_CLOEXEC);
47
-
48
- if (strlen(cwd) && chdir(cwd) == -1) {
49
- bail(COMM_ERR_CHDIR, errno);
50
- }
51
- if (uid != -1 && setuid(uid) == -1) {
52
- bail(COMM_ERR_SETUID, errno);
53
- }
54
- if (gid != -1 && setgid(gid) == -1) {
55
- bail(COMM_ERR_SETGID, errno);
56
- }
57
- if (closeFDs) {
58
- struct rlimit rlim_ofile;
59
- getrlimit(RLIMIT_NOFILE, &rlim_ofile);
60
- for (rlim_t fd = STDERR_FILENO + 1; fd < rlim_ofile.rlim_cur; fd++) {
61
- if (fd != COMM_PIPE_FD) {
62
- close(fd);
63
- }
64
- }
65
- }
66
-
67
- execvp(file, argv);
68
- bail(COMM_ERR_EXEC, errno);
69
- return 1;
70
- }