[prev in list] [next in list] [prev in thread] [next in thread]
List: openbsd-tech
Subject: Remove openpty's manual fallback path
From: Matthew Dempsky <matthew () dempsky ! org>
Date: 2012-04-26 5:42:47
Message-ID: 20120426054247.GA9984 () mdempsky ! mtv ! corp ! google ! com
[Download RAW message or body]
Support for /dev/ptm was added over 8 years ago. I think we can
safely rely on it being available by now.
ok?
Index: pty.c
===================================================================
RCS file: /home/mdempsky/anoncvs/cvs/src/lib/libutil/pty.c,v
retrieving revision 1.15
diff -u -p -r1.15 pty.c
--- pty.c 30 Mar 2006 20:44:19 -0000 1.15
+++ pty.c 26 Apr 2012 05:31:04 -0000
@@ -44,34 +44,23 @@
#include "util.h"
-#define TTY_LETTERS "pqrstuvwxyzPQRST"
-#define TTY_SUFFIX "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
-
int
openpty(int *amaster, int *aslave, char *name, struct termios *termp,
struct winsize *winp)
{
- char line[] = "/dev/ptyXX";
- const char *cp1, *cp2;
int master, slave, fd;
struct ptmget ptm;
- struct group *gr;
- gid_t ttygid;
/*
- * Try to use /dev/ptm and the PTMGET ioctl to get a properly set up
- * and owned pty/tty pair. If this fails, (because we might not have
- * the ptm device, etc.) fall back to using the traditional method
- * of walking through the pty entries in /dev for the moment, until
- * there is less chance of people being seriously boned by running
- * kernels without /dev/ptm in them.
+ * Use /dev/ptm and the PTMGET ioctl to get a properly set up and
+ * owned pty/tty pair.
*/
fd = open(PATH_PTMDEV, O_RDWR, 0);
if (fd == -1)
- goto walkit;
+ return (-1);
if ((ioctl(fd, PTMGET, &ptm) == -1)) {
close(fd);
- goto walkit;
+ return (-1);
}
close(fd);
master = ptm.cfd;
@@ -89,49 +78,6 @@ openpty(int *amaster, int *aslave, char
if (winp)
(void) ioctl(slave, TIOCSWINSZ, winp);
return (0);
- walkit:
- if ((gr = getgrnam("tty")) != NULL)
- ttygid = gr->gr_gid;
- else
- ttygid = (gid_t)-1;
-
- for (cp1 = TTY_LETTERS; *cp1; cp1++) {
- line[8] = *cp1;
- for (cp2 = TTY_SUFFIX; *cp2; cp2++) {
- line[9] = *cp2;
- line[5] = 'p';
- if ((master = open(line, O_RDWR, 0)) == -1) {
- if (errno == ENOENT)
- return (-1); /* out of ptys */
- } else {
- line[5] = 't';
- (void) chown(line, getuid(), ttygid);
- (void) chmod(line, S_IRUSR|S_IWUSR|S_IWGRP);
- (void) revoke(line);
- if ((slave = open(line, O_RDWR, 0)) != -1) {
- *amaster = master;
- *aslave = slave;
- if (name) {
- /*
- * Manual page says "at least
- * 16 characters".
- */
- strlcpy(name, line, 16);
- }
- if (termp)
- (void) tcsetattr(slave,
- TCSAFLUSH, termp);
- if (winp)
- (void) ioctl(slave, TIOCSWINSZ,
- winp);
- return (0);
- }
- (void) close(master);
- }
- }
- }
- errno = ENOENT; /* out of ptys */
- return (-1);
}
pid_t
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic