2 * Sherlock Library -- IP address access lists
4 * (c) 1997--2001 Martin Mares <mj@ucw.cz>
9 #include "lib/chartype.h"
10 #include "lib/ipaccess.h"
14 struct ipaccess_entry {
21 ipaccess_init(ipaccess_list *l)
27 parse_ip(byte *x, u32 *a)
37 q = q*10 + *x++ - '0';
39 return "Invalid IP address";
41 if (*x++ != ((i == 3) ? 0 : '.'))
42 return "Invalid IP address";
50 ipaccess_parse(ipaccess_list *l, byte *c, int is_allow)
52 byte *p = strchr(c, '/');
54 struct ipaccess_entry *a = cfg_malloc(sizeof(struct ipaccess_entry));
60 if (q = parse_ip(p, &a->mask))
66 return parse_ip(c, &a->addr);
70 ipaccess_check(ipaccess_list *l, u32 ip)
72 struct ipaccess_entry *a;
75 if (! ((ip ^ a->addr) & a->mask))