]> arthur.barton.de Git - ngircd-alex.git/commitdiff
IncludeDir: default to "$SYSCONFDIR/ngircd.conf.d" bug157-IncludeDir
authorAlexander Barton <alex@barton.de>
Fri, 24 May 2013 22:25:38 +0000 (00:25 +0200)
committerAlexander Barton <alex@barton.de>
Fri, 24 May 2013 22:25:38 +0000 (00:25 +0200)
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!

src/ngircd/conf.c
src/ngircd/defines.h
src/testsuite/ngircd-test1.conf
src/testsuite/ngircd-test2.conf

index c08183de9c1c94861b6f646bdbf341615391a652..aad64b3e380444dff3e7769feef02cff684f33c2 100644 (file)
@@ -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 */
index cffbfadfa10cdb8ecca525c8d1c787bd650ee71c..7784c17470434ee7d3997767239c1b2bfe6c8d6c 100644 (file)
@@ -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"
 
index 1e40fd3cb63c45ebaef003f4248618bee344b088..0d0cccc9ce3b669b280cb0a26dd9f1d78df6d72e 100644 (file)
@@ -16,6 +16,7 @@
 [Options]
        OperCanUseMode = yes
        Ident = no
+       IncludeDir = /var/empty
        PAM = no
 
 [Operator]
index e3f88672c39bd5f71091e79236d89e93fab4ad3a..c9d7f6c5b4b02f44144318b8e4f67cc2790e874b 100644 (file)
@@ -16,6 +16,7 @@
 [Options]
        OperCanUseMode = yes
        Ident = no
+       IncludeDir = /var/empty
        PAM = no
 
 [Operator]