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).
+ - 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"),
- 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"),
;AdminEMail = admin@irc.server
# Text file which contains the ngIRCd help text. This file is required
;AdminEMail = admin@irc.server
# Text file which contains the ngIRCd help text. This file is required
- # to display help texts when using the "HELP <cmd>" command.
+ # to display help texts when using the "HELP <cmd>" 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
;HelpFile = :DOCDIR:/Commands.txt
# Info text of the server. This will be shown by WHOIS and
;Listen = 127.0.0.1,192.168.0.1
# Text file with the "message of the day" (MOTD). This message will
;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.
;MotdFile = :ETCDIR:/ngircd.motd
# A simple Phrase (<127 chars) if you don't want to use a motd file.
# Directory containing configuration snippets (*.conf), that should
# be read in after parsing this configuration file.
# 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)
;IncludeDir = :ETCDIR:/conf.d
# Enhance user privacy slightly (useful for IRC server on TOR or I2P)
Text file which contains the ngIRCd help text. This file is required
to display help texts when using the "HELP <cmd>" command.
Please note: Changes made to this file take effect when ngircd starts up
Text file which contains the ngIRCd help text. This file is required
to display help texts when using the "HELP <cmd>" 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
.TP
\fBInfo\fR (string)
Info text of the server. This will be shown by WHOIS and LINKS requests for
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
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. 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.
.TP
\fBMotdPhrase\fR (string)
A simple Phrase (<127 chars) if you don't want to use a MOTD file.
\fBIncludeDir\fR (string)
Directory containing configuration snippets (*.conf), that should be read in
after parsing the current configuration file.
\fBIncludeDir\fR (string)
Directory containing configuration snippets (*.conf), that should be read in
after parsing the current 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.
+.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
.TP
\fBMorePrivacy\fR (boolean)
This will cause ngIRCd to censor user idle time, logon time as well as the
struct dirent *entry;
int i, n;
FILE *fd;
struct dirent *entry;
int i, n;
FILE *fd;
+ 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 */
/* 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);
}
opers_free();
Set_Defaults(IsStarting);
Config_Error(LOG_INFO,
"Reading configuration from \"%s\" ...",
NGIRCd_ConfFile );
Config_Error(LOG_INFO,
"Reading configuration from \"%s\" ...",
NGIRCd_ConfFile );
- Read_Config_File(NGIRCd_ConfFile, fd);
- fclose(fd);
+ if (fd) {
+ Read_Config_File(NGIRCd_ConfFile, fd);
+ fclose(fd);
+ }
if (Conf_IncludeDir[0]) {
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));
dh = opendir(Conf_IncludeDir);
if (!dh)
Config_Error(LOG_ALERT,
"Can't open include directory \"%s\": %s",
Conf_IncludeDir, strerror(errno));
+ } 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);
strlcpy(Conf_IncludeDir, SYSCONFDIR, sizeof(Conf_IncludeDir));
strlcat(Conf_IncludeDir, CONFIG_DIR, sizeof(Conf_IncludeDir));
dh = opendir(Conf_IncludeDir);
#ifdef SNIFFER
NGIRCd_Sniffer = false;
#endif
#ifdef SNIFFER
NGIRCd_Sniffer = false;
#endif
- strlcpy(NGIRCd_ConfFile, SYSCONFDIR, sizeof(NGIRCd_ConfFile));
- strlcat(NGIRCd_ConfFile, CONFIG_FILE, sizeof(NGIRCd_ConfFile));