X-Git-Url: http://git.ozlabs.org/?p=ppp.git;a=blobdiff_plain;f=pppd%2Fsys-svr4.c;h=08a2a01fd46599a338e7c527e6c91c31f92dcd87;hp=20545a7fb79a575b5cba05d2ebdd7275ad3a0d0a;hb=cbaae8cca6a6377163a2b3ecbbfde1a0a2620bf7;hpb=5da8d0e22703b3512673e057fffe670ca9f958df diff --git a/pppd/sys-svr4.c b/pppd/sys-svr4.c index 20545a7..08a2a01 100644 --- a/pppd/sys-svr4.c +++ b/pppd/sys-svr4.c @@ -26,7 +26,7 @@ */ #ifndef lint -static char rcsid[] = "$Id: sys-svr4.c,v 1.3 1995/06/23 01:54:11 paulus Exp $"; +static char rcsid[] = "$Id: sys-svr4.c,v 1.4 1995/08/10 06:53:39 paulus Exp $"; #endif #include @@ -37,6 +37,7 @@ static char rcsid[] = "$Id: sys-svr4.c,v 1.3 1995/06/23 01:54:11 paulus Exp $"; #include #include #include +#include #include #include #include @@ -63,6 +64,7 @@ static int ipmuxid = -1; static int restore_term; static struct termios inittermios; +static pid_t tty_sid; /* original session ID for terminal */ static int link_mtu, link_mru; @@ -145,6 +147,9 @@ establish_ppp() { int i, ifd; + if (default_device) + tty_sid = getsid((pid_t)0); + pppfd = open("/dev/ppp", O_RDWR | O_NONBLOCK, 0); if (pppfd < 0) { syslog(LOG_ERR, "Can't open /dev/ppp: %m"); @@ -227,6 +232,16 @@ disestablish_ppp() syslog(LOG_ERR, "Couldn't restore tty module %s: %m", tty_modules[i]); } + if (hungup && default_device && tty_sid > 0) { + /* + * If we have received a hangup, we need to send a SIGHUP + * to the terminal's controlling process. The reason is + * that the original stream head for the terminal hasn't + * seen the M_HANGUP message (it went up through the ppp + * driver to the stream head for our fd to /dev/ppp). + */ + kill(tty_sid, SIGHUP); + } } } @@ -1162,7 +1177,7 @@ gethostid() syslog(LOG_ERR, "sysinfo: %m"); return 0; } - return strtol(buf, NULL, 16); + return (int) strtoul(buf, NULL, 16); } int