summaryrefslogtreecommitdiff
path: root/src/conf_class.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/conf_class.c')
-rwxr-xr-xsrc/conf_class.c58
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);
}
/*