Skip to content

Commit 36ad9db

Browse files
committed
pty: Always prevent messages from other users and remove the flag
1 parent 5e3f82c commit 36ad9db

1 file changed

Lines changed: 12 additions & 15 deletions

File tree

ext/pty/pty.c

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -287,12 +287,9 @@ ptsname_r(int fd, char *buf, size_t buflen)
287287

288288
#if defined(HAVE_POSIX_OPENPT) || defined(HAVE_OPENPTY) || defined(HAVE_PTSNAME_R)
289289
static inline int
290-
prevent_messages(const char *slavedevice, int fd, int nomesg)
290+
prevent_messages(const char *slavedevice, int fd)
291291
{
292-
if (nomesg)
293-
return change_mode(slavedevice, fd, 0600);
294-
else
295-
return 0;
292+
return change_mode(slavedevice, fd, 0600);
296293
}
297294
#endif
298295

@@ -312,7 +309,7 @@ ioctl_I_PUSH(int fd, const char *const name)
312309
#endif
313310

314311
static int
315-
get_device_once(int *master, int *slave, char SlaveName[DEVICELEN], int nomesg, int fail)
312+
get_device_once(int *master, int *slave, char SlaveName[DEVICELEN], int fail)
316313
{
317314
#if defined(HAVE_POSIX_OPENPT)
318315
/* Unix98 PTY */
@@ -352,7 +349,7 @@ get_device_once(int *master, int *slave, char SlaveName[DEVICELEN], int nomesg,
352349
if (ptsname_r(masterfd, SlaveName, DEVICELEN) != 0) goto error;
353350
slavedevice = SlaveName;
354351
if ((slavefd = rb_cloexec_open(slavedevice, O_RDWR|O_NOCTTY, 0)) == -1) goto error;
355-
if (prevent_messages(slavedevice, slavefd, nomesg) == -1) goto error;
352+
if (prevent_messages(slavedevice, slavefd) == -1) goto error;
356353
rb_update_max_fd(slavefd);
357354

358355
#if defined(I_PUSH) && !defined(__linux__) && !defined(_AIX)
@@ -386,7 +383,7 @@ get_device_once(int *master, int *slave, char SlaveName[DEVICELEN], int nomesg,
386383
}
387384
rb_fd_fix_cloexec(*master);
388385
rb_fd_fix_cloexec(*slave);
389-
if (prevent_messages(SlaveName, *slave, nomesg) == -1) {
386+
if (prevent_messages(SlaveName, *slave) == -1) {
390387
close(*master);
391388
close(*slave);
392389
if (!fail) return -1;
@@ -398,7 +395,7 @@ get_device_once(int *master, int *slave, char SlaveName[DEVICELEN], int nomesg,
398395
#elif defined HAVE__GETPTY
399396
/* SGI IRIX */
400397
char *name;
401-
mode_t mode = nomesg ? 0600 : 0622;
398+
mode_t mode = 0600;
402399

403400
if (!(name = _getpty(master, O_RDWR, mode, 0))) {
404401
if (!fail) return -1;
@@ -438,7 +435,7 @@ get_device_once(int *master, int *slave, char SlaveName[DEVICELEN], int nomesg,
438435
if (ptsname_r(masterfd, SlaveName, DEVICELEN) != 0) goto error;
439436
slavedevice = SlaveName;
440437
if((slavefd = rb_cloexec_open(slavedevice, O_RDWR, 0)) == -1) goto error;
441-
if (prevent_messages(slavedevice, slavefd, nomesg) == -1) goto error;
438+
if (prevent_messages(slavedevice, slavefd) == -1) goto error;
442439
rb_update_max_fd(slavefd);
443440
#if defined(I_PUSH) && !defined(__linux__) && !defined(_AIX)
444441
if(ioctl_I_PUSH(slavefd, "ptem") == -1) goto error;
@@ -492,7 +489,7 @@ get_device_once(int *master, int *slave, char SlaveName[DEVICELEN], int nomesg,
492489
rb_update_max_fd(slavefd);
493490
*slave = slavefd;
494491
if (change_owner(SlaveName, slavefd, getuid(), getgid()) != 0) goto error;
495-
if (change_mode(SlaveName, slavefd, nomesg ? 0600 : 0622) != 0) goto error;
492+
if (change_mode(SlaveName, slavefd, 0600) != 0) goto error;
496493
return 0;
497494
}
498495
close(masterfd);
@@ -507,11 +504,11 @@ get_device_once(int *master, int *slave, char SlaveName[DEVICELEN], int nomesg,
507504
}
508505

509506
static void
510-
getDevice(int *master, int *slave, char SlaveName[DEVICELEN], int nomesg)
507+
getDevice(int *master, int *slave, char SlaveName[DEVICELEN])
511508
{
512-
if (get_device_once(master, slave, SlaveName, nomesg, 0)) {
509+
if (get_device_once(master, slave, SlaveName, 0)) {
513510
rb_gc();
514-
get_device_once(master, slave, SlaveName, nomesg, 1);
511+
get_device_once(master, slave, SlaveName, 1);
515512
}
516513
}
517514

@@ -577,7 +574,7 @@ pty_open(VALUE klass)
577574
int master_fd, slave_fd;
578575
char slavename[DEVICELEN];
579576

580-
getDevice(&master_fd, &slave_fd, slavename, 1);
577+
getDevice(&master_fd, &slave_fd, slavename);
581578

582579
VALUE master_path = rb_obj_freeze(rb_sprintf("masterpty:%s", slavename));
583580
VALUE master_io = rb_io_open_descriptor(rb_cIO, master_fd, FMODE_READWRITE | FMODE_SYNC | FMODE_DUPLEX, master_path, RUBY_IO_TIMEOUT_DEFAULT, NULL);

0 commit comments

Comments
 (0)