From 0b1e46f5b44b742fe8757dc8d5f82190841aee4c Mon Sep 17 00:00:00 2001 From: Jilles Tjoelker Date: Sat, 7 Mar 2009 01:49:09 +0100 Subject: [PATCH] Allow /rehash throttles to clear throttling. --- include/reject.h | 1 + modules/m_rehash.c | 10 ++++++++++ src/reject.c | 18 ++++++++++++++++++ 3 files changed, 29 insertions(+) diff --git a/include/reject.h b/include/reject.h index 95e2c43..98cefa9 100644 --- a/include/reject.h +++ b/include/reject.h @@ -41,6 +41,7 @@ unsigned long delay_exit_length(void); int throttle_add(struct sockaddr *addr); int is_throttle_ip(struct sockaddr *addr); unsigned long throttle_size(void); +void flush_throttle(void); #endif diff --git a/modules/m_rehash.c b/modules/m_rehash.c index 22848a8..4eb4add 100644 --- a/modules/m_rehash.c +++ b/modules/m_rehash.c @@ -212,6 +212,15 @@ rehash_rejectcache(struct Client *source_p) } +static void +rehash_throttles(struct Client *source_p) +{ + sendto_realops_snomask(SNO_GENERAL, L_ALL, "%s is clearing throttles", + get_oper_name(source_p)); + flush_throttle(); + +} + static void rehash_help(struct Client *source_p) { @@ -252,6 +261,7 @@ static struct hash_commands rehash_commands[] = {"TXLINES", rehash_txlines }, {"TRESVS", rehash_tresvs }, {"REJECTCACHE", rehash_rejectcache }, + {"THROTTLES", rehash_throttles }, {"HELP", rehash_help }, {"NICKDELAY", rehash_nickdelay }, {NULL, NULL } diff --git a/src/reject.c b/src/reject.c index c9c7d45..3453c7d 100644 --- a/src/reject.c +++ b/src/reject.c @@ -356,6 +356,24 @@ is_throttle_ip(struct sockaddr *addr) return 0; } +void +flush_throttle(void) +{ + rb_dlink_node *ptr, *next; + rb_patricia_node_t *pnode; + throttle_t *t; + + RB_DLINK_FOREACH_SAFE(ptr, next, throttle_list.head) + { + pnode = ptr->data; + t = pnode->data; + + rb_dlinkDelete(ptr, &throttle_list); + rb_free(t); + rb_patricia_remove(throttle_tree, pnode); + } +} + static void throttle_expires(void *unused) {