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; } /* ================================================== */