From: Robert Spalek Date: Sat, 22 Apr 2006 13:53:21 +0000 (+0200) Subject: ipaccess: move here temporarily cf_parse_ip() X-Git-Tag: holmes-import~645^2~11^2~80 X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=36959190c06cd0fe1dc45db82d17cb0a0d279bf6;p=libucw.git ipaccess: move here temporarily cf_parse_ip() --- diff --git a/lib/ipaccess.c b/lib/ipaccess.c index 1bbd085f..4521c832 100644 --- a/lib/ipaccess.c +++ b/lib/ipaccess.c @@ -15,6 +15,7 @@ #include #include +#include struct ipaccess_list { list l; @@ -36,6 +37,45 @@ ipaccess_init(void) return l; } +static byte * +parse_ip(byte **p, u32 *varp) +{ + while (Cspace(**p)) + (*p)++; + if (!**p) + return "Missing IP address"; + uns x = 0; + if (**p == '0' && *(*p + 1) | 32 == 'X') + { + errno = 0; + x = strtoul(*p + 2, (char **)p, 16); + if (errno == ERANGE || x > 0xffffffff) + goto error; + } + else + for (uns i = 0; i < 4; i++) + { + if (i) + { + while (Cspace(**p)) + (*p)++; + if (*(*p)++ != '.') + goto error; + } + while (Cspace(**p)) + (*p)++; + errno = 0; + uns y = strtoul(*p, (char **)p, 10); + if (errno == ERANGE || y > 255) + goto error; + x = (x << 8) + y; + } + *varp = x; + return NULL; +error: + return "Invalid IP address"; +} + byte * ipaccess_parse(struct ipaccess_list *l, byte *c, int is_allow) { @@ -55,11 +95,11 @@ ipaccess_parse(struct ipaccess_list *l, byte *c, int is_allow) if (pxlen != 32) a->mask = ~(~0U >> (uns) pxlen); } - else if (q = cf_parse_ip(&p, &a->mask)) + else if (q = parse_ip(&p, &a->mask)) return q; } add_tail(&l->l, &a->n); - return cf_parse_ip(&c, &a->addr); + return parse_ip(&c, &a->addr); } int