Lines 21-32
Link Here
|
21 |
#include <config.h> |
21 |
#include <config.h> |
|
|
22 |
#include <GeoIP.h> |
23 |
#include <GeoIPCity.h> |
22 |
#include <isc/mem.h> |
24 |
#include <isc/mem.h> |
23 |
#include <isc/string.h> |
25 |
#include <isc/string.h> |
24 |
#include <isc/util.h> |
26 |
#include <isc/util.h> |
25 |
#include <dns/acl.h> |
27 |
#include <dns/acl.h> |
|
|
28 |
static GeoIP *geoip = NULL; |
29 |
|
26 |
isc_result_t |
30 |
isc_result_t |
27 |
dns_acl_create(isc_mem_t *mctx, int n, dns_acl_t **target) { |
31 |
dns_acl_create(isc_mem_t *mctx, int n, dns_acl_t **target) { |
28 |
isc_result_t result; |
32 |
isc_result_t result; |
Lines 208-214
Link Here
|
208 |
e->u.ip_prefix.prefixlen)) |
212 |
e->u.ip_prefix.prefixlen)) |
209 |
goto matched; |
213 |
goto matched; |
210 |
break; |
214 |
break; |
211 |
|
215 |
|
|
|
216 |
case dns_aclelementtype_ipregion: |
217 |
/* We only match V4 addresses */ |
218 |
if (reqaddr->family == AF_INET) { |
219 |
/* Region match */ |
220 |
|
221 |
if (NULL == geoip) { |
222 |
geoip = GeoIP_new(GEOIP_MEMORY_CACHE); |
223 |
} |
224 |
if (NULL != geoip) { |
225 |
GeoIPRecord * value; |
226 |
|
227 |
value = GeoIP_record_by_addr(geoip,inet_ntoa(reqaddr->type.in)); |
228 |
if ((NULL != value) && (NULL != value->region) && (2 == strlen(value->region))) { |
229 |
if ((e->u.region[0] == value->region[0]) && (e->u.region[1] == value->region[1])) { |
230 |
goto matched; |
231 |
} |
232 |
} |
233 |
} |
234 |
} |
235 |
break; |
236 |
|
212 |
case dns_aclelementtype_keyname: |
237 |
case dns_aclelementtype_keyname: |
213 |
if (reqsigner != NULL && |
238 |
if (reqsigner != NULL && |
214 |
dns_name_equal(reqsigner, &e->u.keyname)) |
239 |
dns_name_equal(reqsigner, &e->u.keyname)) |