]> git.ipfire.org Git - ipfire-2.x.git/commitdiff
Merge remote-tracking branch 'origin/master' into kernel-4.9
authorArne Fitzenreiter <arne_f@ipfire.org>
Sun, 22 Oct 2017 19:57:17 +0000 (21:57 +0200)
committerArne Fitzenreiter <arne_f@ipfire.org>
Sun, 22 Oct 2017 19:57:30 +0000 (21:57 +0200)
Signed-off-by: Arne Fitzenreiter <arne_f@ipfire.org>
353 files changed:
config/backup/include
config/cfgroot/general-functions.pl
config/cfgroot/lang.pl
config/cfgroot/network-functions.pl
config/cron/crontab
config/etc/inittab
config/extrahd/extrahd.pl
config/httpd/httpd.conf
config/httpd/loadmodule.conf
config/httpd/server-tuning.conf
config/httpd/ssl-global.conf
config/httpd/vhosts.d/captive.conf [new file with mode: 0644]
config/httpd/vhosts.d/ipfire-interface-ssl.conf
config/httpd/vhosts.d/ipfire-interface.conf
config/httpd/vhosts.d/nagios.conf
config/httpd/vhosts.d/openmailadmin.conf
config/icinga/icinga.conf
config/menu/30-network.menu
config/nagiosql/nagios.conf
config/ovpn/openssl/ovpn.cnf
config/owncloud/owncloud.conf
config/php/php.ini
config/phpSANE/phpSANE.conf
config/rootfiles/common/apache2
config/rootfiles/common/apr [new file with mode: 0644]
config/rootfiles/common/aprutil [new file with mode: 0644]
config/rootfiles/common/bootstrap [new file with mode: 0644]
config/rootfiles/common/configroot
config/rootfiles/common/gnutls
config/rootfiles/common/libgcrypt
config/rootfiles/common/misc-progs
config/rootfiles/common/pcre
config/rootfiles/common/perl-Font-TTF [new file with mode: 0644]
config/rootfiles/common/perl-IO-String [new file with mode: 0644]
config/rootfiles/common/perl-PDF-API2 [moved from config/rootfiles/packages/perl-PDF-API2 with 98% similarity]
config/rootfiles/common/php
config/rootfiles/common/stage2
config/rootfiles/common/strongswan
config/rootfiles/common/ubuntu-font-family [new file with mode: 0644]
config/rootfiles/common/unbound
config/rootfiles/common/web-user-interface
config/rootfiles/common/x86_64/stage2
config/rootfiles/core/115/exclude [moved from config/rootfiles/core/112/exclude with 100% similarity]
config/rootfiles/core/115/filelists/apache2 [new symlink]
config/rootfiles/core/115/filelists/bootstrap [new symlink]
config/rootfiles/core/115/filelists/files [new file with mode: 0644]
config/rootfiles/core/115/filelists/logrotate [new symlink]
config/rootfiles/core/115/filelists/openvpn [new symlink]
config/rootfiles/core/115/filelists/perl-Font-TTF [new symlink]
config/rootfiles/core/115/filelists/perl-IO-String [new symlink]
config/rootfiles/core/115/filelists/perl-PDF-API2 [new symlink]
config/rootfiles/core/115/filelists/ubuntu-font-family [new symlink]
config/rootfiles/core/115/filelists/wpa_supplicant [new symlink]
config/rootfiles/core/115/meta [moved from config/rootfiles/core/112/meta with 100% similarity]
config/rootfiles/core/115/update.sh [new file with mode: 0644]
config/rootfiles/oldcore/112/exclude [new file with mode: 0644]
config/rootfiles/oldcore/112/filelists/armv5tel/binutils [moved from config/rootfiles/core/112/filelists/armv5tel/binutils with 100% similarity]
config/rootfiles/oldcore/112/filelists/armv5tel/gcc [moved from config/rootfiles/core/112/filelists/armv5tel/gcc with 100% similarity]
config/rootfiles/oldcore/112/filelists/armv5tel/glibc [moved from config/rootfiles/core/112/filelists/armv5tel/glibc with 100% similarity]
config/rootfiles/oldcore/112/filelists/armv5tel/util-linux [moved from config/rootfiles/core/112/filelists/armv5tel/util-linux with 100% similarity]
config/rootfiles/oldcore/112/filelists/autoconf [moved from config/rootfiles/core/112/filelists/autoconf with 100% similarity]
config/rootfiles/oldcore/112/filelists/bc [moved from config/rootfiles/core/112/filelists/bc with 100% similarity]
config/rootfiles/oldcore/112/filelists/boost [moved from config/rootfiles/core/112/filelists/boost with 100% similarity]
config/rootfiles/oldcore/112/filelists/cmake [moved from config/rootfiles/core/112/filelists/cmake with 100% similarity]
config/rootfiles/oldcore/112/filelists/files [moved from config/rootfiles/core/112/filelists/files with 100% similarity]
config/rootfiles/oldcore/112/filelists/flex [moved from config/rootfiles/core/112/filelists/flex with 100% similarity]
config/rootfiles/oldcore/112/filelists/fuse [moved from config/rootfiles/core/112/filelists/fuse with 100% similarity]
config/rootfiles/oldcore/112/filelists/gawk [moved from config/rootfiles/core/112/filelists/gawk with 100% similarity]
config/rootfiles/oldcore/112/filelists/gnutls [moved from config/rootfiles/core/112/filelists/gnutls with 100% similarity]
config/rootfiles/oldcore/112/filelists/i586/binutils [moved from config/rootfiles/core/112/filelists/i586/binutils with 100% similarity]
config/rootfiles/oldcore/112/filelists/i586/gcc [moved from config/rootfiles/core/112/filelists/i586/gcc with 100% similarity]
config/rootfiles/oldcore/112/filelists/i586/glibc [moved from config/rootfiles/core/112/filelists/i586/glibc with 100% similarity]
config/rootfiles/oldcore/112/filelists/i586/python [moved from config/rootfiles/core/112/filelists/i586/python with 100% similarity]
config/rootfiles/oldcore/112/filelists/i586/util-linux [moved from config/rootfiles/core/112/filelists/i586/util-linux with 100% similarity]
config/rootfiles/oldcore/112/filelists/kbd [moved from config/rootfiles/core/112/filelists/kbd with 100% similarity]
config/rootfiles/oldcore/112/filelists/libarchive [moved from config/rootfiles/core/112/filelists/libarchive with 100% similarity]
config/rootfiles/oldcore/112/filelists/libgcrypt [moved from config/rootfiles/core/112/filelists/libgcrypt with 100% similarity]
config/rootfiles/oldcore/112/filelists/libgpg-error [moved from config/rootfiles/core/112/filelists/libgpg-error with 100% similarity]
config/rootfiles/oldcore/112/filelists/libxml2 [moved from config/rootfiles/core/112/filelists/libxml2 with 100% similarity]
config/rootfiles/oldcore/112/filelists/ncurses [moved from config/rootfiles/core/112/filelists/ncurses with 100% similarity]
config/rootfiles/oldcore/112/filelists/reiserfsprogs [moved from config/rootfiles/core/112/filelists/reiserfsprogs with 100% similarity]
config/rootfiles/oldcore/112/filelists/sudo [moved from config/rootfiles/core/112/filelists/sudo with 100% similarity]
config/rootfiles/oldcore/112/filelists/tzdata [moved from config/rootfiles/core/112/filelists/tzdata with 100% similarity]
config/rootfiles/oldcore/112/filelists/unbound [moved from config/rootfiles/core/112/filelists/unbound with 100% similarity]
config/rootfiles/oldcore/112/filelists/web-user-interface [moved from config/rootfiles/core/112/filelists/web-user-interface with 100% similarity]
config/rootfiles/oldcore/112/filelists/x86_64/binutils [moved from config/rootfiles/core/112/filelists/x86_64/binutils with 100% similarity]
config/rootfiles/oldcore/112/filelists/x86_64/gcc [moved from config/rootfiles/core/112/filelists/x86_64/gcc with 100% similarity]
config/rootfiles/oldcore/112/filelists/x86_64/glibc [moved from config/rootfiles/core/112/filelists/x86_64/glibc with 100% similarity]
config/rootfiles/oldcore/112/filelists/x86_64/python [moved from config/rootfiles/core/112/filelists/x86_64/python with 100% similarity]
config/rootfiles/oldcore/112/filelists/x86_64/util-linux [moved from config/rootfiles/core/112/filelists/x86_64/util-linux with 100% similarity]
config/rootfiles/oldcore/112/meta [new file with mode: 0644]
config/rootfiles/oldcore/112/update.sh [moved from config/rootfiles/core/112/update.sh with 100% similarity]
config/rootfiles/oldcore/113/exclude [new file with mode: 0644]
config/rootfiles/oldcore/113/filelists/armv5tel/util-linux [new symlink]
config/rootfiles/oldcore/113/filelists/files [new file with mode: 0644]
config/rootfiles/oldcore/113/filelists/gnutls [new symlink]
config/rootfiles/oldcore/113/filelists/grep [new symlink]
config/rootfiles/oldcore/113/filelists/i586/openssl-sse2 [new symlink]
config/rootfiles/oldcore/113/filelists/i586/strongswan-padlock [new symlink]
config/rootfiles/oldcore/113/filelists/i586/util-linux [new symlink]
config/rootfiles/oldcore/113/filelists/libgcrypt [new symlink]
config/rootfiles/oldcore/113/filelists/logrotate [new symlink]
config/rootfiles/oldcore/113/filelists/mdadm [new symlink]
config/rootfiles/oldcore/113/filelists/openssl [new symlink]
config/rootfiles/oldcore/113/filelists/openvpn [new symlink]
config/rootfiles/oldcore/113/filelists/pcre [new symlink]
config/rootfiles/oldcore/113/filelists/squid [new symlink]
config/rootfiles/oldcore/113/filelists/strongswan [new symlink]
config/rootfiles/oldcore/113/filelists/unbound [new symlink]
config/rootfiles/oldcore/113/filelists/x86_64/util-linux [new symlink]
config/rootfiles/oldcore/113/meta [new file with mode: 0644]
config/rootfiles/oldcore/113/update.sh [new file with mode: 0644]
config/rootfiles/oldcore/114/exclude [new file with mode: 0644]
config/rootfiles/oldcore/114/filelists/apache2 [new symlink]
config/rootfiles/oldcore/114/filelists/apr [new symlink]
config/rootfiles/oldcore/114/filelists/aprutil [new symlink]
config/rootfiles/oldcore/114/filelists/files [new file with mode: 0644]
config/rootfiles/oldcore/114/filelists/gnutls [new symlink]
config/rootfiles/oldcore/114/filelists/hdparm [new symlink]
config/rootfiles/oldcore/114/filelists/i586/strongswan-padlock [new symlink]
config/rootfiles/oldcore/114/filelists/php [new symlink]
config/rootfiles/oldcore/114/filelists/squid [new symlink]
config/rootfiles/oldcore/114/filelists/strongswan [new symlink]
config/rootfiles/oldcore/114/filelists/unbound [new symlink]
config/rootfiles/oldcore/114/meta [new file with mode: 0644]
config/rootfiles/oldcore/114/update.sh [new file with mode: 0644]
config/rootfiles/packages/iftop [new file with mode: 0644]
config/rootfiles/packages/nano
config/rootfiles/packages/wio [new file with mode: 0644]
config/unbound/icannbundle.pem
config/unbound/root.hints
config/unbound/root.key
config/xen-image/xen-image-maker.sh
doc/language_issues.de
doc/language_issues.en
doc/language_issues.es
doc/language_issues.fr
doc/language_issues.it
doc/language_issues.nl
doc/language_issues.pl
doc/language_issues.ru
doc/language_issues.tr
doc/language_missings
html/cgi-bin/captive.cgi [new file with mode: 0755]
html/cgi-bin/captive/index.cgi [new file with mode: 0755]
html/cgi-bin/captive/logo.cgi [new file with mode: 0644]
html/cgi-bin/captive/redirect.cgi [new file with mode: 0755]
html/cgi-bin/extrahd.cgi
html/cgi-bin/logs.cgi/log.dat
html/cgi-bin/ovpnmain.cgi
html/cgi-bin/proxy.cgi
html/cgi-bin/vpnmain.cgi
html/cgi-bin/wlanap.cgi
html/html/captive/assets/captive.css [new file with mode: 0644]
html/html/captive/assets/favicon.ico [new file with mode: 0644]
html/html/captive/assets/ipfire.png [new file with mode: 0644]
html/html/captive/template.html [new file with mode: 0644]
html/html/dial.cgi [deleted file]
langs/de/cgi-bin/de.pl
langs/en/cgi-bin/en.pl
lfs/Config
lfs/apache2
lfs/apr [new file with mode: 0644]
lfs/aprutil [new file with mode: 0644]
lfs/bind
lfs/bootstrap [new file with mode: 0644]
lfs/cacti
lfs/cdrom
lfs/configroot
lfs/ddns
lfs/fireinfo
lfs/flash-images
lfs/gnutls
lfs/hdparm
lfs/hostapd
lfs/icinga
lfs/iftop [new file with mode: 0644]
lfs/installer
lfs/ipfire-netboot
lfs/libgcrypt
lfs/logrotate
lfs/nagios
lfs/nano
lfs/openmailadmin
lfs/openvpn
lfs/owncloud
lfs/pakfire3
lfs/pcre
lfs/perl-Font-TTF [new file with mode: 0644]
lfs/perl-IO-String [new file with mode: 0644]
lfs/perl-PDF-API2
lfs/phpSANE
lfs/squid
lfs/squid-accounting
lfs/stage2
lfs/strongswan
lfs/tcpdump
lfs/tor
lfs/ubuntu-font-family [new file with mode: 0644]
lfs/unbound
lfs/web-user-interface
lfs/wio [new file with mode: 0644]
lfs/wpa_supplicant
make.sh
src/initscripts/system/apache
src/initscripts/system/firewall
src/initscripts/system/firstsetup
src/initscripts/system/ntp
src/initscripts/system/unbound
src/installer/configure.ac
src/installer/dracut-module/module-setup.sh
src/installer/hw.c
src/installer/hw.h
src/installer/main.c
src/installer/po/ar.po
src/installer/po/ca.po
src/installer/po/cs_CZ.po
src/installer/po/da.po
src/installer/po/de.po
src/installer/po/el_GR.po
src/installer/po/es.po
src/installer/po/fa.po
src/installer/po/fr.po
src/installer/po/hr.po
src/installer/po/hu.po
src/installer/po/id.po
src/installer/po/it.po
src/installer/po/ja.po
src/installer/po/jv.po
src/installer/po/km_KH.po
src/installer/po/nl.po
src/installer/po/pl.po
src/installer/po/pt_BR.po
src/installer/po/pt_PT.po
src/installer/po/ro_RO.po
src/installer/po/ru.po
src/installer/po/rw.po
src/installer/po/sk.po
src/installer/po/sq.po
src/installer/po/sr.po
src/installer/po/su.po
src/installer/po/sv.po
src/installer/po/th.po
src/installer/po/tk.po
src/installer/po/tr.po
src/installer/po/uk.po
src/installer/po/uz@Latn.po
src/installer/po/vi.po
src/installer/po/zh.po
src/misc-progs/Makefile
src/misc-progs/captivectrl.c [new file with mode: 0644]
src/misc-progs/list.h [new file with mode: 0644]
src/misc-progs/wiohelper.c [new file with mode: 0644]
src/misc-progs/wioscan.c [new file with mode: 0644]
src/misc-progs/wirelessctrl.c
src/paks/wio/install.sh [new file with mode: 0644]
src/paks/wio/uninstall.sh [new file with mode: 0644]
src/paks/wio/update.sh [new file with mode: 0644]
src/patches/squid-3.5.27-fix-max-file-descriptors.patch [moved from src/patches/squid-3.5.26-fix-max-file-descriptors.patch with 100% similarity]
src/patches/unbound-allow-setting-validator-permissive-mode-at-runtime.patch [deleted file]
src/patches/wpa_supplicant/0001-hostapd-Avoid-key-reinstallation-in-FT-handshake.patch [new file with mode: 0644]
src/patches/wpa_supplicant/0002-Prevent-reinstallation-of-an-already-in-use-group-ke.patch [new file with mode: 0644]
src/patches/wpa_supplicant/0003-Extend-protection-of-GTK-IGTK-reinstallation-of-WNM-.patch [new file with mode: 0644]
src/patches/wpa_supplicant/0004-Prevent-installation-of-an-all-zero-TK.patch [new file with mode: 0644]
src/patches/wpa_supplicant/0005-Fix-PTK-rekeying-to-generate-a-new-ANonce.patch [new file with mode: 0644]
src/patches/wpa_supplicant/0006-TDLS-Reject-TPK-TK-reconfiguration.patch [new file with mode: 0644]
src/patches/wpa_supplicant/0007-WNM-Ignore-WNM-Sleep-Mode-Response-without-pending-r.patch [new file with mode: 0644]
src/patches/wpa_supplicant/0008-FT-Do-not-allow-multiple-Reassociation-Response-fram.patch [new file with mode: 0644]
src/patches/wpa_supplicant/rebased-v2.6-0001-hostapd-Avoid-key-reinstallation-in-FT-handshake.patch [new file with mode: 0644]
src/patches/wpa_supplicant/rebased-v2.6-0002-Prevent-reinstallation-of-an-already-in-use-group-ke.patch [new file with mode: 0644]
src/patches/wpa_supplicant/rebased-v2.6-0003-Extend-protection-of-GTK-IGTK-reinstallation-of-WNM-.patch [new file with mode: 0644]
src/patches/wpa_supplicant/rebased-v2.6-0004-Prevent-installation-of-an-all-zero-TK.patch [new file with mode: 0644]
src/patches/wpa_supplicant/rebased-v2.6-0005-Fix-PTK-rekeying-to-generate-a-new-ANonce.patch [new file with mode: 0644]
src/patches/wpa_supplicant/rebased-v2.6-0006-TDLS-Reject-TPK-TK-reconfiguration.patch [new file with mode: 0644]
src/patches/wpa_supplicant/rebased-v2.6-0007-WNM-Ignore-WNM-Sleep-Mode-Response-without-pending-r.patch [new file with mode: 0644]
src/patches/wpa_supplicant/rebased-v2.6-0008-FT-Do-not-allow-multiple-Reassociation-Response-fram.patch [new file with mode: 0644]
src/scripts/backupiso
src/scripts/captive-cleanup [new file with mode: 0755]
src/scripts/httpscert [deleted file]
src/setup/passwords.c
src/setup/po/ar.po
src/setup/po/ca.po
src/setup/po/cs_CZ.po
src/setup/po/da.po
src/setup/po/de.po
src/setup/po/el_GR.po
src/setup/po/es.po
src/setup/po/fa.po
src/setup/po/fr.po
src/setup/po/hr.po
src/setup/po/hu.po
src/setup/po/id.po
src/setup/po/it.po
src/setup/po/ja.po
src/setup/po/jv.po
src/setup/po/km_KH.po
src/setup/po/nl.po
src/setup/po/pl.po
src/setup/po/pt_BR.po
src/setup/po/pt_PT.po
src/setup/po/ro_RO.po
src/setup/po/ru.po
src/setup/po/rw.po
src/setup/po/sk.po
src/setup/po/sq.po
src/setup/po/sr.po
src/setup/po/su.po
src/setup/po/sv.po
src/setup/po/th.po
src/setup/po/tk.po
src/setup/po/tr.po
src/setup/po/uk.po
src/setup/po/uz@Latn.po
src/setup/po/vi.po
src/setup/po/zh.po
src/wio/EX-wio.menu [new file with mode: 0644]
src/wio/config/backup/includes/wio [new file with mode: 0644]
src/wio/images/add.png [new file with mode: 0644]
src/wio/images/back.png [new file with mode: 0644]
src/wio/images/blue.png [new file with mode: 0644]
src/wio/images/fqdn.png [new file with mode: 0644]
src/wio/images/graph.png [new file with mode: 0644]
src/wio/images/green.png [new file with mode: 0644]
src/wio/images/http.png [new file with mode: 0644]
src/wio/images/https.png [new file with mode: 0644]
src/wio/images/ip.png [new file with mode: 0644]
src/wio/images/mailgreenoff.png [new file with mode: 0644]
src/wio/images/mailgreenon.png [new file with mode: 0644]
src/wio/images/mailredoff.png [new file with mode: 0644]
src/wio/images/mailredon.png [new file with mode: 0644]
src/wio/images/no_graph.png [new file with mode: 0644]
src/wio/images/none.png [new file with mode: 0644]
src/wio/images/orange.png [new file with mode: 0644]
src/wio/images/ovpn.png [new file with mode: 0644]
src/wio/images/ovpnn2n.png [new file with mode: 0644]
src/wio/images/ovpnrw.png [new file with mode: 0644]
src/wio/images/red.png [new file with mode: 0644]
src/wio/images/refresh.png [new file with mode: 0644]
src/wio/images/vpn.png [new file with mode: 0644]
src/wio/images/vpnn2n.png [new file with mode: 0644]
src/wio/images/vpnrw.png [new file with mode: 0644]
src/wio/images/white.png [new file with mode: 0644]
src/wio/lang/wio.de.pl [new file with mode: 0644]
src/wio/lang/wio.en.pl [new file with mode: 0644]
src/wio/main/wio.conf [new file with mode: 0644]
src/wio/main/wio.pl [new file with mode: 0644]
src/wio/main/wiovpn.pl [new file with mode: 0644]
src/wio/wio [new file with mode: 0644]
src/wio/wio-graphs.pl [new file with mode: 0644]
src/wio/wio-lib.pl [new file with mode: 0644]
src/wio/wio.cgi [new file with mode: 0644]
src/wio/wiographs.cgi [new file with mode: 0644]
src/wio/wioips [new file with mode: 0644]

index e1edeff6af10dc12f7927c194d4ea09014d1c321..ba78c69f5a4310a3580dde858dcafcd6e696254c 100644 (file)
@@ -41,3 +41,4 @@
 /root/.bash_history
 /var/ipfire/ethernet/aliases
 /var/ipfire/ethernet/wireless
+/var/ipfire/captive/*
index f448c34befc7cf8af483f674f02665c0203d6a54..0577afe2809e62b3de113f96b3819ab04a43d917 100644 (file)
@@ -235,7 +235,13 @@ sub writehashpart
 sub age {
        my ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size,
                $atime, $mtime, $ctime, $blksize, $blocks) = stat $_[0];
-       my $totalsecs = time() - $mtime;
+       my $t = time() - $mtime;
+
+       return &format_time($t);
+}
+
+sub format_time($) {
+       my $totalsecs = shift;
        my @s = ();
 
        my $secs = $totalsecs % 60;
index c77e0a0665692e0948f265ad2d196ac43d6bdf86..2b09c4a9ff44ab4baf05b3e7439b218c35a28d2b 100644 (file)
@@ -179,4 +179,18 @@ sub FindWebLanguage() {
        return undef;
 }
 
+sub DetectBrowserLanguages() {
+       my $langs = $ENV{"HTTP_ACCEPT_LANGUAGE"};
+       my @results = ();
+
+       foreach my $lang (split /[,;]/, $langs) {
+               # Drop all q= arguments
+               next if ($lang =~ m/^q=/);
+
+               push(@results, $lang);
+       }
+
+       return @results;
+}
+
 1;
index 66f1ed554ab12041c31cc0b3163f9e1c8a75710f..93b8190305abb93a7d29e0c8a117e22d7e46b6e9 100644 (file)
@@ -374,6 +374,26 @@ sub wifi_get_signal_level($) {
 
        return $signal_level;
 }
+
+sub get_hardware_address($) {
+       my $ip_address = shift;
+       my $ret;
+
+       open(FILE, "/proc/net/arp") or die("Could not read ARP table");
+
+       while (<FILE>) {
+               my ($ip_addr, $hwtype, $flags, $hwaddr, $mask, $device) = split(/\s+/, $_);
+               if ($ip_addr eq $ip_address) {
+                       $ret = $hwaddr;
+                       last;
+               }
+       }
+
+       close(FILE);
+
+       return $ret;
+}
+
 1;
 
 # Remove the next line to enable the testsuite
index c6d8a725c73ec49c76a3cb807f31aed121654029..4561f4a243239b8b5bd3525c067dc6a70395489c 100644 (file)
@@ -65,6 +65,12 @@ HOME=/
 # Retry sending spooled mails regularly
 %hourly * /usr/sbin/dma -q
 
+# Cleanup captive clients
+%hourly * /usr/bin/captive-cleanup
+
+# Reload captive firewall rules
+%nightly * 23-1   /usr/local/bin/captivectrl >/dev/null
+
 # Cleanup the mail spool directory
 %weekly * * /usr/sbin/dma-cleanup-spool
 
index 5f7d0a6c743564810169f96104cea2107c376fb7..506fa237d4f8fb99d3c6c74b2e56569f7a1a888a 100644 (file)
@@ -26,6 +26,6 @@ su:S016:once:/sbin/sulogin
 5:2345:respawn:/sbin/agetty tty5 9600
 6:2345:respawn:/sbin/agetty tty6 9600
 # *** Uncomment for serial console
-#7:2345:respawn:/sbin/agetty ttyS0 115200
+#7:2345:respawn:/sbin/agetty ttyS0
 
 # End /etc/inittab
index 6593ca47dea17030ec73494eca2508aaa525e3d4..3b57e92303ea13d1c74e92d391ce20333b9cb18e 100644 (file)
@@ -48,8 +48,6 @@ close FILE;
 ############################################################################################################################
 ############################################################################################################################
 
-print "$ARGV[0] $ARGV[1]";
-
 if ( "$ARGV[0]" eq "mount" ) {
        system("/bin/cp -f /etc/fstab $fstab");
 
@@ -77,7 +75,7 @@ if ( "$ARGV[0]" eq "mount" ) {
        if ( ! `/bin/mount | /bin/fgrep $ARGV[1]` ) {
                system("/bin/cp -f /etc/fstab $fstab");
                system("/bin/fgrep -v $ARGV[1] <$fstab >/etc/fstab");
-               print "Succesfully umounted $ARGV[1].\n";
+               print "Successfully umounted $ARGV[1].\n";
                exit(0);
        } else {
                print "Can't umount $ARGV[1].\n";
index 9c1fb2b1001bf6e53ee5f79f112786b40e46fe27..14dcc735c39eae7e41977e6dcb3fe4c31f62e4d9 100644 (file)
@@ -65,7 +65,6 @@ Include /etc/httpd/conf/global.conf
 
 # associate MIME types with filename extensions
 TypesConfig /etc/mime.types
-DefaultType text/plain
 
 # global (server-wide) SSL configuration, that is not specific to 
 # any virtual host
@@ -80,8 +79,7 @@ Include /etc/httpd/conf/ssl-global.conf
 AccessFileName .htaccess
 # and never show them
 <Files ~ "^\.ht">
-    Order allow,deny
-    Deny from all
+    Require all denied
 </Files>
 
 # List of resources to look for when the client requests a directory
index e30f79b28a215d53ad5f3ca4704e8f0002a838ee..249221e8cba318c05492383f99f82caa127e7bd0 100644 (file)
@@ -1,8 +1,11 @@
 LoadModule authn_file_module /usr/lib/apache/mod_authn_file.so
+LoadModule unixd_module /usr/lib/apache/mod_unixd.so
 #LoadModule authn_dbm_module /usr/lib/apache/mod_authn_dbm.so
 #LoadModule authn_anon_module /usr/lib/apache/mod_authn_anon.so
 #LoadModule authn_dbd_module /usr/lib/apache/mod_authn_dbd.so
 #LoadModule authn_default_module /usr/lib/apache/mod_authn_default.so
+LoadModule authn_core_module /usr/lib/apache/mod_authn_core.so
+LoadModule authz_core_module /usr/lib/apache/mod_authz_core.so
 LoadModule authz_host_module /usr/lib/apache/mod_authz_host.so
 #LoadModule authz_groupfile_module /usr/lib/apache/mod_authz_groupfile.so
 LoadModule authz_user_module /usr/lib/apache/mod_authz_user.so
@@ -10,7 +13,7 @@ LoadModule authz_user_module /usr/lib/apache/mod_authz_user.so
 #LoadModule authz_owner_module /usr/lib/apache/mod_authz_owner.so
 #LoadModule authz_default_module /usr/lib/apache/mod_authz_default.so
 LoadModule auth_basic_module /usr/lib/apache/mod_auth_basic.so
-LoadModule auth_digest_module /usr/lib/apache/mod_auth_digest.so
+#LoadModule auth_digest_module /usr/lib/apache/mod_auth_digest.so
 #LoadModule dbd_module /usr/lib/apache/mod_dbd.so
 #LoadModule dumpio_module /usr/lib/apache/mod_dumpio.so
 #LoadModule ext_filter_module /usr/lib/apache/mod_ext_filter.so
@@ -33,10 +36,10 @@ LoadModule setenvif_module /usr/lib/apache/mod_setenvif.so
 LoadModule mime_module /usr/lib/apache/mod_mime.so
 #LoadModule dav_module /usr/lib/apache/mod_dav.so
 #LoadModule status_module /usr/lib/apache/mod_status.so
-LoadModule autoindex_module /usr/lib/apache/mod_autoindex.so
+#LoadModule autoindex_module /usr/lib/apache/mod_autoindex.so
 #LoadModule asis_module /usr/lib/apache/mod_asis.so
 #LoadModule info_module /usr/lib/apache/mod_info.so
-LoadModule cgi_module /usr/lib/apache/mod_cgi.so
+LoadModule cgid_module /usr/lib/apache/mod_cgid.so
 #LoadModule dav_fs_module /usr/lib/apache/mod_dav_fs.so
 #LoadModule vhost_alias_module /usr/lib/apache/mod_vhost_alias.so
 #LoadModule negotiation_module /usr/lib/apache/mod_negotiation.so
@@ -47,5 +50,6 @@ LoadModule dir_module /usr/lib/apache/mod_dir.so
 #LoadModule userdir_module /usr/lib/apache/mod_userdir.so
 LoadModule alias_module /usr/lib/apache/mod_alias.so
 LoadModule rewrite_module /usr/lib/apache/mod_rewrite.so
+LoadModule socache_shmcb_module /usr/lib/apache/mod_socache_shmcb.so
 LoadModule ssl_module /usr/lib/apache/mod_ssl.so
 LoadModule php5_module /usr/lib/apache/libphp5.so
index 90410186d9f2495f5888ba1c19b29cb7930fdaa0..5642a1e4409c81698e40a82b3c65233effea56e0 100644 (file)
@@ -17,10 +17,11 @@ MaxKeepAliveRequests 100
 #
 KeepAliveTimeout 15
 
-MinSpareServers 1
-MaxSpareServers 10
+MinSpareThreads 1
+MaxSpareThreads 20
 StartServers 2
-MaxClients 256
+MaxRequestWorkers 256
+ThreadsPerChild 16
 
 #
 # The following directives modify normal HTTP response behavior to
index 9cf4f8150bd133a5076c7587983a5ed1ca62f8ce..154815cea5202279e66c75ec31eaa1ec702b8cfd 100644 (file)
        SSLSessionCache         shmcb:/var/log/httpd/ssl_scache(512000)
        SSLSessionCacheTimeout  900
 
-       #   Semaphore:
-       #   Configure the path to the mutual exclusion semaphore the
-       #   SSL engine uses internally for inter-process synchronization. 
-       SSLMutex  file:/var/log/httpd/ssl_mutex
-
        #   Pseudo Random Number Generator (PRNG):
        #   Configure one or more sources to seed the PRNG of the 
        #   SSL library. The seed data should be of good random quality.
diff --git a/config/httpd/vhosts.d/captive.conf b/config/httpd/vhosts.d/captive.conf
new file mode 100644 (file)
index 0000000..e4e1d78
--- /dev/null
@@ -0,0 +1,30 @@
+Listen 1013
+
+<VirtualHost *:1013>
+       DocumentRoot /srv/web/ipfire/html/captive
+
+       # Close all connections as soon as a reply has been sent.
+       # Most browsers open loads of connections which then causes
+       # the access page being loaded again after a correct coupon
+       # code was entered.
+       KeepAlive Off
+
+       ScriptAlias /cgi-bin/ /srv/web/ipfire/cgi-bin/captive/
+       Alias /assets/ /srv/web/ipfire/html/captive/assets/
+
+       Alias /favicon.ico /srv/web/ipfire/html/captive/assets/favicon.ico
+
+       # All unknown URIs will be redirected to the first
+       # redirector script.
+       ScriptAliasMatch .* /srv/web/ipfire/cgi-bin/captive/redirect.cgi
+
+       <Directory /srv/web/ipfire/cgi-bin/captive>
+               Options ExecCGI
+               Require all granted
+       </Directory>
+
+       <Directory /srv/web/ipfire/html/captive>
+               Options +FollowSymlinks
+               Require all granted
+       </Directory>
+</VirtualHost>
index daac75742dd095ea8e82003ff6d74099d5b98aca..c9ccd5be5cd13121666524e2cab30b55398a0cb5 100644 (file)
@@ -9,22 +9,26 @@
     TransferLog /var/log/httpd/access_log
     SSLEngine on
     SSLProtocol all -SSLv2 -SSLv3
-    SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128:AES256:HIGH:!RC4:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK
+    SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES128-SHA256:AES128-SHA:CAMELLIA128-SHA:AES256-GCM-SHA384:AES256-SHA256:AES256-SHA:CAMELLIA256-SHA
     SSLHonorCipherOrder on
     SSLCertificateFile /etc/httpd/server.crt
     SSLCertificateKeyFile /etc/httpd/server.key
+    SSLCertificateFile /etc/httpd/server-ecdsa.crt
+    SSLCertificateKeyFile /etc/httpd/server-ecdsa.key
 
     <Directory /srv/web/ipfire/html>
         Options ExecCGI
         AllowOverride None
-        Order allow,deny
-        Allow from all
+        Require all granted
     </Directory>
     <DirectoryMatch "/srv/web/ipfire/html/(graphs|sgraph)">
         AuthName "IPFire - Restricted"
         AuthType Basic
         AuthUserFile /var/ipfire/auth/users
-        Require user admin
+        <RequireAll>
+            Require user admin
+            Require ssl
+        </RequireAll>
     </DirectoryMatch>
     ScriptAlias /cgi-bin/ /srv/web/ipfire/cgi-bin/
     <Directory /srv/web/ipfire/cgi-bin>
         AuthName "IPFire - Restricted"
         AuthType Basic
         AuthUserFile /var/ipfire/auth/users
-        Require user admin
-         <Files chpasswd.cgi>
-            Satisfy Any
-            Allow from All
+        <RequireAll>
+            Require user admin
+            Require ssl
+        </RequireAll>
+        <Files chpasswd.cgi>
+            Require all granted
         </Files>
         <Files webaccess.cgi>
-            Satisfy Any
-            Allow from All
-        </Files>
-        <Files credits.cgi>
-            Satisfy Any
-            Allow from All
+            Require all granted
         </Files>
-        <Files dial.cgi>
-            Require user admin
-        </Files>
-    </Directory>
-    <Directory /srv/web/ipfire/cgi-bin/dial>
-        AllowOverride None
-        Options None
-        AuthName "IPFire - Restricted"
-        AuthType Basic
-        AuthUserFile /var/ipfire/auth/users
-        Require user dial admin
     </Directory>
     <Files ~ "\.(cgi|shtml?)$">
        SSLOptions +StdEnvVars
        <Directory /var/updatecache>
                 Options ExecCGI
                 AllowOverride None
-                Order deny,allow
-                Allow from all
+                Require all granted
        </Directory>
 
     Alias /repository/ /var/urlrepo/
        <Directory /var/urlrepo>
                 Options ExecCGI
                 AllowOverride None
-                Order deny,allow
-                Allow from all
+                Require all granted
        </Directory>
 
     Alias /proxy-reports/ /var/log/sarg/
@@ -94,6 +82,9 @@
         AuthName "IPFire - Restricted"
         AuthType Basic
         AuthUserFile /var/ipfire/auth/users
-        Require user admin
+        <RequireAll>
+            Require user admin
+            Require ssl
+        </RequireAll>
     </Directory>
 </VirtualHost>
index 8783c632bb473a4d3c8d6a25dc62b5871edcec97..be15cd041cf274905e73532452907085d6ba904a 100644 (file)
@@ -9,60 +9,32 @@
     <Directory /srv/web/ipfire/html>
         Options ExecCGI
         AllowOverride None
-        Order allow,deny
-        Allow from all
+        Require all granted
     </Directory>
     <DirectoryMatch "/srv/web/ipfire/html/(graphs|sgraph)">
-        AuthName "IPFire - Restricted"
-        AuthType Basic
-        AuthUserFile /var/ipfire/auth/users
-        Require user admin
+        Options SymLinksIfOwnerMatch
+        RewriteEngine on
+        RewriteCond %{HTTPS} off
+        RewriteRule (.*) https://%{SERVER_NAME}:444/$1 [R=301,L]
     </DirectoryMatch>
     ScriptAlias /cgi-bin/ /srv/web/ipfire/cgi-bin/
     <Directory /srv/web/ipfire/cgi-bin>
-        AllowOverride None
-        Options None
-        AuthName "IPFire - Restricted"
-        AuthType Basic
-        AuthUserFile /var/ipfire/auth/users
-        Require user admin
-         <Files chpasswd.cgi>
-            Satisfy Any
-            Allow from All
-        </Files>
-        <Files webaccess.cgi>
-            Satisfy Any
-            Allow from All
-        </Files>
-        <Files credits.cgi>
-            Satisfy Any
-            Allow from All
-        </Files>
-        <Files dial.cgi>
-            Require user admin
-        </Files>
-    </Directory>
-    <Directory /srv/web/ipfire/cgi-bin/dial>
-        AllowOverride None
-        Options None
-        AuthName "IPFire - Restricted"
-        AuthType Basic
-        AuthUserFile /var/ipfire/auth/users
-        Require user dial admin
+        Options SymLinksIfOwnerMatch
+        RewriteEngine on
+        RewriteCond %{HTTPS} off
+        RewriteRule (.*) https://%{SERVER_NAME}:444/$1 [R=301,L]
     </Directory>
     Alias /updatecache/ /var/updatecache/
        <Directory /var/updatecache>
                 Options ExecCGI
                 AllowOverride None
-                Order deny,allow
-                Allow from all
+                Require all granted
        </Directory>
     Alias /repository/ /var/urlrepo/
        <Directory /var/urlrepo>
                 Options ExecCGI
                 AllowOverride None
-                Order deny,allow
-                Allow from all
+                Require all granted
        </Directory>
     Alias /wpad.dat /srv/web/ipfire/html/proxy.pac
 </VirtualHost>
index 78bcd3b00ebbc5ca4439edb0d701d7e7a39ec77f..8a320d793b8058c3f78f856fdd2682bb4ad9d966 100644 (file)
@@ -16,11 +16,8 @@ ScriptAlias /nagios/cgi-bin "/usr/share/nagios/cgi-bin"
 #  SSLRequireSSL
    Options ExecCGI
    AllowOverride None
-   Order allow,deny
-   Allow from all
-#  Order deny,allow
-#  Deny from all
-#  Allow from 127.0.0.1
+#  Require all granted
+#  Require ip 127.0.0.1
    AuthName "Nagios Access"
    AuthType Basic
    AuthUserFile /etc/nagios/htpasswd.users
@@ -33,11 +30,8 @@ Alias /nagios "/usr/share/nagios"
 #  SSLRequireSSL
    Options None
    AllowOverride None
-   Order allow,deny
-   Allow from all
-#  Order deny,allow
-#  Deny from all
-#  Allow from 127.0.0.1
+#  Require all granted
+#  Require ip 127.0.0.1
    AuthName "Nagios Access"
    AuthType Basic
    AuthUserFile /etc/nagios/htpasswd.users
index 6e7aaef40ebd8116d5f4d6c51f771170915f4078..e91be3978f4c3ce5bb36a03073ec7654269e4226 100644 (file)
@@ -9,8 +9,7 @@ Listen 1001
        <Directory /srv/web/openmailadmin>
                Options +FollowSymlinks
                AllowOverride None
-               Order allow,deny
-               Allow from all
+               Require all granted
        </Directory>
        
 </VirtualHost>
index 3771812d1c9ce8cea01097bcf254b4325dcfc4c5..6060b1b0156e2551f4222eb8999c04f010334f90 100644 (file)
@@ -15,9 +15,6 @@ Listen 1010
                AuthType Basic
                AuthUserFile /etc/icinga/htpasswd.users
 
-               Order allow,deny
-               Allow from all
-
                Require valid-user
        </Directory>
 
@@ -29,9 +26,6 @@ Listen 1010
                AuthType Basic
                AuthUserFile /etc/icinga/htpasswd.users
 
-               Order allow,deny
-               Allow from all
-
                Require valid-user
        </Directory>
 </VirtualHost>
index 8e1336a3b6957e0c3756bd504188b63c2cf1ec0f..137fd686c3f9ad73f17cc401148c20c343390aad 100644 (file)
                                 'title' => "$Lang::tr{'dhcp server'}",
                                 'enabled' => 1,
                                 };
+       $subnetwork->{'32.captive'} = {'caption' => $Lang::tr{'Captive menu'},
+                               'uri' => '/cgi-bin/captive.cgi',
+                               'title' => $Lang::tr{'Captive menu'},
+                               'enabled' => 1,
+                               };
     $subnetwork->{'40.scheduler'} = {
                                 'caption' => $Lang::tr{'connscheduler'},
                                 'uri' => '/cgi-bin/connscheduler.cgi',
index 6161d4d208a5a299a1c8b184b6d01ea25e0cb473..3805d382a2a3cf57f6070e4e85ee61f7f6578bde 100644 (file)
@@ -16,11 +16,8 @@ ScriptAlias /nagios/cgi-bin "/usr/share/nagios/cgi-bin"
 #  SSLRequireSSL
    Options ExecCGI
    AllowOverride None
-   Order allow,deny
-   Allow from all
-#  Order deny,allow
-#  Deny from all
-#  Allow from 127.0.0.1
+#  Require all granted
+#  Require ip 127.0.0.1
    AuthName "Nagios Access"
    AuthType Basic
    AuthUserFile /etc/nagios/htpasswd.users
@@ -33,11 +30,8 @@ Alias /nagios "/usr/share/nagios"
 #  SSLRequireSSL
    Options None
    AllowOverride None
-   Order allow,deny
-   Allow from all
-#  Order deny,allow
-#  Deny from all
-#  Allow from 127.0.0.1
+#  Require all granted
+#  Require ip 127.0.0.1
    AuthName "Nagios Access"
    AuthType Basic
    AuthUserFile /etc/nagios/htpasswd.users
@@ -50,8 +44,7 @@ Alias /nagiosql "/usr/share/nagiosql"
    include /etc/httpd/conf/conf.d/php*.conf
    Options None
    AllowOverride None
-   Order allow,deny
-   Allow from all
+   Require all granted
 </Directory>
 
 </VirtualHost>
index ab026c10951f98afa6e35d15b3ea7620501532ef..40daf2a0a886dd4957df00c3303d3504f8cb0bc0 100644 (file)
@@ -77,6 +77,8 @@ basicConstraints              = CA:FALSE
 nsComment                      = "OpenSSL Generated Certificate"
 subjectKeyIdentifier           = hash
 authorityKeyIdentifier         = keyid,issuer:always
+extendedKeyUsage               = clientAuth
+keyUsage                       = digitalSignature
 
 [ server ]
 
@@ -86,6 +88,8 @@ nsCertType                    = server
 nsComment                      = "OpenSSL Generated Server Certificate"
 subjectKeyIdentifier           = hash
 authorityKeyIdentifier         = keyid,issuer:always 
+extendedKeyUsage               = serverAuth
+keyUsage                       = digitalSignature, keyEncipherment
 
 [ v3_req ]
 basicConstraints               = CA:FALSE
index 08f58c36c043625918ca1927970751123c06d6df..d4332ec55bf93c362ac286655405075758c6eacb 100644 (file)
@@ -15,7 +15,6 @@ Listen 1011
        <Directory /srv/web/owncloud>
                Options Indexes FollowSymlinks MultiViews
                AllowOverride ALL
-               Order allow,deny
-               Allow from all
+               Require all granted
        </Directory>
 </VirtualHost>
index 6e820949663007bb3be7f4e8a413693b461d0925..2e73507d495a7482dace4b535ab2b5f94ef91f6a 100644 (file)
@@ -533,7 +533,7 @@ doc_root =
 user_dir =
 
 ; Directory in which the loadable extensions (modules) reside.
-extension_dir = "/usr/lib/php/extensions/no-debug-non-zts-20090626/"
+extension_dir = "/usr/lib/php/extensions/no-debug-zts-20090626/"
 
 ; Whether or not to enable the dl() function.  The dl() function does NOT work
 ; properly in multithreaded servers, such as IIS or Zeus, and is automatically
index 06824e1bbf795d26e70a728da113d8b8dbf40da4..3956019ef816fad8067330bf96c9e830ffdbaa01 100644 (file)
@@ -9,8 +9,7 @@ Listen 1003
        <Directory /srv/web/phpSANE>
                Options None
                AllowOverride None
-               Order allow,deny
-               Allow from all
+               Require all granted
        </Directory>
        
 </VirtualHost>
index 7e33a155eee1f826334845cdc685ded290335058..040b482141614b12f02cf82df0d4538d8663daa8 100644 (file)
@@ -15,6 +15,7 @@ etc/httpd/conf/default-server.conf
 #etc/httpd/conf/extra/httpd-ssl.conf
 #etc/httpd/conf/extra/httpd-userdir.conf
 #etc/httpd/conf/extra/httpd-vhosts.conf
+#etc/httpd/conf/extra/proxy-html.conf
 etc/httpd/conf/global.conf
 etc/httpd/conf/hostname.conf
 etc/httpd/conf/httpd.conf
@@ -36,19 +37,34 @@ etc/httpd/conf/mod_log_config.conf
 #etc/httpd/conf/original/extra/httpd-ssl.conf
 #etc/httpd/conf/original/extra/httpd-userdir.conf
 #etc/httpd/conf/original/extra/httpd-vhosts.conf
+#etc/httpd/conf/original/extra/proxy-html.conf
 #etc/httpd/conf/original/httpd.conf
 etc/httpd/conf/server-tuning.conf
 etc/httpd/conf/ssl-global.conf
 etc/httpd/conf/uid.conf
 #etc/httpd/conf/vhosts.d
+etc/httpd/conf/vhosts.d/captive.conf
 etc/httpd/conf/vhosts.d/ipfire-interface-ssl.conf
 etc/httpd/conf/vhosts.d/ipfire-interface.conf
 #etc/httpd/conf/vhosts.d/nagios.conf
 #etc/httpd/conf/vhosts.d/openmailadmin.conf
 #srv/web
 #srv/web/ipfire
+#srv/web/ipfire/manual/howto/access.html.es
+#srv/web/ipfire/manual/howto/auth.html.es
+#srv/web/ipfire/manual/howto/cgi.html.es
+#srv/web/ipfire/manual/howto/htaccess.html.es
+#srv/web/ipfire/manual/howto/http2.html.es
+#srv/web/ipfire/manual/howto/http2.html.fr
+#srv/web/ipfire/manual/howto/index.html.es
+#srv/web/ipfire/manual/howto/public_html.html.es
+#srv/web/ipfire/manual/mod/directive-dict.html.es
+#srv/web/ipfire/manual/mod/mod_brotli.html
+#srv/web/ipfire/manual/mod/mod_brotli.html.en
 #srv/web/ipfire/cgi-bin
 #srv/web/ipfire/cgi-bin/printenv
+#srv/web/ipfire/cgi-bin/printenv.vbs
+#srv/web/ipfire/cgi-bin/printenv.wsf
 #srv/web/ipfire/cgi-bin/test-cgi
 #srv/web/ipfire/error
 #srv/web/ipfire/error/HTTP_BAD_GATEWAY.html.var
@@ -76,6 +92,8 @@ etc/httpd/conf/vhosts.d/ipfire-interface.conf
 #srv/web/ipfire/error/include/top.html
 #srv/web/ipfire/htdocs
 #srv/web/ipfire/htdocs/index.html
+#srv/web/ipfire/html
+srv/web/ipfire/html/captive
 #srv/web/ipfire/icons
 #srv/web/ipfire/icons/README
 #srv/web/ipfire/icons/README.html
@@ -87,9 +105,9 @@ etc/httpd/conf/vhosts.d/ipfire-interface.conf
 #srv/web/ipfire/icons/alert.red.png
 #srv/web/ipfire/icons/apache_pb.gif
 #srv/web/ipfire/icons/apache_pb.png
+#srv/web/ipfire/icons/apache_pb.svg
 #srv/web/ipfire/icons/apache_pb2.gif
 #srv/web/ipfire/icons/apache_pb2.png
-#srv/web/ipfire/icons/apache_pb2_ani.gif
 #srv/web/ipfire/icons/back.gif
 #srv/web/ipfire/icons/back.png
 #srv/web/ipfire/icons/ball.gray.gif
@@ -168,6 +186,23 @@ etc/httpd/conf/vhosts.d/ipfire-interface.conf
 #srv/web/ipfire/icons/link.png
 #srv/web/ipfire/icons/movie.gif
 #srv/web/ipfire/icons/movie.png
+#srv/web/ipfire/icons/odf6odb.png
+#srv/web/ipfire/icons/odf6odc.png
+#srv/web/ipfire/icons/odf6odf.png
+#srv/web/ipfire/icons/odf6odg.png
+#srv/web/ipfire/icons/odf6odi.png
+#srv/web/ipfire/icons/odf6odm.png
+#srv/web/ipfire/icons/odf6odp.png
+#srv/web/ipfire/icons/odf6ods.png
+#srv/web/ipfire/icons/odf6odt.png
+#srv/web/ipfire/icons/odf6otc.png
+#srv/web/ipfire/icons/odf6otf.png
+#srv/web/ipfire/icons/odf6otg.png
+#srv/web/ipfire/icons/odf6oth.png
+#srv/web/ipfire/icons/odf6oti.png
+#srv/web/ipfire/icons/odf6otp.png
+#srv/web/ipfire/icons/odf6ots.png
+#srv/web/ipfire/icons/odf6ott.png
 #srv/web/ipfire/icons/p.gif
 #srv/web/ipfire/icons/p.png
 #srv/web/ipfire/icons/patch.gif
@@ -227,12 +262,12 @@ etc/httpd/conf/vhosts.d/ipfire-interface.conf
 #srv/web/ipfire/icons/small/compressed.png
 #srv/web/ipfire/icons/small/continued.gif
 #srv/web/ipfire/icons/small/continued.png
-#srv/web/ipfire/icons/small/dir.gif
-#srv/web/ipfire/icons/small/dir.png
-#srv/web/ipfire/icons/small/dir2.gif
-#srv/web/ipfire/icons/small/dir2.png
 #srv/web/ipfire/icons/small/doc.gif
 #srv/web/ipfire/icons/small/doc.png
+#srv/web/ipfire/icons/small/folder.gif
+#srv/web/ipfire/icons/small/folder.png
+#srv/web/ipfire/icons/small/folder2.gif
+#srv/web/ipfire/icons/small/folder2.png
 #srv/web/ipfire/icons/small/forward.gif
 #srv/web/ipfire/icons/small/forward.png
 #srv/web/ipfire/icons/small/generic.gif
@@ -279,6 +314,7 @@ etc/httpd/conf/vhosts.d/ipfire-interface.conf
 #srv/web/ipfire/icons/sphere1.png
 #srv/web/ipfire/icons/sphere2.gif
 #srv/web/ipfire/icons/sphere2.png
+#srv/web/ipfire/icons/svg.png
 #srv/web/ipfire/icons/tar.gif
 #srv/web/ipfire/icons/tar.png
 #srv/web/ipfire/icons/tex.gif
@@ -299,7 +335,9 @@ etc/httpd/conf/vhosts.d/ipfire-interface.conf
 #srv/web/ipfire/icons/world1.png
 #srv/web/ipfire/icons/world2.gif
 #srv/web/ipfire/icons/world2.png
+#srv/web/ipfire/icons/xml.png
 #srv/web/ipfire/manual
+#srv/web/ipfire/manual/BUILDING
 #srv/web/ipfire/manual/LICENSE
 #srv/web/ipfire/manual/bind.html
 #srv/web/ipfire/manual/bind.html.de
@@ -329,6 +367,7 @@ etc/httpd/conf/vhosts.d/ipfire-interface.conf
 #srv/web/ipfire/manual/custom-error.html
 #srv/web/ipfire/manual/custom-error.html.en
 #srv/web/ipfire/manual/custom-error.html.es
+#srv/web/ipfire/manual/custom-error.html.fr
 #srv/web/ipfire/manual/custom-error.html.ja.utf8
 #srv/web/ipfire/manual/custom-error.html.ko.euc-kr
 #srv/web/ipfire/manual/custom-error.html.tr.utf8
@@ -347,31 +386,45 @@ etc/httpd/conf/vhosts.d/ipfire-interface.conf
 #srv/web/ipfire/manual/developer/index.html
 #srv/web/ipfire/manual/developer/index.html.en
 #srv/web/ipfire/manual/developer/index.html.zh-cn.utf8
+#srv/web/ipfire/manual/developer/modguide.html
+#srv/web/ipfire/manual/developer/modguide.html.en
 #srv/web/ipfire/manual/developer/modules.html
 #srv/web/ipfire/manual/developer/modules.html.en
 #srv/web/ipfire/manual/developer/modules.html.ja.utf8
+#srv/web/ipfire/manual/developer/new_api_2_4.html
+#srv/web/ipfire/manual/developer/new_api_2_4.html.en
+#srv/web/ipfire/manual/developer/output-filters.html
+#srv/web/ipfire/manual/developer/output-filters.html.en
 #srv/web/ipfire/manual/developer/request.html
 #srv/web/ipfire/manual/developer/request.html.en
 #srv/web/ipfire/manual/developer/thread_safety.html
 #srv/web/ipfire/manual/developer/thread_safety.html.en
 #srv/web/ipfire/manual/dns-caveats.html
 #srv/web/ipfire/manual/dns-caveats.html.en
+#srv/web/ipfire/manual/dns-caveats.html.fr
 #srv/web/ipfire/manual/dns-caveats.html.ja.utf8
 #srv/web/ipfire/manual/dns-caveats.html.ko.euc-kr
 #srv/web/ipfire/manual/dns-caveats.html.tr.utf8
 #srv/web/ipfire/manual/dso.html
 #srv/web/ipfire/manual/dso.html.en
+#srv/web/ipfire/manual/dso.html.fr
 #srv/web/ipfire/manual/dso.html.ja.utf8
 #srv/web/ipfire/manual/dso.html.ko.euc-kr
 #srv/web/ipfire/manual/dso.html.tr.utf8
 #srv/web/ipfire/manual/env.html
 #srv/web/ipfire/manual/env.html.en
+#srv/web/ipfire/manual/env.html.fr
 #srv/web/ipfire/manual/env.html.ja.utf8
 #srv/web/ipfire/manual/env.html.ko.euc-kr
 #srv/web/ipfire/manual/env.html.tr.utf8
+#srv/web/ipfire/manual/expr.html
+#srv/web/ipfire/manual/expr.html.en
+#srv/web/ipfire/manual/expr.html.fr
 #srv/web/ipfire/manual/faq
 #srv/web/ipfire/manual/faq/index.html
 #srv/web/ipfire/manual/faq/index.html.en
+#srv/web/ipfire/manual/faq/index.html.es
+#srv/web/ipfire/manual/faq/index.html.fr
 #srv/web/ipfire/manual/faq/index.html.tr.utf8
 #srv/web/ipfire/manual/faq/index.html.zh-cn.utf8
 #srv/web/ipfire/manual/filter.html
@@ -381,6 +434,9 @@ etc/httpd/conf/vhosts.d/ipfire-interface.conf
 #srv/web/ipfire/manual/filter.html.ja.utf8
 #srv/web/ipfire/manual/filter.html.ko.euc-kr
 #srv/web/ipfire/manual/filter.html.tr.utf8
+#srv/web/ipfire/manual/getting-started.html
+#srv/web/ipfire/manual/getting-started.html.en
+#srv/web/ipfire/manual/getting-started.html.fr
 #srv/web/ipfire/manual/glossary.html
 #srv/web/ipfire/manual/glossary.html.de
 #srv/web/ipfire/manual/glossary.html.en
@@ -395,12 +451,12 @@ etc/httpd/conf/vhosts.d/ipfire-interface.conf
 #srv/web/ipfire/manual/handler.html.fr
 #srv/web/ipfire/manual/handler.html.ja.utf8
 #srv/web/ipfire/manual/handler.html.ko.euc-kr
-#srv/web/ipfire/manual/handler.html.ru.koi8-r
 #srv/web/ipfire/manual/handler.html.tr.utf8
 #srv/web/ipfire/manual/handler.html.zh-cn.utf8
 #srv/web/ipfire/manual/howto
 #srv/web/ipfire/manual/howto/access.html
 #srv/web/ipfire/manual/howto/access.html.en
+#srv/web/ipfire/manual/howto/access.html.fr
 #srv/web/ipfire/manual/howto/auth.html
 #srv/web/ipfire/manual/howto/auth.html.en
 #srv/web/ipfire/manual/howto/auth.html.fr
@@ -409,6 +465,7 @@ etc/httpd/conf/vhosts.d/ipfire-interface.conf
 #srv/web/ipfire/manual/howto/auth.html.tr.utf8
 #srv/web/ipfire/manual/howto/cgi.html
 #srv/web/ipfire/manual/howto/cgi.html.en
+#srv/web/ipfire/manual/howto/cgi.html.fr
 #srv/web/ipfire/manual/howto/cgi.html.ja.utf8
 #srv/web/ipfire/manual/howto/cgi.html.ko.euc-kr
 #srv/web/ipfire/manual/howto/htaccess.html
@@ -417,22 +474,35 @@ etc/httpd/conf/vhosts.d/ipfire-interface.conf
 #srv/web/ipfire/manual/howto/htaccess.html.ja.utf8
 #srv/web/ipfire/manual/howto/htaccess.html.ko.euc-kr
 #srv/web/ipfire/manual/howto/htaccess.html.pt-br
+#srv/web/ipfire/manual/howto/http2.html
+#srv/web/ipfire/manual/howto/http2.html.en
 #srv/web/ipfire/manual/howto/index.html
 #srv/web/ipfire/manual/howto/index.html.en
+#srv/web/ipfire/manual/howto/index.html.fr
 #srv/web/ipfire/manual/howto/index.html.ja.utf8
 #srv/web/ipfire/manual/howto/index.html.ko.euc-kr
 #srv/web/ipfire/manual/howto/index.html.zh-cn.utf8
 #srv/web/ipfire/manual/howto/public_html.html
 #srv/web/ipfire/manual/howto/public_html.html.en
+#srv/web/ipfire/manual/howto/public_html.html.fr
 #srv/web/ipfire/manual/howto/public_html.html.ja.utf8
 #srv/web/ipfire/manual/howto/public_html.html.ko.euc-kr
 #srv/web/ipfire/manual/howto/public_html.html.tr.utf8
+#srv/web/ipfire/manual/howto/reverse_proxy.html
+#srv/web/ipfire/manual/howto/reverse_proxy.html.en
 #srv/web/ipfire/manual/howto/ssi.html
 #srv/web/ipfire/manual/howto/ssi.html.en
+#srv/web/ipfire/manual/howto/ssi.html.fr
 #srv/web/ipfire/manual/howto/ssi.html.ja.utf8
 #srv/web/ipfire/manual/howto/ssi.html.ko.euc-kr
 #srv/web/ipfire/manual/images
 #srv/web/ipfire/manual/images/apache_header.gif
+#srv/web/ipfire/manual/images/bal-man-b.png
+#srv/web/ipfire/manual/images/bal-man-w.png
+#srv/web/ipfire/manual/images/bal-man.png
+#srv/web/ipfire/manual/images/build_a_mod_2.png
+#srv/web/ipfire/manual/images/build_a_mod_3.png
+#srv/web/ipfire/manual/images/build_a_mod_4.png
 #srv/web/ipfire/manual/images/caching_fig1.gif
 #srv/web/ipfire/manual/images/caching_fig1.png
 #srv/web/ipfire/manual/images/caching_fig1.tr.png
@@ -456,7 +526,9 @@ etc/httpd/conf/vhosts.d/ipfire-interface.conf
 #srv/web/ipfire/manual/images/mod_rewrite_fig2.gif
 #srv/web/ipfire/manual/images/mod_rewrite_fig2.png
 #srv/web/ipfire/manual/images/pixel.gif
+#srv/web/ipfire/manual/images/reverse-proxy-arch.png
 #srv/web/ipfire/manual/images/rewrite_backreferences.png
+#srv/web/ipfire/manual/images/rewrite_process_uri.png
 #srv/web/ipfire/manual/images/rewrite_rule_flow.png
 #srv/web/ipfire/manual/images/right.gif
 #srv/web/ipfire/manual/images/ssl_intro_fig1.gif
@@ -470,6 +542,7 @@ etc/httpd/conf/vhosts.d/ipfire-interface.conf
 #srv/web/ipfire/manual/images/syntax_rewriterule.png
 #srv/web/ipfire/manual/images/up.gif
 #srv/web/ipfire/manual/index.html
+#srv/web/ipfire/manual/index.html.da
 #srv/web/ipfire/manual/index.html.de
 #srv/web/ipfire/manual/index.html.en
 #srv/web/ipfire/manual/index.html.es
@@ -494,7 +567,6 @@ etc/httpd/conf/vhosts.d/ipfire-interface.conf
 #srv/web/ipfire/manual/invoking.html.fr
 #srv/web/ipfire/manual/invoking.html.ja.utf8
 #srv/web/ipfire/manual/invoking.html.ko.euc-kr
-#srv/web/ipfire/manual/invoking.html.ru.koi8-r
 #srv/web/ipfire/manual/invoking.html.tr.utf8
 #srv/web/ipfire/manual/license.html
 #srv/web/ipfire/manual/license.html.en
@@ -507,39 +579,38 @@ etc/httpd/conf/vhosts.d/ipfire-interface.conf
 #srv/web/ipfire/manual/misc
 #srv/web/ipfire/manual/misc/index.html
 #srv/web/ipfire/manual/misc/index.html.en
+#srv/web/ipfire/manual/misc/index.html.fr
 #srv/web/ipfire/manual/misc/index.html.ko.euc-kr
 #srv/web/ipfire/manual/misc/index.html.tr.utf8
 #srv/web/ipfire/manual/misc/index.html.zh-cn.utf8
 #srv/web/ipfire/manual/misc/password_encryptions.html
 #srv/web/ipfire/manual/misc/password_encryptions.html.en
+#srv/web/ipfire/manual/misc/password_encryptions.html.fr
 #srv/web/ipfire/manual/misc/perf-tuning.html
 #srv/web/ipfire/manual/misc/perf-tuning.html.en
+#srv/web/ipfire/manual/misc/perf-tuning.html.fr
 #srv/web/ipfire/manual/misc/perf-tuning.html.ko.euc-kr
 #srv/web/ipfire/manual/misc/perf-tuning.html.tr.utf8
 #srv/web/ipfire/manual/misc/relevant_standards.html
 #srv/web/ipfire/manual/misc/relevant_standards.html.en
+#srv/web/ipfire/manual/misc/relevant_standards.html.fr
 #srv/web/ipfire/manual/misc/relevant_standards.html.ko.euc-kr
-#srv/web/ipfire/manual/misc/rewriteguide.html
-#srv/web/ipfire/manual/misc/rewriteguide.html.en
-#srv/web/ipfire/manual/misc/rewriteguide.html.ko.euc-kr
 #srv/web/ipfire/manual/misc/security_tips.html
 #srv/web/ipfire/manual/misc/security_tips.html.en
+#srv/web/ipfire/manual/misc/security_tips.html.fr
 #srv/web/ipfire/manual/misc/security_tips.html.ko.euc-kr
 #srv/web/ipfire/manual/misc/security_tips.html.tr.utf8
 #srv/web/ipfire/manual/mod
-#srv/web/ipfire/manual/mod/beos.html
-#srv/web/ipfire/manual/mod/beos.html.de
-#srv/web/ipfire/manual/mod/beos.html.en
-#srv/web/ipfire/manual/mod/beos.html.es
-#srv/web/ipfire/manual/mod/beos.html.ko.euc-kr
 #srv/web/ipfire/manual/mod/core.html
 #srv/web/ipfire/manual/mod/core.html.de
 #srv/web/ipfire/manual/mod/core.html.en
+#srv/web/ipfire/manual/mod/core.html.es
 #srv/web/ipfire/manual/mod/core.html.fr
 #srv/web/ipfire/manual/mod/core.html.ja.utf8
 #srv/web/ipfire/manual/mod/core.html.tr.utf8
 #srv/web/ipfire/manual/mod/directive-dict.html
 #srv/web/ipfire/manual/mod/directive-dict.html.en
+#srv/web/ipfire/manual/mod/directive-dict.html.fr
 #srv/web/ipfire/manual/mod/directive-dict.html.ja.utf8
 #srv/web/ipfire/manual/mod/directive-dict.html.ko.euc-kr
 #srv/web/ipfire/manual/mod/directive-dict.html.tr.utf8
@@ -547,33 +618,45 @@ etc/httpd/conf/vhosts.d/ipfire-interface.conf
 #srv/web/ipfire/manual/mod/directives.html.de
 #srv/web/ipfire/manual/mod/directives.html.en
 #srv/web/ipfire/manual/mod/directives.html.es
+#srv/web/ipfire/manual/mod/directives.html.fr
 #srv/web/ipfire/manual/mod/directives.html.ja.utf8
 #srv/web/ipfire/manual/mod/directives.html.ko.euc-kr
-#srv/web/ipfire/manual/mod/directives.html.ru.koi8-r
 #srv/web/ipfire/manual/mod/directives.html.tr.utf8
 #srv/web/ipfire/manual/mod/directives.html.zh-cn.utf8
 #srv/web/ipfire/manual/mod/event.html
 #srv/web/ipfire/manual/mod/event.html.en
+#srv/web/ipfire/manual/mod/event.html.fr
 #srv/web/ipfire/manual/mod/index.html
 #srv/web/ipfire/manual/mod/index.html.de
 #srv/web/ipfire/manual/mod/index.html.en
 #srv/web/ipfire/manual/mod/index.html.es
+#srv/web/ipfire/manual/mod/index.html.fr
 #srv/web/ipfire/manual/mod/index.html.ja.utf8
 #srv/web/ipfire/manual/mod/index.html.ko.euc-kr
 #srv/web/ipfire/manual/mod/index.html.tr.utf8
 #srv/web/ipfire/manual/mod/index.html.zh-cn.utf8
+#srv/web/ipfire/manual/mod/mod_access_compat.html
+#srv/web/ipfire/manual/mod/mod_access_compat.html.en
+#srv/web/ipfire/manual/mod/mod_access_compat.html.fr
+#srv/web/ipfire/manual/mod/mod_access_compat.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_actions.html
 #srv/web/ipfire/manual/mod/mod_actions.html.de
 #srv/web/ipfire/manual/mod/mod_actions.html.en
+#srv/web/ipfire/manual/mod/mod_actions.html.fr
 #srv/web/ipfire/manual/mod/mod_actions.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_actions.html.ko.euc-kr
 #srv/web/ipfire/manual/mod/mod_alias.html
 #srv/web/ipfire/manual/mod/mod_alias.html.en
+#srv/web/ipfire/manual/mod/mod_alias.html.fr
 #srv/web/ipfire/manual/mod/mod_alias.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_alias.html.ko.euc-kr
 #srv/web/ipfire/manual/mod/mod_alias.html.tr.utf8
+#srv/web/ipfire/manual/mod/mod_allowmethods.html
+#srv/web/ipfire/manual/mod/mod_allowmethods.html.en
+#srv/web/ipfire/manual/mod/mod_allowmethods.html.fr
 #srv/web/ipfire/manual/mod/mod_asis.html
 #srv/web/ipfire/manual/mod/mod_asis.html.en
+#srv/web/ipfire/manual/mod/mod_asis.html.fr
 #srv/web/ipfire/manual/mod/mod_asis.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_asis.html.ko.euc-kr
 #srv/web/ipfire/manual/mod/mod_auth_basic.html
@@ -585,53 +668,64 @@ etc/httpd/conf/vhosts.d/ipfire-interface.conf
 #srv/web/ipfire/manual/mod/mod_auth_digest.html.en
 #srv/web/ipfire/manual/mod/mod_auth_digest.html.fr
 #srv/web/ipfire/manual/mod/mod_auth_digest.html.ko.euc-kr
-#srv/web/ipfire/manual/mod/mod_authn_alias.html
-#srv/web/ipfire/manual/mod/mod_authn_alias.html.en
-#srv/web/ipfire/manual/mod/mod_authn_alias.html.fr
+#srv/web/ipfire/manual/mod/mod_auth_form.html
+#srv/web/ipfire/manual/mod/mod_auth_form.html.en
+#srv/web/ipfire/manual/mod/mod_auth_form.html.fr
 #srv/web/ipfire/manual/mod/mod_authn_anon.html
 #srv/web/ipfire/manual/mod/mod_authn_anon.html.en
+#srv/web/ipfire/manual/mod/mod_authn_anon.html.fr
 #srv/web/ipfire/manual/mod/mod_authn_anon.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_authn_anon.html.ko.euc-kr
+#srv/web/ipfire/manual/mod/mod_authn_core.html
+#srv/web/ipfire/manual/mod/mod_authn_core.html.en
+#srv/web/ipfire/manual/mod/mod_authn_core.html.fr
 #srv/web/ipfire/manual/mod/mod_authn_dbd.html
 #srv/web/ipfire/manual/mod/mod_authn_dbd.html.en
+#srv/web/ipfire/manual/mod/mod_authn_dbd.html.fr
 #srv/web/ipfire/manual/mod/mod_authn_dbm.html
 #srv/web/ipfire/manual/mod/mod_authn_dbm.html.en
+#srv/web/ipfire/manual/mod/mod_authn_dbm.html.fr
 #srv/web/ipfire/manual/mod/mod_authn_dbm.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_authn_dbm.html.ko.euc-kr
-#srv/web/ipfire/manual/mod/mod_authn_default.html
-#srv/web/ipfire/manual/mod/mod_authn_default.html.en
-#srv/web/ipfire/manual/mod/mod_authn_default.html.ja.utf8
-#srv/web/ipfire/manual/mod/mod_authn_default.html.ko.euc-kr
 #srv/web/ipfire/manual/mod/mod_authn_file.html
 #srv/web/ipfire/manual/mod/mod_authn_file.html.en
 #srv/web/ipfire/manual/mod/mod_authn_file.html.fr
 #srv/web/ipfire/manual/mod/mod_authn_file.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_authn_file.html.ko.euc-kr
+#srv/web/ipfire/manual/mod/mod_authn_socache.html
+#srv/web/ipfire/manual/mod/mod_authn_socache.html.en
+#srv/web/ipfire/manual/mod/mod_authn_socache.html.fr
+#srv/web/ipfire/manual/mod/mod_authnz_fcgi.html
+#srv/web/ipfire/manual/mod/mod_authnz_fcgi.html.en
 #srv/web/ipfire/manual/mod/mod_authnz_ldap.html
 #srv/web/ipfire/manual/mod/mod_authnz_ldap.html.en
 #srv/web/ipfire/manual/mod/mod_authnz_ldap.html.fr
+#srv/web/ipfire/manual/mod/mod_authz_core.html
+#srv/web/ipfire/manual/mod/mod_authz_core.html.en
+#srv/web/ipfire/manual/mod/mod_authz_core.html.fr
+#srv/web/ipfire/manual/mod/mod_authz_dbd.html
+#srv/web/ipfire/manual/mod/mod_authz_dbd.html.en
+#srv/web/ipfire/manual/mod/mod_authz_dbd.html.fr
 #srv/web/ipfire/manual/mod/mod_authz_dbm.html
 #srv/web/ipfire/manual/mod/mod_authz_dbm.html.en
+#srv/web/ipfire/manual/mod/mod_authz_dbm.html.fr
 #srv/web/ipfire/manual/mod/mod_authz_dbm.html.ko.euc-kr
-#srv/web/ipfire/manual/mod/mod_authz_default.html
-#srv/web/ipfire/manual/mod/mod_authz_default.html.en
-#srv/web/ipfire/manual/mod/mod_authz_default.html.ja.utf8
-#srv/web/ipfire/manual/mod/mod_authz_default.html.ko.euc-kr
 #srv/web/ipfire/manual/mod/mod_authz_groupfile.html
 #srv/web/ipfire/manual/mod/mod_authz_groupfile.html.en
+#srv/web/ipfire/manual/mod/mod_authz_groupfile.html.fr
 #srv/web/ipfire/manual/mod/mod_authz_groupfile.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_authz_groupfile.html.ko.euc-kr
 #srv/web/ipfire/manual/mod/mod_authz_host.html
 #srv/web/ipfire/manual/mod/mod_authz_host.html.en
 #srv/web/ipfire/manual/mod/mod_authz_host.html.fr
-#srv/web/ipfire/manual/mod/mod_authz_host.html.ja.utf8
-#srv/web/ipfire/manual/mod/mod_authz_host.html.ko.euc-kr
 #srv/web/ipfire/manual/mod/mod_authz_owner.html
 #srv/web/ipfire/manual/mod/mod_authz_owner.html.en
+#srv/web/ipfire/manual/mod/mod_authz_owner.html.fr
 #srv/web/ipfire/manual/mod/mod_authz_owner.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_authz_owner.html.ko.euc-kr
 #srv/web/ipfire/manual/mod/mod_authz_user.html
 #srv/web/ipfire/manual/mod/mod_authz_user.html.en
+#srv/web/ipfire/manual/mod/mod_authz_user.html.fr
 #srv/web/ipfire/manual/mod/mod_authz_user.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_authz_user.html.ko.euc-kr
 #srv/web/ipfire/manual/mod/mod_autoindex.html
@@ -640,180 +734,327 @@ etc/httpd/conf/vhosts.d/ipfire-interface.conf
 #srv/web/ipfire/manual/mod/mod_autoindex.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_autoindex.html.ko.euc-kr
 #srv/web/ipfire/manual/mod/mod_autoindex.html.tr.utf8
+#srv/web/ipfire/manual/mod/mod_buffer.html
+#srv/web/ipfire/manual/mod/mod_buffer.html.en
+#srv/web/ipfire/manual/mod/mod_buffer.html.fr
 #srv/web/ipfire/manual/mod/mod_cache.html
 #srv/web/ipfire/manual/mod/mod_cache.html.en
+#srv/web/ipfire/manual/mod/mod_cache.html.fr
 #srv/web/ipfire/manual/mod/mod_cache.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_cache.html.ko.euc-kr
+#srv/web/ipfire/manual/mod/mod_cache_disk.html
+#srv/web/ipfire/manual/mod/mod_cache_disk.html.en
+#srv/web/ipfire/manual/mod/mod_cache_disk.html.fr
+#srv/web/ipfire/manual/mod/mod_cache_disk.html.ja.utf8
+#srv/web/ipfire/manual/mod/mod_cache_disk.html.ko.euc-kr
+#srv/web/ipfire/manual/mod/mod_cache_socache.html
+#srv/web/ipfire/manual/mod/mod_cache_socache.html.en
+#srv/web/ipfire/manual/mod/mod_cache_socache.html.fr
 #srv/web/ipfire/manual/mod/mod_cern_meta.html
 #srv/web/ipfire/manual/mod/mod_cern_meta.html.en
+#srv/web/ipfire/manual/mod/mod_cern_meta.html.fr
 #srv/web/ipfire/manual/mod/mod_cern_meta.html.ko.euc-kr
 #srv/web/ipfire/manual/mod/mod_cgi.html
 #srv/web/ipfire/manual/mod/mod_cgi.html.en
+#srv/web/ipfire/manual/mod/mod_cgi.html.fr
 #srv/web/ipfire/manual/mod/mod_cgi.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_cgi.html.ko.euc-kr
 #srv/web/ipfire/manual/mod/mod_cgid.html
 #srv/web/ipfire/manual/mod/mod_cgid.html.en
+#srv/web/ipfire/manual/mod/mod_cgid.html.fr
 #srv/web/ipfire/manual/mod/mod_cgid.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_cgid.html.ko.euc-kr
 #srv/web/ipfire/manual/mod/mod_charset_lite.html
 #srv/web/ipfire/manual/mod/mod_charset_lite.html.en
+#srv/web/ipfire/manual/mod/mod_charset_lite.html.fr
 #srv/web/ipfire/manual/mod/mod_charset_lite.html.ko.euc-kr
+#srv/web/ipfire/manual/mod/mod_data.html
+#srv/web/ipfire/manual/mod/mod_data.html.en
+#srv/web/ipfire/manual/mod/mod_data.html.fr
 #srv/web/ipfire/manual/mod/mod_dav.html
 #srv/web/ipfire/manual/mod/mod_dav.html.en
+#srv/web/ipfire/manual/mod/mod_dav.html.fr
 #srv/web/ipfire/manual/mod/mod_dav.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_dav.html.ko.euc-kr
 #srv/web/ipfire/manual/mod/mod_dav_fs.html
 #srv/web/ipfire/manual/mod/mod_dav_fs.html.en
+#srv/web/ipfire/manual/mod/mod_dav_fs.html.fr
 #srv/web/ipfire/manual/mod/mod_dav_fs.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_dav_fs.html.ko.euc-kr
 #srv/web/ipfire/manual/mod/mod_dav_lock.html
 #srv/web/ipfire/manual/mod/mod_dav_lock.html.en
+#srv/web/ipfire/manual/mod/mod_dav_lock.html.fr
 #srv/web/ipfire/manual/mod/mod_dav_lock.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_dbd.html
 #srv/web/ipfire/manual/mod/mod_dbd.html.en
+#srv/web/ipfire/manual/mod/mod_dbd.html.fr
 #srv/web/ipfire/manual/mod/mod_deflate.html
 #srv/web/ipfire/manual/mod/mod_deflate.html.en
+#srv/web/ipfire/manual/mod/mod_deflate.html.fr
 #srv/web/ipfire/manual/mod/mod_deflate.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_deflate.html.ko.euc-kr
+#srv/web/ipfire/manual/mod/mod_dialup.html
+#srv/web/ipfire/manual/mod/mod_dialup.html.en
+#srv/web/ipfire/manual/mod/mod_dialup.html.fr
 #srv/web/ipfire/manual/mod/mod_dir.html
 #srv/web/ipfire/manual/mod/mod_dir.html.en
+#srv/web/ipfire/manual/mod/mod_dir.html.fr
 #srv/web/ipfire/manual/mod/mod_dir.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_dir.html.ko.euc-kr
 #srv/web/ipfire/manual/mod/mod_dir.html.tr.utf8
-#srv/web/ipfire/manual/mod/mod_disk_cache.html
-#srv/web/ipfire/manual/mod/mod_disk_cache.html.en
-#srv/web/ipfire/manual/mod/mod_disk_cache.html.ja.utf8
-#srv/web/ipfire/manual/mod/mod_disk_cache.html.ko.euc-kr
 #srv/web/ipfire/manual/mod/mod_dumpio.html
 #srv/web/ipfire/manual/mod/mod_dumpio.html.en
+#srv/web/ipfire/manual/mod/mod_dumpio.html.fr
 #srv/web/ipfire/manual/mod/mod_dumpio.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_echo.html
 #srv/web/ipfire/manual/mod/mod_echo.html.en
+#srv/web/ipfire/manual/mod/mod_echo.html.fr
 #srv/web/ipfire/manual/mod/mod_echo.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_echo.html.ko.euc-kr
 #srv/web/ipfire/manual/mod/mod_env.html
 #srv/web/ipfire/manual/mod/mod_env.html.en
+#srv/web/ipfire/manual/mod/mod_env.html.fr
 #srv/web/ipfire/manual/mod/mod_env.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_env.html.ko.euc-kr
 #srv/web/ipfire/manual/mod/mod_env.html.tr.utf8
-#srv/web/ipfire/manual/mod/mod_example.html
-#srv/web/ipfire/manual/mod/mod_example.html.en
-#srv/web/ipfire/manual/mod/mod_example.html.ko.euc-kr
+#srv/web/ipfire/manual/mod/mod_example_hooks.html
+#srv/web/ipfire/manual/mod/mod_example_hooks.html.en
+#srv/web/ipfire/manual/mod/mod_example_hooks.html.fr
+#srv/web/ipfire/manual/mod/mod_example_hooks.html.ko.euc-kr
 #srv/web/ipfire/manual/mod/mod_expires.html
 #srv/web/ipfire/manual/mod/mod_expires.html.en
+#srv/web/ipfire/manual/mod/mod_expires.html.fr
 #srv/web/ipfire/manual/mod/mod_expires.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_expires.html.ko.euc-kr
 #srv/web/ipfire/manual/mod/mod_ext_filter.html
 #srv/web/ipfire/manual/mod/mod_ext_filter.html.en
+#srv/web/ipfire/manual/mod/mod_ext_filter.html.fr
 #srv/web/ipfire/manual/mod/mod_ext_filter.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_ext_filter.html.ko.euc-kr
 #srv/web/ipfire/manual/mod/mod_file_cache.html
 #srv/web/ipfire/manual/mod/mod_file_cache.html.en
+#srv/web/ipfire/manual/mod/mod_file_cache.html.fr
 #srv/web/ipfire/manual/mod/mod_file_cache.html.ko.euc-kr
 #srv/web/ipfire/manual/mod/mod_filter.html
 #srv/web/ipfire/manual/mod/mod_filter.html.en
+#srv/web/ipfire/manual/mod/mod_filter.html.fr
 #srv/web/ipfire/manual/mod/mod_headers.html
 #srv/web/ipfire/manual/mod/mod_headers.html.en
+#srv/web/ipfire/manual/mod/mod_headers.html.fr
 #srv/web/ipfire/manual/mod/mod_headers.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_headers.html.ko.euc-kr
+#srv/web/ipfire/manual/mod/mod_heartbeat.html
+#srv/web/ipfire/manual/mod/mod_heartbeat.html.en
+#srv/web/ipfire/manual/mod/mod_heartbeat.html.fr
+#srv/web/ipfire/manual/mod/mod_heartmonitor.html
+#srv/web/ipfire/manual/mod/mod_heartmonitor.html.en
+#srv/web/ipfire/manual/mod/mod_heartmonitor.html.fr
+#srv/web/ipfire/manual/mod/mod_http2.html
+#srv/web/ipfire/manual/mod/mod_http2.html.en
 #srv/web/ipfire/manual/mod/mod_ident.html
 #srv/web/ipfire/manual/mod/mod_ident.html.en
+#srv/web/ipfire/manual/mod/mod_ident.html.fr
 #srv/web/ipfire/manual/mod/mod_ident.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_ident.html.ko.euc-kr
 #srv/web/ipfire/manual/mod/mod_imagemap.html
 #srv/web/ipfire/manual/mod/mod_imagemap.html.en
+#srv/web/ipfire/manual/mod/mod_imagemap.html.fr
 #srv/web/ipfire/manual/mod/mod_imagemap.html.ko.euc-kr
 #srv/web/ipfire/manual/mod/mod_include.html
 #srv/web/ipfire/manual/mod/mod_include.html.en
+#srv/web/ipfire/manual/mod/mod_include.html.fr
 #srv/web/ipfire/manual/mod/mod_include.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_info.html
 #srv/web/ipfire/manual/mod/mod_info.html.en
+#srv/web/ipfire/manual/mod/mod_info.html.fr
 #srv/web/ipfire/manual/mod/mod_info.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_info.html.ko.euc-kr
 #srv/web/ipfire/manual/mod/mod_isapi.html
 #srv/web/ipfire/manual/mod/mod_isapi.html.en
+#srv/web/ipfire/manual/mod/mod_isapi.html.fr
 #srv/web/ipfire/manual/mod/mod_isapi.html.ko.euc-kr
+#srv/web/ipfire/manual/mod/mod_lbmethod_bybusyness.html
+#srv/web/ipfire/manual/mod/mod_lbmethod_bybusyness.html.en
+#srv/web/ipfire/manual/mod/mod_lbmethod_bybusyness.html.fr
+#srv/web/ipfire/manual/mod/mod_lbmethod_byrequests.html
+#srv/web/ipfire/manual/mod/mod_lbmethod_byrequests.html.en
+#srv/web/ipfire/manual/mod/mod_lbmethod_byrequests.html.fr
+#srv/web/ipfire/manual/mod/mod_lbmethod_bytraffic.html
+#srv/web/ipfire/manual/mod/mod_lbmethod_bytraffic.html.en
+#srv/web/ipfire/manual/mod/mod_lbmethod_bytraffic.html.fr
+#srv/web/ipfire/manual/mod/mod_lbmethod_heartbeat.html
+#srv/web/ipfire/manual/mod/mod_lbmethod_heartbeat.html.en
+#srv/web/ipfire/manual/mod/mod_lbmethod_heartbeat.html.fr
 #srv/web/ipfire/manual/mod/mod_ldap.html
 #srv/web/ipfire/manual/mod/mod_ldap.html.en
+#srv/web/ipfire/manual/mod/mod_ldap.html.fr
 #srv/web/ipfire/manual/mod/mod_log_config.html
 #srv/web/ipfire/manual/mod/mod_log_config.html.en
+#srv/web/ipfire/manual/mod/mod_log_config.html.fr
 #srv/web/ipfire/manual/mod/mod_log_config.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_log_config.html.ko.euc-kr
 #srv/web/ipfire/manual/mod/mod_log_config.html.tr.utf8
+#srv/web/ipfire/manual/mod/mod_log_debug.html
+#srv/web/ipfire/manual/mod/mod_log_debug.html.en
+#srv/web/ipfire/manual/mod/mod_log_debug.html.fr
 #srv/web/ipfire/manual/mod/mod_log_forensic.html
 #srv/web/ipfire/manual/mod/mod_log_forensic.html.en
+#srv/web/ipfire/manual/mod/mod_log_forensic.html.fr
 #srv/web/ipfire/manual/mod/mod_log_forensic.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_log_forensic.html.tr.utf8
 #srv/web/ipfire/manual/mod/mod_logio.html
 #srv/web/ipfire/manual/mod/mod_logio.html.en
+#srv/web/ipfire/manual/mod/mod_logio.html.fr
 #srv/web/ipfire/manual/mod/mod_logio.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_logio.html.ko.euc-kr
 #srv/web/ipfire/manual/mod/mod_logio.html.tr.utf8
-#srv/web/ipfire/manual/mod/mod_mem_cache.html
-#srv/web/ipfire/manual/mod/mod_mem_cache.html.en
-#srv/web/ipfire/manual/mod/mod_mem_cache.html.ja.utf8
-#srv/web/ipfire/manual/mod/mod_mem_cache.html.ko.euc-kr
+#srv/web/ipfire/manual/mod/mod_lua.html
+#srv/web/ipfire/manual/mod/mod_lua.html.en
+#srv/web/ipfire/manual/mod/mod_lua.html.fr
+#srv/web/ipfire/manual/mod/mod_macro.html
+#srv/web/ipfire/manual/mod/mod_macro.html.en
+#srv/web/ipfire/manual/mod/mod_macro.html.fr
 #srv/web/ipfire/manual/mod/mod_mime.html
 #srv/web/ipfire/manual/mod/mod_mime.html.en
+#srv/web/ipfire/manual/mod/mod_mime.html.fr
 #srv/web/ipfire/manual/mod/mod_mime.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_mime_magic.html
 #srv/web/ipfire/manual/mod/mod_mime_magic.html.en
+#srv/web/ipfire/manual/mod/mod_mime_magic.html.fr
 #srv/web/ipfire/manual/mod/mod_negotiation.html
 #srv/web/ipfire/manual/mod/mod_negotiation.html.en
+#srv/web/ipfire/manual/mod/mod_negotiation.html.fr
 #srv/web/ipfire/manual/mod/mod_negotiation.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_nw_ssl.html
 #srv/web/ipfire/manual/mod/mod_nw_ssl.html.en
+#srv/web/ipfire/manual/mod/mod_nw_ssl.html.fr
+#srv/web/ipfire/manual/mod/mod_privileges.html
+#srv/web/ipfire/manual/mod/mod_privileges.html.en
+#srv/web/ipfire/manual/mod/mod_privileges.html.fr
 #srv/web/ipfire/manual/mod/mod_proxy.html
 #srv/web/ipfire/manual/mod/mod_proxy.html.en
 #srv/web/ipfire/manual/mod/mod_proxy.html.fr
 #srv/web/ipfire/manual/mod/mod_proxy.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_proxy_ajp.html
 #srv/web/ipfire/manual/mod/mod_proxy_ajp.html.en
+#srv/web/ipfire/manual/mod/mod_proxy_ajp.html.fr
 #srv/web/ipfire/manual/mod/mod_proxy_ajp.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_proxy_balancer.html
 #srv/web/ipfire/manual/mod/mod_proxy_balancer.html.en
+#srv/web/ipfire/manual/mod/mod_proxy_balancer.html.fr
 #srv/web/ipfire/manual/mod/mod_proxy_balancer.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_proxy_connect.html
 #srv/web/ipfire/manual/mod/mod_proxy_connect.html.en
+#srv/web/ipfire/manual/mod/mod_proxy_connect.html.fr
 #srv/web/ipfire/manual/mod/mod_proxy_connect.html.ja.utf8
+#srv/web/ipfire/manual/mod/mod_proxy_express.html
+#srv/web/ipfire/manual/mod/mod_proxy_express.html.en
+#srv/web/ipfire/manual/mod/mod_proxy_express.html.fr
+#srv/web/ipfire/manual/mod/mod_proxy_fcgi.html
+#srv/web/ipfire/manual/mod/mod_proxy_fcgi.html.en
+#srv/web/ipfire/manual/mod/mod_proxy_fcgi.html.fr
+#srv/web/ipfire/manual/mod/mod_proxy_fdpass.html
+#srv/web/ipfire/manual/mod/mod_proxy_fdpass.html.en
+#srv/web/ipfire/manual/mod/mod_proxy_fdpass.html.fr
 #srv/web/ipfire/manual/mod/mod_proxy_ftp.html
 #srv/web/ipfire/manual/mod/mod_proxy_ftp.html.en
-#srv/web/ipfire/manual/mod/mod_proxy_ftp.html.ja.utf8
+#srv/web/ipfire/manual/mod/mod_proxy_ftp.html.fr
+#srv/web/ipfire/manual/mod/mod_proxy_hcheck.html
+#srv/web/ipfire/manual/mod/mod_proxy_hcheck.html.en
+#srv/web/ipfire/manual/mod/mod_proxy_html.html
+#srv/web/ipfire/manual/mod/mod_proxy_html.html.en
+#srv/web/ipfire/manual/mod/mod_proxy_html.html.fr
 #srv/web/ipfire/manual/mod/mod_proxy_http.html
 #srv/web/ipfire/manual/mod/mod_proxy_http.html.en
 #srv/web/ipfire/manual/mod/mod_proxy_http.html.fr
-#srv/web/ipfire/manual/mod/mod_proxy_http.html.ja.utf8
+#srv/web/ipfire/manual/mod/mod_proxy_http2.html
+#srv/web/ipfire/manual/mod/mod_proxy_http2.html.en
 #srv/web/ipfire/manual/mod/mod_proxy_scgi.html
 #srv/web/ipfire/manual/mod/mod_proxy_scgi.html.en
-#srv/web/ipfire/manual/mod/mod_proxy_scgi.html.ja.utf8
+#srv/web/ipfire/manual/mod/mod_proxy_scgi.html.fr
+#srv/web/ipfire/manual/mod/mod_proxy_wstunnel.html
+#srv/web/ipfire/manual/mod/mod_proxy_wstunnel.html.en
+#srv/web/ipfire/manual/mod/mod_ratelimit.html
+#srv/web/ipfire/manual/mod/mod_ratelimit.html.en
+#srv/web/ipfire/manual/mod/mod_ratelimit.html.fr
+#srv/web/ipfire/manual/mod/mod_reflector.html
+#srv/web/ipfire/manual/mod/mod_reflector.html.en
+#srv/web/ipfire/manual/mod/mod_reflector.html.fr
+#srv/web/ipfire/manual/mod/mod_remoteip.html
+#srv/web/ipfire/manual/mod/mod_remoteip.html.en
+#srv/web/ipfire/manual/mod/mod_remoteip.html.fr
 #srv/web/ipfire/manual/mod/mod_reqtimeout.html
 #srv/web/ipfire/manual/mod/mod_reqtimeout.html.en
+#srv/web/ipfire/manual/mod/mod_reqtimeout.html.fr
+#srv/web/ipfire/manual/mod/mod_request.html
+#srv/web/ipfire/manual/mod/mod_request.html.en
+#srv/web/ipfire/manual/mod/mod_request.html.fr
+#srv/web/ipfire/manual/mod/mod_request.html.tr.utf8
 #srv/web/ipfire/manual/mod/mod_rewrite.html
 #srv/web/ipfire/manual/mod/mod_rewrite.html.en
 #srv/web/ipfire/manual/mod/mod_rewrite.html.fr
+#srv/web/ipfire/manual/mod/mod_sed.html
+#srv/web/ipfire/manual/mod/mod_sed.html.en
+#srv/web/ipfire/manual/mod/mod_sed.html.fr
+#srv/web/ipfire/manual/mod/mod_session.html
+#srv/web/ipfire/manual/mod/mod_session.html.en
+#srv/web/ipfire/manual/mod/mod_session.html.fr
+#srv/web/ipfire/manual/mod/mod_session_cookie.html
+#srv/web/ipfire/manual/mod/mod_session_cookie.html.en
+#srv/web/ipfire/manual/mod/mod_session_cookie.html.fr
+#srv/web/ipfire/manual/mod/mod_session_crypto.html
+#srv/web/ipfire/manual/mod/mod_session_crypto.html.en
+#srv/web/ipfire/manual/mod/mod_session_crypto.html.fr
+#srv/web/ipfire/manual/mod/mod_session_dbd.html
+#srv/web/ipfire/manual/mod/mod_session_dbd.html.en
+#srv/web/ipfire/manual/mod/mod_session_dbd.html.fr
 #srv/web/ipfire/manual/mod/mod_setenvif.html
 #srv/web/ipfire/manual/mod/mod_setenvif.html.en
+#srv/web/ipfire/manual/mod/mod_setenvif.html.fr
 #srv/web/ipfire/manual/mod/mod_setenvif.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_setenvif.html.ko.euc-kr
 #srv/web/ipfire/manual/mod/mod_setenvif.html.tr.utf8
+#srv/web/ipfire/manual/mod/mod_slotmem_plain.html
+#srv/web/ipfire/manual/mod/mod_slotmem_plain.html.en
+#srv/web/ipfire/manual/mod/mod_slotmem_plain.html.fr
+#srv/web/ipfire/manual/mod/mod_slotmem_shm.html
+#srv/web/ipfire/manual/mod/mod_slotmem_shm.html.en
+#srv/web/ipfire/manual/mod/mod_slotmem_shm.html.fr
 #srv/web/ipfire/manual/mod/mod_so.html
 #srv/web/ipfire/manual/mod/mod_so.html.en
+#srv/web/ipfire/manual/mod/mod_so.html.fr
 #srv/web/ipfire/manual/mod/mod_so.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_so.html.ko.euc-kr
 #srv/web/ipfire/manual/mod/mod_so.html.tr.utf8
+#srv/web/ipfire/manual/mod/mod_socache_dbm.html
+#srv/web/ipfire/manual/mod/mod_socache_dbm.html.en
+#srv/web/ipfire/manual/mod/mod_socache_dbm.html.fr
+#srv/web/ipfire/manual/mod/mod_socache_dc.html
+#srv/web/ipfire/manual/mod/mod_socache_dc.html.en
+#srv/web/ipfire/manual/mod/mod_socache_dc.html.fr
+#srv/web/ipfire/manual/mod/mod_socache_memcache.html
+#srv/web/ipfire/manual/mod/mod_socache_memcache.html.en
+#srv/web/ipfire/manual/mod/mod_socache_memcache.html.fr
+#srv/web/ipfire/manual/mod/mod_socache_shmcb.html
+#srv/web/ipfire/manual/mod/mod_socache_shmcb.html.en
+#srv/web/ipfire/manual/mod/mod_socache_shmcb.html.fr
 #srv/web/ipfire/manual/mod/mod_speling.html
 #srv/web/ipfire/manual/mod/mod_speling.html.en
+#srv/web/ipfire/manual/mod/mod_speling.html.fr
 #srv/web/ipfire/manual/mod/mod_speling.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_speling.html.ko.euc-kr
 #srv/web/ipfire/manual/mod/mod_ssl.html
 #srv/web/ipfire/manual/mod/mod_ssl.html.en
+#srv/web/ipfire/manual/mod/mod_ssl.html.fr
 #srv/web/ipfire/manual/mod/mod_status.html
 #srv/web/ipfire/manual/mod/mod_status.html.en
+#srv/web/ipfire/manual/mod/mod_status.html.fr
 #srv/web/ipfire/manual/mod/mod_status.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_status.html.ko.euc-kr
 #srv/web/ipfire/manual/mod/mod_status.html.tr.utf8
 #srv/web/ipfire/manual/mod/mod_substitute.html
 #srv/web/ipfire/manual/mod/mod_substitute.html.en
+#srv/web/ipfire/manual/mod/mod_substitute.html.fr
 #srv/web/ipfire/manual/mod/mod_suexec.html
 #srv/web/ipfire/manual/mod/mod_suexec.html.en
 #srv/web/ipfire/manual/mod/mod_suexec.html.fr
@@ -822,57 +1063,77 @@ etc/httpd/conf/vhosts.d/ipfire-interface.conf
 #srv/web/ipfire/manual/mod/mod_suexec.html.tr.utf8
 #srv/web/ipfire/manual/mod/mod_unique_id.html
 #srv/web/ipfire/manual/mod/mod_unique_id.html.en
+#srv/web/ipfire/manual/mod/mod_unique_id.html.fr
 #srv/web/ipfire/manual/mod/mod_unique_id.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_unique_id.html.ko.euc-kr
+#srv/web/ipfire/manual/mod/mod_unixd.html
+#srv/web/ipfire/manual/mod/mod_unixd.html.en
+#srv/web/ipfire/manual/mod/mod_unixd.html.fr
+#srv/web/ipfire/manual/mod/mod_unixd.html.tr.utf8
 #srv/web/ipfire/manual/mod/mod_userdir.html
 #srv/web/ipfire/manual/mod/mod_userdir.html.en
+#srv/web/ipfire/manual/mod/mod_userdir.html.fr
 #srv/web/ipfire/manual/mod/mod_userdir.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_userdir.html.ko.euc-kr
 #srv/web/ipfire/manual/mod/mod_userdir.html.tr.utf8
 #srv/web/ipfire/manual/mod/mod_usertrack.html
 #srv/web/ipfire/manual/mod/mod_usertrack.html.en
+#srv/web/ipfire/manual/mod/mod_usertrack.html.fr
 #srv/web/ipfire/manual/mod/mod_version.html
 #srv/web/ipfire/manual/mod/mod_version.html.en
 #srv/web/ipfire/manual/mod/mod_version.html.ja.utf8
 #srv/web/ipfire/manual/mod/mod_version.html.ko.euc-kr
 #srv/web/ipfire/manual/mod/mod_vhost_alias.html
 #srv/web/ipfire/manual/mod/mod_vhost_alias.html.en
+#srv/web/ipfire/manual/mod/mod_vhost_alias.html.fr
 #srv/web/ipfire/manual/mod/mod_vhost_alias.html.tr.utf8
+#srv/web/ipfire/manual/mod/mod_watchdog.html
+#srv/web/ipfire/manual/mod/mod_watchdog.html.en
+#srv/web/ipfire/manual/mod/mod_xml2enc.html
+#srv/web/ipfire/manual/mod/mod_xml2enc.html.en
+#srv/web/ipfire/manual/mod/mod_xml2enc.html.fr
 #srv/web/ipfire/manual/mod/module-dict.html
 #srv/web/ipfire/manual/mod/module-dict.html.en
+#srv/web/ipfire/manual/mod/module-dict.html.fr
 #srv/web/ipfire/manual/mod/module-dict.html.ja.utf8
 #srv/web/ipfire/manual/mod/module-dict.html.ko.euc-kr
 #srv/web/ipfire/manual/mod/module-dict.html.tr.utf8
 #srv/web/ipfire/manual/mod/mpm_common.html
 #srv/web/ipfire/manual/mod/mpm_common.html.de
 #srv/web/ipfire/manual/mod/mpm_common.html.en
+#srv/web/ipfire/manual/mod/mpm_common.html.fr
 #srv/web/ipfire/manual/mod/mpm_common.html.ja.utf8
 #srv/web/ipfire/manual/mod/mpm_common.html.tr.utf8
 #srv/web/ipfire/manual/mod/mpm_netware.html
 #srv/web/ipfire/manual/mod/mpm_netware.html.en
+#srv/web/ipfire/manual/mod/mpm_netware.html.fr
 #srv/web/ipfire/manual/mod/mpm_winnt.html
 #srv/web/ipfire/manual/mod/mpm_winnt.html.de
 #srv/web/ipfire/manual/mod/mpm_winnt.html.en
+#srv/web/ipfire/manual/mod/mpm_winnt.html.fr
 #srv/web/ipfire/manual/mod/mpm_winnt.html.ja.utf8
 #srv/web/ipfire/manual/mod/mpmt_os2.html
 #srv/web/ipfire/manual/mod/mpmt_os2.html.en
+#srv/web/ipfire/manual/mod/mpmt_os2.html.fr
 #srv/web/ipfire/manual/mod/prefork.html
 #srv/web/ipfire/manual/mod/prefork.html.de
 #srv/web/ipfire/manual/mod/prefork.html.en
+#srv/web/ipfire/manual/mod/prefork.html.fr
 #srv/web/ipfire/manual/mod/prefork.html.ja.utf8
 #srv/web/ipfire/manual/mod/prefork.html.tr.utf8
 #srv/web/ipfire/manual/mod/quickreference.html
 #srv/web/ipfire/manual/mod/quickreference.html.de
 #srv/web/ipfire/manual/mod/quickreference.html.en
 #srv/web/ipfire/manual/mod/quickreference.html.es
+#srv/web/ipfire/manual/mod/quickreference.html.fr
 #srv/web/ipfire/manual/mod/quickreference.html.ja.utf8
 #srv/web/ipfire/manual/mod/quickreference.html.ko.euc-kr
-#srv/web/ipfire/manual/mod/quickreference.html.ru.koi8-r
 #srv/web/ipfire/manual/mod/quickreference.html.tr.utf8
 #srv/web/ipfire/manual/mod/quickreference.html.zh-cn.utf8
 #srv/web/ipfire/manual/mod/worker.html
 #srv/web/ipfire/manual/mod/worker.html.de
 #srv/web/ipfire/manual/mod/worker.html.en
+#srv/web/ipfire/manual/mod/worker.html.fr
 #srv/web/ipfire/manual/mod/worker.html.ja.utf8
 #srv/web/ipfire/manual/mod/worker.html.tr.utf8
 #srv/web/ipfire/manual/mpm.html
@@ -896,93 +1157,124 @@ etc/httpd/conf/vhosts.d/ipfire-interface.conf
 #srv/web/ipfire/manual/new_features_2_2.html
 #srv/web/ipfire/manual/new_features_2_2.html.en
 #srv/web/ipfire/manual/new_features_2_2.html.fr
-#srv/web/ipfire/manual/new_features_2_2.html.ja.utf8
 #srv/web/ipfire/manual/new_features_2_2.html.ko.euc-kr
 #srv/web/ipfire/manual/new_features_2_2.html.pt-br
 #srv/web/ipfire/manual/new_features_2_2.html.tr.utf8
+#srv/web/ipfire/manual/new_features_2_4.html
+#srv/web/ipfire/manual/new_features_2_4.html.en
+#srv/web/ipfire/manual/new_features_2_4.html.fr
+#srv/web/ipfire/manual/new_features_2_4.html.tr.utf8
 #srv/web/ipfire/manual/platform
 #srv/web/ipfire/manual/platform/ebcdic.html
 #srv/web/ipfire/manual/platform/ebcdic.html.en
 #srv/web/ipfire/manual/platform/ebcdic.html.ko.euc-kr
 #srv/web/ipfire/manual/platform/index.html
 #srv/web/ipfire/manual/platform/index.html.en
+#srv/web/ipfire/manual/platform/index.html.fr
 #srv/web/ipfire/manual/platform/index.html.ko.euc-kr
 #srv/web/ipfire/manual/platform/index.html.zh-cn.utf8
 #srv/web/ipfire/manual/platform/netware.html
 #srv/web/ipfire/manual/platform/netware.html.en
+#srv/web/ipfire/manual/platform/netware.html.fr
 #srv/web/ipfire/manual/platform/netware.html.ko.euc-kr
 #srv/web/ipfire/manual/platform/perf-hp.html
 #srv/web/ipfire/manual/platform/perf-hp.html.en
+#srv/web/ipfire/manual/platform/perf-hp.html.fr
 #srv/web/ipfire/manual/platform/perf-hp.html.ko.euc-kr
+#srv/web/ipfire/manual/platform/rpm.html
+#srv/web/ipfire/manual/platform/rpm.html.en
 #srv/web/ipfire/manual/platform/win_compiling.html
 #srv/web/ipfire/manual/platform/win_compiling.html.en
+#srv/web/ipfire/manual/platform/win_compiling.html.fr
 #srv/web/ipfire/manual/platform/win_compiling.html.ko.euc-kr
 #srv/web/ipfire/manual/platform/windows.html
 #srv/web/ipfire/manual/platform/windows.html.en
+#srv/web/ipfire/manual/platform/windows.html.fr
 #srv/web/ipfire/manual/platform/windows.html.ko.euc-kr
 #srv/web/ipfire/manual/programs
 #srv/web/ipfire/manual/programs/ab.html
 #srv/web/ipfire/manual/programs/ab.html.en
+#srv/web/ipfire/manual/programs/ab.html.fr
 #srv/web/ipfire/manual/programs/ab.html.ko.euc-kr
 #srv/web/ipfire/manual/programs/ab.html.tr.utf8
 #srv/web/ipfire/manual/programs/apachectl.html
 #srv/web/ipfire/manual/programs/apachectl.html.en
+#srv/web/ipfire/manual/programs/apachectl.html.fr
 #srv/web/ipfire/manual/programs/apachectl.html.ko.euc-kr
 #srv/web/ipfire/manual/programs/apachectl.html.tr.utf8
 #srv/web/ipfire/manual/programs/apxs.html
 #srv/web/ipfire/manual/programs/apxs.html.en
+#srv/web/ipfire/manual/programs/apxs.html.fr
 #srv/web/ipfire/manual/programs/apxs.html.ko.euc-kr
 #srv/web/ipfire/manual/programs/apxs.html.tr.utf8
 #srv/web/ipfire/manual/programs/configure.html
 #srv/web/ipfire/manual/programs/configure.html.en
+#srv/web/ipfire/manual/programs/configure.html.fr
 #srv/web/ipfire/manual/programs/configure.html.ko.euc-kr
 #srv/web/ipfire/manual/programs/configure.html.tr.utf8
 #srv/web/ipfire/manual/programs/dbmmanage.html
 #srv/web/ipfire/manual/programs/dbmmanage.html.en
+#srv/web/ipfire/manual/programs/dbmmanage.html.fr
 #srv/web/ipfire/manual/programs/dbmmanage.html.ko.euc-kr
 #srv/web/ipfire/manual/programs/dbmmanage.html.tr.utf8
+#srv/web/ipfire/manual/programs/fcgistarter.html
+#srv/web/ipfire/manual/programs/fcgistarter.html.en
+#srv/web/ipfire/manual/programs/fcgistarter.html.fr
+#srv/web/ipfire/manual/programs/fcgistarter.html.tr.utf8
 #srv/web/ipfire/manual/programs/htcacheclean.html
 #srv/web/ipfire/manual/programs/htcacheclean.html.en
+#srv/web/ipfire/manual/programs/htcacheclean.html.fr
 #srv/web/ipfire/manual/programs/htcacheclean.html.ko.euc-kr
 #srv/web/ipfire/manual/programs/htcacheclean.html.tr.utf8
 #srv/web/ipfire/manual/programs/htdbm.html
 #srv/web/ipfire/manual/programs/htdbm.html.en
+#srv/web/ipfire/manual/programs/htdbm.html.fr
 #srv/web/ipfire/manual/programs/htdbm.html.tr.utf8
 #srv/web/ipfire/manual/programs/htdigest.html
 #srv/web/ipfire/manual/programs/htdigest.html.en
+#srv/web/ipfire/manual/programs/htdigest.html.fr
 #srv/web/ipfire/manual/programs/htdigest.html.ko.euc-kr
 #srv/web/ipfire/manual/programs/htdigest.html.tr.utf8
 #srv/web/ipfire/manual/programs/htpasswd.html
 #srv/web/ipfire/manual/programs/htpasswd.html.en
+#srv/web/ipfire/manual/programs/htpasswd.html.fr
 #srv/web/ipfire/manual/programs/htpasswd.html.ko.euc-kr
 #srv/web/ipfire/manual/programs/htpasswd.html.tr.utf8
 #srv/web/ipfire/manual/programs/httpd.html
 #srv/web/ipfire/manual/programs/httpd.html.en
+#srv/web/ipfire/manual/programs/httpd.html.fr
 #srv/web/ipfire/manual/programs/httpd.html.ko.euc-kr
 #srv/web/ipfire/manual/programs/httpd.html.tr.utf8
 #srv/web/ipfire/manual/programs/httxt2dbm.html
 #srv/web/ipfire/manual/programs/httxt2dbm.html.en
+#srv/web/ipfire/manual/programs/httxt2dbm.html.fr
 #srv/web/ipfire/manual/programs/httxt2dbm.html.tr.utf8
 #srv/web/ipfire/manual/programs/index.html
 #srv/web/ipfire/manual/programs/index.html.en
 #srv/web/ipfire/manual/programs/index.html.es
-#srv/web/ipfire/manual/programs/index.html.ja.utf8
+#srv/web/ipfire/manual/programs/index.html.fr
 #srv/web/ipfire/manual/programs/index.html.ko.euc-kr
-#srv/web/ipfire/manual/programs/index.html.ru.koi8-r
 #srv/web/ipfire/manual/programs/index.html.tr.utf8
 #srv/web/ipfire/manual/programs/index.html.zh-cn.utf8
+#srv/web/ipfire/manual/programs/log_server_status.html
+#srv/web/ipfire/manual/programs/log_server_status.html.en
 #srv/web/ipfire/manual/programs/logresolve.html
 #srv/web/ipfire/manual/programs/logresolve.html.en
+#srv/web/ipfire/manual/programs/logresolve.html.fr
 #srv/web/ipfire/manual/programs/logresolve.html.ko.euc-kr
 #srv/web/ipfire/manual/programs/logresolve.html.tr.utf8
 #srv/web/ipfire/manual/programs/other.html
 #srv/web/ipfire/manual/programs/other.html.en
+#srv/web/ipfire/manual/programs/other.html.fr
 #srv/web/ipfire/manual/programs/other.html.ko.euc-kr
 #srv/web/ipfire/manual/programs/other.html.tr.utf8
 #srv/web/ipfire/manual/programs/rotatelogs.html
 #srv/web/ipfire/manual/programs/rotatelogs.html.en
+#srv/web/ipfire/manual/programs/rotatelogs.html.fr
 #srv/web/ipfire/manual/programs/rotatelogs.html.ko.euc-kr
 #srv/web/ipfire/manual/programs/rotatelogs.html.tr.utf8
+#srv/web/ipfire/manual/programs/split-logfile.html
+#srv/web/ipfire/manual/programs/split-logfile.html.en
 #srv/web/ipfire/manual/programs/suexec.html
 #srv/web/ipfire/manual/programs/suexec.html.en
 #srv/web/ipfire/manual/programs/suexec.html.ko.euc-kr
@@ -990,15 +1282,19 @@ etc/httpd/conf/vhosts.d/ipfire-interface.conf
 #srv/web/ipfire/manual/rewrite
 #srv/web/ipfire/manual/rewrite/access.html
 #srv/web/ipfire/manual/rewrite/access.html.en
+#srv/web/ipfire/manual/rewrite/access.html.fr
 #srv/web/ipfire/manual/rewrite/advanced.html
 #srv/web/ipfire/manual/rewrite/advanced.html.en
+#srv/web/ipfire/manual/rewrite/advanced.html.fr
 #srv/web/ipfire/manual/rewrite/avoid.html
 #srv/web/ipfire/manual/rewrite/avoid.html.en
+#srv/web/ipfire/manual/rewrite/avoid.html.fr
 #srv/web/ipfire/manual/rewrite/flags.html
 #srv/web/ipfire/manual/rewrite/flags.html.en
 #srv/web/ipfire/manual/rewrite/flags.html.fr
 #srv/web/ipfire/manual/rewrite/htaccess.html
 #srv/web/ipfire/manual/rewrite/htaccess.html.en
+#srv/web/ipfire/manual/rewrite/htaccess.html.fr
 #srv/web/ipfire/manual/rewrite/index.html
 #srv/web/ipfire/manual/rewrite/index.html.en
 #srv/web/ipfire/manual/rewrite/index.html.fr
@@ -1009,15 +1305,19 @@ etc/httpd/conf/vhosts.d/ipfire-interface.conf
 #srv/web/ipfire/manual/rewrite/intro.html.fr
 #srv/web/ipfire/manual/rewrite/proxy.html
 #srv/web/ipfire/manual/rewrite/proxy.html.en
+#srv/web/ipfire/manual/rewrite/proxy.html.fr
 #srv/web/ipfire/manual/rewrite/remapping.html
 #srv/web/ipfire/manual/rewrite/remapping.html.en
+#srv/web/ipfire/manual/rewrite/remapping.html.fr
 #srv/web/ipfire/manual/rewrite/rewritemap.html
 #srv/web/ipfire/manual/rewrite/rewritemap.html.en
+#srv/web/ipfire/manual/rewrite/rewritemap.html.fr
 #srv/web/ipfire/manual/rewrite/tech.html
 #srv/web/ipfire/manual/rewrite/tech.html.en
 #srv/web/ipfire/manual/rewrite/tech.html.fr
 #srv/web/ipfire/manual/rewrite/vhosts.html
 #srv/web/ipfire/manual/rewrite/vhosts.html.en
+#srv/web/ipfire/manual/rewrite/vhosts.html.fr
 #srv/web/ipfire/manual/sections.html
 #srv/web/ipfire/manual/sections.html.en
 #srv/web/ipfire/manual/sections.html.fr
@@ -1026,6 +1326,7 @@ etc/httpd/conf/vhosts.d/ipfire-interface.conf
 #srv/web/ipfire/manual/sections.html.tr.utf8
 #srv/web/ipfire/manual/server-wide.html
 #srv/web/ipfire/manual/server-wide.html.en
+#srv/web/ipfire/manual/server-wide.html.fr
 #srv/web/ipfire/manual/server-wide.html.ja.utf8
 #srv/web/ipfire/manual/server-wide.html.ko.euc-kr
 #srv/web/ipfire/manual/server-wide.html.tr.utf8
@@ -1033,24 +1334,33 @@ etc/httpd/conf/vhosts.d/ipfire-interface.conf
 #srv/web/ipfire/manual/sitemap.html.de
 #srv/web/ipfire/manual/sitemap.html.en
 #srv/web/ipfire/manual/sitemap.html.es
+#srv/web/ipfire/manual/sitemap.html.fr
 #srv/web/ipfire/manual/sitemap.html.ja.utf8
 #srv/web/ipfire/manual/sitemap.html.ko.euc-kr
 #srv/web/ipfire/manual/sitemap.html.tr.utf8
 #srv/web/ipfire/manual/sitemap.html.zh-cn.utf8
+#srv/web/ipfire/manual/socache.html
+#srv/web/ipfire/manual/socache.html.en
+#srv/web/ipfire/manual/socache.html.fr
 #srv/web/ipfire/manual/ssl
 #srv/web/ipfire/manual/ssl/index.html
 #srv/web/ipfire/manual/ssl/index.html.en
+#srv/web/ipfire/manual/ssl/index.html.fr
 #srv/web/ipfire/manual/ssl/index.html.ja.utf8
 #srv/web/ipfire/manual/ssl/index.html.tr.utf8
 #srv/web/ipfire/manual/ssl/index.html.zh-cn.utf8
 #srv/web/ipfire/manual/ssl/ssl_compat.html
 #srv/web/ipfire/manual/ssl/ssl_compat.html.en
+#srv/web/ipfire/manual/ssl/ssl_compat.html.fr
 #srv/web/ipfire/manual/ssl/ssl_faq.html
 #srv/web/ipfire/manual/ssl/ssl_faq.html.en
+#srv/web/ipfire/manual/ssl/ssl_faq.html.fr
 #srv/web/ipfire/manual/ssl/ssl_howto.html
 #srv/web/ipfire/manual/ssl/ssl_howto.html.en
+#srv/web/ipfire/manual/ssl/ssl_howto.html.fr
 #srv/web/ipfire/manual/ssl/ssl_intro.html
 #srv/web/ipfire/manual/ssl/ssl_intro.html.en
+#srv/web/ipfire/manual/ssl/ssl_intro.html.fr
 #srv/web/ipfire/manual/ssl/ssl_intro.html.ja.utf8
 #srv/web/ipfire/manual/stopping.html
 #srv/web/ipfire/manual/stopping.html.de
@@ -1093,12 +1403,11 @@ etc/httpd/conf/vhosts.d/ipfire-interface.conf
 #srv/web/ipfire/manual/suexec.html.ko.euc-kr
 #srv/web/ipfire/manual/suexec.html.tr.utf8
 #srv/web/ipfire/manual/upgrading.html
-#srv/web/ipfire/manual/upgrading.html.de
 #srv/web/ipfire/manual/upgrading.html.en
 #srv/web/ipfire/manual/upgrading.html.fr
-#srv/web/ipfire/manual/upgrading.html.ja.utf8
 #srv/web/ipfire/manual/urlmapping.html
 #srv/web/ipfire/manual/urlmapping.html.en
+#srv/web/ipfire/manual/urlmapping.html.fr
 #srv/web/ipfire/manual/urlmapping.html.ja.utf8
 #srv/web/ipfire/manual/urlmapping.html.ko.euc-kr
 #srv/web/ipfire/manual/urlmapping.html.tr.utf8
@@ -1126,7 +1435,6 @@ etc/httpd/conf/vhosts.d/ipfire-interface.conf
 #srv/web/ipfire/manual/vhosts/index.html.fr
 #srv/web/ipfire/manual/vhosts/index.html.ja.utf8
 #srv/web/ipfire/manual/vhosts/index.html.ko.euc-kr
-#srv/web/ipfire/manual/vhosts/index.html.ru.koi8-r
 #srv/web/ipfire/manual/vhosts/index.html.tr.utf8
 #srv/web/ipfire/manual/vhosts/index.html.zh-cn.utf8
 #srv/web/ipfire/manual/vhosts/ip-based.html
@@ -1137,6 +1445,7 @@ etc/httpd/conf/vhosts.d/ipfire-interface.conf
 #srv/web/ipfire/manual/vhosts/ip-based.html.tr.utf8
 #srv/web/ipfire/manual/vhosts/mass.html
 #srv/web/ipfire/manual/vhosts/mass.html.en
+#srv/web/ipfire/manual/vhosts/mass.html.fr
 #srv/web/ipfire/manual/vhosts/mass.html.ko.euc-kr
 #srv/web/ipfire/manual/vhosts/mass.html.tr.utf8
 #srv/web/ipfire/manual/vhosts/name-based.html
@@ -1146,13 +1455,21 @@ etc/httpd/conf/vhosts.d/ipfire-interface.conf
 #srv/web/ipfire/manual/vhosts/name-based.html.ja.utf8
 #srv/web/ipfire/manual/vhosts/name-based.html.ko.euc-kr
 #srv/web/ipfire/manual/vhosts/name-based.html.tr.utf8
-#usr/bin/apr-1-config
-#usr/bin/apu-1-config
+#usr/bin/ab
+#usr/bin/apxs
+#usr/bin/dbmmanage
+#usr/bin/htdbm
+#usr/bin/htdigest
+usr/bin/htpasswd
+#usr/bin/httxt2dbm
+#usr/bin/logresolve
 #usr/include/apache
 #usr/include/apache/ap_compat.h
 #usr/include/apache/ap_config.h
 #usr/include/apache/ap_config_auto.h
 #usr/include/apache/ap_config_layout.h
+#usr/include/apache/ap_expr.h
+#usr/include/apache/ap_hooks.h
 #usr/include/apache/ap_listen.h
 #usr/include/apache/ap_mmn.h
 #usr/include/apache/ap_mpm.h
@@ -1160,77 +1477,11 @@ etc/httpd/conf/vhosts.d/ipfire-interface.conf
 #usr/include/apache/ap_regex.h
 #usr/include/apache/ap_regkey.h
 #usr/include/apache/ap_release.h
-#usr/include/apache/apr.h
-#usr/include/apache/apr_allocator.h
-#usr/include/apache/apr_anylock.h
-#usr/include/apache/apr_atomic.h
-#usr/include/apache/apr_base64.h
-#usr/include/apache/apr_buckets.h
-#usr/include/apache/apr_crypto.h
-#usr/include/apache/apr_date.h
-#usr/include/apache/apr_dbd.h
-#usr/include/apache/apr_dbm.h
-#usr/include/apache/apr_dso.h
-#usr/include/apache/apr_env.h
-#usr/include/apache/apr_errno.h
-#usr/include/apache/apr_escape.h
-#usr/include/apache/apr_file_info.h
-#usr/include/apache/apr_file_io.h
-#usr/include/apache/apr_fnmatch.h
-#usr/include/apache/apr_general.h
-#usr/include/apache/apr_getopt.h
-#usr/include/apache/apr_global_mutex.h
-#usr/include/apache/apr_hash.h
-#usr/include/apache/apr_hooks.h
-#usr/include/apache/apr_inherit.h
-#usr/include/apache/apr_ldap.h
-#usr/include/apache/apr_ldap_init.h
-#usr/include/apache/apr_ldap_option.h
-#usr/include/apache/apr_ldap_rebind.h
-#usr/include/apache/apr_ldap_url.h
-#usr/include/apache/apr_lib.h
-#usr/include/apache/apr_md4.h
-#usr/include/apache/apr_md5.h
-#usr/include/apache/apr_memcache.h
-#usr/include/apache/apr_mmap.h
-#usr/include/apache/apr_network_io.h
-#usr/include/apache/apr_optional.h
-#usr/include/apache/apr_optional_hooks.h
-#usr/include/apache/apr_poll.h
-#usr/include/apache/apr_pools.h
-#usr/include/apache/apr_portable.h
-#usr/include/apache/apr_proc_mutex.h
-#usr/include/apache/apr_queue.h
-#usr/include/apache/apr_random.h
-#usr/include/apache/apr_reslist.h
-#usr/include/apache/apr_ring.h
-#usr/include/apache/apr_rmm.h
-#usr/include/apache/apr_sdbm.h
-#usr/include/apache/apr_sha1.h
-#usr/include/apache/apr_shm.h
-#usr/include/apache/apr_signal.h
-#usr/include/apache/apr_skiplist.h
-#usr/include/apache/apr_strings.h
-#usr/include/apache/apr_strmatch.h
-#usr/include/apache/apr_support.h
-#usr/include/apache/apr_tables.h
-#usr/include/apache/apr_thread_cond.h
-#usr/include/apache/apr_thread_mutex.h
-#usr/include/apache/apr_thread_pool.h
-#usr/include/apache/apr_thread_proc.h
-#usr/include/apache/apr_thread_rwlock.h
-#usr/include/apache/apr_time.h
-#usr/include/apache/apr_uri.h
-#usr/include/apache/apr_user.h
-#usr/include/apache/apr_uuid.h
-#usr/include/apache/apr_version.h
-#usr/include/apache/apr_want.h
-#usr/include/apache/apr_xlate.h
-#usr/include/apache/apr_xml.h
-#usr/include/apache/apu.h
-#usr/include/apache/apu_errno.h
-#usr/include/apache/apu_version.h
-#usr/include/apache/apu_want.h
+#usr/include/apache/ap_slotmem.h
+#usr/include/apache/ap_socache.h
+#usr/include/apache/apache_noprobes.h
+#usr/include/apache/cache_common.h
+#usr/include/apache/heartbeat.h
 #usr/include/apache/http_config.h
 #usr/include/apache/http_connection.h
 #usr/include/apache/http_core.h
@@ -1241,6 +1492,7 @@ etc/httpd/conf/vhosts.d/ipfire-interface.conf
 #usr/include/apache/http_vhost.h
 #usr/include/apache/httpd.h
 #usr/include/apache/mod_auth.h
+#usr/include/apache/mod_cache.h
 #usr/include/apache/mod_cgi.h
 #usr/include/apache/mod_core.h
 #usr/include/apache/mod_dav.h
@@ -1248,77 +1500,102 @@ etc/httpd/conf/vhosts.d/ipfire-interface.conf
 #usr/include/apache/mod_include.h
 #usr/include/apache/mod_log_config.h
 #usr/include/apache/mod_proxy.h
+#usr/include/apache/mod_request.h
 #usr/include/apache/mod_rewrite.h
+#usr/include/apache/mod_session.h
+#usr/include/apache/mod_so.h
 #usr/include/apache/mod_ssl.h
+#usr/include/apache/mod_ssl_openssl.h
 #usr/include/apache/mod_status.h
-#usr/include/apache/mpm.h
+#usr/include/apache/mod_unixd.h
+#usr/include/apache/mod_watchdog.h
+#usr/include/apache/mod_xml2enc.h
 #usr/include/apache/mpm_common.h
-#usr/include/apache/mpm_default.h
 #usr/include/apache/os.h
 #usr/include/apache/scoreboard.h
 #usr/include/apache/unixd.h
 #usr/include/apache/util_cfgtree.h
 #usr/include/apache/util_charset.h
+#usr/include/apache/util_cookies.h
 #usr/include/apache/util_ebcdic.h
+#usr/include/apache/util_fcgi.h
 #usr/include/apache/util_filter.h
 #usr/include/apache/util_ldap.h
 #usr/include/apache/util_md5.h
+#usr/include/apache/util_mutex.h
 #usr/include/apache/util_script.h
 #usr/include/apache/util_time.h
+#usr/include/apache/util_varbuf.h
 #usr/include/apache/util_xml.h
 #usr/lib/apache
 #usr/lib/apache/build
-#usr/lib/apache/build/apr_rules.mk
 #usr/lib/apache/build/config.nice
 #usr/lib/apache/build/config_vars.mk
 #usr/lib/apache/build/instdso.sh
 #usr/lib/apache/build/library.mk
-#usr/lib/apache/build/libtool
 #usr/lib/apache/build/ltlib.mk
-#usr/lib/apache/build/make_exports.awk
-#usr/lib/apache/build/make_var_export.awk
 #usr/lib/apache/build/mkdir.sh
 #usr/lib/apache/build/program.mk
 #usr/lib/apache/build/rules.mk
 #usr/lib/apache/build/special.mk
 #usr/lib/apache/httpd.exp
+#usr/lib/apache/mod_access_compat.so
 usr/lib/apache/mod_actions.so
 usr/lib/apache/mod_alias.so
+usr/lib/apache/mod_allowmethods.so
 usr/lib/apache/mod_asis.so
 usr/lib/apache/mod_auth_basic.so
 usr/lib/apache/mod_auth_digest.so
+usr/lib/apache/mod_auth_form.so
 usr/lib/apache/mod_authn_anon.so
+usr/lib/apache/mod_authn_core.so
 usr/lib/apache/mod_authn_dbd.so
 usr/lib/apache/mod_authn_dbm.so
-usr/lib/apache/mod_authn_default.so
 usr/lib/apache/mod_authn_file.so
+usr/lib/apache/mod_authn_socache.so
+usr/lib/apache/mod_authz_core.so
+usr/lib/apache/mod_authz_dbd.so
 usr/lib/apache/mod_authz_dbm.so
-usr/lib/apache/mod_authz_default.so
 usr/lib/apache/mod_authz_groupfile.so
 usr/lib/apache/mod_authz_host.so
 usr/lib/apache/mod_authz_owner.so
 usr/lib/apache/mod_authz_user.so
 usr/lib/apache/mod_autoindex.so
-usr/lib/apache/mod_cern_meta.so
-usr/lib/apache/mod_cgi.so
+usr/lib/apache/mod_buffer.so
+usr/lib/apache/mod_cache.so
+usr/lib/apache/mod_cache_disk.so
+usr/lib/apache/mod_cache_socache.so
+usr/lib/apache/mod_cgid.so
+usr/lib/apache/mod_charset_lite.so
+usr/lib/apache/mod_data.so
 usr/lib/apache/mod_dav.so
 usr/lib/apache/mod_dav_fs.so
+usr/lib/apache/mod_dav_lock.so
 usr/lib/apache/mod_dbd.so
 usr/lib/apache/mod_deflate.so
+usr/lib/apache/mod_dialup.so
 usr/lib/apache/mod_dir.so
 usr/lib/apache/mod_dumpio.so
+usr/lib/apache/mod_echo.so
 usr/lib/apache/mod_env.so
 usr/lib/apache/mod_expires.so
 usr/lib/apache/mod_ext_filter.so
+usr/lib/apache/mod_file_cache.so
 usr/lib/apache/mod_filter.so
 usr/lib/apache/mod_headers.so
-usr/lib/apache/mod_ident.so
-usr/lib/apache/mod_imagemap.so
+usr/lib/apache/mod_heartbeat.so
+usr/lib/apache/mod_heartmonitor.so
 usr/lib/apache/mod_include.so
 usr/lib/apache/mod_info.so
+usr/lib/apache/mod_lbmethod_bybusyness.so
+usr/lib/apache/mod_lbmethod_byrequests.so
+usr/lib/apache/mod_lbmethod_bytraffic.so
+usr/lib/apache/mod_lbmethod_heartbeat.so
 usr/lib/apache/mod_log_config.so
+usr/lib/apache/mod_log_debug.so
 usr/lib/apache/mod_log_forensic.so
 usr/lib/apache/mod_logio.so
+usr/lib/apache/mod_macro.so
 usr/lib/apache/mod_mime.so
 usr/lib/apache/mod_mime_magic.so
 usr/lib/apache/mod_negotiation.so
@@ -1326,66 +1603,66 @@ usr/lib/apache/mod_proxy.so
 usr/lib/apache/mod_proxy_ajp.so
 usr/lib/apache/mod_proxy_balancer.so
 usr/lib/apache/mod_proxy_connect.so
+usr/lib/apache/mod_proxy_express.so
+usr/lib/apache/mod_proxy_fcgi.so
+usr/lib/apache/mod_proxy_fdpass.so
 usr/lib/apache/mod_proxy_ftp.so
+usr/lib/apache/mod_proxy_hcheck.so
+usr/lib/apache/mod_proxy_html.so
 usr/lib/apache/mod_proxy_http.so
 usr/lib/apache/mod_proxy_scgi.so
+usr/lib/apache/mod_proxy_wstunnel.so
+usr/lib/apache/mod_ratelimit.so
+usr/lib/apache/mod_reflector.so
+usr/lib/apache/mod_remoteip.so
 usr/lib/apache/mod_reqtimeout.so
+usr/lib/apache/mod_request.so
 usr/lib/apache/mod_rewrite.so
+usr/lib/apache/mod_sed.so
+usr/lib/apache/mod_session.so
+usr/lib/apache/mod_session_cookie.so
+usr/lib/apache/mod_session_crypto.so
+usr/lib/apache/mod_session_dbd.so
 usr/lib/apache/mod_setenvif.so
+usr/lib/apache/mod_slotmem_plain.so
+usr/lib/apache/mod_slotmem_shm.so
+usr/lib/apache/mod_socache_dbm.so
+usr/lib/apache/mod_socache_memcache.so
+usr/lib/apache/mod_socache_shmcb.so
 usr/lib/apache/mod_speling.so
 usr/lib/apache/mod_ssl.so
 usr/lib/apache/mod_status.so
 usr/lib/apache/mod_substitute.so
 usr/lib/apache/mod_unique_id.so
+usr/lib/apache/mod_unixd.so
 usr/lib/apache/mod_userdir.so
 usr/lib/apache/mod_usertrack.so
 usr/lib/apache/mod_version.so
 usr/lib/apache/mod_vhost_alias.so
-#usr/lib/apr-util-1
-usr/lib/apr-util-1/apr_dbd_sqlite3-1.so
-#usr/lib/apr-util-1/apr_dbd_sqlite3.a
-#usr/lib/apr-util-1/apr_dbd_sqlite3.la
-usr/lib/apr-util-1/apr_dbd_sqlite3.so
-#usr/lib/apr.exp
-#usr/lib/aprutil.exp
-#usr/lib/libapr-1.a
-#usr/lib/libapr-1.la
-usr/lib/libapr-1.so
-usr/lib/libapr-1.so.0
-usr/lib/libapr-1.so.0.5.1
-#usr/lib/libaprutil-1.a
-#usr/lib/libaprutil-1.la
-usr/lib/libaprutil-1.so
-usr/lib/libaprutil-1.so.0
-usr/lib/libaprutil-1.so.0.5.3
-#usr/lib/pkgconfig/apr-1.pc
-#usr/lib/pkgconfig/apr-util-1.pc
+usr/lib/apache/mod_watchdog.so
+usr/lib/apache/mod_xml2enc.so
 #usr/sbin/ab
 usr/sbin/apachectl
-#usr/sbin/apxs
 #usr/sbin/checkgid
-#usr/sbin/dbmmanage
 #usr/sbin/envvars
 #usr/sbin/envvars-std
+usr/sbin/fcgistarter
 #usr/sbin/htcacheclean
-#usr/sbin/htdbm
-#usr/sbin/htdigest
-usr/sbin/htpasswd
 usr/sbin/httpd
-#usr/sbin/httxt2dbm
-#usr/sbin/logresolve
 #usr/sbin/rotatelogs
+#usr/share/man/man1/ab.1
+#usr/share/man/man1/apxs.1
 #usr/share/man/man1/dbmmanage.1
 #usr/share/man/man1/htdbm.1
 #usr/share/man/man1/htdigest.1
 #usr/share/man/man1/htpasswd.1
 #usr/share/man/man1/httxt2dbm.1
-#usr/share/man/man8/ab.8
+#usr/share/man/man1/logresolve.1
 #usr/share/man/man8/apachectl.8
-#usr/share/man/man8/apxs.8
+#usr/share/man/man8/fcgistarter.8
 #usr/share/man/man8/htcacheclean.8
 #usr/share/man/man8/httpd.8
-#usr/share/man/man8/logresolve.8
 #usr/share/man/man8/rotatelogs.8
 #usr/share/man/man8/suexec.8
 var/log/httpd
+var/log/httpd/captive
diff --git a/config/rootfiles/common/apr b/config/rootfiles/common/apr
new file mode 100644 (file)
index 0000000..c71ee01
--- /dev/null
@@ -0,0 +1,57 @@
+usr/bin/apr-1-config
+#usr/include/apr-1
+#usr/include/apr-1/apr.h
+#usr/include/apr-1/apr_allocator.h
+#usr/include/apr-1/apr_atomic.h
+#usr/include/apr-1/apr_cstr.h
+#usr/include/apr-1/apr_dso.h
+#usr/include/apr-1/apr_env.h
+#usr/include/apr-1/apr_errno.h
+#usr/include/apr-1/apr_escape.h
+#usr/include/apr-1/apr_file_info.h
+#usr/include/apr-1/apr_file_io.h
+#usr/include/apr-1/apr_fnmatch.h
+#usr/include/apr-1/apr_general.h
+#usr/include/apr-1/apr_getopt.h
+#usr/include/apr-1/apr_global_mutex.h
+#usr/include/apr-1/apr_hash.h
+#usr/include/apr-1/apr_inherit.h
+#usr/include/apr-1/apr_lib.h
+#usr/include/apr-1/apr_mmap.h
+#usr/include/apr-1/apr_network_io.h
+#usr/include/apr-1/apr_perms_set.h
+#usr/include/apr-1/apr_poll.h
+#usr/include/apr-1/apr_pools.h
+#usr/include/apr-1/apr_portable.h
+#usr/include/apr-1/apr_proc_mutex.h
+#usr/include/apr-1/apr_random.h
+#usr/include/apr-1/apr_ring.h
+#usr/include/apr-1/apr_shm.h
+#usr/include/apr-1/apr_signal.h
+#usr/include/apr-1/apr_skiplist.h
+#usr/include/apr-1/apr_strings.h
+#usr/include/apr-1/apr_support.h
+#usr/include/apr-1/apr_tables.h
+#usr/include/apr-1/apr_thread_cond.h
+#usr/include/apr-1/apr_thread_mutex.h
+#usr/include/apr-1/apr_thread_proc.h
+#usr/include/apr-1/apr_thread_rwlock.h
+#usr/include/apr-1/apr_time.h
+#usr/include/apr-1/apr_user.h
+#usr/include/apr-1/apr_version.h
+#usr/include/apr-1/apr_want.h
+#usr/lib/apr.exp
+#usr/lib/libapr-1.la
+#usr/lib/libapr-1.so
+usr/lib/libapr-1.so.0
+usr/lib/libapr-1.so.0.6.2
+#usr/lib/pkgconfig/apr-1.pc
+#usr/share/apr-1
+#usr/share/apr-1/build
+#usr/share/apr-1/build/apr_common.m4
+#usr/share/apr-1/build/apr_rules.mk
+#usr/share/apr-1/build/find_apr.m4
+#usr/share/apr-1/build/libtool
+#usr/share/apr-1/build/make_exports.awk
+#usr/share/apr-1/build/make_var_export.awk
+#usr/share/apr-1/build/mkdir.sh
diff --git a/config/rootfiles/common/aprutil b/config/rootfiles/common/aprutil
new file mode 100644 (file)
index 0000000..e9cf3e0
--- /dev/null
@@ -0,0 +1,47 @@
+usr/bin/apu-1-config
+#usr/include/apr-1/apr_anylock.h
+#usr/include/apr-1/apr_base64.h
+#usr/include/apr-1/apr_buckets.h
+#usr/include/apr-1/apr_crypto.h
+#usr/include/apr-1/apr_date.h
+#usr/include/apr-1/apr_dbd.h
+#usr/include/apr-1/apr_dbm.h
+#usr/include/apr-1/apr_hooks.h
+#usr/include/apr-1/apr_ldap.h
+#usr/include/apr-1/apr_ldap_init.h
+#usr/include/apr-1/apr_ldap_option.h
+#usr/include/apr-1/apr_ldap_rebind.h
+#usr/include/apr-1/apr_ldap_url.h
+#usr/include/apr-1/apr_md4.h
+#usr/include/apr-1/apr_md5.h
+#usr/include/apr-1/apr_memcache.h
+#usr/include/apr-1/apr_optional.h
+#usr/include/apr-1/apr_optional_hooks.h
+#usr/include/apr-1/apr_queue.h
+#usr/include/apr-1/apr_redis.h
+#usr/include/apr-1/apr_reslist.h
+#usr/include/apr-1/apr_rmm.h
+#usr/include/apr-1/apr_sdbm.h
+#usr/include/apr-1/apr_sha1.h
+#usr/include/apr-1/apr_siphash.h
+#usr/include/apr-1/apr_strmatch.h
+#usr/include/apr-1/apr_thread_pool.h
+#usr/include/apr-1/apr_uri.h
+#usr/include/apr-1/apr_uuid.h
+#usr/include/apr-1/apr_xlate.h
+#usr/include/apr-1/apr_xml.h
+#usr/include/apr-1/apu.h
+#usr/include/apr-1/apu_errno.h
+#usr/include/apr-1/apu_version.h
+#usr/include/apr-1/apu_want.h
+#usr/include/apr-1/expat.h
+#usr/lib/apr-util-1
+usr/lib/apr-util-1/apr_crypto_openssl-1.so
+#usr/lib/apr-util-1/apr_crypto_openssl.la
+usr/lib/apr-util-1/apr_crypto_openssl.so
+#usr/lib/aprutil.exp
+#usr/lib/libaprutil-1.la
+#usr/lib/libaprutil-1.so
+usr/lib/libaprutil-1.so.0
+usr/lib/libaprutil-1.so.0.6.0
+#usr/lib/pkgconfig/apr-util-1.pc
diff --git a/config/rootfiles/common/bootstrap b/config/rootfiles/common/bootstrap
new file mode 100644 (file)
index 0000000..cc5566a
--- /dev/null
@@ -0,0 +1,17 @@
+#usr/share/bootstrap
+#usr/share/bootstrap/css
+usr/share/bootstrap/css/bootstrap.css
+usr/share/bootstrap/css/bootstrap.css.map
+usr/share/bootstrap/css/bootstrap-grid.css
+usr/share/bootstrap/css/bootstrap-grid.css.map
+usr/share/bootstrap/css/bootstrap-grid.min.css
+usr/share/bootstrap/css/bootstrap-grid.min.css.map
+usr/share/bootstrap/css/bootstrap.min.css
+usr/share/bootstrap/css/bootstrap.min.css.map
+usr/share/bootstrap/css/bootstrap-reboot.css
+usr/share/bootstrap/css/bootstrap-reboot.css.map
+usr/share/bootstrap/css/bootstrap-reboot.min.css
+usr/share/bootstrap/css/bootstrap-reboot.min.css.map
+#usr/share/bootstrap/js
+usr/share/bootstrap/js/bootstrap.js
+usr/share/bootstrap/js/bootstrap.min.js
index 911a780ecc36a3c0b825399972d9a30034d777a5..58424ed2b67a9ccf342be07f7edf78d658550af4 100644 (file)
@@ -11,6 +11,11 @@ var/ipfire/auth
 var/ipfire/backup/exclude.user
 var/ipfire/backup/include.user
 var/ipfire/ca
+var/ipfire/captive
+var/ipfire/captive/agb.txt
+var/ipfire/captive/clients
+var/ipfire/captive/settings
+var/ipfire/captive/voucher_out
 var/ipfire/certs
 #var/ipfire/certs/index.txt
 #var/ipfire/certs/serial
@@ -51,16 +56,14 @@ var/ipfire/extrahd
 #var/ipfire/extrahd/settings
 var/ipfire/firewall
 #var/ipfire/firewall/config
-#var/ipfire/firewall/dmz
 #var/ipfire/firewall/geoipblock
 #var/ipfire/firewall/input
-#var/ipfire/firewall/nat
 #var/ipfire/firewall/outgoing
 #var/ipfire/firewall/p2protocols
 #var/ipfire/firewall/settings
 var/ipfire/fwhosts
-#var/ipfire/fwhosts/customgroups
 #var/ipfire/fwhosts/customgeoipgrp
+#var/ipfire/fwhosts/customgroups
 #var/ipfire/fwhosts/customhosts
 #var/ipfire/fwhosts/customnetworks
 #var/ipfire/fwhosts/customservicegrp
@@ -116,6 +119,7 @@ var/ipfire/menu.d/70-log.menu
 #var/ipfire/menu.d/EX-tor.menu
 #var/ipfire/menu.d/EX-wlanap.menu
 var/ipfire/modem
+var/ipfire/modem-lib.pl
 #var/ipfire/modem/defaults
 #var/ipfire/modem/settings
 var/ipfire/modem-lib.pl
index 009289bd8c0201cbac98a2ca1cc02810afe5bcb4..8231c75888cb1dba6c158bc3200b239c3a77ba60 100644 (file)
@@ -33,7 +33,7 @@ usr/lib/libgnutls-dane.so.0.4.1
 #usr/lib/libgnutls.la
 #usr/lib/libgnutls.so
 usr/lib/libgnutls.so.30
-usr/lib/libgnutls.so.30.14.2
+usr/lib/libgnutls.so.30.14.7
 #usr/lib/libgnutlsxx.la
 #usr/lib/libgnutlsxx.so
 usr/lib/libgnutlsxx.so.28
index 725593f8b812df9ac874631bbeb36414ddbb49ba..5ecf1b70f02b7176cb6638c0df10a65bf8ae52ac 100644 (file)
@@ -6,7 +6,7 @@
 #usr/lib/libgcrypt.la
 #usr/lib/libgcrypt.so
 usr/lib/libgcrypt.so.20
-usr/lib/libgcrypt.so.20.1.7
+usr/lib/libgcrypt.so.20.2.0
 #usr/share/aclocal/libgcrypt.m4
 #usr/share/info/gcrypt.info
 #usr/share/man/man1/hmac256.1
index 63a005129c5483ab9f03ec35b99968697075c085..789179513b1053547288759bf6e7889cbd133a77 100644 (file)
@@ -1,12 +1,14 @@
 usr/local/bin/addonctrl
 #usr/local/bin/applejuicectrl
 usr/local/bin/backupctrl
+usr/local/bin/captivectrl
 #usr/local/bin/clamavctrl
 usr/local/bin/collectdctrl
 usr/local/bin/ddnsctrl
 usr/local/bin/dhcpctrl
 usr/local/bin/extrahdctrl
 usr/local/bin/fireinfoctrl
+usr/local/bin/firewallctrl
 usr/local/bin/getconntracktable
 usr/local/bin/getipstat
 #usr/local/bin/iowrap
@@ -16,8 +18,6 @@ usr/local/bin/launch-ether-wake
 usr/local/bin/logwatch
 #usr/local/bin/mpfirectrl
 usr/local/bin/openvpnctrl
-#usr/local/bin/outgoingfwctrl
-usr/local/bin/firewallctrl
 usr/local/bin/pakfire
 usr/local/bin/qosctrl
 usr/local/bin/rebuildhosts
@@ -36,6 +36,8 @@ usr/local/bin/unboundctrl
 usr/local/bin/updxlratorctrl
 usr/local/bin/upnpctrl
 usr/local/bin/urlfilterctrl
+#usr/local/bin/wiohelper
+#usr/local/bin/wioscan
 usr/local/bin/wirelessclient
 usr/local/bin/wirelessctrl
 #usr/local/bin/wlanapctrl
index c551c0dd3ce92eab33caab43557801e1975d3d37..2493447eff78bfb4230ed404d516b0562b8ed444 100644 (file)
 #usr/lib/libpcre.la
 usr/lib/libpcre.so
 usr/lib/libpcre.so.1
-usr/lib/libpcre.so.1.2.8
+usr/lib/libpcre.so.1.2.9
 #usr/lib/libpcre16.la
 usr/lib/libpcre16.so
 usr/lib/libpcre16.so.0
-usr/lib/libpcre16.so.0.2.8
+usr/lib/libpcre16.so.0.2.9
 #usr/lib/libpcre32.la
 usr/lib/libpcre32.so
 usr/lib/libpcre32.so.0
-usr/lib/libpcre32.so.0.0.8
+usr/lib/libpcre32.so.0.0.9
 #usr/lib/libpcrecpp.la
 usr/lib/libpcrecpp.so
 usr/lib/libpcrecpp.so.0
@@ -26,78 +26,78 @@ usr/lib/libpcrecpp.so.0.0.1
 #usr/lib/libpcreposix.la
 usr/lib/libpcreposix.so
 usr/lib/libpcreposix.so.0
-usr/lib/libpcreposix.so.0.0.4
+usr/lib/libpcreposix.so.0.0.5
 #usr/lib/pkgconfig/libpcre.pc
 #usr/lib/pkgconfig/libpcre16.pc
 #usr/lib/pkgconfig/libpcre32.pc
 #usr/lib/pkgconfig/libpcrecpp.pc
 #usr/lib/pkgconfig/libpcreposix.pc
-#usr/share/doc/pcre-pcre-8.40
-#usr/share/doc/pcre-pcre-8.40/AUTHORS
-#usr/share/doc/pcre-pcre-8.40/COPYING
-#usr/share/doc/pcre-pcre-8.40/ChangeLog
-#usr/share/doc/pcre-pcre-8.40/LICENCE
-#usr/share/doc/pcre-pcre-8.40/NEWS
-#usr/share/doc/pcre-pcre-8.40/README
-#usr/share/doc/pcre-pcre-8.40/html
-#usr/share/doc/pcre-pcre-8.40/html/NON-AUTOTOOLS-BUILD.txt
-#usr/share/doc/pcre-pcre-8.40/html/README.txt
-#usr/share/doc/pcre-pcre-8.40/html/index.html
-#usr/share/doc/pcre-pcre-8.40/html/pcre-config.html
-#usr/share/doc/pcre-pcre-8.40/html/pcre.html
-#usr/share/doc/pcre-pcre-8.40/html/pcre16.html
-#usr/share/doc/pcre-pcre-8.40/html/pcre32.html
-#usr/share/doc/pcre-pcre-8.40/html/pcre_assign_jit_stack.html
-#usr/share/doc/pcre-pcre-8.40/html/pcre_compile.html
-#usr/share/doc/pcre-pcre-8.40/html/pcre_compile2.html
-#usr/share/doc/pcre-pcre-8.40/html/pcre_config.html
-#usr/share/doc/pcre-pcre-8.40/html/pcre_copy_named_substring.html
-#usr/share/doc/pcre-pcre-8.40/html/pcre_copy_substring.html
-#usr/share/doc/pcre-pcre-8.40/html/pcre_dfa_exec.html
-#usr/share/doc/pcre-pcre-8.40/html/pcre_exec.html
-#usr/share/doc/pcre-pcre-8.40/html/pcre_free_study.html
-#usr/share/doc/pcre-pcre-8.40/html/pcre_free_substring.html
-#usr/share/doc/pcre-pcre-8.40/html/pcre_free_substring_list.html
-#usr/share/doc/pcre-pcre-8.40/html/pcre_fullinfo.html
-#usr/share/doc/pcre-pcre-8.40/html/pcre_get_named_substring.html
-#usr/share/doc/pcre-pcre-8.40/html/pcre_get_stringnumber.html
-#usr/share/doc/pcre-pcre-8.40/html/pcre_get_stringtable_entries.html
-#usr/share/doc/pcre-pcre-8.40/html/pcre_get_substring.html
-#usr/share/doc/pcre-pcre-8.40/html/pcre_get_substring_list.html
-#usr/share/doc/pcre-pcre-8.40/html/pcre_jit_exec.html
-#usr/share/doc/pcre-pcre-8.40/html/pcre_jit_stack_alloc.html
-#usr/share/doc/pcre-pcre-8.40/html/pcre_jit_stack_free.html
-#usr/share/doc/pcre-pcre-8.40/html/pcre_maketables.html
-#usr/share/doc/pcre-pcre-8.40/html/pcre_pattern_to_host_byte_order.html
-#usr/share/doc/pcre-pcre-8.40/html/pcre_refcount.html
-#usr/share/doc/pcre-pcre-8.40/html/pcre_study.html
-#usr/share/doc/pcre-pcre-8.40/html/pcre_utf16_to_host_byte_order.html
-#usr/share/doc/pcre-pcre-8.40/html/pcre_utf32_to_host_byte_order.html
-#usr/share/doc/pcre-pcre-8.40/html/pcre_version.html
-#usr/share/doc/pcre-pcre-8.40/html/pcreapi.html
-#usr/share/doc/pcre-pcre-8.40/html/pcrebuild.html
-#usr/share/doc/pcre-pcre-8.40/html/pcrecallout.html
-#usr/share/doc/pcre-pcre-8.40/html/pcrecompat.html
-#usr/share/doc/pcre-pcre-8.40/html/pcrecpp.html
-#usr/share/doc/pcre-pcre-8.40/html/pcredemo.html
-#usr/share/doc/pcre-pcre-8.40/html/pcregrep.html
-#usr/share/doc/pcre-pcre-8.40/html/pcrejit.html
-#usr/share/doc/pcre-pcre-8.40/html/pcrelimits.html
-#usr/share/doc/pcre-pcre-8.40/html/pcrematching.html
-#usr/share/doc/pcre-pcre-8.40/html/pcrepartial.html
-#usr/share/doc/pcre-pcre-8.40/html/pcrepattern.html
-#usr/share/doc/pcre-pcre-8.40/html/pcreperform.html
-#usr/share/doc/pcre-pcre-8.40/html/pcreposix.html
-#usr/share/doc/pcre-pcre-8.40/html/pcreprecompile.html
-#usr/share/doc/pcre-pcre-8.40/html/pcresample.html
-#usr/share/doc/pcre-pcre-8.40/html/pcrestack.html
-#usr/share/doc/pcre-pcre-8.40/html/pcresyntax.html
-#usr/share/doc/pcre-pcre-8.40/html/pcretest.html
-#usr/share/doc/pcre-pcre-8.40/html/pcreunicode.html
-#usr/share/doc/pcre-pcre-8.40/pcre-config.txt
-#usr/share/doc/pcre-pcre-8.40/pcre.txt
-#usr/share/doc/pcre-pcre-8.40/pcregrep.txt
-#usr/share/doc/pcre-pcre-8.40/pcretest.txt
+#usr/share/doc/pcre-pcre-8.41
+#usr/share/doc/pcre-pcre-8.41/AUTHORS
+#usr/share/doc/pcre-pcre-8.41/COPYING
+#usr/share/doc/pcre-pcre-8.41/ChangeLog
+#usr/share/doc/pcre-pcre-8.41/LICENCE
+#usr/share/doc/pcre-pcre-8.41/NEWS
+#usr/share/doc/pcre-pcre-8.41/README
+#usr/share/doc/pcre-pcre-8.41/html
+#usr/share/doc/pcre-pcre-8.41/html/NON-AUTOTOOLS-BUILD.txt
+#usr/share/doc/pcre-pcre-8.41/html/README.txt
+#usr/share/doc/pcre-pcre-8.41/html/index.html
+#usr/share/doc/pcre-pcre-8.41/html/pcre-config.html
+#usr/share/doc/pcre-pcre-8.41/html/pcre.html
+#usr/share/doc/pcre-pcre-8.41/html/pcre16.html
+#usr/share/doc/pcre-pcre-8.41/html/pcre32.html
+#usr/share/doc/pcre-pcre-8.41/html/pcre_assign_jit_stack.html
+#usr/share/doc/pcre-pcre-8.41/html/pcre_compile.html
+#usr/share/doc/pcre-pcre-8.41/html/pcre_compile2.html
+#usr/share/doc/pcre-pcre-8.41/html/pcre_config.html
+#usr/share/doc/pcre-pcre-8.41/html/pcre_copy_named_substring.html
+#usr/share/doc/pcre-pcre-8.41/html/pcre_copy_substring.html
+#usr/share/doc/pcre-pcre-8.41/html/pcre_dfa_exec.html
+#usr/share/doc/pcre-pcre-8.41/html/pcre_exec.html
+#usr/share/doc/pcre-pcre-8.41/html/pcre_free_study.html
+#usr/share/doc/pcre-pcre-8.41/html/pcre_free_substring.html
+#usr/share/doc/pcre-pcre-8.41/html/pcre_free_substring_list.html
+#usr/share/doc/pcre-pcre-8.41/html/pcre_fullinfo.html
+#usr/share/doc/pcre-pcre-8.41/html/pcre_get_named_substring.html
+#usr/share/doc/pcre-pcre-8.41/html/pcre_get_stringnumber.html
+#usr/share/doc/pcre-pcre-8.41/html/pcre_get_stringtable_entries.html
+#usr/share/doc/pcre-pcre-8.41/html/pcre_get_substring.html
+#usr/share/doc/pcre-pcre-8.41/html/pcre_get_substring_list.html
+#usr/share/doc/pcre-pcre-8.41/html/pcre_jit_exec.html
+#usr/share/doc/pcre-pcre-8.41/html/pcre_jit_stack_alloc.html
+#usr/share/doc/pcre-pcre-8.41/html/pcre_jit_stack_free.html
+#usr/share/doc/pcre-pcre-8.41/html/pcre_maketables.html
+#usr/share/doc/pcre-pcre-8.41/html/pcre_pattern_to_host_byte_order.html
+#usr/share/doc/pcre-pcre-8.41/html/pcre_refcount.html
+#usr/share/doc/pcre-pcre-8.41/html/pcre_study.html
+#usr/share/doc/pcre-pcre-8.41/html/pcre_utf16_to_host_byte_order.html
+#usr/share/doc/pcre-pcre-8.41/html/pcre_utf32_to_host_byte_order.html
+#usr/share/doc/pcre-pcre-8.41/html/pcre_version.html
+#usr/share/doc/pcre-pcre-8.41/html/pcreapi.html
+#usr/share/doc/pcre-pcre-8.41/html/pcrebuild.html
+#usr/share/doc/pcre-pcre-8.41/html/pcrecallout.html
+#usr/share/doc/pcre-pcre-8.41/html/pcrecompat.html
+#usr/share/doc/pcre-pcre-8.41/html/pcrecpp.html
+#usr/share/doc/pcre-pcre-8.41/html/pcredemo.html
+#usr/share/doc/pcre-pcre-8.41/html/pcregrep.html
+#usr/share/doc/pcre-pcre-8.41/html/pcrejit.html
+#usr/share/doc/pcre-pcre-8.41/html/pcrelimits.html
+#usr/share/doc/pcre-pcre-8.41/html/pcrematching.html
+#usr/share/doc/pcre-pcre-8.41/html/pcrepartial.html
+#usr/share/doc/pcre-pcre-8.41/html/pcrepattern.html
+#usr/share/doc/pcre-pcre-8.41/html/pcreperform.html
+#usr/share/doc/pcre-pcre-8.41/html/pcreposix.html
+#usr/share/doc/pcre-pcre-8.41/html/pcreprecompile.html
+#usr/share/doc/pcre-pcre-8.41/html/pcresample.html
+#usr/share/doc/pcre-pcre-8.41/html/pcrestack.html
+#usr/share/doc/pcre-pcre-8.41/html/pcresyntax.html
+#usr/share/doc/pcre-pcre-8.41/html/pcretest.html
+#usr/share/doc/pcre-pcre-8.41/html/pcreunicode.html
+#usr/share/doc/pcre-pcre-8.41/pcre-config.txt
+#usr/share/doc/pcre-pcre-8.41/pcre.txt
+#usr/share/doc/pcre-pcre-8.41/pcregrep.txt
+#usr/share/doc/pcre-pcre-8.41/pcretest.txt
 #usr/share/man/man1/pcre-config.1
 #usr/share/man/man1/pcregrep.1
 #usr/share/man/man1/pcretest.1
diff --git a/config/rootfiles/common/perl-Font-TTF b/config/rootfiles/common/perl-Font-TTF
new file mode 100644 (file)
index 0000000..e21941c
--- /dev/null
@@ -0,0 +1,164 @@
+#usr/lib/perl5/site_perl/5.12.3/Font
+#usr/lib/perl5/site_perl/5.12.3/Font/TTF
+usr/lib/perl5/site_perl/5.12.3/Font/TTF.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/AATKern.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/AATutils.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Anchor.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Bsln.pm
+#usr/lib/perl5/site_perl/5.12.3/Font/TTF/Changes_old.txt
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Cmap.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Coverage.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Cvt_.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/DSIG.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Delta.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Dumper.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/EBDT.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/EBLC.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Fdsc.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Feat.pm
+#usr/lib/perl5/site_perl/5.12.3/Font/TTF/Features
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Features/Cvar.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Features/Size.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Features/Sset.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Fmtx.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Font.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Fpgm.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/GDEF.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/GPOS.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/GSUB.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Glat.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Gloc.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Glyf.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Glyph.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/GrFeat.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Hdmx.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Head.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Hhea.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Hmtx.pm
+#usr/lib/perl5/site_perl/5.12.3/Font/TTF/Kern
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Kern.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Kern/ClassArray.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Kern/CompactClassArray.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Kern/OrderedList.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Kern/StateTable.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Kern/Subtable.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/LTSH.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Loca.pm
+#usr/lib/perl5/site_perl/5.12.3/Font/TTF/Manual.pod
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Maxp.pm
+#usr/lib/perl5/site_perl/5.12.3/Font/TTF/Mort
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Mort.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Mort/Chain.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Mort/Contextual.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Mort/Insertion.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Mort/Ligature.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Mort/Noncontextual.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Mort/Rearrangement.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Mort/Subtable.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Name.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/OS_2.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/OTTags.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/OldCmap.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/OldMort.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/PCLT.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/PSNames.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Post.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Prep.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Prop.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Segarr.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Silf.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Sill.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Table.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Ttc.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Ttopen.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Useall.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Utils.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Vhea.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Vmtx.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Win32.pm
+#usr/lib/perl5/site_perl/5.12.3/Font/TTF/Woff
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Woff.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Woff/MetaData.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/Woff/PrivateData.pm
+usr/lib/perl5/site_perl/5.12.3/Font/TTF/XMLparse.pm
+#usr/lib/perl5/site_perl/5.12.3/ttfmod.pl
+#usr/lib/perl5/site_perl/5.12.3/MACHINE-linux-thread-multi/auto/Font
+#usr/lib/perl5/site_perl/5.12.3/MACHINE-linux-thread-multi/auto/Font/TTF
+#usr/lib/perl5/site_perl/5.12.3/MACHINE-linux-thread-multi/auto/Font/TTF/.packlist
+#usr/share/man/man3/Font::TTF.3
+#usr/share/man/man3/Font::TTF::AATKern.3
+#usr/share/man/man3/Font::TTF::AATutils.3
+#usr/share/man/man3/Font::TTF::Anchor.3
+#usr/share/man/man3/Font::TTF::Bsln.3
+#usr/share/man/man3/Font::TTF::Cmap.3
+#usr/share/man/man3/Font::TTF::Coverage.3
+#usr/share/man/man3/Font::TTF::Cvt_.3
+#usr/share/man/man3/Font::TTF::DSIG.3
+#usr/share/man/man3/Font::TTF::Delta.3
+#usr/share/man/man3/Font::TTF::Dumper.3
+#usr/share/man/man3/Font::TTF::EBDT.3
+#usr/share/man/man3/Font::TTF::EBLC.3
+#usr/share/man/man3/Font::TTF::Fdsc.3
+#usr/share/man/man3/Font::TTF::Feat.3
+#usr/share/man/man3/Font::TTF::Features::Cvar.3
+#usr/share/man/man3/Font::TTF::Features::Size.3
+#usr/share/man/man3/Font::TTF::Features::Sset.3
+#usr/share/man/man3/Font::TTF::Fmtx.3
+#usr/share/man/man3/Font::TTF::Font.3
+#usr/share/man/man3/Font::TTF::Fpgm.3
+#usr/share/man/man3/Font::TTF::GDEF.3
+#usr/share/man/man3/Font::TTF::GPOS.3
+#usr/share/man/man3/Font::TTF::GSUB.3
+#usr/share/man/man3/Font::TTF::Glat.3
+#usr/share/man/man3/Font::TTF::Gloc.3
+#usr/share/man/man3/Font::TTF::Glyf.3
+#usr/share/man/man3/Font::TTF::Glyph.3
+#usr/share/man/man3/Font::TTF::GrFeat.3
+#usr/share/man/man3/Font::TTF::Hdmx.3
+#usr/share/man/man3/Font::TTF::Head.3
+#usr/share/man/man3/Font::TTF::Hhea.3
+#usr/share/man/man3/Font::TTF::Hmtx.3
+#usr/share/man/man3/Font::TTF::Kern.3
+#usr/share/man/man3/Font::TTF::Kern::ClassArray.3
+#usr/share/man/man3/Font::TTF::Kern::CompactClassArray.3
+#usr/share/man/man3/Font::TTF::Kern::OrderedList.3
+#usr/share/man/man3/Font::TTF::Kern::StateTable.3
+#usr/share/man/man3/Font::TTF::Kern::Subtable.3
+#usr/share/man/man3/Font::TTF::LTSH.3
+#usr/share/man/man3/Font::TTF::Loca.3
+#usr/share/man/man3/Font::TTF::Manual.3
+#usr/share/man/man3/Font::TTF::Maxp.3
+#usr/share/man/man3/Font::TTF::Mort.3
+#usr/share/man/man3/Font::TTF::Mort::Chain.3
+#usr/share/man/man3/Font::TTF::Mort::Contextual.3
+#usr/share/man/man3/Font::TTF::Mort::Insertion.3
+#usr/share/man/man3/Font::TTF::Mort::Ligature.3
+#usr/share/man/man3/Font::TTF::Mort::Noncontextual.3
+#usr/share/man/man3/Font::TTF::Mort::Rearrangement.3
+#usr/share/man/man3/Font::TTF::Mort::Subtable.3
+#usr/share/man/man3/Font::TTF::Name.3
+#usr/share/man/man3/Font::TTF::OS_2.3
+#usr/share/man/man3/Font::TTF::OTTags.3
+#usr/share/man/man3/Font::TTF::OldCmap.3
+#usr/share/man/man3/Font::TTF::OldMort.3
+#usr/share/man/man3/Font::TTF::PCLT.3
+#usr/share/man/man3/Font::TTF::PSNames.3
+#usr/share/man/man3/Font::TTF::Post.3
+#usr/share/man/man3/Font::TTF::Prep.3
+#usr/share/man/man3/Font::TTF::Prop.3
+#usr/share/man/man3/Font::TTF::Segarr.3
+#usr/share/man/man3/Font::TTF::Silf.3
+#usr/share/man/man3/Font::TTF::Sill.3
+#usr/share/man/man3/Font::TTF::Table.3
+#usr/share/man/man3/Font::TTF::Ttc.3
+#usr/share/man/man3/Font::TTF::Ttopen.3
+#usr/share/man/man3/Font::TTF::Useall.3
+#usr/share/man/man3/Font::TTF::Utils.3
+#usr/share/man/man3/Font::TTF::Vhea.3
+#usr/share/man/man3/Font::TTF::Vmtx.3
+#usr/share/man/man3/Font::TTF::Win32.3
+#usr/share/man/man3/Font::TTF::Woff.3
+#usr/share/man/man3/Font::TTF::Woff::MetaData.3
+#usr/share/man/man3/Font::TTF::Woff::PrivateData.3
+#usr/share/man/man3/Font::TTF::XMLparse.3
+#usr/share/man/man3/ttfmod.3
diff --git a/config/rootfiles/common/perl-IO-String b/config/rootfiles/common/perl-IO-String
new file mode 100644 (file)
index 0000000..89be911
--- /dev/null
@@ -0,0 +1,4 @@
+usr/lib/perl5/site_perl/5.12.3/IO/String.pm
+#usr/lib/perl5/site_perl/5.12.3/MACHINE-linux-thread-multi/auto/IO/String
+#usr/lib/perl5/site_perl/5.12.3/MACHINE-linux-thread-multi/auto/IO/String/.packlist
+#usr/share/man/man3/IO::String.3
similarity index 98%
rename from config/rootfiles/packages/perl-PDF-API2
rename to config/rootfiles/common/perl-PDF-API2
index 642579a6e5c0ee6b5f8dad800abec7399f057106..17dc85a94b4ec0b084bc830515a8aa1419415e2c 100644 (file)
@@ -124,7 +124,9 @@ usr/lib/perl5/site_perl/5.12.3/PDF/API2/Resource/XObject/Image/GIF.pm
 usr/lib/perl5/site_perl/5.12.3/PDF/API2/Resource/XObject/Image/JPEG.pm
 usr/lib/perl5/site_perl/5.12.3/PDF/API2/Resource/XObject/Image/PNG.pm
 usr/lib/perl5/site_perl/5.12.3/PDF/API2/Resource/XObject/Image/PNM.pm
+usr/lib/perl5/site_perl/5.12.3/PDF/API2/Resource/XObject/Image/TIFF
 usr/lib/perl5/site_perl/5.12.3/PDF/API2/Resource/XObject/Image/TIFF.pm
+usr/lib/perl5/site_perl/5.12.3/PDF/API2/Resource/XObject/Image/TIFF/File.pm
 usr/lib/perl5/site_perl/5.12.3/PDF/API2/Resource/uniglyph.txt
 usr/lib/perl5/site_perl/5.12.3/PDF/API2/UniWrap.pm
 usr/lib/perl5/site_perl/5.12.3/PDF/API2/Util.pm
index 23031e96b42053147c78a19f8fac2f736118ed8e..fa073de9da11573dc9ecbe05cd28e5501a5ac8f9 100644 (file)
@@ -522,9 +522,9 @@ usr/lib/php/XML/Util.php
 usr/lib/php/doc/XML_Util/examples/example.php
 usr/lib/php/doc/XML_Util/examples/example2.php
 #usr/lib/php/extensions
-#usr/lib/php/extensions/no-debug-non-zts-20090626
-usr/lib/php/extensions/no-debug-non-zts-20090626/dba.so
-usr/lib/php/extensions/no-debug-non-zts-20090626/idn.so
+#usr/lib/php/extensions/no-debug-zts-20090626
+usr/lib/php/extensions/no-debug-zts-20090626/dba.so
+usr/lib/php/extensions/no-debug-zts-20090626/idn.so
 #usr/lib/php/pearcmd.php
 #usr/lib/php/peclcmd.php
 #usr/lib/php/test
@@ -557,4 +557,3 @@ usr/lib/php/extensions/no-debug-non-zts-20090626/idn.so
 #usr/man/man1/php-config.1
 #usr/man/man1/php.1
 #usr/man/man1/phpize.1
-etc/httpd/conf/conf.d/php5.conf
index ec36774b315d2644e3f7e13c548bcd995a6b7ff5..a5ba6ae26969ac3e53b05fda5fa8eac524d0b4b9 100644 (file)
@@ -69,6 +69,7 @@ run
 #sbin
 #srv
 #usr/bin
+usr/bin/captive-cleanup
 #usr/bin/perl
 #usr/include
 #usr/lib
@@ -90,7 +91,6 @@ usr/local/bin/connscheduler
 usr/local/bin/consort.sh
 usr/local/bin/convert-ovpn
 usr/local/bin/hddshutdown
-usr/local/bin/httpscert
 usr/local/bin/makegraphs
 usr/local/bin/qosd
 usr/local/bin/readhash
index fbc57866ab627e8d2a4add8a6bb34e873defb103..21a6655382df98ca640dd40ecbdd172990143fd0 100644 (file)
@@ -71,6 +71,7 @@ etc/strongswan.d/starter.conf
 etc/strongswan.d/swanctl.conf
 #etc/swanctl
 etc/swanctl/bliss
+etc/swanctl/conf.d
 etc/swanctl/ecdsa
 etc/swanctl/pkcs12
 etc/swanctl/pkcs8
diff --git a/config/rootfiles/common/ubuntu-font-family b/config/rootfiles/common/ubuntu-font-family
new file mode 100644 (file)
index 0000000..b9f7c0b
--- /dev/null
@@ -0,0 +1,13 @@
+usr/share/fonts/Ubuntu-B.ttf
+usr/share/fonts/Ubuntu-BI.ttf
+usr/share/fonts/Ubuntu-C.ttf
+usr/share/fonts/Ubuntu-L.ttf
+usr/share/fonts/Ubuntu-LI.ttf
+usr/share/fonts/Ubuntu-M.ttf
+usr/share/fonts/Ubuntu-MI.ttf
+usr/share/fonts/Ubuntu-R.ttf
+usr/share/fonts/Ubuntu-RI.ttf
+usr/share/fonts/UbuntuMono-B.ttf
+usr/share/fonts/UbuntuMono-BI.ttf
+usr/share/fonts/UbuntuMono-R.ttf
+usr/share/fonts/UbuntuMono-RI.ttf
index ee4b7fd5c9631da2a1344590f06c131d02f9f8ef..1c3994558ecce4f36b96e8117e9cd2b0ed7df9d2 100644 (file)
@@ -11,7 +11,7 @@ etc/unbound/unbound.conf
 #usr/lib/libunbound.la
 #usr/lib/libunbound.so
 usr/lib/libunbound.so.2
-usr/lib/libunbound.so.2.5.2
+usr/lib/libunbound.so.2.5.6
 usr/sbin/unbound
 usr/sbin/unbound-anchor
 usr/sbin/unbound-checkconf
index f204f165777963f78456613a63c7efea008fddf2..d538b8a5b6ce6ad79b4ee3783618d2382a665b6d 100644 (file)
@@ -8,6 +8,11 @@ srv/web/ipfire/cgi-bin/aliases.cgi
 srv/web/ipfire/cgi-bin/atm-status.cgi
 srv/web/ipfire/cgi-bin/backup.cgi
 srv/web/ipfire/cgi-bin/bluetooth.cgi
+#srv/web/ipfire/cgi-bin/captive
+srv/web/ipfire/cgi-bin/captive.cgi
+srv/web/ipfire/cgi-bin/captive/index.cgi
+srv/web/ipfire/cgi-bin/captive/logo.cgi
+srv/web/ipfire/cgi-bin/captive/redirect.cgi
 srv/web/ipfire/cgi-bin/chpasswd.cgi
 srv/web/ipfire/cgi-bin/connections.cgi
 srv/web/ipfire/cgi-bin/connscheduler.cgi
@@ -23,8 +28,8 @@ 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/guardian.cgi
 srv/web/ipfire/cgi-bin/gpl.cgi
+#srv/web/ipfire/cgi-bin/guardian.cgi
 srv/web/ipfire/cgi-bin/gui.cgi
 srv/web/ipfire/cgi-bin/hardwaregraphs.cgi
 srv/web/ipfire/cgi-bin/hosts.cgi
@@ -89,8 +94,20 @@ srv/web/ipfire/cgi-bin/wirelessclient.cgi
 srv/web/ipfire/cgi-bin/wlanap.cgi
 #srv/web/ipfire/html
 srv/web/ipfire/html/blob.gif
+#srv/web/ipfire/html/captive
+#srv/web/ipfire/html/captive/assets
+srv/web/ipfire/html/captive/assets/Ubuntu-L.ttf
+srv/web/ipfire/html/captive/assets/Ubuntu-M.ttf
+srv/web/ipfire/html/captive/assets/Ubuntu-R.ttf
+srv/web/ipfire/html/captive/assets/bootstrap-grid.min.css
+srv/web/ipfire/html/captive/assets/bootstrap-grid.min.css.map
+srv/web/ipfire/html/captive/assets/bootstrap-reboot.min.css
+srv/web/ipfire/html/captive/assets/bootstrap-reboot.min.css.map
+srv/web/ipfire/html/captive/assets/captive.css
+srv/web/ipfire/html/captive/assets/favicon.ico
+srv/web/ipfire/html/captive/assets/ipfire.png
+srv/web/ipfire/html/captive/template.html
 srv/web/ipfire/html/clwarn.cgi
-srv/web/ipfire/html/dial.cgi
 srv/web/ipfire/html/favicon.ico
 #srv/web/ipfire/html/images
 srv/web/ipfire/html/images/IPFire.png
index 95eff36969995dd229b8203a43dcfbf551db12fb..70a33d6591ce33720f9606a9348981999f95f8fb 100644 (file)
@@ -70,6 +70,7 @@ run
 #sbin
 #srv
 #usr/bin
+usr/bin/captive-cleanup
 #usr/bin/perl
 #usr/include
 #usr/lib
@@ -92,7 +93,6 @@ usr/local/bin/connscheduler
 usr/local/bin/consort.sh
 usr/local/bin/convert-ovpn
 usr/local/bin/hddshutdown
-usr/local/bin/httpscert
 usr/local/bin/makegraphs
 usr/local/bin/qosd
 usr/local/bin/readhash
diff --git a/config/rootfiles/core/115/filelists/apache2 b/config/rootfiles/core/115/filelists/apache2
new file mode 120000 (symlink)
index 0000000..eef95ef
--- /dev/null
@@ -0,0 +1 @@
+../../../common/apache2
\ No newline at end of file
diff --git a/config/rootfiles/core/115/filelists/bootstrap b/config/rootfiles/core/115/filelists/bootstrap
new file mode 120000 (symlink)
index 0000000..ed985a6
--- /dev/null
@@ -0,0 +1 @@
+../../../common/bootstrap
\ No newline at end of file
diff --git a/config/rootfiles/core/115/filelists/files b/config/rootfiles/core/115/filelists/files
new file mode 100644 (file)
index 0000000..d3e2958
--- /dev/null
@@ -0,0 +1,31 @@
+etc/system-release
+etc/issue
+etc/httpd/conf/vhosts.d/captive.conf
+etc/httpd/conf/vhosts.d/ipfire-interface.conf
+etc/httpd/conf/vhosts.d/ipfire-interface-ssl.conf
+etc/rc.d/init.d/apache
+etc/rc.d/init.d/firewall
+srv/web/ipfire/cgi-bin/captive/index.cgi
+srv/web/ipfire/cgi-bin/captive/logo.cgi
+srv/web/ipfire/cgi-bin/captive/redirect.cgi
+srv/web/ipfire/cgi-bin/captive.cgi
+srv/web/ipfire/cgi-bin/extrahd.cgi
+srv/web/ipfire/cgi-bin/ovpnmain.cgi
+srv/web/ipfire/cgi-bin/proxy.cgi
+srv/web/ipfire/cgi-bin/vpnmain.cgi
+srv/web/ipfire/html/captive
+usr/bin/captive-cleanup
+usr/local/bin/backupiso
+usr/local/bin/captivectrl
+usr/local/bin/wirelessctrl
+var/ipfire/backup/include
+var/ipfire/captive
+var/ipfire/extrahd/bin/extrahd.pl
+var/ipfire/general-functions.pl
+var/ipfire/lang.pl
+var/ipfire/langs
+var/ipfire/menu.d/30-network.menu
+var/ipfire/modem-lib.pl
+var/ipfire/network-functions.pl
+var/ipfire/ovpn/openssl/ovpn.cnf
+var/log/httpd/captive
diff --git a/config/rootfiles/core/115/filelists/logrotate b/config/rootfiles/core/115/filelists/logrotate
new file mode 120000 (symlink)
index 0000000..bc192c0
--- /dev/null
@@ -0,0 +1 @@
+../../../common/logrotate
\ No newline at end of file
diff --git a/config/rootfiles/core/115/filelists/openvpn b/config/rootfiles/core/115/filelists/openvpn
new file mode 120000 (symlink)
index 0000000..493f3f7
--- /dev/null
@@ -0,0 +1 @@
+../../../common/openvpn
\ No newline at end of file
diff --git a/config/rootfiles/core/115/filelists/perl-Font-TTF b/config/rootfiles/core/115/filelists/perl-Font-TTF
new file mode 120000 (symlink)
index 0000000..6bb27c3
--- /dev/null
@@ -0,0 +1 @@
+../../../common/perl-Font-TTF
\ No newline at end of file
diff --git a/config/rootfiles/core/115/filelists/perl-IO-String b/config/rootfiles/core/115/filelists/perl-IO-String
new file mode 120000 (symlink)
index 0000000..2953e22
--- /dev/null
@@ -0,0 +1 @@
+../../../common/perl-IO-String
\ No newline at end of file
diff --git a/config/rootfiles/core/115/filelists/perl-PDF-API2 b/config/rootfiles/core/115/filelists/perl-PDF-API2
new file mode 120000 (symlink)
index 0000000..8047841
--- /dev/null
@@ -0,0 +1 @@
+../../../common/perl-PDF-API2
\ No newline at end of file
diff --git a/config/rootfiles/core/115/filelists/ubuntu-font-family b/config/rootfiles/core/115/filelists/ubuntu-font-family
new file mode 120000 (symlink)
index 0000000..6183519
--- /dev/null
@@ -0,0 +1 @@
+../../../common/ubuntu-font-family
\ No newline at end of file
diff --git a/config/rootfiles/core/115/filelists/wpa_supplicant b/config/rootfiles/core/115/filelists/wpa_supplicant
new file mode 120000 (symlink)
index 0000000..1d04c03
--- /dev/null
@@ -0,0 +1 @@
+../../../common/wpa_supplicant
\ No newline at end of file
diff --git a/config/rootfiles/core/115/update.sh b/config/rootfiles/core/115/update.sh
new file mode 100644 (file)
index 0000000..91bb808
--- /dev/null
@@ -0,0 +1,95 @@
+#!/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) 2017 IPFire-Team <info@ipfire.org>.                        #
+#                                                                          #
+############################################################################
+#
+. /opt/pakfire/lib/functions.sh
+/usr/local/bin/backupctrl exclude >/dev/null 2>&1
+
+core=115
+
+# 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
+openvpnctrl -k
+openvpnctrl -kn2n
+/etc/rc.d/init.d/apache stop
+
+# Extract files
+extract_files
+
+# Remove files
+rm -vf \
+       /usr/local/bin/httpscert \
+       /srv/web/ipfire/html/dial.cgi
+
+# update linker config
+ldconfig
+
+# Update Language cache
+/usr/local/bin/update-lang-cache
+
+# Start services
+/etc/rc.d/init.d/apache2 start
+openvpnctrl -s
+openvpnctrl -sn2n
+
+grep -q "captivectrl" /var/spool/cron/root.orig || cat <<EOF >> /var/spool/cron/root.orig
+# Cleanup captive clients
+%hourly * /usr/bin/captive-cleanup
+
+# Reload captive firewall rules
+%nightly * 23-1   /usr/local/bin/captivectrl >/dev/null
+EOF
+fcrontab -z
+
+# Load captive portal configuration
+/etc/rc.d/init.d/firewall restart
+
+# Regenerate IPsec configuration
+sudo -u nobody /srv/web/ipfire/cgi-bin/vpnmain.cgi
+if grep -q "ENABLED=on" /var/ipfire/vpn/settings; then
+       /etc/init.d/ipsec restart
+fi
+
+# Let pakfire forget the perl-PDF-API2 package
+rm -fv /opt/pakfire/db/rootfiles/perl-PDF-API2
+rm -fv /opt/pakfire/db/*/meta-perl-PDF-API2
+
+# This update need 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/112/exclude b/config/rootfiles/oldcore/112/exclude
new file mode 100644 (file)
index 0000000..d6fd053
--- /dev/null
@@ -0,0 +1,30 @@
+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/ssh/ssh_config
+etc/ssh/sshd_config
+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/oldcore/112/meta b/config/rootfiles/oldcore/112/meta
new file mode 100644 (file)
index 0000000..d547fa8
--- /dev/null
@@ -0,0 +1 @@
+DEPS=""
diff --git a/config/rootfiles/oldcore/113/exclude b/config/rootfiles/oldcore/113/exclude
new file mode 100644 (file)
index 0000000..d6fd053
--- /dev/null
@@ -0,0 +1,30 @@
+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/ssh/ssh_config
+etc/ssh/sshd_config
+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/oldcore/113/filelists/armv5tel/util-linux b/config/rootfiles/oldcore/113/filelists/armv5tel/util-linux
new file mode 120000 (symlink)
index 0000000..2596908
--- /dev/null
@@ -0,0 +1 @@
+../../../../common/armv5tel/util-linux
\ No newline at end of file
diff --git a/config/rootfiles/oldcore/113/filelists/files b/config/rootfiles/oldcore/113/filelists/files
new file mode 100644 (file)
index 0000000..ceed6de
--- /dev/null
@@ -0,0 +1,5 @@
+etc/system-release
+etc/issue
+etc/rc.d/init.d/ntp
+etc/rc.d/init.d/unbound
+var/ipfire/langs
diff --git a/config/rootfiles/oldcore/113/filelists/gnutls b/config/rootfiles/oldcore/113/filelists/gnutls
new file mode 120000 (symlink)
index 0000000..8dbe60b
--- /dev/null
@@ -0,0 +1 @@
+../../../common/gnutls
\ No newline at end of file
diff --git a/config/rootfiles/oldcore/113/filelists/grep b/config/rootfiles/oldcore/113/filelists/grep
new file mode 120000 (symlink)
index 0000000..ab5ef8b
--- /dev/null
@@ -0,0 +1 @@
+../../../common/grep
\ No newline at end of file
diff --git a/config/rootfiles/oldcore/113/filelists/i586/openssl-sse2 b/config/rootfiles/oldcore/113/filelists/i586/openssl-sse2
new file mode 120000 (symlink)
index 0000000..f424713
--- /dev/null
@@ -0,0 +1 @@
+../../../../common/i586/openssl-sse2
\ No newline at end of file
diff --git a/config/rootfiles/oldcore/113/filelists/i586/strongswan-padlock b/config/rootfiles/oldcore/113/filelists/i586/strongswan-padlock
new file mode 120000 (symlink)
index 0000000..2412824
--- /dev/null
@@ -0,0 +1 @@
+../../../../common/i586/strongswan-padlock
\ No newline at end of file
diff --git a/config/rootfiles/oldcore/113/filelists/i586/util-linux b/config/rootfiles/oldcore/113/filelists/i586/util-linux
new file mode 120000 (symlink)
index 0000000..c973106
--- /dev/null
@@ -0,0 +1 @@
+../../../../common/i586/util-linux
\ No newline at end of file
diff --git a/config/rootfiles/oldcore/113/filelists/libgcrypt b/config/rootfiles/oldcore/113/filelists/libgcrypt
new file mode 120000 (symlink)
index 0000000..2df12a2
--- /dev/null
@@ -0,0 +1 @@
+../../../common/libgcrypt
\ No newline at end of file
diff --git a/config/rootfiles/oldcore/113/filelists/logrotate b/config/rootfiles/oldcore/113/filelists/logrotate
new file mode 120000 (symlink)
index 0000000..bc192c0
--- /dev/null
@@ -0,0 +1 @@
+../../../common/logrotate
\ No newline at end of file
diff --git a/config/rootfiles/oldcore/113/filelists/mdadm b/config/rootfiles/oldcore/113/filelists/mdadm
new file mode 120000 (symlink)
index 0000000..465808b
--- /dev/null
@@ -0,0 +1 @@
+../../../common/mdadm
\ No newline at end of file
diff --git a/config/rootfiles/oldcore/113/filelists/openssl b/config/rootfiles/oldcore/113/filelists/openssl
new file mode 120000 (symlink)
index 0000000..e011a92
--- /dev/null
@@ -0,0 +1 @@
+../../../common/openssl
\ No newline at end of file
diff --git a/config/rootfiles/oldcore/113/filelists/openvpn b/config/rootfiles/oldcore/113/filelists/openvpn
new file mode 120000 (symlink)
index 0000000..493f3f7
--- /dev/null
@@ -0,0 +1 @@
+../../../common/openvpn
\ No newline at end of file
diff --git a/config/rootfiles/oldcore/113/filelists/pcre b/config/rootfiles/oldcore/113/filelists/pcre
new file mode 120000 (symlink)
index 0000000..b390d9a
--- /dev/null
@@ -0,0 +1 @@
+../../../common/pcre
\ No newline at end of file
diff --git a/config/rootfiles/oldcore/113/filelists/squid b/config/rootfiles/oldcore/113/filelists/squid
new file mode 120000 (symlink)
index 0000000..2dc8372
--- /dev/null
@@ -0,0 +1 @@
+../../../common/squid
\ No newline at end of file
diff --git a/config/rootfiles/oldcore/113/filelists/strongswan b/config/rootfiles/oldcore/113/filelists/strongswan
new file mode 120000 (symlink)
index 0000000..90c727e
--- /dev/null
@@ -0,0 +1 @@
+../../../common/strongswan
\ No newline at end of file
diff --git a/config/rootfiles/oldcore/113/filelists/unbound b/config/rootfiles/oldcore/113/filelists/unbound
new file mode 120000 (symlink)
index 0000000..66adf09
--- /dev/null
@@ -0,0 +1 @@
+../../../common/unbound
\ No newline at end of file
diff --git a/config/rootfiles/oldcore/113/filelists/x86_64/util-linux b/config/rootfiles/oldcore/113/filelists/x86_64/util-linux
new file mode 120000 (symlink)
index 0000000..7b5558d
--- /dev/null
@@ -0,0 +1 @@
+../../../../common/x86_64/util-linux
\ No newline at end of file
diff --git a/config/rootfiles/oldcore/113/meta b/config/rootfiles/oldcore/113/meta
new file mode 100644 (file)
index 0000000..d547fa8
--- /dev/null
@@ -0,0 +1 @@
+DEPS=""
diff --git a/config/rootfiles/oldcore/113/update.sh b/config/rootfiles/oldcore/113/update.sh
new file mode 100644 (file)
index 0000000..9d26462
--- /dev/null
@@ -0,0 +1,69 @@
+#!/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) 2017 IPFire-Team <info@ipfire.org>.                        #
+#                                                                          #
+############################################################################
+#
+. /opt/pakfire/lib/functions.sh
+/usr/local/bin/backupctrl exclude >/dev/null 2>&1
+
+core=113
+
+# 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
+/etc/init.d/squid stop
+/etc/init.d/unbound stop
+
+# Extract files
+extract_files
+
+# update linker config
+ldconfig
+
+# Remove baudrate from inittab
+sed -i -e "s| 115200[Nn]8||g" /etc/inittab
+
+# Update Language cache
+/usr/local/bin/update-lang-cache
+
+# Start services
+/etc/init.d/unbound start
+/etc/init.d/squid start
+
+# This update need 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/114/exclude b/config/rootfiles/oldcore/114/exclude
new file mode 100644 (file)
index 0000000..d6fd053
--- /dev/null
@@ -0,0 +1,30 @@
+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/ssh/ssh_config
+etc/ssh/sshd_config
+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/oldcore/114/filelists/apache2 b/config/rootfiles/oldcore/114/filelists/apache2
new file mode 120000 (symlink)
index 0000000..eef95ef
--- /dev/null
@@ -0,0 +1 @@
+../../../common/apache2
\ No newline at end of file
diff --git a/config/rootfiles/oldcore/114/filelists/apr b/config/rootfiles/oldcore/114/filelists/apr
new file mode 120000 (symlink)
index 0000000..87dd197
--- /dev/null
@@ -0,0 +1 @@
+../../../common/apr
\ No newline at end of file
diff --git a/config/rootfiles/oldcore/114/filelists/aprutil b/config/rootfiles/oldcore/114/filelists/aprutil
new file mode 120000 (symlink)
index 0000000..999f9f8
--- /dev/null
@@ -0,0 +1 @@
+../../../common/aprutil
\ No newline at end of file
diff --git a/config/rootfiles/oldcore/114/filelists/files b/config/rootfiles/oldcore/114/filelists/files
new file mode 100644 (file)
index 0000000..3d0cd04
--- /dev/null
@@ -0,0 +1,5 @@
+etc/system-release
+etc/issue
+etc/rc.d/init.d/unbound
+srv/web/ipfire/cgi-bin/extrahd.cgi
+var/ipfire/langs
diff --git a/config/rootfiles/oldcore/114/filelists/gnutls b/config/rootfiles/oldcore/114/filelists/gnutls
new file mode 120000 (symlink)
index 0000000..8dbe60b
--- /dev/null
@@ -0,0 +1 @@
+../../../common/gnutls
\ No newline at end of file
diff --git a/config/rootfiles/oldcore/114/filelists/hdparm b/config/rootfiles/oldcore/114/filelists/hdparm
new file mode 120000 (symlink)
index 0000000..b644751
--- /dev/null
@@ -0,0 +1 @@
+../../../common/hdparm
\ No newline at end of file
diff --git a/config/rootfiles/oldcore/114/filelists/i586/strongswan-padlock b/config/rootfiles/oldcore/114/filelists/i586/strongswan-padlock
new file mode 120000 (symlink)
index 0000000..2412824
--- /dev/null
@@ -0,0 +1 @@
+../../../../common/i586/strongswan-padlock
\ No newline at end of file
diff --git a/config/rootfiles/oldcore/114/filelists/php b/config/rootfiles/oldcore/114/filelists/php
new file mode 120000 (symlink)
index 0000000..1ae48d7
--- /dev/null
@@ -0,0 +1 @@
+../../../common/php
\ No newline at end of file
diff --git a/config/rootfiles/oldcore/114/filelists/squid b/config/rootfiles/oldcore/114/filelists/squid
new file mode 120000 (symlink)
index 0000000..2dc8372
--- /dev/null
@@ -0,0 +1 @@
+../../../common/squid
\ No newline at end of file
diff --git a/config/rootfiles/oldcore/114/filelists/strongswan b/config/rootfiles/oldcore/114/filelists/strongswan
new file mode 120000 (symlink)
index 0000000..90c727e
--- /dev/null
@@ -0,0 +1 @@
+../../../common/strongswan
\ No newline at end of file
diff --git a/config/rootfiles/oldcore/114/filelists/unbound b/config/rootfiles/oldcore/114/filelists/unbound
new file mode 120000 (symlink)
index 0000000..66adf09
--- /dev/null
@@ -0,0 +1 @@
+../../../common/unbound
\ No newline at end of file
diff --git a/config/rootfiles/oldcore/114/meta b/config/rootfiles/oldcore/114/meta
new file mode 100644 (file)
index 0000000..d547fa8
--- /dev/null
@@ -0,0 +1 @@
+DEPS=""
diff --git a/config/rootfiles/oldcore/114/update.sh b/config/rootfiles/oldcore/114/update.sh
new file mode 100644 (file)
index 0000000..ac59cc9
--- /dev/null
@@ -0,0 +1,108 @@
+#!/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) 2017 IPFire-Team <info@ipfire.org>.                        #
+#                                                                          #
+############################################################################
+#
+. /opt/pakfire/lib/functions.sh
+/usr/local/bin/backupctrl exclude >/dev/null 2>&1
+
+core=114
+
+# 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
+ipsec stop
+/etc/init.d/squid stop
+/etc/init.d/unbound stop
+/etc/init.d/apache stop
+
+# Remove old apache configuration files of add-ons
+# These will be reinstalled by the updated packages
+# as soon as the core update is finished.
+rm -f \
+       /etc/httpd/conf/vhosts.d/cacti.conf \
+       /etc/httpd/conf/vhosts.d/icinga.conf \
+       /etc/httpd/conf/vhosts.d/nagios.conf \
+       /etc/httpd/conf/vhosts.d/openmailadmin.conf \
+       /etc/httpd/conf/vhosts.d/owncloud.conf \
+       /etc/httpd/conf/vhosts.d/phpSANE.conf
+
+# Extract files
+extract_files
+
+# update linker config
+ldconfig
+
+# Remove some files
+rm -f /usr/sbin/htpasswd
+
+# Update Language cache
+/usr/local/bin/update-lang-cache
+
+# Start services
+/etc/init.d/unbound start
+/etc/init.d/apache start
+/etc/init.d/squid start
+
+if grep -q "ENABLED=on" /var/ipfire/vpn/settings; then
+       ipsec start
+fi
+
+#
+# After pakfire has ended run it again and update all addons
+# this is needed for apache update.
+#
+echo '#!/bin/bash'                                        >  /tmp/pak_update
+echo 'while [ "$(ps -A | grep " update.sh")" != "" ]; do' >> /tmp/pak_update
+echo '    sleep 1'                                        >> /tmp/pak_update
+echo 'done'                                               >> /tmp/pak_update
+echo 'while [ "$(ps -A | grep " pakfire")" != "" ]; do'   >> /tmp/pak_update
+echo '    sleep 1'                                        >> /tmp/pak_update
+echo 'done'                                               >> /tmp/pak_update
+echo '/opt/pakfire/pakfire update -y --force'             >> /tmp/pak_update
+echo '/opt/pakfire/pakfire upgrade -y'                    >> /tmp/pak_update
+echo '/opt/pakfire/pakfire upgrade -y'                    >> /tmp/pak_update
+echo '/opt/pakfire/pakfire upgrade -y'                    >> /tmp/pak_update
+echo 'touch /var/run/need_reboot ' >> /tmp/pak_update
+#
+killall -KILL pak_update
+chmod +x /tmp/pak_update
+/tmp/pak_update &
+
+# This update need 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/packages/iftop b/config/rootfiles/packages/iftop
new file mode 100644 (file)
index 0000000..aaa4d9d
--- /dev/null
@@ -0,0 +1,2 @@
+usr/sbin/iftop
+#usr/share/man/man8/iftop.8
index 0e9341d681ea165e6516f060a1b51b23f96545e4..809f957c77ad3bfc126b380bc70fcab06f5e0511 100644 (file)
@@ -38,6 +38,7 @@ usr/share/nano/makefile.nanorc
 usr/share/nano/man.nanorc
 usr/share/nano/mgp.nanorc
 usr/share/nano/mutt.nanorc
+usr/share/nano/nanohelp.nanorc
 usr/share/nano/nanorc.nanorc
 usr/share/nano/nftables.nanorc
 usr/share/nano/objc.nanorc
diff --git a/config/rootfiles/packages/wio b/config/rootfiles/packages/wio
new file mode 100644 (file)
index 0000000..f238662
--- /dev/null
@@ -0,0 +1,45 @@
+srv/web/ipfire/cgi-bin/wio.cgi
+srv/web/ipfire/cgi-bin/wiographs.cgi
+etc/fcron.minutely/wio
+var/ipfire/wio
+var/ipfire/wio/wio.conf
+var/ipfire/wio/wio.pl
+var/ipfire/wio/wiovpn.pl
+usr/lib/wio
+usr/lib/wio/wio-lib.pl
+usr/lib/wio/wio-graphs.pl
+usr/local/bin/wiohelper
+usr/local/bin/wioscan
+var/log/wio
+var/log/wio/wioips
+var/log/rrd/wio
+var/ipfire/addon-lang/wio.de.pl
+var/ipfire/addon-lang/wio.en.pl
+var/ipfire/menu.d/EX-wio.menu
+srv/web/ipfire/html/images/wio
+srv/web/ipfire/html/images/wio/add.png
+srv/web/ipfire/html/images/wio/back.png
+srv/web/ipfire/html/images/wio/blue.png
+srv/web/ipfire/html/images/wio/fqdn.png
+srv/web/ipfire/html/images/wio/graph.png
+srv/web/ipfire/html/images/wio/green.png
+srv/web/ipfire/html/images/wio/http.png
+srv/web/ipfire/html/images/wio/https.png
+srv/web/ipfire/html/images/wio/ip.png
+srv/web/ipfire/html/images/wio/mailgreenoff.png
+srv/web/ipfire/html/images/wio/mailgreenon.png
+srv/web/ipfire/html/images/wio/mailredoff.png
+srv/web/ipfire/html/images/wio/mailredon.png
+srv/web/ipfire/html/images/wio/no_graph.png
+srv/web/ipfire/html/images/wio/none.png
+srv/web/ipfire/html/images/wio/orange.png
+srv/web/ipfire/html/images/wio/ovpn.png
+srv/web/ipfire/html/images/wio/ovpnn2n.png
+srv/web/ipfire/html/images/wio/ovpnrw.png
+srv/web/ipfire/html/images/wio/red.png
+srv/web/ipfire/html/images/wio/refresh.png
+srv/web/ipfire/html/images/wio/vpnn2n.png
+srv/web/ipfire/html/images/wio/vpn.png
+srv/web/ipfire/html/images/wio/vpnrw.png
+srv/web/ipfire/html/images/wio/white.png
+var/ipfire/backup/addons/includes/wio
index 48941ded4097666f537dccd34e7563f9bfe7ed05..d76ce0ba0ee9e89284f3e2e33119e6251ff6f10c 100644 (file)
@@ -78,92 +78,12 @@ j/Br5BZw3X/zd325TvnswzMC1+ljLzHnQGGk
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number: 2 (0x2)
+        Serial Number: 11 (0xb)
         Signature Algorithm: sha256WithRSAEncryption
         Issuer: O=ICANN, OU=ICANN Certification Authority, CN=ICANN Root CA, C=US
         Validity
-            Not Before: Dec 23 04:45:04 2009 GMT
-            Not After : Dec 22 04:45:04 2014 GMT
-        Subject: O=ICANN, CN=ICANN DNSSEC CA/emailAddress=dnssec@icann.org
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-            RSA Public Key: (2048 bit)
-                Modulus (2048 bit):
-                    00:c0:bf:e2:b4:ee:12:46:36:3b:7c:d2:46:21:64:
-                    5a:93:e1:e3:02:10:25:bb:a5:30:70:19:89:98:7e:
-                    9e:db:8e:0f:ac:c8:48:66:0e:1a:f8:81:e5:2d:3c:
-                    7b:39:39:76:28:8f:ee:0a:a7:dd:64:e9:5f:87:25:
-                    b1:64:e5:59:03:fc:bc:29:3b:63:37:c8:d7:46:9a:
-                    b6:ce:87:55:cd:cf:e2:ab:e9:c7:8a:53:2e:25:87:
-                    b0:98:d6:20:a3:a8:ec:87:b0:39:a3:c4:c5:75:59:
-                    3c:fb:91:03:fa:ee:7f:e9:2b:b6:70:88:69:2c:e6:
-                    f1:4f:fc:d0:47:b4:e9:a0:2c:fa:0c:c3:84:eb:be:
-                    73:5a:bc:16:ed:d0:83:02:2d:eb:6a:21:02:51:70:
-                    29:1e:4f:c9:69:03:9f:91:32:5c:2c:1a:9f:5e:45:
-                    48:2a:50:ee:72:14:ec:17:29:fc:20:95:7d:22:6a:
-                    c6:6f:83:a2:58:8e:b1:64:c8:73:23:54:6c:69:1d:
-                    66:1f:df:f8:4f:24:a1:a8:ae:00:7f:e9:89:41:a6:
-                    e3:88:1d:3a:e1:b3:3a:ef:29:45:32:9b:94:2e:b7:
-                    6c:1e:fe:31:40:13:e1:bd:52:67:d0:d8:c3:3e:03:
-                    84:48:72:9d:bd:8a:48:a0:f2:72:35:b6:03:4b:c6:
-                    e9:05
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Basic Constraints: critical
-                CA:TRUE
-            X509v3 Key Usage: critical
-                Digital Signature, Non Repudiation, Key Encipherment, Data Encipherment, Key Agreement, Certificate Sign, CRL Sign
-            X509v3 Authority Key Identifier: 
-                keyid:BA:52:E9:49:83:24:86:52:2F:C7:99:CD:FC:8D:6B:69:08:4D:C0:50
-
-            X509v3 Subject Key Identifier: 
-                8F:B2:42:69:C3:9D:E4:3C:FA:13:B9:FF:F2:C0:A4:EF:D8:0F:E8:22
-    Signature Algorithm: sha256WithRSAEncryption
-        4a:78:a2:47:7e:3f:2e:4d:78:68:ab:06:5c:ff:da:01:04:45:
-        92:20:20:88:f3:dc:4e:70:01:9b:cb:f3:13:61:34:04:09:15:
-        d0:be:99:1c:be:fc:97:e9:2d:73:e1:b3:2b:a6:b9:3a:41:33:
-        f3:83:3d:64:1b:64:95:bf:ae:cd:20:df:18:e0:62:8d:fa:9c:
-        f7:d8:a9:3c:25:2b:8e:cf:10:e5:29:b9:af:1a:7f:62:64:75:
-        e7:c6:fd:9b:6d:71:c0:a9:b3:0f:9a:b7:7a:fe:53:04:18:cd:
-        04:06:d9:bf:01:0e:cc:04:84:84:51:a3:e9:06:2a:a3:25:73:
-        4e:8d:62:19:13:25:5b:de:0b:dc:d0:69:01:ca:41:0a:96:13:
-        cf:6a:11:fe:2b:9a:3f:fd:56:3d:73:3d:58:49:c2:71:83:20:
-        23:6d:46:99:6e:37:91:9f:76:2a:9c:b0:69:3f:64:9f:05:bb:
-        38:c8:1e:ca:d8:6c:fd:56:3e:a6:85:a2:53:80:c6:42:b6:79:
-        c6:43:0b:e0:6c:ea:9f:cf:b0:2a:2c:01:50:c3:d8:0f:a0:7e:
-        a1:73:a8:5c:84:27:5b:c9:4b:5a:13:e9:69:25:1c:59:11:d2:
-        01:dc:da:e7:c8:44:34:a2:e4:99:25:b4:c3:23:b5:f8:2d:48:
-        e5:8d:06:73
------BEGIN CERTIFICATE-----
-MIIDhjCCAm6gAwIBAgIBAjANBgkqhkiG9w0BAQsFADBdMQ4wDAYDVQQKEwVJQ0FO
-TjEmMCQGA1UECxMdSUNBTk4gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxFjAUBgNV
-BAMTDUlDQU5OIFJvb3QgQ0ExCzAJBgNVBAYTAlVTMB4XDTA5MTIyMzA0NDUwNFoX
-DTE0MTIyMjA0NDUwNFowSzEOMAwGA1UEChMFSUNBTk4xGDAWBgNVBAMTD0lDQU5O
-IEROU1NFQyBDQTEfMB0GCSqGSIb3DQEJARMQZG5zc2VjQGljYW5uLm9yZzCCASIw
-DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMC/4rTuEkY2O3zSRiFkWpPh4wIQ
-JbulMHAZiZh+ntuOD6zISGYOGviB5S08ezk5diiP7gqn3WTpX4clsWTlWQP8vCk7
-YzfI10aats6HVc3P4qvpx4pTLiWHsJjWIKOo7IewOaPExXVZPPuRA/ruf+krtnCI
-aSzm8U/80Ee06aAs+gzDhOu+c1q8Fu3QgwIt62ohAlFwKR5PyWkDn5EyXCwan15F
-SCpQ7nIU7Bcp/CCVfSJqxm+DoliOsWTIcyNUbGkdZh/f+E8koaiuAH/piUGm44gd
-OuGzOu8pRTKblC63bB7+MUAT4b1SZ9DYwz4DhEhynb2KSKDycjW2A0vG6QUCAwEA
-AaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAf4wHwYDVR0jBBgw
-FoAUulLpSYMkhlIvx5nN/I1raQhNwFAwHQYDVR0OBBYEFI+yQmnDneQ8+hO5//LA
-pO/YD+giMA0GCSqGSIb3DQEBCwUAA4IBAQBKeKJHfj8uTXhoqwZc/9oBBEWSICCI
-89xOcAGby/MTYTQECRXQvpkcvvyX6S1z4bMrprk6QTPzgz1kG2SVv67NIN8Y4GKN
-+pz32Kk8JSuOzxDlKbmvGn9iZHXnxv2bbXHAqbMPmrd6/lMEGM0EBtm/AQ7MBISE
-UaPpBiqjJXNOjWIZEyVb3gvc0GkBykEKlhPPahH+K5o//VY9cz1YScJxgyAjbUaZ
-bjeRn3YqnLBpP2SfBbs4yB7K2Gz9Vj6mhaJTgMZCtnnGQwvgbOqfz7AqLAFQw9gP
-oH6hc6hchCdbyUtaE+lpJRxZEdIB3NrnyEQ0ouSZJbTDI7X4LUjljQZz
------END CERTIFICATE-----
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number: 6 (0x6)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: O=ICANN, OU=ICANN Certification Authority, CN=ICANN Root CA, C=US
-        Validity
-            Not Before: Dec 23 05:21:16 2009 GMT
-            Not After : Dec 22 05:21:16 2014 GMT
+            Not Before: Nov  8 23:39:47 2016 GMT
+            Not After : Nov  6 23:39:47 2026 GMT
         Subject: O=ICANN, CN=ICANN EMAIL CA
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
@@ -192,33 +112,33 @@ Certificate:
             X509v3 Basic Constraints: critical
                 CA:TRUE
             X509v3 Key Usage: critical
-                Digital Signature, Non Repudiation, Key Encipherment, Data Encipherment, Key Agreement, Certificate Sign, CRL Sign
+                Certificate Sign, CRL Sign
             X509v3 Authority Key Identifier: 
                 keyid:BA:52:E9:49:83:24:86:52:2F:C7:99:CD:FC:8D:6B:69:08:4D:C0:50
 
             X509v3 Subject Key Identifier: 
                 7B:3F:BA:CE:A1:B3:A6:13:2E:5A:82:84:D4:D2:EA:A5:24:F1:CD:B4
     Signature Algorithm: sha256WithRSAEncryption
-        50:07:a5:61:39:e4:3b:e3:bc:1c:b4:a7:b2:ab:a1:fb:47:bf:
-        b4:1c:32:ac:3c:46:b0:02:26:2f:16:3e:89:70:e2:87:e9:76:
-        99:61:0b:91:c5:48:7a:e5:aa:24:0b:39:e0:4f:26:03:d4:5b:
-        01:8a:4d:b6:98:cc:16:fa:e2:12:4a:88:b9:53:bb:50:2d:c7:
-        37:b8:a3:82:2d:52:05:3e:46:a7:db:97:82:73:8d:7d:ed:dd:
-        9e:37:73:68:6b:90:cd:62:d8:77:ff:32:53:bb:d3:a1:b9:cb:
-        7d:32:29:70:fb:2e:90:4b:27:12:6d:99:a5:e6:d4:ef:13:32:
-        c1:2f:b5:ae:6e:11:0e:50:56:a4:56:5b:76:b0:c0:99:2e:5a:
-        94:17:ee:2b:c1:b6:9c:8b:68:ac:55:95:31:8c:66:2b:35:43:
-        a5:13:04:1b:50:44:1c:55:7f:4c:d0:1a:50:80:53:45:a8:e3:
-        d3:a8:74:ad:7d:6a:d6:e9:9a:d3:25:7d:83:e2:57:64:1a:94:
-        7e:bc:cb:ef:79:b5:54:6a:f1:b0:c3:81:26:90:e5:40:87:ed:
-        75:7d:83:63:5b:ab:45:c0:34:04:27:e8:d8:12:26:7c:5e:c0:
-        48:b6:33:7d:4b:db:23:8a:f7:13:24:bc:be:7b:74:cb:c4:ed:
-        ed:42:eb:2f
+        0e:8a:c9:ea:6f:9c:e9:23:b6:9c:a6:a4:c2:d1:b1:ee:25:18:
+        24:2b:79:d4:a8:f2:99:b9:5c:91:4d:e6:2b:32:2e:01:f5:87:
+        95:64:fc:6d:f1:87:fa:24:b4:43:4b:49:f3:84:54:44:eb:af:
+        41:ab:49:ab:c8:b7:32:6c:14:83:5b:d7:2c:41:f9:89:d5:c4:
+        2b:9a:55:c5:b6:ad:17:d5:4d:bc:41:58:56:72:0d:db:b7:7d:
+        57:c6:a2:9c:7e:6b:67:ae:26:f8:26:45:bb:c4:95:2e:ea:71:
+        e3:b4:7a:69:95:a4:8a:80:f8:59:dc:88:6e:e1:a7:fc:bb:8e:
+        b2:aa:a8:b6:1b:2f:2c:97:a5:12:d5:82:ae:a0:e8:a6:15:fd:
+        d1:e0:5d:e4:84:b1:76:db:0a:e2:ca:58:2e:d3:df:48:4e:46:
+        ac:c6:35:79:17:99:ce:e9:be:2c:e4:c2:50:ff:5b:96:15:cd:
+        64:ac:1b:db:fe:d2:ac:43:61:c8:5f:ee:24:b6:a4:3b:d2:ff:
+        0a:f4:0c:88:58:a1:9d:a4:c1:1f:6a:6c:67:90:98:e8:1f:5e:
+        2d:55:60:91:26:2a:b1:66:80:e4:e6:0e:05:2c:75:a9:ca:0b:
+        e4:a0:8f:e1:47:a8:8f:61:5d:7c:ce:09:60:88:48:c3:46:bf:
+        be:7e:36:be
 -----BEGIN CERTIFICATE-----
-MIIDZDCCAkygAwIBAgIBBjANBgkqhkiG9w0BAQsFADBdMQ4wDAYDVQQKEwVJQ0FO
+MIIDZDCCAkygAwIBAgIBCzANBgkqhkiG9w0BAQsFADBdMQ4wDAYDVQQKEwVJQ0FO
 TjEmMCQGA1UECxMdSUNBTk4gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxFjAUBgNV
-BAMTDUlDQU5OIFJvb3QgQ0ExCzAJBgNVBAYTAlVTMB4XDTA5MTIyMzA1MjExNloX
-DTE0MTIyMjA1MjExNlowKTEOMAwGA1UEChMFSUNBTk4xFzAVBgNVBAMTDklDQU5O
+BAMTDUlDQU5OIFJvb3QgQ0ExCzAJBgNVBAYTAlVTMB4XDTE2MTEwODIzMzk0N1oX
+DTI2MTEwNjIzMzk0N1owKTEOMAwGA1UEChMFSUNBTk4xFzAVBgNVBAMTDklDQU5O
 IEVNQUlMIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0hkeImkz
 9qTSdsWAEXWO0Ohvv4n4KmraioUoQLrFI19H7XLijtNcyIo6malXLAorIvNUe4v3
 jCGiUAFPi68033L8eDHQHeu8m+b6wYTQBQeKdFOlYJ7rdZ6oXTLIAjLkv8uXm3r6
@@ -226,24 +146,24 @@ LPZqHbhXreMDIpPQ9E+ouAHbgjOYtoftPWdAACcu1ZXSrTZGFMYXeWV/ZfOIgGV8
 ImcIIzzPpRA4cjCXkm8gSrokTErISqXcKkShKXi0n/6E/ydbOnLqMcGtBiLWRKBK
 VzKc8kZH0IluICMs6rCDfsHz6trd42NZlyH6GxE5J8+Ci1YV1DaSDKV+gOAYyVAI
 QgrflzycuApNsQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
-AwIB/jAfBgNVHSMEGDAWgBS6UulJgySGUi/Hmc38jWtpCE3AUDAdBgNVHQ4EFgQU
-ez+6zqGzphMuWoKE1NLqpSTxzbQwDQYJKoZIhvcNAQELBQADggEBAFAHpWE55Dvj
-vBy0p7KroftHv7QcMqw8RrACJi8WPolw4ofpdplhC5HFSHrlqiQLOeBPJgPUWwGK
-TbaYzBb64hJKiLlTu1Atxze4o4ItUgU+Rqfbl4JzjX3t3Z43c2hrkM1i2Hf/MlO7
-06G5y30yKXD7LpBLJxJtmaXm1O8TMsEvta5uEQ5QVqRWW3awwJkuWpQX7ivBtpyL
-aKxVlTGMZis1Q6UTBBtQRBxVf0zQGlCAU0Wo49OodK19atbpmtMlfYPiV2QalH68
-y+95tVRq8bDDgSaQ5UCH7XV9g2Nbq0XANAQn6NgSJnxewEi2M31L2yOK9xMkvL57
-dMvE7e1C6y8=
+AwIBBjAfBgNVHSMEGDAWgBS6UulJgySGUi/Hmc38jWtpCE3AUDAdBgNVHQ4EFgQU
+ez+6zqGzphMuWoKE1NLqpSTxzbQwDQYJKoZIhvcNAQELBQADggEBAA6KyepvnOkj
+tpympMLRse4lGCQredSo8pm5XJFN5isyLgH1h5Vk/G3xh/oktENLSfOEVETrr0Gr
+SavItzJsFINb1yxB+YnVxCuaVcW2rRfVTbxBWFZyDdu3fVfGopx+a2euJvgmRbvE
+lS7qceO0emmVpIqA+FnciG7hp/y7jrKqqLYbLyyXpRLVgq6g6KYV/dHgXeSEsXbb
+CuLKWC7T30hORqzGNXkXmc7pvizkwlD/W5YVzWSsG9v+0qxDYchf7iS2pDvS/wr0
+DIhYoZ2kwR9qbGeQmOgfXi1VYJEmKrFmgOTmDgUsdanKC+Sgj+FHqI9hXXzOCWCI
+SMNGv75+Nr4=
 -----END CERTIFICATE-----
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number: 3 (0x3)
+        Serial Number: 10 (0xa)
         Signature Algorithm: sha256WithRSAEncryption
         Issuer: O=ICANN, OU=ICANN Certification Authority, CN=ICANN Root CA, C=US
         Validity
-            Not Before: Dec 23 05:07:29 2009 GMT
-            Not After : Dec 22 05:07:29 2014 GMT
+            Not Before: Nov  8 23:38:16 2016 GMT
+            Not After : Nov  6 23:38:16 2026 GMT
         Subject: O=ICANN, CN=ICANN SSL CA
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
@@ -272,33 +192,33 @@ Certificate:
             X509v3 Basic Constraints: critical
                 CA:TRUE
             X509v3 Key Usage: critical
-                Digital Signature, Non Repudiation, Key Encipherment, Data Encipherment, Key Agreement, Certificate Sign, CRL Sign
+                Certificate Sign, CRL Sign
             X509v3 Authority Key Identifier: 
                 keyid:BA:52:E9:49:83:24:86:52:2F:C7:99:CD:FC:8D:6B:69:08:4D:C0:50
 
             X509v3 Subject Key Identifier: 
                 6E:77:A8:40:10:4A:D8:9C:0C:F2:B7:5A:3A:A5:2F:79:4A:61:14:D8
     Signature Algorithm: sha256WithRSAEncryption
-        18:42:62:df:aa:8e:44:e6:87:10:4d:d9:a6:b2:c3:97:37:43:
-        2e:ce:f3:e0:3c:c2:2f:e1:78:60:41:a9:2b:5d:f4:24:f5:f6:
-        57:a2:08:ec:9c:89:e5:54:50:a8:30:c6:20:e5:8a:c7:8b:bd:
-        fd:98:b6:0c:7d:1a:1f:01:a1:4a:4e:ec:0d:2a:aa:9f:fd:a9:
-        20:0d:b3:5c:0f:36:c0:2c:2b:c6:75:22:29:66:a3:34:bd:93:
-        3d:f6:28:da:90:d5:7e:91:df:d3:06:f6:69:8b:80:9b:a5:34:
-        af:6a:02:5b:e4:52:7d:56:4d:99:6e:fe:e9:d0:36:99:58:d9:
-        af:cd:79:9b:e5:d2:4c:35:90:d3:e0:68:b2:88:2b:18:39:2e:
-        bc:0b:d9:82:84:7f:24:12:92:d2:b9:13:4f:64:bc:46:e1:5c:
-        6a:ed:f7:b0:d4:66:27:25:21:86:b4:3a:5e:19:a3:c7:8b:4b:
-        93:b9:2e:37:e2:6d:8b:46:ee:68:39:21:75:e8:fe:2a:a7:85:
-        fd:68:26:96:bd:dd:f9:f1:fe:99:5f:b4:a4:97:1b:50:18:fa:
-        21:90:54:0c:8b:30:28:94:70:19:34:9e:5c:e1:e5:48:93:af:
-        aa:a3:b4:95:b2:f5:4c:97:50:44:58:97:e1:ff:e7:b2:10:dd:
-        2c:fe:c0:ed
+        47:46:4f:c7:5f:46:e3:d1:dc:fc:2b:f8:fc:65:ce:36:b1:f4:
+        5f:ee:14:75:a3:d9:5f:de:75:4b:fa:7b:88:9f:10:8c:2e:97:
+        cc:35:1b:ce:24:d3:36:60:95:d5:ae:11:b6:3f:8b:f4:12:69:
+        85:b5:3b:2a:b6:ab:7a:81:85:c2:55:57:ed:d0:b5:e7:4f:54:
+        37:51:24:c9:d5:07:3a:ef:b6:c5:1a:3e:14:29:a7:a6:f8:08:
+        2a:0b:26:79:f9:62:85:4a:e5:ea:90:ca:71:38:16:91:4e:7e:
+        fd:e3:b3:f3:55:8f:5a:d0:86:cf:33:94:88:f1:90:99:cb:81:
+        e2:81:92:68:2f:c3:61:d5:52:8d:e6:9a:5b:00:83:42:27:88:
+        f6:d9:fa:d1:bc:bb:b0:bc:b5:14:0b:4e:1a:54:ef:fa:d6:9d:
+        c4:0c:fc:ed:15:ab:21:4b:45:b5:d9:3b:ed:3c:d5:1e:2e:7a:
+        83:6f:24:45:d4:4c:b4:ef:60:43:18:d0:84:5d:16:7b:f5:50:
+        80:b1:a9:c2:8f:3b:c8:90:08:fd:aa:17:13:19:38:19:d1:8e:
+        85:7c:1e:57:16:8c:f9:8a:e8:29:25:38:cd:bb:55:8e:4a:6a:
+        6f:e5:7d:fc:d7:55:d6:ae:38:07:96:c1:97:ff:e5:2b:4f:99:
+        2d:70:f2:08
 -----BEGIN CERTIFICATE-----
-MIIDYjCCAkqgAwIBAgIBAzANBgkqhkiG9w0BAQsFADBdMQ4wDAYDVQQKEwVJQ0FO
+MIIDYjCCAkqgAwIBAgIBCjANBgkqhkiG9w0BAQsFADBdMQ4wDAYDVQQKEwVJQ0FO
 TjEmMCQGA1UECxMdSUNBTk4gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxFjAUBgNV
-BAMTDUlDQU5OIFJvb3QgQ0ExCzAJBgNVBAYTAlVTMB4XDTA5MTIyMzA1MDcyOVoX
-DTE0MTIyMjA1MDcyOVowJzEOMAwGA1UEChMFSUNBTk4xFTATBgNVBAMTDElDQU5O
+BAMTDUlDQU5OIFJvb3QgQ0ExCzAJBgNVBAYTAlVTMB4XDTE2MTEwODIzMzgxNloX
+DTI2MTEwNjIzMzgxNlowJzEOMAwGA1UEChMFSUNBTk4xFTATBgNVBAMTDElDQU5O
 IFNTTCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN3Gq798Zp2z
 K5YAFMdgeo1iWyZLMNezTIJpxk1Nc/PUkSFdqzXwyAQO9KM14uEYqZgSA1j4n+t3
 VFuJgSbJqsL0yQyCVypeBelhF8wZGHHrNYPBhp3s8WvK3aGWC5XU4Q+eJG/cPNAo
@@ -306,12 +226,12 @@ nvJTRyuhrTIDyD8NgIB98ALSblosRCGbCVAVP6E908nIJOfqTpIvlJAu3udo9saz
 kB+8yXuiZdcR6YvwOlq3FwffaeNuuVRqjjqqlH8sCqGturfZYGInp3FAO46whHu4
 yGfvZro9rMOF5Ya7p5z9tuHAEFM91H4bCeafIlynJwl+JxIz+t+bIC8U9xfA5B4H
 kR/5ms2o4sUCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
-Af4wHwYDVR0jBBgwFoAUulLpSYMkhlIvx5nN/I1raQhNwFAwHQYDVR0OBBYEFG53
-qEAQSticDPK3WjqlL3lKYRTYMA0GCSqGSIb3DQEBCwUAA4IBAQAYQmLfqo5E5ocQ
-TdmmssOXN0MuzvPgPMIv4XhgQakrXfQk9fZXogjsnInlVFCoMMYg5YrHi739mLYM
-fRofAaFKTuwNKqqf/akgDbNcDzbALCvGdSIpZqM0vZM99ijakNV+kd/TBvZpi4Cb
-pTSvagJb5FJ9Vk2Zbv7p0DaZWNmvzXmb5dJMNZDT4GiyiCsYOS68C9mChH8kEpLS
-uRNPZLxG4Vxq7few1GYnJSGGtDpeGaPHi0uTuS434m2LRu5oOSF16P4qp4X9aCaW
-vd358f6ZX7SklxtQGPohkFQMizAolHAZNJ5c4eVIk6+qo7SVsvVMl1BEWJfh/+ey
-EN0s/sDt
+AQYwHwYDVR0jBBgwFoAUulLpSYMkhlIvx5nN/I1raQhNwFAwHQYDVR0OBBYEFG53
+qEAQSticDPK3WjqlL3lKYRTYMA0GCSqGSIb3DQEBCwUAA4IBAQBHRk/HX0bj0dz8
+K/j8Zc42sfRf7hR1o9lf3nVL+nuInxCMLpfMNRvOJNM2YJXVrhG2P4v0EmmFtTsq
+tqt6gYXCVVft0LXnT1Q3USTJ1Qc677bFGj4UKaem+AgqCyZ5+WKFSuXqkMpxOBaR
+Tn7947PzVY9a0IbPM5SI8ZCZy4HigZJoL8Nh1VKN5ppbAINCJ4j22frRvLuwvLUU
+C04aVO/61p3EDPztFashS0W12TvtPNUeLnqDbyRF1Ey072BDGNCEXRZ79VCAsanC
+jzvIkAj9qhcTGTgZ0Y6FfB5XFoz5iugpJTjNu1WOSmpv5X3811XWrjgHlsGX/+Ur
+T5ktcPII
 -----END CERTIFICATE-----
index 3c8214621575155e06f9d5ed66697ea0bc29504f..877fc6981a9d4f36c2379e283fc8bcbe6947f5b5 100644 (file)
@@ -9,10 +9,10 @@
 ;           on server           FTP.INTERNIC.NET
 ;       -OR-                    RS.INTERNIC.NET
 ;
-;       last update:    March 23, 2016
-;       related version of root zone:   2016032301
+;       last update:     July 26, 2017
+;       related version of root zone:     2017072601
 ;
-; formerly NS.INTERNIC.NET
+; FORMERLY NS.INTERNIC.NET
 ;
 .                        3600000      NS    A.ROOT-SERVERS.NET.
 A.ROOT-SERVERS.NET.      3600000      A     198.41.0.4
@@ -22,7 +22,7 @@ A.ROOT-SERVERS.NET.      3600000      AAAA  2001:503:ba3e::2:30
 ;
 .                        3600000      NS    B.ROOT-SERVERS.NET.
 B.ROOT-SERVERS.NET.      3600000      A     192.228.79.201
-B.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:84::b
+B.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:200::b
 ;
 ; FORMERLY C.PSI.NET
 ;
@@ -40,6 +40,7 @@ D.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:2d::d
 ;
 .                        3600000      NS    E.ROOT-SERVERS.NET.
 E.ROOT-SERVERS.NET.      3600000      A     192.203.230.10
+E.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:a8::e
 ;
 ; FORMERLY NS.ISC.ORG
 ;
@@ -51,6 +52,7 @@ F.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:2f::f
 ;
 .                        3600000      NS    G.ROOT-SERVERS.NET.
 G.ROOT-SERVERS.NET.      3600000      A     192.112.36.4
+G.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:12::d0d
 ;
 ; FORMERLY AOS.ARL.ARMY.MIL
 ;
index 0c36abea2abeb98979c3af16d5d196e92792237b..3d1fb4b95a2f53ab438873db75aac33e16db5426 100644 (file)
@@ -1 +1,2 @@
+.      172800  IN      DNSKEY  257 3 8 AwEAAaz/tAm8yTn4Mfeh5eyI96WSVexTBAvkMgJzkKTOiW1vkIbzxeF3+/4RgWOq7HrxRixHlFlExOLAJr5emLvN7SWXgnLh4+B5xQlNVz8Og8kvArMtNROxVQuCaSnIDdD5LKyWbRd2n9WGe2R8PzgCmr3EgVLrjyBxWezF0jLHwVN8efS3rCj/EWgvIWgb9tarpVUDK/b58Da+sqqls3eNbuv7pr+eoZG+SrDK6nWeL3c6H5Apxz7LjVc1uTIdsIXxuOLYA4/ilBmSVIzuDWfdRUfhHdY6+cn8HFRm+2hM8AnXGXws9555KrUB5qihylGa8subX2Nn6UwNR1AkUTV74bU= ;{id = 20326 (ksk), size = 2048b}
 .      172800  IN      DNSKEY  257 3 8 AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjFFVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoXbfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaDX6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpzW5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relSQageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulqQxA+Uk1ihz0= ;{id = 19036 (ksk), size = 2048b}
index d10ea216ef65b951d444f7d2de7032e750b79663..7c70a6445e2daeb5054c2f8705871372a9cdb93f 100644 (file)
@@ -38,7 +38,7 @@ FSTYPE=ext3
 ##############################################################################
 
 SOURCEISO=$SNAME-$VERSION.i586-full-core$CORE.iso
-HTTPDIR=http://download.ipfire.org/releases/ipfire-2.x/$VERSION-core$CORE
+HTTPDIR=https://downloads.ipfire.org/releases/ipfire-2.x/$VERSION-core$CORE
 
 TMPDIR=./ipfire-tmp
 ISODIR=$TMPDIR/iso
@@ -54,7 +54,7 @@ KERNEL=linux-$KERN_TYPE-$KVER-$KERN_PACK.ipfire
 if [ "$XEN_IMG_TYPE" == "xva" ]; then
        # download xva.py if it not exist.
        if [ ! -e xva.py ]; then
-               wget http://source.ipfire.org/source-2.x/xva.py
+               wget https://source.ipfire.org/source-2.x/xva.py
        fi
        # XenCenter use other devicenames and
        # xvdd seems to be reserved (converter bug?).
index b9f7747581f0f00a7a9d15de50191349c9f70c91..0443130156dbbae4cc590b20c5bfb555d0f911c9 100644 (file)
@@ -1,4 +1,25 @@
 WARNING: translation string unused: Async logging enabled
+WARNING: translation string unused: Captive 1day
+WARNING: translation string unused: Captive 1month
+WARNING: translation string unused: Captive 1week
+WARNING: translation string unused: Captive activate
+WARNING: translation string unused: Captive auth_lic
+WARNING: translation string unused: Captive auth_vou
+WARNING: translation string unused: Captive err doublevoucher
+WARNING: translation string unused: Captive expire
+WARNING: translation string unused: Captive genvoucher
+WARNING: translation string unused: Captive invalid logosize
+WARNING: translation string unused: Captive invalid_voucher
+WARNING: translation string unused: Captive ip
+WARNING: translation string unused: Captive logo_set
+WARNING: translation string unused: Captive logo_upload
+WARNING: translation string unused: Captive logo_upload1
+WARNING: translation string unused: Captive noexpiretime
+WARNING: translation string unused: Captive nr
+WARNING: translation string unused: Captive time
+WARNING: translation string unused: Captive voactive
+WARNING: translation string unused: Captive voucher
+WARNING: translation string unused: Captive vout
 WARNING: translation string unused: ConnSched scheduler
 WARNING: translation string unused: ConnSched select profile
 WARNING: translation string unused: HDD temperature
@@ -665,9 +686,11 @@ WARNING: translation string unused: xtaccess all error
 WARNING: translation string unused: xtaccess bad transfert
 WARNING: translation string unused: year-graph
 WARNING: translation string unused: yearly firewallhits
+WARNING: untranslated string: 24 hours
 WARNING: untranslated string: Scan for Songs
 WARNING: untranslated string: addons
 WARNING: untranslated string: bytes
+WARNING: untranslated string: captive
 WARNING: untranslated string: community rules
 WARNING: untranslated string: dead peer detection
 WARNING: untranslated string: emerging rules
@@ -714,11 +737,15 @@ WARNING: untranslated string: ike lifetime should be between 1 and 8 hours
 WARNING: untranslated string: info messages
 WARNING: untranslated string: no data
 WARNING: untranslated string: none
+WARNING: untranslated string: one hour
+WARNING: untranslated string: one month
+WARNING: untranslated string: one week
 WARNING: untranslated string: qos add subclass
 WARNING: untranslated string: route config changed
 WARNING: untranslated string: routing config added
 WARNING: untranslated string: routing config changed
 WARNING: untranslated string: routing table
 WARNING: untranslated string: show tls-auth key
+WARNING: untranslated string: unlimited
 WARNING: untranslated string: vpn force mobike
 WARNING: untranslated string: vpn statistics n2n
index f2f6ab7d3d90154afd2e4e6fe56f02ed0b832eff..eebb5d6dc6ada90582ba548f0ac3301ea98ab9da 100644 (file)
@@ -1,4 +1,26 @@
 WARNING: translation string unused: Async logging enabled
+WARNING: translation string unused: Captive 1day
+WARNING: translation string unused: Captive 1month
+WARNING: translation string unused: Captive 1week
+WARNING: translation string unused: Captive activate
+WARNING: translation string unused: Captive auth_lic
+WARNING: translation string unused: Captive auth_vou
+WARNING: translation string unused: Captive err doublevoucher
+WARNING: translation string unused: Captive expire
+WARNING: translation string unused: Captive heading terms
+WARNING: translation string unused: Captive heading voucher
+WARNING: translation string unused: Captive invalid coupon
+WARNING: translation string unused: Captive invalid logosize
+WARNING: translation string unused: Captive invalid_voucher
+WARNING: translation string unused: Captive ip
+WARNING: translation string unused: Captive logo_set
+WARNING: translation string unused: Captive noexpiretime
+WARNING: translation string unused: Captive nr
+WARNING: translation string unused: Captive please enter a coupon code
+WARNING: translation string unused: Captive time
+WARNING: translation string unused: Captive voactive
+WARNING: translation string unused: Captive voucher
+WARNING: translation string unused: Captive vout
 WARNING: translation string unused: ConnSched scheduler
 WARNING: translation string unused: ConnSched select profile
 WARNING: translation string unused: HDD temperature
@@ -701,8 +723,10 @@ WARNING: translation string unused: xtaccess all error
 WARNING: translation string unused: xtaccess bad transfert
 WARNING: translation string unused: year-graph
 WARNING: translation string unused: yearly firewallhits
+WARNING: untranslated string: Captive clients
 WARNING: untranslated string: Scan for Songs
 WARNING: untranslated string: bytes
+WARNING: untranslated string: captive
 WARNING: untranslated string: fwhost cust geoipgrp
 WARNING: untranslated string: fwhost err hostip
 WARNING: untranslated string: guardian block a host
index d34d63f59a2d71925a31239a6f550a75a4153cb9..4ade5d5cd6da695a4479f5986912ffe70fae37e8 100644 (file)
@@ -613,11 +613,46 @@ WARNING: translation string unused: web proxy configuration
 WARNING: translation string unused: week-graph
 WARNING: translation string unused: weekly firewallhits
 WARNING: translation string unused: wildcards
+WARNING: translation string unused: wlanap access point
 WARNING: translation string unused: wlanap wlan services
 WARNING: translation string unused: xtaccess all error
 WARNING: translation string unused: xtaccess bad transfert
 WARNING: translation string unused: year-graph
 WARNING: translation string unused: yearly firewallhits
+WARNING: untranslated string: 24 hours
+WARNING: untranslated string: Captive ACTIVATE
+WARNING: untranslated string: Captive GAIN ACCESS
+WARNING: untranslated string: Captive WiFi coupon
+WARNING: untranslated string: Captive activated
+WARNING: untranslated string: Captive active on
+WARNING: untranslated string: Captive agree tac
+WARNING: untranslated string: Captive authentication
+WARNING: untranslated string: Captive brand color
+WARNING: untranslated string: Captive branding
+WARNING: untranslated string: Captive client session expiry time
+WARNING: untranslated string: Captive clients
+WARNING: untranslated string: Captive config
+WARNING: untranslated string: Captive coupon
+WARNING: untranslated string: Captive expiry time
+WARNING: untranslated string: Captive export coupons
+WARNING: untranslated string: Captive generate coupons
+WARNING: untranslated string: Captive generated coupon no
+WARNING: untranslated string: Captive issued coupons
+WARNING: untranslated string: Captive logo uploaded
+WARNING: untranslated string: Captive mac
+WARNING: untranslated string: Captive menu
+WARNING: untranslated string: Captive nolimit
+WARNING: untranslated string: Captive please accept the terms and conditions
+WARNING: untranslated string: Captive portal
+WARNING: untranslated string: Captive portal coupons
+WARNING: untranslated string: Captive terms
+WARNING: untranslated string: Captive terms short
+WARNING: untranslated string: Captive title
+WARNING: untranslated string: Captive upload logo
+WARNING: untranslated string: Captive upload logo recommendations
+WARNING: untranslated string: Captive valid for
+WARNING: untranslated string: Captive vouchervalid
+WARNING: untranslated string: Captive wrong ext
 WARNING: untranslated string: ConnSched dial
 WARNING: untranslated string: ConnSched hangup
 WARNING: untranslated string: ConnSched reboot
@@ -649,6 +684,7 @@ WARNING: untranslated string: bit
 WARNING: untranslated string: block
 WARNING: untranslated string: bytes
 WARNING: untranslated string: capabilities
+WARNING: untranslated string: captive
 WARNING: untranslated string: ccd add
 WARNING: untranslated string: ccd choose net
 WARNING: untranslated string: ccd client options
@@ -729,6 +765,7 @@ WARNING: untranslated string: drop action1
 WARNING: untranslated string: drop action2
 WARNING: untranslated string: drop forward
 WARNING: untranslated string: drop outgoing
+WARNING: untranslated string: eight hours
 WARNING: untranslated string: email config
 WARNING: untranslated string: email empty field
 WARNING: untranslated string: email invalid
@@ -776,6 +813,7 @@ WARNING: untranslated string: firewall logs country
 WARNING: untranslated string: firewall rules
 WARNING: untranslated string: first
 WARNING: untranslated string: flag
+WARNING: untranslated string: four hours
 WARNING: untranslated string: fw default drop
 WARNING: untranslated string: fw settings
 WARNING: untranslated string: fw settings color
@@ -1019,6 +1057,10 @@ WARNING: untranslated string: no hardware random number generator
 WARNING: untranslated string: none
 WARNING: untranslated string: not a valid dh key
 WARNING: untranslated string: notice
+WARNING: untranslated string: one hour
+WARNING: untranslated string: one month
+WARNING: untranslated string: one week
+WARNING: untranslated string: one year
 WARNING: untranslated string: openvpn default
 WARNING: untranslated string: openvpn destination port used
 WARNING: untranslated string: openvpn fragment allowed with udp
@@ -1140,9 +1182,12 @@ WARNING: untranslated string: tor traffic limit hard
 WARNING: untranslated string: tor traffic limit soft
 WARNING: untranslated string: tor traffic read written
 WARNING: untranslated string: tor use exit nodes
+WARNING: untranslated string: twelve hours
+WARNING: untranslated string: two weeks
 WARNING: untranslated string: unblock
 WARNING: untranslated string: unblock all
 WARNING: untranslated string: uncheck all
+WARNING: untranslated string: unlimited
 WARNING: untranslated string: uplink
 WARNING: untranslated string: uplink bit rate
 WARNING: untranslated string: upload dh key
@@ -1208,4 +1253,6 @@ WARNING: untranslated string: wlan client wpa mode ccmp ccmp
 WARNING: untranslated string: wlan client wpa mode ccmp tkip
 WARNING: untranslated string: wlan client wpa mode tkip tkip
 WARNING: untranslated string: wlan clients
+WARNING: untranslated string: wlanap
+WARNING: untranslated string: wlanap configuration
 WARNING: untranslated string: wlanap country
index 4a916761b510e809326b013923a3f4f57750683c..eae0337a673e9ede055e315af571a9231a6f6895 100644 (file)
@@ -628,6 +628,40 @@ WARNING: translation string unused: xtaccess all error
 WARNING: translation string unused: xtaccess bad transfert
 WARNING: translation string unused: year-graph
 WARNING: translation string unused: yearly firewallhits
+WARNING: untranslated string: 24 hours
+WARNING: untranslated string: Captive ACTIVATE
+WARNING: untranslated string: Captive GAIN ACCESS
+WARNING: untranslated string: Captive WiFi coupon
+WARNING: untranslated string: Captive activated
+WARNING: untranslated string: Captive active on
+WARNING: untranslated string: Captive agree tac
+WARNING: untranslated string: Captive authentication
+WARNING: untranslated string: Captive brand color
+WARNING: untranslated string: Captive branding
+WARNING: untranslated string: Captive client session expiry time
+WARNING: untranslated string: Captive clients
+WARNING: untranslated string: Captive config
+WARNING: untranslated string: Captive coupon
+WARNING: untranslated string: Captive expiry time
+WARNING: untranslated string: Captive export coupons
+WARNING: untranslated string: Captive generate coupons
+WARNING: untranslated string: Captive generated coupon no
+WARNING: untranslated string: Captive issued coupons
+WARNING: untranslated string: Captive logo uploaded
+WARNING: untranslated string: Captive mac
+WARNING: untranslated string: Captive menu
+WARNING: untranslated string: Captive nolimit
+WARNING: untranslated string: Captive please accept the terms and conditions
+WARNING: untranslated string: Captive portal
+WARNING: untranslated string: Captive portal coupons
+WARNING: untranslated string: Captive terms
+WARNING: untranslated string: Captive terms short
+WARNING: untranslated string: Captive title
+WARNING: untranslated string: Captive upload logo
+WARNING: untranslated string: Captive upload logo recommendations
+WARNING: untranslated string: Captive valid for
+WARNING: untranslated string: Captive vouchervalid
+WARNING: untranslated string: Captive wrong ext
 WARNING: untranslated string: ConnSched dial
 WARNING: untranslated string: ConnSched hangup
 WARNING: untranslated string: ConnSched reboot
@@ -658,6 +692,7 @@ WARNING: untranslated string: bit
 WARNING: untranslated string: block
 WARNING: untranslated string: bytes
 WARNING: untranslated string: capabilities
+WARNING: untranslated string: captive
 WARNING: untranslated string: ccd add
 WARNING: untranslated string: ccd choose net
 WARNING: untranslated string: ccd client options
@@ -739,6 +774,7 @@ WARNING: untranslated string: drop action1
 WARNING: untranslated string: drop action2
 WARNING: untranslated string: drop forward
 WARNING: untranslated string: drop outgoing
+WARNING: untranslated string: eight hours
 WARNING: untranslated string: email config
 WARNING: untranslated string: email empty field
 WARNING: untranslated string: email invalid
@@ -786,6 +822,7 @@ WARNING: untranslated string: firewall logs country
 WARNING: untranslated string: firewall rules
 WARNING: untranslated string: first
 WARNING: untranslated string: flag
+WARNING: untranslated string: four hours
 WARNING: untranslated string: fw default drop
 WARNING: untranslated string: fw settings
 WARNING: untranslated string: fw settings color
@@ -1038,6 +1075,10 @@ WARNING: untranslated string: not a valid dh key
 WARNING: untranslated string: notice
 WARNING: untranslated string: ntp common settings
 WARNING: untranslated string: ntp sync
+WARNING: untranslated string: one hour
+WARNING: untranslated string: one month
+WARNING: untranslated string: one week
+WARNING: untranslated string: one year
 WARNING: untranslated string: openvpn default
 WARNING: untranslated string: openvpn destination port used
 WARNING: untranslated string: openvpn fragment allowed with udp
@@ -1154,9 +1195,12 @@ WARNING: untranslated string: tor traffic limit hard
 WARNING: untranslated string: tor traffic limit soft
 WARNING: untranslated string: tor traffic read written
 WARNING: untranslated string: tor use exit nodes
+WARNING: untranslated string: twelve hours
+WARNING: untranslated string: two weeks
 WARNING: untranslated string: unblock
 WARNING: untranslated string: unblock all
 WARNING: untranslated string: uncheck all
+WARNING: untranslated string: unlimited
 WARNING: untranslated string: uplink
 WARNING: untranslated string: uplink bit rate
 WARNING: untranslated string: upload dh key
@@ -1225,8 +1269,9 @@ WARNING: untranslated string: wlan client wpa mode ccmp ccmp
 WARNING: untranslated string: wlan client wpa mode ccmp tkip
 WARNING: untranslated string: wlan client wpa mode tkip tkip
 WARNING: untranslated string: wlan clients
-WARNING: untranslated string: wlanap access point
+WARNING: untranslated string: wlanap
 WARNING: untranslated string: wlanap channel
+WARNING: untranslated string: wlanap configuration
 WARNING: untranslated string: wlanap country
 WARNING: untranslated string: wlanap debugging
 WARNING: untranslated string: wlanap del interface
index 0baf400861de33058849102cc8ab8172139ea360..13508b61e0803581b8c3f5bac30ec7fd52643b7b 100644 (file)
@@ -690,11 +690,46 @@ WARNING: translation string unused: web proxy configuration
 WARNING: translation string unused: week-graph
 WARNING: translation string unused: weekly firewallhits
 WARNING: translation string unused: wildcards
+WARNING: translation string unused: wlanap access point
 WARNING: translation string unused: wlanap wlan services
 WARNING: translation string unused: xtaccess all error
 WARNING: translation string unused: xtaccess bad transfert
 WARNING: translation string unused: year-graph
 WARNING: translation string unused: yearly firewallhits
+WARNING: untranslated string: 24 hours
+WARNING: untranslated string: Captive ACTIVATE
+WARNING: untranslated string: Captive GAIN ACCESS
+WARNING: untranslated string: Captive WiFi coupon
+WARNING: untranslated string: Captive activated
+WARNING: untranslated string: Captive active on
+WARNING: untranslated string: Captive agree tac
+WARNING: untranslated string: Captive authentication
+WARNING: untranslated string: Captive brand color
+WARNING: untranslated string: Captive branding
+WARNING: untranslated string: Captive client session expiry time
+WARNING: untranslated string: Captive clients
+WARNING: untranslated string: Captive config
+WARNING: untranslated string: Captive coupon
+WARNING: untranslated string: Captive expiry time
+WARNING: untranslated string: Captive export coupons
+WARNING: untranslated string: Captive generate coupons
+WARNING: untranslated string: Captive generated coupon no
+WARNING: untranslated string: Captive issued coupons
+WARNING: untranslated string: Captive logo uploaded
+WARNING: untranslated string: Captive mac
+WARNING: untranslated string: Captive menu
+WARNING: untranslated string: Captive nolimit
+WARNING: untranslated string: Captive please accept the terms and conditions
+WARNING: untranslated string: Captive portal
+WARNING: untranslated string: Captive portal coupons
+WARNING: untranslated string: Captive terms
+WARNING: untranslated string: Captive terms short
+WARNING: untranslated string: Captive title
+WARNING: untranslated string: Captive upload logo
+WARNING: untranslated string: Captive upload logo recommendations
+WARNING: untranslated string: Captive valid for
+WARNING: untranslated string: Captive vouchervalid
+WARNING: untranslated string: Captive wrong ext
 WARNING: untranslated string: MTU settings
 WARNING: untranslated string: Number of Countries for the pie chart
 WARNING: untranslated string: Scan for Songs
@@ -707,6 +742,7 @@ WARNING: untranslated string: advproxy group required
 WARNING: untranslated string: application layer gateways
 WARNING: untranslated string: block
 WARNING: untranslated string: bytes
+WARNING: untranslated string: captive
 WARNING: untranslated string: check all
 WARNING: untranslated string: dhcp dns enable update
 WARNING: untranslated string: dhcp dns key name
@@ -715,6 +751,7 @@ WARNING: untranslated string: dhcp dns update algo
 WARNING: untranslated string: dhcp dns update secret
 WARNING: untranslated string: dl client arch insecure
 WARNING: untranslated string: dnssec disabled warning
+WARNING: untranslated string: eight hours
 WARNING: untranslated string: email config
 WARNING: untranslated string: email empty field
 WARNING: untranslated string: email invalid
@@ -737,6 +774,7 @@ WARNING: untranslated string: firewall graph port
 WARNING: untranslated string: firewall log country
 WARNING: untranslated string: firewall log ip
 WARNING: untranslated string: firewall log port
+WARNING: untranslated string: four hours
 WARNING: untranslated string: fwdfw err concon
 WARNING: untranslated string: fwdfw err ratecon
 WARNING: untranslated string: fwdfw limitconcon
@@ -808,6 +846,10 @@ WARNING: untranslated string: masquerading enabled
 WARNING: untranslated string: messages
 WARNING: untranslated string: no data
 WARNING: untranslated string: none
+WARNING: untranslated string: one hour
+WARNING: untranslated string: one month
+WARNING: untranslated string: one week
+WARNING: untranslated string: one year
 WARNING: untranslated string: outgoing compression in bytes per second
 WARNING: untranslated string: outgoing overhead in bytes per second
 WARNING: untranslated string: ovpn add conf
@@ -822,9 +864,12 @@ WARNING: untranslated string: routing table
 WARNING: untranslated string: samba join a domain
 WARNING: untranslated string: samba join domain
 WARNING: untranslated string: search
+WARNING: untranslated string: twelve hours
+WARNING: untranslated string: two weeks
 WARNING: untranslated string: unblock
 WARNING: untranslated string: unblock all
 WARNING: untranslated string: uncheck all
+WARNING: untranslated string: unlimited
 WARNING: untranslated string: uplink bit rate
 WARNING: untranslated string: vpn broken
 WARNING: untranslated string: vpn connecting
@@ -852,3 +897,5 @@ WARNING: untranslated string: wlan client method
 WARNING: untranslated string: wlan client password
 WARNING: untranslated string: wlan client tls cipher
 WARNING: untranslated string: wlan client tls version
+WARNING: untranslated string: wlanap
+WARNING: untranslated string: wlanap configuration
index 4f64b5d68c9811e5dfc47142527932495b81e401..74590a27a7bed676589752b8107c05b463f0b451 100644 (file)
@@ -686,11 +686,46 @@ WARNING: translation string unused: web proxy configuration
 WARNING: translation string unused: week-graph
 WARNING: translation string unused: weekly firewallhits
 WARNING: translation string unused: wildcards
+WARNING: translation string unused: wlanap access point
 WARNING: translation string unused: wlanap wlan services
 WARNING: translation string unused: xtaccess all error
 WARNING: translation string unused: xtaccess bad transfert
 WARNING: translation string unused: year-graph
 WARNING: translation string unused: yearly firewallhits
+WARNING: untranslated string: 24 hours
+WARNING: untranslated string: Captive ACTIVATE
+WARNING: untranslated string: Captive GAIN ACCESS
+WARNING: untranslated string: Captive WiFi coupon
+WARNING: untranslated string: Captive activated
+WARNING: untranslated string: Captive active on
+WARNING: untranslated string: Captive agree tac
+WARNING: untranslated string: Captive authentication
+WARNING: untranslated string: Captive brand color
+WARNING: untranslated string: Captive branding
+WARNING: untranslated string: Captive client session expiry time
+WARNING: untranslated string: Captive clients
+WARNING: untranslated string: Captive config
+WARNING: untranslated string: Captive coupon
+WARNING: untranslated string: Captive expiry time
+WARNING: untranslated string: Captive export coupons
+WARNING: untranslated string: Captive generate coupons
+WARNING: untranslated string: Captive generated coupon no
+WARNING: untranslated string: Captive issued coupons
+WARNING: untranslated string: Captive logo uploaded
+WARNING: untranslated string: Captive mac
+WARNING: untranslated string: Captive menu
+WARNING: untranslated string: Captive nolimit
+WARNING: untranslated string: Captive please accept the terms and conditions
+WARNING: untranslated string: Captive portal
+WARNING: untranslated string: Captive portal coupons
+WARNING: untranslated string: Captive terms
+WARNING: untranslated string: Captive terms short
+WARNING: untranslated string: Captive title
+WARNING: untranslated string: Captive upload logo
+WARNING: untranslated string: Captive upload logo recommendations
+WARNING: untranslated string: Captive valid for
+WARNING: untranslated string: Captive vouchervalid
+WARNING: untranslated string: Captive wrong ext
 WARNING: untranslated string: MTU settings
 WARNING: untranslated string: Number of Countries for the pie chart
 WARNING: untranslated string: Scan for Songs
@@ -706,6 +741,7 @@ WARNING: untranslated string: atm device
 WARNING: untranslated string: block
 WARNING: untranslated string: bytes
 WARNING: untranslated string: capabilities
+WARNING: untranslated string: captive
 WARNING: untranslated string: check all
 WARNING: untranslated string: default
 WARNING: untranslated string: dh
@@ -727,6 +763,7 @@ WARNING: untranslated string: dnssec not supported
 WARNING: untranslated string: dnssec validating
 WARNING: untranslated string: download tls-auth key
 WARNING: untranslated string: drop outgoing
+WARNING: untranslated string: eight hours
 WARNING: untranslated string: email config
 WARNING: untranslated string: email empty field
 WARNING: untranslated string: email invalid
@@ -750,6 +787,7 @@ WARNING: untranslated string: firewall log country
 WARNING: untranslated string: firewall log ip
 WARNING: untranslated string: firewall log port
 WARNING: untranslated string: firewall logs country
+WARNING: untranslated string: four hours
 WARNING: untranslated string: fwdfw err concon
 WARNING: untranslated string: fwdfw err ratecon
 WARNING: untranslated string: fwdfw limitconcon
@@ -840,6 +878,10 @@ WARNING: untranslated string: nameserver
 WARNING: untranslated string: no data
 WARNING: untranslated string: none
 WARNING: untranslated string: not a valid dh key
+WARNING: untranslated string: one hour
+WARNING: untranslated string: one month
+WARNING: untranslated string: one week
+WARNING: untranslated string: one year
 WARNING: untranslated string: outgoing compression in bytes per second
 WARNING: untranslated string: outgoing overhead in bytes per second
 WARNING: untranslated string: ovpn add conf
@@ -868,9 +910,12 @@ WARNING: untranslated string: show tls-auth key
 WARNING: untranslated string: software version
 WARNING: untranslated string: source ip country
 WARNING: untranslated string: ta key
+WARNING: untranslated string: twelve hours
+WARNING: untranslated string: two weeks
 WARNING: untranslated string: unblock
 WARNING: untranslated string: unblock all
 WARNING: untranslated string: uncheck all
+WARNING: untranslated string: unlimited
 WARNING: untranslated string: uplink bit rate
 WARNING: untranslated string: upload dh key
 WARNING: untranslated string: vendor
@@ -900,3 +945,5 @@ WARNING: untranslated string: wlan client method
 WARNING: untranslated string: wlan client password
 WARNING: untranslated string: wlan client tls cipher
 WARNING: untranslated string: wlan client tls version
+WARNING: untranslated string: wlanap
+WARNING: untranslated string: wlanap configuration
index d34d63f59a2d71925a31239a6f550a75a4153cb9..4ade5d5cd6da695a4479f5986912ffe70fae37e8 100644 (file)
@@ -613,11 +613,46 @@ WARNING: translation string unused: web proxy configuration
 WARNING: translation string unused: week-graph
 WARNING: translation string unused: weekly firewallhits
 WARNING: translation string unused: wildcards
+WARNING: translation string unused: wlanap access point
 WARNING: translation string unused: wlanap wlan services
 WARNING: translation string unused: xtaccess all error
 WARNING: translation string unused: xtaccess bad transfert
 WARNING: translation string unused: year-graph
 WARNING: translation string unused: yearly firewallhits
+WARNING: untranslated string: 24 hours
+WARNING: untranslated string: Captive ACTIVATE
+WARNING: untranslated string: Captive GAIN ACCESS
+WARNING: untranslated string: Captive WiFi coupon
+WARNING: untranslated string: Captive activated
+WARNING: untranslated string: Captive active on
+WARNING: untranslated string: Captive agree tac
+WARNING: untranslated string: Captive authentication
+WARNING: untranslated string: Captive brand color
+WARNING: untranslated string: Captive branding
+WARNING: untranslated string: Captive client session expiry time
+WARNING: untranslated string: Captive clients
+WARNING: untranslated string: Captive config
+WARNING: untranslated string: Captive coupon
+WARNING: untranslated string: Captive expiry time
+WARNING: untranslated string: Captive export coupons
+WARNING: untranslated string: Captive generate coupons
+WARNING: untranslated string: Captive generated coupon no
+WARNING: untranslated string: Captive issued coupons
+WARNING: untranslated string: Captive logo uploaded
+WARNING: untranslated string: Captive mac
+WARNING: untranslated string: Captive menu
+WARNING: untranslated string: Captive nolimit
+WARNING: untranslated string: Captive please accept the terms and conditions
+WARNING: untranslated string: Captive portal
+WARNING: untranslated string: Captive portal coupons
+WARNING: untranslated string: Captive terms
+WARNING: untranslated string: Captive terms short
+WARNING: untranslated string: Captive title
+WARNING: untranslated string: Captive upload logo
+WARNING: untranslated string: Captive upload logo recommendations
+WARNING: untranslated string: Captive valid for
+WARNING: untranslated string: Captive vouchervalid
+WARNING: untranslated string: Captive wrong ext
 WARNING: untranslated string: ConnSched dial
 WARNING: untranslated string: ConnSched hangup
 WARNING: untranslated string: ConnSched reboot
@@ -649,6 +684,7 @@ WARNING: untranslated string: bit
 WARNING: untranslated string: block
 WARNING: untranslated string: bytes
 WARNING: untranslated string: capabilities
+WARNING: untranslated string: captive
 WARNING: untranslated string: ccd add
 WARNING: untranslated string: ccd choose net
 WARNING: untranslated string: ccd client options
@@ -729,6 +765,7 @@ WARNING: untranslated string: drop action1
 WARNING: untranslated string: drop action2
 WARNING: untranslated string: drop forward
 WARNING: untranslated string: drop outgoing
+WARNING: untranslated string: eight hours
 WARNING: untranslated string: email config
 WARNING: untranslated string: email empty field
 WARNING: untranslated string: email invalid
@@ -776,6 +813,7 @@ WARNING: untranslated string: firewall logs country
 WARNING: untranslated string: firewall rules
 WARNING: untranslated string: first
 WARNING: untranslated string: flag
+WARNING: untranslated string: four hours
 WARNING: untranslated string: fw default drop
 WARNING: untranslated string: fw settings
 WARNING: untranslated string: fw settings color
@@ -1019,6 +1057,10 @@ WARNING: untranslated string: no hardware random number generator
 WARNING: untranslated string: none
 WARNING: untranslated string: not a valid dh key
 WARNING: untranslated string: notice
+WARNING: untranslated string: one hour
+WARNING: untranslated string: one month
+WARNING: untranslated string: one week
+WARNING: untranslated string: one year
 WARNING: untranslated string: openvpn default
 WARNING: untranslated string: openvpn destination port used
 WARNING: untranslated string: openvpn fragment allowed with udp
@@ -1140,9 +1182,12 @@ WARNING: untranslated string: tor traffic limit hard
 WARNING: untranslated string: tor traffic limit soft
 WARNING: untranslated string: tor traffic read written
 WARNING: untranslated string: tor use exit nodes
+WARNING: untranslated string: twelve hours
+WARNING: untranslated string: two weeks
 WARNING: untranslated string: unblock
 WARNING: untranslated string: unblock all
 WARNING: untranslated string: uncheck all
+WARNING: untranslated string: unlimited
 WARNING: untranslated string: uplink
 WARNING: untranslated string: uplink bit rate
 WARNING: untranslated string: upload dh key
@@ -1208,4 +1253,6 @@ WARNING: untranslated string: wlan client wpa mode ccmp ccmp
 WARNING: untranslated string: wlan client wpa mode ccmp tkip
 WARNING: untranslated string: wlan client wpa mode tkip tkip
 WARNING: untranslated string: wlan clients
+WARNING: untranslated string: wlanap
+WARNING: untranslated string: wlanap configuration
 WARNING: untranslated string: wlanap country
index d07c421eb2547fdbb6315f98dfe5755f68722f40..6468d5fc0fcaa4127e332f9d50e6a449ee684ae7 100644 (file)
@@ -615,11 +615,46 @@ WARNING: translation string unused: warn when traffic reaches
 WARNING: translation string unused: web proxy configuration
 WARNING: translation string unused: weekly firewallhits
 WARNING: translation string unused: wildcards
+WARNING: translation string unused: wlanap access point
 WARNING: translation string unused: wlanap wlan services
 WARNING: translation string unused: xtaccess all error
 WARNING: translation string unused: xtaccess bad transfert
 WARNING: translation string unused: yearly firewallhits
+WARNING: untranslated string: 24 hours
 WARNING: untranslated string: Add a route
+WARNING: untranslated string: Captive ACTIVATE
+WARNING: untranslated string: Captive GAIN ACCESS
+WARNING: untranslated string: Captive WiFi coupon
+WARNING: untranslated string: Captive activated
+WARNING: untranslated string: Captive active on
+WARNING: untranslated string: Captive agree tac
+WARNING: untranslated string: Captive authentication
+WARNING: untranslated string: Captive brand color
+WARNING: untranslated string: Captive branding
+WARNING: untranslated string: Captive client session expiry time
+WARNING: untranslated string: Captive clients
+WARNING: untranslated string: Captive config
+WARNING: untranslated string: Captive coupon
+WARNING: untranslated string: Captive expiry time
+WARNING: untranslated string: Captive export coupons
+WARNING: untranslated string: Captive generate coupons
+WARNING: untranslated string: Captive generated coupon no
+WARNING: untranslated string: Captive issued coupons
+WARNING: untranslated string: Captive logo uploaded
+WARNING: untranslated string: Captive mac
+WARNING: untranslated string: Captive menu
+WARNING: untranslated string: Captive nolimit
+WARNING: untranslated string: Captive please accept the terms and conditions
+WARNING: untranslated string: Captive portal
+WARNING: untranslated string: Captive portal coupons
+WARNING: untranslated string: Captive terms
+WARNING: untranslated string: Captive terms short
+WARNING: untranslated string: Captive title
+WARNING: untranslated string: Captive upload logo
+WARNING: untranslated string: Captive upload logo recommendations
+WARNING: untranslated string: Captive valid for
+WARNING: untranslated string: Captive vouchervalid
+WARNING: untranslated string: Captive wrong ext
 WARNING: untranslated string: ConnSched dial
 WARNING: untranslated string: ConnSched hangup
 WARNING: untranslated string: ConnSched reboot
@@ -651,6 +686,7 @@ WARNING: untranslated string: bit
 WARNING: untranslated string: block
 WARNING: untranslated string: bytes
 WARNING: untranslated string: capabilities
+WARNING: untranslated string: captive
 WARNING: untranslated string: ccd add
 WARNING: untranslated string: ccd choose net
 WARNING: untranslated string: ccd client options
@@ -733,6 +769,7 @@ WARNING: untranslated string: drop action1
 WARNING: untranslated string: drop action2
 WARNING: untranslated string: drop forward
 WARNING: untranslated string: drop outgoing
+WARNING: untranslated string: eight hours
 WARNING: untranslated string: email config
 WARNING: untranslated string: email empty field
 WARNING: untranslated string: email invalid
@@ -770,6 +807,7 @@ WARNING: untranslated string: firewall logs country
 WARNING: untranslated string: firewall rules
 WARNING: untranslated string: first
 WARNING: untranslated string: flag
+WARNING: untranslated string: four hours
 WARNING: untranslated string: fw default drop
 WARNING: untranslated string: fw settings
 WARNING: untranslated string: fw settings color
@@ -1021,6 +1059,10 @@ WARNING: untranslated string: no hardware random number generator
 WARNING: untranslated string: none
 WARNING: untranslated string: not a valid dh key
 WARNING: untranslated string: notice
+WARNING: untranslated string: one hour
+WARNING: untranslated string: one month
+WARNING: untranslated string: one week
+WARNING: untranslated string: one year
 WARNING: untranslated string: openvpn default
 WARNING: untranslated string: openvpn destination port used
 WARNING: untranslated string: openvpn fragment allowed with udp
@@ -1135,9 +1177,12 @@ WARNING: untranslated string: tor traffic limit hard
 WARNING: untranslated string: tor traffic limit soft
 WARNING: untranslated string: tor traffic read written
 WARNING: untranslated string: tor use exit nodes
+WARNING: untranslated string: twelve hours
+WARNING: untranslated string: two weeks
 WARNING: untranslated string: unblock
 WARNING: untranslated string: unblock all
 WARNING: untranslated string: uncheck all
+WARNING: untranslated string: unlimited
 WARNING: untranslated string: uplink
 WARNING: untranslated string: uplink bit rate
 WARNING: untranslated string: upload dh key
@@ -1203,4 +1248,6 @@ WARNING: untranslated string: wlan client wpa mode ccmp ccmp
 WARNING: untranslated string: wlan client wpa mode ccmp tkip
 WARNING: untranslated string: wlan client wpa mode tkip tkip
 WARNING: untranslated string: wlan clients
+WARNING: untranslated string: wlanap
+WARNING: untranslated string: wlanap configuration
 WARNING: untranslated string: wlanap country
index 034dd2a7bd4e5096396467a5b5e8968be59a3745..ade6c89f8b8cbd9c6dfbfdd8415d2e56c4467d98 100644 (file)
@@ -698,21 +698,59 @@ WARNING: translation string unused: web proxy configuration
 WARNING: translation string unused: week-graph
 WARNING: translation string unused: weekly firewallhits
 WARNING: translation string unused: wildcards
+WARNING: translation string unused: wlanap access point
 WARNING: translation string unused: wlanap wlan services
 WARNING: translation string unused: xtaccess all error
 WARNING: translation string unused: xtaccess bad transfert
 WARNING: translation string unused: year-graph
 WARNING: translation string unused: yearly firewallhits
+WARNING: untranslated string: 24 hours
+WARNING: untranslated string: Captive ACTIVATE
+WARNING: untranslated string: Captive GAIN ACCESS
+WARNING: untranslated string: Captive WiFi coupon
+WARNING: untranslated string: Captive activated
+WARNING: untranslated string: Captive active on
+WARNING: untranslated string: Captive agree tac
+WARNING: untranslated string: Captive authentication
+WARNING: untranslated string: Captive brand color
+WARNING: untranslated string: Captive branding
+WARNING: untranslated string: Captive client session expiry time
+WARNING: untranslated string: Captive clients
+WARNING: untranslated string: Captive config
+WARNING: untranslated string: Captive coupon
+WARNING: untranslated string: Captive expiry time
+WARNING: untranslated string: Captive export coupons
+WARNING: untranslated string: Captive generate coupons
+WARNING: untranslated string: Captive generated coupon no
+WARNING: untranslated string: Captive issued coupons
+WARNING: untranslated string: Captive logo uploaded
+WARNING: untranslated string: Captive mac
+WARNING: untranslated string: Captive menu
+WARNING: untranslated string: Captive nolimit
+WARNING: untranslated string: Captive please accept the terms and conditions
+WARNING: untranslated string: Captive portal
+WARNING: untranslated string: Captive portal coupons
+WARNING: untranslated string: Captive terms
+WARNING: untranslated string: Captive terms short
+WARNING: untranslated string: Captive title
+WARNING: untranslated string: Captive upload logo
+WARNING: untranslated string: Captive upload logo recommendations
+WARNING: untranslated string: Captive valid for
+WARNING: untranslated string: Captive vouchervalid
+WARNING: untranslated string: Captive wrong ext
 WARNING: untranslated string: Scan for Songs
 WARNING: untranslated string: application layer gateways
 WARNING: untranslated string: bytes
+WARNING: untranslated string: captive
 WARNING: untranslated string: dnssec disabled warning
+WARNING: untranslated string: eight hours
 WARNING: untranslated string: firewall graph country
 WARNING: untranslated string: firewall graph ip
 WARNING: untranslated string: firewall graph port
 WARNING: untranslated string: firewall log country
 WARNING: untranslated string: firewall log ip
 WARNING: untranslated string: firewall log port
+WARNING: untranslated string: four hours
 WARNING: untranslated string: fwhost cust geoipgrp
 WARNING: untranslated string: fwhost err hostip
 WARNING: untranslated string: guardian
@@ -755,10 +793,17 @@ WARNING: untranslated string: guardian watch snort alertfile
 WARNING: untranslated string: ike lifetime should be between 1 and 8 hours
 WARNING: untranslated string: info messages
 WARNING: untranslated string: no data
+WARNING: untranslated string: one hour
+WARNING: untranslated string: one month
+WARNING: untranslated string: one week
+WARNING: untranslated string: one year
 WARNING: untranslated string: route config changed
 WARNING: untranslated string: routing config added
 WARNING: untranslated string: routing config changed
 WARNING: untranslated string: routing table
+WARNING: untranslated string: twelve hours
+WARNING: untranslated string: two weeks
+WARNING: untranslated string: unlimited
 WARNING: untranslated string: uplink bit rate
 WARNING: untranslated string: vpn broken
 WARNING: untranslated string: vpn connecting
@@ -783,3 +828,5 @@ WARNING: untranslated string: wlan client method
 WARNING: untranslated string: wlan client password
 WARNING: untranslated string: wlan client tls cipher
 WARNING: untranslated string: wlan client tls version
+WARNING: untranslated string: wlanap
+WARNING: untranslated string: wlanap configuration
index fd372c15fb957c8b42dbc0225667d1b7145a0935..2fc918cec3f7366bd426c4ac0d602b0d3fd33386 100644 (file)
@@ -2,6 +2,10 @@
 # Checking cgi-bin translations for language: en                           #
 ############################################################################
 < addon
+< Captive clients
+< Captive genvoucher
+< Captive logo_upload
+< Captive logo_upload1
 < ccd maxclients
 < ovpn_fragment
 ############################################################################
 < bit
 < block
 < capabilities
+< Captive 1day
+< Captive 1month
+< Captive 1week
+< Captive activate
+< Captive ACTIVATE
+< Captive activated
+< Captive active on
+< Captive agree tac
+< Captive authentication
+< Captive auth_lic
+< Captive auth_vou
+< Captive brand color
+< Captive branding
+< Captive clients
+< Captive client session expiry time
+< Captive config
+< Captive coupon
+< Captive err doublevoucher
+< Captive expire
+< Captive expiry time
+< Captive export coupons
+< Captive GAIN ACCESS
+< Captive generate coupons
+< Captive generated coupon no
+< Captive genvoucher
+< Captive invalid logosize
+< Captive invalid_voucher
+< Captive ip
+< Captive issued coupons
+< Captive logo_set
+< Captive logo_upload
+< Captive logo_upload1
+< Captive logo uploaded
+< Captive mac
+< Captive menu
+< Captive noexpiretime
+< Captive nolimit
+< Captive nr
+< Captive please accept the terms and conditions
+< Captive portal
+< Captive portal coupons
+< Captive terms
+< Captive terms short
+< Captive time
+< Captive title
+< Captive upload logo
+< Captive upload logo recommendations
+< Captive valid for
+< Captive voactive
+< Captive voucher
+< Captive vouchervalid
+< Captive vout
+< Captive WiFi coupon
+< Captive wrong ext
 < ccd add
 < ccd choose net
 < ccd clientip
 < drop action2
 < drop forward
 < drop outgoing
+< eight hours
 < email config
 < email empty field
 < email error
 < first
 < flag
 < forward firewall
+< four hours
 < fw default drop
 < fwdfw ACCEPT
 < fwdfw action
 < ntp common settings
 < ntp sync
 < Number of Countries for the pie chart
+< one year
 < openvpn default
 < openvpn destination port used
 < openvpn disabled
 < tor traffic limit soft
 < tor traffic read written
 < tor use exit nodes
+< twelve hours
+< two weeks
 < unblock
 < unblock all
 < uncheck all
 < vpn statistic rw
 < vpn weak
 < wireless network
-< wlanap access point
+< wlanap
 < wlanap channel
+< wlanap configuration
 < wlanap country
 < wlanap debugging
 < wlanap del interface
 < bit
 < block
 < capabilities
+< Captive 1day
+< Captive 1month
+< Captive 1week
+< Captive activate
+< Captive ACTIVATE
+< Captive activated
+< Captive active on
+< Captive agree tac
+< Captive authentication
+< Captive auth_lic
+< Captive auth_vou
+< Captive brand color
+< Captive branding
+< Captive clients
+< Captive client session expiry time
+< Captive config
+< Captive coupon
+< Captive err doublevoucher
+< Captive expire
+< Captive expiry time
+< Captive export coupons
+< Captive GAIN ACCESS
+< Captive generate coupons
+< Captive generated coupon no
+< Captive genvoucher
+< Captive invalid logosize
+< Captive invalid_voucher
+< Captive ip
+< Captive issued coupons
+< Captive logo_set
+< Captive logo_upload
+< Captive logo_upload1
+< Captive logo uploaded
+< Captive mac
+< Captive menu
+< Captive noexpiretime
+< Captive nolimit
+< Captive nr
+< Captive please accept the terms and conditions
+< Captive portal
+< Captive portal coupons
+< Captive terms
+< Captive terms short
+< Captive time
+< Captive title
+< Captive upload logo
+< Captive upload logo recommendations
+< Captive valid for
+< Captive voactive
+< Captive voucher
+< Captive vouchervalid
+< Captive vout
+< Captive WiFi coupon
+< Captive wrong ext
 < ccd add
 < ccd choose net
 < ccd clientip
 < drop action2
 < drop forward
 < drop outgoing
+< eight hours
 < email config
 < email empty field
 < email error
 < first
 < flag
 < forward firewall
+< four hours
 < fw default drop
 < fwdfw ACCEPT
 < fwdfw action
 < not a valid dh key
 < notice
 < Number of Countries for the pie chart
+< one year
 < openvpn default
 < openvpn destination port used
 < openvpn disabled
 < tor traffic limit soft
 < tor traffic read written
 < tor use exit nodes
+< twelve hours
+< two weeks
 < unblock
 < unblock all
 < uncheck all
 < vpn statistic rw
 < vpn weak
 < wireless network
+< wlanap
+< wlanap configuration
 < wlanap country
 < wlan client
 < wlan client advanced settings
 < bit
 < block
 < capabilities
+< Captive 1day
+< Captive 1month
+< Captive 1week
+< Captive activate
+< Captive ACTIVATE
+< Captive activated
+< Captive active on
+< Captive agree tac
+< Captive authentication
+< Captive auth_lic
+< Captive auth_vou
+< Captive brand color
+< Captive branding
+< Captive clients
+< Captive client session expiry time
+< Captive config
+< Captive coupon
+< Captive err doublevoucher
+< Captive expire
+< Captive expiry time
+< Captive export coupons
+< Captive GAIN ACCESS
+< Captive generate coupons
+< Captive generated coupon no
+< Captive genvoucher
+< Captive invalid logosize
+< Captive invalid_voucher
+< Captive ip
+< Captive issued coupons
+< Captive logo_set
+< Captive logo_upload
+< Captive logo_upload1
+< Captive logo uploaded
+< Captive mac
+< Captive menu
+< Captive noexpiretime
+< Captive nolimit
+< Captive nr
+< Captive please accept the terms and conditions
+< Captive portal
+< Captive portal coupons
+< Captive terms
+< Captive terms short
+< Captive time
+< Captive title
+< Captive upload logo
+< Captive upload logo recommendations
+< Captive valid for
+< Captive voactive
+< Captive voucher
+< Captive vouchervalid
+< Captive vout
+< Captive WiFi coupon
+< Captive wrong ext
 < ccd add
 < ccd choose net
 < ccd clientip
 < drop action2
 < drop forward
 < drop outgoing
+< eight hours
 < email config
 < email empty field
 < email error
 < first
 < flag
 < forward firewall
+< four hours
 < fw default drop
 < fwdfw ACCEPT
 < fwdfw action
 < not a valid dh key
 < notice
 < Number of Countries for the pie chart
+< one year
 < openvpn default
 < openvpn destination port used
 < openvpn disabled
 < tor traffic limit soft
 < tor traffic read written
 < tor use exit nodes
+< twelve hours
+< two weeks
 < unblock
 < unblock all
 < uncheck all
 < vpn statistic rw
 < vpn weak
 < wireless network
+< wlanap
+< wlanap configuration
 < wlanap country
 < wlan client
 < wlan client advanced settings
 < bit
 < block
 < capabilities
+< Captive 1day
+< Captive 1month
+< Captive 1week
+< Captive activate
+< Captive ACTIVATE
+< Captive activated
+< Captive active on
+< Captive agree tac
+< Captive authentication
+< Captive auth_lic
+< Captive auth_vou
+< Captive brand color
+< Captive branding
+< Captive clients
+< Captive client session expiry time
+< Captive config
+< Captive coupon
+< Captive err doublevoucher
+< Captive expire
+< Captive expiry time
+< Captive export coupons
+< Captive GAIN ACCESS
+< Captive generate coupons
+< Captive generated coupon no
+< Captive genvoucher
+< Captive invalid logosize
+< Captive invalid_voucher
+< Captive ip
+< Captive issued coupons
+< Captive logo_set
+< Captive logo_upload
+< Captive logo_upload1
+< Captive logo uploaded
+< Captive mac
+< Captive menu
+< Captive noexpiretime
+< Captive nolimit
+< Captive nr
+< Captive please accept the terms and conditions
+< Captive portal
+< Captive portal coupons
+< Captive terms
+< Captive terms short
+< Captive time
+< Captive title
+< Captive upload logo
+< Captive upload logo recommendations
+< Captive valid for
+< Captive voactive
+< Captive voucher
+< Captive vouchervalid
+< Captive vout
+< Captive WiFi coupon
+< Captive wrong ext
 < ccd add
 < ccd choose net
 < ccd clientip
 < drop forward
 < drop outgoing
 < Edit an existing route
+< eight hours
 < email config
 < email empty field
 < email error
 < first
 < flag
 < forward firewall
+< four hours
 < frequency
 < fw default drop
 < fwdfw ACCEPT
 < not a valid dh key
 < notice
 < Number of Countries for the pie chart
+< one year
 < openvpn default
 < openvpn destination port used
 < openvpn disabled
 < tor traffic limit soft
 < tor traffic read written
 < tor use exit nodes
+< twelve hours
+< two weeks
 < unblock
 < unblock all
 < uncheck all
 < vpn weak
 < week-graph
 < wireless network
+< wlanap
+< wlanap configuration
 < wlanap country
 < wlan client
 < wlan client advanced settings
diff --git a/html/cgi-bin/captive.cgi b/html/cgi-bin/captive.cgi
new file mode 100755 (executable)
index 0000000..242549d
--- /dev/null
@@ -0,0 +1,794 @@
+#!/usr/bin/perl
+###############################################################################
+#                                                                             #
+# IPFire.org - A linux based firewall                                         #
+# Copyright (C) 2016  IPFire Team  <alexander.marx@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/>.       #
+#                                                                             #
+###############################################################################
+
+#use strict;
+use Encode;
+use HTML::Entities();
+use File::Basename;
+use PDF::API2;
+use constant mm => 25.4 / 72;
+
+# enable only the following on debugging purpose
+#use warnings;
+#use CGI::Carp 'fatalsToBrowser';
+
+require '/var/ipfire/general-functions.pl';
+require "${General::swroot}/lang.pl";
+require "${General::swroot}/header.pl";
+
+my %session_times = (
+       3600            => $Lang::tr{'one hour'},
+       14400           => $Lang::tr{'four hours'},
+       28800           => $Lang::tr{'eight hours'},
+       43200           => $Lang::tr{'twelve hours'},
+       86400           => $Lang::tr{'24 hours'},
+       604800          => $Lang::tr{'one week'},
+       1209600         => $Lang::tr{'two weeks'},
+       18144000        => $Lang::tr{'one month'},
+       31536000        => $Lang::tr{'one year'},
+       0               => "- $Lang::tr{'unlimited'} -",
+);
+
+my %selected = ();
+
+my $coupons = "${General::swroot}/captive/coupons";
+my %couponhash = ();
+
+my $logo = "${General::swroot}/captive/logo.dat";
+
+my %settings=();
+my %mainsettings;
+my %color;
+my %cgiparams=();
+my %netsettings=();
+my %checked=();
+my $errormessage='';
+my $clients="${General::swroot}/captive/clients";
+my %clientshash=();
+my $settingsfile="${General::swroot}/captive/settings";
+unless (-e $settingsfile)      { system("touch $settingsfile"); }
+
+&Header::getcgihash(\%cgiparams);
+
+&General::readhash("${General::swroot}/main/settings", \%mainsettings);
+&General::readhash("/srv/web/ipfire/html/themes/".$mainsettings{'THEME'}."/include/colors.txt", \%color);
+&General::readhash("$settingsfile", \%settings) if(-f $settingsfile);
+&General::readhash("${General::swroot}/ethernet/settings", \%netsettings);
+
+if ($cgiparams{'ACTION'} eq "export-coupons") {
+       my $pdf = &generate_pdf();
+
+       print "Content-Type: application/pdf\n";
+       print "Content-Disposition: attachment; filename=captive-portal-coupons.pdf\n";
+       print "\n"; # end headers
+
+       # Send PDF
+       print $pdf;
+
+       exit(0);
+}
+
+
+&Header::showhttpheaders();
+
+if ($cgiparams{'ACTION'} eq $Lang::tr{'save'}) {
+       my $file = $cgiparams{'logo'};
+       if ($file) {
+               # Check if the file extension is PNG/JPEG
+               chomp $file;
+
+               my ($name, $path, $ext) = fileparse($file, qr/\.[^.]*$/);
+               if ($ext ne ".png" && $ext ne ".jpg" && $ext ne ".jpeg") {
+                       $errormessage = $Lang::tr{'Captive wrong ext'};
+               }
+       }
+
+       $settings{'ENABLE_GREEN'}               = $cgiparams{'ENABLE_GREEN'};
+       $settings{'ENABLE_BLUE'}                = $cgiparams{'ENABLE_BLUE'};
+       $settings{'AUTH'}                               = $cgiparams{'AUTH'};
+       $settings{'TITLE'}                              = $cgiparams{'TITLE'};
+       $settings{'COLOR'}                      = $cgiparams{'COLOR'};
+       $settings{'SESSION_TIME'}               = $cgiparams{'SESSION_TIME'};
+
+       if (!$errormessage){
+               #Check if we need to upload a new logo
+               if ($file) {
+                       # Save logo
+                       my ($filehandle) = CGI::upload("logo");
+
+                       # XXX check filesize
+
+                       open(FILE, ">$logo");
+                       binmode $filehandle;
+                       while (<$filehandle>) {
+                               print FILE;
+                       }
+                       close(FILE);
+               }
+
+               &General::writehash("$settingsfile", \%settings);
+
+               # Save terms
+               $cgiparams{'TERMS'} = &Header::escape($cgiparams{'TERMS'});
+               open(FH, ">:utf8", "/var/ipfire/captive/terms.txt") or die("$!");
+               print FH $cgiparams{'TERMS'};
+               close(FH);
+               $cgiparams{'TERMS'} = "";
+
+               #execute binary to reload firewall rules
+               system("/usr/local/bin/captivectrl");
+
+               if ($cgiparams{'ENABLE_BLUE'} eq 'on'){
+                               system("/usr/local/bin/wirelessctrl");
+               }
+       }
+}
+
+if ($cgiparams{'ACTION'} eq "$Lang::tr{'Captive generate coupons'}") {
+       #check valid remark
+       if ($cgiparams{'REMARK'} ne '' && !&validremark($cgiparams{'REMARK'})){
+               $errormessage=$Lang::tr{'fwhost err remark'};
+       }
+
+       if (!$errormessage) {
+               # Remember selected values
+               foreach my $val (("SESSION_TIME", "COUNT", "REMARK")) {
+                       $settings{$val} = $cgiparams{$val};
+               }
+               &General::writehash($settingsfile, \%settings);
+
+               &General::readhasharray($coupons, \%couponhash) if (-e $coupons);
+               my $now = time();
+
+               # Expiry time in seconds
+               my $expires = $settings{'SESSION_TIME'};
+
+               my $count = $settings{'COUNT'} || 1;
+               while($count-- > 0) {
+                       # Generate a new code
+                       my $code = &gencode();
+
+                       # Check if the coupon code already exists
+                       foreach my $key (keys %couponhash) {
+                               if($couponhash{$key}[1] eq $code) {
+                                       # Code already exists, so try again
+                                       $code = "";
+                                       $count++;
+                                       last;
+                               }
+                       }
+
+                       next if ($code eq "");
+
+                       # Get a new key from hash
+                       my $key = &General::findhasharraykey(\%couponhash);
+
+                       # Initialize all fields
+                       foreach my $i (0 .. 3) { $couponhash{$key}[$i] = ""; }
+
+                       $couponhash{$key}[0] = $now;
+                       $couponhash{$key}[1] = $code;
+                       $couponhash{$key}[2] = $expires;
+                       $couponhash{$key}[3] = $settings{'REMARK'};
+               }
+
+               # Save everything to disk
+               &General::writehasharray($coupons, \%couponhash);
+       }
+}
+
+if ($cgiparams{'ACTION'} eq 'delete-coupon') {
+       #deletes an already generated but unused voucher
+
+       #read all generated vouchers
+       &General::readhasharray($coupons, \%couponhash) if (-e $coupons);
+       foreach my $key (keys %couponhash) {
+               if($cgiparams{'key'} eq $couponhash{$key}[0]){
+                       #write logenty with decoded remark
+                       my $rem=HTML::Entities::decode_entities($couponhash{$key}[4]);
+                       &General::log("Captive", "Delete unused coupon $couponhash{$key}[1] $couponhash{$key}[2] hours valid expires on $couponhash{$key}[3] remark $rem");
+                       #delete line from hash
+                       delete $couponhash{$key};
+                       last;
+               }
+       }
+       #write back hash
+       &General::writehasharray($coupons, \%couponhash);
+}
+
+if ($cgiparams{'ACTION'} eq 'delete-client') {
+       #delete voucher and connection in use
+
+       #read all active clients
+       &General::readhasharray($clients, \%clientshash) if (-e $clients);
+       foreach my $key (keys %clientshash) {
+               if($cgiparams{'key'} eq $clientshash{$key}[0]){
+                       #prepare log entry with decoded remark
+                       my $rem=HTML::Entities::decode_entities($clientshash{$key}[7]);
+                       #write logentry
+                       &General::log("Captive", "Deleted client in use $clientshash{$key}[1] $clientshash{$key}[2] hours valid expires on $clientshash{$key}[3] remark $rem - Connection will be terminated");
+                       #delete line from hash
+                       delete $clientshash{$key};
+                       last;
+               }
+       }
+       #write back hash
+       &General::writehasharray("$clients", \%clientshash);
+       #reload firewallrules to kill connection of client
+       system("/usr/local/bin/captivectrl");
+}
+
+#open webpage, print header and open box
+&Header::openpage($Lang::tr{'Captive menu'}, 1, '');
+&Header::openbigbox();
+
+# If an error message exists, show a box with the error message
+if ($errormessage) {
+       &Header::openbox('100%', 'left', $Lang::tr{'error messages'});
+       print $errormessage;
+       &Header::closebox();
+}
+
+# Prints the config box on the website
+&Header::openbox('100%', 'left', $Lang::tr{'Captive config'});
+print <<END
+       <form method='post' action='$ENV{'SCRIPT_NAME'}' enctype="multipart/form-data">\n
+               <table width='100%' border="0">
+END
+;
+
+#check which parameters have to be enabled (from settings file)
+$checked{'ENABLE_GREEN'}{'off'} = '';
+$checked{'ENABLE_GREEN'}{'on'} = '';
+$checked{'ENABLE_GREEN'}{$settings{'ENABLE_GREEN'}} = "checked='checked'";
+
+$checked{'ENABLE_BLUE'}{'off'} = '';
+$checked{'ENABLE_BLUE'}{'on'} = '';
+$checked{'ENABLE_BLUE'}{$settings{'ENABLE_BLUE'}} = "checked='checked'";
+
+$checked{'UNLIMITED'}{'off'} = '';
+$checked{'UNLIMITED'}{'on'} = '';
+$checked{'UNLIMITED'}{$settings{'UNLIMITED'}} = "checked='checked'";
+
+$selected{'AUTH'} = ();
+$selected{'AUTH'}{'COUPON'} = "";
+$selected{'AUTH'}{'TERMS'} = "";
+$selected{'AUTH'}{$settings{'AUTH'}} = "selected";
+
+if ($netsettings{'GREEN_DEV'}){
+       print <<END;
+               <tr>
+                       <td width='30%'>
+                               $Lang::tr{'Captive active on'}
+                               <font color='$Header::colourgreen'>$Lang::tr{'green'}</font>
+                       </td>
+                       <td>
+                               <input type='checkbox' name='ENABLE_GREEN' $checked{'ENABLE_GREEN'}{'on'} />
+                       </td>
+               </tr>
+END
+}
+
+if ($netsettings{'BLUE_DEV'}){
+       print <<END;
+               <tr>
+                       <td width='30%'>
+                               $Lang::tr{'Captive active on'}
+                               <font color='$Header::colourblue'>$Lang::tr{'blue'}</font>
+                       </td>
+                       <td>
+                               <input type='checkbox' name='ENABLE_BLUE' $checked{'ENABLE_BLUE'}{'on'} />
+                       </td>
+               </tr>
+END
+}
+
+print<<END
+       <tr>
+               <td>
+                       $Lang::tr{'Captive authentication'}
+               </td>
+               <td>
+                       <select name='AUTH'>
+                               <option value="TERMS"  $selected{'AUTH'}{'TERMS'} >$Lang::tr{'Captive terms'}</option>
+                               <option value="COUPON" $selected{'AUTH'}{'COUPON'}>$Lang::tr{'Captive coupon'}</option>
+                       </select>
+               </td>
+       </tr>
+END
+;
+
+if ($settings{'AUTH'} eq 'TERMS') {
+       $selected{'SESSION_TIME'} = ();
+       foreach my $session_time (keys %session_times) {
+               $selected{'SESSION_TIME'}{$session_time} = "";
+       }
+       $selected{'SESSION_TIME'}{$settings{'SESSION_TIME'}} = "selected";
+
+       print <<END;
+               <tr>
+                       <td>$Lang::tr{'Captive client session expiry time'}</td>
+                       <td>
+                               <select name="SESSION_TIME">
+END
+
+       foreach my $session_time (sort { $a <=> $b } keys %session_times) {
+               print <<END;
+                                       <option value="$session_time" $selected{'SESSION_TIME'}{$session_time}>
+                                               $session_times{$session_time}
+                                       </option>
+END
+       }
+
+       print <<END;
+                               </select>
+                       </td>
+               </tr>
+END
+}
+
+print<<END;
+       <tr>
+               <td colspan="2">
+                       <br>
+                       <strong>$Lang::tr{'Captive branding'}</strong>
+               </td>
+       </tr>
+       <tr>
+               <td>
+                       $Lang::tr{'Captive title'}
+               </td>
+               <td>
+                       <input type='text' name='TITLE' value="$settings{'TITLE'}" size='40'>
+               </td>
+       </tr>
+       <tr>
+               <td>$Lang::tr{'Captive brand color'}</td>
+               <td>
+                       <input type="color" name="COLOR" value="$settings{'COLOR'}">
+               </td>
+       </tr>
+       <tr>
+               <td>
+                       $Lang::tr{'Captive upload logo'}
+               </td>
+               <td>
+                       <input type="file" name="logo">
+                       <br>$Lang::tr{'Captive upload logo recommendations'}
+               </td>
+       </tr>
+END
+
+if (-e $logo) {
+       print <<END;
+               <tr>
+                       <td>$Lang::tr{'Captive logo uploaded'}</td>
+                       <td>$Lang::tr{'yes'}</td>
+               </tr>
+END
+}
+
+my $terms = &getterms();
+print <<END;
+       <tr>
+               <td>$Lang::tr{'Captive terms'}</td>
+               <td>
+                       <textarea cols="50" rows="10" name="TERMS">$terms</textarea>
+               </td>
+       </tr>
+       <tr>
+               <td></td>
+               <td align='right'>
+                       <input type='submit' name='ACTION' value="$Lang::tr{'save'}"/>
+               </td>
+       </tr>
+       </table></form>
+END
+
+&Header::closebox();
+
+#if settings is set to use coupons, the coupon part has to be displayed
+if ($settings{'AUTH'} eq 'COUPON') {
+       &coupons();
+}
+
+# Show active clients
+&show_clients();
+
+sub getterms() {
+       my @ret;
+
+       open(FILE, "<:utf8", "/var/ipfire/captive/terms.txt");
+       while(<FILE>) {
+               push(@ret, HTML::Entities::decode_entities($_));
+       }
+       close(FILE);
+
+       return join(/\n/, @ret);
+}
+
+sub gencode(){
+       #generate a random code only letters from A-Z except 'O'  and 0-9
+       my @chars = ("A".."N", "P".."Z", "0".."9");
+       my $randomstring;
+       $randomstring .= $chars[rand @chars] for 1..8;
+       return $randomstring;
+}
+
+sub coupons() {
+       &Header::openbox('100%', 'left', $Lang::tr{'Captive generate coupons'});
+
+       $selected{'SESSION_TIME'} = ();
+       foreach my $session_time (keys %session_times) {
+               $selected{'SESSION_TIME'}{$session_time} = "";
+       }
+       $selected{'SESSION_TIME'}{$settings{'SESSION_TIME'}} = "selected";
+
+       print <<END;
+               <form method='post' action='$ENV{'SCRIPT_NAME'}'>
+                       <table border='0' width='100%'>
+                               <tr>
+                                       <td width='30%'>
+                                               $Lang::tr{'Captive vouchervalid'}
+                                       </td>
+                                       <td width='70%'>
+                                               <select name="SESSION_TIME">
+END
+
+       foreach my $session_time (sort { $a <=> $b } keys %session_times) {
+               print <<END;
+                                                       <option value="$session_time" $selected{'SESSION_TIME'}{$session_time}>
+                                                               $session_times{$session_time}
+                                                       </option>
+END
+       }
+
+       print <<END;
+                                               </select>
+                                       </td>
+                               </tr>
+                               <tr>
+                                       <td>$Lang::tr{'remark'}</td>
+                                       <td>
+                                               <input type='text' name='REMARK' size=40>
+                                       </td>
+                               </tr>
+                               <tr>
+                                       <td>$Lang::tr{'Captive generated coupon no'}</td>
+                                       <td>
+                                               <select name="COUNT">
+                                                       <option value="1">1</option>
+                                                       <option value="2">2</option>
+                                                       <option value="3">3</option>
+                                                       <option value="4">4</option>
+                                                       <option value="5">5</option>
+                                                       <option value="6">6</option>
+                                                       <option value="7">7</option>
+                                                       <option value="8">8</option>
+                                                       <option value="9">9</option>
+                                                       <option value="10">10</option>
+                                                       <option value="20">20</option>
+                                                       <option value="50">50</option>
+                                                       <option value="100">100</option>
+                                               </select>
+                                       </td>
+                               </tr>
+                       </table>
+
+                       <div align="right">
+                               <input type="submit" name="ACTION" value="$Lang::tr{'Captive generate coupons'}">
+                       </div>
+               </form>
+END
+
+       &Header::closebox();
+
+       # Show all coupons if exist
+       if (! -z $coupons) {
+               &show_coupons();
+       }
+}
+
+sub show_coupons() {
+       &General::readhasharray($coupons, \%couponhash) if (-e $coupons);
+
+       #if there are already generated but unsused coupons, print a table
+       &Header::openbox('100%', 'left', $Lang::tr{'Captive issued coupons'});
+
+       print <<END;
+               <table class='tbl' border='0'>
+                       <tr>
+                               <th align='center' width='15%'>
+                                       $Lang::tr{'Captive coupon'}
+                               </th>
+                               <th align='center' width='15%'>$Lang::tr{'Captive expiry time'}</th>
+                               <th align='center' width='65%'>$Lang::tr{'remark'}</th>
+                               <th align='center' width='5%'>$Lang::tr{'delete'}</th>
+                       </tr>
+END
+
+       foreach my $key (keys %couponhash) {
+               my $expirytime = $Lang::tr{'Captive nolimit'};
+               if ($couponhash{$key}[2] > 0) {
+                       $expirytime = &General::format_time($couponhash{$key}[2]);
+               }
+
+               if ($count++ % 2) {
+                       $col="bgcolor='$color{'color20'}'";
+               } else {
+                       $col="bgcolor='$color{'color22'}'";
+               }
+
+               print <<END;
+                       <tr>
+                               <td $col align="center">
+                                       <b>$couponhash{$key}[1]</b>
+                               </td>
+                               <td $col align="center">
+                                       $expirytime
+                               </td>
+                               <td $col align="center">
+                                       $couponhash{$key}[3]
+                               </td>
+                               <td $col align="center">
+                                       <form method='post'>
+                                               <input type='image' src='/images/delete.gif' align='middle' alt='$Lang::tr{'delete'}' title='$Lang::tr{'delete'}' />
+                                               <input type='hidden' name='ACTION' value='delete-coupon' />
+                                               <input type='hidden' name='key' value='$couponhash{$key}[0]' />
+                                       </form>
+                               </td>
+                       </tr>
+END
+       }
+
+       print "</table>";
+
+       # Download PDF
+       print <<END;
+               <div align="right">
+                       <form method="POST">
+                               <input type="hidden" name="ACTION" value="export-coupons">
+                               <input type="submit" value="$Lang::tr{'Captive export coupons'}">
+                       </form>
+               </div>
+END
+
+       &Header::closebox();
+}
+
+sub show_clients() {
+       # if there are active clients which use coupons show table
+       return if ( -z $clients || ! -f $clients );
+
+       my $count=0;
+       my $col;
+
+       &Header::openbox('100%', 'left', $Lang::tr{'Captive clients'});
+
+       print <<END;
+               <table class='tbl' width='100%'>
+                       <tr>
+                               <th align='center' width='15%'>$Lang::tr{'Captive coupon'}</th>
+                               <th align='center' width='15%'>$Lang::tr{'Captive activated'}</th>
+                               <th align='center' width='15%'>$Lang::tr{'Captive expiry time'}</th>
+                               <th align='center' width='10%'>$Lang::tr{'Captive mac'}</th>
+                               <th align='center' width='43%'>$Lang::tr{'remark'}</th>
+                               <th align='center' width='5%'>$Lang::tr{'delete'}</th>
+                       </tr>
+END
+
+       &General::readhasharray($clients, \%clientshash) if (-e $clients);
+       foreach my $key (keys %clientshash) {
+               #calculate time from clientshash (starttime)
+               my $starttime = sub{sprintf '%02d.%02d.%04d %02d:%02d', $_[3], $_[4]+1, $_[5]+1900, $_[2], $_[1]  }->(localtime($clientshash{$key}[2]));
+
+               #calculate endtime from clientshash
+               my $endtime;
+               if ($clientshash{$key}[3] eq '0'){
+                       $endtime=$Lang::tr{'Captive nolimit'};
+               } else {
+                       $endtime = sub{sprintf '%02d.%02d.%04d %02d:%02d', $_[3], $_[4]+1, $_[5]+1900, $_[2], $_[1]  }->(localtime($clientshash{$key}[2]+$clientshash{$key}[3]));
+               }
+
+               if ($count++ % 2) {
+                       $col="bgcolor='$color{'color20'}'";
+               } else {
+                       $col="bgcolor='$color{'color22'}'";
+               }
+
+               my $coupon = ($clientshash{$key}[4] eq "LICENSE") ? $Lang::tr{'Captive terms short'} : $clientshash{$key}[4];
+
+               print <<END;
+                       <tr>
+                               <td $col align="center"><b>$coupon</b></td>
+                               <td $col align="center">$starttime</td>
+                               <td $col align="center">$endtime</td>
+                               <td $col align="center">$clientshash{$key}[0]</td>
+                               <td $col align="center">$clientshash{$key}[5]</td>
+                               <td $col align="center">
+                                       <form method='post'>
+                                               <input type='image' src='/images/delete.gif' align='middle' alt='$Lang::tr{'delete'}' title='$Lang::tr{'delete'}' />
+                                               <input type='hidden' name='ACTION' value='delete-client' />
+                                               <input type='hidden' name='key' value='$clientshash{$key}[0]' />
+                                       </form>
+                               </td>
+                       </tr>
+END
+       }
+
+       print "</table>";
+
+       &Header::closebox();
+}
+
+sub validremark
+{
+       # Checks a hostname against RFC1035
+        my $remark = $_[0];
+       # Each part should be at least two characters in length
+       # but no more than 63 characters
+       if (length ($remark) < 1 || length ($remark) > 255) {
+               return 0;}
+       # Only valid characters are a-z, A-Z, 0-9 and -
+       if ($remark !~ /^[a-zäöüA-ZÖÄÜ0-9-.:;\|_()\/\s]*$/) {
+               return 0;}
+       # First character can only be a letter or a digit
+       if (substr ($remark, 0, 1) !~ /^[a-zäöüA-ZÖÄÜ0-9]*$/) {
+               return 0;}
+       # Last character can only be a letter or a digit
+       if (substr ($remark, -1, 1) !~ /^[a-zöäüA-ZÖÄÜ0-9.:;_)]*$/) {
+               return 0;}
+       return 1;
+}
+
+sub generate_pdf() {
+       my $pdf = PDF::API2->new();
+
+       my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = gmtime(time);
+       my $timestamp = sprintf("D:%04d%02d%02d%02d%02d%02d+00;00", $year+1900, $mon+1, $mday, $hour, $min, $sec);
+
+       $pdf->info(
+               "Creator"      => $Lang::tr{'Captive portal'},
+               "Title"        => $Lang::tr{'Captive portal coupons'},
+               "CreationDate" => $timestamp,
+               "ModDate"      => $timestamp,
+       );
+
+       # Set page size
+       $pdf->mediabox("A4");
+       $pdf->trimbox(28/mm, 27/mm, 182/mm, 270/mm);
+
+       # Set font
+       my $font = $pdf->ttfont("/usr/share/fonts/Ubuntu-R.ttf");
+
+       my $page_h_margin = 27/mm;
+       my $page_v_margin = 28/mm;
+
+       my $height = 68/mm;
+       my $width  = 91/mm;
+       my $margin =  2/mm;
+
+       # Tux Image
+       my $tux_image = $pdf->image_png("/srv/web/ipfire/html/captive/assets/ipfire.png");
+       my $logo_height = 12/mm;
+       my $logo_width  = 12/mm;
+
+       my @coupons = ();
+       my %coupon_expiry_times = ();
+
+       # Read coupons
+       &General::readhasharray($coupons, \%couponhash) if (-e $coupons);
+       foreach my $key (keys %couponhash) {
+               $coupon_expiry_times{$couponhash{$key}[1]} = $couponhash{$key}[2];
+               push @coupons, $couponhash{$key}[1];
+       }
+
+       while (@coupons) {
+               # Make a new page
+               my $page = $pdf->page();
+
+               # Graphics
+               $gfx = $page->gfx();
+
+               # Headline font
+               my $f_headline = $page->text();
+               $f_headline->font($font, 20);
+
+               # Subheadline font
+               my $f_subheadline = $page->text();
+               $f_subheadline->font($font, 14);
+
+               # Coupon font
+               my $f_coupon = $page->text();
+               $f_coupon->font($font, 36);
+
+               # Lifetime
+               my $f_lifetime = $page->text();
+               $f_lifetime->font($font, 14);
+
+               # Watermark font
+               my $f_watermark = $page->text();
+               $f_watermark->fillcolor("#666666");
+               $f_watermark->font($font, 10);
+
+               my $i = 0;
+               while (@coupons && $i < 8) {
+                       my $coupon = shift @coupons;
+
+                       # Box corners
+                       my $x = ($page_v_margin / 2) + (($i % 2) ? $width : 0);
+                       my $y = ($page_h_margin / 2) + (int($i / 2) * $height);
+
+                       # Weidth and height of the box
+                       my $w = $width - $margin;
+                       my $h = $height - $margin;
+
+                       # Center
+                       my $cx = $x + ($w / 2);
+                       my $cy = $y + ($h / 2);
+
+                       # Draw border box
+                       $gfx->strokecolor("#333333");
+                       $gfx->linedash(1/mm, 1/mm);
+                       $gfx->rect($x, $y, $w, $h);
+                       $gfx->stroke();
+                       $gfx->endpath();
+
+                       # Headline
+                       $f_headline->translate($cx, ($y + $h - $cy) / 1.7 + $cy);
+                       $f_subheadline->translate($cx, ($y + $h - $cy) / 2.4 + $cy);
+
+                       if ($settings{'TITLE'}) {
+                               $f_headline->text_center($settings{'TITLE'});
+                               $f_subheadline->text_center(decode("utf8", $Lang::tr{'Captive WiFi coupon'}));
+                       } else {
+                               $f_headline->text_center(decode("utf8", $Lang::tr{'Captive WiFi coupon'}));
+                       }
+
+                       # Coupon
+                       $f_coupon->translate($cx, $cy);
+                       $f_coupon->text_center(decode("utf8", $coupon));
+
+                       # Show lifetime
+                       my $expiry_time = $coupon_expiry_times{$coupon};
+                       $f_lifetime->translate($cx, $cy - ($y + $h - $cy) / 4);
+                       if ($expiry_time > 0) {
+                               my $lifetime = &General::format_time($expiry_time);
+                               $f_lifetime->text_center(decode("utf8", $Lang::tr{'Captive valid for'} . " " . $lifetime));
+                       } else {
+                               $f_lifetime->text_center(decode("utf8", $Lang::tr{'Captive nolimit'}));
+                       }
+
+                       # Add watermark
+                       $gfx->image($tux_image, $x + $w - $logo_width - $margin, $y + $margin, $logo_width, $logo_height);
+                       $f_watermark->translate($x + $w - ($margin * 2) - $logo_width, $y + ($logo_height / 2));
+                       $f_watermark->text_right("Powered by IPFire");
+
+                       $i++;
+               }
+       }
+
+       # Write out the PDF document
+       return $pdf->stringify();
+}
+
+&Header::closebigbox();
+&Header::closepage();
diff --git a/html/cgi-bin/captive/index.cgi b/html/cgi-bin/captive/index.cgi
new file mode 100755 (executable)
index 0000000..e9606b1
--- /dev/null
@@ -0,0 +1,238 @@
+#!/usr/bin/perl
+###############################################################################
+#                                                                             #
+# IPFire.org - A linux based firewall                                         #
+# Copyright (C) 2016  Alexander Marx alexander.marx@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/>.       #
+#                                                                             #
+###############################################################################
+
+use strict;
+use CGI ':standard';
+use URI::Escape;
+use HTML::Entities();
+use HTML::Template;
+
+# enable only the following on debugging purpose
+#use warnings;
+#use CGI::Carp 'fatalsToBrowser';
+
+require '/var/ipfire/general-functions.pl';
+require "${General::swroot}/lang.pl";
+
+# Load the most appropriate language from the browser configuration
+my @langs = &Lang::DetectBrowserLanguages();
+&Lang::reload(@langs);
+
+my $coupons = "${General::swroot}/captive/coupons";
+my %couponhash = ();
+
+my %clientshash=();
+my %cgiparams=();
+my %settings=();
+my $clients="${General::swroot}/captive/clients";
+my $settingsfile="${General::swroot}/captive/settings";
+my $errormessage;
+my $url=param('redirect');
+
+#Create /var/ipfire/captive/clients if not exist
+unless (-f $clients){ system("touch $clients"); }
+
+#Get GUI variables
+&getcgihash(\%cgiparams);
+
+#Read settings
+&General::readhash("$settingsfile", \%settings) if(-f $settingsfile);
+
+# Actions
+if ($cgiparams{'ACTION'} eq "SUBMIT") {
+       # Get client IP address
+       my $ip_address = $ENV{X_FORWARDED_FOR} || $ENV{REMOTE_ADDR};
+
+       # Retrieve the MAC address from the ARP table
+       my $mac_address = &Network::get_hardware_address($ip_address);
+
+       &General::readhasharray("$clients", \%clientshash);
+       my $key = &General::findhasharraykey(\%clientshash);
+
+       # Create a new client line
+       foreach my $i (0 .. 5) { $clientshash{$key}[$i] = ""; }
+
+       # MAC address of the client
+       $clientshash{$key}[0] = $mac_address;
+
+       # IP address of the client
+       $clientshash{$key}[1] = $ip_address;
+
+       # Current time
+       $clientshash{$key}[2] = time();
+
+       if ($settings{"AUTH"} eq "COUPON") {
+               &General::readhasharray($coupons, \%couponhash);
+
+               if ($cgiparams{'COUPON'}) {
+                       # Convert coupon input to uppercase
+                       $cgiparams{'COUPON'} = uc $cgiparams{'COUPON'};
+
+                       # Walk through all valid coupons and find the right one
+                       my $found = 0;
+                       foreach my $coupon (keys %couponhash) {
+                               if ($couponhash{$coupon}[1] eq $cgiparams{'COUPON'}) {
+                                       $found = 1;
+
+                                       # Copy expiry time
+                                       $clientshash{$key}[3] = $couponhash{$coupon}[2];
+
+                                       # Save coupon code
+                                       $clientshash{$key}[4] = $cgiparams{'COUPON'};
+
+                                       # Copy coupon remark
+                                       $clientshash{$key}[5] = $couponhash{$coupon}[3];
+
+                                       # Delete used coupon
+                                       delete $couponhash{$coupon};
+                                       &General::writehasharray($coupons, \%couponhash);
+
+                                       last;
+                               }
+                       }
+
+                       if ($found == 1) {
+                               &General::log("Captive", "Internet access granted via coupon ($clientshash{$key}[4]) for $ip_address until $clientshash{$key}[3]");
+                       } else {
+                               $errormessage = $Lang::tr{"Captive invalid coupon"};
+                       }
+
+               # No coupon given
+               } else {
+                       $errormessage = $Lang::tr{"Captive please enter a coupon code"};
+               }
+
+       # Terms
+       } else {
+               # Make sure that they have been accepted
+               if ($cgiparams{'TERMS'} eq "on") {
+                       # Copy session expiry time
+                       $clientshash{$key}[3] = $settings{'SESSION_TIME'} || "0";
+
+                       # No coupon code
+                       $clientshash{$key}[4] = "TERMS";
+
+                       &General::log("Captive", "Internet access granted via license agreement for $ip_address until $clientshash{$key}[3]");
+
+               # The terms have not been accepted
+               } else {
+                       $errormessage = $Lang::tr{'Captive please accept the terms and conditions'};
+               }
+       }
+
+       # If no errors were found, save configruation and reload
+       if (!$errormessage) {
+               &General::writehasharray("$clients", \%clientshash);
+
+               system("/usr/local/bin/captivectrl");
+
+               # Redirect client to the original URL
+               print "Status: 302 Moved Temporarily\n";
+               print "Location: $url\n";
+               print "Connection: close\n\n";
+               exit 0;
+       }
+}
+
+my $tmpl = HTML::Template->new(
+       filename => "/srv/web/ipfire/html/captive/template.html",
+       die_on_bad_params => 0
+);
+
+$tmpl->param(REDIRECT => $url);
+
+# Coupon
+if ($settings{'AUTH'} eq "COUPON") {
+       $tmpl->param(COUPON => 1);
+       $tmpl->param(L_HEADING => $Lang::tr{'Captive coupon'});
+} else {
+       $tmpl->param(L_HEADING => $Lang::tr{'Captive terms'});
+}
+
+$tmpl->param(TITLE => $settings{'TITLE'});
+$tmpl->param(COLOR => $settings{'COLOR'});
+$tmpl->param(ERROR => $errormessage);
+
+$tmpl->param(TERMS => &getterms());
+
+# Some translated strings
+$tmpl->param(L_ACTIVATE        => $Lang::tr{'Captive ACTIVATE'});
+$tmpl->param(L_GAIN_ACCESS     => $Lang::tr{'Captive GAIN ACCESS'});
+$tmpl->param(L_AGREE_TERMS     => $Lang::tr{'Captive agree tac'});
+
+# Print header
+print "Pragma: no-cache\n";
+print "Cache-control: no-cache\n";
+print "Connection: close\n";
+print "Content-type: text/html\n\n";
+
+# Print rendered template
+print $tmpl->output();
+
+sub getcgihash {
+       my ($hash, $params) = @_;
+       my $cgi = CGI->new ();
+       $hash->{'__CGI__'} = $cgi;
+       return if ($ENV{'REQUEST_METHOD'} ne 'POST');
+       if (!$params->{'wantfile'}) {
+               $CGI::DISABLE_UPLOADS = 1;
+               $CGI::POST_MAX        = 1024 * 1024;
+       } else {
+               $CGI::POST_MAX = 10 * 1024 * 1024;
+       }
+       $cgi->referer() =~ m/^http?\:\/\/([^\/]+)/;
+       my $referer = $1;
+       $cgi->url() =~ m/^http?\:\/\/([^\/]+)/;
+       my $servername = $1;
+       return if ($referer ne $servername);
+
+       ### Modified for getting multi-vars, split by |
+       my %temp = $cgi->Vars();
+        foreach my $key (keys %temp) {
+               $hash->{$key} = $temp{$key};
+               $hash->{$key} =~ s/\0/|/g;
+               $hash->{$key} =~ s/^\s*(.*?)\s*$/$1/;
+        }
+
+       if (($params->{'wantfile'})&&($params->{'filevar'})) {
+               $hash->{$params->{'filevar'}} = $cgi->upload
+                                               ($params->{'filevar'});
+       }
+       return;
+}
+
+sub getterms() {
+       my @terms = ();
+
+       open(my $handle, "<:utf8", "/var/ipfire/captive/terms.txt");
+       while(<$handle>) {
+               $_ = HTML::Entities::decode_entities($_);
+               push(@terms, $_);
+       }
+       close($handle);
+
+       my $terms = join("\n", @terms);
+
+       # Format paragraphs
+       $terms =~ s/\n\n/<\/p>\n<p>/g;
+
+       return $terms;
+}
diff --git a/html/cgi-bin/captive/logo.cgi b/html/cgi-bin/captive/logo.cgi
new file mode 100644 (file)
index 0000000..8f292b1
--- /dev/null
@@ -0,0 +1,44 @@
+#!/usr/bin/perl
+###############################################################################
+#                                                                             #
+# IPFire.org - A linux based firewall                                         #
+# Copyright (C) 2016  Alexander Marx alexander.marx@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/>.       #
+#                                                                             #
+###############################################################################
+
+use strict;
+use CGI;
+use File::Copy;
+
+# enable only the following on debugging purpose
+#use warnings;
+#use CGI::Carp 'fatalsToBrowser';
+
+require '/var/ipfire/general-functions.pl';
+
+my $logo = "${General::swroot}/captive/logo.dat";
+
+# Send 404 if logo was not uploaded and exit
+if (!-e $logo) {
+       print CGI::header(status => 404);
+       exit(0);
+}
+
+print "Content-Type: application/octet-stream\n\n";
+
+# Send image data
+File::Copy::copy $logo, \*STDOUT;
+exit(0);
diff --git a/html/cgi-bin/captive/redirect.cgi b/html/cgi-bin/captive/redirect.cgi
new file mode 100755 (executable)
index 0000000..7c5b5e7
--- /dev/null
@@ -0,0 +1,58 @@
+#!/usr/bin/perl
+###############################################################################
+#                                                                             #
+# IPFire.org - A linux based firewall                                         #
+# Copyright (C) 2016 Alexander Marx alexander.marx@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/>.       #
+#                                                                             #
+###############################################################################
+
+use strict;
+use URI::Escape;
+use CGI::Carp qw(fatalsToBrowser);
+
+require '/var/ipfire/general-functions.pl';
+
+my $url = "http://$ENV{'SERVER_NAME'}$ENV{'REQUEST_URI'}";
+my $safe_url = uri_escape($url);
+
+my %settingshash = ();
+my %ethernethash = ();
+my $target;
+
+# Read settings
+&General::readhash("${General::swroot}/captive/settings", \%settingshash);
+&General::readhash("${General::swroot}/ethernet/settings", \%ethernethash);
+
+# Get the client's IP address
+my $client_address = $ENV{X_FORWARDED_FOR} || $ENV{REMOTE_ADDR} || "";
+
+if ($settingshash{'ENABLE_GREEN'} eq "on" && $ethernethash{'GREEN_ADDRESS'} ne '') {
+       if (&General::IpInSubnet($client_address, $ethernethash{'GREEN_ADDRESS'}, $ethernethash{'GREEN_NETMASK'})) {
+               $target = $ethernethash{'GREEN_ADDRESS'};
+       }
+
+} elsif($settingshash{'ENABLE_BLUE'} eq "on" && $ethernethash{'BLUE_ADDRESS'} ne '') {
+       if (&General::IpInSubnet($client_address, $ethernethash{'BLUE_ADDRESS'}, $ethernethash{'BLUE_NETMASK'})) {
+               $target = $ethernethash{'BLUE_ADDRESS'};
+       }
+
+} else {
+       exit 0;
+}
+
+print "Status: 302 Moved Temporarily\n";
+print "Location: http://$target:1013/cgi-bin/index.cgi?redirect=$safe_url\n";
+print "Connection: close\n\n";
index 5a6fbce8310201bb55287f550036536820d75312..da1efb2ddff23245887643be8a3fcc60c4ae7ba0 100644 (file)
@@ -48,8 +48,13 @@ my $partitionentry = "";
 my $devicefile = "/var/ipfire/extrahd/devices";
 my $scanfile = "/var/ipfire/extrahd/scan";
 my $partitionsfile = "/var/ipfire/extrahd/partitions";
-system("/usr/local/bin/extrahdctrl scanhd ide");
-system("/usr/local/bin/extrahdctrl scanhd partitions");
+
+#workaround to suppress a warning when a variable is used only once
+my @dummy = ( ${Header::colourgreen}, ${Header::colourred} );
+undef (@dummy);
+
+system("/usr/local/bin/extrahdctrl scanhd ide >/dev/null");
+system("/usr/local/bin/extrahdctrl scanhd partitions >/dev/null");
 
 &Header::showhttpheaders();
 
index 35977992cd7578e4a38f64318f1e611adf25ab17..f241365a18a4b0fc95834a4ed0970ff459c1d55f 100644 (file)
@@ -50,6 +50,8 @@ $cgiparams{'SECTION'} = 'ipfire';
 
 my %sections = (
         'auth' => '(\w+\(pam_unix\)\[.*\]: )',
+               'wio' => '(wio|wio\[.*\])',
+        'captive' => '(Captive:)',
         'clamav' => '(clamd\[.*\]: |freshclam\[.*\]: )',
         'collectd' => '(collectd\[.*\]: )',
         'cron' => '(fcron\[.*\]: )',
@@ -75,6 +77,8 @@ my %sections = (
 # Translations for the %sections array.
 my %trsections = (
         'auth' => "$Lang::tr{'loginlogout'}",
+               'wio' => 'Who Is Online?',
+        'captive' => $Lang::tr{'captive'},
         'clamav' => 'ClamAV',
         'collectd' => 'Collectd',
         'cron' => 'Cron',
index d46a14e7916454192306afa91eb82d54b15b384a..ceb88c1569d07e6190a99f7fb0dcae67712163a2 100644 (file)
@@ -1061,8 +1061,15 @@ unless(-d "${General::swroot}/ovpn/n2nconf/$cgiparams{'NAME'}"){mkdir "${General
                }
         }
   }
-  print CLIENTCONF "ns-cert-type server\n";   
+  # Check host certificate if X509 is RFC3280 compliant.
+  # If not, old --ns-cert-type directive will be used.
+  # If appropriate key usage extension exists, new --remote-cert-tls directive will be used.
+  my $hostcert = `/usr/bin/openssl x509 -text -in ${General::swroot}/ovpn/certs/servercert.pem`;
+  if ($hostcert !~ /TLS Web Server Authentication/) {
+       print CLIENTCONF "ns-cert-type server\n";
+  } else {
+       print CLIENTCONF "remote-cert-tls server\n";
+  }
   print CLIENTCONF "# Auth. Client\n"; 
   print CLIENTCONF "tls-client\n"; 
   print CLIENTCONF "# Cipher\n"; 
@@ -2173,7 +2180,15 @@ if ($confighash{$cgiparams{'KEY'}}[3] eq 'net'){
                }
        }
    }
-   print CLIENTCONF "ns-cert-type server\n";   
+   # Check host certificate if X509 is RFC3280 compliant.
+   # If not, old --ns-cert-type directive will be used.
+   # If appropriate key usage extension exists, new --remote-cert-tls directive will be used.
+   my $hostcert = `/usr/bin/openssl x509 -text -in ${General::swroot}/ovpn/certs/servercert.pem`;
+   if ($hostcert !~ /TLS Web Server Authentication/) {
+               print CLIENTCONF "ns-cert-type server\n";
+   } else {
+               print CLIENTCONF "remote-cert-tls server\n";
+   }
    print CLIENTCONF "# Auth. Client\n"; 
    print CLIENTCONF "tls-client\n"; 
    print CLIENTCONF "# Cipher\n";
@@ -2332,7 +2347,15 @@ else
         print CLIENTCONF "comp-lzo\r\n";
     }
     print CLIENTCONF "verb 3\r\n";
-    print CLIENTCONF "ns-cert-type server\r\n";
+       # Check host certificate if X509 is RFC3280 compliant.
+       # If not, old --ns-cert-type directive will be used.
+       # If appropriate key usage extension exists, new --remote-cert-tls directive will be used.
+       my $hostcert = `/usr/bin/openssl x509 -text -in ${General::swroot}/ovpn/certs/servercert.pem`;
+       if ($hostcert !~ /TLS Web Server Authentication/) {
+               print CLIENTCONF "ns-cert-type server\r\n";
+       } else {
+               print CLIENTCONF "remote-cert-tls server\r\n";
+       }
     print CLIENTCONF "verify-x509-name $vpnsettings{ROOTCERT_HOSTNAME} name\r\n";
     if ($vpnsettings{MSSFIX} eq 'on') {
        print CLIENTCONF "mssfix\r\n";
index 0b7d36c3cabbc537a046a6bbaf98b2b7074280b2..dd83bba73b3f97c9c28053d12ddb56e7eb3ba610 100644 (file)
@@ -1054,11 +1054,11 @@ if ( -e "/usr/bin/squidclamav" ) {
 } else {
        print "<td></td>";
 }
-print "<td class='base'><b>".$Lang::tr{'advproxy url filter'}."</b><br />";
+print "<td class='base'><a href='/cgi-bin/urlfilter.cgi'><b>".$Lang::tr{'advproxy url filter'}."</a></b><br />";
 print $Lang::tr{'advproxy enabled'}."<input type='checkbox' name='ENABLE_FILTER' ".$checked{'ENABLE_FILTER'}{'on'}." /><br />";
 print "+ ".int(($count**(1/3)) * 6);
 print "</td>";
-print "<td class='base'><b>".$Lang::tr{'advproxy update accelerator'}."</b><br />";
+print "<td class='base'><a href='/cgi-bin/updatexlrator.cgi'><b>".$Lang::tr{'advproxy update accelerator'}."</a></b><br />";
 print $Lang::tr{'advproxy enabled'}."<input type='checkbox' name='ENABLE_UPDXLRATOR' ".$checked{'ENABLE_UPDXLRATOR'}{'on'}." /><br />";
 print "+ ".int(($count**(1/3)) * 5);
 print "</td></tr>";
index f9508b53de2fe4f9f5cf8821e30b7d877efb6dc3..c17ebd6aa29ff832e66bb8d010bad0cca3003d4d 100644 (file)
@@ -3125,6 +3125,8 @@ sub make_algos($$$$$) {
 
                                        if ($grp =~ m/^e(.*)$/) {
                                                push(@algo, "ecp$1");
+                                       } elsif ($grp =~ m/curve25519/) {
+                                               push(@algo, "$grp");
                                        } else {
                                                push(@algo, "modp$grp");
                                        }
@@ -3140,6 +3142,8 @@ sub make_algos($$$$$) {
                                                # noop
                                        } elsif ($grp =~ m/^e(.*)$/) {
                                                push(@algo, "ecp$1");
+                                       } elsif ($grp =~ m/curve25519/) {
+                                               push(@algo, "$grp");
                                        } else {
                                                push(@algo, "modp$grp");
                                        }
index 844c395e2f7738dddd26cd3c36ad5bcfe8577c93..bb40021cf8936af8b0e20c80796b728303eec73a 100644 (file)
@@ -154,7 +154,7 @@ if ( $wlanapsettings{'ACTION'} eq "$Lang::tr{'save'}" ){
        $memory=0;
 }
 
-&Header::openpage('', 1, '', '');
+&Header::openpage($Lang::tr{'wlanap configuration'}, 1, '', '');
 &Header::openbigbox('100%', 'left', '', $errormessage);
 
 if ( $errormessage ){
@@ -323,7 +323,7 @@ if ( $wlan_card_status ne '' ){
        print "<tr><td class='base'>$Lang::tr{'wlanap wlan card'} ($wlanapsettings{'DRIVER'})</td>";
        print $wlan_card_status eq 'up' ? $status_started : $status_stopped;
        print"<td colspan='4'></td></tr>";
-       print "<tr><td class='base' bgcolor='$color{'color22'}'>$Lang::tr{'wlanap access point'}</td>";
+       print "<tr><td class='base' bgcolor='$color{'color22'}'>$Lang::tr{'wlanap'}</td>";
        print $wlan_ap_status eq 'up' ? $status_started : $status_stopped;
        if ( ($memory != 0) && (@pid[0] ne "///") ){
                print "<td bgcolor='$color{'color22'}' align='center'>@pid[0]</td>";
diff --git a/html/html/captive/assets/captive.css b/html/html/captive/assets/captive.css
new file mode 100644 (file)
index 0000000..6f231bc
--- /dev/null
@@ -0,0 +1,194 @@
+@font-face {
+       font-family: "Ubuntu";
+       font-weight: 300;
+       src: local("Ubuntu Light"), local("Ubuntu-Light"), url("Ubuntu-L.ttf") format("truetype");
+}
+
+@font-face {
+       font-family: "Ubuntu";
+       font-weight: 400;
+       src: local("Ubuntu Regular"), local("Ubuntu-Regular"), url("Ubuntu-R.ttf") format("truetype");
+}
+
+@font-face {
+       font-family: "Ubuntu";
+       font-weight: 500;
+       src: local("Ubuntu Medium"), local("Ubuntu-Medium"), url("Ubuntu-M.ttf") format("truetype");
+}
+
+body {
+       background-image: url("../cgi-bin/logo.cgi");
+       background-size: 100%;
+       background-repeat: no-repeat;
+
+       background-color: #eceff1;
+       color: #263238;
+
+       display: flex;
+       min-height: 100vh;
+       flex-direction: column;
+}
+
+body, input {
+       font-family: "Ubuntu", sans-serif;
+       font-size: 14px;
+}
+
+.content {
+       flex: 1;
+}
+
+.box {
+       margin: 272px 0 48px 0;
+       padding: 0 30px 48px 30px;
+
+       position: relative;
+       display: flex;
+       flex-direction: column;
+       background-color: white;
+
+       border: none;
+       border-radius: 4px;
+       box-shadow:
+               0 19px 38px 0 rgba(0, 0, 0, 0.3),
+               0 15px 12px 0 rgba(0, 0, 0, 0.22);
+}
+
+.box-header {
+       display: flex;
+       align-items: center;
+       justify-content: center;
+       min-height: 128px;
+}
+
+.box-header h1 {
+       font-size: 40px;
+}
+
+@media (min-width: 1200px) {
+       .box-header {
+               min-height: none;
+       }
+
+       .box-header h1 {
+               margin-top: 24px;
+               margin-bottom: 20px;
+       }
+}
+
+.box-block {
+       padding: 24px 16px 24px 16px;
+       margin: 0 -8px 40px -8px;
+
+       text-align: center;
+       background-color: #b71c1c;
+       color: white;
+       border-radius: 4px;
+}
+
+@media (min-width: 1200px) {
+       .box-block {
+               padding: 18px 16px 18px 16px;
+               margin: 0 0 48px 0;
+       }
+}
+
+.box-block h4 {
+       font-size: 20px;
+}
+
+footer {
+       height: 64px;
+       background-color: rgba(84, 110, 122, 0.06); /* #546e7a */
+}
+
+.footer {
+       display: flex;
+       align-items: center;
+}
+
+.footer .logo {
+       width: 64px;
+       height: 64px;
+       padding: 8px;
+}
+
+.form-text {
+       display: inline-block;
+       height: 36px;
+
+       color: #263238;
+       background-color: rgba(38, 49, 56, 0,08);
+
+       border: 0;
+       border-radius: 2px;
+       box-shadow: inset 0 -2px 0 0 #546e7a;
+}
+
+.form-error {
+       box-shadow: inset 0 -2px 0 0 #ff3d00;
+}
+
+.form-submit {
+       display: inline-block;
+
+       font-weight: 500;
+       text-transform: uppercase;
+
+       height: 36px;
+       padding: 0 16px 0 16px;
+       margin: 0 8px 0 8px;
+
+       color: #263238;
+       background-color: white;
+
+       border: none;
+       border-radius: 2px;
+       box-shadow:
+               0 2px 4px 0 rgba(0, 0, 0, 0.16),
+               0 1px 2px 0 rgba(0, 0, 0, 0.23);
+}
+
+.form-submit:hover {
+       box-shadow:
+               0 3px 6px 0 rgba(0, 0, 0, 0.16),
+               0 3px 6px 0 rgba(0, 0, 0, 0.23);
+}
+
+.form-submit:active {
+       background-color: black;
+       opacity: 0.16;
+       box-shadow: none;
+}
+
+.checkbox {
+       position: relative;
+       display: block;
+
+       margin-top: 20px;
+}
+
+.checkbox .form-checkbox {
+       position: absolute;
+       margin-top: 1px;
+       margin-left: -24px;
+
+       width: 20px;
+       height: 20px;
+
+       background-color: rgba(38, 49, 56, 0.08);
+
+       border: 2px solid #546e7a;
+       border-radius: 2px;
+}
+
+.text-error {
+       position: block;
+       margin-top: 6px;
+       min-height: 23px;
+
+       color: white;
+       background-color: #ff3d00;
+
+       border-radius: 2px;
+}
diff --git a/html/html/captive/assets/favicon.ico b/html/html/captive/assets/favicon.ico
new file mode 100644 (file)
index 0000000..52da262
Binary files /dev/null and b/html/html/captive/assets/favicon.ico differ
diff --git a/html/html/captive/assets/ipfire.png b/html/html/captive/assets/ipfire.png
new file mode 100644 (file)
index 0000000..cd84ad5
Binary files /dev/null and b/html/html/captive/assets/ipfire.png differ
diff --git a/html/html/captive/template.html b/html/html/captive/template.html
new file mode 100644 (file)
index 0000000..04be2b1
--- /dev/null
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML>
+<html>
+       <head>
+               <meta charset="UTF-8">
+               <title><TMPL_VAR NAME="TITLE"></title>
+
+               <link rel="stylesheet" href="../assets/bootstrap-reboot.min.css">
+               <link rel="stylesheet" href="../assets/bootstrap-grid.min.css">
+               <link rel="stylesheet" href="../assets/captive.css">
+
+               <TMPL_IF NAME="COLOR">
+                       <style>
+                               .box-block {
+                                       background-color: <TMPL_VAR NAME="COLOR">;
+                               }
+                       </style>
+               </TMPL_IF>
+
+               <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+       </head>
+
+       <body>
+               <div class="container content">
+                       <div class="row">
+                               <div class="col-12 col-lg-10 offset-lg-1 col-xl-8 offset-xl-2">
+                                       <div class="box">
+                                               <div class="box-header">
+                                                       <h1><TMPL_VAR NAME="TITLE"></h1>
+                                               </div>
+
+                                               <div class="box-block">
+                                                       <h4><TMPL_VAR NAME="L_HEADING"></h4>
+
+                                                       <form action="" method="POST">
+                                                               <input type="hidden" name="ACTION" value="SUBMIT">
+                                                               <input type="hidden" name="redirect" value="<TMPL_VAR NAME="REDIRECT">">
+
+                                                               <TMPL_IF NAME="COUPON">
+                                                                       <input class="form-text <TMPL_IF NAME="ERROR">form-error</TMPL_IF>" type="text" name="COUPON">
+                                                                       <input class="form-submit" type="submit"
+                                                                               value="<TMPL_VAR NAME="L_ACTIVATE">">
+                                                               <TMPL_ELSE>
+                                                                       <div class="checkbox">
+                                                                               <label>
+                                                                                       <input class="form-checkbox <TMPL_IF NAME="ERROR">error</TMPL_IF>" type="checkbox" name="TERMS">
+                                                                                       <TMPL_VAR NAME="L_AGREE_TERMS">
+                                                                               </label>
+                                                                       </div>
+
+                                                                       <input class="form-submit" type="submit"
+                                                                               value="<TMPL_VAR NAME="L_GAIN_ACCESS">">
+                                                               </TMPL_IF>
+
+                                                               <TMPL_IF NAME="ERROR">
+                                                                       <div class="text-error">
+                                                                               <TMPL_VAR NAME="ERROR">
+                                                                       </div>
+                                                               </TMPL_IF>
+                                                       </form>
+                                               </div>
+
+                                               <TMPL_IF NAME="TERMS">
+                                                       <TMPL_VAR NAME="TERMS">
+                                               </TMPL_IF>
+                                       </div>
+                               </div>
+                       </div>
+               </div>
+
+               <footer>
+                       <div class="container">
+                               <div class="footer">
+                                       <img class="logo" src="../assets/ipfire.png" alt="IPFire Logo">
+                                       Powered by IPFire
+                               </div>
+                       </div>
+               </footer>
+       </body>
+</html>
diff --git a/html/html/dial.cgi b/html/html/dial.cgi
deleted file mode 100644 (file)
index 7c7b7db..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/usr/bin/perl
-
-print "Status: 302 Moved\n";
-print "Location: /cgi-bin/dial/index.cgi\n\n";
index b0cb96df2482c9ffc51c9c4ce2c5c8daa92fc3ca..6dff5d781ea178d8e734993fef0ae06a4c4986a9 100644 (file)
@@ -7,6 +7,60 @@
 'Add Rule' => 'Regel hinzufügen',
 'Add a route' => 'Eine Route hinzufügen',
 'Async logging enabled' => 'Aktiviere asynchrones Schreiben des Syslogs',
+'Captive 1day' => '1 Tag',
+'Captive 1month' => '1 Monat',
+'Captive 1week' => '1 Woche',
+'Captive ACTIVATE' => 'AKTIVIEREN',
+'Captive GAIN ACCESS' => 'ZUGANG',
+'Captive WiFi coupon' => 'WLAN-Gutschein',
+'Captive activate' => 'Aktivieren',
+'Captive activated' => 'Aktiviert',
+'Captive active on' => 'Aktiviert auf',
+'Captive agree tac' => 'Bedingungen akzeptieren',
+'Captive auth_lic' => 'Lizenz',
+'Captive auth_vou' => 'Gutschein',
+'Captive authentication' => 'Art der Anmeldung',
+'Captive brand color' => 'Highlight-Farbe',
+'Captive branding' => 'Branding',
+'Captive client session expiry time' => 'Ablaufzeit',
+'Captive clients' => 'Clients',
+'Captive config' => 'Konfiguration',
+'Captive coupon' => 'Gutschein',
+'Captive err doublevoucher' => 'Ein Gutschein mit diesem Code ist bereits im Umlauf',
+'Captive expire' => 'Ablauf',
+'Captive expiry time' => 'Ablaufzeit',
+'Captive export coupons' => 'Gutscheine exportieren',
+'Captive generate coupons' => 'Gutscheine generieren',
+'Captive generated coupon no' => 'Anzahl der generierten Gutscheine',
+'Captive genvoucher' => 'Gutschein generieren',
+'Captive invalid logosize' => 'Die hochgeladene Datei entspricht nicht der vorgegeben Auflösung von mindestens 1280x400 und maximal 1920x800 Pixeln',
+'Captive invalid_voucher' => 'Dieser Code ist ungültig. Bitte versuchen Sie es erneut',
+'Captive ip' => 'IP-Addresse',
+'Captive issued coupons' => 'Ausgestellte Gutscheine',
+'Captive logo uploaded' => 'Logo hochgeladen',
+'Captive logo_set' => 'Aktuelles Logo',
+'Captive logo_upload' => 'Logo hochladen',
+'Captive logo_upload1' => '(PNG, min. 1280x400, max. 1920x800)',
+'Captive mac' => 'MAC-Adresse',
+'Captive menu' => 'Captive-Portal',
+'Captive noexpiretime' => 'Es wurde kein gültiger Verbindungszeitraum angegeben',
+'Captive nolimit' => 'Unbegrenzt',
+'Captive nr' => 'Nummer',
+'Captive please accept the terms and conditions' => 'Bitte akzeptieren Sie die Bedingungen',
+'Captive portal' => 'IPFire Captive-Portal',
+'Captive portal coupons' => 'Captive-Portal-Gutscheine',
+'Captive terms' => 'Bedingungen',
+'Captive terms short' => 'Bedingungen',
+'Captive time' => 'Erlaubter Nutzungszeitraum nach Aktivierung (Stunden)',
+'Captive title' => 'Titel der Anmeldeseite',
+'Captive upload logo' => 'Logo hochladen',
+'Captive upload logo recommendations' => '(PNG oder JPEG, 1280x720 Pixel empfohlen)',
+'Captive valid for' => 'Gültig für',
+'Captive voactive' => 'Aktive Gutscheine',
+'Captive voucher' => 'Gutschein',
+'Captive vouchervalid' => 'Erlaubter Zeitraum für Gutschein',
+'Captive vout' => 'Ausgegebene Gutscheine',
+'Captive wrong ext' => 'Die hochgeladene Datei hat den falschen Dateityp',
 'Choose Rule' => 'Wählen Sie <u>eine</u> der untenstehenden Regeln aus.',
 'Class' => 'Klasse',
 'Class was deleted' => 'wurde mit eventuell vorhandenen Unterklassen gelöscht',
 'ConnSched change profile title' => 'Wechsle zu Profil:',
 'ConnSched days' => 'Tage:',
 'ConnSched dial' => 'Verbinden',
-'ConnSched down' => 'Runter',
+'ConnSched down' => 'Herunter',
 'ConnSched hangup' => 'Trennen',
 'ConnSched ipsecstart' => 'IPsec (neu)starten',
-'ConnSched ipsecstop' => 'IPsec stop',
+'ConnSched ipsecstop' => 'IPsec stoppen',
 'ConnSched reboot' => 'Neustarten',
 'ConnSched reconnect' => 'Neu verbinden',
 'ConnSched scheduled actions' => 'Geplante Aktionen',
 'ConnSched select profile' => 'Wähle Profil',
 'ConnSched shutdown' => 'Herunterfahren',
 'ConnSched time' => 'Zeit:',
-'ConnSched up' => 'Hoch',
+'ConnSched up' => 'Herauf',
 'ConnSched weekdays' => 'Wochentage:',
 'Edit an existing route' => 'Eine existierende Route editieren',
 'Enter TOS' => 'Aktivieren oder deaktivieren Sie die TOS-Bits <br /> und klicken Sie danach auf <i>Speichern</i>.',
 'Existing Files' => 'Dateien in der Datenbank',
-'HDD temperature' => 'HDD-Temperatur',
+'HDD temperature' => 'Festplatten-Temperatur',
 'Level7 Protocol' => 'Level7-Protokoll',
 'Level7 Rule' => 'Level7-Regel',
 'Level7 rule' => 'Level7-Regel',
 'advproxy errmsg no browser' => 'Mindestens ein Browser oder Client muss für den Web-Zugriff zugelassen sein',
 'advproxy errmsg no password' => 'Passwort kann nicht leer sein',
 'advproxy errmsg no username' => 'Benutzername darf nicht leer sein',
-'advproxy errmsg non-transparent proxy required' => 'Web Proxy muss für die Authentifizierung im Nicht-transparenten Modus laufen',
+'advproxy errmsg non-transparent proxy required' => 'Web Proxy muss für die Authentifizierung im nicht-transparenten Modus laufen',
 'advproxy errmsg ntlm domain' => 'Windows-Domänenname erforderlich',
 'advproxy errmsg ntlm pdc' => 'Hostname der Primary Domain Controllers erforderlich',
 'advproxy errmsg password incorrect' => 'Falsches Passwort',
 'advproxy error design' => 'Design der Fehlermeldungen',
 'advproxy error language' => 'Sprache der Fehlermeldungen',
 'advproxy fake referer' => 'Gefälschter Referer für externe Web-Sites',
-'advproxy fake useragent' => 'Gefälschter Useragent für externe Web-Sites',
-'advproxy friday' => 'Fre',
+'advproxy fake useragent' => 'Gefälschter User-Agent für externe Web-Sites',
+'advproxy friday' => 'Fr',
 'advproxy from' => 'Von',
 'advproxy group access control' => 'Gruppenbasierte Zugriffskontrolle',
 'advproxy group required' => 'Erforderliche Gruppe',
 'advproxy log enabled' => 'Protokoll aktiviert',
 'advproxy log query' => 'Protokolliere Query Terms',
 'advproxy log settings' => 'Protokolleinstellungen',
-'advproxy log useragent' => 'Protokolliere Useragents',
+'advproxy log useragent' => 'Protokolliere User-Agents',
 'advproxy max download size' => 'Max. Größe von Downloads (KB)',
 'advproxy max size' => 'Max. Objektgröße (KB)',
 'advproxy max upload size' => 'Max. Größe von Uploads (KB)',
 'advproxy min size' => 'Min. Objektgröße (KB)',
 'advproxy mode allow' => 'Zulassen',
 'advproxy mode deny' => 'Verweigern',
-'advproxy monday' => 'Mon',
+'advproxy monday' => 'Mo',
 'advproxy network based access' => 'Netzwerkbasierte Zugriffskontrolle',
 'advproxy no cache sites' => 'Diese Domains nicht zwischenspeichern (eine pro Zeile)',
 'advproxy no clients defined' => 'Keine Clients definiert',
 'advproxy ram cache size' => 'Cachegröße im Arbeitsspeicher (MB)',
 'advproxy redirector children' => 'Anzahl der Filterprozesse',
 'advproxy reset' => 'Zurücksetzen',
-'advproxy saturday' => 'Sam',
+'advproxy saturday' => 'Sa',
 'advproxy save and restart' => 'Speichern und Neustart',
 'advproxy squid version' => 'Squid Cache Version',
 'advproxy squidclamav' => 'SquidClamav',
 'advproxy ssl ports' => 'Zulässige SSL-Ports (einer pro Zeile)',
 'advproxy standard' => 'Standard',
 'advproxy standard ports' => 'Zulässige Standard-Ports (einer pro Zeile)',
-'advproxy sunday' => 'Son',
+'advproxy sunday' => 'So',
 'advproxy supervisor password' => 'Supervisor-Passwort',
-'advproxy suppress version' => 'Unterdrücke Versions-Informationen',
+'advproxy suppress version' => 'Unterdrücke Versionsinformationen',
 'advproxy throttle binary' => 'Binärdateien',
 'advproxy throttle dskimg' => 'CD-Images',
 'advproxy throttle mmedia' => 'Multimedia',
 'advproxy throttling per host on' => 'Begrenzung pro Host auf',
 'advproxy throttling total on' => 'Begrenzung insgesamt auf',
 'advproxy throttling unlimited' => 'unbegrenzt',
-'advproxy thursday' => 'Don',
+'advproxy thursday' => 'Do',
 'advproxy time restrictions' => 'Zeitbeschränkungen',
 'advproxy to' => 'Bis',
 'advproxy transfer limits' => 'Transfergrenzen',
 'advproxy transparent on' => 'Transparent auf',
-'advproxy tuesday' => 'Die',
+'advproxy tuesday' => 'Di',
 'advproxy unknown' => 'Unbekannt',
 'advproxy unrestricted ip clients' => 'Uneingeschränkte IP-Adressen (eine pro Zeile)',
 'advproxy unrestricted mac clients' => 'Uneingeschränkte MAC-Adressen (eine pro Zeile)',
 'advproxy via forwarding' => 'Proxy-Adresse weiterleiten',
 'advproxy visible hostname' => 'Sichtbarer Hostname',
 'advproxy web browser' => 'Web-Browser',
-'advproxy wednesday' => 'Mit',
+'advproxy wednesday' => 'Mi',
 'again' => 'Wiederholung:',
 'age second' => 'Sekunde',
 'age seconds' => 'Sekunden',
 'alt dialup' => 'Einwahl',
 'alt home' => 'Startseite',
 'alt information' => 'Information',
-'alt logs' => 'Logs',
+'alt logs' => 'Protokolle',
 'alt ovpn' => 'OpenVPN',
 'alt proxy' => 'Proxy',
 'alt services' => 'Dienste',
 'dnsforward entries' => 'Aktuelle Einträge',
 'dnsforward forward_server' => 'DNS-Server',
 'dnsforward zone' => 'Zone',
-'dnssec aware' => 'DNSSEC-aware',
-'dnssec disabled warning' => 'WARNING: DNSSEC wurde deaktiviert',
+'dnssec aware' => 'DNSSEC-Informationen verfügbar, aber nicht validierend',
+'dnssec disabled warning' => 'WARNUNG: DNSSEC wurde deaktiviert',
 'dnssec information' => 'DNSSEC-Informationen',
 'dnssec not supported' => 'DNSSEC wird nicht unterstützt',
 'dnssec validating' => 'DNSSEC-validierend',
-'do not log this port list' => 'Verwerfe diese Port-Liste kurz bevor sie protokolliert werden (reduziert Protokollgröße)',
+'do not log this port list' => 'Verwerfe diese Port-Liste, kurz bevor sie protokolliert werden (reduziert Protokollgröße)',
 'dod' => 'Dial-on-Demand-Modus',
 'dod for dns' => 'Dial-on-Demand für DNS:',
 'dod not compatible with ddns' => 'Dial-on-Demand ist nicht kompatibel mit dynamischen DNS-Diensten',
 'drop action' => 'Standardverhalten der (Forward) Firewall in Modus "Blocked"',
 'drop action1' => 'Standardverhalten der (Outgoing) Firewall in Modus "Blocked"',
 'drop action2' => 'Standardverhalten der (Input) Firewall',
-'drop forward' => 'Verworfene (Forward) Firewall-Pakete loggen',
-'drop input' => 'Verworfene Input Pakete loggen',
-'drop newnotsyn' => 'Verworfene New Not Syn Pakete loggen',
-'drop outgoing' => 'Verworfene (Outgoing) Firewall-Pakete loggen',
-'drop portscan' => 'Verworfene Portscan Pakete loggen',
-'drop proxy' => 'Alle Pakete verwerfen die nicht direkt an den Proxy gerichtet sind',
-'drop samba' => 'Alle Microsoft Pakete verwerfen, Ports 135,137,138,139,445,1025',
-'drop wirelessforward' => 'Verworfene Wireless Forward Pakete loggen',
-'drop wirelessinput' => 'Verworfene Wireless Input Pakete loggen',
+'drop forward' => 'Verworfene (Forward) Firewall-Pakete protokollieren',
+'drop input' => 'Verworfene Input Pakete protokollieren',
+'drop newnotsyn' => 'Verworfene New Not Syn Pakete protokollieren',
+'drop outgoing' => 'Verworfene (Outgoing) Firewall-Pakete protokollieren',
+'drop portscan' => 'Verworfene Portscan Pakete protokollieren',
+'drop proxy' => 'Alle Pakete verwerfen, die nicht direkt an den Proxy gerichtet sind',
+'drop samba' => 'Alle Microsoft Pakete verwerfen (Ports 135,137,138,139,445,1025)',
+'drop wirelessforward' => 'Verworfene Wireless Forward Pakete protokollieren',
+'drop wirelessinput' => 'Verworfene Wireless Input Pakete protokollieren',
 'dst port' => 'Ziel-Port',
 'dstprt range overlaps' => 'Der Zielportbereich überlappt mit einem bereits definierten Port.',
 'dstprt within existing' => 'Der Zielport liegt innerhalb eines bereits definierten Portbereichs.',
 'edit share' => 'Freigabe bearbeiten',
 'editor' => 'Editor',
 'eg' => 'z.B.:',
+'eight hours' => '8 Stunden',
 'email config' => 'Konfiguration',
 'email empty field' => 'Leeres Feld',
-'email error' => 'ERROR: Testmail konnte nicht versendet werden',
+'email error' => 'FEHLER: Test-E-Mail konnte nicht versendet werden',
 'email invalid' => 'Ungültiges Feld',
 'email invalid mailfqdn' => 'Ungültiger FQDN für Mailserver',
 'email invalid mailip' => 'Ungültige IP-Adresse für Mailserver',
 'email mailrcpt' => 'E-Mail-Empfänger',
 'email mailsender' => 'E-Mail-Absender',
 'email mailuser' => 'Benutzername',
-'email server can not be empty' => 'Email-Server darf nicht leer sein',
+'email server can not be empty' => 'E-Mail-Server darf nicht leer sein',
 'email settings' => 'Mailversand',
-'email subject' => 'IPFire Testmail',
-'email success' => 'Testmail erfolgreich versendet',
+'email subject' => 'IPFire Test-E-Mail',
+'email success' => 'Test-E-Mail erfolgreich versendet',
 'email testmail' => 'Testnachricht senden',
 'email text' => 'Testnachricht vom IPFire Mailversand.',
 'email tls' => 'TLS aktivieren',
 'email usemail' => 'Mailversand aktivieren',
-'emailreportlevel' => 'Email-Reportlevel',
+'emailreportlevel' => 'E-Mail-Reportlevel',
 'empty' => 'Dieses Feld kann leer bleiben',
 'empty profile' => 'Unbenannt',
 'enable ignore filter' => '&quot;Ignorieren&quot;-Filter ein',
 'esp keylife should be between 1 and 24 hours' => 'ESP Schlüssel-Lebensdauer sollte zwischen 1 und 24 Stunden betragen.',
 'every' => 'Alle',
 'exampel' => 'Beispiel',
-'exclude logfiles' => 'ohne Logdateien',
+'exclude logfiles' => 'ohne Protokolldateien',
 'excluding buffers and cache' => '-/+ Puffer/Zwischenspeicher',
 'expected' => 'Erwartet',
 'expertoptions' => 'Expertenoptionen',
 'exportkey' => 'PSK exportieren',
 'external access' => 'Externer Zugang',
 'external access configuration' => 'Einstellungen für externen Zugang',
-'external access rule added' => 'Regel für externen Zugang hinzugefügt; Starte Zugangskontroller neu',
-'external access rule changed' => 'External access Regel geändert; Der access controller wird neu gestartet.',
-'external access rule removed' => ' Regel für externen Zugang entfernt; Starte Zugangskontroller neu',
+'external access rule added' => 'Regel für externen Zugang hinzugefügt; starte Zugangskontroller neu',
+'external access rule changed' => 'External access Regel geändert; der access controller wird neu gestartet.',
+'external access rule removed' => ' Regel für externen Zugang entfernt; starte Zugangskontroller neu',
 'external aliases configuration' => 'Externe Alias-Konfiguration',
 'extrahd' => 'ExtraHD',
 'extrahd because there is already a device mounted' => ' mounten, weil bereits ein Gerät gemountet ist',
 'firewall log country' => 'Firewall-Protokoll (Land)',
 'firewall log ip' => 'Firewall-Protokoll (IP)',
 'firewall log port' => 'Firewall-Protokoll (Port)',
-'firewall logs' => 'Firewall-Logdateien',
-'firewall logs country' => 'Fw-Logdiagramme (Land)',
-'firewall logs ip' => 'Fw-Logdiagramme (IP)',
-'firewall logs port' => 'Fw-Logdiagramme (Port)',
+'firewall logs' => 'Firewall-Protokolldateien',
+'firewall logs country' => 'Fw-Protokolldiagramme (Land)',
+'firewall logs ip' => 'Fw-Protokolldiagramme (IP)',
+'firewall logs port' => 'Fw-Protokolldiagramme (Port)',
 'firewall rules' => 'Firewallregeln',
 'firewallhits' => 'Firewalltreffer',
 'firmware' => 'Firmware',
 'forwarding rule added' => 'Weiterleitungsregel hinzugefügt. Starte Weiterleitung neu',
 'forwarding rule removed' => 'Weiterleitungsregel entfernt. Starte Weiterleitung neu',
 'forwarding rule updated' => 'Weiterleitungsregel aktualisiert; starte Weiterleitung neu',
+'four hours' => '4 Stunden',
 'free' => 'Frei',
 'free memory' => 'Freier Speicher   ',
 'free swap' => 'Freier Swap',
 'fritzdsl help' => 'Um eines der folgenden Fritz!DSL Modems (Fritz!Card DSL=fcdsl / Fritz!CardDSL SL=fcdslsl / Fritz!Card DSL V2.0=fcdsl2 / Fritz!Card DSL USB=fcdslusb / Fritz!Card DSL USB SL=fcdslslusb) nutzen zu können, müssen Sie ein Paket auf Ihre IPFire-Box laden. Bitte laden Sie den tarball entsprechend Ihrer Version von der IPFire-Webseite herunter und laden Sie dann die gesamte <b>fcdsl-(ihre_version).tgz</b> mit dem folgenden Formular hoch.',
 'fritzdsl upload' => 'Fritz!DSL-Treiber hochladen',
 'from' => 'Von',
-'from email adr' => 'Von Email Adresse',
-'from email pw' => 'Von Email Passwort',
-'from email server' => 'Von Email Server',
-'from email user' => 'Von Email Benutzer',
-'from warn email bad' => 'Von Email Adresse ist nicht gültig',
+'from email adr' => 'Von E-Mail-Adresse',
+'from email pw' => 'Von E-Mail-Passwort',
+'from email server' => 'Von E-Mail-Server',
+'from email user' => 'Von E-Mail-Benutzer',
+'from warn email bad' => 'Von E-Mail-Adresse ist nicht gültig',
 'fw blue' => 'Firewalloptionen für das Blaue Interface',
-'fw default drop' => 'Firewall Policy',
-'fw logging' => 'Firewall-Logging',
+'fw default drop' => 'Firewall Richtlinie',
+'fw logging' => 'Firewall-Protokollierung',
 'fw settings' => 'Firewall-Einstellungen',
 'fw settings color' => 'Farben in Regeltabelle anzeigen',
 'fw settings dropdown' => 'Alle Netzwerke auf Regelerstellungsseite anzeigen',
 'fwdfw external port nat' => 'Externer Port (NAT)',
 'fwdfw final_rule' => 'Letzte Regel: ',
 'fwdfw from' => 'Von:',
-'fwdfw hint ip1' => 'Die zuletzt erzeugte Regel mag eventuell niemals zutreffen, da sich Quelle und Ziel überlappen.',
-'fwdfw hint ip2' => 'Bitte überprüfen Sie, ob diese Regel Sinn macht: ',
+'fwdfw hint ip1' => 'Die zuletzt erzeugte Regel könnte eventuell niemals zutreffen, da sich Quelle und Ziel überlappen.',
+'fwdfw hint ip2' => 'Bitte überprüfen Sie, ob diese Regel Sinn ergibt: ',
 'fwdfw hint mac' => 'Sie nutzen MAC-Adressen in der Zielgruppe. Diese werden bei der Regelerstellung übersprungen.',
 'fwdfw iface' => 'Interface',
 'fwdfw ipsec network' => 'IPsec-Netzwerke:',
 'fwhost stdnet' => 'Standard-Netzwerke:',
 'fwhost type' => 'Typ',
 'fwhost used' => 'Genutzt',
-'fwhost welcome' => 'Hier können einzelne Hosts, Netzwerke oder Dienste zu Gruppen zusammengefasst werden, was das erstellen von Firewallregeln einfacher und schneller macht.',
+'fwhost welcome' => 'Hier können einzelne Hosts, Netzwerke oder Dienste zu Gruppen zusammengefasst werden, was das Erstellen von Firewallregeln einfacher und schneller macht.',
 'fwhost wo subnet' => '(Ohne Subnetz)',
 'gateway' => 'Gateway',
 'gateway ip' => 'Gateway-IP',
 'hangup' => 'Trennen',
 'hangup string' => 'Auflegen:',
 'harddisk temperature' => 'Festplattentemperatur',
-'harddisk temperature graphs' => 'HDD-Diagramme',
+'harddisk temperature graphs' => 'Festplatten-Diagramme',
 'hardware graphs' => 'Hardware-Diagramme',
 'hardware support' => 'Hardware-Unterstützung',
 'hdd temperature in' => 'Festplattentemperatur in',
 'idle' => 'Leerlauf',
 'idle timeout' => 'Leerlauf-Wartezeit in min (0 zum Deaktivieren):',
 'idle timeout not set' => 'Leerlauf-Wartezeit nicht angegeben.',
-'ids log viewer' => 'Ansicht IDS-Log',
-'ids logs' => 'IDS-Logdateien',
+'ids log viewer' => 'Ansicht IDS-Protokoll',
+'ids logs' => 'IDS-Protokolldateien',
 'ids preprocessor' => 'IDS-Präprozessor',
 'ids rules license' => 'Um  Sourcefire VRT Zertifizierte Regeln zu nutzen, müssen Sie sich unter',
 'ids rules license1' => ' registrieren.',
 'imsi' => 'IMSI',
 'in' => 'Ein',
 'inactive' => 'inaktiv',
-'include logfiles' => 'mit Logdateien',
+'include logfiles' => 'mit Protokolldateien',
 'incoming' => 'eingehend',
 'incoming compression in bytes per second' => 'Eingehende Kompression',
 'incoming firewall access' => 'Eingehender Firewallzugang',
 'internet' => 'INTERNET',
 'intrusion detection' => 'Einbruchdetektierung',
 'intrusion detection system' => 'Intrusion Detection System',
-'intrusion detection system log viewer' => 'Betrachter der IDS-Logfiles',
+'intrusion detection system log viewer' => 'Betrachter der IDS-Protokolldateien',
 'intrusion detection system rules' => 'Intrusion Detection System Regeln',
 'intrusion detection system2' => 'Intrusion Detection System:',
 'invalid broadcast ip' => 'Ungültige Broadcast-IP',
 'invalid input for dhcp wins' => 'Ungültige Eingabe für DHCP WINS',
 'invalid input for dpd delay' => 'Ungültige Eingabe für DPD-Verzögerung',
 'invalid input for dpd timeout' => 'Ungültige Eingabe für DPD-Zeitüberschreitung',
-'invalid input for e-mail address' => 'Ungültige Eingabe für die E-mail Adresse',
+'invalid input for e-mail address' => 'Ungültige Eingabe für die E-Mail-Adresse',
 'invalid input for esp keylife' => 'Ungültige Eingabe für ESP Schlüssel-Lebensdauer',
 'invalid input for hostname' => 'Ungültige Eingabe für Hostname',
 'invalid input for ike lifetime' => 'Ungültige Eingabe für IKE Lebensdauer',
 'invalid input for keepalive 1' => 'Ungültige Eingabe für Keepalive ping',
-'invalid input for keepalive 1:2' => 'Ungültige Eingabe für Keepalive mindestens ein Verhältnis von 1:2',
+'invalid input for keepalive 1:2' => 'Ungültige Eingabe für Keepalive (mindestens ein Verhältnis von 1:2)',
 'invalid input for keepalive 2' => 'Ungültige Eingabe für Keepalive ping-restart',
 'invalid input for max clients' => 'Ungültige Eingabe für Max Clients',
 'invalid input for name' => 'Ungültige Eingabe für vollen Namen des Benutzers oder des System Hostnamens',
 'invalid key' => 'Ungültiger Schlüssel.',
 'invalid loaded file' => 'Ungültige geladene Datei',
 'invalid local-remote id' => 'Local-Id und Remote-Id dürfen nicht gleich sein, und müssen einem "@"-Zeichen beginnen. Dies sind leftid und rightid in der StrongSwan-Terminologie.',
-'invalid logserver address' => 'Ungültige syslogd server Adresse',
+'invalid logserver address' => 'Ungültige syslogd-Server-Adresse',
 'invalid mac address' => 'Ungültige MAC-Adresse',
 'invalid max lease time' => 'Ungültige max. Haltezeit.',
 'invalid maximum incoming size' => 'Ungültige max. ankommende Größe.',
 'invalid mtu input' => 'Ungültige MTU',
 'invalid netmask' => 'Ungültige Netzwerkmaske',
 'invalid port' => 'Ungültiger Port. Bitte gültige Portnummer eingeben.',
-'invalid port list' => 'Portlisten-Syntax lautet: port[,port]... wobei port in /etc/services vorkommt oder Nummer',
+'invalid port list' => 'Portlisten-Syntax lautet: port[,port]... wobei port in /etc/services enthalten ist, alternativ Portnummer',
 'invalid primary dns' => 'Ungültiger primärer DNS.',
 'invalid primary ntp' => 'Ungültiger primärer NTP.',
 'invalid secondary dns' => 'Ungültiger sekundärer DNS.',
 'invalid time period' => 'Unzulässiger Zeitabschnitt.',
 'invalid uplink speed' => 'Ungültige Uplink-Geschwindigkeit.',
 'invalid upstream proxy username or password setting' => 'Ungültige/r Remote-Proxy-Benutzername oder Passwort-Einstellung',
-'invalid users' => 'Liste mit Benutzern denen der Zugriff untersagt ist',
+'invalid users' => 'Liste mit Benutzern, denen der Zugriff untersagt ist',
 'invalid vpi vpci' => 'Ungültige VPI/VPCI-Einstellungen',
 'invalid wins address' => 'Ungültige WINS Server Addresse.',
 'invert' => 'Invertieren',
 'ip address' => 'IP-Adresse',
 'ip address in use' => 'IP-Adresse bereits vergeben',
-'ip address outside subnets' => 'IP-Adresse ausserhalb der(s) lokalen Subnetze(s)',
+'ip address outside subnets' => 'IP-Adresse außerhalb der(s) lokalen Subnetze(s)',
 'ip alias added' => 'Externer IP-Alias hinzugefügt',
 'ip alias changed' => 'Externer IP-Alias geändert',
 'ip alias removed' => 'Externer IP-Alias entfernt',
 'ipinfo' => 'IP-Info',
 'ipsec' => 'IPsec',
 'ipsec network' => 'IPsec-Netzwerke',
-'ipsec no connections' => 'Keine aktiven IPsec Verbindungen',
+'ipsec no connections' => 'Keine aktiven IPsec-Verbindungen',
 'iptable rules' => 'IPTable-Regeln',
 'iptmangles' => 'IPTable Mangles',
 'iptnats' => 'IPTable Network Address Translation',
 'lifetime' => 'Lebensdauer:',
 'line' => 'Leitung',
 'linkq' => 'Antwortzeit',
-'load printer' => 'Load Printer',
+'load printer' => 'Lade Drucker',
 'loaded modules' => 'Geladene Module:',
 'local hard disk' => 'Festplatte',
 'local master' => 'Local Master',
 'localkey' => 'Localkey',
 'localkeyfile' => 'Localkeyfile',
 'log' => 'Protokoll',
-'log enabled' => 'Log aktiviert',
-'log level' => 'Log Level',
+'log enabled' => 'Protokoll aktiviert',
+'log level' => 'Protokollierungslevel',
 'log lines per page' => 'Zeilen pro Seite',
 'log server address' => 'Syslog Server',
-'log settings' => 'Logdatei-Einstellungen',
-'log summaries' => 'Log Übersicht',
-'log summary' => 'Log Zusammenfassung',
+'log settings' => 'Protokolldatei-Einstellungen',
+'log summaries' => 'Protokollübersicht',
+'log summary' => 'Protokollzusammenfassung',
 'log var messages' => 'Einstellungen für /var/log/messages',
-'log view' => 'Log Anzeige',
+'log view' => 'Protokollanzeige',
 'log viewer' => 'Protokollansicht',
-'log viewing options' => 'Log Ansichts-Optionen',
-'log-options' => 'Logfile Optionen',
+'log viewing options' => 'Protokollansichtsoptionen',
+'log-options' => 'Protokolldateioptionen',
 'loged in at' => 'Angemeldet seit',
-'logging' => 'Logging',
+'logging' => 'Protokollierung',
 'logging server' => 'Protokollierungs-Server',
 'loginlogout' => 'Login/Logout',
-'logs' => 'Logdateien',
+'logs' => 'Protokolldateien',
 'lookup failed' => 'Reverse Lookup gescheitert',
 'loosedirectorychecking' => 'Loose directorychecking',
 'low' => 'Niedrig',
 'masquerading enabled' => 'NAT eingeschaltet',
 'max bandwith' => 'Maximale Bandbreite',
 'max incoming size' => 'Max. eingehende Größe (kB):',
-'max lease time' => 'Max. Haltezeit in min:',
+'max lease time' => 'Max. Haltezeit in min.:',
 'max outgoing size' => 'Max. abgehende Größe (kB):',
 'max reliability' => 'Maximale Zuverlässigkeit',
 'max renewal time' => 'Maximale Aktualisierungszeit',
 'maximum retries' => 'Maximale Wiederholversuche:',
 'may' => 'Mai',
 'mbmon display' => 'Anzeigen',
-'mbmon fan' => 'Fan Speed',
-'mbmon fan in' => 'Fan Speed in',
+'mbmon fan' => 'Lüftergeschwindigkeit',
+'mbmon fan in' => 'Lüftergeschwindigkeit in',
 'mbmon graphs' => 'mbmon-Diagramme',
 'mbmon label' => 'Label',
 'mbmon settings' => 'mbmongraph Einstellungen',
-'mbmon temp' => 'Temperature',
-'mbmon temp in' => 'Temperature in',
+'mbmon temp' => 'Temperatur',
+'mbmon temp in' => 'Temperatur in',
 'mbmon value' => 'Wert',
-'mbmon volt' => 'Voltage',
+'mbmon volt' => 'Spannung',
 'meaning' => 'Bedeutung',
 'media' => 'Laufwerke',
 'media information' => 'Laufwerksinformationen',
 'memory information' => 'Speicherinformationen',
 'memory usage per' => 'Speichernutzung pro',
 'messages' => 'Meldungen',
-'messages logging' => 'Logeinstellungen für /var/log/messages',
+'messages logging' => 'Protokolleinstellungen für /var/log/messages',
 'method' => 'Methode:',
 'min costs' => 'Minimale Kosten',
 'min delay' => 'Minimale Verzögerung',
 'no fritzdsl driver' => 'Kein Fritz!DSL-Treiber vorhanden. Bitte hochladen.',
 'no hardware random number generator' => 'Dieses System hat keine Entropiequelle.',
 'no information available' => 'Keine Informationen verfügbar.',
-'no log selected' => 'kein Log ausgewählt',
+'no log selected' => 'kein Protokoll ausgewählt',
 'no modem selected' => 'Kein Modem ausgewählt',
 'no set selected' => 'Es wurde kein Satz ausgewählt',
 'no time limit' => 'unbregenzte Zeit',
 'ok' => 'OK',
 'older' => 'Älter',
 'on' => 'on',
+'one year' => 'Ein Jahr',
 'online help en' => 'Online-Hilfe (auf Deutsch)',
 'only digits allowed in holdoff field' => 'Im Holdoff-Feld sind nur Ziffern erlaubt',
 'only digits allowed in max retries field' => 'Im Feld &quot;Maximale Wiederholversuche&quot; sind nur Ziffern erlaubt.',
 'openvpn disabled' => 'DEAKTIVIERT',
 'openvpn enabled' => 'AKTIVIERT',
 'openvpn fragment allowed with udp' => '"fragment" kann nur in Kombination mit dem UDP-Protokoll genutzt werden.',
-'openvpn log' => 'OpenVPN Log',
+'openvpn log' => 'OpenVPN Protokoll',
 'openvpn mssfix allowed with udp' => '"mssfix" kann nur in Kombination mit dem UDP-Protokoll genutzt werden.',
 'openvpn network' => 'OpenVPN-Netzwerke',
 'openvpn prefix local subnet' => 'Die Prefix-Notation wird nicht unterstützt. Bitte geben Sie eine Subnetzmaske beim lokalen Subnetz ein wie z.B. 255.255.255.0.',
 'optional data' => '3. Optionale Einstellungen',
 'options' => 'Optionen',
 'options fw' => 'Firewalloptionen',
-'optionsfw portlist hint' => 'Die Liste der Ports muss durch ein Komma getrennt werden (z.B. 137,138). Sie können maximal bis zu 15 Ports pro Protokoll angeben.',
-'optionsfw warning' => 'Verändern dieser Optionen bedingt einen Neustart der Firewall',
+'optionsfw portlist hint' => 'Die Liste der Ports muss durch Kommata getrennt werden (z.B. 137,138). Sie können maximal bis zu 15 Ports pro Protokoll angeben.',
+'optionsfw warning' => 'Verändern dieser Optionen erfordert einen Neustart der Firewall',
 'or' => 'oder',
 'orange' => 'ORANGE',
 'organization cant be empty' => 'Organisation darf nicht leer sein.',
 'outgoing firewall edit ip group' => 'IP Adressgruppen bearbeiten',
 'outgoing firewall edit mac group' => 'MAC Adressgruppen bearbeiten',
 'outgoing firewall group error' => 'Eine Gruppe mit dem selben Namen existiert bereits.',
-'outgoing firewall groups' => 'Firewall Gruppen',
+'outgoing firewall groups' => 'Firewallgruppen',
 'outgoing firewall ip groups' => 'Ausgehende Firewall IP Adressgruppen',
 'outgoing firewall mac groups' => 'Ausgehende Firewall MAC Adressgruppen',
-'outgoing firewall mode0' => 'In diesem Modus ist es allen Rechnern im Netzwerk uneingeschränkt möglich Verbindungen ins Internet aufzubauen.',
+'outgoing firewall mode0' => 'In diesem Modus ist es allen Rechnern im Netzwerk uneingeschränkt möglich, Verbindungen ins Internet aufzubauen.',
 'outgoing firewall mode1' => 'In diesem Modus werden nur Verbindungen nach den oben definierten Regeln zugelassen.',
 'outgoing firewall mode2' => 'In diesem Modus werden sämtliche Verbindungen erlaubt, bis auf die oben definierten Block-Regeln.',
 'outgoing firewall outgoing firewall reserved groupname' => 'Bitte einen anderen Gruppennamen verwenden, dieser ist ein reserviertes Wort.',
 'ovpn generating the root and host certificates' => 'Die Erzeugung der Root- und Host-Zertifikate kann lange Zeit dauern.',
 'ovpn ha' => 'Hash-Algorithmus',
 'ovpn hmac' => 'HMAC-Optionen',
-'ovpn log' => 'OVPN-Log',
+'ovpn log' => 'OVPN-Protokoll',
 'ovpn mgmt in root range' => 'Ein Port von 1024 oder höher ist erforderlich.',
 'ovpn mtu-disc' => 'Path MTU Discovery',
 'ovpn mtu-disc and mtu not 1500' => 'Path MTU Discovery benötigt eine MTU von 1500.',
 'ovpn on orange' => 'OpenVPN auf ORANGE:',
 'ovpn on red' => 'OpenVPN auf ROT:',
 'ovpn port in root range' => 'Ein Port von 1024 oder höher ist erforderlich.',
-'ovpn reneg sec' => 'Session Key Lifetime',
+'ovpn reneg sec' => 'Sitzungsschlüssellebensdauer',
 'ovpn routes push' => 'Routen (eine pro Zeile) z.b. 192.168.10.0/255.255.255.0 192.168.20.0/24',
 'ovpn routes push options' => 'Route push Optionen',
 'ovpn server status' => 'OpenVPN-Server-Status',
 'ovpn_processprioN' => 'Normal',
 'ovpn_processprioVD' => 'Sehr Tief',
 'ovpn_processprioVH' => 'Sehr Hoch',
-'ovpnstatus log' => 'OVPN-Status-Log',
-'ovpnsys log' => 'OVPN-System-Log',
+'ovpnstatus log' => 'OVPN-Status-Protokoll',
+'ovpnsys log' => 'OVPN-System-Protokoll',
 'p2p block' => 'P2P-Netzwerke',
 'p2p block save notice' => 'Bitte lesen Sie die Firewallregeln neu ein, damit die Änderungen aktiv werden.',
 'package failed to install' => 'Programmpaket konnte nicht installiert werden.',
 'pakfire ago' => 'her.',
 'pakfire available addons' => 'Verfügbare Addons:',
 'pakfire configuration' => 'Pakfire Konfiguration',
-'pakfire core update auto' => 'Core und Addon Updates automatisch installieren:',
+'pakfire core update auto' => 'Core- und Addon-Updates automatisch installieren:',
 'pakfire core update level' => 'Core-Update-Level',
 'pakfire health check' => 'Mirrors auf Erreichbarkeit prüfen (Ping):',
-'pakfire install description' => 'Wählen Sie ein oder mehrere Pakete zur Installation aus und drücken Sie auf das plus Symbol.',
+'pakfire install description' => 'Wählen Sie ein oder mehrere Pakete zur Installation aus und drücken Sie auf das plus-Symbol.',
 'pakfire install package' => 'Sie möchten folgende Pakete installieren: ',
 'pakfire installed addons' => 'Installierte Addons:',
 'pakfire last core list update' => 'Letztes Corelisten 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',
-'pakfire uninstall description' => 'Wählen Sie ein oder mehrere Pakete zur Deinstallation aus und drücken Sie auf das minus Symbol.',
+'pakfire uninstall description' => 'Wählen Sie ein oder mehrere Pakete zur Deinstallation aus und drücken Sie auf das minus-Symbol.',
 'pakfire uninstall package' => 'Sie möchten folgende Pakete deinstallieren: ',
 'pakfire update daily' => 'Täglich nach Updates suchen:',
 'pakfire updates' => 'Zur Verfügung stehende Updates:',
 'proxy cachemgr' => 'Cachemanager aktivieren',
 'proxy errmsg filedescriptors' => 'Ungültiger Anzahl Filedescriptoren',
 'proxy filedescriptors' => 'Anzahl Filedescriptoren',
-'proxy log viewer' => 'Ansicht Proxy-Log',
-'proxy logs' => 'Proxy-Logdateien',
+'proxy log viewer' => 'Ansicht Proxy-Protokoll',
+'proxy logs' => 'Proxy-Protokolldateien',
 'proxy no proxy extend' => 'oder geben Sie eine Liste von Zielen an, welche nicht über den Proxy angesprochen werden sollen',
 'proxy no proxy local' => 'Lokalen Proxy auf blauen/grünen Netzwerken verhindern',
 'proxy port' => 'Proxy-Port',
 'remote access' => 'Fernwartung',
 'remote announce' => 'Remote Announce',
 'remote browse sync' => 'Remote Browse Sync',
-'remote host/ip' => 'Remote Host/IP',
-'remote logging' => 'Remote logging',
-'remote subnet' => 'Remote Subnetz:',
-'remote subnet is invalid' => 'Remote Subnetz ist ungültig.',
+'remote host/ip' => 'Entfernte(r) Host/IP',
+'remote logging' => 'Entfernte Protokollierung',
+'remote subnet' => 'Entferntes Subnetz:',
+'remote subnet is invalid' => 'Entferntes Subnetz ist ungültig.',
 'removable device advice' => 'Stecken Sie ein Gerät an, aktualisieren Sie und binden Sie es vor der Benutzung ein. Melden Sie das Gerät vorm Entfernen ab.',
 'remove' => 'Löschen',
 'remove ca certificate' => 'CA-Zertifikat entfernen',
 'reset' => 'Zurücksetzen',
 'reset shares' => 'Freigaben zurücksetzen',
 'resetglobals' => 'Globale Einstellungen zurücksetzen',
-'resetpolicy' => 'Policy zurücksetzen',
+'resetpolicy' => 'Richtlinie zurücksetzen',
 'resetshares' => 'Shares zurücksetzen?',
 'resetting the vpn configuration will remove the root ca, the host certificate and all certificate based connections' => 'Das Löschen des X509 wird die Root-CA, die Host-Zertifikate und alle zertifikatsbasierten Verbindungen entfernen.',
 'restart' => 'Neustart',
 'select source net' => 'Auswahl Quell-Netz',
 'selecttraffic' => 'Trafficübersicht auswählen:',
 'send cr' => 'ISP verlangt Zeilenrücklaufzeichen:',
-'send email notification' => 'Aktiviert, Email Benachrichtigung senden',
+'send email notification' => 'Aktiviert, E-Mail Benachrichtigung senden',
 'send test mail' => 'Sende Testemail',
 'september' => 'September',
 'serial' => 'serielle',
 'stop ovpn server' => 'Stoppe OpenVPN-Server',
 'stopped' => 'ANGEHALTEN',
 'subject' => 'Betreff',
-'subject test' => 'Testemail',
+'subject test' => 'Test-E-Mail',
 'subject warn' => 'Warnung - Warnlevel erreicht',
 'subnet' => 'Subnet',
 'subnet is invalid' => 'Netzmaske ist ungültig',
 'system has hwrng' => 'Dieses System hat einen Hardware-Zufallszahlengenerator.',
 'system has rdrand' => 'Dieses System unterstützt Intel(R) RDRAND.',
 'system information' => 'Systeminformationen',
-'system log viewer' => 'Betrachter der System-Logdateien',
-'system logs' => 'System-Logdateien',
+'system log viewer' => 'Betrachter der Systemprotokolldateien',
+'system logs' => 'Systemprotokolldateien',
 'system status information' => 'System-Statusinformationen',
 'ta key' => 'TLS-Authentifizierungsschlüssel',
 'telephone not set' => 'Telefonnummer nicht angegeben.',
 'template' => 'Vorlage',
 'template warning' => 'Zur Einrichtung von QoS stehen Ihnen 2 Möglichkeiten zur Auswahl. Entweder Sie wählen speichern und erstellen Klassen und Regeln nach Ihren Wünschen, oder Sie wählen Vorlage, dann werden die Klassen und Regeln durch ein Template generiert.',
 'test' => 'test',
-'test email could not be sent' => 'Könnte Testemail nicht senden',
-'test email was sent' => 'Testemail wurde erfolgreich versand',
+'test email could not be sent' => 'Könnte Test-E-Mail nicht senden',
+'test email was sent' => 'Test-E-Mail wurde erfolgreich versand',
 'the following update was successfully installed' => 'Das folgende Update wurde erfolgreich installiert',
 'the statistics were last updated at' => 'Die Statistik wurde zuletzt aktualisiert am',
 'theme' => 'Style',
 'tor connected relays' => 'Verbundene Relays',
 'tor contact info' => 'Kontaktinformationen',
 'tor daemon' => 'Daemon',
-'tor directory port' => 'Directory-Port',
+'tor directory port' => 'Verzeichnis-Port',
 'tor enabled' => 'Tor einschalten',
 'tor errmsg invalid accounting limit' => 'Ungültiges Accounting-Limit',
-'tor errmsg invalid directory port' => 'Ungültiger Directory-Port',
+'tor errmsg invalid directory port' => 'Ungültiger Verzeichnis-Port',
 'tor errmsg invalid ip or mask' => 'Ungültiges IP-Subnetz',
 'tor errmsg invalid relay address' => 'Ungültige Relay-Adresse',
 'tor errmsg invalid relay name' => 'Ungültiger Relay-Nickname',
 'tor relay enabled' => 'Tor-Relay einschalten',
 'tor relay external address' => 'Externe Relay-Adresse',
 'tor relay fingerprint' => 'Relay-Fingerabdruck',
-'tor relay mode' => 'Relay-Modues',
+'tor relay mode' => 'Relay-Modus',
 'tor relay mode bridge' => 'Bridge',
 'tor relay mode exit' => 'Exit-Node',
 'tor relay mode private bridge' => 'private Bridge',
 'tor relay mode relay' => 'Nur Relay',
-'tor relay nickname' => 'Relay-Nickname',
+'tor relay nickname' => 'Relay-Spitzname',
 'tor relay port' => 'Relay-Port',
 'tor service' => 'Tor-Service',
 'tor socks port' => 'SOCKS-Port',
 'tor traffic read written' => 'Gesamter Traffic (empfangen/gesendet)',
 'tor use exit nodes' => 'Nur diese Exit-Nodes benutzen (eins pro Zeile)',
 'total connection time' => 'Verbindungszeit',
-'total hits for log section' => 'Gesamte Treffer für Log Sektion',
+'total hits for log section' => 'Gesamte Treffer für Protokollsektion',
 'traffic back' => 'Zurück',
 'traffic calc time' => 'Berechnungszeitpunkt',
 'traffic calc time bad' => 'Berechnungsintervall ist nicht gültig',
 'tripwirewarningkeys' => 'ACHTUNG - Sie löschen hiermit ihre bestehenden Schlüssel, ihre Konfiguration und Datenbank und legen alles neu an.',
 'tripwirewarningpolicy' => 'ACHTUNG - Ihr Policy wird neu erzeugt, anschließen wird die Datenbank neu initialisiert. Hierfür wird der Site-Key und Local-Key benötigt.',
 'tuesday' => 'Dienstag',
+'twelve hours' => '12 Stunden',
+'two weeks' => 'Zwei Wochen',
 'type' => 'Typ',
 'umount' => 'Abmelden',
 'umount removable media before to unplug' => 'Wechselmedien vor dem Entfernen unbedingt abmelden',
 'upload a certificate request' => 'Eine Zertifikatsanfrage hochladen:',
 'upload ca certificate' => 'CA-Zertifikat hochladen',
 'upload dh key' => 'Diffie-Hellman-Parameter hochladen',
-'upload file' => 'Datei zum hochladen',
+'upload file' => 'Datei zum Hochladen',
 'upload new ruleset' => 'Neuen Regelsatz hochladen',
 'upload p12 file' => 'PKCS12-Datei hochladen',
 'upload static key' => 'Statischen Schlüssel hochladen',
 'urlfilter filesize' => 'Größe',
 'urlfilter filter settings' => 'URL-Filter Einstellungen',
 'urlfilter fri' => 'F',
-'urlfilter friday' => 'Fre',
+'urlfilter friday' => 'Fr',
 'urlfilter from' => 'Von',
 'urlfilter hourly' => 'stündlich',
 'urlfilter import blacklist' => 'Blacklist importieren',
 'urlfilter invalid user error' => 'Ungültiger Benutzername',
 'urlfilter load blacklist' => 'Blacklist laden',
 'urlfilter local file redirection' => 'Lokale Dateiumleitung',
-'urlfilter log' => 'Urlfilter Log',
+'urlfilter log' => 'URL-Filter Protokoll',
 'urlfilter log summary' => 'Gesamtanzahl der URL-Filter-Treffer für',
-'urlfilter log viewer' => 'Ansicht URL-Filter-Log',
-'urlfilter logs' => 'URL-Filter-Logdateien',
+'urlfilter log viewer' => 'Ansicht URL-Filter-Protokoll',
+'urlfilter logs' => 'URL-Filter-Protokolldateien',
 'urlfilter maintenance' => 'URL-Filter Wartung',
 'urlfilter manage local file repository' => 'Lokale Dateiablage verwalten',
 'urlfilter manage repository' => 'Ablage verwalten',
 'urlfilter mode allow' => 'erlauben',
 'urlfilter mode block' => 'sperren',
 'urlfilter mon' => 'M',
-'urlfilter monday' => 'Mon',
+'urlfilter monday' => 'Mo',
 'urlfilter monthly' => 'monatlich',
 'urlfilter msg text 1' => 'Nachricht Zeile 1',
 'urlfilter msg text 2' => 'Nachricht Zeile 2',
 'urlfilter restore text' => 'Um eine vorher gesicherte Konfiguration wieder herzustellen, kann hier eine .tar.gz-Sicherungsdatei hochgeladen werden',
 'urlfilter safesearch' => 'Aktiviere SafeSearch',
 'urlfilter sat' => 'S',
-'urlfilter saturday' => 'Sam',
+'urlfilter saturday' => 'Sa',
 'urlfilter save and restart' => 'Speichern und Neustart',
 'urlfilter save schedule' => 'Updateeinstellungen speichern',
 'urlfilter select blacklist' => 'Vorhandene Blacklist auswählen',
 'urlfilter src' => 'Quelle',
 'urlfilter src error' => 'Quelle darf nicht leer sein',
 'urlfilter sun' => 'S',
-'urlfilter sunday' => 'Son',
+'urlfilter sunday' => 'So',
 'urlfilter tar error' => 'Konnte die Dateien nicht aus dem Archiv extrahieren',
 'urlfilter thu' => 'D',
-'urlfilter thursday' => 'Don',
+'urlfilter thursday' => 'Do',
 'urlfilter time' => 'Zeit',
 'urlfilter time quota' => 'Zeitkontingent',
 'urlfilter time space' => 'Zeitraum',
 'urlfilter timespace error' => 'Fehler bei der Angabe des Zeitraumes',
 'urlfilter to' => 'Bis',
 'urlfilter tue' => 'D',
-'urlfilter tuesday' => 'Die',
+'urlfilter tuesday' => 'Di',
 'urlfilter unfiltered clients' => 'Ungefilterte IP-Adressen',
 'urlfilter update information' => 'Eine aktualisierte Version steht zum Download bereit. Besuchen Sie <a href="http://www.urlfilter.net" target="_blank">http://www.urlfilter.net</a> für weitere Informationen.',
 'urlfilter update notification' => 'Update-Benachrichtigung!',
 'urlfilter username log' => 'Protokolliere Benutzername',
 'urlfilter web proxy service required' => 'Um den URL-Filter zu verwenden, muss der Web-Proxy-Dienst aktiviert sein',
 'urlfilter wed' => 'M',
-'urlfilter wednesday' => 'Mit',
+'urlfilter wednesday' => 'Mi',
 'urlfilter weekday error' => 'Es muss mindestens ein Tag ausgewählt werden',
 'urlfilter weekly' => 'wöchentlich',
 'urlfilter whitelist always allowed' => 'Erlaube angepasste Whitelist für gesperrte Clients',
 'used memory' => 'Genutzter Speicher',
 'used swap' => 'Genutzter Swap',
 'user' => 'Benutzer',
-'user log' => 'Benutzer Log',
-'user proxy logs' => 'Benutzer Proxy Log',
+'user log' => 'Benutzerprotokoll',
+'user proxy logs' => 'Benutzer Proxy Protokoll',
 'username' => 'Benutzername:',
 'username not set' => 'Benutzername nicht angegeben.',
 'users department' => 'Abteilung des Benutzers',
-'users email' => 'E-mail-Adresse des Benutzers',
+'users email' => 'E-Mail-Adresse des Benutzers',
 'users fullname or system hostname' => 'Voller Name oder System-Hostname des Benutzers',
 'valid root certificate already exists' => 'Ein gültiges Root-Zertifikat existiert bereits.',
 'valid till' => 'Gültig bis',
 'vci number' => 'VCI-Nummer:',
 'vendor' => 'Hersteller',
-'view log' => 'Log anzeigen',
+'view log' => 'Protokoll anzeigen',
 'virtual address' => 'Virtuelle Addresse',
 'virtual private networking' => 'Virtuelles Privates Netzwerk',
 'visible in browselist' => 'Sichtbar in der Verzeichnisliste',
 'vpn auth-dn' => 'Peer wird identifiziert durch entweder ein IPV4_ADDR, FQDN, USER_FQDN oder DER_ASN1_DN string in Remote ID Feld',
 'vpn broken' => 'Gebrochen',
 'vpn connecting' => 'VERBINDUNGSAUFBAU',
-'vpn delayed start' => 'Verzögerung bevor VPN gestartet wird (Sekunden)',
+'vpn delayed start' => 'Verzögerung, bevor VPN gestartet wird (in Sekunden)',
 'vpn delayed start help' => 'Falls notwendig, kann diese Verzögerung dazu verwendet werden, um Dynamic-DNS-Updates ordnungsgemäß anzuwenden. 60 ist ein gängiger Wert, wenn ROT (RED) eine dynamische IP Adresse ist.',
 'vpn incompatible use of defaultroute' => 'Hostname=%defaultroute nicht zulässig',
 'vpn keyexchange' => 'Schlüsseltausch',
 'vpn on blue' => 'VPN auf BLAU',
 'vpn on green' => 'VPN auf GRÜN',
 'vpn on orange' => 'VPN auf ORANGE',
-'vpn on-demand' => 'ON DEMAND',
+'vpn on-demand' => 'BEI BEDARF',
 'vpn payload compression' => 'Datennutzlast-Kompression aushandeln',
 'vpn red name' => 'Öffentliche IP oder FQDN für das rote Interface oder <%defaultroute>',
 'vpn remote id' => 'Remote ID',
 'vpn start action' => 'Startaktion',
-'vpn start action route' => 'On Demand',
+'vpn start action route' => 'Bei Bedarf',
 'vpn start action start' => 'Immer An',
 'vpn statistic n2n' => 'OpenVPN-Netz-zu-Netz-Statistik',
 'vpn statistic rw' => 'OpenVPN-Roadwarrior-Statistik',
 'wlan client wpa mode ccmp tkip' => 'CCMP-TKIP',
 'wlan client wpa mode tkip tkip' => 'TKIP-TKIP',
 'wlan clients' => 'WLAN-Clients',
-'wlanap access point' => 'Access Point',
+'wlanap' => 'Access Point',
 'wlanap channel' => 'Kanal',
+'wlanap configuration' => 'Access Point Konfiguration',
 'wlanap country' => 'Ländercode',
 'wlanap debugging' => 'Debugging',
 'wlanap del interface' => 'Ausgewähltes Interface zurücksetzen?',
 'yes' => 'Ja',
 'you can only define one roadwarrior connection when using pre-shared key authentication' => 'Sie können nur eine Roadwarrior-Verbindung definieren, wenn die Pre-shared-Schlüsselauthentifizierung verwendet wird.<br/>Entweder haben Sie bereits eine Roadwarrior-Verbindung mit Pre-shared-Schlüsselauthentifizierung, oder Sie versuchen gerade, eine hinzuzufügen.',
 'your department' => 'Ihre Abteilung',
-'your e-mail' => 'Ihre E-mail Adresse',
+'your e-mail' => 'Ihre E-Mail-Adresse',
 );
 
 #EOF
index b3aee5a2b749c1ee73e8080b6c834fe983913d0d..4efff6e65fcd25553e421779c05a1217850d78c9 100644 (file)
@@ -1,12 +1,67 @@
 %tr = ( 
 %tr,
 
+'24 hours' => '24 Hours',
 'Act as' => 'Act as:',
 'Add Level7 rule' => 'Add Level7 rule',
 'Add Port Rule' => 'Add port rule',
 'Add Rule' => 'Add rule',
 'Add a route' => 'Add a route',
 'Async logging enabled' => 'Enable asynchronous writing of the syslog file',
+'Captive 1day' => '1 day',
+'Captive 1month' => '1 month',
+'Captive 1week' => '1 week',
+'Captive ACTIVATE' => 'ACTIVATE',
+'Captive GAIN ACCESS' => 'GAIN ACCESS',
+'Captive WiFi coupon' => 'WiFi Coupon',
+'Captive activate' => 'Activate',
+'Captive activated' => 'Activated',
+'Captive active on' => 'Activated on',
+'Captive agree tac' => 'I agree with the terms & conditions below.',
+'Captive auth_lic' => 'License',
+'Captive auth_vou' => 'Voucher',
+'Captive authentication' => 'Type of Access',
+'Captive brand color' => 'Brand Color',
+'Captive branding' => 'Branding',
+'Captive client session expiry time' => 'Session Expiry Time',
+'Captive config' => 'Settings',
+'Captive coupon' => 'Coupon',
+'Captive err doublevoucher' => 'A coupon with this code already exists',
+'Captive expire' => 'Expire',
+'Captive expiry time' => 'Expiry Time',
+'Captive export coupons' => 'Export Coupons',
+'Captive generate coupons' => 'Generate Coupons',
+'Captive generated coupon no' => 'Number of coupons',
+'Captive heading terms' => 'Terms &amp; Conditions',
+'Captive heading voucher' => 'Coupon or Access Code',
+'Captive invalid coupon' => 'You entered an invalid coupon code. Please try again.',
+'Captive invalid logosize' => 'The uploaded image file does not meet the required resolution of at least 1280x400 but not larger than 1920x800 pixels',
+'Captive invalid_voucher' => 'Invalid code. Please try again',
+'Captive ip' => 'IP Address',
+'Captive issued coupons' => 'Issued Coupons',
+'Captive logo uploaded' => 'Logo uploaded',
+'Captive logo_set' => 'Current Logo',
+'Captive mac' => 'MAC Address',
+'Captive menu' => 'Captive Portal',
+'Captive noexpiretime' => 'No valid connection time range given',
+'Captive nolimit' => 'unlimited',
+'Captive nr' => 'Number',
+'Captive please accept the terms and conditions' => 'Please accept the terms &amp; conditions',
+'Captive please enter a coupon code' => 'Please enter a coupon code',
+'Captive portal' => 'IPFire Captive Portal',
+'Captive portal coupons' => 'Captive Portal Coupons',
+'Captive terms' => 'Terms &amp; Conditions',
+'Captive terms short' => 'T&Cs',
+'Captive time' => 'Access time post activation (hours)',
+'Captive title' => 'Title of Login Page',
+'Captive upload logo' => 'Upload Logo',
+'Captive upload logo recommendations' => '(PNG or JPEG, recommended 1280x720 pixels)',
+'Captive valid for' => 'Valid for',
+'Captive voactive' => 'Active Coupons',
+'Captive voucher' => 'Coupon',
+'Captive vouchervalid' => 'Allowed time for this coupon',
+'Captive vout' => 'Issued Vouchers',
+'Captive wrong ext' => 'Uploaded file has wrong filetype',
 'Choose Rule' => 'Choose <u>one</u> of the following rules.',
 'Class' => 'Class',
 'Class was deleted' => 'with potential subclasses was deleted',
 'day after' => 'Day after',
 'day before' => 'Day before',
 'day-graph' => 'Day',
-'days' => 'days.',
+'days' => 'Days',
 'dbfile' => 'Dbfile',
 'ddns help dnsmadeeasy' => 'In the field for hostname enter your ID (or a list of IDs seperated by;)',
 'ddns help freedns' => 'In the fied username enter your connect string',
 'edit share' => 'Edit share',
 'editor' => 'Editor',
 'eg' => 'e.g.:',
+'eight hours' => '8 Hours',
 'email config' => 'Configuration',
 'email empty field' => 'Empty field',
 'email error' => 'ERROR: Test mail could not be sent',
 'forwarding rule added' => 'Forwarding rule added; restarting forwarder',
 'forwarding rule removed' => 'Forwarding rule removed; restarting forwarder',
 'forwarding rule updated' => 'Forwarding rule updated; restarting forwarder',
+'four hours' => '4 Hours',
 'free' => 'Free',
 'free memory' => 'Free Memory    ',
 'free swap' => 'Free Swap',
 'hosts config changed' => 'Hosts config changed',
 'hour' => 'Hour',
 'hour-graph' => 'Hour',
-'hours' => 'hours',
+'hours' => 'Hours',
 'hours2' => 'Hours',
 'ibod for dual isdn only' => 'iBOD can only be used with Dual ISDN.',
 'icmp selected but no type' => 'ICMP selected for protocol, but no ICMP type specified.',
 'monthly volume' => 'Monthly volume',
 'monthly volume start day' => 'First day of monthly period',
 'monthly volume start day short' => 'First day',
-'months' => 'months',
+'months' => 'Months',
 'more' => 'more',
 'most preferred' => 'most preferred',
 'mount' => 'Mount',
 'ok' => 'OK',
 'older' => 'Older',
 'on' => 'on',
+'one hour' => 'One Hour',
+'one month' => 'One Month',
+'one week' => 'One Week',
+'one year' => 'One Year',
 'online help en' => 'Online help (in english)',
 'only digits allowed in holdoff field' => 'Only digits allowed in holdoff field',
 'only digits allowed in max retries field' => 'Only digits allowed in max retries field.',
 'tripwirewarningkeys' => 'WARNING - This will erase your current keys, config, and database and generate them new.',
 'tripwirewarningpolicy' => 'WARNING - Your policy will be rebuild, after that your database will be reinitalised. Therefor the site-key and the local-key are neeeded.',
 'tuesday' => 'Tuesday',
+'twelve hours' => '12 Hours',
+'two weeks' => 'Two Weeks',
 'type' => 'Type',
 'umount' => 'Umount',
 'umount removable media before to unplug' => 'Umount removable media before unplugging the device',
 'unix password sync' => 'Unix Password Sync',
 'unix shell' => 'UNIX Shell',
 'unknown' => 'UNKNOWN',
+'unlimited' => 'Unlimited',
 'unnamed' => 'Unnamed',
 'update' => 'Update',
 'update accelerator' => 'Update Accelerator',
 'week' => 'Week',
 'week-graph' => 'Week',
 'weekly firewallhits' => 'weekly firewallhits',
-'weeks' => 'weeks',
+'weeks' => 'Weeks',
 'wildcards' => 'Wildcards',
 'wins server' => 'Wins Server',
 'wins support' => 'Wins Support',
 'wlan client wpa mode ccmp tkip' => 'CCMP-TKIP',
 'wlan client wpa mode tkip tkip' => 'TKIP-TKIP',
 'wlan clients' => 'Wireless clients',
-'wlanap access point' => 'Access Point',
+'wlanap' => 'Access Point',
 'wlanap channel' => 'Channel',
+'wlanap configuration' => 'Access Point Configuration',
 'wlanap country' => 'Country Code',
 'wlanap debugging' => 'Debugging',
 'wlanap del interface' => 'Remove selected interface?',
index d7d2a24a18a82f10ee5fde802ef4b6a69b130ea7..1077f25545e42421650803b9ef33166c120eb248 100644 (file)
@@ -44,8 +44,8 @@ endif
 # URLs that are common sources of downloads.  If you're having trouble with
 # a site you should change its URL to that of a suitable mirror site.
 #
-URL_IPFIRE  = http://source.ipfire.org/source-2.x
-URL_TOOLCHAIN = http://source.ipfire.org/toolchains
+URL_IPFIRE  = https://source.ipfire.org/source-2.x
+URL_TOOLCHAIN = https://source.ipfire.org/toolchains
 URL_SOURCE = git.ipfire.org:/pub/sources/source-2.x
 
 # Don't change this; it will be overridden by other makefiles where necessary.
@@ -204,7 +204,7 @@ define PAK
        tar xf /install/packages/package/files.tmp -C /install/packages/package/tmp/ \
                -p --numeric-owner
        rm -f /install/packages/package/files.tmp
-       cd /install/packages/package/tmp/ && tar -c -p --numeric-owner -J -f /install/packages/package/files.tar.xz *           
+       cd /install/packages/package/tmp/ && XZ_OPT=-T0 tar -c -p --numeric-owner -J -f /install/packages/package/files.tar.xz *
        rm -r /install/packages/package/tmp
        -cat /install/packages/package/ROOTFILES | grep -v "#" > /install/packages/package/ROOTFILES.tmp
        mv /install/packages/package/ROOTFILES.tmp /install/packages/package/ROOTFILES
index 57c344718ae51aadbbf77eb40070c7053d97f1fa..4276a8880a6dcfc012c43d9d389d9bd38438f015 100644 (file)
@@ -1,7 +1,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007-2014   IPFire Team  <info@ipfire.org>                    #
+# Copyright (C) 2007-2017   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        #
 
 include Config
 
-VER        = 2.2.29
+VER        = 2.4.28
 
 THISAPP    = httpd-$(VER)
 DL_FILE    = $(THISAPP).tar.bz2
 DL_FROM    = $(URL_IPFIRE)
+
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 
 TARGET     = $(DIR_INFO)/$(THISAPP)
 
+DEPS       = "aprutil pcre"
+
 ###############################################################################
 # Top-level Rules
 ###############################################################################
 
-objects = $(DL_FILE) \
-       httpd-2.2.2-config-1.patch
+objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-httpd-2.2.2-config-1.patch = $(DL_FROM)/httpd-2.2.2-config-1.patch
 
-$(DL_FILE)_MD5 = 579342fdeaa7b8b68d17fee91f8fab6e
-httpd-2.2.2-config-1.patch_MD5 = e02a3ec5925eb9e111400b9aa229f822
+$(DL_FILE)_MD5 = 49007ffe8e37a0834255b279810edf24
 
 install : $(TARGET)
 
@@ -75,8 +75,6 @@ $(subst %,%_MD5,$(objects)) :
 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @$(PREBUILD)
        @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar jxf $(DIR_DL)/$(DL_FILE)
-       cd $(DIR_APP) && patch -Np1 -i $(DIR_DL)/httpd-2.2.2-config-1.patch
-
        ### Add IPFire's layout, too
        echo "# IPFire layout" >> $(DIR_APP)/config.layout
        echo "<Layout IPFire>" >> $(DIR_APP)/config.layout
@@ -103,18 +101,22 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        echo "</Layout>" >> $(DIR_APP)/config.layout
 
        cd $(DIR_APP) && ./configure --enable-layout=IPFire \
-                               --enable-ssl --enable-mods-shared=all --enable-proxy
+                               --enable-ssl --enable-mods-shared=all --enable-proxy --with-mpm=event
        cd $(DIR_APP) && make $(MAKETUNING)
        cd $(DIR_APP) && make install
        chown -v root:root /usr/lib/apache/httpd.exp \
-           /usr/sbin/{apxs,apachectl,dbmmanage,envvars{,-std}} \
-           /usr/share/man/man1/{dbmmanage,ht{dbm,digest,passwd,txt2dbm}}.1 \
-           /usr/share/man/man8/{ab,apachectl,apxs,htcacheclean,httpd}.8 \
-           /usr/share/man/man8/{logresolve,rotatelogs,suexec}.8
+           /usr/bin/{apxs,dbmmanage} \
+           /usr/sbin/apachectl \
+           /usr/share/man/man1/{ab,apxs,dbmmanage,ht{dbm,digest,passwd,txt2dbm},logresolve}.1 \
+           /usr/share/man/man8/{apachectl,htcacheclean,httpd}.8 \
+           /usr/share/man/man8/{rotatelogs,suexec}.8
 
        # Install apache config
        cp -rf $(DIR_CONF)/httpd/* /etc/httpd/conf
        ln -sf $(CONFIG_ROOT)/main/hostname.conf /etc/httpd/conf/
 
+       # Create captive logging directory
+       -mkdir -pv /var/log/httpd/captive
+
        @rm -rf $(DIR_APP)
        @$(POSTBUILD)
diff --git a/lfs/apr b/lfs/apr
new file mode 100644 (file)
index 0000000..6f667cf
--- /dev/null
+++ b/lfs/apr
@@ -0,0 +1,82 @@
+###############################################################################
+#                                                                             #
+# IPFire.org - A linux based firewall                                         #
+# Copyright (C) 2007-2014   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        #
+# 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.6.2
+
+THISAPP    = apr-$(VER)
+DL_FILE    = $(THISAPP).tar.bz2
+DL_FROM    = http://archive.apache.org/dist/apr
+DIR_APP    = $(DIR_SRC)/$(THISAPP)
+
+TARGET     = $(DIR_INFO)/$(THISAPP)
+
+###############################################################################
+# Top-level Rules
+###############################################################################
+
+objects = $(DL_FILE)
+
+$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
+
+$(DL_FILE)_MD5 = e81a851967c79b5ce9bfbc909e4bf735
+
+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 jxf $(DIR_DL)/$(DL_FILE)
+
+       cd $(DIR_APP) && ./configure --prefix=/usr \
+                               --disable-static --with-installbuilddir=/usr/share/apr-1/build
+       cd $(DIR_APP) && make $(MAKETUNING)
+       cd $(DIR_APP) && make install
+
+       @rm -rf $(DIR_APP)
+       @$(POSTBUILD)
diff --git a/lfs/aprutil b/lfs/aprutil
new file mode 100644 (file)
index 0000000..c2f8084
--- /dev/null
@@ -0,0 +1,84 @@
+###############################################################################
+#                                                                             #
+# IPFire.org - A linux based firewall                                         #
+# Copyright (C) 2007-2014   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        #
+# 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.6.0
+
+THISAPP    = apr-util-$(VER)
+DL_FILE    = $(THISAPP).tar.bz2
+DL_FROM    = http://archive.apache.org/dist/apr
+DIR_APP    = $(DIR_SRC)/$(THISAPP)
+
+TARGET     = $(DIR_INFO)/$(THISAPP)
+
+DEPS       = "apr"
+
+###############################################################################
+# Top-level Rules
+###############################################################################
+
+objects = $(DL_FILE)
+
+$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
+
+$(DL_FILE)_MD5 = 069a9a980776acab05212c5f37ef8368
+
+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 jxf $(DIR_DL)/$(DL_FILE)
+
+       cd $(DIR_APP) && ./configure --prefix=/usr \
+                               --with-apr=/usr --with-gdbm=/usr --with-openssl=/usr --with-crypto --with-expat=/usr
+       cd $(DIR_APP) && make $(MAKETUNING)
+       cd $(DIR_APP) && make install
+
+       @rm -rf $(DIR_APP)
+       @$(POSTBUILD)
index 1269e415597209142b1041e2269803541367f049..2ad1ebd64063a2aa85d3288fdb3d9cd2bbdbf0e8 100644 (file)
--- a/lfs/bind
+++ b/lfs/bind
@@ -25,7 +25,7 @@
 
 include Config
 
-VER        = 9.11.1
+VER        = 9.11.2
 
 THISAPP    = bind-$(VER)
 DL_FILE    = $(THISAPP).tar.gz
@@ -43,7 +43,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = c384ab071d902bac13487c1268e5a32f
+$(DL_FILE)_MD5 = efca7e5a63a07efba264da9be2fbb57f
 
 install : $(TARGET)
 
diff --git a/lfs/bootstrap b/lfs/bootstrap
new file mode 100644 (file)
index 0000000..15e882e
--- /dev/null
@@ -0,0 +1,79 @@
+###############################################################################
+#                                                                             #
+# IPFire.org - A linux based firewall                                         #
+# Copyright (C) 2007-2016 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        #
+# 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        = 4.0.0-alpha.6
+
+THISAPP    = bootstrap-$(VER)
+DL_FILE    = $(THISAPP)-dist.zip
+DL_FROM    = $(URL_IPFIRE)
+DIR_APP    = $(DIR_SRC)/$(THISAPP)-dist
+TARGET     = $(DIR_INFO)/$(THISAPP)
+
+###############################################################################
+# Top-level Rules
+###############################################################################
+
+objects = $(DL_FILE)
+
+$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
+
+$(DL_FILE)_MD5 = 7fed4691d4d7ca19820009dad86e1aef
+
+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) && unzip $(DIR_DL)/$(DL_FILE)
+
+       -mkdir -pv /usr/share/bootstrap/{css,js}
+       cd $(DIR_APP) && cp -vf css/* /usr/share/bootstrap/css
+       cd $(DIR_APP) && cp -vf js/*  /usr/share/bootstrap/js
+
+       @rm -rf $(DIR_APP)
+       @$(POSTBUILD)
index f44e7b40ebb0301f5d83429f47e7454db5ecf947..d0e967d229ee562127b2df1e52268ffb2128ba59 100644 (file)
--- a/lfs/cacti
+++ b/lfs/cacti
@@ -32,7 +32,7 @@ DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
 PROG       = cacti
-PAK_VER    = 5
+PAK_VER    = 6
 
 DEPS       = "netsnmpd mysql"
 
index 58e754f87b9db39c828994f100fcea7bb7dd1684..7a7fff166d752c051e76e22477858314cb9fd2fb 100644 (file)
--- a/lfs/cdrom
+++ b/lfs/cdrom
@@ -32,9 +32,12 @@ TARGET     = $(DIR_INFO)/$(THISAPP)
 ifeq "$(BUILD_PLATFORM)" "arm"
        TAR_OPTIONS =
 else
-       TAR_OPTIONS = --lzma
+       TAR_OPTIONS = --xz
 endif
 
+# Enable multi-threaded compression for LZMA
+export XZ_OPT = --threads=0
+
 ###############################################################################
 # Top-level Rules
 ###############################################################################
index 760505e2c2e29f4988fd818925dcf07de40b7a93..ad02996cfd036d376ac016b2048a783125b29b16 100644 (file)
@@ -50,7 +50,7 @@ $(TARGET) :
        @$(PREBUILD)
 
        # Create all directories
-       for i in addon-lang auth backup ca certs connscheduler crls ddns dhcp dhcpc dns dnsforward \
+       for i in addon-lang auth backup ca captive certs connscheduler crls ddns dhcp dhcpc dns dnsforward \
                        ethernet extrahd/bin fwlogs fwhosts firewall isdn key langs logging mac main \
                        menu.d modem nfs optionsfw \
                        ovpn patches pakfire portfw ppp private proxy/advanced/cre \
@@ -62,7 +62,7 @@ $(TARGET) :
 
        # Touch empty files
        for i in auth/users backup/include.user backup/exclude.user \
-           certs/index.txt ddns/config ddns/noipsettings ddns/settings ddns/ipcache dhcp/settings \
+           captive/settings captive/agb.txt captive/clients captive/voucher_out certs/index.txt ddns/config ddns/noipsettings ddns/settings ddns/ipcache dhcp/settings \
            dhcp/fixleases dhcp/advoptions dhcp/dhcpd.conf.local dns/settings 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 \
index 3d7efa5913e60c7f61c0948f95fbab79356940f1..14890cbba135b0877f8ee2c6bb6b4ef2f63b622b 100644 (file)
--- a/lfs/ddns
+++ b/lfs/ddns
@@ -28,7 +28,7 @@ VER        = 010
 
 THISAPP    = ddns-$(VER)
 DL_FILE    = $(THISAPP).tar.xz
-DL_FROM    = http://source.ipfire.org/releases/ddns/
+DL_FROM    = https://source.ipfire.org/releases/ddns/
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
 
index 55a78455c04b1ab5e708ea295deffb5999051a26..67d4cba452d7d0843e1ff90477c803a8549a6119 100644 (file)
@@ -28,7 +28,7 @@ VER        = 2.1.11
 
 THISAPP    = fireinfo-v$(VER)
 DL_FILE    = $(THISAPP).tar.gz
-DL_FROM    = http://source.ipfire.org/releases/fireinfo/
+DL_FROM    = https://source.ipfire.org/releases/fireinfo/
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
 
index 8ed7f63756f4d3924a83289f24deaf5b4629bc65..a75d711696af0f627613ca34107c62ee586976f1 100644 (file)
@@ -137,7 +137,7 @@ endif
 
        # Install IPFire
 ifneq "$(BUILD_PLATFORM)" "arm"
-       tar -x --lzma -C $(MNThdd)/ -f /install/cdrom/distro.img
+       tar -x --xz -C $(MNThdd)/ -f /install/cdrom/distro.img
 else
        tar -x -C $(MNThdd)/ -f /install/cdrom/distro.img
 endif
index 1a6fadfebe2a810125a7fe23951963e160cf9762..360594fe67f0e86e3835b89730d46cbaaf8f7099 100644 (file)
@@ -1,7 +1,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007-2016  IPFire Team <info@ipfire.org>                      #
+# Copyright (C) 2007-2017  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.5.11
+VER        = 3.5.15
 
 THISAPP    = gnutls-$(VER)
 DL_FILE    = $(THISAPP).tar.xz
@@ -40,7 +40,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = a3ff8cf5ca7522e3ba14f487e6326e11
+$(DL_FILE)_MD5 = bcdcbc65c50a7499617ad9f4d0058de9
 
 install : $(TARGET)
 
index 6c7dc4de69e7de078f45cc30fbb00c96f0b55ee5..c26131eaa6873b513117126ec748561fdf45a46e 100644 (file)
@@ -1,7 +1,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007-2015  IPFire Team  <info@ipfire.org>                     #
+# Copyright (C) 2007-2017  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        = 9.50
+VER        = 9.52
 
 THISAPP    = hdparm-$(VER)
 DL_FILE    = $(THISAPP).tar.gz
@@ -40,7 +40,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = d380062ad6c4b40076736efbb640f1f5
+$(DL_FILE)_MD5 = 410539d0bf3cc247181594581edbfb53
 
 install : $(TARGET)
 
index 1a2436caa4d10178b68211b787d12faf0bf93147..3561c786e5d33b44948ca92e3d841307cf3ef21f 100644 (file)
@@ -1,7 +1,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007-2016  IPFire Team  <info@ipfire.org>                     #
+# Copyright (C) 2007-2017  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        = 2.5
+VER        = 2.6
 
 THISAPP    = hostapd-$(VER)
 DL_FILE    = $(THISAPP).tar.gz
@@ -32,7 +32,7 @@ DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
 PROG       = hostapd
-PAK_VER    = 37
+PAK_VER    = 40
 
 DEPS       = ""
 
@@ -44,7 +44,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = 69f9cec3f76d74f402864a43e4f8624f
+$(DL_FILE)_MD5 = eaa56dce9bd8f1d195eb62596eab34c7
 
 install : $(TARGET)
 
@@ -54,7 +54,7 @@ download :$(patsubst %,$(DIR_DL)/%,$(objects))
 
 md5 : $(subst %,%_MD5,$(objects))
 
-dist: 
+dist:
        @$(PAK)
 
 ###############################################################################
@@ -77,6 +77,16 @@ $(subst %,%_MD5,$(objects)) :
 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @$(PREBUILD)
        @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
+
+       # Security Patches https://w1.fi/security/2017-1/wpa-packet-number-reuse-with-replayed-messages.txt
+       cd $(DIR_APP) && patch -p1 < $(DIR_SRC)/src/patches/wpa_supplicant/rebased-v2.6-0001-hostapd-Avoid-key-reinstallation-in-FT-handshake.patch
+       cd $(DIR_APP) && patch -p1 < $(DIR_SRC)/src/patches/wpa_supplicant/rebased-v2.6-0002-Prevent-reinstallation-of-an-already-in-use-group-ke.patch
+       cd $(DIR_APP) && patch -p1 < $(DIR_SRC)/src/patches/wpa_supplicant/rebased-v2.6-0003-Extend-protection-of-GTK-IGTK-reinstallation-of-WNM-.patch
+       cd $(DIR_APP) && patch -p1 < $(DIR_SRC)/src/patches/wpa_supplicant/rebased-v2.6-0004-Prevent-installation-of-an-all-zero-TK.patch
+       cd $(DIR_APP) && patch -p1 < $(DIR_SRC)/src/patches/wpa_supplicant/rebased-v2.6-0005-Fix-PTK-rekeying-to-generate-a-new-ANonce.patch
+       cd $(DIR_APP) && patch -p1 < $(DIR_SRC)/src/patches/wpa_supplicant/rebased-v2.6-0006-TDLS-Reject-TPK-TK-reconfiguration.patch
+       cd $(DIR_APP) && patch -p1 < $(DIR_SRC)/src/patches/wpa_supplicant/rebased-v2.6-0008-FT-Do-not-allow-multiple-Reassociation-Response-fram.patch
+
        cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/hostapd-2.3_increase_EAPOL-timeouts.patch
        cd $(DIR_APP)/hostapd && cp $(DIR_SRC)/config/hostapd/config ./.config
        cd $(DIR_APP)/hostapd && sed -e "s@/usr/local@/usr@g" -i Makefile
index ab562f24c94ff378a75f6ecea19a105b1fe89322..5d8d5a16f647127802997b5120a5313818d3aea6 100644 (file)
@@ -33,7 +33,7 @@ DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
 PROG       = icinga
-PAK_VER    = 1
+PAK_VER    = 2
 
 DEPS       = ""
 
diff --git a/lfs/iftop b/lfs/iftop
new file mode 100644 (file)
index 0000000..4353b40
--- /dev/null
+++ b/lfs/iftop
@@ -0,0 +1,87 @@
+###############################################################################
+#                                                                             #
+# IPFire.org - A linux based firewall                                         #
+# Copyright (C) 2017  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        #
+# 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.0pre4
+
+THISAPP    = iftop-$(VER)
+DL_FILE    = $(THISAPP).tar.gz
+DL_FROM    = $(URL_IPFIRE)
+DIR_APP    = $(DIR_SRC)/$(THISAPP)
+TARGET     = $(DIR_INFO)/$(THISAPP)
+PROG       = iftop
+PAK_VER    = 2
+
+DEPS       = ""
+
+###############################################################################
+# Top-level Rules
+###############################################################################
+
+objects = $(DL_FILE)
+
+$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
+
+$(DL_FILE)_MD5 = 7e6decb4958e8a4890cccac335239f24
+
+install : $(TARGET)
+
+check : $(patsubst %,$(DIR_CHK)/%,$(objects))
+
+download :$(patsubst %,$(DIR_DL)/%,$(objects))
+
+md5 : $(subst %,%_MD5,$(objects))
+
+dist: 
+       @$(PAK)
+
+###############################################################################
+# 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) && ./configure --prefix=/usr
+
+       cd $(DIR_APP) && make $(MAKETUNING)
+       cd $(DIR_APP) && make install
+
+       @rm -rf $(DIR_APP)
+       @$(POSTBUILD)
+
index 347d90e70bab6158e7571c7ea6a2c1c38243ca8f..790ac06df2040e11ab5e743c401bd4741dab5174 100644 (file)
@@ -59,6 +59,7 @@ $(TARGET) :
                --with-distro-name="$(NAME)" \
                --with-distro-sname="$(SNAME)" \
                --with-distro-slogan="$(SLOGAN)" \
+               --with-distro-version="$(VERSION)-core$(CORE)" \
                --with-config-root="$(CONFIG_ROOT)" \
                --with-download-url="$(DOWNLOAD_URL)"
 
index 984c044c0429fe617d139e9b419e82302a714ce5..a2607cdeffabea5c51859e12f242986e1d1ea23b 100644 (file)
 
 include Config
 
-VER        = v1.1
-PXE_VER    = 300a371
+VER        = v2.0
+PXE_VER    = 1b67a05
 
 THISAPP    = ipfire-netboot-$(VER)
 DL_FILE    = $(THISAPP).tar.gz
-DL_FROM    = http://source.ipfire.org/releases/ipfire-netboot/
+DL_FROM    = https://source.ipfire.org/releases/ipfire-netboot/
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
 SUP_ARCH   = x86_64 i586
@@ -43,8 +43,8 @@ objects = $(DL_FILE) ipxe-$(PXE_VER).tar.gz
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 ipxe-$(PXE_VER).tar.gz = $(URL_IPFIRE)/ipxe-$(PXE_VER).tar.gz
 
-$(DL_FILE)_MD5 = 0dccbcfbc1eafb9d510bd15935b87ef6
-ipxe-$(PXE_VER).tar.gz_MD5 = 8a17fb4d6866214feb28cca55630b85f
+$(DL_FILE)_MD5 = a1f78e4b92457ecefb97d557b1b7a48e
+ipxe-$(PXE_VER).tar.gz_MD5 = 300fe0e096e58bfb4318bc39b63f9a88
 
 install : $(TARGET)
 
index 5d5572c9996ffc00a3b8e347ba3268b10f47cac7..997bc063bf79275fdd224f0c497fe9e27f7580eb 100644 (file)
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 1.7.7
+VER        = 1.8.0
 
 THISAPP    = libgcrypt-$(VER)
 DL_FILE    = $(THISAPP).tar.bz2
@@ -40,7 +40,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = d1769481b1b506a632fd66c5e5f62e41
+$(DL_FILE)_MD5 = 530db74602b558209f9ad7356a680971
 
 install : $(TARGET)
 
index 476f146eb9cb3b8df97f2a26bbbaeb1b00594165..3749fd7d468c711333cc325a60fbed828370ed07 100644 (file)
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 3.12.1
+VER        = 3.13.0
 
 THISAPP    = logrotate-$(VER)
 DL_FILE    = logrotate-$(VER).tar.gz
@@ -40,7 +40,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = 066b49891bad2849d5044c1952613ea6
+$(DL_FILE)_MD5 = 72c2c3028d060131b388a9b330215549
 
 install : $(TARGET)
 
index 1a88989d7ccb074ac910c696f3d2c736706406e7..5ff1499a85cfcbd8704bc740d3d7ccaa01c8c776 100644 (file)
@@ -32,7 +32,7 @@ DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
 PROG       = nagios
-PAK_VER    = 2
+PAK_VER    = 3
 
 DEPS       = "traceroute"
 
index 34e8444f95019c0d717c7cf586cf31a23f0f43a7..37998319656ed860f72c7dbba52d1dddd22d2b38 100644 (file)
--- a/lfs/nano
+++ b/lfs/nano
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 2.8.1
+VER        = 2.8.6
 
 THISAPP    = nano-$(VER)
 DL_FILE    = $(THISAPP).tar.gz
@@ -32,7 +32,7 @@ DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
 PROG       = nano
-PAK_VER    = 15
+PAK_VER    = 16
 
 DEPS       = ""
 
@@ -44,7 +44,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = 0dec96d839657e7f1a8396d7dbb19c07
+$(DL_FILE)_MD5 = e05d83c0f1687b733322f806c080d256
 
 install : $(TARGET)
 
index 147595d162bd99f581f525a4a8073c352d682790..1980be70c917b018d92beda01c2a9879f57d00c9 100644 (file)
@@ -32,7 +32,7 @@ DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
 PROG       = openmailadmin
-PAK_VER    = 1
+PAK_VER    = 2
 
 DEPS       = "cyrus-imapd postfix mysql"
 
index b7f5217597235946dee55dd16cd84e928d266ef8..8307d0147b9fc7e6b02e66164e74bfd827fcbb0b 100644 (file)
@@ -1,7 +1,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2015  IPFire Team  <info@ipfire.org>                          #
+# Copyright (C) 2017  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        = 2.3.17
+VER        = 2.3.18
 
 THISAPP    = openvpn-$(VER)
 DL_FILE    = $(THISAPP).tar.xz
@@ -40,7 +40,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = df9291c5bd466fe73c2544a800f3b441
+$(DL_FILE)_MD5 = 844ec9c64aae62051478784b8562f881
 
 install : $(TARGET)
 
@@ -74,7 +74,6 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
                --prefix=/usr \
                --sysconfdir=/var/ipfire/ovpn \
                --enable-iproute2 \
-               --enable-password-save \
                --enable-plugins \
                --enable-plugin-auth-pam \
                --enable-plugin-down-root
index e021a4c63aed6b7b379be66dd52bf5d8d75e1e6f..c13e2967839b1ba1f600c2120a25fb0c94d82f87 100644 (file)
@@ -32,7 +32,7 @@ DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
 PROG       = owncloud
-PAK_VER           = 6
+PAK_VER           = 7
 
 DEPS       = ""
 
index d71d4242fe04a7c3c225a0c9868e662108deabbc..e51452824dd821ab981c05762b0b2d79f1589f31 100644 (file)
@@ -28,7 +28,7 @@ VER        = 0.9.25
 
 THISAPP    = pakfire-$(VER)
 DL_FILE    = $(THISAPP).tar.gz
-DL_FROM    = http://source.ipfire.org/releases/pakfire/
+DL_FROM    = https://source.ipfire.org/releases/pakfire/
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
 PROG      = pakfire3
index 49656f1bab68b2a1c82c07afca419a8a21be8b63..0b68c59d00e4496b469bb082cadcad304e4b65d0 100644 (file)
--- a/lfs/pcre
+++ b/lfs/pcre
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 8.40
+VER        = 8.41
 
 THISAPP    = pcre-$(VER)
 DL_FILE    = $(THISAPP).tar.bz2
@@ -40,7 +40,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = 41a842bf7dcecd6634219336e2167d1d
+$(DL_FILE)_MD5 = c160d22723b1670447341b08c58981c1
 
 install : $(TARGET)
 
diff --git a/lfs/perl-Font-TTF b/lfs/perl-Font-TTF
new file mode 100644 (file)
index 0000000..ea60a5e
--- /dev/null
@@ -0,0 +1,78 @@
+###############################################################################
+#                                                                             #
+# IPFire.org - A linux based firewall                                         #
+# Copyright (C) 2011  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        #
+# 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.06
+
+THISAPP    = Font-TTF-$(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)
+
+$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
+
+$(DL_FILE)_MD5 = 241b59310ad4450e6e050d5e790f1b21
+
+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) && perl Makefile.PL
+       cd $(DIR_APP) && make $(MAKETUNING)
+       cd $(DIR_APP) && make install
+       @rm -rf $(DIR_APP)
+       @$(POSTBUILD)
diff --git a/lfs/perl-IO-String b/lfs/perl-IO-String
new file mode 100644 (file)
index 0000000..6bacfe2
--- /dev/null
@@ -0,0 +1,78 @@
+###############################################################################
+#                                                                             #
+# IPFire.org - A linux based firewall                                         #
+# Copyright (C) 2011  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        #
+# 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.08
+
+THISAPP    = IO-String-$(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)
+
+$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
+
+$(DL_FILE)_MD5 = 250e5424f290299fc3d6b5d1e9da3835
+
+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) && perl Makefile.PL
+       cd $(DIR_APP) && make $(MAKETUNING)
+       cd $(DIR_APP) && make install
+       @rm -rf $(DIR_APP)
+       @$(POSTBUILD)
index 8b0af9a97f554e01cc8fbd7e3a93c3e76ae6574c..a47a07681cfe2b98e40858c093b14ad599bfd62e 100644 (file)
 
 include Config
 
-VER        = 2.020
+VER        = 2.033
 
 THISAPP    = PDF-API2-$(VER)
 DL_FILE    = $(THISAPP).tar.gz
 DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
+
 TARGET     = $(DIR_INFO)/$(THISAPP)
-PROG       = perl-PDF-API2
-PAK_VER    = 1
 
 ###############################################################################
 # Top-level Rules
@@ -42,7 +41,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = c0d20bfd03883b5b2b2a7fd47455249a
+$(DL_FILE)_MD5 = 4223a38add42741f996bd67d5f2f8e5b
 
 install : $(TARGET)
 
@@ -52,9 +51,6 @@ download :$(patsubst %,$(DIR_DL)/%,$(objects))
 
 md5 : $(subst %,%_MD5,$(objects))
 
-dist: 
-       @$(PAK)
-
 ###############################################################################
 # Downloading, checking, md5sum
 ###############################################################################
index 5dad01d842ba6ff9c7be7407ef176771319d59b7..6a605f1fa279d7ce934845dd65735b6a98782d1f 100644 (file)
@@ -33,7 +33,7 @@ DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
 PROG       = phpSANE
-PAK_VER    = 1
+PAK_VER    = 2
 
 DEPS       = "sane netpbm"
 
index 22659ed84238763fefa2a3f3bfc7577d7a3fc111..08583d0b9006f78c2c5f43faa869e52f0ed16632 100644 (file)
--- a/lfs/squid
+++ b/lfs/squid
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 3.5.26
+VER        = 3.5.27
 
 THISAPP    = squid-$(VER)
 DL_FILE    = $(THISAPP).tar.xz
@@ -40,7 +40,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = 510e2c84773879c00d0e7ced997864d9
+$(DL_FILE)_MD5 = 39ef8199675d48a314b540f92c00c545
 
 install : $(TARGET)
 
@@ -70,7 +70,7 @@ $(subst %,%_MD5,$(objects)) :
 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @$(PREBUILD)
        @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar xaf $(DIR_DL)/$(DL_FILE)
-       cd $(DIR_APP) && patch -Np0 -i $(DIR_SRC)/src/patches/squid-3.5.26-fix-max-file-descriptors.patch
+       cd $(DIR_APP) && patch -Np0 -i $(DIR_SRC)/src/patches/squid-3.5.27-fix-max-file-descriptors.patch
 
        cd $(DIR_APP) && autoreconf -vfi
        cd $(DIR_APP)/libltdl && autoreconf -vfi
index ff78d366031a820f11d5f829f5cbac17e25b2dd6..9bc75f0f1facc9fb41c03b1dfc559fd43e0f2b87 100644 (file)
@@ -15,9 +15,9 @@ THISAPP    = squid-accounting-$(VER)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
 PROG       = squid-accounting
-PAK_VER    = 9
+PAK_VER    = 10
 
-DEPS       = "perl-DBI perl-DBD-SQLite perl-File-ReadBackwards perl-PDF-API2"
+DEPS       = "perl-DBI perl-DBD-SQLite perl-File-ReadBackwards"
 
 ###############################################################################
 # Top-level Rules
index b70bde78a4e273bc37444d3fc1aea2b986657470..0a5ac65c09a3f641d2f549751b8b8b07220bc61b 100644 (file)
@@ -107,6 +107,7 @@ endif
        # Move script to correct place.
        mv -vf /usr/local/bin/ovpn-ccd-convert /usr/sbin/
        mv -vf /usr/local/bin/ovpn-collectd-convert /usr/sbin/
+       mv -vf /usr/local/bin/captive-cleanup /usr/bin/
        
        # Install firewall scripts.
        mkdir -pv /usr/lib/firewall
index 85c4f2b85815d492cb69a7777afd8723d2b33415..600c012dc5a1515b0ca58264b6e61a487f7205f3 100644 (file)
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 5.5.3
+VER        = 5.6.0
 
 THISAPP    = strongswan-$(VER)
 DL_FILE    = $(THISAPP).tar.bz2
@@ -48,7 +48,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = 4afffe3c219bb2e04f09510905af836b
+$(DL_FILE)_MD5 = befb5e827d02433fea6669c20e11530a
 
 install : $(TARGET)
 
index 42536f16a3a3a4e671dd9a260882281974a4d6b7..acf752ce2f3611c64d4ccbea2c2e88ee3013fd74 100644 (file)
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 4.9.0
+VER        = 4.9.2
 
 THISAPP    = tcpdump-$(VER)
 DL_FILE    = $(THISAPP).tar.gz
@@ -32,7 +32,7 @@ DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
 PROG       = tcpdump
-PAK_VER    = 8
+PAK_VER    = 9
 
 DEPS       = ""
 
@@ -44,7 +44,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = 2b83364eef53b63ca3181b4eb56dab0c
+$(DL_FILE)_MD5 = 9bbc1ee33dab61302411b02dd0515576
 
 install : $(TARGET)
 
diff --git a/lfs/tor b/lfs/tor
index f718843031c4c04fdf6f684fcfdcef3d0086ed48..867f01fb4b500976b9666c24965bece69937f2f4 100644 (file)
--- a/lfs/tor
+++ b/lfs/tor
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 0.3.0.8
+VER        = 0.3.1.7
 
 THISAPP    = tor-$(VER)
 DL_FILE    = $(THISAPP).tar.gz
@@ -32,7 +32,7 @@ DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
 PROG       = tor
-PAK_VER    = 21
+PAK_VER    = 23
 
 DEPS       = ""
 
@@ -44,7 +44,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = c5c88b7e17f652c9fb4fc2c2ee92943c
+$(DL_FILE)_MD5 = ec7c9f588c9e1a42c09bcc097a1e55eb
 
 install : $(TARGET)
 
diff --git a/lfs/ubuntu-font-family b/lfs/ubuntu-font-family
new file mode 100644 (file)
index 0000000..f817b85
--- /dev/null
@@ -0,0 +1,78 @@
+###############################################################################
+#                                                                             #
+# IPFire.org - A linux based firewall                                         #
+# Copyright (C) 2007-2017 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        #
+# 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        = 0.83
+
+THISAPP    = ubuntu-font-family-$(VER)
+DL_FILE    = $(THISAPP).zip
+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 = a24b8136b8f3bb93f166baf97d9328de
+
+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) && unzip $(DIR_DL)/$(DL_FILE)
+
+       -mkdir -pv /usr/share/fonts
+       cd $(DIR_APP) && cp -vf *.ttf /usr/share/fonts/
+
+       @rm -rf $(DIR_APP)
+       @$(POSTBUILD)
index 1270b35c3cbc8f6fb7fcc625cd3d90b1241acced..0648fb77e910fb950be369ed7c04b0fd51a2fe20 100644 (file)
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 1.6.3
+VER        = 1.6.7
 
 THISAPP    = unbound-$(VER)
 DL_FILE    = $(THISAPP).tar.gz
@@ -40,7 +40,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = d964d04c8d2b25f3271ac60fc630b654
+$(DL_FILE)_MD5 = 67ed382add11134d689f5e88f8efc43e
 
 install : $(TARGET)
 
@@ -70,7 +70,6 @@ $(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) && patch -Np1 < $(DIR_SRC)/src/patches/unbound-allow-setting-validator-permissive-mode-at-runtime.patch
        cd $(DIR_APP) && \
                ./configure \
                        --prefix=/usr \
index 919acbe76d52eabab6da92c627b6fbca0da8aec6..0c568825234a315a8abb72f0952228d24caa65ef 100644 (file)
@@ -64,9 +64,28 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        chown -R root:root /srv/web/ipfire
        chmod -R 755 /srv/web/ipfire/cgi-bin
        chmod -R 644 /srv/web/ipfire/html
-       chmod 755 /srv/web/ipfire/html /srv/web/ipfire/html/{index.cgi,redirect.cgi,dial.cgi,images,include,themes,themes/*,themes/*/*}
+       chmod 755 /srv/web/ipfire/html /srv/web/ipfire/html/{index.cgi,redirect.cgi,images,include,themes,themes/*,themes/*/*}
        ln -svf ipfire /srv/web/ipfire/html/themes/ipfire-rounded
 
        # Reset permissions of redirect templates and theme directories
-       find /srv/web/ipfire/html/{redirect-templates,themes} -type d | xargs chmod -v 755
+       find /srv/web/ipfire/html/{captive,redirect-templates,themes} -type d | xargs chmod -v 755
+
+       # Captive Portal CSS
+       ln -svf --relative /usr/share/bootstrap/css/bootstrap-grid.min.css \
+               /srv/web/ipfire/html/captive/assets/bootstrap-grid.min.css
+       ln -svf --relative /usr/share/bootstrap/css/bootstrap-grid.min.css.map \
+               /srv/web/ipfire/html/captive/assets/bootstrap-grid.min.css.map
+       ln -svf --relative /usr/share/bootstrap/css/bootstrap-reboot.min.css \
+               /srv/web/ipfire/html/captive/assets/bootstrap-reboot.min.css
+       ln -svf --relative /usr/share/bootstrap/css/bootstrap-reboot.min.css.map \
+               /srv/web/ipfire/html/captive/assets/bootstrap-reboot.min.css.map
+
+       # Captive Portal Fonts
+       ln -svf --relative /usr/share/fonts/Ubuntu-L.ttf \
+               /srv/web/ipfire/html/captive/assets/Ubuntu-L.ttf
+       ln -svf --relative /usr/share/fonts/Ubuntu-M.ttf \
+               /srv/web/ipfire/html/captive/assets/Ubuntu-M.ttf
+       ln -svf --relative /usr/share/fonts/Ubuntu-R.ttf \
+               /srv/web/ipfire/html/captive/assets/Ubuntu-R.ttf
+
        @$(POSTBUILD)
diff --git a/lfs/wio b/lfs/wio
new file mode 100644 (file)
index 0000000..d70b12b
--- /dev/null
+++ b/lfs/wio
@@ -0,0 +1,65 @@
+###############################################################################
+# IPFire.org    - An Open Source Firewall Solution                            #
+# Copyright (C) - IPFire Development Team <info@ipfire.org>                   #
+###############################################################################
+
+###############################################################################
+# Definitions
+###############################################################################
+
+include Config
+
+VER        = 1.3.1
+
+THISAPP    = wio-$(VER)
+DIR_APP    = $(DIR_SRC)/$(THISAPP)
+TARGET     = $(DIR_INFO)/$(THISAPP)
+PROG       = wio
+PAK_VER    = 3
+
+###############################################################################
+# Top-level Rules
+###############################################################################
+
+install : $(TARGET)
+
+check : 
+
+download :
+
+md5 : 
+
+dist: 
+       @$(PAK)
+
+###############################################################################
+# Installation Details
+###############################################################################
+
+$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
+       @$(PREBUILD)
+       @rm -rf $(DIR_APP) && mkdir $(DIR_APP) && cp -R $(DIR_SRC)/src/wio/ $(DIR_APP)
+       cd $(DIR_APP)
+       mkdir -p /usr/lib/wio
+       mkdir -p /var/log/wio
+       mkdir -p /var/log/rrd/wio
+       mkdir -p /srv/web/ipfire/html/images/wio
+       mkdir -p /var/ipfire/wio
+
+       install -v -m 755 $(DIR_APP)/wio/wio.cgi /srv/web/ipfire/cgi-bin/
+       install -v -m 755 $(DIR_APP)/wio/wiographs.cgi /srv/web/ipfire/cgi-bin/
+       install -v -m 755 $(DIR_APP)/wio/wio /etc/fcron.minutely/
+       install -v -m 644 $(DIR_APP)/wio/main/wio.conf /var/ipfire/wio/
+       install -v -m 754 $(DIR_APP)/wio/main/wio.pl /var/ipfire/wio/
+       install -v -m 754 $(DIR_APP)/wio/main/wiovpn.pl /var/ipfire/wio/
+       install -v -m 644 $(DIR_APP)/wio/wio-lib.pl /usr/lib/wio/
+       install -v -m 644 $(DIR_APP)/wio/wio-graphs.pl /usr/lib/wio/
+       install -v -m 644 $(DIR_APP)/wio/wioips /var/log/wio/
+       install -v -m 644 $(DIR_APP)/wio/images/* /srv/web/ipfire/html/images/wio/
+       install -v -m 655 $(DIR_APP)/wio/lang/wio.de.pl /var/ipfire/addon-lang/
+       install -v -m 655 $(DIR_APP)/wio/lang/wio.en.pl /var/ipfire/addon-lang/
+       install -v -m 644 $(DIR_APP)/wio/EX-wio.menu /var/ipfire/menu.d/
+       install -v -m 644 $(DIR_APP)/wio/config/backup/includes/wio /var/ipfire/backup/addons/includes/wio
+
+       @rm -rf $(DIR_APP)
+       @$(POSTBUILD)
index 76aa6c673834b4281bf3b9d5727aa723e8fce546..32cecfd0004e0e92ad147e70799ca41ba18e7d83 100644 (file)
@@ -1,7 +1,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007-2015  IPFire Team  <info@ipfire.org>                     #
+# Copyright (C) 2007-2017  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        = 2.5
+VER        = 2.6
 
 THISAPP    = wpa_supplicant-$(VER)
 DL_FILE    = $(THISAPP).tar.gz
@@ -41,7 +41,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = 96ff75c3a514f1f324560a2376f13110
+$(DL_FILE)_MD5 = 091569eb4440b7d7f2b4276dbfc03c3c
 
 install : $(TARGET)
 
@@ -51,7 +51,7 @@ download :$(patsubst %,$(DIR_DL)/%,$(objects))
 
 md5 : $(subst %,%_MD5,$(objects))
 
-dist: 
+dist:
        @$(PAK)
 
 ###############################################################################
@@ -74,6 +74,17 @@ $(subst %,%_MD5,$(objects)) :
 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @$(PREBUILD)
        @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
+
+       # Security Patches https://w1.fi/security/2017-1/wpa-packet-number-reuse-with-replayed-messages.txt
+       cd $(DIR_APP) && patch -p1 < $(DIR_SRC)/src/patches/wpa_supplicant/rebased-v2.6-0001-hostapd-Avoid-key-reinstallation-in-FT-handshake.patch
+       cd $(DIR_APP) && patch -p1 < $(DIR_SRC)/src/patches/wpa_supplicant/rebased-v2.6-0002-Prevent-reinstallation-of-an-already-in-use-group-ke.patch
+       cd $(DIR_APP) && patch -p1 < $(DIR_SRC)/src/patches/wpa_supplicant/rebased-v2.6-0003-Extend-protection-of-GTK-IGTK-reinstallation-of-WNM-.patch
+       cd $(DIR_APP) && patch -p1 < $(DIR_SRC)/src/patches/wpa_supplicant/rebased-v2.6-0004-Prevent-installation-of-an-all-zero-TK.patch
+       cd $(DIR_APP) && patch -p1 < $(DIR_SRC)/src/patches/wpa_supplicant/rebased-v2.6-0005-Fix-PTK-rekeying-to-generate-a-new-ANonce.patch
+       cd $(DIR_APP) && patch -p1 < $(DIR_SRC)/src/patches/wpa_supplicant/rebased-v2.6-0006-TDLS-Reject-TPK-TK-reconfiguration.patch
+       cd $(DIR_APP) && patch -p1 < $(DIR_SRC)/src/patches/wpa_supplicant/rebased-v2.6-0007-WNM-Ignore-WNM-Sleep-Mode-Response-without-pending-r.patch
+       cd $(DIR_APP) && patch -p1 < $(DIR_SRC)/src/patches/wpa_supplicant/rebased-v2.6-0008-FT-Do-not-allow-multiple-Reassociation-Response-fram.patch
+
        cd $(DIR_APP)/wpa_supplicant && cp $(DIR_SRC)/config/wpa_supplicant/config ./.config
        cd $(DIR_APP)/wpa_supplicant && sed -e "s/wpa_cli\ dynamic_eap_methods/wpa_cli\ #dynamic_eap_methods/" -i Makefile
        cd $(DIR_APP)/wpa_supplicant && sed -e "s@/usr/local@/usr@g" -i Makefile
diff --git a/make.sh b/make.sh
index 89c3e56cafaba1c0df9b6fc3f6501ce10e755507..a21db99af58ae070121d493cc6fd3ecb3881631f 100755 (executable)
--- a/make.sh
+++ b/make.sh
@@ -25,8 +25,8 @@
 NAME="IPFire"                                                  # Software name
 SNAME="ipfire"                                                 # Short name
 VERSION="2.19"                                                 # Version number
-CORE="112"                                                     # Core Level (Filename)
-PAKFIRE_CORE="112"                                             # Core Level (PAKFIRE)
+CORE="115"                                                     # Core Level (Filename)
+PAKFIRE_CORE="115"                                             # Core Level (PAKFIRE)
 GIT_BRANCH=`git rev-parse --abbrev-ref HEAD`                   # Git Branch
 SLOGAN="www.ipfire.org"                                                # Software slogan
 CONFIG_ROOT=/var/ipfire                                                # Configuration rootdir
@@ -497,6 +497,8 @@ buildipfire() {
   lfsmake2 libevent2
   lfsmake2 libevent2-compat
   lfsmake2 expat
+  lfsmake2 apr
+  lfsmake2 aprutil
   lfsmake2 unbound
   lfsmake2 gnutls
   lfsmake2 bind
@@ -546,6 +548,7 @@ buildipfire() {
   lfsmake2 web-user-interface
   lfsmake2 flag-icons
   lfsmake2 jquery
+  lfsmake2 bootstrap
   lfsmake2 arping
   lfsmake2 beep
   lfsmake2 dvdrtools
@@ -624,6 +627,7 @@ buildipfire() {
   lfsmake2 openssh
   lfsmake2 fontconfig
   lfsmake2 dejavu-fonts-ttf
+  lfsmake2 ubuntu-font-family
   lfsmake2 freefont
   lfsmake2 pixman
   lfsmake2 cairo
@@ -862,6 +866,8 @@ buildipfire() {
   lfsmake2 owncloud
   lfsmake2 bacula
   lfsmake2 batctl
+  lfsmake2 perl-Font-TTF
+  lfsmake2 perl-IO-String
   lfsmake2 perl-PDF-API2
   lfsmake2 squid-accounting
   lfsmake2 pigz
@@ -885,6 +891,8 @@ buildipfire() {
   lfsmake2 perl-common-sense
   lfsmake2 perl-inotify2
   lfsmake2 perl-Net-IP
+  lfsmake2 wio
+  lfsmake2 iftop
 }
 
 buildinstaller() {
index 5dd39f939f48497b115caf22bea3efe1a164d80b..541141e3b186e1a49cefe453aa68c49c89e4c84c 100644 (file)
@@ -7,18 +7,58 @@
 . /etc/sysconfig/rc
 . $rc_functions
 
+generate_certificates() {
+       if [ ! -f "/etc/httpd/server.key" ]; then
+               boot_mesg "Generating HTTPS RSA server key (this will take a moment)..."
+               openssl genrsa -out /etc/httpd/server.key 4096 &>/dev/null
+               evaluate_retval
+       fi
+
+       if [ ! -f "/etc/httpd/server-ecdsa.key" ]; then
+               boot_mesg "Generating HTTPS ECDSA server key..."
+               openssl ecparam -genkey -name secp384r1 -noout \
+                       -out /etc/httpd/server-ecdsa.key &>/dev/null
+               evaluate_retval
+       fi
+
+       # Generate RSA CSR
+       if [ ! -f "/etc/httpd/server.csr" ]; then
+               sed "s/HOSTNAME/`hostname -f`/" < /etc/certparams | \
+                       openssl req -new -key /etc/httpd/server.key \
+                               -out /etc/httpd/server.csr &>/dev/null
+       fi
+
+       # Generate ECDSA CSR
+       if [ ! -f "/etc/httpd/server-ecdsa.csr" ]; then
+               sed "s/HOSTNAME/`hostname -f`/" < /etc/certparams | \
+                       openssl req -new -key /etc/httpd/server-ecdsa.key \
+                       -out /etc/httpd/server-ecdsa.csr &>/dev/null
+       fi
+
+       if [ ! -f "/etc/httpd/server.crt" ]; then
+               boot_mesg "Signing RSA certificate..."
+               openssl x509 -req -days 999999 -sha256 \
+                       -in /etc/httpd/server.csr \
+                       -signkey /etc/httpd/server.key \
+                       -out /etc/httpd/server.crt &>/dev/null
+               evaluate_retval
+       fi
+
+       if [ ! -f "/etc/httpd/server-ecdsa.crt" ]; then
+               boot_mesg "Signing ECDSA certificate..."
+               openssl x509 -req -days 999999 -sha256 \
+                       -in /etc/httpd/server-ecdsa.csr \
+                       -signkey /etc/httpd/server-ecdsa.key \
+                       -out /etc/httpd/server-ecdsa.crt &>/dev/null
+               evaluate_retval
+       fi
+}
+
 case "$1" in
        start)
-               if [ -f /etc/httpd/server.key -a -f /etc/httpd/server.crt -a -f /etc/httpd/server.csr ]; then
-                       /usr/local/bin/httpscert read >/dev/null 2>&1
-               else
-                       boot_mesg "Generating HTTPS host certificate (may take a couple of minutes)..."
-                       /usr/local/bin/httpscert new  >/dev/null 2>&1
-                       evaluate_retval
-
-                       # Make sure that the key is written to disk.
-                       sync
-               fi
+               # Generate all required certificates
+               generate_certificates
+
                boot_mesg "Starting Apache daemon..."
                /usr/sbin/apachectl -k start
                evaluate_retval
index 7bdb292f7ddb8a2160377a45180fe58de40b93dc..c4d2fefe41d3308823b4250d15e26c998db56db3 100644 (file)
@@ -224,6 +224,13 @@ iptables_init() {
                iptables -A ${i} -j LOOPBACK
        done
 
+       # Captive portal
+       iptables -N CAPTIVE_PORTAL
+       iptables -N CAPTIVE_PORTAL_CLIENTS
+       for i in INPUT FORWARD; do
+               iptables -A ${i} -j CAPTIVE_PORTAL
+       done
+
        # Accept everything connected
        for i in INPUT FORWARD OUTPUT; do
                iptables -A ${i} -j CONNTRACK
@@ -337,6 +344,10 @@ iptables_init() {
        iptables -N UPNPFW
        iptables -A FORWARD -m conntrack --ctstate NEW -j UPNPFW
 
+       # Captive Portal
+       iptables -t nat -N CAPTIVE_PORTAL
+       iptables -t nat -A PREROUTING -j CAPTIVE_PORTAL
+
        # RED chain, used for the red interface
        iptables -N REDINPUT
        iptables -A INPUT -j REDINPUT
index 70c30b4e230fb8b9fcff9e4f607394f2f948e8b1..857269ee13d9f9f809152b20698c01bfadce65c1 100644 (file)
@@ -12,7 +12,7 @@ ser_console() {
                case $1 in
                        console=*)
                                scon=${1##console=};
-                               sed -i -e "s|^7:2345:respawn:/sbin/agetty.*|7:2345:respawn:/sbin/agetty ${scon%%,*} ${scon##*,}|g" /etc/inittab
+                               sed -i -e "s|^7:2345:respawn:/sbin/agetty.*|7:2345:respawn:/sbin/agetty ${scon%%,*}|g" /etc/inittab
                                shift
                        ;;
                        *)
index 0793927908f762bac2ace9a652793d7831b86c7e..d411ba18d6f66108df695e1a0c2f192db7255c09 100644 (file)
@@ -27,14 +27,6 @@ case "$1" in
                        fi
                        if [ -e /var/ipfire/red/active ]; then
                                boot_mesg ""
-
-                               host ping.ipfire.org > /dev/null 2>&1
-                               if [ "${?}" != "0" ]; then
-                                       boot_mesg "DNS not work ... init with ntp.ipfire.org at 81.3.27.46 ..."
-                                       loadproc /usr/local/bin/settime 81.3.27.46
-                                       boot_mesg "Setting time on boot..."
-                               fi
-
                                loadproc /usr/local/bin/settime $(cat /var/ipfire/time/settime.conf)
                        else
                                boot_mesg " ERROR! Not online!"
index 7437d93b835c6e4c9f76835b95ea7f6cdeecc3ea..e5554d725420727c21f841ccb59e0a23564d44a1 100644 (file)
@@ -454,6 +454,18 @@ disable_dnssec() {
        unbound-control -q set_option val-permissive-mode: yes
 }
 
+fix_time_if_dns_fail() {
+       # If DNS still not work try to init ntp with
+       # hardcoded ntp.ipfire.org (81.3.27.46)
+       if [ -e /var/ipfire/red/active ]; then
+               host 0.ipfire.pool.ntp.org > /dev/null 2>&1
+               if [ "${?}" != "0" ]; then
+                       boot_mesg "DNS still not work ... init time with ntp.ipfire.org at 81.3.27.46 ..."
+                       loadproc /usr/local/bin/settime 81.3.27.46
+               fi
+       fi
+}
+
 case "$1" in
        start)
                # Print a nicer messagen when unbound is already running
@@ -484,6 +496,8 @@ case "$1" in
 
                # Update hosts
                update_hosts
+
+               fix_time_if_dns_fail
                ;;
 
        stop)
@@ -508,6 +522,11 @@ case "$1" in
                fi
 
                update_forwarders
+
+               unbound-control flush_negative > /dev/null
+               unbound-control flush_bogus > /dev/null
+
+               fix_time_if_dns_fail
                ;;
 
        test-name-server)
index 85c5c5cb8c95a2c6f56680e5c541e9b889bb9234..fb4858cba8bba6c2b1a62b7f9c42d7a6b619c54a 100644 (file)
@@ -76,17 +76,22 @@ PKG_CHECK_MODULES(UDEV, [libudev])
 
 AC_ARG_WITH([distro-name],
        AS_HELP_STRING([--with-distro-name] [The name of the distribution]),
-       AC_DEFINE_UNQUOTED([NAME], "$withval", [The name of the distribution]),
+       AC_DEFINE_UNQUOTED([DISTRO_NAME], "$withval", [The name of the distribution]),
        AC_MSG_ERROR([*** you need to set the name with --with-distro-name=]))
 
 AC_ARG_WITH([distro-sname],
        AS_HELP_STRING([--with-distro-sname] [The short name of the distribution]),
-       AC_DEFINE_UNQUOTED([SNAME], "$withval", [The sname of the distribution]),
+       AC_DEFINE_UNQUOTED([DISTRO_SNAME], "$withval", [The sname of the distribution]),
        AC_MSG_ERROR([*** you need to set the sname with --with-distro-sname=]))
 
+AC_ARG_WITH([distro-version],
+       AS_HELP_STRING([--with-distro-sname] [The version of the distribution]),
+       AC_DEFINE_UNQUOTED([DISTRO_VERSION], "$withval", [The version of the distribution]),
+       AC_MSG_ERROR([*** you need to set the version with --with-distro-version=]))
+
 AC_ARG_WITH([distro-slogan],
        AS_HELP_STRING([--with-distro-slogan] [The slogan of the distribution]),
-       AC_DEFINE_UNQUOTED([SLOGAN], "$withval", [The slogan of the distribution]),
+       AC_DEFINE_UNQUOTED([DISTRO_SLOGAN], "$withval", [The slogan of the distribution]),
        AC_MSG_ERROR([*** you need to set the slogan with --with-distro-slogan=]))
 
 AC_ARG_WITH([config-root],
@@ -111,4 +116,9 @@ AC_MSG_RESULT([
        CFLAGS:                 ${OUR_CFLAGS} ${CFLAGS}
        CPPFLAGS:               ${OUR_CPPFLAGS} ${CPPFLAGS}
        LDFLAGS:                ${OUR_LDFLAGS} ${LDFLAGS}
+
+       Distribution:           ${DISTRO_NAME} (${DISTRO_SNAME})
+       Version:                ${DISTRO_VERSION}
+       Slogan:                 ${DISTRO_SLOGAN}
+       Config Root:            ${CONFIG_ROOT}
 ])
index 08dcdd5631a24f38a1ff1dfa67b2930e5d4e16a3..b8803970a74e26342925daf69f53fa81747a6ae3 100755 (executable)
@@ -42,6 +42,9 @@ install() {
     inst /var/ipfire/dhcpc/dhcpcd-run-hooks
     inst "$moddir/70-dhcpcd.exe" "/var/ipfire/dhcpc/dhcpcd-hooks/70-dhcpcd.exe"
 
+    # CAs
+    inst /etc/ssl/cert.pem
+
     inst /etc/host.conf /etc/protocols
     inst /etc/nsswitch.conf /etc/resolv.conf
     inst_libdir_file "libnss_dns.so.*"
index 362be4779f14119e2582fe04eb6c4ecb367ce011..06bf42b6784fafa4c39d43a50938b50f5c6aed63 100644 (file)
@@ -165,7 +165,7 @@ static int hw_test_source_medium(const char* path) {
        // Umount the test device.
        hw_umount(SOURCE_MOUNT_PATH);
 
-       return (ret == 0);
+       return ret;
 }
 
 char* hw_find_source_medium(struct hw* hw) {
index f16b39cb6a04a0b86e50ec73573166092f62a3ea..e2d621be5404c4a6a3e5b76b64df06cb48009425 100644 (file)
@@ -24,8 +24,8 @@
 #include <libudev.h>
 
 #define DESTINATION_MOUNT_PATH        "/harddisk"
-#define SOURCE_MOUNT_PATH "/cdrom"
-#define SOURCE_TEST_FILE  SOURCE_MOUNT_PATH "/" VERSION ".media"
+#define SOURCE_MOUNT_PATH             "/cdrom"
+#define SOURCE_TEST_FILE              SOURCE_MOUNT_PATH "/" DISTRO_SNAME "-" DISTRO_VERSION ".media"
 
 #define HW_MAX_DISKS                 32
 #define STRING_SIZE                1024
index c420de3a18572760fa1a1eff837213f8be276153..a3642551d69ec4fa7609dba3cb57b799e4206b71 100644 (file)
@@ -195,7 +195,7 @@ int write_lang_configs(char* lang) {
 
        /* default stuff for main/settings. */
        replacekeyvalue(kv, "LANGUAGE", lang);
-       replacekeyvalue(kv, "HOSTNAME", SNAME);
+       replacekeyvalue(kv, "HOSTNAME", DISTRO_SNAME);
        replacekeyvalue(kv, "THEME", "ipfire");
        writekeyvalues(kv, "/harddisk" CONFIG_ROOT "/main/settings");
        freekeyvalues(kv);
@@ -369,7 +369,7 @@ int main(int argc, char *argv[]) {
        FILE *copying;
 
        setlocale(LC_ALL, "");
-       sethostname(SNAME, 10);
+       sethostname(DISTRO_SNAME, 10);
 
        /* Log file/terminal stuff. */
        FILE* flog = NULL;
@@ -398,7 +398,7 @@ int main(int argc, char *argv[]) {
        if (roottext)
                newtDrawRootText(0, 0, roottext);
 
-       snprintf(title, sizeof(title), "%s - %s", NAME, SLOGAN);
+       snprintf(title, sizeof(title), "%s - %s", DISTRO_NAME, DISTRO_SLOGAN);
 
        // Parse parameters from the kernel command line
        parse_command_line(&config);
@@ -448,7 +448,7 @@ int main(int argc, char *argv[]) {
        if (!config.unattended) {
                snprintf(message, sizeof(message),
                        _("Welcome to the %s installation program.\n\n"
-                       "Selecting Cancel on any of the following screens will reboot the computer."), NAME);
+                       "Selecting Cancel on any of the following screens will reboot the computer."), DISTRO_NAME);
                newtWinMessage(title, _("Start installation"), message);
        }
 
@@ -778,7 +778,7 @@ int main(int argc, char *argv[]) {
 
        // Extract files...
        snprintf(commandstring, STRING_SIZE,
-               "/bin/tar -C /harddisk  -xvf /cdrom/distro.img --lzma 2>/dev/null");
+               "/bin/tar -C /harddisk -xvf /cdrom/distro.img --xz 2>/dev/null");
 
        if (runcommandwithprogress(60, 4, title, commandstring, INST_FILECOUNT,
                        _("Installing the system..."), logfile)) {
@@ -933,7 +933,7 @@ int main(int argc, char *argv[]) {
                        "Please remove any installation mediums from this system and hit the reboot button. "
                        "Once the system has restarted you will be asked to setup networking and system passwords. "
                        "After that, you should point your web browser at https://%s:444 (or what ever you name "
-                       "your %s) for the web configuration console."), NAME, SNAME, NAME);
+                       "your %s) for the web configuration console."), DISTRO_NAME, DISTRO_SNAME, DISTRO_NAME);
                newtWinMessage(_("Congratulations!"), _("Reboot"), message);
        }
 
index b138c966a504b97e9c6d95c541c6d55715326c4b..9c1bc249dcda4e3e40c8877f1e6c7ec8a3a1e057 100644 (file)
@@ -3,14 +3,15 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# mahmoud mohamed <qmcila@gmail.com>, 2017
 msgid ""
 msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2014-11-05 01:33+0000\n"
-"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
-"Language-Team: Arabic (http://www.transifex.com/projects/p/ipfire/language/ar/)\n"
+"PO-Revision-Date: 2017-09-20 08:56+0000\n"
+"Last-Translator: mahmoud mohamed <qmcila@gmail.com>\n"
+"Language-Team: Arabic (http://www.transifex.com/mstremer/ipfire/language/ar/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -24,11 +25,11 @@ msgstr ""
 #: main.c:79 main.c:460 main.c:487 main.c:516 main.c:620 main.c:630 main.c:670
 #: main.c:702
 msgid "Cancel"
-msgstr ""
+msgstr "الغاء"
 
 #: main.c:176
 msgid "I accept this license"
-msgstr ""
+msgstr "قبول الاتفاقية"
 
 #: main.c:384
 msgid "Warning: Unattended installation will start in 10 seconds..."
@@ -36,7 +37,7 @@ msgstr ""
 
 #: main.c:403
 msgid "Language selection"
-msgstr ""
+msgstr "اختيار اللغة"
 
 #: main.c:403
 msgid "Select the language you wish to use for the installation."
index a7d97cfb1ac4fe85068d122bb30fef154d3fc27f..923f1da6d18c8fff4e67e4df5e6dfbf3a8d06795 100644 (file)
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2014-11-05 01:33+0000\n"
+"PO-Revision-Date: 2017-08-03 19:28+0000\n"
 "Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
-"Language-Team: Catalan (http://www.transifex.com/projects/p/ipfire/language/ca/)\n"
+"Language-Team: Catalan (http://www.transifex.com/mstremer/ipfire/language/ca/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index 4cfc7aa5c7af7dfacb431859f118d0354e150df8..f00b8fb47eb8fcd46a622b7027926ba1c09c3de9 100644 (file)
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2014-11-05 01:33+0000\n"
+"PO-Revision-Date: 2017-08-03 19:28+0000\n"
 "Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
-"Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/ipfire/language/cs_CZ/)\n"
+"Language-Team: Czech (Czech Republic) (http://www.transifex.com/mstremer/ipfire/language/cs_CZ/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index 459a8dcfb04ee44cbb39c4590f9396408af85c33..04e8c1e8bb6dc3b86b96791f400727bfe9794ece 100644 (file)
@@ -9,9 +9,9 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2015-01-13 21:22+0000\n"
+"PO-Revision-Date: 2017-09-20 08:56+0000\n"
 "Last-Translator: Henrik Simonsen <cybermaze@gmail.com>\n"
-"Language-Team: Danish (http://www.transifex.com/projects/p/ipfire/language/da/)\n"
+"Language-Team: Danish (http://www.transifex.com/mstremer/ipfire/language/da/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index eab3da5059db5e60af32c383981e599b26bb3db0..279982a5f609b4200708b255e0bdd8850bd2be1d 100644 (file)
@@ -12,7 +12,7 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2015-05-07 16:56+0000\n"
+"PO-Revision-Date: 2017-09-23 20:08+0000\n"
 "Last-Translator: Sun Tiger\n"
 "Language-Team: German (http://www.transifex.com/mstremer/ipfire/language/de/)\n"
 "MIME-Version: 1.0\n"
index cf5ec2b4c7268237022033906a2dc05ec634aece..831523053a9c7094daae96f2e95d0dcd5bdaf664 100644 (file)
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2014-11-05 01:33+0000\n"
+"PO-Revision-Date: 2017-08-03 19:28+0000\n"
 "Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
-"Language-Team: Greek (Greece) (http://www.transifex.com/projects/p/ipfire/language/el_GR/)\n"
+"Language-Team: Greek (Greece) (http://www.transifex.com/mstremer/ipfire/language/el_GR/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index 725ebef32c17472a9c70ed236d3a518bd32e0e75..a3036c671584c1c49d0d89a4da2a6dccaaaf631a 100644 (file)
@@ -10,9 +10,9 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2015-02-01 09:23+0000\n"
+"PO-Revision-Date: 2017-09-20 08:56+0000\n"
 "Last-Translator: Roberto Peña <roberto.pena@northsecure.es>\n"
-"Language-Team: Spanish (http://www.transifex.com/projects/p/ipfire/language/es/)\n"
+"Language-Team: Spanish (http://www.transifex.com/mstremer/ipfire/language/es/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index 4760c50677645832630d8ec9bae3a06d25564d22..5420f9ae7150ebaaf0f2361e733a12e516a40db9 100644 (file)
@@ -9,9 +9,9 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2015-02-17 23:49+0000\n"
+"PO-Revision-Date: 2017-09-23 20:08+0000\n"
 "Last-Translator: Khalil Delavaran <khalil.delavaran@gmail.com>\n"
-"Language-Team: Persian (http://www.transifex.com/projects/p/ipfire/language/fa/)\n"
+"Language-Team: Persian (http://www.transifex.com/mstremer/ipfire/language/fa/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index 68a5ad09c7e9d562c5454f9bf0da4248d8b430ce..818bdb46e0ce515ad428d60ad4268858bd546d7b 100644 (file)
@@ -4,14 +4,15 @@
 # 
 # Translators:
 # nonux <nonux@free.fr>, 2015
+# Philippe B <philippe@123-newbeetle.com>, 2016
 msgid ""
 msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2015-02-17 23:23+0000\n"
-"Last-Translator: nonux <nonux@free.fr>\n"
-"Language-Team: French (http://www.transifex.com/projects/p/ipfire/language/fr/)\n"
+"PO-Revision-Date: 2017-09-20 08:56+0000\n"
+"Last-Translator: Philippe B <philippe@123-newbeetle.com>\n"
+"Language-Team: French (http://www.transifex.com/mstremer/ipfire/language/fr/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -20,7 +21,7 @@ msgstr ""
 
 #: main.c:78 main.c:179 main.c:404 main.c:670 main.c:702 main.c:893
 msgid "OK"
-msgstr ""
+msgstr "OK"
 
 #: main.c:79 main.c:460 main.c:487 main.c:516 main.c:620 main.c:630 main.c:670
 #: main.c:702
@@ -33,7 +34,7 @@ msgstr "J'accepte la licence"
 
 #: main.c:384
 msgid "Warning: Unattended installation will start in 10 seconds..."
-msgstr ""
+msgstr "Attention: Une installation sans surveillance va débuter dans 10 secondes..."
 
 #: main.c:403
 msgid "Language selection"
@@ -45,11 +46,11 @@ msgstr "Sélectionnez la langue que vous souhaitez utiliser pour l'installation.
 
 #: main.c:418
 msgid "Unattended mode"
-msgstr ""
+msgstr "Mode non surveillé"
 
 #: main.c:420
 msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
-msgstr ""
+msgstr "<Tab>/<Alt-Tab> entre les éléments | <Espace> sélectionne | <F12> écran suivant"
 
 #: main.c:426
 #, c-format
@@ -57,7 +58,7 @@ msgid ""
 "Welcome to the %s installation program.\n"
 "\n"
 "Selecting Cancel on any of the following screens will reboot the computer."
-msgstr ""
+msgstr "Bienvenue dans le programme d'installation de %s.\n\nSélectionner Echap sur une écran redémarrera l'ordinateur."
 
 #: main.c:428
 msgid "Start installation"
@@ -74,13 +75,13 @@ msgid ""
 "No source drive could be found.\n"
 "\n"
 "You can try downloading the required installation image."
-msgstr ""
+msgstr "Aucune disque source trouvé.\n\nVous pouvez essayer de télécharger l'image d'installation nécessaire."
 
 #: main.c:456
 msgid ""
 "Please make sure to connect your machine to a network and the installer will"
 " try connect to acquire an IP address."
-msgstr ""
+msgstr "Soyez certain que votre machine est connectée à un réseau et l'installateur va tenter de récupérer une adresse IP."
 
 #: main.c:460
 msgid "Download installation image"
@@ -95,7 +96,7 @@ msgid ""
 "Networking could not be started but is required to go on with the installation.\n"
 "\n"
 "Please connect your machine to a network with a DHCP server and retry."
-msgstr ""
+msgstr "Une connexion réseau ne peut être initiée et est nécessaire pour pour poursuivre l'installation.\n\nMerci de connecter votre machine à une serveur DHCP et réessayer."
 
 #: main.c:487 main.c:516
 msgid "Retry"
@@ -108,7 +109,7 @@ msgstr "Téléchargement de l'image d'installation ..."
 #: main.c:510
 #, c-format
 msgid "MD5 checksum mismatch"
-msgstr ""
+msgstr "Erreur de vérification contrôle MD5"
 
 #: main.c:513
 #, c-format
@@ -117,14 +118,14 @@ msgid ""
 "  Reason: %s\n"
 "\n"
 "%s"
-msgstr ""
+msgstr "L'image d'installation ne peut être téléchargée.\nRaison:%s\n\n%s"
 
 #: main.c:528
 #, c-format
 msgid ""
 "Could not mount %s to %s:\n"
 "  %s\n"
-msgstr ""
+msgstr "Impossible de monter %s vers %s:\n%s\n"
 
 #: main.c:543
 msgid "License Agreement"
@@ -147,14 +148,14 @@ msgid ""
 "Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n"
 "\n"
 "ALL DATA ON THE DISK WILL BE DESTROYED."
-msgstr ""
+msgstr "Selectionner le disque sur lequel vous voulez installer IPFire. Il sera d'abord partitioné et un système de fichier y sera créé.\n\nTOUTES LES DONNÉES DUS DISQUE SERONT PERDUES."
 
 #: main.c:599
 msgid ""
 "No disk has been selected.\n"
 "\n"
 "Please select one or more disks you want to install IPFire on."
-msgstr ""
+msgstr "Aucun disque selectionné.\n\nSelectionnez un dsique au moins sur le(s)quel(s) sera installé IPFire."
 
 #: main.c:617
 #, c-format
@@ -164,7 +165,7 @@ msgid ""
 "  %s\n"
 "\n"
 "Do you agree to continue?"
-msgstr ""
+msgstr "Le programme d'installation va maintenant préparer le disque choisi.\n\n%s\n\nEtes vous d'accord pour continuer?"
 
 #: main.c:619
 msgid "Disk Setup"
@@ -183,11 +184,11 @@ msgid ""
 "  %s\n"
 "\n"
 "Do you agree to continue?"
-msgstr ""
+msgstr "Le programme d'installation va maintenant paramétrer la configuration RAID sur les disques sélectionnés.\n\n%s\n%s\n\nEtes vous d'accord pour continuer?"
 
 #: main.c:629
 msgid "RAID Setup"
-msgstr ""
+msgstr "Paramétrage RAID"
 
 #: main.c:640
 msgid "Your disk configuration is currently not supported."
@@ -264,30 +265,30 @@ msgstr "Impossible d'installer le système."
 
 #: main.c:777
 msgid "Installing the language cache..."
-msgstr ""
+msgstr "Installation du cache de langage..."
 
 #: main.c:778
 msgid "Unable to install the language cache."
-msgstr ""
+msgstr "Impossible d'installer le cache de langage."
 
 #: main.c:783
 msgid "Installing the bootloader..."
-msgstr ""
+msgstr "Installation du bootloader..."
 
 #: main.c:790
 msgid "Unable to open /etc/default/grub for writing."
-msgstr ""
+msgstr "Impossible d'ouvrir /etc/default/grub en écriture."
 
 #: main.c:812
 msgid "Unable to install the bootloader."
-msgstr ""
+msgstr "Impossible d'installer le bootloader."
 
 #: main.c:826
 msgid ""
 "A backup file has been found on the installation image.\n"
 "\n"
 "Do you want to restore the backup?"
-msgstr ""
+msgstr "Un fichier de sauvegarde a été trouvé sur l'image d'installation.\n\nVoulez vous restaurer cette sauvegarde?"
 
 #: main.c:827
 msgid "Yes"
@@ -299,15 +300,15 @@ msgstr "Non"
 
 #: main.c:834
 msgid "An error occured when the backup file was restored."
-msgstr ""
+msgstr "Une erreur est survenue lors de la restauration du fichier de sauvegarde."
 
 #: main.c:869
 msgid "Running post-install script..."
-msgstr ""
+msgstr "Execution du script de post installation..."
 
 #: main.c:870
 msgid "Post-install script failed."
-msgstr ""
+msgstr "Echec du script de post installation."
 
 #: main.c:877
 #, c-format
@@ -315,11 +316,11 @@ msgid ""
 "%s was successfully installed!\n"
 "\n"
 "Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
-msgstr ""
+msgstr "%s a été installé correctement.\n\nRetirer tous les médias d'installation du système et appuyer sur redémarrer. Une fois que le système redémarré, vous devrez paramètrer les réseaux et les mots de passe système. Ensuite, vous devrez faire pointer votre navigateur vers https://%s:444 (ou le nom que vous avez donné à votre %s) pour la console de configuration web."
 
 #: main.c:882
 msgid "Congratulations!"
-msgstr ""
+msgstr "Félécitations!"
 
 #: main.c:882
 msgid "Reboot"
index 3638f10ecf025a24c875a0f381b274a2096603f6..abfec72ac4cccf6ca76b2083f559669654dbf8ca 100644 (file)
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2015-01-26 12:07+0000\n"
+"PO-Revision-Date: 2017-09-21 12:48+0000\n"
 "Last-Translator: Blago Culjak <blago.culjak@hotmail.com>\n"
-"Language-Team: Croatian (http://www.transifex.com/projects/p/ipfire/language/hr/)\n"
+"Language-Team: Croatian (http://www.transifex.com/mstremer/ipfire/language/hr/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index 7e9e1988c01bfe51fad164a831a2f0155d877d9e..c69fd4bf65a2e9daf5ac4c8e063ff17dedd0e83e 100644 (file)
@@ -3,14 +3,15 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# Gábor Sávolyi, 2016
 msgid ""
 msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2014-11-05 01:33+0000\n"
-"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
-"Language-Team: Hungarian (http://www.transifex.com/projects/p/ipfire/language/hu/)\n"
+"PO-Revision-Date: 2017-09-20 08:56+0000\n"
+"Last-Translator: Gábor Sávolyi\n"
+"Language-Team: Hungarian (http://www.transifex.com/mstremer/ipfire/language/hu/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -19,36 +20,36 @@ msgstr ""
 
 #: main.c:78 main.c:179 main.c:404 main.c:670 main.c:702 main.c:893
 msgid "OK"
-msgstr ""
+msgstr "Rendben"
 
 #: main.c:79 main.c:460 main.c:487 main.c:516 main.c:620 main.c:630 main.c:670
 #: main.c:702
 msgid "Cancel"
-msgstr ""
+msgstr "Mégsem"
 
 #: main.c:176
 msgid "I accept this license"
-msgstr ""
+msgstr "Fentieket megértettem"
 
 #: main.c:384
 msgid "Warning: Unattended installation will start in 10 seconds..."
-msgstr ""
+msgstr "Figyelem: A felügyelet nélküli telepítés 10 másodperc múlva indul..."
 
 #: main.c:403
 msgid "Language selection"
-msgstr ""
+msgstr "Nyelv kiválasztása"
 
 #: main.c:403
 msgid "Select the language you wish to use for the installation."
-msgstr ""
+msgstr "Válaszd ki a telepítés nyelvét."
 
 #: main.c:418
 msgid "Unattended mode"
-msgstr ""
+msgstr "Felügyelet nélküli mód"
 
 #: main.c:420
 msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
-msgstr ""
+msgstr "<Tab>/<Alt-Tab> elemek közötti váltás | <Space> kiválasztás | <F12> következő képernyő"
 
 #: main.c:426
 #, c-format
@@ -56,16 +57,16 @@ msgid ""
 "Welcome to the %s installation program.\n"
 "\n"
 "Selecting Cancel on any of the following screens will reboot the computer."
-msgstr ""
+msgstr "Üdvözöl az %s telepítőprogram.\n\nBármely későbbi képernyőn a Mégsem újraindítja a számítógépet."
 
 #: main.c:428
 msgid "Start installation"
-msgstr ""
+msgstr "Telepítés indítása"
 
 #: main.c:449
 #, c-format
 msgid "The installer will now try downloading the installation image."
-msgstr ""
+msgstr "A telepítő most megpróbálja letölteni a telepítési képet."
 
 #: main.c:452
 #, c-format
@@ -73,41 +74,41 @@ msgid ""
 "No source drive could be found.\n"
 "\n"
 "You can try downloading the required installation image."
-msgstr ""
+msgstr "Nem található forrásmeghajtó.\n\nMegpróbálhatod letölteni a szükséges telepítési képet."
 
 #: main.c:456
 msgid ""
 "Please make sure to connect your machine to a network and the installer will"
 " try connect to acquire an IP address."
-msgstr ""
+msgstr "Ellenőrizd, hogy a gép csatlakozik a hálózathoz és a telepítő megpróbál csatlakozni."
 
 #: main.c:460
 msgid "Download installation image"
-msgstr ""
+msgstr "Telepítési kép letöltése"
 
 #: main.c:473
 msgid "Trying to start networking (DHCP)..."
-msgstr ""
+msgstr "Kísérlet a hálózat elindítására (DHCP)..."
 
 #: main.c:484
 msgid ""
 "Networking could not be started but is required to go on with the installation.\n"
 "\n"
 "Please connect your machine to a network with a DHCP server and retry."
-msgstr ""
+msgstr "A hálózat nem indult el, de szükséges a telepítéshez.\n\nCsatlakoztasd a gépet egy DHCP-vel rendelkező hálózathoz és próbáld újra."
 
 #: main.c:487 main.c:516
 msgid "Retry"
-msgstr ""
+msgstr "Újból"
 
 #: main.c:501
 msgid "Downloading installation image..."
-msgstr ""
+msgstr "Telepítési kép letöltése..."
 
 #: main.c:510
 #, c-format
 msgid "MD5 checksum mismatch"
-msgstr ""
+msgstr "MD5 ellenőrzés sikertelen"
 
 #: main.c:513
 #, c-format
@@ -116,44 +117,44 @@ msgid ""
 "  Reason: %s\n"
 "\n"
 "%s"
-msgstr ""
+msgstr "A telepítési kép nem letölthető.\nOk: %s\n\n%s"
 
 #: main.c:528
 #, c-format
 msgid ""
 "Could not mount %s to %s:\n"
 "  %s\n"
-msgstr ""
+msgstr "Nem sikerült csatolni %s ide %s:\n  %s\n"
 
 #: main.c:543
 msgid "License Agreement"
-msgstr ""
+msgstr "Liszensz elfogadás"
 
 #: main.c:544
 msgid "License not accepted!"
-msgstr ""
+msgstr "A liszenszt nem fogadtad el!"
 
 #: main.c:566
 msgid "No hard disk found."
-msgstr ""
+msgstr "Nem található lemez."
 
 #: main.c:587
 msgid "Disk Selection"
-msgstr ""
+msgstr "Lemez kiválasztása"
 
 #: main.c:588
 msgid ""
 "Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n"
 "\n"
 "ALL DATA ON THE DISK WILL BE DESTROYED."
-msgstr ""
+msgstr "Válaszd ki a meghajtó(ka)t, ahova az IPFire települjön. Újra lesznek partícionálva és formázásra kerülnek.\n\nMINDEN KORÁBBI ADAT A MEGHAJTÓN MEG FOG SEMMISÜLNI!"
 
 #: main.c:599
 msgid ""
 "No disk has been selected.\n"
 "\n"
 "Please select one or more disks you want to install IPFire on."
-msgstr ""
+msgstr "Nincs meghajtó kiválasztva.\n\nVálassz ki legalább egy meghajtót, ahova az IPFire-t telepítenéd."
 
 #: main.c:617
 #, c-format
@@ -163,15 +164,15 @@ msgid ""
 "  %s\n"
 "\n"
 "Do you agree to continue?"
-msgstr ""
+msgstr "A telepítő most be fogja állítani a következő meghajtót:\n\n%s\n\nBiztos, hogy folytatod?"
 
 #: main.c:619
 msgid "Disk Setup"
-msgstr ""
+msgstr "Lemez beállítása"
 
 #: main.c:620 main.c:630
 msgid "Delete all data"
-msgstr ""
+msgstr "Minden adat törtlése"
 
 #: main.c:627
 #, c-format
@@ -182,131 +183,131 @@ msgid ""
 "  %s\n"
 "\n"
 "Do you agree to continue?"
-msgstr ""
+msgstr "A telepítő most beállítja a RAID tömböket a következő meghajtókon:\n\n%s\n%s\n\nBiztos, hogy folytatod?"
 
 #: main.c:629
 msgid "RAID Setup"
-msgstr ""
+msgstr "RAID Beállítás"
 
 #: main.c:640
 msgid "Your disk configuration is currently not supported."
-msgstr ""
+msgstr "A meghajtóbeállításod nem támogatott."
 
 #: main.c:655
 msgid "Your harddisk is too small."
-msgstr ""
+msgstr "A meghajtód túl kicsi."
 
 #: main.c:671
 msgid ""
 "Your harddisk is very small, but you can continue without a swap partition."
-msgstr ""
+msgstr "A meghajtód túl kicsi, de folytathatod swap partíció nélkül."
 
 #: main.c:684
 msgid "ext4 Filesystem"
-msgstr ""
+msgstr "ext4 fájlrendszer"
 
 #: main.c:685
 msgid "ext4 Filesystem without journal"
-msgstr ""
+msgstr "ext4 fájlrendszer naplók nélkül"
 
 #: main.c:686
 msgid "XFS Filesystem"
-msgstr ""
+msgstr "XFS fájlrendszer"
 
 #: main.c:687
 msgid "ReiserFS Filesystem"
-msgstr ""
+msgstr "ReiserFS fájlrendszer"
 
 #: main.c:701
 msgid "Filesystem Selection"
-msgstr ""
+msgstr "Fájlrendszer Kiválasztása"
 
 #: main.c:701
 msgid "Please choose your filesystem:"
-msgstr ""
+msgstr "Válaszd ki a fájlrendszert:"
 
 #: main.c:712
 msgid "Building RAID..."
-msgstr ""
+msgstr "RAID felépítése..."
 
 #: main.c:716
 msgid "Unable to build the RAID."
-msgstr ""
+msgstr "A RAID felépítése sikertelen."
 
 #: main.c:728
 msgid "Partitioning disk..."
-msgstr ""
+msgstr "Lemez partícionálása..."
 
 #: main.c:732
 msgid "Unable to partition the disk."
-msgstr ""
+msgstr "A lemez partícionálása sikertelen."
 
 #: main.c:739
 msgid "Creating filesystems..."
-msgstr ""
+msgstr "Fájlrendszerek lértehozása..."
 
 #: main.c:743
 msgid "Unable to create filesystems."
-msgstr ""
+msgstr "A fájlrendszerek létrehozása sikertelen."
 
 #: main.c:749
 msgid "Unable to mount filesystems."
-msgstr ""
+msgstr "A fájlrendszerek csatolása sikertelen."
 
 #: main.c:760
 msgid "Installing the system..."
-msgstr ""
+msgstr "A rendszer telepítése..."
 
 #: main.c:761
 msgid "Unable to install the system."
-msgstr ""
+msgstr "A rendszer telepítése sikertelen."
 
 #: main.c:777
 msgid "Installing the language cache..."
-msgstr ""
+msgstr "A nyelv telepítése..."
 
 #: main.c:778
 msgid "Unable to install the language cache."
-msgstr ""
+msgstr "A nyelv telepítése sikertelen."
 
 #: main.c:783
 msgid "Installing the bootloader..."
-msgstr ""
+msgstr "A rendszertöltő telepítése..."
 
 #: main.c:790
 msgid "Unable to open /etc/default/grub for writing."
-msgstr ""
+msgstr "Nem sikerült megnyitni írásra: /etc/default/grub"
 
 #: main.c:812
 msgid "Unable to install the bootloader."
-msgstr ""
+msgstr "A rendszertöltő telepítése sikertelen."
 
 #: main.c:826
 msgid ""
 "A backup file has been found on the installation image.\n"
 "\n"
 "Do you want to restore the backup?"
-msgstr ""
+msgstr "A telepítő tartalmaz biztonsági mentést.\n\nVisszaállítod?"
 
 #: main.c:827
 msgid "Yes"
-msgstr ""
+msgstr "Igen"
 
 #: main.c:827
 msgid "No"
-msgstr ""
+msgstr "Nem"
 
 #: main.c:834
 msgid "An error occured when the backup file was restored."
-msgstr ""
+msgstr "Hiba a biztosnági mentés visszaállítása során."
 
 #: main.c:869
 msgid "Running post-install script..."
-msgstr ""
+msgstr "Telepítés utáni szkript futtatása..."
 
 #: main.c:870
 msgid "Post-install script failed."
-msgstr ""
+msgstr "A telepítés utáni szkript futtatása sikertelen."
 
 #: main.c:877
 #, c-format
@@ -314,16 +315,16 @@ msgid ""
 "%s was successfully installed!\n"
 "\n"
 "Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
-msgstr ""
+msgstr "%s sikeresen feltelepült!\n\nTávolítsd el a telepítő médiát a gépből és nyomj Újraindítás-t. Első indításkor meg kell adnod a hálózati beállításokat és a rendszerjelszavakat. Ezek után már böngészőből is be tudsz jelentkezni a https://%s:444 címen (vagy ahogy elnevezted a gépet: %s) és konfigurálni a rendszert."
 
 #: main.c:882
 msgid "Congratulations!"
-msgstr ""
+msgstr "Gratulálok!"
 
 #: main.c:882
 msgid "Reboot"
-msgstr ""
+msgstr "Újraindítás"
 
 #: main.c:893
 msgid "Setup has failed. Press Ok to reboot."
-msgstr ""
+msgstr "A beállítás sikertelen. Nyomj Rendben-t az újraindításhoz."
index e4cc4c18e499a9274a9397185b142b69feda52cd..96f3d4de2178a127ad1e41a24ce03fdf925ac796 100644 (file)
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2014-11-05 01:33+0000\n"
+"PO-Revision-Date: 2017-08-03 19:28+0000\n"
 "Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
-"Language-Team: Indonesian (http://www.transifex.com/projects/p/ipfire/language/id/)\n"
+"Language-Team: Indonesian (http://www.transifex.com/mstremer/ipfire/language/id/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index d938f37e1329b9b631169b4350618ebfbad59a40..730ab70df776486a8e779912222cd55b097003af 100644 (file)
@@ -10,9 +10,9 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2014-12-06 18:41+0000\n"
+"PO-Revision-Date: 2017-09-20 08:56+0000\n"
 "Last-Translator: Gabriele\n"
-"Language-Team: Italian (http://www.transifex.com/projects/p/ipfire/language/it/)\n"
+"Language-Team: Italian (http://www.transifex.com/mstremer/ipfire/language/it/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index 5a14029690356241897e8b337c2a647f699b5348..f45b101d8c62f5c9737589ad05abf7ac0b607c49 100644 (file)
@@ -3,14 +3,15 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# Ronny Heinrich <heinrich@matsumoto-wadokueikyoushitsu.com>, 2016
 msgid ""
 msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2014-11-05 01:33+0000\n"
-"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
-"Language-Team: Japanese (http://www.transifex.com/projects/p/ipfire/language/ja/)\n"
+"PO-Revision-Date: 2017-09-20 08:56+0000\n"
+"Last-Translator: Ronny Heinrich <heinrich@matsumoto-wadokueikyoushitsu.com>\n"
+"Language-Team: Japanese (http://www.transifex.com/mstremer/ipfire/language/ja/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -19,36 +20,36 @@ msgstr ""
 
 #: main.c:78 main.c:179 main.c:404 main.c:670 main.c:702 main.c:893
 msgid "OK"
-msgstr ""
+msgstr "OK"
 
 #: main.c:79 main.c:460 main.c:487 main.c:516 main.c:620 main.c:630 main.c:670
 #: main.c:702
 msgid "Cancel"
-msgstr ""
+msgstr "キャンセル"
 
 #: main.c:176
 msgid "I accept this license"
-msgstr ""
+msgstr "このライセンスを応諾する。"
 
 #: main.c:384
 msgid "Warning: Unattended installation will start in 10 seconds..."
-msgstr ""
+msgstr "注意:10秒後、自動でのインストールが開始する・・・"
 
 #: main.c:403
 msgid "Language selection"
-msgstr ""
+msgstr "言語選択"
 
 #: main.c:403
 msgid "Select the language you wish to use for the installation."
-msgstr ""
+msgstr "インストール言語を選んで下さい。"
 
 #: main.c:418
 msgid "Unattended mode"
-msgstr ""
+msgstr "自動でのインストール・モード"
 
 #: main.c:420
 msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
-msgstr ""
+msgstr "<Tab>/<Alt-Tab> エレメントの間 | <Space> 選択 | <F12> 次の画面"
 
 #: main.c:426
 #, c-format
@@ -56,16 +57,16 @@ msgid ""
 "Welcome to the %s installation program.\n"
 "\n"
 "Selecting Cancel on any of the following screens will reboot the computer."
-msgstr ""
+msgstr "%s のインストール・プログラムへようこそ。\n\n次の画面の1つで、キャンセルを選ぶと、パソコンの再起動になります。"
 
 #: main.c:428
 msgid "Start installation"
-msgstr ""
+msgstr "インストールを実行する"
 
 #: main.c:449
 #, c-format
 msgid "The installer will now try downloading the installation image."
-msgstr ""
+msgstr "インストーラーはインストール・イメージをダウンロードしてみます。"
 
 #: main.c:452
 #, c-format
@@ -73,41 +74,41 @@ msgid ""
 "No source drive could be found.\n"
 "\n"
 "You can try downloading the required installation image."
-msgstr ""
+msgstr "ソース・ドライブが見つかりませんでした。\n\n必要なインストール・イメージをダウンロードしてみてください。"
 
 #: main.c:456
 msgid ""
 "Please make sure to connect your machine to a network and the installer will"
 " try connect to acquire an IP address."
-msgstr ""
+msgstr "パソコンはネットワークと接続したかを確認してください。インストーラーは接続して、IPアドレスを得ってみます。"
 
 #: main.c:460
 msgid "Download installation image"
-msgstr ""
+msgstr "インストール・イメージをダウンロードしています。"
 
 #: main.c:473
 msgid "Trying to start networking (DHCP)..."
-msgstr ""
+msgstr "ネットワークと接続しています(DHCP)・・・"
 
 #: main.c:484
 msgid ""
 "Networking could not be started but is required to go on with the installation.\n"
 "\n"
 "Please connect your machine to a network with a DHCP server and retry."
-msgstr ""
+msgstr "ネットワークと接続が出来ませんでしたが、インストールを綴れるために必要です。\n\nパソコンをDHCPサーバーがあるネットワークと接続して、実行直して下さい。"
 
 #: main.c:487 main.c:516
 msgid "Retry"
-msgstr ""
+msgstr "実行直し"
 
 #: main.c:501
 msgid "Downloading installation image..."
-msgstr ""
+msgstr "インストール・イメージをダウンロードしています・・・"
 
 #: main.c:510
 #, c-format
 msgid "MD5 checksum mismatch"
-msgstr ""
+msgstr "MD5検査合計が不正です。"
 
 #: main.c:513
 #, c-format
@@ -116,44 +117,44 @@ msgid ""
 "  Reason: %s\n"
 "\n"
 "%s"
-msgstr ""
+msgstr "インストール・イメージが正規にダウンロードが出来ませんでした。\n原因:%s\n\n%s"
 
 #: main.c:528
 #, c-format
 msgid ""
 "Could not mount %s to %s:\n"
 "  %s\n"
-msgstr ""
+msgstr "%s は %s にマウントが出来ませんでした:\n%s\n"
 
 #: main.c:543
 msgid "License Agreement"
-msgstr ""
+msgstr "ライセンス・アグリーメント"
 
 #: main.c:544
 msgid "License not accepted!"
-msgstr ""
+msgstr "ライセンスを否定しました!"
 
 #: main.c:566
 msgid "No hard disk found."
-msgstr ""
+msgstr "ハード・ディスクを見つかりませんでした。"
 
 #: main.c:587
 msgid "Disk Selection"
-msgstr ""
+msgstr "ハード・ディスクの選択"
 
 #: main.c:588
 msgid ""
 "Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n"
 "\n"
 "ALL DATA ON THE DISK WILL BE DESTROYED."
-msgstr ""
+msgstr "IPFireをインストールハードデスクを選んで下さい。その選んだハードデスクではパーティションをしてから、ファイルシステムを作成します。\n\n注意:このパスワードの全てののデータは解除しています!!"
 
 #: main.c:599
 msgid ""
 "No disk has been selected.\n"
 "\n"
 "Please select one or more disks you want to install IPFire on."
-msgstr ""
+msgstr "ハードデスクが選択しませんでした。\n\nIPFireをインストールハードデスクを選んでください。"
 
 #: main.c:617
 #, c-format
@@ -163,15 +164,15 @@ msgid ""
 "  %s\n"
 "\n"
 "Do you agree to continue?"
-msgstr ""
+msgstr "インストーラーは下記の選んだハードデスクを準備しています:\n\n  %s\n\n続けを応諾していますか。"
 
 #: main.c:619
 msgid "Disk Setup"
-msgstr ""
+msgstr "ディスク設定"
 
 #: main.c:620 main.c:630
 msgid "Delete all data"
-msgstr ""
+msgstr "全てのデータを解除しています。"
 
 #: main.c:627
 #, c-format
@@ -182,131 +183,131 @@ msgid ""
 "  %s\n"
 "\n"
 "Do you agree to continue?"
-msgstr ""
+msgstr "インストーラーは下記の選んだハードデスクでRAIDコンフィグレーションを実行しています:\n\n  %s\n  %s\n\n続けを応諾していますか。"
 
 #: main.c:629
 msgid "RAID Setup"
-msgstr ""
+msgstr "RAID設定"
 
 #: main.c:640
 msgid "Your disk configuration is currently not supported."
-msgstr ""
+msgstr "現在、貴方のディスクコンフィグレーションが使用出来ません。"
 
 #: main.c:655
 msgid "Your harddisk is too small."
-msgstr ""
+msgstr "ハードデスクの空スペースが不足です。"
 
 #: main.c:671
 msgid ""
 "Your harddisk is very small, but you can continue without a swap partition."
-msgstr ""
+msgstr "ハードデスクのスペースが少ないですが、スワップ無い状態で続けることが出来ます。"
 
 #: main.c:684
 msgid "ext4 Filesystem"
-msgstr ""
+msgstr "ext4ファイルシステム"
 
 #: main.c:685
 msgid "ext4 Filesystem without journal"
-msgstr ""
+msgstr "ext4ファイルシステム ジャーナル無い"
 
 #: main.c:686
 msgid "XFS Filesystem"
-msgstr ""
+msgstr "XFSファイルシステム"
 
 #: main.c:687
 msgid "ReiserFS Filesystem"
-msgstr ""
+msgstr "ReiserFSファイルシステム"
 
 #: main.c:701
 msgid "Filesystem Selection"
-msgstr ""
+msgstr "ファイルシステム選択"
 
 #: main.c:701
 msgid "Please choose your filesystem:"
-msgstr ""
+msgstr "使用したいファイルシステムを選んで下さい:"
 
 #: main.c:712
 msgid "Building RAID..."
-msgstr ""
+msgstr "RAIDを作成しています・・・"
 
 #: main.c:716
 msgid "Unable to build the RAID."
-msgstr ""
+msgstr "RAIDが作成出来ませんでした。"
 
 #: main.c:728
 msgid "Partitioning disk..."
-msgstr ""
+msgstr "ディスクをパーティションしています・・・"
 
 #: main.c:732
 msgid "Unable to partition the disk."
-msgstr ""
+msgstr "ディスクがパーティション出来ませんでした。"
 
 #: main.c:739
 msgid "Creating filesystems..."
-msgstr ""
+msgstr "ファイルシステムを作成しています・・・"
 
 #: main.c:743
 msgid "Unable to create filesystems."
-msgstr ""
+msgstr "ファイルシステムが作成出来ませんでした。"
 
 #: main.c:749
 msgid "Unable to mount filesystems."
-msgstr ""
+msgstr "ファイルシステムがマウント出来ませんでした。"
 
 #: main.c:760
 msgid "Installing the system..."
-msgstr ""
+msgstr "システムをインストールしています・・・"
 
 #: main.c:761
 msgid "Unable to install the system."
-msgstr ""
+msgstr "システムがインストール出来ませんでした。"
 
 #: main.c:777
 msgid "Installing the language cache..."
-msgstr ""
+msgstr "言語キャッシュをインストールしています・・・"
 
 #: main.c:778
 msgid "Unable to install the language cache."
-msgstr ""
+msgstr "言語キャッシュがインストール出来ませんでした。"
 
 #: main.c:783
 msgid "Installing the bootloader..."
-msgstr ""
+msgstr "ブートローダをインストールしています・・・"
 
 #: main.c:790
 msgid "Unable to open /etc/default/grub for writing."
-msgstr ""
+msgstr "書き込む為、/etc/default/grubが開けませんでした。"
 
 #: main.c:812
 msgid "Unable to install the bootloader."
-msgstr ""
+msgstr "ブートローダがインストール出来ませんでした。"
 
 #: main.c:826
 msgid ""
 "A backup file has been found on the installation image.\n"
 "\n"
 "Do you want to restore the backup?"
-msgstr ""
+msgstr "インストール・イメージでバック・アップファイルが発見しました。\n\nバック・アップをリストアしてほしいですか。"
 
 #: main.c:827
 msgid "Yes"
-msgstr ""
+msgstr "はい"
 
 #: main.c:827
 msgid "No"
-msgstr ""
+msgstr "いいえ"
 
 #: main.c:834
 msgid "An error occured when the backup file was restored."
-msgstr ""
+msgstr "バック・アップをリストア中、エラーが発生しました。"
 
 #: main.c:869
 msgid "Running post-install script..."
-msgstr ""
+msgstr "インストール後のスクリプトを実行しています・・・"
 
 #: main.c:870
 msgid "Post-install script failed."
-msgstr ""
+msgstr "インストール後のスクリプトが実行出来ませんでした。"
 
 #: main.c:877
 #, c-format
@@ -314,16 +315,16 @@ msgid ""
 "%s was successfully installed!\n"
 "\n"
 "Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
-msgstr ""
+msgstr "%s は正規にインストールしました!\n\nこのシステムから全てのインストール・メディアを外して、再起動ボタンを押してください。再起動したら、ネットワーク及びシステム・パスワードの設定で続けです。終了したら、ウェッブ・コンフィグレーション・コンソールの為、ウェッブ・ブラウザーにhttps://%s:444 (とか自分で %sに上げた名前) を記入して下さい。"
 
 #: main.c:882
 msgid "Congratulations!"
-msgstr ""
+msgstr "お疲れ様でした!"
 
 #: main.c:882
 msgid "Reboot"
-msgstr ""
+msgstr "再起動"
 
 #: main.c:893
 msgid "Setup has failed. Press Ok to reboot."
-msgstr ""
+msgstr "設定のエラーが発生しました。再起動の為、OKボタンを押して下さい。"
index 333dea3d3b50b769a59a397b9856c913a791de85..0cee8b50917c3ff97c45a75e4d2d0c1dfaaaff9b 100644 (file)
@@ -10,7 +10,7 @@ msgstr ""
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
 "PO-Revision-Date: 2014-07-31 09:39+0000\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: Javanese (http://www.transifex.com/projects/p/ipfire/language/jv/)\n"
+"Language-Team: Javanese (http://www.transifex.com/mstremer/ipfire/language/jv/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index b4e5f89660a6e08359757bdb37a6e2eb83fc662a..a7e10a5144ad44819b9568d6d18b008905386254 100644 (file)
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2014-11-05 01:33+0000\n"
+"PO-Revision-Date: 2017-08-03 19:28+0000\n"
 "Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
-"Language-Team: Khmer (Cambodia) (http://www.transifex.com/projects/p/ipfire/language/km_KH/)\n"
+"Language-Team: Khmer (Cambodia) (http://www.transifex.com/mstremer/ipfire/language/km_KH/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index 009e9c4e1a2def5c4fab8efb180ce7b214fce7f5..eab31aa150c56da6185eb641725b76d1c5a48932 100644 (file)
@@ -9,9 +9,9 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2015-01-26 07:37+0000\n"
+"PO-Revision-Date: 2017-09-20 08:56+0000\n"
 "Last-Translator: Jacques Hylkema <j.hylkema@intronics.nl>\n"
-"Language-Team: Dutch (http://www.transifex.com/projects/p/ipfire/language/nl/)\n"
+"Language-Team: Dutch (http://www.transifex.com/mstremer/ipfire/language/nl/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index 056eea142157300b4555d8e03c9bd6e404772175..6a5fc1f990ddb60f88dd39bf6c7fcf746e37a288 100644 (file)
@@ -4,21 +4,21 @@
 # 
 # Translators:
 # btelega <btelega@gmail.com>, 2014
-# Przemysław Karpeta <przemyslaw.karpeta@gmail.com>, 2014
+# Przemyslaw Ka. <przemyslaw.karpeta@gmail.com>, 2014
 # Przemyslaw Zdroik <zdroyer@gmail.com>, 2015
 msgid ""
 msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2015-01-26 10:41+0000\n"
+"PO-Revision-Date: 2017-09-20 08:56+0000\n"
 "Last-Translator: Przemyslaw Zdroik <zdroyer@gmail.com>\n"
-"Language-Team: Polish (http://www.transifex.com/projects/p/ipfire/language/pl/)\n"
+"Language-Team: Polish (http://www.transifex.com/mstremer/ipfire/language/pl/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Language: pl\n"
-"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
 
 #: main.c:78 main.c:179 main.c:404 main.c:670 main.c:702 main.c:893
 msgid "OK"
index e78c1b452170fc9363e1b1762cc2bdb2b051fdc5..f9140e56103551c14644155ed1ed9710cb9d244f 100644 (file)
@@ -12,9 +12,9 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2015-03-24 21:30+0000\n"
+"PO-Revision-Date: 2017-09-23 20:08+0000\n"
 "Last-Translator: Moisés Bites Borges de Castro <moisesbites@gmail.com>\n"
-"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/ipfire/language/pt_BR/)\n"
+"Language-Team: Portuguese (Brazil) (http://www.transifex.com/mstremer/ipfire/language/pt_BR/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index 5b70188fc086d99a3de5d4181738b9b3d8ed37e2..625115742c73beaaf237999085b81855024a331a 100644 (file)
@@ -3,14 +3,15 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# André Pinto <andrerafaelpinto@hotmail.com>, 2015
 msgid ""
 msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2014-11-05 01:33+0000\n"
-"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
-"Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/ipfire/language/pt_PT/)\n"
+"PO-Revision-Date: 2017-09-20 08:56+0000\n"
+"Last-Translator: André Pinto <andrerafaelpinto@hotmail.com>\n"
+"Language-Team: Portuguese (Portugal) (http://www.transifex.com/mstremer/ipfire/language/pt_PT/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -24,11 +25,11 @@ msgstr ""
 #: main.c:79 main.c:460 main.c:487 main.c:516 main.c:620 main.c:630 main.c:670
 #: main.c:702
 msgid "Cancel"
-msgstr ""
+msgstr "Cancelar"
 
 #: main.c:176
 msgid "I accept this license"
-msgstr ""
+msgstr "Aceito esta licença"
 
 #: main.c:384
 msgid "Warning: Unattended installation will start in 10 seconds..."
index 6601c0b9e78bf2e7fb06a4223dd627edacfc37b2..57294a3000921cda7b71984eb3a32b7664673fb3 100644 (file)
@@ -3,14 +3,15 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# robert lasic <robertlasic@gmail.com>, 2016
 msgid ""
 msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2014-11-05 01:33+0000\n"
-"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
-"Language-Team: Romanian (Romania) (http://www.transifex.com/projects/p/ipfire/language/ro_RO/)\n"
+"PO-Revision-Date: 2017-09-20 08:56+0000\n"
+"Last-Translator: robert lasic <robertlasic@gmail.com>\n"
+"Language-Team: Romanian (Romania) (http://www.transifex.com/mstremer/ipfire/language/ro_RO/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -19,36 +20,36 @@ msgstr ""
 
 #: main.c:78 main.c:179 main.c:404 main.c:670 main.c:702 main.c:893
 msgid "OK"
-msgstr ""
+msgstr "OK"
 
 #: main.c:79 main.c:460 main.c:487 main.c:516 main.c:620 main.c:630 main.c:670
 #: main.c:702
 msgid "Cancel"
-msgstr ""
+msgstr "Anulare"
 
 #: main.c:176
 msgid "I accept this license"
-msgstr ""
+msgstr "Accept aceasta licenta"
 
 #: main.c:384
 msgid "Warning: Unattended installation will start in 10 seconds..."
-msgstr ""
+msgstr "Avertisment: Instalare neasistata va porni in 10 secunde..."
 
 #: main.c:403
 msgid "Language selection"
-msgstr ""
+msgstr "Selectare limba"
 
 #: main.c:403
 msgid "Select the language you wish to use for the installation."
-msgstr ""
+msgstr "Alege limba care vrei sa o folosesti pentru aceasta instalare"
 
 #: main.c:418
 msgid "Unattended mode"
-msgstr ""
+msgstr "Mode neasistat"
 
 #: main.c:420
 msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
-msgstr ""
+msgstr "<Tab>/<Alt-Tab> navigare intre elemente | <Space> selectare | <F12> urmatorul ecran"
 
 #: main.c:426
 #, c-format
@@ -56,16 +57,16 @@ msgid ""
 "Welcome to the %s installation program.\n"
 "\n"
 "Selecting Cancel on any of the following screens will reboot the computer."
-msgstr ""
+msgstr "Bine a-ti venit la %s instalare program.\n\nSelectare Cancel in oricare din urmatoarele ecrane duce la repornire calculator."
 
 #: main.c:428
 msgid "Start installation"
-msgstr ""
+msgstr "Pornire instalare"
 
 #: main.c:449
 #, c-format
 msgid "The installer will now try downloading the installation image."
-msgstr ""
+msgstr "Instalatorul va incerca acum sa descarce imaginea pentru instalare"
 
 #: main.c:452
 #, c-format
@@ -73,41 +74,41 @@ msgid ""
 "No source drive could be found.\n"
 "\n"
 "You can try downloading the required installation image."
-msgstr ""
+msgstr "Nu a fost gasit nici un disk sursa.\n\nPoti sa incerci sa descarci imaginea pentru instalare necesara."
 
 #: main.c:456
 msgid ""
 "Please make sure to connect your machine to a network and the installer will"
 " try connect to acquire an IP address."
-msgstr ""
+msgstr "Asigura conexiune in retea si instalatorul va incerca sa se conecteze si sa ia adresa de IP."
 
 #: main.c:460
 msgid "Download installation image"
-msgstr ""
+msgstr "Descarca imaginea de instalare"
 
 #: main.c:473
 msgid "Trying to start networking (DHCP)..."
-msgstr ""
+msgstr "Se incearca sa se porneasca reteaua (DHCP)..."
 
 #: main.c:484
 msgid ""
 "Networking could not be started but is required to go on with the installation.\n"
 "\n"
 "Please connect your machine to a network with a DHCP server and retry."
-msgstr ""
+msgstr "Reteaua nu s-a putut porni dar este necesar sa continui cu instalarea.\n\nConecteaza calculatorulbin retea la server de  DHCP si reincearca."
 
 #: main.c:487 main.c:516
 msgid "Retry"
-msgstr ""
+msgstr "Reincearca"
 
 #: main.c:501
 msgid "Downloading installation image..."
-msgstr ""
+msgstr "Se descarca imaginea de instalare"
 
 #: main.c:510
 #, c-format
 msgid "MD5 checksum mismatch"
-msgstr ""
+msgstr "Nepotrivire verificare MD5"
 
 #: main.c:513
 #, c-format
@@ -116,44 +117,44 @@ msgid ""
 "  Reason: %s\n"
 "\n"
 "%s"
-msgstr ""
+msgstr "Imaginea de instalat nu a putut fi descarcata.\nMotiv: %s\n\n%s"
 
 #: main.c:528
 #, c-format
 msgid ""
 "Could not mount %s to %s:\n"
 "  %s\n"
-msgstr ""
+msgstr "Nu s-a putut monta %s pe %s:\n%s\n"
 
 #: main.c:543
 msgid "License Agreement"
-msgstr ""
+msgstr "Acceptare Licenta"
 
 #: main.c:544
 msgid "License not accepted!"
-msgstr ""
+msgstr "Licenta neacceptata!"
 
 #: main.c:566
 msgid "No hard disk found."
-msgstr ""
+msgstr "Nu s-a gasit nici un hard disk."
 
 #: main.c:587
 msgid "Disk Selection"
-msgstr ""
+msgstr "Selectie disk"
 
 #: main.c:588
 msgid ""
 "Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n"
 "\n"
 "ALL DATA ON THE DISK WILL BE DESTROYED."
-msgstr ""
+msgstr "Selecteaza disk(uri) pe care vrei sa instalezi IPFire. Pentru inceput vor fi partitionate, apoi partitiile vor avea pe ele fisiere system.\n\nTOATE DATELE DE PE DISK VOR FI DISTRUSE."
 
 #: main.c:599
 msgid ""
 "No disk has been selected.\n"
 "\n"
 "Please select one or more disks you want to install IPFire on."
-msgstr ""
+msgstr "Nu s-a selectat nici un disk.\n\nAlege unul sau mai multe disk-uri pe care vrei sa instalezi IPFire."
 
 #: main.c:617
 #, c-format
@@ -163,15 +164,15 @@ msgid ""
 "  %s\n"
 "\n"
 "Do you agree to continue?"
-msgstr ""
+msgstr "Programul de instalare v-a pregati acum harddisk-ul ales:\n\n%s\n\nEsti de acord sa continuui?"
 
 #: main.c:619
 msgid "Disk Setup"
-msgstr ""
+msgstr "Configurare disk"
 
 #: main.c:620 main.c:630
 msgid "Delete all data"
-msgstr ""
+msgstr "Sterge toate datele"
 
 #: main.c:627
 #, c-format
@@ -182,131 +183,131 @@ msgid ""
 "  %s\n"
 "\n"
 "Do you agree to continue?"
-msgstr ""
+msgstr "Programul de instalare va configura acum configuratia  RAID pe harddisk-urile selectate:\n\n%s\n%s\n\nEsti de acord sa continui?"
 
 #: main.c:629
 msgid "RAID Setup"
-msgstr ""
+msgstr "Configurare RAID"
 
 #: main.c:640
 msgid "Your disk configuration is currently not supported."
-msgstr ""
+msgstr "Configuratia curenta a disk-urilor nu e suportata."
 
 #: main.c:655
 msgid "Your harddisk is too small."
-msgstr ""
+msgstr "Harddisk-ul tau e prea mic."
 
 #: main.c:671
 msgid ""
 "Your harddisk is very small, but you can continue without a swap partition."
-msgstr ""
+msgstr "Harddisk-ul tau e foarte mic, dar poti sa continui fara partitie swap."
 
 #: main.c:684
 msgid "ext4 Filesystem"
-msgstr ""
+msgstr "Sistem de fisiere ext4"
 
 #: main.c:685
 msgid "ext4 Filesystem without journal"
-msgstr ""
+msgstr "Sistem de fisiere ext4 fara jurnal"
 
 #: main.c:686
 msgid "XFS Filesystem"
-msgstr ""
+msgstr "Sistem de fisier XFS"
 
 #: main.c:687
 msgid "ReiserFS Filesystem"
-msgstr ""
+msgstr "Sistem de fisier ReiserFS"
 
 #: main.c:701
 msgid "Filesystem Selection"
-msgstr ""
+msgstr "Selectare Sistem de fisier"
 
 #: main.c:701
 msgid "Please choose your filesystem:"
-msgstr ""
+msgstr "Alege Sistemul de  fisiere:"
 
 #: main.c:712
 msgid "Building RAID..."
-msgstr ""
+msgstr "Creare RAID..."
 
 #: main.c:716
 msgid "Unable to build the RAID."
-msgstr ""
+msgstr "Nu s-a putut creea RAID."
 
 #: main.c:728
 msgid "Partitioning disk..."
-msgstr ""
+msgstr "Partitionare disk..."
 
 #: main.c:732
 msgid "Unable to partition the disk."
-msgstr ""
+msgstr "Nu s-a putut partitiona disk-ul."
 
 #: main.c:739
 msgid "Creating filesystems..."
-msgstr ""
+msgstr "Creeare fisiere sistem..."
 
 #: main.c:743
 msgid "Unable to create filesystems."
-msgstr ""
+msgstr "Nu s-au putut creea fisierele sistem."
 
 #: main.c:749
 msgid "Unable to mount filesystems."
-msgstr ""
+msgstr "Nu s-au putut monta fisierele sistem."
 
 #: main.c:760
 msgid "Installing the system..."
-msgstr ""
+msgstr "Instalare sistem..."
 
 #: main.c:761
 msgid "Unable to install the system."
-msgstr ""
+msgstr "Nu s-a putut instala sistemul."
 
 #: main.c:777
 msgid "Installing the language cache..."
-msgstr ""
+msgstr "Instalare limba..."
 
 #: main.c:778
 msgid "Unable to install the language cache."
-msgstr ""
+msgstr "Nu s-a putut instala limba."
 
 #: main.c:783
 msgid "Installing the bootloader..."
-msgstr ""
+msgstr "Instalare bootloader..."
 
 #: main.c:790
 msgid "Unable to open /etc/default/grub for writing."
-msgstr ""
+msgstr "Nu se poate deschide /etc/default/grub pentru scriere."
 
 #: main.c:812
 msgid "Unable to install the bootloader."
-msgstr ""
+msgstr "Nu s-a putut instala bootloader."
 
 #: main.c:826
 msgid ""
 "A backup file has been found on the installation image.\n"
 "\n"
 "Do you want to restore the backup?"
-msgstr ""
+msgstr "O copie de siguranta s-a gasit in imaginea de instalare.\n\nVrei sa restaurezi copia de siguranta?"
 
 #: main.c:827
 msgid "Yes"
-msgstr ""
+msgstr "Da"
 
 #: main.c:827
 msgid "No"
-msgstr ""
+msgstr "Nu"
 
 #: main.c:834
 msgid "An error occured when the backup file was restored."
-msgstr ""
+msgstr "A aparut o eroare la restaurarea copiei de siguranta."
 
 #: main.c:869
 msgid "Running post-install script..."
-msgstr ""
+msgstr "Se ruleaza codul post instalare..."
 
 #: main.c:870
 msgid "Post-install script failed."
-msgstr ""
+msgstr "Codul post instalare a esuat."
 
 #: main.c:877
 #, c-format
@@ -314,16 +315,16 @@ msgid ""
 "%s was successfully installed!\n"
 "\n"
 "Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
-msgstr ""
+msgstr "%s a fost instalat cu succes!\n\nElimina mediu de instalare din acest sistem si apasa butonul repornire. Dupa ce sistemul a reornit va trebui sa configurezi reteaua si parola sistemului. Dupa aceea, ar trebui sa verifici pagina web https://%s:444 (sau numele dat %s) pentru consola web de configurare."
 
 #: main.c:882
 msgid "Congratulations!"
-msgstr ""
+msgstr "Felicitari!"
 
 #: main.c:882
 msgid "Reboot"
-msgstr ""
+msgstr "Repornire"
 
 #: main.c:893
 msgid "Setup has failed. Press Ok to reboot."
-msgstr ""
+msgstr "Instalare esuata. Apasa OK pentru repornire."
index 1a6408c32c2fa1886ca12db2bc2153fed416951c..b11e2e9a0c66b2adda4ade3526bbea46faf9b295 100644 (file)
@@ -3,20 +3,20 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
-# ellviss <kpe1501@gmail.com>, 2015
+# ellviss <kpe1501@gmail.com>, 2015-2016
 msgid ""
 msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2015-02-24 12:56+0000\n"
+"PO-Revision-Date: 2017-09-20 08:56+0000\n"
 "Last-Translator: ellviss <kpe1501@gmail.com>\n"
-"Language-Team: Russian (http://www.transifex.com/projects/p/ipfire/language/ru/)\n"
+"Language-Team: Russian (http://www.transifex.com/mstremer/ipfire/language/ru/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Language: ru\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
 
 #: main.c:78 main.c:179 main.c:404 main.c:670 main.c:702 main.c:893
 msgid "OK"
@@ -95,7 +95,7 @@ msgid ""
 "Networking could not be started but is required to go on with the installation.\n"
 "\n"
 "Please connect your machine to a network with a DHCP server and retry."
-msgstr ""
+msgstr "Сеть не была включена, но она необходима для установки\n\nПожалуйста, подключите компьютер к сети с DHCP сервером и повторите попытку."
 
 #: main.c:487 main.c:516
 msgid "Retry"
@@ -117,7 +117,7 @@ msgid ""
 "  Reason: %s\n"
 "\n"
 "%s"
-msgstr ""
+msgstr "Не удаётся скачать установочный образ.\nПричина : %s\n\n%s"
 
 #: main.c:528
 #, c-format
@@ -147,14 +147,14 @@ msgid ""
 "Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n"
 "\n"
 "ALL DATA ON THE DISK WILL BE DESTROYED."
-msgstr ""
+msgstr "Выберете диск(и) , на который(е) вы хотите установить IPFIRE. Сначала будет проведена разметка разделов, а потом будет установлена файловая система.\n\nВсе данные на диске будут уничтожены."
 
 #: main.c:599
 msgid ""
 "No disk has been selected.\n"
 "\n"
 "Please select one or more disks you want to install IPFire on."
-msgstr ""
+msgstr "Не выбран диск.\n\nПожалуйста, выберете диск на который вы хотите поставить IPFIRE"
 
 #: main.c:617
 #, c-format
@@ -183,7 +183,7 @@ msgid ""
 "  %s\n"
 "\n"
 "Do you agree to continue?"
-msgstr ""
+msgstr "Программа установки сейчас настроит RAID на выбранных дисках:\n\n%s\n%s\n\nВы согласны продолжить ?"
 
 #: main.c:629
 msgid "RAID Setup"
index e0991825112d24e7617f09a6394277c2f13b534f..5eae4b55e950f15bc9f2ab004a0d3d587522814f 100644 (file)
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2014-11-05 01:33+0000\n"
+"PO-Revision-Date: 2017-08-03 19:28+0000\n"
 "Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
-"Language-Team: Kinyarwanda (http://www.transifex.com/projects/p/ipfire/language/rw/)\n"
+"Language-Team: Kinyarwanda (http://www.transifex.com/mstremer/ipfire/language/rw/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index 3766baea561850cd8e1fd7a642636b014c6f3dc1..b285caee3cae8da466fc5dc4d35b09f42a0ebab8 100644 (file)
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2014-11-05 01:33+0000\n"
+"PO-Revision-Date: 2017-08-03 19:28+0000\n"
 "Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
-"Language-Team: Slovak (http://www.transifex.com/projects/p/ipfire/language/sk/)\n"
+"Language-Team: Slovak (http://www.transifex.com/mstremer/ipfire/language/sk/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index af653fd84c324dd5722fe50536623d3e62358bb3..ef3f20d8eacf8547e806b4a13cf947843de51d1a 100644 (file)
@@ -3,14 +3,15 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# Ardit Dani <ardit.dani@gmail.com>, 2016
 msgid ""
 msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2014-11-05 01:33+0000\n"
-"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
-"Language-Team: Albanian (http://www.transifex.com/projects/p/ipfire/language/sq/)\n"
+"PO-Revision-Date: 2017-09-20 08:56+0000\n"
+"Last-Translator: Ardit Dani <ardit.dani@gmail.com>\n"
+"Language-Team: Albanian (http://www.transifex.com/mstremer/ipfire/language/sq/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -24,11 +25,11 @@ msgstr ""
 #: main.c:79 main.c:460 main.c:487 main.c:516 main.c:620 main.c:630 main.c:670
 #: main.c:702
 msgid "Cancel"
-msgstr ""
+msgstr "Anulo"
 
 #: main.c:176
 msgid "I accept this license"
-msgstr ""
+msgstr "Unë pranoj këtë liçencë "
 
 #: main.c:384
 msgid "Warning: Unattended installation will start in 10 seconds..."
@@ -60,7 +61,7 @@ msgstr ""
 
 #: main.c:428
 msgid "Start installation"
-msgstr ""
+msgstr "Fillo instalimin"
 
 #: main.c:449
 #, c-format
index 97fad59d433e04f37e79d5920aa38e4e9410985e..86dd1ef3abb82f34b638281c87d5d3dd7995167c 100644 (file)
@@ -10,7 +10,7 @@ msgstr ""
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
 "PO-Revision-Date: 2014-07-31 09:39+0000\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: Serbian (http://www.transifex.com/projects/p/ipfire/language/sr/)\n"
+"Language-Team: Serbian (http://www.transifex.com/mstremer/ipfire/language/sr/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index 758c337ea49215a66ecc7c1914f16ae535a954fe..fd66e4e52e3d121616274f2b1126ff62c31989b0 100644 (file)
@@ -10,7 +10,7 @@ msgstr ""
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
 "PO-Revision-Date: 2014-07-31 09:39+0000\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: Sundanese (http://www.transifex.com/projects/p/ipfire/language/su/)\n"
+"Language-Team: Sundanese (http://www.transifex.com/mstremer/ipfire/language/su/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index b0e5ae7cee3bfef7d879ec7726363b89aca34400..9cdc32bcb8eee4f5389b42d4f67563ca489271ea 100644 (file)
@@ -3,14 +3,15 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# Urban Berggren <pudberggren@icloud.com>, 2016
 msgid ""
 msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2014-11-05 01:33+0000\n"
-"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
-"Language-Team: Swedish (http://www.transifex.com/projects/p/ipfire/language/sv/)\n"
+"PO-Revision-Date: 2017-09-20 08:56+0000\n"
+"Last-Translator: Urban Berggren <pudberggren@icloud.com>\n"
+"Language-Team: Swedish (http://www.transifex.com/mstremer/ipfire/language/sv/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -19,36 +20,36 @@ msgstr ""
 
 #: main.c:78 main.c:179 main.c:404 main.c:670 main.c:702 main.c:893
 msgid "OK"
-msgstr ""
+msgstr "OK"
 
 #: main.c:79 main.c:460 main.c:487 main.c:516 main.c:620 main.c:630 main.c:670
 #: main.c:702
 msgid "Cancel"
-msgstr ""
+msgstr "Avbryt"
 
 #: main.c:176
 msgid "I accept this license"
-msgstr ""
+msgstr "Jag accepterar licensavtalet"
 
 #: main.c:384
 msgid "Warning: Unattended installation will start in 10 seconds..."
-msgstr ""
+msgstr "OBS! Installationen kommer att starta om 10 sekunder..."
 
 #: main.c:403
 msgid "Language selection"
-msgstr ""
+msgstr "Val av språk"
 
 #: main.c:403
 msgid "Select the language you wish to use for the installation."
-msgstr ""
+msgstr "Välj önskat språk du vill använda under installationen."
 
 #: main.c:418
 msgid "Unattended mode"
-msgstr ""
+msgstr "Oövervakat läge"
 
 #: main.c:420
 msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
-msgstr ""
+msgstr "<Tab>/<Alt-Tab> mellan menyval | <Mellanslag> väljer | <F12> nästa ruta"
 
 #: main.c:426
 #, c-format
@@ -56,16 +57,16 @@ msgid ""
 "Welcome to the %s installation program.\n"
 "\n"
 "Selecting Cancel on any of the following screens will reboot the computer."
-msgstr ""
+msgstr "Välkommen till %s installationsprogram.\n\nVäljer du Avbryt på någon av de följade rutorna så kommer datorn att starta om."
 
 #: main.c:428
 msgid "Start installation"
-msgstr ""
+msgstr "Starta installationen"
 
 #: main.c:449
 #, c-format
 msgid "The installer will now try downloading the installation image."
-msgstr ""
+msgstr "Installationsprogrammet kommer nu att försöka ladda ned installationsavbilden."
 
 #: main.c:452
 #, c-format
@@ -73,41 +74,41 @@ msgid ""
 "No source drive could be found.\n"
 "\n"
 "You can try downloading the required installation image."
-msgstr ""
+msgstr "Ingen källenhet hittades.\n\nDu kan prova att ladda ner installationsavbilden."
 
 #: main.c:456
 msgid ""
 "Please make sure to connect your machine to a network and the installer will"
 " try connect to acquire an IP address."
-msgstr ""
+msgstr "Se till att din dator är uppkopplat mot internet så att installationsprogrammet kan ladda ned installationsavbilden."
 
 #: main.c:460
 msgid "Download installation image"
-msgstr ""
+msgstr "Laddar ned installationsavbild"
 
 #: main.c:473
 msgid "Trying to start networking (DHCP)..."
-msgstr ""
+msgstr "Försöker att starta nätverkstjänst (DHCP)..."
 
 #: main.c:484
 msgid ""
 "Networking could not be started but is required to go on with the installation.\n"
 "\n"
 "Please connect your machine to a network with a DHCP server and retry."
-msgstr ""
+msgstr "Nätverket kunde inte startas, men krävs för att installationen ska kunna fortsätta.\n\nVar god koppla din dator till ett nätverk med en DHCP server och försök igen."
 
 #: main.c:487 main.c:516
 msgid "Retry"
-msgstr ""
+msgstr "Försök igen"
 
 #: main.c:501
 msgid "Downloading installation image..."
-msgstr ""
+msgstr "Laddar ned installationsavbild..."
 
 #: main.c:510
 #, c-format
 msgid "MD5 checksum mismatch"
-msgstr ""
+msgstr "MD5 kontrollsumma stämmer ej"
 
 #: main.c:513
 #, c-format
@@ -116,44 +117,44 @@ msgid ""
 "  Reason: %s\n"
 "\n"
 "%s"
-msgstr ""
+msgstr "Installationsavbilden kunde inte laddas ned.\n\nOrsak: %s\n\n%s"
 
 #: main.c:528
 #, c-format
 msgid ""
 "Could not mount %s to %s:\n"
 "  %s\n"
-msgstr ""
+msgstr "Kunde inte montera %s till %s:\n%s\n"
 
 #: main.c:543
 msgid "License Agreement"
-msgstr ""
+msgstr "Licensavtal"
 
 #: main.c:544
 msgid "License not accepted!"
-msgstr ""
+msgstr "Licensavtalet ej accepterat!"
 
 #: main.c:566
 msgid "No hard disk found."
-msgstr ""
+msgstr "Ingen hårddisk hittades."
 
 #: main.c:587
 msgid "Disk Selection"
-msgstr ""
+msgstr "Val av hårddisk"
 
 #: main.c:588
 msgid ""
 "Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n"
 "\n"
 "ALL DATA ON THE DISK WILL BE DESTROYED."
-msgstr ""
+msgstr "Välj den hårddisk som du vill installera IPFire på. Hårddisken kommer att partioneras och formateras.\n\nALL DATA PÅ HÅRDDISKEN KOMMER ATT RENSAS."
 
 #: main.c:599
 msgid ""
 "No disk has been selected.\n"
 "\n"
 "Please select one or more disks you want to install IPFire on."
-msgstr ""
+msgstr "Ingen hårddisk har blivit vald.\n\nVad god välj en eller fler hårddiskar som du vill installera IPFire på."
 
 #: main.c:617
 #, c-format
@@ -163,15 +164,15 @@ msgid ""
 "  %s\n"
 "\n"
 "Do you agree to continue?"
-msgstr ""
+msgstr "Installationsprogrammet kommer du att förbereda den valda hårddisken:\n\n%s\n\nVill du fortsätta?"
 
 #: main.c:619
 msgid "Disk Setup"
-msgstr ""
+msgstr "Hårddiskinställning"
 
 #: main.c:620 main.c:630
 msgid "Delete all data"
-msgstr ""
+msgstr "Radera alla data"
 
 #: main.c:627
 #, c-format
@@ -182,131 +183,131 @@ msgid ""
 "  %s\n"
 "\n"
 "Do you agree to continue?"
-msgstr ""
+msgstr "Installationsprogrammet kommer nu att ställa in RAID på de valda hårddiskarna\n\n%s\n%s\n\nVill du fortsätta?"
 
 #: main.c:629
 msgid "RAID Setup"
-msgstr ""
+msgstr "RAID-inställning"
 
 #: main.c:640
 msgid "Your disk configuration is currently not supported."
-msgstr ""
+msgstr "Din hårddiskkonfiguration stöds för nuvarande inte."
 
 #: main.c:655
 msgid "Your harddisk is too small."
-msgstr ""
+msgstr "Det är för lite utrymme på din hårddisk."
 
 #: main.c:671
 msgid ""
 "Your harddisk is very small, but you can continue without a swap partition."
-msgstr ""
+msgstr "Din hårddisk har väldigt lite utrymme, men du kan välja att fortsätta utan en växlingspartition."
 
 #: main.c:684
 msgid "ext4 Filesystem"
-msgstr ""
+msgstr "ext4 Filsystem"
 
 #: main.c:685
 msgid "ext4 Filesystem without journal"
-msgstr ""
+msgstr "ext4 Filesystem utan journal"
 
 #: main.c:686
 msgid "XFS Filesystem"
-msgstr ""
+msgstr "XFS Filsystem"
 
 #: main.c:687
 msgid "ReiserFS Filesystem"
-msgstr ""
+msgstr "ReiserFS Filsystem"
 
 #: main.c:701
 msgid "Filesystem Selection"
-msgstr ""
+msgstr "Val av Filsystem"
 
 #: main.c:701
 msgid "Please choose your filesystem:"
-msgstr ""
+msgstr "Var god välj vilket filsystem du vill använda:"
 
 #: main.c:712
 msgid "Building RAID..."
-msgstr ""
+msgstr "Bygger RAID"
 
 #: main.c:716
 msgid "Unable to build the RAID."
-msgstr ""
+msgstr "Kan inte bygga RAID"
 
 #: main.c:728
 msgid "Partitioning disk..."
-msgstr ""
+msgstr "Partionerar hårddisken..."
 
 #: main.c:732
 msgid "Unable to partition the disk."
-msgstr ""
+msgstr "Kan inte partionera hårddisken."
 
 #: main.c:739
 msgid "Creating filesystems..."
-msgstr ""
+msgstr "Skapar filsystem..."
 
 #: main.c:743
 msgid "Unable to create filesystems."
-msgstr ""
+msgstr "Kan inte skapa filsystem."
 
 #: main.c:749
 msgid "Unable to mount filesystems."
-msgstr ""
+msgstr "Kan inte montera filsystem."
 
 #: main.c:760
 msgid "Installing the system..."
-msgstr ""
+msgstr "Installerar systemet..."
 
 #: main.c:761
 msgid "Unable to install the system."
-msgstr ""
+msgstr "Kan inte installera systemet."
 
 #: main.c:777
 msgid "Installing the language cache..."
-msgstr ""
+msgstr "Installerar språkcachen..."
 
 #: main.c:778
 msgid "Unable to install the language cache."
-msgstr ""
+msgstr "Kan inte installera språkcachen."
 
 #: main.c:783
 msgid "Installing the bootloader..."
-msgstr ""
+msgstr "Installerar starthanteraren..."
 
 #: main.c:790
 msgid "Unable to open /etc/default/grub for writing."
-msgstr ""
+msgstr "Kan inte skriva till /etc/default/grub "
 
 #: main.c:812
 msgid "Unable to install the bootloader."
-msgstr ""
+msgstr "Kan inte installera starthanteraren."
 
 #: main.c:826
 msgid ""
 "A backup file has been found on the installation image.\n"
 "\n"
 "Do you want to restore the backup?"
-msgstr ""
+msgstr "En säkerhetskopia har hittats på installationsavbilden.\n\nVill du återställa säkerhetskopian?"
 
 #: main.c:827
 msgid "Yes"
-msgstr ""
+msgstr "Ja"
 
 #: main.c:827
 msgid "No"
-msgstr ""
+msgstr "Nej"
 
 #: main.c:834
 msgid "An error occured when the backup file was restored."
-msgstr ""
+msgstr "Ett fel upptäcktes när säkerhetskopian skulle återställas."
 
 #: main.c:869
 msgid "Running post-install script..."
-msgstr ""
+msgstr "Kör efterinstallations-skript"
 
 #: main.c:870
 msgid "Post-install script failed."
-msgstr ""
+msgstr "Efterinstallations-skript misslyckades."
 
 #: main.c:877
 #, c-format
@@ -314,16 +315,16 @@ msgid ""
 "%s was successfully installed!\n"
 "\n"
 "Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
-msgstr ""
+msgstr "%s har installerats!\n\nVar god ta ur installationsmediet från datorn och tryck på starta om. När systemet väl har startat om så kommer du att bli tillfrågad att ställa in nätverk och lösenord. Efter det, bör du i din webbläsares adressfält skriva in adressen https://%s:444 (eller vad du nu har gett ditt %s för namn) för att komma åt webbgränssnittet."
 
 #: main.c:882
 msgid "Congratulations!"
-msgstr ""
+msgstr "Grattis!"
 
 #: main.c:882
 msgid "Reboot"
-msgstr ""
+msgstr "Starta om"
 
 #: main.c:893
 msgid "Setup has failed. Press Ok to reboot."
-msgstr ""
+msgstr "Installationen har misslyckats. Tryck Ok för att starta om."
index 97842e8f5eeb99ebdff7e38c07db515687688f17..2d6b33284dea87ae96c3c81a7f40cc5eff38e79e 100644 (file)
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2014-11-05 01:33+0000\n"
+"PO-Revision-Date: 2017-08-03 19:28+0000\n"
 "Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
-"Language-Team: Thai (http://www.transifex.com/projects/p/ipfire/language/th/)\n"
+"Language-Team: Thai (http://www.transifex.com/mstremer/ipfire/language/th/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index c753b72851e0bdf130c0d4e9f7a57a8e74a0d91a..0bc6e8082d2a434ffee870eeb20bf2087bb430ed 100644 (file)
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2014-11-05 01:33+0000\n"
+"PO-Revision-Date: 2017-08-03 19:28+0000\n"
 "Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
-"Language-Team: Turkmen (http://www.transifex.com/projects/p/ipfire/language/tk/)\n"
+"Language-Team: Turkmen (http://www.transifex.com/mstremer/ipfire/language/tk/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index ad65543fc8e8336fd08950c628102d0ad627a56f..d66d840a2b16f9fbb0cf84f4d74833c156415e2b 100644 (file)
@@ -4,14 +4,14 @@
 # 
 # Translators:
 # Ersan YILDIRIM <ersan73@gmail.com>, 2015
-# Kudret Emre <kudretemre@hotmail.com.tr>, 2014
-# Kudret Emre <kudretemre@hotmail.com.tr>, 2014
+# Kudret <kudretemre@hotmail.com.tr>, 2014
+# Kudret <kudretemre@hotmail.com.tr>, 2014
 msgid ""
 msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2015-04-23 16:07+0000\n"
+"PO-Revision-Date: 2017-09-20 08:56+0000\n"
 "Last-Translator: Ersan YILDIRIM <ersan73@gmail.com>\n"
 "Language-Team: Turkish (http://www.transifex.com/mstremer/ipfire/language/tr/)\n"
 "MIME-Version: 1.0\n"
index 4a2ab67665a051ae3ba3255b08848392f82b8766..cd8deb10b9dcf00e7b94aa467d1ee7862f10e1a0 100644 (file)
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2014-11-05 01:33+0000\n"
+"PO-Revision-Date: 2017-08-03 19:28+0000\n"
 "Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
-"Language-Team: Ukrainian (http://www.transifex.com/projects/p/ipfire/language/uk/)\n"
+"Language-Team: Ukrainian (http://www.transifex.com/mstremer/ipfire/language/uk/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index 8c688008d725147a9591e1f02f8b865fadfc1059..345fb0933af2bec25fac2c8da9b8b426a4553b45 100644 (file)
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2014-11-05 01:33+0000\n"
+"PO-Revision-Date: 2017-08-03 19:28+0000\n"
 "Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
-"Language-Team: Uzbek (Latin) (http://www.transifex.com/projects/p/ipfire/language/uz@Latn/)\n"
+"Language-Team: Uzbek (Latin) (http://www.transifex.com/mstremer/ipfire/language/uz@Latn/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index 4f5b4558af92af2c66ca1f3cea048f69fe654ead..7fbce462e4d58d0e3a9be5da0aad6f6bf069d8fa 100644 (file)
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2014-11-05 01:33+0000\n"
+"PO-Revision-Date: 2017-08-03 19:28+0000\n"
 "Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
-"Language-Team: Vietnamese (http://www.transifex.com/projects/p/ipfire/language/vi/)\n"
+"Language-Team: Vietnamese (http://www.transifex.com/mstremer/ipfire/language/vi/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index 3dbca13b73aac14cd1e4f0e9584e9f56866de2cc..67ed5c801c4064081c317c3651e85c97302b7091 100644 (file)
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2014-11-05 01:33+0000\n"
+"PO-Revision-Date: 2017-08-03 19:28+0000\n"
 "Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
-"Language-Team: Chinese (http://www.transifex.com/projects/p/ipfire/language/zh/)\n"
+"Language-Team: Chinese (http://www.transifex.com/mstremer/ipfire/language/zh/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index 08a4e37d9c12d61be5d4c4be3e34222585fb257d..c3329b13047e8f3e300399f5067caa23dc9e0e5f 100644 (file)
@@ -26,12 +26,13 @@ PROGS = iowrap
 SUID_PROGS = squidctrl sshctrl ipfirereboot \
        ipsecctrl timectrl dhcpctrl snortctrl \
        applejuicectrl rebuildhosts backupctrl collectdctrl \
-       logwatch openvpnctrl firewallctrl \
+       logwatch wioscan wiohelper openvpnctrl firewallctrl \
        wirelessctrl getipstat qosctrl launch-ether-wake \
        redctrl syslogdctrl extrahdctrl sambactrl upnpctrl \
        smartctrl clamavctrl addonctrl pakfire mpfirectrl wlanapctrl \
        setaliases urlfilterctrl updxlratorctrl fireinfoctrl rebuildroutes \
-       getconntracktable wirelessclient torctrl ddnsctrl unboundctrl
+       getconntracktable wirelessclient torctrl ddnsctrl unboundctrl \
+       captivectrl
 SUID_UPDX = updxsetperms
 
 OBJS = $(patsubst %,%.o,$(PROGS) $(SUID_PROGS))
diff --git a/src/misc-progs/captivectrl.c b/src/misc-progs/captivectrl.c
new file mode 100644 (file)
index 0000000..56dd78d
--- /dev/null
@@ -0,0 +1,361 @@
+/* This file is part of the IPFire Firewall.
+*
+* This program is distributed under the terms of the GNU General Public
+* Licence.  See the file COPYING for details. */
+
+#define _BSD_SOURCE
+#define _XOPEN_SOURCE
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+
+#include "libsmooth.h"
+#include "setuid.h"
+
+#define CAPTIVE_PORTAL_SETTINGS                CONFIG_ROOT "/captive/settings"
+#define ETHERNET_SETTINGS              CONFIG_ROOT "/ethernet/settings"
+
+#define CLIENTS                                CONFIG_ROOT "/captive/clients"
+#define IPTABLES                       "/sbin/iptables --wait"
+#define HTTP_PORT                      80
+#define REDIRECT_PORT                  1013
+
+typedef struct client {
+       char etheraddr[STRING_SIZE];
+       char ipaddr[STRING_SIZE];
+       time_t time_start;
+       int expires;
+
+       struct client* next;
+} client_t;
+
+static time_t parse_time(const char* s) {
+       int t = 0;
+
+       if (sscanf(s, "%d", &t) == 1) {
+               return (time_t)t;
+       }
+
+       return -1;
+}
+
+static char* format_time(const time_t* t) {
+       char buffer[STRING_SIZE];
+
+       struct tm* tm = gmtime(t);
+       if (tm == NULL)
+               return NULL;
+
+       strftime(buffer, sizeof(buffer), "%Y-%m-%dT%H:%M", tm);
+
+       return strdup(buffer);
+}
+
+static client_t* read_clients(char* filename) {
+       FILE* f = NULL;
+
+       if (!(f = fopen(filename, "r"))) {
+               fprintf(stderr, "Could not open configuration file: %s\n", filename);
+               return NULL;;
+       }
+
+       char line[STRING_SIZE];
+
+       client_t* client_first = NULL;
+       client_t* client_last = NULL;
+       client_t* client_curr;
+
+       while ((fgets(line, STRING_SIZE, f) != NULL)) {
+               if (line[strlen(line) - 1] == '\n')
+                       line[strlen(line) - 1] = '\0';
+
+               // Skip all commented lines
+               if (*line == '#')
+                       continue;
+
+               client_curr = (client_t*)malloc(sizeof(client_t));
+               memset(client_curr, 0, sizeof(client_t));
+
+               if (client_first == NULL)
+                       client_first = client_curr;
+               else
+                       client_last->next = client_curr;
+               client_last = client_curr;
+
+               unsigned int count = 0;
+               char* lineptr = line;
+               while (1) {
+                       if (!*lineptr)
+                               break;
+
+                       char* word = lineptr;
+                       while (*lineptr != '\0') {
+                               if (*lineptr == ',') {
+                                       *lineptr = '\0';
+                                       lineptr++;
+                                       break;
+                               }
+                               lineptr++;
+                       }
+
+                       switch (count++) {
+                               // Ethernet address
+                               case 1:
+                                       strcpy(client_curr->etheraddr, word);
+                                       break;
+
+                               // IP address
+                               case 2:
+                                       strcpy(client_curr->ipaddr, word);
+                                       break;
+
+                               // Start time
+                               case 3:
+                                       client_curr->time_start = parse_time(word);
+                                       break;
+
+                               // Expire duration
+                               case 4:
+                                       client_curr->expires = atoi(word);
+                                       break;
+
+                               default:
+                                       break;
+                       }
+               }
+       }
+
+       if (f)
+               fclose(f);
+
+       return client_first;
+}
+
+static void flush_chains() {
+       // filter
+       safe_system(IPTABLES " -F CAPTIVE_PORTAL");
+       safe_system(IPTABLES " -F CAPTIVE_PORTAL_CLIENTS");
+
+       // nat
+       safe_system(IPTABLES " -t nat -F CAPTIVE_PORTAL");
+}
+
+static int setup_dns_filters() {
+       const char* protos[] = { "udp", "tcp", NULL };
+
+       // Limits the number of DNS requests to 3 kByte/s
+       // A burst of 1MB is permitted at the start
+       const char* limiter = "-m hashlimit --hashlimit-name dns-filter"
+               " --hashlimit-mode srcip --hashlimit-upto 3kb/sec --hashlimit-burst 1024kb";
+
+       char command[STRING_SIZE];
+
+       const char** proto = protos;
+       while (*proto) {
+               snprintf(command, sizeof(command), IPTABLES " -A CAPTIVE_PORTAL_CLIENTS -p %s"
+                       " --dport 53 %s -j RETURN", *proto, limiter);
+
+               int r = safe_system(command);
+               if (r)
+                       return r;
+
+               proto++;
+       }
+
+       return 0;
+}
+
+static int add_client_rules(const client_t* clients) {
+       char command[STRING_SIZE];
+       char match[STRING_SIZE];
+
+       while (clients) {
+               size_t len = 0;
+
+               if (*clients->ipaddr && clients->expires > 0) {
+                       len += snprintf(match + len, sizeof(match) - len,
+                               "-s %s", clients->ipaddr);
+               }
+
+               len += snprintf(match + len, sizeof(match) - len,
+                       " -m mac --mac-source %s", clients->etheraddr);
+
+               if (clients->expires > 0) {
+                       time_t expires = clients->time_start + clients->expires;
+
+                       char* time_start = format_time(&clients->time_start);
+                       char* time_end = format_time(&expires);
+
+                       len += snprintf(match + len, sizeof(match) - len,
+                               " -m time --datestart %s --datestop %s",
+                               time_start, time_end);
+
+                       free(time_start);
+                       free(time_end);
+               }
+
+               // filter
+               snprintf(command, sizeof(command), IPTABLES " -A CAPTIVE_PORTAL_CLIENTS"
+                       " %s -j RETURN", match);
+               safe_system(command);
+
+               // nat
+               snprintf(command, sizeof(command), IPTABLES " -t nat -A CAPTIVE_PORTAL"
+                       " %s -j RETURN", match);
+               safe_system(command);
+
+               // Move on to the next client
+               clients = clients->next;
+       }
+
+       return 0;
+}
+
+static char* get_key(struct keyvalue* settings, char* key) {
+       char value[STRING_SIZE];
+
+       if (!findkey(settings, key, value))
+               return NULL;
+
+       return strdup(value);
+}
+
+static int add_interface_rule(const char* intf, int allow_webif_access) {
+       int r;
+       char command[STRING_SIZE];
+
+       if ((intf == NULL) || (strlen(intf) == 0)) {
+               fprintf(stderr, "Empty interface given\n");
+               return -1;
+       }
+
+       snprintf(command, sizeof(command), IPTABLES " -A CAPTIVE_PORTAL -i %s"
+               " -j CAPTIVE_PORTAL_CLIENTS", intf);
+       r = safe_system(command);
+       if (r)
+               return r;
+
+       if (allow_webif_access) {
+               snprintf(command, sizeof(command), IPTABLES " -A CAPTIVE_PORTAL_CLIENTS"
+                       " -i %s -p tcp --dport 444 -j RETURN", intf);
+               r = safe_system(command);
+               if (r)
+                       return r;
+       }
+
+       // Redirect all unauthenticated clients
+       snprintf(command, sizeof(command), IPTABLES " -t nat -A CAPTIVE_PORTAL -i %s"
+               " -p tcp --dport %d -j REDIRECT --to-ports %d", intf, HTTP_PORT, REDIRECT_PORT);
+       r = safe_system(command);
+       if (r)
+               return r;
+
+       // Allow access to captive portal site
+       snprintf(command, sizeof(command), IPTABLES " -A CAPTIVE_PORTAL_CLIENTS"
+               " -i %s -p tcp --dport %d -j RETURN", intf, REDIRECT_PORT);
+       r = safe_system(command);
+       if (r)
+               return r;
+
+       return 0;
+}
+
+static int add_interface_rules(struct keyvalue* captive_portal_settings, struct keyvalue* ethernet_settings) {
+       const char* intf;
+       char* setting;
+       int r = 0;
+
+       setting = get_key(captive_portal_settings, "ENABLE_GREEN");
+       if (setting && (strcmp(setting, "on") == 0)) {
+               free(setting);
+
+               intf = get_key(ethernet_settings, "GREEN_DEV");
+               r = add_interface_rule(intf, /* allow webif access from green */ 1);
+               if (r)
+                       return r;
+       }
+
+       setting = get_key(captive_portal_settings, "ENABLE_BLUE");
+       if (setting && (strcmp(setting, "on") == 0)) {
+               free(setting);
+
+               intf = get_key(ethernet_settings, "BLUE_DEV");
+               r = add_interface_rule(intf, /* do not allow webif access */ 0);
+               if (r)
+                       return r;
+       }
+
+       // Always pass DNS packets through all firewall rules
+       r = setup_dns_filters();
+       if (r)
+               return r;
+
+       // Add the last rule
+       r = safe_system(IPTABLES " -A CAPTIVE_PORTAL_CLIENTS -j DROP");
+       if (r)
+               return r;
+
+       return r;
+}
+
+int main(int argc, char** argv) {
+       int r = 0;
+       char* intf = NULL;
+       client_t* clients = NULL;
+
+       struct keyvalue* captive_portal_settings = NULL;
+       struct keyvalue* ethernet_settings = NULL;
+
+       if (!(initsetuid()))
+               exit(2);
+
+       ethernet_settings = initkeyvalues();
+       if (!readkeyvalues(ethernet_settings, ETHERNET_SETTINGS)) {
+               fprintf(stderr, "Could not read %s\n", ETHERNET_SETTINGS);
+               r = 1;
+               goto END;
+       }
+
+       captive_portal_settings = initkeyvalues();
+       if (!readkeyvalues(captive_portal_settings, CAPTIVE_PORTAL_SETTINGS)) {
+               fprintf(stderr, "Could not read %s\n", CAPTIVE_PORTAL_SETTINGS);
+               r = 1;
+               goto END;
+       }
+
+       clients = read_clients(CLIENTS);
+
+       // Clean up all old rules
+       flush_chains();
+
+       // Add all client rules
+       r = add_client_rules(clients);
+       if (r)
+               goto END;
+
+       // Add all interface rules
+       r = add_interface_rules(captive_portal_settings, ethernet_settings);
+       if (r)
+               goto END;
+
+END:
+       while (clients) {
+               client_t* head = clients;
+               clients = clients->next;
+
+               free(head);
+       }
+
+       if (ethernet_settings)
+               freekeyvalues(ethernet_settings);
+
+       if (captive_portal_settings)
+               freekeyvalues(captive_portal_settings);
+
+       if (intf)
+               free(intf);
+
+       return r;
+}
diff --git a/src/misc-progs/list.h b/src/misc-progs/list.h
new file mode 100644 (file)
index 0000000..19bd21e
--- /dev/null
@@ -0,0 +1,129 @@
+/* list.h by Jan Bobrowski. Inspired by list.h from Linux */
+
+#ifndef LIST_H
+#define LIST_H
+
+typedef struct list {
+       struct list *next, *prev;
+} list_t;
+
+static inline void list_link(struct list *a, struct list *b)
+{
+       a->next = b;
+       b->prev = a;
+}
+
+static inline void list_add(struct list *head, struct list *item)
+{
+       struct list *first = head->next;
+       list_link(head, item);
+       list_link(item, first);
+}
+
+static inline void list_add_end(struct list *head, struct list *item)
+{
+       struct list *last = head->prev;
+       list_link(item, head);
+       list_link(last, item);
+}
+
+static inline list_t *list_del(struct list *item)
+{
+       struct list *prev = item->prev, *next = item->next;
+       list_link(prev, next);
+       return next;
+}
+
+static inline void list_init(struct list *head)
+{
+       list_link(head, head);
+}
+
+/* delete item from one list and add it to another */
+static inline void list_del_add(list_t *head, list_t *item)
+{
+       list_t *prev = item->prev, *next = item->next;
+       list_link(prev, next);
+       next = head->next;
+       list_link(head, item);
+       list_link(item, next);
+}
+
+/*static inline list_check(list_t *l)
+{
+       list_t *a = l;
+       list_t *b;
+       do {
+               b = a->next;
+               assert(b->prev == a);
+               if(a==l) break;
+               a = b;
+       } while(1);
+}*/
+
+static inline void list_del_add_end(list_t *head, list_t *item)
+{
+       list_t *prev = item->prev, *next = item->next;
+       list_link(prev, next);
+       prev = head->prev;
+       list_link(item, head);
+       item->prev = prev;
+       prev->next = item;
+}
+
+static inline void list_del_init(struct list *item)
+{
+       struct list *prev = item->prev, *next = item->next;
+       list_link(item, item);
+       list_link(prev, next);
+}
+
+static inline void list_join(struct list *a, struct list *b)
+{
+       list_t *ae = a->prev;
+       list_t *be = b->prev;
+       b->prev = ae;
+       a->prev = be;
+       ae->next = b;
+       be->next = a;
+}
+
+static inline int list_empty(struct list *head)
+{
+       return head->next == head;
+}
+
+#define LIST(L) struct list L = {&L, &L}
+
+#define list_entry(L, T, M) ((T*)((char*)(L) - (long)(&((T*)0)->M)))
+#define list_item(L, T, M) ((T*)((char*)(L) - (long)(&((T*)0)->M)))
+
+#define list_first(H, T, M) list_item((H)->next, T, M)
+#define list_last(H, T, M) list_item((H)->prev, T, M)
+#define list_next(O, M) list_item((O)->M.next, typeof(*(O)), M)
+
+/* remove first element and return it */
+static inline struct list *list_get(struct list *head)
+{
+       struct list *item = head->next;
+       struct list *next = item->next;
+       list_link(head, next);
+       return item;
+}
+
+/* remove first element, initialize and return it */
+static inline struct list *list_get_init(struct list *head)
+{
+       struct list *item = head->next;
+       struct list *next = item->next;
+       list_link(item, item);
+       list_link(head, next);
+       return item;
+}
+
+#define list_get_entry(H, T, M) list_item(list_get((H)), T, M)
+#define list_get_init_entry(H, T, M) list_item(list_get_init((H)), T, M)
+#define list_get_item(H, T, M) list_item(list_get((H)), T, M)
+#define list_get_init_item(H, T, M) list_item(list_get_init((H)), T, M)
+
+#endif
diff --git a/src/misc-progs/wiohelper.c b/src/misc-progs/wiohelper.c
new file mode 100644 (file)
index 0000000..0f7fd86
--- /dev/null
@@ -0,0 +1,31 @@
+/* wiohelper - a Who Is Online? Addon helper program
+ *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ * This program is distributed under the terms of the GNU General Public
+ * Licence.  See the file COPYING for details.
+ *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 
+ * IPFire.org - A linux based firewall
+ * Copyright (C) 2017 Stephan Feddersen <addons@h-loit.de>
+ *
+ * All Rights Reserved.
+ *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ * Simple program intended to be installed setuid(0) that can be used from WIO
+ *
+*/
+
+#include "setuid.h"
+
+int main(void)
+{
+       if (!(initsetuid()))
+               exit(1);
+
+       safe_system("/var/ipfire/wio/wio.pl");
+
+       return 0;
+}
diff --git a/src/misc-progs/wioscan.c b/src/misc-progs/wioscan.c
new file mode 100644 (file)
index 0000000..206456c
--- /dev/null
@@ -0,0 +1,665 @@
+/*
+ *     wioscan
+ *
+ *     This program is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU General Public License
+ *     version 2 as published by the Free Software Foundation.
+ */
+
+#define _GNU_SOURCE
+#include <sys/types.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <poll.h>
+#include <errno.h>
+#include <err.h>
+#include <sys/ioctl.h>
+#include <sys/socket.h>
+#include <netpacket/packet.h>
+#include <net/ethernet.h>
+#include <net/if.h>
+#include <net/if_arp.h>
+#include <netinet/ether.h>
+#include <arpa/inet.h>
+#include <stdint.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
+
+#define _STR(S) #S
+#define STR(S) _STR(S)
+
+#define ARP htons(ETHERTYPE_ARP)
+#define IP htons(ETHERTYPE_IP)
+
+typedef uint8_t u8;
+typedef uint16_t u16;
+typedef uint32_t u32;
+
+#include "list.h"
+#define elemof(T) (sizeof T/sizeof*T)
+#define endof(T) (T+elemof(T))
+#ifndef offsetof
+#define offsetof(T,M) ((int)(long)&((T*)0)->M)
+#endif
+
+#define HWMAX 8
+
+union addr {
+       struct sockaddr sa;
+       struct sockaddr_in in;
+       struct sockaddr_ll ll;
+};
+
+int sock; /* packet socket */
+union addr bcast;
+
+struct opts {
+       unsigned sort:1;
+       unsigned noown:1;
+       unsigned noethn:1;
+       unsigned proui:1;
+       unsigned isrange:1;
+       unsigned passive:1;
+       unsigned nsend;
+       unsigned wait;
+} opts = {nsend:8, wait:250};
+
+void print_oui(int sp, u8 a[6]);
+
+struct he;
+void print_he(struct he *he);
+
+struct hwaddr {
+       u8 len, addr[HWMAX];
+};
+
+static inline hw_eq(struct hwaddr *h, int hl, u8 *ha)
+{
+       return h->len == hl && memcmp(h->addr, ha, hl) == 0;
+}
+
+static inline void hw_set(struct hwaddr *h, int hl, u8 *ha)
+{
+       memcpy(h->addr, ha, (h->len = hl));
+}
+
+struct ifinfo {
+       int index;
+       char *name;
+       u32 ip, net, mask, bcast;
+       u16 hw_type;
+       struct hwaddr hw;
+} ifinfo;
+
+static inline u32 ip_from_sa(struct sockaddr *sa)
+{
+       return ntohl(((struct sockaddr_in*)sa)->sin_addr.s_addr);
+}
+
+/* TABLE */
+
+struct list hashtbl[128];
+struct he {
+       struct list hash;
+       u32 ip;
+       struct hwaddr hw;
+       struct hwaddr from;
+};
+
+static void init_hash() __attribute__((constructor));
+static void init_hash()
+{
+       int i;
+       for(i=0;i<elemof(hashtbl);i++) list_init(&hashtbl[i]);
+}
+
+int he_for(u32 ip, struct he **ret, int alloc)
+{
+       struct list *h, *l;
+       struct he *he;
+       int v = 1;
+       h = &hashtbl[ip & elemof(hashtbl)-1];
+       for(l=h->next; l!=h; l=l->next) {
+               he = list_entry(l, struct he, hash);
+               if(he->ip == ip)
+                       goto ret;
+               if(he->ip > ip)
+                       break;
+       }
+       v = 0;
+       if(alloc) {
+               he = (struct he*)malloc(sizeof *he);
+               he->ip = ip;
+               list_add(l->prev, &he->hash);
+ret:
+               if(ret) *ret = he;
+       }
+       return v;
+}
+
+/* INTERFACE */
+
+static int net;
+
+static void my__ioctl(int i, struct ifreq *r, char *t)
+{
+       if(ioctl(net, i, r) < 0)
+               err(1, "ioctl(%s,%s)", t, r->ifr_name);
+}
+#define my_ioctl(I,R) my__ioctl(I,R,#I)
+
+void fill_ifinfo(char *name)
+{
+       struct ifreq ir;
+       int flags;
+
+       ifinfo.index = if_nametoindex(name);
+       if(!ifinfo.index) errx(1, "No such interface: %s", name);
+       ifinfo.name = name;
+
+       net = socket(PF_INET, SOCK_DGRAM, 0);
+       if(net<0) err(1, "socket(PF_INET)");
+       strcpy(ir.ifr_name, ifinfo.name);
+       my_ioctl(SIOCGIFFLAGS, &ir);
+       flags = ir.ifr_flags;
+       if(flags & IFF_NOARP) errx(1, "%s: ARP not supported.", name);
+       my_ioctl(SIOCGIFADDR, &ir);
+       ifinfo.ip = ip_from_sa(&ir.ifr_addr);
+       if(flags & IFF_POINTOPOINT) {
+               my_ioctl(SIOCGIFDSTADDR, &ir);
+               ifinfo.net = ip_from_sa(&ir.ifr_dstaddr);
+               ifinfo.mask = (u32)~0;
+               ifinfo.bcast = 0; /* none */
+       } else {
+               my_ioctl(SIOCGIFNETMASK, &ir);
+               ifinfo.mask = ip_from_sa(&ir.ifr_netmask);
+               my_ioctl(SIOCGIFBRDADDR, &ir);
+               ifinfo.bcast = ip_from_sa(&ir.ifr_broadaddr);
+               ifinfo.net = ifinfo.ip & ifinfo.mask;
+       }
+       close(net);
+}
+
+static inline char *str_ip(u32 ip)
+{
+       struct in_addr n;
+       n.s_addr = htonl(ip);
+       return inet_ntoa(n);
+}
+
+char *str_hw(u8 *a, int l)
+{
+       static char buf[3*HWMAX];
+       char *d = buf;
+       if(!l) return "*";
+       if(l>HWMAX) l=HWMAX;
+       for(;;) {
+               d += sprintf(d, "%02X", *a++);
+               if(--l <= 0) break;
+               *d++ = ':';
+       }
+       *d = 0;
+       return buf;
+}
+
+static char *str_addr(union addr *addr)
+{
+       switch(addr->sa.sa_family) {
+               case AF_INET: return inet_ntoa(addr->in.sin_addr);
+               case AF_PACKET: return str_hw(addr->ll.sll_addr, addr->ll.sll_halen);
+               default: return "???";
+       }
+}
+
+static inline void setup_socket()
+{
+       union addr addr;
+       socklen_t l;
+
+       sock = socket(PF_PACKET, SOCK_DGRAM, 0);
+       if(sock < 0) err(1, "socket(PF_PACKET)");
+
+       memset(&addr.ll, 0, sizeof addr.ll);
+       addr.sa.sa_family = AF_PACKET;
+       addr.ll.sll_protocol = ARP;
+       addr.ll.sll_ifindex = ifinfo.index;
+
+       if(bind(sock, &addr.sa, sizeof addr.ll)<0)
+               err(1, "bind");
+       l = sizeof addr.ll;
+       if(getsockname(sock, &addr.sa, &l)<0)
+               err(1, "getsockname");
+
+       if(addr.ll.sll_halen > HWMAX)
+               errx(1, "hardware address too long (%d)", addr.ll.sll_halen);
+       ifinfo.hw.len = addr.ll.sll_halen;
+       memcpy(ifinfo.hw.addr, addr.ll.sll_addr, sizeof ifinfo.hw.addr);
+       ifinfo.hw_type = addr.ll.sll_hatype;
+}
+
+/* SCAN */
+
+struct arppkt {
+       u16 hrd, pro;
+       u8 hln, pln;
+       u16 op;
+       u8 a[2*HWMAX+2*4];
+/*     u8 sha[6];
+       u8 sip[4];
+       u8 tha[6];
+       u8 tip[4];*/
+};
+
+static inline u8 *get_sha(struct arppkt *pkt) {return pkt->a;}
+static inline u8 *get_tha(struct arppkt *pkt) {return pkt->a+pkt->hln+4;}
+static inline u32 get_sip(struct arppkt *pkt) {return ntohl(*(u32*)(pkt->a+pkt->hln));}
+static inline u32 get_tip(struct arppkt *pkt) {return ntohl(*(u32*)(pkt->a+2*pkt->hln+4));}
+
+#if 0
+void print_arp(struct arppkt *arp)
+{
+       u8 *p = arp->a;
+       printf("hrd:%04X pro:%04X ", ntohs(arp->hrd), ntohs(arp->pro));
+       printf("hln:%d pln:%d op:%d ", arp->hln, arp->pln, ntohs(arp->op));
+       printf("sha:%s ", str_hw(p, arp->hln)); p+=arp->hln;
+       printf("sip:%s ", str_ip(ntohl(*(u32*)p))); p+=arp->pln;
+       printf("tha:%s ", str_hw(p, arp->hln)); p+=arp->hln;
+       printf("tip:%s\n", str_ip(ntohl(*(u32*)p)));
+}
+#endif
+
+static struct scan {
+       u32 ip, start, end;
+} scan;
+
+#define IN_RANGE(I) ((I) >= scan.start && (I) <= (u32)(scan.end-1))
+
+int sendscan()
+{
+       struct arppkt arp;
+       int ns;
+       u8 *p;
+
+       arp.hrd = htons(ifinfo.hw_type);
+       arp.pro = IP;
+       arp.hln = ifinfo.hw.len;
+       arp.pln = 4;
+       arp.op = htons(1);
+       p = arp.a;
+       memcpy(p, ifinfo.hw.addr, ifinfo.hw.len); p += ifinfo.hw.len;
+       *(u32*)p = htonl(ifinfo.ip); p += 4;
+       memset(p, 0, ifinfo.hw.len); p += ifinfo.hw.len;
+
+       ns = 0;
+       while(scan.ip != scan.end) {
+               int v;
+               if(scan.ip == ifinfo.bcast || he_for(scan.ip, 0, 0)) {
+                       scan.ip++;
+                       continue;
+               }
+               *(u32*)p = htonl(scan.ip);
+               v = sendto(sock, &arp, p+4-(u8*)&arp, 0, &bcast.sa, sizeof bcast.ll);
+               if(v<0) {
+                       if(errno != ENOBUFS || opts.nsend <= 1)
+                               err(1, "send(%s)", str_addr(&bcast));
+                       opts.nsend--;
+                       return -1;
+               }
+               scan.ip++;
+               if(++ns >= opts.nsend) break;
+       }
+       return ns;
+}
+
+void compare_resp(struct he *he, union addr *src, int hln, u8 *sha)
+{
+       if(hw_eq(&he->hw, hln, sha)
+        && hw_eq(&he->from, src->ll.sll_halen, src->ll.sll_addr))
+               return;
+
+       fprintf(stderr, "%s: ", str_ip(he->ip));
+       fprintf(stderr, "inconsistency: %s", str_hw(sha, hln));
+       if(src->ll.sll_halen != hln || memcmp(src->ll.sll_addr, sha, hln))
+               fprintf(stderr, " from %s",
+                str_hw(src->ll.sll_addr, src->ll.sll_halen));
+       fprintf(stderr, ", was %s\n", str_hw(he->hw.addr, he->hw.len));
+       if(!hw_eq(&he->hw, he->from.len, he->from.addr))
+               fprintf(stderr, " from %s",
+                str_hw(he->from.addr, he->from.len));
+}
+
+int arp_recv(struct arppkt *pkt, union addr *src)
+{
+       socklen_t l = sizeof *src;
+       int v = recvfrom(sock, pkt, sizeof *pkt, 0, &src->sa, &l);
+       if(v < 0) err(1, "recvfrom");
+       if(v < offsetof(struct arppkt, a))
+               return 0;
+       if(pkt->pro != IP)
+               return 0;
+       if(pkt->hrd != htons(ifinfo.hw_type) || pkt->hln != ifinfo.hw.len)
+               return 0;
+       if(v < offsetof(struct arppkt, a) + 2*pkt->hln + 2*4)
+               return 0;
+       return 1;
+}
+
+void receive()
+{
+       union addr addr;
+       struct arppkt arp;
+       struct he *he;
+       u32 ip;
+
+       if(!arp_recv(&arp, &addr))
+               return;
+       if(arp.op != htons(2)) /* only responses */
+               return;
+
+       ip = get_sip(&arp);
+
+       if(!he_for(ip, &he, 1)) {
+               hw_set(&he->hw, arp.hln, get_sha(&arp));
+               hw_set(&he->from, addr.ll.sll_halen, addr.ll.sll_addr);
+               if(opts.sort) return;
+               if(opts.isrange && !IN_RANGE(ip)) return;
+               print_he(he);
+       } else
+               compare_resp(he, &addr, arp.hln, get_sha(&arp));
+}
+
+/**/
+
+void passive()
+{
+       for(;;) {
+               struct arppkt arp;
+               union addr src;
+               if(!arp_recv(&arp, &src))
+                       continue;
+               printf("%s: ", str_addr(&src));
+               printf("%s %-15s ", str_hw(get_sha(&arp),arp.hln),
+                       str_ip(get_sip(&arp)));
+               switch(htons(arp.op)) {
+                       case 1:
+                               printf("Q %s", str_ip(get_tip(&arp)));
+                               break;
+                       case 2:
+                               printf("A %s %s", str_hw(get_tha(&arp),arp.hln),
+                                       str_ip(get_tip(&arp)));
+                               break;
+                       default:
+                               printf("%X", htons(arp.op));
+               }
+               putchar('\n');
+       }
+}
+
+/**/
+
+int waitsock(int n)
+{
+       int v;
+       struct pollfd pollfd;
+       pollfd.fd = sock;
+       pollfd.events = POLLIN;
+       v = poll(&pollfd, 1, n);
+       if(v < 0) {
+               if(errno != EINTR)
+                       err(1, "poll");
+               v = 0;
+       }
+       return v;
+}
+
+void print_he(struct he *he)
+{
+       int l, w;
+       if(opts.noown && he->ip == ifinfo.ip)
+               return;
+       printf("%s,", str_hw(he->hw.addr, he->hw.len));
+       l = 15 - printf("%s", str_ip(he->ip));
+       w = 0;
+       if(!opts.proui && !hw_eq(&he->from, he->hw.len, he->hw.addr))
+               w = 1, l = 1;
+
+       if(opts.proui)
+               print_oui(l, he->hw.addr);
+       else if(!opts.noethn) {
+#if !defined __dietlibc_ && !defined __UCLIBC__
+               char nm[1024];
+               if(!ether_ntohost(nm, (struct ether_addr*)he->hw.addr))
+                       printf("%*s%s", l, "", nm);
+#endif
+       }
+       if(w)
+               printf(" from %s", str_hw(he->from.addr, he->from.len));
+       putchar('\n');
+}
+
+static int parse_iprange(char *p)
+{
+       char *e;
+       u32 ip=0;
+       int sh;
+
+       for(sh = 24;; sh -= 8) {
+               unsigned long v;
+
+               v = strtoul(p, &e, 10);
+               if(p == e || v > 255)
+                       return 0;
+
+               ip |= v << sh;
+
+               p = e + 1;
+               if(*e == '/') {
+                       v = strtoul(p, &e, 10);
+                       if(p == e || *e || v > 32)
+                               return 0;
+                       if(v) {
+                               v = 32 - v;
+                               if(sh > v)
+                                       return 0;
+mask:
+                               v = ~0 << v;
+                       }
+                       scan.start = ip & v;
+                       scan.end = scan.start - v;
+                       return 1;
+               }
+
+               if(!sh) break;
+
+               v = sh;
+               if(!*e)
+                       goto mask;
+
+               if(*e != '.')
+                       return 0;
+
+               if(!*p || *p == '*' && !p[1])
+                       goto mask;
+       }
+
+       scan.start = ip;
+       scan.end = ip + 1;
+
+       if(*e == '-') {
+               u32 end = 0, m = ~0;
+
+               do {
+                       unsigned long v = strtoul(p, &e, 10);
+                       if(p == e || v > 255)
+                               return 0;
+                       p = e + 1;
+                       end = end<<8 | v;
+                       m <<= 8;
+               } while(m && *e);
+
+               if(*e)
+                       return 0;
+
+               end |= ip & m;
+               if(end < ip)
+                       return 0;
+
+               scan.end = end + 1;
+               return 1;
+       }
+       return *e == 0;
+}
+
+int main(int argc, char **argv)
+{
+       for(;;) switch(getopt(argc, argv, "fsaepwlh")) {
+               case 'f': opts.sort=0; break;
+               case 's': opts.sort=1; break;
+               case 'a': opts.noown=1; break;
+               case 'e': opts.noethn=1; break;
+               case 'p': opts.proui=1; break;
+               case 'w': opts.nsend=2; opts.wait=1000; break;
+               case 'l': opts.passive=1; break;
+               case 'h':
+                       printf(
+                       "wioscan [-faep] [interface] [ip-range]\n"
+                       "\t-s  sort responses\n"
+                       "\t-a  do not list interface's own address\n"
+#if !defined __dietlibc_ && !defined __UCLIBC__
+                       "\t-e  do not include info from /etc/ethers\n"
+#endif
+                       "\t-p  print vendor names\n"
+                       "\t-w  slow operation\n"
+                       "\t-l  listen only (not promiscuous)\n"
+                       "ip-range: ip ip/bits ip-ip\n"
+                       );
+                       return 0;
+               case EOF:
+                       goto endopt;
+       }
+endopt:
+
+       {
+               char *dev = "eth0";
+               if(optind<argc && (*argv[optind] < '0' || *argv[optind] > '9'))
+                       dev = argv[optind++];
+               fill_ifinfo(dev);
+               setup_socket();
+       }
+
+       if(optind>=argc) {
+               scan.start = ifinfo.net;
+               scan.end = (ifinfo.net | ~ifinfo.mask) + 1;
+       } else {
+               if(!parse_iprange(argv[optind]))
+                       errx(1, "%s: bad IP range", argv[optind]);
+               opts.isrange = 1;
+       }
+
+       if(ifinfo.hw_type != ARPHRD_ETHER)
+               opts.proui = 0, opts.noethn = 1;
+
+       if(opts.passive)
+               passive();
+
+       /* hw broadcast address is Linux's secret, this works with Ethernet */
+       bcast.sa.sa_family = AF_PACKET;
+       bcast.ll.sll_protocol = ARP;
+       bcast.ll.sll_ifindex = ifinfo.index;
+       bcast.ll.sll_hatype = ifinfo.hw_type;
+       bcast.ll.sll_pkttype = PACKET_BROADCAST; /* unused :-( */
+       bcast.ll.sll_halen = ifinfo.hw.len;
+       memset(bcast.ll.sll_addr, 0xFF, ifinfo.hw.len);
+
+       if(IN_RANGE(ifinfo.ip)) {
+               /* XXX we should add all our arpable addresses on the interface */
+               struct he *he;
+               he_for(ifinfo.ip, &he, 1);
+               hw_set(&he->hw, ifinfo.hw.len, ifinfo.hw.addr);
+               hw_set(&he->from, ifinfo.hw.len, ifinfo.hw.addr);
+               if(!opts.sort)
+                       print_he(he);
+       }
+
+       /* 1st scan */
+       scan.ip = scan.start;
+       while(sendscan()) {
+               while(waitsock(10))
+                       receive();
+       }
+       /* 2nd scan */
+       scan.ip = scan.start;
+       while(sendscan()) {
+               while(waitsock(10))
+                       receive();
+       }
+       while(waitsock(opts.wait))
+               receive();
+
+       if(opts.sort) for(scan.ip = ifinfo.net; scan.ip != scan.end; scan.ip++) {
+               struct he *he;
+               if(he_for(scan.ip, &he, 0))
+                       print_he(he);
+       }
+       return 0;
+}
+
+
+typedef uint8_t u8;
+static int fd = -2;
+static char *ouiptr, *ouiend;
+
+static void open_oui()
+{
+       struct stat st;
+       fd = open("oui", O_RDONLY);
+       if(fd < 0) {
+               fd = open(STR(OUI), O_RDONLY);
+               if(fd < 0) goto err;
+       }
+       if(fstat(fd, &st) < 0 || st.st_size == 0) goto err_cl;
+       ouiptr = mmap(0, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
+       ouiend = ouiptr + st.st_size;
+       if(ouiptr == MAP_FAILED) {
+err_cl:
+               close(fd); fd=-1;
+err:
+               warnx("Can't open OUI database");
+               return;
+       }
+#ifdef MADV_SEQUENTIAL
+       madvise(ouiptr, st.st_size, MADV_SEQUENTIAL);
+#endif
+}
+
+void print_oui(int sp, u8 a[6])
+{
+       char addr[7], *p, *q;
+       if(fd < 0) {
+               if(fd == -2)
+                       open_oui();
+               if(fd < 0)
+                       return;
+       }
+       sprintf(addr, "%02X%02X%02X", a[0], a[1], a[2]);
+
+       for(p=ouiptr; p<ouiend; p=q+1) {
+               q = memchr(p, '\n', ouiend-p);
+               if(!q) q=ouiend;
+               if(q-p < 8 || memcmp(p, addr, 6))
+                       continue;
+
+               p += 7;
+print:
+               printf("%*s%.*s", sp, "", (int)(q-p), p);
+               return;
+       }
+       if(a[0]==0 && a[1]==0xFF) {
+               p = "(generated)";
+               q = p + 11;
+               goto print;
+       }
+}
\ No newline at end of file
index 1e166eb3da160f0467641d82f49cd5e2a41d3373..7cffc89df9c224998f0de5247f51cce6ba136fc9 100644 (file)
@@ -42,6 +42,7 @@ int main(void) {
        char buffer[STRING_SIZE];
        char *index, *ipaddress, *macaddress, *enabled;
        struct keyvalue *kv = NULL;
+       struct keyvalue* captive_settings = NULL;
 
        if (!(initsetuid()))
                exit(1);
@@ -67,6 +68,13 @@ int main(void) {
                exit(1);
        }
 
+       // Read captive portal settings
+       captive_settings = initkeyvalues();
+       if (!readkeyvalues(captive_settings, CONFIG_ROOT "/captive/settings")) {
+               fprintf(stderr, "Could not read captive portal settings\n");
+               exit(1);
+       }
+
        /* Get the BLUE interface details */
        if (findkey(kv, "BLUE_DEV", blue_dev) > 0) {
                if ((strlen(blue_dev) > 0) && !VALID_DEVICE(blue_dev)) {
@@ -79,6 +87,15 @@ int main(void) {
                exit(0);
        }
 
+       // Check if the captive portal is enabled on blue. If so, we will
+       // just keep the chains flushed and do not add any rules.
+       char captive_enabled[STRING_SIZE];
+       if (findkey(captive_settings, "ENABLE_BLUE", captive_enabled) > 0) {
+               if (strcmp(captive_enabled, "on") == 0) {
+                       return 0;
+               }
+       }
+
        if ((fd = fopen(CONFIG_ROOT "/wireless/nodrop", "r")))
                return 0;
 
diff --git a/src/paks/wio/install.sh b/src/paks/wio/install.sh
new file mode 100644 (file)
index 0000000..5c7705b
--- /dev/null
@@ -0,0 +1,38 @@
+#!/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 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) 2009 IPFire-Team <info@ipfire.org>.                        #
+#                                                                          #
+############################################################################
+#
+. /opt/pakfire/lib/functions.sh
+extract_files
+restore_backup ${NAME}
+
+chown -R nobody.nobody /var/ipfire/wio
+chown -R nobody.nobody /var/log/rrd/wio
+chown -R nobody.nobody /var/log/wio
+chown root.nobody /usr/local/bin/wioscan
+chown root.nobody /usr/local/bin/wiohelper
+chown nobody.nobody /var/ipfire/menu.d/EX-wio.menu
+
+chmod 4750 /usr/local/bin/wioscan
+chmod 4750 /usr/local/bin/wiohelper
+
+/usr/local/bin/update-lang-cache
diff --git a/src/paks/wio/uninstall.sh b/src/paks/wio/uninstall.sh
new file mode 100644 (file)
index 0000000..6be522d
--- /dev/null
@@ -0,0 +1,28 @@
+#!/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 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) 2014 IPFire-Team <alexander.marx@ipfire.org>               #
+#                                                                          #
+############################################################################
+
+. /opt/pakfire/lib/functions.sh
+make_backup ${NAME}
+remove_files
+
+/usr/local/bin/update-lang-cache
diff --git a/src/paks/wio/update.sh b/src/paks/wio/update.sh
new file mode 100644 (file)
index 0000000..89c40d0
--- /dev/null
@@ -0,0 +1,26 @@
+#!/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 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) 2007 IPFire-Team <info@ipfire.org>.                        #
+#                                                                          #
+############################################################################
+#
+. /opt/pakfire/lib/functions.sh
+./uninstall.sh
+./install.sh
diff --git a/src/patches/unbound-allow-setting-validator-permissive-mode-at-runtime.patch b/src/patches/unbound-allow-setting-validator-permissive-mode-at-runtime.patch
deleted file mode 100644 (file)
index f476d08..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-diff --git a/validator/validator.c b/validator/validator.c
-index 676dcdf..7c19f3d 100644
---- a/validator/validator.c
-+++ b/validator/validator.c
-@@ -113,7 +113,7 @@ val_apply_cfg(struct module_env* env, struct val_env* val_env,
-       int c;
-       val_env->bogus_ttl = (uint32_t)cfg->bogus_ttl;
-       val_env->clean_additional = cfg->val_clean_additional;
--      val_env->permissive_mode = cfg->val_permissive_mode;
-+      val_env->permissive_mode = &cfg->val_permissive_mode;
-       if(!env->anchors)
-               env->anchors = anchors_create();
-       if(!env->anchors) {
-@@ -170,7 +170,6 @@ val_init(struct module_env* env, int id)
-       }
-       env->modinfo[id] = (void*)val_env;
-       env->need_to_validate = 1;
--      val_env->permissive_mode = 0;
-       lock_basic_init(&val_env->bogus_lock);
-       lock_protect(&val_env->bogus_lock, &val_env->num_rrset_bogus,
-               sizeof(val_env->num_rrset_bogus));
-@@ -2084,7 +2083,7 @@ processFinished(struct module_qstate* qstate, struct val_qstate* vq,
-                       }
-               }
-               /* If we are in permissive mode, bogus gets indeterminate */
--              if(ve->permissive_mode)
-+              if(*ve->permissive_mode)
-                       vq->orig_msg->rep->security = sec_status_indeterminate;
-       }
-diff --git a/validator/validator.h b/validator/validator.h
-index 23d3072..f8464b8 100644
---- a/validator/validator.h
-+++ b/validator/validator.h
-@@ -104,7 +104,7 @@ struct val_env {
-        * This allows an operator to run validation 'shadow' without
-        * hurting responses to clients.
-        */
--      int permissive_mode;
-+      int* permissive_mode;
-       /**
-        * Number of entries in the NSEC3 maximum iteration count table.
diff --git a/src/patches/wpa_supplicant/0001-hostapd-Avoid-key-reinstallation-in-FT-handshake.patch b/src/patches/wpa_supplicant/0001-hostapd-Avoid-key-reinstallation-in-FT-handshake.patch
new file mode 100644 (file)
index 0000000..9163083
--- /dev/null
@@ -0,0 +1,174 @@
+From 3692833a62280a0270e4e1ba30f9acf5a8c8f808 Mon Sep 17 00:00:00 2001
+From: Mathy Vanhoef <Mathy.Vanhoef@cs.kuleuven.be>
+Date: Fri, 14 Jul 2017 15:15:35 +0200
+Subject: [PATCH 1/8] hostapd: Avoid key reinstallation in FT handshake
+
+Do not reinstall TK to the driver during Reassociation Response frame
+processing if the first attempt of setting the TK succeeded. This avoids
+issues related to clearing the TX/RX PN that could result in reusing
+same PN values for transmitted frames (e.g., due to CCM nonce reuse and
+also hitting replay protection on the receiver) and accepting replayed
+frames on RX side.
+
+This issue was introduced by the commit
+0e84c25434e6a1f283c7b4e62e483729085b78d2 ('FT: Fix PTK configuration in
+authenticator') which allowed wpa_ft_install_ptk() to be called multiple
+times with the same PTK. While the second configuration attempt is
+needed with some drivers, it must be done only if the first attempt
+failed.
+
+Signed-off-by: Mathy Vanhoef <Mathy.Vanhoef@cs.kuleuven.be>
+---
+ src/ap/ieee802_11.c  | 16 +++++++++++++---
+ src/ap/wpa_auth.c    | 11 +++++++++++
+ src/ap/wpa_auth.h    |  3 ++-
+ src/ap/wpa_auth_ft.c | 10 ++++++++++
+ src/ap/wpa_auth_i.h  |  1 +
+ 5 files changed, 37 insertions(+), 4 deletions(-)
+
+diff --git a/src/ap/ieee802_11.c b/src/ap/ieee802_11.c
+index 5163139..174af8b 100644
+--- a/src/ap/ieee802_11.c
++++ b/src/ap/ieee802_11.c
+@@ -2552,6 +2552,7 @@ static int add_associated_sta(struct hostapd_data *hapd,
+ {
+       struct ieee80211_ht_capabilities ht_cap;
+       struct ieee80211_vht_capabilities vht_cap;
++      int set = 1;
+       /*
+        * Remove the STA entry to ensure the STA PS state gets cleared and
+@@ -2559,9 +2560,18 @@ static int add_associated_sta(struct hostapd_data *hapd,
+        * FT-over-the-DS, where a station re-associates back to the same AP but
+        * skips the authentication flow, or if working with a driver that
+        * does not support full AP client state.
++       *
++       * Skip this if the STA has already completed FT reassociation and the
++       * TK has been configured since the TX/RX PN must not be reset to 0 for
++       * the same key.
+        */
+-      if (!sta->added_unassoc)
++      if (!sta->added_unassoc &&
++          (!(sta->flags & WLAN_STA_AUTHORIZED) ||
++           !wpa_auth_sta_ft_tk_already_set(sta->wpa_sm))) {
+               hostapd_drv_sta_remove(hapd, sta->addr);
++              wpa_auth_sm_event(sta->wpa_sm, WPA_DRV_STA_REMOVED);
++              set = 0;
++      }
+ #ifdef CONFIG_IEEE80211N
+       if (sta->flags & WLAN_STA_HT)
+@@ -2584,11 +2594,11 @@ static int add_associated_sta(struct hostapd_data *hapd,
+                           sta->flags & WLAN_STA_VHT ? &vht_cap : NULL,
+                           sta->flags | WLAN_STA_ASSOC, sta->qosinfo,
+                           sta->vht_opmode, sta->p2p_ie ? 1 : 0,
+-                          sta->added_unassoc)) {
++                          set)) {
+               hostapd_logger(hapd, sta->addr,
+                              HOSTAPD_MODULE_IEEE80211, HOSTAPD_LEVEL_NOTICE,
+                              "Could not %s STA to kernel driver",
+-                             sta->added_unassoc ? "set" : "add");
++                             set ? "set" : "add");
+               if (sta->added_unassoc) {
+                       hostapd_drv_sta_remove(hapd, sta->addr);
+diff --git a/src/ap/wpa_auth.c b/src/ap/wpa_auth.c
+index aca687c..42ef0bf 100644
+--- a/src/ap/wpa_auth.c
++++ b/src/ap/wpa_auth.c
+@@ -1785,6 +1785,9 @@ int wpa_auth_sm_event(struct wpa_state_machine *sm, enum wpa_event event)
+ #else /* CONFIG_FILS */
+               break;
+ #endif /* CONFIG_FILS */
++      case WPA_DRV_STA_REMOVED:
++              sm->tk_already_set = FALSE;
++              return 0;
+       }
+ #ifdef CONFIG_IEEE80211R_AP
+@@ -3939,6 +3942,14 @@ int wpa_auth_sta_wpa_version(struct wpa_state_machine *sm)
+ }
++int wpa_auth_sta_ft_tk_already_set(struct wpa_state_machine *sm)
++{
++      if (!sm || !wpa_key_mgmt_ft(sm->wpa_key_mgmt))
++              return 0;
++      return sm->tk_already_set;
++}
++
++
+ int wpa_auth_sta_clear_pmksa(struct wpa_state_machine *sm,
+                            struct rsn_pmksa_cache_entry *entry)
+ {
+diff --git a/src/ap/wpa_auth.h b/src/ap/wpa_auth.h
+index 5e8a4cc..f92f8b6 100644
+--- a/src/ap/wpa_auth.h
++++ b/src/ap/wpa_auth.h
+@@ -300,7 +300,7 @@ void wpa_receive(struct wpa_authenticator *wpa_auth,
+                u8 *data, size_t data_len);
+ enum wpa_event {
+       WPA_AUTH, WPA_ASSOC, WPA_DISASSOC, WPA_DEAUTH, WPA_REAUTH,
+-      WPA_REAUTH_EAPOL, WPA_ASSOC_FT, WPA_ASSOC_FILS
++      WPA_REAUTH_EAPOL, WPA_ASSOC_FT, WPA_ASSOC_FILS, WPA_DRV_STA_REMOVED
+ };
+ void wpa_remove_ptk(struct wpa_state_machine *sm);
+ int wpa_auth_sm_event(struct wpa_state_machine *sm, enum wpa_event event);
+@@ -313,6 +313,7 @@ int wpa_auth_pairwise_set(struct wpa_state_machine *sm);
+ int wpa_auth_get_pairwise(struct wpa_state_machine *sm);
+ int wpa_auth_sta_key_mgmt(struct wpa_state_machine *sm);
+ int wpa_auth_sta_wpa_version(struct wpa_state_machine *sm);
++int wpa_auth_sta_ft_tk_already_set(struct wpa_state_machine *sm);
+ int wpa_auth_sta_clear_pmksa(struct wpa_state_machine *sm,
+                            struct rsn_pmksa_cache_entry *entry);
+ struct rsn_pmksa_cache_entry *
+diff --git a/src/ap/wpa_auth_ft.c b/src/ap/wpa_auth_ft.c
+index dd99db7..2120cfd 100644
+--- a/src/ap/wpa_auth_ft.c
++++ b/src/ap/wpa_auth_ft.c
+@@ -1937,6 +1937,14 @@ void wpa_ft_install_ptk(struct wpa_state_machine *sm)
+               return;
+       }
++      if (sm->tk_already_set) {
++              /* Must avoid TK reconfiguration to prevent clearing of TX/RX
++               * PN in the driver */
++              wpa_printf(MSG_DEBUG,
++                         "FT: Do not re-install same PTK to the driver");
++              return;
++      }
++
+       /* FIX: add STA entry to kernel/driver here? The set_key will fail
+        * most likely without this.. At the moment, STA entry is added only
+        * after association has been completed. This function will be called
+@@ -1949,6 +1957,7 @@ void wpa_ft_install_ptk(struct wpa_state_machine *sm)
+       /* FIX: MLME-SetProtection.Request(TA, Tx_Rx) */
+       sm->pairwise_set = TRUE;
++      sm->tk_already_set = TRUE;
+ }
+@@ -2152,6 +2161,7 @@ static int wpa_ft_process_auth_req(struct wpa_state_machine *sm,
+       sm->pairwise = pairwise;
+       sm->PTK_valid = TRUE;
++      sm->tk_already_set = FALSE;
+       wpa_ft_install_ptk(sm);
+       buflen = 2 + sizeof(struct rsn_mdie) + 2 + sizeof(struct rsn_ftie) +
+diff --git a/src/ap/wpa_auth_i.h b/src/ap/wpa_auth_i.h
+index 23d2af3..b779af7 100644
+--- a/src/ap/wpa_auth_i.h
++++ b/src/ap/wpa_auth_i.h
+@@ -61,6 +61,7 @@ struct wpa_state_machine {
+       struct wpa_ptk PTK;
+       Boolean PTK_valid;
+       Boolean pairwise_set;
++      Boolean tk_already_set;
+       int keycount;
+       Boolean Pair;
+       struct wpa_key_replay_counter {
+-- 
+2.7.4
+
diff --git a/src/patches/wpa_supplicant/0002-Prevent-reinstallation-of-an-already-in-use-group-ke.patch b/src/patches/wpa_supplicant/0002-Prevent-reinstallation-of-an-already-in-use-group-ke.patch
new file mode 100644 (file)
index 0000000..e372e32
--- /dev/null
@@ -0,0 +1,259 @@
+From cf62cadcadc68377d72e2238a0f06b21c0777f90 Mon Sep 17 00:00:00 2001
+From: Mathy Vanhoef <Mathy.Vanhoef@cs.kuleuven.be>
+Date: Wed, 12 Jul 2017 16:03:24 +0200
+Subject: [PATCH 2/8] Prevent reinstallation of an already in-use group key
+
+Track the current GTK and IGTK that is in use and when receiving a
+(possibly retransmitted) Group Message 1 or WNM-Sleep Mode Response, do
+not install the given key if it is already in use. This prevents an
+attacker from trying to trick the client into resetting or lowering the
+sequence counter associated to the group key.
+
+Signed-off-by: Mathy Vanhoef <Mathy.Vanhoef@cs.kuleuven.be>
+---
+ src/common/wpa_common.h |  11 +++++
+ src/rsn_supp/wpa.c      | 118 ++++++++++++++++++++++++++++++------------------
+ src/rsn_supp/wpa_i.h    |   4 ++
+ 3 files changed, 88 insertions(+), 45 deletions(-)
+
+diff --git a/src/common/wpa_common.h b/src/common/wpa_common.h
+index cc8edf8..0872b12 100644
+--- a/src/common/wpa_common.h
++++ b/src/common/wpa_common.h
+@@ -221,6 +221,17 @@ struct wpa_ptk {
+       size_t tk_len;
+ };
++struct wpa_gtk {
++      u8 gtk[WPA_GTK_MAX_LEN];
++      size_t gtk_len;
++};
++
++#ifdef CONFIG_IEEE80211W
++struct wpa_igtk {
++      u8 igtk[WPA_IGTK_MAX_LEN];
++      size_t igtk_len;
++};
++#endif /* CONFIG_IEEE80211W */
+ /* WPA IE version 1
+  * 00-50-f2:1 (OUI:OUI type)
+diff --git a/src/rsn_supp/wpa.c b/src/rsn_supp/wpa.c
+index 739689d..5e5fb2a 100644
+--- a/src/rsn_supp/wpa.c
++++ b/src/rsn_supp/wpa.c
+@@ -800,6 +800,15 @@ static int wpa_supplicant_install_gtk(struct wpa_sm *sm,
+       const u8 *_gtk = gd->gtk;
+       u8 gtk_buf[32];
++      /* Detect possible key reinstallation */
++      if (sm->gtk.gtk_len == (size_t) gd->gtk_len &&
++          os_memcmp(sm->gtk.gtk, gd->gtk, sm->gtk.gtk_len) == 0) {
++              wpa_dbg(sm->ctx->msg_ctx, MSG_DEBUG,
++                      "WPA: Not reinstalling already in-use GTK to the driver (keyidx=%d tx=%d len=%d)",
++                      gd->keyidx, gd->tx, gd->gtk_len);
++              return 0;
++      }
++
+       wpa_hexdump_key(MSG_DEBUG, "WPA: Group Key", gd->gtk, gd->gtk_len);
+       wpa_dbg(sm->ctx->msg_ctx, MSG_DEBUG,
+               "WPA: Installing GTK to the driver (keyidx=%d tx=%d len=%d)",
+@@ -834,6 +843,9 @@ static int wpa_supplicant_install_gtk(struct wpa_sm *sm,
+       }
+       os_memset(gtk_buf, 0, sizeof(gtk_buf));
++      sm->gtk.gtk_len = gd->gtk_len;
++      os_memcpy(sm->gtk.gtk, gd->gtk, sm->gtk.gtk_len);
++
+       return 0;
+ }
+@@ -940,6 +952,48 @@ static int wpa_supplicant_pairwise_gtk(struct wpa_sm *sm,
+ }
++#ifdef CONFIG_IEEE80211W
++static int wpa_supplicant_install_igtk(struct wpa_sm *sm,
++                                     const struct wpa_igtk_kde *igtk)
++{
++      size_t len = wpa_cipher_key_len(sm->mgmt_group_cipher);
++      u16 keyidx = WPA_GET_LE16(igtk->keyid);
++
++      /* Detect possible key reinstallation */
++      if (sm->igtk.igtk_len == len &&
++          os_memcmp(sm->igtk.igtk, igtk->igtk, sm->igtk.igtk_len) == 0) {
++              wpa_dbg(sm->ctx->msg_ctx, MSG_DEBUG,
++                      "WPA: Not reinstalling already in-use IGTK to the driver (keyidx=%d)",
++                      keyidx);
++              return  0;
++      }
++
++      wpa_dbg(sm->ctx->msg_ctx, MSG_DEBUG,
++              "WPA: IGTK keyid %d pn %02x%02x%02x%02x%02x%02x",
++              keyidx, MAC2STR(igtk->pn));
++      wpa_hexdump_key(MSG_DEBUG, "WPA: IGTK", igtk->igtk, len);
++      if (keyidx > 4095) {
++              wpa_msg(sm->ctx->msg_ctx, MSG_WARNING,
++                      "WPA: Invalid IGTK KeyID %d", keyidx);
++              return -1;
++      }
++      if (wpa_sm_set_key(sm, wpa_cipher_to_alg(sm->mgmt_group_cipher),
++                         broadcast_ether_addr,
++                         keyidx, 0, igtk->pn, sizeof(igtk->pn),
++                         igtk->igtk, len) < 0) {
++              wpa_msg(sm->ctx->msg_ctx, MSG_WARNING,
++                      "WPA: Failed to configure IGTK to the driver");
++              return -1;
++      }
++
++      sm->igtk.igtk_len = len;
++      os_memcpy(sm->igtk.igtk, igtk->igtk, sm->igtk.igtk_len);
++
++      return 0;
++}
++#endif /* CONFIG_IEEE80211W */
++
++
+ static int ieee80211w_set_keys(struct wpa_sm *sm,
+                              struct wpa_eapol_ie_parse *ie)
+ {
+@@ -950,30 +1004,14 @@ static int ieee80211w_set_keys(struct wpa_sm *sm,
+       if (ie->igtk) {
+               size_t len;
+               const struct wpa_igtk_kde *igtk;
+-              u16 keyidx;
++
+               len = wpa_cipher_key_len(sm->mgmt_group_cipher);
+               if (ie->igtk_len != WPA_IGTK_KDE_PREFIX_LEN + len)
+                       return -1;
++
+               igtk = (const struct wpa_igtk_kde *) ie->igtk;
+-              keyidx = WPA_GET_LE16(igtk->keyid);
+-              wpa_dbg(sm->ctx->msg_ctx, MSG_DEBUG, "WPA: IGTK keyid %d "
+-                      "pn %02x%02x%02x%02x%02x%02x",
+-                      keyidx, MAC2STR(igtk->pn));
+-              wpa_hexdump_key(MSG_DEBUG, "WPA: IGTK",
+-                              igtk->igtk, len);
+-              if (keyidx > 4095) {
+-                      wpa_msg(sm->ctx->msg_ctx, MSG_WARNING,
+-                              "WPA: Invalid IGTK KeyID %d", keyidx);
+-                      return -1;
+-              }
+-              if (wpa_sm_set_key(sm, wpa_cipher_to_alg(sm->mgmt_group_cipher),
+-                                 broadcast_ether_addr,
+-                                 keyidx, 0, igtk->pn, sizeof(igtk->pn),
+-                                 igtk->igtk, len) < 0) {
+-                      wpa_msg(sm->ctx->msg_ctx, MSG_WARNING,
+-                              "WPA: Failed to configure IGTK to the driver");
++              if (wpa_supplicant_install_igtk(sm, igtk) < 0)
+                       return -1;
+-              }
+       }
+       return 0;
+@@ -2491,7 +2529,7 @@ void wpa_sm_deinit(struct wpa_sm *sm)
+  */
+ void wpa_sm_notify_assoc(struct wpa_sm *sm, const u8 *bssid)
+ {
+-      int clear_ptk = 1;
++      int clear_keys = 1;
+       if (sm == NULL)
+               return;
+@@ -2517,7 +2555,7 @@ void wpa_sm_notify_assoc(struct wpa_sm *sm, const u8 *bssid)
+               /* Prepare for the next transition */
+               wpa_ft_prepare_auth_request(sm, NULL);
+-              clear_ptk = 0;
++              clear_keys = 0;
+       }
+ #endif /* CONFIG_IEEE80211R */
+ #ifdef CONFIG_FILS
+@@ -2527,11 +2565,11 @@ void wpa_sm_notify_assoc(struct wpa_sm *sm, const u8 *bssid)
+                * AUTHENTICATED state to get the EAPOL port Authorized.
+                */
+               wpa_supplicant_key_neg_complete(sm, sm->bssid, 1);
+-              clear_ptk = 0;
++              clear_keys = 0;
+       }
+ #endif /* CONFIG_FILS */
+-      if (clear_ptk) {
++      if (clear_keys) {
+               /*
+                * IEEE 802.11, 8.4.10: Delete PTK SA on (re)association if
+                * this is not part of a Fast BSS Transition.
+@@ -2541,6 +2579,10 @@ void wpa_sm_notify_assoc(struct wpa_sm *sm, const u8 *bssid)
+               os_memset(&sm->ptk, 0, sizeof(sm->ptk));
+               sm->tptk_set = 0;
+               os_memset(&sm->tptk, 0, sizeof(sm->tptk));
++              os_memset(&sm->gtk, 0, sizeof(sm->gtk));
++#ifdef CONFIG_IEEE80211W
++              os_memset(&sm->igtk, 0, sizeof(sm->igtk));
++#endif /* CONFIG_IEEE80211W */
+       }
+ #ifdef CONFIG_TDLS
+@@ -3117,6 +3159,10 @@ void wpa_sm_drop_sa(struct wpa_sm *sm)
+       os_memset(sm->pmk, 0, sizeof(sm->pmk));
+       os_memset(&sm->ptk, 0, sizeof(sm->ptk));
+       os_memset(&sm->tptk, 0, sizeof(sm->tptk));
++      os_memset(&sm->gtk, 0, sizeof(sm->gtk));
++#ifdef CONFIG_IEEE80211W
++      os_memset(&sm->igtk, 0, sizeof(sm->igtk));
++#endif /* CONFIG_IEEE80211W */
+ #ifdef CONFIG_IEEE80211R
+       os_memset(sm->xxkey, 0, sizeof(sm->xxkey));
+       os_memset(sm->pmk_r0, 0, sizeof(sm->pmk_r0));
+@@ -3189,29 +3235,11 @@ int wpa_wnmsleep_install_key(struct wpa_sm *sm, u8 subelem_id, u8 *buf)
+               os_memset(&gd, 0, sizeof(gd));
+ #ifdef CONFIG_IEEE80211W
+       } else if (subelem_id == WNM_SLEEP_SUBELEM_IGTK) {
+-              struct wpa_igtk_kde igd;
+-              u16 keyidx;
+-
+-              os_memset(&igd, 0, sizeof(igd));
+-              keylen = wpa_cipher_key_len(sm->mgmt_group_cipher);
+-              os_memcpy(igd.keyid, buf + 2, 2);
+-              os_memcpy(igd.pn, buf + 4, 6);
+-
+-              keyidx = WPA_GET_LE16(igd.keyid);
+-              os_memcpy(igd.igtk, buf + 10, keylen);
+-
+-              wpa_hexdump_key(MSG_DEBUG, "Install IGTK (WNM SLEEP)",
+-                              igd.igtk, keylen);
+-              if (wpa_sm_set_key(sm, wpa_cipher_to_alg(sm->mgmt_group_cipher),
+-                                 broadcast_ether_addr,
+-                                 keyidx, 0, igd.pn, sizeof(igd.pn),
+-                                 igd.igtk, keylen) < 0) {
+-                      wpa_printf(MSG_DEBUG, "Failed to install the IGTK in "
+-                                 "WNM mode");
+-                      os_memset(&igd, 0, sizeof(igd));
++              const struct wpa_igtk_kde *igtk;
++
++              igtk = (const struct wpa_igtk_kde *) (buf + 2);
++              if (wpa_supplicant_install_igtk(sm, igtk) < 0)
+                       return -1;
+-              }
+-              os_memset(&igd, 0, sizeof(igd));
+ #endif /* CONFIG_IEEE80211W */
+       } else {
+               wpa_printf(MSG_DEBUG, "Unknown element id");
+diff --git a/src/rsn_supp/wpa_i.h b/src/rsn_supp/wpa_i.h
+index 82e1941..2827ed6 100644
+--- a/src/rsn_supp/wpa_i.h
++++ b/src/rsn_supp/wpa_i.h
+@@ -31,6 +31,10 @@ struct wpa_sm {
+       u8 rx_replay_counter[WPA_REPLAY_COUNTER_LEN];
+       int rx_replay_counter_set;
+       u8 request_counter[WPA_REPLAY_COUNTER_LEN];
++      struct wpa_gtk gtk;
++#ifdef CONFIG_IEEE80211W
++      struct wpa_igtk igtk;
++#endif /* CONFIG_IEEE80211W */
+       struct eapol_sm *eapol; /* EAPOL state machine from upper level code */
+-- 
+2.7.4
+
diff --git a/src/patches/wpa_supplicant/0003-Extend-protection-of-GTK-IGTK-reinstallation-of-WNM-.patch b/src/patches/wpa_supplicant/0003-Extend-protection-of-GTK-IGTK-reinstallation-of-WNM-.patch
new file mode 100644 (file)
index 0000000..68059de
--- /dev/null
@@ -0,0 +1,193 @@
+From a0d426a662997b87095c87edc1d2bdc6e1c8fd11 Mon Sep 17 00:00:00 2001
+From: Jouni Malinen <j@w1.fi>
+Date: Sun, 1 Oct 2017 12:12:24 +0300
+Subject: [PATCH 3/8] Extend protection of GTK/IGTK reinstallation of WNM-Sleep
+ Mode cases
+
+This extends the protection to track last configured GTK/IGTK value
+separately from EAPOL-Key frames and WNM-Sleep Mode frames to cover a
+corner case where these two different mechanisms may get used when the
+GTK/IGTK has changed and tracking a single value is not sufficient to
+detect a possible key reconfiguration.
+
+Signed-off-by: Jouni Malinen <j@w1.fi>
+---
+ src/rsn_supp/wpa.c   | 55 +++++++++++++++++++++++++++++++++++++---------------
+ src/rsn_supp/wpa_i.h |  2 ++
+ 2 files changed, 41 insertions(+), 16 deletions(-)
+
+diff --git a/src/rsn_supp/wpa.c b/src/rsn_supp/wpa.c
+index 5e5fb2a..3c8871d 100644
+--- a/src/rsn_supp/wpa.c
++++ b/src/rsn_supp/wpa.c
+@@ -795,14 +795,17 @@ struct wpa_gtk_data {
+ static int wpa_supplicant_install_gtk(struct wpa_sm *sm,
+                                     const struct wpa_gtk_data *gd,
+-                                    const u8 *key_rsc)
++                                    const u8 *key_rsc, int wnm_sleep)
+ {
+       const u8 *_gtk = gd->gtk;
+       u8 gtk_buf[32];
+       /* Detect possible key reinstallation */
+-      if (sm->gtk.gtk_len == (size_t) gd->gtk_len &&
+-          os_memcmp(sm->gtk.gtk, gd->gtk, sm->gtk.gtk_len) == 0) {
++      if ((sm->gtk.gtk_len == (size_t) gd->gtk_len &&
++           os_memcmp(sm->gtk.gtk, gd->gtk, sm->gtk.gtk_len) == 0) ||
++          (sm->gtk_wnm_sleep.gtk_len == (size_t) gd->gtk_len &&
++           os_memcmp(sm->gtk_wnm_sleep.gtk, gd->gtk,
++                     sm->gtk_wnm_sleep.gtk_len) == 0)) {
+               wpa_dbg(sm->ctx->msg_ctx, MSG_DEBUG,
+                       "WPA: Not reinstalling already in-use GTK to the driver (keyidx=%d tx=%d len=%d)",
+                       gd->keyidx, gd->tx, gd->gtk_len);
+@@ -843,8 +846,14 @@ static int wpa_supplicant_install_gtk(struct wpa_sm *sm,
+       }
+       os_memset(gtk_buf, 0, sizeof(gtk_buf));
+-      sm->gtk.gtk_len = gd->gtk_len;
+-      os_memcpy(sm->gtk.gtk, gd->gtk, sm->gtk.gtk_len);
++      if (wnm_sleep) {
++              sm->gtk_wnm_sleep.gtk_len = gd->gtk_len;
++              os_memcpy(sm->gtk_wnm_sleep.gtk, gd->gtk,
++                        sm->gtk_wnm_sleep.gtk_len);
++      } else {
++              sm->gtk.gtk_len = gd->gtk_len;
++              os_memcpy(sm->gtk.gtk, gd->gtk, sm->gtk.gtk_len);
++      }
+       return 0;
+ }
+@@ -938,7 +947,7 @@ static int wpa_supplicant_pairwise_gtk(struct wpa_sm *sm,
+           (wpa_supplicant_check_group_cipher(sm, sm->group_cipher,
+                                              gtk_len, gtk_len,
+                                              &gd.key_rsc_len, &gd.alg) ||
+-           wpa_supplicant_install_gtk(sm, &gd, key_rsc))) {
++           wpa_supplicant_install_gtk(sm, &gd, key_rsc, 0))) {
+               wpa_dbg(sm->ctx->msg_ctx, MSG_DEBUG,
+                       "RSN: Failed to install GTK");
+               os_memset(&gd, 0, sizeof(gd));
+@@ -954,14 +963,18 @@ static int wpa_supplicant_pairwise_gtk(struct wpa_sm *sm,
+ #ifdef CONFIG_IEEE80211W
+ static int wpa_supplicant_install_igtk(struct wpa_sm *sm,
+-                                     const struct wpa_igtk_kde *igtk)
++                                     const struct wpa_igtk_kde *igtk,
++                                     int wnm_sleep)
+ {
+       size_t len = wpa_cipher_key_len(sm->mgmt_group_cipher);
+       u16 keyidx = WPA_GET_LE16(igtk->keyid);
+       /* Detect possible key reinstallation */
+-      if (sm->igtk.igtk_len == len &&
+-          os_memcmp(sm->igtk.igtk, igtk->igtk, sm->igtk.igtk_len) == 0) {
++      if ((sm->igtk.igtk_len == len &&
++           os_memcmp(sm->igtk.igtk, igtk->igtk, sm->igtk.igtk_len) == 0) ||
++          (sm->igtk_wnm_sleep.igtk_len == len &&
++           os_memcmp(sm->igtk_wnm_sleep.igtk, igtk->igtk,
++                     sm->igtk_wnm_sleep.igtk_len) == 0)) {
+               wpa_dbg(sm->ctx->msg_ctx, MSG_DEBUG,
+                       "WPA: Not reinstalling already in-use IGTK to the driver (keyidx=%d)",
+                       keyidx);
+@@ -986,8 +999,14 @@ static int wpa_supplicant_install_igtk(struct wpa_sm *sm,
+               return -1;
+       }
+-      sm->igtk.igtk_len = len;
+-      os_memcpy(sm->igtk.igtk, igtk->igtk, sm->igtk.igtk_len);
++      if (wnm_sleep) {
++              sm->igtk_wnm_sleep.igtk_len = len;
++              os_memcpy(sm->igtk_wnm_sleep.igtk, igtk->igtk,
++                        sm->igtk_wnm_sleep.igtk_len);
++      } else {
++              sm->igtk.igtk_len = len;
++              os_memcpy(sm->igtk.igtk, igtk->igtk, sm->igtk.igtk_len);
++      }
+       return 0;
+ }
+@@ -1010,7 +1029,7 @@ static int ieee80211w_set_keys(struct wpa_sm *sm,
+                       return -1;
+               igtk = (const struct wpa_igtk_kde *) ie->igtk;
+-              if (wpa_supplicant_install_igtk(sm, igtk) < 0)
++              if (wpa_supplicant_install_igtk(sm, igtk, 0) < 0)
+                       return -1;
+       }
+@@ -1659,7 +1678,7 @@ static void wpa_supplicant_process_1_of_2(struct wpa_sm *sm,
+       if (wpa_supplicant_rsc_relaxation(sm, key->key_rsc))
+               key_rsc = null_rsc;
+-      if (wpa_supplicant_install_gtk(sm, &gd, key_rsc) ||
++      if (wpa_supplicant_install_gtk(sm, &gd, key_rsc, 0) ||
+           wpa_supplicant_send_2_of_2(sm, key, ver, key_info) < 0)
+               goto failed;
+       os_memset(&gd, 0, sizeof(gd));
+@@ -2580,8 +2599,10 @@ void wpa_sm_notify_assoc(struct wpa_sm *sm, const u8 *bssid)
+               sm->tptk_set = 0;
+               os_memset(&sm->tptk, 0, sizeof(sm->tptk));
+               os_memset(&sm->gtk, 0, sizeof(sm->gtk));
++              os_memset(&sm->gtk_wnm_sleep, 0, sizeof(sm->gtk_wnm_sleep));
+ #ifdef CONFIG_IEEE80211W
+               os_memset(&sm->igtk, 0, sizeof(sm->igtk));
++              os_memset(&sm->igtk_wnm_sleep, 0, sizeof(sm->igtk_wnm_sleep));
+ #endif /* CONFIG_IEEE80211W */
+       }
+@@ -3160,8 +3181,10 @@ void wpa_sm_drop_sa(struct wpa_sm *sm)
+       os_memset(&sm->ptk, 0, sizeof(sm->ptk));
+       os_memset(&sm->tptk, 0, sizeof(sm->tptk));
+       os_memset(&sm->gtk, 0, sizeof(sm->gtk));
++      os_memset(&sm->gtk_wnm_sleep, 0, sizeof(sm->gtk_wnm_sleep));
+ #ifdef CONFIG_IEEE80211W
+       os_memset(&sm->igtk, 0, sizeof(sm->igtk));
++      os_memset(&sm->igtk_wnm_sleep, 0, sizeof(sm->igtk_wnm_sleep));
+ #endif /* CONFIG_IEEE80211W */
+ #ifdef CONFIG_IEEE80211R
+       os_memset(sm->xxkey, 0, sizeof(sm->xxkey));
+@@ -3226,7 +3249,7 @@ int wpa_wnmsleep_install_key(struct wpa_sm *sm, u8 subelem_id, u8 *buf)
+               wpa_hexdump_key(MSG_DEBUG, "Install GTK (WNM SLEEP)",
+                               gd.gtk, gd.gtk_len);
+-              if (wpa_supplicant_install_gtk(sm, &gd, key_rsc)) {
++              if (wpa_supplicant_install_gtk(sm, &gd, key_rsc, 1)) {
+                       os_memset(&gd, 0, sizeof(gd));
+                       wpa_printf(MSG_DEBUG, "Failed to install the GTK in "
+                                  "WNM mode");
+@@ -3238,7 +3261,7 @@ int wpa_wnmsleep_install_key(struct wpa_sm *sm, u8 subelem_id, u8 *buf)
+               const struct wpa_igtk_kde *igtk;
+               igtk = (const struct wpa_igtk_kde *) (buf + 2);
+-              if (wpa_supplicant_install_igtk(sm, igtk) < 0)
++              if (wpa_supplicant_install_igtk(sm, igtk, 1) < 0)
+                       return -1;
+ #endif /* CONFIG_IEEE80211W */
+       } else {
+@@ -4132,7 +4155,7 @@ int fils_process_assoc_resp(struct wpa_sm *sm, const u8 *resp, size_t len)
+       os_memcpy(gd.gtk, kde.gtk + 2, kde.gtk_len - 2);
+       wpa_printf(MSG_DEBUG, "FILS: Set GTK to driver");
+-      if (wpa_supplicant_install_gtk(sm, &gd, elems.key_delivery) < 0) {
++      if (wpa_supplicant_install_gtk(sm, &gd, elems.key_delivery, 0) < 0) {
+               wpa_printf(MSG_DEBUG, "FILS: Failed to set GTK");
+               goto fail;
+       }
+diff --git a/src/rsn_supp/wpa_i.h b/src/rsn_supp/wpa_i.h
+index 2827ed6..156e6cb 100644
+--- a/src/rsn_supp/wpa_i.h
++++ b/src/rsn_supp/wpa_i.h
+@@ -32,8 +32,10 @@ struct wpa_sm {
+       int rx_replay_counter_set;
+       u8 request_counter[WPA_REPLAY_COUNTER_LEN];
+       struct wpa_gtk gtk;
++      struct wpa_gtk gtk_wnm_sleep;
+ #ifdef CONFIG_IEEE80211W
+       struct wpa_igtk igtk;
++      struct wpa_igtk igtk_wnm_sleep;
+ #endif /* CONFIG_IEEE80211W */
+       struct eapol_sm *eapol; /* EAPOL state machine from upper level code */
+-- 
+2.7.4
+
diff --git a/src/patches/wpa_supplicant/0004-Prevent-installation-of-an-all-zero-TK.patch b/src/patches/wpa_supplicant/0004-Prevent-installation-of-an-all-zero-TK.patch
new file mode 100644 (file)
index 0000000..e3bfccb
--- /dev/null
@@ -0,0 +1,87 @@
+From 327b6d780f2667e99e9b74d4c064531c0208b22b Mon Sep 17 00:00:00 2001
+From: Mathy Vanhoef <Mathy.Vanhoef@cs.kuleuven.be>
+Date: Fri, 29 Sep 2017 04:22:51 +0200
+Subject: [PATCH 4/8] Prevent installation of an all-zero TK
+
+Properly track whether a PTK has already been installed to the driver
+and the TK part cleared from memory. This prevents an attacker from
+trying to trick the client into installing an all-zero TK.
+
+This fixes the earlier fix in commit
+ad00d64e7d8827b3cebd665a0ceb08adabf15e1e ('Fix TK configuration to the
+driver in EAPOL-Key 3/4 retry case') which did not take into account
+possibility of an extra message 1/4 showing up between retries of
+message 3/4.
+
+Signed-off-by: Mathy Vanhoef <Mathy.Vanhoef@cs.kuleuven.be>
+---
+ src/common/wpa_common.h | 1 +
+ src/rsn_supp/wpa.c      | 6 +++---
+ src/rsn_supp/wpa_i.h    | 1 -
+ 3 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/src/common/wpa_common.h b/src/common/wpa_common.h
+index 0872b12..8411686 100644
+--- a/src/common/wpa_common.h
++++ b/src/common/wpa_common.h
+@@ -219,6 +219,7 @@ struct wpa_ptk {
+       size_t kck_len;
+       size_t kek_len;
+       size_t tk_len;
++      int installed; /* 1 if key has already been installed to driver */
+ };
+ struct wpa_gtk {
+diff --git a/src/rsn_supp/wpa.c b/src/rsn_supp/wpa.c
+index 3c8871d..cf9bf1c 100644
+--- a/src/rsn_supp/wpa.c
++++ b/src/rsn_supp/wpa.c
+@@ -594,7 +594,6 @@ static void wpa_supplicant_process_1_of_4(struct wpa_sm *sm,
+               os_memset(buf, 0, sizeof(buf));
+       }
+       sm->tptk_set = 1;
+-      sm->tk_to_set = 1;
+       kde = sm->assoc_wpa_ie;
+       kde_len = sm->assoc_wpa_ie_len;
+@@ -701,7 +700,7 @@ static int wpa_supplicant_install_ptk(struct wpa_sm *sm,
+       enum wpa_alg alg;
+       const u8 *key_rsc;
+-      if (!sm->tk_to_set) {
++      if (sm->ptk.installed) {
+               wpa_dbg(sm->ctx->msg_ctx, MSG_DEBUG,
+                       "WPA: Do not re-install same PTK to the driver");
+               return 0;
+@@ -745,7 +744,7 @@ static int wpa_supplicant_install_ptk(struct wpa_sm *sm,
+       /* TK is not needed anymore in supplicant */
+       os_memset(sm->ptk.tk, 0, WPA_TK_MAX_LEN);
+-      sm->tk_to_set = 0;
++      sm->ptk.installed = 1;
+       if (sm->wpa_ptk_rekey) {
+               eloop_cancel_timeout(wpa_sm_rekey_ptk, sm, NULL);
+@@ -4183,6 +4182,7 @@ int fils_process_assoc_resp(struct wpa_sm *sm, const u8 *resp, size_t len)
+        * takes care of association frame encryption/decryption. */
+       /* TK is not needed anymore in supplicant */
+       os_memset(sm->ptk.tk, 0, WPA_TK_MAX_LEN);
++      sm->ptk.installed = 1;
+       /* FILS HLP Container */
+       fils_process_hlp_container(sm, ie_start, end - ie_start);
+diff --git a/src/rsn_supp/wpa_i.h b/src/rsn_supp/wpa_i.h
+index 156e6cb..3b42245 100644
+--- a/src/rsn_supp/wpa_i.h
++++ b/src/rsn_supp/wpa_i.h
+@@ -24,7 +24,6 @@ struct wpa_sm {
+       struct wpa_ptk ptk, tptk;
+       int ptk_set, tptk_set;
+       unsigned int msg_3_of_4_ok:1;
+-      unsigned int tk_to_set:1;
+       u8 snonce[WPA_NONCE_LEN];
+       u8 anonce[WPA_NONCE_LEN]; /* ANonce from the last 1/4 msg */
+       int renew_snonce;
+-- 
+2.7.4
+
diff --git a/src/patches/wpa_supplicant/0005-Fix-PTK-rekeying-to-generate-a-new-ANonce.patch b/src/patches/wpa_supplicant/0005-Fix-PTK-rekeying-to-generate-a-new-ANonce.patch
new file mode 100644 (file)
index 0000000..b019152
--- /dev/null
@@ -0,0 +1,64 @@
+From f1800cce24e8f81e909a68fe8ef1f13abfdec9e3 Mon Sep 17 00:00:00 2001
+From: Jouni Malinen <j@w1.fi>
+Date: Sun, 1 Oct 2017 12:32:57 +0300
+Subject: [PATCH 5/8] Fix PTK rekeying to generate a new ANonce
+
+The Authenticator state machine path for PTK rekeying ended up bypassing
+the AUTHENTICATION2 state where a new ANonce is generated when going
+directly to the PTKSTART state since there is no need to try to
+determine the PMK again in such a case. This is far from ideal since the
+new PTK would depend on a new nonce only from the supplicant.
+
+Fix this by generating a new ANonce when moving to the PTKSTART state
+for the purpose of starting new 4-way handshake to rekey PTK.
+
+Signed-off-by: Jouni Malinen <j@w1.fi>
+---
+ src/ap/wpa_auth.c | 24 +++++++++++++++++++++---
+ 1 file changed, 21 insertions(+), 3 deletions(-)
+
+diff --git a/src/ap/wpa_auth.c b/src/ap/wpa_auth.c
+index 42ef0bf..3b2f97c 100644
+--- a/src/ap/wpa_auth.c
++++ b/src/ap/wpa_auth.c
+@@ -1953,6 +1953,21 @@ SM_STATE(WPA_PTK, AUTHENTICATION2)
+ }
++static int wpa_auth_sm_ptk_update(struct wpa_state_machine *sm)
++{
++      if (random_get_bytes(sm->ANonce, WPA_NONCE_LEN)) {
++              wpa_printf(MSG_ERROR,
++                         "WPA: Failed to get random data for ANonce");
++              sm->Disconnect = TRUE;
++              return -1;
++      }
++      wpa_hexdump(MSG_DEBUG, "WPA: Assign new ANonce", sm->ANonce,
++                  WPA_NONCE_LEN);
++      sm->TimeoutCtr = 0;
++      return 0;
++}
++
++
+ SM_STATE(WPA_PTK, INITPMK)
+ {
+       u8 msk[2 * PMK_LEN];
+@@ -3129,9 +3144,12 @@ SM_STEP(WPA_PTK)
+               SM_ENTER(WPA_PTK, AUTHENTICATION);
+       else if (sm->ReAuthenticationRequest)
+               SM_ENTER(WPA_PTK, AUTHENTICATION2);
+-      else if (sm->PTKRequest)
+-              SM_ENTER(WPA_PTK, PTKSTART);
+-      else switch (sm->wpa_ptk_state) {
++      else if (sm->PTKRequest) {
++              if (wpa_auth_sm_ptk_update(sm) < 0)
++                      SM_ENTER(WPA_PTK, DISCONNECTED);
++              else
++                      SM_ENTER(WPA_PTK, PTKSTART);
++      } else switch (sm->wpa_ptk_state) {
+       case WPA_PTK_INITIALIZE:
+               break;
+       case WPA_PTK_DISCONNECT:
+-- 
+2.7.4
+
diff --git a/src/patches/wpa_supplicant/0006-TDLS-Reject-TPK-TK-reconfiguration.patch b/src/patches/wpa_supplicant/0006-TDLS-Reject-TPK-TK-reconfiguration.patch
new file mode 100644 (file)
index 0000000..d857e50
--- /dev/null
@@ -0,0 +1,132 @@
+From 1b198fae80a4c97ecf358fe825c0488d6ac0e65e Mon Sep 17 00:00:00 2001
+From: Jouni Malinen <j@w1.fi>
+Date: Fri, 22 Sep 2017 11:03:15 +0300
+Subject: [PATCH 6/8] TDLS: Reject TPK-TK reconfiguration
+
+Do not try to reconfigure the same TPK-TK to the driver after it has
+been successfully configured. This is an explicit check to avoid issues
+related to resetting the TX/RX packet number. There was already a check
+for this for TPK M2 (retries of that message are ignored completely), so
+that behavior does not get modified.
+
+For TPK M3, the TPK-TK could have been reconfigured, but that was
+followed by immediate teardown of the link due to an issue in updating
+the STA entry. Furthermore, for TDLS with any real security (i.e.,
+ignoring open/WEP), the TPK message exchange is protected on the AP path
+and simple replay attacks are not feasible.
+
+As an additional corner case, make sure the local nonce gets updated if
+the peer uses a very unlikely "random nonce" of all zeros.
+
+Signed-off-by: Jouni Malinen <j@w1.fi>
+---
+ src/rsn_supp/tdls.c | 38 ++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 36 insertions(+), 2 deletions(-)
+
+diff --git a/src/rsn_supp/tdls.c b/src/rsn_supp/tdls.c
+index 7c95bed..5e350ed 100644
+--- a/src/rsn_supp/tdls.c
++++ b/src/rsn_supp/tdls.c
+@@ -112,6 +112,7 @@ struct wpa_tdls_peer {
+               u8 tk[16]; /* TPK-TK; assuming only CCMP will be used */
+       } tpk;
+       int tpk_set;
++      int tk_set; /* TPK-TK configured to the driver */
+       int tpk_success;
+       int tpk_in_progress;
+@@ -192,6 +193,20 @@ static int wpa_tdls_set_key(struct wpa_sm *sm, struct wpa_tdls_peer *peer)
+       u8 rsc[6];
+       enum wpa_alg alg;
++      if (peer->tk_set) {
++              /*
++               * This same TPK-TK has already been configured to the driver
++               * and this new configuration attempt (likely due to an
++               * unexpected retransmitted frame) would result in clearing
++               * the TX/RX sequence number which can break security, so must
++               * not allow that to happen.
++               */
++              wpa_printf(MSG_INFO, "TDLS: TPK-TK for the peer " MACSTR
++                         " has already been configured to the driver - do not reconfigure",
++                         MAC2STR(peer->addr));
++              return -1;
++      }
++
+       os_memset(rsc, 0, 6);
+       switch (peer->cipher) {
+@@ -209,12 +224,15 @@ static int wpa_tdls_set_key(struct wpa_sm *sm, struct wpa_tdls_peer *peer)
+               return -1;
+       }
++      wpa_printf(MSG_DEBUG, "TDLS: Configure pairwise key for peer " MACSTR,
++                 MAC2STR(peer->addr));
+       if (wpa_sm_set_key(sm, alg, peer->addr, -1, 1,
+                          rsc, sizeof(rsc), peer->tpk.tk, key_len) < 0) {
+               wpa_printf(MSG_WARNING, "TDLS: Failed to set TPK to the "
+                          "driver");
+               return -1;
+       }
++      peer->tk_set = 1;
+       return 0;
+ }
+@@ -693,7 +711,7 @@ static void wpa_tdls_peer_clear(struct wpa_sm *sm, struct wpa_tdls_peer *peer)
+       peer->cipher = 0;
+       peer->qos_info = 0;
+       peer->wmm_capable = 0;
+-      peer->tpk_set = peer->tpk_success = 0;
++      peer->tk_set = peer->tpk_set = peer->tpk_success = 0;
+       peer->chan_switch_enabled = 0;
+       os_memset(&peer->tpk, 0, sizeof(peer->tpk));
+       os_memset(peer->inonce, 0, WPA_NONCE_LEN);
+@@ -1156,6 +1174,7 @@ skip_rsnie:
+               wpa_tdls_peer_free(sm, peer);
+               return -1;
+       }
++      peer->tk_set = 0; /* A new nonce results in a new TK */
+       wpa_hexdump(MSG_DEBUG, "TDLS: Initiator Nonce for TPK handshake",
+                   peer->inonce, WPA_NONCE_LEN);
+       os_memcpy(ftie->Snonce, peer->inonce, WPA_NONCE_LEN);
+@@ -1749,6 +1768,19 @@ static int wpa_tdls_addset_peer(struct wpa_sm *sm, struct wpa_tdls_peer *peer,
+ }
++static int tdls_nonce_set(const u8 *nonce)
++{
++      int i;
++
++      for (i = 0; i < WPA_NONCE_LEN; i++) {
++              if (nonce[i])
++                      return 1;
++      }
++
++      return 0;
++}
++
++
+ static int wpa_tdls_process_tpk_m1(struct wpa_sm *sm, const u8 *src_addr,
+                                  const u8 *buf, size_t len)
+ {
+@@ -2002,7 +2034,8 @@ skip_rsn:
+       peer->rsnie_i_len = kde.rsn_ie_len;
+       peer->cipher = cipher;
+-      if (os_memcmp(peer->inonce, ftie->Snonce, WPA_NONCE_LEN) != 0) {
++      if (os_memcmp(peer->inonce, ftie->Snonce, WPA_NONCE_LEN) != 0 ||
++          !tdls_nonce_set(peer->inonce)) {
+               /*
+                * There is no point in updating the RNonce for every obtained
+                * TPK M1 frame (e.g., retransmission due to timeout) with the
+@@ -2018,6 +2051,7 @@ skip_rsn:
+                               "TDLS: Failed to get random data for responder nonce");
+                       goto error;
+               }
++              peer->tk_set = 0; /* A new nonce results in a new TK */
+       }
+ #if 0
+-- 
+2.7.4
+
diff --git a/src/patches/wpa_supplicant/0007-WNM-Ignore-WNM-Sleep-Mode-Response-without-pending-r.patch b/src/patches/wpa_supplicant/0007-WNM-Ignore-WNM-Sleep-Mode-Response-without-pending-r.patch
new file mode 100644 (file)
index 0000000..890eb34
--- /dev/null
@@ -0,0 +1,43 @@
+From b839814391abb4f95486ef2e24eb5498267eccf5 Mon Sep 17 00:00:00 2001
+From: Jouni Malinen <j@w1.fi>
+Date: Fri, 22 Sep 2017 11:25:02 +0300
+Subject: [PATCH 7/8] WNM: Ignore WNM-Sleep Mode Response without pending
+ request
+
+Commit 03ed0a52393710be6bdae657d1b36efa146520e5 ('WNM: Ignore WNM-Sleep
+Mode Response if WNM-Sleep Mode has not been used') started ignoring the
+response when no WNM-Sleep Mode Request had been used during the
+association. This can be made tighter by clearing the used flag when
+successfully processing a response. This adds an additional layer of
+protection against unexpected retransmissions of the response frame.
+
+Signed-off-by: Jouni Malinen <j@w1.fi>
+---
+ wpa_supplicant/wnm_sta.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/wpa_supplicant/wnm_sta.c b/wpa_supplicant/wnm_sta.c
+index 7339ed2..28346ea 100644
+--- a/wpa_supplicant/wnm_sta.c
++++ b/wpa_supplicant/wnm_sta.c
+@@ -260,7 +260,7 @@ static void ieee802_11_rx_wnmsleep_resp(struct wpa_supplicant *wpa_s,
+       if (!wpa_s->wnmsleep_used) {
+               wpa_printf(MSG_DEBUG,
+-                         "WNM: Ignore WNM-Sleep Mode Response frame since WNM-Sleep Mode has not been used in this association");
++                         "WNM: Ignore WNM-Sleep Mode Response frame since WNM-Sleep Mode operation has not been requested");
+               return;
+       }
+@@ -299,6 +299,8 @@ static void ieee802_11_rx_wnmsleep_resp(struct wpa_supplicant *wpa_s,
+               return;
+       }
++      wpa_s->wnmsleep_used = 0;
++
+       if (wnmsleep_ie->status == WNM_STATUS_SLEEP_ACCEPT ||
+           wnmsleep_ie->status == WNM_STATUS_SLEEP_EXIT_ACCEPT_GTK_UPDATE) {
+               wpa_printf(MSG_DEBUG, "Successfully recv WNM-Sleep Response "
+-- 
+2.7.4
+
diff --git a/src/patches/wpa_supplicant/0008-FT-Do-not-allow-multiple-Reassociation-Response-fram.patch b/src/patches/wpa_supplicant/0008-FT-Do-not-allow-multiple-Reassociation-Response-fram.patch
new file mode 100644 (file)
index 0000000..e5c56b8
--- /dev/null
@@ -0,0 +1,82 @@
+From dc55ea1e483125145459ae1e55be3b95e6263302 Mon Sep 17 00:00:00 2001
+From: Jouni Malinen <j@w1.fi>
+Date: Fri, 22 Sep 2017 12:06:37 +0300
+Subject: [PATCH 8/8] FT: Do not allow multiple Reassociation Response frames
+
+The driver is expected to not report a second association event without
+the station having explicitly request a new association. As such, this
+case should not be reachable. However, since reconfiguring the same
+pairwise or group keys to the driver could result in nonce reuse issues,
+be extra careful here and do an additional state check to avoid this
+even if the local driver ends up somehow accepting an unexpected
+Reassociation Response frame.
+
+Signed-off-by: Jouni Malinen <j@w1.fi>
+---
+ src/rsn_supp/wpa.c    | 3 +++
+ src/rsn_supp/wpa_ft.c | 8 ++++++++
+ src/rsn_supp/wpa_i.h  | 1 +
+ 3 files changed, 12 insertions(+)
+
+diff --git a/src/rsn_supp/wpa.c b/src/rsn_supp/wpa.c
+index cf9bf1c..ed467e6 100644
+--- a/src/rsn_supp/wpa.c
++++ b/src/rsn_supp/wpa.c
+@@ -2637,6 +2637,9 @@ void wpa_sm_notify_disassoc(struct wpa_sm *sm)
+ #ifdef CONFIG_FILS
+       sm->fils_completed = 0;
+ #endif /* CONFIG_FILS */
++#ifdef CONFIG_IEEE80211R
++      sm->ft_reassoc_completed = 0;
++#endif /* CONFIG_IEEE80211R */
+       /* Keys are not needed in the WPA state machine anymore */
+       wpa_sm_drop_sa(sm);
+diff --git a/src/rsn_supp/wpa_ft.c b/src/rsn_supp/wpa_ft.c
+index aeb7aff..1ff7afe 100644
+--- a/src/rsn_supp/wpa_ft.c
++++ b/src/rsn_supp/wpa_ft.c
+@@ -153,6 +153,7 @@ static u8 * wpa_ft_gen_req_ies(struct wpa_sm *sm, size_t *len,
+       u16 capab;
+       sm->ft_completed = 0;
++      sm->ft_reassoc_completed = 0;
+       buf_len = 2 + sizeof(struct rsn_mdie) + 2 + sizeof(struct rsn_ftie) +
+               2 + sm->r0kh_id_len + ric_ies_len + 100;
+@@ -687,6 +688,11 @@ int wpa_ft_validate_reassoc_resp(struct wpa_sm *sm, const u8 *ies,
+               return -1;
+       }
++      if (sm->ft_reassoc_completed) {
++              wpa_printf(MSG_DEBUG, "FT: Reassociation has already been completed for this FT protocol instance - ignore unexpected retransmission");
++              return 0;
++      }
++
+       if (wpa_ft_parse_ies(ies, ies_len, &parse) < 0) {
+               wpa_printf(MSG_DEBUG, "FT: Failed to parse IEs");
+               return -1;
+@@ -787,6 +793,8 @@ int wpa_ft_validate_reassoc_resp(struct wpa_sm *sm, const u8 *ies,
+               return -1;
+       }
++      sm->ft_reassoc_completed = 1;
++
+       if (wpa_ft_process_gtk_subelem(sm, parse.gtk, parse.gtk_len) < 0)
+               return -1;
+diff --git a/src/rsn_supp/wpa_i.h b/src/rsn_supp/wpa_i.h
+index 3b42245..148c654 100644
+--- a/src/rsn_supp/wpa_i.h
++++ b/src/rsn_supp/wpa_i.h
+@@ -128,6 +128,7 @@ struct wpa_sm {
+       size_t r0kh_id_len;
+       u8 r1kh_id[FT_R1KH_ID_LEN];
+       int ft_completed;
++      int ft_reassoc_completed;
+       int over_the_ds_in_progress;
+       u8 target_ap[ETH_ALEN]; /* over-the-DS target AP */
+       int set_ptk_after_assoc;
+-- 
+2.7.4
+
diff --git a/src/patches/wpa_supplicant/rebased-v2.6-0001-hostapd-Avoid-key-reinstallation-in-FT-handshake.patch b/src/patches/wpa_supplicant/rebased-v2.6-0001-hostapd-Avoid-key-reinstallation-in-FT-handshake.patch
new file mode 100644 (file)
index 0000000..7276848
--- /dev/null
@@ -0,0 +1,174 @@
+From cf4cab804c7afd5c45505528a8d16e46163243a2 Mon Sep 17 00:00:00 2001
+From: Mathy Vanhoef <Mathy.Vanhoef@cs.kuleuven.be>
+Date: Fri, 14 Jul 2017 15:15:35 +0200
+Subject: [PATCH 1/8] hostapd: Avoid key reinstallation in FT handshake
+
+Do not reinstall TK to the driver during Reassociation Response frame
+processing if the first attempt of setting the TK succeeded. This avoids
+issues related to clearing the TX/RX PN that could result in reusing
+same PN values for transmitted frames (e.g., due to CCM nonce reuse and
+also hitting replay protection on the receiver) and accepting replayed
+frames on RX side.
+
+This issue was introduced by the commit
+0e84c25434e6a1f283c7b4e62e483729085b78d2 ('FT: Fix PTK configuration in
+authenticator') which allowed wpa_ft_install_ptk() to be called multiple
+times with the same PTK. While the second configuration attempt is
+needed with some drivers, it must be done only if the first attempt
+failed.
+
+Signed-off-by: Mathy Vanhoef <Mathy.Vanhoef@cs.kuleuven.be>
+---
+ src/ap/ieee802_11.c  | 16 +++++++++++++---
+ src/ap/wpa_auth.c    | 11 +++++++++++
+ src/ap/wpa_auth.h    |  3 ++-
+ src/ap/wpa_auth_ft.c | 10 ++++++++++
+ src/ap/wpa_auth_i.h  |  1 +
+ 5 files changed, 37 insertions(+), 4 deletions(-)
+
+diff --git a/src/ap/ieee802_11.c b/src/ap/ieee802_11.c
+index 4e04169..333035f 100644
+--- a/src/ap/ieee802_11.c
++++ b/src/ap/ieee802_11.c
+@@ -1841,6 +1841,7 @@ static int add_associated_sta(struct hostapd_data *hapd,
+ {
+       struct ieee80211_ht_capabilities ht_cap;
+       struct ieee80211_vht_capabilities vht_cap;
++      int set = 1;
+       /*
+        * Remove the STA entry to ensure the STA PS state gets cleared and
+@@ -1848,9 +1849,18 @@ static int add_associated_sta(struct hostapd_data *hapd,
+        * FT-over-the-DS, where a station re-associates back to the same AP but
+        * skips the authentication flow, or if working with a driver that
+        * does not support full AP client state.
++       *
++       * Skip this if the STA has already completed FT reassociation and the
++       * TK has been configured since the TX/RX PN must not be reset to 0 for
++       * the same key.
+        */
+-      if (!sta->added_unassoc)
++      if (!sta->added_unassoc &&
++          (!(sta->flags & WLAN_STA_AUTHORIZED) ||
++           !wpa_auth_sta_ft_tk_already_set(sta->wpa_sm))) {
+               hostapd_drv_sta_remove(hapd, sta->addr);
++              wpa_auth_sm_event(sta->wpa_sm, WPA_DRV_STA_REMOVED);
++              set = 0;
++      }
+ #ifdef CONFIG_IEEE80211N
+       if (sta->flags & WLAN_STA_HT)
+@@ -1873,11 +1883,11 @@ static int add_associated_sta(struct hostapd_data *hapd,
+                           sta->flags & WLAN_STA_VHT ? &vht_cap : NULL,
+                           sta->flags | WLAN_STA_ASSOC, sta->qosinfo,
+                           sta->vht_opmode, sta->p2p_ie ? 1 : 0,
+-                          sta->added_unassoc)) {
++                          set)) {
+               hostapd_logger(hapd, sta->addr,
+                              HOSTAPD_MODULE_IEEE80211, HOSTAPD_LEVEL_NOTICE,
+                              "Could not %s STA to kernel driver",
+-                             sta->added_unassoc ? "set" : "add");
++                             set ? "set" : "add");
+               if (sta->added_unassoc) {
+                       hostapd_drv_sta_remove(hapd, sta->addr);
+diff --git a/src/ap/wpa_auth.c b/src/ap/wpa_auth.c
+index 3587086..707971d 100644
+--- a/src/ap/wpa_auth.c
++++ b/src/ap/wpa_auth.c
+@@ -1745,6 +1745,9 @@ int wpa_auth_sm_event(struct wpa_state_machine *sm, enum wpa_event event)
+ #else /* CONFIG_IEEE80211R */
+               break;
+ #endif /* CONFIG_IEEE80211R */
++      case WPA_DRV_STA_REMOVED:
++              sm->tk_already_set = FALSE;
++              return 0;
+       }
+ #ifdef CONFIG_IEEE80211R
+@@ -3250,6 +3253,14 @@ int wpa_auth_sta_wpa_version(struct wpa_state_machine *sm)
+ }
++int wpa_auth_sta_ft_tk_already_set(struct wpa_state_machine *sm)
++{
++      if (!sm || !wpa_key_mgmt_ft(sm->wpa_key_mgmt))
++              return 0;
++      return sm->tk_already_set;
++}
++
++
+ int wpa_auth_sta_clear_pmksa(struct wpa_state_machine *sm,
+                            struct rsn_pmksa_cache_entry *entry)
+ {
+diff --git a/src/ap/wpa_auth.h b/src/ap/wpa_auth.h
+index 0de8d97..97461b0 100644
+--- a/src/ap/wpa_auth.h
++++ b/src/ap/wpa_auth.h
+@@ -267,7 +267,7 @@ void wpa_receive(struct wpa_authenticator *wpa_auth,
+                u8 *data, size_t data_len);
+ enum wpa_event {
+       WPA_AUTH, WPA_ASSOC, WPA_DISASSOC, WPA_DEAUTH, WPA_REAUTH,
+-      WPA_REAUTH_EAPOL, WPA_ASSOC_FT
++      WPA_REAUTH_EAPOL, WPA_ASSOC_FT, WPA_DRV_STA_REMOVED
+ };
+ void wpa_remove_ptk(struct wpa_state_machine *sm);
+ int wpa_auth_sm_event(struct wpa_state_machine *sm, enum wpa_event event);
+@@ -280,6 +280,7 @@ int wpa_auth_pairwise_set(struct wpa_state_machine *sm);
+ int wpa_auth_get_pairwise(struct wpa_state_machine *sm);
+ int wpa_auth_sta_key_mgmt(struct wpa_state_machine *sm);
+ int wpa_auth_sta_wpa_version(struct wpa_state_machine *sm);
++int wpa_auth_sta_ft_tk_already_set(struct wpa_state_machine *sm);
+ int wpa_auth_sta_clear_pmksa(struct wpa_state_machine *sm,
+                            struct rsn_pmksa_cache_entry *entry);
+ struct rsn_pmksa_cache_entry *
+diff --git a/src/ap/wpa_auth_ft.c b/src/ap/wpa_auth_ft.c
+index 42242a5..e63b99a 100644
+--- a/src/ap/wpa_auth_ft.c
++++ b/src/ap/wpa_auth_ft.c
+@@ -780,6 +780,14 @@ void wpa_ft_install_ptk(struct wpa_state_machine *sm)
+               return;
+       }
++      if (sm->tk_already_set) {
++              /* Must avoid TK reconfiguration to prevent clearing of TX/RX
++               * PN in the driver */
++              wpa_printf(MSG_DEBUG,
++                         "FT: Do not re-install same PTK to the driver");
++              return;
++      }
++
+       /* FIX: add STA entry to kernel/driver here? The set_key will fail
+        * most likely without this.. At the moment, STA entry is added only
+        * after association has been completed. This function will be called
+@@ -792,6 +800,7 @@ void wpa_ft_install_ptk(struct wpa_state_machine *sm)
+       /* FIX: MLME-SetProtection.Request(TA, Tx_Rx) */
+       sm->pairwise_set = TRUE;
++      sm->tk_already_set = TRUE;
+ }
+@@ -898,6 +907,7 @@ static int wpa_ft_process_auth_req(struct wpa_state_machine *sm,
+       sm->pairwise = pairwise;
+       sm->PTK_valid = TRUE;
++      sm->tk_already_set = FALSE;
+       wpa_ft_install_ptk(sm);
+       buflen = 2 + sizeof(struct rsn_mdie) + 2 + sizeof(struct rsn_ftie) +
+diff --git a/src/ap/wpa_auth_i.h b/src/ap/wpa_auth_i.h
+index 72b7eb3..7fd8f05 100644
+--- a/src/ap/wpa_auth_i.h
++++ b/src/ap/wpa_auth_i.h
+@@ -65,6 +65,7 @@ struct wpa_state_machine {
+       struct wpa_ptk PTK;
+       Boolean PTK_valid;
+       Boolean pairwise_set;
++      Boolean tk_already_set;
+       int keycount;
+       Boolean Pair;
+       struct wpa_key_replay_counter {
+-- 
+2.7.4
+
diff --git a/src/patches/wpa_supplicant/rebased-v2.6-0002-Prevent-reinstallation-of-an-already-in-use-group-ke.patch b/src/patches/wpa_supplicant/rebased-v2.6-0002-Prevent-reinstallation-of-an-already-in-use-group-ke.patch
new file mode 100644 (file)
index 0000000..1802d66
--- /dev/null
@@ -0,0 +1,250 @@
+From 927f891007c402fefd1ff384645b3f07597c3ede Mon Sep 17 00:00:00 2001
+From: Mathy Vanhoef <Mathy.Vanhoef@cs.kuleuven.be>
+Date: Wed, 12 Jul 2017 16:03:24 +0200
+Subject: [PATCH 2/8] Prevent reinstallation of an already in-use group key
+
+Track the current GTK and IGTK that is in use and when receiving a
+(possibly retransmitted) Group Message 1 or WNM-Sleep Mode Response, do
+not install the given key if it is already in use. This prevents an
+attacker from trying to trick the client into resetting or lowering the
+sequence counter associated to the group key.
+
+Signed-off-by: Mathy Vanhoef <Mathy.Vanhoef@cs.kuleuven.be>
+---
+ src/common/wpa_common.h |  11 +++++
+ src/rsn_supp/wpa.c      | 116 ++++++++++++++++++++++++++++++------------------
+ src/rsn_supp/wpa_i.h    |   4 ++
+ 3 files changed, 87 insertions(+), 44 deletions(-)
+
+diff --git a/src/common/wpa_common.h b/src/common/wpa_common.h
+index af1d0f0..d200285 100644
+--- a/src/common/wpa_common.h
++++ b/src/common/wpa_common.h
+@@ -217,6 +217,17 @@ struct wpa_ptk {
+       size_t tk_len;
+ };
++struct wpa_gtk {
++      u8 gtk[WPA_GTK_MAX_LEN];
++      size_t gtk_len;
++};
++
++#ifdef CONFIG_IEEE80211W
++struct wpa_igtk {
++      u8 igtk[WPA_IGTK_MAX_LEN];
++      size_t igtk_len;
++};
++#endif /* CONFIG_IEEE80211W */
+ /* WPA IE version 1
+  * 00-50-f2:1 (OUI:OUI type)
+diff --git a/src/rsn_supp/wpa.c b/src/rsn_supp/wpa.c
+index 3c47879..95bd7be 100644
+--- a/src/rsn_supp/wpa.c
++++ b/src/rsn_supp/wpa.c
+@@ -714,6 +714,15 @@ static int wpa_supplicant_install_gtk(struct wpa_sm *sm,
+       const u8 *_gtk = gd->gtk;
+       u8 gtk_buf[32];
++      /* Detect possible key reinstallation */
++      if (sm->gtk.gtk_len == (size_t) gd->gtk_len &&
++          os_memcmp(sm->gtk.gtk, gd->gtk, sm->gtk.gtk_len) == 0) {
++              wpa_dbg(sm->ctx->msg_ctx, MSG_DEBUG,
++                      "WPA: Not reinstalling already in-use GTK to the driver (keyidx=%d tx=%d len=%d)",
++                      gd->keyidx, gd->tx, gd->gtk_len);
++              return 0;
++      }
++
+       wpa_hexdump_key(MSG_DEBUG, "WPA: Group Key", gd->gtk, gd->gtk_len);
+       wpa_dbg(sm->ctx->msg_ctx, MSG_DEBUG,
+               "WPA: Installing GTK to the driver (keyidx=%d tx=%d len=%d)",
+@@ -748,6 +757,9 @@ static int wpa_supplicant_install_gtk(struct wpa_sm *sm,
+       }
+       os_memset(gtk_buf, 0, sizeof(gtk_buf));
++      sm->gtk.gtk_len = gd->gtk_len;
++      os_memcpy(sm->gtk.gtk, gd->gtk, sm->gtk.gtk_len);
++
+       return 0;
+ }
+@@ -854,6 +866,48 @@ static int wpa_supplicant_pairwise_gtk(struct wpa_sm *sm,
+ }
++#ifdef CONFIG_IEEE80211W
++static int wpa_supplicant_install_igtk(struct wpa_sm *sm,
++                                     const struct wpa_igtk_kde *igtk)
++{
++      size_t len = wpa_cipher_key_len(sm->mgmt_group_cipher);
++      u16 keyidx = WPA_GET_LE16(igtk->keyid);
++
++      /* Detect possible key reinstallation */
++      if (sm->igtk.igtk_len == len &&
++          os_memcmp(sm->igtk.igtk, igtk->igtk, sm->igtk.igtk_len) == 0) {
++              wpa_dbg(sm->ctx->msg_ctx, MSG_DEBUG,
++                      "WPA: Not reinstalling already in-use IGTK to the driver (keyidx=%d)",
++                      keyidx);
++              return  0;
++      }
++
++      wpa_dbg(sm->ctx->msg_ctx, MSG_DEBUG,
++              "WPA: IGTK keyid %d pn %02x%02x%02x%02x%02x%02x",
++              keyidx, MAC2STR(igtk->pn));
++      wpa_hexdump_key(MSG_DEBUG, "WPA: IGTK", igtk->igtk, len);
++      if (keyidx > 4095) {
++              wpa_msg(sm->ctx->msg_ctx, MSG_WARNING,
++                      "WPA: Invalid IGTK KeyID %d", keyidx);
++              return -1;
++      }
++      if (wpa_sm_set_key(sm, wpa_cipher_to_alg(sm->mgmt_group_cipher),
++                         broadcast_ether_addr,
++                         keyidx, 0, igtk->pn, sizeof(igtk->pn),
++                         igtk->igtk, len) < 0) {
++              wpa_msg(sm->ctx->msg_ctx, MSG_WARNING,
++                      "WPA: Failed to configure IGTK to the driver");
++              return -1;
++      }
++
++      sm->igtk.igtk_len = len;
++      os_memcpy(sm->igtk.igtk, igtk->igtk, sm->igtk.igtk_len);
++
++      return 0;
++}
++#endif /* CONFIG_IEEE80211W */
++
++
+ static int ieee80211w_set_keys(struct wpa_sm *sm,
+                              struct wpa_eapol_ie_parse *ie)
+ {
+@@ -864,30 +918,14 @@ static int ieee80211w_set_keys(struct wpa_sm *sm,
+       if (ie->igtk) {
+               size_t len;
+               const struct wpa_igtk_kde *igtk;
+-              u16 keyidx;
++
+               len = wpa_cipher_key_len(sm->mgmt_group_cipher);
+               if (ie->igtk_len != WPA_IGTK_KDE_PREFIX_LEN + len)
+                       return -1;
++
+               igtk = (const struct wpa_igtk_kde *) ie->igtk;
+-              keyidx = WPA_GET_LE16(igtk->keyid);
+-              wpa_dbg(sm->ctx->msg_ctx, MSG_DEBUG, "WPA: IGTK keyid %d "
+-                      "pn %02x%02x%02x%02x%02x%02x",
+-                      keyidx, MAC2STR(igtk->pn));
+-              wpa_hexdump_key(MSG_DEBUG, "WPA: IGTK",
+-                              igtk->igtk, len);
+-              if (keyidx > 4095) {
+-                      wpa_msg(sm->ctx->msg_ctx, MSG_WARNING,
+-                              "WPA: Invalid IGTK KeyID %d", keyidx);
+-                      return -1;
+-              }
+-              if (wpa_sm_set_key(sm, wpa_cipher_to_alg(sm->mgmt_group_cipher),
+-                                 broadcast_ether_addr,
+-                                 keyidx, 0, igtk->pn, sizeof(igtk->pn),
+-                                 igtk->igtk, len) < 0) {
+-                      wpa_msg(sm->ctx->msg_ctx, MSG_WARNING,
+-                              "WPA: Failed to configure IGTK to the driver");
++              if (wpa_supplicant_install_igtk(sm, igtk) < 0)
+                       return -1;
+-              }
+       }
+       return 0;
+@@ -2307,7 +2345,7 @@ void wpa_sm_deinit(struct wpa_sm *sm)
+  */
+ void wpa_sm_notify_assoc(struct wpa_sm *sm, const u8 *bssid)
+ {
+-      int clear_ptk = 1;
++      int clear_keys = 1;
+       if (sm == NULL)
+               return;
+@@ -2333,11 +2371,11 @@ void wpa_sm_notify_assoc(struct wpa_sm *sm, const u8 *bssid)
+               /* Prepare for the next transition */
+               wpa_ft_prepare_auth_request(sm, NULL);
+-              clear_ptk = 0;
++              clear_keys = 0;
+       }
+ #endif /* CONFIG_IEEE80211R */
+-      if (clear_ptk) {
++      if (clear_keys) {
+               /*
+                * IEEE 802.11, 8.4.10: Delete PTK SA on (re)association if
+                * this is not part of a Fast BSS Transition.
+@@ -2347,6 +2385,10 @@ void wpa_sm_notify_assoc(struct wpa_sm *sm, const u8 *bssid)
+               os_memset(&sm->ptk, 0, sizeof(sm->ptk));
+               sm->tptk_set = 0;
+               os_memset(&sm->tptk, 0, sizeof(sm->tptk));
++              os_memset(&sm->gtk, 0, sizeof(sm->gtk));
++#ifdef CONFIG_IEEE80211W
++              os_memset(&sm->igtk, 0, sizeof(sm->igtk));
++#endif /* CONFIG_IEEE80211W */
+       }
+ #ifdef CONFIG_TDLS
+@@ -2877,6 +2919,10 @@ void wpa_sm_drop_sa(struct wpa_sm *sm)
+       os_memset(sm->pmk, 0, sizeof(sm->pmk));
+       os_memset(&sm->ptk, 0, sizeof(sm->ptk));
+       os_memset(&sm->tptk, 0, sizeof(sm->tptk));
++      os_memset(&sm->gtk, 0, sizeof(sm->gtk));
++#ifdef CONFIG_IEEE80211W
++      os_memset(&sm->igtk, 0, sizeof(sm->igtk));
++#endif /* CONFIG_IEEE80211W */
+ #ifdef CONFIG_IEEE80211R
+       os_memset(sm->xxkey, 0, sizeof(sm->xxkey));
+       os_memset(sm->pmk_r0, 0, sizeof(sm->pmk_r0));
+@@ -2949,29 +2995,11 @@ int wpa_wnmsleep_install_key(struct wpa_sm *sm, u8 subelem_id, u8 *buf)
+               os_memset(&gd, 0, sizeof(gd));
+ #ifdef CONFIG_IEEE80211W
+       } else if (subelem_id == WNM_SLEEP_SUBELEM_IGTK) {
+-              struct wpa_igtk_kde igd;
+-              u16 keyidx;
+-
+-              os_memset(&igd, 0, sizeof(igd));
+-              keylen = wpa_cipher_key_len(sm->mgmt_group_cipher);
+-              os_memcpy(igd.keyid, buf + 2, 2);
+-              os_memcpy(igd.pn, buf + 4, 6);
+-
+-              keyidx = WPA_GET_LE16(igd.keyid);
+-              os_memcpy(igd.igtk, buf + 10, keylen);
+-
+-              wpa_hexdump_key(MSG_DEBUG, "Install IGTK (WNM SLEEP)",
+-                              igd.igtk, keylen);
+-              if (wpa_sm_set_key(sm, wpa_cipher_to_alg(sm->mgmt_group_cipher),
+-                                 broadcast_ether_addr,
+-                                 keyidx, 0, igd.pn, sizeof(igd.pn),
+-                                 igd.igtk, keylen) < 0) {
+-                      wpa_printf(MSG_DEBUG, "Failed to install the IGTK in "
+-                                 "WNM mode");
+-                      os_memset(&igd, 0, sizeof(igd));
++              const struct wpa_igtk_kde *igtk;
++
++              igtk = (const struct wpa_igtk_kde *) (buf + 2);
++              if (wpa_supplicant_install_igtk(sm, igtk) < 0)
+                       return -1;
+-              }
+-              os_memset(&igd, 0, sizeof(igd));
+ #endif /* CONFIG_IEEE80211W */
+       } else {
+               wpa_printf(MSG_DEBUG, "Unknown element id");
+diff --git a/src/rsn_supp/wpa_i.h b/src/rsn_supp/wpa_i.h
+index f653ba6..afc9e37 100644
+--- a/src/rsn_supp/wpa_i.h
++++ b/src/rsn_supp/wpa_i.h
+@@ -31,6 +31,10 @@ struct wpa_sm {
+       u8 rx_replay_counter[WPA_REPLAY_COUNTER_LEN];
+       int rx_replay_counter_set;
+       u8 request_counter[WPA_REPLAY_COUNTER_LEN];
++      struct wpa_gtk gtk;
++#ifdef CONFIG_IEEE80211W
++      struct wpa_igtk igtk;
++#endif /* CONFIG_IEEE80211W */
+       struct eapol_sm *eapol; /* EAPOL state machine from upper level code */
+-- 
+2.7.4
+
diff --git a/src/patches/wpa_supplicant/rebased-v2.6-0003-Extend-protection-of-GTK-IGTK-reinstallation-of-WNM-.patch b/src/patches/wpa_supplicant/rebased-v2.6-0003-Extend-protection-of-GTK-IGTK-reinstallation-of-WNM-.patch
new file mode 100644 (file)
index 0000000..e2937b8
--- /dev/null
@@ -0,0 +1,184 @@
+From 8280294e74846ea342389a0cd17215050fa5afe8 Mon Sep 17 00:00:00 2001
+From: Jouni Malinen <j@w1.fi>
+Date: Sun, 1 Oct 2017 12:12:24 +0300
+Subject: [PATCH 3/8] Extend protection of GTK/IGTK reinstallation of WNM-Sleep
+ Mode cases
+
+This extends the protection to track last configured GTK/IGTK value
+separately from EAPOL-Key frames and WNM-Sleep Mode frames to cover a
+corner case where these two different mechanisms may get used when the
+GTK/IGTK has changed and tracking a single value is not sufficient to
+detect a possible key reconfiguration.
+
+Signed-off-by: Jouni Malinen <j@w1.fi>
+---
+ src/rsn_supp/wpa.c   | 53 +++++++++++++++++++++++++++++++++++++---------------
+ src/rsn_supp/wpa_i.h |  2 ++
+ 2 files changed, 40 insertions(+), 15 deletions(-)
+
+diff --git a/src/rsn_supp/wpa.c b/src/rsn_supp/wpa.c
+index 95bd7be..7a2c68d 100644
+--- a/src/rsn_supp/wpa.c
++++ b/src/rsn_supp/wpa.c
+@@ -709,14 +709,17 @@ struct wpa_gtk_data {
+ static int wpa_supplicant_install_gtk(struct wpa_sm *sm,
+                                     const struct wpa_gtk_data *gd,
+-                                    const u8 *key_rsc)
++                                    const u8 *key_rsc, int wnm_sleep)
+ {
+       const u8 *_gtk = gd->gtk;
+       u8 gtk_buf[32];
+       /* Detect possible key reinstallation */
+-      if (sm->gtk.gtk_len == (size_t) gd->gtk_len &&
+-          os_memcmp(sm->gtk.gtk, gd->gtk, sm->gtk.gtk_len) == 0) {
++      if ((sm->gtk.gtk_len == (size_t) gd->gtk_len &&
++           os_memcmp(sm->gtk.gtk, gd->gtk, sm->gtk.gtk_len) == 0) ||
++          (sm->gtk_wnm_sleep.gtk_len == (size_t) gd->gtk_len &&
++           os_memcmp(sm->gtk_wnm_sleep.gtk, gd->gtk,
++                     sm->gtk_wnm_sleep.gtk_len) == 0)) {
+               wpa_dbg(sm->ctx->msg_ctx, MSG_DEBUG,
+                       "WPA: Not reinstalling already in-use GTK to the driver (keyidx=%d tx=%d len=%d)",
+                       gd->keyidx, gd->tx, gd->gtk_len);
+@@ -757,8 +760,14 @@ static int wpa_supplicant_install_gtk(struct wpa_sm *sm,
+       }
+       os_memset(gtk_buf, 0, sizeof(gtk_buf));
+-      sm->gtk.gtk_len = gd->gtk_len;
+-      os_memcpy(sm->gtk.gtk, gd->gtk, sm->gtk.gtk_len);
++      if (wnm_sleep) {
++              sm->gtk_wnm_sleep.gtk_len = gd->gtk_len;
++              os_memcpy(sm->gtk_wnm_sleep.gtk, gd->gtk,
++                        sm->gtk_wnm_sleep.gtk_len);
++      } else {
++              sm->gtk.gtk_len = gd->gtk_len;
++              os_memcpy(sm->gtk.gtk, gd->gtk, sm->gtk.gtk_len);
++      }
+       return 0;
+ }
+@@ -852,7 +861,7 @@ static int wpa_supplicant_pairwise_gtk(struct wpa_sm *sm,
+           (wpa_supplicant_check_group_cipher(sm, sm->group_cipher,
+                                              gtk_len, gtk_len,
+                                              &gd.key_rsc_len, &gd.alg) ||
+-           wpa_supplicant_install_gtk(sm, &gd, key_rsc))) {
++           wpa_supplicant_install_gtk(sm, &gd, key_rsc, 0))) {
+               wpa_dbg(sm->ctx->msg_ctx, MSG_DEBUG,
+                       "RSN: Failed to install GTK");
+               os_memset(&gd, 0, sizeof(gd));
+@@ -868,14 +877,18 @@ static int wpa_supplicant_pairwise_gtk(struct wpa_sm *sm,
+ #ifdef CONFIG_IEEE80211W
+ static int wpa_supplicant_install_igtk(struct wpa_sm *sm,
+-                                     const struct wpa_igtk_kde *igtk)
++                                     const struct wpa_igtk_kde *igtk,
++                                     int wnm_sleep)
+ {
+       size_t len = wpa_cipher_key_len(sm->mgmt_group_cipher);
+       u16 keyidx = WPA_GET_LE16(igtk->keyid);
+       /* Detect possible key reinstallation */
+-      if (sm->igtk.igtk_len == len &&
+-          os_memcmp(sm->igtk.igtk, igtk->igtk, sm->igtk.igtk_len) == 0) {
++      if ((sm->igtk.igtk_len == len &&
++           os_memcmp(sm->igtk.igtk, igtk->igtk, sm->igtk.igtk_len) == 0) ||
++          (sm->igtk_wnm_sleep.igtk_len == len &&
++           os_memcmp(sm->igtk_wnm_sleep.igtk, igtk->igtk,
++                     sm->igtk_wnm_sleep.igtk_len) == 0)) {
+               wpa_dbg(sm->ctx->msg_ctx, MSG_DEBUG,
+                       "WPA: Not reinstalling already in-use IGTK to the driver (keyidx=%d)",
+                       keyidx);
+@@ -900,8 +913,14 @@ static int wpa_supplicant_install_igtk(struct wpa_sm *sm,
+               return -1;
+       }
+-      sm->igtk.igtk_len = len;
+-      os_memcpy(sm->igtk.igtk, igtk->igtk, sm->igtk.igtk_len);
++      if (wnm_sleep) {
++              sm->igtk_wnm_sleep.igtk_len = len;
++              os_memcpy(sm->igtk_wnm_sleep.igtk, igtk->igtk,
++                        sm->igtk_wnm_sleep.igtk_len);
++      } else {
++              sm->igtk.igtk_len = len;
++              os_memcpy(sm->igtk.igtk, igtk->igtk, sm->igtk.igtk_len);
++      }
+       return 0;
+ }
+@@ -924,7 +943,7 @@ static int ieee80211w_set_keys(struct wpa_sm *sm,
+                       return -1;
+               igtk = (const struct wpa_igtk_kde *) ie->igtk;
+-              if (wpa_supplicant_install_igtk(sm, igtk) < 0)
++              if (wpa_supplicant_install_igtk(sm, igtk, 0) < 0)
+                       return -1;
+       }
+@@ -1574,7 +1593,7 @@ static void wpa_supplicant_process_1_of_2(struct wpa_sm *sm,
+       if (wpa_supplicant_rsc_relaxation(sm, key->key_rsc))
+               key_rsc = null_rsc;
+-      if (wpa_supplicant_install_gtk(sm, &gd, key_rsc) ||
++      if (wpa_supplicant_install_gtk(sm, &gd, key_rsc, 0) ||
+           wpa_supplicant_send_2_of_2(sm, key, ver, key_info) < 0)
+               goto failed;
+       os_memset(&gd, 0, sizeof(gd));
+@@ -2386,8 +2405,10 @@ void wpa_sm_notify_assoc(struct wpa_sm *sm, const u8 *bssid)
+               sm->tptk_set = 0;
+               os_memset(&sm->tptk, 0, sizeof(sm->tptk));
+               os_memset(&sm->gtk, 0, sizeof(sm->gtk));
++              os_memset(&sm->gtk_wnm_sleep, 0, sizeof(sm->gtk_wnm_sleep));
+ #ifdef CONFIG_IEEE80211W
+               os_memset(&sm->igtk, 0, sizeof(sm->igtk));
++              os_memset(&sm->igtk_wnm_sleep, 0, sizeof(sm->igtk_wnm_sleep));
+ #endif /* CONFIG_IEEE80211W */
+       }
+@@ -2920,8 +2941,10 @@ void wpa_sm_drop_sa(struct wpa_sm *sm)
+       os_memset(&sm->ptk, 0, sizeof(sm->ptk));
+       os_memset(&sm->tptk, 0, sizeof(sm->tptk));
+       os_memset(&sm->gtk, 0, sizeof(sm->gtk));
++      os_memset(&sm->gtk_wnm_sleep, 0, sizeof(sm->gtk_wnm_sleep));
+ #ifdef CONFIG_IEEE80211W
+       os_memset(&sm->igtk, 0, sizeof(sm->igtk));
++      os_memset(&sm->igtk_wnm_sleep, 0, sizeof(sm->igtk_wnm_sleep));
+ #endif /* CONFIG_IEEE80211W */
+ #ifdef CONFIG_IEEE80211R
+       os_memset(sm->xxkey, 0, sizeof(sm->xxkey));
+@@ -2986,7 +3009,7 @@ int wpa_wnmsleep_install_key(struct wpa_sm *sm, u8 subelem_id, u8 *buf)
+               wpa_hexdump_key(MSG_DEBUG, "Install GTK (WNM SLEEP)",
+                               gd.gtk, gd.gtk_len);
+-              if (wpa_supplicant_install_gtk(sm, &gd, key_rsc)) {
++              if (wpa_supplicant_install_gtk(sm, &gd, key_rsc, 1)) {
+                       os_memset(&gd, 0, sizeof(gd));
+                       wpa_printf(MSG_DEBUG, "Failed to install the GTK in "
+                                  "WNM mode");
+@@ -2998,7 +3021,7 @@ int wpa_wnmsleep_install_key(struct wpa_sm *sm, u8 subelem_id, u8 *buf)
+               const struct wpa_igtk_kde *igtk;
+               igtk = (const struct wpa_igtk_kde *) (buf + 2);
+-              if (wpa_supplicant_install_igtk(sm, igtk) < 0)
++              if (wpa_supplicant_install_igtk(sm, igtk, 1) < 0)
+                       return -1;
+ #endif /* CONFIG_IEEE80211W */
+       } else {
+diff --git a/src/rsn_supp/wpa_i.h b/src/rsn_supp/wpa_i.h
+index afc9e37..9a54631 100644
+--- a/src/rsn_supp/wpa_i.h
++++ b/src/rsn_supp/wpa_i.h
+@@ -32,8 +32,10 @@ struct wpa_sm {
+       int rx_replay_counter_set;
+       u8 request_counter[WPA_REPLAY_COUNTER_LEN];
+       struct wpa_gtk gtk;
++      struct wpa_gtk gtk_wnm_sleep;
+ #ifdef CONFIG_IEEE80211W
+       struct wpa_igtk igtk;
++      struct wpa_igtk igtk_wnm_sleep;
+ #endif /* CONFIG_IEEE80211W */
+       struct eapol_sm *eapol; /* EAPOL state machine from upper level code */
+-- 
+2.7.4
+
diff --git a/src/patches/wpa_supplicant/rebased-v2.6-0004-Prevent-installation-of-an-all-zero-TK.patch b/src/patches/wpa_supplicant/rebased-v2.6-0004-Prevent-installation-of-an-all-zero-TK.patch
new file mode 100644 (file)
index 0000000..22ee217
--- /dev/null
@@ -0,0 +1,79 @@
+From 8f82bc94e8697a9d47fa8774dfdaaede1084912c Mon Sep 17 00:00:00 2001
+From: Mathy Vanhoef <Mathy.Vanhoef@cs.kuleuven.be>
+Date: Fri, 29 Sep 2017 04:22:51 +0200
+Subject: [PATCH 4/8] Prevent installation of an all-zero TK
+
+Properly track whether a PTK has already been installed to the driver
+and the TK part cleared from memory. This prevents an attacker from
+trying to trick the client into installing an all-zero TK.
+
+This fixes the earlier fix in commit
+ad00d64e7d8827b3cebd665a0ceb08adabf15e1e ('Fix TK configuration to the
+driver in EAPOL-Key 3/4 retry case') which did not take into account
+possibility of an extra message 1/4 showing up between retries of
+message 3/4.
+
+Signed-off-by: Mathy Vanhoef <Mathy.Vanhoef@cs.kuleuven.be>
+---
+ src/common/wpa_common.h | 1 +
+ src/rsn_supp/wpa.c      | 5 ++---
+ src/rsn_supp/wpa_i.h    | 1 -
+ 3 files changed, 3 insertions(+), 4 deletions(-)
+
+diff --git a/src/common/wpa_common.h b/src/common/wpa_common.h
+index d200285..1021ccb 100644
+--- a/src/common/wpa_common.h
++++ b/src/common/wpa_common.h
+@@ -215,6 +215,7 @@ struct wpa_ptk {
+       size_t kck_len;
+       size_t kek_len;
+       size_t tk_len;
++      int installed; /* 1 if key has already been installed to driver */
+ };
+ struct wpa_gtk {
+diff --git a/src/rsn_supp/wpa.c b/src/rsn_supp/wpa.c
+index 7a2c68d..0550a41 100644
+--- a/src/rsn_supp/wpa.c
++++ b/src/rsn_supp/wpa.c
+@@ -510,7 +510,6 @@ static void wpa_supplicant_process_1_of_4(struct wpa_sm *sm,
+               os_memset(buf, 0, sizeof(buf));
+       }
+       sm->tptk_set = 1;
+-      sm->tk_to_set = 1;
+       kde = sm->assoc_wpa_ie;
+       kde_len = sm->assoc_wpa_ie_len;
+@@ -615,7 +614,7 @@ static int wpa_supplicant_install_ptk(struct wpa_sm *sm,
+       enum wpa_alg alg;
+       const u8 *key_rsc;
+-      if (!sm->tk_to_set) {
++      if (sm->ptk.installed) {
+               wpa_dbg(sm->ctx->msg_ctx, MSG_DEBUG,
+                       "WPA: Do not re-install same PTK to the driver");
+               return 0;
+@@ -659,7 +658,7 @@ static int wpa_supplicant_install_ptk(struct wpa_sm *sm,
+       /* TK is not needed anymore in supplicant */
+       os_memset(sm->ptk.tk, 0, WPA_TK_MAX_LEN);
+-      sm->tk_to_set = 0;
++      sm->ptk.installed = 1;
+       if (sm->wpa_ptk_rekey) {
+               eloop_cancel_timeout(wpa_sm_rekey_ptk, sm, NULL);
+diff --git a/src/rsn_supp/wpa_i.h b/src/rsn_supp/wpa_i.h
+index 9a54631..41f371f 100644
+--- a/src/rsn_supp/wpa_i.h
++++ b/src/rsn_supp/wpa_i.h
+@@ -24,7 +24,6 @@ struct wpa_sm {
+       struct wpa_ptk ptk, tptk;
+       int ptk_set, tptk_set;
+       unsigned int msg_3_of_4_ok:1;
+-      unsigned int tk_to_set:1;
+       u8 snonce[WPA_NONCE_LEN];
+       u8 anonce[WPA_NONCE_LEN]; /* ANonce from the last 1/4 msg */
+       int renew_snonce;
+-- 
+2.7.4
+
diff --git a/src/patches/wpa_supplicant/rebased-v2.6-0005-Fix-PTK-rekeying-to-generate-a-new-ANonce.patch b/src/patches/wpa_supplicant/rebased-v2.6-0005-Fix-PTK-rekeying-to-generate-a-new-ANonce.patch
new file mode 100644 (file)
index 0000000..c19c4c7
--- /dev/null
@@ -0,0 +1,64 @@
+From 12fac09b437a1dc8a0f253e265934a8aaf4d2f8b Mon Sep 17 00:00:00 2001
+From: Jouni Malinen <j@w1.fi>
+Date: Sun, 1 Oct 2017 12:32:57 +0300
+Subject: [PATCH 5/8] Fix PTK rekeying to generate a new ANonce
+
+The Authenticator state machine path for PTK rekeying ended up bypassing
+the AUTHENTICATION2 state where a new ANonce is generated when going
+directly to the PTKSTART state since there is no need to try to
+determine the PMK again in such a case. This is far from ideal since the
+new PTK would depend on a new nonce only from the supplicant.
+
+Fix this by generating a new ANonce when moving to the PTKSTART state
+for the purpose of starting new 4-way handshake to rekey PTK.
+
+Signed-off-by: Jouni Malinen <j@w1.fi>
+---
+ src/ap/wpa_auth.c | 24 +++++++++++++++++++++---
+ 1 file changed, 21 insertions(+), 3 deletions(-)
+
+diff --git a/src/ap/wpa_auth.c b/src/ap/wpa_auth.c
+index 707971d..bf10cc1 100644
+--- a/src/ap/wpa_auth.c
++++ b/src/ap/wpa_auth.c
+@@ -1901,6 +1901,21 @@ SM_STATE(WPA_PTK, AUTHENTICATION2)
+ }
++static int wpa_auth_sm_ptk_update(struct wpa_state_machine *sm)
++{
++      if (random_get_bytes(sm->ANonce, WPA_NONCE_LEN)) {
++              wpa_printf(MSG_ERROR,
++                         "WPA: Failed to get random data for ANonce");
++              sm->Disconnect = TRUE;
++              return -1;
++      }
++      wpa_hexdump(MSG_DEBUG, "WPA: Assign new ANonce", sm->ANonce,
++                  WPA_NONCE_LEN);
++      sm->TimeoutCtr = 0;
++      return 0;
++}
++
++
+ SM_STATE(WPA_PTK, INITPMK)
+ {
+       u8 msk[2 * PMK_LEN];
+@@ -2458,9 +2473,12 @@ SM_STEP(WPA_PTK)
+               SM_ENTER(WPA_PTK, AUTHENTICATION);
+       else if (sm->ReAuthenticationRequest)
+               SM_ENTER(WPA_PTK, AUTHENTICATION2);
+-      else if (sm->PTKRequest)
+-              SM_ENTER(WPA_PTK, PTKSTART);
+-      else switch (sm->wpa_ptk_state) {
++      else if (sm->PTKRequest) {
++              if (wpa_auth_sm_ptk_update(sm) < 0)
++                      SM_ENTER(WPA_PTK, DISCONNECTED);
++              else
++                      SM_ENTER(WPA_PTK, PTKSTART);
++      } else switch (sm->wpa_ptk_state) {
+       case WPA_PTK_INITIALIZE:
+               break;
+       case WPA_PTK_DISCONNECT:
+-- 
+2.7.4
+
diff --git a/src/patches/wpa_supplicant/rebased-v2.6-0006-TDLS-Reject-TPK-TK-reconfiguration.patch b/src/patches/wpa_supplicant/rebased-v2.6-0006-TDLS-Reject-TPK-TK-reconfiguration.patch
new file mode 100644 (file)
index 0000000..e1bd5a5
--- /dev/null
@@ -0,0 +1,132 @@
+From 6c4bed4f47d1960ec04981a9d50e5076aea5223d Mon Sep 17 00:00:00 2001
+From: Jouni Malinen <j@w1.fi>
+Date: Fri, 22 Sep 2017 11:03:15 +0300
+Subject: [PATCH 6/8] TDLS: Reject TPK-TK reconfiguration
+
+Do not try to reconfigure the same TPK-TK to the driver after it has
+been successfully configured. This is an explicit check to avoid issues
+related to resetting the TX/RX packet number. There was already a check
+for this for TPK M2 (retries of that message are ignored completely), so
+that behavior does not get modified.
+
+For TPK M3, the TPK-TK could have been reconfigured, but that was
+followed by immediate teardown of the link due to an issue in updating
+the STA entry. Furthermore, for TDLS with any real security (i.e.,
+ignoring open/WEP), the TPK message exchange is protected on the AP path
+and simple replay attacks are not feasible.
+
+As an additional corner case, make sure the local nonce gets updated if
+the peer uses a very unlikely "random nonce" of all zeros.
+
+Signed-off-by: Jouni Malinen <j@w1.fi>
+---
+ src/rsn_supp/tdls.c | 38 ++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 36 insertions(+), 2 deletions(-)
+
+diff --git a/src/rsn_supp/tdls.c b/src/rsn_supp/tdls.c
+index e424168..9eb9738 100644
+--- a/src/rsn_supp/tdls.c
++++ b/src/rsn_supp/tdls.c
+@@ -112,6 +112,7 @@ struct wpa_tdls_peer {
+               u8 tk[16]; /* TPK-TK; assuming only CCMP will be used */
+       } tpk;
+       int tpk_set;
++      int tk_set; /* TPK-TK configured to the driver */
+       int tpk_success;
+       int tpk_in_progress;
+@@ -192,6 +193,20 @@ static int wpa_tdls_set_key(struct wpa_sm *sm, struct wpa_tdls_peer *peer)
+       u8 rsc[6];
+       enum wpa_alg alg;
++      if (peer->tk_set) {
++              /*
++               * This same TPK-TK has already been configured to the driver
++               * and this new configuration attempt (likely due to an
++               * unexpected retransmitted frame) would result in clearing
++               * the TX/RX sequence number which can break security, so must
++               * not allow that to happen.
++               */
++              wpa_printf(MSG_INFO, "TDLS: TPK-TK for the peer " MACSTR
++                         " has already been configured to the driver - do not reconfigure",
++                         MAC2STR(peer->addr));
++              return -1;
++      }
++
+       os_memset(rsc, 0, 6);
+       switch (peer->cipher) {
+@@ -209,12 +224,15 @@ static int wpa_tdls_set_key(struct wpa_sm *sm, struct wpa_tdls_peer *peer)
+               return -1;
+       }
++      wpa_printf(MSG_DEBUG, "TDLS: Configure pairwise key for peer " MACSTR,
++                 MAC2STR(peer->addr));
+       if (wpa_sm_set_key(sm, alg, peer->addr, -1, 1,
+                          rsc, sizeof(rsc), peer->tpk.tk, key_len) < 0) {
+               wpa_printf(MSG_WARNING, "TDLS: Failed to set TPK to the "
+                          "driver");
+               return -1;
+       }
++      peer->tk_set = 1;
+       return 0;
+ }
+@@ -696,7 +714,7 @@ static void wpa_tdls_peer_clear(struct wpa_sm *sm, struct wpa_tdls_peer *peer)
+       peer->cipher = 0;
+       peer->qos_info = 0;
+       peer->wmm_capable = 0;
+-      peer->tpk_set = peer->tpk_success = 0;
++      peer->tk_set = peer->tpk_set = peer->tpk_success = 0;
+       peer->chan_switch_enabled = 0;
+       os_memset(&peer->tpk, 0, sizeof(peer->tpk));
+       os_memset(peer->inonce, 0, WPA_NONCE_LEN);
+@@ -1159,6 +1177,7 @@ skip_rsnie:
+               wpa_tdls_peer_free(sm, peer);
+               return -1;
+       }
++      peer->tk_set = 0; /* A new nonce results in a new TK */
+       wpa_hexdump(MSG_DEBUG, "TDLS: Initiator Nonce for TPK handshake",
+                   peer->inonce, WPA_NONCE_LEN);
+       os_memcpy(ftie->Snonce, peer->inonce, WPA_NONCE_LEN);
+@@ -1751,6 +1770,19 @@ static int wpa_tdls_addset_peer(struct wpa_sm *sm, struct wpa_tdls_peer *peer,
+ }
++static int tdls_nonce_set(const u8 *nonce)
++{
++      int i;
++
++      for (i = 0; i < WPA_NONCE_LEN; i++) {
++              if (nonce[i])
++                      return 1;
++      }
++
++      return 0;
++}
++
++
+ static int wpa_tdls_process_tpk_m1(struct wpa_sm *sm, const u8 *src_addr,
+                                  const u8 *buf, size_t len)
+ {
+@@ -2004,7 +2036,8 @@ skip_rsn:
+       peer->rsnie_i_len = kde.rsn_ie_len;
+       peer->cipher = cipher;
+-      if (os_memcmp(peer->inonce, ftie->Snonce, WPA_NONCE_LEN) != 0) {
++      if (os_memcmp(peer->inonce, ftie->Snonce, WPA_NONCE_LEN) != 0 ||
++          !tdls_nonce_set(peer->inonce)) {
+               /*
+                * There is no point in updating the RNonce for every obtained
+                * TPK M1 frame (e.g., retransmission due to timeout) with the
+@@ -2020,6 +2053,7 @@ skip_rsn:
+                               "TDLS: Failed to get random data for responder nonce");
+                       goto error;
+               }
++              peer->tk_set = 0; /* A new nonce results in a new TK */
+       }
+ #if 0
+-- 
+2.7.4
+
diff --git a/src/patches/wpa_supplicant/rebased-v2.6-0007-WNM-Ignore-WNM-Sleep-Mode-Response-without-pending-r.patch b/src/patches/wpa_supplicant/rebased-v2.6-0007-WNM-Ignore-WNM-Sleep-Mode-Response-without-pending-r.patch
new file mode 100644 (file)
index 0000000..85ea1d6
--- /dev/null
@@ -0,0 +1,43 @@
+From 53c5eb58e95004f86e65ee9fbfccbc291b139057 Mon Sep 17 00:00:00 2001
+From: Jouni Malinen <j@w1.fi>
+Date: Fri, 22 Sep 2017 11:25:02 +0300
+Subject: [PATCH 7/8] WNM: Ignore WNM-Sleep Mode Response without pending
+ request
+
+Commit 03ed0a52393710be6bdae657d1b36efa146520e5 ('WNM: Ignore WNM-Sleep
+Mode Response if WNM-Sleep Mode has not been used') started ignoring the
+response when no WNM-Sleep Mode Request had been used during the
+association. This can be made tighter by clearing the used flag when
+successfully processing a response. This adds an additional layer of
+protection against unexpected retransmissions of the response frame.
+
+Signed-off-by: Jouni Malinen <j@w1.fi>
+---
+ wpa_supplicant/wnm_sta.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/wpa_supplicant/wnm_sta.c b/wpa_supplicant/wnm_sta.c
+index 1b3409c..67a07ff 100644
+--- a/wpa_supplicant/wnm_sta.c
++++ b/wpa_supplicant/wnm_sta.c
+@@ -260,7 +260,7 @@ static void ieee802_11_rx_wnmsleep_resp(struct wpa_supplicant *wpa_s,
+       if (!wpa_s->wnmsleep_used) {
+               wpa_printf(MSG_DEBUG,
+-                         "WNM: Ignore WNM-Sleep Mode Response frame since WNM-Sleep Mode has not been used in this association");
++                         "WNM: Ignore WNM-Sleep Mode Response frame since WNM-Sleep Mode operation has not been requested");
+               return;
+       }
+@@ -299,6 +299,8 @@ static void ieee802_11_rx_wnmsleep_resp(struct wpa_supplicant *wpa_s,
+               return;
+       }
++      wpa_s->wnmsleep_used = 0;
++
+       if (wnmsleep_ie->status == WNM_STATUS_SLEEP_ACCEPT ||
+           wnmsleep_ie->status == WNM_STATUS_SLEEP_EXIT_ACCEPT_GTK_UPDATE) {
+               wpa_printf(MSG_DEBUG, "Successfully recv WNM-Sleep Response "
+-- 
+2.7.4
+
diff --git a/src/patches/wpa_supplicant/rebased-v2.6-0008-FT-Do-not-allow-multiple-Reassociation-Response-fram.patch b/src/patches/wpa_supplicant/rebased-v2.6-0008-FT-Do-not-allow-multiple-Reassociation-Response-fram.patch
new file mode 100644 (file)
index 0000000..b9678f6
--- /dev/null
@@ -0,0 +1,82 @@
+From b372ab0b7daea719749194dc554b26e6367603f2 Mon Sep 17 00:00:00 2001
+From: Jouni Malinen <j@w1.fi>
+Date: Fri, 22 Sep 2017 12:06:37 +0300
+Subject: [PATCH 8/8] FT: Do not allow multiple Reassociation Response frames
+
+The driver is expected to not report a second association event without
+the station having explicitly request a new association. As such, this
+case should not be reachable. However, since reconfiguring the same
+pairwise or group keys to the driver could result in nonce reuse issues,
+be extra careful here and do an additional state check to avoid this
+even if the local driver ends up somehow accepting an unexpected
+Reassociation Response frame.
+
+Signed-off-by: Jouni Malinen <j@w1.fi>
+---
+ src/rsn_supp/wpa.c    | 3 +++
+ src/rsn_supp/wpa_ft.c | 8 ++++++++
+ src/rsn_supp/wpa_i.h  | 1 +
+ 3 files changed, 12 insertions(+)
+
+diff --git a/src/rsn_supp/wpa.c b/src/rsn_supp/wpa.c
+index 0550a41..2a53c6f 100644
+--- a/src/rsn_supp/wpa.c
++++ b/src/rsn_supp/wpa.c
+@@ -2440,6 +2440,9 @@ void wpa_sm_notify_disassoc(struct wpa_sm *sm)
+ #ifdef CONFIG_TDLS
+       wpa_tdls_disassoc(sm);
+ #endif /* CONFIG_TDLS */
++#ifdef CONFIG_IEEE80211R
++      sm->ft_reassoc_completed = 0;
++#endif /* CONFIG_IEEE80211R */
+       /* Keys are not needed in the WPA state machine anymore */
+       wpa_sm_drop_sa(sm);
+diff --git a/src/rsn_supp/wpa_ft.c b/src/rsn_supp/wpa_ft.c
+index 205793e..d45bb45 100644
+--- a/src/rsn_supp/wpa_ft.c
++++ b/src/rsn_supp/wpa_ft.c
+@@ -153,6 +153,7 @@ static u8 * wpa_ft_gen_req_ies(struct wpa_sm *sm, size_t *len,
+       u16 capab;
+       sm->ft_completed = 0;
++      sm->ft_reassoc_completed = 0;
+       buf_len = 2 + sizeof(struct rsn_mdie) + 2 + sizeof(struct rsn_ftie) +
+               2 + sm->r0kh_id_len + ric_ies_len + 100;
+@@ -681,6 +682,11 @@ int wpa_ft_validate_reassoc_resp(struct wpa_sm *sm, const u8 *ies,
+               return -1;
+       }
++      if (sm->ft_reassoc_completed) {
++              wpa_printf(MSG_DEBUG, "FT: Reassociation has already been completed for this FT protocol instance - ignore unexpected retransmission");
++              return 0;
++      }
++
+       if (wpa_ft_parse_ies(ies, ies_len, &parse) < 0) {
+               wpa_printf(MSG_DEBUG, "FT: Failed to parse IEs");
+               return -1;
+@@ -781,6 +787,8 @@ int wpa_ft_validate_reassoc_resp(struct wpa_sm *sm, const u8 *ies,
+               return -1;
+       }
++      sm->ft_reassoc_completed = 1;
++
+       if (wpa_ft_process_gtk_subelem(sm, parse.gtk, parse.gtk_len) < 0)
+               return -1;
+diff --git a/src/rsn_supp/wpa_i.h b/src/rsn_supp/wpa_i.h
+index 41f371f..56f88dc 100644
+--- a/src/rsn_supp/wpa_i.h
++++ b/src/rsn_supp/wpa_i.h
+@@ -128,6 +128,7 @@ struct wpa_sm {
+       size_t r0kh_id_len;
+       u8 r1kh_id[FT_R1KH_ID_LEN];
+       int ft_completed;
++      int ft_reassoc_completed;
+       int over_the_ds_in_progress;
+       u8 target_ap[ETH_ALEN]; /* over-the-DS target AP */
+       int set_ptk_after_assoc;
+-- 
+2.7.4
+
index 1799bc1b127e15861e6c42a0d89306e89d9dcff7..caafe92fea54346500695d558ca48c510a15f85f 100644 (file)
@@ -18,7 +18,7 @@ esac
 
 COREVER=$(cat /opt/pakfire/db/core/mine)
 # FIXME: edit this lines before release
-URL="http://download.ipfire.org/releases/ipfire-2.x/2.19-core$COREVER/"
+URL="https://downloads.ipfire.org/releases/ipfire-2.x/2.19-core$COREVER/"
 ISO="ipfire-2.19.$arch-full-core$COREVER.iso"
 
 if [ -z $1 ]; then
diff --git a/src/scripts/captive-cleanup b/src/scripts/captive-cleanup
new file mode 100755 (executable)
index 0000000..b576df4
--- /dev/null
@@ -0,0 +1,52 @@
+#!/usr/bin/perl
+###############################################################################
+#                                                                             #
+# IPFire.org - A linux based firewall                                         #
+# Copyright (C) 2016  IPFire Team  <alexander.marx@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/>.       #
+#                                                                             #
+###############################################################################
+
+use strict;
+
+require '/var/ipfire/general-functions.pl';
+
+my %settings=();
+my %clientshash=();
+my $settingsfile="${General::swroot}/captive/settings";
+my $clients="${General::swroot}/captive/clients";
+my $time;
+my $expiretime;
+
+if (-f $settingsfile && -f $clients && ! -z $clients){
+       &General::readhash("$settingsfile", \%settings) if(-f $settingsfile);
+       &General::readhasharray("$clients", \%clientshash);
+       $time = time();
+       foreach my $key (keys %clientshash) {
+               # Skip unlimited access lines
+               next if ($clientshash{$key}[3] == 0);
+
+               $expiretime=($clientshash{$key}[2])+$clientshash{$key}[3];
+               if ($expiretime < $time){
+                       delete $clientshash{$key};
+                       my $exp = gmtime($expiretime);
+                       &General::log("Captive", "Delete expired voucher $clientshash{$key}[4] expired on $exp. Remark: $clientshash{$key}[5]");
+               }
+       }
+       &General::writehasharray("$clients", \%clientshash);
+
+       # Reload firewall rules
+       system("/usr/local/bin/captivectrl");
+}
diff --git a/src/scripts/httpscert b/src/scripts/httpscert
deleted file mode 100644 (file)
index e20f789..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/bin/sh
-#
-# new : generate new certificate
-# read: read issuer in certificate and verify if it is the same as hostname
-
-# See how we were called.
-case "$1" in
-  new)
-       if [ ! -f /etc/httpd/server.key ]; then
-               echo "Generating https server key."
-               /usr/bin/openssl genrsa -out /etc/httpd/server.key 4096
-       fi
-       echo "Generating CSR"
-       /bin/cat /etc/certparams | sed "s/HOSTNAME/`hostname -f`/" | /usr/bin/openssl \
-               req -new -key /etc/httpd/server.key -out /etc/httpd/server.csr
-       echo "Signing certificate"
-       /usr/bin/openssl x509 -req -days 999999 -sha256 -in \
-               /etc/httpd/server.csr -signkey /etc/httpd/server.key -out \
-               /etc/httpd/server.crt
-       ;;
-  read)
-       if [ -f /etc/httpd/server.key -a -f /etc/httpd/server.crt -a -f /etc/httpd/server.csr ]; then
-               ISSUER=`openssl x509 -in /etc/httpd/server.crt -text -noout | grep Issuer | /usr/bin/cut -f2 -d '='`
-               HOSTNAME=`/bin/hostname -f`
-               if [ "$ISSUER" != "$HOSTNAME" ]; then
-                       echo "Certificate issuer '$ISSUER' is not the same as the hostname '$HOSTNAME'"
-                       echo "Probably host or domain name has been changed in setup"
-                       echo "You could remake server certificate with '/usr/local/bin/httpscert new'"
-                       exit 1
-               else
-                       echo "https certificate issuer match $HOSTNAME"
-               fi
-       else
-               echo "Certificate not found"
-               exit 1
-       fi
-       ;;
-  *)
-       /bin/echo "Usage: $0 {read|new}"
-       exit 1
-       ;;
-esac
index e7b4b5231a0343f7c911808aa6f0d6079f191931..6242577af9eb7540cd87ef711f7d952d1304976f 100644 (file)
@@ -56,7 +56,7 @@ int handleadminpassword(void)
                return 0;
        
        snprintf(commandstring, STRING_SIZE,
-               "/usr/sbin/htpasswd -c -m -b " CONFIG_ROOT "/auth/users admin '%s'", password);
+               "/usr/bin/htpasswd -c -B -C 7 -b " CONFIG_ROOT "/auth/users admin '%s'", password);
        sprintf(message, _("Setting %s 'admin' user password..."), NAME);
        if (runhiddencommandwithstatus(commandstring, _("Setting password"), message, NULL)) {
                sprintf(message, _("Problem setting %s 'admin' user password."), NAME);
index a3b9a806c188aca568874fa3ddef6c0f2d30a431..0538825189a49ff53250c12ef46381d5a7f28050 100644 (file)
@@ -3,14 +3,15 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# Omar Sherif El Watidy <omar.elwatidy@gmail.com>, 2016
 msgid ""
 msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
-"PO-Revision-Date: 2014-08-21 15:13+0000\n"
-"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
-"Language-Team: Arabic (http://www.transifex.com/projects/p/ipfire/language/ar/)\n"
+"PO-Revision-Date: 2017-09-20 09:45+0000\n"
+"Last-Translator: Omar Sherif El Watidy <omar.elwatidy@gmail.com>\n"
+"Language-Team: Arabic (http://www.transifex.com/mstremer/ipfire/language/ar/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -71,14 +72,14 @@ msgstr ""
 #: networking.c:642 networking.c:653 networking.c:746 passwords.c:89
 #: timezone.c:78
 msgid "OK"
-msgstr ""
+msgstr "تم"
 
 #: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158
 #: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305
 #: networking.c:410 networking.c:560 networking.c:653 networking.c:746
 #: passwords.c:89 timezone.c:78
 msgid "Cancel"
-msgstr ""
+msgstr "إلغاء"
 
 #: dhcp.c:156
 msgid ""
@@ -192,15 +193,15 @@ msgstr ""
 
 #: main.c:99
 msgid "Quit"
-msgstr ""
+msgstr "خروج"
 
 #: main.c:172
 msgid "Setup is complete."
-msgstr ""
+msgstr "تم التثبيت بنجاح "
 
 #: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
 msgid "Warning"
-msgstr ""
+msgstr "تحذير "
 
 #: main.c:175
 msgid ""
@@ -211,7 +212,7 @@ msgstr ""
 #: misc.c:62
 #, c-format
 msgid "Unable to write %s/main/hostname.conf"
-msgstr ""
+msgstr "   %s/main/hostname.conf   لم يمكن تنزيل الملفات الى "
 
 #: misc.c:71
 msgid "Unable to open main hosts file."
index 20dd07333412d4004307f54c8e012aea92cb87e3..a7a1bad245d7f8178395ab58c5595c8a372d77c5 100644 (file)
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
-"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"PO-Revision-Date: 2017-08-03 19:28+0000\n"
 "Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
-"Language-Team: Catalan (http://www.transifex.com/projects/p/ipfire/language/ca/)\n"
+"Language-Team: Catalan (http://www.transifex.com/mstremer/ipfire/language/ca/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index 1a3a7d6cdba13e3e87436b7f837316ea5577e7c9..ed3311fbf62edab3fa39af1718ca48f115bfd739 100644 (file)
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
-"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"PO-Revision-Date: 2017-08-03 19:28+0000\n"
 "Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
-"Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/ipfire/language/cs_CZ/)\n"
+"Language-Team: Czech (Czech Republic) (http://www.transifex.com/mstremer/ipfire/language/cs_CZ/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index bf05c102eeef918a73c02d365d5fca0ddb0a0e43..2e21ad8d453c6f17d72d141c615184e6c9ff50b3 100644 (file)
@@ -3,15 +3,15 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
-# Henrik Simonsen <cybermaze@gmail.com>, 2014
+# Henrik Simonsen <cybermaze@gmail.com>, 2014,2016
 msgid ""
 msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
-"PO-Revision-Date: 2014-08-24 14:21+0000\n"
+"PO-Revision-Date: 2017-09-20 09:45+0000\n"
 "Last-Translator: Henrik Simonsen <cybermaze@gmail.com>\n"
-"Language-Team: Danish (http://www.transifex.com/projects/p/ipfire/language/da/)\n"
+"Language-Team: Danish (http://www.transifex.com/mstremer/ipfire/language/da/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -570,7 +570,7 @@ msgstr "Igen:"
 
 #: passwords.c:95
 msgid "Password cannot be blank."
-msgstr "Adgangskode kan ikke være tom."
+msgstr "Adgangskoden må ikke være tom."
 
 #: passwords.c:102
 msgid "Passwords do not match."
@@ -578,7 +578,7 @@ msgstr "Adgangskoderne er ikke ens."
 
 #: passwords.c:109
 msgid "Password cannot contain spaces."
-msgstr "Adgangskoder kan ikke indeholde mellemrum."
+msgstr "Adgangskoden må ikke indeholde mellemrum."
 
 #: timezone.c:77
 msgid "Choose the timezone you are in from the list below."
index 021aecbbc6929b4a0d0c9696f2e714f8bf79fc77..122e8f70f9483a26d89ebfdc14ee248d1aa9c676 100644 (file)
@@ -11,7 +11,7 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
-"PO-Revision-Date: 2015-05-07 16:52+0000\n"
+"PO-Revision-Date: 2017-09-20 09:45+0000\n"
 "Last-Translator: Sun Tiger\n"
 "Language-Team: German (http://www.transifex.com/mstremer/ipfire/language/de/)\n"
 "MIME-Version: 1.0\n"
index 3d4d211cfd4d34f4bc91a7cadd69370405300236..d5f38ba0eb65682fc3ec92bcf48bc6c522fc16e0 100644 (file)
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
-"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"PO-Revision-Date: 2017-08-03 19:28+0000\n"
 "Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
-"Language-Team: Greek (Greece) (http://www.transifex.com/projects/p/ipfire/language/el_GR/)\n"
+"Language-Team: Greek (Greece) (http://www.transifex.com/mstremer/ipfire/language/el_GR/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index 060dd2d8b0fbf150f28a2af36077097c8085bbdb..91235d7bd7d49a14bd4bb8aa4f2c65e9e1575b77 100644 (file)
@@ -10,9 +10,9 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
-"PO-Revision-Date: 2015-02-01 09:37+0000\n"
+"PO-Revision-Date: 2017-09-20 09:45+0000\n"
 "Last-Translator: Roberto Peña <roberto.pena@northsecure.es>\n"
-"Language-Team: Spanish (http://www.transifex.com/projects/p/ipfire/language/es/)\n"
+"Language-Team: Spanish (http://www.transifex.com/mstremer/ipfire/language/es/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index a825ca8023b0f3921f20ae937da01eb54115d4cf..9f6dbd8eb50b1440beaf8202cac02f97f4e31c64 100644 (file)
@@ -10,9 +10,9 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
-"PO-Revision-Date: 2015-01-26 06:42+0000\n"
+"PO-Revision-Date: 2017-09-23 20:09+0000\n"
 "Last-Translator: Khalil Delavaran <khalil.delavaran@gmail.com>\n"
-"Language-Team: Persian (http://www.transifex.com/projects/p/ipfire/language/fa/)\n"
+"Language-Team: Persian (http://www.transifex.com/mstremer/ipfire/language/fa/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index c649710cd5a152259d6a1188c40810cbdaf57c80..46a74b55bb385bf53533a16ce6ae54c6b53f4a01 100644 (file)
@@ -3,17 +3,20 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# Cedric RIVERA, 2016
 # irenee Munyaneza <muirenee@yahoo.fr>, 2014
+# Nicolas Cuffia <cuffia.cuceglio@vivaldi.net>, 2016
 # nonux <nonux@free.fr>, 2015
+# Philippe B <philippe@123-newbeetle.com>, 2016
 # Sebastien Labrie <fonkyy@gmail.com>, 2015
 msgid ""
 msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
-"PO-Revision-Date: 2015-02-17 23:25+0000\n"
-"Last-Translator: nonux <nonux@free.fr>\n"
-"Language-Team: French (http://www.transifex.com/projects/p/ipfire/language/fr/)\n"
+"PO-Revision-Date: 2017-09-20 09:45+0000\n"
+"Last-Translator: Cedric RIVERA\n"
+"Language-Team: French (http://www.transifex.com/mstremer/ipfire/language/fr/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -22,19 +25,19 @@ msgstr ""
 
 #: dhcp.c:50
 msgid "Start address:"
-msgstr "Adresse du début :"
+msgstr "Adresse de début :"
 
 #: dhcp.c:51
 msgid "End address:"
-msgstr "Adresse de fin : "
+msgstr "Adresse de fin :"
 
 #: dhcp.c:52 networking.c:717
 msgid "Primary DNS:"
-msgstr "DNS primaire:"
+msgstr "DNS primaire :"
 
 #: dhcp.c:53 networking.c:723
 msgid "Secondary DNS:"
-msgstr "DNS secondaire:"
+msgstr "DNS secondaire :"
 
 #: dhcp.c:54
 msgid "Default lease (mins):"
@@ -62,7 +65,7 @@ msgstr "Configuration du serveur DHCP"
 
 #: dhcp.c:116
 msgid "Configure the DHCP server by entering the settings information."
-msgstr ""
+msgstr "Configurer le serveur DHCP en entrant les informations de paramètrage."
 
 #: dhcp.c:125
 msgid "Enabled"
@@ -74,7 +77,7 @@ msgstr "Activé"
 #: networking.c:642 networking.c:653 networking.c:746 passwords.c:89
 #: timezone.c:78
 msgid "OK"
-msgstr ""
+msgstr "OK"
 
 #: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158
 #: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305
@@ -151,15 +154,15 @@ msgstr "Le nom de domaine ne doit pas contenir d'espaces."
 
 #: hostname.c:58
 msgid "Hostname may only contain letters, numbers and hyphens."
-msgstr ""
+msgstr "Le hostname doit seulement contenir des lettres, chiffres et trais d'union."
 
 #: keymap.c:84 main.c:67
 msgid "Keyboard mapping"
-msgstr ""
+msgstr "Mappage du clavier"
 
 #: keymap.c:85
 msgid "Choose the type of keyboard you are using from the list below."
-msgstr ""
+msgstr "Choisir le type de clavier utilisé depuis la liste ci-dessous."
 
 #: main.c:68 timezone.c:77
 msgid "Timezone"
@@ -171,7 +174,7 @@ msgstr "Réseau"
 
 #: main.c:72 misc.c:147
 msgid "ISDN"
-msgstr ""
+msgstr "ISDN"
 
 #: main.c:73
 msgid "'root' password"
@@ -183,7 +186,7 @@ msgstr "Most de passe \"admin\""
 
 #: main.c:90
 msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
-msgstr ""
+msgstr "<Tab>/<Alt-Tab> entre les éléments | <Espace> selection"
 
 #: main.c:97
 msgid "Section menu"
@@ -191,7 +194,7 @@ msgstr "Menu de sélection"
 
 #: main.c:98
 msgid "Select the item you wish to configure."
-msgstr ""
+msgstr "Sélectionner l'artivle à confurer."
 
 #: main.c:99
 msgid "Quit"
@@ -199,7 +202,7 @@ msgstr "Quitter"
 
 #: main.c:172
 msgid "Setup is complete."
-msgstr ""
+msgstr "Le paramétrage est terminé."
 
 #: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
 msgid "Warning"
@@ -209,16 +212,16 @@ msgstr "Avertissement"
 msgid ""
 "Initial setup was not entirely complete. You must ensure that Setup is "
 "properly finished by running setup again at the shell."
-msgstr ""
+msgstr "Le paramétrage initial n'est pas terminé. Assurez vous que le paramétrage s'est correctement terminé en exécutant de nouveau setup depuis le shell."
 
 #: misc.c:62
 #, c-format
 msgid "Unable to write %s/main/hostname.conf"
-msgstr ""
+msgstr "Impossible d'écriere %s/main/hostname.conf"
 
 #: misc.c:71
 msgid "Unable to open main hosts file."
-msgstr ""
+msgstr "Impossible d'écrire le fichier principal hosts."
 
 #: misc.c:76
 msgid "Unable to write /etc/hosts."
@@ -238,11 +241,11 @@ msgstr "Impossible de définir le nom d'hôte"
 
 #: misc.c:147
 msgid "Scanning and configuring ISDN devices."
-msgstr ""
+msgstr "Détection et configuration des interfaces ISDN."
 
 #: misc.c:148
 msgid "Unable to scan for ISDN devices."
-msgstr ""
+msgstr "Détection des périphériques ISDN impossible."
 
 #: netstuff.c:86
 #, c-format
@@ -252,7 +255,7 @@ msgstr "Interface - %s"
 #: netstuff.c:91
 #, c-format
 msgid "Enter the IP address information for the %s interface."
-msgstr ""
+msgstr "Paramétrage IP pour l'interface %s"
 
 #: netstuff.c:103
 msgid "Static"
@@ -264,7 +267,7 @@ msgstr "DHCP"
 
 #: netstuff.c:105
 msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
-msgstr ""
+msgstr "Connexion PPP (PPPoE, modem, ATM ...)"
 
 #: netstuff.c:113
 msgid "DHCP Hostname:"
@@ -272,7 +275,7 @@ msgstr "Nom d'hôte DHCP:"
 
 #: netstuff.c:115
 msgid "Force DHCP MTU:"
-msgstr ""
+msgstr "Forcer taille MTU pour DHCP:"
 
 #: netstuff.c:134
 msgid "IP address:"
@@ -300,16 +303,16 @@ msgstr "Nom d'hôte DHCP"
 
 #: netstuff.c:396 netstuff.c:709
 msgid "Unset"
-msgstr ""
+msgstr "Non-défini"
 
 #: netstuff.c:669
 #, c-format
 msgid "Please choose a networkcard for the following interface - %s."
-msgstr ""
+msgstr "Choisissez un adaptateur réseau pour l'interface - %s."
 
 #: netstuff.c:672
 msgid "Extended Network Menu"
-msgstr ""
+msgstr "Étendre le Menu Réseau"
 
 #: netstuff.c:673 networking.c:520
 msgid "Select"
@@ -317,7 +320,7 @@ msgstr "Sélectionner"
 
 #: netstuff.c:673
 msgid "Identify"
-msgstr ""
+msgstr "Identifier"
 
 #: netstuff.c:678
 msgid "Device Identification"
@@ -325,28 +328,28 @@ msgstr "Identification du périphérique"
 
 #: netstuff.c:678
 msgid "The lights on the selected port should flash now for 10 seconds..."
-msgstr ""
+msgstr "Le témoin lumineux du port sélectionné doit clignoter maintenant pendant 10 secondes ..."
 
 #: netstuff.c:679
 msgid "Identification is not supported by this interface."
-msgstr ""
+msgstr "L'identification n'est pas supporté par cet interface."
 
 #: netstuff.c:691
 msgid "There are no unassigned interfaces on your system."
-msgstr ""
+msgstr "Aucune interface assignée sur votre système."
 
 #: netstuff.c:732
 #, c-format
 msgid "Do you really want to remove the assigned %s interface?"
-msgstr ""
+msgstr "Confirmez-vous la suppression de l'interface assignée %s ?"
 
 #: netstuff.c:755
 msgid "Select network driver"
-msgstr ""
+msgstr "Selectionnez le pilote réseau"
 
 #: netstuff.c:755
 msgid "Set additional module parameters"
-msgstr ""
+msgstr "Régler des paramètres supplémentaires du moduie"
 
 #: netstuff.c:762
 msgid "Loading module..."
@@ -354,7 +357,7 @@ msgstr "Chargement du module..."
 
 #: netstuff.c:777
 msgid "Unable to load driver module."
-msgstr ""
+msgstr "Incapable de charger le module du pilote"
 
 #: netstuff.c:780
 msgid "Module name cannot be blank."
@@ -374,7 +377,7 @@ msgstr "Pas d'interface VERTE assignée."
 
 #: networking.c:152
 msgid "Missing an IP address on GREEN."
-msgstr ""
+msgstr "Adresse IP manquante pour VERT."
 
 #: networking.c:163
 msgid "Error"
@@ -382,7 +385,7 @@ msgstr "Erreur"
 
 #: networking.c:163
 msgid "Ignore"
-msgstr ""
+msgstr "Ignorer"
 
 #: networking.c:164
 msgid "No RED interface assigned."
@@ -390,7 +393,7 @@ msgstr "Pas d'interface ROUGE assignée."
 
 #: networking.c:173
 msgid "Missing an IP address on RED."
-msgstr ""
+msgstr "Adresse IP manquante pour ROUGE."
 
 #: networking.c:183
 msgid "No ORANGE interface assigned."
@@ -398,7 +401,7 @@ msgstr "Pas d'interface ORANGE assignée."
 
 #: networking.c:189
 msgid "Missing an IP address on ORANGE."
-msgstr ""
+msgstr "Adresse IP manquante pour ORANGE."
 
 #: networking.c:199
 msgid "No BLUE interface assigned."
@@ -406,23 +409,23 @@ msgstr "Pas d'interface BLEUE assignée."
 
 #: networking.c:205
 msgid "Missing an IP address on BLUE."
-msgstr ""
+msgstr "Adresse IP manquante pour BLEU"
 
 #: networking.c:217
 msgid "Misssing DNS."
-msgstr ""
+msgstr "DNS non spécifié."
 
 #: networking.c:224
 msgid "Missing Default Gateway."
-msgstr ""
+msgstr "Passerelle par défaut non spécifiée."
 
 #: networking.c:237 networking.c:304
 msgid "Network configuration type"
-msgstr ""
+msgstr "Type de configuration réseau"
 
 #: networking.c:238 networking.c:409
 msgid "Drivers and card assignments"
-msgstr ""
+msgstr "Affectation des Pilotes et des Cartes"
 
 #: networking.c:239 networking.c:640
 msgid "Address settings"
@@ -430,11 +433,11 @@ msgstr "Configuration d'adresse"
 
 #: networking.c:240 networking.c:743
 msgid "DNS and Gateway settings"
-msgstr ""
+msgstr "Réglages DNS et Passerelle"
 
 #: networking.c:260
 msgid "When configuration is complete, a network restart will be required."
-msgstr ""
+msgstr "A l'issue de la configuration un redémarrage de la couche réseau est nécessaire."
 
 #: networking.c:267
 #, c-format
@@ -442,7 +445,7 @@ msgid ""
 "Current config: %s\n"
 "\n"
 "%s"
-msgstr ""
+msgstr "Configuration actuelle: %s\n\n%s"
 
 #: networking.c:268
 msgid "Network configuration menu"
@@ -459,7 +462,7 @@ msgid ""
 "list those interfaces which have ethernet attached. If you change this "
 "setting, a network restart will be required, and you will have to "
 "reconfigure the network driver assignments."
-msgstr ""
+msgstr "Choisir la configuration réseau pour %s.  Les types de configuration suivants énumèrent les interfaces ethernet connectées. Tous changements dans le paramétrage nécessitent une reconfiguration de la couche réseau et des pilotes associés."
 
 #: networking.c:307
 #, c-format
@@ -467,27 +470,27 @@ msgid ""
 "Not enough netcards for your choice.\n"
 "\n"
 "Needed: %d - Available: %d\n"
-msgstr ""
+msgstr "Pas assez d'adaptateurs réseaux pour votre choix.\n\nAttendu: %d - Disponible: %d\n\n"
 
 #: networking.c:359
 msgid ""
 "Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
 "\n"
-msgstr ""
+msgstr "Configuration des pilotes réseaux et des interfaces associées aux adaptateurs réseaux. La configuration est la suivante:\n"
 
 #: networking.c:408
 msgid "Do you wish to change these settings?"
-msgstr ""
+msgstr "Voulez-vous changer ces paramètres?"
 
 #: networking.c:447
 msgid "Restarting non-local network..."
-msgstr ""
+msgstr "Redémarrage du réseau distant ..."
 
 #: networking.c:464
 msgid ""
 "Please choose the interface you wish to change.\n"
 "\n"
-msgstr ""
+msgstr "S'il vous plaît, choisissez l'interface que vous voulez changer.\n\n"
 
 #: networking.c:519
 msgid "Assigned Cards"
@@ -495,7 +498,7 @@ msgstr "Cartes attribuées"
 
 #: networking.c:520
 msgid "Remove"
-msgstr ""
+msgstr "Enlever"
 
 #: networking.c:556 networking.c:649
 #, c-format
@@ -504,11 +507,11 @@ msgid ""
 "connection to the %s machine will be broken, and you will have to reconnect "
 "on the new IP. This is a risky operation, and should only be attempted if "
 "you have physical access to the machine, should something go wrong."
-msgstr ""
+msgstr "Si vous changez cette adresse IP et si vous êtes connecté à distance alors votre accès à la machine %s sera rompu et il vous sera nécessaire de vous reconnecter à la nouvelle adresse IP. C'est une situation dangereuse qui ne doit être tentée que si vous avez accès physiquement à l'ordinateur afin d'éviter une complication inattendue."
 
 #: networking.c:641
 msgid "Select the interface you wish to reconfigure."
-msgstr ""
+msgstr "Selectionnez l'interface que vous souhaitez reconfigurer."
 
 #: networking.c:729
 msgid "Default gateway:"
@@ -518,7 +521,7 @@ msgstr "Passerelle par defaut"
 msgid ""
 "Enter the DNS and gateway information. These settings are used only with "
 "Static IP (and DHCP if DNS set) on the RED interface."
-msgstr ""
+msgstr "Saisir les informations relatives au DNS et à la passerelle. Ces paramètres sont utilisés dans la cas d'une configuration statique de la couche IP (et DHCP pour le DNS) sur l'interface ROUGE."
 
 #: networking.c:773
 msgid "Default gateway"
@@ -526,12 +529,12 @@ msgstr "Passerelle par défaut"
 
 #: networking.c:780
 msgid "Secondary DNS specified without a Primary DNS"
-msgstr ""
+msgstr "DNS secondaire spécifié sans DNS primaire"
 
 #: passwords.c:33
 msgid ""
 "Enter the 'root' user password. Login as this user for commandline access."
-msgstr ""
+msgstr "Entrez le mot de passe pour le super-utilisateur 'root'. Se connecter avec celui-ci pour les accès en ligne de commande."
 
 #: passwords.c:38 passwords.c:61
 msgid "Setting password"
@@ -539,28 +542,28 @@ msgstr "Configuration du mot de passe"
 
 #: passwords.c:38
 msgid "Setting 'root' password...."
-msgstr ""
+msgstr "Paramétrage du mot de passe pour le super-utilisateur 'root' ..."
 
 #: passwords.c:39
 msgid "Problem setting 'root' password."
-msgstr ""
+msgstr "Problème lors du paramétrage du mot de passe pour le super-utilisateur 'root' ..."
 
 #: passwords.c:53
 #, c-format
 msgid ""
 "Enter %s 'admin' user password. This is the user to use for logging into the"
 " %s web administration pages."
-msgstr ""
+msgstr "Saisir le mot de passe %s pour l'utilisateur 'admin'. Cet utilisateur est nécessaire pour se connecter aux pages web %s d'administration."
 
 #: passwords.c:60
 #, c-format
 msgid "Setting %s 'admin' user password..."
-msgstr ""
+msgstr "Paramétrage du mot de passe %s pour le compte utilisateur 'admin'..."
 
 #: passwords.c:62
 #, c-format
 msgid "Problem setting %s 'admin' user password."
-msgstr ""
+msgstr "Problème rencontré lors de mise en place du mot de passe %s pour l'utilisateur 'admin'."
 
 #: passwords.c:76
 msgid "Password:"
@@ -576,7 +579,7 @@ msgstr "Le mot de passe ne doit pas être vide"
 
 #: passwords.c:102
 msgid "Passwords do not match."
-msgstr ""
+msgstr "Les mots de passe de correspondent pas."
 
 #: passwords.c:109
 msgid "Password cannot contain spaces."
@@ -584,4 +587,4 @@ msgstr "Le mot de passe ne doit pas contenir des espaces"
 
 #: timezone.c:77
 msgid "Choose the timezone you are in from the list below."
-msgstr ""
+msgstr "Choisir le fuseau horaire adéquate dans la liste suivante. "
index 3ecc4d3eda451519ead6879582c9a303ead388b5..54261edc629e47a715c16f18ea296a3338193ce0 100644 (file)
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
-"PO-Revision-Date: 2014-10-31 14:31+0000\n"
+"PO-Revision-Date: 2017-09-21 12:48+0000\n"
 "Last-Translator: Blago Culjak <blago.culjak@hotmail.com>\n"
-"Language-Team: Croatian (http://www.transifex.com/projects/p/ipfire/language/hr/)\n"
+"Language-Team: Croatian (http://www.transifex.com/mstremer/ipfire/language/hr/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index 3d71983142a1fa855db35655cc76f7abed5b6a56..565704e786db31fdfc97a28a95cf7635e3826065 100644 (file)
@@ -3,14 +3,15 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# Gábor Sávolyi, 2016
 msgid ""
 msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
-"PO-Revision-Date: 2014-08-21 15:13+0000\n"
-"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
-"Language-Team: Hungarian (http://www.transifex.com/projects/p/ipfire/language/hu/)\n"
+"PO-Revision-Date: 2017-09-20 09:45+0000\n"
+"Last-Translator: Gábor Sávolyi\n"
+"Language-Team: Hungarian (http://www.transifex.com/mstremer/ipfire/language/hu/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -19,31 +20,31 @@ msgstr ""
 
 #: dhcp.c:50
 msgid "Start address:"
-msgstr ""
+msgstr "Kezdő cím:"
 
 #: dhcp.c:51
 msgid "End address:"
-msgstr ""
+msgstr "Végső cím:"
 
 #: dhcp.c:52 networking.c:717
 msgid "Primary DNS:"
-msgstr ""
+msgstr "Elsődleges DNS:"
 
 #: dhcp.c:53 networking.c:723
 msgid "Secondary DNS:"
-msgstr ""
+msgstr "Másodlagos DNS:"
 
 #: dhcp.c:54
 msgid "Default lease (mins):"
-msgstr ""
+msgstr "Alapértelmezett bérleti idő (perc):"
 
 #: dhcp.c:55
 msgid "Max lease (mins):"
-msgstr ""
+msgstr "Maximális bérleti idő (perc):"
 
 #: dhcp.c:56
 msgid "Domain name suffix:"
-msgstr ""
+msgstr "Domain név utótag:"
 
 #: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70
 #: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704
@@ -51,19 +52,19 @@ msgstr ""
 #: networking.c:442 networking.c:552 networking.c:603 networking.c:610
 #: networking.c:713 timezone.c:63
 msgid "Unable to open settings file"
-msgstr ""
+msgstr "Nem sikerült megnyitni a konfigurációs fájlt"
 
 #: dhcp.c:111
 msgid "DHCP server configuration"
-msgstr ""
+msgstr "DHCP kiszolgáló beállítása"
 
 #: dhcp.c:116
 msgid "Configure the DHCP server by entering the settings information."
-msgstr ""
+msgstr "DHCP kiszolgáló beállításainak megadása."
 
 #: dhcp.c:125
 msgid "Enabled"
-msgstr ""
+msgstr "Engedélyezve"
 
 #: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172
 #: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163
@@ -71,367 +72,367 @@ msgstr ""
 #: networking.c:642 networking.c:653 networking.c:746 passwords.c:89
 #: timezone.c:78
 msgid "OK"
-msgstr ""
+msgstr "Rendben"
 
 #: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158
 #: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305
 #: networking.c:410 networking.c:560 networking.c:653 networking.c:746
 #: passwords.c:89 timezone.c:78
 msgid "Cancel"
-msgstr ""
+msgstr "Mégsem"
 
 #: dhcp.c:156
 msgid ""
 "The following fields are invalid:\n"
 "\n"
-msgstr ""
+msgstr "A következő mezők érvénytelenek:\n\n"
 
 #: dhcp.c:159
 msgid "Start address"
-msgstr ""
+msgstr "Kezdő cím"
 
 #: dhcp.c:165
 msgid "End address"
-msgstr ""
+msgstr "Végső cím"
 
 #: dhcp.c:173 networking.c:755
 msgid "Primary DNS"
-msgstr ""
+msgstr "Elsődleges DNS"
 
 #: dhcp.c:182 networking.c:764
 msgid "Secondary DNS"
-msgstr ""
+msgstr "Másodlagos DNS"
 
 #: dhcp.c:189
 msgid "Default lease time"
-msgstr ""
+msgstr "Alapértelmezett bérleti idő"
 
 #: dhcp.c:195
 msgid "Max. lease time"
-msgstr ""
+msgstr "Max. bérleti idő"
 
 #: domainname.c:42 main.c:70
 msgid "Domain name"
-msgstr ""
+msgstr "Domain név"
 
 #: domainname.c:42
 msgid "Enter Domain name"
-msgstr ""
+msgstr "Domain név megadása"
 
 #: domainname.c:48
 msgid "Domain name cannot be empty."
-msgstr ""
+msgstr "A domain név nem lehet üres."
 
 #: domainname.c:50
 msgid "Domain name cannot contain spaces."
-msgstr ""
+msgstr "A domain név nem tartalmazhat szóközt."
 
 #: domainname.c:53
 msgid "Domain name may only contain letters, numbers, hyphens and periods."
-msgstr ""
+msgstr "A domain név csak betűket, számokat, kötőjelet és pontot tartalmazhat."
 
 #: hostname.c:46 main.c:69
 msgid "Hostname"
-msgstr ""
+msgstr "Kiszolgálónév"
 
 #: hostname.c:46
 msgid "Enter the machine's hostname."
-msgstr ""
+msgstr "Add meg a gép kiszolgálónevét."
 
 #: hostname.c:53
 msgid "Hostname cannot be empty."
-msgstr ""
+msgstr "A kiszolgálónév nem lehet üres."
 
 #: hostname.c:55
 msgid "Hostname cannot contain spaces."
-msgstr ""
+msgstr "A kiszolgálónév nem tartalmazhat szóközt."
 
 #: hostname.c:58
 msgid "Hostname may only contain letters, numbers and hyphens."
-msgstr ""
+msgstr "A kiszolgálónév csak betűket, számokat és kötőjelet tartalmazhat."
 
 #: keymap.c:84 main.c:67
 msgid "Keyboard mapping"
-msgstr ""
+msgstr "Billentyűzet kiosztás"
 
 #: keymap.c:85
 msgid "Choose the type of keyboard you are using from the list below."
-msgstr ""
+msgstr "Válaszd ki a billentyűzet típusát a listából."
 
 #: main.c:68 timezone.c:77
 msgid "Timezone"
-msgstr ""
+msgstr "Időzóna"
 
 #: main.c:71 networking.c:110 networking.c:115 networking.c:447
 msgid "Networking"
-msgstr ""
+msgstr "Hálózati beállítások"
 
 #: main.c:72 misc.c:147
 msgid "ISDN"
-msgstr ""
+msgstr "ISDN"
 
 #: main.c:73
 msgid "'root' password"
-msgstr ""
+msgstr "'root' jelszó"
 
 #: main.c:74
 msgid "'admin' password"
-msgstr ""
+msgstr "'admin' jelszó"
 
 #: main.c:90
 msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
-msgstr ""
+msgstr "<Tab>/<Alt-Tab> elemek közötti váltás | <Space> kiválasztás"
 
 #: main.c:97
 msgid "Section menu"
-msgstr ""
+msgstr "Részlegek Menü"
 
 #: main.c:98
 msgid "Select the item you wish to configure."
-msgstr ""
+msgstr "Válaszd ki a beállítandó elemet."
 
 #: main.c:99
 msgid "Quit"
-msgstr ""
+msgstr "Kilépés"
 
 #: main.c:172
 msgid "Setup is complete."
-msgstr ""
+msgstr "Beállítások befejezve."
 
 #: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
 msgid "Warning"
-msgstr ""
+msgstr "Figyelmeztetés"
 
 #: main.c:175
 msgid ""
 "Initial setup was not entirely complete. You must ensure that Setup is "
 "properly finished by running setup again at the shell."
-msgstr ""
+msgstr "A kezdő beállítások nem teljesek. Indítsd el újra a 'setup'-ot a befejezéshez."
 
 #: misc.c:62
 #, c-format
 msgid "Unable to write %s/main/hostname.conf"
-msgstr ""
+msgstr "Nem sikerült írni: %s/main/hostname.conf"
 
 #: misc.c:71
 msgid "Unable to open main hosts file."
-msgstr ""
+msgstr "Nem siekrült megnyitni a fő 'hosts' fájlt."
 
 #: misc.c:76
 msgid "Unable to write /etc/hosts."
-msgstr ""
+msgstr "Nem sikerült írni: /etc/hosts."
 
 #: misc.c:117
 msgid "Unable to write /etc/hosts.deny."
-msgstr ""
+msgstr "Nem sikerült írni: /etc/hosts.deny."
 
 #: misc.c:125
 msgid "Unable to write /etc/hosts.allow."
-msgstr ""
+msgstr "Nem sikerült írni: /etc/hosts.allow."
 
 #: misc.c:136
 msgid "Unable to set hostname."
-msgstr ""
+msgstr "A kiszolgálónév beállítása sikertelen."
 
 #: misc.c:147
 msgid "Scanning and configuring ISDN devices."
-msgstr ""
+msgstr "ISDN eszközök keresése és beállítása."
 
 #: misc.c:148
 msgid "Unable to scan for ISDN devices."
-msgstr ""
+msgstr "Az ISDN eszközök felkutatása sikertelen."
 
 #: netstuff.c:86
 #, c-format
 msgid "Interface - %s"
-msgstr ""
+msgstr "Adapter - %s"
 
 #: netstuff.c:91
 #, c-format
 msgid "Enter the IP address information for the %s interface."
-msgstr ""
+msgstr "Add meg az IP cím beállításait a következő eszközhöz: %s"
 
 #: netstuff.c:103
 msgid "Static"
-msgstr ""
+msgstr "Statikus"
 
 #: netstuff.c:104
 msgid "DHCP"
-msgstr ""
+msgstr "DHCP"
 
 #: netstuff.c:105
 msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
-msgstr ""
+msgstr "PPP betárcsázás (PPPoE, modem, ATM ...)"
 
 #: netstuff.c:113
 msgid "DHCP Hostname:"
-msgstr ""
+msgstr "DHCP kiszolgálónév:"
 
 #: netstuff.c:115
 msgid "Force DHCP MTU:"
-msgstr ""
+msgstr "Kényszerített DHCP MTU:"
 
 #: netstuff.c:134
 msgid "IP address:"
-msgstr ""
+msgstr "IP cím:"
 
 #: netstuff.c:146
 msgid "Network mask:"
-msgstr ""
+msgstr "Hálózati maszk:"
 
 #: netstuff.c:173 networking.c:749
 msgid "The following fields are invalid:"
-msgstr ""
+msgstr "A következő mezők érvénytelenek:"
 
 #: netstuff.c:183
 msgid "IP address"
-msgstr ""
+msgstr "IP cím"
 
 #: netstuff.c:189
 msgid "Network mask"
-msgstr ""
+msgstr "Hálózati maszk"
 
 #: netstuff.c:198
 msgid "DHCP hostname"
-msgstr ""
+msgstr "DHCP kiszolgálónév"
 
 #: netstuff.c:396 netstuff.c:709
 msgid "Unset"
-msgstr ""
+msgstr "Kijelölés törlése"
 
 #: netstuff.c:669
 #, c-format
 msgid "Please choose a networkcard for the following interface - %s."
-msgstr ""
+msgstr "Válassz egy eszközt ehhez: %s."
 
 #: netstuff.c:672
 msgid "Extended Network Menu"
-msgstr ""
+msgstr "Kibővített Hálózati Menü"
 
 #: netstuff.c:673 networking.c:520
 msgid "Select"
-msgstr ""
+msgstr "Kiválaszt"
 
 #: netstuff.c:673
 msgid "Identify"
-msgstr ""
+msgstr "Azonosít"
 
 #: netstuff.c:678
 msgid "Device Identification"
-msgstr ""
+msgstr "Eszköz azonosító"
 
 #: netstuff.c:678
 msgid "The lights on the selected port should flash now for 10 seconds..."
-msgstr ""
+msgstr "A kiválasztott porton a visszajelző fény 10 másodpercig villog..."
 
 #: netstuff.c:679
 msgid "Identification is not supported by this interface."
-msgstr ""
+msgstr "Az azonosítást nem támogatja ez az eszköz."
 
 #: netstuff.c:691
 msgid "There are no unassigned interfaces on your system."
-msgstr ""
+msgstr "Nincsenek ki nem választott eszközeid."
 
 #: netstuff.c:732
 #, c-format
 msgid "Do you really want to remove the assigned %s interface?"
-msgstr ""
+msgstr "Biztos, hogy eltávolítod a %s eszköz hozzárendelését?"
 
 #: netstuff.c:755
 msgid "Select network driver"
-msgstr ""
+msgstr "Hálózati vezérlő kiválasztása"
 
 #: netstuff.c:755
 msgid "Set additional module parameters"
-msgstr ""
+msgstr "További paraméterek megadása a modulhoz"
 
 #: netstuff.c:762
 msgid "Loading module..."
-msgstr ""
+msgstr "Modul betöltése..."
 
 #: netstuff.c:777
 msgid "Unable to load driver module."
-msgstr ""
+msgstr "A vezérlő betöltése sikertelen."
 
 #: netstuff.c:780
 msgid "Module name cannot be blank."
-msgstr ""
+msgstr "A modulnév nem lehet üres."
 
 #: networking.c:110
 msgid "Stopping network..."
-msgstr ""
+msgstr "Hálózat leállítása..."
 
 #: networking.c:115
 msgid "Restarting network..."
-msgstr ""
+msgstr "Hálózat újraindítása..."
 
 #: networking.c:146
 msgid "No GREEN interface assigned."
-msgstr ""
+msgstr "Nincs ZÖLD eszköz kiválasztva."
 
 #: networking.c:152
 msgid "Missing an IP address on GREEN."
-msgstr ""
+msgstr "IP cím nincs hozzárendelve a ZÖLD eszközhöz."
 
 #: networking.c:163
 msgid "Error"
-msgstr ""
+msgstr "Hiba"
 
 #: networking.c:163
 msgid "Ignore"
-msgstr ""
+msgstr "Kihagyás"
 
 #: networking.c:164
 msgid "No RED interface assigned."
-msgstr ""
+msgstr "Nincs VÖRÖS eszköz hozzárendelve."
 
 #: networking.c:173
 msgid "Missing an IP address on RED."
-msgstr ""
+msgstr "IP cím nincs hozzárendelve a VÖRÖS eszközhöz."
 
 #: networking.c:183
 msgid "No ORANGE interface assigned."
-msgstr ""
+msgstr "Nincs NARACS eszköz kiválasztva."
 
 #: networking.c:189
 msgid "Missing an IP address on ORANGE."
-msgstr ""
+msgstr "IP cím nincs hozzárendelve a NARANCS eszközhöz."
 
 #: networking.c:199
 msgid "No BLUE interface assigned."
-msgstr ""
+msgstr "Nincs KÉK eszköz kiválasztva."
 
 #: networking.c:205
 msgid "Missing an IP address on BLUE."
-msgstr ""
+msgstr "IP cím nincs hozzárendelve a KÉK eszközhöz."
 
 #: networking.c:217
 msgid "Misssing DNS."
-msgstr ""
+msgstr "Nincs beállított DNS."
 
 #: networking.c:224
 msgid "Missing Default Gateway."
-msgstr ""
+msgstr "Nincs megadva alapértelmezett átjáró."
 
 #: networking.c:237 networking.c:304
 msgid "Network configuration type"
-msgstr ""
+msgstr "Hálózati csatlakozás típusa"
 
 #: networking.c:238 networking.c:409
 msgid "Drivers and card assignments"
-msgstr ""
+msgstr "Vezérlők és eszközök hozzárendelése"
 
 #: networking.c:239 networking.c:640
 msgid "Address settings"
-msgstr ""
+msgstr "Címbeállítások"
 
 #: networking.c:240 networking.c:743
 msgid "DNS and Gateway settings"
-msgstr ""
+msgstr "DNS és átjáró beállítások"
 
 #: networking.c:260
 msgid "When configuration is complete, a network restart will be required."
-msgstr ""
+msgstr "A beállítások végeztével a hálózat újraindítása szükséges."
 
 #: networking.c:267
 #, c-format
@@ -439,15 +440,15 @@ msgid ""
 "Current config: %s\n"
 "\n"
 "%s"
-msgstr ""
+msgstr "Aktuális beállítás: %s\n\n%s"
 
 #: networking.c:268
 msgid "Network configuration menu"
-msgstr ""
+msgstr "Hálózatbeállítás menü"
 
 #: networking.c:269 networking.c:520 networking.c:642
 msgid "Done"
-msgstr ""
+msgstr "Kész"
 
 #: networking.c:300
 #, c-format
@@ -456,7 +457,7 @@ msgid ""
 "list those interfaces which have ethernet attached. If you change this "
 "setting, a network restart will be required, and you will have to "
 "reconfigure the network driver assignments."
-msgstr ""
+msgstr "Válaszd ki a hálózati beállításokat a következőhöz: %s. A következő konfigurációs beállításoknál megadhatod a hálózattípusokat. Amennyiben megváltoztatod ezeket a beállításokat, a hálózatot újra kell indítani és esetleg megváltoztatni a hozzárendeléseket."
 
 #: networking.c:307
 #, c-format
@@ -464,35 +465,35 @@ msgid ""
 "Not enough netcards for your choice.\n"
 "\n"
 "Needed: %d - Available: %d\n"
-msgstr ""
+msgstr "Nincs elegendő eszköz a kért beállításhoz.\n\nSzükséges: %d - Elérhető: %d\n"
 
 #: networking.c:359
 msgid ""
 "Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
 "\n"
-msgstr ""
+msgstr "Hálózati vezérlők beállítása, hogy mi mihez legyen rendelve. Az aktuális beállítás a következő:\n\n"
 
 #: networking.c:408
 msgid "Do you wish to change these settings?"
-msgstr ""
+msgstr "Biztosan megváltoztatod ezeket a beállításokat?"
 
 #: networking.c:447
 msgid "Restarting non-local network..."
-msgstr ""
+msgstr "A nem helyi hálózat újraindítása..."
 
 #: networking.c:464
 msgid ""
 "Please choose the interface you wish to change.\n"
 "\n"
-msgstr ""
+msgstr "Válaszd ki a módosítandó eszközt.\n\n"
 
 #: networking.c:519
 msgid "Assigned Cards"
-msgstr ""
+msgstr "Hozzárendelt eszközök"
 
 #: networking.c:520
 msgid "Remove"
-msgstr ""
+msgstr "Eltávolít"
 
 #: networking.c:556 networking.c:649
 #, c-format
@@ -501,84 +502,84 @@ msgid ""
 "connection to the %s machine will be broken, and you will have to reconnect "
 "on the new IP. This is a risky operation, and should only be attempted if "
 "you have physical access to the machine, should something go wrong."
-msgstr ""
+msgstr "Amennyiben megváltoztatod ezt az IP-t és távolról vagy bejelentkezve, a kapcsolatod a %s géphez meg fog szakadni és újra kell kapcsolódnod az új IP-vel. Ez egy kockázatos beállítás, ezért ajánlott, hogy fizikálisan hozzáférj a géphez, ha valami probléma merülne fel."
 
 #: networking.c:641
 msgid "Select the interface you wish to reconfigure."
-msgstr ""
+msgstr "Válaszd ki a beállítandó eszközt az újrakonfiguráláshoz."
 
 #: networking.c:729
 msgid "Default gateway:"
-msgstr ""
+msgstr "Alapértelmezett átjáró:"
 
 #: networking.c:744
 msgid ""
 "Enter the DNS and gateway information. These settings are used only with "
 "Static IP (and DHCP if DNS set) on the RED interface."
-msgstr ""
+msgstr "DNS és átjáró beállítások megadása. Ezek a beállítások a VÖRÖS csatlakozó statikus IP (és DHCP, ha DNS van megadva) beállításainál érvényesek."
 
 #: networking.c:773
 msgid "Default gateway"
-msgstr ""
+msgstr "Alapértelmezett átjáró"
 
 #: networking.c:780
 msgid "Secondary DNS specified without a Primary DNS"
-msgstr ""
+msgstr "Másodlagos DNS beállítva elsődleges DNS nélkül"
 
 #: passwords.c:33
 msgid ""
 "Enter the 'root' user password. Login as this user for commandline access."
-msgstr ""
+msgstr "Add meg a 'root' jelszót. A konzolon keresztül tudsz bejelentkezni vele."
 
 #: passwords.c:38 passwords.c:61
 msgid "Setting password"
-msgstr ""
+msgstr "Jelszó beállítása"
 
 #: passwords.c:38
 msgid "Setting 'root' password...."
-msgstr ""
+msgstr "A 'root' jelszó beállítása..."
 
 #: passwords.c:39
 msgid "Problem setting 'root' password."
-msgstr ""
+msgstr "A 'root' jelszó beállítása sikertelen."
 
 #: passwords.c:53
 #, c-format
 msgid ""
 "Enter %s 'admin' user password. This is the user to use for logging into the"
 " %s web administration pages."
-msgstr ""
+msgstr "Add meg az %s 'admin' jelszót. A %s webes felületen keresztül tudsz bejelentkezni vele."
 
 #: passwords.c:60
 #, c-format
 msgid "Setting %s 'admin' user password..."
-msgstr ""
+msgstr "A %s 'root' jelszó beállítása..."
 
 #: passwords.c:62
 #, c-format
 msgid "Problem setting %s 'admin' user password."
-msgstr ""
+msgstr "Probléma a %s 'root' jelszó beállításánál..."
 
 #: passwords.c:76
 msgid "Password:"
-msgstr ""
+msgstr "Jelszó:"
 
 #: passwords.c:77
 msgid "Again:"
-msgstr ""
+msgstr "Ismét:"
 
 #: passwords.c:95
 msgid "Password cannot be blank."
-msgstr ""
+msgstr "A jelszó nem lehet üres."
 
 #: passwords.c:102
 msgid "Passwords do not match."
-msgstr ""
+msgstr "A jelszavak nem egyeznek meg."
 
 #: passwords.c:109
 msgid "Password cannot contain spaces."
-msgstr ""
+msgstr "A jelszó nem tartalmazhat szóközt."
 
 #: timezone.c:77
 msgid "Choose the timezone you are in from the list below."
-msgstr ""
+msgstr "Válaszd ki az időzónád a listából."
index 89c6c582e33a55d15afd1e739dc122fd82d81513..58032c4934a9baf1ee0575a79170a913267f9653 100644 (file)
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
-"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"PO-Revision-Date: 2017-08-03 19:28+0000\n"
 "Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
-"Language-Team: Indonesian (http://www.transifex.com/projects/p/ipfire/language/id/)\n"
+"Language-Team: Indonesian (http://www.transifex.com/mstremer/ipfire/language/id/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index 778a65ee3652cafb774fa36369ba2ed4e09f0845..3ebbe0b6fd9b3638f870e74c89610c7a34360e9a 100644 (file)
@@ -10,9 +10,9 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
-"PO-Revision-Date: 2014-09-30 13:22+0000\n"
+"PO-Revision-Date: 2017-09-20 09:45+0000\n"
 "Last-Translator: Mario <mc9085@mclink.it>\n"
-"Language-Team: Italian (http://www.transifex.com/projects/p/ipfire/language/it/)\n"
+"Language-Team: Italian (http://www.transifex.com/mstremer/ipfire/language/it/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index 69c24c1197712bac8bc7cec0e500a4f117f5c887..52bc7cfcbb5e347511452fe4bda9d22cb6c84278 100644 (file)
@@ -3,14 +3,15 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# Ronny Heinrich <heinrich@matsumoto-wadokueikyoushitsu.com>, 2016
 msgid ""
 msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
-"PO-Revision-Date: 2014-08-21 15:13+0000\n"
-"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
-"Language-Team: Japanese (http://www.transifex.com/projects/p/ipfire/language/ja/)\n"
+"PO-Revision-Date: 2017-09-20 09:45+0000\n"
+"Last-Translator: Ronny Heinrich <heinrich@matsumoto-wadokueikyoushitsu.com>\n"
+"Language-Team: Japanese (http://www.transifex.com/mstremer/ipfire/language/ja/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -19,31 +20,31 @@ msgstr ""
 
 #: dhcp.c:50
 msgid "Start address:"
-msgstr ""
+msgstr "スタート・アドレス:"
 
 #: dhcp.c:51
 msgid "End address:"
-msgstr ""
+msgstr "最後のアドレス:"
 
 #: dhcp.c:52 networking.c:717
 msgid "Primary DNS:"
-msgstr ""
+msgstr "一次のDNS:"
 
 #: dhcp.c:53 networking.c:723
 msgid "Secondary DNS:"
-msgstr ""
+msgstr "二次のDNS:"
 
 #: dhcp.c:54
 msgid "Default lease (mins):"
-msgstr ""
+msgstr "デフォルト・リース(mins):"
 
 #: dhcp.c:55
 msgid "Max lease (mins):"
-msgstr ""
+msgstr "最高のリース(mins):"
 
 #: dhcp.c:56
 msgid "Domain name suffix:"
-msgstr ""
+msgstr "ドメイン名サフィックス:"
 
 #: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70
 #: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704
@@ -51,19 +52,19 @@ msgstr ""
 #: networking.c:442 networking.c:552 networking.c:603 networking.c:610
 #: networking.c:713 timezone.c:63
 msgid "Unable to open settings file"
-msgstr ""
+msgstr "設定ファイルが開けませんでした。"
 
 #: dhcp.c:111
 msgid "DHCP server configuration"
-msgstr ""
+msgstr "DHCPサーバー設定"
 
 #: dhcp.c:116
 msgid "Configure the DHCP server by entering the settings information."
-msgstr ""
+msgstr "設定情報の記入する方法で、DHCPサーバーを設定して下さい。"
 
 #: dhcp.c:125
 msgid "Enabled"
-msgstr ""
+msgstr "有効"
 
 #: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172
 #: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163
@@ -71,367 +72,367 @@ msgstr ""
 #: networking.c:642 networking.c:653 networking.c:746 passwords.c:89
 #: timezone.c:78
 msgid "OK"
-msgstr ""
+msgstr "OK"
 
 #: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158
 #: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305
 #: networking.c:410 networking.c:560 networking.c:653 networking.c:746
 #: passwords.c:89 timezone.c:78
 msgid "Cancel"
-msgstr ""
+msgstr "キャンセル"
 
 #: dhcp.c:156
 msgid ""
 "The following fields are invalid:\n"
 "\n"
-msgstr ""
+msgstr "下記のフィールドが無効です:\n\n"
 
 #: dhcp.c:159
 msgid "Start address"
-msgstr ""
+msgstr "スタート・アドレス"
 
 #: dhcp.c:165
 msgid "End address"
-msgstr ""
+msgstr "最後のアドレス"
 
 #: dhcp.c:173 networking.c:755
 msgid "Primary DNS"
-msgstr ""
+msgstr "一次のDNS"
 
 #: dhcp.c:182 networking.c:764
 msgid "Secondary DNS"
-msgstr ""
+msgstr "二次のDNS"
 
 #: dhcp.c:189
 msgid "Default lease time"
-msgstr ""
+msgstr "デフォルト・リース・タイム"
 
 #: dhcp.c:195
 msgid "Max. lease time"
-msgstr ""
+msgstr "最高のリース・タイム"
 
 #: domainname.c:42 main.c:70
 msgid "Domain name"
-msgstr ""
+msgstr "ドメイン名"
 
 #: domainname.c:42
 msgid "Enter Domain name"
-msgstr ""
+msgstr "ドメイン名を記入して下さい"
 
 #: domainname.c:48
 msgid "Domain name cannot be empty."
-msgstr ""
+msgstr "空ドメイン名が禁止です。"
 
 #: domainname.c:50
 msgid "Domain name cannot contain spaces."
-msgstr ""
+msgstr "スペースが含んでいるドメイン名が禁止です。"
 
 #: domainname.c:53
 msgid "Domain name may only contain letters, numbers, hyphens and periods."
-msgstr ""
+msgstr "ドメイン名は文字、数字、ハイフォン及びペリオドが許可されています。"
 
 #: hostname.c:46 main.c:69
 msgid "Hostname"
-msgstr ""
+msgstr "ホスト名"
 
 #: hostname.c:46
 msgid "Enter the machine's hostname."
-msgstr ""
+msgstr "機器のホスト名を記入して下さい。"
 
 #: hostname.c:53
 msgid "Hostname cannot be empty."
-msgstr ""
+msgstr "空ホスト名が禁止です。"
 
 #: hostname.c:55
 msgid "Hostname cannot contain spaces."
-msgstr ""
+msgstr "スペースが含んでいるホスト名が禁止です。"
 
 #: hostname.c:58
 msgid "Hostname may only contain letters, numbers and hyphens."
-msgstr ""
+msgstr "ホスト名は文字、数字、ハイフォン及びペリオドが許可されています。"
 
 #: keymap.c:84 main.c:67
 msgid "Keyboard mapping"
-msgstr ""
+msgstr "キーボード・マッピング"
 
 #: keymap.c:85
 msgid "Choose the type of keyboard you are using from the list below."
-msgstr ""
+msgstr "下記のリスてから使用したいキーボードを選んで下さい。"
 
 #: main.c:68 timezone.c:77
 msgid "Timezone"
-msgstr ""
+msgstr "時間帯"
 
 #: main.c:71 networking.c:110 networking.c:115 networking.c:447
 msgid "Networking"
-msgstr ""
+msgstr "ネットワーキング"
 
 #: main.c:72 misc.c:147
 msgid "ISDN"
-msgstr ""
+msgstr "ISDN"
 
 #: main.c:73
 msgid "'root' password"
-msgstr ""
+msgstr "'root'のパスワード"
 
 #: main.c:74
 msgid "'admin' password"
-msgstr ""
+msgstr "'管理者'のパスワード"
 
 #: main.c:90
 msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
-msgstr ""
+msgstr "              <Tab>/<Alt-Tab> エレメントの間   |  <Space> 選択"
 
 #: main.c:97
 msgid "Section menu"
-msgstr ""
+msgstr "メニューのセクション"
 
 #: main.c:98
 msgid "Select the item you wish to configure."
-msgstr ""
+msgstr "設定したいアイテムを選んで下さい。"
 
 #: main.c:99
 msgid "Quit"
-msgstr ""
+msgstr "終了"
 
 #: main.c:172
 msgid "Setup is complete."
-msgstr ""
+msgstr "設定が終了しました。"
 
 #: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
 msgid "Warning"
-msgstr ""
+msgstr "警報"
 
 #: main.c:175
 msgid ""
 "Initial setup was not entirely complete. You must ensure that Setup is "
 "properly finished by running setup again at the shell."
-msgstr ""
+msgstr "初期設定は正規に終了しませんでした。もう一度コンソールで初期設定を実行して、正規に終了になるか確認することが必要です。"
 
 #: misc.c:62
 #, c-format
 msgid "Unable to write %s/main/hostname.conf"
-msgstr ""
+msgstr "%s/main/hostname.confを書き込むことが出来ませんでした。"
 
 #: misc.c:71
 msgid "Unable to open main hosts file."
-msgstr ""
+msgstr "ホストのファイルが開けませんでした。"
 
 #: misc.c:76
 msgid "Unable to write /etc/hosts."
-msgstr ""
+msgstr "/etc/hostsを書き込むことが出来ませんでした。"
 
 #: misc.c:117
 msgid "Unable to write /etc/hosts.deny."
-msgstr ""
+msgstr "/etc/hosts.denyを書き込むことが出来ませんでした。"
 
 #: misc.c:125
 msgid "Unable to write /etc/hosts.allow."
-msgstr ""
+msgstr "/etc/hosts.allowを書き込むことが出来ませんでした。"
 
 #: misc.c:136
 msgid "Unable to set hostname."
-msgstr ""
+msgstr "ホスト名が設定出来ませんでした。"
 
 #: misc.c:147
 msgid "Scanning and configuring ISDN devices."
-msgstr ""
+msgstr "ISDN機器をスキャン及び設定しています。"
 
 #: misc.c:148
 msgid "Unable to scan for ISDN devices."
-msgstr ""
+msgstr "ISDN機器がスキャン出来ません。"
 
 #: netstuff.c:86
 #, c-format
 msgid "Interface - %s"
-msgstr ""
+msgstr "インタフェース ー %s"
 
 #: netstuff.c:91
 #, c-format
 msgid "Enter the IP address information for the %s interface."
-msgstr ""
+msgstr "%sはインタフェースのIPアドレス情報を記入して下さい。"
 
 #: netstuff.c:103
 msgid "Static"
-msgstr ""
+msgstr "固定"
 
 #: netstuff.c:104
 msgid "DHCP"
-msgstr ""
+msgstr "DHCP"
 
 #: netstuff.c:105
 msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
-msgstr ""
+msgstr "PPP ダイヤル・アップ(PPPoE, モーデム, ATMなど)"
 
 #: netstuff.c:113
 msgid "DHCP Hostname:"
-msgstr ""
+msgstr "DHCPホスト名:"
 
 #: netstuff.c:115
 msgid "Force DHCP MTU:"
-msgstr ""
+msgstr "DHCP MTUの制御:"
 
 #: netstuff.c:134
 msgid "IP address:"
-msgstr ""
+msgstr "IPアドレス:"
 
 #: netstuff.c:146
 msgid "Network mask:"
-msgstr ""
+msgstr "ネットワーク・マスク:"
 
 #: netstuff.c:173 networking.c:749
 msgid "The following fields are invalid:"
-msgstr ""
+msgstr "下記のフィールドが無効です:"
 
 #: netstuff.c:183
 msgid "IP address"
-msgstr ""
+msgstr "IPアドレス"
 
 #: netstuff.c:189
 msgid "Network mask"
-msgstr ""
+msgstr "ネットワーク・マスク"
 
 #: netstuff.c:198
 msgid "DHCP hostname"
-msgstr ""
+msgstr "DHCPホスト名"
 
 #: netstuff.c:396 netstuff.c:709
 msgid "Unset"
-msgstr ""
+msgstr "はめ込んでない"
 
 #: netstuff.c:669
 #, c-format
 msgid "Please choose a networkcard for the following interface - %s."
-msgstr ""
+msgstr "下記のインタフェースにネットワーク・カードを選んで下さい ー %s。"
 
 #: netstuff.c:672
 msgid "Extended Network Menu"
-msgstr ""
+msgstr "拡張ネットワーク・メニュー"
 
 #: netstuff.c:673 networking.c:520
 msgid "Select"
-msgstr ""
+msgstr "選択"
 
 #: netstuff.c:673
 msgid "Identify"
-msgstr ""
+msgstr "アイデンティティ"
 
 #: netstuff.c:678
 msgid "Device Identification"
-msgstr ""
+msgstr "機器確認"
 
 #: netstuff.c:678
 msgid "The lights on the selected port should flash now for 10 seconds..."
-msgstr ""
+msgstr "選択したポートでのLEDは10秒間に点滅しているはずです・・・"
 
 #: netstuff.c:679
 msgid "Identification is not supported by this interface."
-msgstr ""
+msgstr "このインタフェースは確認がサポートしません。"
 
 #: netstuff.c:691
 msgid "There are no unassigned interfaces on your system."
-msgstr ""
+msgstr "システム内、アサインしていないインタフェースがありません。"
 
 #: netstuff.c:732
 #, c-format
 msgid "Do you really want to remove the assigned %s interface?"
-msgstr ""
+msgstr "本当にアサイン済の %s インタフェースを解除してほしいですか。"
 
 #: netstuff.c:755
 msgid "Select network driver"
-msgstr ""
+msgstr "ネットワーク・ドライバーを選んで下さい。"
 
 #: netstuff.c:755
 msgid "Set additional module parameters"
-msgstr ""
+msgstr "モジュールの追加パラメーターを設定してください。"
 
 #: netstuff.c:762
 msgid "Loading module..."
-msgstr ""
+msgstr "モジュールをロードしています・・・"
 
 #: netstuff.c:777
 msgid "Unable to load driver module."
-msgstr ""
+msgstr "ドライバー・モジュールがロード出来ませんでした。"
 
 #: netstuff.c:780
 msgid "Module name cannot be blank."
-msgstr ""
+msgstr "空モジュール名が禁止です。"
 
 #: networking.c:110
 msgid "Stopping network..."
-msgstr ""
+msgstr "ネットワークを停止しています。。。"
 
 #: networking.c:115
 msgid "Restarting network..."
-msgstr ""
+msgstr "ネットワークを再起動しています・・・"
 
 #: networking.c:146
 msgid "No GREEN interface assigned."
-msgstr ""
+msgstr "GREENインタフェースがアサインしていません。"
 
 #: networking.c:152
 msgid "Missing an IP address on GREEN."
-msgstr ""
+msgstr "GREENのIPが登録していません。"
 
 #: networking.c:163
 msgid "Error"
-msgstr ""
+msgstr "エラー"
 
 #: networking.c:163
 msgid "Ignore"
-msgstr ""
+msgstr "顧みない"
 
 #: networking.c:164
 msgid "No RED interface assigned."
-msgstr ""
+msgstr "REDインタフェースがアサインしていません。"
 
 #: networking.c:173
 msgid "Missing an IP address on RED."
-msgstr ""
+msgstr "REDのIPが登録していません。"
 
 #: networking.c:183
 msgid "No ORANGE interface assigned."
-msgstr ""
+msgstr "ORANGEインタフェースがアサインしていません。"
 
 #: networking.c:189
 msgid "Missing an IP address on ORANGE."
-msgstr ""
+msgstr "ORANGEのIPが登録していません。"
 
 #: networking.c:199
 msgid "No BLUE interface assigned."
-msgstr ""
+msgstr "BLUEインタフェースがアサインしていません。"
 
 #: networking.c:205
 msgid "Missing an IP address on BLUE."
-msgstr ""
+msgstr "BLUEのIPが登録していません。"
 
 #: networking.c:217
 msgid "Misssing DNS."
-msgstr ""
+msgstr "DNSが登録していません。"
 
 #: networking.c:224
 msgid "Missing Default Gateway."
-msgstr ""
+msgstr "デフォルト・ゲートウェイが登録していません。"
 
 #: networking.c:237 networking.c:304
 msgid "Network configuration type"
-msgstr ""
+msgstr "ネットワーク設定タイプ"
 
 #: networking.c:238 networking.c:409
 msgid "Drivers and card assignments"
-msgstr ""
+msgstr "ドライバー及びカードのアサイン"
 
 #: networking.c:239 networking.c:640
 msgid "Address settings"
-msgstr ""
+msgstr "アドレス設定"
 
 #: networking.c:240 networking.c:743
 msgid "DNS and Gateway settings"
-msgstr ""
+msgstr "DNS及びゲートウェイ設定"
 
 #: networking.c:260
 msgid "When configuration is complete, a network restart will be required."
-msgstr ""
+msgstr "設定が終了しましたら、ネットワークの再起動が必要となります。"
 
 #: networking.c:267
 #, c-format
@@ -439,15 +440,15 @@ msgid ""
 "Current config: %s\n"
 "\n"
 "%s"
-msgstr ""
+msgstr "現在の設定: %s\n\n%s"
 
 #: networking.c:268
 msgid "Network configuration menu"
-msgstr ""
+msgstr "ネットワーク設定のメニュー"
 
 #: networking.c:269 networking.c:520 networking.c:642
 msgid "Done"
-msgstr ""
+msgstr "終了"
 
 #: networking.c:300
 #, c-format
@@ -456,7 +457,7 @@ msgid ""
 "list those interfaces which have ethernet attached. If you change this "
 "setting, a network restart will be required, and you will have to "
 "reconfigure the network driver assignments."
-msgstr ""
+msgstr "%sのネットワーク設定を選んで下さい。下記の設定タイプはイーサネットが付けたインタフェースを表示しています。この設定を変更すると、ネットワークの再起動が必要となり、既にアサインしたネットワーク・ドライバーの再設定も必要となります。"
 
 #: networking.c:307
 #, c-format
@@ -464,35 +465,35 @@ msgid ""
 "Not enough netcards for your choice.\n"
 "\n"
 "Needed: %d - Available: %d\n"
-msgstr ""
+msgstr "ネットワーク・カードが不足です。\n\n必要:%d ー 設置した:%d\n"
 
 #: networking.c:359
 msgid ""
 "Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
 "\n"
-msgstr ""
+msgstr "ネットワーク・カードにアサインしたインタフェース及びネットワーク・ドライバーを設定します。現在の設定は:\n\n"
 
 #: networking.c:408
 msgid "Do you wish to change these settings?"
-msgstr ""
+msgstr "この設定を変更したいですか。"
 
 #: networking.c:447
 msgid "Restarting non-local network..."
-msgstr ""
+msgstr "非ローカル・ネットワークを再起動しています・・・"
 
 #: networking.c:464
 msgid ""
 "Please choose the interface you wish to change.\n"
 "\n"
-msgstr ""
+msgstr "変更したいインタフェースを選んで下さい。\n\n"
 
 #: networking.c:519
 msgid "Assigned Cards"
-msgstr ""
+msgstr "アサインしたネットワーク・カード"
 
 #: networking.c:520
 msgid "Remove"
-msgstr ""
+msgstr "解除"
 
 #: networking.c:556 networking.c:649
 #, c-format
@@ -501,84 +502,84 @@ msgid ""
 "connection to the %s machine will be broken, and you will have to reconnect "
 "on the new IP. This is a risky operation, and should only be attempted if "
 "you have physical access to the machine, should something go wrong."
-msgstr ""
+msgstr "このIPアドレスを変更すると、リモートでログインしている場合、%sの機器との接続が外れますので、新IPアドレスでの再接続が必要となります。それが危険ですので、変なことになったら機器と物理的なアクセスができる場合のみ行ったほうがよいです。"
 
 #: networking.c:641
 msgid "Select the interface you wish to reconfigure."
-msgstr ""
+msgstr "再設定したいインタフェースを選んで下さい。"
 
 #: networking.c:729
 msgid "Default gateway:"
-msgstr ""
+msgstr "デフォルト・ゲートウェイ:"
 
 #: networking.c:744
 msgid ""
 "Enter the DNS and gateway information. These settings are used only with "
 "Static IP (and DHCP if DNS set) on the RED interface."
-msgstr ""
+msgstr "DNS及びゲートウェイの情報を記入して下さい。この設定はREDインタフェースの固定IP(DNSが設定した場合DHCPも)のみ使用となります。"
 
 #: networking.c:773
 msgid "Default gateway"
-msgstr ""
+msgstr "デフォルト・ゲートウェイ"
 
 #: networking.c:780
 msgid "Secondary DNS specified without a Primary DNS"
-msgstr ""
+msgstr "二次のDNSが登録したが、一次のDNSが登録していません。"
 
 #: passwords.c:33
 msgid ""
 "Enter the 'root' user password. Login as this user for commandline access."
-msgstr ""
+msgstr "'root'のユーザー・パスワードを記入して下さい。コマンド行・アクセスの為、このユーザーとしてログインして下さい。"
 
 #: passwords.c:38 passwords.c:61
 msgid "Setting password"
-msgstr ""
+msgstr "パスワードの設定"
 
 #: passwords.c:38
 msgid "Setting 'root' password...."
-msgstr ""
+msgstr "'root'のパスワードを設定しています・・・"
 
 #: passwords.c:39
 msgid "Problem setting 'root' password."
-msgstr ""
+msgstr "'root'のパスワードが設定出来ませんでした。"
 
 #: passwords.c:53
 #, c-format
 msgid ""
 "Enter %s 'admin' user password. This is the user to use for logging into the"
 " %s web administration pages."
-msgstr ""
+msgstr "%sの'管理者'のユーザー・パスワードを記入して下さい。%sのウェッブ管理ページにログインする為のユーザーです。"
 
 #: passwords.c:60
 #, c-format
 msgid "Setting %s 'admin' user password..."
-msgstr ""
+msgstr "%sの'管理者' ユーザー・パスワードを設定しています・・・"
 
 #: passwords.c:62
 #, c-format
 msgid "Problem setting %s 'admin' user password."
-msgstr ""
+msgstr "%sの'管理者' ユーザー・パスワードが設定出来ませんでした。"
 
 #: passwords.c:76
 msgid "Password:"
-msgstr ""
+msgstr "パスワード:"
 
 #: passwords.c:77
 msgid "Again:"
-msgstr ""
+msgstr "もう一度:"
 
 #: passwords.c:95
 msgid "Password cannot be blank."
-msgstr ""
+msgstr "空パスワードが禁止です。"
 
 #: passwords.c:102
 msgid "Passwords do not match."
-msgstr ""
+msgstr "パスワードが違いました。"
 
 #: passwords.c:109
 msgid "Password cannot contain spaces."
-msgstr ""
+msgstr "スペースが含んでいるパスワードが禁止です。"
 
 #: timezone.c:77
 msgid "Choose the timezone you are in from the list below."
-msgstr ""
+msgstr "下記のリストから、住んでいる時間帯を選んで下さい。"
index e8a7e898b66b036a3ab7e1fae8a03c587bc07e4d..592130f0c7545b5dbd106c9ca39814dd986c2464 100644 (file)
@@ -10,7 +10,7 @@ msgstr ""
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
 "PO-Revision-Date: 2014-08-12 10:08+0000\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: Javanese (http://www.transifex.com/projects/p/ipfire/language/jv/)\n"
+"Language-Team: Javanese (http://www.transifex.com/mstremer/ipfire/language/jv/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index 4d5c1002a554921868e017e96fdd7a77802e7e1f..3c6424fab10cc36a82d5ca0e25c0ebf1f147a7a7 100644 (file)
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
-"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"PO-Revision-Date: 2017-08-03 19:28+0000\n"
 "Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
-"Language-Team: Khmer (Cambodia) (http://www.transifex.com/projects/p/ipfire/language/km_KH/)\n"
+"Language-Team: Khmer (Cambodia) (http://www.transifex.com/mstremer/ipfire/language/km_KH/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index 439f50c192f0694e65e19530346136c3bcc3b48a..ebb04ea102847fc09f5bf8872ce540deb25ab7b4 100644 (file)
@@ -9,9 +9,9 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
-"PO-Revision-Date: 2015-02-03 07:00+0000\n"
+"PO-Revision-Date: 2017-09-20 09:45+0000\n"
 "Last-Translator: Jacques Hylkema <j.hylkema@intronics.nl>\n"
-"Language-Team: Dutch (http://www.transifex.com/projects/p/ipfire/language/nl/)\n"
+"Language-Team: Dutch (http://www.transifex.com/mstremer/ipfire/language/nl/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index ee6183fbcf96e4b36386f260ffd7185fa120026d..47e280a847fc59d9e795639c8607b3d62a565bf3 100644 (file)
@@ -4,20 +4,20 @@
 # 
 # Translators:
 # btelega <btelega@gmail.com>, 2014
-# Przemysław Karpeta <przemyslaw.karpeta@gmail.com>, 2014
+# Przemyslaw Ka. <przemyslaw.karpeta@gmail.com>, 2014
 msgid ""
 msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
-"PO-Revision-Date: 2014-11-03 15:36+0000\n"
-"Last-Translator: Przemysław Karpeta <przemyslaw.karpeta@gmail.com>\n"
-"Language-Team: Polish (http://www.transifex.com/projects/p/ipfire/language/pl/)\n"
+"PO-Revision-Date: 2017-09-20 09:45+0000\n"
+"Last-Translator: Przemyslaw Ka. <przemyslaw.karpeta@gmail.com>\n"
+"Language-Team: Polish (http://www.transifex.com/mstremer/ipfire/language/pl/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Language: pl\n"
-"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
 
 #: dhcp.c:50
 msgid "Start address:"
index eb408edc55d3c4f560d146bfc9d4bbfab31a9466..54e7c1ae8db48e09d332c1e96c27bb255cd4e851 100644 (file)
@@ -3,7 +3,7 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
-# douglasdiasn <douglasdiasn@gmail.com>, 2015
+# Douglas Noronha <douglasdiasn@gmail.com>, 2015
 # Evertton de Lima <e.everttonlima@gmail.com>, 2015
 # Moisés Bites Borges de Castro <moisesbites@gmail.com>, 2015
 # Rafael Tavares <rafael@ibinetwork.com.br>, 2015
@@ -12,9 +12,9 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
-"PO-Revision-Date: 2015-03-24 21:31+0000\n"
+"PO-Revision-Date: 2017-09-20 09:45+0000\n"
 "Last-Translator: Moisés Bites Borges de Castro <moisesbites@gmail.com>\n"
-"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/ipfire/language/pt_BR/)\n"
+"Language-Team: Portuguese (Brazil) (http://www.transifex.com/mstremer/ipfire/language/pt_BR/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index f75c59141b97eab12c79f65ce4b3a758639cbc14..31f103aa041b8b323f5ad04156f40a59790b44cf 100644 (file)
@@ -3,14 +3,15 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# André Pinto <andrerafaelpinto@hotmail.com>, 2015
 msgid ""
 msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
-"PO-Revision-Date: 2014-08-21 15:13+0000\n"
-"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
-"Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/ipfire/language/pt_PT/)\n"
+"PO-Revision-Date: 2017-09-20 09:45+0000\n"
+"Last-Translator: André Pinto <andrerafaelpinto@hotmail.com>\n"
+"Language-Team: Portuguese (Portugal) (http://www.transifex.com/mstremer/ipfire/language/pt_PT/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -19,19 +20,19 @@ msgstr ""
 
 #: dhcp.c:50
 msgid "Start address:"
-msgstr ""
+msgstr "Endereço Inicial:"
 
 #: dhcp.c:51
 msgid "End address:"
-msgstr ""
+msgstr "Endereço Final:"
 
 #: dhcp.c:52 networking.c:717
 msgid "Primary DNS:"
-msgstr ""
+msgstr "DNS Primário:"
 
 #: dhcp.c:53 networking.c:723
 msgid "Secondary DNS:"
-msgstr ""
+msgstr "DNS Secundário:"
 
 #: dhcp.c:54
 msgid "Default lease (mins):"
@@ -78,7 +79,7 @@ msgstr ""
 #: networking.c:410 networking.c:560 networking.c:653 networking.c:746
 #: passwords.c:89 timezone.c:78
 msgid "Cancel"
-msgstr ""
+msgstr "Cancelar"
 
 #: dhcp.c:156
 msgid ""
index 9bf182c38860f58851f37d7c17e0c860d7b43732..96627322b21fd64f122f3fae4b301bf9dcc6b1ac 100644 (file)
@@ -3,15 +3,17 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
-# Andrei Burdea <ragulka@gmail.com>, 2015
+# Andrei Bogdan Burdea <ragulka@gmail.com>, 2015
+# Constantin Razvan <tech@inteq.ro>, 2016
+# Liviu Vasies <vasies.liviu@gmail.com>, 2016
 msgid ""
 msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
-"PO-Revision-Date: 2015-01-20 09:08+0000\n"
-"Last-Translator: Andrei Burdea <ragulka@gmail.com>\n"
-"Language-Team: Romanian (Romania) (http://www.transifex.com/projects/p/ipfire/language/ro_RO/)\n"
+"PO-Revision-Date: 2017-09-20 09:45+0000\n"
+"Last-Translator: Liviu Vasies <vasies.liviu@gmail.com>\n"
+"Language-Team: Romanian (Romania) (http://www.transifex.com/mstremer/ipfire/language/ro_RO/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -20,31 +22,31 @@ msgstr ""
 
 #: dhcp.c:50
 msgid "Start address:"
-msgstr "Adresa de Inceput"
+msgstr "Adresă de început:"
 
 #: dhcp.c:51
 msgid "End address:"
-msgstr "Adresa de Final"
+msgstr "Adresă de final:"
 
 #: dhcp.c:52 networking.c:717
 msgid "Primary DNS:"
-msgstr "Primul Server de Nume - NS1"
+msgstr "DNS primar:"
 
 #: dhcp.c:53 networking.c:723
 msgid "Secondary DNS:"
-msgstr "Al Doilea Server de Nume - NS2"
+msgstr "DNS secundar:"
 
 #: dhcp.c:54
 msgid "Default lease (mins):"
-msgstr "Alocarea de baza (minute)"
+msgstr "Alocarea implicită (minute):"
 
 #: dhcp.c:55
 msgid "Max lease (mins):"
-msgstr "Alocare Maxima (minute)"
+msgstr "Alocare Maximă (minute):"
 
 #: dhcp.c:56
 msgid "Domain name suffix:"
-msgstr "Sufix Nume Domeniu"
+msgstr "Sufix Nume Domeniu:"
 
 #: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70
 #: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704
@@ -52,15 +54,15 @@ msgstr "Sufix Nume Domeniu"
 #: networking.c:442 networking.c:552 networking.c:603 networking.c:610
 #: networking.c:713 timezone.c:63
 msgid "Unable to open settings file"
-msgstr "Fisier de setari imposibil de deschis"
+msgstr "Nu se poate deschide fișierul de setări"
 
 #: dhcp.c:111
 msgid "DHCP server configuration"
-msgstr "Conficurearea serverului DHCP"
+msgstr "Configurare server DHCP"
 
 #: dhcp.c:116
 msgid "Configure the DHCP server by entering the settings information."
-msgstr "Configureaza serverul DHCP introducand informatiile de setare"
+msgstr "Configurează serverul DHCP introducând informațiile setări"
 
 #: dhcp.c:125
 msgid "Enabled"
@@ -79,33 +81,33 @@ msgstr "OK"
 #: networking.c:410 networking.c:560 networking.c:653 networking.c:746
 #: passwords.c:89 timezone.c:78
 msgid "Cancel"
-msgstr "Renunta"
+msgstr "Renunță"
 
 #: dhcp.c:156
 msgid ""
 "The following fields are invalid:\n"
 "\n"
-msgstr "Urmatoarele campuri sunt incorecte\n\n"
+msgstr "Următoarele câmpuri sunt incorecte\n\n"
 
 #: dhcp.c:159
 msgid "Start address"
-msgstr "Adresa de Inceput"
+msgstr "Adresă început"
 
 #: dhcp.c:165
 msgid "End address"
-msgstr "Adresa de Final"
+msgstr "Adresă final"
 
 #: dhcp.c:173 networking.c:755
 msgid "Primary DNS"
-msgstr "Primul Server de Nume - NS1"
+msgstr "DNS primar"
 
 #: dhcp.c:182 networking.c:764
 msgid "Secondary DNS"
-msgstr "Al Doilea Server de Nume - NS2"
+msgstr "DNS secundar"
 
 #: dhcp.c:189
 msgid "Default lease time"
-msgstr "Timpul pentru alocarea de baza"
+msgstr "Timpul pentru alocarea implicită"
 
 #: dhcp.c:195
 msgid "Max. lease time"
@@ -117,47 +119,47 @@ msgstr "Nume Domeniu"
 
 #: domainname.c:42
 msgid "Enter Domain name"
-msgstr "Introduceti Nume Domeniu"
+msgstr "Introduceți Nume Domeniu"
 
 #: domainname.c:48
 msgid "Domain name cannot be empty."
-msgstr "Nume Domeniu nu poate fi gol"
+msgstr "Nume Domeniu nu poate fi gol."
 
 #: domainname.c:50
 msgid "Domain name cannot contain spaces."
-msgstr "Nume Domeniu nu poate contine spatii"
+msgstr "Nume Domeniu nu poate conține spații."
 
 #: domainname.c:53
 msgid "Domain name may only contain letters, numbers, hyphens and periods."
-msgstr "Nume Domeniu poate contine doar litere, numere, cratime sau paranteze"
+msgstr "Nume Domeniu poate conține doar litere, numere, cratime sau paranteze."
 
 #: hostname.c:46 main.c:69
 msgid "Hostname"
-msgstr "Nume Gazda - HOST"
+msgstr "Nume Gazdă - HOST"
 
 #: hostname.c:46
 msgid "Enter the machine's hostname."
-msgstr "Introduceti Nume Gazda - HOST"
+msgstr "Introduceți Nume Gazdă - HOST."
 
 #: hostname.c:53
 msgid "Hostname cannot be empty."
-msgstr "Nume Gazda - HOST - nu poate fi gol"
+msgstr "Nume Gazdă - HOST - nu poate fi gol."
 
 #: hostname.c:55
 msgid "Hostname cannot contain spaces."
-msgstr "Nume Gazda - HOST - nu poate contine spatii"
+msgstr "Nume Gazdă - HOST - nu poate conține spații."
 
 #: hostname.c:58
 msgid "Hostname may only contain letters, numbers and hyphens."
-msgstr "Nume Gazda - HOST - poate contine doar litere, numere si cratime"
+msgstr "Nume Gazdă - HOST - poate conține doar litere, numere și cratime"
 
 #: keymap.c:84 main.c:67
 msgid "Keyboard mapping"
-msgstr "Cartografiere Tastatura - tipul de tastatura"
+msgstr "Cartografiere Tastatură - tipul de tastatură"
 
 #: keymap.c:85
 msgid "Choose the type of keyboard you are using from the list below."
-msgstr "Alegeti tipul de tastatura pe care o folositi din lista urmatoare"
+msgstr "Alegeți tipul de tastatură pe care o folosiți din lista următoare"
 
 #: main.c:68 timezone.c:77
 msgid "Timezone"
@@ -165,7 +167,7 @@ msgstr "Fus Orar"
 
 #: main.c:71 networking.c:110 networking.c:115 networking.c:447
 msgid "Networking"
-msgstr "Retea"
+msgstr "Rețea"
 
 #: main.c:72 misc.c:147
 msgid "ISDN"
@@ -181,33 +183,33 @@ msgstr "Parola pentru utilizator 'admin'"
 
 #: main.c:90
 msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
-msgstr "<Tab>/<Alt-Tab> pentru comutare intre elemente | <Space> selecteaza"
+msgstr "<Tab>/<Alt-Tab> pentru comutare între elemente | <Space> selectează"
 
 #: main.c:97
 msgid "Section menu"
-msgstr "Meniu Sectiuni"
+msgstr "Meniu Secțiuni"
 
 #: main.c:98
 msgid "Select the item you wish to configure."
-msgstr "Selectati articolul pe care doriti sa-l configurati"
+msgstr "Selectați articolul pe care doriți să-l configurați"
 
 #: main.c:99
 msgid "Quit"
-msgstr "Iesire"
+msgstr "Ieșire"
 
 #: main.c:172
 msgid "Setup is complete."
-msgstr "Setup-ul s-a incheiat"
+msgstr "Instalarea s-a încheiat."
 
 #: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
 msgid "Warning"
-msgstr "Atentie"
+msgstr "Atenție"
 
 #: main.c:175
 msgid ""
 "Initial setup was not entirely complete. You must ensure that Setup is "
 "properly finished by running setup again at the shell."
-msgstr "Setup-ul initial nu s-a finalizat. Trebuie sa va asigurati ca Setup-ul s-a incheiat corect ruland din nou operatiunea din shell."
+msgstr "Instalarea inițială nu este complet finalizată. Trebuie să te asiguri că s-a incheiat corect rulând din nou operațiunea din linia de comandă."
 
 #: misc.c:62
 #, c-format
@@ -216,223 +218,223 @@ msgstr "%s/main/hostname.conf nu a putut fi scris"
 
 #: misc.c:71
 msgid "Unable to open main hosts file."
-msgstr "fisierul principal de hosts nu a putut fi deschis"
+msgstr "Nu se poate deschide fișierul gazde (hosts)."
 
 #: misc.c:76
 msgid "Unable to write /etc/hosts."
-msgstr ""
+msgstr "Nu s-a putut scrie fisierul /etc/hosts."
 
 #: misc.c:117
 msgid "Unable to write /etc/hosts.deny."
-msgstr ""
+msgstr "Nu s-a putut scrie fisierul /etc/hosts.deny."
 
 #: misc.c:125
 msgid "Unable to write /etc/hosts.allow."
-msgstr ""
+msgstr "Nu s-a putut scrie fisierul /etc/host.allow."
 
 #: misc.c:136
 msgid "Unable to set hostname."
-msgstr ""
+msgstr "Nu s-a putut seta numele de host."
 
 #: misc.c:147
 msgid "Scanning and configuring ISDN devices."
-msgstr ""
+msgstr "Se scanează și se configurează echipamentele ISDN."
 
 #: misc.c:148
 msgid "Unable to scan for ISDN devices."
-msgstr ""
+msgstr "Nu s-au putut scana echipametele ISDN."
 
 #: netstuff.c:86
 #, c-format
 msgid "Interface - %s"
-msgstr ""
+msgstr "Interfață - %s"
 
 #: netstuff.c:91
 #, c-format
 msgid "Enter the IP address information for the %s interface."
-msgstr ""
+msgstr "Introdu adresa IP pentru interfața %s"
 
 #: netstuff.c:103
 msgid "Static"
-msgstr ""
+msgstr "Static"
 
 #: netstuff.c:104
 msgid "DHCP"
-msgstr ""
+msgstr "DHCP"
 
 #: netstuff.c:105
 msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
-msgstr ""
+msgstr "PPP DIALUP (PPPoE, modem, ATM ...)"
 
 #: netstuff.c:113
 msgid "DHCP Hostname:"
-msgstr ""
+msgstr "Nume gazdă DHCP"
 
 #: netstuff.c:115
 msgid "Force DHCP MTU:"
-msgstr ""
+msgstr "Forteaza DHCP MTU"
 
 #: netstuff.c:134
 msgid "IP address:"
-msgstr ""
+msgstr "Adresă IP:"
 
 #: netstuff.c:146
 msgid "Network mask:"
-msgstr ""
+msgstr "Mască de rețea:"
 
 #: netstuff.c:173 networking.c:749
 msgid "The following fields are invalid:"
-msgstr ""
+msgstr "Câmpurile următoare sunt incorecte:"
 
 #: netstuff.c:183
 msgid "IP address"
-msgstr ""
+msgstr "Adresă IP:"
 
 #: netstuff.c:189
 msgid "Network mask"
-msgstr ""
+msgstr "Mască de rețea"
 
 #: netstuff.c:198
 msgid "DHCP hostname"
-msgstr ""
+msgstr "Nume gazdă DHCP"
 
 #: netstuff.c:396 netstuff.c:709
 msgid "Unset"
-msgstr ""
+msgstr "Eliminare"
 
 #: netstuff.c:669
 #, c-format
 msgid "Please choose a networkcard for the following interface - %s."
-msgstr ""
+msgstr "Alege o placa de retea pentru interfata - %s."
 
 #: netstuff.c:672
 msgid "Extended Network Menu"
-msgstr ""
+msgstr "Meniu Retea Avansat"
 
 #: netstuff.c:673 networking.c:520
 msgid "Select"
-msgstr ""
+msgstr "Selectare"
 
 #: netstuff.c:673
 msgid "Identify"
-msgstr ""
+msgstr "Indentificare"
 
 #: netstuff.c:678
 msgid "Device Identification"
-msgstr ""
+msgstr "Identificare echipament"
 
 #: netstuff.c:678
 msgid "The lights on the selected port should flash now for 10 seconds..."
-msgstr ""
+msgstr "Luminile portului selectat ar trebui sa se aprinda intermitent pentru 10 secunde..."
 
 #: netstuff.c:679
 msgid "Identification is not supported by this interface."
-msgstr ""
+msgstr "Identificarea nu este suportata de catre aceasta interfata."
 
 #: netstuff.c:691
 msgid "There are no unassigned interfaces on your system."
-msgstr ""
+msgstr "Nu exista interfete disponibile in acest sistem."
 
 #: netstuff.c:732
 #, c-format
 msgid "Do you really want to remove the assigned %s interface?"
-msgstr ""
+msgstr "Esti sigur ca vrei sa elimini interfata %s alocata?"
 
 #: netstuff.c:755
 msgid "Select network driver"
-msgstr ""
+msgstr "Selectare driver retea"
 
 #: netstuff.c:755
 msgid "Set additional module parameters"
-msgstr ""
+msgstr "Setare parametrii aditionali modul"
 
 #: netstuff.c:762
 msgid "Loading module..."
-msgstr ""
+msgstr "Incarcare modul..."
 
 #: netstuff.c:777
 msgid "Unable to load driver module."
-msgstr ""
+msgstr "Nu se poate incarca modulul."
 
 #: netstuff.c:780
 msgid "Module name cannot be blank."
-msgstr ""
+msgstr "Numele modulului nu poate fi gol."
 
 #: networking.c:110
 msgid "Stopping network..."
-msgstr ""
+msgstr "Oprire retea..."
 
 #: networking.c:115
 msgid "Restarting network..."
-msgstr ""
+msgstr "Repornire retea...."
 
 #: networking.c:146
 msgid "No GREEN interface assigned."
-msgstr ""
+msgstr "Nu s-a alocat o interfata GREEN."
 
 #: networking.c:152
 msgid "Missing an IP address on GREEN."
-msgstr ""
+msgstr "Lipseste o adresa IP pentru GREEN."
 
 #: networking.c:163
 msgid "Error"
-msgstr ""
+msgstr "Eroare"
 
 #: networking.c:163
 msgid "Ignore"
-msgstr ""
+msgstr "Ignora"
 
 #: networking.c:164
 msgid "No RED interface assigned."
-msgstr ""
+msgstr "Nu s-a alocat o interfata RED."
 
 #: networking.c:173
 msgid "Missing an IP address on RED."
-msgstr ""
+msgstr "Lipseste o adresa IP pentru RED."
 
 #: networking.c:183
 msgid "No ORANGE interface assigned."
-msgstr ""
+msgstr "Nu s-a alocat o interfata ORANGE."
 
 #: networking.c:189
 msgid "Missing an IP address on ORANGE."
-msgstr ""
+msgstr "Lipseste o adresa IP pentru ORANGE."
 
 #: networking.c:199
 msgid "No BLUE interface assigned."
-msgstr ""
+msgstr "Nu s-a alocat o interfata BLUE."
 
 #: networking.c:205
 msgid "Missing an IP address on BLUE."
-msgstr ""
+msgstr "Lipseste o adresa IP pentru BLUE."
 
 #: networking.c:217
 msgid "Misssing DNS."
-msgstr ""
+msgstr "Lipseste DNS"
 
 #: networking.c:224
 msgid "Missing Default Gateway."
-msgstr ""
+msgstr "Lipseste gateway implicit."
 
 #: networking.c:237 networking.c:304
 msgid "Network configuration type"
-msgstr ""
+msgstr "Tip retea"
 
 #: networking.c:238 networking.c:409
 msgid "Drivers and card assignments"
-msgstr ""
+msgstr "Alocare drivere si placi de retea"
 
 #: networking.c:239 networking.c:640
 msgid "Address settings"
-msgstr ""
+msgstr "Setari adresa"
 
 #: networking.c:240 networking.c:743
 msgid "DNS and Gateway settings"
-msgstr ""
+msgstr "Setari DNS si gateway"
 
 #: networking.c:260
 msgid "When configuration is complete, a network restart will be required."
-msgstr ""
+msgstr "Cand configurarea va fi finalizata, o restartare a retelei va fi necesara."
 
 #: networking.c:267
 #, c-format
@@ -440,15 +442,15 @@ msgid ""
 "Current config: %s\n"
 "\n"
 "%s"
-msgstr ""
+msgstr "Configurare curenta: %s\n\n%s"
 
 #: networking.c:268
 msgid "Network configuration menu"
-msgstr ""
+msgstr "Meniu configurare retea"
 
 #: networking.c:269 networking.c:520 networking.c:642
 msgid "Done"
-msgstr ""
+msgstr "Terminat"
 
 #: networking.c:300
 #, c-format
@@ -457,7 +459,7 @@ msgid ""
 "list those interfaces which have ethernet attached. If you change this "
 "setting, a network restart will be required, and you will have to "
 "reconfigure the network driver assignments."
-msgstr ""
+msgstr "Selectati configuratia de retea pentru %s. Urmatoarele tipuri de configuratie enumera interfetele care au atasate Ethernet. Daca modificati aceasta setare, o repornire de retea va fi necesara si va trebui sa reconfigurati alocarile driverului de retea ."
 
 #: networking.c:307
 #, c-format
@@ -465,35 +467,35 @@ msgid ""
 "Not enough netcards for your choice.\n"
 "\n"
 "Needed: %d - Available: %d\n"
-msgstr ""
+msgstr "Nu exista destule placi de retea pentru optiunea aleasa.\n\nNecesare: %d - Disponibile: %d\n"
 
 #: networking.c:359
 msgid ""
 "Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
 "\n"
-msgstr ""
+msgstr "Configureaza driverele de retea si care interfata este alocata fiecarei placi de retea. Configuratia actuala este:\n\n"
 
 #: networking.c:408
 msgid "Do you wish to change these settings?"
-msgstr ""
+msgstr "Vrei sa schimbi aceste setari?"
 
 #: networking.c:447
 msgid "Restarting non-local network..."
-msgstr ""
+msgstr "Restare retea la distanta..."
 
 #: networking.c:464
 msgid ""
 "Please choose the interface you wish to change.\n"
 "\n"
-msgstr ""
+msgstr "Selecteaza ce interfata doresti sa modifici.\n\n"
 
 #: networking.c:519
 msgid "Assigned Cards"
-msgstr ""
+msgstr "Placi de retea alocate"
 
 #: networking.c:520
 msgid "Remove"
-msgstr ""
+msgstr "Elimina"
 
 #: networking.c:556 networking.c:649
 #, c-format
@@ -502,84 +504,84 @@ msgid ""
 "connection to the %s machine will be broken, and you will have to reconnect "
 "on the new IP. This is a risky operation, and should only be attempted if "
 "you have physical access to the machine, should something go wrong."
-msgstr ""
+msgstr "Daca modifici aceasta adresa IP si esti conectat la distanta, conexiunea la %s va fi intrerupta si va trebui sa te reconectezi la noul IP. Aceasta este o operatie riscanta si ar trebui sa fie efectuata doar daca ai acces fizic la echipament, pentru situatia in care ceva merge prost ."
 
 #: networking.c:641
 msgid "Select the interface you wish to reconfigure."
-msgstr ""
+msgstr "Selecteaza interfata pe care doresti sa o reconfigurezi."
 
 #: networking.c:729
 msgid "Default gateway:"
-msgstr ""
+msgstr "Gateway implicit:"
 
 #: networking.c:744
 msgid ""
 "Enter the DNS and gateway information. These settings are used only with "
 "Static IP (and DHCP if DNS set) on the RED interface."
-msgstr ""
+msgstr "Introdu informatiile necesare pentru DNS si gateway. Aceste setari sunt folosite doar pentru IP Static (si DHCP daca DNS este setat) pe interfata RED."
 
 #: networking.c:773
 msgid "Default gateway"
-msgstr ""
+msgstr "Gateway implicit"
 
 #: networking.c:780
 msgid "Secondary DNS specified without a Primary DNS"
-msgstr ""
+msgstr "DNS secundar specificat fara un DNS primar"
 
 #: passwords.c:33
 msgid ""
 "Enter the 'root' user password. Login as this user for commandline access."
-msgstr ""
+msgstr "Introdu parola pentru utilizatorul 'root'. Autentifica-te cu acest utilizator pentru access la linia de comanda."
 
 #: passwords.c:38 passwords.c:61
 msgid "Setting password"
-msgstr ""
+msgstr "Se seteaza parola"
 
 #: passwords.c:38
 msgid "Setting 'root' password...."
-msgstr ""
+msgstr "Se seteaza parola pentru 'root'."
 
 #: passwords.c:39
 msgid "Problem setting 'root' password."
-msgstr ""
+msgstr "Nu s-a putut seta parola pentru 'root'."
 
 #: passwords.c:53
 #, c-format
 msgid ""
 "Enter %s 'admin' user password. This is the user to use for logging into the"
 " %s web administration pages."
-msgstr ""
+msgstr "Introdu parola pentru utilizatorul %s 'admin'. Foloseste acest utllizator pentru autentificarea la %s prin web."
 
 #: passwords.c:60
 #, c-format
 msgid "Setting %s 'admin' user password..."
-msgstr ""
+msgstr "Se seteaza parola pentru %s 'admin'..."
 
 #: passwords.c:62
 #, c-format
 msgid "Problem setting %s 'admin' user password."
-msgstr ""
+msgstr "Nu s-a putut seta parola pentru %s 'admin'."
 
 #: passwords.c:76
 msgid "Password:"
-msgstr ""
+msgstr "Parola:"
 
 #: passwords.c:77
 msgid "Again:"
-msgstr ""
+msgstr "Verificare parola:"
 
 #: passwords.c:95
 msgid "Password cannot be blank."
-msgstr ""
+msgstr "Parola nu poate fi goala."
 
 #: passwords.c:102
 msgid "Passwords do not match."
-msgstr ""
+msgstr "Parolele nu corespund"
 
 #: passwords.c:109
 msgid "Password cannot contain spaces."
-msgstr ""
+msgstr "Parola nu poate contine spatii."
 
 #: timezone.c:77
 msgid "Choose the timezone you are in from the list below."
-msgstr ""
+msgstr "Alege fusul orar din lista de mai jos."
index fc2090795b267b048c652bbc607df3194ee70bfd..5409a3176810b75700fd286df0f0c839aeb96c17 100644 (file)
@@ -3,8 +3,9 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# Alexander Savchenko, 2016
 # Andrei Skipin <skian2007@yandex.ru>, 2014
-# ellviss <kpe1501@gmail.com>, 2015
+# ellviss <kpe1501@gmail.com>, 2015-2016
 # bubnov_pi <ipfire@bubnov.su>, 2014
 # Tim <evargrin@gmail.com>, 2015
 msgid ""
@@ -12,8 +13,8 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
-"PO-Revision-Date: 2015-04-25 04:53+0000\n"
-"Last-Translator: Tim <evargrin@gmail.com>\n"
+"PO-Revision-Date: 2017-09-20 09:45+0000\n"
+"Last-Translator: ellviss <kpe1501@gmail.com>\n"
 "Language-Team: Russian (http://www.transifex.com/mstremer/ipfire/language/ru/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -23,11 +24,11 @@ msgstr ""
 
 #: dhcp.c:50
 msgid "Start address:"
-msgstr "Ð\9fеÑ\80вый адрес:"
+msgstr "Ð\9dаÑ\87алÑ\8cный адрес:"
 
 #: dhcp.c:51
 msgid "End address:"
-msgstr "Ð\9fоÑ\81ледний адрес:"
+msgstr "Ð\9aонеÑ\87нÑ\8bй адрес:"
 
 #: dhcp.c:52 networking.c:717
 msgid "Primary DNS:"
@@ -188,7 +189,7 @@ msgstr "<Tab>/<Alt-Tab> переход между элементами   |  <П
 
 #: main.c:97
 msgid "Section menu"
-msgstr ""
+msgstr "Меню выбора"
 
 #: main.c:98
 msgid "Select the item you wish to configure."
@@ -210,7 +211,7 @@ msgstr "Предупреждение"
 msgid ""
 "Initial setup was not entirely complete. You must ensure that Setup is "
 "properly finished by running setup again at the shell."
-msgstr ""
+msgstr "Начальная устрановка не завершена. Вы дожны убедиться что установка закончилась прежде чем запускать её снова из консоли."
 
 #: misc.c:62
 #, c-format
@@ -306,7 +307,7 @@ msgstr "Не установлено"
 #: netstuff.c:669
 #, c-format
 msgid "Please choose a networkcard for the following interface - %s."
-msgstr ""
+msgstr "Пожалуйста, выберете сетевую карту для следующего интерфейса - %s."
 
 #: netstuff.c:672
 msgid "Extended Network Menu"
@@ -326,15 +327,15 @@ msgstr "Определение устройства"
 
 #: netstuff.c:678
 msgid "The lights on the selected port should flash now for 10 seconds..."
-msgstr ""
+msgstr "Лампочка на выбранном порту будет светить на протяжении 10 секкунд..."
 
 #: netstuff.c:679
 msgid "Identification is not supported by this interface."
-msgstr ""
+msgstr "Идентификация не доступна на данном интерфейсе"
 
 #: netstuff.c:691
 msgid "There are no unassigned interfaces on your system."
-msgstr ""
+msgstr "Не осталось ненастроенных интерфейсов в вашей системе."
 
 #: netstuff.c:732
 #, c-format
@@ -375,7 +376,7 @@ msgstr "Не назначен ЗЕЛЁНЫЙ интерфейс."
 
 #: networking.c:152
 msgid "Missing an IP address on GREEN."
-msgstr ""
+msgstr "Не назначен адрес на GREEN интерфейсе"
 
 #: networking.c:163
 msgid "Error"
@@ -391,7 +392,7 @@ msgstr "Не указан КРАСНЫЙ интерфейс."
 
 #: networking.c:173
 msgid "Missing an IP address on RED."
-msgstr ""
+msgstr "Не назначен адрес на RED интерфейсе"
 
 #: networking.c:183
 msgid "No ORANGE interface assigned."
@@ -399,7 +400,7 @@ msgstr "Не указан ОРАНЖЕВЫЙ интерфейс."
 
 #: networking.c:189
 msgid "Missing an IP address on ORANGE."
-msgstr ""
+msgstr "Не назначен адрес на ORANGE интерфейсе"
 
 #: networking.c:199
 msgid "No BLUE interface assigned."
@@ -407,7 +408,7 @@ msgstr "Не указан СИНИЙ интерфейс."
 
 #: networking.c:205
 msgid "Missing an IP address on BLUE."
-msgstr ""
+msgstr "Не назначен адрес на BLUE интерфейсе"
 
 #: networking.c:217
 msgid "Misssing DNS."
@@ -443,7 +444,7 @@ msgid ""
 "Current config: %s\n"
 "\n"
 "%s"
-msgstr ""
+msgstr "Текущая Конфигурация: %s\n\n%s"
 
 #: networking.c:268
 msgid "Network configuration menu"
@@ -460,7 +461,7 @@ msgid ""
 "list those interfaces which have ethernet attached. If you change this "
 "setting, a network restart will be required, and you will have to "
 "reconfigure the network driver assignments."
-msgstr ""
+msgstr "Выберете сеть для конфиругации для %s. Данный список типов подключения предназначен для ethernet. Если вы измените настройки , то сеть будет требовать перезагрузки, и вам надо будет переконфигурировать в соответсвии с сетевыми настройками."
 
 #: networking.c:307
 #, c-format
@@ -468,13 +469,13 @@ msgid ""
 "Not enough netcards for your choice.\n"
 "\n"
 "Needed: %d - Available: %d\n"
-msgstr ""
+msgstr "Нет более доступных сетевых карт.\n\nНеобходимо: %d - Доступно: %d\n"
 
 #: networking.c:359
 msgid ""
 "Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
 "\n"
-msgstr ""
+msgstr "Сконфигурируйте сетевые платы, и какой интерфес сопоставлен к конкрутному адаптеру. Текущая конфигурация следующая:\n\n"
 
 #: networking.c:408
 msgid "Do you wish to change these settings?"
@@ -482,13 +483,13 @@ msgstr "Вы уверены что хотите изменить эти наст
 
 #: networking.c:447
 msgid "Restarting non-local network..."
-msgstr ""
+msgstr "Перезапуск внешней сети"
 
 #: networking.c:464
 msgid ""
 "Please choose the interface you wish to change.\n"
 "\n"
-msgstr ""
+msgstr "Выберете интерфейс для реконфигурации.\n"
 
 #: networking.c:519
 msgid "Assigned Cards"
@@ -505,7 +506,7 @@ msgid ""
 "connection to the %s machine will be broken, and you will have to reconnect "
 "on the new IP. This is a risky operation, and should only be attempted if "
 "you have physical access to the machine, should something go wrong."
-msgstr ""
+msgstr "Если вы измените данный IP адресс, и вы подключены удалённо, ваше соединение с  %s компьютером будет разорвано , и вы должны подключитсья по новому адресу IP. Это не безопасная операция и выдолжны иметь возмонжость подключитсья к машине визически если что-то пойдет не так."
 
 #: networking.c:641
 msgid "Select the interface you wish to reconfigure."
@@ -519,7 +520,7 @@ msgstr "Шлюз по умолчанию:"
 msgid ""
 "Enter the DNS and gateway information. These settings are used only with "
 "Static IP (and DHCP if DNS set) on the RED interface."
-msgstr ""
+msgstr "Введите адреса DNS и шлюза. Эти настройки будут применены только для Static IP(или DHCP если DNS настроен) на интерфейсе RED."
 
 #: networking.c:773
 msgid "Default gateway"
@@ -527,12 +528,12 @@ msgstr "Шлюз по умолчанию"
 
 #: networking.c:780
 msgid "Secondary DNS specified without a Primary DNS"
-msgstr ""
+msgstr "Вторичный DNS назначен без назначения первичного DNS"
 
 #: passwords.c:33
 msgid ""
 "Enter the 'root' user password. Login as this user for commandline access."
-msgstr ""
+msgstr "Введите пароль для пользователя 'root'. Этот пользователь используется для доступа к консоли."
 
 #: passwords.c:38 passwords.c:61
 msgid "Setting password"
@@ -544,14 +545,14 @@ msgstr "Установка 'root' пароля..."
 
 #: passwords.c:39
 msgid "Problem setting 'root' password."
-msgstr ""
+msgstr "Проблема с указанием пароля  для пользователя 'root'."
 
 #: passwords.c:53
 #, c-format
 msgid ""
 "Enter %s 'admin' user password. This is the user to use for logging into the"
 " %s web administration pages."
-msgstr ""
+msgstr "Введите пароль для пользователя %s 'admin'. Этот пользователь используется для администрирования через %s web."
 
 #: passwords.c:60
 #, c-format
index 0bd98eee455431f2e91f66253078f27a99a53f8d..7307735aff4b95a23270e1b7f54cbddbd63ca7a3 100644 (file)
@@ -10,7 +10,7 @@ msgstr ""
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
 "PO-Revision-Date: 2014-08-12 10:08+0000\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: Kinyarwanda (http://www.transifex.com/projects/p/ipfire/language/rw/)\n"
+"Language-Team: Kinyarwanda (http://www.transifex.com/mstremer/ipfire/language/rw/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index 8b5944ef14f22b3372f3a6b85b0512dc9558f317..555b033a30b8b95709b10fb1080a7a4a1c812bd3 100644 (file)
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
-"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"PO-Revision-Date: 2017-08-03 19:28+0000\n"
 "Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
-"Language-Team: Slovak (http://www.transifex.com/projects/p/ipfire/language/sk/)\n"
+"Language-Team: Slovak (http://www.transifex.com/mstremer/ipfire/language/sk/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index 9983002f6057e0dd10adc18b34f74cf75bc835b2..0284399bdd63b620b26d64bb4cbeaa38e501aa99 100644 (file)
@@ -9,7 +9,7 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
-"PO-Revision-Date: 2015-06-22 10:58+0000\n"
+"PO-Revision-Date: 2017-09-20 09:45+0000\n"
 "Last-Translator: Ardit Dani <ardit.dani@gmail.com>\n"
 "Language-Team: Albanian (http://www.transifex.com/mstremer/ipfire/language/sq/)\n"
 "MIME-Version: 1.0\n"
index 7c713142bfb633eab431b8fd769a72b000ab1e25..fb3bf3dbfdb50b6dc63ad124be2b7441d5f886e1 100644 (file)
@@ -10,7 +10,7 @@ msgstr ""
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
 "PO-Revision-Date: 2014-08-12 10:08+0000\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: Serbian (http://www.transifex.com/projects/p/ipfire/language/sr/)\n"
+"Language-Team: Serbian (http://www.transifex.com/mstremer/ipfire/language/sr/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index 1cab064c49a1bee723aba6757269a994c26e2387..e2fed3976b9c84df917640ba5dde551b16b8c225 100644 (file)
@@ -10,7 +10,7 @@ msgstr ""
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
 "PO-Revision-Date: 2014-08-12 10:08+0000\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: Sundanese (http://www.transifex.com/projects/p/ipfire/language/su/)\n"
+"Language-Team: Sundanese (http://www.transifex.com/mstremer/ipfire/language/su/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index a2acfe3b645d80d84a23175e4f7d210010a6fcf7..1949c6f0899fb634a0a9bfeea074df9bafe0395c 100644 (file)
@@ -3,14 +3,15 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# Urban Berggren <pudberggren@icloud.com>, 2016
 msgid ""
 msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
-"PO-Revision-Date: 2014-08-21 15:13+0000\n"
-"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
-"Language-Team: Swedish (http://www.transifex.com/projects/p/ipfire/language/sv/)\n"
+"PO-Revision-Date: 2017-09-20 09:45+0000\n"
+"Last-Translator: Urban Berggren <pudberggren@icloud.com>\n"
+"Language-Team: Swedish (http://www.transifex.com/mstremer/ipfire/language/sv/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -19,31 +20,31 @@ msgstr ""
 
 #: dhcp.c:50
 msgid "Start address:"
-msgstr ""
+msgstr "Startadress"
 
 #: dhcp.c:51
 msgid "End address:"
-msgstr ""
+msgstr "Slutadress"
 
 #: dhcp.c:52 networking.c:717
 msgid "Primary DNS:"
-msgstr ""
+msgstr "Primär DNS"
 
 #: dhcp.c:53 networking.c:723
 msgid "Secondary DNS:"
-msgstr ""
+msgstr "Sekundär DNS"
 
 #: dhcp.c:54
 msgid "Default lease (mins):"
-msgstr ""
+msgstr "Standard lease-tid (min):"
 
 #: dhcp.c:55
 msgid "Max lease (mins):"
-msgstr ""
+msgstr "Max lease-tid (min):"
 
 #: dhcp.c:56
 msgid "Domain name suffix:"
-msgstr ""
+msgstr "Domännamn:"
 
 #: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70
 #: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704
@@ -51,19 +52,19 @@ msgstr ""
 #: networking.c:442 networking.c:552 networking.c:603 networking.c:610
 #: networking.c:713 timezone.c:63
 msgid "Unable to open settings file"
-msgstr ""
+msgstr "Kan inte öppna konfigurationsfilen"
 
 #: dhcp.c:111
 msgid "DHCP server configuration"
-msgstr ""
+msgstr "DHCP server konfiguration"
 
 #: dhcp.c:116
 msgid "Configure the DHCP server by entering the settings information."
-msgstr ""
+msgstr "Konfigurera DHCP-servern genom att skriva in alla nödvändiga inställningar."
 
 #: dhcp.c:125
 msgid "Enabled"
-msgstr ""
+msgstr "Aktiverad"
 
 #: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172
 #: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163
@@ -71,367 +72,367 @@ msgstr ""
 #: networking.c:642 networking.c:653 networking.c:746 passwords.c:89
 #: timezone.c:78
 msgid "OK"
-msgstr ""
+msgstr "OK"
 
 #: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158
 #: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305
 #: networking.c:410 networking.c:560 networking.c:653 networking.c:746
 #: passwords.c:89 timezone.c:78
 msgid "Cancel"
-msgstr ""
+msgstr "Avbryt"
 
 #: dhcp.c:156
 msgid ""
 "The following fields are invalid:\n"
 "\n"
-msgstr ""
+msgstr "Följande fält är ogiltiga:\n\n"
 
 #: dhcp.c:159
 msgid "Start address"
-msgstr ""
+msgstr "Startadress"
 
 #: dhcp.c:165
 msgid "End address"
-msgstr ""
+msgstr "Slutadress"
 
 #: dhcp.c:173 networking.c:755
 msgid "Primary DNS"
-msgstr ""
+msgstr "Primär DNS"
 
 #: dhcp.c:182 networking.c:764
 msgid "Secondary DNS"
-msgstr ""
+msgstr "Sekundär DNS"
 
 #: dhcp.c:189
 msgid "Default lease time"
-msgstr ""
+msgstr "Standard lease-tid"
 
 #: dhcp.c:195
 msgid "Max. lease time"
-msgstr ""
+msgstr "Max lease-tid"
 
 #: domainname.c:42 main.c:70
 msgid "Domain name"
-msgstr ""
+msgstr "Domännamn"
 
 #: domainname.c:42
 msgid "Enter Domain name"
-msgstr ""
+msgstr "Ange Domännamn"
 
 #: domainname.c:48
 msgid "Domain name cannot be empty."
-msgstr ""
+msgstr "Domännamnet kan inte vara tomt."
 
 #: domainname.c:50
 msgid "Domain name cannot contain spaces."
-msgstr ""
+msgstr "Domännamnet kan inte innehålla mellanslag."
 
 #: domainname.c:53
 msgid "Domain name may only contain letters, numbers, hyphens and periods."
-msgstr ""
+msgstr "Domännamnet kan bara innehålla bokstäver, siffror, bindestreck och punkter."
 
 #: hostname.c:46 main.c:69
 msgid "Hostname"
-msgstr ""
+msgstr "Värdnamn"
 
 #: hostname.c:46
 msgid "Enter the machine's hostname."
-msgstr ""
+msgstr "Ange datorns värdnamn."
 
 #: hostname.c:53
 msgid "Hostname cannot be empty."
-msgstr ""
+msgstr "Värdnamnet kan inte vara tomt."
 
 #: hostname.c:55
 msgid "Hostname cannot contain spaces."
-msgstr ""
+msgstr "Värdnamnet kan inte innehålla mellanslag."
 
 #: hostname.c:58
 msgid "Hostname may only contain letters, numbers and hyphens."
-msgstr ""
+msgstr "Värdnamnet kan bara innehålla bokstäver, siffror och bindestreck."
 
 #: keymap.c:84 main.c:67
 msgid "Keyboard mapping"
-msgstr ""
+msgstr "Tangentbordslayout"
 
 #: keymap.c:85
 msgid "Choose the type of keyboard you are using from the list below."
-msgstr ""
+msgstr "Välj vilket typ av tangenbord du använder från listan nedan."
 
 #: main.c:68 timezone.c:77
 msgid "Timezone"
-msgstr ""
+msgstr "Tidszon"
 
 #: main.c:71 networking.c:110 networking.c:115 networking.c:447
 msgid "Networking"
-msgstr ""
+msgstr "Nätverk"
 
 #: main.c:72 misc.c:147
 msgid "ISDN"
-msgstr ""
+msgstr "ISDN"
 
 #: main.c:73
 msgid "'root' password"
-msgstr ""
+msgstr "'root* lösenord"
 
 #: main.c:74
 msgid "'admin' password"
-msgstr ""
+msgstr "'admin' lösenord"
 
 #: main.c:90
 msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
-msgstr ""
+msgstr "<Tab>/<Alt-Tab> mellan menyer | <Mellanslag> väljer"
 
 #: main.c:97
 msgid "Section menu"
-msgstr ""
+msgstr "Menyval"
 
 #: main.c:98
 msgid "Select the item you wish to configure."
-msgstr ""
+msgstr "Välj objektet du vill konfigurera."
 
 #: main.c:99
 msgid "Quit"
-msgstr ""
+msgstr "Avsluta"
 
 #: main.c:172
 msgid "Setup is complete."
-msgstr ""
+msgstr "Konfigurationen är slutförd."
 
 #: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
 msgid "Warning"
-msgstr ""
+msgstr "Varning"
 
 #: main.c:175
 msgid ""
 "Initial setup was not entirely complete. You must ensure that Setup is "
 "properly finished by running setup again at the shell."
-msgstr ""
+msgstr "Första installationen var inte helt klar. Du måste se till att installationen är korrekt avslutad genom att köra installationen igen."
 
 #: misc.c:62
 #, c-format
 msgid "Unable to write %s/main/hostname.conf"
-msgstr ""
+msgstr "Kan inte skriva %s/main/hostname.conf"
 
 #: misc.c:71
 msgid "Unable to open main hosts file."
-msgstr ""
+msgstr "Kan inte öppna värdfilen."
 
 #: misc.c:76
 msgid "Unable to write /etc/hosts."
-msgstr ""
+msgstr "Kan inte skriva /etc/hosts"
 
 #: misc.c:117
 msgid "Unable to write /etc/hosts.deny."
-msgstr ""
+msgstr "Kan inte skriva /etc/hosts.deny"
 
 #: misc.c:125
 msgid "Unable to write /etc/hosts.allow."
-msgstr ""
+msgstr "Kan inte skriva /etc/hosts.allow"
 
 #: misc.c:136
 msgid "Unable to set hostname."
-msgstr ""
+msgstr "Det går inte att ställa in värdnamn."
 
 #: misc.c:147
 msgid "Scanning and configuring ISDN devices."
-msgstr ""
+msgstr "Skannar och konfigurerar ISDN enheter."
 
 #: misc.c:148
 msgid "Unable to scan for ISDN devices."
-msgstr ""
+msgstr "Kan inte skanna efter ISDN enheter."
 
 #: netstuff.c:86
 #, c-format
 msgid "Interface - %s"
-msgstr ""
+msgstr "Gränssnitt - %s"
 
 #: netstuff.c:91
 #, c-format
 msgid "Enter the IP address information for the %s interface."
-msgstr ""
+msgstr "Skriv in IP-nummer för %s gränssnittet."
 
 #: netstuff.c:103
 msgid "Static"
-msgstr ""
+msgstr "Statisk"
 
 #: netstuff.c:104
 msgid "DHCP"
-msgstr ""
+msgstr "DHCP"
 
 #: netstuff.c:105
 msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
-msgstr ""
+msgstr "PPP DIALUP (PPPoE, modem, ATM...)"
 
 #: netstuff.c:113
 msgid "DHCP Hostname:"
-msgstr ""
+msgstr "DHCP Värdnamn"
 
 #: netstuff.c:115
 msgid "Force DHCP MTU:"
-msgstr ""
+msgstr "Tvinga DHCP MTU"
 
 #: netstuff.c:134
 msgid "IP address:"
-msgstr ""
+msgstr "IP-adress:"
 
 #: netstuff.c:146
 msgid "Network mask:"
-msgstr ""
+msgstr "Nätverksmask:"
 
 #: netstuff.c:173 networking.c:749
 msgid "The following fields are invalid:"
-msgstr ""
+msgstr "Följande fält är ogiltiga:"
 
 #: netstuff.c:183
 msgid "IP address"
-msgstr ""
+msgstr "IP-adress"
 
 #: netstuff.c:189
 msgid "Network mask"
-msgstr ""
+msgstr "Nätverksmask"
 
 #: netstuff.c:198
 msgid "DHCP hostname"
-msgstr ""
+msgstr "DHCP värdnamn"
 
 #: netstuff.c:396 netstuff.c:709
 msgid "Unset"
-msgstr ""
+msgstr "Urkopplat"
 
 #: netstuff.c:669
 #, c-format
 msgid "Please choose a networkcard for the following interface - %s."
-msgstr ""
+msgstr "Var god välj ett nätverkskort för följande gränssnitt - %s"
 
 #: netstuff.c:672
 msgid "Extended Network Menu"
-msgstr ""
+msgstr "Utökad Nätverksmeny"
 
 #: netstuff.c:673 networking.c:520
 msgid "Select"
-msgstr ""
+msgstr "Välj"
 
 #: netstuff.c:673
 msgid "Identify"
-msgstr ""
+msgstr "Identifiera"
 
 #: netstuff.c:678
 msgid "Device Identification"
-msgstr ""
+msgstr "Enhetsidentifikation"
 
 #: netstuff.c:678
 msgid "The lights on the selected port should flash now for 10 seconds..."
-msgstr ""
+msgstr "Lamporna på den valda porten bör nu blinka i 10 sekunder..."
 
 #: netstuff.c:679
 msgid "Identification is not supported by this interface."
-msgstr ""
+msgstr "Identifikation stöds inte av detta gränssnitt."
 
 #: netstuff.c:691
 msgid "There are no unassigned interfaces on your system."
-msgstr ""
+msgstr "Det finns inga otilldelade gränsnitt på ditt system."
 
 #: netstuff.c:732
 #, c-format
 msgid "Do you really want to remove the assigned %s interface?"
-msgstr ""
+msgstr "Vill du verkligen ta bort det tilldelade gränsnittet %s"
 
 #: netstuff.c:755
 msgid "Select network driver"
-msgstr ""
+msgstr "Välj nätverksdrivrutin"
 
 #: netstuff.c:755
 msgid "Set additional module parameters"
-msgstr ""
+msgstr "Ställ in yttligare modulparametrar"
 
 #: netstuff.c:762
 msgid "Loading module..."
-msgstr ""
+msgstr "Laddar moduler..."
 
 #: netstuff.c:777
 msgid "Unable to load driver module."
-msgstr ""
+msgstr "Kan inte ladda drivrutin/modul."
 
 #: netstuff.c:780
 msgid "Module name cannot be blank."
-msgstr ""
+msgstr "Modulens namn kan inte vara tomt."
 
 #: networking.c:110
 msgid "Stopping network..."
-msgstr ""
+msgstr "Stoppar nätverk..."
 
 #: networking.c:115
 msgid "Restarting network..."
-msgstr ""
+msgstr "Startar om nätverk..."
 
 #: networking.c:146
 msgid "No GREEN interface assigned."
-msgstr ""
+msgstr "Inget GRÖNT gränsnitt tilldelat."
 
 #: networking.c:152
 msgid "Missing an IP address on GREEN."
-msgstr ""
+msgstr "Saknar en IP-adress på GRÖN."
 
 #: networking.c:163
 msgid "Error"
-msgstr ""
+msgstr "Fel"
 
 #: networking.c:163
 msgid "Ignore"
-msgstr ""
+msgstr "Ignorera"
 
 #: networking.c:164
 msgid "No RED interface assigned."
-msgstr ""
+msgstr "Inget RÖTT gränssnitt tilldelat."
 
 #: networking.c:173
 msgid "Missing an IP address on RED."
-msgstr ""
+msgstr "Saknar IP-adress på RÖD."
 
 #: networking.c:183
 msgid "No ORANGE interface assigned."
-msgstr ""
+msgstr "Inget ORANGE gränssnitt tilldelat."
 
 #: networking.c:189
 msgid "Missing an IP address on ORANGE."
-msgstr ""
+msgstr "Saknar IP-adress på gränsnitt ORANGE."
 
 #: networking.c:199
 msgid "No BLUE interface assigned."
-msgstr ""
+msgstr "Inget BLÅTT gränssnitt tilldelat."
 
 #: networking.c:205
 msgid "Missing an IP address on BLUE."
-msgstr ""
+msgstr "Saknar IP-adress på BLÅ."
 
 #: networking.c:217
 msgid "Misssing DNS."
-msgstr ""
+msgstr "Saknar DNS."
 
 #: networking.c:224
 msgid "Missing Default Gateway."
-msgstr ""
+msgstr "Saknar Standardgränssnitt."
 
 #: networking.c:237 networking.c:304
 msgid "Network configuration type"
-msgstr ""
+msgstr "Typ av nätverkskonfiguration"
 
 #: networking.c:238 networking.c:409
 msgid "Drivers and card assignments"
-msgstr ""
+msgstr "Tilldelning av drivrutiner och nätverkskort"
 
 #: networking.c:239 networking.c:640
 msgid "Address settings"
-msgstr ""
+msgstr "Adressinställningar"
 
 #: networking.c:240 networking.c:743
 msgid "DNS and Gateway settings"
-msgstr ""
+msgstr "DNS och Gateway inställningar"
 
 #: networking.c:260
 msgid "When configuration is complete, a network restart will be required."
-msgstr ""
+msgstr "När konfigurationen är färdig, så måste nätverket startas om."
 
 #: networking.c:267
 #, c-format
@@ -439,15 +440,15 @@ msgid ""
 "Current config: %s\n"
 "\n"
 "%s"
-msgstr ""
+msgstr "Nuvarande konfiguration: %s\n\n%s"
 
 #: networking.c:268
 msgid "Network configuration menu"
-msgstr ""
+msgstr "Nätverkskonfigurationsmeny"
 
 #: networking.c:269 networking.c:520 networking.c:642
 msgid "Done"
-msgstr ""
+msgstr "Färdig"
 
 #: networking.c:300
 #, c-format
@@ -456,7 +457,7 @@ msgid ""
 "list those interfaces which have ethernet attached. If you change this "
 "setting, a network restart will be required, and you will have to "
 "reconfigure the network driver assignments."
-msgstr ""
+msgstr "Välj nätverkskonfigurationen för %s. Följande konfigurationstyper visar de gränssnitt som har nätverksåtkomst. Om du ändrar denna inställning, måste nätverket startas om, och du måste omkonfigurera nätverksdrivrutinen."
 
 #: networking.c:307
 #, c-format
@@ -464,35 +465,35 @@ msgid ""
 "Not enough netcards for your choice.\n"
 "\n"
 "Needed: %d - Available: %d\n"
-msgstr ""
+msgstr "Du har. inte valt nog många nätverkskort.\n\nBehövs: %d - Tillgängligt: %d\n"
 
 #: networking.c:359
 msgid ""
 "Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
 "\n"
-msgstr ""
+msgstr "Konfigurera drivrutiner, och till vilket gränsnitt varje kort är tilldelat. Den nuvarande konfigurationen är som följer:\n\n"
 
 #: networking.c:408
 msgid "Do you wish to change these settings?"
-msgstr ""
+msgstr "Vill du ändra på dessa inställningar?"
 
 #: networking.c:447
 msgid "Restarting non-local network..."
-msgstr ""
+msgstr "Startar om icke-lokalt nätverk..."
 
 #: networking.c:464
 msgid ""
 "Please choose the interface you wish to change.\n"
 "\n"
-msgstr ""
+msgstr "Vad god välj vilket gränssnitt du önskar att ändra på.\n\n"
 
 #: networking.c:519
 msgid "Assigned Cards"
-msgstr ""
+msgstr "Tilldelade nätverkskort"
 
 #: networking.c:520
 msgid "Remove"
-msgstr ""
+msgstr "Ta bort"
 
 #: networking.c:556 networking.c:649
 #, c-format
@@ -501,84 +502,84 @@ msgid ""
 "connection to the %s machine will be broken, and you will have to reconnect "
 "on the new IP. This is a risky operation, and should only be attempted if "
 "you have physical access to the machine, should something go wrong."
-msgstr ""
+msgstr "Om du ändrar denna IP-adress, och är fjärrinloggad, så kommer din uppkoppling till %s brytas, och du måste återansluta till det nya IP-numret. Detta är riskabelt, och borde bara försökas med om du har fysisk tillgång till datorn om något skulle gå fel."
 
 #: networking.c:641
 msgid "Select the interface you wish to reconfigure."
-msgstr ""
+msgstr "Välj det gränssnitt du vill konfigurera om."
 
 #: networking.c:729
 msgid "Default gateway:"
-msgstr ""
+msgstr "Standard gateway:"
 
 #: networking.c:744
 msgid ""
 "Enter the DNS and gateway information. These settings are used only with "
 "Static IP (and DHCP if DNS set) on the RED interface."
-msgstr ""
+msgstr "Ange DNS och gateway information. Dessa inställningar används bara vid statiskt IP (och DHCP om DNS är inställt) på RÖTT gränssnitt."
 
 #: networking.c:773
 msgid "Default gateway"
-msgstr ""
+msgstr "Standard gateway"
 
 #: networking.c:780
 msgid "Secondary DNS specified without a Primary DNS"
-msgstr ""
+msgstr "Sekundär DNS specificerad utan en primär DNS"
 
 #: passwords.c:33
 msgid ""
 "Enter the 'root' user password. Login as this user for commandline access."
-msgstr ""
+msgstr "Ange 'root' lösenordet. Logga in på denna användare för tillgång till kommandorad."
 
 #: passwords.c:38 passwords.c:61
 msgid "Setting password"
-msgstr ""
+msgstr "Ställer in lösenord"
 
 #: passwords.c:38
 msgid "Setting 'root' password...."
-msgstr ""
+msgstr "Ställer in 'root' lösenord..."
 
 #: passwords.c:39
 msgid "Problem setting 'root' password."
-msgstr ""
+msgstr "Problem med att ställa in 'root' lösenord."
 
 #: passwords.c:53
 #, c-format
 msgid ""
 "Enter %s 'admin' user password. This is the user to use for logging into the"
 " %s web administration pages."
-msgstr ""
+msgstr "Ange %s 'admin' lösenord. Använd denna användare för att logga in i %s webbgränssnitt för administration."
 
 #: passwords.c:60
 #, c-format
 msgid "Setting %s 'admin' user password..."
-msgstr ""
+msgstr "Ställer in %s 'admin' lösenord..."
 
 #: passwords.c:62
 #, c-format
 msgid "Problem setting %s 'admin' user password."
-msgstr ""
+msgstr "Problem med att ställa in %s 'admin' lösenord."
 
 #: passwords.c:76
 msgid "Password:"
-msgstr ""
+msgstr "Lösenord:"
 
 #: passwords.c:77
 msgid "Again:"
-msgstr ""
+msgstr "Igen:"
 
 #: passwords.c:95
 msgid "Password cannot be blank."
-msgstr ""
+msgstr "Lösenordet kan inte vara tomt."
 
 #: passwords.c:102
 msgid "Passwords do not match."
-msgstr ""
+msgstr "Lösenorden matchar inte."
 
 #: passwords.c:109
 msgid "Password cannot contain spaces."
-msgstr ""
+msgstr "Lösenordet kan inte innehålla mellanslag."
 
 #: timezone.c:77
 msgid "Choose the timezone you are in from the list below."
-msgstr ""
+msgstr "Välj tidszonen du befinner dig i från listan nedan."
index ad29452cc31736d85416658dbae2fa84956b611e..feaaecca4682f613afb87494cde0ee4c8b5af7ee 100644 (file)
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
-"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"PO-Revision-Date: 2017-08-03 19:28+0000\n"
 "Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
-"Language-Team: Thai (http://www.transifex.com/projects/p/ipfire/language/th/)\n"
+"Language-Team: Thai (http://www.transifex.com/mstremer/ipfire/language/th/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index 073e06a4f245f8f5b64965e18cbb27d5a742eb2e..e45ec68a1c27000673ac56e9503212066b612c23 100644 (file)
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
-"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"PO-Revision-Date: 2017-08-03 19:28+0000\n"
 "Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
-"Language-Team: Turkmen (http://www.transifex.com/projects/p/ipfire/language/tk/)\n"
+"Language-Team: Turkmen (http://www.transifex.com/mstremer/ipfire/language/tk/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index 9e52d072c2c03aed0995f6342e8a68eb447020ad..d861493f8e535615c2c0869917eff19cdeba54bb 100644 (file)
@@ -4,15 +4,15 @@
 # 
 # Translators:
 # Ersan YILDIRIM <ersan73@gmail.com>, 2015
-# Kudret Emre <kudretemre@hotmail.com.tr>, 2014
+# Kudret <kudretemre@hotmail.com.tr>, 2014
 msgid ""
 msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
-"PO-Revision-Date: 2015-03-20 15:05+0000\n"
+"PO-Revision-Date: 2017-09-20 09:45+0000\n"
 "Last-Translator: Ersan YILDIRIM <ersan73@gmail.com>\n"
-"Language-Team: Turkish (http://www.transifex.com/projects/p/ipfire/language/tr/)\n"
+"Language-Team: Turkish (http://www.transifex.com/mstremer/ipfire/language/tr/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -530,7 +530,7 @@ msgstr "Birincil DNS olmadan İkincil DNS belirtildi."
 #: passwords.c:33
 msgid ""
 "Enter the 'root' user password. Login as this user for commandline access."
-msgstr "%s 'root' kullanıcı parolasını girin. Komut satırı erişimi için bu kullanıcıyla oturum açın."
+msgstr "'Root' kullanıcı parolasını girin. Komut satırı erişimi için bu kullanıcıyla oturum açın."
 
 #: passwords.c:38 passwords.c:61
 msgid "Setting password"
index afcfa301280f7f7feef8b9da82bdec44669b563b..999c67f2a1c15f5c01b18bf76db43b1b1b13528d 100644 (file)
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
-"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"PO-Revision-Date: 2017-08-03 19:28+0000\n"
 "Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
-"Language-Team: Ukrainian (http://www.transifex.com/projects/p/ipfire/language/uk/)\n"
+"Language-Team: Ukrainian (http://www.transifex.com/mstremer/ipfire/language/uk/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index 9044283343f2c8fcfa688b5f71907cc694c992a2..67e53da984199e77ce90b785b31e50437f80003a 100644 (file)
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
-"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"PO-Revision-Date: 2017-08-03 19:28+0000\n"
 "Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
-"Language-Team: Uzbek (Latin) (http://www.transifex.com/projects/p/ipfire/language/uz@Latn/)\n"
+"Language-Team: Uzbek (Latin) (http://www.transifex.com/mstremer/ipfire/language/uz@Latn/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index 4d2457e658783ab38af8d94ca45dcce8a7702cbd..f3c982e4190f49b264333ed3719f55747d4d27f6 100644 (file)
@@ -8,9 +8,9 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
-"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"PO-Revision-Date: 2017-08-03 19:28+0000\n"
 "Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
-"Language-Team: Vietnamese (http://www.transifex.com/projects/p/ipfire/language/vi/)\n"
+"Language-Team: Vietnamese (http://www.transifex.com/mstremer/ipfire/language/vi/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
index 70b0a0e62e5e8251e646e2fa769e2a89e5df3f72..157425410d96c32fcd79d4727984c7d77f198c5e 100644 (file)
@@ -9,9 +9,9 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
-"PO-Revision-Date: 2015-01-31 09:57+0000\n"
+"PO-Revision-Date: 2017-09-20 09:45+0000\n"
 "Last-Translator: ipfire <qiwenqiu@yahoo.com.hk>\n"
-"Language-Team: Chinese (http://www.transifex.com/projects/p/ipfire/language/zh/)\n"
+"Language-Team: Chinese (http://www.transifex.com/mstremer/ipfire/language/zh/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
diff --git a/src/wio/EX-wio.menu b/src/wio/EX-wio.menu
new file mode 100644 (file)
index 0000000..33a785e
--- /dev/null
@@ -0,0 +1,6 @@
+       $substatus->{'55.wio'} = {
+                               'caption' => "$Lang::tr{'wio'}",
+                               'uri' => '/cgi-bin/wio.cgi',
+                               'title' => "$Lang::tr{'wio'}",
+                               'enabled' => 1,
+                         };
diff --git a/src/wio/config/backup/includes/wio b/src/wio/config/backup/includes/wio
new file mode 100644 (file)
index 0000000..688b819
--- /dev/null
@@ -0,0 +1,2 @@
+/var/ipfire/wio/wio.conf
+/var/log/wio
diff --git a/src/wio/images/add.png b/src/wio/images/add.png
new file mode 100644 (file)
index 0000000..d894689
Binary files /dev/null and b/src/wio/images/add.png differ
diff --git a/src/wio/images/back.png b/src/wio/images/back.png
new file mode 100644 (file)
index 0000000..66921af
Binary files /dev/null and b/src/wio/images/back.png differ
diff --git a/src/wio/images/blue.png b/src/wio/images/blue.png
new file mode 100644 (file)
index 0000000..84d570e
Binary files /dev/null and b/src/wio/images/blue.png differ
diff --git a/src/wio/images/fqdn.png b/src/wio/images/fqdn.png
new file mode 100644 (file)
index 0000000..2db5ff7
Binary files /dev/null and b/src/wio/images/fqdn.png differ
diff --git a/src/wio/images/graph.png b/src/wio/images/graph.png
new file mode 100644 (file)
index 0000000..ac86b8c
Binary files /dev/null and b/src/wio/images/graph.png differ
diff --git a/src/wio/images/green.png b/src/wio/images/green.png
new file mode 100644 (file)
index 0000000..44838ec
Binary files /dev/null and b/src/wio/images/green.png differ
diff --git a/src/wio/images/http.png b/src/wio/images/http.png
new file mode 100644 (file)
index 0000000..851e400
Binary files /dev/null and b/src/wio/images/http.png differ
diff --git a/src/wio/images/https.png b/src/wio/images/https.png
new file mode 100644 (file)
index 0000000..823126a
Binary files /dev/null and b/src/wio/images/https.png differ
diff --git a/src/wio/images/ip.png b/src/wio/images/ip.png
new file mode 100644 (file)
index 0000000..da0e8a2
Binary files /dev/null and b/src/wio/images/ip.png differ
diff --git a/src/wio/images/mailgreenoff.png b/src/wio/images/mailgreenoff.png
new file mode 100644 (file)
index 0000000..041c9e7
Binary files /dev/null and b/src/wio/images/mailgreenoff.png differ
diff --git a/src/wio/images/mailgreenon.png b/src/wio/images/mailgreenon.png
new file mode 100644 (file)
index 0000000..9acc358
Binary files /dev/null and b/src/wio/images/mailgreenon.png differ
diff --git a/src/wio/images/mailredoff.png b/src/wio/images/mailredoff.png
new file mode 100644 (file)
index 0000000..0dbf075
Binary files /dev/null and b/src/wio/images/mailredoff.png differ
diff --git a/src/wio/images/mailredon.png b/src/wio/images/mailredon.png
new file mode 100644 (file)
index 0000000..668ba7d
Binary files /dev/null and b/src/wio/images/mailredon.png differ
diff --git a/src/wio/images/no_graph.png b/src/wio/images/no_graph.png
new file mode 100644 (file)
index 0000000..073ccc5
Binary files /dev/null and b/src/wio/images/no_graph.png differ
diff --git a/src/wio/images/none.png b/src/wio/images/none.png
new file mode 100644 (file)
index 0000000..fa0c3f3
Binary files /dev/null and b/src/wio/images/none.png differ
diff --git a/src/wio/images/orange.png b/src/wio/images/orange.png
new file mode 100644 (file)
index 0000000..9504469
Binary files /dev/null and b/src/wio/images/orange.png differ
diff --git a/src/wio/images/ovpn.png b/src/wio/images/ovpn.png
new file mode 100644 (file)
index 0000000..407a868
Binary files /dev/null and b/src/wio/images/ovpn.png differ
diff --git a/src/wio/images/ovpnn2n.png b/src/wio/images/ovpnn2n.png
new file mode 100644 (file)
index 0000000..038d6ed
Binary files /dev/null and b/src/wio/images/ovpnn2n.png differ
diff --git a/src/wio/images/ovpnrw.png b/src/wio/images/ovpnrw.png
new file mode 100644 (file)
index 0000000..a17a622
Binary files /dev/null and b/src/wio/images/ovpnrw.png differ
diff --git a/src/wio/images/red.png b/src/wio/images/red.png
new file mode 100644 (file)
index 0000000..e15dfb1
Binary files /dev/null and b/src/wio/images/red.png differ
diff --git a/src/wio/images/refresh.png b/src/wio/images/refresh.png
new file mode 100644 (file)
index 0000000..60a5ddd
Binary files /dev/null and b/src/wio/images/refresh.png differ
diff --git a/src/wio/images/vpn.png b/src/wio/images/vpn.png
new file mode 100644 (file)
index 0000000..d68f08e
Binary files /dev/null and b/src/wio/images/vpn.png differ
diff --git a/src/wio/images/vpnn2n.png b/src/wio/images/vpnn2n.png
new file mode 100644 (file)
index 0000000..2aa96df
Binary files /dev/null and b/src/wio/images/vpnn2n.png differ
diff --git a/src/wio/images/vpnrw.png b/src/wio/images/vpnrw.png
new file mode 100644 (file)
index 0000000..ca99367
Binary files /dev/null and b/src/wio/images/vpnrw.png differ
diff --git a/src/wio/images/white.png b/src/wio/images/white.png
new file mode 100644 (file)
index 0000000..20546bc
Binary files /dev/null and b/src/wio/images/white.png differ
diff --git a/src/wio/lang/wio.de.pl b/src/wio/lang/wio.de.pl
new file mode 100644 (file)
index 0000000..fd82ff0
--- /dev/null
@@ -0,0 +1,157 @@
+%tr = (%tr,
+'wio' => 'Who Is Online?',
+'wio stat' => 'Status:',
+'wio checked' => 'zuletzt überprüft',
+'wio name' => 'Hostname / FQDN',
+'wio ipadress' => 'IP-Adresse',
+'wio image' => 'Zustand',
+'wio up' => 'AKTIV',
+'wio down' => 'INAKTIV',
+'wio err' => 'Fehler',
+'wio warn' => 'Warnung',
+'wio_import_csv' => 'CSV Datei',
+'wio_import_hosts' => 'Hosts Datei (var/ipfire/main/hosts)',
+'wio_import_data' => 'Einstellungen für ',
+'wio_import_data1' => ' bearbeiten:',
+'wio_import_data2' => ' importieren:',
+'wio_import' => 'Importieren',
+'wio_import_info' => 'Mitteilung:',
+'wio_import_file' => 'Client(s) importieren aus:',
+'wio_import_info_csv' => 'Es gibt keine neuen Einstellungen zu importieren!',
+'wio settings' => 'Konfiguration:',
+'wio enabled' => 'aktivieren?',
+'wio min' => 'Minute(n)',
+'wio cron' => 'Zeitintervall für die Überprüfung:',
+'wio_ovpn_cron' => 'Zeitintervall für die Überprüfung des OpenVPN RW und IPSec Status:',
+'wio_save' => 'speichern',
+'wio_error' => 'Fehlermeldung:',
+'wio_info' => 'Meldung:',
+'wio_back' => 'zurück',
+'wio_use' => 'Diese Einstellungen importieren?',
+'wio_ip_error' => 'Ungültige IP-Adresse!',
+'wio_host_error' => 'Ungültiger Hostname!',
+'wio_host_exists' => 'Hostname wird schon benutzt!',
+'wio_host_empty' => 'Es wurde kein Hostname eingetragen!',
+'wio_ip_exists' => 'IP-Adresse wird schon benutzt!',
+'wio_ip_empty' => 'Es wurde keine IP-Adresse eingetragen!',
+'wio_import_fixleases' => 'DHCP Datei (var/ipfire/dhcp/fixleases)',
+'wio_import_leases' => 'Einstellungen importieren:',
+'wio network' => 'Netzwerk',
+'wio_refresh' => 'alle Clients aktualisieren',
+'wio_fqdn_error' => 'Ungültiger Fully Qualified Domain Name (FQDN)! Bitte keine Sonderzeichen, Umlaute oder Leerzeichen beim FQDN verwenden.',
+'wio_edit' => 'Einstellungen bearbeiten:',
+'wio_dyndns' => 'DynDNS',
+'wio_dyndns_hosts' => 'DynDNS Name(n)',
+'wio_dyndns_refresh' => 'DynDNS IP aktualisieren',
+'wio_dyndns_on' => 'DynDNS Host aktiviert (klicken, um zu deaktivieren)',
+'wio_dyndns_off' => 'DynDNS Host deaktiviert (klicken, um zu aktivieren)',
+'wio_dyndns_info' => 'Keine IP eingetragen, da scheinbar keine Verbindung ins Internet besteht. Bei der nächsten Verbindung ins Internet wird eine Aktualisierung der IP des DynDNS Hostes durchgeführt.',
+'wio_no_csv' => 'Die Datei hat nicht die Erweiterung .csv',
+'wio_no_csv_error' => 'Bitte keine Sonderzeichen, Umlaute oder Leerzeichen im Dateinamen verwenden.',
+'wio_no_file_selected' => 'Es wurde keine Datei ausgewählt!',
+'wio_import_infos' => 'Einstellungen importieren:',
+'wio_import_infos_csv' => 'ACHTUNG: Es werden nur die Datensätze importiert, bei denen die Option "Diese Einstellungen importieren?" aktiviert ist! Sollten Datensätze mit doppelten IP-Adressen oder Hostnamen vorkommen, wird der zu erst aufgeführte Datensatz importiert und die anderen Datensätze (mit den doppelten IP-Adressen oder Hostnamen) werden nicht berücksichtigt!',
+'enable disable dyndns' => 'DynDNS Host aktivieren oder deaktivieren',
+'wio_msg' => 'Zustand (aktiv/inaktiv) des Clients / der Clients wird aktualisiert ...',
+'wio_lanname' => 'LAN Hostname',
+'wio_wanname' => 'WAN Hostname',
+'wio_wancheck' => 'verbunden seit',
+'wio_sc_refresh' => 'Client aktualisieren',
+'wio_edit_settings' => 'Client hinzufügen:',
+'wio_edit_client' => 'Client bearbeiten:',
+'wio_graphs' => 'Graphen anzeigen',
+'wio_no_graphs' => 'keine Graphen vorhanden',
+'wio_graphs_stat' => 'Diagramme für',
+'wio_vpn_con' => 'VPN - Verbindung(en):',
+'wio_wan_con' => 'WAN - Verbindung:',
+'wio_clients' => 'Clients:',
+'wio click to disable' => 'Aktiviert',
+'wio click to enable' => 'Deaktiviert',
+'wio_net_scan' => 'Netzwerk(e) durchsuchen:',
+'wio_net_scan_vl' => '',
+'wio_net_scan_l' => 'Netzwerk an',
+'wio_net_scan_r' => 'durchsuchen:',
+'wio_net_scan_green' => 'grünes',
+'wio_net_scan_blue' => 'blaues',
+'wio_net_scan_orange' => 'oranges',
+'wio_net_scan_run' => 'starten',
+'wio_sort_host' => 'nach Hostnamen (FQDN) sortieren',
+'wio_sort_ip' => 'nach IP Adressen sortieren',
+'wio_logging' => 'Logging (/var/log/messages) aktivieren?',
+'wio_no_image' => 'KEIN STATUS',
+'wio_ovpn_con' => 'OpenVPN - Verbindung(en):',
+'wio_ovpn_connected' => 'verbunden seit',
+'wio_wan_up' => 'VERBUNDEN',
+'wio_wan_down' => 'GETRENNT',
+'wio_n2n' => 'Netz-zu-Netz Verbindung',
+'wio_rw' => 'Host-zu-Netz Verbindung',
+'wio_mailremark_enabled' => 'Anmerkung des Clients mit in Mailtext übernehmen?',
+'wio_mail_online_on' => 'Online-E-Mail aktiviert (klicken, um zu deaktivieren)',
+'wio_mail_online_off' => 'Online-E-Mail deaktiviert (klicken, um zu aktivieren)',
+'wio_mail_offline_on' => 'Offline-E-Mail aktiviert (klicken, um zu deaktivieren)',
+'wio_mail_offline_off' => 'Offline-E-Mail deaktiviert (klicken, um zu aktivieren)',
+'wio_mail_online' => 'Online E-Mail aktivieren oder deaktivieren',
+'wio_mail_offline' => 'Offline E-Mail aktivieren oder deaktivieren',
+'wio_sendemail' => 'E-Mail senden wenn',
+'wio_hwaddress' => 'HW-Adresse',
+'wio_iface' => 'Schnittstelle',
+'wio_client_enable' => 'Client aktivieren?',
+'wio_ping_send' => 'überprüfen per',
+'wio_link_open' => 'Link öffnen per',
+'enable disable client' => 'Client aktivieren oder deaktivieren',
+'wio_client_on' => 'Überwachung aktiviert (klicken, um zu deaktivieren)',
+'wio_client_off' => 'Überwachung deaktiviert (klicken, um zu aktivieren)',
+'wio_webinterface' => 'LINK',
+'wio_webinterface_link' => 'Link öffnen',
+'wio_ip' => 'überprüfen per IP aktiviert',
+'wio_fqdn' => 'überprüfen per FQDN aktiviert',
+'wio_ip_on' => 'überprüfen per IP aktiviert (klicken, um per FQDN zu aktivieren)',
+'wio_fqdn_on' => 'überprüfen per FQDN aktiviert (klicken, um per IP zu aktivieren)',
+'wio_client_add' => 'Eingaben anwenden',
+'wio_config' => 'Client(s) konfigurieren:',
+'wio_settings_msg' => 'Einstellungen bearbeiten:',
+'wio_settings_msg_hint' => 'Um Who Is Online? benutzen zu können, müssen hier grundsätzliche Einstellungen vorgenommen werden.',
+'wio_sub' => 'WIO Client-Status-Mail',
+'wio timeout' => 'Ping Timeout:',
+'wio sec' => 'Sekunde(n)',
+'wio_add' => 'Client hinzufügen:',
+'wio_no_add' => 'Client ist vorhanden',
+'wio_id' => '#',
+'wio_online' => 'online',
+'wio_offline' => 'offline',
+'wio_status' => 'WIO Client-Status',
+'wio_mail_style' => 'WIO Client Statusmails versenden als',
+'wio_mail_smail' => 'Sammelmail',
+'wio_mail_email' => 'Einzelmails',
+'wio_mail_ovpnrw' => 'OpenVPN RW und IPSec Statusmails aktivieren?',
+'wio_edit_set' => 'Konfiguration',
+'wio_service' => 'Service:',
+'wio_dyndns_success' => 'DynDNS IP ermittelt und eingetragen!',
+'wio_remove_all' => 'alle Clients löschen',
+'wio_remove_all_hint' => 'Möchten Sie wirklich alle Clients löschen?',
+'wio_remove_client' => 'Client löschen',
+'wio_remove_client_hint' => 'Möchten Sie den Client wirklich löschen?',
+'wio_arp_table_entries' => 'Client aus der ARP-Tabelle hinzufügen:',
+'wio_activ' => 'aktiv',
+'wio_check' => 'prüfen',
+'wio_common_name' => 'Remote Host / IP',
+'wio_msg_left' => 'Das',
+'wio_msg_green' => 'grüne',
+'wio_msg_blue' => 'blaue',
+'wio_msg_orange' => 'orange',
+'wio_msg_center' => 'Netzwerk an',
+'wio_msg_right' => 'wird durchsucht.',
+'wio_msg_hint' => 'Einen Moment bitte ...',
+'wio_last_update' => 'zuletzt aktualisiert',
+'wio_disable_hint' => 'Achtung! Es werden alle Einstellungen incl. der zu überprüfenden Clients zurückgesetzt!',
+'wio_clientremark' => 'Anmerkung anzeigen?',
+'wio_already_running' => 'Die Prüfung wird bereits durchgeführt!',
+'wio_error_function' => 'Diese Funktion kann im Moment nicht ausgeführt werden, da im Hintergrund gerade der Zustand (aktiv/inaktiv) der Clients aktualisiert wird.',
+'wio_shutdown' => 'Herunterfahren, wenn alle Clients "offline" sind?',
+'wio_unknown_lan' => 'UNBEKANNT',
+'wio_red_lan' => 'ROT',
+'wio_search' => 'Suche im lokalen Netzwerk nach aktiven Hosts ...',
+'wio_answer' => 'Antwort',
+'wio_answer_time' => 'Antwortzeit',
+'wio_scriptruntime' => 'Scriptlaufzeit',
+);
diff --git a/src/wio/lang/wio.en.pl b/src/wio/lang/wio.en.pl
new file mode 100644 (file)
index 0000000..52793b9
--- /dev/null
@@ -0,0 +1,157 @@
+%tr = (%tr,
+'wio' => 'Who Is Online?',
+'wio stat' => 'Current condition(s):',
+'wio checked' => 'Last checked',
+'wio name' => 'Hostname or FQDN',
+'wio ipadress' => 'IP-Address',
+'wio image' => 'Condition',
+'wio up' => 'Active',
+'wio down' => 'Inactive',
+'wio err' => 'Error',
+'wio warn' => 'Warning',
+'wio_import_csv' => 'CSV file:',
+'wio_import_hosts' => 'hosts configuration (var/ipfire/main/hosts) ?',
+'wio_import_data' => 'import settings for ',
+'wio_import_data1' => ' correct:',
+'wio_import_data2' => ' import:',
+'wio_import' => 'Importing',
+'wio_import_info' => 'message:',
+'wio_import_file' => 'Import settings from:',
+'wio_import_info_csv' => 'There are no new settings to import!',
+'wio settings' => 'configuration:',
+'wio enabled' => 'enable ?',
+'wio min' => 'Minute(s)',
+'wio cron' => 'Time interval for checking:',
+'wio_ovpn_cron' => 'Time interval for checking the OpenVPN RW and IPSec Status:',
+'wio_save' => 'save',
+'wio_error' => 'errormessage:',
+'wio_info' => 'message:',
+'wio_back' => 'back',
+'wio_use' => 'Import these settings ?',
+'wio_ip_error' => 'Invalid IP Address.',
+'wio_host_error' => 'Invalid Hostname.',
+'wio_host_exists' => 'Hostname is already used.',
+'wio_host_empty' => 'No Hostname was registered!',
+'wio_ip_exists' => 'IP Address is already used.',
+'wio_ip_empty' => 'No IP Address was registered!',
+'wio_import_fixleases' => 'DHCP configuration (var/ipfire/dhcp/fixleases) ?',
+'wio_import_leases' => 'Import settings:',
+'wio network' => 'Network',
+'wio_refresh' => 'update all clients now',
+'wio_fqdn_error' => 'Invalid Fully Qualified Domain Name (FQDN)! Please do not use special characters or blanks in the FQDN.',
+'wio_edit' => 'change settings:',
+'wio_dyndns' => 'DynDNS',
+'wio_dyndns_hosts' => 'DynDNS Name(s)',
+'wio_dyndns_refresh' => 'DynDNS Host IP update',
+'wio_dyndns_on' => 'DynDNS Host enabled (click to disable)',
+'wio_dyndns_off' => 'DynDNS Host disabled (click to enable)',
+'wio_dyndns_info' => 'None IP registered, since apparently no connection exists in Internet. With the next connection in Internet is accomplished an actualization of the IP of the DynDNS Hostes.',
+'wio_no_csv' => 'File has not the extension .csv',
+'wio_no_csv_error' => 'Please do not use special characters or blanks in the filename.',
+'wio_no_file_selected' => 'No File selected!',
+'wio_import_infos' => 'Import settings:',
+'wio_import_infos_csv' => 'NOTE: Only Data records with marked "Import these settings ?" are considered by importing! If data records with double IP-Addresses or Hostnames should occur, only the first data record will be imported and the other data records (with the double IP-Addresses or Hostnames) will not be considered!',
+'enable disable dyndns' => 'enable or disable DynDNS Host',
+'wio_msg' => 'Condition of the examining Client(s) are updated ...',
+'wio_lanname' => 'LAN Hostname',
+'wio_wanname' => 'WAN Hostname',
+'wio_wancheck' => 'connected since',
+'wio_sc_refresh' => 'update client now',
+'wio_edit_settings' => 'add client:',
+'wio_edit_client' => 'edit client:',
+'wio_graphs' => 'show graphs',
+'wio_no_graphs' => 'no graphs available',
+'wio_graphs_stat' => 'Diagramm for',
+'wio_vpn_con' => 'VPN - Connection(s):',
+'wio_wan_con' => 'WAN - Connection:',
+'wio_clients' => 'clients:',
+'wio click to disable' => 'Activated',
+'wio click to enable' => 'Deactivated',
+'wio_net_scan' => 'Scan Network(s):',
+'wio_net_scan_vl' => 'scan',
+'wio_net_scan_l' => 'Network on',
+'wio_net_scan_r' => '',
+'wio_net_scan_green' => 'green',
+'wio_net_scan_blue' => 'blue',
+'wio_net_scan_orange' => 'orange',
+'wio_net_scan_run' => 'start',
+'wio_sort_host' => 'sort Hostnames (FQDN)',
+'wio_sort_ip' => 'sort IP-Adresses',
+'wio_logging' => 'activate Logging (/var/log/messages) ?',
+'wio_no_image' => 'NO STATUS',
+'wio_ovpn_con' => 'OpenVPN - Connection(s):',
+'wio_ovpn_connected' => 'connected since',
+'wio_wan_up' => 'CONNECTED',
+'wio_wan_down' => 'NOT CONNECTED',
+'wio_n2n' => 'Net-to-Net Connection',
+'wio_rw' => 'Host-to-Net Connection',
+'wio_mailremark_enabled' => 'Add Remark from client to mailbody ?',
+'wio_mail_online_on' => 'online email enabled (click to disable)',
+'wio_mail_online_off' => 'online email disabled (click to enable)',
+'wio_mail_offline_on' => 'offline email enabled (click to disable)',
+'wio_mail_offline_off' => 'offline emaildisabled (click to enable)',
+'wio_mail_online' => 'enable or disable online email',
+'wio_mail_offline' => 'enable or disable offline email',
+'wio_sendemail' => 'send email',
+'wio_hwaddress' => 'HW-Adresse',
+'wio_iface' => 'Interface',
+'wio_client_enable' => 'enable Host ?',
+'wio_ping_send' => 'send ping to',
+'wio_link_open' => 'open link via',
+'enable disable client' => 'enable or disable client',
+'wio_client_on' => 'Client enabled (click to disable)',
+'wio_client_off' => 'Client disabled (click to enable)',
+'wio_webinterface' => 'LINK',
+'wio_webinterface_link' => 'follow link',
+'wio_ip' => 'send ping to IP enabled',
+'wio_fqdn' => 'send ping to FQDN enabled',
+'wio_ip_on' => 'send ping to IP enabled (click to enable FQDN)',
+'wio_fqdn_on' => 'send ping to FQDN enabled (click to enable IP)',
+'wio_client_add' => 'use settings',
+'wio_config' => 'configurate Client(s):',
+'wio_settings_msg' => 'configurate settings:',
+'wio_settings_msg_hint' => 'Here you have to set some values to get the addon started.',
+'wio_sub' => 'WIO Client-Status-Mail',
+'wio timeout' => 'Ping Timeout:',
+'wio sec' => 'Second(s)',
+'wio_add' => 'add Client:',
+'wio_no_add' => 'Client is available',
+'wio_id' => '#',
+'wio_online' => 'online',
+'wio_offline' => 'offline',
+'wio_status' => 'WIO Client-Status',
+'wio_mail_style' => 'send WIO Client Statusmails as',
+'wio_mail_smail' => 'collected mail',
+'wio_mail_email' => 'single mails',
+'wio_mail_ovpnrw' => 'enable OpenVPN RW and IPSec Statusmails ?',
+'wio_edit_set' => 'Configuration',
+'wio_service' => 'Service:',
+'wio_dyndns_success' => 'DynDNS IP identified and registered!',
+'wio_remove_all' => 'remove all clients',
+'wio_remove_all_hint' => 'Are you sure to delete all the clients?',
+'wio_remove_client' => 'remove client',
+'wio_remove_client_hint' => 'Are you sure to delete the client?',
+'wio_arp_table_entries' => 'add client from ARP-Table:',
+'wio_activ' => 'activ',
+'wio_check' => 'check',
+'wio_common_name' => 'Remote Host/IP',
+'wio_msg_left' => 'Searching on the',
+'wio_msg_green' => 'green',
+'wio_msg_blue' => 'blue',
+'wio_msg_orange' => 'orange',
+'wio_msg_center' => 'Interface on',
+'wio_msg_right' => 'is being examined.',
+'wio_msg_hint' => 'One moment please ...',
+'wio_last_update' => 'last update',
+'wio_disable_hint' => 'Attention! It will reset all settings including the client to be checked!',
+'wio_clientremark' => 'show remark?',
+'wio_already_running' => 'This check is already running!',
+'wio_error_function' => 'This function is temporarily unavailable, because in the background client states are being updated (active/inactive).',
+'wio_shutdown' => 'Shutdown when all clients are "offline"?',
+'wio_unknown_lan' => 'UNKNOWN',
+'wio_red_lan' => 'RED',
+'wio_search' => 'Searching for active hosts in the local network ...',
+'wio_answer' => 'Answer',
+'wio_answer_time' => 'Response Time',
+'wio_scriptruntime' => 'Script Execution Time',
+);
diff --git a/src/wio/main/wio.conf b/src/wio/main/wio.conf
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/src/wio/main/wio.pl b/src/wio/main/wio.pl
new file mode 100644 (file)
index 0000000..985900d
--- /dev/null
@@ -0,0 +1,385 @@
+#!/usr/bin/perl
+#
+###############################################################################
+#                                                                             #
+# IPFire.org - A linux based firewall                                         #
+# Copyright (C) 2017 Stephan Feddersen <addons@h-loit.de>                     #
+# All Rights Reserved.                                                        #
+#                                                                             #
+# 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/>.       #
+#                                                                             #
+###############################################################################
+#
+# id: wio.pl, v1.3.1 2017/07/11 21:31:16 sfeddersen
+#
+# This wio.pl is based on the Code from the IPCop WIO Addon
+# and is extremly adapted to work with IPFire.
+#
+# Autor: Stephan Feddersen
+# Co-Autor: Alexander Marx
+# Co-Autor: Frank Mainz
+#
+
+# enable only the following on debugging purpose
+#use warnings;
+
+use strict;
+use POSIX qw(strftime);
+use Time::HiRes qw(gettimeofday tv_interval);
+use Net::Ping;
+use RRDs;
+use Fatal qw/ open /;
+
+require '/var/ipfire/general-functions.pl';
+require '/var/ipfire/lang.pl';
+require '/usr/lib/wio/wio-lib.pl';
+
+my ( $debug, $i, $t, $ib, $tb, $ivpn, $tvpn ) = '';
+my $logdir    = "/var/log/wio";
+my $owner     = getpwnam "nobody";
+my $group     = getgrnam "nobody";
+my $ipadrfile = "$logdir/wioips";
+
+unless ( -e $ipadrfile ) { print ( "The file $ipadrfile doesn't exist!\n" ); exit; }
+
+foreach (@ARGV) {
+  if ( $_ eq '-d' || $_ eq '--debug') { $debug = 1; }
+  if ( $_ eq '-h' || $_ eq '--help' ) { die help(); }
+}
+
+my ( %wiosettings, %mainsettings, %mailsettings, %netsettings ) = ();
+
+&General::readhash('/var/ipfire/main/settings', \%mainsettings);
+&General::readhash('/var/ipfire/ethernet/settings', \%netsettings);
+&General::readhash('/var/ipfire/dma/mail.conf', \%mailsettings);
+&General::readhash("/var/ipfire/wio/wio.conf", \%wiosettings);
+
+my $now        = strftime "%a, %d.%m.%Y %H:%M:%S", localtime;
+my $logging    = $wiosettings{'LOGGING'};
+my $mailstyle  = $wiosettings{'MAILSTYLE'};
+my $mailremark = $wiosettings{'MAILREMARK'};
+my $timeout    = $wiosettings{'TIMEOUT'};
+my $shutdown   = $wiosettings{'SHUTDOWN'};
+my $rrddir     = "/var/log/rrd/wio";
+my $onoffip    = "$logdir/wioscip";
+my $hostname   = "$mainsettings{'HOSTNAME'}.$mainsettings{'DOMAINNAME'}";
+my $redactive  = "/var/ipfire/red/active";
+my $rediface   = "/var/ipfire/red/iface";
+my $reddev     = '';
+
+if ( -e $rediface ) {
+       $reddev = &General::get_red_interface;
+}
+
+my $redip      = $hostname;
+my $vpnpid     = ( -e "/var/run/charon.pid" ? `awk '{print $1}' /var/run/charon.pid`: '');
+my $ovpnpid    = ( -e  "/var/run/openvpn.pid" ? `awk '{print $1}' /var/run/openvpn.pid`: '');
+
+my $steptime = $wiosettings{'CRON'} *= 60;
+my $i_ping   = 'icmp';
+my $t_ping   = 'tcp';
+
+my $nr = 1;
+my $poweroff = 0;
+
+my ( $togglestat, $arp, $time, $start, $timestamp ) = 0;
+my ( $id, $ipadr, $ipadrnew, $host, $hostnew, $enable, $remark, $dyndns, $dyndnsip ) = '';
+my ( $mail, $mailon, $mailoff, $ping, $on, $httphost, $mailen ) = '';
+my ( $msg, $logmsg, $mailmsg, $smailtxt, $infomsg, $client, $mode, $onbak, $arpclient ) = '';
+my ( $ping_i, $ping_t, $ping_ib, $ping_tb, $ping_iv, $ping_tv, $pingmode ) = '';
+my ( @tmp, @arptmp, @myarray, @status, @arpclients ) = '';
+my @ifaces = ('GREEN','BLUE','ORANGE');
+
+
+if ( $mailsettings{'USEMAIL'} eq 'on' ) { $mailen = 'on'; }
+else { $mailen = 'off'; }
+
+if ( -e $redactive ) {
+       open(IPADDR, "/var/ipfire/red/local-ipaddress");
+       $redip = <IPADDR>;
+       close IPADDR;
+       chomp($redip);
+}
+
+if ($debug) {
+       $start = [gettimeofday];
+       startdebug();
+}
+
+foreach (@ifaces) {
+       if ( $netsettings{"${_}_DEV"} ne '' && $netsettings{"${_}_DEV"} ne 'disabled' ) {
+               my $output = `ifconfig $netsettings{"${_}_DEV"}`;
+
+               if ( grep (/RX bytes:0/, $output) ) { next; }
+               else {
+                       @arptmp = `/usr/local/bin/wioscan -s $netsettings{"${_}_DEV"}`;
+
+                       foreach $arpclient (@arptmp) {
+                               push (@arpclients, (split (/\,/,$arpclient))[1]);
+                       }
+               }
+               $output = '';
+               undef(@arptmp);
+       }
+}
+
+if ( -e "$onoffip" ) { open( FILE, "< $onoffip" ); }
+else { open( FILE, "< $ipadrfile" ); }
+@myarray = <FILE>;
+close(FILE);
+
+# ping all clients
+
+foreach (@myarray) {
+       chomp;
+       @tmp = split( /\,/, $_ );
+
+       ($id,$timestamp,$ipadr,$host,$enable,$remark,$dyndns,$mailon,$mailoff,$ping,$on,$httphost) = @tmp;
+
+       $timestamp = strftime "%d.%m.%Y - %H:%M:%S", localtime;
+
+       if ( $enable ne 'on' ) {
+               push (@status, "$id,$timestamp,$ipadr,$host,$enable,$remark,$dyndns,$mailon,$mailoff,$ping,$on,$httphost\n");
+               next;
+       }
+
+       if ( defined($dyndns) && ( $dyndns =~ 'on' ) ) {
+               ($dyndnsip, $infomsg) = &WIO::getdyndnsip($host, @myarray);
+               if ($dyndnsip ne $ipadr) { $ipadr = $dyndnsip; }
+       }
+
+       $ping_i = $ping_t = $ping_ib = $ping_tb = $ping_iv =  $ping_tv = $pingmode = $arp = 0;
+
+       foreach (@arpclients) {
+               chomp;
+               unless ( $ipadr eq $_ )
+               {
+                       $i = Net::Ping->new( $i_ping, $timeout );
+                       unless ( defined $i ) { die "Can't create Net::Ping object $!"; }
+
+                       $t = Net::Ping->new( $t_ping, $timeout );
+                       unless ( defined $t ) { die "Can't create Net::Ping object $!"; }
+
+                       $ib = Net::Ping->new( $i_ping, $timeout );
+                       unless ( defined $ib ) { die "Can't create Net::Ping object $!"; }
+                       $ib->bind($redip);
+
+                       $tb = Net::Ping->new( $t_ping, $timeout );
+                       unless ( defined $tb ) { die "Can't create Net::Ping object $!"; }
+                       $tb->bind($redip);
+
+                       if ($ovpnpid || $vpnpid)
+                       {
+                               $ivpn = Net::Ping->new( $i_ping, $timeout );
+                               unless ( defined $ivpn ) { die "Can't create Net::Ping object $!"; }
+                               $ivpn->bind($hostname);
+
+                               $tvpn = Net::Ping->new( $t_ping, $timeout );
+                               unless ( defined $tvpn ) { die "Can't create Net::Ping object $!"; }
+                               $tvpn->bind($hostname);
+                       }
+               }
+               else { $arp = 1 }
+       }
+
+       $client = ( ( $dyndns eq 'on' || $ping eq 'fqdn' ) ? $host : $ipadr );
+
+       if ($debug) {
+               printf "%2s   %15s", $nr++,  ($client ne $ipadr ? $ipadr : $client );
+               $time = [gettimeofday];
+       }
+
+       if ( $arp == 1 
+               || ($ping_i = $i->ping($client))
+               || ($ping_t = $t->ping($client))
+               || ($ping_ib = $ib->ping($client))
+               || ($ping_tb = $tb->ping($client))
+               || ($ovpnpid?($ping_iv = $ivpn->ping($client)) : 0)
+               || ($vpnpid?($ping_tv = $tvpn->ping($client)) : 0) )
+       {
+               $mode       = 100;
+               $msg        = "$Lang::tr{'wio up'}";
+               $onbak      = $on;
+               $togglestat = ( $on ne 'on' ) ? 1 : 0;
+               $on         = 'on';
+       }
+       else {
+               $mode       = 0;
+               $msg        = "$Lang::tr{'wio down'}";
+               $onbak      = $on;
+               $togglestat = ( $on ne 'off' ) ? 1 : 0;
+               $on         = 'off';
+       }
+
+       push (@status, "$id,$timestamp,$ipadr,$host,$enable,$remark,$dyndns,$mailon,$mailoff,$ping,$on,$httphost\n");
+
+       if ($debug) {
+               $mail = '----';
+               if ( $mailon eq 'on' && $togglestat == 1 && $mode == 100 ) { $mail = 'Online'; }
+               if ( $mailoff eq 'on' && $togglestat == 1 && $mode == 0 ) { $mail = 'Offline'; }
+               if ( $dyndns ne 'on' ) { $dyndns = 'off'; }
+
+               $pingmode = $arp ? 'ARPSCAN' : $ping_i ? 'ICMP' : $ping_t ? 'TCP' : $ping_ib ? 'ICMP+BIND' : $ping_tb ? 'TCP+BIND' : $ping_iv ? 'VPN ICMP' : $ping_tv ? 'VPN TCP' : 'NO ECHO';  
+               printf "%7s%8s%9s%10s     %.4f sek%12s\n", $ping, $dyndns, $msg, $mail, tv_interval($time), $pingmode;
+       }
+
+       if ( $host eq '' ) { $hostnew = 'n/a'; } else { $hostnew = $host; }
+       if ( $ipadr eq '' ) { $ipadrnew = 'n/a'; } else { $ipadrnew = $ipadr; }
+
+       if ( $logging eq 'on' ) {
+               $logmsg = "Client: $hostnew - IP: $ipadrnew - Status: $msg";
+               &General::log("wio","$logmsg");
+       }
+
+       if ( $mailen eq 'on' && $togglestat == 1 && ($mailon eq 'on' || $mailoff eq 'on')) {
+       
+               if ( $mailstyle eq 'email' || ($mailstyle eq 'smail' && $smailtxt eq '') ) { $mailmsg .= "Date\t : $now\n\n"; }
+
+               $mailmsg .= "Client\t : $hostnew\nIP\t : $ipadrnew\nStatus\t : $msg\n";
+
+               if ( $mailremark eq 'on' && $remark ne '' ) {
+                       $mailmsg .= "Remark : $remark\n\n";
+               }
+
+               if ( $mailstyle eq 'email' ) {
+                       &WIO::mailsender("WIO - $host - $msg", $mailmsg);
+                       undef ($mailmsg);
+               }
+               elsif ( $mailstyle eq 'smail'  ) {
+                       $smailtxt .= $mailmsg."\n";
+                       undef ($mailmsg);
+               }
+       }
+
+       if ( $ping ne 'fqdn' ) { $client = $host; }
+       if ( $host eq '' ) { $client = $ipadr; }
+
+       updatewiodata("$id");
+
+       if ( $arp == 0 ) {
+               $i->close();
+               $t->close();
+               $ib->close();
+               $tb->close();
+       }
+
+       if ( ( -e $ovpnpid || -e $vpnpid ) && $arp == 0 ) {
+               $ivpn->close();
+               $tvpn->close();
+       }
+}
+
+# write adressfile new
+
+if ( !-e $onoffip ) {
+       open( FILE, "> $ipadrfile" );
+       print FILE @status;
+       close(FILE);
+}
+else {
+       system("/bin/sed -i 's#$tmp[0],$tmp[1],$tmp[2],$tmp[3],$tmp[4],$tmp[5],$tmp[6],$tmp[7],$tmp[8],$tmp[9],$tmp[10],$tmp[11]#$id,$timestamp,$ipadr,$host,$enable,$remark,$dyndns,$mailon,$mailoff,$ping,$on,$httphost#g' $ipadrfile");
+       chmod ( 0644, $ipadrfile ); 
+       chown ( $owner, $group, $ipadrfile );
+}
+
+if ($debug) {
+       printf ("\n$Lang::tr{'wio_scriptruntime'}:  %.4f $Lang::tr{'age ssecond'}\n\n", tv_interval($start));
+}
+
+if ( $smailtxt ne '' ) { &WIO::mailsender($Lang::tr{'wio_sub'}, $smailtxt); }
+
+if ($shutdown eq 'on') {
+       foreach (@status) {
+               chomp;
+               @tmp = split( /\,/, $_ );
+
+               ($id,$timestamp,$ipadr,$host,$enable,$remark,$dyndns,$mailon,$mailoff,$ping,$on,$httphost) = @tmp;
+               
+               if ( $on eq 'on' ) {
+                       $poweroff = 0;
+                       last;
+               }
+               else {
+                       $poweroff = 1;
+                       next;
+               }
+       }
+
+       if ($poweroff == 1) {
+               if ($debug) {
+                       printf "$Lang::tr{'shutting down ipfire'}!\n\n";
+               }
+
+               &General::log("wio","$Lang::tr{'shutting down ipfire'}!");
+               system '/usr/local/bin/ipfirereboot down';
+       }
+}
+
+undef (@tmp);
+undef (@myarray);
+undef (@status);
+undef (@arptmp);
+undef (@arpclients);
+
+if ( -e $onoffip ) { unlink($onoffip); }
+
+sub updatewiodata {
+       my $id = $_[0];
+
+       if ( !-e "$rrddir/$id.rrd" ) {
+               RRDs::create(
+                       "$rrddir/$id.rrd",      "--step=$steptime",
+                       "DS:mode:GAUGE:3600:0:100", "RRA:AVERAGE:0.5:1:576",
+                       "RRA:AVERAGE:0.5:6:672",    "RRA:AVERAGE:0.5:24:732",
+                       "RRA:AVERAGE:0.5:144:1460"
+               );
+               my $ERROR = RRDs::error;
+               print "Error in RRD::create for Who Is Online: $ERROR\n" if $ERROR;
+       }
+
+       RRDs::update( "$rrddir/$id.rrd", "-t", "mode", "N:$mode" );
+
+       my $error = RRDs::error;
+
+       if ($error) { &General::log("wio","$error"); }
+}
+
+sub startdebug {
+
+printf "
+HOSTNAME    : $hostname
+TIMEOUT     : $timeout $Lang::tr{'age ssecond'}
+MAILSTYLE   : $mailstyle
+RED TYPE    : $netsettings{'RED_TYPE'}
+RED DEVICE  : $reddev
+RED ADDRESS : $redip
+SHUTDOWN    : $shutdown
+";
+       if ($ovpnpid) {printf "OVPN PID    : $ovpnpid"}
+       if ($vpnpid) {printf "VPN PID     : $vpnpid"}
+printf  "
+$Lang::tr{'wio_search'}
+
+%3s%17s%7s%8s%9s%10s%15s%12s
+---------------------------------------------------------------------------------
+","ID ", "$Lang::tr{'wio ipadress'}", "Ping", "DynDNS", "Status", "Mail", "$Lang::tr{'wio_answer_time'}", "$Lang::tr{'wio_answer'}";
+}
+
+sub help {
+       return "
+Who Is Online? for IPFire
+
+use option -d for debugging
+use option -h for help\n\n";
+}
diff --git a/src/wio/main/wiovpn.pl b/src/wio/main/wiovpn.pl
new file mode 100644 (file)
index 0000000..f22bd7a
--- /dev/null
@@ -0,0 +1,293 @@
+#!/usr/bin/perl
+#
+###############################################################################
+#                                                                             #
+# IPFire.org - A linux based firewall                                         #
+# Copyright (C) 2017 Stephan Feddersen <addons@h-loit.de>                     #
+# All Rights Reserved.                                                        #
+#                                                                             #
+# 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/>.       #
+#                                                                             #
+###############################################################################
+#
+# id: wioovpn.pl, v1.3.1 2017/07/11 21:31:16 sfeddersen
+#
+# This wioovpn.pl is based on the Code from the IPCop WIO Addon
+# and is extremly adapted to work with IPFire.
+#
+# Autor: Stephan Feddersen
+# Co-Autor: Alexander Marx
+# Co-Autor: Frank Mainz
+#
+
+# enable only the following on debugging purpose
+#use warnings;
+
+use strict;
+use POSIX qw(strftime);
+
+my $logdir = "/var/log/wio";
+
+require '/var/ipfire/general-functions.pl';
+require '/var/ipfire/lang.pl';
+require '/usr/lib/wio/wio-lib.pl';
+
+my %wiosettings = ();
+
+&General::readhash( "/var/ipfire/wio/wio.conf", \%wiosettings );
+
+my $mailremark = $wiosettings{'MAILREMARK'};
+my $logging    = $wiosettings{'LOGGING'};
+
+my ( @ovpnstatus, @ovpncfg, @ovpncache, @ovpnarray, @ovpnmatch, @ovpnwrite );
+
+my $now         = strftime "%a, %d.%m.%Y %H:%M:%S", localtime;
+my $ovpnpid     = "/var/run/openvpn.pid";
+my $ovpnmailmsg = '';
+my $ovpncache   = "$logdir/.ovpncache";
+my $ovpnconfig  = "/var/ipfire/ovpn/ovpnconfig";
+
+my ( $name, $nameul, $ovpnclt, $ovpncltip, $realipadr, $connected )  = '';
+my ( $ovpnmailsub, $ovpnrwlogin, $ovpnrwstatus, $status, $remark, $logmsg ) = '';
+
+my ( @vpnstatus, @vpncfg, @vpncache, @vpnarray, @vpnwrite );
+
+my $vpnpid       = "/var/run/charon.pid";
+my $vpnmailmsg   = '';
+my $vpncache     = "$logdir/.vpncache";
+my $vpnconfig    = "/var/ipfire/vpn/config";
+
+my ( $activ, $vpnmailsub, $vpnrwstatus, $status,)  = '';
+
+my $togglestat = 0;
+
+if ( ! -e "$ovpnpid" ) {
+       unlink "$ovpncache";
+}
+else {
+
+@ovpnstatus = `cat /var/run/ovpnserver.log`;
+
+open(FILE, "$ovpnconfig");
+@ovpncfg = <FILE>;
+close (FILE);
+
+unless ( -e "$ovpncache" ) {
+       open(FILE, ">$ovpncache");
+       close (FILE);
+}
+else {
+       open(FILE, "$ovpncache");
+       @ovpncache = <FILE>;
+       close (FILE);
+}
+
+foreach (@ovpncfg)
+{
+       chomp;
+
+       if ( $_ =~ "server" ) { next; }
+
+       ( $name, $remark ) = (split (/\,/, $_))[3, 26];
+
+       $status = 'off';
+
+       unless ( grep (/$name/, @ovpncache) ) { push (@ovpncache, "$name,$remark,$status\n"); }
+}
+
+foreach (@ovpncache)
+{
+       chomp;
+
+       ( $name, $remark, $status ) = split (/\,/, $_);
+
+       if ( grep (/,$name,/, @ovpncfg) ) { push (@ovpnarray, "$name,$remark,$status\n"); }
+}
+
+foreach (@ovpnarray)
+{
+       chomp;
+       ( $name, $remark, $status ) = split (/\,/, $_);
+
+       if ( $name =~ m/_/ ) { $nameul = $name; }
+       else { ($nameul = $name) =~ s/ /_/g; }
+
+       if ( grep (/$name/, @ovpnstatus) || grep (/$nameul/, @ovpnstatus) )
+       {
+               foreach (@ovpnstatus)
+               {
+                       chomp;
+
+                       if ( $_ =~ "ROUTING TABLE" ) { last; }
+
+                       @ovpnmatch = split (/\,/, $_);
+
+                       if ( @ovpnmatch != 5 || $_ =~ "Common Name" ) { next; }
+
+                       ( $ovpnclt, $realipadr, undef, undef, $connected ) = @ovpnmatch;
+
+                       ( $ovpncltip, undef ) = split (/:/, $realipadr);
+
+                       $ovpnrwlogin  = &WIO::statustime($connected);
+
+                       if ( $nameul eq $ovpnclt || $name eq $ovpnclt ) {
+                               $ovpnrwstatus = "$Lang::tr{'wio up'}";
+                               $togglestat   = ( $status ne 'on' ) ? 1 : 0;
+                               $status       = 'on';
+                       }
+
+                       if ( ! $name =~ m/_/ ) { $ovpnclt =~ s/_/ /g; }
+
+                       if ( $nameul eq $ovpnclt || $name eq $ovpnclt ) { push (@ovpnwrite, "$name,$remark,$status\n"); }
+
+                       if ( $togglestat == 1 && ($name eq $ovpnclt || $nameul eq $ovpnclt) )
+                       {
+                               $ovpnmailsub = "WIO OVPN - $name - $ovpnrwstatus - $now";
+                               $logmsg = "Client: WIO OVPN $name - IP: $ovpncltip - Status: $ovpnrwstatus";
+                               $ovpnmailmsg = "Client : $name\nLogin  : $ovpnrwlogin\nIP     : $ovpncltip\nStatus : $ovpnrwstatus\n";
+
+                               if ( $mailremark eq 'on' ) {
+                                       $ovpnmailmsg .= "Remark : $remark\n\n";
+                               }
+
+                               &WIO::mailsender($ovpnmailsub, $ovpnmailmsg);
+                               if ( $logging eq 'on' ) { &General::log("wio","$logmsg"); }
+                               undef ($ovpnmailsub);
+                               undef ($ovpnmailmsg);
+                               $togglestat = 0;
+                       }
+               }
+       }
+       else {
+               if ( $status eq 'on' ) {
+                       $ovpnrwstatus = "$Lang::tr{'wio down'}";
+                       $status = 'off';
+                       $ovpnmailsub  = "WIO OVPN - $name - $ovpnrwstatus - $now";
+                       $logmsg = "Client: WIO OVPN $name - Status: $ovpnrwstatus";
+                       $ovpnmailmsg = "Client : $name\nLogout : $now\nStatus : $ovpnrwstatus\n";
+
+                       if ( $mailremark eq 'on' ) {
+                               $ovpnmailmsg .= "Remark : $remark\n\n";
+                       }
+
+                       &WIO::mailsender($ovpnmailsub, $ovpnmailmsg);
+                       if ( $logging eq 'on' ) { &General::log("wio","$logmsg"); }
+                       undef ($ovpnmailsub);
+                       undef ($ovpnmailmsg);
+               }
+
+               push (@ovpnwrite, "$name,$remark,$status\n");
+       }
+}
+
+open( FILE, "> $ovpncache" );
+print FILE @ovpnwrite;
+close(FILE);
+
+}
+
+if ( ! -e "$vpnpid" ) {
+       unlink "$vpncache";
+}
+else {
+
+if ( -e "$vpnpid" ) {
+       @vpnstatus = `/usr/local/bin/ipsecctrl I`;
+}
+
+open(FILE, "$vpnconfig");
+@vpncfg = <FILE>;
+close (FILE);
+
+if ( ! -e "$vpncache" ) {
+       open(FILE, ">$vpncache");
+       close (FILE);
+}
+else {
+       open(FILE, "$vpncache");
+       @vpncache = <FILE>;
+       close (FILE);
+}
+
+foreach (@vpncfg)
+{
+       chomp;
+
+       ( $activ, $name, $remark ) = (split (/\,/, $_))[1, 2, 25];
+
+       if ( $remark eq 'off' ) { $remark = '-'; }
+
+       $status = 'off';
+
+       if ( $activ eq "off" ) { next; }
+
+       unless ( grep (/$name/, @vpncache) ) { push (@vpncache, "$name,$remark,$status\n"); }
+}
+
+foreach (@vpncache)
+{
+       chomp;
+
+       ( $name, $remark, $status ) = split (/\,/, $_);
+       
+       if ( grep (/,$name,/, @vpncfg) ) { push (@vpnarray, "$name,$remark,$status\n"); }
+}
+
+foreach (@vpnarray)
+{
+       chomp;
+       
+       ( $name, $remark, $status ) = split (/\,/, $_);
+
+       if ( grep (/$name\{.*INSTALLED/ , @vpnstatus) )
+       {
+               $vpnrwstatus = "$Lang::tr{'wio up'}";
+               $togglestat   = ( $status ne 'on' ) ? 1 : 0;
+               $status       = 'on';
+       }
+       else {
+               $vpnrwstatus = "$Lang::tr{'wio down'}";
+               $togglestat   = ( $status ne 'off' ) ? 1 : 0;
+               $status       = 'off';
+       }
+
+       push (@vpnwrite, "$name,$remark,$status\n");
+
+       if ( $togglestat == 1 )
+       {
+               $vpnmailsub  = "WIO VPN - $name - $vpnrwstatus - $now";
+               $logmsg = "Client: WIO VPN $name - Status: $vpnrwstatus $now";
+
+               if ( $mailremark eq 'on' ) {
+                       if ( $status eq 'on' ) { $vpnmailmsg = "Client : $name\nLogin  : $now\nStatus : $vpnrwstatus\nRemark : $remark\n"; }
+                       else { $vpnmailmsg = "Client : $name\nLogout : $now\nStatus : $vpnrwstatus\nRemark : $remark\n"; }
+               }
+               else {
+                       if ( $status eq 'on' ) { $vpnmailmsg = "Client : $name\nLogin  : $now\nStatus : $vpnrwstatus\n"; }
+                       else { $vpnmailmsg = "Client : $name\nLogout : $now\nStatus : $vpnrwstatus\n"; }
+               }
+
+               &WIO::mailsender($vpnmailsub, $vpnmailmsg);
+               if ( $logging eq 'on' ) { &General::log("wio","$logmsg"); }
+               undef ($vpnmailsub);
+               undef ($vpnmailmsg);
+               $togglestat = 0;
+       }
+}
+
+open( FILE, "> $vpncache" );
+print FILE @vpnwrite;
+close(FILE);
+
+}
diff --git a/src/wio/wio b/src/wio/wio
new file mode 100644 (file)
index 0000000..dea5e57
--- /dev/null
@@ -0,0 +1,24 @@
+#!/bin/bash
+#
+# Script to run wio helpers
+#
+. /var/ipfire/wio/wio.conf
+
+MINUTE=`date +%M`
+
+if [ $ENABLE == on ]; then
+
+       if [ $(($MINUTE%$CRON)) == 0 ]; then
+               /var/ipfire/wio/wio.pl > /dev/null
+       fi
+
+       if [ $OVPNRWMAIL == on ]; then
+               if [ $(($MINUTE%$OVPNCRON)) == 0 ]; then
+                       /var/ipfire/wio/wiovpn.pl > /dev/null
+               fi
+       else
+               rm -f /var/log/wio/.vpncache
+               rm -f /var/log/wio/.ovpncache
+       fi
+
+fi
diff --git a/src/wio/wio-graphs.pl b/src/wio/wio-graphs.pl
new file mode 100644 (file)
index 0000000..a5a58b4
--- /dev/null
@@ -0,0 +1,127 @@
+#!/usr/bin/perl
+#
+###############################################################################
+#                                                                             #
+# IPFire.org - A linux based firewall                                         #
+# Copyright (C) 2017 Stephan Feddersen <addons@h-loit.de>                     #
+# All Rights Reserved.                                                        #
+#                                                                             #
+# 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/>.       #
+#                                                                             #
+###############################################################################
+#
+# id: wio-graphs.pl, v1.3.1 2017/07/11 21:31:16 sfeddersen
+#
+# This wio-graphs.pl is based on the Code from the IPCop WIO Addon
+# and is extremly adapted to work with IPFire.
+#
+# Autor: Stephan Feddersen
+# Co-Autor: Alexander Marx
+#
+
+package WIOGraphs;
+
+use strict;
+
+# enable only the following on debugging purpose
+#use warnings;
+
+use RRDs;
+
+require '/var/ipfire/general-functions.pl';
+require '/var/ipfire/lang.pl';
+
+my ( %mainsettings, %color ) = ();
+
+&General::readhash('/var/ipfire/main/settings', \%mainsettings);
+&General::readhash("/srv/web/ipfire/html/themes/".$mainsettings{'THEME'}."/include/colors.txt", \%color);
+
+sub wio {
+       my $hostid   = $_[0];
+       my $hostname = $_[1];
+       my $period   = $_[2];
+
+       my @rrd = ();
+
+       push @rrd, ("-");
+       push @rrd, @{&header($period, "$hostname ($Lang::tr{$period})")};
+       push @rrd, @{&body($hostid)};
+
+       RRDs::graph (@rrd);
+
+       my $error = RRDs::error;
+       print "Error in RRD::graph for Who Is Online: $error\n" if $error;
+}
+
+sub body {
+       my $hostid = shift;
+       my $result = [];
+
+       push @$result, "DEF:mode=/var/log/rrd/wio/$hostid.rrd:mode:AVERAGE";
+       push @$result, "CDEF:online=mode,UN,0,mode,IF,50,GT,100,0,IF";
+       push @$result, "CDEF:offline=mode,UN,100,mode,IF,50,LT,100,0,IF";
+       push @$result, "AREA:online".$color{"color12"}.":$Lang::tr{'wio up'}\\j";
+       push @$result, "AREA:offline".$color{"color13"}.":$Lang::tr{'wio down'}\\j";
+       push @$result, "COMMENT:\r<span size='smaller'>$Lang::tr{'wio_last_update'}\\: ". lastupdate(scalar localtime()) ."</span>\\r";
+
+       return $result;
+}
+
+sub lastupdate {
+    my $text = shift;
+
+    return undef if not defined $text;
+    $text =~ s/\\/\\\\/g;
+    $text =~ s/:/\\:/g;
+
+    return $text;
+}
+
+sub header {
+       my $period = shift;
+       my $title  = shift;
+       my $result = [];
+
+       push @$result, ("--title", "$title");
+       push @$result, ("--start", "-1$period", "-aPNG", "-i", "-z");
+       push @$result, ("--border", "0");
+       push @$result, ("--full-size-mode");
+       push @$result, ("--slope-mode");
+       push @$result, ("--pango-markup");
+       push @$result, ("--alt-y-grid", "-w 910", "-h 300");
+       if ( $period eq 'day' ) { push @$result, ("--x-grid", "MINUTE:30:HOUR:1:HOUR:2:0:%H:%M"); }
+       push @$result, ("--color", "SHADEA".$color{"color19"});
+       push @$result, ("--color", "SHADEB".$color{"color19"});
+       push @$result, ("--color", "BACK".$color{"color21"});
+
+       return $result;
+}
+
+sub wiographbox {
+       print "<center>";
+       print "<table width='100%' cellspacing='0'>";
+       print "<tr>";
+       print "<td align='center' bgcolor='".$color{"color20"}."'><a href='".$_[0]."?".$_[1]."?hour?".$_[3]."' target='".$_[1]."box'><b>".$Lang::tr{'hour'}."</b></a></td>";
+       print "<td align='center' bgcolor='".$color{"color20"}."'><a href='".$_[0]."?".$_[1]."?day?".$_[3]."' target='".$_[1]."box'><b>".$Lang::tr{'day'}."</b></a></td>";
+       print "<td align='center' bgcolor='".$color{"color20"}."'><a href='".$_[0]."?".$_[1]."?week?".$_[3]."' target='".$_[1]."box'><b>".$Lang::tr{'week'}."</b></a></td>";
+       print "<td align='center' bgcolor='".$color{"color20"}."'><a href='".$_[0]."?".$_[1]."?month?".$_[3]."' target='".$_[1]."box'><b>".$Lang::tr{'month'}."</b></a></td>";
+       print "<td align='center' bgcolor='".$color{"color20"}."'><a href='".$_[0]."?".$_[1]."?year?".$_[3]."' target='".$_[1]."box'><b>".$Lang::tr{'year'}."</b></a></td>";
+       print "</tr>";
+       print "</table>";
+       print "<table width='100%' cellspacing='0'>";
+       print "<tr><td align='center' colspan='8'>&nbsp;</td></tr>";
+       print "<tr><td align='center' colspan='8'><iframe class='graph' src='".$_[0]."?".$_[1]."?".$_[2]."?".$_[3]."' scrolling='no' marginheight='0' frameborder='no' name='".$_[1]."box'></iframe></td></tr>";
+       print "</table>";
+       print "</center>";
+}
diff --git a/src/wio/wio-lib.pl b/src/wio/wio-lib.pl
new file mode 100644 (file)
index 0000000..2f23c1d
--- /dev/null
@@ -0,0 +1,206 @@
+#!/usr/bin/perl
+#
+###############################################################################
+#                                                                             #
+# IPFire.org - A linux based firewall                                         #
+# Copyright (C) 2017 Stephan Feddersen <addons@h-loit.de>                     #
+# All Rights Reserved.                                                        #
+#                                                                             #
+# 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/>.       #
+#                                                                             #
+###############################################################################
+#
+# id: wio-lib.pl, v1.3.1 2017/07/11 21:31:16 sfeddersen
+#
+# This wio-lib.pl is based on the Code from the IPCop WIO Addon
+# and is extremly adapted to work with IPFire.
+#
+# Autor: Stephan Feddersen
+# Co-Autor: Alexander Marx
+# Co-Autor: Frank Mainz
+#
+
+package WIO;
+
+# enable only the following on debugging purpose
+#use warnings;
+
+use strict;
+use Socket;
+use Time::Local;
+use MIME::Lite;
+
+require '/var/ipfire/general-functions.pl';
+require '/var/ipfire/header.pl';
+require '/var/ipfire/lang.pl';
+
+my $mailfile = "${General::swroot}/dma/mail.conf";
+my %mail = ();
+&General::readhash($mailfile, \%mail);
+
+my $redactive = "/var/ipfire/red/active";
+my $msg = '';
+
+############################################################################################################################
+
+sub getdyndnsip {
+       my $ipadr = $_[0];
+       my $host = $_[1];
+       my @fetchip = ();
+
+       if ( -e $redactive ) {
+               @fetchip = gethostbyname($host);
+
+               if ( defined($fetchip[0]) ) {
+                       @fetchip = map ( &Socket::inet_ntoa($_), @fetchip[4..$#fetchip]);
+                       return ($fetchip[0], $Lang::tr{'wio_dyndns_success'});
+               }
+       }
+       else {
+               return ($ipadr, $Lang::tr{'wio_dyndns_info'});
+       }
+}
+
+############################################################################################################################
+
+sub contime {
+       my $str = $_[0];
+       my %m = ();
+       @m{qw/Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec/} = (0 .. 11);
+
+       if ( $str =~ /^\w{3}\ ([a-zA-Z]+)\ (\d{1,2})\ (\d{2})\:(\d{2})\:(\d{2}) (\d{4})$/ ||
+                $str =~ /^\w{3}\ ([a-zA-Z]+)\  (\d{1})\ (\d{2})\:(\d{2})\:(\d{2}) (\d{4})$/ ) 
+       {
+               my $past = timelocal($5, $4, $3, $2, $m{$1}, $6);
+               my $now  = time;
+
+               my $totalsecs = $now - $past;
+               my $days = int($totalsecs / 86400);
+               my $totalhours = int($totalsecs / 3600);
+               my $hours = $totalhours % 24;
+               my $totalmins = int($totalsecs / 60);
+               my $mins = $totalmins % 60;
+               my $secs = $totalsecs % 60;
+
+               return "${days}d ${hours}h ${mins}m ${secs}s";
+       }
+       else {
+               return;
+       }
+}
+
+############################################################################################################################
+
+sub statustime {
+       my $str = $_[0];
+       my ( $day, $mon ) = '';
+
+       my %m = qw ( Jan 01 Feb 02 Mar 03 Apr 04 May 05 Jun 06 Jul 07 Aug 08 Sep 09 Oct 10 Nov 11 Dec 12 );
+
+       if ( $str =~ /^\w{3}\ ([a-zA-Z]+)\ (\d{1,2})\ (\d{2})\:(\d{2})\:(\d{2}) (\d{4})$/ ||
+                $str =~ /^\w{3}\ ([a-zA-Z]+)\  (\d{1})\ (\d{2})\:(\d{2})\:(\d{2}) (\d{4})$/ )
+       {
+               $mon = $m{$1};
+
+               if (length $2 < 2) { $day = "0$2"; }
+               else { $day = $2; }
+
+               return "$day.$mon.$6 - $3:$4:$5";
+       }
+       else {
+               return;
+       }
+}
+
+############################################################################################################################
+
+sub mailsender {
+       $msg = MIME::Lite->new(
+               From    => $mail{'SENDER'},
+               To              => $mail{'RECIPIENT'},
+               Subject => $_[0],
+               Type    => 'multipart/mixed'
+       );
+
+       $msg->attach(
+               Type    => 'TEXT',
+               Data    => $_[1]
+       );
+
+       $msg->send_by_sendmail;
+}
+
+############################################################################################################################
+
+sub checkinto {
+       my ($checkip, $checkhost, @checkfile) = @_;
+
+       if ( $checkip ne '' ) {
+               foreach (@checkfile) {
+                       chomp;
+                       if ( (split (/\,/, $_))[2] eq $checkip ) { return $Lang::tr{'wio_ip_exists'}; last; }
+               }
+       }
+
+       if ( $checkhost ne '' ) {
+               foreach (@checkfile) {
+                       chomp;
+                       if ( (split (/\,/, $_))[3] eq $checkhost ) {
+                               if ( $checkip ne '' ) {
+                                       my $fileip = (split (/\,/, $_))[2];
+
+                                       $fileip =~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;
+
+                                       my $fileip1 = $1;
+                                       my $fileip2 = $2;
+                                       my $fileip3 = $3;
+                                       my $fileip4 = $4;
+                                       
+                                       $checkip =~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;
+
+                                       if ( $fileip1 == $1 && $fileip2 == $2 && $fileip3 == $3 ) {
+                                               return $Lang::tr{'wio_host_exists'}; last; }
+                               }
+                               else { return $Lang::tr{'wio_host_exists'}; last; }
+                       }
+               }
+       }
+
+       return;
+}
+
+############################################################################################################################
+
+sub clearfile {
+       my $file = $_[0];
+
+       open(FILE, "> $file");
+       close(FILE);
+}
+
+############################################################################################################################
+
+sub color_devices() {
+       my $output = shift;
+
+       if ( uc($output) eq "GREEN0" ) { $output = "<b><font color ='$Header::colourgreen'>$output</b>";}
+       elsif ( uc($output) eq "BLUE0" ) { $output = "<b><font color ='$Header::colourblue'>$output</b>"; }
+       elsif ( uc($output) eq "ORANGE0" ) { $output = "<b><font color ='$Header::colourorange'>$output</b>"; }
+       elsif ( uc($output) eq "RED0" ) { $output = "<b><font color ='$Header::colourred'>$output</b>"; }
+       else { return $output = "<b><font color ='#696565'>$output</b>"; }
+
+       return $output;
+}
+
+return 1;
diff --git a/src/wio/wio.cgi b/src/wio/wio.cgi
new file mode 100644 (file)
index 0000000..4fbf34a
--- /dev/null
@@ -0,0 +1,2149 @@
+#!/usr/bin/perl
+#
+###############################################################################
+#                                                                             #
+# IPFire.org - A linux based firewall                                         #
+# Copyright (C) 2017 Stephan Feddersen <addons@h-loit.de>                     #
+# All Rights Reserved.                                                        #
+#                                                                             #
+# 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/>.       #
+#                                                                             #
+###############################################################################
+#
+# id: wio.cgi, v1.3.2 2017/08/27 14:11:16 sfeddersen
+#
+# This wio.cgi is based on the Code from the IPCop WIO Addon
+# and is extremly adapted to work with IPFire.
+#
+# Autor: Stephan Feddersen
+# Co-Autor: Alexander Marx
+# Co-Autor: Frank Mainz
+#
+
+use strict;
+
+# enable only the following on debugging purpose
+#use warnings;
+#no warnings 'once';
+#use CGI::Carp 'fatalsToBrowser';
+
+my $debug = 0;
+
+use Socket;
+use POSIX qw(strftime);
+use File::Copy;
+use Fatal qw/ open /;
+use Net::Telnet;
+
+require '/var/ipfire/general-functions.pl';
+require '/var/ipfire/network-functions.pl';
+require '/var/ipfire/lang.pl';
+require '/var/ipfire/header.pl';
+require '/usr/lib/wio/wio-lib.pl';
+require '/usr/lib/wio/wio-graphs.pl';
+
+my $logdir = "/var/log/wio";
+
+my ( %mainsettings, %mailsettings, %wiosettings, %cgiparams, %netsettings, %ipshash,
+        %vpnconfighash, %ovpnconfighash, %ovpnccdconfhash, %ovpnsettings, %checked, %selected, %color ) = ();
+
+&General::readhash('/var/ipfire/main/settings', \%mainsettings);
+&General::readhash('/var/ipfire/ethernet/settings', \%netsettings);
+&General::readhash('/var/ipfire/dma/mail.conf', \%mailsettings);
+&General::readhash('/var/ipfire/wio/wio.conf', \%wiosettings);
+&General::readhash("/srv/web/ipfire/html/themes/".$mainsettings{'THEME'}."/include/colors.txt", \%color);
+&General::readhasharray('/var/ipfire/ovpn/ovpnconfig', \%ovpnconfighash);
+&General::readhash('/var/ipfire/ovpn/settings', \%ovpnsettings);
+&General::readhasharray('/var/ipfire/ovpn/ccd.conf', \%ovpnccdconfhash);
+&General::readhasharray('/var/ipfire/vpn/config', \%vpnconfighash);
+
+my $ipadrfile    = "$logdir/wioips";
+my $onoffip      = "$logdir/wioscip";
+my $wiosettings  = "/var/ipfire/wio/wio.conf";
+my $dyndnsconfig = "/var/ipfire/ddns/config";
+my $importfile   = "$logdir/importfile";
+my $wiofile      = "$logdir/wiofile";
+my $editfile     = "$logdir/editfile";
+my $hostfile     = "/var/ipfire/main/hosts";
+my $dhcpfile     = "/var/ipfire/dhcp/fixleases";
+my $imgstatic    = "/images/wio";
+my $rrddir       = "/var/log/rrd/wio";
+my $refreshbox   = '<meta http-equiv="refresh" content="0;url=/cgi-bin/wio.cgi">';
+my $sortstring   = '^IPADR|^HOST';
+my $ovpnaddon    = "/var/ipfire/ovpn";
+my $ovpnpid      = "/var/run/openvpn.pid";
+my $vpnpid       = "/var/run/charon.pid";
+my $redactive    = "/var/ipfire/red/active";
+my $redip        = '-';
+my $now          = strftime "%Y-%m-%d", localtime;
+
+if ( -e $redactive ) {
+       open(IPADDR, "/var/ipfire/red/local-ipaddress");
+       $redip = <IPADDR>;
+       close IPADDR;
+       chomp($redip);
+}
+
+my $i = 0;
+my $idarp = 0;
+my $iddyndns = 0;
+my $idvpn = 0;
+my $idovpn = 0;
+my $idsort = 0;
+my $nr = 0;
+my $count = 0;
+my $showcount = 0;
+
+my ( $infomessage, $errormessage, $importmessage, $message ) = '';
+
+my ( $buttontext, $host, $timestamp, $ipadr, $on, $remark, $dyndns, $dyndnsip, $sendemailon, $net, $dev, $iprange, $output, $write, $webinterface,
+        $sendemailoff, $pingmethode, $online, $color, $bgcolor, $exitcode, $id, $line, $interface, $counter, $vpnn2nip, $vpnn2nmask, $ddns, $edc,
+        $edd, $wmon, $wmoff, $ipfqdn, $http, $wioscan, $statustxt, $status, $key, $ic, $text, $image ) = (); 
+
+my ( @temp, @dates, @ipaddresses, @names, @remark, @sendemailon, @sendemailoff, @current, @ddns, @match, @webinterface, @arpcache, @arpadd, @line,
+        @hosts, @vpnstatus, @ovpnstatus, @activ, @dyndns, @pingmethode, @status, @id, @write, @log );
+
+my @nosaved = ('ACTION','ID','CLIENTID','TIMESTAMP','IPADR','HOST','REMARK','DYNDNS','SENDEMAILON','SENDEMAILOFF','PINGMETHODE','ONLINE','WEBINTERFACE');
+
+my @devs_color = ('GREEN','BLUE','ORANGE','RED');
+my @devs_net   = ('green0','blue0','orange0','red0');
+my @devs_img   = ('green.png','blue.png','orange.png','red.png');
+my @devs_alt   = ('green','blue','orange','red');
+
+my %ifacecolor = ( GREEN => 'wio_run_green', BLUE => 'wio_run_blue', ORANGE => 'wio_run_orange');
+
+&loadips();
+
+## some wio settings
+
+$wiosettings{'ACTION'} = '';
+$wiosettings{'COUNT'} = '';
+$wiosettings{'ID'} = '';
+$wiosettings{'CLIENTID'} = '';
+$wiosettings{'SORT'} = 'IPADR';
+$wiosettings{'HOST'} = '';
+$wiosettings{'IPADR'} = '';
+$wiosettings{'EN'} = 'on';
+$wiosettings{'REMARK'} = '';
+$wiosettings{'DYNDNS'} = '';
+$wiosettings{'CLIENTREMARK'} = '';
+$wiosettings{'SENDEMAILON'} = '';
+$wiosettings{'SENDEMAILOFF'} = '';
+$wiosettings{'PINGMETHODE'} = 'ip';
+$wiosettings{'WEBINTERFACE'} = '----';
+$wiosettings{'TIMEOUT'} = '1';
+$wiosettings{'TIMESTAMP'} = '';
+$wiosettings{'ONLINE'} = 'off';
+$wiosettings{'CRON'} = '15';
+$wiosettings{'OVPNCRON'} = '5';
+$wiosettings{'ENABLE'} = 'off';
+$wiosettings{'LOGGING'} = 'off';
+$wiosettings{'MAILREMARK'} = 'off';
+$wiosettings{'MAILSTYLE'} = 'email';
+$wiosettings{'OVPNRWMAIL'} = 'off';
+$wiosettings{'SHUTDOWN'} = 'off';
+
+&Header::getcgihash(\%wiosettings);
+&Header::getcgihash(\%mainsettings);
+&Header::getcgihash(\%mailsettings);
+&Header::getcgihash(\%netsettings);
+
+if ( $mailsettings{'USEMAIL'} eq 'on' ) { $wiosettings{'SENDEMAIL'} = 'on'; }
+else { $wiosettings{'SENDEMAIL'} = 'off'; }
+
+if ( -e $wiofile ) { goto WIOSCAN; }
+
+## get network ips
+foreach (@devs_color) {
+       if ( $netsettings{"${_}_DEV"} ne '' ) {
+               $wiosettings{"${_}_IPLOW"} = &Network::find_next_ip_address($netsettings{"${_}_NETADDRESS"}, 1);
+               $wiosettings{"${_}_IPHIGH"} = &Network::find_next_ip_address($netsettings{"${_}_BROADCAST"}, -1);
+       }
+}
+
+## save wio settings
+
+if ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_save'}.'1' ) {
+       unless ( `ps -A | grep wio.pl` ) {
+               $cgiparams{'SORT'} = $wiosettings{'SORT'};
+               $cgiparams{'CRON'} = $wiosettings{'CRON'};
+               $cgiparams{'OVPNCRON'} = $wiosettings{'OVPNCRON'};
+               $cgiparams{'ENABLE'} = $wiosettings{'ENABLE'};
+               $cgiparams{'LOGGING'} = $wiosettings{'LOGGING'};
+               $cgiparams{'TIMEOUT'} = $wiosettings{'TIMEOUT'};
+               $cgiparams{'ACTION'} = $wiosettings{'ACTION'};
+               $cgiparams{'CLIENTREMARK'} = $wiosettings{'CLIENTREMARK'};
+               $cgiparams{'MAILREMARK'} = $wiosettings{'MAILREMARK'};
+               $cgiparams{'MAILSTYLE'} = $wiosettings{'MAILSTYLE'};
+               $cgiparams{'OVPNRWMAIL'} = $wiosettings{'OVPNRWMAIL'};
+               $cgiparams{'SHUTDOWN'} = $wiosettings{'SHUTDOWN'};
+
+               &General::writehash($wiosettings, \%cgiparams);
+               &General::readhash($wiosettings, \%wiosettings);
+
+               if ( $wiosettings{'ENABLE'} eq 'off' ) {
+                       &WIO::clearfile($ipadrfile);
+                       unlink glob "$rrddir/*";
+               }
+       }
+       else {
+               $infomessage = "$Lang::tr{'wio_error_function'}";
+       }
+}
+
+## save imported clients
+
+if ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_save'}.'2' ) {
+       unless ( `ps -A | grep wio.pl` ) {
+               while ( $count < $wiosettings{'COUNT'} ) {
+                       if ( defined($wiosettings{"USE$count"}) && $wiosettings{"USE$count"} eq 'on' ) {
+                               $wiosettings{'CLIENTID'} = $wiosettings{'CLIENTID$count'};
+                               $wiosettings{'TIMESTAMP'} = $wiosettings{"TIMESTAMP$count"};
+                               $wiosettings{'IPADR'} = $wiosettings{"IPADR$count"};
+                               $wiosettings{'HOST'} = $wiosettings{"HOST$count"};
+                               $wiosettings{'EN'} = $wiosettings{"EN$count"};
+                               $wiosettings{'REMARK'} = $wiosettings{"REMARK$count"};
+                               $wiosettings{'DYNDNS'} = $wiosettings{"DYNDNS$count"};
+                               $wiosettings{'SENDEMAILON'} = $wiosettings{"SENDEMAILON$count"};
+                               $wiosettings{'SENDEMAILOFF'} = $wiosettings{"SENDEMAILOFF$count"};
+                               $wiosettings{'PINGMETHODE'} = $wiosettings{"PINGMETHODE$count"};
+                               $wiosettings{'ONLINE'} = $wiosettings{"ONLINE$count"};
+                               $wiosettings{'WEBINTERFACE'} = $wiosettings{"WEBINTERFACE$count"};
+
+                               &validSave();
+
+                               if ($errormessage) {
+                                       open(FILE, ">> $editfile");
+                                       print FILE "$wiosettings{'CLIENTID'},$wiosettings{'TIMESTAMP'},$wiosettings{'IPADR'},$wiosettings{'HOST'},$wiosettings{'EN'},$wiosettings{'REMARK'},$wiosettings{'DYNDNS'},$wiosettings{'SENDEMAILON'},$wiosettings{'SENDEMAILOFF'},$wiosettings{'PINGMETHODE'},$wiosettings{'ONLINE'},$wiosettings{'WEBINTERFACE'}\n";
+                                       close(FILE);
+                                       $importmessage = $errormessage;
+                               }
+                               else {
+                                       $wiosettings{'CLIENTID'} = &General::findhasharraykey (\%ipshash);
+                                       unshift (@current, "$wiosettings{'CLIENTID'},$wiosettings{'TIMESTAMP'},$wiosettings{'IPADR'},$wiosettings{'HOST'},$wiosettings{'EN'},$wiosettings{'REMARK'},$wiosettings{'DYNDNS'},$wiosettings{'SENDEMAILON'},$wiosettings{'SENDEMAILOFF'},$wiosettings{'PINGMETHODE'},$wiosettings{'ONLINE'},$wiosettings{'WEBINTERFACE'}\n");
+                                       &SortDataFile('',@current);
+                               }
+                       }
+                       $count++;
+               }
+
+               map ($wiosettings{$_} = '' ,@nosaved);
+               unlink ($importfile);
+               if ( -e "$editfile" ) { goto EDIT; }
+       }
+       else {
+               $infomessage = "$Lang::tr{'wio_error_function'}";
+       }
+}
+
+## add or update client
+
+if ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_client_add'} ) {
+       unless ( `ps -A | grep wio.pl` ) {
+               &validSave();
+
+               unless ($errormessage) {
+                       if ( $wiosettings{'ID'} eq '' && $wiosettings{'ACTION'} ne $Lang::tr{'edit'} ) {
+                               $wiosettings{'CLIENTID'} = &General::findhasharraykey (\%ipshash);
+                               unshift (@current, "$wiosettings{'CLIENTID'},$wiosettings{'TIMESTAMP'},$wiosettings{'IPADR'},$wiosettings{'HOST'},$wiosettings{'EN'},$wiosettings{'REMARK'},$wiosettings{'DYNDNS'},$wiosettings{'SENDEMAILON'},$wiosettings{'SENDEMAILOFF'},$wiosettings{'PINGMETHODE'},$wiosettings{'ONLINE'},$wiosettings{'WEBINTERFACE'}\n");
+                       }
+                       else {
+                               @current[$wiosettings{'ID'}] = "$wiosettings{'CLIENTID'},$wiosettings{'TIMESTAMP'},$wiosettings{'IPADR'},$wiosettings{'HOST'},$wiosettings{'EN'},$wiosettings{'REMARK'},$wiosettings{'DYNDNS'},$wiosettings{'SENDEMAILON'},$wiosettings{'SENDEMAILOFF'},$wiosettings{'PINGMETHODE'},$wiosettings{'ONLINE'},$wiosettings{'WEBINTERFACE'}\n";
+                       }
+               }
+               else { goto ERROR; }
+
+               map ($wiosettings{$_} = '' ,@nosaved);
+               &SortDataFile('',@current);
+       }
+       else {
+               $infomessage = "$Lang::tr{'wio_error_function'}";
+       }
+}
+
+## add arp client
+
+if ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_add'} ) {
+       unless ( `ps -A | grep wio.pl` ) {
+               open(FILE, "$logdir/.arpcache");
+               @arpadd = <FILE>;
+               close (FILE);
+
+               chomp(@arpadd[$wiosettings{'ID'}]);
+               @temp = split (/\,/, @arpadd[$wiosettings{'ID'}]);
+
+               $wiosettings{'CLIENTID'} = &General::findhasharraykey (\%ipshash);
+               $wiosettings{'IPADR'} = $temp[1];
+               $wiosettings{'HOST'} = $temp[2];
+               $wiosettings{'EN'} = 'on';
+
+               $wiosettings{'PINGMETHODE'} = 'ip';
+               $wiosettings{'ONLINE'} = 'off';
+
+               open(FILE, ">> $editfile");
+               print FILE "$wiosettings{'CLIENTID'},$wiosettings{'TIMESTAMP'},$wiosettings{'IPADR'},$wiosettings{'HOST'},$wiosettings{'EN'},$wiosettings{'REMARK'},$wiosettings{'DYNDNS'},$wiosettings{'SENDEMAILON'},$wiosettings{'SENDEMAILOFF'},$wiosettings{'PINGMETHODE'},$wiosettings{'ONLINE'},$wiosettings{'WEBINTERFACE'}\n";
+               close(FILE);
+
+               goto EDIT;
+       }
+       else {
+               undef($wiosettings{'ID'});
+               $infomessage = "$Lang::tr{'wio_error_function'}";
+       }
+}
+
+## enable / disabel client || enable / disable dyndns || enable / disable sendemailon || enable / disable sendemailoff || change ip / fqdn
+
+if ( $wiosettings{'ACTION'} eq $Lang::tr{'enable disable client'} ) { $edc = 'on'; }
+if ( $wiosettings{'ACTION'} eq $Lang::tr{'enable disable dyndns'} ) { $edd = 'on'; }
+if ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_mail_online'} ) { $wmon = 'on'; }
+if ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_mail_offline'} ) { $wmoff = 'on'; }
+if (( $wiosettings{'ACTION'} eq $Lang::tr{'wio_ip_on'} ) || ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_fqdn_on'} )) { $ipfqdn = 'on'; }
+
+if ( defined($edc) || defined($edd) || defined($wmon) || defined($wmoff) || defined($ipfqdn) ) {
+       unless ( `ps -A | grep wio.pl` ) {
+               chomp(@current[$wiosettings{'ID'}]);
+               @temp = split (/\,/, @current[$wiosettings{'ID'}]);
+
+               if ( $edc eq 'on' ) {
+                       $temp[4] = $temp[4] ne '' ? '' : 'on';
+                       $temp[10] = '';
+                       $temp[11] = '';
+                       $temp[1] = '';
+                       unlink "$rrddir/$temp[0].rrd";
+               }
+               elsif ( $edd eq 'on' ) { $temp[6] = $temp[6] ne '' ? '' : 'on'; }
+               elsif ( $wmon eq 'on' ) { $temp[7] = $temp[7] ne '' ? '' : 'on'; }
+               elsif ( $wmoff eq 'on' ) { $temp[8] = $temp[8] ne '' ? '' : 'on'; }
+               elsif ( $ipfqdn eq 'on' ) { $temp[9] = $temp[9] eq 'fqdn' ? 'ip' : 'fqdn'; }
+
+               @current[$wiosettings{'ID'}] = join (',', @temp)."\n";
+               undef($wiosettings{'ID'});
+
+               &writeips();
+       }
+       else {
+               undef($wiosettings{'ID'});
+               $infomessage = "$Lang::tr{'wio_error_function'}";
+       }
+}
+
+## refresh wio status || refresh single client status
+
+if ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_refresh'} || $wiosettings{'ACTION'} eq $Lang::tr{'wio_sc_refresh'} ) {
+
+       if ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_sc_refresh'} ) {
+               open(FILE, "> $onoffip");
+               print FILE @current[$wiosettings{'ID'}];
+               close(FILE);
+
+               undef($wiosettings{'ID'});
+       }
+
+unless ( `ps -A | grep wio.pl` ) {
+
+&Header::showhttpheaders();
+&Header::openpage($Lang::tr{'wio'}, 1, $refreshbox);
+&Header::openbigbox('100%', 'left', '');
+&Header::openbox('100%', 'left', $Lang::tr{'wio_info'});
+
+print"
+<table align='center' width='100%'>
+       <tr><td align='center'>$Lang::tr{'wio_msg'}</td></tr>
+       <tr><td>&nbsp;</td></tr>
+       <tr><td align='center'><img align='middle' src='/images/indicator.gif' /></td></tr>
+</table>
+";
+
+&Header::closebox();
+&Header::closebigbox();
+&Header::closepage();
+
+while ( system("/usr/local/bin/wiohelper", "&") ) {}
+
+exit 0;                
+}
+else {
+       $infomessage = "$Lang::tr{'wio_already_running'}";
+}
+
+}
+
+## refresh dyndns ip
+
+if ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_dyndns_refresh'} ) {
+       unless ( `ps -A | grep wio.pl` ) {
+               chomp(@current[$wiosettings{'ID'}]);
+               @temp = split (/\,/, @current[$wiosettings{'ID'}]);
+
+               ($temp[2], $infomessage) = &WIO::getdyndnsip($temp[2], $temp[3]);
+
+               @current[$wiosettings{'ID'}] = join (',', @temp)."\n";
+
+               &writeips();
+
+               undef($wiosettings{'ID'});
+       }
+       else {
+               $infomessage = "$Lang::tr{'wio_error_function'}";
+       }
+}
+
+## edit client
+
+if ( $wiosettings{'ACTION'} eq $Lang::tr{'edit'} ) {
+       unless ( `ps -A | grep wio.pl` ) {
+               chomp(@current[$wiosettings{'ID'}]);
+               @temp = split (/\,/, @current[$wiosettings{'ID'}]);
+
+               $wiosettings{'CLIENTID'} = $temp[0];
+               $wiosettings{'TIMESTAMP'} = $temp[1];
+               $wiosettings{'IPADR'} = $temp[2];
+               $wiosettings{'HOST'} = $temp[3];
+               $wiosettings{'EN'} = $temp[4];
+               $wiosettings{'REMARK'} = $temp[5];
+               $wiosettings{'DYNDNS'} = $temp[6];
+               $wiosettings{'SENDEMAILON'} = $temp[7];
+               $wiosettings{'SENDEMAILOFF'} = $temp[8];
+               $wiosettings{'PINGMETHODE'} = $temp[9];
+               $wiosettings{'ONLINE'} = $temp[10];
+               $wiosettings{'WEBINTERFACE'} = $temp[11];
+       }
+       else {
+               undef($wiosettings{'ACTION'});
+               $infomessage = "$Lang::tr{'wio_error_function'}";
+       }
+}
+
+## remove client
+
+if ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_remove_client'} ) {
+       unless ( `ps -A | grep wio.pl` ) {
+               chomp(@current[$wiosettings{'ID'}]);
+
+               @temp = split (/\,/, @current[$wiosettings{'ID'}]);
+
+               unlink "$rrddir/$temp[0].rrd";
+
+               splice (@current,$wiosettings{'ID'},1);
+
+               &writeips();
+
+               undef($wiosettings{'ID'});
+       }
+       else {
+               undef($wiosettings{'ID'});
+               $infomessage = "$Lang::tr{'wio_error_function'}";
+       }
+}
+
+## remove all clients
+
+if ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_remove_all'} ) {
+       unless ( `ps -A | grep wio.pl` ) {
+               &WIO::clearfile($ipadrfile);
+               unlink glob "$rrddir/*";
+               undef(@current);
+       }
+       else {
+               $infomessage = "$Lang::tr{'wio_error_function'}";
+       }
+}
+
+## back function
+
+if ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_back'} ) {
+       if ( -e "$importfile" ) { unlink ($importfile); }
+       map ($wiosettings{$_} = '' ,@nosaved);
+       undef($errormessage);
+}
+
+## import hosts, fixleases or csv file || scan networks (green/blue/orange)
+
+if ( $wiosettings{'ACTION'} eq 'wio_run_green'  ||
+        $wiosettings{'ACTION'} eq 'wio_run_blue'   ||
+        $wiosettings{'ACTION'} eq 'wio_run_orange') { $wioscan = 'on'; }
+
+if ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_import'}.'1' ||
+        $wiosettings{'ACTION'} eq $Lang::tr{'wio_import'}.'2' ||
+        $wiosettings{'ACTION'} eq $Lang::tr{'wio_import'}.'3' ||
+        defined($wioscan) || defined($importmessage) ) {
+
+unless ( `ps -A | grep wio.pl` ) {
+       if ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_import'}.'1' && $importmessage eq '' ) {
+
+               &Header::getcgihash(\%wiosettings, {'wantfile' => 1, 'filevar' => 'CSVFILE'});
+
+               if ( $wiosettings{'CSVFILE'} eq '' ) {
+                       $errormessage = $Lang::tr{'wio_no_file_selected'};
+                       $message = 2; goto ERROR;
+               }
+
+               if ( $wiosettings{'CSVFILE'} =~ /[^a-z0-9A-Z\ \.\-\_\:\\]+/ ) {
+                       $errormessage = $Lang::tr{'wio_no_csv_error'};
+                       $message = 2; goto ERROR;
+               }
+
+               if ( !($wiosettings{'CSVFILE'} =~ /.csv$/) ) {
+                       $errormessage = $Lang::tr{'wio_no_csv'};
+                       $message = 2; goto ERROR;
+               }
+
+               if (copy($wiosettings{'CSVFILE'}, "$logdir/importfile") != 1) {
+                       $errormessage = $!;
+                       $message = 2; goto ERROR;
+               }
+       }
+
+EDIT:
+
+&General::readhash($wiosettings, \%wiosettings);
+
+&Header::showhttpheaders();
+&Header::openpage($Lang::tr{'wio'}, 1, '');
+&Header::openbigbox('100%', 'left');
+
+if ($importmessage) {
+       &Header::openbox('100%', 'left', $Lang::tr{'wio_error'}, 'error');
+               print" <table width='100%'><tr><td><font class='base'>$importmessage</font></td></tr></table>";
+       &Header::closebox();
+}
+
+if ( -e "$editfile" ) {
+       open(FILE, "< $editfile" ); }
+elsif ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_import'}.'1' ) {
+       open(FILE, "< $importfile" ); }
+elsif ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_import'}.'2' ) {
+       open(FILE, "< $hostfile" ); }
+elsif ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_import'}.'3' ) {
+       open(FILE, "< $dhcpfile" ); }
+elsif ( $wioscan eq 'on' ) {
+
+       foreach (keys(%ifacecolor)) {
+               if ( $netsettings{"${_}_DEV"} eq $wiosettings{'ID'} ) {
+                       $dev = $netsettings{"${_}_DEV"};
+                       $iprange = $wiosettings{"${_}_IPLOW"} . "-" . $wiosettings{"${_}_IPHIGH"};
+
+                       if ( $_ eq 'GREEN' ) { $color = "$Header::colourgreen"; $net = $Lang::tr{'wio_msg_green'}; }
+                       elsif ( $_ eq 'BLUE' ) { $color = "$Header::colourblue"; $net = $Lang::tr{'wio_msg_blue'}; }
+                       else { $color = "$Header::colourorange"; $net = $Lang::tr{'wio_msg_orange'}; }
+               }
+       }
+
+&Header::openbox('100%', 'left', $Lang::tr{'wio_info'});
+       print"<table width='100%'>
+                 <tr><td align='center'><font class='base'>$Lang::tr{'wio_msg_left'} </font><font class='base' color='$color'><b>$net</b></font> $Lang::tr{'wio_msg_center'} <font class='base' color='$color'><b>$dev</b></font><font class='base'> $Lang::tr{'wio_msg_right'} $Lang::tr{'wio_msg_hint'}</font></td></tr>
+                 <tr><td>&nbsp;</td></tr>
+                 <tr><td align='center'><img align='middle' src='/images/indicator.gif' /></td></tr>
+                 </table>";
+&Header::closebox();
+&Header::closebigbox();
+
+       open(FILE, "/usr/local/bin/wioscan -wsa $dev $iprange |" );
+
+}
+
+@hosts = <FILE>;
+close(FILE);
+
+if ( $wioscan ne 'on' && ! -e $wiofile ) { @hosts = sort @hosts; }
+else {
+       open(FILE, "> $wiofile");
+       print FILE @hosts;
+       close(FILE);
+
+       print"<meta http-equiv=\"refresh\" content=\"0; URL=$ENV{'SCRIPT_NAME'}\">";
+       exit 0;
+}
+
+WIOSCAN:
+
+if ( -e $wiofile ) {
+       open(FILE, "< $wiofile");
+       @hosts = <FILE>;
+       close (FILE);
+
+       &General::readhash($wiosettings, \%wiosettings);
+
+       &Header::showhttpheaders();
+       &Header::openpage($Lang::tr{'wio'}, 1, '');
+       &Header::openbigbox('100%', 'left');
+}
+
+foreach (@hosts) {
+       chomp;
+
+       @line = split (/\,/, $_);
+
+       if ( -e $editfile || -e $importfile ) {
+               $wiosettings{'CLIENTID$count'} = $line[0];
+               $wiosettings{'TIMESTAMP$count'} = $line[1];
+               $wiosettings{'IPADR$count'} = $line[2];
+               $wiosettings{'HOST$count'} = $line[3];
+               $wiosettings{'EN$count'} = $line[4];
+               $wiosettings{'REMARK$count'} = $line[5];
+               $wiosettings{'DYNDNS$count'} = $line[6];
+               $wiosettings{'SENDEMAILON$count'} = $line[7];
+               $wiosettings{'SENDEMAILOFF$count'} = $line[8];
+               $wiosettings{'PINGMETHODE$count'} = $line[9];
+               $wiosettings{'ONLINE$count'} = $line[10];
+               $wiosettings{'WEBINTERFACE$count'} = $line[11];
+               $wiosettings{'USE$count'} = 'on';
+       }
+       else {
+               $wiosettings{'IPADR$count'} = $line[1];
+               $wiosettings{'EN$count'} = 'on';
+               $wiosettings{'PINGMETHODE$count'} = 'ip';
+               $wiosettings{'USE$count'} = 'on';
+
+               if ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_import'}.'2' ) {
+                       $wiosettings{'HOST$count'} = $line[2];
+                       $wiosettings{'DOM$count'} = $line[3];
+                       $wiosettings{'REMARK$count'} = '';
+               }
+               elsif ( $wioscan eq 'on' || -e $wiofile ) {
+                       $wiosettings{'HOST$count'} = gethostbyaddr(inet_aton($line[1]), AF_INET);
+                       if ($wiosettings{'HOST$count'} eq '') { $wiosettings{'HOST$count'} = $line[1]; }
+                       $wiosettings{'REMARK$count'} = '';
+                       $wiosettings{'WEBINTERFACE$count'} = '';
+               }
+               else {
+                       $wiosettings{'HOST$count'} = $line[7];
+                       $wiosettings{'REMARK$count'} = $line[6];
+               }
+       }
+
+       $checked{'EN$count'}{'on'} = ($wiosettings{'EN$count'} eq '' ) ? '' : "checked='checked'";
+
+       $checked{'DYNDNS$count'}{'on'} = ($wiosettings{'DYNDNS$count'} eq '' ) ? '' : "checked='checked'";
+       $checked{'SENDEMAILON$count'}{'on'} = ($wiosettings{'SENDEMAILON$count'} eq '' ) ? '' : "checked='checked'";
+       $checked{'SENDEMAILOFF$count'}{'on'} = ($wiosettings{'SENDEMAILOFF$count'} eq '' ) ? '' : "checked='checked'";
+
+       $checked{'PINGMETHODE$count'}{'ip'} = $checked{'PINGMETHODE$count'}{'fqdn'} = '';
+       $checked{'PINGMETHODE$count'}{$wiosettings{'PINGMETHODE$count'}} = "checked='checked'";
+
+       $checked{'USE$count'}{'on'} = ($wiosettings{'USE$count'} eq '' ) ? '' : "checked='checked'";
+       
+       $selected{'WEBINTERFACE$count'}{'----'} = '';
+       $selected{'WEBINTERFACE$count'}{'HTTP'} = '';
+       $selected{'WEBINTERFACE$count'}{'HTTPS'} = '';
+       $selected{'WEBINTERFACE$count'}{$wiosettings{'WEBINTERFACE$count'}} = "selected='selected'";
+
+if (! &WIO::checkinto($wiosettings{'IPADR$count'}, $wiosettings{'HOST$count'}, @current) ) {
+
+if ( $importmessage ) {
+       &Header::openbox('100%', 'left', "$Lang::tr{'wio_import_data'}'$wiosettings{'HOST$count'}'$Lang::tr{'wio_import_data1'}");
+} 
+elsif ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_import'}.'1' || $wioscan eq 'on' || -e $wiofile || -e $editfile ) {
+       &Header::openbox('100%', 'left', "$Lang::tr{'wio_import_data'}'$wiosettings{'HOST$count'}'$Lang::tr{'wio_import_data2'}");
+}
+elsif ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_import'}.'2' ) {
+       &Header::openbox('100%', 'left', "$Lang::tr{'wio_import_data'}'$wiosettings{'HOST$count'}.$wiosettings{'DOM$count'}'$Lang::tr{'wio_import_data2'}");
+}
+else {
+       &Header::openbox('100%', 'left', $Lang::tr{'wio_import_leases'});
+}
+
+print"
+<form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'>
+<input type='hidden' name='ONLINE$count' value='$wiosettings{'ONLINE$count'}' />
+
+<table width='100%'>
+<tr>
+       <td>$Lang::tr{'wio_use'}</td>
+       <td><input type='checkbox' name='USE$count' $checked{'USE$count'}{'on'} /></td>
+</tr>
+<tr>
+       <td>$Lang::tr{'wio_client_enable'}</td>
+       <td><input type='checkbox' name='EN$count' $checked{'EN$count'}{'on'} /></td>
+</tr>
+<tr>
+       <td>$Lang::tr{'host ip'}:</td>
+       <td><input type='text' name='IPADR$count' value='$wiosettings{'IPADR$count'}' size='18' /></td>
+       <td>$Lang::tr{'hostname'}:</td>
+";
+
+if ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_import'}.'2' ) {
+       print"<td><input type='text' name='HOST$count' size='18' value='$wiosettings{'HOST$count'}.$wiosettings{'DOM$count'}' /></td>";
+}
+else {
+       print"<td><input type='text' name='HOST$count' size='18' value='$wiosettings{'HOST$count'}' /></td>";
+}
+
+print"
+       <td>$Lang::tr{'remark'}:</td>
+       <td><input type='text' name='REMARK$count' value='$wiosettings{'REMARK$count'}' size='18' /></td>
+</tr>
+<tr>
+       <td class='base'>$Lang::tr{'wio_ping_send'}:</td>
+       <td align='left'><input type='radio' name='PINGMETHODE$count' value='ip' $checked{'PINGMETHODE$count'}{'ip'} />&nbsp;IP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type='radio' name='PINGMETHODE$count' value='fqdn' $checked{'PINGMETHODE$count'}{'fqdn'} />&nbsp;FQDN</td>
+       <td>$Lang::tr{'wio_dyndns'}:</td>
+       <td><input type='checkbox' name='DYNDNS$count' $checked{'DYNDNS$count'}{'on'} /></td>
+";
+
+if ( $wiosettings{'SENDEMAIL'} eq 'on' ) {
+       print"<td>$Lang::tr{'wio_sendemail'}:</td>
+                 <td><input type='checkbox' name='SENDEMAILON$count' $checked{'SENDEMAILON$count'}{'on'} />&nbsp;$Lang::tr{'wio_online'}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type='checkbox' name='SENDEMAILOFF$count' $checked{'SENDEMAILOFF$count'}{'on'} />&nbsp;$Lang::tr{'wio_offline'}</td>";
+}
+else {
+       print"<td colspan='2'>&nbsp;</td>";
+}
+
+print"
+</tr>
+<tr>
+       <td height='30'>$Lang::tr{'wio_link_open'}:</td>
+       <td align='left' colspan='5'>
+               <select size='1' name='WEBINTERFACE$count' width='80' style='width: 80px'>
+               <option value='----' $selected{'WEBINTERFACE$count'}{'----'}>----</option>
+               <option value='HTTP' $selected{'WEBINTERFACE$count'}{'HTTP'}>HTTP</option>
+               <option value='HTTPS' $selected{'WEBINTERFACE$count'}{'HTTPS'}>HTTPS</option>
+               </select>
+       </td>
+</tr>
+</table>
+";
+
+&Header::closebox();
+$showcount++;
+}
+$count++;
+}
+
+if ( $showcount gt 0 ) {
+&Header::openbox('100%', 'left', $Lang::tr{'wio_import_infos'});
+
+print"
+<table width='100%'>
+<tr>
+";
+
+if ($importmessage) { print"<td>&nbsp;</td>"; }
+else { print"<td><font color='$color{'color11'}'>$Lang::tr{'wio_import_infos_csv'}</font></td>"; }
+
+print"
+</tr>
+<tr><td colspan='4'>&nbsp;</td></tr>
+</table>
+<table width='100%'>
+<tr>
+       <td width='25%'>&nbsp;</td>
+       <td width='25%'><input type='hidden' name='COUNT' value='$count' /><input type='hidden' name='ACTION' value='$Lang::tr{'wio_save'}2' /><input type='submit' name='SUBMIT' value='$Lang::tr{'wio_save'}' /></form></td>
+       <td width='25%'><form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'><input type='submit' name='ACTION' value='$Lang::tr{'wio_back'}' /></form></td>
+       <td width='25%'>&nbsp;</td>
+</tr>
+</table>
+";
+
+&Header::closebox();
+&Header::closebigbox();
+&Header::closepage();
+}
+else {
+       print"<meta http-equiv=\"refresh\" content=\"0; URL=$ENV{'SCRIPT_NAME'}?INFO\">";
+}
+
+if ( -e "$editfile" ) { unlink ($editfile); }
+if ( -e "$wiofile" ) { unlink($wiofile); }
+exit 0;
+}
+else {
+       $infomessage = "$Lang::tr{'wio_error_function'}";
+}
+}
+
+## skript function
+
+if ($ENV{'QUERY_STRING'} =~ /$sortstring/ ) {
+       my $string = $ENV{'QUERY_STRING'};
+
+       if ( $string eq 'INFO' ) {
+               $infomessage = $Lang::tr{'wio_import_info_csv'};
+       }
+       else {
+               &General::readhash($wiosettings, \%wiosettings);
+
+               my $actual = $wiosettings{'SORT'};
+
+               if ($actual =~ $string) {
+                       my $Rev = '';
+                       if ($actual !~ 'Rev') { $Rev = 'Rev'; }
+                       $string.=$Rev;
+               }
+
+               system("/bin/sed -i 's#$wiosettings{'SORT'}#$string#g' $wiosettings");
+
+               $wiosettings{'SORT'} = $string;
+               map ($wiosettings{$_} = '' ,@nosaved);
+               &SortDataFile('',@current);
+       }
+}
+
+## main part
+
+ERROR:
+
+unless($message == 1) { &General::readhash($wiosettings, \%wiosettings); }
+
+for ($i=5; $i<=60; $i+=5) { $selected{'CRON'}{$i} = ''; }
+
+$selected{'CRON'}{$wiosettings{'CRON'}} = "selected='selected'";
+       
+for ($i=1; $i<=15; $i++) {
+       $selected{'TIMEOUT'}{$i} = '';
+       $selected{'OVPNCRON'}{$i} = '';
+}
+
+$selected{'TIMEOUT'}{$wiosettings{'TIMEOUT'}} = "selected='selected'";
+$selected{'OVPNCRON'}{$wiosettings{'OVPNCRON'}} = "selected='selected'";
+
+$checked{'ENABLE'}{'off'} = $checked{'ENABLE'}{'on'} = '';
+$checked{'ENABLE'}{$wiosettings{'ENABLE'}} = "checked='checked'";
+
+$checked{'LOGGING'}{'off'} = $checked{'LOGGING'}{'on'} = '';
+$checked{'LOGGING'}{$wiosettings{'LOGGING'}} = "checked='checked'";
+
+$checked{'CLIENTREMARK'}{'off'} = $checked{'CLIENTREMARK'}{'on'} = '';
+$checked{'CLIENTREMARK'}{$wiosettings{'CLIENTREMARK'}} = "checked='checked'";
+
+$checked{'MAILREMARK'}{'off'} = $checked{'MAILREMARK'}{'on'} = '';
+$checked{'MAILREMARK'}{$wiosettings{'MAILREMARK'}} = "checked='checked'";
+
+$checked{'OVPNRWMAIL'}{'off'} = $checked{'OVPNRWMAIL'}{'on'} = '';
+$checked{'OVPNRWMAIL'}{$wiosettings{'OVPNRWMAIL'}} = "checked='checked'";
+
+$checked{'SHUTDOWN'}{'off'} = $checked{'SHUTDOWN'}{'on'} = '';
+$checked{'SHUTDOWN'}{$wiosettings{'SHUTDOWN'}} = "checked='checked'";
+
+$checked{'MAILSTYLE'}{'smail'} = $checked{'MAILSTYLE'}{'email'} = '';
+$checked{'MAILSTYLE'}{$wiosettings{'MAILSTYLE'}} = "checked='checked'";
+
+&Header::showhttpheaders();
+&Header::openpage($Lang::tr{'wio'}, 1, "<meta http-equiv='expires' content='-1'><meta http-equiv='cache-control' content='no-store, no-cache, must-revalidate'><meta http-equiv='pragma' content='no-cache'>");
+&Header::openbigbox('100%', 'left', '');
+
+## DEBUG / ERROR / INFO / UPDATE
+
+if ( $debug ) {
+       &Header::openbox('100%', 'left', 'DEBUG', 'warning');
+
+               print"errormessage: $errormessage<br />\n";
+               print"infomessage: $infomessage<br />\n";
+
+               &hrline();
+               
+               my $wiodebug = 0;
+               foreach (sort keys %wiosettings) {
+                       print"$_ = $wiosettings{$_}<br />\n";
+                       $wiodebug++;
+               }
+
+               &hrline();
+
+               my $netdebug = 0;
+               foreach (sort keys %netsettings) {
+                       print"$_ = $netsettings{$_}<br />\n";
+                       $netdebug++;
+               }
+       &Header::closebox();
+}
+
+if ( $errormessage ) {
+       &Header::openbox('100%', 'left', $Lang::tr{'wio_error'}, 'error');
+               print"<table width='100%'><tr><td><font class='base'><b>$errormessage</b></font></td></tr></table>";
+       &Header::closebox();
+}
+
+if ( $infomessage ) {
+       &Header::openbox('100%', 'left', $Lang::tr{'wio_info'}, 'warning');
+               print"<table width='100%'><tr><td><font class='base'><b>$infomessage</b></font></td></tr></table>";
+       &Header::closebox();
+}
+
+## wio configuration
+
+if ( $wiosettings{'ACTION'} eq $Lang::tr{'edit'}.'1' || $message == 1 || $wiosettings{'ENABLE'} eq 'off' ) {
+
+&Header::openbox('100%', 'left', $Lang::tr{'wio settings'});
+
+print"
+<form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'>
+<table width='100%'>
+<tr>
+       <td width='45%' bgcolor='$color{'color20'}' align='left' height='20'><b>&nbsp;$Lang::tr{'wio_settings_msg'}</b></td>
+       <td width='2%'>&nbsp;</td>
+       <td width='53%'>&nbsp;</td>
+</tr>
+<tr><td colspan='3'>&nbsp;</td></tr>
+<tr>
+       <td colspan='3'>$Lang::tr{'wio_settings_msg_hint'}</td>
+</tr>
+<tr><td colspan='3'>&nbsp;</td></tr>
+<tr>
+       <td align='right'>$Lang::tr{'wio enabled'}</td>
+";
+
+print"<td>&nbsp;</td>";
+
+if ( $wiosettings{'ENABLE'} eq 'on' ) {
+       print"<td align='left'><input type='checkbox' onClick=\"return confirm('$Lang::tr{'wio_disable_hint'}')\" name='ENABLE' $checked{'ENABLE'}{'on'} /></td>";
+}
+else {
+       print"<td align='left'><input type='checkbox' name='ENABLE' $checked{'ENABLE'}{'on'} /></td>";
+}
+print"
+</tr>
+<tr><td colspan='3'>&nbsp;</td></tr>
+<tr>
+       <td align='right'>$Lang::tr{'wio_shutdown'}</td>
+       <td>&nbsp;</td>
+       <td align='left'><input type='checkbox' name='SHUTDOWN' $checked{'SHUTDOWN'}{'on'} /></td>
+</tr>
+<tr><td colspan='3'>&nbsp;</td></tr>
+<tr>
+       <td align='right'>$Lang::tr{'wio cron'}</td>
+       <td>&nbsp;</td>
+       <td align='left'><select size='1' name='CRON' size='5'>
+";
+
+for ($i=5; $i<=60; $i+=5) {
+       $_ = sprintf("%02s",$i);
+       print "<option $selected{'CRON'}{$_}>$_</option>\n";
+}
+
+print"
+       </select>&nbsp;$Lang::tr{'wio min'}</td>
+</tr>
+<tr><td colspan='3'>&nbsp;</td></tr>
+<tr>
+       <td align='right'>$Lang::tr{'wio timeout'}</td>
+       <td>&nbsp;</td>
+       <td align='left'><select size='1' name='TIMEOUT' size='5'>
+";
+
+for ($i=1; $i<=15; $i++) {
+       $_ = sprintf("%02s",$i);
+       print "<option $selected{'TIMEOUT'}{$_}>$_</option>\n";
+}
+
+print" 
+       </select>&nbsp;$Lang::tr{'wio sec'}</td>
+</tr>
+<tr><td colspan='3'>&nbsp;</td></tr>
+<tr>
+       <td align='right'>$Lang::tr{'wio_logging'}</td>
+       <td>&nbsp;</td>
+       <td align='left'><input type='checkbox' name='LOGGING' $checked{'LOGGING'}{'on'} /></td>
+</tr>
+<tr><td colspan='3'>&nbsp;</td></tr>
+<tr>
+       <td align='right'>$Lang::tr{'wio_clientremark'}</td>
+       <td>&nbsp;</td>
+       <td align='left'><input type='checkbox' name='CLIENTREMARK' $checked{'CLIENTREMARK'}{'on'} /></td>
+</tr>
+<tr><td colspan='3'>&nbsp;</td></tr>
+
+";
+
+if ( $wiosettings{'SENDEMAIL'} eq 'on' ) {
+print"
+<tr>
+       <td align='right'>$Lang::tr{'wio_mail_style'}:</td>
+       <td>&nbsp;</td>
+       <td align='left'><input type='radio' name='MAILSTYLE' value='smail' $checked{'MAILSTYLE'}{'smail'} />&nbsp;$Lang::tr{'wio_mail_smail'}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type='radio' name='MAILSTYLE' value='email' $checked{'MAILSTYLE'}{'email'} />&nbsp;$Lang::tr{'wio_mail_email'}</td>
+</tr>
+<tr><td colspan='3'>&nbsp;</td></tr>
+<tr>
+       <td align='right'>$Lang::tr{'wio_mailremark_enabled'}</td>
+       <td>&nbsp;</td>
+       <td align='left'><input type='checkbox' name='MAILREMARK' $checked{'MAILREMARK'}{'on'}></td>
+</tr>
+<tr><td colspan='3'>&nbsp;</td></tr>
+";
+}
+if ( -e "$ovpnaddon" || ! -z "/var/ipfire/vpn/config" ) {
+print"
+<tr>
+       <td align='right'>$Lang::tr{'wio_mail_ovpnrw'}</td>
+       <td>&nbsp;</td>
+       <td align='left'><input type='checkbox' name='OVPNRWMAIL' $checked{'OVPNRWMAIL'}{'on'}></td>
+</tr>
+<tr><td colspan='3'>&nbsp;</td></tr>
+<tr>
+       <td align='right'>$Lang::tr{'wio_ovpn_cron'}</td>
+       <td>&nbsp;</td>
+       <td align='left'><select size='1' name='OVPNCRON' size='5'>
+";
+
+for ($i=1; $i<=15; $i++) {
+       $_ = sprintf("%02s",$i);
+       print "<option $selected{'OVPNCRON'}{$_}>$_</option>\n";
+}
+
+print"
+       </select>&nbsp;$Lang::tr{'wio min'}</td>
+</tr>
+<tr><td colspan='3'>&nbsp;</td></tr>
+";
+}
+print"
+<tr><td colspan='3'>&nbsp;</td></tr>
+<tr>
+       <td colspan='2'>&nbsp;</td>
+       <td align='left'><input type='hidden' name='ACTION' value='$Lang::tr{'wio_save'}1' /><input type='submit' name='submit' value='$Lang::tr{'wio_save'}' />"
+       .($wiosettings{'ENABLE'} ne 'off' ? "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type='button' onClick='location.href=\"/cgi-bin/wio.cgi\"' value='$Lang::tr{'wio_back'}'>" : "")
+       ."</td>
+</tr>
+</table>
+</form>
+";
+
+&Header::closebox();
+&Header::closebigbox();
+&Header::closepage();
+exit 0;
+}
+
+## wio client status
+
+if ( $wiosettings{'ENABLE'} eq 'on') {
+       if ( !$errormessage && $wiosettings{'ACTION'} ne $Lang::tr{'edit'} || $message == 2 ) {
+               &Header::openbox('100%', 'left', $Lang::tr{'wio stat'});
+
+               foreach (@current) {
+                       chomp;
+
+                       ($id,$timestamp,$ipadr,$host,$on,$remark,$dyndns,$sendemailon,$sendemailoff,$pingmethode,$online,$webinterface) = split (/\,/, $_);
+
+                       if ( defined($dyndns) && ( $dyndns =~ 'on' ) ) {
+                               ($dyndnsip, $infomessage) = &WIO::getdyndnsip($ipadr, $host);
+
+                               if ( $dyndnsip ne $ipadr  ) {
+                                       $ipadr = $dyndnsip;
+                                       $write = 'on';
+                               }
+                       }
+
+                       push (@id,($id));
+
+                       if ( $on eq 'on' ) { push (@dates,($timestamp)); }
+                       else { push (@dates,('-')); }
+
+                       push (@ipaddresses,($ipadr));
+                       push (@names,($host));
+                       push (@activ,($on));
+                       push (@remark,($remark));
+                       push (@dyndns,($dyndns));
+                       push (@sendemailon,($sendemailon));
+                       push (@sendemailoff,($sendemailoff));
+                       push (@pingmethode,($pingmethode));
+                       push (@status,($online));
+                       push (@webinterface,($webinterface));
+
+                       push (@write, "$id,$timestamp,$ipadr,$host,$on,$remark,$dyndns,$sendemailon,$sendemailoff,$pingmethode,$online,$webinterface\n");
+
+                       $nr++;
+               }
+
+               if ( defined($write) ) { &writeips(); }
+
+## wan connection
+
+print"
+<table border='0' width='100%' bordercolor='$Header::bordercolour' cellspacing='0' cellpadding='0' style='border-collapse: collapse'>
+<tr height='20'>
+       <td width='28%' bgcolor='$color{'color20'}' align='left'><b>&nbsp;$Lang::tr{'wio_wan_con'}</b></td>
+       <td width='72%' align='right'>&nbsp;</td>
+</tr>
+<tr><td colspan='2'>&nbsp;</td></tr>
+</table>
+
+<table border='0' width='100%' bordercolor='$Header::bordercolour' cellspacing='0' cellpadding='0' style='border-collapse: collapse'>
+<tr bgcolor='$color{'color20'}' height='20'>
+       <td width='3%' align='center'><b>$Lang::tr{'wio_id'}</b></td>
+       <td width='15%' align='center'><b>$Lang::tr{'wio ipadress'}</b></td>
+       <td width='3%' align='center'><b>$Lang::tr{'wio network'}</b></td>
+       <td width='15%' align='center'><b>$Lang::tr{'wio_lanname'}</b></td>
+       <td width='15%' align='center'><b>$Lang::tr{'wio_wanname'}</b></td>
+       <td width='24%' align='center'><b>$Lang::tr{'wio_dyndns_hosts'}</b></td>
+       <td width='11%' align='center'><b>$Lang::tr{'wio image'}</b></td>
+       <td width='14%' align='center'><b>$Lang::tr{'wio_wancheck'}</b></td>
+</tr>
+<tr bgcolor='$color{'color22'}' height='20'>
+       <td align='center'>01</td>
+       <td align='center'><font color='$Header::colourred'>$redip</b></font></td>
+       <td align='center'><img align='middle' src='$imgstatic/red.png' alt='$Lang::tr{'internet'}' title='$Lang::tr{'internet'}' /></td>
+       <td align='center'><font color='$Header::colourgreen'>".$mainsettings{'HOSTNAME'}.".".$mainsettings{'DOMAINNAME'}."</font></td>
+       <td align='center'><font color='$Header::colourred'>".( $redip ne '-' ? (gethostbyaddr(pack("C4", split (/\./, $redip)), 2))[0] : '-' )."</font></td>
+       <td align='center'>
+";
+
+if ( -s "$dyndnsconfig" ) {
+
+open(FILE, "< $dyndnsconfig");
+@ddns = <FILE>;
+close (FILE);
+
+$ddns = @ddns;
+$bgcolor = "blue";
+
+       foreach (@ddns) {
+               chomp;
+
+               @temp = split (/\,/, $_);
+
+               if ( $temp[7] eq "on" ) { $bgcolor = ( &General::DyndnsServiceSync (&General::GetDyndnsRedIP,$temp[1],$temp[2]) ? "$Header::colourgreen" : "$Header::colourred" ); }
+
+               print"<font color='$bgcolor'>$temp[1].$temp[2]</font>";
+
+               if ( $iddyndns++ ne ($ddns-1) ) { print"<b>, </b>"; }
+       }
+}
+else { print"<b> - </b>"; }
+
+print"
+       </td>
+       <td align='center'>
+               <table bgcolor='".( -e $redactive ? "${Header::colourgreen}" : "${Header::colourred}" )."' cellpadding='2' cellspacing='0' width='100%'>
+                       <tr height='20'>
+                               <td align='center'><font color='white'><b>".( -e $redactive ? $Lang::tr{'wio_wan_up'} : $Lang::tr{'wio_wan_down'} )."</b></font></td>
+                       </tr>
+               </table>
+       </td>
+       <td align='center'><font color='$Header::colourred'>".( -e "$redactive" ? &General::age("$redactive") : '-' )."</font></td>
+</tr>
+<tr height='1'><td colspan='9' bgcolor='#696565'></td></tr>
+</table>
+";
+
+&hrline();
+
+## vpn connection(s)
+
+if ( -e "$vpnpid" ) {
+
+@vpnstatus = `/usr/local/bin/ipsecctrl I`;
+
+print"
+<table border='0' width='100%' bordercolor='$Header::bordercolour' cellspacing='0' cellpadding='0' style='border-collapse: collapse'>
+<tr height='20'>
+       <td width='28%' bgcolor='$color{'color20'}' align='left'><b>&nbsp;$Lang::tr{'wio_vpn_con'}</b></td>
+       <td width='72%'>&nbsp;</td>
+</tr>
+<tr><td colspan='2'>&nbsp;</td></tr>
+</table>
+<table border='0' width='100%' bordercolor='$Header::bordercolour' cellspacing='0' cellpadding='0' style='border-collapse: collapse'>
+<tr bgcolor='$color{'color20'}' height='20'>
+       <td width='3%' align='center'><b>$Lang::tr{'wio_id'}</b></td>
+       <td width='19%' align='center'><b>$Lang::tr{'wio checked'}</b></td>
+       <td width='20%' align='center'><b>$Lang::tr{'name'}</b></td>
+       <td width='8%' align='center'><b>$Lang::tr{'type'}</b></td>
+       <td width='25%' align='center'><b>$Lang::tr{'wio_common_name'}</b></td>
+       <td width='11%' align='center'><b>$Lang::tr{'wio image'}</b></td>
+       <td width='14%' align='center'><b>$Lang::tr{'wio_ovpn_connected'}</b></td>
+</tr>
+";
+
+foreach $key (sort SortByTunnelName (keys(%vpnconfighash))) {
+
+my $vpncheck = '';
+
+if ( -e '/var/log/wio/.vpncache' ) {
+       $vpncheck = strftime("%d.%m.%Y - %H:%M:%S",localtime(((stat('/var/log/wio/.vpncache'))[9])));
+}
+
+$status = "bgcolor='${Header::colourred}'";
+$statustxt = "$Lang::tr{'capsclosed'}";
+
+       if ($vpnconfighash{$key}[0] eq 'off') {
+               $status = "bgcolor='${Header::colourblue}'";
+               $statustxt = "$Lang::tr{'capsclosed'}";
+       }
+
+       foreach (@vpnstatus) {
+               if ($_ =~ /$vpnconfighash{$key}[1]\{.*INSTALLED/) {
+                       $status = "bgcolor='${Header::colourgreen}'";
+                       $statustxt = "$Lang::tr{'capsopen'}";
+                       last;
+               }
+       }
+
+       print"<tr".($idvpn % 2?" bgcolor='$color{'color20'}'":" bgcolor='$color{'color22'}'")." height='20'>";
+
+       my $vpnnr = $idvpn+1;
+
+       printf ("<td align='center'> %02d</td>", $vpnnr);
+
+       print"<td align='center'>$vpncheck</td>
+                 <td align='center'>$vpnconfighash{$key}[1]</td>
+                 <td align='center'><img align='middle' src='$imgstatic/".( $vpnconfighash{$key}[3] eq 'host' ? "vpnrw.png' alt='$Lang::tr{'wio_rw'}' title='$Lang::tr{'wio_rw'}'" : "vpnn2n.png' alt='$Lang::tr{'wio_n2n'}' title='$Lang::tr{'wio_n2n'}'")." /></td>
+                 <td align='center'>".($vpnconfighash{$key}[2] eq '%auth-dn' ? "$vpnconfighash{$key}[9]" : ($vpnconfighash{$key}[4] eq 'cert' ? "$vpnconfighash{$key}[2]" : ($vpnconfighash{$key}[8] ne '' ? "$vpnconfighash{$key}[10]" : "&nbsp;")))."</td>
+                 <td align='center'>
+                       <table $status cellpadding='2' cellspacing='0' width='100%'>
+                               <tr height='20'>
+                                       <td align='center'><font color='white'><b>$statustxt</b></font></td>
+                               </tr>
+                       </table>
+                 </td>
+                 <td align='center' height='20'>&nbsp;</td>
+                 </tr>
+";
+if ($vpnconfighash{$key}[25] && $wiosettings{'CLIENTREMARK'} eq 'on') {
+       print"<tr".($idvpn % 2?" bgcolor='$color{'color20'}'":" bgcolor='$color{'color22'}'")." height='20'><td>&nbsp;</td><td colspan='16' align='left'>$vpnconfighash{$key}[25]</td></tr>";
+}
+       print"<tr height='1'><td colspan='7' bgcolor='#696565'></td></tr>";
+       $idvpn++
+}
+
+print"</table>";
+&hrline();
+}
+
+## openvpn connection(s)
+
+if ( -e "$ovpnpid" ) {
+
+@ovpnstatus = `cat /var/run/ovpnserver.log`;
+
+print"
+<table border='0' width='100%' bordercolor='$Header::bordercolour' cellspacing='0' cellpadding='0' style='border-collapse: collapse'>
+<tr height='20'>
+       <td width='28%' bgcolor='$color{'color20'}' align='left'><b>&nbsp;$Lang::tr{'wio_ovpn_con'}</b></td>
+       <td width='72%'>&nbsp;</td>
+</tr>
+<tr><td colspan='2'>&nbsp;</td></tr>
+</table>
+<table border='0' width='100%' bordercolor='$Header::bordercolour' cellspacing='0' cellpadding='0' style='border-collapse: collapse'>
+<tr bgcolor='$color{'color20'}' height='20'>
+       <td width='3%' align='center'><b>$Lang::tr{'wio_id'}</b></td>
+       <td width='19%' align='center'><b>$Lang::tr{'wio checked'}</b></td>
+       <td width='20%' align='center'><b>$Lang::tr{'wio ipadress'}</b></td>
+       <td width='8%' align='center'><b>$Lang::tr{'type'}</b></td>
+       <td width='25%' align='center'><b>$Lang::tr{'common name'}</b></td>
+       <td width='11%' align='center'><b>$Lang::tr{'wio image'}</b></td>
+       <td width='14%' align='center'><b>$Lang::tr{'wio_ovpn_connected'}</b></td>
+</tr>
+";
+
+       foreach $key (keys %ovpnconfighash) {
+
+               my ( $ovpnclt, $ovpntime, $ovpnrwip, $ovpncheck ) = '';
+
+               if ( -e '/var/log/wio/.ovpncache' ) {
+                       $ovpncheck = strftime("%d.%m.%Y - %H:%M:%S",localtime(((stat('/var/log/wio/.ovpncache'))[9])));
+               }
+
+               print"<tr".($idovpn % 2?" bgcolor='$color{'color20'}'":" bgcolor='$color{'color22'}'")." height='20'>";
+
+               my $ovpnnr = $idovpn+1;
+
+               printf ("<td align='center' height='20'> %02d</td>", $ovpnnr);
+
+               if ($ovpnconfighash{$key}[3] eq 'net') {
+                       $image = "$imgstatic/ovpnn2n.png";
+                       $text = "$Lang::tr{'wio_n2n'}";
+               }
+               else {
+                       $image = "$imgstatic/ovpnrw.png";
+                       $text = "$Lang::tr{'wio_rw'}";
+               }
+
+               if ( $ovpnconfighash{$key}[0] eq 'off' ) {
+                       $status = "${Header::colourblue}";
+                       $statustxt = "$Lang::tr{'capsclosed'}";
+               }
+               else {
+                       
+                       if ($ovpnconfighash{$key}[3] eq 'net') {
+                               if (-e "/var/run/$ovpnconfighash{$key}[1]n2n.pid") {
+                                       my @output = "";
+                                       my @tustate = "";
+                                       my $tport = $ovpnconfighash{$key}[22];
+                                       my $tnet = new Net::Telnet ( Timeout=>5, Errmode=>'return', Port=>$tport); 
+                                       if ($tport ne '') {
+                                               $tnet->open('127.0.0.1');
+                                               @output = $tnet->cmd(String => 'state', Prompt => '/(END.*\n|ERROR:.*\n)/');
+                                               @tustate = split(/\,/, $output[1]);
+                                               $ovpntime = &WIO::contime(scalar localtime($tustate[0]));
+                                               
+                                               if (($tustate[1] eq 'CONNECTED')) {
+                                                       $status = "${Header::colourgreen}";
+                                                       $statustxt = "$Lang::tr{'capsopen'}";
+                                               }else {
+                                                       $status = "${Header::colourred}";
+                                                       $statustxt = "$tustate[1]";
+                                               }
+                                       }
+                               }
+                       }
+                       else {
+                               foreach (@ovpnstatus) {
+                                       if ( $_ =~ /^(.+),(\d+\.\d+\.\d+\.\d+\:\d+),(\d+),(\d+),(.+)/ ) {
+                                               @match = split (m/^(.+),(\d+\.\d+\.\d+\.\d+\:\d+),(\d+),(\d+),(.+)/, $_);
+                                               $match[1] =~ s/[_]/ /g;
+                                       }
+
+                                       if ( $match[1] ne "Common Name" && ($match[1] eq $ovpnconfighash{$key}[2]) ) {
+                                               $ovpnclt = $match[1];
+                                               $ovpntime = &WIO::contime($match[5]);
+                                       }
+
+                                       if ( $_ =~ /^(\d+\.\d+\.\d+\.\d+),(.+),(\d+\.\d+\.\d+\.\d+\:\d+),(.+)/ ) {
+                                               @match = split(m/^(\d+\.\d+\.\d+\.\d+),(.+),(\d+\.\d+\.\d+\.\d+\:\d+),(.+)/, $_);
+                                       }
+
+                                       if ( $match[1] ne "Virtual Address" && $match[2] eq $ovpnclt ) {
+                                                       $ovpnrwip = $match[1];
+                                                       $ovpncheck = &WIO::statustime($match[4]);
+                                       }
+
+                                       if ( $ovpnclt eq $ovpnconfighash{$key}[2] ) {
+                                               $status = "${Header::colourgreen}";
+                                               $statustxt = "$Lang::tr{'capsopen'}";
+                                       }
+                                       else {
+                                               $status = "${Header::colourred}";
+                                               $statustxt = "$Lang::tr{'capsclosed'}";
+                                       }
+                               }
+                       }
+}
+
+       print"
+       <td align='center'>$ovpncheck</td>
+       <td align='center'>".( defined($ovpnrwip)? "$ovpnrwip" : "&nbsp;")."</td>
+       <td align='center'><img align='middle' src='$image' alt='$text' title='$text' /></td>
+       <td align='center'>".($ovpnconfighash{$key}[2] eq '%auth-dn' ? "$ovpnconfighash{$key}[9]" : ($ovpnconfighash{$key}[4] eq 'cert' ? "$ovpnconfighash{$key}[2]": "&nbsp;"))."</td>
+       <td align='center'><table bgcolor='$status' cellpadding='2' cellspacing='0' width='100%'><tr height='20'><td align='center'><font color='white'><b>$statustxt</b></font></td></tr></table></td>
+       <td align='center'>".(defined($ovpntime)? "$ovpntime" : "&nbsp;")."</td>
+</tr>
+";
+               if ($ovpnconfighash{$key}[25] && $wiosettings{'CLIENTREMARK'} eq 'on') {
+                       print"<tr".($idovpn % 2?" bgcolor='$color{'color20'}'":" bgcolor='$color{'color22'}'")." height='20'><td>&nbsp;</td><td colspan='16' align='left'>$ovpnconfighash{$key}[25]</td></tr>";
+               }
+               
+               print"<tr height='1'><td colspan='17' bgcolor='#696565'></td></tr>";
+               $idovpn++
+       }
+               print"</table>";
+               &hrline();
+}
+#}
+
+## client status
+
+print"
+<table border='0' width='100%' bordercolor='$Header::bordercolour' cellspacing='0' cellpadding='0' style='border-collapse: collapse'>
+<tr height='20'>
+       <td width='28%' bgcolor='$color{'color20'}' align='left'><b>&nbsp;$Lang::tr{'wio_clients'}</b></td>
+       <td width='72%'>&nbsp;</td>
+</tr>
+<tr><td colspan='2'>&nbsp;</td></tr>
+</table>
+
+<table border='0' width='100%' bordercolor='$Header::bordercolour' cellspacing='0' cellpadding='0' style='border-collapse: collapse'>
+<tr bgcolor='$color{'color20'}' height='20'>
+       <td width='3%' align='center'><b>$Lang::tr{'wio_id'}</b></td>
+       <td width='4%' align='center'><b>$Lang::tr{'wio_activ'}</b></td>
+       <td width='5%' align='center'><b>$Lang::tr{'wio_check'}</b></td>
+       <td width='15%' align='center'><b>$Lang::tr{'wio checked'}</b></td>
+       <td width='4%' align='center'><b>$Lang::tr{'wio_webinterface'}</b></td>
+       <td width='11%' align='center'><a href='$ENV{'SCRIPT_NAME'}?IPADR'><b>$Lang::tr{'wio ipadress'}</b></a></td>
+       <td width='5%' align='center'><b>$Lang::tr{'wio network'}</b></td>
+       <td width='20%' align='center'><a href='$ENV{'SCRIPT_NAME'}?HOST'><b>$Lang::tr{'wio name'}</b></a></td>
+       <td width='11%' align='center'><b>$Lang::tr{'wio image'}</b></td>
+       <td width='4%' align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'><input type='hidden' name='ACTION' value='$Lang::tr{'wio_refresh'}' /><input type='image' name='$Lang::tr{'wio_refresh'}' src='$imgstatic/refresh.png' align='middle' alt='$Lang::tr{'wio_refresh'}' title='$Lang::tr{'wio_refresh'}' /></form></td>
+       <td width='4%' colspan='2' align='center'><b>$Lang::tr{'wio_dyndns'}</b></td>
+       <td width='12%' colspan='4' align='center'><b>$Lang::tr{'action'}</b></td>
+       <td width='3%' align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'><input type='hidden' name='ACTION' value='$Lang::tr{'wio_remove_all'}' /><input type='image' name='$Lang::tr{'wio_remove_all'}' src='/images/delete.gif' align='middle' alt='$Lang::tr{'wio_remove_all'}' title='$Lang::tr{'wio_remove_all'}' onClick=\"return confirm('$Lang::tr{'wio_remove_all_hint'}')\"/></form></td>
+</tr>
+";
+
+for (my $a=0; $a<$nr; $a++) {
+
+my $gif = 'off.gif';
+my $gdesc = $Lang::tr{'wio_client_off'};
+my $dyndnsimg = 'on.gif';
+my $dyndnsimgtxt = $Lang::tr{'wio_dyndns_on'};
+my $mailonimg = 'wio/mailgreenon.png';
+my $mailonimgtxt = $Lang::tr{'wio_mail_online_on'};
+my $mailoffimg = 'wio/mailredon.png';
+my $mailoffimgtxt = $Lang::tr{'wio_mail_offline_on'};
+my $pingimg = '';
+my $pingtxt = '';
+my $webimg = '';
+
+if ( $activ[$a] eq 'on' ) {
+       $gif = 'on.gif';
+       $gdesc = $Lang::tr{'wio_client_on'};
+}
+
+if ( $dyndns[$a] ne 'on' ) {
+       $dyndnsimg = 'off.gif';
+       $dyndnsimgtxt = $Lang::tr{'wio_dyndns_off'};
+}
+
+if ( $sendemailon[$a] ne 'on' ) {
+       $mailonimg = 'wio/mailgreenoff.png';
+       $mailonimgtxt = $Lang::tr{'wio_mail_online_off'};
+}
+
+if ( $sendemailoff[$a] ne 'on' ) {
+       $mailoffimg = 'wio/mailredoff.png';
+       $mailoffimgtxt = $Lang::tr{'wio_mail_offline_off'};
+}
+
+if ( $webinterface[$a] eq 'HTTP' ) {
+       $webimg = 'wio/http.png';
+}
+elsif ( $webinterface[$a] eq 'HTTPS' ) {
+       $webimg = 'wio/https.png';
+}
+else {
+       $webimg = 'wio/none.png';
+}
+
+$bgcolor = $status[$a] eq "on" ? "${Header::colourgreen}" : ($status[$a] eq "off" && $dates[$a] eq "") ? "${Header::colourblue}" : "${Header::colourred}";
+$statustxt = $status[$a] eq "on" ? "$Lang::tr{'wio up'}" : ($status[$a] eq "off" && $dates[$a] eq "") ? "$Lang::tr{'wio_no_image'}" : "$Lang::tr{'wio down'}";
+
+print"<tr".($a % 2?" bgcolor='$color{'color20'}'":" bgcolor='$color{'color22'}'")." height='20'>";
+printf ("<td align='center'> %02d</td>", $a+1);
+
+print"<td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'>
+         <input type='hidden' name='ACTION' value='$Lang::tr{'enable disable client'}' />
+         <input type='image' name='$Lang::tr{'enable disable client'}' src='/images/$gif' align='middle' alt='$gdesc' title='$gdesc' />
+         <input type='hidden' name='ID' value='$a' /></form></td>";
+
+if ( $pingmethode[$a] eq 'ip') {
+       print"<td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'>
+               <input type='hidden' name='ACTION' value='$Lang::tr{'wio_ip_on'}' />
+               <input type='image' name='$Lang::tr{'wio_ip_on'}' src='/images/wio/ip.png' align='middle' alt='$Lang::tr{'wio_ip_on'}' title='$Lang::tr{'wio_ip_on'}' />
+               <input type='hidden' name='ID' value='$a' /></form></td>";
+}
+else {
+       print"<td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'>
+               <input type='hidden' name='ACTION' value='$Lang::tr{'wio_fqdn_on'}' />
+               <input type='image' name='$Lang::tr{'wio_fqdn_on'}' src='/images/wio/fqdn.png' align='middle' alt='$Lang::tr{'wio_fqdn_on'}' title='$Lang::tr{'wio_fqdn_on'}' />
+               <input type='hidden' name='ID' value='$a' /></form></td>";
+}
+
+print"<td align='center'>$dates[$a]</td>";
+
+print"<td align='center'><img align='middle' src='/images/$webimg' /></td>";
+
+if ( $webinterface[$a] eq 'HTTP' ) {
+       print"<td align='center'><a title=\"$Lang::tr{'wio_webinterface_link'}\" href=\"http://$ipaddresses[$a]\" target=\"_blank\">$ipaddresses[$a]</a></td>";
+}
+elsif ( $webinterface[$a] eq 'HTTPS' ) {
+       print"<td align='center'><a title=\"$Lang::tr{'wio_webinterface_link'}\" href=\"https://$ipaddresses[$a]\" target=\"_blank\">$ipaddresses[$a]</a></td>";
+}
+else {
+       print"<td align='center'>$ipaddresses[$a]</td>";
+}
+
+my $dotip = length($ipaddresses[$a]) - rindex($ipaddresses[$a],'.');
+       SWITCH: {
+               foreach (@devs_color) {
+                       my $in = 0;
+                       $ic = "${_}";
+
+                       foreach $interface (@devs_net) {
+                       next if ( $netsettings{"$ic"."_DEV"} eq 'red0' && ($netsettings{"RED_TYPE"} eq 'DHCP' || $netsettings{"RED_TYPE"} eq 'PPPOE'));
+                               if ( $netsettings{"$ic"."_DEV"} eq $interface ) {
+                                       if ( &General::IpInSubnet($ipaddresses[$a], $netsettings{"$ic"."_NETADDRESS"}, $netsettings{"$ic"."_NETMASK"}) ) {
+                                               print"<td align='center' height='20'><img src='$imgstatic/$devs_img[$in]' alt='$Lang::tr{$devs_alt[$in]}' title='$Lang::tr{$devs_alt[$in]}' /></td>";
+                                               last SWITCH;
+                                       }
+                               }
+                       $in++;
+                       }
+               }
+
+               if ($netsettings{"RED_TYPE"} eq 'DHCP' || $netsettings{"RED_TYPE"} eq 'PPPOE') {
+                       my $redipadr = qx'ip addr | grep red0 | grep inet | awk "{print \$2}"';
+                       my @rednet = split ("/", $redipadr);
+                       chomp ($rednet[1]);
+                       my $red_netmask = General::iporsubtodec($rednet[1]);
+                       my $red_netaddress = Network::get_netaddress("$rednet[0]/$red_netmask");
+                                               
+                       if ( &General::IpInSubnet($ipaddresses[$a], $red_netaddress, $red_netmask) ) {
+                               print"<td align='center' height='20'><img src='$imgstatic/red.png' alt='$Lang::tr{'wio_red_lan'}' title='$Lang::tr{'wio_red_lan'}' /></td>";
+                               last SWITCH;
+                       }
+                       else {
+                               print"<td align='center'><img align='middle' src='$imgstatic/white.png' alt='$Lang::tr{'wio_unknown_lan'}' title='$Lang::tr{'wio_unknown_lan'}' /></td>";
+                               last SWITCH;
+                       }
+               }
+
+               if ( -e "$vpnpid" ) {
+                       foreach $key (keys(%vpnconfighash)) {
+                               next unless ($vpnconfighash{$key}[3] eq 'net');
+                               
+                               my $convertip = &General::ipcidr2msk($vpnconfighash{$key}[11]);
+                                                       
+                               my @net = split ("/", $convertip);
+
+                                       $vpnn2nip = $net[0];
+                                       $vpnn2nmask = length($net[1]) - rindex($net[1],'.');
+
+                                       if (substr($ipaddresses[$a],0,length($ipaddresses[$a])-$dotip) eq substr($vpnn2nip,0,length($vpnn2nip)-$vpnn2nmask)) {
+                                               print"<td align='center'><img align='middle' src='$imgstatic/vpn.png' alt='IPSec' title='IPSec' /></td>";
+                                               last SWITCH;
+                                       }
+                       }
+               }
+
+               if ( $ovpnsettings{'DOVPN_SUBNET'} ne '' ) {
+                       @match = split ("/", $ovpnsettings{'DOVPN_SUBNET'});
+
+                       if ( &General::IpInSubnet($ipaddresses[$a], $match[0], $match[1]) ) {
+                               print"<td align='center'><img src='$imgstatic/ovpn.png' alt='OpenVPN' title='OpenVPN' /></td>"; 
+                               last SWITCH; 
+                       }
+               }
+
+               if ( %ovpnccdconfhash ne '' ) {
+                       foreach $key (keys(%ovpnccdconfhash)) {
+                                                               
+                               my $convertip = &General::ipcidr2msk($ovpnccdconfhash{$key}[1]);
+                                                       
+                               my @net = split ("/", $convertip);
+
+                               $vpnn2nip = $net[0];
+                               $vpnn2nmask = length($net[1]) - rindex($net[1],'.');
+
+                               if (substr($ipaddresses[$a],0,length($ipaddresses[$a])-$dotip) eq substr($vpnn2nip,0,length($vpnn2nip)-$vpnn2nmask)) {
+                                       print"<td align='center'><img align='middle' src='$imgstatic/ovpn.png' alt='OpenVPN' title='OpenVPN' /></td>";
+                                       last SWITCH;
+                               }
+                                       
+                       }
+               }
+       }
+
+if ( $webinterface[$a] eq 'HTTP' ) {
+       print"<td align='center'><a title=\"$Lang::tr{'wio_webinterface_link'}\" href=\"http://$names[$a]\" target=\"_blank\">$names[$a]</a></td>";
+}
+elsif ( $webinterface[$a] eq 'HTTPS' ) {
+       print"<td align='center'><a title=\"$Lang::tr{'wio_webinterface_link'}\" href=\"https://$names[$a]\" target=\"_blank\">$names[$a]</a></td>";
+}
+else {
+       print"<td align='center'>$names[$a]</td>";
+}
+
+print"
+       <td>
+               <table bgcolor='$bgcolor' cellpadding='2' cellspacing='0' width='100%'>
+                       <tr height='20'>
+                               <td align='center'><font color='$color{'color21'}'><b>$statustxt</b></font></td>
+                       </tr>
+               </table>
+       </td>
+
+       <td width='3%' align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'>
+       <input type='hidden' name='ACTION' value='$Lang::tr{'wio_sc_refresh'}' />
+       <input type='image' name='$Lang::tr{'wio_sc_refresh'}' src='$imgstatic/refresh.png' align='middle' alt='$Lang::tr{'wio_sc_refresh'}' title='$Lang::tr{'wio_sc_refresh'}' />
+       <input type='hidden' name='ID' value='$a' /></form></td>
+
+       <td width='3%' align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'>
+       <input type='hidden' name='ACTION' value='$Lang::tr{'enable disable dyndns'}' />
+       <input type='image' name='$Lang::tr{'enable disable dyndns'}' src='/images/$dyndnsimg' align='middle' alt='$dyndnsimgtxt' title='$dyndnsimgtxt' />
+       <input type='hidden' name='ID' value='$a' /></form></td>";
+
+if ( defined($dyndns[$a]) && ($dyndns[$a] eq 'on') ) {
+       print"<td width='3%' align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'>
+                 <input type='hidden' name='ACTION' value='$Lang::tr{'wio_dyndns_refresh'}' />
+                 <input type='image' name='$Lang::tr{'wio_dyndns_refresh'}' src='/images/reload.gif' align='middle' alt='$Lang::tr{'wio_dyndns_refresh'}' title='$Lang::tr{'wio_dyndns_refresh'}' />
+                 <input type='hidden' name='ID' value='$a' /></form></td>";
+}
+else {
+       print"<td width='3%' align='center'>-</td>";
+}
+
+if ( -e "/var/log/rrd/wio/$id[$a].rrd" ) {
+       print"
+               <td width='3%' align='center'><form method='post' action='/cgi-bin/wiographs.cgi' enctype='multipart/form-data'>
+               <input type='image' name='$Lang::tr{'wio_graphs'}' src='$imgstatic/graph.png' align='middle' alt='$Lang::tr{'wio_graphs'}' title='$Lang::tr{'wio_graphs'}' />
+               <input type='hidden' name='HOSTID' value='$id[$a]' /><input type='hidden' name='HOSTNAME' value='$names[$a]' /></form></td>
+       ";
+}
+else {
+       print "<td width='3%' align='center'><img src='$imgstatic/no_graph.png' align='middle' alt='$Lang::tr{'wio_no_graphs'}' title='$Lang::tr{'wio_no_graphs'}' /></td>";
+}
+
+if ( $wiosettings{'SENDEMAIL'} eq 'on') {
+       print"<td width='3%' align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'>
+                 <input type='hidden' name='ACTION' value='$Lang::tr{'wio_mail_online'}' />
+                 <input type='image' name='$Lang::tr{'wio_mail_online'}' src='/images/$mailonimg' align='middle' alt='$mailonimgtxt' title='$mailonimgtxt' />
+                 <input type='hidden' name='ID' value='$a' /></form></td>
+                 <td width='3%' align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'>
+                 <input type='hidden' name='ACTION' value='$Lang::tr{'wio_mail_offline'}' />
+                 <input type='image' name='$Lang::tr{'wio_mail_offline'}' src='/images/$mailoffimg' align='middle' alt='$mailoffimgtxt' title='$mailoffimgtxt' />
+                 <input type='hidden' name='ID' value='$a' /></form></td>";
+}
+else {
+       print"<td width='3%' align='center'>-</td>
+                 <td width='3%' align='center'>-</td>";
+}
+
+print"
+         <td width='3%' align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'>
+         <input type='hidden' name='ACTION' value='$Lang::tr{'edit'}' />
+         <input type='image' name='$Lang::tr{'edit'}' src='/images/edit.gif' align='middle' alt='$Lang::tr{'edit'}' title='$Lang::tr{'edit'}' />
+         <input type='hidden' name='ID' value='$a' /></form></td>
+
+         <td width='3%' align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'>
+         <input type='hidden' name='ACTION' value='$Lang::tr{'wio_remove_client'}' />
+         <input type='image' name='$Lang::tr{'wio_remove_client'}' src='/images/delete.gif' align='middle' alt='$Lang::tr{'wio_remove_client'}' title='$Lang::tr{'wio_remove_client'}' onClick=\"return confirm('$Lang::tr{'wio_remove_client_hint'}')\" />
+         <input type='hidden' name='ID' value='$a' /></form></td></tr>
+";
+
+if ($remark[$a] && $wiosettings{'CLIENTREMARK'} eq 'on') {
+       print"<tr".($a % 2?" bgcolor='$color{'color20'}'":" bgcolor='$color{'color22'}'")." height='20'><td>&nbsp;</td><td colspan='16' align='left'>$remark[$a]</td></tr>";
+}
+       print"<tr height='1'><td colspan='17' bgcolor='#696565'></td></tr>";
+}
+
+print"</table>";
+
+&Header::closebox();
+
+}
+
+## add / modify client
+
+$checked{'EN'}{'on'} = ($wiosettings{'EN'} eq '' ) ? '' : "checked='checked'";
+
+$checked{'DYNDNS'}{'off'} = $checked{'DYNDNS'}{'on'} = '';
+$checked{'DYNDNS'}{$wiosettings{'DYNDNS'}} = "checked='checked'";
+
+$checked{'SENDEMAILON'}{'off'} = $checked{'SENDEMAILON'}{'on'} = '';
+$checked{'SENDEMAILON'}{$wiosettings{'SENDEMAILON'}} = "checked='checked'";
+
+$checked{'SENDEMAILOFF'}{'off'} = $checked{'SENDEMAILOFF'}{'on'} = '';
+$checked{'SENDEMAILOFF'}{$wiosettings{'SENDEMAILOFF'}} = "checked='checked'";
+
+if (! defined($errormessage) && $wiosettings{'ACTION'} ne $Lang::tr{'edit'} ) {
+       $wiosettings{'PINGMETHODE'} = 'ip';
+}
+
+$checked{'PINGMETHODE'}{'ip'} = $checked{'PINGMETHODE'}{'fqdn'} = '';
+$checked{'PINGMETHODE'}{$wiosettings{'PINGMETHODE'}} = "checked='checked'";
+
+$selected{'WEBINTERFACE'}{'----'} = '';
+$selected{'WEBINTERFACE'}{'HTTP'} = '';
+$selected{'WEBINTERFACE'}{'HTTPS'} = '';
+$selected{'WEBINTERFACE'}{$wiosettings{'WEBINTERFACE'}} = "selected='selected'";
+
+$buttontext = $Lang::tr{'wio_client_add'};
+
+if ( $wiosettings{'ACTION'} eq $Lang::tr{'edit'} || defined($errormessage)  && ! defined($message) ) {
+       &Header::openbox('100%', 'left', $Lang::tr{'wio_edit_client'});
+       $buttontext = $Lang::tr{'update'};
+}
+else {
+       &Header::openbox('100%', 'left', $Lang::tr{'wio_edit_settings'});
+}
+
+if (! defined($errormessage) && $wiosettings{'ACTION'} ne $Lang::tr{'edit'} ) {
+print"
+<table width='100%' border='0' bordercolor='$Header::bordercolour' cellspacing='0' cellpadding='0' style='border-collapse: collapse'>
+<tr>
+       <td width='28%' bgcolor='$color{'color20'}' align='left' height='20'><b>&nbsp;$Lang::tr{'wio_add'}</b></td>
+       <td width='72%' align='right'>&nbsp;</td>
+</tr>
+<tr>
+       <td>&nbsp;</td>
+</tr>
+</table>
+";
+}
+
+print"
+<form method='post' action='$ENV{'SCRIPT_NAME'}'>
+<input type='hidden' name='ID' value='$wiosettings{'ID'}' />
+<input type='hidden' name='CLIENTID' value='$wiosettings{'CLIENTID'}' />
+<input type='hidden' name='ONLINE' value='$wiosettings{'ONLINE'}' />
+<input type='hidden' name='TIMESTAMP' value='$wiosettings{'TIMESTAMP'}' />
+";
+
+print"
+<table width='100%' border='0' bordercolor='$Header::bordercolour' cellspacing='0' cellpadding='0' style='border-collapse: collapse'>
+<tr>
+       <td height='30'>$Lang::tr{'wio_client_enable'}</td>
+       <td align='left'><input type='checkbox' name='EN' $checked{'EN'}{'on'} /></td>
+       <td colspan='4'>&nbsp;</td>
+</tr>
+<tr>
+       <td height='30'>$Lang::tr{'wio ipadress'}:</td>
+       <td align='left'><input type='text' name='IPADR' value='$wiosettings{'IPADR'}' size='25' /></td>
+       <td>$Lang::tr{'wio name'}:</td>
+       <td align='left'><input type='text' name='HOST' value='$wiosettings{'HOST'}' size='25' /></td>
+       <td>$Lang::tr{'remark'}:</td>
+       <td align='left'><input type='text' name='REMARK' value='$wiosettings{'REMARK'}' size='30'></td>
+</tr>
+<tr>
+       <td height='30'>$Lang::tr{'wio_ping_send'}:</td>
+       <td align='left'><input type='radio' name='PINGMETHODE' value='ip' $checked{'PINGMETHODE'}{'ip'} />&nbsp;IP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type='radio' name='PINGMETHODE' value='fqdn' $checked{'PINGMETHODE'}{'fqdn'} />&nbsp;FQDN</td>
+       <td>$Lang::tr{'wio_dyndns'}:</td>
+       <td align='left'><input type='checkbox' name='DYNDNS' $checked{'DYNDNS'}{'on'} /></td>
+";
+
+if ( $wiosettings{'SENDEMAIL'} eq 'on' ) {
+       print"<td>$Lang::tr{'wio_sendemail'}:</td>
+                 <td><input type='checkbox' name='SENDEMAILON' $checked{'SENDEMAILON'}{'on'} />&nbsp;$Lang::tr{'wio_online'}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type='checkbox' name='SENDEMAILOFF' $checked{'SENDEMAILOFF'}{'on'} />&nbsp;$Lang::tr{'wio_offline'}</td>";
+}
+else {
+       print"<td colspan='2'>&nbsp;</td>";
+}
+
+print"
+</tr>
+<tr>
+       <td height='30'>$Lang::tr{'wio_link_open'}:</td>
+       <td align='left' colspan='5'>
+               <select size='1' name='WEBINTERFACE' width='80' style='width: 80px'>
+               <option value='----' $selected{'WEBINTERFACE'}{'----'}>----</option>
+               <option value='HTTP' $selected{'WEBINTERFACE'}{'HTTP'}>HTTP</option>
+               <option value='HTTPS' $selected{'WEBINTERFACE'}{'HTTPS'}>HTTPS</option>
+               </select>
+       </td>
+</tr>
+</table>
+<table width='100%' cellspacing='0' cellpadding='0' style='border-collapse: collapse'>
+<tr>
+       <td width='20%' align='center'>&nbsp;</td>
+";
+
+if ( $buttontext eq $Lang::tr{'update'} && ( defined($errormessage) || $wiosettings{'ACTION'} eq $Lang::tr{'edit'}) && ! defined($message) ) {
+       print"<td width='20%' align='center'>&nbsp;</td>
+                 <td width='20%' align='center'>&nbsp;</td>
+                 <td width='20%' align='center'><input type='hidden' name='ACTION' value='$Lang::tr{'wio_client_add'}' /><input type='submit' name='SUBMIT' value='$buttontext' /></td>
+                 <td width='20%' align='center'><input type='button' onClick='location.href=\"/cgi-bin/wio.cgi\"' value='$Lang::tr{'wio_back'}'></form></td>";
+}
+else {
+       print"<td width='20%' align='center'>&nbsp;</td>
+                 <td width='20%' align='center'>&nbsp;</td>
+                 <td width='20%' align='center'>&nbsp;</td>
+                 <td width='20%' align='right'><input type='hidden' name='ACTION' value='$Lang::tr{'wio_client_add'}' /><input type='submit' name='SUBMIT' value='$buttontext' /></form></td>";
+}
+
+print"
+</tr>
+</table>
+";
+
+if ( $wiosettings{'ENABLE'} eq 'on' && !$errormessage && $wiosettings{'ACTION'} ne $Lang::tr{'edit'} || $message == 2 ) {
+
+&hrline();
+
+## arp table entries
+
+print"
+<table border='0' width='100%' bordercolor='$Header::bordercolour' cellspacing='0' cellpadding='0' style='border-collapse: collapse'>
+<tr>
+       <td width='28%' bgcolor='$color{'color20'}' align='left' height='20'><b>&nbsp;$Lang::tr{'wio_arp_table_entries'}</b></td>
+       <td width='72%'>&nbsp;</td>
+</tr>
+<tr><td colspan='2'>&nbsp;</td></tr>
+</table>
+
+<table border='0' width='100%' bordercolor='$Header::bordercolour' cellspacing='0' cellpadding='0' style='border-collapse: collapse'>
+<tr bgcolor='$color{'color20'}'>
+       <td width='5%' align='center' height='20'><b>$Lang::tr{'wio_id'}</b></td>
+       <td width='20%' align='center' height='20'><b>$Lang::tr{'wio_hwaddress'}</b></td>
+       <td width='20%' align='center' height='20'><b>$Lang::tr{'wio ipadress'}</b></td>
+       <td width='15%'  align='center' height='20'><b>$Lang::tr{'wio network'}</b></td>
+       <td width='20%' align='center' height='20'><b>$Lang::tr{'wio name'}</b></td>
+       <td width='15%' align='center' height='20'><b>$Lang::tr{'wio_iface'}</b></td>
+       <td width='5%' align='center' height='20'><b>$Lang::tr{'action'}</b></td>
+</tr>
+";
+
+$output = `/sbin/ip neigh list`;
+$output = &Header::cleanhtml($output,"y");
+
+my $arpcnt = 0;
+
+foreach $line (split(/\n/, $output))
+{
+       if ($line =~ m/^(.*) dev ([^ ]+) lladdr ([0-9a-f:]*) (.*)$/) {
+               my $arphost = gethostbyaddr(inet_aton($1), AF_INET);
+               if ( $arphost eq 'localhost' ) { $arphost = ''; }
+               push (@arpcache, "$3,$1,$arphost,$2\n");
+       }
+       elsif ($line =~ m/^(.*) dev ([^ ]+)  (.*)$/) {
+               my $arphost = gethostbyaddr(inet_aton($1), AF_INET);
+               if ( $arphost eq 'localhost' ) { $arphost = ''; }
+               push (@arpcache, ",$1,$arphost,$2\n");
+       }
+
+       $arpcnt++;
+}
+
+&SortDataFile('arpcache',@arpcache);
+
+foreach (@arpcache) {
+       chomp;
+
+       @line = split (/\,/, $_);
+
+       print"<tr".($idarp % 2?" bgcolor='$color{'color20'}'":" bgcolor='$color{'color22'}'")." height='20'>";
+       printf ("<td align='center'> %02d</td>", $idarp+1);
+       print"<td align='center'>$line[0]</td>
+                 <td align='center'>$line[1]</td>";
+
+SWITCH: {
+
+       foreach (@devs_color) {
+               my $in = 0;
+               $ic = "${_}";
+
+               foreach $interface (@devs_net) {
+                       next if ( $netsettings{"$ic"."_DEV"} eq 'red0' && ($netsettings{"RED_TYPE"} eq 'DHCP' || $netsettings{"RED_TYPE"} eq 'PPPOE'));
+
+                       if ($netsettings{"$ic"."_DEV"} eq $interface) {
+                               if ( &General::IpInSubnet($line[1], $netsettings{"$ic"."_NETADDRESS"}, $netsettings{"$ic"."_NETMASK"}) ) {
+                                       print"<td align='center'><img src='$imgstatic/$devs_img[$in]' alt='$Lang::tr{$devs_alt[$in]}' title='$Lang::tr{$devs_alt[$in]}' /></td>";
+                                       last SWITCH;
+                               }
+                       }
+
+                       $in++;
+               }
+       }
+
+                       if ($netsettings{"RED_TYPE"} eq 'DHCP' || $netsettings{"RED_TYPE"} eq 'PPPOE') {
+                       my $redipadr = qx'ip addr | grep red0 | grep inet | awk "{print \$2}"';
+                       my @rednet = split ("/", $redipadr);
+                       chomp ($rednet[1]);
+                       my $red_netmask = General::iporsubtodec($rednet[1]);
+                       my $red_netaddress = Network::get_netaddress("$rednet[0]/$red_netmask");
+
+                       if ( &General::IpInSubnet($line[1], $red_netaddress, $red_netmask) ) {
+                               print"<td align='center' height='20'><img src='$imgstatic/red.png' alt='$Lang::tr{'wio_red_lan'}' title='$Lang::tr{'wio_red_lan'}' /></td>";
+                               last SWITCH;
+                       }
+                       else {
+                               print"<td align='center'><img align='middle' src='$imgstatic/white.png' alt='$Lang::tr{'wio_unknown_lan'}' title='$Lang::tr{'wio_unknown_lan'}' /></td>";
+                               last SWITCH;
+                       }
+               }
+}
+
+       print"<td align='center'>$line[2]</td>
+                 <td align='center'>".&WIO::color_devices($line[3])."</td>";
+
+       unless (&WIO::checkinto($line[1], '', @current)) {
+               print"<td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'>
+                         <input type='hidden' name='ACTION' value='$Lang::tr{'wio_add'}' />
+                         <input type='image' name='$Lang::tr{'wio_add'}' src='/images/add.gif' align='middle' alt='$Lang::tr{'wio_add'}' title='$Lang::tr{'wio_add'}' />
+                         <input type='hidden' name='ID' value='$idarp' /></form></td>";
+       }
+       else {
+               print"<td align='center'><img src='$imgstatic/add.png' align='middle' alt='$Lang::tr{'wio_no_add'}' title='$Lang::tr{'wio_no_add'}' /></td>";
+       }
+
+print"</tr>";
+print"<tr height='1'><td colspan='17' bgcolor='#696565'></td></tr>";
+$idarp++
+}
+
+print"
+</table>
+";
+
+&hrline();
+
+print"
+<table border='0' width='100%' bordercolor='$Header::bordercolour' cellspacing='0' cellpadding='0' style='border-collapse: collapse'>
+<tr>
+       <td width='28%' bgcolor='$color{'color20'}' align='left' height='20'><b>&nbsp;$Lang::tr{'wio_import_file'}</b></td>
+       <td width='72%'>&nbsp;</td>
+</tr>
+<tr><td colspan='2'>&nbsp;</td></tr>
+</table>
+<table width='100%' cellspacing='0' cellpadding='0' style='border-collapse: collapse'>
+<tr bgcolor='$color{'color22'}'>
+       <form method='post' action='/cgi-bin/wio.cgi' enctype='multipart/form-data'>
+       <td width='35%' align='right'>$Lang::tr{'wio_import_csv'}&nbsp;</td>
+       <td width='40%' align='center'><input type='file' name='CSVFILE' size='30' /></td>
+       <td width='25%' align='right'><input type='hidden' name='ACTION' value='$Lang::tr{'wio_import'}1' /><input type='submit' name='SUBMIT' value='$Lang::tr{'wio_import'}' /></td>
+       </form>
+</tr>
+<tr><td colspan='3'>&nbsp;</td></tr>
+<tr bgcolor='$color{'color22'}'>
+       <form method='post' action='/cgi-bin/wio.cgi' enctype='multipart/form-data'>
+       <td width='35%' align='right'>$Lang::tr{'wio_import_hosts'}&nbsp;</td>
+       <td width='40%' align='center'>&nbsp;</td>
+       <td width='25%' align='right'><input type='hidden' name='ACTION' value='$Lang::tr{'wio_import'}2' /><input type='submit' name='SUBMIT' value='$Lang::tr{'wio_import'}' /></td>
+       </form>
+</tr>
+<tr><td colspan='3'>&nbsp;</td></tr>
+<tr bgcolor='$color{'color22'}'>
+       <form method='post' action='/cgi-bin/wio.cgi' enctype='multipart/form-data'>
+       <td width='35%' align='right'>$Lang::tr{'wio_import_fixleases'}&nbsp;</td>
+       <td width='40%' align='center'>&nbsp;</td>
+       <td width='25%' align='right'><input type='hidden' name='ACTION' value='$Lang::tr{'wio_import'}3' /><input type='submit' name='SUBMIT' value='$Lang::tr{'wio_import'}' /></td>
+       </form>
+</tr>
+</table>
+";
+
+&hrline;
+
+print"
+<table border='0' width='100%' bordercolor='$Header::bordercolour' cellspacing='0' cellpadding='0' style='border-collapse: collapse'>
+<tr>
+       <td width='28%' bgcolor='$color{'color20'}' align='left' height='20'><b>&nbsp;$Lang::tr{'wio_net_scan'}</b></td>
+       <td width='72%'>&nbsp;</td>
+</tr>
+</table>
+<table width='100%' cellspacing='0' cellpadding='0' style='border-collapse: collapse'>
+<tr>
+       <td colspan='3'>&nbsp;</td>
+</tr>
+";
+
+foreach (keys(%ifacecolor)) {
+       if ( $_ eq 'GREEN' ) { $color = "$Header::colourgreen"; $net = $Lang::tr{'wio_net_scan_green'}; }
+       elsif ( $_ eq 'BLUE' ) { $color = "$Header::colourblue"; $net = $Lang::tr{'wio_net_scan_blue'}; }
+       else { $color = "$Header::colourorange"; $net = $Lang::tr{'wio_net_scan_orange'}; }
+
+       if ( $netsettings{"${_}_DEV"} eq 'disabled' || $netsettings{"${_}_DEV"} eq '' || $netsettings{"${_}_ADDRESS"} eq '' ) { next; }
+       else {
+               print <<END;
+
+                       <tr bgcolor='$color{'color22'}'>
+                               <td width='35%' align='right'><form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'>$Lang::tr{'wio_net_scan_vl'} <font color='$color'><b>$net</b></font> $Lang::tr{'wio_net_scan_l'}<font color='$color'><b> $netsettings{"${_}_DEV"} </b></font>$Lang::tr{'wio_net_scan_r'}</td>
+                               <td width='40%' align='center'><input type='text' name='${_}_IPLOW' value='$wiosettings{"${_}_IPLOW"}' size='14' STYLE='background-color:$color; text-align: center; color:white' /> - <input type='text' name='${_}_IPHIGH' value='$wiosettings{"${_}_IPHIGH"}' size='14' STYLE='background-color:$color; text-align: center; color:white' /></td>
+                               <td width='25%' align='right'><input type='hidden' name='ACTION' value='$ifacecolor{$_}' /><input type='hidden' name='ID' value='$netsettings{"${_}_DEV"}' /><input type='submit' name='SUBMIT' value='$Lang::tr{'wio_net_scan_run'}'></form></td>
+                       </tr>
+                       <tr>
+                               <td colspan='3'>&nbsp;</td>
+                       </tr>
+END
+       }
+}
+
+print"
+</tr>
+</table>
+</form>
+";
+
+&Header::closebox();
+}
+
+if ( $wiosettings{'ENABLE'} eq 'on' && !$errormessage && $wiosettings{'ACTION'} ne $Lang::tr{'edit'} || $message == 2 ) {
+
+&Header::openbox('100%', 'left', $Lang::tr{'wio_service'});
+
+print"
+<table border='0' width='100%' bordercolor='$Header::bordercolour' cellspacing='0' cellpadding='0' style='border-collapse: collapse'>
+<tr bgcolor='$color{'color22'}'>
+       <td colspan='2' align='right'></td>
+";
+
+if ( $wiosettings{'LOGGING'} eq 'on' ) {
+       print"<td width='10%' align='right'><form method='post' action='/cgi-bin/logs.cgi/log.dat' enctype='multipart/form-data'><input type='hidden' name='SECTION' value='wio' /><input type='submit' name='SUBMIT' value='$Lang::tr{'system logs'}' /></form></td>";
+}
+
+print"
+       <td width='10%' align='right'><form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'><input type='hidden' name='ACTION' value='$Lang::tr{'edit'}1' /><input type='submit' name='SUBMIT' value='$Lang::tr{'wio_edit_set'}' /></form></td>
+</tr>
+</table>
+";
+}
+
+&Header::closebox();
+}
+
+&Header::closebigbox();
+&Header::closepage();
+
+############################################################################################################################
+
+sub SortDataFile {
+my ($data,@checkfile) = @_;
+       my $idsort = 0;
+       our %entries = ();
+
+       sub sortips {
+               my $qs = '';
+
+               if (rindex ($wiosettings{'SORT'},'Rev') != -1) {
+                       $qs = substr ($wiosettings{'SORT'},0,length($wiosettings{'SORT'})-3);
+
+                       if ($qs eq 'IPADR') {
+                               my @a = split (/\./,$entries{$a}->{$qs});
+                               my @b = split (/\./,$entries{$b}->{$qs});
+                               ($b[0]<=>$a[0]) ||
+                               ($b[1]<=>$a[1]) ||
+                               ($b[2]<=>$a[2]) ||
+                               ($b[3]<=>$a[3]);
+                       }
+                       else {
+                               $entries{$b}->{$qs} cmp $entries{$a}->{$qs};
+                       }
+               }
+               else {
+                       $qs = $wiosettings{'SORT'};
+
+                       if ($qs eq 'IPADR') {
+                               my @a = split (/\./,$entries{$a}->{$qs});
+                               my @b = split (/\./,$entries{$b}->{$qs});
+                               ($a[0]<=>$b[0]) ||
+                               ($a[1]<=>$b[1]) ||
+                               ($a[2]<=>$b[2]) ||
+                               ($a[3]<=>$b[3]);
+                       }
+                       else {
+                               $entries{$a}->{$qs} cmp $entries{$b}->{$qs};
+                       }
+               }
+       }
+
+       if ($data eq 'arpcache') {
+               foreach (@checkfile) {
+                       chomp;
+                       @temp = split (',', $_);
+
+                       my @record = ('KEY',$idsort++,'MAC',$temp[0],'IPADR',$temp[1],'HOST',$temp[2],'REMARK',$temp[3],'IFACE',$temp[4]);
+                       my $record = ();
+                       %{$record} = @record; 
+                       $entries{$record->{KEY}} = $record;
+               }
+
+               open(FILE, "> $logdir/.arpcache");
+
+               foreach (sort sortips keys %entries) {
+                       print FILE "$entries{$_}->{MAC},$entries{$_}->{IPADR},$entries{$_}->{HOST},$entries{$_}->{REMARK},$entries{$_}->{IFACE},$entries{$_}->{HW}\n";
+               }
+
+               close(FILE);
+
+               open (FILE, "$logdir/.arpcache");
+               @arpcache = <FILE>;
+               close (FILE);
+       }
+       else {
+               foreach (@checkfile) {
+                       chomp;
+                       @temp = split (',', $_);
+
+                       my @record = ('KEY',$idsort++,'CLIENTID',$temp[0],'TIMESTAMP',$temp[1],'IPADR',$temp[2],'HOST',$temp[3],'EN',$temp[4],'REMARK',$temp[5],'DYNDNS',$temp[6],'SENDEMAILON',$temp[7],'SENDEMAILOFF',$temp[8],'PINGMETHODE',$temp[9],'ONLINE',$temp[10],'WEBINTERFACE',$temp[11]);
+                       my $record = ();
+                       %{$record} = @record; 
+                       $entries{$record->{KEY}} = $record;
+               }
+
+               open(FILE, "> $ipadrfile");
+
+               foreach (sort sortips keys %entries) {
+                       print FILE "$entries{$_}->{CLIENTID},$entries{$_}->{TIMESTAMP},$entries{$_}->{IPADR},$entries{$_}->{HOST},$entries{$_}->{EN},$entries{$_}->{REMARK},$entries{$_}->{DYNDNS},$entries{$_}->{SENDEMAILON},$entries{$_}->{SENDEMAILOFF},$entries{$_}->{PINGMETHODE},$entries{$_}->{ONLINE},$entries{$_}->{WEBINTERFACE}\n";
+               }
+
+               close(FILE);
+
+               &loadips();
+       }
+}
+
+############################################################################################################################
+
+sub hrline { 
+
+print"<table width='100%'><tr><td colspan='2' height='35'><hr></td></tr></table>";
+
+}
+
+############################################################################################################################
+
+sub back {
+
+print"<table width='100%'><tr><td width='10%'><a href='/cgi-bin/wio.cgi'><img src='/images/wio/back.png' alt='$Lang::tr{'wio_back'}' title='$Lang::tr{'wio_back'}' /></a></td><td>&nbsp;</td></tr></table>";
+
+}
+
+############################################################################################################################
+
+sub loadips {
+
+&General::readhasharray($ipadrfile, \%ipshash);
+
+open(FILE, "< $ipadrfile");
+@current = <FILE>;
+close (FILE);
+
+}
+
+############################################################################################################################
+
+sub writeips {
+
+open(FILE, "> $ipadrfile");
+if ( defined($write) ) { print FILE @write; }
+else { print FILE @current; }
+close(FILE);
+
+}
+
+############################################################################################################################
+
+sub SortByTunnelName
+{
+    if ($vpnconfighash{$a}[1] lt $vpnconfighash{$b}[1]) {
+        return -1;
+    }
+    elsif ($vpnconfighash{$a}[1] gt $vpnconfighash{$b}[1]) {
+        return 1;
+    }
+    else {
+        return 0;
+    }
+}
+
+############################################################################################################################
+
+sub validSave
+{
+       if ( $wiosettings{'IPADR'} eq '' && $wiosettings{'PINGMETHODE'} eq 'ip' && $wiosettings{'DYNDNS'} eq '' ) {
+               $errormessage = $Lang::tr{'wio_ip_empty'};
+       }
+
+       if ( $wiosettings{'IPADR'} ne '' && (! &General::validip($wiosettings{'IPADR'})) ) {
+               $errormessage = $Lang::tr{'wio_ip_error'};
+       }
+
+       if ( $wiosettings{'HOST'} eq '' && $wiosettings{'PINGMETHODE'} eq 'fqdn' ) {
+               $errormessage = $Lang::tr{'wio_host_empty'};
+       }
+
+       if ( $wiosettings{'HOST'} ne '' && (! &General::validdomainname($wiosettings{'HOST'})) ) {
+               $errormessage = $Lang::tr{'wio_host_error'};
+       }
+
+       if ( $wiosettings{'DYNDNS'} eq 'on' && (! defined($errormessage)) ) {
+               unless(&General::validfqdn($wiosettings{'HOST'})) { $errormessage = $Lang::tr{'wio_fqdn_error'}; }
+               ( $wiosettings{'IPADR'}, $infomessage ) = &WIO::getdyndnsip($wiosettings{'IPADR'}, $wiosettings{'HOST'});
+               $wiosettings{'PINGMETHODE'} = 'fqdn';
+       }
+
+       if ( $wiosettings{'ID'} eq '' && ! defined($errormessage) ) { $errormessage = &WIO::checkinto($wiosettings{'IPADR'}, $wiosettings{'HOST'}, @current); }
+
+       if ( $wiosettings{'REMARK'} ne '' ) { $wiosettings{'REMARK'} =~ s/,/&#44;/g; }
+}
diff --git a/src/wio/wiographs.cgi b/src/wio/wiographs.cgi
new file mode 100644 (file)
index 0000000..06b6946
--- /dev/null
@@ -0,0 +1,73 @@
+#!/usr/bin/perl
+#
+###############################################################################
+#                                                                             #
+# IPFire.org - A linux based firewall                                         #
+# Copyright (C) 2017 Stephan Feddersen <addons@h-loit.de>                     #
+# All Rights Reserved.                                                        #
+#                                                                             #
+# 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/>.       #
+#                                                                             #
+###############################################################################
+#
+# id: wiographs.cgi, v1.3.2 2017/08/27 14:11:16 sfeddersen
+#
+# This wiographs.cgi is based on the Code from the IPCop WIO Addon
+# and is extremly adapted to work with IPFire.
+#
+# Autor: Stephan Feddersen
+# Co-Autor: Alexander Marx
+#
+
+use strict;
+
+# enable only the following on debugging purpose
+#use warnings;
+#no warnings 'once';
+#use CGI::Carp 'fatalsToBrowser';
+
+use CGI;
+my $cgi = new CGI;
+my $hostid  = $cgi->param("HOSTID");
+my $hostname = $cgi->param("HOSTNAME");
+
+require '/var/ipfire/general-functions.pl';
+require '/var/ipfire/header.pl';
+require '/var/ipfire/lang.pl';
+require '/usr/lib/wio/wio-graphs.pl';
+
+my @querry =  split(/\?/,$ENV{'QUERY_STRING'});
+
+$querry[0] = '' unless defined $querry[0]; # hostid
+$querry[1] = '' unless defined $querry[1]; # period
+$querry[2] = '' unless defined $querry[2]; # hostname
+
+if ($querry[0] =~ "$hostid") {
+       print "Content-type: image/png\n\n";
+       binmode(STDOUT);
+       &WIOGraphs::wio($querry[0], $querry[2], $querry[1]);
+}
+else {
+       &Header::showhttpheaders();
+       &Header::openpage("$Lang::tr{'wio'}", 1, '');
+       &Header::openbigbox('100%', 'left');
+       &Header::openbox('100%', 'left', "$Lang::tr{'wio_graphs_stat'} $hostname");
+       &WIOGraphs::wiographbox("wiographs.cgi","$hostid","day","$hostname");
+       print"<table width='100%'><tr><td align='center'><a href='/cgi-bin/wio.cgi'><img src='/images/wio/back.png' alt='$Lang::tr{'wio_back'}' title='$Lang::tr{'wio_back'}' /></a></td></tr></table>";
+       &Header::closebox();
+       &Header::closebigbox();
+       &Header::closepage();
+}
+
+1;
diff --git a/src/wio/wioips b/src/wio/wioips
new file mode 100644 (file)
index 0000000..e69de29