2 * Copyright (C) 2012 by Darren Reed.
4 * See the IPFILTER.LICENCE file for details on licencing.
6 * $Id: parsewhoisline.c,v 1.2.2.5 2012/07/22 08:04:24 darren_r Exp $
11 Microsoft Corp MICROSOFT19 (NET-198-136-97-0-1) 198.137.97.0 - 198.137.97.255
12 Microsoft Corp SAVV-S233053-6 (NET-206-79-74-32-1) 206.79.74.32 - 206.79.74.47
15 parsewhoisline(line, addrp, maskp)
20 struct in_addr a1, a2;
27 while (*src != '\0') {
32 if (strncmp(s, "(NET", 4)) {
41 memset(addrp, 0x00, sizeof(*maskp));
42 memset(maskp, 0x00, sizeof(*maskp));
44 if (*(s + 4) == '6') {
49 if (s == NULL || *++s != ' ')
54 if (inet_pton(AF_INET6, s, &a61.in6) != 1)
58 if (s == NULL || strncmp(s, " - ", 3))
62 if (inet_pton(AF_INET6, s, &a62) != 1)
65 addrp->adf_addr = a61;
66 addrp->adf_family = AF_INET6;
67 addrp->adf_len = offsetof(addrfamily_t, adf_addr) +
68 sizeof(struct in6_addr);
70 maskp->adf_addr.i6[0] = ~(a62.i6[0] ^ a61.i6[0]);
71 maskp->adf_addr.i6[1] = ~(a62.i6[1] ^ a61.i6[1]);
72 maskp->adf_addr.i6[2] = ~(a62.i6[2] ^ a61.i6[2]);
73 maskp->adf_addr.i6[3] = ~(a62.i6[3] ^ a61.i6[3]);
76 * If the mask that's been generated isn't a consecutive mask
77 * then we can't add it into a pool.
79 if (count6bits(maskp->adf_addr.i6) == -1)
82 maskp->adf_family = AF_INET6;
83 maskp->adf_len = addrp->adf_len;
85 if (IP6_MASKNEQ(&addrp->adf_addr.in6, &maskp->adf_addr.in6,
86 &addrp->adf_addr.in6)) {
96 if (s == NULL || *++s != ' ')
101 if (inet_aton(s, &a1) != 1)
105 if (s == NULL || strncmp(s, " - ", 3))
109 if (inet_aton(s, &a2) != 1)
112 addrp->adf_addr.in4 = a1;
113 addrp->adf_family = AF_INET;
114 addrp->adf_len = offsetof(addrfamily_t, adf_addr) +
115 sizeof(struct in_addr);
116 maskp->adf_addr.in4.s_addr = ~(a2.s_addr ^ a1.s_addr);
119 * If the mask that's been generated isn't a consecutive mask then
120 * we can't add it into a pool.
122 if (count4bits(maskp->adf_addr.in4.s_addr) == -1)
125 maskp->adf_family = AF_INET;
126 maskp->adf_len = addrp->adf_len;
127 bzero((char *)maskp + maskp->adf_len, sizeof(*maskp) - maskp->adf_len);
128 if ((addrp->adf_addr.in4.s_addr & maskp->adf_addr.in4.s_addr) !=
129 addrp->adf_addr.in4.s_addr)