void disestablish_ppp(int tty_fd)
{
+ if (!hungup) {
/*
- * Attempt to restore the previous tty settings
+ * Flush the tty output buffer so that the TIOCSETD doesn't hang.
*/
- if (!hungup) {
+ if (tcflush(tty_fd, TCIOFLUSH) < 0)
+ warn("tcflush failed: %m");
/*
* Restore the previous line discipline
*/
- tcflush(tty_fd, TCIOFLUSH);
if (ioctl(tty_fd, TIOCSETD, &tty_disc) < 0) {
if ( ! ok_error (errno))
error("ioctl(TIOCSETD, N_TTY): %m");
* path_to_procfs - find the path to the proc file system mount point
*/
-static int path_to_procfs (void)
+static int path_to_procfs (const char *tail)
{
struct mntent *mntent;
FILE *fp;
if (fp == NULL) {
/* Default the mount location of /proc */
strlcpy (route_buffer, "/proc", sizeof (route_buffer));
+ strlcat (route_buffer, tail, sizeof(route_buffer));
return 1;
}
return 0;
strlcpy(route_buffer, mntent->mnt_dir, sizeof (route_buffer));
+ strlcat (route_buffer, tail, sizeof(route_buffer));
return 1;
}
static char *path_to_route (void)
{
- if (!path_to_procfs()) {
+ if (!path_to_procfs("/net/route")) {
error("proc file system not mounted");
return 0;
}
- strlcat (route_buffer, "/net/route", sizeof(route_buffer));
return (route_buffer);
}
no_ppp_msg =
"This system lacks kernel support for PPP. This could be because\n"
- "the PPP kernel module is not loaded, or because the kernel is\n"
- "not configured for PPP. See the README.linux file in the\n"
- "ppp-2.3.7 distribution.\n";
+ "the PPP kernel module could not be loaded, or because PPP was not\n"
+ "included in the kernel configuration. If PPP was included as a\n"
+ "module, try `/sbin/modprobe -v ppp'. If that fails, check that\n"
+ "ppp.o exists in /lib/modules/`uname -r`/net.\n"
+ "See README.linux file in the ppp distribution for more details.\n";
/*
* Open a socket for doing the ioctl operations.
sys_check_options(void)
{
#ifdef IPX_CHANGE
- struct stat stat_buf;
/*
* Disable the IPX protocol if the support is not present in the kernel.
- * If we disable it then ensure that IP support is enabled.
*/
- while (ipxcp_protent.enabled_flag) {
- if (path_to_procfs()) {
- strlcat (route_buffer, "/net/ipx_interface", sizeof(route_buffer));
- if (lstat (route_buffer, &stat_buf) >= 0)
- break;
+ if (ipxcp_protent.enabled_flag) {
+ struct stat stat_buf;
+ if (!path_to_procfs("/net/ipx_interface")
+ || lstat (route_buffer, &stat_buf) < 0) {
+ error("IPX support is not present in the kernel\n");
+ ipxcp_protent.enabled_flag = 0;
}
- error("IPX support is not present in the kernel\n");
- ipxcp_protent.enabled_flag = 0;
- ipcp_protent.enabled_flag = 1;
- break;
}
#endif
if (demand && driver_is_old) {