node-pty 0.11.0-beta30 → 0.11.0-beta32

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' : [
@@ -113,6 +98,20 @@
113
98
  ]
114
99
  }
115
100
  ]
101
+ }],
102
+ ['OS=="mac"', {
103
+ 'targets': [
104
+ {
105
+ 'target_name': 'spawn-helper',
106
+ 'type': 'executable',
107
+ 'sources': [
108
+ 'src/unix/spawn-helper.cc',
109
+ ],
110
+ "xcode_settings": {
111
+ "MACOSX_DEPLOYMENT_TARGET":"10.7"
112
+ }
113
+ },
114
+ ]
116
115
  }]
117
116
  ]
118
117
  }
@@ -65,7 +65,6 @@ var UnixTerminal = /** @class */ (function (_super) {
65
65
  _this._rows = opt.rows || terminal_1.DEFAULT_ROWS;
66
66
  var uid = (_a = opt.uid) !== null && _a !== void 0 ? _a : -1;
67
67
  var gid = (_b = opt.gid) !== null && _b !== void 0 ? _b : -1;
68
- var closeFDs = opt.closeFDs || false;
69
68
  var env = utils_1.assign({}, opt.env);
70
69
  if (opt.env === process.env) {
71
70
  _this._sanitizeEnv(env);
@@ -103,7 +102,7 @@ var UnixTerminal = /** @class */ (function (_super) {
103
102
  _this.emit('exit', code, signal);
104
103
  };
105
104
  // fork
106
- var term = pty.fork(file, args, parsedEnv, cwd, _this._cols, _this._rows, uid, gid, (encoding === 'utf8'), closeFDs, onexit, helperPath);
105
+ var term = pty.fork(file, args, parsedEnv, cwd, _this._cols, _this._rows, uid, gid, (encoding === 'utf8'), helperPath, onexit);
107
106
  _this._socket = new PipeSocket(term.fd);
108
107
  if (encoding !== null) {
109
108
  _this._socket.setEncoding(encoding);
@@ -246,6 +245,9 @@ var UnixTerminal = /** @class */ (function (_super) {
246
245
  * Gets the name of the process.
247
246
  */
248
247
  get: function () {
248
+ if (process.platform === 'darwin') {
249
+ return pty.process(this._pid) || this._file;
250
+ }
249
251
  return pty.process(this._fd, this._pty) || this._file;
250
252
  },
251
253
  enumerable: false,
@@ -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,15 @@ 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
- 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
- }
270
- });
271
- p.on('close', function () {
272
- done();
273
- });
251
+ if (process.platform === 'darwin') {
252
+ it('should return the name of the process', function (done) {
253
+ var term = new unixTerminal_1.UnixTerminal('/bin/echo');
254
+ assert.strictEqual(term.process, '/bin/echo');
255
+ term.on('exit', function () { return done(); });
256
+ term.destroy();
274
257
  });
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 ";
258
+ it('should close on exec', function (done) {
259
+ 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
260
  var buffer = [];
278
261
  var readFd = fs.openSync(FIXTURES_PATH, 'r');
279
262
  var p = cp.spawn('node', ['-e', data], {
@@ -304,6 +287,43 @@ if (process.platform !== 'win32') {
304
287
  });
305
288
  });
306
289
  }
290
+ it('should handle exec() errors', function (done) {
291
+ var term = new unixTerminal_1.UnixTerminal('/bin/bogus.exe', []);
292
+ term.on('exit', function (code, signal) {
293
+ assert.strictEqual(code, 1);
294
+ done();
295
+ });
296
+ });
297
+ it('should handle chdir() errors', function (done) {
298
+ var term = new unixTerminal_1.UnixTerminal('/bin/echo', [], { cwd: '/nowhere' });
299
+ term.on('exit', function (code, signal) {
300
+ assert.strictEqual(code, 1);
301
+ done();
302
+ });
303
+ });
304
+ it('should not leak child process', function (done) {
305
+ var count = cp.execSync('ps -ax | grep node | wc -l');
306
+ var term = new unixTerminal_1.UnixTerminal('node', ['-e', "\n console.log('ready');\n setTimeout(()=>console.log('timeout'), 200);"
307
+ ]);
308
+ term.on('data', function (data) { return __awaiter(void 0, void 0, void 0, function () {
309
+ var newCount;
310
+ return __generator(this, function (_a) {
311
+ switch (_a.label) {
312
+ case 0:
313
+ if (!(data === 'ready\r\n')) return [3 /*break*/, 2];
314
+ process.kill(term.pid, 'SIGINT');
315
+ return [4 /*yield*/, setTimeout(function () { return null; }, 1000)];
316
+ case 1:
317
+ _a.sent();
318
+ newCount = cp.execSync('ps -ax | grep node | wc -l');
319
+ assert.strictEqual(count.toString(), newCount.toString());
320
+ done();
321
+ _a.label = 2;
322
+ case 2: return [2 /*return*/];
323
+ }
324
+ });
325
+ }); });
326
+ });
307
327
  });
308
328
  });
309
329
  }
