From 981f897c96862a3497279a00f6fa3fe0d11a3a88 Mon Sep 17 00:00:00 2001 From: Miroslav Lichvar Date: Wed, 30 Mar 2016 15:58:45 +0200 Subject: [PATCH] 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. --- cmdparse.c | 26 ++++++++++++++++++++++++++ cmdparse.h | 3 +++ conf.c | 8 ++------ 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/cmdparse.c b/cmdparse.c index 591e2e4..a24324f 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 3d18ade..eb1714d 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 b7c3ddc..d989a5e 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; } /* ================================================== */