X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=pppd%2Fsys-linux.c;h=43855a932afaff000fc419412e873aca7ce17612;hb=52e781b87df66bd5a4eb075791f4d91604016144;hp=a5989d3da489b1d79a1e890d17d9187a6ca6661e;hpb=713f439d750c5774b1ae86b9b830a35819d00d2e;p=ppp.git diff --git a/pppd/sys-linux.c b/pppd/sys-linux.c index a5989d3..43855a9 100644 --- a/pppd/sys-linux.c +++ b/pppd/sys-linux.c @@ -1571,47 +1571,39 @@ ppp_registered(void) { int local_fd; int init_disc = -1; - int initfdflags; + int mfd = -1; + int ret = 0; - local_fd = open(devnam, O_NONBLOCK | O_RDWR, 0); - if (local_fd < 0) { - error("Failed to open %s: %m(%d)", devnam, errno); - return 0; - } - - initfdflags = fcntl(local_fd, F_GETFL); - if (initfdflags == -1) { - error("Couldn't get device fd flags: %m(%d)", errno); - close (local_fd); - return 0; + if (devnam[0] == 0) { + /* running with notty or pty option */ + char slave[16]; + if (!get_pty(&mfd, &local_fd, slave, 0)) + return 0; + } else { + local_fd = open(devnam, O_NONBLOCK | O_RDWR, 0); + if (local_fd < 0) { + error("Failed to open %s: %m(%d)", devnam, errno); + return 0; + } } - initfdflags &= ~O_NONBLOCK; - fcntl(local_fd, F_SETFL, initfdflags); /* - * Read the initial line dicipline and try to put the device into the + * Read the initial line discipline and try to put the device into the * PPP dicipline. */ if (ioctl(local_fd, TIOCGETD, &init_disc) < 0) { error("ioctl(TIOCGETD): %m(%d)", errno); - close (local_fd); - return 0; - } - - if (ioctl(local_fd, TIOCSETD, &ppp_disc) < 0) { - error("ioctl(TIOCSETD): %m(%d)", errno); - close (local_fd); - return 0; - } - - if (ioctl(local_fd, TIOCSETD, &init_disc) < 0) { - error("ioctl(TIOCSETD): %m(%d)", errno); - close (local_fd); - return 0; - } + } else if (ioctl(local_fd, TIOCSETD, &ppp_disc) < 0) { + error("ioctl(TIOCSETD(PPP)): %m(%d)", errno); + } else if (ioctl(local_fd, TIOCSETD, &init_disc) < 0) { + error("ioctl(TIOCSETD(%d)): %m(%d)", init_disc, errno); + } else + ret = 1; close (local_fd); - return 1; + if (mfd >= 0) + close(mfd); + return ret; } /********************************************************************