From 3edd3fe5a48063f7e0c402681178a611dffae2ca Mon Sep 17 00:00:00 2001 From: Miroslav Lichvar Date: Wed, 9 Apr 2014 15:12:53 +0200 Subject: [PATCH] main: support configuration commands on command line If there are extra arguments on the chronyd command line, they will be parsed as lines in a configuration file and the normal configuration file will be ignored. --- chrony.texi.in | 8 ++++++++ chronyd.8.in | 5 ++++- main.c | 17 +++++++++++++++-- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/chrony.texi.in b/chrony.texi.in index 3928e8a..18fbf41 100644 --- a/chrony.texi.in +++ b/chrony.texi.in @@ -971,6 +971,10 @@ entering the command Information messages and warnings will be logged to syslog. +If no configuration commands are specified on the command line, +@code{chronyd} will read the commands from the configuration file +(default @file{@SYSCONFDIR@/chrony.conf}). + The command line options supported are as follows: @table @code @@ -1106,6 +1110,10 @@ Each command in the configuration file is placed on a separate line. The following sections describe each of the commands in turn. The directives can occur in any order in the file. +The configuration commands can also be specified directly on the +@code{chronyd} command line, each argument is parsed as a line and +the configuration file is ignored. + @menu * comments in config file:: How to write a comment * acquisitionport directive:: Set port to use for initial time probes diff --git a/chronyd.8.in b/chronyd.8.in index 5d2e3c5..245388a 100644 --- a/chronyd.8.in +++ b/chronyd.8.in @@ -4,7 +4,7 @@ chronyd \- chrony background daemon .SH SYNOPSIS .B chronyd -[\fIOPTIONS\fR] +[\fIOPTIONS\fR] [\fIconfiguration commands\fR] .SH DESCRIPTION \fIchrony\fR is a pair of programs for maintaining the accuracy of computer @@ -31,6 +31,9 @@ command: Information messages and warnings will be logged to syslog. +If no configuration commands are specified on the command line, +\fBchronyd\fR will read the commands from the configuration file +(default \fI@SYSCONFDIR@/chrony.conf\fR). .SH OPTIONS A summary of the options supported by \fBchronyd\fR is included below. diff --git a/main.c b/main.c index 6c6b3ee..77d8d2d 100644 --- a/main.c +++ b/main.c @@ -332,6 +332,7 @@ int main int other_pid; int lock_memory = 0, sched_priority = 0; int system_log = 1; + int config_args = 0; LOG_Initialise(); @@ -383,8 +384,12 @@ int main address_family = IPADDR_INET4; } else if (!strcmp("-6", *argv)) { address_family = IPADDR_INET6; - } else { + } else if (*argv[0] == '-') { LOG_FATAL(LOGF_Main, "Unrecognized command line option [%s]", *argv); + } else { + /* Process remaining arguments and configuration lines */ + config_args = argc; + break; } } @@ -410,7 +415,15 @@ int main DNS_SetAddressFamily(address_family); CNF_SetRestarted(restarted); - CNF_ReadFile(conf_file); + + /* Parse the config file or the remaining command line arguments */ + if (!config_args) { + CNF_ReadFile(conf_file); + } else { + do { + CNF_ParseLine(NULL, config_args - argc + 1, *argv); + } while (++argv, --argc); + } /* Check whether another chronyd may already be running. Do this after * forking, so that message logging goes to the right place (i.e. syslog), in