1.6.12 2018-01-17

* Populate metro and area code when performing lookups in IPv6 City databases.
  Previously this was only done when using IPv4 City databases.

1.6.11 2017-05-15

* Fix use of a NULL pointer when opening a corrupt database with
  `GeoIP_open`. Reported by Stephan Zeisberg. GitHub #87.

1.6.10 2017-03-29

* GeoIP_database_info now returns the full version string rather than
  incorrectly truncating it. GitHub #79.
* This API is now distributed with a small test copy of GeoIP.dat rather than
  a full copy.
* Fix issue where Visual Studio 2015 was optimizing out initialization code.
  Reported and fixed by Scott Godin. GitHub #81.
* Fix test/benchmark on Windows. Gisle Vanem. GitHub #75.

1.6.9 2016-01-11

* Fix a regression introduced in version 1.6.8, which caused
  GeoIP_database_info to erroneously return NULL.

1.6.8 2016-01-11

* Allow compilation on older systems by relaxing the autoconf and automake
  minimum versions. Thank you, Jose Rubio!
* Avoid potential problems in multi-threaded environments by consistently using
  pread() rather than read().
* Fix various small issues reported by clang's static analyser.

1.6.7 2015-10-30

* Fixed a MSVC parser stack overflow when parsing `regionName.c` and
 `timeZone.c`. Fix by elliotlo. GitHub #64.
* Updated region codes and timezones.
* When using `GEOIP_MEMORY_CACHE` with an invalid database file, the search
  tree traversal could attempt to read memory outside of the memory allocated
  for the memory cache, resulting in a segmentation fault. A check was added
  to ensure that the traversal code does not try to read beyond the end of the
  file, whether in memory, memory mapped, or on disk.
* Previously the return values from file reads were ignored. We now check
  these values to ensure that there were no errors.


1.6.6 2015-07-28

