public inbox for ipfire-scm@lists.ipfire.org
 help / color / mirror / Atom feed
* [git.ipfire.org] IPFire 2.x development tree branch, next, updated. 10056cb0676af79f3f41c089f1563217404e7d25
@ 2025-04-22 14:21 Michael Tremer
  0 siblings, 0 replies; only message in thread
From: Michael Tremer @ 2025-04-22 14:21 UTC (permalink / raw)
  To: ipfire-scm

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, next has been updated
       via  10056cb0676af79f3f41c089f1563217404e7d25 (commit)
       via  816536708dfcd49620af1a4214a6b36a584fa23d (commit)
       via  05180c24eb4b2840fec9c28bc75753df71046820 (commit)
       via  bed0fd7c6cfabf444a181e0ab8183e05da8fe2f3 (commit)
       via  e8a2aa081322e331acf5c992216d5c1377bd330f (commit)
       via  2d386ad141c91e1357f064734284f562fb187bfe (commit)
       via  4363f099aaf0791fef35a568c6424f6128f78612 (commit)
       via  9a656d2e780e4220d860bf46d2135496ca8c80a1 (commit)
       via  70af1cf96b5f424482a66a032b4d08825d939785 (commit)
       via  5ad67364213cb37179a4973d2c3d8492be0b6ec8 (commit)
       via  ac2c3ebef352120999b05a36146e1c7d0da0728f (commit)
       via  15fa1dbe972d8e40237c2e10303f2d10cbe15da7 (commit)
       via  e8bea08c8e6cdbaa21cf8a3841c952e50ebefd37 (commit)
       via  1471c42734dcaeef8b08de6ac7bb8aa9e767c3dc (commit)
       via  305158c82c5c6f77621d3d25dc476598dd4eaa85 (commit)
       via  76da4bd66c8da9a203a21e607c88a0874e9c3a27 (commit)
       via  610ed2f195d1447f8f56b9796d916edf2800661f (commit)
       via  264b564c9cf78116b21236472fed08aacfd2b8d1 (commit)
       via  a5c82e0839b5e5f354b972c6c002f81a4f3ebad0 (commit)
       via  678fa86af6129b960b6efe419a21a24507c6d993 (commit)
       via  8460bc1ed8f6c22bea62c827383b4aa30d4a5da3 (commit)
       via  057f84be8f06cc2b578b2f8a32751cf09d4dcdcf (commit)
       via  5426ee1d309a5d0f9c2ca9d36b9b1d4fae8ed009 (commit)
       via  7affb9a237f09a9c292a7d03f5410a2d610bc0af (commit)
       via  e3f17ee6b31e198f5c639d545b10f17bfade289a (commit)
       via  3f99c91f354a6a433472c714c9e1a854a4d4d8ab (commit)
      from  39c5140fc2ed177b3133344ff9b4e174dd672d70 (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 10056cb0676af79f3f41c089f1563217404e7d25
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Tue Apr 22 14:20:38 2025 +0000

    core195: Ship pakfire.cgi
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 816536708dfcd49620af1a4214a6b36a584fa23d
Author: Stephen Cuka <stephen@firemypi.org>
Date:   Fri Apr 18 15:28:33 2025 -0600

    pakfire.cgi: Change titles on confirmation pages.
    
    - Change confirmation page titles from 'Request' to 'Install' and 'Remove'.
    
    Signed-off-by: Stephen Cuka <stephen@firemypi.org>
    Reviewed-by: Michael Tremer <michael.tremer@ipfire.org>
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 05180c24eb4b2840fec9c28bc75753df71046820
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Tue Apr 22 14:19:09 2025 +0000

    HTTP Client: Change checkip URL to ipfire.org
    
    This is the same service, but I think it makes more sense to use the
    ipfire.org domain.
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit bed0fd7c6cfabf444a181e0ab8183e05da8fe2f3
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Tue Apr 22 14:18:10 2025 +0000

    core195: Ship downloader changes
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit e8a2aa081322e331acf5c992216d5c1377bd330f
Author: Stefan Schantl <stefan.schantl@ipfire.org>
Date:   Fri Apr 18 12:54:46 2025 +0200

    http-client-functions.pl: Allow to user define the timeout value.
    
    This allows to specify the the timeout value.
    Defaults to to 60 seconds if not set.
    
    Signed-off-by: Stefan Schantl <stefan.schantl@ipfire.org>
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 2d386ad141c91e1357f064734284f562fb187bfe
Author: Stefan Schantl <stefan.schantl@ipfire.org>
Date:   Fri Apr 18 12:54:45 2025 +0200

    ids-functions.pl: Use new downloader function from http-client-functions.pl
    
    Signed-off-by: Stefan Schantl <stefan.schantl@ipfire.org>
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 4363f099aaf0791fef35a568c6424f6128f78612
Author: Stefan Schantl <stefan.schantl@ipfire.org>
Date:   Fri Apr 18 12:54:44 2025 +0200

    ddns.cgi, wio.cgi: Use GetDyndnsRedIP from http-client-functions.pl file
    
    Signed-off-by: Stefan Schantl <stefan.schantl@ipfire.org>
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 9a656d2e780e4220d860bf46d2135496ca8c80a1
Author: Stefan Schantl <stefan.schantl@ipfire.org>
Date:   Fri Apr 18 12:54:43 2025 +0200

    Move GetDyndnsRedIP from general-functions.pl to http-client-functions.pl
    
    This function depends on the previously FetchPublicIp function
    and so also has to be moved.
    
    Signed-off-by: Stefan Schantl <stefan.schantl@ipfire.org>
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 70af1cf96b5f424482a66a032b4d08825d939785
Author: Stefan Schantl <stefan.schantl@ipfire.org>
Date:   Fri Apr 18 12:54:42 2025 +0200

    general-functions.pl: Drop FetchPublicIp function.
    
    This function has been reworked and moved into the
    http-client-functions library.
    
    Signed-off-by: Stefan Schantl <stefan.schantl@ipfire.org>
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 5ad67364213cb37179a4973d2c3d8492be0b6ec8
Author: Stefan Schantl <stefan.schantl@ipfire.org>
Date:   Fri Apr 18 12:54:41 2025 +0200

    http-client-functions.pl: Add FetchPublicIP function.
    
    This functions uses the newly introduced downloader to fetch
    the pulic IPv4 address on red and will replace the current used one
    from the general-functions.pl library.
    
    Signed-off-by: Stefan Schantl <stefan.schantl@ipfire.org>
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit ac2c3ebef352120999b05a36146e1c7d0da0728f
Author: Stefan Schantl <stefan.schantl@ipfire.org>
Date:   Fri Apr 18 12:54:40 2025 +0200

    http-client-functions.pl: Introduce LWP-based flexible downloader function.
    
    This perl library contains a function which can be used to grab content
    and/or store it into files.
    
    Signed-off-by: Stefan Schantl <stefan.schantl@ipfire.org>
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 15fa1dbe972d8e40237c2e10303f2d10cbe15da7
Author: Matthias Fischer <matthias.fischer@ipfire.org>
Date:   Fri Apr 11 15:07:36 2025 +0200

    htop: Update to 3.4.1
    
    For details see:
    https://github.com/htop-dev/htop/blob/main/ChangeLog
    
    "What's new in version 3.4.1
    
    * Support for PMAPI v3 for PCP
    * PCP code cleanups
    * Proper checks for strchrnul
    * Code cleanup in the NetworkIOMeter
    * Improved documentation for the --user option
    * Display stuck processes on Darwin
    * Handle issues when the monotonic clock runs backwards
    * Fix builds using native curses on NetBSD"
    
    Signed-off-by: Matthias Fischer <matthias.fischer@ipfire.org>
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit e8bea08c8e6cdbaa21cf8a3841c952e50ebefd37
Author: Matthias Fischer <matthias.fischer@ipfire.org>
Date:   Fri Apr 11 15:03:41 2025 +0200

    monit: Update to 5.35.0
    
    Changelog is rather long this time - for details see:
    https://mmonit.com/monit/changes/
    
    Signed-off-by: Matthias Fischer <matthias.fischer@ipfire.org>
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 1471c42734dcaeef8b08de6ac7bb8aa9e767c3dc
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Tue Apr 22 14:10:22 2025 +0000

    core195: Ship smartmontools
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 305158c82c5c6f77621d3d25dc476598dd4eaa85
Author: Adolf Belka <adolf.belka@ipfire.org>
Date:   Mon Apr 7 14:53:40 2025 +0200

    smartmontools: Add update of drive database
    
    - Existing install uses database provide with source tarball. The database is also
       updated on a periodic basis which can vary between a few weeks up to 6 months or so.
    - The last release was back in Aug 2023 so the database all users will have is quite old.
    - This patch adds a script into the monthly fcron directory that will run the
       update-smart-drivedb script from the smartmontools installation. This script downloads
       the database file via https and also checks the signature of the file to ensure that
       it has not been changed in any way. The script is run with  the -q (quiet) option.
       The script checks if the downloaded database is corrupted ands will not install it if
       it is corrupted. It checks if the database has changed since the last version
       installed on the system. If not changed it does not replace the file.
    - Tested this out with my production IPFire system and I ended up with the latest
       database from 3 weeks ago.
    
    Signed-off-by: Adolf Belka <adolf.belka@ipfire.org>
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 76da4bd66c8da9a203a21e607c88a0874e9c3a27
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Tue Apr 22 14:09:03 2025 +0000

    Start Core Update 195
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

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

Summary of changes:
 config/cfgroot/general-functions.pl                |  46 ---
 config/cfgroot/graphs.pl                           |   4 +-
 config/cfgroot/http-client-functions.pl            | 345 +++++++++++++++++++++
 config/cfgroot/ids-functions.pl                    | 206 ++----------
 config/rootfiles/common/bind                       |  10 +-
 config/rootfiles/common/configroot                 |   1 +
 config/rootfiles/common/libarchive                 |   2 +-
 config/rootfiles/common/smartmontools              |   1 +
 config/rootfiles/common/xz                         |   2 +-
 config/rootfiles/core/{194 => 195}/exclude         |   0
 .../core/{194 => 195}/filelists/core-files         |   0
 config/rootfiles/core/195/filelists/files          |   5 +
 .../106 => core/195}/filelists/smartmontools       |   0
 .../rootfiles/{oldcore/152 => core/195}/update.sh  |  10 +-
 config/rootfiles/{core => oldcore}/194/exclude     |   0
 .../{core => oldcore}/194/filelists/aarch64/linux  |   0
 .../194/filelists/aarch64/util-linux               |   0
 .../{core => oldcore}/194/filelists/abseil-cpp     |   0
 .../{core => oldcore}/194/filelists/apache2        |   0
 .../rootfiles/{core => oldcore}/194/filelists/bind |   0
 .../194/filelists/ca-certificates                  |   0
 .../{core => oldcore}/194/filelists/cairo          |   0
 .../{core => oldcore}/194/filelists/collectd       |   0
 .../{core => oldcore}/194/filelists/core-files     |   0
 .../{core => oldcore}/194/filelists/coreutils      |   0
 .../{core => oldcore}/194/filelists/expat          |   0
 .../{core => oldcore}/194/filelists/files          |   2 +
 .../rootfiles/{core => oldcore}/194/filelists/gdbm |   0
 .../{core => oldcore}/194/filelists/gettext        |   0
 .../{core => oldcore}/194/filelists/harfbuzz       |   0
 .../{core => oldcore}/194/filelists/hwdata         |   0
 .../{core => oldcore}/194/filelists/iana-etc       |   0
 .../{core => oldcore}/194/filelists/iproute2       |   0
 .../{core => oldcore}/194/filelists/jansson        |   0
 .../rootfiles/{core => oldcore}/194/filelists/kmod |   0
 .../oldcore/{104 => 194}/filelists/libarchive      |   0
 .../{core => oldcore}/194/filelists/libcap         |   0
 .../{core => oldcore}/194/filelists/libedit        |   0
 .../{core => oldcore}/194/filelists/libhtp         |   0
 .../{core => oldcore}/194/filelists/liburcu        |   0
 .../{core => oldcore}/194/filelists/libusb         |   0
 .../{core => oldcore}/194/filelists/libxml2        |   0
 .../{core => oldcore}/194/filelists/libxslt        |   0
 .../rootfiles/{core => oldcore}/194/filelists/lvm2 |   0
 .../rootfiles/{core => oldcore}/194/filelists/mpfr |   0
 .../{core => oldcore}/194/filelists/pango          |   0
 .../{core => oldcore}/194/filelists/procps         |   0
 .../{core => oldcore}/194/filelists/riscv64/linux  |   0
 .../194/filelists/riscv64/util-linux               |   0
 .../{core => oldcore}/194/filelists/rrdtool        |   0
 .../{core => oldcore}/194/filelists/shadow         |   0
 .../{core => oldcore}/194/filelists/strongswan     |   0
 .../{core => oldcore}/194/filelists/suricata       |   0
 .../{core => oldcore}/194/filelists/tzdata         |   0
 .../{core => oldcore}/194/filelists/x86_64/linux   |   0
 .../194/filelists/x86_64/util-linux                |   0
 .../rootfiles/{core => oldcore}/194/filelists/xz   |   0
 config/rootfiles/{core => oldcore}/194/update.sh   |   0
 config/smartmontools/fcron.monthly                 |   5 +
 doc/language_issues.de                             |   1 +
 doc/language_issues.en                             |   1 -
 doc/language_issues.es                             |   1 +
 doc/language_issues.fr                             |   1 +
 doc/language_issues.it                             |   1 +
 doc/language_issues.nl                             |   1 +
 doc/language_issues.pl                             |   1 +
 doc/language_issues.ru                             |   1 +
 doc/language_issues.tr                             |   1 +
 html/cgi-bin/ddns.cgi                              |   3 +-
 html/cgi-bin/netovpnrw.cgi                         |   2 +-
 html/cgi-bin/pakfire.cgi                           |   6 +-
 html/cgi-bin/wio.cgi                               |   3 +-
 lfs/bind                                           |   4 +-
 lfs/configroot                                     |   1 +
 lfs/htop                                           |   6 +-
 lfs/libarchive                                     |   6 +-
 lfs/monit                                          |   6 +-
 lfs/smartmontools                                  |   7 +-
 lfs/wio                                            |   2 +-
 lfs/xz                                             |   4 +-
 make.sh                                            |   2 +-
 81 files changed, 428 insertions(+), 272 deletions(-)
 create mode 100644 config/cfgroot/http-client-functions.pl
 copy config/rootfiles/core/{194 => 195}/exclude (100%)
 copy config/rootfiles/core/{194 => 195}/filelists/core-files (100%)
 create mode 100644 config/rootfiles/core/195/filelists/files
 copy config/rootfiles/{oldcore/106 => core/195}/filelists/smartmontools (100%)
 copy config/rootfiles/{oldcore/152 => core/195}/update.sh (94%)
 rename config/rootfiles/{core => oldcore}/194/exclude (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/aarch64/linux (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/aarch64/util-linux (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/abseil-cpp (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/apache2 (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/bind (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/ca-certificates (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/cairo (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/collectd (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/core-files (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/coreutils (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/expat (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/files (80%)
 rename config/rootfiles/{core => oldcore}/194/filelists/gdbm (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/gettext (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/harfbuzz (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/hwdata (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/iana-etc (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/iproute2 (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/jansson (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/kmod (100%)
 copy config/rootfiles/oldcore/{104 => 194}/filelists/libarchive (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/libcap (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/libedit (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/libhtp (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/liburcu (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/libusb (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/libxml2 (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/libxslt (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/lvm2 (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/mpfr (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/pango (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/procps (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/riscv64/linux (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/riscv64/util-linux (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/rrdtool (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/shadow (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/strongswan (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/suricata (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/tzdata (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/x86_64/linux (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/x86_64/util-linux (100%)
 rename config/rootfiles/{core => oldcore}/194/filelists/xz (100%)
 rename config/rootfiles/{core => oldcore}/194/update.sh (100%)
 create mode 100644 config/smartmontools/fcron.monthly

Difference in files:
diff --git a/config/cfgroot/general-functions.pl b/config/cfgroot/general-functions.pl
index 8ba6e3f79f..bbd0f9839f 100644
--- a/config/cfgroot/general-functions.pl
+++ b/config/cfgroot/general-functions.pl
@@ -17,7 +17,6 @@ package General;
 use strict;
 use Socket;
 use IO::Socket;
-use Net::SSLeay;
 use Net::IPv4Addr qw(:all);
 
 $General::version = 'VERSION';
@@ -961,26 +960,6 @@ sub findhasharraykey {
     }
 }
 
-sub FetchPublicIp {
-    my %proxysettings;
-    &General::readhash("${General::swroot}/proxy/settings", \%proxysettings);
-    if ($_=$proxysettings{'UPSTREAM_PROXY'}) {
-        my ($peer, $peerport) = (/^(?:[a-zA-Z ]+\:\/\/)?(?:[A-Za-z0-9\_\.\-]*?(?:\:[A-Za-z0-9\_\.\-]*?)?\@)?([a-zA-Z0-9\.\_\-]*?)(?:\:([0-9]{1,5}))?(?:\/.*?)?$/);
-        Net::SSLeay::set_proxy($peer,$peerport,$proxysettings{'UPSTREAM_USER'},$proxysettings{'UPSTREAM_PASSWORD'} );
-    }
-    my $user_agent = &MakeUserAgent();
-    my ($out, $response) = Net::SSLeay::get_http(  'checkip4.dns.lightningwirelabs.com',
-                				    80,
-        					    "/",
-						    Net::SSLeay::make_headers('User-Agent' => $user_agent )
-						);
-    if ($response =~ m%HTTP/1\.. 200 OK%) {
-	$out =~ /Your IP address is: (\d+.\d+.\d+.\d+)/;
-	return $1;
-    }
-    return '';
-}
-
 #
 # Check if hostname.domain provided have IP provided
 # use gethostbyname to verify that
@@ -1019,31 +998,6 @@ sub DyndnsServiceSync ($;$;$) {
     }
     return 0;
 }
-#
-# This sub returns the red IP used to compare in DyndnsServiceSync
-#
-sub GetDyndnsRedIP {
-    my %settings;
-    &General::readhash("${General::swroot}/ddns/settings", \%settings);
-
-    open(IP, "${General::swroot}/red/local-ipaddress") or return 'unavailable';
-    my $ip = <IP>;
-    close(IP);
-    chomp $ip;
-
-    # 100.64.0.0/10 is reserved for dual-stack lite (http://tools.ietf.org/html/rfc6598).
-    if (&General::IpInSubnet ($ip,'10.0.0.0','255.0.0.0') ||
-        &General::IpInSubnet ($ip,'172.16.0.0.','255.240.0.0') ||
-        &General::IpInSubnet ($ip,'192.168.0.0','255.255.0.0') ||
-        &General::IpInSubnet ($ip,'100.64.0.0', '255.192.0.0'))
-    {
-	if ($settings{'BEHINDROUTER'} eq 'FETCH_IP') {
-    	    my $RealIP = &General::FetchPublicIp;
-	    $ip = (&General::validip ($RealIP) ?  $RealIP : 'unavailable');
-	}
-    }
-    return $ip;
-}
 
 # Translate ICMP code to text
 # ref: http://www.iana.org/assignments/icmp-parameters
diff --git a/config/cfgroot/graphs.pl b/config/cfgroot/graphs.pl
index aba1ef0ef6..8308d24434 100644
--- a/config/cfgroot/graphs.pl
+++ b/config/cfgroot/graphs.pl
@@ -493,8 +493,8 @@ sub updatevpngraph {
 		"--color=SHADEA".$color{"color19"},
 		"--color=SHADEB".$color{"color19"},
 		"--color=BACK".$color{"color21"},
-		"DEF:incoming=".$mainsettings{'RRDLOG'}."/collectd/localhost/openvpn-$interface/if_octets_derive.rrd:rx:AVERAGE",
-		"DEF:outgoing=".$mainsettings{'RRDLOG'}."/collectd/localhost/openvpn-$interface/if_octets_derive.rrd:tx:AVERAGE",
+		"DEF:incoming=".$mainsettings{'RRDLOG'}."/collectd/localhost/openvpn-$interface/if_octets.rrd:rx:AVERAGE",
+		"DEF:outgoing=".$mainsettings{'RRDLOG'}."/collectd/localhost/openvpn-$interface/if_octets.rrd:tx:AVERAGE",
 		"CDEF:outgoingn=outgoing,-1,*",
 		"COMMENT:".sprintf("%-20s",$Lang::tr{'caption'}),
 		"COMMENT:".sprintf("%15s",$Lang::tr{'maximal'}),
diff --git a/config/cfgroot/http-client-functions.pl b/config/cfgroot/http-client-functions.pl
new file mode 100644
index 0000000000..51687ffdeb
--- /dev/null
+++ b/config/cfgroot/http-client-functions.pl
@@ -0,0 +1,345 @@
+#!/usr/bin/perl -w
+############################################################################
+#                                                                          #
+# 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 2 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) 2025 IPFire Team <info@ipfire.org>                         #
+#                                                                          #
+############################################################################
+
+package HTTPClient;
+
+require '/var/ipfire/general-functions.pl';
+
+use strict;
+
+# Load module to move files.
+use File::Copy;
+
+# Load module to get file stats.
+use File::stat;
+
+# Load module to deal with temporary files.
+use File::Temp;
+
+# Load module to deal with the date formats used by the HTTP protocol.
+use HTTP::Date;
+
+# Load the libwwwperl User Agent module.
+use LWP::UserAgent;
+
+# Function to grab a given URL content or to download and store it on disk.
+#
+# The function requires a configuration hash to be passed.
+#
+# The following options (hash keys) are supported:
+#
+# URL -> The URL to the content or file. REQUIRED!
+# FILE -> The filename as fullpath where the content/file should be stored on disk.
+# ETAGSFILE -> A filename again as fullpath where Etags should be stored and read.
+# ETAGPREFIX -> In case a custom etag name should be used, otherwise it defaults to the given URL.
+# MAXSIZE -> In bytes until the downloader will abort downloading. (example: 10_485_760 for 10MB)
+#
+# If a file is given an If-Modified-Since header will be generated from the last modified timestamp
+# of an already stored file. In case an Etag file is specified an If-None-Match header will be added to
+# the request - Both can be used at the same time.
+#
+# In case no FILE option has been passed to the function, the content of the requested URL will be returned.
+#
+# Return codes (if FILE is used):
+#
+# nothing - On success
+# no url - If no URL has been specified.
+# not_modified - In case the servers responds with "Not modified" (304)
+# dl_error - If the requested URL cannot be accessed.
+# incomplete download - In case the size of the local file does not match the remote content_lenght.
+#
+sub downloader (%) {
+	my (%args) = @_;
+
+	# Remap args hash and convert all keys into upper case format.
+	%args = map { uc $_ => $args{$_} } keys %args;
+
+	# The amount of download attempts before giving up and
+	# logging an error.
+	my $max_dl_attempts = 3;
+
+	# Temporary directory to download the files.
+	my $tmp_dl_directory = "/var/tmp";
+
+	# Assign hash values.
+	my $url = $args{"URL"} if (exists($args{"URL"}));
+	my $file = $args{"FILE"} if (exists($args{"FILE"}));
+	my $etags_file = $args{"ETAGSFILE"} if (exists($args{"ETAGSFILE"}));
+	my $etagprefix = $url;
+	$etagprefix = $args{"ETAGPREFIX"} if (exists($args{"ETAGPREFIX"}));
+	my $max_size = $args{"MAXSIZE"} if (exists($args{"MAXSIZE"}));
+
+	# Timeout defaults to 60 Seconds if not set.
+	my $timeout = 60;
+	$timeout = $args{"TIMEOUT"} if (exists($args{"TIMEOUT"}));
+
+	# Abort with error "no url", if no URL has been given.
+	die "downloader: No URL has been given." unless ($url);
+
+	my %etags = ();
+	my $tmpfile;
+
+	# Read-in proxysettings.
+	my %proxysettings=();
+	&General::readhash("${General::swroot}/proxy/settings", \%proxysettings);
+
+	# Create a user agent instance.
+	#
+	# Request SSL hostname verification and specify path
+	# to the CA file.
+	my $ua = LWP::UserAgent->new(
+		ssl_opts => {
+			SSL_ca_file     => '/etc/ssl/cert.pem',
+			verify_hostname => 1,
+		},
+	);
+
+	# Set the timeout to the configured value.
+	# Defaults to 60 seconds if not set.
+	$ua->timeout($timeout);
+
+	# Assign maximum download size if set.
+	$ua->max_size($max_size) if ($max_size);
+
+	# Generate UserAgent.
+	my $agent = &General::MakeUserAgent();
+
+	# Set the generated UserAgent.
+	$ua->agent($agent);
+
+	# Check if an upstream proxy is configured.
+	if ($proxysettings{'UPSTREAM_PROXY'}) {
+		# Start generating proxy url.
+		my $proxy_url = "http://";
+
+		# Check if the proxy requires authentication.
+		if (($proxysettings{'UPSTREAM_USER'}) && ($proxysettings{'UPSTREAM_PASSWORD'})) {
+			# Add proxy auth details.
+			$proxy_url .= "$proxysettings{'UPSTREAM_USER'}\:$proxysettings{'UPSTREAM_PASSWORD'}\@";
+		}
+
+		# Add proxy server address and port.
+		$proxy_url .= $proxysettings{'UPSTREAM_PROXY'};
+
+		# Append proxy settings.
+		$ua->proxy(['http', 'https'], $proxy_url);
+	}
+
+	# Create a HTTP request element and pass the given URL to it.
+	my $request = HTTP::Request->new(GET => $url);
+
+	# Check if a file to store the output has been provided.
+	if ($file) {
+		# Check if the given file already exits, because it has been downloaded in the past.
+		#
+		# In this case we are requesting the server if the remote file has been changed or not.
+		# This will be done by sending the modification time in a special HTTP header.
+		if (-f $file) {
+			# Call stat on the file.
+			my $stat = stat($file);
+
+			# Omit the mtime of the existing file.
+			my $mtime = $stat->mtime;
+
+			# Convert the timestamp into right format.
+			my $http_date = time2str($mtime);
+
+			# Add the If-Modified-Since header to the request to ask the server if the
+			# file has been modified.
+			$request->header( 'If-Modified-Since' => "$http_date" );
+		}
+
+		# Generate a temporary file name, located in the tempoary download directory and with a suffix of ".tmp".
+		# The downloaded file will be stored there until some sanity checks are performed.
+		my $tmp = File::Temp->new( SUFFIX => ".tmp", DIR => "$tmp_dl_directory/", UNLINK => 0 );
+		$tmpfile = $tmp->filename();
+	}
+
+	# Check if an file for etags has been given.
+	if ($etags_file) {
+		# Read-in Etags file for known Etags if the file is present.
+		&readhash("$etags_file", \%etags) if (-f $etags_file);
+
+		# Check if an Etag for the requested file is stored.
+		if ($etags{$etagprefix}) {
+			# Grab the stored tag.
+			my $etag = $etags{$etagprefix};
+
+			# Add an "If-None-Match header to the request to ask the server if the
+			# file has been modified.
+			$request->header( 'If-None-Match' => $etag );
+		}
+	}
+
+	my $dl_attempt = 1;
+	my $response;
+
+	# Download and retry on failure.
+	while ($dl_attempt <= $max_dl_attempts) {
+		# Perform the request and save the output into the tmpfile if requested.
+		$response = $ua->request($request, $tmpfile);
+
+		# Check if the download was successfull.
+		if($response->is_success) {
+			# Break loop.
+			last;
+
+		# Check if the server responds with 304 (Not Modified).
+		} elsif ($response->code == 304) {
+			# Remove temporary file, if one exists.
+			unlink("$tmpfile") if (-e "$tmpfile");
+
+			# Return "not modified".
+			return "not modified";
+
+		# Check if we ran out of download re-tries.
+		} elsif ($dl_attempt eq $max_dl_attempts) {
+			# Obtain error.
+			my $error = $response->content;
+
+			# Remove temporary file, if one exists.
+			unlink("$tmpfile") if (-e "$tmpfile");
+
+			# Return the error message from response..
+			return "$error";
+		}
+
+		# Remove temporary file, if one exists.
+		unlink("$tmpfile") if (-e "$tmpfile");
+
+		# Increase download attempt counter.
+		$dl_attempt++;
+	}
+
+	# Obtain the connection headers.
+	my $headers = $response->headers;
+
+	# Check if an Etag file has been provided.
+	if ($etags_file) {
+		# Grab the Etag from the response if the server provides one.
+		if ($response->header('Etag')) {
+			# Add the provided Etag to the hash of tags.
+			$etags{$etagprefix} = $response->header('Etag');
+
+			# Write the etags file.
+			&General::writehash($etags_file, \%etags);
+		}
+	}
+
+	# Check if the response should be stored on disk.
+	if ($file) {
+		# Get the remote size of the content.
+		my $remote_size = $response->header('Content-Length');
+
+		# Perform a stat on the temporary file.
+		my $stat = stat($tmpfile);
+
+		# Grab the size of the stored temporary file.
+		my $local_size = $stat->size;
+
+		# Check if both sizes are equal.
+		if(($remote_size) && ($remote_size ne $local_size)) {
+			# Delete the temporary file.
+			unlink("$tmpfile");
+
+			# Abort and return "incomplete download" as error.
+			return "incomplete download";
+		}
+
+		# Move the temporaray file to the desired file by overwriting a may
+		# existing one.
+		move("$tmpfile", "$file");
+
+		# Omit the timestamp from response header, when the file has been modified the
+		# last time.
+		my $last_modified = $headers->last_modified;
+
+		# Check if we got a last-modified value from the server.
+		if ($last_modified) {
+			# Assign the last-modified timestamp as mtime to the
+			# stored file.
+			utime(time(), "$last_modified", "$file");
+		}
+
+		# Delete temporary file.
+		unlink("$tmpfile");
+
+		# If we got here, everything worked fine. Return nothing.
+		return;
+	} else {
+		# Decode the response content and return it.
+		return $response->decoded_content;
+	}
+}
+
+#
+# Tiny function to grab the public red IPv4 address using an online service.
+#
+sub FetchPublicIp {
+	# URL to grab the public IP.
+	my $url = "https://checkip4.ipfire.org";
+
+	# Call downloader to fetch the public IP.
+	my $response = &downloader("URL" => $url);
+
+	# Omit the address from the resonse message.
+	if ($response =~ /Your IP address is: (\d+.\d+.\d+.\d+)/) {
+		# Return the address.
+		return $1;
+	}
+
+	# Unable to grab the address - Return nothing.
+	return;
+}
+
+#
+# This sub returns the red IP used to compare in DyndnsServiceSync
+#
+sub GetDyndnsRedIP {
+	my %settings;
+
+	# Read-in ddns settings.
+	&General::readhash("${General::swroot}/ddns/settings", \%settings);
+
+	# Try to grab the address from the local-ipaddress file.
+	my $ip = &General::grab_address_from_file("${General::swroot}/red/local-ipaddress") or return 'unavailable';
+
+	# 100.64.0.0/10 is reserved for dual-stack lite (http://tools.ietf.org/html/rfc6598).
+	if (&General::IpInSubnet ($ip,'10.0.0.0','255.0.0.0') ||
+		&General::IpInSubnet ($ip,'172.16.0.0.','255.240.0.0') ||
+		&General::IpInSubnet ($ip,'192.168.0.0','255.255.0.0') ||
+		&General::IpInSubnet ($ip,'100.64.0.0', '255.192.0.0'))
+	{
+		if ($settings{'BEHINDROUTER'} eq 'FETCH_IP') {
+			# Call function to omit the real address.
+			my $RealIP = &FetchPublicIp;
+
+			# Check if the grabbed address is valid.
+			$ip = (&General::validip ($RealIP) ?  $RealIP : 'unavailable');
+		}
+	}
+
+	return $ip;
+}
+
+1;
diff --git a/config/cfgroot/ids-functions.pl b/config/cfgroot/ids-functions.pl
index 399f5cbf8b..1a72e4c3e2 100644
--- a/config/cfgroot/ids-functions.pl
+++ b/config/cfgroot/ids-functions.pl
@@ -27,6 +27,7 @@ package IDS;
 
 require '/var/ipfire/general-functions.pl';
 require "${General::swroot}/network-functions.pl";
+require "${General::swroot}/http-client-functions.pl";
 require "${General::swroot}/suricata/ruleset-sources";
 
 # Load perl module to deal with Archives.
@@ -44,15 +45,6 @@ use File::Path qw(rmtree);
 # Load module to get file stats.
 use File::stat;
 
-# Load module to deal with temporary files.
-use File::Temp;
-
-# Load module to deal with the date formats used by the HTTP protocol.
-use HTTP::Date;
-
-# Load the libwwwperl User Agent module.
-use LWP::UserAgent;
-
 # Load function from posix module to format time strings.
 use POSIX qw (strftime);
 
@@ -130,9 +122,6 @@ my $suricatactrl = "/usr/local/bin/suricatactrl";
 # Prefix for each downloaded ruleset.
 my $dl_rulesfile_prefix = "idsrules";
 
-# Temporary directory to download the rules files.
-my $tmp_dl_directory = "/var/tmp";
-
 # Temporary directory where the rulesets will be extracted.
 my $tmp_directory = "/tmp/ids_tmp";
 
@@ -299,61 +288,13 @@ sub checkdiskspace () {
 #
 ## This function is responsible for downloading the ruleset for a given provider.
 ##
-## * At first it initialize the downloader and sets an upstream proxy if configured.
-## * The next step will be to generate the final download url, by obtaining the URL for the desired
-##   ruleset and add the settings for the upstream proxy.
-## * Finally the function will grab the rule file or tarball from the server.
-##   It tries to reduce the amount of download by using the "If-Modified-Since" HTTP header.
-#
-## Return codes:
-##
-## * "no url" - If no download URL could be gathered for the provider.
-## * "not modified" - In case the already stored rules file is up to date.
-## * "incomplete download" - When the remote file size differs from the downloaded file size.
-## * "$error" - The error message generated from the LWP::User Agent module.
+## It uses the LWP-based downloader function from the general-functions.pl to
+## download the ruleset for a requested provider.
 #
 sub downloadruleset ($) {
 	my ($provider) = @_;
 
-	# The amount of download attempts before giving up and
-	# logging an error.
-	my $max_dl_attempts = 3;
-
-	# Read proxysettings.
-	my %proxysettings=();
-	&General::readhash("${General::swroot}/proxy/settings", \%proxysettings);
-
-	# Init the download module.
-	#
-	# Request SSL hostname verification and specify path
-	# to the CA file.
-	my $downloader = LWP::UserAgent->new(
-		ssl_opts => {
-			SSL_ca_file     => '/etc/ssl/cert.pem',
-			verify_hostname => 1,
-		}
-	);
-
-	# Set timeout to 10 seconds.
-	$downloader->timeout(10);
-
-	# Check if an upstream proxy is configured.
-	if ($proxysettings{'UPSTREAM_PROXY'}) {
-		my $proxy_url;
-
-		$proxy_url = "http://";
-
-		# Check if the proxy requires authentication.
-		if (($proxysettings{'UPSTREAM_USER'}) && ($proxysettings{'UPSTREAM_PASSWORD'})) {
-			$proxy_url .= "$proxysettings{'UPSTREAM_USER'}\:$proxysettings{'UPSTREAM_PASSWORD'}\@";
-		}
-
-		# Add proxy server address and port.
-		$proxy_url .= $proxysettings{'UPSTREAM_PROXY'};
-
-		# Setup proxy settings.
-		$downloader->proxy(['http', 'https'], $proxy_url);
-	}
+	my %settings = ();
 
 	# Grab the download url for the provider.
 	my $url = $IDS::Ruleset::Providers{$provider}{'dl_url'};
@@ -371,141 +312,30 @@ sub downloadruleset ($) {
 	# Abort and return "no url", if no url could be determined for the provider.
 	return "no url" unless ($url);
 
-	# Pass the requested URL to the downloader.
-	my $request = HTTP::Request->new(GET => $url);
-
-	# Generate temporary file name, located in the tempoary download directory and with a suffix of ".tmp".
-	# The downloaded file will be stored there until some sanity checks are performed.
-	my $tmp = File::Temp->new( SUFFIX => ".tmp", DIR => "$tmp_dl_directory/", UNLINK => 0 );
-	my $tmpfile = $tmp->filename();
+	# Pass the requested URL to the settings hash.
+	$settings{'URL'} = $url;
 
 	# Call function to get the final path and filename for the downloaded file.
 	my $dl_rulesfile = &_get_dl_rulesfile($provider);
 
-	# Check if the rulesfile already exits, because it has been downloaded in the past.
-	#
-	# In this case we are requesting the server if the remote file has been changed or not.
-	# This will be done by sending the modification time in a special HTTP header.
-	if (-f $dl_rulesfile) {
-		# Call stat on the file.
-		my $stat = stat($dl_rulesfile);
-
-		# Omit the mtime of the existing file.
-		my $mtime = $stat->mtime;
-
-		# Convert the timestamp into right format.
-		my $http_date = time2str($mtime);
-
-		# Add the If-Modified-Since header to the request to ask the server if the
-		# file has been modified.
-		$request->header( 'If-Modified-Since' => "$http_date" );
-	}
-
-	# Read-in Etags file for known Etags if the file is present.
-	my %etags = ();
-	&General::readhash("$etags_file", \%etags) if (-f $etags_file);
-
-	# Check if an Etag for the current provider is stored.
-	if ($etags{$provider}) {
-		# Grab the stored tag.
-		my $etag = $etags{$provider};
-
-		# Add an "If-None-Match header to the request to ask the server if the
-		# file has been modified.
-		$request->header( 'If-None-Match' => $etag );
-	}
-
-	my $dl_attempt = 1;
-	my $response;
-
-	# Download and retry on failure.
-	while ($dl_attempt <= $max_dl_attempts) {
-		# Perform the request and save the output into the tmpfile.
-		$response = $downloader->request($request, $tmpfile);
-
-		# Check if the download was successfull.
-		if($response->is_success) {
-			# Break loop.
-			last;
-
-		# Check if the server responds with 304 (Not Modified).
-		} elsif ($response->code == 304) {
-			# Remove temporary file, if one exists.
-			unlink("$tmpfile") if (-e "$tmpfile");
-
-			# Return "not modified".
-			return "not modified";
-
-		# Check if we ran out of download re-tries.
-		} elsif ($dl_attempt eq $max_dl_attempts) {
-			# Obtain error.
-			my $error = $response->content;
-
-			# Remove temporary file, if one exists.
-			unlink("$tmpfile") if (-e "$tmpfile");
-
-			# Return the error message from response..
-			return "$error";
-		}
-
-		# Remove temporary file, if one exists.
-		unlink("$tmpfile") if (-e "$tmpfile");
+	# Add the file information to the settings hash.
+	$settings{'FILE'} = $dl_rulesfile;
 
-		# Increase download attempt counter.
-		$dl_attempt++;
-	}
-
-	# Obtain the connection headers.
-	my $headers = $response->headers;
-
-	# Get the timestamp from header, when the file has been modified the
-	# last time.
-	my $last_modified = $headers->last_modified;
-
-	# Get the remote size of the downloaded file.
-	my $remote_filesize = $headers->content_length;
+	# Add Etag details to the settings hash.
+	$settings{'ETAGSFILE'} = $etags_file;
+	$settings{'ETAGPREFIX'} = $provider;
 
-	# Grab the Etag from response it the server provides one.
-	if ($response->header('Etag')) {
-		# Add the Etag to the etags hash.
-		$etags{$provider} = $response->header('Etag');
+	# Call the downloader and pass the settings hash.
+	my $response = &HTTPClient::downloader(%settings);
 
-		# Write the etags file.
-		&General::writehash($etags_file, \%etags);
+	# Return the response message if the downloader provided one.
+	if ($response) {
+		return $response;
 	}
 
-	# Perform stat on the tmpfile.
-	my $stat = stat($tmpfile);
-
-	# Grab the local filesize of the downloaded tarball.
-	my $local_filesize = $stat->size;
-
-	# Check if both file sizes match.
-	if (($remote_filesize) && ($remote_filesize ne $local_filesize)) {
-		# Delete temporary file.
-		unlink("$tmpfile");
-
-		# Return "1" - false.
-		return "incomplete download";
-	}
-
-	# Overwrite the may existing rulefile or tarball with the downloaded one.
-	move("$tmpfile", "$dl_rulesfile");
-
-	# Check if we got a last-modified value from the server.
-	if ($last_modified) {
-		# Assign the last-modified timestamp as mtime to the
-		# rules file.
-		utime(time(), "$last_modified", "$dl_rulesfile");
-	}
-
-	# Delete temporary file.
-	unlink("$tmpfile");
-
-	# Set correct ownership for the tarball.
-	set_ownership("$dl_rulesfile");
+	# Set correct ownership for the downloaded rules file.
+	&set_ownership("$dl_rulesfile");
 
-	# If we got here, everything worked fine. Return nothing.
 	return;
 }
 
diff --git a/config/rootfiles/common/bind b/config/rootfiles/common/bind
index 0467b7b04b..0beffd8621 100644
--- a/config/rootfiles/common/bind
+++ b/config/rootfiles/common/bind
@@ -240,18 +240,18 @@ usr/bin/nsupdate
 #usr/include/ns/types.h
 #usr/include/ns/update.h
 #usr/include/ns/xfrout.h
-usr/lib/libdns-9.20.7.so
+usr/lib/libdns-9.20.8.so
 #usr/lib/libdns.la
 #usr/lib/libdns.so
-usr/lib/libisc-9.20.7.so
+usr/lib/libisc-9.20.8.so
 #usr/lib/libisc.la
 #usr/lib/libisc.so
-usr/lib/libisccc-9.20.7.so
+usr/lib/libisccc-9.20.8.so
 #usr/lib/libisccc.la
 #usr/lib/libisccc.so
-usr/lib/libisccfg-9.20.7.so
+usr/lib/libisccfg-9.20.8.so
 #usr/lib/libisccfg.la
 #usr/lib/libisccfg.so
-usr/lib/libns-9.20.7.so
+usr/lib/libns-9.20.8.so
 #usr/lib/libns.la
 #usr/lib/libns.so
diff --git a/config/rootfiles/common/configroot b/config/rootfiles/common/configroot
index 9839eee45b..51472e7c51 100644
--- a/config/rootfiles/common/configroot
+++ b/config/rootfiles/common/configroot
@@ -79,6 +79,7 @@ var/ipfire/fwlogs
 var/ipfire/general-functions.pl
 var/ipfire/graphs.pl
 var/ipfire/header.pl
+var/ipfire/http-client-functions.pl
 var/ipfire/location-functions.pl
 var/ipfire/ids-functions.pl
 var/ipfire/ipblocklist-functions.pl
diff --git a/config/rootfiles/common/libarchive b/config/rootfiles/common/libarchive
index 0e6d2087b9..ee10915f1b 100644
--- a/config/rootfiles/common/libarchive
+++ b/config/rootfiles/common/libarchive
@@ -7,7 +7,7 @@
 #usr/lib/libarchive.la
 #usr/lib/libarchive.so
 usr/lib/libarchive.so.13
-usr/lib/libarchive.so.13.7.7
+usr/lib/libarchive.so.13.7.9
 #usr/lib/pkgconfig/libarchive.pc
 #usr/share/man/man1/bsdcat.1
 #usr/share/man/man1/bsdcpio.1
diff --git a/config/rootfiles/common/smartmontools b/config/rootfiles/common/smartmontools
index 6b3f923b14..0f72814f4d 100644
--- a/config/rootfiles/common/smartmontools
+++ b/config/rootfiles/common/smartmontools
@@ -30,3 +30,4 @@ usr/sbin/update-smart-drivedb
 #usr/share/man/man8/update-smart-drivedb.8
 #usr/share/smartmontools
 usr/share/smartmontools/drivedb.h
+etc/fcron.monthly/smart-drivedb
diff --git a/config/rootfiles/common/xz b/config/rootfiles/common/xz
index 3873744c8b..f836d45785 100644
--- a/config/rootfiles/common/xz
+++ b/config/rootfiles/common/xz
@@ -41,7 +41,7 @@ usr/bin/xzmore
 #usr/lib/liblzma.la
 #usr/lib/liblzma.so
 usr/lib/liblzma.so.5
-usr/lib/liblzma.so.5.8.0
+usr/lib/liblzma.so.5.8.1
 #usr/lib/pkgconfig/liblzma.pc
 #usr/share/doc/xz
 #usr/share/doc/xz/AUTHORS
diff --git a/config/rootfiles/core/194/exclude b/config/rootfiles/core/195/exclude
similarity index 100%
rename from config/rootfiles/core/194/exclude
rename to config/rootfiles/core/195/exclude
diff --git a/config/rootfiles/core/194/filelists/core-files b/config/rootfiles/core/195/filelists/core-files
similarity index 100%
rename from config/rootfiles/core/194/filelists/core-files
rename to config/rootfiles/core/195/filelists/core-files
diff --git a/config/rootfiles/core/195/filelists/files b/config/rootfiles/core/195/filelists/files
new file mode 100644
index 0000000000..1b22c0917e
--- /dev/null
+++ b/config/rootfiles/core/195/filelists/files
@@ -0,0 +1,5 @@
+srv/web/ipfire/cgi-bin/ddns.cgi
+srv/web/ipfire/cgi-bin/pakfire.cgi
+var/ipfire/general-functions.pl
+var/ipfire/http-client-functions.pl
+var/ipfire/ids-functions.pl
diff --git a/config/rootfiles/core/195/filelists/smartmontools b/config/rootfiles/core/195/filelists/smartmontools
new file mode 120000
index 0000000000..fb66dafeff
--- /dev/null
+++ b/config/rootfiles/core/195/filelists/smartmontools
@@ -0,0 +1 @@
+../../../common/smartmontools
\ No newline at end of file
diff --git a/config/rootfiles/core/195/update.sh b/config/rootfiles/core/195/update.sh
new file mode 100644
index 0000000000..ee9b534976
--- /dev/null
+++ b/config/rootfiles/core/195/update.sh
@@ -0,0 +1,67 @@
+#!/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) 2025 IPFire-Team <info@ipfire.org>.                        #
+#                                                                          #
+############################################################################
+#
+. /opt/pakfire/lib/functions.sh
+/usr/local/bin/backupctrl exclude >/dev/null 2>&1
+
+core=195
+
+# 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
+
+# Stop services
+
+# Remove files
+
+# Extract files
+extract_files
+
+# update linker config
+ldconfig
+
+# Update Language cache
+/usr/local/bin/update-lang-cache
+
+# Filesytem cleanup
+/usr/local/bin/filesystem-cleanup
+
+# Start services
+
+# 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/194/exclude b/config/rootfiles/oldcore/194/exclude
new file mode 100644
index 0000000000..8ee1c3c2f5
--- /dev/null
+++ b/config/rootfiles/oldcore/194/exclude
@@ -0,0 +1,35 @@
+boot/config.txt
+boot/grub/grub.cfg
+boot/grub/grubenv
+boot/uEnv.txt
+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/firewall/locationblock
+var/ipfire/fwhosts/customlocationgrp
+var/ipfire/ovpn
+var/ipfire/urlfilter/blacklist
+var/ipfire/urlfilter/settings
+var/lib/alternatives
+var/lib/location/database.db
+var/lib/location/ipset
+var/log/cache
+var/log/dhcpcd.log
+var/log/messages
+var/state/dhcp/dhcpd.leases
+var/updatecache
diff --git a/config/rootfiles/core/194/filelists/aarch64/linux b/config/rootfiles/oldcore/194/filelists/aarch64/linux
similarity index 100%
rename from config/rootfiles/core/194/filelists/aarch64/linux
rename to config/rootfiles/oldcore/194/filelists/aarch64/linux
diff --git a/config/rootfiles/core/194/filelists/aarch64/util-linux b/config/rootfiles/oldcore/194/filelists/aarch64/util-linux
similarity index 100%
rename from config/rootfiles/core/194/filelists/aarch64/util-linux
rename to config/rootfiles/oldcore/194/filelists/aarch64/util-linux
diff --git a/config/rootfiles/core/194/filelists/abseil-cpp b/config/rootfiles/oldcore/194/filelists/abseil-cpp
similarity index 100%
rename from config/rootfiles/core/194/filelists/abseil-cpp
rename to config/rootfiles/oldcore/194/filelists/abseil-cpp
diff --git a/config/rootfiles/core/194/filelists/apache2 b/config/rootfiles/oldcore/194/filelists/apache2
similarity index 100%
rename from config/rootfiles/core/194/filelists/apache2
rename to config/rootfiles/oldcore/194/filelists/apache2
diff --git a/config/rootfiles/core/194/filelists/bind b/config/rootfiles/oldcore/194/filelists/bind
similarity index 100%
rename from config/rootfiles/core/194/filelists/bind
rename to config/rootfiles/oldcore/194/filelists/bind
diff --git a/config/rootfiles/core/194/filelists/ca-certificates b/config/rootfiles/oldcore/194/filelists/ca-certificates
similarity index 100%
rename from config/rootfiles/core/194/filelists/ca-certificates
rename to config/rootfiles/oldcore/194/filelists/ca-certificates
diff --git a/config/rootfiles/core/194/filelists/cairo b/config/rootfiles/oldcore/194/filelists/cairo
similarity index 100%
rename from config/rootfiles/core/194/filelists/cairo
rename to config/rootfiles/oldcore/194/filelists/cairo
diff --git a/config/rootfiles/core/194/filelists/collectd b/config/rootfiles/oldcore/194/filelists/collectd
similarity index 100%
rename from config/rootfiles/core/194/filelists/collectd
rename to config/rootfiles/oldcore/194/filelists/collectd
diff --git a/config/rootfiles/oldcore/194/filelists/core-files b/config/rootfiles/oldcore/194/filelists/core-files
new file mode 100644
index 0000000000..0dec37e538
--- /dev/null
+++ b/config/rootfiles/oldcore/194/filelists/core-files
@@ -0,0 +1,5 @@
+etc/system-release
+etc/issue
+etc/os-release
+srv/web/ipfire/cgi-bin/credits.cgi
+var/ipfire/langs
diff --git a/config/rootfiles/core/194/filelists/coreutils b/config/rootfiles/oldcore/194/filelists/coreutils
similarity index 100%
rename from config/rootfiles/core/194/filelists/coreutils
rename to config/rootfiles/oldcore/194/filelists/coreutils
diff --git a/config/rootfiles/core/194/filelists/expat b/config/rootfiles/oldcore/194/filelists/expat
similarity index 100%
rename from config/rootfiles/core/194/filelists/expat
rename to config/rootfiles/oldcore/194/filelists/expat
diff --git a/config/rootfiles/core/194/filelists/files b/config/rootfiles/oldcore/194/filelists/files
similarity index 80%
rename from config/rootfiles/core/194/filelists/files
rename to config/rootfiles/oldcore/194/filelists/files
index 03dfa29299..91c017ed26 100644
--- a/config/rootfiles/core/194/filelists/files
+++ b/config/rootfiles/oldcore/194/filelists/files
@@ -6,3 +6,5 @@ etc/ssl/openssl.cnf
 srv/web/ipfire/cgi-bin/vpnmain.cgi
 var/ipfire/backup/include
 var/ipfire/backup/bin/backup.pl
+srv/web/ipfire/cgi-bin/netovpnrw.cgi
+var/ipfire/graphs.pl
diff --git a/config/rootfiles/core/194/filelists/gdbm b/config/rootfiles/oldcore/194/filelists/gdbm
similarity index 100%
rename from config/rootfiles/core/194/filelists/gdbm
rename to config/rootfiles/oldcore/194/filelists/gdbm
diff --git a/config/rootfiles/core/194/filelists/gettext b/config/rootfiles/oldcore/194/filelists/gettext
similarity index 100%
rename from config/rootfiles/core/194/filelists/gettext
rename to config/rootfiles/oldcore/194/filelists/gettext
diff --git a/config/rootfiles/core/194/filelists/harfbuzz b/config/rootfiles/oldcore/194/filelists/harfbuzz
similarity index 100%
rename from config/rootfiles/core/194/filelists/harfbuzz
rename to config/rootfiles/oldcore/194/filelists/harfbuzz
diff --git a/config/rootfiles/core/194/filelists/hwdata b/config/rootfiles/oldcore/194/filelists/hwdata
similarity index 100%
rename from config/rootfiles/core/194/filelists/hwdata
rename to config/rootfiles/oldcore/194/filelists/hwdata
diff --git a/config/rootfiles/core/194/filelists/iana-etc b/config/rootfiles/oldcore/194/filelists/iana-etc
similarity index 100%
rename from config/rootfiles/core/194/filelists/iana-etc
rename to config/rootfiles/oldcore/194/filelists/iana-etc
diff --git a/config/rootfiles/core/194/filelists/iproute2 b/config/rootfiles/oldcore/194/filelists/iproute2
similarity index 100%
rename from config/rootfiles/core/194/filelists/iproute2
rename to config/rootfiles/oldcore/194/filelists/iproute2
diff --git a/config/rootfiles/core/194/filelists/jansson b/config/rootfiles/oldcore/194/filelists/jansson
similarity index 100%
rename from config/rootfiles/core/194/filelists/jansson
rename to config/rootfiles/oldcore/194/filelists/jansson
diff --git a/config/rootfiles/core/194/filelists/kmod b/config/rootfiles/oldcore/194/filelists/kmod
similarity index 100%
rename from config/rootfiles/core/194/filelists/kmod
rename to config/rootfiles/oldcore/194/filelists/kmod
diff --git a/config/rootfiles/oldcore/194/filelists/libarchive b/config/rootfiles/oldcore/194/filelists/libarchive
new file mode 120000
index 0000000000..551f1f7434
--- /dev/null
+++ b/config/rootfiles/oldcore/194/filelists/libarchive
@@ -0,0 +1 @@
+../../../common/libarchive
\ No newline at end of file
diff --git a/config/rootfiles/core/194/filelists/libcap b/config/rootfiles/oldcore/194/filelists/libcap
similarity index 100%
rename from config/rootfiles/core/194/filelists/libcap
rename to config/rootfiles/oldcore/194/filelists/libcap
diff --git a/config/rootfiles/core/194/filelists/libedit b/config/rootfiles/oldcore/194/filelists/libedit
similarity index 100%
rename from config/rootfiles/core/194/filelists/libedit
rename to config/rootfiles/oldcore/194/filelists/libedit
diff --git a/config/rootfiles/core/194/filelists/libhtp b/config/rootfiles/oldcore/194/filelists/libhtp
similarity index 100%
rename from config/rootfiles/core/194/filelists/libhtp
rename to config/rootfiles/oldcore/194/filelists/libhtp
diff --git a/config/rootfiles/core/194/filelists/liburcu b/config/rootfiles/oldcore/194/filelists/liburcu
similarity index 100%
rename from config/rootfiles/core/194/filelists/liburcu
rename to config/rootfiles/oldcore/194/filelists/liburcu
diff --git a/config/rootfiles/core/194/filelists/libusb b/config/rootfiles/oldcore/194/filelists/libusb
similarity index 100%
rename from config/rootfiles/core/194/filelists/libusb
rename to config/rootfiles/oldcore/194/filelists/libusb
diff --git a/config/rootfiles/core/194/filelists/libxml2 b/config/rootfiles/oldcore/194/filelists/libxml2
similarity index 100%
rename from config/rootfiles/core/194/filelists/libxml2
rename to config/rootfiles/oldcore/194/filelists/libxml2
diff --git a/config/rootfiles/core/194/filelists/libxslt b/config/rootfiles/oldcore/194/filelists/libxslt
similarity index 100%
rename from config/rootfiles/core/194/filelists/libxslt
rename to config/rootfiles/oldcore/194/filelists/libxslt
diff --git a/config/rootfiles/core/194/filelists/lvm2 b/config/rootfiles/oldcore/194/filelists/lvm2
similarity index 100%
rename from config/rootfiles/core/194/filelists/lvm2
rename to config/rootfiles/oldcore/194/filelists/lvm2
diff --git a/config/rootfiles/core/194/filelists/mpfr b/config/rootfiles/oldcore/194/filelists/mpfr
similarity index 100%
rename from config/rootfiles/core/194/filelists/mpfr
rename to config/rootfiles/oldcore/194/filelists/mpfr
diff --git a/config/rootfiles/core/194/filelists/pango b/config/rootfiles/oldcore/194/filelists/pango
similarity index 100%
rename from config/rootfiles/core/194/filelists/pango
rename to config/rootfiles/oldcore/194/filelists/pango
diff --git a/config/rootfiles/core/194/filelists/procps b/config/rootfiles/oldcore/194/filelists/procps
similarity index 100%
rename from config/rootfiles/core/194/filelists/procps
rename to config/rootfiles/oldcore/194/filelists/procps
diff --git a/config/rootfiles/core/194/filelists/riscv64/linux b/config/rootfiles/oldcore/194/filelists/riscv64/linux
similarity index 100%
rename from config/rootfiles/core/194/filelists/riscv64/linux
rename to config/rootfiles/oldcore/194/filelists/riscv64/linux
diff --git a/config/rootfiles/core/194/filelists/riscv64/util-linux b/config/rootfiles/oldcore/194/filelists/riscv64/util-linux
similarity index 100%
rename from config/rootfiles/core/194/filelists/riscv64/util-linux
rename to config/rootfiles/oldcore/194/filelists/riscv64/util-linux
diff --git a/config/rootfiles/core/194/filelists/rrdtool b/config/rootfiles/oldcore/194/filelists/rrdtool
similarity index 100%
rename from config/rootfiles/core/194/filelists/rrdtool
rename to config/rootfiles/oldcore/194/filelists/rrdtool
diff --git a/config/rootfiles/core/194/filelists/shadow b/config/rootfiles/oldcore/194/filelists/shadow
similarity index 100%
rename from config/rootfiles/core/194/filelists/shadow
rename to config/rootfiles/oldcore/194/filelists/shadow
diff --git a/config/rootfiles/core/194/filelists/strongswan b/config/rootfiles/oldcore/194/filelists/strongswan
similarity index 100%
rename from config/rootfiles/core/194/filelists/strongswan
rename to config/rootfiles/oldcore/194/filelists/strongswan
diff --git a/config/rootfiles/core/194/filelists/suricata b/config/rootfiles/oldcore/194/filelists/suricata
similarity index 100%
rename from config/rootfiles/core/194/filelists/suricata
rename to config/rootfiles/oldcore/194/filelists/suricata
diff --git a/config/rootfiles/core/194/filelists/tzdata b/config/rootfiles/oldcore/194/filelists/tzdata
similarity index 100%
rename from config/rootfiles/core/194/filelists/tzdata
rename to config/rootfiles/oldcore/194/filelists/tzdata
diff --git a/config/rootfiles/core/194/filelists/x86_64/linux b/config/rootfiles/oldcore/194/filelists/x86_64/linux
similarity index 100%
rename from config/rootfiles/core/194/filelists/x86_64/linux
rename to config/rootfiles/oldcore/194/filelists/x86_64/linux
diff --git a/config/rootfiles/core/194/filelists/x86_64/util-linux b/config/rootfiles/oldcore/194/filelists/x86_64/util-linux
similarity index 100%
rename from config/rootfiles/core/194/filelists/x86_64/util-linux
rename to config/rootfiles/oldcore/194/filelists/x86_64/util-linux
diff --git a/config/rootfiles/core/194/filelists/xz b/config/rootfiles/oldcore/194/filelists/xz
similarity index 100%
rename from config/rootfiles/core/194/filelists/xz
rename to config/rootfiles/oldcore/194/filelists/xz
diff --git a/config/rootfiles/core/194/update.sh b/config/rootfiles/oldcore/194/update.sh
similarity index 100%
rename from config/rootfiles/core/194/update.sh
rename to config/rootfiles/oldcore/194/update.sh
diff --git a/config/smartmontools/fcron.monthly b/config/smartmontools/fcron.monthly
new file mode 100644
index 0000000000..6561cd0816
--- /dev/null
+++ b/config/smartmontools/fcron.monthly
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+/usr/sbin/update-smart-drivedb -q
+
+exit 0
diff --git a/doc/language_issues.de b/doc/language_issues.de
index 9062d6a838..b5309f41ba 100644
--- a/doc/language_issues.de
+++ b/doc/language_issues.de
@@ -684,6 +684,7 @@ WARNING: translation string unused: removable device advice
 WARNING: translation string unused: repeat
 WARNING: translation string unused: reportfile
 WARNING: translation string unused: reportlevel
+WARNING: translation string unused: request
 WARNING: translation string unused: requested data
 WARNING: translation string unused: reserved dst port
 WARNING: translation string unused: reserved src port
diff --git a/doc/language_issues.en b/doc/language_issues.en
index 9c7023b327..28eb622a69 100644
--- a/doc/language_issues.en
+++ b/doc/language_issues.en
@@ -1572,7 +1572,6 @@ WARNING: untranslated string: remote subnet is invalid = Remote subnet is invali
 WARNING: untranslated string: remove = Remove
 WARNING: untranslated string: remove ca certificate = Remove CA certificate
 WARNING: untranslated string: remove x509 = Remove x509
-WARNING: untranslated string: request = Request
 WARNING: untranslated string: required = Required
 WARNING: untranslated string: required field = Required field
 WARNING: untranslated string: reset = Reset
diff --git a/doc/language_issues.es b/doc/language_issues.es
index ca820ec360..00297e3ec9 100644
--- a/doc/language_issues.es
+++ b/doc/language_issues.es
@@ -741,6 +741,7 @@ WARNING: translation string unused: removable device advice
 WARNING: translation string unused: repeat
 WARNING: translation string unused: reportfile
 WARNING: translation string unused: reportlevel
+WARNING: translation string unused: request
 WARNING: translation string unused: requested data
 WARNING: translation string unused: reserved dst port
 WARNING: translation string unused: reserved src port
diff --git a/doc/language_issues.fr b/doc/language_issues.fr
index a9193f89eb..2ffa0a8dd3 100644
--- a/doc/language_issues.fr
+++ b/doc/language_issues.fr
@@ -716,6 +716,7 @@ WARNING: translation string unused: removable device advice
 WARNING: translation string unused: repeat
 WARNING: translation string unused: reportfile
 WARNING: translation string unused: reportlevel
+WARNING: translation string unused: request
 WARNING: translation string unused: requested data
 WARNING: translation string unused: reserved dst port
 WARNING: translation string unused: reserved src port
diff --git a/doc/language_issues.it b/doc/language_issues.it
index 81aec2f6f2..46f7356373 100644
--- a/doc/language_issues.it
+++ b/doc/language_issues.it
@@ -669,6 +669,7 @@ WARNING: translation string unused: removable device advice
 WARNING: translation string unused: repeat
 WARNING: translation string unused: reportfile
 WARNING: translation string unused: reportlevel
+WARNING: translation string unused: request
 WARNING: translation string unused: requested data
 WARNING: translation string unused: reserved dst port
 WARNING: translation string unused: reserved src port
diff --git a/doc/language_issues.nl b/doc/language_issues.nl
index 83c1170a1e..c1b076dccd 100644
--- a/doc/language_issues.nl
+++ b/doc/language_issues.nl
@@ -668,6 +668,7 @@ WARNING: translation string unused: removable device advice
 WARNING: translation string unused: repeat
 WARNING: translation string unused: reportfile
 WARNING: translation string unused: reportlevel
+WARNING: translation string unused: request
 WARNING: translation string unused: requested data
 WARNING: translation string unused: reserved dst port
 WARNING: translation string unused: reserved src port
diff --git a/doc/language_issues.pl b/doc/language_issues.pl
index aaeff18090..8bf0fa0dbe 100644
--- a/doc/language_issues.pl
+++ b/doc/language_issues.pl
@@ -593,6 +593,7 @@ WARNING: translation string unused: removable device advice
 WARNING: translation string unused: repeat
 WARNING: translation string unused: reportfile
 WARNING: translation string unused: reportlevel
+WARNING: translation string unused: request
 WARNING: translation string unused: requested data
 WARNING: translation string unused: reserved dst port
 WARNING: translation string unused: reserved src port
diff --git a/doc/language_issues.ru b/doc/language_issues.ru
index a6340e7268..bce016c277 100644
--- a/doc/language_issues.ru
+++ b/doc/language_issues.ru
@@ -588,6 +588,7 @@ WARNING: translation string unused: removable device advice
 WARNING: translation string unused: repeat
 WARNING: translation string unused: reportfile
 WARNING: translation string unused: reportlevel
+WARNING: translation string unused: request
 WARNING: translation string unused: requested data
 WARNING: translation string unused: reserved dst port
 WARNING: translation string unused: reserved src port
diff --git a/doc/language_issues.tr b/doc/language_issues.tr
index f8a4f68a78..8dc81778d8 100644
--- a/doc/language_issues.tr
+++ b/doc/language_issues.tr
@@ -698,6 +698,7 @@ WARNING: translation string unused: removable device advice
 WARNING: translation string unused: repeat
 WARNING: translation string unused: reportfile
 WARNING: translation string unused: reportlevel
+WARNING: translation string unused: request
 WARNING: translation string unused: requested data
 WARNING: translation string unused: reserved dst port
 WARNING: translation string unused: reserved src port
diff --git a/html/cgi-bin/ddns.cgi b/html/cgi-bin/ddns.cgi
index 0e3ccbe453..34475b75cd 100644
--- a/html/cgi-bin/ddns.cgi
+++ b/html/cgi-bin/ddns.cgi
@@ -29,6 +29,7 @@ use experimental 'smartmatch';
 require '/var/ipfire/general-functions.pl';
 require "${General::swroot}/lang.pl";
 require "${General::swroot}/header.pl";
+require "${General::swroot}/http-client-functions.pl";
 
 #workaround to suppress a warning when a variable is used only once
 my @dummy = ( ${Header::table2colour}, ${Header::colouryellow} );
@@ -559,7 +560,7 @@ open(FILE, $datafile) or die "Unable to open $datafile.";
 close(FILE);
 
 # Get IP address of the red interface.
-my $ip = &General::GetDyndnsRedIP();
+my $ip = &HTTPClient::GetDyndnsRedIP();
 my $id = 0;
 my $toggle_enabled;
 
diff --git a/html/cgi-bin/netovpnrw.cgi b/html/cgi-bin/netovpnrw.cgi
index 5014f9a555..fb81e9ffe8 100644
--- a/html/cgi-bin/netovpnrw.cgi
+++ b/html/cgi-bin/netovpnrw.cgi
@@ -43,7 +43,7 @@ my @vpns=();
 
 my @vpngraphs = `find /var/log/rrd/collectd/localhost/openvpn-*/ -not  -path *openvpn-UNDEF*  -not -path *openvpn-*n2n* -name *.rrd 2>/dev/null|sort`;
 foreach (@vpngraphs){
-	if($_ =~ /(.*)\/openvpn-(.*)\/if_octets_derive.rrd/){
+	if($_ =~ /(.*)\/openvpn-(.*)\/if_octets.rrd/){
 		push(@vpns,$2);
 	}
 }
diff --git a/html/cgi-bin/pakfire.cgi b/html/cgi-bin/pakfire.cgi
index 6a0c7a0a01..1246760df9 100644
--- a/html/cgi-bin/pakfire.cgi
+++ b/html/cgi-bin/pakfire.cgi
@@ -275,7 +275,7 @@ END
 # Show Pakfire install/remove dependencies and confirm form
 # (_is_pakfire_busy status was checked before and can be omitted)
 if (($cgiparams{'ACTION'} eq $Lang::tr{'pakfire install'}) && ($pagemode eq $PM_DEFAULT)) {
-	&Header::openbox("100%", "center", $Lang::tr{'request'});
+	&Header::openbox("100%", "center", $Lang::tr{'pakfire install'});
 
 	my @pkgs = split(/\|/, $cgiparams{'INSPAKS'});
 	my @output = &General::system_output("/usr/local/bin/pakfire", "resolvedeps", "--no-colors", @pkgs);
@@ -318,7 +318,7 @@ END
 	exit;
 
 } elsif (($cgiparams{'ACTION'} eq $Lang::tr{'remove'}) && ($pagemode eq $PM_DEFAULT)) {
-	&Header::openbox("100%", "center", $Lang::tr{'request'});
+	&Header::openbox("100%", "center", $Lang::tr{'remove'});
 
 	my @pkgs = split(/\|/, $cgiparams{'DELPAKS'});
 	my @output = &General::system_output("/usr/local/bin/pakfire", "resolvedeps", "--no-colors", @pkgs);
@@ -416,7 +416,7 @@ if (($cgiparams{'ACTION'} eq $Lang::tr{'pakfire upgrade'}) && ($pagemode eq $PM_
 				<input type='submit' name='ACTION' value='$Lang::tr{'pakfire upgrade'}'/>
 				<input type='submit' name='ACTION' value='$Lang::tr{'cancel'}'/>
 				</form>
-			</td>
+				</td>
 			</tr>
 		</table>
 END
diff --git a/html/cgi-bin/wio.cgi b/html/cgi-bin/wio.cgi
index f31f5d565e..30a51104c1 100644
--- a/html/cgi-bin/wio.cgi
+++ b/html/cgi-bin/wio.cgi
@@ -50,6 +50,7 @@ require '/var/ipfire/general-functions.pl';
 require '/var/ipfire/network-functions.pl';
 require '/var/ipfire/lang.pl';
 require '/var/ipfire/header.pl';
+require '/var/ipfire/http-client-functions.pl';
 require '/usr/lib/wio/wio-lib.pl';
 require '/usr/lib/wio/wio-graphs.pl';
 
@@ -1163,7 +1164,7 @@ close (FILE);
 		@temp = split (/\,/, $_);
 
 		if ( $temp[7] eq "on" ) {
-			$bgcolor = ( &General::DyndnsServiceSync (&General::GetDyndnsRedIP,$temp[1],$temp[2]) ? "$Header::colourgreen" : "$Header::colourred" );
+			$bgcolor = ( &General::DyndnsServiceSync (&HTTPClient::GetDyndnsRedIP,$temp[1],$temp[2]) ? "$Header::colourgreen" : "$Header::colourred" );
 		}
 		else {
 			$bgcolor = "blue";
diff --git a/lfs/bind b/lfs/bind
index a35d829756..330501460b 100644
--- a/lfs/bind
+++ b/lfs/bind
@@ -25,7 +25,7 @@
 
 include Config
 
-VER        = 9.20.7
+VER        = 9.20.8
 
 THISAPP    = bind-$(VER)
 DL_FILE    = $(THISAPP).tar.xz
@@ -43,7 +43,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_BLAKE2 = c5198939382e7295b4dfcb2ddbd86e5bccc10047d5e963dab2381404eb7a14543218e3caa438b395a2982cb607da84012f3a76a41c790a48ed615238bc080b5c
+$(DL_FILE)_BLAKE2 = cc8f9de7cff23af113c48d365d41774f5141f937091b2f97e682104be03e64c86eb6f00a5f2e43ac4a3472c24b2909ca0d4cb82194cf4e8e510d5dded40ddd5a
 
 install : $(TARGET)
 
diff --git a/lfs/configroot b/lfs/configroot
index 9f6c1ff8ca..1f752ddb67 100644
--- a/lfs/configroot
+++ b/lfs/configroot
@@ -76,6 +76,7 @@ $(TARGET) :
 
 	# Copy initial configfiles
 	cp $(DIR_SRC)/config/cfgroot/header.pl			$(CONFIG_ROOT)/
+	cp $(DIR_SRC)/config/cfgroot/http-client-functions.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/location-functions.pl	$(CONFIG_ROOT)/
diff --git a/lfs/htop b/lfs/htop
index 8f5516bc94..a471d955d9 100644
--- a/lfs/htop
+++ b/lfs/htop
@@ -26,7 +26,7 @@ include Config
 
 SUMMARY    = An Interactive text-mode Process Viewer for Linux
 
-VER        = 3.4.0
+VER        = 3.4.1
 
 THISAPP    = htop-$(VER)
 DL_FILE    = $(THISAPP).tar.xz
@@ -34,7 +34,7 @@ DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
 PROG       = htop
-PAK_VER    = 22
+PAK_VER    = 23
 
 DEPS       =
 
@@ -50,7 +50,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_BLAKE2 = b7a89ae689c9da540a7509cbb90ee103f48291e0685b971f1542795b7877434e10dcc66f47bb455456cf097d40bd9342d43fd05cc4b96676d4d954a8355e4271
+$(DL_FILE)_BLAKE2 = dd520c754084a8ad15a04c19a70936053588b52ab2b2004530d0664c9595043ff2d56baa220f579a29cef99aa09a68a79e6d697a6015a87386ebf26998691b50
 
 install : $(TARGET)
 
diff --git a/lfs/libarchive b/lfs/libarchive
index 3f4eccff02..d5c5082104 100644
--- a/lfs/libarchive
+++ b/lfs/libarchive
@@ -1,7 +1,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007-2024  IPFire Team  <info@ipfire.org>                     #
+# Copyright (C) 2007-2025  IPFire Team  <info@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        = 3.7.7
+VER        = 3.7.9
 
 THISAPP    = libarchive-$(VER)
 DL_FILE    = $(THISAPP).tar.xz
@@ -41,7 +41,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_BLAKE2 = e118c693f7a78e86ab868fc6c2c77beba539cf5c7d5999e270cdceb225e9f85c68c938ec6ce3a33f75b2a44a6f7debe2c280d2573c1bcf05806300e8dce1a4f0
+$(DL_FILE)_BLAKE2 = 7bcfb3fe8ffd9452f3d71cdc738144069594030278572ebba0bb247ad74fd68ec19822f281364878228ee311976e216614d4764e56c5fb7f98801695ab7aa7f4
 
 install : $(TARGET)
 
diff --git a/lfs/monit b/lfs/monit
index 82de4137b5..1df10064ea 100644
--- a/lfs/monit
+++ b/lfs/monit
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 5.34.4
+VER        = 5.35.0
 SUMMARY    = Utility for monitoring services on a Unix system
 
 THISAPP    = monit-$(VER)
@@ -33,7 +33,7 @@ DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
 PROG       = monit
-PAK_VER    = 27
+PAK_VER    = 28
 
 DEPS       =
 
@@ -47,7 +47,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_BLAKE2 = a61a63eab320cb39d9d90a877fa6d2f9c326e9629847c235cb44061ad69d9ae561d1c05c5ca0b50e263d3539ed39db64602741e88aa20697209c62bdb53f7516
+$(DL_FILE)_BLAKE2 = b14485224e0697d390b0e772391e74f209a2f0b74bc371399eb6dd6b902b7d7648877466bbc6c672b68d1d7ad186e262b8026f6aa3d3258d5a558baee6d36373
 
 install : $(TARGET)
 
diff --git a/lfs/smartmontools b/lfs/smartmontools
index 3e81181fcd..61a5ea8816 100644
--- a/lfs/smartmontools
+++ b/lfs/smartmontools
@@ -1,7 +1,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007-2023  IPFire Team  <info@ipfire.org>                     #
+# Copyright (C) 2007-2025  IPFire Team  <info@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        #
@@ -74,5 +74,10 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
 	cd $(DIR_APP) && ./configure --prefix=/usr
 	cd $(DIR_APP) && make BUILD_INFO='"($(NAME) $(VERSION))"' $(MAKETUNING)
 	cd $(DIR_APP) && make install
+	
+	# Install cron job.
+	install -m 754 -v $(DIR_CONF)/smartmontools/fcron.monthly \
+		/etc/fcron.monthly/smart-drivedb
+
 	@rm -rf $(DIR_APP)
 	@$(POSTBUILD)
diff --git a/lfs/wio b/lfs/wio
index b173b935a4..c5415add94 100644
--- a/lfs/wio
+++ b/lfs/wio
@@ -32,7 +32,7 @@ THISAPP    = wio-$(VER)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
 PROG       = wio
-PAK_VER    = 17
+PAK_VER    = 18
 
 DEPS       =
 
diff --git a/lfs/xz b/lfs/xz
index 511848c1d6..1ee1faa52b 100644
--- a/lfs/xz
+++ b/lfs/xz
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 5.8.0
+VER        = 5.8.1
 
 THISAPP    = xz-$(VER)
 DL_FILE    = $(THISAPP).tar.xz
@@ -45,7 +45,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_BLAKE2 = 5087c88884a857b96bc5658548fc9b07ab2f14fe9eabfaeaa19e21810e7588c97621db08353632bd56e66ae2085ec5adc421c4d6849525b630d56dadd65c9f81
+$(DL_FILE)_BLAKE2 = f11be3971e181bb49b6a92d3cc07ebb1c6b5fb53bc5d079e0952eed94f069656cffb37a2e2e8f068a5f119c6ef5ee565b3ac9978a5afa24a40d49607d492d176
 
 install : $(TARGET)
 
diff --git a/make.sh b/make.sh
index 6e0605e149..8da90d61d4 100755
--- a/make.sh
+++ b/make.sh
@@ -23,7 +23,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.29"							# Version number
-CORE="194"							# Core Level (Filename)
+CORE="195"							# Core Level (Filename)
 SLOGAN="www.ipfire.org"						# Software slogan
 CONFIG_ROOT=/var/ipfire						# Configuration rootdir
 


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


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2025-04-22 14:21 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-04-22 14:21 [git.ipfire.org] IPFire 2.x development tree branch, next, updated. 10056cb0676af79f3f41c089f1563217404e7d25 Michael Tremer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox