[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