From: Miroslav Lichvar Date: Wed, 30 Mar 2016 13:58:45 +0000 (+0200) Subject: conf: rework local directive to have default stratum X-Git-Tag: 2.4-pre1~32 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=981f897c96862a3497279a00f6fa3fe0d11a3a88;p=thirdparty%2Fchrony.git conf: rework local directive to have default stratum Allow the local directive to be specified without the stratum field. It's an option now, with default value 10. Also, move the parsing code to cmdparse.c to make it available to the client. --- diff --git a/cmdparse.c b/cmdparse.c index 591e2e46..a24324fd 100644 --- a/cmdparse.c +++ b/cmdparse.c @@ -223,6 +223,32 @@ CPS_ParseNTPSourceAdd(char *line, CPS_NTP_Source *src) /* ================================================== */ +int +CPS_ParseLocal(char *line, int *stratum) +{ + int n; + char *cmd; + + *stratum = 10; + + while (*line) { + cmd = line; + line = CPS_SplitWord(line); + + if (!strcasecmp(cmd, "stratum")) { + if (sscanf(line, "%d%n", stratum, &n) != 1) + return 0; + } else { + return 0; + } + + line += n; + } + + return 1; +} +/* ================================================== */ + void CPS_StatusToString(CPS_Status status, char *dest, int len) { diff --git a/cmdparse.h b/cmdparse.h index 3d18adec..eb1714db 100644 --- a/cmdparse.h +++ b/cmdparse.h @@ -59,6 +59,9 @@ typedef struct { /* Parse a command to add an NTP server or peer */ extern CPS_Status CPS_ParseNTPSourceAdd(char *line, CPS_NTP_Source *src); +/* Parse a command to enable local reference */ +extern int CPS_ParseLocal(char *line, int *stratum); + /* Get a string describing error status */ extern void CPS_StatusToString(CPS_Status status, char *dest, int len); diff --git a/conf.c b/conf.c index b7c3ddc7..d989a5e0 100644 --- a/conf.c +++ b/conf.c @@ -817,13 +817,9 @@ parse_log(char *line) static void parse_local(char *line) { - int stratum; - if (sscanf(line, "stratum%d", &stratum) == 1) { - local_stratum = stratum; - enable_local = 1; - } else { + if (!CPS_ParseLocal(line, &local_stratum)) command_parse_error(); - } + enable_local = 1; } /* ================================================== */