public inbox for ipfire-scm@lists.ipfire.org
 help / color / mirror / Atom feed
From: Arne Fitzenreiter <git@ipfire.org>
To: ipfire-scm@lists.ipfire.org
Subject: [git.ipfire.org] IPFire 2.x development tree branch, master, updated. 99659ce50b2a693217d674b380af6ffdac191832
Date: Thu, 30 Jul 2020 08:14:39 +0000	[thread overview]
Message-ID: <4BHNVm5ylQz2xBd@people01.haj.ipfire.org> (raw)

[-- Attachment #1: Type: text/plain, Size: 283123 bytes --]

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "IPFire 2.x development tree".

The branch, master has been updated
       via  99659ce50b2a693217d674b380af6ffdac191832 (commit)
       via  18f05104294c0c4b951e8208ebb0640ed7900f41 (commit)
       via  40372359447d58c097152642fc607eb1303aaba2 (commit)
       via  914994a6216ee7899335e404dc4dee576e0a44fa (commit)
       via  00655793a6a7821b9debfd488e7fd91d1b370c1d (commit)
       via  cc9eb2d30609f18f06b53b838efcd3c7326693f4 (commit)
       via  6386584baa5669755ebae9507a50ef71321b47aa (commit)
       via  be7f8b800302c3b3198491cbc7ec323e0c7bdb2d (commit)
       via  c867280f97574cc24e547c7bd2fdb2e488c499f8 (commit)
       via  e43c3206d3a38c0db76b16860898c21e429a6037 (commit)
       via  2ae1c23f6200b0820a54ce30fe0677820094ff51 (commit)
       via  4ddc1aea083198724c666f27bb4c2df199018acc (commit)
       via  f6a31bfa07f9b464885d500f1c4a3aee2efdde08 (commit)
       via  eba306c216e6ee5ba6b2db9b9a0ddaf04d1b58d7 (commit)
       via  7f5b5954b241c8f78f1b81d1313f09b97988190a (commit)
       via  cd6bd02f53e9dee2cd634c006228585d51fff839 (commit)
       via  8cb99ea7bf7b086b99af67776d38abbf7be8d6db (commit)
       via  be03f1035337e6a43c6fa8527ed342f7f614174c (commit)
       via  d9c1908f64e6d3e1adcd2c400f7c2b939f1393aa (commit)
       via  99f8980deccb7491a75ec86036dbc32614c50b43 (commit)
       via  cb4860794b9a5fcd92447414ea0b004ea9f0101f (commit)
       via  bbaf9bdf21bff1a48eef82e6807a28d1e939783d (commit)
       via  d047b493aaae6cb98e589718b778a67b0566f4e4 (commit)
       via  d0cbdd63632a23cca03035f2840be0c424933000 (commit)
       via  b9b3fe673944e2890349deafd2f7cc4e72d81edc (commit)
       via  4979ba0aaf8d088ae317fbd0751f184dc34f428f (commit)
       via  af7f9fc43d84cdce163a699992d8cf3ff74817dc (commit)
       via  45f4de2bbcafb689b21a201c0aa836881ce417c2 (commit)
       via  f1d982cce6d6a8987fb210cc8a34fa4b6214b3a7 (commit)
       via  d3f7af8144d9156580cbc3b6924fb34d3de7d91b (commit)
       via  18c9fd28208db8b69f66e6e767a6e6ab964e0f5c (commit)
       via  942b662b6b00b4886a621e4f8990306f1dbb24b1 (commit)
       via  d0faaf61d63912003ce7fdd02f497e4a4a333bd0 (commit)
       via  987d09658eb67355f849d00ca14b5889080ed368 (commit)
       via  1e36360e191894c0704fa7e258e1eee8d658624f (commit)
       via  9aadc465a3ca39abdd571bd6ce2d7c1f114e3823 (commit)
       via  10ef824bb7e9040d8e5e773785237b90de7dcd4c (commit)
       via  006e3c6c31a9d02b73fed1e2495af99ae04f95d0 (commit)
       via  b1229cf610a39391bc328bf7723bb4b757c38b12 (commit)
       via  46269ee5fb7942efe88b58f6d29f442b437e2565 (commit)
       via  5730a5bcdf08e93b5da4298ce81d016fed401580 (commit)
       via  69d431e41aae4a887bd69c6af8325edeb32f8a91 (commit)
       via  e2e270e1dbc249128c15c1c00e9dd23357e7bcee (commit)
       via  0893eef4cc312c29091541bec2719dbc39d9fb34 (commit)
       via  e43b7b7b2d85b1cc4c0967a32abaaae451b94b6c (commit)
       via  4f6d5b3ef3d6cfb9c4117cf2805a9c37cbdc01ac (commit)
       via  43970d7cfc60ee894df5b8cec0207f876208a2f8 (commit)
       via  1b024e999ec0eb256cac9f59bf7e76c2dba2b80e (commit)
       via  e4f1e36c9fac067f5e9e304b6c306e2cfc3293de (commit)
       via  dca3f2075beb1e9890baa9192529af4928943d0d (commit)
       via  4346cb66607da5f94628364f16ecfe2218671c2c (commit)
       via  d1a23835dba451899df2cbeb496f6719b5799339 (commit)
       via  3d3fbe7dc4ec927efb5f56f281448b4dc9cfd188 (commit)
       via  273618daf9b19fa5da53a04d9f8d2db7f3e49fb2 (commit)
       via  48152fae627a9882b0d4193e6023fd50d925d155 (commit)
       via  c556242efd22b48abe9c787b780fab82d30bb646 (commit)
       via  af6aedb6d3e955c8fa429b616479c8f7677b72b9 (commit)
       via  0e6eca78b8e20fc8599d70fab4811afccb0c9fb0 (commit)
       via  d00923cef8902a9d8b8d5d452973d62d1fe29a84 (commit)
       via  4852f77e33d41dd9657218169604f2f77eb01e01 (commit)
       via  38a8d40142ce2e5a270c331353c68760d0d74b23 (commit)
       via  e7b1b002c90ef52f25027a55399bb25d0f3ec55a (commit)
       via  36331a6a9c7aef8e7d49fd5d9d1ffcc37169e215 (commit)
       via  2da9d3f24729e56ba09389a2c49388942250ac53 (commit)
       via  4415b1c351e0cae870e5f81e5043f2743bddc063 (commit)
       via  304abbae220aa430eb1c159520f9c977ea27241a (commit)
       via  d2b364f032e791dffd4bb1b94bda44e341641bb5 (commit)
       via  51b6f07ce5eca18c18e7bf4fa83e8bc5788824ca (commit)
       via  decef80c7eb623e9925ac83130c03aa20a130048 (commit)
       via  296af3b9ec582adcb2e30b8c48bc4d7c7743ffff (commit)
       via  89be7032970737430281fe29139b47196a6e2058 (commit)
       via  5127276ba1a94162a60e6e60367855a73c5b4655 (commit)
       via  cf45236b2aaa4ce095da053ac2d4bf9a08bc724a (commit)
       via  d4beed2ce91950215a43bf9ccd3df8e93dec941c (commit)
       via  fb47a9be0c68d50026f99e0c353007ed274b4a1a (commit)
       via  bdf1e52606f118840a8f4b24c4636db77bc16349 (commit)
       via  8b58dbf32a1cd937b1ab66b9b88b17795abf968e (commit)
       via  4e033257efd8425a6d36843c330b3762108cef1f (commit)
       via  ec1c52633ed8fbc86b6661e9e03e4fc578ac0da4 (commit)
       via  a3afe9058f33ed02ded7267dd778d1bd908d14fc (commit)
       via  c3b612bb6cf8370701d4ed5ff3ef5f80b474f8c0 (commit)
       via  9a240b7144eb3ce5d4bda65ebb9a7d1a95f82055 (commit)
       via  693b8513df290cbe4ee2fe3927ee029081fd2323 (commit)
       via  c9479591001195095f95831334ac6739cbbd0140 (commit)
       via  98329972105936c268571823aba048cfdbb4f2e8 (commit)
       via  c48a64d6f85ada38bc2f404460c2e0314f585214 (commit)
       via  1eee696bb4402370db0f65237cc1e2148815ee56 (commit)
       via  d1ca2d1fd5f52bc31c7b4e8c663aa936363eac07 (commit)
       via  9433a59690156dd88ead5f6ec9b9baa4aee92362 (commit)
       via  e4df56f999f6a03a48728616dc2ddb535361888b (commit)
       via  03c8f290d99bd9a06d85197e6e5f4d437239e682 (commit)
       via  eaba273a5f3e4455dccd31306443cacdc92ae29b (commit)
       via  8aea15899b9e51cd91bba5322971b55a708ebd72 (commit)
       via  ad47d2ae80708a3418557ca1ec75a03ae94aac41 (commit)
       via  e758c7638491eee86720a6b9be097124cbeb9d80 (commit)
       via  f5ad4246deff0ddb1b703c74aa58e61e8d8a7866 (commit)
       via  9b2594d8e6493079cf3a80f1d433e0b06a030fe5 (commit)
       via  6fd1d4fa235d31ae3fbafc830e83be3f0c7f49d8 (commit)
       via  95bb1a5c95ff0cc59974225bb58a013109c6e15b (commit)
       via  9288b110115900f87049bf378fd3f06c056306d8 (commit)
       via  83ccdf7feab64b54b0584161182d4ef90d6bb149 (commit)
       via  bb7ba3b4046c9f9bcb741c5476f78952f994eb7d (commit)
       via  50494dfd6ef83f2906cde8e1bd8dbb4992e30aa3 (commit)
       via  87bc6401bc0fd92c4e1aad71fdef127f81c4b422 (commit)
       via  13c0fb79103e4030d7b2999b4edc1c4686755919 (commit)
       via  8a64d10f24b2161592814e9f608a1ea674784312 (commit)
       via  e34dbea7474bdd4b34c4551d3704c8b9d6402622 (commit)
       via  45b32f4dcf48e736db032579d5a35bed1da53696 (commit)
       via  d938509ed949eb72385996397348ae7cac5e191c (commit)
      from  96253783d49c51e953e8d10fb24b2486226ed75e (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 99659ce50b2a693217d674b380af6ffdac191832
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Wed Jul 29 18:57:43 2020 +0200

    libloc: Only update database once a week
    
    Ensure to download and update the database only once a week, even the
    script will be called by cron each hour.
    
    Fixes #12462.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>
    Signed-off-by: Arne Fitzenreiter <arne_f(a)ipfire.org>

commit 18f05104294c0c4b951e8208ebb0640ed7900f41
Author: Arne Fitzenreiter <arne_f(a)ipfire.org>
Date:   Wed Jul 29 13:42:28 2020 +0000

    stage2: fix rootfile 2nd try
    
    Signed-off-by: Arne Fitzenreiter <arne_f(a)ipfire.org>

commit 40372359447d58c097152642fc607eb1303aaba2
Author: Arne Fitzenreiter <arne_f(a)ipfire.org>
Date:   Wed Jul 29 10:33:36 2020 +0000

    stage2: fix aarch64 rootfile
    
    Signed-off-by: Arne Fitzenreiter <arne_f(a)ipfire.org>

commit 914994a6216ee7899335e404dc4dee576e0a44fa
Author: Arne Fitzenreiter <arne_f(a)ipfire.org>
Date:   Wed Jul 29 10:28:21 2020 +0000

    stage2: update x86_64 rootfile
    
    Signed-off-by: Arne Fitzenreiter <arne_f(a)ipfire.org>

commit 00655793a6a7821b9debfd488e7fd91d1b370c1d
Author: Arne Fitzenreiter <arne_f(a)ipfire.org>
Date:   Tue Jul 28 18:38:40 2020 +0000

    core148: add network-functions.pl
    
    Signed-off-by: Arne Fitzenreiter <arne_f(a)ipfire.org>

commit cc9eb2d30609f18f06b53b838efcd3c7326693f4
Author: Peter Müller <peter.mueller(a)ipfire.org>
Date:   Sat Jul 25 19:08:37 2020 +0000

    network-functions.pl: add missing unit tests for changed, network membership procedure
    
    Cc: Tim FitzGeorge <ipfr(a)tfitzgeorge.me.uk>
    Cc: Alexander Marx <alexander.marx(a)ipfire.org>
    Signed-off-by: Peter Müller <peter.mueller(a)ipfire.org>
    Signed-off-by: Arne Fitzenreiter <arne_f(a)ipfire.org>

commit 6386584baa5669755ebae9507a50ef71321b47aa
Author: Peter Müller <peter.mueller(a)ipfire.org>
Date:   Sat Jul 25 19:08:07 2020 +0000

    network-functions.pl: fix network membership test
    
    This is based on an orphaned patch provided by Tim FitzGeorge and
    _finally_ fixes incorrect network membership calculations. Those were
    are usability pain in the ass deluxe, as they rendered some combinations
    of configuring OpenVPN and IPsec services unusable.
    
    Fixes: #11235
    Fixes: #12263
    
    Cc: Tim FitzGeorge <ipfr(a)tfitzgeorge.me.uk>
    Cc: Michael Tremer <michael.tremer(a)ipfire.org>
    Cc: Alexander Marx <alexander.marx(a)ipfire.org>
    Signed-off-by: Peter Müller <peter.mueller(a)ipfire.org>
    Signed-off-by: Arne Fitzenreiter <arne_f(a)ipfire.org>

commit be7f8b800302c3b3198491cbc7ec323e0c7bdb2d
Author: Adolf Belka <ahb.ipfire(a)gmail.com>
Date:   Tue Jul 28 18:17:43 2020 +0000

    bacula: Correction to 9.6.5
    
    - Corrected Download URL to remove filename from the end of it. This is defined separately.
    - Corrected to include install command for backup file which was missed in previous patch.
    - Added backup file to rootfiles list.
    Signed-off-by: Adolf Belka<ahb.ipfire(a)gmail.com>
    Reviewed-by: Michael Tremer <michael.tremer(a)ipfire.org>
    Signed-off-by: Michael Tremer <michael.tremer(a)ipfire.org>
    Signed-off-by: Arne Fitzenreiter <arne_f(a)ipfire.org>

commit c867280f97574cc24e547c7bd2fdb2e488c499f8
Author: Arne Fitzenreiter <arne_f(a)ipfire.org>
Date:   Tue Jul 28 18:34:31 2020 +0000

    core148: add networking/any initskript
    
    Signed-off-by: Arne Fitzenreiter <arne_f(a)ipfire.org>

commit e43c3206d3a38c0db76b16860898c21e429a6037
Author: Michael Tremer <michael.tremer(a)ipfire.org>
Date:   Tue Jul 28 18:04:46 2020 +0000

    network: Fix typo for MTU value
    
    Reported here:
    
      https://community.ipfire.org/t/strange-etc-init-d-networking-any-for-blue/2831
    
    Signed-off-by: Michael Tremer <michael.tremer(a)ipfire.org>
    Signed-off-by: Arne Fitzenreiter <arne_f(a)ipfire.org>

commit 2ae1c23f6200b0820a54ce30fe0677820094ff51
Author: Michael Tremer <michael.tremer(a)ipfire.org>
Date:   Tue Jul 28 17:18:18 2020 +0000

    location: Restart IPsec after firewall was restarted
    
    strongswan creates rules in iptables which are being dropped when
    the firewall is being restarted.
    
    Signed-off-by: Michael Tremer <michael.tremer(a)ipfire.org>
    Signed-off-by: Arne Fitzenreiter <arne_f(a)ipfire.org>

commit 4ddc1aea083198724c666f27bb4c2df199018acc
Author: Michael Tremer <michael.tremer(a)ipfire.org>
Date:   Tue Jul 28 17:18:19 2020 +0000

    core148: Do not update the location database straight away
    
    This process takes a long time and stalls the update process.
    
    Since the cronjob is being called once an hour, all systems will
    very quickly pull a recent database which will then be extracted
    in the background not disrupting the Core Update process.
    
    Signed-off-by: Michael Tremer <michael.tremer(a)ipfire.org>
    Signed-off-by: Arne Fitzenreiter <arne_f(a)ipfire.org>

commit f6a31bfa07f9b464885d500f1c4a3aee2efdde08
Author: Matthias Fischer <matthias.fischer(a)ipfire.org>
Date:   Mon Jul 27 17:50:50 2020 +0200

    Fix typo in german translation
    
    Signed-off-by: Matthias Fischer <matthias.fischer(a)ipfire.org>
    Reviewed-by: Michael Tremer <michael.tremer(a)ipfire.org>
    Signed-off-by: Arne Fitzenreiter <arne_f(a)ipfire.org>

commit eba306c216e6ee5ba6b2db9b9a0ddaf04d1b58d7
Author: Matthias Fischer <matthias.fischer(a)ipfire.org>
Date:   Sat Jul 25 20:19:20 2020 +0200

    mc: Update to 4.8.25
    
    For details see:
    http://midnight-commander.org/wiki/NEWS-4.8.25
    
    Signed-off-by: Matthias Fischer <matthias.fischer(a)ipfire.org>
    Signed-off-by: Michael Tremer <michael.tremer(a)ipfire.org>
    Signed-off-by: Arne Fitzenreiter <arne_f(a)ipfire.org>

commit 7f5b5954b241c8f78f1b81d1313f09b97988190a
Author: Michael Tremer <michael.tremer(a)ipfire.org>
Date:   Tue Jul 21 12:48:55 2020 +0000

    libloc: Apply -fstack-protector only on i586
    
    All other architectures build fine and we do not need to
    weaken the Perl module unnecessarily.
    
    Signed-off-by: Michael Tremer <michael.tremer(a)ipfire.org>
    Signed-off-by: Arne Fitzenreiter <arne_f(a)ipfire.org>

commit cd6bd02f53e9dee2cd634c006228585d51fff839
Author: Stéphane Pautrel <stephane.pautrel(a)acb78.com>
Date:   Mon Jul 27 18:09:27 2020 +0000

    fr: Update French translation
    
    Signed-off-by: Arne Fitzenreiter <arne_f(a)ipfire.org>

commit 8cb99ea7bf7b086b99af67776d38abbf7be8d6db
Author: Arne Fitzenreiter <arne_f(a)ipfire.org>
Date:   Mon Jul 27 18:05:06 2020 +0000

    core148: Update crontab with recent changes
    
    Signed-off-by: Arne Fitzenreiter <arne_f(a)ipfire.org>

commit be03f1035337e6a43c6fa8527ed342f7f614174c
Author: Arne Fitzenreiter <arne_f(a)ipfire.org>
Date:   Wed Jul 22 20:46:13 2020 +0200

    libloc: use regular stack-protector on i586
    
    Signed-off-by: Arne Fitzenreiter <arne_f(a)ipfire.org>

commit d9c1908f64e6d3e1adcd2c400f7c2b939f1393aa
Author: Arne Fitzenreiter <arne_f(a)ipfire.org>
Date:   Tue Jul 21 19:41:39 2020 +0200

    stage2: update aarch64 rootfile
    
    Signed-off-by: Arne Fitzenreiter <arne_f(a)ipfire.org>

commit 99f8980deccb7491a75ec86036dbc32614c50b43
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Sun Jul 19 20:21:41 2020 +0200

    libloc: Add upstream patch to fix a buffer issue.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>
    Signed-off-by: Arne Fitzenreiter <arne_f(a)ipfire.org>

commit cb4860794b9a5fcd92447414ea0b004ea9f0101f
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Sun Jul 19 11:22:52 2020 +0200

    libloc: Apply patch to compile the perl module without stack protector.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>
    Signed-off-by: Arne Fitzenreiter <arne_f(a)ipfire.org>

commit bbaf9bdf21bff1a48eef82e6807a28d1e939783d
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Sat Jul 11 12:11:02 2020 +0200

    convert-to-location: Regenerate firewall chains.
    
    The firewall chain for location based rules has been renamed to
    LOCATIONBLOCK and therefore the fiewall needs to be restarted and
    the chains regenerated.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>
    Signed-off-by: Arne Fitzenreiter <arne_f(a)ipfire.org>

commit d047b493aaae6cb98e589718b778a67b0566f4e4
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Sat Jul 11 12:11:01 2020 +0200

    convert-to-location: Fix double patch declaration
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>
    Signed-off-by: Arne Fitzenreiter <arne_f(a)ipfire.org>

commit d0cbdd63632a23cca03035f2840be0c424933000
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Fri Jul 10 17:42:34 2020 +0200

    libloc: Update to 0.9.3
    
    * Also bump the shipped database to 2020-07-10 for a more recent version
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>
    Signed-off-by: Arne Fitzenreiter <arne_f(a)ipfire.org>

commit b9b3fe673944e2890349deafd2f7cc4e72d81edc
Author: Arne Fitzenreiter <arne_f(a)ipfire.org>
Date:   Fri Jul 10 22:07:56 2020 +0200

    core148: add libloc changes
    
    Signed-off-by: Arne Fitzenreiter <arne_f(a)ipfire.org>

commit 4979ba0aaf8d088ae317fbd0751f184dc34f428f
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Wed Jul 8 19:28:36 2020 +0200

    ipinfo.cgi: Fix calling get_continent_code().
    
    This function is provided by the Location perl module and directly can
    be called.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit af7f9fc43d84cdce163a699992d8cf3ff74817dc
Merge: 45f4de2bb 96253783d
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Fri Jul 3 18:48:30 2020 +0200

    :xMerge branch 'next' of ssh://git.ipfire.org/pub/git/ipfire-2.x into next-switch-to-libloc
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 45f4de2bbcafb689b21a201c0aa836881ce417c2
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Mon Jun 15 19:47:07 2020 +0200

    libloc: Update to 0.9.2
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit f1d982cce6d6a8987fb210cc8a34fa4b6214b3a7
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Mon Jun 15 18:03:11 2020 +0200

    Add convert-to-location converter.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit d3f7af8144d9156580cbc3b6924fb34d3de7d91b
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Sat Jun 13 19:10:38 2020 +0200

    fwhosts.cgi: Fix function call.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 18c9fd28208db8b69f66e6e767a6e6ab964e0f5c
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Sat Jun 13 19:10:15 2020 +0200

    firewall-lib.pl: Fix typo.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 942b662b6b00b4886a621e4f8990306f1dbb24b1
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Fri Jun 12 20:04:21 2020 +0200

    credits.cgi: Remove hint about used MaxMind database and software.
    
    We do not rely anymore on data and software from this vendor, so
    we safely can drop this notice.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit d0faaf61d63912003ce7fdd02f497e4a4a333bd0
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Fri Jun 12 20:01:48 2020 +0200

    Rootfiles update.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 987d09658eb67355f849d00ca14b5889080ed368
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Fri Jun 12 19:54:13 2020 +0200

    configroot: Create and install location related files.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 1e36360e191894c0704fa7e258e1eee8d658624f
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Fri Jun 12 19:52:03 2020 +0200

    langs: Replace geoip in string names with location.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 9aadc465a3ca39abdd571bd6ce2d7c1f114e3823
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Fri Jun 12 19:46:24 2020 +0200

    fwhosts.cgi: Rework code to use location-functions.pl
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 10ef824bb7e9040d8e5e773785237b90de7dcd4c
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Fri Jun 12 19:31:41 2020 +0200

    firewall.cgi: Rework to use location-functions.pl
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 006e3c6c31a9d02b73fed1e2495af99ae04f95d0
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Fri Jun 12 19:21:27 2020 +0200

    firewall-lib.pl: Rework code to use location-functions.pl
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit b1229cf610a39391bc328bf7723bb4b757c38b12
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Fri Jun 12 19:12:00 2020 +0200

    50-firewall.menu: Rename geoipblock to locationblock
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 46269ee5fb7942efe88b58f6d29f442b437e2565
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Fri Jun 12 19:09:29 2020 +0200

    Transform geoipblock into locationblock settings file.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 5730a5bcdf08e93b5da4298ce81d016fed401580
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Fri Jun 12 19:06:01 2020 +0200

    firewall/rules.pl: Rework code to use location-functions.pl
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 69d431e41aae4a887bd69c6af8325edeb32f8a91
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Fri Jun 12 18:52:19 2020 +0200

    remote.cgi: Use location-functions.pl
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit e2e270e1dbc249128c15c1c00e9dd23357e7bcee
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Fri Jun 12 18:51:03 2020 +0200

    ovpnmain.cgi: Use location-functions.pl
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 0893eef4cc312c29091541bec2719dbc39d9fb34
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Fri Jun 12 18:48:24 2020 +0200

    tor.cgi: Use location-functions.pl
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit e43b7b7b2d85b1cc4c0967a32abaaae451b94b6c
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Fri Jun 12 18:45:56 2020 +0200

    netexternal.cgi: Remove GeoIP related code.
    
    The CGI only loaded geoip-functions.pl and initiated libloc but did no
    further actions. So we are safe to completely remove this code.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 4f6d5b3ef3d6cfb9c4117cf2805a9c37cbdc01ac
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Fri Jun 12 18:44:29 2020 +0200

    logs.cgi/showrequestfromcountry.dat: Use location-functions.pl
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 43970d7cfc60ee894df5b8cec0207f876208a2f8
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Fri Jun 12 18:42:23 2020 +0200

    logs.cgi/firewalllogip.dat: Use location-functions.pl
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 1b024e999ec0eb256cac9f59bf7e76c2dba2b80e
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Fri Jun 12 18:09:46 2020 +0200

    logs.cgi/firewalllogcountry.dat: Use location-functions.pl
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit e4f1e36c9fac067f5e9e304b6c306e2cfc3293de
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Fri Jun 12 18:07:55 2020 +0200

    logs.cgi/firewalllog.dat: Use location-functions.pl
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit dca3f2075beb1e9890baa9192529af4928943d0d
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Fri Jun 12 18:02:51 2020 +0200

    ipinfo.cgi: Use location-functions.pl
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 4346cb66607da5f94628364f16ecfe2218671c2c
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Fri Jun 12 17:59:43 2020 +0200

    dns.cgi: Use location-functions.pl
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit d1a23835dba451899df2cbeb496f6719b5799339
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Fri Jun 12 17:53:29 2020 +0200

    country.cgi: Use location-functions.pl
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 3d3fbe7dc4ec927efb5f56f281448b4dc9cfd188
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Fri Jun 12 17:51:00 2020 +0200

    connections.cgi: Use location-functions.pl
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 273618daf9b19fa5da53a04d9f8d2db7f3e49fb2
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Fri Jun 12 17:44:48 2020 +0200

    Transform geoip-block.cgi into location-block.cgi
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 48152fae627a9882b0d4193e6023fd50d925d155
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Fri Jun 12 17:42:41 2020 +0200

    Transform geoip-functions.pl into location-functions.pl
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit c556242efd22b48abe9c787b780fab82d30bb646
Author: Michael Tremer <michael.tremer(a)ipfire.org>
Date:   Fri Jun 12 16:12:49 2020 +0200

    location: Remove "GeoIP" from crontab
    
    Signed-off-by: Michael Tremer <michael.tremer(a)ipfire.org>

commit af6aedb6d3e955c8fa429b616479c8f7677b72b9
Author: Michael Tremer <michael.tremer(a)ipfire.org>
Date:   Fri Jun 12 16:10:24 2020 +0200

    location: Remove "GeoIP" from the UI
    
    Signed-off-by: Michael Tremer <michael.tremer(a)ipfire.org>

commit 0e6eca78b8e20fc8599d70fab4811afccb0c9fb0
Author: Michael Tremer <michael.tremer(a)ipfire.org>
Date:   Fri Jun 12 16:00:34 2020 +0200

    firewall: Rename GEOIPBLOCK table to LOCATIONBLOCK
    
    Signed-off-by: Michael Tremer <michael.tremer(a)ipfire.org>

commit d00923cef8902a9d8b8d5d452973d62d1fe29a84
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Thu Jun 11 08:19:07 2020 +0200

    libloc: Rootfile update.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 4852f77e33d41dd9657218169604f2f77eb01e01
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Wed Jun 10 21:29:04 2020 +0200

    Revert "firewall/rules.pl: Add code to collect and export all required country"
    
    This reverts commit ad47d2ae80708a3418557ca1ec75a03ae94aac41.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 38a8d40142ce2e5a270c331353c68760d0d74b23
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Wed Jun 10 21:28:16 2020 +0200

    Revert "firewall/rules.pl: Only try to export locations if needed."
    
    This reverts commit 693b8513df290cbe4ee2fe3927ee029081fd2323.

commit e7b1b002c90ef52f25027a55399bb25d0f3ec55a
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Wed Jun 10 21:27:06 2020 +0200

    Revert "geoip-functions.pl: Add functions to export locations and to flush them."
    
    This reverts commit e758c7638491eee86720a6b9be097124cbeb9d80.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 36331a6a9c7aef8e7d49fd5d9d1ffcc37169e215
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Wed Jun 10 21:24:58 2020 +0200

    update-location-database: Automatically export database after update.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 2da9d3f24729e56ba09389a2c49388942250ac53
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Wed Jun 10 21:24:32 2020 +0200

    libloc: Install and export database.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 4415b1c351e0cae870e5f81e5043f2743bddc063
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Wed Jun 10 18:01:57 2020 +0200

    libloc: Import upstream patches.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 304abbae220aa430eb1c159520f9c977ea27241a
Merge: d2b364f03 92e828b3b
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Wed Jun 10 18:01:14 2020 +0200

    Merge branch 'next' of ssh://git.ipfire.org/pub/git/ipfire-2.x into next-switch-to-libloc

commit d2b364f032e791dffd4bb1b94bda44e341641bb5
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Mon Jun 8 21:20:17 2020 +0200

    red.up: Do not download/update location database.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 51b6f07ce5eca18c18e7bf4fa83e8bc5788824ca
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Wed Jun 3 19:29:55 2020 +0200

    geoip-functions.pl: Provide the available locations in upper case.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit decef80c7eb623e9925ac83130c03aa20a130048
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Wed Jun 3 19:15:43 2020 +0200

    geoip-functions.pl: Remove non existing country codes.
    
    o1 (Other country) and yu (Yugoslavia) have been used in the past
    and are not part of libloc and therefore cannot be used anymore.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 296af3b9ec582adcb2e30b8c48bc4d7c7743ffff
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Mon Jun 1 21:13:19 2020 +0200

    libloc: Rootfile update.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 89be7032970737430281fe29139b47196a6e2058
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Mon Jun 1 21:13:03 2020 +0200

    libloc: Import latest upstream patches.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 5127276ba1a94162a60e6e60367855a73c5b4655
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Mon Jun 1 21:11:58 2020 +0200

    xtables-addons: Create directory for geoip databases (kernel module).
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit cf45236b2aaa4ce095da053ac2d4bf9a08bc724a
Merge: d4beed2ce ca33424de
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Tue May 26 19:02:48 2020 +0200

    Merge branch 'next' of ssh://git.ipfire.org/pub/git/ipfire-2.x into next-switch-to-libloc

commit d4beed2ce91950215a43bf9ccd3df8e93dec941c
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Tue May 26 19:01:39 2020 +0200

    Locale-Country: Fix rootfile
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit fb47a9be0c68d50026f99e0c353007ed274b4a1a
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Tue May 26 19:01:18 2020 +0200

    libloc: Update to 0.9.1
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit bdf1e52606f118840a8f4b24c4636db77bc16349
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Tue May 26 19:00:40 2020 +0200

    geoip-database: Drop package
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 8b58dbf32a1cd937b1ab66b9b88b17795abf968e
Merge: 91b23ce05 4e033257e
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Mon May 25 19:55:54 2020 +0200

    Merge branch 'switch-to-libloc' into next-switch-to-libloc

commit 4e033257efd8425a6d36843c330b3762108cef1f
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Thu Dec 12 12:08:18 2019 +0100

    ipinfo.cgi: Use continent RIR whois server.
    
    Determine the continent for the current processed IP-Address and
    send the request to the responsible whois server of the local RIR
    instead of sending all requests to ARIN.
    
    Fixes #11267.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit ec1c52633ed8fbc86b6661e9e03e4fc578ac0da4
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Thu Dec 12 12:07:34 2019 +0100

    geoip-functions.pl: Add get_continent_code()
    
    This function allows to recieve the continent code of a given
    country (code).
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit a3afe9058f33ed02ded7267dd778d1bd908d14fc
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Thu Dec 12 09:39:34 2019 +0100

    geoip-functions.pl: Adjust location_dir
    
    The data directory upstream has been moved to "/var/lib/location".
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit c3b612bb6cf8370701d4ed5ff3ef5f80b474f8c0
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Thu Dec 12 09:14:30 2019 +0100

    libloc: Update to 0.9.0 (Git rev: cd022c)
    
    * Includes fix for database verification
    * The public gpg signing key
    * Datadir has been moved to /var/lib/location
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 9a240b7144eb3ce5d4bda65ebb9a7d1a95f82055
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Tue Dec 10 14:50:35 2019 +0100

    update-location-database: Only reload firewall after successfull update.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 693b8513df290cbe4ee2fe3927ee029081fd2323
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Mon Dec 9 18:36:54 2019 +0100

    firewall/rules.pl: Only try to export locations if needed.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit c9479591001195095f95831334ac6739cbbd0140
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Mon Dec 9 16:07:23 2019 +0100

    xtables-addons: Update to 3.7
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 98329972105936c268571823aba048cfdbb4f2e8
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Mon Dec 9 15:56:20 2019 +0100

    make.sh: Remove dropped packages from build list.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit c48a64d6f85ada38bc2f404460c2e0314f585214
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Mon Dec 9 15:03:26 2019 +0100

    initscripts: Rootfile update.

commit 1eee696bb4402370db0f65237cc1e2148815ee56
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Mon Dec 9 14:59:26 2019 +0100

    red.up: Download / Update location database.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit d1ca2d1fd5f52bc31c7b4e8c663aa936363eac07
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Mon Dec 9 14:50:51 2019 +0100

    GeoIP: Drop package
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 9433a59690156dd88ead5f6ec9b9baa4aee92362
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Mon Dec 9 14:47:18 2019 +0100

    geoip-generator: Drop package
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit e4df56f999f6a03a48728616dc2ddb535361888b
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Mon Dec 9 14:37:14 2019 +0100

    Rootfile update.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 03c8f290d99bd9a06d85197e6e5f4d437239e682
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Mon Dec 9 14:35:15 2019 +0100

    xtables-addons: Remove xt_geoip_build script
    
    This script is not longer required.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit eaba273a5f3e4455dccd31306443cacdc92ae29b
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Mon Dec 9 14:19:53 2019 +0100

    crontab: Adjust crontab to hourly launch the update-location-database
    script.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 8aea15899b9e51cd91bba5322971b55a708ebd72
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Mon Dec 9 14:14:34 2019 +0100

    Introduce update-location-database script.
    
    This script obsoletes the old xt_geoip_update script.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit ad47d2ae80708a3418557ca1ec75a03ae94aac41
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Mon Dec 9 11:08:23 2019 +0100

    firewall/rules.pl: Add code to collect and export all required country
    codes.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit e758c7638491eee86720a6b9be097124cbeb9d80
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Mon Dec 9 11:05:31 2019 +0100

    geoip-functions.pl: Add functions to export locations and to flush them.
    
    The export_locations() function requires an array of country codes which
    should be exported by the location-exporter script.
    
    The flush_exported_locations() function is used to flush (delete) all
    exported location files.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit f5ad4246deff0ddb1b703c74aa58e61e8d8a7866
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Sun Dec 8 18:47:08 2019 +0100

    firewall/rules.pl: Make geoipsettings hash and locations array
    script-wide available.
    
    This allows to re-use them.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 9b2594d8e6493079cf3a80f1d433e0b06a030fe5
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Sun Dec 8 18:10:12 2019 +0100

    geoip-functions.pl: Export variables.
    
    This easily allows to use them in other perl script.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 6fd1d4fa235d31ae3fbafc830e83be3f0c7f49d8
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Fri Dec 6 15:31:56 2019 +0100

    libloc: Fix rootfile
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 95bb1a5c95ff0cc59974225bb58a013109c6e15b
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Fri Dec 6 14:42:09 2019 +0100

    logs.cgi/showrequrestfromcountry.dat: Use new location lookup method.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 9288b110115900f87049bf378fd3f06c056306d8
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Fri Dec 6 14:39:54 2019 +0100

    remote.cgi: Use new location lookup method.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 83ccdf7feab64b54b0584161182d4ef90d6bb149
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Fri Dec 6 14:36:48 2019 +0100

    openvpnmain.cgi: Use new location lookup method.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit bb7ba3b4046c9f9bcb741c5476f78952f994eb7d
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Fri Dec 6 14:33:54 2019 +0100

    netexternal.cgi: Use new location lookup method.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 50494dfd6ef83f2906cde8e1bd8dbb4992e30aa3
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Fri Dec 6 14:30:39 2019 +0100

    logs.cgi/*: Use new location lookup method.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 87bc6401bc0fd92c4e1aad71fdef127f81c4b422
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Thu Dec 5 17:24:25 2019 +0100

    connections.cgi: Use new location lookup method.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 13c0fb79103e4030d7b2999b4edc1c4686755919
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Thu Dec 5 17:17:42 2019 +0100

    ipinfo.cgi: Use new location lookup method.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 8a64d10f24b2161592814e9f608a1ea674784312
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Thu Dec 5 15:53:42 2019 +0100

    geoip-functions.pl: Use libloc instead of maxmind for address lookups.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit e34dbea7474bdd4b34c4551d3704c8b9d6402622
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Thu Dec 5 15:50:56 2019 +0100

    geoip-locations.pl: Rework method to grab and handling GeoIP locations.
    
    Now directly get the locations which are part of ISO 3166 from the perl
    Locale::Country module. In case it is not listed there grab the country
    code and location name from a hash.
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit 45b32f4dcf48e736db032579d5a35bed1da53696
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Thu Dec 5 15:26:23 2019 +0100

    Locale-Country: Update to 3.62
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

commit d938509ed949eb72385996397348ae7cac5e191c
Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
Date:   Thu Dec 5 15:56:17 2019 +0100

    libloc: New package
    
    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>

-----------------------------------------------------------------------

Summary of changes:
 config/backup/backup.pl                            |   3 +
 .../{geoip-functions.pl => location-functions.pl}  | 123 +++--
 config/cfgroot/network-functions.pl                |  38 +-
 config/cron/crontab                                |   4 +-
 config/firewall/firewall-lib.pl                    |  52 +-
 config/firewall/geoipblock                         |   1 -
 config/firewall/locationblock                      |   1 +
 config/firewall/rules.pl                           |  48 +-
 config/menu/50-firewall.menu                       |   8 +-
 config/rootfiles/common/GeoIP                      |  12 -
 config/rootfiles/common/Locale-Country             |  96 ++--
 config/rootfiles/common/aarch64/initscripts        |   1 -
 config/rootfiles/common/aarch64/stage2             |   4 +-
 config/rootfiles/common/armv5tel/initscripts       |   1 -
 config/rootfiles/common/configroot                 |   6 +-
 config/rootfiles/common/geoip-database             | 523 ---------------------
 config/rootfiles/common/geoip-generator            |  16 -
 config/rootfiles/common/i586/initscripts           |   1 -
 config/rootfiles/common/libloc                     | 294 ++++++++++++
 config/rootfiles/common/stage2                     |   4 +-
 config/rootfiles/common/web-user-interface         |   2 +-
 config/rootfiles/common/x86_64/initscripts         |   1 -
 config/rootfiles/common/x86_64/stage2              |   8 +-
 config/rootfiles/common/xtables-addons             |   6 +-
 config/rootfiles/core/{147 => 148}/exclude         |   0
 .../136 => core/148}/filelists/Locale-Country      |   0
 config/rootfiles/core/148/filelists/files          |  30 ++
 config/rootfiles/core/148/filelists/libloc         |   1 +
 .../121 => core/148}/filelists/xtables-addons      |   0
 config/rootfiles/core/{147 => 148}/update.sh       |  27 +-
 config/rootfiles/oldcore/103/filelists/curl        |   1 -
 config/rootfiles/{core => oldcore}/147/exclude     |   0
 .../{core => oldcore}/147/filelists/aarch64/gmp    |   0
 .../{core => oldcore}/147/filelists/armv5tel/gmp   |   0
 .../rootfiles/{core => oldcore}/147/filelists/bind |   0
 .../147/filelists/ca-certificates                  |   0
 .../{core => oldcore}/147/filelists/dhcpcd         |   0
 .../{core => oldcore}/147/filelists/files          |   0
 .../{core => oldcore}/147/filelists/gnutls         |   0
 .../{core => oldcore}/147/filelists/i586/gmp       |   0
 .../{core => oldcore}/147/filelists/iproute2       |   0
 .../{core => oldcore}/147/filelists/libgcrypt      |   0
 .../{core => oldcore}/147/filelists/libgpg-error   |   0
 .../147/filelists/linux-firmware-updates           |   0
 .../rootfiles/{core => oldcore}/147/filelists/ntp  |   0
 .../{core => oldcore}/147/filelists/openssh        |   0
 .../{core => oldcore}/147/filelists/squid          |   0
 .../{core => oldcore}/147/filelists/squidguard     |   0
 .../{core => oldcore}/147/filelists/x86_64/gmp     |   0
 config/rootfiles/{core => oldcore}/147/update.sh   |   0
 config/rootfiles/packages/bacula                   |   1 +
 config/rootfiles/packages/mc                       |   2 +
 doc/language_issues.de                             |  11 +-
 doc/language_issues.en                             |  25 +-
 doc/language_issues.es                             |  17 +-
 doc/language_issues.fr                             |  12 +-
 doc/language_issues.it                             |  25 +-
 doc/language_issues.nl                             |  25 +-
 doc/language_issues.pl                             |  17 +-
 doc/language_issues.ru                             |  25 +-
 doc/language_issues.tr                             |  11 +-
 doc/language_missings                              | 131 +++---
 html/cgi-bin/connections.cgi                       |  15 +-
 html/cgi-bin/country.cgi                           |   6 +-
 html/cgi-bin/credits.cgi                           |  10 -
 html/cgi-bin/dns.cgi                               |  11 +-
 html/cgi-bin/firewall.cgi                          |  52 +-
 html/cgi-bin/fwhosts.cgi                           | 236 +++++-----
 html/cgi-bin/ipinfo.cgi                            |  51 +-
 .../{geoip-block.cgi => location-block.cgi}        |  38 +-
 html/cgi-bin/logs.cgi/firewalllog.dat              |   9 +-
 html/cgi-bin/logs.cgi/firewalllogcountry.dat       |   9 +-
 html/cgi-bin/logs.cgi/firewalllogip.dat            |   9 +-
 html/cgi-bin/logs.cgi/showrequestfromcountry.dat   |   9 +-
 html/cgi-bin/netexternal.cgi                       |   1 -
 html/cgi-bin/ovpnmain.cgi                          |   9 +-
 html/cgi-bin/remote.cgi                            |   9 +-
 html/cgi-bin/tor.cgi                               |   4 +-
 langs/de/cgi-bin/de.pl                             |  32 +-
 langs/en/cgi-bin/en.pl                             |  30 +-
 langs/es/cgi-bin/es.pl                             |  20 +-
 langs/fr/cgi-bin/fr.pl                             |  45 +-
 langs/tr/cgi-bin/tr.pl                             |  30 +-
 lfs/GeoIP                                          |  84 ----
 lfs/Locale-Country                                 |   4 +-
 lfs/bacula                                         |   4 +-
 lfs/configroot                                     |   6 +-
 lfs/geoip-database                                 |  73 ---
 lfs/geoip-generator                                |  89 ----
 lfs/{suricata => libloc}                           |  82 ++--
 lfs/mc                                             |   8 +-
 lfs/xtables-addons                                 |  13 +-
 make.sh                                            |   7 +-
 src/initscripts/networking/any                     |   2 +-
 .../networking/red.up/99-geoip-database            |  20 -
 src/initscripts/system/firewall                    |   8 +-
 src/patches/geoip_1_25_change_database_path.patch  | 139 ------
 ...rminate-buffer-when-reading-from-database.patch |  24 +
 ...libloc-0.9.3-location-provide-return-code.patch |  22 +
 ...libloc-0.9.3-perl-regular-stack-protector.patch |  12 +
 ...tables-addons-3.2-fix-database-generation.patch |  18 -
 .../scripts/convert-to-location                    |  49 +-
 .../scripts/update-location-database               |  57 +--
 src/scripts/xt_geoip_update                        | 138 ------
 104 files changed, 1235 insertions(+), 1873 deletions(-)
 rename config/cfgroot/{geoip-functions.pl => location-functions.pl} (59%)
 delete mode 100644 config/firewall/geoipblock
 create mode 100644 config/firewall/locationblock
 delete mode 100644 config/rootfiles/common/GeoIP
 delete mode 100644 config/rootfiles/common/geoip-database
 delete mode 100644 config/rootfiles/common/geoip-generator
 create mode 100644 config/rootfiles/common/libloc
 copy config/rootfiles/core/{147 => 148}/exclude (100%)
 copy config/rootfiles/{oldcore/136 => core/148}/filelists/Locale-Country (100%)
 create mode 100644 config/rootfiles/core/148/filelists/files
 create mode 120000 config/rootfiles/core/148/filelists/libloc
 copy config/rootfiles/{oldcore/121 => core/148}/filelists/xtables-addons (100%)
 copy config/rootfiles/core/{147 => 148}/update.sh (81%)
 delete mode 120000 config/rootfiles/oldcore/103/filelists/curl
 rename config/rootfiles/{core => oldcore}/147/exclude (100%)
 rename config/rootfiles/{core => oldcore}/147/filelists/aarch64/gmp (100%)
 rename config/rootfiles/{core => oldcore}/147/filelists/armv5tel/gmp (100%)
 rename config/rootfiles/{core => oldcore}/147/filelists/bind (100%)
 rename config/rootfiles/{core => oldcore}/147/filelists/ca-certificates (100%)
 rename config/rootfiles/{core => oldcore}/147/filelists/dhcpcd (100%)
 rename config/rootfiles/{core => oldcore}/147/filelists/files (100%)
 rename config/rootfiles/{core => oldcore}/147/filelists/gnutls (100%)
 rename config/rootfiles/{core => oldcore}/147/filelists/i586/gmp (100%)
 rename config/rootfiles/{core => oldcore}/147/filelists/iproute2 (100%)
 rename config/rootfiles/{core => oldcore}/147/filelists/libgcrypt (100%)
 rename config/rootfiles/{core => oldcore}/147/filelists/libgpg-error (100%)
 rename config/rootfiles/{core => oldcore}/147/filelists/linux-firmware-updates (100%)
 rename config/rootfiles/{core => oldcore}/147/filelists/ntp (100%)
 rename config/rootfiles/{core => oldcore}/147/filelists/openssh (100%)
 rename config/rootfiles/{core => oldcore}/147/filelists/squid (100%)
 rename config/rootfiles/{core => oldcore}/147/filelists/squidguard (100%)
 rename config/rootfiles/{core => oldcore}/147/filelists/x86_64/gmp (100%)
 rename config/rootfiles/{core => oldcore}/147/update.sh (100%)
 rename html/cgi-bin/{geoip-block.cgi => location-block.cgi} (85%)
 delete mode 100644 lfs/GeoIP
 delete mode 100644 lfs/geoip-database
 delete mode 100644 lfs/geoip-generator
 copy lfs/{suricata => libloc} (64%)
 delete mode 100644 src/initscripts/networking/red.up/99-geoip-database
 delete mode 100644 src/patches/geoip_1_25_change_database_path.patch
 create mode 100644 src/patches/libloc-0.9.3-country-terminate-buffer-when-reading-from-database.patch
 create mode 100644 src/patches/libloc-0.9.3-location-provide-return-code.patch
 create mode 100644 src/patches/libloc-0.9.3-perl-regular-stack-protector.patch
 delete mode 100644 src/patches/xtables-addons-3.2-fix-database-generation.patch
 copy tools/check_langs.sh => src/scripts/convert-to-location (55%)
 copy config/suricata/convert-ids-modifysids-file => src/scripts/update-location-database (62%)
 delete mode 100644 src/scripts/xt_geoip_update

Difference in files:
diff --git a/config/backup/backup.pl b/config/backup/backup.pl
index 5b5734044..d2e531252 100644
--- a/config/backup/backup.pl
+++ b/config/backup/backup.pl
@@ -139,6 +139,9 @@ restore_backup() {
 		rm -rf "/var/ipfire/portfw"
 	fi
 
+	# Convert location
+	convert-to-location
+
 	# Reload firewall
 	firewallctrl
 
diff --git a/config/cfgroot/geoip-functions.pl b/config/cfgroot/location-functions.pl
similarity index 59%
rename from config/cfgroot/geoip-functions.pl
rename to config/cfgroot/location-functions.pl
index b2319daaa..ab99e71d3 100644
--- a/config/cfgroot/geoip-functions.pl
+++ b/config/cfgroot/location-functions.pl
@@ -17,30 +17,77 @@
 # along with IPFire; if not, write to the Free Software                    #
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA #
 #                                                                          #
-# Copyright (C) 2015 IPFire Team <info(a)ipfire.org>.                        #
+# Copyright (C) 2015 - 2020 IPFire Team <info(a)ipfire.org>.                 #
 #                                                                          #
 ############################################################################
 
-package GeoIP;
+package Location::Functions;
 
-use Geo::IP::PurePerl;
+use Location;
 use Locale::Codes::Country;
 
-my $geoip_database_dir = "/var/lib/GeoIP";
-my $location_database = "GeoLite2-Country-Locations-en.csv";
-
-my $database;
+# Hash which contains country codes and their names which are special or not
+# part of ISO 3166-1.
+my %not_iso_3166_location = (
+	"a1" => "Anonymous Proxy",
+	"a2" => "Satellite Provider",
+	"a3" => "Worldwide Anycast Instance",
+	"an" => "Netherlands Antilles",
+	"ap" => "Asia/Pacific Region",
+	"eu" => "Europe",
+	"fx" => "France, Metropolitan"
+);
+
+# Directory where the libloc database and keyfile lives.
+our $location_dir = "/var/lib/location/";
+
+# Libloc database file.
+our $database = "$location_dir/database.db";
+
+# Libloc keyfile to verify the database.
+our $keyfile = "$location_dir/signing-key.pem";
+
+# Directory which contains the exported databases.
+our $xt_geoip_db_directory = "/usr/share/xt_geoip/";
+
+#
+## Tiny function to init the location database.
+#
+sub init () {
+	# Init and open the database.
+	my $db = &Location::init($database);
+
+	# Return the database handle.
+	return $db;
+}
 
-sub lookup($) {
-	my $address = shift;
+#
+## Function to verify the integrity of the location database.
+#
+sub verify ($) {
+	my ($db_handle) = @_;
 
-	# Load the database into memory if not already done
-	if (!$database) {
-		$database = Geo::IP::PurePerl->new(GEOIP_MEMORY_CACHE);
+	# Verify the integrity of the database.
+	if(&Location::verify($db_handle, $keyfile)) {
+		# Success, return "1".
+		return 1;
 	}
 
+	# If we got here, return nothing.
+	return;
+}
+
+#
+## Function to the the country code of a given address.
+#
+sub lookup_country_code($$) {
+	my ($db_handle, $address) = @_;
+
+	# Lookup the given address.
+	my $country_code = &Location::lookup_country_code($db_handle, $address);
+
 	# Return the name of the country
-	return $database->country_code_by_name($address);
+	return $country_code;
 }
 
 # Function to get the flag icon for a specified country code.
@@ -102,17 +149,15 @@ sub get_full_country_name($) {
 	# Remove whitespaces.
 	chomp($input);
 
+
 	# Convert input into lower case format.
 	my $code = lc($input);
 
 	# Handle country codes which are not in the list.
-	if ($code eq "a1") { $name = "Anonymous Proxy" }
-	elsif ($code eq "a2") { $name = "Satellite Provider" }
-	elsif ($code eq "o1") { $name = "Other Country" }
-	elsif ($code eq "ap") { $name = "Asia/Pacific Region" }
-	elsif ($code eq "eu") { $name = "Europe" }
-	elsif ($code eq "yu") { $name = "Yugoslavia" }
-	else {
+	if ($not_iso_3166_location{$code}) {
+		# Grab location name from hash.
+		$name = $not_iso_3166_location{$code};
+	} else {
 		# Use perl built-in module to get the country code.
 		$name = &Locale::Codes::Country::code2country($code);
 	}
@@ -120,30 +165,31 @@ sub get_full_country_name($) {
 	return $name;
 }
 
-# Function to get all available GeoIP locations.
-sub get_geoip_locations() {
+# Function to get all available locations.
+sub get_locations() {
 	my @locations = ();
 
-	# Open the location database.
-	open(LOCATION, "$geoip_database_dir/$location_database") or return @locations;
-
-	# Loop through the file.
-	while(my $line = <LOCATION>) {
-		# Remove newlines.
-		chomp($line);
+	# Get listed country codes from ISO 3166-1.
+	my @locations_lc = &Locale::Codes::Country::all_country_codes();
 
-		# Split the line content.
-		my ($geoname_id, $locale_code, $continent_code, $continent_name, $country_iso_code, $country_name, $is_in_european_union) = split(/\,/, $line);
+	# The Codes::Country module provides the country codes only in lower case.
+	# So we have to loop over the array and convert them into upper case format.
+	foreach my $ccode (@locations_lc) {
+		# Convert the country code to uppercase.
+		my $ccode_uc = uc($ccode);
 
-		# Check if the country_iso_code is upper case.
-		if($country_iso_code =~ /[A-Z]/) {
-			# Add the current ISO code.
-			push(@locations, $country_iso_code);
-		}
+		# Add the converted ccode to the locations array.
+		push(@locations, $ccode_uc);
 	}
 
-	# Close filehandle.
-	close(LOCATION);
+	# Add locations from not_iso_3166_locations.
+	foreach my $location (keys %not_iso_3166_location) {
+		# Convert the location into uppercase.
+		my $location_uc = uc($location);
+
+		# Add the location to the locations array.
+		push(@locations, $location_uc);
+	}
 
 	# Sort locations array in alphabetical order.
 	my @sorted_locations = sort(@locations);
@@ -152,5 +198,4 @@ sub get_geoip_locations() {
 	return @sorted_locations;
 }
 
-
 1;
diff --git a/config/cfgroot/network-functions.pl b/config/cfgroot/network-functions.pl
index 8649d0502..3d7f04743 100644
--- a/config/cfgroot/network-functions.pl
+++ b/config/cfgroot/network-functions.pl
@@ -115,7 +115,7 @@ sub network_equal {
 		return undef;
 	}
 
-	if ($bin1[0] eq $bin2[0] && $bin1[1] eq $bin2[1]) {
+	if ($bin1[0] == $bin2[0] && $bin1[1] == $bin2[1]) {
 		return 1;
 	}
 
@@ -191,7 +191,7 @@ sub check_ip_address_and_netmask($$) {
 	my ($address, $netmask) = split(/\//, $network, 2);
 
 	# Check if the IP address is fine.
-	# 
+	#
 	my $result = &check_ip_address($address);
 	unless ($result) {
 		return $result;
@@ -295,7 +295,7 @@ sub ip_address_in_network($$) {
 	# Find end address
 	my $broadcast_bin = $network_bin ^ (~$netmask_bin % 2 ** 32);
 
-	return (($address_bin ge $network_bin) && ($address_bin le $broadcast_bin));
+	return (($address_bin >= $network_bin) && ($address_bin <= $broadcast_bin));
 }
 
 sub setup_upstream_proxy() {
@@ -449,14 +449,15 @@ sub get_mac_by_name($) {
 # Remove the next line to enable the testsuite
 __END__
 
-sub assert($) {
+sub assert($$) {
+	my $tst = shift;
 	my $ret = shift;
 
 	if ($ret) {
 		return;
 	}
 
-	print "ASSERTION ERROR";
+	print "ASSERTION ERROR - $tst\n";
 	exit(1);
 }
 
@@ -464,10 +465,10 @@ sub testsuite() {
 	my $result;
 
 	my $address1 = &ip2bin("8.8.8.8");
-	assert($address1 == 134744072);
+	assert('ip2bin("8.8.8.8")', $address1 == 134744072);
 
 	my $address2 = &bin2ip($address1);
-	assert($address2 eq "8.8.8.8");
+	assert("bin2ip($address1)", $address2 eq "8.8.8.8");
 
 	# Check if valid IP addresses are correctly recognised.
 	foreach my $address ("1.2.3.4", "192.168.180.1", "127.0.0.1") {
@@ -486,34 +487,37 @@ sub testsuite() {
 	}
 
 	$result = &check_ip_address_and_netmask("192.168.180.0/255.255.255.0");
-	assert($result);
+	assert('check_ip_address_and_netmask("192.168.180.0/255.255.255.0")', $result);
 
 	$result = &convert_netmask2prefix("255.255.254.0");
-	assert($result == 23);
+	assert('convert_netmask2prefix("255.255.254.0")', $result == 23);
 
 	$result = &convert_prefix2netmask(8);
-	assert($result eq "255.0.0.0");
+	assert('convert_prefix2netmask(8)', $result eq "255.0.0.0");
 
 	$result = &find_next_ip_address("1.2.3.4", 2);
-	assert($result eq "1.2.3.6");
+	assert('find_next_ip_address("1.2.3.4", 2)', $result eq "1.2.3.6");
 
 	$result = &network_equal("192.168.0.0/24", "192.168.0.0/255.255.255.0");
-	assert($result);
+	assert('network_equal("192.168.0.0/24", "192.168.0.0/255.255.255.0")', $result);
 
 	$result = &network_equal("192.168.0.0/24", "192.168.0.0/25");
-	assert(!$result);
+	assert('network_equal("192.168.0.0/24", "192.168.0.0/25")', !$result);
 
 	$result = &network_equal("192.168.0.0/24", "192.168.0.128/25");
-	assert(!$result);
+	assert('network_equal("192.168.0.0/24", "192.168.0.128/25")', !$result);
 
 	$result = &network_equal("192.168.0.1/24", "192.168.0.XXX/24");
-	assert(!$result);
+	assert('network_equal("192.168.0.1/24", "192.168.0.XXX/24")', !$result);
 
 	$result = &ip_address_in_network("10.0.1.4", "10.0.0.0/8");
-	assert($result);
+	assert('ip_address_in_network("10.0.1.4", "10.0.0.0/8"', $result);
 
 	$result = &ip_address_in_network("192.168.30.11", "192.168.30.0/255.255.255.0");
-	assert($result);
+	assert('ip_address_in_network("192.168.30.11", "192.168.30.0/255.255.255.0")', $result);
+
+	$result = &ip_address_in_network("192.168.30.11", "0.0.0.0/8");
+	assert('ip_address_in_network("192.168.30.11", "0.0.0.0/8")', !$result);
 
 	print "Testsuite completed successfully!\n";
 
diff --git a/config/cron/crontab b/config/cron/crontab
index 56801394e..331eaa4a5 100644
--- a/config/cron/crontab
+++ b/config/cron/crontab
@@ -59,8 +59,8 @@ HOME=/
 00 3 * 3 0          /usr/local/bin/timezone-transition /usr/local/bin/firewallctrl
 00 2 * 10-11 0      /usr/local/bin/timezone-transition /usr/local/bin/firewallctrl
 
-# Update GeoIP database once a month.
-%monthly,random * * * [ -f "/var/ipfire/red/active" ] && /usr/local/bin/xt_geoip_update >/dev/null 2>&1
+# Update location database once a month
+%hourly,random * * * [ -f "/var/ipfire/red/active" ] && /usr/local/bin/update-location-database >/dev/null 2>&1
 
 # Retry sending spooled mails regularly
 %hourly * /usr/sbin/dma -q
diff --git a/config/firewall/firewall-lib.pl b/config/firewall/firewall-lib.pl
index e76ab24db..bc0b30ca5 100644
--- a/config/firewall/firewall-lib.pl
+++ b/config/firewall/firewall-lib.pl
@@ -29,7 +29,7 @@ package fwlib;
 my %customnetwork=();
 my %customhost=();
 my %customgrp=();
-my %customgeoipgrp=();
+my %customlocationgrp=();
 my %customservice=();
 my %customservicegrp=();
 my %ccdnet=();
@@ -41,12 +41,12 @@ my %ovpnsettings=();
 my %aliases=();
 
 require '/var/ipfire/general-functions.pl';
-require '/var/ipfire/geoip-functions.pl';
+require '/var/ipfire/location-functions.pl';
 
 my $confignet		= "${General::swroot}/fwhosts/customnetworks";
 my $confighost		= "${General::swroot}/fwhosts/customhosts";
 my $configgrp 		= "${General::swroot}/fwhosts/customgroups";
-my $configgeoipgrp 	= "${General::swroot}/fwhosts/customgeoipgrp";
+my $configlocationgrp 	= "${General::swroot}/fwhosts/customlocationgrp";
 my $configsrv 		= "${General::swroot}/fwhosts/customservices";
 my $configsrvgrp	= "${General::swroot}/fwhosts/customservicegrp";
 my $configccdnet 	= "${General::swroot}/ovpn/ccd.conf";
@@ -64,7 +64,7 @@ my $netsettings		= "${General::swroot}/ethernet/settings";
 &General::readhasharray("$confignet", \%customnetwork);
 &General::readhasharray("$confighost", \%customhost);
 &General::readhasharray("$configgrp", \%customgrp);
-&General::readhasharray("$configgeoipgrp", \%customgeoipgrp);
+&General::readhasharray("$configlocationgrp", \%customlocationgrp);
 &General::readhasharray("$configccdnet", \%ccdnet);
 &General::readhasharray("$configccdhost", \%ccdhost);
 &General::readhasharray("$configipsec", \%ipsecconf);
@@ -72,8 +72,8 @@ my $netsettings		= "${General::swroot}/ethernet/settings";
 &General::readhasharray("$configsrvgrp", \%customservicegrp);
 &General::get_aliases(\%aliases);
 
-# Get all available GeoIP locations.
-my @available_geoip_locations = &get_geoip_locations();
+# Get all available locations.
+my @available_locations = &get_locations();
 
 sub get_srv_prot
 {
@@ -321,11 +321,11 @@ sub get_addresses
 				}
 			}
 		}
-	}elsif ($addr_type ~~ ["cust_geoip_src", "cust_geoip_tgt"] && $value =~ "group:") {
+	}elsif ($addr_type ~~ ["cust_location_src", "cust_location_tgt"] && $value =~ "group:") {
 		$value=substr($value,6);
-		foreach my $grp (sort {$a <=> $b} keys %customgeoipgrp) {
-			if ($customgeoipgrp{$grp}[0] eq $value) {
-				my @address = &get_address($addr_type, $customgeoipgrp{$grp}[2], $type);
+		foreach my $grp (sort {$a <=> $b} keys %customlocationgrp) {
+			if ($customlocationgrp{$grp}[0] eq $value) {
+				my @address = &get_address($addr_type, $customlocationgrp{$grp}[2], $type);
 
 				if (@address) {
 					push(@addresses, @address);
@@ -459,20 +459,20 @@ sub get_address
 			}
 		}
 
-	# Handle rule options with GeoIP as source.
-	} elsif ($key eq "cust_geoip_src") {
-		# Check if the given GeoIP location is available.
-		if(&geoip_location_is_available($value)) {
+	# Handle rule options with a location as source.
+	} elsif ($key eq "cust_location_src") {
+		# Check if the given location is available.
+		if(&location_is_available($value)) {
 			# Get external interface.
 			my $external_interface = &get_external_interface();
 
 			push(@ret, ["-m geoip --src-cc $value", "$external_interface"]);
 		}
 
-	# Handle rule options with GeoIP as target.
-	} elsif ($key eq "cust_geoip_tgt") {
-		# Check if the given GeoIP location is available.
-		if(&geoip_location_is_available($value)) {
+	# Handle rule options with a location as target.
+	} elsif ($key eq "cust_location_tgt") {
+		# Check if the given location is available.
+		if(&location_is_available($value)) {
 			# Get external interface.
 			my $external_interface = &get_external_interface();
 
@@ -617,19 +617,19 @@ sub get_internal_firewall_ip_address
 	return 0;
 }
 
-sub get_geoip_locations() {
-	return &GeoIP::get_geoip_locations();
+sub get_locations() {
+	return &Location::Functions::get_locations();
 }
 
-# Function to check if a database of a given GeoIP location is
+# Function to check if a database of a given location is
 # available.
-sub geoip_location_is_available($) {
-	my ($location) = @_;
+sub location_is_available($) {
+	my ($requested_location) = @_;
 
-	# Loop through the global array of available GeoIP locations.
-	foreach my $geoip_location (@available_geoip_locations) {
+	# Loop through the global array of available locations.
+	foreach my $location (@available_locations) {
 		# Check if the current processed location is the searched one.
-		if($location eq $geoip_location) {
+		if($location eq $requested_location) {
 			# If it is part of the array, return "1" - True.
 			return 1;
 		}
diff --git a/config/firewall/geoipblock b/config/firewall/geoipblock
deleted file mode 100644
index 4d483d3b8..000000000
--- a/config/firewall/geoipblock
+++ /dev/null
@@ -1 +0,0 @@
-GEOIPBLOCK_ENABLED=off
diff --git a/config/firewall/locationblock b/config/firewall/locationblock
new file mode 100644
index 000000000..b933bfc58
--- /dev/null
+++ b/config/firewall/locationblock
@@ -0,0 +1 @@
+LOCATIONBLOCK_ENABLED=off
diff --git a/config/firewall/rules.pl b/config/firewall/rules.pl
index 387a8f92b..cad53a1d7 100644
--- a/config/firewall/rules.pl
+++ b/config/firewall/rules.pl
@@ -25,6 +25,7 @@ use experimental 'smartmatch';
 require '/var/ipfire/general-functions.pl';
 require "${General::swroot}/lang.pl";
 require "/usr/lib/firewall/firewall-lib.pl";
+require "${General::swroot}/location-functions.pl";
 
 # Set to one to enable debugging mode.
 my $DEBUG = 0;
@@ -55,13 +56,17 @@ my %customgrp=();
 my %configinputfw=();
 my %configoutgoingfw=();
 my %confignatfw=();
+my %locationsettings = (
+	"LOCATIONBLOCK_ENABLED" => "off"
+);
+
 my @p2ps=();
 
 my $configfwdfw		= "${General::swroot}/firewall/config";
 my $configinput	    = "${General::swroot}/firewall/input";
 my $configoutgoing  = "${General::swroot}/firewall/outgoing";
 my $p2pfile			= "${General::swroot}/firewall/p2protocols";
-my $geoipfile		= "${General::swroot}/firewall/geoipblock";
+my $locationfile		= "${General::swroot}/firewall/locationblock";
 my $configgrp		= "${General::swroot}/fwhosts/customgroups";
 my $netsettings		= "${General::swroot}/ethernet/settings";
 
@@ -73,6 +78,15 @@ my $netsettings		= "${General::swroot}/ethernet/settings";
 &General::readhasharray($configoutgoing, \%configoutgoingfw);
 &General::readhasharray($configgrp, \%customgrp);
 
+# Check if the location settings file exists
+if (-e "$locationfile") {
+	# Read settings file
+	&General::readhash("$locationfile", \%locationsettings);
+}
+
+# Get all available locations.
+my @locations = &Location::Functions::get_locations();
+
 my @log_limit_options = &make_log_limit_options();
 
 my $POLICY_INPUT_ALLOWED   = 0;
@@ -104,8 +118,8 @@ sub main {
 	# Load P2P block rules.
 	&p2pblock();
 
-	# Load GeoIP block rules.
-	&geoipblock();
+	# Load Location block rules.
+	&locationblock();
 
 	# Reload firewall policy.
 	run("/usr/sbin/firewall-policy");
@@ -597,34 +611,22 @@ sub p2pblock {
 	}
 }
 
-sub geoipblock {
-	my %geoipsettings = ();
-	$geoipsettings{'GEOIPBLOCK_ENABLED'} = "off";
-
+sub locationblock {
 	# Flush iptables chain.
-	run("$IPTABLES -F GEOIPBLOCK");
-
-	# Check if the geoip settings file exists
-	if (-e "$geoipfile") {
-		# Read settings file
-		&General::readhash("$geoipfile", \%geoipsettings);
-	}
+	run("$IPTABLES -F LOCATIONBLOCK");
 
-	# If geoip blocking is not enabled, we are finished here.
-	if ($geoipsettings{'GEOIPBLOCK_ENABLED'} ne "on") {
+	# If location blocking is not enabled, we are finished here.
+	if ($locationsettings{'LOCATIONBLOCK_ENABLED'} ne "on") {
 		# Exit submodule. Process remaining script.
 		return;
 	}
 
-	# Get supported locations.
-	my @locations = &fwlib::get_geoip_locations();
-
-	# Loop through all supported geoip locations and
-	# create iptables rules, if blocking this country
+	# Loop through all supported locations and
+	# create iptables rules, if blocking for this country
 	# is enabled.
 	foreach my $location (@locations) {
-		if(exists $geoipsettings{$location} && $geoipsettings{$location} eq "on") {
-			run("$IPTABLES -A GEOIPBLOCK -m geoip --src-cc $location -j DROP");
+		if(exists $locationsettings{$location} && $locationsettings{$location} eq "on") {
+			run("$IPTABLES -A LOCATIONBLOCK -m geoip --src-cc $location -j DROP");
 		}
 	}
 }
diff --git a/config/menu/50-firewall.menu b/config/menu/50-firewall.menu
index 5ec1f67fc..7f654785b 100644
--- a/config/menu/50-firewall.menu
+++ b/config/menu/50-firewall.menu
@@ -27,10 +27,10 @@
 				'title' => "P2P-Block",
 				'enabled' => 1,
 				};
-    $subfirewall->{'60.geoipblock'} = {
-				'caption' => $Lang::tr{'geoipblock'},
-				'uri' => '/cgi-bin/geoip-block.cgi',
-				'title' => $Lang::tr{'geoipblock'},
+    $subfirewall->{'60.locationblock'} = {
+				'caption' => $Lang::tr{'locationblock'},
+				'uri' => '/cgi-bin/location-block.cgi',
+				'title' => $Lang::tr{'locationblock'},
 				'enabled' => 1,
 				};
     $subfirewall->{'70.wireless'} = {
diff --git a/config/rootfiles/common/GeoIP b/config/rootfiles/common/GeoIP
deleted file mode 100644
index a7cd2e36b..000000000
--- a/config/rootfiles/common/GeoIP
+++ /dev/null
@@ -1,12 +0,0 @@
-#usr/bin/geoip-lookup
-#usr/lib/perl5/site_perl/5.30.0/Geo
-#usr/lib/perl5/site_perl/5.30.0/Geo/IP
-usr/lib/perl5/site_perl/5.30.0/Geo/IP/PurePerl.pm
-#usr/lib/perl5/site_perl/5.30.0/xxxMACHINExxx-linux-thread-multi/auto/Geo
-#usr/lib/perl5/site_perl/5.30.0/xxxMACHINExxx-linux-thread-multi/auto/Geo/IP
-#usr/lib/perl5/site_perl/5.30.0/xxxMACHINExxx-linux-thread-multi/auto/Geo/IP/PurePerl
-#usr/lib/perl5/site_perl/5.30.0/xxxMACHINExxx-linux-thread-multi/auto/Geo/IP/PurePerl/.packlist
-#usr/share/GeoIP
-usr/share/GeoIP/GeoIP.dat
-#usr/share/man/man1/geoip-lookup.1
-#usr/share/man/man3/Geo::IP::PurePerl.3
diff --git a/config/rootfiles/common/Locale-Country b/config/rootfiles/common/Locale-Country
index 07d8144c7..941c18121 100644
--- a/config/rootfiles/common/Locale-Country
+++ b/config/rootfiles/common/Locale-Country
@@ -1,61 +1,59 @@
-#usr/lib/perl5/5.30.0/Locale/Codes
-usr/lib/perl5/5.30.0/Locale/Codes.pm
-usr/lib/perl5/5.30.0/Locale/Codes.pod
-usr/lib/perl5/5.30.0/Locale/Codes/API.pod
-usr/lib/perl5/5.30.0/Locale/Codes/Changes.pod
-usr/lib/perl5/5.30.0/Locale/Codes/Constants.pm
-usr/lib/perl5/5.30.0/Locale/Codes/Constants.pod
-usr/lib/perl5/5.30.0/Locale/Codes/Country.pm
-usr/lib/perl5/5.30.0/Locale/Codes/Country.pod
-usr/lib/perl5/5.30.0/Locale/Codes/Country_Codes.pm
-usr/lib/perl5/5.30.0/Locale/Codes/Country_Retired.pm
-usr/lib/perl5/5.30.0/Locale/Codes/Currency.pm
-usr/lib/perl5/5.30.0/Locale/Codes/Currency.pod
-usr/lib/perl5/5.30.0/Locale/Codes/Currency_Codes.pm
-usr/lib/perl5/5.30.0/Locale/Codes/Currency_Retired.pm
-usr/lib/perl5/5.30.0/Locale/Codes/LangExt.pm
-usr/lib/perl5/5.30.0/Locale/Codes/LangExt.pod
-usr/lib/perl5/5.30.0/Locale/Codes/LangExt_Codes.pm
-usr/lib/perl5/5.30.0/Locale/Codes/LangExt_Retired.pm
-usr/lib/perl5/5.30.0/Locale/Codes/LangFam.pm
-usr/lib/perl5/5.30.0/Locale/Codes/LangFam.pod
-usr/lib/perl5/5.30.0/Locale/Codes/LangFam_Codes.pm
-usr/lib/perl5/5.30.0/Locale/Codes/LangFam_Retired.pm
-usr/lib/perl5/5.30.0/Locale/Codes/LangVar.pm
-usr/lib/perl5/5.30.0/Locale/Codes/LangVar.pod
-usr/lib/perl5/5.30.0/Locale/Codes/LangVar_Codes.pm
-usr/lib/perl5/5.30.0/Locale/Codes/LangVar_Retired.pm
-usr/lib/perl5/5.30.0/Locale/Codes/Language.pm
-usr/lib/perl5/5.30.0/Locale/Codes/Language.pod
-usr/lib/perl5/5.30.0/Locale/Codes/Language_Codes.pm
-usr/lib/perl5/5.30.0/Locale/Codes/Language_Retired.pm
-usr/lib/perl5/5.30.0/Locale/Codes/Script.pm
-usr/lib/perl5/5.30.0/Locale/Codes/Script.pod
-usr/lib/perl5/5.30.0/Locale/Codes/Script_Codes.pm
-usr/lib/perl5/5.30.0/Locale/Codes/Script_Retired.pm
-usr/lib/perl5/5.30.0/Locale/Country.pm
-#usr/lib/perl5/5.30.0/Locale/Country.pod
-usr/lib/perl5/5.30.0/Locale/Currency.pm
-#usr/lib/perl5/5.30.0/Locale/Currency.pod
-usr/lib/perl5/5.30.0/Locale/Language.pm
-#usr/lib/perl5/5.30.0/Locale/Language.pod
-usr/lib/perl5/5.30.0/Locale/Script.pm
-#usr/lib/perl5/5.30.0/Locale/Script.pod
-#usr/lib/perl5/5.30.0/xxxMACHINExxx-linux-thread-multi/auto/Locale
-#usr/lib/perl5/5.30.0/xxxMACHINExxx-linux-thread-multi/auto/Locale/Codes
-#usr/lib/perl5/5.30.0/xxxMACHINExxx-linux-thread-multi/auto/Locale/Codes/.packlist
+#usr/lib/perl5/site_perl/5.30.0/Locale
+#usr/lib/perl5/site_perl/5.30.0/Locale/Codes
+usr/lib/perl5/site_perl/5.30.0/Locale/Codes.pm
+#usr/lib/perl5/site_perl/5.30.0/Locale/Codes.pod
+#usr/lib/perl5/site_perl/5.30.0/Locale/Codes/Changes.pod
+usr/lib/perl5/site_perl/5.30.0/Locale/Codes/Constants.pm
+usr/lib/perl5/site_perl/5.30.0/Locale/Codes/Country.pm
+#usr/lib/perl5/site_perl/5.30.0/Locale/Codes/Country.pod
+usr/lib/perl5/site_perl/5.30.0/Locale/Codes/Country_Codes.pm
+usr/lib/perl5/site_perl/5.30.0/Locale/Codes/Country_Retired.pm
+usr/lib/perl5/site_perl/5.30.0/Locale/Codes/Currency.pm
+#usr/lib/perl5/site_perl/5.30.0/Locale/Codes/Currency.pod
+usr/lib/perl5/site_perl/5.30.0/Locale/Codes/Currency_Codes.pm
+usr/lib/perl5/site_perl/5.30.0/Locale/Codes/Currency_Retired.pm
+usr/lib/perl5/site_perl/5.30.0/Locale/Codes/LangExt.pm
+#usr/lib/perl5/site_perl/5.30.0/Locale/Codes/LangExt.pod
+usr/lib/perl5/site_perl/5.30.0/Locale/Codes/LangExt_Codes.pm
+usr/lib/perl5/site_perl/5.30.0/Locale/Codes/LangExt_Retired.pm
+usr/lib/perl5/site_perl/5.30.0/Locale/Codes/LangFam.pm
+usr/lib/perl5/site_perl/5.30.0/Locale/Codes/LangFam.pod
+usr/lib/perl5/site_perl/5.30.0/Locale/Codes/LangFam_Codes.pm
+usr/lib/perl5/site_perl/5.30.0/Locale/Codes/LangFam_Retired.pm
+usr/lib/perl5/site_perl/5.30.0/Locale/Codes/LangVar.pm
+#usr/lib/perl5/site_perl/5.30.0/Locale/Codes/LangVar.pod
+usr/lib/perl5/site_perl/5.30.0/Locale/Codes/LangVar_Codes.pm
+usr/lib/perl5/site_perl/5.30.0/Locale/Codes/LangVar_Retired.pm
+usr/lib/perl5/site_perl/5.30.0/Locale/Codes/Language.pm
+usr/lib/perl5/site_perl/5.30.0/Locale/Codes/Language.pod
+usr/lib/perl5/site_perl/5.30.0/Locale/Codes/Language_Codes.pm
+usr/lib/perl5/site_perl/5.30.0/Locale/Codes/Language_Retired.pm
+usr/lib/perl5/site_perl/5.30.0/Locale/Codes/Script.pm
+#usr/lib/perl5/site_perl/5.30.0/Locale/Codes/Script.pod
+usr/lib/perl5/site_perl/5.30.0/Locale/Codes/Script_Codes.pm
+usr/lib/perl5/site_perl/5.30.0/Locale/Codes/Script_Retired.pm
+#usr/lib/perl5/site_perl/5.30.0/Locale/Codes/Types.pod
+usr/lib/perl5/site_perl/5.30.0/Locale/Country.pm
+#usr/lib/perl5/site_perl/5.30.0/Locale/Country.pod
+usr/lib/perl5/site_perl/5.30.0/Locale/Currency.pm
+#usr/lib/perl5/site_perl/5.30.0/Locale/Currency.pod
+usr/lib/perl5/site_perl/5.30.0/Locale/Language.pm
+#usr/lib/perl5/site_perl/5.30.0/Locale/Language.pod
+usr/lib/perl5/site_perl/5.30.0/Locale/Script.pm
+#usr/lib/perl5/site_perl/5.30.0/Locale/Script.pod
+#usr/lib/perl5/site_perl/5.30.0/xxxMACHINExxx-linux-thread-multi/auto/Locale
+#usr/lib/perl5/site_perl/5.30.0/xxxMACHINExxx-linux-thread-multi/auto/Locale/Codes
+#usr/lib/perl5/site_perl/5.30.0/xxxMACHINExxx-linux-thread-multi/auto/Locale/Codes/.packlist
 #usr/share/man/man3/Locale::Codes.3
-#usr/share/man/man3/Locale::Codes::API.3
 #usr/share/man/man3/Locale::Codes::Changes.3
-#usr/share/man/man3/Locale::Codes::Constants.3
 #usr/share/man/man3/Locale::Codes::Country.3
 #usr/share/man/man3/Locale::Codes::Currency.3
 #usr/share/man/man3/Locale::Codes::LangExt.3
 #usr/share/man/man3/Locale::Codes::LangFam.3
-#usr/share/man/man3/Locale::Codes::LangFam_Retired.3
 #usr/share/man/man3/Locale::Codes::LangVar.3
 #usr/share/man/man3/Locale::Codes::Language.3
 #usr/share/man/man3/Locale::Codes::Script.3
+#usr/share/man/man3/Locale::Codes::Types.3
 #usr/share/man/man3/Locale::Country.3
 #usr/share/man/man3/Locale::Currency.3
 #usr/share/man/man3/Locale::Language.3
diff --git a/config/rootfiles/common/aarch64/initscripts b/config/rootfiles/common/aarch64/initscripts
index 330bb532e..69fef394b 100644
--- a/config/rootfiles/common/aarch64/initscripts
+++ b/config/rootfiles/common/aarch64/initscripts
@@ -66,7 +66,6 @@ etc/rc.d/init.d/networking/red.up/50-ovpn
 etc/rc.d/init.d/networking/red.up/98-leds
 etc/rc.d/init.d/networking/red.up/99-beep
 etc/rc.d/init.d/networking/red.up/99-fireinfo
-etc/rc.d/init.d/networking/red.up/99-geoip-database
 etc/rc.d/init.d/networking/red.up/99-pakfire-update
 etc/rc.d/init.d/networking/wpa_supplicant.exe
 etc/rc.d/init.d/ntp
diff --git a/config/rootfiles/common/aarch64/stage2 b/config/rootfiles/common/aarch64/stage2
index 77c8e97b9..8556c9c28 100644
--- a/config/rootfiles/common/aarch64/stage2
+++ b/config/rootfiles/common/aarch64/stage2
@@ -94,6 +94,7 @@ usr/local/bin/connscheduler
 usr/local/bin/consort.sh
 usr/local/bin/convert-dns-settings
 usr/local/bin/convert-ovpn
+usr/local/bin/convert-to-location
 usr/local/bin/filesystem-cleanup
 usr/local/bin/hddshutdown
 usr/local/bin/ipsec-interfaces
@@ -108,7 +109,7 @@ usr/local/bin/timecheck
 usr/local/bin/timezone-transition
 usr/local/bin/update-ids-ruleset
 usr/local/bin/update-lang-cache
-usr/local/bin/xt_geoip_update
+usr/local/bin/update-location-database
 #usr/local/include
 #usr/local/lib
 #usr/local/lib/sse2
@@ -174,7 +175,6 @@ var/run
 #var/spool
 var/tmp
 run
-usr/local/bin/xt_geoip_build
 dev/console
 dev/null
 tmp
diff --git a/config/rootfiles/common/armv5tel/initscripts b/config/rootfiles/common/armv5tel/initscripts
index 330bb532e..69fef394b 100644
--- a/config/rootfiles/common/armv5tel/initscripts
+++ b/config/rootfiles/common/armv5tel/initscripts
@@ -66,7 +66,6 @@ etc/rc.d/init.d/networking/red.up/50-ovpn
 etc/rc.d/init.d/networking/red.up/98-leds
 etc/rc.d/init.d/networking/red.up/99-beep
 etc/rc.d/init.d/networking/red.up/99-fireinfo
-etc/rc.d/init.d/networking/red.up/99-geoip-database
 etc/rc.d/init.d/networking/red.up/99-pakfire-update
 etc/rc.d/init.d/networking/wpa_supplicant.exe
 etc/rc.d/init.d/ntp
diff --git a/config/rootfiles/common/configroot b/config/rootfiles/common/configroot
index 664247b12..1027b5139 100644
--- a/config/rootfiles/common/configroot
+++ b/config/rootfiles/common/configroot
@@ -59,15 +59,15 @@ var/ipfire/extrahd
 #var/ipfire/extrahd/settings
 var/ipfire/firewall
 #var/ipfire/firewall/config
-#var/ipfire/firewall/geoipblock
 #var/ipfire/firewall/input
+#var/ipfire/firewall/locationblock
 #var/ipfire/firewall/outgoing
 #var/ipfire/firewall/p2protocols
 #var/ipfire/firewall/settings
 var/ipfire/fwhosts
-#var/ipfire/fwhosts/customgeoipgrp
 #var/ipfire/fwhosts/customgroups
 #var/ipfire/fwhosts/customhosts
+#var/ipfire/fwhosts/customlocationgrp
 #var/ipfire/fwhosts/customnetworks
 #var/ipfire/fwhosts/customservicegrp
 #var/ipfire/fwhosts/customservices
@@ -77,9 +77,9 @@ var/ipfire/fwlogs
 #var/ipfire/fwlogs/ipsettings
 #var/ipfire/fwlogs/portsettings
 var/ipfire/general-functions.pl
-var/ipfire/geoip-functions.pl
 var/ipfire/graphs.pl
 var/ipfire/header.pl
+var/ipfire/location-functions.pl
 var/ipfire/ids-functions.pl
 var/ipfire/isdn
 #var/ipfire/isdn/settings
diff --git a/config/rootfiles/common/geoip-database b/config/rootfiles/common/geoip-database
deleted file mode 100644
index 6e4bbdb2e..000000000
--- a/config/rootfiles/common/geoip-database
+++ /dev/null
@@ -1,523 +0,0 @@
-usr/share/GeoIP/GeoIP.dat
-usr/share/xt_geoip/A1.iv4
-usr/share/xt_geoip/A1.iv6
-usr/share/xt_geoip/A2.iv4
-usr/share/xt_geoip/A2.iv6
-usr/share/xt_geoip/AD.iv4
-usr/share/xt_geoip/AD.iv6
-usr/share/xt_geoip/AE.iv4
-usr/share/xt_geoip/AE.iv6
-usr/share/xt_geoip/AF.iv4
-usr/share/xt_geoip/AF.iv6
-usr/share/xt_geoip/AG.iv4
-usr/share/xt_geoip/AG.iv6
-usr/share/xt_geoip/AI.iv4
-usr/share/xt_geoip/AI.iv6
-usr/share/xt_geoip/AL.iv4
-usr/share/xt_geoip/AL.iv6
-usr/share/xt_geoip/AM.iv4
-usr/share/xt_geoip/AM.iv6
-usr/share/xt_geoip/AO.iv4
-usr/share/xt_geoip/AO.iv6
-usr/share/xt_geoip/AQ.iv4
-usr/share/xt_geoip/AQ.iv6
-usr/share/xt_geoip/AR.iv4
-usr/share/xt_geoip/AR.iv6
-usr/share/xt_geoip/AS.iv4
-usr/share/xt_geoip/AS.iv6
-usr/share/xt_geoip/AT.iv4
-usr/share/xt_geoip/AT.iv6
-usr/share/xt_geoip/AU.iv4
-usr/share/xt_geoip/AU.iv6
-usr/share/xt_geoip/AW.iv4
-usr/share/xt_geoip/AW.iv6
-usr/share/xt_geoip/AX.iv4
-usr/share/xt_geoip/AX.iv6
-usr/share/xt_geoip/AZ.iv4
-usr/share/xt_geoip/AZ.iv6
-usr/share/xt_geoip/BA.iv4
-usr/share/xt_geoip/BA.iv6
-usr/share/xt_geoip/BB.iv4
-usr/share/xt_geoip/BB.iv6
-usr/share/xt_geoip/BD.iv4
-usr/share/xt_geoip/BD.iv6
-usr/share/xt_geoip/BE.iv4
-usr/share/xt_geoip/BE.iv6
-usr/share/xt_geoip/BF.iv4
-usr/share/xt_geoip/BF.iv6
-usr/share/xt_geoip/BG.iv4
-usr/share/xt_geoip/BG.iv6
-usr/share/xt_geoip/BH.iv4
-usr/share/xt_geoip/BH.iv6
-usr/share/xt_geoip/BI.iv4
-usr/share/xt_geoip/BI.iv6
-usr/share/xt_geoip/BJ.iv4
-usr/share/xt_geoip/BJ.iv6
-usr/share/xt_geoip/BL.iv4
-usr/share/xt_geoip/BL.iv6
-usr/share/xt_geoip/BM.iv4
-usr/share/xt_geoip/BM.iv6
-usr/share/xt_geoip/BN.iv4
-usr/share/xt_geoip/BN.iv6
-usr/share/xt_geoip/BO.iv4
-usr/share/xt_geoip/BO.iv6
-usr/share/xt_geoip/BQ.iv4
-usr/share/xt_geoip/BQ.iv6
-usr/share/xt_geoip/BR.iv4
-usr/share/xt_geoip/BR.iv6
-usr/share/xt_geoip/BS.iv4
-usr/share/xt_geoip/BS.iv6
-usr/share/xt_geoip/BT.iv4
-usr/share/xt_geoip/BT.iv6
-usr/share/xt_geoip/BV.iv4
-usr/share/xt_geoip/BV.iv6
-usr/share/xt_geoip/BW.iv4
-usr/share/xt_geoip/BW.iv6
-usr/share/xt_geoip/BY.iv4
-usr/share/xt_geoip/BY.iv6
-usr/share/xt_geoip/BZ.iv4
-usr/share/xt_geoip/BZ.iv6
-usr/share/xt_geoip/CA.iv4
-usr/share/xt_geoip/CA.iv6
-usr/share/xt_geoip/CC.iv4
-usr/share/xt_geoip/CC.iv6
-usr/share/xt_geoip/CD.iv4
-usr/share/xt_geoip/CD.iv6
-usr/share/xt_geoip/CF.iv4
-usr/share/xt_geoip/CF.iv6
-usr/share/xt_geoip/CG.iv4
-usr/share/xt_geoip/CG.iv6
-usr/share/xt_geoip/CH.iv4
-usr/share/xt_geoip/CH.iv6
-usr/share/xt_geoip/CI.iv4
-usr/share/xt_geoip/CI.iv6
-usr/share/xt_geoip/CK.iv4
-usr/share/xt_geoip/CK.iv6
-usr/share/xt_geoip/CL.iv4
-usr/share/xt_geoip/CL.iv6
-usr/share/xt_geoip/CM.iv4
-usr/share/xt_geoip/CM.iv6
-usr/share/xt_geoip/CN.iv4
-usr/share/xt_geoip/CN.iv6
-usr/share/xt_geoip/CO.iv4
-usr/share/xt_geoip/CO.iv6
-usr/share/xt_geoip/CR.iv4
-usr/share/xt_geoip/CR.iv6
-usr/share/xt_geoip/CU.iv4
-usr/share/xt_geoip/CU.iv6
-usr/share/xt_geoip/CV.iv4
-usr/share/xt_geoip/CV.iv6
-usr/share/xt_geoip/CW.iv4
-usr/share/xt_geoip/CW.iv6
-usr/share/xt_geoip/CX.iv4
-usr/share/xt_geoip/CX.iv6
-usr/share/xt_geoip/CY.iv4
-usr/share/xt_geoip/CY.iv6
-usr/share/xt_geoip/CZ.iv4
-usr/share/xt_geoip/CZ.iv6
-usr/share/xt_geoip/DE.iv4
-usr/share/xt_geoip/DE.iv6
-usr/share/xt_geoip/DJ.iv4
-usr/share/xt_geoip/DJ.iv6
-usr/share/xt_geoip/DK.iv4
-usr/share/xt_geoip/DK.iv6
-usr/share/xt_geoip/DM.iv4
-usr/share/xt_geoip/DM.iv6
-usr/share/xt_geoip/DO.iv4
-usr/share/xt_geoip/DO.iv6
-usr/share/xt_geoip/DZ.iv4
-usr/share/xt_geoip/DZ.iv6
-usr/share/xt_geoip/EC.iv4
-usr/share/xt_geoip/EC.iv6
-usr/share/xt_geoip/EE.iv4
-usr/share/xt_geoip/EE.iv6
-usr/share/xt_geoip/EG.iv4
-usr/share/xt_geoip/EG.iv6
-usr/share/xt_geoip/EH.iv4
-usr/share/xt_geoip/EH.iv6
-usr/share/xt_geoip/ER.iv4
-usr/share/xt_geoip/ER.iv6
-usr/share/xt_geoip/ES.iv4
-usr/share/xt_geoip/ES.iv6
-usr/share/xt_geoip/ET.iv4
-usr/share/xt_geoip/ET.iv6
-usr/share/xt_geoip/EU.iv4
-usr/share/xt_geoip/EU.iv6
-usr/share/xt_geoip/FI.iv4
-usr/share/xt_geoip/FI.iv6
-usr/share/xt_geoip/FJ.iv4
-usr/share/xt_geoip/FJ.iv6
-usr/share/xt_geoip/FK.iv4
-usr/share/xt_geoip/FK.iv6
-usr/share/xt_geoip/FM.iv4
-usr/share/xt_geoip/FM.iv6
-usr/share/xt_geoip/FO.iv4
-usr/share/xt_geoip/FO.iv6
-usr/share/xt_geoip/FR.iv4
-usr/share/xt_geoip/FR.iv6
-usr/share/xt_geoip/GA.iv4
-usr/share/xt_geoip/GA.iv6
-usr/share/xt_geoip/GB.iv4
-usr/share/xt_geoip/GB.iv6
-usr/share/xt_geoip/GD.iv4
-usr/share/xt_geoip/GD.iv6
-usr/share/xt_geoip/GE.iv4
-usr/share/xt_geoip/GE.iv6
-usr/share/xt_geoip/GF.iv4
-usr/share/xt_geoip/GF.iv6
-usr/share/xt_geoip/GG.iv4
-usr/share/xt_geoip/GG.iv6
-usr/share/xt_geoip/GH.iv4
-usr/share/xt_geoip/GH.iv6
-usr/share/xt_geoip/GI.iv4
-usr/share/xt_geoip/GI.iv6
-usr/share/xt_geoip/GL.iv4
-usr/share/xt_geoip/GL.iv6
-usr/share/xt_geoip/GM.iv4
-usr/share/xt_geoip/GM.iv6
-usr/share/xt_geoip/GN.iv4
-usr/share/xt_geoip/GN.iv6
-usr/share/xt_geoip/GP.iv4
-usr/share/xt_geoip/GP.iv6
-usr/share/xt_geoip/GQ.iv4
-usr/share/xt_geoip/GQ.iv6
-usr/share/xt_geoip/GR.iv4
-usr/share/xt_geoip/GR.iv6
-usr/share/xt_geoip/GS.iv4
-usr/share/xt_geoip/GS.iv6
-usr/share/xt_geoip/GT.iv4
-usr/share/xt_geoip/GT.iv6
-usr/share/xt_geoip/GU.iv4
-usr/share/xt_geoip/GU.iv6
-usr/share/xt_geoip/GW.iv4
-usr/share/xt_geoip/GW.iv6
-usr/share/xt_geoip/GY.iv4
-usr/share/xt_geoip/GY.iv6
-usr/share/xt_geoip/HK.iv4
-usr/share/xt_geoip/HK.iv6
-usr/share/xt_geoip/HM.iv4
-usr/share/xt_geoip/HM.iv6
-usr/share/xt_geoip/HN.iv4
-usr/share/xt_geoip/HN.iv6
-usr/share/xt_geoip/HR.iv4
-usr/share/xt_geoip/HR.iv6
-usr/share/xt_geoip/HT.iv4
-usr/share/xt_geoip/HT.iv6
-usr/share/xt_geoip/HU.iv4
-usr/share/xt_geoip/HU.iv6
-usr/share/xt_geoip/ID.iv4
-usr/share/xt_geoip/ID.iv6
-usr/share/xt_geoip/IE.iv4
-usr/share/xt_geoip/IE.iv6
-usr/share/xt_geoip/IL.iv4
-usr/share/xt_geoip/IL.iv6
-usr/share/xt_geoip/IM.iv4
-usr/share/xt_geoip/IM.iv6
-usr/share/xt_geoip/IN.iv4
-usr/share/xt_geoip/IN.iv6
-usr/share/xt_geoip/IO.iv4
-usr/share/xt_geoip/IO.iv6
-usr/share/xt_geoip/IQ.iv4
-usr/share/xt_geoip/IQ.iv6
-usr/share/xt_geoip/IR.iv4
-usr/share/xt_geoip/IR.iv6
-usr/share/xt_geoip/IS.iv4
-usr/share/xt_geoip/IS.iv6
-usr/share/xt_geoip/IT.iv4
-usr/share/xt_geoip/IT.iv6
-usr/share/xt_geoip/JE.iv4
-usr/share/xt_geoip/JE.iv6
-usr/share/xt_geoip/JM.iv4
-usr/share/xt_geoip/JM.iv6
-usr/share/xt_geoip/JO.iv4
-usr/share/xt_geoip/JO.iv6
-usr/share/xt_geoip/JP.iv4
-usr/share/xt_geoip/JP.iv6
-usr/share/xt_geoip/KE.iv4
-usr/share/xt_geoip/KE.iv6
-usr/share/xt_geoip/KG.iv4
-usr/share/xt_geoip/KG.iv6
-usr/share/xt_geoip/KH.iv4
-usr/share/xt_geoip/KH.iv6
-usr/share/xt_geoip/KI.iv4
-usr/share/xt_geoip/KI.iv6
-usr/share/xt_geoip/KM.iv4
-usr/share/xt_geoip/KM.iv6
-usr/share/xt_geoip/KN.iv4
-usr/share/xt_geoip/KN.iv6
-usr/share/xt_geoip/KP.iv4
-usr/share/xt_geoip/KP.iv6
-usr/share/xt_geoip/KR.iv4
-usr/share/xt_geoip/KR.iv6
-usr/share/xt_geoip/KW.iv4
-usr/share/xt_geoip/KW.iv6
-usr/share/xt_geoip/KY.iv4
-usr/share/xt_geoip/KY.iv6
-usr/share/xt_geoip/KZ.iv4
-usr/share/xt_geoip/KZ.iv6
-usr/share/xt_geoip/LA.iv4
-usr/share/xt_geoip/LA.iv6
-usr/share/xt_geoip/LB.iv4
-usr/share/xt_geoip/LB.iv6
-usr/share/xt_geoip/LC.iv4
-usr/share/xt_geoip/LC.iv6
-usr/share/xt_geoip/LI.iv4
-usr/share/xt_geoip/LI.iv6
-usr/share/xt_geoip/LK.iv4
-usr/share/xt_geoip/LK.iv6
-usr/share/xt_geoip/LR.iv4
-usr/share/xt_geoip/LR.iv6
-usr/share/xt_geoip/LS.iv4
-usr/share/xt_geoip/LS.iv6
-usr/share/xt_geoip/LT.iv4
-usr/share/xt_geoip/LT.iv6
-usr/share/xt_geoip/LU.iv4
-usr/share/xt_geoip/LU.iv6
-usr/share/xt_geoip/LV.iv4
-usr/share/xt_geoip/LV.iv6
-usr/share/xt_geoip/LY.iv4
-usr/share/xt_geoip/LY.iv6
-usr/share/xt_geoip/MA.iv4
-usr/share/xt_geoip/MA.iv6
-usr/share/xt_geoip/MC.iv4
-usr/share/xt_geoip/MC.iv6
-usr/share/xt_geoip/MD.iv4
-usr/share/xt_geoip/MD.iv6
-usr/share/xt_geoip/ME.iv4
-usr/share/xt_geoip/ME.iv6
-usr/share/xt_geoip/MF.iv4
-usr/share/xt_geoip/MF.iv6
-usr/share/xt_geoip/MG.iv4
-usr/share/xt_geoip/MG.iv6
-usr/share/xt_geoip/MH.iv4
-usr/share/xt_geoip/MH.iv6
-usr/share/xt_geoip/MK.iv4
-usr/share/xt_geoip/MK.iv6
-usr/share/xt_geoip/ML.iv4
-usr/share/xt_geoip/ML.iv6
-usr/share/xt_geoip/MM.iv4
-usr/share/xt_geoip/MM.iv6
-usr/share/xt_geoip/MN.iv4
-usr/share/xt_geoip/MN.iv6
-usr/share/xt_geoip/MO.iv4
-usr/share/xt_geoip/MO.iv6
-usr/share/xt_geoip/MP.iv4
-usr/share/xt_geoip/MP.iv6
-usr/share/xt_geoip/MQ.iv4
-usr/share/xt_geoip/MQ.iv6
-usr/share/xt_geoip/MR.iv4
-usr/share/xt_geoip/MR.iv6
-usr/share/xt_geoip/MS.iv4
-usr/share/xt_geoip/MS.iv6
-usr/share/xt_geoip/MT.iv4
-usr/share/xt_geoip/MT.iv6
-usr/share/xt_geoip/MU.iv4
-usr/share/xt_geoip/MU.iv6
-usr/share/xt_geoip/MV.iv4
-usr/share/xt_geoip/MV.iv6
-usr/share/xt_geoip/MW.iv4
-usr/share/xt_geoip/MW.iv6
-usr/share/xt_geoip/MX.iv4
-usr/share/xt_geoip/MX.iv6
-usr/share/xt_geoip/MY.iv4
-usr/share/xt_geoip/MY.iv6
-usr/share/xt_geoip/MZ.iv4
-usr/share/xt_geoip/MZ.iv6
-usr/share/xt_geoip/NA.iv4
-usr/share/xt_geoip/NA.iv6
-usr/share/xt_geoip/NC.iv4
-usr/share/xt_geoip/NC.iv6
-usr/share/xt_geoip/NE.iv4
-usr/share/xt_geoip/NE.iv6
-usr/share/xt_geoip/NF.iv4
-usr/share/xt_geoip/NF.iv6
-usr/share/xt_geoip/NG.iv4
-usr/share/xt_geoip/NG.iv6
-usr/share/xt_geoip/NI.iv4
-usr/share/xt_geoip/NI.iv6
-usr/share/xt_geoip/NL.iv4
-usr/share/xt_geoip/NL.iv6
-usr/share/xt_geoip/NO.iv4
-usr/share/xt_geoip/NO.iv6
-usr/share/xt_geoip/NP.iv4
-usr/share/xt_geoip/NP.iv6
-usr/share/xt_geoip/NR.iv4
-usr/share/xt_geoip/NR.iv6
-usr/share/xt_geoip/NU.iv4
-usr/share/xt_geoip/NU.iv6
-usr/share/xt_geoip/NZ.iv4
-usr/share/xt_geoip/NZ.iv6
-usr/share/xt_geoip/O1.iv4
-usr/share/xt_geoip/O1.iv6
-usr/share/xt_geoip/OM.iv4
-usr/share/xt_geoip/OM.iv6
-usr/share/xt_geoip/PA.iv4
-usr/share/xt_geoip/PA.iv6
-usr/share/xt_geoip/PE.iv4
-usr/share/xt_geoip/PE.iv6
-usr/share/xt_geoip/PF.iv4
-usr/share/xt_geoip/PF.iv6
-usr/share/xt_geoip/PG.iv4
-usr/share/xt_geoip/PG.iv6
-usr/share/xt_geoip/PH.iv4
-usr/share/xt_geoip/PH.iv6
-usr/share/xt_geoip/PK.iv4
-usr/share/xt_geoip/PK.iv6
-usr/share/xt_geoip/PL.iv4
-usr/share/xt_geoip/PL.iv6
-usr/share/xt_geoip/PM.iv4
-usr/share/xt_geoip/PM.iv6
-usr/share/xt_geoip/PN.iv4
-usr/share/xt_geoip/PN.iv6
-usr/share/xt_geoip/PR.iv4
-usr/share/xt_geoip/PR.iv6
-usr/share/xt_geoip/PS.iv4
-usr/share/xt_geoip/PS.iv6
-usr/share/xt_geoip/PT.iv4
-usr/share/xt_geoip/PT.iv6
-usr/share/xt_geoip/PW.iv4
-usr/share/xt_geoip/PW.iv6
-usr/share/xt_geoip/PY.iv4
-usr/share/xt_geoip/PY.iv6
-usr/share/xt_geoip/QA.iv4
-usr/share/xt_geoip/QA.iv6
-usr/share/xt_geoip/RE.iv4
-usr/share/xt_geoip/RE.iv6
-usr/share/xt_geoip/RO.iv4
-usr/share/xt_geoip/RO.iv6
-usr/share/xt_geoip/RS.iv4
-usr/share/xt_geoip/RS.iv6
-usr/share/xt_geoip/RU.iv4
-usr/share/xt_geoip/RU.iv6
-usr/share/xt_geoip/RW.iv4
-usr/share/xt_geoip/RW.iv6
-usr/share/xt_geoip/SA.iv4
-usr/share/xt_geoip/SA.iv6
-usr/share/xt_geoip/SB.iv4
-usr/share/xt_geoip/SB.iv6
-usr/share/xt_geoip/SC.iv4
-usr/share/xt_geoip/SC.iv6
-usr/share/xt_geoip/SD.iv4
-usr/share/xt_geoip/SD.iv6
-usr/share/xt_geoip/SE.iv4
-usr/share/xt_geoip/SE.iv6
-usr/share/xt_geoip/SG.iv4
-usr/share/xt_geoip/SG.iv6
-usr/share/xt_geoip/SH.iv4
-usr/share/xt_geoip/SH.iv6
-usr/share/xt_geoip/SI.iv4
-usr/share/xt_geoip/SI.iv6
-usr/share/xt_geoip/SJ.iv4
-usr/share/xt_geoip/SJ.iv6
-usr/share/xt_geoip/SK.iv4
-usr/share/xt_geoip/SK.iv6
-usr/share/xt_geoip/SL.iv4
-usr/share/xt_geoip/SL.iv6
-usr/share/xt_geoip/SM.iv4
-usr/share/xt_geoip/SM.iv6
-usr/share/xt_geoip/SN.iv4
-usr/share/xt_geoip/SN.iv6
-usr/share/xt_geoip/SO.iv4
-usr/share/xt_geoip/SO.iv6
-usr/share/xt_geoip/SR.iv4
-usr/share/xt_geoip/SR.iv6
-usr/share/xt_geoip/SS.iv4
-usr/share/xt_geoip/SS.iv6
-usr/share/xt_geoip/ST.iv4
-usr/share/xt_geoip/ST.iv6
-usr/share/xt_geoip/SV.iv4
-usr/share/xt_geoip/SV.iv6
-usr/share/xt_geoip/SX.iv4
-usr/share/xt_geoip/SX.iv6
-usr/share/xt_geoip/SY.iv4
-usr/share/xt_geoip/SY.iv6
-usr/share/xt_geoip/SZ.iv4
-usr/share/xt_geoip/SZ.iv6
-usr/share/xt_geoip/TC.iv4
-usr/share/xt_geoip/TC.iv6
-usr/share/xt_geoip/TD.iv4
-usr/share/xt_geoip/TD.iv6
-usr/share/xt_geoip/TF.iv4
-usr/share/xt_geoip/TF.iv6
-usr/share/xt_geoip/TG.iv4
-usr/share/xt_geoip/TG.iv6
-usr/share/xt_geoip/TH.iv4
-usr/share/xt_geoip/TH.iv6
-usr/share/xt_geoip/TJ.iv4
-usr/share/xt_geoip/TJ.iv6
-usr/share/xt_geoip/TK.iv4
-usr/share/xt_geoip/TK.iv6
-usr/share/xt_geoip/TL.iv4
-usr/share/xt_geoip/TL.iv6
-usr/share/xt_geoip/TM.iv4
-usr/share/xt_geoip/TM.iv6
-usr/share/xt_geoip/TN.iv4
-usr/share/xt_geoip/TN.iv6
-usr/share/xt_geoip/TO.iv4
-usr/share/xt_geoip/TO.iv6
-usr/share/xt_geoip/TR.iv4
-usr/share/xt_geoip/TR.iv6
-usr/share/xt_geoip/TT.iv4
-usr/share/xt_geoip/TT.iv6
-usr/share/xt_geoip/TV.iv4
-usr/share/xt_geoip/TV.iv6
-usr/share/xt_geoip/TW.iv4
-usr/share/xt_geoip/TW.iv6
-usr/share/xt_geoip/TZ.iv4
-usr/share/xt_geoip/TZ.iv6
-usr/share/xt_geoip/UA.iv4
-usr/share/xt_geoip/UA.iv6
-usr/share/xt_geoip/UG.iv4
-usr/share/xt_geoip/UG.iv6
-usr/share/xt_geoip/UM.iv4
-usr/share/xt_geoip/UM.iv6
-usr/share/xt_geoip/US.iv4
-usr/share/xt_geoip/US.iv6
-usr/share/xt_geoip/UY.iv4
-usr/share/xt_geoip/UY.iv6
-usr/share/xt_geoip/UZ.iv4
-usr/share/xt_geoip/UZ.iv6
-usr/share/xt_geoip/VA.iv4
-usr/share/xt_geoip/VA.iv6
-usr/share/xt_geoip/VC.iv4
-usr/share/xt_geoip/VC.iv6
-usr/share/xt_geoip/VE.iv4
-usr/share/xt_geoip/VE.iv6
-usr/share/xt_geoip/VG.iv4
-usr/share/xt_geoip/VG.iv6
-usr/share/xt_geoip/VI.iv4
-usr/share/xt_geoip/VI.iv6
-usr/share/xt_geoip/VN.iv4
-usr/share/xt_geoip/VN.iv6
-usr/share/xt_geoip/VU.iv4
-usr/share/xt_geoip/VU.iv6
-usr/share/xt_geoip/WF.iv4
-usr/share/xt_geoip/WF.iv6
-usr/share/xt_geoip/WS.iv4
-usr/share/xt_geoip/WS.iv6
-usr/share/xt_geoip/XK.iv4
-usr/share/xt_geoip/XK.iv6
-usr/share/xt_geoip/YE.iv4
-usr/share/xt_geoip/YE.iv6
-usr/share/xt_geoip/YT.iv4
-usr/share/xt_geoip/YT.iv6
-usr/share/xt_geoip/ZA.iv4
-usr/share/xt_geoip/ZA.iv6
-usr/share/xt_geoip/ZM.iv4
-usr/share/xt_geoip/ZM.iv6
-usr/share/xt_geoip/ZW.iv4
-usr/share/xt_geoip/ZW.iv6
-#var/lib/GeoIP
-var/lib/GeoIP/COPYRIGHT.txt
-var/lib/GeoIP/GeoLite2-Country-Blocks-IPv4.csv
-var/lib/GeoIP/GeoLite2-Country-Blocks-IPv6.csv
-var/lib/GeoIP/GeoLite2-Country-Locations-de.csv
-var/lib/GeoIP/GeoLite2-Country-Locations-en.csv
-var/lib/GeoIP/GeoLite2-Country-Locations-es.csv
-var/lib/GeoIP/GeoLite2-Country-Locations-fr.csv
-var/lib/GeoIP/GeoLite2-Country-Locations-ja.csv
-var/lib/GeoIP/GeoLite2-Country-Locations-pt-BR.csv
-var/lib/GeoIP/GeoLite2-Country-Locations-ru.csv
-var/lib/GeoIP/GeoLite2-Country-Locations-zh-CN.csv
-var/lib/GeoIP/LICENSE.txt
-var/lib/GeoIP/README.txt
diff --git a/config/rootfiles/common/geoip-generator b/config/rootfiles/common/geoip-generator
deleted file mode 100644
index 6ff83c036..000000000
--- a/config/rootfiles/common/geoip-generator
+++ /dev/null
@@ -1,16 +0,0 @@
-#usr/bin/geoiplookup
-#usr/bin/geoiplookup6
-#usr/include/GeoIP.h
-#usr/include/GeoIPCity.h
-#usr/lib/libGeoIP.a
-#usr/lib/libGeoIP.la
-usr/lib/libGeoIP.so
-usr/lib/libGeoIP.so.1
-usr/lib/libGeoIP.so.1.6.12
-#usr/lib/pkgconfig/geoip.pc
-#usr/share/GeoIP/bin
-usr/share/GeoIP/bin/countryInfo.txt
-usr/share/GeoIP/bin/geoip-generator
-usr/share/GeoIP/bin/geolite2-to-legacy-csv.sh
-#usr/share/man/man1/geoiplookup.1
-#usr/share/man/man1/geoiplookup6.1
diff --git a/config/rootfiles/common/i586/initscripts b/config/rootfiles/common/i586/initscripts
index c0fc18705..b4e944342 100644
--- a/config/rootfiles/common/i586/initscripts
+++ b/config/rootfiles/common/i586/initscripts
@@ -66,7 +66,6 @@ etc/rc.d/init.d/networking/red.up/50-ovpn
 etc/rc.d/init.d/networking/red.up/98-leds
 etc/rc.d/init.d/networking/red.up/99-beep
 etc/rc.d/init.d/networking/red.up/99-fireinfo
-etc/rc.d/init.d/networking/red.up/99-geoip-database
 etc/rc.d/init.d/networking/red.up/99-pakfire-update
 etc/rc.d/init.d/networking/wpa_supplicant.exe
 etc/rc.d/init.d/ntp
diff --git a/config/rootfiles/common/libloc b/config/rootfiles/common/libloc
new file mode 100644
index 000000000..9985b939f
--- /dev/null
+++ b/config/rootfiles/common/libloc
@@ -0,0 +1,294 @@
+usr/bin/location
+#usr/bin/location-importer
+#usr/include/libloc
+#usr/include/libloc/as.h
+#usr/include/libloc/compat.h
+#usr/include/libloc/country.h
+#usr/include/libloc/database.h
+#usr/include/libloc/format.h
+#usr/include/libloc/libloc.h
+#usr/include/libloc/network.h
+#usr/include/libloc/private.h
+#usr/include/libloc/resolv.h
+#usr/include/libloc/stringpool.h
+#usr/include/libloc/writer.h
+#usr/lib/libloc.la
+#usr/lib/libloc.so
+usr/lib/libloc.so.0
+usr/lib/libloc.so.0.0.0
+usr/lib/perl5/site_perl/5.30.0/xxxMACHINExxx-linux-thread-multi/Location.pm
+#usr/lib/perl5/site_perl/5.30.0/xxxMACHINExxx-linux-thread-multi/auto/Location
+#usr/lib/perl5/site_perl/5.30.0/xxxMACHINExxx-linux-thread-multi/auto/Location/.packlist
+usr/lib/perl5/site_perl/5.30.0/xxxMACHINExxx-linux-thread-multi/auto/Location/Location.so
+#usr/lib/pkgconfig/libloc.pc
+#usr/lib/python3.8/site-packages/_location.la
+usr/lib/python3.8/site-packages/_location.so
+#usr/lib/python3.8/site-packages/location
+usr/lib/python3.8/site-packages/location/__init__.py
+#usr/lib/python3.8/site-packages/location/database.py
+usr/lib/python3.8/site-packages/location/downloader.py
+usr/lib/python3.8/site-packages/location/export.py
+usr/lib/python3.8/site-packages/location/i18n.py
+#usr/lib/python3.8/site-packages/location/importer.py
+usr/lib/python3.8/site-packages/location/logger.py
+#usr/share/locale/de/LC_MESSAGES/libloc.mo
+#usr/share/man/man3/Location.3
+usr/share/xt_geoip/A1.iv4
+usr/share/xt_geoip/A2.iv4
+usr/share/xt_geoip/A3.iv4
+usr/share/xt_geoip/AD.iv4
+usr/share/xt_geoip/AE.iv4
+usr/share/xt_geoip/AF.iv4
+usr/share/xt_geoip/AG.iv4
+usr/share/xt_geoip/AI.iv4
+usr/share/xt_geoip/AL.iv4
+usr/share/xt_geoip/AM.iv4
+usr/share/xt_geoip/AN.iv4
+usr/share/xt_geoip/AO.iv4
+usr/share/xt_geoip/AP.iv4
+usr/share/xt_geoip/AQ.iv4
+usr/share/xt_geoip/AR.iv4
+usr/share/xt_geoip/AS.iv4
+usr/share/xt_geoip/AT.iv4
+usr/share/xt_geoip/AU.iv4
+usr/share/xt_geoip/AW.iv4
+usr/share/xt_geoip/AX.iv4
+usr/share/xt_geoip/AZ.iv4
+usr/share/xt_geoip/BA.iv4
+usr/share/xt_geoip/BB.iv4
+usr/share/xt_geoip/BD.iv4
+usr/share/xt_geoip/BE.iv4
+usr/share/xt_geoip/BF.iv4
+usr/share/xt_geoip/BG.iv4
+usr/share/xt_geoip/BH.iv4
+usr/share/xt_geoip/BI.iv4
+usr/share/xt_geoip/BJ.iv4
+usr/share/xt_geoip/BL.iv4
+usr/share/xt_geoip/BM.iv4
+usr/share/xt_geoip/BN.iv4
+usr/share/xt_geoip/BO.iv4
+usr/share/xt_geoip/BQ.iv4
+usr/share/xt_geoip/BR.iv4
+usr/share/xt_geoip/BS.iv4
+usr/share/xt_geoip/BT.iv4
+usr/share/xt_geoip/BV.iv4
+usr/share/xt_geoip/BW.iv4
+usr/share/xt_geoip/BY.iv4
+usr/share/xt_geoip/BZ.iv4
+usr/share/xt_geoip/CA.iv4
+usr/share/xt_geoip/CC.iv4
+usr/share/xt_geoip/CD.iv4
+usr/share/xt_geoip/CF.iv4
+usr/share/xt_geoip/CG.iv4
+usr/share/xt_geoip/CH.iv4
+usr/share/xt_geoip/CI.iv4
+usr/share/xt_geoip/CK.iv4
+usr/share/xt_geoip/CL.iv4
+usr/share/xt_geoip/CM.iv4
+usr/share/xt_geoip/CN.iv4
+usr/share/xt_geoip/CO.iv4
+usr/share/xt_geoip/CR.iv4
+usr/share/xt_geoip/CU.iv4
+usr/share/xt_geoip/CV.iv4
+usr/share/xt_geoip/CW.iv4
+usr/share/xt_geoip/CX.iv4
+usr/share/xt_geoip/CY.iv4
+usr/share/xt_geoip/CZ.iv4
+usr/share/xt_geoip/DE.iv4
+usr/share/xt_geoip/DJ.iv4
+usr/share/xt_geoip/DK.iv4
+usr/share/xt_geoip/DM.iv4
+usr/share/xt_geoip/DO.iv4
+usr/share/xt_geoip/DZ.iv4
+usr/share/xt_geoip/EC.iv4
+usr/share/xt_geoip/EE.iv4
+usr/share/xt_geoip/EG.iv4
+usr/share/xt_geoip/EH.iv4
+usr/share/xt_geoip/ER.iv4
+usr/share/xt_geoip/ES.iv4
+usr/share/xt_geoip/ET.iv4
+usr/share/xt_geoip/EU.iv4
+usr/share/xt_geoip/FI.iv4
+usr/share/xt_geoip/FJ.iv4
+usr/share/xt_geoip/FK.iv4
+usr/share/xt_geoip/FM.iv4
+usr/share/xt_geoip/FO.iv4
+usr/share/xt_geoip/FR.iv4
+usr/share/xt_geoip/FX.iv4
+usr/share/xt_geoip/GA.iv4
+usr/share/xt_geoip/GB.iv4
+usr/share/xt_geoip/GD.iv4
+usr/share/xt_geoip/GE.iv4
+usr/share/xt_geoip/GF.iv4
+usr/share/xt_geoip/GG.iv4
+usr/share/xt_geoip/GH.iv4
+usr/share/xt_geoip/GI.iv4
+usr/share/xt_geoip/GL.iv4
+usr/share/xt_geoip/GM.iv4
+usr/share/xt_geoip/GN.iv4
+usr/share/xt_geoip/GP.iv4
+usr/share/xt_geoip/GQ.iv4
+usr/share/xt_geoip/GR.iv4
+usr/share/xt_geoip/GS.iv4
+usr/share/xt_geoip/GT.iv4
+usr/share/xt_geoip/GU.iv4
+usr/share/xt_geoip/GW.iv4
+usr/share/xt_geoip/GY.iv4
+usr/share/xt_geoip/HK.iv4
+usr/share/xt_geoip/HM.iv4
+usr/share/xt_geoip/HN.iv4
+usr/share/xt_geoip/HR.iv4
+usr/share/xt_geoip/HT.iv4
+usr/share/xt_geoip/HU.iv4
+usr/share/xt_geoip/ID.iv4
+usr/share/xt_geoip/IE.iv4
+usr/share/xt_geoip/IL.iv4
+usr/share/xt_geoip/IM.iv4
+usr/share/xt_geoip/IN.iv4
+usr/share/xt_geoip/IO.iv4
+usr/share/xt_geoip/IQ.iv4
+usr/share/xt_geoip/IR.iv4
+usr/share/xt_geoip/IS.iv4
+usr/share/xt_geoip/IT.iv4
+usr/share/xt_geoip/JE.iv4
+usr/share/xt_geoip/JM.iv4
+usr/share/xt_geoip/JO.iv4
+usr/share/xt_geoip/JP.iv4
+usr/share/xt_geoip/KE.iv4
+usr/share/xt_geoip/KG.iv4
+usr/share/xt_geoip/KH.iv4
+usr/share/xt_geoip/KI.iv4
+usr/share/xt_geoip/KM.iv4
+usr/share/xt_geoip/KN.iv4
+usr/share/xt_geoip/KP.iv4
+usr/share/xt_geoip/KR.iv4
+usr/share/xt_geoip/KW.iv4
+usr/share/xt_geoip/KY.iv4
+usr/share/xt_geoip/KZ.iv4
+usr/share/xt_geoip/LA.iv4
+usr/share/xt_geoip/LB.iv4
+usr/share/xt_geoip/LC.iv4
+usr/share/xt_geoip/LI.iv4
+usr/share/xt_geoip/LK.iv4
+usr/share/xt_geoip/LR.iv4
+usr/share/xt_geoip/LS.iv4
+usr/share/xt_geoip/LT.iv4
+usr/share/xt_geoip/LU.iv4
+usr/share/xt_geoip/LV.iv4
+usr/share/xt_geoip/LY.iv4
+usr/share/xt_geoip/MA.iv4
+usr/share/xt_geoip/MC.iv4
+usr/share/xt_geoip/MD.iv4
+usr/share/xt_geoip/ME.iv4
+usr/share/xt_geoip/MF.iv4
+usr/share/xt_geoip/MG.iv4
+usr/share/xt_geoip/MH.iv4
+usr/share/xt_geoip/MK.iv4
+usr/share/xt_geoip/ML.iv4
+usr/share/xt_geoip/MM.iv4
+usr/share/xt_geoip/MN.iv4
+usr/share/xt_geoip/MO.iv4
+usr/share/xt_geoip/MP.iv4
+usr/share/xt_geoip/MQ.iv4
+usr/share/xt_geoip/MR.iv4
+usr/share/xt_geoip/MS.iv4
+usr/share/xt_geoip/MT.iv4
+usr/share/xt_geoip/MU.iv4
+usr/share/xt_geoip/MV.iv4
+usr/share/xt_geoip/MW.iv4
+usr/share/xt_geoip/MX.iv4
+usr/share/xt_geoip/MY.iv4
+usr/share/xt_geoip/MZ.iv4
+usr/share/xt_geoip/NA.iv4
+usr/share/xt_geoip/NC.iv4
+usr/share/xt_geoip/NE.iv4
+usr/share/xt_geoip/NF.iv4
+usr/share/xt_geoip/NG.iv4
+usr/share/xt_geoip/NI.iv4
+usr/share/xt_geoip/NL.iv4
+usr/share/xt_geoip/NO.iv4
+usr/share/xt_geoip/NP.iv4
+usr/share/xt_geoip/NR.iv4
+usr/share/xt_geoip/NU.iv4
+usr/share/xt_geoip/NZ.iv4
+usr/share/xt_geoip/OM.iv4
+usr/share/xt_geoip/PA.iv4
+usr/share/xt_geoip/PE.iv4
+usr/share/xt_geoip/PF.iv4
+usr/share/xt_geoip/PG.iv4
+usr/share/xt_geoip/PH.iv4
+usr/share/xt_geoip/PK.iv4
+usr/share/xt_geoip/PL.iv4
+usr/share/xt_geoip/PM.iv4
+usr/share/xt_geoip/PN.iv4
+usr/share/xt_geoip/PR.iv4
+usr/share/xt_geoip/PS.iv4
+usr/share/xt_geoip/PT.iv4
+usr/share/xt_geoip/PW.iv4
+usr/share/xt_geoip/PY.iv4
+usr/share/xt_geoip/QA.iv4
+usr/share/xt_geoip/RE.iv4
+usr/share/xt_geoip/RO.iv4
+usr/share/xt_geoip/RS.iv4
+usr/share/xt_geoip/RU.iv4
+usr/share/xt_geoip/RW.iv4
+usr/share/xt_geoip/SA.iv4
+usr/share/xt_geoip/SB.iv4
+usr/share/xt_geoip/SC.iv4
+usr/share/xt_geoip/SD.iv4
+usr/share/xt_geoip/SE.iv4
+usr/share/xt_geoip/SG.iv4
+usr/share/xt_geoip/SH.iv4
+usr/share/xt_geoip/SI.iv4
+usr/share/xt_geoip/SJ.iv4
+usr/share/xt_geoip/SK.iv4
+usr/share/xt_geoip/SL.iv4
+usr/share/xt_geoip/SM.iv4
+usr/share/xt_geoip/SN.iv4
+usr/share/xt_geoip/SO.iv4
+usr/share/xt_geoip/SR.iv4
+usr/share/xt_geoip/SS.iv4
+usr/share/xt_geoip/ST.iv4
+usr/share/xt_geoip/SV.iv4
+usr/share/xt_geoip/SX.iv4
+usr/share/xt_geoip/SY.iv4
+usr/share/xt_geoip/SZ.iv4
+usr/share/xt_geoip/TC.iv4
+usr/share/xt_geoip/TD.iv4
+usr/share/xt_geoip/TF.iv4
+usr/share/xt_geoip/TG.iv4
+usr/share/xt_geoip/TH.iv4
+usr/share/xt_geoip/TJ.iv4
+usr/share/xt_geoip/TK.iv4
+usr/share/xt_geoip/TL.iv4
+usr/share/xt_geoip/TM.iv4
+usr/share/xt_geoip/TN.iv4
+usr/share/xt_geoip/TO.iv4
+usr/share/xt_geoip/TR.iv4
+usr/share/xt_geoip/TT.iv4
+usr/share/xt_geoip/TV.iv4
+usr/share/xt_geoip/TW.iv4
+usr/share/xt_geoip/TZ.iv4
+usr/share/xt_geoip/UA.iv4
+usr/share/xt_geoip/UG.iv4
+usr/share/xt_geoip/UM.iv4
+usr/share/xt_geoip/US.iv4
+usr/share/xt_geoip/UY.iv4
+usr/share/xt_geoip/UZ.iv4
+usr/share/xt_geoip/VA.iv4
+usr/share/xt_geoip/VC.iv4
+usr/share/xt_geoip/VE.iv4
+usr/share/xt_geoip/VG.iv4
+usr/share/xt_geoip/VI.iv4
+usr/share/xt_geoip/VN.iv4
+usr/share/xt_geoip/VU.iv4
+usr/share/xt_geoip/WF.iv4
+usr/share/xt_geoip/WS.iv4
+usr/share/xt_geoip/YE.iv4
+usr/share/xt_geoip/YT.iv4
+usr/share/xt_geoip/ZA.iv4
+usr/share/xt_geoip/ZM.iv4
+usr/share/xt_geoip/ZW.iv4
+#var/lib/location
+var/lib/location/database.db
+var/lib/location/signing-key.pem
diff --git a/config/rootfiles/common/stage2 b/config/rootfiles/common/stage2
index f56439335..2c4f715dd 100644
--- a/config/rootfiles/common/stage2
+++ b/config/rootfiles/common/stage2
@@ -93,6 +93,7 @@ usr/local/bin/connscheduler
 usr/local/bin/consort.sh
 usr/local/bin/convert-dns-settings
 usr/local/bin/convert-ovpn
+usr/local/bin/convert-to-location
 usr/local/bin/filesystem-cleanup
 usr/local/bin/hddshutdown
 usr/local/bin/ipsec-interfaces
@@ -107,8 +108,7 @@ usr/local/bin/timecheck
 usr/local/bin/timezone-transition
 usr/local/bin/update-lang-cache
 usr/local/bin/update-ids-ruleset
-usr/local/bin/xt_geoip_build
-usr/local/bin/xt_geoip_update
+usr/local/bin/update-location-database
 #usr/local/include
 #usr/local/lib
 #usr/local/lib/sse2
diff --git a/config/rootfiles/common/web-user-interface b/config/rootfiles/common/web-user-interface
index 9aaa05631..aa32053a2 100644
--- a/config/rootfiles/common/web-user-interface
+++ b/config/rootfiles/common/web-user-interface
@@ -26,7 +26,6 @@ srv/web/ipfire/cgi-bin/extrahd.cgi
 srv/web/ipfire/cgi-bin/fireinfo.cgi
 srv/web/ipfire/cgi-bin/firewall.cgi
 srv/web/ipfire/cgi-bin/fwhosts.cgi
-srv/web/ipfire/cgi-bin/geoip-block.cgi
 srv/web/ipfire/cgi-bin/gpl.cgi
 #srv/web/ipfire/cgi-bin/guardian.cgi
 srv/web/ipfire/cgi-bin/gui.cgi
@@ -36,6 +35,7 @@ srv/web/ipfire/cgi-bin/ids.cgi
 srv/web/ipfire/cgi-bin/index.cgi
 srv/web/ipfire/cgi-bin/ipinfo.cgi
 srv/web/ipfire/cgi-bin/iptables.cgi
+srv/web/ipfire/cgi-bin/location-block.cgi
 srv/web/ipfire/cgi-bin/logs.cgi
 srv/web/ipfire/cgi-bin/logs.cgi/calamaris.dat
 srv/web/ipfire/cgi-bin/logs.cgi/config.dat
diff --git a/config/rootfiles/common/x86_64/initscripts b/config/rootfiles/common/x86_64/initscripts
index c0fc18705..b4e944342 100644
--- a/config/rootfiles/common/x86_64/initscripts
+++ b/config/rootfiles/common/x86_64/initscripts
@@ -66,7 +66,6 @@ etc/rc.d/init.d/networking/red.up/50-ovpn
 etc/rc.d/init.d/networking/red.up/98-leds
 etc/rc.d/init.d/networking/red.up/99-beep
 etc/rc.d/init.d/networking/red.up/99-fireinfo
-etc/rc.d/init.d/networking/red.up/99-geoip-database
 etc/rc.d/init.d/networking/red.up/99-pakfire-update
 etc/rc.d/init.d/networking/wpa_supplicant.exe
 etc/rc.d/init.d/ntp
diff --git a/config/rootfiles/common/x86_64/stage2 b/config/rootfiles/common/x86_64/stage2
index 2197ac4ac..ee41d2fb0 100644
--- a/config/rootfiles/common/x86_64/stage2
+++ b/config/rootfiles/common/x86_64/stage2
@@ -42,8 +42,8 @@ etc/profile.d/term256.sh
 etc/profile.d/umask.sh
 etc/resolv.conf
 etc/securetty
-etc/sysctl.conf
 etc/sysctl-x86_64.conf
+etc/sysctl.conf
 etc/syslog.conf
 etc/system-release
 #home
@@ -68,7 +68,6 @@ root/.bash_logout
 root/.bash_profile
 root/.bashrc
 root/ipfire
-run
 #sbin
 #srv
 #usr/bin
@@ -95,6 +94,7 @@ usr/local/bin/connscheduler
 usr/local/bin/consort.sh
 usr/local/bin/convert-dns-settings
 usr/local/bin/convert-ovpn
+usr/local/bin/convert-to-location
 usr/local/bin/filesystem-cleanup
 usr/local/bin/hddshutdown
 usr/local/bin/ipsec-interfaces
@@ -109,8 +109,7 @@ usr/local/bin/timecheck
 usr/local/bin/timezone-transition
 usr/local/bin/update-ids-ruleset
 usr/local/bin/update-lang-cache
-usr/local/bin/xt_geoip_build
-usr/local/bin/xt_geoip_update
+usr/local/bin/update-location-database
 #usr/local/include
 #usr/local/lib
 #usr/local/lib/sse2
@@ -175,6 +174,7 @@ var/mail
 var/run
 #var/spool
 var/tmp
+run
 dev/console
 dev/null
 tmp
diff --git a/config/rootfiles/common/xtables-addons b/config/rootfiles/common/xtables-addons
index cb958ee7e..a20047c7d 100644
--- a/config/rootfiles/common/xtables-addons
+++ b/config/rootfiles/common/xtables-addons
@@ -23,11 +23,11 @@ lib/xtables/libxt_quota2.so
 usr/lib/libxt_ACCOUNT_cl.so.0
 usr/lib/libxt_ACCOUNT_cl.so.0.0.0
 #usr/libexec/xtables-addons
-usr/libexec/xtables-addons/xt_geoip_build
-usr/libexec/xtables-addons/xt_geoip_dl
-usr/local/bin/xt_geoip_build
+#usr/libexec/xtables-addons/xt_geoip_build
+#usr/libexec/xtables-addons/xt_geoip_dl
 usr/sbin/iptaccount
 #usr/share/man/man1/xt_geoip_build.1
 #usr/share/man/man1/xt_geoip_dl.1
 #usr/share/man/man8/iptaccount.8
 #usr/share/man/man8/xtables-addons.8
+/usr/share/xt_geoip/
diff --git a/config/rootfiles/core/147/exclude b/config/rootfiles/core/148/exclude
similarity index 100%
rename from config/rootfiles/core/147/exclude
rename to config/rootfiles/core/148/exclude
diff --git a/config/rootfiles/core/148/filelists/Locale-Country b/config/rootfiles/core/148/filelists/Locale-Country
new file mode 120000
index 000000000..025c27878
--- /dev/null
+++ b/config/rootfiles/core/148/filelists/Locale-Country
@@ -0,0 +1 @@
+../../../common/Locale-Country
\ No newline at end of file
diff --git a/config/rootfiles/core/148/filelists/files b/config/rootfiles/core/148/filelists/files
new file mode 100644
index 000000000..a49e0e179
--- /dev/null
+++ b/config/rootfiles/core/148/filelists/files
@@ -0,0 +1,30 @@
+etc/system-release
+etc/issue
+srv/web/ipfire/cgi-bin/credits.cgi
+var/ipfire/langs
+etc/rc.d/init.d/firewall
+etc/rc.d/init.d/networking/any
+srv/web/ipfire/cgi-bin/connections.cgi
+srv/web/ipfire/cgi-bin/country.cgi
+srv/web/ipfire/cgi-bin/dns.cgi
+srv/web/ipfire/cgi-bin/firewall.cgi
+srv/web/ipfire/cgi-bin/fwhosts.cgi
+srv/web/ipfire/cgi-bin/ipinfo.cgi
+srv/web/ipfire/cgi-bin/location-block.cgi
+srv/web/ipfire/cgi-bin//logs.cgi/firewalllog.dat
+srv/web/ipfire/cgi-bin/logs.cgi/firewalllogcountry.dat
+srv/web/ipfire/cgi-bin/logs.cgi/firewalllogip.dat
+srv/web/ipfire/cgi-bin/logs.cgi/showrequestfromcountry.dat
+srv/web/ipfire/cgi-bin/netexternal.cgi
+srv/web/ipfire/cgi-bin/ovpnmain.cgi
+srv/web/ipfire/cgi-bin/remote.cgi
+srv/web/ipfire/cgi-bin/tor.cgi
+usr/lib/firewall/firewall-lib.pl
+usr/lib/firewall/rules.pl
+usr/local/bin/convert-to-location
+usr/local/bin/update-location-database
+var/ipfire/backup/bin/backup.pl
+var/ipfire/firewall/locationblock
+var/ipfire/location-functions.pl
+var/ipfire/network-functions.pl
+var/ipfire/menu.d/50-firewall.menu
diff --git a/config/rootfiles/core/148/filelists/libloc b/config/rootfiles/core/148/filelists/libloc
new file mode 120000
index 000000000..ff4a92429
--- /dev/null
+++ b/config/rootfiles/core/148/filelists/libloc
@@ -0,0 +1 @@
+../../../common/libloc
\ No newline at end of file
diff --git a/config/rootfiles/core/148/filelists/xtables-addons b/config/rootfiles/core/148/filelists/xtables-addons
new file mode 120000
index 000000000..2e24c4298
--- /dev/null
+++ b/config/rootfiles/core/148/filelists/xtables-addons
@@ -0,0 +1 @@
+../../../common/xtables-addons
\ No newline at end of file
diff --git a/config/rootfiles/core/148/update.sh b/config/rootfiles/core/148/update.sh
new file mode 100644
index 000000000..d4bcc45bc
--- /dev/null
+++ b/config/rootfiles/core/148/update.sh
@@ -0,0 +1,86 @@
+#!/bin/bash
+############################################################################
+#                                                                          #
+# This file is part of the IPFire Firewall.                                #
+#                                                                          #
+# IPFire is free software; you can redistribute it and/or modify           #
+# it under the terms of the GNU General Public License as published by     #
+# the Free Software Foundation; either version 3 of the License, or        #
+# (at your option) any later version.                                      #
+#                                                                          #
+# IPFire is distributed in the hope that it will be useful,                #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of           #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            #
+# GNU General Public License for more details.                             #
+#                                                                          #
+# You should have received a copy of the GNU General Public License        #
+# along with IPFire; if not, write to the Free Software                    #
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA #
+#                                                                          #
+# Copyright (C) 2020 IPFire-Team <info(a)ipfire.org>.                        #
+#                                                                          #
+############################################################################
+#
+. /opt/pakfire/lib/functions.sh
+/usr/local/bin/backupctrl exclude >/dev/null 2>&1
+
+core=148
+
+# Remove old core updates from pakfire cache to save space...
+for (( i=1; i<=$core; i++ )); do
+	rm -f /var/cache/pakfire/core-upgrade-*-$i.ipfire
+done
+
+# Remove files
+rm -vf \
+	/etc/rc.d/init.d/networking/red.ip/99-geoip-database \
+	/srv/web/ipfire/cgi-bin/geoip-block.cgi \
+	/usr/lib/libGeoIP*
+	/usr/lib/perl5/site_perl/5.30.0/Geo \
+	/usr/share/GeoIP \
+	/var/lib/GoIP \
+	/usr/local/bin/xt_geoip* \
+	/var/ipfire/geoip-functions.pl \
+
+# Stop services
+
+# Extract files
+extract_files
+
+# update linker config
+ldconfig
+
+# update location database
+/usr/local/bin/convert-to-location
+
+# Update Language cache
+/usr/local/bin/update-lang-cache
+
+# Filesytem cleanup
+/usr/local/bin/filesystem-cleanup
+
+# Start services
+
+# Update crontab
+sed -i /var/spool/cron/root.orig \
+	-e "s/xt_geoip_update/update-location-database/" \
+	-e "/location/s/monthly/hourly/" \
+	-e "s/GeoIP/location/"
+fcrontab -z
+
+# This update needs a reboot...
+#touch /var/run/need_reboot
+
+# Finish
+/etc/init.d/fireinfo start
+sendprofile
+
+# Update grub config to display new core version
+if [ -e /boot/grub/grub.cfg ]; then
+	grub-mkconfig -o /boot/grub/grub.cfg
+fi
+
+sync
+
+# Don't report the exitcode last command
+exit 0
diff --git a/config/rootfiles/oldcore/103/filelists/curl b/config/rootfiles/oldcore/103/filelists/curl
deleted file mode 120000
index 4b84bef53..000000000
--- a/config/rootfiles/oldcore/103/filelists/curl
+++ /dev/null
@@ -1 +0,0 @@
-../../../common/curl
\ No newline at end of file
diff --git a/config/rootfiles/oldcore/147/exclude b/config/rootfiles/oldcore/147/exclude
new file mode 100644
index 000000000..b22159878
--- /dev/null
+++ b/config/rootfiles/oldcore/147/exclude
@@ -0,0 +1,28 @@
+boot/config.txt
+boot/grub/grub.cfg
+boot/grub/grubenv
+etc/alternatives
+etc/collectd.custom
+etc/default/grub
+etc/ipsec.conf
+etc/ipsec.secrets
+etc/ipsec.user.conf
+etc/ipsec.user.secrets
+etc/localtime
+etc/shadow
+etc/snort/snort.conf
+etc/ssl/openssl.cnf
+etc/sudoers
+etc/sysconfig/firewall.local
+etc/sysconfig/rc.local
+etc/udev/rules.d/30-persistent-network.rules
+srv/web/ipfire/html/proxy.pac
+var/ipfire/dma
+var/ipfire/time
+var/ipfire/ovpn
+var/lib/alternatives
+var/log/cache
+var/log/dhcpcd.log
+var/log/messages
+var/state/dhcp/dhcpd.leases
+var/updatecache
diff --git a/config/rootfiles/core/147/filelists/aarch64/gmp b/config/rootfiles/oldcore/147/filelists/aarch64/gmp
similarity index 100%
rename from config/rootfiles/core/147/filelists/aarch64/gmp
rename to config/rootfiles/oldcore/147/filelists/aarch64/gmp
diff --git a/config/rootfiles/core/147/filelists/armv5tel/gmp b/config/rootfiles/oldcore/147/filelists/armv5tel/gmp
similarity index 100%
rename from config/rootfiles/core/147/filelists/armv5tel/gmp
rename to config/rootfiles/oldcore/147/filelists/armv5tel/gmp
diff --git a/config/rootfiles/core/147/filelists/bind b/config/rootfiles/oldcore/147/filelists/bind
similarity index 100%
rename from config/rootfiles/core/147/filelists/bind
rename to config/rootfiles/oldcore/147/filelists/bind
diff --git a/config/rootfiles/core/147/filelists/ca-certificates b/config/rootfiles/oldcore/147/filelists/ca-certificates
similarity index 100%
rename from config/rootfiles/core/147/filelists/ca-certificates
rename to config/rootfiles/oldcore/147/filelists/ca-certificates
diff --git a/config/rootfiles/core/147/filelists/dhcpcd b/config/rootfiles/oldcore/147/filelists/dhcpcd
similarity index 100%
rename from config/rootfiles/core/147/filelists/dhcpcd
rename to config/rootfiles/oldcore/147/filelists/dhcpcd
diff --git a/config/rootfiles/core/147/filelists/files b/config/rootfiles/oldcore/147/filelists/files
similarity index 100%
rename from config/rootfiles/core/147/filelists/files
rename to config/rootfiles/oldcore/147/filelists/files
diff --git a/config/rootfiles/core/147/filelists/gnutls b/config/rootfiles/oldcore/147/filelists/gnutls
similarity index 100%
rename from config/rootfiles/core/147/filelists/gnutls
rename to config/rootfiles/oldcore/147/filelists/gnutls
diff --git a/config/rootfiles/core/147/filelists/i586/gmp b/config/rootfiles/oldcore/147/filelists/i586/gmp
similarity index 100%
rename from config/rootfiles/core/147/filelists/i586/gmp
rename to config/rootfiles/oldcore/147/filelists/i586/gmp
diff --git a/config/rootfiles/core/147/filelists/iproute2 b/config/rootfiles/oldcore/147/filelists/iproute2
similarity index 100%
rename from config/rootfiles/core/147/filelists/iproute2
rename to config/rootfiles/oldcore/147/filelists/iproute2
diff --git a/config/rootfiles/core/147/filelists/libgcrypt b/config/rootfiles/oldcore/147/filelists/libgcrypt
similarity index 100%
rename from config/rootfiles/core/147/filelists/libgcrypt
rename to config/rootfiles/oldcore/147/filelists/libgcrypt
diff --git a/config/rootfiles/core/147/filelists/libgpg-error b/config/rootfiles/oldcore/147/filelists/libgpg-error
similarity index 100%
rename from config/rootfiles/core/147/filelists/libgpg-error
rename to config/rootfiles/oldcore/147/filelists/libgpg-error
diff --git a/config/rootfiles/core/147/filelists/linux-firmware-updates b/config/rootfiles/oldcore/147/filelists/linux-firmware-updates
similarity index 100%
rename from config/rootfiles/core/147/filelists/linux-firmware-updates
rename to config/rootfiles/oldcore/147/filelists/linux-firmware-updates
diff --git a/config/rootfiles/core/147/filelists/ntp b/config/rootfiles/oldcore/147/filelists/ntp
similarity index 100%
rename from config/rootfiles/core/147/filelists/ntp
rename to config/rootfiles/oldcore/147/filelists/ntp
diff --git a/config/rootfiles/core/147/filelists/openssh b/config/rootfiles/oldcore/147/filelists/openssh
similarity index 100%
rename from config/rootfiles/core/147/filelists/openssh
rename to config/rootfiles/oldcore/147/filelists/openssh
diff --git a/config/rootfiles/core/147/filelists/squid b/config/rootfiles/oldcore/147/filelists/squid
similarity index 100%
rename from config/rootfiles/core/147/filelists/squid
rename to config/rootfiles/oldcore/147/filelists/squid
diff --git a/config/rootfiles/core/147/filelists/squidguard b/config/rootfiles/oldcore/147/filelists/squidguard
similarity index 100%
rename from config/rootfiles/core/147/filelists/squidguard
rename to config/rootfiles/oldcore/147/filelists/squidguard
diff --git a/config/rootfiles/core/147/filelists/x86_64/gmp b/config/rootfiles/oldcore/147/filelists/x86_64/gmp
similarity index 100%
rename from config/rootfiles/core/147/filelists/x86_64/gmp
rename to config/rootfiles/oldcore/147/filelists/x86_64/gmp
diff --git a/config/rootfiles/core/147/update.sh b/config/rootfiles/oldcore/147/update.sh
similarity index 100%
rename from config/rootfiles/core/147/update.sh
rename to config/rootfiles/oldcore/147/update.sh
diff --git a/config/rootfiles/packages/bacula b/config/rootfiles/packages/bacula
index 4ee408fc4..dc9179489 100644
--- a/config/rootfiles/packages/bacula
+++ b/config/rootfiles/packages/bacula
@@ -63,3 +63,4 @@ usr/sbin/bacula-fd
 #usr/share/man/man8/dbcheck.8.gz
 #var/bacula
 #var/bacula/working
+var/ipfire/backup/addons/includes/bacula
diff --git a/config/rootfiles/packages/mc b/config/rootfiles/packages/mc
index 42a6aadf4..8e7a57db7 100644
--- a/config/rootfiles/packages/mc
+++ b/config/rootfiles/packages/mc
@@ -142,6 +142,7 @@ usr/share/mc/syntax/c.syntax
 usr/share/mc/syntax/cabal.syntax
 usr/share/mc/syntax/changelog.syntax
 usr/share/mc/syntax/cmake.syntax
+usr/share/mc/syntax/cobol.syntax
 usr/share/mc/syntax/cs.syntax
 usr/share/mc/syntax/css.syntax
 usr/share/mc/syntax/cuda.syntax
@@ -172,6 +173,7 @@ usr/share/mc/syntax/j.syntax
 usr/share/mc/syntax/jal.syntax
 usr/share/mc/syntax/java.syntax
 usr/share/mc/syntax/js.syntax
+usr/share/mc/syntax/kotlin.syntax
 usr/share/mc/syntax/latex.syntax
 usr/share/mc/syntax/lisp.syntax
 usr/share/mc/syntax/lkr.syntax
diff --git a/doc/language_issues.de b/doc/language_issues.de
index 1771de2fb..df5df895e 100644
--- a/doc/language_issues.de
+++ b/doc/language_issues.de
@@ -318,7 +318,7 @@ WARNING: translation string unused: fwhost Standard Network
 WARNING: translation string unused: fwhost attention
 WARNING: translation string unused: fwhost blue
 WARNING: translation string unused: fwhost changeremark
-WARNING: translation string unused: fwhost cust geoip
+WARNING: translation string unused: fwhost cust locationlocation
 WARNING: translation string unused: fwhost err addrgrp
 WARNING: translation string unused: fwhost err hostorip
 WARNING: translation string unused: fwhost err mac
@@ -338,9 +338,6 @@ WARNING: translation string unused: generatekeys
 WARNING: translation string unused: generatepolicy
 WARNING: translation string unused: generatereport
 WARNING: translation string unused: genkey
-WARNING: translation string unused: geoipblock country code
-WARNING: translation string unused: geoipblock country name
-WARNING: translation string unused: geoipblock flag
 WARNING: translation string unused: green interface
 WARNING: translation string unused: gz with key
 WARNING: translation string unused: harddisk temperature graphs
@@ -402,6 +399,9 @@ WARNING: translation string unused: loaded modules
 WARNING: translation string unused: local hard disk
 WARNING: translation string unused: localkey
 WARNING: translation string unused: localkeyfile
+WARNING: translation string unused: locationblock country code
+WARNING: translation string unused: locationblock country name
+WARNING: translation string unused: locationblock flag
 WARNING: translation string unused: log enabled
 WARNING: translation string unused: log var messages
 WARNING: translation string unused: log viewer
@@ -489,6 +489,7 @@ WARNING: translation string unused: optionsfw portlist hint
 WARNING: translation string unused: optionsfw warning
 WARNING: translation string unused: or
 WARNING: translation string unused: original
+WARNING: translation string unused: other
 WARNING: translation string unused: our donors
 WARNING: translation string unused: out
 WARNING: translation string unused: outgoing firewall
@@ -766,7 +767,7 @@ WARNING: translation string unused: zoneconf val vlan amount assignment error
 WARNING: translation string unused: zoneconf val vlan tag assignment error
 WARNING: translation string unused: zoneconf val zoneslave amount error
 WARNING: untranslated string: error the to date has to be later than the from date = The to date has to be later than the from date!
-WARNING: untranslated string: fwhost cust geoipgrp = unknown string
+WARNING: untranslated string: fwhost cust locationgrp = unknown string
 WARNING: untranslated string: fwhost err hostip = unknown string
 WARNING: untranslated string: guardian block a host = unknown string
 WARNING: untranslated string: guardian block httpd brute-force = unknown string
diff --git a/doc/language_issues.en b/doc/language_issues.en
index f651e76aa..6417d5382 100644
--- a/doc/language_issues.en
+++ b/doc/language_issues.en
@@ -892,10 +892,10 @@ WARNING: untranslated string: fwdfw wd_thu = Thu
 WARNING: untranslated string: fwdfw wd_tue = Tue
 WARNING: untranslated string: fwdfw wd_wed = Wed
 WARNING: untranslated string: fwhost OpenVPN N-2-N = OpenVPN Net-to-Net
-WARNING: untranslated string: fwhost addgeoipgrp = Add new GeoIP group
 WARNING: untranslated string: fwhost addgrp = Add new network/host group
 WARNING: untranslated string: fwhost addgrpname = Group name:
 WARNING: untranslated string: fwhost addhost = Add new host
+WARNING: untranslated string: fwhost addlocationgrp = Add new Location group
 WARNING: untranslated string: fwhost addnet = Add new network
 WARNING: untranslated string: fwhost addservice = Add service
 WARNING: untranslated string: fwhost addservicegrp = Add new service group
@@ -905,10 +905,10 @@ WARNING: untranslated string: fwhost ccdhost = OpenVPN clients:
 WARNING: untranslated string: fwhost ccdnet = OpenVPN networks:
 WARNING: untranslated string: fwhost change = Modify
 WARNING: untranslated string: fwhost cust addr = Hosts
-WARNING: untranslated string: fwhost cust geoipgroup = GeoIP Groups
-WARNING: untranslated string: fwhost cust geoipgrp = unknown string
-WARNING: untranslated string: fwhost cust geoiplocation = GeoIP Locations
 WARNING: untranslated string: fwhost cust grp = Network/Host Groups
+WARNING: untranslated string: fwhost cust location = Location Groups
+WARNING: untranslated string: fwhost cust locationgroup = Location Groups
+WARNING: untranslated string: fwhost cust locationgrp = unknown string
 WARNING: untranslated string: fwhost cust net = Networks
 WARNING: untranslated string: fwhost cust service = Services
 WARNING: untranslated string: fwhost cust srvgrp = Service Groups
@@ -947,9 +947,9 @@ WARNING: untranslated string: fwhost ip_mac = IP/MAC address
 WARNING: untranslated string: fwhost ipsec net = IPsec networks:
 WARNING: untranslated string: fwhost menu = Firewall Groups
 WARNING: untranslated string: fwhost netaddress = Network address
-WARNING: untranslated string: fwhost newgeoipgrp = GeoIP Groups
 WARNING: untranslated string: fwhost newgrp = Network/Host Groups
 WARNING: untranslated string: fwhost newhost = Hosts
+WARNING: untranslated string: fwhost newlocationgrp = Location Groups
 WARNING: untranslated string: fwhost newnet = Networks
 WARNING: untranslated string: fwhost newservice = Services
 WARNING: untranslated string: fwhost newservicegrp = Service Groups
@@ -972,13 +972,6 @@ WARNING: untranslated string: generate ptr = Generate PTR
 WARNING: untranslated string: generate root/host certificates = Generate root/host certificates
 WARNING: untranslated string: generating the root and host certificates may take a long time. it can take up to several minutes on older hardware. please be patient = Generating the root and host certificates may take a long time.  It can take up to several minutes on older hardware. Please be patient.
 WARNING: untranslated string: genre = Genre
-WARNING: untranslated string: geoip = GeoIP
-WARNING: untranslated string: geoipblock = GeoIP Block
-WARNING: untranslated string: geoipblock block countries = Block countries
-WARNING: untranslated string: geoipblock configuration = GeoIP Configuration
-WARNING: untranslated string: geoipblock country is allowed = Incoming traffic from this country is allowed
-WARNING: untranslated string: geoipblock country is blocked = Incoming traffic from this country will be blocked
-WARNING: untranslated string: geoipblock enable feature = Enable GeoIP based blocking:
 WARNING: untranslated string: global settings = Global Settings
 WARNING: untranslated string: gpl i accept these terms and conditions = I accept these terms and conditions
 WARNING: untranslated string: gpl license agreement = License Agreement
@@ -1200,6 +1193,13 @@ WARNING: untranslated string: local ntp server specified but not enabled = Local
 WARNING: untranslated string: local subnet = Local subnet:
 WARNING: untranslated string: local subnet is invalid = Local subnet is invalid.
 WARNING: untranslated string: local vpn hostname/ip = Local VPN Hostname/IP
+WARNING: untranslated string: location = Location
+WARNING: untranslated string: locationblock = Location Block
+WARNING: untranslated string: locationblock block countries = Block countries
+WARNING: untranslated string: locationblock configuration = Location Configuration
+WARNING: untranslated string: locationblock country is allowed = Incoming traffic from this country is allowed
+WARNING: untranslated string: locationblock country is blocked = Incoming traffic from this country will be blocked
+WARNING: untranslated string: locationblock enable feature = Enable Location based blocking:
 WARNING: untranslated string: log = Log
 WARNING: untranslated string: log level = Log Level
 WARNING: untranslated string: log lines per page = Lines per page
@@ -1399,7 +1399,6 @@ WARNING: untranslated string: organization cant be empty = Organization can't be
 WARNING: untranslated string: organization name = Organization Name
 WARNING: untranslated string: organization too long = Organization is too long; it should not be longer than 60 characters.
 WARNING: untranslated string: os level = OS Level
-WARNING: untranslated string: other = Other
 WARNING: untranslated string: other countries = Other countries
 WARNING: untranslated string: other login script = Other login script
 WARNING: untranslated string: otherip = other IP
diff --git a/doc/language_issues.es b/doc/language_issues.es
index 885b44f62..475db4953 100644
--- a/doc/language_issues.es
+++ b/doc/language_issues.es
@@ -284,9 +284,6 @@ WARNING: translation string unused: generatekeys
 WARNING: translation string unused: generatepolicy
 WARNING: translation string unused: generatereport
 WARNING: translation string unused: genkey
-WARNING: translation string unused: geoipblock country code
-WARNING: translation string unused: geoipblock country name
-WARNING: translation string unused: geoipblock flag
 WARNING: translation string unused: green interface
 WARNING: translation string unused: gz with key
 WARNING: translation string unused: harddisk temperature graphs
@@ -352,6 +349,9 @@ WARNING: translation string unused: loaded modules
 WARNING: translation string unused: local hard disk
 WARNING: translation string unused: localkey
 WARNING: translation string unused: localkeyfile
+WARNING: translation string unused: locationblock country code
+WARNING: translation string unused: locationblock country name
+WARNING: translation string unused: locationblock flag
 WARNING: translation string unused: log enabled
 WARNING: translation string unused: log var messages
 WARNING: translation string unused: log viewer
@@ -1000,10 +1000,10 @@ WARNING: untranslated string: fwdfw wd_thu = Thu
 WARNING: untranslated string: fwdfw wd_tue = Tue
 WARNING: untranslated string: fwdfw wd_wed = Wed
 WARNING: untranslated string: fwhost OpenVPN N-2-N = OpenVPN Net-to-Net
-WARNING: untranslated string: fwhost addgeoipgrp = Add new GeoIP group
 WARNING: untranslated string: fwhost addgrp = Add new network/host group
 WARNING: untranslated string: fwhost addgrpname = Group name:
 WARNING: untranslated string: fwhost addhost = Add new host
+WARNING: untranslated string: fwhost addlocationgrp = Add new Location group
 WARNING: untranslated string: fwhost addnet = Add new network
 WARNING: untranslated string: fwhost addservice = Add service
 WARNING: untranslated string: fwhost addservicegrp = Add new service group
@@ -1013,10 +1013,10 @@ WARNING: untranslated string: fwhost ccdhost = OpenVPN clients:
 WARNING: untranslated string: fwhost ccdnet = OpenVPN networks:
 WARNING: untranslated string: fwhost change = Modify
 WARNING: untranslated string: fwhost cust addr = Hosts
-WARNING: untranslated string: fwhost cust geoipgroup = GeoIP Groups
-WARNING: untranslated string: fwhost cust geoipgrp = unknown string
-WARNING: untranslated string: fwhost cust geoiplocation = GeoIP Locations
 WARNING: untranslated string: fwhost cust grp = Network/Host Groups
+WARNING: untranslated string: fwhost cust location = Location Groups
+WARNING: untranslated string: fwhost cust locationgroup = Location Groups
+WARNING: untranslated string: fwhost cust locationgrp = unknown string
 WARNING: untranslated string: fwhost cust net = Networks
 WARNING: untranslated string: fwhost cust service = Services
 WARNING: untranslated string: fwhost cust srvgrp = Service Groups
@@ -1055,9 +1055,9 @@ WARNING: untranslated string: fwhost ip_mac = IP/MAC address
 WARNING: untranslated string: fwhost ipsec net = IPsec networks:
 WARNING: untranslated string: fwhost menu = Firewall Groups
 WARNING: untranslated string: fwhost netaddress = Network address
-WARNING: untranslated string: fwhost newgeoipgrp = GeoIP Groups
 WARNING: untranslated string: fwhost newgrp = Network/Host Groups
 WARNING: untranslated string: fwhost newhost = Hosts
+WARNING: untranslated string: fwhost newlocationgrp = Location Groups
 WARNING: untranslated string: fwhost newnet = Networks
 WARNING: untranslated string: fwhost newservice = Services
 WARNING: untranslated string: fwhost newservicegrp = Service Groups
@@ -1208,7 +1208,6 @@ WARNING: untranslated string: openvpn prefix local subnet = Using the prefix not
 WARNING: untranslated string: openvpn prefix openvpn subnet = Using the prefix notation is not supported for the OpenVPN subnet. Please enter a subnet mask like 255.255.255.0.
 WARNING: untranslated string: openvpn prefix remote subnet = Using the prefix notation is not supported for the remote subnet. Please enter a subnet mask like 255.255.255.0.
 WARNING: untranslated string: openvpn subnet is used = The given subnet is used by another OpenVPN server.
-WARNING: untranslated string: other = Other
 WARNING: untranslated string: outgoing compression in bytes per second = Outgoing compression
 WARNING: untranslated string: outgoing firewall access = Outgoing Firewall Access
 WARNING: untranslated string: outgoing firewall p2p allow = Using the P2P protocol is allowed
diff --git a/doc/language_issues.fr b/doc/language_issues.fr
index 0b0508433..9470597af 100644
--- a/doc/language_issues.fr
+++ b/doc/language_issues.fr
@@ -346,7 +346,7 @@ WARNING: translation string unused: fwhost Standard Network
 WARNING: translation string unused: fwhost attention
 WARNING: translation string unused: fwhost blue
 WARNING: translation string unused: fwhost changeremark
-WARNING: translation string unused: fwhost cust geoip
+WARNING: translation string unused: fwhost cust locationlocation
 WARNING: translation string unused: fwhost err addrgrp
 WARNING: translation string unused: fwhost err hostorip
 WARNING: translation string unused: fwhost err mac
@@ -366,9 +366,6 @@ WARNING: translation string unused: generatekeys
 WARNING: translation string unused: generatepolicy
 WARNING: translation string unused: generatereport
 WARNING: translation string unused: genkey
-WARNING: translation string unused: geoipblock country code
-WARNING: translation string unused: geoipblock country name
-WARNING: translation string unused: geoipblock flag
 WARNING: translation string unused: green interface
 WARNING: translation string unused: gz with key
 WARNING: translation string unused: harddisk temperature graphs
@@ -431,6 +428,9 @@ WARNING: translation string unused: loaded modules
 WARNING: translation string unused: local hard disk
 WARNING: translation string unused: localkey
 WARNING: translation string unused: localkeyfile
+WARNING: translation string unused: locationblock country code
+WARNING: translation string unused: locationblock country name
+WARNING: translation string unused: locationblock flag
 WARNING: translation string unused: log enabled
 WARNING: translation string unused: log var messages
 WARNING: translation string unused: log viewer
@@ -520,6 +520,7 @@ WARNING: translation string unused: optionsfw portlist hint
 WARNING: translation string unused: optionsfw warning
 WARNING: translation string unused: or
 WARNING: translation string unused: original
+WARNING: translation string unused: other
 WARNING: translation string unused: our donors
 WARNING: translation string unused: out
 WARNING: translation string unused: outgoing firewall
@@ -805,7 +806,7 @@ WARNING: translation string unused: zoneconf val ppp assignment error
 WARNING: translation string unused: zoneconf val vlan amount assignment error
 WARNING: translation string unused: zoneconf val vlan tag assignment error
 WARNING: translation string unused: zoneconf val zoneslave amount error
-WARNING: untranslated string: fwhost cust geoipgrp = unknown string
+WARNING: untranslated string: fwhost cust locationgrp = unknown string
 WARNING: untranslated string: fwhost err hostip = unknown string
 WARNING: untranslated string: guardian block a host = unknown string
 WARNING: untranslated string: guardian block httpd brute-force = unknown string
@@ -840,4 +841,3 @@ WARNING: untranslated string: pakfire ago = ago.
 WARNING: untranslated string: route config changed = unknown string
 WARNING: untranslated string: routing config added = unknown string
 WARNING: untranslated string: routing config changed = unknown string
-WARNING: untranslated string: srbds = Special register buffer data sampling
diff --git a/doc/language_issues.it b/doc/language_issues.it
index fa7a842dc..93e4b097f 100644
--- a/doc/language_issues.it
+++ b/doc/language_issues.it
@@ -494,6 +494,7 @@ WARNING: translation string unused: optionsfw portlist hint
 WARNING: translation string unused: optionsfw warning
 WARNING: translation string unused: or
 WARNING: translation string unused: original
+WARNING: translation string unused: other
 WARNING: translation string unused: our donors
 WARNING: translation string unused: out
 WARNING: translation string unused: outgoing firewall
@@ -903,20 +904,13 @@ WARNING: untranslated string: fwdfw limitconcon = Limit concurrent connections p
 WARNING: untranslated string: fwdfw maxconcon = Max. concurrent connections
 WARNING: untranslated string: fwdfw numcon = Number of connections
 WARNING: untranslated string: fwdfw ratelimit = Rate-limit new connections
-WARNING: untranslated string: fwhost addgeoipgrp = Add new GeoIP group
-WARNING: untranslated string: fwhost cust geoipgroup = GeoIP Groups
-WARNING: untranslated string: fwhost cust geoipgrp = unknown string
-WARNING: untranslated string: fwhost cust geoiplocation = GeoIP Locations
+WARNING: untranslated string: fwhost addlocationgrp = Add new Location group
+WARNING: untranslated string: fwhost cust location = Location Groups
+WARNING: untranslated string: fwhost cust locationgroup = Location Groups
+WARNING: untranslated string: fwhost cust locationgrp = unknown string
 WARNING: untranslated string: fwhost err hostip = unknown string
-WARNING: untranslated string: fwhost newgeoipgrp = GeoIP Groups
+WARNING: untranslated string: fwhost newlocationgrp = Location Groups
 WARNING: untranslated string: generate ptr = Generate PTR
-WARNING: untranslated string: geoip = GeoIP
-WARNING: untranslated string: geoipblock = GeoIP Block
-WARNING: untranslated string: geoipblock block countries = Block countries
-WARNING: untranslated string: geoipblock configuration = GeoIP Configuration
-WARNING: untranslated string: geoipblock country is allowed = Incoming traffic from this country is allowed
-WARNING: untranslated string: geoipblock country is blocked = Incoming traffic from this country will be blocked
-WARNING: untranslated string: geoipblock enable feature = Enable GeoIP based blocking:
 WARNING: untranslated string: guaranteed bandwith = Guaranteed bandwith
 WARNING: untranslated string: guardian = Guardian
 WARNING: untranslated string: guardian block a host = unknown string
@@ -989,6 +983,13 @@ WARNING: untranslated string: ipsec routing table entries = IPsec Routing Table
 WARNING: untranslated string: ipsec settings = IPsec Settings
 WARNING: untranslated string: itlb multihit = iTLB MultiHit
 WARNING: untranslated string: local ip address = Local IP Address
+WARNING: untranslated string: location = Location
+WARNING: untranslated string: locationblock = Location Block
+WARNING: untranslated string: locationblock block countries = Block countries
+WARNING: untranslated string: locationblock configuration = Location Configuration
+WARNING: untranslated string: locationblock country is allowed = Incoming traffic from this country is allowed
+WARNING: untranslated string: locationblock country is blocked = Incoming traffic from this country will be blocked
+WARNING: untranslated string: locationblock enable feature = Enable Location based blocking:
 WARNING: untranslated string: log server protocol = protocol:
 WARNING: untranslated string: masquerade blue = Masquerade BLUE
 WARNING: untranslated string: masquerade green = Masquerade GREEN
diff --git a/doc/language_issues.nl b/doc/language_issues.nl
index dec6d6a79..ad76bf228 100644
--- a/doc/language_issues.nl
+++ b/doc/language_issues.nl
@@ -489,6 +489,7 @@ WARNING: translation string unused: optionsfw portlist hint
 WARNING: translation string unused: optionsfw warning
 WARNING: translation string unused: or
 WARNING: translation string unused: original
+WARNING: translation string unused: other
 WARNING: translation string unused: our donors
 WARNING: translation string unused: out
 WARNING: translation string unused: outgoing firewall
@@ -909,22 +910,15 @@ WARNING: untranslated string: fwdfw limitconcon = Limit concurrent connections p
 WARNING: untranslated string: fwdfw maxconcon = Max. concurrent connections
 WARNING: untranslated string: fwdfw numcon = Number of connections
 WARNING: untranslated string: fwdfw ratelimit = Rate-limit new connections
-WARNING: untranslated string: fwhost addgeoipgrp = Add new GeoIP group
-WARNING: untranslated string: fwhost cust geoipgroup = GeoIP Groups
-WARNING: untranslated string: fwhost cust geoipgrp = unknown string
-WARNING: untranslated string: fwhost cust geoiplocation = GeoIP Locations
+WARNING: untranslated string: fwhost addlocationgrp = Add new Location group
+WARNING: untranslated string: fwhost cust location = Location Groups
+WARNING: untranslated string: fwhost cust locationgroup = Location Groups
+WARNING: untranslated string: fwhost cust locationgrp = unknown string
 WARNING: untranslated string: fwhost err hostip = unknown string
-WARNING: untranslated string: fwhost newgeoipgrp = GeoIP Groups
+WARNING: untranslated string: fwhost newlocationgrp = Location Groups
 WARNING: untranslated string: gen dh = Generate new Diffie-Hellman parameters
 WARNING: untranslated string: generate dh key = Generate Diffie-Hellman parameters
 WARNING: untranslated string: generate ptr = Generate PTR
-WARNING: untranslated string: geoip = GeoIP
-WARNING: untranslated string: geoipblock = GeoIP Block
-WARNING: untranslated string: geoipblock block countries = Block countries
-WARNING: untranslated string: geoipblock configuration = GeoIP Configuration
-WARNING: untranslated string: geoipblock country is allowed = Incoming traffic from this country is allowed
-WARNING: untranslated string: geoipblock country is blocked = Incoming traffic from this country will be blocked
-WARNING: untranslated string: geoipblock enable feature = Enable GeoIP based blocking:
 WARNING: untranslated string: guardian = Guardian
 WARNING: untranslated string: guardian block a host = unknown string
 WARNING: untranslated string: guardian block httpd brute-force = unknown string
@@ -998,6 +992,13 @@ WARNING: untranslated string: ipsec routing table entries = IPsec Routing Table
 WARNING: untranslated string: ipsec settings = IPsec Settings
 WARNING: untranslated string: itlb multihit = iTLB MultiHit
 WARNING: untranslated string: local ip address = Local IP Address
+WARNING: untranslated string: location = Location
+WARNING: untranslated string: locationblock = Location Block
+WARNING: untranslated string: locationblock block countries = Block countries
+WARNING: untranslated string: locationblock configuration = Location Configuration
+WARNING: untranslated string: locationblock country is allowed = Incoming traffic from this country is allowed
+WARNING: untranslated string: locationblock country is blocked = Incoming traffic from this country will be blocked
+WARNING: untranslated string: locationblock enable feature = Enable Location based blocking:
 WARNING: untranslated string: log server protocol = protocol:
 WARNING: untranslated string: masquerade blue = Masquerade BLUE
 WARNING: untranslated string: masquerade green = Masquerade GREEN
diff --git a/doc/language_issues.pl b/doc/language_issues.pl
index 885b44f62..475db4953 100644
--- a/doc/language_issues.pl
+++ b/doc/language_issues.pl
@@ -284,9 +284,6 @@ WARNING: translation string unused: generatekeys
 WARNING: translation string unused: generatepolicy
 WARNING: translation string unused: generatereport
 WARNING: translation string unused: genkey
-WARNING: translation string unused: geoipblock country code
-WARNING: translation string unused: geoipblock country name
-WARNING: translation string unused: geoipblock flag
 WARNING: translation string unused: green interface
 WARNING: translation string unused: gz with key
 WARNING: translation string unused: harddisk temperature graphs
@@ -352,6 +349,9 @@ WARNING: translation string unused: loaded modules
 WARNING: translation string unused: local hard disk
 WARNING: translation string unused: localkey
 WARNING: translation string unused: localkeyfile
+WARNING: translation string unused: locationblock country code
+WARNING: translation string unused: locationblock country name
+WARNING: translation string unused: locationblock flag
 WARNING: translation string unused: log enabled
 WARNING: translation string unused: log var messages
 WARNING: translation string unused: log viewer
@@ -1000,10 +1000,10 @@ WARNING: untranslated string: fwdfw wd_thu = Thu
 WARNING: untranslated string: fwdfw wd_tue = Tue
 WARNING: untranslated string: fwdfw wd_wed = Wed
 WARNING: untranslated string: fwhost OpenVPN N-2-N = OpenVPN Net-to-Net
-WARNING: untranslated string: fwhost addgeoipgrp = Add new GeoIP group
 WARNING: untranslated string: fwhost addgrp = Add new network/host group
 WARNING: untranslated string: fwhost addgrpname = Group name:
 WARNING: untranslated string: fwhost addhost = Add new host
+WARNING: untranslated string: fwhost addlocationgrp = Add new Location group
 WARNING: untranslated string: fwhost addnet = Add new network
 WARNING: untranslated string: fwhost addservice = Add service
 WARNING: untranslated string: fwhost addservicegrp = Add new service group
@@ -1013,10 +1013,10 @@ WARNING: untranslated string: fwhost ccdhost = OpenVPN clients:
 WARNING: untranslated string: fwhost ccdnet = OpenVPN networks:
 WARNING: untranslated string: fwhost change = Modify
 WARNING: untranslated string: fwhost cust addr = Hosts
-WARNING: untranslated string: fwhost cust geoipgroup = GeoIP Groups
-WARNING: untranslated string: fwhost cust geoipgrp = unknown string
-WARNING: untranslated string: fwhost cust geoiplocation = GeoIP Locations
 WARNING: untranslated string: fwhost cust grp = Network/Host Groups
+WARNING: untranslated string: fwhost cust location = Location Groups
+WARNING: untranslated string: fwhost cust locationgroup = Location Groups
+WARNING: untranslated string: fwhost cust locationgrp = unknown string
 WARNING: untranslated string: fwhost cust net = Networks
 WARNING: untranslated string: fwhost cust service = Services
 WARNING: untranslated string: fwhost cust srvgrp = Service Groups
@@ -1055,9 +1055,9 @@ WARNING: untranslated string: fwhost ip_mac = IP/MAC address
 WARNING: untranslated string: fwhost ipsec net = IPsec networks:
 WARNING: untranslated string: fwhost menu = Firewall Groups
 WARNING: untranslated string: fwhost netaddress = Network address
-WARNING: untranslated string: fwhost newgeoipgrp = GeoIP Groups
 WARNING: untranslated string: fwhost newgrp = Network/Host Groups
 WARNING: untranslated string: fwhost newhost = Hosts
+WARNING: untranslated string: fwhost newlocationgrp = Location Groups
 WARNING: untranslated string: fwhost newnet = Networks
 WARNING: untranslated string: fwhost newservice = Services
 WARNING: untranslated string: fwhost newservicegrp = Service Groups
@@ -1208,7 +1208,6 @@ WARNING: untranslated string: openvpn prefix local subnet = Using the prefix not
 WARNING: untranslated string: openvpn prefix openvpn subnet = Using the prefix notation is not supported for the OpenVPN subnet. Please enter a subnet mask like 255.255.255.0.
 WARNING: untranslated string: openvpn prefix remote subnet = Using the prefix notation is not supported for the remote subnet. Please enter a subnet mask like 255.255.255.0.
 WARNING: untranslated string: openvpn subnet is used = The given subnet is used by another OpenVPN server.
-WARNING: untranslated string: other = Other
 WARNING: untranslated string: outgoing compression in bytes per second = Outgoing compression
 WARNING: untranslated string: outgoing firewall access = Outgoing Firewall Access
 WARNING: untranslated string: outgoing firewall p2p allow = Using the P2P protocol is allowed
diff --git a/doc/language_issues.ru b/doc/language_issues.ru
index d5433b37e..f99fd4d9a 100644
--- a/doc/language_issues.ru
+++ b/doc/language_issues.ru
@@ -994,10 +994,10 @@ WARNING: untranslated string: fwdfw wd_thu = Thu
 WARNING: untranslated string: fwdfw wd_tue = Tue
 WARNING: untranslated string: fwdfw wd_wed = Wed
 WARNING: untranslated string: fwhost OpenVPN N-2-N = OpenVPN Net-to-Net
-WARNING: untranslated string: fwhost addgeoipgrp = Add new GeoIP group
 WARNING: untranslated string: fwhost addgrp = Add new network/host group
 WARNING: untranslated string: fwhost addgrpname = Group name:
 WARNING: untranslated string: fwhost addhost = Add new host
+WARNING: untranslated string: fwhost addlocationgrp = Add new Location group
 WARNING: untranslated string: fwhost addnet = Add new network
 WARNING: untranslated string: fwhost addservice = Add service
 WARNING: untranslated string: fwhost addservicegrp = Add new service group
@@ -1007,10 +1007,10 @@ WARNING: untranslated string: fwhost ccdhost = OpenVPN clients:
 WARNING: untranslated string: fwhost ccdnet = OpenVPN networks:
 WARNING: untranslated string: fwhost change = Modify
 WARNING: untranslated string: fwhost cust addr = Hosts
-WARNING: untranslated string: fwhost cust geoipgroup = GeoIP Groups
-WARNING: untranslated string: fwhost cust geoipgrp = unknown string
-WARNING: untranslated string: fwhost cust geoiplocation = GeoIP Locations
 WARNING: untranslated string: fwhost cust grp = Network/Host Groups
+WARNING: untranslated string: fwhost cust location = Location Groups
+WARNING: untranslated string: fwhost cust locationgroup = Location Groups
+WARNING: untranslated string: fwhost cust locationgrp = unknown string
 WARNING: untranslated string: fwhost cust net = Networks
 WARNING: untranslated string: fwhost cust service = Services
 WARNING: untranslated string: fwhost cust srvgrp = Service Groups
@@ -1049,9 +1049,9 @@ WARNING: untranslated string: fwhost ip_mac = IP/MAC address
 WARNING: untranslated string: fwhost ipsec net = IPsec networks:
 WARNING: untranslated string: fwhost menu = Firewall Groups
 WARNING: untranslated string: fwhost netaddress = Network address
-WARNING: untranslated string: fwhost newgeoipgrp = GeoIP Groups
 WARNING: untranslated string: fwhost newgrp = Network/Host Groups
 WARNING: untranslated string: fwhost newhost = Hosts
+WARNING: untranslated string: fwhost newlocationgrp = Location Groups
 WARNING: untranslated string: fwhost newnet = Networks
 WARNING: untranslated string: fwhost newservice = Services
 WARNING: untranslated string: fwhost newservicegrp = Service Groups
@@ -1067,13 +1067,6 @@ WARNING: untranslated string: fwhost welcome = Over here, you can group single h
 WARNING: untranslated string: gen dh = Generate new Diffie-Hellman parameters
 WARNING: untranslated string: generate dh key = Generate Diffie-Hellman parameters
 WARNING: untranslated string: generate ptr = Generate PTR
-WARNING: untranslated string: geoip = GeoIP
-WARNING: untranslated string: geoipblock = GeoIP Block
-WARNING: untranslated string: geoipblock block countries = Block countries
-WARNING: untranslated string: geoipblock configuration = GeoIP Configuration
-WARNING: untranslated string: geoipblock country is allowed = Incoming traffic from this country is allowed
-WARNING: untranslated string: geoipblock country is blocked = Incoming traffic from this country will be blocked
-WARNING: untranslated string: geoipblock enable feature = Enable GeoIP based blocking:
 WARNING: untranslated string: grouptype = Grouptype:
 WARNING: untranslated string: guardian = Guardian
 WARNING: untranslated string: guardian block a host = unknown string
@@ -1159,6 +1152,13 @@ WARNING: untranslated string: last = Last
 WARNING: untranslated string: least preferred = least preferred
 WARNING: untranslated string: lifetime = Lifetime:
 WARNING: untranslated string: local ip address = Local IP Address
+WARNING: untranslated string: location = Location
+WARNING: untranslated string: locationblock = Location Block
+WARNING: untranslated string: locationblock block countries = Block countries
+WARNING: untranslated string: locationblock configuration = Location Configuration
+WARNING: untranslated string: locationblock country is allowed = Incoming traffic from this country is allowed
+WARNING: untranslated string: locationblock country is blocked = Incoming traffic from this country will be blocked
+WARNING: untranslated string: locationblock enable feature = Enable Location based blocking:
 WARNING: untranslated string: log server protocol = protocol:
 WARNING: untranslated string: mac filter = MAC filter
 WARNING: untranslated string: masquerade blue = Masquerade BLUE
@@ -1210,7 +1210,6 @@ WARNING: untranslated string: openvpn prefix local subnet = Using the prefix not
 WARNING: untranslated string: openvpn prefix openvpn subnet = Using the prefix notation is not supported for the OpenVPN subnet. Please enter a subnet mask like 255.255.255.0.
 WARNING: untranslated string: openvpn prefix remote subnet = Using the prefix notation is not supported for the remote subnet. Please enter a subnet mask like 255.255.255.0.
 WARNING: untranslated string: openvpn subnet is used = The given subnet is used by another OpenVPN server.
-WARNING: untranslated string: other = Other
 WARNING: untranslated string: outgoing compression in bytes per second = Outgoing compression
 WARNING: untranslated string: outgoing firewall access = Outgoing Firewall Access
 WARNING: untranslated string: outgoing overhead in bytes per second = Outgoing Overhead
diff --git a/doc/language_issues.tr b/doc/language_issues.tr
index 68fbb2972..b6e3426f3 100644
--- a/doc/language_issues.tr
+++ b/doc/language_issues.tr
@@ -343,7 +343,7 @@ WARNING: translation string unused: fwhost Standard Network
 WARNING: translation string unused: fwhost attention
 WARNING: translation string unused: fwhost blue
 WARNING: translation string unused: fwhost changeremark
-WARNING: translation string unused: fwhost cust geoip
+WARNING: translation string unused: fwhost cust locationlocation
 WARNING: translation string unused: fwhost err addrgrp
 WARNING: translation string unused: fwhost err hostorip
 WARNING: translation string unused: fwhost err mac
@@ -365,9 +365,6 @@ WARNING: translation string unused: generatekeys
 WARNING: translation string unused: generatepolicy
 WARNING: translation string unused: generatereport
 WARNING: translation string unused: genkey
-WARNING: translation string unused: geoipblock country code
-WARNING: translation string unused: geoipblock country name
-WARNING: translation string unused: geoipblock flag
 WARNING: translation string unused: green interface
 WARNING: translation string unused: gz with key
 WARNING: translation string unused: harddisk temperature graphs
@@ -434,6 +431,9 @@ WARNING: translation string unused: loaded modules
 WARNING: translation string unused: local hard disk
 WARNING: translation string unused: localkey
 WARNING: translation string unused: localkeyfile
+WARNING: translation string unused: locationblock country code
+WARNING: translation string unused: locationblock country name
+WARNING: translation string unused: locationblock flag
 WARNING: translation string unused: log enabled
 WARNING: translation string unused: log var messages
 WARNING: translation string unused: log viewer
@@ -522,6 +522,7 @@ WARNING: translation string unused: optionsfw portlist hint
 WARNING: translation string unused: optionsfw warning
 WARNING: translation string unused: or
 WARNING: translation string unused: original
+WARNING: translation string unused: other
 WARNING: translation string unused: our donors
 WARNING: translation string unused: out
 WARNING: translation string unused: outgoing firewall
@@ -847,7 +848,7 @@ WARNING: untranslated string: fallout zombieload ridl = Fallout/ZombieLoad/RIDL
 WARNING: untranslated string: force enable = Forced
 WARNING: untranslated string: foreshadow = Foreshadow
 WARNING: untranslated string: fwdfw all subnets = All subnets
-WARNING: untranslated string: fwhost cust geoipgrp = unknown string
+WARNING: untranslated string: fwhost cust locationgrp = unknown string
 WARNING: untranslated string: fwhost err hostip = unknown string
 WARNING: untranslated string: generate ptr = Generate PTR
 WARNING: untranslated string: guardian block a host = unknown string
diff --git a/doc/language_missings b/doc/language_missings
index 021a352bb..913970113 100644
--- a/doc/language_missings
+++ b/doc/language_missings
@@ -421,10 +421,10 @@
 < fwdfw wd_tue
 < fwdfw wd_wed
 < fwdfw xt access
-< fwhost addgeoipgrp
 < fwhost addgrp
 < fwhost addgrpname
 < fwhost addhost
+< fwhost addlocationgrp
 < fwhost addnet
 < fwhost addservice
 < fwhost addservicegrp
@@ -437,10 +437,10 @@
 < fwhost change
 < fwhost changeremark
 < fwhost cust addr
-< fwhost cust geoip
-< fwhost cust geoipgroup
-< fwhost cust geoiplocation
 < fwhost cust grp
+< fwhost cust location
+< fwhost cust locationgroup
+< fwhost cust locationlocation
 < fwhost cust net
 < fwhost Custom Host
 < fwhost Custom Network
@@ -490,9 +490,9 @@
 < fwhost IpSec Network
 < fwhost menu
 < fwhost netaddress
-< fwhost newgeoipgrp
 < fwhost newgrp
 < fwhost newhost
+< fwhost newlocationgrp
 < fwhost newnet
 < fwhost newservice
 < fwhost newservicegrp
@@ -921,7 +921,6 @@
 < bewan adsl usb
 < g.dtm
 < g.lite
-< srbds
 < upload fcdsl.o
 ############################################################################
 # Checking cgi-bin translations for language: it                           #
@@ -1080,22 +1079,12 @@
 < fwdfw maxconcon
 < fwdfw numcon
 < fwdfw ratelimit
-< fwhost addgeoipgrp
-< fwhost cust geoip
-< fwhost cust geoipgroup
-< fwhost cust geoiplocation
-< fwhost newgeoipgrp
+< fwhost addlocationgrp
+< fwhost cust location
+< fwhost cust locationgroup
+< fwhost cust locationlocation
+< fwhost newlocationgrp
 < generate ptr
-< geoip
-< geoipblock
-< geoipblock block countries
-< geoipblock configuration
-< geoipblock country code
-< geoipblock country is allowed
-< geoipblock country is blocked
-< geoipblock country name
-< geoipblock enable feature
-< geoipblock flag
 < guaranteed bandwith
 < guardian
 < hardware vulnerabilities
@@ -1139,6 +1128,16 @@
 < ipsec settings
 < itlb multihit
 < local ip address
+< location
+< locationblock
+< locationblock block countries
+< locationblock configuration
+< locationblock country code
+< locationblock country is allowed
+< locationblock country is blocked
+< locationblock country name
+< locationblock enable feature
+< locationblock flag
 < log server protocol
 < masquerade blue
 < masquerade green
@@ -1451,24 +1450,14 @@
 < fwdfw maxconcon
 < fwdfw numcon
 < fwdfw ratelimit
-< fwhost addgeoipgrp
-< fwhost cust geoip
-< fwhost cust geoipgroup
-< fwhost cust geoiplocation
-< fwhost newgeoipgrp
+< fwhost addlocationgrp
+< fwhost cust location
+< fwhost cust locationgroup
+< fwhost cust locationlocation
+< fwhost newlocationgrp
 < gen dh
 < generate dh key
 < generate ptr
-< geoip
-< geoipblock
-< geoipblock block countries
-< geoipblock configuration
-< geoipblock country code
-< geoipblock country is allowed
-< geoipblock country is blocked
-< geoipblock country name
-< geoipblock enable feature
-< geoipblock flag
 < guardian
 < hardware vulnerabilities
 < ids apply
@@ -1513,6 +1502,16 @@
 < ipsec settings
 < itlb multihit
 < local ip address
+< location
+< locationblock
+< locationblock block countries
+< locationblock configuration
+< locationblock country code
+< locationblock country is allowed
+< locationblock country is blocked
+< locationblock country name
+< locationblock enable feature
+< locationblock flag
 < log server protocol
 < masquerade blue
 < masquerade green
@@ -2047,10 +2046,10 @@
 < fwdfw wd_tue
 < fwdfw wd_wed
 < fwdfw xt access
-< fwhost addgeoipgrp
 < fwhost addgrp
 < fwhost addgrpname
 < fwhost addhost
+< fwhost addlocationgrp
 < fwhost addnet
 < fwhost addservice
 < fwhost addservicegrp
@@ -2063,10 +2062,10 @@
 < fwhost change
 < fwhost changeremark
 < fwhost cust addr
-< fwhost cust geoip
-< fwhost cust geoipgroup
-< fwhost cust geoiplocation
 < fwhost cust grp
+< fwhost cust location
+< fwhost cust locationgroup
+< fwhost cust locationlocation
 < fwhost cust net
 < fwhost Custom Host
 < fwhost Custom Network
@@ -2116,9 +2115,9 @@
 < fwhost IpSec Network
 < fwhost menu
 < fwhost netaddress
-< fwhost newgeoipgrp
 < fwhost newgrp
 < fwhost newhost
+< fwhost newlocationgrp
 < fwhost newnet
 < fwhost newservice
 < fwhost newservicegrp
@@ -2147,16 +2146,6 @@
 < gen dh
 < generate dh key
 < generate ptr
-< geoip
-< geoipblock
-< geoipblock block countries
-< geoipblock configuration
-< geoipblock country code
-< geoipblock country is allowed
-< geoipblock country is blocked
-< geoipblock country name
-< geoipblock enable feature
-< geoipblock flag
 < grouptype
 < guardian
 < hardware support
@@ -2213,6 +2202,16 @@
 < least preferred
 < lifetime
 < local ip address
+< location
+< locationblock
+< locationblock block countries
+< locationblock configuration
+< locationblock country code
+< locationblock country is allowed
+< locationblock country is blocked
+< locationblock country name
+< locationblock enable feature
+< locationblock flag
 < log server protocol
 < mac filter
 < masquerade blue
@@ -2901,10 +2900,10 @@
 < fwdfw wd_tue
 < fwdfw wd_wed
 < fwdfw xt access
-< fwhost addgeoipgrp
 < fwhost addgrp
 < fwhost addgrpname
 < fwhost addhost
+< fwhost addlocationgrp
 < fwhost addnet
 < fwhost addservice
 < fwhost addservicegrp
@@ -2917,10 +2916,10 @@
 < fwhost change
 < fwhost changeremark
 < fwhost cust addr
-< fwhost cust geoip
-< fwhost cust geoipgroup
-< fwhost cust geoiplocation
 < fwhost cust grp
+< fwhost cust location
+< fwhost cust locationgroup
+< fwhost cust locationlocation
 < fwhost cust net
 < fwhost Custom Host
 < fwhost Custom Network
@@ -2970,9 +2969,9 @@
 < fwhost IpSec Network
 < fwhost menu
 < fwhost netaddress
-< fwhost newgeoipgrp
 < fwhost newgrp
 < fwhost newhost
+< fwhost newlocationgrp
 < fwhost newnet
 < fwhost newservice
 < fwhost newservicegrp
@@ -3001,16 +3000,6 @@
 < gen dh
 < generate dh key
 < generate ptr
-< geoip
-< geoipblock
-< geoipblock block countries
-< geoipblock configuration
-< geoipblock country code
-< geoipblock country is allowed
-< geoipblock country is blocked
-< geoipblock country name
-< geoipblock enable feature
-< geoipblock flag
 < grouptype
 < guardian
 < hardware support
@@ -3069,6 +3058,16 @@
 < least preferred
 < lifetime
 < local ip address
+< location
+< locationblock
+< locationblock block countries
+< locationblock configuration
+< locationblock country code
+< locationblock country is allowed
+< locationblock country is blocked
+< locationblock country name
+< locationblock enable feature
+< locationblock flag
 < log server protocol
 < mac filter
 < masquerade blue
diff --git a/html/cgi-bin/connections.cgi b/html/cgi-bin/connections.cgi
index 7399fea3c..6c55bd7a0 100644
--- a/html/cgi-bin/connections.cgi
+++ b/html/cgi-bin/connections.cgi
@@ -32,7 +32,7 @@ use Switch;
 require '/var/ipfire/general-functions.pl';
 require "${General::swroot}/lang.pl";
 require "${General::swroot}/header.pl";
-require "${General::swroot}/geoip-functions.pl";
+require "${General::swroot}/location-functions.pl";
 
 my $colour_multicast = "#A0A0A0";
 
@@ -86,6 +86,9 @@ if ( $debug ){
 my @dummy = ( ${Header::table1colour} );
 undef (@dummy);
 
+# Init libloc database connection.
+my $libloc_db_handle = &Location::Functions::init();
+
 # check sorting arguments
 if ( $cgiin{'sort_field'} ~~ [ '1','2','3','4','5','6','7','8','9' ] ) {
 	$SORT_FIELD = $cgiin{'sort_field'};
@@ -550,11 +553,11 @@ foreach my $line (@conntrack) {
 	my $bytes_in = format_bytes($bytes[0]);
 	my $bytes_out = format_bytes($bytes[1]);
 
-	# enumerate GeoIP information
-	my $srcccode = &GeoIP::lookup($sip_ret);
-	my $src_flag_icon = &GeoIP::get_flag_icon($srcccode);
-	my $dstccode = &GeoIP::lookup($dip_ret);
-	my $dst_flag_icon = &GeoIP::get_flag_icon($dstccode);
+	# enumerate location information
+	my $srcccode = &Location::Functions::lookup_country_code($libloc_db_handle, $sip_ret);
+	my $src_flag_icon = &Location::Functions::get_flag_icon($srcccode);
+	my $dstccode = &Location::Functions::lookup_country_code($libloc_db_handle, $dip_ret);
+	my $dst_flag_icon = &Location::Functions::get_flag_icon($dstccode);
 
 	# Format TTL
 	$ttl = format_time($ttl);
diff --git a/html/cgi-bin/country.cgi b/html/cgi-bin/country.cgi
index 8df2427a9..a1cf24347 100644
--- a/html/cgi-bin/country.cgi
+++ b/html/cgi-bin/country.cgi
@@ -28,7 +28,7 @@ my $lines = '1';
 my $lines2 = '';
 
 require '/var/ipfire/general-functions.pl';
-require "${General::swroot}/geoip-functions.pl";
+require "${General::swroot}/location-functions.pl";
 require "${General::swroot}/lang.pl";
 require "${General::swroot}/header.pl";
 
@@ -63,10 +63,10 @@ foreach my $country (@countries) {
 	$country = uc($country);
 
 	# Get flag icon for of the country.
-	my $flag_icon = &GeoIP::get_flag_icon($country);
+	my $flag_icon = &Location::Functions::get_flag_icon($country);
 
 	# Get country name.
-	my $name = &GeoIP::get_full_country_name($country);
+	my $name = &Location::Functions::get_full_country_name($country);
 
 	if ($lines % 2) {
 		print "<td $col><a id='$country'><img src='$flag_icon' alt='$country' title='$country'/></a></td>";
diff --git a/html/cgi-bin/credits.cgi b/html/cgi-bin/credits.cgi
index 08d5a98fb..2f3ee3b4a 100644
--- a/html/cgi-bin/credits.cgi
+++ b/html/cgi-bin/credits.cgi
@@ -147,16 +147,6 @@ END
 ;
 &Header::closebox();
 
-&Header::openbox("100%", "left", $Lang::tr{'other'});
-print <<END
-	<p>
-		This product includes GeoLite data created by MaxMind, available from
-		<a href='http://www.maxmind.com/' target="_blank">http://www.maxmind.com/</a>.
-	</p>
-END
-;
-&Header::closebox();
-
 &Header::closebigbox();
 
 &Header::closepage();
diff --git a/html/cgi-bin/dns.cgi b/html/cgi-bin/dns.cgi
index 676d95f8a..0a097e2c0 100755
--- a/html/cgi-bin/dns.cgi
+++ b/html/cgi-bin/dns.cgi
@@ -27,7 +27,7 @@ use IO::Socket;
 #use CGI::Carp 'fatalsToBrowser';
 
 require '/var/ipfire/general-functions.pl';
-require "${General::swroot}/geoip-functions.pl";
+require "${General::swroot}/location-functions.pl";
 require "${General::swroot}/ids-functions.pl";
 require "${General::swroot}/lang.pl";
 require "${General::swroot}/header.pl";
@@ -269,6 +269,9 @@ my %dns_servers = ();
 # Read-in config file.
 &General::readhasharray("$servers_file", \%dns_servers);
 
+# Libloc database handle
+my $libloc_db_handle = &Location::Functions::init();
+
 &Header::openpage($Lang::tr{'dns'}, 1, '');
 
 &Header::openbigbox('100%', 'left', '', $errormessage);
@@ -594,9 +597,9 @@ END
 					$status_colour = ${Header::colourred};
 				}
 
-				# collect more information about name server (rDNS, GeoIP country code)
-				my $ccode = &GeoIP::lookup($nameserver);
-				my $flag_icon = &GeoIP::get_flag_icon($ccode);
+				# collect more information about name server (rDNS, country code)
+				my $ccode = &Location::Functions::lookup_country_code($libloc_db_handle, $nameserver);
+				my $flag_icon = &Location::Functions::get_flag_icon($ccode);
 
 				my $rdns;
 
diff --git a/html/cgi-bin/firewall.cgi b/html/cgi-bin/firewall.cgi
index f54bf6f6c..1483e779f 100644
--- a/html/cgi-bin/firewall.cgi
+++ b/html/cgi-bin/firewall.cgi
@@ -35,7 +35,7 @@ require '/var/ipfire/general-functions.pl';
 require '/var/ipfire/network-functions.pl';
 require "${General::swroot}/lang.pl";
 require "${General::swroot}/header.pl";
-require "${General::swroot}/geoip-functions.pl";
+require "${General::swroot}/location-functions.pl";
 require "/usr/lib/firewall/firewall-lib.pl";
 
 unless (-d "${General::swroot}/firewall")			{ system("mkdir ${General::swroot}/firewall"); }
@@ -50,7 +50,7 @@ my %defaultNetworks=();
 my %netsettings=();
 my %customhost=();
 my %customgrp=();
-my %customgeoipgrp=();
+my %customlocationgrp=();
 my %customnetworks=();
 my %customservice=();
 my %customservicegrp=();
@@ -78,7 +78,7 @@ my $color;
 my $confignet		= "${General::swroot}/fwhosts/customnetworks";
 my $confighost		= "${General::swroot}/fwhosts/customhosts";
 my $configgrp 		= "${General::swroot}/fwhosts/customgroups";
-my $configgeoipgrp	= "${General::swroot}/fwhosts/customgeoipgrp";
+my $configlocationgrp	= "${General::swroot}/fwhosts/customlocationgrp";
 my $configsrv 		= "${General::swroot}/fwhosts/customservices";
 my $configsrvgrp	= "${General::swroot}/fwhosts/customservicegrp";
 my $configccdnet 	= "${General::swroot}/ovpn/ccd.conf";
@@ -1071,41 +1071,41 @@ END
 		}
 		print"</select></td>";
 	}
-	# geoip locations / groups.
-	my @geoip_locations = &fwlib::get_geoip_locations();
+	# Locations / groups.
+	my @locations = &fwlib::get_locations();
 
 	print "<tr>\n";
-	print "<td valign='top'><input type='radio' name='$grp' id='cust_geoip_$srctgt' value='cust_geoip_$srctgt' $checked{$grp}{'cust_geoip_'.$srctgt}></td>\n";
-	print "<td>$Lang::tr{'geoip'}</td>\n";
-	print "<td align='right'><select name='cust_geoip_$srctgt' style='width:200px;'>\n";
-
-	# Add GeoIP groups to dropdown.
-	if (!-z $configgeoipgrp) {
-		print "<optgroup label='$Lang::tr{'fwhost cust geoipgroup'}'>\n";
-		foreach my $key (sort { ncmp($customgeoipgrp{$a}[0],$customgeoipgrp{$b}[0]) } keys %customgeoipgrp) {
+	print "<td valign='top'><input type='radio' name='$grp' id='cust_location_$srctgt' value='cust_location_$srctgt' $checked{$grp}{'cust_location_'.$srctgt}></td>\n";
+	print "<td>$Lang::tr{'location'}</td>\n";
+	print "<td align='right'><select name='cust_location_$srctgt' style='width:200px;'>\n";
+
+	# Add Location groups to dropdown.
+	if (!-z $configlocationgrp) {
+		print "<optgroup label='$Lang::tr{'fwhost cust locationgroup'}'>\n";
+		foreach my $key (sort { ncmp($customlocationgrp{$a}[0],$customlocationgrp{$b}[0]) } keys %customlocationgrp) {
 			my $selected;
 
 			# Generate stored value for select detection.
-			my $stored = join(':', "group",$customgeoipgrp{$key}[0]);
+			my $stored = join(':', "group",$customlocationgrp{$key}[0]);
 
 			# Only show a group once and group with elements.
-			if($helper ne $customgeoipgrp{$key}[0] && $customgeoipgrp{$key}[2] ne 'none') {
+			if($helper ne $customlocationgrp{$key}[0] && $customlocationgrp{$key}[2] ne 'none') {
 				# Mark current entry as selected.
 				if ($fwdfwsettings{$fwdfwsettings{$grp}} eq $stored) {
 					$selected = "selected='selected'";
 				}
-                                print"<option $selected value='group:$customgeoipgrp{$key}[0]'>$customgeoipgrp{$key}[0]</option>\n";
+                                print"<option $selected value='group:$customlocationgrp{$key}[0]'>$customlocationgrp{$key}[0]</option>\n";
                         }
-                        $helper=$customgeoipgrp{$key}[0];
+                        $helper=$customlocationgrp{$key}[0];
                 }
 		print "</optgroup>\n";
 	}
 
 	# Add locations.
-	print "<optgroup label='$Lang::tr{'fwhost cust geoiplocation'}'>\n";
-	foreach my $location (@geoip_locations) {
+	print "<optgroup label='$Lang::tr{'fwhost cust location'}'>\n";
+	foreach my $location (@locations) {
 		# Get country name.
-		my $country_name = &GeoIP::get_full_country_name($location);
+		my $country_name = &Location::Functions::get_full_country_name($location);
 
 		# Mark current entry as selected.
 		my $selected;
@@ -1116,7 +1116,7 @@ END
 	}
 	print "</optgroup>\n";
 
-	# Close GeoIP dropdown.
+	# Close Locations dropdown.
 	print "</select></td>\n";
 
 	#End left table. start right table (vpn)
@@ -1476,7 +1476,7 @@ sub newrule
 	&General::readhasharray("$confighost", \%customhost);
 	&General::readhasharray("$configccdhost", \%ccdhost);
 	&General::readhasharray("$configgrp", \%customgrp);
-	&General::readhasharray("$configgeoipgrp", \%customgeoipgrp);
+	&General::readhasharray("$configlocationgrp", \%customlocationgrp);
 	&General::readhasharray("$configipsec", \%ipsecconf);
 	&General::get_aliases(\%aliases);
 	my %checked=();
@@ -2611,12 +2611,12 @@ END
 				}else{
 					print $$hash{$key}[4];
 				}
-			}elsif ($$hash{$key}[3] eq 'cust_geoip_src') {
+			}elsif ($$hash{$key}[3] eq 'cust_location_src') {
 				my ($split1,$split2) = split(":", $$hash{$key}[4]);
 				if ($split2) {
 					print "$split2\n";
 				}else{
-					print "$Lang::tr{'geoip'}: $$hash{$key}[4]\n";
+					print "$Lang::tr{'location'}: $$hash{$key}[4]\n";
 				}
 			}elsif ($$hash{$key}[4] eq 'RED1'){
 				print "$ipfireiface $Lang::tr{'fwdfw red'}";
@@ -2699,12 +2699,12 @@ END
 				}else{
 					print $$hash{$key}[6];
 				}
-			}elsif ($$hash{$key}[5] eq 'cust_geoip_tgt') {
+			}elsif ($$hash{$key}[5] eq 'cust_location_tgt') {
 				my ($split1,$split2) = split(":", $$hash{$key}[6]);
 				if ($split2) {
 					print "$split2\n";
 				}else{
-					print "$Lang::tr{'geoip'}: $$hash{$key}[6]\n";
+					print "$Lang::tr{'location'}: $$hash{$key}[6]\n";
 				}
 			}elsif ($$hash{$key}[5] eq 'tgt_addr'){
 				my ($split1,$split2) = split("/",$$hash{$key}[6]);
diff --git a/html/cgi-bin/fwhosts.cgi b/html/cgi-bin/fwhosts.cgi
index 7315e79b6..fe5117ae5 100644
--- a/html/cgi-bin/fwhosts.cgi
+++ b/html/cgi-bin/fwhosts.cgi
@@ -28,7 +28,7 @@ use CGI::Carp 'fatalsToBrowser';
 no warnings 'uninitialized';
 require '/var/ipfire/general-functions.pl';
 require '/var/ipfire/network-functions.pl';
-require "/var/ipfire/geoip-functions.pl";
+require "/var/ipfire/location-functions.pl";
 require "/usr/lib/firewall/firewall-lib.pl";
 require "${General::swroot}/lang.pl";
 require "${General::swroot}/header.pl";
@@ -39,7 +39,7 @@ my %customhost=();
 my %customgrp=();
 my %customservice=();
 my %customservicegrp=();
-my %customgeoipgrp=();
+my %customlocationgrp=();
 my %ccdnet=();
 my %ccdhost=();
 my %ipsecconf=();
@@ -67,7 +67,7 @@ my $configccdhost	= "${General::swroot}/ovpn/ovpnconfig";
 my $configipsec		= "${General::swroot}/vpn/config";
 my $configsrv		= "${General::swroot}/fwhosts/customservices";
 my $configsrvgrp	= "${General::swroot}/fwhosts/customservicegrp";
-my $configgeoipgrp	= "${General::swroot}/fwhosts/customgeoipgrp";
+my $configlocationgrp	= "${General::swroot}/fwhosts/customlocationgrp";
 my $fwconfigfwd		= "${General::swroot}/firewall/config";
 my $fwconfiginp		= "${General::swroot}/firewall/input";
 my $fwconfigout		= "${General::swroot}/firewall/outgoing";
@@ -80,7 +80,7 @@ unless (-e $confighost)   { system("touch $confighost"); }
 unless (-e $configgrp)    { system("touch $configgrp"); }
 unless (-e $configsrv)    { system("touch $configsrv"); }
 unless (-e $configsrvgrp) { system("touch $configsrvgrp"); }
-unless (-e $configgeoipgrp) { system("touch $configgeoipgrp"); }
+unless (-e $configlocationgrp) { system("touch $configlocationgrp"); }
 
 &General::readhash("${General::swroot}/main/settings", \%mainsettings);
 &General::readhash("/srv/web/ipfire/html/themes/".$mainsettings{'THEME'}."/include/colors.txt", \%color);
@@ -680,7 +680,7 @@ if ($fwhostsettings{'ACTION'} eq 'savegrp')
 		&addgrp;
 		&viewtablegrp;
 }
-if ($fwhostsettings{'ACTION'} eq 'savegeoipgrp')
+if ($fwhostsettings{'ACTION'} eq 'savelocationgrp')
 {
 	my $grp=$fwhostsettings{'grp_name'};
 	my $rem=$fwhostsettings{'remark'};
@@ -688,7 +688,7 @@ if ($fwhostsettings{'ACTION'} eq 'savegeoipgrp')
 	my $type;
 	my @target;
 	my @newgrp;
-	&General::readhasharray("$configgeoipgrp", \%customgeoipgrp);
+	&General::readhasharray("$configlocationgrp", \%customlocationgrp);
 	&General::readhasharray("$fwconfigfwd", \%fwfwd);
 	&General::readhasharray("$fwconfiginp", \%fwinp);
 	&General::readhasharray("$fwconfigout", \%fwout);
@@ -705,12 +705,12 @@ if ($fwhostsettings{'ACTION'} eq 'savegeoipgrp')
 
 	if ($fwhostsettings{'update'} eq 'on'){
 		@target=$fwhostsettings{'COUNTRY_CODE'};
-		$type='GeoIP Group';
+		$type='Location Group';
 
 		#check if host/net exists in grp
 		my $test="$grp,$fwhostsettings{'oldremark'},@target";
-		foreach my $key (keys %customgeoipgrp) {
-			my $test1="$customgeoipgrp{$key}[0],$customgeoipgrp{$key}[1],$customgeoipgrp{$key}[2]";
+		foreach my $key (keys %customlocationgrp) {
+			my $test1="$customlocationgrp{$key}[0],$customlocationgrp{$key}[1],$customlocationgrp{$key}[2]";
 			if ($test1 eq $test){
 				$errormessage=$Lang::tr{'fwhost err isingrp'};
 				$fwhostsettings{'update'} = 'on';
@@ -725,41 +725,41 @@ if ($fwhostsettings{'ACTION'} eq 'savegeoipgrp')
 			@target="none";
 		}
 		#on update, we have to delete the dummy entry
-		foreach my $key (keys %customgeoipgrp){
-			if ($customgeoipgrp{$key}[0] eq $grp && $customgeoipgrp{$key}[2] eq "none"){
-				delete $customgeoipgrp{$key};
+		foreach my $key (keys %customlocationgrp){
+			if ($customlocationgrp{$key}[0] eq $grp && $customlocationgrp{$key}[2] eq "none"){
+				delete $customlocationgrp{$key};
 				last;
 			}
 		}
-		&General::writehasharray("$configgeoipgrp", \%customgeoipgrp);
-		&General::readhasharray("$configgeoipgrp", \%customgeoipgrp);
+		&General::writehasharray("$configlocationgrp", \%customlocationgrp);
+		&General::readhasharray("$configlocationgrp", \%customlocationgrp);
 		#create array with new lines
 		foreach my $line (@target){
 			push (@newgrp,"$grp,$rem,$line");
 		}
 		#append new entries
-		my $key = &General::findhasharraykey (\%customgeoipgrp);
+		my $key = &General::findhasharraykey (\%customlocationgrp);
 		foreach my $line (@newgrp){
-			foreach my $i (0 .. 3) { $customgeoipgrp{$key}[$i] = "";}
+			foreach my $i (0 .. 3) { $customlocationgrp{$key}[$i] = "";}
 			my ($a,$b,$c,$d) = split (",",$line);
-			$customgeoipgrp{$key}[0] = $a;
-			$customgeoipgrp{$key}[1] = $b;
-			$customgeoipgrp{$key}[2] = $c;
-			$customgeoipgrp{$key}[3] = $type;
+			$customlocationgrp{$key}[0] = $a;
+			$customlocationgrp{$key}[1] = $b;
+			$customlocationgrp{$key}[2] = $c;
+			$customlocationgrp{$key}[3] = $type;
 		}
-		&General::writehasharray("$configgeoipgrp", \%customgeoipgrp);
+		&General::writehasharray("$configlocationgrp", \%customlocationgrp);
 		#update counter in Host/Net
 		$fwhostsettings{'update'}='on';
 	}
 		#check if ruleupdate is needed
-		my $geoipgrpcount=0;
-		$geoipgrpcount=&getgeoipcount($grp);
-		if($geoipgrpcount > 0 )
+		my $locationgrpcount=0;
+		$locationgrpcount=&getlocationcount($grp);
+		if($locationgrpcount > 0 )
 		{
 			&General::firewall_config_changed();
 		}
-		&addgeoipgrp;
-		&viewtablegeoipgrp;
+		&addlocationgrp;
+		&viewtablelocationgrp;
 }
 if ($fwhostsettings{'ACTION'} eq 'saveservice')
 {
@@ -888,11 +888,11 @@ if ($fwhostsettings{'ACTION'} eq 'editgrp')
 	&addgrp;
 	&viewtablegrp;
 }
-if ($fwhostsettings{'ACTION'} eq 'editgeoipgrp')
+if ($fwhostsettings{'ACTION'} eq 'editlocationgrp')
 {
 	$fwhostsettings{'update'}='on';
-	&addgeoipgrp;
-	&viewtablegeoipgrp;
+	&addlocationgrp;
+	&viewtablelocationgrp;
 }
 if ($fwhostsettings{'ACTION'} eq 'editservice')
 {
@@ -926,7 +926,7 @@ if ($fwhostsettings{'ACTION'} eq 'resetgrp')
 	$fwhostsettings{'remark'} 	="";
 	&showmenu;
 }
-if ($fwhostsettings{'ACTION'} eq 'resetgeoipgrp')
+if ($fwhostsettings{'ACTION'} eq 'resetlocationgrp')
 {
 	$fwhostsettings{'grp_name'} ="";
 	$fwhostsettings{'remark'} 	="";
@@ -989,35 +989,35 @@ if ($fwhostsettings{'ACTION'} eq 'deletegrphost')
 	&addgrp;
 	&viewtablegrp;
 }
-if ($fwhostsettings{'ACTION'} eq 'deletegeoipgrpentry')
+if ($fwhostsettings{'ACTION'} eq 'deletelocationgrpentry')
 {
         my $grpremark;
         my $grpname;
-        &General::readhasharray("$configgeoipgrp", \%customgeoipgrp);
-        foreach my $key (keys %customgeoipgrp){
-                if($customgeoipgrp{$key}[0].",".$customgeoipgrp{$key}[1].",".$customgeoipgrp{$key}[2].",".$customgeoipgrp{$key}[3] eq $fwhostsettings{'delentry'}){
-                        $grpname=$customgeoipgrp{$key}[0];
-                        $grpremark=$customgeoipgrp{$key}[1];
+        &General::readhasharray("$configlocationgrp", \%customlocationgrp);
+        foreach my $key (keys %customlocationgrp){
+                if($customlocationgrp{$key}[0].",".$customlocationgrp{$key}[1].",".$customlocationgrp{$key}[2].",".$customlocationgrp{$key}[3] eq $fwhostsettings{'delentry'}){
+                        $grpname=$customlocationgrp{$key}[0];
+                        $grpremark=$customlocationgrp{$key}[1];
                         #check if we delete the last entry, then generate dummy
                         if ($fwhostsettings{'last'} eq 'on'){
-                                $customgeoipgrp{$key}[1] = '';
-                                $customgeoipgrp{$key}[2] = 'none';
-                                $customgeoipgrp{$key}[3] = '';
+                                $customlocationgrp{$key}[1] = '';
+                                $customlocationgrp{$key}[2] = 'none';
+                                $customlocationgrp{$key}[3] = '';
                                 $fwhostsettings{'last'}='';
                                 last;
                         }else{
-                                delete $customgeoipgrp{$key};
+                                delete $customlocationgrp{$key};
                         }
                 }
         }
-        &General::writehasharray("$configgeoipgrp", \%customgeoipgrp);
+        &General::writehasharray("$configlocationgrp", \%customlocationgrp);
         &General::firewall_config_changed();
         if ($fwhostsettings{'update'} eq 'on'){
                 $fwhostsettings{'remark'}= $grpremark;
                 $fwhostsettings{'grp_name'}=$grpname;
         }
-        &addgeoipgrp;
-        &viewtablegeoipgrp;
+        &addlocationgrp;
+        &viewtablelocationgrp;
 }
 
 if ($fwhostsettings{'ACTION'} eq 'delgrp')
@@ -1036,21 +1036,21 @@ if ($fwhostsettings{'ACTION'} eq 'delgrp')
 	&addgrp;
 	&viewtablegrp;
 }
-if ($fwhostsettings{'ACTION'} eq 'delgeoipgrp')
+if ($fwhostsettings{'ACTION'} eq 'dellocationgrp')
 {
-	&General::readhasharray("$configgeoipgrp", \%customgeoipgrp);
+	&General::readhasharray("$configlocationgrp", \%customlocationgrp);
 	&decrease($fwhostsettings{'grp_name'});
-	foreach my $key (sort keys %customgeoipgrp)
+	foreach my $key (sort keys %customlocationgrp)
 	{
-		if($customgeoipgrp{$key}[0] eq $fwhostsettings{'grp_name'})
+		if($customlocationgrp{$key}[0] eq $fwhostsettings{'grp_name'})
 		{
-			delete $customgeoipgrp{$key};
+			delete $customlocationgrp{$key};
 		}
 	}
-	&General::writehasharray("$configgeoipgrp", \%customgeoipgrp);
+	&General::writehasharray("$configlocationgrp", \%customlocationgrp);
 	$fwhostsettings{'grp_name'}='';
-	&addgeoipgrp;
-	&viewtablegeoipgrp;
+	&addlocationgrp;
+	&viewtablelocationgrp;
 }
 if ($fwhostsettings{'ACTION'} eq 'delservice')
 {
@@ -1126,10 +1126,10 @@ if ($fwhostsettings{'ACTION'} eq $Lang::tr{'fwhost newgrp'})
 	&addgrp;
 	&viewtablegrp;
 }
-if ($fwhostsettings{'ACTION'} eq $Lang::tr{'fwhost newgeoipgrp'})
+if ($fwhostsettings{'ACTION'} eq $Lang::tr{'fwhost newlocationgrp'})
 {
-	&addgeoipgrp;
-	&viewtablegeoipgrp;
+	&addlocationgrp;
+	&viewtablelocationgrp;
 }
 if ($fwhostsettings{'ACTION'} eq $Lang::tr{'fwhost newservice'})
 {
@@ -1165,19 +1165,19 @@ if ($fwhostsettings{'ACTION'} eq 'changegrpremark')
 	&addgrp;
 	&viewtablegrp;
 }
-if ($fwhostsettings{'ACTION'} eq 'changegeoipgrpremark')
+if ($fwhostsettings{'ACTION'} eq 'changelocationgrpremark')
 {
-	&General::readhasharray("$configgeoipgrp", \%customgeoipgrp);
+	&General::readhasharray("$configlocationgrp", \%customlocationgrp);
 	if ($fwhostsettings{'oldrem'} ne $fwhostsettings{'newrem'} && (&validremark($fwhostsettings{'newrem'}) || $fwhostsettings{'newrem'} eq '')){
-		foreach my $key (sort keys %customgeoipgrp)
+		foreach my $key (sort keys %customlocationgrp)
 			{
-				if($customgeoipgrp{$key}[0] eq $fwhostsettings{'grp'} && $customgeoipgrp{$key}[1] eq $fwhostsettings{'oldrem'})
+				if($customlocationgrp{$key}[0] eq $fwhostsettings{'grp'} && $customlocationgrp{$key}[1] eq $fwhostsettings{'oldrem'})
 				{
-					$customgeoipgrp{$key}[1]='';
-					$customgeoipgrp{$key}[1]=$fwhostsettings{'newrem'};
+					$customlocationgrp{$key}[1]='';
+					$customlocationgrp{$key}[1]=$fwhostsettings{'newrem'};
 				}
 			}
-			&General::writehasharray("$configgeoipgrp", \%customgeoipgrp);
+			&General::writehasharray("$configlocationgrp", \%customlocationgrp);
 			$fwhostsettings{'update'}='on';
 			$fwhostsettings{'remark'}=$fwhostsettings{'newrem'};
 	}else{
@@ -1187,8 +1187,8 @@ if ($fwhostsettings{'ACTION'} eq 'changegeoipgrpremark')
 		$fwhostsettings{'update'} = 'on';
 	}
 	$fwhostsettings{'grp_name'}=$fwhostsettings{'grp'};
-	&addgeoipgrp;
-	&viewtablegeoipgrp;
+	&addlocationgrp;
+	&viewtablelocationgrp;
 }
 if ($fwhostsettings{'ACTION'} eq 'changesrvgrpremark')
 {
@@ -1265,9 +1265,9 @@ if ($fwhostsettings{'ACTION'} eq 'changegrpname')
 	&addgrp;
 	&viewtablegrp;
 }
-if ($fwhostsettings{'ACTION'} eq 'changegeoipgrpname')
+if ($fwhostsettings{'ACTION'} eq 'changelocationgrpname')
 {
-	&General::readhasharray("$configgeoipgrp", \%customgeoipgrp );
+	&General::readhasharray("$configlocationgrp", \%customlocationgrp );
 	if ($fwhostsettings{'oldgrpname'} ne $fwhostsettings{'grp'}){
 		#Check new groupname
 		if (!&validhostname($fwhostsettings{'grp'})){
@@ -1275,19 +1275,19 @@ if ($fwhostsettings{'ACTION'} eq 'changegeoipgrpname')
 		}
 		if (!$errormessage){
 			# Rename group.
-			foreach my $key (keys %customgeoipgrp) {
-				if($customgeoipgrp{$key}[0] eq $fwhostsettings{'oldgrpname'}){
-					$customgeoipgrp{$key}[0]=$fwhostsettings{'grp'};
+			foreach my $key (keys %customlocationgrp) {
+				if($customlocationgrp{$key}[0] eq $fwhostsettings{'oldgrpname'}){
+					$customlocationgrp{$key}[0]=$fwhostsettings{'grp'};
 				}
 			}
-			&General::writehasharray("$configgeoipgrp", \%customgeoipgrp );
+			&General::writehasharray("$configlocationgrp", \%customlocationgrp );
 			#change name in FW Rules
-			&changenameinfw($fwhostsettings{'oldgrpname'},$fwhostsettings{'grp'},4,"geoip");
-			&changenameinfw($fwhostsettings{'oldgrpname'},$fwhostsettings{'grp'},6,"geoip");
+			&changenameinfw($fwhostsettings{'oldgrpname'},$fwhostsettings{'grp'},4,"location");
+			&changenameinfw($fwhostsettings{'oldgrpname'},$fwhostsettings{'grp'},6,"location");
 		}
 	}
-	&addgeoipgrp;
-	&viewtablegeoipgrp;
+	&addlocationgrp;
+	&viewtablelocationgrp;
 }
 ###  VIEW  ###
 if($fwhostsettings{'ACTION'} eq '')
@@ -1300,7 +1300,7 @@ sub showmenu {
 	print "$Lang::tr{'fwhost welcome'}";
 	print<<END;
 	<br><br><table border='0' width='100%'>
-	<tr><td><form method='post'><input type='submit' name='ACTION' value='$Lang::tr{'fwhost newnet'}' ><input type='submit' name='ACTION' value='$Lang::tr{'fwhost newhost'}' ><input type='submit' name='ACTION' value='$Lang::tr{'fwhost newgrp'}' ><input type='submit' name='ACTION' value='$Lang::tr{'fwhost newgeoipgrp'}' ></form></td>
+	<tr><td><form method='post'><input type='submit' name='ACTION' value='$Lang::tr{'fwhost newnet'}' ><input type='submit' name='ACTION' value='$Lang::tr{'fwhost newhost'}' ><input type='submit' name='ACTION' value='$Lang::tr{'fwhost newgrp'}' ><input type='submit' name='ACTION' value='$Lang::tr{'fwhost newlocationgrp'}' ></form></td>
 	<td align='right'><form method='post'><input type='submit' name='ACTION' value='$Lang::tr{'fwhost newservice'}' ><input type='submit' name='ACTION' value='$Lang::tr{'fwhost newservicegrp'}' ></form></td></tr>
 	<tr><td colspan='6'></td></tr></table>
 END
@@ -1588,12 +1588,12 @@ END
 		print"<tr><td style='text-align:right;'><input type='submit' value='$Lang::tr{'add'}' style='min-width:100px;' /><input type='hidden' name='oldremark' value='$fwhostsettings{'oldremark'}'><input type='hidden' name='update' value=\"$fwhostsettings{'update'}\"><input type='hidden' name='ACTION' value='savegrp' ></form><form method='post' style='display:inline'><input type='submit' value='$Lang::tr{'fwhost back'}' style='min-width:100px;'><input type='hidden' name='ACTION' value='resetgrp'></form></td></table>";
 	&Header::closebox();
 }
-sub addgeoipgrp
+sub addlocationgrp
 {
 	&hint;
 	&error;
 	&showmenu;
-	&Header::openbox('100%', 'left', $Lang::tr{'fwhost addgeoipgrp'});
+	&Header::openbox('100%', 'left', $Lang::tr{'fwhost addlocationgrp'});
 
 	my %checked=();
 	my $show='';
@@ -1629,7 +1629,7 @@ END
 					<td>
 						<input type='submit' value='$Lang::tr{'fwhost change'}'>
 						<input type='hidden' name='oldgrpname' value='$fwhostsettings{'oldgrpname'}'>
-						<input type='hidden' name='ACTION' value='changegeoipgrpname'>
+						<input type='hidden' name='ACTION' value='changelocationgrpname'>
 					</td>
 					<td></td>
 				</tr></form>
@@ -1642,7 +1642,7 @@ END
 						<input type='submit' value='$Lang::tr{'fwhost change'}'>
 						<input type='hidden' name='grp' value='$fwhostsettings{'grp_name'}'>
 						<input type='hidden' name='oldrem' value='$fwhostsettings{'oldremark'}'>
-						<input type='hidden' name='ACTION' value='changegeoipgrpremark'>
+						<input type='hidden' name='ACTION' value='changelocationgrpremark'>
 					</td>
 				</tr></form>
 			</table>
@@ -1650,7 +1650,7 @@ END
 END
 		}
 		if ($fwhostsettings{'update'} eq 'on') {
-			my @geoip_locations = &fwlib::get_geoip_locations();
+			my @location_locations = &fwlib::get_locations();
 
 			print<<END;
 			<form method='post'>
@@ -1662,9 +1662,9 @@ END
 					<td style='text-align:left;'>
 						<select name='COUNTRY_CODE' style='width:16em;'>";
 END
-				foreach my $location (@geoip_locations) {
+				foreach my $location (@location_locations) {
 					# Get full country name.
-					my $fullname = &GeoIP::get_full_country_name($location);
+					my $fullname = &Location::Functions::get_full_country_name($location);
 
 					print"<option value='$location'>$location - $fullname</option>\n";
 				}
@@ -1682,13 +1682,13 @@ END
 				<input type='submit' value='$Lang::tr{'add'}' style='min-width:100px;' />
 				<input type='hidden' name='oldremark' value='$fwhostsettings{'oldremark'}'>
 				<input type='hidden' name='update' value=\"$fwhostsettings{'update'}\">
-				<input type='hidden' name='ACTION' value='savegeoipgrp' >
+				<input type='hidden' name='ACTION' value='savelocationgrp' >
 			</form>
 
 			<form method='post' style='display:inline'>
 
 			<input type='submit' value='$Lang::tr{'fwhost back'}' style='min-width:100px;'>
-			<input type='hidden' name='ACTION' value='resetgeoipgrp'>
+			<input type='hidden' name='ACTION' value='resetlocationgrp'>
 
 			</form>
 			</td></tr></table>
@@ -2154,15 +2154,15 @@ sub viewtablegrp
 }
 
 }
-sub viewtablegeoipgrp
+sub viewtablelocationgrp
 {
 	# If our filesize is "zero" there is nothing to read-in.
-	if (-z "$configgeoipgrp") {
+	if (-z "$configlocationgrp") {
 		return;
 	}
 
-	&Header::openbox('100%', 'left', $Lang::tr{'fwhost cust geoipgrp'});
-	&General::readhasharray("$configgeoipgrp", \%customgeoipgrp);
+	&Header::openbox('100%', 'left', $Lang::tr{'fwhost cust locationgrp'});
+	&General::readhasharray("$configlocationgrp", \%customlocationgrp);
 	&General::readhasharray("$fwconfigfwd", \%fwfwd);
 	&General::readhasharray("$fwconfiginp", \%fwinp);
 	&General::readhasharray("$fwconfigout", \%fwout);
@@ -2178,15 +2178,15 @@ sub viewtablegeoipgrp
 	my %hash;
 
 	# If there are no groups we are finished here.
-	if (!keys %customgeoipgrp) {
+	if (!keys %customlocationgrp) {
 		print "<center><b>$Lang::tr{'fwhost err emptytable'}</b>";
 		return;
 	}
 
 	# Put all groups in a hash.
-	foreach my $key (sort { ncmp($customgeoipgrp{$a}[0],$customgeoipgrp{$b}[0]) }
-			 sort { ncmp($customgeoipgrp{$a}[2],$customgeoipgrp{$b}[2]) } keys %customgeoipgrp) {
-				push (@counter,$customgeoipgrp{$key}[0]);
+	foreach my $key (sort { ncmp($customlocationgrp{$a}[0],$customlocationgrp{$b}[0]) }
+			 sort { ncmp($customlocationgrp{$a}[2],$customlocationgrp{$b}[2]) } keys %customlocationgrp) {
+				push (@counter,$customlocationgrp{$key}[0]);
 	}
 
 	# Increase current used key.
@@ -2195,16 +2195,16 @@ sub viewtablegeoipgrp
 	}
 
 	# Sort hash.
-	foreach my $key (sort { ncmp($customgeoipgrp{$a}[0],$customgeoipgrp{$b}[0]) }
-			 sort { ncmp($customgeoipgrp{$a}[2],$customgeoipgrp{$b}[2]) } keys %customgeoipgrp) {
+	foreach my $key (sort { ncmp($customlocationgrp{$a}[0],$customlocationgrp{$b}[0]) }
+			 sort { ncmp($customlocationgrp{$a}[2],$customlocationgrp{$b}[2]) } keys %customlocationgrp) {
 		$count++;
-		if ($helper ne $customgeoipgrp{$key}[0]) {
+		if ($helper ne $customlocationgrp{$key}[0]) {
 			$delflag='0';
 
-			foreach my $key1 (sort { ncmp($customgeoipgrp{$a}[0],$customgeoipgrp{$b}[0]) }
-					  sort { ncmp($customgeoipgrp{$a}[2],$customgeoipgrp{$b}[2]) } keys %customgeoipgrp) {
+			foreach my $key1 (sort { ncmp($customlocationgrp{$a}[0],$customlocationgrp{$b}[0]) }
+					  sort { ncmp($customlocationgrp{$a}[2],$customlocationgrp{$b}[2]) } keys %customlocationgrp) {
 
-				if ($customgeoipgrp{$key}[0] eq $customgeoipgrp{$key1}[0])
+				if ($customlocationgrp{$key}[0] eq $customlocationgrp{$key1}[0])
 				{
 					$delflag++;
 				}
@@ -2216,13 +2216,13 @@ sub viewtablegeoipgrp
 			$number=1;
 
 			# Groupname.
-			$grpname=$customgeoipgrp{$key}[0];
+			$grpname=$customlocationgrp{$key}[0];
 
 			# Group remark.
-			$remark="$customgeoipgrp{$key}[1]";
+			$remark="$customlocationgrp{$key}[1]";
 
 			# Country code.
-			$country_code="$customgeoipgrp{$key}[2]";
+			$country_code="$customlocationgrp{$key}[2]";
 
 			if ($count gt 1){
 				print"</table>";
@@ -2234,15 +2234,15 @@ sub viewtablegeoipgrp
 			print "<b>$Lang::tr{'remark'}:</b>&nbsp $remark &nbsp\n" if ($remark ne '');
 
 			# Get group count.
-			my $geoipgrpcount=&getgeoipcount($grpname);
-			print "<b>$Lang::tr{'used'}:</b> $geoipgrpcount x";
+			my $locationgrpcount=&getlocationcount($grpname);
+			print "<b>$Lang::tr{'used'}:</b> $locationgrpcount x";
 
 			# Only display delete icon, if the group is not used by a firewall rule.
-			if($geoipgrpcount == '0') {
+			if($locationgrpcount == '0') {
 				print"<form method='post' style='display:inline'>\n";
 				print"<input type='image' src='/images/delete.gif' alt='$Lang::tr{'delete'}' title='$Lang::tr{'delete'}' align='right' />\n";
 				print"<input type='hidden' name='grp_name' value='$grpname' >\n";
-				print"<input type='hidden' name='ACTION' value='delgeoipgrp'>\n";
+				print"<input type='hidden' name='ACTION' value='dellocationgrp'>\n";
 				print"</form>";
 			}
 
@@ -2252,7 +2252,7 @@ print <<END;
 				<input type='image' src='/images/edit.gif' alt='$Lang::tr{'edit'}' title='$Lang::tr{'edit'}' align='right'/>
 				<input type='hidden' name='grp_name' value='$grpname' >
 				<input type='hidden' name='remark' value='$remark' >
-				<input type='hidden' name='ACTION' value='editgeoipgrp'>
+				<input type='hidden' name='ACTION' value='editlocationgrp'>
 			</form>
 
 			<table width='100%' cellspacing='0' class='tbl'>
@@ -2285,8 +2285,8 @@ END
 		} else {
 			# Check if we are currently editing a group and assign column backgound colors.
 			my $col='';
-			if ( ($fwhostsettings{'ACTION'} eq 'editgeoipgrp' || $fwhostsettings{'update'} ne '')
-				&& $fwhostsettings{'grp_name'} eq $customgeoipgrp{$key}[0]) {
+			if ( ($fwhostsettings{'ACTION'} eq 'editlocationgrp' || $fwhostsettings{'update'} ne '')
+				&& $fwhostsettings{'grp_name'} eq $customlocationgrp{$key}[0]) {
 				$col="bgcolor='${Header::colouryellow}'";
 			} elsif ($count %2 == 0){
 				$col="bgcolor='$color{'color20'}'";
@@ -2295,12 +2295,12 @@ END
 			}
 
 			# Get country flag.
-			my $icon = &GeoIP::get_flag_icon($customgeoipgrp{$key}[2]);
+			my $icon = &Location::Functions::get_flag_icon($customlocationgrp{$key}[2]);
 
 			# Print column with flag icon.
 			my $col_content;
 			if ($icon) {
-				$col_content = "<img src='$icon' alt='$customgeoipgrp{$key}[2]' title='$customgeoipgrp{$key}[2]'>";
+				$col_content = "<img src='$icon' alt='$customlocationgrp{$key}[2]' title='$customlocationgrp{$key}[2]'>";
 			} else {
 				$col_content = "<b>N/A</b>";
 			}
@@ -2308,10 +2308,10 @@ END
 			print "<td align='center' $col>$col_content</td>\n";
 
 			# Print column with country code.
-			print "<td align='center' $col>$customgeoipgrp{$key}[2]</td>\n";
+			print "<td align='center' $col>$customlocationgrp{$key}[2]</td>\n";
 
 			# Print column with full country name.
-			my $country_name = &GeoIP::get_full_country_name($customgeoipgrp{$key}[2]);
+			my $country_name = &Location::Functions::get_full_country_name($customlocationgrp{$key}[2]);
 			print "<td align='left' $col>$country_name</td>\n";
 
 			# Generate from for removing entries from a group.
@@ -2322,21 +2322,21 @@ END
 
 				# Check if this group only has a single entry.
 				foreach my $key2 (keys %hash) {
-					if ($hash{$key2}<2 && $key2 eq $customgeoipgrp{$key}[0]){
+					if ($hash{$key2}<2 && $key2 eq $customlocationgrp{$key}[0]){
 						print "<input type='hidden' name='last' value='on'>"  ;
 					}
 				}
 			}
 
-			print "<input type='hidden' name='ACTION' value='deletegeoipgrpentry'>\n";
+			print "<input type='hidden' name='ACTION' value='deletelocationgrpentry'>\n";
 			print "<input type='hidden' name='update' value='$fwhostsettings{'update'}'>\n";
-			print "<input type='hidden' name='delentry' value='$grpname,$remark,$customgeoipgrp{$key}[2],$customgeoipgrp{$key}[3]'>\n";
+			print "<input type='hidden' name='delentry' value='$grpname,$remark,$customlocationgrp{$key}[2],$customlocationgrp{$key}[3]'>\n";
 			print "</form>\n";
 			print "</td>\n";
 			print "</tr>\n";
 		}
 
-		$helper=$customgeoipgrp{$key}[0];
+		$helper=$customlocationgrp{$key}[0];
 		$number++;
 	}
 
@@ -2688,12 +2688,12 @@ sub gethostcount
 	}
 	return $srvcounter;
 }
-sub getgeoipcount
+sub getlocationcount
 {
 	my $groupname=shift;
 	my $counter=0;
 
-	# GeoIP groups are stored as "group:groupname" in the
+	# Location groups are stored as "group:groupname" in the
 	# firewall settings files.
 	my $searchstring = join(':', "group",$groupname);
 
@@ -3079,7 +3079,7 @@ sub changenameinfw
 	my $fld=shift;
 	my $type=shift;
 
-	if ($type eq 'geoip'){
+	if ($type eq 'location'){
 		$old="group:$old";
 		$new="group:$new";
 	}
diff --git a/html/cgi-bin/ipinfo.cgi b/html/cgi-bin/ipinfo.cgi
index b756a24d2..978488cb1 100644
--- a/html/cgi-bin/ipinfo.cgi
+++ b/html/cgi-bin/ipinfo.cgi
@@ -30,7 +30,7 @@ use strict;
 require '/var/ipfire/general-functions.pl';
 require "${General::swroot}/lang.pl";
 require "${General::swroot}/header.pl";
-require "${General::swroot}/geoip-functions.pl";
+require "${General::swroot}/location-functions.pl";
 
 my %cgiparams=();
 
@@ -41,33 +41,54 @@ my %cgiparams=();
 my @lines=();
 my $extraquery='';
 
+# Hash which contains the whois servers from
+# the responisible RIR of the continent.
+my %whois_servers_by_continent = (
+	"AF" => "whois.afrinic.net",
+	"AS" => "whois.apnic.net",
+	"EU" => "whois.ripe.net",
+	"NA" => "whois.arin.net",
+	"SA" => "whois.lacnic.net"
+);
+
+# Default whois server if no continent could be determined.
+my $whois_server = "whois.arin.net";
+
 my $addr = CGI::param("ip") || "";
 
 if (&General::validip($addr)) {
-	$extraquery='';
-	@lines=();
-	my $whoisname = "whois.arin.net";
 	my $iaddr = inet_aton($addr);
 	my $hostname = gethostbyaddr($iaddr, AF_INET);
 	if (!$hostname) { $hostname = $Lang::tr{'lookup failed'}; }
 
-	# enumerate GeoIP information for IP address...
-	my $ccode = &GeoIP::lookup($addr);
-	my $flag_icon = &GeoIP::get_flag_icon($ccode);
+	# enumerate location information for IP address...
+	my $db_handle = &Location::Functions::init();
+	my $ccode = &Location::Functions::lookup_country_code($db_handle, $addr);
+
+	# Try to get the continent of the country code.
+	my $continent = &Location::get_continent_code($db_handle, $ccode);
+
+	# Check if a whois server for the continent is known.
+	if($whois_servers_by_continent{$continent}) {
+		# Use it.
+		$whois_server = $whois_servers_by_continent{$continent};
+	}
+
+	my $flag_icon = &Location::Functions::get_flag_icon($ccode);
 
-	my $sock = new IO::Socket::INET ( PeerAddr => $whoisname, PeerPort => 43, Proto => 'tcp');
+	my $sock = new IO::Socket::INET ( PeerAddr => $whois_server, PeerPort => 43, Proto => 'tcp');
 	if ($sock)
 	{
-		print $sock "n $addr\n";
+		print $sock "$addr\n";
 		while (<$sock>) {
-			$extraquery = $1 if (/ReferralServer: whois:\/\/(\S+)\s+/);
+			$extraquery = $1 if (/ReferralServer:  whois:\/\/(\S+)\s+/);
 			push(@lines,$_);
 		}
 		close($sock);
 		if ($extraquery) {
 			undef (@lines);
-			$whoisname = $extraquery;
-			my $sock = new IO::Socket::INET ( PeerAddr => $whoisname, PeerPort => 43, Proto => 'tcp');
+			$whois_server = $extraquery;
+			my $sock = new IO::Socket::INET ( PeerAddr => $whois_server, PeerPort => 43, Proto => 'tcp');
 			if ($sock)
 			{
 				print $sock "$addr\n";
@@ -77,16 +98,16 @@ if (&General::validip($addr)) {
 			}
 			else
 			{
-				@lines = ( "$Lang::tr{'unable to contact'} $whoisname" );
+				@lines = ( "$Lang::tr{'unable to contact'} $whois_server" );
 			}
 		}
 	}
 	else
 	{
-		@lines = ( "$Lang::tr{'unable to contact'} $whoisname" );
+		@lines = ( "$Lang::tr{'unable to contact'} $whois_server" );
 	}
 
-	&Header::openbox('100%', 'left', $addr . " <a href='country.cgi#$ccode'><img src='$flag_icon' border='0' align='absmiddle' alt='$ccode' title='$ccode' /></a> (" . $hostname . ') : '.$whoisname);
+	&Header::openbox('100%', 'left', $addr . " <a href='country.cgi#$ccode'><img src='$flag_icon' border='0' align='absmiddle' alt='$ccode' title='$ccode' /></a> (" . $hostname . ') : '.$whois_server);
 	print "<pre>\n";
 	foreach my $line (@lines) {
 		print &Header::cleanhtml($line,"y");
diff --git a/html/cgi-bin/geoip-block.cgi b/html/cgi-bin/location-block.cgi
similarity index 85%
rename from html/cgi-bin/geoip-block.cgi
rename to html/cgi-bin/location-block.cgi
index 056b333e8..3bc3a1e76 100644
--- a/html/cgi-bin/geoip-block.cgi
+++ b/html/cgi-bin/location-block.cgi
@@ -2,7 +2,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2014 IPFire Developemnt Team <info(a)ipfire.org>                #
+# Copyright (C) 2014 - 2020 IPFire Developemnt Team <info(a)ipfire.org>         #
 #                                                                             #
 # This program is free software: you can redistribute it and/or modify        #
 # it under the terms of the GNU General Public License as published by        #
@@ -25,13 +25,13 @@ use strict;
 #use CGI::Carp 'fatalsToBrowser';
 
 require '/var/ipfire/general-functions.pl';
-require "${General::swroot}/geoip-functions.pl";
+require "${General::swroot}/location-functions.pl";
 require "${General::swroot}/lang.pl";
 require "${General::swroot}/header.pl";
 require "/usr/lib/firewall/firewall-lib.pl";
 
 my $notice;
-my $settingsfile = "${General::swroot}/firewall/geoipblock";
+my $settingsfile = "${General::swroot}/firewall/locationblock";
 
 my %color = ();
 my %mainsettings = ();
@@ -50,14 +50,14 @@ my %cgiparams = ();
 &Header::getcgihash(\%cgiparams);
 
 # Call subfunction to get all available locations.
-my @locations = &fwlib::get_geoip_locations();
+my @locations = &Location::Functions::get_locations();
 
 if ($cgiparams{'ACTION'} eq $Lang::tr{'save'}) {
-	# Check if we want to disable geoipblock.
-	if (exists $cgiparams{'GEOIPBLOCK_ENABLED'}) {
-		$settings{'GEOIPBLOCK_ENABLED'} = "on";
+	# Check if we want to disable locationblock.
+	if (exists $cgiparams{'LOCATIONBLOCK_ENABLED'}) {
+		$settings{'LOCATIONBLOCK_ENABLED'} = "on";
 	} else {
-		$settings{'GEOIPBLOCK_ENABLED'} = "off";
+		$settings{'LOCATIONBLOCK_ENABLED'} = "off";
 	}
 
 	# Loop through our locations array to prevent from
@@ -81,7 +81,7 @@ if ($cgiparams{'ACTION'} eq $Lang::tr{'save'}) {
 	$notice = $Lang::tr{'p2p block save notice'};
 }
 
-&Header::openpage($Lang::tr{'geoipblock configuration'}, 1, '');
+&Header::openpage($Lang::tr{'locationblock configuration'}, 1, '');
 
 # Print notice that a firewall reload is required.
 if ($notice) {
@@ -92,19 +92,19 @@ if ($notice) {
 
 # Checkbox pre-selection.
 my $checked;
-if ($settings{'GEOIPBLOCK_ENABLED'} eq "on") {
+if ($settings{'LOCATIONBLOCK_ENABLED'} eq "on") {
 	$checked = "checked='checked'";
 }
 
-# Print box to enable/disable geoipblock.
+# Print box to enable/disable locationblock.
 print"<form method='POST' action='$ENV{'SCRIPT_NAME'}'>\n";
 
-&Header::openbox('100%', 'center', $Lang::tr{'geoipblock'});
+&Header::openbox('100%', 'center', $Lang::tr{'locationblock'});
 print <<END;
 	<table width='95%'>
 		<tr>
-			<td width='25%' class='base'>$Lang::tr{'geoipblock enable feature'}
-			<td><input type='checkbox' name='GEOIPBLOCK_ENABLED' $checked></td>
+			<td width='25%' class='base'>$Lang::tr{'locationblock enable feature'}
+			<td><input type='checkbox' name='LOCATIONBLOCK_ENABLED' $checked></td>
 		</tr>
 		<tr>
 			<td colspan='2'><br></td>
@@ -122,7 +122,7 @@ END
 
 &Header::closebox();
 
-&Header::openbox('100%', 'center', $Lang::tr{'geoipblock block countries'});
+&Header::openbox('100%', 'center', $Lang::tr{'locationblock block countries'});
 ### JAVA SCRIPT ###
 print <<END;
 <script>
@@ -175,10 +175,10 @@ foreach my $location (@locations) {
 	my $ccode_lc = lc($location);
 
 	# Full name of the country based on the country code.
-	my $cname = &GeoIP::get_full_country_name($ccode_lc);
+	my $cname = &Location::Functions::get_full_country_name($ccode_lc);
 
 	# Get flag icon for of the country.
-	my $flag_icon = &GeoIP::get_flag_icon($ccode_uc);
+	my $flag_icon = &Location::Functions::get_flag_icon($ccode_uc);
 
 	my $flag;
 	# Check if a flag for the country is available.
@@ -258,9 +258,9 @@ print <<END;
 <table width='70%'>
 	<tr>
 		<td width='5%'><img src='/images/on.gif'></td>
-		<td>$Lang::tr{'geoipblock country is blocked'}</td>
+		<td>$Lang::tr{'locationblock country is blocked'}</td>
 		<td width='5%'><img src='/images/off.gif'></td>
-		<td>$Lang::tr{'geoipblock country is allowed'}</td>
+		<td>$Lang::tr{'locationblock country is allowed'}</td>
 	</tr>
 </table>
 END
diff --git a/html/cgi-bin/logs.cgi/firewalllog.dat b/html/cgi-bin/logs.cgi/firewalllog.dat
index e67a40a9f..2b690e35b 100644
--- a/html/cgi-bin/logs.cgi/firewalllog.dat
+++ b/html/cgi-bin/logs.cgi/firewalllog.dat
@@ -20,10 +20,13 @@ use Getopt::Std;
 #use CGI::Carp 'fatalsToBrowser';
 
 require '/var/ipfire/general-functions.pl';
-require "${General::swroot}/geoip-functions.pl";
+require "${General::swroot}/location-functions.pl";
 require "${General::swroot}/lang.pl";
 require "${General::swroot}/header.pl";
 
+# Libloc database handle.
+my $libloc_db_handle = &Location::Functions::init();
+
 my %color = ();
 my %mainsettings = ();
 &General::readhash("${General::swroot}/main/settings", \%mainsettings);
@@ -351,7 +354,7 @@ foreach $_ (@log)
 	$srcport=$1 if $packet =~ /SPT=(\d+)/;
 	$dstport=$1 if $packet =~ /DPT=(\d+)/;
 
-	my $ccode = &GeoIP::lookup($srcaddr);
+	my $ccode = &Location::Functions::lookup_country_code($libloc_db_handle, $srcaddr);
 
 	my $servi = uc(getservbyport($srcport, lc($proto)));
 	if ($servi ne '' && $srcport < 1024) {
@@ -383,7 +386,7 @@ foreach $_ (@log)
 END
 	;
 	# Get flag icon for of the country.
-	my $flag_icon = &GeoIP::get_flag_icon($ccode);
+	my $flag_icon = &Location::Functions::get_flag_icon($ccode);
 
 	if ( $flag_icon) {
 		print "<td align='center' $col><a href='../country.cgi#$ccode'><img src='$flag_icon' border='0' align='absmiddle' alt='$ccode'></a></td>";
diff --git a/html/cgi-bin/logs.cgi/firewalllogcountry.dat b/html/cgi-bin/logs.cgi/firewalllogcountry.dat
index 949f2599d..701abab2c 100644
--- a/html/cgi-bin/logs.cgi/firewalllogcountry.dat
+++ b/html/cgi-bin/logs.cgi/firewalllogcountry.dat
@@ -18,10 +18,13 @@ use Getopt::Std;
 #use CGI::Carp 'fatalsToBrowser';
 
 require '/var/ipfire/general-functions.pl';
-require "${General::swroot}/geoip-functions.pl";
+require "${General::swroot}/location-functions.pl";
 require "${General::swroot}/lang.pl";
 require "${General::swroot}/header.pl";
 
+# Libloc database handle.
+my $libloc_db_handle = &Location::Functions::init();
+
 use POSIX();
 
 my %cgiparams=();
@@ -308,7 +311,7 @@ foreach $_ (@log)
 		# Traffic from red
 		if($srcaddr ne '') {
 			# srcaddr is set
-			my $ccode = &GeoIP::lookup($srcaddr);
+			my $ccode = &Location::Functions::lookup_country_code($libloc_db_handle, $srcaddr);
 			if ($ccode eq '') {
 				$ccode = 'unknown';
 			}
@@ -482,7 +485,7 @@ for($s=0;$s<$lines;$s++)
 		my $fcode = lc($key[$s]);
 
 		# Get flag icon for of the country.
-		my $flag_icon = &GeoIP::get_flag_icon($fcode);
+		my $flag_icon = &Location::Functions::get_flag_icon($fcode);
 
 		if($flag_icon) {
 			print "<td align='center' $col><a href='/cgi-bin/country.cgi#$fcode'><img src='$flag_icon' border='0' align='absmiddle' alt='$key[$s]' title='$key[$s]'></a></td>";
diff --git a/html/cgi-bin/logs.cgi/firewalllogip.dat b/html/cgi-bin/logs.cgi/firewalllogip.dat
index c73d24fd6..670d72a52 100644
--- a/html/cgi-bin/logs.cgi/firewalllogip.dat
+++ b/html/cgi-bin/logs.cgi/firewalllogip.dat
@@ -18,10 +18,13 @@ use Getopt::Std;
 #use CGI::Carp 'fatalsToBrowser';
 
 require '/var/ipfire/general-functions.pl';
-require "${General::swroot}/geoip-functions.pl";
+require "${General::swroot}/location-functions.pl";
 require "${General::swroot}/lang.pl";
 require "${General::swroot}/header.pl";
 
+# Libloc database handle.
+my $libloc_db_handle = &Location::Functions::init();
+
 use POSIX();
 
 my %cgiparams=();
@@ -435,14 +438,14 @@ for($s=0;$s<$lines;$s++)
 	$col="bgcolor='$color{\"color$colorIndex\"}'";
 	print "<tr>";
 
-	my $ccode = &GeoIP::lookup($key[$s]);
+	my $ccode = &Location::Functions::lookup_country_code($libloc_db_handle, $key[$s]);
   
 	$color++;
 	print "<td align='center' $col><form method='post' action='showrequestfromip.dat'><input type='hidden' name='MONTH' value='$cgiparams{'MONTH'}'> <input type='hidden' name='DAY' value='$cgiparams{'DAY'}'> <input type='hidden' name='ip' value='$key[$s]'> <input type='submit' value='$Lang::tr{'details'}'></form></td>";
 	print "<td align='center' $col><a href='/cgi-bin/ipinfo.cgi?ip=$key[$s]'>$key[$s]</a></td>";
 
 	# Get flag icon for of the country.
-	my $flag_icon = &GeoIP::get_flag_icon($ccode);
+	my $flag_icon = &Location::Functions::get_flag_icon($ccode);
 
 	if ( $flag_icon ) {
 		print "<td align='center' $col><a href='/cgi-bin/country.cgi#$ccode'><img src='$flag_icon' border='0' align='absmiddle' alt='$ccode' title='$ccode'></a></td>";
diff --git a/html/cgi-bin/logs.cgi/showrequestfromcountry.dat b/html/cgi-bin/logs.cgi/showrequestfromcountry.dat
index 69835370b..4d80e77a4 100644
--- a/html/cgi-bin/logs.cgi/showrequestfromcountry.dat
+++ b/html/cgi-bin/logs.cgi/showrequestfromcountry.dat
@@ -15,10 +15,13 @@
 #use strict;
 
 require '/var/ipfire/general-functions.pl';
-require "${General::swroot}/geoip-functions.pl";
+require "${General::swroot}/location-functions.pl";
 require "${General::swroot}/lang.pl";
 require "${General::swroot}/header.pl";
 
+# Libloc database handle.
+my $libloc_db_handle = &Location::Functions::init();
+
 use POSIX();
 
 #workaround to suppress a warning when a variable is used only once
@@ -178,7 +181,7 @@ if (!$skip)
 			}
 			elsif($srcaddr ne '') {
 				# or srcaddr matches country code
-				my $ccode = &GeoIP::lookup($srcaddr);
+				my $ccode = &Location::Functions::lookup_country_code($libloc_db_handle, $srcaddr);
 				if($ccode eq uc($country)){
 					$log[$lines] = $_;
 					$lines++;
@@ -349,7 +352,7 @@ foreach $_ (@slice)
 	if($iface eq $country || $srcaddr ne '') {
 		my $ccode='';
 		if($iface ne $country) {
-			$ccode = &GeoIP::lookup($srcaddr);
+			$ccode = &Location::Functions::lookup_country_code($libloc_db_handle, $srcaddr);
 		}
 		if($iface eq $country || $ccode eq uc($country)) {
 			my $chain = '';
diff --git a/html/cgi-bin/netexternal.cgi b/html/cgi-bin/netexternal.cgi
index 98ac4fe12..781633c1d 100644
--- a/html/cgi-bin/netexternal.cgi
+++ b/html/cgi-bin/netexternal.cgi
@@ -31,7 +31,6 @@ use IO::Socket;
 require '/var/ipfire/general-functions.pl';
 require "${General::swroot}/lang.pl";
 require "${General::swroot}/header.pl";
-require "${General::swroot}/geoip-functions.pl";
 require "${General::swroot}/graphs.pl";
 
 my %color = ();
diff --git a/html/cgi-bin/ovpnmain.cgi b/html/cgi-bin/ovpnmain.cgi
index bcd51df6d..457ebcf1f 100644
--- a/html/cgi-bin/ovpnmain.cgi
+++ b/html/cgi-bin/ovpnmain.cgi
@@ -35,7 +35,7 @@ require '/var/ipfire/general-functions.pl';
 require "${General::swroot}/lang.pl";
 require "${General::swroot}/header.pl";
 require "${General::swroot}/countries.pl";
-require "${General::swroot}/geoip-functions.pl";
+require "${General::swroot}/location-functions.pl";
 
 # enable only the following on debugging purpose
 #use warnings;
@@ -2994,6 +2994,9 @@ END
 	&Header::openbigbox('100%', 'LEFT', '', '');
     &Header::openbox('100%', 'LEFT', $Lang::tr{'ovpn con stat'});
 
+    # Libloc database handle.
+    my $libloc_db_handle = &Location::Functions::init();
+
 #
 #	<td><b>$Lang::tr{'protocol'}</b></td>
 # protocol temp removed 
@@ -3044,8 +3047,8 @@ END
 		    $users[$uid]{'Proto'} = $proto;
 
 		    # get country code for "RealAddress"...
-		    my $ccode = &GeoIP::lookup((split ':', $users[$uid]{'RealAddress'})[0]);
-		    my $flag_icon = &GeoIP::get_flag_icon($ccode);
+		    my $ccode = &Location::Functions::lookup_country_code($libloc_db_handle, (split ':', $users[$uid]{'RealAddress'})[0]);
+		    my $flag_icon = &Location::Functions::get_flag_icon($ccode);
 		    $users[$uid]{'Country'} = "<a href='country.cgi#$ccode'><img src='$flag_icon' border='0' align='absmiddle' alt='$ccode' title='$ccode' /></a>";
 		    $uid++;
 		}    
diff --git a/html/cgi-bin/remote.cgi b/html/cgi-bin/remote.cgi
index 8beb84efa..9c742669b 100644
--- a/html/cgi-bin/remote.cgi
+++ b/html/cgi-bin/remote.cgi
@@ -28,7 +28,7 @@ use strict;
 use IO::Socket;
 
 require '/var/ipfire/general-functions.pl';
-require "${General::swroot}/geoip-functions.pl";
+require "${General::swroot}/location-functions.pl";
 require "${General::swroot}/lang.pl";
 require "${General::swroot}/header.pl";
 
@@ -278,6 +278,9 @@ sub printactivelogins()
 	} else {
 		# list active logins...
 
+		# Libloc database handle.
+		my $libloc_db_handle = &Location::Functions::init();
+
 		foreach my $line (@output)
 		{
 			my @arry = split(/\ +/, $line);
@@ -288,8 +291,8 @@ sub printactivelogins()
 			$remoteip =~ s/[()]//g;
 
 			# display more information about that IP adress...
-			my $ccode = &GeoIP::lookup($remoteip);
-			my $flag_icon = &GeoIP::get_flag_icon($ccode);
+			my $ccode = &Location::Functions::lookup_country_code($libloc_db_handle, $remoteip);
+			my $flag_icon = &Location::Functions::get_flag_icon($ccode);
 
 			# get rDNS...
 			my $iaddr = inet_aton($remoteip);
diff --git a/html/cgi-bin/tor.cgi b/html/cgi-bin/tor.cgi
index d31eb1086..c9416be01 100644
--- a/html/cgi-bin/tor.cgi
+++ b/html/cgi-bin/tor.cgi
@@ -27,7 +27,7 @@ use Locale::Codes::Country;
 #use CGI::Carp 'fatalsToBrowser';
 
 require '/var/ipfire/general-functions.pl';
-require "${General::swroot}/geoip-functions.pl";
+require "${General::swroot}/location-functions.pl";
 require "${General::swroot}/lang.pl";
 require "${General::swroot}/header.pl";
 
@@ -618,7 +618,7 @@ END
 
 				if (exists($node->{'country_code'})) {
 					# Get the flag icon of the country.
-					my $flag_icon = &GeoIP::get_flag_icon($node->{'country_code'});
+					my $flag_icon = &Location::Functions::get_flag_icon($node->{'country_code'});
 
 					# Check if a flag for the given country is available.
 					if ($flag_icon) {
diff --git a/langs/de/cgi-bin/de.pl b/langs/de/cgi-bin/de.pl
index 26ad2ab1e..b01e75eb5 100644
--- a/langs/de/cgi-bin/de.pl
+++ b/langs/de/cgi-bin/de.pl
@@ -1211,10 +1211,10 @@
 'fwhost OpenVPN static host' => 'OpenVPN statischer Host',
 'fwhost OpenVPN static network' => 'OpenVPN statisches Netzwerk',
 'fwhost Standard Network' => 'Standard-Netzwerk',
-'fwhost addgeoipgrp' => 'Neue GeoIP-Gruppe hinzufügen',
 'fwhost addgrp' => 'Neue Gruppe hinzufügen',
 'fwhost addgrpname' => 'Gruppenname:',
 'fwhost addhost' => 'Neuen Host hinzufügen',
+'fwhost addlocationgrp' => 'Neue Location-Gruppe hinzufügen',
 'fwhost addnet' => 'Neues Netzwerk hinzufügen',
 'fwhost addservice' => 'Neuen Dienst hinzufügen',
 'fwhost addservicegrp' => 'Neue Dienstgruppe hinzufügen',
@@ -1227,10 +1227,10 @@
 'fwhost change' => 'Ändern',
 'fwhost changeremark' => 'Es wurde nur die Bemerkung angepasst.',
 'fwhost cust addr' => 'Hosts',
-'fwhost cust geoip' => 'GeoIP-Gruppen',
-'fwhost cust geoipgroup' => 'GeoIP-Gruppen',
-'fwhost cust geoiplocation' => 'GeoIP-Ländercodes',
 'fwhost cust grp' => 'Gruppen',
+'fwhost cust location' => 'Location-Gruppen',
+'fwhost cust locationgroup' => 'Location-Gruppen',
+'fwhost cust locationlocation' => 'Location-Ländercodes',
 'fwhost cust net' => 'Netzwerke',
 'fwhost cust service' => 'Dienste',
 'fwhost cust srvgrp' => 'Dienstgruppen',
@@ -1276,9 +1276,9 @@
 'fwhost ipsec net' => 'IPsec-Netzwerke:',
 'fwhost menu' => 'Firewallgruppen',
 'fwhost netaddress' => 'Netzwerkadresse',
-'fwhost newgeoipgrp' => 'GeoIP-Gruppen',
 'fwhost newgrp' => 'Netzwerk-/Hostgruppen',
 'fwhost newhost' => 'Hosts',
+'fwhost newlocationgrp' => 'Location-Gruppen',
 'fwhost newnet' => 'Netzwerke',
 'fwhost newservice' => 'Dienst',
 'fwhost newservicegrp' => 'Dienstgruppen',
@@ -1312,16 +1312,6 @@
 'generating the root and host certificates may take a long time. it can take up to several minutes on older hardware. please be patient' => 'Die Erzeugung der Root- und Host-Zertifikate kann eine Weile dauern.  Auf älterer Hardware kann dies mehrere Minuten in Anspruch nehmen. Bitte haben Sie etwas Geduld.',
 'genkey' => 'PSK erzeugen',
 'genre' => 'Genre',
-'geoip' => 'Länderfilter konfigurieren',
-'geoipblock' => 'GeoIP-Filter',
-'geoipblock block countries' => 'Länderfilter',
-'geoipblock configuration' => 'GeoIP-Konfiguration',
-'geoipblock country code' => 'Ländercode',
-'geoipblock country is allowed' => 'Eingehende Verbindungen aus diesem Land sind erlaubt.',
-'geoipblock country is blocked' => 'Eingehende Verbindungen aus diesem Land werden blockiert.',
-'geoipblock country name' => 'Ländername',
-'geoipblock enable feature' => 'GeoIP-basierte Filterung aktivieren:',
-'geoipblock flag' => 'Flagge',
 'global settings' => 'Globale Einstellungen',
 'gpl i accept these terms and conditions' => 'Ich akzeptiere diese Bedingungen und Konditionen',
 'gpl license agreement' => 'Lizenzvereinbarung',
@@ -1575,6 +1565,16 @@
 'local vpn hostname/ip' => 'Lokaler VPN Hostname/IP',
 'localkey' => 'Localkey',
 'localkeyfile' => 'Localkeyfile',
+'location' => 'Länderfilter konfigurieren',
+'locationblock' => 'Location-Filter',
+'locationblock block countries' => 'Länderfilter',
+'locationblock configuration' => 'Location-Konfiguration',
+'locationblock country code' => 'Ländercode',
+'locationblock country is allowed' => 'Eingehende Verbindungen aus diesem Land sind erlaubt.',
+'locationblock country is blocked' => 'Eingehende Verbindungen aus diesem Land werden blockiert.',
+'locationblock country name' => 'Ländername',
+'locationblock enable feature' => 'Location-basierte Filterung aktivieren:',
+'locationblock flag' => 'Flagge',
 'log' => 'Protokoll',
 'log enabled' => 'Protokoll aktiviert',
 'log level' => 'Protokollierungsniveau',
@@ -1971,7 +1971,7 @@
 'pakfire last core list update' => 'Letztes Corelisten Update ist',
 'pakfire last package update' => 'Letztes Paketlisten Update ist',
 'pakfire last serverlist update' => 'Letztes Serverlisten Update ist',
-'pakfire last update' => 'Letzes Update ist',
+'pakfire last update' => 'Letztes Update ist',
 'pakfire possible dependency' => ' Möglicherweise haben diese Pakete Abhängigkeiten, d.h. andere Pakete müssen zusätzlich installiert werden. Dazu sehen Sie unten eine Liste.',
 'pakfire register' => 'Registrierung am Pakfire-Server:',
 'pakfire system state' => 'System Status',
diff --git a/langs/en/cgi-bin/en.pl b/langs/en/cgi-bin/en.pl
index 51483530b..7e3bbec89 100644
--- a/langs/en/cgi-bin/en.pl
+++ b/langs/en/cgi-bin/en.pl
@@ -1233,10 +1233,10 @@
 'fwhost OpenVPN static host' => 'OpenVPN static host',
 'fwhost OpenVPN static network' => 'OpenVPN static network',
 'fwhost Standard Network' => 'Standard network',
-'fwhost addgeoipgrp' => 'Add new GeoIP group',
 'fwhost addgrp' => 'Add new network/host group',
 'fwhost addgrpname' => 'Group name:',
 'fwhost addhost' => 'Add new host',
+'fwhost addlocationgrp' => 'Add new Location group',
 'fwhost addnet' => 'Add new network',
 'fwhost addservice' => 'Add service',
 'fwhost addservicegrp' => 'Add new service group',
@@ -1249,10 +1249,10 @@
 'fwhost change' => 'Modify',
 'fwhost changeremark' => 'You modified just the remark',
 'fwhost cust addr' => 'Hosts',
-'fwhost cust geoip' => 'GeoIP Groups',
-'fwhost cust geoipgroup' => 'GeoIP Groups',
-'fwhost cust geoiplocation' => 'GeoIP Locations',
 'fwhost cust grp' => 'Network/Host Groups',
+'fwhost cust location' => 'Location Groups',
+'fwhost cust locationgroup' => 'Location Groups',
+'fwhost cust locationlocation' => 'Location Locations',
 'fwhost cust net' => 'Networks',
 'fwhost cust service' => 'Services',
 'fwhost cust srvgrp' => 'Service Groups',
@@ -1298,9 +1298,9 @@
 'fwhost ipsec net' => 'IPsec networks:',
 'fwhost menu' => 'Firewall Groups',
 'fwhost netaddress' => 'Network address',
-'fwhost newgeoipgrp' => 'GeoIP Groups',
 'fwhost newgrp' => 'Network/Host Groups',
 'fwhost newhost' => 'Hosts',
+'fwhost newlocationgrp' => 'Location Groups',
 'fwhost newnet' => 'Networks',
 'fwhost newservice' => 'Services',
 'fwhost newservicegrp' => 'Service Groups',
@@ -1336,16 +1336,6 @@
 'generating the root and host certificates may take a long time. it can take up to several minutes on older hardware. please be patient' => 'Generating the root and host certificates may take a long time.  It can take up to several minutes on older hardware. Please be patient.',
 'genkey' => 'Generate PSK',
 'genre' => 'Genre',
-'geoip' => 'GeoIP',
-'geoipblock' => 'GeoIP Block',
-'geoipblock block countries' => 'Block countries',
-'geoipblock configuration' => 'GeoIP Configuration',
-'geoipblock country code' => 'Country Code',
-'geoipblock country is allowed' => 'Incoming traffic from this country is allowed',
-'geoipblock country is blocked' => 'Incoming traffic from this country will be blocked',
-'geoipblock country name' => 'Country Name',
-'geoipblock enable feature' => 'Enable GeoIP based blocking:',
-'geoipblock flag' => 'Flag',
 'global settings' => 'Global Settings',
 'gpl i accept these terms and conditions' => 'I accept these terms and conditions',
 'gpl license agreement' => 'License Agreement',
@@ -1599,6 +1589,16 @@
 'local vpn hostname/ip' => 'Local VPN Hostname/IP',
 'localkey' => 'Localkey',
 'localkeyfile' => 'Localkeyfile',
+'location' => 'Location',
+'locationblock' => 'Location Block',
+'locationblock block countries' => 'Block countries',
+'locationblock configuration' => 'Location Configuration',
+'locationblock country code' => 'Country Code',
+'locationblock country is allowed' => 'Incoming traffic from this country is allowed',
+'locationblock country is blocked' => 'Incoming traffic from this country will be blocked',
+'locationblock country name' => 'Country Name',
+'locationblock enable feature' => 'Enable Location based blocking:',
+'locationblock flag' => 'Flag',
 'log' => 'Log',
 'log enabled' => 'Log Enabled',
 'log level' => 'Log Level',
diff --git a/langs/es/cgi-bin/es.pl b/langs/es/cgi-bin/es.pl
index 23bc20727..c75a47324 100644
--- a/langs/es/cgi-bin/es.pl
+++ b/langs/es/cgi-bin/es.pl
@@ -866,16 +866,6 @@
 'generating the root and host certificates may take a long time. it can take up to several minutes on older hardware. please be patient' => 'Generar los certificador root y host puede tomar mucho tiempo. Puede durar varios minutos en equipos antiguos. Por favor sea paciente.',
 'genkey' => 'Generar PSK',
 'genre' => 'Género',
-'geoip' => 'GeoIP',
-'geoipblock' => 'GeoIP Block',
-'geoipblock block countries' => 'Países bloqueados',
-'geoipblock configuration' => 'Configuración GeoIP',
-'geoipblock country code' => 'Código del País',
-'geoipblock country is allowed' => 'Se permite el tráfico procedente de este País',
-'geoipblock country is blocked' => 'Se deniega el tráfico procedente de este País',
-'geoipblock country name' => 'Nombre del País',
-'geoipblock enable feature' => 'Habilitar bloqueo basado GeoIP:',
-'geoipblock flag' => 'Bandera',
 'global settings' => 'Configuraciones globales',
 'gpl i accept these terms and conditions' => 'I accept these terms and conditions',
 'gpl license agreement' => 'License Agreement',
@@ -1078,6 +1068,16 @@
 'local vpn hostname/ip' => 'Nombre de host/IP para VPN local',
 'localkey' => 'Llave local',
 'localkeyfile' => 'archivo de llave local',
+'location' => 'Location',
+'locationblock' => 'Location Block',
+'locationblock block countries' => 'Países bloqueados',
+'locationblock configuration' => 'Configuración Location',
+'locationblock country code' => 'Código del País',
+'locationblock country is allowed' => 'Se permite el tráfico procedente de este País',
+'locationblock country is blocked' => 'Se deniega el tráfico procedente de este País',
+'locationblock country name' => 'Nombre del País',
+'locationblock enable feature' => 'Habilitar bloqueo basado Location:',
+'locationblock flag' => 'Bandera',
 'log' => 'Registros:',
 'log enabled' => 'Registros activados',
 'log level' => 'Nivel de registros',
diff --git a/langs/fr/cgi-bin/fr.pl b/langs/fr/cgi-bin/fr.pl
index dc7b00fd0..d9930230f 100644
--- a/langs/fr/cgi-bin/fr.pl
+++ b/langs/fr/cgi-bin/fr.pl
@@ -376,7 +376,7 @@
 'advproxy standard ports' => 'Ports standards autorisés (un par ligne) ',
 'advproxy sunday' => 'Dim',
 'advproxy supervisor password' => 'Mot de passe superviseur',
-'advproxy suppress version' => 'Informations sur la version supprimée ',
+'advproxy suppress version' => 'Supprimer l\'information de version ',
 'advproxy throttle binary' => 'Fichiers binaires ',
 'advproxy throttle dskimg' => 'Images CD ',
 'advproxy throttle mmedia' => 'Multimédia ',
@@ -1240,10 +1240,10 @@
 'fwhost OpenVPN static host' => 'Hôte statique OpenVPN',
 'fwhost OpenVPN static network' => 'Réseau statique OpenVPN',
 'fwhost Standard Network' => 'Réseau standard',
-'fwhost addgeoipgrp' => 'Ajouter un groupe GeoIP',
 'fwhost addgrp' => 'Ajouter un réseau / groupe d\'hôtes',
 'fwhost addgrpname' => 'Nom du groupe :',
 'fwhost addhost' => 'Ajouter un hôte',
+'fwhost addlocationgrp' => 'Ajouter un groupe par localisation',
 'fwhost addnet' => 'Ajouter un réseau',
 'fwhost addservice' => 'Ajouter un service',
 'fwhost addservicegrp' => 'Ajouter un groupe de service',
@@ -1256,10 +1256,10 @@
 'fwhost change' => 'Modifier',
 'fwhost changeremark' => 'Vous avez juste modifié la remarque',
 'fwhost cust addr' => 'Hôtes',
-'fwhost cust geoip' => 'Groupes GeoIP',
-'fwhost cust geoipgroup' => 'Groupes GeoIP',
-'fwhost cust geoiplocation' => 'Emplacements GeoIP',
 'fwhost cust grp' => 'Réseau / groupes hôte',
+'fwhost cust location' => 'Localisation par pays',
+'fwhost cust locationgroup' => 'Localisation par groupe',
+'fwhost cust locationlocation' => 'Emplacements de localisation',
 'fwhost cust net' => 'Réseaux',
 'fwhost cust service' => 'Services',
 'fwhost cust srvgrp' => 'Groupes de service',
@@ -1305,9 +1305,9 @@
 'fwhost ipsec net' => 'Réseaux IPsec :',
 'fwhost menu' => 'Groupes de pare-feu',
 'fwhost netaddress' => 'Adresse réseau ',
-'fwhost newgeoipgrp' => 'Groupes GeoIP',
 'fwhost newgrp' => 'Réseau / groupes hôtes',
 'fwhost newhost' => 'Hôtes',
+'fwhost newlocationgrp' => 'Groupes par localisation',
 'fwhost newnet' => 'Réseaux',
 'fwhost newservice' => 'Services',
 'fwhost newservicegrp' => 'Groupes de service',
@@ -1341,16 +1341,6 @@
 'generating the root and host certificates may take a long time. it can take up to several minutes on older hardware. please be patient' => 'Générer le certificat root et le certificat hôte peut prendre du temps. Cela peut prendre plusieurs minutes sur du matériel ancien, veuillez patienter.',
 'genkey' => 'Générer PSK',
 'genre' => 'Genre',
-'geoip' => 'GeoIP',
-'geoipblock' => 'Blocage GeoIP',
-'geoipblock block countries' => 'Blocage des pays',
-'geoipblock configuration' => 'Configuration GeoIP',
-'geoipblock country code' => 'Code pays',
-'geoipblock country is allowed' => 'Le trafic entrant de ce pays sera autorisé',
-'geoipblock country is blocked' => 'Le trafic entrant de ce pays sera bloqué',
-'geoipblock country name' => 'Nom de pays',
-'geoipblock enable feature' => 'Activer le blocage GeoIP :',
-'geoipblock flag' => 'Drap.',
 'global settings' => 'Configuration générale',
 'gpl i accept these terms and conditions' => 'J\'accepte les termes et les conditions',
 'gpl license agreement' => 'Accord de licence',
@@ -1605,6 +1595,16 @@
 'local vpn hostname/ip' => 'Nom d\'hôte/IP du VPN local ',
 'localkey' => 'Clef locale',
 'localkeyfile' => 'Fichier clef locale',
+'location' => 'Localisation',
+'locationblock' => 'Blocage par localisation',
+'locationblock block countries' => 'Blocage des pays',
+'locationblock configuration' => 'Configuration de localisation',
+'locationblock country code' => 'Code pays',
+'locationblock country is allowed' => 'Le trafic entrant de ce pays sera autorisé',
+'locationblock country is blocked' => 'Le trafic entrant de ce pays sera bloqué',
+'locationblock country name' => 'Nom de pays',
+'locationblock enable feature' => 'Activer le blocage par localisation :',
+'locationblock flag' => 'Drap.',
 'log' => 'Rapport :',
 'log enabled' => 'Journal activé',
 'log level' => 'Niveau de rapport',
@@ -1931,7 +1931,7 @@
 'ovpn add conf' => 'Configuration additionnelle',
 'ovpn con stat' => 'Statistiques de connexions OpenVPN',
 'ovpn config' => 'Config OVPN',
-'ovpn connection name' => 'Nom de la connexion',
+'ovpn connection name' => 'Nom de la connexion ',
 'ovpn crypt options' => 'Options cryptographiques',
 'ovpn device' => 'Périphérique OpenVPN :',
 'ovpn dh' => 'Longueur de paramètres Diffie-Hellman ',
@@ -1963,7 +1963,7 @@
 'ovpn reneg sec' => 'Durée de vie de la clé de session :',
 'ovpn routes push' => 'Routes (une par ligne) :',
 'ovpn routes push options' => 'Options de route push',
-'ovpn rw connection log' => 'Rapports de connexions client nomade OpenVPN',
+'ovpn rw connection log' => 'Rapports de client nomade OpenVPN',
 'ovpn server status' => 'Statut actuel du serveur OpenVPN :',
 'ovpn subnet' => 'Sous-réseau OpenVPN',
 'ovpn subnet is invalid' => 'Sous-réseau OpenVPN non valide.',
@@ -2294,6 +2294,7 @@
 'squid extension methods' => 'Votre liste de <tt>méthodes d\'extension</tt>',
 'squid extension methods invalid' => 'Votre liste de méthodes d\'extension peut seulement contenir des mots composés de majuscules ou de chiffres, séparés par un espace. ',
 'squid fix cache' => 'Cache de réparation',
+'srbds' => 'Échantillonnage spécial données du tampon de registre - CrossTalk',
 'src port' => 'Port source',
 'srcprt range overlaps' => 'La plage de port source chevauche un port déjà défini.',
 'srcprt within existing' => 'Le port source est à l\'intérieur d\'une plage de port déjà définie.',
@@ -2877,9 +2878,9 @@
 'vpn start action add' => 'Attendre l\'initialisation de la connexion',
 'vpn start action route' => 'A la demande',
 'vpn start action start' => 'Toujours démarré',
-'vpn statistic n2n' => 'Stat OpenVPN (site-à-site)',
-'vpn statistic rw' => 'Stats OpenVPN (client nomade)',
-'vpn statistics n2n' => 'Stats OpenVPN (site-à-site)',
+'vpn statistic n2n' => 'OpenVPN (site-à-site)',
+'vpn statistic rw' => 'OpenVPN (client nomade)',
+'vpn statistics n2n' => 'OpenVPN (site-à-site)',
 'vpn subjectaltname' => 'Nom de l\'objet',
 'vpn subjectaltname missing' => 'Le nom de l\'objet ne peut être vide.',
 'vpn wait' => 'ATTENTE',
@@ -2990,7 +2991,7 @@
 'written bytes' => 'Octets écrits',
 'xtaccess all error' => 'Vous ne pouvez pas donner l\'accès externe à tout ce qui se fait dans le dossier de redirection de port.',
 'xtaccess bad transfert' => 'Si vous spécifiez une plage de ports de destination, la plage source doit être identique !',
-'year' => 'Année',
+'year' => 'Année ',
 'year-graph' => 'Annee',
 'yearly firewallhits' => 'Contacts annuels du pare-feu',
 'yes' => 'Oui',
diff --git a/langs/tr/cgi-bin/tr.pl b/langs/tr/cgi-bin/tr.pl
index 1917b8241..c23ff5df6 100644
--- a/langs/tr/cgi-bin/tr.pl
+++ b/langs/tr/cgi-bin/tr.pl
@@ -1187,10 +1187,10 @@
 'fwhost OpenVPN static host' => 'OpenVPN statik ana bilgisayar',
 'fwhost OpenVPN static network' => 'OpenVPN statik ağ',
 'fwhost Standard Network' => 'Standart ağ',
-'fwhost addgeoipgrp' => 'Yeni GeoIP grubu ekle',
 'fwhost addgrp' => 'Yeni ağ/ana bilgisayar grubu ekle:',
 'fwhost addgrpname' => 'Grup adı:',
 'fwhost addhost' => 'Yeni bir ana bilgisayar ekle:',
+'fwhost addlocationgrp' => 'Yeni Location grubu ekle',
 'fwhost addnet' => 'Yeni bir ağ ekle:',
 'fwhost addservice' => 'Hizmet ekle:',
 'fwhost addservicegrp' => 'Yeni bir hizmet grubu ekle:',
@@ -1203,10 +1203,10 @@
 'fwhost change' => 'Değiştir',
 'fwhost changeremark' => 'Sadece açıklamalar değiştirilmiş',
 'fwhost cust addr' => 'Ana bilgisayarlar',
-'fwhost cust geoip' => 'GeoIP Grupları',
-'fwhost cust geoipgroup' => 'GeoIP Grupları',
-'fwhost cust geoiplocation' => 'GeoIP Konumları',
 'fwhost cust grp' => 'Ağ/Ana Bilgisayar Grupları:',
+'fwhost cust location' => 'Location Grupları',
+'fwhost cust locationgroup' => 'Location Grupları',
+'fwhost cust locationlocation' => 'Location Konumları',
 'fwhost cust net' => 'Ağlar',
 'fwhost cust service' => 'Hizmetler:',
 'fwhost cust srvgrp' => 'Hizmet grupları:',
@@ -1252,9 +1252,9 @@
 'fwhost ipsec net' => 'IPsec ağları:',
 'fwhost menu' => 'Güvenlik Duvarı Grupları',
 'fwhost netaddress' => 'Ağ adresi',
-'fwhost newgeoipgrp' => 'GeoIP Grupları',
 'fwhost newgrp' => 'Ağ/Ana Bilgisayar Grupları',
 'fwhost newhost' => 'Ana Bilgisayarlar',
+'fwhost newlocationgrp' => 'Location Grupları',
 'fwhost newnet' => 'Ağlar',
 'fwhost newservice' => 'Hizmetler',
 'fwhost newservicegrp' => 'Hizmet Grupları',
@@ -1289,16 +1289,6 @@
 'generating the root and host certificates may take a long time. it can take up to several minutes on older hardware. please be patient' => 'Yönetici ve sunucu sertifikalarının oluşturulması biraz zaman alır. Eski donanımlarda bu süre birkaç dakikayı bulabilir. Lütfen bekleyin.',
 'genkey' => 'PSK oluştur',
 'genre' => 'Tür',
-'geoip' => 'GeoIP',
-'geoipblock' => 'GeoIP Engelleme',
-'geoipblock block countries' => 'Engellenen ülkeler',
-'geoipblock configuration' => 'GeoIP Yapılandırması',
-'geoipblock country code' => 'Ülke Kodu',
-'geoipblock country is allowed' => 'Bu ülkeden gelen trafiğe izin ver',
-'geoipblock country is blocked' => 'Bu ülkeden gelen trafiği engelle',
-'geoipblock country name' => 'Ülke Adı',
-'geoipblock enable feature' => 'GeoIP tabanlı engellemeyi aktifleştir:',
-'geoipblock flag' => 'Bayrak',
 'global settings' => 'Genel ayarlar',
 'gpl i accept these terms and conditions' => 'Bu şartları kabul ediyorum',
 'gpl license agreement' => 'Lisans Sözleşmesi',
@@ -1521,6 +1511,16 @@
 'local vpn hostname/ip' => 'Yerel VPN ana bilgisayar adı/ip',
 'localkey' => 'yerel Anahtar',
 'localkeyfile' => 'Yerel Anahtar Dosyası',
+'location' => 'Location',
+'locationblock' => 'Location Engelleme',
+'locationblock block countries' => 'Engellenen ülkeler',
+'locationblock configuration' => 'Location Yapılandırması',
+'locationblock country code' => 'Ülke Kodu',
+'locationblock country is allowed' => 'Bu ülkeden gelen trafiğe izin ver',
+'locationblock country is blocked' => 'Bu ülkeden gelen trafiği engelle',
+'locationblock country name' => 'Ülke Adı',
+'locationblock enable feature' => 'Location tabanlı engellemeyi aktifleştir:',
+'locationblock flag' => 'Bayrak',
 'log' => 'Günlük:',
 'log enabled' => 'Günlük Aktif',
 'log level' => 'Günlük seviyesi',
diff --git a/lfs/GeoIP b/lfs/GeoIP
deleted file mode 100644
index ce758d8a5..000000000
--- a/lfs/GeoIP
+++ /dev/null
@@ -1,84 +0,0 @@
-###############################################################################
-#                                                                             #
-# IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007-2018  IPFire Team  <info(a)ipfire.org>                     #
-#                                                                             #
-# This program is free software: you can redistribute it and/or modify        #
-# it under the terms of the GNU General Public License as published by        #
-# the Free Software Foundation, either version 3 of the License, or           #
-# (at your option) any later version.                                         #
-#                                                                             #
-# This program is distributed in the hope that it will be useful,             #
-# but WITHOUT ANY WARRANTY; without even the implied warranty of              #
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               #
-# GNU General Public License for more details.                                #
-#                                                                             #
-# You should have received a copy of the GNU General Public License           #
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.       #
-#                                                                             #
-###############################################################################
-
-###############################################################################
-# Definitions
-###############################################################################
-
-include Config
-
-VER        = 1.25
-DATVER     = 30062018
-
-THISAPP    = Geo-IP-PurePerl-$(VER)
-DL_FILE    = $(THISAPP).tar.gz
-DL_FROM    = $(URL_IPFIRE)
-DIR_APP    = $(DIR_SRC)/$(THISAPP)
-TARGET     = $(DIR_INFO)/$(THISAPP)
-
-###############################################################################
-# Top-level Rules
-###############################################################################
-
-objects = $(DL_FILE) GeoIP.dat-$(DATVER).gz
-
-$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-GeoIP.dat-$(DATVER).gz = $(DL_FROM)/GeoIP.dat-$(DATVER).gz
-
-$(DL_FILE)_MD5 = a47a1b71f7cd7c46cca9efcc448e0726
-GeoIP.dat-$(DATVER).gz_MD5 = d538e57ad9268fdc7955c6cf9a37c4a9
-
-install : $(TARGET)
-
-check : $(patsubst %,$(DIR_CHK)/%,$(objects))
-
-download :$(patsubst %,$(DIR_DL)/%,$(objects))
-
-md5 : $(subst %,%_MD5,$(objects))
-
-###############################################################################
-# Downloading, checking, md5sum
-###############################################################################
-
-$(patsubst %,$(DIR_CHK)/%,$(objects)) :
-	@$(CHECK)
-
-$(patsubst %,$(DIR_DL)/%,$(objects)) :
-	@$(LOAD)
-
-$(subst %,%_MD5,$(objects)) :
-	@$(MD5)
-
-###############################################################################
-# Installation Details
-###############################################################################
-
-$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
-	@$(PREBUILD)
-	@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
-	cd $(DIR_APP) && patch -Np0 -i $(DIR_SRC)/src/patches/geoip_1_25_change_database_path.patch
-	cd $(DIR_APP) && perl Makefile.PL
-	cd $(DIR_APP) && make $(MAKETUNING) $(EXTRA_MAKE)
-	cd $(DIR_APP) && make install
-	cd $(DIR_APP) && mkdir -p /usr/share/GeoIP && \
-		zcat $(DIR_DL)/GeoIP.dat-$(DATVER).gz > /usr/share/GeoIP/GeoIP.dat
-	cd $(DIR_APP) && chmod 777 /srv/web/ipfire/html/images/flags
-	@rm -rf $(DIR_APP)
-	@$(POSTBUILD)
diff --git a/lfs/Locale-Country b/lfs/Locale-Country
index 55482a980..1f9323ee0 100644
--- a/lfs/Locale-Country
+++ b/lfs/Locale-Country
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 3.33
+VER        = 3.62
 
 THISAPP    = Locale-Codes-$(VER)
 DL_FILE    = $(THISAPP).tar.gz
@@ -40,7 +40,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = bc7496f97889de8504e80addaa0ee40c
+$(DL_FILE)_MD5 = d4ee6fb8b5483c54abde1aa2b94e555a
 
 install : $(TARGET)
 
diff --git a/lfs/bacula b/lfs/bacula
index 1e4db011b..f5220bf16 100644
--- a/lfs/bacula
+++ b/lfs/bacula
@@ -32,7 +32,7 @@ DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
 PROG       = bacula
-PAK_VER    = 5
+PAK_VER    = 6
 
 DEPS       =
 
@@ -87,6 +87,8 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
 	cd $(DIR_APP) && make $(MAKETUNING)
 	cd $(DIR_APP) && make install
 	ln -sf /etc/bacula/bacula-ctl-fd /etc/rc.d/init.d/bacula
+	install -v -m 644 ${DIR_SRC}/config/backup/includes/bacula \
+			/var/ipfire/backup/addons/includes/bacula
 	rm -f /root/.rnd
 	@rm -rf $(DIR_APP)
 	@$(POSTBUILD)
diff --git a/lfs/configroot b/lfs/configroot
index ee320d8cf..0afacebaf 100644
--- a/lfs/configroot
+++ b/lfs/configroot
@@ -64,8 +64,8 @@ $(TARGET) :
 	for i in auth/users backup/include.user backup/exclude.user \
 	    captive/settings captive/agb.txt captive/clients captive/voucher_out certs/index.txt certs/index.txt.attr ddns/config ddns/settings ddns/ipcache dhcp/settings \
 	    dhcp/fixleases dhcp/advoptions dhcp/dhcpd.conf.local dns/settings dns/servers dnsforward/config ethernet/aliases ethernet/settings ethernet/known_nics ethernet/scanned_nics \
-	    ethernet/wireless extrahd/scan extrahd/devices extrahd/partitions extrahd/settings firewall/settings firewall/config firewall/geoipblock firewall/input firewall/outgoing \
-	    fwhosts/customnetworks fwhosts/customhosts fwhosts/customgroups fwhosts/customservicegrp fwhosts/customgeoipgrp fwlogs/ipsettings fwlogs/portsettings \
+	    ethernet/wireless extrahd/scan extrahd/devices extrahd/partitions extrahd/settings firewall/settings firewall/config firewall/locationblock firewall/input firewall/outgoing \
+	    fwhosts/customnetworks fwhosts/customhosts fwhosts/customgroups fwhosts/customservicegrp fwhosts/customlocationgrp fwlogs/ipsettings fwlogs/portsettings \
 	    isdn/settings mac/settings main/hosts main/routing main/security main/settings optionsfw/settings \
 	    ovpn/ccd.conf ovpn/ccdroute ovpn/ccdroute2 pakfire/settings portfw/config ppp/settings-1 ppp/settings-2 ppp/settings-3 ppp/settings-4 \
 	    ppp/settings-5 ppp/settings proxy/settings proxy/squid.conf proxy/advanced/settings proxy/advanced/cre/enable remote/settings qos/settings qos/classes qos/subclasses qos/level7config qos/portconfig \
@@ -78,7 +78,7 @@ $(TARGET) :
 	cp $(DIR_SRC)/config/cfgroot/header.pl			$(CONFIG_ROOT)/
 	cp $(DIR_SRC)/config/cfgroot/general-functions.pl	$(CONFIG_ROOT)/
 	cp $(DIR_SRC)/config/cfgroot/network-functions.pl	$(CONFIG_ROOT)/
-	cp $(DIR_SRC)/config/cfgroot/geoip-functions.pl		$(CONFIG_ROOT)/
+	cp $(DIR_SRC)/config/cfgroot/location-functions.pl		$(CONFIG_ROOT)/
 	cp $(DIR_SRC)/config/cfgroot/ids-functions.pl		$(CONFIG_ROOT)/
 	cp $(DIR_SRC)/config/cfgroot/lang.pl			$(CONFIG_ROOT)/
 	cp $(DIR_SRC)/config/cfgroot/countries.pl		$(CONFIG_ROOT)/
diff --git a/lfs/geoip-database b/lfs/geoip-database
deleted file mode 100644
index fbaa21179..000000000
--- a/lfs/geoip-database
+++ /dev/null
@@ -1,73 +0,0 @@
-###############################################################################
-#                                                                             #
-# IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007-2020  IPFire Team  <info(a)ipfire.org>                     #
-#                                                                             #
-# This program is free software: you can redistribute it and/or modify        #
-# it under the terms of the GNU General Public License as published by        #
-# the Free Software Foundation, either version 3 of the License, or           #
-# (at your option) any later version.                                         #
-#                                                                             #
-# This program is distributed in the hope that it will be useful,             #
-# but WITHOUT ANY WARRANTY; without even the implied warranty of              #
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               #
-# GNU General Public License for more details.                                #
-#                                                                             #
-# You should have received a copy of the GNU General Public License           #
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.       #
-#                                                                             #
-###############################################################################
-
-###############################################################################
-# Definitions
-###############################################################################
-
-include Config
-
-VER        = 20191217
-
-THISAPP    = GeoIP-LiteCity-1-2csv-xtables-$(VER)
-DL_FILE    = $(THISAPP).tar.xz
-DL_FROM    = $(URL_IPFIRE)
-DIR_APP    = $(DIR_SRC)/$(THISAPP)
-TARGET     = $(DIR_INFO)/$(THISAPP)
-
-###############################################################################
-# Top-level Rules
-###############################################################################
-
-objects = $(DL_FILE)
-
-$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-
-$(DL_FILE)_MD5                  = 6265289716880fd8e8a6061fef8d5747
-
-install : $(TARGET)
-
-check : $(patsubst %,$(DIR_CHK)/%,$(objects))
-
-download :$(patsubst %,$(DIR_DL)/%,$(objects))
-
-md5 : $(subst %,%_MD5,$(objects))
-
-###############################################################################
-# Downloading, checking, md5sum
-###############################################################################
-
-$(patsubst %,$(DIR_CHK)/%,$(objects)) :
-	@$(CHECK)
-
-$(patsubst %,$(DIR_DL)/%,$(objects)) :
-	@$(LOAD)
-
-$(subst %,%_MD5,$(objects)) :
-	@$(MD5)
-
-###############################################################################
-# Installation Details
-###############################################################################
-
-$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
-	@$(PREBUILD)
-	@cd / && tar axf $(DIR_DL)/$(DL_FILE)
-	@$(POSTBUILD)
diff --git a/lfs/geoip-generator b/lfs/libloc
similarity index 61%
rename from lfs/geoip-generator
rename to lfs/libloc
index 3091d32c7..12bc52ca4 100644
--- a/lfs/geoip-generator
+++ b/lfs/libloc
@@ -1,7 +1,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007-2018  IPFire Team  <info(a)ipfire.org>                     #
+# Copyright (C) 2007-2020  IPFire Team  <info(a)ipfire.org>                     #
 #                                                                             #
 # This program is free software: you can redistribute it and/or modify        #
 # it under the terms of the GNU General Public License as published by        #
@@ -24,26 +24,27 @@
 
 include Config
 
-VER        = 1.6.12
-DVER       = 1.6.12-3
+VER        = 0.9.3
+DB_DATE    = 2020-07-10
 
-THISAPP    = geoip-api-c-$(VER)
+THISAPP    = libloc-$(VER)
 DL_FILE    = $(THISAPP).tar.gz
 DL_FROM    = $(URL_IPFIRE)
-DIR_APP    = $(DIR_SRC)/$(THISAPP)
+DIR_APP    = $(DIR_SRC)/libloc-$(VER)
 TARGET     = $(DIR_INFO)/$(THISAPP)
 
 ###############################################################################
 # Top-level Rules
 ###############################################################################
 
-objects = $(DL_FILE) geoip_$(DVER).debian.tar.xz
+objects = $(DL_FILE) \
+	location-$(DB_DATE).db.xz
 
-$(DL_FILE) = $(DL_FROM)/$(DL_FILE) 
-geoip_$(DVER).debian.tar.xz = $(DL_FROM)/geoip_$(DVER).debian.tar.xz
+$(DL_FILE)                    = https://source.ipfire.org/releases/libloc//$(DL_FILE)
+location-$(DB_DATE).db.xz     = https://location.ipfire.org/databases/1/archive/location-$(DB_DATE).db.xz
 
-$(DL_FILE)_MD5                  = 727e5d6df9e9fc039dbc3a323cc56d2e
-geoip_$(DVER).debian.tar.xz_MD5 = 64fb561362dc456b45b799da20d47dd4
+$(DL_FILE)_MD5                = 61f1d543f67baf665b0140d3676fdade
+location-$(DB_DATE).db.xz_MD5 = 3f68f631e94c29b953c4e60454567540
 
 install : $(TARGET)
 
@@ -53,6 +54,9 @@ download :$(patsubst %,$(DIR_DL)/%,$(objects))
 
 md5 : $(subst %,%_MD5,$(objects))
 
+dist:
+	@$(PAK)
+
 ###############################################################################
 # Downloading, checking, md5sum
 ###############################################################################
@@ -72,18 +76,41 @@ $(subst %,%_MD5,$(objects)) :
 
 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
 	@$(PREBUILD)
-	@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
-	cd $(DIR_APP) && ./bootstrap
-	cd $(DIR_APP) && ./configure --prefix=/usr
+	@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar xvf $(DIR_DL)/$(DL_FILE)
+
+	# Apply upstream patches
+	cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/libloc-0.9.3-country-terminate-buffer-when-reading-from-database.patch
+	cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/libloc-0.9.3-location-provide-return-code.patch
+
+	# Add patch for i586 to disable strong stack protector.
+ifeq "$(BUILD_ARCH)" "i586"
+	cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/libloc-0.9.3-perl-regular-stack-protector.patch
+endif
+
+	cd $(DIR_APP) && ./autogen.sh
+	cd $(DIR_APP) && ./configure \
+		--prefix=/usr \
+		--sysconfdir=/etc \
+		--localstatedir=/var \
+		--disable-manpages
 	cd $(DIR_APP) && make $(MAKETUNING)
 	cd $(DIR_APP) && make install
-	cd $(DIR_APP) && tar axf $(DIR_DL)/geoip_$(DVER).debian.tar.xz
-	cd $(DIR_APP) && sed -i "s/use diagnostics;//g" debian/src/geolite2-to-legacy-csv.sh
-	cd $(DIR_APP) && g++ -std=gnu++11 -g debian/src/geoip-csv-to-dat.cpp \
-				-o geoip-generator -lGeoIP
-	-mkdir -p /usr/share/GeoIP/bin
-	cd $(DIR_APP) && install -m 755 geoip-generator /usr/share/GeoIP/bin
-	cd $(DIR_APP) && install -m 755 debian/src/geolite2-to-legacy-csv.sh /usr/share/GeoIP/bin
-	cd $(DIR_APP) && install -m 644 debian/src/countryInfo.txt /usr/share/GeoIP/bin
+
+	# Copy database to correct location.
+	cd $(DIR_APP) && cp -avf $(DIR_DL)/location-$(DB_DATE).db.xz /var/lib/location/database.db.xz
+
+	# Uncompress database.
+	cd $(DIR_APP) && rm -f /var/lib/location/database.db
+	cd $(DIR_APP) && xz -d /var/lib/location/database.db.xz
+
+	# Launch location util and export all locations in xt_geoip format.
+	cd $(DIR_APP) && /usr/bin/location export \
+		--directory=/usr/share/xt_geoip \
+		--family=ipv4 \
+		--format=xt_geoip
+
+	# Remove exported IPv6 zones.
+	cd $(DIR_APP) && rm -rvf /usr/share/xt_geoip/*.iv6
+
 	@rm -rf $(DIR_APP)
 	@$(POSTBUILD)
diff --git a/lfs/mc b/lfs/mc
index 8edba6df8..5c48dd332 100644
--- a/lfs/mc
+++ b/lfs/mc
@@ -1,7 +1,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007-2019  IPFire Team  <info(a)ipfire.org>                     #
+# Copyright (C) 2007-2020  IPFire Team  <info(a)ipfire.org>                     #
 #                                                                             #
 # This program is free software: you can redistribute it and/or modify        #
 # it under the terms of the GNU General Public License as published by        #
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 4.8.24
+VER        = 4.8.25
 
 THISAPP    = mc-$(VER)
 DL_FILE    = $(THISAPP).tar.xz
@@ -32,7 +32,7 @@ DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
 PROG       = mc
-PAK_VER    = 19
+PAK_VER    = 20
 
 DEPS       =
 
@@ -44,7 +44,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = 3a11df2dd379dd67c497c8d2c344715c
+$(DL_FILE)_MD5 = 19f14d368001aac454c28a2ddd2e851b
 
 install : $(TARGET)
 
diff --git a/lfs/xtables-addons b/lfs/xtables-addons
index 651a13f9c..08b1e070f 100644
--- a/lfs/xtables-addons
+++ b/lfs/xtables-addons
@@ -27,7 +27,7 @@ include Config
 VERSUFIX = ipfire$(KCFG)
 MODPATH = /lib/modules/$(KVER)-$(VERSUFIX)/extra/
 
-VER        = 3.2
+VER        = 3.7
 
 THISAPP    = xtables-addons-$(VER)
 DL_FILE    = $(THISAPP).tar.xz
@@ -48,7 +48,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = 80ea89ba8d5a001a8d71c7f05b2f0141
+$(DL_FILE)_MD5 = d81776d6320ebd741042bf8eb7e13d1d
 
 install : $(TARGET)
 
@@ -82,8 +82,6 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
 	@$(PREBUILD)
 	@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
 
-	cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/xtables-addons-3.2-fix-database-generation.patch
-
 	# Only build the specified modules.
 	cp -avf $(DIR_SRC)/config/xtables-addons/mconfig \
 		$(DIR_APP)/mconfig
@@ -96,10 +94,6 @@ ifeq "$(USPACE)" "1"
 
 	cd $(DIR_APP) && make $(MAKETUNING)
 	cd $(DIR_APP) && make install
-
-	# Install xt_geoip_build.
-	cd $(DIR_APP) && install -m 755 geoip/xt_geoip_build \
-		/usr/local/bin/
 else
 	cd $(DIR_APP) && ./configure \
 		--with-kbuild=/lib/modules/$$(uname -r)$(KCFG)/build
@@ -117,5 +111,8 @@ else
 	done
 endif
 
+	# Create directory for the databases.
+	mkdir -pv /usr/share/xt_geoip/
+
 	@rm -rf $(DIR_APP)
 	@$(POSTBUILD)
diff --git a/make.sh b/make.sh
index 2e54cec28..a2e54f233 100755
--- a/make.sh
+++ b/make.sh
@@ -26,7 +26,7 @@ NAME="IPFire"							# Software name
 SNAME="ipfire"							# Short name
 # If you update the version don't forget to update backupiso and add it to core update
 VERSION="2.25"							# Version number
-CORE="147"							# Core Level (Filename)
+CORE="148"							# Core Level (Filename)
 SLOGAN="www.ipfire.org"						# Software slogan
 CONFIG_ROOT=/var/ipfire						# Configuration rootdir
 NICE=10								# Nice level
@@ -1346,8 +1346,6 @@ buildipfire() {
   lfsmake2 python-daemon
   lfsmake2 python-ipaddress
   lfsmake2 glib
-  lfsmake2 GeoIP
-  lfsmake2 geoip-database
   lfsmake2 ntp
   lfsmake2 openssh
   lfsmake2 fontconfig
@@ -1634,10 +1632,10 @@ buildipfire() {
   lfsmake2 flashrom
   lfsmake2 firmware-update
   lfsmake2 tshark
-  lfsmake2 geoip-generator
   lfsmake2 speedtest-cli
   lfsmake2 rfkill
   lfsmake2 amazon-ssm-agent
+  lfsmake2 libloc
 }
 
 buildinstaller() {
@@ -1990,3 +1988,4 @@ find-dependencies)
 	cat doc/make.sh-usage
 	;;
 esac
+
diff --git a/src/initscripts/networking/any b/src/initscripts/networking/any
index 8d2300950..0cf107f48 100644
--- a/src/initscripts/networking/any
+++ b/src/initscripts/networking/any
@@ -34,7 +34,7 @@ elif [ "$(basename $0)" == "blue" ]; then
 	NETADDRESS="${BLUE_NETADDRESS}"
 	NETMASK="${BLUE_NETMASK}"
 	DEVICE="${BLUE_DEV}"
-	MTU="${GREEN_MTU}"
+	MTU="${BLUE_MTU}"
 elif [ "$(basename $0)" == "orange" ]; then
 	DEVICE="${ORANGE_DEV}"
 	ADDRESS="${ORANGE_ADDRESS}"
diff --git a/src/initscripts/networking/red.up/99-geoip-database b/src/initscripts/networking/red.up/99-geoip-database
deleted file mode 100644
index 9b024a8d0..000000000
--- a/src/initscripts/networking/red.up/99-geoip-database
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/bin/bash
-
-# Get the GeoIP database if no one exists yet
-
-database_exists() {
-	local file
-	for file in /usr/share/xt_geoip/*.iv4; do
-		[ -e "${file}" ] && return 0
-	done
-
-	# Does not exist
-	return 1
-}
-
-# Download ruleset if none has been found.
-if ! database_exists; then
-	/usr/local/bin/xt_geoip_update >/dev/null 2>&1 &
-fi
-
-exit 0
diff --git a/src/initscripts/system/firewall b/src/initscripts/system/firewall
index ab3a0bbf9..65f1c979b 100644
--- a/src/initscripts/system/firewall
+++ b/src/initscripts/system/firewall
@@ -276,10 +276,10 @@ iptables_init() {
 		iptables -A OUTPUT -o "${BLUE_DEV}" -j DHCPBLUEOUTPUT
 	fi
 
-	# GeoIP block
-	iptables -N GEOIPBLOCK
-	iptables -A INPUT -j GEOIPBLOCK
-	iptables -A FORWARD -j GEOIPBLOCK
+	# Location Block
+	iptables -N LOCATIONBLOCK
+	iptables -A INPUT -j LOCATIONBLOCK
+	iptables -A FORWARD -j LOCATIONBLOCK
 
 	# trafic from ipsecX/TUN/TAP interfaces, before "-i GREEN_DEV" accept everything
 	iptables -N IPSECINPUT
diff --git a/src/patches/geoip_1_25_change_database_path.patch b/src/patches/geoip_1_25_change_database_path.patch
deleted file mode 100644
index 933e93d28..000000000
--- a/src/patches/geoip_1_25_change_database_path.patch
+++ /dev/null
@@ -1,139 +0,0 @@
---- lib/Geo/IP/PurePerl.pm	Tue Mar 30 15:41:34 2010
-+++ lib/Geo/IP/PurePerl.pm	Mon Jan 09 18:58:11 2017
-@@ -129,7 +129,7 @@
- 
- 
- # --- unfortunately we do not know the path so we assume the 
--# default path /usr/local/share/GeoIP
-+# default path /usr/share/GeoIP
- # if thats not true, you can set $Geo::IP::PurePerl::OPEN_TYPE_PATH
- #
- sub open_type {
-@@ -210,7 +210,7 @@
-   # this will be less messy once deprecated new( $path, [$flags] )
-   # is no longer supported (that's what open() is for)
- 
--  my $def_db_file = '/usr/local/share/GeoIP/GeoIP.dat';
-+  my $def_db_file = '/usr/share/GeoIP/GeoIP.dat';
-     if ($^O eq 'NetWare') {
-     $def_db_file = 'sys:/etc/GeoIP/GeoIP.dat';
-   } elsif ($^O eq 'MSWin32') {
-@@ -758,7 +758,7 @@
- =item $gi = Geo::IP->new( [$flags] );
- 
- Constructs a new Geo::IP object with the default database located inside your system's
--I<datadir>, typically I</usr/local/share/GeoIP/GeoIP.dat>.
-+I<datadir>, typically I</usr/share/GeoIP/GeoIP.dat>.
- 
- Flags can be set to either GEOIP_STANDARD, or for faster performance
- (at a cost of using more memory), GEOIP_MEMORY_CACHE.
---- t/1_lookup.t	Tue Mar 30 15:13:37 2010
-+++ t/1_lookup.t	Mon Jan 09 18:58:13 2017
-@@ -2,7 +2,7 @@
- use vars qw($dat);
- 
- BEGIN {
--  foreach my $file ("GeoIP.dat",'/usr/local/share/GeoIP/GeoIP.dat') {
-+  foreach my $file ("GeoIP.dat",'/usr/share/GeoIP/GeoIP.dat') {
-     if (-f $file) {
-       $dat = $file;
-       last;
---- t/2_namelookup.t	Tue Mar 30 15:21:37 2010
-+++ t/2_namelookup.t	Mon Jan 09 18:58:21 2017
-@@ -2,7 +2,7 @@
- use vars qw($dat);
- 
- BEGIN {
--  foreach my $file ("GeoIP.dat",'/usr/local/share/GeoIP/GeoIP.dat') {
-+  foreach my $file ("GeoIP.dat",'/usr/share/GeoIP/GeoIP.dat') {
-     if (-f $file) {
-       $dat = $file;
-       last;
---- Changes	Tue Mar 30 15:26:38 2010
-+++ Changes	Mon Jan 09 18:57:37 2017
-@@ -35,7 +35,7 @@
- 	Country, City and Org requests benefit from GEOIP_MEMORY_CACHE and GEOIP_MMAP_CACHE
- 	Add GEOIP_MMAP_CACHE support ( Peter Shipley ) 
- 	Now works with new format of GeoIP ISP
--	Corrected path to /usr/local/share/GeoIP/GeoIP.dat in geoip-lookup program.
-+	Corrected path to /usr/share/GeoIP/GeoIP.dat in geoip-lookup program.
- 
- 1.18  January 8th 2007
- 	Replaced CS/Serbia and Montenegro with RS/Serbia, removed ZR/Zaire, added ME/Montenegro
---- geoip-lookup	Tue Mar 30 15:13:36 2010
-+++ geoip-lookup	Mon Jan 09 18:57:44 2017
-@@ -15,7 +15,7 @@
- 
- The I<geoip-lookup> program will return the country for the IP address or
- hostname given as the first command line argument.
--It queries the GeoIP Country database in C</usr/local/share/GeoIP/GeoIP.dat>.
-+It queries the GeoIP Country database in C</usr/share/GeoIP/GeoIP.dat>.
- 
- By default it prints the ISO 3166 country code.  Use the C<-l> option
- to print the country name.
---- geoip-lookup-city	Tue Mar 30 15:13:36 2010
-+++ geoip-lookup-city	Mon Jan 09 18:57:48 2017
-@@ -6,7 +6,7 @@
- 
- my $addr = shift;
- 
--my $gi = Geo::IP::PurePerl->new( "/usr/local/share/GeoIP/GeoIPCity.dat",
-+my $gi = Geo::IP::PurePerl->new( "/usr/share/GeoIP/GeoIPCity.dat",
-                                  GEOIP_STANDARD );
- 
- if ($addr) {
---- geoip-lookup-isp	Tue Mar 30 15:13:36 2010
-+++ geoip-lookup-isp	Mon Jan 09 18:57:50 2017
-@@ -7,7 +7,7 @@
- 
- my $addr = shift;
- 
--my $gi = Geo::IP::PurePerl->new("/usr/local/share/GeoIP/GeoIPISP.dat",GEOIP_STANDARD);
-+my $gi = Geo::IP::PurePerl->new("/usr/share/GeoIP/GeoIPISP.dat",GEOIP_STANDARD);
- 
- my $isp = $gi->org_by_name($addr);
- 
---- geoip-lookup-netspeed	Tue Mar 30 15:13:36 2010
-+++ geoip-lookup-netspeed	Mon Jan 09 18:57:53 2017
-@@ -6,7 +6,7 @@
- 
- my $addr = $ARGV[0];
- 
--my $gi = Geo::IP::PurePerl->new("/usr/local/share/GeoIP/GeoIPNetSpeed.dat",GEOIP_STANDARD);
-+my $gi = Geo::IP::PurePerl->new("/usr/share/GeoIP/GeoIPNetSpeed.dat",GEOIP_STANDARD);
- 
- my $netspeed = $gi->id_by_addr($addr);
- 
---- geoip-lookup-org	Tue Mar 30 15:13:36 2010
-+++ geoip-lookup-org	Mon Jan 09 18:57:59 2017
-@@ -7,7 +7,7 @@
- 
- my $addr = shift;
- 
--my $gi = Geo::IP::PurePerl->new("/usr/local/share/GeoIP/GeoIPOrg.dat",GEOIP_STANDARD);
-+my $gi = Geo::IP::PurePerl->new("/usr/share/GeoIP/GeoIPOrg.dat",GEOIP_STANDARD);
- 
- my $org = $gi->org_by_name($addr);
- 
---- geoip-lookup-region	Tue Mar 30 15:13:36 2010
-+++ geoip-lookup-region	Mon Jan 09 18:58:01 2017
-@@ -10,7 +10,7 @@
- 
- my $addr = $ARGV[0];
- 
--my $gi = Geo::IP::PurePerl->new("/usr/local/share/GeoIP/GeoIPRegion.dat",GEOIP_STANDARD);
-+my $gi = Geo::IP::PurePerl->new("/usr/share/GeoIP/GeoIPRegion.dat",GEOIP_STANDARD);
- 
- my ($country,$region) = $gi->region_by_name($addr);
- 
---- INSTALL	Tue Mar 30 15:13:36 2010
-+++ INSTALL	Mon Jan 09 18:58:05 2017
-@@ -3,7 +3,7 @@
- # fetch latest GeoIP database, updated monthly
- wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
- gunzip GeoIP.dat.gz
--mv GeoIP.dat /usr/local/share/GeoIP/GeoIP.dat
-+mv GeoIP.dat /usr/share/GeoIP/GeoIP.dat
- 
- perl Makefile.PL
- make
diff --git a/src/patches/libloc-0.9.3-country-terminate-buffer-when-reading-from-database.patch b/src/patches/libloc-0.9.3-country-terminate-buffer-when-reading-from-database.patch
new file mode 100644
index 000000000..0ad9229fd
--- /dev/null
+++ b/src/patches/libloc-0.9.3-country-terminate-buffer-when-reading-from-database.patch
@@ -0,0 +1,24 @@
+commit 61d3516bbfce6b4e6393825329c07b1e2a88d47d
+Author: Michael Tremer <michael.tremer(a)ipfire.org>
+Date:   Mon Jul 13 10:47:30 2020 +0000
+
+    country: Terminate buffer when reading from database
+    
+    Compilers on ARM do not seem to initialise the buffer.
+    
+    Signed-off-by: Michael Tremer <michael.tremer(a)ipfire.org>
+
+diff --git a/src/country.c b/src/country.c
+index d6ddf50..2ba93e6 100644
+--- a/src/country.c
++++ b/src/country.c
+@@ -125,6 +125,9 @@ int loc_country_new_from_database_v1(struct loc_ctx* ctx, struct loc_stringpool*
+ 	// Read country code
+ 	loc_country_code_copy(buffer, dbobj->code);
+ 
++	// Terminate buffer
++	buffer[2] = '\0';
++
+ 	// Create a new country object
+ 	int r = loc_country_new(ctx, country, buffer);
+ 	if (r)
diff --git a/src/patches/libloc-0.9.3-location-provide-return-code.patch b/src/patches/libloc-0.9.3-location-provide-return-code.patch
new file mode 100644
index 000000000..2382145c3
--- /dev/null
+++ b/src/patches/libloc-0.9.3-location-provide-return-code.patch
@@ -0,0 +1,22 @@
+commit 1be0681cc4bcc006369e69d90dc4439eaa6f58d5
+Author: Stefan Schantl <stefan.schantl(a)ipfire.org>
+Date:   Wed Jul 29 18:50:20 2020 +0200
+
+    location: Provide a return code if the database does not need to be
+    updated.
+    
+    Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>
+
+diff --git a/src/python/location.in b/src/python/location.in
+index 5211b28..8cdd140 100644
+--- a/src/python/location.in
++++ b/src/python/location.in
+@@ -416,7 +416,7 @@ class CLI(object):
+ 					_("The datase has recently be updated recently (%s)") % \
+ 						format_timedelta(now - t),
+ 				)
+-				return
++				return 3
+ 
+ 		# Fetch the timestamp we need from DNS
+ 		t = location.discover_latest_version()
diff --git a/src/patches/libloc-0.9.3-perl-regular-stack-protector.patch b/src/patches/libloc-0.9.3-perl-regular-stack-protector.patch
new file mode 100644
index 000000000..2ee807a50
--- /dev/null
+++ b/src/patches/libloc-0.9.3-perl-regular-stack-protector.patch
@@ -0,0 +1,12 @@
+diff --git a/src/perl/Makefile.PL b/src/perl/Makefile.PL
+index 38d5390..62016ca 100644
+--- a/src/perl/Makefile.PL
++++ b/src/perl/Makefile.PL
+@@ -11,6 +11,7 @@ WriteMakefile(
+     LIBS              => ['-lloc'],
+     DEFINE            => '', # e.g., '-DHAVE_SOMETHING'
+     INC               => '-I. -I../../',
++    CCFLAGS           => '-fstack-protector',
+ 	# Un-comment this if you add C files to link with later:
+     # OBJECT            => '$(O_FILES)', # link all the C files too
+ );
diff --git a/src/patches/xtables-addons-3.2-fix-database-generation.patch b/src/patches/xtables-addons-3.2-fix-database-generation.patch
deleted file mode 100644
index 5574e200d..000000000
--- a/src/patches/xtables-addons-3.2-fix-database-generation.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-diff --git a/geoip/xt_geoip_build b/geoip/xt_geoip_build
-index 3b15875..7bc42f3 100755
---- a/geoip/xt_geoip_build
-+++ b/geoip/xt_geoip_build
-@@ -259,7 +259,12 @@ sub writeCountry
- 		my ($start, $end) = split('-', $range);
- 		$start = inet_pton($family, $start);
- 		$end = inet_pton($family, $end);
--		print $fh $start, $end;
-+
-+		if ($family == AF_INET) {
-+			print $fh substr($start, 0, 4), substr($end, 0, 4);
-+		} else {
-+			print $fh $start, $end;
-+		}
- 	}
- 	close $fh;
- }
diff --git a/src/scripts/convert-to-location b/src/scripts/convert-to-location
new file mode 100755
index 000000000..428a91d34
--- /dev/null
+++ b/src/scripts/convert-to-location
@@ -0,0 +1,58 @@
+#!/bin/bash
+
+###############################################################################
+#                                                                             #
+# IPFire.org - A linux based firewall                                         #
+# Copyright (C) 2020 IPFire Development Team <info(a)ipfire.org>                #
+#                                                                             #
+# This program is free software: you can redistribute it and/or modify        #
+# it under the terms of the GNU General Public License as published by        #
+# the Free Software Foundation, either version 3 of the License, or           #
+# (at your option) any later version.                                         #
+#                                                                             #
+# This program is distributed in the hope that it will be useful,             #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of              #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               #
+# GNU General Public License for more details.                                #
+#                                                                             #
+# You should have received a copy of the GNU General Public License           #
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.       #
+#                                                                             #
+###############################################################################
+
+CONF_DIR="/var/ipfire"
+FW_CONF_DIR="$CONF_DIR/firewall"
+HOSTS_CONF_DIR="$CONF_DIR/fwhosts"
+
+# Check if the old blocking configuration file exists.
+if [ -f "$FW_CONF_DIR/geoipblock" ]; then
+	# Convert variable, if blocking is enabled or not.
+	sed -i 's/GEOIPBLOCK/LOCATIONBLOCK/g' "$FW_CONF_DIR/geoipblock"
+
+	# Rename file to the new name.
+	mv "$FW_CONF_DIR/geoipblock" "$FW_CONF_DIR/locationblock"
+
+	# Loop through the firewall config directory.
+	for file in "$FW_CONF_DIR/config" "$FW_CONF_DIR/input" "$FW_CONF_DIR/outgoing"; do
+		# Convert pattern which indicates location based rules to the new
+		# ones.
+		sed -i 's/cust_geoip/cust_location/g' "$file"
+	done
+
+	# Rename indicator for location based groups to the new one.
+	sed -i 's/GeoIP Group/Location Group/g' "$HOSTS_CONF_DIR/customgeoipgrp"
+
+	# Rename file to the new name.
+	mv "$HOSTS_CONF_DIR/customgeoipgrp" "$HOSTS_CONF_DIR/customlocationgrp"
+
+	# Regenerate firewall chains.
+	/etc/init.d/firewall restart
+
+	# Restart IPsec for dropped iptables rules
+	if grep -q "ENABLED=on" /var/ipfire/vpn/settings; then
+		/etc/init.d/ipsec restart
+	fi
+fi
+
+# Finished.
+exit 0
diff --git a/src/scripts/update-location-database b/src/scripts/update-location-database
new file mode 100644
index 000000000..06b22d101
--- /dev/null
+++ b/src/scripts/update-location-database
@@ -0,0 +1,51 @@
+#!/bin/bash
+###############################################################################
+#                                                                             #
+# IPFire.org - A linux based firewall                                         #
+# Copyright (C) 2019 IPFire Development Team <info(a)ipfire.org>                #
+#                                                                             #
+# This program is free software: you can redistribute it and/or modify        #
+# it under the terms of the GNU General Public License as published by        #
+# the Free Software Foundation, either version 3 of the License, or           #
+# (at your option) any later version.                                         #
+#                                                                             #
+# This program is distributed in the hope that it will be useful,             #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of              #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               #
+# GNU General Public License for more details.                                #
+#                                                                             #
+# You should have received a copy of the GNU General Public License           #
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.       #
+#                                                                             #
+###############################################################################
+
+eval $(/usr/local/bin/readhash /var/ipfire/proxy/settings)
+
+UPDATE_INTERVAL="weekly"
+
+# Proxy settings.
+# Check if a proxy should be used.
+if [[ $UPSTREAM_PROXY ]]; then
+	PROXYSETTINGS="https_proxy=http://"
+
+	# Check if authentication against the proxy is configured.
+	if [[ $UPSTREAM_USER && $UPSTREAM_PASSWORD ]]; then
+		PROXYSETTINGS="$PROXYSETTINGS$UPSTREAM_USER:$UPSTREAM_PASSWORD@"
+	fi
+
+	# Add proxy server.
+	PROXYSETTINGS="$PROXYSETTINGS$UPSTREAM_PROXY"
+
+	# Export proxy settings.
+	export HTTPS_PROXY="$PROXYSETTINGS"
+fi
+
+# Get the latest location database from server.
+if /usr/bin/location update --cron=$UPDATE_INTERVAL; then
+	# Call location and export all countries in xt_geoip compatible format.
+	if /usr/bin/location export --directory=/usr/share/xt_geoip --family=ipv4 --format=xt_geoip; then
+
+		# Call initscript to reload the firewall.
+		/etc/init.d/firewall reload
+	fi
+fi
diff --git a/src/scripts/xt_geoip_update b/src/scripts/xt_geoip_update
deleted file mode 100644
index ebd266533..000000000
--- a/src/scripts/xt_geoip_update
+++ /dev/null
@@ -1,138 +0,0 @@
-#!/bin/bash
-###############################################################################
-#                                                                             #
-# IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2019 IPFire Development Team <info(a)ipfire.org>                #
-#                                                                             #
-# This program is free software: you can redistribute it and/or modify        #
-# it under the terms of the GNU General Public License as published by        #
-# the Free Software Foundation, either version 3 of the License, or           #
-# (at your option) any later version.                                         #
-#                                                                             #
-# This program is distributed in the hope that it will be useful,             #
-# but WITHOUT ANY WARRANTY; without even the implied warranty of              #
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               #
-# GNU General Public License for more details.                                #
-#                                                                             #
-# You should have received a copy of the GNU General Public License           #
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.       #
-#                                                                             #
-###############################################################################
-
-TMP_PATH=$(mktemp -dp /var/tmp)
-TMP_FILE=$(mktemp -p $TMP_PATH)
-
-SCRIPT_PATH=/usr/local/bin
-DEST_PATH=/usr/share/xt_geoip
-DB_PATH=/var/lib/GeoIP
-DB1_PATH=/usr/share/GeoIP
-
-DL_URL=https://geolite.maxmind.com/download/geoip/database
-DL_FILE=GeoLite2-Country-CSV.zip
-
-eval $(/usr/local/bin/readhash /var/ipfire/proxy/settings)
-
-function download() {
-	echo "Downloading latest GeoIP ruleset..."
-
-	# Proxy settings.
-	# Check if a proxy should be used.
-	if [[ $UPSTREAM_PROXY ]]; then
-		PROXYSETTINGS="-e https_proxy=http://"
-
-		# Check if authentication against the proxy is configured.
-		if [[ $UPSTREAM_USER && $UPSTREAM_PASSWORD ]]; then
-			PROXYSETTINGS="$PROXYSETTINGS$UPSTREAM_USER:$UPSTREAM_PASSWORD@"
-		fi
-
-		# Add proxy server.
-		PROXYSETTINGS="$PROXYSETTINGS$UPSTREAM_PROXY"
-	fi
-
-	# Get the latest GeoIP database from server.
-	wget $DL_URL/$DL_FILE $PROXYSETTINGS -O $TMP_FILE
-
-	# Extract files to database path.
-	unzip $TMP_FILE -d $TMP_PATH
-
-	return 0
-}
-
-function install() {
-	echo "Install CSV database..."
-
-	# Check if the database dir exists.
-	if [ ! -e "$DB_PATH" ]; then
-		mkdir -p $DB_PATH &>/dev/null
-	fi
-
-	# Check if the directory for binary databases exists.
-        if [ ! -e "$DEST_PATH" ]; then
-                mkdir -p $DEST_PATH &>/dev/null
-        fi
-
-	# Install CSV databases.
-	if ! cp -af $TMP_PATH/*/* $DB_PATH &>/dev/null; then
-		echo "Could not copy files. Aborting." >&2
-		return 1
-	fi
-
-	return 0
-}
-
-function build_legacy() {
-	echo "Convert database to legacy GeoIP.dat ..."
-	cat $DB_PATH/GeoLite2-Country-Blocks-IPv4.csv | \
-	    $DB1_PATH/bin/geolite2-to-legacy-csv.sh $DB1_PATH/bin/countryInfo.txt > \
-	    $TMP_FILE
-	$DB1_PATH/bin/geoip-generator -v -4 --info="$(date -u +'GEO-106FREE %Y%m%d Build -IPFire-' \
-	    -r $DB_PATH/GeoLite2-Country-Blocks-IPv4.csv) $(<$DB_PATH/COPYRIGHT.txt)" -o \
-	    $DB1_PATH/GeoIP.dat $TMP_FILE
-
-	return 0
-}
-
-
-function build() {
-	echo "Convert database..."
-
-	# Run script to convert the CSV file into several xtables
-	# compatible binary files.
-	if ! $SCRIPT_PATH/xt_geoip_build -S $DB_PATH -D $DEST_PATH; then
-		echo "Could not convert ruleset. Aborting." >&2
-		return 1
-	fi
-
-	return 0
-}
-
-function cleanup() {
-	echo "Cleaning up temporary files..."
-	if ! rm -rf $TMP_PATH &>/dev/null; then
-		echo "Could not remove files. Aborting." >&2
-		return 1
-	fi
-
-	return 0
-}
-
-function main() {
-	local func
-	for func in download install build build_legacy; do
-		if ! ${func}; then
-			# Cleanup any temporary data
-			cleanup
-
-			return 1
-		fi
-	done
-
-	# Cleanup
-	cleanup || return $?
-
-	# All done
-	return 0
-}
-
-# Run the main function.
-main || exit $?


hooks/post-receive
--
IPFire 2.x development tree

                 reply	other threads:[~2020-07-30  8:14 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4BHNVm5ylQz2xBd@people01.haj.ipfire.org \
    --to=git@ipfire.org \
    --cc=ipfire-scm@lists.ipfire.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox