* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
* Please read the file COPYING, README and AUTHORS for more information.
- *
- * Configuration management (reading, parsing & validation)
*/
-
#include "portab.h"
+/**
+ * @file
+ * Configuration management (reading, parsing & validation)
+ */
+
#include "imp.h"
#include <assert.h>
#include <errno.h>
printf(" MaxConnections = %ld\n", Conf_MaxConnections);
printf(" MaxConnectionsIP = %d\n", Conf_MaxConnectionsIP);
printf(" MaxJoins = %d\n", Conf_MaxJoins > 0 ? Conf_MaxJoins : -1);
- printf(" MaxNickLength = %u\n\n", Conf_MaxNickLength - 1);
+ printf(" MaxNickLength = %u\n", Conf_MaxNickLength - 1);
+ printf(" ClientHost = %s\n", Conf_ClientHost);
+ printf(" ClientUserNick = %s\n\n", yesno_to_str(Conf_ClientUserNick));
puts("[FEATURES]");
printf(" DNS = %s\n", yesno_to_str(Conf_DNS));
printf(" Ident = %s\n", yesno_to_str(Conf_Ident));
printf(" PAM = %s\n", yesno_to_str(Conf_PAM));
- printf(" ZeroConf = %s\n", yesno_to_str(Conf_ZeroConf));
puts("");
opers_puts();
#else
Conf_PAM = false;
#endif
-#ifdef ZEROCONF
- Conf_ZeroConf = true;
-#else
- Conf_ZeroConf = false;
-#endif
}
int i;
strcpy(Conf_ServerName, "");
+ strcpy(Conf_ClientHost, "");
+ Conf_ClientUserNick = false;
snprintf(Conf_ServerInfo, sizeof Conf_ServerInfo, "%s %s",
PACKAGE_NAME, PACKAGE_VERSION);
strcpy(Conf_ServerPwd, "");
for (i = 0; i < MAX_SERVERS;
Init_Server_Struct(&Conf_Server[i++]));
}
+
+ /* Free MOTD; this is important when reloading the configuration */
+ array_free(&Conf_Motd);
} /* Set_Defaults */
fp = fopen(filename, "r");
if (!fp) {
- Log(LOG_WARNING, "Can't read MOTD file \"%s\": %s",
+ Config_Error(LOG_WARNING, "Can't read MOTD file \"%s\": %s",
filename, strerror(errno));
return;
}
Conf_PAM = !Check_ArgIsTrue(Arg);
return true;
}
- if(strcasecmp(Var, "NoZeroConf") == 0) {
- Conf_ZeroConf = !Check_ArgIsTrue(Arg);
- return true;
- }
return false;
}
Config_Error_TooLong( Line, Var );
return;
}
+ if( strcasecmp( Var, "ClientHost" ) == 0 ) {
+ /* Client hostname */
+ len = strlcpy( Conf_ClientHost, Arg, sizeof( Conf_ClientHost ));
+ if (len >= sizeof( Conf_ClientHost ))
+ Config_Error_TooLong( Line, Var );
+ return;
+ }
+ if( strcasecmp( Var, "ClientUserNick" ) == 0 ) {
+ /* Use client nick name as user name */
+ Conf_ClientUserNick = Check_ArgIsTrue( Arg );
+ return;
+ }
if( strcasecmp( Var, "Info" ) == 0 ) {
/* Info text of server */
len = strlcpy( Conf_ServerInfo, Arg, sizeof( Conf_ServerInfo ));
len = strlcpy( Conf_MotdFile, Arg, sizeof( Conf_MotdFile ));
if (len >= sizeof( Conf_MotdFile ))
Config_Error_TooLong( Line, Var );
- Read_Motd(Arg);
return;
}
if( strcasecmp( Var, "MotdPhrase" ) == 0 ) {
pwd = getpwnam( Arg );
if( pwd ) Conf_UID = pwd->pw_uid;
else {
-#ifdef HAVE_ISDIGIT
- if( ! isdigit( (int)*Arg )) Config_Error_NaN( Line, Var );
- else
-#endif
Conf_UID = (unsigned int)atoi( Arg );
+ if (!Conf_UID && strcmp(Arg, "0"))
+ Config_Error_NaN(Line, Var);
}
return;
}
grp = getgrnam( Arg );
if( grp ) Conf_GID = grp->gr_gid;
else {
-#ifdef HAVE_ISDIGIT
- if( ! isdigit( (int)*Arg )) Config_Error_NaN( Line, Var );
- else
-#endif
- Conf_GID = (unsigned int)atoi( Arg );
+ Conf_GID = (unsigned int)atoi(Arg);
+ if (!Conf_GID && strcmp(Arg, "0"))
+ Config_Error_NaN( Line, Var );
}
return;
}
}
if( strcasecmp( Var, "MaxConnections" ) == 0 ) {
/* Maximum number of connections. 0 -> "no limit". */
-#ifdef HAVE_ISDIGIT
- if( ! isdigit( (int)*Arg )) Config_Error_NaN( Line, Var);
- else
-#endif
Conf_MaxConnections = atol( Arg );
+ if (!Conf_MaxConnections && strcmp(Arg, "0"))
+ Config_Error_NaN(Line, Var);
return;
}
if( strcasecmp( Var, "MaxConnectionsIP" ) == 0 ) {
/* Maximum number of simultaneous connections from one IP. 0 -> "no limit" */
-#ifdef HAVE_ISDIGIT
- if( ! isdigit( (int)*Arg )) Config_Error_NaN( Line, Var );
- else
-#endif
Conf_MaxConnectionsIP = atoi( Arg );
+ if (!Conf_MaxConnectionsIP && strcmp(Arg, "0"))
+ Config_Error_NaN(Line, Var);
return;
}
if( strcasecmp( Var, "MaxJoins" ) == 0 ) {
/* Maximum number of channels a user can join. 0 -> "no limit". */
-#ifdef HAVE_ISDIGIT
- if( ! isdigit( (int)*Arg )) Config_Error_NaN( Line, Var );
- else
-#endif
Conf_MaxJoins = atoi( Arg );
+ if (!Conf_MaxJoins && strcmp(Arg, "0"))
+ Config_Error_NaN(Line, Var);
return;
}
if( strcasecmp( Var, "MaxNickLength" ) == 0 ) {
WarnPAM(Line);
return;
}
- if(strcasecmp(Var, "ZeroConf") == 0) {
- /* register services using ZeroConf */
- Conf_ZeroConf = Check_ArgIsTrue(Arg);
- return;
- }
}
static void
if( strcasecmp( Var, "Port" ) == 0 ) {
/* Port to which this server should connect */
port = atol( Arg );
- if( port > 0 && port < 0xFFFF )
+ if (port >= 0 && port < 0xFFFF)
New_Server.port = (UINT16)port;
else
- Config_Error( LOG_ERR, "%s, line %d (section \"Server\"): Illegal port number %ld!",
- NGIRCd_ConfFile, Line, port );
+ Config_Error(LOG_ERR,
+ "%s, line %d (section \"Server\"): Illegal port number %ld!",
+ NGIRCd_ConfFile, Line, port );
return;
}
#ifdef SSL_SUPPORT
#endif
if( strcasecmp( Var, "Group" ) == 0 ) {
/* Server group */
-#ifdef HAVE_ISDIGIT
- if( ! isdigit( (int)*Arg ))
- Config_Error_NaN( Line, Var );
- else
-#endif
New_Server.group = atoi( Arg );
+ if (!New_Server.group && strcmp(Arg, "0"))
+ Config_Error_NaN(Line, Var);
return;
}
if( strcasecmp( Var, "Passive" ) == 0 ) {
if( strcasecmp( Var, "MaxUsers" ) == 0 ) {
/* maximum user limit, mode l */
chan->maxusers = (unsigned long) atol(Arg);
- if (chan->maxusers == 0)
+ if (!chan->maxusers && strcmp(Arg, "0"))
Config_Error_NaN(Line, Var);
return;
}