#include "ircd_defs.h"
#include "s_conf.h"
#include "s_newconf.h"
+#include "newconf.h"
#include "s_serv.h"
#include "s_stats.h"
#include "channel.h"
#include "reject.h"
#include "cache.h"
#include "blacklist.h"
+#include "privilege.h"
#include "sslproc.h"
struct config_server_hide ConfigServerHide;
add_ip_limit(struct Client *client_p, struct ConfItem *aconf)
{
rb_patricia_node_t *pnode;
+ int bitlen;
/* If the limits are 0 don't do anything.. */
- if(ConfCidrAmount(aconf) == 0 || ConfCidrBitlen(aconf) == 0)
+ if(ConfCidrAmount(aconf) == 0
+ || (ConfCidrIpv4Bitlen(aconf) == 0 && ConfCidrIpv6Bitlen(aconf) == 0))
return -1;
pnode = rb_match_ip(ConfIpLimits(aconf), (struct sockaddr *)&client_p->localClient->ip);
+ if(GET_SS_FAMILY(&client_p->localClient->ip) == AF_INET)
+ bitlen = ConfCidrIpv4Bitlen(aconf);
+ else
+ bitlen = ConfCidrIpv6Bitlen(aconf);
+
if(pnode == NULL)
- pnode = make_and_lookup_ip(ConfIpLimits(aconf), (struct sockaddr *)&client_p->localClient->ip, ConfCidrBitlen(aconf));
+ pnode = make_and_lookup_ip(ConfIpLimits(aconf), (struct sockaddr *)&client_p->localClient->ip, bitlen);
s_assert(pnode != NULL);
if(pnode != NULL)
{
- if(((long) pnode->data) >= ConfCidrAmount(aconf)
- && !IsConfExemptLimits(aconf))
+ if(((intptr_t)pnode->data) >= ConfCidrAmount(aconf) && !IsConfExemptLimits(aconf))
{
/* This should only happen if the limits are set to 0 */
- if((unsigned long) pnode->data == 0)
+ if((intptr_t)pnode->data == 0)
{
rb_patricia_remove(ConfIpLimits(aconf), pnode);
}
return (0);
}
- pnode->data++;
+ pnode->data = (void *)(((intptr_t)pnode->data) + 1);
}
return 1;
}
rb_patricia_node_t *pnode;
/* If the limits are 0 don't do anything.. */
- if(ConfCidrAmount(aconf) == 0 || ConfCidrBitlen(aconf) == 0)
+ if(ConfCidrAmount(aconf) == 0
+ || (ConfCidrIpv4Bitlen(aconf) == 0 && ConfCidrIpv6Bitlen(aconf) == 0))
return;
pnode = rb_match_ip(ConfIpLimits(aconf), (struct sockaddr *)&client_p->localClient->ip);
if(pnode == NULL)
return;
- pnode->data--;
- if(((unsigned long) pnode->data) == 0)
+ pnode->data = (void *)(((intptr_t)pnode->data) - 1);
+ if(((intptr_t)pnode->data) == 0)
{
rb_patricia_remove(ConfIpLimits(aconf), pnode);
}
ConfigChannel.max_chans_per_user = 15;
ConfigChannel.max_bans = 25;
ConfigChannel.max_bans_large = 500;
+ ConfigChannel.only_ascii_channels = NO;
ConfigChannel.burst_topicwho = NO;
ConfigChannel.kick_on_split_riding = NO;
ConfigChannel.default_split_server_count = 10;
ConfigChannel.no_join_on_split = NO;
ConfigChannel.no_create_on_split = YES;
+ ConfigChannel.resv_forcepart = YES;
ConfigServerHide.flatten_links = 0;
ConfigServerHide.links_delay = 300;
ConfigFileEntry.throttle_duration = 60;
ServerInfo.default_max_clients = MAXCONNECTIONS;
+
+ if (!alias_dict)
+ alias_dict = irc_dictionary_create(strcasecmp);
}
#undef YES
validate_conf(); /* Check to make sure some values are still okay. */
/* Some global values are also loaded here. */
check_class(); /* Make sure classes are valid */
+ privilegeset_delete_all_illegal();
}
static void
*/
/* clean out general */
+ rb_free(ConfigFileEntry.kline_reason);
+ ConfigFileEntry.kline_reason = NULL;
+
RB_DLINK_FOREACH_SAFE(ptr, next_ptr, service_list.head)
{
rb_free(ptr->data);
destroy_blacklists();
+ privilegeset_mark_all_illegal();
+
/* OK, that should be everything... */
}
{
if(aconf->status == CONF_CLIENT)
{
- sendto_realops_snomask(SNO_GENERAL, L_ALL,
- "Warning -- Using default class for missing class \"%s\" in auth{} for %s@%s",
+ conf_report_error(
+ "Using default class for missing class \"%s\" in auth{} for %s@%s",
aconf->className, aconf->user, aconf->host);
}
strip_tabs(newlinebuf, linebuf, strlen(linebuf));
+ ierror("\"%s\", line %d: %s at '%s'", conffilebuf, lineno + 1, msg, newlinebuf);
sendto_realops_snomask(SNO_GENERAL, L_ALL, "\"%s\", line %d: %s at '%s'",
conffilebuf, lineno + 1, msg, newlinebuf);
- ilog(L_MAIN, "\"%s\", line %d: %s at '%s'", conffilebuf, lineno + 1, msg, newlinebuf);
}
int