conf: allow wildcard patterns in include directive

Use glob() to match and read multiple configuration files with one
include directive.
This commit is contained in:
Miroslav Lichvar 2015-08-24 15:08:39 +02:00
parent 05183748a8
commit c0867b58f5
3 changed files with 21 additions and 5 deletions

View file

@ -1668,12 +1668,15 @@ hwclockfile /etc/adjtime
@c {{{ include
@node include directive
@subsection include
The @code{include} directive includes a specified configuration file.
This is useful when maintaining configuration on multiple hosts to
keep the differences in a separate file.
The @code{include} directive includes a specified configuration file or
multiple configuration files when a wildcard pattern is specified. This can be
useful when maintaining configuration on multiple hosts to keep the differences
in separate files.
An example of the command is
@example
include @SYSCONFDIR@/chrony/local.conf
include @SYSCONFDIR@/chrony.d/*.conf
@end example
@c }}}
@c {{{ initstepslew

14
conf.c
View file

@ -1236,8 +1236,20 @@ parse_tempcomp(char *line)
static void
parse_include(char *line)
{
glob_t gl;
size_t i;
check_number_of_args(line, 1);
CNF_ReadFile(line);
if (glob(line, 0, NULL, &gl)) {
DEBUG_LOG(LOGF_Configure, "glob of %s failed", line);
return;
}
for (i = 0; i < gl.gl_pathc; i++)
CNF_ReadFile(gl.gl_pathv[i]);
globfree(&gl);
}
/* ================================================== */

View file

@ -39,6 +39,7 @@
#include <errno.h>
#include <fcntl.h>
#include <float.h>
#include <glob.h>
#if !defined(__FreeBSD__) && !defined(MACOSX)
#include <malloc.h>
#endif