about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlexander Barton <alex@barton.de>2013-05-25 00:25:38 +0200
committerAlexander Barton <alex@barton.de>2013-05-25 00:25:38 +0200
commit7ea3864a9369086024a2d541b053963958b19899 (patch)
tree0321cb498accebef88777ae41aab9ebaf408711d
parent891dbd2acc59a6d9ff6dd8a5b12e91f5a8fa20ed (diff)
downloadngircd-7ea3864a9369086024a2d541b053963958b19899.tar.gz
ngircd-7ea3864a9369086024a2d541b053963958b19899.zip
IncludeDir: default to "$SYSCONFDIR/ngircd.conf.d"
Now "IncludeDir" defaults to "$SYSCONFDIR/ngircd.conf.d" instead
of no directory, but a missing directory is only reported as an
error if it has explicitely configured in the main configuration
file and simply ignored otherwise.

Therefore it is now possible not to touch the default (sample)
configuration file at all, and set all distribution and/or system
specific configuration options in "*.conf" files stored in
"$SYSCONFDIF/ngircd.conf.d/".

Thanks to "Elmasloco" for the idea!
-rw-r--r--src/ngircd/conf.c52
-rw-r--r--src/ngircd/defines.h5
-rw-r--r--src/testsuite/ngircd-test1.conf1
-rw-r--r--src/testsuite/ngircd-test2.conf1
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]