* Replaced usage of deprecated fileno, read, and lseek on Visual Studio 2005+
  with their ISO C++ conformant replacements. (Fix by ClaudiuHKS. GitHub #55.)
* A warning about using a double as a float was fixed. (Fix by ClaudiuHKS.
  GitHub #56.)
* Fixed segfault when doing a lookup on an empty database. (Fix by NesoK.
  GitHub #62.)
* Fixed a memcheck error from valgrind in the `_check_mtime`
  function. (Reported by yurivct. GitHub #60.)
* Fixed `_check_mtime` to check the return value of `gettimeofday` rather than
  just assuming it worked.


1.6.5 2015-02-25

* A segmentation fault in `geoiplookup` was fixed when the utility was passed
  an invalid database. (Reported in Red Hat bug #1180874.)
* Additional validation was added for validation of the size used in the
  creation of the index cache. (Based on discussion in Red Hat bug #832913.)
* Changed the code to only look up country codes by using functions which
  ensure that we do not try to look past the end of an array. (Reported by
  Ivan Sorokin. GitHub #53)


1.6.4 2015-01-12

* Update Fips codes (Boris Zentner)
* Several issues with the MinGW build were fixed. (Thomas Pöchtrager. Github
  #46.)
* Use a constructor in pread.c to ensure the critical section is always
  initialized. (Thomas Pöchtrager. Github #47.)
* Added missing include of `io.h` on Windows. (Thomas Pöchtrager. Github #49.)
* Fixed `configure` warning that `'missing' script is too old or missing`.
  (Reported by Floren Munteanu. Github #33.)
* Previously `nmake /f Makefile.vc clean` would fail on Windows. This was
  fixed.
* Obsolete win32 and NetWare make files were removed.
* Numerous documentation updates. (Reported by Thomas Pöchtrager. GitHub #48.)


1.6.3 2014-10-29

* Added a GEOIP_SILENCE flag. Include this flag when calling GeoIP_open to
  prevent any messages from being written to stderr. (Philip Prindeville
  and Boris Zentner)
* Mitigate a possible race condition when running under threads in the
  GeoIP_cleanup function. (Anthon Pang)
* Added some recommendations to the docs on using this library in a
  threaded application. (Boriz Zentner)
* Fixed some bugs discovered by coverity, including failure to check some
  system call return values and making sure all strings are
  null-terminated. (Boris Zentner)


1.6.2 2014-07-08

* Two files required for building on Win32 were missing from the 1.6.1
  release. These files were added. There are no changes affecting other
  platforms. (Boris Zentner)


1.6.1 2014-06-26

* Improve Win32 support (Evan Hunt)
* Update FIPS codes (Boris Zentner)


1.6.0 2013-10-29

* Remove geoipupdate (Boris Zentner)


1.5.2 2013-10-29

* Update region and time zones (Boris Zentner)
* Fix benchmark script (Boris Zentner)
* Remove autogenerated files ltmain.sh, man/geoip*.1 (Boris Zentner)
* Explain how to download free geolite databases in the README.md and
  GeoIP.conf.default (Boris Zentner)
* geoipupdate returns 1 on error 0 on success instead of the error code
  (Boris Zentner)
* README is replaced by README.md (Gregory Oschwald)
* Add support for OS X Mavericks (Boris Zentner)


1.5.1 2013-05-14

* Update time_zone for Ontario, Canada (Boris Zentner)
* geoiplookup and geoiplookup6 exit code is 0 when user asked for help
  (Jan Safranek)
* Added -h option to geoiplookup6 (Jan Safranek)
* Do not load the database file if nodes and file size do not make
  sense. (Boris Zentner)
* Keep README and man pages in pure ascii. (Boris Zentner)
* It doesn't make sense to use GEOIP_INDEX_MODE with small databases
  like GEOIP_COUNTRY_EDITION. Instead of undefined behaviour we handle
  it silently as GEOIP_MEMORY_MODE (Boris Zentner)
* Update FIPS codes for Greece (Boris Zentner)


1.5.0 2013-02-21

* Rename custom_directory to GeoIP_custom_directory. (Boris Zentner)
* Make sure the database match the requested type. This is helpful for
  Databases with the same default name and the general geoiplookup form
  (geoiplookup without a specific database) (Boris Zentner)
* apps/geoiplookup6.c use the ipnum instead of the hostname for lookups.
  (Boris Zentner)
* Use configure.ac instead of configure.in (Boris Zentner)
* Region lookup is a bit faster (Boris Zentner)
* Add pkg-config file (Bastien Nocera)
* Updates required to build a Windows DLL under MinGW (Gerald Combs)
* Make API thread safe (Boris Zentner)
* geoiplookup's default charset is UTF8
  -l change the charset back to iso8859-1 (Boris Zentner)
* geoipupdate skips \r otherwise it might be part of the last
  product_id (Boris Zentner)
* Update time zones (Boris Zentner)
* Update Region codes (Boris Zentner)
* Remove the unused CITYCONFIDENCE* database types (Boris Zentner)
* bootstrap rebuilds ltmain.sh (Boris Zentner)
* Update README.OSX for Lion (Boris Zentner)
* Change Macedonia to Macedonia, The Former Yugoslav Republic of
  (Boris Zentner)
* Add region_name to geoiplookup GEOIP_CITY_EDITION_REV1 (Boris Zentner)
* Add region_name to geoiplookup GEOIP_CITY_EDITION_REV0 (Chris Johnson)
* Add a --disable-data-files option. This allows you to build and install
  the library without having a data/GeoIP.dat file. This is useful when
  building the library from a checkout of the source tree, rather than a
  tarball (Dave Rolsky)
* Add GEOIP_ACCURACYRADIUS_EDITION and GEOIP_ACCURACYRADIUS_EDITION_V6
  (Boris Zentner)
* Add more database types GEOIP_COUNTRYCONF_EDITION,
  GEOIP_CITYCONF_EDITION, GEOIP_REGIONCONF_EDITION and
  GEOIP_POSTALCONF_EDITION (Boris Zentner)
* Fix default filenames for GEOIP_NETSPEED_EDITION_REV1 and
  GEOIP_NETSPEED_EDITION_REV1_V6 (Boris Zentner)


1.4.8

* Fix GEOIP_DOMAIN_EDITION_V6 (Boris Zentner)
* Add new Datatypes GEOIP_NETSPEED_EDITION_REV1_V6 and
  GEOIP_NETSPEED_EDITION_REV1 (Boris Zentner)
* Fix possible directory traversal weakness in geoipupdate-pureperl.pl with
  malicious update server (Boris Zentner)
* Fix GEOIP_ORG_EDITION_V6 and GEOIP_ISP_EDITION_V6 (Boris Zentner)


1.4.7 2011-12-19

* Upd timezone.c Add SX, BQ and CW remove AN and FX (Boris Zentner)
* Add support for the new types in geoiplookup6 (Boris Zentner)
* Add new database types GEOIP_CITY_EDITION_REV0_V6,
  GEOIP_CITY_EDITION_REV1_V6, GEOIP_DOMAIN_EDITION_V6,
  GEOIP_ORG_EDITION_V6 and GEOIP_ISP_EDITION_V6 (Boris Zentner)
* Remove AN and FX. Add SX, BQ and CW (Boris Zentner)
* Fix possible segfault in geoipupdate if the connection disappear
  unexpected. (Boris Zentner)
* Add sanity check for geoipupdate-pureperl.pl (Boris Zentner)
* Add GEOIP_USERTYPE_EDITION and GEOIP_USERTYPE_EDITION_V6
  datatypes (Boris Zentner)
* Add new functions GeoIP_is_private_ipnum_v4 and GeoIP_is_private_v4
  (Boris Zentner)
* Add new functions GeoIP_teredo and GeoIP_enable_teredo.
  teredo is enabled by default (Boris Zentner)
* Fix output of geoiplookup for unknown or private regions.
  (Boris Zentner)
* Fix geoipupdate-pureperl.pl to accept more product codes.
  (Boris Zentner)
* Fix minor output issue in geoipupdate -v (Boris Zentner)
* Add support for various databases. (Boris Zentner)
* Add experimental teredo support (Boris Zentner)
* Fix possible buffer overflow in conjunction with
  http_proxies (Elso Andras)
* Remove memcpy/bcopy macro for BSD (Boris Zentner)
* Add GeoIP_lib_version and GeoIP_cleanup (Ladar Levison)
* Upd Makefile.vc (Thomas Winzig)
* Fix typo in DK,18,Midtjylland (Boris Zentner)
* Update libGeoIP/regionName.c with FIPS codes 20100810 (Boris Zentner)
* Fix continent codes (Boris Zentner)
* Fix 3letter country codes for ATA, BVT, IOT, CXR, CCK, ATF, HMD,
  MYT, SGS and UMI (Boris Zentner)
* Fix typo/segfault in GeoIP_id_by_name_v6 (Boris Zentner)
* Update libGeoIP/regionName.c with FIPS codes 20100529 (Boris Zentner)
* Remove buffered IO functions, to fix issues with dup'ed file
  descriptors (Boris Zentner)
* Fix very minor memleak in geoipupdate (Boris Zentner)
* Add GEOIP_CITYCONFIDENCEDIST_EDITION, GEOIP_LARGE_COUNTRY_EDITION
  and GEOIP_LARGE_COUNTRY_EDITION_V6 database types (Boris Zentner)
* Update libGeoIP/regionName.c with FIPS codes 20100422 (Boris Zentner)
* Update libGeoIP/regionName.c with FIPS codes 20100420 (Boris Zentner)
* Update libGeoIP/regionName.c with FIPS codes 20100221 (Boris Zentner)
* Add missing timezones (Boris Zentner)
* Add missing include for Windows 2000 (Jaap Keute)
* 'GeoIP Database up to date' and 'Updated database' prints to stdout
  instead of stderr (Boris Zentner)
* Add missing GeoIPRecord_delete to geoiplookup.c (Piotr Kaczuba)
* Add some IPv4 helper functions
  unsigned long GeoIP_addr_to_num(const char *addr);
  char * GeoIP_num_to_addr(unsigned long ipnum); (Boris Zentner)
* Fix default name for the accuracy radius database to GeoIPDistance.dat (Boris Zentner)
* Add GEOIP_CITYCONFIDENCE_EDITION database type. (Boris Zentner)
* geoiplookup use GeoIPDistance.dat files if avail (Boris Zentner)
* Fix geoiplookup/geoiplookup6 output, when the databaseinfo string is
  not avail. (Boris Zentner)
* Change continent code for RU from AS to EU (Boris Zentner)
* Add GEOIP_ACCURACYRADIUS_EDITION database type. (Boris Zentner)
* Add GEOIP_LOCATIONA_EDITION the database to map back from binary to
  the csv database (Boris Zentner)
* Change Turkey's continent code from Asia to Europe (Boris Zentner)
* Rename _iso_8859_1__utf8 to _GeoIP_iso_8859_1__utf8 (Boris Zentner)
* GEOIP_ORG_EDITION, GEOIP_ISP_EDITION, GEOIP_DOMAIN_EDITION and
  GEOIP_ASNUM_EDITION databases return UTF8 results, if gi->charset is set
  to GEOIP_CHARSET_UTF8 (Boris Zentner)
* Avoid unnecesary call to gettimeofday when GEOIP_CHECK_CACHE is not set (John Douglass)
* Delayed loading of changed database files for 60 seconds. To avoid
  reading halve written databases (Boris Zentner)
* Update README.OSX for Leopard  and Snow Leopard (Boris Zentner)
* Add more IPv6 functions (Boris Zentner)
  const char *GeoIP_country_code_by_addr_v6 (GeoIP* gi, const char *addr);
  const char *GeoIP_country_code_by_name_v6 (GeoIP* gi, const char *host);
  const char *GeoIP_country_code3_by_addr_v6 (GeoIP* gi, const char *addr);
  const char *GeoIP_country_code3_by_name_v6 (GeoIP* gi, const char *host);
  const char *GeoIP_country_name_by_addr_v6 (GeoIP* gi, const char *addr);
  const char *GeoIP_country_name_by_name_v6 (GeoIP* gi, const char *host);
* Make sure that GeoIP_*_v6 functions refuse GEOIP_PROXY_EDITION and
  GEOIP_NETSPEED_EDITION databases (Boris Zentner)
* Update libGeoIP/regionName.c with FIPS codes from 20090723 (Boris Zentner)
* Fix geoipupdate's -v option to not change the license filename (Thom May)
* Fix geoipupdate's exit code (Thom May)
* Add support for ASNUM_EDITION (Boris Zentner)
* Fix -i output for larger values, sign issue (Boris Zentner)
* Add -i flag for more information on netmask, range_by_ip and the current network range (Boris Zentner)
* Add support for DOMAIN_EDITION database type (Boris Zentner)
* Fix apps/geoipupdate-pureperl.pl output layer on W32 (Boris Zentner)


1.4.6 2009-02-25

* Fix geoipupdate's my_printf function (Boris Zentner)
* Fix typo in apps/geoipupdate-pureperl.pl replace PerlIO::Gzip with PerlIO::gzip (Boris Zentner)
* Update region codes in libGeoIP/regionName.c (Boris Zentner)
* Fix regioncode/generate_regionName.pl to handle regioncodes with ',' correct (Boris Zentner)
* Update fips codes 20090201 (Boris Zentner)
* Fix unicode builds on WIN32 and eliminate some warnings (Stu Redman)
* Fix sign error in _iso_8859_1__utf8 for PPC64 (Boris Zentner)
* Change WIN32 to _WIN32, since _WIN32 is defined by default. _WIN32 is also defined for WIN64 machines (Boris Zentner)
! Remove the WSAStartup call from GeoIP_open. All Applications need to call WSAStartup and WSACleanup to initialize the Windows Socket library. Before they use any of the GeoIP_*_by_name functions. (Boris Zentner)
* geoiplookup and test-geoip-* output N/A instead of (null) (Boris Zentner)
* Silence various warnings. (Boris Zentner)
* Add more timezone region's for Australia
* Fix possible segfault in apps/geoiplookup with null pointers in non gnu printf implementations for example solaris (Boris Zentner)
* Add README.OSX to build fat binaries easy (Boris Zentner)
* Silence vasprintf warning via AC_GNU_SOURCE (Boris Zentner)
* Add several Makefiles to build a static GeoIP.lib for w32 (Stanislaw Pusep and Randy Kobes)
* Silence signedness warnings (Peter Volkov)
* Remove --with-city configure option. (Boris Zentner)
* Remove configure's --with-dbdir option. Use the similar --datadir instead (Peter Volkov)
* Various autotools improvements and cleanups. Including parallel
  build fix (Peter Volkov)
* Fix libGeoIP/timeZone.c (Martin Haller)
* Fix timezone/generate_timeZone.pl (Boris Zenter)
* Sync FIPS codes again Jan 14th, 2009 (Boris Zentner)
* Fix CA,NL regioncode. (Boris Zentner)
* Change logic in generate_regionName.pl and GeoIP_region_name_by_code to handle any mixture of two letter fips codes matching [A-Z0-9]{2} the change allow GZ and WE region codes (Boris Zentner)
* Sync regionName.c with http://www.maxmind.com/app/fips10_4 from Dec 17th, 2008 (Boris Zentner)
* Fix _GeoIP_lookupaddress for 64bit big endian systems like ppc64 (Peter Volkov)
* Add proper WIN32/64 support (Gerald Combs)
* Escape - in all manpages (Patrick Matthäi)
* Add manpage for geoiplookup6 (Boris Zentner)
* Fix -d command line option (Klaus Heinz)
* GeoIPUpdate.c use vasprintf if avail, otherwise try vsnprintf and sprintf (Boris Zentner)
* avoid pre/postincrement and assignment on the same variable (Boris Zentner)


1.4.5 2008-09-16

* metro_code replace the depreciated dma_code field (Boris Zentner)
* Add new function GeoIP_range_by_ip_delete
  r = GeoIP_range_by_ip(gi, '24.24.24.24');
  ...
  GeoIP_range_by_ip_delete(r); (Boris Zentner)
* Fix small memoryleak and wrap around in GeoIP_range_by_ip (Boris Zentner)
* CHECK_CACHE stat the database file not faster than once a second anymore (Patrick McManus)
* Fixed a typo in the geoipupdate(1) manpage and also an non-existent path on Debian (Patrick Matthäi)
* Fixes two little format errors (hyphen used as minus sign) in both manpages (Patrick Matthäi)
* Sync regionName.c with a recent fips code list (Boris Zentner)
* Fix segfault when open failed for a custom file (-f) (Boris Zentner)
* Fix sync geoiplookup's man page with the code (Klaus Heinz)
* remove unused code from GeoIP_country_name_by_addr and GeoIP_country_code3_by_addr (Boris Zentner)
* Fix geoiplookup and geoiplookup6 to distinguish between failed namelookups and unknown ips (Boris Zentner)
* add geoiplookup6 that can handle the new database type GEOIP_COUNTRY_EDITION_V6 (Boris Zentner)
* add new functions to handle ipv6:
    GEOIP_API const char *GeoIP_country_name_by_ipnum_v6 (GeoIP* gi, geoipv6_t ipnum);
    GEOIP_API const char *GeoIP_country_code_by_ipnum_v6 (GeoIP* gi, geoipv6_t ipnum);
    GEOIP_API const char *GeoIP_country_code3_by_ipnum_v6 (GeoIP* gi, geoipv6_t ipnum);
    GEOIP_API char *GeoIP_org_by_ipnum_v6 (GeoIP* gi, geoipv6_t ipnum);
    GEOIP_API char *GeoIP_org_by_addr_v6 (GeoIP* gi, const char *addr);
    GEOIP_API char *GeoIP_org_by_name_v6 (GeoIP* gi, const char *name);
    GEOIP_API int GeoIP_id_by_addr_v6 (GeoIP* gi, const char *addr);
    GEOIP_API int GeoIP_id_by_name_v6 (GeoIP* gi, const char *host);
    GEOIP_API int GeoIP_id_by_ipnum_v6 (GeoIP* gi, geoipv6_t ipnum);
    GEOIP_API GeoIPRegion * GeoIP_region_by_addr_v6 (GeoIP* gi, const char *addr);
    GEOIP_API GeoIPRegion * GeoIP_region_by_name_v6 (GeoIP* gi, const char *host);
    GEOIP_API GeoIPRegion * GeoIP_region_by_ipnum_v6 (GeoIP *gi, geoipv6_t ipnum);
    GEOIP_API void GeoIP_assign_region_by_inetaddr_v6(GeoIP* gi, geoipv6_t inetaddr, GeoIPRegion *gir);
    GEOIP_API char *GeoIP_name_by_ipnum_v6 (GeoIP* gi, geoipv6_t ipnum);
    GEOIP_API char *GeoIP_name_by_addr_v6 (GeoIP* gi, const char *addr);
    GEOIP_API char *GeoIP_name_by_name_v6 (GeoIP* gi, const char *name);

    # allowed input for addr
    2001:4860:0:1001::68
    ::85.8.93.71
    ::1
    ::5508::5d47
    ::ffff:5508::5d47

    # allowed input for host
    ipv6.google.com
    2001:4860:0:1001::68
    ::85.8.93.71
    ::1
    ::5508::5d47
    ::ffff:5508::5d47
     (Boris Zentner)
* Fix geoiplookup usage string (add -d -f) (Boris Zentner)
* Added GeoIP_range_by_ip, returns the start and end IP address for the range containing the IP address.
  This range has a constant value in the GeoIP database.
* Add geoipupdate-pureperl.pl a alternative geoipupdate version. with Proxy Server support via via the "http_proxy" environment variable. Easy to customize. (Boris Zentner)
* Add WIN64 since WIN32 is not defined on WIN64 Systems (Boris Zentner)
* Fix WIN32 compilation by encircle all MMAP functions with #ifdef WIN32 #endif pairs. MMAP is not avail in W32 (Boris Zentner)
* Update timezone/generate_timeZone.pl (Boris Zentner)
* Update libGeoIP/timeZone.c (Boris Zentner)
* Added GeoIP_printf and GeoIP_fprintf as a experimental feature to
  libGeoIPUpdate. (Boris Zentner, Andrew Droffner)
* Added cast in _iso_8859_1__utf8 function to fix NetWare/Win32 compilation issue (Guenter Knauf)
* Add HTTP Proxy Server support for geoipupdate via the "http_proxy"
  environment variable.
  ie: export http_proxy="http://proxy-hostname:port"
  (Andrew Droffner, Derek Nicol)
* Notice, that __YOU__ need to free the results of

    GeoIP_database_info
    GeoIP_name_by_ipnum
    GeoIP_name_by_addr
    GeoIP_name_by_name
    GeoIP_org_by_ipnum
    GeoIP_org_by_addr
    GeoIP_org_by_name

    not libgeoip
  (Boris Zentner, Andrew Cheung)
* Fixed segfault with geoiplookup, if used with a custom_file database, that
  could not be opened. (Boris Zentner)
* Add Usage info for options -f and -d in geoipupdate (Boris Zentner)
* Fixed segfault with geoipupdate when called with a illformed license file
  (Boris Zentner)
* Update add more timezones to GeoIP_time_zone_by_country_and_region
  (Boris Zentner)
* Add array access functions so programs can avoid accessing the
  arrays directly which whould break binary compatability (Ludwig Nussel at SUSE)
* Updated README to state API is only thread-safe if GEOIP_CHECK_CACHE is not used


1.4.4 2008-1-21

* Updated original geoipupdate to return "Invalid product ID or subscription expired"
* Added BL/Saint Barthelemy, MF/Saint Martin (ISO-3166-1 additions)
* Check for illegal IP strings, return 0 if IP is not well formed IPv4 e.g. 1.2.3.4.5 and 1.2.3
* Clarified that while core GeoIP library is LGPL, libGeoIPUpdate depends on md5.c and types.h which are GPL.
* speedup the conversion from ipstring to ipnum in _GeoIP_addr_to_num. Doubles the speed of GEOIP_MEMORY_CACHE and GEOIP_MMAP_CACHE
* Added new mmap shared memory caching option, GEOIP_MMAP_CACHE (Peter Shipley, LookSmart)
  - mmaps: our maps are shared, but we need only private readonly pages


1.4.3 2007-8-30

! CHANGE with geoiplookup facility: -v flag now returns database info for all databases, not just GeoIP Country
* Added ability to get netmask of network block from last lookup using GeoIP_last_netmask
* Fixed GeoIP_database_info bug with GeoLite City
* Replaced 4 with sizeof(char*) to fix issues with geoipupdate on 64 Bit machines
* Added GeoIP_set_charset function - enables UTF8 output of city name if GEOIP_CHARSET_UTF8 flag is passed
to GeoIP_set_charset
* Fixed segfault issue if calling GeoIP_db_avail before opening a database
* Added continent_code to GeoIP City's record struct (Frank Mather)


1.4.2 2007-2-8

* Added -d flag to enable custom path for geoipupdate utility program (Frank Mather)
* Replaced _WIN32 with WIN32 since WIN32 is already set by compilers
* Moved var definitions to top of code, defined size_t (Guenter Knauf)
* Added Makefile.win32, Makefile.netware, get_ver.awk, geoip.ico to EXTRA_DIST in Makefile.am (Guenter Knauf)


1.4.1 2007-1-2

* Replaced CS/Serbia and Montenegro with RS/Serbia, removed ZR/Zaire, added ME/Montenegro
* Added AX/Aland Islands, GG/Guernsey, IM/Isle of Man, JE/Jersey (ISO-3166-1 changes)
* Added GeoIP_time_zone_by_country_and_region, to lookup zoneinfo timezone by country and region (Frank Mather)
* Added GeoIP_region_name_by_code, to lookup region name from region code (Frank Mather)
* added -f and -d flags to enable custom paths for geoiplookup utility program (Frank Mather)
* Added benchmarks for GeoIP Region and City in test/benchmark.c (Frank Mather)
* Fixed build issue when using --as-needed flag (Diego 'Flameeyes' Pettenò)
* Add sanity checking for filename returned by MaxMind.com server for geoipupdate filename
  (Dean Gaudet, arctic.org)
* Fixed memory leaks under error conditions, buffer overflow using sprintf,
  and issue where a corrupted cache file could core dump the file
  (Nick Galbreath, Right Media Inc)


1.4.0 2006-8-7

* Changed license from GPL to LGPL, so that PHP Extension can be included in PECL (Olivier Hill)
* Rewrote GEOIP_CHECK_CACHE code, fixed numerous bugs
  - CheckCache now works if GeoIP file is overwriten by mv command
  - Fixed bug where CheckCache kept reloading in GEOIP_STANDARD_MODE
  - Fixed segfault issue in GEOIP_MEMORY_CACHE mode
  - Fixed garbage data appearing in GEOIP_INDEX_CACHE mode
  - Fixed realloc in case realloc returns new memory block (Andre Morozov of Stone Steps)
* Updated geoipupdate to print status messages for each database instead of just last database
* Check that gi is not null before running code in GeoIP_delete
* Fixed alpha-3 codes ordering, replaced TLS,TKM,TUN,TON with TKM,TUN,TON,TLS
* TP/East Timor changed to TL/Timor-Leste, reflecting changes in ISO-3166

* Added Netware and Windows makefiles (Guenter Knauf)
* Fixed NetWare compiler issue with char block[block_size] declaration (Guenter Knauf)
* Updated geoipupdate example to run weekly


1.3.17 2006-5-14

* Fixed headers for Windows/Netware compilation (Guenter Knauf)
* Fixed Received Error -21 (Sanity check database_info string failed)
  when running geoipupdate with GeoIP Country when UserId and
  productIds were not specified.  Bug was introduced in 1.3.15.


1.3.16 2006-4-17

* Fixed compliation error in GeoIPUpdate.c


1.3.15 2006-4-14

* Updated README documentation
* Updated geoipupdate so that it writes file as it is uncompressed instead
of storing entire GeoIP.dat file in memory (Frank Mather)
* Updated geoiplookup so that it returns GeoIP Domain Name if available
  (Frank Mather)
* Updated geoipupdate so that it reports whether databases are updated
in non-verbose mode (Frank Mather)


1.3.14 2005-9-7

* Check if byte, ushort, ulong, u16, u32 are defined in configure
  script.  Fixes compilation issue on FreeBSD systems.
* Check for Big Endian byte order (needed for MD5 code in geoipupdate
  to work properly on Mac OS X and other Big Endian processors)
* Fixed GEOIP_CHECK_CACHE mode when used with GEOIP_STANDARD to
  only refresh upon file change
* Fixed memory leak when refreshing file in GEOIP_CHECK_CACHE mode
* Updated ltmain.sh to support Debian GNU/k*BSD bug #315425 (Marek Habersack)
* Added lookup functions using IP numeric representation as input (Frank Mather)
* Removed geoipexport
* Replaced Yugoslavia with Serbia and Montenegro
* Updated geoiplookup to only perform country lookup once instead of twice by
  using GeoIP_id_by_name


1.3.13 2005-8-1

* Fixed autoconf weirdness that resulted in libraries being
  installed without .so suffix


1.3.12 2005-7-19

* Removed -lGeoIP from libGeoIPUpdate_la_LIBADD - fixes compilation error
  if GeoIP isn't already installed (Thomas Steudten)


1.3.11 2005-7-7

* Fixed gcc warnings and bug.  Use int
  instead of char for checking the return value of getopt in geoipupdate.c.
  Moved the internal functions to GeoIP_internal.h to get rid
  of those 'implicit declaration' warnings. (Ludwig Nussel/SUSE)
* Cleaned up name space by prefixing internal functions with
  _GeoIP* (Ludwig Nussel/SUSE)
* Memory Leak fix for GeoIP City if fread error
* Added more verbose error messages for geoipupdate (Frank Mather)
* Added check for zlib.h to configure.in


1.3.10 2005-4-17

* Added types.h to Makefile.am - fixes compilation error


1.3.9 2005-4-14

* fixed bug with GEOIP_INDEX_CACHE (Frank Mather)
* fixed segfault issue if GeoIP.dat not found (Frank Mather)
* Updated MD5 checksum code to use GnuPG code which works
  on 64bit machines (Frank Mather)
* Fixed memory leak in test-geoip-isp.c and test-geoip-org.c
* Added support for GeoIP Domain Names in geoipupdate


1.3.8 2004-11-7

* Updated geoipupdate to report invalid userID and productID errors
* Check if gethostbyname_r is version that returns int or is other version
  - should fix compile errors on Solaris and FreeBSD
* Updated URL to get license key, userId, and product Ids in conf/GeoIP.conf.default
* Updated test case, removed www.asahi.com
* Added support for GEOIP_INDEX_CACHE - which just caches
  the most frequently access index portion of the database, resulting
  in faster lookups than GEOIP_STANDARD, but less memory usage than
  GEOIP_MEMORY_CACHE (Frank Mather)


1.3.7 2004-10-5

* Updated test case, removed www.bundesregierung.de added www.asahi.com


1.3.6 2004-8-8

* Check for gethostbyname_r support in configure (Mac OS X doesn't support gethostbyname_r)
* Made GeoIP City code thread safe
* Fixed bug with geoipupdate reading in product ids
* Added support for GeoIP Netspeed geoipupdate
* Fix memleak in lookupaddress (Ludwig Nussel/SUSE)
* Add prototype for _full_path_to to make 64bit clean
  (Ludwig Nussel/SUSE)
* Add return values to test programs (Ludwig Nussel/SUSE)


1.3.5 2004-7-5

* Added more documentation to README file
* Made GEOIP_CHECK_CACHE work with GEOIP_STANDARD mode - reloads filehandle
  in case file changes.
* Added GeoIP_country_code_by_ipnum and GeoIP_id_by_ipnum to use
  existing ulong IP Address in numeric form instead of having to
  convert it to string (Boris Hajduk)
* Made code thread safe by replacing gethostbyname with gethostbyname_r


1.3.4 2004-6-4

* Fixed bug where *.gz file(s) didn't get removed after geoipupdate


1.3.3 2004-6-2

* Added support for NetSpeed lookup to geoiplookup
* inet_addr patch for 64 bit systems (Thomas Steudten)
* Added Support for automated downloads of GeoIP Region, City, ISP and
  Organization databases (Frank Mather)
* INADDR_NONE Patch for Solaris 9 (John Young)


1.3.2 2004-4-20

* Added support for Maxmind NetSpeed

* MinGW patch from Stanislaw Pusep

  I was re-compiling Geolizer (http://sysd.org/log.php#glzr) on Win32 so I
  firstly needed to put up-to-date Win32 compatibility of libGeoIP itself.
  Fortunately MinGW plataform evolved a lot since last time I used it to
  compile libGeoIP. I'm sending you the patch with changes required for
  libGeoIP to work on both Win32 and UN*X. UN*X behavior is unaffected. Now,
  detailed explanation of what I did at all:

  1) Made correct header imports for both Win32 and UN*X. UN*X imports netdb.h
     & netinet/in.h and Win32 imports windows.h & winsock.h
  2) Win32 gethostbyname() is only able to resolve hostnames, it can't convert
     "127.0.0.1" string to 32-bit IP address. Thus I added lookupaddress()
     function that safely resolves any string to IP address and replaced all
     gethostbyname() calls by it.
  3) Database files were referenced by pre-compiled static strings. I
     malloc()ed buffers for file names so they can be changed "on fly". Thus,
     on Win32 version GeoIP.dat & other files are being seeked in the same
     directory as executable file or library.
  4) Added README.MinGW file with brief explanation on how to get GeoIP
     working under MinGW system.


1.3.1 2003-11-11

* Check for stdint.h in autoconf (Sean Chittenden)
* prevent the geoipupdate man page from trying to install itself directly in
  the system directory (Gyepi Sam)


1.3.0 2003-09-29

* Fixed includes to compile on Windows (Fabrice Colin)
* Removed the _addr_to_num() calls from GeoIP_*_by_name()
* _seek_record() optimizations (Maurice Cinquini)
 1) Use a single buf ptr inside the loops.
    Set to the stack buffer or the cached memory the start of the function.
 2) Unroll the i=0,1 loop to allow constant folding.
 3) Unroll the j loop for the common case of j = STANDARD_RECORD_LENGTH
    (I've already done the above changes see attached function.)
    With gcc -O2 calculating x[0] and x[1] for STANDARD_RECORD_LENGTH now
    only takes 15 (was > 100) i80x86 instructions with 6 byte accesses of RAM.
 4) only calculate x[0], x[1] when needed, may be a bigger win
    than the above since all the other optimizations above only reduced
                    CPU instructions operating on CPU cached RAM.
! IMPORTANT API Change: Changed GeoIPRegion to have region in structure. Saves space and a malloc.
  Since GeoIPRegion.region is no longer a pointer but an in-structure
  array so test the first byte of region == 0 rather testing if the region
  pointer is NULL. (Maurice Cinquini)
* Added GeoIP_assign_region_by_inetaddr which doesn't do any mallocs and made all other region APIs go thru it (Maurice Cinquini)
* Replaced _h_addr_to_num() with ntohl() and removed _h_addr_to_num() (Maurice Cinquini)
* Fixed bug when IP address not found in region rev1 database (Jason Linhart)
* Added added extern "C" to GeoIPCity.h fixes problems when included in C++ library


1.2.2 2003-08-10

* Added support for GeoIP ISP Edition identifier
* Fixed bug in GeoIP_database_info (Jason Linhart)
* Added support for GeoIP AS Number Edition
! renamed GeoIP_org_by_* functions to GeoIP_name_by_* to reduce confusion
  since these functions are used by GeoIP ISP and GeoIP ASNum as well
  as GeoIP Organization
* Added support for GeoIP Proxy Edition
! renamed GeoIP_country_id_by_* functions to GeoIP_id_by_*


1.2.1 2003-07-12

* Added GeoIP_record_id_by_addr and GeoIP_next_record functions
* Added support for new GeoIP Region format, including Canadian Provinces


1.2.0 2003-04-26

* Added support for GeoIP City format revision 1, including dma code and area code
* geoiplookup returns results from GeoIP Region, City, ISP and Organization databases
* Standardized location for GeoIP Region, City, ISP and Organization databases
* Added GeoIP_open_type to open database from default location for other dbs besides country
* Added check to make sure that the appropriate database is loaded for each lookup method
* Updated update code to check for first 12 characters of license key
* Added GeoIP_country_continent array to lookup continent by country ID


1.1.9 2003-03-10

* merged windows patch into main code base (Kenneth R. Robinette)
* Changed const int to #define for windows compatibility


1.1.8 2003-03-04

* Fixed bug with city database introduced in 1.1.6


1.1.7 2003-03-04

* Fixed bug introduced in 1.1.6 when run in GEOIP_STANDARD mode
* Added test to test GEOIP_STANDARD


1.1.6 2003-03-03

* Added spec for building RPMs (Ryan Weaver)
* Added support for 4byte records for Organization database
* Changed Taiwan, Province of China to Taiwan


1.1.5 2003-02-10

* Added support for GeoIP Organization database


1.1.4 2002-12-30

* Cast number to int in _num_to_addr in geoipexport (Ralf S. Engelschall)
* Removed printf debug statements from geoipexport
* correct library build ordering (Ralf S. Engelschall)
* ulong -> unsigned long (Sean Chittenden)


1.1.3 2002-12-24

* Added GeoIPUpdate.h to EXTRA_DISTS
* Compile fixes for Solaris, FreeBSD (Michael McClennen, Corris Randall)
* Handle NULL in printf in test-geoip-region


1.1.2 2002-12-16

* Added support for postal codes
* Added geoipexport, program to export bit binary file to
  binary tree format and csv format
* Split update code into separate library, GeoIPUpdate.la
* Allow passing NULL callback to GeoIP_update_database function
  (Sean Chittenden)
* Added geoipexport program, exports to CSV file
* Added GeoIP_database_edition method
* Changed DATADIR to GEOIPDATADIR


1.1.1 2002-11-07

* Fixed segfault issue with GeoIPRegion_delete
* Handle test failures where lookup returns NULL more gracefully


1.1.0 2002-11-06

* Perform sanity checking before installing datebase using geoipupdate
* Removed file locking, since we install file by renaming instead of writing to it.
* Fixed geoipupdate to check for NULL return value
* Added constants for different editions
* Added O1 code for "Other country", used in per-country city editions
* fixed multi-line string literals warning in test-geoip.c
* Use enum constants for GeoIP_update_database values
* Added GEOIP_CHECK_CACHE option (not working yet)


1.0.10 2002-10-28

* IMPORTANT API Change - Return NULL instead of '--' and 'N/A'
  Be sure to check the return value for NULL to avoid segmentation faults!!!!
* Added callback to print messages from GeoIP_update_database
* Moved GeoIPConfFile to geoipupdate.c
* Changed databaseSegments to unsigned int (Chris Gibbs)
* Fixed compiler warnings (Chris Gibbs)
* API Change - GeoIPRegion region member set to NULL when no region available
* Change short int to int (Chris Gibbs)
* Added write/read file locking for GeoIPUpdate.c/GeoIP.c


1.0.9 2002-10-16

* removed -ansi from Makefile.am to avoid compile error on Solaris 8
* Compile fix for FreeBSD Stable (Kimura Fuyuki)


1.0.8 2002-10-05

* Included header required for *BSD (Akinori Musha)


1.0.7 2002-10-05

* Fixed compilation error with GeoIPUpdate.c


1.0.6 2002-10-04

* Moved update code into separate file
* Added md5 checksums to update code
* Fixed memory leak when running geoiplookup -v
* Moved const RECORD_LENGTH to #define RECORD_LENGTH for Windows compatibility
  (Randy Kobes)
* Cleaned up GeoIP_new code


1.0.5 2002-09-23

* Supports GeoIP Regional Edition
* Macau is now "Macao" per ISO 3166-1 change
* Romania "ROM" is now "ROU" per ISO 3166-1 change
* Added #define for memcpy -> BSD's bcopy (Chris Gibbs)
* Removed "private" functions from GeoIP.h


1.0.4 2002-08-27

* rewrote _seek_country to use loop instead of recursion for faster performance
* Removed "orphan" nodes from demo database resulting in smaller size (Jason Linhart)
* Moved changes for building windows DLL into separate patch
* Fixed segfaults when passed malformed IP addresses


1.0.3 2002-08-26

* Added more changes for windows compatibility
  (Stanislaw Pusep)
* Added benchmark program


1.0.2 2002-08-21

* Open database using "rb" for windows compatibility
  (Stanislaw Pusep)
* Removed superfluous inet_ntop command (Stanislaw Pusep)


1.0.1 2002-08-20

* Fixed bug with resolving hostnames
* More fixes for compiler warnings (Chris Gibbs)
* Changed int to unsigned int in _is_ipaddr (Chris Gibbs)


1.0.0 2002-08-12

* Changed license to GPL
* Don't perform Reverse DNS lookups on IP addresses
* Only include getopt.h on Linux (OpenPKG patch)
* Avoid the_license_key_str warning (OpenPKG patch)
* Added license for March 2002 database


0.3.0 2002-08-04

* Added support for 'A2', Satellite Providers


0.2.8 2002-07-30

* Handle malformed input gracefully
* Added section to README on Solaris workarounds
* Added geoipupdate man page


0.2.7 2002-07-27

* Added section to README on automatic updates
* link to socket library on solaris


0.2.6 2002-07-25

* optimized GeoIP_open (Chris Gibbs)
* check for partial file read in GeoIP_open (Chris Gibbs)
* optimized _addr_to_num() (Chris Gibbs)
* changed write and read to send and recv for sockets
* Only install GeoIP.conf and GeoIP.dat if not already installed


0.2.5 2002-07-22

* Added verbose option to GeoIP_update_database


0.2.4 2002-07-22

* Fix for GeoIP_update_database


0.2.3 2002-07-22

* Fixes for FreeBSD
* All calls to malloc are checked for NULL pointer (Chris Gibbs)
* Fixed spelling of "Kazakhstan" (Chris Gibbs)
* Initialize cache_buf to NULL (Chris Gibbs)
* More memory leak fixes (Chris Gibbs)


0.2.2 2002-07-18

* Added update database function
* Fixed memory leak in GeoIP_new (Chris Gibbs)


0.2.1 2002-07-03

* Added support for anonymous proxies


0.2.0 2002-06-23

* Added new memory caching option for improved performance


0.1.7 2002-05-29

* Only add -lnsl for systems that support libnsl
* Added decl for 3 letter country code array to GeoIP.h


0.1.6 2002-05-25

* Added 3 letter country code


0.1.5 2002-05-23

* Added -lnsl fixed compile errors


0.1.4 2002-05-11

* Fixed bugs in demo March 2002 database


0.1.3 2002-04-21

* Fixed bug related to signed int (Brian Grossman)
* Better error handling when hostname not found
* Fixed bug when netmask=32 for netblock


0.1.2 2002-04-20

* Added two new functions, GeoIP_country_id_by_addr
  and GeoIP_country_id_by_name.
* Made GeoIP_country_code and GeoIP_country_name
  viewable outside of library, to be with with
  GeoIP_country_id_by_* functions.


0.1.1 2002-04-07

* GeoIP.h is now installed to includedir
* constructor and destructor are now provided by
    GeoIP_new, GeoIP_open, and GeoIP_delete


0.1.0 2002-04-07

* Initial release
