ip/ipconfig, ndb/dns, libndb: handle parseipmask() errors

This commit is contained in:
cinap_lenrek 2019-02-12 21:44:57 +01:00
parent d551a83ae4
commit 45213ee6c7
3 changed files with 7 additions and 11 deletions

View file

@ -1019,12 +1019,13 @@ ndb2conf(Ndb *db, uchar *myip)
} }
if(strcmp(nt->attr, "ipmask") == 0) { if(strcmp(nt->attr, "ipmask") == 0) {
nt = uniquent(nt); nt = uniquent(nt);
parseipmask(conf.mask, nt->val, isv4(myip)); if(parseipmask(conf.mask, nt->val, isv4(myip)) == -1)
goto Badip;
continue; continue;
} }
if(parseip(ip, nt->val) == -1) { if(parseip(ip, nt->val) == -1) {
fprint(2, "%s: bad %s address in ndb: %s\n", argv0, Badip:
nt->attr, nt->val); fprint(2, "%s: bad %s address in ndb: %s\n", argv0, nt->attr, nt->val);
continue; continue;
} }
if(strcmp(nt->attr, "ipgw") == 0) { if(strcmp(nt->attr, "ipgw") == 0) {

View file

@ -1062,11 +1062,10 @@ createv4ptrs(void)
if(t == nil) /* could be a reverse with no forward */ if(t == nil) /* could be a reverse with no forward */
continue; continue;
nt = look(t, t, "ipmask"); nt = look(t, t, "ipmask");
if(nt == nil){ /* we're confused */ if(nt == nil || parseipmask(mask, nt->val, 1) == -1){
ndbfree(t); ndbfree(t);
continue; continue;
} }
parseipmask(mask, nt->val, 1);
ndbfree(t); ndbfree(t);
n = 5; n = 5;
break; break;

View file

@ -123,7 +123,6 @@ subnet(Ndb *db, uchar *net, Ndbtuple *f, int prefix)
char netstr[64]; char netstr[64];
uchar mask[IPaddrlen]; uchar mask[IPaddrlen];
Ndbtuple *t, *nt, *xt; Ndbtuple *t, *nt, *xt;
int masklen;
t = nil; t = nil;
snprint(netstr, sizeof(netstr), "%I", net); snprint(netstr, sizeof(netstr), "%I", net);
@ -132,12 +131,9 @@ subnet(Ndb *db, uchar *net, Ndbtuple *f, int prefix)
xt = ndbfindattr(nt, nt, "ipnet"); xt = ndbfindattr(nt, nt, "ipnet");
if(xt != nil){ if(xt != nil){
xt = ndbfindattr(nt, nt, "ipmask"); xt = ndbfindattr(nt, nt, "ipmask");
if(xt != nil) if(xt == nil || parseipmask(mask, xt->val, isv4(net)) == -1)
parseipmask(mask, xt->val, isv4(net));
else
ipmove(mask, defmask(net)); ipmove(mask, defmask(net));
masklen = prefixlen(mask); if(prefixlen(mask) <= prefix){
if(masklen <= prefix){
t = ndbconcatenate(t, filter(db, nt, f)); t = ndbconcatenate(t, filter(db, nt, f));
nt = nil; nt = nil;
} }