From 13a78ecd2f2804e2c14b1e33cdf99a48ed4f6573 Mon Sep 17 00:00:00 2001 From: Miroslav Lichvar Date: Thu, 15 Apr 2021 09:43:01 +0200 Subject: [PATCH] conf: require sourcedir files to be terminated by newline When reading a *.sources file require that each line is termined by the newline character to avoid processing an unfinished line, e.g. due to an unexpected call of the reload command when the file is being written in place. --- conf.c | 5 +++-- doc/chrony.conf.adoc | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/conf.c b/conf.c index 3567252..1f35061 100644 --- a/conf.c +++ b/conf.c @@ -1694,8 +1694,9 @@ load_source_file(const char *filename) return; while (fgets(line, sizeof (line), f)) { - if (strlen(line) >= MAX_LINE_LENGTH) - continue; + /* Require lines to be terminated */ + if (line[0] == '\0' || line[strlen(line) - 1] != '\n') + break; CPS_NormalizeLine(line); if (line[0] == '\0') diff --git a/doc/chrony.conf.adoc b/doc/chrony.conf.adoc index ff95ccc..117b221 100644 --- a/doc/chrony.conf.adoc +++ b/doc/chrony.conf.adoc @@ -2310,7 +2310,8 @@ confdir @SYSCONFDIR@/chrony.d [[sourcedir]]*sourcedir* _directory_...:: The *sourcedir* directive is identical to the *confdir* directive, except the configuration files have the _.sources_ suffix, they can only specify NTP -sources (i.e. use the *server*, *pool*, and *peer* directive), and can be +sources (i.e. the *server*, *pool*, and *peer* directives), they are expected +to have all lines terminated by the newline character, and they can be reloaded by the <> command in *chronyc*. It is particularly useful with dynamic sources like NTP servers received from a DHCP server, which can be written to a file specific to the