diff options
| -rw-r--r-- | src/ngircd/conf.c | 52 | ||||
| -rw-r--r-- | src/ngircd/defines.h | 5 | ||||
| -rw-r--r-- | src/testsuite/ngircd-test1.conf | 1 | ||||
| -rw-r--r-- | src/testsuite/ngircd-test2.conf | 1 |
4 files changed, 35 insertions, 24 deletions
diff --git a/src/ngircd/conf.c b/src/ngircd/conf.c index c08183de..aad64b3e 100644 --- a/src/ngircd/conf.c +++ b/src/ngircd/conf.c @@ -947,33 +947,39 @@ Read_Config(bool TestOnly, bool IsStarting) fclose(fd); if (Conf_IncludeDir[0]) { - /* Include further configuration files, if any */ dh = opendir(Conf_IncludeDir); - if (dh) { - while ((entry = readdir(dh)) != NULL) { - ptr = strrchr(entry->d_name, '.'); - if (!ptr || strcasecmp(ptr, ".conf") != 0) - continue; - snprintf(file, sizeof(file), "%s/%s", - Conf_IncludeDir, entry->d_name); - if (TestOnly) - Config_Error(LOG_INFO, - "Reading configuration from \"%s\" ...", - file); - fd = fopen(file, "r"); - if (fd) { - Read_Config_File(file, fd); - fclose(fd); - } else - Config_Error(LOG_ALERT, - "Can't read configuration \"%s\": %s", - file, strerror(errno)); - } - closedir(dh); - } else + if (!dh) Config_Error(LOG_ALERT, "Can't open include directory \"%s\": %s", Conf_IncludeDir, strerror(errno)); + } else { + strlcpy(Conf_IncludeDir, SYSCONFDIR, sizeof(Conf_IncludeDir)); + strlcat(Conf_IncludeDir, CONFIG_DIR, sizeof(Conf_IncludeDir)); + dh = opendir(Conf_IncludeDir); + } + + /* Include further configuration files, if IncludeDir is available */ + if (dh) { + while ((entry = readdir(dh)) != NULL) { + ptr = strrchr(entry->d_name, '.'); + if (!ptr || strcasecmp(ptr, ".conf") != 0) + continue; + snprintf(file, sizeof(file), "%s/%s", + Conf_IncludeDir, entry->d_name); + if (TestOnly) + Config_Error(LOG_INFO, + "Reading configuration from \"%s\" ...", + file); + fd = fopen(file, "r"); + if (fd) { + Read_Config_File(file, fd); + fclose(fd); + } else + Config_Error(LOG_ALERT, + "Can't read configuration \"%s\": %s", + file, strerror(errno)); + } + closedir(dh); } /* Check if there is still a server to add */ diff --git a/src/ngircd/defines.h b/src/ngircd/defines.h index cffbfadf..7784c174 100644 --- a/src/ngircd/defines.h +++ b/src/ngircd/defines.h @@ -1,6 +1,6 @@ /* * ngIRCd -- The Next Generation IRC Daemon - * Copyright (c)2001-2012 Alexander Barton (alex@barton.de) and Contributors. + * Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -73,6 +73,9 @@ /** Configuration file name. */ #define CONFIG_FILE "/ngircd.conf" +/** Directory containing optional configuration snippets. */ +#define CONFIG_DIR "/ngircd.conf.d" + /** Name of the MOTD file. */ #define MOTD_FILE "/ngircd.motd" diff --git a/src/testsuite/ngircd-test1.conf b/src/testsuite/ngircd-test1.conf index 1e40fd3c..0d0cccc9 100644 --- a/src/testsuite/ngircd-test1.conf +++ b/src/testsuite/ngircd-test1.conf @@ -16,6 +16,7 @@ [Options] OperCanUseMode = yes Ident = no + IncludeDir = /var/empty PAM = no [Operator] diff --git a/src/testsuite/ngircd-test2.conf b/src/testsuite/ngircd-test2.conf index e3f88672..c9d7f6c5 100644 --- a/src/testsuite/ngircd-test2.conf +++ b/src/testsuite/ngircd-test2.conf @@ -16,6 +16,7 @@ [Options] OperCanUseMode = yes Ident = no + IncludeDir = /var/empty PAM = no [Operator] |