diff options
Diffstat (limited to 'src/conf_class.c')
-rwxr-xr-x | src/conf_class.c | 58 |
1 files changed, 8 insertions, 50 deletions
diff --git a/src/conf_class.c b/src/conf_class.c index 9fcfdd6..0d5d1b2 100755 --- a/src/conf_class.c +++ b/src/conf_class.c @@ -350,64 +350,22 @@ remove_from_cidr_check(struct irc_ssaddr *ip, struct ClassItem *aclass) #endif } -static void -rebuild_cidr_list(int aftype, struct ClassItem *oldcl, struct ClassItem *newcl, - dlink_list *old_list, dlink_list *new_list, int changed) +void +rebuild_cidr_list(struct ClassItem *class) { dlink_node *ptr; - struct Client *client_p; - struct MaskItem *conf; - if (!changed) - { - *new_list = *old_list; - old_list->head = old_list->tail = NULL; - old_list->length = 0; - return; - } + destroy_cidr_class(class); DLINK_FOREACH(ptr, local_client_list.head) { - client_p = ptr->data; - if (client_p->localClient->aftype != aftype) - continue; - if (dlink_list_length(&client_p->localClient->confs) == 0) - continue; - - conf = client_p->localClient->confs.tail->data; - if (conf->type == CONF_CLIENT) - if (conf->class == oldcl) - cidr_limit_reached(1, &client_p->localClient->ip, newcl); - } -} - -/* - * rebuild_cidr_class - * - * inputs - pointer to old conf - * - pointer to new_class - * output - none - * side effects - rebuilds the class link list of cidr blocks - */ -void -rebuild_cidr_class(struct ClassItem *old_class, struct ClassItem *new_class) -{ - if (old_class->number_per_cidr > 0 && new_class->number_per_cidr > 0) - { - if (old_class->cidr_bitlen_ipv4 > 0 && new_class->cidr_bitlen_ipv4 > 0) - rebuild_cidr_list(AF_INET, old_class, new_class, - &old_class->list_ipv4, &new_class->list_ipv4, - old_class->cidr_bitlen_ipv4 != new_class->cidr_bitlen_ipv4); + struct Client *client_p = ptr->data; + struct MaskItem *conf = client_p->localClient->confs.tail->data; -#ifdef IPV6 - if (old_class->cidr_bitlen_ipv6 > 0 && new_class->cidr_bitlen_ipv6 > 0) - rebuild_cidr_list(AF_INET6, old_class, new_class, - &old_class->list_ipv6, &new_class->list_ipv6, - old_class->cidr_bitlen_ipv6 != new_class->cidr_bitlen_ipv6); -#endif + if (conf && (conf->type == CONF_CLIENT)) + if (conf->class == class) + cidr_limit_reached(1, &client_p->localClient->ip, class); } - - destroy_cidr_class(old_class); } /* |