diff options
author | NeilBrown <neilb@suse.de> | 2013-09-03 09:29:52 +1000 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2013-09-03 09:29:52 +1000 |
commit | 9dc70cbc54194ec248321acd488bbaeefa41c5eb (patch) | |
tree | 9bf1b24190d40944c81d8103c00c09aeb0f92fb2 /config.c | |
parent | 343b7e75e886c3b1d38fdedf1ecc2e9cd7ec96ad (diff) |
config: read /etc/mdadm.conf.d as well as /etc/mdadm.conf
If a configfile is explicitly given, just that file or directory
is read. Otherwise we now read both a file
/etc/mdadm.conf
and a directory
/etc/mdadm.conf.d
This allows a transition to directory based config, which in turn
allows easy control from scripts.
Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'config.c')
-rw-r--r-- | config.c | 33 |
1 files changed, 22 insertions, 11 deletions
@@ -72,7 +72,9 @@ #define CONFFILE2 "/etc/mdadm/mdadm.conf" #endif char DefaultConfFile[] = CONFFILE; +char DefaultConfDir[] = CONFFILE ".d"; char DefaultAltConfFile[] = CONFFILE2; +char DefaultAltConfDir[] = CONFFILE2 ".d"; enum linetype { Devices, Array, Mailaddr, Mailfrom, Program, CreateDev, Homehost, AutoMode, Policy, PartPolicy, LTEnd }; @@ -792,10 +794,13 @@ void conf_file_or_dir(FILE *f) void load_conffile(void) { FILE *f; + char *confdir = NULL; if (loaded) return; - if (conffile == NULL) + if (conffile == NULL) { conffile = DefaultConfFile; + confdir = DefaultConfDir; + } if (strcmp(conffile, "none") == 0) { loaded = 1; @@ -819,18 +824,24 @@ void load_conffile(void) if (f == NULL && conffile == DefaultConfFile) { f = fopen(DefaultAltConfFile, "r"); - if (f) + if (f) { conffile = DefaultAltConfFile; + confdir = DefaultAltConfDir; + } + } + if (f) { + loaded = 1; + conf_file_or_dir(f); + fclose(f); + } + if (confdir) { + f = fopen(confdir, "r"); + if (f) { + loaded = 1; + conf_file_or_dir(f); + fclose(f); + } } - if (f == NULL) - return; - - loaded = 1; - conf_file_or_dir(f); - - fclose(f); - -/* printf("got file\n"); */ } char *conf_get_mailaddr(void) |