@@ -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-beta32",
8
8
  "license": "MIT",
9
9
  "main": "./lib/index.js",
10
10
  "types": "./typings/node-pty.d.ts",
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,9 +18,10 @@ 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, helperPath: string, onExitCallback: (code: number, signal: number) => void): IUnixProcess;
22
22
  open(cols: number, rows: number): IUnixOpenProcess;
23
23
  process(fd: number, pty: string): string;
24
+ process(pid: number): string;
24
25
  resize(fd: number, cols: number, rows: number): void;
25
26
  }
26
27
 
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,12 @@
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 <termios.h>
67
60
  #endif
68
61
 
69
62
  /* NSIG - macro for highest signal + 1, should be defined */
@@ -71,15 +64,36 @@
71
64
  #define NSIG 32
72
65
  #endif
73
66
 
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
67
+ /* macOS 10.14 back does not define this constant */
68
+ #ifndef POSIX_SPAWN_SETSID
69
+ #define POSIX_SPAWN_SETSID 1024
79
70
  #endif
80
71
 
81
- #ifndef POSIX_SPAWN_USEVFORK
82
- #define POSIX_SPAWN_USEVFORK 0
72
+ /* environ for execvpe */
73
+ /* node/src/node_child_process.cc */
74
+ #if !defined(__APPLE__)
75
+ extern char **environ;
76
+ #endif
77
+
78
+ #if defined(__APPLE__)
79
+ extern "C" {
80
+ // Changes the current thread's directory to a path or directory file
81
+ // descriptor. libpthread only exposes a syscall wrapper starting in
82
+ // macOS 10.12, but the system call dates back to macOS 10.5. On older OSes,
83
+ // the syscall is issued directly.
84
+ int pthread_chdir_np(const char* dir) API_AVAILABLE(macosx(10.12));
85
+ int pthread_fchdir_np(int fd) API_AVAILABLE(macosx(10.12));
86
+ }
87
+
88
+ #define HANDLE_EINTR(x) ({ \
89
+ int eintr_wrapper_counter = 0; \
90
+ decltype(x) eintr_wrapper_result; \
91
+ do { \
92
+ eintr_wrapper_result = (x); \
93
+ } while (eintr_wrapper_result == -1 && errno == EINTR && \
94
+ eintr_wrapper_counter++ < 100); \
95
+ eintr_wrapper_result; \
96
+ })
83
97
  #endif
84
98
 
