X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fsetup.c;h=f73926c9f0c0ee50230fd4db0e408407515444eb;hb=c37d270aba4917429f1377e1148613b48d06aaaa;hp=96a2a213cde3d4cb699af092d01909b109cd139e;hpb=34ed308d7ecb3562c5da4c1941e59e7228847398;p=adns.git diff --git a/src/setup.c b/src/setup.c index 96a2a21..f73926c 100644 --- a/src/setup.c +++ b/src/setup.c @@ -152,6 +152,7 @@ static void ccf_sortlist(adns_state ads, const char *fn, int lno, const char *buf) { const char *word; char tbuf[200], *slash, *ep; + const char *maskwhat; struct in_addr base, mask; int l; unsigned long initial, baselocal; @@ -182,16 +183,13 @@ static void ccf_sortlist(adns_state ads, const char *fn, if (slash) { if (strchr(slash,'.')) { + maskwhat = "mask"; if (!inet_aton(slash,&mask)) { configparseerr(ads,fn,lno,"invalid mask `%s' in sortlist",slash); continue; } - if (base.s_addr & ~mask.s_addr) { - configparseerr(ads,fn,lno, "mask `%s' in sortlist" - " overlaps address `%s'",slash,tbuf); - continue; - } } else { + maskwhat = "prefix length"; initial= strtoul(slash,&ep,10); if (*ep || initial>32) { configparseerr(ads,fn,lno,"mask length `%s' invalid",slash); @@ -200,6 +198,7 @@ static void ccf_sortlist(adns_state ads, const char *fn, mask.s_addr= htonl((0x0ffffffffUL) << (32-initial)); } } else { + maskwhat = "implied mask"; baselocal= ntohl(base.s_addr); if (!(baselocal & 0x080000000UL)) /* class A */ mask.s_addr= htonl(0x0ff000000UL); @@ -215,6 +214,13 @@ static void ccf_sortlist(adns_state ads, const char *fn, } } + if (base.s_addr & ~mask.s_addr) { + configparseerr(ads,fn,lno, "%s `%s' in sortlist" + " overlaps address `%s'",maskwhat, + slash ? slash : inet_ntoa(mask), tbuf); + continue; + } + ads->sortlist[ads->nsortlist].base= base; ads->sortlist[ads->nsortlist].mask= mask; ads->nsortlist++;