X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=pppd%2Fmain.c;h=652240cc6868bf13b4404be886beff2231263cd0;hb=HEAD;hp=feded14da2b4147437acfb4128a62d35d5676725;hpb=799a8255f0699e0332446e8ecd967b05419b9ab8;p=ppp.git diff --git a/pppd/main.c b/pppd/main.c index feded14..3b3fc45 100644 --- a/pppd/main.c +++ b/pppd/main.c @@ -39,7 +39,7 @@ * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * - * Copyright (c) 1999-2020 Paul Mackerras. All rights reserved. + * Copyright (c) 1999-2024 Paul Mackerras. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -48,14 +48,10 @@ * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * - * 2. The name(s) of the authors of this software must not be used to - * endorse or promote products derived from this software without - * prior written permission. - * - * 3. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by Paul Mackerras - * ". + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. * * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY @@ -363,10 +359,16 @@ main(int argc, char *argv[]) struct protent *protp; char numbuf[16]; - PPP_crypto_init(); + strlcpy(path_upapfile, PPP_PATH_UPAPFILE, MAXPATHLEN); + strlcpy(path_chapfile, PPP_PATH_CHAPFILE, MAXPATHLEN); + + strlcpy(path_net_init, PPP_PATH_NET_INIT, MAXPATHLEN); + strlcpy(path_net_preup, PPP_PATH_NET_PREUP, MAXPATHLEN); + strlcpy(path_net_down, PPP_PATH_NET_DOWN, MAXPATHLEN); strlcpy(path_ipup, PPP_PATH_IPUP, MAXPATHLEN); strlcpy(path_ipdown, PPP_PATH_IPDOWN, MAXPATHLEN); + strlcpy(path_ippreup, PPP_PATH_IPPREUP, MAXPATHLEN); #ifdef PPP_WITH_IPV6CP strlcpy(path_ipv6up, PPP_PATH_IPV6UP, MAXPATHLEN); @@ -381,6 +383,11 @@ main(int argc, char *argv[]) /* Initialize syslog facilities */ reopen_log(); + /* Initialize crypto libraries */ + if (!PPP_crypto_init()) { + exit(1); + } + if (gethostname(hostname, sizeof(hostname)) < 0 ) { ppp_option_error("Couldn't get hostname: %m"); exit(1); @@ -600,8 +607,10 @@ main(int argc, char *argv[]) while (phase != PHASE_DEAD) { handle_events(); get_input(); - if (kill_link) + if (kill_link) { lcp_close(0, "User request"); + need_holdoff = 0; + } if (asked_to_quit) { bundle_terminating = 1; if (phase == PHASE_MASTER) @@ -841,7 +850,9 @@ set_ifunit(int iskey) create_pidfile(getpid()); /* write pid to file */ create_linkpidfile(getpid()); } - run_net_script(PPP_PATH_NET_INIT, 1); + if (*remote_number) + ppp_script_setenv("REMOTENUMBER", remote_number, 0); + run_net_script(path_net_init, 1); } /* @@ -910,6 +921,7 @@ create_pidfile(int pid) { FILE *pidfile; + mkdir_recursive(PPP_PATH_VARRUN); slprintf(pidfilename, sizeof(pidfilename), "%s/%s.pid", PPP_PATH_VARRUN, ifname); if ((pidfile = fopen(pidfilename, "w")) != NULL) { @@ -1139,6 +1151,7 @@ get_input(void) notice("Modem hangup"); hungup = 1; code = EXIT_HANGUP; + need_holdoff = 0; lcp_lowerdown(0); /* serial link is no longer available */ link_terminated(0); return; @@ -1249,7 +1262,7 @@ new_phase(ppp_phase_t p) if (phase <= PHASE_NETWORK) { char iftmpname[IFNAMSIZ]; int ifindex = if_nametoindex(ifname); - run_net_script(PPP_PATH_NET_PREUP, 1); + run_net_script(path_net_preup, 1); if (if_indextoname(ifindex, iftmpname) && strcmp(iftmpname, ifname)) { info("Detected interface name change from %s to %s.", ifname, iftmpname); strcpy(ifname, iftmpname); @@ -1257,7 +1270,7 @@ new_phase(ppp_phase_t p) } break; case PHASE_DISCONNECT: - run_net_script(PPP_PATH_NET_DOWN, 0); + run_net_script(path_net_down, 0); break; } @@ -1319,7 +1332,7 @@ print_link_stats(void) if (link_stats_print && link_stats_valid) { int t = (link_connect_time + 5) / 6; /* 1/10ths of minutes */ info("Connect time %d.%d minutes.", t/10, t%10); - info("Sent %u bytes, received %u bytes.", + info("Sent %llu bytes, received %llu bytes.", link_stats.bytes_out, link_stats.bytes_in); link_stats_print = 0; } @@ -1331,9 +1344,9 @@ print_link_stats(void) void reset_link_stats(int u) { - if (!get_ppp_stats(u, &old_link_stats)) - return; + get_ppp_stats(u, &old_link_stats); ppp_get_time(&start_time); + link_stats_print = 1; } /* @@ -2150,7 +2163,7 @@ notify(struct notifier *notif, int val) * novm - log an error message saying we ran out of memory, and die. */ void -novm(char *msg) +novm(const char *msg) { fatal("Virtual memory exhausted allocating %s\n", msg); }