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 <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2014-03-23 15:06:38 +01:00
parent f332617fbd
commit 504fe45f35
2 changed files with 39 additions and 4 deletions

View File

@ -664,6 +664,14 @@ config FEATURE_NTPD_SERVER
Make ntpd usable as a NTP server. If you disable this option Make ntpd usable as a NTP server. If you disable this option
ntpd will be usable only as a NTP client. 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 config PSCAN
bool "pscan" bool "pscan"
default y default y

View File

@ -42,6 +42,13 @@
//usage: ) //usage: )
//usage: "\n -S PROG Run PROG after stepping time, stratum change, and every 11 mins" //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: "\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 "libbb.h"
#include <math.h> #include <math.h>
@ -730,7 +737,7 @@ reset_peer_stats(peer_t *p, double offset)
} }
static void static void
add_peers(char *s) add_peers(const char *s)
{ {
peer_t *p; peer_t *p;
@ -2087,14 +2094,34 @@ static NOINLINE void ntp_init(char **argv)
"d" /* compat */ "d" /* compat */
"46aAbgL", /* compat, ignored */ "46aAbgL", /* compat, ignored */
&peers, &G.script_name, &G.verbose); &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 */ // if (opts & OPT_x) /* disable stepping, only slew is allowed */
// G.time_was_stepped = 1; // G.time_was_stepped = 1;
if (peers) { if (peers) {
while (peers) while (peers)
add_peers(llist_pop(&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 */ /* -l but no peers: "stratum 1 server" mode */
G.stratum = 1; G.stratum = 1;
} }