summaryrefslogtreecommitdiff
path: root/config.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2013-09-03 09:29:52 +1000
committerNeilBrown <neilb@suse.de>2013-09-03 09:29:52 +1000
commit9dc70cbc54194ec248321acd488bbaeefa41c5eb (patch)
tree9bf1b24190d40944c81d8103c00c09aeb0f92fb2 /config.c
parent343b7e75e886c3b1d38fdedf1ecc2e9cd7ec96ad (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.c33
1 files changed, 22 insertions, 11 deletions
diff --git a/config.c b/config.c
index c15102c7..38ed8a2b 100644
--- a/config.c
+++ b/config.c
@@ -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)