aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--networking/Config.src8
-rw-r--r--networking/ntpd.c35
2 files changed, 39 insertions, 4 deletions
diff --git a/networking/Config.src b/networking/Config.src
index ca0ddcdd9..fbad7ecb2 100644
--- a/networking/Config.src
+++ b/networking/Config.src
@@ -664,6 +664,14 @@ config FEATURE_NTPD_SERVER
664 Make ntpd usable as a NTP server. If you disable this option 664 Make ntpd usable as a NTP server. If you disable this option
665 ntpd will be usable only as a NTP client. 665 ntpd will be usable only as a NTP client.
666 666
667config FEATURE_NTPD_CONF
668 bool "Make ntpd understand /etc/ntp.conf"
669 default y
670 depends on NTPD
671 help
672 Make ntpd look in /etc/ntp.conf for peers. Only "server address"
673 is supported.
674
667config PSCAN 675config PSCAN
668 bool "pscan" 676 bool "pscan"
669 default y 677 default y
diff --git a/networking/ntpd.c b/networking/ntpd.c
index 44592ce54..adda6e5b0 100644
--- a/networking/ntpd.c
+++ b/networking/ntpd.c
@@ -42,6 +42,13 @@
42//usage: ) 42//usage: )
43//usage: "\n -S PROG Run PROG after stepping time, stratum change, and every 11 mins" 43//usage: "\n -S PROG Run PROG after stepping time, stratum change, and every 11 mins"
44//usage: "\n -p PEER Obtain time from PEER (may be repeated)" 44//usage: "\n -p PEER Obtain time from PEER (may be repeated)"
45//usage: IF_FEATURE_NTPD_CONF(
46//usage: "\n If -p is not given, read /etc/ntp.conf"
47//usage: )
48
49// -l and -p options are not compatible with "standard" ntpd:
50// it has them as "-l logfile" and "-p pidfile".
51// -S and -w are not compat either, "standard" ntpd has no such opts.
45 52
46#include "libbb.h" 53#include "libbb.h"
47#include <math.h> 54#include <math.h>
@@ -730,7 +737,7 @@ reset_peer_stats(peer_t *p, double offset)
730} 737}
731 738
732static void 739static void
733add_peers(char *s) 740add_peers(const char *s)
734{ 741{
735 peer_t *p; 742 peer_t *p;
736 743
@@ -2087,14 +2094,34 @@ static NOINLINE void ntp_init(char **argv)
2087 "d" /* compat */ 2094 "d" /* compat */
2088 "46aAbgL", /* compat, ignored */ 2095 "46aAbgL", /* compat, ignored */
2089 &peers, &G.script_name, &G.verbose); 2096 &peers, &G.script_name, &G.verbose);
2090 if (!(opts & (OPT_p|OPT_l))) 2097
2091 bb_show_usage();
2092// if (opts & OPT_x) /* disable stepping, only slew is allowed */ 2098// if (opts & OPT_x) /* disable stepping, only slew is allowed */
2093// G.time_was_stepped = 1; 2099// G.time_was_stepped = 1;
2094 if (peers) { 2100 if (peers) {
2095 while (peers) 2101 while (peers)
2096 add_peers(llist_pop(&peers)); 2102 add_peers(llist_pop(&peers));
2097 } else { 2103 }
2104#if ENABLE_FEATURE_NTPD_CONF
2105 else {
2106 parser_t *parser;
2107 char *token[3];
2108
2109 parser = config_open("/etc/ntp.conf");
2110 while (config_read(parser, token, 3, 1, "# \t", PARSE_NORMAL)) {
2111 if (strcmp(token[0], "server") == 0 && token[1]) {
2112 add_peers(token[1]);
2113 continue;
2114 }
2115 bb_error_msg("skipping %s:%u: unimplemented command '%s'",
2116 "/etc/ntp.conf", parser->lineno, token[0]
2117 );
2118 }
2119 config_close(parser);
2120 }
2121#endif
2122 if (G.peer_cnt == 0) {
2123 if (!(opts & OPT_l))
2124 bb_show_usage();
2098 /* -l but no peers: "stratum 1 server" mode */ 2125 /* -l but no peers: "stratum 1 server" mode */
2099 G.stratum = 1; 2126 G.stratum = 1;
2100 } 2127 }