/root/.bash_history
/var/ipfire/ethernet/aliases
/var/ipfire/ethernet/wireless
+/var/ipfire/captive/*
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;
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;
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
# 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
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
############################################################################################################################
############################################################################################################################
-print "$ARGV[0] $ARGV[1]";
-
if ( "$ARGV[0]" eq "mount" ) {
system("/bin/cp -f /etc/fstab $fstab");
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";
# 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
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
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
#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
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
#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
#
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
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.
--- /dev/null
+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>
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/
AuthName "IPFire - Restricted"
AuthType Basic
AuthUserFile /var/ipfire/auth/users
- Require user admin
+ <RequireAll>
+ Require user admin
+ Require ssl
+ </RequireAll>
</Directory>
</VirtualHost>
<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>
# 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
# 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
<Directory /srv/web/openmailadmin>
Options +FollowSymlinks
AllowOverride None
- Order allow,deny
- Allow from all
+ Require all granted
</Directory>
</VirtualHost>
AuthType Basic
AuthUserFile /etc/icinga/htpasswd.users
- Order allow,deny
- Allow from all
-
Require valid-user
</Directory>
AuthType Basic
AuthUserFile /etc/icinga/htpasswd.users
- Order allow,deny
- Allow from all
-
Require valid-user
</Directory>
</VirtualHost>
'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',
# 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
# 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
include /etc/httpd/conf/conf.d/php*.conf
Options None
AllowOverride None
- Order allow,deny
- Allow from all
+ Require all granted
</Directory>
</VirtualHost>
nsComment = "OpenSSL Generated Certificate"
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer:always
+extendedKeyUsage = clientAuth
+keyUsage = digitalSignature
[ server ]
nsComment = "OpenSSL Generated Server Certificate"
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer:always
+extendedKeyUsage = serverAuth
+keyUsage = digitalSignature, keyEncipherment
[ v3_req ]
basicConstraints = CA:FALSE
<Directory /srv/web/owncloud>
Options Indexes FollowSymlinks MultiViews
AllowOverride ALL
- Order allow,deny
- Allow from all
+ Require all granted
</Directory>
</VirtualHost>
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
<Directory /srv/web/phpSANE>
Options None
AllowOverride None
- Order allow,deny
- Allow from all
+ Require all granted
</Directory>
</VirtualHost>
#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
#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
#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
#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
#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
#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
#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
#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
#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
#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
#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
#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
#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
#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
#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
#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
#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
#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
#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
#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
#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
#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
#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
#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
#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
#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
#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
#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
#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
#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
#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
#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
#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
#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
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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+#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
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
#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
#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
#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
#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
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
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
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
#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
#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
--- /dev/null
+#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
--- /dev/null
+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
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
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
#usr/man/man1/php-config.1
#usr/man/man1/php.1
#usr/man/man1/phpize.1
-etc/httpd/conf/conf.d/php5.conf
#sbin
#srv
#usr/bin
+usr/bin/captive-cleanup
#usr/bin/perl
#usr/include
#usr/lib
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
etc/strongswan.d/swanctl.conf
#etc/swanctl
etc/swanctl/bliss
+etc/swanctl/conf.d
etc/swanctl/ecdsa
etc/swanctl/pkcs12
etc/swanctl/pkcs8
--- /dev/null
+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
#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
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
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
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
#sbin
#srv
#usr/bin
+usr/bin/captive-cleanup
#usr/bin/perl
#usr/include
#usr/lib
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
--- /dev/null
+../../../common/apache2
\ No newline at end of file
--- /dev/null
+../../../common/bootstrap
\ No newline at end of file
--- /dev/null
+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
--- /dev/null
+../../../common/logrotate
\ No newline at end of file
--- /dev/null
+../../../common/openvpn
\ No newline at end of file
--- /dev/null
+../../../common/perl-Font-TTF
\ No newline at end of file
--- /dev/null
+../../../common/perl-IO-String
\ No newline at end of file
--- /dev/null
+../../../common/perl-PDF-API2
\ No newline at end of file
--- /dev/null
+../../../common/ubuntu-font-family
\ No newline at end of file
--- /dev/null
+../../../common/wpa_supplicant
\ No newline at end of file
--- /dev/null
+#!/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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+../../../../common/armv5tel/util-linux
\ No newline at end of file
--- /dev/null
+etc/system-release
+etc/issue
+etc/rc.d/init.d/ntp
+etc/rc.d/init.d/unbound
+var/ipfire/langs
--- /dev/null
+../../../common/gnutls
\ No newline at end of file
--- /dev/null
+../../../common/grep
\ No newline at end of file
--- /dev/null
+../../../../common/i586/openssl-sse2
\ No newline at end of file
--- /dev/null
+../../../../common/i586/strongswan-padlock
\ No newline at end of file
--- /dev/null
+../../../../common/i586/util-linux
\ No newline at end of file
--- /dev/null
+../../../common/libgcrypt
\ No newline at end of file
--- /dev/null
+../../../common/logrotate
\ No newline at end of file
--- /dev/null
+../../../common/mdadm
\ No newline at end of file
--- /dev/null
+../../../common/openssl
\ No newline at end of file
--- /dev/null
+../../../common/openvpn
\ No newline at end of file
--- /dev/null
+../../../common/pcre
\ No newline at end of file
--- /dev/null
+../../../common/squid
\ No newline at end of file
--- /dev/null
+../../../common/strongswan
\ No newline at end of file
--- /dev/null
+../../../common/unbound
\ No newline at end of file
--- /dev/null
+../../../../common/x86_64/util-linux
\ No newline at end of file
--- /dev/null
+#!/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
--- /dev/null
+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
--- /dev/null
+../../../common/apache2
\ No newline at end of file
--- /dev/null
+../../../common/apr
\ No newline at end of file
--- /dev/null
+../../../common/aprutil
\ No newline at end of file
--- /dev/null
+etc/system-release
+etc/issue
+etc/rc.d/init.d/unbound
+srv/web/ipfire/cgi-bin/extrahd.cgi
+var/ipfire/langs
--- /dev/null
+../../../common/gnutls
\ No newline at end of file
--- /dev/null
+../../../common/hdparm
\ No newline at end of file
--- /dev/null
+../../../../common/i586/strongswan-padlock
\ No newline at end of file
--- /dev/null
+../../../common/php
\ No newline at end of file
--- /dev/null
+../../../common/squid
\ No newline at end of file
--- /dev/null
+../../../common/strongswan
\ No newline at end of file
--- /dev/null
+../../../common/unbound
\ No newline at end of file
--- /dev/null
+#!/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
--- /dev/null
+usr/sbin/iftop
+#usr/share/man/man8/iftop.8
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
--- /dev/null
+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
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
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
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
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
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-----
; 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
;
. 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
;
;
. 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
;
;
. 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
;
+. 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}
##############################################################################
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
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?).
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
# 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
--- /dev/null
+#!/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();
--- /dev/null
+#!/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;
+}
--- /dev/null
+#!/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);
--- /dev/null
+#!/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";
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();
my %sections = (
'auth' => '(\w+\(pam_unix\)\[.*\]: )',
+ 'wio' => '(wio|wio\[.*\])',
+ 'captive' => '(Captive:)',
'clamav' => '(clamd\[.*\]: |freshclam\[.*\]: )',
'collectd' => '(collectd\[.*\]: )',
'cron' => '(fcron\[.*\]: )',
# 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',
}
}
}
-
- 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";
}
}
}
- 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";
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";
} 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>";
if ($grp =~ m/^e(.*)$/) {
push(@algo, "ecp$1");
+ } elsif ($grp =~ m/curve25519/) {
+ push(@algo, "$grp");
} else {
push(@algo, "modp$grp");
}
# noop
} elsif ($grp =~ m/^e(.*)$/) {
push(@algo, "ecp$1");
+ } elsif ($grp =~ m/curve25519/) {
+ push(@algo, "$grp");
} else {
push(@algo, "modp$grp");
}
$memory=0;
}
-&Header::openpage('', 1, '', '');
+&Header::openpage($Lang::tr{'wlanap configuration'}, 1, '', '');
&Header::openbigbox('100%', 'left', '', $errormessage);
if ( $errormessage ){
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>";
--- /dev/null
+@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;
+}
--- /dev/null
+<!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>
+++ /dev/null
-#!/usr/bin/perl
-
-print "Status: 302 Moved\n";
-print "Location: /cgi-bin/dial/index.cgi\n\n";
'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' => '"Ignorieren"-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 "Maximale Wiederholversuche" 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
%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 & 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 & 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 & 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?',
# 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.
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
###############################################################################
# #
# 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)
$(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
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)
--- /dev/null
+###############################################################################
+# #
+# 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)
--- /dev/null
+###############################################################################
+# #
+# 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)
include Config
-VER = 9.11.1
+VER = 9.11.2
THISAPP = bind-$(VER)
DL_FILE = $(THISAPP).tar.gz
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = c384ab071d902bac13487c1268e5a32f
+$(DL_FILE)_MD5 = efca7e5a63a07efba264da9be2fbb57f
install : $(TARGET)
--- /dev/null
+###############################################################################
+# #
+# 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)
DIR_APP = $(DIR_SRC)/$(THISAPP)
TARGET = $(DIR_INFO)/$(THISAPP)
PROG = cacti
-PAK_VER = 5
+PAK_VER = 6
DEPS = "netsnmpd mysql"
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
###############################################################################
@$(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 \
# 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 \
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)
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)
# 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
###############################################################################
# #
# 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 #
include Config
-VER = 3.5.11
+VER = 3.5.15
THISAPP = gnutls-$(VER)
DL_FILE = $(THISAPP).tar.xz
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = a3ff8cf5ca7522e3ba14f487e6326e11
+$(DL_FILE)_MD5 = bcdcbc65c50a7499617ad9f4d0058de9
install : $(TARGET)
###############################################################################
# #
# 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 #
include Config
-VER = 9.50
+VER = 9.52
THISAPP = hdparm-$(VER)
DL_FILE = $(THISAPP).tar.gz
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = d380062ad6c4b40076736efbb640f1f5
+$(DL_FILE)_MD5 = 410539d0bf3cc247181594581edbfb53
install : $(TARGET)
###############################################################################
# #
# 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 #
include Config
-VER = 2.5
+VER = 2.6
THISAPP = hostapd-$(VER)
DL_FILE = $(THISAPP).tar.gz
DIR_APP = $(DIR_SRC)/$(THISAPP)
TARGET = $(DIR_INFO)/$(THISAPP)
PROG = hostapd
-PAK_VER = 37
+PAK_VER = 40
DEPS = ""
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = 69f9cec3f76d74f402864a43e4f8624f
+$(DL_FILE)_MD5 = eaa56dce9bd8f1d195eb62596eab34c7
install : $(TARGET)
md5 : $(subst %,%_MD5,$(objects))
-dist:
+dist:
@$(PAK)
###############################################################################
$(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
DIR_APP = $(DIR_SRC)/$(THISAPP)
TARGET = $(DIR_INFO)/$(THISAPP)
PROG = icinga
-PAK_VER = 1
+PAK_VER = 2
DEPS = ""
--- /dev/null
+###############################################################################
+# #
+# 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)
+
--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)"
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
$(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)
include Config
-VER = 1.7.7
+VER = 1.8.0
THISAPP = libgcrypt-$(VER)
DL_FILE = $(THISAPP).tar.bz2
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = d1769481b1b506a632fd66c5e5f62e41
+$(DL_FILE)_MD5 = 530db74602b558209f9ad7356a680971
install : $(TARGET)
include Config
-VER = 3.12.1
+VER = 3.13.0
THISAPP = logrotate-$(VER)
DL_FILE = logrotate-$(VER).tar.gz
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = 066b49891bad2849d5044c1952613ea6
+$(DL_FILE)_MD5 = 72c2c3028d060131b388a9b330215549
install : $(TARGET)
DIR_APP = $(DIR_SRC)/$(THISAPP)
TARGET = $(DIR_INFO)/$(THISAPP)
PROG = nagios
-PAK_VER = 2
+PAK_VER = 3
DEPS = "traceroute"
include Config
-VER = 2.8.1
+VER = 2.8.6
THISAPP = nano-$(VER)
DL_FILE = $(THISAPP).tar.gz
DIR_APP = $(DIR_SRC)/$(THISAPP)
TARGET = $(DIR_INFO)/$(THISAPP)
PROG = nano
-PAK_VER = 15
+PAK_VER = 16
DEPS = ""
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = 0dec96d839657e7f1a8396d7dbb19c07
+$(DL_FILE)_MD5 = e05d83c0f1687b733322f806c080d256
install : $(TARGET)
DIR_APP = $(DIR_SRC)/$(THISAPP)
TARGET = $(DIR_INFO)/$(THISAPP)
PROG = openmailadmin
-PAK_VER = 1
+PAK_VER = 2
DEPS = "cyrus-imapd postfix mysql"
###############################################################################
# #
# 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 #
include Config
-VER = 2.3.17
+VER = 2.3.18
THISAPP = openvpn-$(VER)
DL_FILE = $(THISAPP).tar.xz
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = df9291c5bd466fe73c2544a800f3b441
+$(DL_FILE)_MD5 = 844ec9c64aae62051478784b8562f881
install : $(TARGET)
--prefix=/usr \
--sysconfdir=/var/ipfire/ovpn \
--enable-iproute2 \
- --enable-password-save \
--enable-plugins \
--enable-plugin-auth-pam \
--enable-plugin-down-root
DIR_APP = $(DIR_SRC)/$(THISAPP)
TARGET = $(DIR_INFO)/$(THISAPP)
PROG = owncloud
-PAK_VER = 6
+PAK_VER = 7
DEPS = ""
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
include Config
-VER = 8.40
+VER = 8.41
THISAPP = pcre-$(VER)
DL_FILE = $(THISAPP).tar.bz2
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = 41a842bf7dcecd6634219336e2167d1d
+$(DL_FILE)_MD5 = c160d22723b1670447341b08c58981c1
install : $(TARGET)
--- /dev/null
+###############################################################################
+# #
+# 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)
--- /dev/null
+###############################################################################
+# #
+# 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)
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
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = c0d20bfd03883b5b2b2a7fd47455249a
+$(DL_FILE)_MD5 = 4223a38add42741f996bd67d5f2f8e5b
install : $(TARGET)
md5 : $(subst %,%_MD5,$(objects))
-dist:
- @$(PAK)
-
###############################################################################
# Downloading, checking, md5sum
###############################################################################
DIR_APP = $(DIR_SRC)/$(THISAPP)
TARGET = $(DIR_INFO)/$(THISAPP)
PROG = phpSANE
-PAK_VER = 1
+PAK_VER = 2
DEPS = "sane netpbm"
include Config
-VER = 3.5.26
+VER = 3.5.27
THISAPP = squid-$(VER)
DL_FILE = $(THISAPP).tar.xz
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = 510e2c84773879c00d0e7ced997864d9
+$(DL_FILE)_MD5 = 39ef8199675d48a314b540f92c00c545
install : $(TARGET)
$(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
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
# 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
include Config
-VER = 5.5.3
+VER = 5.6.0
THISAPP = strongswan-$(VER)
DL_FILE = $(THISAPP).tar.bz2
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = 4afffe3c219bb2e04f09510905af836b
+$(DL_FILE)_MD5 = befb5e827d02433fea6669c20e11530a
install : $(TARGET)
include Config
-VER = 4.9.0
+VER = 4.9.2
THISAPP = tcpdump-$(VER)
DL_FILE = $(THISAPP).tar.gz
DIR_APP = $(DIR_SRC)/$(THISAPP)
TARGET = $(DIR_INFO)/$(THISAPP)
PROG = tcpdump
-PAK_VER = 8
+PAK_VER = 9
DEPS = ""
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = 2b83364eef53b63ca3181b4eb56dab0c
+$(DL_FILE)_MD5 = 9bbc1ee33dab61302411b02dd0515576
install : $(TARGET)
include Config
-VER = 0.3.0.8
+VER = 0.3.1.7
THISAPP = tor-$(VER)
DL_FILE = $(THISAPP).tar.gz
DIR_APP = $(DIR_SRC)/$(THISAPP)
TARGET = $(DIR_INFO)/$(THISAPP)
PROG = tor
-PAK_VER = 21
+PAK_VER = 23
DEPS = ""
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = c5c88b7e17f652c9fb4fc2c2ee92943c
+$(DL_FILE)_MD5 = ec7c9f588c9e1a42c09bcc097a1e55eb
install : $(TARGET)
--- /dev/null
+###############################################################################
+# #
+# 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)
include Config
-VER = 1.6.3
+VER = 1.6.7
THISAPP = unbound-$(VER)
DL_FILE = $(THISAPP).tar.gz
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = d964d04c8d2b25f3271ac60fc630b654
+$(DL_FILE)_MD5 = 67ed382add11134d689f5e88f8efc43e
install : $(TARGET)
$(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 \
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)
--- /dev/null
+###############################################################################
+# 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)
###############################################################################
# #
# 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 #
include Config
-VER = 2.5
+VER = 2.6
THISAPP = wpa_supplicant-$(VER)
DL_FILE = $(THISAPP).tar.gz
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = 96ff75c3a514f1f324560a2376f13110
+$(DL_FILE)_MD5 = 091569eb4440b7d7f2b4276dbfc03c3c
install : $(TARGET)
md5 : $(subst %,%_MD5,$(objects))
-dist:
+dist:
@$(PAK)
###############################################################################
$(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
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
lfsmake2 libevent2
lfsmake2 libevent2-compat
lfsmake2 expat
+ lfsmake2 apr
+ lfsmake2 aprutil
lfsmake2 unbound
lfsmake2 gnutls
lfsmake2 bind
lfsmake2 web-user-interface
lfsmake2 flag-icons
lfsmake2 jquery
+ lfsmake2 bootstrap
lfsmake2 arping
lfsmake2 beep
lfsmake2 dvdrtools
lfsmake2 openssh
lfsmake2 fontconfig
lfsmake2 dejavu-fonts-ttf
+ lfsmake2 ubuntu-font-family
lfsmake2 freefont
lfsmake2 pixman
lfsmake2 cairo
lfsmake2 owncloud
lfsmake2 bacula
lfsmake2 batctl
+ lfsmake2 perl-Font-TTF
+ lfsmake2 perl-IO-String
lfsmake2 perl-PDF-API2
lfsmake2 squid-accounting
lfsmake2 pigz
lfsmake2 perl-common-sense
lfsmake2 perl-inotify2
lfsmake2 perl-Net-IP
+ lfsmake2 wio
+ lfsmake2 iftop
}
buildinstaller() {
. /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
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
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
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
;;
*)
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!"
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
# Update hosts
update_hosts
+
+ fix_time_if_dns_fail
;;
stop)
fi
update_forwarders
+
+ unbound-control flush_negative > /dev/null
+ unbound-control flush_bogus > /dev/null
+
+ fix_time_if_dns_fail
;;
test-name-server)
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],
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}
])
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.*"
// Umount the test device.
hw_umount(SOURCE_MOUNT_PATH);
- return (ret == 0);
+ return ret;
}
char* hw_find_source_medium(struct hw* hw) {
#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
/* 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);
FILE *copying;
setlocale(LC_ALL, "");
- sethostname(SNAME, 10);
+ sethostname(DISTRO_SNAME, 10);
/* Log file/terminal stuff. */
FILE* flog = NULL;
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);
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);
}
// 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)) {
"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);
}
# 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"
#: 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..."
#: main.c:403
msgid "Language selection"
-msgstr ""
+msgstr "اختيار اللغة"
#: main.c:403
msgid "Select the language you wish to use for the installation."
"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"
"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"
"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"
"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"
"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"
"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"
"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"
#
# 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"
#: 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
#: 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"
#: 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
"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"
"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"
"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"
#: main.c:510
#, c-format
msgid "MD5 checksum mismatch"
-msgstr ""
+msgstr "Erreur de vérification contrôle MD5"
#: main.c:513
#, c-format
" 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"
"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
" %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"
" %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."
#: 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"
#: 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
"%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"
"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"
# 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"
#: 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
"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
"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
" 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
" %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
" %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
"%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."
"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"
"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"
# 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"
#: 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
"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
"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
" 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
" %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
" %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
"%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ボタンを押して下さい。"
"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"
"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"
"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"
#
# 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"
"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"
# 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"
#: 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..."
# 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"
#: 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
"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
"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
" 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
" %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
" %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
"%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."
# 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"
"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"
" Reason: %s\n"
"\n"
"%s"
-msgstr ""
+msgstr "Не удаётся скачать установочный образ.\nПричина : %s\n\n%s"
#: main.c:528
#, c-format
"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
" %s\n"
"\n"
"Do you agree to continue?"
-msgstr ""
+msgstr "Программа установки сейчас настроит RAID на выбранных дисках:\n\n%s\n%s\n\nВы согласны продолжить ?"
#: main.c:629
msgid "RAID Setup"
"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"
"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"
# 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"
#: 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..."
#: main.c:428
msgid "Start installation"
-msgstr ""
+msgstr "Fillo instalimin"
#: main.c:449
#, c-format
"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"
"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"
# 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"
#: 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
"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
"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
" 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
" %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
" %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
"%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."
"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"
"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"
#
# 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"
"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"
"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"
"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"
"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"
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))
--- /dev/null
+/* 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;
+}
--- /dev/null
+/* 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
--- /dev/null
+/* 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;
+}
--- /dev/null
+/*
+ * 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
char buffer[STRING_SIZE];
char *index, *ipaddress, *macaddress, *enabled;
struct keyvalue *kv = NULL;
+ struct keyvalue* captive_settings = NULL;
if (!(initsetuid()))
exit(1);
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)) {
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;
--- /dev/null
+#!/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
--- /dev/null
+#!/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
--- /dev/null
+#!/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
+++ /dev/null
-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.
--- /dev/null
+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
+
--- /dev/null
+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
+
--- /dev/null
+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
+
--- /dev/null
+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
+
--- /dev/null
+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
+
--- /dev/null
+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
+
--- /dev/null
+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
+
--- /dev/null
+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
+
--- /dev/null
+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
+
--- /dev/null
+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
+
--- /dev/null
+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
+
--- /dev/null
+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
+
--- /dev/null
+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
+
--- /dev/null
+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
+
--- /dev/null
+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
+
--- /dev/null
+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
+
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
--- /dev/null
+#!/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");
+}
+++ /dev/null
-#!/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
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);
# 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"
#: 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 ""
#: 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 ""
#: 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."
"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"
"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"
# 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"
#: 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."
#: 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."
"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"
"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"
"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"
"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"
# 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"
#: 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):"
#: 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"
#: 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
#: 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"
#: main.c:72 misc.c:147
msgid "ISDN"
-msgstr ""
+msgstr "ISDN"
#: main.c:73
msgid "'root' password"
#: 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"
#: main.c:98
msgid "Select the item you wish to configure."
-msgstr ""
+msgstr "Sélectionner l'artivle à confurer."
#: main.c:99
msgid "Quit"
#: 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"
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."
#: 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
#: 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"
#: netstuff.c:105
msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
-msgstr ""
+msgstr "Connexion PPP (PPPoE, modem, ATM ...)"
#: netstuff.c:113
msgid "DHCP Hostname:"
#: netstuff.c:115
msgid "Force DHCP MTU:"
-msgstr ""
+msgstr "Forcer taille MTU pour DHCP:"
#: netstuff.c:134
msgid "IP address:"
#: 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"
#: netstuff.c:673
msgid "Identify"
-msgstr ""
+msgstr "Identifier"
#: netstuff.c:678
msgid "Device Identification"
#: 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..."
#: 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."
#: networking.c:152
msgid "Missing an IP address on GREEN."
-msgstr ""
+msgstr "Adresse IP manquante pour VERT."
#: networking.c:163
msgid "Error"
#: networking.c:163
msgid "Ignore"
-msgstr ""
+msgstr "Ignorer"
#: networking.c:164
msgid "No RED interface assigned."
#: 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."
#: 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."
#: 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"
#: 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
"Current config: %s\n"
"\n"
"%s"
-msgstr ""
+msgstr "Configuration actuelle: %s\n\n%s"
#: networking.c:268
msgid "Network configuration menu"
"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
"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"
#: networking.c:520
msgid "Remove"
-msgstr ""
+msgstr "Enlever"
#: networking.c:556 networking.c:649
#, c-format
"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:"
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"
#: 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"
#: 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:"
#: 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."
#: 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. "
"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"
# 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"
#: 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
#: 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
#: 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
"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
"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
"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
"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."
"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"
"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"
# 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"
#: 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
#: 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
#: 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
"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
"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
"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
"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 "下記のリストから、住んでいる時間帯を選んで下さい。"
"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"
"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"
"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"
#
# 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:"
# 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
"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"
# 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"
#: 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):"
#: 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 ""
# 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"
#: 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
#: 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"
#: 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"
#: 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"
#: 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"
#: 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
#: 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
"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
"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
"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
"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."
# 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 ""
"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"
#: 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:"
#: main.c:97
msgid "Section menu"
-msgstr ""
+msgstr "Меню выбора"
#: main.c:98
msgid "Select the item you wish to configure."
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
#: 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"
#: 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
#: networking.c:152
msgid "Missing an IP address on GREEN."
-msgstr ""
+msgstr "Не назначен адрес на GREEN интерфейсе"
#: networking.c:163
msgid "Error"
#: networking.c:173
msgid "Missing an IP address on RED."
-msgstr ""
+msgstr "Не назначен адрес на RED интерфейсе"
#: networking.c:183
msgid "No ORANGE interface assigned."
#: networking.c:189
msgid "Missing an IP address on ORANGE."
-msgstr ""
+msgstr "Не назначен адрес на ORANGE интерфейсе"
#: networking.c:199
msgid "No BLUE interface assigned."
#: networking.c:205
msgid "Missing an IP address on BLUE."
-msgstr ""
+msgstr "Не назначен адрес на BLUE интерфейсе"
#: networking.c:217
msgid "Misssing DNS."
"Current config: %s\n"
"\n"
"%s"
-msgstr ""
+msgstr "Текущая Конфигурация: %s\n\n%s"
#: networking.c:268
msgid "Network configuration menu"
"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
"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?"
#: 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"
"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."
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"
#: 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"
#: 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
"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"
"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"
"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"
"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"
"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"
# 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"
#: 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
#: 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
#: 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
"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
"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
"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
"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."
"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"
"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"
#
# 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"
#: 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"
"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"
"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"
"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"
"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"
--- /dev/null
+ $substatus->{'55.wio'} = {
+ 'caption' => "$Lang::tr{'wio'}",
+ 'uri' => '/cgi-bin/wio.cgi',
+ 'title' => "$Lang::tr{'wio'}",
+ 'enabled' => 1,
+ };
--- /dev/null
+/var/ipfire/wio/wio.conf
+/var/log/wio
--- /dev/null
+%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',
+);
--- /dev/null
+%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',
+);
--- /dev/null
+#!/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";
+}
--- /dev/null
+#!/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);
+
+}
--- /dev/null
+#!/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
--- /dev/null
+#!/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'> </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>";
+}
--- /dev/null
+#!/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;
--- /dev/null
+#!/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> </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> </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'} /> IP <input type='radio' name='PINGMETHODE$count' value='fqdn' $checked{'PINGMETHODE$count'}{'fqdn'} /> 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'} /> $Lang::tr{'wio_online'} <input type='checkbox' name='SENDEMAILOFF$count' $checked{'SENDEMAILOFF$count'}{'on'} /> $Lang::tr{'wio_offline'}</td>";
+}
+else {
+ print"<td colspan='2'> </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> </td>"; }
+else { print"<td><font color='$color{'color11'}'>$Lang::tr{'wio_import_infos_csv'}</font></td>"; }
+
+print"
+</tr>
+<tr><td colspan='4'> </td></tr>
+</table>
+<table width='100%'>
+<tr>
+ <td width='25%'> </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%'> </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> $Lang::tr{'wio_settings_msg'}</b></td>
+ <td width='2%'> </td>
+ <td width='53%'> </td>
+</tr>
+<tr><td colspan='3'> </td></tr>
+<tr>
+ <td colspan='3'>$Lang::tr{'wio_settings_msg_hint'}</td>
+</tr>
+<tr><td colspan='3'> </td></tr>
+<tr>
+ <td align='right'>$Lang::tr{'wio enabled'}</td>
+";
+
+print"<td> </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'> </td></tr>
+<tr>
+ <td align='right'>$Lang::tr{'wio_shutdown'}</td>
+ <td> </td>
+ <td align='left'><input type='checkbox' name='SHUTDOWN' $checked{'SHUTDOWN'}{'on'} /></td>
+</tr>
+<tr><td colspan='3'> </td></tr>
+<tr>
+ <td align='right'>$Lang::tr{'wio cron'}</td>
+ <td> </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> $Lang::tr{'wio min'}</td>
+</tr>
+<tr><td colspan='3'> </td></tr>
+<tr>
+ <td align='right'>$Lang::tr{'wio timeout'}</td>
+ <td> </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> $Lang::tr{'wio sec'}</td>
+</tr>
+<tr><td colspan='3'> </td></tr>
+<tr>
+ <td align='right'>$Lang::tr{'wio_logging'}</td>
+ <td> </td>
+ <td align='left'><input type='checkbox' name='LOGGING' $checked{'LOGGING'}{'on'} /></td>
+</tr>
+<tr><td colspan='3'> </td></tr>
+<tr>
+ <td align='right'>$Lang::tr{'wio_clientremark'}</td>
+ <td> </td>
+ <td align='left'><input type='checkbox' name='CLIENTREMARK' $checked{'CLIENTREMARK'}{'on'} /></td>
+</tr>
+<tr><td colspan='3'> </td></tr>
+
+";
+
+if ( $wiosettings{'SENDEMAIL'} eq 'on' ) {
+print"
+<tr>
+ <td align='right'>$Lang::tr{'wio_mail_style'}:</td>
+ <td> </td>
+ <td align='left'><input type='radio' name='MAILSTYLE' value='smail' $checked{'MAILSTYLE'}{'smail'} /> $Lang::tr{'wio_mail_smail'} <input type='radio' name='MAILSTYLE' value='email' $checked{'MAILSTYLE'}{'email'} /> $Lang::tr{'wio_mail_email'}</td>
+</tr>
+<tr><td colspan='3'> </td></tr>
+<tr>
+ <td align='right'>$Lang::tr{'wio_mailremark_enabled'}</td>
+ <td> </td>
+ <td align='left'><input type='checkbox' name='MAILREMARK' $checked{'MAILREMARK'}{'on'}></td>
+</tr>
+<tr><td colspan='3'> </td></tr>
+";
+}
+if ( -e "$ovpnaddon" || ! -z "/var/ipfire/vpn/config" ) {
+print"
+<tr>
+ <td align='right'>$Lang::tr{'wio_mail_ovpnrw'}</td>
+ <td> </td>
+ <td align='left'><input type='checkbox' name='OVPNRWMAIL' $checked{'OVPNRWMAIL'}{'on'}></td>
+</tr>
+<tr><td colspan='3'> </td></tr>
+<tr>
+ <td align='right'>$Lang::tr{'wio_ovpn_cron'}</td>
+ <td> </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> $Lang::tr{'wio min'}</td>
+</tr>
+<tr><td colspan='3'> </td></tr>
+";
+}
+print"
+<tr><td colspan='3'> </td></tr>
+<tr>
+ <td colspan='2'> </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' ? " <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> $Lang::tr{'wio_wan_con'}</b></td>
+ <td width='72%' align='right'> </td>
+</tr>
+<tr><td colspan='2'> </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> $Lang::tr{'wio_vpn_con'}</b></td>
+ <td width='72%'> </td>
+</tr>
+<tr><td colspan='2'> </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]" : " ")))."</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'> </td>
+ </tr>
+";
+
+if ($vpnconfighash{$key}[25] && $wiosettings{'CLIENTREMARK'} eq 'on') {
+ print"<tr".($idvpn % 2?" bgcolor='$color{'color20'}'":" bgcolor='$color{'color22'}'")." height='20'><td> </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> $Lang::tr{'wio_ovpn_con'}</b></td>
+ <td width='72%'> </td>
+</tr>
+<tr><td colspan='2'> </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" : " ")."</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]": " "))."</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" : " ")."</td>
+</tr>
+";
+ if ($ovpnconfighash{$key}[25] && $wiosettings{'CLIENTREMARK'} eq 'on') {
+ print"<tr".($idovpn % 2?" bgcolor='$color{'color20'}'":" bgcolor='$color{'color22'}'")." height='20'><td> </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> $Lang::tr{'wio_clients'}</b></td>
+ <td width='72%'> </td>
+</tr>
+<tr><td colspan='2'> </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> </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> $Lang::tr{'wio_add'}</b></td>
+ <td width='72%' align='right'> </td>
+</tr>
+<tr>
+ <td> </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'> </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'} /> IP <input type='radio' name='PINGMETHODE' value='fqdn' $checked{'PINGMETHODE'}{'fqdn'} /> 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'} /> $Lang::tr{'wio_online'} <input type='checkbox' name='SENDEMAILOFF' $checked{'SENDEMAILOFF'}{'on'} /> $Lang::tr{'wio_offline'}</td>";
+}
+else {
+ print"<td colspan='2'> </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'> </td>
+";
+
+if ( $buttontext eq $Lang::tr{'update'} && ( defined($errormessage) || $wiosettings{'ACTION'} eq $Lang::tr{'edit'}) && ! defined($message) ) {
+ print"<td width='20%' align='center'> </td>
+ <td width='20%' align='center'> </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'> </td>
+ <td width='20%' align='center'> </td>
+ <td width='20%' align='center'> </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> $Lang::tr{'wio_arp_table_entries'}</b></td>
+ <td width='72%'> </td>
+</tr>
+<tr><td colspan='2'> </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> $Lang::tr{'wio_import_file'}</b></td>
+ <td width='72%'> </td>
+</tr>
+<tr><td colspan='2'> </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'} </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'> </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'} </td>
+ <td width='40%' align='center'> </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'> </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'} </td>
+ <td width='40%' align='center'> </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> $Lang::tr{'wio_net_scan'}</b></td>
+ <td width='72%'> </td>
+</tr>
+</table>
+<table width='100%' cellspacing='0' cellpadding='0' style='border-collapse: collapse'>
+<tr>
+ <td colspan='3'> </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'> </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> </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/,/,/g; }
+}
--- /dev/null
+#!/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;