From 504fe45f35bab29752d39cc2d39d2e8c43fe6eac Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Sun, 23 Mar 2014 15:06:38 +0100 Subject: [PATCH] ntpd: add optional support for /etc/ntp.conf function old new delta add_peers - 98 +98 packed_usage 29470 29511 +41 ntp_init 407 428 +21 pw_encrypt 14 27 +13 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 3/0 up/down: 173/0) Total: 173 bytes Signed-off-by: Denys Vlasenko --- networking/Config.src | 8 ++++++++ networking/ntpd.c | 35 +++++++++++++++++++++++++++++++---- 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 Make ntpd usable as a NTP server. If you disable this option ntpd will be usable only as a NTP client. +config FEATURE_NTPD_CONF + bool "Make ntpd understand /etc/ntp.conf" + default y + depends on NTPD + help + Make ntpd look in /etc/ntp.conf for peers. Only "server address" + is supported. + config PSCAN bool "pscan" 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 @@ //usage: ) //usage: "\n -S PROG Run PROG after stepping time, stratum change, and every 11 mins" //usage: "\n -p PEER Obtain time from PEER (may be repeated)" +//usage: IF_FEATURE_NTPD_CONF( +//usage: "\n If -p is not given, read /etc/ntp.conf" +//usage: ) + +// -l and -p options are not compatible with "standard" ntpd: +// it has them as "-l logfile" and "-p pidfile". +// -S and -w are not compat either, "standard" ntpd has no such opts. #include "libbb.h" #include @@ -730,7 +737,7 @@ reset_peer_stats(peer_t *p, double offset) } static void -add_peers(char *s) +add_peers(const char *s) { peer_t *p; @@ -2087,14 +2094,34 @@ static NOINLINE void ntp_init(char **argv) "d" /* compat */ "46aAbgL", /* compat, ignored */ &peers, &G.script_name, &G.verbose); - if (!(opts & (OPT_p|OPT_l))) - bb_show_usage(); + // if (opts & OPT_x) /* disable stepping, only slew is allowed */ // G.time_was_stepped = 1; if (peers) { while (peers) add_peers(llist_pop(&peers)); - } else { + } +#if ENABLE_FEATURE_NTPD_CONF + else { + parser_t *parser; + char *token[3]; + + parser = config_open("/etc/ntp.conf"); + while (config_read(parser, token, 3, 1, "# \t", PARSE_NORMAL)) { + if (strcmp(token[0], "server") == 0 && token[1]) { + add_peers(token[1]); + continue; + } + bb_error_msg("skipping %s:%u: unimplemented command '%s'", + "/etc/ntp.conf", parser->lineno, token[0] + ); + } + config_close(parser); + } +#endif + if (G.peer_cnt == 0) { + if (!(opts & OPT_l)) + bb_show_usage(); /* -l but no peers: "stratum 1 server" mode */ G.stratum = 1; }