From: "Stephane A. Sezer" <s...@cd80.net> --- usr.sbin/rtadvd/config.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-)
diff --git a/usr.sbin/rtadvd/config.c b/usr.sbin/rtadvd/config.c index 2c003a3..6e3f185 100644 --- a/usr.sbin/rtadvd/config.c +++ b/usr.sbin/rtadvd/config.c @@ -785,8 +785,6 @@ make_packet(struct rainfo *rainfo) buf += sizeof(struct nd_opt_mtu); } - - TAILQ_FOREACH(pfx, &rainfo->prefixes, entry) { u_int32_t vltime, pltime; struct timeval now; @@ -832,6 +830,10 @@ make_packet(struct rainfo *rainfo) TAILQ_FOREACH(rds, &rainfo->rdnsss, entry) { ndopt_rdnss = (struct nd_opt_rdnss *)buf; ndopt_rdnss->nd_opt_rdnss_type = ND_OPT_RDNSS; + /* + * An IPv6 address is 16 bytes, so multiply the number of + * addresses by two to get a size in units of 8 bytes. + */ ndopt_rdnss->nd_opt_rdnss_len = 1 + rds->servercnt * 2; ndopt_rdnss->nd_opt_rdnss_reserved = 0; ndopt_rdnss->nd_opt_rdnss_lifetime = htonl(rds->lifetime); @@ -844,8 +846,6 @@ make_packet(struct rainfo *rainfo) TAILQ_FOREACH(dsl, &rainfo->dnssls, entry) { u_int32_t size; - char *curlabel_begin; - char *curlabel_end; ndopt_dnssl = (struct nd_opt_dnssl *)buf; ndopt_dnssl->nd_opt_dnssl_type = ND_OPT_DNSSL; @@ -855,20 +855,21 @@ make_packet(struct rainfo *rainfo) size = 0; TAILQ_FOREACH(dnsd, &dsl->dnssldoms, entry) size += 1 + dnsd->length; - /* align size on the next 8 byte boundary */ + /* Align size on the next 8 byte boundary. */ size = (size + 7) & ~7; ndopt_dnssl->nd_opt_dnssl_len = 1 + size / 8; buf += sizeof(struct nd_opt_dnssl); TAILQ_FOREACH(dnsd, &dsl->dnssldoms, entry) { + char *curlabel_begin; + char *curlabel_end; + size_t curlabel_size; + curlabel_begin = dnsd->domain; - while ((curlabel_end = strchr(curlabel_begin, '.')) && - (curlabel_end - curlabel_begin) > 0) + while ((curlabel_end = strchr(curlabel_begin, '.')) != NULL && + (curlabel_size = curlabel_end - curlabel_begin) > 0) { - size_t curlabel_size; - - curlabel_size = curlabel_end - curlabel_begin; *buf = curlabel_size; ++buf; strncpy(buf, curlabel_begin, curlabel_size); -- Stephane A. Sezer