diff --git a/src/client.c b/src/client.c index 6a97b25a..43c04a9a 100644 --- a/src/client.c +++ b/src/client.c @@ -472,6 +472,14 @@ check_conf_klines(void) (conf = find_matching_name_conf(RXLINE_TYPE, client_p->info, NULL, NULL, 0)) != NULL) { + if (IsExemptKline(client_p)) + { + sendto_gnotice_flags(UMODE_ALL, L_ALL, me.name, &me, NULL, + "XLINE over-ruled for %s, client is kline_exempt", + get_client_name(client_p, HIDE_IP)); + continue; + } + mconf = &conf->mconf; sendto_gnotice_flags(UMODE_ALL, L_ALL, me.name, &me, NULL, "XLINE %s (%s) active for %s", conf->name, mconf->reason, diff --git a/src/s_user.c b/src/s_user.c index 6e66a985..e3250957 100644 --- a/src/s_user.c +++ b/src/s_user.c @@ -1285,6 +1285,13 @@ check_xline(struct Client *source_p) (conf = find_matching_name_conf(RXLINE_TYPE, source_p->info, NULL, NULL, 0))) { struct MatchItem *reg = &conf->mconf; + if (IsExemptKline(source_p)) + { + sendto_gnotice_flags(UMODE_ALL, L_ALL, me.name, &me, NULL, + "XLINE over-ruled for %s, client is kline_exempt", + get_client_name(source_p, HIDE_IP)); + return 0; + } ++reg->count;