- /* iface DUID iaid hostname lifetime assigned length [addrs...] */
- int l = snprintf(leasebuf, sizeof(leasebuf), "# %s %s %x %s %ld %x %u ",
- iface->ifname, duidbuf, ntohl(c->iaid),
- (c->hostname ? c->hostname : "-"),
- (c->valid_until > now ?
- (c->valid_until - now + wall_time) :
- (INFINITE_VALID(c->valid_until) ? -1 : 0)),
- c->assigned, (unsigned)c->length);
-
- struct in6_addr addr;
- struct odhcpd_ipaddr *addrs = (c->managed) ? c->managed : iface->ia_addr;
- size_t addrlen = (c->managed) ? (size_t)c->managed_size : iface->ia_addr_len;
- size_t m = elect_addr(addrs, addrlen);
-
- for (size_t i = 0; i < addrlen; ++i) {
- if (!valid_addr(&addrs[i], now) ||
- (!INFINITE_VALID(c->valid_until) && c->valid_until <= now))
- continue;
-
- addr = addrs[i].addr;
- if (c->length == 128) {
- if (!ADDR_ENTRY_VALID_IA_ADDR(iface, i, m, addrs))
- continue;
-
- addr.s6_addr32[3] = htonl(c->assigned);
- } else {
- if (!valid_prefix_length(c, addrs[i].prefix))
- continue;
-
- addr.s6_addr32[1] |= htonl(c->assigned);
- addr.s6_addr32[2] = addr.s6_addr32[3] = 0;
- }
-
- inet_ntop(AF_INET6, &addr, ipbuf, sizeof(ipbuf) - 1);
-
- if (c->length == 128 && c->hostname) {
- fputs(ipbuf, fp);
-
- char b[256];
- if (dn_expand(iface->search, iface->search + iface->search_len,
- iface->search, b, sizeof(b)) > 0)
- fprintf(fp, "\t%s.%s", c->hostname, b);
-
- fprintf(fp, "\t%s\n", c->hostname);
- md5_hash(ipbuf, strlen(ipbuf), &md5);
- md5_hash(c->hostname, strlen(c->hostname), &md5);
- }