Blob Blame History Raw
--- geoip2.c
+++ geoip2.c
@@ -59,7 +59,7 @@ __RCSID("$Id");
 #include <maxminddb.h>
 
 static MMDB_s mmdb;
-static MMDB_s *geoip2_handle = &mmdb;
+static MMDB_s *geoip2_handle = NULL;
 static char geoip2_database[MAXPATHLEN + 1];
 static pthread_rwlock_t geoip2_lock;
 
@@ -88,11 +88,13 @@ geoip2_set_db(name)
 	strncpy(geoip2_database, name, MAXPATHLEN);
 	geoip2_database[MAXPATHLEN] = '\0';
 
+	geoip2_handle = &mmdb;
 	int status = MMDB_open(geoip2_database, MMDB_MODE_MMAP, geoip2_handle);
 	if (status != MMDB_SUCCESS) {
 		mg_log(LOG_WARNING, 
 		       "Geoip2 database \"%s\" cannot be used",
 		       geoip2_database);
+		geoip2_handle = NULL;
 		return;
 	}
 }
@@ -123,6 +125,12 @@ geoip2_set_ccode(priv)
         int gai_error, mmdb_error;
 	MMDB_lookup_result_s result;
 
+	if (geoip2_handle == NULL) {
+		mg_log(LOG_DEBUG, "GeoIP2 is not available");
+ 		priv->priv_ccode = NULL;
+ 		return;
+ 	}
+
 	if (iptostring(SA(&priv->priv_addr),
 	    priv->priv_addrlen, ipstr, sizeof(ipstr)) == NULL) {
 		mg_log(LOG_DEBUG, "Geoip2 iptostring failed");