Fix the dnsbug, this time right. Reference: /n/patches.lsub.org/patch/dnsfix Date: Fri Oct 26 11:06:54 CES 2012 Signed-off-by: paurea@lsub.org --- /sys/src/cmd/ndb/dnresolve.c Thu Apr 26 19:11:12 2012 +++ /sys/src/cmd/ndb/dnresolve.c Fri Oct 26 11:05:25 2012 @@ -832,7 +832,7 @@ Dest *cur; if(nd >= Maxdest) /* dest array is full? */ - return Maxdest - 1; + return Maxdest; /* * look for a server whose address we already know. @@ -978,7 +978,7 @@ { int rv = -1, nfd; char *domain; - char conndir[40], net[40]; + char conndir[NETPATHLEN], net[NETPATHLEN]; uchar belen[2]; NetConnInfo *nci; @@ -1080,13 +1080,12 @@ */ if (qp->ndest > qp->curdest - p) { j = serveraddrs(qp, qp->curdest - p, depth); - if (j < 0 || j >= Maxdest) { + if (j < 0 || j > Maxdest) { dnslog("serveraddrs() result %d out of range", j); abort(); } qp->curdest = &qp->dest[j]; } - destck(qp->curdest); /* no servers, punt */ if (qp->ndest == 0) @@ -1441,7 +1440,7 @@ /* remove all addrs of responding server from list */ for(np = qp->dest; np < qp->curdest; np++) if(np->s == p->s) - p->nx = Maxtrans; + np->nx = Maxtrans; /* free or incorporate RRs in m */ rv = procansw(qp, &m, srcip, depth, p); --- /sys/src/libc/9sys/dial.c Thu Jul 5 10:19:03 2012 +++ /sys/src/libc/9sys/dial.c Fri Oct 26 10:50:33 2012 @@ -45,7 +45,7 @@ int dfd; int cfd; - char dir[NETPATHLEN+1]; + char dir[NETPATHLEN]; char err[ERRMAX]; }; struct Dest { @@ -227,7 +227,7 @@ *ds->cfdp = conn->cfd; if (ds->dir) { strncpy(ds->dir, conn->dir, NETPATHLEN); - ds->dir[NETPATHLEN] = '\0'; + ds->dir[NETPATHLEN-1] = '\0'; } return conn->dfd; }