#ifndef WIN32
" files unlimited;\n"
#endif
-#ifdef HAVE_GEOIP2
+#if defined(HAVE_GEOIP2) && !defined(WIN32)
" geoip-directory \"" MAXMINDDB_PREFIX "/share/GeoIP2\";\n"
+#elif defined(HAVE_GEOIP2)
+" geoip-directory \".\";\n"
#endif
"\
# has-old-clients <obsolete>;\n\
#include <named/log.h>
#include <named/geoip.h>
-static dns_geoip_databases_t geoip_table = DNS_GEOIP_DATABASE_INIT;
+static dns_geoip_databases_t geoip_table;
#if defined(HAVE_GEOIP)
static void
isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL,
NS_LOGMODULE_SERVER, ISC_LOG_ERROR,
"GeoIP2 database '%s/%s': path too long",
- (dir != NULL) ? dir : ".", dbfile);
+ dir, dbfile);
return (NULL);
}
#if defined(HAVE_GEOIP2)
REQUIRE(dir != NULL);
+ isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL,
+ NS_LOGMODULE_SERVER, ISC_LOG_INFO,
+ "looking for GeoIP2 databases in '%s'", dir);
+
ns_g_geoip->country = open_geoip2(dir, "GeoIP2-Country.mmdb",
&geoip_country);
if (ns_g_geoip->country == NULL) {
char *dir;
DE_CONST(cfg_obj_asstring(obj), dir);
ns_geoip_load(dir);
- } else {
- ns_geoip_load(NULL);
}
ns_g_aclconfctx->geoip = ns_g_geoip;
<Filter>Source Files</Filter>
</ClCompile>
@END GEOIP
+@IF GEOIPLEGACY
+ <ClCompile Include="..\geoip.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+@END GEOIPLEGACY
<ClCompile Include="..\interfacemgr.c">
<Filter>Source Files</Filter>
</ClCompile>
<Filter>Header Files</Filter>
</ClInclude>
@END GEOIP
+@IF GEOIPLEGACY
+ <ClInclude Include="..\include\named\geoip.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+@END GEOIPLEGACY
<ClInclude Include="..\include\named\globals.h">
<Filter>Header Files</Filter>
</ClInclude>
@IF GEOIP
<ClCompile Include="..\geoip.c" />
@END GEOIP
+@IF GEOIPLEGACY
+ <ClCompile Include="..\geoip.c" />
+@END GEOIPLEGACY
<ClCompile Include="..\interfacemgr.c" />
<ClCompile Include="..\listenlist.c" />
<ClCompile Include="..\log.c" />
@IF GEOIP
<ClInclude Include="..\include\named\geoip.h" />
@END GEOIP
+@IF GEOIPLEGACY
+ <ClInclude Include="..\include\named\geoip.h" />
+@END GEOIPLEGACY
<ClInclude Include="..\include\named\globals.h" />
<ClInclude Include="..\include\named\interfacemgr.h" />
<ClInclude Include="..\include\named\listenlist.h" />
fprintf(stderr, " --gssapi\n");
fprintf(stderr, " --have-dlopen\n");
fprintf(stderr, " --have-geoip\n");
+ fprintf(stderr, " --have-geoip2\n");
fprintf(stderr, " --have-libxml2\n");
fprintf(stderr, " --ipv6only=no\n");
fprintf(stderr, " --rpz-nsdname\n");
/* Build with GeoIP support */
@HAVE_GEOIP@
+/* Build with GeoIP2 support */
+@HAVE_GEOIP2@
+
/* define if idnkit support is to be included. */
@WITH_IDN@
module: for example, if the library is installed in
<filename>/usr/local/lib</filename>, then the default
<command>geoip-directory</command> will be
- <filename>/usr/local/share/GeoIP</filename>.
- See <xref linkend="acl"/> for details about
+ <filename>/usr/local/share/GeoIP</filename>. On Windows,
+ the default is the <command>named</command> working
+ directory. See <xref linkend="acl"/> for details about
<command>geoip</command> ACLs.
</para>
</listitem>
void *domain; /* GeoIP2-Domain */
void *isp; /* GeoIP2-ISP */
void *as; /* GeoIP2-ASN or GeoLite2-ASN */
-#define DNS_GEOIP_DATABASE_INIT \
- { NULL, NULL, NULL, NULL, NULL }
#else /* HAVE_GEOIP */
void *country_v4; /* GeoIP DB 1 */
void *city_v4; /* GeoIP DB 2 or 6 */
void *domain; /* GeoIP DB 11 */
void *country_v6; /* GeoIP DB 12 */
void *city_v6; /* GeoIP DB 30 or 31 */
-#define DNS_GEOIP_DATABASE_INIT \
- { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }
#endif /* HAVE_GEOIP */
};
return (0);
}
-static dns_geoip_databases_t geoip = DNS_GEOIP_DATABASE_INIT;
+static dns_geoip_databases_t geoip;
#endif /* HAVE_GEOIP || HAVE_GEOIP2 */
#if defined(HAVE_GEOIP2)
<Filter>Library Source Files</Filter>
</ClCompile>
@IF GEOIP
- <ClCompile Include="..\geoip.c">
+ <ClCompile Include="..\geoip2.c">
<Filter>Library Source Files</Filter>
</ClCompile>
@END GEOIP
+@IF GEOIPLEGACY
+ <ClCompile Include="..\geoip.c">
+ <Filter>Library Source Files</Filter>
+ </ClCompile>
+@END GEOIPLEGACY
<ClCompile Include="..\ipkeylist.c">
<Filter>Library Source Files</Filter>
</ClCompile>
<Filter>Library Header Files</Filter>
</ClInclude>
@END GEOIP
+@IF GEOIPLEGACY
+ <ClInclude Include="..\include\dns\geoip.h">
+ <Filter>Library Header Files</Filter>
+ </ClInclude>
+@END GEOIPLEGACY
<ClInclude Include="..\include\dns\ipkeylist.h">
<Filter>Library Header Files</Filter>
</ClInclude>
<ClCompile Include="..\fixedname.c" />
<ClCompile Include="..\forward.c" />
@IF GEOIP
- <ClCompile Include="..\geoip.c" />
+ <ClCompile Include="..\geoip2.c" />
@END GEOIP
+@IF GEOIPLEGACY
+ <ClCompile Include="..\geoip.c" />
+@END GEOIPLEGACY
<ClCompile Include="..\gssapictx.c" />
<ClCompile Include="..\gssapi_link.c" />
<ClCompile Include="..\hmac_link.c" />
@IF GEOIP
<ClInclude Include="..\include\dns\geoip.h" />
@END GEOIP
+@IF GEOIPLEGACY
+ <ClInclude Include="..\include\dns\geoip.h" />
+@END GEOIPLEGACY
<ClInclude Include="..\include\dns\ipkeylist.h" />
<ClInclude Include="..\include\dns\iptable.h" />
<ClInclude Include="..\include\dns\journal.h" />
copy @WSHELP_DLL@ ..\Build\Debug\
@END GSSAPI
-@IF GEOIP
+@IF GEOIPLEGACY
echo Copying the GeoIP DLL.
copy @GEOIP_DLL@ ..\Build\Debug\
-@END GEOIP
+@END GEOIPLEGACY
@IF IDNKIT
echo Copying the IDN kit DLL.
copy @WSHELP_DLL@ ..\Build\Release\
@END GSSAPI
-@IF GEOIP
+@IF GEOIPLEGACY
echo Copying the GeoIP DLL.
copy @GEOIP_DLL@ ..\Build\Release\
-@END GEOIP
+@END GEOIPLEGACY
@IF IDNKIT
echo Copying the IDN kit DLL.
"HAVE_EVP_SHA512",
"HAVE_FIPS_MODE",
"HAVE_GEOIP",
+ "HAVE_GEOIP2",
"HAVE_GEOIP_CITY_V6",
"HAVE_GEOIP_V6",
"HAVE_LIBXML2",
"ATOMIC",
"GSSAPI",
"GEOIP",
+ "GEOIPLEGACY",
"IDNKIT",
"LIBXML2",
"OPENSSL",
"extra-tests",
"gssapi",
"geoip",
+ "geoip2",
"gost",
"iconv",
"idn",
" with-gssapi[=PATH] build with MIT KfW GSSAPI yes|no|path\n",
" with-libxml2[=PATH] build with libxml2 library yes|no|path\n",
" with-geoip[=PATH] build with GeoIP support yes|no|path\n",
+" with-geoip2[=PATH] build with GeoIP2 support yes|no|path\n",
" with-pssuspend[=COMMAND] specify pssuspend command\n",
" with-python[=COMMAND] specify python interpreter python|command\n",
" with-readline[=PATH] build with readline library support yes|no|path\n",
my $gssapi_path = "C:\\Program\ Files\\MIT\\Kerberos\\";
my $use_geoip = "no";
my $geoip_path = "";
+my $use_geoip2 = "no";
+my $geoip2_path = "";
my $use_libxml2 = "auto";
my $libxml2_path = "..\\..\\";
my $with_pssuspend = "no";
$geoip_path = $val;
}
}
+ } elsif ($key =~ /^geoip2$/i) {
+ if ($val !~ /^no$/i) {
+ $use_geoip2 = "yes";
+ # Disable GeoIP legacy.
+ $use_geoip = "no";
+ if ($val !~ /^yes$/i) {
+ $geoip2_path = $val;
+ } else {
+ $geoip2_path = "..\\..\\GeoIP2";
+ }
+ }
} elsif ($key =~ /^readline$/i) {
if ($val !~ /^no$/i) {
$use_readline = "yes";
} else {
print "geoip-path: $geoip_path\n";
}
+ if ($use_geoip2 eq "no") {
+ print "geoip2: disabled\n";
+ } else {
+ print "geoip2-path: $geoip2_path\n";
+ }
if ($use_readline eq "no") {
print "readline: disabled\n";
} else {
print "geoip library is disabled\n";
}
} else {
- $configcond{"GEOIP"} = 1;
+ $configcond{"GEOIPLEGACY"} = 1;
$geoip_path = File::Spec->rel2abs($geoip_path);
if ($verbose) {
print "checking for geoip directory at \"$geoip_path\"\n";
$configdefh{"HAVE_GEOIP_CITY_V6"} = 1;
}
+# with-geoip2
+if ($use_geoip2 eq "no") {
+ if ($verbose) {
+ print "geoip2 library is disabled\n";
+ }
+} else {
+ $configcond{"GEOIP"} = 1;
+ $geoip2_path = File::Spec->rel2abs($geoip2_path);
+ if ($verbose) {
+ print "checking for geoip2 directory at \"$geoip2_path\"\n";
+ }
+ if (!-f File::Spec->catfile($geoip2_path, "maxminddb.h")) {
+ die "can't find maxminddb.h include\n";
+ }
+ if (!-f File::Spec->catfile($geoip2_path, "maxminddb_config.h")) {
+ die "can't find maxminddb_config.h include\n";
+ }
+ if (!-f File::Spec->catfile($geoip2_path, "libmaxminddb.lib")) {
+ die "can't find libmaxminddb.lib library\n";
+ }
+ $configinc{"GEOIP_INC"} = "$geoip2_path";
+ my $geoip2_lib = File::Spec->catfile($geoip2_path, "libmaxminddb.lib");
+ $configlib{"GEOIP_LIB"} = "$geoip2_lib";
+ my $geoip_inc = qq(/I "$geoip2_path");
+ my $geoip2_libs = qq("$geoip2_lib" Ws2_32.Lib);
+
+ if ($verbose) {
+ print "checking for GeoIP2 support\n";
+ }
+ open F, ">testgeoip2.c" || die $!;
+ print F << 'EOF';
+#include <maxminddb.h>
+int main(void) {
+ return MMDB_lib_version() != 0;
+}
+EOF
+ close F;
+ $compret = `cl /nologo $geoip_inc /MD testgeoip2.c $geoip2_libs`;
+ if (grep { -f and -x } ".\\testgeoip2.exe") {
+ `.\\testgeoip2.exe`;
+ if ($? == 0) {
+ die "GeoIP2 test failed\n";
+ }
+ } else {
+ die "can't compile GeoIP2 test: $compret\n";
+ }
+ $configdefh{"HAVE_GEOIP2"} = 1;
+}
+
# with-readline
if ($use_readline eq "no") {
if ($verbose) {
# --with-aes supported
# --with-cc-alg supported
# --with-geoip supported
+# --with-geoip2 supported
# --with-gssapi supported with MIT (K)erberos (f)or (W)indows
# --with-lmdb no supported on WIN32 (port is not reliable)
# --with-libxml2 supported