]> git.ozlabs.org Git - ppp.git/blobdiff - pppd/main.c
config: Include some extra files in the tarball
[ppp.git] / pppd / main.c
index 9fbcfb66275f4058331934fa8995e1819732b6f8..3b3fc4542f3fa4c46645f85f8f26752abab65d39 100644 (file)
@@ -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.
  *
  * 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
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * 1. Redistributions of source code must retain the above copyright
  *    notice, this list of conditions and the following disclaimer.
  *
  * 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
- *     <paulus@samba.org>".
+ * 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
  *
  * 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];
 
     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_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);
 
 #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 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);
     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();
        while (phase != PHASE_DEAD) {
            handle_events();
            get_input();
-           if (kill_link)
+           if (kill_link) {
                lcp_close(0, "User request");
                lcp_close(0, "User request");
+               need_holdoff = 0;
+           }
            if (asked_to_quit) {
                bundle_terminating = 1;
                if (phase == PHASE_MASTER)
            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());
     }
        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;
 
 {
     FILE *pidfile;
 
+    mkdir_recursive(PPP_PATH_VARRUN);
     slprintf(pidfilename, sizeof(pidfilename), "%s/%s.pid",
             PPP_PATH_VARRUN, ifname);
     if ((pidfile = fopen(pidfilename, "w")) != NULL) {
     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;
        notice("Modem hangup");
        hungup = 1;
        code = EXIT_HANGUP;
+       need_holdoff = 0;
        lcp_lowerdown(0);       /* serial link is no longer available */
        link_terminated(0);
        return;
        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);
        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);
            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:
        }
        break;
     case PHASE_DISCONNECT:
-       run_net_script(PPP_PATH_NET_DOWN, 0);
+       run_net_script(path_net_down, 0);
        break;
     }
 
        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);
     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;
     }
            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)
 {
 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);
     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 - 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);
 }
 {
     fatal("Virtual memory exhausted allocating %s\n", msg);
 }