[git commit] ntpd: add optional support for /etc/ntp.conf

Denys Vlasenko vda.linux at googlemail.com
Sun Mar 23 17:34:51 UTC 2014


commit: http://git.busybox.net/busybox/commit/?id=504fe45f35bab29752d39cc2d39d2e8c43fe6eac
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

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 at googlemail.com>
---
 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 ca0ddcd..fbad7ec 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 44592ce..adda6e5 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 <math.h>
@@ -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;
 	}


More information about the busybox-cvs mailing list