static CONF_SERVER New_Server;
static int New_Server_Idx;
-static size_t Conf_Oper_Count;
-static size_t Conf_Channel_Count;
static char Conf_MotdFile[FNAME_LEN];
static void Set_Defaults PARAMS(( bool InitServers ));
opers_puts(void)
{
struct Conf_Oper *op;
- size_t len;
+ size_t count, i;
- len = array_length(&Conf_Opers, sizeof(*op));
+ count = array_length(&Conf_Opers, sizeof(*op));
op = array_start(&Conf_Opers);
- while (len--) {
- assert(op->name[0]);
+ for (i = 0; i < count; i++, op++) {
+ if (!op->name[0])
+ continue;
puts("[OPERATOR]");
printf(" Name = %s\n", op->name);
printf(" Password = %s\n", op->pwd);
printf(" Mask = %s\n\n", op->mask ? op->mask : "");
- op++;
}
}
#ifdef IDENT
printf(" Ident = %s\n", yesno_to_str(Conf_Ident));
#endif
+ printf(" MorePrivacy = %s\n", yesno_to_str(Conf_MorePrivacy));
printf(" NoticeAuth = %s\n", yesno_to_str(Conf_NoticeAuth));
printf(" OperCanUseMode = %s\n", yesno_to_str(Conf_OperCanMode));
printf(" OperServerMode = %s\n", yesno_to_str(Conf_OperServerMode));
#ifdef PAM
printf(" PAM = %s\n", yesno_to_str(Conf_PAM));
+ printf(" PAMIsOptional = %s\n", yesno_to_str(Conf_PAMIsOptional));
#endif
printf(" PredefChannelsOnly = %s\n", yesno_to_str(Conf_PredefChannelsOnly));
#ifndef STRICT_RFC
printf(" RequireAuthPing = %s\n", yesno_to_str(Conf_AuthPing));
#endif
+ printf(" ScrubCTCP = %s\n", yesno_to_str(Conf_ScrubCTCP));
#ifdef SYSLOG
printf(" SyslogFacility = %s\n",
ngt_SyslogFacilityName(Conf_SyslogFacility));
#else
Conf_Ident = false;
#endif
+ Conf_MorePrivacy = false;
Conf_NoticeAuth = false;
Conf_OperCanMode = false;
Conf_OperServerMode = false;
#else
Conf_PAM = false;
#endif
+ Conf_PAMIsOptional = false;
Conf_PredefChannelsOnly = false;
#ifdef SYSLOG
+ Conf_ScrubCTCP = false;
#ifdef LOG_LOCAL5
Conf_SyslogFacility = LOG_LOCAL5;
#else
#endif
#endif
- /* Initialize IRC operators and channels */
- Conf_Oper_Count = 0;
- Conf_Channel_Count = 0;
-
/* Initialize server configuration structures */
if (InitServers) {
for (i = 0; i < MAX_SERVERS;
char section[LINE_LEN], str[LINE_LEN], *var, *arg, *ptr;
const UINT16 defaultport = 6667;
int line, i, n;
+ size_t count;
FILE *fd;
/* Open configuration file */
else New_Server_Idx = i;
continue;
}
+
if (strcasecmp(section, "[CHANNEL]") == 0) {
- Conf_Channel_Count++;
+ count = array_length(&Conf_Channels,
+ sizeof(struct Conf_Channel));
+ if (!array_alloc(&Conf_Channels,
+ sizeof(struct Conf_Channel),
+ count)) {
+ Config_Error(LOG_ERR,
+ "Could not allocate memory for new operator (line %d)",
+ line);
+ }
continue;
}
+
if (strcasecmp(section, "[OPERATOR]") == 0) {
- Conf_Oper_Count++;
+ count = array_length(&Conf_Opers,
+ sizeof(struct Conf_Oper));
+ if (!array_alloc(&Conf_Opers,
+ sizeof(struct Conf_Oper),
+ count)) {
+ Config_Error(LOG_ERR,
+ "Could not allocate memory for new channel (line &d)",
+ line);
+ }
continue;
}
}
/**
- * Check whether an string argument is true or false.
+ * Check whether a string argument is "true" or "false".
*
* @param Arg Input string.
- * @returns true if string has been parsed as "yes"/"true"/"on".
+ * @returns true if the input string has been parsed as "yes", "true"
+ * (case insensitive) or a non-zero integer value.
*/
static bool
-Check_ArgIsTrue( const char *Arg )
+Check_ArgIsTrue(const char *Arg)
{
- if( strcasecmp( Arg, "yes" ) == 0 ) return true;
- if( strcasecmp( Arg, "true" ) == 0 ) return true;
- if( atoi( Arg ) != 0 ) return true;
+ if (strcasecmp(Arg, "yes") == 0)
+ return true;
+ if (strcasecmp(Arg, "true") == 0)
+ return true;
+ if (atoi(Arg) != 0)
+ return true;
return false;
}
else {
Conf_GID = (unsigned int)atoi(Arg);
if (!Conf_GID && strcmp(Arg, "0"))
- Config_Error_NaN(Line, Var);
+ Config_Error(LOG_WARNING,
+ "%s, line %d: Value of \"%s\" is not a valid group name or ID!",
+ NGIRCd_ConfFile, Line, Var);
}
return;
}
else {
Conf_UID = (unsigned int)atoi(Arg);
if (!Conf_UID && strcmp(Arg, "0"))
- Config_Error_NaN(Line, Var);
+ Config_Error(LOG_WARNING,
+ "%s, line %d: Value of \"%s\" is not a valid user name or ID!",
+ NGIRCd_ConfFile, Line, Var);
}
return;
}
WarnIdent(Line);
return;
}
+ if (strcasecmp(Var, "MorePrivacy") == 0) {
+ Conf_MorePrivacy = Check_ArgIsTrue(Arg);
+ return;
+ }
if (strcasecmp(Var, "NoticeAuth") == 0) {
Conf_NoticeAuth = Check_ArgIsTrue(Arg);
return;
WarnPAM(Line);
return;
}
+ if (strcasecmp(Var, "PAMIsOptional") == 0 ) {
+ Conf_PAMIsOptional = Check_ArgIsTrue(Arg);
+ return;
+ }
if (strcasecmp(Var, "PredefChannelsOnly") == 0) {
Conf_PredefChannelsOnly = Check_ArgIsTrue(Arg);
return;
return;
}
#endif
+ if (strcasecmp(Var, "ScrubCTCP") == 0) {
+ Conf_ScrubCTCP = Check_ArgIsTrue(Arg);
+ return;
+ }
#ifdef SYSLOG
if (strcasecmp(Var, "SyslogFacility") == 0) {
Conf_SyslogFacility = ngt_SyslogFacilityID(Arg,
assert( Line > 0 );
assert( Var != NULL );
assert( Arg != NULL );
- assert( Conf_Oper_Count > 0 );
- op = array_alloc(&Conf_Opers, sizeof(*op), Conf_Oper_Count - 1);
- if (!op) {
- Config_Error(LOG_ERR, "Could not allocate memory for operator (%d:%s = %s)", Line, Var, Arg);
+ op = array_get(&Conf_Opers, sizeof(*op),
+ array_length(&Conf_Opers, sizeof(*op)) - 1);
+ if (!op)
return;
- }
if (strcasecmp(Var, "Name") == 0) {
/* Name of IRC operator */
Handle_CHANNEL(int Line, char *Var, char *Arg)
{
size_t len;
- size_t chancount;
struct Conf_Channel *chan;
assert( Line > 0 );
assert( Var != NULL );
assert( Arg != NULL );
- assert(Conf_Channel_Count > 0);
-
- chancount = Conf_Channel_Count - 1;
- chan = array_alloc(&Conf_Channels, sizeof(*chan), chancount);
- if (!chan) {
- Config_Error(LOG_ERR, "Could not allocate memory for predefined channel (%d:%s = %s)", Line, Var, Arg);
+ chan = array_get(&Conf_Channels, sizeof(*chan),
+ array_length(&Conf_Channels, sizeof(*chan)) - 1);
+ if (!chan)
return;
- }
+
if (strcasecmp(Var, "Name") == 0) {
if (!Handle_Channelname(chan, Arg))
Config_Error_TooLong(Line, Var);
}
}
Log(LOG_DEBUG,
- "Configuration: Operators=%d, Servers=%d[%d], Channels=%d",
- Conf_Oper_Count, servers, servers_once, Conf_Channel_Count);
+ "Configuration: Operators=%ld, Servers=%d[%d], Channels=%ld",
+ array_length(&Conf_Opers, sizeof(struct Conf_Oper)),
+ servers, servers_once,
+ array_length(&Conf_Channels, sizeof(struct Conf_Channel)));
#endif
return config_valid;
Proc_InitStruct(&Server->res_stat);
Server->conn_id = NONE;
- memset(&Server->bind_addr, 0, sizeof(&Server->bind_addr));
+ memset(&Server->bind_addr, 0, sizeof(Server->bind_addr));
}
/* -eof- */