From: Alexander Barton Date: Sun, 21 Jan 2024 18:41:39 +0000 (+0100) Subject: Use a default "IncludeDir" only when no config file was specified X-Git-Tag: rel-27-rc1~57 X-Git-Url: https://arthur.barton.de/gitweb/?a=commitdiff_plain;h=b4c8e74ccb2cb95e492323b8b39950b203e0262f;hp=3ab6c85284b6b6ba9eae8ee30cadcc545bf02178;p=ngircd-alex.git Use a default "IncludeDir" only when no config file was specified No longer use a default built-in value for the "IncludeDir" directive when a configuration file was explicitly specified on the command line using "--config"/"-f": This way no default include directory is scanned when a possibly non-default configuration file is used which (intentionally) did not specify an "IncludeDir" directive. With this patch you now can use "-f /dev/null" for checking all built-in defaults, regardless of any local configuration files in the default drop-in directory (which would have been read in until this change). --- diff --git a/ChangeLog b/ChangeLog index bd82b1ed..1472e98b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -10,6 +10,14 @@ ngIRCd 27 + - No longer use a default built-in value for the "IncludeDir" directive when + a configuration file was explicitly specified on the command line using + "--config"/"-f": This way no default include directory is scanned when a + possibly non-default configuration file is used which (intentionally) did + not specify an "IncludeDir" directive. So now you can use "-f /dev/null" + for checking all built-in defaults, regardless of any local configuration + files in the default drop-in directory (which would have been read in + until this change). - The server "Name" in the "[Global]" section of the configuration file no longer needs to be set: When not set (or empty), ngIRCd now tries to deduce a valid IRC server name from the local host name ("node name"), diff --git a/doc/sample-ngircd.conf.tmpl b/doc/sample-ngircd.conf.tmpl index 79360869..d59b139b 100644 --- a/doc/sample-ngircd.conf.tmpl +++ b/doc/sample-ngircd.conf.tmpl @@ -35,7 +35,8 @@ ;AdminEMail = admin@irc.server # Text file which contains the ngIRCd help text. This file is required - # to display help texts when using the "HELP " command. + # to display help texts when using the "HELP " command. Default: a + # built-in standard path (check "ngircd --configtest"). ;HelpFile = :DOCDIR:/Commands.txt # Info text of the server. This will be shown by WHOIS and @@ -50,7 +51,8 @@ ;Listen = 127.0.0.1,192.168.0.1 # Text file with the "message of the day" (MOTD). This message will - # be shown to all users connecting to the server: + # be shown to all users connecting to the server: Default: a built-in + # standard path (check "ngircd --configtest"). ;MotdFile = :ETCDIR:/ngircd.motd # A simple Phrase (<127 chars) if you don't want to use a motd file. @@ -194,6 +196,9 @@ # Directory containing configuration snippets (*.conf), that should # be read in after parsing this configuration file. + # Default: a built-in directory name when no configuration file was + # explicitly given on the command line (check "ngircd --configtest"), + # none (empty) otherwise. ;IncludeDir = :ETCDIR:/conf.d # Enhance user privacy slightly (useful for IRC server on TOR or I2P) diff --git a/man/ngircd.conf.5.tmpl b/man/ngircd.conf.5.tmpl index 01e5408e..9d37e5fa 100644 --- a/man/ngircd.conf.5.tmpl +++ b/man/ngircd.conf.5.tmpl @@ -107,7 +107,8 @@ command. This information is not required by the server but by RFC! Text file which contains the ngIRCd help text. This file is required to display help texts when using the "HELP " command. Please note: Changes made to this file take effect when ngircd starts up -or is instructed to re-read its configuration file. +or is instructed to re-read its configuration file. Default: a built-in +standard path. .TP \fBInfo\fR (string) Info text of the server. This will be shown by WHOIS and LINKS requests for @@ -123,7 +124,7 @@ IP addresses and interfaces by default. Text file with the "message of the day" (MOTD). This message will be shown to all users connecting to the server. Please note: Changes made to this file take effect when ngircd starts up or is instructed to re-read its -configuration file. +configuration file. Default: a built-in standard path. .TP \fBMotdPhrase\fR (string) A simple Phrase (<127 chars) if you don't want to use a MOTD file. @@ -294,7 +295,17 @@ Default: yes. \fBIncludeDir\fR (string) Directory containing configuration snippets (*.conf), that should be read in after parsing the current configuration file. -Default: none. +Default: a built-in directory name when no configuration file was explicitly +given on the command line (check "ngircd --configtest"), none (empty) +otherwise. +.PP +.RS +This way no default include directory is used when a possibly non-default +configuration file was explicitly specified using "--config"/"-f" on the +command line which (intentionally) did not specify an +.I "IncludeDir" +directive. +.RE .TP \fBMorePrivacy\fR (boolean) This will cause ngIRCd to censor user idle time, logon time as well as the diff --git a/src/ngircd/conf.c b/src/ngircd/conf.c index ec323837..eaa5e932 100644 --- a/src/ngircd/conf.c +++ b/src/ngircd/conf.c @@ -903,26 +903,44 @@ Read_Config(bool TestOnly, bool IsStarting) struct dirent *entry; int i, n; FILE *fd; - DIR *dh; + DIR *dh = NULL; + + if (!NGIRCd_ConfFile[0]) { + /* No configuration file name explicitly given on the command + * line, use defaults but ignore errors when this file can't be + * read later on. */ + strlcpy(file, SYSCONFDIR, sizeof(file)); + strlcat(file, CONFIG_FILE, sizeof(file)); + ptr = file; + } else + ptr = NGIRCd_ConfFile; - Config_Error(LOG_INFO, "Using configuration file \"%s\" ...", NGIRCd_ConfFile); + Config_Error(LOG_INFO, "Using %s configuration file \"%s\" ...", + !NGIRCd_ConfFile[0] ? "default" : "specified", ptr); /* Open configuration file */ - fd = fopen( NGIRCd_ConfFile, "r" ); - if( ! fd ) { - /* No configuration file found! */ - Config_Error( LOG_ALERT, "Can't read configuration \"%s\": %s", - NGIRCd_ConfFile, strerror( errno )); - if (!IsStarting) - return false; - Config_Error( LOG_ALERT, "%s exiting due to fatal errors!", PACKAGE_NAME ); - exit( 1 ); + fd = fopen(ptr, "r"); + if (!fd) { + if (NGIRCd_ConfFile[0]) { + Config_Error(LOG_ALERT, + "Can't read specified configuration file \"%s\": %s", + ptr, strerror(errno)); + if (IsStarting) { + Config_Error(LOG_ALERT, + "%s exiting due to fatal errors!", + PACKAGE_NAME); + exit(1); + } + } + Config_Error(LOG_WARNING, + "Can't read default configuration file \"%s\": %s - Ignored.", + ptr, strerror(errno)); } opers_free(); Set_Defaults(IsStarting); - if (TestOnly) + if (TestOnly && fd) Config_Error(LOG_INFO, "Reading configuration from \"%s\" ...", NGIRCd_ConfFile ); @@ -962,16 +980,23 @@ Read_Config(bool TestOnly, bool IsStarting) ConfSSL_Init(); #endif - Read_Config_File(NGIRCd_ConfFile, fd); - fclose(fd); + if (fd) { + Read_Config_File(NGIRCd_ConfFile, fd); + fclose(fd); + } if (Conf_IncludeDir[0]) { + /* Include directory was set in the main configuration file. So + * use it and show errors. */ dh = opendir(Conf_IncludeDir); if (!dh) Config_Error(LOG_ALERT, "Can't open include directory \"%s\": %s", Conf_IncludeDir, strerror(errno)); - } else { + } else if (!NGIRCd_ConfFile[0]) { + /* No include dir set in the configuration file used (if any) + * but no config file explicitly specified either: so use the + * default include path here as well! */ strlcpy(Conf_IncludeDir, SYSCONFDIR, sizeof(Conf_IncludeDir)); strlcat(Conf_IncludeDir, CONFIG_DIR, sizeof(Conf_IncludeDir)); dh = opendir(Conf_IncludeDir); diff --git a/src/ngircd/ngircd.c b/src/ngircd/ngircd.c index 04462a6d..b0610392 100644 --- a/src/ngircd/ngircd.c +++ b/src/ngircd/ngircd.c @@ -92,8 +92,6 @@ main(int argc, const char *argv[]) #ifdef SNIFFER NGIRCd_Sniffer = false; #endif - strlcpy(NGIRCd_ConfFile, SYSCONFDIR, sizeof(NGIRCd_ConfFile)); - strlcat(NGIRCd_ConfFile, CONFIG_FILE, sizeof(NGIRCd_ConfFile)); Fill_Version();