]> git.ozlabs.org Git - ppp.git/blobdiff - pppd/main.c
make it compile for sunos
[ppp.git] / pppd / main.c
index f5614b972a40191c46727b727151f1b45916999d..4ec593e067ce6cff787b8101f60cb707faf7cda4 100644 (file)
@@ -18,7 +18,7 @@
  */
 
 #ifndef lint
-static char rcsid[] = "$Id: main.c,v 1.53 1999/02/26 10:38:51 paulus Exp $";
+static char rcsid[] = "$Id: main.c,v 1.56 1999/03/06 11:28:10 paulus Exp $";
 #endif
 
 #include <stdio.h>
@@ -448,7 +448,16 @@ main(argc, argv)
        hungup = 0;
        kill_link = 0;
        sigprocmask(SIG_UNBLOCK, &mask, NULL);
-       while ((ttyfd = open(devnam, O_NONBLOCK | O_RDWR, 0)) < 0) {
+       for (;;) {
+           /* If the user specified the device name, become the
+              user before opening it. */
+           if (!devnam_info.priv)
+               seteuid(uid);
+           ttyfd = open(devnam, O_NONBLOCK | O_RDWR, 0);
+           if (!devnam_info.priv)
+               seteuid(0);
+           if (ttyfd >= 0)
+               break;
            if (errno != EINTR)
                syslog(LOG_ERR, "Failed to open %s: %m", devnam);
            if (!persist || errno != EINTR)
@@ -504,7 +513,14 @@ main(argc, argv)
 
        /* reopen tty if necessary to wait for carrier */
        if (connector == NULL && modem) {
-           while ((i = open(devnam, O_RDWR)) < 0) {
+           for (;;) {
+               if (!devnam_info.priv)
+                   seteuid(uid);
+               i = open(devnam, O_RDWR);
+               if (!devnam_info.priv)
+                   seteuid(0);
+               if (i >= 0)
+                   break;
                if (errno != EINTR)
                    syslog(LOG_ERR, "Failed to reopen %s: %m", devnam);
                if (!persist || errno != EINTR || hungup || kill_link)
@@ -1145,7 +1161,7 @@ device_script(program, in, out)
                close(errfd);
            }
        }
-       setuid(getuid());
+       setuid(uid);
        setgid(getgid());
        execl("/bin/sh", "sh", "-c", program, (char *)0);
        syslog(LOG_ERR, "could not exec /bin/sh: %m");
@@ -1224,10 +1240,10 @@ run_program(prog, args, must_exist, done, arg)
        int new_fd;
 
        /* Leave the current location */
-       (void) setsid();    /* No controlling tty. */
+       (void) setsid();        /* No controlling tty. */
        (void) umask (S_IRWXG|S_IRWXO);
-       (void) chdir ("/"); /* no current directory. */
-       setuid(geteuid());
+       (void) chdir ("/");     /* no current directory. */
+       setuid(0);              /* set real UID = root */
        setgid(getegid());
 
        /* Ensure that nothing of our device environment is inherited. */
@@ -1378,10 +1394,12 @@ format_packet(p, len, printer, arg)
        }
     }
 
-    for (; len > 0; --len) {
+    for (i = 0; i < len && i < 32; ++i) {
        GETCHAR(x, p);
        printer(arg, " %.2x", x);
     }
+    if (i < len)
+       printer(arg, " ...");
 }
 
 static void