]> git.ozlabs.org Git - ppp.git/blobdiff - pppd/sys-bsd.c
add debugging messages about waiting for children at exit
[ppp.git] / pppd / sys-bsd.c
index 27c568921187984fa3d53b460b2d24503858b917..1a1810de2bfc4e674681c38d8de908a0b6b3fe0b 100644 (file)
@@ -21,7 +21,7 @@
  */
 
 #ifndef lint
-static char rcsid[] = "$Id: sys-bsd.c,v 1.41 1999/03/22 05:55:36 paulus Exp $";
+static char rcsid[] = "$Id: sys-bsd.c,v 1.43 1999/04/12 06:24:49 paulus Exp $";
 /*     $NetBSD: sys-bsd.c,v 1.1.1.3 1997/09/26 18:53:04 christos Exp $ */
 #endif
 
@@ -83,8 +83,6 @@ static int restore_term;      /* 1 => we've munged the terminal */
 static struct termios inittermios; /* Initial TTY termios */
 static struct winsize wsinfo;  /* Initial window size info */
 
-static char *lock_file;                /* name of lock file created */
-
 static int loop_slave = -1;
 static int loop_master;
 static char loop_name[20];
@@ -460,6 +458,38 @@ int fd, on;
     ioctl(fd, (on? TIOCMBIS: TIOCMBIC), &modembits);
 }
 
+/*
+ * get_pty - get a pty master/slave pair and chown the slave side
+ * to the uid given.  Assumes slave_name points to >= 12 bytes of space.
+ */
+int
+get_pty(master_fdp, slave_fdp, slave_name, uid)
+    int *master_fdp;
+    int *slave_fdp;
+    char *slave_name;
+    int uid;
+{
+    struct termios tios;
+
+    if (openpty(master_fdp, slave_fdp, slave_name, NULL, NULL) < 0)
+       return 0;
+
+    fchown(*slave_fdp, uid, -1);
+    fchmod(*slave_fdp, S_IRUSR | S_IWUSR);
+    if (tcgetattr(*slave_fdp, &tios) == 0) {
+       tios.c_cflag &= ~(CSIZE | CSTOPB | PARENB);
+       tios.c_cflag |= CS8 | CREAD;
+       tios.c_iflag  = IGNPAR | CLOCAL;
+       tios.c_oflag  = 0;
+       tios.c_lflag  = 0;
+       if (tcsetattr(*slave_fdp, TCSAFLUSH, &tios) < 0)
+           warn("couldn't set attributes on pty: %m");
+    } else
+       warn("couldn't get attributes on pty: %m");
+
+    return 1;
+}
+
 
 /*
  * open_ppp_loopback - open the device we use for getting
@@ -1415,11 +1445,14 @@ get_host_seed()
     return gethostid();
 }
 
+#if 0
 /*
  * lock - create a lock file for the named lock device
  */
 #define        LOCK_PREFIX     "/var/spool/lock/LCK.."
 
+static char *lock_file;                /* name of lock file created */
+
 int
 lock(dev)
     char *dev;
@@ -1489,3 +1522,4 @@ unlock()
        lock_file = NULL;
     }
 }
+#endif