From 20eef930041ff0bdda148fd1ec82adc8128d0d05 Mon Sep 17 00:00:00 2001 From: Jilles Tjoelker Date: Sat, 6 Mar 2010 00:31:51 +0100 Subject: [PATCH] Add /stats g to show propagated (global) klines. --- help/opers/stats | 1 + modules/m_stats.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/help/opers/stats b/help/opers/stats index 3017eb3..5d25900 100644 --- a/help/opers/stats +++ b/help/opers/stats @@ -16,6 +16,7 @@ X B - Shows hash statistics * e - Shows exemptions to D lines X E - Shows Events X f - Shows File Descriptors +* g - Shows global K lines ^ h - Shows hub_mask/leaf_mask (Old H:/L: lines) ^ i - Shows auth blocks (Old I: lines) ^ K - Shows K lines (or matched klines) diff --git a/modules/m_stats.c b/modules/m_stats.c index f621270..67e53bb 100644 --- a/modules/m_stats.c +++ b/modules/m_stats.c @@ -94,6 +94,7 @@ static void stats_tdeny(struct Client *); static void stats_deny(struct Client *); static void stats_exempt(struct Client *); static void stats_events(struct Client *); +static void stats_prop_klines(struct Client *); static void stats_hubleaf(struct Client *); static void stats_auth(struct Client *); static void stats_tklines(struct Client *); @@ -137,6 +138,7 @@ static struct StatsStruct stats_cmd_table[] = { {'E', stats_events, 1, 1, }, {'f', stats_comm, 1, 1, }, {'F', stats_comm, 1, 1, }, + {'g', stats_prop_klines, 1, 0, }, {'h', stats_hubleaf, 0, 0, }, {'H', stats_hubleaf, 0, 0, }, {'i', stats_auth, 0, 0, }, @@ -450,6 +452,32 @@ stats_events (struct Client *source_p) rb_dump_events(stats_events_cb, source_p); } +static void +stats_prop_klines(struct Client *source_p) +{ + struct ConfItem *aconf; + rb_dlink_node *ptr; + char *user, *host, *pass, *oper_reason; + + RB_DLINK_FOREACH(ptr, prop_bans.head) + { + aconf = ptr->data; + + /* Skip non-klines and deactivated klines. */ + if(aconf->status != CONF_KILL) + continue; + + get_printable_kline(source_p, aconf, &host, &pass, + &user, &oper_reason); + + sendto_one_numeric(source_p, RPL_STATSKLINE, + form_str(RPL_STATSKLINE), + 'g', host, user, pass, + oper_reason ? "|" : "", + oper_reason ? oper_reason : ""); + } +} + static void stats_hubleaf(struct Client *source_p) {