85
99
  /**
@@ -111,13 +125,13 @@ NAN_METHOD(PtyGetProc);
111
125
  static int
112
126
  pty_nonblock(int);
113
127
 
128
+ #if defined(__APPLE__)
129
+ static char *
130
+ pty_getproc(int);
131
+ #else
114
132
  static char *
115
133
  pty_getproc(int, char *);
116
-
117
- static int
118
- pty_openpty(int *, int *, char *,
119
- const struct termios *,
120
- const struct winsize *);
134
+ #endif
121
135
 
122
136
  static void
123
137
  pty_waitpid(void *);
@@ -128,16 +142,20 @@ pty_after_waitpid(uv_async_t *);
128
142
  static void
129
143
  pty_after_close(uv_handle_t *);
130
144
 
131
- static void throw_for_errno(const char* message, int _errno) {
132
- Nan::ThrowError((
133
- message + std::string(strerror(_errno))
134
- ).c_str());
135
- }
145
+ #if defined(__APPLE__) || defined(__OpenBSD__)
146
+ static void
147
+ pty_posix_spawn(char** argv, char** env,
148
+ const struct termios *termp,
149
+ const struct winsize *winp,
150
+ int* master,
151
+ pid_t* pid,
152
+ int* err);
153
+ #endif
136
154
 
137
155
  NAN_METHOD(PtyFork) {
138
156
  Nan::HandleScope scope;
139
157
 
140
- if (info.Length() != 12 ||
158
+ if (info.Length() != 11 ||
141
159
  !info[0]->IsString() ||
142
160
  !info[1]->IsArray() ||
143
161
  !info[2]->IsArray() ||
@@ -147,11 +165,10 @@ NAN_METHOD(PtyFork) {
147
165
  !info[6]->IsNumber() ||
148
166
  !info[7]->IsNumber() ||
149
167
  !info[8]->IsBoolean() ||
150
- !info[9]->IsBoolean() ||
151
- !info[10]->IsFunction() ||
152
- !info[11]->IsString()) {
168
+ !info[9]->IsString() ||
169
+ !info[10]->IsFunction()) {
153
170
  return Nan::ThrowError(
154
- "Usage: pty.fork(file, args, env, cwd, cols, rows, uid, gid, utf8, closeFDs, onexit, helperPath)");
171
+ "Usage: pty.fork(file, args, env, cwd, cols, rows, uid, gid, utf8, helperPath, onexit)");
155
172
  }
156
173
 
157
174
  // file
@@ -180,9 +197,11 @@ NAN_METHOD(PtyFork) {
180
197
  winp.ws_xpixel = 0;
181
198
  winp.ws_ypixel = 0;
182
199
 
200
+ #if !defined(__APPLE__)
183
201
  // uid / gid
184
202
  int uid = info[6]->IntegerValue(Nan::GetCurrentContext()).FromJust();
185
203
  int gid = info[7]->IntegerValue(Nan::GetCurrentContext()).FromJust();
204
+ #endif
186
205
 
187
206
  // termios
188
207
  struct termios t = termios();
@@ -219,36 +238,51 @@ NAN_METHOD(PtyFork) {
219
238
  term->c_cc[VSTATUS] = 20;
220
239
  #endif
221
240
 
222
- // closeFDs
223
- bool closeFDs = Nan::To<bool>(info[9]).FromJust();
224
- bool explicitlyCloseFDs = closeFDs && !HAVE_POSIX_SPAWN_CLOEXEC_DEFAULT;
241
+ cfsetispeed(term, B38400);
242
+ cfsetospeed(term, B38400);
225
243
 
226
244
  // helperPath
227
- Nan::Utf8String helper_path_(info[11]);
228
- char *helper_path = strdup(*helper_path_);
245
+ Nan::Utf8String helper_path(info[9]);
229
246
 
230
- const int EXTRA_ARGS = 6;
247
+ pid_t pid;
248
+ int master;
249
+ #if defined(__APPLE__)
231
250
  int argc = argv_->Length();
232
- int argl = argc + EXTRA_ARGS + 1;
251
+ int argl = argc + 4;
233
252
  char **argv = new char*[argl];
234
- argv[0] = strdup(helper_path);
253
+ argv[0] = strdup(*helper_path);
235
254
  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);
255
+ argv[2] = strdup(*file);
240
256
  argv[argl - 1] = NULL;
241
257
  for (int i = 0; i < argc; i++) {
242
258
  Nan::Utf8String arg(Nan::Get(argv_, i).ToLocalChecked());
243
- argv[i + EXTRA_ARGS] = strdup(*arg);
259
+ argv[i + 3] = strdup(*arg);
244
260
  }
245
261
 
246
- cfsetispeed(term, B38400);
247
- cfsetospeed(term, B38400);
262
+ int err = -1;
263
+ pty_posix_spawn(argv, env, term, &winp, &master, &pid, &err);
264
+ if (err != 0) {
265
+ Nan::ThrowError("posix_spawnp failed.");
266
+ goto done;
267
+ }
268
+ if (pty_nonblock(master) == -1) {
269
+ Nan::ThrowError("Could not set master fd to nonblocking.");
270
+ goto done;
271
+ }
272
+ #else
273
+ int argc = argv_->Length();
274
+ int argl = argc + 2;
275
+ char **argv = new char*[argl];
276
+ argv[0] = strdup(*file);
277
+ argv[argl - 1] = NULL;
278
+ for (int i = 0; i < argc; i++) {
279
+ Nan::Utf8String arg(Nan::Get(argv_, i).ToLocalChecked());
280
+ argv[i + 1] = strdup(*arg);
281
+ }
248
282
 
283
+ char* cwd = strdup(*cwd_);
249
284
  sigset_t newmask, oldmask;
250
- int flags = POSIX_SPAWN_USEVFORK;
251
-
285
+ struct sigaction sig_action;
252
286
  // temporarily block all signals
253
287
  // this is needed due to a race condition in openpty
254
288
  // and to avoid running signal handlers in the child
@@ -256,72 +290,69 @@ NAN_METHOD(PtyFork) {
256
290
  sigfillset(&newmask);
257
291
  pthread_sigmask(SIG_SETMASK, &newmask, &oldmask);
258
292
 
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
- }
293
+ pid = forkpty(&master, nullptr, static_cast<termios*>(term), static_cast<winsize*>(&winp));
266
294
 
267
- int comms_pipe[2];
268
- if (pipe(comms_pipe)) {
269
- perror("pipe() failed");
270
- Nan::ThrowError("pipe() failed.");
271
- goto done;
272
- }
295
+ if (!pid) {
296
+ // remove all signal handler from child
297
+ sig_action.sa_handler = SIG_DFL;
298
+ sig_action.sa_flags = 0;
299
+ sigemptyset(&sig_action.sa_mask);
300
+ for (int i = 0 ; i < NSIG ; i++) { // NSIG is a macro for all signals + 1
301
+ sigaction(i, &sig_action, NULL);
302
+ }
303
+ } else {
304
+ for (int i = 0; i < argl; i++) free(argv[i]);
305
+ delete[] argv;
273
306
 
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]);
307
+ for (int i = 0; i < envc; i++) free(env[i]);
308
+ delete[] env;
281
309
 
282
- posix_spawnattr_t attrs;
283
- posix_spawnattr_init(&attrs);
284
- if (closeFDs) {
285
- flags |= POSIX_SPAWN_CLOEXEC_DEFAULT;
310
+ free(cwd);
286
311
  }
287
- posix_spawnattr_setflags(&attrs, flags);
288
312
 
289
- { // suppresses "jump bypasses variable initialization" errors
290
- pid_t pid;
291
- auto error = posix_spawn(&pid, argv[0], &acts, &attrs, argv, env);
313
+ // reenable signals
314
+ pthread_sigmask(SIG_SETMASK, &oldmask, NULL);
292
315
 
293
- close(comms_pipe[1]);
294
-
295
- // reenable signals
296
- pthread_sigmask(SIG_SETMASK, &oldmask, NULL);
297
-
298
- if (error) {
299
- throw_for_errno("posix_spawn failed: ", error);
316
+ switch (pid) {
317
+ case -1:
318
+ Nan::ThrowError("forkpty(3) failed.");
300
319
  goto done;
301
- }
320
+ case 0:
321
+ if (strlen(cwd)) {
322
+ if (chdir(cwd) == -1) {
323
+ perror("chdir(2) failed.");
324
+ _exit(1);
325
+ }
326
+ }
302
327
 
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]);
328
+ if (uid != -1 && gid != -1) {
329
+ if (setgid(gid) == -1) {
330
+ perror("setgid(2) failed.");
331
+ _exit(1);
332
+ }
333
+ if (setuid(uid) == -1) {
334
+ perror("setuid(2) failed.");
335
+ _exit(1);
336
+ }
316
337
  }
317
- goto done;
318
- }
319
338
 
320
- if (pty_nonblock(master) == -1) {
321
- Nan::ThrowError("Could not set master fd to nonblocking.");
322
- goto done;
323
- }
339
+ {
340
+ char **old = environ;
341
+ environ = env;
342
+ execvp(argv[0], argv);
343
+ environ = old;
344
+ perror("execvp(3) failed.");
345
+ _exit(1);
346
+ }
347
+ default:
348
+ if (pty_nonblock(master) == -1) {
349
+ Nan::ThrowError("Could not set master fd to nonblocking.");
350
+ goto done;
351
+ }
352
+ }
353
+ #endif
324
354
 
355
+ {
325
356
  v8::Local<v8::Object> obj = Nan::New<v8::Object>();
326
357
  Nan::Set(obj,
327
358
  Nan::New<v8::String>("fd").ToLocalChecked(),
@@ -344,21 +375,18 @@ NAN_METHOD(PtyFork) {
344
375
 
345
376
  uv_thread_create(&baton->tid, pty_waitpid, static_cast<void*>(baton));
346
377
 
347
- info.GetReturnValue().Set(obj);
378
+ return info.GetReturnValue().Set(obj);
348
379
  }
380
+
349
381
  done:
350
- posix_spawn_file_actions_destroy(&acts);
351
- posix_spawnattr_destroy(&attrs);
382
+ #if defined(__APPLE__)
383
+ for (int i = 0; i < argl; i++) free(argv[i]);
384
+ delete[] argv;
352
385
 
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);
386
+ for (int i = 0; i < envc; i++) free(env[i]);
387
+ delete[] env;
388
+ #endif
389
+ return info.GetReturnValue().SetUndefined();
362
390
  }
363
391
 
364
392
  NAN_METHOD(PtyOpen) {
@@ -379,7 +407,7 @@ NAN_METHOD(PtyOpen) {
379
407
 
380
408
  // pty
381
409
  int master, slave;
382
- int ret = pty_openpty(&master, &slave, nullptr, NULL, &winp);
410
+ int ret = openpty(&master, &slave, nullptr, NULL, static_cast<winsize*>(&winp));
383
411
 
384
412
  if (ret == -1) {
385
413
  return Nan::ThrowError("openpty(3) failed.");
@@ -444,6 +472,15 @@ NAN_METHOD(PtyResize) {
444
472
  NAN_METHOD(PtyGetProc) {
445
473
  Nan::HandleScope scope;
446
474
 
475
+ #if defined(__APPLE__)
476
+ if (info.Length() != 1 ||
477
+ !info[0]->IsNumber()) {
478
+ return Nan::ThrowError("Usage: pty.process(pid)");
479
+ }
480
+
481
+ int pid = info[0]->IntegerValue(Nan::GetCurrentContext()).FromJust();
482
+ char *name = pty_getproc(pid);
483
+ #else
447
484
  if (info.Length() != 2 ||
448
485
  !info[0]->IsNumber() ||
449
486
  !info[1]->IsString()) {
@@ -456,6 +493,7 @@ NAN_METHOD(PtyGetProc) {
456
493
  char *tty = strdup(*tty_);
457
494
  char *name = pty_getproc(fd, tty);
458
495
  free(tty);
496
+ #endif
459
497
 
460
498
  if (name == NULL) {
461
499
  return info.GetReturnValue().SetUndefined();
@@ -486,11 +524,44 @@ static void
486
524
  pty_waitpid(void *data) {
487
525
  int ret;
488
526
  int stat_loc;
489
-
490
527
  pty_baton *baton = static_cast<pty_baton*>(data);
491
-
492
528
  errno = 0;
493
-
529
+ #if defined(__APPLE__)
530
+ // Based on
531
+ // https://source.chromium.org/chromium/chromium/src/+/main:base/process/kill_mac.cc;l=35-69?
532
+ int kq = HANDLE_EINTR(kqueue());
533
+ struct kevent change = {0};
534
+ EV_SET(&change, baton->pid, EVFILT_PROC, EV_ADD, NOTE_EXIT, 0, NULL);
535
+ ret = HANDLE_EINTR(kevent(kq, &change, 1, NULL, 0, NULL));
536
+ if (ret == -1) {
537
+ if (errno == ESRCH) {
538
+ // At this point, one of the following has occurred:
539
+ // 1. The process has died but has not yet been reaped.
540
+ // 2. The process has died and has already been reaped.
541
+ // 3. The process is in the process of dying. It's no longer
542
+ // kqueueable, but it may not be waitable yet either. Mark calls
543
+ // this case the "zombie death race".
544
+ ret = HANDLE_EINTR(waitpid(baton->pid, &stat_loc, WNOHANG));
545
+ if (ret == 0) {
546
+ ret = kill(baton->pid, SIGKILL);
547
+ if (ret != -1) {
548
+ HANDLE_EINTR(waitpid(baton->pid, &stat_loc, 0));
549
+ }
550
+ }
551
+ }
552
+ } else {
553
+ struct kevent event = {0};
554
+ ret = HANDLE_EINTR(kevent(kq, NULL, 0, &event, 1, NULL));
555
+ if (ret == 1) {
556
+ if ((event.fflags & NOTE_EXIT) &&
557
+ (event.ident == static_cast<uintptr_t>(baton->pid))) {
558
+ // The process is dead or dying. This won't block for long, if at
559
+ // all.
560
+ HANDLE_EINTR(waitpid(baton->pid, &stat_loc, 0));
561
+ }
562
+ }
563
+ }
564
+ #else
494
565
  if ((ret = waitpid(baton->pid, &stat_loc, 0)) != baton->pid) {
495
566
  if (ret == -1 && errno == EINTR) {
496
567
  return pty_waitpid(baton);
@@ -503,6 +574,7 @@ pty_waitpid(void *data) {
503
574
  assert(false);
504
575
  }
505
576
  }
577
+ #endif
506
578
 
507
579
  if (WIFEXITED(stat_loc)) {
508
580
  baton->exit_code = WEXITSTATUS(stat_loc); // errno?
@@ -618,25 +690,13 @@ pty_getproc(int fd, char *tty) {
618
690
  #elif defined(__APPLE__)
619
691
 
620
692
  static char *
621
- pty_getproc(int fd, char *tty) {
622
- int mib[4] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, 0 };
623
- size_t size;
624
- struct kinfo_proc kp;
625
-
626
- if ((mib[3] = tcgetpgrp(fd)) == -1) {
627
- return NULL;
628
- }
629
-
630
- size = sizeof kp;
631
- if (sysctl(mib, 4, &kp, &size, NULL, 0) == -1) {
693
+ pty_getproc(int pid) {
694
+ char pname[MAXCOMLEN + 1];
695
+ if (!proc_name(pid, pname, sizeof(pname))) {
632
696
  return NULL;
633
697
  }
634
698
 
635
- if (size != (sizeof kp) || *kp.kp_proc.p_comm == '\0') {
636
- return NULL;
637
- }
638
-
639
- return strdup(kp.kp_proc.p_comm);
699
+ return strdup(pname);
640
700
  }
641
701
 
642
702
  #else
@@ -648,50 +708,106 @@ pty_getproc(int fd, char *tty) {
648
708
 
649
709
  #endif
650
710
 
651
- /**
652
- * openpty(3) / forkpty(3)
653
- */
711
+ #if defined(__APPLE__)
712
+ static void
713
+ pty_posix_spawn(char** argv, char** env,
714
+ const struct termios *termp,
715
+ const struct winsize *winp,
716
+ int* master,
717
+ pid_t* pid,
718
+ int* err) {
719
+ int low_fds[3];
720
+ size_t count = 0;
721
+
722
+ for (; count < 3; count++) {
723
+ low_fds[count] = posix_openpt(O_RDWR);
724
+ if (low_fds[count] >= STDERR_FILENO)
725
+ break;
726
+ }
654
727
 
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;
728
+ int flags = POSIX_SPAWN_CLOEXEC_DEFAULT |
729
+ POSIX_SPAWN_SETSIGDEF |
730
+ POSIX_SPAWN_SETSIGMASK |
731
+ POSIX_SPAWN_SETSID;
732
+ *master = posix_openpt(O_RDWR);
733
+ if (*master == -1) {
734
+ return;
735
+ }
736
+
737
+ int res = grantpt(*master) || unlockpt(*master);
738
+ if (res == -1) {
739
+ return;
740
+ }
741
+
742
+ // Use TIOCPTYGNAME instead of ptsname() to avoid threading problems.
663
743
  int slave;
664
- int master = open("/dev/ptmx", O_RDWR | O_NOCTTY);
665
- if (master == -1) return -1;
666
- if (amaster) *amaster = master;
744
+ char slave_pty_name[128];
745
+ res = ioctl(*master, TIOCPTYGNAME, slave_pty_name);
746
+ if (res == -1) {
747
+ return;
748
+ }
667
749
 
668
- if (grantpt(master) == -1) goto err;
669
- if (unlockpt(master) == -1) goto err;
750
+ slave = open(slave_pty_name, O_RDWR | O_NOCTTY);
751
+ if (slave == -1) {
752
+ return;
753
+ }
670
754
 
671
- slave_name = ptsname(master);
672
- if (slave_name == NULL) goto err;
673
- if (name) strcpy(name, slave_name);
755
+ if (termp) {
756
+ res = tcsetattr(slave, TCSANOW, termp);
757
+ if (res == -1) {
758
+ return;
759
+ };
760
+ }
674
761
 
675
- slave = open(slave_name, O_RDWR | O_NOCTTY);
676
- if (slave == -1) goto err;
677
- if (aslave) *aslave = slave;
762
+ if (winp) {
763
+ res = ioctl(slave, TIOCSWINSZ, winp);
764
+ if (res == -1) {
765
+ return;
766
+ }
767
+ }
678
768
 
679
- ioctl(slave, I_PUSH, "ptem");
680
- ioctl(slave, I_PUSH, "ldterm");
681
- ioctl(slave, I_PUSH, "ttcompat");
769
+ posix_spawn_file_actions_t acts;
770
+ posix_spawn_file_actions_init(&acts);
771
+ posix_spawn_file_actions_adddup2(&acts, slave, STDIN_FILENO);
772
+ posix_spawn_file_actions_adddup2(&acts, slave, STDOUT_FILENO);
773
+ posix_spawn_file_actions_adddup2(&acts, slave, STDERR_FILENO);
774
+ posix_spawn_file_actions_addclose(&acts, slave);
775
+ posix_spawn_file_actions_addclose(&acts, *master);
682
776
 
683
- if (termp) tcsetattr(slave, TCSAFLUSH, termp);
684
- if (winp) ioctl(slave, TIOCSWINSZ, winp);
777
+ posix_spawnattr_t attrs;
778
+ posix_spawnattr_init(&attrs);
779
+ *err = posix_spawnattr_setflags(&attrs, flags);
780
+ if (*err != 0) {
781
+ goto done;
782
+ }
685
783
 
686
- return 0;
784
+ sigset_t signal_set;
785
+ /* Reset all signal the child to their default behavior */
786
+ sigfillset(&signal_set);
787
+ *err = posix_spawnattr_setsigdefault(&attrs, &signal_set);
788
+ if (*err != 0) {
789
+ goto done;
790
+ }
687
791
 
688
- err:
689
- close(master);
690
- return -1;
691
- #else
692
- return openpty(amaster, aslave, name, (termios *)termp, (winsize *)winp);
693
- #endif
792
+ /* Reset the signal mask for all signals */
793
+ sigemptyset(&signal_set);
794
+ *err = posix_spawnattr_setsigmask(&attrs, &signal_set);
795
+ if (*err != 0) {
796
+ goto done;
797
+ }
798
+
799
+ do
800
+ *err = posix_spawn(pid, argv[0], &acts, &attrs, argv, env);
801
+ while (*err == EINTR);
802
+ done:
803
+ posix_spawn_file_actions_destroy(&acts);
804
+ posix_spawnattr_destroy(&attrs);
805
+
806
+ for (; count > 0; count--) {
807
+ close(low_fds[count]);
808
+ }
694
809
  }
