summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemi Collet <remi@remirepo.net>2020-09-24 14:59:26 +0200
committerRemi Collet <remi@remirepo.net>2020-09-24 14:59:26 +0200
commit93e92edfae73ce12fd500467488bda56021b420d (patch)
tree24aaa939004fb508b30745e1134cad56df7be65b
parentb2ff3724e367d82a1804759e01147713129910c5 (diff)
sync with Fedora and rename to IP2location
rebuild for #remirepo with release = 0 to manage update from old version
-rw-r--r--IP2Location-8.0.9-adebc0ef.patch711
-rw-r--r--IP2Location-8.0.9-rpmlint.patch877
-rw-r--r--IP2Location.spec17
3 files changed, 1604 insertions, 1 deletions
diff --git a/IP2Location-8.0.9-adebc0ef.patch b/IP2Location-8.0.9-adebc0ef.patch
new file mode 100644
index 0000000..bb3940a
--- /dev/null
+++ b/IP2Location-8.0.9-adebc0ef.patch
@@ -0,0 +1,711 @@
+diff --git a/README.md b/README.md
+index 85a3d1f..806b3cd 100644
+--- a/README.md
++++ b/README.md
+@@ -46,6 +46,12 @@ For more details, please visit:
+ * Use the IPv4 BIN file if you just need to query IPv4 addresses.
+ * Use the IPv6 BIN file if you need to query BOTH IPv4 and IPv6 addresses.
+
++# NOTES
++If you encountered **error while loading shared libraries** in linux platform, that could be due to the shared library was saved into **usr/local/lib** that might not be the default library path. You can run the below command
++```
++ldconfig /usr/local/lib
++```
++
+ # Support
+ Email: support@ip2location.com.
+ URL: [https://www.ip2location.com](https://www.ip2location.com)
+diff --git a/contrib/IP2Location.spec b/contrib/IP2Location.spec
+index 7b76cb8..8fed016 100644
+--- a/contrib/IP2Location.spec
++++ b/contrib/IP2Location.spec
+@@ -3,12 +3,10 @@
+ Name: IP2Location
+ Summary: C library for mapping IP address to geolocation information
+ Version: %{version}
+-Release: 5%{?dist}
+-Group: System Environment/Libraries
++Release: 6%{?dist}
+ License: MIT
+ URL: http://www.ip2location.com/
+-Source0: https://github.com/chrislim2888/IP2Location-C-Library/archive/%{version}.tar.gz
+-BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
++Source0: https://github.com/chrislim2888/IP2Location-C-Library/archive/%{version}/%{name}-%{version}.tar.gz
+ BuildRequires: libtool
+
+
+@@ -26,7 +24,6 @@ the included downloader.
+
+ %package devel
+ Summary: Static library and header files for the ip2location library
+-Group: Development/C
+ Requires: %{name} = %{version}-%{release}
+ Provides: %{name}-devel = %{version}-%{release}
+
+@@ -51,63 +48,60 @@ perl -pi -e 's/-Wno-unused-result//' configure.ac
+
+ %build
+ sh ./bootstrap
+-autoreconf -fi
++autoreconf -fiv
+
+ %configure --disable-static
+-make clean
+-make %{?_smp_mflags} COPTS="$RPM_OPT_FLAGS"
++%make_build COPTS="$RPM_OPT_FLAGS"
+
+ # convert CSV to BIN
+ make -C data convert
+
++
+ %check
+ LD_LIBRARY_PATH=%{buildroot}%{_libdir}:$LD_LIBRARY_PATH make check
+
+
+ %install
+-rm -rf %{buildroot}
+-
+-make install DESTDIR=%{buildroot}
++%make_install
+
+ # cleanup
+ rm -f %{buildroot}%{_libdir}/*.*a
+
+ # tools
+ install -d %{buildroot}%{_datadir}/%{name}/tools
+-cp tools/download.pl %{buildroot}%{_datadir}/%{name}/tools
++install -pm 0755 tools/download.pl %{buildroot}%{_datadir}/%{name}/tools
+
+ # database directory
+ install -d %{buildroot}%{_datadir}/%{name}/
+
+
+-%post -p /sbin/ldconfig
+-
+-%postun -p /sbin/ldconfig
+-
+-
+-%clean
+-rm -rf %{buildroot}
+-
+ %files
+-%defattr(644,root,root,755)
++%license COPYING LICENSE.TXT
+
+-%doc AUTHORS ChangeLog COPYING README.md LICENSE.TXT NEWS INSTALL LICENSE.TXT
++%doc AUTHORS ChangeLog README.md NEWS
+
+-%attr(755,-,-) %{_libdir}/*.so*
++%{_libdir}/libIP2Location.so.1
++%{_libdir}/libIP2Location.so.1.0.0
+
+-%attr(755,-,-) %{_datadir}/%{name}/tools/*
++%{_datadir}/%{name}/tools/
+
+ %dir %{_datadir}/%{name}/
+
+
+ %files devel
+-%defattr(-,root,root)
+-%{_includedir}/*
++%{_includedir}/IP2Loc*.h
++%{_libdir}/libIP2Location.so
+
+ %doc Developers_Guide.txt
+
+
+ %changelog
++* Fri Aug 28 2020 Peter Bieringer <pb@bieringer.de>
++- fix spec file according to BZ#1873302
++
++* Sat Oct 5 2019 Peter Bieringer <pb@bieringer.de> - 8.0.9-5
++- update version to 8.0.9
++
+ * Sun Feb 26 2017 Peter Bieringer <pb@bieringer.de> - 8.0.4-5
+ - update to 8.0.4
+ - add some fixes related to move to github
+diff --git a/contrib/IP2Location.spec.in b/contrib/IP2Location.spec.in
+index b544e8a..be95898 100644
+--- a/contrib/IP2Location.spec.in
++++ b/contrib/IP2Location.spec.in
+@@ -3,12 +3,10 @@
+ Name: IP2Location
+ Summary: C library for mapping IP address to geolocation information
+ Version: %{version}
+-Release: 5%{?dist}
+-Group: System Environment/Libraries
++Release: 6%{?dist}
+ License: MIT
+ URL: http://www.ip2location.com/
+-Source0: https://github.com/chrislim2888/IP2Location-C-Library/archive/%{version}.tar.gz
+-BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
++Source0: https://github.com/chrislim2888/IP2Location-C-Library/archive/%{version}/%{name}-%{version}.tar.gz
+ BuildRequires: libtool
+
+
+@@ -26,7 +24,6 @@ the included downloader.
+
+ %package devel
+ Summary: Static library and header files for the ip2location library
+-Group: Development/C
+ Requires: %{name} = %{version}-%{release}
+ Provides: %{name}-devel = %{version}-%{release}
+
+@@ -51,63 +48,60 @@ perl -pi -e 's/-Wno-unused-result//' configure.ac
+
+ %build
+ sh ./bootstrap
+-autoreconf -fi
++autoreconf -fiv
+
+ %configure --disable-static
+-make clean
+-make %{?_smp_mflags} COPTS="$RPM_OPT_FLAGS"
++%make_build COPTS="$RPM_OPT_FLAGS"
+
+ # convert CSV to BIN
+ make -C data convert
+
++
+ %check
+ LD_LIBRARY_PATH=%{buildroot}%{_libdir}:$LD_LIBRARY_PATH make check
+
+
+ %install
+-rm -rf %{buildroot}
+-
+-make install DESTDIR=%{buildroot}
++%make_install
+
+ # cleanup
+ rm -f %{buildroot}%{_libdir}/*.*a
+
+ # tools
+ install -d %{buildroot}%{_datadir}/%{name}/tools
+-cp tools/download.pl %{buildroot}%{_datadir}/%{name}/tools
++install -pm 0755 tools/download.pl %{buildroot}%{_datadir}/%{name}/tools
+
+ # database directory
+ install -d %{buildroot}%{_datadir}/%{name}/
+
+
+-%post -p /sbin/ldconfig
+-
+-%postun -p /sbin/ldconfig
+-
+-
+-%clean
+-rm -rf %{buildroot}
+-
+ %files
+-%defattr(644,root,root,755)
++%license COPYING LICENSE.TXT
+
+-%doc AUTHORS ChangeLog COPYING README.md LICENSE.TXT NEWS INSTALL LICENSE.TXT
++%doc AUTHORS ChangeLog README.md NEWS
+
+-%attr(755,-,-) %{_libdir}/*.so*
++%{_libdir}/libIP2Location.so.1
++%{_libdir}/libIP2Location.so.1.0.0
+
+-%attr(755,-,-) %{_datadir}/%{name}/tools/*
++%{_datadir}/%{name}/tools/
+
+ %dir %{_datadir}/%{name}/
+
+
+ %files devel
+-%defattr(-,root,root)
+-%{_includedir}/*
++%{_includedir}/IP2Loc*.h
++%{_libdir}/libIP2Location.so
+
+ %doc Developers_Guide.txt
+
+
+ %changelog
++* Fri Aug 28 2020 Peter Bieringer <pb@bieringer.de>
++- fix spec file according to BZ#1873302
++
++* Sat Oct 5 2019 Peter Bieringer <pb@bieringer.de> - 8.0.9-5
++- update version to 8.0.9
++
+ * Sun Feb 26 2017 Peter Bieringer <pb@bieringer.de> - 8.0.4-5
+ - update to 8.0.4
+ - add some fixes related to move to github
+diff --git a/libIP2Location/IP2Loc_DBInterface.c b/libIP2Location/IP2Loc_DBInterface.c
+index 647ea69..2130e99 100644
+--- a/libIP2Location/IP2Loc_DBInterface.c
++++ b/libIP2Location/IP2Loc_DBInterface.c
+@@ -271,9 +271,13 @@ uint32_t IP2Location_read32(FILE *handle, uint32_t position)
+ {
+ fseek(handle, position-1, 0);
+ temp = fread(&byte1, 1, 1, handle);
++ if (temp == 0) { return 0; };
+ temp = fread(&byte2, 1, 1, handle);
++ if (temp == 0) { return 0; };
+ temp = fread(&byte3, 1, 1, handle);
++ if (temp == 0) { return 0; };
+ temp = fread(&byte4, 1, 1, handle);
++ if (temp == 0) { return 0; };
+ }
+ else
+ {
+@@ -295,6 +299,7 @@ uint8_t IP2Location_read8(FILE *handle, uint32_t position)
+ {
+ fseek(handle, position-1, 0);
+ temp = fread(&ret, 1, 1, handle);
++ if (temp == 0) { return 0; };
+ }
+ else
+ {
+@@ -309,13 +314,16 @@ char *IP2Location_readStr(FILE *handle, uint32_t position)
+ char *str = 0;
+ uint8_t *cache_shm = cache_shm_ptr;
+ size_t temp;
++
+ if (DB_access_type == IP2LOCATION_FILE_IO && handle != NULL)
+ {
+ fseek(handle, position, 0);
+ temp = fread(&size, 1, 1, handle);
++ if (temp == 0) { return ""; };
+ str = (char *)malloc(size+1);
+ memset(str, 0, size+1);
+ temp = fread(str, size, 1, handle);
++ if (temp == 0) { return ""; };
+ }
+ else
+ {
+@@ -341,9 +349,13 @@ float IP2Location_readFloat(FILE *handle, uint32_t position)
+ {
+ fseek(handle, position-1, 0);
+ temp = fread(p+3, 1, 1, handle);
++ if (temp == 0) { return 0.0; };
+ temp = fread(p+2, 1, 1, handle);
++ if (temp == 0) { return 0.0; };
+ temp = fread(p+1, 1, 1, handle);
++ if (temp == 0) { return 0.0; };
+ temp = fread(p, 1, 1, handle);
++ if (temp == 0) { return 0.0; };
+ }
+ else
+ {
+@@ -357,6 +369,7 @@ float IP2Location_readFloat(FILE *handle, uint32_t position)
+ {
+ fseek(handle, position-1, 0);
+ temp = fread(&ret, 4, 1, handle);
++ if (temp == 0) { return 0.0; };
+ }
+ else
+ {
+@@ -365,5 +378,3 @@ float IP2Location_readFloat(FILE *handle, uint32_t position)
+ #endif
+ return ret;
+ }
+-
+-
+diff --git a/libIP2Location/IP2Location.c b/libIP2Location/IP2Location.c
+index fbe7fe0..a036580 100644
+--- a/libIP2Location/IP2Location.c
++++ b/libIP2Location/IP2Location.c
+@@ -61,7 +61,6 @@ uint8_t USAGETYPE_POSITION[25] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ static int IP2Location_initialize(IP2Location *loc);
+ static IP2LocationRecord *IP2Location_new_record();
+ static uint32_t IP2Location_ip2no(char* ip);
+-static struct in6_addr_local IP2Location_ipv6_to_no(char* ipaddr);
+ static int IP2Location_ip_is_ipv4 (char* ipaddr);
+ static int IP2Location_ip_is_ipv6 (char* ipaddr);
+ static IP2LocationRecord *IP2Location_get_record(IP2Location *loc, char *ip, uint32_t mode);
+@@ -151,8 +150,8 @@ static int IP2Location_initialize(IP2Location *loc)
+ loc->ipv6databasecount = IP2Location_read32(loc->filehandle, 14);
+ loc->ipv6databaseaddr = IP2Location_read32(loc->filehandle, 18);
+
+- loc->ipv4indexbaseaddr = IP2Location_read32(loc->filehandle, 22);
+- loc->ipv6indexbaseaddr = IP2Location_read32(loc->filehandle, 26);
++ loc->ipv4indexbaseaddr = IP2Location_read32(loc->filehandle, 22);
++ loc->ipv6indexbaseaddr = IP2Location_read32(loc->filehandle, 26);
+
+ return 0;
+ }
+@@ -381,47 +380,77 @@ static IP2LocationRecord *IP2Location_read_record(IP2Location *loc, uint32_t row
+
+ if ((mode & COUNTRYSHORT) && (COUNTRY_POSITION[dbtype] != 0))
+ {
+- record->country_short = IP2Location_readStr(handle, IP2Location_read32(handle, rowaddr + 4 * (COUNTRY_POSITION[dbtype]-1)));
++ if (!record->country_short)
++ {
++ record->country_short = IP2Location_readStr(handle, IP2Location_read32(handle, rowaddr + 4 * (COUNTRY_POSITION[dbtype]-1)));
++ }
+ }
+ else
+ {
+- record->country_short = strdup(NOT_SUPPORTED);
++ if (!record->country_short)
++ {
++ record->country_short = strdup(NOT_SUPPORTED);
++ }
+ }
+
+ if ((mode & COUNTRYLONG) && (COUNTRY_POSITION[dbtype] != 0))
+ {
+- record->country_long = IP2Location_readStr(handle, IP2Location_read32(handle, rowaddr + 4 * (COUNTRY_POSITION[dbtype]-1))+3);
++ if (!record->country_long)
++ {
++ record->country_long = IP2Location_readStr(handle, IP2Location_read32(handle, rowaddr + 4 * (COUNTRY_POSITION[dbtype]-1))+3);
++ }
+ }
+ else
+ {
+- record->country_long = strdup(NOT_SUPPORTED);
++ if (!record->country_long)
++ {
++ record->country_long = strdup(NOT_SUPPORTED);
++ }
+ }
+
+ if ((mode & REGION) && (REGION_POSITION[dbtype] != 0))
+ {
+- record->region = IP2Location_readStr(handle, IP2Location_read32(handle, rowaddr + 4 * (REGION_POSITION[dbtype]-1)));
++ if (!record->region)
++ {
++ record->region = IP2Location_readStr(handle, IP2Location_read32(handle, rowaddr + 4 * (REGION_POSITION[dbtype]-1)));
++ }
+ }
+ else
+ {
+- record->region = strdup(NOT_SUPPORTED);
++ if (!record->region)
++ {
++ record->region = strdup(NOT_SUPPORTED);
++ }
+ }
+
+ if ((mode & CITY) && (CITY_POSITION[dbtype] != 0))
+ {
+- record->city = IP2Location_readStr(handle, IP2Location_read32(handle, rowaddr + 4 * (CITY_POSITION[dbtype]-1)));
++ if (!record->city)
++ {
++ record->city = IP2Location_readStr(handle, IP2Location_read32(handle, rowaddr + 4 * (CITY_POSITION[dbtype]-1)));
++ }
+ }
+ else
+ {
+- record->city = strdup(NOT_SUPPORTED);
++ if (!record->city)
++ {
++ record->city = strdup(NOT_SUPPORTED);
++ }
+ }
+
+ if ((mode & ISP) && (ISP_POSITION[dbtype] != 0))
+ {
+- record->isp = IP2Location_readStr(handle, IP2Location_read32(handle, rowaddr + 4 * (ISP_POSITION[dbtype]-1)));
++ if (!record->isp)
++ {
++ record->isp = IP2Location_readStr(handle, IP2Location_read32(handle, rowaddr + 4 * (ISP_POSITION[dbtype]-1)));
++ }
+ }
+ else
+ {
+- record->isp = strdup(NOT_SUPPORTED);
++ if (!record->isp)
++ {
++ record->isp = strdup(NOT_SUPPORTED);
++ }
+ }
+
+ if ((mode & LATITUDE) && (LATITUDE_POSITION[dbtype] != 0))
+@@ -444,108 +473,174 @@ static IP2LocationRecord *IP2Location_read_record(IP2Location *loc, uint32_t row
+
+ if ((mode & DOMAIN_) && (DOMAIN_POSITION[dbtype] != 0))
+ {
+- record->domain = IP2Location_readStr(handle, IP2Location_read32(handle, rowaddr + 4 * (DOMAIN_POSITION[dbtype]-1)));
++ if (!record->domain)
++ {
++ record->domain = IP2Location_readStr(handle, IP2Location_read32(handle, rowaddr + 4 * (DOMAIN_POSITION[dbtype]-1)));
++ }
+ }
+ else
+ {
+- record->domain = strdup(NOT_SUPPORTED);
++ if (!record->domain)
++ {
++ record->domain = strdup(NOT_SUPPORTED);
++ }
+ }
+
+ if ((mode & ZIPCODE) && (ZIPCODE_POSITION[dbtype] != 0))
+ {
+- record->zipcode = IP2Location_readStr(handle, IP2Location_read32(handle, rowaddr + 4 * (ZIPCODE_POSITION[dbtype]-1)));
++ if (!record->zipcode)
++ {
++ record->zipcode = IP2Location_readStr(handle, IP2Location_read32(handle, rowaddr + 4 * (ZIPCODE_POSITION[dbtype]-1)));
++ }
+ }
+ else
+ {
+- record->zipcode = strdup(NOT_SUPPORTED);
++ if (!record->zipcode)
++ {
++ record->zipcode = strdup(NOT_SUPPORTED);
++ }
+ }
+
+ if ((mode & TIMEZONE) && (TIMEZONE_POSITION[dbtype] != 0))
+ {
+- record->timezone = IP2Location_readStr(handle, IP2Location_read32(handle, rowaddr + 4 * (TIMEZONE_POSITION[dbtype]-1)));
++ if (!record->timezone)
++ {
++ record->timezone = IP2Location_readStr(handle, IP2Location_read32(handle, rowaddr + 4 * (TIMEZONE_POSITION[dbtype]-1)));
++ }
+ }
+ else
+ {
+- record->timezone = strdup(NOT_SUPPORTED);
++ if (!record->timezone)
++ {
++ record->timezone = strdup(NOT_SUPPORTED);
++ }
+ }
+
+ if ((mode & NETSPEED) && (NETSPEED_POSITION[dbtype] != 0))
+ {
+- record->netspeed = IP2Location_readStr(handle, IP2Location_read32(handle, rowaddr + 4 * (NETSPEED_POSITION[dbtype]-1)));
++ if (!record->netspeed)
++ {
++ record->netspeed = IP2Location_readStr(handle, IP2Location_read32(handle, rowaddr + 4 * (NETSPEED_POSITION[dbtype]-1)));
++ }
+ }
+ else
+ {
+- record->netspeed = strdup(NOT_SUPPORTED);
++ if (!record->netspeed)
++ {
++ record->netspeed = strdup(NOT_SUPPORTED);
++ }
+ }
+
+ if ((mode & IDDCODE) && (IDDCODE_POSITION[dbtype] != 0))
+ {
+- record->iddcode = IP2Location_readStr(handle, IP2Location_read32(handle, rowaddr + 4 * (IDDCODE_POSITION[dbtype]-1)));
++ if (!record->iddcode)
++ {
++ record->iddcode = IP2Location_readStr(handle, IP2Location_read32(handle, rowaddr + 4 * (IDDCODE_POSITION[dbtype]-1)));
++ }
+ }
+ else
+ {
+- record->iddcode = strdup(NOT_SUPPORTED);
++ if (!record->iddcode)
++ {
++ record->iddcode = strdup(NOT_SUPPORTED);
++ }
+ }
+
+ if ((mode & AREACODE) && (AREACODE_POSITION[dbtype] != 0))
+ {
+- record->areacode = IP2Location_readStr(handle, IP2Location_read32(handle, rowaddr + 4 * (AREACODE_POSITION[dbtype]-1)));
++ if (!record->areacode)
++ {
++ record->areacode = IP2Location_readStr(handle, IP2Location_read32(handle, rowaddr + 4 * (AREACODE_POSITION[dbtype]-1)));
++ }
+ }
+ else
+ {
+- record->areacode = strdup(NOT_SUPPORTED);
++ if (!record->areacode)
++ {
++ record->areacode = strdup(NOT_SUPPORTED);
++ }
+ }
+
+ if ((mode & WEATHERSTATIONCODE) && (WEATHERSTATIONCODE_POSITION[dbtype] != 0))
+ {
+- record->weatherstationcode = IP2Location_readStr(handle, IP2Location_read32(handle, rowaddr + 4 * (WEATHERSTATIONCODE_POSITION[dbtype]-1)));
++ if (!record->weatherstationcode)
++ {
++ record->weatherstationcode = IP2Location_readStr(handle, IP2Location_read32(handle, rowaddr + 4 * (WEATHERSTATIONCODE_POSITION[dbtype]-1)));
++ }
+ }
+ else
+ {
+- record->weatherstationcode = strdup(NOT_SUPPORTED);
++ if (!record->weatherstationcode)
++ {
++ record->weatherstationcode = strdup(NOT_SUPPORTED);
++ }
+ }
+
+ if ((mode & WEATHERSTATIONNAME) && (WEATHERSTATIONNAME_POSITION[dbtype] != 0))
+ {
+- record->weatherstationname = IP2Location_readStr(handle, IP2Location_read32(handle, rowaddr + 4 * (WEATHERSTATIONNAME_POSITION[dbtype]-1)));
++ if (!record->weatherstationname)
++ {
++ record->weatherstationname = IP2Location_readStr(handle, IP2Location_read32(handle, rowaddr + 4 * (WEATHERSTATIONNAME_POSITION[dbtype]-1)));
++ }
+ }
+ else
+ {
+- record->weatherstationname = strdup(NOT_SUPPORTED);
++ if (!record->weatherstationname)
++ {
++ record->weatherstationname = strdup(NOT_SUPPORTED);
++ }
+ }
+
+ if ((mode & MCC) && (MCC_POSITION[dbtype] != 0))
+ {
+- record->mcc = IP2Location_readStr(handle, IP2Location_read32(handle, rowaddr + 4 * (MCC_POSITION[dbtype]-1)));
++ if (!record->mcc)
++ {
++ record->mcc = IP2Location_readStr(handle, IP2Location_read32(handle, rowaddr + 4 * (MCC_POSITION[dbtype]-1)));
++ }
+ }
+ else
+ {
+- record->mcc = strdup(NOT_SUPPORTED);
++ if (!record->mcc)
++ {
++ record->mcc = strdup(NOT_SUPPORTED);
++ }
+ }
+
+ if ((mode & MNC) && (MNC_POSITION[dbtype] != 0))
+ {
+- record->mnc = IP2Location_readStr(handle, IP2Location_read32(handle, rowaddr + 4 * (MNC_POSITION[dbtype]-1)));
++ if (!record->mnc)
++ {
++ record->mnc = IP2Location_readStr(handle, IP2Location_read32(handle, rowaddr + 4 * (MNC_POSITION[dbtype]-1)));
++ }
+ }
+ else
+ {
+- record->mnc = strdup(NOT_SUPPORTED);
++ if (!record->mnc)
++ {
++ record->mnc = strdup(NOT_SUPPORTED);
++ }
+ }
+
+ if ((mode & MOBILEBRAND) && (MOBILEBRAND_POSITION[dbtype] != 0))
+ {
+- record->mobilebrand = IP2Location_readStr(handle, IP2Location_read32(handle, rowaddr + 4 * (MOBILEBRAND_POSITION[dbtype]-1)));
++ if (!record->mobilebrand)
++ {
++ record->mobilebrand = IP2Location_readStr(handle, IP2Location_read32(handle, rowaddr + 4 * (MOBILEBRAND_POSITION[dbtype]-1)));
++ }
+ }
+ else
+ {
+- record->mobilebrand = strdup(NOT_SUPPORTED);
++ if (!record->mobilebrand)
++ {
++ record->mobilebrand = strdup(NOT_SUPPORTED);
++ }
+ }
+
+ if ((mode & ELEVATION) && (ELEVATION_POSITION[dbtype] != 0))
+ {
+ char *mem = IP2Location_readStr(handle, IP2Location_read32(handle, rowaddr + 4 * (ELEVATION_POSITION[dbtype]-1)));
+- record->elevation = atof(mem);
+- free(mem);
++ record->elevation = atof(mem);
++ free(mem);
+ }
+ else
+ {
+@@ -554,11 +649,17 @@ static IP2LocationRecord *IP2Location_read_record(IP2Location *loc, uint32_t row
+
+ if ((mode & USAGETYPE) && (USAGETYPE_POSITION[dbtype] != 0))
+ {
+- record->usagetype = IP2Location_readStr(handle, IP2Location_read32(handle, rowaddr + 4 * (USAGETYPE_POSITION[dbtype]-1)));
++ if (!record->usagetype)
++ {
++ record->usagetype = IP2Location_readStr(handle, IP2Location_read32(handle, rowaddr + 4 * (USAGETYPE_POSITION[dbtype]-1)));
++ }
+ }
+ else
+ {
+- record->usagetype = strdup(NOT_SUPPORTED);
++ if (!record->usagetype)
++ {
++ record->usagetype = strdup(NOT_SUPPORTED);
++ }
+ }
+ return record;
+ }
+@@ -658,7 +759,7 @@ static IP2LocationRecord *IP2Location_get_ipv4_record(IP2Location *loc, char *ip
+ {
+ mid = (uint32_t)((low + high) >> 1);
+ ipfrom = IP2Location_read32(handle, baseaddr + mid * dbcolumn * 4);
+- ipto = IP2Location_read32(handle, baseaddr + (mid + 1) * dbcolumn * 4);
++ ipto = IP2Location_read32(handle, baseaddr + (mid + 1) * dbcolumn * 4);
+
+ if ((ipno >= ipfrom) && (ipno < ipto))
+ {
+@@ -683,17 +784,17 @@ static IP2LocationRecord *IP2Location_get_ipv4_record(IP2Location *loc, char *ip
+ static IP2LocationRecord *IP2Location_get_record(IP2Location *loc, char *ipstring, uint32_t mode)
+ {
+ ipv_t parsed_ipv = IP2Location_parse_addr(ipstring);
+- if (parsed_ipv.ipversion == 4)
+- {
+- //process IPv4
+- return IP2Location_get_ipv4_record(loc, ipstring, mode, parsed_ipv);
+- }
++ if (parsed_ipv.ipversion == 4)
++ {
++ //process IPv4
++ return IP2Location_get_ipv4_record(loc, ipstring, mode, parsed_ipv);
++ }
+ if (parsed_ipv.ipversion == 6)
+ {
+- //process IPv6
++ //process IPv6
+ return IP2Location_get_ipv6_record(loc, ipstring, mode, parsed_ipv);
+ }
+- else
++ else
+ {
+ return IP2Location_bad_record(INVALID_IPV4_ADDRESS);
+ }
+diff --git a/libIP2Location/IP2Location.h b/libIP2Location/IP2Location.h
+index b425362..34e9ada 100644
+--- a/libIP2Location/IP2Location.h
++++ b/libIP2Location/IP2Location.h
+@@ -56,7 +56,7 @@ extern "C" {
+ #include "IP2Loc_DBInterface.h"
+
+ /* API version changes only if functions are added (release) or changed (minor/major) */
+-#define API_VERSION 8.0.8
++#define API_VERSION 8.0.9
+
+
+ #define API_VERSION_MAJOR 8
+diff --git a/test/test-IP2Location.c b/test/test-IP2Location.c
+index f48eb3f..9ad08a2 100644
+--- a/test/test-IP2Location.c
++++ b/test/test-IP2Location.c
+@@ -38,7 +38,10 @@ int main () {
+ f = fopen("country_test_ipv4_data.txt","r");
+
+ while (fscanf(f, "%s", ipAddress) != EOF) {
+- fscanf(f, "%s", expectedCountry);
++ if (fscanf(f, "%s", expectedCountry) == EOF) {
++ printf("Unexpected EOF, input file broken: country_test_ipv6_data.txt\n");
++ return -1;
++ };
+ record = IP2Location_get_all(IP2LocationObj, ipAddress);
+ if (record != NULL) {
+ if (strcmp(expectedCountry,record->country_short) != 0) {
+@@ -86,7 +89,10 @@ int main () {
+ f = fopen("country_test_ipv6_data.txt","r");
+
+ while (fscanf(f, "%s", ipAddress) != EOF) {
+- fscanf(f, "%s", expectedCountry);
++ if (fscanf(f, "%s", expectedCountry) == EOF) {
++ printf("Unexpected EOF, input file broken: country_test_ipv6_data.txt\n");
++ return -1;
++ };
+ record = IP2Location_get_all(IP2LocationObj, ipAddress);
+ if (strcmp(expectedCountry,record->country_short) != 0) {
+ fprintf(stdout,"Test IP Address %s (Test %d) failed. We got %s but expected %s,\n",ipAddress,test_num,record->country_short,expectedCountry);
diff --git a/IP2Location-8.0.9-rpmlint.patch b/IP2Location-8.0.9-rpmlint.patch
new file mode 100644
index 0000000..dd8e038
--- /dev/null
+++ b/IP2Location-8.0.9-rpmlint.patch
@@ -0,0 +1,877 @@
+diff --git a/NEWS b/NEWS
+index e69de29..670672f 100644
+--- a/NEWS
++++ b/NEWS
+@@ -0,0 +1 @@
++2020-09-08/pbiering: package finally on Fedora buildsystem: https://koji.fedoraproject.org/koji/packageinfo?packageID=32132
+diff --git a/README b/README
+index b43a113..ce9d994 100644
+--- a/README
++++ b/README
+@@ -40,6 +40,10 @@ Sample BIN Databases
+ Download free IP2Location LITE databases at https://lite.ip2location.com
+ Download IP2Location sample databases at https://www.ip2location.com/developers
+
++Packages for Fedora/Enterprise Linux can be found here
++ https://koji.fedoraproject.org/koji/packageinfo?packageID=32132
++ https://src.fedoraproject.org/rpms/IP2Location
++
+ Support
+
+ Email: support@ip2location.com.
+diff --git a/README.md b/README.md
+index 806b3cd..a0485d7 100644
+--- a/README.md
++++ b/README.md
+@@ -52,6 +52,10 @@ If you encountered **error while loading shared libraries** in linux platform, t
+ ldconfig /usr/local/lib
+ ```
+
++# Packages for Fedora/Enterprise Linux can be found here
++https://koji.fedoraproject.org/koji/packageinfo?packageID=32132
++https://src.fedoraproject.org/rpms/IP2Location
++
+ # Support
+ Email: support@ip2location.com.
+ URL: [https://www.ip2location.com](https://www.ip2location.com)
+diff --git a/tools/download.pl b/tools/download.pl
+index 77772cf..11f0803 100644
+--- a/tools/download.pl
++++ b/tools/download.pl
+@@ -1,418 +1,418 @@
+-#!/usr/bin/perl -w
+-###############################################################################
+-# IP2Location Download Client
+-###############################################################################
+-# Perl script to download IP2Location(tm) batabase from the server.
+-# Note: User subscription login and password required.
+-#
+-# There is no warranty or guarantee conveyed by the author/copyright holder of
+-# this script. By obtaining, installing, and using this program, you agree and
+-# understand that the author and copyright holder are not responsible for any
+-# damages caused under any conditions due to the malfunction of the script(s)
+-# on your server or otherwise.
+-#
+-# REVISION HISTORY
+-# ================
+-# 1.0.0 Initial Release
+-# 1.1.0 Support IP2Location DB11 + DB12 + DB13 + DB14
+-# 1.2.0 Change URL to IP2Location.com
+-# 2.0.0 Support IP2Location DB15 + DB16 + DB17 + DB18
+-# Support IP2Proxy PX1
+-# Support Command Prompt in Windows as EXE
+-# 2.1.0 Support Proxy Server
+-# 2.2.0 Support CIDR + ACL
+-# 3.0.0 Support IP2Location DB19 + DB20
+-# 3.1.0 Support New Web Site Structure
+-# 4.0.0 Support DB21 + DB22 + DB23 + DB24
+-# Support Download via SSL
+-# Support LITE DBs.
+-# 5.0.0 Support DB1-DB24 IPV6
+-# Support LITE IPV6
+-# Update New Download URL
+-# 6.0.0 Support IP2Proxy PX2-PX4
+-# Support -showall switch
+-# 7.0.0 Support IP2Proxy PX1BIN-PX4BIN
+-# Support LITE ASN
+-#
+-# Copyright (C) 2005-2017 IP2Location.com. All rights reserved.
+-#
+-###############################################################################
+-use strict;
+-use Getopt::Long;
+-$|++;
+-eval("use LWP;"); die "[ERROR] LWP library required.\n" if $@;
+-
+-my $VERSION = "7.0.0";
+-my $opt_package = "";
+-my $opt_login = "";
+-my $opt_password = "";
+-my $opt_output = "";
+-my $opt_proxy = "";
+-my $help = 0;
+-my $ssl = 0;
+-my $showall = 0;
+-
+-my $result = GetOptions('package=s' => \$opt_package,
+- 'login:s' => \$opt_login,
+- 'password:s' => \$opt_password,
+- 'output:s' => \$opt_output,
+- 'proxy:s' => \$opt_proxy,
+- 'help' => \$help,
+- 'showall' => \$showall,
+- 'ssl' => \$ssl);
+-
+-if ($help) {
+- &print_help;
+- exit(0);
+-}
+-
+-if ($showall) {
+- &print_showall;
+- exit(0);
+-}
+-
+-my $final_data = "";
+-my $total_size = 0;
+-my $expiry_date = "";
+-my $database_version = "";
+-my $https = ($ssl) ? 's' : '';
+-
+-my $urlversion = "http" . $https . "://www.ip2location.com/downloads/downloaderversion.txt";
+-my $urlinfo = "http" . $https . "://www.ip2location.com/download-info";
+-my $url = "http" . $https . "://www.ip2location.com/download";
+-
+-my $login = '';
+-my $password = '';
+-my $filename = '';
+-my $output = '';
+-my $package = '';
+-my $proxy = '';
+-
+-if ($opt_package ne "") {
+- $package = $opt_package;
+-} else {
+- &print_help;
+- print "[Error] Missing -package command line switch or parameter.\n";
+- exit(0);
+-}
+-
+-if ($opt_login ne "") {
+- $login = $opt_login;
+-} else {
+- &print_help;
+- print "[Error] Missing -login command line switch or parameter.\n";
+- exit(0);
+-}
+-
+-if ($opt_password ne "") {
+- $password = $opt_password;
+-} else {
+- &print_help;
+- print "[Error] Missing -password command line switch or parameter.\n";
+- exit(0);
+-}
+-
+-if ($opt_proxy ne "") {
+- $proxy = lc($opt_proxy);
+-}
+-
+-$package = uc($package);
+-
+-if ($package eq "DB1") { $filename = "IPCountry-FULL.zip"; $output = "IP-COUNTRY-FULL.ZIP"; }
+-elsif ($package eq "DB2") { $filename = "IPISP-FULL.zip"; $output = "IP-COUNTRY-ISP-FULL.ZIP"; }
+-elsif ($package eq "DB3") { $filename = "IP-COUNTRY-REGION-CITY-FULL.ZIP"; $output = $filename; }
+-elsif ($package eq "DB4") { $filename = "IP-COUNTRY-REGION-CITY-ISP-FULL.ZIP"; $output = $filename; }
+-elsif ($package eq "DB5") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-FULL.ZIP"; $output = $filename; }
+-elsif ($package eq "DB6") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ISP-FULL.ZIP"; $output = $filename; }
+-elsif ($package eq "DB7") { $filename = "IP-COUNTRY-REGION-CITY-ISP-DOMAIN-FULL.ZIP"; $output = $filename; }
+-elsif ($package eq "DB8") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ISP-DOMAIN-FULL.ZIP"; $output = $filename; }
+-elsif ($package eq "DB9") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-FULL.ZIP"; $output = $filename; }
+-elsif ($package eq "DB10") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-ISP-DOMAIN-FULL.ZIP"; $output = $filename; }
+-elsif ($package eq "DB11") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-FULL.ZIP"; $output = $filename; }
+-elsif ($package eq "DB12") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-FULL.ZIP"; $output = $filename; }
+-elsif ($package eq "DB13") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-TIMEZONE-NETSPEED-FULL.ZIP"; $output = $filename; }
+-elsif ($package eq "DB14") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-FULL.ZIP"; $output = $filename; }
+-elsif ($package eq "DB15") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-AREACODE-FULL.ZIP"; $output = $filename; }
+-elsif ($package eq "DB16") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE-FULL.ZIP"; $output = $filename; }
+-elsif ($package eq "DB17") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-TIMEZONE-NETSPEED-WEATHER-FULL.ZIP"; $output = $filename; }
+-elsif ($package eq "DB18") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE-WEATHER-FULL.ZIP"; $output = $filename; }
+-elsif ($package eq "DB19") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ISP-DOMAIN-MOBILE-FULL.ZIP"; $output = $filename; }
+-elsif ($package eq "DB20") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE-WEATHER-MOBILE-FULL.ZIP"; $output = $filename; }
+-elsif ($package eq "DB21") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-AREACODE-ELEVATION-FULL.ZIP"; $output = $filename; }
+-elsif ($package eq "DB22") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE-WEATHER-MOBILE-ELEVATION-FULL.ZIP"; $output = $filename; }
+-elsif ($package eq "DB23") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ISP-DOMAIN-MOBILE-USAGETYPE-FULL.ZIP"; $output = $filename; }
+-elsif ($package eq "DB24") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE-WEATHER-MOBILE-ELEVATION-USAGETYPE-FULL.ZIP"; $output = $filename; }
+-elsif ($package eq "DB1BIN") { $filename = "IP-COUNTRY.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB2BIN") { $filename = "IP-COUNTRY-ISP.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB3BIN") { $filename = "IP-COUNTRY-REGION-CITY.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB4BIN") { $filename = "IP-COUNTRY-REGION-CITY-ISP.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB5BIN") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB6BIN") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ISP.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB7BIN") { $filename = "IP-COUNTRY-REGION-CITY-ISP-DOMAIN.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB8BIN") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ISP-DOMAIN.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB9BIN") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB10BIN") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-ISP-DOMAIN.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB11BIN") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB12BIN") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB13BIN") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-TIMEZONE-NETSPEED.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB14BIN") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB15BIN") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-AREACODE.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB16BIN") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB17BIN") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-TIMEZONE-NETSPEED-WEATHER.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB18BIN") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE-WEATHER.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB19BIN") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ISP-DOMAIN-MOBILE.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB20BIN") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE-WEATHER-MOBILE.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB21BIN") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-AREACODE-ELEVATION.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB22BIN") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE-WEATHER-MOBILE-ELEVATION.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB23BIN") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ISP-DOMAIN-MOBILE-USAGETYPE.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB24BIN") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE-WEATHER-MOBILE-ELEVATION-USAGETYPE.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB1CIDR") { $filename = "IP2LOCATION-IP-COUNTRY-CIDR.ZIP"; $output = $filename; }
+-elsif ($package eq "DB1ACL") { $filename = "IP2LOCATION-IP-COUNTRY-ACL.ZIP"; $output = $filename; }
+-elsif ($package eq "DB1LITE") { $filename = "IP2LOCATION-LITE-DB1.CSV.ZIP"; $output = $filename; }
+-elsif ($package eq "DB3LITE") { $filename = "IP2LOCATION-LITE-DB3.CSV.ZIP"; $output = $filename; }
+-elsif ($package eq "DB5LITE") { $filename = "IP2LOCATION-LITE-DB5.CSV.ZIP"; $output = $filename; }
+-elsif ($package eq "DB9LITE") { $filename = "IP2LOCATION-LITE-DB9.CSV.ZIP"; $output = $filename; }
+-elsif ($package eq "DB11LITE") { $filename = "IP2LOCATION-LITE-DB11.CSV.ZIP"; $output = $filename; }
+-elsif ($package eq "DB1LITEBIN") { $filename = "IP2LOCATION-LITE-DB1.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB3LITEBIN") { $filename = "IP2LOCATION-LITE-DB3.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB5LITEBIN") { $filename = "IP2LOCATION-LITE-DB5.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB9LITEBIN") { $filename = "IP2LOCATION-LITE-DB9.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB11LITEBIN") { $filename = "IP2LOCATION-LITE-DB11.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB1IPV6") { $filename = "IPV6-COUNTRY.CSV.ZIP"; $output = $filename; }
+-elsif ($package eq "DB2IPV6") { $filename = "IPV6-COUNTRY-ISP.CSV.ZIP"; $output = $filename; }
+-elsif ($package eq "DB3IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY.CSV.ZIP"; $output = $filename; }
+-elsif ($package eq "DB4IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-ISP.CSV.ZIP"; $output = $filename; }
+-elsif ($package eq "DB5IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE.CSV.ZIP"; $output = $filename; }
+-elsif ($package eq "DB6IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ISP.CSV.ZIP"; $output = $filename; }
+-elsif ($package eq "DB7IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-ISP-DOMAIN.CSV.ZIP"; $output = $filename; }
+-elsif ($package eq "DB8IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ISP-DOMAIN.CSV.ZIP"; $output = $filename; }
+-elsif ($package eq "DB9IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE.CSV.ZIP"; $output = $filename; }
+-elsif ($package eq "DB10IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-ISP-DOMAIN.CSV.ZIP"; $output = $filename; }
+-elsif ($package eq "DB11IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE.CSV.ZIP"; $output = $filename; }
+-elsif ($package eq "DB12IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN.CSV.ZIP"; $output = $filename; }
+-elsif ($package eq "DB13IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-TIMEZONE-NETSPEED.CSV.ZIP"; $output = $filename; }
+-elsif ($package eq "DB14IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED.CSV.ZIP"; $output = $filename; }
+-elsif ($package eq "DB15IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-AREACODE.CSV.ZIP"; $output = $filename; }
+-elsif ($package eq "DB16IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE.CSV.ZIP"; $output = $filename; }
+-elsif ($package eq "DB17IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-TIMEZONE-NETSPEED-WEATHER.CSV.ZIP"; $output = $filename; }
+-elsif ($package eq "DB18IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE-WEATHER.CSV.ZIP"; $output = $filename; }
+-elsif ($package eq "DB19IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ISP-DOMAIN-MOBILE.CSV.ZIP"; $output = $filename; }
+-elsif ($package eq "DB20IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE-WEATHER-MOBILE.CSV.ZIP"; $output = $filename; }
+-elsif ($package eq "DB21IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-AREACODE-ELEVATION.CSV.ZIP"; $output = $filename; }
+-elsif ($package eq "DB22IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE-WEATHER-MOBILE-ELEVATION.CSV.ZIP"; $output = $filename; }
+-elsif ($package eq "DB23IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ISP-DOMAIN-MOBILE-USAGETYPE.CSV.ZIP"; $output = $filename; }
+-elsif ($package eq "DB24IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE-WEATHER-MOBILE-ELEVATION-USAGETYPE.CSV.ZIP"; $output = $filename; }
+-elsif ($package eq "DB1BINIPV6") { $filename = "IPV6-COUNTRY.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB2BINIPV6") { $filename = "IPV6-COUNTRY-ISP.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB3BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB4BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-ISP.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB5BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB6BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ISP.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB7BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-ISP-DOMAIN.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB8BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ISP-DOMAIN.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB9BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB10BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-ISP-DOMAIN.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB11BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB12BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB13BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-TIMEZONE-NETSPEED.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB14BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB15BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-AREACODE.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB16BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB17BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-TIMEZONE-NETSPEED-WEATHER.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB18BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE-WEATHER.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB19BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ISP-DOMAIN-MOBILE.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB20BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE-WEATHER-MOBILE.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB21BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-AREACODE-ELEVATION.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB22BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE-WEATHER-MOBILE-ELEVATION.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB23BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ISP-DOMAIN-MOBILE-USAGETYPE.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB24BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE-WEATHER-MOBILE-ELEVATION-USAGETYPE.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB1LITEIPV6") { $filename = "IP2LOCATION-LITE-DB1-IPV6.CSV.ZIP"; $output = $filename; }
+-elsif ($package eq "DB3LITEIPV6") { $filename = "IP2LOCATION-LITE-DB3-IPV6.CSV.ZIP"; $output = $filename; }
+-elsif ($package eq "DB5LITEIPV6") { $filename = "IP2LOCATION-LITE-DB5-IPV6.CSV.ZIP"; $output = $filename; }
+-elsif ($package eq "DB9LITEIPV6") { $filename = "IP2LOCATION-LITE-DB9-IPV6.CSV.ZIP"; $output = $filename; }
+-elsif ($package eq "DB11LITEIPV6") { $filename = "IP2LOCATION-LITE-DB11-IPV6.CSV.ZIP"; $output = $filename; }
+-elsif ($package eq "DB1LITEBINIPV6") { $filename = "IP2LOCATION-LITE-DB1-IPV6.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB3LITEBINIPV6") { $filename = "IP2LOCATION-LITE-DB3-IPV6.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB5LITEBINIPV6") { $filename = "IP2LOCATION-LITE-DB5-IPV6.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB9LITEBINIPV6") { $filename = "IP2LOCATION-LITE-DB9-IPV6.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DB11LITEBINIPV6") { $filename = "IP2LOCATION-LITE-DB11-IPV6.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "PX1") { $filename = "PX1-IP-COUNTRY.ZIP"; $output = $filename; }
+-elsif ($package eq "PX2") { $filename = "PX2-IP-PROXYTYPE-COUNTRY.ZIP"; $output = $filename; }
+-elsif ($package eq "PX3") { $filename = "PX3-IP-PROXYTYPE-COUNTRY-REGION-CITY.ZIP"; $output = $filename; }
+-elsif ($package eq "PX4") { $filename = "PX4-IP-PROXYTYPE-COUNTRY-REGION-CITY-ISP.ZIP"; $output = $filename; }
+-elsif ($package eq "PX1BIN") { $filename = "PX1-IP-COUNTRY.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "PX2BIN") { $filename = "PX2-IP-PROXYTYPE-COUNTRY.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "PX3BIN") { $filename = "PX3-IP-PROXYTYPE-COUNTRY-REGION-CITY.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "PX4BIN") { $filename = "PX4-IP-PROXYTYPE-COUNTRY-REGION-CITY-ISP.BIN.ZIP"; $output = $filename; }
+-elsif ($package eq "DBASNLITE") { $filename = "IP2LOCATION-LITE-ASN.ZIP"; $output = $filename; }
+-else {
+- print "[Error] Unknown -package command line parameter.";
+- exit(0);
+-}
+-
+-if ($opt_output ne "") {
+- $output = $opt_output;
+-}
+-
+-&check_info();
+-&download();
+-&check_update();
+-
+-sub check_info() {
+- my $ua;
+- my $response;
+- my $message;
+- my @data;
+- my $localpackage = $package;
+-
+- if ($package eq "DB1CIDR") {
+- $localpackage = "DB1";
+- } elsif ($package eq "DB1ACL") {
+- $localpackage = "DB1";
+- }
+-
+- $ua = LWP::UserAgent->new( );
+- if ($proxy ne "") {
+- $ua->proxy('http', $proxy);
+- }
+-
+- $response = $ua->get($urlinfo . "?email=$login\&password=$password\&productcode=$localpackage");
+- $message = $response->content();
+- @data = split(/\;/, $message);
+-
+- if (!defined($data[0])) {
+- print "[Error] No information data. Please contact support\@ip2location.com.";
+- exit(0);
+- } else {
+- if ($data[0] eq "OK") {
+- $total_size = $data[3];
+- $expiry_date = $data[1];
+- $database_version = $data[2];
+- } elsif ($data[0] eq "EXPIRED") {
+- print "[Error] This download account has been expired since $data[1]. Please visit http://www.ip2location.com to renew the subscription.";
+- exit(0);
+- } elsif ($data[0] eq "INVALID") {
+- print "[Error] Invalid account name or password.";
+- exit(0);
+- } elsif ($data[0] eq "NOPERMISSION") {
+- print "[Error] This download account could not download required database because of permission issue.";
+- exit(0);
+- } else {
+- print "[Error] Unknown issue $message. Please contact support\@ip2location.com.";
+- exit(0);
+- }
+- }
+-}
+-
+-sub download() {
+- print_header();
+- print "Downloading ", $output, " ...\n";
+-
+- my $ua;
+- my $response;
+-
+- $ua = LWP::UserAgent->new( );
+- if ($proxy ne "") {
+- $ua->proxy('http', $proxy);
+- }
+- push @{ $ua->requests_redirectable }, 'POST';
+-
+- my %form;
+-
+- $form{'login'} = $login;
+- $form{'password'} = $password;
+- $form{'btnDownload'} = "btnDownload";
+-
+- $response = $ua->post($url . "?productcode=$package", \%form, ':content_cb' => \&callback );
+-
+- if ($response->is_success) {
+- } else {
+- die "[Error] Error while downloading. ($response->status_line)";
+- }
+-
+- open OUT1, ">$output" or die "[Error] Unable to write $output to drive. Please check the file system permission or free diskspace.";
+- binmode(OUT1);
+- print OUT1 $final_data;
+- close OUT1;
+-}
+-
+-sub check_update() {
+- my $ua;
+- my $response;
+- my $message;
+- $ua = LWP::UserAgent->new();
+- if ($proxy ne "") {
+- $ua->proxy('http', $proxy);
+- }
+- $response = $ua->get($urlversion);
+- $message = $response->content();
+-
+- my $thisversion = $VERSION;
+- $thisversion =~ s/\.//g;
+- $message =~ s/\.//g;
+-
+- if ($message > $thisversion) {
+- print "[IMPORTANT] New script version detected. Please download the latest version from http://www.ip2location.com/downloads/ip2location-downloader.zip";
+- }
+-}
+-
+-sub callback {
+- my ($data, $response, $protocol) = @_;
+- $final_data .= $data;
+- print progress_bar( length($final_data), $total_size, 25, '=' );
+-}
+-
+-sub progress_bar {
+- my ( $got, $total, $width, $char ) = @_;
+- $width ||= 25; $char ||= '=';
+- my $num_width = length($total);
+- sprintf "|%-${width}s| Got %${num_width}s bytes of %s (%.2f%%)\r",
+- $char x (($width-1)*$got/$total). '>',
+- $got, $total, 100*$got/+$total;
+-}
+-
+-sub print_help {
+- print_header();
+- print <<HELP
+-This program download the latest database from IP2Location.com.
+-
+-Command Line Syntax:
+-$0 -package <package> -login <login> -password <password>
+- -output <output> -proxy <proxy_server> -ssl
+-
+- package - Database Package (Example: DB1, DB1BIN, DB1IPV6, DB1BINIPV6,
+- DB1LITE, DB1LITEBIN, DB1LITEIPV6,
+- DB1LITEBINIPV6, PX1, PX1BIN or
+- DBASNLITE)
+- login - Login
+- password - Password
+- proxy - Proxy Server with Port (Optional)
+- output - Output Filename (Optional)
+- showall - Show All Package Code (Optional)
+- ssl - Download via SSL (Optional); May require additional libraries.
+-
+-Please contact support\@ip2location.com for technical support.
+-
+-HELP
+-}
+-
+-sub print_header {
+- print <<HEADER
+-------------------------------------------------------------------------
+-IP2Location Download Client (Version $VERSION)
+-http://www.ip2location.com
+-------------------------------------------------------------------------
+-HEADER
+-}
+-
+-sub print_showall {
+- print_header();
+- print <<SHOWALL
+-Below are all product codes supported by this download script.
+-
+-DB1, DB2, DB3, DB4, DB5, DB6, DB7, DB8, DB9, DB10, DB11, DB12, DB13, DB14, DB15, DB16, DB17, DB18, DB19, DB20, DB21, DB22, DB23, DB24, DB1BIN, DB2BIN, DB3BIN, DB4BIN, DB5BIN, DB6BIN, DB7BIN, DB8BIN, DB9BIN, DB10BIN, DB11BIN, DB12BIN, DB13BIN, DB14BIN, DB15BIN, DB16BIN, DB17BIN, DB18BIN, DB19BIN, DB20BIN, DB21BIN, DB22BIN, DB23BIN, DB24BIN, DB1CIDR, DB1ACL, DB1LITE, DB3LITE, DB5LITE, DB9LITE, DB11LITE, DB1LITEBIN, DB3LITEBIN, DB5LITEBIN, DB9LITEBIN, DB11LITEBIN, DB1IPV6, DB2IPV6, DB3IPV6, DB4IPV6, DB5IPV6, DB6IPV6, DB7IPV6, DB8IPV6, DB9IPV6, DB10IPV6, DB11IPV6, DB12IPV6, DB13IPV6, DB14IPV6, DB15IPV6, DB16IPV6, DB17IPV6, DB18IPV6, DB19IPV6, DB20IPV6, DB21IPV6, DB22IPV6, DB23IPV6, DB24IPV6, DB1BINIPV6, DB2BINIPV6, DB3BINIPV6, DB4BINIPV6, DB5BINIPV6, DB6BINIPV6, DB7BINIPV6, DB8BINIPV6, DB9BINIPV6, DB10BINIPV6, DB11BINIPV6, DB12BINIPV6, DB13BINIPV6, DB14BINIPV6, DB15BINIPV6, DB16BINIPV6, DB17BINIPV6, DB18BINIPV6, DB19BINIPV6, DB20BINIPV6, DB21BINIPV6, DB22BINIPV6, DB23BINIPV6, DB24BINIPV6, DB1LITEIPV6, DB3LITEIPV6, DB5LITEIPV6, DB9LITEIPV6, DB11LITEIPV6, DB1LITEBINIPV6, DB3LITEBINIPV6, DB5LITEBINIPV6, DB9LITEBINIPV6, DB11LITEBINIPV6, PX1, PX2, PX3, PX4, PX1BIN, PX2BIN, PX3BIN, PX4BIN, DBASNLITE
+-
+-Please contact support\@ip2location.com for technical support.
+-
+-SHOWALL
++#!/usr/bin/perl -w
++###############################################################################
++# IP2Location Download Client
++###############################################################################
++# Perl script to download IP2Location(tm) batabase from the server.
++# Note: User subscription login and password required.
++#
++# There is no warranty or guarantee conveyed by the author/copyright holder of
++# this script. By obtaining, installing, and using this program, you agree and
++# understand that the author and copyright holder are not responsible for any
++# damages caused under any conditions due to the malfunction of the script(s)
++# on your server or otherwise.
++#
++# REVISION HISTORY
++# ================
++# 1.0.0 Initial Release
++# 1.1.0 Support IP2Location DB11 + DB12 + DB13 + DB14
++# 1.2.0 Change URL to IP2Location.com
++# 2.0.0 Support IP2Location DB15 + DB16 + DB17 + DB18
++# Support IP2Proxy PX1
++# Support Command Prompt in Windows as EXE
++# 2.1.0 Support Proxy Server
++# 2.2.0 Support CIDR + ACL
++# 3.0.0 Support IP2Location DB19 + DB20
++# 3.1.0 Support New Web Site Structure
++# 4.0.0 Support DB21 + DB22 + DB23 + DB24
++# Support Download via SSL
++# Support LITE DBs.
++# 5.0.0 Support DB1-DB24 IPV6
++# Support LITE IPV6
++# Update New Download URL
++# 6.0.0 Support IP2Proxy PX2-PX4
++# Support -showall switch
++# 7.0.0 Support IP2Proxy PX1BIN-PX4BIN
++# Support LITE ASN
++#
++# Copyright (C) 2005-2017 IP2Location.com. All rights reserved.
++#
++###############################################################################
++use strict;
++use Getopt::Long;
++$|++;
++eval("use LWP;"); die "[ERROR] LWP library required.\n" if $@;
++
++my $VERSION = "7.0.0";
++my $opt_package = "";
++my $opt_login = "";
++my $opt_password = "";
++my $opt_output = "";
++my $opt_proxy = "";
++my $help = 0;
++my $ssl = 0;
++my $showall = 0;
++
++my $result = GetOptions('package=s' => \$opt_package,
++ 'login:s' => \$opt_login,
++ 'password:s' => \$opt_password,
++ 'output:s' => \$opt_output,
++ 'proxy:s' => \$opt_proxy,
++ 'help' => \$help,
++ 'showall' => \$showall,
++ 'ssl' => \$ssl);
++
++if ($help) {
++ &print_help;
++ exit(0);
++}
++
++if ($showall) {
++ &print_showall;
++ exit(0);
++}
++
++my $final_data = "";
++my $total_size = 0;
++my $expiry_date = "";
++my $database_version = "";
++my $https = ($ssl) ? 's' : '';
++
++my $urlversion = "http" . $https . "://www.ip2location.com/downloads/downloaderversion.txt";
++my $urlinfo = "http" . $https . "://www.ip2location.com/download-info";
++my $url = "http" . $https . "://www.ip2location.com/download";
++
++my $login = '';
++my $password = '';
++my $filename = '';
++my $output = '';
++my $package = '';
++my $proxy = '';
++
++if ($opt_package ne "") {
++ $package = $opt_package;
++} else {
++ &print_help;
++ print "[Error] Missing -package command line switch or parameter.\n";
++ exit(0);
++}
++
++if ($opt_login ne "") {
++ $login = $opt_login;
++} else {
++ &print_help;
++ print "[Error] Missing -login command line switch or parameter.\n";
++ exit(0);
++}
++
++if ($opt_password ne "") {
++ $password = $opt_password;
++} else {
++ &print_help;
++ print "[Error] Missing -password command line switch or parameter.\n";
++ exit(0);
++}
++
++if ($opt_proxy ne "") {
++ $proxy = lc($opt_proxy);
++}
++
++$package = uc($package);
++
++if ($package eq "DB1") { $filename = "IPCountry-FULL.zip"; $output = "IP-COUNTRY-FULL.ZIP"; }
++elsif ($package eq "DB2") { $filename = "IPISP-FULL.zip"; $output = "IP-COUNTRY-ISP-FULL.ZIP"; }
++elsif ($package eq "DB3") { $filename = "IP-COUNTRY-REGION-CITY-FULL.ZIP"; $output = $filename; }
++elsif ($package eq "DB4") { $filename = "IP-COUNTRY-REGION-CITY-ISP-FULL.ZIP"; $output = $filename; }
++elsif ($package eq "DB5") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-FULL.ZIP"; $output = $filename; }
++elsif ($package eq "DB6") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ISP-FULL.ZIP"; $output = $filename; }
++elsif ($package eq "DB7") { $filename = "IP-COUNTRY-REGION-CITY-ISP-DOMAIN-FULL.ZIP"; $output = $filename; }
++elsif ($package eq "DB8") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ISP-DOMAIN-FULL.ZIP"; $output = $filename; }
++elsif ($package eq "DB9") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-FULL.ZIP"; $output = $filename; }
++elsif ($package eq "DB10") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-ISP-DOMAIN-FULL.ZIP"; $output = $filename; }
++elsif ($package eq "DB11") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-FULL.ZIP"; $output = $filename; }
++elsif ($package eq "DB12") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-FULL.ZIP"; $output = $filename; }
++elsif ($package eq "DB13") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-TIMEZONE-NETSPEED-FULL.ZIP"; $output = $filename; }
++elsif ($package eq "DB14") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-FULL.ZIP"; $output = $filename; }
++elsif ($package eq "DB15") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-AREACODE-FULL.ZIP"; $output = $filename; }
++elsif ($package eq "DB16") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE-FULL.ZIP"; $output = $filename; }
++elsif ($package eq "DB17") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-TIMEZONE-NETSPEED-WEATHER-FULL.ZIP"; $output = $filename; }
++elsif ($package eq "DB18") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE-WEATHER-FULL.ZIP"; $output = $filename; }
++elsif ($package eq "DB19") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ISP-DOMAIN-MOBILE-FULL.ZIP"; $output = $filename; }
++elsif ($package eq "DB20") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE-WEATHER-MOBILE-FULL.ZIP"; $output = $filename; }
++elsif ($package eq "DB21") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-AREACODE-ELEVATION-FULL.ZIP"; $output = $filename; }
++elsif ($package eq "DB22") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE-WEATHER-MOBILE-ELEVATION-FULL.ZIP"; $output = $filename; }
++elsif ($package eq "DB23") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ISP-DOMAIN-MOBILE-USAGETYPE-FULL.ZIP"; $output = $filename; }
++elsif ($package eq "DB24") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE-WEATHER-MOBILE-ELEVATION-USAGETYPE-FULL.ZIP"; $output = $filename; }
++elsif ($package eq "DB1BIN") { $filename = "IP-COUNTRY.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB2BIN") { $filename = "IP-COUNTRY-ISP.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB3BIN") { $filename = "IP-COUNTRY-REGION-CITY.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB4BIN") { $filename = "IP-COUNTRY-REGION-CITY-ISP.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB5BIN") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB6BIN") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ISP.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB7BIN") { $filename = "IP-COUNTRY-REGION-CITY-ISP-DOMAIN.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB8BIN") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ISP-DOMAIN.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB9BIN") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB10BIN") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-ISP-DOMAIN.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB11BIN") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB12BIN") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB13BIN") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-TIMEZONE-NETSPEED.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB14BIN") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB15BIN") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-AREACODE.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB16BIN") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB17BIN") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-TIMEZONE-NETSPEED-WEATHER.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB18BIN") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE-WEATHER.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB19BIN") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ISP-DOMAIN-MOBILE.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB20BIN") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE-WEATHER-MOBILE.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB21BIN") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-AREACODE-ELEVATION.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB22BIN") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE-WEATHER-MOBILE-ELEVATION.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB23BIN") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ISP-DOMAIN-MOBILE-USAGETYPE.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB24BIN") { $filename = "IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE-WEATHER-MOBILE-ELEVATION-USAGETYPE.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB1CIDR") { $filename = "IP2LOCATION-IP-COUNTRY-CIDR.ZIP"; $output = $filename; }
++elsif ($package eq "DB1ACL") { $filename = "IP2LOCATION-IP-COUNTRY-ACL.ZIP"; $output = $filename; }
++elsif ($package eq "DB1LITE") { $filename = "IP2LOCATION-LITE-DB1.CSV.ZIP"; $output = $filename; }
++elsif ($package eq "DB3LITE") { $filename = "IP2LOCATION-LITE-DB3.CSV.ZIP"; $output = $filename; }
++elsif ($package eq "DB5LITE") { $filename = "IP2LOCATION-LITE-DB5.CSV.ZIP"; $output = $filename; }
++elsif ($package eq "DB9LITE") { $filename = "IP2LOCATION-LITE-DB9.CSV.ZIP"; $output = $filename; }
++elsif ($package eq "DB11LITE") { $filename = "IP2LOCATION-LITE-DB11.CSV.ZIP"; $output = $filename; }
++elsif ($package eq "DB1LITEBIN") { $filename = "IP2LOCATION-LITE-DB1.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB3LITEBIN") { $filename = "IP2LOCATION-LITE-DB3.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB5LITEBIN") { $filename = "IP2LOCATION-LITE-DB5.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB9LITEBIN") { $filename = "IP2LOCATION-LITE-DB9.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB11LITEBIN") { $filename = "IP2LOCATION-LITE-DB11.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB1IPV6") { $filename = "IPV6-COUNTRY.CSV.ZIP"; $output = $filename; }
++elsif ($package eq "DB2IPV6") { $filename = "IPV6-COUNTRY-ISP.CSV.ZIP"; $output = $filename; }
++elsif ($package eq "DB3IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY.CSV.ZIP"; $output = $filename; }
++elsif ($package eq "DB4IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-ISP.CSV.ZIP"; $output = $filename; }
++elsif ($package eq "DB5IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE.CSV.ZIP"; $output = $filename; }
++elsif ($package eq "DB6IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ISP.CSV.ZIP"; $output = $filename; }
++elsif ($package eq "DB7IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-ISP-DOMAIN.CSV.ZIP"; $output = $filename; }
++elsif ($package eq "DB8IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ISP-DOMAIN.CSV.ZIP"; $output = $filename; }
++elsif ($package eq "DB9IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE.CSV.ZIP"; $output = $filename; }
++elsif ($package eq "DB10IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-ISP-DOMAIN.CSV.ZIP"; $output = $filename; }
++elsif ($package eq "DB11IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE.CSV.ZIP"; $output = $filename; }
++elsif ($package eq "DB12IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN.CSV.ZIP"; $output = $filename; }
++elsif ($package eq "DB13IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-TIMEZONE-NETSPEED.CSV.ZIP"; $output = $filename; }
++elsif ($package eq "DB14IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED.CSV.ZIP"; $output = $filename; }
++elsif ($package eq "DB15IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-AREACODE.CSV.ZIP"; $output = $filename; }
++elsif ($package eq "DB16IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE.CSV.ZIP"; $output = $filename; }
++elsif ($package eq "DB17IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-TIMEZONE-NETSPEED-WEATHER.CSV.ZIP"; $output = $filename; }
++elsif ($package eq "DB18IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE-WEATHER.CSV.ZIP"; $output = $filename; }
++elsif ($package eq "DB19IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ISP-DOMAIN-MOBILE.CSV.ZIP"; $output = $filename; }
++elsif ($package eq "DB20IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE-WEATHER-MOBILE.CSV.ZIP"; $output = $filename; }
++elsif ($package eq "DB21IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-AREACODE-ELEVATION.CSV.ZIP"; $output = $filename; }
++elsif ($package eq "DB22IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE-WEATHER-MOBILE-ELEVATION.CSV.ZIP"; $output = $filename; }
++elsif ($package eq "DB23IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ISP-DOMAIN-MOBILE-USAGETYPE.CSV.ZIP"; $output = $filename; }
++elsif ($package eq "DB24IPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE-WEATHER-MOBILE-ELEVATION-USAGETYPE.CSV.ZIP"; $output = $filename; }
++elsif ($package eq "DB1BINIPV6") { $filename = "IPV6-COUNTRY.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB2BINIPV6") { $filename = "IPV6-COUNTRY-ISP.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB3BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB4BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-ISP.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB5BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB6BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ISP.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB7BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-ISP-DOMAIN.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB8BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ISP-DOMAIN.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB9BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB10BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-ISP-DOMAIN.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB11BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB12BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB13BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-TIMEZONE-NETSPEED.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB14BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB15BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-AREACODE.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB16BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB17BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-TIMEZONE-NETSPEED-WEATHER.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB18BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE-WEATHER.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB19BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ISP-DOMAIN-MOBILE.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB20BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE-WEATHER-MOBILE.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB21BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-AREACODE-ELEVATION.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB22BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE-WEATHER-MOBILE-ELEVATION.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB23BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ISP-DOMAIN-MOBILE-USAGETYPE.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB24BINIPV6") { $filename = "IPV6-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE-WEATHER-MOBILE-ELEVATION-USAGETYPE.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB1LITEIPV6") { $filename = "IP2LOCATION-LITE-DB1-IPV6.CSV.ZIP"; $output = $filename; }
++elsif ($package eq "DB3LITEIPV6") { $filename = "IP2LOCATION-LITE-DB3-IPV6.CSV.ZIP"; $output = $filename; }
++elsif ($package eq "DB5LITEIPV6") { $filename = "IP2LOCATION-LITE-DB5-IPV6.CSV.ZIP"; $output = $filename; }
++elsif ($package eq "DB9LITEIPV6") { $filename = "IP2LOCATION-LITE-DB9-IPV6.CSV.ZIP"; $output = $filename; }
++elsif ($package eq "DB11LITEIPV6") { $filename = "IP2LOCATION-LITE-DB11-IPV6.CSV.ZIP"; $output = $filename; }
++elsif ($package eq "DB1LITEBINIPV6") { $filename = "IP2LOCATION-LITE-DB1-IPV6.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB3LITEBINIPV6") { $filename = "IP2LOCATION-LITE-DB3-IPV6.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB5LITEBINIPV6") { $filename = "IP2LOCATION-LITE-DB5-IPV6.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB9LITEBINIPV6") { $filename = "IP2LOCATION-LITE-DB9-IPV6.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DB11LITEBINIPV6") { $filename = "IP2LOCATION-LITE-DB11-IPV6.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "PX1") { $filename = "PX1-IP-COUNTRY.ZIP"; $output = $filename; }
++elsif ($package eq "PX2") { $filename = "PX2-IP-PROXYTYPE-COUNTRY.ZIP"; $output = $filename; }
++elsif ($package eq "PX3") { $filename = "PX3-IP-PROXYTYPE-COUNTRY-REGION-CITY.ZIP"; $output = $filename; }
++elsif ($package eq "PX4") { $filename = "PX4-IP-PROXYTYPE-COUNTRY-REGION-CITY-ISP.ZIP"; $output = $filename; }
++elsif ($package eq "PX1BIN") { $filename = "PX1-IP-COUNTRY.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "PX2BIN") { $filename = "PX2-IP-PROXYTYPE-COUNTRY.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "PX3BIN") { $filename = "PX3-IP-PROXYTYPE-COUNTRY-REGION-CITY.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "PX4BIN") { $filename = "PX4-IP-PROXYTYPE-COUNTRY-REGION-CITY-ISP.BIN.ZIP"; $output = $filename; }
++elsif ($package eq "DBASNLITE") { $filename = "IP2LOCATION-LITE-ASN.ZIP"; $output = $filename; }
++else {
++ print "[Error] Unknown -package command line parameter.";
++ exit(0);
++}
++
++if ($opt_output ne "") {
++ $output = $opt_output;
++}
++
++&check_info();
++&download();
++&check_update();
++
++sub check_info() {
++ my $ua;
++ my $response;
++ my $message;
++ my @data;
++ my $localpackage = $package;
++
++ if ($package eq "DB1CIDR") {
++ $localpackage = "DB1";
++ } elsif ($package eq "DB1ACL") {
++ $localpackage = "DB1";
++ }
++
++ $ua = LWP::UserAgent->new( );
++ if ($proxy ne "") {
++ $ua->proxy('http', $proxy);
++ }
++
++ $response = $ua->get($urlinfo . "?email=$login\&password=$password\&productcode=$localpackage");
++ $message = $response->content();
++ @data = split(/\;/, $message);
++
++ if (!defined($data[0])) {
++ print "[Error] No information data. Please contact support\@ip2location.com.";
++ exit(0);
++ } else {
++ if ($data[0] eq "OK") {
++ $total_size = $data[3];
++ $expiry_date = $data[1];
++ $database_version = $data[2];
++ } elsif ($data[0] eq "EXPIRED") {
++ print "[Error] This download account has been expired since $data[1]. Please visit http://www.ip2location.com to renew the subscription.";
++ exit(0);
++ } elsif ($data[0] eq "INVALID") {
++ print "[Error] Invalid account name or password.";
++ exit(0);
++ } elsif ($data[0] eq "NOPERMISSION") {
++ print "[Error] This download account could not download required database because of permission issue.";
++ exit(0);
++ } else {
++ print "[Error] Unknown issue $message. Please contact support\@ip2location.com.";
++ exit(0);
++ }
++ }
++}
++
++sub download() {
++ print_header();
++ print "Downloading ", $output, " ...\n";
++
++ my $ua;
++ my $response;
++
++ $ua = LWP::UserAgent->new( );
++ if ($proxy ne "") {
++ $ua->proxy('http', $proxy);
++ }
++ push @{ $ua->requests_redirectable }, 'POST';
++
++ my %form;
++
++ $form{'login'} = $login;
++ $form{'password'} = $password;
++ $form{'btnDownload'} = "btnDownload";
++
++ $response = $ua->post($url . "?productcode=$package", \%form, ':content_cb' => \&callback );
++
++ if ($response->is_success) {
++ } else {
++ die "[Error] Error while downloading. ($response->status_line)";
++ }
++
++ open OUT1, ">$output" or die "[Error] Unable to write $output to drive. Please check the file system permission or free diskspace.";
++ binmode(OUT1);
++ print OUT1 $final_data;
++ close OUT1;
++}
++
++sub check_update() {
++ my $ua;
++ my $response;
++ my $message;
++ $ua = LWP::UserAgent->new();
++ if ($proxy ne "") {
++ $ua->proxy('http', $proxy);
++ }
++ $response = $ua->get($urlversion);
++ $message = $response->content();
++
++ my $thisversion = $VERSION;
++ $thisversion =~ s/\.//g;
++ $message =~ s/\.//g;
++
++ if ($message > $thisversion) {
++ print "[IMPORTANT] New script version detected. Please download the latest version from http://www.ip2location.com/downloads/ip2location-downloader.zip";
++ }
++}
++
++sub callback {
++ my ($data, $response, $protocol) = @_;
++ $final_data .= $data;
++ print progress_bar( length($final_data), $total_size, 25, '=' );
++}
++
++sub progress_bar {
++ my ( $got, $total, $width, $char ) = @_;
++ $width ||= 25; $char ||= '=';
++ my $num_width = length($total);
++ sprintf "|%-${width}s| Got %${num_width}s bytes of %s (%.2f%%)\r",
++ $char x (($width-1)*$got/$total). '>',
++ $got, $total, 100*$got/+$total;
++}
++
++sub print_help {
++ print_header();
++ print <<HELP
++This program download the latest database from IP2Location.com.
++
++Command Line Syntax:
++$0 -package <package> -login <login> -password <password>
++ -output <output> -proxy <proxy_server> -ssl
++
++ package - Database Package (Example: DB1, DB1BIN, DB1IPV6, DB1BINIPV6,
++ DB1LITE, DB1LITEBIN, DB1LITEIPV6,
++ DB1LITEBINIPV6, PX1, PX1BIN or
++ DBASNLITE)
++ login - Login
++ password - Password
++ proxy - Proxy Server with Port (Optional)
++ output - Output Filename (Optional)
++ showall - Show All Package Code (Optional)
++ ssl - Download via SSL (Optional); May require additional libraries.
++
++Please contact support\@ip2location.com for technical support.
++
++HELP
++}
++
++sub print_header {
++ print <<HEADER
++------------------------------------------------------------------------
++IP2Location Download Client (Version $VERSION)
++http://www.ip2location.com
++------------------------------------------------------------------------
++HEADER
++}
++
++sub print_showall {
++ print_header();
++ print <<SHOWALL
++Below are all product codes supported by this download script.
++
++DB1, DB2, DB3, DB4, DB5, DB6, DB7, DB8, DB9, DB10, DB11, DB12, DB13, DB14, DB15, DB16, DB17, DB18, DB19, DB20, DB21, DB22, DB23, DB24, DB1BIN, DB2BIN, DB3BIN, DB4BIN, DB5BIN, DB6BIN, DB7BIN, DB8BIN, DB9BIN, DB10BIN, DB11BIN, DB12BIN, DB13BIN, DB14BIN, DB15BIN, DB16BIN, DB17BIN, DB18BIN, DB19BIN, DB20BIN, DB21BIN, DB22BIN, DB23BIN, DB24BIN, DB1CIDR, DB1ACL, DB1LITE, DB3LITE, DB5LITE, DB9LITE, DB11LITE, DB1LITEBIN, DB3LITEBIN, DB5LITEBIN, DB9LITEBIN, DB11LITEBIN, DB1IPV6, DB2IPV6, DB3IPV6, DB4IPV6, DB5IPV6, DB6IPV6, DB7IPV6, DB8IPV6, DB9IPV6, DB10IPV6, DB11IPV6, DB12IPV6, DB13IPV6, DB14IPV6, DB15IPV6, DB16IPV6, DB17IPV6, DB18IPV6, DB19IPV6, DB20IPV6, DB21IPV6, DB22IPV6, DB23IPV6, DB24IPV6, DB1BINIPV6, DB2BINIPV6, DB3BINIPV6, DB4BINIPV6, DB5BINIPV6, DB6BINIPV6, DB7BINIPV6, DB8BINIPV6, DB9BINIPV6, DB10BINIPV6, DB11BINIPV6, DB12BINIPV6, DB13BINIPV6, DB14BINIPV6, DB15BINIPV6, DB16BINIPV6, DB17BINIPV6, DB18BINIPV6, DB19BINIPV6, DB20BINIPV6, DB21BINIPV6, DB22BINIPV6, DB23BINIPV6, DB24BINIPV6, DB1LITEIPV6, DB3LITEIPV6, DB5LITEIPV6, DB9LITEIPV6, DB11LITEIPV6, DB1LITEBINIPV6, DB3LITEBINIPV6, DB5LITEBINIPV6, DB9LITEBINIPV6, DB11LITEBINIPV6, PX1, PX2, PX3, PX4, PX1BIN, PX2BIN, PX3BIN, PX4BIN, DBASNLITE
++
++Please contact support\@ip2location.com for technical support.
++
++SHOWALL
+ }
+\ No newline at end of file
diff --git a/IP2Location.spec b/IP2Location.spec
index d7cd116..87e021e 100644
--- a/IP2Location.spec
+++ b/IP2Location.spec
@@ -21,7 +21,7 @@
Name: IP2Location
Summary: C library for mapping IP address to geolocation information
Version: %{version}
-Release: 10%{?gittag}%{?dist}
+Release: 0%{?gittag}%{?dist}
License: MIT
URL: http://www.ip2location.com/
%if 0%{?gitcommit:1}
@@ -117,7 +117,12 @@ sh ./bootstrap
autoreconf -fiv
%configure --disable-static
+%if 0%{?make_build:1}
%make_build COPTS="$RPM_OPT_FLAGS"
+%else
+make %{?_smp_mflags} COPTS="$RPM_OPT_FLAGS"
+%endif
+
# convert CSV to BIN
make -C data convert
@@ -128,7 +133,11 @@ LD_LIBRARY_PATH=%{buildroot}%{_libdir}:$LD_LIBRARY_PATH make check
%install
+%if 0%{?make_install:1}
%make_install
+%else
+make install DESTDIR=%{buildroot}
+%endif
# cleanup
rm -f %{buildroot}%{_libdir}/*.*a
@@ -146,6 +155,7 @@ install -p data/IPV6-COUNTRY.BIN %{buildroot}%{_datadir}/%{name}/IPV6-COUNTRY.SA
%files
+%{!?_licensedir:%global license %%doc}
%license COPYING LICENSE.TXT
%doc AUTHORS ChangeLog README.md NEWS
@@ -170,6 +180,11 @@ install -p data/IPV6-COUNTRY.BIN %{buildroot}%{_datadir}/%{name}/IPV6-COUNTRY.SA
%changelog
+* Thu Sep 24 2020 Remi Collet <remi@remirepo.net> - 8.0.9-0
+- sync with Fedora and rename to IP2location
+- rebuild for #remirepo with release = 0
+ to manage update from old version
+
* Thu Sep 24 2020 Peter Bieringer <pb@bieringer.de> - 8.0.9-10
- add additional Obsoletes/Provides/BuildRequires