From 1d7fc9eb31d84e288cef60f39b0b70ab6a917aa5 Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Wed, 29 Aug 2001 10:57:19 +0000 Subject: [PATCH] Better encapsulation of the ipaccess filter. --- lib/ipaccess.c | 23 ++++++++++++++++------- lib/ipaccess.h | 10 ++++------ 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/lib/ipaccess.c b/lib/ipaccess.c index 8a484169..18b1383a 100644 --- a/lib/ipaccess.c +++ b/lib/ipaccess.c @@ -5,22 +5,31 @@ */ #include "lib/lib.h" +#include "lib/lists.h" #include "lib/conf.h" #include "lib/chartype.h" #include "lib/ipaccess.h" #include +struct ipaccess_list { + list l; +}; + struct ipaccess_entry { node n; uns allow; u32 addr, mask; }; -void -ipaccess_init(ipaccess_list *l) +struct ipaccess_list * +ipaccess_init(void) { - init_list(l); + /* Cannot use cfg_malloc() here as the pool can be uninitialized now */ + struct ipaccess_list *l = malloc(sizeof(*l)); + + init_list(&l->l); + return l; } static byte * @@ -47,7 +56,7 @@ parse_ip(byte *x, u32 *a) } byte * -ipaccess_parse(ipaccess_list *l, byte *c, int is_allow) +ipaccess_parse(struct ipaccess_list *l, byte *c, int is_allow) { byte *p = strchr(c, '/'); byte *q; @@ -62,16 +71,16 @@ ipaccess_parse(ipaccess_list *l, byte *c, int is_allow) } else a->mask = ~0; - add_tail(l, &a->n); + add_tail(&l->l, &a->n); return parse_ip(c, &a->addr); } int -ipaccess_check(ipaccess_list *l, u32 ip) +ipaccess_check(struct ipaccess_list *l, u32 ip) { struct ipaccess_entry *a; - DO_FOR_ALL(a, *l) + DO_FOR_ALL(a, l->l) if (! ((ip ^ a->addr) & a->mask)) return a->allow; return 0; diff --git a/lib/ipaccess.h b/lib/ipaccess.h index fefd34a8..e9c85b2a 100644 --- a/lib/ipaccess.h +++ b/lib/ipaccess.h @@ -4,10 +4,8 @@ * (c) 1997--2001 Martin Mares */ -#include "lib/lists.h" +struct ipaccess_list; -typedef list ipaccess_list; - -void ipaccess_init(ipaccess_list *l); -byte *ipaccess_parse(ipaccess_list *l, byte *c, int is_allow); -int ipaccess_check(ipaccess_list *l, u32 ip); +struct ipaccess_list *ipaccess_init(void); +byte *ipaccess_parse(struct ipaccess_list *l, byte *c, int is_allow); +int ipaccess_check(struct ipaccess_list *l, u32 ip); -- 2.39.2