diff -urN -x'*.swp' ppp.old/pppd/auth.c ppp.dev/pppd/auth.c --- ppp.old/pppd/auth.c 2004-11-12 11:30:51.000000000 +0100 +++ ppp.dev/pppd/auth.c 2005-07-13 14:54:23.000000000 +0200 @@ -532,6 +532,12 @@ link_required(unit) int unit; { +} + +void +start_link(unit) + int unit; +{ new_phase(PHASE_SERIALCONN); devfd = the_channel->connect(); @@ -984,10 +990,12 @@ int unit, protocol, prot_flavor; { int bit; + const char *prot = ""; switch (protocol) { case PPP_CHAP: bit = CHAP_WITHPEER; + prot = "CHAP"; switch (prot_flavor) { case CHAP_MD5: bit |= CHAP_MD5_WITHPEER; @@ -1006,15 +1014,19 @@ if (passwd_from_file) BZERO(passwd, MAXSECRETLEN); bit = PAP_WITHPEER; + prot = "PAP"; break; case PPP_EAP: bit = EAP_WITHPEER; + prot = "EAP"; break; default: warn("auth_withpeer_success: unknown protocol %x", protocol); bit = 0; } + notice("%s authentication succeeded", prot); + /* Save the authentication method for later. */ auth_done[unit] |= bit; @@ -1648,6 +1660,7 @@ static void plogout() { + char *tty; #ifdef USE_PAM int pam_error; @@ -1658,14 +1671,12 @@ } /* Apparently the pam stuff does closelog(). */ reopen_log(); -#else /* ! USE_PAM */ - char *tty; +#endif /* USE_PAM */ tty = devnam; if (strncmp(tty, "/dev/", 5) == 0) tty += 5; logwtmp(tty, "", ""); /* Wipe out utmp logout entry */ -#endif /* ! USE_PAM */ logged_in = 0; } diff -urN -x'*.swp' ppp.old/pppd/main.c ppp.dev/pppd/main.c --- ppp.old/pppd/main.c 2005-07-13 11:34:28.000000000 +0200 +++ ppp.dev/pppd/main.c 2005-07-13 14:49:06.000000000 +0200 @@ -537,6 +537,7 @@ script_unsetenv("BYTES_RCVD"); lcp_open(0); /* Start protocol */ + start_link(0); while (phase != PHASE_DEAD) { handle_events(); get_input(); diff -urN -x'*.swp' ppp.old/pppd/pppd.h ppp.dev/pppd/pppd.h --- ppp.old/pppd/pppd.h 2005-07-13 11:34:28.000000000 +0200 +++ ppp.dev/pppd/pppd.h 2005-07-13 14:48:56.000000000 +0200 @@ -526,6 +526,7 @@ /* Procedures exported from auth.c */ void link_required __P((int)); /* we are starting to use the link */ +void start_link __P((int)); /* bring the link up now */ void link_terminated __P((int)); /* we are finished with the link */ void link_down __P((int)); /* the LCP layer has left the Opened state */ void upper_layers_down __P((int));/* take all NCPs down */ diff -urN -x'*.swp' ppp.old/pppd/tty.c ppp.dev/pppd/tty.c --- ppp.old/pppd/tty.c 2004-11-13 13:07:29.000000000 +0100 +++ ppp.dev/pppd/tty.c 2005-07-13 14:46:57.000000000 +0200 @@ -755,14 +755,6 @@ close(pty_master); pty_master = -1; } - if (pty_slave >= 0) { - close(pty_slave); - pty_slave = -1; - } - if (real_ttyfd >= 0) { - close(real_ttyfd); - real_ttyfd = -1; - } ttyfd = -1; if (got_sigterm) asked_to_quit = 1; @@ -781,6 +773,7 @@ } else { info("Serial link disconnected."); } + stop_charshunt(NULL, 0); } void tty_close_fds() @@ -944,7 +937,6 @@ exit(0); } charshunt_pid = cpid; - add_notifier(&sigreceived, stop_charshunt, 0); record_child(cpid, "pppd (charshunt)", charshunt_done, NULL); return 1; }