-+ if (sa->sa_family != AF_INET) {
-+ if (sa->sa_family == AF_INET6)
-+ vstring_sprintf_append(result, "XAATODOmynetworks ");
++ if (sa->sa_family == AF_INET6) {
++ addr6 = (struct sockaddr_in6 *)sa;
++ mask6 = (struct sockaddr_in6 *)&my_mask_list->addrs[i];
++
++ switch (mask_style) {
++ case MASK_STYLE_CLASS:
++ /* treat as subnet for IPv6 */
++ case MASK_STYLE_SUBNET:
++ for (j=0; j<16; j++)
++ net6.s6_addr[j] = addr6->sin6_addr.s6_addr[j] & mask6->sin6_addr.s6_addr[j];
++ for(shift=128; shift>0; shift--)
++ if ((mask6->sin6_addr.s6_addr[(shift-1) / 8]) & (0x80 >> ((shift-1) % 8)))
++ break;
++ break;
++ case MASK_STYLE_HOST:
++ memcpy (&net6, &(addr6->sin6_addr), sizeof(net6));
++ shift=128;
++ break;
++ default:
++ msg_panic("unknown mynetworks mask style: %s",
++ var_mynetworks_style);
++ }
++ inet_ntop(AF_INET6, &net6, hbuf, sizeof(hbuf));
++ if (!shift)
++ msg_warn("%s: skipped network with zero mask: [%s/0]", myname, hbuf);
++ else
++ vstring_sprintf_append(result, "[%s/%d] ", hbuf, shift);
++ continue;
++ } else if (sa->sa_family != AF_INET) {