static bool remove_temp_kline(struct Client *, struct ConfItem *);
static void remove_prop_kline(struct Client *, struct ConfItem *);
+
/* mo_kline()
*
* parv[1] - temp time or user@host
{
char def[] = "No Reason";
char user[USERLEN + 2];
- char host[HOSTLEN + 2];
+ char host_buf[HOSTLEN + 3], *host = host_buf + 1;
char *reason = def;
char *oper_reason;
const char *target_server = NULL;
if(find_user_host(source_p, parv[loc], user, host) == 0)
return;
+ if (*host == ':')
+ {
+ host--;
+ *host = '0';
+ }
+
loc++;
if(parc >= loc + 2 && !irccmp(parv[loc], "ON"))
reason = LOCAL_COPY(parv[loc]);
+ if(parse_netmask_strict(host, NULL, NULL) == HM_ERROR)
+ {
+ sendto_one_notice(source_p,
+ ":[%s@%s] looks like an ill-formed IP K-line, refusing to set it",
+ user, host);
+ return;
+ }
+
if(target_server != NULL)
{
propagate_generic(source_p, "KLINE", target_server, CAP_KLN,
else
apply_kline(source_p, aconf, reason, oper_reason);
- if(ConfigFileEntry.kline_delay)
- {
- if(!kline_queued)
- {
- rb_event_addonce("check_klines", check_klines_event, NULL,
- ConfigFileEntry.kline_delay);
- kline_queued = true;
- }
- }
- else
- check_klines();
+ check_one_kline(aconf);
}
/* ms_kline()
else
apply_kline(source_p, aconf, reason, oper_reason);
- if(ConfigFileEntry.kline_delay)
- {
- if(!kline_queued)
- {
- rb_event_addonce("check_klines", check_klines_event, NULL,
- ConfigFileEntry.kline_delay);
- kline_queued = true;
- }
- }
- else
- check_klines();
+ check_one_kline(aconf);
}
/* mo_unkline()
if(aconf == NULL && ConfigFileEntry.non_redundant_klines)
{
bits = 0;
- if((t = parse_netmask(lhost, &iphost, &bits)) != HM_HOST)
- {
- if(t == HM_IPV6)
- t = AF_INET6;
- else
- t = AF_INET;
-
- piphost = &iphost;
- }
+ t = parse_netmask_strict(lhost, &iphost, &bits);
+ piphost = &iphost;
+ if (t == HM_IPV4)
+ t = AF_INET;
+ else if (t == HM_IPV6)
+ t = AF_INET6;
else
piphost = NULL;