810
+ #endif
695
811
 
696
812
  /**
697
813
  * Init
@@ -1,70 +1,23 @@
1
1
  #include <errno.h>
2
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
3
  #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
- }
4
+ #include <unistd.h>
18
5
 
19
6
  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
7
  char *slave_path = ttyname(STDIN_FILENO);
33
8
  // open implicit attaches a process to a terminal device if:
34
9
  // - process has no controlling terminal yet
35
10
  // - O_NOCTTY is not set
36
11
  close(open(slave_path, O_RDWR));
37
- #endif
38
12
 
39
13
  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);
14
+ char *file = argv[2];
15
+ argv = &argv[2];
47
16
 
48
17
  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
- }
18
+ _exit(1);
65
19
  }
66
20
 
67
21
  execvp(file, argv);
68
- bail(COMM_ERR_EXEC, errno);
69
22
  return 1;
70
23
  }
@@ -255,75 +255,17 @@ 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
- 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
- }
316
- });
317
- p.on('close', () => {
318
- done();
319
- });
258
+ if (process.platform === 'darwin') {
259
+ it('should return the name of the process', (done) => {
260
+ const term = new UnixTerminal('/bin/echo');
261
+ assert.strictEqual(term.process, '/bin/echo');
262
+ term.on('exit', () => done());
263
+ term.destroy();
320
264
  });
321
- it('should close on exec when closeFDs is true', (done) => {
265
+ it('should close on exec', (done) => {
322
266
  const data = `
323
267
  var pty = require('./lib/index');
324
- var ptyProcess = pty.spawn('node', ['-e', 'setTimeout(() => console.log("hello from terminal"), 300);'], {
325
- closeFDs: true
326
- });
268
+ var ptyProcess = pty.spawn('node', ['-e', 'setTimeout(() => console.log("hello from terminal"), 300);']);
327
269
  ptyProcess.on('data', function (data) {
328
270
  console.log(data);
329
271
  });
@@ -358,6 +300,36 @@ if (process.platform !== 'win32') {
358
300
  });
359
301
  });
360
302
  }
303
+ it('should handle exec() errors', (done) => {
304
+ const term = new UnixTerminal('/bin/bogus.exe', []);
305
+ term.on('exit', (code, signal) => {
306
+ assert.strictEqual(code, 1);
307
+ done();
308
+ });
309
+ });
310
+ it('should handle chdir() errors', (done) => {
311
+ const term = new UnixTerminal('/bin/echo', [], { cwd: '/nowhere' });
312
+ term.on('exit', (code, signal) => {
313
+ assert.strictEqual(code, 1);
314
+ done();
315
+ });
316
+ });
317
+ it('should not leak child process', (done) => {
318
+ const count = cp.execSync('ps -ax | grep node | wc -l');
319
+ const term = new UnixTerminal('node', [ '-e', `
320
+ console.log('ready');
321
+ setTimeout(()=>console.log('timeout'), 200);`
322
+ ]);
323
+ term.on('data', async (data) => {
324
+ if (data === 'ready\r\n') {
325
+ process.kill(term.pid, 'SIGINT');
326
+ await setTimeout(() => null, 1000);
327
+ const newCount = cp.execSync('ps -ax | grep node | wc -l');
328
+ assert.strictEqual(count.toString(), newCount.toString());
329
+ done();
330
+ }
331
+ });
332
+ });
361
333
  });
362
334
  });
363
335
  }
@@ -69,7 +69,6 @@ export class UnixTerminal extends Terminal {
69
69
  this._rows = opt.rows || DEFAULT_ROWS;
70
70
  const uid = opt.uid ?? -1;
71
71
  const gid = opt.gid ?? -1;
72
- const closeFDs = opt.closeFDs || false;
73
72
  const env: IProcessEnv = assign({}, opt.env);
74
73
 
75
74
  if (opt.env === process.env) {
@@ -112,7 +111,7 @@ export class UnixTerminal extends Terminal {
112
111
  };
113
112
 
114
113
  // fork
115
- const term = pty.fork(file, args, parsedEnv, cwd, this._cols, this._rows, uid, gid, (encoding === 'utf8'), closeFDs, onexit, helperPath);
114
+ const term = pty.fork(file, args, parsedEnv, cwd, this._cols, this._rows, uid, gid, (encoding === 'utf8'), helperPath, onexit);
116
115
 
117
116
  this._socket = new PipeSocket(term.fd);
118
117
  if (encoding !== null) {
@@ -263,6 +262,10 @@ export class UnixTerminal extends Terminal {
263
262
  * Gets the name of the process.
264
263
  */
265
264
  public get process(): string {
265
+ if (process.platform === 'darwin') {
266
+ return pty.process(this._pid) || this._file;
267
+ }
268
+
266
269
  return pty.process(this._fd, this._pty) || this._file;
267
270
  }
268
271
 
@@ -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