close(DATEI);
foreach (@Zeilen){
- if ( $_ =~ /\*/){
- my @files = `ls $_`;
+ chomp($_);
+ my @files = `find $_ -maxdepth 0 2>/dev/null`;
foreach (@files){
push(@include,$_);
- }
- }
- else {push(@include,$_);}
+ }
}
}
/var/ipfire/*/config
/var/ipfire/*/enable
/var/ipfire/*/*enable*
+/var/ipfire/ovpn/collectd.vpn
/etc/passwd
/etc/shadow
/etc/group
/etc/hosts*
/etc/httpd/*
/etc/ssh/ssh_host*
+/etc/ssh/sshd_config
/etc/logrotate.d
/var/ipfire/auth/users
/var/ipfire/dhcp/*
+++ /dev/null
-/srv/web/esniper/.htaccess
-/srv/web/esniper/.config.php
-/srv/web/esniper/.config.state.php
-/srv/web/esniper/local/
-/srv/web/esniper/.run/
--- /dev/null
+/etc/haproxy/haproxy.cfg
+++ /dev/null
-/opt/teamspeak/bad_names.txt
-/opt/teamspeak/server.dbs
-/opt/teamspeak/server.ini
-/opt/teamspeak/server.log
-/opt/teamspeak/whitelist.txt
-
-
use strict;
use Socket;
use IO::Socket;
+use Locale::Codes::Country;
use Net::SSLeay;
use Net::IPv4Addr qw(:all);
$|=1; # line buffering
--- /dev/null
+#!/usr/bin/perl -w
+############################################################################
+# #
+# This file is part of the IPFire Firewall. #
+# #
+# IPFire is free software; you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation; either version 2 of the License, or #
+# (at your option) any later version. #
+# #
+# IPFire is distributed in the hope that it will be useful, #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
+# GNU General Public License for more details. #
+# #
+# You should have received a copy of the GNU General Public License #
+# along with IPFire; if not, write to the Free Software #
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #
+# #
+# Copyright (C) 2015 IPFire Team <info@ipfire.org>. #
+# #
+############################################################################
+
+package GeoIP;
+
+use Locale::Codes::Country;
+
+# Function to get the flag icon for a specified country code.
+sub get_flag_icon($) {
+ my ($input) = @_;
+
+ # Webserver's root dir. (Required for generating full path)
+ my $webroot = "/srv/web/ipfire/html";
+
+ # Directory which contains the flag icons.
+ my $flagdir = "/images/flags";
+
+ # File extension of the country flags.
+ my $ext = "png";
+
+ # Remove whitespaces.
+ chomp($input);
+
+ # Convert given country code to upper case.
+ my $ccode = uc($input);
+
+ # Generate filename, based on the contry code in lower case
+ # and the defined file extension.
+ my $file = join('.', $ccode,$ext);
+
+ # Generate path inside webroot to the previously generated file.
+ my $flag_icon = join('/', $flagdir,$file);
+
+ # Generate absolute path to the icon file.
+ my $absolute_path = join('', $webroot,$flag_icon);
+
+ # Check if the a icon file exists.
+ if (-e "$absolute_path") {
+ # Return content of flag_icon.
+ return $flag_icon;
+ } else {
+ # If no icon for the specified country exists, try to use
+ # the icon for "unknown".
+ my $ccode = "unknown";
+
+ # Redoing all the stuff from abouve for the "unknown" icon.
+ my $file = join('.', $ccode,$ext);
+ my $flag_icon = join('/', $flagdir,$file);
+ my $absolute_path = join('', $webroot,$flag_icon);
+
+ # Check if the icon is present.
+ if (-e "$absolute_path") {
+ # Return "unknown" icon.
+ return $flag_icon;
+ }
+ }
+}
+
+# Function to get the county name by a given country code.
+sub get_full_country_name($) {
+ my ($input) = @_;
+ my $name;
+
+ # Remove whitespaces.
+ chomp($input);
+
+ # Convert input into lower case format.
+ my $code = lc($input);
+
+ # Handle country codes which are not in the list.
+ if ($code eq "a1") { $name = "Anonymous Proxy" }
+ elsif ($code eq "a2") { $name = "Satellite Provider" }
+ elsif ($code eq "o1") { $name = "Other Country" }
+ elsif ($code eq "ap") { $name = "Asia/Pacific Region" }
+ elsif ($code eq "eu") { $name = "Europe" }
+ elsif ($code eq "yu") { $name = "Yugoslavia" }
+ else {
+ # Use perl built-in module to get the country code.
+ $name = &Locale::Codes::Country::code2country($code);
+ }
+
+ return $name;
+}
+
+1;
"COMMENT:".sprintf("%15s",$Lang::tr{'average'}),
"COMMENT:".sprintf("%15s",$Lang::tr{'minimal'}),
"COMMENT:".sprintf("%15s",$Lang::tr{'current'})."\\j",
- "AREA:incoming#00dd00:".sprintf("%-20s",$Lang::tr{'incoming traffic in bytes per second'}),
+ "AREA:incoming#00dd00:".sprintf("%-23s",$Lang::tr{'incoming traffic in bytes per second'}),
"GPRINT:incoming:MAX:%8.1lf %sBps",
"GPRINT:incoming:AVERAGE:%8.1lf %sBps",
"GPRINT:incoming:MIN:%8.1lf %sBps",
"GPRINT:incoming:LAST:%8.1lf %sBps\\j",
- "STACK:overhead_in#116B11:".sprintf("%-20s",$Lang::tr{'incoming overhead in bytes per second'}),
+ "STACK:overhead_in#116B11:".sprintf("%-23s",$Lang::tr{'incoming overhead in bytes per second'}),
"GPRINT:overhead_in:MAX:%8.1lf %sBps",
"GPRINT:overhead_in:AVERAGE:%8.1lf %sBps",
"GPRINT:overhead_in:MIN:%8.1lf %sBps",
"GPRINT:overhead_in:LAST:%8.1lf %sBps\\j",
- "LINE1:compression_in#ff00ff:".sprintf("%-20s",$Lang::tr{'incoming compression in bytes per second'}),
+ "LINE1:compression_in#ff00ff:".sprintf("%-23s",$Lang::tr{'incoming compression in bytes per second'}),
"GPRINT:compression_in:MAX:%8.1lf %sBps",
"GPRINT:compression_in:AVERAGE:%8.1lf %sBps",
"GPRINT:compression_in:MIN:%8.1lf %sBps",
"GPRINT:compression_in:LAST:%8.1lf %sBps\\j",
- "AREA:outgoingn#dd0000:".sprintf("%-20s",$Lang::tr{'outgoing traffic in bytes per second'}),
+ "AREA:outgoingn#dd0000:".sprintf("%-23s",$Lang::tr{'outgoing traffic in bytes per second'}),
"GPRINT:outgoing:MAX:%8.1lf %sBps",
"GPRINT:outgoing:AVERAGE:%8.1lf %sBps",
"GPRINT:outgoing:MIN:%8.1lf %sBps",
"GPRINT:outgoing:LAST:%8.1lf %sBps\\j",
- "STACK:overhead_outn#870C0C:".sprintf("%-20s",$Lang::tr{'outgoing overhead in bytes per second'}),
+ "STACK:overhead_outn#870C0C:".sprintf("%-23s",$Lang::tr{'outgoing overhead in bytes per second'}),
"GPRINT:overhead_out:MAX:%8.1lf %sBps",
"GPRINT:overhead_out:AVERAGE:%8.1lf %sBps",
"GPRINT:overhead_out:MIN:%8.1lf %sBps",
"GPRINT:overhead_out:LAST:%8.1lf %sBps\\j",
- "LINE1:compression_outn#000000:".sprintf("%-20s",$Lang::tr{'outgoing compression in bytes per second'}),
+ "LINE1:compression_outn#000000:".sprintf("%-23s",$Lang::tr{'outgoing compression in bytes per second'}),
"GPRINT:compression_out:MAX:%8.1lf %sBps",
"GPRINT:compression_out:AVERAGE:%8.1lf %sBps",
"GPRINT:compression_out:MIN:%8.1lf %sBps",
return if ($ENV{'REQUEST_METHOD'} ne 'POST');
if (!$params->{'wantfile'}) {
$CGI::DISABLE_UPLOADS = 1;
- $CGI::POST_MAX = 512 * 1024;
+ $CGI::POST_MAX = 1024 * 1024;
} else {
$CGI::POST_MAX = 10 * 1024 * 1024;
}
my ($language, $country) = split(/_/, $shortlang);
push(@options, $language);
+ # Add English as fallback
+ push(@options, "en");
+
foreach my $option (@options) {
return $option if (-e "${General::swroot}/langs/$option.pl");
}
# Re-read firewall rules every Sunday in March, October and November to take care of daylight saving time
00 3 * 3 0 /usr/local/bin/timezone-transition /usr/local/bin/firewallctrl
00 2 * 10-11 0 /usr/local/bin/timezone-transition /usr/local/bin/firewallctrl
+
+# Update GeoIP database once a month.
+%monthly,random * * * [ -f "/var/ipfire/red/active" ] && /usr/local/bin/xt_geoip_update >/dev/null 2>&1
--- /dev/null
+# seems to crash often
+blacklist btmrvl_sdio
my %customnetwork=();
my %customhost=();
my %customgrp=();
+my %customgeoipgrp=();
my %customservice=();
my %customservicegrp=();
my %ccdnet=();
my $confignet = "${General::swroot}/fwhosts/customnetworks";
my $confighost = "${General::swroot}/fwhosts/customhosts";
my $configgrp = "${General::swroot}/fwhosts/customgroups";
+my $configgeoipgrp = "${General::swroot}/fwhosts/customgeoipgrp";
my $configsrv = "${General::swroot}/fwhosts/customservices";
my $configsrvgrp = "${General::swroot}/fwhosts/customservicegrp";
my $configccdnet = "${General::swroot}/ovpn/ccd.conf";
&General::readhasharray("$confignet", \%customnetwork);
&General::readhasharray("$confighost", \%customhost);
&General::readhasharray("$configgrp", \%customgrp);
+&General::readhasharray("$configgeoipgrp", \%customgeoipgrp);
&General::readhasharray("$configccdnet", \%ccdnet);
&General::readhasharray("$configccdhost", \%ccdhost);
&General::readhasharray("$configipsec", \%ipsecconf);
if ($customgrp{$grp}[0] eq $value) {
my @address = &get_address($customgrp{$grp}[3], $customgrp{$grp}[2], $type);
+ if (@address) {
+ push(@addresses, @address);
+ }
+ }
+ }
+ }elsif ($addr_type ~~ ["cust_geoip_src", "cust_geoip_tgt"] && $value =~ "group:") {
+ $value=substr($value,6);
+ foreach my $grp (sort {$a <=> $b} keys %customgeoipgrp) {
+ if ($customgeoipgrp{$grp}[0] eq $value) {
+ my @address = &get_address($addr_type, $customgeoipgrp{$grp}[2], $type);
+
if (@address) {
push(@addresses, @address);
}
}
}
+ # Handle rule options with GeoIP as source.
+ } elsif ($key eq "cust_geoip_src") {
+ # Get external interface.
+ my $external_interface = &get_external_interface();
+
+ push(@ret, ["-m geoip --src-cc $value", "$external_interface"]);
+
+ # Handle rule options with GeoIP as target.
+ } elsif ($key eq "cust_geoip_tgt") {
+ # Get external interface.
+ my $external_interface = &get_external_interface();
+
+ push(@ret, ["-m geoip --dst-cc $value", "$external_interface"]);
+
# If nothing was selected, we assume "any".
} else {
push(@ret, ["0/0", ""]);
return 0;
}
+sub get_geoip_locations() {
+ # Path to the directory which contains the binary geoip
+ # databases.
+ my $directory="/usr/share/xt_geoip/LE";
+
+ # Array to store the final country list.
+ my @country_codes = ();
+
+ # Open location and do a directory listing.
+ opendir(DIR, "$directory");
+ my @locations = readdir(DIR);
+ closedir(DIR);
+
+ # Loop through the directory listing, and cut of the file extensions.
+ foreach my $location (sort @locations) {
+ # skip . and ..
+ next if($location =~ /^\.$/);
+ next if($location =~ /^\.\.$/);
+
+ # Remove whitespaces.
+ chomp($location);
+
+ # Cut-off file extension.
+ my ($country_code, $extension) = split(/\./, $location);
+
+ # Add country code to array.
+ push(@country_codes, $country_code);
+ }
+
+ # Return final array.
+ return @country_codes;
+}
+
return 1;
--- /dev/null
+GEOIPBLOCK_ENABLED=off
-Applejuice;apple;off;
-Ares;ares;off;
-Bittorrent;bit;off;
-DirectConnect;dc;off;
-Edonkey;edk;off;
-Gnutella;gnu;off;
-KaZaA;kazaa;off;
-SoulSeek;soul;off;
-WinMX;winmx;off;
+Applejuice;apple;on;
+Ares;ares;on;
+Bittorrent;bit;on;
+DirectConnect;dc;on;
+Edonkey;edk;on;
+Gnutella;gnu;on;
+KaZaA;kazaa;on;
+SoulSeek;soul;on;
+WinMX;winmx;on;
my $configinput = "${General::swroot}/firewall/input";
my $configoutgoing = "${General::swroot}/firewall/outgoing";
my $p2pfile = "${General::swroot}/firewall/p2protocols";
+my $geoipfile = "${General::swroot}/firewall/geoipblock";
my $configgrp = "${General::swroot}/fwhosts/customgroups";
my $netsettings = "${General::swroot}/ethernet/settings";
# Flush all chains.
&flush();
- # Reload firewall rules.
- &preparerules();
+ # Prepare firewall rules.
+ if (! -z "${General::swroot}/firewall/input"){
+ &buildrules(\%configinputfw);
+ }
+ if (! -z "${General::swroot}/firewall/outgoing"){
+ &buildrules(\%configoutgoingfw);
+ }
+ if (! -z "${General::swroot}/firewall/config"){
+ &buildrules(\%configfwdfw);
+ }
# Load P2P block rules.
&p2pblock();
+ # Load GeoIP block rules.
+ &geoipblock();
+
# Reload firewall policy.
run("/usr/sbin/firewall-policy");
+
+ #Reload firewall.local if present
+ if ( -f '/etc/sysconfig/firewall.local'){
+ run("/etc/sysconfig/firewall.local reload");
+ }
}
sub run {
run("$IPTABLES -t mangle -F $CHAIN_MANGLE_NAT_DESTINATION_FIX");
}
-sub preparerules {
- if (! -z "${General::swroot}/firewall/input"){
- &buildrules(\%configinputfw);
- }
- if (! -z "${General::swroot}/firewall/outgoing"){
- &buildrules(\%configoutgoingfw);
- }
- if (! -z "${General::swroot}/firewall/config"){
- &buildrules(\%configfwdfw);
- }
-}
-
sub buildrules {
my $hash = shift;
my @source_options = ();
if ($source =~ /mac/) {
push(@source_options, $source);
- } elsif ($source) {
+ } elsif ($source =~ /-m geoip/) {
+ push(@source_options, $source);
+ } elsif($source) {
push(@source_options, ("-s", $source));
}
- if ($source_intf) {
- push(@source_options, ("-i", $source_intf));
- }
-
# Prepare destination options.
my @destination_options = ();
- if ($destination) {
+ if ($destination =~ /-m geoip/) {
+ push(@destination_options, $destination);
+ } elsif ($destination) {
push(@destination_options, ("-d", $destination));
}
- if ($destination_intf) {
- push(@destination_options, ("-o", $destination_intf));
- }
-
# Add time constraint options.
push(@options, @time_options);
}
}
+ # Add source and destination interface to the filter rules.
+ # These are supposed to help filtering forged packets that originate
+ # from BLUE with an IP address from GREEN for instance.
+ if ($source_intf) {
+ push(@source_options, ("-i", $source_intf));
+ }
+
+ if ($destination_intf) {
+ push(@destination_options, ("-o", $destination_intf));
+ }
+
push(@options, @source_options);
push(@options, @destination_options);
}
}
}
- #Reload firewall.local if present
- if ( -f '/etc/sysconfig/firewall.local'){
- run("/etc/sysconfig/firewall.local reload");
- }
}
# Formats the given timestamp into the iptables format which is "hh:mm" UTC.
}
}
+sub geoipblock {
+ my %geoipsettings = ();
+ $geoipsettings{'GEOIPBLOCK_ENABLED'} = "off";
+
+ # Flush iptables chain.
+ run("$IPTABLES -F GEOIPBLOCK");
+
+ # Check if the geoip settings file exists
+ if (-e "$geoipfile") {
+ # Read settings file
+ &General::readhash("$geoipfile", \%geoipsettings);
+ }
+
+ # If geoip blocking is not enabled, we are finished here.
+ if ($geoipsettings{'GEOIPBLOCK_ENABLED'} ne "on") {
+ # Exit submodule. Process remaining script.
+ return;
+ }
+
+ # Get supported locations.
+ my @locations = &fwlib::get_geoip_locations();
+
+ # Loop through all supported geoip locations and
+ # create iptables rules, if blocking this country
+ # is enabled.
+ foreach my $location (@locations) {
+ if($geoipsettings{$location} eq "on") {
+ run("$IPTABLES -A GEOIPBLOCK -m geoip --src-cc $location -j DROP");
+ }
+ }
+}
+
sub get_protocols {
my $hash = shift;
my $key = shift;
--- /dev/null
+#---------------------------------------------------------------------
+# Example configuration for a possible web application. See the
+# full configuration options online.
+#
+# http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
+#
+#---------------------------------------------------------------------
+
+#---------------------------------------------------------------------
+# Global settings
+#---------------------------------------------------------------------
+global
+ # to have these messages end up in /var/log/haproxy.log you will
+ # need to:
+ #
+ # 1) configure syslog to accept network log events. This is done
+ # by adding the '-r' option to the SYSLOGD_OPTIONS in
+ # /etc/sysconfig/syslog
+ #
+ # 2) configure local2 events to go to the /var/log/haproxy.log
+ # file. A line like the following can be added to
+ # /etc/sysconfig/syslog
+ #
+ # local2.* /var/log/haproxy.log
+ #
+ log 127.0.0.1 local2
+
+ chroot /var/lib/haproxy
+ pidfile /var/run/haproxy.pid
+ maxconn 4000
+ user nobody
+ group nobody
+ daemon
+
+ # turn on stats unix socket
+ stats socket /var/lib/haproxy/stats
+
+#---------------------------------------------------------------------
+# common defaults that all the 'listen' and 'backend' sections will
+# use if not designated in their block
+#---------------------------------------------------------------------
+defaults
+ mode http
+ log global
+ option httplog
+ option dontlognull
+ option http-server-close
+ option forwardfor except 127.0.0.0/8
+ option redispatch
+ retries 3
+ timeout http-request 10s
+ timeout queue 1m
+ timeout connect 10s
+ timeout client 1m
+ timeout server 1m
+ timeout http-keep-alive 10s
+ timeout check 10s
+ maxconn 3000
+
+#---------------------------------------------------------------------
+# main frontend which proxys to the backends
+#---------------------------------------------------------------------
+frontend main *:5000
+ acl url_static path_beg -i /static /images /javascript /stylesheets
+ acl url_static path_end -i .jpg .gif .png .css .js
+
+ use_backend static if url_static
+ default_backend app
+
+#---------------------------------------------------------------------
+# static backend for serving up images, stylesheets and such
+#---------------------------------------------------------------------
+backend static
+ balance roundrobin
+ server static 127.0.0.1:4331 check
+
+#---------------------------------------------------------------------
+# round robin balancing between the various backends
+#---------------------------------------------------------------------
+backend app
+ balance roundrobin
+ server app1 127.0.0.1:5001 check
+ server app2 127.0.0.1:5002 check
+ server app3 127.0.0.1:5003 check
+ server app4 127.0.0.1:5004 check
+
# Driver interface for wired authenticator
#CONFIG_DRIVER_WIRED=y
-# Driver interface for madwifi driver
-#CONFIG_DRIVER_MADWIFI=y
-#CFLAGS += -I../../madwifi # change to the madwifi source directory
-
# Driver interface for Prism54 driver
CONFIG_DRIVER_PRISM54=y
CONFIG_PEERKEY=y
# IEEE 802.11w (management frame protection)
-# This version is an experimental implementation based on IEEE 802.11w/D1.0
-# draft and is subject to change since the standard has not yet been finalized.
-# Driver support is also needed for IEEE 802.11w.
-#CONFIG_IEEE80211W=y
+CONFIG_IEEE80211W=y
# Integrated EAP server
CONFIG_EAP=y
+# EAP Re-authentication Protocol (ERP) in integrated EAP server
+CONFIG_ERP=y
+
# EAP-MD5 for the integrated EAP server
CONFIG_EAP_MD5=y
# EAP-PSK for the integrated EAP server (this is _not_ needed for WPA-PSK)
#CONFIG_EAP_PSK=y
+# EAP-pwd for the integrated EAP server (secure authentication with a password)
+#CONFIG_EAP_PWD=y
+
# EAP-SAKE for the integrated EAP server
#CONFIG_EAP_SAKE=y
CONFIG_WPS=y
# Enable UPnP support for external WPS Registrars
CONFIG_WPS_UPNP=y
+# Enable WPS support with NFC config method
+#CONFIG_WPS_NFC=y
# EAP-IKEv2
CONFIG_EAP_IKEV2=y
# Trusted Network Connect (EAP-TNC)
CONFIG_EAP_TNC=y
+# EAP-EKE for the integrated EAP server
+#CONFIG_EAP_EKE=y
+
# PKCS#12 (PFX) support (used to read private key and certificate file from
# a file that usually has extension .p12 or .pfx)
CONFIG_PKCS12=y
# IEEE 802.11n (High Throughput) support
CONFIG_IEEE80211N=y
+# Wireless Network Management (IEEE Std 802.11v-2011)
+# Note: This is experimental and not complete implementation.
+#CONFIG_WNM=y
+
+# IEEE 802.11ac (Very High Throughput) support
+CONFIG_IEEE80211AC=y
+
# Remove debugging code that is printing out debug messages to stdout.
# This can be used to reduce the size of the hostapd considerably if debugging
# code is not needed.
CONFIG_NO_STDOUT_DEBUG=y
-# IEEE 802.11ac (Very High Throughput) support
-CONFIG_IEEE80211AC=y
-# Enable AUTO_CHANNEL_SELECTION
-# This is needed for dfs (radar detection) channels
+# Add support for writing debug log to a file: -f /tmp/hostapd.log
+# Disabled by default.
+#CONFIG_DEBUG_FILE=y
+
+# Add support for sending all debug messages (regardless of debug verbosity)
+# to the Linux kernel tracing facility. This helps debug the entire stack by
+# making it easy to record everything happening from the driver up into the
+# same file, e.g., using trace-cmd.
+#CONFIG_DEBUG_LINUX_TRACING=y
+
+# Remove support for RADIUS accounting
+#CONFIG_NO_ACCOUNTING=y
+
+# Remove support for RADIUS
+#CONFIG_NO_RADIUS=y
+
+# Remove support for VLANs
+#CONFIG_NO_VLAN=y
+
+# Enable support for fully dynamic VLANs. This enables hostapd to
+# automatically create bridge and VLAN interfaces if necessary.
+#CONFIG_FULL_DYNAMIC_VLAN=y
+
+# Use netlink-based kernel API for VLAN operations instead of ioctl()
+# Note: This requires libnl 3.1 or newer.
+#CONFIG_VLAN_NETLINK=y
+
+# Remove support for dumping internal state through control interface commands
+# This can be used to reduce binary size at the cost of disabling a debugging
+# option.
+#CONFIG_NO_DUMP_STATE=y
+
+# Enable tracing code for developer debugging
+# This tracks use of memory allocations and other registrations and reports
+# incorrect use with a backtrace of call (or allocation) location.
+#CONFIG_WPA_TRACE=y
+# For BSD, comment out these.
+#LIBS += -lexecinfo
+#LIBS_p += -lexecinfo
+#LIBS_c += -lexecinfo
+
+# Use libbfd to get more details for developer debugging
+# This enables use of libbfd to get more detailed symbols for the backtraces
+# generated by CONFIG_WPA_TRACE=y.
+#CONFIG_WPA_TRACE_BFD=y
+# For BSD, comment out these.
+#LIBS += -lbfd -liberty -lz
+#LIBS_p += -lbfd -liberty -lz
+#LIBS_c += -lbfd -liberty -lz
+
+# hostapd depends on strong random number generation being available from the
+# operating system. os_get_random() function is used to fetch random data when
+# needed, e.g., for key generation. On Linux and BSD systems, this works by
+# reading /dev/urandom. It should be noted that the OS entropy pool needs to be
+# properly initialized before hostapd is started. This is important especially
+# on embedded devices that do not have a hardware random number generator and
+# may by default start up with minimal entropy available for random number
+# generation.
+#
+# As a safety net, hostapd is by default trying to internally collect
+# additional entropy for generating random data to mix in with the data
+# fetched from the OS. This by itself is not considered to be very strong, but
+# it may help in cases where the system pool is not initialized properly.
+# However, it is very strongly recommended that the system pool is initialized
+# with enough entropy either by using hardware assisted random number
+# generator or by storing state over device reboots.
+#
+# hostapd can be configured to maintain its own entropy store over restarts to
+# enhance random number generation. This is not perfect, but it is much more
+# secure than using the same sequence of random numbers after every reboot.
+# This can be enabled with -e<entropy file> command line option. The specified
+# file needs to be readable and writable by hostapd.
+#
+# If the os_get_random() is known to provide strong random data (e.g., on
+# Linux/BSD, the board in question is known to have reliable source of random
+# data from /dev/urandom), the internal hostapd random pool can be disabled.
+# This will save some in binary size and CPU use. However, this should only be
+# considered for builds that are known to be used on devices that meet the
+# requirements described above.
+#CONFIG_NO_RANDOM_POOL=y
+
+# Select TLS implementation
+# openssl = OpenSSL (default)
+# gnutls = GnuTLS
+# internal = Internal TLSv1 implementation (experimental)
+# none = Empty template
+#CONFIG_TLS=openssl
+
+# TLS-based EAP methods require at least TLS v1.0. Newer version of TLS (v1.1)
+# can be enabled to get a stronger construction of messages when block ciphers
+# are used.
+#CONFIG_TLSV11=y
+
+# TLS-based EAP methods require at least TLS v1.0. Newer version of TLS (v1.2)
+# can be enabled to enable use of stronger crypto algorithms.
+#CONFIG_TLSV12=y
+
+# If CONFIG_TLS=internal is used, additional library and include paths are
+# needed for LibTomMath. Alternatively, an integrated, minimal version of
+# LibTomMath can be used. See beginning of libtommath.c for details on benefits
+# and drawbacks of this option.
+#CONFIG_INTERNAL_LIBTOMMATH=y
+#ifndef CONFIG_INTERNAL_LIBTOMMATH
+#LTM_PATH=/usr/src/libtommath-0.39
+#CFLAGS += -I$(LTM_PATH)
+#LIBS += -L$(LTM_PATH)
+#LIBS_p += -L$(LTM_PATH)
+#endif
+# At the cost of about 4 kB of additional binary size, the internal LibTomMath
+# can be configured to include faster routines for exptmod, sqr, and div to
+# speed up DH and RSA calculation considerably
+#CONFIG_INTERNAL_LIBTOMMATH_FAST=y
+
+# Interworking (IEEE 802.11u)
+# This can be used to enable functionality to improve interworking with
+# external networks.
+#CONFIG_INTERWORKING=y
+
+# Hotspot 2.0
+#CONFIG_HS20=y
+
+# Enable SQLite database support in hlr_auc_gw, EAP-SIM DB, and eap_user_file
+#CONFIG_SQLITE=y
+
+# Testing options
+# This can be used to enable some testing options (see also the example
+# configuration file) that are really useful only for testing clients that
+# connect to this hostapd. These options allow, for example, to drop a
+# certain percentage of probe requests or auth/(re)assoc frames.
+#
+#CONFIG_TESTING_OPTIONS=y
+
+# Automatic Channel Selection
+# This will allow hostapd to pick the channel automatically when channel is set
+# to "acs_survey" or "0". Eventually, other ACS algorithms can be added in
+# similar way.
+#
+# Automatic selection is currently only done through initialization, later on
+# we hope to do background checks to keep us moving to more ideal channels as
+# time goes by. ACS is currently only supported through the nl80211 driver and
+# your driver must have survey dump capability that is filled by the driver
+# during scanning.
+#
+# You can customize the ACS survey algorithm with the hostapd.conf variable
+# acs_num_scans.
+#
+# Supported ACS drivers:
+# * ath9k
+# * ath5k
+# * ath10k
+#
+# For more details refer to:
+# http://wireless.kernel.org/en/users/Documentation/acs
+#
CONFIG_ACS=y
Timeout 300
ServerSignature on
UseCanonicalName off
-ServerTokens Full
+ServerTokens Prod
LogLevel warn
CustomLog /var/log/httpd/access_log combined
Include /etc/httpd/conf/hostname.conf
#
Include /etc/httpd/conf/vhosts.d/*.conf
-
+# Dummy LoadModule directive to aid module installations
+#LoadModule dummy_module /usr/lib/apache2/modules/mod_dummy.so
+++ /dev/null
-Listen 1006
-
-<VirtualHost *:1006>
-
- SSLEngine on
- SSLProtocol all -SSLv2
- SSLCipherSuite ALL:!ADH:!EXPORT56:!eNULL:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW:+EXP
- SSLCertificateFile /etc/httpd/server.crt
- SSLCertificateKeyFile /etc/httpd/server.key
-
- DocumentRoot /srv/web/esniper
-
- Include /etc/httpd/conf/conf.d/php*.conf
-
- <Directory /srv/web/esniper>
- Options None
- AllowOverride None
- Order allow,deny
- Allow from all
- </Directory>
-
-</VirtualHost>
+++ /dev/null
-Listen 1002
-
-<VirtualHost *:1002>
-
- DocumentRoot /srv/web/phpaj
-
- Include /etc/httpd/conf/conf.d/php*.conf
-
- <Directory /srv/web/phpaj>
- Options None
- AllowOverride None
- Order allow,deny
- Allow from all
- </Directory>
-
-</VirtualHost>
#
# Automatically generated file; DO NOT EDIT.
-# Linux/arm 3.14.22 Kernel Configuration
+# Linux/arm 3.14.37 Kernel Configuration
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
#
CONFIG_MEDIA_SUBDRV_AUTOSELECT=y
CONFIG_MEDIA_ATTACH=y
-CONFIG_VIDEO_IR_I2C=y
+CONFIG_VIDEO_IR_I2C=m
#
# Audio decoders, processors and mixers
CONFIG_SOC_CAMERA_OV9740=m
CONFIG_SOC_CAMERA_RJ54N1=m
CONFIG_SOC_CAMERA_TW9910=m
-CONFIG_MEDIA_TUNER=y
-CONFIG_MEDIA_TUNER_SIMPLE=y
-CONFIG_MEDIA_TUNER_TDA8290=y
-CONFIG_MEDIA_TUNER_TDA827X=y
-CONFIG_MEDIA_TUNER_TDA18271=y
-CONFIG_MEDIA_TUNER_TDA9887=y
-CONFIG_MEDIA_TUNER_MT20XX=y
+CONFIG_MEDIA_TUNER=m
+CONFIG_MEDIA_TUNER_SIMPLE=m
+CONFIG_MEDIA_TUNER_TDA8290=m
+CONFIG_MEDIA_TUNER_TDA827X=m
+CONFIG_MEDIA_TUNER_TDA18271=m
+CONFIG_MEDIA_TUNER_TDA9887=m
+CONFIG_MEDIA_TUNER_MT20XX=m
CONFIG_MEDIA_TUNER_MT2060=m
CONFIG_MEDIA_TUNER_MT2063=m
CONFIG_MEDIA_TUNER_MT2266=m
CONFIG_MEDIA_TUNER_MT2131=m
CONFIG_MEDIA_TUNER_QT1010=m
-CONFIG_MEDIA_TUNER_XC2028=y
-CONFIG_MEDIA_TUNER_XC5000=y
-CONFIG_MEDIA_TUNER_XC4000=y
+CONFIG_MEDIA_TUNER_XC2028=m
+CONFIG_MEDIA_TUNER_XC5000=m
+CONFIG_MEDIA_TUNER_XC4000=m
CONFIG_MEDIA_TUNER_MXL5005S=m
CONFIG_MEDIA_TUNER_MXL5007T=m
-CONFIG_MEDIA_TUNER_MC44S803=y
+CONFIG_MEDIA_TUNER_MC44S803=m
CONFIG_MEDIA_TUNER_MAX2165=m
CONFIG_MEDIA_TUNER_TDA18218=m
CONFIG_MEDIA_TUNER_FC0011=m
#
# Memory Debugging
#
-# CONFIG_DEBUG_PAGEALLOC is not set
# CONFIG_DEBUG_OBJECTS is not set
# CONFIG_SLUB_DEBUG_ON is not set
# CONFIG_SLUB_STATS is not set
CONFIG_GRKERNSEC_CHROOT_FINDTASK=y
CONFIG_GRKERNSEC_CHROOT_NICE=y
CONFIG_GRKERNSEC_CHROOT_SYSCTL=y
+CONFIG_GRKERNSEC_CHROOT_RENAME=y
# CONFIG_GRKERNSEC_CHROOT_CAPS is not set
CONFIG_GRKERNSEC_CHROOT_INITRD=y
#
# Automatically generated file; DO NOT EDIT.
-# Linux/arm 3.14.25 Kernel Configuration
+# Linux/arm 3.14.37 Kernel Configuration
#
CONFIG_ARM=y
CONFIG_MIGHT_HAVE_PCI=y
CONFIG_JME=m
CONFIG_NET_VENDOR_MARVELL=y
CONFIG_MV643XX_ETH=m
-CONFIG_MVMDIO=m
-CONFIG_MVNETA=m
+CONFIG_MVMDIO=y
+CONFIG_MVNETA=y
CONFIG_SKGE=m
# CONFIG_SKGE_DEBUG is not set
CONFIG_SKGE_GENESIS=y
# CONFIG_FDDI is not set
# CONFIG_HIPPI is not set
CONFIG_PHYLIB=y
+CONFIG_SWCONFIG=m
+# CONFIG_SWCONFIG_LEDS is not set
#
# MII PHY device drivers
CONFIG_MICREL_PHY=m
CONFIG_FIXED_PHY=y
CONFIG_MDIO_BITBANG=m
-# CONFIG_MDIO_GPIO is not set
+CONFIG_MDIO_GPIO=m
CONFIG_MDIO_SUN4I=m
CONFIG_MDIO_BUS_MUX=m
CONFIG_MDIO_BUS_MUX_GPIO=m
CONFIG_MDIO_BUS_MUX_MMIOREG=m
CONFIG_GATEWORKS_GW16083=m
+CONFIG_B53=m
+CONFIG_B53_PHY_DRIVER=m
+# CONFIG_B53_MMAP_DRIVER is not set
+# CONFIG_B53_SRAB_DRIVER is not set
+CONFIG_B53_PHY_FIXUP=y
# CONFIG_PLIP is not set
CONFIG_PPP=m
CONFIG_PPP_BSDCOMP=m
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
CONFIG_VIDEO_TUNER=m
CONFIG_V4L2_MEM2MEM_DEV=m
-CONFIG_VIDEOBUF_GEN=y
+CONFIG_VIDEOBUF_GEN=m
CONFIG_VIDEOBUF_DMA_SG=m
CONFIG_VIDEOBUF_VMALLOC=m
-CONFIG_VIDEOBUF_DMA_CONTIG=y
+CONFIG_VIDEOBUF_DMA_CONTIG=m
CONFIG_VIDEOBUF_DVB=m
CONFIG_VIDEOBUF2_CORE=m
CONFIG_VIDEOBUF2_MEMOPS=m
# CONFIG_VIDEO_CAFE_CCIC is not set
# CONFIG_VIDEO_DM6446_CCDC is not set
CONFIG_VIDEO_OMAP2_VOUT_VRFB=y
-CONFIG_VIDEO_OMAP2_VOUT=y
+CONFIG_VIDEO_OMAP2_VOUT=m
CONFIG_VIDEO_TIMBERDALE=m
CONFIG_SOC_CAMERA=m
+CONFIG_SOC_CAMERA_SCALE_CROP=m
+CONFIG_SOC_CAMERA_PLATFORM=m
CONFIG_VIDEO_MX3=m
CONFIG_VIDEO_RCAR_VIN=m
# CONFIG_VIDEO_SH_MOBILE_CSI2 is not set
#
CONFIG_MEDIA_SUBDRV_AUTOSELECT=y
CONFIG_MEDIA_ATTACH=y
-CONFIG_VIDEO_IR_I2C=y
+CONFIG_VIDEO_IR_I2C=m
#
# Audio decoders, processors and mixers
CONFIG_SOC_CAMERA_OV9740=m
CONFIG_SOC_CAMERA_RJ54N1=m
CONFIG_SOC_CAMERA_TW9910=m
-CONFIG_MEDIA_TUNER=y
-CONFIG_MEDIA_TUNER_SIMPLE=y
-CONFIG_MEDIA_TUNER_TDA8290=y
-CONFIG_MEDIA_TUNER_TDA827X=y
-CONFIG_MEDIA_TUNER_TDA18271=y
-CONFIG_MEDIA_TUNER_TDA9887=y
-CONFIG_MEDIA_TUNER_MT20XX=y
+CONFIG_MEDIA_TUNER=m
+CONFIG_MEDIA_TUNER_SIMPLE=m
+CONFIG_MEDIA_TUNER_TDA8290=m
+CONFIG_MEDIA_TUNER_TDA827X=m
+CONFIG_MEDIA_TUNER_TDA18271=m
+CONFIG_MEDIA_TUNER_TDA9887=m
+CONFIG_MEDIA_TUNER_MT20XX=m
CONFIG_MEDIA_TUNER_MT2060=m
CONFIG_MEDIA_TUNER_MT2063=m
CONFIG_MEDIA_TUNER_MT2266=m
CONFIG_MEDIA_TUNER_MT2131=m
CONFIG_MEDIA_TUNER_QT1010=m
-CONFIG_MEDIA_TUNER_XC2028=y
-CONFIG_MEDIA_TUNER_XC5000=y
-CONFIG_MEDIA_TUNER_XC4000=y
+CONFIG_MEDIA_TUNER_XC2028=m
+CONFIG_MEDIA_TUNER_XC5000=m
+CONFIG_MEDIA_TUNER_XC4000=m
CONFIG_MEDIA_TUNER_MXL5005S=m
CONFIG_MEDIA_TUNER_MXL5007T=m
-CONFIG_MEDIA_TUNER_MC44S803=y
+CONFIG_MEDIA_TUNER_MC44S803=m
CONFIG_MEDIA_TUNER_MAX2165=m
CONFIG_MEDIA_TUNER_TDA18218=m
CONFIG_MEDIA_TUNER_FC0011=m
CONFIG_RTC_DRV_PL031=m
CONFIG_RTC_DRV_VT8500=m
CONFIG_RTC_DRV_SUNXI=y
-CONFIG_RTC_DRV_MV=m
+CONFIG_RTC_DRV_MV=y
CONFIG_RTC_DRV_MXC=m
CONFIG_RTC_DRV_SNVS=m
CONFIG_RTC_DRV_MOXART=m
#
# Memory Debugging
#
-# CONFIG_DEBUG_PAGEALLOC is not set
# CONFIG_DEBUG_OBJECTS is not set
# CONFIG_SLUB_STATS is not set
CONFIG_HAVE_DEBUG_KMEMLEAK=y
CONFIG_GRKERNSEC_CHROOT_FINDTASK=y
CONFIG_GRKERNSEC_CHROOT_NICE=y
CONFIG_GRKERNSEC_CHROOT_SYSCTL=y
+CONFIG_GRKERNSEC_CHROOT_RENAME=y
# CONFIG_GRKERNSEC_CHROOT_CAPS is not set
CONFIG_GRKERNSEC_CHROOT_INITRD=y
#
# Automatically generated file; DO NOT EDIT.
-# Linux/arm 3.14.22 Kernel Configuration
+# Linux/arm 3.14.37 Kernel Configuration
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
# CONFIG_DM_SWITCH is not set
# CONFIG_TARGET_CORE is not set
CONFIG_NETDEVICES=y
-CONFIG_MII=y
+CONFIG_MII=m
CONFIG_NET_CORE=y
CONFIG_BONDING=m
CONFIG_DUMMY=m
CONFIG_USB_NET_SR9700=m
CONFIG_USB_NET_SR9800=m
CONFIG_USB_NET_SMSC75XX=m
-CONFIG_USB_NET_SMSC95XX=y
+CONFIG_USB_NET_SMSC95XX=m
CONFIG_USB_NET_GL620A=m
CONFIG_USB_NET_NET1080=m
CONFIG_USB_NET_PLUSB=m
#
# Memory Debugging
#
-# CONFIG_DEBUG_PAGEALLOC is not set
# CONFIG_DEBUG_OBJECTS is not set
# CONFIG_SLUB_DEBUG_ON is not set
# CONFIG_SLUB_STATS is not set
CONFIG_GRKERNSEC_CHROOT_FINDTASK=y
CONFIG_GRKERNSEC_CHROOT_NICE=y
CONFIG_GRKERNSEC_CHROOT_SYSCTL=y
+CONFIG_GRKERNSEC_CHROOT_RENAME=y
# CONFIG_GRKERNSEC_CHROOT_CAPS is not set
CONFIG_GRKERNSEC_CHROOT_INITRD=y
#
# Automatically generated file; DO NOT EDIT.
-# Linux/x86 3.14.22 Kernel Configuration
+# Linux/x86 3.14.37 Kernel Configuration
#
# CONFIG_64BIT is not set
CONFIG_X86_32=y
CONFIG_PREEMPT_NONE=y
# CONFIG_PREEMPT_VOLUNTARY is not set
# CONFIG_PREEMPT is not set
+CONFIG_X86_UP_APIC_MSI=y
CONFIG_X86_LOCAL_APIC=y
CONFIG_X86_IO_APIC=y
CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
# CONFIG_X86_MCE_INJECT is not set
CONFIG_X86_THERMAL_VECTOR=y
CONFIG_VM86=y
-CONFIG_X86_16BIT=y
-CONFIG_X86_ESPFIX32=y
CONFIG_TOSHIBA=m
CONFIG_I8K=m
# CONFIG_X86_REBOOTFIXUPS is not set
CONFIG_BINFMT_MISC=y
CONFIG_COREDUMP=y
CONFIG_HAVE_ATOMIC_IOMAP=y
+CONFIG_IOSF_MBI=m
CONFIG_NET=y
#
#
# Memory Debugging
#
-# CONFIG_DEBUG_PAGEALLOC is not set
# CONFIG_DEBUG_OBJECTS is not set
# CONFIG_SLUB_DEBUG_ON is not set
# CONFIG_SLUB_STATS is not set
CONFIG_GRKERNSEC_CHROOT_FINDTASK=y
CONFIG_GRKERNSEC_CHROOT_NICE=y
CONFIG_GRKERNSEC_CHROOT_SYSCTL=y
+CONFIG_GRKERNSEC_CHROOT_RENAME=y
# CONFIG_GRKERNSEC_CHROOT_CAPS is not set
CONFIG_GRKERNSEC_CHROOT_INITRD=y
#
# Automatically generated file; DO NOT EDIT.
-# Linux/x86 3.14.22 Kernel Configuration
+# Linux/x86 3.14.37 Kernel Configuration
#
# CONFIG_64BIT is not set
CONFIG_X86_32=y
CONFIG_PREEMPT_NONE=y
# CONFIG_PREEMPT_VOLUNTARY is not set
# CONFIG_PREEMPT is not set
+CONFIG_X86_UP_APIC_MSI=y
CONFIG_X86_LOCAL_APIC=y
CONFIG_X86_IO_APIC=y
CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
# CONFIG_X86_MCE_INJECT is not set
CONFIG_X86_THERMAL_VECTOR=y
CONFIG_VM86=y
-CONFIG_X86_16BIT=y
-CONFIG_X86_ESPFIX32=y
CONFIG_TOSHIBA=m
CONFIG_I8K=m
# CONFIG_X86_REBOOTFIXUPS is not set
CONFIG_BINFMT_MISC=y
CONFIG_COREDUMP=y
CONFIG_HAVE_ATOMIC_IOMAP=y
+CONFIG_IOSF_MBI=m
CONFIG_NET=y
#
CONFIG_DVB_TUA6100=m
CONFIG_DVB_CX24116=m
CONFIG_DVB_CX24117=m
-CONFIG_DVB_M88DC2800=m
CONFIG_DVB_SI21XX=m
CONFIG_DVB_TS2020=m
CONFIG_DVB_DS3000=m
CONFIG_DVB_LGS8GXX=m
CONFIG_DVB_ATBM8830=m
CONFIG_DVB_TDA665x=m
+CONFIG_DVB_DVBSKY_M88DS3103=m
+CONFIG_DVB_M88DC2800=m
CONFIG_DVB_IX2505V=m
CONFIG_DVB_IT913X_FE=m
CONFIG_DVB_M88RS2000=m
#
# Memory Debugging
#
-# CONFIG_DEBUG_PAGEALLOC is not set
# CONFIG_DEBUG_OBJECTS is not set
# CONFIG_SLUB_DEBUG_ON is not set
# CONFIG_SLUB_STATS is not set
CONFIG_GRKERNSEC_CHROOT_FINDTASK=y
CONFIG_GRKERNSEC_CHROOT_NICE=y
CONFIG_GRKERNSEC_CHROOT_SYSCTL=y
+CONFIG_GRKERNSEC_CHROOT_RENAME=y
# CONFIG_GRKERNSEC_CHROOT_CAPS is not set
CONFIG_GRKERNSEC_CHROOT_INITRD=y
--- /dev/null
+# bcm43362 NVRAM file for LeMaker Banana Pro and Cubietruck
+#AP6210_NVRAM_V1.2_03192013
+
+manfid=0x2d0
+prodid=0x492
+vendid=0x14e4
+devid=0x4343
+boardtype=0x0598
+
+# Board Revision is P307, same nvram file can be used for P304, P305, P306 and P307 as the tssi pa params used are same
+#Please force the automatic RX PER data to the respective board directory if not using P307 board, for e.g. for P305 boards force the data into the following directory /projects/BCM43362/a1_labdata/boardtests/results/sdg_rev0305
+boardrev=0x1307
+boardnum=777
+xtalfreq=26000
+boardflags=0x80201
+boardflags2=0x80
+sromrev=3
+wl0id=0x431b
+macaddr=DE:AD:BE:EF:00:00
+aa2g=1
+ag0=2
+maxp2ga0=74
+cck2gpo=0x2222
+ofdm2gpo=0x44444444
+mcs2gpo0=0x6666
+mcs2gpo1=0x6666
+pa0maxpwr=56
+
+#P207 PA params
+#pa0b0=5447
+#pa0b1=-658
+#pa0b2=-175<div></div>
+
+#Same PA params for P304,P305, P306, P307
+
+pa0b0=5447
+pa0b1=-607
+pa0b2=-160
+pa0itssit=62
+pa1itssit=62
+
+
+cckPwrOffset=5
+ccode=0
+rssismf2g=0xa
+rssismc2g=0x3
+rssisav2g=0x7
+triso2g=0
+noise_cal_enable_2g=0
+noise_cal_po_2g=0
+swctrlmap_2g=0x04040404,0x02020202,0x02020202,0x010101,0x1ff
+temp_add=29767
+temp_mult=425
+
+btc_flags=0x6
+btc_params0=5000
+btc_params1=1000
+btc_params6=63
'enabled' => 1,
};
$substatus->{'53.networkovpn'} = {
- 'caption' => "$Lang::tr{'openvpn client'}",
+ 'caption' => "$Lang::tr{'vpn statistic rw'}",
'uri' => '/cgi-bin/netovpnrw.cgi',
- 'title' => "$Lang::tr{'openvpn client'}",
+ 'title' => "$Lang::tr{'vpn statistic rw'}",
'enabled' => 1,
};
$substatus->{'54.networkovpnsrv'} = {
- 'caption' => "$Lang::tr{'openvpn server'}",
+ 'caption' => "$Lang::tr{'vpn statistic n2n'}",
'uri' => '/cgi-bin/netovpnsrv.cgi',
- 'title' => "$Lang::tr{'openvpn server'}",
+ 'title' => "$Lang::tr{'vpn statistics n2n'}",
'enabled' => 1,
};
$substatus->{'60.hardwaregraphs'} = {
'title' => "P2P-Block",
'enabled' => 1,
};
+ $subfirewall->{'50.geoipblock'} = {
+ 'caption' => $Lang::tr{'geoipblock'},
+ 'uri' => '/cgi-bin/geoip-block.cgi',
+ 'title' => $Lang::tr{'geoipblock'},
+ 'enabled' => 1,
+ };
$subfirewall->{'60.wireless'} = {
'caption' => $Lang::tr{'blue access'},
'uri' => '/cgi-bin/wireless.cgi',
--- /dev/null
+#!/bin/bash
+#
+# QEMU wrapper to enable kvm as default like old qemu-kvm...
+#
+if [[ $* == *" -no-kvm"* ]]; then
+ qemu-system-i386 $*
+else
+ qemu-system-i386 -enable-kvm $*
+fi
+exit ${?}
-#usr/lib/perl5/site_perl/5.12.3/Locale
-usr/lib/perl5/site_perl/5.12.3/Locale/Constants.pm
-usr/lib/perl5/site_perl/5.12.3/Locale/Constants.pod
-usr/lib/perl5/site_perl/5.12.3/Locale/Country.pm
-usr/lib/perl5/site_perl/5.12.3/Locale/Country.pod
-usr/lib/perl5/site_perl/5.12.3/Locale/Currency.pm
-usr/lib/perl5/site_perl/5.12.3/Locale/Currency.pod
-usr/lib/perl5/site_perl/5.12.3/Locale/Language.pm
-usr/lib/perl5/site_perl/5.12.3/Locale/Language.pod
-usr/lib/perl5/site_perl/5.12.3/Locale/Script.pm
-usr/lib/perl5/site_perl/5.12.3/Locale/Script.pod
-#usr/lib/perl5/site_perl/5.12.3/MACHINE-linux-thread-multi/auto/Locale-Codes
-#usr/lib/perl5/site_perl/5.12.3/MACHINE-linux-thread-multi/auto/Locale-Codes/.packlist
+#usr/lib/perl5/5.12.3/Locale/Codes
+usr/lib/perl5/5.12.3/Locale/Codes.pm
+usr/lib/perl5/5.12.3/Locale/Codes.pod
+usr/lib/perl5/5.12.3/Locale/Codes/API.pod
+usr/lib/perl5/5.12.3/Locale/Codes/Changes.pod
+usr/lib/perl5/5.12.3/Locale/Codes/Constants.pm
+usr/lib/perl5/5.12.3/Locale/Codes/Constants.pod
+usr/lib/perl5/5.12.3/Locale/Codes/Country.pm
+usr/lib/perl5/5.12.3/Locale/Codes/Country.pod
+usr/lib/perl5/5.12.3/Locale/Codes/Country_Codes.pm
+usr/lib/perl5/5.12.3/Locale/Codes/Country_Retired.pm
+usr/lib/perl5/5.12.3/Locale/Codes/Currency.pm
+usr/lib/perl5/5.12.3/Locale/Codes/Currency.pod
+usr/lib/perl5/5.12.3/Locale/Codes/Currency_Codes.pm
+usr/lib/perl5/5.12.3/Locale/Codes/Currency_Retired.pm
+usr/lib/perl5/5.12.3/Locale/Codes/LangExt.pm
+usr/lib/perl5/5.12.3/Locale/Codes/LangExt.pod
+usr/lib/perl5/5.12.3/Locale/Codes/LangExt_Codes.pm
+usr/lib/perl5/5.12.3/Locale/Codes/LangExt_Retired.pm
+usr/lib/perl5/5.12.3/Locale/Codes/LangFam.pm
+usr/lib/perl5/5.12.3/Locale/Codes/LangFam.pod
+usr/lib/perl5/5.12.3/Locale/Codes/LangFam_Codes.pm
+usr/lib/perl5/5.12.3/Locale/Codes/LangFam_Retired.pm
+usr/lib/perl5/5.12.3/Locale/Codes/LangVar.pm
+usr/lib/perl5/5.12.3/Locale/Codes/LangVar.pod
+usr/lib/perl5/5.12.3/Locale/Codes/LangVar_Codes.pm
+usr/lib/perl5/5.12.3/Locale/Codes/LangVar_Retired.pm
+usr/lib/perl5/5.12.3/Locale/Codes/Language.pm
+usr/lib/perl5/5.12.3/Locale/Codes/Language.pod
+usr/lib/perl5/5.12.3/Locale/Codes/Language_Codes.pm
+usr/lib/perl5/5.12.3/Locale/Codes/Language_Retired.pm
+usr/lib/perl5/5.12.3/Locale/Codes/Script.pm
+usr/lib/perl5/5.12.3/Locale/Codes/Script.pod
+usr/lib/perl5/5.12.3/Locale/Codes/Script_Codes.pm
+usr/lib/perl5/5.12.3/Locale/Codes/Script_Retired.pm
+#usr/lib/perl5/5.12.3/MACHINE-linux-thread-multi/auto/Locale
+#usr/lib/perl5/5.12.3/MACHINE-linux-thread-multi/auto/Locale/Codes
+#usr/lib/perl5/5.12.3/MACHINE-linux-thread-multi/auto/Locale/Codes/.packlist
+#usr/share/man/man3/Locale::Codes.3
+#usr/share/man/man3/Locale::Codes::API.3
+#usr/share/man/man3/Locale::Codes::Changes.3
+#usr/share/man/man3/Locale::Codes::Constants.3
+#usr/share/man/man3/Locale::Codes::Country.3
+#usr/share/man/man3/Locale::Codes::Currency.3
+#usr/share/man/man3/Locale::Codes::LangExt.3
+#usr/share/man/man3/Locale::Codes::LangFam.3
+#usr/share/man/man3/Locale::Codes::LangFam_Retired.3
+#usr/share/man/man3/Locale::Codes::LangVar.3
+#usr/share/man/man3/Locale::Codes::Language.3
+#usr/share/man/man3/Locale::Codes::Script.3
#etc/httpd
#etc/httpd/conf
+#etc/httpd/conf/conf.d
+etc/httpd/conf/conf.d/php5.conf
+etc/httpd/conf/default-server.conf
#etc/httpd/conf/extra
#etc/httpd/conf/extra/httpd-autoindex.conf
#etc/httpd/conf/extra/httpd-dav.conf
#etc/httpd/conf/extra/httpd-ssl.conf
#etc/httpd/conf/extra/httpd-userdir.conf
#etc/httpd/conf/extra/httpd-vhosts.conf
+etc/httpd/conf/global.conf
+etc/httpd/conf/hostname.conf
etc/httpd/conf/httpd.conf
+etc/httpd/conf/listen.conf
+etc/httpd/conf/loadmodule.conf
etc/httpd/conf/magic
etc/httpd/conf/mime.types
+etc/httpd/conf/mod_log_config.conf
#etc/httpd/conf/original
#etc/httpd/conf/original/extra
#etc/httpd/conf/original/extra/httpd-autoindex.conf
#etc/httpd/conf/original/extra/httpd-userdir.conf
#etc/httpd/conf/original/extra/httpd-vhosts.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/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/cgi-bin
#usr/lib/libapr-1.la
usr/lib/libapr-1.so
usr/lib/libapr-1.so.0
-usr/lib/libapr-1.so.0.5.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/share/man/man8/rotatelogs.8
#usr/share/man/man8/suexec.8
var/log/httpd
-etc/httpd/conf/conf.d
-etc/httpd/conf/default-server.conf
-etc/httpd/conf/global.conf
-etc/httpd/conf/hostname.conf
-etc/httpd/conf/listen.conf
-etc/httpd/conf/loadmodule.conf
-etc/httpd/conf/mod_log_config.conf
-etc/httpd/conf/server-tuning.conf
-etc/httpd/conf/ssl-global.conf
-etc/httpd/conf/uid.conf
-etc/httpd/conf/vhosts.d/ipfire-interface-ssl.conf
-etc/httpd/conf/vhosts.d/ipfire-interface.conf
-srv/web/ipfire/cgi-bin/aliases.cgi
-srv/web/ipfire/cgi-bin/atm-status.cgi
-srv/web/ipfire/cgi-bin/backup.cgi
-srv/web/ipfire/cgi-bin/chpasswd.cgi
-srv/web/ipfire/cgi-bin/connections.cgi
-srv/web/ipfire/cgi-bin/connscheduler.cgi
-srv/web/ipfire/cgi-bin/country.cgi
-srv/web/ipfire/cgi-bin/credits.cgi
-srv/web/ipfire/cgi-bin/dns.cgi
-srv/web/ipfire/cgi-bin/dnsforward.cgi
-srv/web/ipfire/cgi-bin/ddns.cgi
-srv/web/ipfire/cgi-bin/dhcp.cgi
-srv/web/ipfire/cgi-bin/entropy.cgi
-srv/web/ipfire/cgi-bin/extrahd.cgi
-srv/web/ipfire/cgi-bin/fireinfo.cgi
-srv/web/ipfire/cgi-bin/firewall.cgi
-srv/web/ipfire/cgi-bin/fwhosts.cgi
-srv/web/ipfire/cgi-bin/gpl.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/ids.cgi
-srv/web/ipfire/cgi-bin/index.cgi
-srv/web/ipfire/cgi-bin/ipinfo.cgi
-srv/web/ipfire/cgi-bin/iptables.cgi
-srv/web/ipfire/cgi-bin/logs.cgi
-srv/web/ipfire/cgi-bin/mac.cgi
-srv/web/ipfire/cgi-bin/media.cgi
-srv/web/ipfire/cgi-bin/memory.cgi
-srv/web/ipfire/cgi-bin/modem.cgi
-srv/web/ipfire/cgi-bin/modem-status.cgi
-srv/web/ipfire/cgi-bin/netexternal.cgi
-srv/web/ipfire/cgi-bin/netinternal.cgi
-srv/web/ipfire/cgi-bin/netother.cgi
-srv/web/ipfire/cgi-bin/netovpnrw.cgi
-srv/web/ipfire/cgi-bin/netovpnsrv.cgi
-srv/web/ipfire/cgi-bin/optionsfw.cgi
-srv/web/ipfire/cgi-bin/ovpnmain.cgi
-srv/web/ipfire/cgi-bin/p2p-block.cgi
-srv/web/ipfire/cgi-bin/pakfire.cgi
-srv/web/ipfire/cgi-bin/pppsetup.cgi
-srv/web/ipfire/cgi-bin/proxy.cgi
-srv/web/ipfire/cgi-bin/qos.cgi
-srv/web/ipfire/cgi-bin/remote.cgi
-srv/web/ipfire/cgi-bin/routing.cgi
-srv/web/ipfire/cgi-bin/services.cgi
-srv/web/ipfire/cgi-bin/shutdown.cgi
-srv/web/ipfire/cgi-bin/speed.cgi
-srv/web/ipfire/cgi-bin/system.cgi
-srv/web/ipfire/cgi-bin/time.cgi
-srv/web/ipfire/cgi-bin/traffic.cgi
-srv/web/ipfire/cgi-bin/updatexlrator.cgi
-srv/web/ipfire/cgi-bin/upnp.cgi
-srv/web/ipfire/cgi-bin/urlfilter.cgi
-srv/web/ipfire/cgi-bin/vpnmain.cgi
-srv/web/ipfire/cgi-bin/wakeonlan.cgi
-srv/web/ipfire/cgi-bin/webaccess.cgi
-srv/web/ipfire/cgi-bin/wireless.cgi
-srv/web/ipfire/cgi-bin/wirelessclient.cgi
-srv/web/ipfire/html
-var/updatecache
etc/rc.d/init.d/functions
#etc/rc.d/init.d/gnump3d
etc/rc.d/init.d/halt
+#etc/rc.d/init.d/haproxy
#etc/rc.d/init.d/hostapd
#etc/rc.d/init.d/imspector
etc/rc.d/init.d/ipsec
#etc/rc.d/init.d/mysql
#etc/rc.d/init.d/netsnmpd
etc/rc.d/init.d/network
+etc/rc.d/init.d/network-trigger
etc/rc.d/init.d/network-vlans
#etc/rc.d/init.d/networking
etc/rc.d/init.d/networking/any
etc/rc.d/init.d/networking/red.up/50-ovpn
etc/rc.d/init.d/networking/red.up/98-leds
etc/rc.d/init.d/networking/red.up/99-fireinfo
+etc/rc.d/init.d/networking/red.up/99-geoip-database
etc/rc.d/init.d/networking/red.up/99-pakfire-update
etc/rc.d/init.d/networking/wpa_supplicant.exe
#etc/rc.d/init.d/nfs-server
etc/rc.d/init.d/static-routes
#etc/rc.d/init.d/stunnel
etc/rc.d/init.d/swap
+etc/rc.d/init.d/swconfig
etc/rc.d/init.d/sysctl
etc/rc.d/init.d/sysklogd
-etc/rc.d/init.d/teamspeak
etc/rc.d/init.d/template
#etc/rc.d/init.d/tftpd
etc/rc.d/init.d/tmpfs
etc/rc.d/rcsysinit.d/S50cleanfs
etc/rc.d/rcsysinit.d/S60setclock
etc/rc.d/rcsysinit.d/S70console
+etc/rc.d/rcsysinit.d/S73swconfig
etc/rc.d/rcsysinit.d/S75firstsetup
etc/rc.d/rcsysinit.d/S80localnet
etc/rc.d/rcsysinit.d/S85firewall
+etc/rc.d/rcsysinit.d/S90network-trigger
etc/rc.d/rcsysinit.d/S91network-vlans
etc/rc.d/rcsysinit.d/S92rngd
etc/rc.d/rc3.d/S15fireinfo
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/common/siano/smsdvb.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/common/siano/smsmdtv.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/common/tveeprom.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/dvb-core
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/dvb-core/dvb-core.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/dvb-frontends
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/dvb-frontends/a8293.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/dvb-frontends/af9013.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/i2c/cs53l32a.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/i2c/cx25840
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/i2c/cx25840/cx25840.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/i2c/ir-kbd-i2c.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/i2c/m52790.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/i2c/msp3400.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/i2c/mt9v011.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/i2c/vp27smpx.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/i2c/wm8739.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/i2c/wm8775.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/media.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/pci
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/pci/b2c2
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/pci/b2c2/b2c2-flexcop-pci.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/rc/keymaps/rc-winfast.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/rc/lirc_dev.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/rc/mceusb.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/rc/rc-core.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/rc/rc-loopback.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/rc/redrat3.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/rc/streamzap.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/tuners/fc2580.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/tuners/m88ts2022.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/tuners/max2165.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/tuners/mc44s803.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/tuners/mt2060.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/tuners/mt2063.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/tuners/mt20xx.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/tuners/mt2131.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/tuners/mt2266.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/tuners/mxl5005s.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/tuners/r820t.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/tuners/tda18212.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/tuners/tda18218.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/tuners/tda18271.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/tuners/tda827x.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/tuners/tda8290.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/tuners/tda9887.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/tuners/tua9001.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/tuners/tuner-simple.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/tuners/tuner-types.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/tuners/tuner-xc2028.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/tuners/tuner_it913x.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/tuners/xc4000.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/tuners/xc5000.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/usb
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/usb/au0828
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/usb/au0828/au0828.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/usb/zr364xx/zr364xx.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/v4l2-core
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/v4l2-core/tuner.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/v4l2-core/v4l2-common.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/v4l2-core/v4l2-dv-timings.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/v4l2-core/v4l2-mem2mem.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/v4l2-core/videobuf-core.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/v4l2-core/videobuf-dma-contig.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/v4l2-core/videobuf2-dma-contig.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/v4l2-core/videobuf2-memops.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/v4l2-core/videobuf2-vmalloc.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/v4l2-core/videodev.ko
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/memstick
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/memstick/core
#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/memstick/core/memstick.ko
#boot/dtb-KVER-ipfire-multi/imx6dl-sabresd.dtb
#boot/dtb-KVER-ipfire-multi/imx6dl-wandboard.dtb
#boot/dtb-KVER-ipfire-multi/imx6q-arm2.dtb
+#boot/dtb-KVER-ipfire-multi/imx6q-cm-fx6.dtb
#boot/dtb-KVER-ipfire-multi/imx6q-cubox-i.dtb
#boot/dtb-KVER-ipfire-multi/imx6q-gw51xx.dtb
#boot/dtb-KVER-ipfire-multi/imx6q-gw52xx.dtb
#boot/dtb-KVER-ipfire-multi/sun5i-a13-olinuxino.dtb
#boot/dtb-KVER-ipfire-multi/sun6i-a31-colombus.dtb
#boot/dtb-KVER-ipfire-multi/sun7i-a20-bananapi.dtb
+#boot/dtb-KVER-ipfire-multi/sun7i-a20-bananapro.dtb
#boot/dtb-KVER-ipfire-multi/sun7i-a20-cubieboard2.dtb
#boot/dtb-KVER-ipfire-multi/sun7i-a20-cubietruck.dtb
+#boot/dtb-KVER-ipfire-multi/sun7i-a20-lamobo-r1.dtb
#boot/dtb-KVER-ipfire-multi/sun7i-a20-olinuxino-micro.dtb
#boot/dtb-KVER-ipfire-multi/sun7i-a20-pcduino3.dtb
#boot/dtb-KVER-ipfire-multi/vexpress-v2p-ca15-tc1.dtb
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/common/siano/smsdvb.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/common/siano/smsmdtv.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/common/tveeprom.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/dvb-core
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/dvb-core/dvb-core.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/dvb-frontends
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/dvb-frontends/a8293.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/dvb-frontends/af9013.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/i2c/cs53l32a.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/i2c/cx25840
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/i2c/cx25840/cx25840.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/i2c/ir-kbd-i2c.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/i2c/m52790.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/i2c/msp3400.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/i2c/mt9v011.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/i2c/vp27smpx.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/i2c/wm8739.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/i2c/wm8775.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/media.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/pci
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/pci/b2c2
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/pci/b2c2/b2c2-flexcop-pci.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/pci/ttpci/ttpci-eeprom.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/platform
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/platform/m2m-deinterlace.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/platform/omap
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/platform/omap/omap-vout.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/platform/sh_veu.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/platform/soc_camera
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/platform/soc_camera/mx3_camera.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/rc/keymaps/rc-winfast.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/rc/lirc_dev.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/rc/mceusb.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/rc/rc-core.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/rc/rc-loopback.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/rc/redrat3.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/rc/streamzap.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/tuners/fc2580.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/tuners/m88ts2022.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/tuners/max2165.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/tuners/mc44s803.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/tuners/mt2060.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/tuners/mt2063.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/tuners/mt20xx.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/tuners/mt2131.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/tuners/mt2266.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/tuners/mxl5005s.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/tuners/r820t.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/tuners/tda18212.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/tuners/tda18218.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/tuners/tda18271.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/tuners/tda827x.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/tuners/tda8290.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/tuners/tda9887.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/tuners/tua9001.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/tuners/tuner-simple.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/tuners/tuner-types.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/tuners/tuner-xc2028.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/tuners/tuner_it913x.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/tuners/xc4000.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/tuners/xc5000.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/usb
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/usb/au0828
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/usb/au0828/au0828.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/usb/zr364xx/zr364xx.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/v4l2-core
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/v4l2-core/tuner.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/v4l2-core/v4l2-common.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/v4l2-core/v4l2-dv-timings.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/v4l2-core/v4l2-mem2mem.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/v4l2-core/videobuf-core.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/v4l2-core/videobuf-dma-contig.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/v4l2-core/videobuf-dma-sg.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/v4l2-core/videobuf-dvb.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/v4l2-core/videobuf-vmalloc.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/v4l2-core/videobuf2-dma-contig.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/v4l2-core/videobuf2-memops.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/media/v4l2-core/videobuf2-vmalloc.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/v4l2-core/videodev.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/memstick
#lib/modules/KVER-ipfire-multi/kernel/drivers/memstick/core
#lib/modules/KVER-ipfire-multi/kernel/drivers/memstick/core/memstick.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/jme.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/marvell
#lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/marvell/mv643xx_eth.ko
-#lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/marvell/mvmdio.ko
-#lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/marvell/mvneta.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/marvell/skge.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/marvell/sky2.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/mellanox
#lib/modules/KVER-ipfire-multi/kernel/drivers/net/phy
#lib/modules/KVER-ipfire-multi/kernel/drivers/net/phy/amd.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/net/phy/at803x.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/net/phy/b53
+#lib/modules/KVER-ipfire-multi/kernel/drivers/net/phy/b53/b53_common.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/net/phy/b53/b53_mdio.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/net/phy/bcm87xx.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/net/phy/broadcom.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/net/phy/cicada.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/net/phy/lxt.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/net/phy/marvell.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/net/phy/mdio-bitbang.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/net/phy/mdio-gpio.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/net/phy/mdio-mux-gpio.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/net/phy/mdio-mux-mmioreg.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/net/phy/mdio-mux.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/net/phy/realtek.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/net/phy/smsc.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/net/phy/ste10Xp.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/net/phy/swconfig.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/net/phy/vitesse.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/net/ppp
#lib/modules/KVER-ipfire-multi/kernel/drivers/net/ppp/bsd_comp.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/rtc/rtc-max6900.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/rtc/rtc-moxart.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/rtc/rtc-msm6242.ko
-#lib/modules/KVER-ipfire-multi/kernel/drivers/rtc/rtc-mv.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/rtc/rtc-mxc.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/rtc/rtc-pcf2127.ko
#lib/modules/KVER-ipfire-multi/kernel/drivers/rtc/rtc-pcf8523.ko
#lib/modules/KVER-ipfire-multi/modules.symbols
#lib/modules/KVER-ipfire-multi/modules.symbols.bin
#lib/modules/KVER-ipfire-multi/source
+usr/include/linux/switch.h
boot/uInit-ipfire-multi
#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ifb.ko
#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/imq.ko
#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/macvlan.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/mii.ko
#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/netconsole.ko
#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/phy
#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/phy/libphy.ko
#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/usb/rtl8150.ko
#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/usb/sierra_net.ko
#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/usb/smsc75xx.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/usb/smsc95xx.ko
#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/usb/sr9700.ko
#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/usb/sr9800.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/usb/usbnet.ko
#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/usb/zaurus.ko
#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/veth.ko
#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless
--- /dev/null
+usr/bin/swconfig
#usr/bin/setarch
usr/bin/setsid
#usr/bin/setterm
-#usr/bin/tailf
+usr/bin/tailf
#usr/bin/taskset
#usr/bin/ul
#usr/bin/unshare
usr/lib/libcollectdclient.so
usr/lib/libcollectdclient.so.0
usr/lib/libcollectdclient.so.0.0.0
-#usr/lib/perl5/site_perl/5.12.3/Collectd
-#usr/lib/perl5/site_perl/5.12.3/Collectd.pm
-#usr/lib/perl5/site_perl/5.12.3/Collectd/Plugins
-#usr/lib/perl5/site_perl/5.12.3/Collectd/Plugins/Monitorus.pm
-#usr/lib/perl5/site_perl/5.12.3/Collectd/Plugins/OpenVZ.pm
-#usr/lib/perl5/site_perl/5.12.3/Collectd/Unixsock.pm
-#usr/lib/perl5/site_perl/5.12.3/MACHINE-linux-thread-multi/auto/Collectd
-#usr/lib/perl5/site_perl/5.12.3/MACHINE-linux-thread-multi/auto/Collectd/.packlist
+#usr/lib/perl5/Collectd
+#usr/lib/perl5/Collectd.pm
+#usr/lib/perl5/Collectd/Plugins
+#usr/lib/perl5/Collectd/Plugins/OpenVZ.pm
+#usr/lib/perl5/Collectd/Unixsock.pm
+#usr/lib/perl5/MACHINE-linux-thread-multi
+#usr/lib/perl5/MACHINE-linux-thread-multi/auto
+#usr/lib/perl5/MACHINE-linux-thread-multi/auto/Collectd
+#usr/lib/perl5/MACHINE-linux-thread-multi/auto/Collectd/.packlist
+#usr/lib/perl5/MACHINE-linux-thread-multi/perllocal.pod
#usr/lib/pkgconfig/libcollectdclient.pc
+#usr/man/man3/Collectd::Unixsock.3
usr/sbin/collectd
usr/sbin/collectdmon
#usr/share/collectd
#usr/share/man/man1/collectd-nagios.1
#usr/share/man/man1/collectd.1
#usr/share/man/man1/collectdmon.1
-#usr/share/man/man3/Collectd::Unixsock.3
#usr/share/man/man5/collectd-email.5
#usr/share/man/man5/collectd-exec.5
#usr/share/man/man5/collectd-java.5
#usr/share/man/man5/collectd.conf.5
#usr/share/man/man5/types.db.5
#var/lib/collectd
+var/ipfire/ovpn/collectd.vpn
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/settings
var/ipfire/fwhosts
#var/ipfire/fwhosts/customgroups
+#var/ipfire/fwhosts/customgeoipgrp
#var/ipfire/fwhosts/customhosts
#var/ipfire/fwhosts/customnetworks
#var/ipfire/fwhosts/customservicegrp
#var/ipfire/fwlogs/ipsettings
#var/ipfire/fwlogs/portsettings
var/ipfire/general-functions.pl
+var/ipfire/geoip-functions.pl
var/ipfire/graphs.pl
var/ipfire/header.pl
var/ipfire/isdn
lib/udev/rules.d/85-regulatory.rules
#root/.python-eggs
-#root/.python-eggs/M2Crypto-0.21.1-py2.7-linux-i586.egg-tmp
-#root/.python-eggs/M2Crypto-0.21.1-py2.7-linux-i586.egg-tmp/M2Crypto
-#root/.python-eggs/M2Crypto-0.21.1-py2.7-linux-i586.egg-tmp/M2Crypto/__m2crypto.so
+#root/.python-eggs/M2Crypto-0.21.1-py2.7-linux-MACHINE.egg-tmp
+#root/.python-eggs/M2Crypto-0.21.1-py2.7-linux-MACHINE.egg-tmp/M2Crypto
+#root/.python-eggs/M2Crypto-0.21.1-py2.7-linux-MACHINE.egg-tmp/M2Crypto/__m2crypto.so
sbin/crda
sbin/regdbdump
#usr/include/reglib
#usr/include/curl/multi.h
#usr/include/curl/stdcheaders.h
#usr/include/curl/typecheck-gcc.h
-#usr/include/curl/types.h
#usr/lib/libcurl.a
#usr/lib/libcurl.la
usr/lib/libcurl.so
usr/lib/libcurl.so.4
usr/lib/libcurl.so.4.3.0
#usr/lib/pkgconfig/libcurl.pc
+#usr/share/aclocal/libcurl.m4
#usr/share/man/man1/curl-config.1
#usr/share/man/man1/curl.1
-#usr/share/man/man1/mk-ca-bundle.1
+#usr/share/man/man3/CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.3
+#usr/share/man/man3/CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.3
+#usr/share/man/man3/CURLMOPT_MAXCONNECTS.3
+#usr/share/man/man3/CURLMOPT_MAX_HOST_CONNECTIONS.3
+#usr/share/man/man3/CURLMOPT_MAX_PIPELINE_LENGTH.3
+#usr/share/man/man3/CURLMOPT_MAX_TOTAL_CONNECTIONS.3
+#usr/share/man/man3/CURLMOPT_PIPELINING.3
+#usr/share/man/man3/CURLMOPT_PIPELINING_SERVER_BL.3
+#usr/share/man/man3/CURLMOPT_PIPELINING_SITE_BL.3
+#usr/share/man/man3/CURLMOPT_SOCKETDATA.3
+#usr/share/man/man3/CURLMOPT_SOCKETFUNCTION.3
+#usr/share/man/man3/CURLMOPT_TIMERDATA.3
+#usr/share/man/man3/CURLMOPT_TIMERFUNCTION.3
+#usr/share/man/man3/CURLOPT_ACCEPTTIMEOUT_MS.3
+#usr/share/man/man3/CURLOPT_ACCEPT_ENCODING.3
+#usr/share/man/man3/CURLOPT_ADDRESS_SCOPE.3
+#usr/share/man/man3/CURLOPT_APPEND.3
+#usr/share/man/man3/CURLOPT_AUTOREFERER.3
+#usr/share/man/man3/CURLOPT_BUFFERSIZE.3
+#usr/share/man/man3/CURLOPT_CAINFO.3
+#usr/share/man/man3/CURLOPT_CAPATH.3
+#usr/share/man/man3/CURLOPT_CERTINFO.3
+#usr/share/man/man3/CURLOPT_CHUNK_BGN_FUNCTION.3
+#usr/share/man/man3/CURLOPT_CHUNK_DATA.3
+#usr/share/man/man3/CURLOPT_CHUNK_END_FUNCTION.3
+#usr/share/man/man3/CURLOPT_CLOSESOCKETDATA.3
+#usr/share/man/man3/CURLOPT_CLOSESOCKETFUNCTION.3
+#usr/share/man/man3/CURLOPT_CONNECTTIMEOUT.3
+#usr/share/man/man3/CURLOPT_CONNECTTIMEOUT_MS.3
+#usr/share/man/man3/CURLOPT_CONNECT_ONLY.3
+#usr/share/man/man3/CURLOPT_CONV_FROM_NETWORK_FUNCTION.3
+#usr/share/man/man3/CURLOPT_CONV_FROM_UTF8_FUNCTION.3
+#usr/share/man/man3/CURLOPT_CONV_TO_NETWORK_FUNCTION.3
+#usr/share/man/man3/CURLOPT_COOKIE.3
+#usr/share/man/man3/CURLOPT_COOKIEFILE.3
+#usr/share/man/man3/CURLOPT_COOKIEJAR.3
+#usr/share/man/man3/CURLOPT_COOKIELIST.3
+#usr/share/man/man3/CURLOPT_COOKIESESSION.3
+#usr/share/man/man3/CURLOPT_COPYPOSTFIELDS.3
+#usr/share/man/man3/CURLOPT_CRLF.3
+#usr/share/man/man3/CURLOPT_CRLFILE.3
+#usr/share/man/man3/CURLOPT_CUSTOMREQUEST.3
+#usr/share/man/man3/CURLOPT_DEBUGDATA.3
+#usr/share/man/man3/CURLOPT_DEBUGFUNCTION.3
+#usr/share/man/man3/CURLOPT_DIRLISTONLY.3
+#usr/share/man/man3/CURLOPT_DNS_CACHE_TIMEOUT.3
+#usr/share/man/man3/CURLOPT_DNS_INTERFACE.3
+#usr/share/man/man3/CURLOPT_DNS_LOCAL_IP4.3
+#usr/share/man/man3/CURLOPT_DNS_LOCAL_IP6.3
+#usr/share/man/man3/CURLOPT_DNS_SERVERS.3
+#usr/share/man/man3/CURLOPT_DNS_USE_GLOBAL_CACHE.3
+#usr/share/man/man3/CURLOPT_EGDSOCKET.3
+#usr/share/man/man3/CURLOPT_ERRORBUFFER.3
+#usr/share/man/man3/CURLOPT_EXPECT_100_TIMEOUT_MS.3
+#usr/share/man/man3/CURLOPT_FAILONERROR.3
+#usr/share/man/man3/CURLOPT_FILETIME.3
+#usr/share/man/man3/CURLOPT_FNMATCH_DATA.3
+#usr/share/man/man3/CURLOPT_FNMATCH_FUNCTION.3
+#usr/share/man/man3/CURLOPT_FOLLOWLOCATION.3
+#usr/share/man/man3/CURLOPT_FORBID_REUSE.3
+#usr/share/man/man3/CURLOPT_FRESH_CONNECT.3
+#usr/share/man/man3/CURLOPT_FTPPORT.3
+#usr/share/man/man3/CURLOPT_FTPSSLAUTH.3
+#usr/share/man/man3/CURLOPT_FTP_ACCOUNT.3
+#usr/share/man/man3/CURLOPT_FTP_ALTERNATIVE_TO_USER.3
+#usr/share/man/man3/CURLOPT_FTP_CREATE_MISSING_DIRS.3
+#usr/share/man/man3/CURLOPT_FTP_FILEMETHOD.3
+#usr/share/man/man3/CURLOPT_FTP_RESPONSE_TIMEOUT.3
+#usr/share/man/man3/CURLOPT_FTP_SKIP_PASV_IP.3
+#usr/share/man/man3/CURLOPT_FTP_SSL_CCC.3
+#usr/share/man/man3/CURLOPT_FTP_USE_EPRT.3
+#usr/share/man/man3/CURLOPT_FTP_USE_EPSV.3
+#usr/share/man/man3/CURLOPT_FTP_USE_PRET.3
+#usr/share/man/man3/CURLOPT_GSSAPI_DELEGATION.3
+#usr/share/man/man3/CURLOPT_HEADER.3
+#usr/share/man/man3/CURLOPT_HEADERDATA.3
+#usr/share/man/man3/CURLOPT_HEADERFUNCTION.3
+#usr/share/man/man3/CURLOPT_HEADEROPT.3
+#usr/share/man/man3/CURLOPT_HTTP200ALIASES.3
+#usr/share/man/man3/CURLOPT_HTTPAUTH.3
+#usr/share/man/man3/CURLOPT_HTTPGET.3
+#usr/share/man/man3/CURLOPT_HTTPHEADER.3
+#usr/share/man/man3/CURLOPT_HTTPPOST.3
+#usr/share/man/man3/CURLOPT_HTTPPROXYTUNNEL.3
+#usr/share/man/man3/CURLOPT_HTTP_CONTENT_DECODING.3
+#usr/share/man/man3/CURLOPT_HTTP_TRANSFER_DECODING.3
+#usr/share/man/man3/CURLOPT_HTTP_VERSION.3
+#usr/share/man/man3/CURLOPT_IGNORE_CONTENT_LENGTH.3
+#usr/share/man/man3/CURLOPT_INFILESIZE.3
+#usr/share/man/man3/CURLOPT_INFILESIZE_LARGE.3
+#usr/share/man/man3/CURLOPT_INTERFACE.3
+#usr/share/man/man3/CURLOPT_INTERLEAVEDATA.3
+#usr/share/man/man3/CURLOPT_INTERLEAVEFUNCTION.3
+#usr/share/man/man3/CURLOPT_IOCTLDATA.3
+#usr/share/man/man3/CURLOPT_IOCTLFUNCTION.3
+#usr/share/man/man3/CURLOPT_IPRESOLVE.3
+#usr/share/man/man3/CURLOPT_ISSUERCERT.3
+#usr/share/man/man3/CURLOPT_KEYPASSWD.3
+#usr/share/man/man3/CURLOPT_KRBLEVEL.3
+#usr/share/man/man3/CURLOPT_LOCALPORT.3
+#usr/share/man/man3/CURLOPT_LOCALPORTRANGE.3
+#usr/share/man/man3/CURLOPT_LOGIN_OPTIONS.3
+#usr/share/man/man3/CURLOPT_LOW_SPEED_LIMIT.3
+#usr/share/man/man3/CURLOPT_LOW_SPEED_TIME.3
+#usr/share/man/man3/CURLOPT_MAIL_AUTH.3
+#usr/share/man/man3/CURLOPT_MAIL_FROM.3
+#usr/share/man/man3/CURLOPT_MAIL_RCPT.3
+#usr/share/man/man3/CURLOPT_MAXCONNECTS.3
+#usr/share/man/man3/CURLOPT_MAXFILESIZE.3
+#usr/share/man/man3/CURLOPT_MAXFILESIZE_LARGE.3
+#usr/share/man/man3/CURLOPT_MAXREDIRS.3
+#usr/share/man/man3/CURLOPT_MAX_RECV_SPEED_LARGE.3
+#usr/share/man/man3/CURLOPT_MAX_SEND_SPEED_LARGE.3
+#usr/share/man/man3/CURLOPT_NETRC.3
+#usr/share/man/man3/CURLOPT_NETRC_FILE.3
+#usr/share/man/man3/CURLOPT_NEW_DIRECTORY_PERMS.3
+#usr/share/man/man3/CURLOPT_NEW_FILE_PERMS.3
+#usr/share/man/man3/CURLOPT_NOBODY.3
+#usr/share/man/man3/CURLOPT_NOPROGRESS.3
+#usr/share/man/man3/CURLOPT_NOPROXY.3
+#usr/share/man/man3/CURLOPT_NOSIGNAL.3
+#usr/share/man/man3/CURLOPT_OPENSOCKETDATA.3
+#usr/share/man/man3/CURLOPT_OPENSOCKETFUNCTION.3
+#usr/share/man/man3/CURLOPT_PASSWORD.3
+#usr/share/man/man3/CURLOPT_PORT.3
+#usr/share/man/man3/CURLOPT_POST.3
+#usr/share/man/man3/CURLOPT_POSTFIELDS.3
+#usr/share/man/man3/CURLOPT_POSTFIELDSIZE.3
+#usr/share/man/man3/CURLOPT_POSTFIELDSIZE_LARGE.3
+#usr/share/man/man3/CURLOPT_POSTQUOTE.3
+#usr/share/man/man3/CURLOPT_POSTREDIR.3
+#usr/share/man/man3/CURLOPT_PREQUOTE.3
+#usr/share/man/man3/CURLOPT_PRIVATE.3
+#usr/share/man/man3/CURLOPT_PROGRESSDATA.3
+#usr/share/man/man3/CURLOPT_PROGRESSFUNCTION.3
+#usr/share/man/man3/CURLOPT_PROTOCOLS.3
+#usr/share/man/man3/CURLOPT_PROXY.3
+#usr/share/man/man3/CURLOPT_PROXYAUTH.3
+#usr/share/man/man3/CURLOPT_PROXYHEADER.3
+#usr/share/man/man3/CURLOPT_PROXYPASSWORD.3
+#usr/share/man/man3/CURLOPT_PROXYPORT.3
+#usr/share/man/man3/CURLOPT_PROXYTYPE.3
+#usr/share/man/man3/CURLOPT_PROXYUSERNAME.3
+#usr/share/man/man3/CURLOPT_PROXYUSERPWD.3
+#usr/share/man/man3/CURLOPT_PROXY_TRANSFER_MODE.3
+#usr/share/man/man3/CURLOPT_PUT.3
+#usr/share/man/man3/CURLOPT_QUOTE.3
+#usr/share/man/man3/CURLOPT_RANDOM_FILE.3
+#usr/share/man/man3/CURLOPT_RANGE.3
+#usr/share/man/man3/CURLOPT_READDATA.3
+#usr/share/man/man3/CURLOPT_READFUNCTION.3
+#usr/share/man/man3/CURLOPT_REDIR_PROTOCOLS.3
+#usr/share/man/man3/CURLOPT_REFERER.3
+#usr/share/man/man3/CURLOPT_RESOLVE.3
+#usr/share/man/man3/CURLOPT_RESUME_FROM.3
+#usr/share/man/man3/CURLOPT_RESUME_FROM_LARGE.3
+#usr/share/man/man3/CURLOPT_RTSP_CLIENT_CSEQ.3
+#usr/share/man/man3/CURLOPT_RTSP_REQUEST.3
+#usr/share/man/man3/CURLOPT_RTSP_SERVER_CSEQ.3
+#usr/share/man/man3/CURLOPT_RTSP_SESSION_ID.3
+#usr/share/man/man3/CURLOPT_RTSP_STREAM_URI.3
+#usr/share/man/man3/CURLOPT_RTSP_TRANSPORT.3
+#usr/share/man/man3/CURLOPT_SASL_IR.3
+#usr/share/man/man3/CURLOPT_SEEKDATA.3
+#usr/share/man/man3/CURLOPT_SEEKFUNCTION.3
+#usr/share/man/man3/CURLOPT_SHARE.3
+#usr/share/man/man3/CURLOPT_SOCKOPTDATA.3
+#usr/share/man/man3/CURLOPT_SOCKOPTFUNCTION.3
+#usr/share/man/man3/CURLOPT_SOCKS5_GSSAPI_NEC.3
+#usr/share/man/man3/CURLOPT_SOCKS5_GSSAPI_SERVICE.3
+#usr/share/man/man3/CURLOPT_SSH_AUTH_TYPES.3
+#usr/share/man/man3/CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.3
+#usr/share/man/man3/CURLOPT_SSH_KEYDATA.3
+#usr/share/man/man3/CURLOPT_SSH_KEYFUNCTION.3
+#usr/share/man/man3/CURLOPT_SSH_KNOWNHOSTS.3
+#usr/share/man/man3/CURLOPT_SSH_PRIVATE_KEYFILE.3
+#usr/share/man/man3/CURLOPT_SSH_PUBLIC_KEYFILE.3
+#usr/share/man/man3/CURLOPT_SSLCERT.3
+#usr/share/man/man3/CURLOPT_SSLCERTTYPE.3
+#usr/share/man/man3/CURLOPT_SSLENGINE.3
+#usr/share/man/man3/CURLOPT_SSLENGINE_DEFAULT.3
+#usr/share/man/man3/CURLOPT_SSLKEY.3
+#usr/share/man/man3/CURLOPT_SSLKEYTYPE.3
+#usr/share/man/man3/CURLOPT_SSLVERSION.3
+#usr/share/man/man3/CURLOPT_SSL_CIPHER_LIST.3
+#usr/share/man/man3/CURLOPT_SSL_CTX_DATA.3
+#usr/share/man/man3/CURLOPT_SSL_CTX_FUNCTION.3
+#usr/share/man/man3/CURLOPT_SSL_ENABLE_ALPN.3
+#usr/share/man/man3/CURLOPT_SSL_ENABLE_NPN.3
+#usr/share/man/man3/CURLOPT_SSL_OPTIONS.3
+#usr/share/man/man3/CURLOPT_SSL_SESSIONID_CACHE.3
+#usr/share/man/man3/CURLOPT_SSL_VERIFYHOST.3
+#usr/share/man/man3/CURLOPT_SSL_VERIFYPEER.3
+#usr/share/man/man3/CURLOPT_STDERR.3
+#usr/share/man/man3/CURLOPT_TCP_KEEPALIVE.3
+#usr/share/man/man3/CURLOPT_TCP_KEEPIDLE.3
+#usr/share/man/man3/CURLOPT_TCP_KEEPINTVL.3
+#usr/share/man/man3/CURLOPT_TCP_NODELAY.3
+#usr/share/man/man3/CURLOPT_TELNETOPTIONS.3
+#usr/share/man/man3/CURLOPT_TFTP_BLKSIZE.3
+#usr/share/man/man3/CURLOPT_TIMECONDITION.3
+#usr/share/man/man3/CURLOPT_TIMEOUT.3
+#usr/share/man/man3/CURLOPT_TIMEOUT_MS.3
+#usr/share/man/man3/CURLOPT_TIMEVALUE.3
+#usr/share/man/man3/CURLOPT_TLSAUTH_PASSWORD.3
+#usr/share/man/man3/CURLOPT_TLSAUTH_TYPE.3
+#usr/share/man/man3/CURLOPT_TLSAUTH_USERNAME.3
+#usr/share/man/man3/CURLOPT_TRANSFERTEXT.3
+#usr/share/man/man3/CURLOPT_TRANSFER_ENCODING.3
+#usr/share/man/man3/CURLOPT_UNIX_SOCKET_PATH.3
+#usr/share/man/man3/CURLOPT_UNRESTRICTED_AUTH.3
+#usr/share/man/man3/CURLOPT_UPLOAD.3
+#usr/share/man/man3/CURLOPT_URL.3
+#usr/share/man/man3/CURLOPT_USERAGENT.3
+#usr/share/man/man3/CURLOPT_USERNAME.3
+#usr/share/man/man3/CURLOPT_USERPWD.3
+#usr/share/man/man3/CURLOPT_USE_SSL.3
+#usr/share/man/man3/CURLOPT_VERBOSE.3
+#usr/share/man/man3/CURLOPT_WILDCARDMATCH.3
+#usr/share/man/man3/CURLOPT_WRITEDATA.3
+#usr/share/man/man3/CURLOPT_WRITEFUNCTION.3
+#usr/share/man/man3/CURLOPT_XFERINFODATA.3
+#usr/share/man/man3/CURLOPT_XFERINFOFUNCTION.3
+#usr/share/man/man3/CURLOPT_XOAUTH2_BEARER.3
#usr/share/man/man3/curl_easy_cleanup.3
#usr/share/man/man3/curl_easy_duphandle.3
#usr/share/man/man3/curl_easy_escape.3
-etc/rc.d/init.d/cyrus-sasl
#usr/include/sasl
#usr/include/sasl/hmac-md5.h
#usr/include/sasl/md5.h
#usr/include/sasl/saslutil.h
#usr/lib/libsasl2.la
usr/lib/libsasl2.so
-usr/lib/libsasl2.so.2
-usr/lib/libsasl2.so.2.0.21
+usr/lib/libsasl2.so.3
+usr/lib/libsasl2.so.3.0.0
+#usr/lib/pkgconfig/libsasl2.pc
#usr/lib/sasl2
#usr/lib/sasl2/libanonymous.la
usr/lib/sasl2/libanonymous.so
-usr/lib/sasl2/libanonymous.so.2
-usr/lib/sasl2/libanonymous.so.2.0.21
+usr/lib/sasl2/libanonymous.so.3
+usr/lib/sasl2/libanonymous.so.3.0.0
#usr/lib/sasl2/libcrammd5.la
usr/lib/sasl2/libcrammd5.so
-usr/lib/sasl2/libcrammd5.so.2
-usr/lib/sasl2/libcrammd5.so.2.0.21
+usr/lib/sasl2/libcrammd5.so.3
+usr/lib/sasl2/libcrammd5.so.3.0.0
#usr/lib/sasl2/libdigestmd5.la
usr/lib/sasl2/libdigestmd5.so
-usr/lib/sasl2/libdigestmd5.so.2
-usr/lib/sasl2/libdigestmd5.so.2.0.21
+usr/lib/sasl2/libdigestmd5.so.3
+usr/lib/sasl2/libdigestmd5.so.3.0.0
#usr/lib/sasl2/libotp.la
usr/lib/sasl2/libotp.so
-usr/lib/sasl2/libotp.so.2
-usr/lib/sasl2/libotp.so.2.0.21
+usr/lib/sasl2/libotp.so.3
+usr/lib/sasl2/libotp.so.3.0.0
#usr/lib/sasl2/libplain.la
usr/lib/sasl2/libplain.so
-usr/lib/sasl2/libplain.so.2
-usr/lib/sasl2/libplain.so.2.0.21
+usr/lib/sasl2/libplain.so.3
+usr/lib/sasl2/libplain.so.3.0.0
#usr/lib/sasl2/libsasldb.la
usr/lib/sasl2/libsasldb.so
-usr/lib/sasl2/libsasldb.so.2
-usr/lib/sasl2/libsasldb.so.2.0.21
+usr/lib/sasl2/libsasldb.so.3
+usr/lib/sasl2/libsasldb.so.3.0.0
+#usr/lib/sasl2/libscram.la
+usr/lib/sasl2/libscram.so
+usr/lib/sasl2/libscram.so.3
+usr/lib/sasl2/libscram.so.3.0.0
usr/lib/sasl2/smtpd.conf
-#usr/man/cat8
-#usr/man/cat8/saslauthd.8
+usr/sbin/pluginviewer
usr/sbin/saslauthd
usr/sbin/sasldblistusers2
usr/sbin/saslpasswd2
+usr/sbin/testsaslauthd
#usr/share/man/man3/sasl.3
#usr/share/man/man3/sasl_authorize_t.3
#usr/share/man/man3/sasl_auxprop.3
#usr/share/man/man3/sasl_errdetail.3
#usr/share/man/man3/sasl_errors.3
#usr/share/man/man3/sasl_errstring.3
+#usr/share/man/man3/sasl_getconfpath_t.3
#usr/share/man/man3/sasl_getopt_t.3
#usr/share/man/man3/sasl_getpath_t.3
#usr/share/man/man3/sasl_getprop.3
#usr/share/man/man3/sasl_setprop.3
#usr/share/man/man3/sasl_user_exists.3
#usr/share/man/man3/sasl_verifyfile_t.3
+#usr/share/man/man8/pluginviewer.8
+#usr/share/man/man8/saslauthd.8
#usr/share/man/man8/sasldblistusers2.8
#usr/share/man/man8/saslpasswd2.8
var/lib/sasl
+etc/rc.d/init.d/cyrus-sasl
#etc/dhcp
-#etc/dhcp/dhclient.conf
+#etc/dhcp/dhclient.conf.example
etc/dhcp/dhcpd.conf
+#etc/dhcp/dhcpd.conf.example
#usr/bin/omshell
#usr/include/dhcpctl
#usr/include/dhcpctl/dhcpctl.h
+#lib/dhcpcd
+#lib/dhcpcd/dev
+#lib/dhcpcd/dev/udev.so
sbin/dhcpcd
#usr/share/man/man5/dhcpcd.conf.5
#usr/share/man/man8/dhcpcd-run-hooks.8
#var/ipfire/dhcpc/dhcpcd-hooks/01-test
#var/ipfire/dhcpc/dhcpcd-hooks/02-dump
#var/ipfire/dhcpc/dhcpcd-hooks/10-mtu
+#var/ipfire/dhcpc/dhcpcd-hooks/10-wpa_supplicant
+#var/ipfire/dhcpc/dhcpcd-hooks/15-timezone
#var/ipfire/dhcpc/dhcpcd-hooks/29-lookup-hostname
#var/ipfire/dhcpc/dhcpcd-hooks/30-hostname
#var/ipfire/dhcpc/dhcpcd-hooks/70-dhcpcd.exe
#usr/lib/libexpat.la
usr/lib/libexpat.so
usr/lib/libexpat.so.1
-usr/lib/libexpat.so.1.5.0
-#usr/man/man1/xmlwf.1
-#usr/share/doc/expat-2.0.0
-#usr/share/doc/expat-2.0.0/expat.png
-#usr/share/doc/expat-2.0.0/reference.html
-#usr/share/doc/expat-2.0.0/style.css
-#usr/share/doc/expat-2.0.0/valid-xhtml10.png
+usr/lib/libexpat.so.1.6.0
+#usr/lib/pkgconfig/expat.pc
+#usr/share/doc/expat-2.1.0
+#usr/share/doc/expat-2.1.0/expat.png
+#usr/share/doc/expat-2.1.0/reference.html
+#usr/share/doc/expat-2.1.0/style.css
+#usr/share/doc/expat-2.1.0/valid-xhtml10.png
+#usr/share/man/man1/xmlwf.1
--- /dev/null
+srv/web/ipfire/html/images/flags
+#srv/web/ipfire/html/images/flags/AD.png
+#srv/web/ipfire/html/images/flags/AE.png
+#srv/web/ipfire/html/images/flags/AF.png
+#srv/web/ipfire/html/images/flags/AG.png
+#srv/web/ipfire/html/images/flags/AI.png
+#srv/web/ipfire/html/images/flags/AL.png
+#srv/web/ipfire/html/images/flags/AM.png
+#srv/web/ipfire/html/images/flags/AN.png
+#srv/web/ipfire/html/images/flags/AO.png
+#srv/web/ipfire/html/images/flags/AQ.png
+#srv/web/ipfire/html/images/flags/AR.png
+#srv/web/ipfire/html/images/flags/AS.png
+#srv/web/ipfire/html/images/flags/AT.png
+#srv/web/ipfire/html/images/flags/AU.png
+#srv/web/ipfire/html/images/flags/AW.png
+#srv/web/ipfire/html/images/flags/AX.png
+#srv/web/ipfire/html/images/flags/AZ.png
+#srv/web/ipfire/html/images/flags/BA.png
+#srv/web/ipfire/html/images/flags/BB.png
+#srv/web/ipfire/html/images/flags/BD.png
+#srv/web/ipfire/html/images/flags/BE.png
+#srv/web/ipfire/html/images/flags/BF.png
+#srv/web/ipfire/html/images/flags/BG.png
+#srv/web/ipfire/html/images/flags/BH.png
+#srv/web/ipfire/html/images/flags/BI.png
+#srv/web/ipfire/html/images/flags/BJ.png
+#srv/web/ipfire/html/images/flags/BL.png
+#srv/web/ipfire/html/images/flags/BM.png
+#srv/web/ipfire/html/images/flags/BN.png
+#srv/web/ipfire/html/images/flags/BO.png
+#srv/web/ipfire/html/images/flags/BR.png
+#srv/web/ipfire/html/images/flags/BS.png
+#srv/web/ipfire/html/images/flags/BT.png
+#srv/web/ipfire/html/images/flags/BW.png
+#srv/web/ipfire/html/images/flags/BY.png
+#srv/web/ipfire/html/images/flags/BZ.png
+#srv/web/ipfire/html/images/flags/CA.png
+#srv/web/ipfire/html/images/flags/CC.png
+#srv/web/ipfire/html/images/flags/CD.png
+#srv/web/ipfire/html/images/flags/CF.png
+#srv/web/ipfire/html/images/flags/CG.png
+#srv/web/ipfire/html/images/flags/CH.png
+#srv/web/ipfire/html/images/flags/CI.png
+#srv/web/ipfire/html/images/flags/CK.png
+#srv/web/ipfire/html/images/flags/CL.png
+#srv/web/ipfire/html/images/flags/CM.png
+#srv/web/ipfire/html/images/flags/CN.png
+#srv/web/ipfire/html/images/flags/CO.png
+#srv/web/ipfire/html/images/flags/CR.png
+#srv/web/ipfire/html/images/flags/CU.png
+#srv/web/ipfire/html/images/flags/CV.png
+#srv/web/ipfire/html/images/flags/CW.png
+#srv/web/ipfire/html/images/flags/CX.png
+#srv/web/ipfire/html/images/flags/CY.png
+#srv/web/ipfire/html/images/flags/CZ.png
+#srv/web/ipfire/html/images/flags/DE.png
+#srv/web/ipfire/html/images/flags/DJ.png
+#srv/web/ipfire/html/images/flags/DK.png
+#srv/web/ipfire/html/images/flags/DM.png
+#srv/web/ipfire/html/images/flags/DO.png
+#srv/web/ipfire/html/images/flags/DZ.png
+#srv/web/ipfire/html/images/flags/EC.png
+#srv/web/ipfire/html/images/flags/EE.png
+#srv/web/ipfire/html/images/flags/EG.png
+#srv/web/ipfire/html/images/flags/EH.png
+#srv/web/ipfire/html/images/flags/ER.png
+#srv/web/ipfire/html/images/flags/ES.png
+#srv/web/ipfire/html/images/flags/ET.png
+#srv/web/ipfire/html/images/flags/EU.png
+#srv/web/ipfire/html/images/flags/FI.png
+#srv/web/ipfire/html/images/flags/FJ.png
+#srv/web/ipfire/html/images/flags/FK.png
+#srv/web/ipfire/html/images/flags/FM.png
+#srv/web/ipfire/html/images/flags/FO.png
+#srv/web/ipfire/html/images/flags/FR.png
+#srv/web/ipfire/html/images/flags/GA.png
+#srv/web/ipfire/html/images/flags/GB.png
+#srv/web/ipfire/html/images/flags/GD.png
+#srv/web/ipfire/html/images/flags/GE.png
+#srv/web/ipfire/html/images/flags/GG.png
+#srv/web/ipfire/html/images/flags/GH.png
+#srv/web/ipfire/html/images/flags/GI.png
+#srv/web/ipfire/html/images/flags/GL.png
+#srv/web/ipfire/html/images/flags/GM.png
+#srv/web/ipfire/html/images/flags/GN.png
+#srv/web/ipfire/html/images/flags/GQ.png
+#srv/web/ipfire/html/images/flags/GR.png
+#srv/web/ipfire/html/images/flags/GS.png
+#srv/web/ipfire/html/images/flags/GT.png
+#srv/web/ipfire/html/images/flags/GU.png
+#srv/web/ipfire/html/images/flags/GW.png
+#srv/web/ipfire/html/images/flags/GY.png
+#srv/web/ipfire/html/images/flags/HK.png
+#srv/web/ipfire/html/images/flags/HN.png
+#srv/web/ipfire/html/images/flags/HR.png
+#srv/web/ipfire/html/images/flags/HT.png
+#srv/web/ipfire/html/images/flags/HU.png
+#srv/web/ipfire/html/images/flags/IC.png
+#srv/web/ipfire/html/images/flags/ID.png
+#srv/web/ipfire/html/images/flags/IE.png
+#srv/web/ipfire/html/images/flags/IL.png
+#srv/web/ipfire/html/images/flags/IM.png
+#srv/web/ipfire/html/images/flags/IN.png
+#srv/web/ipfire/html/images/flags/IQ.png
+#srv/web/ipfire/html/images/flags/IR.png
+#srv/web/ipfire/html/images/flags/IS.png
+#srv/web/ipfire/html/images/flags/IT.png
+#srv/web/ipfire/html/images/flags/JE.png
+#srv/web/ipfire/html/images/flags/JM.png
+#srv/web/ipfire/html/images/flags/JO.png
+#srv/web/ipfire/html/images/flags/JP.png
+#srv/web/ipfire/html/images/flags/KE.png
+#srv/web/ipfire/html/images/flags/KG.png
+#srv/web/ipfire/html/images/flags/KH.png
+#srv/web/ipfire/html/images/flags/KI.png
+#srv/web/ipfire/html/images/flags/KM.png
+#srv/web/ipfire/html/images/flags/KN.png
+#srv/web/ipfire/html/images/flags/KP.png
+#srv/web/ipfire/html/images/flags/KR.png
+#srv/web/ipfire/html/images/flags/KW.png
+#srv/web/ipfire/html/images/flags/KY.png
+#srv/web/ipfire/html/images/flags/KZ.png
+#srv/web/ipfire/html/images/flags/LA.png
+#srv/web/ipfire/html/images/flags/LB.png
+#srv/web/ipfire/html/images/flags/LC.png
+#srv/web/ipfire/html/images/flags/LI.png
+#srv/web/ipfire/html/images/flags/LK.png
+#srv/web/ipfire/html/images/flags/LR.png
+#srv/web/ipfire/html/images/flags/LS.png
+#srv/web/ipfire/html/images/flags/LT.png
+#srv/web/ipfire/html/images/flags/LU.png
+#srv/web/ipfire/html/images/flags/LV.png
+#srv/web/ipfire/html/images/flags/LY.png
+#srv/web/ipfire/html/images/flags/MA.png
+#srv/web/ipfire/html/images/flags/MC.png
+#srv/web/ipfire/html/images/flags/MD.png
+#srv/web/ipfire/html/images/flags/ME.png
+#srv/web/ipfire/html/images/flags/MF.png
+#srv/web/ipfire/html/images/flags/MG.png
+#srv/web/ipfire/html/images/flags/MH.png
+#srv/web/ipfire/html/images/flags/MK.png
+#srv/web/ipfire/html/images/flags/ML.png
+#srv/web/ipfire/html/images/flags/MM.png
+#srv/web/ipfire/html/images/flags/MN.png
+#srv/web/ipfire/html/images/flags/MO.png
+#srv/web/ipfire/html/images/flags/MP.png
+#srv/web/ipfire/html/images/flags/MQ.png
+#srv/web/ipfire/html/images/flags/MR.png
+#srv/web/ipfire/html/images/flags/MS.png
+#srv/web/ipfire/html/images/flags/MT.png
+#srv/web/ipfire/html/images/flags/MU.png
+#srv/web/ipfire/html/images/flags/MV.png
+#srv/web/ipfire/html/images/flags/MW.png
+#srv/web/ipfire/html/images/flags/MX.png
+#srv/web/ipfire/html/images/flags/MY.png
+#srv/web/ipfire/html/images/flags/MZ.png
+#srv/web/ipfire/html/images/flags/NA.png
+#srv/web/ipfire/html/images/flags/NC.png
+#srv/web/ipfire/html/images/flags/NE.png
+#srv/web/ipfire/html/images/flags/NF.png
+#srv/web/ipfire/html/images/flags/NG.png
+#srv/web/ipfire/html/images/flags/NI.png
+#srv/web/ipfire/html/images/flags/NL.png
+#srv/web/ipfire/html/images/flags/NO.png
+#srv/web/ipfire/html/images/flags/NP.png
+#srv/web/ipfire/html/images/flags/NR.png
+#srv/web/ipfire/html/images/flags/NU.png
+#srv/web/ipfire/html/images/flags/NZ.png
+#srv/web/ipfire/html/images/flags/OM.png
+#srv/web/ipfire/html/images/flags/PA.png
+#srv/web/ipfire/html/images/flags/PE.png
+#srv/web/ipfire/html/images/flags/PF.png
+#srv/web/ipfire/html/images/flags/PG.png
+#srv/web/ipfire/html/images/flags/PH.png
+#srv/web/ipfire/html/images/flags/PK.png
+#srv/web/ipfire/html/images/flags/PL.png
+#srv/web/ipfire/html/images/flags/PN.png
+#srv/web/ipfire/html/images/flags/PR.png
+#srv/web/ipfire/html/images/flags/PS.png
+#srv/web/ipfire/html/images/flags/PT.png
+#srv/web/ipfire/html/images/flags/PW.png
+#srv/web/ipfire/html/images/flags/PY.png
+#srv/web/ipfire/html/images/flags/QA.png
+#srv/web/ipfire/html/images/flags/RO.png
+#srv/web/ipfire/html/images/flags/RS.png
+#srv/web/ipfire/html/images/flags/RU.png
+#srv/web/ipfire/html/images/flags/RW.png
+#srv/web/ipfire/html/images/flags/SA.png
+#srv/web/ipfire/html/images/flags/SB.png
+#srv/web/ipfire/html/images/flags/SC.png
+#srv/web/ipfire/html/images/flags/SD.png
+#srv/web/ipfire/html/images/flags/SE.png
+#srv/web/ipfire/html/images/flags/SG.png
+#srv/web/ipfire/html/images/flags/SH.png
+#srv/web/ipfire/html/images/flags/SI.png
+#srv/web/ipfire/html/images/flags/SK.png
+#srv/web/ipfire/html/images/flags/SL.png
+#srv/web/ipfire/html/images/flags/SM.png
+#srv/web/ipfire/html/images/flags/SN.png
+#srv/web/ipfire/html/images/flags/SO.png
+#srv/web/ipfire/html/images/flags/SR.png
+#srv/web/ipfire/html/images/flags/SS.png
+#srv/web/ipfire/html/images/flags/ST.png
+#srv/web/ipfire/html/images/flags/SV.png
+#srv/web/ipfire/html/images/flags/SY.png
+#srv/web/ipfire/html/images/flags/SZ.png
+#srv/web/ipfire/html/images/flags/TC.png
+#srv/web/ipfire/html/images/flags/TD.png
+#srv/web/ipfire/html/images/flags/TF.png
+#srv/web/ipfire/html/images/flags/TG.png
+#srv/web/ipfire/html/images/flags/TH.png
+#srv/web/ipfire/html/images/flags/TJ.png
+#srv/web/ipfire/html/images/flags/TK.png
+#srv/web/ipfire/html/images/flags/TL.png
+#srv/web/ipfire/html/images/flags/TM.png
+#srv/web/ipfire/html/images/flags/TN.png
+#srv/web/ipfire/html/images/flags/TO.png
+#srv/web/ipfire/html/images/flags/TR.png
+#srv/web/ipfire/html/images/flags/TT.png
+#srv/web/ipfire/html/images/flags/TV.png
+#srv/web/ipfire/html/images/flags/TW.png
+#srv/web/ipfire/html/images/flags/TZ.png
+#srv/web/ipfire/html/images/flags/UA.png
+#srv/web/ipfire/html/images/flags/UG.png
+#srv/web/ipfire/html/images/flags/US.png
+#srv/web/ipfire/html/images/flags/UY.png
+#srv/web/ipfire/html/images/flags/UZ.png
+#srv/web/ipfire/html/images/flags/VA.png
+#srv/web/ipfire/html/images/flags/VC.png
+#srv/web/ipfire/html/images/flags/VE.png
+#srv/web/ipfire/html/images/flags/VG.png
+#srv/web/ipfire/html/images/flags/VI.png
+#srv/web/ipfire/html/images/flags/VN.png
+#srv/web/ipfire/html/images/flags/VU.png
+#srv/web/ipfire/html/images/flags/WF.png
+#srv/web/ipfire/html/images/flags/WS.png
+#srv/web/ipfire/html/images/flags/YE.png
+#srv/web/ipfire/html/images/flags/YT.png
+#srv/web/ipfire/html/images/flags/ZA.png
+#srv/web/ipfire/html/images/flags/ZM.png
+#srv/web/ipfire/html/images/flags/ZW.png
+#srv/web/ipfire/html/images/flags/unknown.png
#etc/init.d
#etc/init.d/fuse
+#etc/rc.d/init.d/fuse
etc/udev/rules.d/99-fuse.rules
sbin/mount.fuse
usr/bin/fusermount
#usr/lib/libfuse.la
usr/lib/libfuse.so
usr/lib/libfuse.so.2
-usr/lib/libfuse.so.2.8.3
+usr/lib/libfuse.so.2.9.3
#usr/lib/libulockmgr.a
#usr/lib/libulockmgr.la
usr/lib/libulockmgr.so
usr/lib/libulockmgr.so.1
usr/lib/libulockmgr.so.1.0.1
#usr/lib/pkgconfig/fuse.pc
+#usr/share/man/man1/fusermount.1
+#usr/share/man/man1/ulockmgr_server.1
+#usr/share/man/man8/mount.fuse.8
#usr/bin/eqn2graph
#usr/bin/gdiffmk
#usr/bin/geqn
+#usr/bin/glilypond
+#usr/bin/gperl
+#usr/bin/gpinyin
#usr/bin/grap2graph
#usr/bin/grn
#usr/bin/grodvi
#usr/bin/grog
#usr/bin/grolbp
#usr/bin/grolj4
+#usr/bin/gropdf
#usr/bin/grops
#usr/bin/grotty
#usr/bin/gtbl
#usr/bin/mmroff
#usr/bin/neqn
#usr/bin/nroff
+#usr/bin/pdfmom
#usr/bin/pdfroff
#usr/bin/pfbtops
#usr/bin/pic
#usr/bin/tfmtodit
#usr/bin/troff
#usr/lib/groff
+#usr/lib/groff/glilypond
+#usr/lib/groff/glilypond/args.pl
+#usr/lib/groff/glilypond/oop_fh.pl
+#usr/lib/groff/glilypond/subs.pl
+#usr/lib/groff/gpinyin
+#usr/lib/groff/gpinyin/subs.pl
+#usr/lib/groff/groff_opts_no_arg.txt
+#usr/lib/groff/groff_opts_with_arg.txt
#usr/lib/groff/groffer
-#usr/lib/groff/groffer/func.pl
+#usr/lib/groff/groffer/main_subs.pl
#usr/lib/groff/groffer/man.pl
-#usr/lib/groff/groffer/perl_test.pl
#usr/lib/groff/groffer/split_env.sh
+#usr/lib/groff/groffer/subs.pl
#usr/lib/groff/groffer/version.sh
+#usr/lib/groff/grog
+#usr/lib/groff/grog/subs.pl
+#usr/lib/groff/refer
#usr/lib/groff/site-tmac
-#usr/share/doc/groff-1.21
-#usr/share/doc/groff-1.21/examples
-#usr/share/doc/groff-1.21/examples/chem
-#usr/share/doc/groff-1.21/examples/chem/122
-#usr/share/doc/groff-1.21/examples/chem/122/README
-#usr/share/doc/groff-1.21/examples/chem/122/ch2a_ethyl.chem
-#usr/share/doc/groff-1.21/examples/chem/122/ch2b_benzene.chem
-#usr/share/doc/groff-1.21/examples/chem/122/ch2c_benzene_right.chem
-#usr/share/doc/groff-1.21/examples/chem/122/ch4a_stick.chem
-#usr/share/doc/groff-1.21/examples/chem/122/ch4b_methyl_acetate.chem
-#usr/share/doc/groff-1.21/examples/chem/122/ch4c_colon.chem
-#usr/share/doc/groff-1.21/examples/chem/122/ch4d_HCl.H2O.chem
-#usr/share/doc/groff-1.21/examples/chem/122/ch4e_CaSO4.2H2O.chem
-#usr/share/doc/groff-1.21/examples/chem/122/ch4f_C.chem
-#usr/share/doc/groff-1.21/examples/chem/122/ch4g_BP.chem
-#usr/share/doc/groff-1.21/examples/chem/122/ch4h_methacrylate.chem
-#usr/share/doc/groff-1.21/examples/chem/122/ch4i_cyclo.chem
-#usr/share/doc/groff-1.21/examples/chem/122/ch4j_ring4.chem
-#usr/share/doc/groff-1.21/examples/chem/122/ch4k_ring3.chem
-#usr/share/doc/groff-1.21/examples/chem/122/ch4l_vertex.chem
-#usr/share/doc/groff-1.21/examples/chem/122/ch4m_double.chem
-#usr/share/doc/groff-1.21/examples/chem/122/ch4n_triple.chem
-#usr/share/doc/groff-1.21/examples/chem/122/ch4o_aromatic.chem
-#usr/share/doc/groff-1.21/examples/chem/122/ch4p_cholestanol.chem
-#usr/share/doc/groff-1.21/examples/chem/122/ch4q_rings.chem
-#usr/share/doc/groff-1.21/examples/chem/122/ch4r_spiro.chem
-#usr/share/doc/groff-1.21/examples/chem/122/ch4s_heteroatoms.chem
-#usr/share/doc/groff-1.21/examples/chem/122/ch4t_polycyclic.chem
-#usr/share/doc/groff-1.21/examples/chem/122/ch4u_nicotine.chem
-#usr/share/doc/groff-1.21/examples/chem/122/ch4v_histidine.chem
-#usr/share/doc/groff-1.21/examples/chem/122/ch4w_lsd.chem
-#usr/share/doc/groff-1.21/examples/chem/122/ch4x_anisole.chem
-#usr/share/doc/groff-1.21/examples/chem/122/ch4y_reserpine.chem
-#usr/share/doc/groff-1.21/examples/chem/122/ch4z1_eqn_glutamic.chem
-#usr/share/doc/groff-1.21/examples/chem/122/ch4z2_text.chem
-#usr/share/doc/groff-1.21/examples/chem/122/ch5a_size.chem
-#usr/share/doc/groff-1.21/examples/chem/122/ch6a_pic.chem
-#usr/share/doc/groff-1.21/examples/chem/122/ch6b_dna.chem
-#usr/share/doc/groff-1.21/examples/chem/122/chAa_polymer.chem
-#usr/share/doc/groff-1.21/examples/chem/122/chAb_vinyl_chloro.chem
-#usr/share/doc/groff-1.21/examples/chem/122/chAc_morphine.chem
-#usr/share/doc/groff-1.21/examples/chem/122/chAd_chlorophyll.chem
-#usr/share/doc/groff-1.21/examples/chem/122/chAe_chair.chem
-#usr/share/doc/groff-1.21/examples/chem/122/chAf_arrow.chem
-#usr/share/doc/groff-1.21/examples/chem/122/chAg_circle.chem
-#usr/share/doc/groff-1.21/examples/chem/122/chAh_brackets.chem
-#usr/share/doc/groff-1.21/examples/chem/122/chAi_poly_vinyl_chloride.chem
-#usr/share/doc/groff-1.21/examples/chem/122/chBa_jump.chem
-#usr/share/doc/groff-1.21/examples/chem/122/chBb_bonds.chem
-#usr/share/doc/groff-1.21/examples/chem/122/chBc_rings.chem
-#usr/share/doc/groff-1.21/examples/chem/README
-#usr/share/doc/groff-1.21/examples/chem/atp.chem
-#usr/share/doc/groff-1.21/examples/chem/cholesterin.chem
-#usr/share/doc/groff-1.21/examples/chem/ethamivan.chem
-#usr/share/doc/groff-1.21/examples/chem/lsd.chem
-#usr/share/doc/groff-1.21/examples/chem/morphine.chem
-#usr/share/doc/groff-1.21/examples/chem/penicillin.chem
-#usr/share/doc/groff-1.21/examples/chem/reserpine.chem
-#usr/share/doc/groff-1.21/examples/gnu.eps
-#usr/share/doc/groff-1.21/examples/grnexmpl.g
-#usr/share/doc/groff-1.21/examples/grnexmpl.me
-#usr/share/doc/groff-1.21/examples/grnexmpl.ps
-#usr/share/doc/groff-1.21/examples/groff.css
-#usr/share/doc/groff-1.21/examples/hdtbl
-#usr/share/doc/groff-1.21/examples/hdtbl/chess_board.ps
-#usr/share/doc/groff-1.21/examples/hdtbl/chess_board.roff
-#usr/share/doc/groff-1.21/examples/hdtbl/col_rowspan_colors.ps
-#usr/share/doc/groff-1.21/examples/hdtbl/col_rowspan_colors.roff
-#usr/share/doc/groff-1.21/examples/hdtbl/color_boxes.ps
-#usr/share/doc/groff-1.21/examples/hdtbl/color_boxes.roff
-#usr/share/doc/groff-1.21/examples/hdtbl/color_nested_tables.ps
-#usr/share/doc/groff-1.21/examples/hdtbl/color_nested_tables.roff
-#usr/share/doc/groff-1.21/examples/hdtbl/color_table_cells.ps
-#usr/share/doc/groff-1.21/examples/hdtbl/color_table_cells.roff
-#usr/share/doc/groff-1.21/examples/hdtbl/color_transitions.ps
-#usr/share/doc/groff-1.21/examples/hdtbl/color_transitions.roff
-#usr/share/doc/groff-1.21/examples/hdtbl/common.roff
-#usr/share/doc/groff-1.21/examples/hdtbl/fonts_n.ps
-#usr/share/doc/groff-1.21/examples/hdtbl/fonts_n.roff
-#usr/share/doc/groff-1.21/examples/hdtbl/fonts_x.ps
-#usr/share/doc/groff-1.21/examples/hdtbl/fonts_x.roff
-#usr/share/doc/groff-1.21/examples/hdtbl/gnu.eps
-#usr/share/doc/groff-1.21/examples/hdtbl/mixed_pickles.ps
-#usr/share/doc/groff-1.21/examples/hdtbl/mixed_pickles.roff
-#usr/share/doc/groff-1.21/examples/hdtbl/rainbow.ps
-#usr/share/doc/groff-1.21/examples/hdtbl/rainbow.roff
-#usr/share/doc/groff-1.21/examples/hdtbl/short_reference.ps
-#usr/share/doc/groff-1.21/examples/hdtbl/short_reference.roff
-#usr/share/doc/groff-1.21/examples/mom
-#usr/share/doc/groff-1.21/examples/mom/README.txt
-#usr/share/doc/groff-1.21/examples/mom/elvis_syntax
-#usr/share/doc/groff-1.21/examples/mom/elvis_syntax.new
-#usr/share/doc/groff-1.21/examples/mom/letter.mom
-#usr/share/doc/groff-1.21/examples/mom/letter.ps
-#usr/share/doc/groff-1.21/examples/mom/penguin.ps
-#usr/share/doc/groff-1.21/examples/mom/sample_docs.mom
-#usr/share/doc/groff-1.21/examples/mom/sample_docs.ps
-#usr/share/doc/groff-1.21/examples/mom/typesetting.mom
-#usr/share/doc/groff-1.21/examples/mom/typesetting.ps
-#usr/share/doc/groff-1.21/examples/webpage.ms
-#usr/share/doc/groff-1.21/examples/webpage.ps
-#usr/share/doc/groff-1.21/html
-#usr/share/doc/groff-1.21/html/mom
-#usr/share/doc/groff-1.21/html/mom/appendices.html
-#usr/share/doc/groff-1.21/html/mom/color.html
-#usr/share/doc/groff-1.21/html/mom/cover.html
-#usr/share/doc/groff-1.21/html/mom/definitions.html
-#usr/share/doc/groff-1.21/html/mom/docelement.html
-#usr/share/doc/groff-1.21/html/mom/docprocessing.html
-#usr/share/doc/groff-1.21/html/mom/goodies.html
-#usr/share/doc/groff-1.21/html/mom/graphical.html
-#usr/share/doc/groff-1.21/html/mom/headfootpage.html
-#usr/share/doc/groff-1.21/html/mom/images.html
-#usr/share/doc/groff-1.21/html/mom/inlines.html
-#usr/share/doc/groff-1.21/html/mom/intro.html
-#usr/share/doc/groff-1.21/html/mom/letters.html
-#usr/share/doc/groff-1.21/html/mom/macrolist.html
-#usr/share/doc/groff-1.21/html/mom/rectoverso.html
-#usr/share/doc/groff-1.21/html/mom/refer.html
-#usr/share/doc/groff-1.21/html/mom/reserved.html
-#usr/share/doc/groff-1.21/html/mom/stylesheet.css
-#usr/share/doc/groff-1.21/html/mom/tables-of-contents.html
-#usr/share/doc/groff-1.21/html/mom/toc.html
-#usr/share/doc/groff-1.21/html/mom/typesetting.html
-#usr/share/doc/groff-1.21/html/mom/using.html
-#usr/share/doc/groff-1.21/meintro.me
-#usr/share/doc/groff-1.21/meintro.ps
-#usr/share/doc/groff-1.21/meref.me
-#usr/share/doc/groff-1.21/meref.ps
-#usr/share/doc/groff-1.21/pic.ms
-#usr/share/doc/groff-1.21/pic.ps
+#usr/share/doc/groff-1.22.3
+#usr/share/doc/groff-1.22.3/examples
+#usr/share/doc/groff-1.22.3/examples/chem
+#usr/share/doc/groff-1.22.3/examples/chem/122
+#usr/share/doc/groff-1.22.3/examples/chem/122/README
+#usr/share/doc/groff-1.22.3/examples/chem/122/ch2a_ethyl.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/ch2b_benzene.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/ch2c_benzene_right.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/ch4a_stick.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/ch4b_methyl_acetate.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/ch4c_colon.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/ch4d_HCl.H2O.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/ch4e_CaSO4.2H2O.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/ch4f_C.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/ch4g_BP.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/ch4h_methacrylate.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/ch4i_cyclo.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/ch4j_ring4.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/ch4k_ring3.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/ch4l_vertex.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/ch4m_double.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/ch4n_triple.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/ch4o_aromatic.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/ch4p_cholestanol.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/ch4q_rings.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/ch4r_spiro.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/ch4s_heteroatoms.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/ch4t_polycyclic.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/ch4u_nicotine.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/ch4v_histidine.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/ch4w_lsd.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/ch4x_anisole.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/ch4y_reserpine.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/ch4z1_eqn_glutamic.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/ch4z2_text.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/ch5a_size.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/ch6a_pic.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/ch6b_dna.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/chAa_polymer.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/chAb_vinyl_chloro.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/chAc_morphine.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/chAd_chlorophyll.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/chAe_chair.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/chAf_arrow.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/chAg_circle.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/chAh_brackets.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/chAi_poly_vinyl_chloride.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/chBa_jump.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/chBb_bonds.chem
+#usr/share/doc/groff-1.22.3/examples/chem/122/chBc_rings.chem
+#usr/share/doc/groff-1.22.3/examples/chem/README
+#usr/share/doc/groff-1.22.3/examples/chem/atp.chem
+#usr/share/doc/groff-1.22.3/examples/chem/cholesterin.chem
+#usr/share/doc/groff-1.22.3/examples/chem/ethamivan.chem
+#usr/share/doc/groff-1.22.3/examples/chem/lsd.chem
+#usr/share/doc/groff-1.22.3/examples/chem/morphine.chem
+#usr/share/doc/groff-1.22.3/examples/chem/penicillin.chem
+#usr/share/doc/groff-1.22.3/examples/chem/reserpine.chem
+#usr/share/doc/groff-1.22.3/examples/gnu.eps
+#usr/share/doc/groff-1.22.3/examples/grnexmpl.g
+#usr/share/doc/groff-1.22.3/examples/grnexmpl.me
+#usr/share/doc/groff-1.22.3/examples/grnexmpl.ps
+#usr/share/doc/groff-1.22.3/examples/groff.css
+#usr/share/doc/groff-1.22.3/examples/hdtbl
+#usr/share/doc/groff-1.22.3/examples/hdtbl/chess_board.ps
+#usr/share/doc/groff-1.22.3/examples/hdtbl/chess_board.roff
+#usr/share/doc/groff-1.22.3/examples/hdtbl/col_rowspan_colors.ps
+#usr/share/doc/groff-1.22.3/examples/hdtbl/col_rowspan_colors.roff
+#usr/share/doc/groff-1.22.3/examples/hdtbl/color_boxes.ps
+#usr/share/doc/groff-1.22.3/examples/hdtbl/color_boxes.roff
+#usr/share/doc/groff-1.22.3/examples/hdtbl/color_nested_tables.ps
+#usr/share/doc/groff-1.22.3/examples/hdtbl/color_nested_tables.roff
+#usr/share/doc/groff-1.22.3/examples/hdtbl/color_table_cells.ps
+#usr/share/doc/groff-1.22.3/examples/hdtbl/color_table_cells.roff
+#usr/share/doc/groff-1.22.3/examples/hdtbl/color_transitions.ps
+#usr/share/doc/groff-1.22.3/examples/hdtbl/color_transitions.roff
+#usr/share/doc/groff-1.22.3/examples/hdtbl/common.roff
+#usr/share/doc/groff-1.22.3/examples/hdtbl/fonts_n.ps
+#usr/share/doc/groff-1.22.3/examples/hdtbl/fonts_n.roff
+#usr/share/doc/groff-1.22.3/examples/hdtbl/fonts_x.ps
+#usr/share/doc/groff-1.22.3/examples/hdtbl/fonts_x.roff
+#usr/share/doc/groff-1.22.3/examples/hdtbl/gnu.eps
+#usr/share/doc/groff-1.22.3/examples/hdtbl/mixed_pickles.ps
+#usr/share/doc/groff-1.22.3/examples/hdtbl/mixed_pickles.roff
+#usr/share/doc/groff-1.22.3/examples/hdtbl/rainbow.ps
+#usr/share/doc/groff-1.22.3/examples/hdtbl/rainbow.roff
+#usr/share/doc/groff-1.22.3/examples/hdtbl/short_reference.ps
+#usr/share/doc/groff-1.22.3/examples/hdtbl/short_reference.roff
+#usr/share/doc/groff-1.22.3/examples/mom
+#usr/share/doc/groff-1.22.3/examples/mom/README.txt
+#usr/share/doc/groff-1.22.3/examples/mom/elvis_syntax
+#usr/share/doc/groff-1.22.3/examples/mom/elvis_syntax.new
+#usr/share/doc/groff-1.22.3/examples/mom/letter.mom
+#usr/share/doc/groff-1.22.3/examples/mom/mom-pdf.mom
+#usr/share/doc/groff-1.22.3/examples/mom/mom.vim
+#usr/share/doc/groff-1.22.3/examples/mom/penguin.pdf
+#usr/share/doc/groff-1.22.3/examples/mom/penguin.ps
+#usr/share/doc/groff-1.22.3/examples/mom/sample_docs.mom
+#usr/share/doc/groff-1.22.3/examples/mom/typesetting.mom
+#usr/share/doc/groff-1.22.3/examples/webpage.ms
+#usr/share/doc/groff-1.22.3/examples/webpage.ps
+#usr/share/doc/groff-1.22.3/html
+#usr/share/doc/groff-1.22.3/html/mom
+#usr/share/doc/groff-1.22.3/html/mom/appendices.html
+#usr/share/doc/groff-1.22.3/html/mom/color.html
+#usr/share/doc/groff-1.22.3/html/mom/cover.html
+#usr/share/doc/groff-1.22.3/html/mom/definitions.html
+#usr/share/doc/groff-1.22.3/html/mom/docelement.html
+#usr/share/doc/groff-1.22.3/html/mom/docprocessing.html
+#usr/share/doc/groff-1.22.3/html/mom/goodies.html
+#usr/share/doc/groff-1.22.3/html/mom/graphical.html
+#usr/share/doc/groff-1.22.3/html/mom/headfootpage.html
+#usr/share/doc/groff-1.22.3/html/mom/images.html
+#usr/share/doc/groff-1.22.3/html/mom/inlines.html
+#usr/share/doc/groff-1.22.3/html/mom/intro.html
+#usr/share/doc/groff-1.22.3/html/mom/letters.html
+#usr/share/doc/groff-1.22.3/html/mom/macrolist.html
+#usr/share/doc/groff-1.22.3/html/mom/rectoverso.html
+#usr/share/doc/groff-1.22.3/html/mom/refer.html
+#usr/share/doc/groff-1.22.3/html/mom/reserved.html
+#usr/share/doc/groff-1.22.3/html/mom/stylesheet.css
+#usr/share/doc/groff-1.22.3/html/mom/tables-of-contents.html
+#usr/share/doc/groff-1.22.3/html/mom/toc.html
+#usr/share/doc/groff-1.22.3/html/mom/typesetting.html
+#usr/share/doc/groff-1.22.3/html/mom/using.html
+#usr/share/doc/groff-1.22.3/html/mom/version-2.html
+#usr/share/doc/groff-1.22.3/meintro.me
+#usr/share/doc/groff-1.22.3/meintro.ps
+#usr/share/doc/groff-1.22.3/meintro_fr.me
+#usr/share/doc/groff-1.22.3/meintro_fr.ps
+#usr/share/doc/groff-1.22.3/meref.me
+#usr/share/doc/groff-1.22.3/meref.ps
+#usr/share/doc/groff-1.22.3/pic.ms
+#usr/share/doc/groff-1.22.3/pic.ps
#usr/share/groff
-#usr/share/groff/1.21
-#usr/share/groff/1.21/eign
-#usr/share/groff/1.21/font
-#usr/share/groff/1.21/font/devascii
-#usr/share/groff/1.21/font/devascii/B
-#usr/share/groff/1.21/font/devascii/BI
-#usr/share/groff/1.21/font/devascii/DESC
-#usr/share/groff/1.21/font/devascii/I
-#usr/share/groff/1.21/font/devascii/R
-#usr/share/groff/1.21/font/devdvi
-#usr/share/groff/1.21/font/devdvi/CW
-#usr/share/groff/1.21/font/devdvi/CWEC
-#usr/share/groff/1.21/font/devdvi/CWI
-#usr/share/groff/1.21/font/devdvi/CWIEC
-#usr/share/groff/1.21/font/devdvi/CWITC
-#usr/share/groff/1.21/font/devdvi/CWTC
-#usr/share/groff/1.21/font/devdvi/DESC
-#usr/share/groff/1.21/font/devdvi/EX
-#usr/share/groff/1.21/font/devdvi/HB
-#usr/share/groff/1.21/font/devdvi/HBEC
-#usr/share/groff/1.21/font/devdvi/HBI
-#usr/share/groff/1.21/font/devdvi/HBIEC
-#usr/share/groff/1.21/font/devdvi/HBITC
-#usr/share/groff/1.21/font/devdvi/HBTC
-#usr/share/groff/1.21/font/devdvi/HI
-#usr/share/groff/1.21/font/devdvi/HIEC
-#usr/share/groff/1.21/font/devdvi/HITC
-#usr/share/groff/1.21/font/devdvi/HR
-#usr/share/groff/1.21/font/devdvi/HREC
-#usr/share/groff/1.21/font/devdvi/HRTC
-#usr/share/groff/1.21/font/devdvi/MI
-#usr/share/groff/1.21/font/devdvi/S
-#usr/share/groff/1.21/font/devdvi/SA
-#usr/share/groff/1.21/font/devdvi/SB
-#usr/share/groff/1.21/font/devdvi/SC
-#usr/share/groff/1.21/font/devdvi/TB
-#usr/share/groff/1.21/font/devdvi/TBEC
-#usr/share/groff/1.21/font/devdvi/TBI
-#usr/share/groff/1.21/font/devdvi/TBIEC
-#usr/share/groff/1.21/font/devdvi/TBITC
-#usr/share/groff/1.21/font/devdvi/TBTC
-#usr/share/groff/1.21/font/devdvi/TI
-#usr/share/groff/1.21/font/devdvi/TIEC
-#usr/share/groff/1.21/font/devdvi/TITC
-#usr/share/groff/1.21/font/devdvi/TR
-#usr/share/groff/1.21/font/devdvi/TREC
-#usr/share/groff/1.21/font/devdvi/TRTC
-#usr/share/groff/1.21/font/devdvi/generate
-#usr/share/groff/1.21/font/devdvi/generate/CompileFonts
-#usr/share/groff/1.21/font/devdvi/generate/Makefile
-#usr/share/groff/1.21/font/devdvi/generate/ec.map
-#usr/share/groff/1.21/font/devdvi/generate/msam.map
-#usr/share/groff/1.21/font/devdvi/generate/msbm.map
-#usr/share/groff/1.21/font/devdvi/generate/tc.map
-#usr/share/groff/1.21/font/devdvi/generate/texb.map
-#usr/share/groff/1.21/font/devdvi/generate/texex.map
-#usr/share/groff/1.21/font/devdvi/generate/texi.map
-#usr/share/groff/1.21/font/devdvi/generate/texmi.map
-#usr/share/groff/1.21/font/devdvi/generate/texr.map
-#usr/share/groff/1.21/font/devdvi/generate/texsy.map
-#usr/share/groff/1.21/font/devdvi/generate/textex.map
-#usr/share/groff/1.21/font/devdvi/generate/textt.map
-#usr/share/groff/1.21/font/devhtml
-#usr/share/groff/1.21/font/devhtml/B
-#usr/share/groff/1.21/font/devhtml/BI
-#usr/share/groff/1.21/font/devhtml/CB
-#usr/share/groff/1.21/font/devhtml/CBI
-#usr/share/groff/1.21/font/devhtml/CI
-#usr/share/groff/1.21/font/devhtml/CR
-#usr/share/groff/1.21/font/devhtml/DESC
-#usr/share/groff/1.21/font/devhtml/I
-#usr/share/groff/1.21/font/devhtml/R
-#usr/share/groff/1.21/font/devhtml/S
-#usr/share/groff/1.21/font/devlatin1
-#usr/share/groff/1.21/font/devlatin1/B
-#usr/share/groff/1.21/font/devlatin1/BI
-#usr/share/groff/1.21/font/devlatin1/DESC
-#usr/share/groff/1.21/font/devlatin1/I
-#usr/share/groff/1.21/font/devlatin1/R
-#usr/share/groff/1.21/font/devlbp
-#usr/share/groff/1.21/font/devlbp/CB
-#usr/share/groff/1.21/font/devlbp/CI
-#usr/share/groff/1.21/font/devlbp/CR
-#usr/share/groff/1.21/font/devlbp/DESC
-#usr/share/groff/1.21/font/devlbp/EB
-#usr/share/groff/1.21/font/devlbp/EI
-#usr/share/groff/1.21/font/devlbp/ER
-#usr/share/groff/1.21/font/devlbp/HB
-#usr/share/groff/1.21/font/devlbp/HBI
-#usr/share/groff/1.21/font/devlbp/HI
-#usr/share/groff/1.21/font/devlbp/HNB
-#usr/share/groff/1.21/font/devlbp/HNBI
-#usr/share/groff/1.21/font/devlbp/HNI
-#usr/share/groff/1.21/font/devlbp/HNR
-#usr/share/groff/1.21/font/devlbp/HR
-#usr/share/groff/1.21/font/devlbp/TB
-#usr/share/groff/1.21/font/devlbp/TBI
-#usr/share/groff/1.21/font/devlbp/TI
-#usr/share/groff/1.21/font/devlbp/TR
-#usr/share/groff/1.21/font/devlj4
-#usr/share/groff/1.21/font/devlj4/AB
-#usr/share/groff/1.21/font/devlj4/ABI
-#usr/share/groff/1.21/font/devlj4/AI
-#usr/share/groff/1.21/font/devlj4/ALBB
-#usr/share/groff/1.21/font/devlj4/ALBR
-#usr/share/groff/1.21/font/devlj4/AOB
-#usr/share/groff/1.21/font/devlj4/AOI
-#usr/share/groff/1.21/font/devlj4/AOR
-#usr/share/groff/1.21/font/devlj4/AR
-#usr/share/groff/1.21/font/devlj4/CB
-#usr/share/groff/1.21/font/devlj4/CBI
-#usr/share/groff/1.21/font/devlj4/CI
-#usr/share/groff/1.21/font/devlj4/CLARENDON
-#usr/share/groff/1.21/font/devlj4/CORONET
-#usr/share/groff/1.21/font/devlj4/CR
-#usr/share/groff/1.21/font/devlj4/DESC
-#usr/share/groff/1.21/font/devlj4/GB
-#usr/share/groff/1.21/font/devlj4/GBI
-#usr/share/groff/1.21/font/devlj4/GI
-#usr/share/groff/1.21/font/devlj4/GR
-#usr/share/groff/1.21/font/devlj4/LGB
-#usr/share/groff/1.21/font/devlj4/LGI
-#usr/share/groff/1.21/font/devlj4/LGR
-#usr/share/groff/1.21/font/devlj4/MARIGOLD
-#usr/share/groff/1.21/font/devlj4/OB
-#usr/share/groff/1.21/font/devlj4/OBI
-#usr/share/groff/1.21/font/devlj4/OI
-#usr/share/groff/1.21/font/devlj4/OR
-#usr/share/groff/1.21/font/devlj4/S
-#usr/share/groff/1.21/font/devlj4/SYMBOL
-#usr/share/groff/1.21/font/devlj4/TB
-#usr/share/groff/1.21/font/devlj4/TBI
-#usr/share/groff/1.21/font/devlj4/TI
-#usr/share/groff/1.21/font/devlj4/TNRB
-#usr/share/groff/1.21/font/devlj4/TNRBI
-#usr/share/groff/1.21/font/devlj4/TNRI
-#usr/share/groff/1.21/font/devlj4/TNRR
-#usr/share/groff/1.21/font/devlj4/TR
-#usr/share/groff/1.21/font/devlj4/UB
-#usr/share/groff/1.21/font/devlj4/UBI
-#usr/share/groff/1.21/font/devlj4/UCB
-#usr/share/groff/1.21/font/devlj4/UCBI
-#usr/share/groff/1.21/font/devlj4/UCI
-#usr/share/groff/1.21/font/devlj4/UCR
-#usr/share/groff/1.21/font/devlj4/UI
-#usr/share/groff/1.21/font/devlj4/UR
-#usr/share/groff/1.21/font/devlj4/WINGDINGS
-#usr/share/groff/1.21/font/devlj4/generate
-#usr/share/groff/1.21/font/devlj4/generate/Makefile
-#usr/share/groff/1.21/font/devlj4/generate/special.awk
-#usr/share/groff/1.21/font/devlj4/generate/special.map
-#usr/share/groff/1.21/font/devlj4/generate/symbol.map
-#usr/share/groff/1.21/font/devlj4/generate/text.map
-#usr/share/groff/1.21/font/devlj4/generate/wingdings.map
-#usr/share/groff/1.21/font/devps
-#usr/share/groff/1.21/font/devps/AB
-#usr/share/groff/1.21/font/devps/ABI
-#usr/share/groff/1.21/font/devps/AI
-#usr/share/groff/1.21/font/devps/AR
-#usr/share/groff/1.21/font/devps/BMB
-#usr/share/groff/1.21/font/devps/BMBI
-#usr/share/groff/1.21/font/devps/BMI
-#usr/share/groff/1.21/font/devps/BMR
-#usr/share/groff/1.21/font/devps/CB
-#usr/share/groff/1.21/font/devps/CBI
-#usr/share/groff/1.21/font/devps/CI
-#usr/share/groff/1.21/font/devps/CR
-#usr/share/groff/1.21/font/devps/DESC
-#usr/share/groff/1.21/font/devps/EURO
-#usr/share/groff/1.21/font/devps/HB
-#usr/share/groff/1.21/font/devps/HBI
-#usr/share/groff/1.21/font/devps/HI
-#usr/share/groff/1.21/font/devps/HNB
-#usr/share/groff/1.21/font/devps/HNBI
-#usr/share/groff/1.21/font/devps/HNI
-#usr/share/groff/1.21/font/devps/HNR
-#usr/share/groff/1.21/font/devps/HR
-#usr/share/groff/1.21/font/devps/NB
-#usr/share/groff/1.21/font/devps/NBI
-#usr/share/groff/1.21/font/devps/NI
-#usr/share/groff/1.21/font/devps/NR
-#usr/share/groff/1.21/font/devps/PB
-#usr/share/groff/1.21/font/devps/PBI
-#usr/share/groff/1.21/font/devps/PI
-#usr/share/groff/1.21/font/devps/PR
-#usr/share/groff/1.21/font/devps/S
-#usr/share/groff/1.21/font/devps/SS
-#usr/share/groff/1.21/font/devps/TB
-#usr/share/groff/1.21/font/devps/TBI
-#usr/share/groff/1.21/font/devps/TI
-#usr/share/groff/1.21/font/devps/TR
-#usr/share/groff/1.21/font/devps/ZCMI
-#usr/share/groff/1.21/font/devps/ZD
-#usr/share/groff/1.21/font/devps/ZDR
-#usr/share/groff/1.21/font/devps/download
-#usr/share/groff/1.21/font/devps/freeeuro.afm
-#usr/share/groff/1.21/font/devps/freeeuro.pfa
-#usr/share/groff/1.21/font/devps/generate
-#usr/share/groff/1.21/font/devps/generate/Makefile
-#usr/share/groff/1.21/font/devps/generate/afmname
-#usr/share/groff/1.21/font/devps/generate/dingbats.map
-#usr/share/groff/1.21/font/devps/generate/dingbats.rmap
-#usr/share/groff/1.21/font/devps/generate/lgreekmap
-#usr/share/groff/1.21/font/devps/generate/symbol.sed
-#usr/share/groff/1.21/font/devps/generate/symbolchars
-#usr/share/groff/1.21/font/devps/generate/symbolsl.afm
-#usr/share/groff/1.21/font/devps/generate/textmap
-#usr/share/groff/1.21/font/devps/prologue
-#usr/share/groff/1.21/font/devps/symbolsl.pfa
-#usr/share/groff/1.21/font/devps/text.enc
-#usr/share/groff/1.21/font/devps/zapfdr.pfa
-#usr/share/groff/1.21/font/devutf8
-#usr/share/groff/1.21/font/devutf8/B
-#usr/share/groff/1.21/font/devutf8/BI
-#usr/share/groff/1.21/font/devutf8/DESC
-#usr/share/groff/1.21/font/devutf8/I
-#usr/share/groff/1.21/font/devutf8/R
-#usr/share/groff/1.21/oldfont
-#usr/share/groff/1.21/oldfont/devps
-#usr/share/groff/1.21/oldfont/devps/CB
-#usr/share/groff/1.21/oldfont/devps/CBI
-#usr/share/groff/1.21/oldfont/devps/CI
-#usr/share/groff/1.21/oldfont/devps/CR
-#usr/share/groff/1.21/oldfont/devps/HB
-#usr/share/groff/1.21/oldfont/devps/HBI
-#usr/share/groff/1.21/oldfont/devps/HI
-#usr/share/groff/1.21/oldfont/devps/HNB
-#usr/share/groff/1.21/oldfont/devps/HNBI
-#usr/share/groff/1.21/oldfont/devps/HNI
-#usr/share/groff/1.21/oldfont/devps/HNR
-#usr/share/groff/1.21/oldfont/devps/HR
-#usr/share/groff/1.21/oldfont/devps/NB
-#usr/share/groff/1.21/oldfont/devps/NBI
-#usr/share/groff/1.21/oldfont/devps/NI
-#usr/share/groff/1.21/oldfont/devps/NR
-#usr/share/groff/1.21/oldfont/devps/PB
-#usr/share/groff/1.21/oldfont/devps/PBI
-#usr/share/groff/1.21/oldfont/devps/PI
-#usr/share/groff/1.21/oldfont/devps/PR
-#usr/share/groff/1.21/oldfont/devps/S
-#usr/share/groff/1.21/oldfont/devps/SS
-#usr/share/groff/1.21/oldfont/devps/TB
-#usr/share/groff/1.21/oldfont/devps/TBI
-#usr/share/groff/1.21/oldfont/devps/TI
-#usr/share/groff/1.21/oldfont/devps/TR
-#usr/share/groff/1.21/oldfont/devps/symbol.afm
-#usr/share/groff/1.21/oldfont/devps/symbolsl.afm
-#usr/share/groff/1.21/oldfont/devps/zapfdr.afm
-#usr/share/groff/1.21/oldfont/devps/zapfdr.ps
-#usr/share/groff/1.21/pic
-#usr/share/groff/1.21/pic/chem.pic
-#usr/share/groff/1.21/tmac
-#usr/share/groff/1.21/tmac/62bit.tmac
-#usr/share/groff/1.21/tmac/X.tmac
-#usr/share/groff/1.21/tmac/Xps.tmac
-#usr/share/groff/1.21/tmac/a4.tmac
-#usr/share/groff/1.21/tmac/an-ext.tmac
-#usr/share/groff/1.21/tmac/an-old.tmac
-#usr/share/groff/1.21/tmac/an.tmac
-#usr/share/groff/1.21/tmac/andoc.tmac
-#usr/share/groff/1.21/tmac/composite.tmac
-#usr/share/groff/1.21/tmac/cp1047.tmac
-#usr/share/groff/1.21/tmac/cs.tmac
-#usr/share/groff/1.21/tmac/de.tmac
-#usr/share/groff/1.21/tmac/den.tmac
-#usr/share/groff/1.21/tmac/devtag.tmac
-#usr/share/groff/1.21/tmac/doc-old.tmac
-#usr/share/groff/1.21/tmac/doc.tmac
-#usr/share/groff/1.21/tmac/dvi.tmac
-#usr/share/groff/1.21/tmac/e.tmac
-#usr/share/groff/1.21/tmac/ec.tmac
-#usr/share/groff/1.21/tmac/eqnrc
-#usr/share/groff/1.21/tmac/europs.tmac
-#usr/share/groff/1.21/tmac/fr.tmac
-#usr/share/groff/1.21/tmac/hdmisc.tmac
-#usr/share/groff/1.21/tmac/hdtbl.tmac
-#usr/share/groff/1.21/tmac/html-end.tmac
-#usr/share/groff/1.21/tmac/html.tmac
-#usr/share/groff/1.21/tmac/hyphen.cs
-#usr/share/groff/1.21/tmac/hyphen.den
-#usr/share/groff/1.21/tmac/hyphen.det
-#usr/share/groff/1.21/tmac/hyphen.fr
-#usr/share/groff/1.21/tmac/hyphen.sv
-#usr/share/groff/1.21/tmac/hyphen.us
-#usr/share/groff/1.21/tmac/hyphenex.cs
-#usr/share/groff/1.21/tmac/hyphenex.det
-#usr/share/groff/1.21/tmac/hyphenex.us
-#usr/share/groff/1.21/tmac/ja.tmac
-#usr/share/groff/1.21/tmac/latin1.tmac
-#usr/share/groff/1.21/tmac/latin2.tmac
-#usr/share/groff/1.21/tmac/latin5.tmac
-#usr/share/groff/1.21/tmac/latin9.tmac
-#usr/share/groff/1.21/tmac/lbp.tmac
-#usr/share/groff/1.21/tmac/lj4.tmac
-#usr/share/groff/1.21/tmac/m.tmac
-#usr/share/groff/1.21/tmac/man.tmac
-#usr/share/groff/1.21/tmac/mandoc.tmac
-#usr/share/groff/1.21/tmac/mdoc
-#usr/share/groff/1.21/tmac/mdoc.tmac
-#usr/share/groff/1.21/tmac/mdoc/doc-common
-#usr/share/groff/1.21/tmac/mdoc/doc-ditroff
-#usr/share/groff/1.21/tmac/mdoc/doc-nroff
-#usr/share/groff/1.21/tmac/mdoc/doc-syms
-#usr/share/groff/1.21/tmac/me.tmac
-#usr/share/groff/1.21/tmac/mm
-#usr/share/groff/1.21/tmac/mm.tmac
-#usr/share/groff/1.21/tmac/mm/0.MT
-#usr/share/groff/1.21/tmac/mm/4.MT
-#usr/share/groff/1.21/tmac/mm/5.MT
-#usr/share/groff/1.21/tmac/mm/locale
-#usr/share/groff/1.21/tmac/mm/ms.cov
-#usr/share/groff/1.21/tmac/mm/se_locale
-#usr/share/groff/1.21/tmac/mm/se_ms.cov
-#usr/share/groff/1.21/tmac/mmse.tmac
-#usr/share/groff/1.21/tmac/mom.tmac
-#usr/share/groff/1.21/tmac/ms.tmac
-#usr/share/groff/1.21/tmac/mse.tmac
-#usr/share/groff/1.21/tmac/om.tmac
-#usr/share/groff/1.21/tmac/papersize.tmac
-#usr/share/groff/1.21/tmac/pdfmark.tmac
-#usr/share/groff/1.21/tmac/pic.tmac
-#usr/share/groff/1.21/tmac/ps.tmac
-#usr/share/groff/1.21/tmac/psatk.tmac
-#usr/share/groff/1.21/tmac/psold.tmac
-#usr/share/groff/1.21/tmac/pspic.tmac
-#usr/share/groff/1.21/tmac/s.tmac
-#usr/share/groff/1.21/tmac/safer.tmac
-#usr/share/groff/1.21/tmac/spdf.tmac
-#usr/share/groff/1.21/tmac/sv.tmac
-#usr/share/groff/1.21/tmac/trace.tmac
-#usr/share/groff/1.21/tmac/trans.tmac
-#usr/share/groff/1.21/tmac/troffrc
-#usr/share/groff/1.21/tmac/troffrc-end
-#usr/share/groff/1.21/tmac/tty-char.tmac
-#usr/share/groff/1.21/tmac/tty.tmac
-#usr/share/groff/1.21/tmac/unicode.tmac
-#usr/share/groff/1.21/tmac/www.tmac
+#usr/share/groff/1.22.3
+#usr/share/groff/1.22.3/eign
+#usr/share/groff/1.22.3/font
+#usr/share/groff/1.22.3/font/devascii
+#usr/share/groff/1.22.3/font/devascii/B
+#usr/share/groff/1.22.3/font/devascii/BI
+#usr/share/groff/1.22.3/font/devascii/DESC
+#usr/share/groff/1.22.3/font/devascii/I
+#usr/share/groff/1.22.3/font/devascii/R
+#usr/share/groff/1.22.3/font/devdvi
+#usr/share/groff/1.22.3/font/devdvi/CW
+#usr/share/groff/1.22.3/font/devdvi/CWEC
+#usr/share/groff/1.22.3/font/devdvi/CWI
+#usr/share/groff/1.22.3/font/devdvi/CWIEC
+#usr/share/groff/1.22.3/font/devdvi/CWITC
+#usr/share/groff/1.22.3/font/devdvi/CWTC
+#usr/share/groff/1.22.3/font/devdvi/DESC
+#usr/share/groff/1.22.3/font/devdvi/EX
+#usr/share/groff/1.22.3/font/devdvi/HB
+#usr/share/groff/1.22.3/font/devdvi/HBEC
+#usr/share/groff/1.22.3/font/devdvi/HBI
+#usr/share/groff/1.22.3/font/devdvi/HBIEC
+#usr/share/groff/1.22.3/font/devdvi/HBITC
+#usr/share/groff/1.22.3/font/devdvi/HBTC
+#usr/share/groff/1.22.3/font/devdvi/HI
+#usr/share/groff/1.22.3/font/devdvi/HIEC
+#usr/share/groff/1.22.3/font/devdvi/HITC
+#usr/share/groff/1.22.3/font/devdvi/HR
+#usr/share/groff/1.22.3/font/devdvi/HREC
+#usr/share/groff/1.22.3/font/devdvi/HRTC
+#usr/share/groff/1.22.3/font/devdvi/MI
+#usr/share/groff/1.22.3/font/devdvi/S
+#usr/share/groff/1.22.3/font/devdvi/SA
+#usr/share/groff/1.22.3/font/devdvi/SB
+#usr/share/groff/1.22.3/font/devdvi/SC
+#usr/share/groff/1.22.3/font/devdvi/TB
+#usr/share/groff/1.22.3/font/devdvi/TBEC
+#usr/share/groff/1.22.3/font/devdvi/TBI
+#usr/share/groff/1.22.3/font/devdvi/TBIEC
+#usr/share/groff/1.22.3/font/devdvi/TBITC
+#usr/share/groff/1.22.3/font/devdvi/TBTC
+#usr/share/groff/1.22.3/font/devdvi/TI
+#usr/share/groff/1.22.3/font/devdvi/TIEC
+#usr/share/groff/1.22.3/font/devdvi/TITC
+#usr/share/groff/1.22.3/font/devdvi/TR
+#usr/share/groff/1.22.3/font/devdvi/TREC
+#usr/share/groff/1.22.3/font/devdvi/TRTC
+#usr/share/groff/1.22.3/font/devdvi/generate
+#usr/share/groff/1.22.3/font/devdvi/generate/CompileFonts
+#usr/share/groff/1.22.3/font/devdvi/generate/Makefile
+#usr/share/groff/1.22.3/font/devdvi/generate/ec.map
+#usr/share/groff/1.22.3/font/devdvi/generate/msam.map
+#usr/share/groff/1.22.3/font/devdvi/generate/msbm.map
+#usr/share/groff/1.22.3/font/devdvi/generate/tc.map
+#usr/share/groff/1.22.3/font/devdvi/generate/texb.map
+#usr/share/groff/1.22.3/font/devdvi/generate/texex.map
+#usr/share/groff/1.22.3/font/devdvi/generate/texi.map
+#usr/share/groff/1.22.3/font/devdvi/generate/texmi.map
+#usr/share/groff/1.22.3/font/devdvi/generate/texr.map
+#usr/share/groff/1.22.3/font/devdvi/generate/texsy.map
+#usr/share/groff/1.22.3/font/devdvi/generate/textex.map
+#usr/share/groff/1.22.3/font/devdvi/generate/textt.map
+#usr/share/groff/1.22.3/font/devhtml
+#usr/share/groff/1.22.3/font/devhtml/B
+#usr/share/groff/1.22.3/font/devhtml/BI
+#usr/share/groff/1.22.3/font/devhtml/CB
+#usr/share/groff/1.22.3/font/devhtml/CBI
+#usr/share/groff/1.22.3/font/devhtml/CI
+#usr/share/groff/1.22.3/font/devhtml/CR
+#usr/share/groff/1.22.3/font/devhtml/DESC
+#usr/share/groff/1.22.3/font/devhtml/I
+#usr/share/groff/1.22.3/font/devhtml/R
+#usr/share/groff/1.22.3/font/devhtml/S
+#usr/share/groff/1.22.3/font/devlatin1
+#usr/share/groff/1.22.3/font/devlatin1/B
+#usr/share/groff/1.22.3/font/devlatin1/BI
+#usr/share/groff/1.22.3/font/devlatin1/DESC
+#usr/share/groff/1.22.3/font/devlatin1/I
+#usr/share/groff/1.22.3/font/devlatin1/R
+#usr/share/groff/1.22.3/font/devlbp
+#usr/share/groff/1.22.3/font/devlbp/CB
+#usr/share/groff/1.22.3/font/devlbp/CI
+#usr/share/groff/1.22.3/font/devlbp/CR
+#usr/share/groff/1.22.3/font/devlbp/DESC
+#usr/share/groff/1.22.3/font/devlbp/EB
+#usr/share/groff/1.22.3/font/devlbp/EI
+#usr/share/groff/1.22.3/font/devlbp/ER
+#usr/share/groff/1.22.3/font/devlbp/HB
+#usr/share/groff/1.22.3/font/devlbp/HBI
+#usr/share/groff/1.22.3/font/devlbp/HI
+#usr/share/groff/1.22.3/font/devlbp/HNB
+#usr/share/groff/1.22.3/font/devlbp/HNBI
+#usr/share/groff/1.22.3/font/devlbp/HNI
+#usr/share/groff/1.22.3/font/devlbp/HNR
+#usr/share/groff/1.22.3/font/devlbp/HR
+#usr/share/groff/1.22.3/font/devlbp/TB
+#usr/share/groff/1.22.3/font/devlbp/TBI
+#usr/share/groff/1.22.3/font/devlbp/TI
+#usr/share/groff/1.22.3/font/devlbp/TR
+#usr/share/groff/1.22.3/font/devlj4
+#usr/share/groff/1.22.3/font/devlj4/AB
+#usr/share/groff/1.22.3/font/devlj4/ABI
+#usr/share/groff/1.22.3/font/devlj4/AI
+#usr/share/groff/1.22.3/font/devlj4/ALBB
+#usr/share/groff/1.22.3/font/devlj4/ALBR
+#usr/share/groff/1.22.3/font/devlj4/AOB
+#usr/share/groff/1.22.3/font/devlj4/AOI
+#usr/share/groff/1.22.3/font/devlj4/AOR
+#usr/share/groff/1.22.3/font/devlj4/AR
+#usr/share/groff/1.22.3/font/devlj4/CB
+#usr/share/groff/1.22.3/font/devlj4/CBI
+#usr/share/groff/1.22.3/font/devlj4/CI
+#usr/share/groff/1.22.3/font/devlj4/CLARENDON
+#usr/share/groff/1.22.3/font/devlj4/CORONET
+#usr/share/groff/1.22.3/font/devlj4/CR
+#usr/share/groff/1.22.3/font/devlj4/DESC
+#usr/share/groff/1.22.3/font/devlj4/GB
+#usr/share/groff/1.22.3/font/devlj4/GBI
+#usr/share/groff/1.22.3/font/devlj4/GI
+#usr/share/groff/1.22.3/font/devlj4/GR
+#usr/share/groff/1.22.3/font/devlj4/LGB
+#usr/share/groff/1.22.3/font/devlj4/LGI
+#usr/share/groff/1.22.3/font/devlj4/LGR
+#usr/share/groff/1.22.3/font/devlj4/MARIGOLD
+#usr/share/groff/1.22.3/font/devlj4/OB
+#usr/share/groff/1.22.3/font/devlj4/OBI
+#usr/share/groff/1.22.3/font/devlj4/OI
+#usr/share/groff/1.22.3/font/devlj4/OR
+#usr/share/groff/1.22.3/font/devlj4/S
+#usr/share/groff/1.22.3/font/devlj4/SYMBOL
+#usr/share/groff/1.22.3/font/devlj4/TB
+#usr/share/groff/1.22.3/font/devlj4/TBI
+#usr/share/groff/1.22.3/font/devlj4/TI
+#usr/share/groff/1.22.3/font/devlj4/TNRB
+#usr/share/groff/1.22.3/font/devlj4/TNRBI
+#usr/share/groff/1.22.3/font/devlj4/TNRI
+#usr/share/groff/1.22.3/font/devlj4/TNRR
+#usr/share/groff/1.22.3/font/devlj4/TR
+#usr/share/groff/1.22.3/font/devlj4/UB
+#usr/share/groff/1.22.3/font/devlj4/UBI
+#usr/share/groff/1.22.3/font/devlj4/UCB
+#usr/share/groff/1.22.3/font/devlj4/UCBI
+#usr/share/groff/1.22.3/font/devlj4/UCI
+#usr/share/groff/1.22.3/font/devlj4/UCR
+#usr/share/groff/1.22.3/font/devlj4/UI
+#usr/share/groff/1.22.3/font/devlj4/UR
+#usr/share/groff/1.22.3/font/devlj4/WINGDINGS
+#usr/share/groff/1.22.3/font/devlj4/generate
+#usr/share/groff/1.22.3/font/devlj4/generate/Makefile
+#usr/share/groff/1.22.3/font/devlj4/generate/special.awk
+#usr/share/groff/1.22.3/font/devlj4/generate/special.map
+#usr/share/groff/1.22.3/font/devlj4/generate/symbol.map
+#usr/share/groff/1.22.3/font/devlj4/generate/text.map
+#usr/share/groff/1.22.3/font/devlj4/generate/wingdings.map
+#usr/share/groff/1.22.3/font/devpdf
+#usr/share/groff/1.22.3/font/devpdf/CB
+#usr/share/groff/1.22.3/font/devpdf/CBI
+#usr/share/groff/1.22.3/font/devpdf/CI
+#usr/share/groff/1.22.3/font/devpdf/CR
+#usr/share/groff/1.22.3/font/devpdf/DESC
+#usr/share/groff/1.22.3/font/devpdf/EURO
+#usr/share/groff/1.22.3/font/devpdf/Foundry
+#usr/share/groff/1.22.3/font/devpdf/HB
+#usr/share/groff/1.22.3/font/devpdf/HBI
+#usr/share/groff/1.22.3/font/devpdf/HI
+#usr/share/groff/1.22.3/font/devpdf/HR
+#usr/share/groff/1.22.3/font/devpdf/S
+#usr/share/groff/1.22.3/font/devpdf/TB
+#usr/share/groff/1.22.3/font/devpdf/TBI
+#usr/share/groff/1.22.3/font/devpdf/TI
+#usr/share/groff/1.22.3/font/devpdf/TR
+#usr/share/groff/1.22.3/font/devpdf/ZD
+#usr/share/groff/1.22.3/font/devpdf/download
+#usr/share/groff/1.22.3/font/devpdf/enc
+#usr/share/groff/1.22.3/font/devpdf/enc/text.enc
+#usr/share/groff/1.22.3/font/devpdf/map
+#usr/share/groff/1.22.3/font/devpdf/map/dingbats.map
+#usr/share/groff/1.22.3/font/devpdf/map/symbolchars
+#usr/share/groff/1.22.3/font/devpdf/map/symbolmap
+#usr/share/groff/1.22.3/font/devpdf/map/textmap
+#usr/share/groff/1.22.3/font/devpdf/util
+#usr/share/groff/1.22.3/font/devpdf/util/BuildFoundries
+#usr/share/groff/1.22.3/font/devps
+#usr/share/groff/1.22.3/font/devps/AB
+#usr/share/groff/1.22.3/font/devps/ABI
+#usr/share/groff/1.22.3/font/devps/AI
+#usr/share/groff/1.22.3/font/devps/AR
+#usr/share/groff/1.22.3/font/devps/BMB
+#usr/share/groff/1.22.3/font/devps/BMBI
+#usr/share/groff/1.22.3/font/devps/BMI
+#usr/share/groff/1.22.3/font/devps/BMR
+#usr/share/groff/1.22.3/font/devps/CB
+#usr/share/groff/1.22.3/font/devps/CBI
+#usr/share/groff/1.22.3/font/devps/CI
+#usr/share/groff/1.22.3/font/devps/CR
+#usr/share/groff/1.22.3/font/devps/DESC
+#usr/share/groff/1.22.3/font/devps/EURO
+#usr/share/groff/1.22.3/font/devps/HB
+#usr/share/groff/1.22.3/font/devps/HBI
+#usr/share/groff/1.22.3/font/devps/HI
+#usr/share/groff/1.22.3/font/devps/HNB
+#usr/share/groff/1.22.3/font/devps/HNBI
+#usr/share/groff/1.22.3/font/devps/HNI
+#usr/share/groff/1.22.3/font/devps/HNR
+#usr/share/groff/1.22.3/font/devps/HR
+#usr/share/groff/1.22.3/font/devps/NB
+#usr/share/groff/1.22.3/font/devps/NBI
+#usr/share/groff/1.22.3/font/devps/NI
+#usr/share/groff/1.22.3/font/devps/NR
+#usr/share/groff/1.22.3/font/devps/PB
+#usr/share/groff/1.22.3/font/devps/PBI
+#usr/share/groff/1.22.3/font/devps/PI
+#usr/share/groff/1.22.3/font/devps/PR
+#usr/share/groff/1.22.3/font/devps/S
+#usr/share/groff/1.22.3/font/devps/SS
+#usr/share/groff/1.22.3/font/devps/TB
+#usr/share/groff/1.22.3/font/devps/TBI
+#usr/share/groff/1.22.3/font/devps/TI
+#usr/share/groff/1.22.3/font/devps/TR
+#usr/share/groff/1.22.3/font/devps/ZCMI
+#usr/share/groff/1.22.3/font/devps/ZD
+#usr/share/groff/1.22.3/font/devps/ZDR
+#usr/share/groff/1.22.3/font/devps/download
+#usr/share/groff/1.22.3/font/devps/freeeuro.afm
+#usr/share/groff/1.22.3/font/devps/freeeuro.pfa
+#usr/share/groff/1.22.3/font/devps/generate
+#usr/share/groff/1.22.3/font/devps/generate/Makefile
+#usr/share/groff/1.22.3/font/devps/generate/afmname
+#usr/share/groff/1.22.3/font/devps/generate/dingbats.map
+#usr/share/groff/1.22.3/font/devps/generate/dingbats.rmap
+#usr/share/groff/1.22.3/font/devps/generate/lgreekmap
+#usr/share/groff/1.22.3/font/devps/generate/symbol.sed
+#usr/share/groff/1.22.3/font/devps/generate/symbolchars
+#usr/share/groff/1.22.3/font/devps/generate/symbolsl.afm
+#usr/share/groff/1.22.3/font/devps/generate/textmap
+#usr/share/groff/1.22.3/font/devps/prologue
+#usr/share/groff/1.22.3/font/devps/symbolsl.pfa
+#usr/share/groff/1.22.3/font/devps/text.enc
+#usr/share/groff/1.22.3/font/devps/zapfdr.pfa
+#usr/share/groff/1.22.3/font/devutf8
+#usr/share/groff/1.22.3/font/devutf8/B
+#usr/share/groff/1.22.3/font/devutf8/BI
+#usr/share/groff/1.22.3/font/devutf8/DESC
+#usr/share/groff/1.22.3/font/devutf8/I
+#usr/share/groff/1.22.3/font/devutf8/R
+#usr/share/groff/1.22.3/oldfont
+#usr/share/groff/1.22.3/oldfont/devps
+#usr/share/groff/1.22.3/oldfont/devps/CB
+#usr/share/groff/1.22.3/oldfont/devps/CBI
+#usr/share/groff/1.22.3/oldfont/devps/CI
+#usr/share/groff/1.22.3/oldfont/devps/CR
+#usr/share/groff/1.22.3/oldfont/devps/HB
+#usr/share/groff/1.22.3/oldfont/devps/HBI
+#usr/share/groff/1.22.3/oldfont/devps/HI
+#usr/share/groff/1.22.3/oldfont/devps/HNB
+#usr/share/groff/1.22.3/oldfont/devps/HNBI
+#usr/share/groff/1.22.3/oldfont/devps/HNI
+#usr/share/groff/1.22.3/oldfont/devps/HNR
+#usr/share/groff/1.22.3/oldfont/devps/HR
+#usr/share/groff/1.22.3/oldfont/devps/NB
+#usr/share/groff/1.22.3/oldfont/devps/NBI
+#usr/share/groff/1.22.3/oldfont/devps/NI
+#usr/share/groff/1.22.3/oldfont/devps/NR
+#usr/share/groff/1.22.3/oldfont/devps/PB
+#usr/share/groff/1.22.3/oldfont/devps/PBI
+#usr/share/groff/1.22.3/oldfont/devps/PI
+#usr/share/groff/1.22.3/oldfont/devps/PR
+#usr/share/groff/1.22.3/oldfont/devps/S
+#usr/share/groff/1.22.3/oldfont/devps/SS
+#usr/share/groff/1.22.3/oldfont/devps/TB
+#usr/share/groff/1.22.3/oldfont/devps/TBI
+#usr/share/groff/1.22.3/oldfont/devps/TI
+#usr/share/groff/1.22.3/oldfont/devps/TR
+#usr/share/groff/1.22.3/oldfont/devps/symbol.afm
+#usr/share/groff/1.22.3/oldfont/devps/symbolsl.afm
+#usr/share/groff/1.22.3/oldfont/devps/zapfdr.afm
+#usr/share/groff/1.22.3/oldfont/devps/zapfdr.ps
+#usr/share/groff/1.22.3/pic
+#usr/share/groff/1.22.3/pic/chem.pic
+#usr/share/groff/1.22.3/tmac
+#usr/share/groff/1.22.3/tmac/62bit.tmac
+#usr/share/groff/1.22.3/tmac/X.tmac
+#usr/share/groff/1.22.3/tmac/Xps.tmac
+#usr/share/groff/1.22.3/tmac/a4.tmac
+#usr/share/groff/1.22.3/tmac/an-ext.tmac
+#usr/share/groff/1.22.3/tmac/an-old.tmac
+#usr/share/groff/1.22.3/tmac/an.tmac
+#usr/share/groff/1.22.3/tmac/andoc.tmac
+#usr/share/groff/1.22.3/tmac/composite.tmac
+#usr/share/groff/1.22.3/tmac/cp1047.tmac
+#usr/share/groff/1.22.3/tmac/cs.tmac
+#usr/share/groff/1.22.3/tmac/de.tmac
+#usr/share/groff/1.22.3/tmac/den.tmac
+#usr/share/groff/1.22.3/tmac/devtag.tmac
+#usr/share/groff/1.22.3/tmac/doc-old.tmac
+#usr/share/groff/1.22.3/tmac/doc.tmac
+#usr/share/groff/1.22.3/tmac/dvi.tmac
+#usr/share/groff/1.22.3/tmac/e.tmac
+#usr/share/groff/1.22.3/tmac/ec.tmac
+#usr/share/groff/1.22.3/tmac/eqnrc
+#usr/share/groff/1.22.3/tmac/europs.tmac
+#usr/share/groff/1.22.3/tmac/fallbacks.tmac
+#usr/share/groff/1.22.3/tmac/fr.tmac
+#usr/share/groff/1.22.3/tmac/hdmisc.tmac
+#usr/share/groff/1.22.3/tmac/hdtbl.tmac
+#usr/share/groff/1.22.3/tmac/html-end.tmac
+#usr/share/groff/1.22.3/tmac/html.tmac
+#usr/share/groff/1.22.3/tmac/hyphen.cs
+#usr/share/groff/1.22.3/tmac/hyphen.den
+#usr/share/groff/1.22.3/tmac/hyphen.det
+#usr/share/groff/1.22.3/tmac/hyphen.fr
+#usr/share/groff/1.22.3/tmac/hyphen.sv
+#usr/share/groff/1.22.3/tmac/hyphen.us
+#usr/share/groff/1.22.3/tmac/hyphenex.cs
+#usr/share/groff/1.22.3/tmac/hyphenex.det
+#usr/share/groff/1.22.3/tmac/hyphenex.us
+#usr/share/groff/1.22.3/tmac/ja.tmac
+#usr/share/groff/1.22.3/tmac/latin1.tmac
+#usr/share/groff/1.22.3/tmac/latin2.tmac
+#usr/share/groff/1.22.3/tmac/latin5.tmac
+#usr/share/groff/1.22.3/tmac/latin9.tmac
+#usr/share/groff/1.22.3/tmac/lbp.tmac
+#usr/share/groff/1.22.3/tmac/lj4.tmac
+#usr/share/groff/1.22.3/tmac/m.tmac
+#usr/share/groff/1.22.3/tmac/man.tmac
+#usr/share/groff/1.22.3/tmac/mandoc.tmac
+#usr/share/groff/1.22.3/tmac/mdoc
+#usr/share/groff/1.22.3/tmac/mdoc.tmac
+#usr/share/groff/1.22.3/tmac/mdoc/doc-common
+#usr/share/groff/1.22.3/tmac/mdoc/doc-ditroff
+#usr/share/groff/1.22.3/tmac/mdoc/doc-nroff
+#usr/share/groff/1.22.3/tmac/mdoc/doc-syms
+#usr/share/groff/1.22.3/tmac/me.tmac
+#usr/share/groff/1.22.3/tmac/mm
+#usr/share/groff/1.22.3/tmac/mm.tmac
+#usr/share/groff/1.22.3/tmac/mm/0.MT
+#usr/share/groff/1.22.3/tmac/mm/4.MT
+#usr/share/groff/1.22.3/tmac/mm/5.MT
+#usr/share/groff/1.22.3/tmac/mm/locale
+#usr/share/groff/1.22.3/tmac/mm/ms.cov
+#usr/share/groff/1.22.3/tmac/mm/se_locale
+#usr/share/groff/1.22.3/tmac/mm/se_ms.cov
+#usr/share/groff/1.22.3/tmac/mmse.tmac
+#usr/share/groff/1.22.3/tmac/mom.tmac
+#usr/share/groff/1.22.3/tmac/ms.tmac
+#usr/share/groff/1.22.3/tmac/mse.tmac
+#usr/share/groff/1.22.3/tmac/om.tmac
+#usr/share/groff/1.22.3/tmac/papersize.tmac
+#usr/share/groff/1.22.3/tmac/pdf.tmac
+#usr/share/groff/1.22.3/tmac/pdfmark.tmac
+#usr/share/groff/1.22.3/tmac/pic.tmac
+#usr/share/groff/1.22.3/tmac/ps.tmac
+#usr/share/groff/1.22.3/tmac/psatk.tmac
+#usr/share/groff/1.22.3/tmac/psold.tmac
+#usr/share/groff/1.22.3/tmac/pspic.tmac
+#usr/share/groff/1.22.3/tmac/refer-me.tmac
+#usr/share/groff/1.22.3/tmac/refer-mm.tmac
+#usr/share/groff/1.22.3/tmac/refer-ms.tmac
+#usr/share/groff/1.22.3/tmac/refer.tmac
+#usr/share/groff/1.22.3/tmac/s.tmac
+#usr/share/groff/1.22.3/tmac/safer.tmac
+#usr/share/groff/1.22.3/tmac/spdf.tmac
+#usr/share/groff/1.22.3/tmac/sv.tmac
+#usr/share/groff/1.22.3/tmac/trace.tmac
+#usr/share/groff/1.22.3/tmac/trans.tmac
+#usr/share/groff/1.22.3/tmac/troffrc
+#usr/share/groff/1.22.3/tmac/troffrc-end
+#usr/share/groff/1.22.3/tmac/tty-char.tmac
+#usr/share/groff/1.22.3/tmac/tty.tmac
+#usr/share/groff/1.22.3/tmac/unicode.tmac
+#usr/share/groff/1.22.3/tmac/www.tmac
#usr/share/groff/current
#usr/share/groff/site-font
#usr/share/groff/site-tmac
#usr/share/info/groff.info
#usr/share/info/groff.info-1
#usr/share/info/groff.info-2
-#usr/share/info/groff.info-3
#usr/share/man/man1/addftinfo.1
#usr/share/man/man1/afmtodit.1
#usr/share/man/man1/chem.1
#usr/share/man/man1/eqn.1
#usr/share/man/man1/eqn2graph.1
#usr/share/man/man1/gdiffmk.1
+#usr/share/man/man1/glilypond.1
+#usr/share/man/man1/gperl.1
+#usr/share/man/man1/gpinyin.1
#usr/share/man/man1/grap2graph.1
#usr/share/man/man1/grn.1
#usr/share/man/man1/grodvi.1
#usr/share/man/man1/grohtml.1
#usr/share/man/man1/grolbp.1
#usr/share/man/man1/grolj4.1
+#usr/share/man/man1/gropdf.1
#usr/share/man/man1/grops.1
#usr/share/man/man1/grotty.1
#usr/share/man/man1/hpftodit.1
#usr/share/man/man1/mmroff.1
#usr/share/man/man1/neqn.1
#usr/share/man/man1/nroff.1
+#usr/share/man/man1/pdfmom.1
#usr/share/man/man1/pdfroff.1
#usr/share/man/man1/pfbtops.1
#usr/share/man/man1/pic.1
#usr/share/man/man7/groff.7
#usr/share/man/man7/groff_char.7
#usr/share/man/man7/groff_diff.7
+#usr/share/man/man7/groff_filenames.7
#usr/share/man/man7/groff_hdtbl.7
#usr/share/man/man7/groff_man.7
#usr/share/man/man7/groff_mdoc.7
etc/rc.d/init.d/functions
#etc/rc.d/init.d/gnump3d
etc/rc.d/init.d/halt
+#etc/rc.d/init.d/haproxy
#etc/rc.d/init.d/hostapd
#etc/rc.d/init.d/imspector
etc/rc.d/init.d/ipsec
#etc/rc.d/init.d/mysql
#etc/rc.d/init.d/netsnmpd
etc/rc.d/init.d/network
+etc/rc.d/init.d/network-trigger
etc/rc.d/init.d/network-vlans
#etc/rc.d/init.d/networking
etc/rc.d/init.d/networking/any
etc/rc.d/init.d/networking/red.up/50-ovpn
etc/rc.d/init.d/networking/red.up/98-leds
etc/rc.d/init.d/networking/red.up/99-fireinfo
+etc/rc.d/init.d/networking/red.up/99-geoip-database
etc/rc.d/init.d/networking/red.up/99-pakfire-update
etc/rc.d/init.d/networking/wpa_supplicant.exe
#etc/rc.d/init.d/nfs-server
etc/rc.d/init.d/swap
etc/rc.d/init.d/sysctl
etc/rc.d/init.d/sysklogd
-etc/rc.d/init.d/teamspeak
etc/rc.d/init.d/template
#etc/rc.d/init.d/tftpd
etc/rc.d/init.d/tmpfs
etc/rc.d/rcsysinit.d/S75firstsetup
etc/rc.d/rcsysinit.d/S80localnet
etc/rc.d/rcsysinit.d/S85firewall
+etc/rc.d/rcsysinit.d/S90network-trigger
etc/rc.d/rcsysinit.d/S91network-vlans
etc/rc.d/rcsysinit.d/S92rngd
etc/rc.d/rc3.d/S15fireinfo
--- /dev/null
+usr/lib/sse2/libcrypto.so.10
#usr/bin/setarch
usr/bin/setsid
#usr/bin/setterm
-#usr/bin/tailf
+usr/bin/tailf
#usr/bin/taskset
#usr/bin/ul
#usr/bin/unshare
#usr/bin/downloadsource.sh
#usr/bin/execute-postinstall.sh
-#usr/bin/start-networking.sh
#usr/bin/installer
+#usr/bin/start-networking.sh
#usr/lib/dracut/modules.d/99installer
#usr/lib/dracut/modules.d/99installer/70-dhcpcd.exe
#usr/lib/dracut/modules.d/99installer/fake-root.sh
#usr/share/locale/es/LC_MESSAGES/installer.mo
#usr/share/locale/fa/LC_MESSAGES/installer.mo
#usr/share/locale/fr/LC_MESSAGES/installer.mo
+#usr/share/locale/hr/LC_MESSAGES/installer.mo
#usr/share/locale/hu/LC_MESSAGES/installer.mo
#usr/share/locale/id/LC_MESSAGES/installer.mo
#usr/share/locale/it/LC_MESSAGES/installer.mo
#usr/share/locale/ja/LC_MESSAGES/installer.mo
+#usr/share/locale/jv/LC_MESSAGES/installer.mo
#usr/share/locale/km_KH/LC_MESSAGES/installer.mo
#usr/share/locale/nl/LC_MESSAGES/installer.mo
#usr/share/locale/pl/LC_MESSAGES/installer.mo
#usr/share/locale/pt_PT/LC_MESSAGES/installer.mo
#usr/share/locale/ro_RO/LC_MESSAGES/installer.mo
#usr/share/locale/ru/LC_MESSAGES/installer.mo
+#usr/share/locale/rw/LC_MESSAGES/installer.mo
#usr/share/locale/sk/LC_MESSAGES/installer.mo
#usr/share/locale/sq/LC_MESSAGES/installer.mo
+#usr/share/locale/sr/LC_MESSAGES/installer.mo
+#usr/share/locale/su/LC_MESSAGES/installer.mo
#usr/share/locale/sv/LC_MESSAGES/installer.mo
#usr/share/locale/th/LC_MESSAGES/installer.mo
#usr/share/locale/tk/LC_MESSAGES/installer.mo
+#usr/bin/libnet-config
#usr/include/libnet
#usr/include/libnet.h
#usr/include/libnet/libnet-asn1.h
#usr/include/libnet/libnet-structures.h
#usr/include/libnet/libnet-types.h
#usr/lib/libnet.a
+#usr/lib/libnet.la
+#usr/lib/libnet.so
+#usr/lib/libnet.so.1
+#usr/lib/libnet.so.1.7.0
+#usr/share/man/man3/libnet-functions.h.3
+#usr/share/man/man3/libnet-macros.h.3
+#usr/share/man/man3/libnet.h.3
+#etc/logrotate.d
+etc/logrotate.d/.empty
+#usr/man/man5/logrotate.conf.5
#usr/man/man8/logrotate.8
usr/sbin/logrotate
var/lib/logrotate.status
#etc/logwatch
etc/logwatch/conf
-#etc/logwatch/conf/html
+#etc/logwatch/logwatch.cron
#etc/logwatch/conf/ignore.conf
#etc/logwatch/conf/logfiles
#etc/logwatch/conf/logwatch.conf
#usr/share/logwatch/default.conf/html/header.html
usr/share/logwatch/default.conf/ignore.conf
#usr/share/logwatch/default.conf/logfiles
+#usr/share/logwatch/default.conf/logfiles/audit_log.conf
#usr/share/logwatch/default.conf/logfiles/autorpm.conf
#usr/share/logwatch/default.conf/logfiles/bfd.conf
#usr/share/logwatch/default.conf/logfiles/cisco.conf
+#usr/share/logwatch/default.conf/logfiles/citadel.conf
usr/share/logwatch/default.conf/logfiles/clam-update.conf
+#usr/share/logwatch/default.conf/logfiles/clamav.conf
usr/share/logwatch/default.conf/logfiles/cron.conf
#usr/share/logwatch/default.conf/logfiles/daemon.conf
#usr/share/logwatch/default.conf/logfiles/denyhosts.conf
+#usr/share/logwatch/default.conf/logfiles/dirsrv.conf
#usr/share/logwatch/default.conf/logfiles/dnssec.conf
#usr/share/logwatch/default.conf/logfiles/dpkg.conf
#usr/share/logwatch/default.conf/logfiles/emerge.conf
#usr/share/logwatch/default.conf/logfiles/exim.conf
#usr/share/logwatch/default.conf/logfiles/extreme-networks.conf
#usr/share/logwatch/default.conf/logfiles/fail2ban.conf
+#usr/share/logwatch/default.conf/logfiles/freeradius.conf
+#usr/share/logwatch/default.conf/logfiles/http-error.conf
usr/share/logwatch/default.conf/logfiles/http.conf
usr/share/logwatch/default.conf/logfiles/iptables.conf
usr/share/logwatch/default.conf/logfiles/kernel.conf
usr/share/logwatch/default.conf/logfiles/maillog.conf
usr/share/logwatch/default.conf/logfiles/messages.conf
+#usr/share/logwatch/default.conf/logfiles/mysql-mmm.conf
+#usr/share/logwatch/default.conf/logfiles/mysql.conf
#usr/share/logwatch/default.conf/logfiles/netopia.conf
#usr/share/logwatch/default.conf/logfiles/netscreen.conf
usr/share/logwatch/default.conf/logfiles/php.conf
#usr/share/logwatch/default.conf/logfiles/pix.conf
+#usr/share/logwatch/default.conf/logfiles/postgresql.conf
#usr/share/logwatch/default.conf/logfiles/pureftp.conf
#usr/share/logwatch/default.conf/logfiles/qmail-pop3d-current.conf
#usr/share/logwatch/default.conf/logfiles/qmail-pop3ds-current.conf
usr/share/logwatch/default.conf/logfiles/samba.conf
#usr/share/logwatch/default.conf/logfiles/secure.conf
#usr/share/logwatch/default.conf/logfiles/sonicwall.conf
+#usr/share/logwatch/default.conf/logfiles/spamassassin.conf
usr/share/logwatch/default.conf/logfiles/syslog.conf
#usr/share/logwatch/default.conf/logfiles/tac_acc.conf
+#usr/share/logwatch/default.conf/logfiles/tivoli-smc.conf
#usr/share/logwatch/default.conf/logfiles/up2date.conf
+#usr/share/logwatch/default.conf/logfiles/vdr.conf
usr/share/logwatch/default.conf/logfiles/vsftpd.conf
usr/share/logwatch/default.conf/logfiles/windows.conf
usr/share/logwatch/default.conf/logfiles/xferlog.conf
#usr/share/logwatch/default.conf/logfiles/yum.conf
+#usr/share/logwatch/default.conf/logfiles/zypp.conf
usr/share/logwatch/default.conf/logwatch.conf
usr/share/logwatch/default.conf/services
#usr/share/logwatch/default.conf/services/afpd.conf
#usr/share/logwatch/default.conf/services/audit.conf
#usr/share/logwatch/default.conf/services/automount.conf
#usr/share/logwatch/default.conf/services/autorpm.conf
+#usr/share/logwatch/default.conf/services/barracuda.conf
#usr/share/logwatch/default.conf/services/bfd.conf
#usr/share/logwatch/default.conf/services/cisco.conf
+#usr/share/logwatch/default.conf/services/citadel.conf
usr/share/logwatch/default.conf/services/clam-update.conf
#usr/share/logwatch/default.conf/services/clamav-milter.conf
usr/share/logwatch/default.conf/services/clamav.conf
usr/share/logwatch/default.conf/services/cron.conf
#usr/share/logwatch/default.conf/services/denyhosts.conf
usr/share/logwatch/default.conf/services/dhcpd.conf
+#usr/share/logwatch/default.conf/services/dirsrv.conf
#usr/share/logwatch/default.conf/services/dnssec.conf
#usr/share/logwatch/default.conf/services/dovecot.conf
#usr/share/logwatch/default.conf/services/dpkg.conf
#usr/share/logwatch/default.conf/services/eximstats.conf
#usr/share/logwatch/default.conf/services/extreme-networks.conf
#usr/share/logwatch/default.conf/services/fail2ban.conf
+#usr/share/logwatch/default.conf/services/fetchmail.conf
+#usr/share/logwatch/default.conf/services/freeradius.conf
#usr/share/logwatch/default.conf/services/ftpd-messages.conf
#usr/share/logwatch/default.conf/services/ftpd-xferlog.conf
+#usr/share/logwatch/default.conf/services/http-error.conf
usr/share/logwatch/default.conf/services/http.conf
#usr/share/logwatch/default.conf/services/identd.conf
usr/share/logwatch/default.conf/services/imapd.conf
usr/share/logwatch/default.conf/services/ipop3d.conf
usr/share/logwatch/default.conf/services/iptables.conf
usr/share/logwatch/default.conf/services/kernel.conf
+#usr/share/logwatch/default.conf/services/knockd.conf
+#usr/share/logwatch/default.conf/services/lvm.conf
#usr/share/logwatch/default.conf/services/mailscanner.conf
+#usr/share/logwatch/default.conf/services/mdadm.conf
+#usr/share/logwatch/default.conf/services/mod_security2.conf
usr/share/logwatch/default.conf/services/modprobe.conf
#usr/share/logwatch/default.conf/services/mountd.conf
+#usr/share/logwatch/default.conf/services/mysql-mmm.conf
+#usr/share/logwatch/default.conf/services/mysql.conf
#usr/share/logwatch/default.conf/services/named.conf
#usr/share/logwatch/default.conf/services/netopia.conf
#usr/share/logwatch/default.conf/services/netscreen.conf
#usr/share/logwatch/default.conf/services/oidentd.conf
+#usr/share/logwatch/default.conf/services/omsa.conf
usr/share/logwatch/default.conf/services/openvpn.conf
usr/share/logwatch/default.conf/services/pam.conf
usr/share/logwatch/default.conf/services/pam_pwdb.conf
usr/share/logwatch/default.conf/services/pop3.conf
#usr/share/logwatch/default.conf/services/portsentry.conf
usr/share/logwatch/default.conf/services/postfix.conf
+#usr/share/logwatch/default.conf/services/postgresql.conf
#usr/share/logwatch/default.conf/services/pound.conf
#usr/share/logwatch/default.conf/services/proftpd-messages.conf
+#usr/share/logwatch/default.conf/services/puppet.conf
#usr/share/logwatch/default.conf/services/pureftpd.conf
#usr/share/logwatch/default.conf/services/qmail-pop3d.conf
#usr/share/logwatch/default.conf/services/qmail-pop3ds.conf
#usr/share/logwatch/default.conf/services/qmail.conf
#usr/share/logwatch/default.conf/services/raid.conf
usr/share/logwatch/default.conf/services/resolver.conf
+#usr/share/logwatch/default.conf/services/rsyslogd.conf
#usr/share/logwatch/default.conf/services/rt314.conf
usr/share/logwatch/default.conf/services/samba.conf
usr/share/logwatch/default.conf/services/saslauthd.conf
#usr/share/logwatch/default.conf/services/slon.conf
#usr/share/logwatch/default.conf/services/smartd.conf
#usr/share/logwatch/default.conf/services/sonicwall.conf
+#usr/share/logwatch/default.conf/services/spamassassin.conf
usr/share/logwatch/default.conf/services/sshd.conf
usr/share/logwatch/default.conf/services/sshd2.conf
#usr/share/logwatch/default.conf/services/stunnel.conf
usr/share/logwatch/default.conf/services/sudo.conf
+#usr/share/logwatch/default.conf/services/syslog-ng.conf
usr/share/logwatch/default.conf/services/syslogd.conf
#usr/share/logwatch/default.conf/services/tac_acc.conf
+#usr/share/logwatch/default.conf/services/tivoli-smc.conf
#usr/share/logwatch/default.conf/services/up2date.conf
+#usr/share/logwatch/default.conf/services/vdr.conf
#usr/share/logwatch/default.conf/services/vpopmail.conf
usr/share/logwatch/default.conf/services/vsftpd.conf
usr/share/logwatch/default.conf/services/windows.conf
#usr/share/logwatch/default.conf/services/xntpd.conf
#usr/share/logwatch/default.conf/services/yum.conf
+#usr/share/logwatch/default.conf/services/zypp.conf
usr/share/logwatch/default.conf/services/zz-disk_space.conf
#usr/share/logwatch/default.conf/services/zz-fortune.conf
+#usr/share/logwatch/default.conf/services/zz-lm_sensors.conf
usr/share/logwatch/default.conf/services/zz-network.conf
usr/share/logwatch/default.conf/services/zz-runtime.conf
#usr/share/logwatch/default.conf/services/zz-sys.conf
+#usr/share/logwatch/default.conf/services/zz-zfs.conf
#usr/share/logwatch/dist.conf
usr/share/logwatch/dist.conf/logfiles
usr/share/logwatch/dist.conf/services
#usr/share/logwatch/scripts/services/audit
#usr/share/logwatch/scripts/services/automount
#usr/share/logwatch/scripts/services/autorpm
+#usr/share/logwatch/scripts/services/barracuda
#usr/share/logwatch/scripts/services/bfd
#usr/share/logwatch/scripts/services/cisco
+#usr/share/logwatch/scripts/services/citadel
usr/share/logwatch/scripts/services/clam-update
usr/share/logwatch/scripts/services/clamav
#usr/share/logwatch/scripts/services/clamav-milter
#usr/share/logwatch/scripts/services/denyhosts
usr/share/logwatch/scripts/services/dhcpd
usr/share/logwatch/scripts/services/dialup
+#usr/share/logwatch/scripts/services/dirsrv
#usr/share/logwatch/scripts/services/dnssec
#usr/share/logwatch/scripts/services/dovecot
#usr/share/logwatch/scripts/services/dpkg
#usr/share/logwatch/scripts/services/eximstats
#usr/share/logwatch/scripts/services/extreme-networks
#usr/share/logwatch/scripts/services/fail2ban
+#usr/share/logwatch/scripts/services/fetchmail
+#usr/share/logwatch/scripts/services/freeradius
#usr/share/logwatch/scripts/services/ftpd-messages
#usr/share/logwatch/scripts/services/ftpd-xferlog
usr/share/logwatch/scripts/services/http
+#usr/share/logwatch/scripts/services/http-error
#usr/share/logwatch/scripts/services/identd
usr/share/logwatch/scripts/services/imapd
#usr/share/logwatch/scripts/services/in.qpopper
usr/share/logwatch/scripts/services/ipop3d
usr/share/logwatch/scripts/services/iptables
usr/share/logwatch/scripts/services/kernel
+#usr/share/logwatch/scripts/services/knockd
+#usr/share/logwatch/scripts/services/lvm
#usr/share/logwatch/scripts/services/mailscanner
+#usr/share/logwatch/scripts/services/mdadm
+#usr/share/logwatch/scripts/services/mod_security2
usr/share/logwatch/scripts/services/modprobe
#usr/share/logwatch/scripts/services/mountd
+#usr/share/logwatch/scripts/services/mysql
+#usr/share/logwatch/scripts/services/mysql-mmm
#usr/share/logwatch/scripts/services/named
#usr/share/logwatch/scripts/services/netopia
#usr/share/logwatch/scripts/services/netscreen
#usr/share/logwatch/scripts/services/oidentd
+#usr/share/logwatch/scripts/services/omsa
usr/share/logwatch/scripts/services/openvpn
usr/share/logwatch/scripts/services/pam
usr/share/logwatch/scripts/services/pam_pwdb
usr/share/logwatch/scripts/services/pop3
#usr/share/logwatch/scripts/services/portsentry
usr/share/logwatch/scripts/services/postfix
+#usr/share/logwatch/scripts/services/postgresql
#usr/share/logwatch/scripts/services/pound
#usr/share/logwatch/scripts/services/proftpd-messages
+#usr/share/logwatch/scripts/services/puppet
#usr/share/logwatch/scripts/services/pureftpd
#usr/share/logwatch/scripts/services/qmail
#usr/share/logwatch/scripts/services/qmail-pop3d
#usr/share/logwatch/scripts/services/qmail-smtpd
#usr/share/logwatch/scripts/services/raid
#usr/share/logwatch/scripts/services/resolver
+#usr/share/logwatch/scripts/services/rsyslogd
#usr/share/logwatch/scripts/services/rt314
usr/share/logwatch/scripts/services/samba
usr/share/logwatch/scripts/services/saslauthd
#usr/share/logwatch/scripts/services/slon
#usr/share/logwatch/scripts/services/smartd
#usr/share/logwatch/scripts/services/sonicwall
+#usr/share/logwatch/scripts/services/spamassassin
usr/share/logwatch/scripts/services/sshd
usr/share/logwatch/scripts/services/sshd2
#usr/share/logwatch/scripts/services/stunnel
usr/share/logwatch/scripts/services/sudo
+#usr/share/logwatch/scripts/services/syslog-ng
usr/share/logwatch/scripts/services/syslogd
#usr/share/logwatch/scripts/services/tac_acc
+#usr/share/logwatch/scripts/services/tivoli-smc
#usr/share/logwatch/scripts/services/up2date
+#usr/share/logwatch/scripts/services/vdr
#usr/share/logwatch/scripts/services/vpopmail
usr/share/logwatch/scripts/services/vsftpd
usr/share/logwatch/scripts/services/windows
#usr/share/logwatch/scripts/services/xntpd
#usr/share/logwatch/scripts/services/yum
+#usr/share/logwatch/scripts/services/zypp
usr/share/logwatch/scripts/services/zz-disk_space
#usr/share/logwatch/scripts/services/zz-fortune
+#usr/share/logwatch/scripts/services/zz-lm_sensors
usr/share/logwatch/scripts/services/zz-network
usr/share/logwatch/scripts/services/zz-runtime
#usr/share/logwatch/scripts/services/zz-sys
+#usr/share/logwatch/scripts/services/zz-zfs
#usr/share/logwatch/scripts/shared
usr/share/logwatch/scripts/shared/applybinddate
usr/share/logwatch/scripts/shared/applyeurodate
usr/share/logwatch/scripts/shared/remove
usr/share/logwatch/scripts/shared/removeheaders
usr/share/logwatch/scripts/shared/removeservice
+#usr/share/man/man1/amavis-logwatch.1
+#usr/share/man/man1/postfix-logwatch.1
+#usr/share/man/man5/ignore.conf.5
+#usr/share/man/man5/logwatch.conf.5
+#usr/share/man/man5/override.conf.5
#usr/share/man/man8/logwatch.8
var/cache/logwatch
var/log/logwatch
#usr/local/bin/applejuicectrl
usr/local/bin/backupctrl
#usr/local/bin/clamavctrl
+usr/local/bin/collectdctrl
+usr/local/bin/ddnsctrl
usr/local/bin/dhcpctrl
usr/local/bin/dnsmasqctrl
usr/local/bin/extrahdctrl
bin/lowntfs-3g
bin/ntfs-3g
-lib/libntfs-3g.so
-lib/libntfs-3g.so.80
-lib/libntfs-3g.so.80.0.0
+#lib/libntfs-3g.so
+lib/libntfs-3g.so.85
+lib/libntfs-3g.so.85.0.0
+sbin/mkfs.ntfs
sbin/mount.lowntfs-3g
sbin/mount.ntfs-3g
usr/bin/ntfs-3g.probe
usr/bin/ntfs-3g.secaudit
usr/bin/ntfs-3g.usermap
+usr/bin/ntfscat
+usr/bin/ntfscluster
+usr/bin/ntfscmp
+usr/bin/ntfsfix
+usr/bin/ntfsinfo
+usr/bin/ntfsls
#usr/include/ntfs-3g
#usr/include/ntfs-3g/acls.h
#usr/include/ntfs-3g/attrib.h
#usr/include/ntfs-3g/ntfstime.h
#usr/include/ntfs-3g/object_id.h
#usr/include/ntfs-3g/param.h
+#usr/include/ntfs-3g/realpath.h
#usr/include/ntfs-3g/reparse.h
#usr/include/ntfs-3g/runlist.h
#usr/include/ntfs-3g/security.h
#usr/include/ntfs-3g/xattrs.h
#usr/lib/libntfs-3g.a
#usr/lib/libntfs-3g.la
-usr/lib/libntfs-3g.so
+#usr/lib/libntfs-3g.so
usr/lib/pkgconfig/libntfs-3g.pc
+usr/sbin/mkntfs
+usr/sbin/ntfsclone
+usr/sbin/ntfscp
+usr/sbin/ntfslabel
+usr/sbin/ntfsresize
+usr/sbin/ntfsundelete
#usr/share/doc/ntfs-3g
#usr/share/doc/ntfs-3g/README
+#usr/share/man/man8/mkfs.ntfs.8
+#usr/share/man/man8/mkntfs.8
#usr/share/man/man8/mount.lowntfs-3g.8
#usr/share/man/man8/mount.ntfs-3g.8
#usr/share/man/man8/ntfs-3g.8
#usr/share/man/man8/ntfs-3g.probe.8
#usr/share/man/man8/ntfs-3g.secaudit.8
#usr/share/man/man8/ntfs-3g.usermap.8
+#usr/share/man/man8/ntfscat.8
+#usr/share/man/man8/ntfsclone.8
+#usr/share/man/man8/ntfscluster.8
+#usr/share/man/man8/ntfscmp.8
+#usr/share/man/man8/ntfscp.8
+#usr/share/man/man8/ntfsfix.8
+#usr/share/man/man8/ntfsinfo.8
+#usr/share/man/man8/ntfslabel.8
+#usr/share/man/man8/ntfsls.8
+#usr/share/man/man8/ntfsprogs.8
+#usr/share/man/man8/ntfsresize.8
+#usr/share/man/man8/ntfsundelete.8
+++ /dev/null
-usr/lib/libcrypto.so.0.9.8
-usr/lib/libssl.so.0.9.8
#usr/share/doc/openvpn/README.polarssl
#usr/share/doc/openvpn/management-notes.txt
#usr/share/man/man8/openvpn.8
-var/ipfire/ovpn
var/ipfire/ovpn/ca
var/ipfire/ovpn/caconfig
var/ipfire/ovpn/ccd
var/ipfire/ovpn/ovpnconfig
var/ipfire/ovpn/scripts
var/ipfire/ovpn/settings
+var/log/openvpn
--- /dev/null
+#usr/lib/perl5/site_perl/5.12.3/MACHINE-linux-thread-multi/Text
+usr/lib/perl5/site_perl/5.12.3/MACHINE-linux-thread-multi/Text/CSV_XS.pm
+#usr/lib/perl5/site_perl/5.12.3/MACHINE-linux-thread-multi/auto/Text
+#usr/lib/perl5/site_perl/5.12.3/MACHINE-linux-thread-multi/auto/Text/CSV_XS
+#usr/lib/perl5/site_perl/5.12.3/MACHINE-linux-thread-multi/auto/Text/CSV_XS/.packlist
+#usr/lib/perl5/site_perl/5.12.3/MACHINE-linux-thread-multi/auto/Text/CSV_XS/CSV_XS.bs
+usr/lib/perl5/site_perl/5.12.3/MACHINE-linux-thread-multi/auto/Text/CSV_XS/CSV_XS.so
+#usr/share/man/man3/Text::CSV_XS.3
usr/bin/probenic.sh
usr/sbin/setup
+usr/share/locale/ar/LC_MESSAGES/setup.mo
+usr/share/locale/ca/LC_MESSAGES/setup.mo
+#usr/share/locale/cs_CZ
+#usr/share/locale/cs_CZ/LC_MESSAGES
+usr/share/locale/cs_CZ/LC_MESSAGES/setup.mo
+usr/share/locale/da/LC_MESSAGES/setup.mo
usr/share/locale/de/LC_MESSAGES/setup.mo
+#usr/share/locale/el_GR
+#usr/share/locale/el_GR/LC_MESSAGES
+usr/share/locale/el_GR/LC_MESSAGES/setup.mo
+usr/share/locale/es/LC_MESSAGES/setup.mo
+usr/share/locale/fa/LC_MESSAGES/setup.mo
+usr/share/locale/fr/LC_MESSAGES/setup.mo
+usr/share/locale/hr/LC_MESSAGES/setup.mo
+usr/share/locale/hu/LC_MESSAGES/setup.mo
+usr/share/locale/id/LC_MESSAGES/setup.mo
+usr/share/locale/it/LC_MESSAGES/setup.mo
+usr/share/locale/ja/LC_MESSAGES/setup.mo
+#usr/share/locale/jv
+#usr/share/locale/jv/LC_MESSAGES
+usr/share/locale/jv/LC_MESSAGES/setup.mo
+#usr/share/locale/km_KH
+#usr/share/locale/km_KH/LC_MESSAGES
+usr/share/locale/km_KH/LC_MESSAGES/setup.mo
+usr/share/locale/nl/LC_MESSAGES/setup.mo
+usr/share/locale/pl/LC_MESSAGES/setup.mo
+usr/share/locale/pt_BR/LC_MESSAGES/setup.mo
+#usr/share/locale/pt_PT
+#usr/share/locale/pt_PT/LC_MESSAGES
+usr/share/locale/pt_PT/LC_MESSAGES/setup.mo
+#usr/share/locale/ro_RO
+#usr/share/locale/ro_RO/LC_MESSAGES
+usr/share/locale/ro_RO/LC_MESSAGES/setup.mo
+usr/share/locale/ru/LC_MESSAGES/setup.mo
+usr/share/locale/rw/LC_MESSAGES/setup.mo
+usr/share/locale/sk/LC_MESSAGES/setup.mo
+usr/share/locale/sq/LC_MESSAGES/setup.mo
+usr/share/locale/sr/LC_MESSAGES/setup.mo
+#usr/share/locale/su
+#usr/share/locale/su/LC_MESSAGES
+usr/share/locale/su/LC_MESSAGES/setup.mo
+usr/share/locale/sv/LC_MESSAGES/setup.mo
+usr/share/locale/th/LC_MESSAGES/setup.mo
+#usr/share/locale/tk
+#usr/share/locale/tk/LC_MESSAGES
+usr/share/locale/tk/LC_MESSAGES/setup.mo
+usr/share/locale/tr/LC_MESSAGES/setup.mo
+usr/share/locale/uk/LC_MESSAGES/setup.mo
+#usr/share/locale/uz@Latn
+#usr/share/locale/uz@Latn/LC_MESSAGES
+usr/share/locale/uz@Latn/LC_MESSAGES/setup.mo
+usr/share/locale/vi/LC_MESSAGES/setup.mo
+#usr/share/locale/zh
+#usr/share/locale/zh/LC_MESSAGES
+usr/share/locale/zh/LC_MESSAGES/setup.mo
usr/lib/squid/basic_smb_auth.sh
#usr/lib/squid/cachemgr.cgi
usr/lib/squid/cert_tool
-usr/lib/squid/cert_valid.pl
usr/lib/squid/digest_file_auth
usr/lib/squid/digest_ldap_auth
usr/lib/squid/diskd
etc/logrotate.conf
etc/mime.types
etc/modprobe.d
+etc/modprobe.d/btmrvl_sdio.conf
etc/modprobe.d/cfg80211.conf
etc/modprobe.d/pcspeaker.conf
etc/modules.conf
#home
home/nobody
#lib
+#lib/firmware
+#lib/firmware/brcm
+lib/firmware/brcm/brcmfmac43362-sdio.txt
#media
media/cdrom
media/floppy
root/.bash_profile
root/.bashrc
root/ipfire
+run
#sbin
#srv
#usr/bin
usr/local/bin/settime
usr/local/bin/timecheck
usr/local/bin/timezone-transition
-#usr/local/bin/uname
usr/local/bin/update-bootloader
usr/local/bin/update-lang-cache
+usr/local/bin/xt_geoip_build
+usr/local/bin/xt_geoip_update
#usr/local/include
#usr/local/lib
#usr/local/lib/sse2
#usr/local/share/man/man8
#usr/local/share/misc
#usr/local/share/terminfo
+#usr/local/share/xt_geoip
#usr/local/share/zoneinfo
#usr/local/src
#usr/sbin
usr/sbin/ovpn-ccd-convert
+usr/sbin/ovpn-collectd-convert
#usr/share
#usr/share/doc
#usr/share/doc/licenses
#usr/share/man/man8
#usr/share/misc
#usr/share/terminfo
+#usr/share/xt_geoip
#usr/share/zoneinfo
-run
#var
#var/cache
var/empty
etc/strongswan.d/charon.conf
etc/strongswan.d/charon/aes.conf
etc/strongswan.d/charon/attr.conf
+etc/strongswan.d/charon/ccm.conf
etc/strongswan.d/charon/cmac.conf
etc/strongswan.d/charon/constraints.conf
+etc/strongswan.d/charon/ctr.conf
etc/strongswan.d/charon/curl.conf
etc/strongswan.d/charon/des.conf
etc/strongswan.d/charon/dhcp.conf
etc/strongswan.d/charon/eap-ttls.conf
etc/strongswan.d/charon/farp.conf
etc/strongswan.d/charon/fips-prf.conf
+etc/strongswan.d/charon/gcm.conf
etc/strongswan.d/charon/gcrypt.conf
etc/strongswan.d/charon/gmp.conf
etc/strongswan.d/charon/hmac.conf
#usr/lib/ipsec/plugins
usr/lib/ipsec/plugins/libstrongswan-aes.so
usr/lib/ipsec/plugins/libstrongswan-attr.so
+usr/lib/ipsec/plugins/libstrongswan-ccm.so
usr/lib/ipsec/plugins/libstrongswan-cmac.so
usr/lib/ipsec/plugins/libstrongswan-constraints.so
+usr/lib/ipsec/plugins/libstrongswan-ctr.so
usr/lib/ipsec/plugins/libstrongswan-curl.so
usr/lib/ipsec/plugins/libstrongswan-dhcp.so
usr/lib/ipsec/plugins/libstrongswan-des.so
usr/lib/ipsec/plugins/libstrongswan-eap-ttls.so
usr/lib/ipsec/plugins/libstrongswan-farp.so
usr/lib/ipsec/plugins/libstrongswan-fips-prf.so
+usr/lib/ipsec/plugins/libstrongswan-gcm.so
usr/lib/ipsec/plugins/libstrongswan-gcrypt.so
usr/lib/ipsec/plugins/libstrongswan-gmp.so
usr/lib/ipsec/plugins/libstrongswan-hmac.so
#usr/libexec/ipsec
usr/libexec/ipsec/_copyright
usr/libexec/ipsec/_updown
-usr/libexec/ipsec/_updown_espmark
usr/libexec/ipsec/charon
usr/libexec/ipsec/scepclient
usr/libexec/ipsec/starter
#usr/share/man/man5/ipsec.secrets.5
#usr/share/man/man5/strongswan.conf.5
#usr/share/man/man8/_updown.8
-#usr/share/man/man8/_updown_espmark.8
#usr/share/man/man8/ipsec.8
#usr/share/man/man8/openac.8
#usr/share/man/man8/scepclient.8
#usr/share/strongswan/templates/config/plugins
#usr/share/strongswan/templates/config/plugins/aes.conf
#usr/share/strongswan/templates/config/plugins/attr.conf
+#usr/share/strongswan/templates/config/plugins/ccm.conf
#usr/share/strongswan/templates/config/plugins/cmac.conf
#usr/share/strongswan/templates/config/plugins/constraints.conf
+#usr/share/strongswan/templates/config/plugins/ctr.conf
#usr/share/strongswan/templates/config/plugins/curl.conf
#usr/share/strongswan/templates/config/plugins/des.conf
#usr/share/strongswan/templates/config/plugins/dhcp.conf
#usr/share/strongswan/templates/config/plugins/eap-ttls.conf
#usr/share/strongswan/templates/config/plugins/farp.conf
#usr/share/strongswan/templates/config/plugins/fips-prf.conf
+#usr/share/strongswan/templates/config/plugins/gcm.conf
#usr/share/strongswan/templates/config/plugins/gcrypt.conf
#usr/share/strongswan/templates/config/plugins/gmp.conf
#usr/share/strongswan/templates/config/plugins/hmac.conf
#usr/share/man/man8/sysklogd.8
var/log/dhcpcd.log
var/log/messages
-var/log/ovpnserver.log
etc/modprobe.d/blacklist.conf
etc/udev
#etc/udev/rules.d
-#etc/udev/rules.d/30-persistent-network.rules
#etc/udev/rules.d/55-lfs.rules
#etc/udev/rules.d/81-cdrom.rules
#etc/udev/rules.d/83-cdrom-symlinks.rules
#lib/udev/hwdb.d/60-keyboard.hwdb
#lib/udev/init-net-rules.sh
#lib/udev/mtd_probe
+#lib/udev/network-hotplug-rename
#lib/udev/rule_generator.functions
#lib/udev/rules.d
#lib/udev/rules.d/25-alsa.rules
#lib/udev/rules.d/50-udev-default.rules
#lib/udev/rules.d/60-cdrom_id.rules
#lib/udev/rules.d/60-keyboard.rules
+#lib/udev/rules.d/60-net.rules
#lib/udev/rules.d/60-persistent-alsa.rules
#lib/udev/rules.d/60-persistent-input.rules
#lib/udev/rules.d/60-persistent-serial.rules
--- /dev/null
+srv/web/ipfire/cgi-bin/aliases.cgi
+#srv/web/ipfire/cgi-bin/asterisk
+#srv/web/ipfire/cgi-bin/asterisk/calls.cgi
+#srv/web/ipfire/cgi-bin/asterisk/conf
+#srv/web/ipfire/cgi-bin/asterisk/conf.cgi
+#srv/web/ipfire/cgi-bin/asterisk/conf/telbook.conf
+#srv/web/ipfire/cgi-bin/asterisk/status.cgi
+srv/web/ipfire/cgi-bin/atm-status.cgi
+srv/web/ipfire/cgi-bin/backup.cgi
+srv/web/ipfire/cgi-bin/bluetooth.cgi
+srv/web/ipfire/cgi-bin/chpasswd.cgi
+srv/web/ipfire/cgi-bin/connections.cgi
+srv/web/ipfire/cgi-bin/connscheduler.cgi
+srv/web/ipfire/cgi-bin/country.cgi
+srv/web/ipfire/cgi-bin/credits.cgi
+srv/web/ipfire/cgi-bin/ddns.cgi
+srv/web/ipfire/cgi-bin/dhcp.cgi
+srv/web/ipfire/cgi-bin/dns.cgi
+srv/web/ipfire/cgi-bin/dnsforward.cgi
+srv/web/ipfire/cgi-bin/entropy.cgi
+srv/web/ipfire/cgi-bin/extrahd.cgi
+srv/web/ipfire/cgi-bin/fireinfo.cgi
+srv/web/ipfire/cgi-bin/firewall.cgi
+srv/web/ipfire/cgi-bin/fwhosts.cgi
+srv/web/ipfire/cgi-bin/geoip-block.cgi
+srv/web/ipfire/cgi-bin/gpl.cgi
+srv/web/ipfire/cgi-bin/gui.cgi
+srv/web/ipfire/cgi-bin/hardwaregraphs.cgi
+srv/web/ipfire/cgi-bin/hosts.cgi
+srv/web/ipfire/cgi-bin/ids.cgi
+#srv/web/ipfire/cgi-bin/imspector.cgi
+srv/web/ipfire/cgi-bin/index.cgi
+srv/web/ipfire/cgi-bin/ipinfo.cgi
+srv/web/ipfire/cgi-bin/iptables.cgi
+srv/web/ipfire/cgi-bin/logs.cgi
+srv/web/ipfire/cgi-bin/logs.cgi/calamaris.dat
+srv/web/ipfire/cgi-bin/logs.cgi/config.dat
+srv/web/ipfire/cgi-bin/logs.cgi/firewalllog.dat
+srv/web/ipfire/cgi-bin/logs.cgi/firewalllogcountry.dat
+srv/web/ipfire/cgi-bin/logs.cgi/firewalllogip.dat
+srv/web/ipfire/cgi-bin/logs.cgi/firewalllogport.dat
+srv/web/ipfire/cgi-bin/logs.cgi/ids.dat
+srv/web/ipfire/cgi-bin/logs.cgi/log.dat
+srv/web/ipfire/cgi-bin/logs.cgi/proxylog.dat
+srv/web/ipfire/cgi-bin/logs.cgi/showrequestfromcountry.dat
+srv/web/ipfire/cgi-bin/logs.cgi/showrequestfromip.dat
+srv/web/ipfire/cgi-bin/logs.cgi/showrequestfromport.dat
+srv/web/ipfire/cgi-bin/logs.cgi/summary.dat
+srv/web/ipfire/cgi-bin/logs.cgi/urlfilter.dat
+srv/web/ipfire/cgi-bin/mac.cgi
+srv/web/ipfire/cgi-bin/mdstat.cgi
+srv/web/ipfire/cgi-bin/media.cgi
+srv/web/ipfire/cgi-bin/memory.cgi
+srv/web/ipfire/cgi-bin/modem-status.cgi
+srv/web/ipfire/cgi-bin/modem.cgi
+#srv/web/ipfire/cgi-bin/mpfire.cgi
+srv/web/ipfire/cgi-bin/netexternal.cgi
+srv/web/ipfire/cgi-bin/netinternal.cgi
+srv/web/ipfire/cgi-bin/netother.cgi
+srv/web/ipfire/cgi-bin/netovpnrw.cgi
+srv/web/ipfire/cgi-bin/netovpnsrv.cgi
+srv/web/ipfire/cgi-bin/optionsfw.cgi
+srv/web/ipfire/cgi-bin/ovpnmain.cgi
+srv/web/ipfire/cgi-bin/p2p-block.cgi
+srv/web/ipfire/cgi-bin/pakfire.cgi
+srv/web/ipfire/cgi-bin/pppsetup.cgi
+srv/web/ipfire/cgi-bin/proxy.cgi
+srv/web/ipfire/cgi-bin/qos.cgi
+srv/web/ipfire/cgi-bin/remote.cgi
+srv/web/ipfire/cgi-bin/routing.cgi
+#srv/web/ipfire/cgi-bin/samba.cgi
+#srv/web/ipfire/cgi-bin/sambahlp.cgi
+srv/web/ipfire/cgi-bin/services.cgi
+srv/web/ipfire/cgi-bin/shutdown.cgi
+srv/web/ipfire/cgi-bin/speed.cgi
+srv/web/ipfire/cgi-bin/system.cgi
+srv/web/ipfire/cgi-bin/time.cgi
+#srv/web/ipfire/cgi-bin/tor.cgi
+srv/web/ipfire/cgi-bin/traffic.cgi
+#srv/web/ipfire/cgi-bin/tripwire.cgi
+srv/web/ipfire/cgi-bin/updatexlrator.cgi
+#srv/web/ipfire/cgi-bin/upnp.cgi
+srv/web/ipfire/cgi-bin/urlfilter.cgi
+srv/web/ipfire/cgi-bin/vpnmain.cgi
+srv/web/ipfire/cgi-bin/wakeonlan.cgi
+srv/web/ipfire/cgi-bin/webaccess.cgi
+srv/web/ipfire/cgi-bin/wireless.cgi
+srv/web/ipfire/cgi-bin/wirelessclient.cgi
+srv/web/ipfire/cgi-bin/wlanap.cgi
+#srv/web/ipfire/html
+srv/web/ipfire/html/blob.gif
+srv/web/ipfire/html/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
+srv/web/ipfire/html/images/add.gif
+srv/web/ipfire/html/images/addblue.gif
+srv/web/ipfire/html/images/addgreen.gif
+srv/web/ipfire/html/images/address-book-new.png
+srv/web/ipfire/html/images/application-certificate.png
+srv/web/ipfire/html/images/application-x-executable.png
+srv/web/ipfire/html/images/applications-accessories.png
+srv/web/ipfire/html/images/applications-development.png
+srv/web/ipfire/html/images/applications-games.png
+srv/web/ipfire/html/images/applications-graphics.png
+srv/web/ipfire/html/images/applications-internet.png
+srv/web/ipfire/html/images/applications-multimedia.png
+srv/web/ipfire/html/images/applications-office.png
+srv/web/ipfire/html/images/applications-other.png
+srv/web/ipfire/html/images/applications-system.png
+srv/web/ipfire/html/images/appointment-new.png
+srv/web/ipfire/html/images/audio-volume-high-red.png
+srv/web/ipfire/html/images/audio-volume-high.png
+srv/web/ipfire/html/images/audio-volume-low-red.png
+srv/web/ipfire/html/images/audio-volume-low.png
+srv/web/ipfire/html/images/audio-x-generic-red.png
+srv/web/ipfire/html/images/audio-x-generic.png
+srv/web/ipfire/html/images/background.gif
+srv/web/ipfire/html/images/bookmark-new.png
+srv/web/ipfire/html/images/clock.gif
+srv/web/ipfire/html/images/computer.png
+srv/web/ipfire/html/images/delete.gif
+srv/web/ipfire/html/images/dialog-error.png
+srv/web/ipfire/html/images/dialog-information.png
+srv/web/ipfire/html/images/dialog-warning.png
+srv/web/ipfire/html/images/dns_link.png
+srv/web/ipfire/html/images/document-new.png
+srv/web/ipfire/html/images/document-open.png
+srv/web/ipfire/html/images/document-print-preview.png
+srv/web/ipfire/html/images/document-print.png
+srv/web/ipfire/html/images/document-properties.png
+srv/web/ipfire/html/images/document-save-as.png
+srv/web/ipfire/html/images/document-save.png
+srv/web/ipfire/html/images/down.gif
+srv/web/ipfire/html/images/drive-harddisk.png
+srv/web/ipfire/html/images/drive-optical.png
+srv/web/ipfire/html/images/drive-removable-media.png
+srv/web/ipfire/html/images/edit-find.png
+srv/web/ipfire/html/images/edit-redo.png
+srv/web/ipfire/html/images/edit.gif
+srv/web/ipfire/html/images/floppy.gif
+srv/web/ipfire/html/images/folder-drag-accept.png
+srv/web/ipfire/html/images/folder-new.png
+srv/web/ipfire/html/images/folder-open.png
+srv/web/ipfire/html/images/folder-remote.png
+srv/web/ipfire/html/images/folder-saved-search.png
+srv/web/ipfire/html/images/folder-visiting.png
+srv/web/ipfire/html/images/folder.png
+srv/web/ipfire/html/images/format-indent-less.png
+srv/web/ipfire/html/images/format-indent-more.png
+srv/web/ipfire/html/images/format-justify-center.png
+srv/web/ipfire/html/images/format-justify-fill.png
+srv/web/ipfire/html/images/format-justify-left.png
+srv/web/ipfire/html/images/format-justify-right.png
+srv/web/ipfire/html/images/forward.gif
+srv/web/ipfire/html/images/go-bottom.png
+srv/web/ipfire/html/images/go-down.png
+srv/web/ipfire/html/images/go-first.png
+srv/web/ipfire/html/images/go-home.png
+srv/web/ipfire/html/images/go-jump.png
+srv/web/ipfire/html/images/go-last.png
+srv/web/ipfire/html/images/go-next.png
+srv/web/ipfire/html/images/go-previous.png
+srv/web/ipfire/html/images/go-top.png
+srv/web/ipfire/html/images/go-up.png
+srv/web/ipfire/html/images/help-browser.png
+srv/web/ipfire/html/images/help.gif
+srv/web/ipfire/html/images/image-loading.png
+srv/web/ipfire/html/images/image-missing.png
+srv/web/ipfire/html/images/image-x-generic.png
+srv/web/ipfire/html/images/indicator.gif
+srv/web/ipfire/html/images/info.gif
+srv/web/ipfire/html/images/input-gaming.png
+srv/web/ipfire/html/images/input-keyboard.png
+srv/web/ipfire/html/images/input-mouse.png
+srv/web/ipfire/html/images/internet-group-chat.png
+srv/web/ipfire/html/images/internet-mail.png
+srv/web/ipfire/html/images/internet-news-reader.png
+srv/web/ipfire/html/images/internet-web-browser.png
+srv/web/ipfire/html/images/list-add.png
+srv/web/ipfire/html/images/list-remove.png
+srv/web/ipfire/html/images/mail-attachment.png
+srv/web/ipfire/html/images/mail-forward.png
+srv/web/ipfire/html/images/mail-mark-junk.png
+srv/web/ipfire/html/images/mail-mark-not-junk.png
+srv/web/ipfire/html/images/mail-message-new.png
+srv/web/ipfire/html/images/mail-reply-all.png
+srv/web/ipfire/html/images/mail-reply-sender.png
+srv/web/ipfire/html/images/mail-send-receive.png
+srv/web/ipfire/html/images/media-flash.png
+srv/web/ipfire/html/images/media-floppy.png
+srv/web/ipfire/html/images/media-optical.png
+srv/web/ipfire/html/images/media-playback-start-all.png
+srv/web/ipfire/html/images/media-playback-start.png
+srv/web/ipfire/html/images/media-playback-stop.png
+srv/web/ipfire/html/images/media-repeat.png
+srv/web/ipfire/html/images/media-resume.png
+srv/web/ipfire/html/images/media-shuffle.png
+srv/web/ipfire/html/images/media-skip-backward.png
+srv/web/ipfire/html/images/media-skip-forward.png
+srv/web/ipfire/html/images/mpfire
+srv/web/ipfire/html/images/mpfire/box.png
+srv/web/ipfire/html/images/network-error.png
+srv/web/ipfire/html/images/network-idle.png
+srv/web/ipfire/html/images/network-offline.png
+srv/web/ipfire/html/images/network-receive.png
+srv/web/ipfire/html/images/network-server.png
+srv/web/ipfire/html/images/network-transmit-receive.png
+srv/web/ipfire/html/images/network-transmit.png
+srv/web/ipfire/html/images/network-wired.png
+srv/web/ipfire/html/images/network-wireless-encrypted.png
+srv/web/ipfire/html/images/network-wireless.png
+srv/web/ipfire/html/images/network-workgroup.png
+srv/web/ipfire/html/images/network.png
+srv/web/ipfire/html/images/null.gif
+srv/web/ipfire/html/images/off.gif
+srv/web/ipfire/html/images/on.gif
+srv/web/ipfire/html/images/openvpn.gif
+srv/web/ipfire/html/images/openvpn.png
+srv/web/ipfire/html/images/package-x-generic.png
+srv/web/ipfire/html/images/printer-error.png
+srv/web/ipfire/html/images/printer.png
+srv/web/ipfire/html/images/process-stop.png
+srv/web/ipfire/html/images/process-working.png
+srv/web/ipfire/html/images/reload.gif
+srv/web/ipfire/html/images/start-here.png
+srv/web/ipfire/html/images/stock_down-16.png
+srv/web/ipfire/html/images/stock_ok.png
+srv/web/ipfire/html/images/stock_stop.png
+srv/web/ipfire/html/images/stock_up-16.png
+srv/web/ipfire/html/images/system-file-manager.png
+srv/web/ipfire/html/images/system-installer.png
+srv/web/ipfire/html/images/system-lock-screen.png
+srv/web/ipfire/html/images/system-log-out.png
+srv/web/ipfire/html/images/system-search.png
+srv/web/ipfire/html/images/system-shutdown.png
+srv/web/ipfire/html/images/system-software-update.png
+srv/web/ipfire/html/images/system-users.png
+srv/web/ipfire/html/images/tab-new.png
+srv/web/ipfire/html/images/table-header.gif
+srv/web/ipfire/html/images/text-html.png
+srv/web/ipfire/html/images/text-x-generic-template.png
+srv/web/ipfire/html/images/text-x-generic.png
+srv/web/ipfire/html/images/text-x-script.png
+srv/web/ipfire/html/images/tux.png
+srv/web/ipfire/html/images/up.gif
+srv/web/ipfire/html/images/updbooster
+srv/web/ipfire/html/images/updbooster/updxl-globe.gif
+srv/web/ipfire/html/images/updbooster/updxl-gr.gif
+srv/web/ipfire/html/images/updbooster/updxl-led-blue.gif
+srv/web/ipfire/html/images/updbooster/updxl-led-gray.gif
+srv/web/ipfire/html/images/updbooster/updxl-led-green.gif
+srv/web/ipfire/html/images/updbooster/updxl-led-red.gif
+srv/web/ipfire/html/images/updbooster/updxl-led-yellow.gif
+srv/web/ipfire/html/images/updbooster/updxl-rd.gif
+srv/web/ipfire/html/images/updbooster/updxl-src-adobe.gif
+srv/web/ipfire/html/images/updbooster/updxl-src-apple.gif
+srv/web/ipfire/html/images/updbooster/updxl-src-avast.gif
+srv/web/ipfire/html/images/updbooster/updxl-src-avg.gif
+srv/web/ipfire/html/images/updbooster/updxl-src-avira.gif
+srv/web/ipfire/html/images/updbooster/updxl-src-kaspersky.gif
+srv/web/ipfire/html/images/updbooster/updxl-src-linux.gif
+srv/web/ipfire/html/images/updbooster/updxl-src-microsoft.gif
+srv/web/ipfire/html/images/updbooster/updxl-src-symantec.gif
+srv/web/ipfire/html/images/updbooster/updxl-src-trendmicro.gif
+srv/web/ipfire/html/images/updbooster/updxl-src-unknown.gif
+srv/web/ipfire/html/images/updbooster/updxl-src-windows.gif
+srv/web/ipfire/html/images/updbooster/updxl-yl.gif
+srv/web/ipfire/html/images/urlfilter
+srv/web/ipfire/html/images/urlfilter/1x1.gif
+srv/web/ipfire/html/images/urlfilter/bg_cool_tux.jpg
+srv/web/ipfire/html/images/urlfilter/bgcool.gif
+srv/web/ipfire/html/images/urlfilter/copy.gif
+srv/web/ipfire/html/images/urlfilter/gmg_tux_ip_fire.gif
+srv/web/ipfire/html/images/urlfilter/led-green.gif
+srv/web/ipfire/html/images/urlfilter/led-red.gif
+srv/web/ipfire/html/images/user-home.png
+srv/web/ipfire/html/images/user-multiple.png
+srv/web/ipfire/html/images/user-option-add.png
+srv/web/ipfire/html/images/user-option-remove.png
+srv/web/ipfire/html/images/user-trash-full.png
+srv/web/ipfire/html/images/user-trash.png
+srv/web/ipfire/html/images/utilities-system-monitor.png
+srv/web/ipfire/html/images/utilities-terminal.png
+srv/web/ipfire/html/images/view-fullscreen.png
+srv/web/ipfire/html/images/view-refresh.png
+srv/web/ipfire/html/images/wakeup.gif
+srv/web/ipfire/html/images/window-new.png
+srv/web/ipfire/html/include
+srv/web/ipfire/html/include/snortupdateutility.js
+srv/web/ipfire/html/index.cgi
+srv/web/ipfire/html/redirect-templates
+srv/web/ipfire/html/redirect-templates/legacy
+srv/web/ipfire/html/redirect-templates/legacy/template.html
+srv/web/ipfire/html/redirect.cgi
+srv/web/ipfire/html/themes
+srv/web/ipfire/html/themes/darkdos
+srv/web/ipfire/html/themes/darkdos/images
+srv/web/ipfire/html/themes/darkdos/images/IPFire.png
+srv/web/ipfire/html/themes/darkdos/images/b1.gif
+srv/web/ipfire/html/themes/darkdos/images/b2.gif
+srv/web/ipfire/html/themes/darkdos/images/b3.gif
+srv/web/ipfire/html/themes/darkdos/images/b4.gif
+srv/web/ipfire/html/themes/darkdos/images/b5.gif
+srv/web/ipfire/html/themes/darkdos/images/b6.gif
+srv/web/ipfire/html/themes/darkdos/images/spacer.gif
+srv/web/ipfire/html/themes/darkdos/include
+srv/web/ipfire/html/themes/darkdos/include/colors.txt
+srv/web/ipfire/html/themes/darkdos/include/functions.pl
+srv/web/ipfire/html/themes/darkdos/include/style.css
+srv/web/ipfire/html/themes/ipfire
+srv/web/ipfire/html/themes/ipfire-legacy
+srv/web/ipfire/html/themes/ipfire-legacy/images
+srv/web/ipfire/html/themes/ipfire-legacy/images/n1.gif
+srv/web/ipfire/html/themes/ipfire-legacy/images/n2.gif
+srv/web/ipfire/html/themes/ipfire-legacy/images/n3.gif
+srv/web/ipfire/html/themes/ipfire-legacy/images/n4.gif
+srv/web/ipfire/html/themes/ipfire-legacy/images/n5.gif
+srv/web/ipfire/html/themes/ipfire-legacy/images/n6.gif
+srv/web/ipfire/html/themes/ipfire-legacy/images/spacer.gif
+srv/web/ipfire/html/themes/ipfire-legacy/include
+srv/web/ipfire/html/themes/ipfire-legacy/include/colors.txt
+srv/web/ipfire/html/themes/ipfire-legacy/include/functions.pl
+srv/web/ipfire/html/themes/ipfire-legacy/include/style.css
+srv/web/ipfire/html/themes/ipfire-rounded
+srv/web/ipfire/html/themes/ipfire/images
+srv/web/ipfire/html/themes/ipfire/images/n2.gif
+srv/web/ipfire/html/themes/ipfire/images/n3.gif
+srv/web/ipfire/html/themes/ipfire/images/n5.gif
+srv/web/ipfire/html/themes/ipfire/images/n6.gif
+srv/web/ipfire/html/themes/ipfire/images/tux2.png
+srv/web/ipfire/html/themes/ipfire/include
+srv/web/ipfire/html/themes/ipfire/include/colors.txt
+srv/web/ipfire/html/themes/ipfire/include/css
+srv/web/ipfire/html/themes/ipfire/include/css/style-rounded.css
+srv/web/ipfire/html/themes/ipfire/include/css/style.css
+srv/web/ipfire/html/themes/ipfire/include/functions.pl
+srv/web/ipfire/html/themes/ipfire/include/js
+srv/web/ipfire/html/themes/ipfire/include/js/refreshInetInfo.js
+srv/web/ipfire/html/themes/maniac
+srv/web/ipfire/html/themes/maniac/images
+srv/web/ipfire/html/themes/maniac/images/IPFire.png
+srv/web/ipfire/html/themes/maniac/images/Thumbs.db
+srv/web/ipfire/html/themes/maniac/images/b1.gif
+srv/web/ipfire/html/themes/maniac/images/b2.gif
+srv/web/ipfire/html/themes/maniac/images/b3.gif
+srv/web/ipfire/html/themes/maniac/images/b4.gif
+srv/web/ipfire/html/themes/maniac/images/b5.gif
+srv/web/ipfire/html/themes/maniac/images/b6.gif
+srv/web/ipfire/html/themes/maniac/images/spacer.gif
+srv/web/ipfire/html/themes/maniac/include
+srv/web/ipfire/html/themes/maniac/include/colors.txt
+srv/web/ipfire/html/themes/maniac/include/functions.pl
+srv/web/ipfire/html/themes/maniac/include/style.css
+var/updatecache
+var/updatecache/download
+var/updatecache/metadata
--- /dev/null
+lib/xtables/libxt_ACCOUNT.so
+lib/xtables/libxt_CHAOS.so
+lib/xtables/libxt_DELUDE.so
+lib/xtables/libxt_DHCPMAC.so
+lib/xtables/libxt_DNETMAP.so
+lib/xtables/libxt_ECHO.so
+lib/xtables/libxt_IPMARK.so
+lib/xtables/libxt_LOGMARK.so
+lib/xtables/libxt_TARPIT.so
+lib/xtables/libxt_condition.so
+lib/xtables/libxt_dhcpmac.so
+lib/xtables/libxt_fuzzy.so
+lib/xtables/libxt_geoip.so
+lib/xtables/libxt_iface.so
+lib/xtables/libxt_ipp2p.so
+lib/xtables/libxt_ipv4options.so
+lib/xtables/libxt_length2.so
+lib/xtables/libxt_lscan.so
+lib/xtables/libxt_pknock.so
+lib/xtables/libxt_psd.so
+lib/xtables/libxt_quota2.so
+#usr/lib/libxt_ACCOUNT_cl.la
+#usr/lib/libxt_ACCOUNT_cl.so
+usr/lib/libxt_ACCOUNT_cl.so.0
+usr/lib/libxt_ACCOUNT_cl.so.0.0.0
+#usr/libexec/xtables-addons
+usr/libexec/xtables-addons/xt_geoip_build
+usr/libexec/xtables-addons/xt_geoip_dl
+usr/sbin/iptaccount
+#usr/share/man/man1/xt_geoip_build.1
+#usr/share/man/man1/xt_geoip_dl.1
+#usr/share/man/man8/iptaccount.8
+#usr/share/man/man8/xtables-addons.8
#usr/include/lzma/hardware.h
#usr/include/lzma/index.h
#usr/include/lzma/index_hash.h
-#usr/include/lzma/lzma.h
+#usr/include/lzma/lzma12.h
#usr/include/lzma/stream_flags.h
#usr/include/lzma/version.h
#usr/include/lzma/vli.h
#usr/lib/liblzma.la
usr/lib/liblzma.so
usr/lib/liblzma.so.5
-usr/lib/liblzma.so.5.0.5
+usr/lib/liblzma.so.5.2.1
#usr/lib/pkgconfig/liblzma.pc
#usr/share/doc/xz
#usr/share/doc/xz/AUTHORS
#usr/share/doc/xz/examples/01_compress_easy.c
#usr/share/doc/xz/examples/02_decompress.c
#usr/share/doc/xz/examples/03_compress_custom.c
+#usr/share/doc/xz/examples/04_compress_easy_mt.c
#usr/share/doc/xz/examples/Makefile
#usr/share/doc/xz/examples_old
#usr/share/doc/xz/examples_old/xz_pipe_comp.c
#usr/share/locale/fr/LC_MESSAGES/xz.mo
#usr/share/locale/it/LC_MESSAGES/xz.mo
#usr/share/locale/pl/LC_MESSAGES/xz.mo
+#usr/share/locale/vi/LC_MESSAGES/xz.mo
#usr/share/man/man1/lzcat.1
#usr/share/man/man1/lzcmp.1
#usr/share/man/man1/lzdiff.1
+++ /dev/null
-etc/system-release
-etc/issue
-srv/web/ipfire/cgi-bin/ovpnmain.cgi
-var/ipfire/langs
--- /dev/null
+etc/system-release
+etc/issue
--- /dev/null
+../../../common/openssh
\ No newline at end of file
/usr/local/bin/backupctrl exclude >/dev/null 2>&1
# Remove old core updates from pakfire cache to save space...
-core=87
+core=88
for (( i=1; i<=$core; i++ ))
do
rm -f /var/cache/pakfire/core-upgrade-*-$i.ipfire
# Start services
# Update Language cache
-perl -e "require '/var/ipfire/lang.pl'; &Lang::BuildCacheLang"
+#perl -e "require '/var/ipfire/lang.pl'; &Lang::BuildCacheLang"
-# Uninstall the sqlite package.
-rm -f \
- /opt/pakfire/db/installed/meta-sqlite \
- /opt/pakfire/db/rootfiles/sqlite
sync
--- /dev/null
+../../../common/collectd
\ No newline at end of file
--- /dev/null
+etc/system-release
+etc/issue
+etc/collectd.conf
+etc/collectd.vpn
+etc/rc.d/init.d/dnsmasq
+srv/web/ipfire/cgi-bin/ddns.cgi
+srv/web/ipfire/cgi-bin/firewall.cgi
+srv/web/ipfire/cgi-bin/fwhosts.cgi
+srv/web/ipfire/cgi-bin/ids.cgi
+srv/web/ipfire/cgi-bin/netovpnrw.cgi
+srv/web/ipfire/cgi-bin/netovpnsrv.cgi
+srv/web/ipfire/cgi-bin/ovpnmain.cgi
+srv/web/ipfire/cgi-bin/vpnmain.cgi
+usr/local/bin/collectdctrl
+usr/local/bin/openvpnctrl
+usr/sbin/ovpn-collectd-convert
+usr/sbin/setup
+var/ipfire/backup/bin/backup.pl
+var/ipfire/graphs.pl
+var/ipfire/langs
+var/ipfire/lang.pl
+var/ipfire/menu.d/20-status.menu
--- /dev/null
+../../../common/fuse
\ No newline at end of file
--- /dev/null
+../../../common/ntfs-3g
\ No newline at end of file
--- /dev/null
+../../../common/openssh
\ 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) 2014 IPFire-Team <info@ipfire.org>. #
+# #
+############################################################################
+#
+. /opt/pakfire/lib/functions.sh
+/usr/local/bin/backupctrl exclude >/dev/null 2>&1
+
+# Remove old core updates from pakfire cache to save space...
+core=89
+for (( i=1; i<=$core; i++ ))
+do
+ rm -f /var/cache/pakfire/core-upgrade-*-$i.ipfire
+done
+
+# Stop services
+/etc/init.d/ipsec stop
+
+# Remove old files
+rm -f /usr/local/sbin/setup
+
+# Extract files
+extract_files
+
+# Update /etc/sysconfig/createfiles
+cat <<EOF >> /etc/sysconfig/createfiles
+/var/run/ovpnserver.log file 644 nobody nobody
+/var/run/openvpn dir 644 nobody nobody
+EOF
+
+# Update /etc/collectd.conf
+if ! grep -q "collectd.vpn" /etc/collectd.conf; then
+ echo "include \"/etc/collectd.vpn\"" >> /etc/collectd.conf
+fi
+
+# Generate ddns configuration file
+sudo -u nobody /srv/web/ipfire/cgi-bin/ddns.cgi
+
+# Start services
+/etc/init.d/dnsmasq restart
+if [ `grep "ENABLED=on" /var/ipfire/vpn/settings` ]; then
+ /etc/init.d/ipsec start
+fi
+
+# Update Language cache
+perl -e "require '/var/ipfire/lang.pl'; &Lang::BuildCacheLang"
+
+# Prevent uninstall sqlite (now common package).
+rm -f \
+ /opt/pakfire/db/*/meta-sqlite \
+ /opt/pakfire/db/rootfiles/sqlite
+
+mkdir -p /var/run/openvpn
+touch /var/run/ovpnserver.log
+chown nobody.nobody \
+ /var/run/openvpn \
+ /var/run/ovpnserver.log
+
+# Update OpenVPN/collectd configuration
+files=`find /var/ipfire/ovpn/n2nconf/ -type d`
+for i in $files;
+do
+ if ! grep -q "status-version" $i/${i##*/}.conf; then
+ echo "# Logfile" >> $i/${i##*/}.conf
+ echo "status-version 1" >> $i/${i##*/}.conf
+ fi
+ if ! grep -q "status " $i/${i##*/}.conf; then
+ echo "status /var/run/openvpn/${i##*/}-n2n 10" >> $i/${i##*/}.conf
+ fi
+done
+
+/usr/sbin/ovpn-collectd-convert
+chown nobody.nobody /var/ipfire/ovpn/collectd.vpn
+
+# Fix permissions
+chown nobody.nobody /var/ipfire/dns
+
+# Fix #10625
+mkdir -p /etc/logrotate.d
+
+sync
+
+# This update need a reboot...
+#touch /var/run/need_reboot
+
+# Finish
+/etc/init.d/fireinfo start
+sendprofile
+
+# Don't report the exitcode last command
+exit 0
--- /dev/null
+boot/config.txt
+etc/collectd.custom
+etc/ipsec.conf
+etc/ipsec.secrets
+etc/ipsec.user.conf
+etc/ipsec.user.secrets
+etc/localtime
+etc/rc.d/rcsysinit.d/S19checkfstab
+etc/rc.d/rcsysinit.d/S70console
+etc/shadow
+etc/ssh/ssh_config
+etc/ssh/sshd_config
+etc/ssl/openssl.cnf
+etc/sudoers
+etc/sysconfig/firewall.local
+etc/sysconfig/modules
+etc/sysconfig/rc.local
+etc/udev/rules.d/30-persistent-network.rules
+srv/web/ipfire/html/proxy.pac
+var/ipfire/firewall/geoipblock
+var/ipfire/fwhosts/custmgeoipgrp
+var/ipfire/ovpn/ccd.conf
+var/ipfire/ovpn/ccdroute
+var/ipfire/ovpn/ccdroute2
+var/ipfire/time
+var/log/cache
+var/state/dhcp/dhcpd.leases
+var/updatecache
--- /dev/null
+../../../common/Locale-Country
\ No newline at end of file
--- /dev/null
+../../../common/apache2
\ No newline at end of file
--- /dev/null
+../../../../common/armv5tel/glibc
\ No newline at end of file
--- /dev/null
+../../../common/curl
\ No newline at end of file
--- /dev/null
+../../../common/cyrus-sasl
\ No newline at end of file
--- /dev/null
+../../../common/ddns
\ No newline at end of file
--- /dev/null
+../../../common/dhcp
\ No newline at end of file
--- /dev/null
+../../../common/dhcpcd
\ No newline at end of file
--- /dev/null
+../../../common/dnsmasq
\ No newline at end of file
--- /dev/null
+../../../common/expat
\ No newline at end of file
--- /dev/null
+etc/system-release
+etc/issue
+etc/rc.d/init.d/firewall
+etc/rc.d/init.d/network-trigger
+etc/rc.d/init.d/networking/functions.network
+etc/rc.d/init.d/networking/red.up/99-geoip-database
+etc/rc.d/rcsysinit.d/S90network-trigger
+srv/web/ipfire/cgi-bin/country.cgi
+srv/web/ipfire/cgi-bin/ddns.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/index.cgi
+srv/web/ipfire/cgi-bin/logs.cgi/firewalllog.dat
+srv/web/ipfire/cgi-bin/logs.cgi/firewalllogcountry.dat
+srv/web/ipfire/cgi-bin/logs.cgi/firewalllogip.dat
+srv/web/ipfire/cgi-bin/netovpnsrv.cgi
+srv/web/ipfire/cgi-bin/ovpnmain.cgi
+srv/web/ipfire/cgi-bin/vpnmain.cgi
+srv/web/ipfire/html/themes/darkdos/include/style.css
+srv/web/ipfire/html/themes/ipfire-legacy/include/style.css
+srv/web/ipfire/html/themes/ipfire/include/css/style.css
+srv/web/ipfire/html/themes/maniac/include/style.css
+usr/lib/firewall/firewall-lib.pl
+usr/lib/firewall/rules.pl
+usr/local/bin/backupiso
+usr/local/bin/ddnsctrl
+usr/local/bin/ipsecctrl
+usr/local/bin/xt_geoip_build
+usr/local/bin/xt_geoip_update
+var/ipfire/general-functions.pl
+var/ipfire/geoip-functions.pl
+var/ipfire/header.pl
+var/ipfire/backup/include
+var/ipfire/langs
+var/ipfire/menu.d/50-firewall.menu
--- /dev/null
+../../../common/fireinfo
\ No newline at end of file
--- /dev/null
+../../../common/flag-icons
\ No newline at end of file
--- /dev/null
+../../../common/groff
\ No newline at end of file
--- /dev/null
+../../../../common/i586/acpid
\ No newline at end of file
--- /dev/null
+../../../../common/i586/openssl-sse2
\ No newline at end of file
--- /dev/null
+../../../common/iptables
\ No newline at end of file
--- /dev/null
+../../../common/iputils
\ No newline at end of file
--- /dev/null
+../../../common/libjpeg
\ No newline at end of file
--- /dev/null
+../../../common/logrotate
\ No newline at end of file
--- /dev/null
+../../../common/logwatch
\ No newline at end of file
--- /dev/null
+../../../common/openssl
\ No newline at end of file
--- /dev/null
+lib/security/pam_mysql.so
+usr/lib/gnupg/gpgkeys_ldap
+usr/lib/gnupg/gpgkeys_hkp
+usr/lib/gnupg/gpgkeys_curl
+usr/lib/apache/libphp5.so
+usr/lib/squid/digest_ldap_auth
+usr/lib/squid/basic_ldap_auth
+usr/lib/squid/ext_kerberos_ldap_group_acl
+usr/lib/squid/ext_edirectory_userip_acl
+usr/lib/squid/ext_ldap_group_acl
+usr/lib/python2.7/lib-dynload/_ssl.so
+usr/lib/python2.7/lib-dynload/_hashlib.so
+usr/lib/collectd/write_http.so
+usr/lib/collectd/ascent.so
+usr/lib/collectd/curl_xml.so
+usr/lib/collectd/apache.so
+usr/lib/collectd/bind.so
+usr/lib/collectd/curl.so
+usr/bin/php
--- /dev/null
+../../../common/perl-Text-CSV_XS
\ 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/tzdata
\ No newline at end of file
--- /dev/null
+../../../common/udev
\ No newline at end of file
--- /dev/null
+../../../common/xtables-addons
\ No newline at end of file
--- /dev/null
+../../../common/xz
\ 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) 2014 IPFire-Team <info@ipfire.org>. #
+# #
+############################################################################
+#
+. /opt/pakfire/lib/functions.sh
+/usr/local/bin/backupctrl exclude >/dev/null 2>&1
+
+
+function find_device() {
+ local mountpoint="${1}"
+
+ local root
+ local dev mp fs flags rest
+ while read -r dev mp fs flags rest; do
+ # Skip unwanted entries
+ [ "${dev}" = "rootfs" ] && continue
+
+ if [ "${mp}" = "${mountpoint}" ] && [ -b "${dev}" ]; then
+ root="$(basename "${dev}")"
+ break
+ fi
+ done < /proc/mounts
+
+ # Get the actual device from the partition that holds /
+ while [ -n "${root}" ]; do
+ if [ -e "/sys/block/${root}" ]; then
+ echo "${root}"
+ return 0
+ fi
+
+ # Remove last character
+ root="${root::-1}"
+ done
+
+ return 1
+}
+
+
+#
+# Remove old core updates from pakfire cache to save space...
+core=90
+for (( i=1; i<=${core}; i++ ))
+do
+ rm -f /var/cache/pakfire/core-upgrade-*-$i.ipfire
+done
+
+#
+# Do some sanity checks.
+case $(uname -r) in
+ *-ipfire-versatile )
+ /usr/bin/logger -p syslog.emerg -t ipfire \
+ "core-update-${core}: ERROR cannot update. versatile support is dropped."
+ # Report no error to pakfire. So it does not try to install it again.
+ exit 0
+ ;;
+ *-ipfire* )
+ # Ok.
+ ;;
+ * )
+ /usr/bin/logger -p syslog.emerg -t ipfire \
+ "core-update-${core}: ERROR cannot update. No IPFire Kernel."
+ exit 1
+ ;;
+esac
+
+
+#
+#
+KVER="xxxKVERxxx"
+
+# Check diskspace on root
+ROOTSPACE=`df / -Pk | sed "s| * | |g" | cut -d" " -f4 | tail -n 1`
+
+if [ $ROOTSPACE -lt 100000 ]; then
+ /usr/bin/logger -p syslog.emerg -t ipfire \
+ "core-update-${core}: ERROR cannot update because not enough free space on root."
+ exit 2
+fi
+
+
+echo
+echo Update Kernel to $KVER ...
+#
+# Remove old kernel, configs, initrd, modules, dtb's ...
+#
+rm -rf /boot/System.map-*
+rm -rf /boot/config-*
+rm -rf /boot/ipfirerd-*
+rm -rf /boot/initramfs-*
+rm -rf /boot/vmlinuz-*
+rm -rf /boot/uImage-ipfire-*
+rm -rf /boot/uInit-ipfire-*
+rm -rf /boot/dtb-*-ipfire-*
+rm -rf /lib/modules
+
+case "$(uname -m)" in
+ armv*)
+ # Backup uEnv.txt if exist
+ if [ -e /boot/uEnv.txt ]; then
+ cp -vf /boot/uEnv.txt /boot/uEnv.txt.org
+ fi
+
+ # work around the u-boot folder detection bug
+ mkdir -pv /boot/dtb-$KVER-ipfire-kirkwood
+ mkdir -pv /boot/dtb-$KVER-ipfire-multi
+ ;;
+esac
+
+#
+#Stop services
+/etc/init.d/snort stop
+/etc/init.d/squid stop
+/etc/init.d/ipsec stop
+/etc/init.d/apache stop
+
+# Drop old flag icons, before extracting the new ones.
+rm /srv/web/ipfire/html/images/flags/*
+
+#
+#Extract files
+tar xavf /opt/pakfire/tmp/files* --no-overwrite-dir -p --numeric-owner -C /
+
+#
+# restart init because glibc was updated.
+telinit u
+
+# Remove old openssl libraries
+rm -vf /usr/lib/libcrypto.so.0.9.8 /usr/lib/libssl.so.0.9.8
+
+# Check diskspace on boot
+BOOTSPACE=`df /boot -Pk | sed "s| * | |g" | cut -d" " -f4 | tail -n 1`
+
+if [ $BOOTSPACE -lt 1000 ]; then
+ case $(uname -r) in
+ *-ipfire-kirkwood )
+ # Special handling for old kirkwood images.
+ # (install only kirkwood kernel)
+ rm -rf /boot/*
+ # work around the u-boot folder detection bug
+ mkdir -pv /boot/dtb-$KVER-ipfire-kirkwood
+ tar xavf /opt/pakfire/tmp/files* --no-overwrite-dir -p \
+ --numeric-owner -C / --wildcards 'boot/*-kirkwood*'
+ ;;
+ * )
+ /usr/bin/logger -p syslog.emerg -t ipfire \
+ "core-update-${core}: FATAL-ERROR space run out on boot. System is not bootable..."
+ /etc/init.d/apache start
+ exit 4
+ ;;
+ esac
+fi
+
+# Create GeoIP related files if they do not exist yet.
+if [ ! -e "/var/ipfire/firewall/geoipblock" ]; then
+ touch /var/ipfire/firewall/geoipblock
+ chown nobody:nobody /var/ipfire/firewall/geoipblock
+
+ # Insert default value into file.
+ echo "GEOIPBLOCK_ENABLED=off" >> /var/ipfire/firewall/geoipblock
+fi
+if [ ! -e "/var/ipfire/fwhosts/customgeoipgrp" ]; then
+ touch /var/ipfire/fwhosts/customgeoipgrp
+ chown nobody:nobody /var/ipfire/fwhosts/customgeoipgrp
+fi
+
+#Fix BUG10812 (openvpn server.conf has wrong collectd logfile path)
+if grep -q "status /var/log/ovpnserver.log 30" /var/ipfire/ovpn/server.conf; then
+ sed -i "s/\/var\/log\/ovpnserver.log 30/\/var\/run\/ovpnserver.log 30/" /var/ipfire/ovpn/server.conf
+fi
+
+# Download/Update GeoIP databases.
+/usr/local/bin/xt_geoip_update
+
+# Update crontab
+grep -q /usr/local/bin/xt_geoip_update /var/spool/cron/root.orig || cat <<EOF >> /var/spool/cron/root.orig
+
+# Update GeoIP database once a month.
+%monthly,random * * * [ -f "/var/ipfire/red/active" ] && /usr/local/bin/xt_geoip_update >/dev/null 2>&1
+EOF
+
+fcrontab -z &>/dev/null
+
+# Generate ddns configuration file
+sudo -u nobody /srv/web/ipfire/cgi-bin/ddns.cgi
+
+# Regenerate IPsec configuration
+sudo -u nobody /srv/web/ipfire/cgi-bin/vpnmain.cgi
+
+# Update Language cache
+perl -e "require '/var/ipfire/lang.pl'; &Lang::BuildCacheLang"
+
+#
+# Start services
+#
+/etc/init.d/apache start
+/etc/init.d/squid start
+/etc/init.d/snort start
+if [ `grep "ENABLED=on" /var/ipfire/vpn/settings` ]; then
+ /etc/init.d/ipsec start
+fi
+
+case "$(uname -m)" in
+ i?86)
+ case "$(find_device "/")" in
+ xvd* )
+ echo Skip remove grub2 files, because pygrub fail.
+ rm -f /boot/grub/*
+ echo config will recreated by linux-pae install.
+ ;;
+ * )
+ #
+ # Update to GRUB2 config
+ #
+ grub-mkconfig > /boot/grub/grub.cfg
+ ;;
+ esac
+esac
+
+# Upadate Kernel version uEnv.txt
+if [ -e /boot/uEnv.txt ]; then
+ sed -i -e "s/KVER=.*/KVER=${KVER}/g" /boot/uEnv.txt
+fi
+
+# call user update script (needed for some arm boards)
+if [ -e /boot/pakfire-kernel-update ]; then
+ /boot/pakfire-kernel-update ${KVER}
+fi
+
+
+# Force (re)install pae kernel if pae is supported
+rm -rf /opt/pakfire/db/*/meta-linux-pae
+if [ ! "$(grep "^flags.* pae " /proc/cpuinfo)" == "" ]; then
+ ROOTSPACE=`df / -Pk | sed "s| * | |g" | cut -d" " -f4 | tail -n 1`
+ BOOTSPACE=`df /boot -Pk | sed "s| * | |g" | cut -d" " -f4 | tail -n 1`
+ if [ $BOOTSPACE -lt 12000 -o $ROOTSPACE -lt 90000 ]; then
+ /usr/bin/logger -p syslog.emerg -t ipfire \
+ "core-update-${core}: WARNING not enough space for pae kernel."
+ else
+ echo "Name: linux-pae" > /opt/pakfire/db/installed/meta-linux-pae
+ echo "ProgVersion: 0" >> /opt/pakfire/db/installed/meta-linux-pae
+ echo "Release: 0" >> /opt/pakfire/db/installed/meta-linux-pae
+ echo "Name: linux-pae" > /opt/pakfire/db/meta/meta-linux-pae
+ echo "ProgVersion: 0" >> /opt/pakfire/db/meta/meta-linux-pae
+ echo "Release: 0" >> /opt/pakfire/db/meta/meta-linux-pae
+ fi
+fi
+
+#
+# After pakfire has ended run it again and update the lists and do upgrade
+#
+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 '/usr/bin/logger -p syslog.emerg -t ipfire "Core-upgrade finished. If you use a customized grub/uboot config"' >> /tmp/pak_update
+echo '/usr/bin/logger -p syslog.emerg -t ipfire "Check it before reboot !!!"' >> /tmp/pak_update
+echo '/usr/bin/logger -p syslog.emerg -t ipfire " *** Please reboot... *** "' >> /tmp/pak_update
+echo 'touch /var/run/need_reboot ' >> /tmp/pak_update
+#
+killall -KILL pak_update
+chmod +x /tmp/pak_update
+/tmp/pak_update &
+
+sync
+
+#
+#Finish
+(
+ /etc/init.d/fireinfo start
+ sendprofile
+) >/dev/null 2>&1 &
+
+echo
+echo Please wait until pakfire has ended...
+echo
+
+# Don't report the exitcode last command
+exit 0
+
--- /dev/null
+etc/system-release
+etc/issue
\ No newline at end of file
--- /dev/null
+../../../common/libnet
\ 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) 2015 IPFire-Team <info@ipfire.org>. #
+# #
+############################################################################
+#
+. /opt/pakfire/lib/functions.sh
+/usr/local/bin/backupctrl exclude >/dev/null 2>&1
+
+# Remove old core updates from pakfire cache to save space...
+core=91
+for (( i=1; i<=$core; i++ ))
+do
+ rm -f /var/cache/pakfire/core-upgrade-*-$i.ipfire
+done
+
+# Extract files
+extract_files
+
+# Update Language cache
+update-lang-cache
+
+sync
+
+# This update need a reboot...
+#touch /var/run/need_reboot
+
+# Finish
+/etc/init.d/fireinfo start
+sendprofile
+
+# Don't report the exitcode last command
+exit 0
--- /dev/null
+boot/config.txt
+etc/collectd.custom
+etc/ipsec.conf
+etc/ipsec.secrets
+etc/ipsec.user.conf
+etc/ipsec.user.secrets
+etc/localtime
+etc/shadow
+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/ovpn
+var/log/cache
+var/state/dhcp/dhcpd.leases
+var/updatecache
--- /dev/null
+../../../common/openssl
\ No newline at end of file
--- /dev/null
+../../../common/openssl-compat
\ No newline at end of file
--- /dev/null
+../../../common/hwdata
\ No newline at end of file
--- /dev/null
+boot/config.txt
+etc/collectd.custom
+etc/ipsec.conf
+etc/ipsec.secrets
+etc/ipsec.user.conf
+etc/ipsec.user.secrets
+etc/localtime
+etc/rc.d/rcsysinit.d/S19checkfstab
+etc/rc.d/rcsysinit.d/S70console
+etc/shadow
+etc/ssh/ssh_config
+etc/ssh/sshd_config
+etc/ssl/openssl.cnf
+etc/sudoers
+etc/sysconfig/firewall.local
+etc/sysconfig/modules
+etc/sysconfig/rc.local
+etc/udev/rules.d/30-persistent-network.rules
+srv/web/ipfire/html/proxy.pac
+var/ipfire/time
+var/ipfire/ovpn/ccd.conf
+var/ipfire/ovpn/ccdroute
+var/ipfire/ovpn/ccdroute2
+var/log/cache
+var/state/dhcp/dhcpd.leases
+var/updatecache
--- /dev/null
+../../../../common/armv5tel/glibc
\ No newline at end of file
--- /dev/null
+../../../../common/armv5tel/linux-kirkwood
\ No newline at end of file
--- /dev/null
+../../../../common/armv5tel/linux-multi
\ No newline at end of file
--- /dev/null
+../../../../common/armv5tel/linux-rpi
\ No newline at end of file
--- /dev/null
+../../../../common/armv5tel/swconfig
\ No newline at end of file
--- /dev/null
+../../../common/dracut
\ No newline at end of file
etc/system-release
etc/issue
+etc/modprobe.d/btmrvl_sdio.conf
+etc/rc.d/init.d/collectd
+etc/rc.d/init.d/leds
opt/pakfire/etc/pakfire.conf
usr/lib/firewall/rules.pl
+usr/local/bin/backupiso
usr/local/bin/update-bootloader
+usr/local/share/GeoIP/GeoIP.dat
var/ipfire/header.pl
var/ipfire/langs
var/ipfire/lang.pl
+var/ipfire/ovpn/openssl/ovpn.cnf
--- /dev/null
+../../../common/fireinfo
\ No newline at end of file
--- /dev/null
+../../../common/hwdata
\ No newline at end of file
--- /dev/null
+../../../../common/i586/glibc
\ No newline at end of file
--- /dev/null
+../../../../common/i586/linux
\ No newline at end of file
--- /dev/null
+../../../../common/i586/linux-initrd
\ No newline at end of file
--- /dev/null
+../../../common/openssl
\ No newline at end of file
--- /dev/null
+../../../common/openssl-compat
\ No newline at end of file
--- /dev/null
+../../../common/setup
\ No newline at end of file
--- /dev/null
+../../../common/strongswan
\ No newline at end of file
--- /dev/null
+../../../common/tzdata
\ No newline at end of file
lib/firmware/ti-connectivity/wl18xx-fw-4.bin
lib/firmware/v4l-cx23885-enc-broken.fw
lib/firmware/WHENCE
+lib/firmware/brcm/brcmfmac43362-sdio.txt
--- /dev/null
+../../../common/wpa_supplicant
\ No newline at end of file
. /opt/pakfire/lib/functions.sh
/usr/local/bin/backupctrl exclude >/dev/null 2>&1
-function add_to_backup ()
-{
- # Add path to ROOTFILES but remove old entries to prevent double
- # files in the tar
- grep -v "^$1" /opt/pakfire/tmp/ROOTFILES > /opt/pakfire/tmp/ROOTFILES.tmp
- mv /opt/pakfire/tmp/ROOTFILES.tmp /opt/pakfire/tmp/ROOTFILES
- echo $1 >> /opt/pakfire/tmp/ROOTFILES
+
+function find_device() {
+ local mountpoint="${1}"
+
+ local root
+ local dev mp fs flags rest
+ while read -r dev mp fs flags rest; do
+ # Skip unwanted entries
+ [ "${dev}" = "rootfs" ] && continue
+
+ if [ "${mp}" = "${mountpoint}" ] && [ -b "${dev}" ]; then
+ root="$(basename "${dev}")"
+ break
+ fi
+ done < /proc/mounts
+
+ # Get the actual device from the partition that holds /
+ while [ -n "${root}" ]; do
+ if [ -e "/sys/block/${root}" ]; then
+ echo "${root}"
+ return 0
+ fi
+
+ # Remove last character
+ root="${root::-1}"
+ done
+
+ return 1
}
+
#
# Remove old core updates from pakfire cache to save space...
-core=86
+core=87
for (( i=1; i<=${core}; i++ ))
do
rm -f /var/cache/pakfire/core-upgrade-*-$i.ipfire
#
KVER="xxxKVERxxx"
-#
-# check if we the backup file already exist
-if [ -e /var/ipfire/backup/core-upgrade${core}_${KVER}.tar.xz ]; then
- echo Moving backup to backup-old ...
- mv -f /var/ipfire/backup/core-upgrade${core}_${KVER}.tar.xz \
- /var/ipfire/backup/core-upgrade${core}_${KVER}-old.tar.xz
-fi
-echo First we made a backup of all files that was inside of the
-echo update archive. This may take a while ...
-# Add some files that are not in the package to backup
-add_to_backup lib/modules
-add_to_backup boot
-
-# Backup the files
-tar cJvf /var/ipfire/backup/core-upgrade${core}_${KVER}.tar.xz \
- -C / -T /opt/pakfire/tmp/ROOTFILES --exclude='#*' --exclude='/var/cache' > /dev/null 2>&1
-
# Check diskspace on root
ROOTSPACE=`df / -Pk | sed "s| * | |g" | cut -d" " -f4 | tail -n 1`
echo
echo Update Kernel to $KVER ...
#
-# Remove old kernel, configs, initrd, modules ...
+# Remove old kernel, configs, initrd, modules, dtb's ...
#
rm -rf /boot/System.map-*
rm -rf /boot/config-*
rm -rf /boot/vmlinuz-*
rm -rf /boot/uImage-ipfire-*
rm -rf /boot/uInit-ipfire-*
+rm -rf /boot/dtb-*-ipfire-*
rm -rf /lib/modules
case "$(uname -m)" in
i?86)
- # Backup grub.conf
- cp -vf /boot/grub/grub.conf /boot/grub-legacy.conf
+ # Backup old grub config
+ if [ -f /boot/grub/grub.conf ]; then
+ cp -vf /boot/grub/grub.conf /boot/old-grub-config
+ fi
+ if [ -f /boot/grub/menu.lst ]; then
+ cp -vf /boot/grub/menu.lst /boot/old-grub-config
+ fi
+ if [ -f /boot/grub/grub.cfg ]; then
+ cp -vf /boot/grub/grub.cfg /boot/old-grub-config
+ fi
# Remove all files that belong to GRUB-legacy
rm -rfv /boot/grub
;;
+ armv*)
+ # Backup uEnv.txt if exist
+ if [ -e /boot/uEnv.txt ]; then
+ cp -vf /boot/uEnv.txt /boot/uEnv.txt.org
+ fi
+
+ # work around the u-boot folder detection bug
+ mkdir -pv /boot/dtb-$KVER-ipfire-kirkwood
+ mkdir -pv /boot/dtb-$KVER-ipfire-multi
+ ;;
esac
+
#
#Stop services
/etc/init.d/snort stop
# Special handling for old kirkwood images.
# (install only kirkwood kernel)
rm -rf /boot/*
+ # work around the u-boot folder detection bug
+ mkdir -pv /boot/dtb-$KVER-ipfire-kirkwood
tar xavf /opt/pakfire/tmp/files* --no-overwrite-dir -p \
--numeric-owner -C / --wildcards 'boot/*-kirkwood*'
;;
case "$(uname -m)" in
i?86)
- #
- # Update to GRUB2
- #
- echo
- echo Update grub configuration ...
- if grep -qE "^serial" /boot/grub-legacy.conf; then
- sed -i /etc/default/grub \
- -e "s| panic=10 | console=ttyS0,115200n8 panic=10 |g"
- echo "GRUB_TERMINAL=\"serial\"" >> /etc/default/grub
- echo "GRUB_SERIAL_COMMAND=\"serial --unit=0 --speed=115200\"" >> /etc/default/grub
- fi
+ case "$(find_device "/")" in
+ xvd* )
+ echo Skip remove grub2 files, because pygrub fail.
+ rm -f /boot/grub/*
+ echo config will recreated by linux-pae install.
+ ;;
+ * )
+ #
+ # Update to GRUB2
+ #
+ echo
+ echo Update grub configuration ...
+ if grep -qE "^serial" /boot/old-grub-config; then
+ sed -i /etc/default/grub \
+ -e "s|panic=10|& console=ttyS0,115200n8|g"
+ echo "GRUB_TERMINAL=\"serial\"" >> /etc/default/grub
+ echo "GRUB_SERIAL_COMMAND=\"serial --unit=0 --speed=115200\"" >> /etc/default/grub
+ fi
- if ! /usr/local/bin/update-bootloader; then
- logger -p syslog.emerg -t ipfire \
- "Could not update the bootloader!"
- fi
- ;;
+ if ! /usr/local/bin/update-bootloader; then
+ logger -p syslog.emerg -t ipfire \
+ "Could not update the bootloader!"
+ fi
+ ;;
+ esac
esac
# Force (re)install pae kernel if pae is supported
fi
fi
-# Force reinstall xen kernel if it was installed
-if [ -e "/opt/pakfire/db/installed/meta-linux-xen" ]; then
- echo "Name: linux-xen" > /opt/pakfire/db/installed/meta-linux-xen
- echo "ProgVersion: 0" >> /opt/pakfire/db/installed/meta-linux-xen
- echo "Release: 0" >> /opt/pakfire/db/installed/meta-linux-xen
- echo "Name: linux-xen" > /opt/pakfire/db/meta/meta-linux-xen
- echo "ProgVersion: 0" >> /opt/pakfire/db/meta/meta-linux-xen
- echo "Release: 0" >> /opt/pakfire/db/meta/meta-linux-xen
- # Add xvc0 to /etc/securetty
- echo "xvc0" >> /etc/securetty
-fi
-
#
# After pakfire has ended run it again and update the lists and do upgrade
#
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 '/usr/bin/logger -p syslog.emerg -t ipfire "Core-upgrade finished. If you use a customized grub.cfg"' >> /tmp/pak_update
+echo '/usr/bin/logger -p syslog.emerg -t ipfire "Core-upgrade finished. If you use a customized grub/uboot config"' >> /tmp/pak_update
echo '/usr/bin/logger -p syslog.emerg -t ipfire "Check it before reboot !!!"' >> /tmp/pak_update
echo '/usr/bin/logger -p syslog.emerg -t ipfire " *** Please reboot... *** "' >> /tmp/pak_update
echo 'touch /var/run/need_reboot ' >> /tmp/pak_update
-usr/lib/libsrtp.so
etc/asterisk
etc/logrotate.d/asterisk
+etc/rc.d/init.d/asterisk
etc/rc.d/rc0.d/K30asterisk
etc/rc.d/rc3.d/S30asterisk
etc/rc.d/rc6.d/K30asterisk
#usr/include/asterisk/xml.h
#usr/include/asterisk/xmldoc.h
#usr/include/asterisk/xmpp.h
-#usr/include/srtp
-#usr/include/srtp/aes.h
-#usr/include/srtp/aes_cbc.h
-#usr/include/srtp/aes_icm.h
-#usr/include/srtp/alloc.h
-#usr/include/srtp/auth.h
-#usr/include/srtp/cipher.h
-#usr/include/srtp/config.h
-#usr/include/srtp/crypto.h
-#usr/include/srtp/crypto_kernel.h
-#usr/include/srtp/crypto_math.h
-#usr/include/srtp/crypto_types.h
-#usr/include/srtp/cryptoalg.h
-#usr/include/srtp/datatypes.h
-#usr/include/srtp/err.h
-#usr/include/srtp/gf2_8.h
-#usr/include/srtp/hmac.h
-#usr/include/srtp/integers.h
-#usr/include/srtp/kernel_compat.h
-#usr/include/srtp/key.h
-#usr/include/srtp/null_auth.h
-#usr/include/srtp/null_cipher.h
-#usr/include/srtp/prng.h
-#usr/include/srtp/rand_source.h
-#usr/include/srtp/rdb.h
-#usr/include/srtp/rdbx.h
-#usr/include/srtp/rtp.h
-#usr/include/srtp/sha1.h
-#usr/include/srtp/srtp.h
-#usr/include/srtp/stat.h
-#usr/include/srtp/ut_sim.h
-#usr/include/srtp/xfm.h
#usr/lib/asterisk
#usr/lib/asterisk/modules
usr/lib/asterisk/modules/app_adsiprog.so
usr/lib/asterisk/modules/format_h264.so
usr/lib/asterisk/modules/format_ilbc.so
usr/lib/asterisk/modules/format_jpeg.so
-#usr/lib/asterisk/modules/format_ogg_vorbis.so
usr/lib/asterisk/modules/format_pcm.so
usr/lib/asterisk/modules/format_siren14.so
usr/lib/asterisk/modules/format_siren7.so
usr/lib/asterisk/modules/res_crypto.so
usr/lib/asterisk/modules/res_curl.so
usr/lib/asterisk/modules/res_fax.so
-#usr/lib/asterisk/modules/res_fax_spandsp.so
usr/lib/asterisk/modules/res_format_attr_celt.so
usr/lib/asterisk/modules/res_format_attr_h263.so
usr/lib/asterisk/modules/res_format_attr_h264.so
usr/lib/asterisk/modules/res_timing_timerfd.so
usr/lib/libasteriskssl.so
usr/lib/libasteriskssl.so.1
-#usr/lib/libsrtp.a
#usr/lib/pkgconfig/asterisk.pc
usr/sbin/astcanary
usr/sbin/astdb2bdb
var/ipfire/asterisk/app_skel.conf
var/ipfire/asterisk/asterisk.adsi
var/ipfire/asterisk/asterisk.conf
-#var/ipfire/asterisk/asterisk.makeopts
+var/ipfire/asterisk/asterisk.logrotate
var/ipfire/asterisk/calendar.conf
var/ipfire/asterisk/ccss.conf
var/ipfire/asterisk/cdr.conf
var/lib/asterisk/sounds/en/.asterisk-extra-sounds-en-gsm-1.4.15
var/lib/asterisk/sounds/en/1-for-am-2-for-pm.gsm
var/lib/asterisk/sounds/en/1-yes-2-no.gsm
+#var/lib/asterisk/sounds/en/CHANGES-asterisk-core-en-1.4.26
+#var/lib/asterisk/sounds/en/CHANGES-asterisk-extra-en-1.4.15
+#var/lib/asterisk/sounds/en/CREDITS-asterisk-core-en-1.4.26
+#var/lib/asterisk/sounds/en/CREDITS-asterisk-extra-en-1.4.15
+#var/lib/asterisk/sounds/en/LICENSE-asterisk-core-en-1.4.26
+#var/lib/asterisk/sounds/en/LICENSE-asterisk-extra-en-1.4.15
var/lib/asterisk/sounds/en/OfficeSpace.gsm
var/lib/asterisk/sounds/en/Randulo-allison.gsm
var/lib/asterisk/sounds/en/SIP_Test_Failure.gsm
var/spool/asterisk/voicemail/default/1234/en
var/spool/asterisk/voicemail/default/1234/en/busy.gsm
var/spool/asterisk/voicemail/default/1234/en/unavail.gsm
-etc/rc.d/init.d/asterisk
#usr/lib/libclamav.la
usr/lib/libclamav.so
usr/lib/libclamav.so.6
-usr/lib/libclamav.so.6.1.22
+usr/lib/libclamav.so.6.1.26
#usr/lib/libclamunrar.la
usr/lib/libclamunrar.so
usr/lib/libclamunrar.so.6
-usr/lib/libclamunrar.so.6.1.22
+usr/lib/libclamunrar.so.6.1.26
#usr/lib/libclamunrar_iface.la
usr/lib/libclamunrar_iface.so
usr/lib/libclamunrar_iface.so.6
-usr/lib/libclamunrar_iface.so.6.1.22
+usr/lib/libclamunrar_iface.so.6.1.26
#usr/lib/pkgconfig/libclamav.pc
usr/sbin/clamd
usr/share/clamav
var/ipfire/clamav/clamd.conf.sample
var/ipfire/clamav/freshclam.conf
var/ipfire/clamav/freshclam.conf.sample
-#var/run/clamav
etc/rc.d/init.d/clamav
usr/local/bin/clamavctrl
--- /dev/null
+#etc/haproxy
+etc/haproxy/haproxy.cfg
+etc/rc.d/init.d/haproxy
+usr/sbin/haproxy
+#usr/sbin/haproxy-systemd-wrapper
+#usr/share/man/man1/haproxy.1
+var/ipfire/backup/addons/includes/haproxy
+var/lib/haproxy
--- /dev/null
+#usr/include/srtp
+#usr/include/srtp/aes.h
+#usr/include/srtp/aes_cbc.h
+#usr/include/srtp/aes_gcm_ossl.h
+#usr/include/srtp/aes_icm.h
+#usr/include/srtp/aes_icm_ossl.h
+#usr/include/srtp/alloc.h
+#usr/include/srtp/auth.h
+#usr/include/srtp/cipher.h
+#usr/include/srtp/config.h
+#usr/include/srtp/crypto.h
+#usr/include/srtp/crypto_kernel.h
+#usr/include/srtp/crypto_math.h
+#usr/include/srtp/crypto_types.h
+#usr/include/srtp/cryptoalg.h
+#usr/include/srtp/datatypes.h
+#usr/include/srtp/ekt.h
+#usr/include/srtp/err.h
+#usr/include/srtp/getopt_s.h
+#usr/include/srtp/gf2_8.h
+#usr/include/srtp/hmac.h
+#usr/include/srtp/integers.h
+#usr/include/srtp/kernel_compat.h
+#usr/include/srtp/key.h
+#usr/include/srtp/null_auth.h
+#usr/include/srtp/null_cipher.h
+#usr/include/srtp/prng.h
+#usr/include/srtp/rand_source.h
+#usr/include/srtp/rdb.h
+#usr/include/srtp/rdbx.h
+#usr/include/srtp/rtp.h
+#usr/include/srtp/rtp_priv.h
+#usr/include/srtp/sha1.h
+#usr/include/srtp/srtp.h
+#usr/include/srtp/srtp_priv.h
+#usr/include/srtp/stat.h
+#usr/include/srtp/ut_sim.h
+#usr/include/srtp/xfm.h
+usr/lib/libsrtp.so
+usr/lib/libsrtp.so.1
+#usr/lib/pkgconfig/libsrtp.pc
etc/monitrc
usr/bin/monit
#usr/share/man/man1/monit.1
+var/lib/monit
var/ipfire/backup/addons/includes/monit
etc/rc.d/init.d/monit
etc/rc.d/rc0.d/K40monit
#srv/web/owncloud/3rdparty/fontawesome/font/fontawesome-webfont.svg
#srv/web/owncloud/3rdparty/fontawesome/font/fontawesome-webfont.ttf
#srv/web/owncloud/3rdparty/fontawesome/font/fontawesome-webfont.woff
-#srv/web/owncloud/3rdparty/getid3
-#srv/web/owncloud/3rdparty/getid3/extension.cache.dbm.php
-#srv/web/owncloud/3rdparty/getid3/extension.cache.mysql.php
-#srv/web/owncloud/3rdparty/getid3/extension.cache.sqlite3.php
-#srv/web/owncloud/3rdparty/getid3/getid3.lib.php
-#srv/web/owncloud/3rdparty/getid3/getid3.php
-#srv/web/owncloud/3rdparty/getid3/license.txt
-#srv/web/owncloud/3rdparty/getid3/module.archive.gzip.php
-#srv/web/owncloud/3rdparty/getid3/module.archive.rar.php
-#srv/web/owncloud/3rdparty/getid3/module.archive.szip.php
-#srv/web/owncloud/3rdparty/getid3/module.archive.tar.php
-#srv/web/owncloud/3rdparty/getid3/module.archive.zip.php
-#srv/web/owncloud/3rdparty/getid3/module.audio-video.asf.php
-#srv/web/owncloud/3rdparty/getid3/module.audio-video.bink.php
-#srv/web/owncloud/3rdparty/getid3/module.audio-video.flv.php
-#srv/web/owncloud/3rdparty/getid3/module.audio-video.matroska.php
-#srv/web/owncloud/3rdparty/getid3/module.audio-video.mpeg.php
-#srv/web/owncloud/3rdparty/getid3/module.audio-video.nsv.php
-#srv/web/owncloud/3rdparty/getid3/module.audio-video.quicktime.php
-#srv/web/owncloud/3rdparty/getid3/module.audio-video.real.php
-#srv/web/owncloud/3rdparty/getid3/module.audio-video.riff.php
-#srv/web/owncloud/3rdparty/getid3/module.audio-video.swf.php
-#srv/web/owncloud/3rdparty/getid3/module.audio-video.ts.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.aa.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.aac.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.ac3.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.au.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.avr.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.bonk.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.dss.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.dts.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.flac.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.la.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.lpac.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.midi.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.mod.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.monkey.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.mp3.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.mpc.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.ogg.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.optimfrog.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.rkau.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.shorten.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.tta.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.voc.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.vqf.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.wavpack.php
-#srv/web/owncloud/3rdparty/getid3/module.graphic.bmp.php
-#srv/web/owncloud/3rdparty/getid3/module.graphic.efax.php
-#srv/web/owncloud/3rdparty/getid3/module.graphic.gif.php
-#srv/web/owncloud/3rdparty/getid3/module.graphic.jpg.php
-#srv/web/owncloud/3rdparty/getid3/module.graphic.pcd.php
-#srv/web/owncloud/3rdparty/getid3/module.graphic.png.php
-#srv/web/owncloud/3rdparty/getid3/module.graphic.svg.php
-#srv/web/owncloud/3rdparty/getid3/module.graphic.tiff.php
-#srv/web/owncloud/3rdparty/getid3/module.misc.cue.php
-#srv/web/owncloud/3rdparty/getid3/module.misc.exe.php
-#srv/web/owncloud/3rdparty/getid3/module.misc.iso.php
-#srv/web/owncloud/3rdparty/getid3/module.misc.msoffice.php
-#srv/web/owncloud/3rdparty/getid3/module.misc.par2.php
-#srv/web/owncloud/3rdparty/getid3/module.misc.pdf.php
-#srv/web/owncloud/3rdparty/getid3/module.tag.apetag.php
-#srv/web/owncloud/3rdparty/getid3/module.tag.id3v1.php
-#srv/web/owncloud/3rdparty/getid3/module.tag.id3v2.php
-#srv/web/owncloud/3rdparty/getid3/module.tag.lyrics3.php
-#srv/web/owncloud/3rdparty/getid3/module.tag.xmp.php
-#srv/web/owncloud/3rdparty/getid3/write.apetag.php
-#srv/web/owncloud/3rdparty/getid3/write.id3v1.php
-#srv/web/owncloud/3rdparty/getid3/write.id3v2.php
-#srv/web/owncloud/3rdparty/getid3/write.lyrics3.php
-#srv/web/owncloud/3rdparty/getid3/write.metaflac.php
-#srv/web/owncloud/3rdparty/getid3/write.php
-#srv/web/owncloud/3rdparty/getid3/write.real.php
-#srv/web/owncloud/3rdparty/getid3/write.vorbiscomment.php
#srv/web/owncloud/3rdparty/guzzle
#srv/web/owncloud/3rdparty/guzzle/common
#srv/web/owncloud/3rdparty/guzzle/common/Guzzle
#srv/web/owncloud/3rdparty/guzzle/stream/Guzzle/Stream/StreamInterface.php
#srv/web/owncloud/3rdparty/guzzle/stream/Guzzle/Stream/StreamRequestFactoryInterface.php
#srv/web/owncloud/3rdparty/guzzle/stream/Guzzle/Stream/composer.json
-#srv/web/owncloud/3rdparty/isoft
-#srv/web/owncloud/3rdparty/isoft/mssql-bundle
-#srv/web/owncloud/3rdparty/isoft/mssql-bundle/Realestate
-#srv/web/owncloud/3rdparty/isoft/mssql-bundle/Realestate/MssqlBundle
-#srv/web/owncloud/3rdparty/isoft/mssql-bundle/Realestate/MssqlBundle/Driver
-#srv/web/owncloud/3rdparty/isoft/mssql-bundle/Realestate/MssqlBundle/Driver/PDODblib
-#srv/web/owncloud/3rdparty/isoft/mssql-bundle/Realestate/MssqlBundle/Driver/PDODblib/Connection.php
-#srv/web/owncloud/3rdparty/isoft/mssql-bundle/Realestate/MssqlBundle/Driver/PDODblib/Driver.php
-#srv/web/owncloud/3rdparty/isoft/mssql-bundle/Realestate/MssqlBundle/Platforms
-#srv/web/owncloud/3rdparty/isoft/mssql-bundle/Realestate/MssqlBundle/Platforms/DblibPlatform.php
-#srv/web/owncloud/3rdparty/isoft/mssql-bundle/Realestate/MssqlBundle/Readme.md
-#srv/web/owncloud/3rdparty/isoft/mssql-bundle/Realestate/MssqlBundle/RealestateMssqlBundle.php
-#srv/web/owncloud/3rdparty/isoft/mssql-bundle/Realestate/MssqlBundle/Schema
-#srv/web/owncloud/3rdparty/isoft/mssql-bundle/Realestate/MssqlBundle/Schema/DblibSchemaManager.php
-#srv/web/owncloud/3rdparty/isoft/mssql-bundle/Realestate/MssqlBundle/Types
-#srv/web/owncloud/3rdparty/isoft/mssql-bundle/Realestate/MssqlBundle/Types/DateTimeType.php
-#srv/web/owncloud/3rdparty/isoft/mssql-bundle/Realestate/MssqlBundle/Types/DateType.php
-#srv/web/owncloud/3rdparty/isoft/mssql-bundle/Realestate/MssqlBundle/Types/RealestateDateTime.php
-#srv/web/owncloud/3rdparty/isoft/mssql-bundle/Realestate/MssqlBundle/Types/UniqueidentifierType.php
-#srv/web/owncloud/3rdparty/isoft/mssql-bundle/Realestate/MssqlBundle/composer.json
+#srv/web/owncloud/3rdparty/james-heinrich
+#srv/web/owncloud/3rdparty/james-heinrich/getid3
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/.gitattributes
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/README.md
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/changelog.txt
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/composer.json
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/dependencies.txt
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/extension.cache.dbm.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/extension.cache.mysql.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/extension.cache.sqlite3.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/getid3.lib.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/getid3.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.archive.gzip.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.archive.rar.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.archive.szip.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.archive.tar.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.archive.zip.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio-video.asf.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio-video.bink.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio-video.flv.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio-video.matroska.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio-video.mpeg.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio-video.nsv.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio-video.quicktime.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio-video.real.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio-video.riff.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio-video.swf.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio-video.ts.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.aa.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.aac.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.ac3.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.amr.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.au.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.avr.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.bonk.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.dss.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.dts.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.flac.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.la.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.lpac.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.midi.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.mod.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.monkey.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.mp3.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.mpc.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.ogg.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.optimfrog.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.rkau.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.shorten.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.tta.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.voc.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.vqf.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.wavpack.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.graphic.bmp.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.graphic.efax.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.graphic.gif.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.graphic.jpg.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.graphic.pcd.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.graphic.png.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.graphic.svg.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.graphic.tiff.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.misc.cue.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.misc.exe.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.misc.iso.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.misc.msoffice.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.misc.par2.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.misc.pdf.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.tag.apetag.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.tag.id3v1.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.tag.id3v2.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.tag.lyrics3.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.tag.xmp.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/write.apetag.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/write.id3v1.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/write.id3v2.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/write.lyrics3.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/write.metaflac.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/write.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/write.real.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/write.vorbiscomment.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/license.txt
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/licenses
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/licenses/licence.gpl-10.txt
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/licenses/licence.gpl-20.txt
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/licenses/licence.gpl-30.txt
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/licenses/licence.lgpl-30.txt
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/licenses/licence.mpl-20.txt
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/licenses/license.commercial.txt
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/readme.txt
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/structure.txt
#srv/web/owncloud/3rdparty/js
#srv/web/owncloud/3rdparty/js/chosen
#srv/web/owncloud/3rdparty/js/chosen/LICENSE.md
#srv/web/owncloud/3rdparty/patches.txt
#srv/web/owncloud/3rdparty/phpass
#srv/web/owncloud/3rdparty/phpass/PasswordHash.php
-#srv/web/owncloud/3rdparty/phpass/c
-#srv/web/owncloud/3rdparty/phpass/c/Makefile
-#srv/web/owncloud/3rdparty/phpass/c/crypt_private.c
#srv/web/owncloud/3rdparty/phpass/test.php
#srv/web/owncloud/3rdparty/phpmailer
#srv/web/owncloud/3rdparty/phpmailer/phpmailer
#srv/web/owncloud/apps/activity/l10n/hy.php
#srv/web/owncloud/apps/activity/l10n/ia.php
#srv/web/owncloud/apps/activity/l10n/id.php
+#srv/web/owncloud/apps/activity/l10n/io.php
#srv/web/owncloud/apps/activity/l10n/is.php
#srv/web/owncloud/apps/activity/l10n/it.php
#srv/web/owncloud/apps/activity/l10n/ja.php
-#srv/web/owncloud/apps/activity/l10n/ja_JP.php
#srv/web/owncloud/apps/activity/l10n/jv.php
#srv/web/owncloud/apps/activity/l10n/ka_GE.php
#srv/web/owncloud/apps/activity/l10n/km.php
#srv/web/owncloud/apps/activity/l10n/kn.php
#srv/web/owncloud/apps/activity/l10n/ko.php
#srv/web/owncloud/apps/activity/l10n/ku_IQ.php
-#srv/web/owncloud/apps/activity/l10n/l10n.pl
#srv/web/owncloud/apps/activity/l10n/lb.php
#srv/web/owncloud/apps/activity/l10n/lt_LT.php
#srv/web/owncloud/apps/activity/l10n/lv.php
#srv/web/owncloud/apps/activity/tests/hooksdeleteusertest.php
#srv/web/owncloud/apps/activity/tests/mailqueuehandlertest.php
#srv/web/owncloud/apps/activity/tests/navigationtest.php
+#srv/web/owncloud/apps/activity/tests/parameterhelpertest.php
#srv/web/owncloud/apps/activity/tests/phpunit.xml
#srv/web/owncloud/apps/activity/tests/usersettingstest.php
#srv/web/owncloud/apps/admin_dependencies_chk
#srv/web/owncloud/apps/bookmarks/js/full_tags.php
#srv/web/owncloud/apps/bookmarks/js/settings.js
#srv/web/owncloud/apps/bookmarks/l10n
-#srv/web/owncloud/apps/bookmarks/l10n/ach
-#srv/web/owncloud/apps/bookmarks/l10n/ach/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ady
-#srv/web/owncloud/apps/bookmarks/l10n/ady/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/af
-#srv/web/owncloud/apps/bookmarks/l10n/af/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/af_ZA
#srv/web/owncloud/apps/bookmarks/l10n/af_ZA.php
-#srv/web/owncloud/apps/bookmarks/l10n/af_ZA/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ak
-#srv/web/owncloud/apps/bookmarks/l10n/ak/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/am_ET
-#srv/web/owncloud/apps/bookmarks/l10n/am_ET/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ar
+#srv/web/owncloud/apps/bookmarks/l10n/ar.js
+#srv/web/owncloud/apps/bookmarks/l10n/ar.json
#srv/web/owncloud/apps/bookmarks/l10n/ar.php
-#srv/web/owncloud/apps/bookmarks/l10n/ar/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ast
+#srv/web/owncloud/apps/bookmarks/l10n/ast.js
+#srv/web/owncloud/apps/bookmarks/l10n/ast.json
#srv/web/owncloud/apps/bookmarks/l10n/ast.php
-#srv/web/owncloud/apps/bookmarks/l10n/ast/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/az
-#srv/web/owncloud/apps/bookmarks/l10n/az/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/be
+#srv/web/owncloud/apps/bookmarks/l10n/az.js
+#srv/web/owncloud/apps/bookmarks/l10n/az.json
+#srv/web/owncloud/apps/bookmarks/l10n/az.php
#srv/web/owncloud/apps/bookmarks/l10n/be.php
-#srv/web/owncloud/apps/bookmarks/l10n/be/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/bg_BG
+#srv/web/owncloud/apps/bookmarks/l10n/bg_BG.js
+#srv/web/owncloud/apps/bookmarks/l10n/bg_BG.json
#srv/web/owncloud/apps/bookmarks/l10n/bg_BG.php
-#srv/web/owncloud/apps/bookmarks/l10n/bg_BG/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/bn_BD
+#srv/web/owncloud/apps/bookmarks/l10n/bn_BD.js
+#srv/web/owncloud/apps/bookmarks/l10n/bn_BD.json
#srv/web/owncloud/apps/bookmarks/l10n/bn_BD.php
-#srv/web/owncloud/apps/bookmarks/l10n/bn_BD/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/bn_IN
-#srv/web/owncloud/apps/bookmarks/l10n/bn_IN/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/bs
+#srv/web/owncloud/apps/bookmarks/l10n/bn_IN.js
+#srv/web/owncloud/apps/bookmarks/l10n/bn_IN.json
+#srv/web/owncloud/apps/bookmarks/l10n/bn_IN.php
#srv/web/owncloud/apps/bookmarks/l10n/bs.php
-#srv/web/owncloud/apps/bookmarks/l10n/bs/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ca
+#srv/web/owncloud/apps/bookmarks/l10n/ca.js
+#srv/web/owncloud/apps/bookmarks/l10n/ca.json
#srv/web/owncloud/apps/bookmarks/l10n/ca.php
-#srv/web/owncloud/apps/bookmarks/l10n/ca/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ca@valencia
-#srv/web/owncloud/apps/bookmarks/l10n/ca@valencia/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/cs_CZ
+#srv/web/owncloud/apps/bookmarks/l10n/cs_CZ.js
+#srv/web/owncloud/apps/bookmarks/l10n/cs_CZ.json
#srv/web/owncloud/apps/bookmarks/l10n/cs_CZ.php
-#srv/web/owncloud/apps/bookmarks/l10n/cs_CZ/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/cy_GB
+#srv/web/owncloud/apps/bookmarks/l10n/cy_GB.js
+#srv/web/owncloud/apps/bookmarks/l10n/cy_GB.json
#srv/web/owncloud/apps/bookmarks/l10n/cy_GB.php
-#srv/web/owncloud/apps/bookmarks/l10n/cy_GB/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/da
+#srv/web/owncloud/apps/bookmarks/l10n/da.js
+#srv/web/owncloud/apps/bookmarks/l10n/da.json
#srv/web/owncloud/apps/bookmarks/l10n/da.php
-#srv/web/owncloud/apps/bookmarks/l10n/da/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/de
+#srv/web/owncloud/apps/bookmarks/l10n/de.js
+#srv/web/owncloud/apps/bookmarks/l10n/de.json
#srv/web/owncloud/apps/bookmarks/l10n/de.php
-#srv/web/owncloud/apps/bookmarks/l10n/de/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/de_AT
#srv/web/owncloud/apps/bookmarks/l10n/de_AT.php
-#srv/web/owncloud/apps/bookmarks/l10n/de_AT/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/de_CH
+#srv/web/owncloud/apps/bookmarks/l10n/de_CH.js
+#srv/web/owncloud/apps/bookmarks/l10n/de_CH.json
#srv/web/owncloud/apps/bookmarks/l10n/de_CH.php
-#srv/web/owncloud/apps/bookmarks/l10n/de_CH/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/de_DE
+#srv/web/owncloud/apps/bookmarks/l10n/de_DE.js
+#srv/web/owncloud/apps/bookmarks/l10n/de_DE.json
#srv/web/owncloud/apps/bookmarks/l10n/de_DE.php
-#srv/web/owncloud/apps/bookmarks/l10n/de_DE/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/el
+#srv/web/owncloud/apps/bookmarks/l10n/el.js
+#srv/web/owncloud/apps/bookmarks/l10n/el.json
#srv/web/owncloud/apps/bookmarks/l10n/el.php
-#srv/web/owncloud/apps/bookmarks/l10n/el/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/en@pirate
-#srv/web/owncloud/apps/bookmarks/l10n/en@pirate/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/en_GB
+#srv/web/owncloud/apps/bookmarks/l10n/en_GB.js
+#srv/web/owncloud/apps/bookmarks/l10n/en_GB.json
#srv/web/owncloud/apps/bookmarks/l10n/en_GB.php
-#srv/web/owncloud/apps/bookmarks/l10n/en_GB/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/en_NZ
-#srv/web/owncloud/apps/bookmarks/l10n/en_NZ/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/eo
+#srv/web/owncloud/apps/bookmarks/l10n/eo.js
+#srv/web/owncloud/apps/bookmarks/l10n/eo.json
#srv/web/owncloud/apps/bookmarks/l10n/eo.php
-#srv/web/owncloud/apps/bookmarks/l10n/eo/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/es
+#srv/web/owncloud/apps/bookmarks/l10n/es.js
+#srv/web/owncloud/apps/bookmarks/l10n/es.json
#srv/web/owncloud/apps/bookmarks/l10n/es.php
-#srv/web/owncloud/apps/bookmarks/l10n/es/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/es_AR
+#srv/web/owncloud/apps/bookmarks/l10n/es_AR.js
+#srv/web/owncloud/apps/bookmarks/l10n/es_AR.json
#srv/web/owncloud/apps/bookmarks/l10n/es_AR.php
-#srv/web/owncloud/apps/bookmarks/l10n/es_AR/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/es_BO
-#srv/web/owncloud/apps/bookmarks/l10n/es_BO/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/es_CL
#srv/web/owncloud/apps/bookmarks/l10n/es_CL.php
-#srv/web/owncloud/apps/bookmarks/l10n/es_CL/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/es_CO
-#srv/web/owncloud/apps/bookmarks/l10n/es_CO/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/es_CR
-#srv/web/owncloud/apps/bookmarks/l10n/es_CR/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/es_EC
-#srv/web/owncloud/apps/bookmarks/l10n/es_EC/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/es_MX
+#srv/web/owncloud/apps/bookmarks/l10n/es_MX.js
+#srv/web/owncloud/apps/bookmarks/l10n/es_MX.json
#srv/web/owncloud/apps/bookmarks/l10n/es_MX.php
-#srv/web/owncloud/apps/bookmarks/l10n/es_MX/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/es_PE
-#srv/web/owncloud/apps/bookmarks/l10n/es_PE/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/es_PY
-#srv/web/owncloud/apps/bookmarks/l10n/es_PY/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/es_US
-#srv/web/owncloud/apps/bookmarks/l10n/es_US/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/es_UY
-#srv/web/owncloud/apps/bookmarks/l10n/es_UY/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/et_EE
+#srv/web/owncloud/apps/bookmarks/l10n/et_EE.js
+#srv/web/owncloud/apps/bookmarks/l10n/et_EE.json
#srv/web/owncloud/apps/bookmarks/l10n/et_EE.php
-#srv/web/owncloud/apps/bookmarks/l10n/et_EE/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/eu
+#srv/web/owncloud/apps/bookmarks/l10n/eu.js
+#srv/web/owncloud/apps/bookmarks/l10n/eu.json
#srv/web/owncloud/apps/bookmarks/l10n/eu.php
-#srv/web/owncloud/apps/bookmarks/l10n/eu/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/eu_ES
#srv/web/owncloud/apps/bookmarks/l10n/eu_ES.php
-#srv/web/owncloud/apps/bookmarks/l10n/eu_ES/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/fa
+#srv/web/owncloud/apps/bookmarks/l10n/fa.js
+#srv/web/owncloud/apps/bookmarks/l10n/fa.json
#srv/web/owncloud/apps/bookmarks/l10n/fa.php
-#srv/web/owncloud/apps/bookmarks/l10n/fa/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/fi
#srv/web/owncloud/apps/bookmarks/l10n/fi.php
-#srv/web/owncloud/apps/bookmarks/l10n/fi/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/fi_FI
+#srv/web/owncloud/apps/bookmarks/l10n/fi_FI.js
+#srv/web/owncloud/apps/bookmarks/l10n/fi_FI.json
#srv/web/owncloud/apps/bookmarks/l10n/fi_FI.php
-#srv/web/owncloud/apps/bookmarks/l10n/fi_FI/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/fr
+#srv/web/owncloud/apps/bookmarks/l10n/fr.js
+#srv/web/owncloud/apps/bookmarks/l10n/fr.json
#srv/web/owncloud/apps/bookmarks/l10n/fr.php
-#srv/web/owncloud/apps/bookmarks/l10n/fr/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/fr_CA
-#srv/web/owncloud/apps/bookmarks/l10n/fr_CA/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/gl
+#srv/web/owncloud/apps/bookmarks/l10n/gl.js
+#srv/web/owncloud/apps/bookmarks/l10n/gl.json
#srv/web/owncloud/apps/bookmarks/l10n/gl.php
-#srv/web/owncloud/apps/bookmarks/l10n/gl/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/he
+#srv/web/owncloud/apps/bookmarks/l10n/he.js
+#srv/web/owncloud/apps/bookmarks/l10n/he.json
#srv/web/owncloud/apps/bookmarks/l10n/he.php
-#srv/web/owncloud/apps/bookmarks/l10n/he/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/hi
#srv/web/owncloud/apps/bookmarks/l10n/hi.php
-#srv/web/owncloud/apps/bookmarks/l10n/hi/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/hi_IN
-#srv/web/owncloud/apps/bookmarks/l10n/hi_IN/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/hr
#srv/web/owncloud/apps/bookmarks/l10n/hr.php
-#srv/web/owncloud/apps/bookmarks/l10n/hr/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/hu_HU
+#srv/web/owncloud/apps/bookmarks/l10n/hu_HU.js
+#srv/web/owncloud/apps/bookmarks/l10n/hu_HU.json
#srv/web/owncloud/apps/bookmarks/l10n/hu_HU.php
-#srv/web/owncloud/apps/bookmarks/l10n/hu_HU/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/hy
#srv/web/owncloud/apps/bookmarks/l10n/hy.php
-#srv/web/owncloud/apps/bookmarks/l10n/hy/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ia
+#srv/web/owncloud/apps/bookmarks/l10n/ia.js
+#srv/web/owncloud/apps/bookmarks/l10n/ia.json
#srv/web/owncloud/apps/bookmarks/l10n/ia.php
-#srv/web/owncloud/apps/bookmarks/l10n/ia/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/id
+#srv/web/owncloud/apps/bookmarks/l10n/id.js
+#srv/web/owncloud/apps/bookmarks/l10n/id.json
#srv/web/owncloud/apps/bookmarks/l10n/id.php
-#srv/web/owncloud/apps/bookmarks/l10n/id/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/is
+#srv/web/owncloud/apps/bookmarks/l10n/is.js
+#srv/web/owncloud/apps/bookmarks/l10n/is.json
#srv/web/owncloud/apps/bookmarks/l10n/is.php
-#srv/web/owncloud/apps/bookmarks/l10n/is/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/it
+#srv/web/owncloud/apps/bookmarks/l10n/it.js
+#srv/web/owncloud/apps/bookmarks/l10n/it.json
#srv/web/owncloud/apps/bookmarks/l10n/it.php
-#srv/web/owncloud/apps/bookmarks/l10n/it/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ja
+#srv/web/owncloud/apps/bookmarks/l10n/ja.js
+#srv/web/owncloud/apps/bookmarks/l10n/ja.json
#srv/web/owncloud/apps/bookmarks/l10n/ja.php
-#srv/web/owncloud/apps/bookmarks/l10n/ja/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ja_JP.php
-#srv/web/owncloud/apps/bookmarks/l10n/jv
#srv/web/owncloud/apps/bookmarks/l10n/jv.php
-#srv/web/owncloud/apps/bookmarks/l10n/jv/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ka
-#srv/web/owncloud/apps/bookmarks/l10n/ka/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ka_GE
+#srv/web/owncloud/apps/bookmarks/l10n/ka_GE.js
+#srv/web/owncloud/apps/bookmarks/l10n/ka_GE.json
#srv/web/owncloud/apps/bookmarks/l10n/ka_GE.php
-#srv/web/owncloud/apps/bookmarks/l10n/ka_GE/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/km
+#srv/web/owncloud/apps/bookmarks/l10n/km.js
+#srv/web/owncloud/apps/bookmarks/l10n/km.json
#srv/web/owncloud/apps/bookmarks/l10n/km.php
-#srv/web/owncloud/apps/bookmarks/l10n/km/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/kn
-#srv/web/owncloud/apps/bookmarks/l10n/kn/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ko
+#srv/web/owncloud/apps/bookmarks/l10n/ko.js
+#srv/web/owncloud/apps/bookmarks/l10n/ko.json
#srv/web/owncloud/apps/bookmarks/l10n/ko.php
-#srv/web/owncloud/apps/bookmarks/l10n/ko/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ku_IQ
#srv/web/owncloud/apps/bookmarks/l10n/ku_IQ.php
-#srv/web/owncloud/apps/bookmarks/l10n/ku_IQ/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/l10n.pl
-#srv/web/owncloud/apps/bookmarks/l10n/lb
+#srv/web/owncloud/apps/bookmarks/l10n/lb.js
+#srv/web/owncloud/apps/bookmarks/l10n/lb.json
#srv/web/owncloud/apps/bookmarks/l10n/lb.php
-#srv/web/owncloud/apps/bookmarks/l10n/lb/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/lt_LT
+#srv/web/owncloud/apps/bookmarks/l10n/lt_LT.js
+#srv/web/owncloud/apps/bookmarks/l10n/lt_LT.json
#srv/web/owncloud/apps/bookmarks/l10n/lt_LT.php
-#srv/web/owncloud/apps/bookmarks/l10n/lt_LT/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/lv
+#srv/web/owncloud/apps/bookmarks/l10n/lv.js
+#srv/web/owncloud/apps/bookmarks/l10n/lv.json
#srv/web/owncloud/apps/bookmarks/l10n/lv.php
-#srv/web/owncloud/apps/bookmarks/l10n/lv/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/mk
+#srv/web/owncloud/apps/bookmarks/l10n/mk.js
+#srv/web/owncloud/apps/bookmarks/l10n/mk.json
#srv/web/owncloud/apps/bookmarks/l10n/mk.php
-#srv/web/owncloud/apps/bookmarks/l10n/mk/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ml
-#srv/web/owncloud/apps/bookmarks/l10n/ml/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ml_IN
-#srv/web/owncloud/apps/bookmarks/l10n/ml_IN/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/mn
-#srv/web/owncloud/apps/bookmarks/l10n/mn/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ms_MY
#srv/web/owncloud/apps/bookmarks/l10n/ms_MY.php
-#srv/web/owncloud/apps/bookmarks/l10n/ms_MY/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/my_MM
#srv/web/owncloud/apps/bookmarks/l10n/my_MM.php
-#srv/web/owncloud/apps/bookmarks/l10n/my_MM/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/nb_NO
+#srv/web/owncloud/apps/bookmarks/l10n/nb_NO.js
+#srv/web/owncloud/apps/bookmarks/l10n/nb_NO.json
#srv/web/owncloud/apps/bookmarks/l10n/nb_NO.php
-#srv/web/owncloud/apps/bookmarks/l10n/nb_NO/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/nds
-#srv/web/owncloud/apps/bookmarks/l10n/nds/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ne
-#srv/web/owncloud/apps/bookmarks/l10n/ne/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/nl
+#srv/web/owncloud/apps/bookmarks/l10n/nl.js
+#srv/web/owncloud/apps/bookmarks/l10n/nl.json
#srv/web/owncloud/apps/bookmarks/l10n/nl.php
-#srv/web/owncloud/apps/bookmarks/l10n/nl/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/nn_NO
+#srv/web/owncloud/apps/bookmarks/l10n/nn_NO.js
+#srv/web/owncloud/apps/bookmarks/l10n/nn_NO.json
#srv/web/owncloud/apps/bookmarks/l10n/nn_NO.php
-#srv/web/owncloud/apps/bookmarks/l10n/nn_NO/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/nqo
-#srv/web/owncloud/apps/bookmarks/l10n/nqo/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/oc
#srv/web/owncloud/apps/bookmarks/l10n/oc.php
-#srv/web/owncloud/apps/bookmarks/l10n/oc/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/or_IN
-#srv/web/owncloud/apps/bookmarks/l10n/or_IN/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/pa
#srv/web/owncloud/apps/bookmarks/l10n/pa.php
-#srv/web/owncloud/apps/bookmarks/l10n/pa/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/pl
+#srv/web/owncloud/apps/bookmarks/l10n/pl.js
+#srv/web/owncloud/apps/bookmarks/l10n/pl.json
#srv/web/owncloud/apps/bookmarks/l10n/pl.php
-#srv/web/owncloud/apps/bookmarks/l10n/pl/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/pl_PL
#srv/web/owncloud/apps/bookmarks/l10n/pl_PL.php
-#srv/web/owncloud/apps/bookmarks/l10n/pl_PL/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/pt_BR
+#srv/web/owncloud/apps/bookmarks/l10n/pt_BR.js
+#srv/web/owncloud/apps/bookmarks/l10n/pt_BR.json
#srv/web/owncloud/apps/bookmarks/l10n/pt_BR.php
-#srv/web/owncloud/apps/bookmarks/l10n/pt_BR/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/pt_PT
+#srv/web/owncloud/apps/bookmarks/l10n/pt_PT.js
+#srv/web/owncloud/apps/bookmarks/l10n/pt_PT.json
#srv/web/owncloud/apps/bookmarks/l10n/pt_PT.php
-#srv/web/owncloud/apps/bookmarks/l10n/pt_PT/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ro
+#srv/web/owncloud/apps/bookmarks/l10n/ro.js
+#srv/web/owncloud/apps/bookmarks/l10n/ro.json
#srv/web/owncloud/apps/bookmarks/l10n/ro.php
-#srv/web/owncloud/apps/bookmarks/l10n/ro/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ru
+#srv/web/owncloud/apps/bookmarks/l10n/ru.js
+#srv/web/owncloud/apps/bookmarks/l10n/ru.json
#srv/web/owncloud/apps/bookmarks/l10n/ru.php
-#srv/web/owncloud/apps/bookmarks/l10n/ru/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ru_RU
#srv/web/owncloud/apps/bookmarks/l10n/ru_RU.php
-#srv/web/owncloud/apps/bookmarks/l10n/ru_RU/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/si_LK
+#srv/web/owncloud/apps/bookmarks/l10n/si_LK.js
+#srv/web/owncloud/apps/bookmarks/l10n/si_LK.json
#srv/web/owncloud/apps/bookmarks/l10n/si_LK.php
-#srv/web/owncloud/apps/bookmarks/l10n/si_LK/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/sk
#srv/web/owncloud/apps/bookmarks/l10n/sk.php
-#srv/web/owncloud/apps/bookmarks/l10n/sk/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/sk_SK
+#srv/web/owncloud/apps/bookmarks/l10n/sk_SK.js
+#srv/web/owncloud/apps/bookmarks/l10n/sk_SK.json
#srv/web/owncloud/apps/bookmarks/l10n/sk_SK.php
-#srv/web/owncloud/apps/bookmarks/l10n/sk_SK/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/sl
+#srv/web/owncloud/apps/bookmarks/l10n/sl.js
+#srv/web/owncloud/apps/bookmarks/l10n/sl.json
#srv/web/owncloud/apps/bookmarks/l10n/sl.php
-#srv/web/owncloud/apps/bookmarks/l10n/sl/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/sq
#srv/web/owncloud/apps/bookmarks/l10n/sq.php
-#srv/web/owncloud/apps/bookmarks/l10n/sq/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/sr
+#srv/web/owncloud/apps/bookmarks/l10n/sr.js
+#srv/web/owncloud/apps/bookmarks/l10n/sr.json
#srv/web/owncloud/apps/bookmarks/l10n/sr.php
-#srv/web/owncloud/apps/bookmarks/l10n/sr/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/sr@latin
#srv/web/owncloud/apps/bookmarks/l10n/sr@latin.php
-#srv/web/owncloud/apps/bookmarks/l10n/sr@latin/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/su
-#srv/web/owncloud/apps/bookmarks/l10n/su/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/sv
+#srv/web/owncloud/apps/bookmarks/l10n/sv.js
+#srv/web/owncloud/apps/bookmarks/l10n/sv.json
#srv/web/owncloud/apps/bookmarks/l10n/sv.php
-#srv/web/owncloud/apps/bookmarks/l10n/sv/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/sw_KE
-#srv/web/owncloud/apps/bookmarks/l10n/sw_KE/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ta_IN
-#srv/web/owncloud/apps/bookmarks/l10n/ta_IN/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ta_LK
+#srv/web/owncloud/apps/bookmarks/l10n/ta_IN.php
+#srv/web/owncloud/apps/bookmarks/l10n/ta_LK.js
+#srv/web/owncloud/apps/bookmarks/l10n/ta_LK.json
#srv/web/owncloud/apps/bookmarks/l10n/ta_LK.php
-#srv/web/owncloud/apps/bookmarks/l10n/ta_LK/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/te
#srv/web/owncloud/apps/bookmarks/l10n/te.php
-#srv/web/owncloud/apps/bookmarks/l10n/te/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/templates
-#srv/web/owncloud/apps/bookmarks/l10n/templates/bookmarks.pot
-#srv/web/owncloud/apps/bookmarks/l10n/th_TH
+#srv/web/owncloud/apps/bookmarks/l10n/th_TH.js
+#srv/web/owncloud/apps/bookmarks/l10n/th_TH.json
#srv/web/owncloud/apps/bookmarks/l10n/th_TH.php
-#srv/web/owncloud/apps/bookmarks/l10n/th_TH/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/tr
+#srv/web/owncloud/apps/bookmarks/l10n/tr.js
+#srv/web/owncloud/apps/bookmarks/l10n/tr.json
#srv/web/owncloud/apps/bookmarks/l10n/tr.php
-#srv/web/owncloud/apps/bookmarks/l10n/tr/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/tzm
-#srv/web/owncloud/apps/bookmarks/l10n/tzm/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ug
+#srv/web/owncloud/apps/bookmarks/l10n/ug.js
+#srv/web/owncloud/apps/bookmarks/l10n/ug.json
#srv/web/owncloud/apps/bookmarks/l10n/ug.php
-#srv/web/owncloud/apps/bookmarks/l10n/ug/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/uk
+#srv/web/owncloud/apps/bookmarks/l10n/uk.js
+#srv/web/owncloud/apps/bookmarks/l10n/uk.json
#srv/web/owncloud/apps/bookmarks/l10n/uk.php
-#srv/web/owncloud/apps/bookmarks/l10n/uk/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ur
-#srv/web/owncloud/apps/bookmarks/l10n/ur/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ur_PK
#srv/web/owncloud/apps/bookmarks/l10n/ur_PK.php
-#srv/web/owncloud/apps/bookmarks/l10n/ur_PK/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/uz
-#srv/web/owncloud/apps/bookmarks/l10n/uz/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/vi
+#srv/web/owncloud/apps/bookmarks/l10n/vi.js
+#srv/web/owncloud/apps/bookmarks/l10n/vi.json
#srv/web/owncloud/apps/bookmarks/l10n/vi.php
-#srv/web/owncloud/apps/bookmarks/l10n/vi/bookmarks.po
#srv/web/owncloud/apps/bookmarks/l10n/xgettextfiles
-#srv/web/owncloud/apps/bookmarks/l10n/zh_CN
-#srv/web/owncloud/apps/bookmarks/l10n/zh_CN.GB2312
-#srv/web/owncloud/apps/bookmarks/l10n/zh_CN.GB2312.php
-#srv/web/owncloud/apps/bookmarks/l10n/zh_CN.GB2312/bookmarks.po
+#srv/web/owncloud/apps/bookmarks/l10n/zh_CN.js
+#srv/web/owncloud/apps/bookmarks/l10n/zh_CN.json
#srv/web/owncloud/apps/bookmarks/l10n/zh_CN.php
-#srv/web/owncloud/apps/bookmarks/l10n/zh_CN/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/zh_HK
#srv/web/owncloud/apps/bookmarks/l10n/zh_HK.php
-#srv/web/owncloud/apps/bookmarks/l10n/zh_HK/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/zh_TW
+#srv/web/owncloud/apps/bookmarks/l10n/zh_TW.js
+#srv/web/owncloud/apps/bookmarks/l10n/zh_TW.json
#srv/web/owncloud/apps/bookmarks/l10n/zh_TW.php
-#srv/web/owncloud/apps/bookmarks/l10n/zh_TW/bookmarks.po
#srv/web/owncloud/apps/bookmarks/lib
#srv/web/owncloud/apps/bookmarks/lib/bookmarks.php
#srv/web/owncloud/apps/bookmarks/lib/search.php
#srv/web/owncloud/apps/bookmarks/templates/list.php
#srv/web/owncloud/apps/bookmarks/templates/settings.php
#srv/web/owncloud/apps/bookmarks/tests
-#srv/web/owncloud/apps/bookmarks/tests/lib_bookmark.php
+#srv/web/owncloud/apps/bookmarks/tests/bootstrap.php
+#srv/web/owncloud/apps/bookmarks/tests/lib_bookmark_test.php
+#srv/web/owncloud/apps/bookmarks/tests/phpunit.xml
#srv/web/owncloud/apps/calendar
#srv/web/owncloud/apps/calendar/3rdparty
#srv/web/owncloud/apps/calendar/3rdparty/fullcalendar
#srv/web/owncloud/apps/contacts/lib/jsonresponse.php
#srv/web/owncloud/apps/contacts/lib/middleware
#srv/web/owncloud/apps/contacts/lib/middleware/http.php
-#srv/web/owncloud/apps/contacts/lib/searchprovider.php
+#srv/web/owncloud/apps/contacts/lib/search
+#srv/web/owncloud/apps/contacts/lib/search/contact.php
+#srv/web/owncloud/apps/contacts/lib/search/provider.php
#srv/web/owncloud/apps/contacts/lib/share
#srv/web/owncloud/apps/contacts/lib/share/addressbook.php
#srv/web/owncloud/apps/contacts/lib/share/contact.php
#srv/web/owncloud/apps/files_external/ajax
#srv/web/owncloud/apps/files_external/ajax/addMountPoint.php
#srv/web/owncloud/apps/files_external/ajax/addRootCertificate.php
+#srv/web/owncloud/apps/files_external/ajax/applicable.php
#srv/web/owncloud/apps/files_external/ajax/dropbox.php
#srv/web/owncloud/apps/files_external/ajax/google.php
#srv/web/owncloud/apps/files_external/ajax/removeMountPoint.php
#srv/web/owncloud/apps/files_external/lib/api.php
#srv/web/owncloud/apps/files_external/lib/config.php
#srv/web/owncloud/apps/files_external/lib/dropbox.php
+#srv/web/owncloud/apps/files_external/lib/etagpropagator.php
#srv/web/owncloud/apps/files_external/lib/ftp.php
#srv/web/owncloud/apps/files_external/lib/google.php
#srv/web/owncloud/apps/files_external/lib/owncloud.php
#srv/web/owncloud/apps/files_external/templates/settings.php
#srv/web/owncloud/apps/files_external/tests
#srv/web/owncloud/apps/files_external/tests/amazons3.php
+#srv/web/owncloud/apps/files_external/tests/amazons3migration.php
#srv/web/owncloud/apps/files_external/tests/appSpec.js
#srv/web/owncloud/apps/files_external/tests/config.php
#srv/web/owncloud/apps/files_external/tests/dropbox.php
#srv/web/owncloud/apps/files_external/tests/dynamicmountconfig.php
+#srv/web/owncloud/apps/files_external/tests/etagpropagator.php
#srv/web/owncloud/apps/files_external/tests/ftp.php
#srv/web/owncloud/apps/files_external/tests/google.php
#srv/web/owncloud/apps/files_external/tests/js
#srv/web/owncloud/apps/files_external/tests/js/mountsfilelistSpec.js
#srv/web/owncloud/apps/files_external/tests/mountconfig.php
#srv/web/owncloud/apps/files_external/tests/owncloud.php
+#srv/web/owncloud/apps/files_external/tests/owncloudfunctions.php
#srv/web/owncloud/apps/files_external/tests/sftp.php
#srv/web/owncloud/apps/files_external/tests/smb.php
#srv/web/owncloud/apps/files_external/tests/smbfunctions.php
#srv/web/owncloud/apps/files_sharing/lib/cache.php
#srv/web/owncloud/apps/files_sharing/lib/connector
#srv/web/owncloud/apps/files_sharing/lib/connector/publicauth.php
+#srv/web/owncloud/apps/files_sharing/lib/exceptions.php
#srv/web/owncloud/apps/files_sharing/lib/external
#srv/web/owncloud/apps/files_sharing/lib/external/cache.php
#srv/web/owncloud/apps/files_sharing/lib/external/manager.php
#srv/web/owncloud/apps/files_sharing/templates/settings-admin.php
#srv/web/owncloud/apps/files_sharing/tests
#srv/web/owncloud/apps/files_sharing/tests/api.php
+#srv/web/owncloud/apps/files_sharing/tests/backend.php
#srv/web/owncloud/apps/files_sharing/tests/base.php
#srv/web/owncloud/apps/files_sharing/tests/cache.php
#srv/web/owncloud/apps/files_sharing/tests/externalstorage.php
+#srv/web/owncloud/apps/files_sharing/tests/helper.php
#srv/web/owncloud/apps/files_sharing/tests/js
#srv/web/owncloud/apps/files_sharing/tests/js/appSpec.js
#srv/web/owncloud/apps/files_sharing/tests/js/shareSpec.js
#srv/web/owncloud/apps/updater/admin.php
#srv/web/owncloud/apps/updater/ajax
#srv/web/owncloud/apps/updater/ajax/backup
+#srv/web/owncloud/apps/updater/ajax/backup.php
#srv/web/owncloud/apps/updater/ajax/backup/delete.php
#srv/web/owncloud/apps/updater/ajax/backup/download.php
#srv/web/owncloud/apps/updater/ajax/backup/list.php
+#srv/web/owncloud/apps/updater/ajax/download.php
#srv/web/owncloud/apps/updater/ajax/update.php
#srv/web/owncloud/apps/updater/appinfo
#srv/web/owncloud/apps/updater/appinfo/app.php
#srv/web/owncloud/apps/updater/lib
#srv/web/owncloud/apps/updater/lib/app.php
#srv/web/owncloud/apps/updater/lib/backup.php
+#srv/web/owncloud/apps/updater/lib/collection.php
#srv/web/owncloud/apps/updater/lib/downloader.php
+#srv/web/owncloud/apps/updater/lib/fsexception.php
#srv/web/owncloud/apps/updater/lib/helper.php
#srv/web/owncloud/apps/updater/lib/location
#srv/web/owncloud/apps/updater/lib/location.php
#srv/web/owncloud/apps/updater/lib/location/3rdparty.php
#srv/web/owncloud/apps/updater/lib/location/apps.php
#srv/web/owncloud/apps/updater/lib/location/core.php
+#srv/web/owncloud/apps/updater/lib/permissionexception.php
#srv/web/owncloud/apps/updater/lib/updater.php
#srv/web/owncloud/apps/updater/templates
#srv/web/owncloud/apps/updater/templates/admin.php
#srv/web/owncloud/apps/user_ldap/group_ldap.php
#srv/web/owncloud/apps/user_ldap/group_proxy.php
#srv/web/owncloud/apps/user_ldap/js
+#srv/web/owncloud/apps/user_ldap/js/experiencedAdmin.js
#srv/web/owncloud/apps/user_ldap/js/ldapFilter.js
#srv/web/owncloud/apps/user_ldap/js/settings.js
#srv/web/owncloud/apps/user_ldap/l10n
#srv/web/owncloud/apps/user_ldap/tests/data
#srv/web/owncloud/apps/user_ldap/tests/data/sid.dat
#srv/web/owncloud/apps/user_ldap/tests/group_ldap.php
+#srv/web/owncloud/apps/user_ldap/tests/helper.php
#srv/web/owncloud/apps/user_ldap/tests/user
#srv/web/owncloud/apps/user_ldap/tests/user/manager.php
#srv/web/owncloud/apps/user_ldap/tests/user/user.php
#srv/web/owncloud/core/css/jquery.ocdialog.css
#srv/web/owncloud/core/css/mobile.css
#srv/web/owncloud/core/css/multiselect.css
+#srv/web/owncloud/core/css/select2
+#srv/web/owncloud/core/css/select2/select2-spinner.gif
+#srv/web/owncloud/core/css/select2/select2.css
+#srv/web/owncloud/core/css/select2/select2.png
+#srv/web/owncloud/core/css/select2/select2x2.png
#srv/web/owncloud/core/css/share.css
#srv/web/owncloud/core/css/styles.css
#srv/web/owncloud/core/doc
#srv/web/owncloud/core/doc/admin
#srv/web/owncloud/core/doc/admin/_images
-#srv/web/owncloud/core/doc/admin/_images/100000000000003800000018D49F1CE7.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000050000000DB83B8FA5B.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000000950000004412998BE7.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000000A800000073F49785A6.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000000B600000120706C3C75.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000000CD000000ECA8DE7780.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000000F1000000F56125BDBA.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000000F1000000F6704F46D3.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000000F300000068AF0ECD53.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000000F40000019A110DD159.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000000F5000000675DC5F68C.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000000F500000067A8845EF8.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000000F60000006754ED2A1E.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000000F6000000685DFB3767.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000012C0000009C444B4720.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000013C0000017D4FC6CEF5.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000001400000008A557EF7E3.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000001440000005A2989832F.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000160000000DBB2FB0223.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000165000000D3FF2168AB.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000167000000B43E4BF478.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000001800000009A9494E037.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000001880000007EA4444400.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000018B000000A090F31164.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000018E000000C4BA62B2A3.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000193000001AE9AB8B0A2.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000194000000498325A766.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000194000000FAD39BC0D8.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000001980000009271BE0D26.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000019E0000004CD2A0F407.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000001A3000000AAFE82893A.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000001AC000000477C76808F.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000001BF00000012349EAE2F.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000001C1000000FE663748B2.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000001C9000000AF9C1CE57F.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000001CF00000176B0BE1EBC.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000001D30000014DC251C948.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000001E50000006E3ECDC427.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000001FD000000DF8D2D7546.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000200000000BCCCC35DEB.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000002170000004A27056037.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000021C0000004CACBF786C.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000002210000002DE3BE7515.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000227000000935D9B1EF6.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000023B000000125381F51B.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000247000000A77440E4D3.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000002720000013FB6EDA793.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000027B0000011D10F70F88.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000002840000016729388B7F.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000288000001A1D5BE4881.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000289000001A9D7F3941F.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000002910000018B31D51F03.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000291000001951B69B9A6.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000002950000019EF5732E36.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000002950000021E245F6883.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000298000001870B0581FA.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000298000001874D3CA506.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000029B0000018885B5282E.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000002A6000000BFBE298238.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000002B1000002258C08D304.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000002B3000000365E1CD00D.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000002BB000000266DB6AD1A.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000002F3000000926CA65D02.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000304000001B964698779.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000336000000F38C3FAF84.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000372000002AF943ADDA0.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000003730000002B6865E951.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000003A60000011E274A1A28.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000003A6000002A9C7A660BE.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000003A800000039364066E4.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000003B30000021B5EE5D338.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000003DF00000071A41D8A1F.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000003DF000000D953A456B6.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000003E8000001524A147A04.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000003EC000000AB60616FA7.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000003FB000002359BAFB40E.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000004010000017E4A6552BC.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000403000001632F0B76F6.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000404000000FCFC13E732.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000004100000005657010336.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000004170000016ACB5E15AE.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000041D0000017D8D1BC4D9.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000042500000163D2B339D5.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000427000000324F58266D.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000042E000001D3EEB9978B.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000042F000000CC3EDDE79E.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000430000000AF9D6E724E.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000043000000164DA0CE8C9.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000043200000169BCD20493.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000044C000002B0B421E27E.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000045800000197FE462F2B.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000462000000D44541CF9A.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000046C000000C2D3E5CF30.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000004770000008AAF3CFFDB.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000004920000028D9C8DC2CB.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000004C0000000795BB2C146.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000004CA000002B52116BE0C.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000004ED000000BE3B9E25D5.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000523000000C6F786381C.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000052500000088DBB95005.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000525000000BE30CF0423.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000527000000A7AB409FE0.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000052F000000C2867B7294.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000530000001410CF0028A.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000053100000142D9A4C916.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000532000000285DDBBF37.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000053A00000067708C8F53.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000552000000BF22E90239.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000557000002E148BAB6D4.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000005970000006AE23997C9.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000005AF00000074604B1A67.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000005B90000007866D92D14.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000005BB0000007C1DF71FA7.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000005C30000006CAFFAAD61.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000005D00000003B29340A7A.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000005D50000009458C5EE48.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000005E20000009B1BA5A8CF.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000005E6000000676902E040.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000005EB000000A68BA73E2D.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000005EC00000073E678DFEC.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000005F30000030F1372448D.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000005F70000005F0912E904.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000005F70000007E43DB8026.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000005FA0000005CE8491B77.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000005FF0000005F35710398.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000006000000005EDA7B96BE.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000060300000065DF96536B.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000006060000006A0106CA0C.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000061A0000006FC014C3A4.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000061D0000007047877972.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000061E0000006BCF9ECC0B.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000062A0000005F61A18950.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000631000000E19D116AA0.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000063F00000090AAE1FA4A.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000668000002D29EAD9899.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000066D000001AAD8CE8256.png
-#srv/web/owncloud/core/doc/admin/_images/10000201000002FC000001DC2DDAD2F1.png
-#srv/web/owncloud/core/doc/admin/_images/1000020100000359000000A8B848DE68.png
-#srv/web/owncloud/core/doc/admin/_images/10000201000005F90000029D8BA200FB.png
-#srv/web/owncloud/core/doc/admin/_images/custom_mount_config_gui-1.png
-#srv/web/owncloud/core/doc/admin/_images/custom_mount_config_gui-2.png
-#srv/web/owncloud/core/doc/admin/_images/custom_mount_config_gui-3.png
-#srv/web/owncloud/core/doc/admin/_images/custom_mount_config_gui-4.png
-#srv/web/owncloud/core/doc/admin/_images/edit_encrypted_file.png
+#srv/web/owncloud/core/doc/admin/_images/antivirus-app.png
+#srv/web/owncloud/core/doc/admin/_images/antivirus-config.png
+#srv/web/owncloud/core/doc/admin/_images/antivirus-daemon-socket.png
+#srv/web/owncloud/core/doc/admin/_images/antivirus-executable.png
+#srv/web/owncloud/core/doc/admin/_images/antivirus-logging.png
+#srv/web/owncloud/core/doc/admin/_images/create_public_share.png
+#srv/web/owncloud/core/doc/admin/_images/documents_app_enable.png
+#srv/web/owncloud/core/doc/admin/_images/encryption1.png
+#srv/web/owncloud/core/doc/admin/_images/encryption2.png
+#srv/web/owncloud/core/doc/admin/_images/encryption3.png
+#srv/web/owncloud/core/doc/admin/_images/encryption4.png
+#srv/web/owncloud/core/doc/admin/_images/encryption5.png
+#srv/web/owncloud/core/doc/admin/_images/encryption6.png
+#srv/web/owncloud/core/doc/admin/_images/encryption7.png
+#srv/web/owncloud/core/doc/admin/_images/encryption8.png
+#srv/web/owncloud/core/doc/admin/_images/encryption9.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-amazons3.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-app-add.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-app-enable.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-app-local.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-app-usermounts.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-dropbox-allowshare.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-dropbox-app.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-dropbox-configapp.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-dropbox-oc.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-dropbox.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-ftp.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-google-drive-0auth.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-google-drive-9.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-google-drive-sdk.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-google-drive.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-google-drive1.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-google-drive2.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-google-drive5.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-google-drive7.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-google-drive8.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-smb.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-webdav.png
#srv/web/owncloud/core/doc/admin/_images/install-wizard-advanced.png
#srv/web/owncloud/core/doc/admin/_images/install-wizard.png
#srv/web/owncloud/core/doc/admin/_images/ldap-advanced-1-connection.png
#srv/web/owncloud/core/doc/admin/_images/ldap-wizard-2-user.png
#srv/web/owncloud/core/doc/admin/_images/ldap-wizard-3-login.png
#srv/web/owncloud/core/doc/admin/_images/ldap-wizard-4-group.png
+#srv/web/owncloud/core/doc/admin/_images/lucene-search-enable.png
+#srv/web/owncloud/core/doc/admin/_images/lucene-search-user.png
#srv/web/owncloud/core/doc/admin/_images/oc_admin_app_page.png
-#srv/web/owncloud/core/doc/admin/_images/oc_admin_user_manage.png
+#srv/web/owncloud/core/doc/admin/_images/preview_images.png
+#srv/web/owncloud/core/doc/admin/_images/remote_shares.png
+#srv/web/owncloud/core/doc/admin/_images/sharing-admin.png
+#srv/web/owncloud/core/doc/admin/_images/sharing-user-local.png
+#srv/web/owncloud/core/doc/admin/_images/sharing-user.png
+#srv/web/owncloud/core/doc/admin/_images/smtp-config-php-sendmail.png
+#srv/web/owncloud/core/doc/admin/_images/smtp-config-smtp.png
+#srv/web/owncloud/core/doc/admin/_images/smtp-config-wizard.png
#srv/web/owncloud/core/doc/admin/_images/ucs-app-center-install.png
#srv/web/owncloud/core/doc/admin/_images/ucs-app-center-module.png
#srv/web/owncloud/core/doc/admin/_images/ucsint.png
#srv/web/owncloud/core/doc/admin/_images/ucsint1.png
#srv/web/owncloud/core/doc/admin/_images/ucsint2.png
#srv/web/owncloud/core/doc/admin/_images/untrusted-domain.png
+#srv/web/owncloud/core/doc/admin/_images/updater-1.png
+#srv/web/owncloud/core/doc/admin/_images/updater-2.png
+#srv/web/owncloud/core/doc/admin/_images/updater-3.png
+#srv/web/owncloud/core/doc/admin/_images/updater-4.png
+#srv/web/owncloud/core/doc/admin/_images/updater-5.png
+#srv/web/owncloud/core/doc/admin/_images/updater-6.png
+#srv/web/owncloud/core/doc/admin/_images/updater-7.png
+#srv/web/owncloud/core/doc/admin/_images/users-config.png
+#srv/web/owncloud/core/doc/admin/_images/users-create.png
+#srv/web/owncloud/core/doc/admin/_images/users-groups.png
#srv/web/owncloud/core/doc/admin/_images/win7features.jpg
#srv/web/owncloud/core/doc/admin/_images/winserverroles.jpg
#srv/web/owncloud/core/doc/admin/_sources
-#srv/web/owncloud/core/doc/admin/_sources/apps
-#srv/web/owncloud/core/doc/admin/_sources/apps/activity
-#srv/web/owncloud/core/doc/admin/_sources/apps/activity/index.txt
-#srv/web/owncloud/core/doc/admin/_sources/apps/admin_dependencies_chk
-#srv/web/owncloud/core/doc/admin/_sources/apps/admin_dependencies_chk/index.txt
-#srv/web/owncloud/core/doc/admin/_sources/apps/files_antivirus
-#srv/web/owncloud/core/doc/admin/_sources/apps/files_antivirus/index.txt
-#srv/web/owncloud/core/doc/admin/_sources/apps/files_encryption
-#srv/web/owncloud/core/doc/admin/_sources/apps/files_encryption/index.txt
-#srv/web/owncloud/core/doc/admin/_sources/apps/files_external
-#srv/web/owncloud/core/doc/admin/_sources/apps/files_external/index.txt
-#srv/web/owncloud/core/doc/admin/_sources/apps/files_sharing
-#srv/web/owncloud/core/doc/admin/_sources/apps/files_sharing/index.txt
-#srv/web/owncloud/core/doc/admin/_sources/apps/files_trashbin
-#srv/web/owncloud/core/doc/admin/_sources/apps/files_trashbin/index.txt
-#srv/web/owncloud/core/doc/admin/_sources/apps/files_versions
-#srv/web/owncloud/core/doc/admin/_sources/apps/files_versions/index.txt
-#srv/web/owncloud/core/doc/admin/_sources/apps/firstrunwizard
-#srv/web/owncloud/core/doc/admin/_sources/apps/firstrunwizard/index.txt
-#srv/web/owncloud/core/doc/admin/_sources/apps/index.txt
-#srv/web/owncloud/core/doc/admin/_sources/apps/user_ldap
-#srv/web/owncloud/core/doc/admin/_sources/apps/user_ldap/index.txt
-#srv/web/owncloud/core/doc/admin/_sources/apps/viewers
-#srv/web/owncloud/core/doc/admin/_sources/apps/viewers/index.txt
-#srv/web/owncloud/core/doc/admin/_sources/config
-#srv/web/owncloud/core/doc/admin/_sources/config/apps.txt
-#srv/web/owncloud/core/doc/admin/_sources/config/code_locations.txt
-#srv/web/owncloud/core/doc/admin/_sources/config/default_parameters.txt
-#srv/web/owncloud/core/doc/admin/_sources/config/deleted_items.txt
-#srv/web/owncloud/core/doc/admin/_sources/config/index.txt
-#srv/web/owncloud/core/doc/admin/_sources/config/logging.txt
-#srv/web/owncloud/core/doc/admin/_sources/config/mail_parameters.txt
-#srv/web/owncloud/core/doc/admin/_sources/config/maintenance.txt
-#srv/web/owncloud/core/doc/admin/_sources/config/miscellaneous.txt
-#srv/web/owncloud/core/doc/admin/_sources/config/previews.txt
-#srv/web/owncloud/core/doc/admin/_sources/config/reverse_proxy_configurations.txt
-#srv/web/owncloud/core/doc/admin/_sources/config/session_info.txt
-#srv/web/owncloud/core/doc/admin/_sources/config/user_experience.txt
-#srv/web/owncloud/core/doc/admin/_sources/config/verification.txt
#srv/web/owncloud/core/doc/admin/_sources/configuration
#srv/web/owncloud/core/doc/admin/_sources/configuration/auth_ldap.txt
#srv/web/owncloud/core/doc/admin/_sources/configuration/background_jobs.txt
+#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration-antivirus.txt
#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_3rdparty.txt
#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_apps.txt
+#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_assets.txt
#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_automation.txt
+#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_config_sample_php.txt
#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_custom_clients.txt
#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_database.txt
#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_encryption.txt
+#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_file_sharing.txt
+#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_files_locking.txt
#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_knowledgebase.txt
#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_language.txt
#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_logging.txt
#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_mail.txt
-#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_maintenance.txt
#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_preview.txt
#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_reverseproxy.txt
#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_users.txt
#srv/web/owncloud/core/doc/admin/_sources/configuration/configuring_big_file_upload.txt
+#srv/web/owncloud/core/doc/admin/_sources/configuration/configuring_documents.txt
+#srv/web/owncloud/core/doc/admin/_sources/configuration/configuring_search.txt
#srv/web/owncloud/core/doc/admin/_sources/configuration/custom_mount_config.txt
#srv/web/owncloud/core/doc/admin/_sources/configuration/custom_mount_config_gui.txt
#srv/web/owncloud/core/doc/admin/_sources/configuration/custom_user_backend.txt
#srv/web/owncloud/core/doc/admin/_sources/configuration/index.txt
+#srv/web/owncloud/core/doc/admin/_sources/configuration/server_to_server_managing.txt
#srv/web/owncloud/core/doc/admin/_sources/configuration/xsendfile.txt
#srv/web/owncloud/core/doc/admin/_sources/contents.txt
-#srv/web/owncloud/core/doc/admin/_sources/cron
-#srv/web/owncloud/core/doc/admin/_sources/cron/index.txt
#srv/web/owncloud/core/doc/admin/_sources/index.txt
#srv/web/owncloud/core/doc/admin/_sources/installation
+#srv/web/owncloud/core/doc/admin/_sources/installation/configuration_hiawatha.txt
+#srv/web/owncloud/core/doc/admin/_sources/installation/configuration_lighttpd.txt
+#srv/web/owncloud/core/doc/admin/_sources/installation/configuration_nginx.txt
+#srv/web/owncloud/core/doc/admin/_sources/installation/configuration_yaws.txt
#srv/web/owncloud/core/doc/admin/_sources/installation/index.txt
#srv/web/owncloud/core/doc/admin/_sources/installation/installation_appliance.txt
#srv/web/owncloud/core/doc/admin/_sources/installation/installation_linux.txt
#srv/web/owncloud/core/doc/admin/_sources/issues/index.txt
#srv/web/owncloud/core/doc/admin/_sources/maintenance
#srv/web/owncloud/core/doc/admin/_sources/maintenance/backup.txt
+#srv/web/owncloud/core/doc/admin/_sources/maintenance/convert_db.txt
+#srv/web/owncloud/core/doc/admin/_sources/maintenance/enable_maintenance.txt
#srv/web/owncloud/core/doc/admin/_sources/maintenance/index.txt
#srv/web/owncloud/core/doc/admin/_sources/maintenance/migrating.txt
#srv/web/owncloud/core/doc/admin/_sources/maintenance/restore.txt
#srv/web/owncloud/core/doc/admin/_sources/maintenance/update.txt
-#srv/web/owncloud/core/doc/admin/_sources/quota
-#srv/web/owncloud/core/doc/admin/_sources/quota/index.txt
-#srv/web/owncloud/core/doc/admin/_sources/sharing_api
-#srv/web/owncloud/core/doc/admin/_sources/sharing_api/create_a_new_share.txt
-#srv/web/owncloud/core/doc/admin/_sources/sharing_api/delete_share.txt
-#srv/web/owncloud/core/doc/admin/_sources/sharing_api/get_all_shares.txt
-#srv/web/owncloud/core/doc/admin/_sources/sharing_api/get_information_about_a_known_share.txt
-#srv/web/owncloud/core/doc/admin/_sources/sharing_api/get_shares_from_a_specific_file_or_folder.txt
-#srv/web/owncloud/core/doc/admin/_sources/sharing_api/index.txt
+#srv/web/owncloud/core/doc/admin/_sources/maintenance/upgrade.txt
+#srv/web/owncloud/core/doc/admin/_sources/whats_new_admin.txt
#srv/web/owncloud/core/doc/admin/_static
#srv/web/owncloud/core/doc/admin/_static/ajax-loader.gif
#srv/web/owncloud/core/doc/admin/_static/basic.css
#srv/web/owncloud/core/doc/admin/_static/up-pressed.png
#srv/web/owncloud/core/doc/admin/_static/up.png
#srv/web/owncloud/core/doc/admin/_static/websupport.js
-#srv/web/owncloud/core/doc/admin/apps
-#srv/web/owncloud/core/doc/admin/apps/activity
-#srv/web/owncloud/core/doc/admin/apps/activity/index.html
-#srv/web/owncloud/core/doc/admin/apps/admin_dependencies_chk
-#srv/web/owncloud/core/doc/admin/apps/admin_dependencies_chk/index.html
-#srv/web/owncloud/core/doc/admin/apps/files_antivirus
-#srv/web/owncloud/core/doc/admin/apps/files_antivirus/index.html
-#srv/web/owncloud/core/doc/admin/apps/files_encryption
-#srv/web/owncloud/core/doc/admin/apps/files_encryption/index.html
-#srv/web/owncloud/core/doc/admin/apps/files_external
-#srv/web/owncloud/core/doc/admin/apps/files_external/index.html
-#srv/web/owncloud/core/doc/admin/apps/files_sharing
-#srv/web/owncloud/core/doc/admin/apps/files_sharing/index.html
-#srv/web/owncloud/core/doc/admin/apps/files_trashbin
-#srv/web/owncloud/core/doc/admin/apps/files_trashbin/index.html
-#srv/web/owncloud/core/doc/admin/apps/files_versions
-#srv/web/owncloud/core/doc/admin/apps/files_versions/index.html
-#srv/web/owncloud/core/doc/admin/apps/firstrunwizard
-#srv/web/owncloud/core/doc/admin/apps/firstrunwizard/index.html
-#srv/web/owncloud/core/doc/admin/apps/index.html
-#srv/web/owncloud/core/doc/admin/apps/user_ldap
-#srv/web/owncloud/core/doc/admin/apps/user_ldap/index.html
-#srv/web/owncloud/core/doc/admin/apps/viewers
-#srv/web/owncloud/core/doc/admin/apps/viewers/index.html
-#srv/web/owncloud/core/doc/admin/config
-#srv/web/owncloud/core/doc/admin/config/apps.html
-#srv/web/owncloud/core/doc/admin/config/code_locations.html
-#srv/web/owncloud/core/doc/admin/config/default_parameters.html
-#srv/web/owncloud/core/doc/admin/config/deleted_items.html
-#srv/web/owncloud/core/doc/admin/config/index.html
-#srv/web/owncloud/core/doc/admin/config/logging.html
-#srv/web/owncloud/core/doc/admin/config/mail_parameters.html
-#srv/web/owncloud/core/doc/admin/config/maintenance.html
-#srv/web/owncloud/core/doc/admin/config/miscellaneous.html
-#srv/web/owncloud/core/doc/admin/config/previews.html
-#srv/web/owncloud/core/doc/admin/config/reverse_proxy_configurations.html
-#srv/web/owncloud/core/doc/admin/config/session_info.html
-#srv/web/owncloud/core/doc/admin/config/user_experience.html
-#srv/web/owncloud/core/doc/admin/config/verification.html
#srv/web/owncloud/core/doc/admin/configuration
#srv/web/owncloud/core/doc/admin/configuration/auth_ldap.html
#srv/web/owncloud/core/doc/admin/configuration/background_jobs.html
+#srv/web/owncloud/core/doc/admin/configuration/configuration-antivirus.html
#srv/web/owncloud/core/doc/admin/configuration/configuration_3rdparty.html
#srv/web/owncloud/core/doc/admin/configuration/configuration_apps.html
+#srv/web/owncloud/core/doc/admin/configuration/configuration_assets.html
#srv/web/owncloud/core/doc/admin/configuration/configuration_automation.html
+#srv/web/owncloud/core/doc/admin/configuration/configuration_config_sample_php.html
#srv/web/owncloud/core/doc/admin/configuration/configuration_custom_clients.html
#srv/web/owncloud/core/doc/admin/configuration/configuration_database.html
#srv/web/owncloud/core/doc/admin/configuration/configuration_encryption.html
+#srv/web/owncloud/core/doc/admin/configuration/configuration_file_sharing.html
+#srv/web/owncloud/core/doc/admin/configuration/configuration_files_locking.html
#srv/web/owncloud/core/doc/admin/configuration/configuration_knowledgebase.html
#srv/web/owncloud/core/doc/admin/configuration/configuration_language.html
#srv/web/owncloud/core/doc/admin/configuration/configuration_logging.html
#srv/web/owncloud/core/doc/admin/configuration/configuration_mail.html
-#srv/web/owncloud/core/doc/admin/configuration/configuration_maintenance.html
#srv/web/owncloud/core/doc/admin/configuration/configuration_preview.html
#srv/web/owncloud/core/doc/admin/configuration/configuration_reverseproxy.html
#srv/web/owncloud/core/doc/admin/configuration/configuration_users.html
#srv/web/owncloud/core/doc/admin/configuration/configuring_big_file_upload.html
+#srv/web/owncloud/core/doc/admin/configuration/configuring_documents.html
+#srv/web/owncloud/core/doc/admin/configuration/configuring_search.html
#srv/web/owncloud/core/doc/admin/configuration/custom_mount_config.html
#srv/web/owncloud/core/doc/admin/configuration/custom_mount_config_gui.html
#srv/web/owncloud/core/doc/admin/configuration/custom_user_backend.html
#srv/web/owncloud/core/doc/admin/configuration/index.html
+#srv/web/owncloud/core/doc/admin/configuration/server_to_server_managing.html
#srv/web/owncloud/core/doc/admin/configuration/xsendfile.html
#srv/web/owncloud/core/doc/admin/contents.html
-#srv/web/owncloud/core/doc/admin/cron
-#srv/web/owncloud/core/doc/admin/cron/index.html
#srv/web/owncloud/core/doc/admin/genindex.html
#srv/web/owncloud/core/doc/admin/index.html
#srv/web/owncloud/core/doc/admin/installation
+#srv/web/owncloud/core/doc/admin/installation/configuration_hiawatha.html
+#srv/web/owncloud/core/doc/admin/installation/configuration_lighttpd.html
+#srv/web/owncloud/core/doc/admin/installation/configuration_nginx.html
+#srv/web/owncloud/core/doc/admin/installation/configuration_yaws.html
#srv/web/owncloud/core/doc/admin/installation/index.html
#srv/web/owncloud/core/doc/admin/installation/installation_appliance.html
#srv/web/owncloud/core/doc/admin/installation/installation_linux.html
#srv/web/owncloud/core/doc/admin/issues/index.html
#srv/web/owncloud/core/doc/admin/maintenance
#srv/web/owncloud/core/doc/admin/maintenance/backup.html
+#srv/web/owncloud/core/doc/admin/maintenance/convert_db.html
+#srv/web/owncloud/core/doc/admin/maintenance/enable_maintenance.html
#srv/web/owncloud/core/doc/admin/maintenance/index.html
#srv/web/owncloud/core/doc/admin/maintenance/migrating.html
#srv/web/owncloud/core/doc/admin/maintenance/restore.html
#srv/web/owncloud/core/doc/admin/maintenance/update.html
+#srv/web/owncloud/core/doc/admin/maintenance/upgrade.html
#srv/web/owncloud/core/doc/admin/objects.inv
-#srv/web/owncloud/core/doc/admin/quota
-#srv/web/owncloud/core/doc/admin/quota/index.html
#srv/web/owncloud/core/doc/admin/search.html
#srv/web/owncloud/core/doc/admin/searchindex.js
-#srv/web/owncloud/core/doc/admin/sharing_api
-#srv/web/owncloud/core/doc/admin/sharing_api/create_a_new_share.html
-#srv/web/owncloud/core/doc/admin/sharing_api/delete_share.html
-#srv/web/owncloud/core/doc/admin/sharing_api/get_all_shares.html
-#srv/web/owncloud/core/doc/admin/sharing_api/get_information_about_a_known_share.html
-#srv/web/owncloud/core/doc/admin/sharing_api/get_shares_from_a_specific_file_or_folder.html
-#srv/web/owncloud/core/doc/admin/sharing_api/index.html
+#srv/web/owncloud/core/doc/admin/whats_new_admin.html
#srv/web/owncloud/core/doc/user
#srv/web/owncloud/core/doc/user/_images
-#srv/web/owncloud/core/doc/user/_images/1000000000000163000000E9CDA84C92.png
-#srv/web/owncloud/core/doc/user/_images/1000000000000175000000FAB2A2B294.png
-#srv/web/owncloud/core/doc/user/_images/1000000000000195000000EF7E44082C.png
-#srv/web/owncloud/core/doc/user/_images/10000000000001CE000000F2E2084BA1.png
-#srv/web/owncloud/core/doc/user/_images/100000000000041D0000003D52225C0D.png
-#srv/web/owncloud/core/doc/user/_images/1000000000000453000001BFFCF48776.png
-#srv/web/owncloud/core/doc/user/_images/1000000000000467000002B63162E59B.png
-#srv/web/owncloud/core/doc/user/_images/10000000000004690000026615360BEB.png
-#srv/web/owncloud/core/doc/user/_images/100000000000046D0000015F4B5494A9.png
-#srv/web/owncloud/core/doc/user/_images/100000000000046F000000DEA2BFCD9B.png
-#srv/web/owncloud/core/doc/user/_images/1000000000000470000001B68AE60DD3.png
-#srv/web/owncloud/core/doc/user/_images/10000000000004710000014BBC34499D.png
-#srv/web/owncloud/core/doc/user/_images/100000000000047200000129CB014025.png
-#srv/web/owncloud/core/doc/user/_images/100000000000047700000219A3013A92.png
-#srv/web/owncloud/core/doc/user/_images/1000000000000479000002887E7F48EA.png
-#srv/web/owncloud/core/doc/user/_images/100000000000047A000000B727198874.png
-#srv/web/owncloud/core/doc/user/_images/100000000000047A000000FB86FF2A9A.png
-#srv/web/owncloud/core/doc/user/_images/100000000000047A0000011C6682A254.png
-#srv/web/owncloud/core/doc/user/_images/100000000000048100000245268CDB7A.png
#srv/web/owncloud/core/doc/user/_images/bookmark_addurl.png
#srv/web/owncloud/core/doc/user/_images/bookmark_setting.png
-#srv/web/owncloud/core/doc/user/_images/calendar_createevent.png
+#srv/web/owncloud/core/doc/user/_images/calendar_create_event.png
+#srv/web/owncloud/core/doc/user/_images/calendar_create_event_repeat.png
+#srv/web/owncloud/core/doc/user/_images/calendar_create_event_share.png
+#srv/web/owncloud/core/doc/user/_images/calendar_create_new.png
+#srv/web/owncloud/core/doc/user/_images/calendar_default.png
+#srv/web/owncloud/core/doc/user/_images/calendar_edit_event.png
#srv/web/owncloud/core/doc/user/_images/calendar_export.png
#srv/web/owncloud/core/doc/user/_images/calendar_import.png
-#srv/web/owncloud/core/doc/user/_images/calendar_manage-calendars.png
#srv/web/owncloud/core/doc/user/_images/calendar_newtimezone1.png
+#srv/web/owncloud/core/doc/user/_images/calendar_settings.png
+#srv/web/owncloud/core/doc/user/_images/contact_address_book_add.png
#srv/web/owncloud/core/doc/user/_images/contact_bottombar.png
#srv/web/owncloud/core/doc/user/_images/contact_crop.jpg
-#srv/web/owncloud/core/doc/user/_images/contact_del_ab.png
-#srv/web/owncloud/core/doc/user/_images/contact_emptycontact.png
-#srv/web/owncloud/core/doc/user/_images/contact_picture.jpg
+#srv/web/owncloud/core/doc/user/_images/contact_new.png
+#srv/web/owncloud/core/doc/user/_images/contact_picture.png
+#srv/web/owncloud/core/doc/user/_images/contact_picture_default.png
#srv/web/owncloud/core/doc/user/_images/contact_syncopt.jpg
#srv/web/owncloud/core/doc/user/_images/contact_thunderbird-Symbol_Gear.jpg
#srv/web/owncloud/core/doc/user/_images/contact_thunderbird-Symbol_Impeller.jpg
#srv/web/owncloud/core/doc/user/_images/contact_thunderbird-URL_config.jpg
#srv/web/owncloud/core/doc/user/_images/contact_uploadbutton.png
#srv/web/owncloud/core/doc/user/_images/contact_vcfpick.jpg
+#srv/web/owncloud/core/doc/user/_images/contacts_empty.png
+#srv/web/owncloud/core/doc/user/_images/contacts_settings.png
+#srv/web/owncloud/core/doc/user/_images/deleted_files.png
+#srv/web/owncloud/core/doc/user/_images/documents_personal_settings.png
#srv/web/owncloud/core/doc/user/_images/dolphin_webdav.png
+#srv/web/owncloud/core/doc/user/_images/download.png
+#srv/web/owncloud/core/doc/user/_images/email_address_personal_settings.png
+#srv/web/owncloud/core/doc/user/_images/encryption1.png
+#srv/web/owncloud/core/doc/user/_images/encryption2.png
+#srv/web/owncloud/core/doc/user/_images/encryption3.png
+#srv/web/owncloud/core/doc/user/_images/encryption4.png
+#srv/web/owncloud/core/doc/user/_images/event_export.png
#srv/web/owncloud/core/doc/user/_images/explorer_webdav.png
-#srv/web/owncloud/core/doc/user/_images/external_google_drive_1_sign_in.png
-#srv/web/owncloud/core/doc/user/_images/external_google_drive_2_verify.png
-#srv/web/owncloud/core/doc/user/_images/external_google_drive_3_create_project.png
-#srv/web/owncloud/core/doc/user/_images/external_google_drive_4_enable_api.png
-#srv/web/owncloud/core/doc/user/_images/external_google_drive_5_setup_ownCloud.png
-#srv/web/owncloud/core/doc/user/_images/external_google_drive_6_accept.png
#srv/web/owncloud/core/doc/user/_images/files_versioning.png
+#srv/web/owncloud/core/doc/user/_images/full_name.png
#srv/web/owncloud/core/doc/user/_images/gnome3_nautilus_webdav.png
#srv/web/owncloud/core/doc/user/_images/kdes.png
#srv/web/owncloud/core/doc/user/_images/kdes1.png
#srv/web/owncloud/core/doc/user/_images/kdes6.png
#srv/web/owncloud/core/doc/user/_images/kdes7.png
#srv/web/owncloud/core/doc/user/_images/kdes9.png
+#srv/web/owncloud/core/doc/user/_images/language_personal_settings.png
+#srv/web/owncloud/core/doc/user/_images/notifications_personal_settings.png
#srv/web/owncloud/core/doc/user/_images/oc_connect.png
#srv/web/owncloud/core/doc/user/_images/oc_documents.png
#srv/web/owncloud/core/doc/user/_images/oc_documents_col_edit.png
#srv/web/owncloud/core/doc/user/_images/oc_documents_edit.png
#srv/web/owncloud/core/doc/user/_images/oc_documents_share.png
-#srv/web/owncloud/core/doc/user/_images/oc_files_share.png
-#srv/web/owncloud/core/doc/user/_images/oc_filesweb.png
#srv/web/owncloud/core/doc/user/_images/oc_filesweb_navigate.png
#srv/web/owncloud/core/doc/user/_images/oc_filesweb_new.png
-#srv/web/owncloud/core/doc/user/_images/oc_ui.png
-#srv/web/owncloud/core/doc/user/_images/oc_user_preferences.png
+#srv/web/owncloud/core/doc/user/_images/oc_main_web.png
+#srv/web/owncloud/core/doc/user/_images/oc_main_web_labelled.png
+#srv/web/owncloud/core/doc/user/_images/oc_personal_settings_dropdown.png
#srv/web/owncloud/core/doc/user/_images/osx_webdav1.png
#srv/web/owncloud/core/doc/user/_images/osx_webdav2.png
+#srv/web/owncloud/core/doc/user/_images/password_change.png
+#srv/web/owncloud/core/doc/user/_images/personal_settings.png
+#srv/web/owncloud/core/doc/user/_images/profile_picture_personal_settings.png
+#srv/web/owncloud/core/doc/user/_images/quota1.png
+#srv/web/owncloud/core/doc/user/_images/s2s-add-remote-share.png
+#srv/web/owncloud/core/doc/user/_images/s2s-connect-to-remote-share.png
+#srv/web/owncloud/core/doc/user/_images/s2s-create_public_share.png
+#srv/web/owncloud/core/doc/user/_images/s2s-remote-share-labeled.png
+#srv/web/owncloud/core/doc/user/_images/usage_indicator.png
+#srv/web/owncloud/core/doc/user/_images/users-files.png
+#srv/web/owncloud/core/doc/user/_images/users-overlays-sharepoint.png
+#srv/web/owncloud/core/doc/user/_images/users-overlays-win-net-drive.png
+#srv/web/owncloud/core/doc/user/_images/users-overlays.png
+#srv/web/owncloud/core/doc/user/_images/users-share-local.png
+#srv/web/owncloud/core/doc/user/_images/users-share-local2.png
+#srv/web/owncloud/core/doc/user/_images/users-share-public.png
#srv/web/owncloud/core/doc/user/_sources
#srv/web/owncloud/core/doc/user/_sources/bookmarks.txt
#srv/web/owncloud/core/doc/user/_sources/contents.txt
#srv/web/owncloud/core/doc/user/_sources/files/filesweb.txt
#srv/web/owncloud/core/doc/user/_sources/files/index.txt
#srv/web/owncloud/core/doc/user/_sources/files/quota.txt
+#srv/web/owncloud/core/doc/user/_sources/files/server_to_server_using.txt
#srv/web/owncloud/core/doc/user/_sources/files/sync.txt
#srv/web/owncloud/core/doc/user/_sources/files/versioncontrol.txt
#srv/web/owncloud/core/doc/user/_sources/index.txt
-#srv/web/owncloud/core/doc/user/_sources/migration.txt
+#srv/web/owncloud/core/doc/user/_sources/installing_apps.txt
#srv/web/owncloud/core/doc/user/_sources/pim
#srv/web/owncloud/core/doc/user/_sources/pim/calendar.txt
#srv/web/owncloud/core/doc/user/_sources/pim/contacts.txt
#srv/web/owncloud/core/doc/user/_sources/pim/sync_thunderbird.txt
#srv/web/owncloud/core/doc/user/_sources/pim/troubleshooting.txt
#srv/web/owncloud/core/doc/user/_sources/userpreferences.txt
-#srv/web/owncloud/core/doc/user/_sources/web_guide
-#srv/web/owncloud/core/doc/user/_sources/web_guide/index.txt
#srv/web/owncloud/core/doc/user/_sources/webinterface.txt
+#srv/web/owncloud/core/doc/user/_sources/whats_new.txt
#srv/web/owncloud/core/doc/user/_static
#srv/web/owncloud/core/doc/user/_static/ajax-loader.gif
#srv/web/owncloud/core/doc/user/_static/basic.css
#srv/web/owncloud/core/doc/user/files/filesweb.html
#srv/web/owncloud/core/doc/user/files/index.html
#srv/web/owncloud/core/doc/user/files/quota.html
+#srv/web/owncloud/core/doc/user/files/server_to_server_using.html
#srv/web/owncloud/core/doc/user/files/sync.html
#srv/web/owncloud/core/doc/user/files/versioncontrol.html
#srv/web/owncloud/core/doc/user/genindex.html
#srv/web/owncloud/core/doc/user/index.html
-#srv/web/owncloud/core/doc/user/migration.html
+#srv/web/owncloud/core/doc/user/installing_apps.html
#srv/web/owncloud/core/doc/user/objects.inv
#srv/web/owncloud/core/doc/user/pim
#srv/web/owncloud/core/doc/user/pim/calendar.html
#srv/web/owncloud/core/doc/user/search.html
#srv/web/owncloud/core/doc/user/searchindex.js
#srv/web/owncloud/core/doc/user/userpreferences.html
-#srv/web/owncloud/core/doc/user/web_guide
-#srv/web/owncloud/core/doc/user/web_guide/index.html
#srv/web/owncloud/core/doc/user/webinterface.html
+#srv/web/owncloud/core/doc/user/whats_new.html
#srv/web/owncloud/core/fonts
#srv/web/owncloud/core/fonts/LICENSE.txt
#srv/web/owncloud/core/fonts/OpenSans-Bold.woff
#srv/web/owncloud/core/img/actions/public.svg
#srv/web/owncloud/core/img/actions/rename.png
#srv/web/owncloud/core/img/actions/rename.svg
+#srv/web/owncloud/core/img/actions/search-white.png
+#srv/web/owncloud/core/img/actions/search-white.svg
#srv/web/owncloud/core/img/actions/search.png
#srv/web/owncloud/core/img/actions/search.svg
#srv/web/owncloud/core/img/actions/settings.png
#srv/web/owncloud/core/js/octemplate.js
#srv/web/owncloud/core/js/placeholder.js
#srv/web/owncloud/core/js/placeholders.js
+#srv/web/owncloud/core/js/select2
+#srv/web/owncloud/core/js/select2/LICENSE
+#srv/web/owncloud/core/js/select2/README.md
+#srv/web/owncloud/core/js/select2/bower.json
+#srv/web/owncloud/core/js/select2/component.json
+#srv/web/owncloud/core/js/select2/composer.json
+#srv/web/owncloud/core/js/select2/package.json
+#srv/web/owncloud/core/js/select2/release.sh
+#srv/web/owncloud/core/js/select2/select2-bootstrap.css
+#srv/web/owncloud/core/js/select2/select2.jquery.json
+#srv/web/owncloud/core/js/select2/select2.js
+#srv/web/owncloud/core/js/select2/select2_locale_ar.js
+#srv/web/owncloud/core/js/select2/select2_locale_bg.js
+#srv/web/owncloud/core/js/select2/select2_locale_ca.js
+#srv/web/owncloud/core/js/select2/select2_locale_cs.js
+#srv/web/owncloud/core/js/select2/select2_locale_da.js
+#srv/web/owncloud/core/js/select2/select2_locale_de.js
+#srv/web/owncloud/core/js/select2/select2_locale_el.js
+#srv/web/owncloud/core/js/select2/select2_locale_en.js.template
+#srv/web/owncloud/core/js/select2/select2_locale_es.js
+#srv/web/owncloud/core/js/select2/select2_locale_et.js
+#srv/web/owncloud/core/js/select2/select2_locale_eu.js
+#srv/web/owncloud/core/js/select2/select2_locale_fa.js
+#srv/web/owncloud/core/js/select2/select2_locale_fi.js
+#srv/web/owncloud/core/js/select2/select2_locale_fr.js
+#srv/web/owncloud/core/js/select2/select2_locale_gl.js
+#srv/web/owncloud/core/js/select2/select2_locale_he.js
+#srv/web/owncloud/core/js/select2/select2_locale_hr.js
+#srv/web/owncloud/core/js/select2/select2_locale_hu.js
+#srv/web/owncloud/core/js/select2/select2_locale_id.js
+#srv/web/owncloud/core/js/select2/select2_locale_is.js
+#srv/web/owncloud/core/js/select2/select2_locale_it.js
+#srv/web/owncloud/core/js/select2/select2_locale_ja.js
+#srv/web/owncloud/core/js/select2/select2_locale_ka.js
+#srv/web/owncloud/core/js/select2/select2_locale_ko.js
+#srv/web/owncloud/core/js/select2/select2_locale_lt.js
+#srv/web/owncloud/core/js/select2/select2_locale_lv.js
+#srv/web/owncloud/core/js/select2/select2_locale_mk.js
+#srv/web/owncloud/core/js/select2/select2_locale_ms.js
+#srv/web/owncloud/core/js/select2/select2_locale_nl.js
+#srv/web/owncloud/core/js/select2/select2_locale_no.js
+#srv/web/owncloud/core/js/select2/select2_locale_pl.js
+#srv/web/owncloud/core/js/select2/select2_locale_pt-BR.js
+#srv/web/owncloud/core/js/select2/select2_locale_pt-PT.js
+#srv/web/owncloud/core/js/select2/select2_locale_ro.js
+#srv/web/owncloud/core/js/select2/select2_locale_rs.js
+#srv/web/owncloud/core/js/select2/select2_locale_ru.js
+#srv/web/owncloud/core/js/select2/select2_locale_sk.js
+#srv/web/owncloud/core/js/select2/select2_locale_sv.js
+#srv/web/owncloud/core/js/select2/select2_locale_th.js
+#srv/web/owncloud/core/js/select2/select2_locale_tr.js
+#srv/web/owncloud/core/js/select2/select2_locale_uk.js
+#srv/web/owncloud/core/js/select2/select2_locale_vi.js
+#srv/web/owncloud/core/js/select2/select2_locale_zh-CN.js
+#srv/web/owncloud/core/js/select2/select2_locale_zh-TW.js
#srv/web/owncloud/core/js/setup.js
+#srv/web/owncloud/core/js/setupchecks.js
#srv/web/owncloud/core/js/share.js
#srv/web/owncloud/core/js/singleselect.js
#srv/web/owncloud/core/js/snap.js
#srv/web/owncloud/core/templates/message.html
#srv/web/owncloud/core/templates/singleuser.user.php
#srv/web/owncloud/core/templates/tags.html
+#srv/web/owncloud/core/templates/untrustedDomain.php
#srv/web/owncloud/core/templates/update.admin.php
#srv/web/owncloud/core/templates/update.user.php
#srv/web/owncloud/cron.php
#srv/web/owncloud/lib/private/connector/sabre/quotaplugin.php
#srv/web/owncloud/lib/private/connector/sabre/request.php
#srv/web/owncloud/lib/private/connector/sabre/server.php
+#srv/web/owncloud/lib/private/contacts
+#srv/web/owncloud/lib/private/contacts/localaddressbook.php
#srv/web/owncloud/lib/private/contactsmanager.php
#srv/web/owncloud/lib/private/davclient.php
#srv/web/owncloud/lib/private/db
#srv/web/owncloud/lib/private/db.php
#srv/web/owncloud/lib/private/db/adapter.php
+#srv/web/owncloud/lib/private/db/adaptermysql.php
#srv/web/owncloud/lib/private/db/adapteroci8.php
#srv/web/owncloud/lib/private/db/adapterpgsql.php
#srv/web/owncloud/lib/private/db/adaptersqlite.php
#srv/web/owncloud/lib/private/db/mdb2schemawriter.php
#srv/web/owncloud/lib/private/db/migrationexception.php
#srv/web/owncloud/lib/private/db/migrator.php
+#srv/web/owncloud/lib/private/db/mssqlmigrator.php
#srv/web/owncloud/lib/private/db/mysqlmigrator.php
#srv/web/owncloud/lib/private/db/nocheckmigrator.php
#srv/web/owncloud/lib/private/db/oracleconnection.php
#srv/web/owncloud/lib/private/db/oraclemigrator.php
#srv/web/owncloud/lib/private/db/pgsqltools.php
#srv/web/owncloud/lib/private/db/sqlitemigrator.php
+#srv/web/owncloud/lib/private/db/sqlitesessioninit.php
#srv/web/owncloud/lib/private/db/statementwrapper.php
#srv/web/owncloud/lib/private/defaults.php
#srv/web/owncloud/lib/private/eventsource.php
#srv/web/owncloud/lib/private/hooks/forwardingemitter.php
#srv/web/owncloud/lib/private/hooks/legacyemitter.php
#srv/web/owncloud/lib/private/hooks/publicemitter.php
+#srv/web/owncloud/lib/private/httphelper.php
#srv/web/owncloud/lib/private/image.php
#srv/web/owncloud/lib/private/installer.php
#srv/web/owncloud/lib/private/json.php
#srv/web/owncloud/lib/private/migration/provider.php
#srv/web/owncloud/lib/private/mimetypes.list.php
#srv/web/owncloud/lib/private/navigationmanager.php
+#srv/web/owncloud/lib/private/needsupdateexception.php
#srv/web/owncloud/lib/private/notsquareexception.php
#srv/web/owncloud/lib/private/ocs
#srv/web/owncloud/lib/private/ocs.php
#srv/web/owncloud/lib/private/preview/provider.php
#srv/web/owncloud/lib/private/preview/svg.php
#srv/web/owncloud/lib/private/preview/txt.php
-#srv/web/owncloud/lib/private/preview/unknown.php
#srv/web/owncloud/lib/private/previewmanager.php
#srv/web/owncloud/lib/private/repair.php
#srv/web/owncloud/lib/private/repairstep.php
#srv/web/owncloud/lib/private/search/result/folder.php
#srv/web/owncloud/lib/private/search/result/image.php
#srv/web/owncloud/lib/private/server.php
+#srv/web/owncloud/lib/private/serviceunavailableexception.php
#srv/web/owncloud/lib/private/session
#srv/web/owncloud/lib/private/session/internal.php
#srv/web/owncloud/lib/private/session/memory.php
#srv/web/owncloud/lib/public/icontainer.php
#srv/web/owncloud/lib/public/idb.php
#srv/web/owncloud/lib/public/idbconnection.php
+#srv/web/owncloud/lib/public/igroup.php
+#srv/web/owncloud/lib/public/igroupmanager.php
#srv/web/owncloud/lib/public/ihelper.php
#srv/web/owncloud/lib/public/il10n.php
#srv/web/owncloud/lib/public/ilogger.php
#srv/web/owncloud/lib/repair
#srv/web/owncloud/lib/repair/collation.php
#srv/web/owncloud/lib/repair/innodb.php
+#srv/web/owncloud/lib/repair/preview.php
#srv/web/owncloud/lib/repair/repairmimetypes.php
+#srv/web/owncloud/lib/repair/searchlucenetables.php
#srv/web/owncloud/occ
#srv/web/owncloud/ocs
#srv/web/owncloud/ocs/providers.php
#srv/web/owncloud/search/templates
#srv/web/owncloud/search/templates/part.results.php
#srv/web/owncloud/settings
-#srv/web/owncloud/settings/admin
#srv/web/owncloud/settings/admin.php
-#srv/web/owncloud/settings/admin/controller.php
#srv/web/owncloud/settings/ajax
#srv/web/owncloud/settings/ajax/apps
#srv/web/owncloud/settings/ajax/apps/ocs.php
#srv/web/owncloud/settings/ajax/changedisplayname.php
+#srv/web/owncloud/settings/ajax/checksetup.php
#srv/web/owncloud/settings/ajax/creategroup.php
#srv/web/owncloud/settings/ajax/createuser.php
#srv/web/owncloud/settings/ajax/decryptall.php
#srv/web/owncloud/settings/ajax/deletekeys.php
#srv/web/owncloud/settings/ajax/disableapp.php
#srv/web/owncloud/settings/ajax/enableapp.php
-#srv/web/owncloud/settings/ajax/excludegroups.php
+#srv/web/owncloud/settings/ajax/geteveryonecount.php
#srv/web/owncloud/settings/ajax/getlog.php
#srv/web/owncloud/settings/ajax/grouplist.php
#srv/web/owncloud/settings/ajax/installapp.php
#srv/web/owncloud/settings/ajax/uninstallapp.php
#srv/web/owncloud/settings/ajax/updateapp.php
#srv/web/owncloud/settings/ajax/userlist.php
+#srv/web/owncloud/settings/application.php
#srv/web/owncloud/settings/apps.php
#srv/web/owncloud/settings/changepassword
#srv/web/owncloud/settings/changepassword/controller.php
+#srv/web/owncloud/settings/controller
+#srv/web/owncloud/settings/controller/mailsettingscontroller.php
#srv/web/owncloud/settings/css
#srv/web/owncloud/settings/css/settings.css
#srv/web/owncloud/settings/help.php
#srv/web/owncloud/settings/js/apps.js
#srv/web/owncloud/settings/js/log.js
#srv/web/owncloud/settings/js/personal.js
+#srv/web/owncloud/settings/js/settings.js
#srv/web/owncloud/settings/js/users
#srv/web/owncloud/settings/js/users/deleteHandler.js
#srv/web/owncloud/settings/js/users/filter.js
#srv/web/owncloud/settings/templates/users/part.grouplist.php
#srv/web/owncloud/settings/templates/users/part.setquota.php
#srv/web/owncloud/settings/templates/users/part.userlist.php
+#srv/web/owncloud/settings/tests
+#srv/web/owncloud/settings/tests/js
+#srv/web/owncloud/settings/tests/js/users
+#srv/web/owncloud/settings/tests/js/users/deleteHandlerSpec.js
#srv/web/owncloud/settings/users.php
#srv/web/owncloud/status.php
#srv/web/owncloud/themes
usr/bin/qemu-io
usr/bin/qemu-nbd
usr/bin/qemu-system-arm
+usr/bin/qemu-system-i386
+usr/libexec/qemu-bridge-helper
#usr/share/doc/qemu
#usr/share/doc/qemu/qemu-doc.html
#usr/share/doc/qemu/qemu-tech.html
+#usr/share/doc/qemu/qmp-commands.txt
#usr/share/man/man1/qemu-img.1
#usr/share/man/man1/qemu.1
#usr/share/man/man8/qemu-nbd.8
-usr/share/qemu
+#usr/share/qemu
+usr/share/qemu/QEMU,cgthree.bin
+usr/share/qemu/QEMU,tcx.bin
+usr/share/qemu/acpi-dsdt.aml
usr/share/qemu/bamboo.dtb
+usr/share/qemu/bios-256k.bin
usr/share/qemu/bios.bin
-usr/share/qemu/extboot.bin
+usr/share/qemu/efi-e1000.rom
+usr/share/qemu/efi-eepro100.rom
+usr/share/qemu/efi-ne2k_pci.rom
+usr/share/qemu/efi-pcnet.rom
+usr/share/qemu/efi-rtl8139.rom
+usr/share/qemu/efi-virtio.rom
usr/share/qemu/keymaps
usr/share/qemu/keymaps/ar
+usr/share/qemu/keymaps/bepo
usr/share/qemu/keymaps/common
+usr/share/qemu/keymaps/cz
usr/share/qemu/keymaps/da
usr/share/qemu/keymaps/de
usr/share/qemu/keymaps/de-ch
usr/share/qemu/keymaps/sv
usr/share/qemu/keymaps/th
usr/share/qemu/keymaps/tr
+usr/share/qemu/kvmvapic.bin
usr/share/qemu/linuxboot.bin
-usr/share/qemu/mpc8544ds.dtb
usr/share/qemu/multiboot.bin
usr/share/qemu/openbios-ppc
usr/share/qemu/openbios-sparc32
usr/share/qemu/openbios-sparc64
+usr/share/qemu/palcode-clipper
usr/share/qemu/petalogix-ml605.dtb
usr/share/qemu/petalogix-s3adsp1800.dtb
usr/share/qemu/ppc_rom.bin
usr/share/qemu/pxe-pcnet.rom
usr/share/qemu/pxe-rtl8139.rom
usr/share/qemu/pxe-virtio.rom
+usr/share/qemu/q35-acpi-dsdt.aml
+usr/share/qemu/qemu-icon.bmp
+usr/share/qemu/qemu_logo_no_text.svg
+usr/share/qemu/s390-ccw.img
usr/share/qemu/s390-zipl.rom
+usr/share/qemu/sgabios.bin
usr/share/qemu/slof.bin
usr/share/qemu/spapr-rtas.bin
-usr/share/qemu/vapic.bin
+usr/share/qemu/trace-events
+usr/share/qemu/u-boot.e500
usr/share/qemu/vgabios-cirrus.bin
usr/share/qemu/vgabios-qxl.bin
usr/share/qemu/vgabios-stdvga.bin
usr/share/qemu/vgabios-vmware.bin
usr/share/qemu/vgabios.bin
+#usr/var/run
+++ /dev/null
-etc/rc.d/init.d/teamspeak
-opt/teamspeak
-var/ipfire/backup/addons/includes/teamspeak
-#etc/logrotate.d
etc/logrotate.d/tor
etc/rc.d/init.d/tor
etc/rc.d/rc0.d/K40tor
etc/rc.d/rc3.d/S60tor
etc/rc.d/rc6.d/K40tor
#etc/tor
-#etc/tor/tor-tsocks.conf
etc/tor/torrc
srv/web/ipfire/cgi-bin/tor.cgi
usr/bin/tor
x509_extensions = usr_cert
default_days = 999999
default_crl_days= 30
-default_md = md5
+default_md = sha256
preserve = no
policy = policy_match
email_in_dn = no
emailAddress = optional
[ req ]
-default_bits = 1024
+default_bits = 2048
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
attributes = req_attributes
--- /dev/null
+# Options for the charon IKE daemon.
+charon {
+ # Accept unencrypted ID and HASH payloads in IKEv1 Main Mode.
+ accept_unencrypted_mainmode_messages = yes
+
+ # Maximum number of half-open IKE_SAs for a single peer IP.
+ # block_threshold = 5
+
+ # Whether relations in validated certificate chains should be cached in
+ # memory.
+ # cert_cache = yes
+
+ # Send Cisco Unity vendor ID payload (IKEv1 only).
+ cisco_unity = yes
+
+ # Close the IKE_SA if setup of the CHILD_SA along with IKE_AUTH failed.
+ # close_ike_on_child_failure = no
+
+ # Number of half-open IKE_SAs that activate the cookie mechanism.
+ # cookie_threshold = 10
+
+ # Use ANSI X9.42 DH exponent size or optimum size matched to cryptographic
+ # strength.
+ # dh_exponent_ansi_x9_42 = yes
+
+ # DNS server assigned to peer via configuration payload (CP).
+ # dns1 =
+
+ # DNS server assigned to peer via configuration payload (CP).
+ # dns2 =
+
+ # Enable Denial of Service protection using cookies and aggressiveness
+ # checks.
+ # dos_protection = yes
+
+ # Compliance with the errata for RFC 4753.
+ # ecp_x_coordinate_only = yes
+
+ # Free objects during authentication (might conflict with plugins).
+ # flush_auth_cfg = no
+
+ # Maximum size (complete IP datagram size in bytes) of a sent IKE fragment
+ # when using proprietary IKEv1 or standardized IKEv2 fragmentation (0 for
+ # address family specific default values). If specified this limit is
+ # used for both IPv4 and IPv6.
+ # fragment_size = 0
+
+ # Name of the group the daemon changes to after startup.
+ # group =
+
+ # Timeout in seconds for connecting IKE_SAs (also see IKE_SA_INIT DROPPING).
+ # half_open_timeout = 30
+
+ # Enable hash and URL support.
+ # hash_and_url = no
+
+ # Allow IKEv1 Aggressive Mode with pre-shared keys as responder.
+ # i_dont_care_about_security_and_use_aggressive_mode_psk = no
+
+ # A space-separated list of routing tables to be excluded from route
+ # lookups.
+ # ignore_routing_tables =
+
+ # Maximum number of IKE_SAs that can be established at the same time before
+ # new connection attempts are blocked.
+ # ikesa_limit = 0
+
+ # Number of exclusively locked segments in the hash table.
+ ikesa_table_segments = 4
+
+ # Size of the IKE_SA hash table.
+ ikesa_table_size = 32
+
+ # Whether to close IKE_SA if the only CHILD_SA closed due to inactivity.
+ # inactivity_close_ike = no
+
+ # Limit new connections based on the current number of half open IKE_SAs,
+ # see IKE_SA_INIT DROPPING in strongswan.conf(5).
+ init_limit_half_open = 1000
+
+ # Limit new connections based on the number of queued jobs.
+ # init_limit_job_load = 0
+
+ # Causes charon daemon to ignore IKE initiation requests.
+ # initiator_only = no
+
+ # Install routes into a separate routing table for established IPsec
+ # tunnels.
+ # install_routes = yes
+
+ # Install virtual IP addresses.
+ # install_virtual_ip = yes
+
+ # The name of the interface on which virtual IP addresses should be
+ # installed.
+ # install_virtual_ip_on =
+
+ # Check daemon, libstrongswan and plugin integrity at startup.
+ # integrity_test = no
+
+ # A comma-separated list of network interfaces that should be ignored, if
+ # interfaces_use is specified this option has no effect.
+ # interfaces_ignore =
+
+ # A comma-separated list of network interfaces that should be used by
+ # charon. All other interfaces are ignored.
+ # interfaces_use =
+
+ # NAT keep alive interval.
+ # keep_alive = 20s
+
+ # Plugins to load in the IKE daemon charon.
+ # load =
+
+ # Determine plugins to load via each plugin's load option.
+ # load_modular = no
+
+ # Maximum packet size accepted by charon.
+ # max_packet = 10000
+
+ # Enable multiple authentication exchanges (RFC 4739).
+ # multiple_authentication = yes
+
+ # WINS servers assigned to peer via configuration payload (CP).
+ # nbns1 =
+
+ # WINS servers assigned to peer via configuration payload (CP).
+ # nbns2 =
+
+ # UDP port used locally. If set to 0 a random port will be allocated.
+ # port = 500
+
+ # UDP port used locally in case of NAT-T. If set to 0 a random port will be
+ # allocated. Has to be different from charon.port, otherwise a random port
+ # will be allocated.
+ # port_nat_t = 4500
+
+ # By default public IPv6 addresses are preferred over temporary ones (RFC
+ # 4941), to make connections more stable. Enable this option to reverse
+ # this.
+ # prefer_temporary_addrs = no
+
+ # Process RTM_NEWROUTE and RTM_DELROUTE events.
+ # process_route = yes
+
+ # Delay in ms for receiving packets, to simulate larger RTT.
+ # receive_delay = 0
+
+ # Delay request messages.
+ # receive_delay_request = yes
+
+ # Delay response messages.
+ # receive_delay_response = yes
+
+ # Specific IKEv2 message type to delay, 0 for any.
+ # receive_delay_type = 0
+
+ # Size of the AH/ESP replay window, in packets.
+ # replay_window = 32
+
+ # Base to use for calculating exponential back off, see IKEv2 RETRANSMISSION
+ # in strongswan.conf(5).
+ # retransmit_base = 1.8
+
+ # Timeout in seconds before sending first retransmit.
+ # retransmit_timeout = 4.0
+
+ # Number of times to retransmit a packet before giving up.
+ # retransmit_tries = 5
+
+ # Interval to use when retrying to initiate an IKE_SA (e.g. if DNS
+ # resolution failed), 0 to disable retries.
+ # retry_initiate_interval = 0
+
+ # Initiate CHILD_SA within existing IKE_SAs.
+ # reuse_ikesa = yes
+
+ # Numerical routing table to install routes to.
+ # routing_table =
+
+ # Priority of the routing table.
+ # routing_table_prio =
+
+ # Delay in ms for sending packets, to simulate larger RTT.
+ # send_delay = 0
+
+ # Delay request messages.
+ # send_delay_request = yes
+
+ # Delay response messages.
+ # send_delay_response = yes
+
+ # Specific IKEv2 message type to delay, 0 for any.
+ # send_delay_type = 0
+
+ # Send strongSwan vendor ID payload
+ # send_vendor_id = no
+
+ # Number of worker threads in charon.
+ # threads = 16
+
+ # Name of the user the daemon changes to after startup.
+ # user =
+
+ crypto_test {
+
+ # Benchmark crypto algorithms and order them by efficiency.
+ # bench = no
+
+ # Buffer size used for crypto benchmark.
+ # bench_size = 1024
+
+ # Number of iterations to test each algorithm.
+ # bench_time = 50
+
+ # Test crypto algorithms during registration (requires test vectors
+ # provided by the test-vectors plugin).
+ # on_add = no
+
+ # Test crypto algorithms on each crypto primitive instantiation.
+ # on_create = no
+
+ # Strictly require at least one test vector to enable an algorithm.
+ # required = no
+
+ # Whether to test RNG with TRUE quality; requires a lot of entropy.
+ # rng_true = no
+
+ }
+
+ host_resolver {
+
+ # Maximum number of concurrent resolver threads (they are terminated if
+ # unused).
+ # max_threads = 3
+
+ # Minimum number of resolver threads to keep around.
+ # min_threads = 0
+
+ }
+
+ leak_detective {
+
+ # Includes source file names and line numbers in leak detective output.
+ # detailed = yes
+
+ # Threshold in bytes for leaks to be reported (0 to report all).
+ # usage_threshold = 10240
+
+ # Threshold in number of allocations for leaks to be reported (0 to
+ # report all).
+ # usage_threshold_count = 0
+
+ }
+
+ processor {
+
+ # Section to configure the number of reserved threads per priority class
+ # see JOB PRIORITY MANAGEMENT in strongswan.conf(5).
+ priority_threads {
+
+ }
+
+ }
+
+ # Section containing a list of scripts (name = path) that are executed when
+ # the daemon is started.
+ start-scripts {
+
+ }
+
+ # Section containing a list of scripts (name = path) that are executed when
+ # the daemon is terminated.
+ stop-scripts {
+
+ }
+
+ tls {
+
+ # List of TLS encryption ciphers.
+ # cipher =
+
+ # List of TLS key exchange methods.
+ # key_exchange =
+
+ # List of TLS MAC algorithms.
+ # mac =
+
+ # List of TLS cipher suites.
+ # suites =
+
+ }
+
+ x509 {
+
+ # Discard certificates with unsupported or unknown critical extensions.
+ # enforce_critical = yes
+
+ }
+
+}
+
ENDTEXT
KERNEL vmlinuz
INITRD instroot
+ APPEND novga
LABEL unattended
MENU LABEL Unattended installation
-uenvcmd=if test "$board" = "panda" ;then run bootpanda; else run bootbananapi; fi;
KVER=xxxKVERxxx
-bootpanda=setenv initrd_high 90000000; fatload mmc 0:1 0x82000000 zImage-ipfire-multi; fatload mmc 0:1 ${fdtaddr} dtb-${KVER}-ipfire-multi/${fdtfile}; setenv bootargs video=800x600 console=tty1 rootwait smsc95xx.macaddr=$usbethaddr root=/dev/mmcblk0p3 ro; bootz 0x82000000 - ${fdtaddr};
-bootbananapi=setenv fdt_high ffffffff; fatload mmc 0:1 0x46000000 zImage-ipfire-multi; fatload mmc 0:1 0x49000000 dtb-${KVER}-ipfire-multi/sun7i-a20-bananapi.dtb; setenv bootargs console=ttyS0,115200n8 rootwait root=/dev/mmcblk0p3 rootwait; bootz 0x46000000 - 0x49000000;
+DTBSUNXI=sun7i-a20-bananapi.dtb
+uenvcmd=if test "$board" = "panda" ;then run bootpanda; else run bootsunxi; fi;
+bootpanda=setenv initrd_high 90000000; fatload mmc 0:1 0x82000000 zImage-ipfire-multi; fatload mmc 0:1 ${fdtaddr} dtb-${KVER}-ipfire-multi/${fdtfile}; setenv bootargs video=800x600 console=tty1 rootwait smsc95xx.macaddr=$usbethaddr root=/dev/mmcblk0p3; bootz 0x82000000 - ${fdtaddr};
+bootsunxi=setenv fdt_high ffffffff; fatload mmc 0:1 0x46000000 zImage-ipfire-multi; fatload mmc 0:1 0x49000000 dtb-${KVER}-ipfire-multi/${DTBSUNXI}; fatload mmc 0:1 0x49100000 uInit-ipfire-multi; setenv bootargs console=ttyS0,115200n8 rootwait root=/dev/mmcblk0p3 rootwait; bootz 0x46000000 0x49100000 0x49000000;
--- /dev/null
+# Call a script that checks for the right name of the new device.
+# If it matches the configuration it will be renamed accordingly.
+ACTION=="add", SUBSYSTEM=="net", PROGRAM="/lib/udev/network-hotplug-rename", RESULT=="?*", NAME="$result"
--- /dev/null
+#!/bin/bash
+###############################################################################
+# #
+# IPFire.org - A linux based firewall #
+# Copyright (C) 2015 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/>. #
+# #
+###############################################################################
+
+# Check if all appropriate variables are set
+[ -n "${INTERFACE}" ] || exit 2
+
+# Ignore virtual interfaces, etc.
+case "${INTERFACE}" in
+ lo)
+ exit 0
+ ;;
+ tun*)
+ exit 0
+ ;;
+ ppp*)
+ exit 0
+ ;;
+esac
+
+# Check if INTERFACE actually exists
+[ -d "/sys/class/net/${INTERFACE}" ] || exit 1
+
+# If the network configuration is not readable,
+# we cannot go on.
+if [ ! -r "/var/ipfire/ethernet/settings" ]; then
+ exit 1
+fi
+
+# Read network settings
+eval $(/usr/local/bin/readhash /var/ipfire/ethernet/settings)
+
+# Standard zones
+ZONES="RED GREEN ORANGE BLUE"
+
+# Determine the address of INTERFACE
+ADDRESS="$(</sys/class/net/${INTERFACE}/address)"
+
+# Walk through all zones and find the matching interface
+for zone in ${ZONES}; do
+ address="${zone}_MACADDR"
+ device="${zone}_DEV"
+
+ # Skip if address or device is unset
+ [ -n "${!address}" -a -n "${!device}" ] || continue
+
+ # If a matching interface has been found we will
+ # print the name to which udev will rename it.
+ if [ "${ADDRESS}" = "${!address}" ]; then
+ echo "${!device}"
+ exit 0
+ fi
+done
+
+# If we get here we have not found a matching device,
+# but we won't return an error any way. The new device
+# will remain with the previous name.
+exit 0
- look what is going on: "xm top" or "xm list"
This script can also build a Citrix XenCenter xva image. (Need xz-aware
-xen version. Tested with Citrix Xen Server 6.2.5 beta)
+xen version. Tested with Citrix Xen Server 6.5)
- run "XEN_IMG_TYPE=xva bash xen-image-maker.sh" to build an xva image.
-- import the vm with "xe vm-import file=ipfire.xva"
+- import the vm with "xe vm-import filename=ipfire.xva"
mount -o loop $IMGvar $MNThdd/var
# Install IPFire without kernel modules
-xz -d < $ISODIR/$SNAME-$VERSION.tlz > $TMPDIR/$SNAME-$VERSION.tar
+xz -d < $ISODIR/distro.img > $TMPDIR/$SNAME-$VERSION.tar
tar -C $MNThdd/ -xvf $TMPDIR/$SNAME-$VERSION.tar \
--exclude=lib/modules* --exclude=boot* --numeric-owner
echo "timeout 10" > $MNThdd/boot/grub/grub.conf
echo "default 0" >> $MNThdd/boot/grub/grub.conf
echo "title IPFire ($KERN_TYPE-kernel)" >> $MNThdd/boot/grub/grub.conf
-echo " kernel /vmlinuz-$KVER-ipfire-$KERN_TYPE root=/dev/$P3 rootdelay=10 panic=10 console=$CONSOLE ro" \
+echo " kernel /vmlinuz-$KVER-ipfire-$KERN_TYPE root=/dev/$P3 rootdelay=10 panic=10 console=$CONSOLE" \
>> $MNThdd/boot/grub/grub.conf
-echo " initrd /ipfirerd-$KVER-$KERN_TYPE.img" >> $MNThdd/boot/grub/grub.conf
+echo " initrd /initramfs-$KVER-ipfire-$KERN_TYPE.img" >> $MNThdd/boot/grub/grub.conf
echo "# savedefault 0" >> $MNThdd/boot/grub/grub.conf
ln -s grub.conf $MNThdd/boot/grub/menu.lst
mount --bind /dev $MNThdd/dev
mount --bind /sys $MNThdd/sys
chroot $MNThdd /usr/bin/perl -e "require '/var/ipfire/lang.pl'; &Lang::BuildCacheLang"
-sed -i -e "s|DEVICE1|/dev/$P1|g" $MNThdd/etc/fstab
-sed -i -e "s|DEVICE2|/dev/$P2|g" $MNThdd/etc/fstab
-sed -i -e "s|DEVICE3|/dev/$P3|g" $MNThdd/etc/fstab
-sed -i -e "s|DEVICE4|/dev/$P4|g" $MNThdd/etc/fstab
-sed -i -e "s|FSTYPE|$FSTYPE|g" $MNThdd/etc/fstab
+# create fstab
+echo "/dev/$P1 /boot auto defaults 1 3" > $MNThdd/etc/fstab
+echo "/dev/$P2 swap swap defaults 0 0" >> $MNThdd/etc/fstab
+echo "/dev/$P3 / auto defaults 1 1" >> $MNThdd/etc/fstab
+echo "/dev/$P4 /var auto defaults 1 2" >> $MNThdd/etc/fstab
+
#Remove root / fstab check
rm -rf $MNThdd/etc/rc.d/rcsysinit.d/S19checkfstab
--- /dev/null
+# -*- Makefile -*-
+#
+build_ACCOUNT=m
+build_CHAOS=m
+build_DELUDE=m
+build_DHCPMAC=m
+build_DNETMAP=m
+build_ECHO=m
+build_IPMARK=m
+build_LOGMARK=m
+build_SYSRQ=n
+build_TARPIT=m
+build_condition=m
+build_fuzzy=m
+build_geoip=m
+build_gradm=n
+build_iface=m
+build_ipp2p=m
+build_ipv4options=m
+build_length2=m
+build_lscan=m
+build_pknock=m
+build_psd=m
+build_quota2=m
WARNING: translation string unused: behind a proxy
WARNING: translation string unused: bitrate
WARNING: translation string unused: bleeding rules
+WARNING: translation string unused: block
WARNING: translation string unused: blue access use hint
WARNING: translation string unused: blue interface
WARNING: translation string unused: cache management
WARNING: translation string unused: fwhost attention
WARNING: translation string unused: fwhost blue
WARNING: translation string unused: fwhost changeremark
+WARNING: translation string unused: fwhost cust geoip
WARNING: translation string unused: fwhost err addrgrp
WARNING: translation string unused: fwhost err hostorip
WARNING: translation string unused: fwhost err mac
WARNING: translation string unused: gen static key
WARNING: translation string unused: generate
WARNING: translation string unused: genkey
+WARNING: translation string unused: geoipblock country code
+WARNING: translation string unused: geoipblock country name
+WARNING: translation string unused: geoipblock flag
WARNING: translation string unused: green interface
WARNING: translation string unused: gz with key
WARNING: translation string unused: hint
WARNING: translation string unused: ike grouptype
WARNING: translation string unused: ike integrity
WARNING: translation string unused: ike lifetime
+WARNING: translation string unused: ike lifetime should be between 1 and 24 hours
WARNING: translation string unused: import
WARNING: translation string unused: importkey
WARNING: translation string unused: in
WARNING: translation string unused: transparent on
WARNING: translation string unused: umount
WARNING: translation string unused: umount removable media before to unplug
+WARNING: translation string unused: unblock
+WARNING: translation string unused: unblock all
WARNING: translation string unused: unencrypted
WARNING: translation string unused: update transcript
WARNING: translation string unused: updates
WARNING: untranslated string: community rules
WARNING: untranslated string: dead peer detection
WARNING: untranslated string: emerging rules
+WARNING: untranslated string: fwhost cust geoipgrp
WARNING: untranslated string: fwhost err hostip
+WARNING: untranslated string: ike lifetime should be between 1 and 8 hours
WARNING: untranslated string: no data
WARNING: untranslated string: qos add subclass
WARNING: untranslated string: route config changed
WARNING: untranslated string: routing config changed
WARNING: untranslated string: routing table
WARNING: untranslated string: show tls-auth key
+WARNING: untranslated string: vpn statistics n2n
WARNING: translation string unused: bewan adsl usb
WARNING: translation string unused: bitrate
WARNING: translation string unused: bleeding rules
+WARNING: translation string unused: block
WARNING: translation string unused: blue access use hint
WARNING: translation string unused: blue interface
WARNING: translation string unused: cache management
WARNING: translation string unused: fwhost attention
WARNING: translation string unused: fwhost blue
WARNING: translation string unused: fwhost changeremark
+WARNING: translation string unused: fwhost cust geoip
WARNING: translation string unused: fwhost err addrgrp
WARNING: translation string unused: fwhost err hostorip
WARNING: translation string unused: fwhost err mac
WARNING: translation string unused: gen static key
WARNING: translation string unused: generate
WARNING: translation string unused: genkey
+WARNING: translation string unused: geoipblock country code
+WARNING: translation string unused: geoipblock country name
+WARNING: translation string unused: geoipblock flag
WARNING: translation string unused: green interface
WARNING: translation string unused: gz with key
WARNING: translation string unused: hint
WARNING: translation string unused: ike grouptype
WARNING: translation string unused: ike integrity
WARNING: translation string unused: ike lifetime
+WARNING: translation string unused: ike lifetime should be between 1 and 24 hours
WARNING: translation string unused: import
WARNING: translation string unused: importkey
WARNING: translation string unused: in
WARNING: translation string unused: transparent on
WARNING: translation string unused: umount
WARNING: translation string unused: umount removable media before to unplug
+WARNING: translation string unused: unblock
+WARNING: translation string unused: unblock all
WARNING: translation string unused: unencrypted
WARNING: translation string unused: update transcript
WARNING: translation string unused: updates
WARNING: translation string unused: yearly firewallhits
WARNING: untranslated string: Scan for Songs
WARNING: untranslated string: bytes
+WARNING: untranslated string: fwhost cust geoipgrp
WARNING: untranslated string: fwhost err hostip
+WARNING: untranslated string: ike lifetime should be between 1 and 8 hours
WARNING: untranslated string: no data
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: vpn statistics n2n
WARNING: translation string unused: gen static key
WARNING: translation string unused: generate
WARNING: translation string unused: genkey
+WARNING: translation string unused: geoipblock country code
+WARNING: translation string unused: geoipblock country name
+WARNING: translation string unused: geoipblock flag
WARNING: translation string unused: green interface
WARNING: translation string unused: gz with key
WARNING: translation string unused: hint
WARNING: translation string unused: ike grouptype
WARNING: translation string unused: ike integrity
WARNING: translation string unused: ike lifetime
+WARNING: translation string unused: ike lifetime should be between 1 and 24 hours
WARNING: translation string unused: import
WARNING: translation string unused: importkey
WARNING: translation string unused: in
WARNING: untranslated string: ccd routes
WARNING: untranslated string: ccd subnet
WARNING: untranslated string: ccd used
+WARNING: untranslated string: check all
WARNING: untranslated string: count
WARNING: untranslated string: countries
WARNING: untranslated string: country codes and flags
WARNING: untranslated string: fwdfw wd_tue
WARNING: untranslated string: fwdfw wd_wed
WARNING: untranslated string: fwhost OpenVPN N-2-N
+WARNING: untranslated string: fwhost addgeoipgrp
WARNING: untranslated string: fwhost addgrp
WARNING: untranslated string: fwhost addgrpname
WARNING: untranslated string: fwhost addhost
WARNING: untranslated string: fwhost ccdnet
WARNING: untranslated string: fwhost change
WARNING: untranslated string: fwhost cust addr
+WARNING: untranslated string: fwhost cust geoipgroup
+WARNING: untranslated string: fwhost cust geoipgrp
+WARNING: untranslated string: fwhost cust geoiplocation
WARNING: untranslated string: fwhost cust grp
WARNING: untranslated string: fwhost cust net
WARNING: untranslated string: fwhost cust service
WARNING: untranslated string: fwhost ipsec net
WARNING: untranslated string: fwhost menu
WARNING: untranslated string: fwhost netaddress
+WARNING: untranslated string: fwhost newgeoipgrp
WARNING: untranslated string: fwhost newgrp
WARNING: untranslated string: fwhost newhost
WARNING: untranslated string: fwhost newnet
WARNING: untranslated string: generate dh key
WARNING: untranslated string: grouptype
WARNING: untranslated string: hardware support
+WARNING: untranslated string: ike lifetime should be between 1 and 8 hours
WARNING: untranslated string: imei
WARNING: untranslated string: imsi
WARNING: untranslated string: incoming compression in bytes per second
WARNING: untranslated string: tor traffic limit soft
WARNING: untranslated string: tor traffic read written
WARNING: untranslated string: tor use exit nodes
+WARNING: untranslated string: uncheck all
WARNING: untranslated string: uplink
WARNING: untranslated string: upload dh key
WARNING: untranslated string: uptime load average
WARNING: untranslated string: vendor
WARNING: untranslated string: visit us at
WARNING: untranslated string: vpn keyexchange
+WARNING: untranslated string: vpn statistic n2n
+WARNING: untranslated string: vpn statistic rw
+WARNING: untranslated string: vpn statistics n2n
WARNING: untranslated string: wlan client
WARNING: untranslated string: wlan client advanced settings
WARNING: untranslated string: wlan client and
WARNING: translation string unused: ike grouptype
WARNING: translation string unused: ike integrity
WARNING: translation string unused: ike lifetime
+WARNING: translation string unused: ike lifetime should be between 1 and 24 hours
WARNING: translation string unused: import
WARNING: translation string unused: importkey
WARNING: translation string unused: in
WARNING: untranslated string: ccd routes
WARNING: untranslated string: ccd subnet
WARNING: untranslated string: ccd used
+WARNING: untranslated string: check all
WARNING: untranslated string: count
WARNING: untranslated string: countries
WARNING: untranslated string: country codes and flags
WARNING: untranslated string: fwdfw wd_tue
WARNING: untranslated string: fwdfw wd_wed
WARNING: untranslated string: fwhost OpenVPN N-2-N
+WARNING: untranslated string: fwhost addgeoipgrp
WARNING: untranslated string: fwhost addgrp
WARNING: untranslated string: fwhost addgrpname
WARNING: untranslated string: fwhost addhost
WARNING: untranslated string: fwhost ccdnet
WARNING: untranslated string: fwhost change
WARNING: untranslated string: fwhost cust addr
+WARNING: untranslated string: fwhost cust geoipgroup
+WARNING: untranslated string: fwhost cust geoipgrp
+WARNING: untranslated string: fwhost cust geoiplocation
WARNING: untranslated string: fwhost cust grp
WARNING: untranslated string: fwhost cust net
WARNING: untranslated string: fwhost cust service
WARNING: untranslated string: fwhost ipsec net
WARNING: untranslated string: fwhost menu
WARNING: untranslated string: fwhost netaddress
+WARNING: untranslated string: fwhost newgeoipgrp
WARNING: untranslated string: fwhost newgrp
WARNING: untranslated string: fwhost newhost
WARNING: untranslated string: fwhost newnet
WARNING: untranslated string: fwhost welcome
WARNING: untranslated string: gen dh
WARNING: untranslated string: generate dh key
+WARNING: untranslated string: geoip
+WARNING: untranslated string: geoipblock
+WARNING: untranslated string: geoipblock block countries
+WARNING: untranslated string: geoipblock configuration
+WARNING: untranslated string: geoipblock country is allowed
+WARNING: untranslated string: geoipblock country is blocked
+WARNING: untranslated string: geoipblock enable feature
WARNING: untranslated string: grouptype
WARNING: untranslated string: hardware support
+WARNING: untranslated string: ike lifetime should be between 1 and 8 hours
WARNING: untranslated string: imei
WARNING: untranslated string: imsi
WARNING: untranslated string: incoming compression in bytes per second
WARNING: untranslated string: tor traffic limit soft
WARNING: untranslated string: tor traffic read written
WARNING: untranslated string: tor use exit nodes
+WARNING: untranslated string: uncheck all
WARNING: untranslated string: uplink
WARNING: untranslated string: upload dh key
WARNING: untranslated string: upload new ruleset
WARNING: untranslated string: vendor
WARNING: untranslated string: visit us at
WARNING: untranslated string: vpn keyexchange
+WARNING: untranslated string: vpn statistic n2n
+WARNING: untranslated string: vpn statistic rw
+WARNING: untranslated string: vpn statistics n2n
WARNING: untranslated string: wlan client
WARNING: untranslated string: wlan client advanced settings
WARNING: untranslated string: wlan client and
--- /dev/null
+WARNING: translation string unused: Client status and controlc
+WARNING: translation string unused: ConnSched scheduler
+WARNING: translation string unused: ConnSched select profile
+WARNING: translation string unused: HDD temperature
+WARNING: translation string unused: Level7 rule
+WARNING: translation string unused: Local VPN IP
+WARNING: translation string unused: Ping
+WARNING: translation string unused: Queuelenght
+WARNING: translation string unused: Remote IP
+WARNING: translation string unused: Remote VPN IP
+WARNING: translation string unused: Resolv
+WARNING: translation string unused: TOS Bits
+WARNING: translation string unused: Verbose
+WARNING: translation string unused: access allowed
+WARNING: translation string unused: access refused with this oinkcode
+WARNING: translation string unused: add a new rule
+WARNING: translation string unused: add network
+WARNING: translation string unused: add new ovpn
+WARNING: translation string unused: add service
+WARNING: translation string unused: add xtaccess
+WARNING: translation string unused: add-route
+WARNING: translation string unused: admin user password has been changed
+WARNING: translation string unused: administrator user password
+WARNING: translation string unused: advproxy LDAP auth
+WARNING: translation string unused: advproxy NTLM auth
+WARNING: translation string unused: advproxy advanced proxy
+WARNING: translation string unused: advproxy chgwebpwd ERROR
+WARNING: translation string unused: advproxy chgwebpwd SUCCESS
+WARNING: translation string unused: advproxy chgwebpwd change password
+WARNING: translation string unused: advproxy chgwebpwd change web password
+WARNING: translation string unused: advproxy chgwebpwd new password
+WARNING: translation string unused: advproxy chgwebpwd new password confirm
+WARNING: translation string unused: advproxy chgwebpwd old password
+WARNING: translation string unused: advproxy chgwebpwd username
+WARNING: translation string unused: advproxy cre disabled
+WARNING: translation string unused: advproxy errmsg change fail
+WARNING: translation string unused: advproxy errmsg change success
+WARNING: translation string unused: advproxy errmsg invalid user
+WARNING: translation string unused: advproxy errmsg no password
+WARNING: translation string unused: advproxy errmsg password incorrect
+WARNING: translation string unused: advproxy no cre groups
+WARNING: translation string unused: advproxy ssadvanced proxy
+WARNING: translation string unused: advproxy update information
+WARNING: translation string unused: advproxy update notification
+WARNING: translation string unused: again
+WARNING: translation string unused: age seconds
+WARNING: translation string unused: age shour
+WARNING: translation string unused: age sminute
+WARNING: translation string unused: age ssecond
+WARNING: translation string unused: alcatelusb help
+WARNING: translation string unused: alcatelusb upload
+WARNING: translation string unused: all interfaces
+WARNING: translation string unused: all updates installed
+WARNING: translation string unused: allmsg
+WARNING: translation string unused: alt information
+WARNING: translation string unused: alt ovpn
+WARNING: translation string unused: alt vpn
+WARNING: translation string unused: and
+WARNING: translation string unused: ansi t1.483
+WARNING: translation string unused: apply
+WARNING: translation string unused: archive not exist
+WARNING: translation string unused: attemps
+WARNING: translation string unused: available updates
+WARNING: translation string unused: avoid dod
+WARNING: translation string unused: backup archive
+WARNING: translation string unused: backup clear archive
+WARNING: translation string unused: backup config floppy
+WARNING: translation string unused: backup configuration
+WARNING: translation string unused: backup erase key
+WARNING: translation string unused: backup explain key
+WARNING: translation string unused: backup explain key li1
+WARNING: translation string unused: backup explain key li2
+WARNING: translation string unused: backup explain key li3
+WARNING: translation string unused: backup explain key no1
+WARNING: translation string unused: backup explain key no2
+WARNING: translation string unused: backup export key
+WARNING: translation string unused: backup extract key
+WARNING: translation string unused: backup generate key
+WARNING: translation string unused: backup import dat file
+WARNING: translation string unused: backup import key
+WARNING: translation string unused: backup key
+WARNING: translation string unused: backup key file
+WARNING: translation string unused: backup key info
+WARNING: translation string unused: backup media info
+WARNING: translation string unused: backup missing key
+WARNING: translation string unused: backup password
+WARNING: translation string unused: backup protect key password
+WARNING: translation string unused: backup sets
+WARNING: translation string unused: backup to floppy
+WARNING: translation string unused: bad characters in
+WARNING: translation string unused: behind a proxy
+WARNING: translation string unused: bewan adsl pci st
+WARNING: translation string unused: bewan adsl usb
+WARNING: translation string unused: bitrate
+WARNING: translation string unused: bleeding rules
+WARNING: translation string unused: blue access use hint
+WARNING: translation string unused: blue interface
+WARNING: translation string unused: cache management
+WARNING: translation string unused: cache size
+WARNING: translation string unused: calamaris report interval (in minutes)
+WARNING: translation string unused: calc traffic all x minutes
+WARNING: translation string unused: cant enable xtaccess
+WARNING: translation string unused: capsinactive
+WARNING: translation string unused: ccd err iroute
+WARNING: translation string unused: ccd err netadr
+WARNING: translation string unused: cfg restart
+WARNING: translation string unused: check for net traffic update
+WARNING: translation string unused: choose config
+WARNING: translation string unused: choose media
+WARNING: translation string unused: clear cache
+WARNING: translation string unused: compression
+WARNING: translation string unused: connect
+WARNING: translation string unused: connect the modem
+WARNING: translation string unused: core notice 1
+WARNING: translation string unused: core notice 2
+WARNING: translation string unused: core notice 3
+WARNING: translation string unused: could not connect to
+WARNING: translation string unused: could not connect to www ipcop org
+WARNING: translation string unused: could not connect to www ipfire org
+WARNING: translation string unused: could not create directory
+WARNING: translation string unused: could not download latest patch list
+WARNING: translation string unused: could not download the available updates list
+WARNING: translation string unused: could not open available updates file
+WARNING: translation string unused: could not open installed updates file
+WARNING: translation string unused: could not open update information file
+WARNING: translation string unused: create
+WARNING: translation string unused: create new backup
+WARNING: translation string unused: current dynamic leases
+WARNING: translation string unused: current media
+WARNING: translation string unused: current ovpn
+WARNING: translation string unused: current profile
+WARNING: translation string unused: custom networks
+WARNING: translation string unused: custom services
+WARNING: translation string unused: daily firewallhits
+WARNING: translation string unused: dat without key
+WARNING: translation string unused: day-graph
+WARNING: translation string unused: dbfile
+WARNING: translation string unused: ddns help dnsmadeeasy
+WARNING: translation string unused: ddns help freedns
+WARNING: translation string unused: ddns help plus
+WARNING: translation string unused: ddns minimize updates
+WARNING: translation string unused: ddns noip prefix
+WARNING: translation string unused: debugme
+WARNING: translation string unused: deep scan directories
+WARNING: translation string unused: default ip
+WARNING: translation string unused: default networks
+WARNING: translation string unused: default services
+WARNING: translation string unused: description
+WARNING: translation string unused: destination ip bad
+WARNING: translation string unused: destination ip or net
+WARNING: translation string unused: destination net
+WARNING: translation string unused: destination port overlaps
+WARNING: translation string unused: dh name is invalid
+WARNING: translation string unused: dhcp base ip fixed lease
+WARNING: translation string unused: dhcp create fixed leases
+WARNING: translation string unused: dhcp fixed lease err1
+WARNING: translation string unused: dhcp fixed lease help1
+WARNING: translation string unused: dhcp mode
+WARNING: translation string unused: dhcp server disabled on blue interface
+WARNING: translation string unused: dhcp server enabled on blue interface
+WARNING: translation string unused: dial user password
+WARNING: translation string unused: dial user password has been changed
+WARNING: translation string unused: dialup settings
+WARNING: translation string unused: disconnect
+WARNING: translation string unused: disconnects
+WARNING: translation string unused: display traffic at home
+WARNING: translation string unused: display webinterface effects
+WARNING: translation string unused: dmz pinhole configuration
+WARNING: translation string unused: dmz pinhole rule added
+WARNING: translation string unused: dmz pinhole rule removed
+WARNING: translation string unused: dmzpinholes for same net not necessary
+WARNING: translation string unused: dns server
+WARNING: translation string unused: do not log this port list
+WARNING: translation string unused: domain not set
+WARNING: translation string unused: donation-link
+WARNING: translation string unused: done
+WARNING: translation string unused: download dh parameter
+WARNING: translation string unused: driver
+WARNING: translation string unused: dstprt range overlaps
+WARNING: translation string unused: dstprt within existing
+WARNING: translation string unused: dynamic dns client
+WARNING: translation string unused: eciadsl help
+WARNING: translation string unused: eciadsl upload
+WARNING: translation string unused: edit a rule
+WARNING: translation string unused: edit network
+WARNING: translation string unused: edit service
+WARNING: translation string unused: editor
+WARNING: translation string unused: eg
+WARNING: translation string unused: email server can not be empty
+WARNING: translation string unused: enable javascript
+WARNING: translation string unused: enable wildcards
+WARNING: translation string unused: enabled on
+WARNING: translation string unused: enabledtitle
+WARNING: translation string unused: encrypted
+WARNING: translation string unused: err bk 1
+WARNING: translation string unused: err bk 10 password
+WARNING: translation string unused: err bk 2 key
+WARNING: translation string unused: err bk 3 tar
+WARNING: translation string unused: err bk 4 gz
+WARNING: translation string unused: err bk 5 encrypt
+WARNING: translation string unused: err rs 1
+WARNING: translation string unused: err rs 6 decrypt
+WARNING: translation string unused: err rs 7 untartst
+WARNING: translation string unused: err rs 8 untar
+WARNING: translation string unused: error config
+WARNING: translation string unused: error external access
+WARNING: translation string unused: esp encryption
+WARNING: translation string unused: esp grouptype
+WARNING: translation string unused: esp integrity
+WARNING: translation string unused: esp keylife
+WARNING: translation string unused: expected
+WARNING: translation string unused: expertoptions
+WARNING: translation string unused: exportkey
+WARNING: translation string unused: external access
+WARNING: translation string unused: external access configuration
+WARNING: translation string unused: external access rule added
+WARNING: translation string unused: external access rule changed
+WARNING: translation string unused: external access rule removed
+WARNING: translation string unused: extrahd
+WARNING: translation string unused: extrahd unable to read
+WARNING: translation string unused: extrahd unable to write
+WARNING: translation string unused: filename
+WARNING: translation string unused: firewall graphs
+WARNING: translation string unused: firewall log viewer
+WARNING: translation string unused: firmware
+WARNING: translation string unused: firmware upload
+WARNING: translation string unused: force update
+WARNING: translation string unused: forward firewall
+WARNING: translation string unused: forwarding rule added
+WARNING: translation string unused: forwarding rule removed
+WARNING: translation string unused: forwarding rule updated
+WARNING: translation string unused: frequency
+WARNING: translation string unused: fritzdsl help
+WARNING: translation string unused: fritzdsl upload
+WARNING: translation string unused: from email adr
+WARNING: translation string unused: from email pw
+WARNING: translation string unused: from email server
+WARNING: translation string unused: from email user
+WARNING: translation string unused: from warn email bad
+WARNING: translation string unused: fwdfw MODE1
+WARNING: translation string unused: fwdfw MODE2
+WARNING: translation string unused: fwdfw addrule
+WARNING: translation string unused: fwdfw err nosrcip
+WARNING: translation string unused: fwdfw err notgtip
+WARNING: translation string unused: fwdfw err prot_port1
+WARNING: translation string unused: fwdfw final_rule
+WARNING: translation string unused: fwdfw from
+WARNING: translation string unused: fwdfw ipsec network
+WARNING: translation string unused: fwdfw man port
+WARNING: translation string unused: fwdfw menu
+WARNING: translation string unused: fwdfw natport used
+WARNING: translation string unused: fwdfw p2p txt
+WARNING: translation string unused: fwdfw rule action
+WARNING: translation string unused: fwdfw rules
+WARNING: translation string unused: fwdfw std network
+WARNING: translation string unused: fwdfw till
+WARNING: translation string unused: fwdfw time
+WARNING: translation string unused: fwdfw xt access
+WARNING: translation string unused: fwhost Custom Host
+WARNING: translation string unused: fwhost Custom Network
+WARNING: translation string unused: fwhost IpSec Host
+WARNING: translation string unused: fwhost IpSec Network
+WARNING: translation string unused: fwhost OpenVPN static host
+WARNING: translation string unused: fwhost OpenVPN static network
+WARNING: translation string unused: fwhost Standard Network
+WARNING: translation string unused: fwhost attention
+WARNING: translation string unused: fwhost blue
+WARNING: translation string unused: fwhost changeremark
+WARNING: translation string unused: fwhost err addrgrp
+WARNING: translation string unused: fwhost err hostorip
+WARNING: translation string unused: fwhost err mac
+WARNING: translation string unused: fwhost err partofnet
+WARNING: translation string unused: fwhost green
+WARNING: translation string unused: fwhost hosts
+WARNING: translation string unused: fwhost ipadr
+WARNING: translation string unused: fwhost ipsec host
+WARNING: translation string unused: fwhost orange
+WARNING: translation string unused: fwhost reread
+WARNING: translation string unused: fwhost reset
+WARNING: translation string unused: fwhost wo subnet
+WARNING: translation string unused: g.dtm
+WARNING: translation string unused: g.lite
+WARNING: translation string unused: gen static key
+WARNING: translation string unused: generate
+WARNING: translation string unused: genkey
+WARNING: translation string unused: green interface
+WARNING: translation string unused: gz with key
+WARNING: translation string unused: hint
+WARNING: translation string unused: host
+WARNING: translation string unused: host configuration
+WARNING: translation string unused: hostname and domain already in use
+WARNING: translation string unused: hour-graph
+WARNING: translation string unused: hours2
+WARNING: translation string unused: ibod for dual isdn only
+WARNING: translation string unused: icmp selected but no type
+WARNING: translation string unused: icmp type
+WARNING: translation string unused: id
+WARNING: translation string unused: ids preprocessor
+WARNING: translation string unused: ike encryption
+WARNING: translation string unused: ike grouptype
+WARNING: translation string unused: ike integrity
+WARNING: translation string unused: ike lifetime
+WARNING: translation string unused: ike lifetime should be between 1 and 24 hours
+WARNING: translation string unused: import
+WARNING: translation string unused: importkey
+WARNING: translation string unused: in
+WARNING: translation string unused: incorrect password
+WARNING: translation string unused: insert floppy
+WARNING: translation string unused: insert removable device
+WARNING: translation string unused: install new update
+WARNING: translation string unused: installed
+WARNING: translation string unused: installed updates
+WARNING: translation string unused: intrusion detection system log viewer
+WARNING: translation string unused: intrusion detection system2
+WARNING: translation string unused: invalid cache size
+WARNING: translation string unused: invalid date entered
+WARNING: translation string unused: invalid downlink speed
+WARNING: translation string unused: invalid loaded file
+WARNING: translation string unused: invalid md5sum
+WARNING: translation string unused: invalid port list
+WARNING: translation string unused: invalid time entered
+WARNING: translation string unused: invalid uplink speed
+WARNING: translation string unused: invalid upstream proxy username or password setting
+WARNING: translation string unused: invert
+WARNING: translation string unused: ip address in use
+WARNING: translation string unused: ipfire side
+WARNING: translation string unused: ipsec no connections
+WARNING: translation string unused: iptable rules
+WARNING: translation string unused: isdn
+WARNING: translation string unused: isdn settings
+WARNING: translation string unused: isdn1
+WARNING: translation string unused: isdn2
+WARNING: translation string unused: javascript menu error1
+WARNING: translation string unused: javascript menu error2
+WARNING: translation string unused: kernel version
+WARNING: translation string unused: key stuff
+WARNING: translation string unused: lateprompting
+WARNING: translation string unused: length
+WARNING: translation string unused: line
+WARNING: translation string unused: loaded modules
+WARNING: translation string unused: local hard disk
+WARNING: translation string unused: localkeyfile
+WARNING: translation string unused: log enabled
+WARNING: translation string unused: log viewer
+WARNING: translation string unused: logging
+WARNING: translation string unused: loosedirectorychecking
+WARNING: translation string unused: ls_dhcpd
+WARNING: translation string unused: ls_disk space
+WARNING: translation string unused: ls_free/swan
+WARNING: translation string unused: ls_httpd
+WARNING: translation string unused: ls_init
+WARNING: translation string unused: ls_kernel
+WARNING: translation string unused: ls_modprobe
+WARNING: translation string unused: ls_pam_unix
+WARNING: translation string unused: ls_sshd
+WARNING: translation string unused: ls_syslogd
+WARNING: translation string unused: mac address error not 00
+WARNING: translation string unused: manage ovpn
+WARNING: translation string unused: manual control and status
+WARNING: translation string unused: marked
+WARNING: translation string unused: max incoming size
+WARNING: translation string unused: max outgoing size
+WARNING: translation string unused: max size
+WARNING: translation string unused: mbmon fan in
+WARNING: translation string unused: mbmon graphs
+WARNING: translation string unused: mbmon temp in
+WARNING: translation string unused: mbmon value
+WARNING: translation string unused: min size
+WARNING: translation string unused: missing dat
+WARNING: translation string unused: missing gz
+WARNING: translation string unused: mode
+WARNING: translation string unused: modem on com1
+WARNING: translation string unused: modem on com2
+WARNING: translation string unused: modem on com3
+WARNING: translation string unused: modem on com4
+WARNING: translation string unused: modem on com5
+WARNING: translation string unused: modulation
+WARNING: translation string unused: month-graph
+WARNING: translation string unused: monthly firewallhits
+WARNING: translation string unused: monthly start day bad
+WARNING: translation string unused: monthly traffic bad
+WARNING: translation string unused: monthly volume
+WARNING: translation string unused: monthly volume start day
+WARNING: translation string unused: monthly volume start day short
+WARNING: translation string unused: mount
+WARNING: translation string unused: mtu QoS
+WARNING: translation string unused: nat-traversal
+WARNING: translation string unused: net
+WARNING: translation string unused: net address
+WARNING: translation string unused: net config type
+WARNING: translation string unused: net config type help
+WARNING: translation string unused: net-traffic configuration
+WARNING: translation string unused: network added
+WARNING: translation string unused: network configuration
+WARNING: translation string unused: network removed
+WARNING: translation string unused: network status information
+WARNING: translation string unused: network time
+WARNING: translation string unused: network traffic graphs
+WARNING: translation string unused: network updated
+WARNING: translation string unused: networks settings
+WARNING: translation string unused: never
+WARNING: translation string unused: new optionsfw must boot
+WARNING: translation string unused: no alcatelusb firmware
+WARNING: translation string unused: no cfg upload
+WARNING: translation string unused: no eciadsl synch.bin file
+WARNING: translation string unused: no fritzdsl driver
+WARNING: translation string unused: no information available
+WARNING: translation string unused: no modem selected
+WARNING: translation string unused: no set selected
+WARNING: translation string unused: nonetworkname
+WARNING: translation string unused: noservicename
+WARNING: translation string unused: notes
+WARNING: translation string unused: o-no
+WARNING: translation string unused: o-yes
+WARNING: translation string unused: online help en
+WARNING: translation string unused: only red
+WARNING: translation string unused: open to all
+WARNING: translation string unused: openvpn disabled
+WARNING: translation string unused: openvpn enabled
+WARNING: translation string unused: optional data
+WARNING: translation string unused: optionsfw portlist hint
+WARNING: translation string unused: optionsfw warning
+WARNING: translation string unused: or
+WARNING: translation string unused: original
+WARNING: translation string unused: our donors
+WARNING: translation string unused: out
+WARNING: translation string unused: outgoing firewall
+WARNING: translation string unused: outgoing firewall add ip group
+WARNING: translation string unused: outgoing firewall add mac group
+WARNING: translation string unused: outgoing firewall edit ip group
+WARNING: translation string unused: outgoing firewall edit mac group
+WARNING: translation string unused: outgoing firewall group error
+WARNING: translation string unused: outgoing firewall groups
+WARNING: translation string unused: outgoing firewall ip groups
+WARNING: translation string unused: outgoing firewall mac groups
+WARNING: translation string unused: outgoing firewall mode0
+WARNING: translation string unused: outgoing firewall mode1
+WARNING: translation string unused: outgoing firewall mode2
+WARNING: translation string unused: outgoing firewall outgoing firewall reserved groupname
+WARNING: translation string unused: outgoing firewall p2p description 1
+WARNING: translation string unused: outgoing firewall p2p description 2
+WARNING: translation string unused: outgoing firewall p2p description 3
+WARNING: translation string unused: outgoing firewall reset
+WARNING: translation string unused: outgoing firewall view group
+WARNING: translation string unused: outgoing firewall warning
+WARNING: translation string unused: override mtu
+WARNING: translation string unused: ovpn config
+WARNING: translation string unused: ovpn dl
+WARNING: translation string unused: ovpn engines
+WARNING: translation string unused: ovpn log
+WARNING: translation string unused: ovpn reneg sec
+WARNING: translation string unused: ovpn_fastio
+WARNING: translation string unused: ovpn_mssfix
+WARNING: translation string unused: ovpn_mtudisc
+WARNING: translation string unused: ovpn_processprio
+WARNING: translation string unused: ovpn_processprioD
+WARNING: translation string unused: ovpn_processprioED
+WARNING: translation string unused: ovpn_processprioEH
+WARNING: translation string unused: ovpn_processprioEN
+WARNING: translation string unused: ovpn_processprioH
+WARNING: translation string unused: ovpn_processprioLN
+WARNING: translation string unused: ovpn_processprioN
+WARNING: translation string unused: ovpn_processprioVD
+WARNING: translation string unused: ovpn_processprioVH
+WARNING: translation string unused: ovpnstatus log
+WARNING: translation string unused: ovpnsys log
+WARNING: translation string unused: package failed to install
+WARNING: translation string unused: pakfire core update auto
+WARNING: translation string unused: pakfire updates
+WARNING: translation string unused: password contains illegal characters
+WARNING: translation string unused: password crypting key
+WARNING: translation string unused: passwords must be at least 6 characters in length
+WARNING: translation string unused: phase1 group
+WARNING: translation string unused: phonebook entry
+WARNING: translation string unused: ping disabled
+WARNING: translation string unused: polfile
+WARNING: translation string unused: port forwarding configuration
+WARNING: translation string unused: ports
+WARNING: translation string unused: pots
+WARNING: translation string unused: pppoe
+WARNING: translation string unused: present
+WARNING: translation string unused: profiles
+WARNING: translation string unused: proxy
+WARNING: translation string unused: proxy access graphs
+WARNING: translation string unused: proxy no proxy extend
+WARNING: translation string unused: proxy no proxy local
+WARNING: translation string unused: proxy port
+WARNING: translation string unused: psk
+WARNING: translation string unused: quick control
+WARNING: translation string unused: reboot ask
+WARNING: translation string unused: reboot question
+WARNING: translation string unused: reboot schedule
+WARNING: translation string unused: reboot sure
+WARNING: translation string unused: refresh update list
+WARNING: translation string unused: released
+WARNING: translation string unused: removable device advice
+WARNING: translation string unused: reportfile
+WARNING: translation string unused: requested data
+WARNING: translation string unused: reserved dst port
+WARNING: translation string unused: reserved src port
+WARNING: translation string unused: restore hardware settings
+WARNING: translation string unused: root
+WARNING: translation string unused: root path
+WARNING: translation string unused: root user password
+WARNING: translation string unused: route subnet is invalid
+WARNING: translation string unused: router ip
+WARNING: translation string unused: rsvd dst port overlap
+WARNING: translation string unused: rsvd src port overlap
+WARNING: translation string unused: rules already up to date
+WARNING: translation string unused: safe removal of umounted device
+WARNING: translation string unused: save error
+WARNING: translation string unused: select dest net
+WARNING: translation string unused: select media
+WARNING: translation string unused: select source net
+WARNING: translation string unused: selecttraffic
+WARNING: translation string unused: send email notification
+WARNING: translation string unused: send test mail
+WARNING: translation string unused: server reserved
+WARNING: translation string unused: service added
+WARNING: translation string unused: service removed
+WARNING: translation string unused: service updated
+WARNING: translation string unused: servicename
+WARNING: translation string unused: services settings
+WARNING: translation string unused: shaping add options
+WARNING: translation string unused: shaping list options
+WARNING: translation string unused: show areas
+WARNING: translation string unused: show lines
+WARNING: translation string unused: shutdown ask
+WARNING: translation string unused: shutdown sure
+WARNING: translation string unused: shutdown2
+WARNING: translation string unused: sitekeyfile
+WARNING: translation string unused: smbreload
+WARNING: translation string unused: source ip bad
+WARNING: translation string unused: source ip in use
+WARNING: translation string unused: source ip or net
+WARNING: translation string unused: source net
+WARNING: translation string unused: source network
+WARNING: translation string unused: source port in use
+WARNING: translation string unused: source port overlaps
+WARNING: translation string unused: squid extension methods
+WARNING: translation string unused: squid extension methods invalid
+WARNING: translation string unused: squid fix cache
+WARNING: translation string unused: srcprt range overlaps
+WARNING: translation string unused: srcprt within existing
+WARNING: translation string unused: ssdmz pinholes
+WARNING: translation string unused: ssh access tip
+WARNING: translation string unused: ssh1 disabled
+WARNING: translation string unused: ssh1 enabled
+WARNING: translation string unused: ssh1 support
+WARNING: translation string unused: ssnetwork status
+WARNING: translation string unused: sspasswords
+WARNING: translation string unused: ssport forwarding
+WARNING: translation string unused: ssproxy graphs
+WARNING: translation string unused: sssystem status
+WARNING: translation string unused: sstraffic graphs
+WARNING: translation string unused: subject test
+WARNING: translation string unused: subject warn
+WARNING: translation string unused: subnet
+WARNING: translation string unused: subnet is invalid
+WARNING: translation string unused: successfully refreshed updates list
+WARNING: translation string unused: system graphs
+WARNING: translation string unused: system log viewer
+WARNING: translation string unused: system status information
+WARNING: translation string unused: teovpn_fragment
+WARNING: translation string unused: test
+WARNING: translation string unused: test email could not be sent
+WARNING: translation string unused: test email was sent
+WARNING: translation string unused: the following update was successfully installed
+WARNING: translation string unused: there are updates
+WARNING: translation string unused: there are updates available
+WARNING: translation string unused: this feature has been sponsored by
+WARNING: translation string unused: this is not a valid archive
+WARNING: translation string unused: this is not an authorised update
+WARNING: translation string unused: this months volume
+WARNING: translation string unused: this update is already installed
+WARNING: translation string unused: this weeks volume
+WARNING: translation string unused: time date manually reset
+WARNING: translation string unused: to email adr
+WARNING: translation string unused: to install an update
+WARNING: translation string unused: to warn email bad
+WARNING: translation string unused: too long 80 char max
+WARNING: translation string unused: tor 0 = disabled
+WARNING: translation string unused: tor accounting period daily
+WARNING: translation string unused: tor accounting period monthly
+WARNING: translation string unused: tor accounting period weekly
+WARNING: translation string unused: tor bridge enabled
+WARNING: translation string unused: tor errmsg invalid node id
+WARNING: translation string unused: tor exit country
+WARNING: translation string unused: total connection time
+WARNING: translation string unused: traffic back
+WARNING: translation string unused: traffic calc time
+WARNING: translation string unused: traffic calc time bad
+WARNING: translation string unused: traffic info messages
+WARNING: translation string unused: traffic monitor
+WARNING: translation string unused: traffic shaping
+WARNING: translation string unused: traffic shaping settings
+WARNING: translation string unused: traffic warn level bad
+WARNING: translation string unused: trafficblue
+WARNING: translation string unused: trafficdate
+WARNING: translation string unused: trafficfrom
+WARNING: translation string unused: trafficgreen
+WARNING: translation string unused: trafficin
+WARNING: translation string unused: trafficorange
+WARNING: translation string unused: trafficout
+WARNING: translation string unused: trafficred
+WARNING: translation string unused: trafficsum
+WARNING: translation string unused: trafficto
+WARNING: translation string unused: transfer limits
+WARNING: translation string unused: transparent on
+WARNING: translation string unused: umount
+WARNING: translation string unused: umount removable media before to unplug
+WARNING: translation string unused: unencrypted
+WARNING: translation string unused: update transcript
+WARNING: translation string unused: updates
+WARNING: translation string unused: updates is old1
+WARNING: translation string unused: updates is old2
+WARNING: translation string unused: updxlrtr children
+WARNING: translation string unused: updxlrtr invalid num of children
+WARNING: translation string unused: updxlrtr sources
+WARNING: translation string unused: updxlrtr standard view
+WARNING: translation string unused: updxlrtr unknown
+WARNING: translation string unused: updxlrtr update information
+WARNING: translation string unused: updxlrtr update notification
+WARNING: translation string unused: updxlrtr used by
+WARNING: translation string unused: upload fcdsl.o
+WARNING: translation string unused: upload file
+WARNING: translation string unused: upload static key
+WARNING: translation string unused: upload successful
+WARNING: translation string unused: upload synch.bin
+WARNING: translation string unused: upload update file
+WARNING: translation string unused: upstream password
+WARNING: translation string unused: upstream proxy host:port
+WARNING: translation string unused: upstream username
+WARNING: translation string unused: uptime
+WARNING: translation string unused: uptime and users
+WARNING: translation string unused: urlfilter background image
+WARNING: translation string unused: urlfilter background text
+WARNING: translation string unused: urlfilter enable jpeg
+WARNING: translation string unused: urlfilter update information
+WARNING: translation string unused: urlfilter update notification
+WARNING: translation string unused: urlfilter update results
+WARNING: translation string unused: urlfilter upload background
+WARNING: translation string unused: use
+WARNING: translation string unused: use dov
+WARNING: translation string unused: use ibod
+WARNING: translation string unused: view log
+WARNING: translation string unused: vpn aggrmode
+WARNING: translation string unused: vpn configuration main
+WARNING: translation string unused: vpn incompatible use of defaultroute
+WARNING: translation string unused: vpn mtu invalid
+WARNING: translation string unused: vpn on blue
+WARNING: translation string unused: vpn on green
+WARNING: translation string unused: vpn on orange
+WARNING: translation string unused: vpn watch
+WARNING: translation string unused: warn when traffic reaches
+WARNING: translation string unused: web proxy configuration
+WARNING: translation string unused: week-graph
+WARNING: translation string unused: weekly firewallhits
+WARNING: translation string unused: wildcards
+WARNING: translation string unused: wlanap 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: MTU settings
+WARNING: untranslated string: Number of Countries for the pie chart
+WARNING: untranslated string: Scan for Songs
+WARNING: untranslated string: administrator password
+WARNING: untranslated string: administrator username
+WARNING: untranslated string: advproxy AUTH method ntlm auth
+WARNING: untranslated string: advproxy basic authentication
+WARNING: untranslated string: advproxy group access control
+WARNING: untranslated string: advproxy group required
+WARNING: untranslated string: bytes
+WARNING: untranslated string: check all
+WARNING: untranslated string: fwdfw err concon
+WARNING: untranslated string: fwdfw err ratecon
+WARNING: untranslated string: fwdfw limitconcon
+WARNING: untranslated string: fwdfw maxconcon
+WARNING: untranslated string: fwdfw numcon
+WARNING: untranslated string: fwdfw ratelimit
+WARNING: untranslated string: fwhost addgeoipgrp
+WARNING: untranslated string: fwhost cust geoipgroup
+WARNING: untranslated string: fwhost cust geoipgrp
+WARNING: untranslated string: fwhost cust geoiplocation
+WARNING: untranslated string: fwhost err hostip
+WARNING: untranslated string: fwhost newgeoipgrp
+WARNING: untranslated string: geoip
+WARNING: untranslated string: geoipblock
+WARNING: untranslated string: geoipblock block countries
+WARNING: untranslated string: geoipblock configuration
+WARNING: untranslated string: geoipblock country is allowed
+WARNING: untranslated string: geoipblock country is blocked
+WARNING: untranslated string: geoipblock enable feature
+WARNING: untranslated string: ike lifetime should be between 1 and 8 hours
+WARNING: untranslated string: incoming compression in bytes per second
+WARNING: untranslated string: incoming overhead in bytes per second
+WARNING: untranslated string: invalid input for valid till days
+WARNING: untranslated string: masquerade blue
+WARNING: untranslated string: masquerade green
+WARNING: untranslated string: masquerade orange
+WARNING: untranslated string: masquerading
+WARNING: untranslated string: masquerading disabled
+WARNING: untranslated string: masquerading enabled
+WARNING: untranslated string: messages
+WARNING: untranslated string: no data
+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: route config changed
+WARNING: untranslated string: routing config added
+WARNING: untranslated string: routing config changed
+WARNING: untranslated string: routing table
+WARNING: untranslated string: samba join a domain
+WARNING: untranslated string: samba join domain
+WARNING: untranslated string: uncheck all
+WARNING: untranslated string: vpn statistic n2n
+WARNING: untranslated string: vpn statistic rw
+WARNING: untranslated string: vpn statistics n2n
WARNING: translation string unused: ike grouptype
WARNING: translation string unused: ike integrity
WARNING: translation string unused: ike lifetime
+WARNING: translation string unused: ike lifetime should be between 1 and 24 hours
WARNING: translation string unused: import
WARNING: translation string unused: importkey
WARNING: translation string unused: in
WARNING: untranslated string: atm device
WARNING: untranslated string: bytes
WARNING: untranslated string: capabilities
+WARNING: untranslated string: check all
WARNING: untranslated string: default
WARNING: untranslated string: dh
WARNING: untranslated string: dh key move failed
WARNING: untranslated string: fwdfw maxconcon
WARNING: untranslated string: fwdfw numcon
WARNING: untranslated string: fwdfw ratelimit
+WARNING: untranslated string: fwhost addgeoipgrp
+WARNING: untranslated string: fwhost cust geoipgroup
+WARNING: untranslated string: fwhost cust geoipgrp
+WARNING: untranslated string: fwhost cust geoiplocation
WARNING: untranslated string: fwhost err hostip
+WARNING: untranslated string: fwhost newgeoipgrp
WARNING: untranslated string: gen dh
WARNING: untranslated string: generate dh key
+WARNING: untranslated string: geoip
+WARNING: untranslated string: geoipblock
+WARNING: untranslated string: geoipblock block countries
+WARNING: untranslated string: geoipblock configuration
+WARNING: untranslated string: geoipblock country is allowed
+WARNING: untranslated string: geoipblock country is blocked
+WARNING: untranslated string: geoipblock enable feature
+WARNING: untranslated string: ike lifetime should be between 1 and 8 hours
WARNING: untranslated string: imei
WARNING: untranslated string: imsi
WARNING: untranslated string: incoming compression in bytes per second
WARNING: untranslated string: software version
WARNING: untranslated string: source ip country
WARNING: untranslated string: ta key
+WARNING: untranslated string: uncheck all
WARNING: untranslated string: upload dh key
WARNING: untranslated string: vendor
+WARNING: untranslated string: vpn statistic n2n
+WARNING: untranslated string: vpn statistic rw
+WARNING: untranslated string: vpn statistics n2n
WARNING: translation string unused: gen static key
WARNING: translation string unused: generate
WARNING: translation string unused: genkey
+WARNING: translation string unused: geoipblock country code
+WARNING: translation string unused: geoipblock country name
+WARNING: translation string unused: geoipblock flag
WARNING: translation string unused: green interface
WARNING: translation string unused: gz with key
WARNING: translation string unused: hint
WARNING: translation string unused: ike grouptype
WARNING: translation string unused: ike integrity
WARNING: translation string unused: ike lifetime
+WARNING: translation string unused: ike lifetime should be between 1 and 24 hours
WARNING: translation string unused: import
WARNING: translation string unused: importkey
WARNING: translation string unused: in
WARNING: untranslated string: ccd routes
WARNING: untranslated string: ccd subnet
WARNING: untranslated string: ccd used
+WARNING: untranslated string: check all
WARNING: untranslated string: count
WARNING: untranslated string: countries
WARNING: untranslated string: country codes and flags
WARNING: untranslated string: fwdfw wd_tue
WARNING: untranslated string: fwdfw wd_wed
WARNING: untranslated string: fwhost OpenVPN N-2-N
+WARNING: untranslated string: fwhost addgeoipgrp
WARNING: untranslated string: fwhost addgrp
WARNING: untranslated string: fwhost addgrpname
WARNING: untranslated string: fwhost addhost
WARNING: untranslated string: fwhost ccdnet
WARNING: untranslated string: fwhost change
WARNING: untranslated string: fwhost cust addr
+WARNING: untranslated string: fwhost cust geoipgroup
+WARNING: untranslated string: fwhost cust geoipgrp
+WARNING: untranslated string: fwhost cust geoiplocation
WARNING: untranslated string: fwhost cust grp
WARNING: untranslated string: fwhost cust net
WARNING: untranslated string: fwhost cust service
WARNING: untranslated string: fwhost ipsec net
WARNING: untranslated string: fwhost menu
WARNING: untranslated string: fwhost netaddress
+WARNING: untranslated string: fwhost newgeoipgrp
WARNING: untranslated string: fwhost newgrp
WARNING: untranslated string: fwhost newhost
WARNING: untranslated string: fwhost newnet
WARNING: untranslated string: generate dh key
WARNING: untranslated string: grouptype
WARNING: untranslated string: hardware support
+WARNING: untranslated string: ike lifetime should be between 1 and 8 hours
WARNING: untranslated string: imei
WARNING: untranslated string: imsi
WARNING: untranslated string: incoming compression in bytes per second
WARNING: untranslated string: tor traffic limit soft
WARNING: untranslated string: tor traffic read written
WARNING: untranslated string: tor use exit nodes
+WARNING: untranslated string: uncheck all
WARNING: untranslated string: uplink
WARNING: untranslated string: upload dh key
WARNING: untranslated string: uptime load average
WARNING: untranslated string: vendor
WARNING: untranslated string: visit us at
WARNING: untranslated string: vpn keyexchange
+WARNING: untranslated string: vpn statistic n2n
+WARNING: untranslated string: vpn statistic rw
+WARNING: untranslated string: vpn statistics n2n
WARNING: untranslated string: wlan client
WARNING: untranslated string: wlan client advanced settings
WARNING: untranslated string: wlan client and
WARNING: translation string unused: ike grouptype
WARNING: translation string unused: ike integrity
WARNING: translation string unused: ike lifetime
+WARNING: translation string unused: ike lifetime should be between 1 and 24 hours
WARNING: translation string unused: import
WARNING: translation string unused: importkey
WARNING: translation string unused: in
WARNING: untranslated string: ccd routes
WARNING: untranslated string: ccd subnet
WARNING: untranslated string: ccd used
+WARNING: untranslated string: check all
WARNING: untranslated string: community rules
WARNING: untranslated string: count
WARNING: untranslated string: countries
WARNING: untranslated string: fwdfw wd_tue
WARNING: untranslated string: fwdfw wd_wed
WARNING: untranslated string: fwhost OpenVPN N-2-N
+WARNING: untranslated string: fwhost addgeoipgrp
WARNING: untranslated string: fwhost addgrp
WARNING: untranslated string: fwhost addgrpname
WARNING: untranslated string: fwhost addhost
WARNING: untranslated string: fwhost ccdnet
WARNING: untranslated string: fwhost change
WARNING: untranslated string: fwhost cust addr
+WARNING: untranslated string: fwhost cust geoipgroup
+WARNING: untranslated string: fwhost cust geoipgrp
+WARNING: untranslated string: fwhost cust geoiplocation
WARNING: untranslated string: fwhost cust grp
WARNING: untranslated string: fwhost cust net
WARNING: untranslated string: fwhost cust service
WARNING: untranslated string: fwhost ipsec net
WARNING: untranslated string: fwhost menu
WARNING: untranslated string: fwhost netaddress
+WARNING: untranslated string: fwhost newgeoipgrp
WARNING: untranslated string: fwhost newgrp
WARNING: untranslated string: fwhost newhost
WARNING: untranslated string: fwhost newnet
WARNING: untranslated string: fwhost welcome
WARNING: untranslated string: gen dh
WARNING: untranslated string: generate dh key
+WARNING: untranslated string: geoip
+WARNING: untranslated string: geoipblock
+WARNING: untranslated string: geoipblock block countries
+WARNING: untranslated string: geoipblock configuration
+WARNING: untranslated string: geoipblock country is allowed
+WARNING: untranslated string: geoipblock country is blocked
+WARNING: untranslated string: geoipblock enable feature
WARNING: untranslated string: grouptype
WARNING: untranslated string: hardware support
+WARNING: untranslated string: ike lifetime should be between 1 and 8 hours
WARNING: untranslated string: imei
WARNING: untranslated string: imsi
WARNING: untranslated string: incoming compression in bytes per second
WARNING: untranslated string: tor traffic limit soft
WARNING: untranslated string: tor traffic read written
WARNING: untranslated string: tor use exit nodes
+WARNING: untranslated string: uncheck all
WARNING: untranslated string: uplink
WARNING: untranslated string: upload dh key
WARNING: untranslated string: uptime load average
WARNING: untranslated string: vendor
WARNING: untranslated string: visit us at
WARNING: untranslated string: vpn keyexchange
+WARNING: untranslated string: vpn statistic n2n
+WARNING: untranslated string: vpn statistic rw
+WARNING: untranslated string: vpn statistics n2n
WARNING: untranslated string: wlan client
WARNING: untranslated string: wlan client advanced settings
WARNING: untranslated string: wlan client and
WARNING: translation string unused: ike grouptype
WARNING: translation string unused: ike integrity
WARNING: translation string unused: ike lifetime
+WARNING: translation string unused: ike lifetime should be between 1 and 24 hours
WARNING: translation string unused: import
WARNING: translation string unused: importkey
WARNING: translation string unused: in
WARNING: translation string unused: yearly firewallhits
WARNING: untranslated string: Scan for Songs
WARNING: untranslated string: bytes
+WARNING: untranslated string: check all
+WARNING: untranslated string: fwhost addgeoipgrp
+WARNING: untranslated string: fwhost cust geoipgroup
+WARNING: untranslated string: fwhost cust geoipgrp
+WARNING: untranslated string: fwhost cust geoiplocation
WARNING: untranslated string: fwhost err hostip
+WARNING: untranslated string: fwhost newgeoipgrp
+WARNING: untranslated string: geoip
+WARNING: untranslated string: geoipblock
+WARNING: untranslated string: geoipblock block countries
+WARNING: untranslated string: geoipblock configuration
+WARNING: untranslated string: geoipblock country is allowed
+WARNING: untranslated string: geoipblock country is blocked
+WARNING: untranslated string: geoipblock enable feature
+WARNING: untranslated string: ike lifetime should be between 1 and 8 hours
WARNING: untranslated string: incoming compression in bytes per second
WARNING: untranslated string: incoming overhead in bytes per second
WARNING: untranslated string: invalid input for valid till days
WARNING: untranslated string: routing config added
WARNING: untranslated string: routing config changed
WARNING: untranslated string: routing table
+WARNING: untranslated string: uncheck all
+WARNING: untranslated string: vpn statistic n2n
+WARNING: untranslated string: vpn statistic rw
+WARNING: untranslated string: vpn statistics n2n
< atm device
< attention
< bit
+< block
< capabilities
< ccd add
< ccd choose net
< ccd routes
< ccd subnet
< ccd used
+< check all
< ConnSched dial
< ConnSched hangup
< ConnSched reboot
< fwdfw wd_tue
< fwdfw wd_wed
< fwdfw xt access
+< fwhost addgeoipgrp
< fwhost addgrp
< fwhost addgrpname
< fwhost addhost
< fwhost change
< fwhost changeremark
< fwhost cust addr
+< fwhost cust geoip
+< fwhost cust geoipgroup
+< fwhost cust geoiplocation
< fwhost cust grp
< fwhost cust net
< fwhost Custom Host
< fwhost IpSec Network
< fwhost menu
< fwhost netaddress
+< fwhost newgeoipgrp
< fwhost newgrp
< fwhost newhost
< fwhost newnet
< fw settings ruletable
< gen dh
< generate dh key
+< geoip
+< geoipblock
+< geoipblock block countries
+< geoipblock configuration
+< geoipblock country code
+< geoipblock country is allowed
+< geoipblock country is blocked
+< geoipblock country name
+< geoipblock enable feature
+< geoipblock flag
< grouptype
< hardware support
< imei
< tor traffic limit soft
< tor traffic read written
< tor use exit nodes
+< unblock
+< unblock all
+< uncheck all
< updxlrtr sources
< updxlrtr standard view
< uplink
< vendor
< visit us at
< vpn keyexchange
+< vpn statistic n2n
+< vpn statistic rw
< wlanap access point
< wlanap channel
< wlanap country
< atm device
< attention
< bit
+< block
< capabilities
< ccd add
< ccd choose net
< ccd routes
< ccd subnet
< ccd used
+< check all
< ConnSched dial
< ConnSched hangup
< ConnSched reboot
< fwdfw wd_tue
< fwdfw wd_wed
< fwdfw xt access
+< fwhost addgeoipgrp
< fwhost addgrp
< fwhost addgrpname
< fwhost addhost
< fwhost change
< fwhost changeremark
< fwhost cust addr
+< fwhost cust geoip
+< fwhost cust geoipgroup
+< fwhost cust geoiplocation
< fwhost cust grp
< fwhost cust net
< fwhost Custom Host
< fwhost IpSec Network
< fwhost menu
< fwhost netaddress
+< fwhost newgeoipgrp
< fwhost newgrp
< fwhost newhost
< fwhost newnet
< tor traffic limit soft
< tor traffic read written
< tor use exit nodes
+< unblock
+< unblock all
+< uncheck all
< updxlrtr sources
< updxlrtr standard view
< uplink
< vendor
< visit us at
< vpn keyexchange
+< vpn statistic n2n
+< vpn statistic rw
< wlanap country
< wlan client
< wlan client advanced settings
< atm device
< attention
< bit
+< block
< capabilities
< ccd add
< ccd choose net
< ccd routes
< ccd subnet
< ccd used
+< check all
< ConnSched dial
< ConnSched hangup
< ConnSched reboot
< fwdfw wd_tue
< fwdfw wd_wed
< fwdfw xt access
+< fwhost addgeoipgrp
< fwhost addgrp
< fwhost addgrpname
< fwhost addhost
< fwhost change
< fwhost changeremark
< fwhost cust addr
+< fwhost cust geoip
+< fwhost cust geoipgroup
+< fwhost cust geoiplocation
< fwhost cust grp
< fwhost cust net
< fwhost Custom Host
< fwhost IpSec Network
< fwhost menu
< fwhost netaddress
+< fwhost newgeoipgrp
< fwhost newgrp
< fwhost newhost
< fwhost newnet
< fw settings ruletable
< gen dh
< generate dh key
+< geoip
+< geoipblock
+< geoipblock block countries
+< geoipblock configuration
+< geoipblock country code
+< geoipblock country is allowed
+< geoipblock country is blocked
+< geoipblock country name
+< geoipblock enable feature
+< geoipblock flag
< grouptype
< hardware support
< imei
< tor traffic limit soft
< tor traffic read written
< tor use exit nodes
+< unblock
+< unblock all
+< uncheck all
< updxlrtr sources
< updxlrtr standard view
< uplink
< vendor
< visit us at
< vpn keyexchange
+< vpn statistic n2n
+< vpn statistic rw
< wlanap country
< wlan client
< wlan client advanced settings
< atm device
< attention
< bit
+< block
< capabilities
< ccd add
< ccd choose net
< ccd routes
< ccd subnet
< ccd used
+< check all
< ConnSched dial
< ConnSched hangup
< ConnSched reboot
< fwdfw wd_tue
< fwdfw wd_wed
< fwdfw xt access
+< fwhost addgeoipgrp
< fwhost addgrp
< fwhost addgrpname
< fwhost addhost
< fwhost change
< fwhost changeremark
< fwhost cust addr
+< fwhost cust geoip
+< fwhost cust geoipgroup
+< fwhost cust geoiplocation
< fwhost cust grp
< fwhost cust net
< fwhost Custom Host
< fwhost IpSec Network
< fwhost menu
< fwhost netaddress
+< fwhost newgeoipgrp
< fwhost newgrp
< fwhost newhost
< fwhost newnet
< fw settings ruletable
< gen dh
< generate dh key
+< geoip
+< geoipblock
+< geoipblock block countries
+< geoipblock configuration
+< geoipblock country code
+< geoipblock country is allowed
+< geoipblock country is blocked
+< geoipblock country name
+< geoipblock enable feature
+< geoipblock flag
< grouptype
< hardware support
< hour-graph
< tor traffic limit soft
< tor traffic read written
< tor use exit nodes
+< unblock
+< unblock all
+< uncheck all
< updxlrtr sources
< updxlrtr standard view
< uplink
< vendor
< visit us at
< vpn keyexchange
+< vpn statistic n2n
+< vpn statistic rw
< week-graph
< wlanap country
< wlan client
}
my $sip_colour = ipcolour($sip);
- my $dip_colour = ipcolour($dip);
+ # use colour of destination network for DNAT
+ my $dip_colour = $dip ne $dip_ret ? ipcolour($dip_ret) : ipcolour($dip);
my $sserv = '';
if ($sport < 1024) {
use strict;
-use Locale::Country;
+use Locale::Codes::Country;
my $flagdir = '/srv/web/ipfire/html/images/flags';
my $lines = '1';
my $flag = '';
require '/var/ipfire/general-functions.pl';
+require "${General::swroot}/geoip-functions.pl";
require "${General::swroot}/lang.pl";
require "${General::swroot}/header.pl";
my $flagcode = uc(substr($flag, 0, 2));
my $fcode = lc($flagcode);
+
+ # Get flag icon for of the country.
+ my $flag_icon = &GeoIP::get_flag_icon($fcode);
+
my $country = Locale::Country::code2country($fcode);
if($fcode eq 'eu') { $country = 'Europe'; }
if($fcode eq 'tp') { $country = 'East Timor'; }
if($fcode eq 'yu') { $country = 'Yugoslavia'; }
if ($lines % 2) {
- print "<td $col><a id='$fcode'><img src='/images/flags/$fcode.png' alt='$flagcode' title='$flagcode'/></a></td>";
+ print "<td $col><a id='$fcode'><img src='$flag_icon' alt='$flagcode' title='$flagcode'/></a></td>";
print "<td $col>$flagcode</td>";
print "<td $col>$country</td></tr>\n";
}
$col="style='background-color:${Header::table1colour};'";
}
print "<tr>";
- print "<td $col><a id='$fcode'><img src='/images/flags/$fcode.png' alt='$flagcode' title='$flagcode'/></a></td>";
+ print "<td $col><a id='$fcode'><img src='$flag_icon' alt='$flagcode' title='$flagcode'/></a></td>";
print "<td $col>$flagcode</td>";
print "<td $col>$country</td>";
print "<td $col> </td>";
# Config file to store the configured ddns providers.
my $datafile = "${General::swroot}/ddns/config";
-# Dynamic ddns programm call.
-my @ddnsprog = ("/usr/bin/ddns", "--config",
- "/var/ipfire/ddns/ddns.conf",
- "update-all");
+# Call the ddnsctrl helper binary to perform the update.
+my @ddnsprog = ("/usr/local/bin/ddnsctrl", "update-all");
my %settings=();
my $errormessage = '';
my $use_token = 0;
# Handle token based auth for various providers.
- if ($provider ~~ ["dns.lightningwirelabs.com", "entrydns.net", "regfish.com", "spdns.de"] && $username eq "token") {
+ if ($provider ~~ ["dns.lightningwirelabs.com", "entrydns.net", "regfish.com",
+ "spdns.de", "zzzz.io"] && $username eq "token") {
$use_token = 1;
# Handle token auth for freedns.afraid.org and regfish.com.
print FILE "password = $password\n";
}
- # These providers need to be set to only use IPv4.
- if ($provider ~~ ["freedns.afraid.org", "nsupdate.info", "opendns.com", "variomedia.de", "zoneedit.com"]) {
- print FILE "proto = ipv4\n";
- }
-
print FILE "\n";
}
require '/var/ipfire/general-functions.pl';
require "${General::swroot}/lang.pl";
require "${General::swroot}/header.pl";
+require "${General::swroot}/geoip-functions.pl";
require "/usr/lib/firewall/firewall-lib.pl";
unless (-d "${General::swroot}/firewall") { system("mkdir ${General::swroot}/firewall"); }
my %netsettings=();
my %customhost=();
my %customgrp=();
+my %customgeoipgrp=();
my %customnetworks=();
my %customservice=();
my %customservicegrp=();
my %aliases=();
my %optionsfw=();
my %ifaces=();
+my %rulehash=();
my @PROTOCOLS = ("TCP", "UDP", "ICMP", "IGMP", "AH", "ESP", "GRE","IPv6","IPIP");
my $confignet = "${General::swroot}/fwhosts/customnetworks";
my $confighost = "${General::swroot}/fwhosts/customhosts";
my $configgrp = "${General::swroot}/fwhosts/customgroups";
+my $configgeoipgrp = "${General::swroot}/fwhosts/customgeoipgrp";
my $configsrv = "${General::swroot}/fwhosts/customservices";
my $configsrvgrp = "${General::swroot}/fwhosts/customservicegrp";
my $configccdnet = "${General::swroot}/ovpn/ccd.conf";
\$("#actions").toggle();
});
+ // Hide SNAT items when DNAT is selected and vice versa.
+ if (\$('input[name=nat]:checked').val() == 'dnat') {
+ \$('.snat').hide();
+ } else {
+ \$('.dnat').hide();
+ }
+
+ // Show/Hide elements when SNAT/DNAT get changed.
+ \$('input[name=nat]').change(function() {
+ \$('.snat').toggle();
+ \$('.dnat').toggle();
+ });
+
// Time constraints
if(!\$("#USE_TIME_CONSTRAINTS").attr("checked")) {
\$("#TIME_CONSTRAINTS").hide();
&General::readhasharray("$configfwdfw", \%configfwdfw);
&General::readhasharray("$configinput", \%configinputfw);
&General::readhasharray("$configoutgoing", \%configoutgoingfw);
+ my $maxkey;
#Set Variables according to the JQuery code in protocol section
if ($fwdfwsettings{'PROT'} eq 'TCP' || $fwdfwsettings{'PROT'} eq 'UDP')
{
if( $fwdfwsettings{'grp1'} eq 'ipfire_src' && $fwdfwsettings{'grp2'} eq 'ipfire'){
$errormessage=$Lang::tr{'fwdfw err same'};
}
- #INPUT part
- if($fwdfwsettings{'grp2'} eq 'ipfire' && $fwdfwsettings{$fwdfwsettings{'grp1'}} ne 'ORANGE'){
+ # INPUT part
+ if ($fwdfwsettings{'grp2'} eq 'ipfire' && $fwdfwsettings{$fwdfwsettings{'grp1'}} ne 'ORANGE'){
$fwdfwsettings{'config'}=$configinput;
$fwdfwsettings{'chain'} = 'INPUTFW';
- my $maxkey=&General::findhasharraykey(\%configinputfw);
- #check if we have an identical rule already
- if($fwdfwsettings{'oldrulenumber'} eq $fwdfwsettings{'rulepos'}){
- foreach my $key (sort keys %configinputfw){
- if ( "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'LOG'},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'},$fwdfwsettings{'LIMIT_CON_CON'},$fwdfwsettings{'concon'},$fwdfwsettings{'RATE_LIMIT'},$fwdfwsettings{'ratecon'},$fwdfwsettings{'RATETIME'}"
- eq "$configinputfw{$key}[0],$configinputfw{$key}[2],$configinputfw{$key}[3],$configinputfw{$key}[4],$configinputfw{$key}[5],$configinputfw{$key}[6],$configinputfw{$key}[7],$configinputfw{$key}[8],$configinputfw{$key}[9],$configinputfw{$key}[10],$configinputfw{$key}[11],$configinputfw{$key}[12],$configinputfw{$key}[13],$configinputfw{$key}[14],$configinputfw{$key}[15],$configinputfw{$key}[17],$configinputfw{$key}[18],$configinputfw{$key}[19],$configinputfw{$key}[20],$configinputfw{$key}[21],$configinputfw{$key}[22],$configinputfw{$key}[23],$configinputfw{$key}[24],$configinputfw{$key}[25],$configinputfw{$key}[26],$configinputfw{$key}[27],$configinputfw{$key}[28],$configinputfw{$key}[29],$configinputfw{$key}[30],$configinputfw{$key}[31],$configinputfw{$key}[32],$configinputfw{$key}[33],$configinputfw{$key}[34],$configinputfw{$key}[35],$configinputfw{$key}[36]"){
- $errormessage.=$Lang::tr{'fwdfw err ruleexists'};
- if($fwdfwsettings{'oldruleremark'} ne $fwdfwsettings{'ruleremark'} && $fwdfwsettings{'updatefwrule'} eq 'on' && $fwdfwsettings{'ruleremark'} ne '' && !&validremark($fwdfwsettings{'ruleremark'})){
- $errormessage=$Lang::tr{'fwdfw err remark'}."<br>";
- }
- if($fwdfwsettings{'oldruleremark'} ne $fwdfwsettings{'ruleremark'} && $fwdfwsettings{'updatefwrule'} eq 'on' && $fwdfwsettings{'ruleremark'} ne '' && &validremark($fwdfwsettings{'ruleremark'})){
- $errormessage='';
- }
- if ($fwdfwsettings{'oldruleremark'} eq $fwdfwsettings{'ruleremark'}){
- $fwdfwsettings{'nosave'} = 'on';
- }
- }
- }
- }
- #check Rulepos on new Rule
- if($fwdfwsettings{'rulepos'} > 0 && !$fwdfwsettings{'oldrulenumber'}){
- $fwdfwsettings{'oldrulenumber'}=$maxkey;
- foreach my $key (sort keys %configinputfw){
- if ( "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'LOG'},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'},$fwdfwsettings{'LIMIT_CON_CON'},$fwdfwsettings{'concon'},$fwdfwsettings{'RATE_LIMIT'},$fwdfwsettings{'ratecon'},$fwdfwsettings{'RATETIME'}"
- eq "$configinputfw{$key}[0],$configinputfw{$key}[2],$configinputfw{$key}[3],$configinputfw{$key}[4],$configinputfw{$key}[5],$configinputfw{$key}[6],$configinputfw{$key}[7],$configinputfw{$key}[8],$configinputfw{$key}[9],$configinputfw{$key}[10],$configinputfw{$key}[11],$configinputfw{$key}[12],$configinputfw{$key}[13],$configinputfw{$key}[14],$configinputfw{$key}[15],$configinputfw{$key}[17],$configinputfw{$key}[18],$configinputfw{$key}[19],$configinputfw{$key}[20],$configinputfw{$key}[21],$configinputfw{$key}[22],$configinputfw{$key}[23],$configinputfw{$key}[24],$configinputfw{$key}[25],$configinputfw{$key}[26],$configinputfw{$key}[27],$configinputfw{$key}[28],$configinputfw{$key}[29],$configinputfw{$key}[30],$configinputfw{$key}[31],$configinputfw{$key}[32],$configinputfw{$key}[33],$configinputfw{$key}[34],$configinputfw{$key}[35],$configinputfw{$key}[36]"){
- $errormessage.=$Lang::tr{'fwdfw err ruleexists'};
- }
- }
- }
- #check if we just close a rule
- if( $fwdfwsettings{'oldgrp1a'} eq $fwdfwsettings{'grp1'} && $fwdfwsettings{'oldgrp1b'} eq $fwdfwsettings{$fwdfwsettings{'grp1'}} && $fwdfwsettings{'oldgrp2a'} eq $fwdfwsettings{'grp2'} && $fwdfwsettings{'oldgrp2b'} eq $fwdfwsettings{$fwdfwsettings{'grp2'}} && $fwdfwsettings{'oldgrp3a'} eq $fwdfwsettings{'grp3'} && $fwdfwsettings{'oldgrp3b'} eq $fwdfwsettings{$fwdfwsettings{'grp3'}} && $fwdfwsettings{'oldusesrv'} eq $fwdfwsettings{'USESRV'} && $fwdfwsettings{'oldruleremark'} eq $fwdfwsettings{'ruleremark'} && $fwdfwsettings{'oldruletype'} eq $fwdfwsettings{'chain'} ) {
- if($fwdfwsettings{'nosave'} eq 'on' && $fwdfwsettings{'updatefwrule'} eq 'on'){
- $errormessage='';
- $fwdfwsettings{'nosave2'} = 'on';
- }
- }
- if (!$errormessage){
- if($fwdfwsettings{'nosave2'} ne 'on'){
- &saverule(\%configinputfw,$configinput);
- }
- }
- }elsif($fwdfwsettings{'grp1'} eq 'ipfire_src' ){
+ $maxkey=&General::findhasharraykey(\%configinputfw);
+ %rulehash=%configinputfw;
+ }elsif ($fwdfwsettings{'grp1'} eq 'ipfire_src' ){
# OUTGOING PART
$fwdfwsettings{'config'}=$configoutgoing;
$fwdfwsettings{'chain'} = 'OUTGOINGFW';
- my $maxkey=&General::findhasharraykey(\%configoutgoingfw);
- if($fwdfwsettings{'oldrulenumber'} eq $fwdfwsettings{'rulepos'}){
- foreach my $key (sort keys %configoutgoingfw){
- if ( "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'LOG'},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'},$fwdfwsettings{'LIMIT_CON_CON'},$fwdfwsettings{'concon'},$fwdfwsettings{'RATE_LIMIT'},$fwdfwsettings{'ratecon'},$fwdfwsettings{'RATETIME'}"
- eq "$configoutgoingfw{$key}[0],$configoutgoingfw{$key}[2],$configoutgoingfw{$key}[3],$configoutgoingfw{$key}[4],$configoutgoingfw{$key}[5],$configoutgoingfw{$key}[6],$configoutgoingfw{$key}[7],$configoutgoingfw{$key}[8],$configoutgoingfw{$key}[9],$configoutgoingfw{$key}[10],$configoutgoingfw{$key}[11],$configoutgoingfw{$key}[12],$configoutgoingfw{$key}[13],$configoutgoingfw{$key}[14],$configoutgoingfw{$key}[15],$configoutgoingfw{$key}[17],$configoutgoingfw{$key}[18],$configoutgoingfw{$key}[19],$configoutgoingfw{$key}[20],$configoutgoingfw{$key}[21],$configoutgoingfw{$key}[22],$configoutgoingfw{$key}[23],$configoutgoingfw{$key}[24],$configoutgoingfw{$key}[25],$configoutgoingfw{$key}[26],$configoutgoingfw{$key}[27],$configoutgoingfw{$key}[28],$configoutgoingfw{$key}[29],$configoutgoingfw{$key}[30],$configoutgoingfw{$key}[31],$configoutgoingfw{$key}[32],$configoutgoingfw{$key}[33],$configoutgoingfw{$key}[34],$configoutgoingfw{$key}[35],$configoutgoingfw{$key}[36]"){
- $errormessage.=$Lang::tr{'fwdfw err ruleexists'};
- if($fwdfwsettings{'oldruleremark'} ne $fwdfwsettings{'ruleremark'} && $fwdfwsettings{'updatefwrule'} eq 'on' && $fwdfwsettings{'ruleremark'} ne '' && !&validremark($fwdfwsettings{'ruleremark'})){
- $errormessage=$Lang::tr{'fwdfw err remark'}."<br>";
- }
- if($fwdfwsettings{'oldruleremark'} ne $fwdfwsettings{'ruleremark'} && $fwdfwsettings{'updatefwrule'} eq 'on' && $fwdfwsettings{'ruleremark'} ne '' && &validremark($fwdfwsettings{'ruleremark'})){
- $errormessage='';
- }
- if ($fwdfwsettings{'oldruleremark'} eq $fwdfwsettings{'ruleremark'}){
- $fwdfwsettings{'nosave'} = 'on';
- }
- }
- }
- }
- #check Rulepos on new Rule
- if($fwdfwsettings{'rulepos'} > 0 && !$fwdfwsettings{'oldrulenumber'}){
- $fwdfwsettings{'oldrulenumber'}=$maxkey;
- foreach my $key (sort keys %configoutgoingfw){
- if ( "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'LOG'},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'},$fwdfwsettings{'LIMIT_CON_CON'},$fwdfwsettings{'concon'},$fwdfwsettings{'RATE_LIMIT'},$fwdfwsettings{'ratecon'},$fwdfwsettings{'RATETIME'}"
- eq "$configoutgoingfw{$key}[0],$configoutgoingfw{$key}[2],$configoutgoingfw{$key}[3],$configoutgoingfw{$key}[4],$configoutgoingfw{$key}[5],$configoutgoingfw{$key}[6],$configoutgoingfw{$key}[7],$configoutgoingfw{$key}[8],$configoutgoingfw{$key}[9],$configoutgoingfw{$key}[10],$configoutgoingfw{$key}[11],$configoutgoingfw{$key}[12],$configoutgoingfw{$key}[13],$configoutgoingfw{$key}[14],$configoutgoingfw{$key}[15],$configoutgoingfw{$key}[17],$configoutgoingfw{$key}[18],$configoutgoingfw{$key}[19],$configoutgoingfw{$key}[20],$configoutgoingfw{$key}[21],$configoutgoingfw{$key}[22],$configoutgoingfw{$key}[23],$configoutgoingfw{$key}[24],$configoutgoingfw{$key}[25],$configoutgoingfw{$key}[26],$configoutgoingfw{$key}[27],$configoutgoingfw{$key}[28],$configoutgoingfw{$key}[29],$configoutgoingfw{$key}[30],$configoutgoingfw{$key}[31],$configoutgoingfw{$key}[32],$configoutgoingfw{$key}[33],$configoutgoingfw{$key}[34],$configoutgoingfw{$key}[35],$configoutgoingfw{$key}[36]"){
- $errormessage.=$Lang::tr{'fwdfw err ruleexists'};
- }
- }
- }
- #check if we just close a rule
- if( $fwdfwsettings{'oldgrp1a'} eq $fwdfwsettings{'grp1'} && $fwdfwsettings{'oldgrp1b'} eq $fwdfwsettings{$fwdfwsettings{'grp1'}} && $fwdfwsettings{'oldgrp2a'} eq $fwdfwsettings{'grp2'} && $fwdfwsettings{'oldgrp2b'} eq $fwdfwsettings{$fwdfwsettings{'grp2'}} && $fwdfwsettings{'oldgrp3a'} eq $fwdfwsettings{'grp3'} && $fwdfwsettings{'oldgrp3b'} eq $fwdfwsettings{$fwdfwsettings{'grp3'}} && $fwdfwsettings{'oldusesrv'} eq $fwdfwsettings{'USESRV'} && $fwdfwsettings{'oldruleremark'} eq $fwdfwsettings{'ruleremark'} && $fwdfwsettings{'oldruletype'} eq $fwdfwsettings{'chain'} ) {
- if($fwdfwsettings{'nosave'} eq 'on' && $fwdfwsettings{'updatefwrule'} eq 'on'){
- $fwdfwsettings{'nosave2'} = 'on';
- $errormessage='';
- }
- }
- #increase counters
- if (!$errormessage){
- if ($fwdfwsettings{'nosave2'} ne 'on'){
- &saverule(\%configoutgoingfw,$configoutgoing);
- }
- }
- }else{
- #FORWARD PART
+ $maxkey=&General::findhasharraykey(\%configoutgoingfw);
+ %rulehash=%configoutgoingfw;
+ }else {
+ # FORWARD PART
$fwdfwsettings{'config'}=$configfwdfw;
$fwdfwsettings{'chain'} = 'FORWARDFW';
- my $maxkey=&General::findhasharraykey(\%configfwdfw);
- if($fwdfwsettings{'oldrulenumber'} eq $fwdfwsettings{'rulepos'}){
- #check if we have an identical rule already
- foreach my $key (sort keys %configfwdfw){
- if ( "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'},$fwdfwsettings{'LIMIT_CON_CON'},$fwdfwsettings{'concon'},$fwdfwsettings{'RATE_LIMIT'},$fwdfwsettings{'ratecon'},$fwdfwsettings{'RATETIME'}"
- eq "$configfwdfw{$key}[0],$configfwdfw{$key}[2],$configfwdfw{$key}[3],$configfwdfw{$key}[4],$configfwdfw{$key}[5],$configfwdfw{$key}[6],$configfwdfw{$key}[7],$configfwdfw{$key}[8],$configfwdfw{$key}[9],$configfwdfw{$key}[10],$configfwdfw{$key}[11],$configfwdfw{$key}[12],$configfwdfw{$key}[13],$configfwdfw{$key}[14],$configfwdfw{$key}[15],$configfwdfw{$key}[18],$configfwdfw{$key}[19],$configfwdfw{$key}[20],$configfwdfw{$key}[21],$configfwdfw{$key}[22],$configfwdfw{$key}[23],$configfwdfw{$key}[24],$configfwdfw{$key}[25],$configfwdfw{$key}[26],$configfwdfw{$key}[27],$configfwdfw{$key}[28],$configfwdfw{$key}[29],$configfwdfw{$key}[30],$configfwdfw{$key}[31],$configfwdfw{$key}[32],$configfwdfw{$key}[33],$configfwdfw{$key}[34],$configfwdfw{$key}[35],$configfwdfw{$key}[36]"){
- $errormessage.=$Lang::tr{'fwdfw err ruleexists'};
- if($fwdfwsettings{'oldruleremark'} ne $fwdfwsettings{'ruleremark'} && $fwdfwsettings{'updatefwrule'} eq 'on' && $fwdfwsettings{'ruleremark'} ne '' && !&validremark($fwdfwsettings{'ruleremark'})){
- $errormessage=$Lang::tr{'fwdfw err remark'}."<br>";
- }
- if($fwdfwsettings{'oldruleremark'} ne $fwdfwsettings{'ruleremark'} && $fwdfwsettings{'updatefwrule'} eq 'on' && $fwdfwsettings{'ruleremark'} ne '' && &validremark($fwdfwsettings{'ruleremark'})){
- $errormessage='';
- }
- if ($fwdfwsettings{'oldruleremark'} eq $fwdfwsettings{'ruleremark'}){
- $fwdfwsettings{'nosave'} = 'on';
- }
- }
+ $maxkey=&General::findhasharraykey(\%configfwdfw);
+ %rulehash=%configfwdfw;
+ }
+ #check if we have an identical rule already
+ if($fwdfwsettings{'oldrulenumber'} eq $fwdfwsettings{'rulepos'}){
+ foreach my $key (sort keys %rulehash){
+ if ( "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'ruleremark'},$fwdfwsettings{'LOG'},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'},$fwdfwsettings{'LIMIT_CON_CON'},$fwdfwsettings{'concon'},$fwdfwsettings{'RATE_LIMIT'},$fwdfwsettings{'ratecon'},$fwdfwsettings{'RATETIME'}"
+ eq "$rulehash{$key}[0],$rulehash{$key}[2],$rulehash{$key}[3],$rulehash{$key}[4],$rulehash{$key}[5],$rulehash{$key}[6],$rulehash{$key}[7],$rulehash{$key}[8],$rulehash{$key}[9],$rulehash{$key}[10],$rulehash{$key}[11],$rulehash{$key}[12],$rulehash{$key}[13],$rulehash{$key}[14],$rulehash{$key}[15],$rulehash{$key}[16],$rulehash{$key}[17],$rulehash{$key}[18],$rulehash{$key}[19],$rulehash{$key}[20],$rulehash{$key}[21],$rulehash{$key}[22],$rulehash{$key}[23],$rulehash{$key}[24],$rulehash{$key}[25],$rulehash{$key}[26],$rulehash{$key}[27],$rulehash{$key}[28],$rulehash{$key}[29],$rulehash{$key}[30],$rulehash{$key}[31],$rulehash{$key}[32],$rulehash{$key}[33],$rulehash{$key}[34],$rulehash{$key}[35],$rulehash{$key}[36]"){
+ $errormessage.=$Lang::tr{'fwdfw err ruleexists'};
+ if($fwdfwsettings{'oldruleremark'} ne $fwdfwsettings{'ruleremark'} && $fwdfwsettings{'updatefwrule'} eq 'on' && $fwdfwsettings{'ruleremark'} ne '' && !&validremark($fwdfwsettings{'ruleremark'})){
+ $errormessage=$Lang::tr{'fwdfw err remark'}."<br>";
+ }
+ if($fwdfwsettings{'oldruleremark'} ne $fwdfwsettings{'ruleremark'} && $fwdfwsettings{'updatefwrule'} eq 'on' && $fwdfwsettings{'ruleremark'} ne '' && &validremark($fwdfwsettings{'ruleremark'})){
+ $errormessage='';
+ }
+ if ($fwdfwsettings{'oldruleremark'} eq $fwdfwsettings{'ruleremark'}){
+ $fwdfwsettings{'nosave'} = 'on';
+ }
}
}
- #check Rulepos on new Rule
- if($fwdfwsettings{'rulepos'} > 0 && !$fwdfwsettings{'oldrulenumber'}){
- $fwdfwsettings{'oldrulenumber'}=$maxkey;
- foreach my $key (sort keys %configfwdfw){
- if ( "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'},$fwdfwsettings{'LIMIT_CON_CON'},$fwdfwsettings{'concon'},$fwdfwsettings{'RATE_LIMIT'},$fwdfwsettings{'ratecon'},$fwdfwsettings{'RATETIME'}"
- eq "$configfwdfw{$key}[0],$configfwdfw{$key}[2],$configfwdfw{$key}[3],$configfwdfw{$key}[4],$configfwdfw{$key}[5],$configfwdfw{$key}[6],$configfwdfw{$key}[7],$configfwdfw{$key}[8],$configfwdfw{$key}[9],$configfwdfw{$key}[10],$configfwdfw{$key}[11],$configfwdfw{$key}[12],$configfwdfw{$key}[13],$configfwdfw{$key}[14],$configfwdfw{$key}[15],$configfwdfw{$key}[18],$configfwdfw{$key}[19],$configfwdfw{$key}[20],$configfwdfw{$key}[21],$configfwdfw{$key}[22],$configfwdfw{$key}[23],$configfwdfw{$key}[24],$configfwdfw{$key}[25],$configfwdfw{$key}[26],$configfwdfw{$key}[27],$configfwdfw{$key}[28],$configfwdfw{$key}[29],$configfwdfw{$key}[30],$configfwdfw{$key}[31],$configfwdfw{$key}[32],$configfwdfw{$key}[33],$configfwdfw{$key}[34],$configfwdfw{$key}[35],$configfwdfw{$key}[36]"){
- $errormessage.=$Lang::tr{'fwdfw err ruleexists'};
- }
+ }
+ #check Rulepos on new Rule
+ if($fwdfwsettings{'rulepos'} > 0 && !$fwdfwsettings{'oldrulenumber'}){
+ $fwdfwsettings{'oldrulenumber'}=$maxkey;
+ foreach my $key (sort keys %rulehash){
+ if ( "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'},$fwdfwsettings{'LIMIT_CON_CON'},$fwdfwsettings{'concon'},$fwdfwsettings{'RATE_LIMIT'},$fwdfwsettings{'ratecon'},$fwdfwsettings{'RATETIME'}"
+ eq "$rulehash{$key}[0],$rulehash{$key}[2],$rulehash{$key}[3],$rulehash{$key}[4],$rulehash{$key}[5],$rulehash{$key}[6],$rulehash{$key}[7],$rulehash{$key}[8],$rulehash{$key}[9],$rulehash{$key}[10],$rulehash{$key}[11],$rulehash{$key}[12],$rulehash{$key}[13],$rulehash{$key}[14],$rulehash{$key}[15],$rulehash{$key}[18],$rulehash{$key}[19],$rulehash{$key}[20],$rulehash{$key}[21],$rulehash{$key}[22],$rulehash{$key}[23],$rulehash{$key}[24],$rulehash{$key}[25],$rulehash{$key}[26],$rulehash{$key}[27],$rulehash{$key}[28],$rulehash{$key}[29],$rulehash{$key}[30],$rulehash{$key}[31],$rulehash{$key}[32],$rulehash{$key}[33],$rulehash{$key}[34],$rulehash{$key}[35],$rulehash{$key}[36]"){
+ $errormessage.=$Lang::tr{'fwdfw err ruleexists'};
}
}
- #check if we just close a rule
- if( $fwdfwsettings{'oldgrp1a'} eq $fwdfwsettings{'grp1'} && $fwdfwsettings{'oldgrp1b'} eq $fwdfwsettings{$fwdfwsettings{'grp1'}} && $fwdfwsettings{'oldgrp2a'} eq $fwdfwsettings{'grp2'} && $fwdfwsettings{'oldgrp2b'} eq $fwdfwsettings{$fwdfwsettings{'grp2'}} && $fwdfwsettings{'oldgrp3a'} eq $fwdfwsettings{'grp3'} && $fwdfwsettings{'oldgrp3b'} eq $fwdfwsettings{$fwdfwsettings{'grp3'}} && $fwdfwsettings{'oldusesrv'} eq $fwdfwsettings{'USESRV'} && $fwdfwsettings{'oldruleremark'} eq $fwdfwsettings{'ruleremark'} && $fwdfwsettings{'oldruletype'} eq $fwdfwsettings{'chain'}){
- if($fwdfwsettings{'nosave'} eq 'on' && $fwdfwsettings{'updatefwrule'} eq 'on'){
- $fwdfwsettings{'nosave2'} = 'on';
- $errormessage='';
- }
+ }
+ #check if we just close a rule
+ if( $fwdfwsettings{'oldgrp1a'} eq $fwdfwsettings{'grp1'} && $fwdfwsettings{'oldgrp1b'} eq $fwdfwsettings{$fwdfwsettings{'grp1'}} && $fwdfwsettings{'oldgrp2a'} eq $fwdfwsettings{'grp2'} && $fwdfwsettings{'oldgrp2b'} eq $fwdfwsettings{$fwdfwsettings{'grp2'}} && $fwdfwsettings{'oldgrp3a'} eq $fwdfwsettings{'grp3'} && $fwdfwsettings{'oldgrp3b'} eq $fwdfwsettings{$fwdfwsettings{'grp3'}} && $fwdfwsettings{'oldusesrv'} eq $fwdfwsettings{'USESRV'} && $fwdfwsettings{'oldruleremark'} eq $fwdfwsettings{'ruleremark'} && $fwdfwsettings{'oldruletype'} eq $fwdfwsettings{'chain'}){
+ if($fwdfwsettings{'nosave'} eq 'on' && $fwdfwsettings{'updatefwrule'} eq 'on'){
+ $fwdfwsettings{'nosave2'} = 'on';
+ $errormessage='';
}
- #check max concurrent connections per ip address
- if ($fwdfwsettings{'LIMIT_CON_CON'} eq 'ON'){
- if (!($fwdfwsettings{'concon'} =~ /^(\d+)$/)) {
- $errormessage.=$Lang::tr{'fwdfw err concon'};
- }
- }else{
- $fwdfwsettings{'concon'}='';
+ }
+ #check max concurrent connections per ip address
+ if ($fwdfwsettings{'LIMIT_CON_CON'} eq 'ON'){
+ if (!($fwdfwsettings{'concon'} =~ /^(\d+)$/)) {
+ $errormessage.=$Lang::tr{'fwdfw err concon'};
}
- #check ratelimit value
- if ($fwdfwsettings{'RATE_LIMIT'} eq 'ON'){
- if (!($fwdfwsettings{'ratecon'} =~ /^(\d+)$/)) {
- $errormessage.=$Lang::tr{'fwdfw err ratecon'};
- }
- }else{
- $fwdfwsettings{'ratecon'}='';
+ }else{
+ $fwdfwsettings{'concon'}='';
+ }
+ #check ratelimit value
+ if ($fwdfwsettings{'RATE_LIMIT'} eq 'ON'){
+ if (!($fwdfwsettings{'ratecon'} =~ /^(\d+)$/)) {
+ $errormessage.=$Lang::tr{'fwdfw err ratecon'};
}
- #increase counters
- if (!$errormessage){
- if ($fwdfwsettings{'nosave2'} ne 'on'){
- &saverule(\%configfwdfw,$configfwdfw);
- }
+ }else{
+ $fwdfwsettings{'ratecon'}='';
+ }
+ #increase counters
+ if (!$errormessage){
+ if ($fwdfwsettings{'nosave2'} ne 'on'){
+ &saverule(\%rulehash,$fwdfwsettings{'config'});
}
}
if ($errormessage){
}
print"</select></td>";
}
+ # geoip locations / groups.
+ my @geoip_locations = &fwlib::get_geoip_locations();
+
+ print "<tr>\n";
+ print "<td valign='top'><input type='radio' name='$grp' id='cust_geoip_$srctgt' value='cust_geoip_$srctgt' $checked{$grp}{'cust_geoip_'.$srctgt}></td>\n";
+ print "<td>$Lang::tr{'geoip'}</td>\n";
+ print "<td align='right'><select name='cust_geoip_$srctgt' style='width:200px;'>\n";
+
+ # Add GeoIP groups to dropdown.
+ if (!-z $configgeoipgrp) {
+ print "<optgroup label='$Lang::tr{'fwhost cust geoipgroup'}'>\n";
+ foreach my $key (sort { ncmp($customgeoipgrp{$a}[0],$customgeoipgrp{$b}[0]) } keys %customgeoipgrp) {
+ my $selected;
+
+ # Generate stored value for select detection.
+ my $stored = join(':', "group",$customgeoipgrp{$key}[0]);
+
+ # Only show a group once and group with elements.
+ if($helper ne $customgeoipgrp{$key}[0] && $customgeoipgrp{$key}[2] ne 'none') {
+ # Mark current entry as selected.
+ if ($fwdfwsettings{$fwdfwsettings{$grp}} eq $stored) {
+ $selected = "selected='selected'";
+ }
+ print"<option $selected value='group:$customgeoipgrp{$key}[0]'>$customgeoipgrp{$key}[0]</option>\n";
+ }
+ $helper=$customgeoipgrp{$key}[0];
+ }
+ print "</optgroup>\n";
+ }
+
+ # Add locations.
+ print "<optgroup label='$Lang::tr{'fwhost cust geoiplocation'}'>\n";
+ foreach my $location (@geoip_locations) {
+ # Get country name.
+ my $country_name = &GeoIP::get_full_country_name($location);
+
+ # Mark current entry as selected.
+ my $selected;
+ if ($fwdfwsettings{$fwdfwsettings{$grp}} eq $location) {
+ $selected = "selected='selected'";
+ }
+ print "<option $selected value='$location'>$location - $country_name</option>\n";
+ }
+ print "</optgroup>\n";
+
+ # Close GeoIP dropdown.
+ print "</select></td>\n";
+
#End left table. start right table (vpn)
print"</tr></table></td><td valign='top'><table width='95%' border='0' align='right'><tr>";
# CCD networks
&General::readhasharray("$confighost", \%customhost);
&General::readhasharray("$configccdhost", \%ccdhost);
&General::readhasharray("$configgrp", \%customgrp);
+ &General::readhasharray("$configgeoipgrp", \%customgeoipgrp);
&General::readhasharray("$configipsec", \%ipsecconf);
&General::get_aliases(\%aliases);
my %checked=();
$Lang::tr{'fwdfw use nat'}
</label>
<div class="NAT">
- <table width='100%' border='0'>
+ <table class='fw-nat' width='100%' border='0'>
<tr>
<td width='5%'></td>
<td width='40%'>
END
print <<END;
- <td width='25%' align='right'>$Lang::tr{'dnat address'}:</td>
+ <td width='25%' align='right'><span class='dnat'>$Lang::tr{'dnat address'}:</span></td>
<td width='30%'>
- <select name='dnat' style='width: 100%;'>
+ <select name='dnat' class='dnat' style='width: 100%;'>
<option value='AUTO' $selected{'dnat'}{'AUTO'}>- $Lang::tr{'automatic'} -</option>
<option value='Default IP' $selected{'dnat'}{'Default IP'}>$Lang::tr{'red1'} ($redip)</option>
END
$Lang::tr{'fwdfw snat'}
</label>
</td>
- <td width='25%' align='right'>$Lang::tr{'snat new source ip address'}:</td>
+ <td width='25%' align='right'><span class='snat'>$Lang::tr{'snat new source ip address'}:</span></td>
<td width='30%'>
- <select name='snat' style='width: 100%;'>
+ <select name='snat' class='snat' style='width: 100%;'>
END
foreach my $alias (sort keys %aliases) {
}else{
print $$hash{$key}[4];
}
+ }elsif ($$hash{$key}[3] eq 'cust_geoip_src') {
+ my ($split1,$split2) = split(":", $$hash{$key}[4]);
+ if ($split2) {
+ print "$split2\n";
+ }else{
+ print "$Lang::tr{'geoip'}: $$hash{$key}[4]\n";
+ }
}elsif ($$hash{$key}[4] eq 'RED1'){
print "$ipfireiface $Lang::tr{'fwdfw red'}";
}elsif ($$hash{$key}[4] eq 'ALL'){
}else{
print $$hash{$key}[6];
}
+ }elsif ($$hash{$key}[5] eq 'cust_geoip_tgt') {
+ my ($split1,$split2) = split(":", $$hash{$key}[6]);
+ if ($split2) {
+ print "$split2\n";
+ }else{
+ print "$Lang::tr{'geoip'}: $$hash{$key}[6]\n";
+ }
}elsif ($$hash{$key}[5] eq 'tgt_addr'){
my ($split1,$split2) = split("/",$$hash{$key}[6]);
if ($split2 eq '32'){
#RULE ACTIVE
if($$hash{$key}[2] eq 'ON'){
$gif="/images/on.gif"
-
}else{
$gif="/images/off.gif"
}
use CGI::Carp 'fatalsToBrowser';
no warnings 'uninitialized';
require '/var/ipfire/general-functions.pl';
+require "/var/ipfire/geoip-functions.pl";
+require "/usr/lib/firewall/firewall-lib.pl";
require "${General::swroot}/lang.pl";
require "${General::swroot}/header.pl";
my %customgrp=();
my %customservice=();
my %customservicegrp=();
+my %customgeoipgrp=();
my %ccdnet=();
my %ccdhost=();
my %ipsecconf=();
my $configipsec = "${General::swroot}/vpn/config";
my $configsrv = "${General::swroot}/fwhosts/customservices";
my $configsrvgrp = "${General::swroot}/fwhosts/customservicegrp";
+my $configgeoipgrp = "${General::swroot}/fwhosts/customgeoipgrp";
my $fwconfigfwd = "${General::swroot}/firewall/config";
my $fwconfiginp = "${General::swroot}/firewall/input";
my $fwconfigout = "${General::swroot}/firewall/outgoing";
unless (-e $configgrp) { system("touch $configgrp"); }
unless (-e $configsrv) { system("touch $configsrv"); }
unless (-e $configsrvgrp) { system("touch $configsrvgrp"); }
+unless (-e $configgeoipgrp) { system("touch $configgeoipgrp"); }
&General::readhash("${General::swroot}/main/settings", \%mainsettings);
&General::readhash("/srv/web/ipfire/html/themes/".$mainsettings{'THEME'}."/include/colors.txt", \%color);
&addgrp;
&viewtablegrp;
}
+if ($fwhostsettings{'ACTION'} eq 'savegeoipgrp')
+{
+ my $grp=$fwhostsettings{'grp_name'};
+ my $rem=$fwhostsettings{'remark'};
+ my $count;
+ my $type;
+ my @target;
+ my @newgrp;
+ &General::readhasharray("$configgeoipgrp", \%customgeoipgrp);
+ &General::readhasharray("$fwconfigfwd", \%fwfwd);
+ &General::readhasharray("$fwconfiginp", \%fwinp);
+ &General::readhasharray("$fwconfigout", \%fwout);
+
+ # Check for existing group name.
+ if (!&checkgroup($grp) && $fwhostsettings{'update'} ne 'on'){
+ $errormessage = $Lang::tr{'fwhost err grpexist'};
+ }
+
+ # Check remark.
+ if ($rem ne '' && !&validremark($rem) && $fwhostsettings{'update'} ne 'on'){
+ $errormessage = $Lang::tr{'fwhost err remark'};
+ }
+
+ if ($fwhostsettings{'update'} eq 'on'){
+ @target=$fwhostsettings{'COUNTRY_CODE'};
+ $type='GeoIP Group';
+
+ #check if host/net exists in grp
+ my $test="$grp,$fwhostsettings{'oldremark'},@target";
+ foreach my $key (keys %customgeoipgrp) {
+ my $test1="$customgeoipgrp{$key}[0],$customgeoipgrp{$key}[1],$customgeoipgrp{$key}[2]";
+ if ($test1 eq $test){
+ $errormessage=$Lang::tr{'fwhost err isingrp'};
+ $fwhostsettings{'update'} = 'on';
+ }
+ }
+ }
+
+ if (!$errormessage){
+ #on first save, we have an empty @target, so fill it with nothing
+ my $targetvalues=@target;
+ if ($targetvalues == '0'){
+ @target="none";
+ }
+ #on update, we have to delete the dummy entry
+ foreach my $key (keys %customgeoipgrp){
+ if ($customgeoipgrp{$key}[0] eq $grp && $customgeoipgrp{$key}[2] eq "none"){
+ delete $customgeoipgrp{$key};
+ last;
+ }
+ }
+ &General::writehasharray("$configgeoipgrp", \%customgeoipgrp);
+ &General::readhasharray("$configgeoipgrp", \%customgeoipgrp);
+ #create array with new lines
+ foreach my $line (@target){
+ push (@newgrp,"$grp,$rem,$line");
+ }
+ #append new entries
+ my $key = &General::findhasharraykey (\%customgeoipgrp);
+ foreach my $line (@newgrp){
+ foreach my $i (0 .. 3) { $customgeoipgrp{$key}[$i] = "";}
+ my ($a,$b,$c,$d) = split (",",$line);
+ $customgeoipgrp{$key}[0] = $a;
+ $customgeoipgrp{$key}[1] = $b;
+ $customgeoipgrp{$key}[2] = $c;
+ $customgeoipgrp{$key}[3] = $type;
+ }
+ &General::writehasharray("$configgeoipgrp", \%customgeoipgrp);
+ #update counter in Host/Net
+ $fwhostsettings{'update'}='on';
+ }
+ #check if ruleupdate is needed
+ my $geoipgrpcount=0;
+ $geoipgrpcount=&getgeoipcount($grp);
+ if($geoipgrpcount > 0 )
+ {
+ &General::firewall_config_changed();
+ }
+ &addgeoipgrp;
+ &viewtablegeoipgrp;
+}
if ($fwhostsettings{'ACTION'} eq 'saveservice')
{
my $ICMP;
}
}
}
- if ($tcpcounter > 15){
+ if ($tcpcounter > 14){
$errormessage=$Lang::tr{'fwhost err maxservicetcp'};
}
- if ($udpcounter > 15){
+ if ($udpcounter > 14){
$errormessage=$Lang::tr{'fwhost err maxserviceudp'};
}
$tcpcounter=0;
&addgrp;
&viewtablegrp;
}
+if ($fwhostsettings{'ACTION'} eq 'editgeoipgrp')
+{
+ $fwhostsettings{'update'}='on';
+ &addgeoipgrp;
+ &viewtablegeoipgrp;
+}
if ($fwhostsettings{'ACTION'} eq 'editservice')
{
$fwhostsettings{'updatesrv'}='on';
$fwhostsettings{'remark'} ="";
&showmenu;
}
+if ($fwhostsettings{'ACTION'} eq 'resetgeoipgrp')
+{
+ $fwhostsettings{'grp_name'} ="";
+ $fwhostsettings{'remark'} ="";
+ &showmenu;
+}
# delete
if ($fwhostsettings{'ACTION'} eq 'delnet')
{
&addgrp;
&viewtablegrp;
}
+if ($fwhostsettings{'ACTION'} eq 'deletegeoipgrpentry')
+{
+ my $grpremark;
+ my $grpname;
+ &General::readhasharray("$configgeoipgrp", \%customgeoipgrp);
+ foreach my $key (keys %customgeoipgrp){
+ if($customgeoipgrp{$key}[0].",".$customgeoipgrp{$key}[1].",".$customgeoipgrp{$key}[2].",".$customgeoipgrp{$key}[3] eq $fwhostsettings{'delentry'}){
+ $grpname=$customgeoipgrp{$key}[0];
+ $grpremark=$customgeoipgrp{$key}[1];
+ #check if we delete the last entry, then generate dummy
+ if ($fwhostsettings{'last'} eq 'on'){
+ $customgeoipgrp{$key}[1] = '';
+ $customgeoipgrp{$key}[2] = 'none';
+ $customgeoipgrp{$key}[3] = '';
+ $fwhostsettings{'last'}='';
+ last;
+ }else{
+ delete $customgeoipgrp{$key};
+ }
+ }
+ }
+ &General::writehasharray("$configgeoipgrp", \%customgeoipgrp);
+ &General::firewall_config_changed();
+ if ($fwhostsettings{'update'} eq 'on'){
+ $fwhostsettings{'remark'}= $grpremark;
+ $fwhostsettings{'grp_name'}=$grpname;
+ }
+ &addgeoipgrp;
+ &viewtablegeoipgrp;
+}
+
if ($fwhostsettings{'ACTION'} eq 'delgrp')
{
&General::readhasharray("$configgrp", \%customgrp);
&addgrp;
&viewtablegrp;
}
+if ($fwhostsettings{'ACTION'} eq 'delgeoipgrp')
+{
+ &General::readhasharray("$configgeoipgrp", \%customgeoipgrp);
+ &decrease($fwhostsettings{'grp_name'});
+ foreach my $key (sort keys %customgeoipgrp)
+ {
+ if($customgeoipgrp{$key}[0] eq $fwhostsettings{'grp_name'})
+ {
+ delete $customgeoipgrp{$key};
+ }
+ }
+ &General::writehasharray("$configgeoipgrp", \%customgeoipgrp);
+ $fwhostsettings{'grp_name'}='';
+ &addgeoipgrp;
+ &viewtablegeoipgrp;
+}
if ($fwhostsettings{'ACTION'} eq 'delservice')
{
&General::readhasharray("$configsrv", \%customservice);
&addgrp;
&viewtablegrp;
}
+if ($fwhostsettings{'ACTION'} eq $Lang::tr{'fwhost newgeoipgrp'})
+{
+ &addgeoipgrp;
+ &viewtablegeoipgrp;
+}
if ($fwhostsettings{'ACTION'} eq $Lang::tr{'fwhost newservice'})
{
&addservice;
&addgrp;
&viewtablegrp;
}
+if ($fwhostsettings{'ACTION'} eq 'changegeoipgrpremark')
+{
+ &General::readhasharray("$configgeoipgrp", \%customgeoipgrp);
+ if ($fwhostsettings{'oldrem'} ne $fwhostsettings{'newrem'} && (&validremark($fwhostsettings{'newrem'}) || $fwhostsettings{'newrem'} eq '')){
+ foreach my $key (sort keys %customgeoipgrp)
+ {
+ if($customgeoipgrp{$key}[0] eq $fwhostsettings{'grp'} && $customgeoipgrp{$key}[1] eq $fwhostsettings{'oldrem'})
+ {
+ $customgeoipgrp{$key}[1]='';
+ $customgeoipgrp{$key}[1]=$fwhostsettings{'newrem'};
+ }
+ }
+ &General::writehasharray("$configgeoipgrp", \%customgeoipgrp);
+ $fwhostsettings{'update'}='on';
+ $fwhostsettings{'remark'}=$fwhostsettings{'newrem'};
+ }else{
+ $errormessage=$Lang::tr{'fwhost err remark'};
+ $fwhostsettings{'remark'}=$fwhostsettings{'oldrem'};
+ $fwhostsettings{'grp_name'}=$fwhostsettings{'grp'};
+ $fwhostsettings{'update'} = 'on';
+ }
+ $fwhostsettings{'grp_name'}=$fwhostsettings{'grp'};
+ &addgeoipgrp;
+ &viewtablegeoipgrp;
+}
if ($fwhostsettings{'ACTION'} eq 'changesrvgrpremark')
{
&General::readhasharray("$configsrvgrp", \%customservicegrp );
&addgrp;
&viewtablegrp;
}
+if ($fwhostsettings{'ACTION'} eq 'changegeoipgrpname')
+{
+ &General::readhasharray("$configgeoipgrp", \%customgeoipgrp );
+ if ($fwhostsettings{'oldgrpname'} ne $fwhostsettings{'grp'}){
+ #Check new groupname
+ if (!&validhostname($fwhostsettings{'grp'})){
+ $errormessage.=$Lang::tr{'fwhost err name'}."<br>";
+ }
+ if (!$errormessage){
+ # Rename group.
+ foreach my $key (keys %customgeoipgrp) {
+ if($customgeoipgrp{$key}[0] eq $fwhostsettings{'oldgrpname'}){
+ $customgeoipgrp{$key}[0]=$fwhostsettings{'grp'};
+ }
+ }
+ &General::writehasharray("$configgeoipgrp", \%customgeoipgrp );
+ #change name in FW Rules
+ &changenameinfw($fwhostsettings{'oldgrpname'},$fwhostsettings{'grp'},6);
+ }
+ }
+ &addgeoipgrp;
+ &viewtablegeoipgrp;
+}
### VIEW ###
if($fwhostsettings{'ACTION'} eq '')
{
print "$Lang::tr{'fwhost welcome'}";
print<<END;
<br><br><table border='0' width='100%'>
- <tr><td><form method='post'><input type='submit' name='ACTION' value='$Lang::tr{'fwhost newnet'}' ><input type='submit' name='ACTION' value='$Lang::tr{'fwhost newhost'}' ><input type='submit' name='ACTION' value='$Lang::tr{'fwhost newgrp'}' ></form></td>
+ <tr><td><form method='post'><input type='submit' name='ACTION' value='$Lang::tr{'fwhost newnet'}' ><input type='submit' name='ACTION' value='$Lang::tr{'fwhost newhost'}' ><input type='submit' name='ACTION' value='$Lang::tr{'fwhost newgrp'}' ><input type='submit' name='ACTION' value='$Lang::tr{'fwhost newgeoipgrp'}' ></form></td>
<td align='right'><form method='post'><input type='submit' name='ACTION' value='$Lang::tr{'fwhost newservice'}' ><input type='submit' name='ACTION' value='$Lang::tr{'fwhost newservicegrp'}' ></form></td></tr>
<tr><td colspan='6'></td></tr></table>
END
print"<tr><td style='text-align:right;'><input type='submit' value='$Lang::tr{'add'}' style='min-width:100px;' /><input type='hidden' name='oldremark' value='$fwhostsettings{'oldremark'}'><input type='hidden' name='update' value=\"$fwhostsettings{'update'}\"><input type='hidden' name='ACTION' value='savegrp' ></form><form method='post' style='display:inline'><input type='submit' value='$Lang::tr{'fwhost back'}' style='min-width:100px;'><input type='hidden' name='ACTION' value='resetgrp'></form></td></table>";
&Header::closebox();
}
+sub addgeoipgrp
+{
+ &hint;
+ &error;
+ &showmenu;
+ &Header::openbox('100%', 'left', $Lang::tr{'fwhost addgeoipgrp'});
+
+ my %checked=();
+ my $show='';
+ $checked{'check1'}{'off'} = '';
+ $checked{'check1'}{'on'} = '';
+ $checked{'grp2'}{$fwhostsettings{'grp2'}} = 'CHECKED';
+ $fwhostsettings{'oldremark'}=$fwhostsettings{'remark'};
+ $fwhostsettings{'oldgrpname'}=$fwhostsettings{'grp_name'};
+ my $grp=$fwhostsettings{'grp_name'};
+ my $rem=$fwhostsettings{'remark'};
+ if ($fwhostsettings{'update'} eq ''){
+ print<<END;
+ <table width='100%' border='0'>
+ <tr>
+ <td style='width:15%;'>$Lang::tr{'fwhost addgrpname'}</td>
+ <td><form method='post'><input type='TEXT' name='grp_name' value='$fwhostsettings{'grp_name'}' size='30'></td>
+ </tr>
+ <tr>
+ <td>$Lang::tr{'remark'}:</td>
+ <td ><input type='TEXT' name='remark' value='$fwhostsettings{'remark'}' style='width: 99%;'></td>
+ </tr>
+ <tr>
+ <td colspan='2'><br></td>
+ </tr>
+ </table>
+END
+ } else {
+ print<<END;
+ <table width='100%' border='0'>
+ <form method='post'><tr>
+ <td style='width:15%;'>$Lang::tr{'fwhost addgrpname'}</td>
+ <td style='width:30%;'><input type='TEXT' name='grp' value='$fwhostsettings{'grp_name'}' size='30'></td>
+ <td>
+ <input type='submit' value='$Lang::tr{'fwhost change'}'>
+ <input type='hidden' name='oldgrpname' value='$fwhostsettings{'oldgrpname'}'>
+ <input type='hidden' name='ACTION' value='changegeoipgrpname'>
+ </td>
+ <td></td>
+ </tr></form>
+ <tr><form method='post' style='display:inline'>
+ <td>$Lang::tr{'remark'}:</td>
+ <td colspan='2' style='width:98%;'>
+ <input type='TEXT' name='newrem' value='$fwhostsettings{'remark'}' style='width:98%;'>
+ </td>
+ <td align='right'>
+ <input type='submit' value='$Lang::tr{'fwhost change'}'>
+ <input type='hidden' name='grp' value='$fwhostsettings{'grp_name'}'>
+ <input type='hidden' name='oldrem' value='$fwhostsettings{'oldremark'}'>
+ <input type='hidden' name='ACTION' value='changegeoipgrpremark'>
+ </td>
+ </tr></form>
+ </table>
+ <br><br>
+END
+ }
+ if ($fwhostsettings{'update'} eq 'on') {
+ my @geoip_locations = &fwlib::get_geoip_locations();
+
+ print<<END;
+ <form method='post'>
+ <input type='hidden' name='remark' value='$rem'>
+ <input type='hidden' name='grp_name' value='$grp'>
+
+ <table width='100%' border='0'>
+ <tr>
+ <td style='text-align:left;'>
+ <select name='COUNTRY_CODE' style='width:16em;'>";
+END
+ foreach my $location (@geoip_locations) {
+ # Get full country name.
+ my $fullname = &GeoIP::get_full_country_name($location);
+
+ print"<option value='$location'>$location - $fullname</option>\n";
+ }
+ print <<END;
+ </select>
+ </td>
+ </tr>
+ </table>
+ <br><br>
+END
+ }
+ print <<END;
+ <table width='100%'>
+ <tr><td style='text-align:right;'>
+ <input type='submit' value='$Lang::tr{'add'}' style='min-width:100px;' />
+ <input type='hidden' name='oldremark' value='$fwhostsettings{'oldremark'}'>
+ <input type='hidden' name='update' value=\"$fwhostsettings{'update'}\">
+ <input type='hidden' name='ACTION' value='savegeoipgrp' >
+ </form>
+
+ <form method='post' style='display:inline'>
+
+ <input type='submit' value='$Lang::tr{'fwhost back'}' style='min-width:100px;'>
+ <input type='hidden' name='ACTION' value='resetgeoipgrp'>
+
+ </form>
+ </td></tr></table>
+END
+ &Header::closebox();
+}
sub addservice
{
&error;
&Header::closebox();
}
+}
+sub viewtablegeoipgrp
+{
+ # If our filesize is "zero" there is nothing to read-in.
+ if (-z "$configgeoipgrp") {
+ return;
+ }
+
+ &Header::openbox('100%', 'left', $Lang::tr{'fwhost cust geoipgrp'});
+ &General::readhasharray("$configgeoipgrp", \%customgeoipgrp);
+ &General::readhasharray("$fwconfigfwd", \%fwfwd);
+ &General::readhasharray("$fwconfiginp", \%fwinp);
+ &General::readhasharray("$fwconfigout", \%fwout);
+ my @grp=();
+ my $helper='';
+ my $count=1;
+ my $country_code;
+ my $grpname;
+ my $remark;
+ my $number;
+ my $delflag;
+ my @counter;
+ my %hash;
+
+ # If there are no groups we are finished here.
+ if (!keys %customgeoipgrp) {
+ print "<center><b>$Lang::tr{'fwhost err emptytable'}</b>";
+ return;
+ }
+
+ # Put all groups in a hash.
+ foreach my $key (sort { ncmp($customgeoipgrp{$a}[0],$customgeoipgrp{$b}[0]) }
+ sort { ncmp($customgeoipgrp{$a}[2],$customgeoipgrp{$b}[2]) } keys %customgeoipgrp) {
+ push (@counter,$customgeoipgrp{$key}[0]);
+ }
+
+ # Increase current used key.
+ foreach my $key1 (@counter) {
+ $hash{$key1}++ ;
+ }
+
+ # Sort hash.
+ foreach my $key (sort { ncmp($customgeoipgrp{$a}[0],$customgeoipgrp{$b}[0]) }
+ sort { ncmp($customgeoipgrp{$a}[2],$customgeoipgrp{$b}[2]) } keys %customgeoipgrp) {
+ $count++;
+ if ($helper ne $customgeoipgrp{$key}[0]) {
+ $delflag='0';
+
+ foreach my $key1 (sort { ncmp($customgeoipgrp{$a}[0],$customgeoipgrp{$b}[0]) }
+ sort { ncmp($customgeoipgrp{$a}[2],$customgeoipgrp{$b}[2]) } keys %customgeoipgrp) {
+
+ if ($customgeoipgrp{$key}[0] eq $customgeoipgrp{$key1}[0])
+ {
+ $delflag++;
+ }
+ if($delflag > 1){
+ last;
+ }
+ }
+
+ $number=1;
+
+ # Groupname.
+ $grpname=$customgeoipgrp{$key}[0];
+
+ # Group remark.
+ $remark="$customgeoipgrp{$key}[1]";
+
+ # Country code.
+ $country_code="$customgeoipgrp{$key}[2]";
+
+ if ($count gt 1){
+ print"</table>";
+ $count=1;
+ }
+
+ # Display groups header.
+ print "<br><b><u>$grpname</u></b> \n";
+ print "<b>$Lang::tr{'remark'}:</b>  $remark  \n" if ($remark ne '');
+
+ # Get group count.
+ my $geoipgrpcount=&getgeoipcount($grpname);
+ print "<b>$Lang::tr{'used'}:</b> $geoipgrpcount x";
+
+ # Only display delete icon, if the group is not used by a firewall rule.
+ if($geoipgrpcount == '0') {
+ print"<form method='post' style='display:inline'>\n";
+ print"<input type='image' src='/images/delete.gif' alt='$Lang::tr{'delete'}' title='$Lang::tr{'delete'}' align='right' />\n";
+ print"<input type='hidden' name='grp_name' value='$grpname' >\n";
+ print"<input type='hidden' name='ACTION' value='delgeoipgrp'>\n";
+ print"</form>";
+ }
+
+ # Icon for group editing.
+print <<END;
+ <form method='post' style='display:inline'>
+ <input type='image' src='/images/edit.gif' alt='$Lang::tr{'edit'}' title='$Lang::tr{'edit'}' align='right'/>
+ <input type='hidden' name='grp_name' value='$grpname' >
+ <input type='hidden' name='remark' value='$remark' >
+ <input type='hidden' name='ACTION' value='editgeoipgrp'>
+ </form>
+
+ <table width='100%' cellspacing='0' class='tbl'>
+END
+ # Display headlines if the group contains any entries.
+ if ($country_code ne "none") {
+print <<END;
+ <tr>
+ <td width='10%' align='center'>
+ <b>$Lang::tr{'flag'}</b>
+ </td>
+
+ <td width='10%'align='center'>
+ <b>$Lang::tr{'countrycode'}</b>
+ </td>
+
+ <td width='70%'align='left'>
+ <b>$Lang::tr{'country'}</b>
+ </td>
+
+ <td width='10%' align='right'></td>
+ </tr>
+END
+ }
+ }
+
+ # Check if our group contains any entries.
+ if ($country_code eq "none") {
+ print "<tr><td>$Lang::tr{'fwhost err emptytable'}</td></tr>\n";
+ } else {
+ # Check if we are currently editing a group and assign column backgound colors.
+ my $col='';
+ if ( ($fwhostsettings{'ACTION'} eq 'editgeoipgrp' || $fwhostsettings{'update'} ne '')
+ && $fwhostsettings{'grp_name'} eq $customgeoipgrp{$key}[0]) {
+ $col="bgcolor='${Header::colouryellow}'";
+ } elsif ($count %2 == 0){
+ $col="bgcolor='$color{'color20'}'";
+ } else {
+ $col="bgcolor='$color{'color22'}'";
+ }
+
+ # Get country flag.
+ my $icon = &GeoIP::get_flag_icon($customgeoipgrp{$key}[2]);
+
+ # Print column with flag icon.
+ my $col_content;
+ if ($icon) {
+ $col_content = "<img src='$icon' alt='$customgeoipgrp{$key}[2]' title='$customgeoipgrp{$key}[2]'>";
+ } else {
+ $col_content = "<b>N/A</b>";
+ }
+
+ print "<td align='center' $col>$col_content</td>\n";
+
+ # Print column with country code.
+ print "<td align='center' $col>$customgeoipgrp{$key}[2]</td>\n";
+
+ # Print column with full country name.
+ my $country_name = &GeoIP::get_full_country_name($customgeoipgrp{$key}[2]);
+ print "<td align='left' $col>$country_name</td>\n";
+
+ # Generate from for removing entries from a group.
+ print "<td align='right' width='1%' $col><form method='post'>\n";
+
+ if ($delflag > 0){
+ print"<input type='image' src='/images/delete.gif' align='middle' alt='$Lang::tr{'delete'}' title='$Lang::tr{'delete'}'/>\n";
+
+ # Check if this group only has a single entry.
+ foreach my $key2 (keys %hash) {
+ if ($hash{$key2}<2 && $key2 eq $customgeoipgrp{$key}[0]){
+ print "<input type='hidden' name='last' value='on'>" ;
+ }
+ }
+ }
+
+ print "<input type='hidden' name='ACTION' value='deletegeoipgrpentry'>\n";
+ print "<input type='hidden' name='update' value='$fwhostsettings{'update'}'>\n";
+ print "<input type='hidden' name='delentry' value='$grpname,$remark,$customgeoipgrp{$key}[2],$customgeoipgrp{$key}[3]'>\n";
+ print "</form>\n";
+ print "</td>\n";
+ print "</tr>\n";
+ }
+
+ $helper=$customgeoipgrp{$key}[0];
+ $number++;
+ }
+
+ print"</table>\n";
+ &Header::closebox();
}
sub viewtableservice
{
}
return $srvcounter;
}
+sub getgeoipcount
+{
+ my $groupname=shift;
+ my $counter=0;
+
+ # GeoIP groups are stored as "group:groupname" in the
+ # firewall settings files.
+ my $searchstring = join(':', "group",$groupname);
+
+ # Count services used in firewall - forward
+ foreach my $key1 (keys %fwfwd) {
+ if($fwfwd{$key1}[4] eq $searchstring){
+ $counter++;
+ }
+ if($fwfwd{$key1}[6] eq $searchstring){
+ $counter++;
+ }
+ }
+ #Count services used in firewall - input
+ foreach my $key2 (keys %fwinp) {
+ if($fwinp{$key2}[4] eq $searchstring){
+ $counter++;
+ }
+ if($fwinp{$key2}[6] eq $searchstring){
+ $counter++;
+ }
+ }
+ #Count services used in firewall - outgoing
+ foreach my $key3 (keys %fwout) {
+ if($fwout{$key3}[4] eq $searchstring){
+ $counter++;
+ }
+ if($fwout{$key3}[6] eq $searchstring){
+ $counter++;
+ }
+ }
+ return $counter;
+}
sub getnetcount
{
my $searchstring=shift;
--- /dev/null
+#!/usr/bin/perl
+###############################################################################
+# #
+# IPFire.org - A linux based firewall #
+# Copyright (C) 2014 IPFire Developemnt 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/>. #
+# #
+###############################################################################
+
+use strict;
+# enable only the following on debugging purpose
+#use warnings;
+#use CGI::Carp 'fatalsToBrowser';
+
+require '/var/ipfire/general-functions.pl';
+require "${General::swroot}/geoip-functions.pl";
+require "${General::swroot}/lang.pl";
+require "${General::swroot}/header.pl";
+require "/usr/lib/firewall/firewall-lib.pl";
+
+my $notice;
+my $settingsfile = "${General::swroot}/firewall/geoipblock";
+
+my %color = ();
+my %mainsettings = ();
+my %settings = ();
+my %cgiparams = ();
+
+# Read configuration file.
+&General::readhash("$settingsfile", \%settings);
+
+&General::readhash("${General::swroot}/main/settings", \%mainsettings);
+&General::readhash("/srv/web/ipfire/html/themes/".$mainsettings{'THEME'}."/include/colors.txt", \%color);
+
+&Header::showhttpheaders();
+
+#Get GUI values
+&Header::getcgihash(\%cgiparams);
+
+# Call subfunction to get all available locations.
+my @locations = &fwlib::get_geoip_locations();
+
+if ($cgiparams{'ACTION'} eq $Lang::tr{'save'}) {
+ # Check if we want to disable geoipblock.
+ if (exists $cgiparams{'GEOIPBLOCK_ENABLED'}) {
+ $settings{'GEOIPBLOCK_ENABLED'} = "on";
+ } else {
+ $settings{'GEOIPBLOCK_ENABLED'} = "off";
+ }
+
+ # Loop through our locations array to prevent from
+ # non existing countries or code.
+ foreach my $cn (@locations) {
+ # Check if blocking for this country should be enabled/disabled.
+ if (exists $cgiparams{$cn}) {
+ $settings{$cn} = "on";
+ } else {
+ $settings{$cn} = "off";
+ }
+ }
+
+ &General::writehash("$settingsfile", \%settings);
+
+ # Mark the firewall config as changed.
+ &General::firewall_config_changed();
+
+ # Assign reload notice. We directly can use
+ # the notice from p2p block.
+ $notice = $Lang::tr{'p2p block save notice'};
+}
+
+&Header::openpage($Lang::tr{'geoipblock configuration'}, 1, '');
+
+# Print notice that a firewall reload is required.
+if ($notice) {
+ &Header::openbox('100%', 'left', $Lang::tr{'notice'});
+ print "<font class='base'>$notice</font>";
+ &Header::closebox();
+}
+
+# Checkbox pre-selection.
+my $checked;
+if ($settings{'GEOIPBLOCK_ENABLED'} eq "on") {
+ $checked = "checked='checked'";
+}
+
+# Print box to enable/disable geoipblock.
+print"<form method='POST' action='$ENV{'SCRIPT_NAME'}'>\n";
+
+&Header::openbox('100%', 'center', $Lang::tr{'geoipblock'});
+print <<END;
+ <table width='95%'>
+ <tr>
+ <td width='25%' class='base'>$Lang::tr{'geoipblock enable feature'}
+ <td><input type='checkbox' name='GEOIPBLOCK_ENABLED' $checked></td>
+ </tr>
+ <tr>
+ <td colspan='2'><br></td>
+ </tr>
+ </table>
+
+ <hr>
+
+ <table width='95%'>
+ <tr>
+ <td align='center'><input type='submit' name='ACTION' value='$Lang::tr{'save'}'></td>
+ </tr>
+ </table>
+END
+
+&Header::closebox();
+
+&Header::openbox('100%', 'center', $Lang::tr{'geoipblock block countries'});
+### JAVA SCRIPT ###
+print <<END;
+<script>
+ // Function to allow checking all checkboxes at once.
+ function check_all() {
+ \$("#countries").find(":checkbox").prop("checked", true);
+ }
+
+ function uncheck_all() {
+ \$("#countries").find(":checkbox").prop("checked", false);
+ }
+</script>
+
+<table width='95%' class='tbl' id="countries">
+ <tr>
+ <td width='5%' align='center' bgcolor='$color{'color20'}'></td>
+ <td width='5%' align='center' bgcolor='$color{'color20'}'>
+ <b>$Lang::tr{'flag'}</b>
+ </td>
+ <td width='5%' align='center' bgcolor='$color{'color20'}'>
+ <b>$Lang::tr{'countrycode'}</b>
+ </td>
+ <td with='35%' align='left' bgcolor='$color{'color20'}'>
+ <b>$Lang::tr{'country'}</b>
+ </td>
+
+ <td width='5%' bgcolor='$color{'color20'}'> </td>
+
+ <td width='5%' align='center' bgcolor='$color{'color20'}'></td>
+ <td width='5%' align='center' bgcolor='$color{'color20'}'>
+ <b>$Lang::tr{'flag'}</b>
+ </td>
+ <td width='5%' align='center' bgcolor='$color{'color20'}'>
+ <b>$Lang::tr{'countrycode'}</b>
+ </td>
+ <td with='35%' align='left' bgcolor='$color{'color20'}'>
+ <b>$Lang::tr{'country'}</b>
+ </td>
+ </tr>
+END
+
+my $lines;
+my $lines2;
+my $col;
+foreach my $location (@locations) {
+ # Country code in upper case. (DE)
+ my $ccode_uc = $location;
+
+ # County code in lower case. (de)
+ my $ccode_lc = lc($location);
+
+ # Full name of the country based on the country code.
+ my $cname = &GeoIP::get_full_country_name($ccode_lc);
+
+ # Get flag icon for of the country.
+ my $flag_icon = &GeoIP::get_flag_icon($ccode_uc);
+
+ my $flag;
+ # Check if a flag for the country is available.
+ if ($flag_icon) {
+ $flag="<img src='$flag_icon' alt='$ccode_uc' title='$ccode_uc'>";
+ } else {
+ $flag="<b>N/A</b>";
+ }
+
+ # Checkbox pre-selection.
+ my $checked;
+ if ($settings{$ccode_uc} eq "on") {
+ $checked = "checked='checked'";
+ }
+
+ # Colour lines.
+ if ($lines % 2) {
+ $col="bgcolor='$color{'color20'}'";
+ } else {
+ $col="bgcolor='$color{'color22'}'";
+ }
+
+ # Grouping elements.
+ my $line_start;
+ my $line_end;
+ if ($lines2 % 2) {
+ # Increase lines (background color by once.
+ $lines++;
+
+ # Add empty column in front.
+ $line_start="<td $col> </td>";
+
+ # When the line number can be diveded by "2",
+ # we are going to close the line.
+ $line_end="</tr>";
+ } else {
+ # When the line number is not divideable by "2",
+ # we are starting a new line.
+ $line_start="<tr>";
+ $line_end;
+ }
+
+ print "$line_start<td align='center' $col><input type='checkbox' name='$ccode_uc' $checked></td>\n";
+ print "<td align='center' $col>$flag</td>\n";
+ print "<td align='center' $col>$ccode_uc</td>\n";
+ print "<td align='left' $col>$cname</td>$line_end\n";
+
+$lines2++;
+}
+
+print <<END;
+</table>
+
+<table width='95%'>
+ <tr>
+ <td align='right'>
+ <a href="javascript:check_all()">$Lang::tr{'check all'}</a> /
+ <a href="javascript:uncheck_all()">$Lang::tr{'uncheck all'}</a>
+ </td>
+ </tr>
+ <tr>
+ <td align='center'><input type='submit' name='ACTION' value='$Lang::tr{'save'}'></td>
+ </tr>
+</table>
+
+<hr>
+
+<table width='70%'>
+ <tr>
+ <td width='5%'><img src='/images/on.gif'></td>
+ <td>$Lang::tr{'geoipblock country is blocked'}</td>
+ <td width='5%'><img src='/images/off.gif'></td>
+ <td>$Lang::tr{'geoipblock country is allowed'}</td>
+ </tr>
+</table>
+END
+
+&Header::closebox();
+print"</form>\n";
+
+&Header::closebigbox();
+&Header::closepage();
print '</td>';
print '</tr>';
}
-if ( $netsettings{'BLUE_DEV'} ) {
+if (&Header::blue_used()) {
my $sub=&General::iporsubtocidr($netsettings{'BLUE_NETMASK'});
print <<END;
<tr>
print '</td>';
print '</tr>';
}
-if ( $netsettings{'ORANGE_DEV'} ) {
+if (&Header::orange_used()) {
my $sub=&General::iporsubtocidr($netsettings{'ORANGE_NETMASK'});
print <<END;
<tr>
#use CGI::Carp 'fatalsToBrowser';
require '/var/ipfire/general-functions.pl';
+require "${General::swroot}/geoip-functions.pl";
require "${General::swroot}/lang.pl";
require "${General::swroot}/header.pl";
my $comment = $3;
my $packet = $4;
- $packet =~ /IN=(\w+)/; my $iface=$1; if ( $1 =~ /2./ ){ $iface="";}
- $packet =~ /SRC=([\d\.]+)/; my $srcaddr=$1;
- $packet =~ /DST=([\d\.]+)/; my $dstaddr=$1;
- $packet =~ /MAC=([\w+\:]+)/; my $macaddr=$1;
- $packet =~ /PROTO=(\w+)/; my $proto=$1;
- $packet =~ /SPT=(\d+)/; my $srcport=$1;
- $packet =~ /DPT=(\d+)/; my $dstport=$1;
+ my ($iface, $srcaddr, $dstaddr, $macaddr, $proto, $srcport, $dstport);
+ $iface=$1 if $packet =~ /IN=(\w+)/;
+ $srcaddr=$1 if $packet =~ /SRC=([\d\.]+)/;
+ $dstaddr=$1 if $packet =~ /DST=([\d\.]+)/;
+ $macaddr=$1 if $packet =~ /MAC=([\w+\:]+)/;
+ $proto=$1 if $packet =~ /PROTO=(\w+)/;
+ $srcport=$1 if $packet =~ /SPT=(\d+)/;
+ $dstport=$1 if $packet =~ /DPT=(\d+)/;
my $gi = Geo::IP::PurePerl->new();
my $ccode = $gi->country_code_by_name($srcaddr);
<td align='center' $col>$srcport<br/>$dstport</td>
END
;
- if ( $fcode ne "" ){
- print "<td align='center' $col><a href='../country.cgi#$fcode'><img src='/images/flags/$fcode.png' border='0' align='absmiddle' alt='$ccode'></a></td>";}
- else {
- print "<td align='center' $col></td>";}
+ # Get flag icon for of the country.
+ my $flag_icon = &GeoIP::get_flag_icon($fcode);
+
+ if ( $flag_icon) {
+ print "<td align='center' $col><a href='../country.cgi#$fcode'><img src='$flag_icon' border='0' align='absmiddle' alt='$ccode'></a></td>";
+ } else {
+ print "<td align='center' $col></td>";
+ }
+
print <<END
<td align='center' $col>$macaddr</td>
</tr>
#use CGI::Carp 'fatalsToBrowser';
require '/var/ipfire/general-functions.pl';
+require "${General::swroot}/geoip-functions.pl";
require "${General::swroot}/lang.pl";
require "${General::swroot}/header.pl";
print "<td align='center' $col>$key[$s]</td>";
}
else {
- if($key[$s] ne 'unknown' ) {
- my $fcode = lc($key[$s]);
- print "<td align='center' $col><a href='/cgi-bin/country.cgi#$fcode'><img src='/images/flags/$fcode.png' border='0' align='absmiddle' alt='$key[$s]' title='$key[$s]'></a></td>";}
- else {
- print "<td align='center' $col>$key[$s]</td>";
+ my $fcode = lc($key[$s]);
+
+ # Get flag icon for of the country.
+ my $flag_icon = &GeoIP::get_flag_icon($fcode);
+
+ if($flag_icon) {
+ print "<td align='center' $col><a href='/cgi-bin/country.cgi#$fcode'><img src='$flag_icon' border='0' align='absmiddle' alt='$key[$s]' title='$key[$s]'></a></td>";
+ } else {
+ print "<td align='center' $col>$key[$s]</td>";
}
}
print "<td align='center' $col>$value[$s]</td>";
#use CGI::Carp 'fatalsToBrowser';
require '/var/ipfire/general-functions.pl';
+require "${General::swroot}/geoip-functions.pl";
require "${General::swroot}/lang.pl";
require "${General::swroot}/header.pl";
$color++;
print "<td align='center' $col><form method='post' action='showrequestfromip.dat'><input type='hidden' name='MONTH' value='$cgiparams{'MONTH'}'> <input type='hidden' name='DAY' value='$cgiparams{'DAY'}'> <input type='hidden' name='ip' value='$key[$s]'> <input type='submit' value='$Lang::tr{'details'}'></form></td>";
print "<td align='center' $col><a href='/cgi-bin/ipinfo.cgi?ip=$key[$s]'>$key[$s]</a></td>";
- if ( $fcode ne "" ){
- print "<td align='center' $col><a href='/cgi-bin/country.cgi#$fcode'><img src='/images/flags/$fcode.png' border='0' align='absmiddle' alt='$ccode' title='$ccode'></a></td>";}
- else {
- print "<td align='center' $col></td>";}
- print "<td align='center' $col>$value[$s]</td>";
- print "<td align='center' $col>$percent</td>";
- print "</tr>";
+
+ # Get flag icon for of the country.
+ my $flag_icon = &GeoIP::get_flag_icon($ccode);
+
+ if ( $flag_icon ) {
+ print "<td align='center' $col><a href='/cgi-bin/country.cgi#$fcode'><img src='$flag_icon' border='0' align='absmiddle' alt='$ccode' title='$ccode'></a></td>";
+ } else {
+ print "<td align='center' $col></td>";
+ }
+
+ print "<td align='center' $col>$value[$s]</td>";
+ print "<td align='center' $col>$percent</td>";
+ print "</tr>";
}
if($cgiparams{'otherspie'} == 2 ){}
###############################################################################
use strict;
-
+use URI::Escape;
# enable only the following on debugging purpose
#use warnings;
#use CGI::Carp 'fatalsToBrowser';
my @vpns=();
-my @querry = split(/\?/,$ENV{'QUERY_STRING'});
+my @querry = split(/\?/,uri_unescape($ENV{'QUERY_STRING'}));
$querry[0] = '' unless defined $querry[0];
$querry[1] = 'week' unless defined $querry[1];
&Graphs::updatevpngraph($querry[0],$querry[1]);
}else{
&Header::showhttpheaders();
- &Header::openpage($Lang::tr{'host to net vpn'}, 1, '');
+ &Header::openpage($Lang::tr{'vpn statistic rw'}, 1, '');
&Header::openbigbox('100%', 'left');
- my @vpngraphs = `find /var/log/rrd/collectd/localhost/openvpn-*/ -not -path *openvpn-UNDEF* -not -path *openvpn-*n2n* -name *.rrd|sort`;
+ my @vpngraphs = `find /var/log/rrd/collectd/localhost/openvpn-*/ -not -path *openvpn-UNDEF* -not -path *openvpn-*n2n* -name *.rrd 2>/dev/null|sort`;
foreach (@vpngraphs){
if($_ =~ /(.*)\/openvpn-(.*)\/if_octets_derive.rrd/){
push(@vpns,$2);
if(@vpns){
foreach (@vpns) {
&Header::openbox('100%', 'center', "$_ $Lang::tr{'graph'}");
- &Graphs::makegraphbox("netovpnrw.cgi",$_,"week");
+ &Graphs::makegraphbox("netovpnrw.cgi",$_, "day");
&Header::closebox();
}
}else{
&Graphs::updatevpnn2ngraph($querry[0],$querry[1]);
}else{
&Header::showhttpheaders();
- &Header::openpage($Lang::tr{'openvpn server'}, 1, '');
+ &Header::openpage($Lang::tr{'vpn statistic n2n'}, 1, '');
&Header::openbigbox('100%', 'left');
- my @vpngraphs = `find /var/log/rrd/collectd/localhost/openvpn-*-n2n/ -not -path *openvpn-UNDEF* -name *traffic.rrd|sort`;
+ my @vpngraphs = `find /var/log/rrd/collectd/localhost/openvpn-*-n2n/ -not -path *openvpn-UNDEF* -name *traffic.rrd 2>/dev/null|sort`;
foreach (@vpngraphs){
if($_ =~ /(.*)\/openvpn-(.*)\/if_octets_derive-traffic.rrd/){
push(@vpns,$2);
if (@vpns){
foreach (@vpns) {
&Header::openbox('100%', 'center', "$_ $Lang::tr{'graph'}");
- &Graphs::makegraphbox("netovpnsrv.cgi",$_,"week");
+ &Graphs::makegraphbox("netovpnsrv.cgi",$_, "day",320);
&Header::closebox();
}
}else{
print CONF "writepid /var/run/openvpn.pid\n";
print CONF "#DAN prepare OpenVPN for listening on blue and orange\n";
print CONF ";local $sovpnsettings{'VPN_IP'}\n";
- print CONF "dev $sovpnsettings{'DDEVICE'}\n";
+ print CONF "dev tun\n";
print CONF "proto $sovpnsettings{'DPROTOCOL'}\n";
print CONF "port $sovpnsettings{'DDEST_PORT'}\n";
print CONF "script-security 3 system\n";
# Check if we are using mssfix, fragment or mtu-disc and set the corretct mtu of 1500.
# If we doesn't use one of them, we can use the configured mtu value.
if ($sovpnsettings{'MSSFIX'} eq 'on')
- { print CONF "$sovpnsettings{'DDEVICE'}-mtu 1500\n"; }
+ { print CONF "tun-mtu 1500\n"; }
elsif ($sovpnsettings{'FRAGMENT'} ne '' && $sovpnsettings{'DPROTOCOL'} ne 'tcp')
- { print CONF "$sovpnsettings{'DDEVICE'}-mtu 1500\n"; }
+ { print CONF "tun-mtu 1500\n"; }
elsif (($sovpnsettings{'PMTU_DISCOVERY'} eq 'yes') ||
($sovpnsettings{'PMTU_DISCOVERY'} eq 'maybe') ||
($sovpnsettings{'PMTU_DISCOVERY'} eq 'no' ))
- { print CONF "$sovpnsettings{'DDEVICE'}-mtu 1500\n"; }
+ { print CONF "tun-mtu 1500\n"; }
else
- { print CONF "$sovpnsettings{'DDEVICE'}-mtu $sovpnsettings{'DMTU'}\n"; }
+ { print CONF "tun-mtu $sovpnsettings{'DMTU'}\n"; }
if ($vpnsettings{'ROUTES_PUSH'} ne '') {
@temp = split(/\n/,$vpnsettings{'ROUTES_PUSH'});
}
}
+sub writecollectdconf {
+ my $vpncollectd;
+ my %ccdhash=();
+
+ open(COLLECTDVPN, ">${General::swroot}/ovpn/collectd.vpn") or die "Unable to open collectd.vpn: $!";
+ print COLLECTDVPN "Loadplugin openvpn\n";
+ print COLLECTDVPN "\n";
+ print COLLECTDVPN "<Plugin openvpn>\n";
+ print COLLECTDVPN "Statusfile \"/var/run/ovpnserver.log\"\n";
+
+ &General::readhasharray("${General::swroot}/ovpn/ovpnconfig", \%ccdhash);
+ foreach my $key (keys %ccdhash) {
+ if ($ccdhash{$key}[0] eq 'on' && $ccdhash{$key}[3] eq 'net') {
+ print COLLECTDVPN "Statusfile \"/var/run/openvpn/$ccdhash{$key}[1]-n2n\"\n";
+ }
+ }
+
+ print COLLECTDVPN "</Plugin>\n";
+ close(COLLECTDVPN);
+
+ # Reload collectd afterwards
+ system("/usr/local/bin/collectdctrl restart &>/dev/null");
+}
#hier die refresh page
if ( -e "${General::swroot}/ovpn/gencanow") {
$vpnsettings{'VPN_IP'} = $cgiparams{'VPN_IP'};
#new settings for daemon
$vpnsettings{'DOVPN_SUBNET'} = $cgiparams{'DOVPN_SUBNET'};
- $vpnsettings{'DDEVICE'} = $cgiparams{'DDEVICE'};
$vpnsettings{'DPROTOCOL'} = $cgiparams{'DPROTOCOL'};
$vpnsettings{'DDEST_PORT'} = $cgiparams{'DDEST_PORT'};
$vpnsettings{'DMTU'} = $cgiparams{'DMTU'};
my $file = '';
&General::readhasharray("${General::swroot}/ovpn/ovpnconfig", \%confighash);
+ # Kill all N2N connections
+ system("/usr/local/bin/openvpnctrl -kn2n &>/dev/null");
+
foreach my $key (keys %confighash) {
+ my $name = $confighash{$cgiparams{'$key'}}[1];
+
if ($confighash{$key}[4] eq 'cert') {
delete $confighash{$cgiparams{'$key'}};
}
+
+ system ("/usr/local/bin/openvpnctrl -drrd $name");
}
while ($file = glob("${General::swroot}/ovpn/ca/*")) {
unlink $file;
while ($file = glob("${General::swroot}/ovpn/ccd/*")) {
unlink $file
}
-# Delete all RRD files for Roadwarrior connections
- chdir('/var/ipfire/ovpn/ccd');
- while ($file = glob("*")) {
- system ("/usr/local/bin/openvpnctrl -drrd $file");
- }
while ($file = glob("${General::swroot}/ovpn/ccd/*")) {
unlink $file
}
system ("rm -rf $file");
}
+ # Remove everything from the collectd configuration
+ &writecollectdconf();
+
#&writeserverconf();
###
### Reset all step 1
&General::writehasharray("${General::swroot}/ovpn/ovpnconfig", \%confighash);
if ($confighash{$cgiparams{'KEY'}}[3] eq 'net'){
- system('/usr/local/bin/openvpnctrl', '-sn2n', $confighash{$cgiparams{'KEY'}}[1]);
+ system('/usr/local/bin/openvpnctrl', '-sn2n', $confighash{$cgiparams{'KEY'}}[1]);
+ &writecollectdconf();
}
} else {
&General::writehasharray("${General::swroot}/ovpn/ovpnconfig", \%confighash);
if ($confighash{$cgiparams{'KEY'}}[3] eq 'net'){
- if ($n2nactive ne ''){
- system('/usr/local/bin/openvpnctrl', '-kn2n', $confighash{$cgiparams{'KEY'}}[1]);
- }
+ if ($n2nactive ne '') {
+ system('/usr/local/bin/openvpnctrl', '-kn2n', $confighash{$cgiparams{'KEY'}}[1]);
+ &writecollectdconf();
+ }
} else {
- $errormessage = $Lang::tr{'invalid key'};
+ $errormessage = $Lang::tr{'invalid key'};
}
- }
+ }
}
###
print CLIENTCONF "# Server Gateway Network\n";
print CLIENTCONF "route $remsubnet[0] $remsubnet[1]\n";
print CLIENTCONF "# tun Device\n";
- print CLIENTCONF "dev $vpnsettings{'DDEVICE'}\n";
+ print CLIENTCONF "dev tun\n";
print CLIENTCONF "# Port and Protokoll\n";
print CLIENTCONF "port $confighash{$cgiparams{'KEY'}}[29]\n";
print CLIENTCONF "tls-client\r\n";
print CLIENTCONF "client\r\n";
print CLIENTCONF "nobind\r\n";
- print CLIENTCONF "dev $vpnsettings{'DDEVICE'}\r\n";
+ print CLIENTCONF "dev tun\r\n";
print CLIENTCONF "proto $vpnsettings{'DPROTOCOL'}\r\n";
# Check if we are using fragment, mssfix or mtu-disc and set MTU to 1500
# or use configured value.
if ($vpnsettings{FRAGMENT} ne '' && $vpnsettings{DPROTOCOL} ne 'tcp' )
- { print CLIENTCONF "$vpnsettings{'DDEVICE'}-mtu 1500\r\n"; }
+ { print CLIENTCONF "tun-mtu 1500\r\n"; }
elsif ($vpnsettings{MSSFIX} eq 'on')
- { print CLIENTCONF "$vpnsettings{'DDEVICE'}-mtu 1500\r\n"; }
+ { print CLIENTCONF "tun-mtu 1500\r\n"; }
elsif (($vpnsettings{'PMTU_DISCOVERY'} eq 'yes') ||
($vpnsettings{'PMTU_DISCOVERY'} eq 'maybe') ||
($vpnsettings{'PMTU_DISCOVERY'} eq 'no' ))
- { print CLIENTCONF "$vpnsettings{'DDEVICE'}-mtu 1500\r\n"; }
+ { print CLIENTCONF "tun-mtu 1500\r\n"; }
else
- { print CLIENTCONF "$vpnsettings{'DDEVICE'}-mtu $vpnsettings{'DMTU'}\r\n"; }
+ { print CLIENTCONF "tun-mtu $vpnsettings{'DMTU'}\r\n"; }
if ( $vpnsettings{'ENABLED'} eq 'on'){
print CLIENTCONF "remote $vpnsettings{'VPN_IP'} $vpnsettings{'DDEST_PORT'}\r\n";
} elsif ($cgiparams{'ACTION'} eq $Lang::tr{'remove'}) {
- &General::readhash("${General::swroot}/ovpn/settings", \%vpnsettings);
- &General::readhasharray("${General::swroot}/ovpn/ovpnconfig", \%confighash);
+ &General::readhash("${General::swroot}/ovpn/settings", \%vpnsettings);
+ &General::readhasharray("${General::swroot}/ovpn/ovpnconfig", \%confighash);
- if ($confighash{$cgiparams{'KEY'}}) {
-# if ($vpnsettings{'ENABLED'} eq 'on' ||
-# $vpnsettings{'ENABLED_BLUE'} eq 'on') {
-# system('/usr/local/bin/ipsecctrl', 'D', $cgiparams{'KEY'});
-# }
-#
- my $temp = `/usr/bin/openssl ca -revoke ${General::swroot}/ovpn/certs/$confighash{$cgiparams{'KEY'}}[1]cert.pem -config ${General::swroot}/ovpn/openssl/ovpn.cnf`;
+ if ($confighash{$cgiparams{'KEY'}}) {
+ # Revoke certificate if certificate was deleted and rewrite the CRL
+ my $temp = `/usr/bin/openssl ca -revoke ${General::swroot}/ovpn/certs/$confighash{$cgiparams{'KEY'}}[1]cert.pem -config ${General::swroot}/ovpn/openssl/ovpn.cnf`;
+ my $tempA = `/usr/bin/openssl ca -gencrl -out ${General::swroot}/ovpn/crls/cacrl.pem -config ${General::swroot}/ovpn/openssl/ovpn.cnf`;
###
# m.a.d net2net
###
-if ($confighash{$cgiparams{'KEY'}}[3] eq 'net') {
- my $conffile = glob("${General::swroot}/ovpn/n2nconf/$confighash{$cgiparams{'KEY'}}[1]/$confighash{$cgiparams{'KEY'}}[1].conf");
- my $certfile = glob("${General::swroot}/ovpn/certs/$confighash{$cgiparams{'KEY'}}[1].p12");
- unlink ($certfile);
- unlink ($conffile);
+ if ($confighash{$cgiparams{'KEY'}}[3] eq 'net') {
+ # Stop the N2N connection before it is removed
+ system("/usr/local/bin/openvpnctrl -kn2n $confighash{$cgiparams{'KEY'}}[1] &>/dev/null");
- if (-e "${General::swroot}/ovpn/n2nconf/$confighash{$cgiparams{'KEY'}}[1]") {
- rmdir ("${General::swroot}/ovpn/n2nconf/$confighash{$cgiparams{'KEY'}}[1]") || die "Kann Verzeichnis nicht loeschen: $!";
- }
-}
+ my $conffile = glob("${General::swroot}/ovpn/n2nconf/$confighash{$cgiparams{'KEY'}}[1]/$confighash{$cgiparams{'KEY'}}[1].conf");
+ my $certfile = glob("${General::swroot}/ovpn/certs/$confighash{$cgiparams{'KEY'}}[1].p12");
+ unlink ($certfile);
+ unlink ($conffile);
+
+ if (-e "${General::swroot}/ovpn/n2nconf/$confighash{$cgiparams{'KEY'}}[1]") {
+ rmdir ("${General::swroot}/ovpn/n2nconf/$confighash{$cgiparams{'KEY'}}[1]") || die "Kann Verzeichnis nicht loeschen: $!";
+ }
+ }
- unlink ("${General::swroot}/ovpn/certs/$confighash{$cgiparams{'KEY'}}[1]cert.pem");
- unlink ("${General::swroot}/ovpn/certs/$confighash{$cgiparams{'KEY'}}[1].p12");
+ unlink ("${General::swroot}/ovpn/certs/$confighash{$cgiparams{'KEY'}}[1]cert.pem");
+ unlink ("${General::swroot}/ovpn/certs/$confighash{$cgiparams{'KEY'}}[1].p12");
# A.Marx CCD delete ccd files and routes
-
- if (-f "${General::swroot}/ovpn/ccd/$confighash{$cgiparams{'KEY'}}[2]")
- {
- unlink "${General::swroot}/ovpn/ccd/$confighash{$cgiparams{'KEY'}}[2]";
- }
-
- &General::readhasharray("${General::swroot}/ovpn/ccdroute", \%ccdroutehash);
- foreach my $key (keys %ccdroutehash) {
- if ($ccdroutehash{$key}[0] eq $confighash{$cgiparams{'KEY'}}[1]){
- delete $ccdroutehash{$key};
+ if (-f "${General::swroot}/ovpn/ccd/$confighash{$cgiparams{'KEY'}}[2]")
+ {
+ unlink "${General::swroot}/ovpn/ccd/$confighash{$cgiparams{'KEY'}}[2]";
}
- }
- &General::writehasharray("${General::swroot}/ovpn/ccdroute", \%ccdroutehash);
- &General::readhasharray("${General::swroot}/ovpn/ccdroute2", \%ccdroute2hash);
- foreach my $key (keys %ccdroute2hash) {
- if ($ccdroute2hash{$key}[0] eq $confighash{$cgiparams{'KEY'}}[1]){
- delete $ccdroute2hash{$key};
+ &General::readhasharray("${General::swroot}/ovpn/ccdroute", \%ccdroutehash);
+ foreach my $key (keys %ccdroutehash) {
+ if ($ccdroutehash{$key}[0] eq $confighash{$cgiparams{'KEY'}}[1]){
+ delete $ccdroutehash{$key};
+ }
}
- }
- &General::writehasharray("${General::swroot}/ovpn/ccdroute2", \%ccdroute2hash);
- &writeserverconf;
-
+ &General::writehasharray("${General::swroot}/ovpn/ccdroute", \%ccdroutehash);
-# CCD end
+ &General::readhasharray("${General::swroot}/ovpn/ccdroute2", \%ccdroute2hash);
+ foreach my $key (keys %ccdroute2hash) {
+ if ($ccdroute2hash{$key}[0] eq $confighash{$cgiparams{'KEY'}}[1]){
+ delete $ccdroute2hash{$key};
+ }
+ }
+ &General::writehasharray("${General::swroot}/ovpn/ccdroute2", \%ccdroute2hash);
+ &writeserverconf;
-###
-### Delete all RRD's for client
-###
- system ("/usr/local/bin/openvpnctrl -drrd $confighash{$cgiparams{'KEY'}}[1]");
- delete $confighash{$cgiparams{'KEY'}};
- my $temp2 = `/usr/bin/openssl ca -gencrl -out ${General::swroot}/ovpn/crls/cacrl.pem -config ${General::swroot}/ovpn/openssl/ovpn.cnf`;
- &General::writehasharray("${General::swroot}/ovpn/ovpnconfig", \%confighash);
+# CCD end
+ # Update collectd configuration and delete all RRD files of the removed connection
+ &writecollectdconf();
+ system ("/usr/local/bin/openvpnctrl -drrd $confighash{$cgiparams{'KEY'}}[1]");
- #&writeserverconf();
- } else {
- $errormessage = $Lang::tr{'invalid key'};
- }
+ delete $confighash{$cgiparams{'KEY'}};
+ my $temp2 = `/usr/bin/openssl ca -gencrl -out ${General::swroot}/ovpn/crls/cacrl.pem -config ${General::swroot}/ovpn/openssl/ovpn.cnf`;
+ &General::writehasharray("${General::swroot}/ovpn/ovpnconfig", \%confighash);
+
+ } else {
+ $errormessage = $Lang::tr{'invalid key'};
+ }
&General::firewall_reload();
###
$errormessage = $Lang::tr{'invalid key'};
}
-###
-### Remove connection
-###
-} elsif ($cgiparams{'ACTION'} eq $Lang::tr{'remove'}) {
- &General::readhash("${General::swroot}/ovpn/settings", \%vpnsettings);
- &General::readhasharray("${General::swroot}/ovpn/ovpnconfig", \%confighash);
-
- if ($confighash{$cgiparams{'KEY'}}) {
-# if ($vpnsettings{'ENABLED'} eq 'on' ||
-# $vpnsettings{'ENABLED_BLUE'} eq 'on') {
-# system('/usr/local/bin/ipsecctrl', 'D', $cgiparams{'KEY'});
-# }
- unlink ("${General::swroot}/ovpn/certs/$confighash{$cgiparams{'KEY'}}[1]cert.pem");
- unlink ("${General::swroot}/ovpn/certs/$confighash{$cgiparams{'KEY'}}[1].p12");
- delete $confighash{$cgiparams{'KEY'}};
- &General::writehasharray("${General::swroot}/ovpn/ovpnconfig", \%confighash);
- #&writeserverconf();
- } else {
- $errormessage = $Lang::tr{'invalid key'};
- }
-#test33
-
-###
-### Choose between adding a host-net or net-net connection
-###
-
###
# m.a.d net2net
###
@firen2nconf = <FILE>;
close (FILE);
chomp(@firen2nconf);
-
} else {
$errormessage = "Filecount does not match only 2 files are allowed\n";
unless(-d "${General::swroot}/ovpn/n2nconf/"){mkdir "${General::swroot}/ovpn/n2nconf", 0755 or die "Unable to create dir $!";}
unless(-d "${General::swroot}/ovpn/n2nconf/$n2nname[0]"){mkdir "${General::swroot}/ovpn/n2nconf/$n2nname[0]", 0770 or die "Unable to create dir $!";}
+ #Add collectd settings to configfile
+ open(FILE, ">> $tempdir/$uplconffilename") or die 'Unable to open config file.';
+ print FILE "# Logfile\n";
+ print FILE "status-version 1\n";
+ print FILE "status /var/run/openvpn/$n2nname[0]-n2n 10\n";
+ close FILE;
+
move("$tempdir/$uplconffilename", "${General::swroot}/ovpn/n2nconf/$n2nname[0]/$uplconffilename2");
if ($? ne 0) {
$checked{'ENABLED_ORANGE'}{'off'} = '';
$checked{'ENABLED_ORANGE'}{'on'} = '';
$checked{'ENABLED_ORANGE'}{$cgiparams{'ENABLED_ORANGE'}} = 'CHECKED';
- $selected{'DDEVICE'}{'tun'} = '';
- $selected{'DDEVICE'}{'tap'} = '';
- $selected{'DDEVICE'}{$cgiparams{'DDEVICE'}} = 'SELECTED';
$selected{'DPROTOCOL'}{'udp'} = '';
$selected{'DPROTOCOL'}{'tcp'} = '';
print <<END;
<tr><td class='base' nowrap='nowrap' colspan='2'>$Lang::tr{'local vpn hostname/ip'}:<br /><input type='text' name='VPN_IP' value='$cgiparams{'VPN_IP'}' size='30' /></td>
<td class='boldbase' nowrap='nowrap' colspan='2'>$Lang::tr{'ovpn subnet'}<br /><input type='TEXT' name='DOVPN_SUBNET' value='$cgiparams{'DOVPN_SUBNET'}' size='30' /></td></tr>
- <tr><td class='boldbase' nowrap='nowrap'>$Lang::tr{'ovpn device'}</td>
- <td><select name='DDEVICE' ><option value='tun' $selected{'DDEVICE'}{'tun'}>TUN</option>
- <!-- this is still not working
- <option value='tap' $selected{'DDEVICE'}{'tap'}>TAP</option></select>--> </td>
<tr><td class='boldbase' nowrap='nowrap'>$Lang::tr{'protocol'}</td>
<td><select name='DPROTOCOL'><option value='udp' $selected{'DPROTOCOL'}{'udp'}>UDP</option>
<option value='tcp' $selected{'DPROTOCOL'}{'tcp'}>TCP</option></select></td>
}
print <<END
- <hr size='1'>
+
+ <br><hr><br>
+
<form method='post' enctype='multipart/form-data'>
- <table width='100%' border='0'cellspacing='1' cellpadding='0'>
- <tr>
- <td class'base'><b>$Lang::tr{'upload ca certificate'}</b></td>
- </tr>
- <tr>
- <td class='base' nowrap='nowrap'>$Lang::tr{'ca name'}:</td>
- <td nowrap='nowrap'><input type='text' name='CA_NAME' value='$cgiparams{'CA_NAME'}' size='15' align='left'/></td>
- <td nowrap='nowrap'><input type='file' name='FH' size='25' />
- <td nowrap='nowrap' align='right'><input type='submit' name='ACTION' value='$Lang::tr{'upload ca certificate'}' /></td>
- </tr>
+ <table border='0' width='100%'>
+ <tr>
+ <td colspan='4'><b>$Lang::tr{'upload ca certificate'}</b></td>
+ </tr>
- <tr align='right'>
- <td colspan='4' align='right' width='80%'><input type='submit' name='ACTION' value='$Lang::tr{'show crl'}' /></td>
- </tr>
+ <tr>
+ <td width='10%'>$Lang::tr{'ca name'}:</td>
+ <td width='30%'><input type='text' name='CA_NAME' value='$cgiparams{'CA_NAME'}' size='15' align='left'></td>
+ <td width='30%'><input type='file' name='FH' size='25'>
+ <td width='30%'align='right'><input type='submit' name='ACTION' value='$Lang::tr{'upload ca certificate'}'></td>
+ </tr>
- <tr><td colspan=4><hr /></td></tr><tr>
- <tr>
- <td class'base'><b>$Lang::tr{'ovpn dh parameters'}</b></td>
- </tr>
+ <tr>
+ <td colspan='3'> </td>
+ <td align='right'><input type='submit' name='ACTION' value='$Lang::tr{'show crl'}' /></td>
+ </tr>
+ </table>
- <tr>
- <td class='base' nowrap='nowrap'>$Lang::tr{'ovpn dh upload'}:</td>
- <td nowrap='nowrap'><size='15' align='left'/></td>
- <td nowrap='nowrap'><input type='file' name='FH' size='25' />
- <td colspan='4' align='right'><input type='submit' name='ACTION' value='$Lang::tr{'upload dh key'}' /></td>
- </tr>
- <tr>
- <td class='base' nowrap='nowrap'>$Lang::tr{'ovpn dh new key'}:</td>
- <td nowrap='nowrap'><size='15' align='left'/></td>
- <td nowrap='nowrap'><input type='submit' name='ACTION' value='$Lang::tr{'generate dh key'}' /></td>
- </tr>
- </table>
+ <br>
+
+ <table border='0' width='100%'>
+ <tr>
+ <td colspan='4'><b>$Lang::tr{'ovpn dh parameters'}</b></td>
+ </tr>
+
+ <tr>
+ <td width='40%'>$Lang::tr{'ovpn dh upload'}:</td>
+ <td width='30%'><input type='file' name='FH' size='25'>
+ <td width='30%' align='right'><input type='submit' name='ACTION' value='$Lang::tr{'upload dh key'}'></td>
+ </tr>
+
+ <tr>
+ <td width='40%'>$Lang::tr{'ovpn dh new key'}:</td>
+ <td colspan='2' width='60%' align='right'><input type='submit' name='ACTION' value='$Lang::tr{'generate dh key'}' /></td>
+ </tr>
+ </table>
+ </form>
- <tr><td colspan=4><hr /></td></tr><tr>
+ <br><hr>
END
;
<form method='post' action='$ENV{'SCRIPT_NAME'}'>
<input type='image' alt='$Lang::tr{'reload'}' title='$Lang::tr{'reload'}' src='/images/view-refresh.png' />
</form>
- <tr><td colspan='2' align='left'><pre>
+ <tr><td colspan='2' align='left'><code>
END
my @output = `grep pakfire /var/log/messages | tail -20`;
foreach (@output) {
- print "$_";
+ print "$_<br>";
}
print <<END;
- </pre>
+ </code>
</table>
END
&Header::closebox();
# mdadm should not stopped with webif because this could crash the system
#
chomp($_);
+ if ( $_ eq 'squid' ) {
+ next;
+ }
if ( ($_ ne "alsa") && ($_ ne "mdadm") ) {
$lines++;
if ($lines % 2){
###############################################################################
use strict;
-use Locale::Country;
+use Locale::Codes::Country;
# enable only the following on debugging purpose
use warnings;
<option value=''>- $Lang::tr{'tor exit country any'} -</option>
END
- my @country_names = Locale::Country::all_country_names();
+ my @country_names = Locale::Codes::Country::all_country_names();
foreach my $country_name (sort @country_names) {
- my $country_code = Locale::Country::country2code($country_name);
+ my $country_code = Locale::Codes::Country::country2code($country_name);
$country_code = uc($country_code);
print "<option value='$country_code'";
# Algorithms
if ($lconfighash{$key}[18] && $lconfighash{$key}[19] && $lconfighash{$key}[20]) {
- print CONF "\tike=";
- my @encs = split('\|', $lconfighash{$key}[18]);
- my @ints = split('\|', $lconfighash{$key}[19]);
- my @groups = split('\|', $lconfighash{$key}[20]);
- my $comma = 0;
- foreach my $i (@encs) {
- foreach my $j (@ints) {
- foreach my $k (@groups) {
- if ($comma != 0) { print CONF ","; } else { $comma = 1; }
-
- my @l = split("", $k);
- if ($l[0] eq "e") {
- shift @l;
- print CONF "$i-$j-ecp".join("", @l);
- } else {
- print CONF "$i-$j-modp$k";
- }
- }
- }
- }
- if ($lconfighash{$key}[24] eq 'on') { #only proposed algorythms?
- print CONF "!\n";
- } else {
- print CONF "\n";
- }
+ my @encs = split('\|', $lconfighash{$key}[18]);
+ my @ints = split('\|', $lconfighash{$key}[19]);
+ my @groups = split('\|', $lconfighash{$key}[20]);
+
+ my @algos = &make_algos("ike", \@encs, \@ints, \@groups, 1);
+ print CONF "\tike=" . join(",", @algos);
+
+ if ($lconfighash{$key}[24] eq 'on') { #only proposed algorythms?
+ print CONF "!\n";
+ } else {
+ print CONF "\n";
+ }
}
+
if ($lconfighash{$key}[21] && $lconfighash{$key}[22]) {
- print CONF "\tesp=";
- my @encs = split('\|', $lconfighash{$key}[21]);
- my @ints = split('\|', $lconfighash{$key}[22]);
- my @groups = split('\|', $lconfighash{$key}[20]);
- my $comma = 0;
- foreach my $i (@encs) {
- foreach my $j (@ints) {
- my $modp = "";
- if ($pfs eq "on") {
- foreach my $k (@groups) {
- if ($comma != 0) { print CONF ","; } else { $comma = 1; }
- if ($pfs eq "on") {
- my @l = split("", $k);
- if ($l[0] eq "e") {
- $modp = "";
- } else {
- $modp = "-modp$k";
- }
- } else {
- $modp = "";
- }
- print CONF "$i-$j$modp";
- }
- } else {
- if ($comma != 0) { print CONF ","; } else { $comma = 1; }
- print CONF "$i-$j";
- }
+ my @encs = split('\|', $lconfighash{$key}[21]);
+ my @ints = split('\|', $lconfighash{$key}[22]);
+ my @groups = split('\|', $lconfighash{$key}[20]);
+
+ my @algos = &make_algos("esp", \@encs, \@ints, \@groups, ($pfs eq "on"));
+ print CONF "\tesp=" . join(",", @algos);
+
+ if ($lconfighash{$key}[24] eq 'on') { #only proposed algorythms?
+ print CONF "!\n";
+ } else {
+ print CONF "\n";
}
- }
- if ($lconfighash{$key}[24] eq 'on') { #only proposed algorythms?
- print CONF "!\n";
- } else {
- print CONF "\n";
- }
}
# IKE V1 or V2
print CONF "\tdpddelay=0\n";
}
} else {
- my $dpddelay = $lconfighash{$key}[30];
+ my $dpddelay = $lconfighash{$key}[31];
if (!$dpddelay) {
$dpddelay = 30;
}
print CONF "\tdpddelay=$dpddelay\n";
- my $dpdtimeout = $lconfighash{$key}[31];
+ my $dpdtimeout = $lconfighash{$key}[30];
if (!$dpdtimeout) {
$dpdtimeout = 120;
}
} else {
print CONF "\tauto=start\n";
}
+
+ # Fragmentation
+ print CONF "\tfragmentation=yes\n";
+
print CONF "\n";
}#foreach key
print SECRETS $last_secrets if ($last_secrets);
if (!$errormessage) {
&General::log("ipsec", "Creating cacert...");
if (open(STDIN, "-|")) {
- my $opt = " req -x509 -nodes -rand /proc/interrupts:/proc/net/rt_cache";
+ my $opt = " req -x509 -sha256 -nodes";
$opt .= " -days 999999";
- $opt .= " -newkey rsa:2048";
+ $opt .= " -newkey rsa:4096";
$opt .= " -keyout ${General::swroot}/private/cakey.pem";
$opt .= " -out ${General::swroot}/ca/cacert.pem";
if (!$errormessage) {
&General::log("ipsec", "Creating host cert...");
if (open(STDIN, "-|")) {
- my $opt = " req -nodes -rand /proc/interrupts:/proc/net/rt_cache";
- $opt .= " -newkey rsa:1024";
+ my $opt = " req -sha256 -nodes";
+ $opt .= " -newkey rsa:2048";
$opt .= " -keyout ${General::swroot}/certs/hostkey.pem";
$opt .= " -out ${General::swroot}/certs/hostreq.pem";
$errormessage = &callssl ($opt);
print $fh "subjectAltName=$cgiparams{'SUBJECTALTNAME'}" if ($cgiparams{'SUBJECTALTNAME'});
close ($fh);
- my $opt = " ca -days 999999";
+ my $opt = " ca -md sha256 -days 999999";
$opt .= " -batch -notext";
$opt .= " -in ${General::swroot}/certs/hostreq.pem";
$opt .= " -out ${General::swroot}/certs/hostcert.pem";
# Sign the certificate request
&General::log("ipsec", "Signing your cert $cgiparams{'NAME'}...");
- my $opt = " ca -days 999999";
+ my $opt = " ca -md sha256 -days 999999";
$opt .= " -batch -notext";
$opt .= " -in $filename";
$opt .= " -out ${General::swroot}/certs/$cgiparams{'NAME'}cert.pem";
(my $city = $cgiparams{'CERT_CITY'}) =~ s/^\s*$/\./;
(my $state = $cgiparams{'CERT_STATE'}) =~ s/^\s*$/\./;
- # Create the Host certificate request
+ # Create the Client certificate request
&General::log("ipsec", "Creating a cert...");
if (open(STDIN, "-|")) {
my $opt = " req -nodes -rand /proc/interrupts:/proc/net/rt_cache";
- $opt .= " -newkey rsa:1024";
+ $opt .= " -newkey rsa:2048";
$opt .= " -keyout ${General::swroot}/certs/$cgiparams{'NAME'}key.pem";
$opt .= " -out ${General::swroot}/certs/$cgiparams{'NAME'}req.pem";
exit (0);
}
- # Sign the host certificate request
+ # Sign the client certificate request
&General::log("ipsec", "Signing the cert $cgiparams{'NAME'}...");
#No easy way for specifying the contain of subjectAltName without writing a config file...
basicConstraints=CA:FALSE
nsComment="OpenSSL Generated Certificate"
subjectKeyIdentifier=hash
+ extendedKeyUsage=clientAuth
authorityKeyIdentifier=keyid,issuer:always
END
;
print $fh "subjectAltName=$cgiparams{'SUBJECTALTNAME'}" if ($cgiparams{'SUBJECTALTNAME'});
close ($fh);
- my $opt = " ca -days 999999 -batch -notext";
+ my $opt = " ca -md sha256 -days 999999 -batch -notext";
$opt .= " -in ${General::swroot}/certs/$cgiparams{'NAME'}req.pem";
$opt .= " -out ${General::swroot}/certs/$cgiparams{'NAME'}cert.pem";
$opt .= " -extfile $v3extname";
$cgiparams{'REMOTE_ID'} = '';
#use default advanced value
- $cgiparams{'IKE_ENCRYPTION'} = 'aes256|aes192|aes128|3des'; #[18];
- $cgiparams{'IKE_INTEGRITY'} = 'sha2_256|sha|md5'; #[19];
+ $cgiparams{'IKE_ENCRYPTION'} = 'aes256gcm128|aes256gcm96|aes256gcm64|aes256|aes192gcm128|aes192gcm96|aes192gcm64|aes192|aes128gcm128|aes128gcm96|aes128gcm64|aes128'; #[18];
+ $cgiparams{'IKE_INTEGRITY'} = 'sha2_512|sha2_256|sha'; #[19];
$cgiparams{'IKE_GROUPTYPE'} = '4096|3072|2048|1536|1024'; #[20];
$cgiparams{'IKE_LIFETIME'} = '3'; #[16];
- $cgiparams{'ESP_ENCRYPTION'} = 'aes256|aes192|aes128|3des'; #[21];
- $cgiparams{'ESP_INTEGRITY'} = 'sha2_256|sha1|md5'; #[22];
+ $cgiparams{'ESP_ENCRYPTION'} = 'aes256gcm128|aes256gcm96|aes256gcm64|aes256|aes192gcm128|aes192gcm96|aes192gcm64|aes192|aes128gcm128|aes128gcm96|aes128gcm64|aes128'; #[21];
+ $cgiparams{'ESP_INTEGRITY'} = 'sha2_512|sha2_256|sha1'; #[22];
$cgiparams{'ESP_GROUPTYPE'} = ''; #[23];
$cgiparams{'ESP_KEYLIFE'} = '1'; #[17];
$cgiparams{'COMPRESSION'} = 'on'; #[13];
goto ADVANCED_ERROR;
}
foreach my $val (@temp) {
- if ($val !~ /^(aes256|aes192|aes128|3des|camellia256|camellia192|camellia128)$/) {
+ if ($val !~ /^(aes(256|192|128)(gcm(128|96|64))?|3des|camellia(256|192|128))$/) {
$errormessage = $Lang::tr{'invalid input'};
goto ADVANCED_ERROR;
}
goto ADVANCED_ERROR;
}
foreach my $val (@temp) {
- if ($val !~ /^(sha2_512|sha2_384|sha2_256|sha|md5|aesxcbc)$/) {
+ if ($val !~ /^(sha2_(512|384|256)|sha|md5|aesxcbc)$/) {
$errormessage = $Lang::tr{'invalid input'};
goto ADVANCED_ERROR;
}
$errormessage = $Lang::tr{'invalid input for ike lifetime'};
goto ADVANCED_ERROR;
}
- if ($cgiparams{'IKE_LIFETIME'} < 1 || $cgiparams{'IKE_LIFETIME'} > 24) {
- $errormessage = $Lang::tr{'ike lifetime should be between 1 and 24 hours'};
+ if ($cgiparams{'IKE_LIFETIME'} < 1 || $cgiparams{'IKE_LIFETIME'} > 8) {
+ $errormessage = $Lang::tr{'ike lifetime should be between 1 and 8 hours'};
goto ADVANCED_ERROR;
}
@temp = split('\|', $cgiparams{'ESP_ENCRYPTION'});
goto ADVANCED_ERROR;
}
foreach my $val (@temp) {
- if ($val !~ /^(aes256|aes192|aes128|3des|camellia256|camellia192|camellia128)$/) {
+ if ($val !~ /^(aes(256|192|128)(gcm(128|96|64))?|3des|camellia(256|192|128))$/) {
$errormessage = $Lang::tr{'invalid input'};
goto ADVANCED_ERROR;
}
goto ADVANCED_ERROR;
}
foreach my $val (@temp) {
- if ($val !~ /^(sha2_512|sha2_384|sha2_256|sha1|md5|aesxcbc)$/) {
+ if ($val !~ /^(sha2_(512|384|256)|sha1|md5|aesxcbc)$/) {
$errormessage = $Lang::tr{'invalid input'};
goto ADVANCED_ERROR;
}
$checked{'IKE_ENCRYPTION'}{'aes256'} = '';
$checked{'IKE_ENCRYPTION'}{'aes192'} = '';
$checked{'IKE_ENCRYPTION'}{'aes128'} = '';
+ $checked{'IKE_ENCRYPTION'}{'aes256gcm128'} = '';
+ $checked{'IKE_ENCRYPTION'}{'aes192gcm128'} = '';
+ $checked{'IKE_ENCRYPTION'}{'aes128gcm128'} = '';
+ $checked{'IKE_ENCRYPTION'}{'aes256gcm96'} = '';
+ $checked{'IKE_ENCRYPTION'}{'aes192gcm96'} = '';
+ $checked{'IKE_ENCRYPTION'}{'aes128gcm96'} = '';
+ $checked{'IKE_ENCRYPTION'}{'aes256gcm64'} = '';
+ $checked{'IKE_ENCRYPTION'}{'aes192gcm64'} = '';
+ $checked{'IKE_ENCRYPTION'}{'aes128gcm64'} = '';
$checked{'IKE_ENCRYPTION'}{'3des'} = '';
$checked{'IKE_ENCRYPTION'}{'camellia256'} = '';
$checked{'IKE_ENCRYPTION'}{'camellia192'} = '';
$checked{'ESP_ENCRYPTION'}{'aes256'} = '';
$checked{'ESP_ENCRYPTION'}{'aes192'} = '';
$checked{'ESP_ENCRYPTION'}{'aes128'} = '';
+ $checked{'ESP_ENCRYPTION'}{'aes256gcm128'} = '';
+ $checked{'ESP_ENCRYPTION'}{'aes192gcm128'} = '';
+ $checked{'ESP_ENCRYPTION'}{'aes128gcm128'} = '';
+ $checked{'ESP_ENCRYPTION'}{'aes256gcm96'} = '';
+ $checked{'ESP_ENCRYPTION'}{'aes192gcm96'} = '';
+ $checked{'ESP_ENCRYPTION'}{'aes128gcm96'} = '';
+ $checked{'ESP_ENCRYPTION'}{'aes256gcm64'} = '';
+ $checked{'ESP_ENCRYPTION'}{'aes192gcm64'} = '';
+ $checked{'ESP_ENCRYPTION'}{'aes128gcm64'} = '';
$checked{'ESP_ENCRYPTION'}{'3des'} = '';
$checked{'ESP_ENCRYPTION'}{'camellia256'} = '';
$checked{'ESP_ENCRYPTION'}{'camellia192'} = '';
<td class='boldbase' width="15%">$Lang::tr{'encryption'}</td>
<td class='boldbase'>
<select name='IKE_ENCRYPTION' multiple='multiple' size='6' style='width: 100%'>
- <option value='aes256' $checked{'IKE_ENCRYPTION'}{'aes256'}>AES (256 bit)</option>
- <option value='aes192' $checked{'IKE_ENCRYPTION'}{'aes192'}>AES (192 bit)</option>
- <option value='aes128' $checked{'IKE_ENCRYPTION'}{'aes128'}>AES (128 bit)</option>
- <option value='3des' $checked{'IKE_ENCRYPTION'}{'3des'}>3DES</option>
- <option value='camellia256' $checked{'IKE_ENCRYPTION'}{'camellia256'}>Camellia (256 bit)</option>
- <option value='camellia192' $checked{'IKE_ENCRYPTION'}{'camellia192'}>Camellia (192 bit)</option>
- <option value='camellia128' $checked{'IKE_ENCRYPTION'}{'camellia128'}>Camellia (128 bit)</option>
+ <option value='aes256gcm128' $checked{'IKE_ENCRYPTION'}{'aes256gcm128'}>256 bit AES-GCM/128 bit ICV</option>
+ <option value='aes256gcm96' $checked{'IKE_ENCRYPTION'}{'aes256gcm96'}>256 bit AES-GCM/96 bit ICV</option>
+ <option value='aes256gcm64' $checked{'IKE_ENCRYPTION'}{'aes256gcm64'}>256 bit AES-GCM/64 bit ICV</option>
+ <option value='aes256' $checked{'IKE_ENCRYPTION'}{'aes256'}>256 bit AES-CBC</option>
+ <option value='camellia256' $checked{'IKE_ENCRYPTION'}{'camellia256'}>256 bit Camellia-CBC</option>
+ <option value='aes192gcm128' $checked{'IKE_ENCRYPTION'}{'aes192gcm128'}>192 bit AES-GCM/128 bit ICV</option>
+ <option value='aes192gcm96' $checked{'IKE_ENCRYPTION'}{'aes192gcm96'}>192 bit AES-GCM/96 bit ICV</option>
+ <option value='aes192gcm64' $checked{'IKE_ENCRYPTION'}{'aes192gcm64'}>192 bit AES-GCM/64 bit ICV</option>
+ <option value='aes192' $checked{'IKE_ENCRYPTION'}{'aes192'}>192 bit AES-CBC</option>
+ <option value='camellia192' $checked{'IKE_ENCRYPTION'}{'camellia192'}>192 bit Camellia-CBC</option>
+ <option value='aes128gcm128' $checked{'IKE_ENCRYPTION'}{'aes128gcm128'}>128 bit AES-GCM/128 bit ICV</option>
+ <option value='aes128gcm96' $checked{'IKE_ENCRYPTION'}{'aes128gcm96'}>128 bit AES-GCM/96 bit ICV</option>
+ <option value='aes128gcm64' $checked{'IKE_ENCRYPTION'}{'aes128gcm64'}>128 bit AES-GCM/64 bit ICV</option>
+ <option value='aes128' $checked{'IKE_ENCRYPTION'}{'aes128'}>128 bit AES-CBC</option>
+ <option value='camellia128' $checked{'IKE_ENCRYPTION'}{'camellia128'}>128 bit Camellia-CBC</option>
+ <option value='3des' $checked{'IKE_ENCRYPTION'}{'3des'}>168 bit 3DES-EDE-CBC</option>
</select>
</td>
<td class='boldbase'>
<select name='ESP_ENCRYPTION' multiple='multiple' size='6' style='width: 100%'>
- <option value='aes256' $checked{'ESP_ENCRYPTION'}{'aes256'}>AES (256 bit)</option>
- <option value='aes192' $checked{'ESP_ENCRYPTION'}{'aes192'}>AES (192 bit)</option>
- <option value='aes128' $checked{'ESP_ENCRYPTION'}{'aes128'}>AES (128 bit)</option>
- <option value='3des' $checked{'ESP_ENCRYPTION'}{'3des'}>3DES</option>
- <option value='camellia256' $checked{'ESP_ENCRYPTION'}{'camellia256'}>Camellia (256 bit)</option>
- <option value='camellia192' $checked{'ESP_ENCRYPTION'}{'camellia192'}>Camellia (192 bit)</option>
- <option value='camellia128' $checked{'ESP_ENCRYPTION'}{'camellia128'}>Camellia (128 bit)</option>
+ <option value='aes256gcm128' $checked{'ESP_ENCRYPTION'}{'aes256gcm128'}>256 bit AES-GCM/128 bit ICV</option>
+ <option value='aes256gcm96' $checked{'ESP_ENCRYPTION'}{'aes256gcm96'}>256 bit AES-GCM/96 bit ICV</option>
+ <option value='aes256gcm64' $checked{'ESP_ENCRYPTION'}{'aes256gcm64'}>256 bit AES-GCM/64 bit ICV</option>
+ <option value='aes256' $checked{'ESP_ENCRYPTION'}{'aes256'}>256 bit AES-CBC</option>
+ <option value='camellia256' $checked{'ESP_ENCRYPTION'}{'camellia256'}>256 bit Camellia-CBC</option>
+ <option value='aes192gcm128' $checked{'ESP_ENCRYPTION'}{'aes192gcm128'}>192 bit AES-GCM/128 bit ICV</option>
+ <option value='aes192gcm96' $checked{'ESP_ENCRYPTION'}{'aes192gcm96'}>192 bit AES-GCM/96 bit ICV</option>
+ <option value='aes192gcm64' $checked{'ESP_ENCRYPTION'}{'aes192gcm64'}>192 bit AES-GCM/64 bit ICV</option>
+ <option value='aes192' $checked{'ESP_ENCRYPTION'}{'aes192'}>192 bit AES-CBC</option>
+ <option value='camellia192' $checked{'ESP_ENCRYPTION'}{'camellia192'}>192 bit Camellia-CBC</option>
+ <option value='aes128gcm128' $checked{'ESP_ENCRYPTION'}{'aes128gcm128'}>128 bit AES-GCM/128 bit ICV</option>
+ <option value='aes128gcm96' $checked{'ESP_ENCRYPTION'}{'aes128gcm96'}>128 bit AES-GCM/96 bit ICV</option>
+ <option value='aes128gcm64' $checked{'ESP_ENCRYPTION'}{'aes128gcm64'}>128 bit AES-GCM/64 bit ICV</option>
+ <option value='aes128' $checked{'ESP_ENCRYPTION'}{'aes128'}>128 bit AES-CBC</option>
+ <option value='camellia128' $checked{'ESP_ENCRYPTION'}{'camellia128'}>128 bit Camellia-CBC</option>
+ <option value='3des' $checked{'ESP_ENCRYPTION'}{'3des'}>168 bit 3DES-EDE-CBC</option>
</select>
</td>
</tr>
<option value='sha2_512' $checked{'IKE_INTEGRITY'}{'sha2_512'}>SHA2 512 bit</option>
<option value='sha2_384' $checked{'IKE_INTEGRITY'}{'sha2_384'}>SHA2 384 bit</option>
<option value='sha2_256' $checked{'IKE_INTEGRITY'}{'sha2_256'}>SHA2 256 bit</option>
+ <option value='aesxcbc' $checked{'IKE_INTEGRITY'}{'aesxcbc'}>AES XCBC</option>
<option value='sha' $checked{'IKE_INTEGRITY'}{'sha'}>SHA1</option>
<option value='md5' $checked{'IKE_INTEGRITY'}{'md5'}>MD5</option>
- <option value='aesxcbc' $checked{'IKE_INTEGRITY'}{'aesxcbc'}>AES XCBC</option>
</select>
</td>
<td class='boldbase'>
<option value='sha2_512' $checked{'ESP_INTEGRITY'}{'sha2_512'}>SHA2 512 bit</option>
<option value='sha2_384' $checked{'ESP_INTEGRITY'}{'sha2_384'}>SHA2 384 bit</option>
<option value='sha2_256' $checked{'ESP_INTEGRITY'}{'sha2_256'}>SHA2 256 bit</option>
+ <option value='aesxcbc' $checked{'ESP_INTEGRITY'}{'aesxcbc'}>AES XCBC</option>
<option value='sha1' $checked{'ESP_INTEGRITY'}{'sha1'}>SHA1</option>
<option value='md5' $checked{'ESP_INTEGRITY'}{'md5'}>MD5</option>
- <option value='aesxcbc' $checked{'ESP_INTEGRITY'}{'aesxcbc'}>AES XCBC</option>
</select>
</td>
</tr>
<td class='boldbase'>
<select name='IKE_GROUPTYPE' multiple='multiple' size='6' style='width: 100%'>
<option value='e521' $checked{'IKE_GROUPTYPE'}{'e521'}>ECP-521 (NIST)</option>
- <option value='e384' $checked{'IKE_GROUPTYPE'}{'e384'}>ECP-384 (NIST)</option>
- <option value='e256' $checked{'IKE_GROUPTYPE'}{'e256'}>ECP-256 (NIST)</option>
- <option value='e224' $checked{'IKE_GROUPTYPE'}{'e224'}>ECP-224 (NIST)</option>
- <option value='e192' $checked{'IKE_GROUPTYPE'}{'e192'}>ECP-192 (NIST)</option>
<option value='e512bp' $checked{'IKE_GROUPTYPE'}{'e512bp'}>ECP-512 (Brainpool)</option>
+ <option value='e384' $checked{'IKE_GROUPTYPE'}{'e384'}>ECP-384 (NIST)</option>
<option value='e384bp' $checked{'IKE_GROUPTYPE'}{'e384bp'}>ECP-384 (Brainpool)</option>
+ <option value='e256' $checked{'IKE_GROUPTYPE'}{'e256'}>ECP-256 (NIST)</option>
<option value='e256bp' $checked{'IKE_GROUPTYPE'}{'e256bp'}>ECP-256 (Brainpool)</option>
+ <option value='e224' $checked{'IKE_GROUPTYPE'}{'e224'}>ECP-224 (NIST)</option>
<option value='e224bp' $checked{'IKE_GROUPTYPE'}{'e224bp'}>ECP-224 (Brainpool)</option>
+ <option value='e192' $checked{'IKE_GROUPTYPE'}{'e192'}>ECP-192 (NIST)</option>
<option value='8192' $checked{'IKE_GROUPTYPE'}{'8192'}>MODP-8192</option>
<option value='6144' $checked{'IKE_GROUPTYPE'}{'6144'}>MODP-6144</option>
<option value='4096' $checked{'IKE_GROUPTYPE'}{'4096'}>MODP-4096</option>
&Header::closebox();
&Header::closebigbox();
&Header::closepage();
+
+sub array_unique($) {
+ my $array = shift;
+ my @unique = ();
+
+ my %seen = ();
+ foreach my $e (@$array) {
+ next if $seen{$e}++;
+ push(@unique, $e);
+ }
+
+ return @unique;
+}
+
+sub make_algos($$$$$) {
+ my ($mode, $encs, $ints, $grps, $pfs) = @_;
+ my @algos = ();
+
+ foreach my $enc (@$encs) {
+ foreach my $int (@$ints) {
+ foreach my $grp (@$grps) {
+ my @algo = ($enc);
+
+ if ($mode eq "ike") {
+ push(@algo, $int);
+
+ if ($grp =~ m/^e(.*)$/) {
+ push(@algo, "ecp$1");
+ } else {
+ push(@algo, "modp$grp");
+ }
+
+ } elsif ($mode eq "esp" && $pfs) {
+ my $is_aead = ($enc =~ m/[cg]cm/);
+
+ if (!$is_aead) {
+ push(@algo, $int);
+ }
+
+ if ($grp =~ m/^e(.*)$/) {
+ push(@algo, "ecp$1");
+ } else {
+ push(@algo, "modp$grp");
+ }
+ }
+
+ push(@algos, join("-", @algo));
+ }
+ }
+ }
+
+ return &array_unique(\@algos);
+}
$wlanapsettings{'PWD'} = 'IPFire-2.x';
$wlanapsettings{'SYSLOGLEVEL'} = '0';
$wlanapsettings{'DEBUG'} = '4';
-$wlanapsettings{'DRIVER'} = 'MADWIFI';
+$wlanapsettings{'DRIVER'} = 'NL80211';
$wlanapsettings{'HTCAPS'} = '';
&General::readhash("/var/ipfire/wlanap/settings", \%wlanapsettings);
my $wiphy = `iw dev $wlanapsettings{'INTERFACE'} info | grep wiphy | cut -d" " -f2`;
chomp $wiphy;
-@channellist_cmd = `iw phy phy$wiphy info | grep " MHz \\\[" | grep -v "(disabled)" | grep -v "no IBSS" | grep -v "passive scanning" 2>/dev/null`;
+@channellist_cmd = `iw phy phy$wiphy info | grep " MHz \\\[" | grep -v "(disabled)" | grep -v "no IBSS" | grep -v "no IR" | grep -v "passive scanning" 2>/dev/null`;
# get available channels
my @temp;
foreach (@channellist_cmd){
$_ =~ /(.*) \[(\d+)(.*)\]/;
$channel = $2;chomp $channel;
-if ( $channel =~ /\d+/ ){push(@temp,$channel);}
+if ( $channel =~ /\d+/ ){push(@temp,$channel + 0);}
}
@channellist = @temp;
} else {
foreach (@channellist_cmd){
$_ =~ /(.*)Channel (\d+)(.*):/;
$channel = $2;chomp $channel;
-if ( $channel =~ /\d+/ ){push(@temp,$channel);}
+if ( $channel =~ /\d+/ ){push(@temp,$channel + 0);}
}
@channellist = @temp;
}
}
# get available power
-my @temp;
-foreach (@txpower_cmd){
-$_ =~ /(\s)(\d+)(\s)dBm(\s)(.*)(\W)(\d+)(.*)/;
-$txpower = $7;chomp $txpower;
-if ( $txpower =~ /\d+/ ){push(@temp,$txpower."mW");}
-}
-my @txpower = @temp;
-push(@txpower,"auto");
-
$selected{'SYSLOGLEVEL'}{$wlanapsettings{'SYSLOGLEVEL'}} = "selected='selected'";
$selected{'DEBUG'}{$wlanapsettings{'DEBUG'}} = "selected='selected'";
;
print <<END
<tr><td width='25%' class='base'>HT Caps: </td><td class='base' colspan='3'><input type='text' name='HTCAPS' size='30' value='$wlanapsettings{'HTCAPS'}' /></td></tr>
-<tr><td width='25%' class='base'>Tx Power: </td><td class='base' colspan='3'>
-END
-;
-
-if ( $wlanapsettings{'DRIVER'} eq 'MADWIFI' ){
- print "<select name='TXPOWER'>";
- foreach $txpower (@txpower){
- print "<option $selected{'TXPOWER'}{$txpower}>$txpower</option> dBm";
- }
- print " </select></td></tr>";
-} else {
- print "<input type='text' name='TXPOWER' size='10' value='$wlanapsettings{'TXPOWER'}' /></td></tr>"
-}
-print <<END
+<tr><td width='25%' class='base'>Tx Power: </td><td class='base' colspan='3'><input type='text' name='TXPOWER' size='10' value='$wlanapsettings{'TXPOWER'}' /></td></tr>
<tr><td width='25%' class='base'>Loglevel (hostapd): </td><td class='base' width='25%'>
<select name='SYSLOGLEVEL'>
<option value='0' $selected{'SYSLOGLEVEL'}{'0'}>0 ($Lang::tr{'wlanap verbose'})</option>
END
;
my @status;
-if ( $wlanapsettings{'DRIVER'} eq 'MADWIFI' ){
- @status = `wlanconfig $wlanapsettings{'INTERFACE'} list`;
-}
if ( $wlanapsettings{'DRIVER'} eq 'NL80211' ){
@status = `iw dev $wlanapsettings{'INTERFACE'} info && iw dev $wlanapsettings{'INTERFACE'} station dump && echo ""`;
}
max-width: 2.5em;
}
+table.fw-nat tbody tr td {
+ height: 2.25em;
+}
+
/* LAYOUT - 3 COLUMNS */
/* Primary content */
max-width: 2.5em;
}
+table.fw-nat tbody tr td {
+ height: 2.25em;
+}
+
/* LAYOUT - 3 COLUMNS */
/* Primary content */
.tbl tr:last-child td {
border-bottom: 1px solid lightgrey;
}
+
+table.fw-nat tbody tr td {
+ height: 2.25em;
+}
max-width: 2.5em;
}
+table.fw-nat tbody tr td {
+ height: 2.25em;
+}
+
/* LAYOUT - 3 COLUMNS */
/* Primary content */
'bit' => 'Bit',
'bitrate' => 'Bitrate',
'bleeding rules' => 'Bleeding Edge Snort Rules',
+'block' => 'Blocken',
'blue' => 'BLAU',
'blue access' => 'Zugriff auf Blau',
'blue access use hint' => 'Sie müssen mindestens die MAC- oder die IP-Adresse für ein Gerät angeben. Optional können Sie sowohl MAC- als auch IP-Adresse angeben.',
'chain' => 'Verknüpfung',
'change passwords' => 'Passwörter ändern',
'change share' => 'Freigabeeinstellungen ändern',
+'check all' => 'Alle auswählen',
'check for net traffic update' => 'Prüfe auf Net-Traffic-Updates',
'check vpn lr' => 'Überprüfen',
'choose config' => 'Konfiguration auswählen',
'fwhost OpenVPN static host' => 'OpenVPN statischer Host',
'fwhost OpenVPN static network' => 'OpenVPN statisches Netzwerk',
'fwhost Standard Network' => 'Standard-Netzwerk',
+'fwhost addgeoipgrp' => 'Neue GeoIP-Gruppe hinzufügen',
'fwhost addgrp' => 'Neue Gruppe hinzufügen',
'fwhost addgrpname' => 'Gruppenname:',
'fwhost addhost' => 'Neuen Host hinzufügen',
'fwhost change' => 'Ändern',
'fwhost changeremark' => 'Es wurde nur die Bemerkung angepasst.',
'fwhost cust addr' => 'Hosts',
+'fwhost cust geoip' => 'GeoIP-Gruppen',
+'fwhost cust geoipgroup' => 'GeoIP-Gruppen',
+'fwhost cust geoiplocation' => 'GeoIP Ländercodes',
'fwhost cust grp' => 'Gruppen',
'fwhost cust net' => 'Netzwerke',
'fwhost cust service' => 'Dienste',
'fwhost ipsec net' => 'IPsec-Netzwerke:',
'fwhost menu' => 'Firewallgruppen',
'fwhost netaddress' => 'Netzwerkadresse',
+'fwhost newgeoipgrp' => 'GeoIP-Gruppen',
'fwhost newgrp' => 'Netzwerk-/Hostgruppen',
'fwhost newhost' => 'Hosts',
'fwhost newnet' => 'Netzwerke',
'generating the root and host certificates may take a long time. it can take up to several minutes on older hardware. please be patient' => 'Die Erzeugung der Root- und Host-Zertifikate kann lange Zeit dauern. Auf älterer Hardware kann es mehrere Minuten lang dauern. Bitte haben Sie etwas Geduld.',
'genkey' => 'PSK erzeugen',
'genre' => 'Genre',
+'geoip' => 'GeoIP',
+'geoipblock' => 'GeoIP Block',
+'geoipblock block countries' => 'Länderfilter',
+'geoipblock configuration' => 'GeoIP Konfiguration',
+'geoipblock country code' => 'Ländercode',
+'geoipblock country is allowed' => 'Eingehende Verbindungen aus diesem Land sind erlaubt.',
+'geoipblock country is blocked' => 'Eingehende Verbindungen aus diesem Land werden blockiert.',
+'geoipblock country name' => 'Ländername',
+'geoipblock enable feature' => 'GeoIP basierte Filterung aktivieren:',
+'geoipblock flag' => 'Flagge',
'global settings' => 'Globale Einstellungen',
'gpl i accept these terms and conditions' => 'Ich akzeptiere diese Bedingungen und Konditionen',
'gpl license agreement' => 'Lizenz-Vereinbarung',
'umount removable media before to unplug' => 'Wechselmedien vor dem Entfernen unbedingt abmelden',
'unable to alter profiles while red is active' => 'Profile können nicht geändert werden, solange ROT aktiv ist.',
'unable to contact' => 'Kann nicht erreicht werden',
+'unblock' => 'Entblocken',
+'unblock all' => 'Alle entblocken',
+'uncheck all' => 'Alle abwählen',
'unencrypted' => 'Nicht verschlüsselt',
'uninstall' => 'Deinstallieren',
'unix charset' => 'UNIX-Charset',
'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 statistic n2n' => 'OpenVPN-Netz-zu-Netz-Statistik',
+'vpn statistic rw' => 'OpenVPN-Roadwarrior-Statistik',
'vpn subjectaltname' => 'Subjekt Alternativer Name',
'vpn vhost' => 'Roadwarrior virtuelle IP (manchmal auch Inner-IP genannt)',
'vpn watch' => 'Netz-zu-Netz VPN neu starten, wenn sich Remote-IP ändert (DynDNS).',
'bit' => 'bit',
'bitrate' => 'Bitrate',
'bleeding rules' => 'Bleeding Edge Snort Rules',
+'block' => 'Block',
'blue' => 'BLUE',
'blue access' => 'Blue Access',
'blue access use hint' => 'You have to enter the MAC or the IP Address for a device. To enter both is also possible',
'chain' => 'Chain',
'change passwords' => 'Change passwords',
'change share' => 'edit share options',
+'check all' => 'Check all',
'check for net traffic update' => 'Check for Net-Traffic updates',
'check vpn lr' => 'Check',
'choose config' => 'Choose config',
'fwhost OpenVPN static host' => 'OpenVPN static host',
'fwhost OpenVPN static network' => 'OpenVPN static network',
'fwhost Standard Network' => 'Standard network',
+'fwhost addgeoipgrp' => 'Add new GeoIP group',
'fwhost addgrp' => 'Add new network/host group',
'fwhost addgrpname' => 'Group name:',
'fwhost addhost' => 'Add new host',
'fwhost change' => 'Modify',
'fwhost changeremark' => 'You modified just the remark',
'fwhost cust addr' => 'Hosts',
+'fwhost cust geoip' => 'GeoIP Groups',
+'fwhost cust geoipgroup' => 'GeoIP Groups',
+'fwhost cust geoiplocation' => 'GeoIP Locations',
'fwhost cust grp' => 'Network/Host Groups',
'fwhost cust net' => 'Networks',
'fwhost cust service' => 'Services',
'fwhost ipsec net' => 'IPsec networks:',
'fwhost menu' => 'Firewall Groups',
'fwhost netaddress' => 'Network address',
+'fwhost newgeoipgrp' => 'GeoIP Groups',
'fwhost newgrp' => 'Network/Host Groups',
'fwhost newhost' => 'Hosts',
'fwhost newnet' => 'Networks',
'generating the root and host certificates may take a long time. it can take up to several minutes on older hardware. please be patient' => 'Generating the root and host certificates may take a long time. It can take up to several minutes on older hardware. Please be patient.',
'genkey' => 'Generate PSK',
'genre' => 'Genre',
+'geoip' => 'GeoIP',
+'geoipblock' => 'GeoIP Block',
+'geoipblock block countries' => 'Block countries',
+'geoipblock configuration' => 'GeoIP Configuration',
+'geoipblock country code' => 'Country Code',
+'geoipblock country is allowed' => 'Incoming traffic from this country is allowed',
+'geoipblock country is blocked' => 'Incoming traffic from this country will be blocked',
+'geoipblock country name' => 'Country Name',
+'geoipblock enable feature' => 'Enable GeoIP based blocking:',
+'geoipblock flag' => 'Flag',
'global settings' => 'Global Settings',
'gpl i accept these terms and conditions' => 'I accept these terms and conditions',
'gpl license agreement' => 'License Agreement',
'umount removable media before to unplug' => 'Umount removable media before unplugging the device',
'unable to alter profiles while red is active' => 'Unable to alter profiles while RED is active.',
'unable to contact' => 'Unable to contact',
+'unblock' => 'Unblock',
+'unblock all' => 'Unblock all',
+'uncheck all' => 'Uncheck all',
'unencrypted' => 'Unencrypted',
'uninstall' => 'Uninstall',
'unix charset' => 'UNIX Charset',
'vpn payload compression' => 'Negotiate payload compression',
'vpn red name' => 'Public IP or FQDN for RED interface or <%defaultroute>',
'vpn remote id' => 'Remote ID',
+'vpn statistic n2n' => 'OpenVPN Net-to-Net Statistics',
+'vpn statistic rw' => 'OpenVPN Roadwarrior Statistics',
'vpn subjectaltname' => 'Subject Alt Name',
'vpn vhost' => 'Roadwarrior virtual IP (sometimes called Inner-IP)',
'vpn watch' => 'Restart net-to-net vpn when remote peer IP changes (dyndns).',
'generating the root and host certificates may take a long time. it can take up to several minutes on older hardware. please be patient' => 'Generar los certificador root y host puede tomar mucho tiempo. Puede durar varios minutos en equipos antiguos. Por favor sea paciente.',
'genkey' => 'Generar PSK',
'genre' => 'Género',
+'geoip' => 'GeoIP',
+'geoipblock' => 'GeoIP Block',
+'geoipblock block countries' => 'Países bloqueados',
+'geoipblock configuration' => 'Configuración GeoIP',
+'geoipblock country code' => 'Código del País',
+'geoipblock country is allowed' => 'Se permite el tráfico procedente de este País',
+'geoipblock country is blocked' => 'Se deniega el tráfico procedente de este País',
+'geoipblock country name' => 'Nombre del País',
+'geoipblock enable feature' => 'Habilitar bloqueo basado GeoIP:',
+'geoipblock flag' => 'Bandera',
'global settings' => 'Configuraciones globales',
'gpl i accept these terms and conditions' => 'I accept these terms and conditions',
'gpl license agreement' => 'License Agreement',
include Config
VER = 1.17
-DATVER = 06052014
+DATVER = 15022015
THISAPP = Geo-IP-PurePerl-$(VER)
DL_FILE = $(THISAPP).tar.gz
GeoIP.dat-$(DATVER).gz = $(DL_FROM)/GeoIP.dat-$(DATVER).gz
$(DL_FILE)_MD5 = 42a6b9d4dd2563a20c8998556216e1de
-GeoIP.dat-$(DATVER).gz_MD5 = aba5fc86202337c53a33bbc47d2083d0
+GeoIP.dat-$(DATVER).gz_MD5 = 508e3c10da15f2722774cf4014863976
install : $(TARGET)
include Config
-VER = 2.07
+VER = 3.33
THISAPP = Locale-Codes-$(VER)
DL_FILE = $(THISAPP).tar.gz
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = af0537cc4a882096d0320612c440df6d
+$(DL_FILE)_MD5 = bc7496f97889de8504e80addaa0ee40c
install : $(TARGET)
###############################################################################
# #
# IPFire.org - A linux based firewall #
-# Copyright (C) 2007 Michael Tremer & Christian Schmidt #
+# Copyright (C) 2015 Michael Tremer & Christian Schmidt #
# #
# 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.0.16
+VER = 2.0.23
THISAPP = acpid-$(VER)
DL_FILE = $(THISAPP).tar.xz
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = d59fc02c9c34f0d5c137495302e2c074
+$(DL_FILE)_MD5 = d7bcdcdefcd53b03730e50ba842554ea
install : $(TARGET)
include Config
-VER = 2.2.27
+VER = 2.2.29
THISAPP = httpd-$(VER)
DL_FILE = $(THISAPP).tar.bz2
DL_FROM = $(URL_IPFIRE)
DIR_APP = $(DIR_SRC)/$(THISAPP)
-ifeq "$(PASS)" "C"
- TARGET = $(DIR_INFO)/$(THISAPP)-config
-else
- TARGET = $(DIR_INFO)/$(THISAPP)
-endif
+
+TARGET = $(DIR_INFO)/$(THISAPP)
###############################################################################
# Top-level Rules
$(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 = 8faef0decf3fa7e69b2568eb2105a3d8
+$(DL_FILE)_MD5 = 579342fdeaa7b8b68d17fee91f8fab6e
httpd-2.2.2-config-1.patch_MD5 = e02a3ec5925eb9e111400b9aa229f822
install : $(TARGET)
$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
@$(PREBUILD)
-ifeq "$(PASS)" "C"
- # DO THIS IN AN EXTRA STEP BECAUSE PHP AND SUBVERSION WILL FAIL.
-
- cp -rf $(DIR_CONF)/httpd/* /etc/httpd/conf
- ln -sf $(CONFIG_ROOT)/main/hostname.conf /etc/httpd/conf/
-
- # Copy all html/cgi-bin files
- mkdir -p /srv/web/ipfire/{cgi-bin,html}
- mkdir -p /var/updatecache/{download,metadata}
- cp -aR $(DIR_SRC)/html/* /srv/web/ipfire
-
- # Change CONFIG_ROOT in cgi-scripts
- for i in /srv/web/ipfire/cgi-bin/{*,logs.cgi/*,vpn.cgi/*}; do \
- if [ -f $$i ]; then \
- sed -i "s+CONFIG_ROOT+$(CONFIG_ROOT)+g" $$i; \
- fi; \
- done
- 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/*/*}
- 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
-else
@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
/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
+
+ # Install apache config
+ cp -rf $(DIR_CONF)/httpd/* /etc/httpd/conf
+ ln -sf $(CONFIG_ROOT)/main/hostname.conf /etc/httpd/conf/
+
@rm -rf $(DIR_APP)
-endif
@$(POSTBUILD)
include Config
-VER = 11.15.0
+VER = 11.17.1
THISAPP = asterisk-$(VER)
DL_FILE = $(THISAPP).tar.gz
DIR_APP = $(DIR_SRC)/$(THISAPP)
TARGET = $(DIR_INFO)/$(THISAPP)
PROG = asterisk
-PAK_VER = 13
+PAK_VER = 16
-DEPS = "sqlite"
+DEPS = "libsrtp"
###############################################################################
# Top-level Rules
asterisk-moh-opsound-gsm-2.03.tar.gz = $(URL_IPFIRE)/asterisk-moh-opsound-gsm-2.03.tar.gz
asterisk-1.4-de-prompts.tar.gz = $(URL_IPFIRE)/asterisk-1.4-de-prompts.tar.gz
-$(DL_FILE)_MD5 = 71e8c2e207255f7ef12b81b7f0da30ea
+$(DL_FILE)_MD5 = 2c6cd0f499152d0d5ff32f36e274fc2e
asterisk-extra-sounds-en-gsm-1.4.15.tar.gz_MD5 = 5099fc65f49008e33ba7fb043a4ec995
asterisk-moh-opsound-gsm-2.03.tar.gz_MD5 = 09066f55f1358f298bc1a6e4678a3ddf
asterisk-1.4-de-prompts.tar.gz_MD5 = 626a2b95071a5505851e43874dfbfd5c
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/compat-drivers-3.8.3-ath_ignore_eeprom_regdomain.patch
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.14.22-iwlwifi-noibss_only_on_radar_chan.patch
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.37-rt2800usb_add_dlink_dwa137_usbid.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/backports-3.18.1-1_rt2x00usb_suppress_queue_warnings.patch
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/backports-3.18.1-1_add_libertas_uap.patch
+ # smsc mac address patch for pandaboard and raspberry pi
+ifeq "$(KCFG)" "-multi"
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10-smsc95xx-add_mac_addr_param.patch
+endif
+ifeq "$(KCFG)" "-rpi"
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10-smsc95xx-add_mac_addr_param.patch
+endif
+
# generate config
cd $(DIR_APP) && make KLIB=/lib/modules/$(KVER)-$(VERSUFIX)/ allmodconfig
###############################################################################
# #
# IPFire.org - A linux based firewall #
-# Copyright (C) 2007-2014 IPFire Team <info@ipfire.org> #
+# Copyright (C) 2007-2015 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 = 0.98.5
+VER = 0.98.7
THISAPP = clamav-$(VER)
DL_FILE = $(THISAPP).tar.gz
DIR_APP = $(DIR_SRC)/$(THISAPP)
TARGET = $(DIR_INFO)/$(THISAPP)
PROG = clamav
-PAK_VER = 27
+PAK_VER = 29
DEPS = ""
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = abb5c7efaff3394c0a49ff970841a2ac
+$(DL_FILE)_MD5 = 157c601161da1c2d5a0e48ea1b49e067
install : $(TARGET)
$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
@$(PREBUILD)
@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/clamav/llvm-glibc.patch
cd $(DIR_APP) && ./configure \
--prefix=/usr \
--sysconfdir=/var/ipfire/clamav \
DIR_APP = $(DIR_SRC)/$(THISAPP)
TARGET = $(DIR_INFO)/$(THISAPP)
+ifeq "$(MACHINE)" "armv5tel"
+ MAKETUNING = -j2
+endif
+
###############################################################################
# Top-level Rules
###############################################################################
include Config
PKG_NAME = collectd
-VER = 4.10.7
+VER = 4.10.9
THISAPP = collectd-$(VER)
DL_FILE = $(THISAPP).tar.bz2
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = f4193fdb5002ddac8159c88032a726bc
+$(DL_FILE)_MD5 = 980dd3387508f9ad209df04a6f7a126c
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 -p1 -i $(DIR_SRC)/src/patches/collectd/0001-src-utils_mount.h-Add-stdio.h.patch
+ cd $(DIR_APP) && patch -p1 -i $(DIR_SRC)/src/patches/collectd/0002-Don-t-notify-continuously-when-MySQL-slave-SQL-threa.patch
+ cd $(DIR_APP) && patch -p1 -i $(DIR_SRC)/src/patches/collectd/0003-curl_xml.c-avoid-using-uninitalized-variable-in-erro.patch
+ cd $(DIR_APP) && patch -p1 -i $(DIR_SRC)/src/patches/collectd/0004-interface.c-FreeBSD-10-support.patch
+ cd $(DIR_APP) && patch -p1 -i $(DIR_SRC)/src/patches/collectd/0005-Revert-curl_xml.c-avoid-using-uninitalized-variable-.patch
+ cd $(DIR_APP) && patch -p1 -i $(DIR_SRC)/src/patches/collectd/0006-network-set_thread_cbs-so-we-initialize-the-right-th.patch
+ cd $(DIR_APP) && patch -p1 -i $(DIR_SRC)/src/patches/collectd/0007-apache-plugin-Call-curl_global_init-from-the-init-fu.patch
+ cd $(DIR_APP) && patch -p1 -i $(DIR_SRC)/src/patches/collectd/0008-network-comment-libgcrypt-initalization-process.patch
+ cd $(DIR_APP) && patch -p1 -i $(DIR_SRC)/src/patches/collectd/0009-Call-curl_global_init-in-_init-of-plugins-using-curl.patch
+ cd $(DIR_APP) && patch -p1 -i $(DIR_SRC)/src/patches/collectd/0010-indent-wh_init-to-be-consistent-with-the-rest-of-the.patch
+ cd $(DIR_APP) && patch -p1 -i $(DIR_SRC)/src/patches/collectd/0011-Configparser-when-we-alocate-an-empty-list-we-also-n.patch
+ cd $(DIR_APP) && patch -p1 -i $(DIR_SRC)/src/patches/collectd/0012-don-t-assume-pkg-config-is-in-PATH.patch
+ cd $(DIR_APP) && patch -p1 -i $(DIR_SRC)/src/patches/collectd/0013-add-missing-backticks-which-broke-the-build.patch
+ cd $(DIR_APP) && patch -p1 -i $(DIR_SRC)/src/patches/collectd/0014-snmp-free-snmp_pdu-struct-allocated-by-snmp_pdu_crea.patch
+ cd $(DIR_APP) && patch -p1 -i $(DIR_SRC)/src/patches/collectd/0015-curl_xml-plugin-Fixed-tautological-pointer-compariso.patch
+ cd $(DIR_APP) && patch -p1 -i $(DIR_SRC)/src/patches/collectd/0016-Add-support-for-OpenVPN-2.3.0-status-files.patch
+ cd $(DIR_APP) && patch -p1 -i $(DIR_SRC)/src/patches/collectd/0017-openvpn-plugin-Don-t-signal-an-error-when-no-clients.patch
+ cd $(DIR_APP) && patch -p1 -i $(DIR_SRC)/src/patches/collectd/0018-openvpn-Remove-boguous-file-handler-check.patch
+ cd $(DIR_APP) && patch -p1 -i $(DIR_SRC)/src/patches/collectd/0019-openvpn-Ignore-not-fully-established-connections.patch
+ cd $(DIR_APP) && patch -p1 -i $(DIR_SRC)/src/patches/collectd/0020-openvpn-Make-read-functions-robust-like-in-8516f9abb.patch
+ cd $(DIR_APP) && patch -p1 -i $(DIR_SRC)/src/patches/collectd/0021-openvpn-Fix-copy-and-paste-error.patch
+ cd $(DIR_APP) && patch -p1 -i $(DIR_SRC)/src/patches/collectd/0022-openvpn-Change-data-type-from-COUNTER-to-DERIVE.patch
+ cd $(DIR_APP) && patch -p1 -i $(DIR_SRC)/src/patches/collectd/silence-openvpn-errors.patch
cd $(DIR_APP) && ./configure --prefix=/usr --localstatedir=/var \
--disable-{apple_sensors,csv,ipvs,mbmon,memcached,mysql} \
--disable-{netlink,nginx,nut,perl,serial,snmp,tape,vserver,xmms} \
--with-librrd=/usr/share/rrdtool-1.2.30
cd $(DIR_APP) && make install
cp -vf $(DIR_SRC)/config/collectd/collectd.* /etc/
+ mv /etc/collectd.vpn /var/ipfire/ovpn/collectd.vpn
+ chown nobody.nobody /var/ipfire/ovpn/collectd.vpn
+ ln -f -s ../var/ipfire/ovpn/collectd.vpn /etc/collectd.vpn
ln -f -s ../init.d/collectd /etc/rc.d/rc0.d/K50collectd
ln -f -s ../init.d/collectd /etc/rc.d/rc3.d/S29collectd
ln -f -s ../init.d/collectd /etc/rc.d/rc6.d/K50collectd
for i in auth/users backup/include.user backup/exclude.user \
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/input firewall/outgoing \
- fwhosts/customnetworks fwhosts/customhosts fwhosts/customgroups fwhosts/customservicegrp fwlogs/ipsettings fwlogs/portsettings \
+ 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 \
isdn/settings mac/settings main/disable_nf_sip main/hosts main/routing main/settings net-traffic/settings optionsfw/settings \
ovpn/ccd.conf ovpn/ccdroute ovpn/ccdroute2 pakfire/settings portfw/config ppp/settings-1 ppp/settings-2 ppp/settings-3 ppp/settings-4 \
ppp/settings-5 ppp/settings proxy/settings proxy/squid.conf proxy/advanced/settings proxy/advanced/cre/enable remote/settings qos/settings qos/classes qos/subclasses qos/level7config qos/portconfig \
cp $(DIR_SRC)/config/cfgroot/header.pl $(CONFIG_ROOT)/
cp $(DIR_SRC)/config/cfgroot/general-functions.pl $(CONFIG_ROOT)/
cp $(DIR_SRC)/config/cfgroot/network-functions.pl $(CONFIG_ROOT)/
+ cp $(DIR_SRC)/config/cfgroot/geoip-functions.pl $(CONFIG_ROOT)/
cp $(DIR_SRC)/config/cfgroot/lang.pl $(CONFIG_ROOT)/
cp $(DIR_SRC)/config/cfgroot/countries.pl $(CONFIG_ROOT)/
cp $(DIR_SRC)/config/cfgroot/graphs.pl $(CONFIG_ROOT)/
$(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/crda-3.13-crypto_use_optional.patch
cd $(DIR_APP) && make $(MAKETUNING)
cd $(DIR_APP) && make install
@rm -rf $(DIR_APP)
###############################################################################
# #
# IPFire.org - A linux based firewall #
-# Copyright (C) 2007 Michael Tremer & Christian Schmidt #
+# Copyright (C) 2015 Michael Tremer & Christian Schmidt #
# #
# 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 = 7.31.0
+VER = 7.40.0
THISAPP = curl-$(VER)
DL_FILE = $(THISAPP).tar.gz
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = 6f26843f7e3a2fb06e02f68a55efe8c7
+$(DL_FILE)_MD5 = 58943642ea0ed050ab0431ea1caf3a6f
install : $(TARGET)
include Config
-VER = 2.1.21
+VER = 2.1.26
THISAPP = cyrus-sasl-$(VER)
DL_FILE = $(THISAPP).tar.gz
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = dde02db234dea892bee298390890502e
+$(DL_FILE)_MD5 = a7f4e5e559a0e37b3ffc438c9456e425
install : $(TARGET)
$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
@$(PREBUILD)
@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/cyrus-sasl-2.1.22-bad-elif.patch
cd $(DIR_APP) && sed -i '/sasl_global/s/^static //' lib/client.c
cd $(DIR_APP) && sed -i 's/cat8/man8/' saslauthd/Makefile.am
cd $(DIR_APP) && autoconf
ifeq "$(PASS)" ""
cd $(DIR_APP) && ./configure --prefix=/usr --sysconfdir=/etc \
--with-dbpath=/var/lib/sasl/sasldb2 \
- --with-saslauthd=/var/run/saslauthd
+ --with-saslauthd=/var/run/saslauthd \
+ --with-des=no --with-rc4=no
cd $(DIR_APP) && make
cd $(DIR_APP) && make install
install -v -m700 -d /var/lib/sasl
include Config
-VER = 005
+VER = 007
THISAPP = ddns-$(VER)
DL_FILE = $(THISAPP).tar.xz
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = 5fb0e7c8a775ae03074ad90d5a251a4c
+$(DL_FILE)_MD5 = 44f63cecc36db0d9ffddfa4bca7983ae
install : $(TARGET)
@$(PREBUILD)
@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/ddns/ddns-005-Add-changeip-com.patch
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/ddns/ddns-005-SPDNS-fix-auth.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/ddns/001-ddns-007-perform-lazy-database-init.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/ddns/002-ddns-007-also-open-database-for-search-operations.patch
cd $(DIR_APP) && [ -x "configure" ] || sh ./autogen.sh
- cd $(DIR_APP) && ./configure --prefix=/usr --sysconfdir=/var/ipfire
+ cd $(DIR_APP) && ./configure \
+ --prefix=/usr \
+ --sysconfdir=/var/ipfire \
+ --disable-manpages
+
cd $(DIR_APP) && make $(MAKETUNING)
cd $(DIR_APP) && make install
###############################################################################
# #
# IPFire.org - A linux based firewall #
-# Copyright (C) 2007-2012 IPFire Team <info@ipfire.org> #
+# Copyright (C) 2007-2015 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 = 4.2.2
+VER = 4.3.1
THISAPP = dhcp-$(VER)
DL_FILE = $(THISAPP).tar.gz
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = bb0f0434cd796f76aa7cead391d71f31
+$(DL_FILE)_MD5 = b3a42ece3c7f2cd2e74a3e12ca881d20
install : $(TARGET)
@$(PREBUILD)
@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.2-remove-bind.patch
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.0-errwarn-message.patch
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.2-options.patch
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.0-release-by-ifup.patch
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.0-dhclient-decline-backoff.patch
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.0-unicast-bootp.patch
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.2-dhclient-usage.patch
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.0-default-requested-options.patch
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.2-xen-checksum.patch
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.1-manpages.patch
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.0-paths.patch
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.2-CLOEXEC.patch
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.0-inherit-leases.patch
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.0-garbage-chars.patch
- # ???
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.0-missing-ipv6-not-fatal.patch
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.0-add_timeout_when_NULL.patch
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.1-64_bit_lease_parse.patch
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.2-capability.patch
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.0-logpid.patch
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.0-UseMulticast.patch
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.1-sendDecline.patch
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.1-retransmission.patch
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.2-rfc3442-classless-static-routes.patch
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.0-honor-expired.patch
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.0-noprefixavail.patch
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.2-sharedlib.patch
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.0-PPP.patch
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.2-lpf-ib.patch
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.2-improved-xid.patch
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.2-gpxe-cid.patch
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.1-invalid-dhclient-conf.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-remove-bind.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-errwarn-message.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-dhclient-options.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-release-by-ifup.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-dhclient-decline-backoff.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-unicast-bootp.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-default-requested-options.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-xen-checksum.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-manpages.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-paths.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-CLOEXEC.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-garbage-chars.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-add_timeout_when_NULL.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-64_bit_lease_parse.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-capability.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-logpid.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-UseMulticast.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-sendDecline.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-rfc3442-classless-static-routes.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-honor-expired.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-sharedlib.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-PPP.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-paranoia.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-lpf-ib.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-improved-xid.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-gpxe-cid.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-stateless-DUID-LLT.patch
# Remove bundled BIND stuff.
# (requires newer autoconf)
###############################################################################
# #
# IPFire.org - A linux based firewall #
-# Copyright (C) 2012 IPFire Team <info@ipfire.org> #
+# Copyright (C) 2015 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 = 5.2.9
+VER = 6.7.1
THISAPP = dhcpcd-$(VER)
DL_FILE = $(THISAPP).tar.bz2
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = aabe4a3c1f23c55f2c99a416c9085de9
+$(DL_FILE)_MD5 = ffb716b0e9327968e7200d519e1d4c0d
install : $(TARGET)
cd $(DIR_APP) && make $(MAKETUNING)
cd $(DIR_APP) && make install
ln -s $(THISAPP) /usr/src/directfb
-# @rm -rf $(DIR_APP)
+ @rm -rf $(DIR_APP)
@$(POSTBUILD)
DIR_APP = $(DIR_SRC)/$(THISAPP)
TARGET = $(DIR_INFO)/$(THISAPP)
-COPTS = -DHAVE_ISC_READER
+# We cannot use INOTIFY because our ISC reader code does not support that
+COPTS = -DHAVE_ISC_READER -DNO_INOTIFY
###############################################################################
# Top-level Rules
$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
@$(PREBUILD)
@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
- cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/dnsmasq-2.73-remove-floor-on-edns0-packet-size-with-DNSSEC.patch
- cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/dnsmasq-2.73-fix-crash-in-DNSSEC-code-when-attempting-to-verify-large-RRs.patch
- cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/dnsmasq-2.73-make-caching-work-for-CNAMEs-pointing-to-A-AAAA-records-shadowed-in-etc-hosts.patch
- cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/dnsmasq-2.73-fix-problems-validating-NSEC3-and-wildcards.patch
- cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/dnsmasq-2.73-initialise-return-value.patch
- cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/dnsmasq-2.73-bad-packet-protection.patch
- cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq-2.72rc2-Add-support-to-read-ISC-DHCP-lease-file.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0001-Add-newline-at-the-end-of-example-config-file.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0002-crash-at-startup-when-an-empty-suffix-is-supplied-to.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0003-Debian-build-fixes-for-kFreeBSD.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0004-Set-conntrack-mark-before-connect-call.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0005-Fix-typo-in-new-Dbus-code.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0006-Fit-example-conf-file-typo.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0007-Improve-RFC-compliance-when-unable-to-supply-address.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0008-Fix-conntrack-with-bind-interfaces.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0009-Use-inotify-instead-of-polling-on-Linux.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0010-Teach-the-new-inotify-code-about-symlinks.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0011-Remove-floor-on-EDNS0-packet-size-with-DNSSEC.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0012-CHANGELOG-re.-inotify.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0013-Fix-breakage-of-domain-domain-subnet-local.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0014-Remove-redundant-IN6_IS_ADDR_ULA-a-macro-defn.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0015-Eliminate-IPv6-privacy-addresses-from-interface-name.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0016-Tweak-field-width-in-cache-dump-to-avoid-truncating-.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0017-Fix-crash-in-DNSSEC-code-when-attempting-to-verify-l.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0018-Make-caching-work-for-CNAMEs-pointing-to-A-AAAA-reco.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0019-Fix-problems-validating-NSEC3-and-wildcards.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0020-Initialise-return-value.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0021-Add-ignore-address-option.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0022-Bad-packet-protection.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0023-Fix-build-failure-in-new-inotify-code-on-BSD.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0024-Implement-makefile-dependencies-on-COPTS-variable.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0025-Fix-race-condition-issue-in-makefile.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0026-DNSSEC-do-top-down-search-for-limit-of-secure-delega.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0027-Add-log-queries-extra-option-for-more-complete-loggi.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0028-Add-min-cache-ttl-option.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0029-Log-port-of-requestor-when-doing-extra-logging.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0030-Don-t-answer-from-cache-RRsets-from-wildcards-as-we-.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0031-Logs-for-DS-records-consistent.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0032-Cope-with-multiple-interfaces-with-the-same-LL-addre.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0033-Don-t-treat-SERVFAIL-as-a-recoverable-error.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0034-Add-dhcp-hostsdir-config-option.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0035-Update-German-translation.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0036-Don-t-reply-to-DHCPv6-SOLICIT-messages-when-not-conf.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0037-Allow-inotify-to-be-disabled-at-compile-time-on-Linu.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0038-Expand-inotify-code-to-dhcp-hostsdir-dhcp-optsdir-an.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0039-Update-copyrights-for-dawn-of-2015.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0040-inotify-documentation-updates.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0041-Fix-broken-ECDSA-DNSSEC-signatures.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0042-BSD-make-support.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0043-Fix-build-failure-on-openBSD.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0044-Manpage-typo-fix.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0045-Fixup-dhcp-configs-after-reading-extra-hostfiles-wit.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0046-Extra-logging-for-inotify-code.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0047-man-page-typo.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0048-Fix-get-version-script-which-returned-wrong-tag-in-s.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0049-Typos.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0050-Make-dynamic-hosts-files-work-when-no-hosts-set.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0051-Fix-trivial-memory-leaks-to-quieten-valgrind.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0052-Fix-uninitialized-value-used-in-get_client_mac.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0053-Log-parsing-utils-in-contrib-reverse-dns.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0054-Add-dnssec-timestamp-option-and-facility.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0055-Fix-last-commit-to-not-crash-if-uid-changing-not-con.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0056-New-version-of-contrib-reverse-dns.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0057-Tweak-DNSSEC-timestamp-code-to-create-file-later-rem.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0058-Fix-boilerplate-code-for-re-running-system-calls-on-.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0059-Make-address-example.com-equivalent-to-server-exampl.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0060-dhcp-set-outbound-interface-via-cmsg-in-unicast-repl.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0061-Don-t-fail-DNSSEC-when-a-signed-CNAME-dangles-into-a.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0062-Return-SERVFAIL-when-validation-abandoned.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0063-Protect-against-broken-DNSSEC-upstreams.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0064-DNSSEC-fix-for-non-ascii-characters-in-labels.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0065-Allow-control-characters-in-names-in-the-cache-handl.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0066-Fix-crash-in-last-commit.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0067-Merge-message-translations.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0068-add-tftp-no-fail-to-ignore-missing-tftp-root.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0069-Whitespace-fixes.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0070-Return-INSECURE-rather-than-BOGUS-when-DS-proved-not.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0071-Fix-compiler-warning-when-not-including-DNSSEC.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0072-Fix-crash-caused-by-looking-up-servers.bind-when-man.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0073-Fix-crash-on-receipt-of-certain-malformed-DNS-reques.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0074-Fix-crash-in-auth-code-with-odd-configuration.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0075-Auth-correct-replies-to-NS-and-SOA-in-.arpa-zones.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0076-Fix-srk-induced-crash-in-new-tftp_no_fail-code.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0077-Note-CVE-2015-3294.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0078-Log-domain-when-reporting-DNSSEC-validation-failure.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0079-Check-IP-address-command-line-arg-in-dhcp_release.c.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0080-Revert-61b838dd574c51d96fef100285a0d225824534f9-and-.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0081-Handle-domain-names-with-.-or-000-within-labels.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0082-Tweaks-to-previous-DNS-label-charset-commit.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0083-Logs-in-DHCPv6-not-suppressed-by-dhcp6-quiet.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0084-Make-get-version-work-when-repo-is-a-git-submodule.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0085-Fix-argument-order-botch-which-broke-DNSSEC-for-TCP-.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0086-Don-t-remove-RRSIG-RR-from-answers-to-ANY-queries-wh.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0087-Constify-some-DHCP-lease-management-functions.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0088-Handle-UDP-packet-loss-when-fragmentation-of-large-p.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0089-Check-IPv4-mapped-IPv6-addresses-with-stop-rebind.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0090-Tweak-EDNS-timeout-code.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0091-Pointer-to-mail-archive-mailing-list-mirror-in-doc.h.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0092-Allow-T1-and-T2-DHCPv4-options-to-be-set.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0093-Tweak-last-commit.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0094-Use-correct-DHCP-context-for-PXE-proxy-server-id.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0095-Fix-buffer-overflow-introduced-in-2.73rc6.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0096-Remove-support-for-DNS-Extended-Label-Types.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0097-Select-correct-DHCP-context-when-in-PXE-bootserver-m.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0098-Tweak-immediately-previous-patch.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq-Add-support-to-read-ISC-DHCP-lease-file.patch
cd $(DIR_APP) && sed -i src/config.h \
-e 's|/\* #define HAVE_IDN \*/|#define HAVE_IDN|g' \
-e 's|/\* #define HAVE_DNSSEC \*/|#define HAVE_DNSSEC|g' \
-e 's|#define HAVE_DHCP6|//#define HAVE_DHCP6|g' \
-e 's|#define HAVE_TFTP|//#define HAVE_TFTP|g'
- cd $(DIR_APP) && make CFLAGS="$(CFLAGS)" COPTS="$(COPTS)" $(MAKETUNING)
- cd $(DIR_APP) && make PREFIX=/usr install
+ cd $(DIR_APP) && make CFLAGS="$(CFLAGS)" COPTS="$(COPTS)" \
+ PREFIX=/usr all install
@rm -rf $(DIR_APP)
@$(POSTBUILD)
@$(PREBUILD)
@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dracut-038-always-enable-mdraid.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dracut-038_add_sdhci-pci.patch
cd $(DIR_APP) && make $(MAKETUNING)
cd $(DIR_APP) && make install sbindir=/sbin sysconfdir=/etc
###############################################################################
# #
# IPFire.org - A linux based firewall #
-# Copyright (C) 2007 Michael Tremer & Christian Schmidt #
+# Copyright (C) 2014 Michael Tremer & Christian Schmidt #
# #
# 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.0.0
+VER = 2.1.0
THISAPP = expat-$(VER)
DL_FILE = $(THISAPP).tar.gz
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = d945df7f1c0868c5c73cf66ba9596f3f
+$(DL_FILE)_MD5 = dd7dab7a5fea97d2a6a43f511449b7cd
install : $(TARGET)
cd $(DIR_APP) && ./configure --prefix=/usr --disable-nls
cd $(DIR_APP) && make $(MAKETUNING)
cd $(DIR_APP) && make install
- cd $(DIR_APP) && install -v -m755 -d /usr/share/doc/expat-2.0.0
- cd $(DIR_APP) && install -v -m644 doc/*.{html,png,css} /usr/share/doc/expat-2.0.0
+ cd $(DIR_APP) && install -v -m755 -d /usr/share/doc/expat-2.1.0
+ cd $(DIR_APP) && install -v -m644 doc/*.{html,png,css} /usr/share/doc/expat-2.1.0
@rm -rf $(DIR_APP)
@$(POSTBUILD)
cd $(DIR_SRC)/ffmpeg && make $(MAKETUNING) $(EXTRA_MAKE)
cd $(DIR_SRC)/ffmpeg && make install
cd $(DIR_SRC)/ffmpeg && make install-libs
- ldconfig
-# @rm -rf $(DIR_APP)
+ @rm -rf $(DIR_APP)
@$(POSTBUILD)
include Config
-VER = 2.1.10
+VER = 2.1.11
THISAPP = fireinfo-v$(VER)
DL_FILE = $(THISAPP).tar.gz
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = cc7838cda22d7d4e9bb177aa1dc6f25a
+$(DL_FILE)_MD5 = 093799207ab7397cc7f2d5eb45868c69
install : $(TARGET)
$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
@$(PREBUILD)
@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
-
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/fireinfo/0001-bogomips-Don-t-crash-when-no-bogomips-are-available.patch
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/fireinfo/0002-ARM-Read-board-model-from-device-tree-in-proc.patch
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/fireinfo/0003-Revert-vendor-model-for-ARM-to-old-behaviour.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/fireinfo-Add-an-other-forbidden-string-Serial.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/fireinfo-Skip-search-for-hypervisor-name-when-the-CPU-string-.patch
cd $(DIR_APP) && [ -x "configure" ] || sh ./autogen.sh
cd $(DIR_APP) && ./configure --prefix=/usr
--- /dev/null
+###############################################################################
+# #
+# IPFire.org - A linux based firewall #
+# Copyright (C) 2015 Michael Tremer & Christian Schmidt #
+# #
+# 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 = 2.6
+
+THISAPP = flag-icons-$(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 = 992db1bc950dfdd436699b7d2ad33c2d
+
+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)
+ # Create DIR_APP and move the source tarball to its location.
+ @rm -rf $(DIR_APP) && mkdir -pv $(DIR_APP) && cd $(DIR_SRC) && cp -avf $(DIR_DL)/$(DL_FILE) $(DIR_APP)
+
+ # Extract the source tarball.
+ cd $(DIR_APP) && unzip $(DL_FILE)
+
+ # Create flage image folder.
+ cd $(DIR_APP) && mkdir -pv /srv/web/ipfire/html/images/flags/
+
+ # Only copy the country flags.
+ cd $(DIR_APP) && cp -avf flags-iso/shiny/16/??.png \
+ /srv/web/ipfire/html/images/flags/
+
+ # Copy flag icon for unknown countries.
+ cd $(DIR_APP) && cp -avf flags-iso/shiny/16/_unknown.png \
+ /srv/web/ipfire/html/images/flags/unknown.png
+
+ @rm -rf $(DIR_APP)
+ @$(POSTBUILD)
-fsck.ext4 -f -y $(PART_ROOT)
fsck.ext4 -f -y $(PART_ROOT)
+ sleep 10 #Ubuntu compiling: allow time to automount/dismount
kpartx -d -v $(DEVICE)
losetup -d $(DEVICE)
###############################################################################
# #
# IPFire.org - A linux based firewall #
-# Copyright (C) 2007 Michael Tremer & Christian Schmidt #
+# Copyright (C) 2015 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.4
+VER = 3.10
THISAPP = fping-$(VER)
DL_FILE = $(THISAPP).tar.gz
DIR_APP = $(DIR_SRC)/$(THISAPP)
TARGET = $(DIR_INFO)/$(THISAPP)
PROG = fping
-PAK_VER = 2
+PAK_VER = 3
DEPS = ""
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = a4bc97804e630dbf26dfac8f28c78091
+$(DL_FILE)_MD5 = 6a0ddecb671df1d580d20c0dd1095773
install : $(TARGET)
###############################################################################
# #
# IPFire.org - A linux based firewall #
-# Copyright (C) 2007 Michael Tremer & Christian Schmidt #
+# Copyright (C) 2015 Michael Tremer & Christian Schmidt #
# #
# 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.8.3
+VER = 2.9.3
THISAPP = fuse-$(VER)
DL_FILE = $(THISAPP).tar.gz
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = 517c8384f915e40647bda9f71579fd97
+$(DL_FILE)_MD5 = 33cae22ca50311446400daf8a6255c6a
install : $(TARGET)
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh966775.patch
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh966778.patch
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh970090.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh995972.patch
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1008310.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1019916.patch
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1022022.patch
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1091162.patch
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1098050.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1027101.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1027261.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1032628.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1044628.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1111460.patch
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1133809-1.patch
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1133809-2.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1139571.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1154563.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1170121.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1183533.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1207995.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh1209375.patch
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc-resolv-stack_chk_fail.patch
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc-remove-ctors-dtors-output-sections.patch
###############################################################################
# #
# IPFire.org - A linux based firewall #
-# Copyright (C) 2007-2011 IPFire Team <info@ipfire.org> #
+# Copyright (C) 2007-2015 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 = 1.21
+VER = 1.22.3
THISAPP = groff-$(VER)
DL_FILE = $(THISAPP).tar.gz
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = 8b8cd29385b97616a0f0d96d0951c5bf
+$(DL_FILE)_MD5 = cc825fa64bc7306a885f2fb2268d3ec5
install : $(TARGET)
--- /dev/null
+###############################################################################
+# #
+# IPFire.org - A linux based firewall #
+# Copyright (C) 2013 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.5.11
+
+THISAPP = haproxy-$(VER)
+DL_FILE = $(THISAPP).tar.gz
+DL_FROM = $(URL_IPFIRE)
+DIR_APP = $(DIR_SRC)/$(THISAPP)
+TARGET = $(DIR_INFO)/$(THISAPP)
+PROG = haproxy
+PAK_VER = 2
+
+DEPS = ""
+
+###############################################################################
+# Top-level Rules
+###############################################################################
+
+objects = $(DL_FILE)
+
+$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
+
+$(DL_FILE)_MD5 = 5500a79d0d2b238d4a1e9749bd0c2cb2
+
+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 axf $(DIR_DL)/$(DL_FILE)
+
+ cd $(DIR_APP) && make $(MAKETUNING) CPU="generic" TARGET="linux2628" \
+ USE_OPENSSL=1 USE_PCRE=1 USE_ZLIB=1 USE_REGPARM=1 \
+ ADDINC="$(CFLAGS)" USE_LINUX_TPROXY=1 ADDLIB="$(LDFLAGS)"
+
+ cd $(DIR_APP) && make install-bin install-man PREFIX=/usr
+
+ -mkdir -pv /etc/haproxy /var/lib/haproxy
+ install -v -m 644 $(DIR_SRC)/config/haproxy/haproxy.cfg \
+ /etc/haproxy/haproxy.cfg
+
+ install -v -m 644 $(DIR_SRC)/config/backup/includes/haproxy \
+ /var/ipfire/backup/addons/includes/haproxy
+
+ # Restore initscript
+ install -v -m 754 $(DIR_SRC)/src/initscripts/init.d/haproxy \
+ /etc/rc.d/init.d/haproxy
+
+ @rm -rf $(DIR_APP)
+ @$(POSTBUILD)
include Config
-VER = 2.3
+VER = 2.4
THISAPP = hostapd-$(VER)
DL_FILE = $(THISAPP).tar.gz
DIR_APP = $(DIR_SRC)/$(THISAPP)
TARGET = $(DIR_INFO)/$(THISAPP)
PROG = hostapd
-PAK_VER = 31
+PAK_VER = 34
DEPS = ""
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = 40b89c61036add0c2dd1fc10767d3b5f
+$(DL_FILE)_MD5 = 04578f3f2c3eb1bec1adf30473813912
install : $(TARGET)
$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
@$(PREBUILD)
@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
+ 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
cd $(DIR_APP)/hostapd && make $(MAKETUNING) $(EXTRA_MAKE)
THISAPP = hwdata
TARGET = $(DIR_INFO)/$(THISAPP)
+# https://pci-ids.ucw.cz/v2.2/pci.ids
+# http://www.linux-usb.org/usb.ids
+
###############################################################################
# Top-level Rules
###############################################################################
###############################################################################
# #
# IPFire.org - A linux based firewall #
-# Copyright (C) 2010 IPFire Team <info@ipfire.org> #
+# Copyright (C) 2007-2015 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 #
ln -sf ../init.d/firstsetup /etc/rc.d/rcsysinit.d/S75firstsetup
ln -sf ../init.d/localnet /etc/rc.d/rcsysinit.d/S80localnet
ln -sf ../init.d/firewall /etc/rc.d/rcsysinit.d/S85firewall
+ ln -sf ../init.d/network-trigger /etc/rc.d/rcsysinit.d/S90network-trigger
ln -sf ../init.d/network-vlans /etc/rc.d/rcsysinit.d/S91network-vlans
ln -sf ../init.d/rngd /etc/rc.d/rcsysinit.d/S92rngd
ln -sf ../init.d/wlanclient /etc/rc.d/rc0.d/K82wlanclient
ln -sf any /etc/rc.d/init.d/networking/$$i; \
done
- # ARM does not need checkfstab and acpid
+ # ARM does not need checkfstab and acpid, intel no swconfig
ifeq "$(MACHINE_TYPE)" "arm"
rm -vf /etc/rc.d/init.d/{acpid,checkfstab}
+ ln -sf ../init.d/swconfig /etc/rc.d/rcsysinit.d/S73swconfig
else
+ rm -vf /etc/rc.d/init.d/swconfig
ln -sf ../init.d/acpid /etc/rc.d/rc3.d/S12acpid
ln -sf ../init.d/acpid /etc/rc.d/rc0.d/K87acpid
ln -sf ../init.d/acpid /etc/rc.d/rc6.d/K87acpid
$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
@$(PREBUILD)
- @rm -rf $(DIR_APP) $(DIR_SRC)/libnfnetlink-1.0.0 $(DIR_SRC)/netfilter-layer7* $(DIR_SRC)/libnetfilter_queue-0.0.17
+ @rm -rf $(DIR_APP) $(DIR_SRC)/libnfnetlink-* $(DIR_SRC)/netfilter-layer7* $(DIR_SRC)/libnetfilter_queue-*
@cd $(DIR_SRC) && tar jxf $(DIR_DL)/$(DL_FILE)
# cp -rf /usr/src/linux/include/linux/netfilter /usr/include/linux
cd $(DIR_APP) && cp -vf $(DIR_SRC)/netfilter-layer7-v2.22/iptables-1.4.3forward-for-kernel-2.6.20forward/* \
./extensions/
- # ipp2p 0.8.2-pomng
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/iptables-1.4.14-ipp2p-0.8.2-ipfire.patch
-
# imq
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/iptables-1.4.12-IMQ-test4.diff
cd $(DIR_SRC)/libnetfilter_cttimeout-1.0.0 && make $(MAKETUNING) $(EXTRA_MAKE)
cd $(DIR_SRC)/libnetfilter_cttimeout-1.0.0 && make install
- @rm -rf $(DIR_APP) $(DIR_SRC)/libnfnetlink-1.0.0 $(DIR_SRC)/netfilter-layer7* $(DIR_SRC)/libnetfilter_queue-0.0.17
+ @rm -rf $(DIR_APP) $(DIR_SRC)/libnfnetlink-* $(DIR_SRC)/netfilter-layer7* $(DIR_SRC)/libnetfilter_queue-*
@$(POSTBUILD)
###############################################################################
# #
# IPFire.org - A linux based firewall #
-# Copyright (C) 2007 Michael Tremer & Christian Schmidt #
+# Copyright (C) 2014 Michael Tremer & Christian Schmidt #
# #
# 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 = ss020927
+VER = s20121221
THISAPP = iputils-$(VER)
-DL_FILE = $(THISAPP).tar.gz
+DL_FILE = $(THISAPP).tar.bz2
DL_FROM = $(URL_IPFIRE)
-DIR_APP = $(DIR_SRC)/iputils
+DIR_APP = $(DIR_SRC)/$(THISAPP)
TARGET = $(DIR_INFO)/$(THISAPP)
###############################################################################
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = b5493f7a2997130a4f86c486c9993b86
+$(DL_FILE)_MD5 = 6072aef64205720dd1893b375e184171
install : $(TARGET)
$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
@$(PREBUILD)
- @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
- cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/iputils-20020927-headers.patch
- cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/iputils-20020927-rh.patch
- cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/iputils-glibckernheaders.patch
+ @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar jxf $(DIR_DL)/$(DL_FILE)
cd $(DIR_APP) && make ping tracepath
cd $(DIR_APP) && install -m 4755 ping /usr/bin
cd $(DIR_APP) && install -m 0755 tracepath /usr/bin
$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
@$(PREBUILD)
- @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
+ @rm -rf $(DIR_SRC)/$(THISAPP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
cd $(DIR_APP) && patch -Np2 < $(DIR_SRC)/src/patches/mitkrb-1.12.1-db2_fix-1.patch
cd $(DIR_APP) && sed -e "s@python2.5/Python.h@& python2.7/Python.h@g" \
chmod -f -v 755 "/usr/lib/lib$$LIB.so"; \
done
- @rm -rf $(DIR_APP)
+ @rm -rf $(DIR_SRC)/$(THISAPP)
@$(POSTBUILD)
###############################################################################
# #
# IPFire.org - A linux based firewall #
-# Copyright (C) 2007 Michael Tremer & Christian Schmidt #
+# Copyright (C) 2015 Michael Tremer & Christian Schmidt #
# #
# 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 = 1.3.0
+VER = 1.3.1
THISAPP = libjpeg-turbo-$(VER)
DL_FILE = $(THISAPP).tar.gz
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = e1e65cc711a1ade1322c06ad4a647741
+$(DL_FILE)_MD5 = 2c3a68129dac443a72815ff5bb374b05
install : $(TARGET)
###############################################################################
# #
# IPFire.org - A linux based firewall #
-# Copyright (C) 2007 Michael Tremer & Christian Schmidt #
+# Copyright (C) 2015 Michael Tremer & Christian Schmidt #
# #
# 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 = 1.1.2.1
+VER = 1.1.6
THISAPP = libnet-$(VER)
-DL_FILE = libnet.tar.gz
+DL_FILE = $(THISAPP).tar.gz
DL_FROM = $(URL_IPFIRE)
-DIR_APP = $(DIR_SRC)/libnet
+DIR_APP = $(DIR_SRC)/$(THISAPP)
TARGET = $(DIR_INFO)/$(THISAPP)
###############################################################################
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = be845c41170d72c7db524f3411b50256
+$(DL_FILE)_MD5 = 710296fe424a49344e5fcc0d09e53317
install : $(TARGET)
include Config
-VER = 1.5.0
+VER = 1.5.2
THISAPP = libsrtp-$(VER)
DL_FILE = $(THISAPP).tar.gz
DL_FROM = $(URL_IPFIRE)
DIR_APP = $(DIR_SRC)/$(THISAPP)
TARGET = $(DIR_INFO)/$(THISAPP)
+PROG = libsrtp
+PAK_VER = 2
+
+DEPS = ""
###############################################################################
# Top-level Rules
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = ec49ba558b4fd056114df2c76935aa8e
+$(DL_FILE)_MD5 = 2309aa6027992810a4285b042c71e644
install : $(TARGET)
md5 : $(subst %,%_MD5,$(objects))
+dist:
+ @$(PAK)
+
###############################################################################
# Downloading, checking, md5sum
###############################################################################
@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
cd $(DIR_APP) && ./configure --prefix=/usr
- cd $(DIR_APP) && make uninstall && make $(MAKETUNING) libsrtp.so
+ cd $(DIR_APP) && make uninstall && make $(MAKETUNING) shared_library
cd $(DIR_APP) && make install
@rm -rf $(DIR_APP)
@$(POSTBUILD)
###############################################################################
# #
# IPFire.org - A linux based firewall #
-# Copyright (C) 2007-2014 IPFire Team <info@ipfire.org> #
+# Copyright (C) 2007-2015 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.14.27
+VER = 3.14.41
-RPI_PATCHES = 3.14.27-grsec-ipfire1
-A7M_PATCHES = 3.14.27-grsec-ipfire1
-GRS_PATCHES = grsecurity-3.0-3.14.27-201412170659.patch.xz
+RPI_PATCHES = 3.14.41-grsec-ipfire1
+A7M_PATCHES = 3.14.41-grsec-ipfire1
+GRS_PATCHES = grsecurity-3.1-3.14.41-201505072056.patch.xz
THISAPP = linux-$(VER)
DL_FILE = linux-$(VER).tar.xz
CFLAGS =
CXXFLAGS =
-PAK_VER = 55
+PAK_VER = 59
DEPS = ""
VERSUFIX=ipfire$(KCFG)
arm7-multi-patches-$(A7M_PATCHES).patch.xz = $(URL_IPFIRE)/arm7-multi-patches-$(A7M_PATCHES).patch.xz
$(GRS_PATCHES) = $(URL_IPFIRE)/$(GRS_PATCHES)
-$(DL_FILE)_MD5 = 0af2d0702df6ee6d7181e697e0af3481
-rpi-patches-$(RPI_PATCHES).patch.xz_MD5 = 543a77d5602829f78b18788e5cb82188
-arm7-multi-patches-$(A7M_PATCHES).patch.xz_MD5 = 7014ce20d9ede588ea2c244d901cbeeb
-$(GRS_PATCHES)_MD5 = 66af1d48af9dce2d0eb363bbc6bfb668
+$(DL_FILE)_MD5 = b28dfc6907c388c2adcc65aee2ad68ff
+rpi-patches-$(RPI_PATCHES).patch.xz_MD5 = 9c8b20647429a64d656999a3c7af890f
+arm7-multi-patches-$(A7M_PATCHES).patch.xz_MD5 = a4a4103255e93bfcb02652212b0ae3fc
+$(GRS_PATCHES)_MD5 = 8af3b27954311da581cc6f803f048779
install : $(TARGET)
# Linux Intermediate Queueing Device
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.14.22-imq.patch
- # ipp2p 0.8.2-ipfire
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10-ipp2p-0.8.2-ipfire.patch
-
# Layer7-patch
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.14-layer7-filter.patch
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.2.33_ipg-fix-driver-name.patch
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-2.6.32.27_mcs7830-fix-driver-name.patch
+ # r8169 L23 patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.14.32-r8169_disable_L23.patch
+
+ # HyperV 2008 patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.14.x-hyperv-2008-fix.patch
+
ifeq "$(KCFG)" "-kirkwood"
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.10-mv_cesa_disable_failing_hmac_sha1.patch
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.14.22-kirkwood_legacy_boot.patch
# Apply Arm7-multiarch kernel patches.
cd $(DIR_APP) && xzcat $(DIR_DL)/arm7-multi-patches-$(A7M_PATCHES).patch.xz | patch -Np1
+
+ # Install switch api userspace header
+ cd $(DIR_APP) && install -v -m644 include/uapi/linux/switch.h /usr/include/linux/
+
endif
ifeq "$(KCFG)" "-rpi"
###############################################################################
# #
# IPFire.org - A linux based firewall #
-# Copyright (C) 2007 Michael Tremer & Christian Schmidt #
+# Copyright (C) 2014 Michael Tremer & Christian Schmidt #
# #
# 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.7.1
+VER = 3.8.1
THISAPP = logrotate-$(VER)
DL_FILE = logrotate_$(VER).orig.tar.gz
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = 552639142e163745f6bcd4f1f3816d8a
+$(DL_FILE)_MD5 = bd2e20d8dc644291b08f9215397d28a5
install : $(TARGET)
@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
cd $(DIR_APP) && make $(MAKETUNING)
cd $(DIR_APP) && make install
- touch /var/lib/logrotate.status
+ mkdir -pv /etc/logrotate.d
+ touch /etc/logrotate.d/.empty /var/lib/logrotate.status
@rm -rf $(DIR_APP)
@$(POSTBUILD)
###############################################################################
# #
# IPFire.org - A linux based firewall #
-# Copyright (C) 2007 Michael Tremer & Christian Schmidt #
+# Copyright (C) 2015 Michael Tremer & Christian Schmidt #
# #
# 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 = 7.3.6
+VER = 7.4.1
THISAPP = logwatch-$(VER)
DL_FILE = $(THISAPP).tar.gz
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = 937d982006b2a76a83edfcfd2e5a9d7d
+$(DL_FILE)_MD5 = a0c3d8721f877bdcd4a9089eb1b4691b
install : $(TARGET)
-mkdir -p /var/log/logwatch
chmod -v 755 /var/log/logwatch
-rm -rf /etc/logwatch/conf
- ln -vsf /usr/share/logwatch/default.config /etc/logwatch/conf
+ ln -vsf /usr/share/logwatch/default.conf /etc/logwatch/conf
@rm -rf $(DIR_APP)
@$(POSTBUILD)
cd $(DIR_SRC)/mISDNuser && ./configure --prefix=/usr --with-AF_ISDN=34
cd $(DIR_SRC)/mISDNuser && make MISDNDIR=/usr/src/linux
cd $(DIR_SRC)/mISDNuser && make install MISDNDIR=/usr/src/linux
+ @rm -rf $(DIR_APP)
@$(POSTBUILD)
include Config
-VER = 5.11
+VER = 5.12.1
THISAPP = monit-$(VER)
DL_FILE = $(THISAPP).tar.gz
DIR_APP = $(DIR_SRC)/$(THISAPP)
TARGET = $(DIR_INFO)/$(THISAPP)
PROG = monit
-PAK_VER = 3
+PAK_VER = 6
DEPS = ""
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = ff00f39d248ed7068932ed82211da9e6
+$(DL_FILE)_MD5 = 1ffde79207270925f6f7df787d19100a
install : $(TARGET)
cd $(DIR_APP) && make $(MAKETUNING)
cd $(DIR_APP) && make install
+ mkdir -p /var/lib/monit
+
install -v -m 644 $(DIR_SRC)/config/backup/includes/monit \
/var/ipfire/backup/addons/includes/monit
###############################################################################
# #
# IPFire.org - A linux based firewall #
-# Copyright (C) 2007 Michael Tremer & Christian Schmidt #
+# Copyright (C) 2015 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 = 0.82
+VER = 0.86
THISAPP = mtr-$(VER)
DL_FILE = $(THISAPP).tar.gz
DIR_APP = $(DIR_SRC)/$(THISAPP)
TARGET = $(DIR_INFO)/$(THISAPP)
PROG = mtr
-PAK_VER = 1
+PAK_VER = 2
DEPS = ""
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = 10601ea543fda3e51545c4bce195b64c
+$(DL_FILE)_MD5 = 8d63592c9d4579ef20cf491b41843eb2
install : $(TARGET)
$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
@$(PREBUILD)
- @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
+ @rm -rf $(DIR_APP) $(DIR_SRC)/nagios-plugins* && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
cd $(DIR_APP) && \
./configure --prefix=/usr \
--sysconfdir=/etc/nagios \
ln -s /etc/init.d/nagios /etc/rc.d/rc3.d/S67nagios
ln -s /etc/init.d/nagios /etc/rc.d/rc0.d/K33nagios
ln -s /etc/init.d/nagios /etc/rc.d/rc6.d/K33nagios
- @rm -rf $(DIR_APP)
+ @rm -rf $(DIR_APP) $(DIR_SRC)/nagios-plugins*
@$(POSTBUILD)
###############################################################################
# #
# IPFire.org - A linux based firewall #
-# Copyright (C) 2007 Michael Tremer & Christian Schmidt #
+# Copyright (C) 2015 Michael Tremer & Christian Schmidt #
# #
# 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.10.03
+VER = 2.11.06
THISAPP = nasm-$(VER)
DL_FILE = $(THISAPP).tar.xz
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = a5d0ed070476a7c5b4f0893dc4a4ea4b
+$(DL_FILE)_MD5 = 2b958e9f5d200641e6fc9564977aecc5
install : $(TARGET)
DIR_APP = $(DIR_SRC)/$(THISAPP)
TARGET = $(DIR_INFO)/$(THISAPP)
PROG = nfs
-PAK_VER = 5
+PAK_VER = 6
DEPS = "portmap"
###############################################################################
# #
# IPFire.org - A linux based firewall #
-# Copyright (C) 2009 Michael Tremer & Christian Schmidt #
+# Copyright (C) 2015 Michael Tremer & Christian Schmidt #
# #
# 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 = 2011.1.15
+VER = 2014.2.15
-THISAPP = ntfs-3g-$(VER)
+THISAPP = ntfs-3g_ntfsprogs-$(VER)
DL_FILE = $(THISAPP).tgz
DL_FROM = $(URL_IPFIRE)
DIR_APP = $(DIR_SRC)/$(THISAPP)
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = 15a5cf5752012269fa168c24191f00e2
+$(DL_FILE)_MD5 = f11d563816249d730a00498983485f3a
install : $(TARGET)
include Config
-VER = 6.6p1
+VER = 6.8p1
THISAPP = openssh-$(VER)
DL_FILE = $(THISAPP).tar.gz
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = 3e9800e6bca1fbac0eea4d41baa7f239
+$(DL_FILE)_MD5 = 08f72de6751acfbd0892b5f003922701
install : $(TARGET)
###############################################################################
# #
# IPFire.org - A linux based firewall #
-# Copyright (C) 2007-2014 IPFire Team <info@ipfire.org> #
+# Copyright (C) 2007-2015 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 = 1.0.1k
+VER = 1.0.2a
THISAPP = openssl-$(VER)
DL_FILE = $(THISAPP).tar.gz
DL_FROM = $(URL_IPFIRE)
DIR_APP = $(DIR_SRC)/$(THISAPP)
-TARGET = $(DIR_INFO)/$(THISAPP)
+
+TARGET = $(DIR_INFO)/$(THISAPP)$(KCFG)
+
+ifneq "$(KCFG)" "-sse2"
+CFLAGS += -DPURIFY
+else
+CFLAGS =-O2 -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fPIC
+CFLAGS+= -fstack-protector-all --param=ssp-buffer-size=4
+CFLAGS+= -march=i686 -mmmx -msse -msse2 -mfpmath=sse
+CFLAGS+= -fomit-frame-pointer -DPURIFY
+CXXFLAGS="${CFLAGS}"
+endif
+
+export RPM_OPT_FLAGS = $(CFLAGS)
+
+CONFIGURE_OPTIONS = \
+ --prefix=/usr \
+ --openssldir=/etc/ssl \
+ --enginesdir=/usr/lib/openssl/engines \
+ shared \
+ zlib-dynamic \
+ enable-camellia \
+ enable-md2 \
+ enable-seed \
+ enable-tlsext \
+ enable-rfc3779 \
+ no-idea \
+ no-mdc2 \
+ no-rc5 \
+ no-srp \
+ -DSSL_FORBID_ENULL
ifeq "$(MACHINE)" "i586"
- CONFIGURE_ARGS = linux-elf no-asm 386
+ CONFIGURE_OPTIONS += linux-elf
+
+ifneq "$(KCFG)" "-sse2"
+ CONFIGURE_OPTIONS += no-sse2
+endif
endif
ifeq "$(MACHINE)" "armv5tel"
- CONFIGURE_ARGS = linux-generic32
+ CONFIGURE_OPTIONS += linux-generic32
endif
-CFLAGS += -DPURIFY
-export RPM_OPT_FLAGS = $(CFLAGS)
-
###############################################################################
# Top-level Rules
###############################################################################
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = d4f002bd22a56881340105028842ae1f
+$(DL_FILE)_MD5 = a06c547dac9044161a477211049f60ef
install : $(TARGET)
@$(PREBUILD)
@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/openssl-1.0.0-beta5-enginesdir.patch
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/openssl-1.0.1-beta2-build.patch
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/openssl-1.0.1e-cryptodev.patch
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/openssl-1.0.1e-fix_parallel_build-1.patch
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/openssl-1.0.1e-weak-ciphers.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/openssl-1.0.2a-rpmbuild.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/openssl-1.0.1m-weak-ciphers.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/openssl-disable-sslv2-sslv3.patch
+
+ # i586 specific patches
+ifeq "$(MACHINE)" "i586"
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/openssl-1.0.2a_auto_enable_padlock.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/openssl-1.0.2a_disable_ssse3_for_amd.patch
+endif
+
+ # Apply our CFLAGS
+ cd $(DIR_APP) && sed -i Configure \
+ -e "s/-O3 -fomit-frame-pointer/$(CFLAGS)/g"
cd $(DIR_APP) && find crypto/ -name Makefile -exec \
sed 's/^ASFLAGS=/&-Wa,--noexecstack /' -i {} \;
- cd $(DIR_APP) && ./Configure \
- --prefix=/usr \
- --openssldir=/etc/ssl \
- --enginesdir=/usr/lib/openssl/engines \
- shared \
- zlib-dynamic \
- enable-camellia \
- enable-md2 \
- enable-seed \
- enable-tlsext \
- enable-rfc3779 \
- no-idea \
- no-mdc2 \
- no-rc5 \
- no-srp \
- no-ssl2 \
- no-ssl3 \
- $(CONFIGURE_ARGS) \
- -DSSL_FORBID_ENULL \
- -DHAVE_CRYPTODEV \
- -DUSE_CRYPTODEV_DIGEST
+ cd $(DIR_APP) && ./Configure $(CONFIGURE_OPTIONS)
cd $(DIR_APP) && make depend
cd $(DIR_APP) && make
+ifeq "$(KCFG)" "-sse2"
+ -mkdir -pv /usr/lib/sse2
+ cd $(DIR_APP) && install -m 755 \
+ libcrypto.so.10 /usr/lib/sse2
+else
# Install everything.
cd $(DIR_APP) && make install
install -m 0644 $(DIR_SRC)/config/ssl/openssl.cnf /etc/ssl
-mkdir -pv /usr/lib/openssl
rm -vfr /usr/lib/openssl/engines
mv -v /usr/lib/engines /usr/lib/openssl
+endif
@rm -rf $(DIR_APP)
@$(POSTBUILD)
chmod 700 /var/ipfire/ovpn/ovpn-leases.db
chown -R root:root /var/ipfire/ovpn/scripts
chown -R nobody:nobody /var/ipfire/ovpn
- chown root.nobody /var/log/ovpnserver.log
- chmod 660 /var/log/ovpnserver.log
chmod 700 /var/ipfire/ovpn/certs
mv -v /var/ipfire/ovpn/verify /usr/lib/openvpn/verify
chown root:root /usr/lib/openvpn/verify
include Config
-VER = 7.0.0
+VER = 7.0.3
THISAPP = owncloud-$(VER)
DL_FILE = $(THISAPP).tar.bz2
DIR_APP = $(DIR_SRC)/$(THISAPP)
TARGET = $(DIR_INFO)/$(THISAPP)
PROG = owncloud
-PAK_VER = 2
+PAK_VER = 4
DEPS = ""
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = 28cfdc99e8ee9350fe88430b4c7d62f2
+$(DL_FILE)_MD5 = d5d2ad068046e6ddb322cf001a9bb3d5
install : $(TARGET)
/etc/httpd/conf/vhosts.d/
install -v -m 644 $(DIR_SRC)/config/backup/includes/owncloud \
/var/ipfire/backup/addons/includes/owncloud
+
+ @rm -rf $(DIR_SRC)/$(PROG)
@$(POSTBUILD)
###############################################################################
# #
# IPFire.org - A linux based firewall #
-# Copyright (C) 2007-2014 IPFire Team <info@ipfire.org> #
+# Copyright (C) 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 #
# #
###############################################################################
+
###############################################################################
# Definitions
###############################################################################
include Config
+VER = 1.12
-VER = 0.9.8zd
-
-THISAPP = openssl-$(VER)
-DL_FILE = $(THISAPP).tar.gz
+THISAPP = Text-CSV_XS-$(VER)
+DL_FILE = ${THISAPP}.tgz
DL_FROM = $(URL_IPFIRE)
DIR_APP = $(DIR_SRC)/$(THISAPP)
TARGET = $(DIR_INFO)/$(THISAPP)
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = e9b9ee12f2911e1a378e2458d9bfff77
+$(DL_FILE)_MD5 = b91f2d806054b68c2a29d3da5821fe87
install : $(TARGET)
$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
@$(PREBUILD)
@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
-
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/openssl-0.9.8u-cryptodev.patch
-
- cd $(DIR_APP) && sed -i -e 's/mcpu/march/' config
- cd $(DIR_APP) && sed -i -e 's/-O3/-O2/' -e 's/-march=i486/-march=i586/' Configure
-
- # Support for engines is disabled, because the shared objects from the
- # new version of openssl cannot be loaded by the old one.
-
- cd $(DIR_APP) && ./Configure \
- --prefix=/usr \
- --openssldir=/etc/ssl \
- shared linux-elf \
- zlib-dynamic \
- no-engines \
- no-asm 386 \
- -DSSL_FORBID_ENULL \
- -DHAVE_CRYPTODEV \
- -DUSE_CRYPTODEV_DIGEST
-
- cd $(DIR_APP) && make depend
- cd $(DIR_APP) && make
-
- cd $(DIR_APP) && install -v -m 755 libcrypto.so.0.9.8 /usr/lib
- cd $(DIR_APP) && install -v -m 755 libssl.so.0.9.8 /usr/lib
-
+ cd $(DIR_APP) && perl Makefile.PL
+ cd $(DIR_APP) && make $(MAKETUNING) $(EXTRA_MAKE)
+ cd $(DIR_APP) && make install
@rm -rf $(DIR_APP)
@$(POSTBUILD)
include Config
-VER = 2.7c
+VER = 2.7
THISAPP = Pound-$(VER)
DL_FILE = $(THISAPP).tgz
DIR_APP = $(DIR_SRC)/$(THISAPP)
TARGET = $(DIR_INFO)/$(THISAPP)
PROG = pound
-PAK_VER = 6
+PAK_VER = 8
DEPS = ""
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = 56dace6b79c6be1d25b31355269c380a
+$(DL_FILE)_MD5 = ec8298aa3e4aee3ffbecdc0639d7f14a
install : $(TARGET)
$(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 --sysconfdir=/etc
+ cd $(DIR_APP) && ./configure --prefix=/usr --sysconfdir=/etc \
+ --with-dh=1024
cd $(DIR_APP) && make $(MAKETUNING)
cd $(DIR_APP) && make install
install -v -m 644 $(DIR_SRC)/config/backup/includes/pound \
include Config
-VER = 0.15.0
+VER = 2.3.0
-THISAPP = qemu-kvm-$(VER)
-DL_FILE = $(THISAPP).tar.gz
+THISAPP = qemu-$(VER)
+DL_FILE = $(THISAPP).tar.bz2
DL_FROM = $(URL_IPFIRE)
DIR_APP = $(DIR_SRC)/$(THISAPP)
TARGET = $(DIR_INFO)/$(THISAPP)
SUP_ARCH = i586
PROG = qemu
-PAK_VER = 14
+PAK_VER = 15
DEPS = "sdl"
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = b45b0deebba4ce47dcaaab3807f6ed47
+$(DL_FILE)_MD5 = 2fab3ea4460de9b57192e5b8b311f221
install : $(TARGET)
$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
@$(PREBUILD)
- @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/qemu-0.15.0_missing_definitions_hack.patch
+ @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
cd $(DIR_APP) && ./configure --prefix=/usr --sysconfdir=/etc \
+ --enable-kvm --disable-attr \
--target-list="i386-linux-user i386-softmmu arm-softmmu" \
--extra-cflags="$(CFLAGS)"
cd $(DIR_APP) && make $(MAKETUNING)
cd $(DIR_APP) && make install
+
+ # install wrapper for old kvm parameter handling
+ install -m 755 $(DIR_SRC)/config/qemu/qemu /usr/bin/qemu
+
+ # disable PaX MPROTECT
+ paxctl -m /usr/bin/qemu-system-arm
+ paxctl -m /usr/bin/qemu-system-i386
+
@rm -rf $(DIR_APP)
@$(POSTBUILD)
###############################################################################
# #
# IPFire.org - A linux based firewall #
-# Copyright (C) 2007-2014 IPFire Team <info@ipfire.org> #
+# Copyright (C) 2007-2015 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.6.24
+VER = 3.6.25
THISAPP = samba-$(VER)
DL_FILE = $(THISAPP).tar.gz
DIR_APP = $(DIR_SRC)/$(THISAPP)
TARGET = $(DIR_INFO)/$(THISAPP)
PROG = samba
-PAK_VER = 59
+PAK_VER = 60
DEPS = "cups krb5"
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = d98425c0c2b73e08f048d31ffc727fb0
+$(DL_FILE)_MD5 = 76da2fa64edd94a0188531e7ecb27c4e
install : $(TARGET)
###############################################################################
# #
# IPFire.org - An Open Source Firewall Solution #
-# Copyright (C) 2012 Michael Tremer #
+# Copyright (C) 2014 Michael Tremer #
# #
# 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.3
+VER = 2.3.9
THISAPP = sarg-$(VER)
DL_FILE = $(THISAPP).tar.gz
DIR_APP = $(DIR_SRC)/$(THISAPP)
TARGET = $(DIR_INFO)/$(THISAPP)
PROG = sarg
-PAK_VER = 1
+PAK_VER = 2
DEPS = ""
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = 09dba9a960d500acd7f17802de62512c
+$(DL_FILE)_MD5 = d6e8b854950f1bebb953e0ea2ca13428
install : $(TARGET)
include Config
-VER = 3.4.9
+VER = 3.4.13
THISAPP = squid-$(VER)
DL_FILE = $(THISAPP).tar.xz
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = 497e5be7b3430d12667628296760beca
+$(DL_FILE)_MD5 = a5f6c978b2d7a99b161c8275e1acb470
install : $(TARGET)
--libexecdir=/usr/lib/squid \
--localstatedir=/var \
--disable-ipv6 \
+ --disable-ssl \
--enable-poll \
--disable-icmp \
--disable-wccp \
--enable-ident-lookups \
--enable-storeio="aufs,diskd,ufs" \
- --enable-ssl \
--enable-underscores \
--enable-http-violations \
--enable-removal-policies="heap,lru" \
include Config
-VER = 1.0.2
+VER = 1.0.3
THISAPP = squid-accounting-$(VER)
DIR_APP = $(DIR_SRC)/$(THISAPP)
TARGET = $(DIR_INFO)/$(THISAPP)
PROG = squid-accounting
-PAK_VER = 4
+PAK_VER = 5
DEPS = "perl-DBI perl-DBD-SQLite perl-File-ReadBackwards perl-PDF-API2 sendEmail"
@$(PREBUILD)
# Create directories
- -mkdir -pv /{bin,boot,etc/opt,etc/modprobe.d,home,lib,mnt,opt,run}
+ -mkdir -pv /{bin,boot,etc/opt,etc/modprobe.d,home,lib/firmware/brcm,mnt,opt,run}
-mkdir -pv /{media/{floppy,cdrom,usbkey},sbin,srv,var}
-install -dv -m 0750 /root
-install -dv -m 1777 /tmp /var/tmp
-mkdir -pv /usr/{,local/}{bin,include,lib{,/sse2},sbin,src}
-mkdir -pv /usr/{,local/}share/{doc,info,locale,man}
- -mkdir -v /usr/{,local/}share/{misc,terminfo,zoneinfo}
+ -mkdir -v /usr/{,local/}share/{misc,terminfo,xt_geoip,zoneinfo}
-mkdir -pv /usr/{,local/}share/man/man{1..8}
#-for dir in /usr /usr/local; do \
# ln -sv share/{man,doc,info} $$dir; \
# Config files
cp -rvf $(DIR_SRC)/config/etc/* /etc;
+ cp -rvf $(DIR_SRC)/config/lib/* /lib;
touch /etc/{fs,m}tab
echo "$(NAME) v$(VERSION) - $(SLOGAN)" > /etc/issue
echo "===============================" >> /etc/issue
# 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/
+
# Install firewall scripts.
mkdir -pv /usr/lib/firewall
install -m 755 $(DIR_SRC)/config/firewall/rules.pl \
include Config
-VER = 5.2.2
+VER = 5.3.0
THISAPP = strongswan-$(VER)
DL_FILE = $(THISAPP).tar.bz2
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = 7ee1a33060b2bde35be0f6d78a1d26d0
+$(DL_FILE)_MD5 = c52d4228231c2025d9c320d0e9990327
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 -i $(DIR_SRC)/src/patches/strongswan-5.0.2_ipfire.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/strongswan-5.3.0-stroke-Increase-stroke-buffer-size-to-8k.patch
+ cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/strongswan-ipfire.patch
cd $(DIR_APP) && [ -x "configure" ] || ./autogen.sh
cd $(DIR_APP) && ./configure \
--enable-farp \
--enable-openssl \
--enable-gcrypt \
+ --enable-ccm \
+ --enable-ctr \
+ --enable-gcm \
--enable-xauth-eap \
--enable-xauth-noauth \
--enable-eap-radius \
ln -sf $(CONFIG_ROOT)/certs /etc/ipsec.d/certs
ln -sf $(CONFIG_ROOT)/crls /etc/ipsec.d/crls
+ install -v -m 644 $(DIR_SRC)/config/strongswan/charon.conf \
+ /etc/strongswan.d/charon.conf
+
@rm -rf $(DIR_APP)
@$(POSTBUILD)
###############################################################################
# #
# IPFire.org - A linux based firewall #
-# Copyright (C) 2007 Michael Tremer & Christian Schmidt #
+# Copyright (C) 2007-2015 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.0.24.1
+VER = 001
-THISAPP = teamspeak-$(VER)
+THISAPP = swconfig-$(VER)
+DL_FILE = $(THISAPP).tar.xz
+DL_FROM = $(URL_IPFIRE)
+DIR_APP = $(DIR_SRC)/$(THISAPP)
TARGET = $(DIR_INFO)/$(THISAPP)
-PROG = teamspeak
-PAK_VER = 2
-
-DEPS = ""
+SUP_ARCH = armv5tel
###############################################################################
# Top-level Rules
###############################################################################
-objects =
+objects = $(DL_FILE)
+
+$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
+
+$(DL_FILE)_MD5 = c35919a05fc82b3f8b311da8dfc2cd3e
install : $(TARGET)
-check :
+check : $(patsubst %,$(DIR_CHK)/%,$(objects))
+
+download :$(patsubst %,$(DIR_DL)/%,$(objects))
+
+md5 : $(subst %,%_MD5,$(objects))
+
+###############################################################################
+# Downloading, checking, md5sum
+###############################################################################
-download :
+$(patsubst %,$(DIR_CHK)/%,$(objects)) :
+ @$(CHECK)
-md5 :
+$(patsubst %,$(DIR_DL)/%,$(objects)) :
+ @$(LOAD)
-dist:
- @$(PAK)
+$(subst %,%_MD5,$(objects)) :
+ @$(MD5)
###############################################################################
# Installation Details
###############################################################################
-$(TARGET) :
+$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
@$(PREBUILD)
- -mkdir -p /opt/teamspeak
- install -v -m 644 $(DIR_SRC)/config/backup/includes/teamspeak \
- /var/ipfire/backup/addons/includes/teamspeak
+ @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
+ cd $(DIR_APP) && make $(MAKETUNING)
+ cd $(DIR_APP) && install -v -m755 swconfig /usr/bin/
+ @rm -rf $(DIR_APP)
@$(POSTBUILD)
#cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/$(THISAPP)_xen_empty_buffer_check.patch
cd $(DIR_APP) && make $(MAKETUNING)
cd $(DIR_APP) && make install
- touch /var/log/{dhcpcd.log,messages,ovpnserver.log}
- chmod 664 /var/log/{dhcpcd.log,messages,ovpnserver.log}
- chown 0:105 /var/log/{dhcpcd.log,messages,ovpnserver.log}
+ touch /var/log/{dhcpcd.log,messages}
+ chmod 664 /var/log/{dhcpcd.log,messages}
+ chown 0:105 /var/log/{dhcpcd.log,messages}
@rm -rf $(DIR_APP)
@$(POSTBUILD)
ifeq "$(ROOT)" ""
TARGET = $(DIR_INFO)/$(THISAPP)
EXTRA_CONFIG = --prefix=/usr --bindir=/bin \
- --libexecdir=/usr/sbin --disable-nls FORCE_UNSAFE_CONFIGURE=1
+ --libexecdir=/usr/sbin --disable-nls
EXTRA_MAKE =
EXTRA_INSTALL =
else
$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
@$(PREBUILD)
@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar jxf $(DIR_DL)/$(DL_FILE)
- cd $(DIR_APP) && ./configure $(EXTRA_CONFIG)
+ cd $(DIR_APP) && ./configure $(EXTRA_CONFIG) FORCE_UNSAFE_CONFIGURE=1
cd $(DIR_APP) && make $(MAKETUNING) $(EXTRA_MAKE)
cd $(DIR_APP) && make $(EXTRA_INSTALL) install
@rm -rf $(DIR_APP)
include Config
-VER = 0.2.4.23
+VER = 0.2.5.12
THISAPP = tor-$(VER)
DL_FILE = $(THISAPP).tar.gz
DIR_APP = $(DIR_SRC)/$(THISAPP)
TARGET = $(DIR_INFO)/$(THISAPP)
PROG = tor
-PAK_VER = 8
+PAK_VER = 11
DEPS = "libevent2"
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = 9e39928e310612c3bffee727f554c63f
+$(DL_FILE)_MD5 = 89745069a7efb7aafd01ae263bd0fe5c
install : $(TARGET)
include Config
-VER = 2014j
+VER = 2015d
TZDATA_VER = $(VER)
TZCODE_VER = $(VER)
tzdata$(TZDATA_VER).tar.gz = $(DL_FROM)/tzdata$(TZDATA_VER).tar.gz
tzcode$(TZCODE_VER).tar.gz = $(DL_FROM)/tzcode$(TZCODE_VER).tar.gz
-tzdata$(TZDATA_VER).tar.gz_MD5 = 2d7ea9c309f0d4e162e426e568290ca3
-tzcode$(TZCODE_VER).tar.gz_MD5 = 970119e9765bc5a9320368851c91ecb6
+tzdata$(TZDATA_VER).tar.gz_MD5 = b595bdc4474b8fc1a15cffc67c66025b
+tzcode$(TZCODE_VER).tar.gz_MD5 = 4008a3abc025a398697b2587c48258b9
install : $(TARGET)
rm -f /lib/udev/rules.d/75-persistent-net-generator.rules
rm -f /lib/udev/rules.d/80-net-name-slot.rules
- # Create rule file for the setup
- touch /etc/udev/rules.d/30-persistent-network.rules
-
# Blacklist some modules
cp -vf $(DIR_SRC)/config/udev/blacklist.conf /etc/modprobe.d/blacklist.conf
install -v -m 644 $(DIR_SRC)/config/udev/25-alsa.rules \
/lib/udev/rules.d
+ # Install network rules.
+ install -v -m 755 $(DIR_SRC)/config/udev/network-hotplug-rename \
+ /lib/udev/network-hotplug-rename
+ install -v -m 644 $(DIR_SRC)/config/udev/60-net.rules \
+ /lib/udev/rules.d
+
# Install hwrng rules.
install -v -m 644 $(DIR_SRC)/config/udev/90-hwrng.rules \
/lib/udev/rules.d
--- /dev/null
+###############################################################################
+# #
+# IPFire.org - A linux based firewall #
+# Copyright (C) 2007-2015 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 = ipfire
+
+THISAPP = web-user-interface-$(VER)
+DIR_APP = $(DIR_SRC)/$(THISAPP)
+TARGET = $(DIR_INFO)/$(THISAPP)
+
+###############################################################################
+# Top-level Rules
+###############################################################################
+
+install: $(TARGET)
+
+check:
+
+download:
+
+md5:
+
+###############################################################################
+# Installation Details
+###############################################################################
+
+$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
+ @$(PREBUILD)
+
+ # Copy all html/cgi-bin files
+ mkdir -p /srv/web/ipfire/{cgi-bin,html}
+ mkdir -p /var/updatecache/{download,metadata}
+ cp -aR $(DIR_SRC)/html/* /srv/web/ipfire
+
+ # Change CONFIG_ROOT in cgi-scripts
+ for i in /srv/web/ipfire/cgi-bin/{*,logs.cgi/*,vpn.cgi/*}; do \
+ if [ -f $$i ]; then \
+ sed -i "s+CONFIG_ROOT+$(CONFIG_ROOT)+g" $$i; \
+ fi; \
+ done
+ 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/*/*}
+ 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
+ @$(POSTBUILD)
include Config
-VER = 2.3
+VER = 2.4
THISAPP = wpa_supplicant-$(VER)
DL_FILE = $(THISAPP).tar.gz
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = f2ed8fef72cf63d8d446a2d0a6da630a
+$(DL_FILE)_MD5 = f0037dbe03897dcaf2ad2722e659095d
install : $(TARGET)
--- /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
+
+VERSUFIX = ipfire$(KCFG)
+MODPATH = /lib/modules/$(KVER)-$(VERSUFIX)/extra/
+
+VER = 2.6
+
+THISAPP = xtables-addons-$(VER)
+DL_FILE = $(THISAPP).tar.xz
+DL_FROM = $(URL_IPFIRE)
+DIR_APP = $(DIR_SRC)/$(THISAPP)
+
+ifeq "$(USPACE)" "1"
+ TARGET = $(DIR_INFO)/$(THISAPP)
+else
+ TARGET = $(DIR_INFO)/$(THISAPP)-kmod-$(KVER)-$(VERSUFIX)
+endif
+
+###############################################################################
+# Top-level Rules
+###############################################################################
+
+objects = $(DL_FILE)
+
+$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
+
+$(DL_FILE)_MD5 = 087835ba7e564481b6fd398692268340
+
+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 axf $(DIR_DL)/$(DL_FILE)
+
+ # Only build the specified modules.
+ cp -avf $(DIR_SRC)/config/xtables-addons/mconfig \
+ $(DIR_APP)/mconfig
+
+# Check if we build the modules for a kernel or the userspace parts.
+ifeq "$(USPACE)" "1"
+ cd $(DIR_APP) && ./configure \
+ --prefix=/usr \
+ --without-kbuild
+
+ cd $(DIR_APP) && make $(MAKETUNING)
+ cd $(DIR_APP) && make install
+else
+ cd $(DIR_APP) && ./configure \
+ --with-kbuild=/usr/src/linux-$(KVER)/
+
+ cd $(DIR_APP) && make $(MAKETUNING)
+
+ # Install the built kernel modules.
+ cd $(DIR_APP) && for f in $$(ls extensions/*.ko); do \
+ install -m 644 $$f $(MODPATH); \
+ done
+endif
+
+ @rm -rf $(DIR_APP)
+ @$(POSTBUILD)
THISAPP = xvidcore-$(VER)
DL_FILE = $(THISAPP).tar.gz
DL_FROM = $(URL_IPFIRE)
-DIR_APP = $(DIR_SRC)/$(THISAPP)
+DIR_APP = $(DIR_SRC)/xvidcore
TARGET = $(DIR_INFO)/$(THISAPP)
PROG = xvid
PAK_VER = 2
$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
@$(PREBUILD)
@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
- cd $(DIR_SRC)/xvidcore/build/generic && ./configure --prefix=/usr
- cd $(DIR_SRC)/xvidcore/build/generic && make
- cd $(DIR_SRC)/xvidcore/build/generic && make install
+ cd $(DIR_APP)/build/generic && ./configure --prefix=/usr
+ cd $(DIR_APP)/build/generic && make
+ cd $(DIR_APP)/build/generic && make install
chmod -v 755 /usr/lib/libxvidcore.so.4.2
ln -v -sf libxvidcore.so.4.2 /usr/lib/libxvidcore.so.4
ln -v -sf libxvidcore.so.4 /usr/lib/libxvidcore.so
include Config
-VER = 5.0.5
+VER = 5.2.1
THISAPP = xz-$(VER)
DL_FILE = $(THISAPP).tar.xz
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = aa17280f4521dbeebed0fbd11cd7fa30
+$(DL_FILE)_MD5 = b5e2dd95dc8498cea5354377ed89aa65
install : $(TARGET)
# 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-2014 IPFire Team <info@ipfire.org>. #
+# Copyright (C) 2007-2015 IPFire Team <info@ipfire.org>. #
# #
############################################################################
#
NAME="IPFire" # Software name
SNAME="ipfire" # Short name
VERSION="2.17" # Version number
-CORE="87" # Core Level (Filename)
-PAKFIRE_CORE="86" # Core Level (PAKFIRE)
+CORE="91" # Core Level (Filename)
+PAKFIRE_CORE="90" # 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
KVER=`grep --max-count=1 VER lfs/linux | awk '{ print $3 }'`
GIT_TAG=$(git tag | tail -1) # Git Tag
GIT_LASTCOMMIT=$(git log | head -n1 | cut -d" " -f2 |head -c8) # Last commit
-TOOLCHAINVER=8
+TOOLCHAINVER=9
# New architecture variables
BUILD_ARCH="$(uname -m)"
export LOGFILE
ipfiremake configroot
ipfiremake backup
+ ipfiremake pkg-config
ipfiremake libusb
ipfiremake libusbx
ipfiremake libpcap
ipfiremake multipath-tools
ipfiremake freetype
ipfiremake grub
+ ipfiremake libmnl
+ ipfiremake iptables
case "${TARGET_ARCH}" in
i586)
ipfiremake backports KCFG="-pae"
ipfiremake cryptodev KCFG="-pae"
ipfiremake e1000e KCFG="-pae"
- ipfiremake igb KCFG="-pae"
+# ipfiremake igb KCFG="-pae"
ipfiremake ixgbe KCFG="-pae"
+ ipfiremake xtables-addons KCFG="-pae"
ipfiremake linux-initrd KCFG="-pae"
# x86 kernel build
ipfiremake backports KCFG=""
ipfiremake cryptodev KCFG=""
ipfiremake e1000e KCFG=""
- ipfiremake igb KCFG=""
+# ipfiremake igb KCFG=""
ipfiremake ixgbe KCFG=""
+ ipfiremake xtables-addons KCFG=""
ipfiremake linux-initrd KCFG=""
;;
ipfiremake linux KCFG="-rpi"
ipfiremake backports KCFG="-rpi"
ipfiremake cryptodev KCFG="-rpi"
+ ipfiremake xtables-addons KCFG="-rpi"
ipfiremake linux-initrd KCFG="-rpi"
# arm multi platform (Panda, Wandboard ...) kernel build
ipfiremake backports KCFG="-multi"
ipfiremake cryptodev KCFG="-multi"
ipfiremake e1000e KCFG="-multi"
- ipfiremake igb KCFG="-multi"
+# ipfiremake igb KCFG="-multi"
ipfiremake ixgbe KCFG="-multi"
+ ipfiremake xtables-addons KCFG="-multi"
ipfiremake linux-initrd KCFG="-multi"
# arm-kirkwood (Dreamplug, ICY-Box ...) kernel build
ipfiremake backports KCFG="-kirkwood"
ipfiremake cryptodev KCFG="-kirkwood"
ipfiremake e1000e KCFG="-kirkwood"
- ipfiremake igb KCFG="-kirkwood"
+# ipfiremake igb KCFG="-kirkwood"
ipfiremake ixgbe KCFG="-kirkwood"
+ ipfiremake xtables-addons KCFG="-kirkwood"
ipfiremake linux-initrd KCFG="-kirkwood"
;;
esac
- ipfiremake pkg-config
+ ipfiremake xtables-addons USPACE="1"
ipfiremake openssl
- ipfiremake openssl-compat
+ [ "${TARGET_ARCH}" = "i586" ] && ipfiremake openssl KCFG='-sse2'
ipfiremake libgpg-error
ipfiremake libgcrypt
ipfiremake libassuan
ipfiremake openldap
ipfiremake apache2
ipfiremake php
- ipfiremake apache2 PASS=C
+ ipfiremake web-user-interface
+ ipfiremake flag-icons
ipfiremake jquery
ipfiremake arping
ipfiremake beep
ipfiremake mtools
ipfiremake initscripts
ipfiremake whatmask
- ipfiremake libmnl
- ipfiremake iptables
ipfiremake conntrack-tools
ipfiremake libupnp
ipfiremake ipaddr
ipfiremake lm_sensors
ipfiremake liboping
ipfiremake collectd
- ipfiremake teamspeak
ipfiremake elinks
ipfiremake igmpproxy
ipfiremake fbset
ipfiremake squid-accounting
ipfiremake pigz
ipfiremake tmux
+ ipfiremake perl-Text-CSV_XS
+ ipfiremake swconfig
+ ipfiremake haproxy
}
buildinstaller() {
cd $BASEDIR
tools/checknewlog.pl
- tools/checkwronginitlinks
+ tools/checkrootfiles
cd $PWD
beautify build_end
#
# List of PCI ID's
#
-# Version: 2014.04.30
-# Date: 2014-04-30 03:15:02
+# Version: 2015.02.14
+# Date: 2015-02-14 03:15:02
#
# Maintained by Martin Mares <mj@ucw.cz> and other volunteers from the
# PCI ID Project at http://pci-ids.ucw.cz/.
4c53 1300 P017 mezzanine (32-bit PMC)
4c53 1310 P017 mezzanine (64-bit PMC)
002f MegaRAID SAS 2208 IOV [Thunderbolt]
+ 1028 1f39 SPERC8-e
1028 1f3e SPERC 8
0030 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI
0e11 00da ProLiant ML 350
1028 1f48 PERC H730P Mini (for blades)
1028 1f49 PERC H730 Mini
1028 1f4a PERC H730 Mini (for blades)
+ 1028 1f4d PERC FD33xS
+ 1028 1f4f PERC H730P Slim
+ 1028 1f54 PERC FD33xD
17aa 1052 ThinkServer RAID 720i
17aa 1053 ThinkServer RAID 720ix
005e SAS1066 PCI-X Fusion-MPT SAS
0096 SAS3004 PCI-Express Fusion-MPT SAS-3
0097 SAS3008 PCI-Express Fusion-MPT SAS-3
1028 1f45 12GB/s HBA internal
- 1028 1f46 12GB/s HBA external
+ 1028 1f46 12Gbps HBA
0407 MegaRAID
1000 0530 MegaRAID 530 SCSI 320-0X RAID Controller
1000 0531 MegaRAID 531 SCSI 320-4X RAID Controller
1306 Kaveri
1307 Kaveri
1308 Kaveri HDMI/DP Audio Controller
- 1309 Kaveri [Radeon R7 Graphics]
+ 1309 Kaveri [Radeon R6/R7 Graphics]
130a Kaveri [Radeon R6 Graphics]
130b Kaveri [Radeon R4 Graphics]
130c Kaveri [Radeon R7 Graphics]
4c54 264LT [Mach64 LT]
4c57 RV200/M7 [Mobility Radeon 7500]
1014 0517 ThinkPad T30
- 1014 0530 ThinkPad T42 2373-4WU
+ 1014 0530 ThinkPad T4x Series
1028 00e6 Radeon Mobility M7 LW (Dell Inspiron 8100)
1028 012a Latitude C640
1043 1622 Mobility Radeon M7 (L3C/S)
148c 2117 Bravo X700 (Secondary)
5f57 R423 [Radeon X800 XT]
6600 Mars [Radeon HD 8670A/8670M/8750M]
+ 103c 1952 ProBook 455 G1
6601 Mars [Radeon HD 8730M]
103c 2100 FirePro M4100
6602 Mars
6604 Opal XT [Radeon R7 M265]
6605 Opal PRO [Radeon R7 M260]
6606 Mars XTX [Radeon HD 8790M]
+ 1028 0684 FirePro W4170M
6607 Mars LE [Radeon HD 8530M / R5 M240]
+ 6608 Oland GL [FirePro W2100]
6610 Oland XT [Radeon HD 8670 / R7 250]
1019 0030 Radeon HD 8670
1028 2120 Radeon R7 250
6631 Oland
6640 Saturn XT [FirePro M6100]
6641 Saturn PRO [Radeon HD 8930M]
+ 6646 Bonaire XT [Radeon R9 M280X]
+ 6647 Bonaire PRO [Radeon R9 M270X]
6649 Bonaire [FirePro W5100]
6650 Bonaire
6651 Bonaire
6664 Jet XT [Radeon R5 M240]
6665 Jet PRO [Radeon R5 M230]
6667 Jet ULT [Radeon R5 M230]
- 666f Sun LE [Radeon HD 8550M]
+ 666f Sun LE [Radeon HD 8550M / R5 M230]
6670 Hainan
6704 Cayman PRO GL [FirePro V7900]
6707 Cayman LE GL [FirePro V5900]
1002 0310 FirePro S9000
1002 0420 Radeon Sky 700
1002 0422 Radeon Sky 900
+ 1002 0710 FirePro S9050
1002 0b0e FirePro S10000 Passive
1002 0b2a FirePro S10000
1028 030c FirePro W8000
1043 9999 ARES II
1092 3000 Tahiti XT2 [Radeon HD 7970 GHz Edition]
1458 2261 Tahiti XT2 [Radeon HD 7970 GHz Edition OC]
+# GV-R928XOC-3GD
+ 1458 3001 Tahiti XTL [Radeon R9 280X OC]
1462 2774 MSI R7970 TF 3GD5/OC BE
1682 3211 Double D HD 7970 Black Edition
# FX-797A-TNBC
1002 0b01 Radeon HD 8950 OEM
1002 3000 Tahiti PRO2 [Radeon HD 7950 Boost]
1462 3000 Radeon HD 8950 OEM
+ 174b a003 Radeon R9 280
679b Malta [Radeon HD 7990]
1002 0b28 Radeon HD 8990 OEM
1002 0b2a Radeon HD 7990
148c 8990 Radeon HD 8990 OEM
679e Tahiti LE [Radeon HD 7870 XT]
679f Tahiti
- 67a0 Hawaii XT GL
- 67a1 Hawaii GL
+ 67a0 Hawaii XT GL [FirePro W9100]
+ 67a1 Hawaii PRO GL [FirePro W8100]
67a2 Hawaii GL
67a8 Hawaii
67a9 Hawaii
67aa Hawaii
67b0 Hawaii XT [Radeon R9 290X]
67b1 Hawaii PRO [Radeon R9 290]
- 67b9 Vesuvius [Radeon R9 295 X2]
+ 67b9 Vesuvius [Radeon R9 295X2]
67be Hawaii LE
6800 Wimbledon XT [Radeon HD 7970M]
1002 0124 Radeon HD 7970M
6822 Venus PRO [Radeon E8860]
6823 Venus PRO [Radeon HD 8850M / R9 M265X]
6825 Heathrow XT [Radeon HD 7870M]
+ 1028 053f FirePro M6000
+ 1028 05cd FirePro M6000
+ 1028 15cd FirePro M6000
+ 103c 176c FirePro M6000
8086 2111 Chelsea PRO
6826 Chelsea LP [Radeon HD 7700M Series]
6827 Heathrow PRO [Radeon HD 7850M/8850M]
6829 Cape Verde
682a Venus PRO
682b Venus LE [Radeon HD 8830M]
+ 682c Cape Verde GL [FirePro W4100]
682d Chelsea XT GL [FirePro M4000]
682f Chelsea LP [Radeon HD 7730M]
103c 1851 Radeon HD 7750M
1019 0030 Radeon HD 8760 OEM
103c 6890 Radeon HD 8760 OEM
1043 8760 Radeon HD 8760 OEM
+ 1462 2710 R7770-PMD1GD5
174b 8304 Radeon HD 8760 OEM
683f Cape Verde PRO [Radeon HD 7750 / R7 250E]
6840 Thames [Radeon HD 7500M/7600M Series]
1028 05a3 Radeon HD 7670M
1028 05b9 Radeon HD 7670M
1028 05bb Radeon HD 7670M
+ 103c 1789 FirePro M2000
103c 17f1 Radeon HD 7570M
103c 17f4 Radeon HD 7650M
103c 1813 Radeon HD 7590M
174b e180 Radeon HD 7350
17af 3015 Radeon HD 7350
68fe Cedar LE
- 6900 Topaz XT [Radeon R7 M260]
+ 6900 Topaz XT [Radeon R7 M260/M265]
+ 1028 0640 Radeon R7 M265
+ 103c 2269 Radeon R7 M260
+ 103c 22c8 Radeon R7 M260
+ 1179 f903 Radeon R7 M260
+ 1179 f934 Radeon R7 M260
6901 Topaz PRO [Radeon R5 M255]
6920 Tonga
+ 6921 Amethyst XT [Radeon R9 M295X]
+ 692b Tonga PRO GL [FirePro W7100]
+ 692f Tonga XT GL [FirePro W8100]
+ 6938 Amethyst XT [Radeon R9 M295X Mac Edition]
+ 6939 Tonga PRO [Radeon R9 285]
700f RS100 AGP Bridge
7010 RS200/RS250 AGP Bridge
7100 R520 [Radeon X1800 XT]
103c 30c1 6910p
718a RV516/M64 [Mobility Radeon X2300]
718b RV516/M62 [Mobility Radeon X1350]
+ 1071 8209 Medion MIM 2240 Notebook PC [MD98100]
718c RV516/M62-CSP64 [Mobility Radeon X1350]
718d RV516/M64-CSP128 [Mobility Radeon X1450]
7193 RV516 [Radeon X1550 Series]
95c6 RV620 LE [Radeon HD 3450 AGP]
95c9 RV620 LE [Radeon HD 3450 PCI]
95cc RV620 GL [FirePro V3700]
+ 95cd RV620 [FirePro 2450]
95cf RV620 GL [FirePro 2260]
960f RS780 HDMI Audio [Radeon (HD) 3000 Series]
9610 RS780 [Radeon HD 3200]
983d Temash [Radeon HD 8250/8280G]
983e Kabini
983f Kabini
- 9850 Mullins [Radeon APU A6-6200 with R3 Graphics]
- 9851 Mullins [Radeon APU A4-6000 with R2 Graphics]
- 9852 Mullins [Radeon APU A4-6000 with R2 Graphics]
- 9853 Mullins [Radeon APU E2-4000 with R2 Graphics]
- 9854 Mullins [Radeon APU E2-3700 with R2 Graphics]
- 9855 Mullins [Radeon APU XX-2450M with R3 Graphics]
- 9856 Mullins [Radeon APU XX-2200M with R2 Graphics]
+ 9840 Kabini HDMI/DP Audio
+ 9850 Mullins [Radeon R3 Graphics]
+ 9851 Mullins [Radeon R4/R5 Graphics]
+ 9852 Mullins [Radeon R2 Graphics]
+ 9853 Mullins [Radeon R2 Graphics]
+ 9854 Mullins [Radeon R3E Graphics]
+ 9855 Mullins [Radeon R6 Graphics]
+ 9856 Mullins [Radeon R1E/R2E Graphics]
9857 Mullins [Radeon APU XX-2200M with R2 Graphics]
9858 Mullins
9859 Mullins
0160 64bit/66MHz PCI ATM 155 MMF
016e GXT4000P Graphics Adapter
0170 GXT6000P Graphics Adapter
+ 1092 0172 Fire GL2
017d GXT300P Graphics Adapter
0180 Snipe chipset SCSI controller
1014 0241 iSeries 2757 DASD IOA
1014 04c7 PCIe3 x 8 Cache SAS RAID Internal Adapter 6GB(2CCA)
1014 04c8 PCIe3 x 8 Cache SAS RAID Internal Adapter 6GB(2CD2)
1014 0c49 PCIe3 x 8 Cache SAS RAID Internal Adapter 6GB(2CCD)
+ 044b GenWQE Accelerator Adapter
04aa Flash Adapter 90 (PCIe2 0.9TB)
3022 QLA3022 Network Adapter
4022 QLA3022 Network Adapter
1028 1f03 PERC 5/i Integrated RAID Controller
0016 PowerEdge Expandable RAID controller S300
1028 1f24 PERC S300 Controller
+# NV-RAM Adapter used in Dell DR appliances
+ 0073 NV-RAM Adapter
1029 Siemens Nixdorf IS
102a LSI Logic
0000 HYDRA
1028 028d PowerEdge T410 MGA G200eW WPCM450
1028 029c PowerEdge M710 MGA G200eW WPCM450
1028 02a4 PowerEdge T310 MGA G200eW WPCM450
+ 15d9 0624 X9SCM-F Motherboard
15d9 a811 H8DGU
0533 MGA G200EH
103c 3381 iLO4
000a PCI-to-PCI bridge
0016 SiS961/2/3 SMBus controller
0018 SiS85C503/5513 (LPC Bridge)
+ 0163 163 802.11b/g Wireless LAN Adapter
0180 RAID bus controller 180 SATA/PATA [SiS]
0181 SATA
0182 182 SATA/RAID Controller
103c 3211 Smart Array E200i
103c 3212 Smart Array E200
3239 Smart Array Gen9 Controllers
- 103c 21bd Smart Array
+ 103c 21bd P244br
103c 21be Smart Array
- 103c 21bf Smart Array
- 103c 21c0 Smart Array
+ 103c 21bf H240ar
+ 103c 21c0 P440ar
103c 21c1 Smart Array
- 103c 21c2 Smart Array
- 103c 21c3 Smart Array
+ 103c 21c2 P440
+ 103c 21c3 P441
103c 21c4 Smart Array
103c 21c5 Smart Array
- 103c 21c6 Smart Array
- 103c 21c7 Smart Array
- 103c 21c8 Smart Array
+ 103c 21c6 H244br
+ 103c 21c7 H240
+ 103c 21c8 H241
103c 21c9 Smart Array
103c 21ca Smart Array
- 103c 21cb Smart Array
+ 103c 21cb P840
103c 21cc Smart Array
103c 21cd Smart Array
103c 21ce Smart Array
3010 Samurai_1
3020 Samurai_IDE
1043 ASUSTeK Computer Inc.
+ 0464 Radeon R9 270x GPU
0675 ISDNLink P-IN100-ST-D
0675 1704 ISDN Adapter (PCI Bus, D, C)
0675 1707 ISDN Adapter (PCI Bus, DV, W)
8000 10GbE Converged Network Adapter (TCP/IP Networking)
8001 10GbE Converged Network Adapter (FCoE)
8020 cLOM8214 1/10GbE Controller
+ 1028 1f64 QMD8262-k 10G DP bNDC KR
103c 3346 CN1000Q Dual Port Converged Network Adapter
103c 3733 NC523SFP 10Gb 2-port Server Adapter
1077 0203 8200 Series Single Port 10GbE Converged Network Adapter (TCP/IP Networking)
1093 National Instruments
0160 PCI-DIO-96
0162 PCI-MIO-16XE-50
- 1150 PCI-DIO-32HS High Speed Digital I/O Board
+ 1150 PCI-6533 (PCI-DIO-32HS)
1170 PCI-MIO-16XE-10
1180 PCI-MIO-16E-1
1190 PCI-MIO-16E-4
11b0 PXI-6070E
- 11c0 PXI-6040e
- 11d0 PXI-6030e
- 1270 PCI-6032e
+ 11c0 PXI-6040E
+ 11d0 PXI-6030E
+ 1270 PCI-6032E
+ 1290 PCI-6704
+ 12b0 PCI-6534
1310 PCI-6602
+ 1320 PXI-6533
1330 PCI-6031E
- 1340 PCI-6033e
+ 1340 PCI-6033E
1350 PCI-6071E
1360 PXI-6602
+ 13c0 PXI-6508
+ 1490 PXI-6534
14e0 PCI-6110
14f0 PCI-6111
1580 PXI-6031E
15b0 PXI-6071E
1710 PXI-6509
+ 17c0 PXI-5690
17d0 PCI-6503
1870 PCI-6713
1880 PCI-6711
18b0 PCI-6052E
18c0 PXI-6052E
+ 1920 PXI-6704
+ 1930 PCI-6040E
+ 19c0 PCI-4472
+ 1aa0 PXI-4110
+ 1ad0 PCI-6133
+ 1ae0 PXI-6133
+ 1e30 PCI-6624
+ 1e40 PXI-6624
+ 1e50 PXI-5404
2410 PCI-6733
2420 PXI-6733
2430 PCI-6731
+ 2470 PCI-4474
+ 24a0 PCI-4065
+ 24b0 PXI-4200
+ 24f0 PXI-4472
+ 2510 PCI-4472
+ 2520 PCI-4474
+ 27a0 PCI-6123
+ 27b0 PXI-6123
2880 DAQCard-6601
2890 PCI-6036E
+ 28a0 PXI-4461
+ 28b0 PCI-6013
28c0 PCI-6014
28d0 PCI-5122
28e0 PXI-5122
+ 29f0 PXI-7334
+ 2a00 PXI-7344
2a60 PCI-6023E
2a70 PCI-6024E
2a80 PCI-6025E
- 2ab0 PXI-6025e
+ 2ab0 PXI-6025E
+ 2b10 PXI-6527
+ 2b20 PCI-6527
2b80 PXI-6713
2b90 PXI-6711
2c60 PCI-6601
2c70 PXI-6601
2c80 PCI-6035E
+ 2c90 PCI-6703
2ca0 PCI-6034E
+ 2cb0 PCI-7344
2cc0 PXI-6608
+ 2d20 PXI-5600
2db0 PCI-6608
+ 2dc0 PCI-4070
+ 2dd0 PXI-4070
+ 2eb0 PXI-4472
+ 2ec0 PXI-6115
+ 2ed0 PCI-6115
+ 2ee0 PXI-6120
+ 2ef0 PCI-6120
+ 2fd1 PCI-7334
+ 2fd2 PCI-7350
+ 2fd3 PCI-7342
+ 2fd5 PXI-7350
+ 2fd6 PXI-7342
+ 7003 PCI-6551
+ 7004 PXI-6551
+ 700b PXI-5421
+ 700c PCI-5421
+ 7023 PXI-2593
702c PXI-7831R
702d PCI-7831R
702e PXI-7811R
702f PCI-7811R
+ 7030 PCI-CAN (Series 2)
+ 7031 PCI-CAN/2 (Series 2)
+ 7032 PCI-CAN/LS (Series 2)
+ 7033 PCI-CAN/LS2 (Series 2)
+ 7034 PCI-CAN/DS (Series 2)
+ 7035 PXI-8460 (Series 2, 1 port)
+ 7036 PXI-8460 (Series 2, 2 ports)
+ 7037 PXI-8461 (Series 2, 1 port)
+ 7038 PXI-8461 (Series 2, 2 ports)
+ 7039 PXI-8462 (Series 2)
+ 703f PXI-2566
+ 7040 PXI-2567
+ 7044 MXI-4 Connection Monitor
+ 7047 PXI-6653
+ 704c PXI-2530
+ 704f PXI-4220
+ 7050 PXI-4204
7055 PXI-7830R
7056 PCI-7830R
+ 705a PCI-CAN/XS (Series 2)
+ 705b PCI-CAN/XS2 (Series 2)
+ 705c PXI-8464 (Series 2, 1 port)
+ 705d PXI-8464 (Series 2, 2 ports)
+ 705e cRIO-9102
+ 7060 PXI-5610
+ 7064 PXI-1045 Trigger Routing Module
+ 7065 PXI-6652
+ 7066 PXI-6651
+ 7067 PXI-2529
+ 7068 PCI-CAN/SW (Series 2)
+ 7069 PCI-CAN/SW2 (Series 2)
+ 706a PXI-8463 (Series 2, 1 port)
+ 706b PXI-8463 (Series 2, 2 ports)
+ 7073 PCI-6723
7074 PXI-7833R
+ 7075 PXI-6552
+ 7076 PCI-6552
+ 707c PXI-1428
+ 707e PXI-4462
+ 7080 PXI-8430/2 (RS-232) Interface
+ 7081 PXI-8431/2 (RS-485) Interface
7083 PCI-7833R
-# Low-Cost, High-Current, 96 Ch, 5 V TTL/CMOS Digital I/O
7085 PCI-6509
- 70a9 PCI-6528 (Digital I/O at 60V)
+ 7086 PXI-6528
+ 7087 PCI-6515
+ 7088 PCI-6514
+ 708c PXI-2568
+ 708d PXI-2569
+ 70a9 PCI-6528
70aa PCI-6229
70ab PCI-6259
70ac PCI-6289
+ 70ad PXI-6251
70ae PXI-6220
70af PCI-6221
70b0 PCI-6220
+ 70b1 PXI-6229
+ 70b2 PXI-6259
+ 70b3 PXI-6289
70b4 PCI-6250
+ 70b5 PXI-6221
70b6 PCI-6280
70b7 PCI-6254
- 70b8 PCI-6251 [M Series - High Speed Multifunction DAQ]
+ 70b8 PCI-6251
+ 70b9 PXI-6250
+ 70ba PXI-6254
+ 70bb PXI-6280
70bc PCI-6284
70bd PCI-6281
+ 70be PXI-6284
70bf PXI-6281
70c0 PCI-6143
+ 70c3 PCI-6511
+ 70c4 PXI-7330
+ 70c5 PXI-7340
+ 70c6 PCI-7330
+ 70c7 PCI-7340
+ 70c8 PCI-6513
+ 70c9 PXI-6515
+ 70ca PCI-1405
+ 70cc PCI-6512
+ 70cd PXI-6514
+ 70ce PXI-1405
+ 70cf PCIe-GPIB
+ 70d0 PXI-2570
+ 70d1 PXI-6513
+ 70d2 PXI-6512
+ 70d3 PXI-6511
+ 70d4 PCI-6722
+ 70d6 PXI-4072
+ 70d7 PXI-6541
+ 70d8 PXI-6542
+ 70d9 PCI-6541
+ 70da PCI-6542
+ 70db PCI-8430/2 (RS-232) Interface
+ 70dc PCI-8431/2 (RS-485) Interface
+ 70dd PXI-8430/4 (RS-232) Interface
+ 70de PXI-8431/4 (RS-485) Interface
+ 70df PCI-8430/4 (RS-232) Interface
+ 70e0 PCI-8431/4 (RS-485) Interface
+ 70e1 PXI-2532
+ 70e2 PXI-8430/8 (RS-232) Interface
+ 70e3 PXI-8431/8 (RS-485) Interface
+ 70e4 PCI-8430/8 (RS-232) Interface
+ 70e5 PCI-8431/8 (RS-485) Interface
+ 70e6 PXI-8430/16 (RS-232) Interface
+ 70e7 PCI-8430/16 (RS-232) Interface
+ 70e8 PXI-8432/2 (Isolated RS-232) Interface
+ 70e9 PXI-8433/2 (Isolated RS-485) Interface
+ 70ea PCI-8432/2 (Isolated RS-232) Interface
+ 70eb PCI-8433/2 (Isolated RS-485) Interface
+ 70ec PXI-8432/4 (Isolated RS-232) Interface
+ 70ed PXI-8433/4 (Isolated RS-485) Interface
+ 70ee PCI-8432/4 (Isolated RS-232) Interface
+ 70ef PCI-8433/4 (Isolated RS-485) Interface
70f0 PXI-5922
70f1 PCI-5922
70f2 PCI-6224
+ 70f3 PXI-6224
+ 70f6 cRIO-9101
+ 70f7 cRIO-9103
+ 70f8 cRIO-9104
+ 70ff PXI-6723
+ 7100 PXI-6722
+ 7104 PCIx-1429
+ 7105 PCIe-1429
+ 710a PXI-4071
+ 710d PXI-6143
+ 710e PCIe-GPIB
+ 710f PXI-5422
+ 7110 PCI-5422
+ 7111 PXI-5441
+ 7119 PXI-6561
+ 711a PXI-6562
+ 711b PCI-6561
+ 711c PCI-6562
+ 7120 PCI-7390
7121 PXI-5122EX
7122 PCI-5122EX
- 7144 PXI-5124 (12-bit 200 MS/s Digitizer)
+ 7123 PXIe-5653
+ 7124 PCI-6510
+ 7125 PCI-6516
+ 7126 PCI-6517
+ 7127 PCI-6518
+ 7128 PCI-6519
+ 7137 PXI-2575
+ 713c PXI-2585
+ 713d PXI-2586
+ 7142 PXI-4224
+ 7144 PXI-5124
7145 PCI-5124
+ 7146 PCI-6132
+ 7147 PXI-6132
+ 7148 PCI-6122
+ 7149 PXI-6122
714c PXI-5114
714d PCI-5114
+ 7150 PXI-2564
7152 PCI-5640R
+ 7156 PXI-1044 Trigger Routing Module
+ 715d PCI-1426
+ 7167 PXI-5412
+ 7168 PCI-5412
+ 716b PCI-6230
716c PCI-6225
- 717d PCIE-6251
+ 716d PXI-6225
+ 716f PCI-4461
+ 7170 PCI-4462
+ 7171 PCI-6010
+ 7174 PXI-8360
+ 7177 PXI-6230
+ 717d PCIe-6251
717f PCIe-6259
+ 7187 PCI-1410
+ 718b PCI-6521
+ 718c PXI-6521
+ 7191 PCI-6154
7193 PXI-7813R
7194 PCI-7813R
- 71bc PCI-6221 (37pin)
- 71d0 PXI-6143
+ 7195 PCI-8254R
+ 7197 PXI-5402
+ 7198 PCI-5402
+ 719f PCIe-6535
+ 71a0 PCIe-6536
+ 71a3 PXI-5650
+ 71a4 PXI-5652
+ 71a5 PXI-2594
+ 71a7 PXI-2595
+ 71a9 PXI-2596
+ 71aa PXI-2597
+ 71ab PXI-2598
+ 71ac PXI-2599
+ 71ad PCI-GPIB+
+ 71ae PCIe-1430
+ 71b7 PXI-1056 Trigger Routing Module
+ 71b8 PXI-1045 Trigger Routing Module
+ 71b9 PXI-1044 Trigger Routing Module
+ 71bb PXI-2584
+ 71bc PCI-6221 (37-pin)
+ 71bf PCIe-1427
+ 71c5 PCI-6520
+ 71c6 PXI-2576
+ 71c7 cRIO-9072
71dc PCI-1588
+ 71e0 PCI-6255
+ 71e1 PXI-6255
+ 71e2 PXI-5406
+ 71e3 PCI-5406
+ 71fc PXI-4022
+ 7209 PCI-6233
+ 720a PXI-6233
+ 720b PCI-6238
+ 720c PXI-6238
7260 PXI-5142
7261 PCI-5142
+ 726d PXI-5651
+ 7273 PXI-4461
+ 7274 PXI-4462
+ 7279 PCI-6232
+ 727a PXI-6232
+ 727b PCI-6239
+ 727c PXI-6239
+ 727e SMBus Controller
+ 1093 75ac PXIe-8388
+ 1093 75ad PXIe-8389
+ 1093 7650 PXIe-8381
+ 1093 8360 PXIe-8360
+ 1093 8370 PXIe-8370
+ 1093 8375 PXIe-8375
+ 7281 PCI-6236
+ 7282 PXI-6236
+ 7283 PXI-2554
+ 7288 PXIe-5611
+ 7293 PCIe-8255R
+ 729d cRIO-9074
+ 72a4 PCIe-4065
+ 72a7 PCIe-6537
72a8 PXI-5152
72a9 PCI-5152
72aa PXI-5105
72ab PCI-5105
72b8 PXI-6682
+ 72d0 PXI-2545
+ 72d1 PXI-2546
+ 72d2 PXI-2547
+ 72d3 PXI-2548
+ 72d4 PXI-2549
+ 72d5 PXI-2555
+ 72d6 PXI-2556
+ 72d7 PXI-2557
+ 72d8 PXI-2558
+ 72d9 PXI-2559
+ 72e8 PXIe-6251
+ 72e9 PXIe-6259
+ 72ef PXI-4498
+ 72f0 PXI-4496
+ 72fb PXIe-6672
+ 730e PXI-4130
730f PXI-5922EX
7310 PCI-5922EX
+ 731c PXI-2535
+ 731d PXI-2536
+ 7322 PXIe-6124
+ 7327 PXI-6529
+ 7331 PXIe-5602
+ 7332 PXIe-5601
7333 PXI-5900
+ 7335 PXI-2533
+ 7336 PXI-2534
+ 7342 PXI-4461
7349 PXI-5154
734a PCI-5154
+ 7357 PXI-4065
+ 7359 PXI-4495
+ 7370 PXI-4461
+ 7373 sbRIO-9601
+ 7374 IOtech-9601
+ 7375 sbRIO-9602
+ 7378 sbRIO-9641
737d PXI-5124EX
7384 PXI-7851R
7385 PXI-7852R
7392 PXI-7853R
7393 PCIe-7841R
7394 PCIe-7842R
+ 7397 sbRIO-9611
+ 7398 sbRIO-9612
+ 7399 sbRIO-9631
+ 739a sbRIO-9632
+ 739b sbRIO-9642
+ 73a1 PXIe-4498
+ 73a2 PXIe-4496
73a5 PXIe-5641R
+ 73a7 PXI-8250 Chassis Monitor Module
+ 73a8 PXI-8511 CAN/LS
+ 73a9 PXI-8511 CAN/LS
+ 73aa PXI-8512 CAN/HS
+ 73ab PXI-8512 CAN/HS
+ 73ac PXI-8513 CAN/XS
+ 73ad PXI-8513 CAN/XS
+ 73af PXI-8516 LIN
+ 73b1 PXI-8517 FlexRay
+ 73b2 PXI-8531 CANopen
+ 73b3 PXI-8531 CANopen
+ 73b4 PXI-8532 DeviceNet
+ 73b5 PXI-8532 DeviceNet
+ 73b6 PCI-8511 CAN/LS
+ 73b7 PCI-8511 CAN/LS
+ 73b8 PCI-8512 CAN/HS
+ 73b9 PCI-8512 CAN/HS
+ 73ba PCI-8513 CAN/XS
+ 73bb PCI-8513 CAN/XS
+ 73bd PCI-8516 LIN
+ 73bf PCI-8517 FlexRay
+ 73c0 PCI-8531 CANopen
+ 73c1 PCI-8531 CANopen
+ 73c2 PCI-8532 DeviceNet
+ 73c3 PCI-8532 DeviceNet
+ 73c5 PXIe-2527
+ 73c6 PXIe-2529
+ 73c8 PXIe-2530
+ 73c9 PXIe-2532
+ 73ca PXIe-2569
+ 73cb PXIe-2575
+ 73cc PXIe-2593
73d5 PXI-7951R
73d6 PXI-7952R
73d7 PXI-7953R
73e1 PXI-7854R
73ec PXI-7954R
+ 73ed cRIO-9073
73f0 PXI-5153
73f1 PCI-5153
+ 73f4 PXI-2515
+ 73f6 cRIO-9111
+ 73f7 cRIO-9112
+ 73f8 cRIO-9113
+ 73f9 cRIO-9114
+ 73fa cRIO-9116
+ 73fb cRIO-9118
+ 7404 PXI-4132
7405 PXIe-6674T
+ 7406 PXIe-6674
+ 740e PCIe-8430/16 (RS-232) Interface
+ 740f PCIe-8430/8 (RS-232) Interface
+ 7410 PCIe-8431/16 (RS-485) Interface
+ 7411 PCIe-8431/8 (RS-485) Interface
+ 7414 PCIe-GPIB+
+ 741c PXI-5691
+ 741d PXI-5695
+ 743c CSC-3059
+ 7448 PXI-2510
+ 7454 PXI-2512
+ 7455 PXI-2514
+ 7456 PXIe-2512
+ 7457 PXIe-2514
+ 745a PXI-6682H
745e PXI-5153EX
745f PCI-5153EX
7460 PXI-5154EX
7461 PCI-5154EX
+ 746d PXIe-5650
+ 746e PXIe-5651
+ 746f PXIe-5652
+ 7472 PXI-2800
+ 7495 PXIe-5603
+ 7497 PXIe-5605
+ 74ae PXIe-2515
+ 74b4 PXI-2531
+ 74b5 PXIe-2531
+ 74c1 PXIe-8430/16 (RS-232) Interface
+ 74c2 PXIe-8430/8 (RS-232) Interface
+ 74c3 PXIe-8431/16 (RS-485) Interface
+ 74c4 PXIe-8431/8 (RS-485) Interface
+ 74d5 PXIe-5630
+ 74d9 PCIe-8432/2 (Isolated RS-232) Interface
+ 74da PCIe-8433/2 (Isolated RS-485) Interface
+ 74db PCIe-8432/4 (Isolated RS-232) Interface
+ 74dc PCIe-8433/4 (Isolated RS-485) Interface
+ 74e8 NI 9148
+ 7515 PCIe-8430/2 (RS-232) Interface
+ 7516 PCIe-8430/4 (RS-232) Interface
+ 7517 PCIe-8431/2 (RS-485) Interface
+ 7518 PCIe-8431/4 (RS-485) Interface
+ 751b cRIO-9081
+ 751c cRIO-9082
+ 7528 PXIe-4497
+ 7529 PXIe-4499
+ 752a PXIe-4492
7539 NI 9157
753a NI 9159
+ 7598 PXI-2571
+ 75a4 PXI-4131A
+ 75b1 PCIe-7854R
+ 75ba PXI-2543
+ 75bb PXIe-2543
75e5 PXI-6683
75e6 PXI-6683H
+ 75ef PXIe-5632
+ 761f PXI-2540
+ 7620 PXIe-2540
+ 7621 PXI-2541
+ 7622 PXIe-2541
7626 NI 9154
7627 NI 9155
- b001 IMAQ-PCI-1408
- b011 IMAQ-PXI-1408
- b021 IMAQ-PCI-1424
- b031 IMAQ-PCI-1413
- b041 IMAQ-PCI-1407
- b051 IMAQ-PXI-1407
- b061 IMAQ-PCI-1411
- b071 IMAQ-PCI-1422
- b081 IMAQ-PXI-1422
- b091 IMAQ-PXI-1411
+ 7638 PXI-2720
+ 7639 PXI-2722
+ 763a PXIe-2725
+ 763b PXIe-2727
+ 763c PXI-4465
+ 764b PXIe-2790
+ 764c PXI-2520
+ 764d PXI-2521
+ 764e PXI-2522
+ 764f PXI-2523
+ 7654 PXI-2796
+ 7655 PXI-2797
+ 7656 PXI-2798
+ 7657 PXI-2799
+ 765d PXI-2542
+ 765e PXIe-2542
+ 765f PXI-2544
+ 7660 PXIe-2544
+ 766d PCIe-6535B
+ 766e PCIe-6536B
+ 766f PCIe-6537B
+ 76a3 PXIe-6535B
+ 76a4 PXIe-6536B
+ 76a5 PXIe-6537B
+ 9020 PXI-2501
+ 9030 PXI-2503
+ 9040 PXI-2527
+ 9050 PXI-2565
+ 9060 PXI-2590
+ 9070 PXI-2591
+ 9080 PXI-2580
+ 9090 PCI-4021
+ 90a0 PXI-4021
+ b001 PCI-1408
+ b011 PXI-1408
+ b021 PCI-1424
+ b022 PXI-1424
+ b031 PCI-1413
+ b041 PCI-1407
+ b051 PXI-1407
+ b061 PCI-1411
+ b071 PCI-1422
+ b081 PXI-1422
+ b091 PXI-1411
+ b0b1 PCI-1409
+ b0c1 PXI-1409
+ b0e1 PCI-1428
c4c4 PXIe/PCIe Device
+ 1093 728a PXIe-5421
+ 1093 728b PXIe-5442
+ 1093 728d PXIe-5451
+ 1093 72a2 PXIe-5122
+ 1093 72da PXIe-5422
+ 1093 72f7 PXIe-6535
+ 1093 72f8 PXIe-6536
+ 1093 72f9 PXIe-6537
+ 1093 7326 PCIe-6509
+ 1093 736c PXIe-4140
+ 1093 738b PXIe-5622
+ 1093 73c4 PXIe-5450
+ 1093 73c7 PXIe-6545
+ 1093 73d4 PXIe-6544
+ 1093 7425 PCIe-6320
+ 1093 7427 PCIe-6321
+ 1093 7428 PXIe-6323
+ 1093 7429 PCIe-6323
+ 1093 742a PXIe-6341
+ 1093 742b PCIe-6341
+ 1093 742c PXIe-6343
+ 1093 742d PCIe-6343
+ 1093 742f PCIe-6351
+ 1093 7431 PCIe-6353
+ 1093 7432 PXIe-6361
+ 1093 7433 PCIe-6361
+ 1093 7434 PXIe-6363
+ 1093 7435 PCIe-6363
+ 1093 7436 PXIe-6356
+ 1093 7437 PXIe-6358
+ 1093 7438 PXIe-6366
+ 1093 7439 PXIe-6368
+ 1093 7468 PXIe-5185
+ 1093 7469 PXIe-5186
+ 1093 7492 PXIe-4300
+ 1093 7498 PXIe-6548
+ 1093 7499 PXIe-6547
+ 1093 74a8 PXIe-4330
+ 1093 74a9 PXIe-4331
+ 1093 74b1 PXIe-4154
1093 74b2 PXIe-4353
+ 1093 74b6 PCIe-1433
+ 1093 74cd PXIe-5643R
1093 74d0 PXIe-7961R
+ 1093 74dd PXIe-6376
+ 1093 74de PXIe-6378
1093 74e2 PXIe-7962R
1093 74e3 PXIe-7965R
+ 1093 74e5 PXIe-4844
+ 1093 74f3 PCIe-5140
+ 1093 753c PXIe-1435
+ 1093 7548 PXIe-5622 (25MHz DDC)
+ 1093 754d PCIe-5155
+ 1093 7551 PXIe-6556
1093 7553 PCIe-1473R
+ 1093 7570 PCIe-1474R
+ 1093 7571 PXIe-1475R
+ 1093 7572 PXIe-1476R
+ 1093 75a2 PXIe-5693
+ 1093 75a3 PXIe-5694
+ 1093 75a5 PXIe-4141
1093 75ce PXIe-7966R
+ 1093 75cf PXIe-4357
+ 1093 75d2 PXIe-RevB-5643R
+ 1093 75d3 PXIe-5644R
+ 1093 75ee PXIe-5645R
+ 1093 7613 PXIe-6555
+ 1093 7619 PXIe-5185
+ 1093 761a PXIe-5186
+ 1093 7629 PXIe-4142
+ 1093 762a PXIe-4143
+ 1093 762b PXIe-4138
+ 1093 762c PXIe-4144
+ 1093 762d PXIe-4145
+ 1093 7644 PXIe-4841
+ 1093 7658 PXIe-5162 (4CH)
+ 1093 76ab PXIe-4322
+ 1093 76ad PXIe-4112
+ 1093 76ae PXIe-4113
+ 1093 76b5 PXIe-7971R
+ 1093 76b6 PXIe-7972R
1093 76b7 PXIe-7975R
- 1093 76d0 PXIe-5160
+ 1093 76c8 PXIe-6614
+ 1093 76c9 PXIe-6612
+ 1093 76cb PXIe-5646R
+ 1093 76cc PXIe-5162 (2CH)
+ 1093 76d0 PXIe-5160 (2CH)
+ 1093 76d1 PXIe-5160 (4CH)
+ 1093 76dc PXIe-4610
+ 1093 76fb PCIe-1473R-LX110
+ 1093 76fe PXIe-5644R
+ 1093 76ff PXIe-5644R
+ 1093 7700 PXIe-5644R
+ 1093 7701 PXIe-5645R
+ 1093 7702 PXIe-5645R
+ 1093 7703 PXIe-5645R
+ 1093 770c PXIe-4139
+ 1093 7711 PXIe-4464
+ 1093 7716 PCIe-6612
+ 1093 771e PXIe-4339
+ 1093 7735 cRIO-9033
+ 1093 774b cRIO-9031
+ 1093 774d cRIO-9034
+ 1093 7755 cRIO-9030
+ 1093 7777 PXIe-7976R
+ 1093 7782 PXIe-5646R
+ 1093 7783 PXIe-5646R
+ 1093 7784 PXIe-5646R
+ 1093 77a5 PXIe-6345
+ 1093 77a6 PXIe-6355
+ 1093 77a7 PXIe-6365
+ 1093 77a8 PXIe-6375
+ 1093 77b4 PXIe-7820R
+ 1093 77b5 PXIe-7821R
+ 1093 77b6 PXIe-7822R
+ 1093 77b9 cRIO-9038
c801 PCI-GPIB
- c831 PCI-GPIB bridge
+ c811 PCI-GPIB+
+ c821 PXI-GPIB
+ c831 PMC-GPIB
+ c840 PCI-GPIB
+ d130 PCI-232/2 Interface
+ d140 PCI-232/4 Interface
+ d150 PCI-232/8 Interface
+ d160 PCI-485/2 Interface
+ d170 PCI-485/4 Interface
+ d190 PXI-8422/2 (Isolated RS-232) Interface
+ d1a0 PXI-8422/4 (Isolated RS-232) Interface
+ d1b0 PXI-8423/2 (Isolated RS-485) Interface
+ d1c0 PXI-8423/4 (Isolated RS-485) Interface
+ d1d0 PXI-8420/2 (RS-232) Interface
+ d1e0 PXI-8420/4 (RS-232) Interface
+ d1f0 PXI-8420/8 (RS-232) Interface
+ d1f1 PXI-8420/16 (RS-232) Interface
+ d230 PXI-8421/2 (RS-485) Interface
+ d240 PXI-8421/4 (RS-485) Interface
+ d250 PCI-232/2 (Isolated) Interface
+ d260 PCI-485/2 (Isolated) Interface
+ d270 PCI-232/4 (Isolated) Interface
+ d280 PCI-485/4 (Isolated) Interface
+ d290 PCI-485/8 Interface
+ d2a0 PXI-8421/8 (RS-485) Interface
+ d2b0 PCI-232/16 Interface
+ e111 PCI-CAN
+ e131 PXI-8461 (1 port)
+ e141 PCI-CAN/LS
+ e151 PXI-8460 (1 port)
+ e211 PCI-CAN/2
+ e231 PXI-8461 (2 ports)
+ e241 PCI-CAN/LS2
+ e251 PXI-8460 (2 ports)
+ e261 PCI-CAN/DS
+ e271 PXI-8462
1094 First International Computers [FIC]
# nee CMD Technology Inc
1095 Silicon Image, Inc.
1095 3512 SiI 3512 SATALink Controller
1095 6512 SiI 3512 SATARaid Controller
3531 SiI 3531 [SATALink/SATARaid] Serial ATA Controller
+ 17c0 4083 Medion WIM 2210 Notebook PC [MD96850]
1096 Alacron
1097 Appian Technology
1098 Quantum Designs (H.K.) Ltd
1369 c001 LX6464ES
1369 c201 LX1616ES
14b4 d10a DekTec DTA-110T
+ 14b4 d128 Dektec DTA-140
14b4 d140 Dektec DTA-140
1a0e 006f Dektec DTA-111
9060 PCI9060 32-bit 33MHz PCI <-> IOBus Bridge
0365 MCP55 LPC Bridge
0366 MCP55 LPC Bridge
0367 MCP55 LPC Bridge
- 0368 MCP55 SMBus
+ 0368 MCP55 SMBus Controller
1028 020c PowerEdge M605 MCP55 SMBus
1028 0221 PowerEdge R805 MCP55 SMBus
147b 1c24 KN9 series mainboard
063f G94 [GeForce 9600 GE]
0640 G96 [GeForce 9500 GT]
0641 G96 [GeForce 9400 GT]
+ 1682 4009 PV-T94G-ZAFG
+ 0642 G96 [D9M-10]
0643 G96 [GeForce 9500 GT]
0644 G96 [GeForce 9500 GS]
0645 G96 [GeForce 9500 GS]
0beb GF104 High Definition Audio Controller
1462 2322 N460GTX Cyclone 1GD5/OC
0bee GF116 High Definition Audio Controller
+ 0bf0 Tegra2 PCIe x4 Bridge
+ 0bf1 Tegra2 PCIe x2 Bridge
0ca0 GT215 [GeForce GT 330]
0ca2 GT215 [GeForce GT 320]
0ca3 GT215 [GeForce GT 240]
0e0a GK104 HDMI Audio Controller
0e0b GK106 HDMI Audio Controller
0e0c GF114 HDMI Audio Controller
+ 0e0f GK208 HDMI/DP Audio Controller
+ 0e12 TegraK1 PCIe x4 Bridge
+ 0e13 TegraK1 PCIe x1 Bridge
0e1a GK110 HDMI Audio
0e1b GK107 HDMI Audio Controller
103c 197b ZBook 15
1043 8428 GTX650-DC-1GD5
+ 0e1c Tegra3+ PCIe x4 Bridge
+ 0e1d Tegra3+ PCIe x2 Bridge
0e22 GF104 [GeForce GTX 460]
1462 2322 N460GTX Cyclone 1GD5/OC
0e23 GF104 [GeForce GTX 460 SE]
0e3b GF104GLM [Quadro 4000M]
0f00 GF108 [GeForce GT 630]
0f01 GF108 [GeForce GT 620]
+ 0f02 GF108 [GeForce GT 730]
+ 0fbb GM204 High Definition Audio Controller
0fc0 GK107 [GeForce GT 640 OEM]
0fc1 GK107 [GeForce GT 640]
0fc2 GK107 [GeForce GT 630 OEM]
0fc6 GK107 [GeForce GTX 650]
1043 8428 GTX650-DC-1GD5
+ 0fc8 GK107 [GeForce GT 740]
0fcd GK107M [GeForce GT 755M]
0fce GK107M [GeForce GT 640M LE]
0fd1 GK107M [GeForce GT 650M]
0fd5 GK107M [GeForce GT 650M Mac Edition]
0fd8 GK107M [GeForce GT 640M Mac Edition]
0fd9 GK107M [GeForce GT 645M]
+ 0fdb GK107M
0fdf GK107M [GeForce GT 740M]
0fe0 GK107M [GeForce GTX 660M Mac Edition]
0fe1 GK107M [GeForce GT 730M]
0fe2 GK107M [GeForce GT 745M]
0fe3 GK107M [GeForce GT 745M]
+ 103c 2b16 GeForce GT 745A
17aa 3675 GeForce GT 745A
0fe4 GK107M [GeForce GT 750M]
0fe5 GK107 [GeForce K340 USM]
0fef GK107GL [GRID K340]
0ff1 GK107 [NVS 1000]
0ff2 GK107GL [GRID K1]
+ 0ff3 GK107GL [Quadro K420]
0ff5 GK107GL [GRID K1 Tesla USM]
0ff6 GK107GLM [Quadro K1100M]
103c 197b ZBook 15
0ffd GK107 [NVS 510]
0ffe GK107GL [Quadro K2000]
0fff GK107GL [Quadro 410]
+ 1001 GK110B [GeForce GTX TITAN Z]
1003 GK110 [GeForce GTX Titan LE]
1004 GK110 [GeForce GTX 780]
3842 0784 GK110B [GeForce GTX 780 SC w/ ACX Cooler]
1008 GK110 [GeForce GTX 780 Ti Rev. 2]
100a GK110B [GeForce GTX 780 Ti]
100c GK110B [GeForce GTX Titan Black]
+ 101e GK110GL [Tesla K20X]
101f GK110GL [Tesla K20]
1020 GK110GL [Tesla K20X]
1021 GK110GL [Tesla K20Xm]
1027 GK110BGL [Tesla K40st]
1028 GK110GL [Tesla K20m]
1029 GK110BGL [Tesla K40s]
+ 102a GK110BGL [Tesla K40t]
+ 102d GK210GL [Tesla K80]
+ 102e GK110BGL [Tesla K40d]
103a GK110GL [Quadro K6000]
+ 103c GK110GL [Quadro K5200]
1040 GF119 [GeForce GT 520]
1042 GF119 [GeForce 510]
1048 GF119 [GeForce 605]
10b0 104a Gainward GeForce GT 610
104b GF119 [GeForce GT 625 OEM]
104c GF119 [GeForce GT 705]
+ 104d GF119 [GeForce GT 710]
1050 GF119M [GeForce GT 520M]
1051 GF119M [GeForce GT 520MX]
1052 GF119M [GeForce GT 520M]
10c5 GT218 [GeForce 405]
10d8 GT218 [NVS 300]
1140 GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M]
+ 1019 999f GeForce GT 720M
1025 0600 GeForce GT 620M
1025 0606 GeForce GT 620M
1025 064a GeForce GT 620M
1025 0821 GeForce GT 720M
1025 0823 GeForce GT 720M
1025 0830 GeForce GT 720M
+ 1025 0833 GeForce GT 720M
1025 0837 GeForce GT 720M
+ 1025 083e GeForce 820M
1025 0841 GeForce 710M
+ 1025 0854 GeForce 820M
+ 1025 0855 GeForce 820M
+ 1025 0856 GeForce 820M
+ 1025 0857 GeForce 820M
+ 1025 0858 GeForce 820M
+ 1025 0868 GeForce 820M
+ 1025 0869 GeForce 810M
+ 1025 0873 GeForce 820M
+ 1025 0878 GeForce 820M
+ 1025 087b GeForce 820M
+ 1025 087c GeForce 810M
+ 1025 0881 GeForce 820M
+ 1025 088a GeForce 820M
+ 1025 089b GeForce 820M
+ 1025 090f GeForce 820M
+ 1025 0921 GeForce 820M
+ 1025 092e GeForce 810M
+ 1025 092f GeForce 820M
+ 1025 093a GeForce 820M
+ 1025 093c GeForce 820M
+ 1025 093f GeForce 820M
+ 1025 0941 GeForce 820M
+ 1025 0945 GeForce 820M
+ 1025 0954 GeForce 820M
+ 1025 0965 GeForce 820M
1028 054d GeForce GT 630M
1028 054e GeForce GT 630M
1028 0554 GeForce GT 620M
1028 05e0 GeForce GT 720M
1028 05e8 GeForce GT 630M
1028 05f4 GeForce GT 720M
+ 1028 060f GeForce GT 720M
+ 1028 064e GeForce 820M
+ 1028 0652 GeForce 820M
+ 1028 0653 GeForce 820M
+ 1028 0655 GeForce 820M
+ 1028 065e GeForce 820M
+ 1028 0662 GeForce 820M
+ 1028 068d GeForce 820M
103c 18ef GeForce GT 630M
103c 18f9 GeForce GT 630M
103c 18fb GeForce GT 630M
103c 18fd GeForce GT 630M
103c 18ff GeForce GT 630M
+ 103c 2335 GeForce 820M
+ 103c 2337 GeForce 820M
103c 2aef GeForce GT 720A
103c 2af9 GeForce 710A
1043 10dd NVS 5200M
1043 16cd GeForce 820M
1043 16dd GeForce 820M
1043 170d GeForce 820M
+ 1043 176d GeForce 820M
+ 1043 178d GeForce 820M
+ 1043 179d GeForce 820M
+ 1043 17dd GeForce 820M
1043 2132 GeForce GT 620M
1043 2136 NVS 5200M
1043 21ba GeForce GT 720M
1043 224a GeForce GT 710M
1043 227a GeForce 820M
1043 228a GeForce 820M
+ 1043 232a GeForce 820M
+ 1043 233a GeForce 820M
+ 1043 236a GeForce 820M
+ 1043 238a GeForce 820M
1043 8595 GeForce GT 720M
+ 1043 85ea GeForce GT 720M
+ 1043 85eb GeForce 820M
+ 1043 85ec GeForce 820M
+ 1043 85ee GeForce GT 720M
+ 1043 85f3 GeForce 820M
+ 1043 860e GeForce 820M
+ 1043 861a GeForce 820M
+ 1043 861b GeForce 820M
+ 1043 8628 GeForce 820M
+ 1043 8643 GeForce 820M
+ 1043 864c GeForce 820M
+ 1043 8652 GeForce 820M
+ 105b 0dac GeForce GT 720M
+ 105b 0dad GeForce GT 720M
+ 105b 0ef3 GeForce GT 720M
1072 152d GeForce GT 720M
10cf 17f5 GeForce GT 720M
1179 fa01 GeForce 710M
144d c0e2 NVS 5200M
144d c0e3 NVS 5200M
144d c0e4 NVS 5200M
+ 144d c10d GeForce 820M
144d c652 GeForce GT 620M
144d c709 GeForce 710M
144d c711 GeForce 710M
144d c736 GeForce 710M
+ 144d c737 GeForce 710M
+ 144d c745 GeForce 820M
+ 144d c750 GeForce 820M
1462 10b8 GeForce GT 710M
1462 10e9 GeForce GT 720M
1462 1116 GeForce 820M
1462 aa33 GeForce 720M
1462 aaa2 GeForce GT 720M
1462 aaa3 GeForce 820M
+ 1462 acb2 GeForce GT 720M
+ 1462 acc1 GeForce GT 720M
+ 1462 ae61 GeForce 720M
+ 1462 ae65 GeForce GT 720M
+ 1462 ae6a GeForce 820M
1462 ae71 GeForce GT 720M
+ 14c0 0083 GeForce 820M
152d 0926 GeForce 620M
152d 0982 GeForce GT 630M
152d 0983 GeForce GT 630M
+ 152d 1005 GeForce GT 820M
152d 1012 GeForce 710M
+ 152d 1019 GeForce 820M
152d 1030 GeForce GT 630M
152d 1055 GeForce 710M
152d 1067 GeForce GT 720M
152d 1072 GeForce GT 720M
+ 152d 1086 GeForce 820M
+ 152d 1092 GeForce 820M
17aa 2200 NVS 5200M
17aa 2213 GeForce GT 720M
17aa 2220 GeForce GT 720M
17aa 369c GeForce 820A
17aa 369d GeForce 820A
17aa 369e GeForce 820A
+ 17aa 36a9 GeForce 820A
17aa 3800 GeForce GT 720M
17aa 3801 GeForce GT 720M
17aa 3802 GeForce GT 720M
17aa 3803 GeForce GT 720M
17aa 3804 GeForce GT 720M
+ 17aa 3806 GeForce GT 720M
+ 17aa 3808 GeForce GT 720M
+ 17aa 380d GeForce 820M
+ 17aa 380e GeForce 820M
+ 17aa 380f GeForce 820M
+ 17aa 3811 GeForce 820M
+ 17aa 3812 GeForce 820M
+ 17aa 3813 GeForce 820M
+ 17aa 3816 GeForce 820M
+ 17aa 3818 GeForce 820M
+ 17aa 381a GeForce 820M
+ 17aa 381c GeForce 820M
17aa 3901 GeForce 610M / GT 620M
17aa 3902 GeForce 710M
17aa 3903 GeForce 610M/710M
17aa 3904 GeForce GT 620M/625M
17aa 3905 GeForce GT 720M
+ 17aa 3907 GeForce 820M
17aa 3910 GeForce 720M
17aa 3912 GeForce 720M
+ 17aa 3913 GeForce 820M
+ 17aa 3915 GeForce 820M
17aa 3977 GeForce GT 720M
17aa 3983 GeForce 610M
17aa 5001 GeForce 610M
17aa 502d GeForce 710M
17aa 502e GeForce GT 720M
17aa 502f GeForce GT 720M
+ 17aa 5030 GeForce 705M
+ 17aa 5031 GeForce 705M
+ 17aa 5032 GeForce 820M
+ 17aa 5033 GeForce 820M
17aa 503e GeForce 710M
17aa 503f GeForce 820M
+ 17aa 5040 GeForce 820M
1854 0177 GeForce 710M
1854 0180 GeForce 710M
1854 0190 GeForce GT 720M
1854 0192 GeForce GT 720M
1b0a 20dd GeForce GT 620M
1b0a 20df GeForce GT 620M
+ 1b0a 210e GeForce 820M
1b0a 2202 GeForce GT 720M
+ 1b0a 90d7 GeForce 820M
+ 1b0a 90dd GeForce 820M
1180 GK104 [GeForce GTX 680]
1043 83f1 GTX680-DC2-2GD5
3842 3682 GeForce GTX 680 Mac Edition
10de 101d GRID K200
118e GK104 [GeForce GTX 760 OEM]
118f GK104GL [Tesla K10]
+ 1191 GK104 [GeForce GTX 760 Rev. 2]
1193 GK104 [GeForce GTX 760 Ti OEM]
+ 1194 GK104GL [Tesla K8]
1195 GK104 [GeForce GTX 660 Rev. 2]
1198 GK104M [GeForce GTX 880M]
1199 GK104M [GeForce GTX 870M]
10de 101a GRID K240Q
10de 101b GRID K260Q
11b1 GK104GL [GRID K2 Tesla USM]
+ 11b4 GK104GL [Quadro K4200]
11b6 GK104GLM [Quadro K3100M]
11b7 GK104GLM [Quadro K4100M]
11b8 GK104GLM [Quadro K5100M]
1282 GK208 [GeForce GT 640 Rev. 2]
1284 GK208 [GeForce GT 630 Rev. 2]
1286 GK208 [GeForce GT 720]
+ 1287 GK208 [GeForce GT 730]
+ 1288 GK208 [GeForce GT 720]
1290 GK208M [GeForce GT 730M]
103c 2afa GeForce GT 730A
103c 2b04 GeForce GT 730A
1293 GK208M [GeForce GT 730M]
1294 GK208M [GeForce GT 740M]
1295 GK208M [GeForce 710M]
+ 103c 2b0d GeForce GT 710A
+ 103c 2b0f GeForce GT 710A
+ 103c 2b11 GeForce GT 710A
+ 103c 2b20 GeForce 810A
+ 103c 2b21 GeForce GT 810A
+ 103c 2b22 GeForce GT 810A
1296 GK208M [GeForce 825M]
1298 GK208M [GeForce GT 720M]
+ 1299 GK208M [GeForce 920M]
12a0 GK208
12b9 GK208GLM [Quadro K610M]
12ba GK208GLM [Quadro K510M]
1340 GM108M [GeForce 830M]
+ 103c 2b2b GeForce 830A
1341 GM108M [GeForce 840M]
17aa 3697 GeForce 840A
17aa 3699 GeForce 840A
17aa 369c GeForce 840A
+ 1346 GM108M [GeForce 930M]
+ 1347 GM108M [GeForce 940M]
1380 GM107 [GeForce GTX 750 Ti]
1381 GM107 [GeForce GTX 750]
1382 GM107 [GeForce GTX 745]
+ 1389 GM107GL [GRID M30]
1390 GM107M [GeForce 845M]
1391 GM107M [GeForce GTX 850M]
17aa 3697 GeForce GTX 850A
17aa a125 GeForce GTX 850A
1392 GM107M [GeForce GTX 860M]
1393 GM107M [GeForce 840M]
+ 1398 GM107M [GeForce 845M]
+ 139a GM107M [GeForce GTX 950M]
+ 139b GM107M [GeForce GTX 960M]
+ 139c GM107M [GeForce 940M]
+ 13b0 GM107GLM [N16P-Q3]
+ 13b3 GM107GLM [Quadro K2200M]
+ 13ba GM107GL [Quadro K2200]
+ 13bb GM107GL [Quadro K620]
+ 13bc GM107GL [Quadro K1200]
+ 13bd GM107GL [GRID M40]
+ 13c0 GM204 [GeForce GTX 980]
+ 1043 8504 GTX980-4GD5
+ 13c1 GM204
+ 13c2 GM204 [GeForce GTX 970]
+ 13c3 GM204
+ 13d7 GM204M [GeForce GTX 980M]
+ 13d8 GM204M [GeForce GTX 970M]
+ 13d9 GM204M [GeForce GTX 965M]
+ 1401 GM206 [GeForce GTX 960]
+ 17f0 GM200GL [Quadro M6000]
10df Emulex Corporation
0720 OneConnect NIC (Skyhawk)
17aa 1056 ThinkServer OCm14102-UX-L AnyFabric
8406 PCIcanx/PCIcan CAN interface [Kvaser AB]
8407 PCIcan II CAN interface (A1021, PCB-07, PCB-08) [Kvaser AB]
8851 S5933 on Innes Corp FM Radio Capture card
+ e004 X-Gene PCIe bridge
10e9 Alps Electric Co., Ltd.
10ea Integraphics
1680 IGA-1680
5249 RTS5249 PCI Express Card Reader
103c 1909 ZBook 15
5288 RTS5288 PCI Express Card Reader
+ 5289 RTL8411 PCI Express Card Reader
+ 1043 1457 K55A Laptop
8029 RTL-8029(AS)
10b8 2011 EZ-Card (SMC1208)
10ec 8029 RTL-8029(AS)
10ec 8129 RT8129 Fast Ethernet Adapter
11ec 8129 RTL8111/8168 PCIe Gigabit Ethernet (misconfigured)
8136 RTL8101E/RTL8102E PCI Express Fast Ethernet controller
- 103c 2ab1 Pavillion p6774
+ 103c 2ab1 Pavilion p6774
103c 30cc Pavilion dv6700
1179 ff64 RTL8102E PCI-E Fast Ethernet NIC
+ 17c0 1053 AzureWave AW-NE766 802.11B/G/N Mini PCIe Card Model RT2700E
8138 RT8139 (B/C) Cardbus Fast Ethernet Adapter
10ec 8138 RT8139 (B/C) Fast Ethernet Adapter
8139 RTL-8100/8101L/8139 PCI Fast Ethernet Adapter
1043 82c6 M3A78-EH Motherboard
1043 83a3 M4A785TD Motherboard
1043 8432 P8P67 and other motherboards
- 1043 8505 P8H77-I Motherboard
+ 1043 8505 P8 series motherboard
105b 0d7c D270S/D250S Motherboard
10ec 8168 RTL8111/8168 PCI Express Gigabit Ethernet controller
1458 e000 Motherboard
1102 0018 SB1040
000b EMU20k2 [X-Fi Titanium Series]
1102 0041 SB0880 [SoundBlaster X-Fi Titanium PCI-e]
+ 0012 SB Recon3D
4001 SB Audigy FireWire Port
1102 0010 SB Audigy FireWire Port
7002 SB Live! Game Port
0620 RocketRAID 620 2 Port SATA-III Controller
0622 RocketRAID 622 2 Port SATA-III Controller
0640 RocketRAID 640 4 Port SATA-III Controller
+ 0644 RocketRAID 644 4 Port SATA-III Controller (eSATA)
+ 0645 RocketRAID 644L 4 Port SATA-III Controller (eSATA)
1720 RocketRAID 1720 (2x SATA II RAID Controller)
1740 RocketRAID 1740
1742 RocketRAID 1742
1458 0691 VT82C691 Apollo Pro System Controller
0693 VT82C693 [Apollo Pro Plus]
0698 VT82C693A [Apollo Pro133 AGP]
+ 0709 VX11 Standard Host Bridge
+ 070a VX11 PCI Express Root Port
+ 070b VX11 PCI Express Root Port
+ 070c VX11 PCI Express Root Port
+ 070d VX11 PCI Express Root Port
+ 070e VX11 PCI Express Root Port
0926 VT82C926 [Amazon]
1000 VT82C570MV
1106 VT82C570MV
1458 5000 GA-7VAX Mainboard
# probably all K7VT2/4*/6
1849 3189 K7VT series Motherboards
+ 31b0 VX11 Standard Host Bridge
+ 31b1 VX11 Standard Host Bridge
+ 31b2 VX11 DRAM Controller
+ 31b3 VX11 Power Management Controller
+ 31b4 VX11 I/O APIC
+ 31b5 VX11 Scratch Device
+ 31b7 VX11 Standard Host Bridge
+ 31b8 VX11 PCI to PCI Bridge
3204 K8M800 Host Bridge
3205 VT8378 [KM400/A] Chipset Host Bridge
1458 5000 GA-7VM400M Motherboard
3410 VX900 DRAM Bus Control
19da a179 ZBOX nano VD01
3432 VL80x xHCI USB 3.0 Controller
+ 3456 VX11 Standard Host Bridge
+ 345b VX11 Miscellaneous Bus
+ 3a01 VX11 Graphics [Chrome 645/640]
4149 VIA VT6420 (ATA133) Controller
4204 K8M800 Host Bridge
4208 PT890 Host Bridge
8d01 PN133/PN133T [S3 Twister]
8d04 KM266/P4M266/P4M266A/P4N266 [S3 ProSavageDDR]
9001 VX900 Serial ATA Controller
+ 9082 Standard AHCI 1.0 SATA Controller
+ 9140 HDMI Audio Device
+ 9201 USB3.0 Controller
9530 Secure Digital Memory Card Controller
95d0 SDIO Host Controller
a208 PT890 PCI to PCI Bridge Controller
e238 K8T890 PCI to PCI Bridge Controller
e340 PT900 PCI to PCI Bridge Controller
e353 VX800/VX820 PCI Express Root Port
+ e410 VX900 PCI Express Physical Layer Electrical Sub-block
f208 PT890 PCI to PCI Bridge Controller
f238 K8T890 PCI to PCI Bridge Controller
f340 PT900 PCI to PCI Bridge Controller
806c PES16T4A/4T4G2 PCI Express Gen2 Switch
806e PES24T6G2 PCI Express Gen2 Switch
806f HIO524G2 PCI Express Gen2 Switch
+ 8088 PES32NT8BG2 PCI Express Switch
+ 1093 752f PXIe-8383mc Device
+ 1093 7543 PXIe-8383mc System Host
+ 1093 755c PXIe-8364
+ 1093 755d PXIe-8374
+ 1093 75ff PXIe-8383mc DMA
+ 1093 7600 PXIe-8383mc DMA
+ 1093 7602 PXIe-8384
111e Eldec
111f Precision Digital Images
4a47 Precision MX Video engine interface
13c2 1019 S2-3200
13c2 1102 Technotrend/Hauppauge DVB card rev2.1
153b 1155 Cinergy 1200 DVB-S
- 153b 1156 Terratec Cynergy 1200C
+ 153b 1156 Cinergy 1200 DVB-C
153b 1157 Cinergy 1200 DVB-T
+ 153b 1176 Cinergy 1200 DVB-C (MK3)
1894 0020 KNC One DVB-C V1.0
1894 0023 TVStation DVB-C plus
+# http://www.knc1.com/gb.htm
+ 1894 0054 TV-Station DVB-S
7160 SAA7160
1458 9009 E8000 DVB-T/Analog TV/FM tuner
1461 1455 AVerTV Hybrid Speedy PCI-E (H788)
0070 8993 WinTV HVR-2200
0070 89a0 WinTV HVR-2200
0070 89a1 WinTV HVR-2200
+ 0070 f123 WinTV HVR-2205
7231 SAA7231
5ace 8000 Behold TV H8
5ace 8001 Behold TV H8
1137 Cisco Systems Inc
0023 VIC 81 PCIe Upstream Port
0040 VIC PCIe Upstream Port
+ 1137 004f VIC 1280 Dual 40Gb Mezzanine
+ 1137 0084 VIC 1240 Dual 40Gb MLOM
+ 1137 0085 VIC 1225 Dual 10Gb SFP+ PCIe
+ 1137 00cd VIC 1285 Dual 40Gb QSFP+ PCIe
+ 1137 00ce VIC 1225T Dual 10GBaseT PCIe
+ 1137 012a VIC M4308 Dual 40Gb
+ 1137 012c VIC 1340 Dual 40Gb MLOM
+ 1137 012e VIC 1227 Dual 10Gb SFP+ PCIe
+ 1137 0137 VIC 1380 Dual 40Gb Mezzanine
0041 VIC PCIe Downstream Port
0042 VIC Management Controller
1137 0047 VIC P81E PCIe Management Controller
1137 0085 VIC 1225 PCIe Management Controller
1137 00cd VIC 1285 PCIe Management Controller
1137 00ce VIC 1225T PCIe Management Controller
+ 1137 012e VIC 1227 PCIe Management Controller
0043 VIC Ethernet NIC
1137 0047 VIC P81E PCIe Ethernet NIC
1137 0048 VIC M81KR Mezzanine Ethernet NIC
1137 0085 VIC 1225 PCIe Ethernet NIC
1137 00cd VIC 1285 PCIe Ethernet NIC
1137 00ce VIC 1225T PCIe Ethernet NIC
+ 1137 012a VIC M4308 Ethernet NIC
+ 1137 012c VIC 1340 MLOM Ethernet NIC
+ 1137 012e VIC 1227 PCIe Ethernet NIC
+ 1137 0137 VIC 1380 Mezzanine Ethernet NIC
0044 VIC Ethernet NIC Dynamic
1137 0047 VIC P81E PCIe Ethernet NIC Dynamic
1137 0048 VIC M81KR Mezzanine Ethernet NIC Dynamic
1137 0085 VIC 1225 PCIe Ethernet NIC Dynamic
1137 00cd VIC 1285 PCIe Ethernet NIC Dynamic
1137 00ce VIC 1225T PCIe Ethernet NIC Dynamic
+ 1137 012a VIC M4308 Ethernet NIC Dynamic
+ 1137 012c VIC 1340 MLOM Ethernet NIC Dynamic
+ 1137 012e VIC 1227 PCIe Ethernet NIC Dynamic
+ 1137 0137 VIC 1380 Mezzanine Ethernet NIC Dynamic
0045 VIC FCoE HBA
1137 0047 VIC P81E PCIe FCoE HBA
1137 0048 VIC M81KR Mezzanine FCoE HBA
1137 0085 VIC 1225 PCIe FCoE HBA
1137 00cd VIC 1285 PCIe FCoE HBA
1137 00ce VIC 1225T PCIe FCoE HBA
+ 1137 012a VIC M4308 FCoE HBA
+ 1137 012c VIC 1340 MLOM FCoE HBA
+ 1137 012e VIC 1227 PCIe FCoE HBA
+ 1137 0137 VIC 1380 Mezzanine FCoE HBA
+ 0046 VIC SCSI Controller
+ 1137 012a VIC M4308 SCSI Controller
004e VIC 82 PCIe Upstream Port
0071 VIC SR-IOV VF
+ 007a VIC 1300 PCIe Upstream Port
+ 1137 012a VIC M4308 Dual 40Gb
+ 1137 012c VIC 1340 Dual 40Gb MLOM
+ 1137 0137 VIC 1380 Dual 40Gb Mezzanine
00cf VIC Userspace NIC
+ 1137 004f VIC 1280 Mezzanine Userspace NIC
+ 1137 0084 VIC 1240 MLOM Userspace NIC
+ 1137 0085 VIC 1225 PCIe Userspace NIC
+ 1137 00cd VIC 1285 PCIe Userspace NIC
+ 1137 00ce VIC 1225T PCIe Userspace NIC
+ 1137 012a VIC M4308 Userspace NIC
+ 1137 012c VIC 1340 MLOM Userspace NIC
+ 1137 012e VIC 1227 PCIe Userspace NIC
+ 1137 0137 VIC 1380 Mezzanine Userspace NIC
1138 Ziatech Corporation
8905 8905 [STD 32 Bridge]
1139 Dynamic Pictures, Inc
117a A-Trend Technology
117b L G Electronics, Inc.
117c ATTO Technology, Inc.
- 002c SAS RAID Adapter
+ 002c ExpressSAS R380
+ 002d ExpressSAS R348
0030 Ultra320 SCSI Host Adapter
117c 8013 ExpressPCI UL4D
117c 8014 ExpressPCI UL4S
117c 8027 ExpressPCI UL5D
117c 802f ExpressPCI UL5D Low Profile
0033 SAS Adapter
+ 0041 ExpressSAS R30F
+ 8013 ExpressPCI UL4D
+ 8014 ExpressPCI UL4S
+ 8027 ExpressPCI UL5D
117d Becton & Dickinson
117e T/R Systems
117f Integrated Circuit Systems
4353 88E8039 PCI-E Fast Ethernet Controller
104d 902d VAIO VGN-NR120E
4354 88E8040 PCI-E Fast Ethernet Controller
+ 144d c06a R730 Laptop
144d c072 Notebook N150P
4355 88E8040T PCI-E Fast Ethernet Controller
1179 ff50 Satellite P305D-S8995E
16b8 434b Tempo SATA E4P
7810 MV78100 [Discovery Innovation] ARM SoC
7820 MV78200 [Discovery Innovation] ARM SoC
+ 7823 MV78230 [Armada XP] ARM SoC
+ 7846 88F6820 [Armada 385] ARM SoC
f003 GT-64010 Primary Image Piranha Image Generator
11ac Canon Information Systems Research Aust.
11ad Lite-On Communications Inc
0002 V300PSC
0292 V292PBC [Am29030/40 Bridge]
0960 V96xPBC
+ 880a Deltacast Delta-HD-22
c960 V96DPC
11b1 Apricot Computers
11b2 Eastman Kodak
1216 Purup Prepress A/S
1217 O2 Micro, Inc.
00f7 Firewire (IEEE 1394)
+ 1071 8209 Medion MIM 2240 Notebook PC [MD98100]
1179 ff50 Satellite P305D-S8995E
10f7 1394 OHCI Compliant Host Controller
11f7 OZ600 1394a-2000 Controller
1025 0035 TravelMate 660
7114 OZ711M1/MC1 4-in-1 MemoryCardBus Controller
7120 Integrated MMC/SD Controller
+ 1071 8209 Medion MIM 2240 Notebook PC [MD98100]
1179 ff50 Satellite P305D-S8995E
7130 Integrated MS/xD Controller
+ 1071 8209 Medion MIM 2240 Notebook PC [MD98100]
1179 ff50 Satellite P305D-S8995E
7134 OZ711MP1/MS1 MemoryCardBus Controller
7135 Cardbus bridge
7233 OZ711MP3/MS3 4-in-1 MemoryCardBus Controller
8120 Integrated MMC/SD Controller
8130 Integrated MS/MSPRO/xD Controller
- 8320 OZ600 MMC/SD Controller
+ 8220 OZ600FJ1/OZ900FJ1 SD/MMC Card Reader Controller
+ 8221 OZ600FJ0/OZ900FJ0/OZ600FJS SD/MMC Card Reader Controller
+ 8320 OZ600RJ1/OZ900RJ1 SD/MMC Card Reader Controller
1028 04a3 Precision M4600
- 8321 Integrated MMC/SD controller
+ 8321 OZ600RJ0/OZ900RJ0/OZ600RJS SD/MMC Card Reader Controller
8330 OZ600 MS/xD Controller
1028 04a3 Precision M4600
8331 O2 Flash Memory Card
0204 GPS170PCI GPS Receiver
0205 GPS170PEX GPS Receiver (PCI Express)
0206 GPS180PEX GPS Receiver (PCI Express)
+ 0207 GLN180PEX GPS/GLONASS receiver (PCI Express)
+ 0208 GPS180AMC GPS Receiver (PCI Express / MicroTCA / AdvancedMC)
0301 TCR510PCI IRIG Timecode Reader
0302 TCR167PCI IRIG Timecode Reader
0303 TCR511PCI IRIG Timecode Reader
1043 838e Virtuoso 66 (Xonar DS)
1043 8428 Virtuoso 100 (Xonar Xense)
1043 8467 CMI8786 (Xonar DG)
+ 1043 85f4 Virtuoso 100 (Xonar Essence STX II)
13f6 8782 PCI 2.0 HD Audio
13f6 ffff CMI8787-HG2PCI
14c3 1710 HiFier Fantasia
4081 T440F-4081 T440-FCoE Unified Wire Ethernet Controller
4082 T420-4082 Unified Wire Ethernet Controller
4083 T420X-4083 Unified Wire Ethernet Controller
- 4084 T420-4084 Unified Wire Ethernet Controller
+ 4084 T440-4084 Unified Wire Ethernet Controller
4085 T420-4085 SFP+ Unified Wire Ethernet Controller
4086 T440-4086 10Gbase-T Unified Wire Ethernet Controller
4087 T440T-4087 Unified Wire Ethernet Controller
4481 T440F-4081 T440-FCoE Unified Wire Ethernet Controller
4482 T420-4082 Unified Wire Ethernet Controller
4483 T420X-4083 Unified Wire Ethernet Controller
- 4484 T420-4084 Unified Wire Ethernet Controller
+ 4484 T440-4084 Unified Wire Ethernet Controller
4485 T420-4085 SFP+ Unified Wire Ethernet Controller
4486 T440-4086 10Gbase-T Unified Wire Ethernet Controller
4487 T440T-4087 Unified Wire Ethernet Controller
4581 T440F-4081 T440-FCoE Unified Wire Storage Controller
4582 T420-4082 Unified Wire Storage Controller
4583 T420X-4083 Unified Wire Storage Controller
- 4584 T420-4084 Unified Wire Storage Controller
+ 4584 T440-4084 Unified Wire Storage Controller
4585 T420-4085 SFP+ Unified Wire Storage Controller
4586 T440-4086 10Gbase-T Unified Wire Storage Controller
4587 T440T-4087 Unified Wire Storage Controller
4681 T440F-4081 T440-FCoE Unified Wire Storage Controller
4682 T420-4082 Unified Wire Storage Controller
4683 T420X-4083 Unified Wire Storage Controller
- 4684 T420-4084 Unified Wire Storage Controller
+ 4684 T440-4084 Unified Wire Storage Controller
4685 T420-4085 SFP+ Unified Wire Storage Controller
4686 T440-4086 10Gbase-T Unified Wire Storage Controller
4687 T440T-4087 Unified Wire Storage Controller
4781 T440F-4081 T440-FCoE Unified Wire Ethernet Controller
4782 T420-4082 Unified Wire Ethernet Controller
4783 T420X-4083 Unified Wire Ethernet Controller
- 4784 T420-4084 Unified Wire Ethernet Controller
+ 4784 T440-4084 Unified Wire Ethernet Controller
4785 T420-4085 SFP+ Unified Wire Ethernet Controller
4786 T440-4086 10Gbase-T Unified Wire Ethernet Controller
4787 T440T-4087 Unified Wire Ethernet Controller
4788 T440-4088 Unified Wire Ethernet Controller
- 4801 T420-CR Unified Wire Ethernet Controller
- 4802 T422-CR Unified Wire Ethernet Controller
- 4803 T440-CR Unified Wire Ethernet Controller
- 4804 T420-BCH Unified Wire Ethernet Controller
- 4805 T440-BCH Unified Wire Ethernet Controller
- 4806 T440-CH Unified Wire Ethernet Controller
- 4807 T420-SO Unified Wire Ethernet Controller
- 4808 T420-CX Unified Wire Ethernet Controller
- 4809 T420-BT Unified Wire Ethernet Controller
- 480a T404-BT Unified Wire Ethernet Controller
- 480b B420-SR Unified Wire Ethernet Controller
- 480c B404-BT Unified Wire Ethernet Controller
- 480d T480 Unified Wire Ethernet Controller
- 480e T440-LP-CR Unified Wire Ethernet Controller
- 480f T440 [Amsterdam] Unified Wire Ethernet Controller
- 4880 T480-4080 T480 Unified Wire Ethernet Controller
- 4881 T440F-4081 T440-FCoE Unified Wire Ethernet Controller
- 4882 T420-4082 Unified Wire Ethernet Controller
- 4883 T420X-4083 Unified Wire Ethernet Controller
- 4884 T420-4084 Unified Wire Ethernet Controller
- 4885 T420-4085 SFP+ Unified Wire Ethernet Controller
- 4886 T440-4086 10Gbase-T Unified Wire Ethernet Controller
- 4887 T440T-4087 Unified Wire Ethernet Controller
- 4888 T440-4088 Unified Wire Ethernet Controller
+ 4801 T420-CR Unified Wire Ethernet Controller [VF]
+ 4802 T422-CR Unified Wire Ethernet Controller [VF]
+ 4803 T440-CR Unified Wire Ethernet Controller [VF]
+ 4804 T420-BCH Unified Wire Ethernet Controller [VF]
+ 4805 T440-BCH Unified Wire Ethernet Controller [VF]
+ 4806 T440-CH Unified Wire Ethernet Controller [VF]
+ 4807 T420-SO Unified Wire Ethernet Controller [VF]
+ 4808 T420-CX Unified Wire Ethernet Controller [VF]
+ 4809 T420-BT Unified Wire Ethernet Controller [VF]
+ 480a T404-BT Unified Wire Ethernet Controller [VF]
+ 480b B420-SR Unified Wire Ethernet Controller [VF]
+ 480c B404-BT Unified Wire Ethernet Controller [VF]
+ 480d T480 Unified Wire Ethernet Controller [VF]
+ 480e T440-LP-CR Unified Wire Ethernet Controller [VF]
+ 480f T440 [Amsterdam] Unified Wire Ethernet Controller [VF]
+ 4880 T480-4080 T480 Unified Wire Ethernet Controller [VF]
+ 4881 T440F-4081 T440-FCoE Unified Wire Ethernet Controller [VF]
+ 4882 T420-4082 Unified Wire Ethernet Controller [VF]
+ 4883 T420X-4083 Unified Wire Ethernet Controller [VF]
+ 4884 T440-4084 Unified Wire Ethernet Controller [VF]
+ 4885 T420-4085 SFP+ Unified Wire Ethernet Controller [VF]
+ 4886 T440-4086 10Gbase-T Unified Wire Ethernet Controller [VF]
+ 4887 T440T-4087 Unified Wire Ethernet Controller [VF]
+ 4888 T440-4088 Unified Wire Ethernet Controller [VF]
5001 T520-CR Unified Wire Ethernet Controller
5002 T522-CR Unified Wire Ethernet Controller
5003 T540-CR Unified Wire Ethernet Controller
5010 T580-LP-CR Unified Wire Ethernet Controller
5011 T520-LL-CR Unified Wire Ethernet Controller
5012 T560-CR Unified Wire Ethernet Controller
- 5013 T580-CR Unified Wire Ethernet Controller
+ 5013 T580-CHR Unified Wire Ethernet Controller
5014 T580-LP-SO-CR Unified Wire Ethernet Controller
5015 T502-BT Unified Wire Ethernet Controller
5080 T540-5080 Unified Wire Ethernet Controller
5081 T540-5081 Unified Wire Ethernet Controller
+ 5082 T504-5082 Unified Wire Ethernet Controller
5083 T540-5083 Unified Wire Ethernet Controller
5084 T580-5084 Unified Wire Ethernet Controller
5085 T580-5085 Unified Wire Ethernet Controller
+ 5086 T580-5086 Unified Wire Ethernet Controller
+ 5087 T580-5087 Unified Wire Ethernet Controller
+ 5088 T570-5088 Unified Wire Ethernet Controller
+ 5089 T520-5089 Unified Wire Ethernet Controller
5401 T520-CR Unified Wire Ethernet Controller
5402 T522-CR Unified Wire Ethernet Controller
5403 T540-CR Unified Wire Ethernet Controller
5410 T580-LP-CR Unified Wire Ethernet Controller
5411 T520-LL-CR Unified Wire Ethernet Controller
5412 T560-CR Unified Wire Ethernet Controller
- 5413 T580-CR Unified Wire Ethernet Controller
+ 5413 T580-CHR Unified Wire Ethernet Controller
5414 T580-LP-SO-CR Unified Wire Ethernet Controller
5415 T502-BT Unified Wire Ethernet Controller
5480 T540-5080 Unified Wire Ethernet Controller
5481 T540-5081 Unified Wire Ethernet Controller
+ 5482 T504-5082 Unified Wire Ethernet Controller
5483 T540-5083 Unified Wire Ethernet Controller
5484 T580-5084 Unified Wire Ethernet Controller
5485 T580-5085 Unified Wire Ethernet Controller
+ 5486 T580-5086 Unified Wire Ethernet Controller
+ 5487 T580-5087 Unified Wire Ethernet Controller
+ 5488 T570-5088 Unified Wire Ethernet Controller
+ 5489 T520-5089 Unified Wire Ethernet Controller
5501 T520-CR Unified Wire Storage Controller
5502 T522-CR Unified Wire Storage Controller
5503 T540-CR Unified Wire Storage Controller
5510 T580-LP-CR Unified Wire Storage Controller
5511 T520-LL-CR Unified Wire Storage Controller
5512 T560-CR Unified Wire Storage Controller
- 5513 T580-CR Unified Wire Storage Controller
+ 5513 T580-CHR Unified Wire Storage Controller
5514 T580-LP-SO-CR Unified Wire Storage Controller
5515 T502-BT Unified Wire Storage Controller
5580 T540-5080 Unified Wire Storage Controller
5581 T540-5081 Unified Wire Storage Controller
+ 5582 T504-5082 Unified Wire Storage Controller
5583 T540-5083 Unified Wire Storage Controller
5584 T580-5084 Unified Wire Storage Controller
5585 T580-5085 Unified Wire Storage Controller
+ 5586 T580-5086 Unified Wire Storage Controller
+ 5587 T580-5087 Unified Wire Storage Controller
+ 5588 T570-5088 Unified Wire Storage Controller
+ 5589 T520-5089 Unified Wire Storage Controller
5601 T520-CR Unified Wire Storage Controller
5602 T522-CR Unified Wire Storage Controller
5603 T540-CR Unified Wire Storage Controller
5610 T580-LP-CR Unified Wire Storage Controller
5611 T520-LL-CR Unified Wire Storage Controller
5612 T560-CR Unified Wire Storage Controller
- 5613 T580-CR Unified Wire Storage Controller
+ 5613 T580-CHR Unified Wire Storage Controller
5614 T580-LP-SO-CR Unified Wire Storage Controller
5615 T502-BT Unified Wire Storage Controller
5680 T540-5080 Unified Wire Storage Controller
5681 T540-5081 Unified Wire Storage Controller
+ 5682 T504-5082 Unified Wire Storage Controller
5683 T540-5083 Unified Wire Storage Controller
5684 T580-5084 Unified Wire Storage Controller
5685 T580-5085 Unified Wire Storage Controller
+ 5686 T580-5086 Unified Wire Storage Controller
+ 5687 T580-5087 Unified Wire Storage Controller
+ 5688 T570-5088 Unified Wire Storage Controller
+ 5689 T520-5089 Unified Wire Storage Controller
5701 T520-CR Unified Wire Ethernet Controller
5702 T522-CR Unified Wire Ethernet Controller
5703 T540-CR Unified Wire Ethernet Controller
5715 T502-BT Unified Wire Ethernet Controller
5780 T540-5080 Unified Wire Ethernet Controller
5781 T540-5081 Unified Wire Ethernet Controller
+ 5782 T504-5082 Unified Wire Ethernet Controller
5783 T540-5083 Unified Wire Ethernet Controller
5784 T580-5084 Unified Wire Ethernet Controller
5785 T580-5085 Unified Wire Ethernet Controller
- 5801 T520-CR Unified Wire Ethernet Controller
- 5802 T522-CR Unified Wire Ethernet Controller
- 5803 T540-CR Unified Wire Ethernet Controller
- 5804 T520-BCH Unified Wire Ethernet Controller
- 5805 T540-BCH Unified Wire Ethernet Controller
- 5806 T540-CH Unified Wire Ethernet Controller
- 5807 T520-SO Unified Wire Ethernet Controller
- 5808 T520-CX Unified Wire Ethernet Controller
- 5809 T520-BT Unified Wire Ethernet Controller
- 580a T504-BT Unified Wire Ethernet Controller
- 580b B520-SR Unified Wire Ethernet Controller
- 580c B504-BT Unified Wire Ethernet Controller
- 580d T580-CR Unified Wire Ethernet Controller
- 580e T540-LP-CR Unified Wire Ethernet Controller
- 580f T540 [Amsterdam] Unified Wire Ethernet Controller
- 5810 T580-LP-CR Unified Wire Ethernet Controller
- 5811 T520-LL-CR Unified Wire Ethernet Controller
- 5812 T560-CR Unified Wire Ethernet Controller
- 5813 T580-CR Unified Wire Ethernet Controller
- 5814 T580-LP-SO-CR Unified Wire Ethernet Controller
- 5815 T502-BT Unified Wire Ethernet Controller
- 5880 T540-5080 Unified Wire Ethernet Controller
- 5881 T540-5081 Unified Wire Ethernet Controller
- 5883 T540-5083 Unified Wire Ethernet Controller
- 5884 T580-5084 Unified Wire Ethernet Controller
- 5885 T580-5085 Unified Wire Ethernet Controller
+ 5786 T580-5086 Unified Wire Ethernet Controller
+ 5787 T580-5087 Unified Wire Ethernet Controller
+ 5788 T570-5088 Unified Wire Ethernet Controller
+ 5789 T520-5089 Unified Wire Ethernet Controller
+ 5801 T520-CR Unified Wire Ethernet Controller [VF]
+ 5802 T522-CR Unified Wire Ethernet Controller [VF]
+ 5803 T540-CR Unified Wire Ethernet Controller [VF]
+ 5804 T520-BCH Unified Wire Ethernet Controller [VF]
+ 5805 T540-BCH Unified Wire Ethernet Controller [VF]
+ 5806 T540-CH Unified Wire Ethernet Controller [VF]
+ 5807 T520-SO Unified Wire Ethernet Controller [VF]
+ 5808 T520-CX Unified Wire Ethernet Controller [VF]
+ 5809 T520-BT Unified Wire Ethernet Controller [VF]
+ 580a T504-BT Unified Wire Ethernet Controller [VF]
+ 580b B520-SR Unified Wire Ethernet Controller [VF]
+ 580c B504-BT Unified Wire Ethernet Controller [VF]
+ 580d T580-CR Unified Wire Ethernet Controller [VF]
+ 580e T540-LP-CR Unified Wire Ethernet Controller [VF]
+ 580f T540 [Amsterdam] Unified Wire Ethernet Controller [VF]
+ 5810 T580-LP-CR Unified Wire Ethernet Controller [VF]
+ 5811 T520-LL-CR Unified Wire Ethernet Controller [VF]
+ 5812 T560-CR Unified Wire Ethernet Controller [VF]
+ 5813 T580-CHR Unified Wire Ethernet Controller [VF]
+ 5814 T580-LP-SO-CR Unified Wire Ethernet Controller [VF]
+ 5815 T502-BT Unified Wire Ethernet Controller [VF]
+ 5880 T540-5080 Unified Wire Ethernet Controller [VF]
+ 5881 T540-5081 Unified Wire Ethernet Controller [VF]
+ 5882 T504-5082 Unified Wire Ethernet Controller [VF]
+ 5883 T540-5083 Unified Wire Ethernet Controller [VF]
+ 5884 T580-5084 Unified Wire Ethernet Controller [VF]
+ 5885 T580-5085 Unified Wire Ethernet Controller [VF]
+ 5886 T580-5086 Unified Wire Ethernet Controller [VF]
+ 5887 T580-5087 Unified Wire Ethernet Controller [VF]
+ 5888 T570-5088 Unified Wire Ethernet Controller [VF]
+ 5889 T520-5089 Unified Wire Ethernet Controller [VF]
a000 PE10K Unified Wire Ethernet Controller
1426 Storage Technology Corp.
1427 Better On-Line Solutions
1003 HCF 56k Data/Fax Modem
148e OSI Plus Corporation
148f Plant Equipment, Inc.
+ 5370 Dexlink AUWL15I1
1490 Stone Microsystems PTY Ltd.
1491 ZEAL Corporation
1492 Time Logic Corporation
14c2 DTK Computer
14c3 MEDIATEK Corp.
7630 MT7630e 802.11bgn Wireless Network Adapter
+# MT7612E too?
+ 7662 MT7662E 802.11ac PCI Express Wireless Network Adapter
14c4 IWASAKI Information Systems Co Ltd
14c5 Automation Products AB
14c6 Data Race Inc
080f Sentry5 DDR/SDR RAM Controller
0811 Sentry5 External Interface Core
0816 BCM3302 Sentry5 MIPS32 CPU
+ 1570 720p FaceTime HD Camera
1600 NetXtreme BCM5752 Gigabit Ethernet PCI Express
1028 01c1 Precision 490
1028 01c2 Latitude D620
1655 NetXtreme BCM5717 Gigabit Ethernet PCIe
1656 NetXtreme BCM5718 Gigabit Ethernet PCIe
1657 NetXtreme BCM5719 Gigabit Ethernet PCIe
+ 103c 169d Ethernet 1Gb 4-port 331FLR Adapter
1659 NetXtreme BCM5721 Gigabit Ethernet PCI Express
1014 02c6 eServer xSeries server mainboard
1028 01e6 PowerEdge 860
16a2 BCM57840 NetXtreme II 10/20-Gigabit Ethernet
103c 1916 HP FlexFabric 20Gb 2-port 630FLB Adapter
103c 1917 HP FlexFabric 20Gb 2-port 630M Adapter
+ 16a3 NetXtreme BCM57786 Gigabit Ethernet PCIe
16a4 BCM57840 NetXtreme II Ethernet Multi Function
103c 1916 HP NPAR 20Gb 2-port 630FLB Adapter
103c 1917 HP NPAR 20Gb 2-port 630M Adapter
4333 Serial (EDGE/GPRS modem part of Option GT Combo Edge)
4344 EDGE/GPRS data and 802.11b/g combo cardbus [GC89]
4350 BCM43222 Wireless Network Adapter
+ 4351 BCM43222 802.11abgn Wireless Network Adapter
4353 BCM43224 802.11a/b/g/n
1028 000e Wireless 1520 Half-size Mini PCIe Card
103c 1509 WMIB-275N Half-size Mini PCIe Card
4359 BCM43228 802.11a/b/g/n
1028 0011 Wireless 1530 Half-size Mini PCIe Card
103c 182c BCM943228HM4L 802.11a/b/g/n 2x2 Wi-Fi Adapter
+ 4360 BCM4360 802.11ac Wireless Network Adapter
4365 BCM43142 802.11b/g/n
1028 0016 Wireless 1704 802.11n + BT 4.0
43a0 BCM4360 802.11ac Wireless Network Adapter
+ 43a1 BCM4360 802.11ac Wireless Network Adapter
+ 43a2 BCM4360 802.11ac Wireless Network Adapter
+ 43a9 BCM43217 802.11b/g/n
+ 43aa BCM43131 802.11b/g/n
43b1 BCM4352 802.11ac Wireless Network Adapter
+ 43ba BCM43602 802.11ac Wireless LAN SoC
+ 43bb BCM43602 802.11ac Wireless LAN SoC
+ 43bc BCM43602 802.11ac Wireless LAN SoC
+ 43d3 BCM43567 802.11ac Wireless Network Adapter
+ 43d9 BCM43570 802.11ac Wireless Network Adapter
+ 43df BCM4354 802.11ac Wireless LAN SoC
+ 43ec BCM4356 802.11ac Wireless Network Adapter
4401 BCM4401 100Base-T
1025 0035 TravelMate 660
103c 08b0 tc1100 tablet
1815 HCF 56k Modem
0e11 0022 Grizzly
0e11 0042 Yogi
+# Integrated in CX86111/CX86113 processors
+ 1830 CX861xx Integrated Host Bridge
2003 HSF 56k Data/Fax Modem
2004 HSF 56k Data/Fax/Voice Modem
2005 HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem
0070 9600 WinTV 88x Video
0070 9802 WinTV-HVR1100 DVB-T/Hybrid (Low Profile)
1002 00f8 ATI TV Wonder Pro
+ 1002 00f9 ATI TV Wonder
1002 a101 HDTV Wonder
1043 4823 ASUS PVR-416
107d 6611 Winfast TV 2000XP Expert
18ac db00 DVICO FusionHDTV DVB-T1
5654 2388 GoTView PCI Hybrid Audio Capture Device
8852 CX23885 PCI Video and Audio Decoder
- 0070 8010 Hauppauge WinTV HVR-1400 ExpressCard
+ 0070 8010 WinTV HVR-1400 ExpressCard
+ 0070 f038 WinTV HVR-5525
107d 6f22 WinFast PxTV1200
+ 13c2 3013 TT-budget CT2-4500 CI
1461 c039 AVerTV Hybrid Express (A577)
153b 117e Cinergy T PCIe Dual
18ac db78 FusionHDTV DVB-T Dual Express
+ 4254 0950 S950
+ 4254 0952 S952
+ 4254 0982 T982
+ 4254 9580 T9580
+ 4254 980c T980C
8880 CX23887/8 PCIe Broadcast Audio and Video Decoder with 3D Comb
0070 c108 WinTV-HVR-4400-HD model 1278
5654 2389 GoTView X5 DVD Hybrid PCI-E
1541 MACHONE Communications
1542 Concurrent Computer Corporation
9260 RCIM-II Real-Time Clock & Interrupt Module
+ 9271 RCIM-III Real-Time Clock & Interrupt Module (PCIe)
+ 9272 Pulse Width Modulator Card
+ 9277 5 Volt Delta Sigma Converter Card
+ 9278 10 Volt Delta Sigma Converter Card
+ 9287 Analog Output Card
1543 SILICON Laboratories
3052 Intel 537 [Winmodem]
4c22 Si3036 MC'97 DAA
0740 Virtual Machine Communication Interface
0770 USB2 EHCI Controller
0774 USB1.1 UHCI Controller
- 0778 USB3 xHCI Controller
+ 0778 USB3 xHCI 0.96 Controller
+ 0779 USB3 xHCI 1.0 Controller
0790 PCI bridge
07a0 PCI Express Root Port
07b0 VMXNET3 Ethernet Controller
0191 MT25408 [ConnectX IB Flash Recovery]
01f6 MT27500 Family [ConnectX-3 Flash Recovery]
01ff MT27600 Family [Connect-IB Flash Recovery]
+ 0209 MT27700 Family [ConnectX-4 Flash Recovery]
1002 MT25400 Family [ConnectX-2 Virtual Function]
1003 MT27500 Family [ConnectX-3]
- 1004 MT27500 Family [ConnectX-3 Virtual Function]
+ 103c 1777 InfiniBand FDR/EN 10/40Gb Dual Port 544FLR-QSFP Adapter (Rev Cx)
+ 103c 17c9 Infiniband QDR/Ethernet 10Gb 2-port 544i Adapter
+ 103c 18d6 InfiniBand FDR/EN 10/40Gb Dual Port 544QSFP Adapter
+ 1004 MT27500/MT27520 Family [ConnectX-3/ConnectX-3 Pro Virtual Function]
1005 MT27510 Family
1006 MT27511 Family
1007 MT27520 Family [ConnectX-3 Pro]
- 1008 MT27520 Family [ConnectX-3 Pro Virtual Function]
1009 MT27530 Family
100a MT27531 Family
100b MT27540 Family
1010 MT27561 Family
1011 MT27600 [Connect-IB]
1012 MT27600 Family [Connect-IB Virtual Function]
- 1013 MT27620 Family
- 1014 MT27621 Family
+ 1013 MT27700 Family [ConnectX-4]
+ 1014 MT27700 Family [ConnectX-4 Virtual Function]
1015 MT27630 Family
1016 MT27631 Family
1017 MT27640 Family
103c 3040 U98Z062.12 802.11bgn Wireless Half-size Mini PCIe Card
105b e017 T77H126.00 802.11bgn Wireless Half-size Mini PCIe Card
105b e023 T77H121.04 802.11bgn Wireless Half-size Mini PCIe Card
+ 105b e025 T77H121.05 802.11bgn Wireless Half-size Mini PCIe Card
1113 e811 WN7811A (Toshiba PA3722U-1MPC) 802.11bgn Wireless Half-size Mini PCIe Card
185f 30af DNXA-95 802.11bgn Wireless Half-size Mini PCIe Card
1931 0023 Option GTM67x PCIe WiFi Adapter
002c AR2427 802.11bg Wireless Network Adapter (PCI-Express)
002d AR9227 Wireless Network Adapter
002e AR9287 Wireless Network Adapter (PCI-Express)
+ 105b e034 T77H167.00
0030 AR93xx Wireless Network Adapter
103c 1627 AR9380/HB112 802.11abgn 3×3 Wi-Fi Adapter
106b 009a AirPort Extreme
1a56 2001 Killer Wireless-N 1103 Half-size Mini PCIe Card [AR9380]
0032 AR9485 Wireless Network Adapter
103c 1838 AR9485/HB125 802.11bgn 1×1 Wi-Fi Adapter
+ 105b e044 Unex DHXA-225
0033 AR9580 Wireless Network Adapter
0034 AR9462 Wireless Network Adapter
1a56 2003 Killer Wireless-N 1202 Half-size Mini PCIe Card
# Also used as Gigabyte GC-WB150 on a PCIe-to-mini-PCIe converter
1a3b 2100 AW-NB100H 802.11n Wireless Mini PCIe Card
003c QCA988x 802.11ac Wireless Network Adapter
+# all QCA6174 devices?
+ 003e Killer N1525 Wireless-AC
0207 AR5210 Wireless Network Adapter [AR5000 802.11a]
1014 AR5212 802.11abg NIC
1014 058a ThinkPad 11a/b/g Wireless LAN Mini Express Adapter (AR5BXB6)
16b4 Aspex Semiconductor Ltd
16b8 Sonnet Technologies, Inc.
16be Creatix Polymedia GmbH
+16c3 Synopsys, Inc.
16c6 Micrel-Kendin
8695 Centaur KS8695 ARM processor
8842 KSZ8842-PMQL 2-Port Ethernet Switch
6302 XMC Module with user-configurable Virtex-6 FPGA, 365k logic cells, SFP front I/O
6303 XMC Module with user-configurable Virtex-6 FPGA, 240k logic cells, no front I/O
6304 XMC Module with user-configurable Virtex-6 FPGA, 365k logic cells, no front I/O
+ 7000 XMC-7K325F: User-configurable Kintex-7 FPGA, 325k logic cells plus SFP front I/O
+ 7001 XMC-7K410F: User-configurable Kintex-7 FPGA, 410k logic cells plus SFP front I/O
+ 7002 XMC-7K325AX: User-Configurable Kintex-7 FPGA, 325k logic cells with AXM Plug-In I/O
+ 7003 XMC-7K410AX: User-Configurable Kintex-7 FPGA, 410k logic cells with AXM Plug-In I/O
+ 7004 XMC-7K325CC: User-Configurable Kintex-7 FPGA, 325k logic cells, conduction-cooled
+ 7005 XMC-7K410CC: User-Configurable Kintex-7 FPGA, 410k logic cells, conduction-cooled
16da Advantech Co., Ltd.
0011 INES GPIB-PCI
16df PIKA Technologies Inc.
ab06 USR997901A 10/100 Cardbus NIC
16ed Sycron N. V.
1001 UMIO communication card
+16f2 ETAS GmbH
+ 0200 I/O board
+ 16f2 0010 ES53xx I/O board
16f3 Jetway Information Co., Ltd.
16f4 Vweb Corp
8000 VW2010
1760 TEDIA spol. s r. o.
0101 PCD-7004 Digital Bi-Directional Ports PCI Card
0102 PCD-7104 Digital Input & Output PCI Card
+ 0303 PCD-7006C Digital Input & Output PCI Card
1771 InnoVISION Multimedia Ltd.
# nee SBS Technologies
1775 GE Intelligent Platforms
-177d Cavium Networks
+177d Cavium, Inc.
0001 Nitrox XL N1
0003 Nitrox XL N1 Lite
0004 Octeon (and older) FIPS
0094 Octeon Fusion CNF71XX Cell processor
0095 Octeon III CN78XX Network Processor
0096 Octeon III CN70XX Network Processor
+ a001 THUNDERX MRML Bridge
+ a002 THUNDERX PCC Bridge
+ 177d a102 CN88XX PCC Bridge
+ a008 THUNDERX SMMU
+ 177d a108 CN88XX SMMU
+ a009 THUNDERX Generic Interrupt Controller
+ a00a THUNDERX GPIO Controller
+ a00b THUNDERX MPI / SPI Controller
+ a00c THUNDERX MIO-PTP Controller
+ a00d THUNDERX MIX Network Controller
+ a00e THUNDERX Reset Controller
+ a00f THUNDERX UART Controller
+ a010 THUNDERX eMMC/SD Controller
+ a011 THUNDERX MIO-BOOT Controller
+ a012 THUNDERX TWSI / I2C Controller
+ a013 THUNDERX CCPI (Multi-node connect)
+ a014 THUNDERX Voltage Regulator Module
+ a015 THUNDERX PCIe Switch Logic Interface
+ a016 THUNDERX Key Memory
+ a017 THUNDERX GTI (Global System Timers)
+ a018 THUNDERX Random Number Generator
+ a019 THUNDERX DFA
+ a01a THUNDERX Zip Coprocessor
+ a01b THUNDERX xHCI USB Controller
+ a01c THUNDERX AHCI SATA Controller
+ 177d a11c CN88XX AHCI SATA Controller
+ a01d THUNDERX RAID Coprocessor
+ a01e THUNDERX Network Interface Controller
+ a01f THUNDERX Traffic Network Switch
+ a020 THUNDERX PEM (PCI Express Interface)
+ a021 THUNDERX L2C (Level-2 Cache Controller)
+ a022 THUNDERX LMC (DRAM Controller)
+ a023 THUNDERX OCLA (On-Chip Logic Analyzer)
+ a024 THUNDERX OSM
+ a025 THUNDERX GSER (General Serializer/Deserializer)
+ a026 THUNDERX BGX (Common Ethernet Interface)
+ a027 THUNDERX IOBN
+ a029 THUNDERX NCSI (Network Controller Sideband Interface)
+ a02a THUNDERX SGP
+ a02b THUNDERX SMI / MDIO Controller
+ a02c THUNDERX DAP (Debug Access Port)
+ a02d THUNDERX PCIERC (PCIe Root Complex)
+ a02e THUNDERX L2C-TAD
+ a02f THUNDERX L2C-CBC
+ a030 THUNDERX L2C-MCI
+ a031 THUNDERX MIO-FUS (Fuse Access Controller)
+ a032 THUNDERX FUSF (Fuse Controller)
1787 Hightech Information System Ltd.
1789 Ennyah Technologies Corp.
# also used by Struck Innovative Systeme for joint developments
0010 PCIe Counter Timer
0011 SIS1100-e single link
0012 SIS1100-e quad link
+ 0015 SIS8100 [Gigabit link, MicroTCA]
1797 Techwell Inc.
6801 TW6802 multimedia video card
6802 TW6802 multimedia other device
1468 0305 T60N871 802.11g Mini PCI Wireless Adapter
1737 0029 WPC54G v4 802.11g Wireless-G Notebook Adapter
17ff Benq Corporation
+1800 Qualcore Logic Inc.
+ 1100 Nanospeed Trading Gateway
1803 ProdaSafe GmbH
1805 Euresys S.A.
1809 Lumanate, Inc.
0701 RT2760 Wireless 802.11n 1T/2R
1737 0074 WMP110 v2 802.11n RangePlus Wireless PCI Adapter
0781 RT2790 Wireless 802.11n 1T/2R PCIe
+ 1814 2790 RT2790 Wireless 802.11n 1T/2R PCIe
3060 RT3060 Wireless 802.11n 1T/1R
1186 3c04 DWA-525 Wireless N 150 Desktop Adapter (rev.A1)
3062 RT3062 Wireless 802.11n 2T/2R
0612 AD612 Data Acquisition Device
0614 MF614 Multifunction I/O Card
0622 AD622 Data Acquisition Device
- 0624 MF624 Multifunction I/O Card
+ 0624 MF624 Multifunction I/O PCI Card
0625 MF625 3-phase Motor Driver
+ 0634 MF634 Multifunction I/O PCIe Card
186f WiNRADiO Communications
1876 L-3 Communications
a101 VigraWATCH PCI
0115 NT20E2-PTP Network Adapter 2x10Gb
0125 NT4E2-4-PTP Network Adapter 4x1Gb
0135 NT20E2-PTP Network Adapter 2x10Gb
+ 0145 NT40E3-4-PTP Network Adapter 4x10Gb
+ 0155 NT100E3-1-PTP Network Adapter 1x100Gb
18f6 NextIO
1000 [Nexsis] Switch Virtual P2P PCIe Bridge
1001 [Texsis] Switch Virtual P2P PCIe Bridge
1924 800b SFN7x42Q-R1 Flareon Ultra 7000 Series 10/40G Adapter
1803 SFC9020 Virtual Function [Solarstorm]
1813 SFL9021 Virtual Function [Solarstorm]
+ 1903 SFC9120 Virtual Function
+ 1923 SFC9140 Virtual Function
6703 SFC4000 rev A iSCSI/Onload [Solarstorm]
10b8 0102 SMC10GPCIe-10BT (A2) [TigerCard]
10b8 0103 SMC10GPCIe-10BT (A3) [TigerCard]
0401 P4080
0408 P4040E
0409 P4040
+ 0440 T4240 with security
+ 0441 T4240 without security
+ 0446 T4160 with security
+ 0447 T4160 without security
+ 0830 T2080 with security
+ 0831 T2080 without security
+ 0838 T2081 with security
+ 0839 T2081 without security
580c MPC5121e
7010 MPC8641 PCI Host Bridge
7011 MPC8641D PCI Host Bridge
1062 AR8132 Fast Ethernet
1063 AR8131 Gigabit Ethernet
1458 e000 GA-G31M-ES2L Motherboard
+ 17c0 10d2 Medion Akoya E7214 Notebook PC [MD98410]
1066 Attansic L2c Gigabit Ethernet
1067 Attansic L1c Gigabit Ethernet
1073 AR8151 v1.0 Gigabit Ethernet
1a22 Ambric Inc.
1a29 Fortinet, Inc.
4338 CP8 Content Processor ASIC
+ 4e36 NP6 Network Processor
1a2b Ascom AG
0000 GESP v1.2
0001 GESP v1.3
0005 ETP v1.4
000a ETP-104 v1.1
000e DSLP-104 v1.1
+# nee Metalink Ltd.
+1a30 Lantiq
+ 0680 MtW8171 [Hyperion II]
+ 0700 Wave300 PSB8224 [Hyperion III]
+ 0710 Wave300 PSB8231 [Hyperion III]
1a32 Quanta Microsystems, Inc
1a3b AzureWave
1112 AR9285 Wireless Network Adapter (PCI-Express)
1a76 Wavesat
1a77 Lightfleet Corporation
1a78 Virident Systems Inc.
- 0031 Virident FlashMAX Drive
+ 0031 FlashMAX Drive
1a78 0034 FlashMAX PCIe SSD [rev 3]
1a78 0037 FlashMAX PCIe SSD [rev 3D]
1a78 0038 FlashMAX PCIe SSD [rev 4]
0040 FlashMAX II
0041 FlashMAX II
0042 FlashMAX II
+ 0050 FlashMAX III
1a84 Commex Technologies
0001 Vulcan SP HT6210 10-Gigabit Ethernet (rev 02)
1a88 MEN Mikro Elektronik
0200 Wil6200 PCI Express Port
0201 Wil6200 Wireless PCI Express Port
0301 Wil6200 802.11ad Wireless Network Adapter
+ 0302 Wil6200 802.11ad Wireless Network Adapter
+ 0310 Wil6200 802.11ad Wireless Network Adapter
1aec Wolfson Microelectronics
-1aed Fusion-io
+# nee Fusion-io
+1aed SanDisk
1003 ioDimm3 (v1.2)
1005 ioDimm3
1014 03c3 High IOPS SSD PCIe Adapter
1007 ioXtreme Pro
1008 ioXtreme-2
2001 ioDrive2
+ 3001 ioMemory FHHL
+ 3002 ioMemory HHHL
+ 3003 ioMemory Mezzanine
1aee Caustic Graphics Inc.
# nee Qumranet, Inc.
1af4 Red Hat, Inc
1849 1042 Motherboard
1080 ASM1083/1085 PCIe to PCI Bridge
1849 1080 Motherboard
+ 1142 ASM1042A USB 3.0 Host Controller
1b2c Opal-RT Technologies Inc.
1b36 Red Hat, Inc.
0001 QEMU PCI-PCI bridge
1af4 1100 QEMU Virtual Machine
1b37 Signal Processing Devices Sweden AB
0014 ADQ412
+# now owned by HGST (a Western Digital subsidiary)
+1b39 sTec, Inc.
+ 0001 S1120 PCIe Accelerator SSD
1b3a Westar Display Technologies
7589 HRED J2000 - JPEG 2000 Video Codec Device
1b3e Teradata Corp.
9480 88SE9480 SAS/SATA 6Gb/s RAID controller
9485 88SE9485 SAS/SATA 6Gb/s controller
1b55 NetUP Inc.
+ 18f6 Dual DVB Universal CI card
2a2c Dual DVB-S2-CI card
e2e4 Dual DVB-T/C-CI RF card
# 2xHDMI and 2xHD-SDI inputs
e5f4 MPEG2 and H264 Encoder-Transcoder
f1c4 Dual ASI-RX/TX-CI card
+1b66 Deltacast
+ 0007 Delta-3G-elp-11 SDI I/O Board
1b6f Etron Technology, Inc.
7023 EJ168 USB 3.0 Host Controller
7052 EJ188/EJ198 USB 3.0 Host Controller
d430 D410/430 Quad-port E1/T1 card
1b85 OCZ Technology Group, Inc.
1041 RevoDrive 3 X2 PCI-Express SSD 240 GB (Marvell Controller)
+ 8788 RevoDrive Hybrid
1b96 Western Digital
1b9a XAVi Technologies Corp.
1bad ReFLEX CES
1bbf Maxeler Technologies Ltd.
0003 MAX3
0004 MAX4
+1bee IXXAT Automation GmbH
+ 0003 CAN-IB200/PCIe
1bf4 VTI Instruments Corporation
0001 SentinelEX
1bfd EeeTOP
1c1c Symphony
0001 82C101
+1c28 Lite-On IT Corp. / Plextor
+ 0122 M6e PCI Express SSD [Marvell 88SS9183]
1c2c Fiberblaze
000a Capture
000f SmartNIC
0300 Telas 2.V
1c44 Enmotus Inc
8000 8000 Storage IO Controller
+1c7e TTTech Computertechnik AG
+ 0200 zFAS Debug Port
1c7f Elektrobit Austria GmbH
5100 EB5100
1c8a TSF5 Corporation
1cb1 Collion UG & Co.KG
1cc5 Embedded Intelligence, Inc.
0100 CAN-PCIe-02
+1cd2 SesKion GmbH
+ 0301 Simulyzer-RT CompactPCI Serial DIO-1 card
1ce4 Exablaze
0001 ExaNIC X4
0002 ExaNIC X2
1cf7 Subspace Dynamics
+# CEM Solutions Pvt. Ltd.
+1d21 Allo
+1d26 Kalray Inc.
+ 0040 Turbocard2 Accelerator
+ e004 AB01/EMB01 Development Board
1d44 DPT
a400 PM2x24/PM3224
1d5c Fantasia Trading LLC
3513 ARCOM Control Systems Ltd
37d9 ITD Firm ltd.
1138 SCHD-PH-8 Phase detector
+# 12-ch Relay Actuator Card
+ 1140 VR-12-PCI
+# multiport serial board
+ 1141 PCI-485(422)
3842 eVga.com. Corp.
38ef 4Links
3d3d 3DLabs
416c Aladdin Knowledge Systems
0100 AladdinCARD
0200 CPC
+4254 DVBSky
4321 Tata Power Strategic Electronics Division
434e CAST Navigation LLC
4444 Internext Compression Inc
5700 Netpower
584d AuzenTech Co., Ltd.
5851 Exacq Technologies
+ 8008 tDVR8008 8-port video capture card
+ 8016 tDVR8016 16-chan video capture card
+ 8032 tDVR8032 32-chan video capture card
5853 XenSource, Inc.
0001 Xen Platform Device
# Virtual device surfaced in guests to provide HID events.
3000 HD-3000
5500 HD5500 HDTV
7284 HT OMEGA Inc.
+7401 EndRun Technologies
+ e100 PTP3100 PCIe PTP Slave Clock
7604 O.N. Electronic Co Ltd.
7bde MIDAC Corporation
7fed PowerTV
0044 Core Processor DRAM Controller
1025 0347 Aspire 7740G
1025 0487 TravelMate 5742
+ 144d c06a R730 Laptop
+ 17c0 10d2 Medion Akoya E7214 Notebook PC [MD98410]
e4bf 50c1 PC1-GROOVE
0045 Core Processor PCI Express x16 Root Port
+ 17c0 10d2 Medion Akoya E7214 Notebook PC [MD98410]
0046 Core Processor Integrated Graphics Controller
+ 144d c06a R730 Laptop
+ 17c0 10d9 Medion Akoya E7214 Notebook PC [MD98410]
e4bf 50c1 PC1-GROOVE
0047 Core Processor Secondary PCI Express Root Port
0048 Core Processor DRAM Controller
0126 2nd Generation Core Processor Family Integrated Graphics Controller
1028 04cc Vostro 3350
0150 Xeon E3-1200 v2/3rd Gen Core processor DRAM Controller
- 1043 84ca P8H77-I Motherboard
+ 1043 84ca P8 series motherboard
+ 15d9 0624 X9SCM-F Motherboard
1849 0150 Motherboard
0151 Xeon E3-1200 v2/3rd Gen Core processor PCI Express Root Port
1043 1477 N56VZ
1043 844d P8 series motherboard
015e Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller
0162 Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller
+ 1043 84ca P8 series motherboard
1849 0162 Motherboard
0166 3rd Gen Core processor Graphics Controller
1043 1517 Zenbook Prime UX31A
0416 4th Gen Core Processor Integrated Graphics Controller
17aa 220e ThinkPad T440p
041a Xeon E3-1200 v3 Processor Integrated Graphics Controller
+ 041e 4th Generation Core Processor Family Integrated Graphics Controller
0433 Coleto Creek ACC - ME/CPM interface
0435 Coleto Creek PCIe Endpoint
0436 DH8900CC Null Device
8086 1015 Centrino Wireless-N 100 BGN
8086 1017 Centrino Wireless-N 100 BG
08b1 Wireless 7260
-# Wilkins Peak 2 2x2 AGN + BT
+# Wilkins Peak 2
+ 8086 4020 Dual Band Wireless-N 7260
+# Wilkins Peak 2
+ 8086 402a Dual Band Wireless-N 7260
+# Wilkins Peak 2
8086 4060 Dual Band Wireless-N 7260
-# Wilkins Peak 2 BGN + BT
+# Wilkins Peak 2
8086 4062 Wireless-N 7260
-# Wilkins Peak 2 2x2 80MHz + BT
+# Wilkins Peak 2
+ 8086 406a Dual Band Wireless-N 7260
+# Wilkins Peak 2
8086 4070 Dual Band Wireless-AC 7260
-# Wilkins Peak 2 2x2 AGN + BT
+# Wilkins Peak 2
+ 8086 4072 Dual Band Wireless-AC 7260
+# Wilkins Peak 2
8086 4160 Dual Band Wireless-N 7260
-# Wilkins Peak 2 BGN + BT
+# Wilkins Peak 2
8086 4162 Wireless-N 7260
-# Wilkins Peak 2 2x2 80MHz + BT
+# Wilkins Peak 2
8086 4170 Dual Band Wireless-AC 7260
-# Wilkins Peak 2 AGN + BT
+# Wilkins Peak 2
+ 8086 4420 Dual Band Wireless-N 7260
+# Wilkins Peak 2
8086 4460 Dual Band Wireless-N 7260
-# Wilkins Peak 2 BGN + BT
+# Wilkins Peak 2
8086 4462 Wireless-N 7260
-# Wilkins Peak 2 2x2 80MHz + BT
+# Wilkins Peak 2
+ 8086 446a Dual Band Wireless-N 7260
+# Wilkins Peak 2
8086 4470 Dual Band Wireless-AC 7260
-# Wilkins Peak 2 2x2 80MHz + BT
+# Wilkins Peak 2
+ 8086 4472 Dual Band Wireless-AC 7260
+# Wilkins Peak 2
+ 8086 4560 Dual Band Wireless-N 7260
+# Wilkins Peak 2
+ 8086 4570 Dual Band Wireless-AC 7260
+# Wilkins Peak 2
8086 486e Dual Band Wireless-AC 7260
-# Wilkins Peak 2 2x2 80MHz + BT
+# Wilkins Peak 2
8086 4870 Dual Band Wireless-AC 7260
-# Wilkins Peak 2 2x2 80MHz + BT
+# Wilkins Peak 2
8086 4a6c Dual Band Wireless-AC 7260
-# Wilkins Peak 2 2x2 80MHz + BT
+# Wilkins Peak 2
8086 4a6e Dual Band Wireless-AC 7260
-# Wilkins Peak 2 2x2 80MHz + BT
+# Wilkins Peak 2
8086 4a70 Dual Band Wireless-AC 7260
-# Wilkins Peak 2 2x2 80MHz (No BT)
+# Wilkins Peak 2
+ 8086 4c60 Dual Band Wireless-AC 7260
+# Wilkins Peak 2
+ 8086 4c70 Dual Band Wireless-AC 7260
+# Wilkins Peak 2
+ 8086 5070 Dual Band Wireless-AC 7260
+# Wilkins Peak 2
+ 8086 5072 Dual Band Wireless-AC 7260
+# Wilkins Peak 2
+ 8086 5170 Dual Band Wireless-AC 7260
+# Wilkins Peak 2
+ 8086 5770 Dual Band Wireless-AC 7260
+# Wilkins Peak 2
8086 c020 Dual Band Wireless-N 7260
-# Wilkins Peak 2 2x2 AGN + BT
+# Wilkins Peak 2
+ 8086 c02a Dual Band Wireless-N 7260
+# Wilkins Peak 2
8086 c060 Dual Band Wireless-N 7260
-# Wilkins Peak 2 BGN + BT
+# Wilkins Peak 2
8086 c062 Wireless-N 7260
-# Wilkins Peak 2 2x2 80MHz + BT
+# Wilkins Peak 2
+ 8086 c06a Dual Band Wireless-N 7260
+# Wilkins Peak 2
8086 c070 Dual Band Wireless-AC 7260
-# Wilkins Peak 2 2x2 AGN + BT
+# Wilkins Peak 2
+ 8086 c072 Dual Band Wireless-AC 7260
+# Wilkins Peak 2
8086 c160 Dual Band Wireless-N 7260
-# Wilkins Peak 2 BGN + BT
+# Wilkins Peak 2
8086 c162 Wireless-N 7260
-# Wilkins Peak 2 2x2 80MHz + BT
+# Wilkins Peak 2
8086 c170 Dual Band Wireless-AC 7260
-# Wilkins Peak 2 2x2 AGN (No BT) - Dell
+# Wilkins Peak 2
+ 8086 c360 Dual Band Wireless-N 7260
+# Wilkins Peak 2
8086 c420 Dual Band Wireless-N 7260
-# Wilkins Peak 2 AGN + BT
+# Wilkins Peak 2
8086 c460 Dual Band Wireless-N 7260
-# Wilkins Peak 2 BGN + BT
+# Wilkins Peak 2
8086 c462 Wireless-N 7260
-# Wilkins Peak 2 2x2 80MHz + BT
+# Wilkins Peak 2
8086 c470 Dual Band Wireless-AC 7260
+# Wilkins Peak 2
+ 8086 c472 Dual Band Wireless-AC 7260
+# Wilkins Peak 2
+ 8086 c560 Dual Band Wireless-N 7260
+# Wilkins Peak 2
+ 8086 c570 Dual Band Wireless-AC 7260
+# Wilkins Peak 2
+ 8086 c760 Dual Band Wireless-N 7260
+# Wilkins Peak 2
+ 8086 c770 Dual Band Wireless-AC 7260
+# Wilkins Peak 2
+ 8086 cc60 Dual Band Wireless-AC 7260
+# Wilkins Peak 2
+ 8086 cc70 Dual Band Wireless-AC 7260
08b2 Wireless 7260
-# Wilkins Peak 2 2x2 AGN (No BT) - Lenovo/HP
+# Wilkins Peak 2
8086 4220 Dual Band Wireless-N 7260
-# Wilkins Peak 2 2x2 AGN + BT - Lenovo/HP
+# Wilkins Peak 2
8086 4260 Dual Band Wireless-N 7260
-# Wilkins Peak 2 2x2 BGN + BT - Dell
+# Wilkins Peak 2
8086 4262 Wireless-N 7260
-# Wilkins Peak 2 2x2 80MHz + BT - Lenovo/HP
- 8086 4270 Dual Band Wireless-AC 7260
-# Wilkins Peak 2 2x2 80MHz (No BT) - Lenovo/HP
+# Wilkins Peak 2
+ 8086 426a Dual Band Wireless-N 7260
+# Wilkins Peak 2
+ 8086 4270 Wireless-N 7260
+# Wilkins Peak 2
+ 8086 4272 Dual Band Wireless-AC 7260
+# Wilkins Peak 2
+ 8086 4360 Dual Band Wireless-N 7260
+# Wilkins Peak 2
+ 8086 4370 Dual Band Wireless-AC 7260
+# Wilkins Peak 2
8086 c220 Dual Band Wireless-N 7260
-# Wilkins Peak 2 2x2 AGN + BT - Lenovo/HP
+# Wilkins Peak 2
8086 c260 Dual Band Wireless-N 7260
-# Wilkins Peak 2 2x2 BGN + BT - Dell
+# Wilkins Peak 2
8086 c262 Wireless-N 7260
-# Wilkins Peak 2 2x2 80MHz + BT - Lenovo/HP
+# Wilkins Peak 2
+ 8086 c26a Dual Band Wireless-N 7260
+# Wilkins Peak 2
8086 c270 Dual Band Wireless-AC 7260
+# Wilkins Peak 2
+ 8086 c272 Dual Band Wireless-AC 7260
+# Wilkins Peak 2
+ 8086 c370 Dual Band Wireless-AC 7260
08b3 Wireless 3160
-# Wilkins Peak 1 1x1 AGN + BT
+# Wilkins Peak 1
8086 0060 Dual Band Wireless-N 3160
-# Wilkins Peak 1 1x1 BGN + BT
+# Wilkins Peak 1
8086 0062 Wireless-N 3160
-# Wilkins Peak 1 1x1 80Mhz + BT
+# Wilkins Peak 1
8086 0070 Dual Band Wireless-AC 3160
-# Wilkins Peak 1 1x1 80Mhz + BT
+# Wilkins Peak 1
+ 8086 0072 Dual Band Wireless-AC 3160
+# Wilkins Peak 1
8086 0170 Dual Band Wireless-AC 3160
-# Wilkins Peak 1 1x1 80Mhz + BT
+# Wilkins Peak 1
+ 8086 0172 Dual Band Wireless-AC 3160
+# Wilkins Peak 1
+ 8086 0260 Dual Band Wireless-N 3160
+# Wilkins Peak 1
8086 0470 Dual Band Wireless-AC 3160
-# Wilkins Peak 1 1x1 AGN + BT
+# Wilkins Peak 1
+ 8086 0472 Dual Band Wireless-AC 3160
+# Wilkins Peak 1
+ 8086 1070 Dual Band Wireless-AC 3160
+# Wilkins Peak 1
+ 8086 1170 Dual Band Wireless-AC 3160
+# Wilkins Peak 1
8086 8060 Dual Band Wireless N-3160
-# Wilkins Peak 1 1x1 BGN + BT
+# Wilkins Peak 1
8086 8062 Wireless N-3160
-# Wilkins Peak 1 1x1 80Mhz + BT
+# Wilkins Peak 1
8086 8070 Dual Band Wireless AC 3160
-# Wilkins Peak 1 1x1 80Mhz + BT
+# Wilkins Peak 1
+ 8086 8072 Dual Band Wireless AC 3160
+# Wilkins Peak 1
8086 8170 Dual Band Wireless AC 3160
-# Wilkins Peak 1 1x1 80Mhz + BT
+# Wilkins Peak 1
+ 8086 8172 Dual Band Wireless AC 3160
+# Wilkins Peak 1
8086 8470 Dual Band Wireless AC 3160
+# Wilkins Peak 1
+ 8086 8570 Dual Band Wireless AC 3160
08b4 Wireless 3160
-# Wilkins Peak 1 1x1 80Mhz + BT - lenovo/HP
+# Wilkins Peak 1
8086 0270 Dual Band Wireless-AC 3160
-# Wilkins Peak 1 1x1 80Mhz + BT - lenovo/HP
+# Wilkins Peak 1
+ 8086 0272 Dual Band Wireless-AC 3160
+# Wilkins Peak 1
+ 8086 0370 Dual Band Wireless-AC 3160
+# Wilkins Peak 1
+ 8086 8260 Dual Band Wireless AC 3160
+# Wilkins Peak 1
8086 8270 Dual Band Wireless AC 3160
+# Wilkins Peak 1
+ 8086 8272 Dual Band Wireless AC 3160
+# Wilkins Peak 1
+ 8086 8370 Dual Band Wireless AC 3160
# PowerVR SGX 545
08cf Atom Processor Z2760 Integrated Graphics Controller
+ 0953 PCIe Data Center SSD
+ 8086 3702 DC P3700 SSD
+ 8086 3703 DC P3700 SSD [2.5" SFF]
+ 8086 3704 DC P3500 SSD [Add-in Card]
+ 8086 3705 DC P3500 SSD [2.5" SFF]
+ 8086 3709 DC P3600 SSD [Add-in Card]
+ 8086 370a DC P3600 SSD [2.5" SFF]
095a Wireless 7265
# Stone Peak 2 AC
8086 1010 Dual Band Wireless-AC 7265
8086 5090 Dual Band Wireless-AC 7265
# Stone Peak 2 AGN
8086 5100 Dual Band Wireless-AC 7265
+# Stone Peak 2 BGN
+ 8086 5102 Wireless-N 7265
# Stone Peak 2 AGN
8086 510a Dual Band Wireless-AC 7265
# Stone Peak 2 AC
8086 5400 Dual Band Wireless-AC 7265
# Stone Peak 2 AC
8086 5410 Dual Band Wireless-AC 7265
+# Stone Peak 2 AC
+ 8086 5412 Dual Band Wireless-AC 7265
# Stone Peak 2 AGN
8086 5420 Dual Band Wireless-N 7265
# Maple Peak AC
8086 5490 Dual Band Wireless-AC 7265
+# Stone Peak 2 AC
+ 8086 5510 Dual Band Wireless-AC 7265
# Maple Peak AC
8086 5590 Dual Band Wireless-AC 7265
+# Stone Peak 2 AGN
+ 8086 9000 Dual Band Wireless-AC 7265
+# Stone Peak 2 AGN
+ 8086 900a Dual Band Wireless-AC 7265
# Stone Peak 2 AC
8086 9010 Dual Band Wireless-AC 7265
# Stone Peak 2 AC
8086 9210 Dual Band Wireless-AC 7265
# Stone Peak 2 AC
8086 9310 Dual Band Wireless-AC 7265
+# Stone Peak 2 AGN
+ 8086 9400 Dual Band Wireless-AC 7265
# Stone Peak 2 AC
8086 9410 Dual Band Wireless-AC 7265
# Stone Peak 2 AC
8086 5200 Dual Band Wireless-N 7265
# Stone Peak 2 BGN
8086 5202 Wireless-N 7265
+# Stone Peak 2 AGN
+ 8086 520a Dual Band Wireless-N 7265
# Stone Peak 2 AC
8086 5210 Dual Band Wireless-AC 7265
+# Stone Peak 2 AC
+ 8086 5212 Dual Band Wireless-AC 7265
# Maple Peak AC
8086 5290 Dual Band Wireless-AC 7265
# Stone Peak 2 BGN
- 8086 5302 Dual Band Wireless-AC 7265
+ 8086 5302 Wireless-N 7265
# Stone Peak 2 AC
8086 5310 Dual Band Wireless-AC 7265
+# Stone Peak 2 AGN
+ 8086 9200 Dual Band Wireless-AC 7265
0960 80960RP (i960RP) Microprocessor/Bridge
0962 80960RM (i960RM) Bridge
0964 80960RP (i960RP) Microprocessor/Bridge
0a22 Haswell-ULT Integrated Graphics Controller
0a26 Haswell-ULT Integrated Graphics Controller
0a2a Haswell-ULT Integrated Graphics Controller
+ 0a2e Haswell-ULT Integrated Graphics Controller
0be0 Atom Processor D2xxx/N2xxx Integrated Graphics Controller
0be1 Atom Processor D2xxx/N2xxx Integrated Graphics Controller
105b 0d7c D270S/D250S Motherboard
0efb Xeon E7 v2/Xeon E5 v2/Core i7 DDRIO
0efc Xeon E7 v2/Xeon E5 v2/Core i7 DDRIO
0efd Xeon E7 v2/Xeon E5 v2/Core i7 DDRIO
- 0f00 ValleyView SSA-CUnit
- 0f01 ValleyView SSA-CUnit
- 0f02 ValleyView SSA-CUnit
- 0f03 ValleyView SSA-CUnit
- 0f04 ValleyView High Definition Audio Controller
- 0f05 ValleyView High Definition Audio Controller
- 0f06 ValleyView LPIO1 DMA Controller
- 0f07 ValleyView LPIO1 DMA Controller
- 0f08 ValleyView LPIO1 PWM Controller
- 0f09 ValleyView LPIO1 PWM Controller
- 0f0a ValleyView LPIO1 HSUART Controller #1
- 0f0b ValleyView LPIO1 HSUART Controller #1
- 0f0c ValleyView LPIO1 HSUART Controller #2
- 0f0d ValleyView LPIO1 HSUART Controller #2
- 0f0e ValleyView LPIO1 SPI Controller
- 0f0f ValleyView LPIO1 SPI Controller
- 0f10 ValleyView LPIO1 Controller
- 0f11 ValleyView LPIO1 Controller
- 0f12 ValleyView SMBus Controller
- 0f13 ValleyView SMBus Controller
- 0f14 ValleyView SDIO Controller
- 0f15 ValleyView SDIO Controller
- 0f16 ValleyView SDIO Controller
- 0f17 ValleyView SDIO Controller
- 0f18 ValleyView SEC
- 0f19 ValleyView SEC
- 0f1a ValleyView SEC
- 0f1b ValleyView SEC
- 0f1c ValleyView Power Control Unit
- 0f1d ValleyView Power Control Unit
- 0f1e ValleyView Power Control Unit
- 0f1f ValleyView Power Control Unit
- 0f20 ValleyView 4-Port SATA Storage Controller
- 0f21 ValleyView 4-Port SATA Storage Controller
- 0f22 ValleyView 6-Port SATA AHCI Controller
- 0f23 ValleyView 6-Port SATA AHCI Controller
- 0f24 ValleyView SATA RAID Storage Controller
- 0f25 ValleyView SATA RAID Storage Controller
- 0f26 ValleyView 2-Port SATA Storage Controller
- 0f27 ValleyView 2-Port SATA Storage Controller
- 0f28 ValleyView LPE Audio Controller
- 0f29 ValleyView LPE Audio Controller
- 0f2a ValleyView LPE Audio Controller
- 0f2b ValleyView LPE Audio Controller
- 0f2e ValleyView SATA RAID Storage Controller
- 0f2f ValleyView SATA RAID Storage Controller
- 0f30 ValleyView Gen7
- 0f31 ValleyView Gen7
- 0f32 ValleyView Gen7
- 0f33 ValleyView Gen7
- 0f34 ValleyView USB Enhanced Host Controller
- 0f35 ValleyView USB xHCI Host Controller
- 0f36 ValleyView USB xHCI Host Controller
- 0f37 ValleyView OTG
- 0f38 ValleyView ISP
- 0f39 ValleyView ISP
- 0f3a ValleyView ISP
- 0f3b ValleyView ISP
- 0f3c ValleyView ISP
- 0f3d ValleyView ISP
- 0f3e ValleyView ISP
- 0f3f ValleyView ISP
- 0f40 ValleyView LPIO2 DMA Controller
- 0f41 ValleyView LPIO2 I2C Controller #1
- 0f42 ValleyView LPIO2 I2C Controller #2
- 0f43 ValleyView LPIO2 I2C Controller #3
- 0f44 ValleyView LPIO2 I2C Controller #4
- 0f45 ValleyView LPIO2 I2C Controller #5
- 0f46 ValleyView LPIO2 I2C Controller #6
- 0f47 ValleyView LPIO2 I2C Controller #7
- 0f48 ValleyView PCI Express Root Port
- 0f49 ValleyView PCI Express Root Port
- 0f4a ValleyView PCI Express Root Port
- 0f4b ValleyView PCI Express Root Port
- 0f4c ValleyView PCI Express Root Port
- 0f4d ValleyView PCI Express Root Port
- 0f4e ValleyView PCI Express Root Port
- 0f4f ValleyView PCI Express Root Port
- 0f50 ValleyView MIPI-HSI Controller
+ 0f00 Atom Processor Z36xxx/Z37xxx Series SoC Transaction Register
+ 0f04 Atom Processor Z36xxx/Z37xxx Series High Definition Audio Controller
+ 0f06 Atom Processor Z36xxx/Z37xxx Series LPIO1 DMA Controller
+ 0f08 Atom Processor Z36xxx/Z37xxx Series LPIO1 PWM Controller
+ 0f09 Atom Processor Z36xxx/Z37xxx Series LPIO1 PWM Controller
+ 0f0a Atom Processor Z36xxx/Z37xxx Series LPIO1 HSUART Controller #1
+ 0f0c Atom Processor Z36xxx/Z37xxx Series LPIO1 HSUART Controller #2
+ 0f0e Atom Processor Z36xxx/Z37xxx Series LPIO1 SPI Controller
+ 0f12 Atom Processor E3800 Series SMBus Controller
+ 0f14 Atom Processor Z36xxx/Z37xxx Series SDIO Controller
+ 0f15 Atom Processor Z36xxx/Z37xxx Series SDIO Controller
+ 0f16 Atom Processor Z36xxx/Z37xxx Series SDIO Controller
+ 0f18 Atom Processor Z36xxx/Z37xxx Series Trusted Execution Engine
+ 0f1c Atom Processor Z36xxx/Z37xxx Series Power Control Unit
+ 0f20 Atom Processor E3800 Series SATA IDE Controller
+ 0f21 Atom Processor E3800 Series SATA IDE Controller
+ 0f22 Atom Processor E3800 Series SATA AHCI Controller
+ 0f23 Atom Processor E3800 Series SATA AHCI Controller
+ 0f28 Atom Processor Z36xxx/Z37xxx Series LPE Audio Controller
+ 0f31 Atom Processor Z36xxx/Z37xxx Series Graphics & Display
+ 0f34 Atom Processor Z36xxx/Z37xxx Series USB EHCI
+ 0f35 Atom Processor Z36xxx/Z37xxx Series USB xHCI
+ 0f37 Atom Processor Z36xxx/Z37xxx Series OTG USB Device
+ 0f38 Atom Processor Z36xxx/Z37xxx Series Camera ISP
+ 0f40 Atom Processor Z36xxx/Z37xxx Series LPIO2 DMA Controller
+ 0f41 Atom Processor Z36xxx/Z37xxx Series LPIO2 I2C Controller #1
+ 0f42 Atom Processor Z36xxx/Z37xxx Series LPIO2 I2C Controller #2
+ 0f43 Atom Processor Z36xxx/Z37xxx Series LPIO2 I2C Controller #3
+ 0f44 Atom Processor Z36xxx/Z37xxx Series LPIO2 I2C Controller #4
+ 0f45 Atom Processor Z36xxx/Z37xxx Series LPIO2 I2C Controller #5
+ 0f46 Atom Processor Z36xxx/Z37xxx Series LPIO2 I2C Controller #6
+ 0f47 Atom Processor Z36xxx/Z37xxx Series LPIO2 I2C Controller #7
+ 0f48 Atom Processor E3800 Series PCI Express Root Port 1
+ 0f4a Atom Processor E3800 Series PCI Express Root Port 2
+ 0f4c Atom Processor E3800 Series PCI Express Root Port 3
+ 0f4e Atom Processor E3800 Series PCI Express Root Port 4
+ 0f50 Atom Processor E3800 Series eMMC 4.5 Controller
1000 82542 Gigabit Ethernet Controller (Fiber)
0e11 b0df NC6132 Gigabit Ethernet Adapter (1000-SX)
0e11 b0e0 NC6133 Gigabit Ethernet Adapter (1000-LX)
108f Active Management Technology - SOL
1091 PRO/100 VM Network Connection
1092 PRO/100 VE Network Connection
+ 1071 8209 Medion MIM 2240 Notebook PC [MD98100]
1093 PRO/100 VM Network Connection
1094 PRO/100 VE Network Connection
1095 PRO/100 VE Network Connection
10cd 82567LF-2 Gigabit Network Connection
10ce 82567V-2 Gigabit Network Connection
10d3 82574L Gigabit Network Connection
+ 103c 1785 NC112i 1-port Ethernet Server Adapter
103c 3250 NC112T PCI Express single Port Gigabit Server Adapter
1043 8369 Motherboard
+ 1093 76e9 PCIe-8233 Ethernet Adapter
10a9 8029 Prism XL Single Port Gigabit Ethernet
15d9 060a X7SPA-H/X7SPA-HF Motherboard
15d9 060d C7SIM-Q Motherboard
1520 I350 Ethernet Controller Virtual Function
1521 I350 Gigabit Network Connection
1028 0602 Gigabit 2P I350-t LOM
- 1028 1f60 Intel GbE 4P I350crNDC
- 1028 1f62 Intel GbE 2P I350crNDC
+ 1028 1f60 Gigabit 4P I350-t rNDC
+ 1028 1f62 Gigabit 4P X540/I350 rNDC
1028 ff9a Gigabit 4P X710/I350 rNDC
103c 17d1 Ethernet 1Gb 4-port 366FLR Adapter
103c 2003 Ethernet 1Gb 2-port 367i Adapter
103c 339e Ethernet 1Gb 2-port 361T Adapter
108e 7b16 Quad Port GbE PCIe 2.0 ExpressModule, UTP
108e 7b18 Quad Port GbE PCIe 2.0 Low Profile Adapter, UTP
+ 1093 7648 PCIe-8237R Ethernet Adapter
+ 1093 7649 PCIe-8236 Ethernet Adapter
+ 1093 76b1 PCIe-8237R-S Ethernet Adapter
+ 1093 775b PCIe-8237 Ethernet Adapter
10a9 802a UV2-BaseIO dual-port GbE
17aa 1074 ThinkServer I350-T4 AnyFabric
8086 0001 Ethernet Server Adapter I350-T4
8086 00a3 Ethernet Server Adapter I350-F4
8086 00a4 Ethernet Server Adapter I350-F2
1523 I350 Gigabit Backplane Connection
- 1028 1f9b Gigabit 4P I350 bNDC
+ 1028 0060 Gigabit 2P I350 LOM
+ 1028 1f9b Gigabit 4P I350-t bNDC
103c 1784 Ethernet 1Gb 2-port 361FLB Adapter
103c 18d1 Ethernet 1Gb 2-port 361FLB Adapter
103c 1989 Ethernet 1Gb 2-port 363i Adapter
1529 82599 10 Gigabit Dual Port Network Connection with FCoE
152a 82599 10 Gigabit Dual Port Backplane Connection with FCoE
1533 I210 Gigabit Network Connection
- 103c 0003 Ethernet Server Adapter I210-T1
+ 103c 0003 Ethernet I210-T1 GbE NIC
+ 1093 7706 Compact Vision System Ethernet Adapter
+ 10a9 802c UV300 BaseIO single-port GbE
+ 10a9 802d UV3000 BaseIO GbE Network
17aa 1100 ThinkServer Ethernet Server Adapter
8086 0001 Ethernet Server Adapter I210-T1
8086 0002 Ethernet Server Adapter I210-T1
- 1534 I210 Gigabit Network Connection
1536 I210 Gigabit Fiber Network Connection
1537 I210 Gigabit Backplane Connection
+ 1538 I210 Gigabit Network Connection
1539 I211 Gigabit Network Connection
153a Ethernet Connection I217-LM
103c 1909 ZBook 15
8086 011a Ethernet Converged Network Adapter X520-4
8086 011b Ethernet Converged Network Adapter X520-4
8086 011c Ethernet Converged Network Adapter X520-4
- 154c XL710 X710 Virtual Function
+ 154c XL710/X710 Virtual Function
154d Ethernet 10G 2P X520 Adapter
8086 7b11 10GbE 2P X520 Adapter
1557 82599 10 Gigabit Network Connection
1560 Ethernet Controller X540
156f Ethernet Connection I219-LM
1570 Ethernet Connection I219-V
- 1571 XL710 X710 Virtual Function
- 1572 Ethernet 10G 2P X710 Adapter
+ 1571 XL710/X710 Virtual Function
+ 1572 Ethernet Controller X710 for 10GbE SFP+
1028 1f99 Ethernet 10G 4P X710/I350 rNDC
+ 17aa 0000 ThinkServer XL710 AnyFabric
+ 17aa 4001 ThinkServer XL710-4 AnyFabric
+ 8086 0000 Ethernet Converged Network Adapter X710
8086 0001 Ethernet Converged Network Adapter X710-4
8086 0002 Ethernet Converged Network Adapter X710-4
8086 0004 Ethernet Converged Network Adapter X710-4
8086 0005 Ethernet 10G 4P X710 Adapter
- 8086 0006 Ethernet 10G2P X710 Adapter
+ 8086 0006 Ethernet 10G 2P X710 Adapter
8086 0007 Ethernet Converged Network Adapter X710-2
8086 0008 Ethernet Converged Network Adapter X710-2
157b I210 Gigabit Network Connection
157c I210 Gigabit Backplane Connection
- 1580 Ethernet Controller XL710 for 40Gbe backplane
- 1581 Ethernet Controller X710 for 10Gbe backplane
+ 1580 Ethernet Controller XL710 for 40GbE backplane
+ 1581 Ethernet Controller X710 for 10GbE backplane
1028 1f98 Ethernet 10G 4P X710-k bNDC
1583 Ethernet Controller XL710 for 40GbE QSFP+
+ 8086 0000 Ethernet Converged Network Adapter XL710-Q2
8086 0001 Ethernet Converged Network Adapter XL710-Q2
8086 0002 Ethernet Converged Network Adapter XL710-Q2
8086 0003 Ethernet I/O Module XL710-Q2
1584 Ethernet Controller XL710 for 40GbE QSFP+
+ 8086 0000 Ethernet Converged Network Adapter XL710-Q1
8086 0001 Ethernet Converged Network Adapter XL710-Q1
8086 0002 Ethernet Converged Network Adapter XL710-Q1
8086 0003 Ethernet I/O Module XL710-Q1
15a1 Ethernet Connection (2) I218-V
15a2 Ethernet Connection (3) I218-LM
15a3 Ethernet Connection (3) I218-V
+ 15a8 Ethernet Connection X552 Virtual Function
+ 15aa Ethernet Connection X552 10 GbE Backplane
+ 15ab Ethernet Connection X552 10 GbE Backplane
+ 15ac Ethernet Connection X552 10 GbE SFP+
+ 15ad Ethernet Connection X552/X557-AT 10GBASE-T
+ 15b7 Ethernet Connection (2) I219-LM
+ 15b8 Ethernet Connection (2) I219-V
1600 Broadwell-U Host Bridge -OPI
1601 Broadwell-U PCI Express x16 Controller
1602 Broadwell-U Integrated Graphics
163b Broadwell-U Integrated Graphics
163d Broadwell-U Integrated Graphics
163e Broadwell-U Integrated Graphics
+ 1900 Sky Lake Host Bridge/DRAM Registers
+ 1901 Sky Lake PCIe Controller (x16)
+ 1904 Sky Lake Host Bridge/DRAM Registers
+ 1905 Sky Lake PCIe Controller (x8)
+ 1908 Sky Lake Host Bridge/DRAM Registers
+ 1909 Sky Lake PCIe Controller (x4)
+ 190c Sky Lake Host Bridge/DRAM Registers
+ 190f Sky Lake Host Bridge/DRAM Registers
+ 1910 Sky Lake Host Bridge/DRAM Registers
+ 1911 Sky Lake Gaussian Mixture Model
+ 1912 Sky Lake Integrated Graphics
+ 1916 Sky Lake Integrated Graphics
+ 1918 Sky Lake Host Bridge/DRAM Registers
+ 1919 Sky Lake Imaging Unit
+ 191e Sky Lake Integrated Graphics
+ 191f Sky Lake Host Bridge/DRAM Registers
+ 1926 Sky Lake Integrated Graphics
+ 1932 Sky Lake Integrated Graphics
+ 193b Sky Lake Integrated Graphics
1960 80960RP (i960RP) Microprocessor
101e 0431 MegaRAID 431 RAID Controller
101e 0438 MegaRAID 438 Ultra2 LVD RAID Controller
1028 04da Vostro 3750
8086 7270 Apple MacBookPro8,2 [Core i7, 15", 2011]
1c04 6 Series/C200 Series Chipset Family SATA RAID Controller
+ 103c 3118 Smart Array B110i SATA RAID Controller
1c05 6 Series/C200 Series Chipset Family SATA RAID Controller
1c08 6 Series/C200 Series Chipset Family 2 port SATA IDE Controller
1c09 6 Series/C200 Series Chipset Family 2 port SATA IDE Controller
1e00 7 Series/C210 Series Chipset Family 4-port SATA Controller [IDE mode]
1e01 7 Series Chipset Family 4-port SATA Controller [IDE mode]
1e02 7 Series/C210 Series Chipset Family 6-port SATA Controller [AHCI mode]
- 1043 84ca P8H77-I Motherboard
+ 1043 84ca P8 series motherboard
1849 1e02 Motherboard
1e03 7 Series Chipset Family 6-port SATA Controller [AHCI mode]
1043 1477 N56VZ
1043 1477 N56VZ
1043 1517 Zenbook Prime UX31A
1043 8415 P8H77-I Motherboard
+ 1043 8445 ASUS P8Z77-V LX Motherboard
1849 1898 Z77 Extreme4 motherboard
1e22 7 Series/C210 Series Chipset Family SMBus Controller
1043 1477 N56VZ
1043 1517 Zenbook Prime UX31A
- 1043 84ca P8H77-I Motherboard
+ 1043 84ca P8 series motherboard
1849 1e22 Motherboard
1e24 7 Series/C210 Series Chipset Family Thermal Management Controller
1043 1517 Zenbook Prime UX31A
1e26 7 Series/C210 Series Chipset Family USB Enhanced Host Controller #1
1043 1477 N56VZ
1043 1517 Zenbook Prime UX31A
- 1043 84ca P8H77-I Motherboard
+ 1043 84ca P8 series motherboard
1849 1e26 Motherboard
1e2d 7 Series/C210 Series Chipset Family USB Enhanced Host Controller #2
1043 1477 N56VZ
1043 1517 Zenbook Prime UX31A
- 1043 84ca P8H77-I Motherboard
+ 1043 84ca P8 series motherboard
1849 1e2d Motherboard
1e31 7 Series/C210 Series Chipset Family USB xHCI Host Controller
103c 17ab ProBook 6570b
1043 1477 N56VZ
1043 1517 Zenbook Prime UX31A
- 1043 84ca P8H77-I Motherboard
+ 1043 84ca P8 series motherboard
1849 1e31 Motherboard
1e33 7 Series/C210 Series Chipset Family LAN Controller
1e3a 7 Series/C210 Series Chipset Family MEI Controller #1
1043 1477 N56VZ
1043 1517 Zenbook Prime UX31A
- 1043 84ca P8H77-I Motherboard
+ 1043 84ca P8 series motherboard
1849 1e3a Motherboard
1e3b 7 Series/C210 Series Chipset Family MEI Controller #2
1e3c 7 Series/C210 Series Chipset Family IDE-r Controller
1e42 7 Series Chipset Family LPC Controller
1e43 7 Series Chipset Family LPC Controller
1e44 Z77 Express Chipset LPC Controller
+ 1043 84ca P8 series motherboard
1849 1e44 Motherboard
1e45 7 Series Chipset Family LPC Controller
1e46 Z75 Express Chipset LPC Controller
1f42 Atom processor C2000 GbE
1f44 Atom processor C2000 GbE Virtual Function
1f45 Ethernet Connection I354 2.5 GbE Backplane
+ 2014 Sky Lake-E Ubox Registers
+ 2015 Sky Lake-E Ubox Registers
+ 2016 Sky Lake-E Ubox Registers
+ 2018 Sky Lake-E M2PCI Registers
+ 201a Sky Lake-E Non-Transparent Bridge Registers
+ 201c Sky Lake-E Non-Transparent Bridge Registers
+ 2021 Sky Lake-E CBDMA Registers
+ 2024 Sky Lake-E MM/Vt-d Configuration Registers
+ 2030 Sky Lake-E PCI Express Root Port 1A
+ 2031 Sky Lake-E PCI Express Root Port 1B
+ 2032 Sky Lake-E PCI Express Root Port 1C
+ 2033 Sky Lake-E PCI Express Root Port 1D
+ 2035 Sky Lake-E RAS Configuration Registers
+ 204c Sky Lake-E M3KTI Registers
+ 204d Sky Lake-E M3KTI Registers
+ 204e Sky Lake-E M3KTI Registers
+ 2054 Sky Lake-E CHA Registers
+ 2055 Sky Lake-E CHA Registers
+ 2056 Sky Lake-E CHA Registers
+ 2057 Sky Lake-E CHA Registers
+ 2068 Sky Lake-E DDRIO Registers
+ 2069 Sky Lake-E DDRIO Registers
+ 206a Sky Lake-E IOxAPIC Configuration Registers
+ 206e Sky Lake-E DDRIO Registers
+ 206f Sky Lake-E DDRIO Registers
+ 2078 Sky Lake-E PCU Registers
+ 207a Sky Lake-E PCU Registers
+ 2080 Sky Lake-E PCU Registers
+ 2081 Sky Lake-E PCU Registers
+ 2082 Sky Lake-E PCU Registers
+ 2083 Sky Lake-E PCU Registers
+ 2084 Sky Lake-E PCU Registers
+ 2085 Sky Lake-E PCU Registers
+ 2086 Sky Lake-E PCU Registers
+ 208d Sky Lake-E CHA Registers
+ 208e Sky Lake-E CHA Registers
2250 Xeon Phi coprocessor 5100 series
225c Xeon Phi coprocessor SE10/7120 series
225d Xeon Phi coprocessor 3120 series
103c 30c1 Compaq 6910p
104d 902d VAIO VGN-NR120E
105b 0d7c D270S/D250S Motherboard
+ 1071 8209 Medion MIM 2240 Notebook PC [MD98100]
144d c00c P30 notebook
+ 144d c06a R730 Laptop
144d c072 Notebook N150P
1458 5000 GA-D525TUD
1734 1055 Amilo M1420
17aa 20ae ThinkPad T61/R61
+ 17c0 10d2 Medion Akoya E7214 Notebook PC [MD98410]
+ 17c0 4083 Medion WIM 2210 Notebook PC [MD96850]
8086 544b Desktop Board D425KT
e4bf cc47 CCG-RUMBA
2449 82801BA/BAM/CA/CAM Ethernet Controller
24c5 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Audio Controller
0e11 00b8 Analog Devices Inc. codec [SoundMAX]
1014 0267 NetVista A30p
- 1014 0537 ThinkPad T41
+ 1014 0537 ThinkPad T4x Series
1014 055f Thinkpad R50e model 1634
1025 005a TravelMate 290
1028 0139 Latitude D400
1734 1055 Amilo M1420
8086 24c5 Dell Dimension 2400
24c6 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Modem Controller
- 1014 0524 ThinkPad T41
+ 1014 0524 ThinkPad T4x Series
1014 0525 ThinkPad
1014 0559 ThinkPad R50e
1025 003c Aspire 2001WLCi (Compal CL50 motherboard) implementation
103c 30a1 NC2400
103c 30a3 Compaq nw8440
1043 1237 A6J-Q008
+ 1071 8209 Medion MIM 2240 Notebook PC [MD98100]
17aa 2015 ThinkPad T60
17aa 2017 ThinkPad R60/T60/X60 series
27a1 Mobile 945GM/PM/GMS, 943/940GML and 945GT Express PCI Express Root Port
103c 309f Compaq nx9420 Notebook
103c 30a3 Compaq nw8440
+ 1071 8209 Medion MIM 2240 Notebook PC [MD98100]
27a2 Mobile 945GM/GMS, 943/940GML Express Integrated Graphics Controller
103c 30a1 NC2400
17aa 201a ThinkPad R60/T60/X60 series
103c 309f Compaq nx9420 Notebook
103c 30a1 NC2400
103c 30a3 Compaq nw8440
+ 1071 8209 Medion MIM 2240 Notebook PC [MD98100]
10f7 8338 Panasonic CF-Y5 laptop
17aa 2009 ThinkPad R60/T60/X60 series
27bc NM10 Family LPC Controller
27c4 82801GBM/GHM (ICH7-M Family) SATA Controller [IDE mode]
1025 006c 9814 WKMI
1028 01d7 XPS M1210
+ 1071 8209 Medion MIM 2240 Notebook PC [MD98100]
17aa 200e ThinkPad T60
27c5 82801GBM/GHM (ICH7-M Family) SATA Controller [AHCI mode]
103c 309f Compaq nx9420 Notebook
1043 1237 A6J-Q008
1043 8179 P5KPL-VM,P5LD2-VM Mainboard
105b 0d7c D270S/D250S Motherboard
+ 1071 8209 Medion MIM 2240 Notebook PC [MD98100]
107b 5048 E4500
144d c072 Notebook N150P
1458 5004 GA-D525TUD
1043 1237 A6J-Q008
1043 8179 P5KPL-VM,P5LD2-VM Mainboard
105b 0d7c D270S/D250S Motherboard
+ 1071 8209 Medion MIM 2240 Notebook PC [MD98100]
107b 5048 E4500
144d c072 Notebook N150P
1458 5004 GA-D525TUD
1043 1237 A6J-Q008
1043 8179 P5KPL-VM,P5LD2-VM Mainboard
105b 0d7c D270S/D250S Motherboard
+ 1071 8209 Medion MIM 2240 Notebook PC [MD98100]
107b 5048 E4500
144d c072 Notebook N150P
1458 5004 GA-D525TUD
1043 1237 A6J-Q008
1043 8179 P5KPL-VM,P5LD2-VM Mainboard
105b 0d7c D270S/D250S Motherboard
+ 1071 8209 Medion MIM 2240 Notebook PC [MD98100]
107b 5048 E4500
144d c072 Notebook N150P
1458 5004 GA-D525TUD
1043 1237 A6J-Q008
1043 8179 P5KPL-VM,P5LD2-VM Mainboard
105b 0d7c D270S/D250S Motherboard
+ 1071 8209 Medion MIM 2240 Notebook PC [MD98100]
144d c072 Notebook N150P
1458 5006 GA-D525TUD
1462 7418 Wind PC MS-7418
27d0 NM10/ICH7 Family PCI Express Port 1
103c 309f Compaq nx9420 Notebook
103c 30a3 Compaq nw8440
+ 1071 8209 Medion MIM 2240 Notebook PC [MD98100]
144d c072 Notebook N150P
1458 5001 GA-D525TUD
1462 7418 Wind PC MS-7418
27d2 NM10/ICH7 Family PCI Express Port 2
103c 309f Compaq nx9420 Notebook
103c 30a3 Compaq nw8440
+ 1071 8209 Medion MIM 2240 Notebook PC [MD98100]
144d c072 Notebook N150P
1462 7418 Wind PC MS-7418
1775 11cc CC11/CL11
8086 544b Desktop Board D425KT
27d4 NM10/ICH7 Family PCI Express Port 3
+ 1071 8209 Medion MIM 2240 Notebook PC [MD98100]
144d c072 Notebook N150P
1462 7418 Wind PC MS-7418
1775 11cc CC11/CL11
8086 544b Desktop Board D425KT
27d6 NM10/ICH7 Family PCI Express Port 4
103c 30a3 Compaq nw8440
+ 1071 8209 Medion MIM 2240 Notebook PC [MD98100]
144d c072 Notebook N150P
1462 7418 Wind PC MS-7418
1775 11cc CC11/CL11
1043 8290 P5KPL-VM Motherboard
1043 82ea P5KPL-CM Motherboard
105b 0d7c D270S/D250S Motherboard
+ 1071 8207 Medion MIM 2240 Notebook PC [MD98100]
107b 5048 E4500
10f7 8338 Panasonic CF-Y5 laptop
1179 ff10 Toshiba Satellite A100-796 audio (Realtek ALC861)
103c 2a3b Pavilion A1512X
1043 8179 P5KPL-VM Motherboard
105b 0d7c D270S/D250S Motherboard
+ 1071 8209 Medion MIM 2240 Notebook PC [MD98100]
10f7 8338 Panasonic CF-Y5 laptop
144d c072 Notebook N150P
1458 5001 GA-8I945PG-RH/GA-D525TUD Mainboard
103c 30d9 Presario C700
104d 9005 Vaio VGN-FZ260E
104d 902d VAIO VGN-NR120E
+ 17c0 4083 Medion WIM 2210 Notebook PC [MD96850]
2820 82801H (ICH8 Family) 4 port SATA Controller [IDE mode]
1028 01da OptiPlex 745
1462 7235 P965 Neo MS-7235 mainboard
2821 82801HR/HO/HH (ICH8R/DO/DH) 6 port SATA Controller [AHCI mode]
- 2822 82801 SATA Controller [RAID mode]
+ 2822 SATA Controller [RAID mode]
1028 020d Inspiron 530
103c 2a6f Asus IPIBL-LB Motherboard
- 2823 Wellsburg sSATA RAID Controller
+ 2823 C610/X99 series chipset sSATA Controller [RAID mode]
2824 82801HB (ICH8) 4 port SATA Controller [AHCI mode]
1043 81ec P5B
2825 82801HR/HO/HH (ICH8R/DO/DH) 2 port SATA Controller [IDE mode]
1028 01da OptiPlex 745
1462 7235 P965 Neo MS-7235 mainboard
2826 C600/X79 series chipset SATA RAID Controller
- 2827 Wellsburg sSATA RAID Controller
+ 2827 C610/X99 series chipset sSATA Controller [RAID mode]
2828 82801HM/HEM (ICH8M/ICH8M-E) SATA Controller [IDE mode]
1028 01f3 Inspiron 1420
103c 30c0 Compaq 6710b
104d 9005 Vaio VGN-FZ260E
104d 902d VAIO VGN-NR120E
17aa 20a7 ThinkPad T61/R61
+ 17c0 4083 Medion WIM 2210 Notebook PC [MD96850]
e4bf cc47 CCG-RUMBA
282a 82801 Mobile SATA Controller [RAID mode]
1028 040b Latitude E6510
104d 902d VAIO VGN-NR120E
1462 7235 P965 Neo MS-7235 mainboard
17aa 20aa ThinkPad T61/R61
+ 17c0 4083 Medion WIM 2210 Notebook PC [MD96850]
e4bf cc47 CCG-RUMBA
2831 82801H (ICH8 Family) USB UHCI Controller #2
1025 0121 Aspire 5920G
104d 902d VAIO VGN-NR120E
1462 7235 P965 Neo MS-7235 mainboard
17aa 20aa ThinkPad T61/R61
+ 17c0 4083 Medion WIM 2210 Notebook PC [MD96850]
e4bf cc47 CCG-RUMBA
2832 82801H (ICH8 Family) USB UHCI Controller #3
1025 0121 Aspire 5920G
104d 9005 Vaio VGN-FZ260E
104d 902d VAIO VGN-NR120E
17aa 20aa ThinkPad T61/R61
+ 17c0 4083 Medion WIM 2210 Notebook PC [MD96850]
e4bf cc47 CCG-RUMBA
2833 82801H (ICH8 Family) USB UHCI Controller #4
1043 81ec P5B
104d 902d VAIO VGN-NR120E
1462 7235 P965 Neo MS-7235 mainboard
17aa 20aa ThinkPad T61/R61
+ 17c0 4083 Medion WIM 2210 Notebook PC [MD96850]
e4bf cc47 CCG-RUMBA
2835 82801H (ICH8 Family) USB UHCI Controller #5
1025 0121 Acer Aspire 5920G
104d 9005 Vaio VGN-FZ260E
104d 902d VAIO VGN-NR120E
17aa 20aa Thinkpad T61/R61
+ 17c0 4083 Medion WIM 2210 Notebook PC [MD96850]
e4bf cc47 CCG-RUMBA
2836 82801H (ICH8 Family) USB2 EHCI Controller #1
1025 0121 Aspire 5920G
104d 902d VAIO VGN-NR120E
1462 7235 P965 Neo MS-7235 mainboard
17aa 20ab ThinkPad T61/R61
+ 17c0 4083 Medion WIM 2210 Notebook PC [MD96850]
e4bf cc47 CCG-RUMBA
283a 82801H (ICH8 Family) USB2 EHCI Controller #2
1025 0121 Acer Aspire 5920G
104d 9005 Vaio VGN-FZ260E
104d 902d VAIO VGN-NR120E
17aa 20ab ThinkPad T61/R61
+ 17c0 4083 Medion WIM 2210 Notebook PC [MD96850]
e4bf cc47 CCG-RUMBA
283e 82801H (ICH8 Family) SMBus Controller
1025 0121 Aspire 5920G
104d 902d VAIO VGN-NR120E
1462 7235 P965 Neo MS-7235 mainboard
17aa 20a9 ThinkPad T61/R61
+ 17c0 4083 Medion WIM 2210 Notebook PC [MD96850]
e4bf cc47 CCG-RUMBA
283f 82801H (ICH8 Family) PCI Express Port 1
1028 01da OptiPlex 745
103c 30c1 Compaq 6910p
104d 902d VAIO VGN-NR120E
17aa 20ad ThinkPad T61/R61
+ 17c0 4083 Medion WIM 2210 Notebook PC [MD96850]
2841 82801H (ICH8 Family) PCI Express Port 2
103c 30c1 Compaq 6910p
104d 902d VAIO VGN-NR120E
17aa 20ad ThinkPad T61/R61
+ 17c0 4083 Medion WIM 2210 Notebook PC [MD96850]
2843 82801H (ICH8 Family) PCI Express Port 3
104d 902d VAIO VGN-NR120E
17aa 20ad ThinkPad T61/R61
+ 17c0 4083 Medion WIM 2210 Notebook PC [MD96850]
2845 82801H (ICH8 Family) PCI Express Port 4
17aa 20ad ThinkPad T61/R61
+ 17c0 4083 Medion WIM 2210 Notebook PC [MD96850]
2847 82801H (ICH8 Family) PCI Express Port 5
1028 01da OptiPlex 745
103c 30c1 Compaq 6910p
17aa 20ad ThinkPad T61/R61
+ 17c0 4083 Medion WIM 2210 Notebook PC [MD96850]
2849 82801H (ICH8 Family) PCI Express Port 6
284b 82801H (ICH8 Family) HD Audio Controller
1025 011f Realtek ALC268 audio codec
104d 902d VAIO VGN-NR120E
14f1 5051 Presario C700
17aa 20ac ThinkPad T61/R61
+ 17c0 4088 Medion WIM 2210 Notebook PC [MD96850]
8384 7616 Dell Vostro 1400
e4bf cc47 CCG-RUMBA
284f 82801H (ICH8 Family) Thermal Reporting Device
104d 9005 Vaio VGN-FZ260E
104d 902d VAIO VGN-NR120E
17aa 20a6 ThinkPad T61/R61
+ 17c0 4083 Medion WIM 2210 Notebook PC [MD96850]
e4bf cc47 CCG-RUMBA
2912 82801IH (ICH9DH) LPC Interface Controller
2914 82801IO (ICH9DO) LPC Interface Controller
104d 902d VAIO VGN-NR120E
17aa 20b1 ThinkPad T61
17aa 20b3 ThinkPad T61/R61
+ 17c0 4082 Medion WIM 2210 Notebook PC [MD96850]
e4bf cc47 CCG-RUMBA
2a01 Mobile PM965/GM965/GL960 PCI Express Root Port
2a02 Mobile GM965/GL960 Integrated Graphics Controller (primary)
103c 30d9 Presario C700
104d 902d VAIO VGN-NR120E
17aa 20b5 ThinkPad T61/R61
+ 17c0 4082 Medion WIM 2210 Notebook PC [MD96850]
e4bf cc47 CCG-RUMBA
2a03 Mobile GM965/GL960 Integrated Graphics Controller (secondary)
- 1028 01f3 Dell Inspiron 1420
+ 1028 01f3 Inspiron 1420
103c 30c0 Compaq 6710b
103c 30d9 Presario C700
104d 902d VAIO VGN-NR120E
17aa 20b5 ThinkPad T61/R61
+ 17c0 4082 Medion WIM 2210 Notebook PC [MD96850]
e4bf cc47 CCG-RUMBA
2a04 Mobile PM965/GM965 MEI Controller
103c 30c1 Compaq 6910p
2cf3 Xeon C5500/C3500 Integrated Memory Controller Channel 2 Thermal Control
2d01 Core Processor QuickPath Architecture System Address Decoder
2d10 Core Processor QPI Link 0
- 2d11 Core Processor QPI Physical 0
- 2d12 Core Processor Reserved
- 2d13 Core Processor Reserved
+ 2d11 1st Generation Core Processor QPI Physical 0
+ 2d12 1st Generation Core Processor Reserved
+ 2d13 1st Generation Core Processor Reserved
2d81 Xeon 5600 Series QuickPath Architecture System Address Decoder
2d90 Xeon 5600 Series QPI Link 0
2d91 Xeon 5600 Series QPI Physical 0
2e10 4 Series Chipset DRAM Controller
2e11 4 Series Chipset PCI Express Root Port
2e12 4 Series Chipset Integrated Graphics Controller
+ 17aa 3048 ThinkCentre M6258
2e13 4 Series Chipset Integrated Graphics Controller
2e14 4 Series Chipset HECI Controller
2e15 4 Series Chipset HECI Controller
2e94 4 Series Chipset HECI Controller
2e95 4 Series Chipset HECI Controller
2e96 4 Series Chipset PT IDER Controller
- 2f00 Haswell-E DMI2
- 2f01 Haswell-E PCI Express Root Port 0
- 2f02 Haswell-E PCI Express Root Port 1
- 2f03 Haswell-E PCI Express Root Port 1
- 2f04 Haswell-E PCI Express Root Port 2
- 2f05 Haswell-E PCI Express Root Port 2
- 2f06 Haswell-E PCI Express Root Port 2
- 2f07 Haswell-E PCI Express Root Port 2
- 2f08 Haswell-E PCI Express Root Port 3
- 2f09 Haswell-E PCI Express Root Port 3
- 2f0a Haswell-E PCI Express Root Port 3
- 2f0b Haswell-E PCI Express Root Port 3
- 2f10 Haswell-E IIO Debug
- 2f11 Haswell-E IIO Debug
- 2f12 Haswell-E IIO Debug
- 2f13 Haswell-E IIO Debug
- 2f14 Haswell-E IIO Debug
- 2f15 Haswell-E IIO Debug
- 2f16 Haswell-E IIO Debug
- 2f17 Haswell-E IIO Debug
- 2f18 Haswell-E IIO Debug
- 2f19 Haswell-E IIO Debug
- 2f1a Haswell-E IIO Debug
- 2f1b Haswell-E IIO Debug
- 2f1c Haswell-E IIO Debug
- 2f1d Haswell-E PCIe Ring Interface
- 2f1e Haswell-E Scratchpad & Semaphore Registers
- 2f1f Haswell-E Scratchpad & Semaphore Registers
- 2f20 Haswell-E DMA Channel 0
- 2f21 Haswell-E DMA Channel 1
- 2f22 Haswell-E DMA Channel 2
- 2f23 Haswell-E DMA Channel 3
- 2f24 Haswell-E DMA Channel 4
- 2f25 Haswell-E DMA Channel 5
- 2f26 Haswell-E DMA Channel 6
- 2f27 Haswell-E DMA Channel 7
- 2f28 Haswell-E Address Map, VTd_Misc, System Management
- 2f29 Haswell-E Hot Plug
- 2f2a Haswell-E RAS, Control Status and Global Errors
- 2f2c Haswell-E I/O Apic
- 2f2e Haswell-E RAID 5/6
- 2f2f Haswell-E RAID 5/6
- 2f30 Haswell-E Home Agent 0
- 2f32 Haswell-E QPI Link 0
- 2f33 Haswell-E QPI Link 1
- 2f34 Haswell-E PCIe Ring Interface
- 2f36 Haswell-E R3 QPI Link 0 & 1 Monitoring
- 2f37 Haswell-E R3 QPI Link 0 & 1 Monitoring
- 2f38 Haswell-E Home Agent 1
- 2f39 Haswell-E I/O Performance Monitoring
- 2f3a Haswell-E QPI Link 2
- 2f3e Haswell-E R3 QPI Link 2 Monitoring
- 2f3f Haswell-E R3 QPI Link 2 Monitoring
- 2f40 Haswell-E QPI Link 2
- 2f41 Haswell-E R3 QPI Link 2 Monitoring
- 2f43 Haswell-E QPI Link 2
- 2f45 Haswell-E QPI Link 2 Debug
- 2f46 Haswell-E QPI Link 2 Debug
- 2f47 Haswell-E QPI Link 2 Debug
- 2f60 Haswell-E Home Agent 1
- 2f68 Haswell-E Integrated Memory Controller 1 Target Address, Thermal & RAS Registers
- 2f6a Haswell-E Integrated Memory Controller 1 Channel Target Address Decoder
- 2f6b Haswell-E Integrated Memory Controller 1 Channel Target Address Decoder
- 2f6c Haswell-E Integrated Memory Controller 1 Channel Target Address Decoder
- 2f6d Haswell-E Integrated Memory Controller 1 Channel Target Address Decoder
- 2f6e Haswell-E DDRIO Channel 2/3 Broadcast
- 2f6f Haswell-E DDRIO Global Broadcast
- 2f70 Haswell-E Home Agent 0 Debug
- 2f71 Haswell-E Integrated Memory Controller 0 Target Address, Thermal & RAS Registers
- 2f76 Haswell-E E3 QPI Link Debug
- 2f78 Haswell-E Home Agent 1 Debug
- 2f79 Haswell-E Integrated Memory Controller 1 Target Address, Thermal & RAS Registers
- 2f7d Haswell-E Scratchpad & Semaphore Registers
- 2f7e Haswell-E E3 QPI Link Debug
- 2f80 Haswell-E QPI Link 0
- 2f81 Haswell-E R3 QPI Link 0 & 1 Monitoring
- 2f83 Haswell-E QPI Link 0
- 2f85 Haswell-E QPI Link 0 Debug
- 2f86 Haswell-E QPI Link 0 Debug
- 2f87 Haswell-E QPI Link 0 Debug
- 2f88 Haswell-E VCU
- 2f8a Haswell-E VCU
- 2f90 Haswell-E QPI Link 1
- 2f93 Haswell-E QPI Link 1
- 2f95 Haswell-E QPI Link 1 Debug
- 2f96 Haswell-E QPI Link 1 Debug
- 2f98 Haswell-E Power Control Unit
- 2f99 Haswell-E Power Control Unit
- 2f9a Haswell-E Power Control Unit
- 2f9c Haswell-E Power Control Unit
- 2fa0 Haswell-E Home Agent 0
- 2fa8 Haswell-E Integrated Memory Controller 0 Target Address, Thermal & RAS Registers
- 2faa Haswell-E Integrated Memory Controller 0 Channel Target Address Decoder
- 2fab Haswell-E Integrated Memory Controller 0 Channel Target Address Decoder
- 2fac Haswell-E Integrated Memory Controller 0 Channel Target Address Decoder
- 2fad Haswell-E Integrated Memory Controller 0 Channel Target Address Decoder
- 2fae Haswell-E DDRIO Channel 0/1 Broadcast
- 2faf Haswell-E DDRIO Global Broadcast
- 2fb0 Haswell-E Integrated Memory Controller 0 Channel 0 Thermal Control
- 2fb1 Haswell-E Integrated Memory Controller 0 Channel 1 Thermal Control
- 2fb2 Haswell-E Integrated Memory Controller 0 Channel 0 ERROR Registers
- 2fb3 Haswell-E Integrated Memory Controller 0 Channel 1 ERROR Registers
- 2fb4 Haswell-E Integrated Memory Controller 0 Channel 2 Thermal Control
- 2fb5 Haswell-E Integrated Memory Controller 0 Channel 3 Thermal Control
- 2fb6 Haswell-E Integrated Memory Controller 0 Channel 2 ERROR Registers
- 2fb7 Haswell-E Integrated Memory Controller 0 Channel 3 ERROR Registers
- 2fb8 Haswell-E DDRIO (VMSE) 2 & 3
- 2fb9 Haswell-E DDRIO (VMSE) 2 & 3
- 2fba Haswell-E DDRIO (VMSE) 2 & 3
- 2fbb Haswell-E DDRIO (VMSE) 2 & 3
- 2fbc Haswell-E DDRIO (VMSE) 0 & 1
- 2fbd Haswell-E DDRIO (VMSE) 0 & 1
- 2fbe Haswell-E DDRIO (VMSE) 0 & 1
- 2fbf Haswell-E DDRIO (VMSE) 0 & 1
- 2fc0 Haswell-E Power Control Unit
- 2fc1 Haswell-E Power Control Unit
- 2fc2 Haswell-E Power Control Unit
- 2fc3 Haswell-E Power Control Unit
- 2fc4 Haswell-E Power Control Unit
- 2fc5 Haswell-E Power Control Unit
- 2fd0 Haswell-E Integrated Memory Controller 1 Channel 0 Thermal Control
- 2fd1 Haswell-E Integrated Memory Controller 1 Channel 1 Thermal Control
- 2fd2 Haswell-E Integrated Memory Controller 1 Channel 0 ERROR Registers
- 2fd3 Haswell-E Integrated Memory Controller 1 Channel 1 ERROR Registers
- 2fd4 Haswell-E Integrated Memory Controller 1 Channel 2 Thermal Control
- 2fd5 Haswell-E Integrated Memory Controller 1 Channel 3 Thermal Control
- 2fd6 Haswell-E Integrated Memory Controller 1 Channel 2 ERROR Registers
- 2fd7 Haswell-E Integrated Memory Controller 1 Channel 3 ERROR Registers
- 2fe0 Haswell-E Unicast Registers
- 2fe1 Haswell-E Unicast Registers
- 2fe2 Haswell-E Unicast Registers
- 2fe3 Haswell-E Unicast Registers
- 2fe4 Haswell-E Unicast Registers
- 2fe5 Haswell-E Unicast Registers
- 2fe6 Haswell-E Unicast Registers
- 2fe7 Haswell-E Unicast Registers
- 2fe8 Haswell-E Unicast Registers
- 2fe9 Haswell-E Unicast Registers
- 2fea Haswell-E Unicast Registers
- 2feb Haswell-E Unicast Registers
- 2fec Haswell-E Unicast Registers
- 2fed Haswell-E Unicast Registers
- 2fee Haswell-E Unicast Registers
- 2fef Haswell-E Unicast Registers
- 2ff0 Haswell-E Unicast Registers
- 2ff1 Haswell-E Unicast Registers
- 2ff2 Haswell-E Unicast Registers
- 2ff3 Haswell-E Unicast Registers
- 2ff4 Haswell-E Unicast Registers
- 2ff5 Haswell-E Unicast Registers
- 2ff6 Haswell-E Unicast Registers
- 2ff7 Haswell-E Unicast Registers
- 2ff8 Haswell-E Buffered Ring Agent
- 2ff9 Haswell-E Buffered Ring Agent
- 2ffa Haswell-E Buffered Ring Agent
- 2ffb Haswell-E Buffered Ring Agent
- 2ffc Haswell-E System Address Decoder & Broadcast Registers
- 2ffd Haswell-E System Address Decoder & Broadcast Registers
- 2ffe Haswell-E System Address Decoder & Broadcast Registers
+ 2f00 Xeon E5 v3/Core i7 DMI2
+ 2f01 Xeon E5 v3/Core i7 PCI Express Root Port 0
+ 2f02 Xeon E5 v3/Core i7 PCI Express Root Port 1
+ 2f03 Xeon E5 v3/Core i7 PCI Express Root Port 1
+ 2f04 Xeon E5 v3/Core i7 PCI Express Root Port 2
+ 2f05 Xeon E5 v3/Core i7 PCI Express Root Port 2
+ 2f06 Xeon E5 v3/Core i7 PCI Express Root Port 2
+ 2f07 Xeon E5 v3/Core i7 PCI Express Root Port 2
+ 2f08 Xeon E5 v3/Core i7 PCI Express Root Port 3
+ 2f09 Xeon E5 v3/Core i7 PCI Express Root Port 3
+ 2f0a Xeon E5 v3/Core i7 PCI Express Root Port 3
+ 2f0b Xeon E5 v3/Core i7 PCI Express Root Port 3
+ 2f10 Xeon E5 v3/Core i7 IIO Debug
+ 2f11 Xeon E5 v3/Core i7 IIO Debug
+ 2f12 Xeon E5 v3/Core i7 IIO Debug
+ 2f13 Xeon E5 v3/Core i7 IIO Debug
+ 2f14 Xeon E5 v3/Core i7 IIO Debug
+ 2f15 Xeon E5 v3/Core i7 IIO Debug
+ 2f16 Xeon E5 v3/Core i7 IIO Debug
+ 2f17 Xeon E5 v3/Core i7 IIO Debug
+ 2f18 Xeon E5 v3/Core i7 IIO Debug
+ 2f19 Xeon E5 v3/Core i7 IIO Debug
+ 2f1a Xeon E5 v3/Core i7 IIO Debug
+ 2f1b Xeon E5 v3/Core i7 IIO Debug
+ 2f1c Xeon E5 v3/Core i7 IIO Debug
+ 2f1d Xeon E5 v3/Core i7 PCIe Ring Interface
+ 2f1e Xeon E5 v3/Core i7 Scratchpad & Semaphore Registers
+ 2f1f Xeon E5 v3/Core i7 Scratchpad & Semaphore Registers
+ 2f20 Xeon E5 v3/Core i7 DMA Channel 0
+ 2f21 Xeon E5 v3/Core i7 DMA Channel 1
+ 2f22 Xeon E5 v3/Core i7 DMA Channel 2
+ 2f23 Xeon E5 v3/Core i7 DMA Channel 3
+ 2f24 Xeon E5 v3/Core i7 DMA Channel 4
+ 2f25 Xeon E5 v3/Core i7 DMA Channel 5
+ 2f26 Xeon E5 v3/Core i7 DMA Channel 6
+ 2f27 Xeon E5 v3/Core i7 DMA Channel 7
+ 2f28 Xeon E5 v3/Core i7 Address Map, VTd_Misc, System Management
+ 2f29 Xeon E5 v3/Core i7 Hot Plug
+ 2f2a Xeon E5 v3/Core i7 RAS, Control Status and Global Errors
+ 2f2c Xeon E5 v3/Core i7 I/O APIC
+ 2f2e Xeon E5 v3/Core i7 RAID 5/6
+ 2f2f Xeon E5 v3/Core i7 RAID 5/6
+ 2f30 Xeon E5 v3/Core i7 Home Agent 0
+ 2f32 Xeon E5 v3/Core i7 QPI Link 0
+ 2f33 Xeon E5 v3/Core i7 QPI Link 1
+ 2f34 Xeon E5 v3/Core i7 PCIe Ring Interface
+ 2f36 Xeon E5 v3/Core i7 R3 QPI Link 0 & 1 Monitoring
+ 2f37 Xeon E5 v3/Core i7 R3 QPI Link 0 & 1 Monitoring
+ 2f38 Xeon E5 v3/Core i7 Home Agent 1
+ 2f39 Xeon E5 v3/Core i7 I/O Performance Monitoring
+ 2f3a Xeon E5 v3/Core i7 QPI Link 2
+ 2f3e Xeon E5 v3/Core i7 R3 QPI Link 2 Monitoring
+ 2f3f Xeon E5 v3/Core i7 R3 QPI Link 2 Monitoring
+ 2f40 Xeon E5 v3/Core i7 QPI Link 2
+ 2f41 Xeon E5 v3/Core i7 R3 QPI Link 2 Monitoring
+ 2f43 Xeon E5 v3/Core i7 QPI Link 2
+ 2f45 Xeon E5 v3/Core i7 QPI Link 2 Debug
+ 2f46 Xeon E5 v3/Core i7 QPI Link 2 Debug
+ 2f47 Xeon E5 v3/Core i7 QPI Link 2 Debug
+ 2f60 Xeon E5 v3/Core i7 Home Agent 1
+ 2f68 Xeon E5 v3/Core i7 Integrated Memory Controller 1 Target Address, Thermal & RAS Registers
+ 2f6a Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel Target Address Decoder
+ 2f6b Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel Target Address Decoder
+ 2f6c Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel Target Address Decoder
+ 2f6d Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel Target Address Decoder
+ 2f6e Xeon E5 v3/Core i7 DDRIO Channel 2/3 Broadcast
+ 2f6f Xeon E5 v3/Core i7 DDRIO Global Broadcast
+ 2f70 Xeon E5 v3/Core i7 Home Agent 0 Debug
+ 2f71 Xeon E5 v3/Core i7 Integrated Memory Controller 0 Target Address, Thermal & RAS Registers
+ 2f76 Xeon E5 v3/Core i7 E3 QPI Link Debug
+ 2f78 Xeon E5 v3/Core i7 Home Agent 1 Debug
+ 2f79 Xeon E5 v3/Core i7 Integrated Memory Controller 1 Target Address, Thermal & RAS Registers
+ 2f7d Xeon E5 v3/Core i7 Scratchpad & Semaphore Registers
+ 2f7e Xeon E5 v3/Core i7 E3 QPI Link Debug
+ 2f80 Xeon E5 v3/Core i7 QPI Link 0
+ 2f81 Xeon E5 v3/Core i7 R3 QPI Link 0 & 1 Monitoring
+ 2f83 Xeon E5 v3/Core i7 QPI Link 0
+ 2f85 Xeon E5 v3/Core i7 QPI Link 0 Debug
+ 2f86 Xeon E5 v3/Core i7 QPI Link 0 Debug
+ 2f87 Xeon E5 v3/Core i7 QPI Link 0 Debug
+ 2f88 Xeon E5 v3/Core i7 VCU
+ 2f8a Xeon E5 v3/Core i7 VCU
+ 2f90 Xeon E5 v3/Core i7 QPI Link 1
+ 2f93 Xeon E5 v3/Core i7 QPI Link 1
+ 2f95 Xeon E5 v3/Core i7 QPI Link 1 Debug
+ 2f96 Xeon E5 v3/Core i7 QPI Link 1 Debug
+ 2f98 Xeon E5 v3/Core i7 Power Control Unit
+ 2f99 Xeon E5 v3/Core i7 Power Control Unit
+ 2f9a Xeon E5 v3/Core i7 Power Control Unit
+ 2f9c Xeon E5 v3/Core i7 Power Control Unit
+ 2fa0 Xeon E5 v3/Core i7 Home Agent 0
+ 2fa8 Xeon E5 v3/Core i7 Integrated Memory Controller 0 Target Address, Thermal & RAS Registers
+ 2faa Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel Target Address Decoder
+ 2fab Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel Target Address Decoder
+ 2fac Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel Target Address Decoder
+ 2fad Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel Target Address Decoder
+ 2fae Xeon E5 v3/Core i7 DDRIO Channel 0/1 Broadcast
+ 2faf Xeon E5 v3/Core i7 DDRIO Global Broadcast
+ 2fb0 Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel 0 Thermal Control
+ 2fb1 Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel 1 Thermal Control
+ 2fb2 Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel 0 ERROR Registers
+ 2fb3 Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel 1 ERROR Registers
+ 2fb4 Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel 2 Thermal Control
+ 2fb5 Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel 3 Thermal Control
+ 2fb6 Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel 2 ERROR Registers
+ 2fb7 Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel 3 ERROR Registers
+ 2fb8 Xeon E5 v3/Core i7 DDRIO (VMSE) 2 & 3
+ 2fb9 Xeon E5 v3/Core i7 DDRIO (VMSE) 2 & 3
+ 2fba Xeon E5 v3/Core i7 DDRIO (VMSE) 2 & 3
+ 2fbb Xeon E5 v3/Core i7 DDRIO (VMSE) 2 & 3
+ 2fbc Xeon E5 v3/Core i7 DDRIO (VMSE) 0 & 1
+ 2fbd Xeon E5 v3/Core i7 DDRIO (VMSE) 0 & 1
+ 2fbe Xeon E5 v3/Core i7 DDRIO (VMSE) 0 & 1
+ 2fbf Xeon E5 v3/Core i7 DDRIO (VMSE) 0 & 1
+ 2fc0 Xeon E5 v3/Core i7 Power Control Unit
+ 2fc1 Xeon E5 v3/Core i7 Power Control Unit
+ 2fc2 Xeon E5 v3/Core i7 Power Control Unit
+ 2fc3 Xeon E5 v3/Core i7 Power Control Unit
+ 2fc4 Xeon E5 v3/Core i7 Power Control Unit
+ 2fc5 Xeon E5 v3/Core i7 Power Control Unit
+ 2fd0 Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel 0 Thermal Control
+ 2fd1 Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel 1 Thermal Control
+ 2fd2 Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel 0 ERROR Registers
+ 2fd3 Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel 1 ERROR Registers
+ 2fd4 Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel 2 Thermal Control
+ 2fd5 Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel 3 Thermal Control
+ 2fd6 Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel 2 ERROR Registers
+ 2fd7 Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel 3 ERROR Registers
+ 2fe0 Xeon E5 v3/Core i7 Unicast Registers
+ 2fe1 Xeon E5 v3/Core i7 Unicast Registers
+ 2fe2 Xeon E5 v3/Core i7 Unicast Registers
+ 2fe3 Xeon E5 v3/Core i7 Unicast Registers
+ 2fe4 Xeon E5 v3/Core i7 Unicast Registers
+ 2fe5 Xeon E5 v3/Core i7 Unicast Registers
+ 2fe6 Xeon E5 v3/Core i7 Unicast Registers
+ 2fe7 Xeon E5 v3/Core i7 Unicast Registers
+ 2fe8 Xeon E5 v3/Core i7 Unicast Registers
+ 2fe9 Xeon E5 v3/Core i7 Unicast Registers
+ 2fea Xeon E5 v3/Core i7 Unicast Registers
+ 2feb Xeon E5 v3/Core i7 Unicast Registers
+ 2fec Xeon E5 v3/Core i7 Unicast Registers
+ 2fed Xeon E5 v3/Core i7 Unicast Registers
+ 2fee Xeon E5 v3/Core i7 Unicast Registers
+ 2fef Xeon E5 v3/Core i7 Unicast Registers
+ 2ff0 Xeon E5 v3/Core i7 Unicast Registers
+ 2ff1 Xeon E5 v3/Core i7 Unicast Registers
+ 2ff2 Xeon E5 v3/Core i7 Unicast Registers
+ 2ff3 Xeon E5 v3/Core i7 Unicast Registers
+ 2ff4 Xeon E5 v3/Core i7 Unicast Registers
+ 2ff5 Xeon E5 v3/Core i7 Unicast Registers
+ 2ff6 Xeon E5 v3/Core i7 Unicast Registers
+ 2ff7 Xeon E5 v3/Core i7 Unicast Registers
+ 2ff8 Xeon E5 v3/Core i7 Buffered Ring Agent
+ 2ff9 Xeon E5 v3/Core i7 Buffered Ring Agent
+ 2ffa Xeon E5 v3/Core i7 Buffered Ring Agent
+ 2ffb Xeon E5 v3/Core i7 Buffered Ring Agent
+ 2ffc Xeon E5 v3/Core i7 System Address Decoder & Broadcast Registers
+ 2ffd Xeon E5 v3/Core i7 System Address Decoder & Broadcast Registers
+ 2ffe Xeon E5 v3/Core i7 System Address Decoder & Broadcast Registers
+ 3165 Wireless 3165
+# Stone Peak 1x1
+ 8086 4010 Dual Band Wireless AC 3165
+# Stone Peak 1x1
+ 8086 4210 Dual Band Wireless AC 3165
3200 GD31244 PCI-X SATA HBA
1775 c200 C2K onboard SATA host bus adapter
3310 IOP348 I/O Processor
3b08 5 Series Chipset LPC Interface Controller
3b09 Mobile 5 Series Chipset LPC Interface Controller
1025 0347 Aspire 7740G
+ 144d c06a R730 Laptop
+ 17c0 10d2 Medion Akoya E7214 Notebook PC [MD98410]
3b0a 5 Series Chipset LPC Interface Controller
1028 02da OptiPlex 980
15d9 060d C7SIM-Q Motherboard
15d9 060d C7SIM-Q Motherboard
3b23 5 Series/3400 Series Chipset 4 port SATA AHCI Controller
3b25 5 Series/3400 Series Chipset SATA RAID Controller
+ 103c 3118 HP Smart Array B110i SATA RAID Controller
3b26 5 Series/3400 Series Chipset 2 port SATA IDE Controller
3b28 5 Series/3400 Series Chipset 4 port SATA IDE Controller
+ 144d c06a R730 Laptop
+ 17c0 10d2 Medion Akoya E7214 Notebook PC [MD98410]
3b29 5 Series/3400 Series Chipset 4 port SATA AHCI Controller
1025 0347 Aspire 7740G
+ 144d c06a R730 Laptop
+ 17c0 10d2 Medion Akoya E7214 Notebook PC [MD98410]
3b2c 5 Series/3400 Series Chipset SATA RAID Controller
3b2d 5 Series/3400 Series Chipset 2 port SATA IDE Controller
+ 144d c06a R730 Laptop
+ 17c0 10d2 Medion Akoya E7214 Notebook PC [MD98410]
e4bf 50c1 PC1-GROOVE
3b2e 5 Series/3400 Series Chipset 4 port SATA IDE Controller
e4bf 50c1 PC1-GROOVE
1025 0347 Aspire 7740G
1028 02da OptiPlex 980
1028 040b Latitude E6510
+ 144d c06a R730 Laptop
15d9 060d C7SIM-Q Motherboard
+ 17c0 10d2 Medion Akoya E7214 Notebook PC [MD98410]
e4bf 50c1 PC1-GROOVE
3b32 5 Series/3400 Series Chipset Thermal Subsystem
1025 0347 Aspire 7740G
+ 144d c06a R730 Laptop
+ 17c0 10d2 Medion Akoya E7214 Notebook PC [MD98410]
3b34 5 Series/3400 Series Chipset USB2 Enhanced Host Controller
1025 0347 Aspire 7740G
1028 02da OptiPlex 980
1028 040b Latitude E6510
+ 144d c06a R730 Laptop
15d9 060d C7SIM-Q Motherboard
+ 17c0 10d2 Medion Akoya E7214 Notebook PC [MD98410]
e4bf 50c1 PC1-GROOVE
3b36 5 Series/3400 Series Chipset USB Universal Host Controller
3b37 5 Series/3400 Series Chipset USB Universal Host Controller
1025 0347 Aspire 7740G
1028 02da OptiPlex 980
1028 040b Latitude E6510
+ 144d c06a R730 Laptop
15d9 060d C7SIM-Q Motherboard
+ 17c0 10d2 Medion Akoya E7214 Notebook PC [MD98410]
e4bf 50c1 PC1-GROOVE
3b3e 5 Series/3400 Series Chipset USB Universal Host Controller
3b3f 5 Series/3400 Series Chipset USB Universal Host Controller
3b42 5 Series/3400 Series Chipset PCI Express Root Port 1
1028 02da OptiPlex 980
1028 040b Latitude E6510
+ 144d c06a R730 Laptop
15d9 060d C7SIM-Q Motherboard
+ 17c0 10d2 Medion Akoya E7214 Notebook PC [MD98410]
3b44 5 Series/3400 Series Chipset PCI Express Root Port 2
1028 040b Latitude E6510
15d9 060d C7SIM-Q Motherboard
+ 17c0 10d2 Medion Akoya E7214 Notebook PC [MD98410]
3b46 5 Series/3400 Series Chipset PCI Express Root Port 3
1028 040b Latitude E6510
+ 144d c06a R730 Laptop
+ 17c0 10d2 Medion Akoya E7214 Notebook PC [MD98410]
3b48 5 Series/3400 Series Chipset PCI Express Root Port 4
1028 040b Latitude E6510
+ 144d c06a R730 Laptop
3b4a 5 Series/3400 Series Chipset PCI Express Root Port 5
1028 02da OptiPlex 980
+ 17c0 10d2 Medion Akoya E7214 Notebook PC [MD98410]
3b4c 5 Series/3400 Series Chipset PCI Express Root Port 6
3b4e 5 Series/3400 Series Chipset PCI Express Root Port 7
3b50 5 Series/3400 Series Chipset PCI Express Root Port 8
1025 0347 Aspire 7740G
1028 02da OptiPlex 980
1028 040b Latitude E6510
+ 144d c06a R730 Laptop
15d9 060d C7SIM-Q Motherboard
+ 17c0 10d2 Medion Akoya E7214 Notebook PC [MD98410]
e4bf 50c1 PC1-GROOVE
3b57 5 Series/3400 Series Chipset High Definition Audio
3b64 5 Series/3400 Series Chipset HECI Controller
1025 0347 Aspire 7740G
15d9 060d C7SIM-Q Motherboard
+ 17c0 10d2 Medion Akoya E7214 Notebook PC [MD98410]
e4bf 50c1 PC1-GROOVE
3b65 5 Series/3400 Series Chipset HECI Controller
3b66 5 Series/3400 Series Chipset PT IDER Controller
4222 PRO/Wireless 3945ABG [Golan] Network Connection
103c 135c PRO/Wireless 3945ABG [Golan] Network Connection
8086 1000 PRO/Wireless 3945ABG Network Connection
- 8086 1001 PRO/Wireless 3945ABG Network Connection
+ 8086 1001 WM3945ABG MOW2
8086 1005 PRO/Wireless 3945BG Network Connection
8086 1034 PRO/Wireless 3945BG Network Connection
8086 1044 PRO/Wireless 3945BG Network Connection
65f9 5100 Chipset PCI Express x8 Port 6-7
65fa 5100 Chipset PCI Express x16 Port 4-7
65ff 5100 Chipset DMA Engine
+ 6f00 Broadwell DMI2
+ 6f01 Broadwell PCI Express Root Port 0
+ 6f02 Broadwell PCI Express Root Port 1
+ 6f03 Broadwell PCI Express Root Port 1
+ 6f04 Broadwell PCI Express Root Port 2
+ 6f05 Broadwell PCI Express Root Port 2
+ 6f06 Broadwell PCI Express Root Port 2
+ 6f07 Broadwell PCI Express Root Port 2
+ 6f08 Broadwell PCI Express Root Port 3
+ 6f09 Broadwell PCI Express Root Port 3
+ 6f0a Broadwell PCI Express Root Port 3
+ 6f0b Broadwell PCI Express Root Port 3
+ 6f10 Broadwell IIO Debug
+ 6f11 Broadwell IIO Debug
+ 6f12 Broadwell IIO Debug
+ 6f13 Broadwell IIO Debug
+ 6f14 Broadwell IIO Debug
+ 6f15 Broadwell IIO Debug
+ 6f16 Broadwell IIO Debug
+ 6f17 Broadwell IIO Debug
+ 6f18 Broadwell IIO Debug
+ 6f19 Broadwell IIO Debug
+ 6f1a Broadwell IIO Debug
+ 6f1b Broadwell IIO Debug
+ 6f1c Broadwell IIO Debug
+ 6f1d Broadwell R2PCIe Agent
+ 6f1e Broadwell Ubox
+ 6f1f Broadwell Ubox
+ 6f20 Broadwell-DE Crystal Beach DMA Channel 0
+ 6f21 Broadwell-DE Crystal Beach DMA Channel 1
+ 6f22 Broadwell-DE Crystal Beach DMA Channel 2
+ 6f23 Broadwell-DE Crystal Beach DMA Channel 3
+ 6f24 Broadwell-DE Crystal Beach DMA Channel 4
+ 6f25 Broadwell-DE Crystal Beach DMA Channel 5
+ 6f26 Broadwell-DE Crystal Beach DMA Channel 6
+ 6f27 Broadwell-DE Crystal Beach DMA Channel 7
+ 6f28 Broadwell Adress Map/VTd_Misc/System Management
+ 6f29 Broadwell IIO Hot Plug
+ 6f2a Broadwell IIO RAS/Control Status/Global Errors
+ 6f2c Broadwell I/O APIC
+ 6f30 Broadwell Home Agent 0
+ 6f32 Broadwell QPI Link 0
+ 6f33 Broadwell QPI Link 1
+ 6f34 Broadwell R2PCIe Agent
+ 6f36 Broadwell R3 QPI Link 0/1
+ 6f37 Broadwell R3 QPI Link 0/1
+ 6f38 Broadwell Home Agent 1
+ 6f39 Broadwell IO Performance Monitoring
+ 6f3a Broadwell QPI Link 2
+ 6f3e Broadwell R3 QPI Link 2
+ 6f3f Broadwell R3 QPI Link 2
+ 6f40 Broadwell QPI Link 2
+ 6f41 Broadwell R3 QPI Link 2
+ 6f43 Broadwell QPI Link 2
+ 6f45 Broadwell QPI Link 2 Debug
+ 6f46 Broadwell QPI Link 2 Debug
+ 6f47 Broadwell QPI Link 2 Debug
+ 6f60 Broadwell Home Agent 1
+ 6f68 Broadwell Target Address/Thermal/RAS
+ 6f6a Broadwell Channel Target Address Decoder
+ 6f6b Broadwell Channel Target Address Decoder
+ 6f6c Broadwell Channel Target Address Decoder
+ 6f6d Broadwell Channel Target Address Decoder
+ 6f6e Broadwell DDRIO Channel 2/3 Broadcast
+ 6f6f Broadwell DDRIO Global Broadcast
+ 6f70 Broadwell Home Agent 0 Debug
+ 6f71 Broadwell Memory Controller 0 - Target Address/Thermal/RAS
+ 6f76 Broadwell R3 QPI Link Debug
+ 6f78 Broadwell Home Agent 1 Debug
+ 6f79 Broadwell Target Address/Thermal/RAS
+ 6f7d Broadwell Ubox
+ 6f7e Broadwell R3 QPI Link Debug
+ 6f80 Broadwell QPI Link 0
+ 6f81 Broadwell R3 QPI Link 0/1
+ 6f83 Broadwell QPI Link 0
+ 6f85 Broadwell QPI Link 0 Debug
+ 6f86 Broadwell QPI Link 0 Debug
+ 6f87 Broadwell QPI Link 0 Debug
+ 6f88 Broadwell Power Control Unit
+ 6f8a Broadwell Power Control Unit
+ 6f90 Broadwell QPI Link 1
+ 6f93 Broadwell QPI Link 1
+ 6f95 Broadwell QPI Link 1 Debug
+ 6f96 Broadwell QPI Link 1 Debug
+ 6f98 Broadwell Power Control Unit
+ 6f99 Broadwell Power Control Unit
+ 6f9a Broadwell Power Control Unit
+ 6f9c Broadwell Power Control Unit
+ 6fa0 Broadwell Home Agent 0
+ 6fa8 Broadwell Memory Controller 0 - Target Address/Thermal/RAS
+ 6faa Broadwell Memory Controller 0 - Channel Target Address Decoder
+ 6fab Broadwell Memory Controller 0 - Channel Target Address Decoder
+ 6fac Broadwell Memory Controller 0 - Channel Target Address Decoder
+ 6fad Broadwell Memory Controller 0 - Channel Target Address Decoder
+ 6fae Broadwell DDRIO Channel 0/1 Broadcast
+ 6faf Broadwell DDRIO Global Broadcast
+ 6fb0 Broadwell Memory Controller 0 - Channel 0 Thermal Control
+ 6fb1 Broadwell Memory Controller 0 - Channel 1 Thermal Control
+ 6fb2 Broadwell Memory Controller 0 - Channel 0 Error
+ 6fb3 Broadwell Memory Controller 0 - Channel 1 Error
+ 6fb4 Broadwell Memory Controller 0 - Channel 2 Thermal Control
+ 6fb5 Broadwell Memory Controller 0 - Channel 3 Thermal Control
+ 6fb6 Broadwell Memory Controller 0 - Channel 2 Error
+ 6fb7 Broadwell Memory Controller 0 - Channel 3 Error
+ 6fb8 Broadwell DDRIO Channel 2/3 Interface
+ 6fb9 Broadwell DDRIO Channel 2/3 Interface
+ 6fba Broadwell DDRIO Channel 2/3 Interface
+ 6fbb Broadwell DDRIO Channel 2/3 Interface
+ 6fbc Broadwell DDRIO Channel 0/1 Interface
+ 6fbd Broadwell DDRIO Channel 0/1 Interface
+ 6fbe Broadwell DDRIO Channel 0/1 Interface
+ 6fbf Broadwell DDRIO Channel 0/1 Interface
+ 6fc0 Broadwell Power Control Unit
+ 6fc1 Broadwell Power Control Unit
+ 6fc2 Broadwell Power Control Unit
+ 6fc3 Broadwell Power Control Unit
+ 6fc4 Broadwell Power Control Unit
+ 6fc5 Broadwell Power Control Unit
+ 6fc6 Broadwell Power Control Unit
+ 6fc7 Broadwell Power Control Unit
+ 6fc8 Broadwell Power Control Unit
+ 6fc9 Broadwell Power Control Unit
+ 6fca Broadwell Power Control Unit
+ 6fcb Broadwell Power Control Unit
+ 6fcc Broadwell Power Control Unit
+ 6fcd Broadwell Power Control Unit
+ 6fce Broadwell Power Control Unit
+ 6fcf Broadwell Power Control Unit
+ 6fd0 Broadwell Memory Controller 1 - Channel 0 Thermal Control
+ 6fd1 Broadwell Memory Controller 1 - Channel 1 Thermal Control
+ 6fd2 Broadwell Memory Controller 1 - Channel 0 Error
+ 6fd3 Broadwell Memory Controller 1 - Channel 1 Error
+ 6fd4 Broadwell Memory Controller 1 - Channel 2 Thermal Control
+ 6fd5 Broadwell Memory Controller 1 - Channel 3 Thermal Control
+ 6fd6 Broadwell Memory Controller 1 - Channel 2 Error
+ 6fd7 Broadwell Memory Controller 1 - Channel 3 Error
+ 6fe0 Broadwell Caching Agent
+ 6fe1 Broadwell Caching Agent
+ 6fe2 Broadwell Caching Agent
+ 6fe3 Broadwell Caching Agent
+ 6fe4 Broadwell Caching Agent
+ 6fe5 Broadwell Caching Agent
+ 6fe6 Broadwell Caching Agent
+ 6fe7 Broadwell Caching Agent
+ 6fe8 Broadwell Caching Agent
+ 6fe9 Broadwell Caching Agent
+ 6fea Broadwell Caching Agent
+ 6feb Broadwell Caching Agent
+ 6fec Broadwell Caching Agent
+ 6fed Broadwell Caching Agent
+ 6fee Broadwell Caching Agent
+ 6fef Broadwell Caching Agent
+ 6ff0 Broadwell Caching Agent
+ 6ff1 Broadwell Caching Agent
+ 6ff8 Broadwell Caching Agent
+ 6ff9 Broadwell Caching Agent
+ 6ffa Broadwell Caching Agent
+ 6ffb Broadwell Caching Agent
+ 6ffc Broadwell Caching Agent
+ 6ffd Broadwell Caching Agent
+ 6ffe Broadwell Caching Agent
7000 82371SB PIIX3 ISA [Natoma/Triton II]
1af4 1100 Qemu virtual machine
7010 82371SB PIIX3 IDE [Natoma/Triton II]
8c5d 8 Series/C220 Series Chipset Family LPC Controller
8c5e 8 Series/C220 Series Chipset Family LPC Controller
8c5f 8 Series/C220 Series Chipset Family LPC Controller
- 8d00 Wellsburg 4-port SATA Controller [IDE mode]
- 8d02 Wellsburg 6-Port SATA Controller [AHCI mode]
- 8d04 Wellsburg SATA Controller [RAID mode]
- 8d06 Wellsburg SATA Controller [RAID mode]
+ 8c80 9 Series Chipset Family SATA Controller [IDE Mode]
+ 8c81 9 Series Chipset Family SATA Controller [IDE Mode]
+ 8c82 9 Series Chipset Family SATA Controller [AHCI Mode]
+ 8c83 9 Series Chipset Family SATA Controller [AHCI Mode]
+ 8c84 9 Series Chipset Family SATA Controller [RAID Mode]
+ 8c85 9 Series Chipset Family SATA Controller [RAID Mode]
+ 8c86 9 Series Chipset Family SATA Controller [RAID Mode]
+ 8c87 9 Series Chipset Family SATA Controller [RAID Mode]
+ 8c88 9 Series Chipset Family SATA Controller [IDE Mode]
+ 8c89 9 Series Chipset Family SATA Controller [IDE Mode]
+ 8c8e 9 Series Chipset Family SATA Controller [RAID Mode]
+ 8c8f 9 Series Chipset Family SATA Controller [RAID Mode]
+ 8c90 9 Series Chipset Family PCI Express Root Port 1
+ 8c92 9 Series Chipset Family PCI Express Root Port 2
+ 8c94 9 Series Chipset Family PCI Express Root Port 3
+ 8c96 9 Series Chipset Family PCI Express Root Port 4
+ 8c98 9 Series Chipset Family PCI Express Root Port 5
+ 8c9a 9 Series Chipset Family PCI Express Root Port 6
+ 8c9c 9 Series Chipset Family PCI Express Root Port 7
+ 8c9e 9 Series Chipset Family PCI Express Root Port 8
+ 8ca0 9 Series Chipset Family HD Audio Controller
+ 8ca2 9 Series Chipset Family SMBus Controller
+ 8ca4 9 Series Chipset Family Thermal Controller
+ 8ca6 9 Series Chipset Family USB EHCI Controller #1
+ 8cad 9 Series Chipset Family USB EHCI Controller #2
+ 8cb1 9 Series Chipset Family USB xHCI Controller
+ 8cb3 9 Series Chipset Family LAN Controller
+ 8cba 9 Series Chipset Family ME Interface #1
+ 8cbb 9 Series Chipset Family ME Interface #2
+ 8cbc 9 Series Chipset Family IDE-R Controller
+ 8cbd 9 Series Chipset Family KT Controller
+ 8cc1 9 Series Chipset Family LPC Controller
+ 8cc2 9 Series Chipset Family LPC Controller
+ 8cc3 9 Series Chipset Family HM97 LPC Controller
+ 8cc4 9 Series Chipset Family Z97 LPC Controller
+ 8cc6 9 Series Chipset Family H97 Controller
+ 8d00 C610/X99 series chipset 4-port SATA Controller [IDE mode]
+ 8d02 C610/X99 series chipset 6-Port SATA Controller [AHCI mode]
+ 8d04 C610/X99 series chipset SATA Controller [RAID mode]
+ 8d06 C610/X99 series chipset SATA Controller [RAID mode]
17aa 1031 ThinkServer RAID 110i
- 8d08 Wellsburg 2-port SATA Controller [IDE mode]
- 8d0e Wellsburg SATA Controller [RAID mode]
- 8d10 Wellsburg PCI Express Root Port #1
- 8d11 Wellsburg PCI Express Root Port #1
- 8d12 Wellsburg PCI Express Root Port #2
- 8d13 Wellsburg PCI Express Root Port #2
- 8d14 Wellsburg PCI Express Root Port #3
- 8d15 Wellsburg PCI Express Root Port #3
- 8d16 Wellsburg PCI Express Root Port #4
- 8d17 Wellsburg PCI Express Root Port #4
- 8d18 Wellsburg PCI Express Root Port #5
- 8d19 Wellsburg PCI Express Root Port #5
- 8d1a Wellsburg PCI Express Root Port #6
- 8d1b Wellsburg PCI Express Root Port #6
- 8d1c Wellsburg PCI Express Root Port #7
- 8d1d Wellsburg PCI Express Root Port #7
- 8d1e Wellsburg PCI Express Root Port #8
- 8d1f Wellsburg PCI Express Root Port #8
- 8d20 Wellsburg HD Audio Controller
- 8d21 Wellsburg HD Audio Controller
- 8d22 Wellsburg SMBus Controller
- 8d24 Wellsburg Thermal Subsystem
- 8d26 Wellsburg USB Enhanced Host Controller #1
- 8d2d Wellsburg USB Enhanced Host Controller #2
- 8d31 Wellsburg USB xHCI Host Controller
- 8d33 Wellsburg LAN Controller
- 8d34 Wellsburg NAND Controller
- 8d3a Wellsburg MEI Controller #1
- 8d3b Wellsburg MEI Controller #2
- 8d3c Wellsburg IDE-r Controller
- 8d3d Wellsburg KT Controller
- 8d40 Wellsburg LPC Controller
- 8d41 Wellsburg LPC Controller
- 8d42 Wellsburg LPC Controller
- 8d43 Wellsburg LPC Controller
- 8d44 Wellsburg LPC Controller
- 8d45 Wellsburg LPC Controller
- 8d46 Wellsburg LPC Controller
- 8d47 Wellsburg LPC Controller
- 8d48 Wellsburg LPC Controller
- 8d49 Wellsburg LPC Controller
- 8d4a Wellsburg LPC Controller
- 8d4b Wellsburg LPC Controller
- 8d4c Wellsburg LPC Controller
- 8d4d Wellsburg LPC Controller
- 8d4e Wellsburg LPC Controller
- 8d4f Wellsburg LPC Controller
- 8d60 Wellsburg sSATA Controller [IDE mode]
- 8d62 Wellsburg sSATA Controller [AHCI mode]
- 8d64 Wellsburg sSATA Controller [RAID mode]
- 8d66 Wellsburg sSATA Controller [RAID mode]
- 8d68 Wellsburg sSATA Controller [IDE mode]
- 8d6e Wellsburg sSATA Controller [RAID mode]
- 8d7c Wellsburg SPSR
- 8d7d Wellsburg MS SMBus 0
- 8d7e Wellsburg MS SMBus 1
- 8d7f Wellsburg MS SMBus 2
+ 8d08 C610/X99 series chipset 2-port SATA Controller [IDE mode]
+ 8d0e C610/X99 series chipset SATA Controller [RAID mode]
+ 8d10 C610/X99 series chipset PCI Express Root Port #1
+ 8d11 C610/X99 series chipset PCI Express Root Port #1
+ 8d12 C610/X99 series chipset PCI Express Root Port #2
+ 8d13 C610/X99 series chipset PCI Express Root Port #2
+ 8d14 C610/X99 series chipset PCI Express Root Port #3
+ 8d15 C610/X99 series chipset PCI Express Root Port #3
+ 8d16 C610/X99 series chipset PCI Express Root Port #4
+ 8d17 C610/X99 series chipset PCI Express Root Port #4
+ 8d18 C610/X99 series chipset PCI Express Root Port #5
+ 8d19 C610/X99 series chipset PCI Express Root Port #5
+ 8d1a C610/X99 series chipset PCI Express Root Port #6
+ 8d1b C610/X99 series chipset PCI Express Root Port #6
+ 8d1c C610/X99 series chipset PCI Express Root Port #7
+ 8d1d C610/X99 series chipset PCI Express Root Port #7
+ 8d1e C610/X99 series chipset PCI Express Root Port #8
+ 8d1f C610/X99 series chipset PCI Express Root Port #8
+ 8d20 C610/X99 series chipset HD Audio Controller
+ 8d21 C610/X99 series chipset HD Audio Controller
+ 8d22 C610/X99 series chipset SMBus Controller
+ 8d24 C610/X99 series chipset Thermal Subsystem
+ 8d26 C610/X99 series chipset USB Enhanced Host Controller #1
+ 8d2d C610/X99 series chipset USB Enhanced Host Controller #2
+ 8d31 C610/X99 series chipset USB xHCI Host Controller
+ 8d33 C610/X99 series chipset LAN Controller
+ 8d34 C610/X99 series chipset NAND Controller
+ 8d3a C610/X99 series chipset MEI Controller #1
+ 8d3b C610/X99 series chipset MEI Controller #2
+ 8d3c C610/X99 series chipset IDE-r Controller
+ 8d3d C610/X99 series chipset KT Controller
+ 8d40 C610/X99 series chipset LPC Controller
+ 8d41 C610/X99 series chipset LPC Controller
+ 8d42 C610/X99 series chipset LPC Controller
+ 8d43 C610/X99 series chipset LPC Controller
+ 8d44 C610/X99 series chipset LPC Controller
+ 8d45 C610/X99 series chipset LPC Controller
+ 8d46 C610/X99 series chipset LPC Controller
+ 8d47 C610/X99 series chipset LPC Controller
+ 8d48 C610/X99 series chipset LPC Controller
+ 8d49 C610/X99 series chipset LPC Controller
+ 8d4a C610/X99 series chipset LPC Controller
+ 8d4b C610/X99 series chipset LPC Controller
+ 8d4c C610/X99 series chipset LPC Controller
+ 8d4d C610/X99 series chipset LPC Controller
+ 8d4e C610/X99 series chipset LPC Controller
+ 8d4f C610/X99 series chipset LPC Controller
+ 8d60 C610/X99 series chipset sSATA Controller [IDE mode]
+ 8d62 C610/X99 series chipset sSATA Controller [AHCI mode]
+ 8d64 C610/X99 series chipset sSATA Controller [RAID mode]
+ 8d66 C610/X99 series chipset sSATA Controller [RAID mode]
+ 8d68 C610/X99 series chipset sSATA Controller [IDE mode]
+ 8d6e C610/X99 series chipset sSATA Controller [RAID mode]
+ 8d7c C610/X99 series chipset SPSR
+ 8d7d C610/X99 series chipset MS SMBus 0
+ 8d7e C610/X99 series chipset MS SMBus 1
+ 8d7f C610/X99 series chipset MS SMBus 2
9000 IXP2000 Family Network Processor
9001 IXP2400 Network Processor
9002 IXP2300 Network Processor
9622 Integrated RAID
9641 Integrated RAID
96a1 Integrated RAID
- 9c00 Lynx Point-LP SATA Controller 1 [IDE mode]
- 9c01 Lynx Point-LP SATA Controller 1 [IDE mode]
- 9c02 Lynx Point-LP SATA Controller 1 [AHCI mode]
- 9c03 Lynx Point-LP SATA Controller 1 [AHCI mode]
+ 9c00 8 Series SATA Controller 1 [IDE mode]
+ 9c01 8 Series SATA Controller 1 [IDE mode]
+ 9c02 8 Series SATA Controller 1 [AHCI mode]
+ 9c03 8 Series SATA Controller 1 [AHCI mode]
17aa 2214 ThinkPad X240
- 9c04 Lynx Point-LP SATA Controller 1 [RAID mode]
- 9c05 Lynx Point-LP SATA Controller 1 [RAID mode]
- 9c06 Lynx Point-LP SATA Controller 1 [RAID mode]
- 9c07 Lynx Point-LP SATA Controller 1 [RAID mode]
- 9c08 Lynx Point-LP SATA Controller 2 [IDE mode]
- 9c09 Lynx Point-LP SATA Controller 2 [IDE mode]
- 9c0a LynxPoint-LP SATA Controller [Reserved]
- 9c0b LynxPoint-LP SATA Controller [Reserved]
- 9c0c LynxPoint-LP SATA Controller [Reserved]
- 9c0d LynxPoint-LP SATA Controller [Reserved]
- 9c0e Lynx Point-LP SATA Controller 1 [RAID mode]
- 9c0f Lynx Point-LP SATA Controller 1 [RAID mode]
- 9c10 Lynx Point-LP PCI Express Root Port 1
- 9c11 Lynx Point-LP PCI Express Root Port 1
- 9c12 Lynx Point-LP PCI Express Root Port 2
- 9c13 Lynx Point-LP PCI Express Root Port 2
- 9c14 Lynx Point-LP PCI Express Root Port 3
- 9c15 Lynx Point-LP PCI Express Root Port 3
- 9c16 Lynx Point-LP PCI Express Root Port 4
- 9c17 Lynx Point-LP PCI Express Root Port 4
- 9c18 Lynx Point-LP PCI Express Root Port 5
- 9c19 Lynx Point-LP PCI Express Root Port 5
- 9c1a Lynx Point-LP PCI Express Root Port 6
- 9c1b Lynx Point-LP PCI Express Root Port 6
- 9c1c Lynx Point-LP PCI Express Root Port 7
- 9c1d Lynx Point-LP PCI Express Root Port 7
- 9c1e Lynx Point-LP PCI Express Root Port 8
- 9c1f Lynx Point-LP PCI Express Root Port 8
- 9c20 Lynx Point-LP HD Audio Controller
+ 9c04 8 Series SATA Controller 1 [RAID mode]
+ 9c05 8 Series SATA Controller 1 [RAID mode]
+ 9c06 8 Series SATA Controller 1 [RAID mode]
+ 9c07 8 Series SATA Controller 1 [RAID mode]
+ 9c08 8 Series SATA Controller 2 [IDE mode]
+ 9c09 8 Series SATA Controller 2 [IDE mode]
+ 9c0a 8 Series SATA Controller [Reserved]
+ 9c0b 8 Series SATA Controller [Reserved]
+ 9c0c 8 Series SATA Controller [Reserved]
+ 9c0d 8 Series SATA Controller [Reserved]
+ 9c0e 8 Series SATA Controller 1 [RAID mode]
+ 9c0f 8 Series SATA Controller 1 [RAID mode]
+ 9c10 8 Series PCI Express Root Port 1
+ 9c11 8 Series PCI Express Root Port 1
+ 9c12 8 Series PCI Express Root Port 2
+ 9c13 8 Series PCI Express Root Port 2
+ 9c14 8 Series PCI Express Root Port 3
+ 9c15 8 Series PCI Express Root Port 3
+ 9c16 8 Series PCI Express Root Port 4
+ 9c17 8 Series PCI Express Root Port 4
+ 9c18 8 Series PCI Express Root Port 5
+ 9c19 8 Series PCI Express Root Port 5
+ 9c1a 8 Series PCI Express Root Port 6
+ 9c1b 8 Series PCI Express Root Port 6
+ 9c1c 8 Series PCI Express Root Port 7
+ 9c1d 8 Series PCI Express Root Port 7
+ 9c1e 8 Series PCI Express Root Port 8
+ 9c1f 8 Series PCI Express Root Port 8
+ 9c20 8 Series HD Audio Controller
17aa 2214 ThinkPad X240
- 9c21 Lynx Point-LP HD Audio Controller
- 9c22 Lynx Point-LP SMBus Controller
+ 9c21 8 Series HD Audio Controller
+ 9c22 8 Series SMBus Controller
17aa 2214 ThinkPad X240
- 9c23 Lynx Point-LP CHAP Counters
- 9c24 Lynx Point-LP Thermal
- 9c26 Lynx Point-LP USB EHCI #1
+ 9c23 8 Series CHAP Counters
+ 9c24 8 Series Thermal
+ 9c26 8 Series USB EHCI #1
17aa 2214 ThinkPad X240
- 9c2d Lynx Point-LP USB EHCI #2
- 9c31 Lynx Point-LP USB xHCI HC
+ 9c2d 8 Series USB EHCI #2
+ 9c31 8 Series USB xHCI HC
17aa 2214 ThinkPad X240
- 9c35 Lynx Point-LP SDIO Controller
- 9c36 Lynx Point-LP Audio DSP Controller
- 9c3a Lynx Point-LP HECI #0
+ 9c35 8 Series SDIO Controller
+ 9c36 8 Series Audio DSP Controller
+ 9c3a 8 Series HECI #0
17aa 2214 ThinkPad X240
- 9c3b Lynx Point-LP HECI #1
- 9c3c Lynx Point-LP HECI IDER
- 9c3d Lynx Point-LP HECI KT
- 9c40 Lynx Point-LP LPC Controller
- 9c41 Lynx Point-LP LPC Controller
- 9c42 Lynx Point-LP LPC Controller
- 9c43 Lynx Point-LP LPC Controller
+ 9c3b 8 Series HECI #1
+ 9c3c 8 Series HECI IDER
+ 9c3d 8 Series HECI KT
+ 9c40 8 Series LPC Controller
+ 9c41 8 Series LPC Controller
+ 9c42 8 Series LPC Controller
+ 9c43 8 Series LPC Controller
17aa 2214 ThinkPad X240
- 9c44 Lynx Point-LP LPC Controller
- 9c45 Lynx Point-LP LPC Controller
- 9c46 Lynx Point-LP LPC Controller
- 9c47 Lynx Point-LP LPC Controller
- 9c60 Lynx Point-LP Low Power Sub-System DMA
- 9c61 Lynx Point-LP I2C Controller #0
- 9c62 Lynx Point-LP I2C Controller #1
- 9c63 Lynx Point-LP UART Controller #0
- 9c64 Lynx Point-LP UART Controller #1
- 9c65 Lynx Point-LP SPI Controller #0
- 9c66 Lynx Point-LP SPI Controller #1
+ 9c44 8 Series LPC Controller
+ 9c45 8 Series LPC Controller
+ 9c46 8 Series LPC Controller
+ 9c47 8 Series LPC Controller
+ 9c60 8 Series Low Power Sub-System DMA
+ 9c61 8 Series I2C Controller #0
+ 9c62 8 Series I2C Controller #1
+ 9c63 8 Series UART Controller #0
+ 9c64 8 Series UART Controller #1
+ 9c65 8 Series SPI Controller #0
+ 9c66 8 Series SPI Controller #1
9c83 Wildcat Point-LP SATA Controller [AHCI Mode]
9c85 Wildcat Point-LP SATA Controller [RAID Mode]
9c87 Wildcat Point-LP SATA Controller [RAID Mode]
a012 Atom Processor D4xx/D5xx/N4xx/N5xx Integrated Graphics Controller
144d c072 Notebook N150P
a013 Atom Processor D4xx/D5xx/N4xx/N5xx CHAPS counter
+ a103 Sunrise Point-H SATA Controller [AHCI mode]
+ a105 Sunrise Point-H SATA Controller [RAID mode]
+ a107 Sunrise Point-H SATA Controller [RAID mode]
+ a10f Sunrise Point-H SATA Controller [RAID mode]
+ a110 Sunrise Point-H PCI Express Root Port #1
+ a111 Sunrise Point-H PCI Express Root Port #2
+ a112 Sunrise Point-H PCI Express Root Port #3
+ a113 Sunrise Point-H PCI Express Root Port #4
+ a114 Sunrise Point-H PCI Express Root Port #5
+ a115 Sunrise Point-H PCI Express Root Port #6
+ a116 Sunrise Point-H PCI Express Root Port #7
+ a117 Sunrise Point-H PCI Express Root Port #8
+ a118 Sunrise Point-H PCI Express Root Port #9
+ a119 Sunrise Point-H PCI Express Root Port #10
+ a11a Sunrise Point-H PCI Express Root Port #11
+ a11b Sunrise Point-H PCI Express Root Port #12
+ a11c Sunrise Point-H PCI Express Root Port #13
+ a11d Sunrise Point-H PCI Express Root Port #14
+ a11e Sunrise Point-H PCI Express Root Port #15
+ a11f Sunrise Point-H PCI Express Root Port #16
+ a120 Sunrise Point-H P2SB
+ a121 Sunrise Point-H PMC
+ a122 Sunrise Point-H cAVS
+ a123 Sunrise Point-H SMBus
+ a124 Sunrise Point-H SPI Controller
+ a125 Sunrise Point-H Gigabit Ethernet Controller
+ a126 Sunrise Point-H Northpeak
+ a127 Sunrise Point-H LPSS UART #0
+ a128 Sunrise Point-H LPSS UART #1
+ a129 Sunrise Point-H LPSS SPI #0
+ a12a Sunrise Point-H LPSS SPI #1
+ a12f Sunrise Point-H USB 3.0 xHCI Controller
+ a130 Sunrise Point-H USB Device Controller (OTG)
+ a131 Sunrise Point-H Thermal subsystem
+ a133 Sunrise Point-H Northpeak ACPI Function
+ a135 Sunrise Point-H Integrated Sensor Hub
+ a13a Sunrise Point-H CSME HECI #1
+ a13b Sunrise Point-H CSME HECI #2
+ a13c Sunrise Point-H CSME IDE Redirection
+ a13d Sunrise Point-H KT Redirection
+ a13e Sunrise Point-H CSME HECI #3
+ a140 Sunrise Point-H LPC Controller
+ a141 Sunrise Point-H LPC Controller
+ a142 Sunrise Point-H LPC Controller
+ a143 Sunrise Point-H LPC Controller
+ a144 Sunrise Point-H LPC Controller
+ a145 Sunrise Point-H LPC Controller
+ a146 Sunrise Point-H LPC Controller
+ a147 Sunrise Point-H LPC Controller
+ a148 Sunrise Point-H LPC Controller
+ a149 Sunrise Point-H LPC Controller
+ a14a Sunrise Point-H LPC Controller
+ a14b Sunrise Point-H LPC Controller
+ a14c Sunrise Point-H LPC Controller
+ a14d Sunrise Point-H LPC Controller
+ a14e Sunrise Point-H LPC Controller
+ a14f Sunrise Point-H LPC Controller
+ a150 Sunrise Point-H LPC Controller
+ a151 Sunrise Point-H LPC Controller
+ a152 Sunrise Point-H LPC Controller
+ a153 Sunrise Point-H LPC Controller
+ a154 Sunrise Point-H LPC Controller
+ a155 Sunrise Point-H LPC Controller
+ a156 Sunrise Point-H LPC Controller
+ a157 Sunrise Point-H LPC Controller
+ a158 Sunrise Point-H LPC Controller
+ a159 Sunrise Point-H LPC Controller
+ a15a Sunrise Point-H LPC Controller
+ a15b Sunrise Point-H LPC Controller
+ a15c Sunrise Point-H LPC Controller
+ a15d Sunrise Point-H LPC Controller
+ a15e Sunrise Point-H LPC Controller
+ a15f Sunrise Point-H LPC Controller
+ a160 Sunrise Point-H LPSS I2C Controller #0
+ a161 Sunrise Point-H LPSS I2C Controller #1
+ a166 Sunrise Point-H LPSS UART Controller #2
+ a167 Sunrise Point-H PCI Root Port #17
+ a168 Sunrise Point-H PCI Root Port #18
+ a169 Sunrise Point-H PCI Root Port #19
+ a16a Sunrise Point-H PCI Root Port #20
+ a170 Sunrise Point-H HD Audio
a620 6400/6402 Advanced Memory Buffer (AMB)
b152 21152 PCI-to-PCI Bridge
8086 b152 21152 PCI-to-PCI Bridge
a11c DeckLink HD Extreme 3
a11d DeckLink Studio
a11e DeckLink Optical Fibre
+ a120 Decklink Studio 2
a121 DeckLink HD Extreme 3D/3D+
a124 Intensity Extreme
a126 Intensity Shuttle
a12f DeckLink Mini Monitor
a130 DeckLink Mini Recorder
a132 UltraStudio 4K
+ a138 Decklink SDI 4K
c001 TSI Telsys
c0a9 Micron/Crucial Technology
c0de Motorola
1205 Wildcard TE205P/TE207P dual-span T1/E1/J1 card 5.0V (u1)
1220 Wildcard TE220 dual-span T1/E1/J1 card 3.3V (PCI-Express) (5th gen)
1405 Wildcard TE405P/TE407P quad-span T1/E1/J1 card 5.0V (u1)
+ 1410 Wildcard TE410P quad-span T1/E1/J1 card 3.3V (5th Gen)
1420 Wildcard TE420 quad-span T1/E1/J1 card 3.3V (PCI-Express) (5th gen)
+ 1820 Wildcard TE820 octal-span T1/E1/J1 card 3.3V (PCI-Express)
2400 Wildcard TDM2400P 24-port analog card
3400 Wildcard TC400P transcoder base card
8000 Wildcard TE121 single-span T1/E1/J1 card (PCI-Express)
8008 Hx8 Series 8-port Base Card (PCI-Express)
800a Wildcard TE133 single-span T1/E1/J1 card (PCI Express)
800b Wildcard TE134 single-span T1/E1/J1 card
+ 800c Wildcard A8A 8-port analog card
+ 800d Wildcard A8B 8-port analog card (PCI-Express)
+ 800e Wildcard TE235/TE435 quad-span T1/E1/J1 card (PCI-Express)
+ 800f Wildcard A4A 4-port analog card
+ 8010 Wildcard A4B 4-port analog card (PCI-Express)
+ 8013 Wildcard TE236/TE436 quad-span T1/E1/J1 card
b410 Wildcard B410 quad-BRI card
d4d4 Dy4 Systems Inc
0601 PCI Mezzanine Card
820f DAG 8.2X 10G Ethernet (2nd bus)
8400 DAG 8.4I Infiniband x4 SDR
8500 DAG 8.5I Infiniband x4 DDR
+ 9200 DAG 9.2SX2 10G Ethernet
920e DAG 9.2X2 10G Ethernet
+ a120 DAG 10X2-P 10G Ethernet
+ a12e DAG 10X2-S 10G Ethernet
+ a140 DAG 10X4-P 10G Ethernet
ec80 Belkin Corporation
ec00 F5D6000
ecc0 Echo Digital Audio Corporation
c0ff Kona/Xena 2
cafe Kona SD
cfee Xena LS/SD-22-DA/SD-DA
+ daff KONA LHi
dcaf Kona HD
dfee Xena HD-DA
efac Xena SD-MM/SD-22-MM
06 SATA controller
00 Vendor specific
01 AHCI 1.0
+ 02 Serial Storage Bus
07 Serial Attached SCSI controller
+ 01 Serial Storage Bus
08 Non-Volatile memory controller
+ 01 NVMHCI
+ 02 NVM Express
80 Mass storage controller
C 02 Network controller
00 Ethernet controller
04 ISDN controller
05 WorldFip controller
06 PICMG controller
+ 07 Infiniband controller
80 Network controller
C 03 Display controller
00 VGA compatible controller
00 8254
01 ISA Timer
02 EISA Timers
+ 03 HPET
03 RTC
00 Generic
01 ISA RTC
10 Communication synchronizer
20 Signal processing management
80 Signal processing controller
+C 12 Processing accelerators
+ 00 Processing accelerators
+C 13 Non-Essential Instrumentation
C ff Unassigned class
# The latest version can be obtained from
# http://www.linux-usb.org/usb.ids
#
-# Version: 2014.02.03
-# Date: 2014-02-03 20:34:03
+# Version: 2015.02.03
+# Date: 2015-02-03 20:34:06
#
# Vendors, devices and interfaces. Please keep sorted.
# interface interface_name <-- two tabs
0001 Fry's Electronics
- 142b Arbiter Systems, Inc.
7778 Counterfeit flash drive [Kingston]
0002 Ingram
0003 Club Mac
0004 Nebraska Furniture Mart
-0011 Unknown manufacturer
+0011 Unknown
7788 Flash mass storage drive
0053 Planex
5301 GW-US54ZGL 802.11bg
0011 Gamepad
0105 Trust International B.V.
145f NW-3100 802.11b/g 54Mbps Wireless Network Adapter [zd1211]
+0127 IBP
+ 0002 HDM Interface
0145 Unknown
0112 Card Reader
017c MLK
210d XPLAIN evaluation kit (CDC ACM)
2110 AVR JTAGICE3 Debugger and Programmer
2122 XMEGA-A1 Explained evaluation kit
+ 2141 ICE debugger
2310 EVK11xx evaluation board
2fe4 ATxmega32A4U DFU bootloader
+ 2fe6 Cactus V6 (DFU)
+ 2fea Cactus RF60 (DFU)
2ff0 atmega32u2 DFU bootloader
+ 2ff4 atmega32u4 DFU bootloader
2ffa at90usb162 DFU bootloader
2ffb at90usb AVR DFU bootloader
2ffd at89c5130/c5131 DFU bootloader
011d Bluetooth 1.2 Interface [Broadcom BCM2035]
0121 HP49g+ Calculator
0122 HID Internet Keyboard
+ 0139 Barcode Scanner 4430
0201 ScanJet 6200c
0202 PhotoSmart S20
0204 DeskJet 815c
0212 DeskJet 1220C
0217 LaserJet 2200
0218 APOLLO P2500/2600
+ 0241 Link-5 micro dongle
0304 DeskJet 810c/812c
0305 ScanJet 4300c
0307 CD-Writer+ CD-4e
0314 designjet 30/130 series
0317 LaserJet 1200
0324 SK-2885 keyboard
+ 034a Elite Keyboard
0401 ScanJet 5200c
0404 DeskJet 830c/832c
0405 ScanJet 3400cse
0f11 OfficeJet V40
0f12 Printing Support
0f17 LaserJet 1150
+ 0f2a LaserJet 400 color M451dn
1001 Photo Scanner 1000
1002 PhotoSmart 140 series
1004 DeskJet 970c/970cse
1312 DeskJet 460
1317 LaserJet 1005
1327 iLO Virtual Hub
+ 134a Optical Mouse
1405 ScanJet 3670
1411 PSC 750
1424 f2105 Monitor Hub
1512 Printing Support
1517 color LaserJet 3500
1524 Smart Card Keyboard - KR
+ 1539 Mini Magnetic Stripe Reader
1602 PhotoSmart 330 series
1604 DeskJet 940c
1605 ScanJet 5530C PhotoSmart
1c17 Color LaserJet 2550l
1d02 PhotoSmart A310 series
1d17 LaserJet 1320
+ 1d24 Barcode scanner
1e02 PhotoSmart A320 Printer series
1e11 PSC-950
1e17 LaserJet 1160 series
2005 ScanJet 3570c
2012 OfficeJet Pro K5400
201d un2400 Gobi Wireless Modem (QDL mode)
+ 2039 Cashdrawer
2102 PhotoSmart 7345
2104 DeskJet 630c
2112 OfficeJet Pro L7500
2502 PhotoSmart 7700 series
2504 DeskJet F4200 series
2505 ScanJet 3770
- 2512 OfficeJet Pro L7300
+ 2512 OfficeJet Pro L7300 / Compaq LA2405 series monitor
2514 4-port hub
2517 LaserJet 2410
251d Gobi 2000 Wireless Modem
2702 PhotoSmart A620 series
2704 DeskJet 915
2717 Color LaserJet 2830
+ 2724 Magnetic Stripe Reader IDRA-334133-HP
+ 2805 Scanjet G2710
2811 PSC-2100
2817 Color LaserJet 2840
2902 PhotoSmart A820 series
3807 c485w Flash Drive
3817 LaserJet P2015 series
3902 PhotoSmart 130
+ 3912 Officejet Pro 8500
3a02 PhotoSmart 7150
3a11 OfficeJet 5500 series
3a17 Printing Support
5811 PhotoSmart C5100 series
5817 LaserJet M1319f MFP
5911 PhotoSmart C6180
+ 5912 Officejet Pro 8600
5a11 PhotoSmart C7100 series
5b11 OfficeJet J2100 series
5c11 PhotoSmart C4200 Printer series
6a17 LaserJet 4240
6b02 PhotoSmart R707 (PTP mode)
6b11 Photosmart C4500 series
+ 6c11 Photosmart C4480
6c17 Color LaserJet 4610
6f17 Color LaserJet CP6015 series
7004 DeskJet 3320c
bef4 NEC Picty760
c002 PhotoSmart 7800 series
c102 PhotoSmart 8000 series
+ c111 Deskjet 1510
c202 PhotoSmart 8200 series
c302 DeskJet D2300
c402 PhotoSmart D5100 series
03fb OPTi, Inc.
03fc Elitegroup Computer Systems
03fd Xilinx, Inc.
+ 0008 Platform Cable USB II
03fe Farallon Comunications
0400 National Semiconductor Corp.
05dc Rigol Technologies DS1000USB Oscilloscope
5667 M5667 MP3 player
9665 Gateway Webcam
0403 Future Technology Devices International, Ltd
- 0000 H4SMK 7 Port Hub
+ 0000 H4SMK 7 Port Hub / Bricked Counterfeit FT232 Serial (UART) IC
0232 Serial Converter
1060 JTAG adapter
+ 1234 IronLogic RFID Adapter [Z-2 USB]
6001 FT232 USB-Serial (UART) IC
6002 Lumel PD12
6007 Serial Converter
8b2a Alpermann+Velte Rubidium Q1
8b2b Alpermann+Velte TCD
8b2c Alpermann+Velte TCC70
+ 9132 LCD and Temperature Interface
9133 CallerID
9135 Rotary Pub alarm
+ 9136 Pulsecounter
9e90 Marvell OpenRD Base/Client
9f80 Ewert Energy Systems CANdapter
a6d0 Texas Instruments XDS100v2 JTAG / BeagleBone A3
a951 HCP HIT GSM/GPRS modem [Cinterion MC55i]
+ a9a0 FT2232D - Dual UART/FIFO IC - FTDI
abb8 Lego Mindstorms NXTCam
b810 US Interface Navigator (CAT and 2nd PTT lines)
b811 US Interface Navigator (WKEY and FSK lines)
d011 SCS Position-Tracker/TNC
d012 SCS DRAGON 1
d013 SCS DRAGON 1
+ d388 Xsens converter
+ d389 Xsens Wireless Receiver
+ d38a Xsens serial converter
+ d38b Xsens serial converter
+ d38c Xsens Wireless Receiver
+ d38d Xsens Awinda Station
+ d38e Xsens serial converter
+ d38f Xsens serial converter
d491 Zolix Omni 1509 monochromator
d578 Accesio USB-COM-4SM
d6f8 UNI Black BOX
d739 Propox ISPcable III
d9a9 Actisense USG-1 NMEA Serial Gateway
d9aa Actisense NGT-1 NMEA2000 PC Interface
+ daf4 Qundis Serial Infrared Head
e0d0 Total Phase Aardvark I2C/SPI Host Adapter
e521 EVER Sinline XL Series UPS
e6c8 PYRAMID Computer GmbH LCD
e8d8 Aaronia AG Spectran Spectrum Analyzer
e8dc Aaronia AG UBBV Preamplifier
ea90 Eclo 1-Wire Adapter
+ ecd9 miControl miCan-Stick
ed71 HAMEG HO870 Serial Port
ed72 HAMEG HO720 Serial Port
ed73 HAMEG HO730 Serial Port
ed74 HAMEG HO820 Serial Port
ef10 FT1245BL
f070 Serial Converter 422/485 [Vardaan VEUSB422R3]
+ f0c8 SPROG Decoder Programmer
+ f0c9 SPROG-DCC CAN-USB
+ f0e9 Tagsys L-P101
f1a0 Asix PRESTO Programmer
f208 Papenmeier Braille-Display
f3c0 4N-GALAXY Serial Converter
0249 Aterm WL300NU-G
02b4 Aterm WL300NU-AG
02b6 Aterm WL300NU-GS 802.11n Wireless Adapter
+ 02bc Computer Monitor
0300 LifeTouch Note
0301 LifeTouch Note (debug mode)
55aa Hub
4000 InkJet Color Printer
4021 Photo Printer 6800
4022 1400 Digital Photo Printer
+ 402b Photo Printer 6850
402e 605 Photo Printer
4034 805 Photo Printer
4056 ESP 7200 Series AiO
2524 USB MultiSwitch Hub
2602 USB 2.0 Hub
2640 USB 2.0 Hub
+ 2660 Hub
4060 Ultra Fast Media Reader
4064 Ultra Fast Media Reader
+ 5434 Hub
7500 LAN7500 Ethernet 10/100/1000 Adapter
9512 SMC9512/9514 USB Hub
+ 9514 SMC9514 Hub
a700 2 Port Hub
ec00 SMSC9512/9514 Fast Ethernet Adapter
0425 Motorola Semiconductors HK, Ltd
2036 TUSB2036 Hub
2046 TUSB2046 Hub
2077 TUSB2077 Hub
+ 2f90 SM-USB-DIG
3410 TUSB3410 Microcontroller
3f00 OMAP1610
3f02 SMC WSKP100 Wi-Fi Phone
0021 HID Monitor Controls
0050 Diamond Pro 900u CRT Monitor
0051 Integrated Hub
+ 0100 Control Panel for Leica TCS SP5
0453 CMD Technology
6781 NMB Keyboard
6783 Chicony Composite Keyboard
0150 Super Talent 1GB Flash Drive
0151 Super Flash 1GB / GXT 64MB Flash Drive
0162 SiS162 usb Wireless LAN Adapter
- 0163 802.11 Wireless LAN Adapter
+ 0163 SiS163U 802.11 Wireless LAN Adapter
0817 SiS-184-ASUS-4352.17 touch panel
5401 Wireless Adapter RO80211GS-USB
0458 KYE Systems Corp. (Mouse Systems)
4012 TVGo DVB-T03 [AF9015]
5003 G-pen 560 Tablet
5004 G-pen Tablet
+ 505e Genius iSlim 330
6001 GF3000F Ethernet Adapter
7004 VideoCAM Express V2
7006 Dsc 1.3 Smart Camera Device
7055 Slim 2020AF camera
705a Asus USB2.0 Webcam
705c Genius iSlim 1300AF
+ 7061 Genius iLook 1321 V2
+ 7066 Acer Crystal Eye Webcam
+ 7067 Genius iSlim 1300AF V2
+ 7068 Genius eFace 1325R
+ 706d Genius iSlim 2000AF V2
+ 7076 Genius FaceCam 312
7079 FaceCam 2025R
707f TVGo DVB-T03 [RTL2832]
7088 WideCam 1050
+ 7089 Genius FaceCam 320
+ 708c Genius WideCam F100
0459 Adobe Systems, Inc.
045a SONICblue, Inc.
07da Supra Express 56K modem
02ae Xbox NUI Camera
02b0 Xbox NUI Motor
02b6 Xbox 360 / Bluetooth Wireless Headset
+ 02be Kinect for Windows NUI Audio
+ 02bf Kinect for Windows NUI Camera
+ 02c2 Kinect for Windows NUI Motor
+ 02d1 XBOX One Controller for Windows
+ 02d5 Xbox One Digital TV Tuner
0400 Windows Powered Pocket PC 2002
0401 Windows Powered Pocket PC 2002
0402 Windows Powered Pocket PC 2002
0707 Wireless Laser Mouse 8000
0708 Transceiver v 3.0 for Bluetooth
070a Charon Bluetooth Dongle (DFU)
+ 070f LifeChat LX-3000 Headset
0710 Zune Media Player
0713 Wireless Presenter Mouse 8000
0719 Xbox 360 Wireless Adapter
0721 LifeCam NX-3000 (UVC-compliant)
0723 LifeCam VX-7000 (UVC-compliant)
0724 SideWinder Mouse
+ 0728 LifeCam VX-5000
0730 Digital Media Keyboard 3000
0734 Wireless Optical Desktop 700
0736 Sidewinder X5 Mouse
0779 LifeCam HD-3000
0780 Comfort Curve Keyboard 3000
0797 Optical Mouse 200
+ 07f8 Wired Keyboard 600 (model 1576)
930a ISOUSB.SYS Intel 82930 Isochronous IO Test Board
ffca Catalina
fff8 Keyboard
0820 QuickCam VC
0821 HD Webcam C910
0825 Webcam C270
+ 0826 HD Webcam C525
0828 HD Webcam B990
+ 082b Webcam C170
082d HD Pro Webcam C920
0830 QuickClip
+ 0837 BCC950 ConferenceCam
0840 QuickCam Express
+ 0843 Webcam C930e
0850 QuickCam Web
0870 QuickCam Express
0890 QuickCam Traveler
0a17 G330 Headset
0a1f G930
0a29 H600 [Wireless Headset]
+ 0a38 Headset H340
+ 0a44 Wired headset
+ 0a4d G430 Surround Sound Gaming Headset
0b02 C-UV35 [Bluetooth Mini-Receiver] (HID proxy mode)
8801 Video Camera
b305 BT Mini-Receiver
c064 M110 corded optical mouse (M-B0001)
c066 G9x Laser Mouse
c068 G500 Laser Mouse
- c069 M500 Laser Mouse
+ c069 M-U0007 [Corded Mouse M500]
c06a USB Optical Mouse
c06b G700 Wireless Gaming Mouse
c06c Optical Mouse
c124 Harmony 300 Remote
c125 Harmony 200 Remote
c126 Harmony Link
- c12b Harmony Touch Remote
+ c129 Harmony Hub
+ c12b Harmony Touch/Ultimate Remote
c201 WingMan Extreme Joystick with Throttle
c202 WingMan Formula
c207 WingMan Extreme Digital 3D
c246 Gaming Mouse G300
c248 G105 Gaming Keyboard
c24a G600 Gaming Mouse
+ c24c G400s Optical Mouse
c24d G710 Gaming Keyboard
c24e G500s Laser Gaming Mouse
c281 WingMan Force
c318 Illuminated Keyboard
c31a Comfort Wave 450
c31b Compact Keyboard K300
- c31c Keyboard K120 for Business
+ c31c Keyboard K120
c31d Media Keyboard K200
c401 TrackMan Marble Wheel
c402 Marble Mouse (2-button)
c526 Nano Receiver
c529 Logitech Keyboard + Mice
c52b Unifying Receiver
+ c52d R700 Remote Presenter receiver
c52e MK260 Wireless Combo Receiver
c52f Unifying Receiver
c532 Unifying Receiver
+ c534 Unifying Receiver
+ c603 3Dconnexion Spacemouse Plus XT
+ c605 3Dconnexion CADman
+ c606 3Dconnexion Spacemouse Classic
+ c621 3Dconnexion Spaceball 5000
c623 3Dconnexion Space Traveller 3D Mouse
c625 3Dconnexion Space Pilot 3D Mouse
c626 3Dconnexion Space Navigator 3D Mouse
c627 3Dconnexion Space Explorer 3D Mouse
+ c628 3Dconnexion Space Navigator for Notebooks
c629 3Dconnexion SpacePilot Pro 3D Mouse
+ c62b 3Dconnexion Space Mouse Pro
+ c640 NuLOOQ navigator
c702 Cordless Presenter
c703 Elite Keyboard Y-RP20 + Mouse MX900 (Bluetooth)
c704 diNovo Wireless Desktop
5308 KeyMaestro Keyboard
5408 KeyMaestro Multimedia Keyboard/Hub
5500 Portable Keyboard 86+9 keys (Model 6100C US)
+ 5550 5 button optical mouse model M873U
5720 Smart Card Reader
6782 BTC 7932 mouse+keyboard
046f Crystal Semiconductor
1000 Trust Office Scan USB 19200
1002 HP ScanJet 4300c Parallel Port
047c Dell Computer Corp.
+ ffff UPS Tower 500W LV
047d Kensington
1001 Mouse*in*a*Box
1002 Expert Mouse Pro
0004 InTouch Module
0011 InTouch Module
0014 InTouch Module
+ 0100 Stor.E Slim USB 3.0
+ 0200 External Disk
a006 External Disk 1.5TB
a007 External Disk USB 3.0
a009 Stor.E Basics
+ a00d STOR.E BASICS 500GB
+ b001 Stor.E Partner
d010 External Disk 3TB
+ d011 Canvio Desk
0481 Zenith Data Systems
0482 Kyocera Corp.
000e FS-1020D Printer
9006 IT9135 BDA Afatech DVB-T HDTV Dongle
9009 Zolid HD DVD Maker
9135 Zolid Mini DVB-T Stick
+ 9306 IT930x DVB stick
9503 ITE it9503 feature-limited DVB-T transmission chip [ccHDtv]
9507 ITE it9507 full featured DVB-T transmission chip [ccHDtv]
048f Eicon Tech.
1907 CanoScan LiDE 700F
1909 CanoScan LiDE 110
190a CanoScan LiDE 210
+ 190d CanoScan 9000F Mark II
2200 CanoScan LiDE 25
2201 CanoScan FB320U
2202 CanoScan FB620U
2224 CanoScan LiDE 600F
2225 CanoScan LiDE 70
2228 CanoScan 4400F
+ 2229 CanoScan 8600F
2602 MultiPASS C555
2603 MultiPASS C755
260a CAPT Printer
26b5 MF4200 series
26da LBP3010B printer
26e6 iR1024
+ 2736 I-SENSYS MF4550d
2737 MF4410
3041 PowerShot S10
3042 CanoScan FS4000US Film Scanner
3195 PowerShot SX1 IS
3196 PowerShot SD880 IS DIGITAL ELPH / Digital IXUS 870 IS / IXY DIGITAL 920 IS
319a EOS 7D
+ 319b EOS 50D
31aa SELPHY CP770
31ab SELPHY CP760
31ad PowerShot E1
322c PowerShot SX220 HS
3233 PowerShot G1 X
3234 PowerShot SX150 IS
+ 3235 PowerShot ELPH 510 HS / IXUS 1100 HS
3236 PowerShot S100
3237 PowerShot ELPH 310 HS / IXUS 230 HS
3238 PowerShot SX40 HS
325a PowerShot SX160 IS
325b PowerShot S110
325c PowerShot SX500 IS
+ 325e PowerShot N
325f PowerShot SX280 HS
3260 PowerShot SX270 HS
+ 3261 PowerShot A3500 IS
3262 PowerShot A2600
+ 3263 PowerShot SX275 HS
3264 PowerShot A1400
3265 Powershot ELPH 130 IS / IXUS 140
+ 3266 Powershot ELPH 120 IS / IXUS 135
3268 PowerShot ELPH 330 HS / IXUS 255 HS
3271 PowerShot A2500
3276 PowerShot SX170 IS
3277 PowerShot SX510 HS
+ 3278 PowerShot S200
327d Powershot ELPH 115 IS / IXUS 132
+ 327f EOS Rebel T5 / EOS 1200D / EOS Kiss X70
+ 3284 PowerShot D30
+ 3285 PowerShot SX700 HS
+ 3286 PowerShot SX600 HS
+ 3287 PowerShot ELPH 140 IS / IXUS 150
+ 3288 Powershot ELPH 135 / IXUS 145
+ 3289 PowerShot ELPH 340 HS / IXUS 265 HS
+ 328a PowerShot ELPH 150 IS / IXUS 155
+ 328b PowerShot N Facebook(R) Ready
+ 329a PowerShot SX60 HS
+ 329b PowerShot SX520 HS
+ 329c PowerShot SX400 IS
04aa DaeWoo Telecom, Ltd
04ab Chromatic Research
04ac Micro Audiometrics Corp.
300a Rapid Access IIIe Keyboard
3016 UltraNav Keyboard Hub
3018 UltraNav Keyboard
+ 301a 2-port low-power hub
301b SK-8815 Keyboard
301c Enhanced Performance Keyboard
3020 Enhanced Performance Keyboard
310c Wheel Mouse
4427 Portable CD ROM
4482 Serial Converter
+ 4484 SMSC USB20H04 3-Port Hub [ThinkPad X4 UltraBase, Wistron S Note-3 Media Slice]
4485 Serial Converter
4524 40 Character Vacuum Fluorescent Display
4525 Double sided CRT
1006 Human Interface Device
2050 hub
2830 Opera1 DVB-S (cold state)
+ 3813 NANO BIOS Programmer
+ 4235 Monitor 02 Driver
4381 SCAPS USC-1 Scanner Controller
4611 Storage Adapter FX2 (CY)
4616 Flash Disk (TPP)
1097 fi-5110C
10ae fi-4120C2
10af fi-4220C2
+ 10c7 fi-60f scanner
10e0 fi-5120c Scanner
10e1 fi-5220C
10e7 fi-5900C
004f SK-9020 keyboard
1766 HID Monitor Controls
2004 Bluetooth 4.0 [Broadcom BCM20702A0]
+ 7025 HP HD Webcam
9304 Hub
f01c TT1280DA DVB-T TV Tuner
04cb Fuji Photo Film Co., Ltd
0033 PICkit2
0036 PICkit Serial Analyzer
00e0 PIC32 Starter Board
+ 04cd 28Cxxx EEPROM Programmer
0a04 AGP LIN Serial Analyzer
8000 In-Circuit Debugger
8001 ICD2 in-circuit debugger
9004 Microchip REAL ICE
900a PICkit3
c001 PicoLCD 20x4
+ e11c TL866CS EEPROM Programmer [MiniPRO]
+ f437 SBE Tech Ultrasonic Anemometer
+ f4b5 SmartScope
f8da Hughski Ltd. ColorHug
+ f91c SPROG IIv3
faff Dangerous Prototypes BusPirate v4 Bootloader mode
fb00 Dangerous Prototypes BusPirate v4
fbb2 GCUSB-nStep stepper motor controller
fbba DiscFerret Magnetic Disc Analyser (bootloader mode)
fbbb DiscFerret Magnetic Disc Analyser (active mode)
+ fc1e Bachrus Speedometer Interface
fc92 Open Bench Logic Sniffer
ffef PICoPLC [APStech]
04d9 Holtek Semiconductor, Inc.
2221 Keyboard
2323 Keyboard
2519 Shenzhen LogoTech 2.4GHz receiver
- 2832 1channel Telephone line recorder
+ 2832 HT82A832R Audio MCU
2834 HT82A834R Audio MCU
a055 Keyboard
04da Panasonic (Matsushita)
2372 Lumix Camera (Storage mode)
2374 Lumix Camera (PTP mode)
2451 HDC-SD9
+ 245b HC-X920K (3MOS Full HD video camcorder)
2497 HDC-TM700
250c Gobi Wireless Modem (QDL mode)
250d Gobi Wireless Modem
1003 MP3 Player and Recorder
1006 SDC-200Z
130c NX100
+ 1f05 S2 Portable [JMicron] (500GB)
1f06 HX-MU064DA portable harddisk
2018 WIS09ABGN LinkStick Wireless LAN Adapter
2035 Digital Photo Frame Mass Storage
330c ML-1865
3310 ML-331x Series Laser Printer
3315 ML-2540 Series Laser Printer
+ 331e M262x/M282x Xpress Series Laser Printer
3409 SCX-4216F Scanner
340c SCX-5x15 series
340d SCX-6x20 series
341f Composite Device
3420 Composite Device
3426 SCX-4500 Laser Printer
+ 342d SCX-4x28 Series
344f SCX-3400 Series
3605 InkJet Color Printer
3606 InkJet Color Printer
5f04 NEXiO Sync
5f05 STORY Station 1TB
6032 G2 Portable hard drive
+ 6033 G2 Portable device
6034 G2 Portable hard drive
60b3 M2 Portable Hard Drive
60c4 M2 Portable Hard Drive USB 3.0
+ 6124 D3 Station External Hard Drive
61b6 M3 Portable Hard Drive 1TB
6601 Mobile Phone
6602 Galaxy
6843 E2530 Phone (Samsung Kies mode)
684e Wave (GT-S8500)
685b GT-I9100 Phone [Galaxy S II] (mass storage mode)
- 685c GT-I9250 Phone [Galaxy Nexus]
+ 685c GT-I9250 Phone [Galaxy Nexus] (Mass storage mode)
685d GT-I9100 Phone [Galaxy S II] (Download mode)
685e GT-I9100 / GT-C3350 Phones (USB Debugging mode)
- 6860 GT-I9100 Phone [Galaxy S II], GT-I9300 Phone [Galaxy S III], GT-P7500 [Galaxy Tab 10.1]
+ 6860 GT-I9100 Phone [Galaxy S II], GT-I9300 Phone [Galaxy S III], GT-P7500 [Galaxy Tab 10.1] , GT-I9500 [Galaxy S 4]
+ 6863 GT-I9500 [Galaxy S4] / GT-I9250 [Galaxy Nexus] (network tethering)
+ 6864 GT-I9070 (network tethering, USB debugging enabled)
6865 GT-I9300 Phone [Galaxy S III] (PTP mode)
6866 GT-I9300 Phone [Galaxy S III] (debugging mode)
+ 6868 Escape Composite driver for Android Phones: Modem+Diagnostic+ADB
6875 GT-B3710 Standalone LTE device (Commercial)
6876 GT-B3710 LTE Modem
6877 Galaxy S
0402 Genius LuxeMate i200 Keyboard
0403 KU-0420 keyboard
0418 KU-0418 Tactical Pad
+ 0618 RG-0618U Wireless HID Receiver & KG-0609 Wireless Keyboard with Touchpad
0760 Acer KU-0760 Keyboard
0841 HP Multimedia Keyboard
0860 2.4G Multimedia Wireless Kit
b044 Acer CrystalEye Webcam
b057 integrated USB webcam
b059 CKF7037 HP webcam
+ b064 CNA7137 Integrated Webcam
+ b070 Camera
b071 2.0M UVC Webcam / CNF7129
b083 CKF7063 Webcam (HP)
b091 Webcam
b272 Lenovo EasyCamera
b2b0 Camera
b2b9 Lenovo Integrated Camera UVC
+ b2da thinkpad t430s camera
b2ea Integrated Camera [ThinkPad]
b330 Asus 720p CMOS webcam
b354 UVC 1.00 device HD UVC WebCam
+ b394 Integrated Camera
04f3 Elan Microelectronics Corp.
000a Touchscreen
0103 ActiveJet K-2024 Multimedia Keyboard
01ea DCP-7030
01eb MFC-7320
01f4 MFC-5890CN
+ 0217 MFC-8480DN
0223 DCP-365CN
0248 DCP-7055 scanner/printer
+ 0273 DCP-7057 scanner/printer
+ 02b3 MFC J4510DW
1000 Printer
1002 Printer
2002 PTUSB Printing
0015 ViewMate Desktop Mouse CC2201
00d3 00052486 / Laser Mouse M1052 [hama]
0171 SPCA1527A/SPCA1528 SD card camera (Mass Storage mode)
- 0201 RS232C Adapter
+ 0201 SPCP825 RS232C Adapter
0232 Fingerprint
0538 Wireless Optical Mouse 2.4G [Bright]
0561 Flexcam 100
5330 Digitrex 2110
5331 Vivitar Vivicam 10
5360 Sunplus Generic Digital Camera
+ 5563 Digital Media Player MP3/WMA [The Sharper Image]
5720 Card Reader Driver
+ 6333 Siri A9 UVC chipset
7333 Finet Technology Palmpix DC-85
757a Aiptek, MP315 MP3 Player
ffff PureDigital Ritz Disposable
16e1 n10 Handheld Sync
16e2 n20 Pocket PC Sync
16e3 n30 Handheld Sync
+ 2008 Liquid Gallant Duo E350 (preloader)
3202 Liquid
3203 Liquid (Debug mode)
3230 BeTouch E120
3317 Liquid
3325 Iconia tablet A500
3341 Iconia tablet A500
+ 33c3 Liquid Gallant Duo E350
+ 33c4 Liquid Gallant Duo E350 (debug mode)
+ 33c7 Liquid Gallant Duo E350 (USB tethering)
+ 33c8 Liquid Gallant Duo E350 (debug mode, USB tethering)
d001 Divio NW801/DVC-V6+ Digital Camera
0503 Hitachi America, Ltd
0504 Hayes Microcomputer Products
0004 Direct Connect
0012 F8T012 Bluetooth Adapter
0013 F8T013 Bluetooth Adapter
- 0017 B8T017 Bluetooth+EDR 2.1
+ 0017 B8T017 Bluetooth+EDR 2.1 / F4U017 USB 2.0 7-port Hub
003a Universal Media Reader
0050 F5D6050 802.11b Wireless Adapter v2000 [Atmel at76c503a]
0081 F8T001v2 Bluetooth
0409 F5U409 Serial
0416 Staples 12416 7 port desktop hub
0551 F6C550-AVR UPS
+ 065a F8T065BF Mini Bluetooth 4.0 Adapter
0706 2-N-1 7-Port Hub (Lower half)
0802 Nostromo n40 Gamepad
0803 Nostromo 1745 GamePad
1103 F9L1103 N750 DB 802.11abgn 2x3:3 [Ralink RT3573]
1106 F9L1106v1 802.11a/b/g/n/ac Wireless Adapter [Broadcom BCM43526]
1109 F9L1109v1 802.11a/b/g/n/ac Wireless Adapter [Realtek RTL8812AU]
+ 110a F9L1101v2 802.11abgn Wireless Adapter [Realtek RTL8192DU]
11f2 ISY Wireless Micro Adapter IWL 2000 [RTL8188CUS]
1202 F5U120-PC Parallel Printer Port
1203 F5U120-PC Serial Port
2103 F7D2102 802.11n N300 Micro Wireless Adapter v3000 [Realtek RTL8192CU]
21f1 N300 WLAN N Adapter [ISY]
+ 21f2 RTL8192CU 802.11n WLAN Adapter [ISY IWL 4000]
258a F5U258 Host to Host cable
3101 F1DF102U/F1DG102U Flip Hub
3201 F1DF102U/F1DG102U Flip KVM
5055 F5D5055 Gigabit Network Adapter [AX88xxx]
6050 F6D6050 802.11abgn Wireless Adapter [Broadcom BCM4323]
6051 F5D6051 802.11b Wireless Network Adapter [ZyDAS ZD1201]
- 615a F7D4101 / F9L1101 802.11abgn Wireless Adapter [Broadcom BCM4323]
+ 615a F7D4101 / F9L1101v1 802.11abgn Wireless Adapter [Broadcom BCM4323]
7050 F5D7050 Wireless G Adapter v1000/v2000 [Intersil ISL3887]
7051 F5D7051 802.11g Adapter v1000 [Broadcom 4320 USB]
705a F5D7050 Wireless G Adapter v3000 [Ralink RT2571W]
1080 NET1080 USB-USB Bridge
1200 SSDC Adapter II
1265 File-backed Storage Gadget
+ 3424 Lumidigm Venus fingerprint sensor
a0f0 Cambridge Electronic Devices Power1401 mk 2
a140 USB Clik! 40
a141 (OME) PocketZip 40 MP3 Player Driver
2750 EZ-Link (EZLNKUSB.SYS)
2810 Cypress ATAPI Bridge
4d90 AmScope MD1900 camera
+ 7000 PowerSpec MCE460 Front Panel LED Display
7777 Bluetooth Device
9999 AN2131 uninitialized (?)
0548 Tyan Computer Corp.
02c4 Device
02d1 DVD RW
02d2 PSP Slim
+ 02d8 SBAC-US10 SxS PRO memory card reader/writer
02e1 FeliCa S330 [PaSoRi]
02ea PlayStation 3 Memory Card Adaptor
02f9 DSC-H9
0348 HandyCam HDR-TG3E
035b Walkman NWZ-A828
035c NWZ-A726/A728/A729
+ 035f UP-DR200 Photo Printer
0382 Memory Stick PRO-HG Duo Adaptor (MSAC-UAH1)
0385 Walkman NWZ-E436F
0387 IC Recorder (P)
0440 DSC-H55
0485 MHS-PM5 HD camcorder
04cb WALKMAN NWZ-E354
+ 0541 DSC-HX100V [Cybershot Digital Still Camera]
+ 0689 Walkman NWZ-B173F
06bb WALKMAN NWZ-F805
+ 088c Portable Headphone Amplifier
1000 Wireless Buzz! Receiver
054d Try Corp.
054e Proside Corp.
0002 InkJet Color Printer
0004 InkJet Color Printer
0005 InkJet Color Printer
+ 000b Workcentre 24
+ 014e CM215b Printer
0551 CompuTrend Systems, Inc.
0552 Philips Monitors
0553 STMicroelectronics Imaging Division (VLSI Vision)
2800 MIC K/B
2801 MIC K/B Mouse
2802 Kbd Hub
+ 3002 Keyboard
3004 Genius KB-29E
3107 Keyboard
0567 Xyratex International, Ltd
0065 Bamboo
0069 Bamboo One
0081 Graphire Wireless 6x8
+ 0084 Wireless adapter for Bamboo tablets
0090 TPC90
0093 TPC93
009a TPC9A
00cc Cintiq 21UX (DTK-2100)
00d1 Bamboo Pen & Touch (CTH-460-DE)
00d3 Bamboo Fun (CTH-661)
+ 00d4 Bamboo Pen (CTL-460)
00d6 Bamboo Pen & Touch (CTH-460)
00db Bamboo Fun (CTH-661SE-NL)
00dd Bamboo Pen (CTL-470)
00de CTH-470 [Bamboo Fun Pen & Touch]
00f6 Cintiq 24HD touch (DTH-2400) touchscreen
00f8 Cintiq 24HD touch (DTH-2400) tablet
+ 0307 Cintiq Companion Hybrid 13HD (DTH-A1300) tablet
+ 0309 Cintiq Companion Hybrid 13HD (DTH-A1300) touchscreen
+ 030e Intuos Pen Small (CTL480)
0400 PenPartner 4x5
4850 PenPartner 6x8
056b Decicon, Inc.
0040 Wondereye CP-115 Webcam
0041 Webcam Notebook
0042 Webcam Notebook
+ 0320 DVBSky T330 DVB-T2/C tuner
1232 V.90 modem
1234 Typhoon Redfun Modem V90 56k
1252 HCF V90 Data Fax Voice Modem
2000 SoftGate 802.11 Adapter
2002 SoftGate 802.11 Adapter
262a tm5600 Video & Audio Grabber Capture
+ 680c DVBSky T680C DVB-T2/C tuner
+ 6831 DVBSky S960 DVB-S2 tuner
8390 WinFast PalmTop/Novo TV Video
8392 WinFast PalmTop/Novo TV Video
+ 960c DVBSky S960C DVB-S2 tuner
+ c686 Geniatech T220A DVB-T2 TV Stick
+ c688 Geniatech T230 DVB-T2 TV Stick
cafc CX861xx ROM Boot Loader
cafe AccessRunner ADSL Modem
cb00 ADSL Modem
0584 RATOC System, Inc.
0008 Fujifilm MemoryCard ReaderWriter
0220 U2SCX SCSI Converter
+ 0304 U2SCX-LVD (SCSI Converter)
b000 REX-USB60
b020 REX-USB60F
0585 FlashPoint Technology, Inc.
341a NWD-270N Wireless N-lite USB Adapter
341e NWD2105 802.11bgn Wireless Adapter [Ralink RT3070]
341f NWD2205 802.11n Wireless N Adapter [Realtek RTL8192CU]
+ 3425 NWD6505 802.11a/b/g/n/ac Wireless Adapter [MediaTek MT7610U]
343e N220 802.11bgn Wireless Adapter
0587 America Kotobuki Electronics Industries, Inc.
0588 Sapien Design
0589 Victron
058a Nohau Corp.
058b Infineon Technologies
+ 0015 Flash Loader utility
001c Flash Drive
+ 0041 Flash Loader utility
058c In Focus Systems
0007 Flash
0008 LP130
6362 Flash Card Reader/Writer
6364 AU6477 Card Reader Controller
6366 Multi Flash Reader
- 6377 Multimedia Card Reader
+ 6377 AU6375 4-LUN card reader
6386 Memory Card
6387 Flash Drive
6390 USB 2.0-IDE bridge
9472 Keyboard Hub
9510 ChunghwaTL USB02 Smartcard Reader
9520 EMV Certified Smart Card Reader
+ 9540 AU9540 Smartcard Reader
9720 USB-Serial Adapter
a014 Asus Integrated Webcam
+ b002 Acer Integrated Webcam
0590 Omron Corp.
0004 Cable Modem
000b MR56SVS
0001 Touchscreen
0002 Touch Screen Controller
0500 PCT Multitouch HID Controller
+ 0543 DELL XPS touchscreen
0597 Trisignal Communications
0598 Niigata Canotec Co., Inc.
0599 Brilliance Semiconductor, Inc.
0060 PCMCIA PocketZip Dock
0061 Varo PocketZip 40 MP3 Player
006d HipZip MP3 Player
+ 0070 eGo Portable Hard Drive
007c Ultra Max USB/1394
007d HTC42606 0G9AT00 [Iomega HDD]
007e Mini 256MB/512MB Flash Drive [IOM2D5]
0213 PocketDrive USB2
0323 LaCie d2 Drive USB2
0421 Big Disk G465
+ 0525 BigDisk Extreme 500
0641 Mobile Hard Drive
+ 0829 BigDisk Extreme+
100c Rugged Triple Interface Mobile Hard Drive
1010 Desktop Hard Drive
1019 Desktop Hard Drive
102a Rikiki Hard Drive
1049 rikiki Harddrive
1052 P'9220 Mobile Drive
+ 1064 Rugged 16 and 32 GB
a601 HardDrive
a602 CD R/W
05a0 Vetronix Corp.
0003 CVA124E Cable Voice Adapter (WDM)
0004 CVA122E Cable Voice Adapter (WDM)
05a7 Bose Corp.
+ 4000 Bluetooth Headset
+ 4001 Bluetooth Headset in DFU mode
+ 4002 Bluetooth Headset Series 2
+ 4003 Bluetooth Headset Series 2 in DFU mode
+ bc50 SoundLink Wireless Mobile speaker
+ bc51 SoundLink Wireless Mobile speaker in DFU mode
05a8 Spacetec IMC Corp.
05a9 OmniVision Technologies, Inc.
0511 OV511 Webcam
0223 Internal Keyboard/Trackpad (ANSI)
0224 Internal Keyboard/Trackpad (ISO)
0225 Internal Keyboard/Trackpad (JIS)
- 0229 Internal Keyboard/Trackpad (MacBook Pro) (ANSI)
+ 0229 Internal Keyboard/Trackpad (ANSI)
022a Internal Keyboard/Trackpad (MacBook Pro) (ISO)
022b Internal Keyboard/Trackpad (MacBook Pro) (JIS)
0230 Internal Keyboard/Trackpad (MacBook Pro 4,1) (ANSI)
0263 Apple Internal Keyboard / Trackpad (MacBook Retina)
0301 USB Mouse [Mitsumi, M4848]
0302 Optical Mouse [Fujitsu]
- 0304 Optical USB Mouse [Mitsumi]
+ 0304 Mighty Mouse [Mitsumi, M1152]
0306 Optical USB Mouse [Fujitsu]
030a Internal Trackpad
030b Internal Trackpad
1002 Extended Keyboard Hub [Mitsumi]
1003 Hub in Pro Keyboard [Mitsumi, A1048]
1006 Hub in Aluminum Keyboard
+ 1008 Mini DisplayPort to Dual-Link DVI Adapter
1101 Speakers
1105 Audio in LED Cinema Display
1107 Thunderbolt Display Audio
1263 iPod Nano 4.Gen
1265 iPod Nano 5.Gen
1266 iPod Nano 6.Gen
+ 1267 iPod Nano 7.Gen
1281 Apple Mobile Device [Recovery Mode]
1290 iPhone
1291 iPod Touch 1.Gen
1297 iPhone 4
1299 iPod Touch 3.Gen
129a iPad
+ 129c iPhone 4(CDMA)
129e iPod Touch 4.Gen
129f iPad 2
12a0 iPhone 4S
12a2 iPad 2 (3G; 64GB)
+ 12a3 iPad 2 (CDMA)
+ 12a4 iPad 3 (wifi)
+ 12a5 iPad 3 (CDMA)
12a6 iPad 3 (3G, 16 GB)
+ 12a8 iPhone5/5C/5S
12a9 iPad 2
12aa iPod Touch 5.Gen [A1421]
+ 12ab iPad 4 (WiFi, 32GB)
1300 iPod Shuffle
1301 iPod Shuffle 2.Gen
1302 iPod Shuffle 3.Gen
1401 Modem
1402 Ethernet Adapter [A1277]
1500 SuperDrive [A1379]
+ 8005 OHCI Root Hub Simulation
+ 8006 EHCI Root Hub Simulation
+ 8007 XHCI Root Hub USB 2.0 Simulation
8202 HCF V.90 Data/Fax Modem
8203 Bluetooth HCI
8204 Built-in Bluetooth 2.0+EDR HCI
850a FaceTime Camera
8510 FaceTime HD Camera (Built-in)
911c Hub in A1082 [Cinema HD Display 23"]
+ 9127 Hub in Thunderbolt Display
912f Hub in 30" Cinema Display
9215 Studio Display 15"
9217 Studio Display 17"
9201 Gobi Wireless Modem (QDL mode)
9202 Gobi Wireless Modem
9203 Gobi Wireless Modem
+ 9205 Gobi 2000
9211 Acer Gobi Wireless Modem (QDL mode)
9212 Acer Gobi Wireless Modem
9214 Acer Gobi 2000 Wireless Modem (QDL mode)
0103 FO13FF-65 PC-CAM
021a HP Webcam
0318 Webcam
+ 0361 SunplusIT INC. HP Truevision HD Webcam
+ 036e Webcam
0403 Webcam
+ 041b HP 2.0MP High Definition Webcam
05c9 Semtech Corp.
05ca Ricoh Co., Ltd
0101 RDC-5300 Camera
40ff ScanMaker 3600
5003 Goya
5013 3200 Scanner
+ 6072 XT-3500 A4 HD Scanner
80a3 ScanMaker V6USL (#2)
80ac ScanMaker V6UL/SpicyU
05db Sun Corp. (Suntac?)
4d02 MP3 Player
4d12 MP3 Player
4d30 MP3 Player
+ a209 JumpDrive S70
a300 JumpDrive2
a400 JumpDrive trade; Pro 40-501
a410 JumpDrive 128MB/256MB
a560 JumpDrive FireFly
a701 JumpDrive FireFly
a731 JumpDrive FireFly
+ a768 JumpDrive Retrax
a790 JumpDrive 2GB
a811 16GB Gizmo!
a813 16gB flash thumb drive
+ a815 JumpDrive V10
b002 USB CF Reader
b018 Multi-Card Reader
b047 SDHC Reader [RW047-7000]
+ ba02 Workflow CFR1
c753 JumpDrive TwistTurn
05dd Delta Electronics, Inc.
ff31 AWU-120
0700 Bar Code Scanner (CS1504)
0800 Spectrum24 Wireless LAN Adapter
1200 Bar Code Scanner
+ 1701 Bar Code Scanner (CDC)
1900 SNAPI Imaging Device
2000 MC3090 Rugged Mobile Computer
200d MC70 Rugged Mobile Computer
0605 USB 2.0 Hub
0606 USB 2.0 Hub / D-Link DUB-H4 USB 2.0 Hub
0607 Logitech G110 Hub
- 0608 USB-2.0 4-Port HUB
+ 0608 Hub
0610 4-port hub
+ 0616 hub
0660 USB 2.0 Hub
0700 SIIG US2256 CompactFlash Card Reader
0701 USB 2.0 IDE Adapter
0717 All-in-1 Card Reader
0718 IDE/SATA Adapter
0719 SATA adapter
+ 0722 SD/MMC card reader
0723 GL827L SD/MMC/MS Flash Card Reader
0726 SD Card Reader
0727 microSD Reader/Writer
0731 GL3310 SATA 3Gb/s Bridge Controller
+ 0732 All-in-One Cardreader
0736 microSD Reader/Writer
+ 0741 microSD Card Reader
+ 0743 SDXC and microSDXC CardReader
0760 USB 2.0 Card Reader/Writer
0761 Genesys Mass Storage Device
0780 USBFS DFU Adapter
0007 Kinesis Advantage PRO MPC/USB Keyboard
0081 Kinesis Integrated Hub
00ff VEC Footpedal
+ 0203 Y-mouse Keyboard & Mouse Adapter
020b PS2 Adapter
0232 X-Keys Switch Interface, Programming Mode
0261 X-Keys Switch Interface, SPLAT Mode
05f7 RFC Distribution(s) PTE, Ltd
05f9 PSC Scanning, Inc.
1104 Magellan 2200VS
+ 1206 Gryphon series (OEM mode)
2202 Point of Sale Handheld Scanner
- 2206 Datalogic Gryphon GFS4170
- 2601 Datalogin Magellan 1000i Barcode Scanner
+ 2206 Gryphon series (keyboard emulation mode)
+ 220c Datalogic Gryphon GD4430
+ 2601 Datalogic Magellan 1000i Barcode Scanner
2602 Datalogic Magellan 1100i Barcode Scanner
+ 4204 Gryphon series (RS-232 emulation mode)
5204 Datalogic Gryphon GFS4170 (config mode)
05fa Siemens Telecommunications Systems, Ltd
3301 Keyboard with PS/2 Mouse Port
3302 Keyboard
3303 Keyboard with PS/2 Mouse Port
-05fc Harman Multimedia
+05fc Harman
+ 0001 Soundcraft Si Multi Digital Card
7849 Harman/Kardon SoundSticks
05fd InterAct, Inc.
0239 SV-239 HammerHead Digital
0011 Browser Mouse
0014 Gamepad
1010 Optical Wireless
+ 2001 Microsoft Wireless Receiver 700
05ff LeCroy Corp.
0600 Barco Display Systems
0601 Jazz Hipster Corp.
0602 Vista Imaging, Inc.
1001 ViCam Webcam
0603 Novatek Microelectronics Corp.
- 00f1 Keyboard
+ 00f1 Keyboard (Labtec Ultra Flat Keyboard)
+ 00f2 Keyboard (Labtec Ultra Flat Keyboard)
6871 Mouse
0604 Jean Co., Ltd
0605 Anchor C&C Co., Ltd
2101 Keyboard
2231 KSK-6001 UELX Keyboard
2270 Gigabyte K8100 Aivia Gaming Keyboard
+ 5253 Thermaltake MEKA G-Unit Gaming Keyboard
5811 ACK-571U Wireless Keyboard
5903 Japanese Keyboard - 595U
6001 SolidTek USB 2p HUB
0201 Defender Office Keyboard (K7310) S Zodiak KM-9010
0252 Emerge Uni-retractable Laser Mouse
3286 Nano Receiver [Sandstrom Laser Mouse SMWLL11]
+ 4101 Wireless Keyboard/Mouse
6301 Trust Wireless Optical Mouse MI-4150K
9003 VoIP Conference Hub (A16GH)
9004 USR9602 USB Internet Mini Phone
1000 CD-ROM Drive
800d TASCAM Portastudio DP-01FX
800e TASCAM US-122L
- 801d DR-100
+ 801d TASCAM DR-100
8021 TASCAM US-122mkII
d001 CD-R/RW Unit
d002 CD-R/RW Unit
a103 Acer/HP Integrated Webcam [CN0314]
a110 HP Webcam
a114 Lemote Webcam
+ a116 UVC 1.3MPixel WebCam
a136 Asus Integrated Webcam [CN031B]
a219 1.3M WebCam (notebook emachines E730, Acer sub-brand)
c107 HP webcam [dv6-1190en]
068e CH Products, Inc.
00d3 OEM 3 axis 5 button joystick
00e2 HFX OEM Joystick
+ 00f0 Multi-Function Panel
00f1 Pro Throttle
00f2 Flight Sim Pedals
00f3 Fighterstick
00f4 Combatstick
- 00fa Flight Sim Pedals
+ 00fa Ch Throttle Quadrant
00ff Flight Sim Yoke
0500 GameStick 3D
0501 CH Pro Pedals
2003 CTX M730V built in Camera
9999 VLxxxx Monitor+Hub
0699 Tektronix, Inc.
+ 0347 AFG 3022B
069a Askey Computer Corp.
0001 VC010 Webcam [pwc]
0303 Cable Modem
06bf Leoco Corp.
06c2 Phidgets Inc. (formerly GLAB)
0030 PhidgetRFID
+ 0031 RFID reader
0038 4-Motor PhidgetServo v3.0
0039 1-Motor PhidgetServo v3.0
003a 8-Motor PhidgetAvancedServo
0007 Monitor Control
0009 Monitor Control
06ca Newer Technology, Inc.
+ 2003 uSCSI
06cb Synaptics, Inc.
0001 TouchPad
0002 Integrated TouchPad
000e HID Device
0010 Wireless TouchPad
0013 DisplayPad
+ 2970 touchpad
06cc Terayon Communication Systems
0101 Cable Modem
0102 Cable Modem
0393 CP9500D/DW Port
0394 CP9000D/DW Port
03a1 CP9550D/DW Port
+ 3b30 CP-D70DW / CP-D707DW
+ 3b31 CP-K60DW-S
06d4 Cisco Systems
06d5 Toshiba
4000 Japanese Keyboard
072f Advanced Card Systems, Ltd
0001 AC1030-based SmartCard Reader
0008 ACR 80 Smart Card Reader
+ 0100 AET65
+ 0101 AET65
+ 0102 AET62
+ 0103 AET62
+ 0901 ACR1281U-C4 (BSI)
1000 PLDT Drive
1001 PLDT Drive
+ 2011 ACR88U
+ 2100 ACR128U
+ 2200 ACR122U
+ 220a ACR1281U-C5 (BSI)
+ 220c ACR1283 Bootloader
+ 220f ACR1281U-C2 (qPBOC)
+ 2211 ACR1261 1S Dual Reader
+ 2214 ACR1222 1SAM PICC Reader
+ 2215 ACR1281 2S CL Reader
+ 221a ACR1251U-A1
+ 221b ACR1251U-C
+ 2224 ACR1281 1S Dual Reader
+ 222b ACR1222U-C8
+ 222c ACR1283L-D2
+ 222d [OEM Reader]
+ 222e ACR123U
+ 2242 ACR1251 1S Dual Reader
8002 AET63 BioTRUSTKey
8003 ACR120
8103 ACR120
+ 8201 APG8201
+ 8900 ACR89U-A1
+ 8901 ACR89U-A2
+ 8902 ACR89U-A3
9000 ACR38 AC1038-based Smart Card Reader
+ 9006 CryptoMate
90cc ACR38 SmartCard Reader
+ 90ce [OEM Reader]
90cf ACR38 SAM Smart Card Reader
90d0 PertoSmart EMV - Card Reader
+ 90d2 ACR83U
+ 90d8 ACR3801
+ 90db CryptoMate64
+ b000 ACR3901U
+ b100 ACR39U
+ b101 ACR39K
+ b102 ACR39T
+ b103 ACR39F
+ b104 ACR39U-SAM
+ b106 ACOS5T2
+ b200 ACOS5T1
+ b301 ACR32-A1
0731 Susteen, Inc.
0528 SonyEricsson DCU-11 Cable
0732 Goldfull Electronics & Telecommunications Corp.
0501 CP1500 AVR UPS
0765 X-Rite, Inc.
5001 Huey PRO Colorimeter
+ 5020 i1 Display Pro
+ 6003 ColorMunki Smile
d094 X-Rite DTP94 [Quato Silver Haze Pro]
0766 Jess-Link Products Co., Ltd
001b Packard Bell Go
4321 CardMan 4321
5121 CardMan 5121
5125 CardMan 5125
+ 5321 CardMan 5321
+ 5340 CardMan 5021 CL
6622 CardMan 6121
a011 CCID Smart Card Reader Keyboard
a021 CCID Smart Card Reader
540e Cruzer Contour Flash Drive
5530 Cruzer
5567 Cruzer Blade
+ 556c Ultra
+ 556d Memory Vault
5571 Cruzer Fit
+ 5576 Cruzer Facet
5580 SDCZ80 Flash Drive
+ 5581 Ultra
5e10 Encrypted
6100 Ultra II SD Plus 2GB
7100 Cruzer Mini
74c3 Sansa Fuze V2 (msc)
74d0 Sansa Clip+ (mtp)
74d1 Sansa Clip+ (msc)
+ 74e5 Sansa Clip Zip
8181 Pen Flash
8183 Hi-Speed Mass Storage Device
8185 SDCZ2 Cruzer Mini Flash Drive (older, thick)
0017 FEther USB2-TX
0018 Wireless LAN USB-11 mini 2
001a ULUSB-11 Key
- 001c CG-WLUSB2GTST 802.11g Wireless Adapter [Intersil ISL3887]
+ 001c CG-WLUSB2GT 802.11g Wireless Adapter [Intersil ISL3880]
+ 0020 CG-WLUSB2GTST 802.11g Wireless Adapter [Intersil ISL3887]
002e CG-WLUSB2GPX [Ralink RT2571W]
002f CG-WLUSB2GNL
0031 CG-WLUSB2GS 802.11bg [Atheros AR5523]
fc02 Cable II USB-2
fc03 USB2-IDE IDE bridge
fcd6 Freecom HD Classic
- fcf6 DataBar 512 MB
+ fcf6 DataBar
fcf8 Freecom Classic SL Network Drive
fcfe Hard Drive 80GB
07af Microtech
0113 Mju 500
0114 C-350Z Camera
0118 Mju Mini Digital/Mju Digital 500 Camera / Stylus 850 SW
+ 0125 Tough TG-1 Camera
0184 P-S100 port
0202 Foot Switch RS-26
0203 Digital Voice Recorder DW-90
a200 DF-UT-06 Hama MMC/SD Reader
a400 CompactFlash & Microdrive Reader
a600 Card Reader
+ a604 12-in-1 Card Reader
ad01 Mass Storage Device
ae01 Mass Storage Device
af01 Mass Storage Device
b00b USB to Memory Stick(LC1)
c010 Kingston FCR-HS2/ATA Card Reader
07c5 APG Cash Drawer
+ 0500 Cash Drawer
07c6 ShareWave, Inc.
0002 Bodega Wireless Access Point
0003 Bodega Wireless Network Adapter
a815 AVerTV DVB-T Volar X (A815)
a827 AVerTV Hybrid Volar HX (A827)
a867 AVerTV DVB-T (A867)
+ b300 A300 DVB-T TV receiver
b800 MR800 FM Radio
e880 MPEG-2 Capture Device (E880)
e882 MPEG-2 Capture Device (E882)
4104 Cw75 Device
4107 CW-L300 Device
4500 LV-20 Digital Camera
+ 6101 fx-9750gII
6801 PL-40R
6802 MIDI Keyboard
07d0 Dazzle
0802 Mako Technologies, LLC
0803 Zoom Telephonics, Inc.
1300 V92 Faxmodem
+ 3095 V.92 56K Mini External Modem Model 3095
4310 4410a Wireless-G Adapter [Intersil ISL3887]
4410 4410b Wireless-G Adapter [ZyDAS ZD1211B]
5241 Cable Modem
4505 SMCWUSB-G 802.11bg
4507 SMCWUSBT-G2 802.11g Wireless Adapter [Atheros AR5523]
4521 Siemens S30863-S1016-R107-2 802.11g Wireless Adapter [Intersil ISL3887]
+ 4531 T-Com Sinus 154 data II [Intersil ISL3887]
5046 SpeedStream 10/100 Ethernet [pegasus]
5501 Wireless Adapter 11g
6500 Cable Modem
9012 WNDA4100 802.11abgn 3x3:3 [Ralink RT3573]
9018 WNDA3200 802.11abgn Wireless Adapter [Atheros AR7010+AR9280]
9020 WNA3100(v1) Wireless-N 300 [Broadcom BCM43231]
+ 9021 WNA3100M(v1) Wireless-N 300 [Realtek RTL8192CU]
9030 WNA1100 Wireless-N 150 [Atheros AR9271]
9040 WNA1000 Wireless-N 150 [Atheros AR9170+AR9101]
9041 WNA1000M 802.11bgn [Realtek RTL8188CUS]
+ 9042 On Networks N150MA 802.11bgn [Realtek RTL8188CUS]
+ 9050 A6200 802.11a/b/g/n/ac Wireless Adapter [Broadcom BCM43526]
+ 9052 A6100 AC600 DB Wireless Adapter [Realtek RTL8811AU]
a001 PA101 10 Mbps HPNA Home Phoneline RJ-1
+ f001 On Networks N300MA 802.11bgn [Realtek RTL8192CU]
084d Minton Optic Industry Co., Inc.
0001 Jenoptik JD800i
0003 S-Cam F5/D-Link DSC-350 Digital Camera
0022 Parallel Port
0023 2 port to Serial Converter
0024 Parallel Port
+ 0026 PortGear SCSI
0027 1 port to Serial Converter
0028 PortGear to SCSI Converter
0032 PortStation SCSI Module
8023 2 port to Serial
8027 PGSDB9 Serial Port
085c ColorVision, Inc.
- 0200 Monitor Spyder
+ 0100 Spyder 1
+ 0200 Spyder 2
+ 0300 Spyder 3
+ 0400 Spyder 4
0862 Teletrol Systems, Inc.
0863 Filanet Corp.
0864 NetGear, Inc.
5036 Portable secure storage for software licenses
0892 DioGraphy, Inc.
0101 Smartdio Reader/Writer
+0894 TSI Incorporated
+ 0010 Remote NDIS Network Device
0897 Lauterbach
0002 Power Debug/Power Debug II
089c United Technologies Research Cntr.
0014 USBee AX-Pro
0015 USBee DX
08ae Macally (Mace Group, Inc.)
+08b0 Metrohm
+ 0006 814 Sample Processor
+ 0015 857 Titrando
+ 001a 852 Titrando
08b4 Sorenson Vision, Inc.
08b7 NATSU
0001 Playstation adapter
0102 ADSL
0301 RNIS
08e4 Pioneer Corp.
+ 0185 DDJ-WeGO2
08e5 Litronic
08e6 Gemalto (was Gemplus)
0001 GemPC-Touch 430
0002 SigmaDrive Adapter (TPP)
0906 Faraday Technology Corp.
0908 Siemens AG
+ 01f4 SIMATIC NET CP 5711
+ 01fe SIMATIC NET PC Adapter A2
2701 ShenZhen SANZHAI Technology Co.,Ltd Spy Pen VGA
0909 Audio-Technica Corp.
090a Trumpion Microelectronics, Inc.
2380 Oregon series
23cc nüvi 1350
2459 GPSmap 62/78 series
+ 2491 Edge 800
2519 eTrex 30
2535 Edge 800
+ 253c GPSmap 62sc
255b Nuvi 2505LM
0920 Echelon Co.
7500 Network Interface
0922 Dymo-CoStar Corp.
0007 LabelWriter 330
0009 LabelWriter 310
+ 0019 LabelWriter 400
001a LabelWriter 400 Turbo
0020 LabelWriter 450
+ 1001 LabelManager PnP
+ 8004 M25 Digital Postal Scale
0923 IC Media Corp.
010f SIIG MobileCam
0924 Xerox
23dd DocuPrint M760 (X760_USB)
3ce8 Phaser 3428 Printer
3d5b Phaser 6115MFP TWAIN Scanner
+ 3d6d WorkCentre 6015N/NI
420f WorkCentre PE220 Series
421f M20 Scanner
423b Printing Support
fffb DocuPrint M750 (X750_USB)
0925 Lakeview Research
0005 Gamtec.,Ltd SmartJoy PLUS Adapter
+ 03e8 Wii Classic Controller Adapter
3881 Saleae Logic
8101 Phidgets, Inc., 1-Motor PhidgetServo v2.0
8104 Phidgets, Inc., 4-Motor PhidgetServo v2.0
0009 Gigabeat F/X (HDD audio player)
000c Gigabeat F (mtp)
0010 Gigabeat S (mtp)
+ 0200 Integrated Bluetooth (Taiyo Yuden)
0301 PCX1100U Cable Modem (WDM)
0302 PCX2000 Cable Modem (WDM)
0305 Cable Modem PCX3000
070a Pocket PC e400 Series
070b Pocket PC e800 Series
0a07 WLM-10U1 802.11abgn Wireless Adapter [Ralink RT3572]
+ 0a13 AX88179 Gigabit Ethernet [Toshiba]
0b05 PX1220E-1G25 External hard drive
0b09 PX1396E-3T01 External hard drive
0b1a STOR.E ALU 2S
653d Kingston DataTraveler 2.0 Stick (1GB)
653e Flash Memory
6540 TransMemory Flash Memory
- 6544 Kingston DataTraveler 2.0 Stick (2GB)
- 6545 Kingston DataTraveler 102 Flash Drive / HEMA Flash Drive 2 GB / PNY Attache 4GB Stick
+ 6544 TransMemory-Mini / Kingston DataTraveler 2.0 Stick (2GB)
+ 6545 Kingston DataTraveler 102/2.0 / HEMA Flash Drive 2 GB / PNY Attache 4GB Stick
0931 Harmonic Data Systems, Ltd
0932 Crescentec Corp.
0300 VideoAdvantage
0030 Composite Device, Mass Storage Device (Flash Drive) amd HID
003c Rhythmedics HID Bootloader
0939 Lumberg, Inc.
- 0b15 Toshiba Stor.E Alu 2 1TB (PX1710E-1HJ0)
+ 0b15 Toshiba Stor.E Alu 2
093a Pixart Imaging, Inc.
0007 CMOS 100K-R Rev. 1.90
010e Digital camera, CD302N/Elta Medi@ digi-cam/HE-501A
260e PAC7311 Gigaware VGA PC Camera:Trust WB-3350p:SIGMA cam 2350
260f PAC7311 SnakeCam
2621 PAC731x Trust Webcam
+ 2622 Webcam Genius
2624 Webcam
093b Plextor Corp.
0010 Storage Adapter
160d DataTraveler Vault Privacy
1613 DataTraveler DT101C Flash Drive
1616 DataTraveler Locker 4GB
+ 161a Dell HyperVisor internal flash drive
1621 DataTraveler 150 (32GB)
1624 DataTraveler G2
1625 DataTraveler 101 II
1643 DataTraveler G3
1653 Data Traveler 100 G2 8 GiB
1656 DataTraveler Ultimate G2
+ 1665 Digital DataTraveler SE9 64GB
+ 1666 DataTraveler G4
1689 DataTraveler SE9
168a DataTraveler Micro
168c DT Elite 3.0
0954 RPM Systems Corp.
0955 NVidia Corp.
7030 Tegra 3 (recovery mode)
- 7100 Notion Ink Adam
+ 7100 Tegra Device
7820 Tegra 2 AC100 developer mode
b400 SHIELD (debug)
b401 SHIELD
+ cf05 SHIELD Tablet (debug)
+ cf06 SHIELD Tablet
+ cf07 SHIELD Tablet
+ cf08 SHIELD Tablet
+ cf09 SHIELD Tablet
0956 BSquare Corp.
0957 Agilent Technologies, Inc.
0200 E-Video DC-350 Camera
0202 E-Video DC-350 Camera
+ 0407 33220A Waveform Generator
0518 82357B GPIB Interface
0a07 34411A Multimeter
+ 1507 33210A Waveform Generator
1745 Test and Measurement Device (IVI)
2918 U2702A oscilloscope
+ fb18 LC Device
0958 CompuLink Research, Inc.
0959 Cologne Chip AG
2bd0 Intelligent ISDN (Ver. 3.60.04)
095c K-Tec Electronics
095d Polycom, Inc.
0001 Polycom ViaVideo
-0967 Acer (??)
+0967 Acer NeWeb Corp.
0204 WarpLink 802.11b Adapter
0968 Catalyst Enterprises, Inc.
096e Feitian Technologies, Inc.
0802 ePass2000 (G&D STARCOS SPK 2.4)
0807 ePass2003
0971 Gretag-Macbeth AG
+ 2000 i1 Pro
+ 2001 i1 Monitor
2003 Eye-One display
2005 Huey
- 2007 ColorMunki
+ 2007 ColorMunki Photo
0973 Schlumberger
0001 e-gate Smart Card
0974 Datagraphix, a business unit of Anacomp
099a Zippy Technology Corp.
0638 Sanwa Supply Inc. Small Keyboard
610c EL-610 Super Mini Electron luminescent Keyboard
+ 713a WK-713 Multimedia Keyboard
7160 Hyper Slim Keyboard
09a3 PairGain Technologies
09a4 Contech Research, Inc.
09c4 ACTiSYS Corp.
0011 ACT-IR2000U IrDA Dongle
09c5 Memory Corp.
+09ca BMC Messsysteme GmbH
+ 5544 PIO
09cc Workbit Corp.
0404 BAFO USB-ATA/ATAPI Bridge Controller
09cd Psion Dacom Home Networks, Ltd
09d1 NeoMagic, Inc.
09d2 Vreelin Engineering, Inc.
09d3 Com One
- 0001 ISDN TA
+ 0001 ISDN TA / Light Rider 128K
+ 000b Bluetooth Adapter class 1 [BlueLight]
09d7 Novatel Wireless
0100 NovAtel FlexPack GPS receiver
09d9 KRF Tech, Ltd
-09da A4 Tech Co., Ltd
+09da A4Tech Co., Ltd.
0006 Optical Mouse WOP-35 / Trust 450L Optical Mouse
- 000a Optical Mouse Opto 510D
+ 000a Optical Mouse Opto 510D / OP-620D
000e X-F710F Optical Mouse 3xFire Gaming Mouse
0018 Trust Human Interface Device
001a Wireless Mouse & RXM-15 Receiver
00d0 ADU208 Relay I/O Interface
00da ADU218 Solid-State Relay I/O Interface
0a0b Cybex Computer Products Co.
+0a0d Servergy, Inc
+ 2514 CTS-1000 Internal Hub
0a11 Xentec, Inc.
0a12 Cambridge Silicon Radio, Ltd
0001 Bluetooth Dongle (HCI mode)
0009 Nanosira4-EDR WHQL Reference Radio
000a Nanosira4-EDR-ROM
000b Nanosira5-ROM
+ 0042 SPI Converter
0043 Bluetooth Device
0100 Casira with BlueCore2-External Module
0101 Casira with BlueCore2-Flash Module
9988 Trek2000 TD-G2
0a17 Pentax Corp.
0004 Optio 330
- 0006 Optio S
+ 0006 Optio S / S4
0007 Optio 550
0009 Optio 33WR
000a Optio 555
5023 Mass Storage Device
5024 Mass Storage Device
5025 Mass Storage Device
+0a4a Ploytec GmbH
0a4b Fujitsu Media Devices, Ltd
0a4c Computex Co., Ltd
15d9 OPTICAL MOUSE
6300 Pirelli Remote NDIS Device
bd11 TiVo AG0100 802.11bg Wireless Adapter [Broadcom BCM4320]
bd13 BCM4323 802.11abgn Wireless Adapter
+ bd16 BCM4319 802.11bgn Wireless Adapter
bd17 BCM43236 802.11abgn Wireless Adapter
d11b Eminent EM4045 [Broadcom 4320 USB]
0a5d Diatrend Corp.
0009 LP2844 Printer
0081 GK420t Label Printer
008b HC100 wristbands Printer
+ 008c ZP 450 Printer
00d1 Zebra GC420d Label Printer
930a Printer
0a62 MPMan
0ab0 Arrow Strong Electronics Co., Ltd
0ab1 FEIG ELECTRONIC GmbH
0002 OBID RFID-Reader
+ 0004 OBID classic-pro
0aba Ellisys
8001 Tracker 110 Protocol Analyzer
8002 Explorer 200 Protocol Analyzer
c326 Namuga 1.3M Webcam
c33f Webcam
c429 Lenovo ThinkCentre Web Camera
+ c42d Lenovo IdeaCentre Web Camera
0ac9 Micro Solutions, Inc.
0000 Backpack CD-ReWriter
0001 BACKPACK 2 Cable
0401 Spectrum III Hybrid Smartcard Reader
0630 Spectrum III Mag-Only Insert Reader (SPT3-355 Series) USB-CDC
0810 SecurePIN (IDPA-506100Y) PIN Pad
+ 2030 ValueMag Magnetic Stripe Reader
0ace ZyDAS
1201 ZD1201 802.11b
1211 ZD1211 802.11g
0af9 Hama, Inc.
0010 USB SightCam 100
0011 Micro Innovations IC50C Webcam
+0afa DMC Co., Ltd.
+ 07d2 Controller Board for Projected Capacitive Touch Screen DUS3000
0afc Zaptronix Ltd
0afd Tateno Dennou, Inc.
0afe Cummins Engine Co.
0aff Jump Zone Network Products, Inc.
0b00 INGENICO
0b05 ASUSTek Computer, Inc.
+ 0001 MeMO Pad HD 7 (CD-ROM mode)
1101 Mass Storage (UISDMC4S)
1706 WL-167G v1 802.11g Adapter [Ralink RT2571]
1707 WL-167G v1 802.11g Adapter [Ralink RT2571]
1708 Mass Storage Device
- 170b Mass Storage Device
+ 170b Multi card reader
170c WL-159g 802.11bg
170d 802.11b/g Wireless Network Adapter
1712 BT-183 Bluetooth 2.0+EDR adapter
1779 My Cinema U3100 Mini Plus [AF9035A]
1784 USB-N13 802.11n Network Adapter (rev. A1) [Ralink RT3072]
1786 USB-N10 802.11n Network Adapter [Realtek RTL8188SU]
+ 1788 BT-270 Bluetooth Adapter
1791 WL-167G v3 802.11n Adapter [Realtek RTL8188SU]
179d USB-N53 802.11abgn Network Adapter [Ralink RT3572]
179e Eee Note EA800 (network mode)
179f Eee Note EA800 (tablet mode)
+ 17a0 Xonar U3 sound card
17a1 Eee Note EA800 (mass storage mode)
17ab USB-N13 802.11n Network Adapter (rev. B1) [Realtek RTL8192CU]
+ 17ba N10 Nano 802.11n Network Adapter [Realtek RTL8192CU]
+ 17c7 WL-330NUL
+ 17c9 USB-AC53 802.11a/b/g/n/ac Wireless Adapter [Broadcom BCM43526]
+ 17d1 AC51 802.11a/b/g/n/ac Wireless Adapter [Mediatek MT7610/Ralink RT2870]
4c80 Transformer Pad TF300TG
4c90 Transformer Pad Infinity TF700
4c91 Transformer Pad Infinity TF700 (Debug mode)
+ 4ca0 Transformer Pad TF701T
+ 4ca1 Transformer Pad TF701T (Debug mode)
4d00 Transformer Prime TF201
4d01 Transformer Prime TF201 (debug mode)
4daf Transformer Pad Infinity TF700 (Fastboot)
+ 5410 MeMO Pad HD 7 (MTP mode)
+ 5412 MeMO Pad HD 7 (PTP mode)
+ 550f ASUS fonepad 7
6101 Cable Modem
620a Remote NDIS Device
b700 Broadcom Bluetooth 2.1
0b0d ProjectLab
0000 CenturyCD
0b0e GN Netcom
+ 034c Jabra UC Voice 750 MS
0420 Jabra SPEAK 510
+ 094d GN Netcom / Jabra REVO Wireless
1022 Jabra PRO 9450, Type 9400BS (DECT Headset)
+ 2007 GN 2000 Stereo Corded Headset
620c Jabra BT620s
9330 Jabra GN9330 Headset
0b0f AVID Technology
0006 SM Media-Shuttle Card Reader
0b33 Contour Design, Inc.
0020 ShuttleXpress
+ 0700 RollerMouse Pro
0b37 Hitachi ULSI Systems Co., Ltd
0b38 Gear Head
0003 Keyboard
300c TT-connect T-3650 CI
300d TT-connect CT-3650 CI
300e TT-connect C-2400
+ 3011 TT-connect S2-4600
+ 3012 TT-connect CT2-4650 CI
+ 3014 TT-TVStick CT2-4400
0b49 ASCII Corp.
064f Trance Vibrator
0b4b Pine Corp. Ltd.
0b95 ASIX Electronics Corp.
1720 10/100 Ethernet
1780 AX88178
+ 1790 AX88179 Gigabit Ethernet
7720 AX88772
772a AX88772A Fast Ethernet
772b AX88772B
0118 U5 802.11g Adapter
011b Wireless MAXg Adapter [Broadcom 4320]
0121 USR5423 802.11bg Wireless Adapter [ZyDAS ZD1211B]
+ 0303 USR5637 56K Faxmodem
6112 FaxModem Model 5633
0bb0 Concord Camera Corp.
0100 Sound Vision Stream
6098 USB Cable Modem
0bb3 Ofuji Technology
0bb4 HTC (High Tech Computer Corp.)
+ 0001 Android Phone via mass storage [Wiko Cink Peax 2]
00ce mmO2 XDA GSM/GPRS Pocket PC
00cf SPV C500 Smart Phone
0a01 PocketPC Sync
0bce Vario MDA
0c01 Dream / ADP1 / G1 / Magic / Tattoo
0c02 Dream / ADP1 / G1 / Magic / Tattoo (Debug)
+ 0c03 Android Phone [Fairphone First Edition (FP1)]
0c13 Diamond
0c1f Sony Ericsson XPERIA X1
0c5f Snap
0c9e Incredible
0ca2 Desire HD (debug mode)
0ca5 Android Phone [Evo Shift 4G]
+ 0cae T-Mobile MyTouch 4G Slide [Doubleshot]
+ 0dea M7_UL [HTC One]
+ 0f64 Desire 601
0ff8 Desire HD (Tethering Mode)
0ff9 Desire / Desire HD / Hero / Thunderbolt (Charge Mode)
0ffe Desire HD (modem mode)
0fff Android Fastboot Bootloader
+ 2008 Android Phone via MTP [Wiko Cink Peax 2]
+ 200b Android Phone via PTP [Wiko Cink Peax 2]
0bb5 Murata Manufacturing Co., Ltd
0bb6 Network Alchemy
0bb7 Joytech Computer Co., Ltd
2200 FreeAgent Go FW
2300 Expansion Portable
2320 USB 3.0 bridge [Portable Expansion Drive]
+ 2321 Expansion Portable
+ 2340 FreeAgent External Hard Drive
+ 3000 FreeAgent Desktop
3008 FreeAgent Desk 1TB
+ 3101 FreeAgent XTreme 640GB
+ 3312 SRD00F2 Expansion Desktop Drive (STBV)
3320 SRD00F2 [Expansion Desktop Drive]
3332 Expansion
+ 5020 FreeAgent GoFlex
5021 FreeAgent GoFlex USB 2.0
+ 5030 FreeAgent GoFlex Upgrade Cable STAE104
5031 FreeAgent GoFlex USB 3.0
+ 5070 FreeAgent GoFlex Desk
+ 5071 FreeAgent GoFlex Desk
50a1 FreeAgent GoFlex Desk
50a5 FreeAgent GoFlex Desk USB 3.0
5121 FreeAgent GoFlex
a003 Backup Plus
a0a1 Backup Plus Desktop
a0a4 Backup Plus Desktop Drive
+ ab00 Slim Portable Drive
+ ab20 Backup Plus Portable Drive
+ ab21 Backup Plus Slim
+ ab31 Backup Plus Desktop Drive (5TB)
0bc3 IPWireless, Inc.
0001 UMTS-TDD (TD-CDMA) modem
0bc4 Microcube Corp.
0171 Mass Storage Device
0176 Mass Storage Device
0178 Mass Storage Device
+ 0179 RTL8188ETV Wireless LAN 802.11n Network Adapter
0184 RTS5182 Card Reader
0186 Card Reader
+ 0301 multicard reader
+ 1724 RTL8723AU 802.11n WLAN Adapter
2831 RTL2831U DVB-T
2832 RTL2832U DVB-T
2838 RTL2838 DVB-T
+ 5730 HP 2.0MP High Definition Webcam
+ 5775 HP "Truevision HD" laptop camera
8150 RTL8150 Fast Ethernet Adapter
8151 RTL8151 Adapteon Business Mobile Networks BV
8171 RTL8188SU 802.11n WLAN Adapter
8197 RTL8187B Wireless Adapter
8198 RTL8187B Wireless Adapter
8199 RTL8187SU 802.11g WLAN Adapter
+ 8812 RTL8812AU 802.11a/b/g/n/ac WLAN Adapter
0bdb Ericsson Business Mobile Networks BV
1000 BV Bluetooth Device
1002 Bluetooth Device 1.2
0012 Bluetooth Device(BC04-External)
0018 Bluetooth Device(BC04-External)
0019 Bluetooth Device
- 0021 Bluetooth Device
+ 0021 Bluetooth Device (V2.1+EDR)
0c24 Bluetooth Device(SAMPLE)
ffff Bluetooth module with BlueCore in DFU mode
0c25 Sampo Corp.
0720 Metrologic MS7120 Barcode Scanner (bi-directional serial mode)
0b61 Vuquest 3310g
0b6a Vuquest 3310 Area-Imaging Scanner
+ 0b81 Barcode scanner Voyager 1400g Series
0c35 Eagletron, Inc.
0c36 E Ink Corp.
0c37 e.Digital
41d9 i1 phone
0c45 Microdia
0011 EBUDDY
+ 0520 MaxTrack Wireless Mouse
1018 Compact Flash storage memory card reader
1020 Mass Storage Reader
1028 Mass Storage Reader
62be PC Camera with Microphone (SN9C202 + OV7663)
62c0 Sonix USB 2.0 Camera
62e0 MSI Starcam Racer
+ 6300 PC Microscope camera
6310 Sonix USB 2.0 Camera
+ 6340 Camera
6341 Defender G-Lens 2577 HD720p Camera
63e0 Sonix Integrated Webcam
63f1 Integrated Webcam
6417 Integrated Webcam
6419 Integrated Webcam
641d 1.3 MPixel Integrated Webcam
+ 643f Dell Integrated HD Webcam
+ 644d 1.3 MPixel Integrated Webcam
6480 Sonix 1.3 MP Laptop Integrated Webcam
648b Integrated Webcam
64bd Sony Visual Communication Camera
+ 7401 TEMPer Temperature Sensor
7402 TEMPerHUM Temperature & Humidity Sensor
7403 Foot Switch
8000 DC31VC
0c4b Reiner SCT Kartensysteme GmbH
0100 cyberJack e-com/pinpad
0300 cyberJack pinpad(a)
+ 0400 cyberJack e-com(a)
+ 0401 cyberJack pinpad(a2)
+ 0500 cyberJack RFID standard dual interface smartcard reader
0501 cyberJack RFID comfort dual interface smartcard reader
9102 cyberJack RFID basis contactless smartcard reader
0c4c Needham's Electronics
0027 Sphairon Homelink 1202 802.11n Wireless Adapter [Atheros AR9170]
0ce5 Validation Technologies International
0003 Matrix
-0ce9 pico Technology
+0ce9 Pico Technology
1001 PicoScope3000 series PC Oscilloscope
+ 1007 PicoScope 2000 series PC Oscilloscope
+ 1008 PicoScope 5000 series PC Oscilloscope
+ 1009 PicoScope 4000 series PC Oscilloscope
+ 100e PicoScope 6000 series PC Oscilloscope
+ 1012 PicoScope 3000A series PC Oscilloscope
+ 1016 PicoScope 2000A series PC Oscilloscope
+ 1018 PicoScope 4000A series PC Oscilloscope
+ 1200 PicoScope 2000 series PC Oscilloscope
+ 1201 PicoScope 3000 series PC Oscilloscope
+ 1202 PicoScope 4000 series PC Oscilloscope
+ 1203 PicoScope 5000 series PC Oscilloscope
+ 1204 PicoScope 6000 series PC Oscilloscope
+ 1211 PicoScope 3000 series PC Oscilloscope
+ 1212 PicoScope 4000 series PC Oscilloscope
0cf1 e-Conn Electronic Co., Ltd
0cf2 ENE Technology, Inc.
6220 SD Card Reader (SG361)
20ff AR7010 (no firmware)
3000 AR3011 Bluetooth (no firmware)
3002 AR3011 Bluetooth
+ 3004 AR3012 Bluetooth 4.0
3005 AR3011 Bluetooth
3008 Bluetooth (AR3011)
7015 TP-Link TL-WN821N v3 / TL-WN822N v2 802.11n [Atheros AR7010+AR9287]
0d34 Rearden Steel Technologies
0d35 Dah Kun Co., Ltd
0d3a Posiflex Technologies, Inc.
+ 0206 Series 3xxx Cash Drawer
+ 0207 Series 3xxx Cash Drawer
+ 0500 Magnetic Stripe Reader
0d3c Sri Cable Technology, Ltd
0d3d Tangtop Technology Co., Ltd
0001 HID Keyboard
+ 0040 PS/2 Adapter
0d3e Fitcom, inc.
0d3f MTS Systems Corp.
0d40 Ascor, Inc.
7000 OneTouch
7010 OneTouch
7100 OneTouch II 300GB External Hard Disk
+ 7310 OneTouch 4
7410 Mobile Hard Disk Drive (1TB)
7450 Basics Portable USB Device
0d4a NF Corp.
0d77 Power Sentry/Newpoint
0d78 Japan Distributor Corp.
0d7a MARX Datentechnik GmbH
+ 0001 CrypToken
0d7b Wellco Technology Co., Ltd
0d7c Taiwan Line Tek Electronic Co., Ltd
0d7d Phison Electronics Corp.
0da3 Nippon Electro-Sensory Devices Corp.
0da4 Polar Electro OY
0001 Interface
+ 0008 Loop
0da7 IOGear, Inc.
0da8 softDSP Co., Ltd
0001 SDS 200A Oscilloscope
0db0 Micro Star International
1020 PC2PC WLAN Card
1967 Bluetooth Dongle
+ 3713 Primo 73
3801 Motorola Bluetooth 2.1+EDR Device
4011 Medion Flash XL V2.0 Card Reader
4023 Lexar Mobile Card Reader
0db4 Chung Fu Chen Yeh Enterprise Corp.
0db7 ELCON Systemtechnik
0002 Goldpfeil P-LAN
+0dba Digidesign
+ 1000 Mbox 1 [Mbox]
+ 3000 Mbox 2
0dbc A&D Medical
0003 AND Serial Cable [AND Smart Cable]
0dbe Jiuh Shiuh Precision Industry Co., Ltd
0041 Mass Storage Device
0042 Mass Storage Device
0101 Hi-Speed Mass Storage Device
+ 0209 SK-3500 S2
020a Oyen Digital MiniPro 2.5" hard drive enclosure
0dc5 SDK Co., Ltd
0dc6 Precision Squared Technology Corp.
005d WLA-2000 v1.001 WLAN [RTL8191SU]
0060 WLA-4000 802.11bgn [Ralink RT3072]
0062 WLA-5000 802.11abgn [Ralink RT3572]
+ 0072 AX88179 Gigabit Ethernet [Sitecom]
061c LN-028 Network USB 2.0 Adapter
21f4 44 St Bluetooth Device
2200 Sitecom bluetooth2.0 class 2 dongle CN-512
9041 802.11n Wireless USB Card
0e0c Gesytec
0101 LonUSB LonTalk Network Adapter
+0e0d PicoQuant GmbH
+ 0003 PicoHarp 300
0e0f VMware, Inc.
0001 Device
0002 Virtual USB Hub
0002 Wrist PDA
0e6a Megawin Technology Co., Ltd
0101 MA100 [USB-UART Bridge IC]
+ 030b Truly Ergonomic Computer Keyboard (Device Firmware Update mode)
+ 030c Truly Ergonomic Computer Keyboard
6001 GEMBIRD Flexible keyboard KB-109F-B-DE
0e6f Logic3
0003 Freebird wireless Controller
1417 A43 IT
14ad 97 Titanium HD
150e 80 G9
+ 3001 40 Titanium
0e7b On-Tech Industry Co., Ltd
0e7e Gmate, Inc.
0001 Yopy 3000 PDA
0003 MT6227 phone
0004 MT6227 phone
0023 S103
- 1806 Samsung SE-208AB Slim Portable DVD Writer
+ 1806 Samsung SE-208 Slim Portable DVD Writer
1836 Samsung SE-S084 Super WriteMaster Slim External DVD writer
+ 2000 MT65xx Preloader
3329 Qstarz BT-Q1000XT
+ 763e MT7630e Bluetooth Adapter
0e8f GreenAsia Inc.
0003 MaxFire Blaze2
- 0012 USB Wireless 2.4GHz Gamepad
+ 0012 Joystick/Gamepad
0016 4 port USB 1.1 hub UH-174
0020 USB to PS/2 Adapter
0021 Multimedia Keyboard Controller
0ea0 Ours Technology, Inc.
2126 7-in-1 Card Reader
2153 SD Card Reader Key
- 2168 Transcend JetFlash 2.0 / Astone USB Drive
+ 2168 Transcend JetFlash 2.0 / Astone USB Drive / Intellegent Stick 2.0
6803 OTI-6803 Flash Disk
6808 OTI-6808 Flash Disk
6828 OTI-6828 Flash Disk
0eb3 Saint Technology Corp.
0eb7 Endor AG
0eb8 Mettler Toledo
+ 2200 Ariva Scale
f000 PS60 Scale
+0ebb Thermo Fisher Scientific
+ 0002 FT-IR Spectrometer
0ebe VWeb Corp.
0ebf Omega Technology of Taiwan, Inc.
0ec0 LHI Technology (China) Co., Ltd
0eef D-WAV Scientific Co., Ltd
0001 eGalax TouchScreen
0002 Touchscreen Controller(Professional)
+ 7200 Touchscreen Controller
+ a802 eGalaxTouch EXC7920
0ef0 Hitachi Cable, Ltd
0ef1 Aichi Micro Intelligent Corp.
0ef2 I/O Magic Corp.
2040 Machine Test System
0f12 Mars Engineering Corp.
0f13 Acetek Technology Co., Ltd
+0f14 Ingenico
+ 0012 Vital'Act 3S
0f18 Finger Lakes Instrumentation
0002 CCD
0006 Focuser
0f32 YFC-BonEagle Electric Co., Ltd
0f37 Kokuyo Co., Ltd
0f38 Nien-Yi Industrial Corp.
+0f39 TG3 Electronics
+ 0876 Keyboard [87 Francium Pro]
0f3d Airprime, Incorporated
0112 CDMA 1xEVDO PC Card, PC 5220
0f41 RDC Semiconductor Co., Ltd
1001 Targus Mini Trackball Optical Mouse
0f63 LeapFrog Enterprises
0010 Leapster Explorer
+ 0022 Leap Reader
0500 Fly Fusion
0600 Leap Port Turbo
0700 POGO
0403 NDS Capture
0404 NDS Emulator (Lite)
0f73 DFI
+0f78 Guntermann & Drunck GmbH
0f7c DQ Technology, Inc.
0f7d NetBotz, Inc.
0f7e Fluke Corp.
0006 Blackberry Pearl
0008 Blackberry Pearl
8001 Blackberry Handheld
- 8004 Blackberry Handheld
+ 8004 Blackberry
8007 Blackberry Handheld
8010 Blackberry Playbook (Connect to Windows mode)
8011 Blackberry Playbook (Connect to Mac mode)
3137 Xperia X10 mini
3138 Xperia X10 mini pro
3149 Xperia X8
+ 514f Xperia arc S [Adb-Enable Mode]
+ 5169 Xperia S [Adb-Enable Mode]
5177 Xperia Ion [Debug Mode]
518c C1605 [Xperia E dual] MTD mode
614f Xperia X12 (debug mode)
7166 Xperia Mini Pro (Tethering mode)
7177 Xperia Ion [Tethering]
8004 9000 Phone [Mass Storage]
- adde Boot loader
+ adde C2005 (Xperia M dual) in service mode
d008 V800-Vodafone 802SE Phone
d016 K750i Phone
d017 K608i Phone
d0cf MD300 Mobile Broadband Modem
d0d4 C902 Phone [Modem]
d0e1 MD400 Mobile Broadband Modem
+ d12a U100i Yari Phone
d12e Xperia X10
+ d14e J108i Cedar
e000 K810 (PictBridge mode)
e039 K800i (msc mode)
e042 W810i Phone
e161 Xperia Ray
e166 Xperia Mini Pro
e167 XPERIA mini
+ e19b C2005 [Xperia M dual] (Mass Storage)
+ f0fa Liveview micro display MN800 in DFU mode
0fcf Dynastream Innovations, Inc.
1003 ANT Development Board
- 1004 ANT2USB
+ 1004 ANTUSB Stick
1006 ANT Development Board
- 1008 Mini stick Suunto
+ 1008 ANTUSB2 Stick
+ 1009 ANTUSB-m Stick
0fd0 Tulip Computers B.V.
0fd1 Giant Electronics Ltd.
0fd2 Seac Banche
0fda Quantec Networks GmbH
0100 quanton flight control
0fdc Micro Plus
+0fde Oregon Scientific
+ ca01 WMRS200 weather station
+ ca05 CM160
0fe0 Osterhout Design Group
0100 Bluetooth Mouse
0101 Bluetooth IMU
ff00 OEM
0fff Aopen, Inc.
1000 Speed Tech Corp.
+ 153b TerraTec Electronic GmbH
1001 Ritronics Components (S) Pte., Ltd
1003 Sigma Corp.
0003 SD14
6018 GM360/GD510/GW520/KP501
618e Ally/Optimus One/Vortex (debug mode)
618f Ally/Optimus One
+ 61c5 P880 / Charge only
61c6 Vortex (msc)
61cc Optimus S
61f1 Optimus Android Phone [LG Software mode]
- 61f9 V909 G-Slate
+ 61f9 Optimus (Various Models) MTP Mode
61fc Optimus 3
61fe Optimus Android Phone [USB tethering mode]
6300 Optimus Android Phone
631c Optimus Android Phone [MTP mode]
+ 631d Optimus Android Phone (Camera/PTP Mode)
631e Optimus Android Phone [Camera/PTP mode]
+ 631f Optimus Android Phone (Charge Mode)
6356 Optimus Android Phone [Virtual CD mode]
6800 CDMA Modem
7000 LG LDP-7024D(LD)USB
+ 91c8 P880 / USB tethering
a400 Renoir (KC910)
1005 Apacer Technology, Inc.
1001 MP3 Player
1004 MP3 Player
1006 MP3 Player
- b113 Handy Steno 2.0/HT203
+ b113 Handy Steno/AH123 / Handy Steno 2.0/HT203
b223 CD-RW + 6in1 Card Reader Digital Storage / Converter
1006 iRiver, Ltd.
3001 iHP-100
1032 C-One Technology Corp.
1033 Nucam Corp.
0068 3,5'' HDD case MD-231
-1038 Ideazon, Inc.
- 0100 Zboard
- 1361 Sensei
+1038 SteelSeries ApS
+ 0100 Ideazon Zboard
+ 1361 Ideazon Sensei
1039 devolo AG
0824 1866 802.11bg [Texas Instruments TNETW1450]
2140 dsl+ 1100 duo
+103a PSA
+ f000 Actia Evo XS
103d Stanton
0100 ScratchAmp
0101 ScratchAmp
0010 Yubikey
0110 Yubikey NEO OTP
0111 Yubikey NEO OTP+CCID
+ 0112 Yubikey NEO CCID
+ 0200 U2F Gnubby
0211 Gnubby
1053 Immanuel Electronics Co., Ltd
1054 BMS International Beheer N.V.
0200 FireWire USB Combo
0400 External HDD
0500 hub
- 0702 Passport External HDD
- 0704 Passport External HDD
- 070a My Passport Essential SE
- 071a My Passport
- 0730 My Passport
- 0740 My Passport
- 0742 My Passport Essential SE
- 0748 My Passport 1TB USB 3.0
+ 0701 WD Passport (WDXMS)
+ 0702 WD Passport (WDXMS)
+ 0704 My Passport Essential (WDME)
+ 0705 My Passport Elite (WDML)
+ 070a My Passport Essential (WDBAAA), My Passport for Mac (WDBAAB), My Passport Essential SE (WDBABM), My Passport SE for Mac (WDBABW)
+ 070b My Passport Elite (WDBAAC)
+ 070c My Passport Studio (WDBAAE)
+ 071a My Passport Essential (WDBAAA)
+ 071d My Passport Studio (WDBALG)
+ 0730 My Passport Essential (WDBACY)
+ 0732 My Passport Essential SE (WDBGYS)
+ 0740 My Passport Essential (WDBACY)
+ 0741 My Passport Ultra
+ 0742 My Passport Essential SE (WDBGYS)
+ 0748 My Passport (WDBKXH, WDBY8L)
+ 07a8 My Passport (WDBBEP), My Passport for Mac (WDBLUZ)
+ 0810 My Passport Ultra (WDBZFP)
+ 0820 My Passport Ultra (WDBMWV, WDBZFP)
0900 MyBook Essential External HDD
- 0901 MyBook External HDD
+ 0901 My Book Essential Edition (Green Ring) (WDG1U)
+ 0902 My Book Pro Edition (WDG1T)
0903 My Book Premium Edition
- 0910 MyBook Essential External HDD
- 1001 External Hard Disk [Elements]
- 1003 Elements 1000 GB
- 1010 Elements External HDD
- 1021 Elements 2TB
- 1023 Elements SE
+ 0910 My Book Essential Edition (Green Ring) (WDG1U)
+ 1001 Elements Desktop (WDE1U)
+ 1003 WD Elements Desktop (WDE1UBK)
+ 1010 Elements Portable (WDBAAR)
+ 1021 Elements Desktop (WDBAAU)
+ 1023 Elements SE Portable (WDBABV)
+ 1042 Elements SE Portable (WDBPCK)
+ 1048 Elements Portable (WDBU6Y)
+ 107c Elements Desktop (WDBWLG)
+ 10a2 Elements SE Portable (WDBPCK)
+ 10a8 Elements Portable (WDBUZG)
+ 10b8 Elements Portable (WDBU6Y, WDBUZG)
+ 1100 My Book Essential Edition 2.0 (WDH1U)
+ 1102 My Book Home Edition (WDH1CS)
1103 My Book Studio
- 1104 MyBook Mirror Edition External HDD
+ 1104 My Book Mirror Edition (WDH2U)
1105 My Book Studio II
- 1123 My Book 3.0
- 1140 My Book Essential USB3.0
+ 1110 My Book Essential (WDBAAF), My Book for Mac (WDBAAG)
+ 1111 My Book Elite (WDBAAH)
+ 1112 My Book Studio (WDBAAJ), My Book Studio LX (WDBACH)
+ 1123 My Book 3.0 (WDBABP)
+ 1130 My Book Essential (WDBACW)
+ 1140 My Book Essential (WDBACW)
+ 1230 My Book (WDBFJK0030HBK)
1059 Giesecke & Devrient GmbH
000b StarSign Bio Token 3.0
105c Hong Ji Electric Wire & Cable (Dongguan) Co., Ltd
106f Money Controls
0009 CT10x Coin Transaction
000a CR10x Coin Recycler
+ 000c Xchange
1076 GCT Semiconductor, Inc.
0031 Bluetooth Device
0032 Bluetooth Device
108e Lotes Co., Ltd.
1099 Surface Optics Corp.
109a DATASOFT Systems GmbH
+109b Hisense
+ 9118 Medion P4013 Mobile
109f eSOL Co., Ltd
3163 Trigem Mobile SmartDisplay84
3164 Trigem Mobile SmartDisplay121
10a9 SK Teletech Co., Ltd
1102 Sky Love Actually IM-U460K
1104 Sky Vega IM-A650S
+ 1105 VEGA Android composite
+ 1106 VEGA Android composite
+ 1107 VEGA Android composite
+ 1108 VEGA Android composite
+ 1109 VEGA Android composite
6021 SIRIUS alpha
+ 6031 Pantech Android composite
+ 6032 Pantech Android composite
+ 6033 Pantech Android composite
+ 6034 Pantech Android composite
+ 6035 Pantech Android composite
+ 6036 Pantech Android composite
+ 6037 Pantech Android composite
+ 6050 Pantech Android composite
+ 6051 Pantech Android composite
+ 6052 Pantech Android composite
+ 6053 Pantech Android composite
+ 6054 Pantech Android composite
+ 6055 Pantech Android composite
+ 6056 Pantech Android composite
+ 6057 Pantech Android composite
+ 6058 Pantech Android composite
+ 6059 Pantech Android composite
+ 6080 MHS291LVW LTE Modem [Verizon Jetpack 4G LTE Mobile Hotspot MHS291L] (Zero CD Mode)
+ 6085 MHS291LVW LTE Modem [Verizon Jetpack 4G LTE Mobile Hotspot MHS291L] (Modem Mode)
+ 7031 Pantech Android composite
+ 7032 Pantech Android composite
+ 7033 Pantech Android composite
+ 7034 Pantech Android composite
+ 7035 Pantech Android composite
+ 7036 Pantech Android composite
+ 7037 Pantech Android composite
10aa Cables To Go
10ab USI Co., Ltd
1002 Bluetooth Device
1427 Ethernet
10bf SmartHome
0001 SmartHome PowerLinc
+10c3 Universal Laser Systems, Inc.
+ 00a4 ULS PLS Series Laser Engraver Firmware Loader
+ 00a5 ULS Print Support
10c4 Cygnal Integrated Products, Inc.
0002 F32x USBXpress Device
0003 CommandIR
8460 Sangoma Wanpipe VoiceTime
8461 Sangoma U100
8477 Balluff RFID Reader
+ 8496 SiLabs Cypress FW downloader
+ 8497 SiLabs Cypress EVB
8605 dilitronics ESoLUX solar lighting controller
86bc C8051F34x AudioDelay [AD-340]
8789 C8051F34x Extender & EDID MGR [EMX-DVI]
87be C8051F34x HDMI Audio Extractor [EMX-HD-AUD]
8863 C8051F34x Bootloader
8897 C8051F38x HDMI Splitter [UHBX]
+ 8918 C8051F38x HDMI Audio Extractor [VSA-HA-DP]
+ 8973 C8051F38x HDMI Splitter [UHBX-8X]
ea60 CP210x UART Bridge / myAVR mySmartUSB light
ea61 CP210x UART Bridge
ea70 CP210x UART Bridge
113d Mapower Electronics Co., Ltd
1141 V One Multimedia, Pte., Ltd
1142 CyberScan Technologies, Inc.
+ 0709 Cyberview High Speed Scanner
1145 Japan Radio Company
0001 AirH PHONE AH-J3001V/J3002V
1146 Shimane SANYO Electric Co., Ltd.
114c Tinius Olsen Testing Machine Co., Inc.
114d Alpha Imaging Technology Corp.
114f Wavecom
+ 1234 Fastrack Xtend FXT001 Modem
115b Salix Technology Co., Ltd.
1162 Secugen Corp.
1163 DeLorme Publishing, Inc.
6832 MC8780 Device
6833 MC8781 Device
683a MC8785 Device
- 683c MC8790 Device
+ 683c Mobile Broadband 3G/UMTS (MC8790 Device)
6850 AirCard 880 Device
6851 AirCard 881 Device
6852 AirCard 880E Device
9008 Gobi 2000 Wireless Modem
9009 Gobi 2000 Wireless Modem
900a Gobi 2000 Wireless Modem
+ 9055 Gobi 9x15 Multimode 3G/4G LTE Modem (NAT mode)
+ 9057 Gobi 9x15 Multimode 3G/4G LTE Modem (IP passthrough mode)
119a ZHAN QI Technology Co., Ltd
119b ruwido austria GmbH
0400 Infrared Keyboard V2.01
11ac Nike
6565 FuelBand
11b0 ATECH FLASH TECHNOLOGY
+ 6208 PRO-28U
+11be R&D International NV
+ f0a0 Martin Maxxyz DMX
11c5 Inmax
0521 IMT-0521 Smartcard Reader
+11ca VeriFone Inc
+ 0207 PIN Pad VX 810
+ 0220 PIN Pad VX 805
11db Topfield Co., Ltd.
1000 PVR
1100 PVR
0004 X75
0005 SXG75/EF81
0008 UMTS/HSDPA Data Card
+ 0101 RCU Connect
11f6 Prolific
2001 Willcom WSIM
11f7 Alcatel (?)
- 02df TD10 Mobile phone USB cable
+ 02df Serial cable (v2) for TD-10 Mobile Phone
1203 TSC Auto ID Technology Co., Ltd
0140 TTP-245C
1209 InterBiometrics
1228 Datapaq Limited
0012 Q18 Data Logger
0015 TPaq21/MPaq21 Datalogger
+ 584c XL2 Logger
1230 Chipidea-Microelectronica, S.A.
1233 Denver Electronics
5677 FUSB200 mp3 player
0000 Neural Impulse Actuator Prototype 1.0 [NIA]
4321 Human Interface Device
ed02 Emotiv EPOC Developer Headset Wireless Dongle
-1235 Novation EMS
- 0001 ReMOTE Audio/XStation
+1235 Focusrite-Novation
+ 0001 ReMOTE Audio/XStation First Edition
0002 Speedio
- 0003 ReMOTE ZeRO SL
+ 0003 RemoteSL + ZeroSL
+ 0004 ReMOTE LE
+ 0005 XIOSynth [First Edition]
+ 0006 XStation
+ 0007 XIOSynth
+ 0008 ReMOTE SL Compact
+ 0009 nIO
+ 000a Nocturn
+ 000b ReMOTE SL MkII
+ 000c ZeRO MkII
+ 000e Launchpad
+ 0010 Saffire 6
+ 0011 Ultranova
+ 0012 Nocturn Keyboard
+ 0013 VRM Box
+ 0014 VRM Box Audio Class (2-out)
+ 0015 Dicer
+ 0016 Ultranova
+ 0018 Twitch
+ 0019 Impulse 25
+ 001a Impulse 49
+ 001b Impulse 61
4661 ReMOTE25
+ 8000 Scarlett 18i6
+ 8002 Scarlett 8i6
8006 Focusrite Scarlett 2i2
+ 8008 Saffire 6
+ 800a Scarlett 2i4
+ 800c Scarlett 18i20
+ 800e iTrack Solo
+ 8010 Forte
+ 8012 Scarlett 6i6
+ 8014 Scarlett 18i8
1241 Belkin
0504 Wireless Trackball Keyboard
1111 Mouse
1122 Typhoon Stream Optical Mouse USB+PS/2
- 1155 PS2/USB Browser Combo Mouse
+ 1155 Memorex Optical ScrollPro Mouse SE MX4600
1166 MI-2150 Trust Mouse
- 1177 F8E842-DL Mouse
+ 1177 Mouse [HT82M21A]
1503 Keyboard
1603 Keyboard
f767 Keyboard
125f A-DATA Technology Co., Ltd.
312a Superior S102
312b Superior S102 Pro
+ a15a DashDrive Durable HD710 portable HDD various size
+ a22a DashDrive Elite HE720 500GB
a91a Portable HDD CH91
c08a C008 Flash Drive
c81a Flash drive
c93a 4GB Pen Drive
c96a C906 Flash Drive
+ cb10 Dash Drive UV100
1260 Standard Microsystems Corp.
ee22 SMC2862W-G v3 EZ Connect 802.11g Adapter [Intersil ISL3887]
1264 Covidien Energy-based Devices
0130 PDM
0150 CMS10GI (Golf)
1286 Marvell Semiconductor, Inc.
+ 00bc Marvell JTAG Probe
1fab 88W8338 [Libertas] 802.11g
2001 88W8388 802.11a/b/g WLAN
2006 88W8362 802.11n WLAN
0002 F5U002 Parallel Port [uss720]
2101 104-key keyboard
1294 RISO KAGAKU CORP.
+ 1320 Webmail Notifier
129b CyberTAN Technology
160b Siemens S30853-S1031-R351 802.11g Wireless Adapter [Atheros AR5523]
160c Siemens S30853-S1038-R351 802.11g Wireless Adapter [Atheros AR5523]
0120 RedOctane Drum Kit for PlayStation(R)3
0200 Harmonix Guitar for PlayStation(R)3
0210 Harmonix Drum Kit for PlayStation(R)3
+12bd Gembird
+ d012 JPD Shockforce gamepad
12c4 Autocue Group Ltd
0006 Teleprompter Two-button Hand Control (v1)
0008 Teleprompter Foot Control (v1)
+12cf DEXIN
+ 0170 Tt eSPORTS BLACK Gaming mouse
12d1 Huawei Technologies Co., Ltd.
1001 E169/E620/E800 HSDPA Modem
1003 E220 HSDPA Modem / E230/E270/E870 HSDPA/HSUPA Modem
1037 Ideos
1038 Ideos (debug mode)
1039 Ideos (tethering mode)
+ 1404 EM770W miniPCI WCDMA Modem
1406 E1750
140b EC1260 Wireless Data Modem HSD USB Card
140c E180v
14c9 K3770 3G Modem
14cf K3772
14d1 K3770 3G Modem (Mass Storage Mode)
+ 14db E353/E3131
14f1 Gobi 3000 HSPA+ Modem
+ 14fe Modem (Mass Storage Mode)
1501 Pulse
1505 E398 LTE/UMTS/GSM Modem/Networkcard
1506 Modem/Networkcard
1520 K3765 HSPA
1521 K4505 HSPA+
155a R205 Mobile WiFi (CD-ROM mode)
+ 1575 K5150 LTE modem
+ 15ca E3131 3G/UMTS/HSPA+ Modem (Mass Storage Mode)
1805 AT&T Go Phone U2800A phone
1c05 E173s 3G broadband stick (modem on)
1c0b E173s 3G broadband stick (modem off)
1c20 R205 Mobile WiFi (Charging)
1d50 ET302s TD-SCDMA/TD-HSDPA Mobile Broadband
+ 1f01 E353/E3131 (Mass storage mode)
+ 1f16 K5150 LTE modem (Mass Storage Mode)
380b WiMAX USB modem(s)
12d2 LINE TECH INDUSTRIAL CO., LTD.
12d6 EMS Dr. Thomas Wuensche
0444 CPC-USB/ARM7
0888 CPC-USB/M16C
12d7 BETTER WIRE FACTORY CO., LTD.
+12d8 Araneus Information Systems Oy
+ 0001 Alea I True Random Number Generator
12e6 Waldorf Music GmbH
0013 Blofeld
12ef Tapwave, Inc.
0101 Advanced RC Servo Controller
1307 Transcend Information, Inc.
0163 256MB/512MB/1GB Flash Drive
- 0165 2GB/4GB Flash Drive
+ 0165 2GB/4GB/8GB Flash Drive
0190 Ut190 8 GB Flash Drive with MicroSD reader
0310 SD/MicroSD CardReader [hama]
0330 63-in-1 Multi-Card Reader/Writer
0001 Class 1 Bluetooth Dongle
1312 ICS Electronics
1313 ThorLabs
+ 0010 LC1 Linear Camera (Jungo)
+ 0011 SP1 Spectrometer (Jungo)
+ 0012 SP2 Spectrometer (Jungo)
+ 0110 LC1 Linear Camera (VISA)
+ 0111 SP1 Spectrometer (VISA)
+ 0112 SP2 Spectrometer (VISA)
+ 8001 TXP-Series Slot (TXP5001, TXP5004)
+ 8012 BC106 Camera Beam Profiler
+ 8013 WFS10 Wavefront Sensor
+ 8017 BC206 Camera Beam Profiler
+ 8019 BP2 Multi Slit Beam Profiler
+ 8020 PM300 Optical Power Meter
+ 8021 PM300E Optical Power and Energy Meter
+ 8022 PM320E Optical Power and Energy Meter
+ 8030 ER100 Extinction Ratio Meter
8070 PM100D
131d Natural Point
0155 TrackIR 3 Pro Head Tracker
2043 Magicolor 2530DL
2045 Magicolor 2500W
2049 Magicolor 2490MF
+133e Kemper Digital GmbH
+ 0815 Virus TI Desktop
1342 Mobility
0200 EasiDock 200 Hub
0201 EasiDock 200 Keyboard and Mouse Port
0203 EasiDock 200 Printer Port
0204 Ethernet
0304 EasiDock Ethernet
+1343 Citizen Systems
+ 0003 CX / DNP DS40
+ 0004 CX-W / DNP DS80
+ 0005 CY / DNP DSRX
1345 Sino Lite Technology Corp.
001c Xbox Controller Hub
6006 Defender Wireless Controller
0402 G2CCD2
0403 G2/G3CCD-I KAI CCD
0404 G2/G3/G4 CCD-F KAF CCD
+ 0405 Gx CCD-I CCD
+ 0406 Gx CCD-F CCD
0410 G1-0400 CCD
0411 G1-0800 CCD
0412 G1-0300 CCD
0004 Touch Panel Controller
134e Digby's Bitpile, Inc. DBA D Bit
1357 P&E Microcomputer Systems
+ 0089 OpenSDA - CDC Serial Port
0503 USB-ML-12 HCS08/HCS12 Multilink
0504 DEMOJM
+135f Control Development Inc.
+ 0110 Linear Spectrograph
+ 0111 Spectrograph - Renumerated
+ 0200 Linear Spectrograph
+ 0201 Spectrograph - Renumerated
+ 0240 MPP Spectrograph
1366 SEGGER
- 0101 J-Link ARM
+ 0101 J-Link PLUS
136b STEC
+136e Andor Technology Ltd.
+ 0014 Zyla 5.5 sCMOS camera
1370 Swissbit
0323 Swissmemory cirrusWHITE
6828 Victorinox Flash Drive
0005 VFS301 Fingerprint Reader
0007 VFS451 Fingerprint Reader
0008 VFS300 Fingerprint Reader
+ 0010 VFS Fingerprint sensor
0011 VFS5011 Fingerprint Reader
+ 0017 Fingerprint Reader
0018 Fingerprint scanner
003c VFS471 Fingerprint Reader
003d VFS491
+ 003f VFS495 Fingerprint Reader
+ 0050 Swipe Fingerprint Sensor
138e Jungo LTD
9000 Raisonance S.A. STM32 ARM evaluation board
1390 TOMTOM B.V.
0001 GO 520 T/GO 630/ONE XL (v9)
+ 5454 Blue & Me 2
1391 IdealTEK, Inc.
1000 URTC-1000
1395 Sennheiser Communications
0031 AM10 v1 802.11n [Ralink RT3072]
0039 AE1200 802.11bgn Wireless Adapter [Broadcom BCM43235]
003a AE2500 802.11abgn Wireless Adapter [Broadcom BCM43236]
+ 003b AE3000 802.11abgn (3x3) Wireless Adapter [Ralink RT3573]
+ 003e AE6000 802.11a/b/g/n/ac Wireless Adapter [MediaTek MT7610U]
+ 003f WUSB6300 802.11a/b/g/n/ac Wireless Adapter [Realtek RTL8812AU]
13b1 WUSB200: Wireless-G Business Network Adapter with Rangebooster
13b2 Alesis
0030 Multimix 8
13b3 Nippon Dics Co., Ltd.
13ba PCPlay
- 0001 König Electronic CMP-KEYPAD12 Numeric Keypad
+ 0001 Konig Electronic CMP-KEYPAD12 Numeric Keypad
0017 PS/2 Keyboard+Mouse Adapter
0018 Barcode PCP-BCG4209
13be Ricoh Printing Systems, Ltd.
3306 Mediao 802.11n WLAN [Realtek RTL8191SU]
3315 Bluetooth module
3375 Atheros AR3012 Bluetooth 4.0 Adapter
+ 3392 Azurewave 43228+20702
+ 3394 Bluetooth
5070 Webcam
5111 Integrated Webcam
5115 Integrated Webcam
5116 Integrated Webcam
+ 5122 2M Integrated Webcam
5126 PC Cam
+ 5130 Integrated Webcam
5702 UVC VGA Webcam
5710 UVC VGA Webcam
5716 UVC VGA Webcam
7020 DTV-DVB UDST7020BDA DVB-S Box(DVBS for MCE2005)
7022 DTV-DVB UDST7022BDA DVB-S Box(Without HID)
+13d7 Guidance Software, Inc.
+ 0001 T5 PATA forensic bridge
13dc ALEREON, INC.
13dd i.Tech Dynamic Limited
13e1 Kaibo Wire & Cable (Shenzhen) Co., Ltd.
13ec Zydacron
0006 HID Remote Control
13ee MosArt
+ 0001 Optical Mouse
0003 Optical Mouse
13fd Initio Corporation
0840 INIC-1618L SATA
0841 Samsung SE-T084M DVD-RW
+ 1040 INIC-1511L PATA Bridge
1340 Hi-Speed USB to SATA Bridge
160f RocketFish SATA Bridge [INIC-1611]
1640 INIC-1610L SATA Bridge
+ 1669 INIC-1609PN
1840 INIC-1608 SATA bridge
+ 1e40 INIC-1610P SATA bridge
13fe Kingston Technology Company Inc.
1a00 512MB/1GB Flash Drive
1a23 512MB Flash Drive
1d00 DataTraveler 2.0 1GB/4GB Flash Drive / Patriot Xporter 4GB Flash Drive
1e00 Flash Drive 2 GB [ICIDU 2 GB]
1e50 U3 Smart Drive
- 1f00 DataTraveler 2.0 4GB Flash Drive / Patriot Xporter 32GB (PEF32GUSB) Flash Drive
- 1f23 2Gb
+ 1f00 Kingston DataTraveler / Patriot Xporter
+ 1f23 PS2232 flash drive controller
2240 microSD card reader
3100 2/4 GB stick
3123 Verbatim STORE N GO 4GB
+ 3600 flash drive (4GB, EMTEC)
3800 Rage XT Flash Drive
3e00 Flash Drive
+ 4100 Flash drive
+ 5000 USB flash drive (32 GB SHARKOON Accelerate)
5100 Flash Drive
1400 Axxion Group Corp.
1402 Bowe Bell & Howell
0020 Sony Wireless SingStar
2000 Sony Playstation Eye
1419 ABILITY ENTERPRISE CO., LTD.
+1421 Sensor Technology
+ 0605 Sentech Camera
1429 Vega Technologies Industrial (Austria) Co.
142a Thales E-Transactions
0003 Artema Hybrid
5117 OpenMoko Neo1973 kernel usbnet (g_ether, CDC Ethernet) mode
5118 OpenMoko Neo1973 Debug board (V2+)
5119 OpenMoko Neo1973 u-boot cdc_acm serial port
+ 511a HXD8 u-boot usbtty CDC ACM Mode
+ 511b SMDK2440 u-boot usbtty CDC ACM mode
+ 511c SMDK2443 u-boot usbtty CDC ACM mode
+ 511d QT2410 u-boot usbtty CDC ACM mode
5120 OpenMoko Neo1973 u-boot usbtty generic serial
5121 OpenMoko Neo1973 kernel mass storage (g_storage) mode
5122 OpenMoko Neo1973 / Neo Freerunner kernel cdc_ether USB network
1487 DSP Group, Ltd.
148e EVATRONIX SA
148f Ralink Technology, Corp.
+ 1000 Motorola BC4 Bluetooth 3.0+HS Adapter
1706 RT2500USB Wireless Adapter
2070 RT2070 Wireless Adapter
2570 RT2570 Wireless Adapter
5370 RT5370 Wireless Adapter
5372 RT5372 Wireless Adapter
5572 RT5572 Wireless Adapter
+ 7601 MT7601U Wireless Adapter
+ 760b MT7601U Wireless Adapter
9020 RT2500USB Wireless Adapter
9021 RT2501USB Wireless Adapter
1491 Futronic Technology Co. Ltd.
0020 FS81 Fingerprint Scanner Module
1493 Suunto
+ 0010 Bluebird [Ambit]
+ 0019 Duck [Ambit2]
+ 001a Colibri [Ambit2 S]
+ 001b Emu [Ambit3 Peak]
+ 001c Finch [Ambit3 Sport]
+ 001d Greentit [Ambit2 R]
1497 Panstrong Company Ltd.
1498 Microtek International Inc.
a090 DVB-T Tuner
0350 Storage Adapter V2
14c8 Zytronic
14cd Super Top
+ 1212 microSD card reader (SY-T18)
121c microSD card reader
+ 121f microSD CardReader SY-T18
123a SD/MMC/RS-MMC Card Reader
125c SD card reader
127b SDXC Reader
6116 M6116 SATA Bridge
- 6600 USB 2.0 IDE DEVICE
+ 6600 M110E PATA bridge
6700 Card Reader
6900 Card Reader
8123 SD MMC Reader
0501 WR-G528e 'CHEETAH'
14e1 Dialogue Technology Corp.
5000 PenMount 5000 Touch Controller
+14e4 Broadcom Corp.
14e5 SAIN Information & Communications Co., Ltd.
14ea Planex Communications
ab10 GW-US54GZ
1500 Ellisys
1501 Pine-Tum Enterprise Co., Ltd.
1509 First International Computer, Inc.
+ 0a01 LI-3100 Area Meter
+ 0a02 LI-7000 CO2/H2O Gas Analyzer
+ 0a03 C-DiGit Blot Scanner
9242 eHome Infrared Transceiver
1513 medMobile
0444 medMobile
1518 Cheshire Engineering Corp.
0001 HDReye High Dynamic Range Camera
0002 HDReye (before firmware loads)
+1519 Comneon
+ 0020 HSIC Device
1520 Bitwire Corp.
1524 ENE Technology Inc
6680 UTS 6680
1529 UBIQUAM Co., Ltd.
3100 CDMA 1xRTT USB Modem (U-100/105/200/300/520)
152a Thesycon Systemsoftware & Consulting GmbH
+ 8400 INI DVS128
+ 840d INI DAViS
+ 841a INI DAViS FX3
152d JMicron Technology Corp. / JMicron USA Technology Corp.
0539 JMS539 SuperSpeed SATA II 3.0G Bridge
0770 Alienware Integrated Webcam
0003 Krait Mouse
0007 DeathAdder Mouse
0013 Orochi mouse
+ 0015 Naga Mouse
0016 DeathAdder Mouse
0017 RZ01-0035 Laser Gaming Mouse [Imperator]
001c RZ01-0036 Optical Gaming Mouse [Abyssus]
0101 Copperhead Mouse
0102 Tarantula Keyboard
0109 Lycosa Keyboard
+ 0113 RZ07-0074 Gaming Keypad [Orbweaver]
0300 RZ06-0063 Motion Sensing Controllers [Hydra]
+153b TerraTec Electronic GmbH
+ 1181 Cinergy S2 PCIe Dual Port 1
+ 1182 Cinergy S2 PCIe Dual Port 2
1546 U-Blox AG
1547 SG Intec Ltd & Co KG
1000 SG-Lock[U2]
8180 CARD STAR/medic2
154b PNY
0010 USB 2.0 Flash Drive
+ 0048 Flash Drive
004d 8 GB Flash Drive
0057 32GB Micro Slide Attache Flash Drive
+ 007a 8GB Classic Attache Flash Drive
6545 FD Device
154d ConnectCounty Holdings Berhad
154e D&M Holdings, Inc. (Denon/Marantz)
0042 OSBDM - Debug Port
004f i.MX28 SystemOnChip in RecoveryMode
0052 i.MX50 SystemOnChip in RecoveryMode
- 0054 i.MX6Q SystemOnChip in RecoveryMode
+ 0054 i.MX 6Dual/6Quad SystemOnChip in RecoveryMode
+ 0061 i.MX 6Solo/6DualLite SystemOnChip in RecoveryMode
15a4 Afatech Technologies, Inc.
1000 AF9015/AF9035 DVB-T stick
1001 AF9015/AF9035 DVB-T stick
15c2 SoundGraph Inc.
0036 LC16M VFD Display/IR Receiver
0038 GD01 MX LCD Display/IR Receiver
+ 0042 Antec Veris Multimedia Station E-Z IR Receiver
ffda iMON PAD Remote Controller
ffdc iMON PAD Remote Controller
15c5 Advance Multimedia Internet Technology Inc. (AMIT)
0a41 MI-2540D [Optical mouse]
0a4c USB+PS/2 Optical Mouse
0a4d Optical Mouse
+ 0a4f Optical Mouse
15dc Hynix Semiconductor Inc.
15e0 Seong Ji Industrial Co., Ltd.
15e1 RSA
0726 Wi-Fi Wireless LAN Adapter
0740 802.11n Wireless LAN Card
0901 Voyager 205 ADSL Router
+ 2000 naturaSign Pad Standard
+ 2001 naturaSign Pad Standard
+ fe12 Bootloader
1696 Hitachi Video and Information System, Inc.
1697 VTec Test, Inc.
16a5 Shenzhen Zhengerya Cable Co., Ltd.
05e4 Free shared USB VID/PID pair for MIDI devices
06b4 USB2LPT with 2 interfaces
06b5 USB2LPT with 3 interfaces (native, HID, printer)
+ 0762 Osmocom SIMtrace
076b OpenPCD 13.56MHz RFID Reader
076c OpenPICC 13.56MHz RFID Simulator (native)
08ac OpenBeacon USB stick
075c AB-1.x UAC1 [Audio Widget]
075d AB-1.x UAC2 [Audio Widget]
080a S2E1 Interface
+ 0870 Kaufmann Automotive GmbH, RKS+CAN Interface
+16d1 Suprema Inc.
+ 0401 SUP-SFR400(A) BioMini Fingerprint Reader
16d3 Frontline Test Equipment, Inc.
16d5 AnyDATA Corporation
6202 CDMA/UMTS/GPRS modem
6501 CDMA 2000 1xRTT/EV-DO Modem
6502 CDMA/UMTS/GPRS modem
+ 6603 ADU-890WH modem
16d6 JABLOCOM s.r.o.
8000 GDP-04 desktop phone
8001 EYE-02
170b Swissonic
0011 MIDI-USB 1x1
170d Avnera
+1711 Leica Microsystems
+ 3020 IC80 HD Camera
+1724 Meyer Instruments (MIS)
+ 0115 PAXcam5
1725 Vitesse Semiconductor
1726 Axesstel, Inc.
1000 wireless modem
0077 WUSB54GC v3 802.11g Adapter [Ralink RT2070L]
0078 WUSB100 v2 RangePlus Wireless Network Adapter [Ralink RT3070]
0079 WUSB600N v2 Dual-Band Wireless-N Network Adapter [Ralink RT3572]
+173d QSENN
+ 0002 GP-K7000 keyboard
1740 Senao
+ 0100 EUB1200AC AC1200 DB Wireless Adapter [Realtek RTL8812AU]
+ 0600 EUB600v1 802.11abgn Wireless Adapter [Ralink RT3572]
0605 LevelOne WUA-0605 N_Max Wireless USB Adapter
0615 LevelOne WUA-0615 N_Max Wireless USB Adapter
1000 NUB-350 802.11g Wireless Adapter [Intersil ISL3887]
9706 EUB9706 802.11n Wireless Adapter [Ralink RT3072]
9801 EUB9801 802.11abgn Wireless Adapter [Ralink RT3572]
1743 General Atomics
+1748 MQP Electronics
+ 0101 Packet-Master USB12
174c ASMedia Technology Inc.
5106 Transcend StoreJet 25M3
- 55aa ASMedia 2105 SATA bridge
+ 5136 ASM1053 SATA 6Gb/s bridge
+ 55aa ASM1051 SATA 3Gb/s bridge
174f Syntek
1105 SM-MS/Pro-MMC-XD Card Reader
110b HP Webcam
0c30 Telldus TellStick
0c31 Telldus TellStick Duo
0c9f USBtiny
+ 1eef OpenAPC SecuKey
1782 Spreadtrum Communications Inc.
1784 TopSeed Technology Corp.
0001 eHome Infrared Transceiver
0002 Q1U dynamic microphone
0100 C03U multi-pattern microphone
0101 UB1 boundary microphone
+ 0120 Meteorite condenser microphone
0200 StudioDock monitors (internal hub)
0201 StudioDock monitors (audio)
0210 StudioGT monitors
0301 Q2U handheld microphone with XLR
0302 GoMic compact condenser microphone
+ 0303 C01U Pro condenser microphone
0304 Q2U handheld mic with XLR
0305 GoMic compact condenser mic
0310 Meteor condenser microphone
037b Plugable USB-VGA-165
037c Plugable DC-125
037d Plugable USB2-HDMI-165
+ 410a HDMI Adapter
430a HP Port Replicator (Composite Device)
4312 S2340T
17eb Cornice, Inc.
17ef Lenovo
+ 1000 Hub
1003 Integrated Smart Card Reader
1004 Integrated Webcam
1008 Hub
100a ThinkPad Mini Dock Plus Series 3
+ 304b AX88179 Gigabit Ethernet [ThinkPad OneLink GigaLAN]
3815 ChipsBnk 2GB USB Stick
4802 Lenovo Vc0323+MI1310_SOC Camera
4807 UVC Camera
6007 Smartcard Keyboard
6009 ThinkPad Keyboard with TrackPoint
6014 Mini Wireless Keyboard N5901
+ 6025 ThinkPad Travel Mouse
+ 7203 Ethernet adapter [U2L 100P-Y1]
7423 IdeaPad A1 Tablet
7435 A789 (Mass Storage mode, with debug)
743a A789 (Mass Storage mode)
1c22 ZHONGSHAN CHIANG YU ELECTRIC CO., LTD.
1c26 Shanghai Haiying Electronics Co., Ltd.
1c27 HuiYang D & S Cable Co., Ltd.
+1c29 Elster GmbH
+ 0001 ExMFE5 Simulator
+ 10fc enCore device
1c31 LS Cable Ltd.
1c34 SpringCard
7241 Prox'N'Roll RFID Scanner
1c7a LighTuning Technology Inc.
0801 Fingerprint Reader
1c7b LUXSHARE PRECISION INDUSTRY (SHENZHEN) CO., LTD.
-1c83 Schomäcker GmbH
+1c83 Schomaecker GmbH
0001 RS150 V2
1c87 2N TELEKOMUNIKACE a.s.
1c88 Somagic, Inc.
c010 Windham
2047 Texas Instruments
0200 MSP430 USB HID Bootstrap Loader
+ 0855 Invensense Embedded MotionApp HID Sensor
+ 0964 Inventio Software MSP430
2080 Barnes & Noble
0001 nook
0002 NOOKcolor
00dc aes220 FPGA Mini-Module
2478 Tripp-Lite
2008 U209-000-R Serial Port
+249c M2Tech s.r.l.
2632 TwinMOS
3209 7-in-1 Card Reader
+2639 Xsens
+ 0001 MTi-10 IMU
+ 0002 MTi-20 VRU
+ 0003 MTi-30 AHRS
+ 0011 MTi-100 IMU
+ 0012 MTi-200 VRU
+ 0013 MTi-300 AHRS
+ 0017 MTi-G 7xx GNSS/INS
+ 0100 Body Pack
+ 0101 Awinda Station
+ 0102 Awinda Dongle
+ 0103 Sync Station
+ 0200 MTw
+ d00d Wireless Receiver
2650 Electronics For Imaging, Inc. [hex]
2659 Sundtek
1101 TNT DVB-T/DAB/DAB+/FM
1211 MediaTV Pro III (US)
1212 MediaTV Pro III MiniPCIe (EU)
1213 MediaTV Pro III MiniPCIe (US)
+2676 Basler AG
+ ba02 ace
2730 Citizen
200f CT-S310 Label printer
2735 DigitalWay
915d Cyberpix S-210S / Little Tikes My Real Digital Camera
930b CCD Webcam(PC370R)
930c CCD Webcam(PC370R)
+27b8 ThingM
+ 01ed blink(1)
2821 ASUSTek Computer Inc.
0161 WL-161 802.11b Wireless Adapter [SiS 162U]
160f WL-160g 802.11g Wireless Adapter [Envara WiND512]
3300 WL-140 / Hawking HWU36D 802.11b Wireless Adapter [Intersil PRISM 3]
2899 Toptronic Industrial Co., Ltd
012c Camera Device
+2931 Jolla Oy
+ 0a01 Jolla Phone MTP
+ 0a02 Jolla Phone Developer
+ 0a05 Jolla PC connection
+ 0afe Jolla charging only
2c02 Planex Communications
14ea GW-US11H WLAN
2c1a Dolphin Peripherals
2fb2 Fujitsu, Ltd
3125 Eagletron
0001 TrackerPod Camera Stand
+3136 Navini Networks
3176 Whanam Electronics Co., Ltd
+3195 Link Instruments
+ f190 MSO-19
+ f280 MSO-28
+ f281 MSO-28
3275 VidzMedia Pte Ltd
4fb1 MonsterTV P2H
+3333 InLine
+ 3333 2 port KVM switch model 60652K
3334 AEI
1701 Fast Ethernet
3340 Yakumo
043a Mio A701 DigiWalker PPCPhone
0e3a Pocket PC 300 GPS SL / Typhoon MyGuide 3500
a0a3 deltaX 5 BT (D) PDA
+3344 Leaguer Microelectronics (LME)
+ 3744 OEM PC Remote
3504 Micro Star
f110 Security Key
3538 Power Quotient International Co., Ltd
4146 USBest Technology
9281 Iomega Micro Mini 128MB Flash Drive
ba01 Intuix Flash Drive
+4168 Targus
+ 1010 Wireless Compact Laser Mouse
4242 USB Design by Example
4201 Buttons and Lights HID device
4220 Echo 1 Camera
+4255 GoPro
+ 1000 9FF2 [Digital Photo Display]
+ 2000 HD2-14 [Hero 2 Camera]
4317 Broadcom Corp.
0700 U.S. Robotics USR5426 802.11g Adapter
0701 U.S. Robotics USR5425 Wireless MAXg Adapter
1001 Cetus CDC Device
5345 Owon
1234 PDS6062T Oscilloscope
+534c SatoshiLabs
+ 0001 Bitcoin Wallet [TREZOR]
+5354 Meyer Instruments (MIS)
+ 0017 PAXcam2
544d Transmeta Corp.
5543 UC-Logic Technology Corp.
0002 SuperPen WP3325U Tablet
0241 BisonCam, NB Pro
02d0 Lenovo Integrated Webcam [R5U877]
03d0 Lenovo Integrated Webcam [R5U877]
+59e3 Nonolith Labs
5a57 Zinwell
0260 RT2570
0280 802.11a/b/g/n USB Wireless LAN Card
6189 Sitecom
182d USB 2.0 Ethernet
2068 USB to serial cable (v2)
+6244 LightingSoft AG
+ 0101 Intelligent Usb Dmx Interface SIUDI5A
+ 0201 Intelligent Usb Dmx Interface SIUDI5C
+ 0300 Intelligent Usb Dmx Interface SIUDI6 Firmware download
+ 0301 Intelligent Usb Dmx Interface SIUDI6C
+ 0302 Intelligent Usb Dmx Interface SIUDI6A
+ 0303 Intelligent Usb Dmx Interface SIUDI6D
+ 0400 Touch Sensitive Intelligent Control Keypad STICK1A
+ 0401 Touch Sensitive Intelligent Control Keypad STICK1A
+ 0410 Intelligent Usb Dmx Interface SIUDI7 Firmware Download
+ 0411 Intelligent Usb Dmx Interface SIUDI7A
+ 0420 Intelligent Usb Dmx Interface SIUDI8A Firmware Download
+ 0421 Intelligent Usb Dmx Interface SIUDI8A
+ 0430 Intelligent Usb Dmx Interface SIUDI8C Firmware Download
+ 0431 Intelligent Usb Dmx Interface SIUDI8C
+ 0440 Intelligent Usb Dmx Interface SIUDI9A Firmware Download
+ 0441 Intelligent Usb Dmx Interface SIUDI9A
+ 0450 Intelligent Usb Dmx Interface SIUDI9C Firmware Download
+ 0451 Intelligent Usb Dmx Interface SIUDI9C
+ 0460 Touch Sensitive Intelligent Control Keypad STICK2 Firmware download
+ 0461 Touch Sensitive Intelligent Control Keypad STICK2
+ 0470 Touch Sensitive Intelligent Control Keypad STICK1B Firmware download
+ 0471 Touch Sensitive Intelligent Control Keypad STICK1B
+ 0480 Touch Sensitive Intelligent Control Keypad STICK3 Firmware download
+ 0481 Touch Sensitive Intelligent Control Keypad STICK3
+ 0490 Intelligent Usb Dmx Interface SIUDI9D Firmware Download
+ 0491 Intelligent Usb Dmx Interface SIUDI9D
+ 0500 Touch Sensitive Intelligent Control Keypad STICK2B Firmware download
+ 0501 Touch Sensitive Intelligent Control Keypad STICK2B
6253 TwinHan Technology Co., Ltd
0100 Ir reciver f. remote control
636c CoreLogic, Inc.
3301 Retro Adapter Mouse
8341 EGO Systems, Inc.
2000 Flashdisk
+8564 Transcend Information, Inc.
+ 1000 JetFlash
+ 8564 1000 JetFlash
+ 4000 RDF8
+8644 Intenso GmbG
+ 8003 Micro Line
+ 800b Micro Line (4GB)
+8e06 CH Products, Inc.
+ f700 DT225 Trackball
9016 Sitecom
182d WL-022 802.11b Adapter
9022 TeVii Technology Ltd.
7830 MCS7830 10/100 Mbps Ethernet adapter
7832 MCS7832 10/100 Mbps Ethernet adapter
7840 MCS7820/MCS7840 2/4 port serial adapter
+9849 Bestmedia CD Recordable GmbH & Co. KG
+ 0701 Platinum MyDrive HP
+9999 Odeon
+ 0001 JAF Mobile Phone Flasher Interface
99fa Grandtec
8988 V.cap Camera Device
9ac4 J. Westhues
6893 3CRUSB20075 OfficeConnect Wireless 108Mbps 11g Adapter [Atheros AR5523]
6895 AR5523
6897 AR5523
+aaaa MXT
+ 8815 microSD CardReader
abcd Unknown
cdee Petcam
+b58e Blue Microphones
+ 9e84 Yeti Stereo Microphone
+c216 Card Device Expert Co., LTD
+ 0180 MSR90 MagStripe reader
c251 Keil Software, Inc.
2710 ULink
cace CACE Technologies Inc.
0002 AirPCAP Classic 802.11 packet capture adapter
0300 AirPcap NX [Atheros AR9001U-(2)NG]
+cd12 SMART TECHNOLOGY INDUSTRIAL LTD.
+d208 Ultimarc
+ 0310 Mini-PAC Arcade Control Interface
d209 Ultimarc
0301 I-PAC Arcade Control Interface
0501 Ultra-Stik Ultimarc Ultra-Stik Player 1
+d904 LogiLink
+ 0003 Laser Mouse (ID0009A)
e4e4 Xorcom Ltd.
1130 Astribank series
1131 Astribank series
50a6 Gadmei UTV330 TV Box
e355 KWorld DVB-T 355U Digital TV Dongle
eb2a KWorld
+ef18 SMART TECHNOLOGY INDUSTRIAL LTD.
f003 Hewlett Packard
6002 PhotoSmart C500
+f182 Leap Motion
+ 0003 Controller
f4ec Atten Electronics / Siglent Technologies
ee38 Digital Storage Oscilloscope
+f4ed Shenzhen Siglent Co., Ltd.
+ ee37 SDG1010 Waveform Generator
+ ee3a SDG1010 Waveform Generator (TMC mode)
+f766 Hama
+ 0001 PC-Gamepad "Greystorm"
+fc08 Conrad Electronic SE
+ 0101 MIDI Cable UA0037
+ffee FNK Tech
+ 0100 Card Reader Controller RTS5101/RTS5111/RTS5116
# List of known device classes, subclasses and protocols
02 Wire Adapter Multifunction Peripheral
03 ?
01 Cable Based Association
+ 05 USB3 Vision
C fe Application Specific Interface
01 Device Firmware Update
02 IRDA Bridge
fi
# Enable swap plugin if swap found
- if [ "$(swapon -s | wc -l)" == "1" ]; then
+ if [ "$(swapon -s | wc -l)" == "0" ]; then
sed -i -e "s|^LoadPlugin swap|#LoadPlugin swap|g" /etc/collectd.conf
else
sed -i -e "s|^#LoadPlugin swap|LoadPlugin swap|g" /etc/collectd.conf
fi
+
+ # sync after config update...
+ sync
if [ $(date +%Y) -gt 2011 ]; then
boot_mesg "Starting Collection daemon..."
if [ "$(basename $0)" == "collectd" ]; then
/etc/init.d/tmpfs backup
fi
+ # sync after backup...
+ sync
;;
restart)
${0} stop
. /etc/sysconfig/rc
. ${rc_functions}
-# Pull custom configuration file
-if [ -e "/etc/sysconfig/dnsmasq" ]; then
- . /etc/sysconfig/dnsmasq
-fi
-
CACHE_SIZE=2500
ENABLE_DNSSEC=1
SHOW_SRV=1
TRUST_ANCHOR=".,19036,8,2,49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5"
+TIMESTAMP_FILE="/var/ipfire/dns/dnssec-timestamp"
+
+# Pull custom configuration file
+if [ -e "/etc/sysconfig/dnsmasq" ]; then
+ . /etc/sysconfig/dnsmasq
+fi
function dnssec_args() {
- local cmdline="--dnssec"
+ local cmdline="--dnssec --dnssec-timestamp ${TIMESTAMP_FILE}"
if [ -n "${TRUST_ANCHOR}" ]; then
cmdline="${cmdline} --trust-anchor=${TRUST_ANCHOR}"
iptables -A OUTPUT -o "${BLUE_DEV}" -j DHCPBLUEOUTPUT
fi
+ # GeoIP block
+ iptables -N GEOIPBLOCK
+ iptables -A INPUT -j GEOIPBLOCK
+ iptables -A FORWARD -j GEOIPBLOCK
+
# trafic from ipsecX/TUN/TAP interfaces, before "-i GREEN_DEV" accept everything
iptables -N IPSECINPUT
iptables -N IPSECFORWARD
--- /dev/null
+#!/bin/sh
+########################################################################
+# Begin $rc_base/init.d/haproxy
+#
+# Description : HAProxy init script
+#
+########################################################################
+
+. /etc/sysconfig/rc
+. ${rc_functions}
+
+case "${1}" in
+ start)
+ boot_mesg "Starting HAProxy..."
+ loadproc /usr/sbin/haproxy -D -f /etc/haproxy/haproxy.cfg \
+ -p /var/run/haproxy.pid
+ ;;
+
+ stop)
+ boot_mesg "Stopping HAProxy..."
+ killproc /usr/sbin/haproxy
+ ;;
+
+ reload)
+ boot_mesg "Reloading HAProxy..."
+ /usr/sbin/haproxy -D -f /etc/haproxy/haproxy.cfg \
+ -p /var/run/haproxy.pid -sf $(cat /var/run/haproxy.pid)
+ evaluate_retval
+ ;;
+
+ restart)
+ ${0} stop
+ sleep 1
+ ${0} start
+ ;;
+
+ status)
+ statusproc /usr/sbin/haproxy
+ ;;
+
+ *)
+ echo "Usage: ${0} {start|stop|reload|restart|status}"
+ exit 1
+ ;;
+esac
+
+# End $rc_base/init.d/haproxy
. /etc/sysconfig/rc
. ${rc_functions}
-CHANNEL="05"
+CHANNEL="6"
COUNTRY="00"
TXPOWER="auto"
INTERFACE="blue0"
if [ -e "/sys/class/net/$INTERFACE/phy80211" ]; then
DRIVER="NL80211"
driver="nl80211"
- elif [ -e "/sys/class/net/$INTERFACE/madwifi_name_type" ]; then
- DRIVER="MADWIFI"
- driver="madwifi"
elif [ "$(/bin/grep hostap /sys/class/net/$INTERFACE/uevent)" != "" ]; then
DRIVER="HOSTAP"
driver="hostap"
chmod 644 /var/ipfire/wlanap/settings.tmp
mv /var/ipfire/wlanap/settings.tmp /var/ipfire/wlanap/settings
- if [ "$DRIVER" == "MADWIFI" ]; then
- if [ "$(/usr/sbin/iwconfig $INTERFACE | /bin/grep "Mode:Master")" == "" ]; then
- boot_mesg "Setting MADWIFI wlan $INTERFACE to Master mode... "
- # Set Atheros Cards to master mode
- /usr/bin/wlanconfig $INTERFACE destroy > /dev/null
- /usr/bin/wlanconfig $INTERFACE create wlandev wifi0 wlanmode ap > /dev/null
- fi
- elif [ "$DRIVER" == "HOSTAP" ]; then
+ if [ "$DRIVER" == "HOSTAP" ]; then
if [ "$(/usr/sbin/iwconfig $INTERFACE | /bin/grep "Mode:Master")" == "" ]; then
boot_mesg "Setting HOSTAP wlan $INTERFACE to Master mode... "
# Set Prism Cards to master mode
/usr/bin/hostapd -P /var/run/hostapd /etc/hostapd.conf >/dev/null 2>&1 &
- sleep 2
-
- if [ $DRIVER == "MADWIFI" ]; then
- iwpriv $INTERFACE maccmd 3
- if [ $MACMODE != 0 ]; then
- FILE="/var/ipfire/wlanap/macfile"
- exec < $FILE
- while read LINE
- do
- iwpriv $INTERFACE addmac $LINE
- done
-
- iwpriv $INTERFACE maccmd $MACMODE
- fi
- fi
-
- sleep 2
+ sleep 3
if [ "$(/usr/sbin/iwconfig $INTERFACE | /bin/grep "Mode:Master")" == "" ]; then
- boot_mesg "Error! Can't set wlan master mode"
- echo_failure;
+ killproc /usr/bin/hostapd > /dev/null 2>&1
+ boot_mesg "Try to create additional AP device ..."
+ ip link set ${INTERFACE} down
+ ip link set ${INTERFACE} name ${INTERFACE}_man
+ iw dev ${INTERFACE}_man interface add ${INTERFACE} type __ap
+ evaluate_retval;
+ if [ -d /sys/class/net/${INTERFACE} ]; then
+ /usr/bin/hostapd -P /var/run/hostapd /etc/hostapd.conf >/dev/null 2>&1 &
+ else
+ ip link set ${INTERFACE}_man down
+ ip link set ${INTERFACE}_man name ${INTERFACE}
+ fi
exit 0;
else
echo_ok
stop)
boot_mesg "Stopping hostapd..."
-
+ ip link set ${INTERFACE} down > /dev/null 2>&1
+ ip link set ${INTERFACE} down_man > /dev/null 2>&1
+ sleep 1
killproc /usr/bin/hostapd
evaluate_retval
;;
setup_netdev_trigger nas6210:red:power ${RED_DEV} tx rx
setup_netdev_trigger nas6210:red:usb_copy ${GREEN_DEV} tx rx
+ # Mirabox start
+ setup_heartbeat_trigger mirabox:green:pwr
+ setup_netdev_trigger mirabox:green:stat ${GREEN_DEV} tx rx
+ setup_netdev_trigger mirabox:blue:stat ${BLUE_DEV} tx rx
+
exit 0
;;
disable_led_trigger nas6210:red:power
disable_led_trigger nas6210:red:usb_copy
+ # Mirabox stop
+ disable_led_trigger mirabox:green:pwr
+ enable_led mirabox:green:pwr
+ disable_led_trigger mirabox:green:stat
+ disable_led_trigger mirabox:blue:stat
+
exit 0
;;
--- /dev/null
+#!/bin/sh
+########################################################################
+# Begin $rc_base/init.d/network-trigger
+########################################################################
+
+. /etc/sysconfig/rc
+. ${rc_functions}
+
+case "${1}" in
+ start)
+ boot_mesg "Triggering network devices..."
+ udevadm trigger --action="add" --subsystem-match="net"
+ evaluate_retval
+ ;;
+
+ *)
+ echo "Usage: ${0} {start}"
+ exit 1
+ ;;
+esac
+
+# End $rc_base/init.d/network-trigger
fi
# Start dhcpcd.
- /sbin/dhcpcd "${device}" "${dhcp_start}" >/dev/null 2>&1
+ /sbin/dhcpcd ${dhcp_start} ${device} >/dev/null 2>&1
ret="$?"
if [ "${ret}" -eq 0 ]; then
fi
# Stop dhcpcd.
- /sbin/dhcpcd "${device}" "${dhcp_stop}" &> /dev/null
+ /sbin/dhcpcd ${dhcp_stop} ${device} &> /dev/null
ret="$?"
# Wait until dhcpd has stopped.
--- /dev/null
+#!/bin/bash
+
+# Get the GeoIP database if no one exists yet.
+
+DIR="/usr/share/xt_geoip/*"
+
+found=false
+
+# Check if the directory contains any data.
+for i in $DIR; do
+ # Ignore "." and ".."
+ if [ -d "$i" ]; then
+ found=true
+ break
+ fi
+done
+
+# Download ruleset if none has been found.
+if ! ${found}; then
+ /usr/local/bin/xt_geoip_update >/dev/null 2>&1
+fi
+
+exit 0
loadproc /usr/sbin/rpc.rquotad
fi
- # NFSD support only in 2.6 kernel
- /bin/uname -r | /bin/grep "2.6" 2>&1 > /dev/null
- if [ $? = 0 ]; then
- boot_mesg "Mounting nfsd virtual filesystem..."
- /bin/mount -t nfsd none /proc/fs/nfsd 2>&1 > /dev/null
- evaluate_retval
- fi
+ boot_mesg "Mounting nfsd virtual filesystem..."
+ /bin/mount -t nfsd none /proc/fs/nfsd 2>&1 > /dev/null
+ evaluate_retval
# Make ceratin that the list is refreshed on
# a restart.
/usr/sbin/exportfs -au 2>&1 > /dev/null
evaluate_retval
- # NFSD support only in 2.6 kernel
- /bin/uname -r | /bin/grep "2.6" 2>&1 > /dev/null
- if [ $? = 0 ]; then
- boot_mesg "Unmounting NFS Virtual Filesystem..."
- /bin/umount /proc/fs/nfsd 2>&1 > /dev/null
- evaluate_retval
- fi
+ boot_mesg "Unmounting NFS Virtual Filesystem..."
+ /bin/umount /proc/fs/nfsd 2>&1 > /dev/null
+ evaluate_retval
# Remove a pid file that isn't done automatically
boot_mesg "Removing the rpc.statd pid file if it exists"
--- /dev/null
+#!/bin/sh
+########################################################################
+# Begin $rc_base/init.d/swconfig
+#
+# Description : Script to setup lan switch.
+# don't edit this script! If you want change the functions
+# create an own script called swconfig.user
+########################################################################
+
+. /etc/sysconfig/rc
+. ${rc_functions}
+
+if [ -e /etc/init.d/swconfig.user ]; then
+ /etc/init.d/swconfig.user $*
+ exit ${?}
+fi
+
+if [ -e /var/ipfire/ethernet/swconfig_mac ]; then
+SWMAC=`cat /var/ipfire/ethernet/swconfig_mac`
+else
+# Generate a random local administrated mac address for vlan swconfig.
+SWMAC=`printf "%1x2:%02x:%02x:%02x:%02x" $[RANDOM%16] $[RANDOM%256] $[RANDOM%256] $[RANDOM%256] $[RANDOM%256]`
+echo $SWMAC > /var/ipfire/ethernet/swconfig_mac
+fi
+
+case "${1}" in
+ start)
+ case `cat /proc/device-tree/model 2>/dev/null` in
+ "Lamobo-R1")
+ #
+ # Lamobo R1 aka BPi R1 Routerboard
+ #
+ # Speaker | LAN1 | LAN2 | LAN3 | LAN4 || LAN5 | HDMI
+ # SW-Port | P2 | P1 | P0 | P4 || P3 |
+ # VLAN | 11 | 12 | 13 | 14 ||ALL(t)|
+ #
+ # Switch-Port P8 - ALL(t) boards internal CPU Port
+ #
+ device=`ls /sys/class/net/*/device/stmmac-0* | head -1 | cut -d/ -f5`
+ ip link set $device up
+ boot_mesg "Configure vlan-switch on $device ..."
+ # Reset switch, counter and enable vlan mode
+ swconfig dev $device set reset 1
+ swconfig dev $device set reset_mib 1
+ swconfig dev $device set enable_vlan 1
+ # configure vlans
+ swconfig dev $device vlan 11 set ports "2 3t 8t"
+ swconfig dev $device vlan 12 set ports "1 3t 8t"
+ swconfig dev $device vlan 13 set ports "0 3t 8t"
+ swconfig dev $device vlan 14 set ports "4 3t 8t"
+ # activate new config
+ swconfig dev $device set apply 1
+ # create interfaces for the vlan's
+ modprobe 8021q
+ vconfig add $device 11
+ vconfig add $device 12
+ vconfig add $device 13
+ vconfig add $device 14
+ # set local mac addresses.
+ ip link set dev $device.11 address $SWMAC:11
+ ip link set dev $device.12 address $SWMAC:12
+ ip link set dev $device.13 address $SWMAC:13
+ ip link set dev $device.14 address $SWMAC:14
+ # need to restart udev...
+ killall udevd
+ /etc/init.d/udev start
+ ;;
+ esac
+ exit 0
+ ;;
+
+ *)
+ echo "Usage: ${0} {start}"
+ exit 1
+ ;;
+esac
+
+# End $rc_base/init.d/swconfig
+
+++ /dev/null
-#!/bin/sh
-########################################################################
-# Begin $rc_base/init.d/teamspeak
-#
-# Description : Start/Stops the teamspeak server
-#
-# Authors : Michael Tremer
-#
-# Version : 01.00
-#
-# Notes :
-#
-########################################################################
-
-. /etc/sysconfig/rc
-. $rc_functions
-
-case "$1" in
- status)
- statusproc /opt/teamspeak/server_linux
- ;;
- *)
- export LANG=en_US.utf8
- cd /opt/teamspeak && sudo -u teamspeak ./teamspeak2-server_startscript $*
- exit 0
- ;;
-esac
-# End $rc_base/init.d/teamspeak
# <major> and <minor> are the major and minor numbers used for the device.
########################################################################
+/var/run/ovpnserver.log file 644 nobody nobody
+/var/run/openvpn dir 644 nobody nobody
+
# End /etc/sysconfig/createfiles
"%s - %s", size_str, p);
}
+ // Cut off the description string after 40 characters
+ disk->description[41] = '\0';
+
*disks++ = disk;
if (--i == 0)
return string;
}
-#define DEFAULT_LANG "en_US.utf8"
+#define DEFAULT_LANG "en.utf8"
#define NUM_LANGS 13
static struct lang {
static struct config {
int unattended;
int serial_console;
+ int novga;
int require_networking;
int perform_download;
int disable_swap;
} config = {
.unattended = 0,
.serial_console = 0,
+ .novga = 0,
.require_networking = 0,
.perform_download = 0,
.disable_swap = 0,
if ((strcmp(key, "console") == 0) && (strncmp(val, "ttyS", 4) == 0))
c->serial_console = 1;
+ // novga
+ else if (strcmp(key, "novga") == 0)
+ c->novga = 1;
+
// enable networking?
else if (strcmp(token, "installer.net") == 0)
c->require_networking = 1;
replace("/harddisk/etc/inittab", "#7:2345:respawn:", "7:2345:respawn:");
}
+ /* novga */
+ if (config.novga) {
+ /* grub */
+ FILE* f = fopen(DESTINATION_MOUNT_PATH "/etc/default/grub", "a");
+ if (!f) {
+ errorbox(_("Unable to open /etc/default/grub for writing."));
+ goto EXIT;
+ }
+
+ fprintf(f, "GRUB_GFXMODE=\"none\"\n");
+ fclose(f);
+ }
+
rc = hw_install_bootloader(destination, logfile);
if (rc) {
errorbox(_("Unable to install the bootloader."));
newtPopWindow();
- /* Set marker that the user has already accepted the gpl */
- mysystem(logfile, "/usr/bin/touch /harddisk/var/ipfire/main/gpl_accepted");
+ /* Set marker that the user has already accepted the GPL if the license has been shown
+ * in the installation process. In unatteded mode, the user will be presented the
+ * license when he or she logs on to the web user interface for the first time. */
+ if (!config.unattended)
+ mysystem(logfile, "/usr/bin/touch /harddisk/var/ipfire/main/gpl_accepted");
/* Copy restore file from cdrom */
char* backup_file = hw_find_backup_file(logfile, SOURCE_MOUNT_PATH);
es
fa
fr
+hr
hu
id
it
ja
+jv
km_KH
nl
pl
pt_PT
ro_RO
ru
+rw
sk
sq
+sr
+su
sv
th
tk
# 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-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"
+"PO-Revision-Date: 2015-01-13 21:22+0000\n"
+"Last-Translator: Henrik Simonsen <cybermaze@gmail.com>\n"
"Language-Team: Danish (http://www.transifex.com/projects/p/ipfire/language/da/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
#: main.c:384
msgid "Warning: Unattended installation will start in 10 seconds..."
-msgstr ""
+msgstr "Advarsel: Installation uden opsyn starter om 10 sekunder..."
#: main.c:403
msgid "Language selection"
#: main.c:418
msgid "Unattended mode"
-msgstr ""
+msgstr "Uden opsyn"
#: main.c:420
msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
#: main.c:449
#, c-format
msgid "The installer will now try downloading the installation image."
-msgstr ""
+msgstr "Installationen vil nu forsøge at hente installationsbilledet."
#: main.c:452
#, c-format
"No source drive could be found.\n"
"\n"
"You can try downloading the required installation image."
-msgstr ""
+msgstr "Kunne ikke finde et kildedrev.\n\nDu kan prøve at hente det påkrævede installationsbillede."
#: 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 "Sørg venligst for at din computer er forbundet til et netværk, så vil installationen forsøge at skaffe en IP adresse."
#: main.c:460
msgid "Download installation image"
-msgstr ""
+msgstr "Hent installationsbillede"
#: main.c:473
msgid "Trying to start networking (DHCP)..."
-msgstr ""
+msgstr "Prøver at starte netværk (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 "Kunne ikke oprette forbindelse til et netværk hvilket er nødvendigt for installationen.\n\nForbind venligst din computer til et netværk med en DHCP server og prøv igen."
#: main.c:487 main.c:516
msgid "Retry"
-msgstr ""
+msgstr "Prøv igen"
#: main.c:501
msgid "Downloading installation image..."
-msgstr ""
+msgstr "Henter installationsbillede..."
#: main.c:510
#, c-format
msgid "MD5 checksum mismatch"
-msgstr ""
+msgstr "MD5 checksum mismatch"
#: main.c:513
#, c-format
" Reason: %s\n"
"\n"
"%s"
-msgstr ""
+msgstr "Installationsbilledet kunne ikke hentes.\n Årsag: %s\n\n%s"
#: main.c:528
#, c-format
msgid ""
"Could not mount %s to %s:\n"
" %s\n"
-msgstr ""
+msgstr "Kunne ikke montere %s til %s:\n %s\n"
#: main.c:543
msgid "License Agreement"
#: main.c:640
msgid "Your disk configuration is currently not supported."
-msgstr ""
+msgstr "Din drev konfiguration er ikke understøttet pt."
#: main.c:655
msgid "Your harddisk is too small."
-msgstr "Din harddisk er for lille."
+msgstr "Din harddisk har for lille kapacitet."
#: main.c:671
msgid ""
"Your harddisk is very small, but you can continue without a swap partition."
-msgstr "Din harddisk er meget lille, men du kan fortsætte uden en swap partition."
+msgstr "Din harddisk har meget lille kapacitet, men du kan fortsætte uden en swap partition."
#: main.c:684
msgid "ext4 Filesystem"
"A backup file has been found on the installation image.\n"
"\n"
"Do you want to restore the backup?"
-msgstr ""
+msgstr "En backup fil er fundet på installationsbilledet.\n\nØnsker du at genskabe denne backup?"
#: 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 "Der opstod en fejl under forsøget på at genskabe backup filen."
#: main.c:869
msgid "Running post-install script..."
-msgstr ""
+msgstr "Kører efter-installation script..."
#: main.c:870
msgid "Post-install script failed."
-msgstr ""
+msgstr "Efter-installation script fejlede."
#: main.c:877
#, c-format
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Roberto Peña <roberto.pena@northsecure.es>, 2015
+# Roberto Peña <roberto.pena@northsecure.es>, 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"
+"PO-Revision-Date: 2015-02-01 09:23+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"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\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 "Cancelar"
#: main.c:176
msgid "I accept this license"
-msgstr ""
+msgstr "Acepto esta licencia"
#: main.c:384
msgid "Warning: Unattended installation will start in 10 seconds..."
-msgstr ""
+msgstr "Advertencia: La instalación desatendida comenzará en 10 segundos..."
#: main.c:403
msgid "Language selection"
-msgstr ""
+msgstr "Selección de idioma"
#: main.c:403
msgid "Select the language you wish to use for the installation."
-msgstr ""
+msgstr "Seleccione el idioma que quiere que se use durante la instalación."
#: main.c:418
msgid "Unattended mode"
-msgstr ""
+msgstr "Modo desatendido"
#: main.c:420
msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
-msgstr ""
+msgstr "<Tab>/<Alt-Tab> entre elementos | <Space> seleccionar | <F12> siguiente pantalla"
#: 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 "Bienvenido al programa de instalación %s.\n\nAl seleccionar Cancelar en cualquiera de las siguientes pantallas se reiniciará el equipo."
#: main.c:428
msgid "Start installation"
-msgstr ""
+msgstr "Comenzar la instalación"
#: main.c:449
#, c-format
msgid "The installer will now try downloading the installation image."
-msgstr ""
+msgstr "El instalador no ha podido descargar la imagen de instalación."
#: main.c:452
#, c-format
"No source drive could be found.\n"
"\n"
"You can try downloading the required installation image."
-msgstr ""
+msgstr "No se puede encontrar unidad de origen.\n\nPuede intentar descargar la imagen de instalación requerida."
#: 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 "Por favor, asegúrese de conectar el equipo a una red y el instalador intentará conectarse adquiriendo una dirección IP."
#: main.c:460
msgid "Download installation image"
-msgstr ""
+msgstr "Descargando la imagen de instalación"
#: main.c:473
msgid "Trying to start networking (DHCP)..."
-msgstr ""
+msgstr "Intentando iniciar la red (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 "La red no se pudo iniciar, pero es necesaria para continuar con la instalación.\n\nPor favor, conecte el equipo a una red con un servidor DHCP y vuelva a intentarlo."
#: main.c:487 main.c:516
msgid "Retry"
-msgstr ""
+msgstr "Reintentar"
#: main.c:501
msgid "Downloading installation image..."
-msgstr ""
+msgstr "Descargando la imagen de instalación..."
#: main.c:510
#, c-format
msgid "MD5 checksum mismatch"
-msgstr ""
+msgstr "Discordancia suma de verificación MD5 "
#: main.c:513
#, c-format
" Reason: %s\n"
"\n"
"%s"
-msgstr ""
+msgstr "La imagen de instalación no puede ser descargada.\nRazón: %s\n\n%s"
#: main.c:528
#, c-format
msgid ""
"Could not mount %s to %s:\n"
" %s\n"
-msgstr ""
+msgstr "No se pudo montar %s to %s:\n%s\n"
#: main.c:543
msgid "License Agreement"
-msgstr ""
+msgstr "Contrato de licencia"
#: main.c:544
msgid "License not accepted!"
-msgstr ""
+msgstr "Licencia no aceptada!"
#: main.c:566
msgid "No hard disk found."
-msgstr ""
+msgstr "Disco duro no encontrado."
#: main.c:587
msgid "Disk Selection"
-msgstr ""
+msgstr "Selección de disco"
#: 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 "Seleccione el disco(s) donde quiere instalar IPFire. Primero deberán ser particionados y cuando tengan particiones, se les pondrá un sistema de archivos.\n\nTODOS LOS DATOS DEL DISCO SERÁN DESTRUIDOS."
#: 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 "No se ha seleccionado un disco.\n\nPor favor, seleccione uno o más discos donde quiere que se instale IPFire."
#: main.c:617
#, c-format
" %s\n"
"\n"
"Do you agree to continue?"
-msgstr ""
+msgstr "El programa de instalación preparará ahora los discos elegidos:\n\n%s\n\nQuiere continuar?"
#: main.c:619
msgid "Disk Setup"
-msgstr ""
+msgstr "Disco de instalación"
#: main.c:620 main.c:630
msgid "Delete all data"
-msgstr ""
+msgstr "Borrar todos los datos"
#: main.c:627
#, c-format
" %s\n"
"\n"
"Do you agree to continue?"
-msgstr ""
+msgstr "El programa de instalación establecerá ahora una configuración RAID en los discos duros seleccionados:\n\n%s\n%s\n\nEstá de acuerdo con continuar?"
#: main.c:629
msgid "RAID Setup"
-msgstr ""
+msgstr "Configuración RAID"
#: main.c:640
msgid "Your disk configuration is currently not supported."
-msgstr ""
+msgstr "Su configuración del disco no es compatible actualmente."
#: main.c:655
msgid "Your harddisk is too small."
-msgstr ""
+msgstr "Su disco duro es demasiado pequeño."
#: main.c:671
msgid ""
"Your harddisk is very small, but you can continue without a swap partition."
-msgstr ""
+msgstr "Su disco duro es muy pequeño, pero se puede continuar sin una partición de intercambio."
#: main.c:684
msgid "ext4 Filesystem"
-msgstr ""
+msgstr "Sistema de archivos ext4"
#: main.c:685
msgid "ext4 Filesystem without journal"
-msgstr ""
+msgstr "Sistema de archivos ext4 sin diario"
#: main.c:686
msgid "XFS Filesystem"
-msgstr ""
+msgstr "Sistema de archivos XFS"
#: main.c:687
msgid "ReiserFS Filesystem"
-msgstr ""
+msgstr "Sistema de archivos ReiserFS"
#: main.c:701
msgid "Filesystem Selection"
-msgstr ""
+msgstr "Selección del sistema de archivos"
#: main.c:701
msgid "Please choose your filesystem:"
-msgstr ""
+msgstr "Por favor, seleccione su sistema de archivos:"
#: main.c:712
msgid "Building RAID..."
-msgstr ""
+msgstr "Construyendo RAID."
#: main.c:716
msgid "Unable to build the RAID."
-msgstr ""
+msgstr "No se ha podido construir el RAID."
#: main.c:728
msgid "Partitioning disk..."
-msgstr ""
+msgstr "Particionando disco..."
#: main.c:732
msgid "Unable to partition the disk."
-msgstr ""
+msgstr "No se ha podido particionar el disco."
#: main.c:739
msgid "Creating filesystems..."
-msgstr ""
+msgstr "Creando el sistema de archivos..."
#: main.c:743
msgid "Unable to create filesystems."
-msgstr ""
+msgstr "No se ha podido crear el sistema de archivos."
#: main.c:749
msgid "Unable to mount filesystems."
-msgstr ""
+msgstr "No se ha podido montar el sistema de archivos."
#: main.c:760
msgid "Installing the system..."
-msgstr ""
+msgstr "Instalando el sistema..."
#: main.c:761
msgid "Unable to install the system."
-msgstr ""
+msgstr "No se ha podido instalar el sistema."
#: main.c:777
msgid "Installing the language cache..."
-msgstr ""
+msgstr "Instalando la caché del idioma..."
#: main.c:778
msgid "Unable to install the language cache."
-msgstr ""
+msgstr "No se ha podido instalar la caché del idioma."
#: main.c:783
msgid "Installing the bootloader..."
-msgstr ""
+msgstr "Instalando el bootloader..."
#: main.c:790
msgid "Unable to open /etc/default/grub for writing."
-msgstr ""
+msgstr "No se ha podido abrir /etc/default/grub para escritura."
#: main.c:812
msgid "Unable to install the bootloader."
-msgstr ""
+msgstr "No se ha podido instalar el 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 "La imagen de instalación ha encontrado una copia de seguridad.\n\n¿Quiere restaurar la copia de seguridad?"
#: main.c:827
msgid "Yes"
-msgstr ""
+msgstr "Sí"
#: main.c:827
msgid "No"
-msgstr ""
+msgstr "No"
#: main.c:834
msgid "An error occured when the backup file was restored."
-msgstr ""
+msgstr "Se produjo un error cuando se restauró el archivo de copia de seguridad."
#: main.c:869
msgid "Running post-install script..."
-msgstr ""
+msgstr "Ejecutando post-script de instalación..."
#: main.c:870
msgid "Post-install script failed."
-msgstr ""
+msgstr "Ha fallado el Post-script de instalación."
#: 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 fue instalado con éxito!\n\nPor favor, quite cualquier medio de instalación de este sistema y pulse el botón de reinicio. Una vez reiniciado el sistema, se le pedirá configurar la red y el sistema de contraseñas. Después de eso, para acceder a la consola de configuración, deberá introducir en su navegador web https://%s:444 (o cual sea el nombre de su %s)."
#: main.c:882
msgid "Congratulations!"
-msgstr ""
+msgstr "¡Enhorabuena!"
#: main.c:882
msgid "Reboot"
-msgstr ""
+msgstr "Reiniciar"
#: main.c:893
msgid "Setup has failed. Press Ok to reboot."
-msgstr ""
+msgstr "La instalación ha fallado. Pulse Aceptar para reiniciar."
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Khalil Delavaran <khalil.delavaran@gmail.com>, 2014
+# Khalil Delavaran <khalil.delavaran@gmail.com>, 2014-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-12 18:37+0000\n"
+"PO-Revision-Date: 2015-02-17 23:49+0000\n"
"Last-Translator: Khalil Delavaran <khalil.delavaran@gmail.com>\n"
"Language-Team: Persian (http://www.transifex.com/projects/p/ipfire/language/fa/)\n"
"MIME-Version: 1.0\n"
#: 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"
#: 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"
#: main.c:510
#, c-format
msgid "MD5 checksum mismatch"
-msgstr ""
+msgstr "ناهماهنگی در کنرل جمعی MD5"
#: main.c:513
#, c-format
#: main.c:640
msgid "Your disk configuration is currently not supported."
-msgstr ""
+msgstr "پیکربندی دیسک شما پشتیبانی نمی شود."
#: main.c:655
msgid "Your harddisk is too small."
"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"
#: 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
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# nonux <nonux@free.fr>, 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"
+"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"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\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 "Annuler"
#: main.c:176
msgid "I accept this license"
-msgstr ""
+msgstr "J'accepte la licence"
#: main.c:384
msgid "Warning: Unattended installation will start in 10 seconds..."
#: main.c:403
msgid "Language selection"
-msgstr ""
+msgstr "Sélection de la langue"
#: main.c:403
msgid "Select the language you wish to use for the installation."
-msgstr ""
+msgstr "Sélectionnez la langue que vous souhaitez utiliser pour l'installation."
#: main.c:418
msgid "Unattended mode"
#: main.c:428
msgid "Start installation"
-msgstr ""
+msgstr "Démarrer l'installation"
#: main.c:449
#, c-format
msgid "The installer will now try downloading the installation image."
-msgstr ""
+msgstr "Le programme d'installation va maintenant essayer de télécharger l'image d'installation."
#: main.c:452
#, c-format
#: main.c:460
msgid "Download installation image"
-msgstr ""
+msgstr "Télécharger l'image d'installation"
#: main.c:473
msgid "Trying to start networking (DHCP)..."
-msgstr ""
+msgstr "Tente de démarrer le réseau (DHCP)..."
#: main.c:484
msgid ""
#: main.c:487 main.c:516
msgid "Retry"
-msgstr ""
+msgstr "Ré-essayer"
#: main.c:501
msgid "Downloading installation image..."
-msgstr ""
+msgstr "Téléchargement de l'image d'installation ..."
#: main.c:510
#, c-format
#: main.c:543
msgid "License Agreement"
-msgstr ""
+msgstr "Contrat de licence"
#: main.c:544
msgid "License not accepted!"
-msgstr ""
+msgstr "Contrat de licence non accepté!"
#: main.c:566
msgid "No hard disk found."
-msgstr ""
+msgstr "Aucun disque dur trouvé."
#: main.c:587
msgid "Disk Selection"
-msgstr ""
+msgstr "Sélection du disque"
#: main.c:588
msgid ""
#: main.c:619
msgid "Disk Setup"
-msgstr ""
+msgstr "Configuration du disque"
#: main.c:620 main.c:630
msgid "Delete all data"
-msgstr ""
+msgstr "Supprime toutes les données"
#: main.c:627
#, c-format
#: main.c:640
msgid "Your disk configuration is currently not supported."
-msgstr ""
+msgstr "La configuration du disque n'est pas actuellement supportée."
#: main.c:655
msgid "Your harddisk is too small."
-msgstr ""
+msgstr "Votre disque dur est trop petit."
#: main.c:671
msgid ""
"Your harddisk is very small, but you can continue without a swap partition."
-msgstr ""
+msgstr "Votre disque dur est très petit, mais vous pouvez continuer sans la partition d'échange."
#: main.c:684
msgid "ext4 Filesystem"
-msgstr ""
+msgstr "Système de fichier ext4"
#: main.c:685
msgid "ext4 Filesystem without journal"
-msgstr ""
+msgstr "Système de fichier ext4 sans journalisation"
#: main.c:686
msgid "XFS Filesystem"
-msgstr ""
+msgstr "Système de fichier XFS"
#: main.c:687
msgid "ReiserFS Filesystem"
-msgstr ""
+msgstr "Système de fichier ReiserFS"
#: main.c:701
msgid "Filesystem Selection"
-msgstr ""
+msgstr "Choix du système de fichier"
#: main.c:701
msgid "Please choose your filesystem:"
-msgstr ""
+msgstr "Merci de choisir votre système de fichier : "
#: main.c:712
msgid "Building RAID..."
-msgstr ""
+msgstr "Contruction du RAID..."
#: main.c:716
msgid "Unable to build the RAID."
-msgstr ""
+msgstr "Impossible de construire le RAID."
#: main.c:728
msgid "Partitioning disk..."
-msgstr ""
+msgstr "Partitionnement du disque..."
#: main.c:732
msgid "Unable to partition the disk."
-msgstr ""
+msgstr "Impossible de partitionner le disque."
#: main.c:739
msgid "Creating filesystems..."
-msgstr ""
+msgstr "Création des systèmes de fichiers"
#: main.c:743
msgid "Unable to create filesystems."
-msgstr ""
+msgstr "Impossible de créer les systèmes de fichiers."
#: main.c:749
msgid "Unable to mount filesystems."
-msgstr ""
+msgstr "Impossible de monter les systèmes de fichiers."
#: main.c:760
msgid "Installing the system..."
-msgstr ""
+msgstr "Installation du système..."
#: main.c:761
msgid "Unable to install the system."
-msgstr ""
+msgstr "Impossible d'installer le système."
#: main.c:777
msgid "Installing the language cache..."
#: main.c:827
msgid "Yes"
-msgstr ""
+msgstr "Oui"
#: main.c:827
msgid "No"
-msgstr ""
+msgstr "Non"
#: main.c:834
msgid "An error occured when the backup file was restored."
#: main.c:882
msgid "Reboot"
-msgstr ""
+msgstr "Re-démarrer"
#: main.c:893
msgid "Setup has failed. Press Ok to reboot."
-msgstr ""
+msgstr "La configuration a échoué. Appuyez sur OK pour re-démarrer."
"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"
+"PO-Revision-Date: 2015-01-26 12:07+0000\n"
+"Last-Translator: Blago Culjak <blago.culjak@hotmail.com>\n"
"Language-Team: Croatian (http://www.transifex.com/projects/p/ipfire/language/hr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
#: main.c:384
msgid "Warning: Unattended installation will start in 10 seconds..."
-msgstr ""
+msgstr "Upozoranje: Nenadgledana instalacija će započeti za 10 sekundi..."
#: main.c:403
msgid "Language selection"
#: main.c:418
msgid "Unattended mode"
-msgstr ""
+msgstr "Nenadgledana instalacija"
#: main.c:420
msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
#: main.c:449
#, c-format
msgid "The installer will now try downloading the installation image."
-msgstr ""
+msgstr "Instalacija će pokušati preuzeti instalacijsku sliku."
#: main.c:452
#, c-format
"No source drive could be found.\n"
"\n"
"You can try downloading the required installation image."
-msgstr ""
+msgstr "Izvorišni pogon nije pronađen.\n\nMožete pokušati preuzeti instalacijsku sliku."
#: 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 "Provjerite da li ste priključeni na mrežu, instalacija će pokušati dobiti IP adresu."
#: main.c:460
msgid "Download installation image"
-msgstr ""
+msgstr "Preuzimanje instalacijske slike"
#: main.c:473
msgid "Trying to start networking (DHCP)..."
-msgstr ""
+msgstr "Pokušaj starta mreže (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 "Mreža nije mogla biti pokrenuta a obvezna je za nastavak instalacije. \n\nPriključite se na mrežu s omogućenim DHCPom i pokušajte ponovno."
#: main.c:487 main.c:516
msgid "Retry"
-msgstr ""
+msgstr "Ponovno"
#: main.c:501
msgid "Downloading installation image..."
-msgstr ""
+msgstr "Preuzimanje instalacijske slike"
#: main.c:510
#, c-format
msgid "MD5 checksum mismatch"
-msgstr ""
+msgstr "MD5 checksum se ne podudara"
#: main.c:513
#, c-format
" Reason: %s\n"
"\n"
"%s"
-msgstr ""
+msgstr "Instalacijska slika nije preuzeta.\n Razlog: %s\n\n%s"
#: main.c:528
#, c-format
msgid ""
"Could not mount %s to %s:\n"
" %s\n"
-msgstr ""
+msgstr "Nemogu monitari %s na %s:\n %s\n"
#: main.c:543
msgid "License Agreement"
#: main.c:640
msgid "Your disk configuration is currently not supported."
-msgstr ""
+msgstr "Vaša diskovna konfiguracija nije podržana."
#: main.c:655
msgid "Your harddisk is too small."
"A backup file has been found on the installation image.\n"
"\n"
"Do you want to restore the backup?"
-msgstr ""
+msgstr "Pričuvna kopija je pronađena na instalacijskoj slici.\n\nDa li želite povratiti kopiju?"
#: main.c:827
msgid "Yes"
-msgstr ""
+msgstr "Da"
#: main.c:827
msgid "No"
-msgstr ""
+msgstr "Ne"
#: main.c:834
msgid "An error occured when the backup file was restored."
-msgstr ""
+msgstr "Greška pri povratu pričuvne kopije."
#: main.c:869
msgid "Running post-install script..."
-msgstr ""
+msgstr "Izvodim post-instalacijske skripte."
#: main.c:870
msgid "Post-install script failed."
-msgstr ""
+msgstr "Post-instalacijske skripte nisu uspješno izvršene."
#: main.c:877
#, c-format
--- /dev/null
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+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-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: jv\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: main.c:78 main.c:179 main.c:404 main.c:670 main.c:702 main.c:893
+msgid "OK"
+msgstr ""
+
+#: main.c:79 main.c:460 main.c:487 main.c:516 main.c:620 main.c:630 main.c:670
+#: main.c:702
+msgid "Cancel"
+msgstr ""
+
+#: main.c:176
+msgid "I accept this license"
+msgstr ""
+
+#: main.c:384
+msgid "Warning: Unattended installation will start in 10 seconds..."
+msgstr ""
+
+#: main.c:403
+msgid "Language selection"
+msgstr ""
+
+#: main.c:403
+msgid "Select the language you wish to use for the installation."
+msgstr ""
+
+#: main.c:418
+msgid "Unattended mode"
+msgstr ""
+
+#: main.c:420
+msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
+msgstr ""
+
+#: main.c:426
+#, c-format
+msgid ""
+"Welcome to the %s installation program.\n"
+"\n"
+"Selecting Cancel on any of the following screens will reboot the computer."
+msgstr ""
+
+#: main.c:428
+msgid "Start installation"
+msgstr ""
+
+#: main.c:449
+#, c-format
+msgid "The installer will now try downloading the installation image."
+msgstr ""
+
+#: main.c:452
+#, c-format
+msgid ""
+"No source drive could be found.\n"
+"\n"
+"You can try downloading the required installation image."
+msgstr ""
+
+#: 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 ""
+
+#: main.c:460
+msgid "Download installation image"
+msgstr ""
+
+#: main.c:473
+msgid "Trying to start networking (DHCP)..."
+msgstr ""
+
+#: 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 ""
+
+#: main.c:487 main.c:516
+msgid "Retry"
+msgstr ""
+
+#: main.c:501
+msgid "Downloading installation image..."
+msgstr ""
+
+#: main.c:510
+#, c-format
+msgid "MD5 checksum mismatch"
+msgstr ""
+
+#: main.c:513
+#, c-format
+msgid ""
+"The installation image could not be downloaded.\n"
+" Reason: %s\n"
+"\n"
+"%s"
+msgstr ""
+
+#: main.c:528
+#, c-format
+msgid ""
+"Could not mount %s to %s:\n"
+" %s\n"
+msgstr ""
+
+#: main.c:543
+msgid "License Agreement"
+msgstr ""
+
+#: main.c:544
+msgid "License not accepted!"
+msgstr ""
+
+#: main.c:566
+msgid "No hard disk found."
+msgstr ""
+
+#: main.c:587
+msgid "Disk Selection"
+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 ""
+
+#: main.c:599
+msgid ""
+"No disk has been selected.\n"
+"\n"
+"Please select one or more disks you want to install IPFire on."
+msgstr ""
+
+#: main.c:617
+#, c-format
+msgid ""
+"The installation program will now prepare the chosen harddisk:\n"
+"\n"
+" %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:619
+msgid "Disk Setup"
+msgstr ""
+
+#: main.c:620 main.c:630
+msgid "Delete all data"
+msgstr ""
+
+#: main.c:627
+#, c-format
+msgid ""
+"The installation program will now set up a RAID configuration on the selected harddisks:\n"
+"\n"
+" %s\n"
+" %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:629
+msgid "RAID Setup"
+msgstr ""
+
+#: main.c:640
+msgid "Your disk configuration is currently not supported."
+msgstr ""
+
+#: main.c:655
+msgid "Your harddisk is too small."
+msgstr ""
+
+#: main.c:671
+msgid ""
+"Your harddisk is very small, but you can continue without a swap partition."
+msgstr ""
+
+#: main.c:684
+msgid "ext4 Filesystem"
+msgstr ""
+
+#: main.c:685
+msgid "ext4 Filesystem without journal"
+msgstr ""
+
+#: main.c:686
+msgid "XFS Filesystem"
+msgstr ""
+
+#: main.c:687
+msgid "ReiserFS Filesystem"
+msgstr ""
+
+#: main.c:701
+msgid "Filesystem Selection"
+msgstr ""
+
+#: main.c:701
+msgid "Please choose your filesystem:"
+msgstr ""
+
+#: main.c:712
+msgid "Building RAID..."
+msgstr ""
+
+#: main.c:716
+msgid "Unable to build the RAID."
+msgstr ""
+
+#: main.c:728
+msgid "Partitioning disk..."
+msgstr ""
+
+#: main.c:732
+msgid "Unable to partition the disk."
+msgstr ""
+
+#: main.c:739
+msgid "Creating filesystems..."
+msgstr ""
+
+#: main.c:743
+msgid "Unable to create filesystems."
+msgstr ""
+
+#: main.c:749
+msgid "Unable to mount filesystems."
+msgstr ""
+
+#: main.c:760
+msgid "Installing the system..."
+msgstr ""
+
+#: main.c:761
+msgid "Unable to install the system."
+msgstr ""
+
+#: main.c:777
+msgid "Installing the language cache..."
+msgstr ""
+
+#: main.c:778
+msgid "Unable to install the language cache."
+msgstr ""
+
+#: main.c:783
+msgid "Installing the bootloader..."
+msgstr ""
+
+#: main.c:790
+msgid "Unable to open /etc/default/grub for writing."
+msgstr ""
+
+#: main.c:812
+msgid "Unable to install the bootloader."
+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 ""
+
+#: main.c:827
+msgid "Yes"
+msgstr ""
+
+#: main.c:827
+msgid "No"
+msgstr ""
+
+#: main.c:834
+msgid "An error occured when the backup file was restored."
+msgstr ""
+
+#: main.c:869
+msgid "Running post-install script..."
+msgstr ""
+
+#: main.c:870
+msgid "Post-install script failed."
+msgstr ""
+
+#: main.c:877
+#, c-format
+msgid ""
+"%s was successfully installed!\n"
+"\n"
+"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
+msgstr ""
+
+#: main.c:882
+msgid "Congratulations!"
+msgstr ""
+
+#: main.c:882
+msgid "Reboot"
+msgstr ""
+
+#: main.c:893
+msgid "Setup has failed. Press Ok to reboot."
+msgstr ""
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Jacques Hylkema <j.hylkema@intronics.nl>, 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"
+"PO-Revision-Date: 2015-01-26 07:37+0000\n"
+"Last-Translator: Jacques Hylkema <j.hylkema@intronics.nl>\n"
"Language-Team: Dutch (http://www.transifex.com/projects/p/ipfire/language/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
#: main.c:78 main.c:179 main.c:404 main.c:670 main.c:702 main.c:893
msgid "OK"
-msgstr ""
+msgstr "Oke"
#: 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 "Annuleren"
#: main.c:176
msgid "I accept this license"
-msgstr ""
+msgstr "Ik accepteer deze licentie"
#: main.c:384
msgid "Warning: Unattended installation will start in 10 seconds..."
-msgstr ""
+msgstr "Waarschuwing: Installatie zonder toezicht zal binnen 10 seconden starten..."
#: main.c:403
msgid "Language selection"
-msgstr ""
+msgstr "Taal selectie"
#: main.c:403
msgid "Select the language you wish to use for the installation."
-msgstr ""
+msgstr "Selecteer de taal die je wil gebruiken voor de installatie."
#: main.c:418
msgid "Unattended mode"
-msgstr ""
+msgstr "Zonder toezicht modus"
#: main.c:420
msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
-msgstr ""
+msgstr "<Tab>/<Alt-Tab> tussen onderdelen | <Space> selecteer | <F12> volgend scherm"
#: 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 "Welkom bij het %s installatie programma.\n\nKiezen van Annuleren op een van de volgende schermen zal de computer opnieuw laten starten."
#: main.c:428
msgid "Start installation"
-msgstr ""
+msgstr "Start installatie"
#: main.c:449
#, c-format
msgid "The installer will now try downloading the installation image."
-msgstr ""
+msgstr "Het installatie programma zal nu proberen het installatiebestand te downloaden."
#: main.c:452
#, c-format
"No source drive could be found.\n"
"\n"
"You can try downloading the required installation image."
-msgstr ""
+msgstr "Er kon geen bron-schijf worden gevonden.\n\nJe kan proberen het benodigde installatie bestand te downloaden."
#: 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 "Verbindt uw machine aan een netwerk en het installatie programma zal proberen een IP adres te verkrijgen."
#: main.c:460
msgid "Download installation image"
-msgstr ""
+msgstr "Download installatie bestand"
#: main.c:473
msgid "Trying to start networking (DHCP)..."
-msgstr ""
+msgstr "Bezig met starten van het netwerk (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 "Netwerk kon niet worden gestart, maar is vereist om door te kunnen gaan met de installatie.\n\nKoppel je machine aan een netwerk met een DHCP server en probeer opnieuw."
#: main.c:487 main.c:516
msgid "Retry"
-msgstr ""
+msgstr "Opnieuw"
#: main.c:501
msgid "Downloading installation image..."
-msgstr ""
+msgstr "Bezig met downloaden van het installatie bestand..."
#: main.c:510
#, c-format
msgid "MD5 checksum mismatch"
-msgstr ""
+msgstr "MD5 checksum verschil"
#: main.c:513
#, c-format
" Reason: %s\n"
"\n"
"%s"
-msgstr ""
+msgstr "Het installatie bestand kon niet worden ge-download.\nReden: %s\n\n%s"
#: main.c:528
#, c-format
msgid ""
"Could not mount %s to %s:\n"
" %s\n"
-msgstr ""
+msgstr "Kon %s niet aankoppelen naar %s:\n%s\n"
#: main.c:543
msgid "License Agreement"
-msgstr ""
+msgstr "Licentie overeenkomst"
#: main.c:544
msgid "License not accepted!"
-msgstr ""
+msgstr "Licentie niet geaccepteerd!"
#: main.c:566
msgid "No hard disk found."
-msgstr ""
+msgstr "Geen harde schijf gevonden."
#: main.c:587
msgid "Disk Selection"
-msgstr ""
+msgstr "Schijf selectie"
#: 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 "Selecteer de schijf/schijven waarop je IPFire op wil installeren. Deze zullen eerst worden gepartitioneerd, waarna er een bestandssysteem op zal worden gezet.\n\nALLE HUIDIGE GEGEVENS OP DE SCHIJF ZULLEN WORDEN VERNIETIGD. "
#: 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 "Er is geen schijf geselecteerd.\n\nSelecteer een of meerdere schijven waarop je IPFire op wil installeren."
#: main.c:617
#, c-format
" %s\n"
"\n"
"Do you agree to continue?"
-msgstr ""
+msgstr "Het installatie programma zal nu de geselecteerde harde schijf voorbereiden:\n\n%s\n\nGa je ermee accoord om door te gaan?"
#: main.c:619
msgid "Disk Setup"
-msgstr ""
+msgstr "Schijf configuratie"
#: main.c:620 main.c:630
msgid "Delete all data"
-msgstr ""
+msgstr "Verwijder alle gegevens"
#: main.c:627
#, c-format
" %s\n"
"\n"
"Do you agree to continue?"
-msgstr ""
+msgstr "Het installatie programma zal nu een RAID configureren op de geselecteerde harde schijven:\n\n%s\n%s\n\nGa je ermee accoord om door te gaan?"
#: main.c:629
msgid "RAID Setup"
-msgstr ""
+msgstr "RAID configuratie"
#: main.c:640
msgid "Your disk configuration is currently not supported."
-msgstr ""
+msgstr "Je schijf configuratie wordt momenteel niet ondersteund."
#: main.c:655
msgid "Your harddisk is too small."
-msgstr ""
+msgstr "Je harde schijf is te klein."
#: main.c:671
msgid ""
"Your harddisk is very small, but you can continue without a swap partition."
-msgstr ""
+msgstr "Je harde schijf is erg klein, maar je kan doorgaan zonder een swap partitie."
#: main.c:684
msgid "ext4 Filesystem"
-msgstr ""
+msgstr "ext4 bestandssysteem"
#: main.c:685
msgid "ext4 Filesystem without journal"
-msgstr ""
+msgstr "ext4 bestandssysteem zonder journaal"
#: main.c:686
msgid "XFS Filesystem"
-msgstr ""
+msgstr "XFS bestandssysteem"
#: main.c:687
msgid "ReiserFS Filesystem"
-msgstr ""
+msgstr "ReiserFS bestandssysteem"
#: main.c:701
msgid "Filesystem Selection"
-msgstr ""
+msgstr "Bestandssysteem selectie"
#: main.c:701
msgid "Please choose your filesystem:"
-msgstr ""
+msgstr "Kies uw bestandssysteem:"
#: main.c:712
msgid "Building RAID..."
-msgstr ""
+msgstr "Opbouwen RAID..."
#: main.c:716
msgid "Unable to build the RAID."
-msgstr ""
+msgstr "Kon RAID niet opbouwen."
#: main.c:728
msgid "Partitioning disk..."
-msgstr ""
+msgstr "Bezig met partitioneren van de schijf"
#: main.c:732
msgid "Unable to partition the disk."
-msgstr ""
+msgstr "Kon schijf niet partitioneren."
#: main.c:739
msgid "Creating filesystems..."
-msgstr ""
+msgstr "Bezig met creëren bestandssystemen"
#: main.c:743
msgid "Unable to create filesystems."
-msgstr ""
+msgstr "Kon bestandssystemen niet creëren."
#: main.c:749
msgid "Unable to mount filesystems."
-msgstr ""
+msgstr "Kon bestandssystemen niet aankoppelen."
#: main.c:760
msgid "Installing the system..."
-msgstr ""
+msgstr "Bezig met de installatie van het systeem..."
#: main.c:761
msgid "Unable to install the system."
-msgstr ""
+msgstr "Kon het systeem niet installeren."
#: main.c:777
msgid "Installing the language cache..."
-msgstr ""
+msgstr "Bezig met installeren van de taal-cache..."
#: main.c:778
msgid "Unable to install the language cache."
-msgstr ""
+msgstr "Kon de taal-cache niet installeren."
#: main.c:783
msgid "Installing the bootloader..."
-msgstr ""
+msgstr "Bezig met installeren van de bootloader"
#: main.c:790
msgid "Unable to open /etc/default/grub for writing."
-msgstr ""
+msgstr "Kan /etc/default/grub niet openen met schrijfrechten"
#: main.c:812
msgid "Unable to install the bootloader."
-msgstr ""
+msgstr "Kon de bootloader niet installeren."
#: 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 "Er is een backup bestand gevonden op de installatie disk.\n\nWil je deze backup terugzetten?"
#: main.c:827
msgid "Yes"
-msgstr ""
+msgstr "Ja"
#: main.c:827
msgid "No"
-msgstr ""
+msgstr "Nee"
#: main.c:834
msgid "An error occured when the backup file was restored."
-msgstr ""
+msgstr "Er is een fout opgetreden bij het terugzetten van de backup."
#: main.c:869
msgid "Running post-install script..."
-msgstr ""
+msgstr "Uitvoeren post-install script..."
#: main.c:870
msgid "Post-install script failed."
-msgstr ""
+msgstr "Fout bij uitvoeren van Post-install script"
#: 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 was met succes geïnstalleerd!\n\nVerwijder de installatie disk en druk op de reboot knop. Nadat het systeem is herstart zal je worden gevraagd om het netwerk en systeem wachtwoorden in te stellen. Daarna moet je in je webbrowser navigeren naar https://%s:444 (of hoe je %s hebt genoemd) voor de web configuratie console."
#: main.c:882
msgid "Congratulations!"
-msgstr ""
+msgstr "Gefeliciteerd!"
#: main.c:882
msgid "Reboot"
-msgstr ""
+msgstr "Herstarten"
#: main.c:893
msgid "Setup has failed. Press Ok to reboot."
-msgstr ""
+msgstr "Installatie is mislukt. Druk op OK om te herstarten."
# Translators:
# btelega <btelega@gmail.com>, 2014
# Przemysław Karpeta <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: 2014-11-05 01:33+0000\n"
-"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"PO-Revision-Date: 2015-01-26 10:41+0000\n"
+"Last-Translator: Przemyslaw Zdroik <zdroyer@gmail.com>\n"
"Language-Team: Polish (http://www.transifex.com/projects/p/ipfire/language/pl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
#: main.c:384
msgid "Warning: Unattended installation will start in 10 seconds..."
-msgstr ""
+msgstr "Ostrzeżenie: Zautomatyzowana instalacja zacznie się za 10 sekund..."
#: main.c:403
msgid "Language selection"
#: main.c:418
msgid "Unattended mode"
-msgstr ""
+msgstr "Tryb zautomatyzowany"
#: main.c:420
msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
#: main.c:449
#, c-format
msgid "The installer will now try downloading the installation image."
-msgstr ""
+msgstr "Instalator spróbuje teraz pobrać plik obrazu instalacji."
#: main.c:452
#, c-format
"No source drive could be found.\n"
"\n"
"You can try downloading the required installation image."
-msgstr ""
+msgstr "Medium źródłowe nie zostało znalezione.\n\nMożesz spróbować pobrać wymagany plik obrazu instalacji."
#: 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 "Podłącz twój komputer do sieci a instalator spróbuje połączyć się by pobrać adres IP."
#: main.c:460
msgid "Download installation image"
-msgstr ""
+msgstr "Pobierz pliku obrazu instalacji"
#: main.c:473
msgid "Trying to start networking (DHCP)..."
-msgstr ""
+msgstr "Próba uruchomienia sieci (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 "Obsługa sieci, która jest wymagana do kontynuowania instalacji, nie mogła zostać uruchomiona \n\nPodłącz proszę twój komputer do sieci z działającym serwerem DHCP i Spróbuj ponownie."
#: main.c:487 main.c:516
msgid "Retry"
-msgstr ""
+msgstr "Spróbuj ponownie"
#: main.c:501
msgid "Downloading installation image..."
-msgstr ""
+msgstr "Pobieranie pliku obrazu instalacji..."
#: main.c:510
#, c-format
msgid "MD5 checksum mismatch"
-msgstr ""
+msgstr "Niezgodność sumy kontrolnej MD5"
#: main.c:513
#, c-format
" Reason: %s\n"
"\n"
"%s"
-msgstr ""
+msgstr "Plik obrazu instalacji nie został pobrany\nPrzyczyna: %s\n\n%s"
#: main.c:528
#, c-format
msgid ""
"Could not mount %s to %s:\n"
" %s\n"
-msgstr ""
+msgstr "Nie można zamontować %s w %s:\n%s \n"
#: main.c:543
msgid "License Agreement"
#: main.c:640
msgid "Your disk configuration is currently not supported."
-msgstr ""
+msgstr "Twoja konfiguracja dysku nie jest aktualnie obsługiwana. "
#: main.c:655
msgid "Your harddisk is too small."
#: main.c:684
msgid "ext4 Filesystem"
-msgstr "ext4 Filesystem"
+msgstr "system plików ext4 "
#: main.c:685
msgid "ext4 Filesystem without journal"
-msgstr "ext4 Filesystem bez dziennika"
+msgstr "system plików ext4 bez dziennika"
#: main.c:686
msgid "XFS Filesystem"
"A backup file has been found on the installation image.\n"
"\n"
"Do you want to restore the backup?"
-msgstr ""
+msgstr "Plik kopii zapasowej został odnaleziony w obrazie instalacji.\n\nCzy chcesz przywrócić informację ze znalezionej kopii zapasowej? "
#: main.c:827
msgid "Yes"
-msgstr ""
+msgstr "Tak"
#: main.c:827
msgid "No"
-msgstr ""
+msgstr "Nie"
#: main.c:834
msgid "An error occured when the backup file was restored."
-msgstr ""
+msgstr "Wystąpił błąd podczas przywracania pliku kopii zapasowej."
#: main.c:869
msgid "Running post-install script..."
-msgstr ""
+msgstr "Działanie skryptu post-instalacyjnego..."
#: main.c:870
msgid "Post-install script failed."
-msgstr ""
+msgstr "Skrypt post-instalacyjny zawiódł."
#: main.c:877
#, c-format
#
# Translators:
# André Felipe Morro <andre@andremorro.com>, 2014
+# Evertton de Lima <e.everttonlima@gmail.com>, 2015
# Leandro Luquetti Basilio da Silva <leandroluquetti@gmail.com>, 2014
+# Moisés Bites Borges de Castro <moisesbites@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: 2014-11-05 01:33+0000\n"
-"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"PO-Revision-Date: 2015-03-24 21:30+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"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
#: main.c:384
msgid "Warning: Unattended installation will start in 10 seconds..."
-msgstr ""
+msgstr "Cuidado: A instalação irá iniciar em 10 segundos..."
#: main.c:403
msgid "Language selection"
-msgstr ""
+msgstr "Seleção de idioma"
#: main.c:403
msgid "Select the language you wish to use for the installation."
-msgstr ""
+msgstr "Selecione o idioma que você deseja usar para a instalação."
#: main.c:418
msgid "Unattended mode"
-msgstr ""
+msgstr "Modo automático"
#: main.c:420
msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
"Welcome to the %s installation program.\n"
"\n"
"Selecting Cancel on any of the following screens will reboot the computer."
-msgstr ""
+msgstr "Bem-vindo para o programa de instalação %s.\n\nSelecionando Cancelar em qualquer uma das telas seguintes irá reiniciar o computador."
#: main.c:428
msgid "Start installation"
#: main.c:449
#, c-format
msgid "The installer will now try downloading the installation image."
-msgstr ""
+msgstr "O instalador irá tentar baixar a imagem de instalação agora."
#: main.c:452
#, c-format
"No source drive could be found.\n"
"\n"
"You can try downloading the required installation image."
-msgstr ""
+msgstr "Nenhum Drive de origem foi encontrado.\n\nVocê pode tentar baixar a imagem da instalação solicitada. "
#: 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 "Por favor certifique que sua máquina está conectada com uma rede e o instalador irá tentar conectar para pegar um endereço IP;"
#: main.c:460
msgid "Download installation image"
-msgstr ""
+msgstr "Baixar imagem de instalação"
#: main.c:473
msgid "Trying to start networking (DHCP)..."
-msgstr ""
+msgstr "Tentando iniciar a rede (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 "Rede não pode ser iniciado, mas é necessária para continuar a instalação.\n\nPor favor, conecte sua máquina a uma rede com servidor DHCP e reinicie."
#: main.c:487 main.c:516
msgid "Retry"
-msgstr ""
+msgstr "Tentar novamente"
#: main.c:501
msgid "Downloading installation image..."
-msgstr ""
+msgstr "Baixando imagem de instalação..."
#: main.c:510
#, c-format
msgid "MD5 checksum mismatch"
-msgstr ""
+msgstr "Assinatura MD5 incompatível"
#: main.c:513
#, c-format
" Reason: %s\n"
"\n"
"%s"
-msgstr ""
+msgstr "A imagem de instalação não pode ser baixada.\nMotivo: %s\n\n%s"
#: main.c:528
#, c-format
msgid ""
"Could not mount %s to %s:\n"
" %s\n"
-msgstr ""
+msgstr "Não pode montar %s para %s:\n%s\n"
#: main.c:543
msgid "License Agreement"
-msgstr ""
+msgstr "Contrato de Licença"
#: main.c:544
msgid "License not accepted!"
#: main.c:640
msgid "Your disk configuration is currently not supported."
-msgstr ""
+msgstr "Sua configuração de disco não é suportada atualmente."
#: main.c:655
msgid "Your harddisk is too small."
#: main.c:671
msgid ""
"Your harddisk is very small, but you can continue without a swap partition."
-msgstr ""
+msgstr "Seu disco rígido é muito pequeno, mas você pode continuar sem uma partição swap."
#: main.c:684
msgid "ext4 Filesystem"
#: main.c:790
msgid "Unable to open /etc/default/grub for writing."
-msgstr ""
+msgstr "Não possível abrir /etc/default/grub para escrita."
#: main.c:812
msgid "Unable to install the bootloader."
"A backup file has been found on the installation image.\n"
"\n"
"Do you want to restore the backup?"
-msgstr ""
+msgstr "Uma cópia de segurança foi encontrada na imagem de instalação.\n\nVocê quer restaurar a cópia de segurança?"
#: main.c:827
msgid "Yes"
-msgstr ""
+msgstr "Sim"
#: main.c:827
msgid "No"
-msgstr ""
+msgstr "Não"
#: main.c:834
msgid "An error occured when the backup file was restored."
-msgstr ""
+msgstr "Um erro ocorreu enquanto a cópia de segurança era restaurada."
#: main.c:869
msgid "Running post-install script..."
-msgstr ""
+msgstr "Executando script pós instalação..."
#: main.c:870
msgid "Post-install script failed."
-msgstr ""
+msgstr "Script de pós instalação falhou."
#: 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 está instalado com sucesso!\n\nPor favor, remova qualquer mídia de instalação desse sistema e o reinicie. Assim que o sistema for reiniciado você será solicitado a configurar a rede e especificar as senhas de sistema. Após isso, você deve apontar seu navegador para https://%s:444 (ou use nome de %s) para a página de configuração web."
#: main.c:882
msgid "Congratulations!"
#: main.c:893
msgid "Setup has failed. Press Ok to reboot."
-msgstr ""
+msgstr "Instalação falhou. Pressione Ok para reiniciar."
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# ellviss <kpe1501@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: 2014-11-05 01:33+0000\n"
-"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"PO-Revision-Date: 2015-02-24 12:56+0000\n"
+"Last-Translator: ellviss <kpe1501@gmail.com>\n"
"Language-Team: Russian (http://www.transifex.com/projects/p/ipfire/language/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
#: main.c:78 main.c:179 main.c:404 main.c:670 main.c:702 main.c:893
msgid "OK"
-msgstr ""
+msgstr "ОК"
#: main.c:79 main.c:460 main.c:487 main.c:516 main.c:620 main.c:630 main.c:670
#: main.c:702
msgid "Cancel"
-msgstr ""
+msgstr "Отмена"
#: main.c:176
msgid "I accept this license"
-msgstr ""
+msgstr "Я Согласен с этой лицензией"
#: main.c:384
msgid "Warning: Unattended installation will start in 10 seconds..."
-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Нажатие Отмены на любом из следующих экранах приведёт к перезагрузке."
#: 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 ""
#: 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
msgid ""
"Could not mount %s to %s:\n"
" %s\n"
-msgstr ""
+msgstr "Не удалось подключить %s к %s:\n\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 ""
" %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
#: 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 - ваш адрес ) для конфигурирования системы через web"
#: 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 "Установка не удалась. Нажмите ОК для перезапуска"
"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: Japanese (Japan) (http://www.transifex.com/projects/p/ipfire/language/ja_JP/)\n"
+"Language-Team: Sundanese (http://www.transifex.com/projects/p/ipfire/language/su/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: ja_JP\n"
+"Language: su\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: main.c:78 main.c:179 main.c:404 main.c:670 main.c:702 main.c:893
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Ersan YILDIRIM <ersan73@gmail.com>, 2015
# Kudret Emre <kudretemre@hotmail.com.tr>, 2014
# Kudret Emre <kudretemre@hotmail.com.tr>, 2014
msgid ""
"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-08 17:24+0000\n"
-"Last-Translator: Kudret Emre <kudretemre@hotmail.com.tr>\n"
+"PO-Revision-Date: 2015-02-28 22:11+0000\n"
+"Last-Translator: Ersan YILDIRIM <ersan73@gmail.com>\n"
"Language-Team: Turkish (http://www.transifex.com/projects/p/ipfire/language/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
#: main.c:420
msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
-msgstr "<Tab>/<Alt-Tab> elementler arası geçiş | <Space> seç | <F12> sonraki ekran"
+msgstr "<Tab>/<Alt-Tab> düğmeler arası geçiş | <Space> seç | <F12> sonraki ekran"
#: 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 "%s yükleme programına hoşgeldiniz.\n\nİlerleyen ekranların herhangi birinde İptal'e tıklamanız bilgisayarınızı yeniden başlatır."
+msgstr "%s kurulum programına hoş geldiniz.\n\nSonraki ekranların herhangi birinde İptal seçeneğini seçtiğinizde bilgisayar yeniden başlatılac."
#: main.c:428
msgid "Start installation"
-msgstr "Yüklemeyi başlat"
+msgstr "Kurulumu Başlat"
#: main.c:449
#, c-format
msgid "The installer will now try downloading the installation image."
-msgstr "Yükleyici şimdi yükleme dosyasını indirmeyi deneyecek."
+msgstr "Yükleyici şimdi kurulum dosyasını indirmeyi deneyecek."
#: main.c:452
#, c-format
"No source drive could be found.\n"
"\n"
"You can try downloading the required installation image."
-msgstr "Hiçbir kaynak sürücüsü bulunamadı.\n\nGerekli yükleme dosyasını indirmeyi deneyebilirsiniz."
+msgstr "Hiçbir kaynak sürücüsü bulunamadı.\n\nGerekli kurulum dosyasını indirmeyi deneyebilirsiniz."
#: 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 "Makinenizi bir ağa bağladığınıza emin olun ve yükleyiciye IP adresini elle girerek bağlanmayı tekrar deneyin."
#: main.c:460
msgid "Download installation image"
-msgstr "Yükleme dosyasını indir"
+msgstr "Kurulum dosyasını indir"
#: main.c:473
msgid "Trying to start networking (DHCP)..."
msgid ""
"Could not mount %s to %s:\n"
" %s\n"
-msgstr ""
+msgstr "Bağlanamadı: %s - %s:\n%s\n\n"
#: main.c:543
msgid "License Agreement"
#: main.c:620 main.c:630
msgid "Delete all data"
-msgstr "Tüm veriyi sil"
+msgstr "Tüm Veriyi Sil"
#: main.c:627
#, c-format
#: main.c:701
msgid "Filesystem Selection"
-msgstr "Dosya sistemi Seçimi"
+msgstr "Dosya Sistemi Seçimi"
#: main.c:701
msgid "Please choose your filesystem:"
"A backup file has been found on the installation image.\n"
"\n"
"Do you want to restore the backup?"
-msgstr "Yükleme dosyasında bir yedekleme dosyası bulundu.\n\nYedeği geri yüklemek ister misiniz?"
+msgstr "Kurulum dosyasında bir yedek dosyası bulundu.\n\nYedeği geri yüklemek ister misiniz?"
#: main.c:827
msgid "Yes"
#: main.c:869
msgid "Running post-install script..."
-msgstr "post-install betiği çalıştırılıyor..."
+msgstr "Post-install betiği çalıştırılıyor..."
#: main.c:870
msgid "Post-install script failed."
-msgstr "post-install betiği başarısız oldu."
+msgstr "Post-install betiği başarısız oldu."
#: 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 "%s başarıyla yüklendi!\n\nLütfen yükleme ortamlarını bu sistemden çıkarın ve yeniden başlatma butonuna tıklayın. Sistem yeniden başlatıldığında ağ ve sistem şifrenizi ayarlamanız istenecek. Daha sonra web yapılandırma konsoluna gitmek için yarayıcınızdan https://%s:444 (veya %s yerine ne isim verdiyseniz) adresine gidin."
+msgstr "%s başarıyla yüklendi!\n\nLütfen yükleme ortamını sistemden çıkarın ve Yeniden Başlat düğmesine tıklayın. Sistem yeniden başlatıldığında ağ kartları, ağ ve sistem parolalarını yapılandırabileceğiniz programı çalıştıracaktır. Kurulum tamamlandıktan sonra bir internet tarayıcısı açıp yapılandırma sayfasına gitmek için adres satırına https://%s:444 (veya %s yerine ne ad verdiyseniz) adresini girin."
#: main.c:882
msgid "Congratulations!"
#: main.c:882
msgid "Reboot"
-msgstr "Yeniden başlat."
+msgstr "Yeniden Başlat"
#: main.c:893
msgid "Setup has failed. Press Ok to reboot."
-msgstr "Kurulum başarısız oldu. Yeniden başlatmak için Tamam'a basın."
+msgstr "Kurulum başarısız oldu. Yeniden başlatmak için Tamam düğmesine basın."
PROGS = iowrap
SUID_PROGS = squidctrl sshctrl ipfirereboot \
ipsecctrl timectrl dhcpctrl snortctrl \
- applejuicectrl rebuildhosts backupctrl \
+ applejuicectrl rebuildhosts backupctrl collectdctrl \
logwatch openvpnctrl firewallctrl \
wirelessctrl getipstat qosctrl launch-ether-wake \
redctrl syslogdctrl extrahdctrl sambactrl upnpctrl tripwirectrl \
smartctrl clamavctrl addonctrl pakfire mpfirectrl wlanapctrl \
setaliases urlfilterctrl updxlratorctrl fireinfoctrl rebuildroutes \
- getconntracktable wirelessclient dnsmasqctrl torctrl
+ getconntracktable wirelessclient dnsmasqctrl torctrl ddnsctrl
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.
+ *
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include "setuid.h"
+
+int main(int argc, char *argv[]) {
+ if (!(initsetuid()))
+ exit(1);
+
+ if (argc < 2) {
+ fprintf(stderr, "\nNo argument given.\n\ncollectdctrl (start|stop|restart)\n\n");
+ exit(1);
+ }
+
+ if (strcmp(argv[1], "restart") == 0) {
+ safe_system("/etc/rc.d/init.d/collectd restart");
+
+ } else if (strcmp(argv[1], "stop") == 0) {
+ safe_system("/etc/rc.d/init.d/collectd stop");
+
+ } else if (strcmp(argv[1], "start") == 0) {
+ safe_system("/etc/rc.d/init.d/collectd start");
+
+ } else {
+ fprintf(stderr, "\nBad argument given.\n\ncollectdctrl (start|stop|restart)\n\n");
+ exit(1);
+ }
+
+ return 0;
+}
--- /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.
+*
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "setuid.h"
+
+const char *conffile = "/var/ipfire/ddns/ddns.conf";
+
+int main(int argc, char *argv[]) {
+ char cmd[STRING_SIZE];
+
+ if (!(initsetuid()))
+ exit(1);
+
+ if (argc < 2) {
+ fprintf(stderr, "\nNo argument given.\n\nddnsctrl (update-all)\n\n");
+ exit(1);
+ }
+
+ if (strcmp(argv[1], "update-all") == 0) {
+ snprintf(cmd, sizeof(cmd), "/usr/bin/ddns --config %s update-all >/dev/null 2>&1", conffile);
+ safe_system(cmd);
+ } else {
+ fprintf(stderr, "\nBad argument given.\n\nddnsctrl (update-all)\n\n");
+ exit(1);
+ }
+
+ return 0;
+}
void open_physical (char *interface, int nat_traversal_port) {
char str[STRING_SIZE];
- // GRE ???
-// sprintf(str, "/sbin/iptables -A " phystable " -p 47 -i %s -j ACCEPT", interface);
-// safe_system(str);
- // ESP
-// sprintf(str, "/sbin/iptables -A " phystable " -p 50 -i %s -j ACCEPT", interface);
-// safe_system(str);
- // AH
-// sprintf(str, "/sbin/iptables -A " phystable " -p 51 -i %s -j ACCEPT", interface);
-// safe_system(str);
// IKE
-
- sprintf(str, "/sbin/iptables -D IPSECINPUT -p udp -i %s --dport 500 -j ACCEPT >/dev/null 2>&1", interface);
+ sprintf(str, "/sbin/iptables --wait -D IPSECINPUT -p udp -i %s --dport 500 -j ACCEPT >/dev/null 2>&1", interface);
safe_system(str);
- sprintf(str, "/sbin/iptables -A IPSECINPUT -p udp -i %s --dport 500 -j ACCEPT", interface);
+ sprintf(str, "/sbin/iptables --wait -A IPSECINPUT -p udp -i %s --dport 500 -j ACCEPT", interface);
safe_system(str);
if (! nat_traversal_port)
return;
- sprintf(str, "/sbin/iptables -D IPSECINPUT -p udp -i %s --dport %i -j ACCEPT >/dev/null 2>&1", interface, nat_traversal_port);
+ sprintf(str, "/sbin/iptables --wait -D IPSECINPUT -p udp -i %s --dport %i -j ACCEPT >/dev/null 2>&1", interface, nat_traversal_port);
safe_system(str);
- sprintf(str, "/sbin/iptables -A IPSECINPUT -p udp -i %s --dport %i -j ACCEPT", interface, nat_traversal_port);
+ sprintf(str, "/sbin/iptables --wait -A IPSECINPUT -p udp -i %s --dport %i -j ACCEPT", interface, nat_traversal_port);
safe_system(str);
}
void ipsec_norules() {
/* clear input rules */
- safe_system("/sbin/iptables -F IPSECINPUT");
- safe_system("/sbin/iptables -F IPSECFORWARD");
- safe_system("/sbin/iptables -F IPSECOUTPUT");
+ safe_system("/sbin/iptables --wait -F IPSECINPUT");
+ safe_system("/sbin/iptables --wait -F IPSECFORWARD");
+ safe_system("/sbin/iptables --wait -F IPSECOUTPUT");
}
/*
+#define _XOPEN_SOURCE 500
#include <signal.h>
#include <stdio.h>
#include <string.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <fcntl.h>
+#include <ftw.h>
#include "setuid.h"
#include "netutil.h"
#include "libsmooth.h"
typedef struct connection_struct connection;
+static int recursive_remove_callback(const char* fpath, const struct stat* sb, int typeflag, struct FTW* ftwbuf) {
+ int rv = remove(fpath);
+ if (rv)
+ perror(fpath);
+
+ return rv;
+}
+
+static int recursive_remove(const char* path) {
+ return nftw(path, recursive_remove_callback, 64, FTW_DEPTH | FTW_PHYS);
+}
+
void exithandler(void)
{
if(kv)
executeCommand(command);
snprintf(command, STRING_SIZE-1, "/usr/sbin/openvpn --config /var/ipfire/ovpn/server.conf");
executeCommand(command);
+ snprintf(command, STRING_SIZE-1, "/bin/chown root.nobody /var/run/ovpnserver.log");
+ executeCommand(command);
+ snprintf(command, STRING_SIZE-1, "/bin/chmod 644 /var/run/ovpnserver.log");
+ executeCommand(command);
}
}
int killNet2Net(char *name) {
connection *conn = NULL;
connection *conn_iter;
+ int rc = 0;
conn_iter = getConnections();
snprintf(command, STRING_SIZE - 1, "/bin/rm -f %s", pidfile);
executeCommand(command);
+ char runfile[STRING_SIZE];
+ snprintf(runfile, STRING_SIZE - 1, "/var/run/openvpn/%s-n2n", conn->name);
+ rc = recursive_remove(runfile);
+ if (rc)
+ perror(runfile);
+
return 0;
}
int deleterrd(char *name) {
+ char rrd_dir[STRING_SIZE];
+
connection *conn = getConnections();
+ while(conn) {
+ if (strcmp(conn->name, name) != 0) {
+ conn = conn->next;
+ continue;
+ }
- char rrd_file[STRING_SIZE];
- snprintf(rrd_file, STRING_SIZE - 1, "/var/log/rrd/collectd/localhost/openvpn-%s/if_octets.rrd", name);
+ // Handle RW connections
+ if (strcmp(conn->type, "host") == 0) {
+ snprintf(rrd_dir, STRING_SIZE - 1, "/var/log/rrd/collectd/localhost/openvpn-%s/", name);
- char rrd_dir[STRING_SIZE];
- snprintf(rrd_dir, STRING_SIZE - 1, "/var/log/rrd/collectd/localhost/openvpn-%s", name);
+ // Handle N2N connections
+ } else if (strcmp(conn->type, "net") == 0) {
+ snprintf(rrd_dir, STRING_SIZE - 1, "/var/log/rrd/collectd/localhost/openvpn-%s-n2n/", name);
- while(conn) {
- /* Find only RW-Connections with the given name. */
- if (((strcmp(conn->type, "host") == 0) && (strcmp(conn->name, name) == 0))) {
- remove(rrd_file);
- remove(rrd_dir);
- return 0;
+ // Unhandled connection type
+ } else {
+ conn = conn->next;
+ continue;
}
- conn = conn->next;
+
+ return recursive_remove(rrd_dir);
}
return 1;
############################################################################
#
. /opt/pakfire/lib/functions.sh
-stop_service ${NAME}
-
-if [ ! -e "/var/ipfire/backup/addons/includes/teamspeak" ]; then
- echo /opt/teamspeak/bad_names.txt > /var/ipfire/backup/addons/includes/teamspeak
- echo /opt/teamspeak/server.dbs >> /var/ipfire/backup/addons/includes/teamspeak
- echo /opt/teamspeak/server.ini >> /var/ipfire/backup/addons/includes/teamspeak
- echo /opt/teamspeak/server.log >> /var/ipfire/backup/addons/includes/teamspeak
- echo /opt/teamspeak/whitelist.txt >> /var/ipfire/backup/addons/includes/teamspeak
-fi
-make_backup ${NAME}
-rm -rf /opt/teamspeak
-userdel teamspeak
-rm -rf /etc/rc.d/rc*.d/*teamspeak
-
+extract_files
+# Enable autostart
+ln -sf ../init.d/haproxy /etc/rc.d/rc0.d/K25haproxy
+ln -sf ../init.d/haproxy /etc/rc.d/rc3.d/S35haproxy
+ln -sf ../init.d/haproxy /etc/rc.d/rc6.d/K25haproxy
# along with IPFire; if not, write to the Free Software #
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #
# #
-# Copyright (C) 2008 IPFire-Team <info@ipfire.org>. #
+# Copyright (C) 2007 IPFire-Team <info@ipfire.org>. #
# #
############################################################################
#
. /opt/pakfire/lib/functions.sh
-
-extract_files
-
-[ -d /opt/teamspeak ] || mkdir -p /opt/teamspeak
-
-cd /tmp
-wget -c ftp://ftp.freenet.de/pub/4players/teamspeak.org/releases/ts2_server_rc2_202319.tar.bz2 \
- ftp://ftp.freenet.de/pub/4players/teamspeak.org/developer/server/202401/server_linux
-
-tar xvfj ts2_server_rc2_202319.tar.bz2 -C /tmp
-
-cp -av /tmp/tss2_rc2/* /opt/teamspeak
-mv /tmp/server_linux /opt/teamspeak/server_linux
-chmod 755 -v /opt/teamspeak/server_linux
-
-rm -rf /tmp/tss2_rc2 ts2_server_rc2_202319.tar.bz2
-
-groupadd teamspeak
-useradd -g teamspeak teamspeak
-
-chown teamspeak.teamspeak /opt/teamspeak -Rv
-
-restore_backup ${NAME}
-start_service --background ${NAME}
-
-ln -sf ../init.d/teamspeak /etc/rc.d/rc0.d/K00teamspeak
-ln -sf ../init.d/teamspeak /etc/rc.d/rc3.d/S99teamspeak
-ln -sf ../init.d/teamspeak /etc/rc.d/rc6.d/K00teamspeak
-
-
+remove_files
+rm -rfv /etc/rc.d/rc*.d/*haproxy
############################################################################
#
. /opt/pakfire/lib/functions.sh
-extract_files
-#
-KVER=xxxKVERxxx
-ROOT=`mount | grep " / " | cut -d" " -f1`
-ROOTUUID=`blkid -c /dev/null -sUUID $ROOT | cut -d'"' -f2`
-if [ ! -z $ROOTUUID ]; then
- ROOT="UUID=$ROOTUUID"
-fi
-if [ -f /boot/grub/grub.conf ]; then
-MOUNT=`grep "kernel" /boot/grub/grub.conf | tail -n 1`
-# Nur den letzten Parameter verwenden
-echo $MOUNT > /dev/null
-MOUNT=$_
-if [ ! $MOUNT == "rw" ]; then
- MOUNT="ro"
-fi
-ENTRY=`grep "savedefault" /boot/grub/grub.conf | tail -n 1`
-# Nur den letzten Parameter verwenden
-echo $ENTRY > /dev/null
-let ENTRY=$_+1
+function find_partition() {
+ local mountpoint="${1}"
-#Check if the system use serial console...
-if [ "$(grep "^serial" /boot/grub/grub.conf)" == "" ]; then
- console=""
-else
- console=" console=ttyS0,115200n8"
-fi
+ local root
+ local dev mp fs flags rest
+ while read -r dev mp fs flags rest; do
+ # Skip unwanted entries
+ [ "${dev}" = "rootfs" ] && continue
+ if [ "${mp}" = "${mountpoint}" ] && [ -b "${dev}" ]; then
+ root="$(basename "${dev}")"
+ break
+ fi
+ done < /proc/mounts
+ echo ${root}
+ return 0
+}
+
+extract_files
#
-# backup grub.conf
-#
-cp /boot/grub/grub.conf /boot/grub/grub-backup-$KVER-pae_install.conf
-#
-# Add new Entry to grub.conf
-#
-echo "" >> /boot/grub/grub.conf
-echo "title IPFire (PAE-Kernel)" >> /boot/grub/grub.conf
-echo " kernel /vmlinuz-$KVER-ipfire-pae root=$ROOT panic=10$console $MOUNT" >> /boot/grub/grub.conf
-echo " initrd /ipfirerd-$KVER-pae.img" >> /boot/grub/grub.conf
-echo " savedefault $ENTRY" >> /boot/grub/grub.conf
-fi
+KVER=xxxKVERxxx
#
# Create new module depency
#
/usr/bin/dracut --force --xz /boot/initramfs-$KVER-ipfire-pae.img $KVER-ipfire-pae
-#
-# Update grub2 config
-#
-grub-mkconfig > /boot/grub/grub.cfg
+
+ROOT="$(find_partition "/")"
+case $ROOT in
+ xvd* )
+ #
+ # We are on XEN so create new grub.conf / menu.lst for pygrub
+ #
+ echo "timeout 10" > /boot/grub/grub.conf
+ echo "default 0" >> /boot/grub/grub.conf
+ echo "title IPFire (pae-kernel)" >> /boot/grub/grub.conf
+ echo " kernel /vmlinuz-$KVER-ipfire-pae root=/dev/$ROOT rootdelay=10 panic=10 console=hvc0" \
+ >> /boot/grub/grub.conf
+ echo " initrd /initramfs-$KVER-ipfire-pae.img" >> /boot/grub/grub.conf
+ echo "# savedefault 0" >> /boot/grub/grub.conf
+ ln -s grub.conf $MNThdd/boot/grub/menu.lst
+ ;;
+ * )
+ #
+ # Update grub2 config
+ #
+ grub-mkconfig > /boot/grub/grub.cfg
+ ;;
+esac
# request a reboot if pae is supported
if [ ! "$(grep "^flags.* pae " /proc/cpuinfo)" == "" ]; then
############################################################################
#
. /opt/pakfire/lib/functions.sh
+if [ -f /boot/grub/grub.conf ]; then
+ echo "Error! Connot remove linux-pae because we are on XEN."
+ exit 1
+fi
remove_files
rm -rf /boot/initramfs-*-pae.img
rm -rf /boot/vmlinuz-*-pae
rm -rf /lib/modules/*-ipfire-pae
-if [ -f /boot/grub/grub.conf ]; then
- cp /boot/grub/grub.conf /boot/grub/grub-backup-pae_uninstall.conf
- sed -i "/title IPFire (PAE-Kernel)/,+3d" /boot/grub/grub.conf
-fi
grub-mkconfig > /boot/grub/grub.cfg
sync && sync
############################################################################
#
. /opt/pakfire/lib/functions.sh
-./uninstall.sh
+remove_files
+rm -rf /boot/initramfs-*-pae.img
+rm -rf /boot/vmlinuz-*-pae
+rm -rf /lib/modules/*-ipfire-pae
+if [ ! -f /boot/grub/grub.conf ]; then
+ grub-mkconfig > /boot/grub/grub.cfg
+fi
./install.sh
--- /dev/null
+diff -Naur backports-3.18.1-1.org/drivers/net/wireless/rt2x00/rt2800usb.c backports-3.18.1-1/drivers/net/wireless/rt2x00/rt2800usb.c
+--- backports-3.18.1-1.org/drivers/net/wireless/rt2x00/rt2800usb.c 2014-12-21 22:37:14.000000000 +0100
++++ backports-3.18.1-1/drivers/net/wireless/rt2x00/rt2800usb.c 2015-04-07 11:44:16.647963570 +0200
+@@ -444,7 +444,7 @@
+
+ rt2x00usb_register_read(rt2x00dev, TXRXQ_PCNT, ®);
+ if (rt2x00_get_field32(reg, TXRXQ_PCNT_TX0Q)) {
+- rt2x00_warn(rt2x00dev, "TX HW queue 0 timed out, invoke forced kick\n");
++ rt2x00_dbg(rt2x00dev, "TX HW queue 0 timed out, invoke forced kick\n");
+
+ rt2x00usb_register_write(rt2x00dev, PBF_CFG, 0xf40012);
+
+@@ -459,7 +459,7 @@
+
+ rt2x00usb_register_read(rt2x00dev, TXRXQ_PCNT, ®);
+ if (rt2x00_get_field32(reg, TXRXQ_PCNT_TX1Q)) {
+- rt2x00_warn(rt2x00dev, "TX HW queue 1 timed out, invoke forced kick\n");
++ rt2x00_dbg(rt2x00dev, "TX HW queue 1 timed out, invoke forced kick\n");
+
+ rt2x00usb_register_write(rt2x00dev, PBF_CFG, 0xf4000a);
+
+@@ -609,7 +609,7 @@
+
+ if (unlikely(test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags) ||
+ !test_bit(ENTRY_DATA_STATUS_PENDING, &entry->flags))) {
+- rt2x00_warn(rt2x00dev, "Data pending for entry %u in queue %u\n",
++ rt2x00_dbg(rt2x00dev, "Data pending for entry %u in queue %u\n",
+ entry->entry_idx, qid);
+ break;
+ }
+diff -Naur backports-3.18.1-1.org/drivers/net/wireless/rt2x00/rt2x00usb.c backports-3.18.1-1/drivers/net/wireless/rt2x00/rt2x00usb.c
+--- backports-3.18.1-1.org/drivers/net/wireless/rt2x00/rt2x00usb.c 2014-12-21 22:37:14.000000000 +0100
++++ backports-3.18.1-1/drivers/net/wireless/rt2x00/rt2x00usb.c 2015-04-07 11:42:41.723492892 +0200
+@@ -524,7 +524,7 @@
+
+ static void rt2x00usb_watchdog_tx_dma(struct data_queue *queue)
+ {
+- rt2x00_warn(queue->rt2x00dev, "TX queue %d DMA timed out, invoke forced forced reset\n",
++ rt2x00_dbg(queue->rt2x00dev, "TX queue %d DMA timed out, invoke forced reset\n",
+ queue->qid);
+
+ rt2x00queue_stop_queue(queue);
--- /dev/null
+Index: clamav-0.97.3/libclamav/c++/llvm/lib/ExecutionEngine/JIT/Intercept.cpp
+===================================================================
+--- clamav-0.97.3.orig/libclamav/c++/llvm/lib/ExecutionEngine/JIT/Intercept.cpp
++++ clamav-0.97.3/libclamav/c++/llvm/lib/ExecutionEngine/JIT/Intercept.cpp
+@@ -52,6 +52,7 @@ static void runAtExitHandlers() {
+ #include <sys/stat.h>
+ #endif
+ #include <fcntl.h>
++#include <unistd.h>
+ /* stat functions are redirecting to __xstat with a version number. On x86-64
+ * linking with libc_nonshared.a and -Wl,--export-dynamic doesn't make 'stat'
+ * available as an exported symbol, so we have to add it explicitly.
--- /dev/null
+From 4bbfb2b9f391f273744163cfda7bec96671e9d9c Mon Sep 17 00:00:00 2001
+From: Florian Forster <octo@collectd.org>
+Date: Thu, 18 Apr 2013 06:25:58 +0200
+Subject: [PATCH 01/22] src/utils_mount.h: Add <stdio.h>.
+
+This is required on Solaris 10. Thanks to dannypoo@ for reporting this
+problem.
+
+Github: #306
+---
+ src/utils_mount.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/utils_mount.h b/src/utils_mount.h
+index 1f2403c..83f789b 100644
+--- a/src/utils_mount.h
++++ b/src/utils_mount.h
+@@ -26,6 +26,7 @@
+ #ifndef COLLECTD_UTILS_MOUNT_H
+ #define COLLECTD_UTILS_MOUNT_H 1
+
++#include <stdio.h>
+ #if HAVE_FS_INFO_H
+ # include <fs_info.h>
+ #endif
+--
+1.9.3
+
--- /dev/null
+From f2391b9da6127e4acd5b54b7ae6c2d585df0e2a0 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Joaqu=C3=ADn=20Cuenca=20Abela?= <e98cuenc@gmail.com>
+Date: Wed, 29 May 2013 16:22:09 +0200
+Subject: [PATCH 02/22] Don't notify continuously when MySQL slave SQL thread
+ is running
+
+Signed-off-by: Florian Forster <octo@collectd.org>
+---
+ src/mysql.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/mysql.c b/src/mysql.c
+index 8b3cd21..f93a442 100644
+--- a/src/mysql.c
++++ b/src/mysql.c
+@@ -689,7 +689,7 @@ static int mysql_read_slave_stats (mysql_database_t *db, MYSQL *con)
+ ssnprintf (n.message, sizeof (n.message),
+ "slave SQL thread started");
+ plugin_dispatch_notification (&n);
+- db->slave_sql_running = 0;
++ db->slave_sql_running = 1;
+ }
+ }
+
+--
+1.9.3
+
--- /dev/null
+From bbbf37d55a3959951604c4be482e9a705a0f86d9 Mon Sep 17 00:00:00 2001
+From: Marc Fournier <marc.fournier@camptocamp.com>
+Date: Tue, 7 Jan 2014 11:30:59 +0100
+Subject: [PATCH 03/22] curl_xml.c: avoid using uninitalized variable in error
+ message
+
+Thanks to @trtrmitya for reporting this. Fixes GH#507
+---
+ src/curl_xml.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/curl_xml.c b/src/curl_xml.c
+index 75f5cc3..77aee60 100644
+--- a/src/curl_xml.c
++++ b/src/curl_xml.c
+@@ -551,12 +551,12 @@ static int cx_curl_perform (cx_t *db, CURL *curl) /* {{{ */
+ char *ptr;
+ char *url;
+
+- db->buffer_fill = 0;
++ db->buffer_fill = 0;
+ status = curl_easy_perform (curl);
+ if (status != CURLE_OK)
+ {
+- ERROR ("curl_xml plugin: curl_easy_perform failed with status %i: %s (%s)",
+- status, db->curl_errbuf, url);
++ ERROR ("curl_xml plugin: curl_easy_perform failed with status %i: %s",
++ status, db->curl_errbuf);
+ return (-1);
+ }
+
+--
+1.9.3
+
--- /dev/null
+From 645dadb3fcc466e8880fda4eb23b21ad433631fc Mon Sep 17 00:00:00 2001
+From: Marc Fournier <marc.fournier@camptocamp.com>
+Date: Tue, 7 Jan 2014 16:06:10 +0100
+Subject: [PATCH 04/22] interface.c: FreeBSD-10 support
+
+Quoting @trtrmitya in github issue #506 : "[...] it is broken on
+FreeBSD-10, in which getifaddrs() returns not only link level stats for
+a particular interface, but also entries for each IP configured on that
+interface. As a result if_submit() is called several times for each
+interface, which results in incorrect data being logged.
+
+I am attaching a patch which fixes a problem on FreeBSD (9/10), but it
+should work for every *BSD because [...] the getifaddrs implementation
+first appeared in BSDi BSD/OS."
+
+Many thanks to @trtrmitya for providing the patch !
+---
+ src/interface.c | 11 ++++++-----
+ 1 file changed, 6 insertions(+), 5 deletions(-)
+
+diff --git a/src/interface.c b/src/interface.c
+index db998a3..9b566ea 100644
+--- a/src/interface.c
++++ b/src/interface.c
+@@ -213,18 +213,19 @@ static int interface_read (void)
+
+ for (if_ptr = if_list; if_ptr != NULL; if_ptr = if_ptr->ifa_next)
+ {
+- if ((if_data = (struct IFA_DATA *) if_ptr->ifa_data) == NULL)
+- continue;
++ if (if_ptr->ifa_addr != NULL && if_ptr->ifa_addr->sa_family == AF_LINK) {
++ if_data = (struct IFA_DATA *) if_ptr->ifa_data;
+
+- if_submit (if_ptr->ifa_name, "if_octets",
++ if_submit (if_ptr->ifa_name, "if_octets",
+ if_data->IFA_RX_BYTES,
+ if_data->IFA_TX_BYTES);
+- if_submit (if_ptr->ifa_name, "if_packets",
++ if_submit (if_ptr->ifa_name, "if_packets",
+ if_data->IFA_RX_PACKT,
+ if_data->IFA_TX_PACKT);
+- if_submit (if_ptr->ifa_name, "if_errors",
++ if_submit (if_ptr->ifa_name, "if_errors",
+ if_data->IFA_RX_ERROR,
+ if_data->IFA_TX_ERROR);
++ }
+ }
+
+ freeifaddrs (if_list);
+--
+1.9.3
+
--- /dev/null
+From cde09b547abbeb7595d91259fcc628504d0f55a9 Mon Sep 17 00:00:00 2001
+From: Marc Fournier <marc.fournier@camptocamp.com>
+Date: Wed, 8 Jan 2014 18:05:40 +0100
+Subject: [PATCH 05/22] Revert "curl_xml.c: avoid using uninitalized variable
+ in error message"
+
+This reverts commit bbbf37d55a3959951604c4be482e9a705a0f86d9.
+
+A different fix for this problem was commited to the collectd-5.4 branch
+(8327ee64) and conflicts with this patch. Also, initializing url the
+same way as 8327ee64 does it, to avoid a merge conflict.
+---
+ src/curl_xml.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/src/curl_xml.c b/src/curl_xml.c
+index 77aee60..b941f02 100644
+--- a/src/curl_xml.c
++++ b/src/curl_xml.c
+@@ -550,13 +550,14 @@ static int cx_curl_perform (cx_t *db, CURL *curl) /* {{{ */
+ long rc;
+ char *ptr;
+ char *url;
++ url = db->url;
+
+- db->buffer_fill = 0;
++ db->buffer_fill = 0;
+ status = curl_easy_perform (curl);
+ if (status != CURLE_OK)
+ {
+- ERROR ("curl_xml plugin: curl_easy_perform failed with status %i: %s",
+- status, db->curl_errbuf);
++ ERROR ("curl_xml plugin: curl_easy_perform failed with status %i: %s (%s)",
++ status, db->curl_errbuf, url);
+ return (-1);
+ }
+
+--
+1.9.3
+
--- /dev/null
+From ddffda7a150cd3abdb6ec392b514a250e91e0c19 Mon Sep 17 00:00:00 2001
+From: Chris Lundquist <chris.lundquist@github.com>
+Date: Tue, 14 Jan 2014 18:33:13 -0800
+Subject: [PATCH 06/22] [network] set_thread_cbs so we initialize the right
+ threading mode in gcry_check_version
+
+Signed-off-by: Florian Forster <octo@collectd.org>
+---
+ src/network.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/network.c b/src/network.c
+index d0ff6bc..be82c6f 100644
+--- a/src/network.c
++++ b/src/network.c
+@@ -500,8 +500,8 @@ static void network_init_gcrypt (void) /* {{{ */
+ if (gcry_control (GCRYCTL_ANY_INITIALIZATION_P))
+ return;
+
+- gcry_check_version (NULL); /* before calling any other functions */
+ gcry_control (GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread);
++ gcry_check_version (NULL); /* before calling *almost* any other functions */
+ gcry_control (GCRYCTL_INIT_SECMEM, 32768);
+ gcry_control (GCRYCTL_INITIALIZATION_FINISHED);
+ } /* }}} void network_init_gcrypt */
+--
+1.9.3
+
--- /dev/null
+From 5f2f969335757f31f42cd8bb7e38eb8c5fe5e56e Mon Sep 17 00:00:00 2001
+From: Florian Forster <octo@collectd.org>
+Date: Wed, 15 Jan 2014 23:47:33 +0100
+Subject: [PATCH 07/22] apache plugin: Call curl_global_init() from the init
+ function.
+
+This is a shot in the dark in trying to address #513. By calling this
+from an init() callback, I hope to be initializing the curl and gcrypt
+libraries before collectd becomes multi-threaded, avoiding the problems
+described in the issue.
+---
+ src/apache.c | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+diff --git a/src/apache.c b/src/apache.c
+index 899c21e..23bba3e 100644
+--- a/src/apache.c
++++ b/src/apache.c
+@@ -702,9 +702,18 @@ static int apache_read_host (user_data_t *user_data) /* {{{ */
+ return (0);
+ } /* }}} int apache_read_host */
+
++static int apache_init (void) /* {{{ */
++{
++ /* Call this while collectd is still single-threaded to avoid
++ * initialization issues in libgcrypt. */
++ curl_global_init (CURL_GLOBAL_SSL);
++ return (0);
++} /* }}} int apache_init */
++
+ void module_register (void)
+ {
+ plugin_register_complex_config ("apache", config);
++ plugin_register_init ("apache", apache_init);
+ } /* void module_register */
+
+ /* vim: set sw=8 noet fdm=marker : */
+--
+1.9.3
+
--- /dev/null
+From 793c2046de1ac04689d541a5e83513fe8e62578c Mon Sep 17 00:00:00 2001
+From: Marc Fournier <marc.fournier@camptocamp.com>
+Date: Thu, 16 Jan 2014 00:30:42 +0100
+Subject: [PATCH 08/22] network: comment libgcrypt initalization process
+
+---
+ src/network.c | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/src/network.c b/src/network.c
+index be82c6f..f379a5c 100644
+--- a/src/network.c
++++ b/src/network.c
+@@ -500,8 +500,15 @@ static void network_init_gcrypt (void) /* {{{ */
+ if (gcry_control (GCRYCTL_ANY_INITIALIZATION_P))
+ return;
+
++ /* http://www.gnupg.org/documentation/manuals/gcrypt/Multi_002dThreading.html
++ * To ensure thread-safety, it's important to set GCRYCTL_SET_THREAD_CBS
++ * *before* initalizing Libgcrypt with gcry_check_version(), which itself must
++ * be called before any other gcry_* function. GCRYCTL_ANY_INITIALIZATION_P
++ * above doesn't count, as it doesn't implicitly initalize Libgcrypt.
++ *
++ * tl;dr: keep all these gry_* statements in this exact order please. */
+ gcry_control (GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread);
+- gcry_check_version (NULL); /* before calling *almost* any other functions */
++ gcry_check_version (NULL);
+ gcry_control (GCRYCTL_INIT_SECMEM, 32768);
+ gcry_control (GCRYCTL_INITIALIZATION_FINISHED);
+ } /* }}} void network_init_gcrypt */
+--
+1.9.3
+
--- /dev/null
+From 66b400ab01b8133e450bb002e175117a1ab6f9ae Mon Sep 17 00:00:00 2001
+From: Jeremy Katz <jeremy@katzbox.net>
+Date: Sun, 26 Jan 2014 20:43:19 -0500
+Subject: [PATCH 09/22] Call curl_global_init() in _init of plugins using curl
+
+Need to call curl_global_init() or curl_easy_init() during init
+for plugins when we're still running single threaded. This
+updates the remaining ones
+---
+ src/curl.c | 1 +
+ src/curl_json.c | 9 +++++++++
+ src/curl_xml.c | 9 +++++++++
+ src/write_http.c | 9 +++++++++
+ 4 files changed, 28 insertions(+)
+
+diff --git a/src/curl.c b/src/curl.c
+index 3899aaa..8d2893f 100644
+--- a/src/curl.c
++++ b/src/curl.c
+@@ -566,6 +566,7 @@ static int cc_init (void) /* {{{ */
+ INFO ("curl plugin: No pages have been defined.");
+ return (-1);
+ }
++ curl_global_init (CURL_GLOBAL_SSL);
+ return (0);
+ } /* }}} int cc_init */
+
+diff --git a/src/curl_json.c b/src/curl_json.c
+index 24e1df1..0948962 100644
+--- a/src/curl_json.c
++++ b/src/curl_json.c
+@@ -882,9 +882,18 @@ static int cj_read (user_data_t *ud) /* {{{ */
+ return cj_curl_perform (db, db->curl);
+ } /* }}} int cj_read */
+
++static int cj_init (void) /* {{{ */
++{
++ /* Call this while collectd is still single-threaded to avoid
++ * initialization issues in libgcrypt. */
++ curl_global_init (CURL_GLOBAL_SSL);
++ return (0);
++} /* }}} int cj_init */
++
+ void module_register (void)
+ {
+ plugin_register_complex_config ("curl_json", cj_config);
++ plugin_register_init ("curl_json", cj_init);
+ } /* void module_register */
+
+ /* vim: set sw=2 sts=2 et fdm=marker : */
+diff --git a/src/curl_xml.c b/src/curl_xml.c
+index b941f02..e31e73d 100644
+--- a/src/curl_xml.c
++++ b/src/curl_xml.c
+@@ -926,9 +926,18 @@ static int cx_config (oconfig_item_t *ci) /* {{{ */
+ return (0);
+ } /* }}} int cx_config */
+
++static int cx_init (void) /* {{{ */
++{
++ /* Call this while collectd is still single-threaded to avoid
++ * initialization issues in libgcrypt. */
++ curl_global_init (CURL_GLOBAL_SSL);
++ return (0);
++} /* }}} int cx_init */
++
+ void module_register (void)
+ {
+ plugin_register_complex_config ("curl_xml", cx_config);
++ plugin_register_init ("curl_xml", cx_init);
+ } /* void module_register */
+
+ /* vim: set sw=2 sts=2 et fdm=marker : */
+diff --git a/src/write_http.c b/src/write_http.c
+index 62c73b0..04c637b 100644
+--- a/src/write_http.c
++++ b/src/write_http.c
+@@ -656,9 +656,18 @@ static int wh_config (oconfig_item_t *ci) /* {{{ */
+ return (0);
+ } /* }}} int wh_config */
+
++static int wh_init (void) /* {{{ */
++{
++ /* Call this while collectd is still single-threaded to avoid
++ * initialization issues in libgcrypt. */
++ curl_global_init (CURL_GLOBAL_SSL);
++ return (0);
++} /* }}} int wh_init */
++
+ void module_register (void) /* {{{ */
+ {
+ plugin_register_complex_config ("write_http", wh_config);
++ plugin_register_init ("write_http", wh_init);
+ } /* }}} void module_register */
+
+ /* vim: set fdm=marker sw=8 ts=8 tw=78 et : */
+--
+1.9.3
+
--- /dev/null
+From 6bd48f2346c5072dc22da58c7b7cd8e8ceb83fc5 Mon Sep 17 00:00:00 2001
+From: Marc Fournier <marc.fournier@camptocamp.com>
+Date: Sat, 29 Mar 2014 13:37:36 +0100
+Subject: [PATCH 10/22] indent wh_init() to be consistent with the rest of the
+ file
+
+---
+ src/write_http.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/src/write_http.c b/src/write_http.c
+index 04c637b..0a13444 100644
+--- a/src/write_http.c
++++ b/src/write_http.c
+@@ -658,10 +658,10 @@ static int wh_config (oconfig_item_t *ci) /* {{{ */
+
+ static int wh_init (void) /* {{{ */
+ {
+- /* Call this while collectd is still single-threaded to avoid
+- * initialization issues in libgcrypt. */
+- curl_global_init (CURL_GLOBAL_SSL);
+- return (0);
++ /* Call this while collectd is still single-threaded to avoid
++ * initialization issues in libgcrypt. */
++ curl_global_init (CURL_GLOBAL_SSL);
++ return (0);
+ } /* }}} int wh_init */
+
+ void module_register (void) /* {{{ */
+--
+1.9.3
+
--- /dev/null
+From 6207fce91a0933e852ec76fc31ca81ec00ffa04b Mon Sep 17 00:00:00 2001
+From: Wilfried Goesgens <dothebart@citadel.org>
+Date: Thu, 5 Jun 2014 20:04:13 +0200
+Subject: [PATCH 11/22] Configparser: when we alocate an empty list, we also
+ need to reset the counter; else we will trip over this later. This fixes
+ https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=750440
+
+---
+ src/configfile.c | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/src/configfile.c b/src/configfile.c
+index 0b7786f..983d995 100644
+--- a/src/configfile.c
++++ b/src/configfile.c
+@@ -414,6 +414,12 @@ static int cf_ci_replace_child (oconfig_item_t *dst, oconfig_item_t *src,
+
+ /* Resize the memory containing the children to be big enough to hold
+ * all children. */
++ if (dst->children_num + src->children_num - 1 == 0)
++ {
++ dst->children_num = 0;
++ return (0);
++ }
++
+ temp = (oconfig_item_t *) realloc (dst->children,
+ sizeof (oconfig_item_t)
+ * (dst->children_num + src->children_num - 1));
+@@ -514,7 +520,8 @@ static int cf_include_all (oconfig_item_t *root, int depth)
+ continue;
+
+ /* Now replace the i'th child in `root' with `new'. */
+- cf_ci_replace_child (root, new, i);
++ if (cf_ci_replace_child (root, new, i) < 0)
++ return (-1);
+
+ /* ... and go back to the new i'th child. */
+ --i;
+--
+1.9.3
+
--- /dev/null
+From c2ca2a46e617878dcff69de0b8940ea91d3401cc Mon Sep 17 00:00:00 2001
+From: Lauri Tirkkonen <lotheac@iki.fi>
+Date: Thu, 22 May 2014 14:05:40 +0300
+Subject: [PATCH 12/22] don't assume pkg-config is in PATH
+
+---
+ configure.in | 20 ++++++++++----------
+ 1 file changed, 10 insertions(+), 10 deletions(-)
+
+diff --git a/configure.in b/configure.in
+index 0b12630..7086800 100644
+--- a/configure.in
++++ b/configure.in
+@@ -1136,8 +1136,8 @@ AC_CHECK_LIB(hal,libhal_device_property_exists,
+ [with_libhal="no"])
+ if test "x$with_libhal" = "xyes"; then
+ if test "x$PKG_CONFIG" != "x"; then
+- BUILD_WITH_LIBHAL_CFLAGS="`pkg-config --cflags hal`"
+- BUILD_WITH_LIBHAL_LIBS="`pkg-config --libs hal`"
++ BUILD_WITH_LIBHAL_CFLAGS="`$PKG_CONFIG --cflags hal`"
++ BUILD_WITH_LIBHAL_LIBS="`$PKG_CONFIG --libs hal`"
+ AC_SUBST(BUILD_WITH_LIBHAL_CFLAGS)
+ AC_SUBST(BUILD_WITH_LIBHAL_LIBS)
+ fi
+@@ -3434,8 +3434,8 @@ then
+ if $PKG_CONFIG --exists tokyotyrant
+ then
+ with_libtokyotyrant_cppflags="$with_libtokyotyrant_cppflags `$PKG_CONFIG --cflags tokyotyrant`"
+- with_libtokyotyrant_ldflags="$with_libtokyotyrant_ldflags `pkg-config --libs-only-L tokyotyrant`"
+- with_libtokyotyrant_libs="$with_libtokyotyrant_libs `pkg-config --libs-only-l tokyotyrant`"
++ with_libtokyotyrant_ldflags="$with_libtokyotyrant_ldflags `$PKG_CONFIG --libs-only-L tokyotyrant`"
++ with_libtokyotyrant_libs="$with_libtokyotyrant_libs `$PKG_CONFIG --libs-only-l tokyotyrant`"
+ fi
+ fi
+
+@@ -3743,7 +3743,7 @@ with_libvirt_cflags=""
+ with_libvirt_ldflags=""
+ if test "x$PKG_CONFIG" != "x"
+ then
+- pkg-config --exists 'libxml-2.0' 2>/dev/null
++ $PKG_CONFIG --exists 'libxml-2.0' 2>/dev/null
+ if test "$?" = "0"
+ then
+ with_libxml2="yes"
+@@ -3751,7 +3751,7 @@ then
+ with_libxml2="no (pkg-config doesn't know library)"
+ fi
+
+- pkg-config --exists libvirt 2>/dev/null
++ $PKG_CONFIG --exists libvirt 2>/dev/null
+ if test "$?" = "0"
+ then
+ with_libvirt="yes"
+@@ -3761,12 +3761,12 @@ then
+ fi
+ if test "x$with_libxml2" = "xyes"
+ then
+- with_libxml2_cflags="`pkg-config --cflags libxml-2.0`"
++ with_libxml2_cflags="`$PKG_CONFIG --cflags libxml-2.0`"
+ if test $? -ne 0
+ then
+ with_libxml2="no"
+ fi
+- with_libxml2_ldflags="`pkg-config --libs libxml-2.0`"
++ with_libxml2_ldflags="$PKG_CONFIG --libs libxml-2.0`"
+ if test $? -ne 0
+ then
+ with_libxml2="no"
+@@ -3806,12 +3806,12 @@ if test "x$with_libxml2" = "xyes"; then
+ fi
+ if test "x$with_libvirt" = "xyes"
+ then
+- with_libvirt_cflags="`pkg-config --cflags libvirt`"
++ with_libvirt_cflags="$PKG_CONFIG --cflags libvirt`"
+ if test $? -ne 0
+ then
+ with_libvirt="no"
+ fi
+- with_libvirt_ldflags="`pkg-config --libs libvirt`"
++ with_libvirt_ldflags="$PKG_CONFIG --libs libvirt`"
+ if test $? -ne 0
+ then
+ with_libvirt="no"
+--
+1.9.3
+
--- /dev/null
+From 497f5785e8b385f03b5fb5b15bdff8ba39e4699e Mon Sep 17 00:00:00 2001
+From: Marc Fournier <marc.fournier@camptocamp.com>
+Date: Mon, 23 Jun 2014 18:00:01 +0200
+Subject: [PATCH 13/22] add missing backticks which broke the build
+
+---
+ configure.in | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/configure.in b/configure.in
+index 7086800..5dac543 100644
+--- a/configure.in
++++ b/configure.in
+@@ -3766,7 +3766,7 @@ then
+ then
+ with_libxml2="no"
+ fi
+- with_libxml2_ldflags="$PKG_CONFIG --libs libxml-2.0`"
++ with_libxml2_ldflags="`$PKG_CONFIG --libs libxml-2.0`"
+ if test $? -ne 0
+ then
+ with_libxml2="no"
+@@ -3806,12 +3806,12 @@ if test "x$with_libxml2" = "xyes"; then
+ fi
+ if test "x$with_libvirt" = "xyes"
+ then
+- with_libvirt_cflags="$PKG_CONFIG --cflags libvirt`"
++ with_libvirt_cflags="`$PKG_CONFIG --cflags libvirt`"
+ if test $? -ne 0
+ then
+ with_libvirt="no"
+ fi
+- with_libvirt_ldflags="$PKG_CONFIG --libs libvirt`"
++ with_libvirt_ldflags="`$PKG_CONFIG --libs libvirt`"
+ if test $? -ne 0
+ then
+ with_libvirt="no"
+--
+1.9.3
+
--- /dev/null
+From 0da910fb1bf2bd4982ca6541458c795ec296f398 Mon Sep 17 00:00:00 2001
+From: Marc Fournier <marc.fournier@camptocamp.com>
+Date: Fri, 8 Aug 2014 15:55:10 +0200
+Subject: [PATCH 14/22] snmp: free snmp_pdu struct allocated by
+ snmp_pdu_create()
+
+This should fix the leak reported in issue #610.
+---
+ src/snmp.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/src/snmp.c b/src/snmp.c
+index d440f7f..dacdede 100644
+--- a/src/snmp.c
++++ b/src/snmp.c
+@@ -1503,6 +1503,10 @@ static int csnmp_read_table (host_definition_t *host, data_definition_t *data)
+ snmp_free_pdu (res);
+ res = NULL;
+
++ if (req != NULL)
++ snmp_free_pdu (req);
++ req = NULL;
++
+ if (status == 0)
+ csnmp_dispatch_table (host, data, instance_list_head, value_list_head);
+
+--
+1.9.3
+
--- /dev/null
+From 0afea60611f115a28b8ec331aba610e3038c1ef2 Mon Sep 17 00:00:00 2001
+From: Arthur Marble <arthur@info9.net>
+Date: Sun, 17 Aug 2014 17:34:04 -0500
+Subject: [PATCH 15/22] curl_xml plugin: Fixed tautological pointer comparison
+ error.
+
+Fixes: http://bugs.debian.org/758481
+Signed-off-by: Florian Forster <octo@collectd.org>
+---
+ src/curl_xml.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/curl_xml.c b/src/curl_xml.c
+index e31e73d..28b2ded 100644
+--- a/src/curl_xml.c
++++ b/src/curl_xml.c
+@@ -344,7 +344,7 @@ static int cx_handle_instance_xpath (xmlXPathContextPtr xpath_ctx, /* {{{ */
+ /* If the base xpath returns more than one block, the result is assumed to be
+ * a table. The `Instnce' option is not optional in this case. Check for the
+ * condition and inform the user. */
+- if (is_table && (vl->type_instance == NULL))
++ if (is_table)
+ {
+ WARNING ("curl_xml plugin: "
+ "Base-XPath %s is a table (more than one result was returned), "
+--
+1.9.3
+
--- /dev/null
+From 9d065b401c2c393bef5a6e58b5deeda7d59d4f39 Mon Sep 17 00:00:00 2001
+From: Ed Okerson <ed@okerson.com>
+Date: Mon, 11 Feb 2013 15:46:10 -0600
+Subject: [PATCH 16/22] Add support for OpenVPN 2.3.0 status files.
+
+Fix a bug that breaks this module if a server is running multiple instances of OpenVPN and one instance does not have any clients connected.
+---
+ src/openvpn.c | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++++++----
+ 1 file changed, 84 insertions(+), 6 deletions(-)
+
+diff --git a/src/openvpn.c b/src/openvpn.c
+index 2aca414..d2b6f17 100644
+--- a/src/openvpn.c
++++ b/src/openvpn.c
+@@ -32,6 +32,7 @@
+ #define V1STRING "Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since\n"
+ #define V2STRING "HEADER,CLIENT_LIST,Common Name,Real Address,Virtual Address,Bytes Received,Bytes Sent,Connected Since,Connected Since (time_t)\n"
+ #define V3STRING "HEADER CLIENT_LIST Common Name Real Address Virtual Address Bytes Received Bytes Sent Connected Since Connected Since (time_t)\n"
++#define V4STRING "HEADER,CLIENT_LIST,Common Name,Real Address,Virtual Address,Bytes Received,Bytes Sent,Connected Since,Connected Since (time_t),Username\n"
+ #define VSSTRING "OpenVPN STATISTICS\n"
+
+
+@@ -43,6 +44,7 @@ struct vpn_status_s
+ MULTI1 = 1, /* status-version 1 */
+ MULTI2, /* status-version 2 */
+ MULTI3, /* status-version 3 */
++ MULTI4, /* status-version 4 */
+ SINGLE = 10 /* currently no versions for single mode, maybe in the future */
+ } version;
+ char *name;
+@@ -452,13 +454,77 @@ static int multi3_read (char *name, FILE *fh)
+ return (read);
+ } /* int multi3_read */
+
++/* for reading status version 4 */
++static int multi4_read (char *name, FILE *fh)
++{
++ char buffer[1024];
++ char *fields[11];
++ const int max_fields = STATIC_ARRAY_SIZE (fields);
++ int fields_num, read = 0;
++ long long sum_users = 0;
++
++ while (fgets (buffer, sizeof (buffer), fh) != NULL)
++ {
++ fields_num = openvpn_strsplit (buffer, fields, max_fields);
++
++ /* status file is generated by openvpn/multi.c:multi_print_status()
++ * http://svn.openvpn.net/projects/openvpn/trunk/openvpn/multi.c
++ *
++ * The line we're expecting has 9 fields. We ignore all lines
++ * with more or less fields.
++ */
++ if (fields_num != 9)
++ continue;
++
++
++ if (strcmp (fields[0], "CLIENT_LIST") != 0)
++ continue;
++
++
++ if (collect_user_count)
++ /* If so, sum all users, ignore the individuals*/
++ {
++ sum_users += 1;
++ }
++ if (collect_individual_users)
++ {
++ if (new_naming_schema)
++ {
++ /* plugin inst = file name, type inst = fields[1] */
++ iostats_submit (name, /* vpn instance */
++ fields[1], /* "Common Name" */
++ atoll (fields[4]), /* "Bytes Received" */
++ atoll (fields[5])); /* "Bytes Sent" */
++ }
++ else
++ {
++ /* plugin inst = fields[1], type inst = "" */
++ iostats_submit (fields[1], /* "Common Name" */
++ NULL, /* unused when in multimode */
++ atoll (fields[4]), /* "Bytes Received" */
++ atoll (fields[5])); /* "Bytes Sent" */
++ }
++ }
++
++ read = 1;
++ }
++
++ if (collect_user_count)
++ {
++ numusers_submit(name, name, sum_users);
++ read = 1;
++ }
++
++ return (read);
++} /* int multi4_read */
++
+ /* read callback */
+ static int openvpn_read (void)
+ {
+ FILE *fh;
+- int i, read;
++ int i, vpn_read, read;
+
+- read = 0;
++ vpn_read = read = 0;
+
+ /* call the right read function for every status entry in the list */
+ for (i = 0; i < vpn_num; i++)
+@@ -476,23 +542,28 @@ static int openvpn_read (void)
+ switch (vpn_list[i]->version)
+ {
+ case SINGLE:
+- read = single_read(vpn_list[i]->name, fh);
++ vpn_read = single_read(vpn_list[i]->name, fh);
+ break;
+
+ case MULTI1:
+- read = multi1_read(vpn_list[i]->name, fh);
++ vpn_read = multi1_read(vpn_list[i]->name, fh);
+ break;
+
+ case MULTI2:
+- read = multi2_read(vpn_list[i]->name, fh);
++ vpn_read = multi2_read(vpn_list[i]->name, fh);
+ break;
+
+ case MULTI3:
+- read = multi3_read(vpn_list[i]->name, fh);
++ vpn_read = multi3_read(vpn_list[i]->name, fh);
++ break;
++
++ case MULTI4:
++ vpn_read = multi4_read(vpn_list[i]->name, fh);
+ break;
+ }
+
+ fclose (fh);
++ read += vpn_read;
+ }
+
+ return (read ? 0 : -1);
+@@ -549,6 +620,13 @@ static int version_detect (const char *filename)
+ version = MULTI3;
+ break;
+ }
++ /* searching for multi version 4 */
++ else if (strcmp (buffer, V4STRING) == 0)
++ {
++ DEBUG ("openvpn plugin: found status file version MULTI4");
++ version = MULTI4;
++ break;
++ }
+ }
+
+ if (version == 0)
+--
+1.9.3
+
--- /dev/null
+From 8516f9abb625fa7b9321e62307305aa6499be4e8 Mon Sep 17 00:00:00 2001
+From: Florian Forster <octo@collectd.org>
+Date: Sun, 14 Sep 2014 19:28:05 +0200
+Subject: [PATCH 17/22] openvpn plugin: Don't signal an error when no clients
+ are connected.
+
+In the multi1_read() function, an error (zero) was returned when no
+clients were currently connected to the OpenVPN server, because the
+"read" variable was initialized to zero and the while loop exited before
+it was set to one. This is not the intended behavior.
+
+Thanks to @srix for reporting this issue!
+
+Fixes: #731
+---
+ src/openvpn.c | 12 +++++-------
+ 1 file changed, 5 insertions(+), 7 deletions(-)
+
+diff --git a/src/openvpn.c b/src/openvpn.c
+index d2b6f17..7d4e4a0 100644
+--- a/src/openvpn.c
++++ b/src/openvpn.c
+@@ -267,7 +267,7 @@ static int multi1_read (char *name, FILE *fh)
+ {
+ char buffer[1024];
+ char *fields[10];
+- int fields_num, read = 0, found_header = 0;
++ int fields_num, found_header = 0;
+ long long sum_users = 0;
+
+ /* read the file until the "ROUTING TABLE" line is found (no more info after) */
+@@ -314,17 +314,15 @@ static int multi1_read (char *name, FILE *fh)
+ atoll (fields[3])); /* "Bytes Sent" */
+ }
+ }
+-
+- read = 1;
+ }
+
++ if (ferror (fh))
++ return (0);
++
+ if (collect_user_count)
+- {
+ numusers_submit(name, name, sum_users);
+- read = 1;
+- }
+
+- return (read);
++ return (1);
+ } /* int multi1_read */
+
+ /* for reading status version 2 */
+--
+1.9.3
+
--- /dev/null
+From 5dbc1cfb4baff831f950b3c9de8c332bc9aa2b6e Mon Sep 17 00:00:00 2001
+From: Michael Tremer <michael.tremer@ipfire.org>
+Date: Wed, 17 Sep 2014 11:25:17 +0200
+Subject: [PATCH 18/22] openvpn: Remove boguous file handler check
+
+---
+ src/openvpn.c | 3 ---
+ 1 file changed, 3 deletions(-)
+
+diff --git a/src/openvpn.c b/src/openvpn.c
+index 7d4e4a0..9598abc 100644
+--- a/src/openvpn.c
++++ b/src/openvpn.c
+@@ -316,9 +316,6 @@ static int multi1_read (char *name, FILE *fh)
+ }
+ }
+
+- if (ferror (fh))
+- return (0);
+-
+ if (collect_user_count)
+ numusers_submit(name, name, sum_users);
+
+--
+1.9.3
+
--- /dev/null
+From a45710a5a887d25ab0e04ce1553bb268013ef780 Mon Sep 17 00:00:00 2001
+From: Michael Tremer <michael.tremer@ipfire.org>
+Date: Tue, 16 Sep 2014 14:44:42 +0200
+Subject: [PATCH 19/22] openvpn: Ignore not fully established connections
+
+---
+ src/openvpn.c | 15 +++++++++++++++
+ 1 file changed, 15 insertions(+)
+
+diff --git a/src/openvpn.c b/src/openvpn.c
+index 9598abc..6a0ffbd 100644
+--- a/src/openvpn.c
++++ b/src/openvpn.c
+@@ -292,6 +292,10 @@ static int multi1_read (char *name, FILE *fh)
+ if (fields_num < 4)
+ continue;
+
++ // Ignore not yet fully established connections
++ if (strcmp(fields[1], "UNDEF") == 0)
++ continue;
++
+ if (collect_user_count)
+ /* If so, sum all users, ignore the individuals*/
+ {
+@@ -347,6 +351,10 @@ static int multi2_read (char *name, FILE *fh)
+ if (strcmp (fields[0], "CLIENT_LIST") != 0)
+ continue;
+
++ // Ignore not yet fully established connections
++ if (strcmp(fields[0], "UNDEF") == 0)
++ continue;
++
+ if (collect_user_count)
+ /* If so, sum all users, ignore the individuals*/
+ {
+@@ -412,6 +420,10 @@ static int multi3_read (char *name, FILE *fh)
+ if (strcmp (fields[0], "CLIENT_LIST") != 0)
+ continue;
+
++ // Ignore not yet fully established connections
++ if (strcmp(fields[0], "UNDEF") == 0)
++ continue;
++
+ if (collect_user_count)
+ /* If so, sum all users, ignore the individuals*/
+ {
+@@ -475,6 +487,9 @@ static int multi4_read (char *name, FILE *fh)
+ if (strcmp (fields[0], "CLIENT_LIST") != 0)
+ continue;
+
++ // Ignore not yet fully established connections
++ if (strcmp(fields[0], "UNDEF") == 0)
++ continue;
+
+ if (collect_user_count)
+ /* If so, sum all users, ignore the individuals*/
+--
+1.9.3
+
--- /dev/null
+From 46e716ee8d4208924d10f57f9ed97c99674a6ef4 Mon Sep 17 00:00:00 2001
+From: Michael Tremer <michael.tremer@ipfire.org>
+Date: Wed, 17 Sep 2014 11:31:13 +0200
+Subject: [PATCH 20/22] openvpn: Make read functions robust like in
+ 8516f9abb625fa7b9321e62307305aa6499be4e8
+
+---
+ src/openvpn.c | 21 ++++++---------------
+ 1 file changed, 6 insertions(+), 15 deletions(-)
+
+diff --git a/src/openvpn.c b/src/openvpn.c
+index 6a0ffbd..f686721 100644
+--- a/src/openvpn.c
++++ b/src/openvpn.c
+@@ -332,7 +332,7 @@ static int multi2_read (char *name, FILE *fh)
+ char buffer[1024];
+ char *fields[10];
+ const int max_fields = STATIC_ARRAY_SIZE (fields);
+- int fields_num, read = 0;
++ int fields_num;
+ long long sum_users = 0;
+
+ while (fgets (buffer, sizeof (buffer), fh) != NULL)
+@@ -379,17 +379,14 @@ static int multi2_read (char *name, FILE *fh)
+ atoll (fields[5])); /* "Bytes Sent" */
+ }
+ }
+-
+- read = 1;
+ }
+
+ if (collect_user_count)
+ {
+ numusers_submit(name, name, sum_users);
+- read = 1;
+ }
+
+- return (read);
++ return (1);
+ } /* int multi2_read */
+
+ /* for reading status version 3 */
+@@ -398,7 +395,7 @@ static int multi3_read (char *name, FILE *fh)
+ char buffer[1024];
+ char *fields[15];
+ const int max_fields = STATIC_ARRAY_SIZE (fields);
+- int fields_num, read = 0;
++ int fields_num;
+ long long sum_users = 0;
+
+ while (fgets (buffer, sizeof (buffer), fh) != NULL)
+@@ -447,18 +444,15 @@ static int multi3_read (char *name, FILE *fh)
+ atoll (fields[5])); /* "Bytes Sent" */
+ }
+ }
+-
+- read = 1;
+ }
+ }
+
+ if (collect_user_count)
+ {
+ numusers_submit(name, name, sum_users);
+- read = 1;
+ }
+
+- return (read);
++ return (1);
+ } /* int multi3_read */
+
+ /* for reading status version 4 */
+@@ -467,7 +461,7 @@ static int multi4_read (char *name, FILE *fh)
+ char buffer[1024];
+ char *fields[11];
+ const int max_fields = STATIC_ARRAY_SIZE (fields);
+- int fields_num, read = 0;
++ int fields_num;
+ long long sum_users = 0;
+
+ while (fgets (buffer, sizeof (buffer), fh) != NULL)
+@@ -515,17 +509,14 @@ static int multi4_read (char *name, FILE *fh)
+ atoll (fields[5])); /* "Bytes Sent" */
+ }
+ }
+-
+- read = 1;
+ }
+
+ if (collect_user_count)
+ {
+ numusers_submit(name, name, sum_users);
+- read = 1;
+ }
+
+- return (read);
++ return (1);
+ } /* int multi4_read */
+
+ /* read callback */
+--
+1.9.3
+
--- /dev/null
+From 41253b68808deade2a1866f0c24f4bbc029a92c2 Mon Sep 17 00:00:00 2001
+From: Michael Tremer <michael.tremer@ipfire.org>
+Date: Wed, 24 Sep 2014 14:38:04 +0200
+Subject: [PATCH 21/22] openvpn: Fix copy-and-paste error
+
+---
+ src/openvpn.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/openvpn.c b/src/openvpn.c
+index f686721..2db3677 100644
+--- a/src/openvpn.c
++++ b/src/openvpn.c
+@@ -293,7 +293,7 @@ static int multi1_read (char *name, FILE *fh)
+ continue;
+
+ // Ignore not yet fully established connections
+- if (strcmp(fields[1], "UNDEF") == 0)
++ if (strcmp(fields[0], "UNDEF") == 0)
+ continue;
+
+ if (collect_user_count)
+--
+1.9.3
+
--- /dev/null
+From 3458d610e8b99eb88c2f06ad576b4f46e0169877 Mon Sep 17 00:00:00 2001
+From: Michael Tremer <michael.tremer@ipfire.org>
+Date: Fri, 26 Sep 2014 12:02:27 +0200
+Subject: [PATCH 22/22] openvpn: Change data type from COUNTER to DERIVE
+
+COUNTER is not what we want here, so we will use DERIVE.
+---
+ src/openvpn.c | 26 +++++++++++++-------------
+ src/types.db | 2 ++
+ 2 files changed, 15 insertions(+), 13 deletions(-)
+
+diff --git a/src/openvpn.c b/src/openvpn.c
+index 2db3677..d446e99 100644
+--- a/src/openvpn.c
++++ b/src/openvpn.c
+@@ -116,13 +116,13 @@ static void numusers_submit (char *pinst, char *tinst, gauge_t value)
+ } /* void numusers_submit */
+
+ /* dispatches stats about traffic (TCP or UDP) generated by the tunnel per single endpoint */
+-static void iostats_submit (char *pinst, char *tinst, counter_t rx, counter_t tx)
++static void iostats_submit (char *pinst, char *tinst, derive_t rx, derive_t tx)
+ {
+ value_t values[2];
+ value_list_t vl = VALUE_LIST_INIT;
+
+- values[0].counter = rx;
+- values[1].counter = tx;
++ values[0].derive = rx;
++ values[1].derive = tx;
+
+ /* NOTE ON THE NEW NAMING SCHEMA:
+ * using plugin_instance to identify each vpn config (and
+@@ -137,7 +137,7 @@ static void iostats_submit (char *pinst, char *tinst, counter_t rx, counter_t tx
+ if (pinst != NULL)
+ sstrncpy (vl.plugin_instance, pinst,
+ sizeof (vl.plugin_instance));
+- sstrncpy (vl.type, "if_octets", sizeof (vl.type));
++ sstrncpy (vl.type, "if_octets_derive", sizeof (vl.type));
+ if (tinst != NULL)
+ sstrncpy (vl.type_instance, tinst, sizeof (vl.type_instance));
+
+@@ -146,13 +146,13 @@ static void iostats_submit (char *pinst, char *tinst, counter_t rx, counter_t tx
+
+ /* dispatches stats about data compression shown when in single mode */
+ static void compression_submit (char *pinst, char *tinst,
+- counter_t uncompressed, counter_t compressed)
++ derive_t uncompressed, derive_t compressed)
+ {
+ value_t values[2];
+ value_list_t vl = VALUE_LIST_INIT;
+
+- values[0].counter = uncompressed;
+- values[1].counter = compressed;
++ values[0].derive = uncompressed;
++ values[1].derive = compressed;
+
+ vl.values = values;
+ vl.values_len = STATIC_ARRAY_SIZE (values);
+@@ -161,7 +161,7 @@ static void compression_submit (char *pinst, char *tinst,
+ if (pinst != NULL)
+ sstrncpy (vl.plugin_instance, pinst,
+ sizeof (vl.plugin_instance));
+- sstrncpy (vl.type, "compression", sizeof (vl.type));
++ sstrncpy (vl.type, "compression_derive", sizeof (vl.type));
+ if (tinst != NULL)
+ sstrncpy (vl.type_instance, tinst, sizeof (vl.type_instance));
+
+@@ -175,11 +175,11 @@ static int single_read (char *name, FILE *fh)
+ const int max_fields = STATIC_ARRAY_SIZE (fields);
+ int fields_num, read = 0;
+
+- counter_t link_rx, link_tx;
+- counter_t tun_rx, tun_tx;
+- counter_t pre_compress, post_compress;
+- counter_t pre_decompress, post_decompress;
+- counter_t overhead_rx, overhead_tx;
++ derive_t link_rx, link_tx;
++ derive_t tun_rx, tun_tx;
++ derive_t pre_compress, post_compress;
++ derive_t pre_decompress, post_decompress;
++ derive_t overhead_rx, overhead_tx;
+
+ link_rx = 0;
+ link_tx = 0;
+diff --git a/src/types.db b/src/types.db
+index ad54240..03ec75b 100644
+--- a/src/types.db
++++ b/src/types.db
+@@ -18,6 +18,7 @@ cache_result value:COUNTER:0:4294967295
+ cache_size value:GAUGE:0:4294967295
+ charge value:GAUGE:0:U
+ compression uncompressed:COUNTER:0:U, compressed:COUNTER:0:U
++compression_derive uncompressed:DERIVE:0:U, compressed:DERIVE:0:U
+ compression_ratio value:GAUGE:0:2
+ connections value:COUNTER:0:U
+ conntrack entropy:GAUGE:0:4294967295
+@@ -74,6 +75,7 @@ if_dropped rx:COUNTER:0:4294967295, tx:COUNTER:0:4294967295
+ if_errors rx:COUNTER:0:4294967295, tx:COUNTER:0:4294967295
+ if_multicast value:COUNTER:0:4294967295
+ if_octets rx:COUNTER:0:4294967295, tx:COUNTER:0:4294967295
++if_octets_derive rx:DERIVE:0:U, tx:DERIVE:0:U
+ if_packets rx:COUNTER:0:4294967295, tx:COUNTER:0:4294967295
+ if_rx_errors value:COUNTER:0:4294967295
+ if_tx_errors value:COUNTER:0:4294967295
+--
+1.9.3
+
--- /dev/null
+diff --git a/src/openvpn.c b/src/openvpn.c
+index d446e9957b68..ef5bf1078285 100644
+--- a/src/openvpn.c
++++ b/src/openvpn.c
+@@ -70,6 +70,7 @@ static const char *config_keys[] =
+ };
+ static int config_keys_num = STATIC_ARRAY_SIZE (config_keys);
+
++static int version_detect (const char *filename);
+
+ /* Helper function
+ * copy-n-pasted from common.c - changed delim to "," */
+@@ -540,6 +541,11 @@ static int openvpn_read (void)
+ continue;
+ }
+
++ // If the version was not detected yet, we try to guess again
++ if (vpn_list[i]->version == 0) {
++ vpn_list[i]->version = version_detect(vpn_list[i]->file);
++ }
++
+ switch (vpn_list[i]->version)
+ {
+ case SINGLE:
+@@ -567,7 +573,7 @@ static int openvpn_read (void)
+ read += vpn_read;
+ }
+
+- return (read ? 0 : -1);
++ return 0;
+ } /* int openvpn_read */
+
+ static int version_detect (const char *filename)
+@@ -630,16 +636,6 @@ static int version_detect (const char *filename)
+ }
+ }
+
+- if (version == 0)
+- {
+- /* This is only reached during configuration, so complaining to
+- * the user is in order. */
+- NOTICE ("openvpn plugin: %s: Unknown file format, please "
+- "report this as bug. Make sure to include "
+- "your status file, so the plugin can "
+- "be adapted.", filename);
+- }
+-
+ fclose (fh);
+
+ return version;
+@@ -656,13 +652,6 @@ static int openvpn_config (const char *key, const char *value)
+ /* try to detect the status file format */
+ status_version = version_detect (value);
+
+- if (status_version == 0)
+- {
+- WARNING ("openvpn plugin: unable to detect status version, \
+- discarding status file \"%s\".", value);
+- return (1);
+- }
+-
+ status_file = sstrdup (value);
+ if (status_file == NULL)
+ {
+++ /dev/null
-Submitted By: hauke from OpenWRT
-Date: 2009-04-17
-Initial Package Version: 1.0.2
-Origin: https://dev.openwrt.org/changeset/15405/trunk/package/crda/patches/101-make_crypto_use_optional.patch
-Description: The patch was modified for version crda-3.13 by Erik Kapfer <erik.kapfer@ipfire.org>..
-This patch provides the following improvements:
- * Crypto usage is optional.
-
-diff -Nur crda-3.13.orig/Makefile crda-3.13/Makefile
---- crda-3.13.orig/Makefile 2015-01-12 07:55:08.791183765 +0100
-+++ crda-3.13/Makefile 2015-01-12 07:56:35.437381029 +0100
-@@ -43,7 +43,9 @@
-
- $(LIBREG): keys-ssl.c
-
--else
-+endif
-+
-+ifeq ($(USE_GCRYPT),1)
- CFLAGS += -DUSE_GCRYPT
- LDLIBS += -lgcrypt
-
+++ /dev/null
-diff -up cyrus-sasl-2.1.22/plugins/digestmd5.c.elif cyrus-sasl-2.1.22/plugins/digestmd5.c
---- cyrus-sasl-2.1.22/plugins/digestmd5.c.elif 2009-01-23 09:40:31.000000000 +0100
-+++ cyrus-sasl-2.1.22/plugins/digestmd5.c 2009-02-06 15:20:15.000000000 +0100
-@@ -2743,7 +2743,7 @@ static sasl_server_plug_t digestmd5_serv
- "DIGEST-MD5", /* mech_name */
- #ifdef WITH_RC4
- 128, /* max_ssf */
--#elif WITH_DES
-+#elif defined(WITH_DES)
- 112,
- #else
- 1,
-@@ -4071,7 +4071,7 @@ static sasl_client_plug_t digestmd5_clie
- "DIGEST-MD5",
- #ifdef WITH_RC4 /* mech_name */
- 128, /* max ssf */
--#elif WITH_DES
-+#elif defined(WITH_DES)
- 112,
- #else
- 1,
--- /dev/null
+commit 63e16feedea3639ef1f21fecbff9ed2ae256728b
+Author: Michael Tremer <michael.tremer@ipfire.org>
+Date: Sat Apr 25 13:18:07 2015 +0200
+
+ Perform lazy initialization of the database
+
+ The database will only be initialized when it is actually
+ needed. That makes starting up ddns a bit faster and allows
+ us to execute it as non-root for simple commands like
+ "list-providers".
+
+ If the database path is not writable at all, the database
+ feature is disable and an error message is logged. This
+ will hopefully help us to perform the DNS update even when
+ there is a local misconfiguration.
+
+diff --git a/src/ddns/database.py b/src/ddns/database.py
+index 5d4ffc9..42c3433 100644
+--- a/src/ddns/database.py
++++ b/src/ddns/database.py
+@@ -20,7 +20,7 @@
+ ###############################################################################
+
+ import datetime
+-import os.path
++import os
+ import sqlite3
+
+ # Initialize the logger.
+@@ -31,9 +31,11 @@ logger.propagate = 1
+ class DDNSDatabase(object):
+ def __init__(self, core, path):
+ self.core = core
++ self.path = path
+
+- # Open the database file
+- self._db = self._open_database(path)
++ # We won't open the connection to the database directly
++ # so that we do not do it unnecessarily.
++ self._db = None
+
+ def __del__(self):
+ self._close_database()
+@@ -46,7 +48,7 @@ class DDNSDatabase(object):
+ conn = sqlite3.connect(path, detect_types=sqlite3.PARSE_DECLTYPES|sqlite3.PARSE_COLNAMES)
+ conn.isolation_level = None
+
+- if not exists:
++ if not exists and self.is_writable():
+ logger.debug("Initialising database layout")
+ c = conn.cursor()
+ c.executescript("""
+@@ -68,12 +70,25 @@ class DDNSDatabase(object):
+
+ return conn
+
++ def is_writable(self):
++ # Check if the database file exists and is writable.
++ ret = os.access(self.path, os.W_OK)
++ if ret:
++ return True
++
++ # If not, we check if we are able to write to the directory.
++ # In that case the database file will be created in _open_database().
++ return os.access(os.path.dirname(self.path), os.W_OK)
++
+ def _close_database(self):
+ if self._db:
+ self._db_close()
+ self._db = None
+
+ def _execute(self, query, *parameters):
++ if self._db is None:
++ self._db = self._open_database(self.path)
++
+ c = self._db.cursor()
+ try:
+ c.execute(query, parameters)
+@@ -81,6 +96,10 @@ class DDNSDatabase(object):
+ c.close()
+
+ def add_update(self, hostname, status, message=None):
++ if not self.is_writable():
++ logger.warning("Could not log any updates because the database is not writable")
++ return
++
+ self._execute("INSERT INTO updates(hostname, status, message, timestamp) \
+ VALUES(?, ?, ?, ?)", hostname, status, message, datetime.datetime.utcnow())
+
--- /dev/null
+commit f62fa5baffe2d225604460ecd03b8159b987df8f
+Author: Michael Tremer <michael.tremer@ipfire.org>
+Date: Sun Apr 26 20:15:33 2015 +0200
+
+ database: Open database for the search operations, too
+
+diff --git a/src/ddns/database.py b/src/ddns/database.py
+index 42c3433..70a7363 100644
+--- a/src/ddns/database.py
++++ b/src/ddns/database.py
+@@ -122,6 +122,9 @@ class DDNSDatabase(object):
+ """
+ Returns the timestamp of the last update (with the given status code).
+ """
++ if self._db is None:
++ self._db = self._open_database(self.path)
++
+ c = self._db.cursor()
+
+ try:
+@@ -141,6 +144,9 @@ class DDNSDatabase(object):
+ """
+ Returns the update status of the last update.
+ """
++ if self._db is None:
++ self._db = self._open_database(self.path)
++
+ c = self._db.cursor()
+
+ try:
+@@ -156,6 +162,9 @@ class DDNSDatabase(object):
+ """
+ Returns the reason string for the last failed update (if any).
+ """
++ if self._db is None:
++ self._db = self._open_database(self.path)
++
+ c = self._db.cursor()
+
+ try:
+++ /dev/null
-commit 78046ffe2187d91c61d6c2f910249b8a5be71b08
-Author: Stefan Schantl <stefan.schantl@ipfire.org>
-Date: Wed Oct 22 21:39:09 2014 +0200
-
- Add changeip.com as new provider.
-
- Fixes #10639.
-
-diff --git a/README b/README
-index 5944102..6a06f4b 100644
---- a/README
-+++ b/README
-@@ -49,6 +49,7 @@ INSTALLATION:
-
- SUPPORTED PROVIDERS:
- all-inkl.com
-+ changeip.com
- dhs.org
- dns.lightningwirelabs.com
- dnspark.com
-diff --git a/ddns.conf.sample b/ddns.conf.sample
-index d3ac53f..0048a46 100644
---- a/ddns.conf.sample
-+++ b/ddns.conf.sample
-@@ -30,6 +30,11 @@
- # secret = XYZ
- # ttl = 60
-
-+# [test.changeip.com]
-+# provider = changeip.com
-+# username = user
-+# password = pass
-+
- # [test.dhs.org]
- # provider = dhs.org
- # username = user
-diff --git a/src/ddns/providers.py b/src/ddns/providers.py
-index 1e88995..587d5ff 100644
---- a/src/ddns/providers.py
-+++ b/src/ddns/providers.py
-@@ -539,6 +539,44 @@ class DDNSProviderBindNsupdate(DDNSProvider):
- return "\n".join(scriptlet)
-
-
-+class DDNSProviderChangeIP(DDNSProvider):
-+ handle = "changeip.com"
-+ name = "ChangeIP.com"
-+ website = "https://changeip.com"
-+ protocols = ("ipv4",)
-+
-+ # Detailed information about the update api can be found here.
-+ # http://www.changeip.com/accounts/knowledgebase.php?action=displayarticle&id=34
-+
-+ url = "https://nic.changeip.com/nic/update"
-+ can_remove_records = False
-+
-+ def update_protocol(self, proto):
-+ data = {
-+ "hostname" : self.hostname,
-+ "myip" : self.get_address(proto),
-+ }
-+
-+ # Send update to the server.
-+ try:
-+ response = self.send_request(self.url, username=self.username, password=self.password,
-+ data=data)
-+
-+ # Handle error codes.
-+ except urllib2.HTTPError, e:
-+ if e.code == 422:
-+ raise DDNSRequestError(_("Domain not found."))
-+
-+ raise
-+
-+ # Handle success message.
-+ if response.code == 200:
-+ return
-+
-+ # If we got here, some other update error happened.
-+ raise DDNSUpdateError(_("Server response: %s") % output)
-+
-+
- class DDNSProviderDHS(DDNSProvider):
- handle = "dhs.org"
- name = "DHS International"
+++ /dev/null
-commit 25f39b4e437627bd1a49393280271d59ad28b86e
-Author: Stefan Schantl <stefan.schantl@ipfire.org>
-Date: Mon Jan 5 21:37:55 2015 +0100
-
- spdns.de: Fix authentication.
-
- There was a simple copy and paste issue which prevents a
- correct authentication with username and password against the
- providers API.
-
-diff --git a/src/ddns/providers.py b/src/ddns/providers.py
-index 587d5ff..bcfb088 100644
---- a/src/ddns/providers.py
-+++ b/src/ddns/providers.py
-@@ -1271,7 +1271,7 @@ class DDNSProviderSPDNS(DDNSProtocolDynDNS2, DDNSProvider):
-
- @property
- def password(self):
-- return self.get("username") or self.token
-+ return self.get("password") or self.token
-
-
- class DDNSProviderStrato(DDNSProtocolDynDNS2, DDNSProvider):
+++ /dev/null
-diff -up dhcp-4.2.0/common/dispatch.c.dracut dhcp-4.2.0/common/dispatch.c
---- dhcp-4.2.0/common/dispatch.c.dracut 2010-06-01 19:29:59.000000000 +0200
-+++ dhcp-4.2.0/common/dispatch.c 2010-07-21 16:10:09.000000000 +0200
-@@ -189,6 +189,10 @@ void add_timeout (when, where, what, ref
- isc_interval_t interval;
- isc_time_t expires;
-
-+ if (when == NULL) {
-+ return;
-+ }
-+
- /* See if this timeout supersedes an existing timeout. */
- t = (struct timeout *)0;
- for (q = timeouts; q; q = q->next) {
+++ /dev/null
-diff -up dhcp-4.2.0/omapip/errwarn.c.errwarn dhcp-4.2.0/omapip/errwarn.c
---- dhcp-4.2.0/omapip/errwarn.c.errwarn 2009-07-23 20:52:21.000000000 +0200
-+++ dhcp-4.2.0/omapip/errwarn.c 2010-07-21 13:23:47.000000000 +0200
-@@ -76,20 +76,13 @@ void log_fatal (const char * fmt, ... )
-
- #if !defined (NOMINUM)
- log_error ("%s", "");
-- log_error ("If you did not get this software from ftp.isc.org, please");
-- log_error ("get the latest from ftp.isc.org and install that before");
-- log_error ("requesting help.");
-+ log_error ("This version of ISC DHCP is based on the release available");
-+ log_error ("on ftp.isc.org. Features have been added and other changes");
-+ log_error ("have been made to the base software release in order to make");
-+ log_error ("it work better with this distribution.");
- log_error ("%s", "");
-- log_error ("If you did get this software from ftp.isc.org and have not");
-- log_error ("yet read the README, please read it before requesting help.");
-- log_error ("If you intend to request help from the dhcp-server@isc.org");
-- log_error ("mailing list, please read the section on the README about");
-- log_error ("submitting bug reports and requests for help.");
-- log_error ("%s", "");
-- log_error ("Please do not under any circumstances send requests for");
-- log_error ("help directly to the authors of this software - please");
-- log_error ("send them to the appropriate mailing list as described in");
-- log_error ("the README file.");
-+ log_error ("Please report for this software via the Red Hat Bugzilla site:");
-+ log_error (" http://bugzilla.redhat.com");
- log_error ("%s", "");
- log_error ("exiting.");
- #endif
+++ /dev/null
-diff -up dhcp-4.2.0/common/tables.c.garbage dhcp-4.2.0/common/tables.c
---- dhcp-4.2.0/common/tables.c.garbage 2009-11-20 02:49:01.000000000 +0100
-+++ dhcp-4.2.0/common/tables.c 2010-07-21 14:40:56.000000000 +0200
-@@ -207,7 +207,7 @@ static struct option dhcp_options[] = {
- { "netinfo-server-tag", "t", &dhcp_universe, 113, 1 },
- { "default-url", "t", &dhcp_universe, 114, 1 },
- { "subnet-selection", "I", &dhcp_universe, 118, 1 },
-- { "domain-search", "Dc", &dhcp_universe, 119, 1 },
-+ { "domain-search", "D", &dhcp_universe, 119, 1 },
- { "vivco", "Evendor-class.", &dhcp_universe, 124, 1 },
- { "vivso", "Evendor.", &dhcp_universe, 125, 1 },
- #if 0
+++ /dev/null
-diff -up dhcp-4.2.0/client/dhclient.c.inherit dhcp-4.2.0/client/dhclient.c
---- dhcp-4.2.0/client/dhclient.c.inherit 2010-07-21 14:33:44.000000000 +0200
-+++ dhcp-4.2.0/client/dhclient.c 2010-07-21 14:40:05.000000000 +0200
-@@ -2322,6 +2322,7 @@ void send_request (cpp)
- {
- struct client_state *client = cpp;
-
-+ int i;
- int result;
- int interval;
- struct sockaddr_in destination;
-@@ -2381,6 +2382,22 @@ void send_request (cpp)
- /* Now do a preinit on the interface so that we can
- discover a new address. */
- script_init (client, "PREINIT", (struct string_list *)0);
-+
-+ /* Has an active lease */
-+ if (client -> interface -> addresses != NULL) {
-+ for (i = 0; i < client -> interface -> address_count; i++) {
-+ if (client -> active &&
-+ client -> active -> is_bootp &&
-+ client -> active -> expiry > cur_time &&
-+ client -> interface -> addresses[i].s_addr != 0 &&
-+ client -> active -> address.len == 4 &&
-+ memcpy (client -> active -> address.iabuf, &(client -> interface -> addresses[i]), 4) == 0) {
-+ client_envadd (client, "", "keep_old_ip", "%s", "yes");
-+ break;
-+ }
-+ }
-+ }
-+
- if (client -> alias)
- script_write_params (client, "alias_",
- client -> alias);
+++ /dev/null
-diff -up dhcp-4.2.0/client/dhclient.c.logpid dhcp-4.2.0/client/dhclient.c
---- dhcp-4.2.0/client/dhclient.c.logpid 2010-07-21 16:13:52.000000000 +0200
-+++ dhcp-4.2.0/client/dhclient.c 2010-07-21 16:16:51.000000000 +0200
-@@ -154,7 +154,7 @@ main(int argc, char **argv) {
- else if (fd != -1)
- close(fd);
-
-- openlog("dhclient", LOG_NDELAY, LOG_DAEMON);
-+ openlog("dhclient", LOG_NDELAY | LOG_PID, LOG_DAEMON);
-
- #if !(defined(DEBUG) || defined(__CYGWIN32__))
- setlogmask(LOG_UPTO(LOG_INFO));
+++ /dev/null
-diff -up dhcp-4.2.0/common/discover.c.noipv6 dhcp-4.2.0/common/discover.c
---- dhcp-4.2.0/common/discover.c.noipv6 2010-07-21 14:31:13.000000000 +0200
-+++ dhcp-4.2.0/common/discover.c 2010-07-21 16:04:57.000000000 +0200
-@@ -443,7 +443,7 @@ begin_iface_scan(struct iface_conf_list
- }
-
- #ifdef DHCPv6
-- if (local_family == AF_INET6) {
-+ if ((local_family == AF_INET6) && !access("/proc/net/if_inet6", R_OK)) {
- ifaces->fp6 = fopen("/proc/net/if_inet6", "re");
- if (ifaces->fp6 == NULL) {
- log_error("Error opening '/proc/net/if_inet6' to "
-@@ -454,6 +454,8 @@ begin_iface_scan(struct iface_conf_list
- ifaces->fp = NULL;
- return 0;
- }
-+ } else {
-+ ifaces->fp6 = NULL;
- }
- #endif
-
-@@ -721,7 +723,7 @@ next_iface(struct iface_info *info, int
- return 1;
- }
- #ifdef DHCPv6
-- if (!(*err)) {
-+ if (!(*err) && ifaces->fp6) {
- if (local_family == AF_INET6)
- return next_iface6(info, err, ifaces);
- }
-@@ -740,7 +742,8 @@ end_iface_scan(struct iface_conf_list *i
- ifaces->sock = -1;
- #ifdef DHCPv6
- if (local_family == AF_INET6) {
-- fclose(ifaces->fp6);
-+ if (ifaces->fp6)
-+ fclose(ifaces->fp6);
- ifaces->fp6 = NULL;
- }
- #endif
+++ /dev/null
-diff -up dhcp-4.2.0/server/dhcpv6.c.noprefixavail dhcp-4.2.0/server/dhcpv6.c
---- dhcp-4.2.0/server/dhcpv6.c.noprefixavail 2010-10-07 13:48:45.000000000 +0200
-+++ dhcp-4.2.0/server/dhcpv6.c 2010-10-13 11:00:25.000000000 +0200
-@@ -1134,7 +1134,7 @@ try_client_v6_prefix(struct iasubopt **p
- return DHCP_R_INVALIDARG;
- }
- tmp_plen = (int) requested_pref->data[0];
-- if ((tmp_plen < 3) || (tmp_plen > 128)) {
-+ if ((tmp_plen < 3) || (tmp_plen > 128) ||((int)tmp_plen != pool->units)) {
- return ISC_R_FAILURE;
- }
- memcpy(&tmp_pref, requested_pref->data + 1, sizeof(tmp_pref));
-@@ -1147,9 +1147,8 @@ try_client_v6_prefix(struct iasubopt **p
- return ISC_R_FAILURE;
- }
-
-- if (((int)tmp_plen != pool->units) ||
-- !ipv6_in_pool(&tmp_pref, pool)) {
-- return ISC_R_FAILURE;
-+ if (!ipv6_in_pool(&tmp_pref, pool)) {
-+ return ISC_R_ADDRNOTAVAIL;
- }
-
- if (prefix6_exists(pool, &tmp_pref, tmp_plen)) {
-@@ -1409,13 +1408,6 @@ lease_to_client(struct data_string *repl
- if ((status != ISC_R_SUCCESS) &&
- (status != ISC_R_NORESOURCES))
- goto exit;
--
-- /*
-- * If any prefix cannot be given to any IA_PD, then
-- * set the NoPrefixAvail status code.
-- */
-- if (reply.client_resources == 0)
-- no_resources_avail = ISC_TRUE;
- }
-
- /*
-@@ -1549,36 +1541,6 @@ lease_to_client(struct data_string *repl
- reply.opt_state, reply.packet,
- required_opts_NAA,
- NULL);
-- } else if (no_resources_avail && (reply.ia_count == 0) &&
-- (reply.packet->dhcpv6_msg_type == DHCPV6_SOLICIT))
-- {
-- /* Set the NoPrefixAvail status code. */
-- if (!set_status_code(STATUS_NoPrefixAvail,
-- "No prefixes available for this "
-- "interface.", reply.opt_state)) {
-- log_error("lease_to_client: Unable to set "
-- "NoPrefixAvail status code.");
-- goto exit;
-- }
--
-- /* Rewind the cursor to the start. */
-- reply.cursor = REPLY_OPTIONS_INDEX;
--
-- /*
-- * Produce an advertise that includes only:
-- *
-- * Status code.
-- * Server DUID.
-- * Client DUID.
-- */
-- reply.buf.reply.msg_type = DHCPV6_ADVERTISE;
-- reply.cursor += store_options6((char *)reply.buf.data +
-- reply.cursor,
-- sizeof(reply.buf) -
-- reply.cursor,
-- reply.opt_state, reply.packet,
-- required_opts_NAA,
-- NULL);
- } else {
- /*
- * Having stored the client's IA's, store any options that
-@@ -2793,16 +2755,18 @@ find_client_temporaries(struct reply_sta
- */
- static isc_result_t
- reply_process_try_addr(struct reply_state *reply, struct iaddr *addr) {
-- isc_result_t status = ISC_R_NORESOURCES;
-+ isc_result_t status = ISC_R_ADDRNOTAVAIL;
- struct ipv6_pool *pool;
- int i;
- struct data_string data_addr;
-
- if ((reply == NULL) || (reply->shared == NULL) ||
-- (reply->shared->ipv6_pools == NULL) || (addr == NULL) ||
-- (reply->lease != NULL))
-+ (addr == NULL) || (reply->lease != NULL))
- return DHCP_R_INVALIDARG;
-
-+ if (reply->shared->ipv6_pools == NULL)
-+ return ISC_R_ADDRNOTAVAIL;
-+
- memset(&data_addr, 0, sizeof(data_addr));
- data_addr.len = addr->len;
- data_addr.data = addr->iabuf;
-@@ -3314,7 +3278,9 @@ reply_process_ia_pd(struct reply_state *
- if (status == ISC_R_CANCELED)
- break;
-
-- if ((status != ISC_R_SUCCESS) && (status != ISC_R_ADDRINUSE))
-+ if ((status != ISC_R_SUCCESS) &&
-+ (status != ISC_R_ADDRINUSE) &&
-+ (status != ISC_R_ADDRNOTAVAIL))
- goto cleanup;
- }
-
-@@ -3594,7 +3560,8 @@ reply_process_prefix(struct reply_state
-
- /* Either error out or skip this prefix. */
- if ((status != ISC_R_SUCCESS) &&
-- (status != ISC_R_ADDRINUSE))
-+ (status != ISC_R_ADDRINUSE) &&
-+ (status != ISC_R_ADDRNOTAVAIL))
- goto cleanup;
-
- if (reply->lease == NULL) {
-@@ -3773,16 +3740,18 @@ prefix_is_owned(struct reply_state *repl
- static isc_result_t
- reply_process_try_prefix(struct reply_state *reply,
- struct iaddrcidrnet *pref) {
-- isc_result_t status = ISC_R_NORESOURCES;
-+ isc_result_t status = ISC_R_ADDRNOTAVAIL;
- struct ipv6_pool *pool;
- int i;
- struct data_string data_pref;
-
- if ((reply == NULL) || (reply->shared == NULL) ||
-- (reply->shared->ipv6_pools == NULL) || (pref == NULL) ||
-- (reply->lease != NULL))
-+ (pref == NULL) || (reply->lease != NULL))
- return DHCP_R_INVALIDARG;
-
-+ if (reply->shared->ipv6_pools == NULL)
-+ return ISC_R_ADDRNOTAVAIL;
-+
- memset(&data_pref, 0, sizeof(data_pref));
- data_pref.len = 17;
- if (!buffer_allocate(&data_pref.buffer, data_pref.len, MDL)) {
+++ /dev/null
-diff -up dhcp-4.2.1b1/common/dispatch.c.64-bit_lease_parse dhcp-4.2.1b1/common/dispatch.c
-diff -up dhcp-4.2.1b1/common/parse.c.64-bit_lease_parse dhcp-4.2.1b1/common/parse.c
---- dhcp-4.2.1b1/common/parse.c.64-bit_lease_parse 2010-12-30 00:01:42.000000000 +0100
-+++ dhcp-4.2.1b1/common/parse.c 2011-01-28 08:01:10.000000000 +0100
-@@ -909,8 +909,8 @@ TIME
- parse_date_core(cfile)
- struct parse *cfile;
- {
-- int guess;
-- int tzoff, wday, year, mon, mday, hour, min, sec;
-+ TIME guess;
-+ long int tzoff, wday, year, mon, mday, hour, min, sec;
- const char *val;
- enum dhcp_token token;
- static int months[11] = { 31, 59, 90, 120, 151, 181,
-@@ -936,7 +936,7 @@ parse_date_core(cfile)
- }
-
- token = next_token(&val, NULL, cfile); /* consume number */
-- guess = atoi(val);
-+ guess = atol(val);
-
- return((TIME)guess);
- }
-@@ -948,7 +948,7 @@ parse_date_core(cfile)
- return((TIME)0);
- }
- token = next_token(&val, NULL, cfile); /* consume day of week */
-- wday = atoi(val);
-+ wday = atol(val);
-
- /* Year... */
- token = peek_token(&val, NULL, cfile);
-@@ -964,7 +964,7 @@ parse_date_core(cfile)
- somebody invents a time machine, I think we can safely disregard
- it. This actually works around a stupid Y2K bug that was present
- in a very early beta release of dhcpd. */
-- year = atoi(val);
-+ year = atol(val);
- if (year > 1900)
- year -= 1900;
-
-@@ -988,7 +988,7 @@ parse_date_core(cfile)
- return((TIME)0);
- }
- token = next_token(&val, NULL, cfile); /* consume month */
-- mon = atoi(val) - 1;
-+ mon = atol(val) - 1;
-
- /* Slash separating month from day... */
- token = peek_token(&val, NULL, cfile);
-@@ -1010,7 +1010,7 @@ parse_date_core(cfile)
- return((TIME)0);
- }
- token = next_token(&val, NULL, cfile); /* consume day of month */
-- mday = atoi(val);
-+ mday = atol(val);
-
- /* Hour... */
- token = peek_token(&val, NULL, cfile);
-@@ -1021,7 +1021,7 @@ parse_date_core(cfile)
- return((TIME)0);
- }
- token = next_token(&val, NULL, cfile); /* consume hour */
-- hour = atoi(val);
-+ hour = atol(val);
-
- /* Colon separating hour from minute... */
- token = peek_token(&val, NULL, cfile);
-@@ -1043,7 +1043,7 @@ parse_date_core(cfile)
- return((TIME)0);
- }
- token = next_token(&val, NULL, cfile); /* consume minute */
-- min = atoi(val);
-+ min = atol(val);
-
- /* Colon separating minute from second... */
- token = peek_token(&val, NULL, cfile);
-@@ -1065,13 +1065,13 @@ parse_date_core(cfile)
- return((TIME)0);
- }
- token = next_token(&val, NULL, cfile); /* consume second */
-- sec = atoi(val);
-+ sec = atol(val);
-
- tzoff = 0;
- token = peek_token(&val, NULL, cfile);
- if (token == NUMBER) {
- token = next_token(&val, NULL, cfile); /* consume tzoff */
-- tzoff = atoi(val);
-+ tzoff = atol(val);
- } else if (token != SEMI) {
- token = next_token(&val, NULL, cfile);
- parse_warn(cfile,
+++ /dev/null
-diff -up dhcp-4.2.1b1/client/dhclient.conf.supersede dhcp-4.2.1b1/client/dhclient.conf
---- dhcp-4.2.1b1/client/dhclient.conf.supersede 2010-09-15 01:03:56.000000000 +0200
-+++ dhcp-4.2.1b1/client/dhclient.conf 2011-01-27 18:38:28.000000000 +0100
-@@ -4,7 +4,7 @@ send dhcp-lease-time 3600;
- supersede domain-search "fugue.com", "home.vix.com";
- prepend domain-name-servers 127.0.0.1;
- request subnet-mask, broadcast-address, time-offset, routers,
-- domain-name, domain-name-servers, host-name;
-+ domain-search, domain-name-servers, host-name;
- require subnet-mask, domain-name-servers;
- timeout 60;
- retry 60;
+++ /dev/null
-diff -up dhcp-4.2.1b1/client/dhc6.c.retransmission dhcp-4.2.1b1/client/dhc6.c
---- dhcp-4.2.1b1/client/dhc6.c.retransmission 2011-01-28 08:40:56.000000000 +0100
-+++ dhcp-4.2.1b1/client/dhc6.c 2011-01-28 08:39:22.000000000 +0100
-@@ -361,7 +361,7 @@ dhc6_retrans_init(struct client_state *c
- static void
- dhc6_retrans_advance(struct client_state *client)
- {
-- struct timeval elapsed;
-+ struct timeval elapsed, elapsed_after_RT;
-
- /* elapsed = cur - start */
- elapsed.tv_sec = cur_tv.tv_sec - client->start_time.tv_sec;
-@@ -378,6 +378,8 @@ dhc6_retrans_advance(struct client_state
- elapsed.tv_sec += 1;
- elapsed.tv_usec -= 1000000;
- }
-+ elapsed_after_RT.tv_sec = elapsed.tv_sec;
-+ elapsed_after_RT.tv_usec = elapsed.tv_usec;
-
- /*
- * RT for each subsequent message transmission is based on the previous
-@@ -415,13 +417,10 @@ dhc6_retrans_advance(struct client_state
- elapsed.tv_usec -= 1000000;
- }
- if (elapsed.tv_sec >= client->MRD) {
-- /*
-- * wake at RT + cur = start + MRD
-- */
-- client->RT = client->MRD +
-- (client->start_time.tv_sec - cur_tv.tv_sec);
-- client->RT = client->RT * 100 +
-- (client->start_time.tv_usec - cur_tv.tv_usec) / 10000;
-+ client->RT = client->MRD - elapsed_after_RT.tv_sec;
-+ client->RT = client->RT * 100 - elapsed_after_RT.tv_usec / 10000;
-+ if (client->RT < 0)
-+ client->RT = 0;
- }
- client->txcount++;
- }
-@@ -1497,7 +1496,7 @@ check_timing6 (struct client_state *clie
- }
-
- /* Check if finished (-1 argument). */
-- if ((client->MRD != 0) && (elapsed.tv_sec > client->MRD)) {
-+ if ((client->MRD != 0) && (elapsed.tv_sec >= client->MRD)) {
- log_info("Max retransmission duration exceeded.");
- return(CHK_TIM_MRD_EXCEEDED);
- }
+++ /dev/null
-diff -up dhcp-4.2.2b1/client/dhclient.c.usage dhcp-4.2.2b1/client/dhclient.c
---- dhcp-4.2.2b1/client/dhclient.c.usage 2011-07-01 13:55:16.000000000 +0200
-+++ dhcp-4.2.2b1/client/dhclient.c 2011-07-01 13:58:55.243800602 +0200
-@@ -1047,6 +1047,10 @@ static void usage()
- " [-s server-addr] [-cf config-file] "
- "[-lf lease-file]\n"
- " [-pf pid-file] [--no-pid] [-e VAR=val]\n"
-+ " [-I <dhcp-client-identifier>] [-B]\n"
-+ " [-H <host-name> | -F <fqdn.fqdn>] [-timeout <timeout>]\n"
-+ " [-V <vendor-class-identifier>]\n"
-+ " [-R <request option list>]\n"
- " [-sf script-file] [interface]");
- }
-
+++ /dev/null
-diff -up dhcp-4.2.2/client/Makefile.am.rh637017 dhcp-4.2.2/client/Makefile.am
---- dhcp-4.2.2/client/Makefile.am.rh637017 2010-09-15 00:32:36.000000000 +0200
-+++ dhcp-4.2.2/client/Makefile.am 2011-08-11 17:28:58.923897561 +0200
-@@ -5,7 +5,7 @@ dhclient_SOURCES = clparse.c dhclient.c
- scripts/netbsd scripts/nextstep scripts/openbsd \
- scripts/solaris scripts/openwrt
- dhclient_LDADD = ../common/libdhcp.a ../omapip/libomapi.a \
-- ../bind/lib/libdns.a ../bind/lib/libisc.a
-+ $(BIND9_LIBDIR) -ldns-export -lisc-export
- man_MANS = dhclient.8 dhclient-script.8 dhclient.conf.5 dhclient.leases.5
- EXTRA_DIST = $(man_MANS)
-
-diff -up dhcp-4.2.2/common/tests/Makefile.am.rh637017 dhcp-4.2.2/common/tests/Makefile.am
---- dhcp-4.2.2/common/tests/Makefile.am.rh637017 2009-10-28 05:12:30.000000000 +0100
-+++ dhcp-4.2.2/common/tests/Makefile.am 2011-08-11 17:33:45.258637236 +0200
-@@ -6,6 +6,5 @@ TESTS = test_alloc
-
- test_alloc_SOURCES = test_alloc.c
- test_alloc_LDADD = ../libdhcp.a ../../tests/libt_api.a \
-- ../../omapip/libomapi.a ../../bind/lib/libdns.a \
-- ../../bind/lib/libisc.a
--
-+ ../../omapip/libomapi.a \
-+ $(BIND9_LIBDIR) -ldns-export -lisc-export
-diff -up dhcp-4.2.2/configure.ac.rh637017 dhcp-4.2.2/configure.ac
---- dhcp-4.2.2/configure.ac.rh637017 2011-07-20 02:32:18.000000000 +0200
-+++ dhcp-4.2.2/configure.ac 2011-08-11 17:28:58.924897535 +0200
-@@ -512,20 +512,37 @@ AC_CHECK_MEMBER(struct msghdr.msg_contro
- libbind=
- AC_ARG_WITH(libbind,
- AC_HELP_STRING([--with-libbind=PATH],
-- [bind includes and libraries are in PATH
-- (default is ./bind)]),
-+ [bind includes are in PATH
-+ (default is ./bind/includes)]),
- use_libbind="$withval", use_libbind="no")
- case "$use_libbind" in
-+yes|no)
-+ libbind="\${top_srcdir}/bind/include"
-+ ;;
-+*)
-+ libbind="$use_libbind"
-+ ;;
-+esac
-+
-+BIND9_LIBDIR='-L$(top_builddir)/bind/lib'
-+AC_ARG_WITH(libbind-libs,
-+ AC_HELP_STRING([--with-libbind-libs=PATH],
-+ [bind9 export libraries are in PATH]),
-+ [libbind_libs="$withval"], [libbind_libs='no'])
-+case "$libbind_libs" in
- yes)
-- libbind="\${top_srcdir}/bind"
-+ AC_MSG_ERROR([Specify path to bind9 libraries])
- ;;
- no)
-- libbind="\${top_srcdir}/bind"
-+ BUNDLED_BIND=yes
- ;;
- *)
-- libbind="$use_libbind"
-+ BIND9_LIBDIR="-L$libbind_libs"
-+ BUNDLED_BIND=no
- ;;
- esac
-+AM_CONDITIONAL([BUNDLED_BIND], [test "$BUNDLED_BIND" = yes])
-+AC_SUBST([BIND9_LIBDIR])
-
- # OpenLDAP support.
- AC_ARG_WITH(ldap,
-@@ -562,7 +579,7 @@ fi
- CFLAGS="$CFLAGS $STD_CWARNINGS"
-
- # Try to add the bind include directory
--CFLAGS="$CFLAGS -I$libbind/include"
-+CFLAGS="$CFLAGS -I$libbind"
-
- AC_C_FLEXIBLE_ARRAY_MEMBER
-
-diff -up dhcp-4.2.2/dhcpctl/Makefile.am.rh637017 dhcp-4.2.2/dhcpctl/Makefile.am
---- dhcp-4.2.2/dhcpctl/Makefile.am.rh637017 2009-10-28 05:12:30.000000000 +0100
-+++ dhcp-4.2.2/dhcpctl/Makefile.am 2011-08-11 17:28:58.924897535 +0200
-@@ -6,10 +6,10 @@ EXTRA_DIST = $(man_MANS)
-
- omshell_SOURCES = omshell.c
- omshell_LDADD = libdhcpctl.a ../common/libdhcp.a ../omapip/libomapi.a \
-- ../bind/lib/libdns.a ../bind/lib/libisc.a
-+ $(BIND9_LIBDIR) -ldns-export -lisc-export
-
- libdhcpctl_a_SOURCES = dhcpctl.c callback.c remote.c
-
- cltest_SOURCES = cltest.c
- cltest_LDADD = libdhcpctl.a ../common/libdhcp.a ../omapip/libomapi.a \
-- ../bind/lib/libdns.a ../bind/lib/libisc.a
-\ No newline at end of file
-+ $(BIND9_LIBDIR) -ldns-export -lisc-export
-diff -up dhcp-4.2.2/Makefile.am.rh637017 dhcp-4.2.2/Makefile.am
---- dhcp-4.2.2/Makefile.am.rh637017 2010-03-25 00:30:38.000000000 +0100
-+++ dhcp-4.2.2/Makefile.am 2011-08-11 17:28:58.925897509 +0200
-@@ -21,7 +21,13 @@ EXTRA_DIST = RELNOTES LICENSE \
- util/bindvar.sh \
- bind/Makefile bind/bind.tar.gz bind/version.tmp
-
--SUBDIRS = bind includes tests common dst omapip client dhcpctl relay server
-+if BUNDLED_BIND
-+SUBDIRS = bind
-+else
-+SUBDIRS =
-+endif
-+
-+SUBDIRS += includes tests common dst omapip client dhcpctl relay server
-
- nobase_include_HEADERS = dhcpctl/dhcpctl.h
-
-diff -up dhcp-4.2.2/omapip/Makefile.am.rh637017 dhcp-4.2.2/omapip/Makefile.am
---- dhcp-4.2.2/omapip/Makefile.am.rh637017 2010-02-12 01:13:54.000000000 +0100
-+++ dhcp-4.2.2/omapip/Makefile.am 2011-08-11 17:28:58.939897149 +0200
-@@ -10,5 +10,5 @@ man_MANS = omapi.3
- EXTRA_DIST = $(man_MANS)
-
- svtest_SOURCES = test.c
--svtest_LDADD = libomapi.a ../bind/lib/libdns.a ../bind/lib/libisc.a
-+svtest_LDADD = libomapi.a $(BIND9_LIBDIR) -ldns-export -lisc-export
-
-diff -up dhcp-4.2.2/relay/Makefile.am.rh637017 dhcp-4.2.2/relay/Makefile.am
---- dhcp-4.2.2/relay/Makefile.am.rh637017 2009-10-28 05:12:30.000000000 +0100
-+++ dhcp-4.2.2/relay/Makefile.am 2011-08-11 17:28:58.940897123 +0200
-@@ -3,7 +3,7 @@ AM_CPPFLAGS = -DLOCALSTATEDIR='"@localst
- sbin_PROGRAMS = dhcrelay
- dhcrelay_SOURCES = dhcrelay.c
- dhcrelay_LDADD = ../common/libdhcp.a ../omapip/libomapi.a \
-- ../bind/lib/libdns.a ../bind/lib/libisc.a
-+ $(BIND9_LIBDIR) -ldns-export -lisc-export
- man_MANS = dhcrelay.8
- EXTRA_DIST = $(man_MANS)
-
-diff -up dhcp-4.2.2/server/Makefile.am.rh637017 dhcp-4.2.2/server/Makefile.am
---- dhcp-4.2.2/server/Makefile.am.rh637017 2010-03-24 22:49:47.000000000 +0100
-+++ dhcp-4.2.2/server/Makefile.am 2011-08-11 17:28:58.944897021 +0200
-@@ -8,8 +8,7 @@ dhcpd_SOURCES = dhcpd.c dhcp.c bootp.c c
-
- dhcpd_CFLAGS = $(LDAP_CFLAGS)
- dhcpd_LDADD = ../common/libdhcp.a ../omapip/libomapi.a \
-- ../dhcpctl/libdhcpctl.a ../bind/lib/libdns.a \
-- ../bind/lib/libisc.a
-+ ../dhcpctl/libdhcpctl.a $(BIND9_LIBDIR) -ldns-export -lisc-export
-
- man_MANS = dhcpd.8 dhcpd.conf.5 dhcpd.leases.5
- EXTRA_DIST = $(man_MANS)
+++ /dev/null
-diff -up dhcp-4.2.2/client/Makefile.am.sharedlib dhcp-4.2.2/client/Makefile.am
---- dhcp-4.2.2/client/Makefile.am.sharedlib 2011-09-09 16:35:56.000000000 +0200
-+++ dhcp-4.2.2/client/Makefile.am 2011-09-09 16:36:29.849007951 +0200
-@@ -4,7 +4,7 @@ dhclient_SOURCES = clparse.c dhclient.c
- scripts/bsdos scripts/freebsd scripts/linux scripts/macos \
- scripts/netbsd scripts/nextstep scripts/openbsd \
- scripts/solaris scripts/openwrt
--dhclient_LDADD = ../common/libdhcp.a ../omapip/libomapi.a \
-+dhclient_LDADD = ../common/libdhcp.a ../omapip/libomapi.la \
- $(BIND9_LIBDIR) -ldns-export -lisc-export $(CAPNG_LDADD)
- man_MANS = dhclient.8 dhclient-script.8 dhclient.conf.5 dhclient.leases.5
- EXTRA_DIST = $(man_MANS)
-diff -up dhcp-4.2.2/configure.ac.sharedlib dhcp-4.2.2/configure.ac
---- dhcp-4.2.2/configure.ac.sharedlib 2011-09-09 16:35:56.097000001 +0200
-+++ dhcp-4.2.2/configure.ac 2011-09-09 16:35:56.383000000 +0200
-@@ -30,7 +30,8 @@ fi
- # Use this to define _GNU_SOURCE to pull in the IPv6 Advanced Socket API.
- AC_USE_SYSTEM_EXTENSIONS
-
--AC_PROG_RANLIB
-+# Use libtool to simplify building of shared libraries
-+AC_PROG_LIBTOOL
- AC_CONFIG_HEADERS([includes/config.h])
-
- # we sometimes need to know byte order for building packets
-diff -up dhcp-4.2.2/dhcpctl/Makefile.am.sharedlib dhcp-4.2.2/dhcpctl/Makefile.am
---- dhcp-4.2.2/dhcpctl/Makefile.am.sharedlib 2011-09-09 16:35:55.459000001 +0200
-+++ dhcp-4.2.2/dhcpctl/Makefile.am 2011-09-09 16:35:56.384000000 +0200
-@@ -1,15 +1,15 @@
- bin_PROGRAMS = omshell
--lib_LIBRARIES = libdhcpctl.a
-+lib_LTLIBRARIES = libdhcpctl.la
- noinst_PROGRAMS = cltest
- man_MANS = omshell.1 dhcpctl.3
- EXTRA_DIST = $(man_MANS)
-
- omshell_SOURCES = omshell.c
--omshell_LDADD = libdhcpctl.a ../common/libdhcp.a ../omapip/libomapi.a \
-+omshell_LDADD = libdhcpctl.la ../common/libdhcp.a ../omapip/libomapi.la \
- $(BIND9_LIBDIR) -ldns-export -lisc-export
-
--libdhcpctl_a_SOURCES = dhcpctl.c callback.c remote.c
-+libdhcpctl_la_SOURCES = dhcpctl.c callback.c remote.c
-
- cltest_SOURCES = cltest.c
--cltest_LDADD = libdhcpctl.a ../common/libdhcp.a ../omapip/libomapi.a \
-+cltest_LDADD = libdhcpctl.la ../common/libdhcp.a ../omapip/libomapi.la \
- $(BIND9_LIBDIR) -ldns-export -lisc-export
-diff -up dhcp-4.2.2/dst/base64.c.sharedlib dhcp-4.2.2/dst/base64.c
---- dhcp-4.2.2/dst/base64.c.sharedlib 2009-11-20 02:49:01.000000000 +0100
-+++ dhcp-4.2.2/dst/base64.c 2011-09-09 16:35:56.385000000 +0200
-@@ -64,6 +64,7 @@ static const char rcsid[] = "$Id: base64
-
- #include <sys/socket.h>
-
-+#include "dst_internal.h"
- #include "cdefs.h"
- #include "osdep.h"
- #include "arpa/nameser.h"
-diff -up dhcp-4.2.2/dst/Makefile.am.sharedlib dhcp-4.2.2/dst/Makefile.am
---- dhcp-4.2.2/dst/Makefile.am.sharedlib 2007-05-29 18:32:10.000000000 +0200
-+++ dhcp-4.2.2/dst/Makefile.am 2011-09-09 16:35:56.386000000 +0200
-@@ -1,8 +1,8 @@
- AM_CPPFLAGS = -DMINIRES_LIB -DHMAC_MD5
-
--lib_LIBRARIES = libdst.a
-+lib_LTLIBRARIES = libdst.la
-
--libdst_a_SOURCES = dst_support.c dst_api.c hmac_link.c md5_dgst.c \
-+libdst_la_SOURCES = dst_support.c dst_api.c hmac_link.c md5_dgst.c \
- base64.c prandom.c
-
- EXTRA_DIST = dst_internal.h md5.h md5_locl.h
-diff -up dhcp-4.2.2/omapip/Makefile.am.sharedlib dhcp-4.2.2/omapip/Makefile.am
---- dhcp-4.2.2/omapip/Makefile.am.sharedlib 2011-09-09 16:35:55.000000000 +0200
-+++ dhcp-4.2.2/omapip/Makefile.am 2011-09-09 16:37:36.734000324 +0200
-@@ -1,7 +1,7 @@
--lib_LIBRARIES = libomapi.a
-+lib_LTLIBRARIES = libomapi.la
- noinst_PROGRAMS = svtest
-
--libomapi_a_SOURCES = protocol.c buffer.c alloc.c result.c connection.c \
-+libomapi_la_SOURCES = protocol.c buffer.c alloc.c result.c connection.c \
- errwarn.c listener.c dispatch.c generic.c support.c \
- handle.c message.c convert.c hash.c auth.c inet_addr.c \
- array.c trace.c toisc.c iscprint.c isclib.c
-@@ -10,5 +10,5 @@ man_MANS = omapi.3
- EXTRA_DIST = $(man_MANS)
-
- svtest_SOURCES = test.c
--svtest_LDADD = libomapi.a $(BIND9_LIBDIR) -ldns-export -lisc-export
-+svtest_LDADD = libomapi.la $(BIND9_LIBDIR) -ldns-export -lisc-export
-
-diff -up dhcp-4.2.2/relay/Makefile.am.sharedlib dhcp-4.2.2/relay/Makefile.am
---- dhcp-4.2.2/relay/Makefile.am.sharedlib 2011-09-09 16:35:56.000000000 +0200
-+++ dhcp-4.2.2/relay/Makefile.am 2011-09-09 16:37:57.058019749 +0200
-@@ -2,7 +2,7 @@ AM_CPPFLAGS = -DLOCALSTATEDIR='"@localst
-
- sbin_PROGRAMS = dhcrelay
- dhcrelay_SOURCES = dhcrelay.c
--dhcrelay_LDADD = ../common/libdhcp.a ../omapip/libomapi.a \
-+dhcrelay_LDADD = ../common/libdhcp.a ../omapip/libomapi.la \
- $(BIND9_LIBDIR) -ldns-export -lisc-export $(CAPNG_LDADD)
- man_MANS = dhcrelay.8
- EXTRA_DIST = $(man_MANS)
-diff -up dhcp-4.2.2/server/Makefile.am.sharedlib dhcp-4.2.2/server/Makefile.am
---- dhcp-4.2.2/server/Makefile.am.sharedlib 2011-09-09 16:35:56.000000000 +0200
-+++ dhcp-4.2.2/server/Makefile.am 2011-09-09 16:38:56.291004599 +0200
-@@ -7,8 +7,8 @@ dhcpd_SOURCES = dhcpd.c dhcp.c bootp.c c
- dhcpv6.c mdb6.c ldap.c ldap_casa.c
-
- dhcpd_CFLAGS = $(LDAP_CFLAGS)
--dhcpd_LDADD = ../common/libdhcp.a ../omapip/libomapi.a \
-- ../dhcpctl/libdhcpctl.a $(BIND9_LIBDIR) -ldns-export -lisc-export \
-+dhcpd_LDADD = ../common/libdhcp.a ../omapip/libomapi.la \
-+ ../dhcpctl/libdhcpctl.la $(BIND9_LIBDIR) -ldns-export -lisc-export \
- $(CAPNG_LDADD)
-
- man_MANS = dhcpd.8 dhcpd.conf.5 dhcpd.leases.5
--- /dev/null
+diff -up dhcp-4.3.0a1/common/parse.c.64-bit_lease_parse dhcp-4.3.0a1/common/parse.c
+--- dhcp-4.3.0a1/common/parse.c.64-bit_lease_parse 2013-12-11 01:25:12.000000000 +0100
++++ dhcp-4.3.0a1/common/parse.c 2013-12-19 15:45:25.990771814 +0100
+@@ -938,8 +938,8 @@ TIME
+ parse_date_core(cfile)
+ struct parse *cfile;
+ {
+- int guess;
+- int tzoff, year, mon, mday, hour, min, sec;
++ TIME guess;
++ long int tzoff, year, mon, mday, hour, min, sec;
+ const char *val;
+ enum dhcp_token token;
+ static int months[11] = { 31, 59, 90, 120, 151, 181,
+@@ -965,7 +965,7 @@ parse_date_core(cfile)
+ }
+
+ skip_token(&val, NULL, cfile); /* consume number */
+- guess = atoi(val);
++ guess = atol(val);
+
+ return((TIME)guess);
+ }
+@@ -993,7 +993,7 @@ parse_date_core(cfile)
+ somebody invents a time machine, I think we can safely disregard
+ it. This actually works around a stupid Y2K bug that was present
+ in a very early beta release of dhcpd. */
+- year = atoi(val);
++ year = atol(val);
+ if (year > 1900)
+ year -= 1900;
+
+@@ -1039,7 +1039,7 @@ parse_date_core(cfile)
+ return((TIME)0);
+ }
+ skip_token(&val, NULL, cfile); /* consume day of month */
+- mday = atoi(val);
++ mday = atol(val);
+
+ /* Hour... */
+ token = peek_token(&val, NULL, cfile);
+@@ -1050,7 +1050,7 @@ parse_date_core(cfile)
+ return((TIME)0);
+ }
+ skip_token(&val, NULL, cfile); /* consume hour */
+- hour = atoi(val);
++ hour = atol(val);
+
+ /* Colon separating hour from minute... */
+ token = peek_token(&val, NULL, cfile);
+@@ -1072,7 +1072,7 @@ parse_date_core(cfile)
+ return((TIME)0);
+ }
+ skip_token(&val, NULL, cfile); /* consume minute */
+- min = atoi(val);
++ min = atol(val);
+
+ /* Colon separating minute from second... */
+ token = peek_token(&val, NULL, cfile);
+@@ -1094,13 +1094,13 @@ parse_date_core(cfile)
+ return((TIME)0);
+ }
+ skip_token(&val, NULL, cfile); /* consume second */
+- sec = atoi(val);
++ sec = atol(val);
+
+ tzoff = 0;
+ token = peek_token(&val, NULL, cfile);
+ if (token == NUMBER) {
+ skip_token(&val, NULL, cfile); /* consume tzoff */
+- tzoff = atoi(val);
++ tzoff = atol(val);
+ } else if (token != SEMI) {
+ skip_token(&val, NULL, cfile);
+ parse_warn(cfile,
-diff -up dhcp-4.2.2b1/client/clparse.c.cloexec dhcp-4.2.2b1/client/clparse.c
---- dhcp-4.2.2b1/client/clparse.c.cloexec 2011-07-01 14:13:30.973887714 +0200
-+++ dhcp-4.2.2b1/client/clparse.c 2011-07-01 14:15:15.021580693 +0200
-@@ -246,7 +246,7 @@ int read_client_conf_file (const char *n
+diff -up dhcp-4.3.0a1/client/clparse.c.cloexec dhcp-4.3.0a1/client/clparse.c
+--- dhcp-4.3.0a1/client/clparse.c.cloexec 2013-12-19 15:34:41.638886256 +0100
++++ dhcp-4.3.0a1/client/clparse.c 2013-12-19 15:34:41.657885985 +0100
+@@ -253,7 +253,7 @@ int read_client_conf_file (const char *n
int token;
isc_result_t status;
return uerr2isc (errno);
cfile = NULL;
-@@ -283,7 +283,7 @@ void read_client_leases ()
+@@ -290,7 +290,7 @@ void read_client_leases ()
/* Open the lease file. If we can't open it, just return -
we can safely trust the server to remember our state. */
return;
cfile = NULL;
-diff -up dhcp-4.2.2b1/client/dhclient.c.cloexec dhcp-4.2.2b1/client/dhclient.c
---- dhcp-4.2.2b1/client/dhclient.c.cloexec 2011-07-01 14:13:30.970887717 +0200
-+++ dhcp-4.2.2b1/client/dhclient.c 2011-07-01 14:16:51.485930388 +0200
+diff -up dhcp-4.3.0a1/client/dhclient.c.cloexec dhcp-4.3.0a1/client/dhclient.c
+--- dhcp-4.3.0a1/client/dhclient.c.cloexec 2013-12-19 15:34:41.629886384 +0100
++++ dhcp-4.3.0a1/client/dhclient.c 2013-12-19 15:36:41.608180467 +0100
@@ -148,11 +148,11 @@ main(int argc, char **argv) {
/* Make sure that file descriptors 0 (stdin), 1, (stdout), and
2 (stderr) are open. To do this, we assume that when we
if (fd == 2)
log_perror = 0; /* No sense logging to /dev/null. */
else if (fd != -1)
-@@ -506,7 +506,7 @@ main(int argc, char **argv) {
+@@ -504,7 +504,7 @@ main(int argc, char **argv) {
+ long temp;
int e;
- oldpid = 0;
- if ((pidfd = fopen(path_dhclient_pid, "r")) != NULL) {
+ if ((pidfd = fopen(path_dhclient_pid, "re")) != NULL) {
e = fscanf(pidfd, "%ld\n", &temp);
oldpid = (pid_t)temp;
-@@ -548,7 +548,7 @@ main(int argc, char **argv) {
+@@ -554,7 +554,7 @@ main(int argc, char **argv) {
strncpy(new_path_dhclient_pid, path_dhclient_pid, pfx);
sprintf(new_path_dhclient_pid + pfx, "-%s.pid", ip->name);
e = fscanf(pidfd, "%ld\n", &temp);
oldpid = (pid_t)temp;
-@@ -573,7 +573,7 @@ main(int argc, char **argv) {
+@@ -579,7 +579,7 @@ main(int argc, char **argv) {
int dhc_running = 0;
char procfn[256] = "";
if ((fscanf(pidfp, "%ld", &temp)==1) && ((dhcpid=(pid_t)temp) > 0)) {
snprintf(procfn,256,"/proc/%u",dhcpid);
dhc_running = (access(procfn, F_OK) == 0);
-@@ -2995,7 +2995,7 @@ void rewrite_client_leases ()
+@@ -3077,7 +3077,7 @@ void rewrite_client_leases ()
if (leaseFile != NULL)
fclose (leaseFile);
if (leaseFile == NULL) {
log_error ("can't create %s: %m", path_dhclient_db);
return;
-@@ -3105,7 +3105,7 @@ write_duid(struct data_string *duid)
+@@ -3261,7 +3261,7 @@ write_duid(struct data_string *duid)
return DHCP_R_INVALIDARG;
if (leaseFile == NULL) { /* XXX? */
if (leaseFile == NULL) {
log_error("can't create %s: %m", path_dhclient_db);
return ISC_R_IOERROR;
-@@ -3285,7 +3285,7 @@ int write_client_lease (client, lease, r
+@@ -3441,7 +3441,7 @@ int write_client_lease (client, lease, r
return 1;
if (leaseFile == NULL) { /* XXX */
if (leaseFile == NULL) {
log_error ("can't create %s: %m", path_dhclient_db);
return 0;
-@@ -3772,9 +3772,9 @@ void go_daemon ()
- close(2);
+@@ -3952,9 +3952,9 @@ void go_daemon ()
+ (void) close(2);
/* Reopen them on /dev/null. */
-- open("/dev/null", O_RDWR);
-- open("/dev/null", O_RDWR);
-- open("/dev/null", O_RDWR);
-+ open("/dev/null", O_RDWR | O_CLOEXEC);
-+ open("/dev/null", O_RDWR | O_CLOEXEC);
-+ open("/dev/null", O_RDWR | O_CLOEXEC);
+- (void) open("/dev/null", O_RDWR);
+- (void) open("/dev/null", O_RDWR);
+- (void) open("/dev/null", O_RDWR);
++ (void) open("/dev/null", O_RDWR | O_CLOEXEC);
++ (void) open("/dev/null", O_RDWR | O_CLOEXEC);
++ (void) open("/dev/null", O_RDWR | O_CLOEXEC);
write_client_pid_file ();
-@@ -3791,14 +3791,14 @@ void write_client_pid_file ()
+@@ -3971,14 +3971,14 @@ void write_client_pid_file ()
return;
}
if (!pf) {
close(pfdesc);
log_error ("Can't fdopen %s: %m", path_dhclient_pid);
-diff -up dhcp-4.2.2b1/common/bpf.c.cloexec dhcp-4.2.2b1/common/bpf.c
---- dhcp-4.2.2b1/common/bpf.c.cloexec 2011-07-01 14:13:30.976887712 +0200
-+++ dhcp-4.2.2b1/common/bpf.c 2011-07-01 14:13:31.030887673 +0200
-@@ -94,7 +94,7 @@ int if_register_bpf (info)
+diff -up dhcp-4.3.0a1/common/bpf.c.cloexec dhcp-4.3.0a1/common/bpf.c
+--- dhcp-4.3.0a1/common/bpf.c.cloexec 2013-12-19 15:34:41.640886227 +0100
++++ dhcp-4.3.0a1/common/bpf.c 2013-12-19 15:34:41.661885928 +0100
+@@ -95,7 +95,7 @@ int if_register_bpf (info)
for (b = 0; 1; b++) {
/* %Audit% 31 bytes max. %2004.06.17,Safe% */
sprintf(filename, BPF_FORMAT, b);
if (sock < 0) {
if (errno == EBUSY) {
continue;
-diff -up dhcp-4.2.2b1/common/discover.c.cloexec dhcp-4.2.2b1/common/discover.c
---- dhcp-4.2.2b1/common/discover.c.cloexec 2011-06-27 18:18:20.000000000 +0200
-+++ dhcp-4.2.2b1/common/discover.c 2011-07-01 14:13:31.031887673 +0200
-@@ -421,7 +421,7 @@ begin_iface_scan(struct iface_conf_list
- int len;
- int i;
-
-- ifaces->fp = fopen("/proc/net/dev", "r");
-+ ifaces->fp = fopen("/proc/net/dev", "re");
- if (ifaces->fp == NULL) {
- log_error("Error opening '/proc/net/dev' to list interfaces");
- return 0;
-@@ -456,7 +456,7 @@ begin_iface_scan(struct iface_conf_list
-
- #ifdef DHCPv6
- if (local_family == AF_INET6) {
-- ifaces->fp6 = fopen("/proc/net/if_inet6", "r");
-+ ifaces->fp6 = fopen("/proc/net/if_inet6", "re");
- if (ifaces->fp6 == NULL) {
- log_error("Error opening '/proc/net/if_inet6' to "
- "list IPv6 interfaces; %m");
-diff -up dhcp-4.2.2b1/common/dlpi.c.cloexec dhcp-4.2.2b1/common/dlpi.c
---- dhcp-4.2.2b1/common/dlpi.c.cloexec 2011-07-01 14:13:30.977887712 +0200
-+++ dhcp-4.2.2b1/common/dlpi.c 2011-07-01 14:13:31.032887673 +0200
-@@ -806,7 +806,7 @@ dlpiopen(const char *ifname) {
+diff -up dhcp-4.3.0a1/common/dlpi.c.cloexec dhcp-4.3.0a1/common/dlpi.c
+--- dhcp-4.3.0a1/common/dlpi.c.cloexec 2013-12-19 15:34:41.641886213 +0100
++++ dhcp-4.3.0a1/common/dlpi.c 2013-12-19 15:34:41.662885914 +0100
+@@ -804,7 +804,7 @@ dlpiopen(const char *ifname) {
}
*dp = '\0';
}
/*
-diff -up dhcp-4.2.2b1/common/nit.c.cloexec dhcp-4.2.2b1/common/nit.c
---- dhcp-4.2.2b1/common/nit.c.cloexec 2011-07-01 14:13:30.978887712 +0200
-+++ dhcp-4.2.2b1/common/nit.c 2011-07-01 14:13:31.033887672 +0200
+diff -up dhcp-4.3.0a1/common/nit.c.cloexec dhcp-4.3.0a1/common/nit.c
+--- dhcp-4.3.0a1/common/nit.c.cloexec 2013-12-19 15:34:41.642886199 +0100
++++ dhcp-4.3.0a1/common/nit.c 2013-12-19 15:34:41.662885914 +0100
@@ -81,7 +81,7 @@ int if_register_nit (info)
struct strioctl sio;
if (sock < 0)
log_fatal ("Can't open NIT device for %s: %m", info -> name);
-diff -up dhcp-4.2.2b1/common/resolv.c.cloexec dhcp-4.2.2b1/common/resolv.c
---- dhcp-4.2.2b1/common/resolv.c.cloexec 2009-11-20 02:49:01.000000000 +0100
-+++ dhcp-4.2.2b1/common/resolv.c 2011-07-01 14:13:31.033887672 +0200
-@@ -49,7 +49,7 @@ void read_resolv_conf (parse_time)
+diff -up dhcp-4.3.0a1/common/resolv.c.cloexec dhcp-4.3.0a1/common/resolv.c
+--- dhcp-4.3.0a1/common/resolv.c.cloexec 2013-12-11 01:25:12.000000000 +0100
++++ dhcp-4.3.0a1/common/resolv.c 2013-12-19 15:34:41.663885900 +0100
+@@ -50,7 +50,7 @@ void read_resolv_conf (parse_time)
struct domain_search_list *dp, *dl, *nd;
isc_result_t status;
log_error ("Can't open %s: %m", path_resolv_conf);
return;
}
-diff -up dhcp-4.2.2b1/common/upf.c.cloexec dhcp-4.2.2b1/common/upf.c
---- dhcp-4.2.2b1/common/upf.c.cloexec 2011-07-01 14:13:30.979887712 +0200
-+++ dhcp-4.2.2b1/common/upf.c 2011-07-01 14:13:31.034887671 +0200
+diff -up dhcp-4.3.0a1/common/upf.c.cloexec dhcp-4.3.0a1/common/upf.c
+--- dhcp-4.3.0a1/common/upf.c.cloexec 2013-12-19 15:34:41.642886199 +0100
++++ dhcp-4.3.0a1/common/upf.c 2013-12-19 15:34:41.663885900 +0100
@@ -77,7 +77,7 @@ int if_register_upf (info)
/* %Audit% Cannot exceed 36 bytes. %2004.06.17,Safe% */
sprintf(filename, "/dev/pf/pfilt%d", b);
if (sock < 0) {
if (errno == EBUSY) {
continue;
-diff -up dhcp-4.2.2b1/dst/dst_api.c.cloexec dhcp-4.2.2b1/dst/dst_api.c
---- dhcp-4.2.2b1/dst/dst_api.c.cloexec 2009-10-29 01:46:48.000000000 +0100
-+++ dhcp-4.2.2b1/dst/dst_api.c 2011-07-01 14:13:31.035887670 +0200
-@@ -437,7 +437,7 @@ dst_s_write_private_key(const DST_KEY *k
- PRIVATE_KEY, PATH_MAX);
-
- /* Do not overwrite an existing file */
-- if ((fp = dst_s_fopen(file, "w", 0600)) != NULL) {
-+ if ((fp = dst_s_fopen(file, "we", 0600)) != NULL) {
- int nn;
- if ((nn = fwrite(encoded_block, 1, len, fp)) != len) {
- EREPORT(("dst_write_private_key(): Write failure on %s %d != %d errno=%d\n",
-@@ -494,7 +494,7 @@ dst_s_read_public_key(const char *in_nam
- * flags, proto, alg stored as decimal (or hex numbers FIXME).
- * (FIXME: handle parentheses for line continuation.)
- */
-- if ((fp = dst_s_fopen(name, "r", 0)) == NULL) {
-+ if ((fp = dst_s_fopen(name, "re", 0)) == NULL) {
- EREPORT(("dst_read_public_key(): Public Key not found %s\n",
- name));
- return (NULL);
-@@ -620,7 +620,7 @@ dst_s_write_public_key(const DST_KEY *ke
- return (0);
- }
- /* create public key file */
-- if ((fp = dst_s_fopen(filename, "w+", 0644)) == NULL) {
-+ if ((fp = dst_s_fopen(filename, "w+e", 0644)) == NULL) {
- EREPORT(("DST_write_public_key: open of file:%s failed (errno=%d)\n",
- filename, errno));
- return (0);
-@@ -854,7 +854,7 @@ dst_s_read_private_key_file(char *name,
- return (0);
- }
- /* first check if we can find the key file */
-- if ((fp = dst_s_fopen(filename, "r", 0)) == NULL) {
-+ if ((fp = dst_s_fopen(filename, "re", 0)) == NULL) {
- EREPORT(("dst_s_read_private_key_file: Could not open file %s in directory %s\n",
- filename, dst_path[0] ? dst_path :
- (char *) getcwd(NULL, PATH_MAX - 1)));
-diff -up dhcp-4.2.2b1/dst/prandom.c.cloexec dhcp-4.2.2b1/dst/prandom.c
---- dhcp-4.2.2b1/dst/prandom.c.cloexec 2009-11-20 02:49:01.000000000 +0100
-+++ dhcp-4.2.2b1/dst/prandom.c 2011-07-01 14:13:31.035887670 +0200
-@@ -269,7 +269,7 @@ get_dev_random(u_char *output, unsigned
-
- s = stat("/dev/random", &st);
- if (s == 0 && S_ISCHR(st.st_mode)) {
-- if ((fd = open("/dev/random", O_RDONLY | O_NONBLOCK)) != -1) {
-+ if ((fd = open("/dev/random", O_RDONLY | O_NONBLOCK | O_CLOEXEC)) != -1) {
- if ((n = read(fd, output, size)) < 0)
- n = 0;
- close(fd);
-@@ -480,7 +480,7 @@ digest_file(dst_work *work)
- work->file_digest = dst_free_key(work->file_digest);
- return (0);
- }
-- if ((fp = fopen(name, "r")) == NULL)
-+ if ((fp = fopen(name, "re")) == NULL)
- return (0);
- for (no = 0; (i = fread(buf, sizeof(*buf), sizeof(buf), fp)) > 0;
- no += i)
-diff -up dhcp-4.2.2b1/omapip/trace.c.cloexec dhcp-4.2.2b1/omapip/trace.c
---- dhcp-4.2.2b1/omapip/trace.c.cloexec 2010-05-27 02:34:57.000000000 +0200
-+++ dhcp-4.2.2b1/omapip/trace.c 2011-07-01 14:13:31.036887669 +0200
-@@ -141,10 +141,10 @@ isc_result_t trace_begin (const char *fi
+diff -up dhcp-4.3.0a1/omapip/trace.c.cloexec dhcp-4.3.0a1/omapip/trace.c
+--- dhcp-4.3.0a1/omapip/trace.c.cloexec 2013-12-11 01:01:03.000000000 +0100
++++ dhcp-4.3.0a1/omapip/trace.c 2013-12-19 15:34:41.663885900 +0100
+@@ -142,10 +142,10 @@ isc_result_t trace_begin (const char *fi
return DHCP_R_INVALIDARG;
}
0600);
}
-@@ -431,7 +431,7 @@ void trace_file_replay (const char *file
+@@ -433,7 +433,7 @@ void trace_file_replay (const char *file
isc_result_t result;
int len;
if (!traceinfile) {
log_error("Can't open tracefile %s: %m", filename);
return;
-diff -up dhcp-4.2.2b1/relay/dhcrelay.c.cloexec dhcp-4.2.2b1/relay/dhcrelay.c
---- dhcp-4.2.2b1/relay/dhcrelay.c.cloexec 2011-05-10 15:07:37.000000000 +0200
-+++ dhcp-4.2.2b1/relay/dhcrelay.c 2011-07-01 14:18:07.630209767 +0200
-@@ -183,11 +183,11 @@ main(int argc, char **argv) {
+diff -up dhcp-4.3.0a1/relay/dhcrelay.c.cloexec dhcp-4.3.0a1/relay/dhcrelay.c
+--- dhcp-4.3.0a1/relay/dhcrelay.c.cloexec 2013-12-13 22:26:21.000000000 +0100
++++ dhcp-4.3.0a1/relay/dhcrelay.c 2013-12-19 15:34:41.664885886 +0100
+@@ -193,11 +193,11 @@ main(int argc, char **argv) {
/* Make sure that file descriptors 0(stdin), 1,(stdout), and
2(stderr) are open. To do this, we assume that when we
open a file the lowest available file descriptor is used. */
if (fd == 2)
log_perror = 0; /* No sense logging to /dev/null. */
else if (fd != -1)
-@@ -540,13 +540,13 @@ main(int argc, char **argv) {
+@@ -564,13 +564,13 @@ main(int argc, char **argv) {
if (no_pid_file == ISC_FALSE) {
pfdesc = open(path_dhcrelay_pid,
if (!pf)
log_error("Can't fdopen %s: %m",
path_dhcrelay_pid);
-diff -up dhcp-4.2.2b1/server/confpars.c.cloexec dhcp-4.2.2b1/server/confpars.c
---- dhcp-4.2.2b1/server/confpars.c.cloexec 2010-10-14 00:34:45.000000000 +0200
-+++ dhcp-4.2.2b1/server/confpars.c 2011-07-01 14:13:31.039887666 +0200
-@@ -116,7 +116,7 @@ isc_result_t read_conf_file (const char
+diff -up dhcp-4.3.0a1/server/confpars.c.cloexec dhcp-4.3.0a1/server/confpars.c
+--- dhcp-4.3.0a1/server/confpars.c.cloexec 2013-12-11 01:25:12.000000000 +0100
++++ dhcp-4.3.0a1/server/confpars.c 2013-12-19 15:34:41.665885871 +0100
+@@ -117,7 +117,7 @@ isc_result_t read_conf_file (const char
}
#endif
if (leasep) {
log_error ("Can't open lease database %s: %m --",
path_dhcpd_db);
-diff -up dhcp-4.2.2b1/server/db.c.cloexec dhcp-4.2.2b1/server/db.c
---- dhcp-4.2.2b1/server/db.c.cloexec 2010-09-14 00:15:26.000000000 +0200
-+++ dhcp-4.2.2b1/server/db.c 2011-07-01 14:13:31.040887665 +0200
-@@ -1035,7 +1035,7 @@ void db_startup (testp)
+diff -up dhcp-4.3.0a1/server/db.c.cloexec dhcp-4.3.0a1/server/db.c
+--- dhcp-4.3.0a1/server/db.c.cloexec 2013-12-11 01:25:12.000000000 +0100
++++ dhcp-4.3.0a1/server/db.c 2013-12-19 15:34:41.666885857 +0100
+@@ -1081,7 +1081,7 @@ void db_startup (testp)
}
#endif
if (!testp) {
if (!db_file)
log_fatal ("Can't open %s for append.", path_dhcpd_db);
expire_all_pools ();
-@@ -1083,12 +1083,12 @@ int new_lease_file ()
+@@ -1129,12 +1129,12 @@ int new_lease_file ()
path_dhcpd_db, (int)t) >= sizeof newfname)
log_fatal("new_lease_file: lease file path too long");
log_error("Can't fdopen new lease file: %m");
close(db_fd);
goto fdfail;
-diff -up dhcp-4.2.2b1/server/dhcpd.c.cloexec dhcp-4.2.2b1/server/dhcpd.c
---- dhcp-4.2.2b1/server/dhcpd.c.cloexec 2011-04-21 16:08:15.000000000 +0200
-+++ dhcp-4.2.2b1/server/dhcpd.c 2011-07-01 14:19:40.354124505 +0200
-@@ -270,11 +270,11 @@ main(int argc, char **argv) {
+diff -up dhcp-4.3.0a1/server/dhcpd.c.cloexec dhcp-4.3.0a1/server/dhcpd.c
+--- dhcp-4.3.0a1/server/dhcpd.c.cloexec 2013-12-13 22:26:01.000000000 +0100
++++ dhcp-4.3.0a1/server/dhcpd.c 2013-12-19 15:37:17.258674472 +0100
+@@ -193,11 +193,11 @@ main(int argc, char **argv) {
/* Make sure that file descriptors 0 (stdin), 1, (stdout), and
2 (stderr) are open. To do this, we assume that when we
open a file the lowest available file descriptor is used. */
if (fd == 2)
log_perror = 0; /* No sense logging to /dev/null. */
else if (fd != -1)
-@@ -793,7 +793,7 @@ main(int argc, char **argv) {
+@@ -716,7 +716,7 @@ main(int argc, char **argv) {
*/
if (no_pid_file == ISC_FALSE) {
/*Read previous pid file. */
status = read(i, pbuf, (sizeof pbuf) - 1);
close (i);
if (status > 0) {
-@@ -812,7 +812,7 @@ main(int argc, char **argv) {
+@@ -735,7 +735,7 @@ main(int argc, char **argv) {
}
/* Write new pid file. */
if (i >= 0) {
sprintf(pbuf, "%d\n", (int) getpid());
IGNORE_RET (write(i, pbuf, strlen(pbuf)));
-@@ -840,9 +840,9 @@ main(int argc, char **argv) {
- close(2);
+@@ -763,9 +763,9 @@ main(int argc, char **argv) {
+ (void) close(2);
/* Reopen them on /dev/null. */
-- open("/dev/null", O_RDWR);
-- open("/dev/null", O_RDWR);
-- open("/dev/null", O_RDWR);
-+ open("/dev/null", O_RDWR | O_CLOEXEC);
-+ open("/dev/null", O_RDWR | O_CLOEXEC);
-+ open("/dev/null", O_RDWR | O_CLOEXEC);
+- (void) open("/dev/null", O_RDWR);
+- (void) open("/dev/null", O_RDWR);
+- (void) open("/dev/null", O_RDWR);
++ (void) open("/dev/null", O_RDWR | O_CLOEXEC);
++ (void) open("/dev/null", O_RDWR | O_CLOEXEC);
++ (void) open("/dev/null", O_RDWR | O_CLOEXEC);
log_perror = 0; /* No sense logging to /dev/null. */
IGNORE_RET (chdir("/"));
-diff -up dhcp-4.2.2b1/server/ldap.c.cloexec dhcp-4.2.2b1/server/ldap.c
---- dhcp-4.2.2b1/server/ldap.c.cloexec 2010-03-25 16:26:58.000000000 +0100
-+++ dhcp-4.2.2b1/server/ldap.c 2011-07-01 14:13:31.043887665 +0200
-@@ -685,7 +685,7 @@ ldap_start (void)
+diff -up dhcp-4.3.0a1/server/ldap.c.cloexec dhcp-4.3.0a1/server/ldap.c
+--- dhcp-4.3.0a1/server/ldap.c.cloexec 2013-12-11 01:25:12.000000000 +0100
++++ dhcp-4.3.0a1/server/ldap.c 2013-12-19 15:34:41.667885843 +0100
+@@ -684,7 +684,7 @@ ldap_start (void)
if (ldap_debug_file != NULL && ldap_debug_fd == -1)
{
-diff -up dhcp-4.2.0-P1/client/dhc6.c.PPP dhcp-4.2.0-P1/client/dhc6.c
---- dhcp-4.2.0-P1/client/dhc6.c.PPP 2010-11-05 10:47:37.000000000 +0100
-+++ dhcp-4.2.0-P1/client/dhc6.c 2010-11-09 15:54:12.000000000 +0100
-@@ -129,7 +129,7 @@ extern int stateless;
+diff -up dhcp-4.3.1b1/client/dhc6.c.mRfpsB dhcp-4.3.1b1/client/dhc6.c
+--- dhcp-4.3.1b1/client/dhc6.c.mRfpsB 2014-07-10 17:48:03.779424870 +0200
++++ dhcp-4.3.1b1/client/dhc6.c 2014-07-10 17:48:03.795424644 +0200
+@@ -5088,7 +5088,8 @@ make_client6_options(struct client_state
+ */
+ if ((oc = lookup_option(&dhcpv6_universe, *op,
+ D6O_CLIENTID)) == NULL) {
+- if (!option_cache(&oc, &default_duid, NULL, clientid_option,
++ if (default_duid.len == 0 ||
++ !option_cache(&oc, &default_duid, NULL, clientid_option,
+ MDL))
+ log_fatal("Failure assembling a DUID.");
+
+diff -up dhcp-4.3.1b1/client/dhclient.c.mRfpsB dhcp-4.3.1b1/client/dhclient.c
+--- dhcp-4.3.1b1/client/dhclient.c.mRfpsB 2014-07-10 17:39:25.853763858 +0200
++++ dhcp-4.3.1b1/client/dhclient.c 2014-07-10 17:49:49.882925843 +0200
+@@ -948,8 +948,8 @@ main(int argc, char **argv) {
+ if (default_duid.buffer != NULL)
+ data_string_forget(&default_duid, MDL);
+
+- form_duid(&default_duid, MDL);
+- write_duid(&default_duid);
++ if (form_duid(&default_duid, MDL) == ISC_R_SUCCESS)
++ write_duid(&default_duid);
+ }
+ }
+
+@@ -3267,7 +3267,7 @@ write_options(struct client_state *clien
* is not how it is intended. Upcoming rearchitecting the client should
* address this "one daemon model."
*/
form_duid(struct data_string *duid, const char *file, int line)
{
struct interface_info *ip;
-@@ -141,6 +141,15 @@ form_duid(struct data_string *duid, cons
+@@ -3280,6 +3280,15 @@ form_duid(struct data_string *duid, cons
if (ip == NULL)
log_fatal("Impossible condition at %s:%d.", MDL);
if ((ip->hw_address.hlen == 0) ||
(ip->hw_address.hlen > sizeof(ip->hw_address.hbuf)))
log_fatal("Impossible hardware address length at %s:%d.", MDL);
-@@ -176,6 +185,8 @@ form_duid(struct data_string *duid, cons
- memcpy(duid->buffer->data + 4, ip->hw_address.hbuf + 1,
- ip->hw_address.hlen - 1);
+@@ -3323,6 +3332,8 @@ form_duid(struct data_string *duid, cons
+ log_info("Created duid %s.", str);
+ dfree(str, MDL);
}
-+
++
+ return ISC_R_SUCCESS;
}
- /*
-@@ -5289,7 +5300,8 @@ make_client6_options(struct client_state
- */
- if ((oc = lookup_option(&dhcpv6_universe, *op,
- D6O_CLIENTID)) == NULL) {
-- if (!option_cache(&oc, &default_duid, NULL, clientid_option,
-+ if (default_duid.len == 0 ||
-+ !option_cache(&oc, &default_duid, NULL, clientid_option,
- MDL))
- log_fatal("Failure assembling a DUID.");
-
-diff -up dhcp-4.2.0-P1/client/dhclient.c.PPP dhcp-4.2.0-P1/client/dhclient.c
---- dhcp-4.2.0-P1/client/dhclient.c.PPP 2010-11-05 10:47:37.000000000 +0100
-+++ dhcp-4.2.0-P1/client/dhclient.c 2010-11-09 15:37:26.000000000 +0100
-@@ -911,8 +911,8 @@ main(int argc, char **argv) {
- if (default_duid.buffer != NULL)
- data_string_forget(&default_duid, MDL);
-
-- form_duid(&default_duid, MDL);
-- write_duid(&default_duid);
-+ if (form_duid(&default_duid, MDL) == ISC_R_SUCCESS)
-+ write_duid(&default_duid);
- }
-
- for (ip = interfaces ; ip != NULL ; ip = ip->next) {
-diff -up dhcp-4.2.0-P1/common/bpf.c.PPP dhcp-4.2.0-P1/common/bpf.c
---- dhcp-4.2.0-P1/common/bpf.c.PPP 2010-11-05 10:47:37.000000000 +0100
-+++ dhcp-4.2.0-P1/common/bpf.c 2010-11-09 15:42:42.000000000 +0100
-@@ -599,6 +599,22 @@ get_hw_addr(const char *name, struct har
+ /* Write the default DUID to the lease store. */
+diff -up dhcp-4.3.1b1/common/bpf.c.mRfpsB dhcp-4.3.1b1/common/bpf.c
+--- dhcp-4.3.1b1/common/bpf.c.mRfpsB 2014-07-10 17:39:25.797764653 +0200
++++ dhcp-4.3.1b1/common/bpf.c 2014-07-10 17:48:03.797424616 +0200
+@@ -600,6 +600,22 @@ get_hw_addr(const char *name, struct har
memcpy(&hw->hbuf[1], LLADDR(sa), sa->sdl_alen);
break;
#endif /* IFT_FDDI */
default:
log_fatal("Unsupported device type %d for \"%s\"",
sa->sdl_type, name);
-diff -up dhcp-4.2.0-P1/common/lpf.c.PPP dhcp-4.2.0-P1/common/lpf.c
---- dhcp-4.2.0-P1/common/lpf.c.PPP 2010-11-05 10:47:37.000000000 +0100
-+++ dhcp-4.2.0-P1/common/lpf.c 2010-11-09 15:45:40.000000000 +0100
-@@ -502,6 +502,22 @@ get_hw_addr(const char *name, struct har
+diff -up dhcp-4.3.1b1/common/lpf.c.mRfpsB dhcp-4.3.1b1/common/lpf.c
+--- dhcp-4.3.1b1/common/lpf.c.mRfpsB 2014-07-10 17:39:25.744765404 +0200
++++ dhcp-4.3.1b1/common/lpf.c 2014-07-10 17:48:03.797424616 +0200
+@@ -511,6 +511,22 @@ get_hw_addr(const char *name, struct har
hw->hbuf[0] = HTYPE_FDDI;
- memcpy(&hw->hbuf[1], sa->sa_data, 16);
+ memcpy(&hw->hbuf[1], sa->sa_data, 6);
break;
+#if defined(ARPHRD_PPP)
+ case ARPHRD_PPP:
default:
log_fatal("Unsupported device type %ld for \"%s\"",
(long int)sa->sa_family, name);
-diff -up dhcp-4.2.0-P1/includes/dhcpd.h.PPP dhcp-4.2.0-P1/includes/dhcpd.h
---- dhcp-4.2.0-P1/includes/dhcpd.h.PPP 2010-11-05 10:47:37.000000000 +0100
-+++ dhcp-4.2.0-P1/includes/dhcpd.h 2010-11-09 15:46:58.000000000 +0100
-@@ -2733,7 +2733,7 @@ void dhcpv4_client_assignments(void);
- void dhcpv6_client_assignments(void);
+diff -up dhcp-4.3.1b1/includes/dhcpd.h.mRfpsB dhcp-4.3.1b1/includes/dhcpd.h
+--- dhcp-4.3.1b1/includes/dhcpd.h.mRfpsB 2014-07-10 17:48:03.761425124 +0200
++++ dhcp-4.3.1b1/includes/dhcpd.h 2014-07-10 17:48:03.798424601 +0200
+@@ -2839,7 +2839,7 @@ void client_dns_remove(struct client_sta
- /* dhc6.c */
+ void dhcpv4_client_assignments(void);
+ void dhcpv6_client_assignments(void);
-void form_duid(struct data_string *duid, const char *file, int line);
+isc_result_t form_duid(struct data_string *duid, const char *file, int line);
+
+ /* dhc6.c */
void dhc6_lease_destroy(struct dhc6_lease **src, const char *file, int line);
- void start_init6(struct client_state *client);
- void start_info_request6(struct client_state *client);
-diff -up dhcp-4.2.0-P1/includes/dhcp.h.PPP dhcp-4.2.0-P1/includes/dhcp.h
---- dhcp-4.2.0-P1/includes/dhcp.h.PPP 2010-11-05 10:47:37.000000000 +0100
-+++ dhcp-4.2.0-P1/includes/dhcp.h 2010-11-09 15:48:53.000000000 +0100
-@@ -80,6 +80,8 @@ struct dhcp_packet {
- #define HTYPE_IEEE802 6 /* IEEE 802.2 Token Ring... */
- #define HTYPE_FDDI 8 /* FDDI... */
+diff -up dhcp-4.3.1b1/includes/dhcp.h.mRfpsB dhcp-4.3.1b1/includes/dhcp.h
+--- dhcp-4.3.1b1/includes/dhcp.h.mRfpsB 2014-07-10 17:48:03.761425124 +0200
++++ dhcp-4.3.1b1/includes/dhcp.h 2014-07-10 17:48:03.798424601 +0200
+@@ -81,6 +81,8 @@ struct dhcp_packet {
+ * is no standard for this so we
+ * just steal a type */
-+#define HTYPE_RESERVED 0 /* RFC 5494 */
++#define HTYPE_RESERVED 0 /* RFC 5494 */
+
/* Magic cookie validating dhcp options field (and bootp vendor
extensions field). */
#define DHCP_OPTIONS_COOKIE "\143\202\123\143"
-diff -up dhcp-4.2.0-P1/server/dhcpv6.c.PPP dhcp-4.2.0-P1/server/dhcpv6.c
---- dhcp-4.2.0-P1/server/dhcpv6.c.PPP 2010-11-05 10:47:37.000000000 +0100
-+++ dhcp-4.2.0-P1/server/dhcpv6.c 2010-11-09 15:50:17.000000000 +0100
-@@ -300,6 +300,9 @@ generate_new_server_duid(void) {
+diff -up dhcp-4.3.1b1/server/dhcpv6.c.mRfpsB dhcp-4.3.1b1/server/dhcpv6.c
+--- dhcp-4.3.1b1/server/dhcpv6.c.mRfpsB 2014-07-10 17:47:31.464881409 +0200
++++ dhcp-4.3.1b1/server/dhcpv6.c 2014-07-10 17:48:03.800424573 +0200
+@@ -330,6 +330,9 @@ generate_new_server_duid(void) {
if (p->hw_address.hlen > 0) {
break;
}
-diff -up dhcp-4.2.0/server/dhcpv6.c.UseMulticast dhcp-4.2.0/server/dhcpv6.c
---- dhcp-4.2.0/server/dhcpv6.c.UseMulticast 2010-06-01 19:30:00.000000000 +0200
-+++ dhcp-4.2.0/server/dhcpv6.c 2010-07-21 16:17:30.000000000 +0200
-@@ -346,6 +346,48 @@ generate_new_server_duid(void) {
+diff -up dhcp-4.3.1b1/server/dhcpv6.c.UseMulticast dhcp-4.3.1b1/server/dhcpv6.c
+--- dhcp-4.3.1b1/server/dhcpv6.c.UseMulticast 2014-07-02 19:58:40.000000000 +0200
++++ dhcp-4.3.1b1/server/dhcpv6.c 2014-07-10 18:20:03.066256219 +0200
+@@ -376,6 +376,48 @@ generate_new_server_duid(void) {
}
/*
+ }
+
+ execute_statements_in_scope(NULL, NULL, NULL, NULL, NULL,
-+ opt_state, &global_scope, root_group, NULL);
++ opt_state, &global_scope, root_group, NULL, NULL);
+
+ oc = lookup_option(&dhcpv6_universe, opt_state, D6O_UNICAST);
+ unicast_option_defined = (oc != NULL);
* Get the client identifier from the packet.
*/
isc_result_t
-@@ -1405,6 +1447,56 @@ lease_to_client(struct data_string *repl
- reply.shared->group);
+@@ -706,6 +748,12 @@ static const int required_opts[] = {
+ D6O_PREFERENCE,
+ 0
+ };
++static const int required_opts_NAA[] = {
++ D6O_CLIENTID,
++ D6O_SERVERID,
++ D6O_STATUS_CODE,
++ 0
++};
+ static const int required_opts_solicit[] = {
+ D6O_CLIENTID,
+ D6O_SERVERID,
+@@ -1587,6 +1635,56 @@ lease_to_client(struct data_string *repl
+ reply.shared->group, NULL);
}
+ /* reject unicast message, unless we set unicast option */
+ reply.opt_state, reply.packet,
+ required_opts_NAA,
+ NULL);
-+ } else if (no_resources_avail && (reply.ia_count != 0) &&
-+ (reply.packet->dhcpv6_msg_type == DHCPV6_SOLICIT))
++ }
++
/*
* RFC3315 section 17.2.2 (Solicit):
*
-@@ -1429,8 +1521,6 @@ lease_to_client(struct data_string *repl
- * the server.
- * Sends a Renew/Rebind if the IA is not in the Reply message.
+@@ -1619,6 +1717,7 @@ lease_to_client(struct data_string *repl
+ * Having stored the client's IA's, store any options that
+ * will fit in the remaining space.
*/
-- if (no_resources_avail && (reply.ia_count != 0) &&
-- (reply.packet->dhcpv6_msg_type == DHCPV6_SOLICIT))
- {
- /* Set the NoAddrsAvail status code. */
- if (!set_status_code(STATUS_NoAddrsAvail,
-@@ -4128,7 +4218,6 @@ dhcpv6_solicit(struct data_string *reply
++ else
+ reply.cursor += store_options6((char *)reply.buf.data + reply.cursor,
+ sizeof(reply.buf) - reply.cursor,
+ reply.opt_state, reply.packet,
+@@ -4748,7 +4847,6 @@ dhcpv6_solicit(struct data_string *reply
* Very similar to Solicit handling, except the server DUID is required.
*/
static void
dhcpv6_request(struct data_string *reply_ret, struct packet *packet) {
struct data_string client_id;
-@@ -4443,7 +4532,6 @@ exit:
+@@ -5078,7 +5176,6 @@ exit:
* except for the error code of when addresses don't match.
*/
static void
dhcpv6_renew(struct data_string *reply, struct packet *packet) {
struct data_string client_id;
-@@ -4688,18 +4776,60 @@ iterate_over_ia_na(struct data_string *r
+@@ -5322,18 +5419,60 @@ iterate_over_ia_na(struct data_string *r
goto exit;
}
/*
* Loop through the IA_NA reported by the client, and deal with
-@@ -4838,6 +4968,7 @@ iterate_over_ia_na(struct data_string *r
+@@ -5471,6 +5610,7 @@ iterate_over_ia_na(struct data_string *r
/*
* Return our reply to the caller.
*/
reply_ret->len = reply_ofs;
reply_ret->buffer = NULL;
if (!buffer_allocate(&reply_ret->buffer, reply_ofs, MDL)) {
-@@ -4883,7 +5014,6 @@ exit:
+@@ -5516,7 +5656,6 @@ exit:
* we still need to be aware of this possibility.
*/
/* TODO: IA_TA */
static void
dhcpv6_decline(struct data_string *reply, struct packet *packet) {
-@@ -5355,7 +5485,6 @@ exit:
+@@ -5986,7 +6125,6 @@ exit:
* Release means a client is done with the leases.
*/
--- /dev/null
+diff -up dhcp-4.3.0a1/common/dispatch.c.dracut dhcp-4.3.0a1/common/dispatch.c
+--- dhcp-4.3.0a1/common/dispatch.c.dracut 2013-12-11 01:25:12.000000000 +0100
++++ dhcp-4.3.0a1/common/dispatch.c 2013-12-19 15:39:50.350505860 +0100
+@@ -210,6 +210,10 @@ void add_timeout (when, where, what, ref
+ isc_interval_t interval;
+ isc_time_t expires;
+
++ if (when == NULL) {
++ return;
++ }
++
+ /* See if this timeout supersedes an existing timeout. */
+ t = (struct timeout *)0;
+ for (q = timeouts; q; q = q->next) {
-diff -up dhcp-4.2.2b1/client/dhclient.8.capability dhcp-4.2.2b1/client/dhclient.8
---- dhcp-4.2.2b1/client/dhclient.8.capability 2011-07-01 15:09:06.603784531 +0200
-+++ dhcp-4.2.2b1/client/dhclient.8 2011-07-01 15:09:06.663783913 +0200
-@@ -118,6 +118,9 @@ dhclient - Dynamic Host Configuration Pr
+diff -up dhcp-4.3.1b1/client/dhclient.8.zzftXp dhcp-4.3.1b1/client/dhclient.8
+--- dhcp-4.3.1b1/client/dhclient.8.zzftXp 2014-07-10 17:38:26.938599402 +0200
++++ dhcp-4.3.1b1/client/dhclient.8 2014-07-10 17:39:25.852763873 +0200
+@@ -128,6 +128,9 @@ dhclient - Dynamic Host Configuration Pr
.B -w
]
[
.B -B
]
[
-@@ -296,6 +299,32 @@ has been added or removed, so that the c
+@@ -304,6 +307,32 @@ has been added or removed, so that the c
address on that interface.
.TP
.BI \-B
Set the BOOTP broadcast flag in request packets so servers will always
broadcast replies.
-diff -up dhcp-4.2.2b1/client/dhclient.c.capability dhcp-4.2.2b1/client/dhclient.c
---- dhcp-4.2.2b1/client/dhclient.c.capability 2011-07-01 15:09:06.644784107 +0200
-+++ dhcp-4.2.2b1/client/dhclient.c 2011-07-01 15:09:06.664783903 +0200
+diff -up dhcp-4.3.1b1/client/dhclient.c.zzftXp dhcp-4.3.1b1/client/dhclient.c
+--- dhcp-4.3.1b1/client/dhclient.c.zzftXp 2014-07-10 17:39:25.797764653 +0200
++++ dhcp-4.3.1b1/client/dhclient.c 2014-07-10 17:39:25.853763858 +0200
@@ -39,6 +39,10 @@
#include <limits.h>
#include <dns/result.h>
/*
* Defined in stdio.h when _GNU_SOURCE is set, but we don't want to define
* that when building ISC code.
-@@ -141,6 +145,9 @@ main(int argc, char **argv) {
+@@ -143,6 +147,9 @@ main(int argc, char **argv) {
int timeout_arg = 0;
char *arg_conf = NULL;
int arg_conf_len = 0;
/* Initialize client globals. */
memset(&default_duid, 0, sizeof(default_duid));
-@@ -410,6 +417,10 @@ main(int argc, char **argv) {
+@@ -425,6 +432,10 @@ main(int argc, char **argv) {
}
dhclient_request_options = argv[i];
} else if (argv[i][0] == '-') {
usage();
} else if (interfaces_requested < 0) {
-@@ -458,6 +469,19 @@ main(int argc, char **argv) {
+@@ -473,6 +484,19 @@ main(int argc, char **argv) {
path_dhclient_script = s;
}
/* Set up the initial dhcp option universe. */
initialize_common_option_spaces();
-diff -up dhcp-4.2.2b1/client/dhclient-script.8.capability dhcp-4.2.2b1/client/dhclient-script.8
---- dhcp-4.2.2b1/client/dhclient-script.8.capability 2011-07-01 15:09:06.604784521 +0200
-+++ dhcp-4.2.2b1/client/dhclient-script.8 2011-07-01 15:09:06.666783883 +0200
-@@ -239,6 +239,16 @@ repeatedly initialized to the values pro
+diff -up dhcp-4.3.1b1/client/dhclient-script.8.zzftXp dhcp-4.3.1b1/client/dhclient-script.8
+--- dhcp-4.3.1b1/client/dhclient-script.8.zzftXp 2014-07-10 17:39:25.761765163 +0200
++++ dhcp-4.3.1b1/client/dhclient-script.8 2014-07-10 17:39:25.851763887 +0200
+@@ -243,6 +243,16 @@ repeatedly initialized to the values pro
the other. Assuming the information provided by both servers is
valid, this shouldn't cause any real problems, but it could be
confusing.
.SH SEE ALSO
dhclient(8), dhcpd(8), dhcrelay(8), dhclient.conf(5) and
dhclient.leases(5).
-diff -up dhcp-4.2.2b1/client/Makefile.am.capability dhcp-4.2.2b1/client/Makefile.am
---- dhcp-4.2.2b1/client/Makefile.am.capability 2011-07-01 15:09:06.526785327 +0200
-+++ dhcp-4.2.2b1/client/Makefile.am 2011-07-01 15:09:06.667783873 +0200
-@@ -5,7 +5,7 @@ dhclient_SOURCES = clparse.c dhclient.c
+diff -up dhcp-4.3.1b1/client/Makefile.am.zzftXp dhcp-4.3.1b1/client/Makefile.am
+--- dhcp-4.3.1b1/client/Makefile.am.zzftXp 2014-07-10 17:38:10.778828583 +0200
++++ dhcp-4.3.1b1/client/Makefile.am 2014-07-10 17:39:25.851763887 +0200
+@@ -10,7 +10,7 @@ dhclient_SOURCES = clparse.c dhclient.c
+ scripts/bsdos scripts/freebsd scripts/linux scripts/macos \
scripts/netbsd scripts/nextstep scripts/openbsd \
scripts/solaris scripts/openwrt
- dhclient_LDADD = ../common/libdhcp.a ../omapip/libomapi.a \
-- $(BIND9_LIBDIR) -ldns-export -lisc-export
-+ $(BIND9_LIBDIR) -ldns-export -lisc-export $(CAPNG_LDADD)
+-dhclient_LDADD = ../common/libdhcp.a ../omapip/libomapi.a \
++dhclient_LDADD = ../common/libdhcp.a ../omapip/libomapi.la $(CAPNG_LDADD) \
+ $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
man_MANS = dhclient.8 dhclient-script.8 dhclient.conf.5 dhclient.leases.5
EXTRA_DIST = $(man_MANS)
-
-diff -up dhcp-4.2.2b1/configure.ac.capability dhcp-4.2.2b1/configure.ac
---- dhcp-4.2.2b1/configure.ac.capability 2011-07-01 15:09:06.527785317 +0200
-+++ dhcp-4.2.2b1/configure.ac 2011-07-01 15:09:06.667783873 +0200
-@@ -449,6 +449,41 @@ AC_TRY_LINK(
+diff -up dhcp-4.3.1b1/configure.ac.zzftXp dhcp-4.3.1b1/configure.ac
+--- dhcp-4.3.1b1/configure.ac.zzftXp 2014-07-10 17:38:10.779828569 +0200
++++ dhcp-4.3.1b1/configure.ac 2014-07-10 17:39:25.854763844 +0200
+@@ -499,6 +499,41 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],
# Look for optional headers.
AC_CHECK_HEADERS(sys/socket.h net/if_dl.h net/if6.h regex.h)
# Solaris needs some libraries for functions
AC_SEARCH_LIBS(socket, [socket])
AC_SEARCH_LIBS(inet_ntoa, [nsl])
-diff -up dhcp-4.2.2b1/relay/dhcrelay.c.capability dhcp-4.2.2b1/relay/dhcrelay.c
---- dhcp-4.2.2b1/relay/dhcrelay.c.capability 2011-07-01 15:09:06.626784295 +0200
-+++ dhcp-4.2.2b1/relay/dhcrelay.c 2011-07-01 15:12:05.362223794 +0200
-@@ -36,6 +36,11 @@
- #include <syslog.h>
+diff -up dhcp-4.3.1b1/relay/dhcrelay.c.zzftXp dhcp-4.3.1b1/relay/dhcrelay.c
+--- dhcp-4.3.1b1/relay/dhcrelay.c.zzftXp 2014-07-10 17:39:25.799764624 +0200
++++ dhcp-4.3.1b1/relay/dhcrelay.c 2014-07-10 17:40:19.191007421 +0200
+@@ -31,6 +31,11 @@
+ #include <signal.h>
#include <sys/time.h>
+#ifdef HAVE_LIBCAP_NG
TIME default_lease_time = 43200; /* 12 hours... */
TIME max_lease_time = 86400; /* 24 hours... */
struct tree_cache *global_options[256];
-@@ -356,6 +361,10 @@ main(int argc, char **argv) {
- sl->next = upstreams;
- upstreams = sl;
+@@ -376,6 +381,10 @@ main(int argc, char **argv) {
+ usage();
+ dhcrelay_sub_id = argv[i];
#endif
+ } else if (!strcmp(argv[i], "-nc")) {
+#ifdef HAVE_LIBCAP_NG
} else if (!strcmp(argv[i], "-pf")) {
if (++i == argc)
usage();
-@@ -426,6 +435,17 @@ main(int argc, char **argv) {
+@@ -446,6 +455,17 @@ main(int argc, char **argv) {
#endif
}
if (!quiet) {
log_info("%s %s", message, PACKAGE_VERSION);
log_info(copyright);
-@@ -573,6 +593,15 @@ main(int argc, char **argv) {
- dhcpv6_packet_handler = do_packet6;
+@@ -598,6 +618,15 @@ main(int argc, char **argv) {
+ signal(SIGTERM, dhcp_signal_handler); /* kill */
#endif
+#ifdef HAVE_LIBCAP_NG
/* Start dispatching packets and timeouts... */
dispatch();
-diff -up dhcp-4.2.2b1/relay/Makefile.am.capability dhcp-4.2.2b1/relay/Makefile.am
---- dhcp-4.2.2b1/relay/Makefile.am.capability 2011-07-01 15:09:06.546785121 +0200
-+++ dhcp-4.2.2b1/relay/Makefile.am 2011-07-01 15:09:06.670783841 +0200
-@@ -3,7 +3,7 @@ AM_CPPFLAGS = -DLOCALSTATEDIR='"@localst
+diff -up dhcp-4.3.1b1/relay/Makefile.am.zzftXp dhcp-4.3.1b1/relay/Makefile.am
+--- dhcp-4.3.1b1/relay/Makefile.am.zzftXp 2014-07-10 17:38:10.780828554 +0200
++++ dhcp-4.3.1b1/relay/Makefile.am 2014-07-10 17:39:25.854763844 +0200
+@@ -2,7 +2,7 @@ AM_CPPFLAGS = -DLOCALSTATEDIR='"@localst
+
sbin_PROGRAMS = dhcrelay
dhcrelay_SOURCES = dhcrelay.c
- dhcrelay_LDADD = ../common/libdhcp.a ../omapip/libomapi.a \
-- $(BIND9_LIBDIR) -ldns-export -lisc-export
-+ $(BIND9_LIBDIR) -ldns-export -lisc-export $(CAPNG_LDADD)
+-dhcrelay_LDADD = ../common/libdhcp.a ../omapip/libomapi.a \
++dhcrelay_LDADD = ../common/libdhcp.a ../omapip/libomapi.la $(CAPNG_LDADD) \
+ $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
man_MANS = dhcrelay.8
EXTRA_DIST = $(man_MANS)
-
-diff -up dhcp-4.2.2b1/server/dhcpd.c.capability dhcp-4.2.2b1/server/dhcpd.c
---- dhcp-4.2.2b1/server/dhcpd.c.capability 2011-07-01 15:09:06.636784192 +0200
-+++ dhcp-4.2.2b1/server/dhcpd.c 2011-07-01 15:09:06.670783841 +0200
-@@ -58,6 +58,11 @@ static const char url [] =
- # undef group
- #endif /* PARANOIA */
-
-+#ifdef HAVE_LIBCAP_NG
-+# include <cap-ng.h>
-+ int keep_capabilities = 0;
-+#endif
-+
- static void usage(void);
-
- struct iaddr server_identifier;
-@@ -403,6 +408,10 @@ main(int argc, char **argv) {
- traceinfile = argv [i];
- trace_replay_init ();
- #endif /* TRACING */
-+ } else if (!strcmp(argv[i], "-nc")) {
-+#ifdef HAVE_LIBCAP_NG
-+ keep_capabilities = 1;
-+#endif
- } else if (argv [i][0] == '-') {
- usage ();
- } else {
-@@ -459,6 +468,17 @@ main(int argc, char **argv) {
- }
- #endif /* DHCPv6 */
-
-+#ifdef HAVE_LIBCAP_NG
-+ /* Drop capabilities */
-+ if (!keep_capabilities) {
-+ capng_clear(CAPNG_SELECT_BOTH);
-+ capng_updatev(CAPNG_ADD, CAPNG_EFFECTIVE|CAPNG_PERMITTED,
-+ CAP_NET_RAW, CAP_NET_BIND_SERVICE, CAP_SYS_CHROOT, CAP_SETUID, CAP_SETGID, -1);
-+ capng_apply(CAPNG_SELECT_BOTH);
-+ log_info ("Dropped all unnecessary capabilities.");
-+ }
-+#endif
-+
- /*
- * convert relative path names to absolute, for files that need
- * to be reopened after chdir() has been called
-@@ -859,6 +879,15 @@ main(int argc, char **argv) {
- omapi_set_int_value ((omapi_object_t *)dhcp_control_object,
- (omapi_object_t *)0, "state", server_running);
-
-+#ifdef HAVE_LIBCAP_NG
-+ /* Drop all capabilities */
-+ if (!keep_capabilities) {
-+ capng_clear(CAPNG_SELECT_BOTH);
-+ capng_apply(CAPNG_SELECT_BOTH);
-+ log_info ("Dropped all capabilities.");
-+ }
-+#endif
-+
- /* Receive packets and dispatch them... */
- dispatch ();
-
-diff -up dhcp-4.2.2b1/server/Makefile.am.capability dhcp-4.2.2b1/server/Makefile.am
---- dhcp-4.2.2b1/server/Makefile.am.capability 2011-07-01 15:09:06.546785121 +0200
-+++ dhcp-4.2.2b1/server/Makefile.am 2011-07-01 15:09:06.671783830 +0200
-@@ -8,7 +8,8 @@ dhcpd_SOURCES = dhcpd.c dhcp.c bootp.c c
-
- dhcpd_CFLAGS = $(LDAP_CFLAGS)
- dhcpd_LDADD = ../common/libdhcp.a ../omapip/libomapi.a \
-- ../dhcpctl/libdhcpctl.a $(BIND9_LIBDIR) -ldns-export -lisc-export
-+ ../dhcpctl/libdhcpctl.a $(BIND9_LIBDIR) -ldns-export -lisc-export \
-+ $(CAPNG_LDADD)
-
- man_MANS = dhcpd.8 dhcpd.conf.5 dhcpd.leases.5
- EXTRA_DIST = $(man_MANS)
-diff -up dhcp-4.2.0/client/clparse.c.requested dhcp-4.2.0/client/clparse.c
---- dhcp-4.2.0/client/clparse.c.requested 2010-07-21 13:29:05.000000000 +0200
-+++ dhcp-4.2.0/client/clparse.c 2010-07-21 13:50:29.000000000 +0200
+diff -up dhcp-4.3.0a1/client/clparse.c.requested dhcp-4.3.0a1/client/clparse.c
+--- dhcp-4.3.0a1/client/clparse.c.requested 2013-12-19 15:13:27.276631307 +0100
++++ dhcp-4.3.0a1/client/clparse.c 2013-12-19 15:13:27.313630789 +0100
@@ -37,7 +37,7 @@
struct client_config top_level_config;
struct option *default_requested_options[NUM_DEFAULT_REQUESTED_OPTS + 1];
static void parse_client_default_duid(struct parse *cfile);
-@@ -111,6 +111,31 @@ isc_result_t read_client_conf ()
+@@ -119,6 +119,31 @@ isc_result_t read_client_conf ()
option_code_hash_lookup(&default_requested_options[8],
dhcpv6_universe.code_hash, &code, 0, MDL);
-diff -up dhcp-4.2.0/client/dhclient.c.backoff dhcp-4.2.0/client/dhclient.c
---- dhcp-4.2.0/client/dhclient.c.backoff 2010-07-21 13:37:03.000000000 +0200
-+++ dhcp-4.2.0/client/dhclient.c 2010-07-21 13:38:31.000000000 +0200
-@@ -1208,6 +1208,8 @@ void state_init (cpp)
+diff -up dhcp-4.3.1b1/client/dhclient.c.JwFUZj dhcp-4.3.1b1/client/dhclient.c
+--- dhcp-4.3.1b1/client/dhclient.c.JwFUZj 2014-07-10 17:38:50.511265091 +0200
++++ dhcp-4.3.1b1/client/dhclient.c 2014-07-10 17:39:16.164901267 +0200
+@@ -1281,6 +1281,8 @@ void state_init (cpp)
void *cpp;
{
struct client_state *client = cpp;
ASSERT_STATE(state, S_INIT);
-@@ -1220,9 +1222,18 @@ void state_init (cpp)
+@@ -1293,9 +1295,18 @@ void state_init (cpp)
client -> first_sending = cur_time;
client -> interval = client -> config -> initial_interval;
}
/*
-@@ -1501,6 +1512,7 @@ void bind_lease (client)
- send_decline (client);
- destroy_client_lease (client -> new);
- client -> new = (struct client_lease *)0;
-+ client -> state = S_DECLINED;
- state_init (client);
- return;
- }
-@@ -3711,6 +3723,7 @@ void client_location_changed ()
+@@ -1592,6 +1603,7 @@ void bind_lease (client)
+ "try (declined). Exiting.");
+ exit(2);
+ } else {
++ client -> state = S_DECLINED;
+ state_init(client);
+ return;
+ }
+@@ -4059,6 +4071,7 @@ void client_location_changed ()
case S_INIT:
case S_REBINDING:
case S_STOPPED:
break;
}
client -> state = S_INIT;
-diff -up dhcp-4.2.0/includes/dhcpd.h.backoff dhcp-4.2.0/includes/dhcpd.h
---- dhcp-4.2.0/includes/dhcpd.h.backoff 2010-07-21 13:29:05.000000000 +0200
-+++ dhcp-4.2.0/includes/dhcpd.h 2010-07-21 13:38:31.000000000 +0200
-@@ -1056,7 +1056,8 @@ enum dhcp_state {
+diff -up dhcp-4.3.1b1/includes/dhcpd.h.JwFUZj dhcp-4.3.1b1/includes/dhcpd.h
+--- dhcp-4.3.1b1/includes/dhcpd.h.JwFUZj 2014-07-10 17:38:26.941599360 +0200
++++ dhcp-4.3.1b1/includes/dhcpd.h 2014-07-10 17:38:50.526264878 +0200
+@@ -1087,7 +1087,8 @@ enum dhcp_state {
S_BOUND = 5,
S_RENEWING = 6,
S_REBINDING = 7,
-diff -up dhcp-4.2.2b1/client/clparse.c.options dhcp-4.2.2b1/client/clparse.c
---- dhcp-4.2.2b1/client/clparse.c.options 2011-04-21 16:08:14.000000000 +0200
-+++ dhcp-4.2.2b1/client/clparse.c 2011-07-01 13:51:52.935755570 +0200
-@@ -146,6 +146,7 @@ isc_result_t read_client_conf ()
+diff -up dhcp-4.3.1b1/client/clparse.c.fLPqYB dhcp-4.3.1b1/client/clparse.c
+--- dhcp-4.3.1b1/client/clparse.c.fLPqYB 2014-07-02 19:58:38.000000000 +0200
++++ dhcp-4.3.1b1/client/clparse.c 2014-07-10 17:38:26.938599402 +0200
+@@ -148,6 +148,7 @@ isc_result_t read_client_conf ()
/* Requested lease time, used by DHCPv6 (DHCPv4 uses the option cache)
*/
top_level_config.requested_lease = 7200;
group_allocate (&top_level_config.on_receipt, MDL);
if (!top_level_config.on_receipt)
-@@ -313,7 +314,8 @@ void read_client_leases ()
+@@ -353,7 +354,8 @@ void read_client_leases ()
interface-declaration |
LEASE client-lease-statement |
ALIAS client-lease-statement |
void parse_client_statement (cfile, ip, config)
struct parse *cfile;
-@@ -732,6 +734,12 @@ void parse_client_statement (cfile, ip,
+@@ -771,6 +773,12 @@ void parse_client_statement (cfile, ip,
parse_reject_statement (cfile, config);
return;
default:
lose = 0;
stmt = (struct executable_statement *)0;
-diff -up dhcp-4.2.2b1/client/dhclient.c.options dhcp-4.2.2b1/client/dhclient.c
---- dhcp-4.2.2b1/client/dhclient.c.options 2011-05-11 16:20:59.000000000 +0200
-+++ dhcp-4.2.2b1/client/dhclient.c 2011-07-01 13:51:52.936755545 +0200
+diff -up dhcp-4.3.1b1/client/dhclient.8.fLPqYB dhcp-4.3.1b1/client/dhclient.8
+--- dhcp-4.3.1b1/client/dhclient.8.fLPqYB 2014-07-02 19:58:38.000000000 +0200
++++ dhcp-4.3.1b1/client/dhclient.8 2014-07-10 17:38:26.938599402 +0200
+@@ -128,6 +128,33 @@ dhclient - Dynamic Host Configuration Pr
+ .B -w
+ ]
+ [
++.B -B
++]
++[
++.B -C
++.I dhcp-client-identifier
++]
++[
++.B -H
++.I host-name
++]
++[
++.B -F
++.I fqdn.fqdn
++]
++[
++.B -V
++.I vendor-class-identifier
++]
++[
++.B -R
++.I request-option-list
++]
++[
++.B -timeout
++.I timeout
++]
++[
+ .B -v
+ ]
+ [
+@@ -275,6 +302,69 @@ not to exit when it doesn't find any suc
+ program can then be used to notify the client when a network interface
+ has been added or removed, so that the client can attempt to configure an IP
+ address on that interface.
++
++.TP
++.BI \-B
++Set the BOOTP broadcast flag in request packets so servers will always
++broadcast replies.
++
++.TP
++.BI \-C\ <dhcp-client-identifier>
++Specify the dhcp-client-identifier option to send to the DHCP server.
++
++.TP
++.BI \-H\ <host-name>
++Specify the host-name option to send to the DHCP server. The host-name
++string only contains the client's hostname prefix, to which the server will
++append the ddns-domainname or domain-name options, if any, to derive the
++fully qualified domain name of the client. The
++.B -H
++option cannot be used with the
++.B -F
++option.
++
++.TP
++.BI \-F\ <fqdn.fqdn>
++Specify the fqdn.fqdn option to send to the DHCP server. This option cannot
++be used with the
++.B -H
++option. The fqdn.fqdn option must specify the complete domain name of the
++client host, which the server may use for dynamic DNS updates.
++
++.TP
++.BI \-V\ <vendor-class-identifier>
++Specify the vendor-class-identifier option to send to the DHCP server.
++
++.TP
++.BI \-R\ <option>[,<option>...]
++Specify the list of options the client is to request from the server. The
++option list must be a single string consisting of option names separated
++by at least one command and optional space characters. The default option
++list is:
++
++.BR
++ subnet-mask, broadcast-address, time-offset, routers,
++.BR
++ domain-search, domain-name, domain-name-servers, host-name,
++.BR
++ nis-domain, nis-servers, ntp-servers, interface-mtu
++
++.TP
++.B -R
++option does not append options to the default request, it overrides the
++default request list. Keep this in mind if you want to request an
++additional option besides the default request list. You will have to
++specify all option names for the
++.B -R
++parameter.
++
++.TP
++.BI \-timeout\ <timeout>
++Specify the time after which
++.B dhclient
++will decide that no DHCP servers can be contacted when no responses have been
++received.
++
+ .TP
+ .BI \-n
+ Do not configure any interfaces. This is most likely to be useful in
+diff -up dhcp-4.3.1b1/client/dhclient.c.fLPqYB dhcp-4.3.1b1/client/dhclient.c
+--- dhcp-4.3.1b1/client/dhclient.c.fLPqYB 2014-07-02 19:58:38.000000000 +0200
++++ dhcp-4.3.1b1/client/dhclient.c 2014-07-10 17:38:44.520350055 +0200
@@ -39,6 +39,12 @@
#include <limits.h>
#include <dns/result.h>
TIME default_lease_time = 43200; /* 12 hours... */
TIME max_lease_time = 86400; /* 24 hours... */
-@@ -87,6 +93,9 @@ int wanted_ia_na = -1; /* the absolute
+@@ -88,6 +94,9 @@ int wanted_ia_na = -1; /* the absolute
int wanted_ia_ta = 0;
int wanted_ia_pd = 0;
char *mockup_relay = NULL;
+int bootp_broadcast_always = 0;
+
-+extern u_int32_t default_requested_options[];
++extern struct option *default_requested_options[];
void run_stateless(int exit_mode);
-@@ -123,6 +132,15 @@ main(int argc, char **argv) {
+@@ -125,6 +134,15 @@ main(int argc, char **argv) {
int local_family_set = 0;
#endif /* DHCPv6 */
char *s;
/* Initialize client globals. */
memset(&default_duid, 0, sizeof(default_duid));
-@@ -310,6 +328,88 @@ main(int argc, char **argv) {
- } else if (!strcmp(argv[i], "--version")) {
- log_info("isc-dhclient-%s", PACKAGE_VERSION);
+@@ -325,6 +343,88 @@ main(int argc, char **argv) {
+ strlen(PACKAGE_VERSION)));
+ IGNORE_RET(write(STDERR_FILENO, "\n", 1));
exit(0);
-+ } else if (!strcmp(argv[i], "-I")) {
++ } else if (!strcmp(argv[i], "-C")) {
+ if ((++i == argc) || (argv[i] == NULL) || (*(argv[i])=='\0')) {
+ usage();
+ exit(1);
+ }
+
+ if (strlen(argv[i]) >= DHCP_MAX_OPTION_LEN) {
-+ log_error("-I option dhcp-client-identifier string \"%s\" is too long - maximum length is: %d", argv[i], DHCP_MAX_OPTION_LEN-1);
++ log_error("-C option dhcp-client-identifier string \"%s\" is too long - maximum length is: %d", argv[i], DHCP_MAX_OPTION_LEN-1);
+ exit(1);
+ }
+
+ }
+
+ if ((timeout_arg = atoi(argv[i])) <= 0) {
-+ log_error("-T timeout option must be > 0 - bad value: %s",argv[i]);
++ log_error("timeout option must be > 0 - bad value: %s",argv[i]);
+ exit(1);
+ }
+ } else if (!strcmp(argv[i], "-V")) {
} else if (argv[i][0] == '-') {
usage();
} else if (interfaces_requested < 0) {
-@@ -484,6 +584,166 @@ main(int argc, char **argv) {
+@@ -507,6 +607,156 @@ main(int argc, char **argv) {
/* Parse the dhclient.conf file. */
read_client_conf();
+ arg_conf_len = asprintf(&arg_conf, "send dhcp-client-identifier \"%s\";", dhcp_client_identifier_arg);
+
+ if ((arg_conf == 0) || (arg_conf_len <= 0))
-+ log_fatal("Unable to send -I option dhcp-client-identifier");
++ log_fatal("Unable to send -C option dhcp-client-identifier");
+ }
+
+ if ((dhcp_host_name_arg != NULL) && (*dhcp_host_name_arg != '\0')) {
+ if (arg_conf_len == 0)
+ if ((arg_conf_len = strlen(arg_conf)) == 0)
+ /* huh ? cannot happen ! */
-+ log_fatal("Unable to process -I/-H/-F/-timeout/-V/-R configuration arguments");
++ log_fatal("Unable to process -C/-H/-F/-timeout/-V/-R configuration arguments");
+
+ /* parse the extra dhclient.conf configuration arguments
+ * into top level config: */
+ const char *val = NULL;
+ int token;
+
-+ status = new_parse(&cfile, -1, arg_conf, arg_conf_len, "extra dhclient -I/-H/-F/-timeout/-V/-R configuration arguments", 0);
++ status = new_parse(&cfile, -1, arg_conf, arg_conf_len, "extra dhclient -C/-H/-F/-timeout/-V/-R configuration arguments", 0);
+
+ if ((status != ISC_R_SUCCESS) || (cfile -> warnings_occurred))
-+ log_fatal("Cannot parse -I/-H/-F/-timeout/-V/-R configuration arguments !");
++ log_fatal("Cannot parse -C/-H/-F/-timeout/-V/-R configuration arguments !");
+ /* more detailed parse failures will be logged */
+
+ do {
+ } while (1);
+
+ if (cfile -> warnings_occurred)
-+ log_fatal("Cannot parse -I/-H/-F/-timeout/-V/-R configuration arguments !");
++ log_fatal("Cannot parse -C/-H/-F/-timeout/-V/-R configuration arguments !");
+ end_parse(&cfile);
+
+ if (timeout_arg) {
+ /* we just set the toplevel timeout, but per-client
-+ * timeouts may still be at defaults. Also, it makes no
-+ * sense having the reboot_timeout or backoff_cutoff
-+ * greater than the timeout:
++ * timeouts may still be at defaults.
+ */
-+ if ((top_level_config.backoff_cutoff == 15) && (top_level_config.backoff_cutoff > (timeout_arg / 2)))
-+ top_level_config.backoff_cutoff = (((unsigned long)(timeout_arg / 2)) == 0) ? timeout_arg : (unsigned long)(timeout_arg / 2);
-+
+ for (ip=interfaces; ip; ip = ip->next) {
+ if (ip->client->config->timeout == 60)
+ ip->client->config->timeout = timeout_arg;
-+
-+ if ((ip->client->config->reboot_timeout == 10) && (ip->client->config->reboot_timeout > ip->client->config->timeout))
-+ ip->client->config->reboot_timeout = ip->client->config->timeout;
-+ if ((ip->client->config->backoff_cutoff == 15) && (ip->client->config->backoff_cutoff > top_level_config.backoff_cutoff))
-+ ip->client->config->backoff_cutoff = top_level_config.backoff_cutoff;
+ }
+ }
+
/* Parse the lease database. */
read_client_leases();
-@@ -2397,7 +2657,8 @@ void make_discover (client, lease)
+@@ -756,6 +1006,10 @@ static void usage()
+ " [-s server-addr] [-cf config-file]\n"
+ " [-df duid-file] [-lf lease-file]\n"
+ " [-pf pid-file] [--no-pid] [-e VAR=val]\n"
++ " [-C <dhcp-client-identifier>] [-B]\n"
++ " [-H <host-name> | -F <fqdn.fqdn>] [-timeout <timeout>]\n"
++ " [-V <vendor-class-identifier>]\n"
++ " [-R <request option list>]\n"
+ " [-sf script-file] [interface]");
+ }
+
+@@ -2531,7 +2785,8 @@ void make_discover (client, lease)
client -> packet.xid = random ();
client -> packet.secs = 0; /* filled in by send_discover. */
client -> packet.flags = 0;
else
client -> packet.flags = htons (BOOTP_BROADCAST);
-@@ -2481,7 +2742,9 @@ void make_request (client, lease)
+@@ -2615,7 +2870,9 @@ void make_request (client, lease)
} else {
memset (&client -> packet.ciaddr, 0,
sizeof client -> packet.ciaddr);
client -> packet.flags = 0;
else
client -> packet.flags = htons (BOOTP_BROADCAST);
-@@ -2543,7 +2806,8 @@ void make_decline (client, lease)
+@@ -2677,7 +2934,8 @@ void make_decline (client, lease)
client -> packet.hops = 0;
client -> packet.xid = client -> xid;
client -> packet.secs = 0; /* Filled in by send_request. */
client -> packet.flags = 0;
else
client -> packet.flags = htons (BOOTP_BROADCAST);
-diff -up dhcp-4.2.2b1/common/conflex.c.options dhcp-4.2.2b1/common/conflex.c
---- dhcp-4.2.2b1/common/conflex.c.options 2011-05-11 16:20:59.000000000 +0200
-+++ dhcp-4.2.2b1/common/conflex.c 2011-07-01 13:51:52.938755494 +0200
-@@ -808,6 +808,8 @@ intern(char *atom, enum dhcp_token dfv)
+diff -up dhcp-4.3.1b1/common/conflex.c.fLPqYB dhcp-4.3.1b1/common/conflex.c
+--- dhcp-4.3.1b1/common/conflex.c.fLPqYB 2014-07-02 19:58:38.000000000 +0200
++++ dhcp-4.3.1b1/common/conflex.c 2014-07-10 17:38:26.940599374 +0200
+@@ -811,6 +811,8 @@ intern(char *atom, enum dhcp_token dfv)
return BALANCE;
if (!strcasecmp (atom + 1, "ound"))
return BOUND;
break;
case 'c':
if (!strcasecmp(atom + 1, "ase"))
-diff -up dhcp-4.2.2b1/includes/dhcpd.h.options dhcp-4.2.2b1/includes/dhcpd.h
---- dhcp-4.2.2b1/includes/dhcpd.h.options 2011-05-20 16:21:11.000000000 +0200
-+++ dhcp-4.2.2b1/includes/dhcpd.h 2011-07-01 13:51:52.940755442 +0200
-@@ -1147,6 +1147,9 @@ struct client_config {
+diff -up dhcp-4.3.1b1/includes/dhcpd.h.fLPqYB dhcp-4.3.1b1/includes/dhcpd.h
+--- dhcp-4.3.1b1/includes/dhcpd.h.fLPqYB 2014-07-02 19:58:39.000000000 +0200
++++ dhcp-4.3.1b1/includes/dhcpd.h 2014-07-10 17:38:26.941599360 +0200
+@@ -1152,6 +1152,9 @@ struct client_config {
int do_forward_update; /* If nonzero, and if we have the
information we need, update the
A record for the address we get. */
};
/* Per-interface state used in the dhcp client... */
-diff -up dhcp-4.2.2b1/includes/dhctoken.h.options dhcp-4.2.2b1/includes/dhctoken.h
---- dhcp-4.2.2b1/includes/dhctoken.h.options 2011-05-12 14:02:47.000000000 +0200
-+++ dhcp-4.2.2b1/includes/dhctoken.h 2011-07-01 13:53:43.316861637 +0200
-@@ -361,7 +361,8 @@ enum dhcp_token {
- GETHOSTNAME = 662,
- REWIND = 663,
- INITIAL_DELAY = 664,
-- GETHOSTBYNAME = 665
-+ GETHOSTBYNAME = 665,
-+ BOOTP_BROADCAST_ALWAYS = 666
+diff -up dhcp-4.3.1b1/includes/dhctoken.h.fLPqYB dhcp-4.3.1b1/includes/dhctoken.h
+--- dhcp-4.3.1b1/includes/dhctoken.h.fLPqYB 2014-07-02 19:58:39.000000000 +0200
++++ dhcp-4.3.1b1/includes/dhctoken.h 2014-07-10 17:38:26.942599346 +0200
+@@ -367,7 +367,8 @@ enum dhcp_token {
+ TOKEN_INFINIBAND = 668,
+ POOL6 = 669,
+ V6RELAY = 670,
+- V6RELOPT = 671
++ V6RELOPT = 671,
++ BOOTP_BROADCAST_ALWAYS = 672
};
#define is_identifier(x) ((x) >= FIRST_TOKEN && \
--- /dev/null
+diff -up dhcp-4.3.0b1/omapip/errwarn.c.errwarn dhcp-4.3.0b1/omapip/errwarn.c
+--- dhcp-4.3.0b1/omapip/errwarn.c.errwarn 2014-01-21 09:31:47.301334249 +0100
++++ dhcp-4.3.0b1/omapip/errwarn.c 2014-01-21 09:33:20.569039072 +0100
+@@ -76,11 +76,13 @@ void log_fatal (const char * fmt, ... )
+ }
+
+ log_error ("%s", "");
+- log_error ("If you think you have received this message due to a bug rather");
+- log_error ("than a configuration issue please read the section on submitting");
+- log_error ("bugs on either our web page at www.isc.org or in the README file");
+- log_error ("before submitting a bug. These pages explain the proper");
+- log_error ("process and the information we find helpful for debugging..");
++ log_error ("This version of ISC DHCP is based on the release available");
++ log_error ("on ftp.isc.org. Features have been added and other changes");
++ log_error ("have been made to the base software release in order to make");
++ log_error ("it work better with this distribution.");
++ log_error ("%s", "");
++ log_error ("Please report for this software via the Red Hat Bugzilla site:");
++ log_error (" http://bugzilla.redhat.com");
+ log_error ("%s", "");
+ log_error ("exiting.");
+
--- /dev/null
+diff -up dhcp-4.3.0rc1/common/tables.c.garbage dhcp-4.3.0rc1/common/tables.c
+--- dhcp-4.3.0rc1/common/tables.c.garbage 2014-01-29 10:03:52.132624677 +0100
++++ dhcp-4.3.0rc1/common/tables.c 2014-01-29 10:04:51.413875343 +0100
+@@ -213,7 +213,7 @@ static struct option dhcp_options[] = {
+ { "name-service-search", "Sa", &dhcp_universe, 117, 1 },
+ #endif
+ { "subnet-selection", "I", &dhcp_universe, 118, 1 },
+- { "domain-search", "Dc", &dhcp_universe, 119, 1 },
++ { "domain-search", "D", &dhcp_universe, 119, 1 },
+ { "vivco", "Evendor-class.", &dhcp_universe, 124, 1 },
+ { "vivso", "Evendor.", &dhcp_universe, 125, 1 },
+ #if 0
-diff -up dhcp-4.2.2/client/dhclient.c.gpxe-cid dhcp-4.2.2/client/dhclient.c
---- dhcp-4.2.2/client/dhclient.c.gpxe-cid 2011-09-16 18:23:20.190453902 +0200
-+++ dhcp-4.2.2/client/dhclient.c 2011-09-16 18:27:15.568463599 +0200
-@@ -58,6 +58,13 @@ const char *path_dhclient_pid = NULL;
+diff -up dhcp-4.3.0a1/client/dhclient.c.gpxe-cid dhcp-4.3.0a1/client/dhclient.c
+--- dhcp-4.3.0a1/client/dhclient.c.gpxe-cid 2013-12-20 13:28:45.105048317 +0100
++++ dhcp-4.3.0a1/client/dhclient.c 2013-12-20 13:28:45.109048261 +0100
+@@ -47,6 +47,14 @@
+ const char *path_dhclient_pid = NULL;
static char path_dhclient_script_array[] = _PATH_DHCLIENT_SCRIPT;
char *path_dhclient_script = path_dhclient_script_array;
-
++
+/* Default Prefix */
+static unsigned char default_prefix[12] = {
+ 0xff, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0xc9, 0x00
+};
+
- /* False (default) => we write and use a pid file */
- isc_boolean_t no_pid_file = ISC_FALSE;
+ const char *path_dhclient_duid = NULL;
-@@ -1250,6 +1257,12 @@ int find_subnet (struct subnet **sp,
+ /* False (default) => we write and use a pid file */
+@@ -1253,6 +1260,12 @@ int find_subnet (struct subnet **sp,
static void setup_ib_interface(struct interface_info *ip)
{
struct group *g;
/* Set the broadcast flag */
ip->client->config->bootp_broadcast_always = 1;
-@@ -1266,8 +1279,39 @@ static void setup_ib_interface(struct in
+@@ -1269,8 +1282,39 @@ static void setup_ib_interface(struct in
}
}
}
/* Individual States:
-diff -up dhcp-4.2.2/common/lpf.c.gpxe-cid dhcp-4.2.2/common/lpf.c
---- dhcp-4.2.2/common/lpf.c.gpxe-cid 2011-09-16 18:23:20.183453996 +0200
-+++ dhcp-4.2.2/common/lpf.c 2011-09-16 18:25:28.235804421 +0200
-@@ -591,6 +591,37 @@ void maybe_setup_fallback ()
- }
- }
-
-+static unsigned char * get_ib_hw_addr(char * name)
-+{
-+ struct ifaddrs *ifaddrs;
-+ struct ifaddrs *ifa;
-+ struct sockaddr_ll *sll = NULL;
-+ static unsigned char hw_addr[8];
-+
-+ if (getifaddrs(&ifaddrs) == -1)
-+ return NULL;
-+
-+ for (ifa = ifaddrs; ifa != NULL; ifa = ifa->ifa_next) {
-+ if (ifa->ifa_addr == NULL)
-+ continue;
-+ if (ifa->ifa_addr->sa_family != AF_PACKET)
-+ continue;
-+ if (ifa->ifa_flags & IFF_LOOPBACK)
-+ continue;
-+ if (strcmp(ifa->ifa_name, name) == 0) {
-+ sll = (struct sockaddr_ll *)(void *)ifa->ifa_addr;
-+ break;
-+ }
-+ }
-+ if (sll == NULL) {
-+ freeifaddrs(ifaddrs);
-+ return NULL;
-+ }
-+ memcpy(hw_addr, &sll->sll_addr[sll->sll_halen - 8], 8);
-+ freeifaddrs(ifaddrs);
-+ return (unsigned char *)&hw_addr;
-+}
-+
- void
- get_hw_addr(struct interface_info *info)
- {
-@@ -599,6 +630,7 @@ get_hw_addr(struct interface_info *info)
- struct ifaddrs *ifaddrs;
- struct ifaddrs *ifa;
- struct sockaddr_ll *sll = NULL;
-+ unsigned char *hw_addr;
-
- if (getifaddrs(&ifaddrs) == -1)
- log_fatal("Failed to get interfaces");
-@@ -660,6 +692,10 @@ get_hw_addr(struct interface_info *info)
-
- hw->hlen = 1;
- hw->hbuf[0] = HTYPE_INFINIBAND;
-+ hw_addr = get_ib_hw_addr(name);
-+ if (!hw_addr)
-+ log_fatal("Failed getting %s hw addr", name);
-+ memcpy (&hw->hbuf [1], hw_addr, 8);
- break;
- #if defined(ARPHRD_PPP)
- case ARPHRD_PPP:
-diff -up dhcp-4.2.0/client/dhc6.c.honor-expired dhcp-4.2.0/client/dhc6.c
---- dhcp-4.2.0/client/dhc6.c.honor-expired 2010-10-07 12:55:37.000000000 +0200
-+++ dhcp-4.2.0/client/dhc6.c 2010-10-07 12:56:43.000000000 +0200
-@@ -1405,6 +1405,32 @@ start_info_request6(struct client_state
+diff -up dhcp-4.3.0a1/client/dhc6.c.honor-expired dhcp-4.3.0a1/client/dhc6.c
+--- dhcp-4.3.0a1/client/dhc6.c.honor-expired 2013-12-19 16:00:28.062183037 +0100
++++ dhcp-4.3.0a1/client/dhc6.c 2013-12-19 16:00:28.076182842 +0100
+@@ -1351,6 +1351,32 @@ start_info_request6(struct client_state
go_daemon();
}
/*
* start_confirm6() kicks off an "init-reboot" version of the process, at
* startup to find out if old bindings are 'fair' and at runtime whenever
-@@ -1417,8 +1446,10 @@ start_confirm6(struct client_state *clie
+@@ -1363,8 +1389,10 @@ start_confirm6(struct client_state *clie
/* If there is no active lease, there is nothing to check. */
if ((client->active_lease == NULL) ||
-diff -up dhcp-4.2.2/client/dhclient.c.improved-xid dhcp-4.2.2/client/dhclient.c
---- dhcp-4.2.2/client/dhclient.c.improved-xid 2011-09-16 18:18:00.649730661 +0200
-+++ dhcp-4.2.2/client/dhclient.c 2011-09-16 18:22:36.815035513 +0200
-@@ -898,6 +898,26 @@ main(int argc, char **argv) {
+diff -up dhcp-4.3.0a1/client/dhclient.c.improved-xid dhcp-4.3.0a1/client/dhclient.c
+--- dhcp-4.3.0a1/client/dhclient.c.improved-xid 2013-12-20 13:29:41.836260810 +0100
++++ dhcp-4.3.0a1/client/dhclient.c 2013-12-20 13:29:41.843260713 +0100
+@@ -894,6 +894,26 @@ main(int argc, char **argv) {
}
}
/* At this point, all the interfaces that the script thinks
are relevant should be running, so now we once again call
discover_interfaces(), and this time ask it to actually set
-@@ -912,14 +932,36 @@ main(int argc, char **argv) {
+@@ -908,14 +928,36 @@ main(int argc, char **argv) {
Not much entropy, but we're booting, so we're not likely to
find anything better. */
seed = 0;
/* Setup specific Infiniband options */
for (ip = interfaces; ip; ip = ip->next) {
-@@ -1457,7 +1499,7 @@ void dhcpack (packet)
+@@ -1460,7 +1502,7 @@ void dhcpack (packet)
return;
}
lease = packet_to_lease (packet, client);
if (!lease) {
-@@ -2174,7 +2216,7 @@ void dhcpnak (packet)
+@@ -2171,7 +2213,7 @@ void dhcpnak (packet)
return;
}
if (!client -> active) {
#if defined (DEBUG)
-@@ -2300,10 +2342,10 @@ void send_discover (cpp)
+@@ -2298,10 +2340,10 @@ void send_discover (cpp)
client -> packet.secs = htons (65535);
client -> secs = client -> packet.secs;
+ ntohs (sockaddr_broadcast.sin_port), (long)(client -> interval), client -> xid);
/* Send out a packet. */
- result = send_packet (client -> interface, (struct packet *)0,
-@@ -2584,10 +2626,10 @@ void send_request (cpp)
+ result = send_packet(client->interface, NULL, &client->packet,
+@@ -2570,10 +2612,10 @@ void send_request (cpp)
client -> packet.secs = htons (65535);
}
+ ntohs (destination.sin_port), client -> xid);
if (destination.sin_addr.s_addr != INADDR_BROADCAST &&
- fallback_interface)
-@@ -2618,10 +2660,10 @@ void send_decline (cpp)
+ fallback_interface) {
+@@ -2613,10 +2655,10 @@ void send_decline (cpp)
int result;
- log_info ("DHCPDECLINE on %s to %s port %d",
+ log_info ("DHCPDECLINE on %s to %s port %d (xid=0x%x)",
- client -> name ? client -> name : client -> interface -> name,
- inet_ntoa (sockaddr_broadcast.sin_addr),
-- ntohs (sockaddr_broadcast.sin_port));
-+ ntohs (sockaddr_broadcast.sin_port), client -> xid);
+ client->name ? client->name : client->interface->name,
+ inet_ntoa(sockaddr_broadcast.sin_addr),
+- ntohs(sockaddr_broadcast.sin_port));
++ ntohs(sockaddr_broadcast.sin_port), client -> xid);
/* Send out a packet. */
- result = send_packet (client -> interface, (struct packet *)0,
-@@ -2661,10 +2703,10 @@ void send_release (cpp)
+ result = send_packet(client->interface, NULL, &client->packet,
+@@ -2659,10 +2701,10 @@ void send_release (cpp)
return;
}
- ntohs (destination.sin_port));
+ ntohs (destination.sin_port), client -> xid);
- if (fallback_interface)
- result = send_packet (fallback_interface,
+ if (fallback_interface) {
+ result = send_packet(fallback_interface, NULL, &client->packet,
--- /dev/null
+--- expanded_org/client/dhclient.c Wed Aug 06 23:35:00 2014
++++ expanded_logpid/client/dhclient.c Mon Feb 16 13:35:31 2015
+@@ -142,7 +142,7 @@
+ else if (fd != -1)
+ close(fd);
+
+- openlog("dhclient", DHCP_LOG_OPTIONS, LOG_DAEMON);
++ openlog("dhclient", LOG_NDELAY | LOG_PID, LOG_DAEMON);
+
+ #if !(defined(DEBUG) || defined(__CYGWIN32__))
+ setlogmask(LOG_UPTO(LOG_INFO));
-diff -up dhcp-4.2.2/client/dhclient.c.lpf-ib dhcp-4.2.2/client/dhclient.c
---- dhcp-4.2.2/client/dhclient.c.lpf-ib 2011-09-19 11:24:08.693775799 +0200
-+++ dhcp-4.2.2/client/dhclient.c 2011-09-19 11:24:08.703775541 +0200
-@@ -113,6 +113,8 @@ static int check_domain_name_list(const
+diff -up dhcp-4.3.1b1/client/dhclient.c.bmgpWV dhcp-4.3.1b1/client/dhclient.c
+--- dhcp-4.3.1b1/client/dhclient.c.bmgpWV 2014-07-10 17:50:26.922402550 +0200
++++ dhcp-4.3.1b1/client/dhclient.c 2014-07-10 17:53:43.629623477 +0200
+@@ -114,6 +114,8 @@ static int check_domain_name_list(const
static int check_option_values(struct universe *universe, unsigned int opt,
const char *ptr, size_t len);
+static void setup_ib_interface(struct interface_info *ip);
+
+ #ifndef UNIT_TEST
int
main(int argc, char **argv) {
- int fd;
-@@ -919,6 +921,14 @@ main(int argc, char **argv) {
+@@ -937,6 +939,13 @@ main(int argc, char **argv) {
}
srandom(seed + cur_time + (unsigned)getpid());
+ setup_ib_interface(ip);
+ }
+ }
-+
- /* Start a configuration state machine for each interface. */
- #ifdef DHCPv6
- if (local_family == AF_INET6) {
-@@ -1195,6 +1205,29 @@ int find_subnet (struct subnet **sp,
+
+ /*
+ * Establish a default DUID. We always do so for v6 and
+@@ -1230,6 +1239,29 @@ int find_subnet (struct subnet **sp,
return 0;
}
/* Individual States:
*
* Each routine is called from the dhclient_state_machine() in one of
-diff -up dhcp-4.2.2/common/bpf.c.lpf-ib dhcp-4.2.2/common/bpf.c
---- dhcp-4.2.2/common/bpf.c.lpf-ib 2011-09-19 11:24:08.694775773 +0200
-+++ dhcp-4.2.2/common/bpf.c 2011-09-19 11:24:08.704775516 +0200
-@@ -198,11 +198,44 @@ struct bpf_insn dhcp_bpf_filter [] = {
+diff -up dhcp-4.3.1b1/common/bpf.c.bmgpWV dhcp-4.3.1b1/common/bpf.c
+--- dhcp-4.3.1b1/common/bpf.c.bmgpWV 2014-07-10 17:48:03.797424616 +0200
++++ dhcp-4.3.1b1/common/bpf.c 2014-07-10 17:52:57.705272295 +0200
+@@ -199,11 +199,44 @@ struct bpf_insn dhcp_bpf_filter [] = {
BPF_STMT(BPF_RET+BPF_K, 0),
};
#if defined (HAVE_TR_SUPPORT)
struct bpf_insn dhcp_bpf_tr_filter [] = {
/* accept all token ring packets due to variable length header */
-diff -up dhcp-4.2.2/common/lpf.c.lpf-ib dhcp-4.2.2/common/lpf.c
---- dhcp-4.2.2/common/lpf.c.lpf-ib 2011-09-19 11:24:08.694775773 +0200
-+++ dhcp-4.2.2/common/lpf.c 2011-09-19 11:26:15.107109935 +0200
-@@ -42,6 +42,7 @@
- #include "includes/netinet/udp.h"
- #include "includes/netinet/if_ether.h"
+diff -up dhcp-4.3.1b1/common/lpf.c.bmgpWV dhcp-4.3.1b1/common/lpf.c
+--- dhcp-4.3.1b1/common/lpf.c.bmgpWV 2014-07-10 17:48:03.797424616 +0200
++++ dhcp-4.3.1b1/common/lpf.c 2014-07-10 17:52:57.706272281 +0200
+@@ -46,6 +46,17 @@
+ #if defined (USE_LPF_RECEIVE) || defined (USE_LPF_HWADDR)
+ #include <sys/ioctl.h>
#include <net/if.h>
+#include <ifaddrs.h>
-
- #ifndef PACKET_AUXDATA
- #define PACKET_AUXDATA 8
-@@ -59,6 +60,15 @@ struct tpacket_auxdata
- /* Reinitializes the specified interface after an address change. This
- is not required for packet-filter APIs. */
-
++
+/* Default broadcast address for IPoIB */
+static unsigned char default_ib_bcast_addr[20] = {
+ 0x00, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff
+};
+
- #ifdef USE_LPF_SEND
- void if_reinitialize_send (info)
- struct interface_info *info;
-@@ -86,10 +96,21 @@ int if_register_lpf (info)
+ #endif
+
+ #if defined (USE_LPF_SEND) || defined (USE_LPF_RECEIVE)
+@@ -92,10 +103,21 @@ int if_register_lpf (info)
struct sockaddr common;
} sa;
struct ifreq ifr;
if (errno == ENOPROTOOPT || errno == EPROTONOSUPPORT ||
errno == ESOCKTNOSUPPORT || errno == EPFNOSUPPORT ||
errno == EAFNOSUPPORT || errno == EINVAL) {
-@@ -112,6 +133,7 @@ int if_register_lpf (info)
+@@ -118,6 +140,7 @@ int if_register_lpf (info)
/* Bind to the interface name */
memset (&sa, 0, sizeof sa);
sa.ll.sll_family = AF_PACKET;
sa.ll.sll_ifindex = ifr.ifr_ifindex;
if (bind (sock, &sa.common, sizeof sa)) {
if (errno == ENOPROTOOPT || errno == EPROTONOSUPPORT ||
-@@ -127,8 +149,6 @@ int if_register_lpf (info)
+@@ -133,8 +156,6 @@ int if_register_lpf (info)
log_fatal ("Bind socket to interface: %m");
}
return sock;
}
#endif /* USE_LPF_SEND || USE_LPF_RECEIVE */
-@@ -183,6 +203,8 @@ void if_deregister_send (info)
+@@ -189,6 +210,8 @@ void if_deregister_send (info)
in bpf includes... */
extern struct sock_filter dhcp_bpf_filter [];
extern int dhcp_bpf_filter_len;
#if defined (HAVE_TR_SUPPORT)
extern struct sock_filter dhcp_bpf_tr_filter [];
-@@ -200,11 +222,13 @@ void if_register_receive (info)
+@@ -206,11 +229,13 @@ void if_register_receive (info)
/* Open a LPF device and hang it on this interface... */
info -> rfdesc = if_register_lpf (info);
}
#if defined (HAVE_TR_SUPPORT)
-@@ -250,15 +274,28 @@ static void lpf_gen_filter_setup (info)
+@@ -256,15 +281,28 @@ static void lpf_gen_filter_setup (info)
memset(&p, 0, sizeof(p));
if (setsockopt (info -> rfdesc, SOL_SOCKET, SO_ATTACH_FILTER, &p,
sizeof p) < 0) {
-@@ -315,6 +352,54 @@ static void lpf_tr_filter_setup (info)
+@@ -321,6 +359,54 @@ static void lpf_tr_filter_setup (info)
#endif /* USE_LPF_RECEIVE */
#ifdef USE_LPF_SEND
ssize_t send_packet (interface, packet, raw, len, from, to, hto)
struct interface_info *interface;
struct packet *packet;
-@@ -335,6 +420,11 @@ ssize_t send_packet (interface, packet,
+@@ -341,6 +427,11 @@ ssize_t send_packet (interface, packet,
return send_fallback (interface, packet, raw,
len, from, to, hto);
if (hto == NULL && interface->anycast_mac_addr.hlen)
hto = &interface->anycast_mac_addr;
-@@ -356,6 +446,42 @@ ssize_t send_packet (interface, packet,
+@@ -362,6 +453,42 @@ ssize_t send_packet (interface, packet,
#endif /* USE_LPF_SEND */
#ifdef USE_LPF_RECEIVE
ssize_t receive_packet (interface, buf, len, from, hfrom)
struct interface_info *interface;
unsigned char *buf;
-@@ -382,6 +508,10 @@ ssize_t receive_packet (interface, buf,
+@@ -388,6 +515,10 @@ ssize_t receive_packet (interface, buf,
};
struct cmsghdr *cmsg;
length = recvmsg (interface -> rfdesc, &msg, 0);
if (length <= 0)
return length;
-@@ -462,33 +592,44 @@ void maybe_setup_fallback ()
- }
+@@ -469,11 +600,33 @@ void maybe_setup_fallback ()
+ #endif
- void
+ #if defined (USE_LPF_RECEIVE) || defined (USE_LPF_HWADDR)
+-void
-get_hw_addr(const char *name, struct hardware *hw) {
-- int sock;
-- struct ifreq tmp;
-- struct sockaddr *sa;
-+get_hw_addr(struct interface_info *info)
++struct sockaddr_ll *
++get_ll (struct ifaddrs *ifaddrs, struct ifaddrs **ifa, char *name)
+{
-+ struct hardware *hw = &info->hw_address;
-+ char *name = info->name;
-+ struct ifaddrs *ifaddrs;
-+ struct ifaddrs *ifa;
-+ struct sockaddr_ll *sll = NULL;
-
-- if (strlen(name) >= sizeof(tmp.ifr_name)) {
-- log_fatal("Device name too long: \"%s\"", name);
-- }
-+ if (getifaddrs(&ifaddrs) == -1)
-+ log_fatal("Failed to get interfaces");
-
-- sock = socket(AF_INET, SOCK_DGRAM, 0);
-- if (sock < 0) {
-- log_fatal("Can't create socket for \"%s\": %m", name);
-+ for (ifa = ifaddrs; ifa != NULL; ifa = ifa->ifa_next) {
-+
-+ if (ifa->ifa_addr == NULL)
++ for (*ifa = ifaddrs; *ifa != NULL; *ifa = (*ifa)->ifa_next) {
++ if ((*ifa)->ifa_addr == NULL)
+ continue;
+
-+ if (ifa->ifa_addr->sa_family != AF_PACKET)
++ if ((*ifa)->ifa_addr->sa_family != AF_PACKET)
+ continue;
+
-+ if (ifa->ifa_flags & IFF_LOOPBACK)
++ if ((*ifa)->ifa_flags & IFF_LOOPBACK)
+ continue;
+
-+ if (strcmp(ifa->ifa_name, name) == 0) {
-+ sll = (struct sockaddr_ll *)(void *)ifa->ifa_addr;
-+ break;
-+ }
- }
++ if (strcmp((*ifa)->ifa_name, name) == 0)
++ return (struct sockaddr_ll *)(void *)(*ifa)->ifa_addr;
++ }
++ *ifa = NULL;
++ return NULL;
++}
++
++struct sockaddr_ll *
++ioctl_get_ll(char *name)
++{
+ int sock;
+ struct ifreq tmp;
+- struct sockaddr *sa;
++ struct sockaddr *sa = NULL;
++ struct sockaddr_ll *sll = NULL;
-- memset(&tmp, 0, sizeof(tmp));
-- strcpy(tmp.ifr_name, name);
-- if (ioctl(sock, SIOCGIFHWADDR, &tmp) < 0) {
+ if (strlen(name) >= sizeof(tmp.ifr_name)) {
+ log_fatal("Device name too long: \"%s\"", name);
+@@ -487,16 +640,62 @@ get_hw_addr(const char *name, struct har
+ memset(&tmp, 0, sizeof(tmp));
+ strcpy(tmp.ifr_name, name);
+ if (ioctl(sock, SIOCGIFHWADDR, &tmp) < 0) {
- log_fatal("Error getting hardware address for \"%s\": %m",
-- name);
-+ if (sll == NULL) {
-+ freeifaddrs(ifaddrs);
-+ log_fatal("Failed to get HW address for %s\n", name);
++ log_fatal("Error getting hardware address for \"%s\": %m",
+ name);
}
++ close(sock);
-- sa = &tmp.ifr_hwaddr;
+ sa = &tmp.ifr_hwaddr;
- switch (sa->sa_family) {
++ // needs to be freed outside this function
++ sll = dmalloc (sizeof (struct sockaddr_ll), MDL);
++ if (!sll)
++ log_fatal("Unable to allocate memory for link layer address");
++ memcpy(&sll->sll_hatype, &sa->sa_family, sizeof (sll->sll_hatype));
++ memcpy(sll->sll_addr, sa->sa_data, sizeof (sll->sll_addr));
++ switch (sll->sll_hatype) {
++ case ARPHRD_INFINIBAND:
++ /* ioctl limits hardware addresses to 8 bytes */
++ sll->sll_halen = 8;
++ break;
++ default:
++ break;
++ }
++ return sll;
++}
++
++void
++get_hw_addr(struct interface_info *info)
++{
++ struct hardware *hw = &info->hw_address;
++ char *name = info->name;
++ struct ifaddrs *ifaddrs = NULL;
++ struct ifaddrs *ifa = NULL;
++ struct sockaddr_ll *sll = NULL;
++ int sll_allocated = 0;
++ char *dup = NULL;
++ char *colon = NULL;
++
++ if (getifaddrs(&ifaddrs) == -1)
++ log_fatal("Failed to get interfaces");
++
++ if ((sll = get_ll(ifaddrs, &ifa, name)) == NULL) {
++ /*
++ * We were unable to get link-layer address for name.
++ * Fall back to ioctl(SIOCGIFHWADDR).
++ */
++ sll = ioctl_get_ll(name);
++ if (sll != NULL)
++ sll_allocated = 1;
++ else
++ // shouldn't happen
++ log_fatal("Unexpected internal error");
++ }
++
+ switch (sll->sll_hatype) {
case ARPHRD_ETHER:
hw->hlen = 7;
break;
case ARPHRD_IEEE802:
#ifdef ARPHRD_IEEE802_TR
-@@ -496,18 +637,35 @@ get_hw_addr(const char *name, struct har
+@@ -504,18 +703,48 @@ get_hw_addr(const char *name, struct har
#endif /* ARPHRD_IEEE802_TR */
hw->hlen = 7;
hw->hbuf[0] = HTYPE_IEEE802;
+ memcpy(&hw->hbuf[1], sll->sll_addr, 6);
break;
case ARPHRD_FDDI:
- hw->hlen = 17;
+ hw->hlen = 7;
hw->hbuf[0] = HTYPE_FDDI;
-- memcpy(&hw->hbuf[1], sa->sa_data, 16);
-+ memcpy(&hw->hbuf[1], sll->sll_addr, 16);
+- memcpy(&hw->hbuf[1], sa->sa_data, 6);
++ memcpy(&hw->hbuf[1], sll->sll_addr, 6);
+ break;
+ case ARPHRD_INFINIBAND:
++ dup = strdup(name);
++ /* Aliased infiniband interface is special case where
++ * neither get_ll() nor ioctl_get_ll() get's correct hw
++ * address, so we have to truncate the :0 and run
++ * get_ll() again for the rest.
++ */
++ if ((colon = strchr(dup, ':')) != NULL) {
++ *colon = '\0';
++ if ((sll = get_ll(ifaddrs, &ifa, dup)) == NULL)
++ log_fatal("Error getting hardware address for \"%s\": %m", name);
++ }
++ free (dup);
+ /* For Infiniband, save the broadcast address and store
+ * the port GUID into the hardware address.
+ */
-+ if (ifa->ifa_flags & IFF_BROADCAST) {
++ if (ifa && (ifa->ifa_flags & IFF_BROADCAST)) {
+ struct sockaddr_ll *bll;
+
+ bll = (struct sockaddr_ll *)ifa->ifa_broadaddr;
+
+ hw->hlen = 1;
+ hw->hbuf[0] = HTYPE_INFINIBAND;
++ memcpy(&hw->hbuf[1], &sll->sll_addr[sll->sll_halen - 8], 8);
break;
#if defined(ARPHRD_PPP)
case ARPHRD_PPP:
if (local_family != AF_INET6)
- log_fatal("Unsupported device type %d for \"%s\"",
- sa->sa_family, name);
-+ log_fatal("Unsupported device type %ld for \"%s\"",
-+ (long int)sll->sll_family, name);
++ log_fatal("local_family != AF_INET6 for \"%s\"",
++ name);
hw->hlen = 0;
hw->hbuf[0] = HTYPE_RESERVED;
/* 0xdeadbeef should never occur on the wire,
-@@ -520,10 +678,11 @@ get_hw_addr(const char *name, struct har
+@@ -528,10 +757,13 @@ get_hw_addr(const char *name, struct har
break;
#endif
default:
-+ freeifaddrs(ifaddrs);
- log_fatal("Unsupported device type %ld for \"%s\"",
+- log_fatal("Unsupported device type %ld for \"%s\"",
- (long int)sa->sa_family, name);
-+ (long int)sll->sll_family, name);
++ freeifaddrs(ifaddrs);
++ log_fatal("Unsupported device type %hu for \"%s\"",
++ sll->sll_hatype, name);
}
- close(sock);
++ if (sll_allocated)
++ dfree(sll, MDL);
+ freeifaddrs(ifaddrs);
}
#endif
-diff -up dhcp-4.2.2/common/socket.c.lpf-ib dhcp-4.2.2/common/socket.c
---- dhcp-4.2.2/common/socket.c.lpf-ib 2011-06-27 18:18:20.000000000 +0200
-+++ dhcp-4.2.2/common/socket.c 2011-09-19 11:24:08.705775490 +0200
-@@ -324,7 +324,7 @@ void if_register_send (info)
- info->wfdesc = if_register_socket(info, AF_INET, 0);
+diff -up dhcp-4.3.1b1/common/socket.c.bmgpWV dhcp-4.3.1b1/common/socket.c
+--- dhcp-4.3.1b1/common/socket.c.bmgpWV 2014-07-02 19:58:38.000000000 +0200
++++ dhcp-4.3.1b1/common/socket.c 2014-07-10 17:52:57.706272281 +0200
+@@ -322,7 +322,7 @@ void if_register_send (info)
+ info->wfdesc = if_register_socket(info, AF_INET, 0, NULL);
/* If this is a normal IPv4 address, get the hardware address. */
if (strcmp(info->name, "fallback") != 0)
- get_hw_addr(info->name, &info->hw_address);
#if defined (USE_SOCKET_FALLBACK)
/* Fallback only registers for send, but may need to receive as
well. */
-@@ -387,7 +387,7 @@ void if_register_receive (info)
+@@ -385,7 +385,7 @@ void if_register_receive (info)
#endif /* IP_PKTINFO... */
/* If this is a normal IPv4 address, get the hardware address. */
if (strcmp(info->name, "fallback") != 0)
if (!quiet_interface_discovery)
log_info ("Listening on Socket/%s%s%s",
-@@ -497,7 +497,7 @@ if_register6(struct interface_info *info
+@@ -499,7 +499,7 @@ if_register6(struct interface_info *info
if (req_multi)
if_register_multicast(info);
if (!quiet_interface_discovery) {
if (info->shared_network != NULL) {
-diff -up dhcp-4.2.2/includes/dhcpd.h.lpf-ib dhcp-4.2.2/includes/dhcpd.h
---- dhcp-4.2.2/includes/dhcpd.h.lpf-ib 2011-09-19 11:24:08.696775721 +0200
-+++ dhcp-4.2.2/includes/dhcpd.h 2011-09-19 11:24:08.707775438 +0200
-@@ -1243,6 +1243,7 @@ struct interface_info {
+@@ -555,7 +555,7 @@ if_register_linklocal6(struct interface_
+ info->rfdesc = sock;
+ info->wfdesc = sock;
+
+- get_hw_addr(info->name, &info->hw_address);
++ get_hw_addr(info);
+
+ if (!quiet_interface_discovery) {
+ if (info->shared_network != NULL) {
+diff -up dhcp-4.3.1b1/includes/dhcpd.h.bmgpWV dhcp-4.3.1b1/includes/dhcpd.h
+--- dhcp-4.3.1b1/includes/dhcpd.h.bmgpWV 2014-07-10 17:50:26.923402536 +0200
++++ dhcp-4.3.1b1/includes/dhcpd.h 2014-07-10 17:52:57.707272266 +0200
+@@ -1248,6 +1248,7 @@ struct interface_info {
struct shared_network *shared_network;
/* Networks connected to this interface. */
struct hardware hw_address; /* Its physical address. */
struct in_addr *addresses; /* Addresses associated with this
* interface.
*/
-@@ -2356,7 +2357,7 @@ void print_dns_status (int, struct dhcp_
+@@ -2439,7 +2440,7 @@ void print_dns_status (int, struct dhcp_
#endif
const char *print_time(TIME);
/* socket.c */
#if defined (USE_SOCKET_SEND) || defined (USE_SOCKET_RECEIVE) \
-diff -up dhcp-4.2.2/includes/dhcp.h.lpf-ib dhcp-4.2.2/includes/dhcp.h
---- dhcp-4.2.2/includes/dhcp.h.lpf-ib 2011-09-19 11:24:08.696775721 +0200
-+++ dhcp-4.2.2/includes/dhcp.h 2011-09-19 11:24:08.707775438 +0200
-@@ -79,6 +79,7 @@ struct dhcp_packet {
- #define HTYPE_ETHER 1 /* Ethernet 10Mbps */
- #define HTYPE_IEEE802 6 /* IEEE 802.2 Token Ring... */
- #define HTYPE_FDDI 8 /* FDDI... */
-+#define HTYPE_INFINIBAND 32 /* Infiniband IPoIB */
-
- #define HTYPE_RESERVED 0 /* RFC 5494 */
-
-diff -up dhcp-4.2.1b1/client/dhclient.8.man dhcp-4.2.1b1/client/dhclient.8
---- dhcp-4.2.1b1/client/dhclient.8.man 2010-07-14 22:09:34.000000000 +0200
-+++ dhcp-4.2.1b1/client/dhclient.8 2011-01-27 18:19:07.000000000 +0100
-@@ -115,6 +115,33 @@ dhclient - Dynamic Host Configuration Pr
- .B -w
- ]
- [
-+.B -B
-+]
-+[
-+.B -I
-+.I dhcp-client-identifier
-+]
-+[
-+.B -H
-+.I host-name
-+]
-+[
-+.B -F
-+.I fqdn.fqdn
-+]
-+[
-+.B -V
-+.I vendor-class-identifier
-+]
-+[
-+.B -R
-+.I request-option-list
-+]
-+[
-+.B -timeout
-+.I timeout
-+]
-+[
- .B -v
- ]
- [
-@@ -264,6 +291,69 @@ not to exit when it doesn't find any suc
- program can then be used to notify the client when a network interface
- has been added or removed, so that the client can attempt to configure an IP
- address on that interface.
-+
-+.TP
-+.BI \-B
-+Set the BOOTP broadcast flag in request packets so servers will always
-+broadcast replies.
-+
-+.TP
-+.BI \-I\ <dhcp-client-identifier>
-+Specify the dhcp-client-identifier option to send to the DHCP server.
-+
-+.TP
-+.BI \-H\ <host-name>
-+Specify the host-name option to send to the DHCP server. The host-name
-+string only contains the client's hostname prefix, to which the server will
-+append the ddns-domainname or domain-name options, if any, to derive the
-+fully qualified domain name of the client. The
-+.B -H
-+option cannot be used with the
-+.B -F
-+option.
-+
-+.TP
-+.BI \-F\ <fqdn.fqdn>
-+Specify the fqdn.fqdn option to send to the DHCP server. This option cannot
-+be used with the
-+.B -H
-+option. The fqdn.fqdn option must specify the complete domain name of the
-+client host, which the server may use for dynamic DNS updates.
-+
-+.TP
-+.BI \-V\ <vendor-class-identifier>
-+Specify the vendor-class-identifier option to send to the DHCP server.
-+
-+.TP
-+.BI \-R\ <option>[,<option>...]
-+Specify the list of options the client is to request from the server. The
-+option list must be a single string consisting of option names separated
-+by at least one command and optional space characters. The default option
-+list is:
-+
-+.BR
-+ subnet-mask, broadcast-address, time-offset, routers,
-+.BR
-+ domain-search, domain-name, domain-name-servers, host-name,
-+.BR
-+ nis-domain, nis-servers, ntp-servers, interface-mtu
-+
-+.TP
-+.B -R
-+option does not append options to the default request, it overrides the
-+default request list. Keep this in mind if you want to request an
-+additional option besides the default request list. You will have to
-+specify all option names for the
-+.B -R
-+parameter.
-+
-+.TP
-+.BI \-timeout\ <timeout>
-+Specify the time after which
-+.B dhclient
-+will decide that no DHCP servers can be contacted when no responses have been
-+received.
-+
- .TP
- .BI \-n
- Do not configure any interfaces. This is most likely to be useful in
-diff -up dhcp-4.2.1b1/client/dhclient.conf.5.man dhcp-4.2.1b1/client/dhclient.conf.5
---- dhcp-4.2.1b1/client/dhclient.conf.5.man 2010-09-15 01:03:56.000000000 +0200
-+++ dhcp-4.2.1b1/client/dhclient.conf.5 2011-01-27 18:22:56.000000000 +0100
-@@ -186,7 +186,8 @@ responding to the client send the client
- options. Only the option names should be specified in the request
- statement - not option parameters. By default, the DHCPv4 client
- requests the subnet-mask, broadcast-address, time-offset, routers,
--domain-name, domain-name-servers and host-name options while the DHCPv6
-+domain-search, domain-name, domain-name-servers, host-name, nis-domain,
-+nis-servers, ntp-servers and interface-mtu options while the DHCPv6
- client requests the dhcp6 name-servers and domain-search options. Note
- that if you enter a \'request\' statement, you over-ride these defaults
- and these options will not be requested.
-@@ -672,6 +673,17 @@ know the DHCP service(s) anycast MAC add
- client. The \fIlink-type\fR and \fImac-address\fR parameters are configured
- in a similar manner to the \fBhardware\fR statement.
- .PP
-+ \fBbootp-broadcast-always;\fR
-+.PP
-+The
-+.B bootp-broadcast-always
-+statement instructs dhclient to always set the bootp broadcast flag in
-+request packets, so that servers will always broadcast replies.
-+This is equivalent to supplying the dhclient -B argument, and has
-+the same effect as specifying 'always-broadcast' in the server's dhcpd.conf.
-+This option is provided as an extension to enable dhclient to work
-+on IBM s390 Linux guests.
-+.PP
- .SH SAMPLE
- The following configuration file is used on a laptop running NetBSD
- 1.3. The laptop has an IP alias of 192.5.5.213, and has one
-@@ -697,7 +709,7 @@ interface "ep0" {
- supersede domain-search "fugue.com", "rc.vix.com", "home.vix.com";
- prepend domain-name-servers 127.0.0.1;
- request subnet-mask, broadcast-address, time-offset, routers,
-- domain-name, domain-name-servers, host-name;
-+ domain-search, domain-name, domain-name-servers, host-name;
- require subnet-mask, domain-name-servers;
- script "CLIENTBINDIR/dhclient-script";
- media "media 10baseT/UTP", "media 10base2/BNC";
-diff -up dhcp-4.2.1b1/client/dhclient-script.8.man dhcp-4.2.1b1/client/dhclient-script.8
---- dhcp-4.2.1b1/client/dhclient-script.8.man 2010-07-06 21:03:11.000000000 +0200
-+++ dhcp-4.2.1b1/client/dhclient-script.8 2011-01-27 18:24:44.000000000 +0100
-@@ -47,7 +47,7 @@ customizations are needed, they should b
+diff -up dhcp-4.3.0a1/client/dhclient-script.8.man dhcp-4.3.0a1/client/dhclient-script.8
+--- dhcp-4.3.0a1/client/dhclient-script.8.man 2013-12-11 01:01:02.000000000 +0100
++++ dhcp-4.3.0a1/client/dhclient-script.8 2013-12-19 15:27:17.617118805 +0100
+@@ -48,7 +48,7 @@ customizations are needed, they should b
exit hooks provided (see HOOKS for details). These hooks will allow the
user to override the default behaviour of the client in creating a
.B /etc/resolv.conf
.PP
No standard client script exists for some operating systems, even though
the actual client may work, so a pioneering user may well need to create
-@@ -91,6 +91,26 @@ present. The
+@@ -92,6 +92,26 @@ present. The
.B ETCDIR/dhclient-exit-hooks
script can modify the valid of exit_status to change the exit status
of dhclient-script.
.SH OPERATION
When dhclient needs to invoke the client configuration script, it
defines a set of variables in the environment, and then invokes
-diff -up dhcp-4.2.1b1/common/dhcp-options.5.man dhcp-4.2.1b1/common/dhcp-options.5
---- dhcp-4.2.1b1/common/dhcp-options.5.man 2010-07-13 22:56:56.000000000 +0200
-+++ dhcp-4.2.1b1/common/dhcp-options.5 2011-01-27 18:25:57.000000000 +0100
-@@ -913,6 +913,21 @@ classless IP routing - it does not inclu
+diff -up dhcp-4.3.0a1/client/dhclient.conf.5.man dhcp-4.3.0a1/client/dhclient.conf.5
+--- dhcp-4.3.0a1/client/dhclient.conf.5.man 2013-12-11 01:01:02.000000000 +0100
++++ dhcp-4.3.0a1/client/dhclient.conf.5 2013-12-19 15:27:17.617118805 +0100
+@@ -202,7 +202,8 @@ responding to the client send the client
+ options. Only the option names should be specified in the request
+ statement - not option parameters. By default, the DHCPv4 client
+ requests the subnet-mask, broadcast-address, time-offset, routers,
+-domain-name, domain-name-servers and host-name options while the DHCPv6
++domain-search, domain-name, domain-name-servers, host-name, nis-domain,
++nis-servers, ntp-servers and interface-mtu options while the DHCPv6
+ client requests the dhcp6 name-servers and domain-search options. Note
+ that if you enter a \'request\' statement, you over-ride these defaults
+ and these options will not be requested.
+@@ -688,6 +689,17 @@ know the DHCP service(s) anycast MAC add
+ client. The \fIlink-type\fR and \fImac-address\fR parameters are configured
+ in a similar manner to the \fBhardware\fR statement.
+ .PP
++ \fBbootp-broadcast-always;\fR
++.PP
++The
++.B bootp-broadcast-always
++statement instructs dhclient to always set the bootp broadcast flag in
++request packets, so that servers will always broadcast replies.
++This is equivalent to supplying the dhclient -B argument, and has
++the same effect as specifying 'always-broadcast' in the server's dhcpd.conf.
++This option is provided as an extension to enable dhclient to work
++on IBM s390 Linux guests.
++.PP
+ .SH SAMPLE
+ The following configuration file is used on a laptop running NetBSD
+ 1.3. The laptop has an IP alias of 192.5.5.213, and has one
+@@ -713,7 +725,7 @@ interface "ep0" {
+ supersede domain-search "fugue.com", "rc.vix.com", "home.vix.com";
+ prepend domain-name-servers 127.0.0.1;
+ request subnet-mask, broadcast-address, time-offset, routers,
+- domain-name, domain-name-servers, host-name;
++ domain-search, domain-name, domain-name-servers, host-name;
+ require subnet-mask, domain-name-servers;
+ script "CLIENTBINDIR/dhclient-script";
+ media "media 10baseT/UTP", "media 10base2/BNC";
+diff -up dhcp-4.3.0a1/common/dhcp-options.5.man dhcp-4.3.0a1/common/dhcp-options.5
+--- dhcp-4.3.0a1/common/dhcp-options.5.man 2013-12-11 01:25:12.000000000 +0100
++++ dhcp-4.3.0a1/common/dhcp-options.5 2013-12-19 15:27:17.618118791 +0100
+@@ -914,6 +914,21 @@ classless IP routing - it does not inclu
classless IP routing is now the most widely deployed routing standard,
this option is virtually useless, and is not implemented by any of the
popular DHCP clients, for example the Microsoft DHCP client.
.RE
.PP
.nf
-diff -up dhcp-4.2.1b1/server/dhcpd.conf.5.man dhcp-4.2.1b1/server/dhcpd.conf.5
---- dhcp-4.2.1b1/server/dhcpd.conf.5.man 2010-07-06 21:03:12.000000000 +0200
-+++ dhcp-4.2.1b1/server/dhcpd.conf.5 2011-01-27 18:29:12.000000000 +0100
-@@ -519,6 +519,9 @@ pool {
+diff -up dhcp-4.3.0a1/server/dhcpd.conf.5.man dhcp-4.3.0a1/server/dhcpd.conf.5
+--- dhcp-4.3.0a1/server/dhcpd.conf.5.man 2013-12-13 21:49:44.000000000 +0100
++++ dhcp-4.3.0a1/server/dhcpd.conf.5 2013-12-19 15:30:14.266670962 +0100
+@@ -527,6 +527,9 @@ pool {
};
.fi
.PP
The server currently does very little sanity checking, so if you
configure it wrong, it will just fail in odd ways. I would recommend
therefore that you either do failover or don't do failover, but don't
-@@ -533,9 +536,9 @@ primary server might look like this:
+@@ -541,9 +544,9 @@ primary server might look like this:
failover peer "foo" {
primary;
address anthrax.rc.vix.com;
max-response-delay 60;
max-unacked-updates 10;
mclt 3600;
-@@ -1305,7 +1308,7 @@ the zone containing PTR records - for IS
+@@ -1241,7 +1244,7 @@ the zone containing PTR records - for IS
.PP
.nf
key DHCP_UPDATER {
secret pRP5FapFoJ95JEL06sv4PQ==;
};
-@@ -1328,7 +1331,7 @@ dhcpd.conf file:
+@@ -1264,7 +1267,7 @@ dhcpd.conf file:
.PP
.nf
key DHCP_UPDATER {
secret pRP5FapFoJ95JEL06sv4PQ==;
};
-@@ -2540,7 +2543,8 @@ statement
+@@ -2539,7 +2542,8 @@ statement
The \fInext-server\fR statement is used to specify the host address of
the server from which the initial boot file (specified in the
- \fIfilename\fR statement) is to be loaded. \fIServer-name\fR should
+ \fIfilename\fR statement) is to be loaded. \fIServer-name\fR should
-be a numeric IP address or a domain name.
+be a numeric IP address or a domain name. If no \fInext-server\fR statement
+applies to a given client, the address 0.0.0.0 is used.
--- /dev/null
+diff -up dhcp-4.3.1b1/client/dhclient.c.dlTsyN dhcp-4.3.1b1/client/dhclient.c
+--- dhcp-4.3.1b1/client/dhclient.c.dlTsyN 2014-07-10 17:49:49.882925843 +0200
++++ dhcp-4.3.1b1/client/dhclient.c 2014-07-10 17:50:26.922402550 +0200
+@@ -1748,11 +1748,6 @@ int write_host (host)
+ return 0;
+ }
+
+-void db_startup (testp)
+- int testp;
+-{
+-}
+-
+ void bootp (packet)
+ struct packet *packet;
+ {
+diff -up dhcp-4.3.1b1/includes/dhcpd.h.dlTsyN dhcp-4.3.1b1/includes/dhcpd.h
+--- dhcp-4.3.1b1/includes/dhcpd.h.dlTsyN 2014-07-10 17:48:03.798424601 +0200
++++ dhcp-4.3.1b1/includes/dhcpd.h 2014-07-10 17:50:26.923402536 +0200
+@@ -2866,7 +2866,11 @@ void commit_leases_timeout (void *);
+ void commit_leases_readerdry(void *);
+ int commit_leases (void);
+ int commit_leases_timed (void);
++#if defined (PARANOIA)
++void db_startup (int, uid_t, gid_t);
++#else
+ void db_startup (int);
++#endif /* PARANOIA */
+ int new_lease_file (void);
+ int group_writer (struct group_object *);
+ int write_ia(const struct ia_xx *);
+diff -up dhcp-4.3.1b1/server/confpars.c.dlTsyN dhcp-4.3.1b1/server/confpars.c
+--- dhcp-4.3.1b1/server/confpars.c.dlTsyN 2014-07-10 17:39:25.801764596 +0200
++++ dhcp-4.3.1b1/server/confpars.c 2014-07-10 17:50:26.924402522 +0200
+@@ -219,7 +219,11 @@ void trace_conf_input (trace_type_t *tty
+ }
+
+ if (!leaseconf_initialized && ttype == trace_readleases_type) {
++#if defined (PARANOIA)
++ db_startup (0, 0, 0);
++#else
+ db_startup (0);
++#endif /* PARANOIA */
+ leaseconf_initialized = 1;
+ postdb_startup ();
+ }
+diff -up dhcp-4.3.1b1/server/db.c.dlTsyN dhcp-4.3.1b1/server/db.c
+--- dhcp-4.3.1b1/server/db.c.dlTsyN 2014-07-10 17:39:25.801764596 +0200
++++ dhcp-4.3.1b1/server/db.c 2014-07-10 17:50:26.925402508 +0200
+@@ -42,6 +42,10 @@ static int counting = 0;
+ static int count = 0;
+ TIME write_time;
+ int lease_file_is_corrupt = 0;
++#if defined (PARANOIA)
++uid_t global_set_uid = 0;
++gid_t global_set_gid = 0;
++#endif /* PARANOIA */
+
+ /* Write a single binding scope value in parsable format.
+ */
+@@ -1046,8 +1050,11 @@ int commit_leases_timed()
+ return (1);
+ }
+
+-void db_startup (testp)
+- int testp;
++#if defined (PARANOIA)
++void db_startup (int testp, uid_t set_uid, gid_t set_gid)
++#else
++void db_startup (int testp)
++#endif /* PARANOIA */
+ {
+ isc_result_t status;
+
+@@ -1066,6 +1073,11 @@ void db_startup (testp)
+ }
+ #endif
+
++#if defined (PARANOIA)
++ global_set_uid = set_uid;
++ global_set_gid = set_gid;
++#endif /* PARANOIA */
++
+ #if defined (TRACING)
+ /* If we're playing back, there is no lease file, so we can't
+ append it, so we create one immediately (maybe this isn't
+@@ -1128,6 +1140,17 @@ int new_lease_file ()
+ log_error ("Can't create new lease file: %m");
+ return 0;
+ }
++
++#if defined (PARANOIA)
++ if (global_set_uid && !geteuid() &&
++ global_set_gid && !getegid())
++ if (fchown(db_fd, global_set_uid, global_set_gid)) {
++ log_fatal ("Can't chown new lease file: %m");
++ close(db_fd);
++ goto fdfail;
++ }
++#endif /* PARANOIA */
++
+ if ((new_db_file = fdopen(db_fd, "we")) == NULL) {
+ log_error("Can't fdopen new lease file: %m");
+ close(db_fd);
+diff -up dhcp-4.3.1b1/server/dhcpd.8.dlTsyN dhcp-4.3.1b1/server/dhcpd.8
+--- dhcp-4.3.1b1/server/dhcpd.8.dlTsyN 2014-07-02 19:58:39.000000000 +0200
++++ dhcp-4.3.1b1/server/dhcpd.8 2014-07-10 17:50:26.925402508 +0200
+@@ -82,6 +82,18 @@ dhcpd - Dynamic Host Configuration Proto
+ .I trace-output-file
+ ]
+ [
++.B -user
++.I user
++]
++[
++.B -group
++.I group
++]
++[
++.B -chroot
++.I dir
++]
++[
+ .B -play
+ .I trace-playback-file
+ ]
+@@ -269,6 +281,15 @@ lease file.
+ .TP
+ .BI --version
+ Print version number and exit.
++.TP
++.BI \-user \ user
++Setuid to user after completing privileged operations, such as creating sockets that listen on privileged ports.
++.TP
++.BI \-group \ group
++Setgid to group after completing privileged operations, such as creating sockets that listen on privileged ports.
++.TP
++.BI \-chroot \ dir
++Chroot to directory after processing the command line arguments, but before reading the configuration file.
+ .PP
+ .I Modifying default file locations:
+ The following options can be used to modify the locations
+diff -up dhcp-4.3.1b1/server/dhcpd.c.dlTsyN dhcp-4.3.1b1/server/dhcpd.c
+--- dhcp-4.3.1b1/server/dhcpd.c.dlTsyN 2014-07-10 17:39:25.802764582 +0200
++++ dhcp-4.3.1b1/server/dhcpd.c 2014-07-10 17:52:35.341588248 +0200
+@@ -628,7 +628,11 @@ main(int argc, char **argv) {
+ group_write_hook = group_writer;
+
+ /* Start up the database... */
++#if defined (PARANOIA)
++ db_startup (lftest, set_uid, set_gid);
++#else
+ db_startup (lftest);
++#endif /* PARANOIA */
+
+ if (lftest)
+ exit (0);
-diff -up dhcp-4.2.0/includes/dhcpd.h.paths dhcp-4.2.0/includes/dhcpd.h
---- dhcp-4.2.0/includes/dhcpd.h.paths 2010-07-21 13:55:42.000000000 +0200
-+++ dhcp-4.2.0/includes/dhcpd.h 2010-07-21 14:29:57.000000000 +0200
-@@ -1390,15 +1390,15 @@ typedef unsigned char option_mask [16];
+--- expanded_org/includes/dhcpd.h Wed Aug 06 23:35:02 2014
++++ expanded_patched_51_4_2_0_paths_patch/includes/dhcpd.h Mon Feb 16 13:22:11 2015
+@@ -1424,15 +1424,15 @@
#else /* !DEBUG */
#ifndef _PATH_DHCPD_CONF
#endif
#ifndef _PATH_DHCPD_PID
-@@ -1412,7 +1412,7 @@ typedef unsigned char option_mask [16];
+@@ -1446,7 +1446,7 @@
#endif /* DEBUG */
#ifndef _PATH_DHCLIENT_CONF
#endif
#ifndef _PATH_DHCLIENT_SCRIPT
-@@ -1428,11 +1428,11 @@ typedef unsigned char option_mask [16];
+@@ -1462,11 +1462,11 @@
#endif
#ifndef _PATH_DHCLIENT_DB
-diff -up dhcp-4.2.0/client/dhclient.c.ifup dhcp-4.2.0/client/dhclient.c
---- dhcp-4.2.0/client/dhclient.c.ifup 2010-07-21 13:30:10.000000000 +0200
-+++ dhcp-4.2.0/client/dhclient.c 2010-07-21 13:37:03.000000000 +0200
-@@ -497,9 +497,81 @@ main(int argc, char **argv) {
- kill(oldpid, SIGTERM);
+diff -up dhcp-4.3.0a1/client/dhclient.c.ifup dhcp-4.3.0a1/client/dhclient.c
+--- dhcp-4.3.0a1/client/dhclient.c.ifup 2013-12-19 14:53:08.817760677 +0100
++++ dhcp-4.3.0a1/client/dhclient.c 2013-12-19 15:05:16.290518574 +0100
+@@ -521,9 +521,81 @@ main(int argc, char **argv) {
+ }
}
fclose(pidfd);
+ } else {
--- /dev/null
+diff -up dhcp-4.3.1b1/client/Makefile.am.brGmwh dhcp-4.3.1b1/client/Makefile.am
+--- dhcp-4.3.1b1/client/Makefile.am.brGmwh 2014-07-02 19:58:38.000000000 +0200
++++ dhcp-4.3.1b1/client/Makefile.am 2014-07-10 17:36:30.484250976 +0200
+@@ -10,8 +10,8 @@ dhclient_SOURCES = clparse.c dhclient.c
+ scripts/bsdos scripts/freebsd scripts/linux scripts/macos \
+ scripts/netbsd scripts/nextstep scripts/openbsd \
+ scripts/solaris scripts/openwrt
+-dhclient_LDADD = ../common/libdhcp.a ../omapip/libomapi.a ../bind/lib/libirs.a \
+- ../bind/lib/libdns.a ../bind/lib/libisccfg.a ../bind/lib/libisc.a
++dhclient_LDADD = ../common/libdhcp.a ../omapip/libomapi.a \
++ $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
+ man_MANS = dhclient.8 dhclient-script.8 dhclient.conf.5 dhclient.leases.5
+ EXTRA_DIST = $(man_MANS)
+
+diff -up dhcp-4.3.1b1/common/tests/Makefile.am.brGmwh dhcp-4.3.1b1/common/tests/Makefile.am
+--- dhcp-4.3.1b1/common/tests/Makefile.am.brGmwh 2014-07-10 17:36:30.485250962 +0200
++++ dhcp-4.3.1b1/common/tests/Makefile.am 2014-07-10 17:38:04.010924566 +0200
+@@ -13,21 +13,20 @@ ATF_TESTS += alloc_unittest dns_unittest
+ alloc_unittest_SOURCES = test_alloc.c $(top_srcdir)/tests/t_api_dhcp.c
+ alloc_unittest_LDADD = $(ATF_LDFLAGS)
+ alloc_unittest_LDADD += ../libdhcp.a \
+- ../../omapip/libomapi.a ../../bind/lib/libirs.a \
+- ../../bind/lib/libdns.a ../../bind/lib/libisccfg.a ../../bind/lib/libisc.a
++ ../../omapip/libomapi.a \
++ $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
+
+ dns_unittest_SOURCES = dns_unittest.c $(top_srcdir)/tests/t_api_dhcp.c
+ dns_unittest_LDADD = $(ATF_LDFLAGS)
+ dns_unittest_LDADD += ../libdhcp.a \
+- ../../omapip/libomapi.a ../../bind/lib/libirs.a \
+- ../../bind/lib/libdns.a ../../bind/lib/libisccfg.a ../../bind/lib/libisc.a
++ ../../omapip/libomapi.a \
++ $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
+
+ misc_unittest_SOURCES = misc_unittest.c $(top_srcdir)/tests/t_api_dhcp.c
+ misc_unittest_LDADD = $(ATF_LDFLAGS)
+ misc_unittest_LDADD += ../libdhcp.a \
+- ../../omapip/libomapi.a ../../bind/lib/libirs.a \
+- ../../bind/lib/libdns.a ../../bind/lib/libisccfg.a ../../bind/lib/libisc.a
+-
++ ../../omapip/libomapi.a \
++ $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
+ check: $(ATF_TESTS)
+ atf-run | atf-report
+
+diff -up dhcp-4.3.1b1/configure.ac.brGmwh dhcp-4.3.1b1/configure.ac
+--- dhcp-4.3.1b1/configure.ac.brGmwh 2014-07-02 20:01:26.000000000 +0200
++++ dhcp-4.3.1b1/configure.ac 2014-07-10 17:36:30.485250962 +0200
+@@ -562,20 +562,37 @@ AC_CHECK_MEMBER(struct msghdr.msg_contro
+
+ libbind=
+ AC_ARG_WITH(libbind,
+- AS_HELP_STRING([--with-libbind=PATH],[bind includes and libraries are in PATH
+- (default is ./bind)]),
++ AS_HELP_STRING([--with-libbind=PATH],[bind includes are in PATH
++ (default is ./bind/includes)]),
+ use_libbind="$withval", use_libbind="no")
+ case "$use_libbind" in
++yes|no)
++ libbind="\${top_srcdir}/bind/include"
++ ;;
++*)
++ libbind="$use_libbind"
++ ;;
++esac
++
++BIND9_LIBDIR='-L$(top_builddir)/bind/lib'
++AC_ARG_WITH(libbind-libs,
++ AC_HELP_STRING([--with-libbind-libs=PATH],
++ [bind9 export libraries are in PATH]),
++ [libbind_libs="$withval"], [libbind_libs='no'])
++case "$libbind_libs" in
+ yes)
+- libbind="\${top_srcdir}/bind"
++ AC_MSG_ERROR([Specify path to bind9 libraries])
+ ;;
+ no)
+- libbind="\${top_srcdir}/bind"
++ BUNDLED_BIND=yes
+ ;;
+ *)
+- libbind="$use_libbind"
++ BIND9_LIBDIR="-L$libbind_libs"
++ BUNDLED_BIND=no
+ ;;
+ esac
++AM_CONDITIONAL([BUNDLED_BIND], [test "$BUNDLED_BIND" = yes])
++AC_SUBST([BIND9_LIBDIR])
+
+ # OpenLDAP support.
+ AC_ARG_WITH(ldap,
+@@ -610,7 +627,7 @@ fi
+ CFLAGS="$CFLAGS $STD_CWARNINGS"
+
+ # Try to add the bind include directory
+-CFLAGS="$CFLAGS -I$libbind/include"
++CFLAGS="$CFLAGS -I$libbind"
+
+ case "$host" in
+ *-darwin*)
+diff -up dhcp-4.3.1b1/dhcpctl/Makefile.am.brGmwh dhcp-4.3.1b1/dhcpctl/Makefile.am
+--- dhcp-4.3.1b1/dhcpctl/Makefile.am.brGmwh 2014-07-02 19:58:38.000000000 +0200
++++ dhcp-4.3.1b1/dhcpctl/Makefile.am 2014-07-10 17:36:30.485250962 +0200
+@@ -6,12 +6,9 @@ EXTRA_DIST = $(man_MANS)
+
+ omshell_SOURCES = omshell.c
+ omshell_LDADD = libdhcpctl.a ../common/libdhcp.a ../omapip/libomapi.a \
+- ../bind/lib/libirs.a ../bind/lib/libdns.a \
+- ../bind/lib/libisccfg.a ../bind/lib/libisc.a
+-
++ $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
+ libdhcpctl_a_SOURCES = dhcpctl.c callback.c remote.c
+
+ cltest_SOURCES = cltest.c
+ cltest_LDADD = libdhcpctl.a ../common/libdhcp.a ../omapip/libomapi.a \
+- ../bind/lib/libirs.a ../bind/lib/libdns.a \
+- ../bind/lib/libisccfg.a ../bind/lib/libisc.a
++ $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
+diff -up dhcp-4.3.1b1/Makefile.am.brGmwh dhcp-4.3.1b1/Makefile.am
+--- dhcp-4.3.1b1/Makefile.am.brGmwh 2014-07-02 19:58:38.000000000 +0200
++++ dhcp-4.3.1b1/Makefile.am 2014-07-10 17:36:30.484250976 +0200
+@@ -25,7 +25,13 @@ EXTRA_DIST = RELNOTES LICENSE \
+ bind/Makefile bind/bind.tar.gz bind/version.tmp \
+ common/tests/Atffile server/tests/Atffile
+
+-SUBDIRS = bind includes tests common dst omapip client dhcpctl relay server
++if BUNDLED_BIND
++SUBDIRS = bind
++else
++SUBDIRS =
++endif
++
++SUBDIRS += includes tests common dst omapip client dhcpctl relay server
+
+ nobase_include_HEADERS = dhcpctl/dhcpctl.h
+
+diff -up dhcp-4.3.1b1/omapip/Makefile.am.brGmwh dhcp-4.3.1b1/omapip/Makefile.am
+--- dhcp-4.3.1b1/omapip/Makefile.am.brGmwh 2014-07-02 19:58:39.000000000 +0200
++++ dhcp-4.3.1b1/omapip/Makefile.am 2014-07-10 17:36:30.486250948 +0200
+@@ -10,6 +10,5 @@ man_MANS = omapi.3
+ EXTRA_DIST = $(man_MANS)
+
+ svtest_SOURCES = test.c
+-svtest_LDADD = libomapi.a ../bind/lib/libirs.a ../bind/lib/libdns.a \
+- ../bind/lib/libisccfg.a ../bind/lib/libisc.a
+-
++svtest_LDADD = libomapi.a \
++ $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
+diff -up dhcp-4.3.1b1/relay/Makefile.am.brGmwh dhcp-4.3.1b1/relay/Makefile.am
+--- dhcp-4.3.1b1/relay/Makefile.am.brGmwh 2014-07-02 19:58:39.000000000 +0200
++++ dhcp-4.3.1b1/relay/Makefile.am 2014-07-10 17:36:30.486250948 +0200
+@@ -3,8 +3,7 @@ AM_CPPFLAGS = -DLOCALSTATEDIR='"@localst
+ sbin_PROGRAMS = dhcrelay
+ dhcrelay_SOURCES = dhcrelay.c
+ dhcrelay_LDADD = ../common/libdhcp.a ../omapip/libomapi.a \
+- ../bind/lib/libirs.a ../bind/lib/libdns.a \
+- ../bind/lib/libisccfg.a ../bind/lib/libisc.a
++ $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
+ man_MANS = dhcrelay.8
+ EXTRA_DIST = $(man_MANS)
+
+diff -up dhcp-4.3.1b1/server/Makefile.am.brGmwh dhcp-4.3.1b1/server/Makefile.am
+--- dhcp-4.3.1b1/server/Makefile.am.brGmwh 2014-07-02 19:58:39.000000000 +0200
++++ dhcp-4.3.1b1/server/Makefile.am 2014-07-10 17:36:30.486250948 +0200
+@@ -13,10 +13,8 @@ dhcpd_SOURCES = dhcpd.c dhcp.c bootp.c c
+ dhcpv6.c mdb6.c ldap.c ldap_casa.c
+
+ dhcpd_CFLAGS = $(LDAP_CFLAGS)
+-dhcpd_LDADD = ../common/libdhcp.a ../omapip/libomapi.a \
+- ../dhcpctl/libdhcpctl.a ../bind/lib/libirs.a \
+- ../bind/lib/libdns.a ../bind/lib/libisccfg.a ../bind/lib/libisc.a
+-
++dhcpd_LDADD = ../common/libdhcp.a ../omapip/libomapi.a ../dhcpctl/libdhcpctl.a \
++ $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
+ man_MANS = dhcpd.8 dhcpd.conf.5 dhcpd.leases.5
+ EXTRA_DIST = $(man_MANS)
+
+diff -up dhcp-4.3.1b1/server/tests/Makefile.am.brGmwh dhcp-4.3.1b1/server/tests/Makefile.am
+--- dhcp-4.3.1b1/server/tests/Makefile.am.brGmwh 2014-07-02 19:58:40.000000000 +0200
++++ dhcp-4.3.1b1/server/tests/Makefile.am 2014-07-10 17:36:30.486250948 +0200
+@@ -18,9 +18,8 @@ DHCPSRC = ../dhcp.c ../bootp.c ../confpa
+ ../ldap.c ../ldap_casa.c ../dhcpd.c
+
+ DHCPLIBS = $(top_builddir)/common/libdhcp.a $(top_builddir)/omapip/libomapi.a \
+- $(top_builddir)/dhcpctl/libdhcpctl.a $(top_builddir)/bind/lib/libirs.a \
+- $(top_builddir)/bind/lib/libdns.a $(top_builddir)/bind/lib/libisccfg.a \
+- $(top_builddir)/bind/lib/libisc.a
++ $(top_builddir)/dhcpctl/libdhcpctl.a \
++ $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
+
+ ATF_TESTS =
+ TESTS =
-diff -up dhcp-4.2.2b1/client/clparse.c.rfc3442 dhcp-4.2.2b1/client/clparse.c
---- dhcp-4.2.2b1/client/clparse.c.rfc3442 2011-07-01 14:22:38.031534508 +0200
-+++ dhcp-4.2.2b1/client/clparse.c 2011-07-01 14:22:38.128532940 +0200
-@@ -37,7 +37,7 @@
+diff -up dhcp-4.3.0rc1/client/clparse.c.rfc3442 dhcp-4.3.0rc1/client/clparse.c
+--- dhcp-4.3.0rc1/client/clparse.c.rfc3442 2014-01-29 10:05:48.474400352 +0100
++++ dhcp-4.3.0rc1/client/clparse.c 2014-01-29 10:05:48.517399955 +0100
+@@ -31,7 +31,7 @@
struct client_config top_level_config;
struct option *default_requested_options[NUM_DEFAULT_REQUESTED_OPTS + 1];
static void parse_client_default_duid(struct parse *cfile);
-@@ -82,7 +82,11 @@ isc_result_t read_client_conf ()
+@@ -84,7 +84,11 @@ isc_result_t read_client_conf ()
dhcp_universe.code_hash, &code, 0, MDL);
/* 4 */
option_code_hash_lookup(&default_requested_options[3],
dhcp_universe.code_hash, &code, 0, MDL);
-@@ -136,6 +140,11 @@ isc_result_t read_client_conf ()
+@@ -138,6 +142,11 @@ isc_result_t read_client_conf ()
option_code_hash_lookup(&default_requested_options[13],
dhcp_universe.code_hash, &code, 0, MDL);
for (code = 0 ; code < NUM_DEFAULT_REQUESTED_OPTS ; code++) {
if (default_requested_options[code] == NULL)
log_fatal("Unable to find option definition for "
-diff -up dhcp-4.2.2b1/common/dhcp-options.5.rfc3442 dhcp-4.2.2b1/common/dhcp-options.5
---- dhcp-4.2.2b1/common/dhcp-options.5.rfc3442 2011-07-01 14:22:38.020534686 +0200
-+++ dhcp-4.2.2b1/common/dhcp-options.5 2011-07-01 14:22:38.129532924 +0200
-@@ -115,6 +115,26 @@ hexadecimal, separated by colons. For
+diff -up dhcp-4.3.0rc1/common/dhcp-options.5.rfc3442 dhcp-4.3.0rc1/common/dhcp-options.5
+--- dhcp-4.3.0rc1/common/dhcp-options.5.rfc3442 2014-01-29 10:05:48.466400426 +0100
++++ dhcp-4.3.0rc1/common/dhcp-options.5 2014-01-29 10:05:48.518399945 +0100
+@@ -111,6 +111,26 @@ hexadecimal, separated by colons. For e
or
option dhcp-client-identifier 43:4c:49:45:54:2d:46:4f:4f;
.fi
+.fi
.SH SETTING OPTION VALUES USING EXPRESSIONS
Sometimes it's helpful to be able to set the value of a DHCP option
- based on some value that the client has sent. To do this, you can
-@@ -931,6 +951,29 @@ dhclient-script will create routes:
+ based on some value that the client has sent. To do this, you can
+@@ -972,6 +992,29 @@ dhclient-script will create routes:
.RE
.PP
.nf
.B option \fBstreettalk-directory-assistance-server\fR \fIip-address\fR
[\fB,\fR \fIip-address\fR...]\fB;\fR
.fi
-diff -up dhcp-4.2.2b1/common/inet.c.rfc3442 dhcp-4.2.2b1/common/inet.c
---- dhcp-4.2.2b1/common/inet.c.rfc3442 2011-05-11 02:47:22.000000000 +0200
-+++ dhcp-4.2.2b1/common/inet.c 2011-07-01 14:22:38.130532908 +0200
-@@ -528,6 +528,60 @@ free_iaddrcidrnetlist(struct iaddrcidrne
+diff -up dhcp-4.3.0rc1/common/inet.c.rfc3442 dhcp-4.3.0rc1/common/inet.c
+--- dhcp-4.3.0rc1/common/inet.c.rfc3442 2014-01-26 19:40:44.000000000 +0100
++++ dhcp-4.3.0rc1/common/inet.c 2014-01-29 10:05:48.519399936 +0100
+@@ -521,6 +521,60 @@ free_iaddrcidrnetlist(struct iaddrcidrne
return ISC_R_SUCCESS;
}
/* piaddr() turns an iaddr structure into a printable address. */
/* XXX: should use a const pointer rather than passing the structure */
const char *
-diff -up dhcp-4.2.2b1/common/options.c.rfc3442 dhcp-4.2.2b1/common/options.c
---- dhcp-4.2.2b1/common/options.c.rfc3442 2011-03-24 22:57:13.000000000 +0100
-+++ dhcp-4.2.2b1/common/options.c 2011-07-01 14:22:38.132532876 +0200
-@@ -706,7 +706,11 @@ cons_options(struct packet *inpacket, st
+diff -up dhcp-4.3.0rc1/common/options.c.rfc3442 dhcp-4.3.0rc1/common/options.c
+--- dhcp-4.3.0rc1/common/options.c.rfc3442 2014-01-26 19:40:44.000000000 +0100
++++ dhcp-4.3.0rc1/common/options.c 2014-01-29 10:05:48.520399927 +0100
+@@ -707,7 +707,11 @@ cons_options(struct packet *inpacket, st
* packet.
*/
priority_list[priority_len++] = DHO_SUBNET_MASK;
priority_list[priority_len++] = DHO_DOMAIN_NAME_SERVERS;
priority_list[priority_len++] = DHO_HOST_NAME;
priority_list[priority_len++] = DHO_FQDN;
-@@ -1683,6 +1687,7 @@ const char *pretty_print_option (option,
- const unsigned char *dp = data;
- char comma;
+@@ -1688,6 +1692,7 @@ const char *pretty_print_option (option,
unsigned long tval;
-+ unsigned int octets = 0;
+ isc_boolean_t a_array = ISC_FALSE;
+ int len_used;
++ unsigned int octets = 0;
if (emit_commas)
comma = ',';
-@@ -1691,6 +1696,7 @@ const char *pretty_print_option (option,
+@@ -1696,6 +1701,7 @@ const char *pretty_print_option (option,
memset (enumbuf, 0, sizeof enumbuf);
/* Figure out the size of the data. */
for (l = i = 0; option -> format [i]; i++, l++) {
if (l >= sizeof(fmtbuf) - 1)
-@@ -1840,6 +1846,33 @@ const char *pretty_print_option (option,
+@@ -1870,6 +1876,33 @@ const char *pretty_print_option (option,
if (numhunk < 0)
numhunk = 1;
+
/* Cycle through the array (or hunk) printing the data. */
for (i = 0; i < numhunk; i++) {
- for (j = 0; j < numelem; j++) {
-@@ -1978,6 +2011,20 @@ const char *pretty_print_option (option,
+ if ((a_array == ISC_TRUE) && (i != 0) && (numelem > 0)) {
+@@ -2025,6 +2058,20 @@ const char *pretty_print_option (option,
strcpy(op, piaddr(iaddr));
dp += 4;
break;
case '6':
iaddr.len = 16;
memcpy(iaddr.iabuf, dp, 16);
-diff -up dhcp-4.2.2b1/common/parse.c.rfc3442 dhcp-4.2.2b1/common/parse.c
---- dhcp-4.2.2b1/common/parse.c.rfc3442 2011-07-01 14:22:38.097533441 +0200
-+++ dhcp-4.2.2b1/common/parse.c 2011-07-01 14:22:38.135532828 +0200
-@@ -341,6 +341,39 @@ int parse_ip_addr (cfile, addr)
+diff -up dhcp-4.3.0rc1/common/parse.c.rfc3442 dhcp-4.3.0rc1/common/parse.c
+--- dhcp-4.3.0rc1/common/parse.c.rfc3442 2014-01-29 10:05:48.491400195 +0100
++++ dhcp-4.3.0rc1/common/parse.c 2014-01-29 10:05:48.522399908 +0100
+@@ -335,6 +335,39 @@ int parse_ip_addr (cfile, addr)
}
/*
* Return true if every character in the string is hexadecimal.
*/
static int
-@@ -700,8 +733,10 @@ unsigned char *parse_numeric_aggregate (
+@@ -713,8 +746,10 @@ unsigned char *parse_numeric_aggregate (
if (count) {
token = peek_token (&val, (unsigned *)0, cfile);
if (token != separator) {
if (token != RBRACE && token != LBRACE)
token = next_token (&val,
(unsigned *)0,
-@@ -1624,6 +1659,9 @@ int parse_option_code_definition (cfile,
+@@ -1654,6 +1689,9 @@ int parse_option_code_definition (cfile,
case IP_ADDRESS:
type = 'I';
break;
case IP6_ADDRESS:
type = '6';
break;
-@@ -5288,6 +5326,15 @@ int parse_option_token (rv, cfile, fmt,
+@@ -5071,6 +5109,15 @@ int parse_option_token (rv, cfile, fmt,
}
break;
case '6': /* IPv6 address. */
if (!parse_ip6_addr(cfile, &addr)) {
return 0;
-@@ -5548,6 +5595,13 @@ int parse_option_decl (oc, cfile)
+@@ -5348,6 +5395,13 @@ int parse_option_decl (oc, cfile)
goto exit;
len = ip_addr.len;
dp = ip_addr.iabuf;
alloc:
if (hunkix + len > sizeof hunkbuf) {
-diff -up dhcp-4.2.2b1/common/tables.c.rfc3442 dhcp-4.2.2b1/common/tables.c
---- dhcp-4.2.2b1/common/tables.c.rfc3442 2011-07-01 14:22:38.087533601 +0200
-+++ dhcp-4.2.2b1/common/tables.c 2011-07-01 14:22:38.137532796 +0200
-@@ -51,6 +51,7 @@ HASH_FUNCTIONS (option_code, const unsig
+diff -up dhcp-4.3.0rc1/common/tables.c.rfc3442 dhcp-4.3.0rc1/common/tables.c
+--- dhcp-4.3.0rc1/common/tables.c.rfc3442 2014-01-29 10:05:48.485400250 +0100
++++ dhcp-4.3.0rc1/common/tables.c 2014-01-29 10:06:25.724038563 +0100
+@@ -46,6 +46,7 @@ HASH_FUNCTIONS (option_code, const unsig
Format codes:
I - IPv4 address
6 - IPv6 address
l - 32-bit signed integer
L - 32-bit unsigned integer
-@@ -208,6 +209,7 @@ static struct option dhcp_options[] = {
- { "default-url", "t", &dhcp_universe, 114, 1 },
+@@ -214,6 +215,7 @@ static struct option dhcp_options[] = {
+ #endif
{ "subnet-selection", "I", &dhcp_universe, 118, 1 },
- { "domain-search", "D", &dhcp_universe, 119, 1 },
+ { "domain-search", "D", &dhcp_universe, 119, 1 },
+ { "classless-static-routes", "RIA", &dhcp_universe, 121, 1 },
{ "vivco", "Evendor-class.", &dhcp_universe, 124, 1 },
{ "vivso", "Evendor.", &dhcp_universe, 125, 1 },
#if 0
-diff -up dhcp-4.2.2b1/includes/dhcpd.h.rfc3442 dhcp-4.2.2b1/includes/dhcpd.h
---- dhcp-4.2.2b1/includes/dhcpd.h.rfc3442 2011-07-01 14:22:38.000000000 +0200
-+++ dhcp-4.2.2b1/includes/dhcpd.h 2011-07-01 14:24:19.999810333 +0200
-@@ -2662,6 +2662,7 @@ isc_result_t range2cidr(struct iaddrcidr
+diff -up dhcp-4.3.0rc1/includes/dhcpd.h.rfc3442 dhcp-4.3.0rc1/includes/dhcpd.h
+--- dhcp-4.3.0rc1/includes/dhcpd.h.rfc3442 2014-01-29 10:05:48.470400389 +0100
++++ dhcp-4.3.0rc1/includes/dhcpd.h 2014-01-29 10:05:48.525399881 +0100
+@@ -2725,6 +2725,7 @@ isc_result_t range2cidr(struct iaddrcidr
const struct iaddr *lo, const struct iaddr *hi);
isc_result_t free_iaddrcidrnetlist(struct iaddrcidrnetlist **result);
const char *piaddr (struct iaddr);
char *piaddrmask(struct iaddr *, struct iaddr *);
char *piaddrcidr(const struct iaddr *, unsigned int);
u_int16_t validate_port(char *);
-@@ -2869,6 +2870,7 @@ void parse_client_lease_declaration (str
+@@ -2934,6 +2935,7 @@ void parse_client_lease_declaration (str
int parse_option_decl (struct option_cache **, struct parse *);
void parse_string_list (struct parse *, struct string_list **, int);
int parse_ip_addr (struct parse *, struct iaddr *);
int parse_ip_addr_with_subnet(struct parse *, struct iaddrmatch *);
void parse_reject_statement (struct parse *, struct client_config *);
-diff -up dhcp-4.2.2b1/includes/dhcp.h.rfc3442 dhcp-4.2.2b1/includes/dhcp.h
---- dhcp-4.2.2b1/includes/dhcp.h.rfc3442 2009-11-20 02:49:01.000000000 +0100
-+++ dhcp-4.2.2b1/includes/dhcp.h 2011-07-01 14:22:38.145532665 +0200
-@@ -158,6 +158,7 @@ struct dhcp_packet {
+diff -up dhcp-4.3.0rc1/includes/dhcp.h.rfc3442 dhcp-4.3.0rc1/includes/dhcp.h
+--- dhcp-4.3.0rc1/includes/dhcp.h.rfc3442 2014-01-26 19:40:44.000000000 +0100
++++ dhcp-4.3.0rc1/includes/dhcp.h 2014-01-29 10:05:48.524399890 +0100
+@@ -159,6 +159,7 @@ struct dhcp_packet {
#define DHO_ASSOCIATED_IP 92
#define DHO_SUBNET_SELECTION 118 /* RFC3011! */
#define DHO_DOMAIN_SEARCH 119 /* RFC3397 */
#define DHO_VIVCO_SUBOPTIONS 124
#define DHO_VIVSO_SUBOPTIONS 125
-diff -up dhcp-4.2.2b1/includes/dhctoken.h.rfc3442 dhcp-4.2.2b1/includes/dhctoken.h
---- dhcp-4.2.2b1/includes/dhctoken.h.rfc3442 2011-07-01 14:22:37.000000000 +0200
-+++ dhcp-4.2.2b1/includes/dhctoken.h 2011-07-01 14:25:12.541867623 +0200
-@@ -362,7 +362,8 @@ enum dhcp_token {
- REWIND = 663,
- INITIAL_DELAY = 664,
- GETHOSTBYNAME = 665,
-- BOOTP_BROADCAST_ALWAYS = 666
-+ BOOTP_BROADCAST_ALWAYS = 666,
-+ DESTINATION_DESCRIPTOR = 667
+diff -up dhcp-4.3.0rc1/includes/dhctoken.h.rfc3442 dhcp-4.3.0rc1/includes/dhctoken.h
+--- dhcp-4.3.0rc1/includes/dhctoken.h.rfc3442 2014-01-29 10:05:48.435400713 +0100
++++ dhcp-4.3.0rc1/includes/dhctoken.h 2014-01-29 10:05:48.526399871 +0100
+@@ -368,7 +368,8 @@ enum dhcp_token {
+ POOL6 = 669,
+ V6RELAY = 670,
+ V6RELOPT = 671,
+- BOOTP_BROADCAST_ALWAYS = 672
++ BOOTP_BROADCAST_ALWAYS = 672,
++ DESTINATION_DESCRIPTOR = 673
};
#define is_identifier(x) ((x) >= FIRST_TOKEN && \
-diff -up dhcp-4.2.1-P1/client/dhc6.c.sendDecline dhcp-4.2.1-P1/client/dhc6.c
---- dhcp-4.2.1-P1/client/dhc6.c.sendDecline 2010-09-10 22:27:11.000000000 +0200
-+++ dhcp-4.2.1-P1/client/dhc6.c 2011-06-17 14:19:48.992099868 +0200
-@@ -95,6 +95,8 @@ void do_select6(void *input);
+diff -up dhcp-4.3.0a1/client/dhc6.c.sendDecline dhcp-4.3.0a1/client/dhc6.c
+--- dhcp-4.3.0a1/client/dhc6.c.sendDecline 2013-12-11 01:25:12.000000000 +0100
++++ dhcp-4.3.0a1/client/dhc6.c 2013-12-19 15:56:18.297660118 +0100
+@@ -96,6 +96,8 @@ void do_select6(void *input);
void do_refresh6(void *input);
static void do_release6(void *input);
static void start_bound(struct client_state *client);
static void start_informed(struct client_state *client);
void informed_handler(struct packet *packet, struct client_state *client);
void bound_handler(struct packet *packet, struct client_state *client);
-@@ -2075,6 +2077,7 @@ start_release6(struct client_state *clie
+@@ -2017,6 +2019,7 @@ start_release6(struct client_state *clie
cancel_timeout(do_select6, client);
cancel_timeout(do_refresh6, client);
cancel_timeout(do_release6, client);
client->state = S_STOPPED;
/*
-@@ -2708,6 +2711,7 @@ dhc6_check_reply(struct client_state *cl
+@@ -2650,6 +2653,7 @@ dhc6_check_reply(struct client_state *cl
break;
case S_STOPPED:
action = dhc6_stop_action;
break;
-@@ -2809,6 +2813,7 @@ dhc6_check_reply(struct client_state *cl
+@@ -2751,6 +2755,7 @@ dhc6_check_reply(struct client_state *cl
break;
case S_STOPPED:
/* Nothing critical to do at this stage. */
break;
-@@ -3799,17 +3804,23 @@ reply_handler(struct packet *packet, str
+@@ -3741,17 +3746,23 @@ reply_handler(struct packet *packet, str
cancel_timeout(do_select6, client);
cancel_timeout(do_refresh6, client);
cancel_timeout(do_release6, client);
return;
}
-@@ -4336,7 +4347,11 @@ start_bound(struct client_state *client)
- oldia, oldaddr);
+@@ -4279,7 +4290,11 @@ start_bound(struct client_state *client)
dhc6_marshall_values("new_", client, lease, ia, addr);
+ script_write_requested6(client);
- script_go(client);
+ // when script returns 3, DAD failed
}
/* XXX: maybe we should loop on the old values instead? */
-@@ -4382,6 +4397,149 @@ start_bound(struct client_state *client)
+@@ -4327,6 +4342,149 @@ start_bound(struct client_state *client)
dhc6_check_times(client);
}
--- /dev/null
+diff -up dhcp-4.3.1b1/common/tests/Makefile.am.uCWMBl dhcp-4.3.1b1/common/tests/Makefile.am
+--- dhcp-4.3.1b1/common/tests/Makefile.am.uCWMBl 2014-07-10 17:38:10.779828569 +0200
++++ dhcp-4.3.1b1/common/tests/Makefile.am 2014-07-10 17:38:21.355678580 +0200
+@@ -13,19 +13,19 @@ ATF_TESTS += alloc_unittest dns_unittest
+ alloc_unittest_SOURCES = test_alloc.c $(top_srcdir)/tests/t_api_dhcp.c
+ alloc_unittest_LDADD = $(ATF_LDFLAGS)
+ alloc_unittest_LDADD += ../libdhcp.a \
+- ../../omapip/libomapi.a \
++ ../../omapip/libomapi.la \
+ $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
+
+ dns_unittest_SOURCES = dns_unittest.c $(top_srcdir)/tests/t_api_dhcp.c
+ dns_unittest_LDADD = $(ATF_LDFLAGS)
+-dns_unittest_LDADD += ../libdhcp.a \
++dns_unittest_LDADD += ../libdhcp.la \
+ ../../omapip/libomapi.a \
+ $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
+
+ misc_unittest_SOURCES = misc_unittest.c $(top_srcdir)/tests/t_api_dhcp.c
+ misc_unittest_LDADD = $(ATF_LDFLAGS)
+ misc_unittest_LDADD += ../libdhcp.a \
+- ../../omapip/libomapi.a \
++ ../../omapip/libomapi.la \
+ $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
+ check: $(ATF_TESTS)
+ atf-run | atf-report
+diff -up dhcp-4.3.1b1/configure.ac.uCWMBl dhcp-4.3.1b1/configure.ac
+--- dhcp-4.3.1b1/configure.ac.uCWMBl 2014-07-10 17:38:10.766828753 +0200
++++ dhcp-4.3.1b1/configure.ac 2014-07-10 17:38:10.779828569 +0200
+@@ -39,7 +39,8 @@ fi
+ # Use this to define _GNU_SOURCE to pull in the IPv6 Advanced Socket API.
+ AC_USE_SYSTEM_EXTENSIONS
+
+-AC_PROG_RANLIB
++# Use libtool to simplify building of shared libraries
++AC_PROG_LIBTOOL
+ AC_CONFIG_HEADERS([includes/config.h])
+
+ # we sometimes need to know byte order for building packets
+diff -up dhcp-4.3.1b1/dhcpctl/Makefile.am.uCWMBl dhcp-4.3.1b1/dhcpctl/Makefile.am
+--- dhcp-4.3.1b1/dhcpctl/Makefile.am.uCWMBl 2014-07-10 17:36:30.485250962 +0200
++++ dhcp-4.3.1b1/dhcpctl/Makefile.am 2014-07-10 17:38:10.780828554 +0200
+@@ -1,14 +1,14 @@
+ bin_PROGRAMS = omshell
+-lib_LIBRARIES = libdhcpctl.a
++lib_LTLIBRARIES = libdhcpctl.la
+ noinst_PROGRAMS = cltest
+ man_MANS = omshell.1 dhcpctl.3
+ EXTRA_DIST = $(man_MANS)
+
+ omshell_SOURCES = omshell.c
+-omshell_LDADD = libdhcpctl.a ../common/libdhcp.a ../omapip/libomapi.a \
++omshell_LDADD = libdhcpctl.la ../common/libdhcp.a ../omapip/libomapi.la \
+ $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
+-libdhcpctl_a_SOURCES = dhcpctl.c callback.c remote.c
++libdhcpctl_la_SOURCES = dhcpctl.c callback.c remote.c
+
+ cltest_SOURCES = cltest.c
+-cltest_LDADD = libdhcpctl.a ../common/libdhcp.a ../omapip/libomapi.a \
++cltest_LDADD = libdhcpctl.la ../common/libdhcp.a ../omapip/libomapi.la \
+ $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
+diff -up dhcp-4.3.1b1/omapip/Makefile.am.uCWMBl dhcp-4.3.1b1/omapip/Makefile.am
+--- dhcp-4.3.1b1/omapip/Makefile.am.uCWMBl 2014-07-10 17:36:30.486250948 +0200
++++ dhcp-4.3.1b1/omapip/Makefile.am 2014-07-10 17:38:10.780828554 +0200
+@@ -1,7 +1,7 @@
+-lib_LIBRARIES = libomapi.a
++lib_LTLIBRARIES = libomapi.la
+ noinst_PROGRAMS = svtest
+
+-libomapi_a_SOURCES = protocol.c buffer.c alloc.c result.c connection.c \
++libomapi_la_SOURCES = protocol.c buffer.c alloc.c result.c connection.c \
+ errwarn.c listener.c dispatch.c generic.c support.c \
+ handle.c message.c convert.c hash.c auth.c inet_addr.c \
+ array.c trace.c toisc.c iscprint.c isclib.c
+@@ -10,5 +10,5 @@ man_MANS = omapi.3
+ EXTRA_DIST = $(man_MANS)
+
+ svtest_SOURCES = test.c
+-svtest_LDADD = libomapi.a \
++svtest_LDADD = libomapi.la \
+ $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
+diff -up dhcp-4.3.1b1/server/Makefile.am.uCWMBl dhcp-4.3.1b1/server/Makefile.am
+--- dhcp-4.3.1b1/server/Makefile.am.uCWMBl 2014-07-10 17:36:30.486250948 +0200
++++ dhcp-4.3.1b1/server/Makefile.am 2014-07-10 17:38:10.780828554 +0200
+@@ -13,7 +13,7 @@ dhcpd_SOURCES = dhcpd.c dhcp.c bootp.c c
+ dhcpv6.c mdb6.c ldap.c ldap_casa.c
+
+ dhcpd_CFLAGS = $(LDAP_CFLAGS)
+-dhcpd_LDADD = ../common/libdhcp.a ../omapip/libomapi.a ../dhcpctl/libdhcpctl.a \
++dhcpd_LDADD = ../common/libdhcp.a ../omapip/libomapi.la ../dhcpctl/libdhcpctl.la \
+ $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
+ man_MANS = dhcpd.8 dhcpd.conf.5 dhcpd.leases.5
+ EXTRA_DIST = $(man_MANS)
+diff -up dhcp-4.3.1b1/server/tests/Makefile.am.uCWMBl dhcp-4.3.1b1/server/tests/Makefile.am
+--- dhcp-4.3.1b1/server/tests/Makefile.am.uCWMBl 2014-07-10 17:36:30.486250948 +0200
++++ dhcp-4.3.1b1/server/tests/Makefile.am 2014-07-10 17:38:10.780828554 +0200
+@@ -17,8 +17,8 @@ DHCPSRC = ../dhcp.c ../bootp.c ../confpa
+ ../ddns.c ../dhcpleasequery.c ../dhcpv6.c ../mdb6.c \
+ ../ldap.c ../ldap_casa.c ../dhcpd.c
+
+-DHCPLIBS = $(top_builddir)/common/libdhcp.a $(top_builddir)/omapip/libomapi.a \
+- $(top_builddir)/dhcpctl/libdhcpctl.a \
++DHCPLIBS = $(top_builddir)/common/libdhcp.a $(top_builddir)/omapip/libomapi.la \
++ $(top_builddir)/dhcpctl/libdhcpctl.la \
+ $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
+
+ ATF_TESTS =
--- /dev/null
+From 61fa3dd9e789997f66e848c7e3fb2f554ee374e2 Mon Sep 17 00:00:00 2001
+From: Jiri Popelka <jpopelka@redhat.com>
+Date: Thu, 18 Dec 2014 11:53:26 +0100
+Subject: [PATCH] Write DUID_LLT even in stateless mode.
+
+By default, DHCPv6 dhclient creates DUID-LL
+if it is running in stateless mode (-6 -S) and
+doesn't write it into leases file, most likely
+because the DUID-LL is always generated the same.
+
+It's however possible to specify DUID to be of type LLT instead of LL
+with '-D LLT'. Rfc 3315 says that:
+'Clients and servers using this type of DUID MUST
+store the DUID-LLT in stable storage.'
+That's not fulfiled in this case (-6 -S -D LLT),
+because it's generated each time again.
+
+It's not a big deal because the server doesn't store any
+info about 'stateless' clients, so it doesn't matter
+that the DUID-LLT is different each time.
+But there's a TAHI test which tests this, i.e. that
+DUID-LLT is still the same even in stateless mode.
+It's a test DHCP_CONF.7.1.9, part B.
+https://www.ipv6ready.org/docs/Phase2_DHCPv6_Conformance_Latest.pdf
+
+Signed-off-by: Jiri Popelka <jpopelka@redhat.com>
+---
+ client/dhclient.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/client/dhclient.c b/client/dhclient.c
+index 5ef59cd..026e3fe 100644
+--- a/client/dhclient.c
++++ b/client/dhclient.c
+@@ -788,7 +788,9 @@ void run_stateless(int exit_mode)
+ if (default_duid.buffer != NULL)
+ data_string_forget(&default_duid, MDL);
+
+- form_duid(&default_duid, MDL);
++ if (form_duid(&default_duid, MDL) == ISC_R_SUCCESS &&
++ duid_type == DUID_LLT)
++ write_duid(&default_duid);
+ }
+
+ /* Start a configuration state machine. */
+--
+2.1.0
+
-diff -up dhcp-4.2.0/server/bootp.c.unicast dhcp-4.2.0/server/bootp.c
---- dhcp-4.2.0/server/bootp.c.unicast 2009-11-20 02:49:03.000000000 +0100
-+++ dhcp-4.2.0/server/bootp.c 2010-07-21 13:40:25.000000000 +0200
-@@ -58,6 +58,7 @@ void bootp (packet)
+diff -up dhcp-4.3.0a1/server/bootp.c.unicast dhcp-4.3.0a1/server/bootp.c
+--- dhcp-4.3.0a1/server/bootp.c.unicast 2013-12-11 01:25:12.000000000 +0100
++++ dhcp-4.3.0a1/server/bootp.c 2013-12-19 15:12:12.974671154 +0100
+@@ -59,6 +59,7 @@ void bootp (packet)
char msgbuf [1024];
int ignorep;
int peer_has_leases = 0;
if (packet -> raw -> op != BOOTREQUEST)
return;
-@@ -73,7 +74,7 @@ void bootp (packet)
+@@ -74,7 +75,7 @@ void bootp (packet)
? inet_ntoa (packet -> raw -> giaddr)
: packet -> interface -> name);
log_info ("%s: network unknown", msgbuf);
return;
}
-@@ -390,6 +391,13 @@ void bootp (packet)
- from, &to, &hto);
+@@ -396,6 +397,15 @@ void bootp (packet)
+
goto out;
}
+ } else if (norelay == 2) {
+ to.sin_addr = raw.ciaddr;
+ to.sin_port = remote_port;
+ if (fallback_interface) {
-+ result = send_packet (fallback_interface, (struct packet *)0, &raw, outgoing.packet_length, from, &to, &hto);
++ result = send_packet (fallback_interface, NULL, &raw,
++ outgoing.packet_length, from,
++ &to, &hto);
+ goto out;
+ }
/* If it comes from a client that already knows its address
and is not requesting a broadcast response, and we can
-diff -up dhcp-4.2.0/server/dhcp.c.unicast dhcp-4.2.0/server/dhcp.c
---- dhcp-4.2.0/server/dhcp.c.unicast 2010-06-01 19:29:59.000000000 +0200
-+++ dhcp-4.2.0/server/dhcp.c 2010-07-21 13:40:25.000000000 +0200
-@@ -4185,6 +4185,7 @@ int locate_network (packet)
+diff -up dhcp-4.3.0a1/server/dhcp.c.unicast dhcp-4.3.0a1/server/dhcp.c
+--- dhcp-4.3.0a1/server/dhcp.c.unicast 2013-12-13 21:50:38.000000000 +0100
++++ dhcp-4.3.0a1/server/dhcp.c 2013-12-19 15:12:12.975671140 +0100
+@@ -4627,6 +4627,7 @@ int locate_network (packet)
struct data_string data;
struct subnet *subnet = (struct subnet *)0;
struct option_cache *oc;
/* See if there's a Relay Agent Link Selection Option, or a
* Subnet Selection Option. The Link-Select and Subnet-Select
-@@ -4200,12 +4201,24 @@ int locate_network (packet)
+@@ -4642,12 +4643,24 @@ int locate_network (packet)
from the interface, if there is one. If not, fail. */
if (!oc && !packet -> raw -> giaddr.s_addr) {
if (packet -> interface -> shared_network) {
}
/* If there's an option indicating link connection, and it's valid,
-@@ -4228,7 +4241,10 @@ int locate_network (packet)
+@@ -4670,7 +4683,10 @@ int locate_network (packet)
data_string_forget (&data, MDL);
} else {
ia.len = 4;
}
/* If we know the subnet on which the IP address lives, use it. */
-@@ -4236,7 +4252,10 @@ int locate_network (packet)
+@@ -4678,7 +4694,10 @@ int locate_network (packet)
shared_network_reference (&packet -> shared_network,
subnet -> shared_network, MDL);
subnet_dereference (&subnet, MDL);
-diff -up dhcp-4.2.2b1/common/bpf.c.xen dhcp-4.2.2b1/common/bpf.c
---- dhcp-4.2.2b1/common/bpf.c.xen 2009-11-20 02:48:59.000000000 +0100
-+++ dhcp-4.2.2b1/common/bpf.c 2011-07-01 14:00:16.936959001 +0200
-@@ -485,7 +485,7 @@ ssize_t receive_packet (interface, buf,
- offset = decode_udp_ip_header (interface,
- interface -> rbuf,
- interface -> rbuf_offset,
+diff -up dhcp-4.3.0rc1/common/bpf.c.xen dhcp-4.3.0rc1/common/bpf.c
+--- dhcp-4.3.0rc1/common/bpf.c.xen 2014-01-29 10:03:27.503941664 +0100
++++ dhcp-4.3.0rc1/common/bpf.c 2014-01-29 10:03:37.564812175 +0100
+@@ -481,7 +481,7 @@ ssize_t receive_packet (interface, buf,
+ /* Decode the IP and UDP headers... */
+ offset = decode_udp_ip_header(interface, interface->rbuf,
+ interface->rbuf_offset,
- from, hdr.bh_caplen, &paylen);
+ from, hdr.bh_caplen, &paylen, 0);
/* If the IP or UDP checksum was bad, skip the packet... */
if (offset < 0) {
-diff -up dhcp-4.2.2b1/common/dlpi.c.xen dhcp-4.2.2b1/common/dlpi.c
---- dhcp-4.2.2b1/common/dlpi.c.xen 2011-05-11 16:20:59.000000000 +0200
-+++ dhcp-4.2.2b1/common/dlpi.c 2011-07-01 14:00:16.937958997 +0200
-@@ -693,7 +693,7 @@ ssize_t receive_packet (interface, buf,
+diff -up dhcp-4.3.0rc1/common/dlpi.c.xen dhcp-4.3.0rc1/common/dlpi.c
+--- dhcp-4.3.0rc1/common/dlpi.c.xen 2014-01-25 05:18:03.000000000 +0100
++++ dhcp-4.3.0rc1/common/dlpi.c 2014-01-29 10:03:27.503941664 +0100
+@@ -691,7 +691,7 @@ ssize_t receive_packet (interface, buf,
length -= offset;
#endif
offset = decode_udp_ip_header (interface, dbuf, bufix,
/*
* If the IP or UDP checksum was bad, skip the packet...
-diff -up dhcp-4.2.2b1/common/lpf.c.xen dhcp-4.2.2b1/common/lpf.c
---- dhcp-4.2.2b1/common/lpf.c.xen 2011-05-10 16:38:58.000000000 +0200
-+++ dhcp-4.2.2b1/common/lpf.c 2011-07-01 14:11:24.725748028 +0200
-@@ -29,19 +29,33 @@
+diff -up dhcp-4.3.0rc1/common/lpf.c.xen dhcp-4.3.0rc1/common/lpf.c
+--- dhcp-4.3.0rc1/common/lpf.c.xen 2014-01-25 05:18:03.000000000 +0100
++++ dhcp-4.3.0rc1/common/lpf.c 2014-01-29 10:03:27.504941651 +0100
+@@ -29,14 +29,15 @@
+
#include "dhcpd.h"
#if defined (USE_LPF_SEND) || defined (USE_LPF_RECEIVE)
- #include <sys/ioctl.h>
+#include <sys/socket.h>
#include <sys/uio.h>
#include <errno.h>
#include "includes/netinet/ip.h"
#include "includes/netinet/udp.h"
#include "includes/netinet/if_ether.h"
- #include <net/if.h>
+@@ -51,6 +52,19 @@
+ /* Reinitializes the specified interface after an address change. This
+ is not required for packet-filter APIs. */
+#ifndef PACKET_AUXDATA
+#define PACKET_AUXDATA 8
+};
+#endif
+
- /* Reinitializes the specified interface after an address change. This
- is not required for packet-filter APIs. */
-
-@@ -67,10 +81,14 @@ int if_register_lpf (info)
+ #ifdef USE_LPF_SEND
+ void if_reinitialize_send (info)
+ struct interface_info *info;
+@@ -73,10 +87,14 @@ int if_register_lpf (info)
struct interface_info *info;
{
int sock;
htons((short)ETH_P_ALL))) < 0) {
if (errno == ENOPROTOOPT || errno == EPROTONOSUPPORT ||
errno == ESOCKTNOSUPPORT || errno == EPFNOSUPPORT ||
-@@ -85,11 +103,17 @@ int if_register_lpf (info)
+@@ -91,11 +109,17 @@ int if_register_lpf (info)
log_fatal ("Open a socket for LPF: %m");
}
if (errno == ENOPROTOOPT || errno == EPROTONOSUPPORT ||
errno == ESOCKTNOSUPPORT || errno == EPFNOSUPPORT ||
errno == EAFNOSUPPORT || errno == EINVAL) {
-@@ -171,9 +195,18 @@ static void lpf_gen_filter_setup (struct
+@@ -177,9 +201,18 @@ static void lpf_gen_filter_setup (struct
void if_register_receive (info)
struct interface_info *info;
{
#if defined (HAVE_TR_SUPPORT)
if (info -> hw_address.hbuf [0] == HTYPE_IEEE802)
lpf_tr_filter_setup (info);
-@@ -295,7 +328,6 @@ ssize_t send_packet (interface, packet,
+@@ -301,7 +334,6 @@ ssize_t send_packet (interface, packet,
double hh [16];
double ih [1536 / sizeof (double)];
unsigned char *buf = (unsigned char *)ih;
int result;
int fudge;
-@@ -316,17 +348,7 @@ ssize_t send_packet (interface, packet,
+@@ -322,17 +354,7 @@ ssize_t send_packet (interface, packet,
(unsigned char *)raw, len);
memcpy (buf + ibufp, raw, len);
if (result < 0)
log_error ("send_packet: %m");
return result;
-@@ -343,14 +365,35 @@ ssize_t receive_packet (interface, buf,
+@@ -349,14 +371,35 @@ ssize_t receive_packet (interface, buf,
{
int length = 0;
int offset = 0;
bufix = 0;
/* Decode the physical header... */
offset = decode_hw_header (interface, ibuf, bufix, hfrom);
-@@ -367,7 +410,7 @@ ssize_t receive_packet (interface, buf,
+@@ -373,7 +416,7 @@ ssize_t receive_packet (interface, buf,
/* Decode the IP and UDP headers... */
offset = decode_udp_ip_header (interface, ibuf, bufix, from,
/* If the IP or UDP checksum was bad, skip the packet... */
if (offset < 0)
-diff -up dhcp-4.2.2b1/common/nit.c.xen dhcp-4.2.2b1/common/nit.c
---- dhcp-4.2.2b1/common/nit.c.xen 2009-11-20 02:49:01.000000000 +0100
-+++ dhcp-4.2.2b1/common/nit.c 2011-07-01 14:00:16.939958989 +0200
-@@ -369,7 +369,7 @@ ssize_t receive_packet (interface, buf,
+diff -up dhcp-4.3.0rc1/common/nit.c.xen dhcp-4.3.0rc1/common/nit.c
+--- dhcp-4.3.0rc1/common/nit.c.xen 2014-01-26 19:40:44.000000000 +0100
++++ dhcp-4.3.0rc1/common/nit.c 2014-01-29 10:03:27.504941651 +0100
+@@ -363,7 +363,7 @@ ssize_t receive_packet (interface, buf,
/* Decode the IP and UDP headers... */
offset = decode_udp_ip_header (interface, ibuf, bufix,
/* If the IP or UDP checksum was bad, skip the packet... */
if (offset < 0)
-diff -up dhcp-4.2.2b1/common/packet.c.xen dhcp-4.2.2b1/common/packet.c
---- dhcp-4.2.2b1/common/packet.c.xen 2009-07-23 20:52:20.000000000 +0200
-+++ dhcp-4.2.2b1/common/packet.c 2011-07-01 14:00:16.939958989 +0200
-@@ -211,7 +211,7 @@ ssize_t
+diff -up dhcp-4.3.0rc1/common/packet.c.xen dhcp-4.3.0rc1/common/packet.c
+--- dhcp-4.3.0rc1/common/packet.c.xen 2013-12-11 01:01:02.000000000 +0100
++++ dhcp-4.3.0rc1/common/packet.c 2014-01-29 10:03:27.504941651 +0100
+@@ -226,7 +226,7 @@ ssize_t
decode_udp_ip_header(struct interface_info *interface,
unsigned char *buf, unsigned bufix,
struct sockaddr_in *from, unsigned buflen,
{
unsigned char *data;
struct ip ip;
-@@ -322,7 +322,7 @@ decode_udp_ip_header(struct interface_in
+@@ -337,7 +337,7 @@ decode_udp_ip_header(struct interface_in
8, IPPROTO_UDP + ulen))));
udp_packets_seen++;
udp_packets_bad_checksum++;
if (udp_packets_seen > 4 &&
(udp_packets_seen / udp_packets_bad_checksum) < 2) {
-diff -up dhcp-4.2.2b1/common/upf.c.xen dhcp-4.2.2b1/common/upf.c
---- dhcp-4.2.2b1/common/upf.c.xen 2009-11-20 02:49:01.000000000 +0100
-+++ dhcp-4.2.2b1/common/upf.c 2011-07-01 14:00:16.940958986 +0200
-@@ -320,7 +320,7 @@ ssize_t receive_packet (interface, buf,
+diff -up dhcp-4.3.0rc1/common/upf.c.xen dhcp-4.3.0rc1/common/upf.c
+--- dhcp-4.3.0rc1/common/upf.c.xen 2014-01-26 19:40:44.000000000 +0100
++++ dhcp-4.3.0rc1/common/upf.c 2014-01-29 10:03:27.505941638 +0100
+@@ -314,7 +314,7 @@ ssize_t receive_packet (interface, buf,
/* Decode the IP and UDP headers... */
offset = decode_udp_ip_header (interface, ibuf, bufix,
/* If the IP or UDP checksum was bad, skip the packet... */
if (offset < 0)
-diff -up dhcp-4.2.2b1/includes/dhcpd.h.xen dhcp-4.2.2b1/includes/dhcpd.h
---- dhcp-4.2.2b1/includes/dhcpd.h.xen 2011-07-01 14:00:16.000000000 +0200
-+++ dhcp-4.2.2b1/includes/dhcpd.h 2011-07-01 14:12:18.069642470 +0200
-@@ -2796,7 +2796,7 @@ ssize_t decode_hw_header (struct interfa
+diff -up dhcp-4.3.0rc1/includes/dhcpd.h.xen dhcp-4.3.0rc1/includes/dhcpd.h
+--- dhcp-4.3.0rc1/includes/dhcpd.h.xen 2014-01-29 10:03:27.489941844 +0100
++++ dhcp-4.3.0rc1/includes/dhcpd.h 2014-01-29 10:03:27.506941626 +0100
+@@ -2861,7 +2861,7 @@ ssize_t decode_hw_header (struct interfa
unsigned, struct hardware *);
ssize_t decode_udp_ip_header (struct interface_info *, unsigned char *,
unsigned, struct sockaddr_in *,
diff --git a/Makefile b/Makefile
-index 58a7975..616c6b7 100644
+index 2910320b6452..0a76ce3c5154 100644
--- a/Makefile
+++ b/Makefile
-@@ -69,7 +69,7 @@ objs = cache.o rfc1035.o util.o option.o forward.o network.o \
+@@ -73,7 +73,7 @@ objs = cache.o rfc1035.o util.o option.o forward.o network.o \
dnsmasq.o dhcp.o lease.o rfc2131.o netlink.o dbus.o bpf.o \
helper.o tftp.o log.o conntrack.o dhcp6.o rfc3315.o \
dhcp-common.o outpacket.o radv.o slaac.o auth.o ipset.o \
-- domain.o dnssec.o blockdata.o tables.o loop.o
-+ domain.o dnssec.o blockdata.o tables.o loop.o isc.o
+- domain.o dnssec.o blockdata.o tables.o loop.o inotify.o
++ domain.o dnssec.o blockdata.o tables.o loop.o inotify.o isc.o
hdrs = dnsmasq.h config.h dhcp-protocol.h dhcp6-protocol.h \
dns-protocol.h radv-protocol.h ip6addr.h
diff --git a/src/cache.c b/src/cache.c
-index 2c3a498..77a7046 100644
+index 117ae279fd4e..6ee7ee362e6c 100644
--- a/src/cache.c
+++ b/src/cache.c
@@ -17,7 +17,7 @@
#ifdef HAVE_DNSSEC
cache_blockdata_free(crecp);
#endif
-@@ -1110,7 +1113,7 @@ void cache_reload(void)
- total_size = read_hostsfile(ah->fname, ah->index, total_size, (struct crec **)daemon->packet, revhashsz);
+@@ -1151,7 +1154,7 @@ void cache_reload(void)
+
}
-#ifdef HAVE_DHCP
struct in_addr a_record_from_hosts(char *name, time_t now)
{
struct crec *crecp = NULL;
-@@ -1188,7 +1191,7 @@ void cache_add_dhcp_entry(char *host_name, int prot,
+@@ -1229,7 +1232,7 @@ void cache_add_dhcp_entry(char *host_name, int prot,
addrlen = sizeof(struct in6_addr);
}
#endif
inet_ntop(prot, host_address, daemon->addrbuff, ADDRSTRLEN);
while ((crec = cache_find_by_name(crec, host_name, 0, flags | F_CNAME)))
-@@ -1253,7 +1256,11 @@ void cache_add_dhcp_entry(char *host_name, int prot,
+@@ -1294,7 +1297,11 @@ void cache_add_dhcp_entry(char *host_name, int prot,
else
crec->ttd = ttd;
crec->addr.addr = *host_address;
cache_hash(crec);
diff --git a/src/dnsmasq.c b/src/dnsmasq.c
-index f4a89fc..a448ec4 100644
+index e903a24c8105..eefc7f939933 100644
--- a/src/dnsmasq.c
+++ b/src/dnsmasq.c
-@@ -940,6 +940,11 @@ int main (int argc, char **argv)
+@@ -970,6 +970,11 @@ int main (int argc, char **argv)
poll_resolv(0, daemon->last_resolv != 0, now);
daemon->last_resolv = now;
+ load_dhcp(now);
+#endif
}
-
- if (FD_ISSET(piperead, &rset))
+ #endif
+
diff --git a/src/dnsmasq.h b/src/dnsmasq.h
-index e74b15a..4a35168 100644
+index 89e758b56a0a..c5edd6fdf7f5 100644
--- a/src/dnsmasq.h
+++ b/src/dnsmasq.h
-@@ -1463,9 +1463,13 @@ time_t periodic_slaac(time_t now, struct dhcp_lease *leases);
- void slaac_ping_reply(struct in6_addr *sender, unsigned char *packet, char *interface, struct dhcp_lease *leases);
+@@ -1502,3 +1502,8 @@ void inotify_dnsmasq_init();
+ int inotify_check(time_t now);
+ void set_dynamic_inotify(int flag, int total_size, struct crec **rhash, int revhashsz);
#endif
-
++
+/* isc.c */
+#ifdef HAVE_ISC_READER
+void load_dhcp(time_t now);
+#endif
-+
- /* loop.c */
- #ifdef HAVE_LOOP
- void loop_send_probes();
- int detect_loop(char *query, int type);
- #endif
--
diff --git a/src/isc.c b/src/isc.c
new file mode 100644
-index 0000000..5106442
+index 000000000000..51064426f17f
--- /dev/null
+++ b/src/isc.c
@@ -0,0 +1,251 @@
+
+#endif
diff --git a/src/option.c b/src/option.c
-index 45d8875..29c9ee5 100644
+index cb4e76ba0aa2..f6420fcbb7ab 100644
--- a/src/option.c
+++ b/src/option.c
-@@ -1669,7 +1669,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
+@@ -1693,7 +1693,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
ret_err(_("bad MX target"));
break;
--- /dev/null
+From f2658275b25ebfe691cdcb9fede85a3088cca168 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Thu, 25 Sep 2014 21:51:25 +0100
+Subject: [PATCH 01/98] Add newline at the end of example config file.
+
+---
+ dnsmasq.conf.example | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/dnsmasq.conf.example b/dnsmasq.conf.example
+index 83924fc4a9b4..6b00bd34fbb5 100644
+--- a/dnsmasq.conf.example
++++ b/dnsmasq.conf.example
+@@ -645,4 +645,4 @@
+ #conf-dir=/etc/dnsmasq.d,.bak
+
+ # Include all files in a directory which end in .conf
+-#conf-dir=/etc/dnsmasq.d/*.conf
+\ No newline at end of file
++#conf-dir=/etc/dnsmasq.d/*.conf
+--
+2.1.0
+
--- /dev/null
+From 00cd9d551998307225312fd21f761cfa8868bd2c Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Thu, 2 Oct 2014 21:44:21 +0100
+Subject: [PATCH 02/98] crash at startup when an empty suffix is supplied to
+ --conf-dir
+
+---
+ CHANGELOG | 6 ++++++
+ src/option.c | 38 +++++++++++++++++++++++---------------
+ 2 files changed, 29 insertions(+), 15 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 768e2aaca42a..13ab41c05fc3 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -1,3 +1,9 @@
++version 2.73
++ Fix crash at startup when an empty suffix is supplied to
++ --conf-dir, also trivial memory leak. Thanks to
++ Tomas Hozza for spotting this.
++
++
+ version 2.72
+ Add ra-advrouter mode, for RFC-3775 mobile IPv6 support.
+
+diff --git a/src/option.c b/src/option.c
+index 45d8875fb7f9..b08e98e16f84 100644
+--- a/src/option.c
++++ b/src/option.c
+@@ -1474,22 +1474,25 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
+ for (arg = comma; arg; arg = comma)
+ {
+ comma = split(arg);
+- li = opt_malloc(sizeof(struct list));
+- if (*arg == '*')
++ if (strlen(arg) != 0)
+ {
+- li->next = match_suffix;
+- match_suffix = li;
+- /* Have to copy: buffer is overwritten */
+- li->suffix = opt_string_alloc(arg+1);
+- }
+- else
+- {
+- li->next = ignore_suffix;
+- ignore_suffix = li;
+- /* Have to copy: buffer is overwritten */
+- li->suffix = opt_string_alloc(arg);
++ li = opt_malloc(sizeof(struct list));
++ if (*arg == '*')
++ {
++ li->next = match_suffix;
++ match_suffix = li;
++ /* Have to copy: buffer is overwritten */
++ li->suffix = opt_string_alloc(arg+1);
++ }
++ else
++ {
++ li->next = ignore_suffix;
++ ignore_suffix = li;
++ /* Have to copy: buffer is overwritten */
++ li->suffix = opt_string_alloc(arg);
++ }
+ }
+- };
++ }
+
+ if (!(dir_stream = opendir(directory)))
+ die(_("cannot access directory %s: %s"), directory, EC_FILE);
+@@ -1555,7 +1558,12 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
+ free(ignore_suffix->suffix);
+ free(ignore_suffix);
+ }
+-
++ for(; match_suffix; match_suffix = li)
++ {
++ li = match_suffix->next;
++ free(match_suffix->suffix);
++ free(match_suffix);
++ }
+ break;
+ }
+
+--
+2.1.0
+
--- /dev/null
+From 6ac3bc0452a74e16e3d620a0757b0f8caab182ec Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Fri, 3 Oct 2014 08:48:11 +0100
+Subject: [PATCH 03/98] Debian build fixes for kFreeBSD
+
+---
+ src/tables.c | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/src/tables.c b/src/tables.c
+index 834f11944cd0..dcdef794c4d2 100644
+--- a/src/tables.c
++++ b/src/tables.c
+@@ -20,6 +20,10 @@
+
+ #if defined(HAVE_IPSET) && defined(HAVE_BSD_NETWORK)
+
++#ifndef __FreeBSD__
++#include <bsd/string.h>
++#endif
++
+ #include <sys/types.h>
+ #include <sys/ioctl.h>
+
+@@ -136,7 +140,7 @@ int add_to_ipset(const char *setname, const struct all_addr *ipaddr,
+ return -1;
+ }
+
+- if (rc = pfr_add_tables(&table, 1, &n, 0))
++ if ((rc = pfr_add_tables(&table, 1, &n, 0)))
+ {
+ my_syslog(LOG_WARNING, _("warning: pfr_add_tables: %s(%d)"),
+ pfr_strerror(errno),rc);
+--
+2.1.0
+
--- /dev/null
+From e9828b6f66b22ce8873f8d30a773137d1aef1b92 Mon Sep 17 00:00:00 2001
+From: Karl Vogel <karl.vogel@gmail.com>
+Date: Fri, 3 Oct 2014 21:45:15 +0100
+Subject: [PATCH 04/98] Set conntrack mark before connect() call.
+
+SO_MARK has to be done before issuing the connect() call on the
+TCP socket.
+---
+ src/forward.c | 36 ++++++++++++++++++------------------
+ 1 file changed, 18 insertions(+), 18 deletions(-)
+
+diff --git a/src/forward.c b/src/forward.c
+index 4895efeba89a..2cf29eba6e26 100644
+--- a/src/forward.c
++++ b/src/forward.c
+@@ -1796,6 +1796,24 @@ unsigned char *tcp_request(int confd, time_t now,
+ if ((last_server->tcpfd = socket(last_server->addr.sa.sa_family, SOCK_STREAM, 0)) == -1)
+ continue;
+
++#ifdef HAVE_CONNTRACK
++ /* Copy connection mark of incoming query to outgoing connection. */
++ if (option_bool(OPT_CONNTRACK))
++ {
++ unsigned int mark;
++ struct all_addr local;
++#ifdef HAVE_IPV6
++ if (local_addr->sa.sa_family == AF_INET6)
++ local.addr.addr6 = local_addr->in6.sin6_addr;
++ else
++#endif
++ local.addr.addr4 = local_addr->in.sin_addr;
++
++ if (get_incoming_mark(&peer_addr, &local, 1, &mark))
++ setsockopt(last_server->tcpfd, SOL_SOCKET, SO_MARK, &mark, sizeof(unsigned int));
++ }
++#endif
++
+ if ((!local_bind(last_server->tcpfd, &last_server->source_addr, last_server->interface, 1) ||
+ connect(last_server->tcpfd, &last_server->addr.sa, sa_len(&last_server->addr)) == -1))
+ {
+@@ -1820,24 +1838,6 @@ unsigned char *tcp_request(int confd, time_t now,
+ size = new_size;
+ }
+ #endif
+-
+-#ifdef HAVE_CONNTRACK
+- /* Copy connection mark of incoming query to outgoing connection. */
+- if (option_bool(OPT_CONNTRACK))
+- {
+- unsigned int mark;
+- struct all_addr local;
+-#ifdef HAVE_IPV6
+- if (local_addr->sa.sa_family == AF_INET6)
+- local.addr.addr6 = local_addr->in6.sin6_addr;
+- else
+-#endif
+- local.addr.addr4 = local_addr->in.sin_addr;
+-
+- if (get_incoming_mark(&peer_addr, &local, 1, &mark))
+- setsockopt(last_server->tcpfd, SOL_SOCKET, SO_MARK, &mark, sizeof(unsigned int));
+- }
+-#endif
+ }
+
+ *length = htons(size);
+--
+2.1.0
+
--- /dev/null
+From 17b475912f6a4e72797a543dad59d4d5dde6bb1b Mon Sep 17 00:00:00 2001
+From: Daniel Collins <daniel.collins@smoothwall.net>
+Date: Fri, 3 Oct 2014 21:58:43 +0100
+Subject: [PATCH 05/98] Fix typo in new Dbus code.
+
+Simon's fault.
+---
+ src/dbus.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/dbus.c b/src/dbus.c
+index 15fed906bd90..a2a94dc85dac 100644
+--- a/src/dbus.c
++++ b/src/dbus.c
+@@ -426,7 +426,7 @@ static DBusMessage *dbus_set_bool(DBusMessage *message, int flag, char *name)
+ }
+ else
+ {
+- my_syslog(LOG_INFO, "Disabling --$s option from D-Bus", name);
++ my_syslog(LOG_INFO, "Disabling --%s option from D-Bus", name);
+ reset_option_bool(flag);
+ }
+
+--
+2.1.0
+
--- /dev/null
+From 3d9d2dd0018603a2ae4b9cd65ac6ff959f4fd8c7 Mon Sep 17 00:00:00 2001
+From: Tomas Hozza <thozza@redhat.com>
+Date: Mon, 6 Oct 2014 10:46:48 +0100
+Subject: [PATCH 06/98] Fit example conf file typo.
+
+---
+ dnsmasq.conf.example | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/dnsmasq.conf.example b/dnsmasq.conf.example
+index 6b00bd34fbb5..1bd305dbdbad 100644
+--- a/dnsmasq.conf.example
++++ b/dnsmasq.conf.example
+@@ -645,4 +645,4 @@
+ #conf-dir=/etc/dnsmasq.d,.bak
+
+ # Include all files in a directory which end in .conf
+-#conf-dir=/etc/dnsmasq.d/*.conf
++#conf-dir=/etc/dnsmasq.d/,*.conf
+--
+2.1.0
+
--- /dev/null
+From b9ff5c8f435173cfa616e3c398bdc089ef690a07 Mon Sep 17 00:00:00 2001
+From: Vladislav Grishenko <themiron@mail.ru>
+Date: Mon, 6 Oct 2014 14:34:24 +0100
+Subject: [PATCH 07/98] Improve RFC-compliance when unable to supply addresses
+ in DHCPv6
+
+While testing https://github.com/sbyx/odhcp6c client I have noticed it
+permanently crashes after startup.
+
+The reason was it (odhcp6c) doesn't expect empty IA options in ADVERTISE
+message without any suboptions.
+
+Despite this validation bug of odhcp6c, dnsmasq should not generate
+ADVERTISE messages with IA if there's nothing to advert per RFC 3315
+17.2.2:
+
+ If the server will not assign any addresses to any IAs in a
+
+ subsequent Request from the client, the server MUST send an Advertise
+
+ message to the client that includes only a Status Code option with
+
+ code NoAddrsAvail and a status message for the user, a Server
+
+ Identifier option with the server's DUID, and a Client Identifier
+
+ option with the client's DUID.
+
+Meanwhile it's need to add status code for every IA in REPLY message per
+RFC3315 18.2.1:
+
+ If the server cannot assign any addresses to an IA in the message
+ from the client, the server MUST include the IA in the Reply message
+ with no addresses in the IA and a Status Code option in the IA
+ containing status code NoAddrsAvail.
+
+So, I've changed the logic to skip IA completely from ADVERTISE messages and
+to add NoAddrsAvail subcode into IA of REPLY messages.
+
+As for overhead, yes, I believe it's ok to return NoAddrsAvail twice in IA
+and in global section for compatibility with all old and new clients.
+---
+ src/rfc3315.c | 27 +++++++++++++++++++++++++--
+ 1 file changed, 25 insertions(+), 2 deletions(-)
+
+diff --git a/src/rfc3315.c b/src/rfc3315.c
+index 5ebf09d50ac1..ddb390bf1136 100644
+--- a/src/rfc3315.c
++++ b/src/rfc3315.c
+@@ -691,6 +691,8 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
+ #endif
+
+ o = build_ia(state, &t1cntr);
++ if (address_assigned)
++ address_assigned = 2;
+
+ for (ia_counter = 0; ia_option; ia_counter++, ia_option = opt6_find(opt6_next(ia_option, ia_end), ia_end, OPTION6_IAADDR, 24))
+ {
+@@ -781,6 +783,27 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
+ address_assigned = 1;
+ }
+
++ if (address_assigned != 1)
++ {
++ /* If the server will not assign any addresses to any IAs in a
++ subsequent Request from the client, the server MUST send an Advertise
++ message to the client that doesn't include any IA options. */
++ if (!state->lease_allocate)
++ {
++ save_counter(o);
++ continue;
++ }
++
++ /* If the server cannot assign any addresses to an IA in the message
++ from the client, the server MUST include the IA in the Reply message
++ with no addresses in the IA and a Status Code option in the IA
++ containing status code NoAddrsAvail. */
++ o1 = new_opt6(OPTION6_STATUS_CODE);
++ put_opt6_short(DHCP6NOADDRS);
++ put_opt6_string(_("address unavailable"));
++ end_opt6(o1);
++ }
++
+ end_ia(t1cntr, min_time, 0);
+ end_opt6(o);
+ }
+@@ -806,7 +829,7 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
+ put_opt6_short(DHCP6NOADDRS);
+ put_opt6_string(_("no addresses available"));
+ end_opt6(o1);
+- log6_packet(state, "DHCPADVERTISE", NULL, _("no addresses available"));
++ log6_packet(state, state->lease_allocate ? "DHCPREPLY" : "DHCPADVERTISE", NULL, _("no addresses available"));
+ }
+
+ break;
+@@ -862,7 +885,7 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
+ {
+ /* Static range, not configured. */
+ o1 = new_opt6(OPTION6_STATUS_CODE);
+- put_opt6_short(DHCP6UNSPEC);
++ put_opt6_short(DHCP6NOADDRS);
+ put_opt6_string(_("address unavailable"));
+ end_opt6(o1);
+ }
+--
+2.1.0
+
--- /dev/null
+From 98906275a02ae260fe3f82133bd79054f8315f06 Mon Sep 17 00:00:00 2001
+From: Hans Dedecker <dedeckeh@gmail.com>
+Date: Tue, 9 Dec 2014 22:22:53 +0000
+Subject: [PATCH 08/98] Fix conntrack with --bind-interfaces
+
+Make sure dst_addr is assigned the correct address in receive_query when OPTNOWILD is
+enabled so the assigned mark can be correctly retrieved and set in forward_query when
+conntrack is enabled.
+
+Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
+---
+ src/forward.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/forward.c b/src/forward.c
+index 2cf29eba6e26..408a179a20f4 100644
+--- a/src/forward.c
++++ b/src/forward.c
+@@ -1048,7 +1048,7 @@ void receive_query(struct listener *listen, time_t now)
+ /* packet buffer overwritten */
+ daemon->srv_save = NULL;
+
+- dst_addr_4.s_addr = 0;
++ dst_addr_4.s_addr = dst_addr.addr.addr4.s_addr = 0;
+ netmask.s_addr = 0;
+
+ if (option_bool(OPT_NOWILD) && listen->iface)
+@@ -1057,7 +1057,7 @@ void receive_query(struct listener *listen, time_t now)
+
+ if (listen->family == AF_INET)
+ {
+- dst_addr_4 = listen->iface->addr.in.sin_addr;
++ dst_addr_4 = dst_addr.addr.addr4 = listen->iface->addr.in.sin_addr;
+ netmask = listen->iface->netmask;
+ }
+ }
+--
+2.1.0
+
--- /dev/null
+From 193de4abf59e49c6b70d54cfe9720fcb95ca2f71 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Wed, 10 Dec 2014 17:32:16 +0000
+Subject: [PATCH 09/98] Use inotify instead of polling on Linux.
+
+This should solve problems people are seeing when a file changes
+twice within a second and thus is missed for polling.
+---
+ Makefile | 2 +-
+ bld/Android.mk | 2 +-
+ src/dnsmasq.c | 25 ++++++++++++--
+ src/dnsmasq.h | 11 ++++++-
+ src/inotify.c | 102 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 5 files changed, 137 insertions(+), 5 deletions(-)
+ create mode 100644 src/inotify.c
+
+diff --git a/Makefile b/Makefile
+index 58a7975f60b5..c340f1c7b59a 100644
+--- a/Makefile
++++ b/Makefile
+@@ -69,7 +69,7 @@ objs = cache.o rfc1035.o util.o option.o forward.o network.o \
+ dnsmasq.o dhcp.o lease.o rfc2131.o netlink.o dbus.o bpf.o \
+ helper.o tftp.o log.o conntrack.o dhcp6.o rfc3315.o \
+ dhcp-common.o outpacket.o radv.o slaac.o auth.o ipset.o \
+- domain.o dnssec.o blockdata.o tables.o loop.o
++ domain.o dnssec.o blockdata.o tables.o loop.o inotify.o
+
+ hdrs = dnsmasq.h config.h dhcp-protocol.h dhcp6-protocol.h \
+ dns-protocol.h radv-protocol.h ip6addr.h
+diff --git a/bld/Android.mk b/bld/Android.mk
+index d855094eb264..d627796e8edc 100644
+--- a/bld/Android.mk
++++ b/bld/Android.mk
+@@ -10,7 +10,7 @@ LOCAL_SRC_FILES := bpf.c cache.c dbus.c dhcp.c dnsmasq.c \
+ dhcp6.c rfc3315.c dhcp-common.c outpacket.c \
+ radv.c slaac.c auth.c ipset.c domain.c \
+ dnssec.c dnssec-openssl.c blockdata.c tables.c \
+- loop.c
++ loop.c inotify.c
+
+ LOCAL_MODULE := dnsmasq
+
+diff --git a/src/dnsmasq.c b/src/dnsmasq.c
+index f4a89fc38183..bf2e25a55780 100644
+--- a/src/dnsmasq.c
++++ b/src/dnsmasq.c
+@@ -315,9 +315,15 @@ int main (int argc, char **argv)
+ if (daemon->port != 0)
+ {
+ cache_init();
++
+ #ifdef HAVE_DNSSEC
+ blockdata_init();
+ #endif
++
++#ifdef HAVE_LINUX_NETWORK
++ if (!option_bool(OPT_NO_POLL))
++ inotify_dnsmasq_init();
++#endif
+ }
+
+ if (option_bool(OPT_DBUS))
+@@ -793,6 +799,11 @@ int main (int argc, char **argv)
+
+ pid = getpid();
+
++#ifdef HAVE_LINUX_NETWORK
++ /* Using inotify, have to select a resolv file at startup */
++ poll_resolv(1, 0, now);
++#endif
++
+ while (1)
+ {
+ int maxfd = -1;
+@@ -862,11 +873,16 @@ int main (int argc, char **argv)
+ #if defined(HAVE_LINUX_NETWORK)
+ FD_SET(daemon->netlinkfd, &rset);
+ bump_maxfd(daemon->netlinkfd, &maxfd);
++ if (daemon->port != 0 && !option_bool(OPT_NO_POLL))
++ {
++ FD_SET(daemon->inotifyfd, &rset);
++ bump_maxfd(daemon->inotifyfd, &maxfd);
++ }
+ #elif defined(HAVE_BSD_NETWORK)
+ FD_SET(daemon->routefd, &rset);
+ bump_maxfd(daemon->routefd, &maxfd);
+ #endif
+-
++
+ FD_SET(piperead, &rset);
+ bump_maxfd(piperead, &maxfd);
+
+@@ -929,6 +945,10 @@ int main (int argc, char **argv)
+ route_sock();
+ #endif
+
++#ifdef HAVE_LINUX_NETWORK
++ if (daemon->port != 0 && !option_bool(OPT_NO_POLL) && FD_ISSET(daemon->inotifyfd, &rset) && inotify_check())
++ poll_resolv(1, 1, now);
++#else
+ /* Check for changes to resolv files once per second max. */
+ /* Don't go silent for long periods if the clock goes backwards. */
+ if (daemon->last_resolv == 0 ||
+@@ -941,7 +961,8 @@ int main (int argc, char **argv)
+ poll_resolv(0, daemon->last_resolv != 0, now);
+ daemon->last_resolv = now;
+ }
+-
++#endif
++
+ if (FD_ISSET(piperead, &rset))
+ async_event(piperead, now);
+
+diff --git a/src/dnsmasq.h b/src/dnsmasq.h
+index e74b15a5459a..ebb6b957812f 100644
+--- a/src/dnsmasq.h
++++ b/src/dnsmasq.h
+@@ -541,6 +541,10 @@ struct resolvc {
+ int is_default, logged;
+ time_t mtime;
+ char *name;
++#ifdef HAVE_LINUX_NETWORK
++ int wd; /* inotify watch descriptor */
++ char *file; /* pointer to file part if path */
++#endif
+ };
+
+ /* adn-hosts parms from command-line (also dhcp-hostsfile and dhcp-optsfile */
+@@ -998,7 +1002,7 @@ extern struct daemon {
+ /* DHCP state */
+ int dhcpfd, helperfd, pxefd;
+ #if defined(HAVE_LINUX_NETWORK)
+- int netlinkfd;
++ int netlinkfd, inotifyfd;
+ #elif defined(HAVE_BSD_NETWORK)
+ int dhcp_raw_fd, dhcp_icmp_fd, routefd;
+ #endif
+@@ -1469,3 +1473,8 @@ void loop_send_probes();
+ int detect_loop(char *query, int type);
+ #endif
+
++/* inotify.c */
++#ifdef HAVE_LINUX_NETWORK
++void inotify_dnsmasq_init();
++int inotify_check(void);
++#endif
+diff --git a/src/inotify.c b/src/inotify.c
+new file mode 100644
+index 000000000000..a0223443d6b6
+--- /dev/null
++++ b/src/inotify.c
+@@ -0,0 +1,102 @@
++/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++
++ 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; version 2 dated June, 1991, or
++ (at your option) version 3 dated 29 June, 2007.
++
++ 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/>.
++*/
++
++#include "dnsmasq.h"
++#include <sys/inotify.h>
++
++#ifdef HAVE_LINUX_NETWORK
++
++/* the strategy is to set a inotify on the directories containing
++ resolv files, for any files in the directory which are close-write
++ or moved into the directory.
++
++ When either of those happen, we look to see if the file involved
++ is actually a resolv-file, and if so, call poll-resolv with
++ the "force" argument, to ensure it's read.
++
++ This adds one new error condition: the directories containing
++ all specified resolv-files must exist at start-up, even if the actual
++ files don't.
++*/
++
++static char *inotify_buffer;
++#define INOTIFY_SZ (sizeof(struct inotify_event) + NAME_MAX + 1)
++
++void inotify_dnsmasq_init()
++{
++ struct resolvc *res;
++
++ inotify_buffer = safe_malloc(INOTIFY_SZ);
++
++ daemon->inotifyfd = inotify_init1(IN_NONBLOCK | IN_CLOEXEC);
++
++ if (daemon->inotifyfd == -1)
++ die(_("failed to create inotify: %s"), NULL, EC_MISC);
++
++ for (res = daemon->resolv_files; res; res = res->next)
++ {
++ char *d = strrchr(res->name, '/');
++
++ if (!d)
++ die(_("resolv-file %s not an absolute path"), res->name, EC_MISC);
++
++ *d = 0; /* make ->name just directory */
++ res->wd = inotify_add_watch(daemon->inotifyfd, res->name, IN_CLOSE_WRITE | IN_MOVED_TO);
++ res->file = d+1; /* pointer to filename */
++
++ if (res->wd == -1 && errno == ENOENT)
++ die(_("directory %s for resolv-file is missing, cannot poll"), res->name, EC_MISC);
++
++ *d = '/'; /* restore name */
++
++ if (res->wd == -1)
++ die(_("failed to create inotify for %s: %s"), res->name, EC_MISC);
++ }
++}
++
++int inotify_check(void)
++{
++ int hit = 0;
++
++ while (1)
++ {
++ int rc;
++ char *p;
++ struct resolvc *res;
++ struct inotify_event *in;
++
++ while ((rc = read(daemon->inotifyfd, inotify_buffer, INOTIFY_SZ)) == -1 && errno == EINTR);
++
++ if (rc <= 0)
++ break;
++
++ for (p = inotify_buffer; rc - (p - inotify_buffer) >= (int)sizeof(struct inotify_event); p += sizeof(struct inotify_event) + in->len)
++ {
++ in = (struct inotify_event*)p;
++
++ for (res = daemon->resolv_files; res; res = res->next)
++ if (res->wd == in->wd && in->len != 0 && strcmp(res->file, in->name) == 0)
++ hit = 1;
++ }
++ }
++
++ return hit;
++}
++
++#endif
++
++
++
+--
+2.1.0
+
--- /dev/null
+From 857973e6f7e0a3d03535a9df7f9373fd7a0b65cc Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Mon, 15 Dec 2014 15:58:13 +0000
+Subject: [PATCH 10/98] Teach the new inotify code about symlinks.
+
+---
+ src/inotify.c | 43 +++++++++++++++++++++++++++----------------
+ 1 file changed, 27 insertions(+), 16 deletions(-)
+
+diff --git a/src/inotify.c b/src/inotify.c
+index a0223443d6b6..960bf5efb41f 100644
+--- a/src/inotify.c
++++ b/src/inotify.c
+@@ -41,29 +41,40 @@ void inotify_dnsmasq_init()
+
+ inotify_buffer = safe_malloc(INOTIFY_SZ);
+
+- daemon->inotifyfd = inotify_init1(IN_NONBLOCK | IN_CLOEXEC);
+
++ daemon->inotifyfd = inotify_init1(IN_NONBLOCK | IN_CLOEXEC);
++
+ if (daemon->inotifyfd == -1)
+ die(_("failed to create inotify: %s"), NULL, EC_MISC);
+-
++
+ for (res = daemon->resolv_files; res; res = res->next)
+ {
+- char *d = strrchr(res->name, '/');
+-
+- if (!d)
+- die(_("resolv-file %s not an absolute path"), res->name, EC_MISC);
+-
+- *d = 0; /* make ->name just directory */
+- res->wd = inotify_add_watch(daemon->inotifyfd, res->name, IN_CLOSE_WRITE | IN_MOVED_TO);
+- res->file = d+1; /* pointer to filename */
+-
+- if (res->wd == -1 && errno == ENOENT)
+- die(_("directory %s for resolv-file is missing, cannot poll"), res->name, EC_MISC);
++ char *d = NULL, *path;
+
+- *d = '/'; /* restore name */
++ if (!(path = realpath(res->name, NULL)))
++ {
++ /* realpath will fail if the file doesn't exist, but
++ dnsmasq copes with missing files, so fall back
++ and assume that symlinks are not in use in that case. */
++ if (errno == ENOENT)
++ path = res->name;
++ else
++ die(_("cannot cannonicalise resolv-file %s: %s"), res->name, EC_MISC);
++ }
+
+- if (res->wd == -1)
+- die(_("failed to create inotify for %s: %s"), res->name, EC_MISC);
++ if ((d = strrchr(path, '/')))
++ {
++ *d = 0; /* make path just directory */
++ res->wd = inotify_add_watch(daemon->inotifyfd, path, IN_CLOSE_WRITE | IN_MOVED_TO);
++ res->file = d+1; /* pointer to filename */
++ *d = '/';
++
++ if (res->wd == -1 && errno == ENOENT)
++ die(_("directory %s for resolv-file is missing, cannot poll"), res->name, EC_MISC);
++
++ if (res->wd == -1)
++ die(_("failed to create inotify for %s: %s"), res->name, EC_MISC);
++ }
+ }
+ }
+
+--
+2.1.0
+
--- /dev/null
+From 800c5cc1e7438818fd80f08c2d472df249a6942d Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Mon, 15 Dec 2014 17:50:15 +0000
+Subject: [PATCH 11/98] Remove floor on EDNS0 packet size with DNSSEC.
+
+---
+ CHANGELOG | 6 +++++-
+ src/dnsmasq.c | 5 -----
+ 2 files changed, 5 insertions(+), 6 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 13ab41c05fc3..68252924e743 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -2,7 +2,11 @@ version 2.73
+ Fix crash at startup when an empty suffix is supplied to
+ --conf-dir, also trivial memory leak. Thanks to
+ Tomas Hozza for spotting this.
+-
++
++ Remove floor of 4096 on advertised EDNS0 packet size when
++ DNSSEC in use, the original rationale for this has long gone.
++ Thanks to Anders Kaseorg for spotting this.
++
+
+ version 2.72
+ Add ra-advrouter mode, for RFC-3775 mobile IPv6 support.
+diff --git a/src/dnsmasq.c b/src/dnsmasq.c
+index bf2e25a55780..5c7750d365fa 100644
+--- a/src/dnsmasq.c
++++ b/src/dnsmasq.c
+@@ -87,11 +87,6 @@ int main (int argc, char **argv)
+
+ if (daemon->edns_pktsz < PACKETSZ)
+ daemon->edns_pktsz = PACKETSZ;
+-#ifdef HAVE_DNSSEC
+- /* Enforce min packet big enough for DNSSEC */
+- if (option_bool(OPT_DNSSEC_VALID) && daemon->edns_pktsz < EDNS_PKTSZ)
+- daemon->edns_pktsz = EDNS_PKTSZ;
+-#endif
+
+ daemon->packet_buff_sz = daemon->edns_pktsz > DNSMASQ_PACKETSZ ?
+ daemon->edns_pktsz : DNSMASQ_PACKETSZ;
+--
+2.1.0
+
--- /dev/null
+From ad946d555dce44eb690c7699933b6ff40ab85bb6 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Mon, 15 Dec 2014 17:52:22 +0000
+Subject: [PATCH 12/98] CHANGELOG re. inotify.
+
+---
+ CHANGELOG | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 68252924e743..9174b0bd75dc 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -7,6 +7,10 @@ version 2.73
+ DNSSEC in use, the original rationale for this has long gone.
+ Thanks to Anders Kaseorg for spotting this.
+
++ Use inotify for checking on updates to /etc/resolv.conf and
++ friends under Linux. This fixes race conditions when the files are
++ updated rapidly and saves CPU by noy polling.
++
+
+ version 2.72
+ Add ra-advrouter mode, for RFC-3775 mobile IPv6 support.
+--
+2.1.0
+
--- /dev/null
+From 3ad3f3bbd4ee716a7d2fb1e115cf89bd1b1a5de9 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Tue, 16 Dec 2014 18:25:17 +0000
+Subject: [PATCH 13/98] Fix breakage of --domain=<domain>,<subnet>,local
+
+---
+ CHANGELOG | 4 ++++
+ src/option.c | 18 ++++++++++++++++--
+ 2 files changed, 20 insertions(+), 2 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 9174b0bd75dc..9e6c7aa4fd68 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -10,6 +10,10 @@ version 2.73
+ Use inotify for checking on updates to /etc/resolv.conf and
+ friends under Linux. This fixes race conditions when the files are
+ updated rapidly and saves CPU by noy polling.
++
++ Fix breakage of --domain=<domain>,<subnet>,local - only reverse
++ queries were intercepted. THis appears to have been broken
++ since 2.69. Thanks to Josh Stone for finding the bug.
+
+
+ version 2.72
+diff --git a/src/option.c b/src/option.c
+index b08e98e16f84..209fa6976609 100644
+--- a/src/option.c
++++ b/src/option.c
+@@ -1941,10 +1941,17 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
+ else
+ {
+ /* generate the equivalent of
+- local=/<domain>/
+ local=/xxx.yyy.zzz.in-addr.arpa/ */
+ struct server *serv = add_rev4(new->start, msize);
+ serv->flags |= SERV_NO_ADDR;
++
++ /* local=/<domain>/ */
++ serv = opt_malloc(sizeof(struct server));
++ memset(serv, 0, sizeof(struct server));
++ serv->domain = d;
++ serv->flags = SERV_HAS_DOMAIN | SERV_NO_ADDR;
++ serv->next = daemon->servers;
++ daemon->servers = serv;
+ }
+ }
+ }
+@@ -1978,10 +1985,17 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
+ else
+ {
+ /* generate the equivalent of
+- local=/<domain>/
+ local=/xxx.yyy.zzz.ip6.arpa/ */
+ struct server *serv = add_rev6(&new->start6, msize);
+ serv->flags |= SERV_NO_ADDR;
++
++ /* local=/<domain>/ */
++ serv = opt_malloc(sizeof(struct server));
++ memset(serv, 0, sizeof(struct server));
++ serv->domain = d;
++ serv->flags = SERV_HAS_DOMAIN | SERV_NO_ADDR;
++ serv->next = daemon->servers;
++ daemon->servers = serv;
+ }
+ }
+ }
+--
+2.1.0
+
--- /dev/null
+From bd9520b7ade7098ee423acc38965376aa57feb07 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Tue, 16 Dec 2014 20:41:29 +0000
+Subject: [PATCH 14/98] Remove redundant IN6_IS_ADDR_ULA(a) macro defn.
+
+---
+ src/network.c | 4 ----
+ 1 file changed, 4 deletions(-)
+
+diff --git a/src/network.c b/src/network.c
+index 5067007c5cbc..99419f57951e 100644
+--- a/src/network.c
++++ b/src/network.c
+@@ -16,10 +16,6 @@
+
+ #include "dnsmasq.h"
+
+-#ifndef IN6_IS_ADDR_ULA
+-#define IN6_IS_ADDR_ULA(a) ((((__const uint32_t *) (a))[0] & htonl (0xfe00000)) == htonl (0xfc000000))
+-#endif
+-
+ #ifdef HAVE_LINUX_NETWORK
+
+ int indextoname(int fd, int index, char *name)
+--
+2.1.0
+
--- /dev/null
+From 476693678e778886b64d0b56e27eb7695cbcca99 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Wed, 17 Dec 2014 12:41:56 +0000
+Subject: [PATCH 15/98] Eliminate IPv6 privacy addresses from --interface-name
+ answers.
+
+---
+ CHANGELOG | 5 +++++
+ src/auth.c | 4 ++++
+ src/dnsmasq.h | 1 +
+ src/network.c | 12 ++++++++----
+ src/rfc1035.c | 17 ++++++++++-------
+ 5 files changed, 28 insertions(+), 11 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 9e6c7aa4fd68..01f5208ec006 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -14,6 +14,11 @@ version 2.73
+ Fix breakage of --domain=<domain>,<subnet>,local - only reverse
+ queries were intercepted. THis appears to have been broken
+ since 2.69. Thanks to Josh Stone for finding the bug.
++
++ Eliminate IPv6 privacy addresses and deprecated addresses from
++ the answers given by --interface-name. Note that reverse queries
++ (ie looking for names, given addresses) are not affected.
++ Thanks to Michael Gorbach for the suggestion.
+
+
+ version 2.72
+diff --git a/src/auth.c b/src/auth.c
+index dd46566ec2cc..a327f16d8c0b 100644
+--- a/src/auth.c
++++ b/src/auth.c
+@@ -363,6 +363,10 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
+ if (((addrlist->flags & ADDRLIST_IPV6) ? T_AAAA : T_A) == qtype &&
+ (local_query || filter_zone(zone, flag, &addrlist->addr)))
+ {
++#ifdef HAVE_IPV6
++ if (addrlist->flags & ADDRLIST_REVONLY)
++ continue;
++#endif
+ found = 1;
+ log_query(F_FORWARD | F_CONFIG | flag, name, &addrlist->addr, NULL);
+ if (add_resource_record(header, limit, &trunc, nameoffset, &ansp,
+diff --git a/src/dnsmasq.h b/src/dnsmasq.h
+index ebb6b957812f..1dd61c5edba3 100644
+--- a/src/dnsmasq.h
++++ b/src/dnsmasq.h
+@@ -318,6 +318,7 @@ struct ds_config {
+
+ #define ADDRLIST_LITERAL 1
+ #define ADDRLIST_IPV6 2
++#define ADDRLIST_REVONLY 4
+
+ struct addrlist {
+ struct all_addr addr;
+diff --git a/src/network.c b/src/network.c
+index 99419f57951e..14d2af2ce313 100644
+--- a/src/network.c
++++ b/src/network.c
+@@ -236,7 +236,7 @@ struct iface_param {
+ };
+
+ static int iface_allowed(struct iface_param *param, int if_index, char *label,
+- union mysockaddr *addr, struct in_addr netmask, int prefixlen, int dad)
++ union mysockaddr *addr, struct in_addr netmask, int prefixlen, int iface_flags)
+ {
+ struct irec *iface;
+ int mtu = 0, loopback;
+@@ -388,6 +388,10 @@ static int iface_allowed(struct iface_param *param, int if_index, char *label,
+ {
+ al->addr.addr.addr6 = addr->in6.sin6_addr;
+ al->flags = ADDRLIST_IPV6;
++ /* Privacy addresses and addresses still undergoing DAD and deprecated addresses
++ don't appear in forward queries, but will in reverse ones. */
++ if (!(iface_flags & IFACE_PERMANENT) || (iface_flags & (IFACE_DEPRECATED | IFACE_TENTATIVE)))
++ al->flags |= ADDRLIST_REVONLY;
+ }
+ #endif
+ }
+@@ -399,7 +403,7 @@ static int iface_allowed(struct iface_param *param, int if_index, char *label,
+ for (iface = daemon->interfaces; iface; iface = iface->next)
+ if (sockaddr_isequal(&iface->addr, addr))
+ {
+- iface->dad = dad;
++ iface->dad = !!(iface_flags & IFACE_TENTATIVE);
+ iface->found = 1; /* for garbage collection */
+ return 1;
+ }
+@@ -474,7 +478,7 @@ static int iface_allowed(struct iface_param *param, int if_index, char *label,
+ iface->dhcp_ok = dhcp_ok;
+ iface->dns_auth = auth_dns;
+ iface->mtu = mtu;
+- iface->dad = dad;
++ iface->dad = !!(iface_flags & IFACE_TENTATIVE);
+ iface->found = 1;
+ iface->done = iface->multicast_done = iface->warned = 0;
+ iface->index = if_index;
+@@ -519,7 +523,7 @@ static int iface_allowed_v6(struct in6_addr *local, int prefix,
+ else
+ addr.in6.sin6_scope_id = 0;
+
+- return iface_allowed((struct iface_param *)vparam, if_index, NULL, &addr, netmask, prefix, !!(flags & IFACE_TENTATIVE));
++ return iface_allowed((struct iface_param *)vparam, if_index, NULL, &addr, netmask, prefix, flags);
+ }
+ #endif
+
+diff --git a/src/rfc1035.c b/src/rfc1035.c
+index 8a7d2608dac5..bdeb3fb10e68 100644
+--- a/src/rfc1035.c
++++ b/src/rfc1035.c
+@@ -1923,14 +1923,17 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
+ for (intr = daemon->int_names; intr; intr = intr->next)
+ if (hostname_isequal(name, intr->name))
+ {
+- ans = 1;
+- if (!dryrun)
+- {
+-
+- for (addrlist = intr->addr; addrlist; addrlist = addrlist->next)
++ for (addrlist = intr->addr; addrlist; addrlist = addrlist->next)
+ #ifdef HAVE_IPV6
+- if (((addrlist->flags & ADDRLIST_IPV6) ? T_AAAA : T_A) == type)
++ if (((addrlist->flags & ADDRLIST_IPV6) ? T_AAAA : T_A) == type)
+ #endif
++ {
++#ifdef HAVE_IPV6
++ if (addrlist->flags & ADDRLIST_REVONLY)
++ continue;
++#endif
++ ans = 1;
++ if (!dryrun)
+ {
+ gotit = 1;
+ log_query(F_FORWARD | F_CONFIG | flag, name, &addrlist->addr, NULL);
+@@ -1939,7 +1942,7 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
+ type == T_A ? "4" : "6", &addrlist->addr))
+ anscount++;
+ }
+- }
++ }
+ }
+
+ if (!dryrun && !gotit)
+--
+2.1.0
+
--- /dev/null
+From 3267804598047bd1781cab91508d1bc516e5ddbb Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Wed, 17 Dec 2014 20:38:20 +0000
+Subject: [PATCH 16/98] Tweak field width in cache dump to avoid truncating
+ IPv6 addresses.
+
+---
+ src/cache.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/cache.c b/src/cache.c
+index 2c3a49887053..f9e1d31e8c99 100644
+--- a/src/cache.c
++++ b/src/cache.c
+@@ -1411,7 +1411,7 @@ void dump_cache(time_t now)
+ *a = 0;
+ if (strlen(n) == 0 && !(cache->flags & F_REVERSE))
+ n = "<Root>";
+- p += sprintf(p, "%-40.40s ", n);
++ p += sprintf(p, "%-30.30s ", n);
+ if ((cache->flags & F_CNAME) && !is_outdated_cname_pointer(cache))
+ a = cache_get_cname_target(cache);
+ #ifdef HAVE_DNSSEC
+@@ -1454,7 +1454,7 @@ void dump_cache(time_t now)
+ else if (cache->flags & F_DNSKEY)
+ t = "K";
+ #endif
+- p += sprintf(p, "%-30.30s %s%s%s%s%s%s%s%s%s ", a, t,
++ p += sprintf(p, "%-40.40s %s%s%s%s%s%s%s%s%s ", a, t,
+ cache->flags & F_FORWARD ? "F" : " ",
+ cache->flags & F_REVERSE ? "R" : " ",
+ cache->flags & F_IMMORTAL ? "I" : " ",
+--
+2.1.0
+
From 094b5c3d904bae9aeb3206d9f3b8348926b84975 Mon Sep 17 00:00:00 2001
From: Simon Kelley <simon@thekelleys.org.uk>
Date: Sun, 21 Dec 2014 16:11:52 +0000
-Subject: [PATCH] Fix crash in DNSSEC code when attempting to verify large
- RRs.
+Subject: [PATCH 17/98] Fix crash in DNSSEC code when attempting to verify
+ large RRs.
---
- src/dnssec.c | 27 +++++++++++++++++++--------
- 1 files changed, 22 insertions(+), 8 deletions(-)
+ CHANGELOG | 3 +++
+ src/dnssec.c | 27 +++++++++++++++++++--------
+ 2 files changed, 22 insertions(+), 8 deletions(-)
+diff --git a/CHANGELOG b/CHANGELOG
+index 01f5208ec006..956b71a151db 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -19,6 +19,9 @@ version 2.73
+ the answers given by --interface-name. Note that reverse queries
+ (ie looking for names, given addresses) are not affected.
+ Thanks to Michael Gorbach for the suggestion.
++
++ Fix crash in DNSSEC code with long RRs. Thanks to Marco Davids
++ for the bug report.
+
+
+ version 2.72
diff --git a/src/dnssec.c b/src/dnssec.c
-index 69bfc29..3208ac7 100644
+index 69bfc29e355f..3208ac701149 100644
--- a/src/dnssec.c
+++ b/src/dnssec.c
@@ -456,16 +456,27 @@ static u16 *get_desc(int type)
if (cp != end)
hash->update(ctx, end - cp, cp);
--
-1.7.10.4
+2.1.0
From cbc652423403e3cef00e00240f6beef713142246 Mon Sep 17 00:00:00 2001
From: Simon Kelley <simon@thekelleys.org.uk>
Date: Sun, 21 Dec 2014 21:21:53 +0000
-Subject: [PATCH] Make caching work for CNAMEs pointing to A/AAAA records
+Subject: [PATCH 18/98] Make caching work for CNAMEs pointing to A/AAAA records
shadowed in /etc/hosts
If the answer to an upstream query is a CNAME which points to an
now modified to allow caching when the upstream and local A/AAAA
records have the same value.
---
- src/cache.c | 34 +++++++++++++++++++++++++---------
+ src/cache.c | 34 +++++++++++++++++++++++++---------
1 file changed, 25 insertions(+), 9 deletions(-)
diff --git a/src/cache.c b/src/cache.c
-index f9e1d31..ff1ca6f 100644
+index f9e1d31e8c99..ff1ca6f1c352 100644
--- a/src/cache.c
+++ b/src/cache.c
@@ -322,7 +322,7 @@ static int is_expired(time_t now, struct crec *crecp)
return NULL;
}
--
-1.7.10.4
+2.1.0
From fbc5205702c7f6f431d9f1043c553d7fb62ddfdb Mon Sep 17 00:00:00 2001
From: Simon Kelley <simon@thekelleys.org.uk>
Date: Tue, 23 Dec 2014 15:46:08 +0000
-Subject: [PATCH] Fix problems validating NSEC3 and wildcards.
+Subject: [PATCH 19/98] Fix problems validating NSEC3 and wildcards.
---
- src/dnssec.c | 253 +++++++++++++++++++++++++++++-----------------------------
+ src/dnssec.c | 253 ++++++++++++++++++++++++++++++-----------------------------
1 file changed, 128 insertions(+), 125 deletions(-)
diff --git a/src/dnssec.c b/src/dnssec.c
-index 3208ac7..9350d3e 100644
+index 3208ac701149..9350d3e8c963 100644
--- a/src/dnssec.c
+++ b/src/dnssec.c
@@ -615,6 +615,7 @@ static void sort_rrset(struct dns_header *header, size_t plen, u16 *rr_desc, int
{
if (rc == STAT_NO_SIG)
--
-1.7.10.4
+2.1.0
From 83d2ed09fc0216b567d7fb2197e4ff3eae150b0d Mon Sep 17 00:00:00 2001
From: Simon Kelley <simon@thekelleys.org.uk>
Date: Tue, 23 Dec 2014 18:42:38 +0000
-Subject: [PATCH] Initialise return value.
+Subject: [PATCH 20/98] Initialise return value.
---
- src/dnssec.c | 7 +++++--
+ src/dnssec.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/src/dnssec.c b/src/dnssec.c
-index 9350d3e..ed8cf89 100644
+index 9350d3e8c963..ed8cf893bad2 100644
--- a/src/dnssec.c
+++ b/src/dnssec.c
@@ -637,10 +637,13 @@ static int validate_rrset(time_t now, struct dns_header *header, size_t plen, in
/* look for RRSIGs for this RRset and get pointers to each RR in the set. */
--
-1.7.10.4
+2.1.0
--- /dev/null
+From 32fc6dbe03569d70dd394420ceb73532cf303c33 Mon Sep 17 00:00:00 2001
+From: Glen Huang <curvedmark@gmail.com>
+Date: Sat, 27 Dec 2014 15:28:12 +0000
+Subject: [PATCH 21/98] Add --ignore-address option.
+
+---
+ CHANGELOG | 8 ++++++++
+ man/dnsmasq.8 | 6 ++++++
+ src/dnsmasq.h | 3 ++-
+ src/forward.c | 4 ++++
+ src/option.c | 18 +++++++++++++++---
+ src/rfc1035.c | 37 +++++++++++++++++++++++++++++++++++++
+ 6 files changed, 72 insertions(+), 4 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 956b71a151db..2b6356bcfb02 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -22,6 +22,14 @@ version 2.73
+
+ Fix crash in DNSSEC code with long RRs. Thanks to Marco Davids
+ for the bug report.
++
++ Add --ignore-address option. Ignore replies to A-record
++ queries which include the specified address. No error is
++ generated, dnsmasq simply continues to listen for another
++ reply. This is useful to defeat blocking strategies which
++ rely on quickly supplying a forged answer to a DNS
++ request for certain domains, before the correct answer can
++ arrive. Thanks to Glen Huang for the patch.
+
+
+ version 2.72
+diff --git a/man/dnsmasq.8 b/man/dnsmasq.8
+index 0b8e04f0a897..4236ba307df3 100644
+--- a/man/dnsmasq.8
++++ b/man/dnsmasq.8
+@@ -293,6 +293,12 @@ an advertising web page in response to queries for unregistered names,
+ instead of the correct NXDOMAIN response. This option tells dnsmasq to
+ fake the correct response when it sees this behaviour. As at Sept 2003
+ the IP address being returned by Verisign is 64.94.110.11
++.TP
++.B \-B, --ignore-address=<ipaddr>
++Ignore replies to A-record queries which include the specified address.
++No error is generated, dnsmasq simply continues to listen for another reply.
++This is useful to defeat blocking strategies which rely on quickly supplying a
++forged answer to a DNS request for certain domain, before the correct answer can arrive.
+ .TP
+ .B \-f, --filterwin2k
+ Later versions of windows make periodic DNS requests which don't get sensible answers from
+diff --git a/src/dnsmasq.h b/src/dnsmasq.h
+index 1dd61c5edba3..7bc982ddf73c 100644
+--- a/src/dnsmasq.h
++++ b/src/dnsmasq.h
+@@ -930,7 +930,7 @@ extern struct daemon {
+ char *runfile;
+ char *lease_change_command;
+ struct iname *if_names, *if_addrs, *if_except, *dhcp_except, *auth_peers, *tftp_interfaces;
+- struct bogus_addr *bogus_addr;
++ struct bogus_addr *bogus_addr, *ignore_addr;
+ struct server *servers;
+ struct ipsets *ipsets;
+ int log_fac; /* log facility */
+@@ -1093,6 +1093,7 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
+ time_t now, int *ad_reqd, int *do_bit);
+ int check_for_bogus_wildcard(struct dns_header *header, size_t qlen, char *name,
+ struct bogus_addr *addr, time_t now);
++int check_for_ignored_address(struct dns_header *header, size_t qlen, struct bogus_addr *baddr);
+ unsigned char *find_pseudoheader(struct dns_header *header, size_t plen,
+ size_t *len, unsigned char **p, int *is_sign);
+ int check_for_local_domain(char *name, time_t now);
+diff --git a/src/forward.c b/src/forward.c
+index 408a179a20f4..f28c7d51f708 100644
+--- a/src/forward.c
++++ b/src/forward.c
+@@ -724,6 +724,10 @@ void reply_query(int fd, int family, time_t now)
+ if (!(forward = lookup_frec(ntohs(header->id), hash)))
+ return;
+
++ if (daemon->ignore_addr && RCODE(header) == NOERROR &&
++ check_for_ignored_address(header, n, daemon->ignore_addr))
++ return;
++
+ if ((RCODE(header) == SERVFAIL || RCODE(header) == REFUSED) &&
+ !option_bool(OPT_ORDER) &&
+ forward->forwardall == 0)
+diff --git a/src/option.c b/src/option.c
+index 209fa6976609..907d0cf88de9 100644
+--- a/src/option.c
++++ b/src/option.c
+@@ -147,6 +147,7 @@ struct myoption {
+ #define LOPT_LOCAL_SERVICE 335
+ #define LOPT_DNSSEC_TIME 336
+ #define LOPT_LOOP_DETECT 337
++#define LOPT_IGNORE_ADDR 338
+
+ #ifdef HAVE_GETOPT_LONG
+ static const struct option opts[] =
+@@ -181,6 +182,7 @@ static const struct myoption opts[] =
+ { "local-service", 0, 0, LOPT_LOCAL_SERVICE },
+ { "bogus-priv", 0, 0, 'b' },
+ { "bogus-nxdomain", 1, 0, 'B' },
++ { "ignore-address", 1, 0, LOPT_IGNORE_ADDR },
+ { "selfmx", 0, 0, 'e' },
+ { "filterwin2k", 0, 0, 'f' },
+ { "pid-file", 2, 0, 'x' },
+@@ -457,6 +459,7 @@ static struct {
+ { LOPT_QUIET_RA, OPT_QUIET_RA, NULL, gettext_noop("Do not log RA."), NULL },
+ { LOPT_LOCAL_SERVICE, OPT_LOCAL_SERVICE, NULL, gettext_noop("Accept queries only from directly-connected networks"), NULL },
+ { LOPT_LOOP_DETECT, OPT_LOOP_DETECT, NULL, gettext_noop("Detect and remove DNS forwarding loops"), NULL },
++ { LOPT_IGNORE_ADDR, ARG_DUP, "<ipaddr>", gettext_noop("Ignore DNS responses containing ipaddr."), NULL },
+ { 0, 0, NULL, NULL, NULL }
+ };
+
+@@ -2119,14 +2122,23 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
+ break;
+
+ case 'B': /* --bogus-nxdomain */
+- {
++ case LOPT_IGNORE_ADDR: /* --ignore-address */
++ {
+ struct in_addr addr;
+ unhide_metas(arg);
+ if (arg && (inet_pton(AF_INET, arg, &addr) > 0))
+ {
+ struct bogus_addr *baddr = opt_malloc(sizeof(struct bogus_addr));
+- baddr->next = daemon->bogus_addr;
+- daemon->bogus_addr = baddr;
++ if (option == 'B')
++ {
++ baddr->next = daemon->bogus_addr;
++ daemon->bogus_addr = baddr;
++ }
++ else
++ {
++ baddr->next = daemon->ignore_addr;
++ daemon->ignore_addr = baddr;
++ }
+ baddr->addr = addr;
+ }
+ else
+diff --git a/src/rfc1035.c b/src/rfc1035.c
+index bdeb3fb10e68..75c4266b47dd 100644
+--- a/src/rfc1035.c
++++ b/src/rfc1035.c
+@@ -1328,6 +1328,43 @@ int check_for_bogus_wildcard(struct dns_header *header, size_t qlen, char *name,
+ return 0;
+ }
+
++int check_for_ignored_address(struct dns_header *header, size_t qlen, struct bogus_addr *baddr)
++{
++ unsigned char *p;
++ int i, qtype, qclass, rdlen;
++ struct bogus_addr *baddrp;
++
++ /* skip over questions */
++ if (!(p = skip_questions(header, qlen)))
++ return 0; /* bad packet */
++
++ for (i = ntohs(header->ancount); i != 0; i--)
++ {
++ if (!(p = skip_name(p, header, qlen, 10)))
++ return 0; /* bad packet */
++
++ GETSHORT(qtype, p);
++ GETSHORT(qclass, p);
++ p += 4; /* TTL */
++ GETSHORT(rdlen, p);
++
++ if (qclass == C_IN && qtype == T_A)
++ {
++ if (!CHECK_LEN(header, p, qlen, INADDRSZ))
++ return 0;
++
++ for (baddrp = baddr; baddrp; baddrp = baddrp->next)
++ if (memcmp(&baddrp->addr, p, INADDRSZ) == 0)
++ return 1;
++ }
++
++ if (!ADD_RDLEN(header, p, qlen, rdlen))
++ return 0;
++ }
++
++ return 0;
++}
++
+ int add_resource_record(struct dns_header *header, char *limit, int *truncp, int nameoffset, unsigned char **pp,
+ unsigned long ttl, int *offset, unsigned short type, unsigned short class, char *format, ...)
+ {
+--
+2.1.0
+
From 0b1008d367d44e77352134a4c5178f896f0db3e7 Mon Sep 17 00:00:00 2001
From: Simon Kelley <simon@thekelleys.org.uk>
Date: Sat, 27 Dec 2014 15:33:32 +0000
-Subject: [PATCH] Bad packet protection.
+Subject: [PATCH 22/98] Bad packet protection.
---
- src/dnssec.c | 2 +-
+ src/dnssec.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/dnssec.c b/src/dnssec.c
-index ed8cf89..026794b 100644
+index ed8cf893bad2..026794b077e5 100644
--- a/src/dnssec.c
+++ b/src/dnssec.c
@@ -805,7 +805,7 @@ static int validate_rrset(time_t now, struct dns_header *header, size_t plen, in
}
--
-1.7.10.4
+2.1.0
--- /dev/null
+From d310ab7ecbffce79d3d90debba621e0222f9bced Mon Sep 17 00:00:00 2001
+From: Matthias Andree <matthias.andree@gmx.de>
+Date: Sat, 27 Dec 2014 15:36:38 +0000
+Subject: [PATCH 23/98] Fix build failure in new inotify code on BSD.
+
+---
+ src/inotify.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/inotify.c b/src/inotify.c
+index 960bf5efb41f..83730008c11b 100644
+--- a/src/inotify.c
++++ b/src/inotify.c
+@@ -15,10 +15,10 @@
+ */
+
+ #include "dnsmasq.h"
+-#include <sys/inotify.h>
+-
+ #ifdef HAVE_LINUX_NETWORK
+
++#include <sys/inotify.h>
++
+ /* the strategy is to set a inotify on the directories containing
+ resolv files, for any files in the directory which are close-write
+ or moved into the directory.
+--
+2.1.0
+
--- /dev/null
+From 81c538efcebfce2ce4a1d3a420b6c885b8f08df9 Mon Sep 17 00:00:00 2001
+From: Yousong Zhou <yszhou4tech@gmail.com>
+Date: Sat, 3 Jan 2015 16:36:14 +0000
+Subject: [PATCH 24/98] Implement makefile dependencies on COPTS variable.
+
+---
+ .gitignore | 2 +-
+ Makefile | 10 ++++++----
+ 2 files changed, 7 insertions(+), 5 deletions(-)
+
+diff --git a/.gitignore b/.gitignore
+index fcdbcbd135ae..23f11488ab4c 100644
+--- a/.gitignore
++++ b/.gitignore
+@@ -3,7 +3,7 @@ src/*.mo
+ src/dnsmasq.pot
+ src/dnsmasq
+ src/dnsmasq_baseline
+-src/.configured
++src/.copts_*
+ contrib/wrt/dhcp_lease_time
+ contrib/wrt/dhcp_release
+ debian/base/
+diff --git a/Makefile b/Makefile
+index c340f1c7b59a..5675f60c2036 100644
+--- a/Makefile
++++ b/Makefile
+@@ -64,6 +64,8 @@ nettle_libs = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_DNSSEC $(PKG_CONFIG
+ gmp_libs = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_DNSSEC NO_GMP --copy -lgmp`
+ sunos_libs = `if uname | grep SunOS >/dev/null 2>&1; then echo -lsocket -lnsl -lposix4; fi`
+ version = -DVERSION='\"`$(top)/bld/get-version $(top)`\"'
++copts_conf = .copts_$(shell $(CC) -DDNSMASQ_COMPILE_OPTS $(COPTS) -E $(top)/$(SRC)/dnsmasq.h | \
++ ( md5sum 2>/dev/null || md5 ) | cut -f 1 -d ' ')
+
+ objs = cache.o rfc1035.o util.o option.o forward.o network.o \
+ dnsmasq.o dhcp.o lease.o rfc2131.o netlink.o dbus.o bpf.o \
+@@ -83,7 +85,7 @@ all : $(BUILDDIR)
+
+ mostly_clean :
+ rm -f $(BUILDDIR)/*.mo $(BUILDDIR)/*.pot
+- rm -f $(BUILDDIR)/.configured $(BUILDDIR)/*.o $(BUILDDIR)/dnsmasq.a $(BUILDDIR)/dnsmasq
++ rm -f $(BUILDDIR)/.copts_* $(BUILDDIR)/*.o $(BUILDDIR)/dnsmasq.a $(BUILDDIR)/dnsmasq
+
+ clean : mostly_clean
+ rm -f $(BUILDDIR)/dnsmasq_baseline
+@@ -139,8 +141,8 @@ bloatcheck : $(BUILDDIR)/dnsmasq_baseline mostly_clean all
+
+ # rules below are targets in recusive makes with cwd=$(BUILDDIR)
+
+-.configured: $(hdrs)
+- @rm -f *.o
++$(copts_conf): $(hdrs)
++ @rm -f *.o .copts_*
+ @touch $@
+
+ $(objs:.o=.c) $(hdrs):
+@@ -149,7 +151,7 @@ $(objs:.o=.c) $(hdrs):
+ .c.o:
+ $(CC) $(CFLAGS) $(COPTS) $(i18n) $(build_cflags) $(RPM_OPT_FLAGS) -c $<
+
+-dnsmasq : .configured $(hdrs) $(objs)
++dnsmasq : $(copts_conf) $(hdrs) $(objs)
+ $(CC) $(LDFLAGS) -o $@ $(objs) $(build_libs) $(LIBS)
+
+ dnsmasq.pot : $(objs:.o=.c) $(hdrs)
+--
+2.1.0
+
--- /dev/null
+From d8dbd903d024f84a149dac2f8a674a68dfed47a3 Mon Sep 17 00:00:00 2001
+From: Yousong Zhou <yszhou4tech@gmail.com>
+Date: Mon, 5 Jan 2015 17:03:35 +0000
+Subject: [PATCH 25/98] Fix race condition issue in makefile.
+
+---
+ Makefile | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/Makefile b/Makefile
+index 5675f60c2036..bcbd5571671d 100644
+--- a/Makefile
++++ b/Makefile
+@@ -148,10 +148,12 @@ $(copts_conf): $(hdrs)
+ $(objs:.o=.c) $(hdrs):
+ ln -s $(top)/$(SRC)/$@ .
+
++$(objs): $(copts_conf) $(hdrs)
++
+ .c.o:
+ $(CC) $(CFLAGS) $(COPTS) $(i18n) $(build_cflags) $(RPM_OPT_FLAGS) -c $<
+
+-dnsmasq : $(copts_conf) $(hdrs) $(objs)
++dnsmasq : $(objs)
+ $(CC) $(LDFLAGS) -o $@ $(objs) $(build_libs) $(LIBS)
+
+ dnsmasq.pot : $(objs:.o=.c) $(hdrs)
+--
+2.1.0
+
--- /dev/null
+From 97e618a0e3f29465acc689d87288596b006f197e Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Wed, 7 Jan 2015 21:55:43 +0000
+Subject: [PATCH 26/98] DNSSEC: do top-down search for limit of secure
+ delegation.
+
+---
+ CHANGELOG | 9 ++
+ src/dnsmasq.h | 11 +-
+ src/dnssec.c | 91 +++++++++-------
+ src/forward.c | 327 +++++++++++++++++++++++++++++++++-------------------------
+ 4 files changed, 260 insertions(+), 178 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 2b6356bcfb02..e8bf80f81baa 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -31,7 +31,16 @@ version 2.73
+ request for certain domains, before the correct answer can
+ arrive. Thanks to Glen Huang for the patch.
+
++ Revisit the part of DNSSEC validation which determines if an
++ unsigned answer is legit, or is in some part of the DNS
++ tree which should be signed. Dnsmasq now works from the
++ DNS root downward looking for the limit of signed
++ delegations, rather than working bottom up. This is
++ both more correct, and less likely to trip over broken
++ nameservers in the unsigned parts of the DNS tree
++ which don't respond well to DNSSEC queries.
+
++
+ version 2.72
+ Add ra-advrouter mode, for RFC-3775 mobile IPv6 support.
+
+diff --git a/src/dnsmasq.h b/src/dnsmasq.h
+index 7bc982ddf73c..2f4597294a56 100644
+--- a/src/dnsmasq.h
++++ b/src/dnsmasq.h
+@@ -569,8 +569,9 @@ struct hostsfile {
+ #define STAT_SECURE_WILDCARD 7
+ #define STAT_NO_SIG 8
+ #define STAT_NO_DS 9
+-#define STAT_NEED_DS_NEG 10
+-#define STAT_CHASE_CNAME 11
++#define STAT_NO_NS 10
++#define STAT_NEED_DS_NEG 11
++#define STAT_CHASE_CNAME 12
+
+ #define FREC_NOREBIND 1
+ #define FREC_CHECKING_DISABLED 2
+@@ -604,7 +605,9 @@ struct frec {
+ #ifdef HAVE_DNSSEC
+ int class, work_counter;
+ struct blockdata *stash; /* Saved reply, whilst we validate */
+- size_t stash_len;
++ struct blockdata *orig_domain; /* domain of original query, whilst
++ we're seeing is if in unsigned domain */
++ size_t stash_len, name_start, name_len;
+ struct frec *dependent; /* Query awaiting internally-generated DNSKEY or DS query */
+ struct frec *blocking_query; /* Query which is blocking us. */
+ #endif
+@@ -1126,7 +1129,7 @@ int in_zone(struct auth_zone *zone, char *name, char **cut);
+ size_t dnssec_generate_query(struct dns_header *header, char *end, char *name, int class, int type, union mysockaddr *addr);
+ int dnssec_validate_by_ds(time_t now, struct dns_header *header, size_t n, char *name, char *keyname, int class);
+ int dnssec_validate_ds(time_t now, struct dns_header *header, size_t plen, char *name, char *keyname, int class);
+-int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, char *name, char *keyname, int *class, int *neganswer);
++int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, char *name, char *keyname, int *class, int *neganswer, int *nons);
+ int dnssec_chase_cname(time_t now, struct dns_header *header, size_t plen, char *name, char *keyname);
+ int dnskey_keytag(int alg, int flags, unsigned char *rdata, int rdlen);
+ size_t filter_rrsigs(struct dns_header *header, size_t plen);
+diff --git a/src/dnssec.c b/src/dnssec.c
+index 026794b077e5..8f27677628b2 100644
+--- a/src/dnssec.c
++++ b/src/dnssec.c
+@@ -875,8 +875,7 @@ static int validate_rrset(time_t now, struct dns_header *header, size_t plen, in
+ /* The DNS packet is expected to contain the answer to a DNSKEY query.
+ Put all DNSKEYs in the answer which are valid into the cache.
+ return codes:
+- STAT_INSECURE No DNSKEYs in reply.
+- STAT_SECURE At least one valid DNSKEY found and in cache.
++ STAT_SECURE At least one valid DNSKEY found and in cache.
+ STAT_BOGUS No DNSKEYs found, which can be validated with DS,
+ or self-sign for DNSKEY RRset is not valid, bad packet.
+ STAT_NEED_DS DS records to validate a key not found, name in keyname
+@@ -896,11 +895,8 @@ int dnssec_validate_by_ds(time_t now, struct dns_header *header, size_t plen, ch
+ GETSHORT(qtype, p);
+ GETSHORT(qclass, p);
+
+- if (qtype != T_DNSKEY || qclass != class)
++ if (qtype != T_DNSKEY || qclass != class || ntohs(header->ancount) == 0)
+ return STAT_BOGUS;
+-
+- if (ntohs(header->ancount) == 0)
+- return STAT_INSECURE;
+
+ /* See if we have cached a DS record which validates this key */
+ if (!(crecp = cache_find_by_name(NULL, name, now, F_DS)))
+@@ -1103,17 +1099,17 @@ int dnssec_validate_by_ds(time_t now, struct dns_header *header, size_t plen, ch
+ /* The DNS packet is expected to contain the answer to a DS query
+ Put all DSs in the answer which are valid into the cache.
+ return codes:
+- STAT_INSECURE no DS in reply or not signed.
+ STAT_SECURE At least one valid DS found and in cache.
+ STAT_NO_DS It's proved there's no DS here.
+- STAT_BOGUS At least one DS found, which fails validation, bad packet.
++ STAT_NO_NS It's proved there's no DS _or_ NS here.
++ STAT_BOGUS no DS in reply or not signed, fails validation, bad packet.
+ STAT_NEED_DNSKEY DNSKEY records to validate a DS not found, name in keyname
+ */
+
+ int dnssec_validate_ds(time_t now, struct dns_header *header, size_t plen, char *name, char *keyname, int class)
+ {
+ unsigned char *p = (unsigned char *)(header+1);
+- int qtype, qclass, val, i, neganswer;
++ int qtype, qclass, val, i, neganswer, nons;
+
+ if (ntohs(header->qdcount) != 1 ||
+ !(p = skip_name(p, header, plen, 4)))
+@@ -1125,32 +1121,39 @@ int dnssec_validate_ds(time_t now, struct dns_header *header, size_t plen, char
+ if (qtype != T_DS || qclass != class)
+ val = STAT_BOGUS;
+ else
+- val = dnssec_validate_reply(now, header, plen, name, keyname, NULL, &neganswer);
+-
+- if (val == STAT_NO_SIG)
+- val = STAT_INSECURE;
++ val = dnssec_validate_reply(now, header, plen, name, keyname, NULL, &neganswer, &nons);
++ /* Note dnssec_validate_reply() will have cached positive answers */
++
++ if (val == STAT_NO_SIG || val == STAT_INSECURE)
++ val = STAT_BOGUS;
+
+ p = (unsigned char *)(header+1);
+ extract_name(header, plen, &p, name, 1, 4);
+ p += 4; /* qtype, qclass */
+
+ if (!(p = skip_section(p, ntohs(header->ancount), header, plen)))
+- return STAT_BOGUS;
++ val = STAT_BOGUS;
+
+ if (val == STAT_BOGUS)
+- log_query(F_UPSTREAM, name, NULL, "BOGUS DS");
+-
+- if ((val == STAT_SECURE || val == STAT_INSECURE) && neganswer)
+ {
+- int rdlen, flags = F_FORWARD | F_DS | F_NEG;
++ log_query(F_UPSTREAM, name, NULL, "BOGUS DS");
++ return STAT_BOGUS;
++ }
++
++ /* By here, the answer is proved secure, and a positive answer has been cached. */
++ if (val == STAT_SECURE && neganswer)
++ {
++ int rdlen, flags = F_FORWARD | F_DS | F_NEG | F_DNSSECOK;
+ unsigned long ttl, minttl = ULONG_MAX;
+ struct all_addr a;
+
+ if (RCODE(header) == NXDOMAIN)
+ flags |= F_NXDOMAIN;
+
+- if (val == STAT_SECURE)
+- flags |= F_DNSSECOK;
++ /* We only cache validated DS records, DNSSECOK flag hijacked
++ to store presence/absence of NS. */
++ if (nons)
++ flags &= ~F_DNSSECOK;
+
+ for (i = ntohs(header->nscount); i != 0; i--)
+ {
+@@ -1196,10 +1199,12 @@ int dnssec_validate_ds(time_t now, struct dns_header *header, size_t plen, char
+ a.addr.dnssec.class = class;
+ cache_insert(name, &a, now, ttl, flags);
+
+- cache_end_insert();
++ cache_end_insert();
++
++ log_query(F_UPSTREAM, name, NULL, nons ? "no delegation" : "no DS");
+ }
+
+- return (val == STAT_SECURE) ? STAT_NO_DS : STAT_INSECURE;
++ return nons ? STAT_NO_NS : STAT_NO_DS;
+ }
+
+ return val;
+@@ -1323,12 +1328,15 @@ static int find_nsec_records(struct dns_header *header, size_t plen, unsigned ch
+ }
+
+ static int prove_non_existence_nsec(struct dns_header *header, size_t plen, unsigned char **nsecs, int nsec_count,
+- char *workspace1, char *workspace2, char *name, int type)
++ char *workspace1, char *workspace2, char *name, int type, int *nons)
+ {
+ int i, rc, rdlen;
+ unsigned char *p, *psave;
+ int offset = (type & 0xff) >> 3;
+ int mask = 0x80 >> (type & 0x07);
++
++ if (nons)
++ *nons = 0;
+
+ /* Find NSEC record that proves name doesn't exist */
+ for (i = 0; i < nsec_count; i++)
+@@ -1355,6 +1363,10 @@ static int prove_non_existence_nsec(struct dns_header *header, size_t plen, unsi
+ rdlen -= p - psave;
+ /* rdlen is now length of type map, and p points to it */
+
++ /* If we can prove that there's no NS record, return that information. */
++ if (nons && rdlen >= 2 && p[0] == 0 && (p[2] & (0x80 >> T_NS)) == 0)
++ *nons = 1;
++
+ while (rdlen >= 2)
+ {
+ if (!CHECK_LEN(header, p, plen, rdlen))
+@@ -1456,7 +1468,7 @@ static int base32_decode(char *in, unsigned char *out)
+ }
+
+ static int check_nsec3_coverage(struct dns_header *header, size_t plen, int digest_len, unsigned char *digest, int type,
+- char *workspace1, char *workspace2, unsigned char **nsecs, int nsec_count)
++ char *workspace1, char *workspace2, unsigned char **nsecs, int nsec_count, int *nons)
+ {
+ int i, hash_len, salt_len, base32_len, rdlen;
+ unsigned char *p, *psave;
+@@ -1497,6 +1509,10 @@ static int check_nsec3_coverage(struct dns_header *header, size_t plen, int dige
+ if (!CHECK_LEN(header, p, plen, rdlen))
+ return 0;
+
++ /* If we can prove that there's no NS record, return that information. */
++ if (nons && rdlen >= 2 && p[0] == 0 && (p[2] & (0x80 >> T_NS)) == 0)
++ *nons = 1;
++
+ while (rdlen >= 2)
+ {
+ if (p[0] == type >> 8)
+@@ -1533,13 +1549,16 @@ static int check_nsec3_coverage(struct dns_header *header, size_t plen, int dige
+ }
+
+ static int prove_non_existence_nsec3(struct dns_header *header, size_t plen, unsigned char **nsecs, int nsec_count,
+- char *workspace1, char *workspace2, char *name, int type, char *wildname)
++ char *workspace1, char *workspace2, char *name, int type, char *wildname, int *nons)
+ {
+ unsigned char *salt, *p, *digest;
+ int digest_len, i, iterations, salt_len, base32_len, algo = 0;
+ struct nettle_hash const *hash;
+ char *closest_encloser, *next_closest, *wildcard;
+-
++
++ if (nons)
++ *nons = 0;
++
+ /* Look though the NSEC3 records to find the first one with
+ an algorithm we support (currently only algo == 1).
+
+@@ -1612,7 +1631,7 @@ static int prove_non_existence_nsec3(struct dns_header *header, size_t plen, uns
+ if ((digest_len = hash_name(name, &digest, hash, salt, salt_len, iterations)) == 0)
+ return STAT_BOGUS;
+
+- if (check_nsec3_coverage(header, plen, digest_len, digest, type, workspace1, workspace2, nsecs, nsec_count))
++ if (check_nsec3_coverage(header, plen, digest_len, digest, type, workspace1, workspace2, nsecs, nsec_count, nons))
+ return STAT_SECURE;
+
+ /* Can't find an NSEC3 which covers the name directly, we need the "closest encloser NSEC3"
+@@ -1657,7 +1676,7 @@ static int prove_non_existence_nsec3(struct dns_header *header, size_t plen, uns
+ if ((digest_len = hash_name(next_closest, &digest, hash, salt, salt_len, iterations)) == 0)
+ return STAT_BOGUS;
+
+- if (!check_nsec3_coverage(header, plen, digest_len, digest, type, workspace1, workspace2, nsecs, nsec_count))
++ if (!check_nsec3_coverage(header, plen, digest_len, digest, type, workspace1, workspace2, nsecs, nsec_count, NULL))
+ return STAT_BOGUS;
+
+ /* Finally, check that there's no seat of wildcard synthesis */
+@@ -1672,7 +1691,7 @@ static int prove_non_existence_nsec3(struct dns_header *header, size_t plen, uns
+ if ((digest_len = hash_name(wildcard, &digest, hash, salt, salt_len, iterations)) == 0)
+ return STAT_BOGUS;
+
+- if (!check_nsec3_coverage(header, plen, digest_len, digest, type, workspace1, workspace2, nsecs, nsec_count))
++ if (!check_nsec3_coverage(header, plen, digest_len, digest, type, workspace1, workspace2, nsecs, nsec_count, NULL))
+ return STAT_BOGUS;
+ }
+
+@@ -1681,7 +1700,8 @@ static int prove_non_existence_nsec3(struct dns_header *header, size_t plen, uns
+
+ /* Validate all the RRsets in the answer and authority sections of the reply (4035:3.2.3) */
+ /* Returns are the same as validate_rrset, plus the class if the missing key is in *class */
+-int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, char *name, char *keyname, int *class, int *neganswer)
++int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, char *name, char *keyname,
++ int *class, int *neganswer, int *nons)
+ {
+ unsigned char *ans_start, *qname, *p1, *p2, **nsecs;
+ int type1, class1, rdlen1, type2, class2, rdlen2, qclass, qtype;
+@@ -1811,10 +1831,11 @@ int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, ch
+ return STAT_BOGUS; /* No NSECs or bad packet */
+
+ if (nsec_type == T_NSEC)
+- rc = prove_non_existence_nsec(header, plen, nsecs, nsec_count, daemon->workspacename, keyname, name, type1);
++ rc = prove_non_existence_nsec(header, plen, nsecs, nsec_count, daemon->workspacename, keyname, name, type1, NULL);
+ else
+- rc = prove_non_existence_nsec3(header, plen, nsecs, nsec_count, daemon->workspacename, keyname, name, type1, wildname);
+-
++ rc = prove_non_existence_nsec3(header, plen, nsecs, nsec_count, daemon->workspacename,
++ keyname, name, type1, wildname, NULL);
++
+ if (rc != STAT_SECURE)
+ return rc;
+ }
+@@ -1937,9 +1958,9 @@ int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, ch
+ return STAT_BOGUS;
+
+ if (nsec_type == T_NSEC)
+- return prove_non_existence_nsec(header, plen, nsecs, nsec_count, daemon->workspacename, keyname, name, qtype);
++ return prove_non_existence_nsec(header, plen, nsecs, nsec_count, daemon->workspacename, keyname, name, qtype, nons);
+ else
+- return prove_non_existence_nsec3(header, plen, nsecs, nsec_count, daemon->workspacename, keyname, name, qtype, NULL);
++ return prove_non_existence_nsec3(header, plen, nsecs, nsec_count, daemon->workspacename, keyname, name, qtype, NULL, nons);
+ }
+
+ /* Chase the CNAME chain in the packet until the first record which _doesn't validate.
+diff --git a/src/forward.c b/src/forward.c
+index f28c7d51f708..ee8d7b52d5e5 100644
+--- a/src/forward.c
++++ b/src/forward.c
+@@ -26,8 +26,9 @@ static void free_frec(struct frec *f);
+ #ifdef HAVE_DNSSEC
+ static int tcp_key_recurse(time_t now, int status, struct dns_header *header, size_t n,
+ int class, char *name, char *keyname, struct server *server, int *keycount);
+-static int do_check_sign(time_t now, struct dns_header *header, size_t plen, char *name, char *keyname, int class);
+-static int send_check_sign(time_t now, struct dns_header *header, size_t plen, char *name, char *keyname);
++static int do_check_sign(struct frec *forward, int status, time_t now, char *name, char *keyname);
++static int send_check_sign(struct frec *forward, time_t now, struct dns_header *header, size_t plen,
++ char *name, char *keyname);
+ #endif
+
+
+@@ -815,18 +816,22 @@ void reply_query(int fd, int family, time_t now)
+ else if (forward->flags & FREC_DS_QUERY)
+ {
+ status = dnssec_validate_ds(now, header, n, daemon->namebuff, daemon->keyname, forward->class);
+- if (status == STAT_NO_DS)
+- status = STAT_INSECURE;
++ if (status == STAT_NO_DS || status == STAT_NO_NS)
++ status = STAT_BOGUS;
+ }
+ else if (forward->flags & FREC_CHECK_NOSIGN)
+- status = do_check_sign(now, header, n, daemon->namebuff, daemon->keyname, forward->class);
++ {
++ status = dnssec_validate_ds(now, header, n, daemon->namebuff, daemon->keyname, forward->class);
++ if (status != STAT_NEED_KEY)
++ status = do_check_sign(forward, status, now, daemon->namebuff, daemon->keyname);
++ }
+ else
+ {
+- status = dnssec_validate_reply(now, header, n, daemon->namebuff, daemon->keyname, &forward->class, NULL);
++ status = dnssec_validate_reply(now, header, n, daemon->namebuff, daemon->keyname, &forward->class, NULL, NULL);
+ if (status == STAT_NO_SIG)
+ {
+ if (option_bool(OPT_DNSSEC_NO_SIGN))
+- status = send_check_sign(now, header, n, daemon->namebuff, daemon->keyname);
++ status = send_check_sign(forward, now, header, n, daemon->namebuff, daemon->keyname);
+ else
+ status = STAT_INSECURE;
+ }
+@@ -861,6 +866,7 @@ void reply_query(int fd, int family, time_t now)
+ new->blocking_query = NULL;
+ new->sentto = server;
+ new->rfd4 = NULL;
++ new->orig_domain = NULL;
+ #ifdef HAVE_IPV6
+ new->rfd6 = NULL;
+ #endif
+@@ -889,7 +895,9 @@ void reply_query(int fd, int family, time_t now)
+ new->new_id = get_id();
+ header->id = htons(new->new_id);
+ /* Save query for retransmission */
+- new->stash = blockdata_alloc((char *)header, nn);
++ if (!(new->stash = blockdata_alloc((char *)header, nn)))
++ return;
++
+ new->stash_len = nn;
+
+ /* Don't resend this. */
+@@ -946,18 +954,22 @@ void reply_query(int fd, int family, time_t now)
+ else if (forward->flags & FREC_DS_QUERY)
+ {
+ status = dnssec_validate_ds(now, header, n, daemon->namebuff, daemon->keyname, forward->class);
+- if (status == STAT_NO_DS)
+- status = STAT_INSECURE;
++ if (status == STAT_NO_DS || status == STAT_NO_NS)
++ status = STAT_BOGUS;
+ }
+ else if (forward->flags & FREC_CHECK_NOSIGN)
+- status = do_check_sign(now, header, n, daemon->namebuff, daemon->keyname, forward->class);
++ {
++ status = dnssec_validate_ds(now, header, n, daemon->namebuff, daemon->keyname, forward->class);
++ if (status != STAT_NEED_KEY)
++ status = do_check_sign(forward, status, now, daemon->namebuff, daemon->keyname);
++ }
+ else
+ {
+- status = dnssec_validate_reply(now, header, n, daemon->namebuff, daemon->keyname, &forward->class, NULL);
++ status = dnssec_validate_reply(now, header, n, daemon->namebuff, daemon->keyname, &forward->class, NULL, NULL);
+ if (status == STAT_NO_SIG)
+ {
+ if (option_bool(OPT_DNSSEC_NO_SIGN))
+- status = send_check_sign(now, header, n, daemon->namebuff, daemon->keyname);
++ status = send_check_sign(forward, now, header, n, daemon->namebuff, daemon->keyname);
+ else
+ status = STAT_INSECURE;
+ }
+@@ -1319,70 +1331,80 @@ void receive_query(struct listener *listen, time_t now)
+ /* UDP: we've got an unsigned answer, return STAT_INSECURE if we can prove there's no DS
+ and therefore the answer shouldn't be signed, or STAT_BOGUS if it should be, or
+ STAT_NEED_DS_NEG and keyname if we need to do the query. */
+-static int send_check_sign(time_t now, struct dns_header *header, size_t plen, char *name, char *keyname)
++static int send_check_sign(struct frec *forward, time_t now, struct dns_header *header, size_t plen,
++ char *name, char *keyname)
+ {
+- struct crec *crecp;
+- char *name_start = name;
+ int status = dnssec_chase_cname(now, header, plen, name, keyname);
+
+ if (status != STAT_INSECURE)
+ return status;
+
++ /* Store the domain we're trying to check. */
++ forward->name_start = strlen(name);
++ forward->name_len = forward->name_start + 1;
++ if (!(forward->orig_domain = blockdata_alloc(name, forward->name_len)))
++ return STAT_BOGUS;
++
++ return do_check_sign(forward, 0, now, name, keyname);
++}
++
++/* We either have a a reply (header non-NULL, or we need to start by looking in the cache */
++static int do_check_sign(struct frec *forward, int status, time_t now, char *name, char *keyname)
++{
++ /* get domain we're checking back from blockdata store, it's stored on the original query. */
++ while (forward->dependent)
++ forward = forward->dependent;
++
++ blockdata_retrieve(forward->orig_domain, forward->name_len, name);
++
+ while (1)
+ {
+- crecp = cache_find_by_name(NULL, name_start, now, F_DS);
+-
+- if (crecp && (crecp->flags & F_DNSSECOK))
+- return (crecp->flags & F_NEG) ? STAT_INSECURE : STAT_BOGUS;
+-
+- if (crecp && (crecp->flags & F_NEG) && (name_start = strchr(name_start, '.')))
++ char *p;
++
++ if (status == 0)
+ {
+- name_start++; /* chop a label off and try again */
+- continue;
++ struct crec *crecp;
++
++ /* Haven't received answer, see if in cache */
++ if (!(crecp = cache_find_by_name(NULL, &name[forward->name_start], now, F_DS)))
++ {
++ /* put name of DS record we're missing into keyname */
++ strcpy(keyname, &name[forward->name_start]);
++ /* and wait for reply to arrive */
++ return STAT_NEED_DS_NEG;
++ }
++
++ /* F_DNSSECOK misused in DS cache records to non-existance of NS record */
++ if (!(crecp->flags & F_NEG))
++ status = STAT_SECURE;
++ else if (crecp->flags & F_DNSSECOK)
++ status = STAT_NO_DS;
++ else
++ status = STAT_NO_NS;
+ }
++
++ /* Have entered non-signed part of DNS tree. */
++ if (status == STAT_NO_DS)
++ return STAT_INSECURE;
+
+- /* Reached the root */
+- if (!name_start)
++ if (status == STAT_BOGUS)
+ return STAT_BOGUS;
+
+- strcpy(keyname, name_start);
+- return STAT_NEED_DS_NEG;
+- }
+-}
+-
+-/* Got answer to DS query from send_check_sign, check for proven non-existence, or make the next DS query to try. */
+-static int do_check_sign(time_t now, struct dns_header *header, size_t plen, char *name, char *keyname, int class)
+-
+-{
+- char *name_start;
+- unsigned char *p;
+- int status;
++ /* There's a proven DS record, or we're within a zone, where there doesn't need
++ to be a DS record. Add a name and try again.
++ If we've already tried the whole name, then fail */
+
+- /* In this case only, a SERVFAIL reply allows us to continue up the tree, looking for a
+- suitable NSEC reply to DS queries. */
+- if (RCODE(header) != SERVFAIL)
+- {
+- status = dnssec_validate_ds(now, header, plen, name, keyname, class);
++ if (forward->name_start == 0)
++ return STAT_BOGUS;
+
+- if (status != STAT_INSECURE)
+- {
+- if (status == STAT_NO_DS)
+- status = STAT_INSECURE;
+- return status;
+- }
+- }
+-
+- p = (unsigned char *)(header+1);
+-
+- if (extract_name(header, plen, &p, name, 1, 4) &&
+- (name_start = strchr(name, '.')))
+- {
+- name_start++; /* chop a label off and try again */
+- strcpy(keyname, name_start);
+- return STAT_NEED_DS_NEG;
++ for (p = &name[forward->name_start-2]; (*p != '.') && (p != name); p--);
++
++ if (p != name)
++ p++;
++
++ forward->name_start = p - name;
++ status = 0; /* force to cache when we iterate. */
+ }
+-
+- return STAT_BOGUS;
+ }
+
+ /* Move toward the root, until we find a signed non-existance of a DS, in which case
+@@ -1395,8 +1417,10 @@ static int tcp_check_for_unsigned_zone(time_t now, struct dns_header *header, s
+ unsigned char *packet, *payload;
+ u16 *length;
+ unsigned char *p = (unsigned char *)(header+1);
+- int status;
+- char *name_start = name;
++ int status, name_len;
++ struct blockdata *block;
++
++ char *name_start;
+
+ /* Get first insecure entry in CNAME chain */
+ status = tcp_key_recurse(now, STAT_CHASE_CNAME, header, plen, class, name, keyname, server, keycount);
+@@ -1409,95 +1433,113 @@ static int tcp_check_for_unsigned_zone(time_t now, struct dns_header *header, s
+ payload = &packet[2];
+ header = (struct dns_header *)payload;
+ length = (u16 *)packet;
++
++ /* Stash the name away, since the buffer will be trashed when we recurse */
++ name_len = strlen(name) + 1;
++ name_start = name + name_len - 1;
+
++ if (!(block = blockdata_alloc(name, name_len)))
++ {
++ free(packet);
++ return STAT_BOGUS;
++ }
++
+ while (1)
+ {
+- unsigned char *newhash, hash[HASH_SIZE];
+ unsigned char c1, c2;
+- struct crec *crecp = cache_find_by_name(NULL, name_start, now, F_DS);
+-
++ struct crec *crecp;
++
+ if (--(*keycount) == 0)
+ {
+ free(packet);
++ blockdata_free(block);
+ return STAT_BOGUS;
+ }
+-
+- if (crecp && (crecp->flags & F_DNSSECOK))
+- {
+- free(packet);
+- return (crecp->flags & F_NEG) ? STAT_INSECURE : STAT_BOGUS;
+- }
+
+- /* If we have cached insecurely that a DS doesn't exist,
+- ise that is a hit for where to start looking for the secure one */
+- if (crecp && (crecp->flags & F_NEG) && (name_start = strchr(name_start, '.')))
+- {
+- name_start++; /* chop a label off and try again */
+- continue;
+- }
+-
+- /* reached the root */
+- if (!name_start)
+- {
+- free(packet);
+- return STAT_BOGUS;
++ while (crecp = cache_find_by_name(NULL, name_start, now, F_DS))
++ {
++ if ((crecp->flags & F_NEG) && (crecp->flags & F_DNSSECOK))
++ {
++ /* Found a secure denial of DS - delegation is indeed insecure */
++ free(packet);
++ blockdata_free(block);
++ return STAT_INSECURE;
++ }
++
++ /* Here, either there's a secure DS, or no NS and no DS, and therefore no delegation.
++ Add another label and continue. */
++
++ if (name_start == name)
++ {
++ free(packet);
++ blockdata_free(block);
++ return STAT_BOGUS; /* run out of labels */
++ }
++
++ name_start -= 2;
++ while (*name_start != '.' && name_start != name)
++ name_start--;
++ if (name_start != name)
++ name_start++;
+ }
++
++ /* Can't find it in the cache, have to send a query */
+
+ m = dnssec_generate_query(header, ((char *) header) + 65536, name_start, class, T_DS, &server->addr);
+
+- /* We rely on the question section coming back unchanged, ensure it is with the hash. */
+- if ((newhash = hash_questions(header, (unsigned int)m, name)))
+- {
+- memcpy(hash, newhash, HASH_SIZE);
++ *length = htons(m);
+
+- *length = htons(m);
++ if (read_write(server->tcpfd, packet, m + sizeof(u16), 0) &&
++ read_write(server->tcpfd, &c1, 1, 1) &&
++ read_write(server->tcpfd, &c2, 1, 1) &&
++ read_write(server->tcpfd, payload, (c1 << 8) | c2, 1))
++ {
++ m = (c1 << 8) | c2;
++
++ /* Note this trashes all three name workspaces */
++ status = tcp_key_recurse(now, STAT_NEED_DS_NEG, header, m, class, name, keyname, server, keycount);
+
+- if (read_write(server->tcpfd, packet, m + sizeof(u16), 0) &&
+- read_write(server->tcpfd, &c1, 1, 1) &&
+- read_write(server->tcpfd, &c2, 1, 1) &&
+- read_write(server->tcpfd, payload, (c1 << 8) | c2, 1))
++ if (status == STAT_NO_DS)
+ {
+- m = (c1 << 8) | c2;
+-
+- newhash = hash_questions(header, (unsigned int)m, name);
+- if (newhash && memcmp(hash, newhash, HASH_SIZE) == 0)
+- {
+- /* In this case only, a SERVFAIL reply allows us to continue up the tree, looking for a
+- suitable NSEC reply to DS queries. */
+- if (RCODE(header) == SERVFAIL)
+- status = STAT_INSECURE;
+- else
+- /* Note this trashes all three name workspaces */
+- status = tcp_key_recurse(now, STAT_NEED_DS_NEG, header, m, class, name, keyname, server, keycount);
+-
+- /* We've found a DS which proves the bit of the DNS where the
+- original query is, is unsigned, so the answer is OK,
+- if unvalidated. */
+- if (status == STAT_NO_DS)
+- {
+- free(packet);
+- return STAT_INSECURE;
+- }
+-
+- /* No DS, not got to DNSSEC-land yet, go up. */
+- if (status == STAT_INSECURE)
+- {
+- p = (unsigned char *)(header+1);
+-
+- if (extract_name(header, plen, &p, name, 1, 4) &&
+- (name_start = strchr(name, '.')))
+- {
+- name_start++; /* chop a label off and try again */
+- continue;
+- }
+- }
+- }
++ /* Found a secure denial of DS - delegation is indeed insecure */
++ free(packet);
++ blockdata_free(block);
++ return STAT_INSECURE;
++ }
++
++ if (status == STAT_BOGUS)
++ {
++ free(packet);
++ blockdata_free(block);
++ return STAT_BOGUS;
++ }
++
++ /* Here, either there's a secure DS, or no NS and no DS, and therefore no delegation.
++ Add another label and continue. */
++
++ /* Get name we're checking back. */
++ blockdata_retrieve(block, name_len, name);
++
++ if (name_start == name)
++ {
++ free(packet);
++ blockdata_free(block);
++ return STAT_BOGUS; /* run out of labels */
+ }
++
++ name_start -= 2;
++ while (*name_start != '.' && name_start != name)
++ name_start--;
++ if (name_start != name)
++ name_start++;
++ }
++ else
++ {
++ /* IO failure */
++ free(packet);
++ blockdata_free(block);
++ return STAT_BOGUS; /* run out of labels */
+ }
+-
+- free(packet);
+-
+- return STAT_BOGUS;
+ }
+ }
+
+@@ -1516,14 +1558,14 @@ static int tcp_key_recurse(time_t now, int status, struct dns_header *header, si
+ else if (status == STAT_NEED_DS || status == STAT_NEED_DS_NEG)
+ {
+ new_status = dnssec_validate_ds(now, header, n, name, keyname, class);
+- if (status == STAT_NEED_DS && new_status == STAT_NO_DS)
+- new_status = STAT_INSECURE;
++ if (status == STAT_NEED_DS && (new_status == STAT_NO_DS || new_status == STAT_NO_NS))
++ new_status = STAT_BOGUS;
+ }
+ else if (status == STAT_CHASE_CNAME)
+ new_status = dnssec_chase_cname(now, header, n, name, keyname);
+ else
+ {
+- new_status = dnssec_validate_reply(now, header, n, name, keyname, &class, NULL);
++ new_status = dnssec_validate_reply(now, header, n, name, keyname, &class, NULL, NULL);
+
+ if (new_status == STAT_NO_SIG)
+ {
+@@ -1576,14 +1618,14 @@ static int tcp_key_recurse(time_t now, int status, struct dns_header *header, si
+ else if (status == STAT_NEED_DS || status == STAT_NEED_DS_NEG)
+ {
+ new_status = dnssec_validate_ds(now, header, n, name, keyname, class);
+- if (status == STAT_NEED_DS && new_status == STAT_NO_DS)
+- new_status = STAT_INSECURE; /* Validated no DS */
++ if (status == STAT_NEED_DS && (new_status == STAT_NO_DS || new_status == STAT_NO_NS))
++ new_status = STAT_BOGUS; /* Validated no DS */
+ }
+ else if (status == STAT_CHASE_CNAME)
+ new_status = dnssec_chase_cname(now, header, n, name, keyname);
+ else
+ {
+- new_status = dnssec_validate_reply(now, header, n, name, keyname, &class, NULL);
++ new_status = dnssec_validate_reply(now, header, n, name, keyname, &class, NULL, NULL);
+
+ if (new_status == STAT_NO_SIG)
+ {
+@@ -1961,6 +2003,7 @@ static struct frec *allocate_frec(time_t now)
+ f->dependent = NULL;
+ f->blocking_query = NULL;
+ f->stash = NULL;
++ f->orig_domain = NULL;
+ #endif
+ daemon->frec_list = f;
+ }
+@@ -2029,6 +2072,12 @@ static void free_frec(struct frec *f)
+ f->stash = NULL;
+ }
+
++ if (f->orig_domain)
++ {
++ blockdata_free(f->orig_domain);
++ f->orig_domain = NULL;
++ }
++
+ /* Anything we're waiting on is pointless now, too */
+ if (f->blocking_query)
+ free_frec(f->blocking_query);
+--
+2.1.0
+
--- /dev/null
+From 25cf5e373eb41c088d4ee5e625209c4cf6a5659e Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Fri, 9 Jan 2015 15:53:03 +0000
+Subject: [PATCH 27/98] Add --log-queries=extra option for more complete
+ logging.
+
+---
+ CHANGELOG | 3 +++
+ man/dnsmasq.8 | 5 ++++-
+ src/cache.c | 11 ++++++++++-
+ src/config.h | 1 +
+ src/dnsmasq.c | 5 +++++
+ src/dnsmasq.h | 9 +++++++--
+ src/dnssec.c | 14 +++++++-------
+ src/forward.c | 30 ++++++++++++++++++++++++++----
+ src/option.c | 11 +++++++++--
+ 9 files changed, 72 insertions(+), 17 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index e8bf80f81baa..0bbb7835df4f 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -40,6 +40,9 @@ version 2.73
+ nameservers in the unsigned parts of the DNS tree
+ which don't respond well to DNSSEC queries.
+
++ Add --log-queries=extra option, which makes logs easier
++ to search automatically.
++
+
+ version 2.72
+ Add ra-advrouter mode, for RFC-3775 mobile IPv6 support.
+diff --git a/man/dnsmasq.8 b/man/dnsmasq.8
+index 4236ba307df3..227d74bd80e7 100644
+--- a/man/dnsmasq.8
++++ b/man/dnsmasq.8
+@@ -98,7 +98,10 @@ only, to stop dnsmasq daemonising in production, use
+ .B -k.
+ .TP
+ .B \-q, --log-queries
+-Log the results of DNS queries handled by dnsmasq. Enable a full cache dump on receipt of SIGUSR1.
++Log the results of DNS queries handled by dnsmasq. Enable a full cache dump on receipt of SIGUSR1. If the argument "extra" is supplied, ie
++.B --log-queries=extra
++then the log has extra information at the start of each line.
++This consists of a serial number which ties together the log lines associated with an individual query, and the IP address of the requestor.
+ .TP
+ .B \-8, --log-facility=<facility>
+ Set the facility to which dnsmasq will send syslog entries, this
+diff --git a/src/cache.c b/src/cache.c
+index ff1ca6f1c352..960bb7938778 100644
+--- a/src/cache.c
++++ b/src/cache.c
+@@ -1638,7 +1638,16 @@ void log_query(unsigned int flags, char *name, struct all_addr *addr, char *arg)
+ if (strlen(name) == 0)
+ name = ".";
+
+- my_syslog(LOG_INFO, "%s %s %s %s", source, name, verb, dest);
++ if (option_bool(OPT_EXTRALOG))
++ {
++ prettyprint_addr(daemon->log_source_addr, daemon->addrbuff2);
++ if (flags & F_NOEXTRA)
++ my_syslog(LOG_INFO, "* %s %s %s %s %s", daemon->addrbuff2, source, name, verb, dest);
++ else
++ my_syslog(LOG_INFO, "%u %s %s %s %s %s", daemon->log_display_id, daemon->addrbuff2, source, name, verb, dest);
++ }
++ else
++ my_syslog(LOG_INFO, "%s %s %s %s", source, name, verb, dest);
+ }
+
+
+diff --git a/src/config.h b/src/config.h
+index 145820ad2510..3b88d8193dca 100644
+--- a/src/config.h
++++ b/src/config.h
+@@ -17,6 +17,7 @@
+ #define FTABSIZ 150 /* max number of outstanding requests (default) */
+ #define MAX_PROCS 20 /* max no children for TCP requests */
+ #define CHILD_LIFETIME 150 /* secs 'till terminated (RFC1035 suggests > 120s) */
++#define TCP_MAX_QUERIES 100 /* Maximum number of queries per incoming TCP connection */
+ #define EDNS_PKTSZ 4096 /* default max EDNS.0 UDP packet from RFC5625 */
+ #define KEYBLOCK_LEN 40 /* choose to mininise fragmentation when storing DNSSEC keys */
+ #define DNSSEC_WORK 50 /* Max number of queries to validate one question */
+diff --git a/src/dnsmasq.c b/src/dnsmasq.c
+index 5c7750d365fa..c0c0589d4ce1 100644
+--- a/src/dnsmasq.c
++++ b/src/dnsmasq.c
+@@ -93,6 +93,8 @@ int main (int argc, char **argv)
+ daemon->packet = safe_malloc(daemon->packet_buff_sz);
+
+ daemon->addrbuff = safe_malloc(ADDRSTRLEN);
++ if (option_bool(OPT_EXTRALOG))
++ daemon->addrbuff2 = safe_malloc(ADDRSTRLEN);
+
+ #ifdef HAVE_DNSSEC
+ if (option_bool(OPT_DNSSEC_VALID))
+@@ -1587,6 +1589,9 @@ static void check_dns_listeners(fd_set *set, time_t now)
+ }
+ }
+ close(confd);
++
++ /* The child can use up to TCP_MAX_QUERIES ids, so skip that many. */
++ daemon->log_id += TCP_MAX_QUERIES;
+ }
+ #endif
+ else
+diff --git a/src/dnsmasq.h b/src/dnsmasq.h
+index 2f4597294a56..4e9aea401b75 100644
+--- a/src/dnsmasq.h
++++ b/src/dnsmasq.h
+@@ -238,7 +238,8 @@ struct event_desc {
+ #define OPT_DNSSEC_NO_SIGN 48
+ #define OPT_LOCAL_SERVICE 49
+ #define OPT_LOOP_DETECT 50
+-#define OPT_LAST 51
++#define OPT_EXTRALOG 51
++#define OPT_LAST 52
+
+ /* extra flags for my_syslog, we use a couple of facilities since they are known
+ not to occupy the same bits as priorities, no matter how syslog.h is set up. */
+@@ -442,6 +443,7 @@ struct crec {
+ #define F_NO_RR (1u<<25)
+ #define F_IPSET (1u<<26)
+ #define F_NSIGMATCH (1u<<27)
++#define F_NOEXTRA (1u<<28)
+
+ /* Values of uid in crecs with F_CONFIG bit set. */
+ #define SRC_INTERFACE 0
+@@ -599,7 +601,7 @@ struct frec {
+ #endif
+ unsigned int iface;
+ unsigned short orig_id, new_id;
+- int fd, forwardall, flags;
++ int log_id, fd, forwardall, flags;
+ time_t time;
+ unsigned char *hash[HASH_SIZE];
+ #ifdef HAVE_DNSSEC
+@@ -1002,6 +1004,8 @@ extern struct daemon {
+ struct randfd randomsocks[RANDOM_SOCKS];
+ int v6pktinfo;
+ struct addrlist *interface_addrs; /* list of all addresses/prefix lengths associated with all local interfaces */
++ int log_id, log_display_id; /* ids of transactions for logging */
++ union mysockaddr *log_source_addr;
+
+ /* DHCP state */
+ int dhcpfd, helperfd, pxefd;
+@@ -1033,6 +1037,7 @@ extern struct daemon {
+
+ /* utility string buffer, hold max sized IP address as string */
+ char *addrbuff;
++ char *addrbuff2; /* only allocated when OPT_EXTRALOG */
+
+ } *daemon;
+
+diff --git a/src/dnssec.c b/src/dnssec.c
+index 8f27677628b2..afb3dca38cb1 100644
+--- a/src/dnssec.c
++++ b/src/dnssec.c
+@@ -1038,7 +1038,7 @@ int dnssec_validate_by_ds(time_t now, struct dns_header *header, size_t plen, ch
+ else
+ {
+ a.addr.keytag = keytag;
+- log_query(F_KEYTAG | F_UPSTREAM, name, &a, "DNSKEY keytag %u");
++ log_query(F_NOEXTRA | F_KEYTAG | F_UPSTREAM, name, &a, "DNSKEY keytag %u");
+
+ recp1->addr.key.keylen = rdlen - 4;
+ recp1->addr.key.keydata = key;
+@@ -1092,7 +1092,7 @@ int dnssec_validate_by_ds(time_t now, struct dns_header *header, size_t plen, ch
+ return STAT_SECURE;
+ }
+
+- log_query(F_UPSTREAM, name, NULL, "BOGUS DNSKEY");
++ log_query(F_NOEXTRA | F_UPSTREAM, name, NULL, "BOGUS DNSKEY");
+ return STAT_BOGUS;
+ }
+
+@@ -1136,7 +1136,7 @@ int dnssec_validate_ds(time_t now, struct dns_header *header, size_t plen, char
+
+ if (val == STAT_BOGUS)
+ {
+- log_query(F_UPSTREAM, name, NULL, "BOGUS DS");
++ log_query(F_NOEXTRA | F_UPSTREAM, name, NULL, "BOGUS DS");
+ return STAT_BOGUS;
+ }
+
+@@ -1201,7 +1201,7 @@ int dnssec_validate_ds(time_t now, struct dns_header *header, size_t plen, char
+
+ cache_end_insert();
+
+- log_query(F_UPSTREAM, name, NULL, nons ? "no delegation" : "no DS");
++ log_query(F_NOEXTRA | F_UPSTREAM, name, NULL, nons ? "no delegation" : "no DS");
+ }
+
+ return nons ? STAT_NO_NS : STAT_NO_DS;
+@@ -1885,7 +1885,7 @@ int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, ch
+ else
+ {
+ a.addr.keytag = keytag;
+- log_query(F_KEYTAG | F_UPSTREAM, name, &a, "DS keytag %u");
++ log_query(F_NOEXTRA | F_KEYTAG | F_UPSTREAM, name, &a, "DS keytag %u");
+ crecp->addr.ds.digest = digest;
+ crecp->addr.ds.keydata = key;
+ crecp->addr.ds.algo = algo;
+@@ -2058,10 +2058,10 @@ size_t dnssec_generate_query(struct dns_header *header, char *end, char *name, i
+ char *types = querystr("dnssec-query", type);
+
+ if (addr->sa.sa_family == AF_INET)
+- log_query(F_DNSSEC | F_IPV4, name, (struct all_addr *)&addr->in.sin_addr, types);
++ log_query(F_NOEXTRA | F_DNSSEC | F_IPV4, name, (struct all_addr *)&addr->in.sin_addr, types);
+ #ifdef HAVE_IPV6
+ else
+- log_query(F_DNSSEC | F_IPV6, name, (struct all_addr *)&addr->in6.sin6_addr, types);
++ log_query(F_NOEXTRA | F_DNSSEC | F_IPV6, name, (struct all_addr *)&addr->in6.sin6_addr, types);
+ #endif
+
+ header->qdcount = htons(1);
+diff --git a/src/forward.c b/src/forward.c
+index 55f583383bc6..713a64c0fa58 100644
+--- a/src/forward.c
++++ b/src/forward.c
+@@ -279,10 +279,10 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
+ plen = forward->stash_len;
+
+ if (forward->sentto->addr.sa.sa_family == AF_INET)
+- log_query(F_DNSSEC | F_IPV4, "retry", (struct all_addr *)&forward->sentto->addr.in.sin_addr, "dnssec");
++ log_query(F_NOEXTRA | F_DNSSEC | F_IPV4, "retry", (struct all_addr *)&forward->sentto->addr.in.sin_addr, "dnssec");
+ #ifdef HAVE_IPV6
+ else
+- log_query(F_DNSSEC | F_IPV6, "retry", (struct all_addr *)&forward->sentto->addr.in6.sin6_addr, "dnssec");
++ log_query(F_NOEXTRA | F_DNSSEC | F_IPV6, "retry", (struct all_addr *)&forward->sentto->addr.in6.sin6_addr, "dnssec");
+ #endif
+
+ if (forward->sentto->sfd)
+@@ -389,6 +389,9 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
+ struct server *firstsentto = start;
+ int forwarded = 0;
+
++ /* If a query is retried, use the log_id for the retry when logging the answer. */
++ forward->log_id = daemon->log_id;
++
+ if (option_bool(OPT_ADD_MAC))
+ plen = add_mac(header, plen, ((char *) header) + daemon->packet_buff_sz, &forward->source);
+
+@@ -725,6 +728,11 @@ void reply_query(int fd, int family, time_t now)
+ if (!(forward = lookup_frec(ntohs(header->id), hash)))
+ return;
+
++ /* log_query gets called indirectly all over the place, so
++ pass these in global variables - sorry. */
++ daemon->log_display_id = forward->log_id;
++ daemon->log_source_addr = &forward->source;
++
+ if (daemon->ignore_addr && RCODE(header) == NOERROR &&
+ check_for_ignored_address(header, n, daemon->ignore_addr))
+ return;
+@@ -1258,6 +1266,11 @@ void receive_query(struct listener *listen, time_t now)
+ dst_addr_4.s_addr = 0;
+ }
+ }
++
++ /* log_query gets called indirectly all over the place, so
++ pass these in global variables - sorry. */
++ daemon->log_display_id = ++daemon->log_id;
++ daemon->log_source_addr = &source_addr;
+
+ if (extract_request(header, (size_t)n, daemon->namebuff, &type))
+ {
+@@ -1675,7 +1688,8 @@ unsigned char *tcp_request(int confd, time_t now,
+ struct in_addr dst_addr_4;
+ union mysockaddr peer_addr;
+ socklen_t peer_len = sizeof(union mysockaddr);
+-
++ int query_count = 0;
++
+ if (getpeername(confd, (struct sockaddr *)&peer_addr, &peer_len) == -1)
+ return packet;
+
+@@ -1712,7 +1726,8 @@ unsigned char *tcp_request(int confd, time_t now,
+
+ while (1)
+ {
+- if (!packet ||
++ if (query_count == TCP_MAX_QUERIES ||
++ !packet ||
+ !read_write(confd, &c1, 1, 1) || !read_write(confd, &c2, 1, 1) ||
+ !(size = c1 << 8 | c2) ||
+ !read_write(confd, payload, size, 1))
+@@ -1721,6 +1736,13 @@ unsigned char *tcp_request(int confd, time_t now,
+ if (size < (int)sizeof(struct dns_header))
+ continue;
+
++ query_count++;
++
++ /* log_query gets called indirectly all over the place, so
++ pass these in global variables - sorry. */
++ daemon->log_display_id = ++daemon->log_id;
++ daemon->log_source_addr = &peer_addr;
++
+ check_subnet = 0;
+
+ /* save state of "cd" flag in query */
+diff --git a/src/option.c b/src/option.c
+index 907d0cf88de9..b7372be0a090 100644
+--- a/src/option.c
++++ b/src/option.c
+@@ -149,6 +149,7 @@ struct myoption {
+ #define LOPT_LOOP_DETECT 337
+ #define LOPT_IGNORE_ADDR 338
+
++
+ #ifdef HAVE_GETOPT_LONG
+ static const struct option opts[] =
+ #else
+@@ -160,7 +161,7 @@ static const struct myoption opts[] =
+ { "no-poll", 0, 0, 'n' },
+ { "help", 0, 0, 'w' },
+ { "no-daemon", 0, 0, 'd' },
+- { "log-queries", 0, 0, 'q' },
++ { "log-queries", 2, 0, 'q' },
+ { "user", 2, 0, 'u' },
+ { "group", 2, 0, 'g' },
+ { "resolv-file", 2, 0, 'r' },
+@@ -357,7 +358,7 @@ static struct {
+ { LOPT_FORCE, ARG_DUP, "<optspec>", gettext_noop("DHCP option sent even if the client does not request it."), NULL},
+ { 'p', ARG_ONE, "<integer>", gettext_noop("Specify port to listen for DNS requests on (defaults to 53)."), NULL },
+ { 'P', ARG_ONE, "<integer>", gettext_noop("Maximum supported UDP packet size for EDNS.0 (defaults to %s)."), "*" },
+- { 'q', OPT_LOG, NULL, gettext_noop("Log DNS queries."), NULL },
++ { 'q', ARG_DUP, NULL, gettext_noop("Log DNS queries."), NULL },
+ { 'Q', ARG_ONE, "<integer>", gettext_noop("Force the originating port for upstream DNS queries."), NULL },
+ { 'R', OPT_NO_RESOLV, NULL, gettext_noop("Do NOT read resolv.conf."), NULL },
+ { 'r', ARG_DUP, "<path>", gettext_noop("Specify path to resolv.conf (defaults to %s)."), RESOLVFILE },
+@@ -2421,6 +2422,12 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
+ ret_err(gen_err);
+ break;
+
++ case 'q': /* --log-queries */
++ set_option_bool(OPT_LOG);
++ if (arg && strcmp(arg, "extra") == 0)
++ set_option_bool(OPT_EXTRALOG);
++ break;
++
+ case LOPT_MAX_LOGS: /* --log-async */
+ daemon->max_logs = LOG_MAX; /* default */
+ if (arg && !atoi_check(arg, &daemon->max_logs))
+--
+2.1.0
+
--- /dev/null
+From 28de38768e2c7d763b9aa5b7a4d251d5e56bab0b Mon Sep 17 00:00:00 2001
+From: RinSatsuki <aa65535@live.com>
+Date: Sat, 10 Jan 2015 15:22:21 +0000
+Subject: [PATCH 28/98] Add --min-cache-ttl option.
+
+---
+ CHANGELOG | 7 +++++++
+ man/dnsmasq.8 | 6 ++++++
+ src/cache.c | 4 +++-
+ src/config.h | 1 +
+ src/dnsmasq.h | 2 +-
+ src/option.c | 11 +++++++++++
+ 6 files changed, 29 insertions(+), 2 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 0bbb7835df4f..23fc6d0530cf 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -43,6 +43,13 @@ version 2.73
+ Add --log-queries=extra option, which makes logs easier
+ to search automatically.
+
++ Add --min-cache-ttl option. I've resisted this for a long
++ time, on the grounds that disbelieving TTLs is never a
++ good idea, but I've been persuaded that there are
++ sometimes reasons to do it. (Step forward, GFW).
++ To avoid misuse, there's a hard limit on the TTL
++ floor of one hour. Thansk to RinSatsuki for the patch.
++
+
+ version 2.72
+ Add ra-advrouter mode, for RFC-3775 mobile IPv6 support.
+diff --git a/man/dnsmasq.8 b/man/dnsmasq.8
+index 227d74bd80e7..5cfa355dea4a 100644
+--- a/man/dnsmasq.8
++++ b/man/dnsmasq.8
+@@ -81,6 +81,12 @@ the upstream DNS servers.
+ .B --max-cache-ttl=<time>
+ Set a maximum TTL value for entries in the cache.
+ .TP
++.B --min-cache-ttl=<time>
++Extend short TTL values to the time given when caching them. Note that
++artificially extending TTL values is in general a bad idea, do not do it
++unless you have a good reason, and understand what you are doing.
++Dnsmasq limits the value of this option to one hour, unless recompiled.
++.TP
+ .B --auth-ttl=<time>
+ Set the TTL value returned in answers from the authoritative server.
+ .TP
+diff --git a/src/cache.c b/src/cache.c
+index 960bb7938778..945be071a0b6 100644
+--- a/src/cache.c
++++ b/src/cache.c
+@@ -461,9 +461,11 @@ struct crec *cache_insert(char *name, struct all_addr *addr,
+ if (flags & (F_IPV4 | F_IPV6 | F_CNAME))
+ {
+ log_query(flags | F_UPSTREAM, name, addr, NULL);
+- /* Don;t mess with TTL for DNSSEC records. */
++ /* Don't mess with TTL for DNSSEC records. */
+ if (daemon->max_cache_ttl != 0 && daemon->max_cache_ttl < ttl)
+ ttl = daemon->max_cache_ttl;
++ if (daemon->min_cache_ttl != 0 && daemon->min_cache_ttl > ttl)
++ ttl = daemon->min_cache_ttl;
+ }
+
+ /* if previous insertion failed give up now. */
+diff --git a/src/config.h b/src/config.h
+index 3b88d8193dca..cdca231b4079 100644
+--- a/src/config.h
++++ b/src/config.h
+@@ -27,6 +27,7 @@
+ #define RANDOM_SOCKS 64 /* max simultaneous random ports */
+ #define LEASE_RETRY 60 /* on error, retry writing leasefile after LEASE_RETRY seconds */
+ #define CACHESIZ 150 /* default cache size */
++#define TTL_FLOOR_LIMIT 3600 /* don't allow --min-cache-ttl to raise TTL above this under any circumstances */
+ #define MAXLEASES 1000 /* maximum number of DHCP leases */
+ #define PING_WAIT 3 /* wait for ping address-in-use test */
+ #define PING_CACHE_TIME 30 /* Ping test assumed to be valid this long. */
+diff --git a/src/dnsmasq.h b/src/dnsmasq.h
+index 4e9aea401b75..f8275e3ac479 100644
+--- a/src/dnsmasq.h
++++ b/src/dnsmasq.h
+@@ -943,7 +943,7 @@ extern struct daemon {
+ int max_logs; /* queue limit */
+ int cachesize, ftabsize;
+ int port, query_port, min_port;
+- unsigned long local_ttl, neg_ttl, max_ttl, max_cache_ttl, auth_ttl;
++ unsigned long local_ttl, neg_ttl, max_ttl, min_cache_ttl, max_cache_ttl, auth_ttl;
+ struct hostsfile *addn_hosts;
+ struct dhcp_context *dhcp, *dhcp6;
+ struct ra_interface *ra_interfaces;
+diff --git a/src/option.c b/src/option.c
+index b7372be0a090..8b994098cc9f 100644
+--- a/src/option.c
++++ b/src/option.c
+@@ -148,6 +148,7 @@ struct myoption {
+ #define LOPT_DNSSEC_TIME 336
+ #define LOPT_LOOP_DETECT 337
+ #define LOPT_IGNORE_ADDR 338
++#define LOPT_MINCTTL 339
+
+
+ #ifdef HAVE_GETOPT_LONG
+@@ -256,6 +257,7 @@ static const struct myoption opts[] =
+ { "dhcp-broadcast", 2, 0, LOPT_BROADCAST },
+ { "neg-ttl", 1, 0, LOPT_NEGTTL },
+ { "max-ttl", 1, 0, LOPT_MAXTTL },
++ { "min-cache-ttl", 1, 0, LOPT_MINCTTL },
+ { "max-cache-ttl", 1, 0, LOPT_MAXCTTL },
+ { "dhcp-alternate-port", 2, 0, LOPT_ALTPORT },
+ { "dhcp-scriptuser", 1, 0, LOPT_SCRIPTUSR },
+@@ -371,6 +373,8 @@ static struct {
+ { 'T', ARG_ONE, "<integer>", gettext_noop("Specify time-to-live in seconds for replies from /etc/hosts."), NULL },
+ { LOPT_NEGTTL, ARG_ONE, "<integer>", gettext_noop("Specify time-to-live in seconds for negative caching."), NULL },
+ { LOPT_MAXTTL, ARG_ONE, "<integer>", gettext_noop("Specify time-to-live in seconds for maximum TTL to send to clients."), NULL },
++ { LOPT_MAXCTTL, ARG_ONE, "<integer>", gettext_noop("Specify time-to-live ceiling for cache."), NULL },
++ { LOPT_MINCTTL, ARG_ONE, "<integer>", gettext_noop("Specify time-to-live floor for cache."), NULL },
+ { 'u', ARG_ONE, "<username>", gettext_noop("Change to this user after startup. (defaults to %s)."), CHUSER },
+ { 'U', ARG_DUP, "set:<tag>,<class>", gettext_noop("Map DHCP vendor class to tag."), NULL },
+ { 'v', 0, NULL, gettext_noop("Display dnsmasq version and copyright information."), NULL },
+@@ -2457,6 +2461,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
+ case 'T': /* --local-ttl */
+ case LOPT_NEGTTL: /* --neg-ttl */
+ case LOPT_MAXTTL: /* --max-ttl */
++ case LOPT_MINCTTL: /* --min-cache-ttl */
+ case LOPT_MAXCTTL: /* --max-cache-ttl */
+ case LOPT_AUTHTTL: /* --auth-ttl */
+ {
+@@ -2467,6 +2472,12 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
+ daemon->neg_ttl = (unsigned long)ttl;
+ else if (option == LOPT_MAXTTL)
+ daemon->max_ttl = (unsigned long)ttl;
++ else if (option == LOPT_MINCTTL)
++ {
++ if (ttl > TTL_FLOOR_LIMIT)
++ ttl = TTL_FLOOR_LIMIT;
++ daemon->min_cache_ttl = (unsigned long)ttl;
++ }
+ else if (option == LOPT_MAXCTTL)
+ daemon->max_cache_ttl = (unsigned long)ttl;
+ else if (option == LOPT_AUTHTTL)
+--
+2.1.0
+
--- /dev/null
+From 9f79ee4ae34886c0319f06d8f162b81ef79d62fb Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Mon, 12 Jan 2015 20:18:18 +0000
+Subject: [PATCH 29/98] Log port of requestor when doing extra logging.
+
+---
+ src/cache.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/cache.c b/src/cache.c
+index 945be071a0b6..09b6dbf8087a 100644
+--- a/src/cache.c
++++ b/src/cache.c
+@@ -1642,11 +1642,11 @@ void log_query(unsigned int flags, char *name, struct all_addr *addr, char *arg)
+
+ if (option_bool(OPT_EXTRALOG))
+ {
+- prettyprint_addr(daemon->log_source_addr, daemon->addrbuff2);
++ int port = prettyprint_addr(daemon->log_source_addr, daemon->addrbuff2);
+ if (flags & F_NOEXTRA)
+- my_syslog(LOG_INFO, "* %s %s %s %s %s", daemon->addrbuff2, source, name, verb, dest);
++ my_syslog(LOG_INFO, "* %s/%u %s %s %s %s", daemon->addrbuff2, port, source, name, verb, dest);
+ else
+- my_syslog(LOG_INFO, "%u %s %s %s %s %s", daemon->log_display_id, daemon->addrbuff2, source, name, verb, dest);
++ my_syslog(LOG_INFO, "%u %s/%u %s %s %s %s", daemon->log_display_id, daemon->addrbuff2, port, source, name, verb, dest);
+ }
+ else
+ my_syslog(LOG_INFO, "%s %s %s %s", source, name, verb, dest);
+--
+2.1.0
+
--- /dev/null
+From 5e321739db381a1d7b5964d76e9c81471d2564c9 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Mon, 12 Jan 2015 23:16:56 +0000
+Subject: [PATCH 30/98] Don't answer from cache RRsets from wildcards, as we
+ don't have NSECs.
+
+---
+ src/dnssec.c | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/src/dnssec.c b/src/dnssec.c
+index afb3dca38cb1..d39ab85ed966 100644
+--- a/src/dnssec.c
++++ b/src/dnssec.c
+@@ -1818,11 +1818,14 @@ int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, ch
+ struct blockdata *key;
+ struct crec *crecp;
+ char *wildname;
++ int have_wildcard = 0;
+
+ rc = validate_rrset(now, header, plen, class1, type1, name, keyname, &wildname, NULL, 0, 0, 0);
+
+ if (rc == STAT_SECURE_WILDCARD)
+ {
++ have_wildcard = 1;
++
+ /* An attacker replay a wildcard answer with a different
+ answer and overlay a genuine RR. To prove this
+ hasn't happened, the answer must prove that
+@@ -1913,7 +1916,11 @@ int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, ch
+ p2 += 13; /* labels, orig_ttl, expiration, inception */
+ GETSHORT(keytag, p2);
+
+- if ((key = blockdata_alloc((char*)psave, rdlen2)))
++ /* We don't cache sigs for wildcard answers, because to reproduce the
++ answer from the cache will require one or more NSEC/NSEC3 records
++ which we don't cache. The lack of the RRSIG ensures that a query for
++ this RRset asking for a secure answer will always be forwarded. */
++ if (!have_wildcard && (key = blockdata_alloc((char*)psave, rdlen2)))
+ {
+ if (!(crecp = cache_insert(name, &a, now, ttl, F_FORWARD | F_DNSKEY | F_DS)))
+ blockdata_free(key);
+--
+2.1.0
+
--- /dev/null
+From ae4624bf46b5e37ff1a9a2ba3c927e0dede95adb Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Mon, 12 Jan 2015 23:22:08 +0000
+Subject: [PATCH 31/98] Logs for DS records consistent.
+
+---
+ src/rfc1035.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/rfc1035.c b/src/rfc1035.c
+index 75c4266b47dd..262274fc5b80 100644
+--- a/src/rfc1035.c
++++ b/src/rfc1035.c
+@@ -1643,7 +1643,7 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
+ {
+ if (crecp->flags & F_NXDOMAIN)
+ nxdomain = 1;
+- log_query(F_UPSTREAM, name, NULL, "secure no DS");
++ log_query(F_UPSTREAM, name, NULL, "no DS");
+ }
+ else if ((keydata = blockdata_retrieve(crecp->addr.ds.keydata, crecp->addr.ds.keylen, NULL)))
+ {
+--
+2.1.0
+
--- /dev/null
+From 393415597c8b5b09558b789ab9ac238dbe3db65d Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sun, 18 Jan 2015 22:11:10 +0000
+Subject: [PATCH 32/98] Cope with multiple interfaces with the same LL address.
+
+---
+ CHANGELOG | 4 ++++
+ src/auth.c | 5 ++++-
+ src/util.c | 1 +
+ 3 files changed, 9 insertions(+), 1 deletion(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 23fc6d0530cf..bbd7e6619689 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -49,6 +49,10 @@ version 2.73
+ sometimes reasons to do it. (Step forward, GFW).
+ To avoid misuse, there's a hard limit on the TTL
+ floor of one hour. Thansk to RinSatsuki for the patch.
++
++ Cope with multiple interfaces with the same link-local
++ address. (IPv6 addresses are scoped, so this is allowed.)
++ Thanks to Cory Benfield for help with this.
+
+
+ version 2.72
+diff --git a/src/auth.c b/src/auth.c
+index a327f16d8c0b..59e05d3da38e 100644
+--- a/src/auth.c
++++ b/src/auth.c
+@@ -413,7 +413,10 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
+ peer_addr->in.sin_port = 0;
+ #ifdef HAVE_IPV6
+ else
+- peer_addr->in6.sin6_port = 0;
++ {
++ peer_addr->in6.sin6_port = 0;
++ peer_addr->in6.sin6_scope_id = 0;
++ }
+ #endif
+
+ for (peers = daemon->auth_peers; peers; peers = peers->next)
+diff --git a/src/util.c b/src/util.c
+index a729f339e219..d532444da207 100644
+--- a/src/util.c
++++ b/src/util.c
+@@ -274,6 +274,7 @@ int sockaddr_isequal(union mysockaddr *s1, union mysockaddr *s2)
+ #ifdef HAVE_IPV6
+ if (s1->sa.sa_family == AF_INET6 &&
+ s1->in6.sin6_port == s2->in6.sin6_port &&
++ s1->in6.sin6_scope_id == s2->in6.sin6_scope_id &&
+ IN6_ARE_ADDR_EQUAL(&s1->in6.sin6_addr, &s2->in6.sin6_addr))
+ return 1;
+ #endif
+--
+2.1.0
+
--- /dev/null
+From 2ae195f5a71f7c5a75717845de1bd72fc7dd67f3 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sun, 18 Jan 2015 22:20:48 +0000
+Subject: [PATCH 33/98] Don't treat SERVFAIL as a recoverable error.....
+
+---
+ src/forward.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/forward.c b/src/forward.c
+index 713a64c0fa58..b17bc34f865f 100644
+--- a/src/forward.c
++++ b/src/forward.c
+@@ -737,7 +737,7 @@ void reply_query(int fd, int family, time_t now)
+ check_for_ignored_address(header, n, daemon->ignore_addr))
+ return;
+
+- if ((RCODE(header) == SERVFAIL || RCODE(header) == REFUSED) &&
++ if (RCODE(header) == REFUSED &&
+ !option_bool(OPT_ORDER) &&
+ forward->forwardall == 0)
+ /* for broken servers, attempt to send to another one. */
+--
+2.1.0
+
--- /dev/null
+From 5f4dc5c6ca50655ab14f572c7e30815ed74cd51a Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Tue, 20 Jan 2015 20:51:02 +0000
+Subject: [PATCH 34/98] Add --dhcp-hostsdir config option.
+
+---
+ CHANGELOG | 5 +++
+ man/dnsmasq.8 | 9 +++++
+ src/dnsmasq.c | 28 ++++++++++----
+ src/dnsmasq.h | 15 ++++++--
+ src/inotify.c | 119 +++++++++++++++++++++++++++++++++++++++++++++++++++++++---
+ src/option.c | 22 +++++++++--
+ 6 files changed, 177 insertions(+), 21 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index bbd7e6619689..0076b557e95e 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -53,6 +53,11 @@ version 2.73
+ Cope with multiple interfaces with the same link-local
+ address. (IPv6 addresses are scoped, so this is allowed.)
+ Thanks to Cory Benfield for help with this.
++
++ Add --dhcp-hostsdir. This allows addition of new host
++ configurations to a running dnsmasq instance much more
++ cheaply than having dnsmasq re-read all its existing
++ configuration each time.
+
+
+ version 2.72
+diff --git a/man/dnsmasq.8 b/man/dnsmasq.8
+index 5cfa355dea4a..005b5cca8d1f 100644
+--- a/man/dnsmasq.8
++++ b/man/dnsmasq.8
+@@ -977,6 +977,15 @@ is given, then read all the files contained in that directory. The advantage of
+ using this option is the same as for --dhcp-hostsfile: the
+ dhcp-optsfile will be re-read when dnsmasq receives SIGHUP. Note that
+ it is possible to encode the information in a
++.TP
++.B --dhcp-hostsdir=<path>
++This is exactly equivalent to dhcp-hostfile, except for the following. The path MUST be a
++directory, and not an individual file. Changed or new files within
++the directory are read automatically, without the need to send SIGHUP.
++If a file is deleted for changed after it has been read by dnsmasq, then the
++host record it contained will remain until dnsmasq recieves a SIGHUP, or
++is restarted; ie host records are only added dynamically.
++.TP
+ .B --dhcp-boot
+ flag as DHCP options, using the options names bootfile-name,
+ server-ip-address and tftp-server. This allows these to be included
+diff --git a/src/dnsmasq.c b/src/dnsmasq.c
+index c0c0589d4ce1..04cc98278f62 100644
+--- a/src/dnsmasq.c
++++ b/src/dnsmasq.c
+@@ -142,6 +142,9 @@ int main (int argc, char **argv)
+ set_option_bool(OPT_NOWILD);
+ reset_option_bool(OPT_CLEVERBIND);
+ }
++
++ if (daemon->inotify_hosts)
++ die(_("dhcp-hostsdir not supported on this platform"), NULL, EC_BADCONF);
+ #endif
+
+ if (option_bool(OPT_DNSSEC_VALID))
+@@ -316,13 +319,16 @@ int main (int argc, char **argv)
+ #ifdef HAVE_DNSSEC
+ blockdata_init();
+ #endif
++ }
+
+ #ifdef HAVE_LINUX_NETWORK
+- if (!option_bool(OPT_NO_POLL))
+- inotify_dnsmasq_init();
++ if ((!option_bool(OPT_NO_POLL) && daemon->port != 0) ||
++ daemon->dhcp || daemon->doing_dhcp6)
++ inotify_dnsmasq_init();
++ else
++ daemon->inotifyfd = -1;
+ #endif
+- }
+-
++
+ if (option_bool(OPT_DBUS))
+ #ifdef HAVE_DBUS
+ {
+@@ -745,7 +751,7 @@ int main (int argc, char **argv)
+ #endif
+
+ #ifdef HAVE_TFTP
+- if (option_bool(OPT_TFTP))
++ if (option_bool(OPT_TFTP))
+ {
+ #ifdef FD_SETSIZE
+ if (FD_SETSIZE < (unsigned)max_fd)
+@@ -870,7 +876,7 @@ int main (int argc, char **argv)
+ #if defined(HAVE_LINUX_NETWORK)
+ FD_SET(daemon->netlinkfd, &rset);
+ bump_maxfd(daemon->netlinkfd, &maxfd);
+- if (daemon->port != 0 && !option_bool(OPT_NO_POLL))
++ if (daemon->inotifyfd != -1)
+ {
+ FD_SET(daemon->inotifyfd, &rset);
+ bump_maxfd(daemon->inotifyfd, &maxfd);
+@@ -943,8 +949,11 @@ int main (int argc, char **argv)
+ #endif
+
+ #ifdef HAVE_LINUX_NETWORK
+- if (daemon->port != 0 && !option_bool(OPT_NO_POLL) && FD_ISSET(daemon->inotifyfd, &rset) && inotify_check())
+- poll_resolv(1, 1, now);
++ if (daemon->inotifyfd != -1 && FD_ISSET(daemon->inotifyfd, &rset) && inotify_check(now))
++ {
++ if (daemon->port != 0 && !option_bool(OPT_NO_POLL))
++ poll_resolv(1, 1, now);
++ }
+ #else
+ /* Check for changes to resolv files once per second max. */
+ /* Don't go silent for long periods if the clock goes backwards. */
+@@ -1385,6 +1394,9 @@ void clear_cache_and_reload(time_t now)
+ if (option_bool(OPT_ETHERS))
+ dhcp_read_ethers();
+ reread_dhcp();
++#ifdef HAVE_LINUX_NETWORK
++ set_dhcp_inotify();
++#endif
+ dhcp_update_configs(daemon->dhcp_conf);
+ lease_update_from_configs();
+ lease_update_file(now);
+diff --git a/src/dnsmasq.h b/src/dnsmasq.h
+index f8275e3ac479..d841fdc064ad 100644
+--- a/src/dnsmasq.h
++++ b/src/dnsmasq.h
+@@ -550,13 +550,17 @@ struct resolvc {
+ #endif
+ };
+
+-/* adn-hosts parms from command-line (also dhcp-hostsfile and dhcp-optsfile */
++/* adn-hosts parms from command-line (also dhcp-hostsfile and dhcp-optsfile and dhcp-hostsdir*/
+ #define AH_DIR 1
+ #define AH_INACTIVE 2
++#define AH_WD_DONE 4
+ struct hostsfile {
+ struct hostsfile *next;
+ int flags;
+ char *fname;
++#ifdef HAVE_LINUX_NETWORK
++ int wd; /* inotify watch descriptor */
++#endif
+ unsigned int index; /* matches to cache entries for logging */
+ };
+
+@@ -961,7 +965,7 @@ extern struct daemon {
+ int doing_ra, doing_dhcp6;
+ struct dhcp_netid_list *dhcp_ignore, *dhcp_ignore_names, *dhcp_gen_names;
+ struct dhcp_netid_list *force_broadcast, *bootp_dynamic;
+- struct hostsfile *dhcp_hosts_file, *dhcp_opts_file;
++ struct hostsfile *dhcp_hosts_file, *dhcp_opts_file, *inotify_hosts;
+ int dhcp_max, tftp_max;
+ int dhcp_server_port, dhcp_client_port;
+ int start_tftp_port, end_tftp_port;
+@@ -1197,7 +1201,7 @@ void reset_option_bool(unsigned int opt);
+ struct hostsfile *expand_filelist(struct hostsfile *list);
+ char *parse_server(char *arg, union mysockaddr *addr,
+ union mysockaddr *source_addr, char *interface, int *flags);
+-
++int option_read_hostsfile(char *file);
+ /* forward.c */
+ void reply_query(int fd, int family, time_t now);
+ void receive_query(struct listener *listen, time_t now);
+@@ -1486,5 +1490,8 @@ int detect_loop(char *query, int type);
+ /* inotify.c */
+ #ifdef HAVE_LINUX_NETWORK
+ void inotify_dnsmasq_init();
+-int inotify_check(void);
++int inotify_check(time_t now);
++# ifdef HAVE_DHCP
++void set_dhcp_inotify(void);
++# endif
+ #endif
+diff --git a/src/inotify.c b/src/inotify.c
+index 83730008c11b..52a30d7f44db 100644
+--- a/src/inotify.c
++++ b/src/inotify.c
+@@ -19,6 +19,11 @@
+
+ #include <sys/inotify.h>
+
++#ifdef HAVE_DHCP
++static void check_for_dhcp_inotify(struct inotify_event *in, time_t now);
++#endif
++
++
+ /* the strategy is to set a inotify on the directories containing
+ resolv files, for any files in the directory which are close-write
+ or moved into the directory.
+@@ -40,8 +45,6 @@ void inotify_dnsmasq_init()
+ struct resolvc *res;
+
+ inotify_buffer = safe_malloc(INOTIFY_SZ);
+-
+-
+ daemon->inotifyfd = inotify_init1(IN_NONBLOCK | IN_CLOEXEC);
+
+ if (daemon->inotifyfd == -1)
+@@ -66,6 +69,7 @@ void inotify_dnsmasq_init()
+ {
+ *d = 0; /* make path just directory */
+ res->wd = inotify_add_watch(daemon->inotifyfd, path, IN_CLOSE_WRITE | IN_MOVED_TO);
++
+ res->file = d+1; /* pointer to filename */
+ *d = '/';
+
+@@ -78,7 +82,7 @@ void inotify_dnsmasq_init()
+ }
+ }
+
+-int inotify_check(void)
++int inotify_check(time_t now)
+ {
+ int hit = 0;
+
+@@ -101,13 +105,116 @@ int inotify_check(void)
+ for (res = daemon->resolv_files; res; res = res->next)
+ if (res->wd == in->wd && in->len != 0 && strcmp(res->file, in->name) == 0)
+ hit = 1;
++
++#ifdef HAVE_DHCP
++ if (daemon->dhcp || daemon->doing_dhcp6)
++ check_for_dhcp_inotify(in, now);
++#endif
+ }
+ }
+-
+ return hit;
+ }
+
+-#endif
++#ifdef HAVE_DHCP
++/* initialisation for dhcp-hostdir. Set inotify watch for each directory, and read pre-existing files */
++void set_dhcp_inotify(void)
++{
++ struct hostsfile *ah;
+
+-
++ for (ah = daemon->inotify_hosts; ah; ah = ah->next)
++ {
++ DIR *dir_stream = NULL;
++ struct dirent *ent;
++ struct stat buf;
++
++ if (stat(ah->fname, &buf) == -1 || !(S_ISDIR(buf.st_mode)))
++ {
++ my_syslog(LOG_ERR, _("bad directory in dhcp-hostsdir %s"), ah->fname);
++ continue;
++ }
++
++ if (!(ah->flags & AH_WD_DONE))
++ {
++ ah->wd = inotify_add_watch(daemon->inotifyfd, ah->fname, IN_CLOSE_WRITE | IN_MOVED_TO);
++ ah->flags |= AH_WD_DONE;
++ }
++ /* Read contents of dir _after_ calling add_watch, in the ho[e of avoiding
++ a race which misses files being added as we start */
++ if (ah->wd == -1 || !(dir_stream = opendir(ah->fname)))
++ {
++ my_syslog(LOG_ERR, _("failed to create inotify for %s"), ah->fname);
++ continue;
++ }
++
++ while ((ent = readdir(dir_stream)))
++ {
++ size_t lendir = strlen(ah->fname);
++ size_t lenfile = strlen(ent->d_name);
++ char *path;
++
++ /* ignore emacs backups and dotfiles */
++ if (lenfile == 0 ||
++ ent->d_name[lenfile - 1] == '~' ||
++ (ent->d_name[0] == '#' && ent->d_name[lenfile - 1] == '#') ||
++ ent->d_name[0] == '.')
++ continue;
++
++ if ((path = whine_malloc(lendir + lenfile + 2)))
++ {
++ strcpy(path, ah->fname);
++ strcat(path, "/");
++ strcat(path, ent->d_name);
++
++ /* ignore non-regular files */
++ if (stat(path, &buf) != -1 && S_ISREG(buf.st_mode))
++ option_read_hostsfile(path);
++
++ free(path);
++ }
++ }
++ }
++}
++
++static void check_for_dhcp_inotify(struct inotify_event *in, time_t now)
++{
++ struct hostsfile *ah;
++
++ /* ignore emacs backups and dotfiles */
++ if (in->len == 0 ||
++ in->name[in->len - 1] == '~' ||
++ (in->name[0] == '#' && in->name[in->len - 1] == '#') ||
++ in->name[0] == '.')
++ return;
++
++ for (ah = daemon->inotify_hosts; ah; ah = ah->next)
++ if (ah->wd == in->wd)
++ {
++ size_t lendir = strlen(ah->fname);
++ char *path;
++
++ if ((path = whine_malloc(lendir + in->len + 2)))
++ {
++ strcpy(path, ah->fname);
++ strcat(path, "/");
++ strcat(path, in->name);
++
++ if (option_read_hostsfile(path))
++ {
++ /* Propogate the consequences of loading a new dhcp-host */
++ dhcp_update_configs(daemon->dhcp_conf);
++ lease_update_from_configs();
++ lease_update_file(now);
++ lease_update_dns(1);
++ }
++
++ free(path);
++ }
++
++ return;
++ }
++}
++
++#endif /* DHCP */
++
++#endif /* LINUX_NETWORK */
+
+diff --git a/src/option.c b/src/option.c
+index 8b994098cc9f..22e11c37d374 100644
+--- a/src/option.c
++++ b/src/option.c
+@@ -149,7 +149,7 @@ struct myoption {
+ #define LOPT_LOOP_DETECT 337
+ #define LOPT_IGNORE_ADDR 338
+ #define LOPT_MINCTTL 339
+-
++#define LOPT_DHCP_INOTIFY 340
+
+ #ifdef HAVE_GETOPT_LONG
+ static const struct option opts[] =
+@@ -248,6 +248,7 @@ static const struct myoption opts[] =
+ { "interface-name", 1, 0, LOPT_INTNAME },
+ { "dhcp-hostsfile", 1, 0, LOPT_DHCP_HOST },
+ { "dhcp-optsfile", 1, 0, LOPT_DHCP_OPTS },
++ { "dhcp-hostsdir", 1, 0, LOPT_DHCP_INOTIFY },
+ { "dhcp-no-override", 0, 0, LOPT_OVERRIDE },
+ { "tftp-port-range", 1, 0, LOPT_TFTPPORTS },
+ { "stop-dns-rebind", 0, 0, LOPT_REBIND },
+@@ -336,6 +337,7 @@ static struct {
+ { 'G', ARG_DUP, "<hostspec>", gettext_noop("Set address or hostname for a specified machine."), NULL },
+ { LOPT_DHCP_HOST, ARG_DUP, "<path>", gettext_noop("Read DHCP host specs from file."), NULL },
+ { LOPT_DHCP_OPTS, ARG_DUP, "<path>", gettext_noop("Read DHCP option specs from file."), NULL },
++ { LOPT_DHCP_INOTIFY, ARG_DUP, "<path>", gettext_noop("Read DHCP host specs from a directory."), NULL },
+ { LOPT_TAG_IF, ARG_DUP, "tag-expression", gettext_noop("Evaluate conditional tag expression."), NULL },
+ { 'h', OPT_NO_HOSTS, NULL, gettext_noop("Do NOT load %s file."), HOSTSFILE },
+ { 'H', ARG_DUP, "<path>", gettext_noop("Specify a hosts file to be read in addition to %s."), HOSTSFILE },
+@@ -1710,8 +1712,9 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
+ break;
+ #endif /* HAVE_DHCP */
+
+- case LOPT_DHCP_HOST: /* --dhcp-hostfile */
++ case LOPT_DHCP_HOST: /* --dhcp-hostsfile */
+ case LOPT_DHCP_OPTS: /* --dhcp-optsfile */
++ case LOPT_DHCP_INOTIFY: /* dhcp-hostsdir */
+ case 'H': /* --addn-hosts */
+ {
+ struct hostsfile *new = opt_malloc(sizeof(struct hostsfile));
+@@ -1734,6 +1737,12 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
+ new->next = daemon->dhcp_opts_file;
+ daemon->dhcp_opts_file = new;
+ }
++ else if (option == LOPT_DHCP_INOTIFY)
++ {
++ new->next = daemon->inotify_hosts;
++ daemon->inotify_hosts = new;
++ }
++
+ break;
+ }
+
+@@ -4042,6 +4051,13 @@ static void read_file(char *file, FILE *f, int hard_opt)
+ fclose(f);
+ }
+
++#ifdef HAVE_DHCP
++int option_read_hostsfile(char *file)
++{
++ return one_file(file, LOPT_BANK);
++}
++#endif
++
+ static int one_file(char *file, int hard_opt)
+ {
+ FILE *f;
+@@ -4139,7 +4155,7 @@ struct hostsfile *expand_filelist(struct hostsfile *list)
+
+ /* don't read this as a file */
+ ah->flags |= AH_INACTIVE;
+-
++
+ if (!(dir_stream = opendir(ah->fname)))
+ my_syslog(LOG_ERR, _("cannot access directory %s: %s"),
+ ah->fname, strerror(errno));
+--
+2.1.0
+
--- /dev/null
+From fbf01f7046e75f9aa73fd4aab2a94e43386d9052 Mon Sep 17 00:00:00 2001
+From: Conrad Kostecki <ck@conrad-kostecki.de>
+Date: Tue, 20 Jan 2015 21:07:56 +0000
+Subject: [PATCH 35/98] Update German translation.
+
+---
+ po/de.po | 101 +++++++++++++++++++++++++++++----------------------------------
+ 1 file changed, 47 insertions(+), 54 deletions(-)
+
+diff --git a/po/de.po b/po/de.po
+index e2317376d8a9..4c93c5b28ef2 100644
+--- a/po/de.po
++++ b/po/de.po
+@@ -9,10 +9,10 @@
+ # Simon Kelley <simon@thekelleys.org.uk>, 2005.
+ msgid ""
+ msgstr ""
+-"Project-Id-Version: dnsmasq 2.70\n"
++"Project-Id-Version: dnsmasq 2.73\n"
+ "Report-Msgid-Bugs-To: \n"
+ "POT-Creation-Date: 2009-06-18 12:24+0100\n"
+-"PO-Revision-Date: 2014-05-01 22:51+0100\n"
++"PO-Revision-Date: 2015-01-19 15:43+0100\n"
+ "Last-Translator: Conrad Kostecki <ck@conrad-kostecki.de>\n"
+ "Language-Team: German <de@li.org>\n"
+ "Language: de\n"
+@@ -20,12 +20,12 @@ msgstr ""
+ "Content-Type: text/plain; charset=UTF-8\n"
+ "Content-Transfer-Encoding: 8bit\n"
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
+-"X-Generator: Poedit 1.6.5\n"
++"X-Generator: Poedit 1.7.3\n"
+ "X-Poedit-SourceCharset: UTF-8\n"
+
+ #: cache.c:505
+ msgid "Internal error in cache."
+-msgstr ""
++msgstr "Interner Fehler im Cache."
+
+ #: cache.c:908
+ #, c-format
+@@ -126,7 +126,7 @@ msgstr "Lokale abzuhörende Adresse(n) angeben."
+
+ #: option.c:319
+ msgid "Return ipaddr for all hosts in specified domains."
+-msgstr "IP-Adresse für alle Hosts in angebenen Domänen festlegen."
++msgstr "IP-Adresse für alle Hosts in angegebenen Domänen festlegen."
+
+ # FIXME: the English test is not to the point. Just use a shortened description
+ # from the manpage instead. -- MA
+@@ -310,18 +310,16 @@ msgid "Specify path to resolv.conf (defaults to %s)."
+ msgstr "Pfad zu resolv.conf festlegen (%s voreingestellt)."
+
+ #: option.c:362
+-#, fuzzy
+ msgid "Specify path to file with server= options"
+-msgstr "Dateipfad für Prozesskennung (PID) festlegen (Voreinstellung: %s)."
++msgstr " Dateipfad mit der Option server= angeben"
+
+ #: option.c:363
+ msgid "Specify address(es) of upstream servers with optional domains."
+ msgstr "Adresse(n) vorgelagerter Server festlegen, optional mit Domänen."
+
+ #: option.c:364
+-#, fuzzy
+ msgid "Specify address of upstream servers for reverse address queries"
+-msgstr "Adresse(n) vorgelagerter Server festlegen, optional mit Domänen."
++msgstr "Adresse(n) vorgelagerter Server festlegen, für reverse Adressanfragen"
+
+ #: option.c:365
+ msgid "Never forward queries to specified domains."
+@@ -657,23 +655,23 @@ msgstr "Spezifiziere eine Domain und Adressbereich für synthetisierte Namen"
+
+ #: option.c:446
+ msgid "Activate DNSSEC validation"
+-msgstr ""
++msgstr "Aktiviere DNSSEC-Validierung"
+
+ #: option.c:447
+ msgid "Specify trust anchor key digest."
+-msgstr ""
++msgstr "Spezifiziere Vertrauensursprung (Trust Anchor) der Schlüssel-Prüfdaten (Key Digest)."
+
+ #: option.c:448
+ msgid "Disable upstream checking for DNSSEC debugging."
+-msgstr ""
++msgstr "Deaktiviere die Überprüfung vorgelagerter Server für DNSSEC-Debugging"
+
+ #: option.c:449
+ msgid "Ensure answers without DNSSEC are in unsigned zones."
+-msgstr ""
++msgstr "Stellt sicher, dass Antworten ohne DNSSEC sich in einer unsignierten Zone befinden."
+
+ #: option.c:450
+ msgid "Don't check DNSSEC signature timestamps until first cache-reload"
+-msgstr ""
++msgstr "DNSSEC Signatur-Zeitstempel nicht prüfen, bis erstmalig der Cache neugeladen wird"
+
+ #: option.c:452
+ msgid "Specify DHCPv6 prefix class"
+@@ -697,11 +695,11 @@ msgstr "RA nicht protokollieren."
+
+ #: option.c:458
+ msgid "Accept queries only from directly-connected networks"
+-msgstr ""
++msgstr "Akzeptiere nur Anfragen von direkt verbundenen Netzwerken"
+
+ #: option.c:459
+ msgid "Detect and remove DNS forwarding loops"
+-msgstr ""
++msgstr "Erkennen und Entfernen von DNS-Weiterleitungsschleifen"
+
+ #: option.c:661
+ #, c-format
+@@ -958,18 +956,16 @@ msgid "Bad name in host-record"
+ msgstr "Unzulässiger Name in host-record"
+
+ #: option.c:3826
+-#, fuzzy
+ msgid "bad trust anchor"
+-msgstr "unzulässiger Portbereich"
++msgstr "unzulässiger Vertrauensursprung (Trust Anchor)"
+
+ #: option.c:3840
+ msgid "bad HEX in trust anchor"
+-msgstr ""
++msgstr "unzulässiger Hexwert in Vertrauensursprung (Trust Anchor)"
+
+ #: option.c:3850
+-#, fuzzy
+ msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DNSSEC/DBus support)"
+-msgstr "unzulässige Option (prüfen Sie, ob dnsmasq mit DHCP/TFTP/DBus-Unterstützt übersetzt wurde)"
++msgstr "Nicht unterstützte Option (prüfen Sie, ob DNSMasq mit DHCP/TFTP/DNSSEC/DBus-Unterstützung übersetzt wurde)"
+
+ #: option.c:3909
+ msgid "missing \""
+@@ -988,7 +984,6 @@ msgid "missing parameter"
+ msgstr "fehler Parameter"
+
+ #: option.c:3972
+-#, fuzzy
+ msgid "illegal option"
+ msgstr "unzulässige Option"
+
+@@ -1110,7 +1105,7 @@ msgstr "möglichen DNS-Rebind-Angriff entdeckt: %s"
+
+ #: forward.c:1132 forward.c:1663
+ msgid "Ignoring query from non-local network"
+-msgstr ""
++msgstr "Ignoriere Anfragen vom nicht lokalen Netzwerk"
+
+ #: forward.c:2101
+ #, c-format
+@@ -1189,9 +1184,9 @@ msgid "using nameserver %s#%d for %s %s"
+ msgstr "Benutze Namensserver %s#%d für %s %s"
+
+ #: network.c:1483
+-#, fuzzy, c-format
++#, c-format
+ msgid "NOT using nameserver %s#%d - query loop detected"
+-msgstr "Benutze Namensserver %s#%d für %s %s"
++msgstr "Benutze Namensserver %s#%d NICHT - Anfragenschleife festgetellt"
+
+ #: network.c:1486
+ #, c-format
+@@ -1205,16 +1200,15 @@ msgstr "Benutze Namensserver %s#%d"
+
+ #: dnsmasq.c:154
+ msgid "No trust anchors provided for DNSSEC"
+-msgstr ""
++msgstr "Keine Vertrauensursprünge (Trust Anchor) für DNSSEC verfügbar"
+
+ #: dnsmasq.c:157
+ msgid "Cannot reduce cache size from default when DNSSEC enabled"
+-msgstr ""
++msgstr "Kann die Standard Cachegröße nicht verkleinern, wenn DNSSEC aktiviert ist"
+
+ #: dnsmasq.c:159
+-#, fuzzy
+ msgid "DNSSEC not available: set HAVE_DNSSEC in src/config.h"
+-msgstr "DBus nicht verfügbar: setzen Sie HAVE_DBUS in src/config.h"
++msgstr "DNSSEC nicht verfügbar: setzen Sie HAVE_DNSSEC in src/config.h"
+
+ #: dnsmasq.c:165
+ msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
+@@ -1241,9 +1235,8 @@ msgid "authoritative DNS not available: set HAVE_AUTH in src/config.h"
+ msgstr "Authoritatives DNS nicht verfügbar: Es muss HAVE_AUTH in src/config.h gesetzt sein"
+
+ #: dnsmasq.c:193
+-#, fuzzy
+ msgid "Loop detection not available: set HAVE_LOOP in src/config.h"
+-msgstr "TFTP-Server nicht verfügbar, setzen Sie HAVE_TFTP in src/config.h"
++msgstr "Loop-Erkennung nicht verfügbar, setzen Sie HAVE_LOOP in src/config.h"
+
+ #: dnsmasq.c:201
+ msgid "zone serial must be configured in --auth-soa"
+@@ -1317,15 +1310,15 @@ msgstr "DBus-Unterstützung eingeschaltet: warte auf Systembus-Verbindung"
+
+ #: dnsmasq.c:672
+ msgid "DNS service limited to local subnets"
+-msgstr ""
++msgstr "DNS-Dienst auf lokale Subnetze eingeschränkt"
+
+ #: dnsmasq.c:677
+ msgid "DNSSEC validation enabled"
+-msgstr ""
++msgstr "DNSSEC-Validierung aktiviert"
+
+ #: dnsmasq.c:679
+ msgid "DNSSEC signature timestamps not checked until first cache reload"
+-msgstr ""
++msgstr "DNSSEC Signatur-Zeitstempel werden erst ab dem ersten Neuladen des Caches überprüft"
+
+ #: dnsmasq.c:684
+ #, c-format
+@@ -1366,7 +1359,7 @@ msgstr "DHCP, Sockets exklusiv an das Interface %s gebunden"
+ # FIXME: this and the next few must be full strings to be translatable - do not assemble in code"
+ #: dnsmasq.c:753
+ msgid "root is "
+-msgstr "Wurzel ist"
++msgstr "Wurzel ist "
+
+ #: dnsmasq.c:753
+ msgid "enabled"
+@@ -1432,7 +1425,7 @@ msgstr "Das TFTP-Verzeichnis %s ist nicht zugreifbar: %s"
+
+ #: dnsmasq.c:1151
+ msgid "now checking DNSSEC signature timestamps"
+-msgstr ""
++msgstr "Prüfe jetzt DNSSEC Signatur-Zeitstempel"
+
+ #: dnsmasq.c:1218
+ #, c-format
+@@ -1506,7 +1499,7 @@ msgstr "DHCP-Paket ohne Adresse an Schnittstelle %s empfangen"
+ #: dhcp.c:408
+ #, c-format
+ msgid "ARP-cache injection failed: %s"
+-msgstr ""
++msgstr "APR-Cache Injektion fehlgeschlagen: %s"
+
+ #: dhcp.c:506
+ #, c-format
+@@ -1763,13 +1756,13 @@ msgid "DHCP request for unsupported hardware type (%d) received on %s"
+ msgstr "DHCP-Anfrage für nicht unterstützen Hardwaretyp (%d) auf %s empfangen"
+
+ #: bpf.c:376
+-#, fuzzy, c-format
++#, c-format
+ msgid "cannot create PF_ROUTE socket: %s"
+-msgstr "kann DHCP-Socket nicht erzeugen: %s"
++msgstr "Kann PF_ROUTE socket nicht erzeugen: %s"
+
+ #: bpf.c:397
+ msgid "Unknown protocol version from route socket"
+-msgstr ""
++msgstr "Unbekannte Protokollversion vom Route Socket"
+
+ #: helper.c:153
+ msgid "lease() function missing in Lua script"
+@@ -2020,50 +2013,50 @@ msgstr "konnte IPset-Kontroll-Socket nicht erzeugen: %s"
+ #: blockdata.c:58
+ #, c-format
+ msgid "DNSSEC memory in use %u, max %u, allocated %u"
+-msgstr ""
++msgstr "DNSSEC Speicher in Benutzung %u, Max %u, zugewiesen %u"
+
+ #: tables.c:76
+ msgid "error: fill_addr missused"
+-msgstr ""
++msgstr "Fehler: fill_addr falsch verwendet"
+
+ #: tables.c:105
+-#, fuzzy, c-format
++#, c-format
+ msgid "failed to access pf devices: %s"
+-msgstr "konnte auf %s nicht zugreifen: %s"
++msgstr "konnte auf pf Geräte nicht zugreifen: %s"
+
+ #: tables.c:119
+-#, fuzzy, c-format
++#, c-format
+ msgid "warning: no opened pf devices %s"
+-msgstr "Warnung: Keine Adresse für die Schnittstelle %s gefunden"
++msgstr "Warnung: Keine geöffneten pf Geräte %s"
+
+ #: tables.c:127
+-#, fuzzy, c-format
++#, c-format
+ msgid "error: cannot use table name %s"
+-msgstr "kann Hostnamen nicht ermitteln: %s"
++msgstr "Fehler: Kann Tabellenname %s nicht benutzen"
+
+ #: tables.c:135
+ #, c-format
+ msgid "error: cannot strlcpy table name %s"
+-msgstr ""
++msgstr "Fehler: Kann den Tabellennamen %s nicht strlcpy"
+
+ #: tables.c:141
+ #, c-format
+ msgid "warning: pfr_add_tables: %s(%d)"
+-msgstr ""
++msgstr "Warnung: pfr_add_tables: %s(%d)"
+
+ #: tables.c:147
+ msgid "info: table created"
+-msgstr ""
++msgstr "Info: Tabelle erstellt"
+
+ #: tables.c:158
+ #, c-format
+ msgid "warning: DIOCR%sADDRS: %s"
+-msgstr ""
++msgstr "Warnung: DIOCR%sADDRS: %s"
+
+ #: tables.c:162
+-#, fuzzy, c-format
++#, c-format
+ msgid "%d addresses %s"
+-msgstr "Fehlerhafte Adresse"
++msgstr "%d Adressen %s"
+
+ #~ msgid "no interface with address %s"
+ #~ msgstr "keine Schnittstelle mit Adresse %s"
+--
+2.1.0
+
--- /dev/null
+From 61b838dd574c51d96fef100285a0d225824534f9 Mon Sep 17 00:00:00 2001
+From: Win King Wan <pinwing+dnsmasq@gmail.com>
+Date: Wed, 21 Jan 2015 20:41:48 +0000
+Subject: [PATCH 36/98] Don't reply to DHCPv6 SOLICIT messages when not
+ configured for statefull DHCPv6.
+
+---
+ CHANGELOG | 4 ++++
+ src/rfc3315.c | 13 +++++++++++++
+ 2 files changed, 17 insertions(+)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 0076b557e95e..a4cb901e83ae 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -59,6 +59,10 @@ version 2.73
+ cheaply than having dnsmasq re-read all its existing
+ configuration each time.
+
++ Don't reply to DHCPv6 SOLICIT messages if we're not
++ configured to do stateful DHCPv6. Thanks to Win King Wan
++ for the patch.
++
+
+ version 2.72
+ Add ra-advrouter mode, for RFC-3775 mobile IPv6 support.
+diff --git a/src/rfc3315.c b/src/rfc3315.c
+index ddb390bf1136..e593ec9c362c 100644
+--- a/src/rfc3315.c
++++ b/src/rfc3315.c
+@@ -824,6 +824,19 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
+ }
+ else
+ {
++ /* Windows 8 always requests an address even if the Managed bit
++ in RA is 0 and it keeps retrying if it receives a reply
++ stating that no addresses are available. We solve this
++ by not replying at all if we're not configured to give any
++ addresses by DHCPv6. RFC 3315 17.2.1. appears to allow this. */
++
++ for (c = state->context; c; c = c->current)
++ if (!(c->flags & CONTEXT_RA_STATELESS))
++ break;
++
++ if (!c)
++ return 0;
++
+ /* no address, return error */
+ o1 = new_opt6(OPTION6_STATUS_CODE);
+ put_opt6_short(DHCP6NOADDRS);
+--
+2.1.0
+
--- /dev/null
+From 0491805d2ff6e7727f0272c94fd97d9897d1e22c Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Mon, 26 Jan 2015 11:23:43 +0000
+Subject: [PATCH 37/98] Allow inotify to be disabled at compile time on Linux.
+
+---
+ CHANGELOG | 4 +++-
+ src/config.h | 13 ++++++++++++-
+ src/dnsmasq.c | 21 +++++++++++++--------
+ src/dnsmasq.h | 11 +++++++----
+ src/inotify.c | 4 ++--
+ 5 files changed, 37 insertions(+), 16 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index a4cb901e83ae..c05dec63c587 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -9,7 +9,9 @@ version 2.73
+
+ Use inotify for checking on updates to /etc/resolv.conf and
+ friends under Linux. This fixes race conditions when the files are
+- updated rapidly and saves CPU by noy polling.
++ updated rapidly and saves CPU by noy polling. To build
++ a binary that runs on old Linux kernels without inotify,
++ use make COPTS=-DNO_INOTIFY
+
+ Fix breakage of --domain=<domain>,<subnet>,local - only reverse
+ queries were intercepted. THis appears to have been broken
+diff --git a/src/config.h b/src/config.h
+index cdca231b4079..5e5009271eba 100644
+--- a/src/config.h
++++ b/src/config.h
+@@ -115,6 +115,8 @@ HAVE_DNSSEC
+ HAVE_LOOP
+ include functionality to probe for and remove DNS forwarding loops.
+
++HAVE_INOTIFY
++ use the Linux inotify facility to efficiently re-read configuration files.
+
+ NO_IPV6
+ NO_TFTP
+@@ -123,6 +125,7 @@ NO_DHCP6
+ NO_SCRIPT
+ NO_LARGEFILE
+ NO_AUTH
++NO_INOTIFY
+ these are avilable to explictly disable compile time options which would
+ otherwise be enabled automatically (HAVE_IPV6, >2Gb file sizes) or
+ which are enabled by default in the distributed source tree. Building dnsmasq
+@@ -355,6 +358,10 @@ HAVE_SOCKADDR_SA_LEN
+ #undef HAVE_LOOP
+ #endif
+
++#if defined (HAVE_LINUX_NETWORK) && !defined(NO_INOTIFY)
++#define HAVE_INOTIFY
++#endif
++
+ /* Define a string indicating which options are in use.
+ DNSMASQP_COMPILE_OPTS is only defined in dnsmasq.c */
+
+@@ -428,7 +435,11 @@ static char *compile_opts =
+ #ifndef HAVE_LOOP
+ "no-"
+ #endif
+-"loop-detect";
++"loop-detect "
++#ifndef HAVE_INOTIFY
++"no-"
++#endif
++"inotify";
+
+
+ #endif
+diff --git a/src/dnsmasq.c b/src/dnsmasq.c
+index 04cc98278f62..bc4f47170705 100644
+--- a/src/dnsmasq.c
++++ b/src/dnsmasq.c
+@@ -142,7 +142,9 @@ int main (int argc, char **argv)
+ set_option_bool(OPT_NOWILD);
+ reset_option_bool(OPT_CLEVERBIND);
+ }
++#endif
+
++#ifndef HAVE_INOTIFY
+ if (daemon->inotify_hosts)
+ die(_("dhcp-hostsdir not supported on this platform"), NULL, EC_BADCONF);
+ #endif
+@@ -321,7 +323,7 @@ int main (int argc, char **argv)
+ #endif
+ }
+
+-#ifdef HAVE_LINUX_NETWORK
++#ifdef HAVE_INOTIFY
+ if ((!option_bool(OPT_NO_POLL) && daemon->port != 0) ||
+ daemon->dhcp || daemon->doing_dhcp6)
+ inotify_dnsmasq_init();
+@@ -802,7 +804,7 @@ int main (int argc, char **argv)
+
+ pid = getpid();
+
+-#ifdef HAVE_LINUX_NETWORK
++#ifdef HAVE_INOTIFY
+ /* Using inotify, have to select a resolv file at startup */
+ poll_resolv(1, 0, now);
+ #endif
+@@ -872,15 +874,18 @@ int main (int argc, char **argv)
+ bump_maxfd(daemon->icmp6fd, &maxfd);
+ }
+ #endif
+-
+-#if defined(HAVE_LINUX_NETWORK)
+- FD_SET(daemon->netlinkfd, &rset);
+- bump_maxfd(daemon->netlinkfd, &maxfd);
++
++#ifdef HAVE_INOTIFY
+ if (daemon->inotifyfd != -1)
+ {
+ FD_SET(daemon->inotifyfd, &rset);
+ bump_maxfd(daemon->inotifyfd, &maxfd);
+ }
++#endif
++
++#if defined(HAVE_LINUX_NETWORK)
++ FD_SET(daemon->netlinkfd, &rset);
++ bump_maxfd(daemon->netlinkfd, &maxfd);
+ #elif defined(HAVE_BSD_NETWORK)
+ FD_SET(daemon->routefd, &rset);
+ bump_maxfd(daemon->routefd, &maxfd);
+@@ -948,7 +953,7 @@ int main (int argc, char **argv)
+ route_sock();
+ #endif
+
+-#ifdef HAVE_LINUX_NETWORK
++#ifdef HAVE_INOTIFY
+ if (daemon->inotifyfd != -1 && FD_ISSET(daemon->inotifyfd, &rset) && inotify_check(now))
+ {
+ if (daemon->port != 0 && !option_bool(OPT_NO_POLL))
+@@ -1394,7 +1399,7 @@ void clear_cache_and_reload(time_t now)
+ if (option_bool(OPT_ETHERS))
+ dhcp_read_ethers();
+ reread_dhcp();
+-#ifdef HAVE_LINUX_NETWORK
++#ifdef HAVE_INOTIFY
+ set_dhcp_inotify();
+ #endif
+ dhcp_update_configs(daemon->dhcp_conf);
+diff --git a/src/dnsmasq.h b/src/dnsmasq.h
+index d841fdc064ad..8091634f69db 100644
+--- a/src/dnsmasq.h
++++ b/src/dnsmasq.h
+@@ -544,7 +544,7 @@ struct resolvc {
+ int is_default, logged;
+ time_t mtime;
+ char *name;
+-#ifdef HAVE_LINUX_NETWORK
++#ifdef HAVE_INOTIFY
+ int wd; /* inotify watch descriptor */
+ char *file; /* pointer to file part if path */
+ #endif
+@@ -558,7 +558,7 @@ struct hostsfile {
+ struct hostsfile *next;
+ int flags;
+ char *fname;
+-#ifdef HAVE_LINUX_NETWORK
++#ifdef HAVE_INOTIFY
+ int wd; /* inotify watch descriptor */
+ #endif
+ unsigned int index; /* matches to cache entries for logging */
+@@ -1013,8 +1013,11 @@ extern struct daemon {
+
+ /* DHCP state */
+ int dhcpfd, helperfd, pxefd;
++#ifdef HAVE_INOTIFY
++ int inotifyfd;
++#endif
+ #if defined(HAVE_LINUX_NETWORK)
+- int netlinkfd, inotifyfd;
++ int netlinkfd;
+ #elif defined(HAVE_BSD_NETWORK)
+ int dhcp_raw_fd, dhcp_icmp_fd, routefd;
+ #endif
+@@ -1488,7 +1491,7 @@ int detect_loop(char *query, int type);
+ #endif
+
+ /* inotify.c */
+-#ifdef HAVE_LINUX_NETWORK
++#ifdef HAVE_INOTIFY
+ void inotify_dnsmasq_init();
+ int inotify_check(time_t now);
+ # ifdef HAVE_DHCP
+diff --git a/src/inotify.c b/src/inotify.c
+index 52a30d7f44db..818fe8eddda4 100644
+--- a/src/inotify.c
++++ b/src/inotify.c
+@@ -15,7 +15,7 @@
+ */
+
+ #include "dnsmasq.h"
+-#ifdef HAVE_LINUX_NETWORK
++#ifdef HAVE_INOTIFY
+
+ #include <sys/inotify.h>
+
+@@ -216,5 +216,5 @@ static void check_for_dhcp_inotify(struct inotify_event *in, time_t now)
+
+ #endif /* DHCP */
+
+-#endif /* LINUX_NETWORK */
++#endif /* INOTIFY */
+
+--
+2.1.0
+
--- /dev/null
+From 70d1873dd9e70041ed4bb88c69d5b886b7cc634c Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sat, 31 Jan 2015 19:59:29 +0000
+Subject: [PATCH 38/98] Expand inotify code to dhcp-hostsdir, dhcp-optsdir and
+ hostsdir.
+
+---
+ src/cache.c | 81 +++++++++++++++++---------
+ src/dnsmasq.c | 9 ++-
+ src/dnsmasq.h | 14 +++--
+ src/inotify.c | 179 +++++++++++++++++++++++++++++-----------------------------
+ src/option.c | 37 +++++++++---
+ 5 files changed, 187 insertions(+), 133 deletions(-)
+
+diff --git a/src/cache.c b/src/cache.c
+index 09b6dbf8087a..abaf25ec0f18 100644
+--- a/src/cache.c
++++ b/src/cache.c
+@@ -835,27 +835,42 @@ static void add_hosts_entry(struct crec *cache, struct all_addr *addr, int addrl
+ Only insert each unique address once into this hashing structure.
+
+ This complexity avoids O(n^2) divergent CPU use whilst reading
+- large (10000 entry) hosts files. */
+-
+- /* hash address */
+- for (j = 0, i = 0; i < addrlen; i++)
+- j = (j*2 +((unsigned char *)addr)[i]) % hashsz;
+-
+- for (lookup = rhash[j]; lookup; lookup = lookup->next)
+- if ((lookup->flags & cache->flags & (F_IPV4 | F_IPV6)) &&
+- memcmp(&lookup->addr.addr, addr, addrlen) == 0)
+- {
+- cache->flags &= ~F_REVERSE;
+- break;
+- }
++ large (10000 entry) hosts files.
++
++ Note that we only do this process when bulk-reading hosts files,
++ for incremental reads, rhash is NULL, and we use cache lookups
++ instead.
++ */
+
+- /* maintain address hash chain, insert new unique address */
+- if (!lookup)
++ if (rhash)
+ {
+- cache->next = rhash[j];
+- rhash[j] = cache;
++ /* hash address */
++ for (j = 0, i = 0; i < addrlen; i++)
++ j = (j*2 +((unsigned char *)addr)[i]) % hashsz;
++
++ for (lookup = rhash[j]; lookup; lookup = lookup->next)
++ if ((lookup->flags & cache->flags & (F_IPV4 | F_IPV6)) &&
++ memcmp(&lookup->addr.addr, addr, addrlen) == 0)
++ {
++ cache->flags &= ~F_REVERSE;
++ break;
++ }
++
++ /* maintain address hash chain, insert new unique address */
++ if (!lookup)
++ {
++ cache->next = rhash[j];
++ rhash[j] = cache;
++ }
+ }
+-
++ else
++ {
++ /* incremental read, lookup in cache */
++ lookup = cache_find_by_addr(NULL, addr, 0, cache->flags & (F_IPV4 | F_IPV6));
++ if (lookup && lookup->flags & F_HOSTS)
++ cache->flags &= ~F_REVERSE;
++ }
++
+ cache->uid = index;
+ memcpy(&cache->addr.addr, addr, addrlen);
+ cache_hash(cache);
+@@ -912,7 +927,7 @@ static int gettok(FILE *f, char *token)
+ }
+ }
+
+-static int read_hostsfile(char *filename, unsigned int index, int cache_size, struct crec **rhash, int hashsz)
++int read_hostsfile(char *filename, unsigned int index, int cache_size, struct crec **rhash, int hashsz)
+ {
+ FILE *f = fopen(filename, "r");
+ char *token = daemon->namebuff, *domain_suffix = NULL;
+@@ -958,7 +973,7 @@ static int read_hostsfile(char *filename, unsigned int index, int cache_size, st
+ addr_count++;
+
+ /* rehash every 1000 names. */
+- if ((name_count - cache_size) > 1000)
++ if (rhash && ((name_count - cache_size) > 1000))
+ {
+ rehash(name_count);
+ cache_size = name_count;
+@@ -1005,10 +1020,13 @@ static int read_hostsfile(char *filename, unsigned int index, int cache_size, st
+ }
+
+ fclose(f);
+- rehash(name_count);
+-
+- my_syslog(LOG_INFO, _("read %s - %d addresses"), filename, addr_count);
+
++ if (rhash)
++ {
++ rehash(name_count);
++ my_syslog(LOG_INFO, _("read %s - %d addresses"), filename, addr_count);
++ }
++
+ return name_count;
+ }
+
+@@ -1118,14 +1136,19 @@ void cache_reload(void)
+ my_syslog(LOG_INFO, _("cleared cache"));
+ return;
+ }
+-
++
+ if (!option_bool(OPT_NO_HOSTS))
+ total_size = read_hostsfile(HOSTSFILE, SRC_HOSTS, total_size, (struct crec **)daemon->packet, revhashsz);
+-
++
+ daemon->addn_hosts = expand_filelist(daemon->addn_hosts);
+ for (ah = daemon->addn_hosts; ah; ah = ah->next)
+ if (!(ah->flags & AH_INACTIVE))
+ total_size = read_hostsfile(ah->fname, ah->index, total_size, (struct crec **)daemon->packet, revhashsz);
++
++#ifdef HAVE_INOTIFY
++ set_dynamic_inotify(AH_HOSTS, total_size, (struct crec **)daemon->packet, revhashsz);
++#endif
++
+ }
+
+ #ifdef HAVE_DHCP
+@@ -1505,7 +1528,13 @@ char *record_source(unsigned int index)
+ for (ah = daemon->addn_hosts; ah; ah = ah->next)
+ if (ah->index == index)
+ return ah->fname;
+-
++
++#ifdef HAVE_INOTIFY
++ for (ah = daemon->dynamic_dirs; ah; ah = ah->next)
++ if (ah->index == index)
++ return ah->fname;
++#endif
++
+ return "<unknown>";
+ }
+
+diff --git a/src/dnsmasq.c b/src/dnsmasq.c
+index bc4f47170705..2c629fe422aa 100644
+--- a/src/dnsmasq.c
++++ b/src/dnsmasq.c
+@@ -145,8 +145,8 @@ int main (int argc, char **argv)
+ #endif
+
+ #ifndef HAVE_INOTIFY
+- if (daemon->inotify_hosts)
+- die(_("dhcp-hostsdir not supported on this platform"), NULL, EC_BADCONF);
++ if (daemon->dynamic_dirs)
++ die(_("dhcp-hostsdir, dhcp-optsdir and hostsdir are not supported on this platform"), NULL, EC_BADCONF);
+ #endif
+
+ if (option_bool(OPT_DNSSEC_VALID))
+@@ -324,8 +324,7 @@ int main (int argc, char **argv)
+ }
+
+ #ifdef HAVE_INOTIFY
+- if ((!option_bool(OPT_NO_POLL) && daemon->port != 0) ||
+- daemon->dhcp || daemon->doing_dhcp6)
++ if (daemon->port != 0 || daemon->dhcp || daemon->doing_dhcp6)
+ inotify_dnsmasq_init();
+ else
+ daemon->inotifyfd = -1;
+@@ -1400,7 +1399,7 @@ void clear_cache_and_reload(time_t now)
+ dhcp_read_ethers();
+ reread_dhcp();
+ #ifdef HAVE_INOTIFY
+- set_dhcp_inotify();
++ set_dynamic_inotify(AH_DHCP_HST | AH_DHCP_OPT, 0, NULL, 0);
+ #endif
+ dhcp_update_configs(daemon->dhcp_conf);
+ lease_update_from_configs();
+diff --git a/src/dnsmasq.h b/src/dnsmasq.h
+index 8091634f69db..0c322a93993e 100644
+--- a/src/dnsmasq.h
++++ b/src/dnsmasq.h
+@@ -554,6 +554,9 @@ struct resolvc {
+ #define AH_DIR 1
+ #define AH_INACTIVE 2
+ #define AH_WD_DONE 4
++#define AH_HOSTS 8
++#define AH_DHCP_HST 16
++#define AH_DHCP_OPT 32
+ struct hostsfile {
+ struct hostsfile *next;
+ int flags;
+@@ -965,7 +968,7 @@ extern struct daemon {
+ int doing_ra, doing_dhcp6;
+ struct dhcp_netid_list *dhcp_ignore, *dhcp_ignore_names, *dhcp_gen_names;
+ struct dhcp_netid_list *force_broadcast, *bootp_dynamic;
+- struct hostsfile *dhcp_hosts_file, *dhcp_opts_file, *inotify_hosts;
++ struct hostsfile *dhcp_hosts_file, *dhcp_opts_file, *dynamic_dirs;
+ int dhcp_max, tftp_max;
+ int dhcp_server_port, dhcp_client_port;
+ int start_tftp_port, end_tftp_port;
+@@ -1071,6 +1074,8 @@ int cache_make_stat(struct txt_record *t);
+ char *cache_get_name(struct crec *crecp);
+ char *cache_get_cname_target(struct crec *crecp);
+ struct crec *cache_enumerate(int init);
++int read_hostsfile(char *filename, unsigned int index, int cache_size,
++ struct crec **rhash, int hashsz);
+
+ /* blockdata.c */
+ #ifdef HAVE_DNSSEC
+@@ -1204,7 +1209,8 @@ void reset_option_bool(unsigned int opt);
+ struct hostsfile *expand_filelist(struct hostsfile *list);
+ char *parse_server(char *arg, union mysockaddr *addr,
+ union mysockaddr *source_addr, char *interface, int *flags);
+-int option_read_hostsfile(char *file);
++int option_read_dynfile(char *file, int flags);
++
+ /* forward.c */
+ void reply_query(int fd, int family, time_t now);
+ void receive_query(struct listener *listen, time_t now);
+@@ -1494,7 +1500,5 @@ int detect_loop(char *query, int type);
+ #ifdef HAVE_INOTIFY
+ void inotify_dnsmasq_init();
+ int inotify_check(time_t now);
+-# ifdef HAVE_DHCP
+-void set_dhcp_inotify(void);
+-# endif
++void set_dynamic_inotify(int flag, int total_size, struct crec **rhash, int revhashsz);
+ #endif
+diff --git a/src/inotify.c b/src/inotify.c
+index 818fe8eddda4..c537f4c1562a 100644
+--- a/src/inotify.c
++++ b/src/inotify.c
+@@ -19,11 +19,6 @@
+
+ #include <sys/inotify.h>
+
+-#ifdef HAVE_DHCP
+-static void check_for_dhcp_inotify(struct inotify_event *in, time_t now);
+-#endif
+-
+-
+ /* the strategy is to set a inotify on the directories containing
+ resolv files, for any files in the directory which are close-write
+ or moved into the directory.
+@@ -82,57 +77,28 @@ void inotify_dnsmasq_init()
+ }
+ }
+
+-int inotify_check(time_t now)
++
++/* initialisation for dynamic-dir. Set inotify watch for each directory, and read pre-existing files */
++void set_dynamic_inotify(int flag, int total_size, struct crec **rhash, int revhashsz)
+ {
+- int hit = 0;
++ struct hostsfile *ah;
+
+- while (1)
++ for (ah = daemon->dynamic_dirs; ah; ah = ah->next)
+ {
+- int rc;
+- char *p;
+- struct resolvc *res;
+- struct inotify_event *in;
+-
+- while ((rc = read(daemon->inotifyfd, inotify_buffer, INOTIFY_SZ)) == -1 && errno == EINTR);
+-
+- if (rc <= 0)
+- break;
+-
+- for (p = inotify_buffer; rc - (p - inotify_buffer) >= (int)sizeof(struct inotify_event); p += sizeof(struct inotify_event) + in->len)
++ DIR *dir_stream = NULL;
++ struct dirent *ent;
++ struct stat buf;
++
++ if (!(ah->flags & flag))
++ continue;
++
++ if (stat(ah->fname, &buf) == -1 || !(S_ISDIR(buf.st_mode)))
+ {
+- in = (struct inotify_event*)p;
+-
+- for (res = daemon->resolv_files; res; res = res->next)
+- if (res->wd == in->wd && in->len != 0 && strcmp(res->file, in->name) == 0)
+- hit = 1;
+-
+-#ifdef HAVE_DHCP
+- if (daemon->dhcp || daemon->doing_dhcp6)
+- check_for_dhcp_inotify(in, now);
+-#endif
++ my_syslog(LOG_ERR, _("bad dynamic directory %s: %s"),
++ ah->fname, strerror(errno));
++ continue;
+ }
+- }
+- return hit;
+-}
+-
+-#ifdef HAVE_DHCP
+-/* initialisation for dhcp-hostdir. Set inotify watch for each directory, and read pre-existing files */
+-void set_dhcp_inotify(void)
+-{
+- struct hostsfile *ah;
+-
+- for (ah = daemon->inotify_hosts; ah; ah = ah->next)
+- {
+- DIR *dir_stream = NULL;
+- struct dirent *ent;
+- struct stat buf;
+-
+- if (stat(ah->fname, &buf) == -1 || !(S_ISDIR(buf.st_mode)))
+- {
+- my_syslog(LOG_ERR, _("bad directory in dhcp-hostsdir %s"), ah->fname);
+- continue;
+- }
+-
++
+ if (!(ah->flags & AH_WD_DONE))
+ {
+ ah->wd = inotify_add_watch(daemon->inotifyfd, ah->fname, IN_CLOSE_WRITE | IN_MOVED_TO);
+@@ -142,7 +108,8 @@ void set_dhcp_inotify(void)
+ a race which misses files being added as we start */
+ if (ah->wd == -1 || !(dir_stream = opendir(ah->fname)))
+ {
+- my_syslog(LOG_ERR, _("failed to create inotify for %s"), ah->fname);
++ my_syslog(LOG_ERR, _("failed to create inotify for %s: %s"),
++ ah->fname, strerror(errno));
+ continue;
+ }
+
+@@ -167,54 +134,90 @@ void set_dhcp_inotify(void)
+
+ /* ignore non-regular files */
+ if (stat(path, &buf) != -1 && S_ISREG(buf.st_mode))
+- option_read_hostsfile(path);
+-
++ {
++ if (ah->flags & AH_HOSTS)
++ total_size = read_hostsfile(path, ah->index, total_size, rhash, revhashsz);
++#ifdef HAVE_DHCP
++ else if (ah->flags & (AH_DHCP_HST | AH_DHCP_OPT))
++ option_read_dynfile(path, ah->flags);
++#endif
++ }
++
+ free(path);
+ }
+ }
+ }
+ }
+
+-static void check_for_dhcp_inotify(struct inotify_event *in, time_t now)
++int inotify_check(time_t now)
+ {
++ int hit = 0;
+ struct hostsfile *ah;
+
+- /* ignore emacs backups and dotfiles */
+- if (in->len == 0 ||
+- in->name[in->len - 1] == '~' ||
+- (in->name[0] == '#' && in->name[in->len - 1] == '#') ||
+- in->name[0] == '.')
+- return;
+-
+- for (ah = daemon->inotify_hosts; ah; ah = ah->next)
+- if (ah->wd == in->wd)
+- {
+- size_t lendir = strlen(ah->fname);
+- char *path;
+-
+- if ((path = whine_malloc(lendir + in->len + 2)))
+- {
+- strcpy(path, ah->fname);
+- strcat(path, "/");
+- strcat(path, in->name);
+-
+- if (option_read_hostsfile(path))
++ while (1)
++ {
++ int rc;
++ char *p;
++ struct resolvc *res;
++ struct inotify_event *in;
++
++ while ((rc = read(daemon->inotifyfd, inotify_buffer, INOTIFY_SZ)) == -1 && errno == EINTR);
++
++ if (rc <= 0)
++ break;
++
++ for (p = inotify_buffer; rc - (p - inotify_buffer) >= (int)sizeof(struct inotify_event); p += sizeof(struct inotify_event) + in->len)
++ {
++ in = (struct inotify_event*)p;
++
++ for (res = daemon->resolv_files; res; res = res->next)
++ if (res->wd == in->wd && in->len != 0 && strcmp(res->file, in->name) == 0)
++ hit = 1;
++
++ /* ignore emacs backups and dotfiles */
++ if (in->len == 0 ||
++ in->name[in->len - 1] == '~' ||
++ (in->name[0] == '#' && in->name[in->len - 1] == '#') ||
++ in->name[0] == '.')
++ continue;
++
++ for (ah = daemon->dynamic_dirs; ah; ah = ah->next)
++ if (ah->wd == in->wd)
+ {
+- /* Propogate the consequences of loading a new dhcp-host */
+- dhcp_update_configs(daemon->dhcp_conf);
+- lease_update_from_configs();
+- lease_update_file(now);
+- lease_update_dns(1);
++ size_t lendir = strlen(ah->fname);
++ char *path;
++
++ if ((path = whine_malloc(lendir + in->len + 2)))
++ {
++ strcpy(path, ah->fname);
++ strcat(path, "/");
++ strcat(path, in->name);
++
++ if (ah->flags & AH_HOSTS)
++ read_hostsfile(path, ah->index, 0, NULL, 0);
++#ifdef HAVE_DHCP
++ else if (ah->flags & AH_DHCP_HST)
++ {
++ if (option_read_dynfile(path, AH_DHCP_HST))
++ {
++ /* Propogate the consequences of loading a new dhcp-host */
++ dhcp_update_configs(daemon->dhcp_conf);
++ lease_update_from_configs();
++ lease_update_file(now);
++ lease_update_dns(1);
++ }
++ }
++ else if (ah->flags & AH_DHCP_OPT)
++ option_read_dynfile(path, AH_DHCP_OPT);
++#endif
++
++ free(path);
++ }
+ }
+-
+- free(path);
+- }
+-
+- return;
+- }
++ }
++ }
++ return hit;
+ }
+
+-#endif /* DHCP */
+-
+ #endif /* INOTIFY */
+
+diff --git a/src/option.c b/src/option.c
+index 22e11c37d374..6ef80117cc8c 100644
+--- a/src/option.c
++++ b/src/option.c
+@@ -150,6 +150,8 @@ struct myoption {
+ #define LOPT_IGNORE_ADDR 338
+ #define LOPT_MINCTTL 339
+ #define LOPT_DHCP_INOTIFY 340
++#define LOPT_DHOPT_INOTIFY 341
++#define LOPT_HOST_INOTIFY 342
+
+ #ifdef HAVE_GETOPT_LONG
+ static const struct option opts[] =
+@@ -200,6 +202,7 @@ static const struct myoption opts[] =
+ { "local-ttl", 1, 0, 'T' },
+ { "no-negcache", 0, 0, 'N' },
+ { "addn-hosts", 1, 0, 'H' },
++ { "hostsdir", 1, 0, LOPT_HOST_INOTIFY },
+ { "query-port", 1, 0, 'Q' },
+ { "except-interface", 1, 0, 'I' },
+ { "no-dhcp-interface", 1, 0, '2' },
+@@ -249,6 +252,7 @@ static const struct myoption opts[] =
+ { "dhcp-hostsfile", 1, 0, LOPT_DHCP_HOST },
+ { "dhcp-optsfile", 1, 0, LOPT_DHCP_OPTS },
+ { "dhcp-hostsdir", 1, 0, LOPT_DHCP_INOTIFY },
++ { "dhcp-optsdir", 1, 0, LOPT_DHOPT_INOTIFY },
+ { "dhcp-no-override", 0, 0, LOPT_OVERRIDE },
+ { "tftp-port-range", 1, 0, LOPT_TFTPPORTS },
+ { "stop-dns-rebind", 0, 0, LOPT_REBIND },
+@@ -338,9 +342,11 @@ static struct {
+ { LOPT_DHCP_HOST, ARG_DUP, "<path>", gettext_noop("Read DHCP host specs from file."), NULL },
+ { LOPT_DHCP_OPTS, ARG_DUP, "<path>", gettext_noop("Read DHCP option specs from file."), NULL },
+ { LOPT_DHCP_INOTIFY, ARG_DUP, "<path>", gettext_noop("Read DHCP host specs from a directory."), NULL },
++ { LOPT_DHOPT_INOTIFY, ARG_DUP, "<path>", gettext_noop("Read DHCP options from a directory."), NULL },
+ { LOPT_TAG_IF, ARG_DUP, "tag-expression", gettext_noop("Evaluate conditional tag expression."), NULL },
+ { 'h', OPT_NO_HOSTS, NULL, gettext_noop("Do NOT load %s file."), HOSTSFILE },
+ { 'H', ARG_DUP, "<path>", gettext_noop("Specify a hosts file to be read in addition to %s."), HOSTSFILE },
++ { LOPT_HOST_INOTIFY, ARG_DUP, "<path>", gettext_noop("Read hosts files from a directory."), NULL },
+ { 'i', ARG_DUP, "<interface>", gettext_noop("Specify interface(s) to listen on."), NULL },
+ { 'I', ARG_DUP, "<interface>", gettext_noop("Specify interface(s) NOT to listen on.") , NULL },
+ { 'j', ARG_DUP, "set:<tag>,<class>", gettext_noop("Map DHCP user class to tag."), NULL },
+@@ -1712,10 +1718,12 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
+ break;
+ #endif /* HAVE_DHCP */
+
+- case LOPT_DHCP_HOST: /* --dhcp-hostsfile */
+- case LOPT_DHCP_OPTS: /* --dhcp-optsfile */
+- case LOPT_DHCP_INOTIFY: /* dhcp-hostsdir */
+- case 'H': /* --addn-hosts */
++ case LOPT_DHCP_HOST: /* --dhcp-hostsfile */
++ case LOPT_DHCP_OPTS: /* --dhcp-optsfile */
++ case LOPT_DHCP_INOTIFY: /* --dhcp-hostsdir */
++ case LOPT_DHOPT_INOTIFY: /* --dhcp-optsdir */
++ case LOPT_HOST_INOTIFY: /* --hostsdir */
++ case 'H': /* --addn-hosts */
+ {
+ struct hostsfile *new = opt_malloc(sizeof(struct hostsfile));
+ static unsigned int hosts_index = SRC_AH;
+@@ -1737,10 +1745,16 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
+ new->next = daemon->dhcp_opts_file;
+ daemon->dhcp_opts_file = new;
+ }
+- else if (option == LOPT_DHCP_INOTIFY)
++ else
+ {
+- new->next = daemon->inotify_hosts;
+- daemon->inotify_hosts = new;
++ new->next = daemon->dynamic_dirs;
++ daemon->dynamic_dirs = new;
++ if (option == LOPT_DHCP_INOTIFY)
++ new->flags |= AH_DHCP_HST;
++ else if (option == LOPT_DHOPT_INOTIFY)
++ new->flags |= AH_DHCP_OPT;
++ else if (option == LOPT_HOST_INOTIFY)
++ new->flags |= AH_HOSTS;
+ }
+
+ break;
+@@ -4052,9 +4066,14 @@ static void read_file(char *file, FILE *f, int hard_opt)
+ }
+
+ #ifdef HAVE_DHCP
+-int option_read_hostsfile(char *file)
++int option_read_dynfile(char *file, int flags)
+ {
+- return one_file(file, LOPT_BANK);
++ if (flags & AH_DHCP_HST)
++ return one_file(file, LOPT_BANK);
++ else if (flags & AH_DHCP_OPT)
++ return one_file(file, LOPT_OPTS);
++
++ return 0;
+ }
+ #endif
+
+--
+2.1.0
+
--- /dev/null
+From aff3396280e944833f0e23d834aa6acd5fe2605a Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sat, 31 Jan 2015 20:13:40 +0000
+Subject: [PATCH 39/98] Update copyrights for dawn of 2015.
+
+---
+ Makefile | 2 +-
+ src/auth.c | 2 +-
+ src/blockdata.c | 2 +-
+ src/bpf.c | 2 +-
+ src/cache.c | 2 +-
+ src/config.h | 2 +-
+ src/conntrack.c | 2 +-
+ src/dbus.c | 2 +-
+ src/dhcp-common.c | 2 +-
+ src/dhcp-protocol.h | 2 +-
+ src/dhcp.c | 2 +-
+ src/dhcp6-protocol.h | 2 +-
+ src/dhcp6.c | 2 +-
+ src/dns-protocol.h | 2 +-
+ src/dnsmasq.c | 2 +-
+ src/dnsmasq.h | 4 ++--
+ src/dnssec.c | 2 +-
+ src/domain.c | 2 +-
+ src/forward.c | 2 +-
+ src/helper.c | 2 +-
+ src/inotify.c | 2 +-
+ src/ip6addr.h | 2 +-
+ src/lease.c | 2 +-
+ src/log.c | 2 +-
+ src/loop.c | 2 +-
+ src/netlink.c | 2 +-
+ src/network.c | 2 +-
+ src/option.c | 2 +-
+ src/outpacket.c | 2 +-
+ src/radv-protocol.h | 2 +-
+ src/radv.c | 2 +-
+ src/rfc1035.c | 2 +-
+ src/rfc2131.c | 2 +-
+ src/rfc3315.c | 2 +-
+ src/slaac.c | 2 +-
+ src/tftp.c | 2 +-
+ src/util.c | 2 +-
+ 37 files changed, 38 insertions(+), 38 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index bcbd5571671d..21e4a5c4101c 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,4 +1,4 @@
+-# dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++# dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+ #
+ # 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
+diff --git a/src/auth.c b/src/auth.c
+index 59e05d3da38e..15721e52793f 100644
+--- a/src/auth.c
++++ b/src/auth.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+
+ 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
+diff --git a/src/blockdata.c b/src/blockdata.c
+index 5a70a7967fa3..c8f5eae811eb 100644
+--- a/src/blockdata.c
++++ b/src/blockdata.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+
+ 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
+diff --git a/src/bpf.c b/src/bpf.c
+index 4416b1c07287..997d87421bed 100644
+--- a/src/bpf.c
++++ b/src/bpf.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+
+ 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
+diff --git a/src/cache.c b/src/cache.c
+index abaf25ec0f18..117ae279fd4e 100644
+--- a/src/cache.c
++++ b/src/cache.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+
+ 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
+diff --git a/src/config.h b/src/config.h
+index 5e5009271eba..8def6f200461 100644
+--- a/src/config.h
++++ b/src/config.h
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+
+ 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
+diff --git a/src/conntrack.c b/src/conntrack.c
+index 6a5133ab93af..0fa2da903b03 100644
+--- a/src/conntrack.c
++++ b/src/conntrack.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+
+ 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
+diff --git a/src/dbus.c b/src/dbus.c
+index a2a94dc85dac..5b69de518beb 100644
+--- a/src/dbus.c
++++ b/src/dbus.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+
+ 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
+diff --git a/src/dhcp-common.c b/src/dhcp-common.c
+index 9d13ac8df6f1..ce115202a646 100644
+--- a/src/dhcp-common.c
++++ b/src/dhcp-common.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+
+ 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
+diff --git a/src/dhcp-protocol.h b/src/dhcp-protocol.h
+index 4c0961472482..701b6cb3346e 100644
+--- a/src/dhcp-protocol.h
++++ b/src/dhcp-protocol.h
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+
+ 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
+diff --git a/src/dhcp.c b/src/dhcp.c
+index 7acf2c4311a9..f29be9b489a7 100644
+--- a/src/dhcp.c
++++ b/src/dhcp.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+
+ 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
+diff --git a/src/dhcp6-protocol.h b/src/dhcp6-protocol.h
+index 5927dc32f6af..928a2fa162ed 100644
+--- a/src/dhcp6-protocol.h
++++ b/src/dhcp6-protocol.h
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+
+ 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
+diff --git a/src/dhcp6.c b/src/dhcp6.c
+index bc48fdddd3de..3c56e77c6085 100644
+--- a/src/dhcp6.c
++++ b/src/dhcp6.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+
+ 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
+diff --git a/src/dns-protocol.h b/src/dns-protocol.h
+index 0aced3ce6952..16fade33d98c 100644
+--- a/src/dns-protocol.h
++++ b/src/dns-protocol.h
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+
+ 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
+diff --git a/src/dnsmasq.c b/src/dnsmasq.c
+index 2c629fe422aa..e903a24c8105 100644
+--- a/src/dnsmasq.c
++++ b/src/dnsmasq.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+
+ 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
+diff --git a/src/dnsmasq.h b/src/dnsmasq.h
+index 0c322a93993e..89e758b56a0a 100644
+--- a/src/dnsmasq.h
++++ b/src/dnsmasq.h
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+
+ 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
+@@ -14,7 +14,7 @@
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+-#define COPYRIGHT "Copyright (c) 2000-2014 Simon Kelley"
++#define COPYRIGHT "Copyright (c) 2000-2015 Simon Kelley"
+
+ #ifndef NO_LARGEFILE
+ /* Ensure we can use files >2GB (log files may grow this big) */
+diff --git a/src/dnssec.c b/src/dnssec.c
+index d39ab85ed966..a8dfe3871c85 100644
+--- a/src/dnssec.c
++++ b/src/dnssec.c
+@@ -1,5 +1,5 @@
+ /* dnssec.c is Copyright (c) 2012 Giovanni Bajo <rasky@develer.com>
+- and Copyright (c) 2012-2014 Simon Kelley
++ and Copyright (c) 2012-2015 Simon Kelley
+
+ 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
+diff --git a/src/domain.c b/src/domain.c
+index fdd5e4f0838f..278698ca04b3 100644
+--- a/src/domain.c
++++ b/src/domain.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+
+ 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
+diff --git a/src/forward.c b/src/forward.c
+index b17bc34f865f..438e9fa490b8 100644
+--- a/src/forward.c
++++ b/src/forward.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+
+ 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
+diff --git a/src/helper.c b/src/helper.c
+index 4be53c361ee1..1fee72dead8c 100644
+--- a/src/helper.c
++++ b/src/helper.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+
+ 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
+diff --git a/src/inotify.c b/src/inotify.c
+index c537f4c1562a..470d6ed99213 100644
+--- a/src/inotify.c
++++ b/src/inotify.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+
+ 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
+diff --git a/src/ip6addr.h b/src/ip6addr.h
+index c7dcb39c33fa..f0b7e820e227 100644
+--- a/src/ip6addr.h
++++ b/src/ip6addr.h
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+
+ 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
+diff --git a/src/lease.c b/src/lease.c
+index 5d56b1b9147e..545bbb7fd09c 100644
+--- a/src/lease.c
++++ b/src/lease.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+
+ 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
+diff --git a/src/log.c b/src/log.c
+index 8083a8697323..a5ac605c7c5d 100644
+--- a/src/log.c
++++ b/src/log.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+
+ 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
+diff --git a/src/loop.c b/src/loop.c
+index bb377ad12644..565f7d8e58e0 100644
+--- a/src/loop.c
++++ b/src/loop.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+
+ 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
+diff --git a/src/netlink.c b/src/netlink.c
+index b39328376389..10f94db25a14 100644
+--- a/src/netlink.c
++++ b/src/netlink.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+
+ 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
+diff --git a/src/network.c b/src/network.c
+index 14d2af2ce313..7045253d467b 100644
+--- a/src/network.c
++++ b/src/network.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+
+ 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
+diff --git a/src/option.c b/src/option.c
+index 6ef80117cc8c..cb4e76ba0aa2 100644
+--- a/src/option.c
++++ b/src/option.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+
+ 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
+diff --git a/src/outpacket.c b/src/outpacket.c
+index dce68f7cb09f..5b1ff9318bbd 100644
+--- a/src/outpacket.c
++++ b/src/outpacket.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+
+ 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
+diff --git a/src/radv-protocol.h b/src/radv-protocol.h
+index 72ccda49d7fe..4cc1ea426e69 100644
+--- a/src/radv-protocol.h
++++ b/src/radv-protocol.h
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+
+ 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
+diff --git a/src/radv.c b/src/radv.c
+index 3c8b162dbd8e..6da125b864ae 100644
+--- a/src/radv.c
++++ b/src/radv.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+
+ 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
+diff --git a/src/rfc1035.c b/src/rfc1035.c
+index 262274fc5b80..5ef5ddb7485e 100644
+--- a/src/rfc1035.c
++++ b/src/rfc1035.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+
+ 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
+diff --git a/src/rfc2131.c b/src/rfc2131.c
+index 5c9040892f1d..55526443dc84 100644
+--- a/src/rfc2131.c
++++ b/src/rfc2131.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+
+ 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
+diff --git a/src/rfc3315.c b/src/rfc3315.c
+index e593ec9c362c..c1ddc805988d 100644
+--- a/src/rfc3315.c
++++ b/src/rfc3315.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+
+ 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
+diff --git a/src/slaac.c b/src/slaac.c
+index 351d6802f85e..abaad537e25a 100644
+--- a/src/slaac.c
++++ b/src/slaac.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+
+ 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
+diff --git a/src/tftp.c b/src/tftp.c
+index a527911fc0df..a57a31514f44 100644
+--- a/src/tftp.c
++++ b/src/tftp.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+
+ 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
+diff --git a/src/util.c b/src/util.c
+index d532444da207..91d02410b13f 100644
+--- a/src/util.c
++++ b/src/util.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+
+ 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
+--
+2.1.0
+
--- /dev/null
+From 3d04f46334d0e345f589eda1372e638b946fe637 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sat, 31 Jan 2015 21:59:13 +0000
+Subject: [PATCH 40/98] inotify documentation updates.
+
+---
+ man/dnsmasq.8 | 11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
+
+diff --git a/man/dnsmasq.8 b/man/dnsmasq.8
+index 005b5cca8d1f..c858323d78bd 100644
+--- a/man/dnsmasq.8
++++ b/man/dnsmasq.8
+@@ -50,6 +50,10 @@ Additional hosts file. Read the specified file as well as /etc/hosts. If -h is g
+ only the specified file. This option may be repeated for more than one
+ additional hosts file. If a directory is given, then read all the files contained in that directory.
+ .TP
++.B --hostsdir=<path>
++Read all the hosts files contained in the directory. New or changed files
++are read automatically. See --dhcp-hostsdir for details.
++.TP
+ .B \-E, --expand-hosts
+ Add the domain to simple names (without a period) in /etc/hosts
+ in the same way as for DHCP-derived names. Note that this does not
+@@ -979,12 +983,14 @@ dhcp-optsfile will be re-read when dnsmasq receives SIGHUP. Note that
+ it is possible to encode the information in a
+ .TP
+ .B --dhcp-hostsdir=<path>
+-This is exactly equivalent to dhcp-hostfile, except for the following. The path MUST be a
++This is equivalent to dhcp-hostsfile, except for the following. The path MUST be a
+ directory, and not an individual file. Changed or new files within
+ the directory are read automatically, without the need to send SIGHUP.
+ If a file is deleted for changed after it has been read by dnsmasq, then the
+ host record it contained will remain until dnsmasq recieves a SIGHUP, or
+ is restarted; ie host records are only added dynamically.
++.B --dhcp-optsdir=<path>
++This is equivalent to dhcp-optsfile, with the differences noted for --dhcp-hostsdir.
+ .TP
+ .B --dhcp-boot
+ flag as DHCP options, using the options names bootfile-name,
+@@ -1791,7 +1797,8 @@ clears its cache and then re-loads
+ .I /etc/hosts
+ and
+ .I /etc/ethers
+-and any file given by --dhcp-hostsfile, --dhcp-optsfile or --addn-hosts.
++and any file given by --dhcp-hostsfile, --dhcp-hostsdir, --dhcp-optsfile,
++--dhcp-optsdir, --addn-hosts or --hostsdir.
+ The dhcp lease change script is called for all
+ existing DHCP leases. If
+ .B
+--
+2.1.0
+
--- /dev/null
+From 6ef15b34ca83c62a939f69356d5c3f7a6bfef3d0 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sat, 31 Jan 2015 22:44:26 +0000
+Subject: [PATCH 41/98] Fix broken ECDSA DNSSEC signatures.
+
+---
+ CHANGELOG | 2 ++
+ src/dnssec.c | 2 +-
+ 2 files changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index c05dec63c587..c80dc0fdbe9e 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -65,6 +65,8 @@ version 2.73
+ configured to do stateful DHCPv6. Thanks to Win King Wan
+ for the patch.
+
++ Fix broken DNSSEC validation of ECDSA signatures.
++
+
+ version 2.72
+ Add ra-advrouter mode, for RFC-3775 mobile IPv6 support.
+diff --git a/src/dnssec.c b/src/dnssec.c
+index a8dfe3871c85..26932373cd3e 100644
+--- a/src/dnssec.c
++++ b/src/dnssec.c
+@@ -275,7 +275,7 @@ static int dnsmasq_ecdsa_verify(struct blockdata *key_data, unsigned int key_len
+ }
+
+ if (sig_len != 2*t || key_len != 2*t ||
+- (p = blockdata_retrieve(key_data, key_len, NULL)))
++ !(p = blockdata_retrieve(key_data, key_len, NULL)))
+ return 0;
+
+ mpz_import(x, t , 1, 1, 0, 0, p);
+--
+2.1.0
+
--- /dev/null
+From 106266761828a0acb006346ae47bf031dee46a5d Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sun, 1 Feb 2015 00:15:16 +0000
+Subject: [PATCH 42/98] BSD make support
+
+---
+ Makefile | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 21e4a5c4101c..2910320b6452 100644
+--- a/Makefile
++++ b/Makefile
+@@ -64,8 +64,10 @@ nettle_libs = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_DNSSEC $(PKG_CONFIG
+ gmp_libs = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_DNSSEC NO_GMP --copy -lgmp`
+ sunos_libs = `if uname | grep SunOS >/dev/null 2>&1; then echo -lsocket -lnsl -lposix4; fi`
+ version = -DVERSION='\"`$(top)/bld/get-version $(top)`\"'
+-copts_conf = .copts_$(shell $(CC) -DDNSMASQ_COMPILE_OPTS $(COPTS) -E $(top)/$(SRC)/dnsmasq.h | \
+- ( md5sum 2>/dev/null || md5 ) | cut -f 1 -d ' ')
++
++sum?=$(shell $(CC) -DDNSMASQ_COMPILE_OPTS $(COPTS) -E $(top)/$(SRC)/dnsmasq.h | ( md5sum 2>/dev/null || md5 ) | cut -f 1 -d ' ')
++sum!=$(CC) -DDNSMASQ_COMPILE_OPTS $(COPTS) -E $(top)/$(SRC)/dnsmasq.h | ( md5sum 2>/dev/null || md5 ) | cut -f 1 -d ' '
++copts_conf = .copts_$(sum)
+
+ objs = cache.o rfc1035.o util.o option.o forward.o network.o \
+ dnsmasq.o dhcp.o lease.o rfc2131.o netlink.o dbus.o bpf.o \
+--
+2.1.0
+
--- /dev/null
+From 8d8a54ec79d9f96979fabbd97b1dd2ddebc7d78f Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sun, 1 Feb 2015 21:48:46 +0000
+Subject: [PATCH 43/98] Fix build failure on openBSD.
+
+---
+ src/tables.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/tables.c b/src/tables.c
+index dcdef794c4d2..aae1252708db 100644
+--- a/src/tables.c
++++ b/src/tables.c
+@@ -21,7 +21,7 @@
+ #if defined(HAVE_IPSET) && defined(HAVE_BSD_NETWORK)
+
+ #ifndef __FreeBSD__
+-#include <bsd/string.h>
++#include <string.h>
+ #endif
+
+ #include <sys/types.h>
+--
+2.1.0
+
--- /dev/null
+From d36b732c4cfa91ea09af64b5dc0f3a85a075e5bc Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Thi=C3=A9baud=20Weksteen?= <thiebaud@weksteen.fr>
+Date: Mon, 2 Feb 2015 21:37:27 +0000
+Subject: [PATCH 44/98] Manpage typo fix.
+
+---
+ man/dnsmasq.8 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/man/dnsmasq.8 b/man/dnsmasq.8
+index c858323d78bd..27f85d40fbbb 100644
+--- a/man/dnsmasq.8
++++ b/man/dnsmasq.8
+@@ -516,7 +516,7 @@ zone files: the port, weight and priority numbers are in a different
+ order. More than one SRV record for a given service/domain is allowed,
+ all that match are returned.
+ .TP
+-.B --host-record=<name>[,<name>....][<IPv4-address>],[<IPv6-address>]
++.B --host-record=<name>[,<name>....],[<IPv4-address>],[<IPv6-address>]
+ Add A, AAAA and PTR records to the DNS. This adds one or more names to
+ the DNS with associated IPv4 (A) and IPv6 (AAAA) records. A name may
+ appear in more than one
+--
+2.1.0
+
--- /dev/null
+From 2941d3ac898cf84b544e47c9735c5e4111711db1 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Mon, 2 Feb 2015 22:36:42 +0000
+Subject: [PATCH 45/98] Fixup dhcp-configs after reading extra hostfiles with
+ inotify.
+
+---
+ src/inotify.c | 14 +++++++++++++-
+ 1 file changed, 13 insertions(+), 1 deletion(-)
+
+diff --git a/src/inotify.c b/src/inotify.c
+index 470d6ed99213..6f4cd79e0030 100644
+--- a/src/inotify.c
++++ b/src/inotify.c
+@@ -194,7 +194,19 @@ int inotify_check(time_t now)
+ strcat(path, in->name);
+
+ if (ah->flags & AH_HOSTS)
+- read_hostsfile(path, ah->index, 0, NULL, 0);
++ {
++ read_hostsfile(path, ah->index, 0, NULL, 0);
++#ifdef HAVE_DHCP
++ if (daemon->dhcp || daemon->doing_dhcp6)
++ {
++ /* Propogate the consequences of loading a new dhcp-host */
++ dhcp_update_configs(daemon->dhcp_conf);
++ lease_update_from_configs();
++ lease_update_file(now);
++ lease_update_dns(1);
++ }
++#endif
++ }
+ #ifdef HAVE_DHCP
+ else if (ah->flags & AH_DHCP_HST)
+ {
+--
+2.1.0
+
--- /dev/null
+From f9c863708c6b0aea31ff7a466647685dc739de50 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Tue, 3 Feb 2015 21:52:48 +0000
+Subject: [PATCH 46/98] Extra logging for inotify code.
+
+---
+ src/cache.c | 9 ++++-----
+ src/inotify.c | 4 +++-
+ src/option.c | 4 +++-
+ 3 files changed, 10 insertions(+), 7 deletions(-)
+
+diff --git a/src/cache.c b/src/cache.c
+index 117ae279fd4e..43245b771b53 100644
+--- a/src/cache.c
++++ b/src/cache.c
+@@ -1022,11 +1022,10 @@ int read_hostsfile(char *filename, unsigned int index, int cache_size, struct cr
+ fclose(f);
+
+ if (rhash)
+- {
+- rehash(name_count);
+- my_syslog(LOG_INFO, _("read %s - %d addresses"), filename, addr_count);
+- }
+-
++ rehash(name_count);
++
++ my_syslog(LOG_INFO, _("read %s - %d addresses"), filename, addr_count);
++
+ return name_count;
+ }
+
+diff --git a/src/inotify.c b/src/inotify.c
+index 6f4cd79e0030..44ce0c9af051 100644
+--- a/src/inotify.c
++++ b/src/inotify.c
+@@ -192,7 +192,9 @@ int inotify_check(time_t now)
+ strcpy(path, ah->fname);
+ strcat(path, "/");
+ strcat(path, in->name);
+-
++
++ my_syslog(LOG_INFO, _("inotify, new or changed file %s"), path);
++
+ if (ah->flags & AH_HOSTS)
+ {
+ read_hostsfile(path, ah->index, 0, NULL, 0);
+diff --git a/src/option.c b/src/option.c
+index cb4e76ba0aa2..e4b4865d07a5 100644
+--- a/src/option.c
++++ b/src/option.c
+@@ -4068,11 +4068,13 @@ static void read_file(char *file, FILE *f, int hard_opt)
+ #ifdef HAVE_DHCP
+ int option_read_dynfile(char *file, int flags)
+ {
++ my_syslog(MS_DHCP | LOG_INFO, _("read %s"), file);
++
+ if (flags & AH_DHCP_HST)
+ return one_file(file, LOPT_BANK);
+ else if (flags & AH_DHCP_OPT)
+ return one_file(file, LOPT_OPTS);
+-
++
+ return 0;
+ }
+ #endif
+--
+2.1.0
+
--- /dev/null
+From efb8b5566aafc1f3ce18514a2df93af5a2e4998c Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sat, 7 Feb 2015 22:36:34 +0000
+Subject: [PATCH 47/98] man page typo.
+
+---
+ man/dnsmasq.8 | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/man/dnsmasq.8 b/man/dnsmasq.8
+index 27f85d40fbbb..5cdd186afaa0 100644
+--- a/man/dnsmasq.8
++++ b/man/dnsmasq.8
+@@ -989,6 +989,7 @@ the directory are read automatically, without the need to send SIGHUP.
+ If a file is deleted for changed after it has been read by dnsmasq, then the
+ host record it contained will remain until dnsmasq recieves a SIGHUP, or
+ is restarted; ie host records are only added dynamically.
++.TP
+ .B --dhcp-optsdir=<path>
+ This is equivalent to dhcp-optsfile, with the differences noted for --dhcp-hostsdir.
+ .TP
+--
+2.1.0
+
--- /dev/null
+From f4f400776b3c1aa303d1a0fcd500f0ab5bc970f2 Mon Sep 17 00:00:00 2001
+From: Shantanu Gadgil <shantanugadgil@yahoo.com>
+Date: Wed, 11 Feb 2015 20:16:59 +0000
+Subject: [PATCH 48/98] Fix get-version script which returned wrong tag in some
+ situations.
+
+---
+ bld/get-version | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/bld/get-version b/bld/get-version
+index c246a3cc6a47..7ab75db729ac 100755
+--- a/bld/get-version
++++ b/bld/get-version
+@@ -20,7 +20,7 @@ else
+ vers=`cat $1/VERSION | sed 's/[(), ]/,/ g' | tr ',' '\n' | grep ^v[0-9]`
+
+ if [ $? -eq 0 ]; then
+- echo "${vers}" | sort | head -n 1 | sed 's/^v//'
++ echo "${vers}" | sort -r | head -n 1 | sed 's/^v//'
+ else
+ cat $1/VERSION
+ fi
+--
+2.1.0
+
--- /dev/null
+From 8ff70de618eb7de9147dbfbd4deca4a2dd62f0cb Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sat, 14 Feb 2015 20:02:37 +0000
+Subject: [PATCH 49/98] Typos.
+
+---
+ src/inotify.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/inotify.c b/src/inotify.c
+index 44ce0c9af051..9422066257f5 100644
+--- a/src/inotify.c
++++ b/src/inotify.c
+@@ -104,7 +104,8 @@ void set_dynamic_inotify(int flag, int total_size, struct crec **rhash, int revh
+ ah->wd = inotify_add_watch(daemon->inotifyfd, ah->fname, IN_CLOSE_WRITE | IN_MOVED_TO);
+ ah->flags |= AH_WD_DONE;
+ }
+- /* Read contents of dir _after_ calling add_watch, in the ho[e of avoiding
++
++ /* Read contents of dir _after_ calling add_watch, in the hope of avoiding
+ a race which misses files being added as we start */
+ if (ah->wd == -1 || !(dir_stream = opendir(ah->fname)))
+ {
+--
+2.1.0
+
--- /dev/null
+From caeea190f12efd20139f694aac4942d1ac00019f Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sat, 14 Feb 2015 20:08:56 +0000
+Subject: [PATCH 50/98] Make dynamic hosts files work when --no-hosts set.
+
+---
+ src/cache.c | 21 +++++++++++----------
+ 1 file changed, 11 insertions(+), 10 deletions(-)
+
+diff --git a/src/cache.c b/src/cache.c
+index 43245b771b53..c95624c42b1c 100644
+--- a/src/cache.c
++++ b/src/cache.c
+@@ -1133,17 +1133,18 @@ void cache_reload(void)
+ {
+ if (daemon->cachesize > 0)
+ my_syslog(LOG_INFO, _("cleared cache"));
+- return;
+ }
+-
+- if (!option_bool(OPT_NO_HOSTS))
+- total_size = read_hostsfile(HOSTSFILE, SRC_HOSTS, total_size, (struct crec **)daemon->packet, revhashsz);
+-
+- daemon->addn_hosts = expand_filelist(daemon->addn_hosts);
+- for (ah = daemon->addn_hosts; ah; ah = ah->next)
+- if (!(ah->flags & AH_INACTIVE))
+- total_size = read_hostsfile(ah->fname, ah->index, total_size, (struct crec **)daemon->packet, revhashsz);
+-
++ else
++ {
++ if (!option_bool(OPT_NO_HOSTS))
++ total_size = read_hostsfile(HOSTSFILE, SRC_HOSTS, total_size, (struct crec **)daemon->packet, revhashsz);
++
++ daemon->addn_hosts = expand_filelist(daemon->addn_hosts);
++ for (ah = daemon->addn_hosts; ah; ah = ah->next)
++ if (!(ah->flags & AH_INACTIVE))
++ total_size = read_hostsfile(ah->fname, ah->index, total_size, (struct crec **)daemon->packet, revhashsz);
++ }
++
+ #ifdef HAVE_INOTIFY
+ set_dynamic_inotify(AH_HOSTS, total_size, (struct crec **)daemon->packet, revhashsz);
+ #endif
+--
+2.1.0
+
--- /dev/null
+From 28b879ac47b872af6e8c5e86d76806c69338434d Mon Sep 17 00:00:00 2001
+From: Chen Wei <weichen302@icloud.com>
+Date: Tue, 17 Feb 2015 22:07:35 +0000
+Subject: [PATCH 51/98] Fix trivial memory leaks to quieten valgrind.
+
+---
+ src/dnsmasq.c | 2 ++
+ src/option.c | 11 +++++++++--
+ 2 files changed, 11 insertions(+), 2 deletions(-)
+
+diff --git a/src/dnsmasq.c b/src/dnsmasq.c
+index e903a24c8105..e6dabbf556f7 100644
+--- a/src/dnsmasq.c
++++ b/src/dnsmasq.c
+@@ -627,6 +627,8 @@ int main (int argc, char **argv)
+ }
+
+ #ifdef HAVE_LINUX_NETWORK
++ free(hdr);
++ free(data);
+ if (option_bool(OPT_DEBUG))
+ prctl(PR_SET_DUMPABLE, 1, 0, 0, 0);
+ #endif
+diff --git a/src/option.c b/src/option.c
+index e4b4865d07a5..ae0ad002d8b8 100644
+--- a/src/option.c
++++ b/src/option.c
+@@ -4361,7 +4361,7 @@ void read_opts(int argc, char **argv, char *compile_opts)
+ {
+ char *buff = opt_malloc(MAXDNAME);
+ int option, conffile_opt = '7', testmode = 0;
+- char *arg, *conffile = CONFFILE;
++ char *arg, *conffile = NULL;
+
+ opterr = 0;
+
+@@ -4476,7 +4476,14 @@ void read_opts(int argc, char **argv, char *compile_opts)
+ }
+
+ if (conffile)
+- one_file(conffile, conffile_opt);
++ {
++ one_file(conffile, conffile_opt);
++ free(conffile);
++ }
++ else
++ {
++ one_file(CONFFILE, conffile_opt);
++ }
+
+ /* port might not be known when the address is parsed - fill in here */
+ if (daemon->servers)
+--
+2.1.0
+
--- /dev/null
+From 0705a7e2d57654b27c7e14f35ca77241c1821f4d Mon Sep 17 00:00:00 2001
+From: Tomas Hozza <thozza@redhat.com>
+Date: Mon, 23 Feb 2015 21:26:26 +0000
+Subject: [PATCH 52/98] Fix uninitialized value used in get_client_mac()
+
+---
+ src/dhcp6.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/dhcp6.c b/src/dhcp6.c
+index 3c56e77c6085..c7144f5fee7c 100644
+--- a/src/dhcp6.c
++++ b/src/dhcp6.c
+@@ -246,7 +246,9 @@ void get_client_mac(struct in6_addr *client, int iface, unsigned char *mac, unsi
+ neigh.code = 0;
+ neigh.reserved = 0;
+ neigh.target = *client;
+-
++ /* RFC4443 section-2.3: checksum has to be zero to be calculated */
++ neigh.checksum = 0;
++
+ memset(&addr, 0, sizeof(addr));
+ #ifdef HAVE_SOCKADDR_SA_LEN
+ addr.sin6_len = sizeof(struct sockaddr_in6);
+--
+2.1.0
+
--- /dev/null
+From 47b9ac59c715827252ae6e6732903c3dabb697fb Mon Sep 17 00:00:00 2001
+From: Joachim Zobel <jz-2014@heute-morgen.de>
+Date: Mon, 23 Feb 2015 21:38:11 +0000
+Subject: [PATCH 53/98] Log parsing utils in contrib/reverse-dns
+
+---
+ contrib/reverse-dns/README | 18 ++++++++++++++++++
+ contrib/reverse-dns/reverse_replace.sh | 28 ++++++++++++++++++++++++++++
+ 2 files changed, 46 insertions(+)
+ create mode 100644 contrib/reverse-dns/README
+ create mode 100644 contrib/reverse-dns/reverse_replace.sh
+
+diff --git a/contrib/reverse-dns/README b/contrib/reverse-dns/README
+new file mode 100644
+index 000000000000..f87eb77c4c22
+--- /dev/null
++++ b/contrib/reverse-dns/README
+@@ -0,0 +1,18 @@
++Hi.\r
++\r
++To translate my routers netstat-nat output into names that actually talk\r
++to me I have started writing to simple shell scripts. They require \r
++\r
++log-queries\r
++log-facility=/var/log/dnsmasq.log\r
++\r
++to be set. With\r
++\r
++netstat-nat -n -4 | reverse_replace.sh \r
++\r
++I get retranslated output.\r
++\r
++Sincerely,\r
++Joachim\r
++\r
++\r
+diff --git a/contrib/reverse-dns/reverse_replace.sh b/contrib/reverse-dns/reverse_replace.sh
+new file mode 100644
+index 000000000000..a11c164b7f19
+--- /dev/null
++++ b/contrib/reverse-dns/reverse_replace.sh
+@@ -0,0 +1,28 @@
++#!/bin/bash
++# $Id: reverse_replace.sh 4 2015-02-17 20:14:59Z jo $
++#
++# Usage e.g.: netstat -n -4 | reverse_replace.sh
++# Parses stdin for IP4 addresses and replaces them
++# with names retrieved by reverse_dns.sh
++#
++
++DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
++DNS=$DIR/reverse_dns.sh
++
++# sed regex
++IP_regex='[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'
++
++while read LINE; do
++ if grep --quiet $IP_regex <<< "$LINE"; then
++ IPs=`sed "s#.*\b\($IP_regex\)\b.*#\1 #g" <<< "$LINE"`
++ IPs=($IPs)
++ for IP in "${IPs[@]}"
++ do
++ NAME=`$DNS $IP`
++ # echo "$NAME is $IP";
++ LINE="${LINE/$IP/$NAME}"
++ done
++ fi
++ echo $LINE
++done < /dev/stdin
++
+--
+2.1.0
+
--- /dev/null
+From f6e62e2af96f5fa0d1e3d93167a93a8f09bf6e61 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sun, 1 Mar 2015 18:17:54 +0000
+Subject: [PATCH 54/98] Add --dnssec-timestamp option and facility.
+
+---
+ CHANGELOG | 6 +++++
+ man/dnsmasq.8 | 6 +++++
+ src/dnsmasq.c | 11 +++++++-
+ src/dnsmasq.h | 2 ++
+ src/dnssec.c | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++++----
+ src/option.c | 7 +++++
+ 6 files changed, 108 insertions(+), 6 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index c80dc0fdbe9e..4f4fa305deaa 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -66,6 +66,12 @@ version 2.73
+ for the patch.
+
+ Fix broken DNSSEC validation of ECDSA signatures.
++
++ Add --dnssec-timestamp option, which provides an automatic
++ way to detect when the system time becomes valid after boot
++ on systems without an RTC, whilst allowing DNS queries before the
++ clock is valid so that NTP can run. Thanks to
++ Kevin Darbyshire-Bryant for developing this idea.
+
+
+ version 2.72
+diff --git a/man/dnsmasq.8 b/man/dnsmasq.8
+index 5cdd186afaa0..097e7d75145c 100644
+--- a/man/dnsmasq.8
++++ b/man/dnsmasq.8
+@@ -674,6 +674,12 @@ that dnsmasq should be started with this flag when the platform determines that
+ reliable time is established, a SIGHUP should be sent to dnsmasq, which enables time checking, and purges the cache of DNS records
+ which have not been throughly checked.
+ .TP
++.B --dnssec-timestamp=<path>
++Enables an alternative way of checking the validity of the system time for DNSSEC (see --dnssec-no-timecheck). In this case, the
++system time is considered to be valid once it becomes later than the timestamp on the specified file. The file is created and
++its timestamp set automatically by dnsmasq. The file must be stored on a persistent filesystem, so that it and its mtime are carried
++over system restarts.
++.TP
+ .B --proxy-dnssec
+ Copy the DNSSEC Authenticated Data bit from upstream servers to downstream clients and cache it. This is an
+ alternative to having dnsmasq validate DNSSEC, but it depends on the security of the network between
+diff --git a/src/dnsmasq.c b/src/dnsmasq.c
+index e6dabbf556f7..769a19afe6c5 100644
+--- a/src/dnsmasq.c
++++ b/src/dnsmasq.c
+@@ -58,6 +58,9 @@ int main (int argc, char **argv)
+ struct dhcp_context *context;
+ struct dhcp_relay *relay;
+ #endif
++#ifdef HAVE_DNSSEC
++ int badtime;
++#endif
+
+ #ifdef LOCALEDIR
+ setlocale(LC_ALL, "");
+@@ -369,7 +372,11 @@ int main (int argc, char **argv)
+
+ if (baduser)
+ die(_("unknown user or group: %s"), baduser, EC_BADCONF);
+-
++
++#ifdef HAVE_DNSSEC
++ badtime = setup_timestamp(ent_pw->pw_uid);
++#endif
++
+ /* implement group defaults, "dip" if available, or group associated with uid */
+ if (!daemon->group_set && !gp)
+ {
+@@ -689,6 +696,8 @@ int main (int argc, char **argv)
+ my_syslog(LOG_INFO, _("DNSSEC validation enabled"));
+ if (option_bool(OPT_DNSSEC_TIME))
+ my_syslog(LOG_INFO, _("DNSSEC signature timestamps not checked until first cache reload"));
++ if (badtime)
++ my_syslog(LOG_INFO, _("DNSSEC signature timestamps not checked until system time valid"));
+ }
+ #endif
+
+diff --git a/src/dnsmasq.h b/src/dnsmasq.h
+index 89e758b56a0a..b2f02dda63f0 100644
+--- a/src/dnsmasq.h
++++ b/src/dnsmasq.h
+@@ -986,6 +986,7 @@ extern struct daemon {
+ #endif
+ #ifdef HAVE_DNSSEC
+ struct ds_config *ds;
++ char *timestamp_file;
+ #endif
+
+ /* globally used stuff for DNS */
+@@ -1151,6 +1152,7 @@ int dnssec_chase_cname(time_t now, struct dns_header *header, size_t plen, char
+ int dnskey_keytag(int alg, int flags, unsigned char *rdata, int rdlen);
+ size_t filter_rrsigs(struct dns_header *header, size_t plen);
+ unsigned char* hash_questions(struct dns_header *header, size_t plen, char *name);
++int setup_timestamp(uid_t uid);
+
+ /* util.c */
+ void rand_init(void);
+diff --git a/src/dnssec.c b/src/dnssec.c
+index 26932373cd3e..bf4406469de0 100644
+--- a/src/dnssec.c
++++ b/src/dnssec.c
+@@ -34,6 +34,7 @@
+ #include <nettle/dsa-compat.h>
+ #endif
+
++#include <utime.h>
+
+ #define SERIAL_UNDEF -100
+ #define SERIAL_EQ 0
+@@ -394,17 +395,88 @@ static int serial_compare_32(unsigned long s1, unsigned long s2)
+ return SERIAL_UNDEF;
+ }
+
++/* Called at startup. If the timestamp file is configured and exists, put its mtime on
++ timestamp_time. If it doesn't exist, create it, and set the mtime to 1-1-2015.
++ Change the ownership to the user we'll be running as, so that we can update the mtime.
++*/
++static time_t timestamp_time;
++static int back_to_the_future;
++
++int setup_timestamp(uid_t uid)
++{
++ struct stat statbuf;
++
++ back_to_the_future = 0;
++
++ if (!option_bool(OPT_DNSSEC_VALID) || !daemon->timestamp_file)
++ return 0;
++
++ if (stat(daemon->timestamp_file, &statbuf) != -1)
++ {
++ timestamp_time = statbuf.st_mtime;
++ check_and_exit:
++ if (difftime(timestamp_time, time(0)) <= 0)
++ {
++ /* time already OK, update timestamp, and do key checking from the start. */
++ if (utime(daemon->timestamp_file, NULL) == -1)
++ my_syslog(LOG_ERR, _("failed to update mtime on %s: %s"), daemon->timestamp_file, strerror(errno));
++ back_to_the_future = 1;
++ return 0;
++ }
++ return 1;
++ }
++
++ if (errno == ENOENT)
++ {
++ int fd = open(daemon->timestamp_file, O_WRONLY | O_CREAT | O_NONBLOCK, 0666);
++ if (fd != -1)
++ {
++ struct utimbuf timbuf;
++
++ close(fd);
++
++ timestamp_time = timbuf.actime = timbuf.modtime = 1420070400; /* 1-1-2015 */
++ if (utime(daemon->timestamp_file, &timbuf) == 0 &&
++ (getuid() != 0 || chown(daemon->timestamp_file, uid, -1) == 0))
++ goto check_and_exit;
++ }
++ }
++
++ die(_("Cannot create timestamp file %s: %s" ), daemon->timestamp_file, EC_BADCONF);
++ return 0;
++}
++
+ /* Check whether today/now is between date_start and date_end */
+ static int check_date_range(unsigned long date_start, unsigned long date_end)
+ {
+- unsigned long curtime;
+-
++ unsigned long curtime = time(0);
++
+ /* Checking timestamps may be temporarily disabled */
+- if (option_bool(OPT_DNSSEC_TIME))
++
++ /* If the current time if _before_ the timestamp
++ on our persistent timestamp file, then assume the
++ time if not yet correct, and don't check the
++ key timestamps. As soon as the current time is
++ later then the timestamp, update the timestamp
++ and start checking keys */
++ if (daemon->timestamp_file)
++ {
++ if (back_to_the_future == 0 && difftime(timestamp_time, curtime) <= 0)
++ {
++ if (utime(daemon->timestamp_file, NULL) != 0)
++ my_syslog(LOG_ERR, _("failed to update mtime on %s: %s"), daemon->timestamp_file, strerror(errno));
++
++ back_to_the_future = 1;
++ set_option_bool(OPT_DNSSEC_TIME);
++ queue_event(EVENT_RELOAD); /* purge cache */
++ }
++
++ if (back_to_the_future == 0)
++ return 1;
++ }
++ else if (option_bool(OPT_DNSSEC_TIME))
+ return 1;
+
+- curtime = time(0);
+-
+ /* We must explicitly check against wanted values, because of SERIAL_UNDEF */
+ return serial_compare_32(curtime, date_start) == SERIAL_GT
+ && serial_compare_32(curtime, date_end) == SERIAL_LT;
+diff --git a/src/option.c b/src/option.c
+index ae0ad002d8b8..eace40bb566c 100644
+--- a/src/option.c
++++ b/src/option.c
+@@ -152,6 +152,7 @@ struct myoption {
+ #define LOPT_DHCP_INOTIFY 340
+ #define LOPT_DHOPT_INOTIFY 341
+ #define LOPT_HOST_INOTIFY 342
++#define LOPT_DNSSEC_STAMP 343
+
+ #ifdef HAVE_GETOPT_LONG
+ static const struct option opts[] =
+@@ -300,6 +301,7 @@ static const struct myoption opts[] =
+ { "dnssec-debug", 0, 0, LOPT_DNSSEC_DEBUG },
+ { "dnssec-check-unsigned", 0, 0, LOPT_DNSSEC_CHECK },
+ { "dnssec-no-timecheck", 0, 0, LOPT_DNSSEC_TIME },
++ { "dnssec-timestamp", 1, 0, LOPT_DNSSEC_STAMP },
+ #ifdef OPTION6_PREFIX_CLASS
+ { "dhcp-prefix-class", 1, 0, LOPT_PREF_CLSS },
+ #endif
+@@ -463,6 +465,7 @@ static struct {
+ { LOPT_DNSSEC_DEBUG, OPT_DNSSEC_DEBUG, NULL, gettext_noop("Disable upstream checking for DNSSEC debugging."), NULL },
+ { LOPT_DNSSEC_CHECK, OPT_DNSSEC_NO_SIGN, NULL, gettext_noop("Ensure answers without DNSSEC are in unsigned zones."), NULL },
+ { LOPT_DNSSEC_TIME, OPT_DNSSEC_TIME, NULL, gettext_noop("Don't check DNSSEC signature timestamps until first cache-reload"), NULL },
++ { LOPT_DNSSEC_STAMP, ARG_ONE, "<path>", gettext_noop("Timestamp file to verify system clock for DNSSEC"), NULL },
+ #ifdef OPTION6_PREFIX_CLASS
+ { LOPT_PREF_CLSS, ARG_DUP, "set:tag,<class>", gettext_noop("Specify DHCPv6 prefix class"), NULL },
+ #endif
+@@ -3867,6 +3870,10 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
+ }
+
+ #ifdef HAVE_DNSSEC
++ case LOPT_DNSSEC_STAMP:
++ daemon->timestamp_file = opt_string_alloc(arg);
++ break;
++
+ case LOPT_TRUST_ANCHOR:
+ {
+ struct ds_config *new = opt_malloc(sizeof(struct ds_config));
+--
+2.1.0
+
--- /dev/null
+From 9003b50b13da624ca45f3e0cf99abb623b8d026b Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Mon, 2 Mar 2015 22:47:23 +0000
+Subject: [PATCH 55/98] Fix last commit to not crash if uid changing not
+ configured.
+
+---
+ src/dnsmasq.c | 2 +-
+ src/dnsmasq.h | 2 +-
+ src/dnssec.c | 4 ++--
+ 3 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/src/dnsmasq.c b/src/dnsmasq.c
+index 769a19afe6c5..9e05c0e31569 100644
+--- a/src/dnsmasq.c
++++ b/src/dnsmasq.c
+@@ -374,7 +374,7 @@ int main (int argc, char **argv)
+ die(_("unknown user or group: %s"), baduser, EC_BADCONF);
+
+ #ifdef HAVE_DNSSEC
+- badtime = setup_timestamp(ent_pw->pw_uid);
++ badtime = setup_timestamp(ent_pw);
+ #endif
+
+ /* implement group defaults, "dip" if available, or group associated with uid */
+diff --git a/src/dnsmasq.h b/src/dnsmasq.h
+index b2f02dda63f0..a451cb4dd03c 100644
+--- a/src/dnsmasq.h
++++ b/src/dnsmasq.h
+@@ -1152,7 +1152,7 @@ int dnssec_chase_cname(time_t now, struct dns_header *header, size_t plen, char
+ int dnskey_keytag(int alg, int flags, unsigned char *rdata, int rdlen);
+ size_t filter_rrsigs(struct dns_header *header, size_t plen);
+ unsigned char* hash_questions(struct dns_header *header, size_t plen, char *name);
+-int setup_timestamp(uid_t uid);
++int setup_timestamp(struct passwd *ent_pw);
+
+ /* util.c */
+ void rand_init(void);
+diff --git a/src/dnssec.c b/src/dnssec.c
+index bf4406469de0..c60eacf73c6b 100644
+--- a/src/dnssec.c
++++ b/src/dnssec.c
+@@ -402,7 +402,7 @@ static int serial_compare_32(unsigned long s1, unsigned long s2)
+ static time_t timestamp_time;
+ static int back_to_the_future;
+
+-int setup_timestamp(uid_t uid)
++int setup_timestamp(struct passwd *ent_pw)
+ {
+ struct stat statbuf;
+
+@@ -437,7 +437,7 @@ int setup_timestamp(uid_t uid)
+
+ timestamp_time = timbuf.actime = timbuf.modtime = 1420070400; /* 1-1-2015 */
+ if (utime(daemon->timestamp_file, &timbuf) == 0 &&
+- (getuid() != 0 || chown(daemon->timestamp_file, uid, -1) == 0))
++ (!ent_pw || getuid() != 0 || chown(daemon->timestamp_file, ent_pw->pw_uid, -1) == 0))
+ goto check_and_exit;
+ }
+ }
+--
+2.1.0
+
--- /dev/null
+From 4c960fa90a975d20f75a1ecabd217247f1922c8f Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Wed, 4 Mar 2015 20:32:26 +0000
+Subject: [PATCH 56/98] New version of contrib/reverse-dns
+
+---
+ contrib/reverse-dns/README | 22 +++---
+ contrib/reverse-dns/reverse_replace.sh | 131 ++++++++++++++++++++++++++++-----
+ 2 files changed, 125 insertions(+), 28 deletions(-)
+
+diff --git a/contrib/reverse-dns/README b/contrib/reverse-dns/README
+index f87eb77c4c22..2ec4df1f957e 100644
+--- a/contrib/reverse-dns/README
++++ b/contrib/reverse-dns/README
+@@ -1,18 +1,18 @@
+-Hi.\r
++The script reads stdin and replaces all IP addresses with names before\r
++outputting it again. IPs from private networks are reverse looked up\r
++via dns. Other IP adresses are searched for in the dnsmasq query log.\r
++This gives names (CNAMEs if I understand DNS correctly) that are closer\r
++to the name the client originally asked for then the names obtained by\r
++reverse lookup. Just run\r
+ \r
+-To translate my routers netstat-nat output into names that actually talk\r
+-to me I have started writing to simple shell scripts. They require \r
++netstat -n -4 | ./reverse_replace.sh \r
++\r
++to see what it does. It needs \r
+ \r
+ log-queries\r
+ log-facility=/var/log/dnsmasq.log\r
+ \r
+-to be set. With\r
+-\r
+-netstat-nat -n -4 | reverse_replace.sh \r
+-\r
+-I get retranslated output.\r
+-\r
+-Sincerely,\r
+-Joachim\r
++in the dnsmasq configuration.\r
+ \r
++The script runs on debian (with ash installed) and on busybox.\r
+ \r
+diff --git a/contrib/reverse-dns/reverse_replace.sh b/contrib/reverse-dns/reverse_replace.sh
+index a11c164b7f19..5b4aebd71456 100644
+--- a/contrib/reverse-dns/reverse_replace.sh
++++ b/contrib/reverse-dns/reverse_replace.sh
+@@ -1,28 +1,125 @@
+-#!/bin/bash
+-# $Id: reverse_replace.sh 4 2015-02-17 20:14:59Z jo $
++#!/bin/ash
++# $Id: reverse_replace.sh 18 2015-03-01 16:12:35Z jo $
+ #
+ # Usage e.g.: netstat -n -4 | reverse_replace.sh
+ # Parses stdin for IP4 addresses and replaces them
+-# with names retrieved by reverse_dns.sh
++# with names retrieved by parsing the dnsmasq log.
++# This currently only gives CNAMEs. But these
++# usually tell ou more than the mones from reverse
++# lookups.
++#
++# This has been tested on debian and asuswrt. Plese
++# report successful tests on other platforms.
++#
++# Author: Joachim Zobel <jz-2014@heute-morgen.de>
++# License: Consider this MIT style licensed. You can
++# do as you ike, but you must not remove my name.
+ #
+
+-DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
+-DNS=$DIR/reverse_dns.sh
++LOG=/var/log/dnsmasq.log
++MAX_LINES=15000
+
+-# sed regex
++# sed regex do match IPs
+ IP_regex='[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'
++# private IP ranges
++IP_private='\(^127\.\)\|\(^192\.168\.\)\|\(^10\.\)\|\(^172\.1[6-9]\.\)\|\(^172\.2[0-9]\.\)\|\(^172\.3[0-1]\.\)'
+
+-while read LINE; do
+- if grep --quiet $IP_regex <<< "$LINE"; then
+- IPs=`sed "s#.*\b\($IP_regex\)\b.*#\1 #g" <<< "$LINE"`
+- IPs=($IPs)
+- for IP in "${IPs[@]}"
+- do
+- NAME=`$DNS $IP`
+- # echo "$NAME is $IP";
+- LINE="${LINE/$IP/$NAME}"
+- done
++#######################################################################
++# Find Commands
++
++HOST=nslookup
++if type host > /dev/null 2>&1; then
++ # echo "No need for nslookup, host is there"
++ HOST=host
++fi
++
++#######################################################################
++# Functions
++
++# Use shell variables for an (IP) lookup table
++create_lookup_table()
++{
++ # Parse log into lookup table
++ local CMDS="$( tail -"$MAX_LINES" "$LOG" | \
++ grep " is $IP_regex" | \
++ sed "s#.* \([^ ]*\) is \($IP_regex\).*#set_val \2 \1;#" )"
++
++ local IFS='
++'
++ for CMD in $CMDS
++ do
++ eval $CMD
++ done
++}
++
++set_val()
++{
++ local _IP=$(echo $1 | tr . _)
++ local KEY="__IP__$_IP"
++ eval "$KEY"=$2
++}
++
++get_val()
++{
++ local _IP=$(echo $1 | tr . _)
++ local KEY="__IP__$_IP"
++ eval echo -n '${'"$KEY"'}'
++}
++
++dns_lookup()
++{
++ local IP=$1
++
++ local RTN="$($HOST $IP | \
++ sed 's#\s\+#\n#g' | \
++ grep -v '^$' | \
++ tail -1 | tr -d '\n' | \
++ sed 's#\.$##')"
++ if echo $RTN | grep -q NXDOMAIN; then
++ echo -n $IP
++ else
++ echo -n "$RTN"
++ fi
++}
++
++reverse_dns()
++{
++ local IP=$1
++
++ # Skip if it is not an IP
++ if ! echo $IP | grep -q "^$IP_regex$"; then
++ echo -n $IP
++ return
++ fi
++
++ # Do a dns lookup, if it is a local IP
++ if echo $IP | grep -q $IP_private; then
++ dns_lookup $IP
++ return
+ fi
++
++ local NAME="$(get_val $IP)"
++
++ if [ -z "$NAME" ]; then
++ echo -n $IP
++ else
++ echo -n $NAME
++ fi
++}
++
++#######################################################################
++# Main
++create_lookup_table
++
++while read LINE; do
++ for IP in $(echo "$LINE" | \
++ sed "s#\b\($IP_regex\)\b#\n\1\n#g" | \
++ grep $IP_regex)
++ do
++ NAME=`reverse_dns $IP `
++ # echo "$NAME $IP"
++ LINE=`echo "$LINE" | sed "s#$IP#$NAME#" `
++ done
+ echo $LINE
+-done < /dev/stdin
++done
+
+--
+2.1.0
+
--- /dev/null
+From 360f2513ab12a9bf1e262d388dd2ea8a566590a3 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sat, 7 Mar 2015 18:28:06 +0000
+Subject: [PATCH 57/98] Tweak DNSSEC timestamp code to create file later,
+ removing need to chown it.
+
+---
+ man/dnsmasq.8 | 3 ++-
+ src/dnsmasq.c | 35 ++++++++++++++++++++++-------------
+ src/dnsmasq.h | 3 ++-
+ src/dnssec.c | 18 ++++++++++--------
+ 4 files changed, 36 insertions(+), 23 deletions(-)
+
+diff --git a/man/dnsmasq.8 b/man/dnsmasq.8
+index 097e7d75145c..2db780d90987 100644
+--- a/man/dnsmasq.8
++++ b/man/dnsmasq.8
+@@ -678,7 +678,8 @@ which have not been throughly checked.
+ Enables an alternative way of checking the validity of the system time for DNSSEC (see --dnssec-no-timecheck). In this case, the
+ system time is considered to be valid once it becomes later than the timestamp on the specified file. The file is created and
+ its timestamp set automatically by dnsmasq. The file must be stored on a persistent filesystem, so that it and its mtime are carried
+-over system restarts.
++over system restarts. The timestamp file is created after dnsmasq has dropped root, so it must be in a location writable by the
++unprivileged user that dnsmasq runs as.
+ .TP
+ .B --proxy-dnssec
+ Copy the DNSSEC Authenticated Data bit from upstream servers to downstream clients and cache it. This is an
+diff --git a/src/dnsmasq.c b/src/dnsmasq.c
+index 9e05c0e31569..f3e5bcffec4f 100644
+--- a/src/dnsmasq.c
++++ b/src/dnsmasq.c
+@@ -58,9 +58,6 @@ int main (int argc, char **argv)
+ struct dhcp_context *context;
+ struct dhcp_relay *relay;
+ #endif
+-#ifdef HAVE_DNSSEC
+- int badtime;
+-#endif
+
+ #ifdef LOCALEDIR
+ setlocale(LC_ALL, "");
+@@ -156,10 +153,10 @@ int main (int argc, char **argv)
+ {
+ #ifdef HAVE_DNSSEC
+ if (!daemon->ds)
+- die(_("No trust anchors provided for DNSSEC"), NULL, EC_BADCONF);
++ die(_("no trust anchors provided for DNSSEC"), NULL, EC_BADCONF);
+
+ if (daemon->cachesize < CACHESIZ)
+- die(_("Cannot reduce cache size from default when DNSSEC enabled"), NULL, EC_BADCONF);
++ die(_("cannot reduce cache size from default when DNSSEC enabled"), NULL, EC_BADCONF);
+ #else
+ die(_("DNSSEC not available: set HAVE_DNSSEC in src/config.h"), NULL, EC_BADCONF);
+ #endif
+@@ -172,10 +169,10 @@ int main (int argc, char **argv)
+
+ #ifdef HAVE_CONNTRACK
+ if (option_bool(OPT_CONNTRACK) && (daemon->query_port != 0 || daemon->osport))
+- die (_("Cannot use --conntrack AND --query-port"), NULL, EC_BADCONF);
++ die (_("cannot use --conntrack AND --query-port"), NULL, EC_BADCONF);
+ #else
+ if (option_bool(OPT_CONNTRACK))
+- die(_("Conntrack support not available: set HAVE_CONNTRACK in src/config.h"), NULL, EC_BADCONF);
++ die(_("conntrack support not available: set HAVE_CONNTRACK in src/config.h"), NULL, EC_BADCONF);
+ #endif
+
+ #ifdef HAVE_SOLARIS_NETWORK
+@@ -195,7 +192,7 @@ int main (int argc, char **argv)
+
+ #ifndef HAVE_LOOP
+ if (option_bool(OPT_LOOP_DETECT))
+- die(_("Loop detection not available: set HAVE_LOOP in src/config.h"), NULL, EC_BADCONF);
++ die(_("loop detection not available: set HAVE_LOOP in src/config.h"), NULL, EC_BADCONF);
+ #endif
+
+ now = dnsmasq_time();
+@@ -373,10 +370,6 @@ int main (int argc, char **argv)
+ if (baduser)
+ die(_("unknown user or group: %s"), baduser, EC_BADCONF);
+
+-#ifdef HAVE_DNSSEC
+- badtime = setup_timestamp(ent_pw);
+-#endif
+-
+ /* implement group defaults, "dip" if available, or group associated with uid */
+ if (!daemon->group_set && !gp)
+ {
+@@ -693,10 +686,23 @@ int main (int argc, char **argv)
+ #ifdef HAVE_DNSSEC
+ if (option_bool(OPT_DNSSEC_VALID))
+ {
++ int rc;
++
++ /* Delay creating the timestamp file until here, after we've changed user, so that
++ it has the correct owner to allow updating the mtime later.
++ This means we have to report fatal errors via the pipe. */
++ if ((rc = setup_timestamp()) == -1)
++ {
++ send_event(err_pipe[1], EVENT_TIME_ERR, errno, daemon->timestamp_file);
++ _exit(0);
++ }
++
+ my_syslog(LOG_INFO, _("DNSSEC validation enabled"));
++
+ if (option_bool(OPT_DNSSEC_TIME))
+ my_syslog(LOG_INFO, _("DNSSEC signature timestamps not checked until first cache reload"));
+- if (badtime)
++
++ if (rc == 1)
+ my_syslog(LOG_INFO, _("DNSSEC signature timestamps not checked until system time valid"));
+ }
+ #endif
+@@ -1170,6 +1176,9 @@ static void fatal_event(struct event_desc *ev, char *msg)
+
+ case EVENT_TFTP_ERR:
+ die(_("TFTP directory %s inaccessible: %s"), msg, EC_FILE);
++
++ case EVENT_TIME_ERR:
++ die(_("cannot create timestamp file %s: %s" ), msg, EC_BADCONF);
+ }
+ }
+
+diff --git a/src/dnsmasq.h b/src/dnsmasq.h
+index a451cb4dd03c..fc7259881358 100644
+--- a/src/dnsmasq.h
++++ b/src/dnsmasq.h
+@@ -167,6 +167,7 @@ struct event_desc {
+ #define EVENT_INIT 21
+ #define EVENT_NEWADDR 22
+ #define EVENT_NEWROUTE 23
++#define EVENT_TIME_ERR 24
+
+ /* Exit codes. */
+ #define EC_GOOD 0
+@@ -1152,7 +1153,7 @@ int dnssec_chase_cname(time_t now, struct dns_header *header, size_t plen, char
+ int dnskey_keytag(int alg, int flags, unsigned char *rdata, int rdlen);
+ size_t filter_rrsigs(struct dns_header *header, size_t plen);
+ unsigned char* hash_questions(struct dns_header *header, size_t plen, char *name);
+-int setup_timestamp(struct passwd *ent_pw);
++int setup_timestamp(void);
+
+ /* util.c */
+ void rand_init(void);
+diff --git a/src/dnssec.c b/src/dnssec.c
+index c60eacf73c6b..ad0d6f072ba2 100644
+--- a/src/dnssec.c
++++ b/src/dnssec.c
+@@ -397,18 +397,21 @@ static int serial_compare_32(unsigned long s1, unsigned long s2)
+
+ /* Called at startup. If the timestamp file is configured and exists, put its mtime on
+ timestamp_time. If it doesn't exist, create it, and set the mtime to 1-1-2015.
+- Change the ownership to the user we'll be running as, so that we can update the mtime.
++ return -1 -> Cannot create file.
++ 0 -> not using timestamp, or timestamp exists and is in past.
++ 1 -> timestamp exists and is in future.
+ */
++
+ static time_t timestamp_time;
+ static int back_to_the_future;
+
+-int setup_timestamp(struct passwd *ent_pw)
++int setup_timestamp(void)
+ {
+ struct stat statbuf;
+
+ back_to_the_future = 0;
+
+- if (!option_bool(OPT_DNSSEC_VALID) || !daemon->timestamp_file)
++ if (!daemon->timestamp_file)
+ return 0;
+
+ if (stat(daemon->timestamp_file, &statbuf) != -1)
+@@ -428,7 +431,8 @@ int setup_timestamp(struct passwd *ent_pw)
+
+ if (errno == ENOENT)
+ {
+- int fd = open(daemon->timestamp_file, O_WRONLY | O_CREAT | O_NONBLOCK, 0666);
++ /* NB. for explanation of O_EXCL flag, see comment on pidfile in dnsmasq.c */
++ int fd = open(daemon->timestamp_file, O_WRONLY | O_CREAT | O_NONBLOCK | O_EXCL, 0666);
+ if (fd != -1)
+ {
+ struct utimbuf timbuf;
+@@ -436,14 +440,12 @@ int setup_timestamp(struct passwd *ent_pw)
+ close(fd);
+
+ timestamp_time = timbuf.actime = timbuf.modtime = 1420070400; /* 1-1-2015 */
+- if (utime(daemon->timestamp_file, &timbuf) == 0 &&
+- (!ent_pw || getuid() != 0 || chown(daemon->timestamp_file, ent_pw->pw_uid, -1) == 0))
++ if (utime(daemon->timestamp_file, &timbuf) == 0)
+ goto check_and_exit;
+ }
+ }
+
+- die(_("Cannot create timestamp file %s: %s" ), daemon->timestamp_file, EC_BADCONF);
+- return 0;
++ return -1;
+ }
+
+ /* Check whether today/now is between date_start and date_end */
+--
+2.1.0
+
--- /dev/null
+From ff841ebf5a5d6864ff48571f607c32ce80dbb75a Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Wed, 11 Mar 2015 21:36:30 +0000
+Subject: [PATCH 58/98] Fix boilerplate code for re-running system calls on
+ EINTR and EAGAIN etc.
+
+The nasty code with static variable in retry_send() which
+avoids looping forever needs to be called on success of the syscall,
+to reset the static variable.
+---
+ src/bpf.c | 2 +-
+ src/dhcp.c | 2 +-
+ src/dhcp6.c | 6 +++---
+ src/dnsmasq.c | 35 +++++++++++++++++----------------
+ src/dnsmasq.h | 2 +-
+ src/forward.c | 41 ++++++++++++++++++--------------------
+ src/ipset.c | 8 ++++----
+ src/loop.c | 5 +++--
+ src/netlink.c | 8 ++++----
+ src/radv.c | 5 +++--
+ src/util.c | 63 ++++++++++++++++++++++++++++++++++-------------------------
+ 11 files changed, 93 insertions(+), 84 deletions(-)
+
+diff --git a/src/bpf.c b/src/bpf.c
+index 997d87421bed..a066641f969f 100644
+--- a/src/bpf.c
++++ b/src/bpf.c
+@@ -359,7 +359,7 @@ void send_via_bpf(struct dhcp_packet *mess, size_t len,
+ iov[3].iov_base = mess;
+ iov[3].iov_len = len;
+
+- while (writev(daemon->dhcp_raw_fd, iov, 4) == -1 && retry_send());
++ while (retry_send(writev(daemon->dhcp_raw_fd, iov, 4)));
+ }
+
+ #endif /* defined(HAVE_BSD_NETWORK) && defined(HAVE_DHCP) */
+diff --git a/src/dhcp.c b/src/dhcp.c
+index f29be9b489a7..5c3089ab94ff 100644
+--- a/src/dhcp.c
++++ b/src/dhcp.c
+@@ -443,7 +443,7 @@ void dhcp_packet(time_t now, int pxe_fd)
+ setsockopt(fd, IPPROTO_IP, IP_BOUND_IF, &iface_index, sizeof(iface_index));
+ #endif
+
+- while(sendmsg(fd, &msg, 0) == -1 && retry_send());
++ while(retry_send(sendmsg(fd, &msg, 0)));
+ }
+
+ /* check against secondary interface addresses */
+diff --git a/src/dhcp6.c b/src/dhcp6.c
+index c7144f5fee7c..ee2aa5d3bf3c 100644
+--- a/src/dhcp6.c
++++ b/src/dhcp6.c
+@@ -225,9 +225,9 @@ void dhcp6_packet(time_t now)
+ if (port != 0)
+ {
+ from.sin6_port = htons(port);
+- while (sendto(daemon->dhcp6fd, daemon->outpacket.iov_base, save_counter(0),
+- 0, (struct sockaddr *)&from, sizeof(from)) == -1 &&
+- retry_send());
++ while (retry_send(sendto(daemon->dhcp6fd, daemon->outpacket.iov_base,
++ save_counter(0), 0, (struct sockaddr *)&from,
++ sizeof(from))));
+ }
+ }
+
+diff --git a/src/dnsmasq.c b/src/dnsmasq.c
+index f3e5bcffec4f..b784951950d4 100644
+--- a/src/dnsmasq.c
++++ b/src/dnsmasq.c
+@@ -444,7 +444,7 @@ int main (int argc, char **argv)
+ char *msg;
+
+ /* close our copy of write-end */
+- close(err_pipe[1]);
++ while (retry_send(close(err_pipe[1])));
+
+ /* check for errors after the fork */
+ if (read_event(err_pipe[0], &ev, &msg))
+@@ -453,7 +453,7 @@ int main (int argc, char **argv)
+ _exit(EC_GOOD);
+ }
+
+- close(err_pipe[0]);
++ while (retry_send(close(err_pipe[0])));
+
+ /* NO calls to die() from here on. */
+
+@@ -505,10 +505,12 @@ int main (int argc, char **argv)
+ {
+ if (!read_write(fd, (unsigned char *)daemon->namebuff, strlen(daemon->namebuff), 0))
+ err = 1;
+-
+- while (!err && close(fd) == -1)
+- if (!retry_send())
+- err = 1;
++ else
++ {
++ while (retry_send(close(fd)));
++ if (errno != 0)
++ err = 1;
++ }
+ }
+
+ if (err)
+@@ -813,7 +815,7 @@ int main (int argc, char **argv)
+
+ /* finished start-up - release original process */
+ if (err_pipe[1] != -1)
+- close(err_pipe[1]);
++ while (retry_send(close(err_pipe[1])));
+
+ if (daemon->port != 0)
+ check_servers();
+@@ -1319,7 +1321,7 @@ static void async_event(int pipe, time_t now)
+ do {
+ helper_write();
+ } while (!helper_buf_empty() || do_script_run(now));
+- close(daemon->helperfd);
++ while (retry_send(close(daemon->helperfd)));
+ }
+ #endif
+
+@@ -1544,7 +1546,7 @@ static void check_dns_listeners(fd_set *set, time_t now)
+
+ if (getsockname(confd, (struct sockaddr *)&tcp_addr, &tcp_len) == -1)
+ {
+- close(confd);
++ while (retry_send(close(confd)));
+ continue;
+ }
+
+@@ -1609,7 +1611,7 @@ static void check_dns_listeners(fd_set *set, time_t now)
+ if (!client_ok)
+ {
+ shutdown(confd, SHUT_RDWR);
+- close(confd);
++ while (retry_send(close(confd)));
+ }
+ #ifndef NO_FORK
+ else if (!option_bool(OPT_DEBUG) && (p = fork()) != 0)
+@@ -1624,7 +1626,7 @@ static void check_dns_listeners(fd_set *set, time_t now)
+ break;
+ }
+ }
+- close(confd);
++ while (retry_send(close(confd)));
+
+ /* The child can use up to TCP_MAX_QUERIES ids, so skip that many. */
+ daemon->log_id += TCP_MAX_QUERIES;
+@@ -1669,7 +1671,7 @@ static void check_dns_listeners(fd_set *set, time_t now)
+ buff = tcp_request(confd, now, &tcp_addr, netmask, auth_dns);
+
+ shutdown(confd, SHUT_RDWR);
+- close(confd);
++ while (retry_send(close(confd)));
+
+ if (buff)
+ free(buff);
+@@ -1678,7 +1680,7 @@ static void check_dns_listeners(fd_set *set, time_t now)
+ if (s->tcpfd != -1)
+ {
+ shutdown(s->tcpfd, SHUT_RDWR);
+- close(s->tcpfd);
++ while (retry_send(close(s->tcpfd)));
+ }
+ #ifndef NO_FORK
+ if (!option_bool(OPT_DEBUG))
+@@ -1756,9 +1758,8 @@ int icmp_ping(struct in_addr addr)
+ j = (j & 0xffff) + (j >> 16);
+ packet.icmp.icmp_cksum = (j == 0xffff) ? j : ~j;
+
+- while (sendto(fd, (char *)&packet.icmp, sizeof(struct icmp), 0,
+- (struct sockaddr *)&saddr, sizeof(saddr)) == -1 &&
+- retry_send());
++ while (retry_send(sendto(fd, (char *)&packet.icmp, sizeof(struct icmp), 0,
++ (struct sockaddr *)&saddr, sizeof(saddr))));
+
+ for (now = start = dnsmasq_time();
+ difftime(now, start) < (float)PING_WAIT;)
+@@ -1820,7 +1821,7 @@ int icmp_ping(struct in_addr addr)
+ }
+
+ #if defined(HAVE_LINUX_NETWORK) || defined(HAVE_SOLARIS_NETWORK)
+- close(fd);
++ while (retry_send(close(fd)));
+ #else
+ opt = 1;
+ setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &opt, sizeof(opt));
+diff --git a/src/dnsmasq.h b/src/dnsmasq.h
+index fc7259881358..de95d0e875e3 100644
+--- a/src/dnsmasq.h
++++ b/src/dnsmasq.h
+@@ -1177,7 +1177,7 @@ int is_same_net6(struct in6_addr *a, struct in6_addr *b, int prefixlen);
+ u64 addr6part(struct in6_addr *addr);
+ void setaddr6part(struct in6_addr *addr, u64 host);
+ #endif
+-int retry_send(void);
++int retry_send(ssize_t rc);
+ void prettyprint_time(char *buf, unsigned int t);
+ int prettyprint_addr(union mysockaddr *addr, char *buf);
+ int parse_hex(char *in, unsigned char *out, int maxlen,
+diff --git a/src/forward.c b/src/forward.c
+index 438e9fa490b8..7c0fa8da3fdf 100644
+--- a/src/forward.c
++++ b/src/forward.c
+@@ -103,15 +103,11 @@ int send_from(int fd, int nowild, char *packet, size_t len,
+ #endif
+ }
+
+- while (sendmsg(fd, &msg, 0) == -1)
++ while (retry_send(sendmsg(fd, &msg, 0)));
++
++ /* If interface is still in DAD, EINVAL results - ignore that. */
++ if (errno != 0 && errno != EINVAL)
+ {
+- if (retry_send())
+- continue;
+-
+- /* If interface is still in DAD, EINVAL results - ignore that. */
+- if (errno == EINVAL)
+- break;
+-
+ my_syslog(LOG_ERR, _("failed to send packet: %s"), strerror(errno));
+ return 0;
+ }
+@@ -297,9 +293,9 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
+ fd = forward->rfd4->fd;
+ }
+
+- while (sendto(fd, (char *)header, plen, 0,
+- &forward->sentto->addr.sa,
+- sa_len(&forward->sentto->addr)) == -1 && retry_send());
++ while (retry_send( sendto(fd, (char *)header, plen, 0,
++ &forward->sentto->addr.sa,
++ sa_len(&forward->sentto->addr))));
+
+ return 1;
+ }
+@@ -469,14 +465,12 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
+ #endif
+ }
+
+- if (sendto(fd, (char *)header, plen, 0,
+- &start->addr.sa,
+- sa_len(&start->addr)) == -1)
+- {
+- if (retry_send())
+- continue;
+- }
+- else
++ if (retry_send(sendto(fd, (char *)header, plen, 0,
++ &start->addr.sa,
++ sa_len(&start->addr))))
++ continue;
++
++ if (errno == 0)
+ {
+ /* Keep info in case we want to re-send this packet */
+ daemon->srv_save = start;
+@@ -932,7 +926,9 @@ void reply_query(int fd, int family, time_t now)
+
+ if (fd != -1)
+ {
+- while (sendto(fd, (char *)header, nn, 0, &server->addr.sa, sa_len(&server->addr)) == -1 && retry_send());
++ while (retry_send(sendto(fd, (char *)header, nn, 0,
++ &server->addr.sa,
++ sa_len(&server->addr))));
+ server->queries++;
+ }
+
+@@ -2228,8 +2224,9 @@ void resend_query()
+ else
+ return;
+
+- while(sendto(fd, daemon->packet, daemon->packet_len, 0,
+- &daemon->srv_save->addr.sa, sa_len(&daemon->srv_save->addr)) == -1 && retry_send());
++ while(retry_send(sendto(fd, daemon->packet, daemon->packet_len, 0,
++ &daemon->srv_save->addr.sa,
++ sa_len(&daemon->srv_save->addr))));
+ }
+ }
+
+diff --git a/src/ipset.c b/src/ipset.c
+index 8c5b72722371..a315e86bc7f4 100644
+--- a/src/ipset.c
++++ b/src/ipset.c
+@@ -121,7 +121,6 @@ static int new_add_to_ipset(const char *setname, const struct all_addr *ipaddr,
+ struct my_nlattr *nested[2];
+ uint8_t proto;
+ int addrsz = INADDRSZ;
+- ssize_t rc;
+
+ #ifdef HAVE_IPV6
+ if (af == AF_INET6)
+@@ -162,9 +161,10 @@ static int new_add_to_ipset(const char *setname, const struct all_addr *ipaddr,
+ nested[1]->nla_len = (void *)buffer + NL_ALIGN(nlh->nlmsg_len) - (void *)nested[1];
+ nested[0]->nla_len = (void *)buffer + NL_ALIGN(nlh->nlmsg_len) - (void *)nested[0];
+
+- while ((rc = sendto(ipset_sock, buffer, nlh->nlmsg_len, 0,
+- (struct sockaddr *)&snl, sizeof(snl))) == -1 && retry_send());
+- return rc;
++ while (retry_send(sendto(ipset_sock, buffer, nlh->nlmsg_len, 0,
++ (struct sockaddr *)&snl, sizeof(snl))));
++
++ return errno == 0 ? 0 : -1;
+ }
+
+
+diff --git a/src/loop.c b/src/loop.c
+index 565f7d8e58e0..c9ed075670de 100644
+--- a/src/loop.c
++++ b/src/loop.c
+@@ -45,8 +45,9 @@ void loop_send_probes()
+ fd = rfd->fd;
+ }
+
+- while (sendto(fd, daemon->packet, len, 0, &serv->addr.sa, sa_len(&serv->addr)) == -1 && retry_send());
+-
++ while (retry_send(sendto(fd, daemon->packet, len, 0,
++ &serv->addr.sa, sa_len(&serv->addr))));
++
+ free_rfd(rfd);
+ }
+ }
+diff --git a/src/netlink.c b/src/netlink.c
+index 10f94db25a14..753784dc20b4 100644
+--- a/src/netlink.c
++++ b/src/netlink.c
+@@ -169,10 +169,10 @@ int iface_enumerate(int family, void *parm, int (*callback)())
+ req.g.rtgen_family = family;
+
+ /* Don't block in recvfrom if send fails */
+- while((len = sendto(daemon->netlinkfd, (void *)&req, sizeof(req), 0,
+- (struct sockaddr *)&addr, sizeof(addr))) == -1 && retry_send());
+-
+- if (len == -1)
++ while(retry_send(sendto(daemon->netlinkfd, (void *)&req, sizeof(req), 0,
++ (struct sockaddr *)&addr, sizeof(addr))));
++
++ if (errno != 0)
+ return 0;
+
+ while (1)
+diff --git a/src/radv.c b/src/radv.c
+index 6da125b864ae..d0faddf8684a 100644
+--- a/src/radv.c
++++ b/src/radv.c
+@@ -479,8 +479,9 @@ static void send_ra(time_t now, int iface, char *iface_name, struct in6_addr *de
+ setsockopt(daemon->icmp6fd, IPPROTO_IPV6, IPV6_MULTICAST_IF, &iface, sizeof(iface));
+ }
+
+- while (sendto(daemon->icmp6fd, daemon->outpacket.iov_base, save_counter(0), 0,
+- (struct sockaddr *)&addr, sizeof(addr)) == -1 && retry_send());
++ while (retry_send(sendto(daemon->icmp6fd, daemon->outpacket.iov_base,
++ save_counter(0), 0, (struct sockaddr *)&addr,
++ sizeof(addr))));
+
+ }
+
+diff --git a/src/util.c b/src/util.c
+index 91d02410b13f..648bc4d4b428 100644
+--- a/src/util.c
++++ b/src/util.c
+@@ -569,17 +569,27 @@ void bump_maxfd(int fd, int *max)
+ *max = fd;
+ }
+
+-int retry_send(void)
++/* rc is return from sendto and friends.
++ Return 1 if we should retry.
++ Set errno to zero if we succeeded. */
++int retry_send(ssize_t rc)
+ {
++ static int retries = 0;
++ struct timespec waiter;
++
++ if (rc != -1)
++ {
++ retries = 0;
++ errno = 0;
++ return 0;
++ }
++
+ /* Linux kernels can return EAGAIN in perpetuity when calling
+ sendmsg() and the relevant interface has gone. Here we loop
+ retrying in EAGAIN for 1 second max, to avoid this hanging
+ dnsmasq. */
+
+- static int retries = 0;
+- struct timespec waiter;
+-
+- if (errno == EAGAIN || errno == EWOULDBLOCK)
++ if (errno == EAGAIN || errno == EWOULDBLOCK)
+ {
+ waiter.tv_sec = 0;
+ waiter.tv_nsec = 10000;
+@@ -587,13 +597,13 @@ int retry_send(void)
+ if (retries++ < 1000)
+ return 1;
+ }
+-
+- retries = 0;
+-
+- if (errno == EINTR)
+- return 1;
+-
+- return 0;
++
++ retries = 0;
++
++ if (errno == EINTR)
++ return 1;
++
++ return 0;
+ }
+
+ int read_write(int fd, unsigned char *packet, int size, int rw)
+@@ -602,22 +612,21 @@ int read_write(int fd, unsigned char *packet, int size, int rw)
+
+ for (done = 0; done < size; done += n)
+ {
+- retry:
+- if (rw)
+- n = read(fd, &packet[done], (size_t)(size - done));
+- else
+- n = write(fd, &packet[done], (size_t)(size - done));
+-
+- if (n == 0)
+- return 0;
+- else if (n == -1)
+- {
+- if (retry_send() || errno == ENOMEM || errno == ENOBUFS)
+- goto retry;
+- else
+- return 0;
+- }
++ do {
++ if (rw)
++ n = read(fd, &packet[done], (size_t)(size - done));
++ else
++ n = write(fd, &packet[done], (size_t)(size - done));
++
++ if (n == 0)
++ return 0;
++
++ } while (retry_send(n) || errno == ENOMEM || errno == ENOBUFS);
++
++ if (errno != 0)
++ return 0;
+ }
++
+ return 1;
+ }
+
+--
+2.1.0
+
--- /dev/null
+From 979fe86bc8693f660eddea232ae39cbbb50b294c Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Thu, 19 Mar 2015 22:50:22 +0000
+Subject: [PATCH 59/98] Make --address=/example.com/ equivalent to
+ --server=/example.com/
+
+---
+ man/dnsmasq.8 | 7 +++++--
+ src/network.c | 4 ++--
+ src/option.c | 2 --
+ 3 files changed, 7 insertions(+), 6 deletions(-)
+
+diff --git a/man/dnsmasq.8 b/man/dnsmasq.8
+index 2db780d90987..1f1dd7b69c53 100644
+--- a/man/dnsmasq.8
++++ b/man/dnsmasq.8
+@@ -460,7 +460,7 @@ but provides some syntactic sugar to make specifying address-to-name queries eas
+ is exactly equivalent to
+ .B --server=/3.2.1.in-addr.arpa/192.168.0.1
+ .TP
+-.B \-A, --address=/<domain>/[domain/]<ipaddr>
++.B \-A, --address=/<domain>/[domain/][<ipaddr>]
+ Specify an IP address to return for any host in the given domains.
+ Queries in the domains are never forwarded and always replied to
+ with the specified IP address which may be IPv4 or IPv6. To give
+@@ -472,7 +472,10 @@ domain specification works in the same was as for --server, with the
+ additional facility that /#/ matches any domain. Thus
+ --address=/#/1.2.3.4 will always return 1.2.3.4 for any query not
+ answered from /etc/hosts or DHCP and not sent to an upstream
+-nameserver by a more specific --server directive.
++nameserver by a more specific --server directive. As for --server,
++one or more domains with no address returns a no-such-domain answer, so
++--address=/example.com/ is equivalent to --server=/example.com/ and returns
++NXDOMAIN for example.com and all its subdomains.
+ .TP
+ .B --ipset=/<domain>/[domain/]<ipset>[,<ipset>]
+ Places the resolved IP addresses of queries for the specified domains
+diff --git a/src/network.c b/src/network.c
+index 7045253d467b..992f023c31de 100644
+--- a/src/network.c
++++ b/src/network.c
+@@ -1459,7 +1459,7 @@ void check_servers(void)
+ }
+ }
+
+- if (!(serv->flags & SERV_NO_REBIND))
++ if (!(serv->flags & SERV_NO_REBIND) && !(serv->flags & SERV_LITERAL_ADDRESS))
+ {
+ if (serv->flags & (SERV_HAS_DOMAIN | SERV_FOR_NODOTS | SERV_USE_RESOLV))
+ {
+@@ -1475,7 +1475,7 @@ void check_servers(void)
+ my_syslog(LOG_INFO, _("using local addresses only for %s %s"), s1, s2);
+ else if (serv->flags & SERV_USE_RESOLV)
+ my_syslog(LOG_INFO, _("using standard nameservers for %s %s"), s1, s2);
+- else if (!(serv->flags & SERV_LITERAL_ADDRESS))
++ else
+ my_syslog(LOG_INFO, _("using nameserver %s#%d for %s %s"), daemon->namebuff, port, s1, s2);
+ }
+ #ifdef HAVE_LOOP
+diff --git a/src/option.c b/src/option.c
+index eace40bb566c..3009eb545fde 100644
+--- a/src/option.c
++++ b/src/option.c
+@@ -2284,8 +2284,6 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
+ {
+ if (!(newlist->flags & SERV_NO_REBIND))
+ newlist->flags |= SERV_NO_ADDR; /* no server */
+- if (newlist->flags & SERV_LITERAL_ADDRESS)
+- ret_err(gen_err);
+ }
+
+ else if (strcmp(arg, "#") == 0)
+--
+2.1.0
+
--- /dev/null
+From 65c721200023ef0023114459a8d12f8b0a24cfd8 Mon Sep 17 00:00:00 2001
+From: Lung-Pin Chang <changlp@cs.nctu.edu.tw>
+Date: Thu, 19 Mar 2015 23:22:21 +0000
+Subject: [PATCH 60/98] dhcp: set outbound interface via cmsg in unicast reply
+
+ If multiple routes to the same network exist, Linux blindly picks
+ the first interface (route) based on destination address, which might not be
+ the one we're actually offering leases. Rather than relying on this,
+ always set the interface for outgoing unicast DHCP packets.
+---
+ src/dhcp.c | 45 +++++++++++++++++++++++++--------------------
+ 1 file changed, 25 insertions(+), 20 deletions(-)
+
+diff --git a/src/dhcp.c b/src/dhcp.c
+index 5c3089ab94ff..f1f43f8d8f90 100644
+--- a/src/dhcp.c
++++ b/src/dhcp.c
+@@ -376,10 +376,9 @@ void dhcp_packet(time_t now, int pxe_fd)
+ }
+ }
+ #if defined(HAVE_LINUX_NETWORK)
+- else if ((ntohs(mess->flags) & 0x8000) || mess->hlen == 0 ||
+- mess->hlen > sizeof(ifr.ifr_addr.sa_data) || mess->htype == 0)
++ else
+ {
+- /* broadcast to 255.255.255.255 (or mac address invalid) */
++ /* fill cmsg for outbound interface (both broadcast & unicast) */
+ struct in_pktinfo *pkt;
+ msg.msg_control = control_u.control;
+ msg.msg_controllen = sizeof(control_u);
+@@ -389,23 +388,29 @@ void dhcp_packet(time_t now, int pxe_fd)
+ pkt->ipi_spec_dst.s_addr = 0;
+ msg.msg_controllen = cmptr->cmsg_len = CMSG_LEN(sizeof(struct in_pktinfo));
+ cmptr->cmsg_level = IPPROTO_IP;
+- cmptr->cmsg_type = IP_PKTINFO;
+- dest.sin_addr.s_addr = INADDR_BROADCAST;
+- dest.sin_port = htons(daemon->dhcp_client_port);
+- }
+- else
+- {
+- /* unicast to unconfigured client. Inject mac address direct into ARP cache.
+- struct sockaddr limits size to 14 bytes. */
+- dest.sin_addr = mess->yiaddr;
+- dest.sin_port = htons(daemon->dhcp_client_port);
+- memcpy(&arp_req.arp_pa, &dest, sizeof(struct sockaddr_in));
+- arp_req.arp_ha.sa_family = mess->htype;
+- memcpy(arp_req.arp_ha.sa_data, mess->chaddr, mess->hlen);
+- /* interface name already copied in */
+- arp_req.arp_flags = ATF_COM;
+- if (ioctl(daemon->dhcpfd, SIOCSARP, &arp_req) == -1)
+- my_syslog(MS_DHCP | LOG_ERR, _("ARP-cache injection failed: %s"), strerror(errno));
++ cmptr->cmsg_type = IP_PKTINFO;
++
++ if ((ntohs(mess->flags) & 0x8000) || mess->hlen == 0 ||
++ mess->hlen > sizeof(ifr.ifr_addr.sa_data) || mess->htype == 0)
++ {
++ /* broadcast to 255.255.255.255 (or mac address invalid) */
++ dest.sin_addr.s_addr = INADDR_BROADCAST;
++ dest.sin_port = htons(daemon->dhcp_client_port);
++ }
++ else
++ {
++ /* unicast to unconfigured client. Inject mac address direct into ARP cache.
++ struct sockaddr limits size to 14 bytes. */
++ dest.sin_addr = mess->yiaddr;
++ dest.sin_port = htons(daemon->dhcp_client_port);
++ memcpy(&arp_req.arp_pa, &dest, sizeof(struct sockaddr_in));
++ arp_req.arp_ha.sa_family = mess->htype;
++ memcpy(arp_req.arp_ha.sa_data, mess->chaddr, mess->hlen);
++ /* interface name already copied in */
++ arp_req.arp_flags = ATF_COM;
++ if (ioctl(daemon->dhcpfd, SIOCSARP, &arp_req) == -1)
++ my_syslog(MS_DHCP | LOG_ERR, _("ARP-cache injection failed: %s"), strerror(errno));
++ }
+ }
+ #elif defined(HAVE_SOLARIS_NETWORK)
+ else if ((ntohs(mess->flags) & 0x8000) || mess->hlen != ETHER_ADDR_LEN || mess->htype != ARPHRD_ETHER)
+--
+2.1.0
+
--- /dev/null
+From 8805283088d670baecb92569252c01cf754cda51 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Thu, 26 Mar 2015 21:15:43 +0000
+Subject: [PATCH 61/98] Don't fail DNSSEC when a signed CNAME dangles into an
+ unsigned zone.
+
+---
+ src/dnssec.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/dnssec.c b/src/dnssec.c
+index ad0d6f072ba2..db5c768bd751 100644
+--- a/src/dnssec.c
++++ b/src/dnssec.c
+@@ -2032,7 +2032,8 @@ int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, ch
+ /* NXDOMAIN or NODATA reply, prove that (name, class1, type1) can't exist */
+ /* First marshall the NSEC records, if we've not done it previously */
+ if (!nsec_type && !(nsec_type = find_nsec_records(header, plen, &nsecs, &nsec_count, qclass)))
+- return STAT_BOGUS; /* No NSECs */
++ return STAT_NO_SIG; /* No NSECs, this is probably a dangling CNAME pointing into
++ an unsigned zone. Return STAT_NO_SIG to cause this to be proved. */
+
+ /* Get name of missing answer */
+ if (!extract_name(header, plen, &qname, name, 1, 0))
+--
+2.1.0
+
--- /dev/null
+From 150162bc37170a6edae9d488435e836b1e4e3a4e Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Fri, 27 Mar 2015 09:58:26 +0000
+Subject: [PATCH 62/98] Return SERVFAIL when validation abandoned.
+
+---
+ src/forward.c | 11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
+
+diff --git a/src/forward.c b/src/forward.c
+index 7c0fa8da3fdf..985814c3aec5 100644
+--- a/src/forward.c
++++ b/src/forward.c
+@@ -663,6 +663,7 @@ static size_t process_reply(struct dns_header *header, time_t now, struct server
+ header->ancount = htons(0);
+ header->nscount = htons(0);
+ header->arcount = htons(0);
++ header->hb3 &= ~HB3_TC;
+ }
+
+ /* the bogus-nxdomain stuff, doctor and NXDOMAIN->NODATA munging can all elide
+@@ -991,7 +992,10 @@ void reply_query(int fd, int family, time_t now)
+ char *result;
+
+ if (forward->work_counter == 0)
+- result = "ABANDONED";
++ {
++ result = "ABANDONED";
++ status = STAT_BOGUS;
++ }
+ else
+ result = (status == STAT_SECURE ? "SECURE" : (status == STAT_INSECURE ? "INSECURE" : "BOGUS"));
+
+@@ -1938,7 +1942,10 @@ unsigned char *tcp_request(int confd, time_t now,
+ char *result;
+
+ if (keycount == 0)
+- result = "ABANDONED";
++ {
++ result = "ABANDONED";
++ status = STAT_BOGUS;
++ }
+ else
+ result = (status == STAT_SECURE ? "SECURE" : (status == STAT_INSECURE ? "INSECURE" : "BOGUS"));
+
+--
+2.1.0
+
--- /dev/null
+From 0b8a5a30a77331974ba24a04e43e720585dfbc61 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Fri, 27 Mar 2015 11:44:55 +0000
+Subject: [PATCH 63/98] Protect against broken DNSSEC upstreams.
+
+---
+ src/dnssec.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/src/dnssec.c b/src/dnssec.c
+index db5c768bd751..14bae7e9bf75 100644
+--- a/src/dnssec.c
++++ b/src/dnssec.c
+@@ -1177,7 +1177,7 @@ int dnssec_validate_by_ds(time_t now, struct dns_header *header, size_t plen, ch
+ STAT_NO_DS It's proved there's no DS here.
+ STAT_NO_NS It's proved there's no DS _or_ NS here.
+ STAT_BOGUS no DS in reply or not signed, fails validation, bad packet.
+- STAT_NEED_DNSKEY DNSKEY records to validate a DS not found, name in keyname
++ STAT_NEED_KEY DNSKEY records to validate a DS not found, name in keyname
+ */
+
+ int dnssec_validate_ds(time_t now, struct dns_header *header, size_t plen, char *name, char *keyname, int class)
+@@ -1208,7 +1208,10 @@ int dnssec_validate_ds(time_t now, struct dns_header *header, size_t plen, char
+ if (!(p = skip_section(p, ntohs(header->ancount), header, plen)))
+ val = STAT_BOGUS;
+
+- if (val == STAT_BOGUS)
++ /* If the key needed to validate the DS is on the same domain as the DS, we'll
++ loop getting nowhere. Stop that now. This can happen of the DS answer comes
++ from the DS's zone, and not the parent zone. */
++ if (val == STAT_BOGUS || (val == STAT_NEED_KEY && hostname_isequal(name, keyname)))
+ {
+ log_query(F_NOEXTRA | F_UPSTREAM, name, NULL, "BOGUS DS");
+ return STAT_BOGUS;
+--
+2.1.0
+
--- /dev/null
+From 1e153945def3c50d1e59ceea6a768db0ac770f98 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sat, 28 Mar 2015 21:34:07 +0000
+Subject: [PATCH 64/98] DNSSEC fix for non-ascii characters in labels.
+
+---
+ src/dnssec.c | 34 +++++++++++++++++-----------------
+ src/rfc1035.c | 5 +++--
+ 2 files changed, 20 insertions(+), 19 deletions(-)
+
+diff --git a/src/dnssec.c b/src/dnssec.c
+index 14bae7e9bf75..8bd5294ce773 100644
+--- a/src/dnssec.c
++++ b/src/dnssec.c
+@@ -552,7 +552,7 @@ static int get_rdata(struct dns_header *header, size_t plen, unsigned char *end,
+
+ (*desc)++;
+
+- if (d == 0 && extract_name(header, plen, p, buff, 1, 0))
++ if (d == 0 && extract_name(header, plen, p, buff, 2, 0))
+ /* domain-name, canonicalise */
+ return to_wire(buff);
+ else
+@@ -811,7 +811,7 @@ static int validate_rrset(time_t now, struct dns_header *header, size_t plen, in
+ GETLONG(sig_inception, p);
+ GETSHORT(key_tag, p);
+
+- if (!extract_name(header, plen, &p, keyname, 1, 0))
++ if (!extract_name(header, plen, &p, keyname, 2, 0))
+ return STAT_BOGUS;
+
+ /* RFC 4035 5.3.1 says that the Signer's Name field MUST equal
+@@ -866,7 +866,7 @@ static int validate_rrset(time_t now, struct dns_header *header, size_t plen, in
+ u16 len, *dp;
+
+ p = rrset[i];
+- if (!extract_name(header, plen, &p, name, 1, 10))
++ if (!extract_name(header, plen, &p, name, 2, 10))
+ return STAT_BOGUS;
+
+ name_start = name;
+@@ -923,7 +923,7 @@ static int validate_rrset(time_t now, struct dns_header *header, size_t plen, in
+
+ /* namebuff used for workspace above, restore to leave unchanged on exit */
+ p = (unsigned char*)(rrset[0]);
+- extract_name(header, plen, &p, name, 1, 0);
++ extract_name(header, plen, &p, name, 2, 0);
+
+ if (key)
+ {
+@@ -963,7 +963,7 @@ int dnssec_validate_by_ds(time_t now, struct dns_header *header, size_t plen, ch
+ struct all_addr a;
+
+ if (ntohs(header->qdcount) != 1 ||
+- !extract_name(header, plen, &p, name, 1, 4))
++ !extract_name(header, plen, &p, name, 2, 4))
+ return STAT_BOGUS;
+
+ GETSHORT(qtype, p);
+@@ -1202,7 +1202,7 @@ int dnssec_validate_ds(time_t now, struct dns_header *header, size_t plen, char
+ val = STAT_BOGUS;
+
+ p = (unsigned char *)(header+1);
+- extract_name(header, plen, &p, name, 1, 4);
++ extract_name(header, plen, &p, name, 2, 4);
+ p += 4; /* qtype, qclass */
+
+ if (!(p = skip_section(p, ntohs(header->ancount), header, plen)))
+@@ -1419,12 +1419,12 @@ static int prove_non_existence_nsec(struct dns_header *header, size_t plen, unsi
+ for (i = 0; i < nsec_count; i++)
+ {
+ p = nsecs[i];
+- if (!extract_name(header, plen, &p, workspace1, 1, 10))
++ if (!extract_name(header, plen, &p, workspace1, 2, 10))
+ return STAT_BOGUS;
+ p += 8; /* class, type, TTL */
+ GETSHORT(rdlen, p);
+ psave = p;
+- if (!extract_name(header, plen, &p, workspace2, 1, 10))
++ if (!extract_name(header, plen, &p, workspace2, 2, 10))
+ return STAT_BOGUS;
+
+ rc = hostname_cmp(workspace1, name);
+@@ -1553,7 +1553,7 @@ static int check_nsec3_coverage(struct dns_header *header, size_t plen, int dige
+ for (i = 0; i < nsec_count; i++)
+ if ((p = nsecs[i]))
+ {
+- if (!extract_name(header, plen, &p, workspace1, 1, 0) ||
++ if (!extract_name(header, plen, &p, workspace1, 2, 0) ||
+ !(base32_len = base32_decode(workspace1, (unsigned char *)workspace2)))
+ return 0;
+
+@@ -1730,7 +1730,7 @@ static int prove_non_existence_nsec3(struct dns_header *header, size_t plen, uns
+ for (i = 0; i < nsec_count; i++)
+ if ((p = nsecs[i]))
+ {
+- if (!extract_name(header, plen, &p, workspace1, 1, 0) ||
++ if (!extract_name(header, plen, &p, workspace1, 2, 0) ||
+ !(base32_len = base32_decode(workspace1, (unsigned char *)workspace2)))
+ return STAT_BOGUS;
+
+@@ -1796,7 +1796,7 @@ int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, ch
+
+ qname = p1 = (unsigned char *)(header+1);
+
+- if (!extract_name(header, plen, &p1, name, 1, 4))
++ if (!extract_name(header, plen, &p1, name, 2, 4))
+ return STAT_BOGUS;
+
+ GETSHORT(qtype, p1);
+@@ -1836,7 +1836,7 @@ int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, ch
+ qname = p1;
+
+ /* looped CNAMES */
+- if (!cname_count-- || !extract_name(header, plen, &p1, name, 1, 0))
++ if (!cname_count-- || !extract_name(header, plen, &p1, name, 2, 0))
+ return STAT_BOGUS;
+
+ p1 = ans_start;
+@@ -1857,7 +1857,7 @@ int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, ch
+
+ for (p1 = ans_start, i = 0; i < ntohs(header->ancount) + ntohs(header->nscount); i++)
+ {
+- if (!extract_name(header, plen, &p1, name, 1, 10))
++ if (!extract_name(header, plen, &p1, name, 2, 10))
+ return STAT_BOGUS; /* bad packet */
+
+ GETSHORT(type1, p1);
+@@ -2039,7 +2039,7 @@ int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, ch
+ an unsigned zone. Return STAT_NO_SIG to cause this to be proved. */
+
+ /* Get name of missing answer */
+- if (!extract_name(header, plen, &qname, name, 1, 0))
++ if (!extract_name(header, plen, &qname, name, 2, 0))
+ return STAT_BOGUS;
+
+ if (nsec_type == T_NSEC)
+@@ -2061,7 +2061,7 @@ int dnssec_chase_cname(time_t now, struct dns_header *header, size_t plen, char
+ int cname_count = CNAME_CHAIN;
+
+ /* Get question */
+- if (!extract_name(header, plen, &p, name, 1, 4))
++ if (!extract_name(header, plen, &p, name, 2, 4))
+ return STAT_BOGUS;
+
+ p +=2; /* type */
+@@ -2102,7 +2102,7 @@ int dnssec_chase_cname(time_t now, struct dns_header *header, size_t plen, char
+
+ /* Loop down CNAME chain/ */
+ if (!cname_count-- ||
+- !extract_name(header, plen, &p, name, 1, 0) ||
++ !extract_name(header, plen, &p, name, 2, 0) ||
+ !(p = skip_questions(header, plen)))
+ return STAT_BOGUS;
+
+@@ -2419,7 +2419,7 @@ unsigned char* hash_questions(struct dns_header *header, size_t plen, char *name
+
+ for (q = ntohs(header->qdcount); q != 0; q--)
+ {
+- if (!extract_name(header, plen, &p, name, 1, 4))
++ if (!extract_name(header, plen, &p, name, 2, 4))
+ break; /* bad packet */
+
+ len = to_wire(name);
+diff --git a/src/rfc1035.c b/src/rfc1035.c
+index 5ef5ddb7485e..10832a3d5d2e 100644
+--- a/src/rfc1035.c
++++ b/src/rfc1035.c
+@@ -16,6 +16,7 @@
+
+ #include "dnsmasq.h"
+
++/* isExtract == 2 -> DNSSEC mode, no bitstrings, no ascii checks. */
+ int extract_name(struct dns_header *header, size_t plen, unsigned char **pp,
+ char *name, int isExtract, int extrabytes)
+ {
+@@ -86,7 +87,7 @@ int extract_name(struct dns_header *header, size_t plen, unsigned char **pp,
+ if ((l & 0x3f) != 1)
+ return 0; /* we only understand bitstrings */
+
+- if (!isExtract)
++ if (isExtract != 1)
+ return 0; /* Cannot compare bitsrings */
+
+ count = *p++;
+@@ -128,7 +129,7 @@ int extract_name(struct dns_header *header, size_t plen, unsigned char **pp,
+ if (isExtract)
+ {
+ unsigned char c = *p;
+- if (isascii(c) && !iscntrl(c) && c != '.')
++ if ((isExtract == 2 || (isascii(c) && !iscntrl(c))) && c != '.')
+ *cp++ = *p;
+ else
+ return 0;
+--
+2.1.0
+
--- /dev/null
+From 394ff492da6af5da7e7d356be9586683bc5fc011 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sun, 29 Mar 2015 22:17:14 +0100
+Subject: [PATCH 65/98] Allow control characters in names in the cache, handle
+ when logging.
+
+---
+ src/cache.c | 19 +++++++++++++++++--
+ src/dnssec.c | 34 +++++++++++++++++-----------------
+ src/rfc1035.c | 7 +++----
+ 3 files changed, 37 insertions(+), 23 deletions(-)
+
+diff --git a/src/cache.c b/src/cache.c
+index c95624c42b1c..873c5779044c 100644
+--- a/src/cache.c
++++ b/src/cache.c
+@@ -1399,6 +1399,19 @@ int cache_make_stat(struct txt_record *t)
+ return 1;
+ }
+
++/* There can be names in the cache containing control chars, don't
++ mess up logging or open security holes. */
++static char *sanitise(char *name)
++{
++ unsigned char *r;
++ for (r = (unsigned char *)name; *r; r++)
++ if (!isprint((int)*r))
++ return "<name unprintable>";
++
++ return name;
++}
++
++
+ void dump_cache(time_t now)
+ {
+ struct server *serv, *serv1;
+@@ -1452,9 +1465,9 @@ void dump_cache(time_t now)
+ *a = 0;
+ if (strlen(n) == 0 && !(cache->flags & F_REVERSE))
+ n = "<Root>";
+- p += sprintf(p, "%-30.30s ", n);
++ p += sprintf(p, "%-30.30s ", sanitise(n));
+ if ((cache->flags & F_CNAME) && !is_outdated_cname_pointer(cache))
+- a = cache_get_cname_target(cache);
++ a = sanitise(cache_get_cname_target(cache));
+ #ifdef HAVE_DNSSEC
+ else if (cache->flags & F_DS)
+ {
+@@ -1587,6 +1600,8 @@ void log_query(unsigned int flags, char *name, struct all_addr *addr, char *arg)
+ if (!option_bool(OPT_LOG))
+ return;
+
++ name = sanitise(name);
++
+ if (addr)
+ {
+ if (flags & F_KEYTAG)
+diff --git a/src/dnssec.c b/src/dnssec.c
+index 8bd5294ce773..14bae7e9bf75 100644
+--- a/src/dnssec.c
++++ b/src/dnssec.c
+@@ -552,7 +552,7 @@ static int get_rdata(struct dns_header *header, size_t plen, unsigned char *end,
+
+ (*desc)++;
+
+- if (d == 0 && extract_name(header, plen, p, buff, 2, 0))
++ if (d == 0 && extract_name(header, plen, p, buff, 1, 0))
+ /* domain-name, canonicalise */
+ return to_wire(buff);
+ else
+@@ -811,7 +811,7 @@ static int validate_rrset(time_t now, struct dns_header *header, size_t plen, in
+ GETLONG(sig_inception, p);
+ GETSHORT(key_tag, p);
+
+- if (!extract_name(header, plen, &p, keyname, 2, 0))
++ if (!extract_name(header, plen, &p, keyname, 1, 0))
+ return STAT_BOGUS;
+
+ /* RFC 4035 5.3.1 says that the Signer's Name field MUST equal
+@@ -866,7 +866,7 @@ static int validate_rrset(time_t now, struct dns_header *header, size_t plen, in
+ u16 len, *dp;
+
+ p = rrset[i];
+- if (!extract_name(header, plen, &p, name, 2, 10))
++ if (!extract_name(header, plen, &p, name, 1, 10))
+ return STAT_BOGUS;
+
+ name_start = name;
+@@ -923,7 +923,7 @@ static int validate_rrset(time_t now, struct dns_header *header, size_t plen, in
+
+ /* namebuff used for workspace above, restore to leave unchanged on exit */
+ p = (unsigned char*)(rrset[0]);
+- extract_name(header, plen, &p, name, 2, 0);
++ extract_name(header, plen, &p, name, 1, 0);
+
+ if (key)
+ {
+@@ -963,7 +963,7 @@ int dnssec_validate_by_ds(time_t now, struct dns_header *header, size_t plen, ch
+ struct all_addr a;
+
+ if (ntohs(header->qdcount) != 1 ||
+- !extract_name(header, plen, &p, name, 2, 4))
++ !extract_name(header, plen, &p, name, 1, 4))
+ return STAT_BOGUS;
+
+ GETSHORT(qtype, p);
+@@ -1202,7 +1202,7 @@ int dnssec_validate_ds(time_t now, struct dns_header *header, size_t plen, char
+ val = STAT_BOGUS;
+
+ p = (unsigned char *)(header+1);
+- extract_name(header, plen, &p, name, 2, 4);
++ extract_name(header, plen, &p, name, 1, 4);
+ p += 4; /* qtype, qclass */
+
+ if (!(p = skip_section(p, ntohs(header->ancount), header, plen)))
+@@ -1419,12 +1419,12 @@ static int prove_non_existence_nsec(struct dns_header *header, size_t plen, unsi
+ for (i = 0; i < nsec_count; i++)
+ {
+ p = nsecs[i];
+- if (!extract_name(header, plen, &p, workspace1, 2, 10))
++ if (!extract_name(header, plen, &p, workspace1, 1, 10))
+ return STAT_BOGUS;
+ p += 8; /* class, type, TTL */
+ GETSHORT(rdlen, p);
+ psave = p;
+- if (!extract_name(header, plen, &p, workspace2, 2, 10))
++ if (!extract_name(header, plen, &p, workspace2, 1, 10))
+ return STAT_BOGUS;
+
+ rc = hostname_cmp(workspace1, name);
+@@ -1553,7 +1553,7 @@ static int check_nsec3_coverage(struct dns_header *header, size_t plen, int dige
+ for (i = 0; i < nsec_count; i++)
+ if ((p = nsecs[i]))
+ {
+- if (!extract_name(header, plen, &p, workspace1, 2, 0) ||
++ if (!extract_name(header, plen, &p, workspace1, 1, 0) ||
+ !(base32_len = base32_decode(workspace1, (unsigned char *)workspace2)))
+ return 0;
+
+@@ -1730,7 +1730,7 @@ static int prove_non_existence_nsec3(struct dns_header *header, size_t plen, uns
+ for (i = 0; i < nsec_count; i++)
+ if ((p = nsecs[i]))
+ {
+- if (!extract_name(header, plen, &p, workspace1, 2, 0) ||
++ if (!extract_name(header, plen, &p, workspace1, 1, 0) ||
+ !(base32_len = base32_decode(workspace1, (unsigned char *)workspace2)))
+ return STAT_BOGUS;
+
+@@ -1796,7 +1796,7 @@ int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, ch
+
+ qname = p1 = (unsigned char *)(header+1);
+
+- if (!extract_name(header, plen, &p1, name, 2, 4))
++ if (!extract_name(header, plen, &p1, name, 1, 4))
+ return STAT_BOGUS;
+
+ GETSHORT(qtype, p1);
+@@ -1836,7 +1836,7 @@ int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, ch
+ qname = p1;
+
+ /* looped CNAMES */
+- if (!cname_count-- || !extract_name(header, plen, &p1, name, 2, 0))
++ if (!cname_count-- || !extract_name(header, plen, &p1, name, 1, 0))
+ return STAT_BOGUS;
+
+ p1 = ans_start;
+@@ -1857,7 +1857,7 @@ int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, ch
+
+ for (p1 = ans_start, i = 0; i < ntohs(header->ancount) + ntohs(header->nscount); i++)
+ {
+- if (!extract_name(header, plen, &p1, name, 2, 10))
++ if (!extract_name(header, plen, &p1, name, 1, 10))
+ return STAT_BOGUS; /* bad packet */
+
+ GETSHORT(type1, p1);
+@@ -2039,7 +2039,7 @@ int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, ch
+ an unsigned zone. Return STAT_NO_SIG to cause this to be proved. */
+
+ /* Get name of missing answer */
+- if (!extract_name(header, plen, &qname, name, 2, 0))
++ if (!extract_name(header, plen, &qname, name, 1, 0))
+ return STAT_BOGUS;
+
+ if (nsec_type == T_NSEC)
+@@ -2061,7 +2061,7 @@ int dnssec_chase_cname(time_t now, struct dns_header *header, size_t plen, char
+ int cname_count = CNAME_CHAIN;
+
+ /* Get question */
+- if (!extract_name(header, plen, &p, name, 2, 4))
++ if (!extract_name(header, plen, &p, name, 1, 4))
+ return STAT_BOGUS;
+
+ p +=2; /* type */
+@@ -2102,7 +2102,7 @@ int dnssec_chase_cname(time_t now, struct dns_header *header, size_t plen, char
+
+ /* Loop down CNAME chain/ */
+ if (!cname_count-- ||
+- !extract_name(header, plen, &p, name, 2, 0) ||
++ !extract_name(header, plen, &p, name, 1, 0) ||
+ !(p = skip_questions(header, plen)))
+ return STAT_BOGUS;
+
+@@ -2419,7 +2419,7 @@ unsigned char* hash_questions(struct dns_header *header, size_t plen, char *name
+
+ for (q = ntohs(header->qdcount); q != 0; q--)
+ {
+- if (!extract_name(header, plen, &p, name, 2, 4))
++ if (!extract_name(header, plen, &p, name, 1, 4))
+ break; /* bad packet */
+
+ len = to_wire(name);
+diff --git a/src/rfc1035.c b/src/rfc1035.c
+index 10832a3d5d2e..7a07b0cee906 100644
+--- a/src/rfc1035.c
++++ b/src/rfc1035.c
+@@ -16,7 +16,6 @@
+
+ #include "dnsmasq.h"
+
+-/* isExtract == 2 -> DNSSEC mode, no bitstrings, no ascii checks. */
+ int extract_name(struct dns_header *header, size_t plen, unsigned char **pp,
+ char *name, int isExtract, int extrabytes)
+ {
+@@ -87,7 +86,7 @@ int extract_name(struct dns_header *header, size_t plen, unsigned char **pp,
+ if ((l & 0x3f) != 1)
+ return 0; /* we only understand bitstrings */
+
+- if (isExtract != 1)
++ if (!isExtract)
+ return 0; /* Cannot compare bitsrings */
+
+ count = *p++;
+@@ -129,8 +128,8 @@ int extract_name(struct dns_header *header, size_t plen, unsigned char **pp,
+ if (isExtract)
+ {
+ unsigned char c = *p;
+- if ((isExtract == 2 || (isascii(c) && !iscntrl(c))) && c != '.')
+- *cp++ = *p;
++ if (c != 0 && c != '.')
++ *cp++ = c;
+ else
+ return 0;
+ }
+--
+2.1.0
+
--- /dev/null
+From 794fccca7ffebfba4468bfffc6276b68bbf6afd9 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sun, 29 Mar 2015 22:35:44 +0100
+Subject: [PATCH 66/98] Fix crash in last commit.
+
+---
+ src/cache.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/src/cache.c b/src/cache.c
+index 873c5779044c..d7bea574c0d8 100644
+--- a/src/cache.c
++++ b/src/cache.c
+@@ -1404,9 +1404,10 @@ int cache_make_stat(struct txt_record *t)
+ static char *sanitise(char *name)
+ {
+ unsigned char *r;
+- for (r = (unsigned char *)name; *r; r++)
+- if (!isprint((int)*r))
+- return "<name unprintable>";
++ if (name)
++ for (r = (unsigned char *)name; *r; r++)
++ if (!isprint((int)*r))
++ return "<name unprintable>";
+
+ return name;
+ }
+--
+2.1.0
+
--- /dev/null
+From fd6ad9e481ab7c812a6b1515244908818cbb0442 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Mon, 30 Mar 2015 07:52:21 +0100
+Subject: [PATCH 67/98] Merge message translations.
+
+---
+ po/de.po | 803 +++++++++++++++++++++++++++++++++--------------------------
+ po/es.po | 798 ++++++++++++++++++++++++++++++++--------------------------
+ po/fi.po | 786 +++++++++++++++++++++++++++++++--------------------------
+ po/fr.po | 799 ++++++++++++++++++++++++++++++++--------------------------
+ po/id.po | 814 +++++++++++++++++++++++++++++++++---------------------------
+ po/it.po | 786 +++++++++++++++++++++++++++++++--------------------------
+ po/no.po | 797 ++++++++++++++++++++++++++++++++--------------------------
+ po/pl.po | 803 +++++++++++++++++++++++++++++++++--------------------------
+ po/pt_BR.po | 786 +++++++++++++++++++++++++++++++--------------------------
+ po/ro.po | 797 ++++++++++++++++++++++++++++++++--------------------------
+ 10 files changed, 4396 insertions(+), 3573 deletions(-)
+
+diff --git a/po/de.po b/po/de.po
+index 4c93c5b28ef2..a03173845b35 100644
+--- a/po/de.po
++++ b/po/de.po
+@@ -23,70 +23,70 @@ msgstr ""
+ "X-Generator: Poedit 1.7.3\n"
+ "X-Poedit-SourceCharset: UTF-8\n"
+
+-#: cache.c:505
++#: cache.c:523
+ msgid "Internal error in cache."
+ msgstr "Interner Fehler im Cache."
+
+-#: cache.c:908
++#: cache.c:941
+ #, c-format
+ msgid "failed to load names from %s: %s"
+ msgstr "Fehler beim Laden der Namen von %s: %s"
+
+-#: cache.c:934 dhcp.c:820
++#: cache.c:967 dhcp.c:825
+ #, c-format
+ msgid "bad address at %s line %d"
+ msgstr "Fehlerhafte Adresse in %s Zeile %d"
+
+-#: cache.c:985 dhcp.c:836
++#: cache.c:1018 dhcp.c:841
+ #, c-format
+ msgid "bad name at %s line %d"
+ msgstr "Fehlerhafter Name in %s Zeile %d"
+
+-#: cache.c:992 dhcp.c:911
++#: cache.c:1027 dhcp.c:916
+ #, c-format
+ msgid "read %s - %d addresses"
+ msgstr "%s gelesen - %d Adressen"
+
+-#: cache.c:1100
++#: cache.c:1135
+ msgid "cleared cache"
+ msgstr "Cache geleert"
+
+-#: cache.c:1123
++#: cache.c:1164
+ #, c-format
+ msgid "No IPv4 address found for %s"
+ msgstr "Keine IPv4-Adresse für %s gefunden"
+
+-#: cache.c:1201
++#: cache.c:1242
+ #, c-format
+ msgid "%s is a CNAME, not giving it to the DHCP lease of %s"
+ msgstr "%s ist ein CNAME, weise es der DHCP-Lease von %s nicht zu"
+
+-#: cache.c:1225
++#: cache.c:1266
+ #, c-format
+ msgid "not giving name %s to the DHCP lease of %s because the name exists in %s with address %s"
+ msgstr "Name %s wurde dem DHCP-Lease von %s nicht zugewiesen, da der Name in %s bereits mit Adresse %s existiert"
+
+-#: cache.c:1366
++#: cache.c:1421
+ #, c-format
+ msgid "time %lu"
+ msgstr "Zeit %lu"
+
+-#: cache.c:1367
++#: cache.c:1422
+ #, c-format
+ msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
+ msgstr "Cache Größe %d, %d/%d Cache-Einfügungen verwendeten nicht abgelaufene Cache-Einträge wieder."
+
+-#: cache.c:1369
++#: cache.c:1424
+ #, c-format
+ msgid "queries forwarded %u, queries answered locally %u"
+ msgstr "%u weitergeleitete Anfragen, %u lokal beantwortete Anfragen"
+
+-#: cache.c:1372
++#: cache.c:1427
+ #, c-format
+ msgid "queries for authoritative zones %u"
+ msgstr "Anfragen nach autoritativen Zonen %u"
+
+-#: cache.c:1398
++#: cache.c:1453
+ #, c-format
+ msgid "server %s#%d: queries sent %u, retried or failed %u"
+ msgstr "Server %s#%d: %u Anfragen gesendet, %u erneut versucht oder fehlgeschlagen"
+@@ -100,7 +100,7 @@ msgstr "Konnte den Zufallszahlengenerator nicht initialisieren: %s"
+ msgid "failed to allocate memory"
+ msgstr "Konnte Speicher nicht belegen"
+
+-#: util.c:243 option.c:579
++#: util.c:243 option.c:598
+ msgid "could not get memory"
+ msgstr "Speicher nicht verfügbar"
+
+@@ -115,593 +115,626 @@ msgid "failed to allocate %d bytes"
+ msgstr "Konnte %d Bytes nicht belegen"
+
+ # @Simon: not perfect but I cannot get nearer right now.
+-#: util.c:429
++#: util.c:430
+ #, c-format
+ msgid "infinite"
+ msgstr "unendlich"
+
+-#: option.c:318
++#: option.c:330
+ msgid "Specify local address(es) to listen on."
+ msgstr "Lokale abzuhörende Adresse(n) angeben."
+
+-#: option.c:319
++#: option.c:331
+ msgid "Return ipaddr for all hosts in specified domains."
+ msgstr "IP-Adresse für alle Hosts in angegebenen Domänen festlegen."
+
+ # FIXME: the English test is not to the point. Just use a shortened description
+ # from the manpage instead. -- MA
+-#: option.c:320
++#: option.c:332
+ msgid "Fake reverse lookups for RFC1918 private address ranges."
+ msgstr "Für private Adressbereiche nach RFC1918 \"keine solche Domain\" liefern."
+
+-#: option.c:321
++#: option.c:333
+ msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
+ msgstr "Diese IP-Adresse als NXDOMAIN interpretieren (wehrt \"Suchhilfen\" ab)."
+
+-#: option.c:322
++#: option.c:334
+ #, c-format
+ msgid "Specify the size of the cache in entries (defaults to %s)."
+ msgstr "Größe des Caches (Zahl der Einträge) festlegen (Voreinstellung: %s)."
+
+-#: option.c:323
++#: option.c:335
+ #, c-format
+ msgid "Specify configuration file (defaults to %s)."
+ msgstr "Konfigurationsdatei festlegen (Voreinstellung: %s)."
+
+-#: option.c:324
++#: option.c:336
+ msgid "Do NOT fork into the background: run in debug mode."
+ msgstr "NICHT in den Hintergrund gehen: Betrieb im Debug-Modus"
+
+-#: option.c:325
++#: option.c:337
+ msgid "Do NOT forward queries with no domain part."
+ msgstr "Anfragen ohne Domänen-Teil NICHT weiterschicken."
+
+-#: option.c:326
++#: option.c:338
+ msgid "Return self-pointing MX records for local hosts."
+ msgstr "Für lokale Einträge MX-Einträge liefern, die auf sich selbst zeigen."
+
+-#: option.c:327
++#: option.c:339
+ msgid "Expand simple names in /etc/hosts with domain-suffix."
+ msgstr "Erweitere einfache Namen in /etc/hosts mit der Domänen-Endung."
+
+-#: option.c:328
++#: option.c:340
+ msgid "Don't forward spurious DNS requests from Windows hosts."
+ msgstr "'unechte' DNS-Anfragen von Windows-Rechnern nicht weiterleiten"
+
+ # @Simon: I'm a bit unsure about "spurious"
+-#: option.c:329
++#: option.c:341
+ msgid "Enable DHCP in the range given with lease duration."
+ msgstr "DHCP für angegebenen Bereich und Dauer einschalten"
+
+-#: option.c:330
++#: option.c:342
+ #, c-format
+ msgid "Change to this group after startup (defaults to %s)."
+ msgstr "Nach dem Start in diese Benutzergruppe wechseln (Voreinstellung %s)."
+
+-#: option.c:331
++#: option.c:343
+ msgid "Set address or hostname for a specified machine."
+ msgstr "Adresse oder Hostnamen für einen angegebenen Computer setzen."
+
+-#: option.c:332
++#: option.c:344
+ msgid "Read DHCP host specs from file."
+ msgstr "DHCP-Host-Angaben aus Datei lesen."
+
+-#: option.c:333
++#: option.c:345
+ msgid "Read DHCP option specs from file."
+ msgstr "DHCP-Optionen aus Datei lesen."
+
+-#: option.c:334
++#: option.c:346
++#, fuzzy
++msgid "Read DHCP host specs from a directory."
++msgstr "DHCP-Host-Angaben aus Datei lesen."
++
++#: option.c:347
++#, fuzzy
++msgid "Read DHCP options from a directory."
++msgstr "DHCP-Optionen aus Datei lesen."
++
++#: option.c:348
+ msgid "Evaluate conditional tag expression."
+ msgstr "Auswertung eines Ausdrucks bedingter Marken."
+
+-#: option.c:335
++#: option.c:349
+ #, c-format
+ msgid "Do NOT load %s file."
+ msgstr "%s-Datei NICHT laden."
+
+-#: option.c:336
++#: option.c:350
+ #, c-format
+ msgid "Specify a hosts file to be read in addition to %s."
+ msgstr "Hosts-Datei festlegen, die zusätzlich zu %s gelesen wird."
+
+-#: option.c:337
++#: option.c:351
++#, fuzzy
++msgid "Read hosts files from a directory."
++msgstr "DHCP-Host-Angaben aus Datei lesen."
++
++#: option.c:352
+ msgid "Specify interface(s) to listen on."
+ msgstr "Schnittstelle(n) zum Empfang festlegen."
+
+-#: option.c:338
++#: option.c:353
+ msgid "Specify interface(s) NOT to listen on."
+ msgstr "Schnittstelle(n) festlegen, die NICHT empfangen sollen."
+
+-#: option.c:339
++#: option.c:354
+ msgid "Map DHCP user class to tag."
+ msgstr "DHCP-Benutzerklasse auf Marke abbilden."
+
+-#: option.c:340
++#: option.c:355
+ msgid "Map RFC3046 circuit-id to tag."
+ msgstr "RFC3046 \"circuit-id\" auf Marke abbilden."
+
+-#: option.c:341
++#: option.c:356
+ msgid "Map RFC3046 remote-id to tag."
+ msgstr "RFC3046 \"remote-id\" auf Marke abbilden."
+
+-#: option.c:342
++#: option.c:357
+ msgid "Map RFC3993 subscriber-id to tag."
+ msgstr "RFC3993 \"subscriber-id\" auf Marke abbilden."
+
+-#: option.c:343
++#: option.c:358
+ msgid "Don't do DHCP for hosts with tag set."
+ msgstr "Kein DHCP für Hosts mit gesetzter Marke verwenden."
+
+-#: option.c:344
++#: option.c:359
+ msgid "Force broadcast replies for hosts with tag set."
+ msgstr "Rundsendung für Hosts mit gesetzter Marke erzwingen."
+
+-#: option.c:345
++#: option.c:360
+ msgid "Do NOT fork into the background, do NOT run in debug mode."
+ msgstr "NICHT in den Hintergrund wechseln, NICHT im Debug-Modus laufen."
+
+-#: option.c:346
++#: option.c:361
+ msgid "Assume we are the only DHCP server on the local network."
+ msgstr "Voraussetzen, dass wir der einzige DHCP-Server im lokalen Netz sind."
+
+-#: option.c:347
++#: option.c:362
+ #, c-format
+ msgid "Specify where to store DHCP leases (defaults to %s)."
+ msgstr "Festlegen, wo DHCP-Leases gespeichert werden (Voreinstellung %s)."
+
+-#: option.c:348
++#: option.c:363
+ msgid "Return MX records for local hosts."
+ msgstr "MX-Einträge für lokale Hosts liefern."
+
+-#: option.c:349
++#: option.c:364
+ msgid "Specify an MX record."
+ msgstr "Einen MX-Eintrag festlegen."
+
+-#: option.c:350
++#: option.c:365
+ msgid "Specify BOOTP options to DHCP server."
+ msgstr "BOOTP-Optionen für DHCP-Server festlegen."
+
+-#: option.c:351
++#: option.c:366
+ #, c-format
+ msgid "Do NOT poll %s file, reload only on SIGHUP."
+ msgstr "%s-Datei NICHT abfragen, nur bei SIGHUP neu laden."
+
+-#: option.c:352
++#: option.c:367
+ msgid "Do NOT cache failed search results."
+ msgstr "Fehlerhafte Suchergebnisse NICHT zwischenspeichern."
+
+-#: option.c:353
++#: option.c:368
+ #, c-format
+ msgid "Use nameservers strictly in the order given in %s."
+ msgstr "Namensserver streng in der in %s angegebenen Reihenfolge verwenden."
+
+-#: option.c:354
++#: option.c:369
+ msgid "Specify options to be sent to DHCP clients."
+ msgstr "Optionen festlegen, die an DHCP-Klienten gesendet werden."
+
+-#: option.c:355
++#: option.c:370
+ msgid "DHCP option sent even if the client does not request it."
+ msgstr "DHCP-Option, die selbst ohne Klientenanfrage gesendet wird."
+
+-#: option.c:356
++#: option.c:371
+ msgid "Specify port to listen for DNS requests on (defaults to 53)."
+ msgstr "Port zum Abhören der DNS-Anfragen festlegen (53 voreingestellt)."
+
+-#: option.c:357
++#: option.c:372
+ #, c-format
+ msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
+ msgstr "Maximale unterstützte UDP-Paketgröße für EDNS.0 (Voreinstellung %s)."
+
+-#: option.c:358
++#: option.c:373
+ msgid "Log DNS queries."
+ msgstr "DNS-Anfragen protokollieren."
+
+-#: option.c:359
++#: option.c:374
+ msgid "Force the originating port for upstream DNS queries."
+ msgstr "Ausgehenden Port erzwingen für DNS-Anfragen an vorgelagerte Server."
+
+-#: option.c:360
++#: option.c:375
+ msgid "Do NOT read resolv.conf."
+ msgstr "resolv.conf NICHT lesen."
+
+-#: option.c:361
++#: option.c:376
+ #, c-format
+ msgid "Specify path to resolv.conf (defaults to %s)."
+ msgstr "Pfad zu resolv.conf festlegen (%s voreingestellt)."
+
+-#: option.c:362
++#: option.c:377
+ msgid "Specify path to file with server= options"
+ msgstr " Dateipfad mit der Option server= angeben"
+
+-#: option.c:363
++#: option.c:378
+ msgid "Specify address(es) of upstream servers with optional domains."
+ msgstr "Adresse(n) vorgelagerter Server festlegen, optional mit Domänen."
+
+-#: option.c:364
++#: option.c:379
+ msgid "Specify address of upstream servers for reverse address queries"
+ msgstr "Adresse(n) vorgelagerter Server festlegen, für reverse Adressanfragen"
+
+-#: option.c:365
++#: option.c:380
+ msgid "Never forward queries to specified domains."
+ msgstr "Anfragen für angegebene Domänen niemals weiterleiten."
+
+-#: option.c:366
++#: option.c:381
+ msgid "Specify the domain to be assigned in DHCP leases."
+ msgstr "Domäne festlegen, die für DHCP-Leases zugewiesen wird."
+
+-#: option.c:367
++#: option.c:382
+ msgid "Specify default target in an MX record."
+ msgstr "Voreingestelltes Ziel für MX-Einträge festlegen."
+
+-#: option.c:368
++#: option.c:383
+ msgid "Specify time-to-live in seconds for replies from /etc/hosts."
+ msgstr "Gültigkeitsdauer für Antworten aus /etc/hosts festlegen."
+
+-#: option.c:369
++#: option.c:384
+ msgid "Specify time-to-live in seconds for negative caching."
+ msgstr "Gültigkeitsdauer in Sekunden für Caching negativer Ergebnisse festlegen."
+
+-#: option.c:370
++#: option.c:385
+ msgid "Specify time-to-live in seconds for maximum TTL to send to clients."
+ msgstr "Gültigkeitsdauer in Sekunden für Caching negativer Ergebnisse festlegen."
+
+-#: option.c:371
++#: option.c:386
++#, fuzzy
++msgid "Specify time-to-live ceiling for cache."
++msgstr "Gültigkeitsdauer in Sekunden für Caching negativer Ergebnisse festlegen."
++
++#: option.c:387
++#, fuzzy
++msgid "Specify time-to-live floor for cache."
++msgstr "Gültigkeitsdauer in Sekunden für Caching negativer Ergebnisse festlegen."
++
++#: option.c:388
+ #, c-format
+ msgid "Change to this user after startup. (defaults to %s)."
+ msgstr "Nach dem Start diese Benutzerrechte annehmen (%s voreingestellt)."
+
+-#: option.c:372
++#: option.c:389
+ msgid "Map DHCP vendor class to tag."
+ msgstr "DHCP-\"vendor class\" auf Marke abbilden."
+
+-#: option.c:373
++#: option.c:390
+ msgid "Display dnsmasq version and copyright information."
+ msgstr "dnsmasq-Version und Urheberrecht anzeigen."
+
+-#: option.c:374
++#: option.c:391
+ msgid "Translate IPv4 addresses from upstream servers."
+ msgstr "IPv4-Adressen von vorgelagerten Servern übersetzen."
+
+-#: option.c:375
++#: option.c:392
+ msgid "Specify a SRV record."
+ msgstr "SRV-Eintrag festlegen."
+
+-#: option.c:376
++#: option.c:393
+ msgid "Display this message. Use --help dhcp for known DHCP options."
+ msgstr "Diese Hilfe anzeigen. Benutzen Sie --help dhcp für bekannte DHCP-Optionen."
+
+-#: option.c:377
++#: option.c:394
+ #, c-format
+ msgid "Specify path of PID file (defaults to %s)."
+ msgstr "Dateipfad für Prozesskennung (PID) festlegen (Voreinstellung: %s)."
+
+-#: option.c:378
++#: option.c:395
+ #, c-format
+ msgid "Specify maximum number of DHCP leases (defaults to %s)."
+ msgstr "Höchstzahl der DHCP-Leases festlegen (%s voreingestellt)."
+
+-#: option.c:379
++#: option.c:396
+ msgid "Answer DNS queries based on the interface a query was sent to."
+ msgstr "DNS-Anfragen abhängig der Emfpangsschnittstelle beantworten."
+
+-#: option.c:380
++#: option.c:397
+ msgid "Specify TXT DNS record."
+ msgstr "DNS-TXT-Eintrag festlegen."
+
+-#: option.c:381
++#: option.c:398
+ msgid "Specify PTR DNS record."
+ msgstr "DNS-PTR-Eintrag festlegen."
+
+-#: option.c:382
++#: option.c:399
+ msgid "Give DNS name to IPv4 address of interface."
+ msgstr "Schnittstellennamen zur IPv4-Adresse des Interfaces auflösen."
+
+-#: option.c:383
++#: option.c:400
+ msgid "Bind only to interfaces in use."
+ msgstr "Nur an verwendete Schnittstellen binden."
+
+-#: option.c:384
++#: option.c:401
+ #, c-format
+ msgid "Read DHCP static host information from %s."
+ msgstr "Statische DHCP-Host-Information aus %s lesen."
+
+-#: option.c:385
++#: option.c:402
+ msgid "Enable the DBus interface for setting upstream servers, etc."
+ msgstr "DBus-Schnittstelle zum Festlegen vorgelagerter Server usw. festlegen."
+
+-#: option.c:386
++#: option.c:403
+ msgid "Do not provide DHCP on this interface, only provide DNS."
+ msgstr "Auf dieser Schnittstelle kein DHCP anbieten, sondern nur DNS."
+
+-#: option.c:387
++#: option.c:404
+ msgid "Enable dynamic address allocation for bootp."
+ msgstr "Dynamische Adressbelegung für bootp einschalten."
+
+-#: option.c:388
++#: option.c:405
+ msgid "Map MAC address (with wildcards) to option set."
+ msgstr "MAC-Adresse (mit Jokerzeichen) auf Netzmarke abbilden."
+
+-#: option.c:389
++#: option.c:406
+ msgid "Treat DHCP requests on aliases as arriving from interface."
+ msgstr "DHCP-Anfragen von Alias-Schnittstellen für die Hauptschnittstelle beantworten."
+
+-#: option.c:390
++#: option.c:407
+ msgid "Disable ICMP echo address checking in the DHCP server."
+ msgstr "ICMP-Echo-Adressprüfung im DHCP-Server abschalten."
+
+-#: option.c:391
++#: option.c:408
+ msgid "Shell script to run on DHCP lease creation and destruction."
+ msgstr "Skript, das bei Erzeugung/Löschung einer DHCP-Lease laufen soll."
+
+-#: option.c:392
++#: option.c:409
+ msgid "Lua script to run on DHCP lease creation and destruction."
+ msgstr "Lua-Skript, welches bei Erzeugung/Löschung eines DHCP-Leases laufen soll."
+
+-#: option.c:393
++#: option.c:410
+ msgid "Run lease-change scripts as this user."
+ msgstr "Lease-Änderungs-Skript mit den Rechten dieses Nutzers ausführen."
+
+-#: option.c:394
++#: option.c:411
+ msgid "Read configuration from all the files in this directory."
+ msgstr "Konfiguration aus allen Dateien in diesem Verzeichnis lesen."
+
+-#: option.c:395
++#: option.c:412
+ msgid "Log to this syslog facility or file. (defaults to DAEMON)"
+ msgstr "Für diese Syslog-Anlage oder in Datei loggen (Voreinstellung DAEMON)."
+
+-#: option.c:396
++#: option.c:413
+ msgid "Do not use leasefile."
+ msgstr "Keine Lease-Datei benützen."
+
+-#: option.c:397
++#: option.c:414
+ #, c-format
+ msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
+ msgstr "Höchstzahl nebenläufiger DNS-Anfragen (%s voreingestellt)."
+
+-#: option.c:398
++#: option.c:415
+ #, c-format
+ msgid "Clear DNS cache when reloading %s."
+ msgstr "DNS-Cache beim Neuladen von %s löschen."
+
+-#: option.c:399
++#: option.c:416
+ msgid "Ignore hostnames provided by DHCP clients."
+ msgstr "Von DHCP-Clients gelieferte Hostnamen ignorieren."
+
+-#: option.c:400
++#: option.c:417
+ msgid "Do NOT reuse filename and server fields for extra DHCP options."
+ msgstr "Dateinamen und Server-Datenfehler für zusätzliche DHCP-Optionen NICHT wiederverwenden."
+
+-#: option.c:401
++#: option.c:418
+ msgid "Enable integrated read-only TFTP server."
+ msgstr "Eingebauten Nur-Lese-TFTP-Server einschalten."
+
+-#: option.c:402
++#: option.c:419
+ msgid "Export files by TFTP only from the specified subtree."
+ msgstr "Nur vom festgelegten Unterbaum Dateien per TFTP exportieren."
+
+-#: option.c:403
++#: option.c:420
+ msgid "Add client IP address to tftp-root."
+ msgstr "IP-Adresse des Klienten an tftp-root anhängen."
+
+-#: option.c:404
++#: option.c:421
+ msgid "Allow access only to files owned by the user running dnsmasq."
+ msgstr "Zugriff nur auf Dateien gestatten, die dem dnsmasq aufrufenden Benutzer gehören."
+
+-#: option.c:405
++#: option.c:422
+ #, c-format
+ msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
+ msgstr "Höchstzahl nebenläufiger TFTP-Übertragungen (%s voreingestellt)."
+
+-#: option.c:406
++#: option.c:423
+ msgid "Disable the TFTP blocksize extension."
+ msgstr "TFTP-Blockgrößen-Erweiterung abschalten."
+
+-#: option.c:407
++#: option.c:424
+ msgid "Convert TFTP filenames to lowercase"
+ msgstr "Konvertiere TFTP Dateinamen in Kleinschreibung"
+
+-#: option.c:408
++#: option.c:425
+ msgid "Ephemeral port range for use by TFTP transfers."
+ msgstr "Bereich für vorübergehende Ports für TFTP-Übertragungen."
+
+-#: option.c:409
++#: option.c:426
+ msgid "Extra logging for DHCP."
+ msgstr "Erweiterte DHCP-Protokollierung."
+
+-#: option.c:410
++#: option.c:427
+ msgid "Enable async. logging; optionally set queue length."
+ msgstr "Asynchrone Protokollierung einschalten, opt. Warteschlangenlänge festlegen."
+
+-#: option.c:411
++#: option.c:428
+ msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
+ msgstr "DNS-Rebinding unterbinden, private IP-Bereiche bei der Auflösung ausfiltern."
+
+-#: option.c:412
++#: option.c:429
+ msgid "Allow rebinding of 127.0.0.0/8, for RBL servers."
+ msgstr "Auflösung zu 127.0.0.0/8 erlauben, für RBL-Server."
+
+-#: option.c:413
++#: option.c:430
+ msgid "Inhibit DNS-rebind protection on this domain."
+ msgstr "DNS-Rebind-Schutz für diese Domäne sperren."
+
+-#: option.c:414
++#: option.c:431
+ msgid "Always perform DNS queries to all servers."
+ msgstr "DNS-Anfragen immer an alle Server weiterleiten."
+
+-#: option.c:415
++#: option.c:432
+ msgid "Set tag if client includes matching option in request."
+ msgstr "Marke setzen, wenn Klient eine entsprechende Option anfragt."
+
+-#: option.c:416
++#: option.c:433
+ msgid "Use alternative ports for DHCP."
+ msgstr "Alternative Ports für DHCP verwenden."
+
+-#: option.c:417
++#: option.c:434
+ msgid "Specify NAPTR DNS record."
+ msgstr "DNS-NAPTR-Eintrag festlegen."
+
+-#: option.c:418
++#: option.c:435
+ msgid "Specify lowest port available for DNS query transmission."
+ msgstr "Niedrigsten verfügbaren Port für Übertragung von DNS-Anfragen festlegen."
+
+-#: option.c:419
++#: option.c:436
+ msgid "Use only fully qualified domain names for DHCP clients."
+ msgstr "Für DHCP-Klienten nur vollständig bestimmte Domänennamen benutzen."
+
+ # FIXME: probably typo in original message. -- MA
+-#: option.c:420
++#: option.c:437
+ msgid "Generate hostnames based on MAC address for nameless clients."
+ msgstr "Generiere Hostnamen auf Basis der MAC-Adresse für namenlose Klienten."
+
+-#: option.c:421
++#: option.c:438
+ msgid "Use these DHCP relays as full proxies."
+ msgstr "Diese DHCP-Relais als vollwertige Proxies verwenden."
+
+-#: option.c:422
++#: option.c:439
+ msgid "Relay DHCP requests to a remote server"
+ msgstr "Leute DHCP Anfragen an entfernten Server weiter"
+
+-#: option.c:423
++#: option.c:440
+ msgid "Specify alias name for LOCAL DNS name."
+ msgstr "Alias für LOKALEN DNS-Namen festlegen."
+
+-#: option.c:424
++#: option.c:441
+ msgid "Prompt to send to PXE clients."
+ msgstr "Aufforderung, die an PXE-Klienten geschickt wird."
+
+-#: option.c:425
++#: option.c:442
+ msgid "Boot service for PXE menu."
+ msgstr "Boot-Dienst für PXE-Menü."
+
+-#: option.c:426
++#: option.c:443
+ msgid "Check configuration syntax."
+ msgstr "Konfigurationssyntax prüfen."
+
+-#: option.c:427
++#: option.c:444
+ msgid "Add requestor's MAC address to forwarded DNS queries."
+ msgstr "Anfragende MAC-Adresse in die weiterleitende DNS-Anfrage einfügen"
+
+-#: option.c:428
++#: option.c:445
+ msgid "Add requestor's IP subnet to forwarded DNS queries."
+ msgstr "Füge das IP-Subnetz des Anfragenden in die weitergeleiteten DNS-Anfragen hinzu."
+
+-#: option.c:429
++#: option.c:446
+ msgid "Proxy DNSSEC validation results from upstream nameservers."
+ msgstr "Proxy-DNSSEC-Validierung-Ergebnisse von Upstream-Namensservern."
+
+-#: option.c:430
++#: option.c:447
+ msgid "Attempt to allocate sequential IP addresses to DHCP clients."
+ msgstr "Versuche sequenzielle IP-Adressen an DHCP-Klienten zu vergeben."
+
+-#: option.c:431
++#: option.c:448
+ msgid "Copy connection-track mark from queries to upstream connections."
+ msgstr "Kopiere \"connection-track mark\" von Anfragen nach Upstream-Verbindungen."
+
+-#: option.c:432
++#: option.c:449
+ msgid "Allow DHCP clients to do their own DDNS updates."
+ msgstr "Erlaube DHCP-Klienten ihre eigenen DDNS-Updates durchzuführen."
+
+-#: option.c:433
++#: option.c:450
+ msgid "Send router-advertisements for interfaces doing DHCPv6"
+ msgstr "Sende \"Router-Advertisments\" für Netzwerkschnittstellen, welche DHCPv6 nutzen"
+
+-#: option.c:434
++#: option.c:451
+ msgid "Specify DUID_EN-type DHCPv6 server DUID"
+ msgstr "Spezifiziere DUID_EN-type DHCPv6 Server DUID"
+
+-#: option.c:435
++#: option.c:452
+ msgid "Specify host (A/AAAA and PTR) records"
+ msgstr "Spezifiziere Host (A/AAAA und PTR) Einträge"
+
+-#: option.c:436
++#: option.c:453
+ msgid "Specify arbitrary DNS resource record"
+ msgstr "Spezifiziere einen beliebiegen DNS Eintrag"
+
+-#: option.c:437
++#: option.c:454
+ msgid "Bind to interfaces in use - check for new interfaces"
+ msgstr "Bindung zu Schnittstellen in Benutzung - prüfe auf neue Schnittstellen"
+
+-#: option.c:438
++#: option.c:455
+ msgid "Export local names to global DNS"
+ msgstr "Exportiere lokale Namen in das globale DNS"
+
+-#: option.c:439
++#: option.c:456
+ msgid "Domain to export to global DNS"
+ msgstr "Domain für das Exportieren des globalen DNS"
+
+-#: option.c:440
++#: option.c:457
+ msgid "Set TTL for authoritative replies"
+ msgstr "Setzte TTL für autoritative Antworten"
+
+-#: option.c:441
++#: option.c:458
+ msgid "Set authoritive zone information"
+ msgstr "Setze autoritative Zoneninformationen"
+
+-#: option.c:442
++#: option.c:459
+ msgid "Secondary authoritative nameservers for forward domains"
+ msgstr "Sekundärer autoritativer Nameserver für weitergeleitete Domains"
+
+-#: option.c:443
++#: option.c:460
+ msgid "Peers which are allowed to do zone transfer"
+ msgstr "Peers welche einen Zonentransfer durchführen dürfen"
+
+-#: option.c:444
++#: option.c:461
+ msgid "Specify ipsets to which matching domains should be added"
+ msgstr "Spezifiziere IPSets zu welcher passende Domains hinzugefügt werden sollen"
+
+-#: option.c:445
++#: option.c:462
+ msgid "Specify a domain and address range for synthesised names"
+ msgstr "Spezifiziere eine Domain und Adressbereich für synthetisierte Namen"
+
+-#: option.c:446
++#: option.c:463
+ msgid "Activate DNSSEC validation"
+ msgstr "Aktiviere DNSSEC-Validierung"
+
+-#: option.c:447
++#: option.c:464
+ msgid "Specify trust anchor key digest."
+ msgstr "Spezifiziere Vertrauensursprung (Trust Anchor) der Schlüssel-Prüfdaten (Key Digest)."
+
+-#: option.c:448
++#: option.c:465
+ msgid "Disable upstream checking for DNSSEC debugging."
+ msgstr "Deaktiviere die Überprüfung vorgelagerter Server für DNSSEC-Debugging"
+
+-#: option.c:449
++#: option.c:466
+ msgid "Ensure answers without DNSSEC are in unsigned zones."
+ msgstr "Stellt sicher, dass Antworten ohne DNSSEC sich in einer unsignierten Zone befinden."
+
+-#: option.c:450
++#: option.c:467
+ msgid "Don't check DNSSEC signature timestamps until first cache-reload"
+ msgstr "DNSSEC Signatur-Zeitstempel nicht prüfen, bis erstmalig der Cache neugeladen wird"
+
+-#: option.c:452
++#: option.c:468
++msgid "Timestamp file to verify system clock for DNSSEC"
++msgstr ""
++
++#: option.c:470
+ msgid "Specify DHCPv6 prefix class"
+ msgstr "Spezifiziere DHCPv6 Prefix Klasse"
+
+-#: option.c:454
++#: option.c:472
+ msgid "Set priority, resend-interval and router-lifetime"
+ msgstr "Setze Priorität, Intervall des erneuten Sendens und Router Lebenszeit"
+
+-#: option.c:455
++#: option.c:473
+ msgid "Do not log routine DHCP."
+ msgstr "Protokolliere kein DHCP."
+
+-#: option.c:456
++#: option.c:474
+ msgid "Do not log routine DHCPv6."
+ msgstr "Protokolliere kein DHCPv6."
+
+-#: option.c:457
++#: option.c:475
+ msgid "Do not log RA."
+ msgstr "RA nicht protokollieren."
+
+-#: option.c:458
++#: option.c:476
+ msgid "Accept queries only from directly-connected networks"
+ msgstr "Akzeptiere nur Anfragen von direkt verbundenen Netzwerken"
+
+-#: option.c:459
++#: option.c:477
+ msgid "Detect and remove DNS forwarding loops"
+ msgstr "Erkennen und Entfernen von DNS-Weiterleitungsschleifen"
+
+-#: option.c:661
++#: option.c:478
++msgid "Ignore DNS responses containing ipaddr."
++msgstr ""
++
++#: option.c:680
+ #, c-format
+ msgid ""
+ "Usage: dnsmasq [options]\n"
+@@ -710,312 +743,312 @@ msgstr ""
+ "Verwendung: dnsmasq [Optionen]\n"
+ "\n"
+
+-#: option.c:663
++#: option.c:682
+ #, c-format
+ msgid "Use short options only on the command line.\n"
+ msgstr "Auf der Befehlszeile nur kurze Optionen verwenden!\n"
+
+-#: option.c:665
++#: option.c:684
+ #, c-format
+ msgid "Valid options are:\n"
+ msgstr "Gültige Optionen sind:\n"
+
+-#: option.c:722 option.c:726
++#: option.c:741 option.c:745
+ msgid "bad port"
+ msgstr "unzulässiger Port"
+
+-#: option.c:753 option.c:785
++#: option.c:772 option.c:804
+ msgid "interface binding not supported"
+ msgstr "Schnittstellenbindung nicht unterstützt"
+
+-#: option.c:762 option.c:3494
++#: option.c:781 option.c:3570
+ msgid "bad interface name"
+ msgstr "unzulässiger Schnittestellenname"
+
+-#: option.c:792
++#: option.c:811
+ msgid "bad address"
+ msgstr "Fehlerhafte Adresse"
+
+-#: option.c:974
++#: option.c:993
+ msgid "unsupported encapsulation for IPv6 option"
+ msgstr "Nicht unterstützte Verkapselung für eine IPv6-Option"
+
+-#: option.c:988
++#: option.c:1007
+ msgid "bad dhcp-option"
+ msgstr "Fehlerhafte DHCP-Option"
+
+-#: option.c:1056
++#: option.c:1075
+ msgid "bad IP address"
+ msgstr "Fehlerhafte IP-Adresse"
+
+-#: option.c:1059 option.c:1197 option.c:2812
++#: option.c:1078 option.c:1216 option.c:2888
+ msgid "bad IPv6 address"
+ msgstr "Fehlerhafte IPv6-Adresse"
+
+-#: option.c:1224 option.c:1318
++#: option.c:1243 option.c:1337
+ msgid "bad domain in dhcp-option"
+ msgstr "Fehlerhafte Domäne in DHCP-Option"
+
+-#: option.c:1356
++#: option.c:1375
+ msgid "dhcp-option too long"
+ msgstr "DHCP-Option zu lang"
+
+-#: option.c:1363
++#: option.c:1382
+ msgid "illegal dhcp-match"
+ msgstr "Unzulässige dhcp-match-Option"
+
+-#: option.c:1425
++#: option.c:1444
+ msgid "illegal repeated flag"
+ msgstr "unzulässig wiederholte Markierung"
+
+-#: option.c:1433
++#: option.c:1452
+ msgid "illegal repeated keyword"
+ msgstr "unzulässig wiederholtes Schlüsselwort"
+
+-#: option.c:1495 option.c:4092
++#: option.c:1517 option.c:4186
+ #, c-format
+ msgid "cannot access directory %s: %s"
+ msgstr "Kann auf Verzeichnis %s nicht zugreifen: %s"
+
+-#: option.c:1541 tftp.c:493
++#: option.c:1563 tftp.c:493
+ #, c-format
+ msgid "cannot access %s: %s"
+ msgstr "Kann auf %s nicht zugreifen: %s"
+
+-#: option.c:1588
++#: option.c:1615
+ msgid "setting log facility is not possible under Android"
+ msgstr "Die Einstellung Protokolliereinrichtung kann unter Android nicht gesetzt werden"
+
+-#: option.c:1597
++#: option.c:1624
+ msgid "bad log facility"
+ msgstr "Falsche Protokolliereinrichtung"
+
+-#: option.c:1650
++#: option.c:1677
+ msgid "bad MX preference"
+ msgstr "unzulässige MX-Präferenz-Angabe"
+
+-#: option.c:1655
++#: option.c:1682
+ msgid "bad MX name"
+ msgstr "unzulässiger MX-Name"
+
+-#: option.c:1669
++#: option.c:1696
+ msgid "bad MX target"
+ msgstr "unzulässiges MX-Ziel"
+
+-#: option.c:1681
++#: option.c:1708
+ msgid "cannot run scripts under uClinux"
+ msgstr "unter uClinux ist die Skriptausführung nicht möglich"
+
+-#: option.c:1683
++#: option.c:1710
+ msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts"
+ msgstr "Neuübersetzung mit HAVE_SCRIPT nötig, um Lease-Änderungs-Skripte auszuführen"
+
+-#: option.c:1687
++#: option.c:1714
+ msgid "recompile with HAVE_LUASCRIPT defined to enable Lua scripts"
+ msgstr "Um Benutzerdefinierte Lua-Scripte zu ermöglichen, muss mit HAVE_LUASCRIPT neu kompiliert werden"
+
+-#: option.c:1928 option.c:1966 option.c:2015
++#: option.c:1970 option.c:2015 option.c:2071
+ msgid "bad prefix"
+ msgstr "unzulässiger Präfix"
+
+-#: option.c:2289
++#: option.c:2352
+ msgid "recompile with HAVE_IPSET defined to enable ipset directives"
+ msgstr "Um IPSet-Direktiven zu aktivieren, muss mit HAVE_IPSET neu übersetzt werden"
+
+-#: option.c:2469
++#: option.c:2545
+ msgid "bad port range"
+ msgstr "unzulässiger Portbereich"
+
+-#: option.c:2485
++#: option.c:2561
+ msgid "bad bridge-interface"
+ msgstr "unzulässige Brücken-Schnittstelle"
+
+-#: option.c:2545
++#: option.c:2621
+ msgid "only one tag allowed"
+ msgstr "nur eine Marke zulässig"
+
+-#: option.c:2565 option.c:2577 option.c:2683 option.c:2724
++#: option.c:2641 option.c:2653 option.c:2759 option.c:2800
+ msgid "bad dhcp-range"
+ msgstr "unzulässiger DHCP-Bereich"
+
+-#: option.c:2592
++#: option.c:2668
+ msgid "inconsistent DHCP range"
+ msgstr "inkonsistenter DHCP-Bereich"
+
+-#: option.c:2651
++#: option.c:2727
+ msgid "prefix length must be exactly 64 for RA subnets"
+ msgstr "Die Präfixlenge muss genau 64 für RA Subnetze sein"
+
+-#: option.c:2653
++#: option.c:2729
+ msgid "prefix length must be exactly 64 for subnet constructors"
+ msgstr "Die Präfixlenge muss genau 64 für Subnet Konstruktoren sein"
+
+-#: option.c:2657
++#: option.c:2733
+ msgid "prefix length must be at least 64"
+ msgstr "Die Präfixlänge muss mindestens 64 sein"
+
+-#: option.c:2660
++#: option.c:2736
+ msgid "inconsistent DHCPv6 range"
+ msgstr "Inkonsistenter DHCPv6-Bereich"
+
+-#: option.c:2671
++#: option.c:2747
+ msgid "prefix must be zero with \"constructor:\" argument"
+ msgstr "Prefix muss mit dem \"constructor:\" Argument Null sein"
+
+-#: option.c:2782 option.c:2830
++#: option.c:2858 option.c:2906
+ msgid "bad hex constant"
+ msgstr "Falscher Hexwert"
+
+-#: option.c:2804
++#: option.c:2880
+ msgid "cannot match tags in --dhcp-host"
+ msgstr "Kann die Tags in --dhcp-host nicht abgleichen"
+
+-#: option.c:2852
++#: option.c:2928
+ #, c-format
+ msgid "duplicate dhcp-host IP address %s"
+ msgstr "doppelte dhcp-host IP-Adresse %s"
+
+-#: option.c:2910
++#: option.c:2986
+ msgid "bad DHCP host name"
+ msgstr "unzulässiger DHCP-Hostname"
+
+-#: option.c:2992
++#: option.c:3068
+ msgid "bad tag-if"
+ msgstr "unzulässige bedingte Marke (tag-if)"
+
+-#: option.c:3316 option.c:3710
++#: option.c:3392 option.c:3786
+ msgid "invalid port number"
+ msgstr "unzulässige Portnummer"
+
+-#: option.c:3378
++#: option.c:3454
+ msgid "bad dhcp-proxy address"
+ msgstr "Fehlerhafte DHCP-Proxy-Adresse"
+
+-#: option.c:3404
++#: option.c:3480
+ msgid "Bad dhcp-relay"
+ msgstr "unzulässiger dhcp-relay"
+
+-#: option.c:3430
++#: option.c:3506
+ msgid "bad RA-params"
+ msgstr "unzulässige RA-Parameter"
+
+-#: option.c:3439
++#: option.c:3515
+ msgid "bad DUID"
+ msgstr "unzulässige DUID"
+
+-#: option.c:3481
++#: option.c:3557
+ msgid "invalid alias range"
+ msgstr "unzulässiger Alias-Bereich"
+
+-#: option.c:3535
++#: option.c:3611
+ msgid "bad CNAME"
+ msgstr "unzulässiger CNAME"
+
+-#: option.c:3540
++#: option.c:3616
+ msgid "duplicate CNAME"
+ msgstr "doppelter CNAME"
+
+-#: option.c:3560
++#: option.c:3636
+ msgid "bad PTR record"
+ msgstr "unzulässiger PTR-Eintrag"
+
+-#: option.c:3591
++#: option.c:3667
+ msgid "bad NAPTR record"
+ msgstr "unzulässiger NAPTR-Eintrag"
+
+-#: option.c:3625
++#: option.c:3701
+ msgid "bad RR record"
+ msgstr "unzulässiger RR-Eintrag"
+
+-#: option.c:3655
++#: option.c:3731
+ msgid "bad TXT record"
+ msgstr "unzulässiger TXT-Eintrag"
+
+-#: option.c:3696
++#: option.c:3772
+ msgid "bad SRV record"
+ msgstr "unzulässiger SRV-Eintrag"
+
+-#: option.c:3703
++#: option.c:3779
+ msgid "bad SRV target"
+ msgstr "unzulässiges SRV-Ziel"
+
+-#: option.c:3717
++#: option.c:3793
+ msgid "invalid priority"
+ msgstr "unzulässige Priorität"
+
+-#: option.c:3724
++#: option.c:3800
+ msgid "invalid weight"
+ msgstr "unzulässige Wichtung"
+
+-#: option.c:3748
++#: option.c:3824
+ msgid "Bad host-record"
+ msgstr "unzulässiger host-record"
+
+-#: option.c:3765
++#: option.c:3841
+ msgid "Bad name in host-record"
+ msgstr "Unzulässiger Name in host-record"
+
+-#: option.c:3826
++#: option.c:3906
+ msgid "bad trust anchor"
+ msgstr "unzulässiger Vertrauensursprung (Trust Anchor)"
+
+-#: option.c:3840
++#: option.c:3920
+ msgid "bad HEX in trust anchor"
+ msgstr "unzulässiger Hexwert in Vertrauensursprung (Trust Anchor)"
+
+-#: option.c:3850
++#: option.c:3930
+ msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DNSSEC/DBus support)"
+ msgstr "Nicht unterstützte Option (prüfen Sie, ob DNSMasq mit DHCP/TFTP/DNSSEC/DBus-Unterstützung übersetzt wurde)"
+
+-#: option.c:3909
++#: option.c:3989
+ msgid "missing \""
+ msgstr "fehlende \\\""
+
+-#: option.c:3966
++#: option.c:4046
+ msgid "bad option"
+ msgstr "unzulässige Option"
+
+-#: option.c:3968
++#: option.c:4048
+ msgid "extraneous parameter"
+ msgstr "überschüssiger Parameter"
+
+-#: option.c:3970
++#: option.c:4050
+ msgid "missing parameter"
+ msgstr "fehler Parameter"
+
+-#: option.c:3972
++#: option.c:4052
+ msgid "illegal option"
+ msgstr "unzulässige Option"
+
+-#: option.c:3979
++#: option.c:4059
+ msgid "error"
+ msgstr "Fehler"
+
+-#: option.c:3981
++#: option.c:4061
+ #, c-format
+ msgid " at line %d of %s"
+ msgstr " in Zeile %d von %s"
+
+-#: option.c:4045 option.c:4168 tftp.c:667
+-#, c-format
+-msgid "cannot read %s: %s"
+-msgstr "kann %s nicht lesen: %s"
+-
+-#: option.c:4229 option.c:4265
++#: option.c:4076 option.c:4323 option.c:4359
+ #, c-format
+ msgid "read %s"
+ msgstr "%s gelesen"
+
+-#: option.c:4331
++#: option.c:4139 option.c:4262 tftp.c:667
++#, c-format
++msgid "cannot read %s: %s"
++msgstr "kann %s nicht lesen: %s"
++
++#: option.c:4425
+ msgid "junk found in command line"
+ msgstr "Mist in der Kommandozeile gefunden"
+
+-#: option.c:4366
++#: option.c:4460
+ #, c-format
+ msgid "Dnsmasq version %s %s\n"
+ msgstr "Dnsmasq Version %s %s\n"
+
+-#: option.c:4367
++#: option.c:4461
+ #, c-format
+ msgid ""
+ "Compile time options: %s\n"
+@@ -1024,90 +1057,90 @@ msgstr ""
+ "Kompilierungs-Optionen %s\n"
+ "\n"
+
+-#: option.c:4368
++#: option.c:4462
+ #, c-format
+ msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
+ msgstr "Für diese Software wird ABSOLUT KEINE GARANTIE gewährt.\n"
+
+ # FIXME: this must be one long string! -- MA
+-#: option.c:4369
++#: option.c:4463
+ #, c-format
+ msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
+ msgstr "Dnsmasq ist freie Software, und du bist willkommen es weiter zu verteilen\n"
+
+-#: option.c:4370
++#: option.c:4464
+ #, c-format
+ msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
+ msgstr "unter den Bedingungen der GNU General Public Lizenz, Version 2 oder 3.\n"
+
+-#: option.c:4381
++#: option.c:4475
+ msgid "try --help"
+ msgstr "versuchen Sie --help"
+
+-#: option.c:4383
++#: option.c:4477
+ msgid "try -w"
+ msgstr "versuchen Sie -w"
+
+-#: option.c:4385
++#: option.c:4479
+ #, c-format
+ msgid "bad command line options: %s"
+ msgstr "unzulässige Optionen auf der Befehlszeile: %s"
+
+-#: option.c:4434
++#: option.c:4535
+ #, c-format
+ msgid "cannot get host-name: %s"
+ msgstr "kann Hostnamen nicht ermitteln: %s"
+
+-#: option.c:4462
++#: option.c:4563
+ msgid "only one resolv.conf file allowed in no-poll mode."
+ msgstr "mit -n/--no-poll ist nur eine resolv.conf-Datei zulässig."
+
+-#: option.c:4472
++#: option.c:4573
+ msgid "must have exactly one resolv.conf to read domain from."
+ msgstr "Um die Domäne zu lesen, muss genau eine resolv.conf-Datei verwendet werden."
+
+-#: option.c:4475 network.c:1506 dhcp.c:769
++#: option.c:4576 network.c:1506 dhcp.c:774
+ #, c-format
+ msgid "failed to read %s: %s"
+ msgstr "konnte %s nicht lesen: %s"
+
+-#: option.c:4492
++#: option.c:4593
+ #, c-format
+ msgid "no search directive found in %s"
+ msgstr "keine \"search\"-Anweisung in %s gefunden"
+
+-#: option.c:4513
++#: option.c:4614
+ msgid "there must be a default domain when --dhcp-fqdn is set"
+ msgstr "Es muss eine standard Domain gesetzt sein, wenn --dhcp-fqdn gesetzt ist"
+
+-#: option.c:4522
++#: option.c:4623
+ msgid "syntax check OK"
+ msgstr "Syntaxprüfung OK"
+
+-#: forward.c:114
++#: forward.c:111
+ #, c-format
+ msgid "failed to send packet: %s"
+ msgstr "Fehlgeschlagen, folgendes Paket zu senden: %s"
+
+-#: forward.c:574
++#: forward.c:572
+ msgid "discarding DNS reply: subnet option mismatch"
+ msgstr "Verwerfe DNS Antwort: Subnetoption stimmt nicht überrein"
+
+-#: forward.c:597
++#: forward.c:595
+ #, c-format
+ msgid "nameserver %s refused to do a recursive query"
+ msgstr "Namensserver %s hat eine rekursive Anfrage verweigert"
+
+-#: forward.c:629
++#: forward.c:627
+ #, c-format
+ msgid "possible DNS-rebind attack detected: %s"
+ msgstr "möglichen DNS-Rebind-Angriff entdeckt: %s"
+
+-#: forward.c:1132 forward.c:1663
++#: forward.c:1156 forward.c:1722
+ msgid "Ignoring query from non-local network"
+ msgstr "Ignoriere Anfragen vom nicht lokalen Netzwerk"
+
+-#: forward.c:2101
++#: forward.c:2178
+ #, c-format
+ msgid "Maximum number of concurrent DNS queries reached (max: %d)"
+ msgstr "Maximale Anzahl an nebenläufiger DNS-Anfragen erreicht (Max: %d)"
+@@ -1198,265 +1231,284 @@ msgstr "Benutze Namensserver %s#%d(via %s)"
+ msgid "using nameserver %s#%d"
+ msgstr "Benutze Namensserver %s#%d"
+
+-#: dnsmasq.c:154
+-msgid "No trust anchors provided for DNSSEC"
++#: dnsmasq.c:149
++msgid "dhcp-hostsdir, dhcp-optsdir and hostsdir are not supported on this platform"
++msgstr ""
++
++#: dnsmasq.c:156
++#, fuzzy
++msgid "no trust anchors provided for DNSSEC"
+ msgstr "Keine Vertrauensursprünge (Trust Anchor) für DNSSEC verfügbar"
+
+-#: dnsmasq.c:157
+-msgid "Cannot reduce cache size from default when DNSSEC enabled"
++#: dnsmasq.c:159
++#, fuzzy
++msgid "cannot reduce cache size from default when DNSSEC enabled"
+ msgstr "Kann die Standard Cachegröße nicht verkleinern, wenn DNSSEC aktiviert ist"
+
+-#: dnsmasq.c:159
++#: dnsmasq.c:161
+ msgid "DNSSEC not available: set HAVE_DNSSEC in src/config.h"
+ msgstr "DNSSEC nicht verfügbar: setzen Sie HAVE_DNSSEC in src/config.h"
+
+-#: dnsmasq.c:165
++#: dnsmasq.c:167
+ msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
+ msgstr "TFTP-Server nicht verfügbar, setzen Sie HAVE_TFTP in src/config.h"
+
+-#: dnsmasq.c:170
+-msgid "Cannot use --conntrack AND --query-port"
++#: dnsmasq.c:172
++#, fuzzy
++msgid "cannot use --conntrack AND --query-port"
+ msgstr "Kann nicht --conntrack UND --query-port einsetzen"
+
+-#: dnsmasq.c:173
+-msgid "Conntrack support not available: set HAVE_CONNTRACK in src/config.h"
++#: dnsmasq.c:175
++#, fuzzy
++msgid "conntrack support not available: set HAVE_CONNTRACK in src/config.h"
+ msgstr "Conntrack-Unterstützung nicht verfügbar: setze HAVE_CONNTRACK in src/config.h"
+
+-#: dnsmasq.c:178
++#: dnsmasq.c:180
+ msgid "asychronous logging is not available under Solaris"
+ msgstr "asynchrone Protokollierung unter Solaris nicht verfügbar"
+
+-#: dnsmasq.c:183
++#: dnsmasq.c:185
+ msgid "asychronous logging is not available under Android"
+ msgstr "Asynchrone Protokollierung unter Android nicht verfügbar"
+
+-#: dnsmasq.c:188
++#: dnsmasq.c:190
+ msgid "authoritative DNS not available: set HAVE_AUTH in src/config.h"
+ msgstr "Authoritatives DNS nicht verfügbar: Es muss HAVE_AUTH in src/config.h gesetzt sein"
+
+-#: dnsmasq.c:193
+-msgid "Loop detection not available: set HAVE_LOOP in src/config.h"
++#: dnsmasq.c:195
++#, fuzzy
++msgid "loop detection not available: set HAVE_LOOP in src/config.h"
+ msgstr "Loop-Erkennung nicht verfügbar, setzen Sie HAVE_LOOP in src/config.h"
+
+-#: dnsmasq.c:201
++#: dnsmasq.c:203
+ msgid "zone serial must be configured in --auth-soa"
+ msgstr "Zonen Seriennummer muss mit --auth-soa konfiguriert werden"
+
+-#: dnsmasq.c:219
++#: dnsmasq.c:221
+ msgid "dhcp-range constructor not available on this platform"
+ msgstr "dhcp-range Konstruktor ist auf dieser Plattform nicht verfübar"
+
+-#: dnsmasq.c:262
++#: dnsmasq.c:264
+ msgid "cannot set --bind-interfaces and --bind-dynamic"
+ msgstr "Kann nicht --bind-interfaces und --bind-dynamic setzen"
+
+-#: dnsmasq.c:265
++#: dnsmasq.c:267
+ #, c-format
+ msgid "failed to find list of interfaces: %s"
+ msgstr "konnte Schnitstellenliste nicht beziehen: %s"
+
+-#: dnsmasq.c:274
++#: dnsmasq.c:276
+ #, c-format
+ msgid "unknown interface %s"
+ msgstr "unbekannte Schnittstelle %s"
+
+-#: dnsmasq.c:330 dnsmasq.c:954
++#: dnsmasq.c:340 dnsmasq.c:1004
+ #, c-format
+ msgid "DBus error: %s"
+ msgstr "DBus-Fehler: %s"
+
+-#: dnsmasq.c:333
++#: dnsmasq.c:343
+ msgid "DBus not available: set HAVE_DBUS in src/config.h"
+ msgstr "DBus nicht verfügbar: setzen Sie HAVE_DBUS in src/config.h"
+
+-#: dnsmasq.c:361
++#: dnsmasq.c:371
+ #, c-format
+ msgid "unknown user or group: %s"
+ msgstr "Unbekannter Benutzer oder Gruppe: %s"
+
+-#: dnsmasq.c:416
++#: dnsmasq.c:426
+ #, c-format
+ msgid "cannot chdir to filesystem root: %s"
+ msgstr "kann nicht ins Wurzelverzeichnis des Dateisystems wechseln: %s"
+
+ # FIXME: this and the next would need commas after the version
+-#: dnsmasq.c:653
++#: dnsmasq.c:667
+ #, c-format
+ msgid "started, version %s DNS disabled"
+ msgstr "gestartet, Version %s, DNS abgeschaltet"
+
+-#: dnsmasq.c:655
++#: dnsmasq.c:669
+ #, c-format
+ msgid "started, version %s cachesize %d"
+ msgstr "gestartet, Version %s, Cachegröße %d"
+
+-#: dnsmasq.c:657
++#: dnsmasq.c:671
+ #, c-format
+ msgid "started, version %s cache disabled"
+ msgstr "Gestartet, Version %s Cache deaktiviert"
+
+-#: dnsmasq.c:659
++#: dnsmasq.c:673
+ #, c-format
+ msgid "compile time options: %s"
+ msgstr "Übersetzungsoptionen: %s"
+
+-#: dnsmasq.c:665
++#: dnsmasq.c:679
+ msgid "DBus support enabled: connected to system bus"
+ msgstr "DBus-Unterstützung eingeschaltet: mit Systembus verbunden"
+
+-#: dnsmasq.c:667
++#: dnsmasq.c:681
+ msgid "DBus support enabled: bus connection pending"
+ msgstr "DBus-Unterstützung eingeschaltet: warte auf Systembus-Verbindung"
+
+-#: dnsmasq.c:672
++#: dnsmasq.c:686
+ msgid "DNS service limited to local subnets"
+ msgstr "DNS-Dienst auf lokale Subnetze eingeschränkt"
+
+-#: dnsmasq.c:677
++#: dnsmasq.c:702
+ msgid "DNSSEC validation enabled"
+ msgstr "DNSSEC-Validierung aktiviert"
+
+-#: dnsmasq.c:679
++#: dnsmasq.c:705
+ msgid "DNSSEC signature timestamps not checked until first cache reload"
+ msgstr "DNSSEC Signatur-Zeitstempel werden erst ab dem ersten Neuladen des Caches überprüft"
+
+-#: dnsmasq.c:684
++#: dnsmasq.c:708
++#, fuzzy
++msgid "DNSSEC signature timestamps not checked until system time valid"
++msgstr "DNSSEC Signatur-Zeitstempel werden erst ab dem ersten Neuladen des Caches überprüft"
++
++#: dnsmasq.c:713
+ #, c-format
+ msgid "warning: failed to change owner of %s: %s"
+ msgstr "Warnung: konnte den Besitzer von %s nicht ändern: %s"
+
+-#: dnsmasq.c:688
++#: dnsmasq.c:717
+ msgid "setting --bind-interfaces option because of OS limitations"
+ msgstr "Aktiviere --bind-interfaces wegen Einschränkungen des Betriebssystems"
+
+-#: dnsmasq.c:698
++#: dnsmasq.c:727
+ #, c-format
+ msgid "warning: interface %s does not currently exist"
+ msgstr "Warnung: Schnittstelle %s existiert derzeit nicht"
+
+-#: dnsmasq.c:703
++#: dnsmasq.c:732
+ msgid "warning: ignoring resolv-file flag because no-resolv is set"
+ msgstr "Warnung: Ignoriere \"resolv-file\", weil \"no-resolv\" aktiv ist"
+
+-#: dnsmasq.c:706
++#: dnsmasq.c:735
+ msgid "warning: no upstream servers configured"
+ msgstr "Warnung: keine vorgelagerten (Upstream) Server konfiguriert"
+
+-#: dnsmasq.c:710
++#: dnsmasq.c:739
+ #, c-format
+ msgid "asynchronous logging enabled, queue limit is %d messages"
+ msgstr "asynchrone Protokollierung eingeschaltet, Warteschlange fasst %d Nachrichten"
+
+-#: dnsmasq.c:731
++#: dnsmasq.c:760
+ msgid "IPv6 router advertisement enabled"
+ msgstr "IPv6-Router-Advertisement aktiviert"
+
+-#: dnsmasq.c:736
++#: dnsmasq.c:765
+ #, c-format
+ msgid "DHCP, sockets bound exclusively to interface %s"
+ msgstr "DHCP, Sockets exklusiv an das Interface %s gebunden"
+
+ # FIXME: this and the next few must be full strings to be translatable - do not assemble in code"
+-#: dnsmasq.c:753
++#: dnsmasq.c:782
+ msgid "root is "
+ msgstr "Wurzel ist "
+
+-#: dnsmasq.c:753
++#: dnsmasq.c:782
+ msgid "enabled"
+ msgstr "Aktiviert"
+
+-#: dnsmasq.c:755
++#: dnsmasq.c:784
+ msgid "secure mode"
+ msgstr "sicherer Modus"
+
+-#: dnsmasq.c:781
++#: dnsmasq.c:810
+ #, c-format
+ msgid "restricting maximum simultaneous TFTP transfers to %d"
+ msgstr "Begrenze gleichzeitige TFTP-Übertragungen auf maximal %d"
+
+-#: dnsmasq.c:956
++#: dnsmasq.c:1006
+ msgid "connected to system DBus"
+ msgstr "Mit System-DBus verbunden"
+
+-#: dnsmasq.c:1106
++#: dnsmasq.c:1156
+ #, c-format
+ msgid "cannot fork into background: %s"
+ msgstr "kann nicht in den Hintergrund abspalten: %s"
+
+-#: dnsmasq.c:1109
++#: dnsmasq.c:1159
+ #, c-format
+ msgid "failed to create helper: %s"
+ msgstr "kann Helfer nicht erzeugen: %s"
+
+-#: dnsmasq.c:1112
++#: dnsmasq.c:1162
+ #, c-format
+ msgid "setting capabilities failed: %s"
+ msgstr "kann \"capabilities\" nicht setzen: %s"
+
+-#: dnsmasq.c:1115
++#: dnsmasq.c:1165
+ #, c-format
+ msgid "failed to change user-id to %s: %s"
+ msgstr "Kann nicht Benutzerrechte %s annehmen: %s"
+
+-#: dnsmasq.c:1118
++#: dnsmasq.c:1168
+ #, c-format
+ msgid "failed to change group-id to %s: %s"
+ msgstr "Kann nicht Gruppenrechte %s annehmen: %s"
+
+-#: dnsmasq.c:1121
++#: dnsmasq.c:1171
+ #, c-format
+ msgid "failed to open pidfile %s: %s"
+ msgstr "kann die Prozessidentifikations-(PID)-Datei %s nicht öffnen: %s"
+
+-#: dnsmasq.c:1124
++#: dnsmasq.c:1174
+ #, c-format
+ msgid "cannot open log %s: %s"
+ msgstr "Kann Logdatei %s nicht öffnen: %s"
+
+-#: dnsmasq.c:1127
++#: dnsmasq.c:1177
+ #, c-format
+ msgid "failed to load Lua script: %s"
+ msgstr "Konnte Lua-Script nicht laden: %s"
+
+-#: dnsmasq.c:1130
++#: dnsmasq.c:1180
+ #, c-format
+ msgid "TFTP directory %s inaccessible: %s"
+ msgstr "Das TFTP-Verzeichnis %s ist nicht zugreifbar: %s"
+
+-#: dnsmasq.c:1151
++#: dnsmasq.c:1183
++#, fuzzy, c-format
++msgid "cannot create timestamp file %s: %s"
++msgstr "kann Lease-Datei %s nicht öffnen: %s"
++
++#: dnsmasq.c:1204
+ msgid "now checking DNSSEC signature timestamps"
+ msgstr "Prüfe jetzt DNSSEC Signatur-Zeitstempel"
+
+-#: dnsmasq.c:1218
++#: dnsmasq.c:1271
+ #, c-format
+ msgid "script process killed by signal %d"
+ msgstr "Scriptprozess durch Signal %d getötet"
+
+-#: dnsmasq.c:1222
++#: dnsmasq.c:1275
+ #, c-format
+ msgid "script process exited with status %d"
+ msgstr "Scriptprozess hat sich mit Status %d beendet"
+
+-#: dnsmasq.c:1226
++#: dnsmasq.c:1279
+ #, c-format
+ msgid "failed to execute %s: %s"
+ msgstr "konnte %s nicht ausführen: %s"
+
+-#: dnsmasq.c:1281
++#: dnsmasq.c:1334
+ msgid "exiting on receipt of SIGTERM"
+ msgstr "beende nach Empfang von SIGTERM"
+
+-#: dnsmasq.c:1309
++#: dnsmasq.c:1362
+ #, c-format
+ msgid "failed to access %s: %s"
+ msgstr "konnte auf %s nicht zugreifen: %s"
+
+-#: dnsmasq.c:1339
++#: dnsmasq.c:1392
+ #, c-format
+ msgid "reading %s"
+ msgstr "lese %s"
+
+-#: dnsmasq.c:1350
++#: dnsmasq.c:1403
+ #, c-format
+ msgid "no servers found in %s, will retry"
+ msgstr "keine Server in %s gefunden, werde es später neu versuchen"
+@@ -1496,27 +1548,27 @@ msgstr "unbekannte Schnittstelle %s in bridge-interface"
+ msgid "DHCP packet received on %s which has no address"
+ msgstr "DHCP-Paket ohne Adresse an Schnittstelle %s empfangen"
+
+-#: dhcp.c:408
++#: dhcp.c:412
+ #, c-format
+ msgid "ARP-cache injection failed: %s"
+ msgstr "APR-Cache Injektion fehlgeschlagen: %s"
+
+-#: dhcp.c:506
++#: dhcp.c:511
+ #, c-format
+ msgid "DHCP range %s -- %s is not consistent with netmask %s"
+ msgstr "DHCP-Bereich %s - %s passt nicht zur Netzmaske %s"
+
+-#: dhcp.c:807
++#: dhcp.c:812
+ #, c-format
+ msgid "bad line at %s line %d"
+ msgstr "ungültige Zeile %2$d in Datei %1$s"
+
+-#: dhcp.c:850
++#: dhcp.c:855
+ #, c-format
+ msgid "ignoring %s line %d, duplicate name or IP address"
+ msgstr "ignoriere %s Zeile %d, doppelter Name oder doppelte IP-Adresse"
+
+-#: dhcp.c:994 rfc3315.c:2089
++#: dhcp.c:999 rfc3315.c:2139
+ #, c-format
+ msgid "DHCP relay %s -> %s"
+ msgstr "DHCP Weiterleitung %s -> %s"
+@@ -1591,12 +1643,12 @@ msgstr "%u Benutzerklasse: %s"
+ msgid "disabled"
+ msgstr "deaktiviert"
+
+-#: rfc2131.c:539 rfc2131.c:967 rfc2131.c:1385 rfc3315.c:602 rfc3315.c:823
+-#: rfc3315.c:1095
++#: rfc2131.c:539 rfc2131.c:967 rfc2131.c:1385 rfc3315.c:603 rfc3315.c:860
++#: rfc3315.c:1139
+ msgid "ignored"
+ msgstr "ignoriert"
+
+-#: rfc2131.c:554 rfc2131.c:1205 rfc3315.c:873
++#: rfc2131.c:554 rfc2131.c:1205 rfc3315.c:910
+ msgid "address in use"
+ msgstr "Adresse in Nutzung"
+
+@@ -1616,7 +1668,7 @@ msgstr "Keine Adresse konfiguriert"
+ msgid "no leases left"
+ msgstr "Keine Leases übrig"
+
+-#: rfc2131.c:691 rfc3315.c:475
++#: rfc2131.c:691 rfc3315.c:476
+ #, c-format
+ msgid "%u client provides name: %s"
+ msgstr "%u Klient stellt Name bereit: %s"
+@@ -1625,7 +1677,7 @@ msgstr "%u Klient stellt Name bereit: %s"
+ msgid "PXE BIS not supported"
+ msgstr "PXE BIS nicht unterstützt"
+
+-#: rfc2131.c:935 rfc3315.c:1189
++#: rfc2131.c:935 rfc3315.c:1233
+ #, c-format
+ msgid "disabling DHCP static address %s for %s"
+ msgstr "schalte statische DHCP-Adresse %s für %s ab"
+@@ -1663,7 +1715,7 @@ msgstr "Falsche Server-ID"
+ msgid "wrong address"
+ msgstr "Falsche Adresse"
+
+-#: rfc2131.c:1143 rfc3315.c:969
++#: rfc2131.c:1143 rfc3315.c:1006
+ msgid "lease not found"
+ msgstr "Lease nicht gefunden"
+
+@@ -1713,7 +1765,7 @@ msgstr "kann DHCP/BOOTP-Opition %d nicht setzen: kein Platz mehr im Paket"
+ msgid "PXE menu too large"
+ msgstr "PXE-Menüeintrag zu groß"
+
+-#: rfc2131.c:2173 rfc3315.c:1456
++#: rfc2131.c:2173 rfc3315.c:1506
+ #, c-format
+ msgid "%u requested options: %s"
+ msgstr "%u angeforderte Optionen: %s"
+@@ -1728,7 +1780,7 @@ msgstr "Kann RFC3925-Option nicht senden: zu viele Optionen für Unternehmen Nr.
+ msgid "cannot create netlink socket: %s"
+ msgstr "kann Netlink-Socket nicht erzeugen: %s"
+
+-#: netlink.c:347
++#: netlink.c:348
+ #, c-format
+ msgid "netlink returns error: %s"
+ msgstr "Netlink liefert Fehler %s"
+@@ -1846,63 +1898,63 @@ msgstr "Kein Adressbereich verfügbar für die DHCPv6-Anfrage via %s"
+ msgid "%u available DHCPv6 subnet: %s/%d"
+ msgstr "%u verfügbare(s) DHCPv6-Subnetz: %s/%d"
+
+-#: rfc3315.c:379
++#: rfc3315.c:380
+ #, c-format
+ msgid "%u vendor class: %u"
+ msgstr "%u Herstellerklasse: %u"
+
+-#: rfc3315.c:427
++#: rfc3315.c:428
+ #, c-format
+ msgid "%u client MAC address: %s"
+ msgstr "%u Klient MAC-Adresse: %s"
+
+ # FIXME: do not assemble
+-#: rfc3315.c:659
++#: rfc3315.c:660
+ #, c-format
+ msgid "unknown prefix-class %d"
+ msgstr "unbekannte Präfixklasse %d"
+
+-#: rfc3315.c:791 rfc3315.c:913
++#: rfc3315.c:803 rfc3315.c:902
++msgid "address unavailable"
++msgstr "Adresse nicht verfügbar"
++
++#: rfc3315.c:815 rfc3315.c:950 rfc3315.c:1283
+ msgid "success"
+ msgstr "Erfolg"
+
+-#: rfc3315.c:806 rfc3315.c:808 rfc3315.c:921 rfc3315.c:923
++#: rfc3315.c:843 rfc3315.c:845 rfc3315.c:958 rfc3315.c:960
+ msgid "no addresses available"
+ msgstr "Keine Adressen verfügbar"
+
+-#: rfc3315.c:865
+-msgid "address unavailable"
+-msgstr "Adresse nicht verfügbar"
+-
+-#: rfc3315.c:900
++#: rfc3315.c:937
+ msgid "not on link"
+ msgstr "nicht on link"
+
+-#: rfc3315.c:973 rfc3315.c:1151 rfc3315.c:1228
++#: rfc3315.c:1010 rfc3315.c:1195 rfc3315.c:1272
+ msgid "no binding found"
+ msgstr "Keine Bindung gefunden"
+
+-#: rfc3315.c:1011
++#: rfc3315.c:1048
+ msgid "deprecated"
+ msgstr "veraltet"
+
+-#: rfc3315.c:1016
++#: rfc3315.c:1053
+ msgid "address invalid"
+ msgstr "Adresse ungültig"
+
+-#: rfc3315.c:1061
++#: rfc3315.c:1100
+ msgid "confirm failed"
+ msgstr "Bestätigung fehlgeschlagen"
+
+-#: rfc3315.c:1072
++#: rfc3315.c:1116
+ msgid "all addresses still on link"
+ msgstr "Alle Adressen immer noch on link"
+
+-#: rfc3315.c:1160
++#: rfc3315.c:1204
+ msgid "release received"
+ msgstr "Freigabe empfangen"
+
+-#: rfc3315.c:2080
++#: rfc3315.c:2130
+ msgid "Cannot multicast to DHCPv6 server without correct interface"
+ msgstr "Kann nicht zum DHCPv6 Server multicasten ohne korrekte Schnittstelle"
+
+@@ -1995,7 +2047,7 @@ msgstr "DHCP Weiterleitung von %s nach %s"
+ msgid "cannot create ICMPv6 socket: %s"
+ msgstr "Kann ICMPv6-Socket nicht erzeugen: %s"
+
+-#: auth.c:429
++#: auth.c:436
+ #, c-format
+ msgid "ignoring zone transfer request from %s"
+ msgstr "ignoriere Zonentransfer-Anfrage von %s"
+@@ -2010,54 +2062,89 @@ msgstr "konnte Kernelversion nicht finden: %s"
+ msgid "failed to create IPset control socket: %s"
+ msgstr "konnte IPset-Kontroll-Socket nicht erzeugen: %s"
+
++#: dnssec.c:425 dnssec.c:469
++#, fuzzy, c-format
++msgid "failed to update mtime on %s: %s"
++msgstr "kann die Prozessidentifikations-(PID)-Datei %s nicht öffnen: %s"
++
+ #: blockdata.c:58
+ #, c-format
+ msgid "DNSSEC memory in use %u, max %u, allocated %u"
+ msgstr "DNSSEC Speicher in Benutzung %u, Max %u, zugewiesen %u"
+
+-#: tables.c:76
++#: tables.c:80
+ msgid "error: fill_addr missused"
+ msgstr "Fehler: fill_addr falsch verwendet"
+
+-#: tables.c:105
++#: tables.c:109
+ #, c-format
+ msgid "failed to access pf devices: %s"
+ msgstr "konnte auf pf Geräte nicht zugreifen: %s"
+
+-#: tables.c:119
++#: tables.c:123
+ #, c-format
+ msgid "warning: no opened pf devices %s"
+ msgstr "Warnung: Keine geöffneten pf Geräte %s"
+
+-#: tables.c:127
++#: tables.c:131
+ #, c-format
+ msgid "error: cannot use table name %s"
+ msgstr "Fehler: Kann Tabellenname %s nicht benutzen"
+
+-#: tables.c:135
++#: tables.c:139
+ #, c-format
+ msgid "error: cannot strlcpy table name %s"
+ msgstr "Fehler: Kann den Tabellennamen %s nicht strlcpy"
+
+-#: tables.c:141
++#: tables.c:145
+ #, c-format
+ msgid "warning: pfr_add_tables: %s(%d)"
+ msgstr "Warnung: pfr_add_tables: %s(%d)"
+
+-#: tables.c:147
++#: tables.c:151
+ msgid "info: table created"
+ msgstr "Info: Tabelle erstellt"
+
+-#: tables.c:158
++#: tables.c:162
+ #, c-format
+ msgid "warning: DIOCR%sADDRS: %s"
+ msgstr "Warnung: DIOCR%sADDRS: %s"
+
+-#: tables.c:162
++#: tables.c:166
+ #, c-format
+ msgid "%d addresses %s"
+ msgstr "%d Adressen %s"
+
++#: inotify.c:46
++#, fuzzy, c-format
++msgid "failed to create inotify: %s"
++msgstr "kann Helfer nicht erzeugen: %s"
++
++#: inotify.c:60
++#, fuzzy, c-format
++msgid "cannot cannonicalise resolv-file %s: %s"
++msgstr "kann Lease-Datei %s nicht öffnen: %s"
++
++#: inotify.c:72
++#, c-format
++msgid "directory %s for resolv-file is missing, cannot poll"
++msgstr ""
++
++#: inotify.c:75 inotify.c:112
++#, fuzzy, c-format
++msgid "failed to create inotify for %s: %s"
++msgstr "Konnte Empfangs-Socket für %s: %s nicht erzeugen"
++
++#: inotify.c:97
++#, fuzzy, c-format
++msgid "bad dynamic directory %s: %s"
++msgstr "Kann auf Verzeichnis %s nicht zugreifen: %s"
++
++#: inotify.c:197
++#, c-format
++msgid "inotify, new or changed file %s"
++msgstr ""
++
+ #~ msgid "no interface with address %s"
+ #~ msgstr "keine Schnittstelle mit Adresse %s"
+
+diff --git a/po/es.po b/po/es.po
+index 0bdff67f720b..b85696072661 100644
+--- a/po/es.po
++++ b/po/es.po
+@@ -16,70 +16,70 @@ msgstr ""
+ "Content-Transfer-Encoding: 8bit\n"
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+-#: cache.c:505
++#: cache.c:523
+ msgid "Internal error in cache."
+ msgstr ""
+
+-#: cache.c:908
++#: cache.c:941
+ #, fuzzy, c-format
+ msgid "failed to load names from %s: %s"
+ msgstr "no se pudo cargar nombres desde %s: %s"
+
+-#: cache.c:934 dhcp.c:820
++#: cache.c:967 dhcp.c:825
+ #, fuzzy, c-format
+ msgid "bad address at %s line %d"
+ msgstr "dirección errónea en %s línea %d"
+
+-#: cache.c:985 dhcp.c:836
++#: cache.c:1018 dhcp.c:841
+ #, c-format
+ msgid "bad name at %s line %d"
+ msgstr "nombre erróneo en %s línea %d"
+
+-#: cache.c:992 dhcp.c:911
++#: cache.c:1027 dhcp.c:916
+ #, c-format
+ msgid "read %s - %d addresses"
+ msgstr "direcciónes %s - %d leídas"
+
+-#: cache.c:1100
++#: cache.c:1135
+ msgid "cleared cache"
+ msgstr "el caché fue liberado"
+
+-#: cache.c:1123
++#: cache.c:1164
+ #, c-format
+ msgid "No IPv4 address found for %s"
+ msgstr ""
+
+-#: cache.c:1201
++#: cache.c:1242
+ #, c-format
+ msgid "%s is a CNAME, not giving it to the DHCP lease of %s"
+ msgstr "%s es un CNAME, no se le está dando concesión DHCP de %s"
+
+-#: cache.c:1225
++#: cache.c:1266
+ #, c-format
+ msgid "not giving name %s to the DHCP lease of %s because the name exists in %s with address %s"
+ msgstr "no otorgando nombre %s a concesión DHCP de %s porque el nombre existe en %s con dirección %s"
+
+-#: cache.c:1366
++#: cache.c:1421
+ #, c-format
+ msgid "time %lu"
+ msgstr "tiempo %lu"
+
+-#: cache.c:1367
++#: cache.c:1422
+ #, fuzzy, c-format
+ msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
+ msgstr "tamaño de caché %d, %d/%d inserciónes de caché reutilizaron objetos no vencidos."
+
+-#: cache.c:1369
++#: cache.c:1424
+ #, c-format
+ msgid "queries forwarded %u, queries answered locally %u"
+ msgstr "búsquedas reenviadas %u, búsquedas respondidas localmente %u"
+
+-#: cache.c:1372
++#: cache.c:1427
+ #, fuzzy, c-format
+ msgid "queries for authoritative zones %u"
+ msgstr "Fijar TTL para respuestas autoritarias"
+
+-#: cache.c:1398
++#: cache.c:1453
+ #, c-format
+ msgid "server %s#%d: queries sent %u, retried or failed %u"
+ msgstr "servidor %s#%d: búsquedas enviadas %u, reintentadas o fallidas %u"
+@@ -94,7 +94,7 @@ msgstr "no se pudo crear valor semilla para el generador de n
+ msgid "failed to allocate memory"
+ msgstr "no se pudo asignar memoria"
+
+-#: util.c:243 option.c:579
++#: util.c:243 option.c:598
+ msgid "could not get memory"
+ msgstr "no se pudo adquirir memoria"
+
+@@ -108,617 +108,650 @@ msgstr "no se puede crear pipe: %s"
+ msgid "failed to allocate %d bytes"
+ msgstr "no se pudo asignar %d bytes"
+
+-#: util.c:429
++#: util.c:430
+ #, c-format
+ msgid "infinite"
+ msgstr "infinito"
+
+-#: option.c:318
++#: option.c:330
+ msgid "Specify local address(es) to listen on."
+ msgstr "Especificar dirección(es) locales dónde escuchar."
+
+-#: option.c:319
++#: option.c:331
+ msgid "Return ipaddr for all hosts in specified domains."
+ msgstr "Retornar ipaddr (dirección IP) para todos los hosts en los dominios especificados."
+
+-#: option.c:320
++#: option.c:332
+ msgid "Fake reverse lookups for RFC1918 private address ranges."
+ msgstr "Falsificar búsquedas reversas para rangos de dirección privados RFC1918."
+
+-#: option.c:321
++#: option.c:333
+ msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
+ msgstr "Tratar ipaddr (dirección IP) como NXDOMAIN (derrota comodín Verisign)."
+
+-#: option.c:322
++#: option.c:334
+ #, c-format
+ msgid "Specify the size of the cache in entries (defaults to %s)."
+ msgstr "Especificar tamaño de caché en cuanto a cantidad de objetos (%s por predeterminado)."
+
+-#: option.c:323
++#: option.c:335
+ #, c-format
+ msgid "Specify configuration file (defaults to %s)."
+ msgstr "Especificar archivo de configuración (%s por predeterminado)."
+
+-#: option.c:324
++#: option.c:336
+ msgid "Do NOT fork into the background: run in debug mode."
+ msgstr "NO hacer un fork hacia el fondo: correr en modo debug."
+
+-#: option.c:325
++#: option.c:337
+ msgid "Do NOT forward queries with no domain part."
+ msgstr "NO reenviar búsquedas sin parte de dominio."
+
+-#: option.c:326
++#: option.c:338
+ msgid "Return self-pointing MX records for local hosts."
+ msgstr "Retornar expedientes MX auto-señaladores para hosts locales."
+
+-#: option.c:327
++#: option.c:339
+ msgid "Expand simple names in /etc/hosts with domain-suffix."
+ msgstr "Expandir nombres simples en /etc/hosts con domain-suffix (sufijo de dominio)."
+
+-#: option.c:328
++#: option.c:340
+ msgid "Don't forward spurious DNS requests from Windows hosts."
+ msgstr "No reenviar pedidos DNS falsos desde máquinas Windows."
+
+-#: option.c:329
++#: option.c:341
+ msgid "Enable DHCP in the range given with lease duration."
+ msgstr "Habilitar DHCP dentro del rango brindado con duración de concesión."
+
+-#: option.c:330
++#: option.c:342
+ #, c-format
+ msgid "Change to this group after startup (defaults to %s)."
+ msgstr "Cambiar a este grupo después del inicio (%s por predeterminado)."
+
+-#: option.c:331
++#: option.c:343
+ msgid "Set address or hostname for a specified machine."
+ msgstr "Fijar dirección o nombre de host para una máquina especificada."
+
+-#: option.c:332
++#: option.c:344
+ #, fuzzy
+ msgid "Read DHCP host specs from file."
+ msgstr "Leer especificaciones DHCP de host desde archivo"
+
+-#: option.c:333
++#: option.c:345
+ #, fuzzy
+ msgid "Read DHCP option specs from file."
+ msgstr "Leer opciones DHCP de host desde archivo"
+
+-#: option.c:334
++#: option.c:346
++#, fuzzy
++msgid "Read DHCP host specs from a directory."
++msgstr "Leer especificaciones DHCP de host desde archivo"
++
++#: option.c:347
++#, fuzzy
++msgid "Read DHCP options from a directory."
++msgstr "Leer opciones DHCP de host desde archivo"
++
++#: option.c:348
+ msgid "Evaluate conditional tag expression."
+ msgstr "Evaluar expresión condicional de etiqueta."
+
+-#: option.c:335
++#: option.c:349
+ #, c-format
+ msgid "Do NOT load %s file."
+ msgstr "NO cargar archivo %s."
+
+-#: option.c:336
++#: option.c:350
+ #, c-format
+ msgid "Specify a hosts file to be read in addition to %s."
+ msgstr "Especificar un archivo de hosts para ser leído adicionalmente a %s."
+
+-#: option.c:337
++#: option.c:351
++#, fuzzy
++msgid "Read hosts files from a directory."
++msgstr "Leer especificaciones DHCP de host desde archivo"
++
++#: option.c:352
+ msgid "Specify interface(s) to listen on."
+ msgstr "Especificar interfase(s) donde escuchar."
+
+-#: option.c:338
++#: option.c:353
+ msgid "Specify interface(s) NOT to listen on."
+ msgstr "Especificar interfase(s) donde NO escuchar."
+
+-#: option.c:339
++#: option.c:354
+ #, fuzzy
+ msgid "Map DHCP user class to tag."
+ msgstr "Trazar clase de usuario DHCP a etiqueta."
+
+-#: option.c:340
++#: option.c:355
+ msgid "Map RFC3046 circuit-id to tag."
+ msgstr "Trazar circuit-id (identificación de circuito) RFC3046 a etiqueta."
+
+-#: option.c:341
++#: option.c:356
+ msgid "Map RFC3046 remote-id to tag."
+ msgstr "Trazar remote-id (identificación remota) RFC3046 a etiqueta."
+
+-#: option.c:342
++#: option.c:357
+ msgid "Map RFC3993 subscriber-id to tag."
+ msgstr "Trazar subscriber-id (identificación de suscritor) RFC3993 a etiqueta."
+
+-#: option.c:343
++#: option.c:358
+ #, fuzzy
+ msgid "Don't do DHCP for hosts with tag set."
+ msgstr "No hacer DHCP para hosts con etiqueta fijada."
+
+-#: option.c:344
++#: option.c:359
+ #, fuzzy
+ msgid "Force broadcast replies for hosts with tag set."
+ msgstr "Forzar respuestas broadcast para hosts con etiqueta fijada."
+
+-#: option.c:345
++#: option.c:360
+ msgid "Do NOT fork into the background, do NOT run in debug mode."
+ msgstr "NO hacer un fork hacia el fondo, NO correr en modo debug."
+
+-#: option.c:346
++#: option.c:361
+ msgid "Assume we are the only DHCP server on the local network."
+ msgstr "Asumir que somos el único servidor DHCP en la red local."
+
+-#: option.c:347
++#: option.c:362
+ #, c-format
+ msgid "Specify where to store DHCP leases (defaults to %s)."
+ msgstr "Especificar donde almacenar concesión DHCP (%s por predeterminado)."
+
+-#: option.c:348
++#: option.c:363
+ msgid "Return MX records for local hosts."
+ msgstr "Retornar expedientes MX para hosts locales."
+
+-#: option.c:349
++#: option.c:364
+ msgid "Specify an MX record."
+ msgstr "Especificar un expediente MX."
+
+-#: option.c:350
++#: option.c:365
+ msgid "Specify BOOTP options to DHCP server."
+ msgstr "Especificar opciones BOOTP a servidor DHCP."
+
+-#: option.c:351
++#: option.c:366
+ #, c-format
+ msgid "Do NOT poll %s file, reload only on SIGHUP."
+ msgstr "NO revisar archivo %s periódicamente, recargar solo con SIGHUP."
+
+-#: option.c:352
++#: option.c:367
+ msgid "Do NOT cache failed search results."
+ msgstr "NO almacenar en caché resultados de búsquedas fallidas."
+
+-#: option.c:353
++#: option.c:368
+ #, c-format
+ msgid "Use nameservers strictly in the order given in %s."
+ msgstr "Usar servidores DNS estrictamente en el órden brindado en %s."
+
+-#: option.c:354
++#: option.c:369
+ #, fuzzy
+ msgid "Specify options to be sent to DHCP clients."
+ msgstr "Especificar opciones para ser enviadas a clientes DHCP."
+
+-#: option.c:355
++#: option.c:370
+ msgid "DHCP option sent even if the client does not request it."
+ msgstr "Opción DHCP enviada aún si el cliente no la pide."
+
+-#: option.c:356
++#: option.c:371
+ msgid "Specify port to listen for DNS requests on (defaults to 53)."
+ msgstr "Especificar puerto donde escuchar por búsquedas DNS (53 por predeterminado)."
+
+-#: option.c:357
++#: option.c:372
+ #, c-format
+ msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
+ msgstr "Tamaño máximo de paquetes UDP soportado para EDNS.0 (%s por predeterminado)."
+
+-#: option.c:358
++#: option.c:373
+ #, fuzzy
+ msgid "Log DNS queries."
+ msgstr "Bitacorear búsquedas DNS."
+
+-#: option.c:359
++#: option.c:374
+ #, fuzzy
+ msgid "Force the originating port for upstream DNS queries."
+ msgstr "Enforzar el puerto original para búsquedas DNS subida."
+
+-#: option.c:360
++#: option.c:375
+ msgid "Do NOT read resolv.conf."
+ msgstr "NO leer resolv.conf."
+
+-#: option.c:361
++#: option.c:376
+ #, c-format
+ msgid "Specify path to resolv.conf (defaults to %s)."
+ msgstr "Especificar el path hacia resolv.conf (%s por predeterminado)."
+
+-#: option.c:362
++#: option.c:377
+ #, fuzzy
+ msgid "Specify path to file with server= options"
+ msgstr "Especificar path de archivo PID (%s por predeterminado)."
+
+-#: option.c:363
++#: option.c:378
+ msgid "Specify address(es) of upstream servers with optional domains."
+ msgstr "Especificar dirección(es) de servidores subida con dominios opcionales."
+
+-#: option.c:364
++#: option.c:379
+ #, fuzzy
+ msgid "Specify address of upstream servers for reverse address queries"
+ msgstr "Especificar dirección(es) de servidores subida con dominios opcionales."
+
+-#: option.c:365
++#: option.c:380
+ msgid "Never forward queries to specified domains."
+ msgstr "Nunca reenviar búsquedas a dominios especificados."
+
+-#: option.c:366
++#: option.c:381
+ msgid "Specify the domain to be assigned in DHCP leases."
+ msgstr "Especificar el dominio para ser asignado en concesión DHCP."
+
+-#: option.c:367
++#: option.c:382
+ msgid "Specify default target in an MX record."
+ msgstr "Especificar destino predeterminado en un expediente MX."
+
+-#: option.c:368
++#: option.c:383
+ msgid "Specify time-to-live in seconds for replies from /etc/hosts."
+ msgstr "Especificar tiempo de vida en segundos para respuestas desde /etc/hosts."
+
+-#: option.c:369
++#: option.c:384
+ #, fuzzy
+ msgid "Specify time-to-live in seconds for negative caching."
+ msgstr "Especificar tiempo de vida en segundos para caché negativo."
+
+-#: option.c:370
++#: option.c:385
+ #, fuzzy
+ msgid "Specify time-to-live in seconds for maximum TTL to send to clients."
+ msgstr "Especificar tiempo de vida en segundos para respuestas desde /etc/hosts."
+
+-#: option.c:371
++#: option.c:386
++#, fuzzy
++msgid "Specify time-to-live ceiling for cache."
++msgstr "Especificar tiempo de vida en segundos para caché negativo."
++
++#: option.c:387
++#, fuzzy
++msgid "Specify time-to-live floor for cache."
++msgstr "Especificar tiempo de vida en segundos para caché negativo."
++
++#: option.c:388
+ #, c-format
+ msgid "Change to this user after startup. (defaults to %s)."
+ msgstr "Cambiar a este usuario despues del inicio (%s por predeterminado)."
+
+-#: option.c:372
++#: option.c:389
+ #, fuzzy
+ msgid "Map DHCP vendor class to tag."
+ msgstr "Trazar clase de vendedor DHCP a etiqueta."
+
+-#: option.c:373
++#: option.c:390
+ msgid "Display dnsmasq version and copyright information."
+ msgstr "Mostrar información sobre la versión y copyright de dnsmasq."
+
+-#: option.c:374
++#: option.c:391
+ msgid "Translate IPv4 addresses from upstream servers."
+ msgstr "Traducir direcciones IPv4 desde servidores subida."
+
+-#: option.c:375
++#: option.c:392
+ msgid "Specify a SRV record."
+ msgstr "Especificar un expediente SRV."
+
+-#: option.c:376
++#: option.c:393
+ msgid "Display this message. Use --help dhcp for known DHCP options."
+ msgstr "Mostrar este mensaje. Usar --help dhcp para opciones DHCP conocidas."
+
+-#: option.c:377
++#: option.c:394
+ #, fuzzy, c-format
+ msgid "Specify path of PID file (defaults to %s)."
+ msgstr "Especificar path de archivo PID (%s por predeterminado)."
+
+-#: option.c:378
++#: option.c:395
+ #, c-format
+ msgid "Specify maximum number of DHCP leases (defaults to %s)."
+ msgstr "Especificar número máximo de concesión DHCP (%s por predeterminado)."
+
+-#: option.c:379
++#: option.c:396
+ msgid "Answer DNS queries based on the interface a query was sent to."
+ msgstr "Responder a búsquedas DNS en base a la interfase a la cuál fueron enviadas."
+
+-#: option.c:380
++#: option.c:397
+ msgid "Specify TXT DNS record."
+ msgstr "Especificar expediente DNS TXT."
+
+-#: option.c:381
++#: option.c:398
+ #, fuzzy
+ msgid "Specify PTR DNS record."
+ msgstr "Especificar expediente DNS PTR."
+
+-#: option.c:382
++#: option.c:399
+ msgid "Give DNS name to IPv4 address of interface."
+ msgstr "Otorgar nombre DNS a dirección IPv4 de interfase."
+
+-#: option.c:383
++#: option.c:400
+ msgid "Bind only to interfaces in use."
+ msgstr "Acoplar solo a interfases en uso."
+
+-#: option.c:384
++#: option.c:401
+ #, c-format
+ msgid "Read DHCP static host information from %s."
+ msgstr "Leer información sobre hosts DHCP estáticos desde %s."
+
+-#: option.c:385
++#: option.c:402
+ msgid "Enable the DBus interface for setting upstream servers, etc."
+ msgstr "Habilitar la interfase DBus para fijar servidores subida, etc."
+
+-#: option.c:386
++#: option.c:403
+ msgid "Do not provide DHCP on this interface, only provide DNS."
+ msgstr "No proveer DHCP en esta interfase, sólo proveer DNS."
+
+-#: option.c:387
++#: option.c:404
+ msgid "Enable dynamic address allocation for bootp."
+ msgstr "Habilitar alocación dinámica de direcciónes para BOOTP."
+
+-#: option.c:388
++#: option.c:405
+ #, fuzzy
+ msgid "Map MAC address (with wildcards) to option set."
+ msgstr "Trazar dirección MAC (con comodínes) a opción fijada."
+
+-#: option.c:389
++#: option.c:406
+ msgid "Treat DHCP requests on aliases as arriving from interface."
+ msgstr "Tratar pedidos DHCP en alias como si llegaran de la interfase."
+
+-#: option.c:390
++#: option.c:407
+ msgid "Disable ICMP echo address checking in the DHCP server."
+ msgstr "Deshabilitar verificación de direcciónes para echo ICMP en el servidor DHCP."
+
+-#: option.c:391
++#: option.c:408
+ #, fuzzy
+ msgid "Shell script to run on DHCP lease creation and destruction."
+ msgstr "Archivo guión para ejecutar cuando se crea o destruye una concesión DHCP."
+
+-#: option.c:392
++#: option.c:409
+ #, fuzzy
+ msgid "Lua script to run on DHCP lease creation and destruction."
+ msgstr "Archivo guión para ejecutar cuando se crea o destruye una concesión DHCP."
+
+-#: option.c:393
++#: option.c:410
+ #, fuzzy
+ msgid "Run lease-change scripts as this user."
+ msgstr "Correr archivo guión de cambio de concesión como este usuario."
+
+-#: option.c:394
++#: option.c:411
+ msgid "Read configuration from all the files in this directory."
+ msgstr "Leer configuración desde todos los archivos en este directorio."
+
+-#: option.c:395
++#: option.c:412
+ #, fuzzy
+ msgid "Log to this syslog facility or file. (defaults to DAEMON)"
+ msgstr "Bitacorear a esta facilidad syslog o archivo. (DAEMON por predeterminado)"
+
+-#: option.c:396
++#: option.c:413
+ msgid "Do not use leasefile."
+ msgstr "No usar archivo de concesión."
+
+-#: option.c:397
++#: option.c:414
+ #, fuzzy, c-format
+ msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
+ msgstr "Número máximo de búsquedas DNS simultáneas. (%s por predeterminado)"
+
+-#: option.c:398
++#: option.c:415
+ #, c-format
+ msgid "Clear DNS cache when reloading %s."
+ msgstr "Liberar caché DNS al recargar %s."
+
+-#: option.c:399
++#: option.c:416
+ msgid "Ignore hostnames provided by DHCP clients."
+ msgstr "Ignorar nombres de host brindados por clientes DHCP."
+
+-#: option.c:400
++#: option.c:417
+ msgid "Do NOT reuse filename and server fields for extra DHCP options."
+ msgstr "NO reutilizar campos de nombre de archivo y servidor para opciones DHCP extra."
+
+-#: option.c:401
++#: option.c:418
+ msgid "Enable integrated read-only TFTP server."
+ msgstr "Habilitar servidor integrado TFTP solo-lectura."
+
+-#: option.c:402
++#: option.c:419
+ msgid "Export files by TFTP only from the specified subtree."
+ msgstr "Exportar archivos vía TFTP solo del sub-árbol especificado."
+
+-#: option.c:403
++#: option.c:420
+ msgid "Add client IP address to tftp-root."
+ msgstr "Agregar IP de cliente a tftp-root."
+
+-#: option.c:404
++#: option.c:421
+ msgid "Allow access only to files owned by the user running dnsmasq."
+ msgstr "Permitir acceso solo a archivos pertenecientes al usuario que corre dnsmasq."
+
+-#: option.c:405
++#: option.c:422
+ #, fuzzy, c-format
+ msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
+ msgstr "Número máximo de transferencias TFTP simultáneas (%s por predeterminado)."
+
+-#: option.c:406
++#: option.c:423
+ msgid "Disable the TFTP blocksize extension."
+ msgstr "Deshabilitar la extensión TFTP blocksize (tamaño de bloque)."
+
+-#: option.c:407
++#: option.c:424
+ msgid "Convert TFTP filenames to lowercase"
+ msgstr "Convertir a minúsculas los nombres de archivos TFTP"
+
+-#: option.c:408
++#: option.c:425
+ msgid "Ephemeral port range for use by TFTP transfers."
+ msgstr "Rango de puertos efímeros para ser usados en transferencias TFTP."
+
+-#: option.c:409
++#: option.c:426
+ msgid "Extra logging for DHCP."
+ msgstr "Log extra para DHCP."
+
+-#: option.c:410
++#: option.c:427
+ msgid "Enable async. logging; optionally set queue length."
+ msgstr "Habilitar registro asíncrono; opcionalmente fijar tamaño de cola."
+
+-#: option.c:411
++#: option.c:428
+ msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
+ msgstr "Detener revinculación DNS. Filtrar rangos de IP privados al resolver."
+
+-#: option.c:412
++#: option.c:429
+ msgid "Allow rebinding of 127.0.0.0/8, for RBL servers."
+ msgstr "Permitir revinculación de 127.0.0.0/8, para servidores RBL."
+
+-#: option.c:413
++#: option.c:430
+ msgid "Inhibit DNS-rebind protection on this domain."
+ msgstr "Inhibir protección de revinculación DNS en este dominio."
+
+-#: option.c:414
++#: option.c:431
+ msgid "Always perform DNS queries to all servers."
+ msgstr "Siempre realizar búsquedas DNS a todos los servidores."
+
+-#: option.c:415
++#: option.c:432
+ #, fuzzy
+ msgid "Set tag if client includes matching option in request."
+ msgstr "Fijar etiqueta si cliente incluye opción coincidente en pedido."
+
+-#: option.c:416
++#: option.c:433
+ msgid "Use alternative ports for DHCP."
+ msgstr "Usar puertos alternativos para DHCP."
+
+-#: option.c:417
++#: option.c:434
+ #, fuzzy
+ msgid "Specify NAPTR DNS record."
+ msgstr "Especificar expediente DNS NAPTR."
+
+-#: option.c:418
++#: option.c:435
+ msgid "Specify lowest port available for DNS query transmission."
+ msgstr "Especificar puerto más bajo disponible para transmisión de búsquedas DNS."
+
+-#: option.c:419
++#: option.c:436
+ msgid "Use only fully qualified domain names for DHCP clients."
+ msgstr "Usar solo nombres de dominio completamente calificados para clientes DHCP."
+
+-#: option.c:420
++#: option.c:437
+ msgid "Generate hostnames based on MAC address for nameless clients."
+ msgstr "Generar hostnames basados en direcciones MAC para clientes sin nombre."
+
+-#: option.c:421
++#: option.c:438
+ msgid "Use these DHCP relays as full proxies."
+ msgstr "Usar estos relays DHCP como proxies completos."
+
+-#: option.c:422
++#: option.c:439
+ msgid "Relay DHCP requests to a remote server"
+ msgstr ""
+
+-#: option.c:423
++#: option.c:440
+ msgid "Specify alias name for LOCAL DNS name."
+ msgstr "Especificar nombre alias para nombre DNS LOCAL."
+
+-#: option.c:424
++#: option.c:441
+ #, fuzzy
+ msgid "Prompt to send to PXE clients."
+ msgstr "Aviso a ser enviado a clientes PXE."
+
+-#: option.c:425
++#: option.c:442
+ msgid "Boot service for PXE menu."
+ msgstr "Servicio de arranque para menú PXE."
+
+-#: option.c:426
++#: option.c:443
+ msgid "Check configuration syntax."
+ msgstr "Revisar sintaxis de configuración."
+
+-#: option.c:427
++#: option.c:444
+ msgid "Add requestor's MAC address to forwarded DNS queries."
+ msgstr "Añadir direcciones MAC de los peticionarios a los filtros DNS enviados"
+
+-#: option.c:428
++#: option.c:445
+ #, fuzzy
+ msgid "Add requestor's IP subnet to forwarded DNS queries."
+ msgstr "Añadir direcciones MAC de los peticionarios a los filtros DNS enviados"
+
+-#: option.c:429
++#: option.c:446
+ #, fuzzy
+ msgid "Proxy DNSSEC validation results from upstream nameservers."
+ msgstr "Traducir direcciones IPv4 desde servidores subida."
+
+-#: option.c:430
++#: option.c:447
+ msgid "Attempt to allocate sequential IP addresses to DHCP clients."
+ msgstr "Intento de instaurar direcciones IP secuenciales a cliente DHCP"
+
+-#: option.c:431
++#: option.c:448
+ msgid "Copy connection-track mark from queries to upstream connections."
+ msgstr "Copiar la marca de connection-track desde los filtros a las conexiones salientes"
+
+-#: option.c:432
++#: option.c:449
+ msgid "Allow DHCP clients to do their own DDNS updates."
+ msgstr "Permite a clientes DHCP realizar sus propias actualizaciones DDNS"
+
+-#: option.c:433
++#: option.c:450
+ msgid "Send router-advertisements for interfaces doing DHCPv6"
+ msgstr "Enviar anuncios del router a los interfases realizando DHCPv6"
+
+-#: option.c:434
++#: option.c:451
+ msgid "Specify DUID_EN-type DHCPv6 server DUID"
+ msgstr ""
+
+-#: option.c:435
++#: option.c:452
+ #, fuzzy
+ msgid "Specify host (A/AAAA and PTR) records"
+ msgstr "Especificar un expediente MX."
+
+-#: option.c:436
++#: option.c:453
+ #, fuzzy
+ msgid "Specify arbitrary DNS resource record"
+ msgstr "Especificar expediente DNS TXT."
+
+-#: option.c:437
++#: option.c:454
+ #, fuzzy
+ msgid "Bind to interfaces in use - check for new interfaces"
+ msgstr "interfase desconocida %s en bridge-interfase"
+
+-#: option.c:438
++#: option.c:455
+ msgid "Export local names to global DNS"
+ msgstr "Exportar nombres DNS locales a globales"
+
+-#: option.c:439
++#: option.c:456
+ msgid "Domain to export to global DNS"
+ msgstr "Dominio a exportar a DNS global"
+
+-#: option.c:440
++#: option.c:457
+ msgid "Set TTL for authoritative replies"
+ msgstr "Fijar TTL para respuestas autoritarias"
+
+-#: option.c:441
++#: option.c:458
+ msgid "Set authoritive zone information"
+ msgstr "Fijar información de zona autoritaria"
+
+-#: option.c:442
++#: option.c:459
+ msgid "Secondary authoritative nameservers for forward domains"
+ msgstr "Nombres de servidor secundario autoritatorios para dominios enviados"
+
+-#: option.c:443
++#: option.c:460
+ msgid "Peers which are allowed to do zone transfer"
+ msgstr "Colegas autorizados a la zona de transferencia (transfer)"
+
+-#: option.c:444
++#: option.c:461
+ msgid "Specify ipsets to which matching domains should be added"
+ msgstr "Especificar los ipsets coincidentes en dominio que debrían ser añadidos"
+
+-#: option.c:445
++#: option.c:462
+ #, fuzzy
+ msgid "Specify a domain and address range for synthesised names"
+ msgstr "Especificar dominio y rango de direcciones para los nombres acrónimos"
+
+-#: option.c:446
++#: option.c:463
+ msgid "Activate DNSSEC validation"
+ msgstr ""
+
+-#: option.c:447
++#: option.c:464
+ msgid "Specify trust anchor key digest."
+ msgstr ""
+
+-#: option.c:448
++#: option.c:465
+ msgid "Disable upstream checking for DNSSEC debugging."
+ msgstr ""
+
+-#: option.c:449
++#: option.c:466
+ msgid "Ensure answers without DNSSEC are in unsigned zones."
+ msgstr ""
+
+-#: option.c:450
++#: option.c:467
+ msgid "Don't check DNSSEC signature timestamps until first cache-reload"
+ msgstr ""
+
+-#: option.c:452
++#: option.c:468
++msgid "Timestamp file to verify system clock for DNSSEC"
++msgstr ""
++
++#: option.c:470
+ msgid "Specify DHCPv6 prefix class"
+ msgstr "Especificar prefijo de clase DHCPv6"
+
+-#: option.c:454
++#: option.c:472
+ msgid "Set priority, resend-interval and router-lifetime"
+ msgstr ""
+
+-#: option.c:455
++#: option.c:473
+ msgid "Do not log routine DHCP."
+ msgstr ""
+
+-#: option.c:456
++#: option.c:474
+ msgid "Do not log routine DHCPv6."
+ msgstr ""
+
+-#: option.c:457
++#: option.c:475
+ msgid "Do not log RA."
+ msgstr ""
+
+-#: option.c:458
++#: option.c:476
+ msgid "Accept queries only from directly-connected networks"
+ msgstr ""
+
+-#: option.c:459
++#: option.c:477
+ msgid "Detect and remove DNS forwarding loops"
+ msgstr ""
+
+-#: option.c:661
++#: option.c:478
++msgid "Ignore DNS responses containing ipaddr."
++msgstr ""
++
++#: option.c:680
+ #, c-format
+ msgid ""
+ "Usage: dnsmasq [options]\n"
+@@ -727,335 +760,335 @@ msgstr ""
+ "Modo de uso: dnsmasq [opciones]\n"
+ "\n"
+
+-#: option.c:663
++#: option.c:682
+ #, c-format
+ msgid "Use short options only on the command line.\n"
+ msgstr "Usar opciones cortas solo en la línea de comandos.\n"
+
+-#: option.c:665
++#: option.c:684
+ #, fuzzy, c-format
+ msgid "Valid options are:\n"
+ msgstr "Opciones válidas son :\n"
+
+-#: option.c:722 option.c:726
++#: option.c:741 option.c:745
+ msgid "bad port"
+ msgstr "puerto erróneo"
+
+-#: option.c:753 option.c:785
++#: option.c:772 option.c:804
+ msgid "interface binding not supported"
+ msgstr "vinculación de interfase no está soportado"
+
+-#: option.c:762 option.c:3494
++#: option.c:781 option.c:3570
+ #, fuzzy
+ msgid "bad interface name"
+ msgstr "nombre de interfase erróneo"
+
+-#: option.c:792
++#: option.c:811
+ #, fuzzy
+ msgid "bad address"
+ msgstr "dirección IP errónea"
+
+-#: option.c:974
++#: option.c:993
+ msgid "unsupported encapsulation for IPv6 option"
+ msgstr "Encapsulación no soportada para opción IPv6"
+
+-#: option.c:988
++#: option.c:1007
+ msgid "bad dhcp-option"
+ msgstr "opción dhcp-option errónea"
+
+-#: option.c:1056
++#: option.c:1075
+ #, fuzzy
+ msgid "bad IP address"
+ msgstr "dirección IP errónea"
+
+-#: option.c:1059 option.c:1197 option.c:2812
++#: option.c:1078 option.c:1216 option.c:2888
+ #, fuzzy
+ msgid "bad IPv6 address"
+ msgstr "dirección IP errónea"
+
+-#: option.c:1224 option.c:1318
++#: option.c:1243 option.c:1337
+ msgid "bad domain in dhcp-option"
+ msgstr "dominio erróneo en dhcp-option"
+
+-#: option.c:1356
++#: option.c:1375
+ msgid "dhcp-option too long"
+ msgstr "opción dhcp-option demasiado larga"
+
+-#: option.c:1363
++#: option.c:1382
+ msgid "illegal dhcp-match"
+ msgstr "dhcp-match ilegal"
+
+-#: option.c:1425
++#: option.c:1444
+ msgid "illegal repeated flag"
+ msgstr "opción repetida ilegal"
+
+-#: option.c:1433
++#: option.c:1452
+ msgid "illegal repeated keyword"
+ msgstr "palabra clave repetida ilegal"
+
+-#: option.c:1495 option.c:4092
++#: option.c:1517 option.c:4186
+ #, fuzzy, c-format
+ msgid "cannot access directory %s: %s"
+ msgstr "no se puede acceder a directorio %s: %s"
+
+-#: option.c:1541 tftp.c:493
++#: option.c:1563 tftp.c:493
+ #, fuzzy, c-format
+ msgid "cannot access %s: %s"
+ msgstr "no se puede acceder %s: %s"
+
+-#: option.c:1588
++#: option.c:1615
+ msgid "setting log facility is not possible under Android"
+ msgstr "la creación de un registro no es posible en Android"
+
+-#: option.c:1597
++#: option.c:1624
+ msgid "bad log facility"
+ msgstr "ubicación del registro errónea"
+
+-#: option.c:1650
++#: option.c:1677
+ msgid "bad MX preference"
+ msgstr "preferencia MX errónea"
+
+-#: option.c:1655
++#: option.c:1682
+ msgid "bad MX name"
+ msgstr "nombre MX erróneo"
+
+-#: option.c:1669
++#: option.c:1696
+ msgid "bad MX target"
+ msgstr "destino MX erróneo"
+
+-#: option.c:1681
++#: option.c:1708
+ msgid "cannot run scripts under uClinux"
+ msgstr "no se pueden correr archivos 'script' bajo uClinux"
+
+-#: option.c:1683
++#: option.c:1710
+ msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts"
+ msgstr "recompilar con HAVE_SCRIPT definido para habilitar guiónes de cambio de concesión"
+
+-#: option.c:1687
++#: option.c:1714
+ #, fuzzy
+ msgid "recompile with HAVE_LUASCRIPT defined to enable Lua scripts"
+ msgstr "recompilar con HAVE_SCRIPT definido para habilitar 'scripts' en Lua"
+
+-#: option.c:1928 option.c:1966 option.c:2015
++#: option.c:1970 option.c:2015 option.c:2071
+ #, fuzzy
+ msgid "bad prefix"
+ msgstr "prefijo erróneo"
+
+-#: option.c:2289
++#: option.c:2352
+ #, fuzzy
+ msgid "recompile with HAVE_IPSET defined to enable ipset directives"
+ msgstr "recompilar con HAVE_SCRIPT definido para habilitar directivas ipset"
+
+-#: option.c:2469
++#: option.c:2545
+ #, fuzzy
+ msgid "bad port range"
+ msgstr "rango de puertos erróneo"
+
+-#: option.c:2485
++#: option.c:2561
+ msgid "bad bridge-interface"
+ msgstr "opción bridge-interface (interfase puente) errónea"
+
+-#: option.c:2545
++#: option.c:2621
+ msgid "only one tag allowed"
+ msgstr "solo una etiqueta permitida"
+
+-#: option.c:2565 option.c:2577 option.c:2683 option.c:2724
++#: option.c:2641 option.c:2653 option.c:2759 option.c:2800
+ msgid "bad dhcp-range"
+ msgstr "opción dhcp-range (rango DHCP) errónea"
+
+-#: option.c:2592
++#: option.c:2668
+ msgid "inconsistent DHCP range"
+ msgstr "rango DHCP inconsistente"
+
+-#: option.c:2651
++#: option.c:2727
+ msgid "prefix length must be exactly 64 for RA subnets"
+ msgstr "la longitud del prefijo debe ser 64 exacto para subredes RA"
+
+-#: option.c:2653
++#: option.c:2729
+ msgid "prefix length must be exactly 64 for subnet constructors"
+ msgstr "la longitud del prefijo debe ser 64 exacto para subredes constructoras"
+
+-#: option.c:2657
++#: option.c:2733
+ msgid "prefix length must be at least 64"
+ msgstr "la longitud del prefijo debe ser al menos 64"
+
+-#: option.c:2660
++#: option.c:2736
+ #, fuzzy
+ msgid "inconsistent DHCPv6 range"
+ msgstr "rango DHCP inconsistente"
+
+-#: option.c:2671
++#: option.c:2747
+ msgid "prefix must be zero with \"constructor:\" argument"
+ msgstr "prefijo debe ser cero con argumento \"constructor:\""
+
+-#: option.c:2782 option.c:2830
++#: option.c:2858 option.c:2906
+ #, fuzzy
+ msgid "bad hex constant"
+ msgstr "constante hexadecimal errónea"
+
+-#: option.c:2804
++#: option.c:2880
+ msgid "cannot match tags in --dhcp-host"
+ msgstr "no coinciden etiquetas en --dhcp-host"
+
+-#: option.c:2852
++#: option.c:2928
+ #, fuzzy, c-format
+ msgid "duplicate dhcp-host IP address %s"
+ msgstr "dirección IP duplicada %s en %s."
+
+-#: option.c:2910
++#: option.c:2986
+ #, fuzzy
+ msgid "bad DHCP host name"
+ msgstr "nombre de host DHCP erróneo"
+
+-#: option.c:2992
++#: option.c:3068
+ #, fuzzy
+ msgid "bad tag-if"
+ msgstr "etiqueta tag-if errónea"
+
+-#: option.c:3316 option.c:3710
++#: option.c:3392 option.c:3786
+ msgid "invalid port number"
+ msgstr "número de puerto inválido"
+
+-#: option.c:3378
++#: option.c:3454
+ #, fuzzy
+ msgid "bad dhcp-proxy address"
+ msgstr "dirección IP errónea"
+
+-#: option.c:3404
++#: option.c:3480
+ #, fuzzy
+ msgid "Bad dhcp-relay"
+ msgstr "opción dhcp-range (rango DHCP) errónea"
+
+-#: option.c:3430
++#: option.c:3506
+ msgid "bad RA-params"
+ msgstr ""
+
+-#: option.c:3439
++#: option.c:3515
+ msgid "bad DUID"
+ msgstr "DUID erróneo"
+
+-#: option.c:3481
++#: option.c:3557
+ #, fuzzy
+ msgid "invalid alias range"
+ msgstr "rango alias inválido"
+
+-#: option.c:3535
++#: option.c:3611
+ msgid "bad CNAME"
+ msgstr "CNAME erróneo"
+
+-#: option.c:3540
++#: option.c:3616
+ msgid "duplicate CNAME"
+ msgstr "CNAME duplicado"
+
+-#: option.c:3560
++#: option.c:3636
+ #, fuzzy
+ msgid "bad PTR record"
+ msgstr "registro PTR erróneo"
+
+-#: option.c:3591
++#: option.c:3667
+ #, fuzzy
+ msgid "bad NAPTR record"
+ msgstr "registro NAPTR erróneo"
+
+-#: option.c:3625
++#: option.c:3701
+ #, fuzzy
+ msgid "bad RR record"
+ msgstr "registro PTR erróneo"
+
+-#: option.c:3655
++#: option.c:3731
+ msgid "bad TXT record"
+ msgstr "registro TXT erróneo"
+
+-#: option.c:3696
++#: option.c:3772
+ msgid "bad SRV record"
+ msgstr "registro SRV erróneo"
+
+-#: option.c:3703
++#: option.c:3779
+ msgid "bad SRV target"
+ msgstr "destino SRV erróneo"
+
+-#: option.c:3717
++#: option.c:3793
+ msgid "invalid priority"
+ msgstr "prioridad inválida"
+
+-#: option.c:3724
++#: option.c:3800
+ msgid "invalid weight"
+ msgstr "peso inválido"
+
+-#: option.c:3748
++#: option.c:3824
+ #, fuzzy
+ msgid "Bad host-record"
+ msgstr "registro PTR erróneo"
+
+-#: option.c:3765
++#: option.c:3841
+ #, fuzzy
+ msgid "Bad name in host-record"
+ msgstr "nombre erróneo en %s"
+
+-#: option.c:3826
++#: option.c:3906
+ #, fuzzy
+ msgid "bad trust anchor"
+ msgstr "rango de puertos erróneo"
+
+-#: option.c:3840
++#: option.c:3920
+ msgid "bad HEX in trust anchor"
+ msgstr ""
+
+-#: option.c:3850
++#: option.c:3930
+ #, fuzzy
+ msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DNSSEC/DBus support)"
+ msgstr "opción no soportada (verificar que dnsmasq fue compilado con soporte para DHCP/TFTP/DBus)"
+
+-#: option.c:3909
++#: option.c:3989
+ msgid "missing \""
+ msgstr "falta \""
+
+-#: option.c:3966
++#: option.c:4046
+ msgid "bad option"
+ msgstr "opción errónea"
+
+-#: option.c:3968
++#: option.c:4048
+ msgid "extraneous parameter"
+ msgstr "parámetro extraño"
+
+-#: option.c:3970
++#: option.c:4050
+ msgid "missing parameter"
+ msgstr "parámetro ausente"
+
+-#: option.c:3972
++#: option.c:4052
+ #, fuzzy
+ msgid "illegal option"
+ msgstr "opción errónea"
+
+-#: option.c:3979
++#: option.c:4059
+ msgid "error"
+ msgstr "error"
+
+-#: option.c:3981
++#: option.c:4061
+ #, fuzzy, c-format
+ msgid " at line %d of %s"
+ msgstr "%s en línea %d de %%s"
+
+-#: option.c:4045 option.c:4168 tftp.c:667
+-#, c-format
+-msgid "cannot read %s: %s"
+-msgstr "no se puede leer %s: %s"
+-
+-#: option.c:4229 option.c:4265
++#: option.c:4076 option.c:4323 option.c:4359
+ #, fuzzy, c-format
+ msgid "read %s"
+ msgstr "lee %s"
+
+-#: option.c:4331
++#: option.c:4139 option.c:4262 tftp.c:667
++#, c-format
++msgid "cannot read %s: %s"
++msgstr "no se puede leer %s: %s"
++
++#: option.c:4425
+ msgid "junk found in command line"
+ msgstr "basura encontrada en linea de comando"
+
+-#: option.c:4366
++#: option.c:4460
+ #, c-format
+ msgid "Dnsmasq version %s %s\n"
+ msgstr "Versión dnsmasq %s %s\n"
+
+-#: option.c:4367
++#: option.c:4461
+ #, fuzzy, c-format
+ msgid ""
+ "Compile time options: %s\n"
+@@ -1064,90 +1097,90 @@ msgstr ""
+ "Opciones de compilación %s\n"
+ "\n"
+
+-#: option.c:4368
++#: option.c:4462
+ #, c-format
+ msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
+ msgstr "Este software viene SIN NINGUNA GARANTIA.\n"
+
+-#: option.c:4369
++#: option.c:4463
+ #, c-format
+ msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
+ msgstr "Dnsmasq es software libre, y usted está autorizado a redistribuirlo\n"
+
+-#: option.c:4370
++#: option.c:4464
+ #, fuzzy, c-format
+ msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
+ msgstr "bajo los términos de la GNU General Public License, versión 2 o 3.\n"
+
+-#: option.c:4381
++#: option.c:4475
+ msgid "try --help"
+ msgstr "pruebe --help"
+
+-#: option.c:4383
++#: option.c:4477
+ msgid "try -w"
+ msgstr "pruebe -w"
+
+-#: option.c:4385
++#: option.c:4479
+ #, fuzzy, c-format
+ msgid "bad command line options: %s"
+ msgstr "opciones de línea de comandos erróneas: %s"
+
+-#: option.c:4434
++#: option.c:4535
+ #, c-format
+ msgid "cannot get host-name: %s"
+ msgstr "no se puede obtener host-name (nombre de host): %s"
+
+-#: option.c:4462
++#: option.c:4563
+ msgid "only one resolv.conf file allowed in no-poll mode."
+ msgstr "solo un archivo resolv.conf está permitido en modo no-poll."
+
+-#: option.c:4472
++#: option.c:4573
+ msgid "must have exactly one resolv.conf to read domain from."
+ msgstr "debe haber exáctamente un resolv.conf desde donde leer dominio."
+
+-#: option.c:4475 network.c:1506 dhcp.c:769
++#: option.c:4576 network.c:1506 dhcp.c:774
+ #, fuzzy, c-format
+ msgid "failed to read %s: %s"
+ msgstr "no se pudo leer %s: %s"
+
+-#: option.c:4492
++#: option.c:4593
+ #, c-format
+ msgid "no search directive found in %s"
+ msgstr "ninguna directiva de búsqueda encontrada en %s"
+
+-#: option.c:4513
++#: option.c:4614
+ #, fuzzy
+ msgid "there must be a default domain when --dhcp-fqdn is set"
+ msgstr "debe haber un dominio predeterminado cuando --dhcp-fqdn está fijado"
+
+-#: option.c:4522
++#: option.c:4623
+ msgid "syntax check OK"
+ msgstr "revisión de sintaxis OK"
+
+-#: forward.c:114
++#: forward.c:111
+ #, fuzzy, c-format
+ msgid "failed to send packet: %s"
+ msgstr "no se pudo escuchar en socket: %s"
+
+-#: forward.c:574
++#: forward.c:572
+ msgid "discarding DNS reply: subnet option mismatch"
+ msgstr ""
+
+-#: forward.c:597
++#: forward.c:595
+ #, c-format
+ msgid "nameserver %s refused to do a recursive query"
+ msgstr "servidor DNS %s rechazó realizar una búsqueda recursiva"
+
+-#: forward.c:629
++#: forward.c:627
+ #, fuzzy, c-format
+ msgid "possible DNS-rebind attack detected: %s"
+ msgstr "posible ataque de revinculación DNS detectado"
+
+-#: forward.c:1132 forward.c:1663
++#: forward.c:1156 forward.c:1722
+ msgid "Ignoring query from non-local network"
+ msgstr ""
+
+-#: forward.c:2101
++#: forward.c:2178
+ #, fuzzy, c-format
+ msgid "Maximum number of concurrent DNS queries reached (max: %d)"
+ msgstr "Número máximo de búsquedas DNS simultáneas alcanzado. (%s por predeterminado)"
+@@ -1237,272 +1270,286 @@ msgstr "usando nombre de servidor %s#%d(v
+ msgid "using nameserver %s#%d"
+ msgstr "usando nombre de servidor %s#%d"
+
+-#: dnsmasq.c:154
+-msgid "No trust anchors provided for DNSSEC"
++#: dnsmasq.c:149
++msgid "dhcp-hostsdir, dhcp-optsdir and hostsdir are not supported on this platform"
+ msgstr ""
+
+-#: dnsmasq.c:157
+-msgid "Cannot reduce cache size from default when DNSSEC enabled"
++#: dnsmasq.c:156
++msgid "no trust anchors provided for DNSSEC"
+ msgstr ""
+
+ #: dnsmasq.c:159
++msgid "cannot reduce cache size from default when DNSSEC enabled"
++msgstr ""
++
++#: dnsmasq.c:161
+ #, fuzzy
+ msgid "DNSSEC not available: set HAVE_DNSSEC in src/config.h"
+ msgstr "DBus no disponible: fijar HAVE_DBUS en src/config.h"
+
+-#: dnsmasq.c:165
++#: dnsmasq.c:167
+ #, fuzzy
+ msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
+ msgstr "servidor TFTP no disponible: fijar HAVE_TFTP en src/config.h"
+
+-#: dnsmasq.c:170
+-msgid "Cannot use --conntrack AND --query-port"
++#: dnsmasq.c:172
++#, fuzzy
++msgid "cannot use --conntrack AND --query-port"
+ msgstr "No puede usar --conntrack AND --query-port"
+
+-#: dnsmasq.c:173
++#: dnsmasq.c:175
+ #, fuzzy
+-msgid "Conntrack support not available: set HAVE_CONNTRACK in src/config.h"
++msgid "conntrack support not available: set HAVE_CONNTRACK in src/config.h"
+ msgstr "servidor TFTP no disponible: fijar HAVE_TFTP en src/config.h"
+
+-#: dnsmasq.c:178
++#: dnsmasq.c:180
+ #, fuzzy
+ msgid "asychronous logging is not available under Solaris"
+ msgstr "registro asíncrono no está disponible bajo Solaris"
+
+-#: dnsmasq.c:183
++#: dnsmasq.c:185
+ #, fuzzy
+ msgid "asychronous logging is not available under Android"
+ msgstr "registro asíncrono no está disponible bajo Solaris"
+
+-#: dnsmasq.c:188
++#: dnsmasq.c:190
+ #, fuzzy
+ msgid "authoritative DNS not available: set HAVE_AUTH in src/config.h"
+ msgstr "DBus no disponible: fijar HAVE_DBUS en src/config.h"
+
+-#: dnsmasq.c:193
++#: dnsmasq.c:195
+ #, fuzzy
+-msgid "Loop detection not available: set HAVE_LOOP in src/config.h"
++msgid "loop detection not available: set HAVE_LOOP in src/config.h"
+ msgstr "servidor TFTP no disponible: fijar HAVE_TFTP en src/config.h"
+
+-#: dnsmasq.c:201
++#: dnsmasq.c:203
+ msgid "zone serial must be configured in --auth-soa"
+ msgstr "zona serie debe ser configurada en --auth-soa"
+
+-#: dnsmasq.c:219
++#: dnsmasq.c:221
+ msgid "dhcp-range constructor not available on this platform"
+ msgstr "constructor rango dhcp no disponible en esta plataforma"
+
+-#: dnsmasq.c:262
++#: dnsmasq.c:264
+ msgid "cannot set --bind-interfaces and --bind-dynamic"
+ msgstr "no puede usar --bind-interfases y --bind-dynamic"
+
+-#: dnsmasq.c:265
++#: dnsmasq.c:267
+ #, c-format
+ msgid "failed to find list of interfaces: %s"
+ msgstr "no se pudo encontrar lista de interfases: %s"
+
+-#: dnsmasq.c:274
++#: dnsmasq.c:276
+ #, c-format
+ msgid "unknown interface %s"
+ msgstr "interfase desconocida %s"
+
+-#: dnsmasq.c:330 dnsmasq.c:954
++#: dnsmasq.c:340 dnsmasq.c:1004
+ #, c-format
+ msgid "DBus error: %s"
+ msgstr "error DBus: %s"
+
+-#: dnsmasq.c:333
++#: dnsmasq.c:343
+ msgid "DBus not available: set HAVE_DBUS in src/config.h"
+ msgstr "DBus no disponible: fijar HAVE_DBUS en src/config.h"
+
+-#: dnsmasq.c:361
++#: dnsmasq.c:371
+ #, c-format
+ msgid "unknown user or group: %s"
+ msgstr "usuario o grupo desconocido: %s"
+
+-#: dnsmasq.c:416
++#: dnsmasq.c:426
+ #, c-format
+ msgid "cannot chdir to filesystem root: %s"
+ msgstr "no se puede cambiar directorio a raíz de sistema de archivos: %s"
+
+-#: dnsmasq.c:653
++#: dnsmasq.c:667
+ #, fuzzy, c-format
+ msgid "started, version %s DNS disabled"
+ msgstr "iniciado, versión %s DNS deshabilitado"
+
+-#: dnsmasq.c:655
++#: dnsmasq.c:669
+ #, c-format
+ msgid "started, version %s cachesize %d"
+ msgstr "iniciado, versión %s tamaño de caché %d"
+
+-#: dnsmasq.c:657
++#: dnsmasq.c:671
+ #, c-format
+ msgid "started, version %s cache disabled"
+ msgstr "iniciado, versión %s caché deshabilitado"
+
+-#: dnsmasq.c:659
++#: dnsmasq.c:673
+ #, c-format
+ msgid "compile time options: %s"
+ msgstr "opciones de compilación: %s"
+
+-#: dnsmasq.c:665
++#: dnsmasq.c:679
+ msgid "DBus support enabled: connected to system bus"
+ msgstr "soporte DBus habilitado: conectado a bus de sistema"
+
+-#: dnsmasq.c:667
++#: dnsmasq.c:681
+ msgid "DBus support enabled: bus connection pending"
+ msgstr "soporte DBus habilitado: conexión a bus pendiente"
+
+-#: dnsmasq.c:672
++#: dnsmasq.c:686
+ msgid "DNS service limited to local subnets"
+ msgstr ""
+
+-#: dnsmasq.c:677
++#: dnsmasq.c:702
+ msgid "DNSSEC validation enabled"
+ msgstr ""
+
+-#: dnsmasq.c:679
++#: dnsmasq.c:705
+ msgid "DNSSEC signature timestamps not checked until first cache reload"
+ msgstr ""
+
+-#: dnsmasq.c:684
++#: dnsmasq.c:708
++msgid "DNSSEC signature timestamps not checked until system time valid"
++msgstr ""
++
++#: dnsmasq.c:713
+ #, fuzzy, c-format
+ msgid "warning: failed to change owner of %s: %s"
+ msgstr "advertencia: no se pudo cambiar propietario de %s: %s"
+
+-#: dnsmasq.c:688
++#: dnsmasq.c:717
+ msgid "setting --bind-interfaces option because of OS limitations"
+ msgstr "fijando opción --bind-interfases debido a limitaciones de sistema operativo"
+
+-#: dnsmasq.c:698
++#: dnsmasq.c:727
+ #, c-format
+ msgid "warning: interface %s does not currently exist"
+ msgstr "advertencia: interfase %s no existe actualmente"
+
+-#: dnsmasq.c:703
++#: dnsmasq.c:732
+ msgid "warning: ignoring resolv-file flag because no-resolv is set"
+ msgstr "advertencia: ignorando opción resolv-file porque no-resolv está fijado"
+
+-#: dnsmasq.c:706
++#: dnsmasq.c:735
+ #, fuzzy
+ msgid "warning: no upstream servers configured"
+ msgstr "advertencia: ningún servidor de subida configurado"
+
+-#: dnsmasq.c:710
++#: dnsmasq.c:739
+ #, c-format
+ msgid "asynchronous logging enabled, queue limit is %d messages"
+ msgstr "registro asíncrono habilitado, el límite de la cola es %d mensajes"
+
+-#: dnsmasq.c:731
++#: dnsmasq.c:760
+ msgid "IPv6 router advertisement enabled"
+ msgstr "Anuncio de router IPv6 habilitado"
+
+-#: dnsmasq.c:736
++#: dnsmasq.c:765
+ #, c-format
+ msgid "DHCP, sockets bound exclusively to interface %s"
+ msgstr ""
+
+-#: dnsmasq.c:753
++#: dnsmasq.c:782
+ msgid "root is "
+ msgstr "root está "
+
+-#: dnsmasq.c:753
++#: dnsmasq.c:782
+ #, fuzzy
+ msgid "enabled"
+ msgstr "habilitado"
+
+-#: dnsmasq.c:755
++#: dnsmasq.c:784
+ msgid "secure mode"
+ msgstr "modo seguro"
+
+-#: dnsmasq.c:781
++#: dnsmasq.c:810
+ #, c-format
+ msgid "restricting maximum simultaneous TFTP transfers to %d"
+ msgstr "limitando número máximo de transferencias TFTP simultáneas a %d"
+
+-#: dnsmasq.c:956
++#: dnsmasq.c:1006
+ msgid "connected to system DBus"
+ msgstr "conectado a DBus de sistema"
+
+-#: dnsmasq.c:1106
++#: dnsmasq.c:1156
+ #, c-format
+ msgid "cannot fork into background: %s"
+ msgstr "no se puede hacer fork en background: %s"
+
+-#: dnsmasq.c:1109
++#: dnsmasq.c:1159
+ #, fuzzy, c-format
+ msgid "failed to create helper: %s"
+ msgstr "no se pudo crear ayudante: %s"
+
+-#: dnsmasq.c:1112
++#: dnsmasq.c:1162
+ #, fuzzy, c-format
+ msgid "setting capabilities failed: %s"
+ msgstr "configuración de capacidades ha fallado: %s"
+
+-#: dnsmasq.c:1115
++#: dnsmasq.c:1165
+ #, fuzzy, c-format
+ msgid "failed to change user-id to %s: %s"
+ msgstr "no se pudo cambiar user-id a %s: %s"
+
+-#: dnsmasq.c:1118
++#: dnsmasq.c:1168
+ #, fuzzy, c-format
+ msgid "failed to change group-id to %s: %s"
+ msgstr "no se pudo cambiar group-id a %s: %s"
+
+-#: dnsmasq.c:1121
++#: dnsmasq.c:1171
+ #, fuzzy, c-format
+ msgid "failed to open pidfile %s: %s"
+ msgstr "no se pudo abrir archivo PID %s: %s"
+
+-#: dnsmasq.c:1124
++#: dnsmasq.c:1174
+ #, fuzzy, c-format
+ msgid "cannot open log %s: %s"
+ msgstr "no se puede abrir registro %s: %s"
+
+-#: dnsmasq.c:1127
++#: dnsmasq.c:1177
+ #, fuzzy, c-format
+ msgid "failed to load Lua script: %s"
+ msgstr "no se pudo cargar script Lua %s: %s"
+
+-#: dnsmasq.c:1130
++#: dnsmasq.c:1180
+ #, c-format
+ msgid "TFTP directory %s inaccessible: %s"
+ msgstr "directorio TFTP % inaccesible: %s"
+
+-#: dnsmasq.c:1151
++#: dnsmasq.c:1183
++#, fuzzy, c-format
++msgid "cannot create timestamp file %s: %s"
++msgstr "no se puede abrir o crear archivo de concesión %s: %s"
++
++#: dnsmasq.c:1204
+ msgid "now checking DNSSEC signature timestamps"
+ msgstr ""
+
+-#: dnsmasq.c:1218
++#: dnsmasq.c:1271
+ #, fuzzy, c-format
+ msgid "script process killed by signal %d"
+ msgstr "proceso script eliminado por señal %d"
+
+-#: dnsmasq.c:1222
++#: dnsmasq.c:1275
+ #, fuzzy, c-format
+ msgid "script process exited with status %d"
+ msgstr "proceso script salió con con estado %d"
+
+-#: dnsmasq.c:1226
++#: dnsmasq.c:1279
+ #, fuzzy, c-format
+ msgid "failed to execute %s: %s"
+ msgstr "no se pudo ejecutar %s: %s"
+
+-#: dnsmasq.c:1281
++#: dnsmasq.c:1334
+ msgid "exiting on receipt of SIGTERM"
+ msgstr "saliendo al recibir SIGTERM"
+
+-#: dnsmasq.c:1309
++#: dnsmasq.c:1362
+ #, fuzzy, c-format
+ msgid "failed to access %s: %s"
+ msgstr "no se pudo acceder %s: %s"
+
+-#: dnsmasq.c:1339
++#: dnsmasq.c:1392
+ #, c-format
+ msgid "reading %s"
+ msgstr "leyendo %s"
+
+-#: dnsmasq.c:1350
++#: dnsmasq.c:1403
+ #, fuzzy, c-format
+ msgid "no servers found in %s, will retry"
+ msgstr "ningún servidor encontrado en %s, se reintentará"
+@@ -1542,27 +1589,27 @@ msgstr "interfase desconocida %s en bridge-interface"
+ msgid "DHCP packet received on %s which has no address"
+ msgstr "Paquete DHCP recibido en %s que no tiene dirección"
+
+-#: dhcp.c:408
++#: dhcp.c:412
+ #, c-format
+ msgid "ARP-cache injection failed: %s"
+ msgstr ""
+
+-#: dhcp.c:506
++#: dhcp.c:511
+ #, c-format
+ msgid "DHCP range %s -- %s is not consistent with netmask %s"
+ msgstr "rango DHCP %s -- %s no coincide con máscara de subred %s"
+
+-#: dhcp.c:807
++#: dhcp.c:812
+ #, fuzzy, c-format
+ msgid "bad line at %s line %d"
+ msgstr "línea errónea en %s línea %d"
+
+-#: dhcp.c:850
++#: dhcp.c:855
+ #, c-format
+ msgid "ignoring %s line %d, duplicate name or IP address"
+ msgstr "ignorando %s línea %d, nombre o dirección IP duplicada"
+
+-#: dhcp.c:994 rfc3315.c:2089
++#: dhcp.c:999 rfc3315.c:2139
+ #, c-format
+ msgid "DHCP relay %s -> %s"
+ msgstr "DHCP relay %s -> %s"
+@@ -1633,12 +1680,12 @@ msgstr "%u Clase de usuario: %s"
+ msgid "disabled"
+ msgstr "deshabilitado"
+
+-#: rfc2131.c:539 rfc2131.c:967 rfc2131.c:1385 rfc3315.c:602 rfc3315.c:823
+-#: rfc3315.c:1095
++#: rfc2131.c:539 rfc2131.c:967 rfc2131.c:1385 rfc3315.c:603 rfc3315.c:860
++#: rfc3315.c:1139
+ msgid "ignored"
+ msgstr "ignorado"
+
+-#: rfc2131.c:554 rfc2131.c:1205 rfc3315.c:873
++#: rfc2131.c:554 rfc2131.c:1205 rfc3315.c:910
+ msgid "address in use"
+ msgstr "dirección en uso"
+
+@@ -1658,7 +1705,7 @@ msgstr "ninguna direcci
+ msgid "no leases left"
+ msgstr "no sobra ninguna concesión"
+
+-#: rfc2131.c:691 rfc3315.c:475
++#: rfc2131.c:691 rfc3315.c:476
+ #, fuzzy, c-format
+ msgid "%u client provides name: %s"
+ msgstr "%u cliente provee nombre: %s"
+@@ -1667,7 +1714,7 @@ msgstr "%u cliente provee nombre: %s"
+ msgid "PXE BIS not supported"
+ msgstr "no hay soporte para BIS PXE"
+
+-#: rfc2131.c:935 rfc3315.c:1189
++#: rfc2131.c:935 rfc3315.c:1233
+ #, fuzzy, c-format
+ msgid "disabling DHCP static address %s for %s"
+ msgstr "deshabilitando dirección DHCP estática %s para %s"
+@@ -1703,7 +1750,7 @@ msgstr "ID de servidor equivocada"
+ msgid "wrong address"
+ msgstr "dirección equivocada"
+
+-#: rfc2131.c:1143 rfc3315.c:969
++#: rfc2131.c:1143 rfc3315.c:1006
+ msgid "lease not found"
+ msgstr "concesión no encontrada"
+
+@@ -1753,7 +1800,7 @@ msgstr "no se puede enviar opci
+ msgid "PXE menu too large"
+ msgstr "menú PXE demasiado largo"
+
+-#: rfc2131.c:2173 rfc3315.c:1456
++#: rfc2131.c:2173 rfc3315.c:1506
+ #, fuzzy, c-format
+ msgid "%u requested options: %s"
+ msgstr "%u opciones solicitadas: %s"
+@@ -1768,7 +1815,7 @@ msgstr "no se puede enviar opci
+ msgid "cannot create netlink socket: %s"
+ msgstr "no se puede crear zócalo netlink: %s"
+
+-#: netlink.c:347
++#: netlink.c:348
+ #, fuzzy, c-format
+ msgid "netlink returns error: %s"
+ msgstr "netlink retorna error: %s"
+@@ -1886,66 +1933,66 @@ msgstr "ning
+ msgid "%u available DHCPv6 subnet: %s/%d"
+ msgstr "%u Subred DHCP disponible: %s/%s"
+
+-#: rfc3315.c:379
++#: rfc3315.c:380
+ #, fuzzy, c-format
+ msgid "%u vendor class: %u"
+ msgstr "%u Clase de vendedor: %s"
+
+-#: rfc3315.c:427
++#: rfc3315.c:428
+ #, fuzzy, c-format
+ msgid "%u client MAC address: %s"
+ msgstr "%u cliente provee nombre: %s"
+
+-#: rfc3315.c:659
++#: rfc3315.c:660
+ #, fuzzy, c-format
+ msgid "unknown prefix-class %d"
+ msgstr "clase de prefijo desconocida"
+
+-#: rfc3315.c:791 rfc3315.c:913
++#: rfc3315.c:803 rfc3315.c:902
++#, fuzzy
++msgid "address unavailable"
++msgstr "dirección no disponible"
++
++#: rfc3315.c:815 rfc3315.c:950 rfc3315.c:1283
+ msgid "success"
+ msgstr ""
+
+-#: rfc3315.c:806 rfc3315.c:808 rfc3315.c:921 rfc3315.c:923
++#: rfc3315.c:843 rfc3315.c:845 rfc3315.c:958 rfc3315.c:960
+ #, fuzzy
+ msgid "no addresses available"
+ msgstr "ninguna dirección disponible"
+
+-#: rfc3315.c:865
+-#, fuzzy
+-msgid "address unavailable"
+-msgstr "dirección no disponible"
+-
+-#: rfc3315.c:900
++#: rfc3315.c:937
+ msgid "not on link"
+ msgstr "no en el enlace"
+
+-#: rfc3315.c:973 rfc3315.c:1151 rfc3315.c:1228
++#: rfc3315.c:1010 rfc3315.c:1195 rfc3315.c:1272
+ msgid "no binding found"
+ msgstr "uniones no encontradas"
+
+-#: rfc3315.c:1011
++#: rfc3315.c:1048
+ msgid "deprecated"
+ msgstr "descartado"
+
+-#: rfc3315.c:1016
++#: rfc3315.c:1053
+ #, fuzzy
+ msgid "address invalid"
+ msgstr "dirección en uso"
+
+-#: rfc3315.c:1061
++#: rfc3315.c:1100
+ msgid "confirm failed"
+ msgstr "confirmación falló"
+
+-#: rfc3315.c:1072
++#: rfc3315.c:1116
+ #, fuzzy
+ msgid "all addresses still on link"
+ msgstr "dirección errónea en %s línea %d"
+
+-#: rfc3315.c:1160
++#: rfc3315.c:1204
+ msgid "release received"
+ msgstr "concesión recibida"
+
+-#: rfc3315.c:2080
++#: rfc3315.c:2130
+ msgid "Cannot multicast to DHCPv6 server without correct interface"
+ msgstr "No puede hacer multicast DHCPv6 sin el interfase correcto"
+
+@@ -2038,7 +2085,7 @@ msgstr ""
+ msgid "cannot create ICMPv6 socket: %s"
+ msgstr "no se puede crear socket DHCP: %s"
+
+-#: auth.c:429
++#: auth.c:436
+ #, fuzzy, c-format
+ msgid "ignoring zone transfer request from %s"
+ msgstr "pedido no-soportado desde %s"
+@@ -2053,54 +2100,89 @@ msgstr "no se pudo acoplar socket de servidor DHCP: %s"
+ msgid "failed to create IPset control socket: %s"
+ msgstr "no se pudo crear socket TFTP: %s"
+
++#: dnssec.c:425 dnssec.c:469
++#, fuzzy, c-format
++msgid "failed to update mtime on %s: %s"
++msgstr "no se pudo abrir archivo PID %s: %s"
++
+ #: blockdata.c:58
+ #, c-format
+ msgid "DNSSEC memory in use %u, max %u, allocated %u"
+ msgstr ""
+
+-#: tables.c:76
++#: tables.c:80
+ msgid "error: fill_addr missused"
+ msgstr ""
+
+-#: tables.c:105
++#: tables.c:109
+ #, fuzzy, c-format
+ msgid "failed to access pf devices: %s"
+ msgstr "no se pudo acceder %s: %s"
+
+-#: tables.c:119
++#: tables.c:123
+ #, fuzzy, c-format
+ msgid "warning: no opened pf devices %s"
+ msgstr "usando direcciones locales solo para %s %s"
+
+-#: tables.c:127
++#: tables.c:131
+ #, fuzzy, c-format
+ msgid "error: cannot use table name %s"
+ msgstr "no se puede obtener host-name (nombre de host): %s"
+
+-#: tables.c:135
++#: tables.c:139
+ #, c-format
+ msgid "error: cannot strlcpy table name %s"
+ msgstr ""
+
+-#: tables.c:141
++#: tables.c:145
+ #, c-format
+ msgid "warning: pfr_add_tables: %s(%d)"
+ msgstr ""
+
+-#: tables.c:147
++#: tables.c:151
+ msgid "info: table created"
+ msgstr ""
+
+-#: tables.c:158
++#: tables.c:162
+ #, c-format
+ msgid "warning: DIOCR%sADDRS: %s"
+ msgstr ""
+
+-#: tables.c:162
++#: tables.c:166
+ #, fuzzy, c-format
+ msgid "%d addresses %s"
+ msgstr "dirección IP errónea"
+
++#: inotify.c:46
++#, fuzzy, c-format
++msgid "failed to create inotify: %s"
++msgstr "no se pudo crear ayudante: %s"
++
++#: inotify.c:60
++#, fuzzy, c-format
++msgid "cannot cannonicalise resolv-file %s: %s"
++msgstr "no se puede abrir o crear archivo de concesión %s: %s"
++
++#: inotify.c:72
++#, c-format
++msgid "directory %s for resolv-file is missing, cannot poll"
++msgstr ""
++
++#: inotify.c:75 inotify.c:112
++#, fuzzy, c-format
++msgid "failed to create inotify for %s: %s"
++msgstr "no se pudo crear un zócalo de escucha: %s"
++
++#: inotify.c:97
++#, fuzzy, c-format
++msgid "bad dynamic directory %s: %s"
++msgstr "no se puede acceder a directorio %s: %s"
++
++#: inotify.c:197
++#, c-format
++msgid "inotify, new or changed file %s"
++msgstr ""
++
+ #~ msgid "no interface with address %s"
+ #~ msgstr "ninguna interfase con dirección %s"
+
+diff --git a/po/fi.po b/po/fi.po
+index 36f430986e79..760b08107510 100644
+--- a/po/fi.po
++++ b/po/fi.po
+@@ -16,70 +16,70 @@ msgstr ""
+ "Content-Transfer-Encoding: 8bit\n"
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+-#: cache.c:505
++#: cache.c:523
+ msgid "Internal error in cache."
+ msgstr ""
+
+-#: cache.c:908
++#: cache.c:941
+ #, c-format
+ msgid "failed to load names from %s: %s"
+ msgstr ""
+
+-#: cache.c:934 dhcp.c:820
++#: cache.c:967 dhcp.c:825
+ #, c-format
+ msgid "bad address at %s line %d"
+ msgstr ""
+
+-#: cache.c:985 dhcp.c:836
++#: cache.c:1018 dhcp.c:841
+ #, c-format
+ msgid "bad name at %s line %d"
+ msgstr ""
+
+-#: cache.c:992 dhcp.c:911
++#: cache.c:1027 dhcp.c:916
+ #, c-format
+ msgid "read %s - %d addresses"
+ msgstr ""
+
+-#: cache.c:1100
++#: cache.c:1135
+ msgid "cleared cache"
+ msgstr ""
+
+-#: cache.c:1123
++#: cache.c:1164
+ #, c-format
+ msgid "No IPv4 address found for %s"
+ msgstr ""
+
+-#: cache.c:1201
++#: cache.c:1242
+ #, c-format
+ msgid "%s is a CNAME, not giving it to the DHCP lease of %s"
+ msgstr ""
+
+-#: cache.c:1225
++#: cache.c:1266
+ #, c-format
+ msgid "not giving name %s to the DHCP lease of %s because the name exists in %s with address %s"
+ msgstr ""
+
+-#: cache.c:1366
++#: cache.c:1421
+ #, c-format
+ msgid "time %lu"
+ msgstr ""
+
+-#: cache.c:1367
++#: cache.c:1422
+ #, c-format
+ msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
+ msgstr ""
+
+-#: cache.c:1369
++#: cache.c:1424
+ #, c-format
+ msgid "queries forwarded %u, queries answered locally %u"
+ msgstr ""
+
+-#: cache.c:1372
++#: cache.c:1427
+ #, c-format
+ msgid "queries for authoritative zones %u"
+ msgstr ""
+
+-#: cache.c:1398
++#: cache.c:1453
+ #, c-format
+ msgid "server %s#%d: queries sent %u, retried or failed %u"
+ msgstr ""
+@@ -93,7 +93,7 @@ msgstr ""
+ msgid "failed to allocate memory"
+ msgstr ""
+
+-#: util.c:243 option.c:579
++#: util.c:243 option.c:598
+ msgid "could not get memory"
+ msgstr ""
+
+@@ -107,990 +107,1018 @@ msgstr ""
+ msgid "failed to allocate %d bytes"
+ msgstr ""
+
+-#: util.c:429
++#: util.c:430
+ #, c-format
+ msgid "infinite"
+ msgstr ""
+
+-#: option.c:318
++#: option.c:330
+ msgid "Specify local address(es) to listen on."
+ msgstr ""
+
+-#: option.c:319
++#: option.c:331
+ msgid "Return ipaddr for all hosts in specified domains."
+ msgstr ""
+
+-#: option.c:320
++#: option.c:332
+ msgid "Fake reverse lookups for RFC1918 private address ranges."
+ msgstr ""
+
+-#: option.c:321
++#: option.c:333
+ msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
+ msgstr ""
+
+-#: option.c:322
++#: option.c:334
+ #, c-format
+ msgid "Specify the size of the cache in entries (defaults to %s)."
+ msgstr ""
+
+-#: option.c:323
++#: option.c:335
+ #, c-format
+ msgid "Specify configuration file (defaults to %s)."
+ msgstr ""
+
+-#: option.c:324
++#: option.c:336
+ msgid "Do NOT fork into the background: run in debug mode."
+ msgstr ""
+
+-#: option.c:325
++#: option.c:337
+ msgid "Do NOT forward queries with no domain part."
+ msgstr ""
+
+-#: option.c:326
++#: option.c:338
+ msgid "Return self-pointing MX records for local hosts."
+ msgstr ""
+
+-#: option.c:327
++#: option.c:339
+ msgid "Expand simple names in /etc/hosts with domain-suffix."
+ msgstr ""
+
+-#: option.c:328
++#: option.c:340
+ msgid "Don't forward spurious DNS requests from Windows hosts."
+ msgstr ""
+
+-#: option.c:329
++#: option.c:341
+ msgid "Enable DHCP in the range given with lease duration."
+ msgstr ""
+
+-#: option.c:330
++#: option.c:342
+ #, c-format
+ msgid "Change to this group after startup (defaults to %s)."
+ msgstr ""
+
+-#: option.c:331
++#: option.c:343
+ msgid "Set address or hostname for a specified machine."
+ msgstr ""
+
+-#: option.c:332
++#: option.c:344
+ msgid "Read DHCP host specs from file."
+ msgstr ""
+
+-#: option.c:333
++#: option.c:345
+ msgid "Read DHCP option specs from file."
+ msgstr ""
+
+-#: option.c:334
++#: option.c:346
++msgid "Read DHCP host specs from a directory."
++msgstr ""
++
++#: option.c:347
++msgid "Read DHCP options from a directory."
++msgstr ""
++
++#: option.c:348
+ msgid "Evaluate conditional tag expression."
+ msgstr ""
+
+-#: option.c:335
++#: option.c:349
+ #, c-format
+ msgid "Do NOT load %s file."
+ msgstr ""
+
+-#: option.c:336
++#: option.c:350
+ #, c-format
+ msgid "Specify a hosts file to be read in addition to %s."
+ msgstr ""
+
+-#: option.c:337
++#: option.c:351
++msgid "Read hosts files from a directory."
++msgstr ""
++
++#: option.c:352
+ msgid "Specify interface(s) to listen on."
+ msgstr ""
+
+-#: option.c:338
++#: option.c:353
+ msgid "Specify interface(s) NOT to listen on."
+ msgstr ""
+
+-#: option.c:339
++#: option.c:354
+ msgid "Map DHCP user class to tag."
+ msgstr ""
+
+-#: option.c:340
++#: option.c:355
+ msgid "Map RFC3046 circuit-id to tag."
+ msgstr ""
+
+-#: option.c:341
++#: option.c:356
+ msgid "Map RFC3046 remote-id to tag."
+ msgstr ""
+
+-#: option.c:342
++#: option.c:357
+ msgid "Map RFC3993 subscriber-id to tag."
+ msgstr ""
+
+-#: option.c:343
++#: option.c:358
+ msgid "Don't do DHCP for hosts with tag set."
+ msgstr ""
+
+-#: option.c:344
++#: option.c:359
+ msgid "Force broadcast replies for hosts with tag set."
+ msgstr ""
+
+-#: option.c:345
++#: option.c:360
+ msgid "Do NOT fork into the background, do NOT run in debug mode."
+ msgstr ""
+
+-#: option.c:346
++#: option.c:361
+ msgid "Assume we are the only DHCP server on the local network."
+ msgstr ""
+
+-#: option.c:347
++#: option.c:362
+ #, c-format
+ msgid "Specify where to store DHCP leases (defaults to %s)."
+ msgstr ""
+
+-#: option.c:348
++#: option.c:363
+ msgid "Return MX records for local hosts."
+ msgstr ""
+
+-#: option.c:349
++#: option.c:364
+ msgid "Specify an MX record."
+ msgstr ""
+
+-#: option.c:350
++#: option.c:365
+ msgid "Specify BOOTP options to DHCP server."
+ msgstr ""
+
+-#: option.c:351
++#: option.c:366
+ #, c-format
+ msgid "Do NOT poll %s file, reload only on SIGHUP."
+ msgstr ""
+
+-#: option.c:352
++#: option.c:367
+ msgid "Do NOT cache failed search results."
+ msgstr ""
+
+-#: option.c:353
++#: option.c:368
+ #, c-format
+ msgid "Use nameservers strictly in the order given in %s."
+ msgstr ""
+
+-#: option.c:354
++#: option.c:369
+ msgid "Specify options to be sent to DHCP clients."
+ msgstr ""
+
+-#: option.c:355
++#: option.c:370
+ msgid "DHCP option sent even if the client does not request it."
+ msgstr ""
+
+-#: option.c:356
++#: option.c:371
+ msgid "Specify port to listen for DNS requests on (defaults to 53)."
+ msgstr ""
+
+-#: option.c:357
++#: option.c:372
+ #, c-format
+ msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
+ msgstr ""
+
+-#: option.c:358
++#: option.c:373
+ msgid "Log DNS queries."
+ msgstr ""
+
+-#: option.c:359
++#: option.c:374
+ msgid "Force the originating port for upstream DNS queries."
+ msgstr ""
+
+-#: option.c:360
++#: option.c:375
+ msgid "Do NOT read resolv.conf."
+ msgstr ""
+
+-#: option.c:361
++#: option.c:376
+ #, c-format
+ msgid "Specify path to resolv.conf (defaults to %s)."
+ msgstr ""
+
+-#: option.c:362
++#: option.c:377
+ msgid "Specify path to file with server= options"
+ msgstr ""
+
+-#: option.c:363
++#: option.c:378
+ msgid "Specify address(es) of upstream servers with optional domains."
+ msgstr ""
+
+-#: option.c:364
++#: option.c:379
+ msgid "Specify address of upstream servers for reverse address queries"
+ msgstr ""
+
+-#: option.c:365
++#: option.c:380
+ msgid "Never forward queries to specified domains."
+ msgstr ""
+
+-#: option.c:366
++#: option.c:381
+ msgid "Specify the domain to be assigned in DHCP leases."
+ msgstr ""
+
+-#: option.c:367
++#: option.c:382
+ msgid "Specify default target in an MX record."
+ msgstr ""
+
+-#: option.c:368
++#: option.c:383
+ msgid "Specify time-to-live in seconds for replies from /etc/hosts."
+ msgstr ""
+
+-#: option.c:369
++#: option.c:384
+ msgid "Specify time-to-live in seconds for negative caching."
+ msgstr ""
+
+-#: option.c:370
++#: option.c:385
+ msgid "Specify time-to-live in seconds for maximum TTL to send to clients."
+ msgstr ""
+
+-#: option.c:371
++#: option.c:386
++msgid "Specify time-to-live ceiling for cache."
++msgstr ""
++
++#: option.c:387
++msgid "Specify time-to-live floor for cache."
++msgstr ""
++
++#: option.c:388
+ #, c-format
+ msgid "Change to this user after startup. (defaults to %s)."
+ msgstr ""
+
+-#: option.c:372
++#: option.c:389
+ msgid "Map DHCP vendor class to tag."
+ msgstr ""
+
+-#: option.c:373
++#: option.c:390
+ msgid "Display dnsmasq version and copyright information."
+ msgstr ""
+
+-#: option.c:374
++#: option.c:391
+ msgid "Translate IPv4 addresses from upstream servers."
+ msgstr ""
+
+-#: option.c:375
++#: option.c:392
+ msgid "Specify a SRV record."
+ msgstr ""
+
+-#: option.c:376
++#: option.c:393
+ msgid "Display this message. Use --help dhcp for known DHCP options."
+ msgstr ""
+
+-#: option.c:377
++#: option.c:394
+ #, c-format
+ msgid "Specify path of PID file (defaults to %s)."
+ msgstr ""
+
+-#: option.c:378
++#: option.c:395
+ #, c-format
+ msgid "Specify maximum number of DHCP leases (defaults to %s)."
+ msgstr ""
+
+-#: option.c:379
++#: option.c:396
+ msgid "Answer DNS queries based on the interface a query was sent to."
+ msgstr ""
+
+-#: option.c:380
++#: option.c:397
+ msgid "Specify TXT DNS record."
+ msgstr ""
+
+-#: option.c:381
++#: option.c:398
+ msgid "Specify PTR DNS record."
+ msgstr ""
+
+-#: option.c:382
++#: option.c:399
+ msgid "Give DNS name to IPv4 address of interface."
+ msgstr ""
+
+-#: option.c:383
++#: option.c:400
+ msgid "Bind only to interfaces in use."
+ msgstr ""
+
+-#: option.c:384
++#: option.c:401
+ #, c-format
+ msgid "Read DHCP static host information from %s."
+ msgstr ""
+
+-#: option.c:385
++#: option.c:402
+ msgid "Enable the DBus interface for setting upstream servers, etc."
+ msgstr ""
+
+-#: option.c:386
++#: option.c:403
+ msgid "Do not provide DHCP on this interface, only provide DNS."
+ msgstr ""
+
+-#: option.c:387
++#: option.c:404
+ msgid "Enable dynamic address allocation for bootp."
+ msgstr ""
+
+-#: option.c:388
++#: option.c:405
+ msgid "Map MAC address (with wildcards) to option set."
+ msgstr ""
+
+-#: option.c:389
++#: option.c:406
+ msgid "Treat DHCP requests on aliases as arriving from interface."
+ msgstr ""
+
+-#: option.c:390
++#: option.c:407
+ msgid "Disable ICMP echo address checking in the DHCP server."
+ msgstr ""
+
+-#: option.c:391
++#: option.c:408
+ msgid "Shell script to run on DHCP lease creation and destruction."
+ msgstr ""
+
+-#: option.c:392
++#: option.c:409
+ msgid "Lua script to run on DHCP lease creation and destruction."
+ msgstr ""
+
+-#: option.c:393
++#: option.c:410
+ msgid "Run lease-change scripts as this user."
+ msgstr ""
+
+-#: option.c:394
++#: option.c:411
+ msgid "Read configuration from all the files in this directory."
+ msgstr ""
+
+-#: option.c:395
++#: option.c:412
+ msgid "Log to this syslog facility or file. (defaults to DAEMON)"
+ msgstr ""
+
+-#: option.c:396
++#: option.c:413
+ msgid "Do not use leasefile."
+ msgstr ""
+
+-#: option.c:397
++#: option.c:414
+ #, c-format
+ msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
+ msgstr ""
+
+-#: option.c:398
++#: option.c:415
+ #, c-format
+ msgid "Clear DNS cache when reloading %s."
+ msgstr ""
+
+-#: option.c:399
++#: option.c:416
+ msgid "Ignore hostnames provided by DHCP clients."
+ msgstr ""
+
+-#: option.c:400
++#: option.c:417
+ msgid "Do NOT reuse filename and server fields for extra DHCP options."
+ msgstr ""
+
+-#: option.c:401
++#: option.c:418
+ msgid "Enable integrated read-only TFTP server."
+ msgstr ""
+
+-#: option.c:402
++#: option.c:419
+ msgid "Export files by TFTP only from the specified subtree."
+ msgstr ""
+
+-#: option.c:403
++#: option.c:420
+ msgid "Add client IP address to tftp-root."
+ msgstr ""
+
+-#: option.c:404
++#: option.c:421
+ msgid "Allow access only to files owned by the user running dnsmasq."
+ msgstr ""
+
+-#: option.c:405
++#: option.c:422
+ #, c-format
+ msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
+ msgstr ""
+
+-#: option.c:406
++#: option.c:423
+ msgid "Disable the TFTP blocksize extension."
+ msgstr ""
+
+-#: option.c:407
++#: option.c:424
+ msgid "Convert TFTP filenames to lowercase"
+ msgstr ""
+
+-#: option.c:408
++#: option.c:425
+ msgid "Ephemeral port range for use by TFTP transfers."
+ msgstr ""
+
+-#: option.c:409
++#: option.c:426
+ msgid "Extra logging for DHCP."
+ msgstr ""
+
+-#: option.c:410
++#: option.c:427
+ msgid "Enable async. logging; optionally set queue length."
+ msgstr ""
+
+-#: option.c:411
++#: option.c:428
+ msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
+ msgstr ""
+
+-#: option.c:412
++#: option.c:429
+ msgid "Allow rebinding of 127.0.0.0/8, for RBL servers."
+ msgstr ""
+
+-#: option.c:413
++#: option.c:430
+ msgid "Inhibit DNS-rebind protection on this domain."
+ msgstr ""
+
+-#: option.c:414
++#: option.c:431
+ msgid "Always perform DNS queries to all servers."
+ msgstr ""
+
+-#: option.c:415
++#: option.c:432
+ msgid "Set tag if client includes matching option in request."
+ msgstr ""
+
+-#: option.c:416
++#: option.c:433
+ msgid "Use alternative ports for DHCP."
+ msgstr ""
+
+-#: option.c:417
++#: option.c:434
+ msgid "Specify NAPTR DNS record."
+ msgstr ""
+
+-#: option.c:418
++#: option.c:435
+ msgid "Specify lowest port available for DNS query transmission."
+ msgstr ""
+
+-#: option.c:419
++#: option.c:436
+ msgid "Use only fully qualified domain names for DHCP clients."
+ msgstr ""
+
+-#: option.c:420
++#: option.c:437
+ msgid "Generate hostnames based on MAC address for nameless clients."
+ msgstr ""
+
+-#: option.c:421
++#: option.c:438
+ msgid "Use these DHCP relays as full proxies."
+ msgstr ""
+
+-#: option.c:422
++#: option.c:439
+ msgid "Relay DHCP requests to a remote server"
+ msgstr ""
+
+-#: option.c:423
++#: option.c:440
+ msgid "Specify alias name for LOCAL DNS name."
+ msgstr ""
+
+-#: option.c:424
++#: option.c:441
+ msgid "Prompt to send to PXE clients."
+ msgstr ""
+
+-#: option.c:425
++#: option.c:442
+ msgid "Boot service for PXE menu."
+ msgstr ""
+
+-#: option.c:426
++#: option.c:443
+ msgid "Check configuration syntax."
+ msgstr ""
+
+-#: option.c:427
++#: option.c:444
+ msgid "Add requestor's MAC address to forwarded DNS queries."
+ msgstr ""
+
+-#: option.c:428
++#: option.c:445
+ msgid "Add requestor's IP subnet to forwarded DNS queries."
+ msgstr ""
+
+-#: option.c:429
++#: option.c:446
+ msgid "Proxy DNSSEC validation results from upstream nameservers."
+ msgstr ""
+
+-#: option.c:430
++#: option.c:447
+ msgid "Attempt to allocate sequential IP addresses to DHCP clients."
+ msgstr ""
+
+-#: option.c:431
++#: option.c:448
+ msgid "Copy connection-track mark from queries to upstream connections."
+ msgstr ""
+
+-#: option.c:432
++#: option.c:449
+ msgid "Allow DHCP clients to do their own DDNS updates."
+ msgstr ""
+
+-#: option.c:433
++#: option.c:450
+ msgid "Send router-advertisements for interfaces doing DHCPv6"
+ msgstr ""
+
+-#: option.c:434
++#: option.c:451
+ msgid "Specify DUID_EN-type DHCPv6 server DUID"
+ msgstr ""
+
+-#: option.c:435
++#: option.c:452
+ msgid "Specify host (A/AAAA and PTR) records"
+ msgstr ""
+
+-#: option.c:436
++#: option.c:453
+ msgid "Specify arbitrary DNS resource record"
+ msgstr ""
+
+-#: option.c:437
++#: option.c:454
+ msgid "Bind to interfaces in use - check for new interfaces"
+ msgstr ""
+
+-#: option.c:438
++#: option.c:455
+ msgid "Export local names to global DNS"
+ msgstr ""
+
+-#: option.c:439
++#: option.c:456
+ msgid "Domain to export to global DNS"
+ msgstr ""
+
+-#: option.c:440
++#: option.c:457
+ msgid "Set TTL for authoritative replies"
+ msgstr ""
+
+-#: option.c:441
++#: option.c:458
+ msgid "Set authoritive zone information"
+ msgstr ""
+
+-#: option.c:442
++#: option.c:459
+ msgid "Secondary authoritative nameservers for forward domains"
+ msgstr ""
+
+-#: option.c:443
++#: option.c:460
+ msgid "Peers which are allowed to do zone transfer"
+ msgstr ""
+
+-#: option.c:444
++#: option.c:461
+ msgid "Specify ipsets to which matching domains should be added"
+ msgstr ""
+
+-#: option.c:445
++#: option.c:462
+ msgid "Specify a domain and address range for synthesised names"
+ msgstr ""
+
+-#: option.c:446
++#: option.c:463
+ msgid "Activate DNSSEC validation"
+ msgstr ""
+
+-#: option.c:447
++#: option.c:464
+ msgid "Specify trust anchor key digest."
+ msgstr ""
+
+-#: option.c:448
++#: option.c:465
+ msgid "Disable upstream checking for DNSSEC debugging."
+ msgstr ""
+
+-#: option.c:449
++#: option.c:466
+ msgid "Ensure answers without DNSSEC are in unsigned zones."
+ msgstr ""
+
+-#: option.c:450
++#: option.c:467
+ msgid "Don't check DNSSEC signature timestamps until first cache-reload"
+ msgstr ""
+
+-#: option.c:452
++#: option.c:468
++msgid "Timestamp file to verify system clock for DNSSEC"
++msgstr ""
++
++#: option.c:470
+ msgid "Specify DHCPv6 prefix class"
+ msgstr ""
+
+-#: option.c:454
++#: option.c:472
+ msgid "Set priority, resend-interval and router-lifetime"
+ msgstr ""
+
+-#: option.c:455
++#: option.c:473
+ msgid "Do not log routine DHCP."
+ msgstr ""
+
+-#: option.c:456
++#: option.c:474
+ msgid "Do not log routine DHCPv6."
+ msgstr ""
+
+-#: option.c:457
++#: option.c:475
+ msgid "Do not log RA."
+ msgstr ""
+
+-#: option.c:458
++#: option.c:476
+ msgid "Accept queries only from directly-connected networks"
+ msgstr ""
+
+-#: option.c:459
++#: option.c:477
+ msgid "Detect and remove DNS forwarding loops"
+ msgstr ""
+
+-#: option.c:661
++#: option.c:478
++msgid "Ignore DNS responses containing ipaddr."
++msgstr ""
++
++#: option.c:680
+ #, c-format
+ msgid ""
+ "Usage: dnsmasq [options]\n"
+ "\n"
+ msgstr ""
+
+-#: option.c:663
++#: option.c:682
+ #, c-format
+ msgid "Use short options only on the command line.\n"
+ msgstr ""
+
+-#: option.c:665
++#: option.c:684
+ #, c-format
+ msgid "Valid options are:\n"
+ msgstr ""
+
+-#: option.c:722 option.c:726
++#: option.c:741 option.c:745
+ msgid "bad port"
+ msgstr ""
+
+-#: option.c:753 option.c:785
++#: option.c:772 option.c:804
+ msgid "interface binding not supported"
+ msgstr ""
+
+-#: option.c:762 option.c:3494
++#: option.c:781 option.c:3570
+ msgid "bad interface name"
+ msgstr ""
+
+-#: option.c:792
++#: option.c:811
+ msgid "bad address"
+ msgstr ""
+
+-#: option.c:974
++#: option.c:993
+ msgid "unsupported encapsulation for IPv6 option"
+ msgstr ""
+
+-#: option.c:988
++#: option.c:1007
+ msgid "bad dhcp-option"
+ msgstr ""
+
+-#: option.c:1056
++#: option.c:1075
+ msgid "bad IP address"
+ msgstr ""
+
+-#: option.c:1059 option.c:1197 option.c:2812
++#: option.c:1078 option.c:1216 option.c:2888
+ msgid "bad IPv6 address"
+ msgstr ""
+
+-#: option.c:1224 option.c:1318
++#: option.c:1243 option.c:1337
+ msgid "bad domain in dhcp-option"
+ msgstr ""
+
+-#: option.c:1356
++#: option.c:1375
+ msgid "dhcp-option too long"
+ msgstr ""
+
+-#: option.c:1363
++#: option.c:1382
+ msgid "illegal dhcp-match"
+ msgstr ""
+
+-#: option.c:1425
++#: option.c:1444
+ msgid "illegal repeated flag"
+ msgstr ""
+
+-#: option.c:1433
++#: option.c:1452
+ msgid "illegal repeated keyword"
+ msgstr ""
+
+-#: option.c:1495 option.c:4092
++#: option.c:1517 option.c:4186
+ #, c-format
+ msgid "cannot access directory %s: %s"
+ msgstr ""
+
+-#: option.c:1541 tftp.c:493
++#: option.c:1563 tftp.c:493
+ #, c-format
+ msgid "cannot access %s: %s"
+ msgstr ""
+
+-#: option.c:1588
++#: option.c:1615
+ msgid "setting log facility is not possible under Android"
+ msgstr ""
+
+-#: option.c:1597
++#: option.c:1624
+ msgid "bad log facility"
+ msgstr ""
+
+-#: option.c:1650
++#: option.c:1677
+ msgid "bad MX preference"
+ msgstr ""
+
+-#: option.c:1655
++#: option.c:1682
+ msgid "bad MX name"
+ msgstr ""
+
+-#: option.c:1669
++#: option.c:1696
+ msgid "bad MX target"
+ msgstr ""
+
+-#: option.c:1681
++#: option.c:1708
+ msgid "cannot run scripts under uClinux"
+ msgstr ""
+
+-#: option.c:1683
++#: option.c:1710
+ msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts"
+ msgstr ""
+
+-#: option.c:1687
++#: option.c:1714
+ msgid "recompile with HAVE_LUASCRIPT defined to enable Lua scripts"
+ msgstr ""
+
+-#: option.c:1928 option.c:1966 option.c:2015
++#: option.c:1970 option.c:2015 option.c:2071
+ msgid "bad prefix"
+ msgstr ""
+
+-#: option.c:2289
++#: option.c:2352
+ msgid "recompile with HAVE_IPSET defined to enable ipset directives"
+ msgstr ""
+
+-#: option.c:2469
++#: option.c:2545
+ msgid "bad port range"
+ msgstr ""
+
+-#: option.c:2485
++#: option.c:2561
+ msgid "bad bridge-interface"
+ msgstr ""
+
+-#: option.c:2545
++#: option.c:2621
+ msgid "only one tag allowed"
+ msgstr ""
+
+-#: option.c:2565 option.c:2577 option.c:2683 option.c:2724
++#: option.c:2641 option.c:2653 option.c:2759 option.c:2800
+ msgid "bad dhcp-range"
+ msgstr ""
+
+-#: option.c:2592
++#: option.c:2668
+ msgid "inconsistent DHCP range"
+ msgstr ""
+
+-#: option.c:2651
++#: option.c:2727
+ msgid "prefix length must be exactly 64 for RA subnets"
+ msgstr ""
+
+-#: option.c:2653
++#: option.c:2729
+ msgid "prefix length must be exactly 64 for subnet constructors"
+ msgstr ""
+
+-#: option.c:2657
++#: option.c:2733
+ msgid "prefix length must be at least 64"
+ msgstr ""
+
+-#: option.c:2660
++#: option.c:2736
+ msgid "inconsistent DHCPv6 range"
+ msgstr ""
+
+-#: option.c:2671
++#: option.c:2747
+ msgid "prefix must be zero with \"constructor:\" argument"
+ msgstr ""
+
+-#: option.c:2782 option.c:2830
++#: option.c:2858 option.c:2906
+ msgid "bad hex constant"
+ msgstr ""
+
+-#: option.c:2804
++#: option.c:2880
+ msgid "cannot match tags in --dhcp-host"
+ msgstr ""
+
+-#: option.c:2852
++#: option.c:2928
+ #, c-format
+ msgid "duplicate dhcp-host IP address %s"
+ msgstr ""
+
+-#: option.c:2910
++#: option.c:2986
+ msgid "bad DHCP host name"
+ msgstr ""
+
+-#: option.c:2992
++#: option.c:3068
+ msgid "bad tag-if"
+ msgstr ""
+
+-#: option.c:3316 option.c:3710
++#: option.c:3392 option.c:3786
+ msgid "invalid port number"
+ msgstr ""
+
+-#: option.c:3378
++#: option.c:3454
+ msgid "bad dhcp-proxy address"
+ msgstr ""
+
+-#: option.c:3404
++#: option.c:3480
+ msgid "Bad dhcp-relay"
+ msgstr ""
+
+-#: option.c:3430
++#: option.c:3506
+ msgid "bad RA-params"
+ msgstr ""
+
+-#: option.c:3439
++#: option.c:3515
+ msgid "bad DUID"
+ msgstr ""
+
+-#: option.c:3481
++#: option.c:3557
+ msgid "invalid alias range"
+ msgstr ""
+
+-#: option.c:3535
++#: option.c:3611
+ msgid "bad CNAME"
+ msgstr ""
+
+-#: option.c:3540
++#: option.c:3616
+ msgid "duplicate CNAME"
+ msgstr ""
+
+-#: option.c:3560
++#: option.c:3636
+ msgid "bad PTR record"
+ msgstr ""
+
+-#: option.c:3591
++#: option.c:3667
+ msgid "bad NAPTR record"
+ msgstr ""
+
+-#: option.c:3625
++#: option.c:3701
+ msgid "bad RR record"
+ msgstr ""
+
+-#: option.c:3655
++#: option.c:3731
+ msgid "bad TXT record"
+ msgstr ""
+
+-#: option.c:3696
++#: option.c:3772
+ msgid "bad SRV record"
+ msgstr ""
+
+-#: option.c:3703
++#: option.c:3779
+ msgid "bad SRV target"
+ msgstr ""
+
+-#: option.c:3717
++#: option.c:3793
+ msgid "invalid priority"
+ msgstr ""
+
+-#: option.c:3724
++#: option.c:3800
+ msgid "invalid weight"
+ msgstr ""
+
+-#: option.c:3748
++#: option.c:3824
+ msgid "Bad host-record"
+ msgstr ""
+
+-#: option.c:3765
++#: option.c:3841
+ msgid "Bad name in host-record"
+ msgstr ""
+
+-#: option.c:3826
++#: option.c:3906
+ msgid "bad trust anchor"
+ msgstr ""
+
+-#: option.c:3840
++#: option.c:3920
+ msgid "bad HEX in trust anchor"
+ msgstr ""
+
+-#: option.c:3850
++#: option.c:3930
+ msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DNSSEC/DBus support)"
+ msgstr ""
+
+-#: option.c:3909
++#: option.c:3989
+ msgid "missing \""
+ msgstr ""
+
+-#: option.c:3966
++#: option.c:4046
+ msgid "bad option"
+ msgstr ""
+
+-#: option.c:3968
++#: option.c:4048
+ msgid "extraneous parameter"
+ msgstr ""
+
+-#: option.c:3970
++#: option.c:4050
+ msgid "missing parameter"
+ msgstr ""
+
+-#: option.c:3972
++#: option.c:4052
+ msgid "illegal option"
+ msgstr ""
+
+-#: option.c:3979
++#: option.c:4059
+ msgid "error"
+ msgstr ""
+
+-#: option.c:3981
++#: option.c:4061
+ #, c-format
+ msgid " at line %d of %s"
+ msgstr ""
+
+-#: option.c:4045 option.c:4168 tftp.c:667
++#: option.c:4076 option.c:4323 option.c:4359
+ #, c-format
+-msgid "cannot read %s: %s"
++msgid "read %s"
+ msgstr ""
+
+-#: option.c:4229 option.c:4265
++#: option.c:4139 option.c:4262 tftp.c:667
+ #, c-format
+-msgid "read %s"
++msgid "cannot read %s: %s"
+ msgstr ""
+
+-#: option.c:4331
++#: option.c:4425
+ msgid "junk found in command line"
+ msgstr ""
+
+-#: option.c:4366
++#: option.c:4460
+ #, c-format
+ msgid "Dnsmasq version %s %s\n"
+ msgstr ""
+
+-#: option.c:4367
++#: option.c:4461
+ #, c-format
+ msgid ""
+ "Compile time options: %s\n"
+ "\n"
+ msgstr ""
+
+-#: option.c:4368
++#: option.c:4462
+ #, c-format
+ msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
+ msgstr ""
+
+-#: option.c:4369
++#: option.c:4463
+ #, c-format
+ msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
+ msgstr ""
+
+-#: option.c:4370
++#: option.c:4464
+ #, c-format
+ msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
+ msgstr ""
+
+-#: option.c:4381
++#: option.c:4475
+ msgid "try --help"
+ msgstr ""
+
+-#: option.c:4383
++#: option.c:4477
+ msgid "try -w"
+ msgstr ""
+
+-#: option.c:4385
++#: option.c:4479
+ #, c-format
+ msgid "bad command line options: %s"
+ msgstr ""
+
+-#: option.c:4434
++#: option.c:4535
+ #, c-format
+ msgid "cannot get host-name: %s"
+ msgstr ""
+
+-#: option.c:4462
++#: option.c:4563
+ msgid "only one resolv.conf file allowed in no-poll mode."
+ msgstr ""
+
+-#: option.c:4472
++#: option.c:4573
+ msgid "must have exactly one resolv.conf to read domain from."
+ msgstr ""
+
+-#: option.c:4475 network.c:1506 dhcp.c:769
++#: option.c:4576 network.c:1506 dhcp.c:774
+ #, c-format
+ msgid "failed to read %s: %s"
+ msgstr ""
+
+-#: option.c:4492
++#: option.c:4593
+ #, c-format
+ msgid "no search directive found in %s"
+ msgstr ""
+
+-#: option.c:4513
++#: option.c:4614
+ msgid "there must be a default domain when --dhcp-fqdn is set"
+ msgstr ""
+
+-#: option.c:4522
++#: option.c:4623
+ msgid "syntax check OK"
+ msgstr ""
+
+-#: forward.c:114
++#: forward.c:111
+ #, c-format
+ msgid "failed to send packet: %s"
+ msgstr ""
+
+-#: forward.c:574
++#: forward.c:572
+ msgid "discarding DNS reply: subnet option mismatch"
+ msgstr ""
+
+-#: forward.c:597
++#: forward.c:595
+ #, c-format
+ msgid "nameserver %s refused to do a recursive query"
+ msgstr ""
+
+-#: forward.c:629
++#: forward.c:627
+ #, c-format
+ msgid "possible DNS-rebind attack detected: %s"
+ msgstr ""
+
+-#: forward.c:1132 forward.c:1663
++#: forward.c:1156 forward.c:1722
+ msgid "Ignoring query from non-local network"
+ msgstr ""
+
+-#: forward.c:2101
++#: forward.c:2178
+ #, c-format
+ msgid "Maximum number of concurrent DNS queries reached (max: %d)"
+ msgstr ""
+@@ -1180,263 +1208,276 @@ msgstr ""
+ msgid "using nameserver %s#%d"
+ msgstr ""
+
+-#: dnsmasq.c:154
+-msgid "No trust anchors provided for DNSSEC"
++#: dnsmasq.c:149
++msgid "dhcp-hostsdir, dhcp-optsdir and hostsdir are not supported on this platform"
+ msgstr ""
+
+-#: dnsmasq.c:157
+-msgid "Cannot reduce cache size from default when DNSSEC enabled"
++#: dnsmasq.c:156
++msgid "no trust anchors provided for DNSSEC"
+ msgstr ""
+
+ #: dnsmasq.c:159
++msgid "cannot reduce cache size from default when DNSSEC enabled"
++msgstr ""
++
++#: dnsmasq.c:161
+ msgid "DNSSEC not available: set HAVE_DNSSEC in src/config.h"
+ msgstr ""
+
+-#: dnsmasq.c:165
++#: dnsmasq.c:167
+ msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
+ msgstr ""
+
+-#: dnsmasq.c:170
+-msgid "Cannot use --conntrack AND --query-port"
++#: dnsmasq.c:172
++msgid "cannot use --conntrack AND --query-port"
+ msgstr ""
+
+-#: dnsmasq.c:173
+-msgid "Conntrack support not available: set HAVE_CONNTRACK in src/config.h"
++#: dnsmasq.c:175
++msgid "conntrack support not available: set HAVE_CONNTRACK in src/config.h"
+ msgstr ""
+
+-#: dnsmasq.c:178
++#: dnsmasq.c:180
+ msgid "asychronous logging is not available under Solaris"
+ msgstr ""
+
+-#: dnsmasq.c:183
++#: dnsmasq.c:185
+ msgid "asychronous logging is not available under Android"
+ msgstr ""
+
+-#: dnsmasq.c:188
++#: dnsmasq.c:190
+ msgid "authoritative DNS not available: set HAVE_AUTH in src/config.h"
+ msgstr ""
+
+-#: dnsmasq.c:193
+-msgid "Loop detection not available: set HAVE_LOOP in src/config.h"
++#: dnsmasq.c:195
++msgid "loop detection not available: set HAVE_LOOP in src/config.h"
+ msgstr ""
+
+-#: dnsmasq.c:201
++#: dnsmasq.c:203
+ msgid "zone serial must be configured in --auth-soa"
+ msgstr ""
+
+-#: dnsmasq.c:219
++#: dnsmasq.c:221
+ msgid "dhcp-range constructor not available on this platform"
+ msgstr ""
+
+-#: dnsmasq.c:262
++#: dnsmasq.c:264
+ msgid "cannot set --bind-interfaces and --bind-dynamic"
+ msgstr ""
+
+-#: dnsmasq.c:265
++#: dnsmasq.c:267
+ #, c-format
+ msgid "failed to find list of interfaces: %s"
+ msgstr ""
+
+-#: dnsmasq.c:274
++#: dnsmasq.c:276
+ #, c-format
+ msgid "unknown interface %s"
+ msgstr ""
+
+-#: dnsmasq.c:330 dnsmasq.c:954
++#: dnsmasq.c:340 dnsmasq.c:1004
+ #, c-format
+ msgid "DBus error: %s"
+ msgstr ""
+
+-#: dnsmasq.c:333
++#: dnsmasq.c:343
+ msgid "DBus not available: set HAVE_DBUS in src/config.h"
+ msgstr ""
+
+-#: dnsmasq.c:361
++#: dnsmasq.c:371
+ #, c-format
+ msgid "unknown user or group: %s"
+ msgstr ""
+
+-#: dnsmasq.c:416
++#: dnsmasq.c:426
+ #, c-format
+ msgid "cannot chdir to filesystem root: %s"
+ msgstr ""
+
+-#: dnsmasq.c:653
++#: dnsmasq.c:667
+ #, c-format
+ msgid "started, version %s DNS disabled"
+ msgstr ""
+
+-#: dnsmasq.c:655
++#: dnsmasq.c:669
+ #, c-format
+ msgid "started, version %s cachesize %d"
+ msgstr ""
+
+-#: dnsmasq.c:657
++#: dnsmasq.c:671
+ #, c-format
+ msgid "started, version %s cache disabled"
+ msgstr ""
+
+-#: dnsmasq.c:659
++#: dnsmasq.c:673
+ #, c-format
+ msgid "compile time options: %s"
+ msgstr ""
+
+-#: dnsmasq.c:665
++#: dnsmasq.c:679
+ msgid "DBus support enabled: connected to system bus"
+ msgstr ""
+
+-#: dnsmasq.c:667
++#: dnsmasq.c:681
+ msgid "DBus support enabled: bus connection pending"
+ msgstr ""
+
+-#: dnsmasq.c:672
++#: dnsmasq.c:686
+ msgid "DNS service limited to local subnets"
+ msgstr ""
+
+-#: dnsmasq.c:677
++#: dnsmasq.c:702
+ msgid "DNSSEC validation enabled"
+ msgstr ""
+
+-#: dnsmasq.c:679
++#: dnsmasq.c:705
+ msgid "DNSSEC signature timestamps not checked until first cache reload"
+ msgstr ""
+
+-#: dnsmasq.c:684
++#: dnsmasq.c:708
++msgid "DNSSEC signature timestamps not checked until system time valid"
++msgstr ""
++
++#: dnsmasq.c:713
+ #, c-format
+ msgid "warning: failed to change owner of %s: %s"
+ msgstr ""
+
+-#: dnsmasq.c:688
++#: dnsmasq.c:717
+ msgid "setting --bind-interfaces option because of OS limitations"
+ msgstr ""
+
+-#: dnsmasq.c:698
++#: dnsmasq.c:727
+ #, c-format
+ msgid "warning: interface %s does not currently exist"
+ msgstr ""
+
+-#: dnsmasq.c:703
++#: dnsmasq.c:732
+ msgid "warning: ignoring resolv-file flag because no-resolv is set"
+ msgstr ""
+
+-#: dnsmasq.c:706
++#: dnsmasq.c:735
+ msgid "warning: no upstream servers configured"
+ msgstr ""
+
+-#: dnsmasq.c:710
++#: dnsmasq.c:739
+ #, c-format
+ msgid "asynchronous logging enabled, queue limit is %d messages"
+ msgstr ""
+
+-#: dnsmasq.c:731
++#: dnsmasq.c:760
+ msgid "IPv6 router advertisement enabled"
+ msgstr ""
+
+-#: dnsmasq.c:736
++#: dnsmasq.c:765
+ #, c-format
+ msgid "DHCP, sockets bound exclusively to interface %s"
+ msgstr ""
+
+-#: dnsmasq.c:753
++#: dnsmasq.c:782
+ msgid "root is "
+ msgstr ""
+
+-#: dnsmasq.c:753
++#: dnsmasq.c:782
+ msgid "enabled"
+ msgstr ""
+
+-#: dnsmasq.c:755
++#: dnsmasq.c:784
+ msgid "secure mode"
+ msgstr ""
+
+-#: dnsmasq.c:781
++#: dnsmasq.c:810
+ #, c-format
+ msgid "restricting maximum simultaneous TFTP transfers to %d"
+ msgstr ""
+
+-#: dnsmasq.c:956
++#: dnsmasq.c:1006
+ msgid "connected to system DBus"
+ msgstr ""
+
+-#: dnsmasq.c:1106
++#: dnsmasq.c:1156
+ #, c-format
+ msgid "cannot fork into background: %s"
+ msgstr ""
+
+-#: dnsmasq.c:1109
++#: dnsmasq.c:1159
+ #, c-format
+ msgid "failed to create helper: %s"
+ msgstr ""
+
+-#: dnsmasq.c:1112
++#: dnsmasq.c:1162
+ #, c-format
+ msgid "setting capabilities failed: %s"
+ msgstr ""
+
+-#: dnsmasq.c:1115
++#: dnsmasq.c:1165
+ #, c-format
+ msgid "failed to change user-id to %s: %s"
+ msgstr ""
+
+-#: dnsmasq.c:1118
++#: dnsmasq.c:1168
+ #, c-format
+ msgid "failed to change group-id to %s: %s"
+ msgstr ""
+
+-#: dnsmasq.c:1121
++#: dnsmasq.c:1171
+ #, c-format
+ msgid "failed to open pidfile %s: %s"
+ msgstr ""
+
+-#: dnsmasq.c:1124
++#: dnsmasq.c:1174
+ #, c-format
+ msgid "cannot open log %s: %s"
+ msgstr ""
+
+-#: dnsmasq.c:1127
++#: dnsmasq.c:1177
+ #, c-format
+ msgid "failed to load Lua script: %s"
+ msgstr ""
+
+-#: dnsmasq.c:1130
++#: dnsmasq.c:1180
+ #, c-format
+ msgid "TFTP directory %s inaccessible: %s"
+ msgstr ""
+
+-#: dnsmasq.c:1151
++#: dnsmasq.c:1183
++#, c-format
++msgid "cannot create timestamp file %s: %s"
++msgstr ""
++
++#: dnsmasq.c:1204
+ msgid "now checking DNSSEC signature timestamps"
+ msgstr ""
+
+-#: dnsmasq.c:1218
++#: dnsmasq.c:1271
+ #, c-format
+ msgid "script process killed by signal %d"
+ msgstr ""
+
+-#: dnsmasq.c:1222
++#: dnsmasq.c:1275
+ #, c-format
+ msgid "script process exited with status %d"
+ msgstr ""
+
+-#: dnsmasq.c:1226
++#: dnsmasq.c:1279
+ #, c-format
+ msgid "failed to execute %s: %s"
+ msgstr ""
+
+-#: dnsmasq.c:1281
++#: dnsmasq.c:1334
+ msgid "exiting on receipt of SIGTERM"
+ msgstr ""
+
+-#: dnsmasq.c:1309
++#: dnsmasq.c:1362
+ #, c-format
+ msgid "failed to access %s: %s"
+ msgstr ""
+
+-#: dnsmasq.c:1339
++#: dnsmasq.c:1392
+ #, c-format
+ msgid "reading %s"
+ msgstr ""
+
+-#: dnsmasq.c:1350
++#: dnsmasq.c:1403
+ #, c-format
+ msgid "no servers found in %s, will retry"
+ msgstr ""
+@@ -1476,27 +1517,27 @@ msgstr ""
+ msgid "DHCP packet received on %s which has no address"
+ msgstr ""
+
+-#: dhcp.c:408
++#: dhcp.c:412
+ #, c-format
+ msgid "ARP-cache injection failed: %s"
+ msgstr ""
+
+-#: dhcp.c:506
++#: dhcp.c:511
+ #, c-format
+ msgid "DHCP range %s -- %s is not consistent with netmask %s"
+ msgstr ""
+
+-#: dhcp.c:807
++#: dhcp.c:812
+ #, c-format
+ msgid "bad line at %s line %d"
+ msgstr ""
+
+-#: dhcp.c:850
++#: dhcp.c:855
+ #, c-format
+ msgid "ignoring %s line %d, duplicate name or IP address"
+ msgstr ""
+
+-#: dhcp.c:994 rfc3315.c:2089
++#: dhcp.c:999 rfc3315.c:2139
+ #, c-format
+ msgid "DHCP relay %s -> %s"
+ msgstr ""
+@@ -1567,12 +1608,12 @@ msgstr ""
+ msgid "disabled"
+ msgstr ""
+
+-#: rfc2131.c:539 rfc2131.c:967 rfc2131.c:1385 rfc3315.c:602 rfc3315.c:823
+-#: rfc3315.c:1095
++#: rfc2131.c:539 rfc2131.c:967 rfc2131.c:1385 rfc3315.c:603 rfc3315.c:860
++#: rfc3315.c:1139
+ msgid "ignored"
+ msgstr ""
+
+-#: rfc2131.c:554 rfc2131.c:1205 rfc3315.c:873
++#: rfc2131.c:554 rfc2131.c:1205 rfc3315.c:910
+ msgid "address in use"
+ msgstr ""
+
+@@ -1592,7 +1633,7 @@ msgstr ""
+ msgid "no leases left"
+ msgstr ""
+
+-#: rfc2131.c:691 rfc3315.c:475
++#: rfc2131.c:691 rfc3315.c:476
+ #, c-format
+ msgid "%u client provides name: %s"
+ msgstr ""
+@@ -1601,7 +1642,7 @@ msgstr ""
+ msgid "PXE BIS not supported"
+ msgstr ""
+
+-#: rfc2131.c:935 rfc3315.c:1189
++#: rfc2131.c:935 rfc3315.c:1233
+ #, c-format
+ msgid "disabling DHCP static address %s for %s"
+ msgstr ""
+@@ -1637,7 +1678,7 @@ msgstr ""
+ msgid "wrong address"
+ msgstr ""
+
+-#: rfc2131.c:1143 rfc3315.c:969
++#: rfc2131.c:1143 rfc3315.c:1006
+ msgid "lease not found"
+ msgstr ""
+
+@@ -1687,7 +1728,7 @@ msgstr ""
+ msgid "PXE menu too large"
+ msgstr ""
+
+-#: rfc2131.c:2173 rfc3315.c:1456
++#: rfc2131.c:2173 rfc3315.c:1506
+ #, c-format
+ msgid "%u requested options: %s"
+ msgstr ""
+@@ -1702,7 +1743,7 @@ msgstr ""
+ msgid "cannot create netlink socket: %s"
+ msgstr ""
+
+-#: netlink.c:347
++#: netlink.c:348
+ #, c-format
+ msgid "netlink returns error: %s"
+ msgstr ""
+@@ -1820,62 +1861,62 @@ msgstr ""
+ msgid "%u available DHCPv6 subnet: %s/%d"
+ msgstr ""
+
+-#: rfc3315.c:379
++#: rfc3315.c:380
+ #, c-format
+ msgid "%u vendor class: %u"
+ msgstr ""
+
+-#: rfc3315.c:427
++#: rfc3315.c:428
+ #, c-format
+ msgid "%u client MAC address: %s"
+ msgstr ""
+
+-#: rfc3315.c:659
++#: rfc3315.c:660
+ #, c-format
+ msgid "unknown prefix-class %d"
+ msgstr ""
+
+-#: rfc3315.c:791 rfc3315.c:913
+-msgid "success"
++#: rfc3315.c:803 rfc3315.c:902
++msgid "address unavailable"
+ msgstr ""
+
+-#: rfc3315.c:806 rfc3315.c:808 rfc3315.c:921 rfc3315.c:923
+-msgid "no addresses available"
++#: rfc3315.c:815 rfc3315.c:950 rfc3315.c:1283
++msgid "success"
+ msgstr ""
+
+-#: rfc3315.c:865
+-msgid "address unavailable"
++#: rfc3315.c:843 rfc3315.c:845 rfc3315.c:958 rfc3315.c:960
++msgid "no addresses available"
+ msgstr ""
+
+-#: rfc3315.c:900
++#: rfc3315.c:937
+ msgid "not on link"
+ msgstr ""
+
+-#: rfc3315.c:973 rfc3315.c:1151 rfc3315.c:1228
++#: rfc3315.c:1010 rfc3315.c:1195 rfc3315.c:1272
+ msgid "no binding found"
+ msgstr ""
+
+-#: rfc3315.c:1011
++#: rfc3315.c:1048
+ msgid "deprecated"
+ msgstr ""
+
+-#: rfc3315.c:1016
++#: rfc3315.c:1053
+ msgid "address invalid"
+ msgstr ""
+
+-#: rfc3315.c:1061
++#: rfc3315.c:1100
+ msgid "confirm failed"
+ msgstr ""
+
+-#: rfc3315.c:1072
++#: rfc3315.c:1116
+ msgid "all addresses still on link"
+ msgstr ""
+
+-#: rfc3315.c:1160
++#: rfc3315.c:1204
+ msgid "release received"
+ msgstr ""
+
+-#: rfc3315.c:2080
++#: rfc3315.c:2130
+ msgid "Cannot multicast to DHCPv6 server without correct interface"
+ msgstr ""
+
+@@ -1968,7 +2009,7 @@ msgstr ""
+ msgid "cannot create ICMPv6 socket: %s"
+ msgstr ""
+
+-#: auth.c:429
++#: auth.c:436
+ #, c-format
+ msgid "ignoring zone transfer request from %s"
+ msgstr ""
+@@ -1983,50 +2024,85 @@ msgstr ""
+ msgid "failed to create IPset control socket: %s"
+ msgstr ""
+
++#: dnssec.c:425 dnssec.c:469
++#, c-format
++msgid "failed to update mtime on %s: %s"
++msgstr ""
++
+ #: blockdata.c:58
+ #, c-format
+ msgid "DNSSEC memory in use %u, max %u, allocated %u"
+ msgstr ""
+
+-#: tables.c:76
++#: tables.c:80
+ msgid "error: fill_addr missused"
+ msgstr ""
+
+-#: tables.c:105
++#: tables.c:109
+ #, c-format
+ msgid "failed to access pf devices: %s"
+ msgstr ""
+
+-#: tables.c:119
++#: tables.c:123
+ #, c-format
+ msgid "warning: no opened pf devices %s"
+ msgstr ""
+
+-#: tables.c:127
++#: tables.c:131
+ #, c-format
+ msgid "error: cannot use table name %s"
+ msgstr ""
+
+-#: tables.c:135
++#: tables.c:139
+ #, c-format
+ msgid "error: cannot strlcpy table name %s"
+ msgstr ""
+
+-#: tables.c:141
++#: tables.c:145
+ #, c-format
+ msgid "warning: pfr_add_tables: %s(%d)"
+ msgstr ""
+
+-#: tables.c:147
++#: tables.c:151
+ msgid "info: table created"
+ msgstr ""
+
+-#: tables.c:158
++#: tables.c:162
+ #, c-format
+ msgid "warning: DIOCR%sADDRS: %s"
+ msgstr ""
+
+-#: tables.c:162
++#: tables.c:166
+ #, c-format
+ msgid "%d addresses %s"
+ msgstr ""
++
++#: inotify.c:46
++#, c-format
++msgid "failed to create inotify: %s"
++msgstr ""
++
++#: inotify.c:60
++#, c-format
++msgid "cannot cannonicalise resolv-file %s: %s"
++msgstr ""
++
++#: inotify.c:72
++#, c-format
++msgid "directory %s for resolv-file is missing, cannot poll"
++msgstr ""
++
++#: inotify.c:75 inotify.c:112
++#, c-format
++msgid "failed to create inotify for %s: %s"
++msgstr ""
++
++#: inotify.c:97
++#, c-format
++msgid "bad dynamic directory %s: %s"
++msgstr ""
++
++#: inotify.c:197
++#, c-format
++msgid "inotify, new or changed file %s"
++msgstr ""
+diff --git a/po/fr.po b/po/fr.po
+index 1ac4848b9fa9..fbddad73887a 100644
+--- a/po/fr.po
++++ b/po/fr.po
+@@ -14,70 +14,70 @@ msgstr ""
+ "Content-Transfer-Encoding: 8bit\n"
+ "Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+-#: cache.c:505
++#: cache.c:523
+ msgid "Internal error in cache."
+ msgstr ""
+
+-#: cache.c:908
++#: cache.c:941
+ #, c-format
+ msgid "failed to load names from %s: %s"
+ msgstr "Impossible de charger les noms à partir de %s : %s"
+
+-#: cache.c:934 dhcp.c:820
++#: cache.c:967 dhcp.c:825
+ #, c-format
+ msgid "bad address at %s line %d"
+ msgstr "mauvaise adresse dans %s ligne %d"
+
+-#: cache.c:985 dhcp.c:836
++#: cache.c:1018 dhcp.c:841
+ #, c-format
+ msgid "bad name at %s line %d"
+ msgstr "mauvais nom dans %s ligne %d"
+
+-#: cache.c:992 dhcp.c:911
++#: cache.c:1027 dhcp.c:916
+ #, c-format
+ msgid "read %s - %d addresses"
+ msgstr "lecture %s - %d adresses"
+
+-#: cache.c:1100
++#: cache.c:1135
+ msgid "cleared cache"
+ msgstr "cache vidé"
+
+-#: cache.c:1123
++#: cache.c:1164
+ #, c-format
+ msgid "No IPv4 address found for %s"
+ msgstr "Aucune adresse IPv4 trouvée pour %s"
+
+-#: cache.c:1201
++#: cache.c:1242
+ #, c-format
+ msgid "%s is a CNAME, not giving it to the DHCP lease of %s"
+ msgstr "%s est un CNAME, il ne sera pas donné au bail DHCP de %s"
+
+-#: cache.c:1225
++#: cache.c:1266
+ #, c-format
+ msgid "not giving name %s to the DHCP lease of %s because the name exists in %s with address %s"
+ msgstr "ne donne pas de nom %s au bail DHCP de %s parce-que le nom existe dans %s avec l'adresse %s"
+
+-#: cache.c:1366
++#: cache.c:1421
+ #, c-format
+ msgid "time %lu"
+ msgstr "horodatage %lu"
+
+-#: cache.c:1367
++#: cache.c:1422
+ #, c-format
+ msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
+ msgstr "taille de cache %d, %d/%d insertions dans le cache entrées non-expirées réutilisées"
+
+-#: cache.c:1369
++#: cache.c:1424
+ #, c-format
+ msgid "queries forwarded %u, queries answered locally %u"
+ msgstr "requêtes transmises %u, requêtes résolues localement %u"
+
+-#: cache.c:1372
++#: cache.c:1427
+ #, fuzzy, c-format
+ msgid "queries for authoritative zones %u"
+ msgstr "Configure la durée de vie (Time To Live) pour les réponses faisant autorité"
+
+-#: cache.c:1398
++#: cache.c:1453
+ #, c-format
+ msgid "server %s#%d: queries sent %u, retried or failed %u"
+ msgstr "serveur %s#%d: requêtes envoyées %u, requêtes réessayées ou échouées %u"
+@@ -91,7 +91,7 @@ msgstr "impossible d'initialiser le g
+ msgid "failed to allocate memory"
+ msgstr "impossible d'allouer la mémoire"
+
+-#: util.c:243 option.c:579
++#: util.c:243 option.c:598
+ msgid "could not get memory"
+ msgstr "impossible d'allouer de la mémoire"
+
+@@ -105,607 +105,642 @@ msgstr "Ne peut pas cr
+ msgid "failed to allocate %d bytes"
+ msgstr "impossible d'allouer %d octets"
+
+-#: util.c:429
++#: util.c:430
+ #, c-format
+ msgid "infinite"
+ msgstr "illimité(e)"
+
+-#: option.c:318
++#: option.c:330
+ msgid "Specify local address(es) to listen on."
+ msgstr "Spécifie la ou les adresse(s) locales où le démon doit se mettre à l'écoute."
+
+-#: option.c:319
++#: option.c:331
+ msgid "Return ipaddr for all hosts in specified domains."
+ msgstr "Retourne les adresses IP pour toutes les machines présentes dans les domaines spécifiés"
+
+-#: option.c:320
++#: option.c:332
+ msgid "Fake reverse lookups for RFC1918 private address ranges."
+ msgstr "Traduction inverse truquée pour la plage d'adresse privée RFC1918"
+
+-#: option.c:321
++#: option.c:333
+ msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
+ msgstr "Traite l'adresse IP comme un domaine inexistant NXDOMAIN (contourne le systeme de redirection de Verisign)"
+
+-#: option.c:322
++#: option.c:334
+ #, c-format
+ msgid "Specify the size of the cache in entries (defaults to %s)."
+ msgstr "Spécifie le nombre d'entrées que contiendra le cache (par défaut : %s)."
+
+-#: option.c:323
++#: option.c:335
+ #, c-format
+ msgid "Specify configuration file (defaults to %s)."
+ msgstr "Spécifie le nom du fichier de configuration (par défaut : %s)"
+
+-#: option.c:324
++#: option.c:336
+ msgid "Do NOT fork into the background: run in debug mode."
+ msgstr "Ne passe pas en tâche de fond : démarre en mode debug"
+
+-#: option.c:325
++#: option.c:337
+ msgid "Do NOT forward queries with no domain part."
+ msgstr "Ne retransmet pas les requêtes qui n'ont pas de domaine."
+
+-#: option.c:326
++#: option.c:338
+ msgid "Return self-pointing MX records for local hosts."
+ msgstr "Retourne les champs MX pour les machines locales."
+
+-#: option.c:327
++#: option.c:339
+ msgid "Expand simple names in /etc/hosts with domain-suffix."
+ msgstr "Etend les noms uniques des machines dans /etc/hosts avec le suffixe du domaine."
+
+-#: option.c:328
++#: option.c:340
+ msgid "Don't forward spurious DNS requests from Windows hosts."
+ msgstr "Ne retransmet pas les fausses requêtes DNS en provenance des machines Windows."
+
+-#: option.c:329
++#: option.c:341
+ msgid "Enable DHCP in the range given with lease duration."
+ msgstr "Autorise DHCP dans la plage d'adresses donnée sur la durée de validité du bail."
+
+-#: option.c:330
++#: option.c:342
+ #, c-format
+ msgid "Change to this group after startup (defaults to %s)."
+ msgstr "On change pour ce groupe après le démarrage (par défaut : %s)."
+
+-#: option.c:331
++#: option.c:343
+ msgid "Set address or hostname for a specified machine."
+ msgstr "On assigne une adresse ou un nom pour une machine spécifiée."
+
+-#: option.c:332
++#: option.c:344
+ msgid "Read DHCP host specs from file."
+ msgstr "Lecture des spécifications d'hôtes DHCP à partir du fichier"
+
+-#: option.c:333
++#: option.c:345
+ msgid "Read DHCP option specs from file."
+ msgstr "Lecture des options DHCP à partir du fichier"
+
+-#: option.c:334
++#: option.c:346
++#, fuzzy
++msgid "Read DHCP host specs from a directory."
++msgstr "Lecture des spécifications d'hôtes DHCP à partir du fichier"
++
++#: option.c:347
++#, fuzzy
++msgid "Read DHCP options from a directory."
++msgstr "Lecture des options DHCP à partir du fichier"
++
++#: option.c:348
+ msgid "Evaluate conditional tag expression."
+ msgstr "Expression d'évaluation conditionnelle d'étiquette"
+
+-#: option.c:335
++#: option.c:349
+ #, c-format
+ msgid "Do NOT load %s file."
+ msgstr "Ne charge PAS le fichier %s."
+
+-#: option.c:336
++#: option.c:350
+ #, c-format
+ msgid "Specify a hosts file to be read in addition to %s."
+ msgstr "Spécifie un nom de fichier hosts à lire en complément de %s"
+
+-#: option.c:337
++#: option.c:351
++#, fuzzy
++msgid "Read hosts files from a directory."
++msgstr "Lecture des spécifications d'hôtes DHCP à partir du fichier"
++
++#: option.c:352
+ msgid "Specify interface(s) to listen on."
+ msgstr "Spécifie la ou les interface(s) où le démon doit se mettre à l'écoute."
+
+-#: option.c:338
++#: option.c:353
+ msgid "Specify interface(s) NOT to listen on."
+ msgstr "Spécifie la ou les interface(s) que le démon ne doit PAS traiter."
+
+ #
+-#: option.c:339
++#: option.c:354
+ msgid "Map DHCP user class to tag."
+ msgstr "Associe les classes d'utilisateurs ('user class') DHCP aux options."
+
+-#: option.c:340
++#: option.c:355
+ msgid "Map RFC3046 circuit-id to tag."
+ msgstr "Associe les identifiants de circuits RFC3046 ('circuit-id') aux options"
+
+-#: option.c:341
++#: option.c:356
+ msgid "Map RFC3046 remote-id to tag."
+ msgstr "Associe les identifiants distants RFC3046 ('remote-id') aux options"
+
+-#: option.c:342
++#: option.c:357
+ msgid "Map RFC3993 subscriber-id to tag."
+ msgstr "Associe les identifiants de souscripteurs RFC3993 ('subscriber-id') aux options"
+
+ #
+-#: option.c:343
++#: option.c:358
+ msgid "Don't do DHCP for hosts with tag set."
+ msgstr "Ne pas autoriser DHCP pour les machines énumerées dans les options."
+
+ #
+-#: option.c:344
++#: option.c:359
+ msgid "Force broadcast replies for hosts with tag set."
+ msgstr "Forcer les réponses par 'broadcast' pour les machines énumerées dans les options."
+
+-#: option.c:345
++#: option.c:360
+ msgid "Do NOT fork into the background, do NOT run in debug mode."
+ msgstr "Ne passe pas en tâche de fond, ne pas s'exécuter en mode debug."
+
+-#: option.c:346
++#: option.c:361
+ msgid "Assume we are the only DHCP server on the local network."
+ msgstr "On considère que l'on est le seul serveur DHCP sur le réseau local."
+
+-#: option.c:347
++#: option.c:362
+ #, c-format
+ msgid "Specify where to store DHCP leases (defaults to %s)."
+ msgstr "Spécifie où il faut sauvegarder les baux DHCP (par défaut : %s)."
+
+-#: option.c:348
++#: option.c:363
+ msgid "Return MX records for local hosts."
+ msgstr "Retourne les champs MX pour les machines locales."
+
+-#: option.c:349
++#: option.c:364
+ msgid "Specify an MX record."
+ msgstr "Spécifie un champ MX."
+
+-#: option.c:350
++#: option.c:365
+ msgid "Specify BOOTP options to DHCP server."
+ msgstr "Spécifie les options BOOTP pour le serveur DHCP."
+
+-#: option.c:351
++#: option.c:366
+ #, c-format
+ msgid "Do NOT poll %s file, reload only on SIGHUP."
+ msgstr "Ne pas scruter le fichier %s, ne recharger les modifications que sur réception du signal SIGHUP."
+
+-#: option.c:352
++#: option.c:367
+ msgid "Do NOT cache failed search results."
+ msgstr "Ne place pas en cache le résultat des requêtes qui ont échouées."
+
+-#: option.c:353
++#: option.c:368
+ #, c-format
+ msgid "Use nameservers strictly in the order given in %s."
+ msgstr "Utilise les serveurs de noms dans l'ordre donné dans %s."
+
+ #
+-#: option.c:354
++#: option.c:369
+ msgid "Specify options to be sent to DHCP clients."
+ msgstr "Options supplémentaires à associer aux clients DHCP."
+
+-#: option.c:355
++#: option.c:370
+ msgid "DHCP option sent even if the client does not request it."
+ msgstr "Option DHCP envoyée même si le client de la demande pas."
+
+-#: option.c:356
++#: option.c:371
+ msgid "Specify port to listen for DNS requests on (defaults to 53)."
+ msgstr "Spécifie le port où il faut écouter les requêtes DNS (par défaut : 53)."
+
+-#: option.c:357
++#: option.c:372
+ #, c-format
+ msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
+ msgstr "Taille maximale des paquets UDP supportés pour EDNS.0 (par défaut : %s)."
+
+ #
+-#: option.c:358
++#: option.c:373
+ msgid "Log DNS queries."
+ msgstr "Enregistre les requêtes DNS dans un journal d'activité."
+
+ #
+-#: option.c:359
++#: option.c:374
+ msgid "Force the originating port for upstream DNS queries."
+ msgstr "Force le port d'origine pour les requêtes vers les serveurs amonts."
+
+-#: option.c:360
++#: option.c:375
+ msgid "Do NOT read resolv.conf."
+ msgstr "Ne pas lire le fichier resolv.conf."
+
+-#: option.c:361
++#: option.c:376
+ #, c-format
+ msgid "Specify path to resolv.conf (defaults to %s)."
+ msgstr "Spécifie le chemin pour le fichier resolv.conf (par défaut : %s)."
+
+-#: option.c:362
++#: option.c:377
+ #, fuzzy
+ msgid "Specify path to file with server= options"
+ msgstr "Spécifie un chemin pour le fichier PID (par défaut : %s)."
+
+-#: option.c:363
++#: option.c:378
+ msgid "Specify address(es) of upstream servers with optional domains."
+ msgstr "Spécifie la ou les adresses des serveurs amonts avec des domaines optionels."
+
+-#: option.c:364
++#: option.c:379
+ #, fuzzy
+ msgid "Specify address of upstream servers for reverse address queries"
+ msgstr "Spécifie la ou les adresses des serveurs amonts avec des domaines optionels."
+
+-#: option.c:365
++#: option.c:380
+ msgid "Never forward queries to specified domains."
+ msgstr "Ne jamais retransmettre les requêtes pour les domaines spécifiés."
+
+-#: option.c:366
++#: option.c:381
+ msgid "Specify the domain to be assigned in DHCP leases."
+ msgstr "Spécifie le domaine qui doit etre assigné aux baux DHCP."
+
+-#: option.c:367
++#: option.c:382
+ msgid "Specify default target in an MX record."
+ msgstr "Spécifie la cible par défaut dans un champ MX."
+
+-#: option.c:368
++#: option.c:383
+ msgid "Specify time-to-live in seconds for replies from /etc/hosts."
+ msgstr "Spécifie le TTL en secondes pour les réponses qui utilisent /etc/hosts."
+
+ #
+-#: option.c:369
++#: option.c:384
+ msgid "Specify time-to-live in seconds for negative caching."
+ msgstr "Spécifie le TTL en secondes pour les réponses qui utilisent /etc/hosts."
+
+-#: option.c:370
++#: option.c:385
+ msgid "Specify time-to-live in seconds for maximum TTL to send to clients."
+ msgstr "Spécifie, en secondes, la valeur maximum de TTL à renvoyer aux clients."
+
+-#: option.c:371
++#
++#: option.c:386
++#, fuzzy
++msgid "Specify time-to-live ceiling for cache."
++msgstr "Spécifie le TTL en secondes pour les réponses qui utilisent /etc/hosts."
++
++#
++#: option.c:387
++#, fuzzy
++msgid "Specify time-to-live floor for cache."
++msgstr "Spécifie le TTL en secondes pour les réponses qui utilisent /etc/hosts."
++
++#: option.c:388
+ #, c-format
+ msgid "Change to this user after startup. (defaults to %s)."
+ msgstr "Change pour cet utilisateur après le démarrage (par défaut : %s)."
+
+ #
+-#: option.c:372
++#: option.c:389
+ msgid "Map DHCP vendor class to tag."
+ msgstr "Associe les classes de fournisseurs ('vendor class') DHCP aux options."
+
+-#: option.c:373
++#: option.c:390
+ msgid "Display dnsmasq version and copyright information."
+ msgstr "Affiche la version de Dnsmasq et les informations liées au copyright."
+
+-#: option.c:374
++#: option.c:391
+ msgid "Translate IPv4 addresses from upstream servers."
+ msgstr "Traduit les adresses IPV4 des serveurs amonts."
+
+-#: option.c:375
++#: option.c:392
+ msgid "Specify a SRV record."
+ msgstr "Spécifie un champ SRV."
+
+-#: option.c:376
++#: option.c:393
+ msgid "Display this message. Use --help dhcp for known DHCP options."
+ msgstr "Afficher ce message. Utiliser --help dhcp pour obtenir la liste des options DHCP connues."
+
+-#: option.c:377
++#: option.c:394
+ #, c-format
+ msgid "Specify path of PID file (defaults to %s)."
+ msgstr "Spécifie un chemin pour le fichier PID (par défaut : %s)."
+
+-#: option.c:378
++#: option.c:395
+ #, c-format
+ msgid "Specify maximum number of DHCP leases (defaults to %s)."
+ msgstr "Spécifie le nombre maximum de baux DHCP (par défaut : %s)."
+
+-#: option.c:379
++#: option.c:396
+ msgid "Answer DNS queries based on the interface a query was sent to."
+ msgstr "Repond aux requêtes DNS en se basant sur l'interface ou a été envoyée la requête."
+
+-#: option.c:380
++#: option.c:397
+ msgid "Specify TXT DNS record."
+ msgstr "Spécifie un champ DNS TXT"
+
+ #
+-#: option.c:381
++#: option.c:398
+ msgid "Specify PTR DNS record."
+ msgstr "Spécifie un champ DNS PTR"
+
+-#: option.c:382
++#: option.c:399
+ msgid "Give DNS name to IPv4 address of interface."
+ msgstr "Donne le nom DNS pour l'adresse IPv4 de l'interface."
+
+-#: option.c:383
++#: option.c:400
+ msgid "Bind only to interfaces in use."
+ msgstr "Association uniquement aux interfaces réseau actuellement actives."
+
+-#: option.c:384
++#: option.c:401
+ #, c-format
+ msgid "Read DHCP static host information from %s."
+ msgstr "Lecture des informations de DHCP statique à partir de %s."
+
+-#: option.c:385
++#: option.c:402
+ msgid "Enable the DBus interface for setting upstream servers, etc."
+ msgstr "Autorise l'interface DBus pour la configuration des serveurs amonts, etc."
+
+-#: option.c:386
++#: option.c:403
+ msgid "Do not provide DHCP on this interface, only provide DNS."
+ msgstr "Ne pas assurer de fonction DHCP sur cette interface, mais seulement la fonction DNS."
+
+-#: option.c:387
++#: option.c:404
+ msgid "Enable dynamic address allocation for bootp."
+ msgstr "Autorise l'allocation dynamique d'adresse pour bootp."
+
+ #
+-#: option.c:388
++#: option.c:405
+ msgid "Map MAC address (with wildcards) to option set."
+ msgstr "Associe l'adresse MAC (avec les jokers) aux options."
+
+-#: option.c:389
++#: option.c:406
+ msgid "Treat DHCP requests on aliases as arriving from interface."
+ msgstr "Traiter les requêtes DHCP sur les alias comme arrivant de l'interface."
+
+-#: option.c:390
++#: option.c:407
+ msgid "Disable ICMP echo address checking in the DHCP server."
+ msgstr "Supprime la vérification d'adresse sur le serveur au moyen de paquets ICMP echo"
+
+-#: option.c:391
++#: option.c:408
+ msgid "Shell script to run on DHCP lease creation and destruction."
+ msgstr "Script shell à exécuter lors de la création ou destruction de bail DHCP."
+
+-#: option.c:392
++#: option.c:409
+ msgid "Lua script to run on DHCP lease creation and destruction."
+ msgstr "Script Lua à exécuter lors de la création ou destruction de bail DHCP."
+
+-#: option.c:393
++#: option.c:410
+ msgid "Run lease-change scripts as this user."
+ msgstr "Lancer le script 'lease-change' avec cet utilisateur."
+
+-#: option.c:394
++#: option.c:411
+ msgid "Read configuration from all the files in this directory."
+ msgstr "Lecture de la configuration dans tous les fichiers de ce répertoire."
+
+ #
+-#: option.c:395
++#: option.c:412
+ msgid "Log to this syslog facility or file. (defaults to DAEMON)"
+ msgstr "Enregistrer les journaux d'activité dans cette facilité syslog. (défaut : DAEMON)"
+
+-#: option.c:396
++#: option.c:413
+ msgid "Do not use leasefile."
+ msgstr "Ne pas utiliser de fichier de baux."
+
+-#: option.c:397
++#: option.c:414
+ #, c-format
+ msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
+ msgstr "Spécifie le nombre maximum de requêtes DHCP concurrentes (par défaut : %s)."
+
+-#: option.c:398
++#: option.c:415
+ #, c-format
+ msgid "Clear DNS cache when reloading %s."
+ msgstr "Vider le cache DNS lors du rechargement de %s."
+
+-#: option.c:399
++#: option.c:416
+ msgid "Ignore hostnames provided by DHCP clients."
+ msgstr "Ignorer les noms d'hôtes fournis par les clients DHCP"
+
+-#: option.c:400
++#: option.c:417
+ msgid "Do NOT reuse filename and server fields for extra DHCP options."
+ msgstr "Ne pas réutiliser les champs nom de fichier et serveur dans les options DHCP supplémentaires."
+
+-#: option.c:401
++#: option.c:418
+ msgid "Enable integrated read-only TFTP server."
+ msgstr "Activer le server TFTP intégré (fonctionnant en lecture seulement)"
+
+-#: option.c:402
++#: option.c:419
+ msgid "Export files by TFTP only from the specified subtree."
+ msgstr "N'exporter par TFTP que les fichiers de l'arborescence de fichier spécifiée"
+
+-#: option.c:403
++#: option.c:420
+ msgid "Add client IP address to tftp-root."
+ msgstr "Ajouter les adresses IP clientes à la racine tftp ('tftp-root')."
+
+-#: option.c:404
++#: option.c:421
+ msgid "Allow access only to files owned by the user running dnsmasq."
+ msgstr "Accès aux seuls fichiers appartenants à l'utilisateur sous lequel tourne dnsmasq"
+
+-#: option.c:405
++#: option.c:422
+ #, c-format
+ msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
+ msgstr "Spécifie le nombre maximum de transfert TFTP concurrents (défaut : %s)."
+
+-#: option.c:406
++#: option.c:423
+ msgid "Disable the TFTP blocksize extension."
+ msgstr "Désactivation de l'extension TFTP « taille de bloc »"
+
+-#: option.c:407
++#: option.c:424
+ msgid "Convert TFTP filenames to lowercase"
+ msgstr "Convertis les noms de fichiers TFTP en minuscule"
+
+-#: option.c:408
++#: option.c:425
+ msgid "Ephemeral port range for use by TFTP transfers."
+ msgstr "Gamme de ports dans laquelle seront choisis les ports temporaires utilisés dans les transferts TFTP."
+
+-#: option.c:409
++#: option.c:426
+ msgid "Extra logging for DHCP."
+ msgstr "Traces supplémentaires pour le DHCP."
+
+-#: option.c:410
++#: option.c:427
+ msgid "Enable async. logging; optionally set queue length."
+ msgstr "Active l'écriture de traces en mode asynchrone. Peut prendre en option la valeur de la longueur de la queue."
+
+-#: option.c:411
++#: option.c:428
+ msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
+ msgstr "Stopper la réassociation DNS ('DNS rebinding'). Filtre les gammes d'adresses IP privées lors de la résolution."
+
+-#: option.c:412
++#: option.c:429
+ msgid "Allow rebinding of 127.0.0.0/8, for RBL servers."
+ msgstr "Autorise la réassociation de 127.0.0/8, pour les serveurs RBL (Realtime Blackhole List)"
+
+-#: option.c:413
++#: option.c:430
+ msgid "Inhibit DNS-rebind protection on this domain."
+ msgstr "Désactive la protection contre les réassociation DNS pour ce domaine"
+
+-#: option.c:414
++#: option.c:431
+ msgid "Always perform DNS queries to all servers."
+ msgstr "Toujours effectuer les requêtes DNS à tous les serveurs."
+
+ #
+-#: option.c:415
++#: option.c:432
+ msgid "Set tag if client includes matching option in request."
+ msgstr "Spécifie le label si le client inclus l'option dans la requête."
+
+-#: option.c:416
++#: option.c:433
+ msgid "Use alternative ports for DHCP."
+ msgstr "Utiliser des ports alternatifs pour le DHCP."
+
+ #
+-#: option.c:417
++#: option.c:434
+ msgid "Specify NAPTR DNS record."
+ msgstr "Spécifie un champ DNS NAPTR."
+
+-#: option.c:418
++#: option.c:435
+ msgid "Specify lowest port available for DNS query transmission."
+ msgstr "Définie le plus petit port utilisé pour la transmission d'une requête DNS."
+
+-#: option.c:419
++#: option.c:436
+ msgid "Use only fully qualified domain names for DHCP clients."
+ msgstr "Utilise seulement les noms de domaine pleinement qualifiés pour les clients DHCP."
+
+-#: option.c:420
++#: option.c:437
+ msgid "Generate hostnames based on MAC address for nameless clients."
+ msgstr "Génère les noms d'hôtes à partir de l'adresse MAC pour les clients sans nom."
+
+-#: option.c:421
++#: option.c:438
+ msgid "Use these DHCP relays as full proxies."
+ msgstr "Utilise ces relais DHCP en temps que proxy complets."
+
+-#: option.c:422
++#: option.c:439
+ msgid "Relay DHCP requests to a remote server"
+ msgstr "Requêtes de relais DHCP à un serveur distant"
+
+-#: option.c:423
++#: option.c:440
+ msgid "Specify alias name for LOCAL DNS name."
+ msgstr "Spécifie un alias pour un nom DNS local."
+
+ #
+-#: option.c:424
++#: option.c:441
+ msgid "Prompt to send to PXE clients."
+ msgstr "Invite à envoyer aux clients PXE."
+
+-#: option.c:425
++#: option.c:442
+ msgid "Boot service for PXE menu."
+ msgstr "Service de démarrage pour menu PXE."
+
+-#: option.c:426
++#: option.c:443
+ msgid "Check configuration syntax."
+ msgstr "vérification de la syntaxe de la configuration."
+
+-#: option.c:427
++#: option.c:444
+ msgid "Add requestor's MAC address to forwarded DNS queries."
+ msgstr "Ajoute l'adresse MAC du requêteur aux requêtes DNS transmises"
+
+-#: option.c:428
++#: option.c:445
+ #, fuzzy
+ msgid "Add requestor's IP subnet to forwarded DNS queries."
+ msgstr "Ajoute l'adresse MAC du requêteur aux requêtes DNS transmises"
+
+-#: option.c:429
++#: option.c:446
+ msgid "Proxy DNSSEC validation results from upstream nameservers."
+ msgstr "Copie dans la réponse DNS le résultat de la validation DNSSEC effectuée par les serveurs DNS amonts."
+
+-#: option.c:430
++#: option.c:447
+ msgid "Attempt to allocate sequential IP addresses to DHCP clients."
+ msgstr "Essaie d'allouer des adresses IP séquentielles aux clients DHCP."
+
+-#: option.c:431
++#: option.c:448
+ msgid "Copy connection-track mark from queries to upstream connections."
+ msgstr "Copie les marques de suivi de connexion pour les requêtes amont."
+
+-#: option.c:432
++#: option.c:449
+ msgid "Allow DHCP clients to do their own DDNS updates."
+ msgstr "Autoriser les clients DHCP à faire leurs propres mises à jour DDNS (Dynamic DNS)"
+
+-#: option.c:433
++#: option.c:450
+ msgid "Send router-advertisements for interfaces doing DHCPv6"
+ msgstr "Envoyer des annonces de routeurs pour toutes les interfaces faisant du DHCPv6"
+
+-#: option.c:434
++#: option.c:451
+ msgid "Specify DUID_EN-type DHCPv6 server DUID"
+ msgstr "Spécifie pour le serveur DHCPv6 un identifiant unique DHCP (DUID) basé sur un numéro unique de vendeur (DUID_EN)"
+
+-#: option.c:435
++#: option.c:452
+ msgid "Specify host (A/AAAA and PTR) records"
+ msgstr "Spécifie les enregistrements (A/AAAA et PTR) d'un hôte."
+
+-#: option.c:436
++#: option.c:453
+ msgid "Specify arbitrary DNS resource record"
+ msgstr "Définie une resource DNS d'un type spécifique"
+
+-#: option.c:437
++#: option.c:454
+ msgid "Bind to interfaces in use - check for new interfaces"
+ msgstr "Se lie aux interfaces préexistantes - vérifie l'apparition de nouvelles interfaces"
+
+-#: option.c:438
++#: option.c:455
+ msgid "Export local names to global DNS"
+ msgstr "Exporte les noms locaux dans le DNS global"
+
+-#: option.c:439
++#: option.c:456
+ msgid "Domain to export to global DNS"
+ msgstr "Domaine à exporter dans le DNS global"
+
+-#: option.c:440
++#: option.c:457
+ msgid "Set TTL for authoritative replies"
+ msgstr "Configure la durée de vie (Time To Live) pour les réponses faisant autorité"
+
+-#: option.c:441
++#: option.c:458
+ msgid "Set authoritive zone information"
+ msgstr "Configure les informations pour une zone de nom faisant autorité"
+
+-#: option.c:442
++#: option.c:459
+ msgid "Secondary authoritative nameservers for forward domains"
+ msgstr "Serveurs de noms secondaires faisant autorité pour les domaines délégués"
+
+-#: option.c:443
++#: option.c:460
+ msgid "Peers which are allowed to do zone transfer"
+ msgstr "Pairs autorisés à faire des transferts de zone"
+
+-#: option.c:444
++#: option.c:461
+ msgid "Specify ipsets to which matching domains should be added"
+ msgstr "Spécifie les ipsets auxquels les domaines correspondants doivent-être ajoutés"
+
+-#: option.c:445
++#: option.c:462
+ #, fuzzy
+ msgid "Specify a domain and address range for synthesised names"
+ msgstr "Spécifie un domaine et une plage d'adresses pour les noms auto-générés"
+
+-#: option.c:446
++#: option.c:463
+ msgid "Activate DNSSEC validation"
+ msgstr ""
+
+-#: option.c:447
++#: option.c:464
+ msgid "Specify trust anchor key digest."
+ msgstr ""
+
+-#: option.c:448
++#: option.c:465
+ msgid "Disable upstream checking for DNSSEC debugging."
+ msgstr ""
+
+-#: option.c:449
++#: option.c:466
+ msgid "Ensure answers without DNSSEC are in unsigned zones."
+ msgstr ""
+
+-#: option.c:450
++#: option.c:467
+ msgid "Don't check DNSSEC signature timestamps until first cache-reload"
+ msgstr ""
+
+-#: option.c:452
++#: option.c:468
++msgid "Timestamp file to verify system clock for DNSSEC"
++msgstr ""
++
++#: option.c:470
+ msgid "Specify DHCPv6 prefix class"
+ msgstr "Spécifie le préfixe de classe DHCPv6"
+
+-#: option.c:454
++#: option.c:472
+ msgid "Set priority, resend-interval and router-lifetime"
+ msgstr ""
+
+-#: option.c:455
++#: option.c:473
+ msgid "Do not log routine DHCP."
+ msgstr ""
+
+-#: option.c:456
++#: option.c:474
+ msgid "Do not log routine DHCPv6."
+ msgstr ""
+
+-#: option.c:457
++#: option.c:475
+ msgid "Do not log RA."
+ msgstr ""
+
+-#: option.c:458
++#: option.c:476
+ msgid "Accept queries only from directly-connected networks"
+ msgstr ""
+
+-#: option.c:459
++#: option.c:477
+ msgid "Detect and remove DNS forwarding loops"
+ msgstr ""
+
+-#: option.c:661
++#: option.c:478
++msgid "Ignore DNS responses containing ipaddr."
++msgstr ""
++
++#: option.c:680
+ #, c-format
+ msgid ""
+ "Usage: dnsmasq [options]\n"
+@@ -714,328 +749,328 @@ msgstr ""
+ "Usage : dnsmasq [options]\n"
+ "\n"
+
+-#: option.c:663
++#: option.c:682
+ #, c-format
+ msgid "Use short options only on the command line.\n"
+ msgstr "Utilisez les options courtes uniquement sur la ligne de commande.\n"
+
+-#: option.c:665
++#: option.c:684
+ #, c-format
+ msgid "Valid options are:\n"
+ msgstr "Les options valides sont :\n"
+
+-#: option.c:722 option.c:726
++#: option.c:741 option.c:745
+ msgid "bad port"
+ msgstr "numéro de port incorrect"
+
+-#: option.c:753 option.c:785
++#: option.c:772 option.c:804
+ msgid "interface binding not supported"
+ msgstr "association d'interface non supportée"
+
+ #
+-#: option.c:762 option.c:3494
++#: option.c:781 option.c:3570
+ msgid "bad interface name"
+ msgstr "nom d'interface invalide"
+
+ #
+-#: option.c:792
++#: option.c:811
+ msgid "bad address"
+ msgstr "mauvaise adresse"
+
+-#: option.c:974
++#: option.c:993
+ msgid "unsupported encapsulation for IPv6 option"
+ msgstr "encapsulation d'option non supportée pour IPv6"
+
+-#: option.c:988
++#: option.c:1007
+ msgid "bad dhcp-option"
+ msgstr "mauvaise valeur de 'dhcp-option'"
+
+ #
+-#: option.c:1056
++#: option.c:1075
+ msgid "bad IP address"
+ msgstr "mauvaise adresse IP"
+
+ #
+-#: option.c:1059 option.c:1197 option.c:2812
++#: option.c:1078 option.c:1216 option.c:2888
+ msgid "bad IPv6 address"
+ msgstr "mauvaise adresse IPv6"
+
+-#: option.c:1224 option.c:1318
++#: option.c:1243 option.c:1337
+ msgid "bad domain in dhcp-option"
+ msgstr "mauvais domaine dans dhcp-option"
+
+-#: option.c:1356
++#: option.c:1375
+ msgid "dhcp-option too long"
+ msgstr "dhcp-option trop long"
+
+-#: option.c:1363
++#: option.c:1382
+ msgid "illegal dhcp-match"
+ msgstr "valeur illégale pour 'dhcp-match'"
+
+-#: option.c:1425
++#: option.c:1444
+ msgid "illegal repeated flag"
+ msgstr "Une option ne pouvant être spécifié qu'une seule fois à été donnée plusieurs fois"
+
+-#: option.c:1433
++#: option.c:1452
+ msgid "illegal repeated keyword"
+ msgstr "Mot-clef ne pouvant être répété"
+
+-#: option.c:1495 option.c:4092
++#: option.c:1517 option.c:4186
+ #, c-format
+ msgid "cannot access directory %s: %s"
+ msgstr "Ne peut pas lire le répertoire %s : %s"
+
+-#: option.c:1541 tftp.c:493
++#: option.c:1563 tftp.c:493
+ #, c-format
+ msgid "cannot access %s: %s"
+ msgstr "Ne peut pas lire %s : %s"
+
+-#: option.c:1588
++#: option.c:1615
+ msgid "setting log facility is not possible under Android"
+ msgstr "Sous android, impossible de positionner la cible (facility) pour les traces (logs)."
+
+-#: option.c:1597
++#: option.c:1624
+ msgid "bad log facility"
+ msgstr "Mauvaise cible (facility) pour les traces."
+
+-#: option.c:1650
++#: option.c:1677
+ msgid "bad MX preference"
+ msgstr "préference MX incorrecte"
+
+-#: option.c:1655
++#: option.c:1682
+ msgid "bad MX name"
+ msgstr "nom MX incorrect"
+
+-#: option.c:1669
++#: option.c:1696
+ msgid "bad MX target"
+ msgstr "valeur MX cible incorrecte"
+
+-#: option.c:1681
++#: option.c:1708
+ msgid "cannot run scripts under uClinux"
+ msgstr "ne peut exécuter de script sous uClinux"
+
+-#: option.c:1683
++#: option.c:1710
+ msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts"
+ msgstr "recompiler en définissant HAVE_SCRIPT pour permettre l'exécution de scripts shell au changement de bail (lease-change)"
+
+-#: option.c:1687
++#: option.c:1714
+ msgid "recompile with HAVE_LUASCRIPT defined to enable Lua scripts"
+ msgstr "recompiler en définissant HAVE_LUASCRIPT pour permettre l'exécution de scripts LUA au changement de bail (lease-change)"
+
+-#: option.c:1928 option.c:1966 option.c:2015
++#: option.c:1970 option.c:2015 option.c:2071
+ msgid "bad prefix"
+ msgstr "mauvais préfixe"
+
+-#: option.c:2289
++#: option.c:2352
+ msgid "recompile with HAVE_IPSET defined to enable ipset directives"
+ msgstr "recompiler en définissant HAVE_IPSET pour permettre l'utilisation de directives de groupes d'IP (IPset)"
+
+ #
+-#: option.c:2469
++#: option.c:2545
+ msgid "bad port range"
+ msgstr "gamme de ports incorrecte"
+
+-#: option.c:2485
++#: option.c:2561
+ msgid "bad bridge-interface"
+ msgstr "interface-pont incorrecte"
+
+-#: option.c:2545
++#: option.c:2621
+ msgid "only one tag allowed"
+ msgstr "une seule étiquette est autorisée"
+
+-#: option.c:2565 option.c:2577 option.c:2683 option.c:2724
++#: option.c:2641 option.c:2653 option.c:2759 option.c:2800
+ msgid "bad dhcp-range"
+ msgstr "plage d'adresses DHCP (dhcp-range) incorrecte"
+
+-#: option.c:2592
++#: option.c:2668
+ msgid "inconsistent DHCP range"
+ msgstr "plage d'adresses DHCP incohérente"
+
+-#: option.c:2651
++#: option.c:2727
+ msgid "prefix length must be exactly 64 for RA subnets"
+ msgstr "la taille du préfixe doit être exactement 64 pour les sous-réseaux d'annonces de routeurs (RA)"
+
+-#: option.c:2653
++#: option.c:2729
+ msgid "prefix length must be exactly 64 for subnet constructors"
+ msgstr "la taille du préfixe doit être exactement 64 pour le constructeur de sous-réseaux"
+
+-#: option.c:2657
++#: option.c:2733
+ msgid "prefix length must be at least 64"
+ msgstr "la taille de préfixe doit être au minimum 64"
+
+-#: option.c:2660
++#: option.c:2736
+ msgid "inconsistent DHCPv6 range"
+ msgstr "plage d'adresses DHCPv6 incohérente"
+
+-#: option.c:2671
++#: option.c:2747
+ msgid "prefix must be zero with \"constructor:\" argument"
+ msgstr "le préfixe doit avoir une taille de 0 lorsque l'argument \"constructor:\" est utilisé"
+
+-#: option.c:2782 option.c:2830
++#: option.c:2858 option.c:2906
+ msgid "bad hex constant"
+ msgstr "mauvaise constante hexadecimale"
+
+-#: option.c:2804
++#: option.c:2880
+ msgid "cannot match tags in --dhcp-host"
+ msgstr "L'utilisation de labels est prohibée dans --dhcp-host"
+
+-#: option.c:2852
++#: option.c:2928
+ #, c-format
+ msgid "duplicate dhcp-host IP address %s"
+ msgstr "adresse IP dhcp-host dupliquée dans %s."
+
+ #
+-#: option.c:2910
++#: option.c:2986
+ msgid "bad DHCP host name"
+ msgstr "nom d'hôte DHCP incorrect"
+
+-#: option.c:2992
++#: option.c:3068
+ msgid "bad tag-if"
+ msgstr "mauvaise étiquette tag-if"
+
+-#: option.c:3316 option.c:3710
++#: option.c:3392 option.c:3786
+ msgid "invalid port number"
+ msgstr "numéro de port invalide"
+
+ #
+-#: option.c:3378
++#: option.c:3454
+ msgid "bad dhcp-proxy address"
+ msgstr "adresse dhcp-proxy incorrecte"
+
+-#: option.c:3404
++#: option.c:3480
+ msgid "Bad dhcp-relay"
+ msgstr "valeur incorrecte pour le relais DHCP (dhcp-relay)"
+
+-#: option.c:3430
++#: option.c:3506
+ msgid "bad RA-params"
+ msgstr ""
+
+-#: option.c:3439
++#: option.c:3515
+ msgid "bad DUID"
+ msgstr "mauvais identifiant unique DHCP (DUID)"
+
+ #
+-#: option.c:3481
++#: option.c:3557
+ msgid "invalid alias range"
+ msgstr "poids invalide"
+
+-#: option.c:3535
++#: option.c:3611
+ msgid "bad CNAME"
+ msgstr "mauvais CNAME"
+
+-#: option.c:3540
++#: option.c:3616
+ msgid "duplicate CNAME"
+ msgstr "ce CNAME existe déja"
+
+ #
+-#: option.c:3560
++#: option.c:3636
+ msgid "bad PTR record"
+ msgstr "mauvais champ PTR"
+
+ #
+-#: option.c:3591
++#: option.c:3667
+ msgid "bad NAPTR record"
+ msgstr "mauvais champ NAPTR"
+
+ #
+-#: option.c:3625
++#: option.c:3701
+ msgid "bad RR record"
+ msgstr "mauvais enregistrement RR"
+
+-#: option.c:3655
++#: option.c:3731
+ msgid "bad TXT record"
+ msgstr "champ TXT invalide"
+
+-#: option.c:3696
++#: option.c:3772
+ msgid "bad SRV record"
+ msgstr "champ SRV invalide"
+
+-#: option.c:3703
++#: option.c:3779
+ msgid "bad SRV target"
+ msgstr "cible SRV invalide"
+
+-#: option.c:3717
++#: option.c:3793
+ msgid "invalid priority"
+ msgstr "priorité invalide"
+
+-#: option.c:3724
++#: option.c:3800
+ msgid "invalid weight"
+ msgstr "poids invalide"
+
+ #
+-#: option.c:3748
++#: option.c:3824
+ msgid "Bad host-record"
+ msgstr "mauvais champ host-record"
+
+-#: option.c:3765
++#: option.c:3841
+ msgid "Bad name in host-record"
+ msgstr "mauvais nom dans le champ host-record"
+
+ #
+-#: option.c:3826
++#: option.c:3906
+ #, fuzzy
+ msgid "bad trust anchor"
+ msgstr "gamme de ports incorrecte"
+
+-#: option.c:3840
++#: option.c:3920
+ msgid "bad HEX in trust anchor"
+ msgstr ""
+
+-#: option.c:3850
++#: option.c:3930
+ #, fuzzy
+ msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DNSSEC/DBus support)"
+ msgstr "option non supportée (vérifier que Dnsmasq a été compilé avec le support DHCP/TFTP/DBus)"
+
+-#: option.c:3909
++#: option.c:3989
+ msgid "missing \""
+ msgstr "il manque \""
+
+-#: option.c:3966
++#: option.c:4046
+ msgid "bad option"
+ msgstr "mauvaise option"
+
+-#: option.c:3968
++#: option.c:4048
+ msgid "extraneous parameter"
+ msgstr "paramètre en trop"
+
+-#: option.c:3970
++#: option.c:4050
+ msgid "missing parameter"
+ msgstr "paramètre manquant"
+
+-#: option.c:3972
++#: option.c:4052
+ #, fuzzy
+ msgid "illegal option"
+ msgstr "mauvaise option"
+
+-#: option.c:3979
++#: option.c:4059
+ msgid "error"
+ msgstr "erreur"
+
+-#: option.c:3981
++#: option.c:4061
+ #, c-format
+ msgid " at line %d of %s"
+ msgstr "à la ligne %d de %s"
+
+-#: option.c:4045 option.c:4168 tftp.c:667
+-#, c-format
+-msgid "cannot read %s: %s"
+-msgstr "Ne peut pas lire %s : %s"
+-
+-#: option.c:4229 option.c:4265
++#: option.c:4076 option.c:4323 option.c:4359
+ #, c-format
+ msgid "read %s"
+ msgstr "Lecture de %s"
+
+-#: option.c:4331
++#: option.c:4139 option.c:4262 tftp.c:667
++#, c-format
++msgid "cannot read %s: %s"
++msgstr "Ne peut pas lire %s : %s"
++
++#: option.c:4425
+ msgid "junk found in command line"
+ msgstr "la ligne de commande contient des éléments indésirables ou incompréhensibles"
+
+-#: option.c:4366
++#: option.c:4460
+ #, c-format
+ msgid "Dnsmasq version %s %s\n"
+ msgstr "Version de Dnsmasq %s %s\n"
+
+-#: option.c:4367
++#: option.c:4461
+ #, c-format
+ msgid ""
+ "Compile time options: %s\n"
+@@ -1044,89 +1079,89 @@ msgstr ""
+ "Options à la compilation %s\n"
+ "\n"
+
+-#: option.c:4368
++#: option.c:4462
+ #, c-format
+ msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
+ msgstr "Ce logiciel est fourni sans AUCUNE GARANTIE.\n"
+
+-#: option.c:4369
++#: option.c:4463
+ #, c-format
+ msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
+ msgstr "Dnsmasq est un logiciel libre, il vous est permis de le redistribuer\n"
+
+-#: option.c:4370
++#: option.c:4464
+ #, c-format
+ msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
+ msgstr "sous les termes de la licence GPL (GNU General Public License), version 2 ou 3.\n"
+
+-#: option.c:4381
++#: option.c:4475
+ msgid "try --help"
+ msgstr "essayez avec --help"
+
+-#: option.c:4383
++#: option.c:4477
+ msgid "try -w"
+ msgstr "essayez avec -w"
+
+-#: option.c:4385
++#: option.c:4479
+ #, c-format
+ msgid "bad command line options: %s"
+ msgstr "mauvaises options en ligne de commande : %s."
+
+-#: option.c:4434
++#: option.c:4535
+ #, c-format
+ msgid "cannot get host-name: %s"
+ msgstr "ne peut pas obtenir le nom de la machine : %s"
+
+-#: option.c:4462
++#: option.c:4563
+ msgid "only one resolv.conf file allowed in no-poll mode."
+ msgstr "seul un fichier resolv.conf est autorisé dans le mode no-poll"
+
+-#: option.c:4472
++#: option.c:4573
+ msgid "must have exactly one resolv.conf to read domain from."
+ msgstr "un fichier resolv.conf (et un seul) est nécessaire pour y récuperer le nom de domaine."
+
+-#: option.c:4475 network.c:1506 dhcp.c:769
++#: option.c:4576 network.c:1506 dhcp.c:774
+ #, c-format
+ msgid "failed to read %s: %s"
+ msgstr "impossible de lire %s : %s"
+
+-#: option.c:4492
++#: option.c:4593
+ #, c-format
+ msgid "no search directive found in %s"
+ msgstr "pas de directive de recherche trouvée dans %s"
+
+-#: option.c:4513
++#: option.c:4614
+ msgid "there must be a default domain when --dhcp-fqdn is set"
+ msgstr "un domaine par défaut doit être spécifié lorsque l'option --dhcp-fqdn est utilisée"
+
+-#: option.c:4522
++#: option.c:4623
+ msgid "syntax check OK"
+ msgstr "vérification de syntaxe OK"
+
+-#: forward.c:114
++#: forward.c:111
+ #, c-format
+ msgid "failed to send packet: %s"
+ msgstr "impossible d'envoyer le paquet : %s"
+
+-#: forward.c:574
++#: forward.c:572
+ msgid "discarding DNS reply: subnet option mismatch"
+ msgstr ""
+
+-#: forward.c:597
++#: forward.c:595
+ #, c-format
+ msgid "nameserver %s refused to do a recursive query"
+ msgstr "le serveur de nom %s a refusé de faire une recherche récursive"
+
+-#: forward.c:629
++#: forward.c:627
+ #, c-format
+ msgid "possible DNS-rebind attack detected: %s"
+ msgstr "détection d'une possible attaque de type DNS-rebind: %s"
+
+-#: forward.c:1132 forward.c:1663
++#: forward.c:1156 forward.c:1722
+ msgid "Ignoring query from non-local network"
+ msgstr ""
+
+-#: forward.c:2101
++#: forward.c:2178
+ #, c-format
+ msgid "Maximum number of concurrent DNS queries reached (max: %d)"
+ msgstr "Nombre maximum de requêtes DNS concurrentes atteint (maximum : %d)."
+@@ -1216,271 +1251,286 @@ msgstr "utilise le serveur de nom %s#%d (via %s)"
+ msgid "using nameserver %s#%d"
+ msgstr "utilise le serveur de nom %s#%d"
+
+-#: dnsmasq.c:154
+-msgid "No trust anchors provided for DNSSEC"
++#: dnsmasq.c:149
++msgid "dhcp-hostsdir, dhcp-optsdir and hostsdir are not supported on this platform"
+ msgstr ""
+
+-#: dnsmasq.c:157
+-msgid "Cannot reduce cache size from default when DNSSEC enabled"
++#: dnsmasq.c:156
++msgid "no trust anchors provided for DNSSEC"
+ msgstr ""
+
+ #: dnsmasq.c:159
++msgid "cannot reduce cache size from default when DNSSEC enabled"
++msgstr ""
++
++#: dnsmasq.c:161
+ #, fuzzy
+ msgid "DNSSEC not available: set HAVE_DNSSEC in src/config.h"
+ msgstr "DBus n'est pas disponible : activez HAVE_DBUS dans src/config.h"
+
+ #
+-#: dnsmasq.c:165
++#: dnsmasq.c:167
+ msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
+ msgstr "TFTP n'est pas disponible : activez HAVE_TFTP dans src/config.h"
+
+-#: dnsmasq.c:170
+-msgid "Cannot use --conntrack AND --query-port"
++#: dnsmasq.c:172
++#, fuzzy
++msgid "cannot use --conntrack AND --query-port"
+ msgstr "impossible d'utiliser conjointement --conntrack et --query-port"
+
+ #
+-#: dnsmasq.c:173
+-msgid "Conntrack support not available: set HAVE_CONNTRACK in src/config.h"
++#: dnsmasq.c:175
++#, fuzzy
++msgid "conntrack support not available: set HAVE_CONNTRACK in src/config.h"
+ msgstr "Support de suivi de connexion non disponible : activez HAVE_CONNTRACK dans src/config.h"
+
+-#: dnsmasq.c:178
++#: dnsmasq.c:180
+ msgid "asychronous logging is not available under Solaris"
+ msgstr "l'écriture de traces en mode asynchrone n'est pas disponible sous Solaris."
+
+-#: dnsmasq.c:183
++#: dnsmasq.c:185
+ msgid "asychronous logging is not available under Android"
+ msgstr "l'écriture de traces en mode asynchrone n'est pas disponible sous Android."
+
+-#: dnsmasq.c:188
++#: dnsmasq.c:190
+ msgid "authoritative DNS not available: set HAVE_AUTH in src/config.h"
+ msgstr "le mode « autorité DNS » n'est pas disponible : activez HAVE_AUTH dans src/config.h"
+
+ #
+-#: dnsmasq.c:193
++#: dnsmasq.c:195
+ #, fuzzy
+-msgid "Loop detection not available: set HAVE_LOOP in src/config.h"
++msgid "loop detection not available: set HAVE_LOOP in src/config.h"
+ msgstr "TFTP n'est pas disponible : activez HAVE_TFTP dans src/config.h"
+
+-#: dnsmasq.c:201
++#: dnsmasq.c:203
+ msgid "zone serial must be configured in --auth-soa"
+ msgstr "le numéro de série de la zone doit être configuré dans --auth-soa"
+
+-#: dnsmasq.c:219
++#: dnsmasq.c:221
+ msgid "dhcp-range constructor not available on this platform"
+ msgstr "le constructeur de plage dhcp n'est pas disponible sur cette plate-forme"
+
+-#: dnsmasq.c:262
++#: dnsmasq.c:264
+ msgid "cannot set --bind-interfaces and --bind-dynamic"
+ msgstr "--bind-interfaces et --bind-dynamic sont mutuellement exclusives"
+
+-#: dnsmasq.c:265
++#: dnsmasq.c:267
+ #, c-format
+ msgid "failed to find list of interfaces: %s"
+ msgstr "impossible de trouver la liste des interfaces : %s"
+
+-#: dnsmasq.c:274
++#: dnsmasq.c:276
+ #, c-format
+ msgid "unknown interface %s"
+ msgstr "interface %s inconnue"
+
+-#: dnsmasq.c:330 dnsmasq.c:954
++#: dnsmasq.c:340 dnsmasq.c:1004
+ #, c-format
+ msgid "DBus error: %s"
+ msgstr "Erreur DBus : %s"
+
+-#: dnsmasq.c:333
++#: dnsmasq.c:343
+ msgid "DBus not available: set HAVE_DBUS in src/config.h"
+ msgstr "DBus n'est pas disponible : activez HAVE_DBUS dans src/config.h"
+
+-#: dnsmasq.c:361
++#: dnsmasq.c:371
+ #, c-format
+ msgid "unknown user or group: %s"
+ msgstr "utilisateur ou groupe inconnu : %s"
+
+-#: dnsmasq.c:416
++#: dnsmasq.c:426
+ #, c-format
+ msgid "cannot chdir to filesystem root: %s"
+ msgstr "Ne peut effectuer un 'chdir' à la racine du système de fichier : %s"
+
+-#: dnsmasq.c:653
++#: dnsmasq.c:667
+ #, c-format
+ msgid "started, version %s DNS disabled"
+ msgstr "démarrage avec le DNS désactivé (version %s)"
+
+-#: dnsmasq.c:655
++#: dnsmasq.c:669
+ #, c-format
+ msgid "started, version %s cachesize %d"
+ msgstr "demarré, version %s (taille de cache %d)"
+
+-#: dnsmasq.c:657
++#: dnsmasq.c:671
+ #, c-format
+ msgid "started, version %s cache disabled"
+ msgstr "démarrage avec le cache désactivé (version %s)"
+
+-#: dnsmasq.c:659
++#: dnsmasq.c:673
+ #, c-format
+ msgid "compile time options: %s"
+ msgstr "options à la compilation : %s"
+
+-#: dnsmasq.c:665
++#: dnsmasq.c:679
+ msgid "DBus support enabled: connected to system bus"
+ msgstr "Support DBus autorisé : connecté au bus système"
+
+-#: dnsmasq.c:667
++#: dnsmasq.c:681
+ msgid "DBus support enabled: bus connection pending"
+ msgstr "Support DBus autorisé : connexion au bus en attente"
+
+-#: dnsmasq.c:672
++#: dnsmasq.c:686
+ msgid "DNS service limited to local subnets"
+ msgstr ""
+
+-#: dnsmasq.c:677
++#: dnsmasq.c:702
+ msgid "DNSSEC validation enabled"
+ msgstr ""
+
+-#: dnsmasq.c:679
++#: dnsmasq.c:705
+ msgid "DNSSEC signature timestamps not checked until first cache reload"
+ msgstr ""
+
+-#: dnsmasq.c:684
++#: dnsmasq.c:708
++msgid "DNSSEC signature timestamps not checked until system time valid"
++msgstr ""
++
++#: dnsmasq.c:713
+ #, c-format
+ msgid "warning: failed to change owner of %s: %s"
+ msgstr "Impossible de changer pour l'utilisateur %s : %s"
+
+-#: dnsmasq.c:688
++#: dnsmasq.c:717
+ msgid "setting --bind-interfaces option because of OS limitations"
+ msgstr "active l'option --bind-interfaces à cause de limitations dans le système d'exploitation"
+
+-#: dnsmasq.c:698
++#: dnsmasq.c:727
+ #, c-format
+ msgid "warning: interface %s does not currently exist"
+ msgstr "attention : l'interface %s n'existe pas actuellement"
+
+-#: dnsmasq.c:703
++#: dnsmasq.c:732
+ msgid "warning: ignoring resolv-file flag because no-resolv is set"
+ msgstr "attention : l'option « resolv-file » sera ignorée car « no-resolv » a été spécifié"
+
+ #
+-#: dnsmasq.c:706
++#: dnsmasq.c:735
+ msgid "warning: no upstream servers configured"
+ msgstr "attention : aucun serveur amont n'est configuré"
+
+-#: dnsmasq.c:710
++#: dnsmasq.c:739
+ #, c-format
+ msgid "asynchronous logging enabled, queue limit is %d messages"
+ msgstr "mode asynchrone d'écriture de traces, la taille maximum de la queue est de %d messages."
+
+-#: dnsmasq.c:731
++#: dnsmasq.c:760
+ msgid "IPv6 router advertisement enabled"
+ msgstr "annonces de routeur IPv6 activées"
+
+-#: dnsmasq.c:736
++#: dnsmasq.c:765
+ #, c-format
+ msgid "DHCP, sockets bound exclusively to interface %s"
+ msgstr ""
+
+-#: dnsmasq.c:753
++#: dnsmasq.c:782
+ msgid "root is "
+ msgstr "root est"
+
+ #
+-#: dnsmasq.c:753
++#: dnsmasq.c:782
+ msgid "enabled"
+ msgstr "activé"
+
+-#: dnsmasq.c:755
++#: dnsmasq.c:784
+ msgid "secure mode"
+ msgstr "mode sécurisé"
+
+-#: dnsmasq.c:781
++#: dnsmasq.c:810
+ #, c-format
+ msgid "restricting maximum simultaneous TFTP transfers to %d"
+ msgstr "le nombre maximum de transferts TFTP simultanés sera restreint à %d"
+
+-#: dnsmasq.c:956
++#: dnsmasq.c:1006
+ msgid "connected to system DBus"
+ msgstr "connecté au systeme DBus"
+
+-#: dnsmasq.c:1106
++#: dnsmasq.c:1156
+ #, c-format
+ msgid "cannot fork into background: %s"
+ msgstr "Ne peut se lancer en tâche de fond : %s"
+
+-#: dnsmasq.c:1109
++#: dnsmasq.c:1159
+ #, c-format
+ msgid "failed to create helper: %s"
+ msgstr "impossible de créer le 'helper' : %s"
+
+-#: dnsmasq.c:1112
++#: dnsmasq.c:1162
+ #, c-format
+ msgid "setting capabilities failed: %s"
+ msgstr "impossible de configurer la capacité %s"
+
+-#: dnsmasq.c:1115
++#: dnsmasq.c:1165
+ #, c-format
+ msgid "failed to change user-id to %s: %s"
+ msgstr "Impossible de changer l'identifiant utilisateur pour %s : %s"
+
+-#: dnsmasq.c:1118
++#: dnsmasq.c:1168
+ #, c-format
+ msgid "failed to change group-id to %s: %s"
+ msgstr "Impossible de changer l'identifiant de groupe pour %s : %s"
+
+-#: dnsmasq.c:1121
++#: dnsmasq.c:1171
+ #, c-format
+ msgid "failed to open pidfile %s: %s"
+ msgstr "impossible de lire le fichier de PID %s : %s"
+
+-#: dnsmasq.c:1124
++#: dnsmasq.c:1174
+ #, c-format
+ msgid "cannot open log %s: %s"
+ msgstr "Ne peut ouvrir le fichier de log %s : %s"
+
+ #
+-#: dnsmasq.c:1127
++#: dnsmasq.c:1177
+ #, c-format
+ msgid "failed to load Lua script: %s"
+ msgstr "impossible de charger le script Lua : %s"
+
+-#: dnsmasq.c:1130
++#: dnsmasq.c:1180
+ #, c-format
+ msgid "TFTP directory %s inaccessible: %s"
+ msgstr "répertoire TFTP %s inaccessible : %s"
+
+-#: dnsmasq.c:1151
++#: dnsmasq.c:1183
++#, fuzzy, c-format
++msgid "cannot create timestamp file %s: %s"
++msgstr "ne peut ouvrir ou créer le fichiers de baux %s : %s"
++
++#: dnsmasq.c:1204
+ msgid "now checking DNSSEC signature timestamps"
+ msgstr ""
+
+-#: dnsmasq.c:1218
++#: dnsmasq.c:1271
+ #, c-format
+ msgid "script process killed by signal %d"
+ msgstr "Le script a été terminé par le signal %d"
+
+-#: dnsmasq.c:1222
++#: dnsmasq.c:1275
+ #, c-format
+ msgid "script process exited with status %d"
+ msgstr "Le script s'est terminé avec le statut %d"
+
+-#: dnsmasq.c:1226
++#: dnsmasq.c:1279
+ #, c-format
+ msgid "failed to execute %s: %s"
+ msgstr "impossible d'exécuter à %s : %s"
+
+-#: dnsmasq.c:1281
++#: dnsmasq.c:1334
+ msgid "exiting on receipt of SIGTERM"
+ msgstr "sortie sur réception du signal SIGTERM"
+
+-#: dnsmasq.c:1309
++#: dnsmasq.c:1362
+ #, c-format
+ msgid "failed to access %s: %s"
+ msgstr "impossible d'accéder à %s : %s"
+
+-#: dnsmasq.c:1339
++#: dnsmasq.c:1392
+ #, c-format
+ msgid "reading %s"
+ msgstr "Lecture de %s"
+
+-#: dnsmasq.c:1350
++#: dnsmasq.c:1403
+ #, c-format
+ msgid "no servers found in %s, will retry"
+ msgstr "aucun serveur trouvé dans %s, va réessayer"
+@@ -1520,27 +1570,27 @@ msgstr "interface %s inconnue sp
+ msgid "DHCP packet received on %s which has no address"
+ msgstr "Paquet DHCP reçu sur %s qui n'a pas d'adresse"
+
+-#: dhcp.c:408
++#: dhcp.c:412
+ #, c-format
+ msgid "ARP-cache injection failed: %s"
+ msgstr ""
+
+-#: dhcp.c:506
++#: dhcp.c:511
+ #, c-format
+ msgid "DHCP range %s -- %s is not consistent with netmask %s"
+ msgstr "La plage d'adresses DHCP %s -- %s n'est pas cohérente avec le masque de réseau %s"
+
+-#: dhcp.c:807
++#: dhcp.c:812
+ #, c-format
+ msgid "bad line at %s line %d"
+ msgstr "mauvaise ligne dans %s ligne %d"
+
+-#: dhcp.c:850
++#: dhcp.c:855
+ #, c-format
+ msgid "ignoring %s line %d, duplicate name or IP address"
+ msgstr "ignore %s à la ligne %d : duplication de nom ou d'adresse IP"
+
+-#: dhcp.c:994 rfc3315.c:2089
++#: dhcp.c:999 rfc3315.c:2139
+ #, c-format
+ msgid "DHCP relay %s -> %s"
+ msgstr "Relais DHCP %s -> %s"
+@@ -1611,12 +1661,12 @@ msgstr "%u Classe d'utilisateur : %s"
+ msgid "disabled"
+ msgstr "désactivé"
+
+-#: rfc2131.c:539 rfc2131.c:967 rfc2131.c:1385 rfc3315.c:602 rfc3315.c:823
+-#: rfc3315.c:1095
++#: rfc2131.c:539 rfc2131.c:967 rfc2131.c:1385 rfc3315.c:603 rfc3315.c:860
++#: rfc3315.c:1139
+ msgid "ignored"
+ msgstr "ignoré"
+
+-#: rfc2131.c:554 rfc2131.c:1205 rfc3315.c:873
++#: rfc2131.c:554 rfc2131.c:1205 rfc3315.c:910
+ msgid "address in use"
+ msgstr "adresse déjà utilisée"
+
+@@ -1636,7 +1686,7 @@ msgstr "pas d'adresse configur
+ msgid "no leases left"
+ msgstr "plus aucun bail disponible"
+
+-#: rfc2131.c:691 rfc3315.c:475
++#: rfc2131.c:691 rfc3315.c:476
+ #, c-format
+ msgid "%u client provides name: %s"
+ msgstr "le client %u fourni le nom : %s"
+@@ -1645,7 +1695,7 @@ msgstr "le client %u fourni le nom : %s"
+ msgid "PXE BIS not supported"
+ msgstr "Service PXE BIS (Boot Integrity Services) non supporté"
+
+-#: rfc2131.c:935 rfc3315.c:1189
++#: rfc2131.c:935 rfc3315.c:1233
+ #, c-format
+ msgid "disabling DHCP static address %s for %s"
+ msgstr "désactive l'adresse statique DHCP %s pour %s"
+@@ -1681,7 +1731,7 @@ msgstr "mauvais identifiant de serveur"
+ msgid "wrong address"
+ msgstr "mauvaise adresse"
+
+-#: rfc2131.c:1143 rfc3315.c:969
++#: rfc2131.c:1143 rfc3315.c:1006
+ msgid "lease not found"
+ msgstr "bail non trouvé"
+
+@@ -1731,7 +1781,7 @@ msgstr "Impossible d'envoyer l'option DHCP/BOOTP %d : pas assez d'espace dans le
+ msgid "PXE menu too large"
+ msgstr "menu PXE trop grand"
+
+-#: rfc2131.c:2173 rfc3315.c:1456
++#: rfc2131.c:2173 rfc3315.c:1506
+ #, c-format
+ msgid "%u requested options: %s"
+ msgstr "%u options demandées : %s"
+@@ -1746,7 +1796,7 @@ msgstr "ne peux envoyer l'option RFC3925 : trop d'options pour le num
+ msgid "cannot create netlink socket: %s"
+ msgstr "ne peux lier une socket netlink : %s"
+
+-#: netlink.c:347
++#: netlink.c:348
+ #, c-format
+ msgid "netlink returns error: %s"
+ msgstr "Erreur netlink : %s"
+@@ -1864,62 +1914,62 @@ msgstr "pas de plage d'adresse disponible pour la requ
+ msgid "%u available DHCPv6 subnet: %s/%d"
+ msgstr "%u sous-réseaux DHCPv6 disponibles : %s/%d"
+
+-#: rfc3315.c:379
++#: rfc3315.c:380
+ #, c-format
+ msgid "%u vendor class: %u"
+ msgstr "%u Classe de vendeur ('Vendor Class') : %u"
+
+-#: rfc3315.c:427
++#: rfc3315.c:428
+ #, c-format
+ msgid "%u client MAC address: %s"
+ msgstr "%u MAC adresse du client : %s"
+
+-#: rfc3315.c:659
++#: rfc3315.c:660
+ #, c-format
+ msgid "unknown prefix-class %d"
+ msgstr "préfixe de classe inconnu %d"
+
+-#: rfc3315.c:791 rfc3315.c:913
++#: rfc3315.c:803 rfc3315.c:902
++msgid "address unavailable"
++msgstr "adresse non disponible"
++
++#: rfc3315.c:815 rfc3315.c:950 rfc3315.c:1283
+ msgid "success"
+ msgstr "réussi"
+
+-#: rfc3315.c:806 rfc3315.c:808 rfc3315.c:921 rfc3315.c:923
++#: rfc3315.c:843 rfc3315.c:845 rfc3315.c:958 rfc3315.c:960
+ msgid "no addresses available"
+ msgstr "pas d'adresse disponible"
+
+-#: rfc3315.c:865
+-msgid "address unavailable"
+-msgstr "adresse non disponible"
+-
+-#: rfc3315.c:900
++#: rfc3315.c:937
+ msgid "not on link"
+ msgstr "pas sur ce lien"
+
+-#: rfc3315.c:973 rfc3315.c:1151 rfc3315.c:1228
++#: rfc3315.c:1010 rfc3315.c:1195 rfc3315.c:1272
+ msgid "no binding found"
+ msgstr "aucune liaison trouvée"
+
+-#: rfc3315.c:1011
++#: rfc3315.c:1048
+ msgid "deprecated"
+ msgstr "obsolète"
+
+-#: rfc3315.c:1016
++#: rfc3315.c:1053
+ msgid "address invalid"
+ msgstr "adresse non valide"
+
+-#: rfc3315.c:1061
++#: rfc3315.c:1100
+ msgid "confirm failed"
+ msgstr "confirmation d'échec"
+
+-#: rfc3315.c:1072
++#: rfc3315.c:1116
+ msgid "all addresses still on link"
+ msgstr "toutes les adresses sont toujours sur le lien"
+
+-#: rfc3315.c:1160
++#: rfc3315.c:1204
+ msgid "release received"
+ msgstr "libération reçue"
+
+-#: rfc3315.c:2080
++#: rfc3315.c:2130
+ msgid "Cannot multicast to DHCPv6 server without correct interface"
+ msgstr "Impossible de faire du multicast au server DHCPv6 sans interface valide"
+
+@@ -2012,7 +2062,7 @@ msgstr "Relais DHCP de %s
+ msgid "cannot create ICMPv6 socket: %s"
+ msgstr "ne peut créer la socket ICMPv6: %s"
+
+-#: auth.c:429
++#: auth.c:436
+ #, c-format
+ msgid "ignoring zone transfer request from %s"
+ msgstr "la requête de transfert de zone en provenance de %s est ignorée"
+@@ -2027,55 +2077,90 @@ msgstr "impossible de trouver la version de noyau : %s"
+ msgid "failed to create IPset control socket: %s"
+ msgstr "impossible de créer une socket de contrôle IPset : %s"
+
++#: dnssec.c:425 dnssec.c:469
++#, fuzzy, c-format
++msgid "failed to update mtime on %s: %s"
++msgstr "impossible de lire le fichier de PID %s : %s"
++
+ #: blockdata.c:58
+ #, c-format
+ msgid "DNSSEC memory in use %u, max %u, allocated %u"
+ msgstr ""
+
+-#: tables.c:76
++#: tables.c:80
+ msgid "error: fill_addr missused"
+ msgstr ""
+
+-#: tables.c:105
++#: tables.c:109
+ #, fuzzy, c-format
+ msgid "failed to access pf devices: %s"
+ msgstr "impossible d'accéder à %s : %s"
+
+-#: tables.c:119
++#: tables.c:123
+ #, fuzzy, c-format
+ msgid "warning: no opened pf devices %s"
+ msgstr "utilise les adresses locales seulement pour %s %s"
+
+-#: tables.c:127
++#: tables.c:131
+ #, fuzzy, c-format
+ msgid "error: cannot use table name %s"
+ msgstr "ne peut pas obtenir le nom de la machine : %s"
+
+-#: tables.c:135
++#: tables.c:139
+ #, c-format
+ msgid "error: cannot strlcpy table name %s"
+ msgstr ""
+
+-#: tables.c:141
++#: tables.c:145
+ #, c-format
+ msgid "warning: pfr_add_tables: %s(%d)"
+ msgstr ""
+
+-#: tables.c:147
++#: tables.c:151
+ msgid "info: table created"
+ msgstr ""
+
+-#: tables.c:158
++#: tables.c:162
+ #, c-format
+ msgid "warning: DIOCR%sADDRS: %s"
+ msgstr ""
+
+ #
+-#: tables.c:162
++#: tables.c:166
+ #, fuzzy, c-format
+ msgid "%d addresses %s"
+ msgstr "mauvaise adresse"
+
++#: inotify.c:46
++#, fuzzy, c-format
++msgid "failed to create inotify: %s"
++msgstr "impossible de créer le 'helper' : %s"
++
++#: inotify.c:60
++#, fuzzy, c-format
++msgid "cannot cannonicalise resolv-file %s: %s"
++msgstr "ne peut ouvrir ou créer le fichiers de baux %s : %s"
++
++#: inotify.c:72
++#, c-format
++msgid "directory %s for resolv-file is missing, cannot poll"
++msgstr ""
++
++#: inotify.c:75 inotify.c:112
++#, fuzzy, c-format
++msgid "failed to create inotify for %s: %s"
++msgstr "impossible de créer une socket d'écoute pour %s : %s"
++
++#: inotify.c:97
++#, fuzzy, c-format
++msgid "bad dynamic directory %s: %s"
++msgstr "Ne peut pas lire le répertoire %s : %s"
++
++#: inotify.c:197
++#, c-format
++msgid "inotify, new or changed file %s"
++msgstr ""
++
+ #~ msgid "Always send frequent router-advertisements"
+ #~ msgstr "Envoyer des annonces de routeurs fréquentes"
+
+diff --git a/po/id.po b/po/id.po
+index b1809b695168..a0ff0f062e8b 100644
+--- a/po/id.po
++++ b/po/id.po
+@@ -15,77 +15,77 @@ msgstr ""
+ "Content-Type: text/plain; charset=ASCII\n"
+ "Content-Transfer-Encoding: 8bit\n"
+
+-#: cache.c:505
++#: cache.c:523
+ msgid "Internal error in cache."
+ msgstr ""
+
+ # OK
+-#: cache.c:908
++#: cache.c:941
+ #, fuzzy, c-format
+ msgid "failed to load names from %s: %s"
+ msgstr "gagal memuat nama-nama dari %s: %s"
+
+ # OK
+-#: cache.c:934 dhcp.c:820
++#: cache.c:967 dhcp.c:825
+ #, fuzzy, c-format
+ msgid "bad address at %s line %d"
+ msgstr "kesalahan nama pada %s baris %d"
+
+ # OK
+-#: cache.c:985 dhcp.c:836
++#: cache.c:1018 dhcp.c:841
+ #, c-format
+ msgid "bad name at %s line %d"
+ msgstr "kesalahan nama pada %s baris %d"
+
+ # OK
+-#: cache.c:992 dhcp.c:911
++#: cache.c:1027 dhcp.c:916
+ #, c-format
+ msgid "read %s - %d addresses"
+ msgstr "membaca %s - %d alamat"
+
+ # OK
+-#: cache.c:1100
++#: cache.c:1135
+ msgid "cleared cache"
+ msgstr "cache telah dihapus"
+
+-#: cache.c:1123
++#: cache.c:1164
+ #, c-format
+ msgid "No IPv4 address found for %s"
+ msgstr ""
+
+-#: cache.c:1201
++#: cache.c:1242
+ #, c-format
+ msgid "%s is a CNAME, not giving it to the DHCP lease of %s"
+ msgstr ""
+
+ # OK
+-#: cache.c:1225
++#: cache.c:1266
+ #, c-format
+ msgid "not giving name %s to the DHCP lease of %s because the name exists in %s with address %s"
+ msgstr "tidak memberikan nama %s kepada lease DHCP %s karena nama telah ada dalam %sdengan alamat %s"
+
+-#: cache.c:1366
++#: cache.c:1421
+ #, c-format
+ msgid "time %lu"
+ msgstr ""
+
+ # OK
+-#: cache.c:1367
++#: cache.c:1422
+ #, fuzzy, c-format
+ msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
+ msgstr "ukuran cache %d, %d/%d penyisipan cache menimpa cache yang belum kadaluwarsa"
+
+-#: cache.c:1369
++#: cache.c:1424
+ #, c-format
+ msgid "queries forwarded %u, queries answered locally %u"
+ msgstr ""
+
+-#: cache.c:1372
++#: cache.c:1427
+ #, c-format
+ msgid "queries for authoritative zones %u"
+ msgstr ""
+
+-#: cache.c:1398
++#: cache.c:1453
+ #, c-format
+ msgid "server %s#%d: queries sent %u, retried or failed %u"
+ msgstr ""
+@@ -103,7 +103,7 @@ msgid "failed to allocate memory"
+ msgstr "gagal memuat %S: %m"
+
+ # OK
+-#: util.c:243 option.c:579
++#: util.c:243 option.c:598
+ msgid "could not get memory"
+ msgstr "tidak bisa mendapatkan memory"
+
+@@ -120,682 +120,720 @@ msgid "failed to allocate %d bytes"
+ msgstr "gagal memuat %S: %m"
+
+ # OK
+-#: util.c:429
++#: util.c:430
+ #, c-format
+ msgid "infinite"
+ msgstr "tak terbatas"
+
+ # OK
+-#: option.c:318
++#: option.c:330
+ msgid "Specify local address(es) to listen on."
+ msgstr "Tentukan alamat lokal untuk mendengarkan."
+
+ # OK
+-#: option.c:319
++#: option.c:331
+ msgid "Return ipaddr for all hosts in specified domains."
+ msgstr "Menghasilkan ipaddr untuk semua host dalam domain yang dipilih."
+
+ # OK
+-#: option.c:320
++#: option.c:332
+ msgid "Fake reverse lookups for RFC1918 private address ranges."
+ msgstr "Fake pencarian balik untuk alamat private sesuai dengan RFC1918."
+
+ # OK
+-#: option.c:321
++#: option.c:333
+ msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
+ msgstr "Perlakukan ipaddr sebagai NXDOMAIN (mengalahkan wildcard Verisign)."
+
+ # OK
+-#: option.c:322
++#: option.c:334
+ #, c-format
+ msgid "Specify the size of the cache in entries (defaults to %s)."
+ msgstr "Tentukan ukuran cache, dalam jumlah isian (default %s)."
+
+ # OK
+-#: option.c:323
++#: option.c:335
+ #, c-format
+ msgid "Specify configuration file (defaults to %s)."
+ msgstr "Tentukan file konfigurasi (default %s)."
+
+ # OK
+-#: option.c:324
++#: option.c:336
+ msgid "Do NOT fork into the background: run in debug mode."
+ msgstr "JANGAN berjalan di background: berjalan dalam modus debug."
+
+ # OK
+-#: option.c:325
++#: option.c:337
+ msgid "Do NOT forward queries with no domain part."
+ msgstr "JANGAN teruskan permintaan tanpa bagian domain."
+
+ # OK
+-#: option.c:326
++#: option.c:338
+ msgid "Return self-pointing MX records for local hosts."
+ msgstr "Mengembalikan record MX untuk diri sendiri host-host lokal."
+
+ # OK
+-#: option.c:327
++#: option.c:339
+ msgid "Expand simple names in /etc/hosts with domain-suffix."
+ msgstr "Melengkapi nama-nama di /etc/hosts dengan akhiran domain."
+
+ # OK
+-#: option.c:328
++#: option.c:340
+ msgid "Don't forward spurious DNS requests from Windows hosts."
+ msgstr "Jangan meneruskan permintaan DNS spurious dari host-host Windows."
+
+ # OK
+-#: option.c:329
++#: option.c:341
+ msgid "Enable DHCP in the range given with lease duration."
+ msgstr "Bolehkan DHCP dalam jangkauan yang diberikan dengan durasi lease."
+
+ # OK
+-#: option.c:330
++#: option.c:342
+ #, c-format
+ msgid "Change to this group after startup (defaults to %s)."
+ msgstr "Ubah ke group ini setelah mulai (default %s)."
+
+ # OK
+-#: option.c:331
++#: option.c:343
+ msgid "Set address or hostname for a specified machine."
+ msgstr "Setel alamat atau nama host untuk mesin yang disebutkan."
+
+ # OK
+-#: option.c:332
++#: option.c:344
+ #, fuzzy
+ msgid "Read DHCP host specs from file."
+ msgstr "nama MX salah"
+
+-#: option.c:333
++#: option.c:345
+ msgid "Read DHCP option specs from file."
+ msgstr ""
+
+-#: option.c:334
++# OK
++#: option.c:346
++#, fuzzy
++msgid "Read DHCP host specs from a directory."
++msgstr "nama MX salah"
++
++# OK
++#: option.c:347
++#, fuzzy
++msgid "Read DHCP options from a directory."
++msgstr "nama MX salah"
++
++#: option.c:348
+ msgid "Evaluate conditional tag expression."
+ msgstr ""
+
+ # OK
+-#: option.c:335
++#: option.c:349
+ #, c-format
+ msgid "Do NOT load %s file."
+ msgstr "JANGAN muat file %s."
+
+ # OK
+-#: option.c:336
++#: option.c:350
+ #, c-format
+ msgid "Specify a hosts file to be read in addition to %s."
+ msgstr "Sebutkan sebuah file hosts yang harus dibaca sebagai tambahan untuk %s."
+
+ # OK
+-#: option.c:337
++#: option.c:351
++#, fuzzy
++msgid "Read hosts files from a directory."
++msgstr "nama MX salah"
++
++# OK
++#: option.c:352
+ msgid "Specify interface(s) to listen on."
+ msgstr "Sebutkan antarmuka untuk mendengarkan."
+
+ # OK
+-#: option.c:338
++#: option.c:353
+ msgid "Specify interface(s) NOT to listen on."
+ msgstr "Sebutkan antarmuka untuk TIDAK mendengarkan."
+
+ # OK
+-#: option.c:339
++#: option.c:354
+ #, fuzzy
+ msgid "Map DHCP user class to tag."
+ msgstr "Petakan kelas user DHCP ke setelan yang dipilih."
+
+-#: option.c:340
++#: option.c:355
+ msgid "Map RFC3046 circuit-id to tag."
+ msgstr ""
+
+-#: option.c:341
++#: option.c:356
+ msgid "Map RFC3046 remote-id to tag."
+ msgstr ""
+
+-#: option.c:342
++#: option.c:357
+ msgid "Map RFC3993 subscriber-id to tag."
+ msgstr ""
+
+ # OK
+-#: option.c:343
++#: option.c:358
+ #, fuzzy
+ msgid "Don't do DHCP for hosts with tag set."
+ msgstr "Jangan menggunakan DHCP untuk host-host yang dipilih."
+
+ # OK
+-#: option.c:344
++#: option.c:359
+ #, fuzzy
+ msgid "Force broadcast replies for hosts with tag set."
+ msgstr "Jangan menggunakan DHCP untuk host-host yang dipilih."
+
+ # OK
+-#: option.c:345
++#: option.c:360
+ msgid "Do NOT fork into the background, do NOT run in debug mode."
+ msgstr "JANGAN berjalan di background, jangan berjalan dalam modus debug."
+
+ # OK
+-#: option.c:346
++#: option.c:361
+ msgid "Assume we are the only DHCP server on the local network."
+ msgstr "Berpikir bahwa kita satu-satunya DHCP server dalam jaringan."
+
+ # OK
+-#: option.c:347
++#: option.c:362
+ #, c-format
+ msgid "Specify where to store DHCP leases (defaults to %s)."
+ msgstr "Sebutkan lokasi untuk menyimpan lease DHCP (default %s)."
+
+ # OK
+-#: option.c:348
++#: option.c:363
+ msgid "Return MX records for local hosts."
+ msgstr "Kembalikan rekord MX untuk host-host lokal."
+
+ # OK
+-#: option.c:349
++#: option.c:364
+ msgid "Specify an MX record."
+ msgstr "Sebutkan sebuah rekord MX."
+
+ # OK
+-#: option.c:350
++#: option.c:365
+ msgid "Specify BOOTP options to DHCP server."
+ msgstr "Sebutkan pilihan-pilihan BOOTP untuk DHCP server."
+
+-#: option.c:351
++#: option.c:366
+ #, c-format
+ msgid "Do NOT poll %s file, reload only on SIGHUP."
+ msgstr "Jangan kumpulkan file %s, muat kembali saat SIGHUP."
+
+ # OK
+-#: option.c:352
++#: option.c:367
+ msgid "Do NOT cache failed search results."
+ msgstr "JANGAN menyimpan hasil pencarian yang gagal."
+
+ # OK
+-#: option.c:353
++#: option.c:368
+ #, c-format
+ msgid "Use nameservers strictly in the order given in %s."
+ msgstr "Gunakan secara ketat namaserver yang disebutkan sesuai urutan di %s."
+
+ # OK
+-#: option.c:354
++#: option.c:369
+ #, fuzzy
+ msgid "Specify options to be sent to DHCP clients."
+ msgstr "Setel pilihan-pilihan tambahan yang akan disetel untuk klien-klien DHCP."
+
+-#: option.c:355
++#: option.c:370
+ msgid "DHCP option sent even if the client does not request it."
+ msgstr ""
+
+ # OK
+-#: option.c:356
++#: option.c:371
+ msgid "Specify port to listen for DNS requests on (defaults to 53)."
+ msgstr "Sebutkan port untuk mendengarkan permintaan DNS (default port 53)."
+
+ # OK
+-#: option.c:357
++#: option.c:372
+ #, c-format
+ msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
+ msgstr "Ukuran maksimum paket UDP yang didukung untuk EDNS.0 (default %s)."
+
+ # OK
+-#: option.c:358
++#: option.c:373
+ #, fuzzy
+ msgid "Log DNS queries."
+ msgstr "Permintaan log."
+
+ # OK
+-#: option.c:359
++#: option.c:374
+ #, fuzzy
+ msgid "Force the originating port for upstream DNS queries."
+ msgstr "Paksa port asal untuk permintaan ke atas."
+
+ # OK
+-#: option.c:360
++#: option.c:375
+ msgid "Do NOT read resolv.conf."
+ msgstr "JANGAN baca resolv.conf."
+
+ # OK
+-#: option.c:361
++#: option.c:376
+ #, c-format
+ msgid "Specify path to resolv.conf (defaults to %s)."
+ msgstr "Sebutkan path ke resolv.conf (default %s)."
+
+ # OK
+-#: option.c:362
++#: option.c:377
+ #, fuzzy
+ msgid "Specify path to file with server= options"
+ msgstr "Sebutkan path file PID. (default %s)."
+
+ # OK
+-#: option.c:363
++#: option.c:378
+ msgid "Specify address(es) of upstream servers with optional domains."
+ msgstr "Sebutkan alamat-alamat server di atas, boleh dilengkapi dengan nama domain."
+
+ # OK
+-#: option.c:364
++#: option.c:379
+ #, fuzzy
+ msgid "Specify address of upstream servers for reverse address queries"
+ msgstr "Sebutkan alamat-alamat server di atas, boleh dilengkapi dengan nama domain."
+
+ # OK
+-#: option.c:365
++#: option.c:380
+ msgid "Never forward queries to specified domains."
+ msgstr "JANGAN pernah meneruskan permintaan ke domain yang disebutkan."
+
+ # OK
+-#: option.c:366
++#: option.c:381
+ msgid "Specify the domain to be assigned in DHCP leases."
+ msgstr "Sebutkan domain yang digunakan dalam lease DHCP."
+
+ # OK
+-#: option.c:367
++#: option.c:382
+ msgid "Specify default target in an MX record."
+ msgstr "Sebutkan tujuan default dalam rekord MX."
+
+ # OK
+-#: option.c:368
++#: option.c:383
+ msgid "Specify time-to-live in seconds for replies from /etc/hosts."
+ msgstr "Sebutkan time-to-live dalam detik untuk jawaban dari /etc/hosts."
+
+ # OK
+-#: option.c:369
++#: option.c:384
+ #, fuzzy
+ msgid "Specify time-to-live in seconds for negative caching."
+ msgstr "Sebutkan time-to-live dalam detik untuk jawaban dari /etc/hosts."
+
+ # OK
+-#: option.c:370
++#: option.c:385
+ #, fuzzy
+ msgid "Specify time-to-live in seconds for maximum TTL to send to clients."
+ msgstr "Sebutkan time-to-live dalam detik untuk jawaban dari /etc/hosts."
+
+ # OK
+-#: option.c:371
++#: option.c:386
++#, fuzzy
++msgid "Specify time-to-live ceiling for cache."
++msgstr "Sebutkan time-to-live dalam detik untuk jawaban dari /etc/hosts."
++
++# OK
++#: option.c:387
++#, fuzzy
++msgid "Specify time-to-live floor for cache."
++msgstr "Sebutkan time-to-live dalam detik untuk jawaban dari /etc/hosts."
++
++# OK
++#: option.c:388
+ #, c-format
+ msgid "Change to this user after startup. (defaults to %s)."
+ msgstr "Ubah ke user ini setelah mulai. (default %s)."
+
+ # OK
+-#: option.c:372
++#: option.c:389
+ #, fuzzy
+ msgid "Map DHCP vendor class to tag."
+ msgstr "Memetakan kelas vendor DHCP ke daftar pilihan."
+
+ # OK
+-#: option.c:373
++#: option.c:390
+ msgid "Display dnsmasq version and copyright information."
+ msgstr "Menampilkan versi dan informasi hak cipta dnsmasq."
+
+ # OK
+-#: option.c:374
++#: option.c:391
+ msgid "Translate IPv4 addresses from upstream servers."
+ msgstr "Terjemahkan alamat-alamat IPv4 dari server-server di atas."
+
+ # OK
+-#: option.c:375
++#: option.c:392
+ msgid "Specify a SRV record."
+ msgstr "Sebutkan rekord SRV."
+
+-#: option.c:376
++#: option.c:393
+ msgid "Display this message. Use --help dhcp for known DHCP options."
+ msgstr ""
+
+ # OK
+-#: option.c:377
++#: option.c:394
+ #, fuzzy, c-format
+ msgid "Specify path of PID file (defaults to %s)."
+ msgstr "Sebutkan path file PID. (default %s)."
+
+ # OK
+-#: option.c:378
++#: option.c:395
+ #, c-format
+ msgid "Specify maximum number of DHCP leases (defaults to %s)."
+ msgstr "Sebutkan jumlah maksimum lease DHCP (default %s)."
+
+ # OK
+-#: option.c:379
++#: option.c:396
+ msgid "Answer DNS queries based on the interface a query was sent to."
+ msgstr "Jawab permintaan DNS berdasarkan antarmuka dimana permintaan dikirimkan."
+
+ # OK
+-#: option.c:380
++#: option.c:397
+ msgid "Specify TXT DNS record."
+ msgstr "Sebutkan rekord TXT DNS."
+
+ # OK
+-#: option.c:381
++#: option.c:398
+ #, fuzzy
+ msgid "Specify PTR DNS record."
+ msgstr "Sebutkan rekord TXT DNS."
+
+-#: option.c:382
++#: option.c:399
+ msgid "Give DNS name to IPv4 address of interface."
+ msgstr ""
+
+ # OK
+-#: option.c:383
++#: option.c:400
+ msgid "Bind only to interfaces in use."
+ msgstr "Hanya kaitkan ke antarmuka yang sedang digunakan saja."
+
+ # OK
+-#: option.c:384
++#: option.c:401
+ #, c-format
+ msgid "Read DHCP static host information from %s."
+ msgstr "Baca informasi statik host DHCP dari %s."
+
+ # OK
+-#: option.c:385
++#: option.c:402
+ msgid "Enable the DBus interface for setting upstream servers, etc."
+ msgstr "Mungkinkan antar muka DBus untuk menyetel server-server di atas, dsb."
+
+ # OK
+-#: option.c:386
++#: option.c:403
+ msgid "Do not provide DHCP on this interface, only provide DNS."
+ msgstr "JANGAN menyediakan DHCP pada antarmuka ini, hanya menyediakan DNS."
+
+ # OK
+-#: option.c:387
++#: option.c:404
+ msgid "Enable dynamic address allocation for bootp."
+ msgstr "Mungkinkan alokasi alamat dinamis untuk bootp."
+
+ # OK
+-#: option.c:388
++#: option.c:405
+ #, fuzzy
+ msgid "Map MAC address (with wildcards) to option set."
+ msgstr "Memetakan kelas vendor DHCP ke daftar pilihan."
+
+-#: option.c:389
++#: option.c:406
+ msgid "Treat DHCP requests on aliases as arriving from interface."
+ msgstr ""
+
+-#: option.c:390
++#: option.c:407
+ msgid "Disable ICMP echo address checking in the DHCP server."
+ msgstr ""
+
+-#: option.c:391
++#: option.c:408
+ msgid "Shell script to run on DHCP lease creation and destruction."
+ msgstr ""
+
+-#: option.c:392
++#: option.c:409
+ msgid "Lua script to run on DHCP lease creation and destruction."
+ msgstr ""
+
+-#: option.c:393
++#: option.c:410
+ msgid "Run lease-change scripts as this user."
+ msgstr ""
+
+-#: option.c:394
++#: option.c:411
+ msgid "Read configuration from all the files in this directory."
+ msgstr ""
+
+ # OK
+-#: option.c:395
++#: option.c:412
+ #, fuzzy
+ msgid "Log to this syslog facility or file. (defaults to DAEMON)"
+ msgstr "Ubah ke user ini setelah mulai. (default %s)."
+
+-#: option.c:396
++#: option.c:413
+ msgid "Do not use leasefile."
+ msgstr ""
+
+ # OK
+-#: option.c:397
++#: option.c:414
+ #, fuzzy, c-format
+ msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
+ msgstr "Sebutkan jumlah maksimum lease DHCP (default %s)."
+
+-#: option.c:398
++#: option.c:415
+ #, c-format
+ msgid "Clear DNS cache when reloading %s."
+ msgstr ""
+
+-#: option.c:399
++#: option.c:416
+ msgid "Ignore hostnames provided by DHCP clients."
+ msgstr ""
+
+-#: option.c:400
++#: option.c:417
+ msgid "Do NOT reuse filename and server fields for extra DHCP options."
+ msgstr ""
+
+-#: option.c:401
++#: option.c:418
+ msgid "Enable integrated read-only TFTP server."
+ msgstr ""
+
+-#: option.c:402
++#: option.c:419
+ msgid "Export files by TFTP only from the specified subtree."
+ msgstr ""
+
+-#: option.c:403
++#: option.c:420
+ msgid "Add client IP address to tftp-root."
+ msgstr ""
+
+-#: option.c:404
++#: option.c:421
+ msgid "Allow access only to files owned by the user running dnsmasq."
+ msgstr ""
+
+ # OK
+-#: option.c:405
++#: option.c:422
+ #, fuzzy, c-format
+ msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
+ msgstr "Sebutkan jumlah maksimum lease DHCP (default %s)."
+
+-#: option.c:406
++#: option.c:423
+ msgid "Disable the TFTP blocksize extension."
+ msgstr ""
+
+-#: option.c:407
++#: option.c:424
+ msgid "Convert TFTP filenames to lowercase"
+ msgstr ""
+
+-#: option.c:408
++#: option.c:425
+ msgid "Ephemeral port range for use by TFTP transfers."
+ msgstr ""
+
+-#: option.c:409
++#: option.c:426
+ msgid "Extra logging for DHCP."
+ msgstr ""
+
+-#: option.c:410
++#: option.c:427
+ msgid "Enable async. logging; optionally set queue length."
+ msgstr ""
+
+-#: option.c:411
++#: option.c:428
+ msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
+ msgstr ""
+
+-#: option.c:412
++#: option.c:429
+ msgid "Allow rebinding of 127.0.0.0/8, for RBL servers."
+ msgstr ""
+
+-#: option.c:413
++#: option.c:430
+ msgid "Inhibit DNS-rebind protection on this domain."
+ msgstr ""
+
+-#: option.c:414
++#: option.c:431
+ msgid "Always perform DNS queries to all servers."
+ msgstr ""
+
+-#: option.c:415
++#: option.c:432
+ msgid "Set tag if client includes matching option in request."
+ msgstr ""
+
+-#: option.c:416
++#: option.c:433
+ msgid "Use alternative ports for DHCP."
+ msgstr ""
+
+ # OK
+-#: option.c:417
++#: option.c:434
+ #, fuzzy
+ msgid "Specify NAPTR DNS record."
+ msgstr "Sebutkan rekord TXT DNS."
+
+-#: option.c:418
++#: option.c:435
+ msgid "Specify lowest port available for DNS query transmission."
+ msgstr ""
+
+-#: option.c:419
++#: option.c:436
+ msgid "Use only fully qualified domain names for DHCP clients."
+ msgstr ""
+
+-#: option.c:420
++#: option.c:437
+ msgid "Generate hostnames based on MAC address for nameless clients."
+ msgstr ""
+
+-#: option.c:421
++#: option.c:438
+ msgid "Use these DHCP relays as full proxies."
+ msgstr ""
+
+-#: option.c:422
++#: option.c:439
+ msgid "Relay DHCP requests to a remote server"
+ msgstr ""
+
+-#: option.c:423
++#: option.c:440
+ msgid "Specify alias name for LOCAL DNS name."
+ msgstr ""
+
+ # OK
+-#: option.c:424
++#: option.c:441
+ #, fuzzy
+ msgid "Prompt to send to PXE clients."
+ msgstr "Setel pilihan-pilihan tambahan yang akan disetel untuk klien-klien DHCP."
+
+-#: option.c:425
++#: option.c:442
+ msgid "Boot service for PXE menu."
+ msgstr ""
+
+-#: option.c:426
++#: option.c:443
+ msgid "Check configuration syntax."
+ msgstr ""
+
+-#: option.c:427
++#: option.c:444
+ msgid "Add requestor's MAC address to forwarded DNS queries."
+ msgstr ""
+
+-#: option.c:428
++#: option.c:445
+ msgid "Add requestor's IP subnet to forwarded DNS queries."
+ msgstr ""
+
+ # OK
+-#: option.c:429
++#: option.c:446
+ #, fuzzy
+ msgid "Proxy DNSSEC validation results from upstream nameservers."
+ msgstr "Terjemahkan alamat-alamat IPv4 dari server-server di atas."
+
+-#: option.c:430
++#: option.c:447
+ msgid "Attempt to allocate sequential IP addresses to DHCP clients."
+ msgstr ""
+
+-#: option.c:431
++#: option.c:448
+ msgid "Copy connection-track mark from queries to upstream connections."
+ msgstr ""
+
+-#: option.c:432
++#: option.c:449
+ msgid "Allow DHCP clients to do their own DDNS updates."
+ msgstr ""
+
+-#: option.c:433
++#: option.c:450
+ msgid "Send router-advertisements for interfaces doing DHCPv6"
+ msgstr ""
+
+-#: option.c:434
++#: option.c:451
+ msgid "Specify DUID_EN-type DHCPv6 server DUID"
+ msgstr ""
+
+ # OK
+-#: option.c:435
++#: option.c:452
+ #, fuzzy
+ msgid "Specify host (A/AAAA and PTR) records"
+ msgstr "Sebutkan sebuah rekord MX."
+
+ # OK
+-#: option.c:436
++#: option.c:453
+ #, fuzzy
+ msgid "Specify arbitrary DNS resource record"
+ msgstr "Sebutkan rekord TXT DNS."
+
+ # OK
+-#: option.c:437
++#: option.c:454
+ #, fuzzy
+ msgid "Bind to interfaces in use - check for new interfaces"
+ msgstr "antarmuka tidak dikenal %s"
+
+-#: option.c:438
++#: option.c:455
+ msgid "Export local names to global DNS"
+ msgstr ""
+
+-#: option.c:439
++#: option.c:456
+ msgid "Domain to export to global DNS"
+ msgstr ""
+
+-#: option.c:440
++#: option.c:457
+ msgid "Set TTL for authoritative replies"
+ msgstr ""
+
+-#: option.c:441
++#: option.c:458
+ msgid "Set authoritive zone information"
+ msgstr ""
+
+-#: option.c:442
++#: option.c:459
+ msgid "Secondary authoritative nameservers for forward domains"
+ msgstr ""
+
+-#: option.c:443
++#: option.c:460
+ msgid "Peers which are allowed to do zone transfer"
+ msgstr ""
+
+-#: option.c:444
++#: option.c:461
+ msgid "Specify ipsets to which matching domains should be added"
+ msgstr ""
+
+-#: option.c:445
++#: option.c:462
+ msgid "Specify a domain and address range for synthesised names"
+ msgstr ""
+
+-#: option.c:446
++#: option.c:463
+ msgid "Activate DNSSEC validation"
+ msgstr ""
+
+-#: option.c:447
++#: option.c:464
+ msgid "Specify trust anchor key digest."
+ msgstr ""
+
+-#: option.c:448
++#: option.c:465
+ msgid "Disable upstream checking for DNSSEC debugging."
+ msgstr ""
+
+-#: option.c:449
++#: option.c:466
+ msgid "Ensure answers without DNSSEC are in unsigned zones."
+ msgstr ""
+
+-#: option.c:450
++#: option.c:467
+ msgid "Don't check DNSSEC signature timestamps until first cache-reload"
+ msgstr ""
+
+-#: option.c:452
++#: option.c:468
++msgid "Timestamp file to verify system clock for DNSSEC"
++msgstr ""
++
++#: option.c:470
+ msgid "Specify DHCPv6 prefix class"
+ msgstr ""
+
+-#: option.c:454
++#: option.c:472
+ msgid "Set priority, resend-interval and router-lifetime"
+ msgstr ""
+
+-#: option.c:455
++#: option.c:473
+ msgid "Do not log routine DHCP."
+ msgstr ""
+
+-#: option.c:456
++#: option.c:474
+ msgid "Do not log routine DHCPv6."
+ msgstr ""
+
+-#: option.c:457
++#: option.c:475
+ msgid "Do not log RA."
+ msgstr ""
+
+-#: option.c:458
++#: option.c:476
+ msgid "Accept queries only from directly-connected networks"
+ msgstr ""
+
+-#: option.c:459
++#: option.c:477
+ msgid "Detect and remove DNS forwarding loops"
+ msgstr ""
+
++#: option.c:478
++msgid "Ignore DNS responses containing ipaddr."
++msgstr ""
++
+ # OK
+-#: option.c:661
++#: option.c:680
+ #, c-format
+ msgid ""
+ "Usage: dnsmasq [options]\n"
+@@ -805,381 +843,381 @@ msgstr ""
+ "\n"
+
+ # OK
+-#: option.c:663
++#: option.c:682
+ #, c-format
+ msgid "Use short options only on the command line.\n"
+ msgstr "Gunakan pilihan pendek saja pada perintah baris.\n"
+
+ # OK
+-#: option.c:665
++#: option.c:684
+ #, fuzzy, c-format
+ msgid "Valid options are:\n"
+ msgstr "Pilihan yang boleh adalah:\n"
+
+ # OK
+-#: option.c:722 option.c:726
++#: option.c:741 option.c:745
+ msgid "bad port"
+ msgstr "port salah"
+
+-#: option.c:753 option.c:785
++#: option.c:772 option.c:804
+ msgid "interface binding not supported"
+ msgstr ""
+
+ # OK
+-#: option.c:762 option.c:3494
++#: option.c:781 option.c:3570
+ #, fuzzy
+ msgid "bad interface name"
+ msgstr "nama MX salah"
+
+ # OK
+-#: option.c:792
++#: option.c:811
+ #, fuzzy
+ msgid "bad address"
+ msgstr "membaca %s - %d alamat"
+
+-#: option.c:974
++#: option.c:993
+ msgid "unsupported encapsulation for IPv6 option"
+ msgstr ""
+
+ # OK
+-#: option.c:988
++#: option.c:1007
+ msgid "bad dhcp-option"
+ msgstr "dhcp-option salah"
+
+ # OK
+-#: option.c:1056
++#: option.c:1075
+ #, fuzzy
+ msgid "bad IP address"
+ msgstr "membaca %s - %d alamat"
+
+ # OK
+-#: option.c:1059 option.c:1197 option.c:2812
++#: option.c:1078 option.c:1216 option.c:2888
+ #, fuzzy
+ msgid "bad IPv6 address"
+ msgstr "membaca %s - %d alamat"
+
+ # OK
+-#: option.c:1224 option.c:1318
++#: option.c:1243 option.c:1337
+ msgid "bad domain in dhcp-option"
+ msgstr "domain dalam dhcp-option salah"
+
+ # OK
+-#: option.c:1356
++#: option.c:1375
+ msgid "dhcp-option too long"
+ msgstr "dhcp-option terlalu panjang"
+
+-#: option.c:1363
++#: option.c:1382
+ msgid "illegal dhcp-match"
+ msgstr ""
+
+-#: option.c:1425
++#: option.c:1444
+ msgid "illegal repeated flag"
+ msgstr ""
+
+-#: option.c:1433
++#: option.c:1452
+ msgid "illegal repeated keyword"
+ msgstr ""
+
+ # OK
+-#: option.c:1495 option.c:4092
++#: option.c:1517 option.c:4186
+ #, fuzzy, c-format
+ msgid "cannot access directory %s: %s"
+ msgstr "tidak bisa membaca %s: %s"
+
+ # OK
+-#: option.c:1541 tftp.c:493
++#: option.c:1563 tftp.c:493
+ #, fuzzy, c-format
+ msgid "cannot access %s: %s"
+ msgstr "tidak bisa membaca %s: %s"
+
+-#: option.c:1588
++#: option.c:1615
+ msgid "setting log facility is not possible under Android"
+ msgstr ""
+
+-#: option.c:1597
++#: option.c:1624
+ msgid "bad log facility"
+ msgstr ""
+
+ # OK
+-#: option.c:1650
++#: option.c:1677
+ msgid "bad MX preference"
+ msgstr "kesukaan MX salah"
+
+ # OK
+-#: option.c:1655
++#: option.c:1682
+ msgid "bad MX name"
+ msgstr "nama MX salah"
+
+ # OK
+-#: option.c:1669
++#: option.c:1696
+ msgid "bad MX target"
+ msgstr "target MX salah"
+
+-#: option.c:1681
++#: option.c:1708
+ msgid "cannot run scripts under uClinux"
+ msgstr ""
+
+-#: option.c:1683
++#: option.c:1710
+ msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts"
+ msgstr ""
+
+-#: option.c:1687
++#: option.c:1714
+ msgid "recompile with HAVE_LUASCRIPT defined to enable Lua scripts"
+ msgstr ""
+
+ # OK
+-#: option.c:1928 option.c:1966 option.c:2015
++#: option.c:1970 option.c:2015 option.c:2071
+ #, fuzzy
+ msgid "bad prefix"
+ msgstr "port salah"
+
+-#: option.c:2289
++#: option.c:2352
+ msgid "recompile with HAVE_IPSET defined to enable ipset directives"
+ msgstr ""
+
+ # OK
+-#: option.c:2469
++#: option.c:2545
+ #, fuzzy
+ msgid "bad port range"
+ msgstr "port salah"
+
+-#: option.c:2485
++#: option.c:2561
+ msgid "bad bridge-interface"
+ msgstr ""
+
+-#: option.c:2545
++#: option.c:2621
+ msgid "only one tag allowed"
+ msgstr ""
+
+ # OK
+-#: option.c:2565 option.c:2577 option.c:2683 option.c:2724
++#: option.c:2641 option.c:2653 option.c:2759 option.c:2800
+ msgid "bad dhcp-range"
+ msgstr "dhcp-range salah"
+
+ # OK
+-#: option.c:2592
++#: option.c:2668
+ msgid "inconsistent DHCP range"
+ msgstr "jangkauan DHCP tidak konsisten"
+
+-#: option.c:2651
++#: option.c:2727
+ msgid "prefix length must be exactly 64 for RA subnets"
+ msgstr ""
+
+-#: option.c:2653
++#: option.c:2729
+ msgid "prefix length must be exactly 64 for subnet constructors"
+ msgstr ""
+
+-#: option.c:2657
++#: option.c:2733
+ msgid "prefix length must be at least 64"
+ msgstr ""
+
+ # OK
+-#: option.c:2660
++#: option.c:2736
+ #, fuzzy
+ msgid "inconsistent DHCPv6 range"
+ msgstr "jangkauan DHCP tidak konsisten"
+
+-#: option.c:2671
++#: option.c:2747
+ msgid "prefix must be zero with \"constructor:\" argument"
+ msgstr ""
+
+ # OK
+-#: option.c:2782 option.c:2830
++#: option.c:2858 option.c:2906
+ #, fuzzy
+ msgid "bad hex constant"
+ msgstr "dhcp-host salah"
+
+-#: option.c:2804
++#: option.c:2880
+ msgid "cannot match tags in --dhcp-host"
+ msgstr ""
+
+ # OK
+-#: option.c:2852
++#: option.c:2928
+ #, fuzzy, c-format
+ msgid "duplicate dhcp-host IP address %s"
+ msgstr "alamat IP kembar %s dalam direktif dhcp-config"
+
+ # OK
+-#: option.c:2910
++#: option.c:2986
+ #, fuzzy
+ msgid "bad DHCP host name"
+ msgstr "nama MX salah"
+
+ # OK
+-#: option.c:2992
++#: option.c:3068
+ #, fuzzy
+ msgid "bad tag-if"
+ msgstr "target MX salah"
+
+ # OK
+-#: option.c:3316 option.c:3710
++#: option.c:3392 option.c:3786
+ msgid "invalid port number"
+ msgstr "nomor port tidak benar"
+
+ # OK
+-#: option.c:3378
++#: option.c:3454
+ #, fuzzy
+ msgid "bad dhcp-proxy address"
+ msgstr "membaca %s - %d alamat"
+
+ # OK
+-#: option.c:3404
++#: option.c:3480
+ #, fuzzy
+ msgid "Bad dhcp-relay"
+ msgstr "dhcp-range salah"
+
+-#: option.c:3430
++#: option.c:3506
+ msgid "bad RA-params"
+ msgstr ""
+
+-#: option.c:3439
++#: option.c:3515
+ msgid "bad DUID"
+ msgstr ""
+
+ # OK
+-#: option.c:3481
++#: option.c:3557
+ #, fuzzy
+ msgid "invalid alias range"
+ msgstr "weight tidak benar"
+
+-#: option.c:3535
++#: option.c:3611
+ msgid "bad CNAME"
+ msgstr ""
+
+-#: option.c:3540
++#: option.c:3616
+ msgid "duplicate CNAME"
+ msgstr ""
+
+ # OK
+-#: option.c:3560
++#: option.c:3636
+ #, fuzzy
+ msgid "bad PTR record"
+ msgstr "rekord SRV salah"
+
+ # OK
+-#: option.c:3591
++#: option.c:3667
+ #, fuzzy
+ msgid "bad NAPTR record"
+ msgstr "rekord SRV salah"
+
+ # OK
+-#: option.c:3625
++#: option.c:3701
+ #, fuzzy
+ msgid "bad RR record"
+ msgstr "rekord SRV salah"
+
+ # OK
+-#: option.c:3655
++#: option.c:3731
+ msgid "bad TXT record"
+ msgstr "rekord TXT salah"
+
+ # OK
+-#: option.c:3696
++#: option.c:3772
+ msgid "bad SRV record"
+ msgstr "rekord SRV salah"
+
+ # OK
+-#: option.c:3703
++#: option.c:3779
+ msgid "bad SRV target"
+ msgstr "target SRV salah"
+
+ # OK
+-#: option.c:3717
++#: option.c:3793
+ msgid "invalid priority"
+ msgstr "prioritas tidak benar"
+
+ # OK
+-#: option.c:3724
++#: option.c:3800
+ msgid "invalid weight"
+ msgstr "weight tidak benar"
+
+ # OK
+-#: option.c:3748
++#: option.c:3824
+ #, fuzzy
+ msgid "Bad host-record"
+ msgstr "rekord SRV salah"
+
+ # OK
+-#: option.c:3765
++#: option.c:3841
+ #, fuzzy
+ msgid "Bad name in host-record"
+ msgstr "kesalahan nama di %s"
+
+ # OK
+-#: option.c:3826
++#: option.c:3906
+ #, fuzzy
+ msgid "bad trust anchor"
+ msgstr "port salah"
+
+-#: option.c:3840
++#: option.c:3920
+ msgid "bad HEX in trust anchor"
+ msgstr ""
+
+-#: option.c:3850
++#: option.c:3930
+ msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DNSSEC/DBus support)"
+ msgstr ""
+
+ # OK
+-#: option.c:3909
++#: option.c:3989
+ msgid "missing \""
+ msgstr "kurang \""
+
+ # OK
+-#: option.c:3966
++#: option.c:4046
+ msgid "bad option"
+ msgstr "pilihan salah"
+
+ # OK
+-#: option.c:3968
++#: option.c:4048
+ msgid "extraneous parameter"
+ msgstr "parameter berlebihan"
+
+ # OK
+-#: option.c:3970
++#: option.c:4050
+ msgid "missing parameter"
+ msgstr "parameter kurang"
+
+ # OK
+-#: option.c:3972
++#: option.c:4052
+ #, fuzzy
+ msgid "illegal option"
+ msgstr "pilihan salah"
+
+ # OK
+-#: option.c:3979
++#: option.c:4059
+ msgid "error"
+ msgstr "kesalahan"
+
+ # OK
+-#: option.c:3981
++#: option.c:4061
+ #, fuzzy, c-format
+ msgid " at line %d of %s"
+ msgstr "%s pada baris %d dari %%s"
+
+ # OK
+-#: option.c:4045 option.c:4168 tftp.c:667
+-#, c-format
+-msgid "cannot read %s: %s"
+-msgstr "tidak bisa membaca %s: %s"
+-
+-# OK
+-#: option.c:4229 option.c:4265
++#: option.c:4076 option.c:4323 option.c:4359
+ #, fuzzy, c-format
+ msgid "read %s"
+ msgstr "membaca %s"
+
+-#: option.c:4331
++# OK
++#: option.c:4139 option.c:4262 tftp.c:667
++#, c-format
++msgid "cannot read %s: %s"
++msgstr "tidak bisa membaca %s: %s"
++
++#: option.c:4425
+ msgid "junk found in command line"
+ msgstr ""
+
+ # OK
+-#: option.c:4366
++#: option.c:4460
+ #, c-format
+ msgid "Dnsmasq version %s %s\n"
+ msgstr "Dnsmasq versi %s %s\n"
+
+ # OK
+-#: option.c:4367
++#: option.c:4461
+ #, fuzzy, c-format
+ msgid ""
+ "Compile time options: %s\n"
+@@ -1189,100 +1227,100 @@ msgstr ""
+ "\n"
+
+ # OK
+-#: option.c:4368
++#: option.c:4462
+ #, c-format
+ msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
+ msgstr "Perangkat lunak ini tersedia TANPA JAMINAN SEDIKITPUN.\n"
+
+ # OK
+-#: option.c:4369
++#: option.c:4463
+ #, c-format
+ msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
+ msgstr "Dnsdmasq adalah perangkat lunak bebas, dan Anda dipersilahkan untuk membagikannya\n"
+
+ # OK
+-#: option.c:4370
++#: option.c:4464
+ #, fuzzy, c-format
+ msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
+ msgstr "dengan aturan GNU General Public License, versi 2.\n"
+
+-#: option.c:4381
++#: option.c:4475
+ msgid "try --help"
+ msgstr ""
+
+-#: option.c:4383
++#: option.c:4477
+ msgid "try -w"
+ msgstr ""
+
+ # OK
+-#: option.c:4385
++#: option.c:4479
+ #, fuzzy, c-format
+ msgid "bad command line options: %s"
+ msgstr "pilihan baris perintah salah: %s."
+
+ # OK
+-#: option.c:4434
++#: option.c:4535
+ #, c-format
+ msgid "cannot get host-name: %s"
+ msgstr "tidak bisa mendapatkan host-name: %s"
+
+ # OK
+-#: option.c:4462
++#: option.c:4563
+ msgid "only one resolv.conf file allowed in no-poll mode."
+ msgstr "hanya satu file resolv.conf yang diperbolehkan dalam modus no-poll."
+
+ # OK
+-#: option.c:4472
++#: option.c:4573
+ msgid "must have exactly one resolv.conf to read domain from."
+ msgstr "harus mempunyai tepat satu resolv.conf untuk mendapatkan nama domain."
+
+ # OK
+-#: option.c:4475 network.c:1506 dhcp.c:769
++#: option.c:4576 network.c:1506 dhcp.c:774
+ #, fuzzy, c-format
+ msgid "failed to read %s: %s"
+ msgstr "gagal membaca %s: %s"
+
+ # OK
+-#: option.c:4492
++#: option.c:4593
+ #, c-format
+ msgid "no search directive found in %s"
+ msgstr "tidak ditemukan direktif search di %s"
+
+-#: option.c:4513
++#: option.c:4614
+ msgid "there must be a default domain when --dhcp-fqdn is set"
+ msgstr ""
+
+-#: option.c:4522
++#: option.c:4623
+ msgid "syntax check OK"
+ msgstr ""
+
+ # OK
+-#: forward.c:114
++#: forward.c:111
+ #, fuzzy, c-format
+ msgid "failed to send packet: %s"
+ msgstr "gagal mendengarkan di socket: %s"
+
+-#: forward.c:574
++#: forward.c:572
+ msgid "discarding DNS reply: subnet option mismatch"
+ msgstr ""
+
+ # OK
+-#: forward.c:597
++#: forward.c:595
+ #, c-format
+ msgid "nameserver %s refused to do a recursive query"
+ msgstr "nameserver %s menolak melakukan resolusi rekursif"
+
+-#: forward.c:629
++#: forward.c:627
+ #, c-format
+ msgid "possible DNS-rebind attack detected: %s"
+ msgstr ""
+
+-#: forward.c:1132 forward.c:1663
++#: forward.c:1156 forward.c:1722
+ msgid "Ignoring query from non-local network"
+ msgstr ""
+
+ # OK
+-#: forward.c:2101
++#: forward.c:2178
+ #, fuzzy, c-format
+ msgid "Maximum number of concurrent DNS queries reached (max: %d)"
+ msgstr "Sebutkan jumlah maksimum lease DHCP (default %s)."
+@@ -1385,301 +1423,315 @@ msgstr "menggunakan nameserver %s#%d"
+ msgid "using nameserver %s#%d"
+ msgstr "menggunakan nameserver %s#%d"
+
+-#: dnsmasq.c:154
+-msgid "No trust anchors provided for DNSSEC"
++#: dnsmasq.c:149
++msgid "dhcp-hostsdir, dhcp-optsdir and hostsdir are not supported on this platform"
+ msgstr ""
+
+-#: dnsmasq.c:157
+-msgid "Cannot reduce cache size from default when DNSSEC enabled"
++#: dnsmasq.c:156
++msgid "no trust anchors provided for DNSSEC"
+ msgstr ""
+
+-# OK
+ #: dnsmasq.c:159
++msgid "cannot reduce cache size from default when DNSSEC enabled"
++msgstr ""
++
++# OK
++#: dnsmasq.c:161
+ #, fuzzy
+ msgid "DNSSEC not available: set HAVE_DNSSEC in src/config.h"
+ msgstr "DBus tidak tersedia: setel HAVE_DBUS dalam src/config.h"
+
+ # OK
+-#: dnsmasq.c:165
++#: dnsmasq.c:167
+ #, fuzzy
+ msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
+ msgstr "DBus tidak tersedia: setel HAVE_DBUS dalam src/config.h"
+
+-#: dnsmasq.c:170
+-msgid "Cannot use --conntrack AND --query-port"
++#: dnsmasq.c:172
++msgid "cannot use --conntrack AND --query-port"
+ msgstr ""
+
+ # OK
+-#: dnsmasq.c:173
++#: dnsmasq.c:175
+ #, fuzzy
+-msgid "Conntrack support not available: set HAVE_CONNTRACK in src/config.h"
++msgid "conntrack support not available: set HAVE_CONNTRACK in src/config.h"
+ msgstr "DBus tidak tersedia: setel HAVE_DBUS dalam src/config.h"
+
+-#: dnsmasq.c:178
++#: dnsmasq.c:180
+ msgid "asychronous logging is not available under Solaris"
+ msgstr ""
+
+-#: dnsmasq.c:183
++#: dnsmasq.c:185
+ msgid "asychronous logging is not available under Android"
+ msgstr ""
+
+ # OK
+-#: dnsmasq.c:188
++#: dnsmasq.c:190
+ #, fuzzy
+ msgid "authoritative DNS not available: set HAVE_AUTH in src/config.h"
+ msgstr "DBus tidak tersedia: setel HAVE_DBUS dalam src/config.h"
+
+ # OK
+-#: dnsmasq.c:193
++#: dnsmasq.c:195
+ #, fuzzy
+-msgid "Loop detection not available: set HAVE_LOOP in src/config.h"
++msgid "loop detection not available: set HAVE_LOOP in src/config.h"
+ msgstr "DBus tidak tersedia: setel HAVE_DBUS dalam src/config.h"
+
+-#: dnsmasq.c:201
++#: dnsmasq.c:203
+ msgid "zone serial must be configured in --auth-soa"
+ msgstr ""
+
+-#: dnsmasq.c:219
++#: dnsmasq.c:221
+ msgid "dhcp-range constructor not available on this platform"
+ msgstr ""
+
+-#: dnsmasq.c:262
++#: dnsmasq.c:264
+ msgid "cannot set --bind-interfaces and --bind-dynamic"
+ msgstr ""
+
+ # OK
+-#: dnsmasq.c:265
++#: dnsmasq.c:267
+ #, c-format
+ msgid "failed to find list of interfaces: %s"
+ msgstr "gagal mendapatkan daftar antarmuka: %s"
+
+ # OK
+-#: dnsmasq.c:274
++#: dnsmasq.c:276
+ #, c-format
+ msgid "unknown interface %s"
+ msgstr "antarmuka tidak dikenal %s"
+
+ # OK
+-#: dnsmasq.c:330 dnsmasq.c:954
++#: dnsmasq.c:340 dnsmasq.c:1004
+ #, c-format
+ msgid "DBus error: %s"
+ msgstr "DBus error: %s"
+
+ # OK
+-#: dnsmasq.c:333
++#: dnsmasq.c:343
+ msgid "DBus not available: set HAVE_DBUS in src/config.h"
+ msgstr "DBus tidak tersedia: setel HAVE_DBUS dalam src/config.h"
+
+-#: dnsmasq.c:361
++#: dnsmasq.c:371
+ #, c-format
+ msgid "unknown user or group: %s"
+ msgstr ""
+
+-#: dnsmasq.c:416
++#: dnsmasq.c:426
+ #, c-format
+ msgid "cannot chdir to filesystem root: %s"
+ msgstr ""
+
+ # OK
+-#: dnsmasq.c:653
++#: dnsmasq.c:667
+ #, fuzzy, c-format
+ msgid "started, version %s DNS disabled"
+ msgstr "dimulai, cache versi %s di disable"
+
+ # OK
+-#: dnsmasq.c:655
++#: dnsmasq.c:669
+ #, c-format
+ msgid "started, version %s cachesize %d"
+ msgstr "dimulai, versi %s ukuran cache %d"
+
+ # OK
+-#: dnsmasq.c:657
++#: dnsmasq.c:671
+ #, c-format
+ msgid "started, version %s cache disabled"
+ msgstr "dimulai, cache versi %s di disable"
+
+ # OK
+-#: dnsmasq.c:659
++#: dnsmasq.c:673
+ #, c-format
+ msgid "compile time options: %s"
+ msgstr "pilihan-pilihan saat kompilasi: %s"
+
+ # OK
+-#: dnsmasq.c:665
++#: dnsmasq.c:679
+ msgid "DBus support enabled: connected to system bus"
+ msgstr "dukungan DBus dimungkinkan: terkoneksi pada bus sistem"
+
+ # OK
+-#: dnsmasq.c:667
++#: dnsmasq.c:681
+ msgid "DBus support enabled: bus connection pending"
+ msgstr "dukungan DBus dimungkinkan: koneksi bus ditunda"
+
+-#: dnsmasq.c:672
++#: dnsmasq.c:686
+ msgid "DNS service limited to local subnets"
+ msgstr ""
+
+-#: dnsmasq.c:677
++#: dnsmasq.c:702
+ msgid "DNSSEC validation enabled"
+ msgstr ""
+
+-#: dnsmasq.c:679
++#: dnsmasq.c:705
+ msgid "DNSSEC signature timestamps not checked until first cache reload"
+ msgstr ""
+
++#: dnsmasq.c:708
++msgid "DNSSEC signature timestamps not checked until system time valid"
++msgstr ""
++
+ # OK
+-#: dnsmasq.c:684
++#: dnsmasq.c:713
+ #, fuzzy, c-format
+ msgid "warning: failed to change owner of %s: %s"
+ msgstr "gagal memuat nama-nama dari %s: %s"
+
+ # OK
+-#: dnsmasq.c:688
++#: dnsmasq.c:717
+ msgid "setting --bind-interfaces option because of OS limitations"
+ msgstr "setelan opsi --bind-interfaces disebabkan keterbatasan OS"
+
+ # OK
+-#: dnsmasq.c:698
++#: dnsmasq.c:727
+ #, c-format
+ msgid "warning: interface %s does not currently exist"
+ msgstr "peringatan: antarmuka %s tidak ada"
+
+-#: dnsmasq.c:703
++#: dnsmasq.c:732
+ msgid "warning: ignoring resolv-file flag because no-resolv is set"
+ msgstr ""
+
+ # OK
+-#: dnsmasq.c:706
++#: dnsmasq.c:735
+ #, fuzzy
+ msgid "warning: no upstream servers configured"
+ msgstr "menyetel server-server di atas dengan DBus"
+
+-#: dnsmasq.c:710
++#: dnsmasq.c:739
+ #, c-format
+ msgid "asynchronous logging enabled, queue limit is %d messages"
+ msgstr ""
+
+-#: dnsmasq.c:731
++#: dnsmasq.c:760
+ msgid "IPv6 router advertisement enabled"
+ msgstr ""
+
+-#: dnsmasq.c:736
++#: dnsmasq.c:765
+ #, c-format
+ msgid "DHCP, sockets bound exclusively to interface %s"
+ msgstr ""
+
+-#: dnsmasq.c:753
++#: dnsmasq.c:782
+ msgid "root is "
+ msgstr ""
+
+ # OK
+-#: dnsmasq.c:753
++#: dnsmasq.c:782
+ #, fuzzy
+ msgid "enabled"
+ msgstr "di disable"
+
+-#: dnsmasq.c:755
++#: dnsmasq.c:784
+ msgid "secure mode"
+ msgstr ""
+
+-#: dnsmasq.c:781
++#: dnsmasq.c:810
+ #, c-format
+ msgid "restricting maximum simultaneous TFTP transfers to %d"
+ msgstr ""
+
+ # OK
+-#: dnsmasq.c:956
++#: dnsmasq.c:1006
+ msgid "connected to system DBus"
+ msgstr "terhubung ke sistem DBus"
+
+-#: dnsmasq.c:1106
++#: dnsmasq.c:1156
+ #, c-format
+ msgid "cannot fork into background: %s"
+ msgstr ""
+
+ # OK
+-#: dnsmasq.c:1109
++#: dnsmasq.c:1159
+ #, fuzzy, c-format
+ msgid "failed to create helper: %s"
+ msgstr "gagal membaca %s: %s"
+
+-#: dnsmasq.c:1112
++#: dnsmasq.c:1162
+ #, c-format
+ msgid "setting capabilities failed: %s"
+ msgstr ""
+
+ # OK
+-#: dnsmasq.c:1115
++#: dnsmasq.c:1165
+ #, fuzzy, c-format
+ msgid "failed to change user-id to %s: %s"
+ msgstr "gagal memuat nama-nama dari %s: %s"
+
+ # OK
+-#: dnsmasq.c:1118
++#: dnsmasq.c:1168
+ #, fuzzy, c-format
+ msgid "failed to change group-id to %s: %s"
+ msgstr "gagal memuat nama-nama dari %s: %s"
+
+ # OK
+-#: dnsmasq.c:1121
++#: dnsmasq.c:1171
+ #, fuzzy, c-format
+ msgid "failed to open pidfile %s: %s"
+ msgstr "gagal membaca %s: %s"
+
+ # OK
+-#: dnsmasq.c:1124
++#: dnsmasq.c:1174
+ #, fuzzy, c-format
+ msgid "cannot open log %s: %s"
+ msgstr "tidak bisa membuka %s:%s"
+
+ # OK
+-#: dnsmasq.c:1127
++#: dnsmasq.c:1177
+ #, fuzzy, c-format
+ msgid "failed to load Lua script: %s"
+ msgstr "gagal memuat %S: %s"
+
+-#: dnsmasq.c:1130
++#: dnsmasq.c:1180
+ #, c-format
+ msgid "TFTP directory %s inaccessible: %s"
+ msgstr ""
+
+-#: dnsmasq.c:1151
++# OK
++#: dnsmasq.c:1183
++#, fuzzy, c-format
++msgid "cannot create timestamp file %s: %s"
++msgstr "tidak dapat membuka atau membuat file lease: %s"
++
++#: dnsmasq.c:1204
+ msgid "now checking DNSSEC signature timestamps"
+ msgstr ""
+
+-#: dnsmasq.c:1218
++#: dnsmasq.c:1271
+ #, c-format
+ msgid "script process killed by signal %d"
+ msgstr ""
+
+-#: dnsmasq.c:1222
++#: dnsmasq.c:1275
+ #, c-format
+ msgid "script process exited with status %d"
+ msgstr ""
+
+ # OK
+-#: dnsmasq.c:1226
++#: dnsmasq.c:1279
+ #, fuzzy, c-format
+ msgid "failed to execute %s: %s"
+ msgstr "gagal mengakses %s: %s"
+
+-#: dnsmasq.c:1281
++#: dnsmasq.c:1334
+ msgid "exiting on receipt of SIGTERM"
+ msgstr "keluar karena menerima SIGTERM"
+
+ # OK
+-#: dnsmasq.c:1309
++#: dnsmasq.c:1362
+ #, fuzzy, c-format
+ msgid "failed to access %s: %s"
+ msgstr "gagal mengakses %s: %s"
+
+ # OK
+-#: dnsmasq.c:1339
++#: dnsmasq.c:1392
+ #, c-format
+ msgid "reading %s"
+ msgstr "membaca %s"
+
+ # OK
+-#: dnsmasq.c:1350
++#: dnsmasq.c:1403
+ #, fuzzy, c-format
+ msgid "no servers found in %s, will retry"
+ msgstr "tidak ditemukan direktif search di %s"
+@@ -1725,29 +1777,29 @@ msgstr "antarmuka tidak dikenal %s"
+ msgid "DHCP packet received on %s which has no address"
+ msgstr ""
+
+-#: dhcp.c:408
++#: dhcp.c:412
+ #, c-format
+ msgid "ARP-cache injection failed: %s"
+ msgstr ""
+
+ # OK
+-#: dhcp.c:506
++#: dhcp.c:511
+ #, c-format
+ msgid "DHCP range %s -- %s is not consistent with netmask %s"
+ msgstr "jangkauan DHCP %s -- %s tidak konsisten dengan netmask %s"
+
+ # OK
+-#: dhcp.c:807
++#: dhcp.c:812
+ #, fuzzy, c-format
+ msgid "bad line at %s line %d"
+ msgstr "kesalahan nama pada %s baris %d"
+
+-#: dhcp.c:850
++#: dhcp.c:855
+ #, c-format
+ msgid "ignoring %s line %d, duplicate name or IP address"
+ msgstr ""
+
+-#: dhcp.c:994 rfc3315.c:2089
++#: dhcp.c:999 rfc3315.c:2139
+ #, c-format
+ msgid "DHCP relay %s -> %s"
+ msgstr ""
+@@ -1830,13 +1882,13 @@ msgid "disabled"
+ msgstr "di disable"
+
+ # OK
+-#: rfc2131.c:539 rfc2131.c:967 rfc2131.c:1385 rfc3315.c:602 rfc3315.c:823
+-#: rfc3315.c:1095
++#: rfc2131.c:539 rfc2131.c:967 rfc2131.c:1385 rfc3315.c:603 rfc3315.c:860
++#: rfc3315.c:1139
+ msgid "ignored"
+ msgstr "diabaikan"
+
+ # OK
+-#: rfc2131.c:554 rfc2131.c:1205 rfc3315.c:873
++#: rfc2131.c:554 rfc2131.c:1205 rfc3315.c:910
+ msgid "address in use"
+ msgstr "alamat telah digunakan"
+
+@@ -1860,7 +1912,7 @@ msgstr "tak ada alamat yang disetel"
+ msgid "no leases left"
+ msgstr "tak ada lease yang tersisa"
+
+-#: rfc2131.c:691 rfc3315.c:475
++#: rfc2131.c:691 rfc3315.c:476
+ #, c-format
+ msgid "%u client provides name: %s"
+ msgstr ""
+@@ -1870,7 +1922,7 @@ msgid "PXE BIS not supported"
+ msgstr ""
+
+ # OK
+-#: rfc2131.c:935 rfc3315.c:1189
++#: rfc2131.c:935 rfc3315.c:1233
+ #, fuzzy, c-format
+ msgid "disabling DHCP static address %s for %s"
+ msgstr "men-disable alamat statik DHCP %s"
+@@ -1909,7 +1961,7 @@ msgid "wrong address"
+ msgstr "alamat salah"
+
+ # OK
+-#: rfc2131.c:1143 rfc3315.c:969
++#: rfc2131.c:1143 rfc3315.c:1006
+ msgid "lease not found"
+ msgstr "lease tak ditemukan"
+
+@@ -1965,7 +2017,7 @@ msgid "PXE menu too large"
+ msgstr ""
+
+ # OK
+-#: rfc2131.c:2173 rfc3315.c:1456
++#: rfc2131.c:2173 rfc3315.c:1506
+ #, fuzzy, c-format
+ msgid "%u requested options: %s"
+ msgstr "pilihan-pilihan saat kompilasi: %s"
+@@ -1982,7 +2034,7 @@ msgid "cannot create netlink socket: %s"
+ msgstr "tidak bisa mem-bind netlink socket: %s"
+
+ # OK
+-#: netlink.c:347
++#: netlink.c:348
+ #, fuzzy, c-format
+ msgid "netlink returns error: %s"
+ msgstr "DBus error: %s"
+@@ -2116,72 +2168,72 @@ msgid "%u available DHCPv6 subnet: %s/%d"
+ msgstr "tidak ada alamat yang bisa dipakai untuk permintaan DHCP %s %s"
+
+ # OK
+-#: rfc3315.c:379
++#: rfc3315.c:380
+ #, fuzzy, c-format
+ msgid "%u vendor class: %u"
+ msgstr "DBus error: %s"
+
+ # OK
+-#: rfc3315.c:427
++#: rfc3315.c:428
+ #, fuzzy, c-format
+ msgid "%u client MAC address: %s"
+ msgstr "tidak ada antarmuka dengan alamat %s"
+
+ # OK
+-#: rfc3315.c:659
++#: rfc3315.c:660
+ #, fuzzy, c-format
+ msgid "unknown prefix-class %d"
+ msgstr "lease tidak diketahui"
+
+-#: rfc3315.c:791 rfc3315.c:913
++# OK
++#: rfc3315.c:803 rfc3315.c:902
++#, fuzzy
++msgid "address unavailable"
++msgstr "alamat tak tersedia"
++
++#: rfc3315.c:815 rfc3315.c:950 rfc3315.c:1283
+ msgid "success"
+ msgstr ""
+
+ # OK
+-#: rfc3315.c:806 rfc3315.c:808 rfc3315.c:921 rfc3315.c:923
++#: rfc3315.c:843 rfc3315.c:845 rfc3315.c:958 rfc3315.c:960
+ #, fuzzy
+ msgid "no addresses available"
+ msgstr "tak ada alamat yang tersedia"
+
+-# OK
+-#: rfc3315.c:865
+-#, fuzzy
+-msgid "address unavailable"
+-msgstr "alamat tak tersedia"
+-
+-#: rfc3315.c:900
++#: rfc3315.c:937
+ msgid "not on link"
+ msgstr ""
+
+-#: rfc3315.c:973 rfc3315.c:1151 rfc3315.c:1228
++#: rfc3315.c:1010 rfc3315.c:1195 rfc3315.c:1272
+ msgid "no binding found"
+ msgstr ""
+
+-#: rfc3315.c:1011
++#: rfc3315.c:1048
+ msgid "deprecated"
+ msgstr ""
+
+ # OK
+-#: rfc3315.c:1016
++#: rfc3315.c:1053
+ #, fuzzy
+ msgid "address invalid"
+ msgstr "alamat telah digunakan"
+
+-#: rfc3315.c:1061
++#: rfc3315.c:1100
+ msgid "confirm failed"
+ msgstr ""
+
+ # OK
+-#: rfc3315.c:1072
++#: rfc3315.c:1116
+ #, fuzzy
+ msgid "all addresses still on link"
+ msgstr "kesalahan nama pada %s baris %d"
+
+-#: rfc3315.c:1160
++#: rfc3315.c:1204
+ msgid "release received"
+ msgstr ""
+
+-#: rfc3315.c:2080
++#: rfc3315.c:2130
+ msgid "Cannot multicast to DHCPv6 server without correct interface"
+ msgstr ""
+
+@@ -2280,7 +2332,7 @@ msgstr ""
+ msgid "cannot create ICMPv6 socket: %s"
+ msgstr "tidak bisa membuat socket DHCP: %s"
+
+-#: auth.c:429
++#: auth.c:436
+ #, c-format
+ msgid "ignoring zone transfer request from %s"
+ msgstr ""
+@@ -2297,59 +2349,99 @@ msgstr "gagal mem-bind socket server DHCP: %s"
+ msgid "failed to create IPset control socket: %s"
+ msgstr "gagal membuat socket: %s "
+
++# OK
++#: dnssec.c:425 dnssec.c:469
++#, fuzzy, c-format
++msgid "failed to update mtime on %s: %s"
++msgstr "gagal membaca %s: %s"
++
+ #: blockdata.c:58
+ #, c-format
+ msgid "DNSSEC memory in use %u, max %u, allocated %u"
+ msgstr ""
+
+-#: tables.c:76
++#: tables.c:80
+ msgid "error: fill_addr missused"
+ msgstr ""
+
+ # OK
+-#: tables.c:105
++#: tables.c:109
+ #, fuzzy, c-format
+ msgid "failed to access pf devices: %s"
+ msgstr "gagal mengakses %s: %s"
+
+ # OK
+-#: tables.c:119
++#: tables.c:123
+ #, fuzzy, c-format
+ msgid "warning: no opened pf devices %s"
+ msgstr "menggunakan alamat lokal saja untuk %s %s"
+
+ # OK
+-#: tables.c:127
++#: tables.c:131
+ #, fuzzy, c-format
+ msgid "error: cannot use table name %s"
+ msgstr "tidak bisa mendapatkan host-name: %s"
+
+-#: tables.c:135
++#: tables.c:139
+ #, c-format
+ msgid "error: cannot strlcpy table name %s"
+ msgstr ""
+
+-#: tables.c:141
++#: tables.c:145
+ #, c-format
+ msgid "warning: pfr_add_tables: %s(%d)"
+ msgstr ""
+
+-#: tables.c:147
++#: tables.c:151
+ msgid "info: table created"
+ msgstr ""
+
+-#: tables.c:158
++#: tables.c:162
+ #, c-format
+ msgid "warning: DIOCR%sADDRS: %s"
+ msgstr ""
+
+ # OK
+-#: tables.c:162
++#: tables.c:166
+ #, fuzzy, c-format
+ msgid "%d addresses %s"
+ msgstr "membaca %s - %d alamat"
+
+ # OK
++#: inotify.c:46
++#, fuzzy, c-format
++msgid "failed to create inotify: %s"
++msgstr "gagal membaca %s: %s"
++
++# OK
++#: inotify.c:60
++#, fuzzy, c-format
++msgid "cannot cannonicalise resolv-file %s: %s"
++msgstr "tidak dapat membuka atau membuat file lease: %s"
++
++#: inotify.c:72
++#, c-format
++msgid "directory %s for resolv-file is missing, cannot poll"
++msgstr ""
++
++# OK
++#: inotify.c:75 inotify.c:112
++#, fuzzy, c-format
++msgid "failed to create inotify for %s: %s"
++msgstr "gagal membuat socket: %s "
++
++# OK
++#: inotify.c:97
++#, fuzzy, c-format
++msgid "bad dynamic directory %s: %s"
++msgstr "tidak bisa membaca %s: %s"
++
++#: inotify.c:197
++#, c-format
++msgid "inotify, new or changed file %s"
++msgstr ""
++
++# OK
+ #~ msgid "duplicate IP address %s in dhcp-config directive."
+ #~ msgstr "alamat IP kembar %s dalam direktif dhcp-config"
+
+diff --git a/po/it.po b/po/it.po
+index f3b547576ba4..64342c9804ba 100644
+--- a/po/it.po
++++ b/po/it.po
+@@ -16,70 +16,70 @@ msgstr ""
+ "Content-Transfer-Encoding: 8bit\n"
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+-#: cache.c:505
++#: cache.c:523
+ msgid "Internal error in cache."
+ msgstr ""
+
+-#: cache.c:908
++#: cache.c:941
+ #, c-format
+ msgid "failed to load names from %s: %s"
+ msgstr ""
+
+-#: cache.c:934 dhcp.c:820
++#: cache.c:967 dhcp.c:825
+ #, c-format
+ msgid "bad address at %s line %d"
+ msgstr ""
+
+-#: cache.c:985 dhcp.c:836
++#: cache.c:1018 dhcp.c:841
+ #, c-format
+ msgid "bad name at %s line %d"
+ msgstr ""
+
+-#: cache.c:992 dhcp.c:911
++#: cache.c:1027 dhcp.c:916
+ #, c-format
+ msgid "read %s - %d addresses"
+ msgstr ""
+
+-#: cache.c:1100
++#: cache.c:1135
+ msgid "cleared cache"
+ msgstr ""
+
+-#: cache.c:1123
++#: cache.c:1164
+ #, c-format
+ msgid "No IPv4 address found for %s"
+ msgstr ""
+
+-#: cache.c:1201
++#: cache.c:1242
+ #, c-format
+ msgid "%s is a CNAME, not giving it to the DHCP lease of %s"
+ msgstr ""
+
+-#: cache.c:1225
++#: cache.c:1266
+ #, c-format
+ msgid "not giving name %s to the DHCP lease of %s because the name exists in %s with address %s"
+ msgstr ""
+
+-#: cache.c:1366
++#: cache.c:1421
+ #, c-format
+ msgid "time %lu"
+ msgstr ""
+
+-#: cache.c:1367
++#: cache.c:1422
+ #, c-format
+ msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
+ msgstr ""
+
+-#: cache.c:1369
++#: cache.c:1424
+ #, c-format
+ msgid "queries forwarded %u, queries answered locally %u"
+ msgstr ""
+
+-#: cache.c:1372
++#: cache.c:1427
+ #, c-format
+ msgid "queries for authoritative zones %u"
+ msgstr ""
+
+-#: cache.c:1398
++#: cache.c:1453
+ #, c-format
+ msgid "server %s#%d: queries sent %u, retried or failed %u"
+ msgstr ""
+@@ -93,7 +93,7 @@ msgstr ""
+ msgid "failed to allocate memory"
+ msgstr ""
+
+-#: util.c:243 option.c:579
++#: util.c:243 option.c:598
+ msgid "could not get memory"
+ msgstr ""
+
+@@ -107,990 +107,1018 @@ msgstr ""
+ msgid "failed to allocate %d bytes"
+ msgstr ""
+
+-#: util.c:429
++#: util.c:430
+ #, c-format
+ msgid "infinite"
+ msgstr ""
+
+-#: option.c:318
++#: option.c:330
+ msgid "Specify local address(es) to listen on."
+ msgstr ""
+
+-#: option.c:319
++#: option.c:331
+ msgid "Return ipaddr for all hosts in specified domains."
+ msgstr ""
+
+-#: option.c:320
++#: option.c:332
+ msgid "Fake reverse lookups for RFC1918 private address ranges."
+ msgstr ""
+
+-#: option.c:321
++#: option.c:333
+ msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
+ msgstr ""
+
+-#: option.c:322
++#: option.c:334
+ #, c-format
+ msgid "Specify the size of the cache in entries (defaults to %s)."
+ msgstr ""
+
+-#: option.c:323
++#: option.c:335
+ #, c-format
+ msgid "Specify configuration file (defaults to %s)."
+ msgstr ""
+
+-#: option.c:324
++#: option.c:336
+ msgid "Do NOT fork into the background: run in debug mode."
+ msgstr ""
+
+-#: option.c:325
++#: option.c:337
+ msgid "Do NOT forward queries with no domain part."
+ msgstr ""
+
+-#: option.c:326
++#: option.c:338
+ msgid "Return self-pointing MX records for local hosts."
+ msgstr ""
+
+-#: option.c:327
++#: option.c:339
+ msgid "Expand simple names in /etc/hosts with domain-suffix."
+ msgstr ""
+
+-#: option.c:328
++#: option.c:340
+ msgid "Don't forward spurious DNS requests from Windows hosts."
+ msgstr ""
+
+-#: option.c:329
++#: option.c:341
+ msgid "Enable DHCP in the range given with lease duration."
+ msgstr ""
+
+-#: option.c:330
++#: option.c:342
+ #, c-format
+ msgid "Change to this group after startup (defaults to %s)."
+ msgstr ""
+
+-#: option.c:331
++#: option.c:343
+ msgid "Set address or hostname for a specified machine."
+ msgstr ""
+
+-#: option.c:332
++#: option.c:344
+ msgid "Read DHCP host specs from file."
+ msgstr ""
+
+-#: option.c:333
++#: option.c:345
+ msgid "Read DHCP option specs from file."
+ msgstr ""
+
+-#: option.c:334
++#: option.c:346
++msgid "Read DHCP host specs from a directory."
++msgstr ""
++
++#: option.c:347
++msgid "Read DHCP options from a directory."
++msgstr ""
++
++#: option.c:348
+ msgid "Evaluate conditional tag expression."
+ msgstr ""
+
+-#: option.c:335
++#: option.c:349
+ #, c-format
+ msgid "Do NOT load %s file."
+ msgstr ""
+
+-#: option.c:336
++#: option.c:350
+ #, c-format
+ msgid "Specify a hosts file to be read in addition to %s."
+ msgstr ""
+
+-#: option.c:337
++#: option.c:351
++msgid "Read hosts files from a directory."
++msgstr ""
++
++#: option.c:352
+ msgid "Specify interface(s) to listen on."
+ msgstr ""
+
+-#: option.c:338
++#: option.c:353
+ msgid "Specify interface(s) NOT to listen on."
+ msgstr ""
+
+-#: option.c:339
++#: option.c:354
+ msgid "Map DHCP user class to tag."
+ msgstr ""
+
+-#: option.c:340
++#: option.c:355
+ msgid "Map RFC3046 circuit-id to tag."
+ msgstr ""
+
+-#: option.c:341
++#: option.c:356
+ msgid "Map RFC3046 remote-id to tag."
+ msgstr ""
+
+-#: option.c:342
++#: option.c:357
+ msgid "Map RFC3993 subscriber-id to tag."
+ msgstr ""
+
+-#: option.c:343
++#: option.c:358
+ msgid "Don't do DHCP for hosts with tag set."
+ msgstr ""
+
+-#: option.c:344
++#: option.c:359
+ msgid "Force broadcast replies for hosts with tag set."
+ msgstr ""
+
+-#: option.c:345
++#: option.c:360
+ msgid "Do NOT fork into the background, do NOT run in debug mode."
+ msgstr ""
+
+-#: option.c:346
++#: option.c:361
+ msgid "Assume we are the only DHCP server on the local network."
+ msgstr ""
+
+-#: option.c:347
++#: option.c:362
+ #, c-format
+ msgid "Specify where to store DHCP leases (defaults to %s)."
+ msgstr ""
+
+-#: option.c:348
++#: option.c:363
+ msgid "Return MX records for local hosts."
+ msgstr ""
+
+-#: option.c:349
++#: option.c:364
+ msgid "Specify an MX record."
+ msgstr ""
+
+-#: option.c:350
++#: option.c:365
+ msgid "Specify BOOTP options to DHCP server."
+ msgstr ""
+
+-#: option.c:351
++#: option.c:366
+ #, c-format
+ msgid "Do NOT poll %s file, reload only on SIGHUP."
+ msgstr ""
+
+-#: option.c:352
++#: option.c:367
+ msgid "Do NOT cache failed search results."
+ msgstr ""
+
+-#: option.c:353
++#: option.c:368
+ #, c-format
+ msgid "Use nameservers strictly in the order given in %s."
+ msgstr ""
+
+-#: option.c:354
++#: option.c:369
+ msgid "Specify options to be sent to DHCP clients."
+ msgstr ""
+
+-#: option.c:355
++#: option.c:370
+ msgid "DHCP option sent even if the client does not request it."
+ msgstr ""
+
+-#: option.c:356
++#: option.c:371
+ msgid "Specify port to listen for DNS requests on (defaults to 53)."
+ msgstr ""
+
+-#: option.c:357
++#: option.c:372
+ #, c-format
+ msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
+ msgstr ""
+
+-#: option.c:358
++#: option.c:373
+ msgid "Log DNS queries."
+ msgstr ""
+
+-#: option.c:359
++#: option.c:374
+ msgid "Force the originating port for upstream DNS queries."
+ msgstr ""
+
+-#: option.c:360
++#: option.c:375
+ msgid "Do NOT read resolv.conf."
+ msgstr ""
+
+-#: option.c:361
++#: option.c:376
+ #, c-format
+ msgid "Specify path to resolv.conf (defaults to %s)."
+ msgstr ""
+
+-#: option.c:362
++#: option.c:377
+ msgid "Specify path to file with server= options"
+ msgstr ""
+
+-#: option.c:363
++#: option.c:378
+ msgid "Specify address(es) of upstream servers with optional domains."
+ msgstr ""
+
+-#: option.c:364
++#: option.c:379
+ msgid "Specify address of upstream servers for reverse address queries"
+ msgstr ""
+
+-#: option.c:365
++#: option.c:380
+ msgid "Never forward queries to specified domains."
+ msgstr ""
+
+-#: option.c:366
++#: option.c:381
+ msgid "Specify the domain to be assigned in DHCP leases."
+ msgstr ""
+
+-#: option.c:367
++#: option.c:382
+ msgid "Specify default target in an MX record."
+ msgstr ""
+
+-#: option.c:368
++#: option.c:383
+ msgid "Specify time-to-live in seconds for replies from /etc/hosts."
+ msgstr ""
+
+-#: option.c:369
++#: option.c:384
+ msgid "Specify time-to-live in seconds for negative caching."
+ msgstr ""
+
+-#: option.c:370
++#: option.c:385
+ msgid "Specify time-to-live in seconds for maximum TTL to send to clients."
+ msgstr ""
+
+-#: option.c:371
++#: option.c:386
++msgid "Specify time-to-live ceiling for cache."
++msgstr ""
++
++#: option.c:387
++msgid "Specify time-to-live floor for cache."
++msgstr ""
++
++#: option.c:388
+ #, c-format
+ msgid "Change to this user after startup. (defaults to %s)."
+ msgstr ""
+
+-#: option.c:372
++#: option.c:389
+ msgid "Map DHCP vendor class to tag."
+ msgstr ""
+
+-#: option.c:373
++#: option.c:390
+ msgid "Display dnsmasq version and copyright information."
+ msgstr ""
+
+-#: option.c:374
++#: option.c:391
+ msgid "Translate IPv4 addresses from upstream servers."
+ msgstr ""
+
+-#: option.c:375
++#: option.c:392
+ msgid "Specify a SRV record."
+ msgstr ""
+
+-#: option.c:376
++#: option.c:393
+ msgid "Display this message. Use --help dhcp for known DHCP options."
+ msgstr ""
+
+-#: option.c:377
++#: option.c:394
+ #, c-format
+ msgid "Specify path of PID file (defaults to %s)."
+ msgstr ""
+
+-#: option.c:378
++#: option.c:395
+ #, c-format
+ msgid "Specify maximum number of DHCP leases (defaults to %s)."
+ msgstr ""
+
+-#: option.c:379
++#: option.c:396
+ msgid "Answer DNS queries based on the interface a query was sent to."
+ msgstr ""
+
+-#: option.c:380
++#: option.c:397
+ msgid "Specify TXT DNS record."
+ msgstr ""
+
+-#: option.c:381
++#: option.c:398
+ msgid "Specify PTR DNS record."
+ msgstr ""
+
+-#: option.c:382
++#: option.c:399
+ msgid "Give DNS name to IPv4 address of interface."
+ msgstr ""
+
+-#: option.c:383
++#: option.c:400
+ msgid "Bind only to interfaces in use."
+ msgstr ""
+
+-#: option.c:384
++#: option.c:401
+ #, c-format
+ msgid "Read DHCP static host information from %s."
+ msgstr ""
+
+-#: option.c:385
++#: option.c:402
+ msgid "Enable the DBus interface for setting upstream servers, etc."
+ msgstr ""
+
+-#: option.c:386
++#: option.c:403
+ msgid "Do not provide DHCP on this interface, only provide DNS."
+ msgstr ""
+
+-#: option.c:387
++#: option.c:404
+ msgid "Enable dynamic address allocation for bootp."
+ msgstr ""
+
+-#: option.c:388
++#: option.c:405
+ msgid "Map MAC address (with wildcards) to option set."
+ msgstr ""
+
+-#: option.c:389
++#: option.c:406
+ msgid "Treat DHCP requests on aliases as arriving from interface."
+ msgstr ""
+
+-#: option.c:390
++#: option.c:407
+ msgid "Disable ICMP echo address checking in the DHCP server."
+ msgstr ""
+
+-#: option.c:391
++#: option.c:408
+ msgid "Shell script to run on DHCP lease creation and destruction."
+ msgstr ""
+
+-#: option.c:392
++#: option.c:409
+ msgid "Lua script to run on DHCP lease creation and destruction."
+ msgstr ""
+
+-#: option.c:393
++#: option.c:410
+ msgid "Run lease-change scripts as this user."
+ msgstr ""
+
+-#: option.c:394
++#: option.c:411
+ msgid "Read configuration from all the files in this directory."
+ msgstr ""
+
+-#: option.c:395
++#: option.c:412
+ msgid "Log to this syslog facility or file. (defaults to DAEMON)"
+ msgstr ""
+
+-#: option.c:396
++#: option.c:413
+ msgid "Do not use leasefile."
+ msgstr ""
+
+-#: option.c:397
++#: option.c:414
+ #, c-format
+ msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
+ msgstr ""
+
+-#: option.c:398
++#: option.c:415
+ #, c-format
+ msgid "Clear DNS cache when reloading %s."
+ msgstr ""
+
+-#: option.c:399
++#: option.c:416
+ msgid "Ignore hostnames provided by DHCP clients."
+ msgstr ""
+
+-#: option.c:400
++#: option.c:417
+ msgid "Do NOT reuse filename and server fields for extra DHCP options."
+ msgstr ""
+
+-#: option.c:401
++#: option.c:418
+ msgid "Enable integrated read-only TFTP server."
+ msgstr ""
+
+-#: option.c:402
++#: option.c:419
+ msgid "Export files by TFTP only from the specified subtree."
+ msgstr ""
+
+-#: option.c:403
++#: option.c:420
+ msgid "Add client IP address to tftp-root."
+ msgstr ""
+
+-#: option.c:404
++#: option.c:421
+ msgid "Allow access only to files owned by the user running dnsmasq."
+ msgstr ""
+
+-#: option.c:405
++#: option.c:422
+ #, c-format
+ msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
+ msgstr ""
+
+-#: option.c:406
++#: option.c:423
+ msgid "Disable the TFTP blocksize extension."
+ msgstr ""
+
+-#: option.c:407
++#: option.c:424
+ msgid "Convert TFTP filenames to lowercase"
+ msgstr ""
+
+-#: option.c:408
++#: option.c:425
+ msgid "Ephemeral port range for use by TFTP transfers."
+ msgstr ""
+
+-#: option.c:409
++#: option.c:426
+ msgid "Extra logging for DHCP."
+ msgstr ""
+
+-#: option.c:410
++#: option.c:427
+ msgid "Enable async. logging; optionally set queue length."
+ msgstr ""
+
+-#: option.c:411
++#: option.c:428
+ msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
+ msgstr ""
+
+-#: option.c:412
++#: option.c:429
+ msgid "Allow rebinding of 127.0.0.0/8, for RBL servers."
+ msgstr ""
+
+-#: option.c:413
++#: option.c:430
+ msgid "Inhibit DNS-rebind protection on this domain."
+ msgstr ""
+
+-#: option.c:414
++#: option.c:431
+ msgid "Always perform DNS queries to all servers."
+ msgstr ""
+
+-#: option.c:415
++#: option.c:432
+ msgid "Set tag if client includes matching option in request."
+ msgstr ""
+
+-#: option.c:416
++#: option.c:433
+ msgid "Use alternative ports for DHCP."
+ msgstr ""
+
+-#: option.c:417
++#: option.c:434
+ msgid "Specify NAPTR DNS record."
+ msgstr ""
+
+-#: option.c:418
++#: option.c:435
+ msgid "Specify lowest port available for DNS query transmission."
+ msgstr ""
+
+-#: option.c:419
++#: option.c:436
+ msgid "Use only fully qualified domain names for DHCP clients."
+ msgstr ""
+
+-#: option.c:420
++#: option.c:437
+ msgid "Generate hostnames based on MAC address for nameless clients."
+ msgstr ""
+
+-#: option.c:421
++#: option.c:438
+ msgid "Use these DHCP relays as full proxies."
+ msgstr ""
+
+-#: option.c:422
++#: option.c:439
+ msgid "Relay DHCP requests to a remote server"
+ msgstr ""
+
+-#: option.c:423
++#: option.c:440
+ msgid "Specify alias name for LOCAL DNS name."
+ msgstr ""
+
+-#: option.c:424
++#: option.c:441
+ msgid "Prompt to send to PXE clients."
+ msgstr ""
+
+-#: option.c:425
++#: option.c:442
+ msgid "Boot service for PXE menu."
+ msgstr ""
+
+-#: option.c:426
++#: option.c:443
+ msgid "Check configuration syntax."
+ msgstr ""
+
+-#: option.c:427
++#: option.c:444
+ msgid "Add requestor's MAC address to forwarded DNS queries."
+ msgstr ""
+
+-#: option.c:428
++#: option.c:445
+ msgid "Add requestor's IP subnet to forwarded DNS queries."
+ msgstr ""
+
+-#: option.c:429
++#: option.c:446
+ msgid "Proxy DNSSEC validation results from upstream nameservers."
+ msgstr ""
+
+-#: option.c:430
++#: option.c:447
+ msgid "Attempt to allocate sequential IP addresses to DHCP clients."
+ msgstr ""
+
+-#: option.c:431
++#: option.c:448
+ msgid "Copy connection-track mark from queries to upstream connections."
+ msgstr ""
+
+-#: option.c:432
++#: option.c:449
+ msgid "Allow DHCP clients to do their own DDNS updates."
+ msgstr ""
+
+-#: option.c:433
++#: option.c:450
+ msgid "Send router-advertisements for interfaces doing DHCPv6"
+ msgstr ""
+
+-#: option.c:434
++#: option.c:451
+ msgid "Specify DUID_EN-type DHCPv6 server DUID"
+ msgstr ""
+
+-#: option.c:435
++#: option.c:452
+ msgid "Specify host (A/AAAA and PTR) records"
+ msgstr ""
+
+-#: option.c:436
++#: option.c:453
+ msgid "Specify arbitrary DNS resource record"
+ msgstr ""
+
+-#: option.c:437
++#: option.c:454
+ msgid "Bind to interfaces in use - check for new interfaces"
+ msgstr ""
+
+-#: option.c:438
++#: option.c:455
+ msgid "Export local names to global DNS"
+ msgstr ""
+
+-#: option.c:439
++#: option.c:456
+ msgid "Domain to export to global DNS"
+ msgstr ""
+
+-#: option.c:440
++#: option.c:457
+ msgid "Set TTL for authoritative replies"
+ msgstr ""
+
+-#: option.c:441
++#: option.c:458
+ msgid "Set authoritive zone information"
+ msgstr ""
+
+-#: option.c:442
++#: option.c:459
+ msgid "Secondary authoritative nameservers for forward domains"
+ msgstr ""
+
+-#: option.c:443
++#: option.c:460
+ msgid "Peers which are allowed to do zone transfer"
+ msgstr ""
+
+-#: option.c:444
++#: option.c:461
+ msgid "Specify ipsets to which matching domains should be added"
+ msgstr ""
+
+-#: option.c:445
++#: option.c:462
+ msgid "Specify a domain and address range for synthesised names"
+ msgstr ""
+
+-#: option.c:446
++#: option.c:463
+ msgid "Activate DNSSEC validation"
+ msgstr ""
+
+-#: option.c:447
++#: option.c:464
+ msgid "Specify trust anchor key digest."
+ msgstr ""
+
+-#: option.c:448
++#: option.c:465
+ msgid "Disable upstream checking for DNSSEC debugging."
+ msgstr ""
+
+-#: option.c:449
++#: option.c:466
+ msgid "Ensure answers without DNSSEC are in unsigned zones."
+ msgstr ""
+
+-#: option.c:450
++#: option.c:467
+ msgid "Don't check DNSSEC signature timestamps until first cache-reload"
+ msgstr ""
+
+-#: option.c:452
++#: option.c:468
++msgid "Timestamp file to verify system clock for DNSSEC"
++msgstr ""
++
++#: option.c:470
+ msgid "Specify DHCPv6 prefix class"
+ msgstr ""
+
+-#: option.c:454
++#: option.c:472
+ msgid "Set priority, resend-interval and router-lifetime"
+ msgstr ""
+
+-#: option.c:455
++#: option.c:473
+ msgid "Do not log routine DHCP."
+ msgstr ""
+
+-#: option.c:456
++#: option.c:474
+ msgid "Do not log routine DHCPv6."
+ msgstr ""
+
+-#: option.c:457
++#: option.c:475
+ msgid "Do not log RA."
+ msgstr ""
+
+-#: option.c:458
++#: option.c:476
+ msgid "Accept queries only from directly-connected networks"
+ msgstr ""
+
+-#: option.c:459
++#: option.c:477
+ msgid "Detect and remove DNS forwarding loops"
+ msgstr ""
+
+-#: option.c:661
++#: option.c:478
++msgid "Ignore DNS responses containing ipaddr."
++msgstr ""
++
++#: option.c:680
+ #, c-format
+ msgid ""
+ "Usage: dnsmasq [options]\n"
+ "\n"
+ msgstr ""
+
+-#: option.c:663
++#: option.c:682
+ #, c-format
+ msgid "Use short options only on the command line.\n"
+ msgstr ""
+
+-#: option.c:665
++#: option.c:684
+ #, c-format
+ msgid "Valid options are:\n"
+ msgstr ""
+
+-#: option.c:722 option.c:726
++#: option.c:741 option.c:745
+ msgid "bad port"
+ msgstr ""
+
+-#: option.c:753 option.c:785
++#: option.c:772 option.c:804
+ msgid "interface binding not supported"
+ msgstr ""
+
+-#: option.c:762 option.c:3494
++#: option.c:781 option.c:3570
+ msgid "bad interface name"
+ msgstr ""
+
+-#: option.c:792
++#: option.c:811
+ msgid "bad address"
+ msgstr ""
+
+-#: option.c:974
++#: option.c:993
+ msgid "unsupported encapsulation for IPv6 option"
+ msgstr ""
+
+-#: option.c:988
++#: option.c:1007
+ msgid "bad dhcp-option"
+ msgstr ""
+
+-#: option.c:1056
++#: option.c:1075
+ msgid "bad IP address"
+ msgstr ""
+
+-#: option.c:1059 option.c:1197 option.c:2812
++#: option.c:1078 option.c:1216 option.c:2888
+ msgid "bad IPv6 address"
+ msgstr ""
+
+-#: option.c:1224 option.c:1318
++#: option.c:1243 option.c:1337
+ msgid "bad domain in dhcp-option"
+ msgstr ""
+
+-#: option.c:1356
++#: option.c:1375
+ msgid "dhcp-option too long"
+ msgstr ""
+
+-#: option.c:1363
++#: option.c:1382
+ msgid "illegal dhcp-match"
+ msgstr ""
+
+-#: option.c:1425
++#: option.c:1444
+ msgid "illegal repeated flag"
+ msgstr ""
+
+-#: option.c:1433
++#: option.c:1452
+ msgid "illegal repeated keyword"
+ msgstr ""
+
+-#: option.c:1495 option.c:4092
++#: option.c:1517 option.c:4186
+ #, c-format
+ msgid "cannot access directory %s: %s"
+ msgstr ""
+
+-#: option.c:1541 tftp.c:493
++#: option.c:1563 tftp.c:493
+ #, c-format
+ msgid "cannot access %s: %s"
+ msgstr ""
+
+-#: option.c:1588
++#: option.c:1615
+ msgid "setting log facility is not possible under Android"
+ msgstr ""
+
+-#: option.c:1597
++#: option.c:1624
+ msgid "bad log facility"
+ msgstr ""
+
+-#: option.c:1650
++#: option.c:1677
+ msgid "bad MX preference"
+ msgstr ""
+
+-#: option.c:1655
++#: option.c:1682
+ msgid "bad MX name"
+ msgstr ""
+
+-#: option.c:1669
++#: option.c:1696
+ msgid "bad MX target"
+ msgstr ""
+
+-#: option.c:1681
++#: option.c:1708
+ msgid "cannot run scripts under uClinux"
+ msgstr ""
+
+-#: option.c:1683
++#: option.c:1710
+ msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts"
+ msgstr ""
+
+-#: option.c:1687
++#: option.c:1714
+ msgid "recompile with HAVE_LUASCRIPT defined to enable Lua scripts"
+ msgstr ""
+
+-#: option.c:1928 option.c:1966 option.c:2015
++#: option.c:1970 option.c:2015 option.c:2071
+ msgid "bad prefix"
+ msgstr ""
+
+-#: option.c:2289
++#: option.c:2352
+ msgid "recompile with HAVE_IPSET defined to enable ipset directives"
+ msgstr ""
+
+-#: option.c:2469
++#: option.c:2545
+ msgid "bad port range"
+ msgstr ""
+
+-#: option.c:2485
++#: option.c:2561
+ msgid "bad bridge-interface"
+ msgstr ""
+
+-#: option.c:2545
++#: option.c:2621
+ msgid "only one tag allowed"
+ msgstr ""
+
+-#: option.c:2565 option.c:2577 option.c:2683 option.c:2724
++#: option.c:2641 option.c:2653 option.c:2759 option.c:2800
+ msgid "bad dhcp-range"
+ msgstr ""
+
+-#: option.c:2592
++#: option.c:2668
+ msgid "inconsistent DHCP range"
+ msgstr ""
+
+-#: option.c:2651
++#: option.c:2727
+ msgid "prefix length must be exactly 64 for RA subnets"
+ msgstr ""
+
+-#: option.c:2653
++#: option.c:2729
+ msgid "prefix length must be exactly 64 for subnet constructors"
+ msgstr ""
+
+-#: option.c:2657
++#: option.c:2733
+ msgid "prefix length must be at least 64"
+ msgstr ""
+
+-#: option.c:2660
++#: option.c:2736
+ msgid "inconsistent DHCPv6 range"
+ msgstr ""
+
+-#: option.c:2671
++#: option.c:2747
+ msgid "prefix must be zero with \"constructor:\" argument"
+ msgstr ""
+
+-#: option.c:2782 option.c:2830
++#: option.c:2858 option.c:2906
+ msgid "bad hex constant"
+ msgstr ""
+
+-#: option.c:2804
++#: option.c:2880
+ msgid "cannot match tags in --dhcp-host"
+ msgstr ""
+
+-#: option.c:2852
++#: option.c:2928
+ #, c-format
+ msgid "duplicate dhcp-host IP address %s"
+ msgstr ""
+
+-#: option.c:2910
++#: option.c:2986
+ msgid "bad DHCP host name"
+ msgstr ""
+
+-#: option.c:2992
++#: option.c:3068
+ msgid "bad tag-if"
+ msgstr ""
+
+-#: option.c:3316 option.c:3710
++#: option.c:3392 option.c:3786
+ msgid "invalid port number"
+ msgstr ""
+
+-#: option.c:3378
++#: option.c:3454
+ msgid "bad dhcp-proxy address"
+ msgstr ""
+
+-#: option.c:3404
++#: option.c:3480
+ msgid "Bad dhcp-relay"
+ msgstr ""
+
+-#: option.c:3430
++#: option.c:3506
+ msgid "bad RA-params"
+ msgstr ""
+
+-#: option.c:3439
++#: option.c:3515
+ msgid "bad DUID"
+ msgstr ""
+
+-#: option.c:3481
++#: option.c:3557
+ msgid "invalid alias range"
+ msgstr ""
+
+-#: option.c:3535
++#: option.c:3611
+ msgid "bad CNAME"
+ msgstr ""
+
+-#: option.c:3540
++#: option.c:3616
+ msgid "duplicate CNAME"
+ msgstr ""
+
+-#: option.c:3560
++#: option.c:3636
+ msgid "bad PTR record"
+ msgstr ""
+
+-#: option.c:3591
++#: option.c:3667
+ msgid "bad NAPTR record"
+ msgstr ""
+
+-#: option.c:3625
++#: option.c:3701
+ msgid "bad RR record"
+ msgstr ""
+
+-#: option.c:3655
++#: option.c:3731
+ msgid "bad TXT record"
+ msgstr ""
+
+-#: option.c:3696
++#: option.c:3772
+ msgid "bad SRV record"
+ msgstr ""
+
+-#: option.c:3703
++#: option.c:3779
+ msgid "bad SRV target"
+ msgstr ""
+
+-#: option.c:3717
++#: option.c:3793
+ msgid "invalid priority"
+ msgstr ""
+
+-#: option.c:3724
++#: option.c:3800
+ msgid "invalid weight"
+ msgstr ""
+
+-#: option.c:3748
++#: option.c:3824
+ msgid "Bad host-record"
+ msgstr ""
+
+-#: option.c:3765
++#: option.c:3841
+ msgid "Bad name in host-record"
+ msgstr ""
+
+-#: option.c:3826
++#: option.c:3906
+ msgid "bad trust anchor"
+ msgstr ""
+
+-#: option.c:3840
++#: option.c:3920
+ msgid "bad HEX in trust anchor"
+ msgstr ""
+
+-#: option.c:3850
++#: option.c:3930
+ msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DNSSEC/DBus support)"
+ msgstr ""
+
+-#: option.c:3909
++#: option.c:3989
+ msgid "missing \""
+ msgstr ""
+
+-#: option.c:3966
++#: option.c:4046
+ msgid "bad option"
+ msgstr ""
+
+-#: option.c:3968
++#: option.c:4048
+ msgid "extraneous parameter"
+ msgstr ""
+
+-#: option.c:3970
++#: option.c:4050
+ msgid "missing parameter"
+ msgstr ""
+
+-#: option.c:3972
++#: option.c:4052
+ msgid "illegal option"
+ msgstr ""
+
+-#: option.c:3979
++#: option.c:4059
+ msgid "error"
+ msgstr ""
+
+-#: option.c:3981
++#: option.c:4061
+ #, c-format
+ msgid " at line %d of %s"
+ msgstr ""
+
+-#: option.c:4045 option.c:4168 tftp.c:667
++#: option.c:4076 option.c:4323 option.c:4359
+ #, c-format
+-msgid "cannot read %s: %s"
++msgid "read %s"
+ msgstr ""
+
+-#: option.c:4229 option.c:4265
++#: option.c:4139 option.c:4262 tftp.c:667
+ #, c-format
+-msgid "read %s"
++msgid "cannot read %s: %s"
+ msgstr ""
+
+-#: option.c:4331
++#: option.c:4425
+ msgid "junk found in command line"
+ msgstr ""
+
+-#: option.c:4366
++#: option.c:4460
+ #, c-format
+ msgid "Dnsmasq version %s %s\n"
+ msgstr ""
+
+-#: option.c:4367
++#: option.c:4461
+ #, c-format
+ msgid ""
+ "Compile time options: %s\n"
+ "\n"
+ msgstr ""
+
+-#: option.c:4368
++#: option.c:4462
+ #, c-format
+ msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
+ msgstr ""
+
+-#: option.c:4369
++#: option.c:4463
+ #, c-format
+ msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
+ msgstr ""
+
+-#: option.c:4370
++#: option.c:4464
+ #, c-format
+ msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
+ msgstr ""
+
+-#: option.c:4381
++#: option.c:4475
+ msgid "try --help"
+ msgstr ""
+
+-#: option.c:4383
++#: option.c:4477
+ msgid "try -w"
+ msgstr ""
+
+-#: option.c:4385
++#: option.c:4479
+ #, c-format
+ msgid "bad command line options: %s"
+ msgstr ""
+
+-#: option.c:4434
++#: option.c:4535
+ #, c-format
+ msgid "cannot get host-name: %s"
+ msgstr ""
+
+-#: option.c:4462
++#: option.c:4563
+ msgid "only one resolv.conf file allowed in no-poll mode."
+ msgstr ""
+
+-#: option.c:4472
++#: option.c:4573
+ msgid "must have exactly one resolv.conf to read domain from."
+ msgstr ""
+
+-#: option.c:4475 network.c:1506 dhcp.c:769
++#: option.c:4576 network.c:1506 dhcp.c:774
+ #, c-format
+ msgid "failed to read %s: %s"
+ msgstr ""
+
+-#: option.c:4492
++#: option.c:4593
+ #, c-format
+ msgid "no search directive found in %s"
+ msgstr ""
+
+-#: option.c:4513
++#: option.c:4614
+ msgid "there must be a default domain when --dhcp-fqdn is set"
+ msgstr ""
+
+-#: option.c:4522
++#: option.c:4623
+ msgid "syntax check OK"
+ msgstr ""
+
+-#: forward.c:114
++#: forward.c:111
+ #, c-format
+ msgid "failed to send packet: %s"
+ msgstr ""
+
+-#: forward.c:574
++#: forward.c:572
+ msgid "discarding DNS reply: subnet option mismatch"
+ msgstr ""
+
+-#: forward.c:597
++#: forward.c:595
+ #, c-format
+ msgid "nameserver %s refused to do a recursive query"
+ msgstr ""
+
+-#: forward.c:629
++#: forward.c:627
+ #, c-format
+ msgid "possible DNS-rebind attack detected: %s"
+ msgstr ""
+
+-#: forward.c:1132 forward.c:1663
++#: forward.c:1156 forward.c:1722
+ msgid "Ignoring query from non-local network"
+ msgstr ""
+
+-#: forward.c:2101
++#: forward.c:2178
+ #, c-format
+ msgid "Maximum number of concurrent DNS queries reached (max: %d)"
+ msgstr ""
+@@ -1180,263 +1208,276 @@ msgstr ""
+ msgid "using nameserver %s#%d"
+ msgstr ""
+
+-#: dnsmasq.c:154
+-msgid "No trust anchors provided for DNSSEC"
++#: dnsmasq.c:149
++msgid "dhcp-hostsdir, dhcp-optsdir and hostsdir are not supported on this platform"
+ msgstr ""
+
+-#: dnsmasq.c:157
+-msgid "Cannot reduce cache size from default when DNSSEC enabled"
++#: dnsmasq.c:156
++msgid "no trust anchors provided for DNSSEC"
+ msgstr ""
+
+ #: dnsmasq.c:159
++msgid "cannot reduce cache size from default when DNSSEC enabled"
++msgstr ""
++
++#: dnsmasq.c:161
+ msgid "DNSSEC not available: set HAVE_DNSSEC in src/config.h"
+ msgstr ""
+
+-#: dnsmasq.c:165
++#: dnsmasq.c:167
+ msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
+ msgstr ""
+
+-#: dnsmasq.c:170
+-msgid "Cannot use --conntrack AND --query-port"
++#: dnsmasq.c:172
++msgid "cannot use --conntrack AND --query-port"
+ msgstr ""
+
+-#: dnsmasq.c:173
+-msgid "Conntrack support not available: set HAVE_CONNTRACK in src/config.h"
++#: dnsmasq.c:175
++msgid "conntrack support not available: set HAVE_CONNTRACK in src/config.h"
+ msgstr ""
+
+-#: dnsmasq.c:178
++#: dnsmasq.c:180
+ msgid "asychronous logging is not available under Solaris"
+ msgstr ""
+
+-#: dnsmasq.c:183
++#: dnsmasq.c:185
+ msgid "asychronous logging is not available under Android"
+ msgstr ""
+
+-#: dnsmasq.c:188
++#: dnsmasq.c:190
+ msgid "authoritative DNS not available: set HAVE_AUTH in src/config.h"
+ msgstr ""
+
+-#: dnsmasq.c:193
+-msgid "Loop detection not available: set HAVE_LOOP in src/config.h"
++#: dnsmasq.c:195
++msgid "loop detection not available: set HAVE_LOOP in src/config.h"
+ msgstr ""
+
+-#: dnsmasq.c:201
++#: dnsmasq.c:203
+ msgid "zone serial must be configured in --auth-soa"
+ msgstr ""
+
+-#: dnsmasq.c:219
++#: dnsmasq.c:221
+ msgid "dhcp-range constructor not available on this platform"
+ msgstr ""
+
+-#: dnsmasq.c:262
++#: dnsmasq.c:264
+ msgid "cannot set --bind-interfaces and --bind-dynamic"
+ msgstr ""
+
+-#: dnsmasq.c:265
++#: dnsmasq.c:267
+ #, c-format
+ msgid "failed to find list of interfaces: %s"
+ msgstr ""
+
+-#: dnsmasq.c:274
++#: dnsmasq.c:276
+ #, c-format
+ msgid "unknown interface %s"
+ msgstr ""
+
+-#: dnsmasq.c:330 dnsmasq.c:954
++#: dnsmasq.c:340 dnsmasq.c:1004
+ #, c-format
+ msgid "DBus error: %s"
+ msgstr ""
+
+-#: dnsmasq.c:333
++#: dnsmasq.c:343
+ msgid "DBus not available: set HAVE_DBUS in src/config.h"
+ msgstr ""
+
+-#: dnsmasq.c:361
++#: dnsmasq.c:371
+ #, c-format
+ msgid "unknown user or group: %s"
+ msgstr ""
+
+-#: dnsmasq.c:416
++#: dnsmasq.c:426
+ #, c-format
+ msgid "cannot chdir to filesystem root: %s"
+ msgstr ""
+
+-#: dnsmasq.c:653
++#: dnsmasq.c:667
+ #, c-format
+ msgid "started, version %s DNS disabled"
+ msgstr ""
+
+-#: dnsmasq.c:655
++#: dnsmasq.c:669
+ #, c-format
+ msgid "started, version %s cachesize %d"
+ msgstr ""
+
+-#: dnsmasq.c:657
++#: dnsmasq.c:671
+ #, c-format
+ msgid "started, version %s cache disabled"
+ msgstr ""
+
+-#: dnsmasq.c:659
++#: dnsmasq.c:673
+ #, c-format
+ msgid "compile time options: %s"
+ msgstr ""
+
+-#: dnsmasq.c:665
++#: dnsmasq.c:679
+ msgid "DBus support enabled: connected to system bus"
+ msgstr ""
+
+-#: dnsmasq.c:667
++#: dnsmasq.c:681
+ msgid "DBus support enabled: bus connection pending"
+ msgstr ""
+
+-#: dnsmasq.c:672
++#: dnsmasq.c:686
+ msgid "DNS service limited to local subnets"
+ msgstr ""
+
+-#: dnsmasq.c:677
++#: dnsmasq.c:702
+ msgid "DNSSEC validation enabled"
+ msgstr ""
+
+-#: dnsmasq.c:679
++#: dnsmasq.c:705
+ msgid "DNSSEC signature timestamps not checked until first cache reload"
+ msgstr ""
+
+-#: dnsmasq.c:684
++#: dnsmasq.c:708
++msgid "DNSSEC signature timestamps not checked until system time valid"
++msgstr ""
++
++#: dnsmasq.c:713
+ #, c-format
+ msgid "warning: failed to change owner of %s: %s"
+ msgstr ""
+
+-#: dnsmasq.c:688
++#: dnsmasq.c:717
+ msgid "setting --bind-interfaces option because of OS limitations"
+ msgstr ""
+
+-#: dnsmasq.c:698
++#: dnsmasq.c:727
+ #, c-format
+ msgid "warning: interface %s does not currently exist"
+ msgstr ""
+
+-#: dnsmasq.c:703
++#: dnsmasq.c:732
+ msgid "warning: ignoring resolv-file flag because no-resolv is set"
+ msgstr ""
+
+-#: dnsmasq.c:706
++#: dnsmasq.c:735
+ msgid "warning: no upstream servers configured"
+ msgstr ""
+
+-#: dnsmasq.c:710
++#: dnsmasq.c:739
+ #, c-format
+ msgid "asynchronous logging enabled, queue limit is %d messages"
+ msgstr ""
+
+-#: dnsmasq.c:731
++#: dnsmasq.c:760
+ msgid "IPv6 router advertisement enabled"
+ msgstr ""
+
+-#: dnsmasq.c:736
++#: dnsmasq.c:765
+ #, c-format
+ msgid "DHCP, sockets bound exclusively to interface %s"
+ msgstr ""
+
+-#: dnsmasq.c:753
++#: dnsmasq.c:782
+ msgid "root is "
+ msgstr ""
+
+-#: dnsmasq.c:753
++#: dnsmasq.c:782
+ msgid "enabled"
+ msgstr ""
+
+-#: dnsmasq.c:755
++#: dnsmasq.c:784
+ msgid "secure mode"
+ msgstr ""
+
+-#: dnsmasq.c:781
++#: dnsmasq.c:810
+ #, c-format
+ msgid "restricting maximum simultaneous TFTP transfers to %d"
+ msgstr ""
+
+-#: dnsmasq.c:956
++#: dnsmasq.c:1006
+ msgid "connected to system DBus"
+ msgstr ""
+
+-#: dnsmasq.c:1106
++#: dnsmasq.c:1156
+ #, c-format
+ msgid "cannot fork into background: %s"
+ msgstr ""
+
+-#: dnsmasq.c:1109
++#: dnsmasq.c:1159
+ #, c-format
+ msgid "failed to create helper: %s"
+ msgstr ""
+
+-#: dnsmasq.c:1112
++#: dnsmasq.c:1162
+ #, c-format
+ msgid "setting capabilities failed: %s"
+ msgstr ""
+
+-#: dnsmasq.c:1115
++#: dnsmasq.c:1165
+ #, c-format
+ msgid "failed to change user-id to %s: %s"
+ msgstr ""
+
+-#: dnsmasq.c:1118
++#: dnsmasq.c:1168
+ #, c-format
+ msgid "failed to change group-id to %s: %s"
+ msgstr ""
+
+-#: dnsmasq.c:1121
++#: dnsmasq.c:1171
+ #, c-format
+ msgid "failed to open pidfile %s: %s"
+ msgstr ""
+
+-#: dnsmasq.c:1124
++#: dnsmasq.c:1174
+ #, c-format
+ msgid "cannot open log %s: %s"
+ msgstr ""
+
+-#: dnsmasq.c:1127
++#: dnsmasq.c:1177
+ #, c-format
+ msgid "failed to load Lua script: %s"
+ msgstr ""
+
+-#: dnsmasq.c:1130
++#: dnsmasq.c:1180
+ #, c-format
+ msgid "TFTP directory %s inaccessible: %s"
+ msgstr ""
+
+-#: dnsmasq.c:1151
++#: dnsmasq.c:1183
++#, c-format
++msgid "cannot create timestamp file %s: %s"
++msgstr ""
++
++#: dnsmasq.c:1204
+ msgid "now checking DNSSEC signature timestamps"
+ msgstr ""
+
+-#: dnsmasq.c:1218
++#: dnsmasq.c:1271
+ #, c-format
+ msgid "script process killed by signal %d"
+ msgstr ""
+
+-#: dnsmasq.c:1222
++#: dnsmasq.c:1275
+ #, c-format
+ msgid "script process exited with status %d"
+ msgstr ""
+
+-#: dnsmasq.c:1226
++#: dnsmasq.c:1279
+ #, c-format
+ msgid "failed to execute %s: %s"
+ msgstr ""
+
+-#: dnsmasq.c:1281
++#: dnsmasq.c:1334
+ msgid "exiting on receipt of SIGTERM"
+ msgstr ""
+
+-#: dnsmasq.c:1309
++#: dnsmasq.c:1362
+ #, c-format
+ msgid "failed to access %s: %s"
+ msgstr ""
+
+-#: dnsmasq.c:1339
++#: dnsmasq.c:1392
+ #, c-format
+ msgid "reading %s"
+ msgstr ""
+
+-#: dnsmasq.c:1350
++#: dnsmasq.c:1403
+ #, c-format
+ msgid "no servers found in %s, will retry"
+ msgstr ""
+@@ -1476,27 +1517,27 @@ msgstr ""
+ msgid "DHCP packet received on %s which has no address"
+ msgstr ""
+
+-#: dhcp.c:408
++#: dhcp.c:412
+ #, c-format
+ msgid "ARP-cache injection failed: %s"
+ msgstr ""
+
+-#: dhcp.c:506
++#: dhcp.c:511
+ #, c-format
+ msgid "DHCP range %s -- %s is not consistent with netmask %s"
+ msgstr ""
+
+-#: dhcp.c:807
++#: dhcp.c:812
+ #, c-format
+ msgid "bad line at %s line %d"
+ msgstr ""
+
+-#: dhcp.c:850
++#: dhcp.c:855
+ #, c-format
+ msgid "ignoring %s line %d, duplicate name or IP address"
+ msgstr ""
+
+-#: dhcp.c:994 rfc3315.c:2089
++#: dhcp.c:999 rfc3315.c:2139
+ #, c-format
+ msgid "DHCP relay %s -> %s"
+ msgstr ""
+@@ -1567,12 +1608,12 @@ msgstr ""
+ msgid "disabled"
+ msgstr ""
+
+-#: rfc2131.c:539 rfc2131.c:967 rfc2131.c:1385 rfc3315.c:602 rfc3315.c:823
+-#: rfc3315.c:1095
++#: rfc2131.c:539 rfc2131.c:967 rfc2131.c:1385 rfc3315.c:603 rfc3315.c:860
++#: rfc3315.c:1139
+ msgid "ignored"
+ msgstr ""
+
+-#: rfc2131.c:554 rfc2131.c:1205 rfc3315.c:873
++#: rfc2131.c:554 rfc2131.c:1205 rfc3315.c:910
+ msgid "address in use"
+ msgstr ""
+
+@@ -1592,7 +1633,7 @@ msgstr ""
+ msgid "no leases left"
+ msgstr ""
+
+-#: rfc2131.c:691 rfc3315.c:475
++#: rfc2131.c:691 rfc3315.c:476
+ #, c-format
+ msgid "%u client provides name: %s"
+ msgstr ""
+@@ -1601,7 +1642,7 @@ msgstr ""
+ msgid "PXE BIS not supported"
+ msgstr ""
+
+-#: rfc2131.c:935 rfc3315.c:1189
++#: rfc2131.c:935 rfc3315.c:1233
+ #, c-format
+ msgid "disabling DHCP static address %s for %s"
+ msgstr ""
+@@ -1637,7 +1678,7 @@ msgstr ""
+ msgid "wrong address"
+ msgstr ""
+
+-#: rfc2131.c:1143 rfc3315.c:969
++#: rfc2131.c:1143 rfc3315.c:1006
+ msgid "lease not found"
+ msgstr ""
+
+@@ -1687,7 +1728,7 @@ msgstr ""
+ msgid "PXE menu too large"
+ msgstr ""
+
+-#: rfc2131.c:2173 rfc3315.c:1456
++#: rfc2131.c:2173 rfc3315.c:1506
+ #, c-format
+ msgid "%u requested options: %s"
+ msgstr ""
+@@ -1702,7 +1743,7 @@ msgstr ""
+ msgid "cannot create netlink socket: %s"
+ msgstr ""
+
+-#: netlink.c:347
++#: netlink.c:348
+ #, c-format
+ msgid "netlink returns error: %s"
+ msgstr ""
+@@ -1820,62 +1861,62 @@ msgstr ""
+ msgid "%u available DHCPv6 subnet: %s/%d"
+ msgstr ""
+
+-#: rfc3315.c:379
++#: rfc3315.c:380
+ #, c-format
+ msgid "%u vendor class: %u"
+ msgstr ""
+
+-#: rfc3315.c:427
++#: rfc3315.c:428
+ #, c-format
+ msgid "%u client MAC address: %s"
+ msgstr ""
+
+-#: rfc3315.c:659
++#: rfc3315.c:660
+ #, c-format
+ msgid "unknown prefix-class %d"
+ msgstr ""
+
+-#: rfc3315.c:791 rfc3315.c:913
+-msgid "success"
++#: rfc3315.c:803 rfc3315.c:902
++msgid "address unavailable"
+ msgstr ""
+
+-#: rfc3315.c:806 rfc3315.c:808 rfc3315.c:921 rfc3315.c:923
+-msgid "no addresses available"
++#: rfc3315.c:815 rfc3315.c:950 rfc3315.c:1283
++msgid "success"
+ msgstr ""
+
+-#: rfc3315.c:865
+-msgid "address unavailable"
++#: rfc3315.c:843 rfc3315.c:845 rfc3315.c:958 rfc3315.c:960
++msgid "no addresses available"
+ msgstr ""
+
+-#: rfc3315.c:900
++#: rfc3315.c:937
+ msgid "not on link"
+ msgstr ""
+
+-#: rfc3315.c:973 rfc3315.c:1151 rfc3315.c:1228
++#: rfc3315.c:1010 rfc3315.c:1195 rfc3315.c:1272
+ msgid "no binding found"
+ msgstr ""
+
+-#: rfc3315.c:1011
++#: rfc3315.c:1048
+ msgid "deprecated"
+ msgstr ""
+
+-#: rfc3315.c:1016
++#: rfc3315.c:1053
+ msgid "address invalid"
+ msgstr ""
+
+-#: rfc3315.c:1061
++#: rfc3315.c:1100
+ msgid "confirm failed"
+ msgstr ""
+
+-#: rfc3315.c:1072
++#: rfc3315.c:1116
+ msgid "all addresses still on link"
+ msgstr ""
+
+-#: rfc3315.c:1160
++#: rfc3315.c:1204
+ msgid "release received"
+ msgstr ""
+
+-#: rfc3315.c:2080
++#: rfc3315.c:2130
+ msgid "Cannot multicast to DHCPv6 server without correct interface"
+ msgstr ""
+
+@@ -1968,7 +2009,7 @@ msgstr ""
+ msgid "cannot create ICMPv6 socket: %s"
+ msgstr ""
+
+-#: auth.c:429
++#: auth.c:436
+ #, c-format
+ msgid "ignoring zone transfer request from %s"
+ msgstr ""
+@@ -1983,50 +2024,85 @@ msgstr ""
+ msgid "failed to create IPset control socket: %s"
+ msgstr ""
+
++#: dnssec.c:425 dnssec.c:469
++#, c-format
++msgid "failed to update mtime on %s: %s"
++msgstr ""
++
+ #: blockdata.c:58
+ #, c-format
+ msgid "DNSSEC memory in use %u, max %u, allocated %u"
+ msgstr ""
+
+-#: tables.c:76
++#: tables.c:80
+ msgid "error: fill_addr missused"
+ msgstr ""
+
+-#: tables.c:105
++#: tables.c:109
+ #, c-format
+ msgid "failed to access pf devices: %s"
+ msgstr ""
+
+-#: tables.c:119
++#: tables.c:123
+ #, c-format
+ msgid "warning: no opened pf devices %s"
+ msgstr ""
+
+-#: tables.c:127
++#: tables.c:131
+ #, c-format
+ msgid "error: cannot use table name %s"
+ msgstr ""
+
+-#: tables.c:135
++#: tables.c:139
+ #, c-format
+ msgid "error: cannot strlcpy table name %s"
+ msgstr ""
+
+-#: tables.c:141
++#: tables.c:145
+ #, c-format
+ msgid "warning: pfr_add_tables: %s(%d)"
+ msgstr ""
+
+-#: tables.c:147
++#: tables.c:151
+ msgid "info: table created"
+ msgstr ""
+
+-#: tables.c:158
++#: tables.c:162
+ #, c-format
+ msgid "warning: DIOCR%sADDRS: %s"
+ msgstr ""
+
+-#: tables.c:162
++#: tables.c:166
+ #, c-format
+ msgid "%d addresses %s"
+ msgstr ""
++
++#: inotify.c:46
++#, c-format
++msgid "failed to create inotify: %s"
++msgstr ""
++
++#: inotify.c:60
++#, c-format
++msgid "cannot cannonicalise resolv-file %s: %s"
++msgstr ""
++
++#: inotify.c:72
++#, c-format
++msgid "directory %s for resolv-file is missing, cannot poll"
++msgstr ""
++
++#: inotify.c:75 inotify.c:112
++#, c-format
++msgid "failed to create inotify for %s: %s"
++msgstr ""
++
++#: inotify.c:97
++#, c-format
++msgid "bad dynamic directory %s: %s"
++msgstr ""
++
++#: inotify.c:197
++#, c-format
++msgid "inotify, new or changed file %s"
++msgstr ""
+diff --git a/po/no.po b/po/no.po
+index ff7eaad9cad1..c2e7067d2304 100644
+--- a/po/no.po
++++ b/po/no.po
+@@ -18,70 +18,70 @@ msgstr ""
+ "Content-Transfer-Encoding: 8bit\n"
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+-#: cache.c:505
++#: cache.c:523
+ msgid "Internal error in cache."
+ msgstr ""
+
+-#: cache.c:908
++#: cache.c:941
+ #, fuzzy, c-format
+ msgid "failed to load names from %s: %s"
+ msgstr "feilet å laste navn fra %s: %s"
+
+-#: cache.c:934 dhcp.c:820
++#: cache.c:967 dhcp.c:825
+ #, c-format
+ msgid "bad address at %s line %d"
+ msgstr "dårlig adresse ved %s linje %d"
+
+-#: cache.c:985 dhcp.c:836
++#: cache.c:1018 dhcp.c:841
+ #, c-format
+ msgid "bad name at %s line %d"
+ msgstr "dårlig navn ved %s linje %d"
+
+-#: cache.c:992 dhcp.c:911
++#: cache.c:1027 dhcp.c:916
+ #, c-format
+ msgid "read %s - %d addresses"
+ msgstr "les %s - %d adresser"
+
+-#: cache.c:1100
++#: cache.c:1135
+ msgid "cleared cache"
+ msgstr "mellomlager tømt"
+
+-#: cache.c:1123
++#: cache.c:1164
+ #, c-format
+ msgid "No IPv4 address found for %s"
+ msgstr ""
+
+-#: cache.c:1201
++#: cache.c:1242
+ #, c-format
+ msgid "%s is a CNAME, not giving it to the DHCP lease of %s"
+ msgstr ""
+
+-#: cache.c:1225
++#: cache.c:1266
+ #, c-format
+ msgid "not giving name %s to the DHCP lease of %s because the name exists in %s with address %s"
+ msgstr "gir ikke navnet %s til DHCP leien for %s fordi navnet eksisterer i %s med adressen %s"
+
+-#: cache.c:1366
++#: cache.c:1421
+ #, c-format
+ msgid "time %lu"
+ msgstr ""
+
+-#: cache.c:1367
++#: cache.c:1422
+ #, fuzzy, c-format
+ msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
+ msgstr "mellomlager størrelse %d, %d/%d mellomlager innsettinger re-bruker mellomlager plasser som ikke er utløpt"
+
+-#: cache.c:1369
++#: cache.c:1424
+ #, c-format
+ msgid "queries forwarded %u, queries answered locally %u"
+ msgstr ""
+
+-#: cache.c:1372
++#: cache.c:1427
+ #, c-format
+ msgid "queries for authoritative zones %u"
+ msgstr ""
+
+-#: cache.c:1398
++#: cache.c:1453
+ #, c-format
+ msgid "server %s#%d: queries sent %u, retried or failed %u"
+ msgstr ""
+@@ -96,7 +96,7 @@ msgstr "feilet
+ msgid "failed to allocate memory"
+ msgstr "feilet å laste %d bytes"
+
+-#: util.c:243 option.c:579
++#: util.c:243 option.c:598
+ msgid "could not get memory"
+ msgstr "kunne ikke få minne"
+
+@@ -110,610 +110,643 @@ msgstr "kan ikke lese %s: %s"
+ msgid "failed to allocate %d bytes"
+ msgstr "feilet å laste %d bytes"
+
+-#: util.c:429
++#: util.c:430
+ #, c-format
+ msgid "infinite"
+ msgstr "uendelig"
+
+-#: option.c:318
++#: option.c:330
+ msgid "Specify local address(es) to listen on."
+ msgstr "Spesifiser lokal(e) adresse(r) å lytte på."
+
+-#: option.c:319
++#: option.c:331
+ msgid "Return ipaddr for all hosts in specified domains."
+ msgstr "Returner ipaddr for alle verter i det spesifiserte domenet."
+
+-#: option.c:320
++#: option.c:332
+ msgid "Fake reverse lookups for RFC1918 private address ranges."
+ msgstr "Forfalsk revers oppslag for RFC1918 private adresse områder."
+
+-#: option.c:321
++#: option.c:333
+ msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
+ msgstr "Behandle ipaddr som NXDOMAIN (omgår Verisign wildcard)."
+
+-#: option.c:322
++#: option.c:334
+ #, c-format
+ msgid "Specify the size of the cache in entries (defaults to %s)."
+ msgstr "Spesifiser størrelsen på mellomlager plassene (standard er %s)."
+
+-#: option.c:323
++#: option.c:335
+ #, c-format
+ msgid "Specify configuration file (defaults to %s)."
+ msgstr "Spesifiser konfigurasjonsfil (standard er %s)."
+
+-#: option.c:324
++#: option.c:336
+ msgid "Do NOT fork into the background: run in debug mode."
+ msgstr "IKKE legg (fork) som bakgrunnsprosess: kjør i debug modus."
+
+-#: option.c:325
++#: option.c:337
+ msgid "Do NOT forward queries with no domain part."
+ msgstr "IKKE videresend oppslag som mangler domene del."
+
+-#: option.c:326
++#: option.c:338
+ msgid "Return self-pointing MX records for local hosts."
+ msgstr "Returner selv-pekende MX post for lokale verter."
+
+-#: option.c:327
++#: option.c:339
+ msgid "Expand simple names in /etc/hosts with domain-suffix."
+ msgstr "Utvid enkle navn i /etc/hosts med domene-suffiks."
+
+-#: option.c:328
++#: option.c:340
+ msgid "Don't forward spurious DNS requests from Windows hosts."
+ msgstr "Ikke videresend falske/uekte DNS forespørsler fra Windows verter."
+
+-#: option.c:329
++#: option.c:341
+ msgid "Enable DHCP in the range given with lease duration."
+ msgstr "Aktiver DHCP i det gitte området med leie varighet"
+
+-#: option.c:330
++#: option.c:342
+ #, c-format
+ msgid "Change to this group after startup (defaults to %s)."
+ msgstr "Skift til denne gruppen etter oppstart (standard er %s)."
+
+-#: option.c:331
++#: option.c:343
+ msgid "Set address or hostname for a specified machine."
+ msgstr "Sett adresse eller vertsnavn for en spesifikk maskin."
+
+-#: option.c:332
++#: option.c:344
+ #, fuzzy
+ msgid "Read DHCP host specs from file."
+ msgstr "dårlig MX navn"
+
+-#: option.c:333
++#: option.c:345
+ msgid "Read DHCP option specs from file."
+ msgstr ""
+
+-#: option.c:334
++#: option.c:346
++#, fuzzy
++msgid "Read DHCP host specs from a directory."
++msgstr "dårlig MX navn"
++
++#: option.c:347
++#, fuzzy
++msgid "Read DHCP options from a directory."
++msgstr "dårlig MX navn"
++
++#: option.c:348
+ msgid "Evaluate conditional tag expression."
+ msgstr ""
+
+-#: option.c:335
++#: option.c:349
+ #, c-format
+ msgid "Do NOT load %s file."
+ msgstr "IKKE last %s filen."
+
+-#: option.c:336
++#: option.c:350
+ #, c-format
+ msgid "Specify a hosts file to be read in addition to %s."
+ msgstr "Spesifiser en verts (hosts) fil som skal leses i tilleg til %s."
+
+-#: option.c:337
++#: option.c:351
++#, fuzzy
++msgid "Read hosts files from a directory."
++msgstr "dårlig MX navn"
++
++#: option.c:352
+ msgid "Specify interface(s) to listen on."
+ msgstr "Spesifiser nettverkskort det skal lyttes på."
+
+-#: option.c:338
++#: option.c:353
+ msgid "Specify interface(s) NOT to listen on."
+ msgstr "Spesifiser nettverkskort det IKKE skal lyttes på."
+
+-#: option.c:339
++#: option.c:354
+ #, fuzzy
+ msgid "Map DHCP user class to tag."
+ msgstr "Map DHCP bruker klasse til opsjon sett."
+
+-#: option.c:340
++#: option.c:355
+ msgid "Map RFC3046 circuit-id to tag."
+ msgstr ""
+
+-#: option.c:341
++#: option.c:356
+ msgid "Map RFC3046 remote-id to tag."
+ msgstr ""
+
+-#: option.c:342
++#: option.c:357
+ msgid "Map RFC3993 subscriber-id to tag."
+ msgstr ""
+
+-#: option.c:343
++#: option.c:358
+ #, fuzzy
+ msgid "Don't do DHCP for hosts with tag set."
+ msgstr "Ikke utfør DHCP for klienter i opsjon sett."
+
+-#: option.c:344
++#: option.c:359
+ #, fuzzy
+ msgid "Force broadcast replies for hosts with tag set."
+ msgstr "Ikke utfør DHCP for klienter i opsjon sett."
+
+-#: option.c:345
++#: option.c:360
+ msgid "Do NOT fork into the background, do NOT run in debug mode."
+ msgstr "IKKE last (fork) som bakgrunnsprosess, IKKE kjør i debug modus."
+
+-#: option.c:346
++#: option.c:361
+ msgid "Assume we are the only DHCP server on the local network."
+ msgstr "Anta at vi er den eneste DHCP tjeneren på det lokale nettverket."
+
+-#: option.c:347
++#: option.c:362
+ #, c-format
+ msgid "Specify where to store DHCP leases (defaults to %s)."
+ msgstr "Spesifiser hvor DHCP leiene skal lagres (standard er %s)."
+
+-#: option.c:348
++#: option.c:363
+ msgid "Return MX records for local hosts."
+ msgstr "Returner MX records for lokale verter."
+
+-#: option.c:349
++#: option.c:364
+ msgid "Specify an MX record."
+ msgstr "Spesifiser en MX post."
+
+-#: option.c:350
++#: option.c:365
+ msgid "Specify BOOTP options to DHCP server."
+ msgstr "Spesifiser BOOTP opsjoner til DHCP tjener."
+
+-#: option.c:351
++#: option.c:366
+ #, c-format
+ msgid "Do NOT poll %s file, reload only on SIGHUP."
+ msgstr "IKKE spør (poll) %s fil, les på nytt kun ved SIGHUP"
+
+-#: option.c:352
++#: option.c:367
+ msgid "Do NOT cache failed search results."
+ msgstr "IKKE mellomlagre søkeresultater som feiler."
+
+-#: option.c:353
++#: option.c:368
+ #, c-format
+ msgid "Use nameservers strictly in the order given in %s."
+ msgstr "Bruk navnetjenere kun som bestemt i rekkefølgen gitt i %s."
+
+-#: option.c:354
++#: option.c:369
+ #, fuzzy
+ msgid "Specify options to be sent to DHCP clients."
+ msgstr "Sett ekstra opsjoner som skal fordeles til DHCP klientene."
+
+-#: option.c:355
++#: option.c:370
+ msgid "DHCP option sent even if the client does not request it."
+ msgstr ""
+
+-#: option.c:356
++#: option.c:371
+ msgid "Specify port to listen for DNS requests on (defaults to 53)."
+ msgstr "Spesifiser lytteport for DNS oppslag (standard er 53)."
+
+-#: option.c:357
++#: option.c:372
+ #, c-format
+ msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
+ msgstr "Maksimal støttet UDP pakkestørrelse for EDNS.0 (standard er %s)."
+
+-#: option.c:358
++#: option.c:373
+ #, fuzzy
+ msgid "Log DNS queries."
+ msgstr "Logg oppslag."
+
+-#: option.c:359
++#: option.c:374
+ #, fuzzy
+ msgid "Force the originating port for upstream DNS queries."
+ msgstr "Tving bruk av opprinnelig port for oppstrøms oppslag."
+
+-#: option.c:360
++#: option.c:375
+ msgid "Do NOT read resolv.conf."
+ msgstr "IKKE les resolv.conf."
+
+-#: option.c:361
++#: option.c:376
+ #, c-format
+ msgid "Specify path to resolv.conf (defaults to %s)."
+ msgstr "Spesifiser stien til resolv.conf (standard er %s)."
+
+-#: option.c:362
++#: option.c:377
+ #, fuzzy
+ msgid "Specify path to file with server= options"
+ msgstr "Spesifiser stien til PID fil. (standard er %s)."
+
+-#: option.c:363
++#: option.c:378
+ msgid "Specify address(es) of upstream servers with optional domains."
+ msgstr "Spesifiser adressen(e) til oppstrøms tjenere med valgfrie domener."
+
+-#: option.c:364
++#: option.c:379
+ #, fuzzy
+ msgid "Specify address of upstream servers for reverse address queries"
+ msgstr "Spesifiser adressen(e) til oppstrøms tjenere med valgfrie domener."
+
+-#: option.c:365
++#: option.c:380
+ msgid "Never forward queries to specified domains."
+ msgstr "Aldri videresend oppslag til spesifiserte domener."
+
+-#: option.c:366
++#: option.c:381
+ msgid "Specify the domain to be assigned in DHCP leases."
+ msgstr "Spesifiser domenet som skal tildeles i DHCP leien."
+
+-#: option.c:367
++#: option.c:382
+ msgid "Specify default target in an MX record."
+ msgstr "Spesifiser default mål i en MX post."
+
+-#: option.c:368
++#: option.c:383
+ msgid "Specify time-to-live in seconds for replies from /etc/hosts."
+ msgstr "Spesifiser time-to-live i sekunder for svar fra /etc/hosts."
+
+-#: option.c:369
++#: option.c:384
+ #, fuzzy
+ msgid "Specify time-to-live in seconds for negative caching."
+ msgstr "Spesifiser time-to-live i sekunder for svar fra /etc/hosts."
+
+-#: option.c:370
++#: option.c:385
+ #, fuzzy
+ msgid "Specify time-to-live in seconds for maximum TTL to send to clients."
+ msgstr "Spesifiser time-to-live i sekunder for svar fra /etc/hosts."
+
+-#: option.c:371
++#: option.c:386
++#, fuzzy
++msgid "Specify time-to-live ceiling for cache."
++msgstr "Spesifiser time-to-live i sekunder for svar fra /etc/hosts."
++
++#: option.c:387
++#, fuzzy
++msgid "Specify time-to-live floor for cache."
++msgstr "Spesifiser time-to-live i sekunder for svar fra /etc/hosts."
++
++#: option.c:388
+ #, c-format
+ msgid "Change to this user after startup. (defaults to %s)."
+ msgstr "Skift til denne bruker etter oppstart (standard er %s)."
+
+-#: option.c:372
++#: option.c:389
+ #, fuzzy
+ msgid "Map DHCP vendor class to tag."
+ msgstr "Map DHCP produsent klasse til opsjon sett."
+
+-#: option.c:373
++#: option.c:390
+ msgid "Display dnsmasq version and copyright information."
+ msgstr "Vis dnsmasq versjon og copyright informasjon."
+
+-#: option.c:374
++#: option.c:391
+ msgid "Translate IPv4 addresses from upstream servers."
+ msgstr "Oversett IPv4 adresser fra oppstrøms tjenere."
+
+-#: option.c:375
++#: option.c:392
+ msgid "Specify a SRV record."
+ msgstr "Spesifiser en SRV post."
+
+-#: option.c:376
++#: option.c:393
+ msgid "Display this message. Use --help dhcp for known DHCP options."
+ msgstr ""
+
+-#: option.c:377
++#: option.c:394
+ #, fuzzy, c-format
+ msgid "Specify path of PID file (defaults to %s)."
+ msgstr "Spesifiser stien til PID fil. (standard er %s)."
+
+-#: option.c:378
++#: option.c:395
+ #, c-format
+ msgid "Specify maximum number of DHCP leases (defaults to %s)."
+ msgstr "Spesifiser maksimum antall DHCP leier (standard er %s)"
+
+-#: option.c:379
++#: option.c:396
+ msgid "Answer DNS queries based on the interface a query was sent to."
+ msgstr "Svar DNS oppslag basert på nettverkskortet oppslaget ble sendt til."
+
+-#: option.c:380
++#: option.c:397
+ msgid "Specify TXT DNS record."
+ msgstr "Spesifiser TXT DNS post."
+
+-#: option.c:381
++#: option.c:398
+ #, fuzzy
+ msgid "Specify PTR DNS record."
+ msgstr "Spesifiser TXT DNS post."
+
+-#: option.c:382
++#: option.c:399
+ msgid "Give DNS name to IPv4 address of interface."
+ msgstr ""
+
+-#: option.c:383
++#: option.c:400
+ msgid "Bind only to interfaces in use."
+ msgstr "Bind kun til nettverkskort som er i bruk."
+
+-#: option.c:384
++#: option.c:401
+ #, c-format
+ msgid "Read DHCP static host information from %s."
+ msgstr "Les DHCP statisk vert informasjon fra %s."
+
+-#: option.c:385
++#: option.c:402
+ msgid "Enable the DBus interface for setting upstream servers, etc."
+ msgstr "Aktiver DBus interface for å sette oppstrøms tjenere, osv."
+
+-#: option.c:386
++#: option.c:403
+ msgid "Do not provide DHCP on this interface, only provide DNS."
+ msgstr "Ikke lever DHCP på dette nettverkskortet, kun lever DNS."
+
+-#: option.c:387
++#: option.c:404
+ msgid "Enable dynamic address allocation for bootp."
+ msgstr "Aktiver dynamisk adresse allokering for bootp."
+
+-#: option.c:388
++#: option.c:405
+ #, fuzzy
+ msgid "Map MAC address (with wildcards) to option set."
+ msgstr "Map DHCP produsent klasse til opsjon sett."
+
+-#: option.c:389
++#: option.c:406
+ msgid "Treat DHCP requests on aliases as arriving from interface."
+ msgstr ""
+
+-#: option.c:390
++#: option.c:407
+ msgid "Disable ICMP echo address checking in the DHCP server."
+ msgstr ""
+
+-#: option.c:391
++#: option.c:408
+ msgid "Shell script to run on DHCP lease creation and destruction."
+ msgstr ""
+
+-#: option.c:392
++#: option.c:409
+ msgid "Lua script to run on DHCP lease creation and destruction."
+ msgstr ""
+
+-#: option.c:393
++#: option.c:410
+ msgid "Run lease-change scripts as this user."
+ msgstr ""
+
+-#: option.c:394
++#: option.c:411
+ msgid "Read configuration from all the files in this directory."
+ msgstr ""
+
+-#: option.c:395
++#: option.c:412
+ #, fuzzy
+ msgid "Log to this syslog facility or file. (defaults to DAEMON)"
+ msgstr "Skift til denne bruker etter oppstart (standard er %s)."
+
+-#: option.c:396
++#: option.c:413
+ msgid "Do not use leasefile."
+ msgstr ""
+
+-#: option.c:397
++#: option.c:414
+ #, fuzzy, c-format
+ msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
+ msgstr "Spesifiser maksimum antall DHCP leier (standard er %s)"
+
+-#: option.c:398
++#: option.c:415
+ #, c-format
+ msgid "Clear DNS cache when reloading %s."
+ msgstr ""
+
+-#: option.c:399
++#: option.c:416
+ msgid "Ignore hostnames provided by DHCP clients."
+ msgstr ""
+
+-#: option.c:400
++#: option.c:417
+ msgid "Do NOT reuse filename and server fields for extra DHCP options."
+ msgstr ""
+
+-#: option.c:401
++#: option.c:418
+ msgid "Enable integrated read-only TFTP server."
+ msgstr ""
+
+-#: option.c:402
++#: option.c:419
+ msgid "Export files by TFTP only from the specified subtree."
+ msgstr ""
+
+-#: option.c:403
++#: option.c:420
+ msgid "Add client IP address to tftp-root."
+ msgstr ""
+
+-#: option.c:404
++#: option.c:421
+ msgid "Allow access only to files owned by the user running dnsmasq."
+ msgstr ""
+
+-#: option.c:405
++#: option.c:422
+ #, fuzzy, c-format
+ msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
+ msgstr "Spesifiser maksimum antall DHCP leier (standard er %s)"
+
+-#: option.c:406
++#: option.c:423
+ msgid "Disable the TFTP blocksize extension."
+ msgstr ""
+
+-#: option.c:407
++#: option.c:424
+ msgid "Convert TFTP filenames to lowercase"
+ msgstr ""
+
+-#: option.c:408
++#: option.c:425
+ msgid "Ephemeral port range for use by TFTP transfers."
+ msgstr ""
+
+-#: option.c:409
++#: option.c:426
+ msgid "Extra logging for DHCP."
+ msgstr ""
+
+-#: option.c:410
++#: option.c:427
+ msgid "Enable async. logging; optionally set queue length."
+ msgstr ""
+
+-#: option.c:411
++#: option.c:428
+ msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
+ msgstr ""
+
+-#: option.c:412
++#: option.c:429
+ msgid "Allow rebinding of 127.0.0.0/8, for RBL servers."
+ msgstr ""
+
+-#: option.c:413
++#: option.c:430
+ msgid "Inhibit DNS-rebind protection on this domain."
+ msgstr ""
+
+-#: option.c:414
++#: option.c:431
+ msgid "Always perform DNS queries to all servers."
+ msgstr ""
+
+-#: option.c:415
++#: option.c:432
+ msgid "Set tag if client includes matching option in request."
+ msgstr ""
+
+-#: option.c:416
++#: option.c:433
+ msgid "Use alternative ports for DHCP."
+ msgstr ""
+
+-#: option.c:417
++#: option.c:434
+ #, fuzzy
+ msgid "Specify NAPTR DNS record."
+ msgstr "Spesifiser TXT DNS post."
+
+-#: option.c:418
++#: option.c:435
+ msgid "Specify lowest port available for DNS query transmission."
+ msgstr ""
+
+-#: option.c:419
++#: option.c:436
+ msgid "Use only fully qualified domain names for DHCP clients."
+ msgstr ""
+
+-#: option.c:420
++#: option.c:437
+ msgid "Generate hostnames based on MAC address for nameless clients."
+ msgstr ""
+
+-#: option.c:421
++#: option.c:438
+ msgid "Use these DHCP relays as full proxies."
+ msgstr ""
+
+-#: option.c:422
++#: option.c:439
+ msgid "Relay DHCP requests to a remote server"
+ msgstr ""
+
+-#: option.c:423
++#: option.c:440
+ msgid "Specify alias name for LOCAL DNS name."
+ msgstr ""
+
+-#: option.c:424
++#: option.c:441
+ #, fuzzy
+ msgid "Prompt to send to PXE clients."
+ msgstr "Sett ekstra opsjoner som skal fordeles til DHCP klientene."
+
+-#: option.c:425
++#: option.c:442
+ msgid "Boot service for PXE menu."
+ msgstr ""
+
+-#: option.c:426
++#: option.c:443
+ msgid "Check configuration syntax."
+ msgstr ""
+
+-#: option.c:427
++#: option.c:444
+ msgid "Add requestor's MAC address to forwarded DNS queries."
+ msgstr ""
+
+-#: option.c:428
++#: option.c:445
+ msgid "Add requestor's IP subnet to forwarded DNS queries."
+ msgstr ""
+
+-#: option.c:429
++#: option.c:446
+ #, fuzzy
+ msgid "Proxy DNSSEC validation results from upstream nameservers."
+ msgstr "Oversett IPv4 adresser fra oppstrøms tjenere."
+
+-#: option.c:430
++#: option.c:447
+ msgid "Attempt to allocate sequential IP addresses to DHCP clients."
+ msgstr ""
+
+-#: option.c:431
++#: option.c:448
+ msgid "Copy connection-track mark from queries to upstream connections."
+ msgstr ""
+
+-#: option.c:432
++#: option.c:449
+ msgid "Allow DHCP clients to do their own DDNS updates."
+ msgstr ""
+
+-#: option.c:433
++#: option.c:450
+ msgid "Send router-advertisements for interfaces doing DHCPv6"
+ msgstr ""
+
+-#: option.c:434
++#: option.c:451
+ msgid "Specify DUID_EN-type DHCPv6 server DUID"
+ msgstr ""
+
+-#: option.c:435
++#: option.c:452
+ #, fuzzy
+ msgid "Specify host (A/AAAA and PTR) records"
+ msgstr "Spesifiser en MX post."
+
+-#: option.c:436
++#: option.c:453
+ #, fuzzy
+ msgid "Specify arbitrary DNS resource record"
+ msgstr "Spesifiser TXT DNS post."
+
+-#: option.c:437
++#: option.c:454
+ #, fuzzy
+ msgid "Bind to interfaces in use - check for new interfaces"
+ msgstr "ukjent tilknytning (interface) %s"
+
+-#: option.c:438
++#: option.c:455
+ msgid "Export local names to global DNS"
+ msgstr ""
+
+-#: option.c:439
++#: option.c:456
+ msgid "Domain to export to global DNS"
+ msgstr ""
+
+-#: option.c:440
++#: option.c:457
+ msgid "Set TTL for authoritative replies"
+ msgstr ""
+
+-#: option.c:441
++#: option.c:458
+ msgid "Set authoritive zone information"
+ msgstr ""
+
+-#: option.c:442
++#: option.c:459
+ msgid "Secondary authoritative nameservers for forward domains"
+ msgstr ""
+
+-#: option.c:443
++#: option.c:460
+ msgid "Peers which are allowed to do zone transfer"
+ msgstr ""
+
+-#: option.c:444
++#: option.c:461
+ msgid "Specify ipsets to which matching domains should be added"
+ msgstr ""
+
+-#: option.c:445
++#: option.c:462
+ msgid "Specify a domain and address range for synthesised names"
+ msgstr ""
+
+-#: option.c:446
++#: option.c:463
+ msgid "Activate DNSSEC validation"
+ msgstr ""
+
+-#: option.c:447
++#: option.c:464
+ msgid "Specify trust anchor key digest."
+ msgstr ""
+
+-#: option.c:448
++#: option.c:465
+ msgid "Disable upstream checking for DNSSEC debugging."
+ msgstr ""
+
+-#: option.c:449
++#: option.c:466
+ msgid "Ensure answers without DNSSEC are in unsigned zones."
+ msgstr ""
+
+-#: option.c:450
++#: option.c:467
+ msgid "Don't check DNSSEC signature timestamps until first cache-reload"
+ msgstr ""
+
+-#: option.c:452
++#: option.c:468
++msgid "Timestamp file to verify system clock for DNSSEC"
++msgstr ""
++
++#: option.c:470
+ msgid "Specify DHCPv6 prefix class"
+ msgstr ""
+
+-#: option.c:454
++#: option.c:472
+ msgid "Set priority, resend-interval and router-lifetime"
+ msgstr ""
+
+-#: option.c:455
++#: option.c:473
+ msgid "Do not log routine DHCP."
+ msgstr ""
+
+-#: option.c:456
++#: option.c:474
+ msgid "Do not log routine DHCPv6."
+ msgstr ""
+
+-#: option.c:457
++#: option.c:475
+ msgid "Do not log RA."
+ msgstr ""
+
+-#: option.c:458
++#: option.c:476
+ msgid "Accept queries only from directly-connected networks"
+ msgstr ""
+
+-#: option.c:459
++#: option.c:477
+ msgid "Detect and remove DNS forwarding loops"
+ msgstr ""
+
+-#: option.c:661
++#: option.c:478
++msgid "Ignore DNS responses containing ipaddr."
++msgstr ""
++
++#: option.c:680
+ #, c-format
+ msgid ""
+ "Usage: dnsmasq [options]\n"
+@@ -722,332 +755,332 @@ msgstr ""
+ "Bruk: dnsmasq [opsjoner]\n"
+ "\n"
+
+-#: option.c:663
++#: option.c:682
+ #, c-format
+ msgid "Use short options only on the command line.\n"
+ msgstr "Bruk korte opsjoner kun på kommandolinjen.\n"
+
+-#: option.c:665
++#: option.c:684
+ #, fuzzy, c-format
+ msgid "Valid options are:\n"
+ msgstr "Gyldige opsjoner er :\n"
+
+-#: option.c:722 option.c:726
++#: option.c:741 option.c:745
+ msgid "bad port"
+ msgstr "dårlig port"
+
+-#: option.c:753 option.c:785
++#: option.c:772 option.c:804
+ msgid "interface binding not supported"
+ msgstr ""
+
+-#: option.c:762 option.c:3494
++#: option.c:781 option.c:3570
+ #, fuzzy
+ msgid "bad interface name"
+ msgstr "dårlig MX navn"
+
+-#: option.c:792
++#: option.c:811
+ #, fuzzy
+ msgid "bad address"
+ msgstr "les %s - %d adresser"
+
+-#: option.c:974
++#: option.c:993
+ msgid "unsupported encapsulation for IPv6 option"
+ msgstr ""
+
+-#: option.c:988
++#: option.c:1007
+ msgid "bad dhcp-option"
+ msgstr "dårlig dhcp-opsjon"
+
+-#: option.c:1056
++#: option.c:1075
+ #, fuzzy
+ msgid "bad IP address"
+ msgstr "les %s - %d adresser"
+
+-#: option.c:1059 option.c:1197 option.c:2812
++#: option.c:1078 option.c:1216 option.c:2888
+ #, fuzzy
+ msgid "bad IPv6 address"
+ msgstr "les %s - %d adresser"
+
+-#: option.c:1224 option.c:1318
++#: option.c:1243 option.c:1337
+ msgid "bad domain in dhcp-option"
+ msgstr "dårlig domene i dhcp-opsjon"
+
+-#: option.c:1356
++#: option.c:1375
+ msgid "dhcp-option too long"
+ msgstr "dhcp-opsjon for lang"
+
+-#: option.c:1363
++#: option.c:1382
+ msgid "illegal dhcp-match"
+ msgstr ""
+
+-#: option.c:1425
++#: option.c:1444
+ msgid "illegal repeated flag"
+ msgstr ""
+
+-#: option.c:1433
++#: option.c:1452
+ msgid "illegal repeated keyword"
+ msgstr ""
+
+-#: option.c:1495 option.c:4092
++#: option.c:1517 option.c:4186
+ #, fuzzy, c-format
+ msgid "cannot access directory %s: %s"
+ msgstr "kan ikke lese %s: %s"
+
+-#: option.c:1541 tftp.c:493
++#: option.c:1563 tftp.c:493
+ #, fuzzy, c-format
+ msgid "cannot access %s: %s"
+ msgstr "kan ikke lese %s: %s"
+
+-#: option.c:1588
++#: option.c:1615
+ msgid "setting log facility is not possible under Android"
+ msgstr ""
+
+-#: option.c:1597
++#: option.c:1624
+ msgid "bad log facility"
+ msgstr ""
+
+-#: option.c:1650
++#: option.c:1677
+ msgid "bad MX preference"
+ msgstr "dårlig MX preferanse"
+
+-#: option.c:1655
++#: option.c:1682
+ msgid "bad MX name"
+ msgstr "dårlig MX navn"
+
+-#: option.c:1669
++#: option.c:1696
+ msgid "bad MX target"
+ msgstr "dårlig MX mål"
+
+-#: option.c:1681
++#: option.c:1708
+ msgid "cannot run scripts under uClinux"
+ msgstr ""
+
+-#: option.c:1683
++#: option.c:1710
+ msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts"
+ msgstr ""
+
+-#: option.c:1687
++#: option.c:1714
+ msgid "recompile with HAVE_LUASCRIPT defined to enable Lua scripts"
+ msgstr ""
+
+-#: option.c:1928 option.c:1966 option.c:2015
++#: option.c:1970 option.c:2015 option.c:2071
+ #, fuzzy
+ msgid "bad prefix"
+ msgstr "dårlig port"
+
+-#: option.c:2289
++#: option.c:2352
+ msgid "recompile with HAVE_IPSET defined to enable ipset directives"
+ msgstr ""
+
+-#: option.c:2469
++#: option.c:2545
+ #, fuzzy
+ msgid "bad port range"
+ msgstr "dårlig port"
+
+-#: option.c:2485
++#: option.c:2561
+ msgid "bad bridge-interface"
+ msgstr ""
+
+-#: option.c:2545
++#: option.c:2621
+ msgid "only one tag allowed"
+ msgstr ""
+
+-#: option.c:2565 option.c:2577 option.c:2683 option.c:2724
++#: option.c:2641 option.c:2653 option.c:2759 option.c:2800
+ msgid "bad dhcp-range"
+ msgstr "dårlig dhcp-område"
+
+-#: option.c:2592
++#: option.c:2668
+ msgid "inconsistent DHCP range"
+ msgstr "ikke konsistent DHCP område"
+
+-#: option.c:2651
++#: option.c:2727
+ msgid "prefix length must be exactly 64 for RA subnets"
+ msgstr ""
+
+-#: option.c:2653
++#: option.c:2729
+ msgid "prefix length must be exactly 64 for subnet constructors"
+ msgstr ""
+
+-#: option.c:2657
++#: option.c:2733
+ msgid "prefix length must be at least 64"
+ msgstr ""
+
+-#: option.c:2660
++#: option.c:2736
+ #, fuzzy
+ msgid "inconsistent DHCPv6 range"
+ msgstr "ikke konsistent DHCP område"
+
+-#: option.c:2671
++#: option.c:2747
+ msgid "prefix must be zero with \"constructor:\" argument"
+ msgstr ""
+
+-#: option.c:2782 option.c:2830
++#: option.c:2858 option.c:2906
+ #, fuzzy
+ msgid "bad hex constant"
+ msgstr "dårlig dhcp-vert"
+
+-#: option.c:2804
++#: option.c:2880
+ msgid "cannot match tags in --dhcp-host"
+ msgstr ""
+
+-#: option.c:2852
++#: option.c:2928
+ #, fuzzy, c-format
+ msgid "duplicate dhcp-host IP address %s"
+ msgstr "dubliserte IP adresser i %s dhcp-config direktiv."
+
+-#: option.c:2910
++#: option.c:2986
+ #, fuzzy
+ msgid "bad DHCP host name"
+ msgstr "dårlig MX navn"
+
+-#: option.c:2992
++#: option.c:3068
+ #, fuzzy
+ msgid "bad tag-if"
+ msgstr "dårlig MX mål"
+
+-#: option.c:3316 option.c:3710
++#: option.c:3392 option.c:3786
+ msgid "invalid port number"
+ msgstr "ugyldig portnummer"
+
+-#: option.c:3378
++#: option.c:3454
+ #, fuzzy
+ msgid "bad dhcp-proxy address"
+ msgstr "les %s - %d adresser"
+
+-#: option.c:3404
++#: option.c:3480
+ #, fuzzy
+ msgid "Bad dhcp-relay"
+ msgstr "dårlig dhcp-område"
+
+-#: option.c:3430
++#: option.c:3506
+ msgid "bad RA-params"
+ msgstr ""
+
+-#: option.c:3439
++#: option.c:3515
+ msgid "bad DUID"
+ msgstr ""
+
+-#: option.c:3481
++#: option.c:3557
+ #, fuzzy
+ msgid "invalid alias range"
+ msgstr "ugyldig vekt"
+
+-#: option.c:3535
++#: option.c:3611
+ msgid "bad CNAME"
+ msgstr ""
+
+-#: option.c:3540
++#: option.c:3616
+ msgid "duplicate CNAME"
+ msgstr ""
+
+-#: option.c:3560
++#: option.c:3636
+ #, fuzzy
+ msgid "bad PTR record"
+ msgstr "dårlig SRV post"
+
+-#: option.c:3591
++#: option.c:3667
+ #, fuzzy
+ msgid "bad NAPTR record"
+ msgstr "dårlig SRV post"
+
+-#: option.c:3625
++#: option.c:3701
+ #, fuzzy
+ msgid "bad RR record"
+ msgstr "dårlig SRV post"
+
+-#: option.c:3655
++#: option.c:3731
+ msgid "bad TXT record"
+ msgstr "dårlig TXT post"
+
+-#: option.c:3696
++#: option.c:3772
+ msgid "bad SRV record"
+ msgstr "dårlig SRV post"
+
+-#: option.c:3703
++#: option.c:3779
+ msgid "bad SRV target"
+ msgstr "dårlig SRV mål"
+
+-#: option.c:3717
++#: option.c:3793
+ msgid "invalid priority"
+ msgstr "ugyldig prioritet"
+
+-#: option.c:3724
++#: option.c:3800
+ msgid "invalid weight"
+ msgstr "ugyldig vekt"
+
+-#: option.c:3748
++#: option.c:3824
+ #, fuzzy
+ msgid "Bad host-record"
+ msgstr "dårlig SRV post"
+
+-#: option.c:3765
++#: option.c:3841
+ #, fuzzy
+ msgid "Bad name in host-record"
+ msgstr "dårlig navn i %s"
+
+-#: option.c:3826
++#: option.c:3906
+ #, fuzzy
+ msgid "bad trust anchor"
+ msgstr "dårlig port"
+
+-#: option.c:3840
++#: option.c:3920
+ msgid "bad HEX in trust anchor"
+ msgstr ""
+
+-#: option.c:3850
++#: option.c:3930
+ msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DNSSEC/DBus support)"
+ msgstr ""
+
+-#: option.c:3909
++#: option.c:3989
+ msgid "missing \""
+ msgstr "mangler \""
+
+-#: option.c:3966
++#: option.c:4046
+ msgid "bad option"
+ msgstr "dårlig opsjon"
+
+-#: option.c:3968
++#: option.c:4048
+ msgid "extraneous parameter"
+ msgstr "overflødig parameter"
+
+-#: option.c:3970
++#: option.c:4050
+ msgid "missing parameter"
+ msgstr "mangler parameter"
+
+-#: option.c:3972
++#: option.c:4052
+ #, fuzzy
+ msgid "illegal option"
+ msgstr "dårlig opsjon"
+
+-#: option.c:3979
++#: option.c:4059
+ msgid "error"
+ msgstr "feil"
+
+-#: option.c:3981
++#: option.c:4061
+ #, fuzzy, c-format
+ msgid " at line %d of %s"
+ msgstr "%s på linje %d av %%s"
+
+-#: option.c:4045 option.c:4168 tftp.c:667
+-#, c-format
+-msgid "cannot read %s: %s"
+-msgstr "kan ikke lese %s: %s"
+-
+-#: option.c:4229 option.c:4265
++#: option.c:4076 option.c:4323 option.c:4359
+ #, fuzzy, c-format
+ msgid "read %s"
+ msgstr "leser %s"
+
+-#: option.c:4331
++#: option.c:4139 option.c:4262 tftp.c:667
++#, c-format
++msgid "cannot read %s: %s"
++msgstr "kan ikke lese %s: %s"
++
++#: option.c:4425
+ msgid "junk found in command line"
+ msgstr ""
+
+-#: option.c:4366
++#: option.c:4460
+ #, c-format
+ msgid "Dnsmasq version %s %s\n"
+ msgstr "Dnsmasq versjon %s %s\n"
+
+-#: option.c:4367
++#: option.c:4461
+ #, fuzzy, c-format
+ msgid ""
+ "Compile time options: %s\n"
+@@ -1056,89 +1089,89 @@ msgstr ""
+ "Kompileringsopsjoner %s\n"
+ "\n"
+
+-#: option.c:4368
++#: option.c:4462
+ #, c-format
+ msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
+ msgstr "Denne programvaren kommer med ABSOLUTT INGEN GARANTI.\n"
+
+-#: option.c:4369
++#: option.c:4463
+ #, c-format
+ msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
+ msgstr "DNsmasq er fri programvare, du er velkommen til å redistribuere den\n"
+
+-#: option.c:4370
++#: option.c:4464
+ #, fuzzy, c-format
+ msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
+ msgstr "under vilkårene gitt i GNU General Public License, versjon 2.\n"
+
+-#: option.c:4381
++#: option.c:4475
+ msgid "try --help"
+ msgstr ""
+
+-#: option.c:4383
++#: option.c:4477
+ msgid "try -w"
+ msgstr ""
+
+-#: option.c:4385
++#: option.c:4479
+ #, fuzzy, c-format
+ msgid "bad command line options: %s"
+ msgstr "dårlige kommandlinje opsjoner: %s."
+
+-#: option.c:4434
++#: option.c:4535
+ #, c-format
+ msgid "cannot get host-name: %s"
+ msgstr "klarer ikke å få vertsnavn: %s"
+
+-#: option.c:4462
++#: option.c:4563
+ msgid "only one resolv.conf file allowed in no-poll mode."
+ msgstr "kun en resolv.conf fil tillat i no-poll modus."
+
+-#: option.c:4472
++#: option.c:4573
+ msgid "must have exactly one resolv.conf to read domain from."
+ msgstr "må ha nøyaktig en resolv.conf å lese domene fra."
+
+-#: option.c:4475 network.c:1506 dhcp.c:769
++#: option.c:4576 network.c:1506 dhcp.c:774
+ #, fuzzy, c-format
+ msgid "failed to read %s: %s"
+ msgstr "feilet å lese %s: %s"
+
+-#: option.c:4492
++#: option.c:4593
+ #, c-format
+ msgid "no search directive found in %s"
+ msgstr "intet søke direktiv funnet i %s"
+
+-#: option.c:4513
++#: option.c:4614
+ msgid "there must be a default domain when --dhcp-fqdn is set"
+ msgstr ""
+
+-#: option.c:4522
++#: option.c:4623
+ msgid "syntax check OK"
+ msgstr ""
+
+-#: forward.c:114
++#: forward.c:111
+ #, fuzzy, c-format
+ msgid "failed to send packet: %s"
+ msgstr "feilet å lytte på socket: %s"
+
+-#: forward.c:574
++#: forward.c:572
+ msgid "discarding DNS reply: subnet option mismatch"
+ msgstr ""
+
+-#: forward.c:597
++#: forward.c:595
+ #, c-format
+ msgid "nameserver %s refused to do a recursive query"
+ msgstr "navnetjener %s nektet å gjøre et rekursivt oppslag"
+
+-#: forward.c:629
++#: forward.c:627
+ #, c-format
+ msgid "possible DNS-rebind attack detected: %s"
+ msgstr ""
+
+-#: forward.c:1132 forward.c:1663
++#: forward.c:1156 forward.c:1722
+ msgid "Ignoring query from non-local network"
+ msgstr ""
+
+-#: forward.c:2101
++#: forward.c:2178
+ #, fuzzy, c-format
+ msgid "Maximum number of concurrent DNS queries reached (max: %d)"
+ msgstr "Spesifiser maksimum antall DHCP leier (standard er %s)"
+@@ -1228,270 +1261,283 @@ msgstr "benytter navnetjener %s#%d"
+ msgid "using nameserver %s#%d"
+ msgstr "benytter navnetjener %s#%d"
+
+-#: dnsmasq.c:154
+-msgid "No trust anchors provided for DNSSEC"
++#: dnsmasq.c:149
++msgid "dhcp-hostsdir, dhcp-optsdir and hostsdir are not supported on this platform"
+ msgstr ""
+
+-#: dnsmasq.c:157
+-msgid "Cannot reduce cache size from default when DNSSEC enabled"
++#: dnsmasq.c:156
++msgid "no trust anchors provided for DNSSEC"
+ msgstr ""
+
+ #: dnsmasq.c:159
++msgid "cannot reduce cache size from default when DNSSEC enabled"
++msgstr ""
++
++#: dnsmasq.c:161
+ #, fuzzy
+ msgid "DNSSEC not available: set HAVE_DNSSEC in src/config.h"
+ msgstr "DBus ikke tilgjengelig: sett HAVE_DBUS i src/config.h"
+
+-#: dnsmasq.c:165
++#: dnsmasq.c:167
+ #, fuzzy
+ msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
+ msgstr "DBus ikke tilgjengelig: sett HAVE_DBUS i src/config.h"
+
+-#: dnsmasq.c:170
+-msgid "Cannot use --conntrack AND --query-port"
++#: dnsmasq.c:172
++msgid "cannot use --conntrack AND --query-port"
+ msgstr ""
+
+-#: dnsmasq.c:173
++#: dnsmasq.c:175
+ #, fuzzy
+-msgid "Conntrack support not available: set HAVE_CONNTRACK in src/config.h"
++msgid "conntrack support not available: set HAVE_CONNTRACK in src/config.h"
+ msgstr "DBus ikke tilgjengelig: sett HAVE_DBUS i src/config.h"
+
+-#: dnsmasq.c:178
++#: dnsmasq.c:180
+ msgid "asychronous logging is not available under Solaris"
+ msgstr ""
+
+-#: dnsmasq.c:183
++#: dnsmasq.c:185
+ msgid "asychronous logging is not available under Android"
+ msgstr ""
+
+-#: dnsmasq.c:188
++#: dnsmasq.c:190
+ #, fuzzy
+ msgid "authoritative DNS not available: set HAVE_AUTH in src/config.h"
+ msgstr "DBus ikke tilgjengelig: sett HAVE_DBUS i src/config.h"
+
+-#: dnsmasq.c:193
++#: dnsmasq.c:195
+ #, fuzzy
+-msgid "Loop detection not available: set HAVE_LOOP in src/config.h"
++msgid "loop detection not available: set HAVE_LOOP in src/config.h"
+ msgstr "DBus ikke tilgjengelig: sett HAVE_DBUS i src/config.h"
+
+-#: dnsmasq.c:201
++#: dnsmasq.c:203
+ msgid "zone serial must be configured in --auth-soa"
+ msgstr ""
+
+-#: dnsmasq.c:219
++#: dnsmasq.c:221
+ msgid "dhcp-range constructor not available on this platform"
+ msgstr ""
+
+-#: dnsmasq.c:262
++#: dnsmasq.c:264
+ msgid "cannot set --bind-interfaces and --bind-dynamic"
+ msgstr ""
+
+-#: dnsmasq.c:265
++#: dnsmasq.c:267
+ #, c-format
+ msgid "failed to find list of interfaces: %s"
+ msgstr "feilet å finne liste av tilknytninger (interfaces): %s"
+
+-#: dnsmasq.c:274
++#: dnsmasq.c:276
+ #, c-format
+ msgid "unknown interface %s"
+ msgstr "ukjent tilknytning (interface) %s"
+
+-#: dnsmasq.c:330 dnsmasq.c:954
++#: dnsmasq.c:340 dnsmasq.c:1004
+ #, c-format
+ msgid "DBus error: %s"
+ msgstr "DBus feil: %s"
+
+-#: dnsmasq.c:333
++#: dnsmasq.c:343
+ msgid "DBus not available: set HAVE_DBUS in src/config.h"
+ msgstr "DBus ikke tilgjengelig: sett HAVE_DBUS i src/config.h"
+
+-#: dnsmasq.c:361
++#: dnsmasq.c:371
+ #, c-format
+ msgid "unknown user or group: %s"
+ msgstr ""
+
+-#: dnsmasq.c:416
++#: dnsmasq.c:426
+ #, c-format
+ msgid "cannot chdir to filesystem root: %s"
+ msgstr ""
+
+-#: dnsmasq.c:653
++#: dnsmasq.c:667
+ #, fuzzy, c-format
+ msgid "started, version %s DNS disabled"
+ msgstr "startet, versjon %s mellomlager deaktivert"
+
+-#: dnsmasq.c:655
++#: dnsmasq.c:669
+ #, c-format
+ msgid "started, version %s cachesize %d"
+ msgstr "startet, versjon %s mellomlager størrelse %d"
+
+-#: dnsmasq.c:657
++#: dnsmasq.c:671
+ #, c-format
+ msgid "started, version %s cache disabled"
+ msgstr "startet, versjon %s mellomlager deaktivert"
+
+-#: dnsmasq.c:659
++#: dnsmasq.c:673
+ #, c-format
+ msgid "compile time options: %s"
+ msgstr "kompilerings opsjoner: %s"
+
+-#: dnsmasq.c:665
++#: dnsmasq.c:679
+ msgid "DBus support enabled: connected to system bus"
+ msgstr "DBus støtte aktivert: koblet til system buss"
+
+-#: dnsmasq.c:667
++#: dnsmasq.c:681
+ msgid "DBus support enabled: bus connection pending"
+ msgstr "DBus støtte aktivert: avventer buss tilkobling"
+
+-#: dnsmasq.c:672
++#: dnsmasq.c:686
+ msgid "DNS service limited to local subnets"
+ msgstr ""
+
+-#: dnsmasq.c:677
++#: dnsmasq.c:702
+ msgid "DNSSEC validation enabled"
+ msgstr ""
+
+-#: dnsmasq.c:679
++#: dnsmasq.c:705
+ msgid "DNSSEC signature timestamps not checked until first cache reload"
+ msgstr ""
+
+-#: dnsmasq.c:684
++#: dnsmasq.c:708
++msgid "DNSSEC signature timestamps not checked until system time valid"
++msgstr ""
++
++#: dnsmasq.c:713
+ #, fuzzy, c-format
+ msgid "warning: failed to change owner of %s: %s"
+ msgstr "feilet å laste navn fra %s: %s"
+
+-#: dnsmasq.c:688
++#: dnsmasq.c:717
+ msgid "setting --bind-interfaces option because of OS limitations"
+ msgstr "setter --bind-interfaces opsjon på grunn av OS begrensninger"
+
+-#: dnsmasq.c:698
++#: dnsmasq.c:727
+ #, c-format
+ msgid "warning: interface %s does not currently exist"
+ msgstr "advarsel: nettverkskort %s eksisterer ikke for tiden"
+
+-#: dnsmasq.c:703
++#: dnsmasq.c:732
+ msgid "warning: ignoring resolv-file flag because no-resolv is set"
+ msgstr ""
+
+-#: dnsmasq.c:706
++#: dnsmasq.c:735
+ #, fuzzy
+ msgid "warning: no upstream servers configured"
+ msgstr "setter oppstrøms tjener fra DBus"
+
+-#: dnsmasq.c:710
++#: dnsmasq.c:739
+ #, c-format
+ msgid "asynchronous logging enabled, queue limit is %d messages"
+ msgstr ""
+
+-#: dnsmasq.c:731
++#: dnsmasq.c:760
+ msgid "IPv6 router advertisement enabled"
+ msgstr ""
+
+-#: dnsmasq.c:736
++#: dnsmasq.c:765
+ #, c-format
+ msgid "DHCP, sockets bound exclusively to interface %s"
+ msgstr ""
+
+-#: dnsmasq.c:753
++#: dnsmasq.c:782
+ msgid "root is "
+ msgstr ""
+
+-#: dnsmasq.c:753
++#: dnsmasq.c:782
+ #, fuzzy
+ msgid "enabled"
+ msgstr "deaktivert"
+
+-#: dnsmasq.c:755
++#: dnsmasq.c:784
+ msgid "secure mode"
+ msgstr ""
+
+-#: dnsmasq.c:781
++#: dnsmasq.c:810
+ #, c-format
+ msgid "restricting maximum simultaneous TFTP transfers to %d"
+ msgstr ""
+
+-#: dnsmasq.c:956
++#: dnsmasq.c:1006
+ msgid "connected to system DBus"
+ msgstr "tilkoblet til system DBus"
+
+-#: dnsmasq.c:1106
++#: dnsmasq.c:1156
+ #, c-format
+ msgid "cannot fork into background: %s"
+ msgstr ""
+
+-#: dnsmasq.c:1109
++#: dnsmasq.c:1159
+ #, fuzzy, c-format
+ msgid "failed to create helper: %s"
+ msgstr "feilet å lese %s: %s"
+
+-#: dnsmasq.c:1112
++#: dnsmasq.c:1162
+ #, c-format
+ msgid "setting capabilities failed: %s"
+ msgstr ""
+
+-#: dnsmasq.c:1115
++#: dnsmasq.c:1165
+ #, fuzzy, c-format
+ msgid "failed to change user-id to %s: %s"
+ msgstr "feilet å laste navn fra %s: %s"
+
+-#: dnsmasq.c:1118
++#: dnsmasq.c:1168
+ #, fuzzy, c-format
+ msgid "failed to change group-id to %s: %s"
+ msgstr "feilet å laste navn fra %s: %s"
+
+-#: dnsmasq.c:1121
++#: dnsmasq.c:1171
+ #, fuzzy, c-format
+ msgid "failed to open pidfile %s: %s"
+ msgstr "feilet å lese %s: %s"
+
+-#: dnsmasq.c:1124
++#: dnsmasq.c:1174
+ #, fuzzy, c-format
+ msgid "cannot open log %s: %s"
+ msgstr "kan ikke åpne %s:%s"
+
+-#: dnsmasq.c:1127
++#: dnsmasq.c:1177
+ #, fuzzy, c-format
+ msgid "failed to load Lua script: %s"
+ msgstr "feilet å laste %s: %s"
+
+-#: dnsmasq.c:1130
++#: dnsmasq.c:1180
+ #, c-format
+ msgid "TFTP directory %s inaccessible: %s"
+ msgstr ""
+
+-#: dnsmasq.c:1151
++#: dnsmasq.c:1183
++#, fuzzy, c-format
++msgid "cannot create timestamp file %s: %s"
++msgstr "kan ikke åpne eller lage leie fil: %s"
++
++#: dnsmasq.c:1204
+ msgid "now checking DNSSEC signature timestamps"
+ msgstr ""
+
+-#: dnsmasq.c:1218
++#: dnsmasq.c:1271
+ #, c-format
+ msgid "script process killed by signal %d"
+ msgstr ""
+
+-#: dnsmasq.c:1222
++#: dnsmasq.c:1275
+ #, c-format
+ msgid "script process exited with status %d"
+ msgstr ""
+
+-#: dnsmasq.c:1226
++#: dnsmasq.c:1279
+ #, fuzzy, c-format
+ msgid "failed to execute %s: %s"
+ msgstr "feilet å få tilgang til %s: %s"
+
+-#: dnsmasq.c:1281
++#: dnsmasq.c:1334
+ msgid "exiting on receipt of SIGTERM"
+ msgstr "avslutter etter mottak av SIGTERM"
+
+-#: dnsmasq.c:1309
++#: dnsmasq.c:1362
+ #, fuzzy, c-format
+ msgid "failed to access %s: %s"
+ msgstr "feilet å få tilgang til %s: %s"
+
+-#: dnsmasq.c:1339
++#: dnsmasq.c:1392
+ #, c-format
+ msgid "reading %s"
+ msgstr "leser %s"
+
+-#: dnsmasq.c:1350
++#: dnsmasq.c:1403
+ #, fuzzy, c-format
+ msgid "no servers found in %s, will retry"
+ msgstr "intet søke direktiv funnet i %s"
+@@ -1531,27 +1577,27 @@ msgstr "ukjent tilknytning (interface) %s"
+ msgid "DHCP packet received on %s which has no address"
+ msgstr ""
+
+-#: dhcp.c:408
++#: dhcp.c:412
+ #, c-format
+ msgid "ARP-cache injection failed: %s"
+ msgstr ""
+
+-#: dhcp.c:506
++#: dhcp.c:511
+ #, c-format
+ msgid "DHCP range %s -- %s is not consistent with netmask %s"
+ msgstr "DHCP område %s -- %s er ikke konsistent med nettmaske %s"
+
+-#: dhcp.c:807
++#: dhcp.c:812
+ #, c-format
+ msgid "bad line at %s line %d"
+ msgstr "dårlig linje ved %s linje %d"
+
+-#: dhcp.c:850
++#: dhcp.c:855
+ #, c-format
+ msgid "ignoring %s line %d, duplicate name or IP address"
+ msgstr ""
+
+-#: dhcp.c:994 rfc3315.c:2089
++#: dhcp.c:999 rfc3315.c:2139
+ #, c-format
+ msgid "DHCP relay %s -> %s"
+ msgstr ""
+@@ -1622,12 +1668,12 @@ msgstr "DBus feil: %s"
+ msgid "disabled"
+ msgstr "deaktivert"
+
+-#: rfc2131.c:539 rfc2131.c:967 rfc2131.c:1385 rfc3315.c:602 rfc3315.c:823
+-#: rfc3315.c:1095
++#: rfc2131.c:539 rfc2131.c:967 rfc2131.c:1385 rfc3315.c:603 rfc3315.c:860
++#: rfc3315.c:1139
+ msgid "ignored"
+ msgstr "oversett"
+
+-#: rfc2131.c:554 rfc2131.c:1205 rfc3315.c:873
++#: rfc2131.c:554 rfc2131.c:1205 rfc3315.c:910
+ msgid "address in use"
+ msgstr "adresse i bruk"
+
+@@ -1647,7 +1693,7 @@ msgstr "ingen adresse konfigurert"
+ msgid "no leases left"
+ msgstr "ingen leier igjen"
+
+-#: rfc2131.c:691 rfc3315.c:475
++#: rfc2131.c:691 rfc3315.c:476
+ #, c-format
+ msgid "%u client provides name: %s"
+ msgstr ""
+@@ -1656,7 +1702,7 @@ msgstr ""
+ msgid "PXE BIS not supported"
+ msgstr ""
+
+-#: rfc2131.c:935 rfc3315.c:1189
++#: rfc2131.c:935 rfc3315.c:1233
+ #, fuzzy, c-format
+ msgid "disabling DHCP static address %s for %s"
+ msgstr "deaktiverer DHCP statisk adresse %s"
+@@ -1692,7 +1738,7 @@ msgstr ""
+ msgid "wrong address"
+ msgstr "gal adresse"
+
+-#: rfc2131.c:1143 rfc3315.c:969
++#: rfc2131.c:1143 rfc3315.c:1006
+ msgid "lease not found"
+ msgstr "leie ikke funnet"
+
+@@ -1742,7 +1788,7 @@ msgstr "kan ikke sende DHCP opsjon %d: ikke mer plass i pakken"
+ msgid "PXE menu too large"
+ msgstr ""
+
+-#: rfc2131.c:2173 rfc3315.c:1456
++#: rfc2131.c:2173 rfc3315.c:1506
+ #, fuzzy, c-format
+ msgid "%u requested options: %s"
+ msgstr "kompilerings opsjoner: %s"
+@@ -1757,7 +1803,7 @@ msgstr ""
+ msgid "cannot create netlink socket: %s"
+ msgstr "kan ikke binde netlink socket: %s"
+
+-#: netlink.c:347
++#: netlink.c:348
+ #, fuzzy, c-format
+ msgid "netlink returns error: %s"
+ msgstr "DBus feil: %s"
+@@ -1875,66 +1921,66 @@ msgstr "ingen adresse omr
+ msgid "%u available DHCPv6 subnet: %s/%d"
+ msgstr "ingen adresse område tilgjengelig for DHCP krav %s %s"
+
+-#: rfc3315.c:379
++#: rfc3315.c:380
+ #, fuzzy, c-format
+ msgid "%u vendor class: %u"
+ msgstr "DBus feil: %s"
+
+-#: rfc3315.c:427
++#: rfc3315.c:428
+ #, fuzzy, c-format
+ msgid "%u client MAC address: %s"
+ msgstr "ingen tilknytning (interface) med adresse %s"
+
+-#: rfc3315.c:659
++#: rfc3315.c:660
+ #, fuzzy, c-format
+ msgid "unknown prefix-class %d"
+ msgstr "ukjent leie"
+
+-#: rfc3315.c:791 rfc3315.c:913
++#: rfc3315.c:803 rfc3315.c:902
++#, fuzzy
++msgid "address unavailable"
++msgstr "adresse ikke tilgjengelig"
++
++#: rfc3315.c:815 rfc3315.c:950 rfc3315.c:1283
+ msgid "success"
+ msgstr ""
+
+-#: rfc3315.c:806 rfc3315.c:808 rfc3315.c:921 rfc3315.c:923
++#: rfc3315.c:843 rfc3315.c:845 rfc3315.c:958 rfc3315.c:960
+ #, fuzzy
+ msgid "no addresses available"
+ msgstr "ingen adresse tilgjengelig"
+
+-#: rfc3315.c:865
+-#, fuzzy
+-msgid "address unavailable"
+-msgstr "adresse ikke tilgjengelig"
+-
+-#: rfc3315.c:900
++#: rfc3315.c:937
+ msgid "not on link"
+ msgstr ""
+
+-#: rfc3315.c:973 rfc3315.c:1151 rfc3315.c:1228
++#: rfc3315.c:1010 rfc3315.c:1195 rfc3315.c:1272
+ msgid "no binding found"
+ msgstr ""
+
+-#: rfc3315.c:1011
++#: rfc3315.c:1048
+ msgid "deprecated"
+ msgstr ""
+
+-#: rfc3315.c:1016
++#: rfc3315.c:1053
+ #, fuzzy
+ msgid "address invalid"
+ msgstr "adresse i bruk"
+
+-#: rfc3315.c:1061
++#: rfc3315.c:1100
+ msgid "confirm failed"
+ msgstr ""
+
+-#: rfc3315.c:1072
++#: rfc3315.c:1116
+ #, fuzzy
+ msgid "all addresses still on link"
+ msgstr "dårlig adresse ved %s linje %d"
+
+-#: rfc3315.c:1160
++#: rfc3315.c:1204
+ msgid "release received"
+ msgstr ""
+
+-#: rfc3315.c:2080
++#: rfc3315.c:2130
+ msgid "Cannot multicast to DHCPv6 server without correct interface"
+ msgstr ""
+
+@@ -2027,7 +2073,7 @@ msgstr ""
+ msgid "cannot create ICMPv6 socket: %s"
+ msgstr "kan ikke lage DHCP socket: %s"
+
+-#: auth.c:429
++#: auth.c:436
+ #, c-format
+ msgid "ignoring zone transfer request from %s"
+ msgstr ""
+@@ -2042,54 +2088,89 @@ msgstr "feilet
+ msgid "failed to create IPset control socket: %s"
+ msgstr "feilet å lage lytte socket: %s"
+
++#: dnssec.c:425 dnssec.c:469
++#, fuzzy, c-format
++msgid "failed to update mtime on %s: %s"
++msgstr "feilet å lese %s: %s"
++
+ #: blockdata.c:58
+ #, c-format
+ msgid "DNSSEC memory in use %u, max %u, allocated %u"
+ msgstr ""
+
+-#: tables.c:76
++#: tables.c:80
+ msgid "error: fill_addr missused"
+ msgstr ""
+
+-#: tables.c:105
++#: tables.c:109
+ #, fuzzy, c-format
+ msgid "failed to access pf devices: %s"
+ msgstr "feilet å få tilgang til %s: %s"
+
+-#: tables.c:119
++#: tables.c:123
+ #, fuzzy, c-format
+ msgid "warning: no opened pf devices %s"
+ msgstr "benytter lokale adresser kun for %s %s"
+
+-#: tables.c:127
++#: tables.c:131
+ #, fuzzy, c-format
+ msgid "error: cannot use table name %s"
+ msgstr "klarer ikke å få vertsnavn: %s"
+
+-#: tables.c:135
++#: tables.c:139
+ #, c-format
+ msgid "error: cannot strlcpy table name %s"
+ msgstr ""
+
+-#: tables.c:141
++#: tables.c:145
+ #, c-format
+ msgid "warning: pfr_add_tables: %s(%d)"
+ msgstr ""
+
+-#: tables.c:147
++#: tables.c:151
+ msgid "info: table created"
+ msgstr ""
+
+-#: tables.c:158
++#: tables.c:162
+ #, c-format
+ msgid "warning: DIOCR%sADDRS: %s"
+ msgstr ""
+
+-#: tables.c:162
++#: tables.c:166
+ #, fuzzy, c-format
+ msgid "%d addresses %s"
+ msgstr "les %s - %d adresser"
+
++#: inotify.c:46
++#, fuzzy, c-format
++msgid "failed to create inotify: %s"
++msgstr "feilet å lese %s: %s"
++
++#: inotify.c:60
++#, fuzzy, c-format
++msgid "cannot cannonicalise resolv-file %s: %s"
++msgstr "kan ikke åpne eller lage leie fil: %s"
++
++#: inotify.c:72
++#, c-format
++msgid "directory %s for resolv-file is missing, cannot poll"
++msgstr ""
++
++#: inotify.c:75 inotify.c:112
++#, fuzzy, c-format
++msgid "failed to create inotify for %s: %s"
++msgstr "feilet å lage lytte socket: %s"
++
++#: inotify.c:97
++#, fuzzy, c-format
++msgid "bad dynamic directory %s: %s"
++msgstr "kan ikke lese %s: %s"
++
++#: inotify.c:197
++#, c-format
++msgid "inotify, new or changed file %s"
++msgstr ""
++
+ #~ msgid "duplicate IP address %s in dhcp-config directive."
+ #~ msgstr "dubliserte IP adresser i %s dhcp-config direktiv."
+
+diff --git a/po/pl.po b/po/pl.po
+index 705f1779390f..362e41226644 100644
+--- a/po/pl.po
++++ b/po/pl.po
+@@ -21,70 +21,70 @@ msgstr ""
+ "X-Generator: Poedit 1.6.9\n"
+ "X-Language: pl_PL\n"
+
+-#: cache.c:505
++#: cache.c:523
+ msgid "Internal error in cache."
+ msgstr "Wewnętrzny błąd w pamięci podręcznej."
+
+-#: cache.c:908
++#: cache.c:941
+ #, c-format
+ msgid "failed to load names from %s: %s"
+ msgstr "nie potrafię wczytać nazw z %s: %s"
+
+-#: cache.c:934 dhcp.c:820
++#: cache.c:967 dhcp.c:825
+ #, c-format
+ msgid "bad address at %s line %d"
+ msgstr "błędny adres w pliku %s, w linii %d"
+
+-#: cache.c:985 dhcp.c:836
++#: cache.c:1018 dhcp.c:841
+ #, c-format
+ msgid "bad name at %s line %d"
+ msgstr "błędna nazwa w pliku %s, w linii %d"
+
+-#: cache.c:992 dhcp.c:911
++#: cache.c:1027 dhcp.c:916
+ #, c-format
+ msgid "read %s - %d addresses"
+ msgstr "wczytałem %s - %d adresów"
+
+-#: cache.c:1100
++#: cache.c:1135
+ msgid "cleared cache"
+ msgstr "wyczyszczono pamięć podręczną"
+
+-#: cache.c:1123
++#: cache.c:1164
+ #, c-format
+ msgid "No IPv4 address found for %s"
+ msgstr "Nie znalazłem adresu IPv4 komputera %s"
+
+-#: cache.c:1201
++#: cache.c:1242
+ #, c-format
+ msgid "%s is a CNAME, not giving it to the DHCP lease of %s"
+ msgstr "%s to nazwa CNAME, nie przypisuję jej dzierżawie DHCP %s"
+
+-#: cache.c:1225
++#: cache.c:1266
+ #, c-format
+ msgid "not giving name %s to the DHCP lease of %s because the name exists in %s with address %s"
+ msgstr "nazwa %s nie została nadana dzierżawie DHCP %s, ponieważ nazwa istnieje w %s i ma już adres %s"
+
+-#: cache.c:1366
++#: cache.c:1421
+ #, c-format
+ msgid "time %lu"
+ msgstr "czas %lu"
+
+-#: cache.c:1367
++#: cache.c:1422
+ #, c-format
+ msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
+ msgstr "wielkość pamięci podręcznej: %d; %d z %d miejsc aktualnych wpisów użyto ponownie."
+
+-#: cache.c:1369
++#: cache.c:1424
+ #, c-format
+ msgid "queries forwarded %u, queries answered locally %u"
+ msgstr "%u zapytań przesłanych dalej, %u odpowiedzi udzielonych samodzielnie"
+
+-#: cache.c:1372
++#: cache.c:1427
+ #, c-format
+ msgid "queries for authoritative zones %u"
+ msgstr "zapytań do stref autorytatywnych %u"
+
+-#: cache.c:1398
++#: cache.c:1453
+ #, c-format
+ msgid "server %s#%d: queries sent %u, retried or failed %u"
+ msgstr "serwer %s#%d: %u zapytań wysłanych, %u ponowionych lub nieudanych"
+@@ -98,7 +98,7 @@ msgstr "brak możliwości użycia generatora liczb losowych: %s"
+ msgid "failed to allocate memory"
+ msgstr "nie udało się przydzielić pamięci"
+
+-#: util.c:243 option.c:579
++#: util.c:243 option.c:598
+ msgid "could not get memory"
+ msgstr "nie można dostać pamięci"
+
+@@ -112,589 +112,622 @@ msgstr "błąd podczas próby utworzenia potoku: %s"
+ msgid "failed to allocate %d bytes"
+ msgstr "niemożliwość przydzielenia %d bajtów pamięci"
+
+-#: util.c:429
++#: util.c:430
+ #, c-format
+ msgid "infinite"
+ msgstr "nieskończona"
+
+-#: option.c:318
++#: option.c:330
+ msgid "Specify local address(es) to listen on."
+ msgstr "Wskazanie adresów, na których należy nasłuchiwać."
+
+-#: option.c:319
++#: option.c:331
+ msgid "Return ipaddr for all hosts in specified domains."
+ msgstr "Zwracanie adresu IP dla wszystkich hostów we wskazanych domenach."
+
+-#: option.c:320
++#: option.c:332
+ msgid "Fake reverse lookups for RFC1918 private address ranges."
+ msgstr "Wyłączenie przekazywania zapytań odwrotnych dla prywatnych zakresów IP."
+
+-#: option.c:321
++#: option.c:333
+ msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
+ msgstr "Traktowanie adresu IP jako NXDOMAIN (unieważnia ,,Verisign wildcard'')."
+
+-#: option.c:322
++#: option.c:334
+ #, c-format
+ msgid "Specify the size of the cache in entries (defaults to %s)."
+ msgstr "Wskazanie wielkości pamięci podręcznej (domyślnie: %s miejsc)."
+
+-#: option.c:323
++#: option.c:335
+ #, c-format
+ msgid "Specify configuration file (defaults to %s)."
+ msgstr "Wskazanie pliku konfiguracyjnego (domyślnie: %s)."
+
+-#: option.c:324
++#: option.c:336
+ msgid "Do NOT fork into the background: run in debug mode."
+ msgstr "NIE twórz procesu potomnego w tle: działanie w trybie debugowania."
+
+-#: option.c:325
++#: option.c:337
+ msgid "Do NOT forward queries with no domain part."
+ msgstr "Wyłączenie przekazywania zapytań bez podanej części domenowej."
+
+-#: option.c:326
++#: option.c:338
+ msgid "Return self-pointing MX records for local hosts."
+ msgstr "Zwracanie samowskazującego rekordu MX dla lokalnych hostów."
+
+-#: option.c:327
++#: option.c:339
+ msgid "Expand simple names in /etc/hosts with domain-suffix."
+ msgstr "Rozwijanie prostych nazw z /etc/hosts przyrostkiem domenowym."
+
+-#: option.c:328
++#: option.c:340
+ msgid "Don't forward spurious DNS requests from Windows hosts."
+ msgstr "Wyłączenie przekazywania pozornych zapytań DNS z komputerów działających pod Windows."
+
+-#: option.c:329
++#: option.c:341
+ msgid "Enable DHCP in the range given with lease duration."
+ msgstr "Włączenie serwera DHCP dla wskazanego zakresu adresów."
+
+-#: option.c:330
++#: option.c:342
+ #, c-format
+ msgid "Change to this group after startup (defaults to %s)."
+ msgstr "Po uruchomieniu zmiana grupy procesu na podaną (domyślnie: %s)."
+
+-#: option.c:331
++#: option.c:343
+ msgid "Set address or hostname for a specified machine."
+ msgstr "Ustawienie adresu lub nazwy dla wskazanego komputera."
+
+-#: option.c:332
++#: option.c:344
+ msgid "Read DHCP host specs from file."
+ msgstr "Wskazanie pliku z wartościami 'dhcp-host='."
+
+-#: option.c:333
++#: option.c:345
+ msgid "Read DHCP option specs from file."
+ msgstr "Wskazanie pliku z wartościami 'dhcp-option='."
+
+-#: option.c:334
++#: option.c:346
++#, fuzzy
++msgid "Read DHCP host specs from a directory."
++msgstr "Wskazanie pliku z wartościami 'dhcp-host='."
++
++#: option.c:347
++#, fuzzy
++msgid "Read DHCP options from a directory."
++msgstr "Wskazanie pliku z wartościami 'dhcp-option='."
++
++#: option.c:348
+ msgid "Evaluate conditional tag expression."
+ msgstr "Warunkowe ustawianie znaczników."
+
+-#: option.c:335
++#: option.c:349
+ #, c-format
+ msgid "Do NOT load %s file."
+ msgstr "NIE wczytywanie pliku %s."
+
+-#: option.c:336
++#: option.c:350
+ #, c-format
+ msgid "Specify a hosts file to be read in addition to %s."
+ msgstr "Wskazanie dodatkowego pliku 'hosts' oprócz %s."
+
+-#: option.c:337
++#: option.c:351
++#, fuzzy
++msgid "Read hosts files from a directory."
++msgstr "Wskazanie pliku z wartościami 'dhcp-host='."
++
++#: option.c:352
+ msgid "Specify interface(s) to listen on."
+ msgstr "Interfejsy, na których nasłuchiwać."
+
+-#: option.c:338
++#: option.c:353
+ msgid "Specify interface(s) NOT to listen on."
+ msgstr "Interfejsy, na których NIE nasłuchiwać."
+
+-#: option.c:339
++#: option.c:354
+ msgid "Map DHCP user class to tag."
+ msgstr "Przyporządkowanie znacznika w zależności od klasy użytkownika DHCP."
+
+-#: option.c:340
++#: option.c:355
+ msgid "Map RFC3046 circuit-id to tag."
+ msgstr "Przyporządkowanie znacznika w zależności od numeru obwodu (w rozumieniu RFC3046)."
+
+-#: option.c:341
++#: option.c:356
+ msgid "Map RFC3046 remote-id to tag."
+ msgstr "Przyporządkowanie znacznika w zależności od numeru agenta (w rozumieniu RFC3046)."
+
+-#: option.c:342
++#: option.c:357
+ msgid "Map RFC3993 subscriber-id to tag."
+ msgstr "Przyporządkowanie znacznika w zależności od numeru subskrybenta (w rozumieniu RFC3993)."
+
+-#: option.c:343
++#: option.c:358
+ msgid "Don't do DHCP for hosts with tag set."
+ msgstr "Wyłączenie DHCP dla hostów z określonym znacznikiem."
+
+-#: option.c:344
++#: option.c:359
+ msgid "Force broadcast replies for hosts with tag set."
+ msgstr "Wymuszenie odpowiedzi w trybie rozgłoszeniowym dla hostów z określonym znacznikiem."
+
+-#: option.c:345
++#: option.c:360
+ msgid "Do NOT fork into the background, do NOT run in debug mode."
+ msgstr "NIE twórz procesu potomnego w tle i NIE włączaj trybu debugowania."
+
+-#: option.c:346
++#: option.c:361
+ msgid "Assume we are the only DHCP server on the local network."
+ msgstr "Zakładanie, że jesteśmy jedynym serwerem DHCP w sieci lokalnej."
+
+-#: option.c:347
++#: option.c:362
+ #, c-format
+ msgid "Specify where to store DHCP leases (defaults to %s)."
+ msgstr "Ścieżka przechowywania pliku dzierżaw DHCP (domyślnie: %s)."
+
+-#: option.c:348
++#: option.c:363
+ msgid "Return MX records for local hosts."
+ msgstr "Włączenie zwracania rekordu MX dla hostów lokalnych."
+
+-#: option.c:349
++#: option.c:364
+ msgid "Specify an MX record."
+ msgstr "Specyfikacja rekordu MX."
+
+-#: option.c:350
++#: option.c:365
+ msgid "Specify BOOTP options to DHCP server."
+ msgstr "Określenie opcji BOOTP serwera DHCP."
+
+-#: option.c:351
++#: option.c:366
+ #, c-format
+ msgid "Do NOT poll %s file, reload only on SIGHUP."
+ msgstr "Wyłączenie obserwowania pliku %s; ponowne odczytywanie tylko po odebraniu sygnału SIGHUP."
+
+-#: option.c:352
++#: option.c:367
+ msgid "Do NOT cache failed search results."
+ msgstr "Wyłączenie przechowywania w pamięci podręcznej wyników nieudanych wyszukiwań."
+
+-#: option.c:353
++#: option.c:368
+ #, c-format
+ msgid "Use nameservers strictly in the order given in %s."
+ msgstr "Odpytywanie serwerów nazw w kolejności ich wystąpienia w %s."
+
+-#: option.c:354
++#: option.c:369
+ msgid "Specify options to be sent to DHCP clients."
+ msgstr "Specyfikacja opcji wysyłanej do klientów DHCP."
+
+-#: option.c:355
++#: option.c:370
+ msgid "DHCP option sent even if the client does not request it."
+ msgstr "Opcja DHCP wysyłana nawet jeżeli klient o nią nie prosi."
+
+-#: option.c:356
++#: option.c:371
+ msgid "Specify port to listen for DNS requests on (defaults to 53)."
+ msgstr "Wskazanie portu do nasłuchiwania zapytań DNS (domyślnie: 53)."
+
+-#: option.c:357
++#: option.c:372
+ #, c-format
+ msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
+ msgstr "Maksymalna obsługiwana wielkość pakietu EDNS.0 (domyślnie: %s)."
+
+-#: option.c:358
++#: option.c:373
+ msgid "Log DNS queries."
+ msgstr "Włączenie spisywania zapytań DNS do logu."
+
+-#: option.c:359
++#: option.c:374
+ msgid "Force the originating port for upstream DNS queries."
+ msgstr "Wymuszenie użycia wskazanego portu UDP do odpytywania nadrzędnych serwerów DNS i odbierania od nich odpowiedzi."
+
+-#: option.c:360
++#: option.c:375
+ msgid "Do NOT read resolv.conf."
+ msgstr "Wyłączenie czytania pliku resolv.conf."
+
+-#: option.c:361
++#: option.c:376
+ #, c-format
+ msgid "Specify path to resolv.conf (defaults to %s)."
+ msgstr "Wskazanie położenia pliku resolv.conf (domyślnie: %s)."
+
+-#: option.c:362
++#: option.c:377
+ msgid "Specify path to file with server= options"
+ msgstr "Wskazanie położenia pliku z opcjami server="
+
+-#: option.c:363
++#: option.c:378
+ msgid "Specify address(es) of upstream servers with optional domains."
+ msgstr "Wskazywanie adresów serwerów nazw, opcjonalnie z przypisaniem do domeny."
+
+-#: option.c:364
++#: option.c:379
+ msgid "Specify address of upstream servers for reverse address queries"
+ msgstr "Wskazanie serwerów nazw do odwrotnej translacji adresów."
+
+-#: option.c:365
++#: option.c:380
+ msgid "Never forward queries to specified domains."
+ msgstr "Wyłączenie przekazywania zapytań do wskazanych domen."
+
+-#: option.c:366
++#: option.c:381
+ msgid "Specify the domain to be assigned in DHCP leases."
+ msgstr "Wskazanie domeny dla serwera DHCP."
+
+-#: option.c:367
++#: option.c:382
+ msgid "Specify default target in an MX record."
+ msgstr "Określenie domyślnego celu w rekordzie MX."
+
+-#: option.c:368
++#: option.c:383
+ msgid "Specify time-to-live in seconds for replies from /etc/hosts."
+ msgstr "Określenie (w sekundach) czasu ważności odpowiedzi udzielonych na podstawie /etc/hosts (domyślnie 0)."
+
+-#: option.c:369
++#: option.c:384
+ msgid "Specify time-to-live in seconds for negative caching."
+ msgstr "Określenie (w sekundach) czasu ważności negatywnych odpowiedzi."
+
+-#: option.c:370
++#: option.c:385
+ msgid "Specify time-to-live in seconds for maximum TTL to send to clients."
+ msgstr "Ograniczenie maksymalnego czasu ważności odpowiedzi (TTL) podawanego klientom [w sekundach]."
+
+-#: option.c:371
++#: option.c:386
++#, fuzzy
++msgid "Specify time-to-live ceiling for cache."
++msgstr "Określenie (w sekundach) czasu ważności negatywnych odpowiedzi."
++
++#: option.c:387
++#, fuzzy
++msgid "Specify time-to-live floor for cache."
++msgstr "Określenie (w sekundach) czasu ważności negatywnych odpowiedzi."
++
++#: option.c:388
+ #, c-format
+ msgid "Change to this user after startup. (defaults to %s)."
+ msgstr "Zmiana użytkownika procesu na wskazanego (po uruchomieniu, domyślnie: %s)."
+
+-#: option.c:372
++#: option.c:389
+ msgid "Map DHCP vendor class to tag."
+ msgstr "Przyporządkowanie znacznika w zależności od typu klienta DHCP."
+
+-#: option.c:373
++#: option.c:390
+ msgid "Display dnsmasq version and copyright information."
+ msgstr "Wydrukowanie informacji o programie i ochronie praw autorskich."
+
+-#: option.c:374
++#: option.c:391
+ msgid "Translate IPv4 addresses from upstream servers."
+ msgstr "Tłumaczenie adresów IPv4 z serwerów nadrzędnych."
+
+-#: option.c:375
++#: option.c:392
+ msgid "Specify a SRV record."
+ msgstr "Określenie rekordu SRV."
+
+-#: option.c:376
++#: option.c:393
+ msgid "Display this message. Use --help dhcp for known DHCP options."
+ msgstr "Wyświetla ten komunikat. Użyj '--help dhcp' chcąc przejrzeć listę opcji DHCP (dhcp-option=xxx,...)."
+
+-#: option.c:377
++#: option.c:394
+ #, c-format
+ msgid "Specify path of PID file (defaults to %s)."
+ msgstr "Określenie ścieżki do pliku PID (domyślnie: %s)."
+
+-#: option.c:378
++#: option.c:395
+ #, c-format
+ msgid "Specify maximum number of DHCP leases (defaults to %s)."
+ msgstr "Maksymalna liczba dzierżaw DHCP (domyślnie: %s)."
+
+-#: option.c:379
++#: option.c:396
+ msgid "Answer DNS queries based on the interface a query was sent to."
+ msgstr "Uzależnienie odpowiedzi DNS od interfejsu, na którym odebrano zapytanie (wygodne dla serwerów kilku podsieci z różnymi adresami w /etc/hosts)."
+
+-#: option.c:380
++#: option.c:397
+ msgid "Specify TXT DNS record."
+ msgstr "Specyfikacja rekordu DNS TXT."
+
+-#: option.c:381
++#: option.c:398
+ msgid "Specify PTR DNS record."
+ msgstr "Specyfikacja rekordu DNS PTR."
+
+-#: option.c:382
++#: option.c:399
+ msgid "Give DNS name to IPv4 address of interface."
+ msgstr "Zwraca nazwę domenową powiązaną z adresem interfejsu sieciowego."
+
+-#: option.c:383
++#: option.c:400
+ msgid "Bind only to interfaces in use."
+ msgstr "Nasłuchiwanie tylko na wykorzystywanych interfejsach (umożliwia uruchomienie osobnych serwerów dla różnych kart)."
+
+-#: option.c:384
++#: option.c:401
+ #, c-format
+ msgid "Read DHCP static host information from %s."
+ msgstr "Wczytanie przyporządkowań adresów z %s."
+
+-#: option.c:385
++#: option.c:402
+ msgid "Enable the DBus interface for setting upstream servers, etc."
+ msgstr "Włączenie używania interfejsu DBus do informowania o zmianach konfiguracji."
+
+-#: option.c:386
++#: option.c:403
+ msgid "Do not provide DHCP on this interface, only provide DNS."
+ msgstr "Uruchomienie na wskazanym interfejsie tylko DNS-a, bez usług DHCP i TFTP."
+
+-#: option.c:387
++#: option.c:404
+ msgid "Enable dynamic address allocation for bootp."
+ msgstr "Włączenie dynamicznego przydzielania adresów dla klientów BOOTP."
+
+-#: option.c:388
++#: option.c:405
+ msgid "Map MAC address (with wildcards) to option set."
+ msgstr "Przyporządkowanie znacznika w zależności od adresu MAC (można używać uogólnień: *)."
+
+-#: option.c:389
++#: option.c:406
+ msgid "Treat DHCP requests on aliases as arriving from interface."
+ msgstr "Traktowanie żądań DHCP odebranych na interfejsach alias, ..., jako odebranych na iface."
+
+-#: option.c:390
++#: option.c:407
+ msgid "Disable ICMP echo address checking in the DHCP server."
+ msgstr "Pominięcie sprawdzania za pomocą ICMP niezajętości adresu przed jego wydzierżawieniem."
+
+-#: option.c:391
++#: option.c:408
+ msgid "Shell script to run on DHCP lease creation and destruction."
+ msgstr "Skrypt powłoki uruchamiany po przyznaniu lub zwolnieniu adresu."
+
+-#: option.c:392
++#: option.c:409
+ msgid "Lua script to run on DHCP lease creation and destruction."
+ msgstr "Skrypt Lua uruchamiany po przyznaniu lub zwolnieniu adresu."
+
+-#: option.c:393
++#: option.c:410
+ msgid "Run lease-change scripts as this user."
+ msgstr "Wskazanie użytkownika z którego uprawnieniami będą uruchamiane skrypty."
+
+-#: option.c:394
++#: option.c:411
+ msgid "Read configuration from all the files in this directory."
+ msgstr "Wczytanie wszystkich plików ze wskazanego katalogu jako konfiguracyjnych."
+
+-#: option.c:395
++#: option.c:412
+ msgid "Log to this syslog facility or file. (defaults to DAEMON)"
+ msgstr "Wskazanie kanału syslog-a do którego mają trafiać komunikaty (domyślnie: DAEMON)"
+
+-#: option.c:396
++#: option.c:413
+ msgid "Do not use leasefile."
+ msgstr "Nieużywanie bazy dzierżaw."
+
+-#: option.c:397
++#: option.c:414
+ #, c-format
+ msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
+ msgstr "Maksymalna liczba jednocześnie obsługiwanych zapytań DNS (domyślnie: %s)"
+
+-#: option.c:398
++#: option.c:415
+ #, c-format
+ msgid "Clear DNS cache when reloading %s."
+ msgstr "Czyszczenie pamięci podręcznej serwera nazw w przypadku ponownego odczytu %s."
+
+-#: option.c:399
++#: option.c:416
+ msgid "Ignore hostnames provided by DHCP clients."
+ msgstr "Nie zwracanie uwagi na nazwę podawaną przez klienta w przypadku dopasowania wszystkich wymienionych znaczników."
+
+-#: option.c:400
++#: option.c:417
+ msgid "Do NOT reuse filename and server fields for extra DHCP options."
+ msgstr "Wyłączenie oszczędzania miejsca w pakiecie DHCP przez przesuwanie pól servername i filename do opcji DHCP. Wymusza prostszy tryb budowy pakietu rozwiązując problemy z nieprzystosowanymi klientami DHCP."
+
+-#: option.c:401
++#: option.c:418
+ msgid "Enable integrated read-only TFTP server."
+ msgstr "Włączenie wbudowanego serwera TFTP (tylko do wysyłania)."
+
+-#: option.c:402
++#: option.c:419
+ msgid "Export files by TFTP only from the specified subtree."
+ msgstr "Ograniczenie działania serwera TFTP do wskazanego katalogu i podkatalogów. Nazwy z .. są odrzucane, / odnosi się do wskazanego katalogu."
+
+-#: option.c:403
++#: option.c:420
+ msgid "Add client IP address to tftp-root."
+ msgstr "Doklejanie adresu IP klienta do głównego katalogu TFTP. Jeżeli wynikowy katalog nie istnieje, nadal wykorzystuje się tftp-root."
+
+-#: option.c:404
++#: option.c:421
+ msgid "Allow access only to files owned by the user running dnsmasq."
+ msgstr "Ograniczenie dostępu do plików przez TFTP do tych, których właścicielem jest użytkownik uruchamiający dnsmasq-a."
+
+-#: option.c:405
++#: option.c:422
+ #, c-format
+ msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
+ msgstr "Maksymalna liczba jednocześnie obsługiwanych połączeń TFTP (domyślnie %s)."
+
+-#: option.c:406
++#: option.c:423
+ msgid "Disable the TFTP blocksize extension."
+ msgstr "Wyłączenie możliwości negocjowania wielkości bloku dla przesyłów przez TFTP."
+
+-#: option.c:407
++#: option.c:424
+ msgid "Convert TFTP filenames to lowercase"
+ msgstr "Konwertowanie nazw plików żądanych przez TFTP do małych liter"
+
+-#: option.c:408
++#: option.c:425
+ msgid "Ephemeral port range for use by TFTP transfers."
+ msgstr "Wskazanie zakresu portów do użytku TFTP."
+
+-#: option.c:409
++#: option.c:426
+ msgid "Extra logging for DHCP."
+ msgstr "Włączenie spisywania w logu operacji DHCP."
+
+-#: option.c:410
++#: option.c:427
+ msgid "Enable async. logging; optionally set queue length."
+ msgstr "Włączenie asynchronicznego zapisywania do logu z ewentualnym wskazaniem długości kolejki."
+
+-#: option.c:411
++#: option.c:428
+ msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
+ msgstr "Odfiltrowywanie adresów wskazujących na komputery w sieciach wewnętrznych spośród odpowiedzi od zewnętrznych serwerów DNS."
+
+-#: option.c:412
++#: option.c:429
+ msgid "Allow rebinding of 127.0.0.0/8, for RBL servers."
+ msgstr "Zezwolenie na przekazywanie odpowiedzi w klasie 127.0.0.0/8. Dla serwerów RBL."
+
+-#: option.c:413
++#: option.c:430
+ msgid "Inhibit DNS-rebind protection on this domain."
+ msgstr "Dezaktywacja zabezpieczenia przed atakami DNS-rebind dla wskazanych domen."
+
+-#: option.c:414
++#: option.c:431
+ msgid "Always perform DNS queries to all servers."
+ msgstr "Jednoczesne odpytywanie wszystkich serwerów nadrzędnych; klientowi przekazywana jest pierwsza odpowiedź."
+
+-#: option.c:415
++#: option.c:432
+ msgid "Set tag if client includes matching option in request."
+ msgstr "Ustawienie znacznika jeżeli w żądaniu DHCP pojawi się wskazana opcja, ewentualnie o konkretnej wartości."
+
+-#: option.c:416
++#: option.c:433
+ msgid "Use alternative ports for DHCP."
+ msgstr "Użycie alternatywnych portów dla usługi DHCP."
+
+-#: option.c:417
++#: option.c:434
+ msgid "Specify NAPTR DNS record."
+ msgstr "Specyfikacja rekordu DNS NAPTR."
+
+-#: option.c:418
++#: option.c:435
+ msgid "Specify lowest port available for DNS query transmission."
+ msgstr "Ustawienie dolnej granicy numerów portów do przesyłania zapytań DNS."
+
+-#: option.c:419
++#: option.c:436
+ msgid "Use only fully qualified domain names for DHCP clients."
+ msgstr "Przechowywanie w serwerze DNS dnsmasq-a tylko w pełni kwalifikowanych nazw zgłaszanych przez klientów DHCP."
+
+-#: option.c:420
++#: option.c:437
+ msgid "Generate hostnames based on MAC address for nameless clients."
+ msgstr "Generowanie nazw na podstawie MAC-adresów dla klientów bez nazwy."
+
+-#: option.c:421
++#: option.c:438
+ msgid "Use these DHCP relays as full proxies."
+ msgstr "Traktowanie wskazanych serwerów pośredniczących DHCP jako działających w trybie \"pełnomocnika\" (full-proxy)."
+
+-#: option.c:422
++#: option.c:439
+ msgid "Relay DHCP requests to a remote server"
+ msgstr "Przekazywanie żądań DHCP do zdalnego serwera"
+
+-#: option.c:423
++#: option.c:440
+ msgid "Specify alias name for LOCAL DNS name."
+ msgstr "Wskazanie synonimu nazwy komputera lokalnego - znanego z /etc/hosts albo z DHCP."
+
+-#: option.c:424
++#: option.c:441
+ msgid "Prompt to send to PXE clients."
+ msgstr "Zgłoszenie wysyłane klientom PXE."
+
+-#: option.c:425
++#: option.c:442
+ msgid "Boot service for PXE menu."
+ msgstr "Składnik menu PXE (--> man)."
+
+-#: option.c:426
++#: option.c:443
+ msgid "Check configuration syntax."
+ msgstr "Sprawdzenie składni."
+
+-#: option.c:427
++#: option.c:444
+ msgid "Add requestor's MAC address to forwarded DNS queries."
+ msgstr "Przekazywanie MAC-adresu komputera pytającego w ruchu wychodzącym DNS."
+
+-#: option.c:428
++#: option.c:445
+ msgid "Add requestor's IP subnet to forwarded DNS queries."
+ msgstr "Zamieszczanie adresu IP pytającego w przekazywanych zapytaniach DNS."
+
+-#: option.c:429
++#: option.c:446
+ msgid "Proxy DNSSEC validation results from upstream nameservers."
+ msgstr "Przekazywanie wyników weryfikacji DNSSEC z serwerów nadrzędnych."
+
+-#: option.c:430
++#: option.c:447
+ msgid "Attempt to allocate sequential IP addresses to DHCP clients."
+ msgstr "Zmiana sposobu przydzielania adresów IP na sekwencyjny."
+
+-#: option.c:431
++#: option.c:448
+ msgid "Copy connection-track mark from queries to upstream connections."
+ msgstr "Zachowanie znacznika połączenia z odebranego zapytania DNS w ruchu zewnętrznym."
+
+-#: option.c:432
++#: option.c:449
+ msgid "Allow DHCP clients to do their own DDNS updates."
+ msgstr "Zezwolenie klientom DHCP na uaktualnianie DDNS-ów."
+
+-#: option.c:433
++#: option.c:450
+ msgid "Send router-advertisements for interfaces doing DHCPv6"
+ msgstr "Załączenie anonsowania (RA) na interfejsach serwujących DHCPv6"
+
+-#: option.c:434
++#: option.c:451
+ msgid "Specify DUID_EN-type DHCPv6 server DUID"
+ msgstr "Określenie DHCPv6 DUID"
+
+-#: option.c:435
++#: option.c:452
+ msgid "Specify host (A/AAAA and PTR) records"
+ msgstr "Określenie rekordów A/AAAA i PTR"
+
+-#: option.c:436
++#: option.c:453
+ msgid "Specify arbitrary DNS resource record"
+ msgstr "Określenie rekordu TXT"
+
+-#: option.c:437
++#: option.c:454
+ msgid "Bind to interfaces in use - check for new interfaces"
+ msgstr "Dynamiczne podpinanie do interfejsów sieciowych"
+
+-#: option.c:438
++#: option.c:455
+ msgid "Export local names to global DNS"
+ msgstr "Eksportowanie lokalnych nazw hostów do globalnego DNS-a"
+
+-#: option.c:439
++#: option.c:456
+ msgid "Domain to export to global DNS"
+ msgstr "Domena pod którą będą eksportowane lokalne nazwy"
+
+-#: option.c:440
++#: option.c:457
+ msgid "Set TTL for authoritative replies"
+ msgstr "Określenie TTL dla odpowiedzi autorytatywnych"
+
+-#: option.c:441
++#: option.c:458
+ msgid "Set authoritive zone information"
+ msgstr "Określenie danych strefy autorytatywnej (SOA)"
+
+-#: option.c:442
++#: option.c:459
+ msgid "Secondary authoritative nameservers for forward domains"
+ msgstr "Pomocnicze serwery autorytatywne dla forwardowanych domen"
+
+-#: option.c:443
++#: option.c:460
+ msgid "Peers which are allowed to do zone transfer"
+ msgstr "Wskazanie serwerów uprawnionych do transferu stref"
+
+-#: option.c:444
++#: option.c:461
+ msgid "Specify ipsets to which matching domains should be added"
+ msgstr "Wyszczególnienie ipset-ów, do których będą dopisywane adresy IP leżące we wskazanych domenach"
+
+-#: option.c:445
++#: option.c:462
+ msgid "Specify a domain and address range for synthesised names"
+ msgstr "Wskazanie domeny i zakresu adresów dla generowanych nazw"
+
+-#: option.c:446
++#: option.c:463
+ msgid "Activate DNSSEC validation"
+ msgstr "Uaktywnienie walidacji DNSSEC"
+
+-#: option.c:447
++#: option.c:464
+ msgid "Specify trust anchor key digest."
+ msgstr "Wskazanie punktu zaufania dla uwierzytelniania DNSSEC."
+
+-#: option.c:448
++#: option.c:465
+ msgid "Disable upstream checking for DNSSEC debugging."
+ msgstr "Akceptowanie nieuwiarygodnionych odpowiedzi DNSSEC (ustawienie bitu CD w zapytaniach)."
+
+-#: option.c:449
++#: option.c:466
+ msgid "Ensure answers without DNSSEC are in unsigned zones."
+ msgstr "Upewnianie się, że odpowiedzi bez DNSSEC pochodzą ze stref niepodpisanych."
+
+-#: option.c:450
++#: option.c:467
+ msgid "Don't check DNSSEC signature timestamps until first cache-reload"
+ msgstr "Wyłączenie sprawdzania sygnatur czasowych DNSSEC do pierwszego przeładowania pamięci podręcznej."
+
+-#: option.c:452
++#: option.c:468
++msgid "Timestamp file to verify system clock for DNSSEC"
++msgstr ""
++
++#: option.c:470
+ msgid "Specify DHCPv6 prefix class"
+ msgstr "Określenie prefiksu klasy DHCPv6"
+
+-#: option.c:454
++#: option.c:472
+ msgid "Set priority, resend-interval and router-lifetime"
+ msgstr "Ustawianie priorytetu, okresu rozsyłania oraz czasu życia rutera (RA)."
+
+-#: option.c:455
++#: option.c:473
+ msgid "Do not log routine DHCP."
+ msgstr "Wyłączenie logowania zwyczajnego DHCP."
+
+-#: option.c:456
++#: option.c:474
+ msgid "Do not log routine DHCPv6."
+ msgstr "Wyłączenie logowania zwyczajnego DHCPv6."
+
+-#: option.c:457
++#: option.c:475
+ msgid "Do not log RA."
+ msgstr "Wyłączenie logowania RA."
+
+-#: option.c:458
++#: option.c:476
+ msgid "Accept queries only from directly-connected networks"
+ msgstr "Akceptowanie zapytań wyłącznie z sieci podpiętych bezpośrednio."
+
+-#: option.c:459
++#: option.c:477
+ msgid "Detect and remove DNS forwarding loops"
+ msgstr "Wykrywanie i usuwanie pętli zapytań DNS."
+
+-#: option.c:661
++#: option.c:478
++msgid "Ignore DNS responses containing ipaddr."
++msgstr ""
++
++#: option.c:680
+ #, c-format
+ msgid ""
+ "Usage: dnsmasq [options]\n"
+@@ -703,312 +736,312 @@ msgstr ""
+ "Użycie: dnsmasq [opcje]\n"
+ "\n"
+
+-#: option.c:663
++#: option.c:682
+ #, c-format
+ msgid "Use short options only on the command line.\n"
+ msgstr "W tym systemie w linii poleceń można używać wyłącznie jednoliterowych opcji.\n"
+
+-#: option.c:665
++#: option.c:684
+ #, c-format
+ msgid "Valid options are:\n"
+ msgstr "Dostępne opcje:\n"
+
+-#: option.c:722 option.c:726
++#: option.c:741 option.c:745
+ msgid "bad port"
+ msgstr "nieprawidłowy numer portu"
+
+-#: option.c:753 option.c:785
++#: option.c:772 option.c:804
+ msgid "interface binding not supported"
+ msgstr "nie ma możliwości dowiązywania do interfejsu"
+
+-#: option.c:762 option.c:3494
++#: option.c:781 option.c:3570
+ msgid "bad interface name"
+ msgstr "nieprawidłowa nazwa interfejsu"
+
+-#: option.c:792
++#: option.c:811
+ msgid "bad address"
+ msgstr "zły adres"
+
+-#: option.c:974
++#: option.c:993
+ msgid "unsupported encapsulation for IPv6 option"
+ msgstr "nieobsługiwany rodzaj enkapsulacji opcji IPv6"
+
+-#: option.c:988
++#: option.c:1007
+ msgid "bad dhcp-option"
+ msgstr "błąd w dhcp-option"
+
+-#: option.c:1056
++#: option.c:1075
+ msgid "bad IP address"
+ msgstr "zły adres IP"
+
+-#: option.c:1059 option.c:1197 option.c:2812
++#: option.c:1078 option.c:1216 option.c:2888
+ msgid "bad IPv6 address"
+ msgstr "zły adres IPv6"
+
+-#: option.c:1224 option.c:1318
++#: option.c:1243 option.c:1337
+ msgid "bad domain in dhcp-option"
+ msgstr "nieprawidłowa nazwa domeny w dhcp-option"
+
+-#: option.c:1356
++#: option.c:1375
+ msgid "dhcp-option too long"
+ msgstr "zbyt długa dhcp-option (>255 znaków)"
+
+-#: option.c:1363
++#: option.c:1382
+ msgid "illegal dhcp-match"
+ msgstr "niedopuszczalne dhcp-match"
+
+-#: option.c:1425
++#: option.c:1444
+ msgid "illegal repeated flag"
+ msgstr "wielokrotne użycie opcji niedozwolone (pojawiła się wcześniej w linii poleceń)"
+
+-#: option.c:1433
++#: option.c:1452
+ msgid "illegal repeated keyword"
+ msgstr "wielokrotne użycie opcji niedozwolone (pojawiła się wsześniej w pliku konfiguracyjnym)"
+
+-#: option.c:1495 option.c:4092
++#: option.c:1517 option.c:4186
+ #, c-format
+ msgid "cannot access directory %s: %s"
+ msgstr "brak dostępu do katalogu %s: %s"
+
+-#: option.c:1541 tftp.c:493
++#: option.c:1563 tftp.c:493
+ #, c-format
+ msgid "cannot access %s: %s"
+ msgstr "brak dostępu do %s: %s"
+
+-#: option.c:1588
++#: option.c:1615
+ msgid "setting log facility is not possible under Android"
+ msgstr "zmiana log-facility w systemie Android nie jest możliwa"
+
+-#: option.c:1597
++#: option.c:1624
+ msgid "bad log facility"
+ msgstr "nierozpoznany znacznik logów"
+
+-#: option.c:1650
++#: option.c:1677
+ msgid "bad MX preference"
+ msgstr "nieprawidłowa wartość preferencji MX"
+
+-#: option.c:1655
++#: option.c:1682
+ msgid "bad MX name"
+ msgstr "nieprawidłowa nazwa MX"
+
+-#: option.c:1669
++#: option.c:1696
+ msgid "bad MX target"
+ msgstr "nieprawidłowa wartość celu MX"
+
+-#: option.c:1681
++#: option.c:1708
+ msgid "cannot run scripts under uClinux"
+ msgstr "w uClinuksie nie ma możliwości uruchamiania skryptów"
+
+-#: option.c:1683
++#: option.c:1710
+ msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts"
+ msgstr "żeby mieć możliwość używania skryptów wywoływanych przy zmianie dzierżawy, przekompiluj dnsmasq-a z włączoną flagą HAVE_SCRIPT"
+
+-#: option.c:1687
++#: option.c:1714
+ msgid "recompile with HAVE_LUASCRIPT defined to enable Lua scripts"
+ msgstr "używanie skryptów Lua, wymaga skompilowania dnsmasq-a z flagą HAVE_LUASCRIPT"
+
+-#: option.c:1928 option.c:1966 option.c:2015
++#: option.c:1970 option.c:2015 option.c:2071
+ msgid "bad prefix"
+ msgstr "zła maska"
+
+-#: option.c:2289
++#: option.c:2352
+ msgid "recompile with HAVE_IPSET defined to enable ipset directives"
+ msgstr "chcąc korzystać z ipsets przekompiluj dnsmasq-a z HAVE_IPSET"
+
+-#: option.c:2469
++#: option.c:2545
+ msgid "bad port range"
+ msgstr "nieprawidłowy zakres numerów portów"
+
+-#: option.c:2485
++#: option.c:2561
+ msgid "bad bridge-interface"
+ msgstr "nieprawidłowa nazwa urządzenia w bridge-interface"
+
+-#: option.c:2545
++#: option.c:2621
+ msgid "only one tag allowed"
+ msgstr "można wskazać tylko jeden znacznik sieci"
+
+-#: option.c:2565 option.c:2577 option.c:2683 option.c:2724
++#: option.c:2641 option.c:2653 option.c:2759 option.c:2800
+ msgid "bad dhcp-range"
+ msgstr "nieprawidłowy zakres dhcp-range"
+
+-#: option.c:2592
++#: option.c:2668
+ msgid "inconsistent DHCP range"
+ msgstr "niespójny zakres adresów DHCP"
+
+-#: option.c:2651
++#: option.c:2727
+ msgid "prefix length must be exactly 64 for RA subnets"
+ msgstr "długość prefiksu musi wynosić dokładnie 64 dla podsieci RA"
+
+-#: option.c:2653
++#: option.c:2729
+ msgid "prefix length must be exactly 64 for subnet constructors"
+ msgstr "długość prefiksu musi wynosić dokładnie 64 dla konstruktorów podsieci"
+
+-#: option.c:2657
++#: option.c:2733
+ msgid "prefix length must be at least 64"
+ msgstr "długość prefiksu musi wynosić co najmniej 64"
+
+-#: option.c:2660
++#: option.c:2736
+ msgid "inconsistent DHCPv6 range"
+ msgstr "niespójny zakres adresów DHCPv6"
+
+-#: option.c:2671
++#: option.c:2747
+ msgid "prefix must be zero with \"constructor:\" argument"
+ msgstr "prefiks musi wynosić zero z argumentem \"constructor:\""
+
+-#: option.c:2782 option.c:2830
++#: option.c:2858 option.c:2906
+ msgid "bad hex constant"
+ msgstr "zapis niezgodny z formatem szesnastkowym"
+
+-#: option.c:2804
++#: option.c:2880
+ msgid "cannot match tags in --dhcp-host"
+ msgstr "--dhcp-host nie dopuszcza dopasowywania na podstawie znaczników"
+
+-#: option.c:2852
++#: option.c:2928
+ #, c-format
+ msgid "duplicate dhcp-host IP address %s"
+ msgstr "powtórzony adres IP %s w specyfikacji dhcp-host"
+
+-#: option.c:2910
++#: option.c:2986
+ msgid "bad DHCP host name"
+ msgstr "niedopuszczalna nazwa komputera w dhcp-host"
+
+-#: option.c:2992
++#: option.c:3068
+ msgid "bad tag-if"
+ msgstr "nieprawidłowa składnia 'tag-if'"
+
+-#: option.c:3316 option.c:3710
++#: option.c:3392 option.c:3786
+ msgid "invalid port number"
+ msgstr "nieprawidłowy numer portu"
+
+-#: option.c:3378
++#: option.c:3454
+ msgid "bad dhcp-proxy address"
+ msgstr "zły adres dhcp-proxy"
+
+-#: option.c:3404
++#: option.c:3480
+ msgid "Bad dhcp-relay"
+ msgstr "zły dhcp-relay"
+
+-#: option.c:3430
++#: option.c:3506
+ msgid "bad RA-params"
+ msgstr "nieprawidłowe argumenty RA"
+
+-#: option.c:3439
++#: option.c:3515
+ msgid "bad DUID"
+ msgstr "zły DUID"
+
+-#: option.c:3481
++#: option.c:3557
+ msgid "invalid alias range"
+ msgstr "nieprawidłowy zakres adresów w --alias"
+
+-#: option.c:3535
++#: option.c:3611
+ msgid "bad CNAME"
+ msgstr "zła CNAME"
+
+-#: option.c:3540
++#: option.c:3616
+ msgid "duplicate CNAME"
+ msgstr "powtórzona CNAME"
+
+-#: option.c:3560
++#: option.c:3636
+ msgid "bad PTR record"
+ msgstr "nieprawidłowy zapis rekordu PTR"
+
+-#: option.c:3591
++#: option.c:3667
+ msgid "bad NAPTR record"
+ msgstr "nieprawidłowy zapis rekordu NAPTR"
+
+-#: option.c:3625
++#: option.c:3701
+ msgid "bad RR record"
+ msgstr "nieprawidłowy zapis rekordu RR"
+
+-#: option.c:3655
++#: option.c:3731
+ msgid "bad TXT record"
+ msgstr "nieprawidłowy zapis rekordu TXT"
+
+-#: option.c:3696
++#: option.c:3772
+ msgid "bad SRV record"
+ msgstr "nieprawidłowy zapis rekordu SRV"
+
+-#: option.c:3703
++#: option.c:3779
+ msgid "bad SRV target"
+ msgstr "nieprawidłowa wartość celu SRV"
+
+-#: option.c:3717
++#: option.c:3793
+ msgid "invalid priority"
+ msgstr "nieprawidłowy priorytet"
+
+-#: option.c:3724
++#: option.c:3800
+ msgid "invalid weight"
+ msgstr "nieprawidłowa waga"
+
+-#: option.c:3748
++#: option.c:3824
+ msgid "Bad host-record"
+ msgstr "nieprawidłowy zapis host-record"
+
+-#: option.c:3765
++#: option.c:3841
+ msgid "Bad name in host-record"
+ msgstr "niedopuszczalna nazwa w host-record"
+
+-#: option.c:3826
++#: option.c:3906
+ msgid "bad trust anchor"
+ msgstr "nieprawidłowa specyfikacja punktu zaufania"
+
+-#: option.c:3840
++#: option.c:3920
+ msgid "bad HEX in trust anchor"
+ msgstr "zły zapis szesnastkowy"
+
+-#: option.c:3850
++#: option.c:3930
+ msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DNSSEC/DBus support)"
+ msgstr "nieobsługiwana opcja (sprawdź, czy obsługa DHCP/TFTP/DNSSEC/DBus została wkompilowana)"
+
+-#: option.c:3909
++#: option.c:3989
+ msgid "missing \""
+ msgstr "brakuje \""
+
+-#: option.c:3966
++#: option.c:4046
+ msgid "bad option"
+ msgstr "nieprawidłowa opcja"
+
+-#: option.c:3968
++#: option.c:4048
+ msgid "extraneous parameter"
+ msgstr "nadwyżkowy parametr"
+
+-#: option.c:3970
++#: option.c:4050
+ msgid "missing parameter"
+ msgstr "brak parametru"
+
+-#: option.c:3972
++#: option.c:4052
+ msgid "illegal option"
+ msgstr "niedopuszczalna opcja"
+
+-#: option.c:3979
++#: option.c:4059
+ msgid "error"
+ msgstr "błąd"
+
+-#: option.c:3981
++#: option.c:4061
+ #, c-format
+ msgid " at line %d of %s"
+ msgstr " w linii %d pliku %s"
+
+-#: option.c:4045 option.c:4168 tftp.c:667
+-#, c-format
+-msgid "cannot read %s: %s"
+-msgstr "błąd odczytu z pliku %s: %s"
+-
+-#: option.c:4229 option.c:4265
++#: option.c:4076 option.c:4323 option.c:4359
+ #, c-format
+ msgid "read %s"
+ msgstr "przeczytałem %s"
+
+-#: option.c:4331
++#: option.c:4139 option.c:4262 tftp.c:667
++#, c-format
++msgid "cannot read %s: %s"
++msgstr "błąd odczytu z pliku %s: %s"
++
++#: option.c:4425
+ msgid "junk found in command line"
+ msgstr "jakieś śmieci w linii poleceń"
+
+-#: option.c:4366
++#: option.c:4460
+ #, c-format
+ msgid "Dnsmasq version %s %s\n"
+ msgstr "Dnsmasq, wersja %s %s\n"
+
+-#: option.c:4367
++#: option.c:4461
+ #, c-format
+ msgid ""
+ "Compile time options: %s\n"
+@@ -1017,89 +1050,89 @@ msgstr ""
+ "Wkompilowane opcje %s\n"
+ "\n"
+
+-#: option.c:4368
++#: option.c:4462
+ #, c-format
+ msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
+ msgstr "Autor nie daje ŻADNYCH GWARANCJI egzekwowalnych prawnie.\n"
+
+-#: option.c:4369
++#: option.c:4463
+ #, c-format
+ msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
+ msgstr "Dnsmasq jest wolnym oprogramowaniem, możesz go rozprowadzać\n"
+
+-#: option.c:4370
++#: option.c:4464
+ #, c-format
+ msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
+ msgstr "na warunkach określonych w GNU General Public Licence, w wersji 2 lub 3.\n"
+
+-#: option.c:4381
++#: option.c:4475
+ msgid "try --help"
+ msgstr "spróbuj: --help"
+
+-#: option.c:4383
++#: option.c:4477
+ msgid "try -w"
+ msgstr "spróbuj: -w"
+
+-#: option.c:4385
++#: option.c:4479
+ #, c-format
+ msgid "bad command line options: %s"
+ msgstr "nieprawidłowa opcja w linii poleceń %s"
+
+-#: option.c:4434
++#: option.c:4535
+ #, c-format
+ msgid "cannot get host-name: %s"
+ msgstr "nie można pobrać nazwy hosta: %s"
+
+-#: option.c:4462
++#: option.c:4563
+ msgid "only one resolv.conf file allowed in no-poll mode."
+ msgstr "w trybie no-poll można wskazać najwyżej jeden plik resolv.conf."
+
+-#: option.c:4472
++#: option.c:4573
+ msgid "must have exactly one resolv.conf to read domain from."
+ msgstr "musisz mieć dokładnie jeden plik resolv.conf do odczytu domen."
+
+-#: option.c:4475 network.c:1506 dhcp.c:769
++#: option.c:4576 network.c:1506 dhcp.c:774
+ #, c-format
+ msgid "failed to read %s: %s"
+ msgstr "nie udało się odczytać %s: %s"
+
+-#: option.c:4492
++#: option.c:4593
+ #, c-format
+ msgid "no search directive found in %s"
+ msgstr "brak wytycznych wyszukiwania w %s"
+
+-#: option.c:4513
++#: option.c:4614
+ msgid "there must be a default domain when --dhcp-fqdn is set"
+ msgstr "w przypadku używania --dhcp-fqdn trzeba wskazać domyślną domenę"
+
+-#: option.c:4522
++#: option.c:4623
+ msgid "syntax check OK"
+ msgstr "składnia sprawdzona, jest prawidłowa"
+
+-#: forward.c:114
++#: forward.c:111
+ #, c-format
+ msgid "failed to send packet: %s"
+ msgstr "wysyłanie pakietu nie powiodło się: %s"
+
+-#: forward.c:574
++#: forward.c:572
+ msgid "discarding DNS reply: subnet option mismatch"
+ msgstr "odrzucam odpowiedź DNS: nie zgadza się specyfikacja podsieci"
+
+-#: forward.c:597
++#: forward.c:595
+ #, c-format
+ msgid "nameserver %s refused to do a recursive query"
+ msgstr "serwer nazw %s odmawia wykonania zapytania rekurencyjnego"
+
+-#: forward.c:629
++#: forward.c:627
+ #, c-format
+ msgid "possible DNS-rebind attack detected: %s"
+ msgstr "prawdopodobnie wykryto atak DNS-rebind: %s"
+
+-#: forward.c:1132 forward.c:1663
++#: forward.c:1156 forward.c:1722
+ msgid "Ignoring query from non-local network"
+ msgstr "Ignorowanie zapytań z sieci pozalokalnych."
+
+-#: forward.c:2101
++#: forward.c:2178
+ #, c-format
+ msgid "Maximum number of concurrent DNS queries reached (max: %d)"
+ msgstr "Osiągnięto graniczną ilość jednocześnie obsługiwanych zapytań DNS (maks: %d)"
+@@ -1189,263 +1222,282 @@ msgstr "używam serwera nazw %s#%d (przez %s)"
+ msgid "using nameserver %s#%d"
+ msgstr "używam serwera nazw %s#%d"
+
+-#: dnsmasq.c:154
+-msgid "No trust anchors provided for DNSSEC"
++#: dnsmasq.c:149
++msgid "dhcp-hostsdir, dhcp-optsdir and hostsdir are not supported on this platform"
++msgstr ""
++
++#: dnsmasq.c:156
++#, fuzzy
++msgid "no trust anchors provided for DNSSEC"
+ msgstr "Nie wskazano punktów zaufania dla DNSSEC."
+
+-#: dnsmasq.c:157
+-msgid "Cannot reduce cache size from default when DNSSEC enabled"
++#: dnsmasq.c:159
++#, fuzzy
++msgid "cannot reduce cache size from default when DNSSEC enabled"
+ msgstr "Brak możliwości zmniejszenia pamięci podręcznej poniżej wielkości domyślnej w przypadku używania DNSSEC."
+
+-#: dnsmasq.c:159
++#: dnsmasq.c:161
+ msgid "DNSSEC not available: set HAVE_DNSSEC in src/config.h"
+ msgstr "obsługa DNSSEC niedostępna - ustaw HAVE_DNSSEC w src/config.h"
+
+-#: dnsmasq.c:165
++#: dnsmasq.c:167
+ msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
+ msgstr "Serwer TFTP nie został wkompilowany -- ustaw HAVE_TFTP w src/config.h"
+
+-#: dnsmasq.c:170
+-msgid "Cannot use --conntrack AND --query-port"
++#: dnsmasq.c:172
++#, fuzzy
++msgid "cannot use --conntrack AND --query-port"
+ msgstr "--conntrack i --query-port wykluczają się wzajemnie"
+
+-#: dnsmasq.c:173
+-msgid "Conntrack support not available: set HAVE_CONNTRACK in src/config.h"
++#: dnsmasq.c:175
++#, fuzzy
++msgid "conntrack support not available: set HAVE_CONNTRACK in src/config.h"
+ msgstr "Wsparcie dla przekazywania znaczników połączeń (conntrack) nie zostało wkompilowane - ustaw HAVE_CONNTRACK w src/config.h"
+
+-#: dnsmasq.c:178
++#: dnsmasq.c:180
+ msgid "asychronous logging is not available under Solaris"
+ msgstr "zapis do logów w trybie asynchronicznym nie jest dostępny w Solarisie"
+
+-#: dnsmasq.c:183
++#: dnsmasq.c:185
+ msgid "asychronous logging is not available under Android"
+ msgstr "zapis do logów w trybie asynchronicznym nie jest dostępny w Androidzie"
+
+-#: dnsmasq.c:188
++#: dnsmasq.c:190
+ msgid "authoritative DNS not available: set HAVE_AUTH in src/config.h"
+ msgstr "tryb autorytatywny DNS-a niedostępny - ustaw HAVE_AUTH w src/config.h"
+
+-#: dnsmasq.c:193
+-msgid "Loop detection not available: set HAVE_LOOP in src/config.h"
++#: dnsmasq.c:195
++#, fuzzy
++msgid "loop detection not available: set HAVE_LOOP in src/config.h"
+ msgstr "Wykrywanie pętli zapytań nie zostało wkompilowane - ustaw HAVE_LOOP w src/config.h"
+
+-#: dnsmasq.c:201
++#: dnsmasq.c:203
+ msgid "zone serial must be configured in --auth-soa"
+ msgstr "za pomocą --auth-soa musi zostać ustawiony numer seryjny strefy"
+
+-#: dnsmasq.c:219
++#: dnsmasq.c:221
+ msgid "dhcp-range constructor not available on this platform"
+ msgstr "konstrukcja dhcp-range nie jest dostępna w tym systemie"
+
+-#: dnsmasq.c:262
++#: dnsmasq.c:264
+ msgid "cannot set --bind-interfaces and --bind-dynamic"
+ msgstr "--bind-interfaces i --bind-dynamic wzajemnie się wykluczają"
+
+-#: dnsmasq.c:265
++#: dnsmasq.c:267
+ #, c-format
+ msgid "failed to find list of interfaces: %s"
+ msgstr "błąd podczas tworzenia listy interfejsów sieciowych: %s"
+
+-#: dnsmasq.c:274
++#: dnsmasq.c:276
+ #, c-format
+ msgid "unknown interface %s"
+ msgstr "nieznany interfejs %s"
+
+-#: dnsmasq.c:330 dnsmasq.c:954
++#: dnsmasq.c:340 dnsmasq.c:1004
+ #, c-format
+ msgid "DBus error: %s"
+ msgstr "błąd DBus: %s"
+
+-#: dnsmasq.c:333
++#: dnsmasq.c:343
+ msgid "DBus not available: set HAVE_DBUS in src/config.h"
+ msgstr "Obsługa DBus nie została wkompilowana -- ustaw HAVE_DBUS w src/config.h"
+
+-#: dnsmasq.c:361
++#: dnsmasq.c:371
+ #, c-format
+ msgid "unknown user or group: %s"
+ msgstr "nieznany użytkownik lub grupa: %s"
+
+-#: dnsmasq.c:416
++#: dnsmasq.c:426
+ #, c-format
+ msgid "cannot chdir to filesystem root: %s"
+ msgstr "nie potrafię wejść do głównego katalogu: %s"
+
+-#: dnsmasq.c:653
++#: dnsmasq.c:667
+ #, c-format
+ msgid "started, version %s DNS disabled"
+ msgstr "uruchomiony, wersja %s, DNS wyłączony"
+
+-#: dnsmasq.c:655
++#: dnsmasq.c:669
+ #, c-format
+ msgid "started, version %s cachesize %d"
+ msgstr "uruchomiony, wersja %s, %d miejsc w pamięci podręcznej"
+
+-#: dnsmasq.c:657
++#: dnsmasq.c:671
+ #, c-format
+ msgid "started, version %s cache disabled"
+ msgstr "uruchomiony, wersja %s, pamięć podręczna wyłączona"
+
+-#: dnsmasq.c:659
++#: dnsmasq.c:673
+ #, c-format
+ msgid "compile time options: %s"
+ msgstr "opcje kompilacji: %s"
+
+-#: dnsmasq.c:665
++#: dnsmasq.c:679
+ msgid "DBus support enabled: connected to system bus"
+ msgstr "obsługa DBus włączona, podłączono do serwera DBus"
+
+-#: dnsmasq.c:667
++#: dnsmasq.c:681
+ msgid "DBus support enabled: bus connection pending"
+ msgstr "obsługa DBus włączona, trwa podłączanie do serwera DBus"
+
+-#: dnsmasq.c:672
++#: dnsmasq.c:686
+ msgid "DNS service limited to local subnets"
+ msgstr "usługa DNS ograniczona do lokalnych podsieci"
+
+-#: dnsmasq.c:677
++#: dnsmasq.c:702
+ msgid "DNSSEC validation enabled"
+ msgstr "walidacja DNSSEC włączona"
+
+-#: dnsmasq.c:679
++#: dnsmasq.c:705
+ msgid "DNSSEC signature timestamps not checked until first cache reload"
+ msgstr "sprawdzanie sygnatur czasowych DNSSEC wyłączone do czasu przeładowania pamięci podręcznej"
+
+-#: dnsmasq.c:684
++#: dnsmasq.c:708
++#, fuzzy
++msgid "DNSSEC signature timestamps not checked until system time valid"
++msgstr "sprawdzanie sygnatur czasowych DNSSEC wyłączone do czasu przeładowania pamięci podręcznej"
++
++#: dnsmasq.c:713
+ #, c-format
+ msgid "warning: failed to change owner of %s: %s"
+ msgstr "UWAGA! Nie udało się zmienić użytkownika pliku %s: %s"
+
+-#: dnsmasq.c:688
++#: dnsmasq.c:717
+ msgid "setting --bind-interfaces option because of OS limitations"
+ msgstr "ustawiam --bind-interfaces z powodu ograniczeń systemu operacyjnego"
+
+-#: dnsmasq.c:698
++#: dnsmasq.c:727
+ #, c-format
+ msgid "warning: interface %s does not currently exist"
+ msgstr "uwaga: interfejs %s nie jest włączony"
+
+-#: dnsmasq.c:703
++#: dnsmasq.c:732
+ msgid "warning: ignoring resolv-file flag because no-resolv is set"
+ msgstr "uwaga: ignoruję opcję resolv-file, ponieważ wybrano tryb no-resolv"
+
+-#: dnsmasq.c:706
++#: dnsmasq.c:735
+ msgid "warning: no upstream servers configured"
+ msgstr "uwaga: nie wskazano nadrzędnych serwerów DNS"
+
+-#: dnsmasq.c:710
++#: dnsmasq.c:739
+ #, c-format
+ msgid "asynchronous logging enabled, queue limit is %d messages"
+ msgstr "włączono asynchroniczny tryb zapisu do logów z kolejką na %d komunikatów"
+
+-#: dnsmasq.c:731
++#: dnsmasq.c:760
+ msgid "IPv6 router advertisement enabled"
+ msgstr "anonsowanie rutera IPv6 włączone"
+
+-#: dnsmasq.c:736
++#: dnsmasq.c:765
+ #, c-format
+ msgid "DHCP, sockets bound exclusively to interface %s"
+ msgstr "DHCP, gniazda dowiązane na wyłączność interfejsowi %s"
+
+-#: dnsmasq.c:753
++#: dnsmasq.c:782
+ msgid "root is "
+ msgstr "z głównym katalogiem w "
+
+-#: dnsmasq.c:753
++#: dnsmasq.c:782
+ msgid "enabled"
+ msgstr "włączony"
+
+-#: dnsmasq.c:755
++#: dnsmasq.c:784
+ msgid "secure mode"
+ msgstr "w trybie bezpiecznym"
+
+-#: dnsmasq.c:781
++#: dnsmasq.c:810
+ #, c-format
+ msgid "restricting maximum simultaneous TFTP transfers to %d"
+ msgstr "ograniczam ilość jednoczesnych przesłań TFTP do %d"
+
+-#: dnsmasq.c:956
++#: dnsmasq.c:1006
+ msgid "connected to system DBus"
+ msgstr "podłączono do DBus-a"
+
+-#: dnsmasq.c:1106
++#: dnsmasq.c:1156
+ #, c-format
+ msgid "cannot fork into background: %s"
+ msgstr "nie potrafię przełączyć się do pracy w tle: %s"
+
+-#: dnsmasq.c:1109
++#: dnsmasq.c:1159
+ #, c-format
+ msgid "failed to create helper: %s"
+ msgstr "nie udało się utworzyć procesu pomocniczego: %s"
+
+-#: dnsmasq.c:1112
++#: dnsmasq.c:1162
+ #, c-format
+ msgid "setting capabilities failed: %s"
+ msgstr "nie powiodło się ustawianie ograniczeń (capabilities): %s"
+
+-#: dnsmasq.c:1115
++#: dnsmasq.c:1165
+ #, c-format
+ msgid "failed to change user-id to %s: %s"
+ msgstr "nie udało się zmienić użytkownika procesu na %s: %s"
+
+-#: dnsmasq.c:1118
++#: dnsmasq.c:1168
+ #, c-format
+ msgid "failed to change group-id to %s: %s"
+ msgstr "nie udało się zmienić grupy procesu na %s: %s"
+
+-#: dnsmasq.c:1121
++#: dnsmasq.c:1171
+ #, c-format
+ msgid "failed to open pidfile %s: %s"
+ msgstr "nie udało się otworzyć pliku z PID-em %s: %s"
+
+-#: dnsmasq.c:1124
++#: dnsmasq.c:1174
+ #, c-format
+ msgid "cannot open log %s: %s"
+ msgstr "nie udało się otworzyć logu %s: %s"
+
+-#: dnsmasq.c:1127
++#: dnsmasq.c:1177
+ #, c-format
+ msgid "failed to load Lua script: %s"
+ msgstr "nie udało się wczytać skryptu Lua: %s"
+
+-#: dnsmasq.c:1130
++#: dnsmasq.c:1180
+ #, c-format
+ msgid "TFTP directory %s inaccessible: %s"
+ msgstr "katalog TFTP %s nie jest dostępny: %s"
+
+-#: dnsmasq.c:1151
++#: dnsmasq.c:1183
++#, fuzzy, c-format
++msgid "cannot create timestamp file %s: %s"
++msgstr "nie potrafię otworzyć albo utworzyć pliku dzierżaw %s: %s"
++
++#: dnsmasq.c:1204
+ msgid "now checking DNSSEC signature timestamps"
+ msgstr "trwa sprawdzanie sygnatur czasowych podpisów DNSSEC"
+
+-#: dnsmasq.c:1218
++#: dnsmasq.c:1271
+ #, c-format
+ msgid "script process killed by signal %d"
+ msgstr "skrypt został zabity sygnałem %d"
+
+-#: dnsmasq.c:1222
++#: dnsmasq.c:1275
+ #, c-format
+ msgid "script process exited with status %d"
+ msgstr "skrypt zakończył się z kodem powrotu %d"
+
+-#: dnsmasq.c:1226
++#: dnsmasq.c:1279
+ #, c-format
+ msgid "failed to execute %s: %s"
+ msgstr "nie udało się uruchomić %s: %s"
+
+-#: dnsmasq.c:1281
++#: dnsmasq.c:1334
+ msgid "exiting on receipt of SIGTERM"
+ msgstr "zakończyłem działanie z powodu odebrania SIGTERM"
+
+-#: dnsmasq.c:1309
++#: dnsmasq.c:1362
+ #, c-format
+ msgid "failed to access %s: %s"
+ msgstr "brak dostępu do %s: %s"
+
+-#: dnsmasq.c:1339
++#: dnsmasq.c:1392
+ #, c-format
+ msgid "reading %s"
+ msgstr "czytanie %s"
+
+-#: dnsmasq.c:1350
++#: dnsmasq.c:1403
+ #, c-format
+ msgid "no servers found in %s, will retry"
+ msgstr "w %s nie znalazłem serwerów, spróbuję ponownie później"
+@@ -1485,27 +1537,27 @@ msgstr "nieznany interfejs %s w bridge-u"
+ msgid "DHCP packet received on %s which has no address"
+ msgstr "żądanie DHCP odebrano na interfejsie %s, który nie ma adresu"
+
+-#: dhcp.c:408
++#: dhcp.c:412
+ #, c-format
+ msgid "ARP-cache injection failed: %s"
+ msgstr "uzupełnienie pamięci podręcznej ARP nie powiodło się: %s"
+
+-#: dhcp.c:506
++#: dhcp.c:511
+ #, c-format
+ msgid "DHCP range %s -- %s is not consistent with netmask %s"
+ msgstr "zakres adresów DHCP %s -- %s jest niespójny z maską sieci %s"
+
+-#: dhcp.c:807
++#: dhcp.c:812
+ #, c-format
+ msgid "bad line at %s line %d"
+ msgstr "zła zawartość pliku %s, w linii %d"
+
+-#: dhcp.c:850
++#: dhcp.c:855
+ #, c-format
+ msgid "ignoring %s line %d, duplicate name or IP address"
+ msgstr "w %s pomijam linię %d -- powtórzona nazwa lub adres IP"
+
+-#: dhcp.c:994 rfc3315.c:2089
++#: dhcp.c:999 rfc3315.c:2139
+ #, c-format
+ msgid "DHCP relay %s -> %s"
+ msgstr "przekazywanie DHCP %s -> %s"
+@@ -1576,12 +1628,12 @@ msgstr "%u klasa użytkownika: %s"
+ msgid "disabled"
+ msgstr "wyłączony(a)"
+
+-#: rfc2131.c:539 rfc2131.c:967 rfc2131.c:1385 rfc3315.c:602 rfc3315.c:823
+-#: rfc3315.c:1095
++#: rfc2131.c:539 rfc2131.c:967 rfc2131.c:1385 rfc3315.c:603 rfc3315.c:860
++#: rfc3315.c:1139
+ msgid "ignored"
+ msgstr "ignoruję"
+
+-#: rfc2131.c:554 rfc2131.c:1205 rfc3315.c:873
++#: rfc2131.c:554 rfc2131.c:1205 rfc3315.c:910
+ msgid "address in use"
+ msgstr "adres jest w użyciu"
+
+@@ -1601,7 +1653,7 @@ msgstr "brak skonfigurowanego adresu"
+ msgid "no leases left"
+ msgstr "brak wolnych dzierżaw"
+
+-#: rfc2131.c:691 rfc3315.c:475
++#: rfc2131.c:691 rfc3315.c:476
+ #, c-format
+ msgid "%u client provides name: %s"
+ msgstr "klient %u przedstawia się jako %s"
+@@ -1610,7 +1662,7 @@ msgstr "klient %u przedstawia się jako %s"
+ msgid "PXE BIS not supported"
+ msgstr "PXE BIS nie jest obsługiwane"
+
+-#: rfc2131.c:935 rfc3315.c:1189
++#: rfc2131.c:935 rfc3315.c:1233
+ #, c-format
+ msgid "disabling DHCP static address %s for %s"
+ msgstr "wyłączam statyczne przypisanie adresu %s dla %s"
+@@ -1646,7 +1698,7 @@ msgstr "nieprawidłowy identyfikator serwera (server-ID)"
+ msgid "wrong address"
+ msgstr "błędny adres"
+
+-#: rfc2131.c:1143 rfc3315.c:969
++#: rfc2131.c:1143 rfc3315.c:1006
+ msgid "lease not found"
+ msgstr "dzierżawa nieznaleziona"
+
+@@ -1696,7 +1748,7 @@ msgstr "nie mam możliwości wysłania opcji %d DHCP/BOOTP: niedostateczna iloś
+ msgid "PXE menu too large"
+ msgstr "menu PXE zbyt duże"
+
+-#: rfc2131.c:2173 rfc3315.c:1456
++#: rfc2131.c:2173 rfc3315.c:1506
+ #, c-format
+ msgid "%u requested options: %s"
+ msgstr "%u zażądano: %s"
+@@ -1711,7 +1763,7 @@ msgstr "nie mogę wysłać opcji RFC3925: za długi łańcuch opcji przy numerze
+ msgid "cannot create netlink socket: %s"
+ msgstr "nie potrafię utworzyć połączenia netlink %s"
+
+-#: netlink.c:347
++#: netlink.c:348
+ #, c-format
+ msgid "netlink returns error: %s"
+ msgstr "wystąpił błąd w połączeniu netlink %s"
+@@ -1829,62 +1881,62 @@ msgstr "nie zdefiniowano zakresu adresów odpowiedniego dla żądania DHCPv6 od
+ msgid "%u available DHCPv6 subnet: %s/%d"
+ msgstr "%u dostępna podsieć DHCPv6: %s/%d"
+
+-#: rfc3315.c:379
++#: rfc3315.c:380
+ #, c-format
+ msgid "%u vendor class: %u"
+ msgstr "%u klasa dostawcy: %u"
+
+-#: rfc3315.c:427
++#: rfc3315.c:428
+ #, c-format
+ msgid "%u client MAC address: %s"
+ msgstr "adres MAC klienta %u: %s"
+
+-#: rfc3315.c:659
++#: rfc3315.c:660
+ #, c-format
+ msgid "unknown prefix-class %d"
+ msgstr "nieznana klasa sieci %d"
+
+-#: rfc3315.c:791 rfc3315.c:913
++#: rfc3315.c:803 rfc3315.c:902
++msgid "address unavailable"
++msgstr "adres niedostępny"
++
++#: rfc3315.c:815 rfc3315.c:950 rfc3315.c:1283
+ msgid "success"
+ msgstr "udane"
+
+-#: rfc3315.c:806 rfc3315.c:808 rfc3315.c:921 rfc3315.c:923
++#: rfc3315.c:843 rfc3315.c:845 rfc3315.c:958 rfc3315.c:960
+ msgid "no addresses available"
+ msgstr "brak wolnych adresów"
+
+-#: rfc3315.c:865
+-msgid "address unavailable"
+-msgstr "adres niedostępny"
+-
+-#: rfc3315.c:900
++#: rfc3315.c:937
+ msgid "not on link"
+ msgstr "poza zasięgiem"
+
+-#: rfc3315.c:973 rfc3315.c:1151 rfc3315.c:1228
++#: rfc3315.c:1010 rfc3315.c:1195 rfc3315.c:1272
+ msgid "no binding found"
+ msgstr "brak powiązania"
+
+-#: rfc3315.c:1011
++#: rfc3315.c:1048
+ msgid "deprecated"
+ msgstr "przestarzały"
+
+-#: rfc3315.c:1016
++#: rfc3315.c:1053
+ msgid "address invalid"
+ msgstr "niepoprawny adres"
+
+-#: rfc3315.c:1061
++#: rfc3315.c:1100
+ msgid "confirm failed"
+ msgstr "brak potwierdzenia"
+
+-#: rfc3315.c:1072
++#: rfc3315.c:1116
+ msgid "all addresses still on link"
+ msgstr "wszystkie adresy ciągle w użyciu"
+
+-#: rfc3315.c:1160
++#: rfc3315.c:1204
+ msgid "release received"
+ msgstr "adres został zwolniony"
+
+-#: rfc3315.c:2080
++#: rfc3315.c:2130
+ msgid "Cannot multicast to DHCPv6 server without correct interface"
+ msgstr "Nie mogę rozesłać do serwerów DHCPv6 nie mając prawidłowego interfejsu"
+
+@@ -1977,7 +2029,7 @@ msgstr "przekazywanie DHCP z %s do %s"
+ msgid "cannot create ICMPv6 socket: %s"
+ msgstr "nie udało się utworzyć gniazda dla ICMPv6: %s"
+
+-#: auth.c:429
++#: auth.c:436
+ #, c-format
+ msgid "ignoring zone transfer request from %s"
+ msgstr "ignoruję żądanie transferu strefy od %s"
+@@ -1992,54 +2044,89 @@ msgstr "niezgodna wersja jądra: %s"
+ msgid "failed to create IPset control socket: %s"
+ msgstr "nie powiodło się otwieranie gniazda sterującego IPset: %s"
+
++#: dnssec.c:425 dnssec.c:469
++#, fuzzy, c-format
++msgid "failed to update mtime on %s: %s"
++msgstr "nie udało się otworzyć pliku z PID-em %s: %s"
++
+ #: blockdata.c:58
+ #, c-format
+ msgid "DNSSEC memory in use %u, max %u, allocated %u"
+ msgstr "DNSSEC: zużycie pamięci %u, maks. %u, przydzielona %u"
+
+-#: tables.c:76
++#: tables.c:80
+ msgid "error: fill_addr missused"
+ msgstr "błąd: niepoprawnie użyty fill_addr"
+
+-#: tables.c:105
++#: tables.c:109
+ #, c-format
+ msgid "failed to access pf devices: %s"
+ msgstr "brak dostępu do /dev/pf (filtra pakietów): %s"
+
+-#: tables.c:119
++#: tables.c:123
+ #, c-format
+ msgid "warning: no opened pf devices %s"
+ msgstr "uwaga: brak otwartych filtrów pakietów %s"
+
+-#: tables.c:127
++#: tables.c:131
+ #, c-format
+ msgid "error: cannot use table name %s"
+ msgstr "błąd: nie potrafię użyć nazwy tablicy %s"
+
+-#: tables.c:135
++#: tables.c:139
+ #, c-format
+ msgid "error: cannot strlcpy table name %s"
+ msgstr "błąd: nie potrafię strlcpy nazwy tablicy %s"
+
+-#: tables.c:141
++#: tables.c:145
+ #, c-format
+ msgid "warning: pfr_add_tables: %s(%d)"
+ msgstr "uwaga: pfr_add_tables: %s(%d)"
+
+-#: tables.c:147
++#: tables.c:151
+ msgid "info: table created"
+ msgstr "info: tablica utworzona"
+
+-#: tables.c:158
++#: tables.c:162
+ #, c-format
+ msgid "warning: DIOCR%sADDRS: %s"
+ msgstr "uwaga: DIOCR%sADDRS: %s"
+
+-#: tables.c:162
++#: tables.c:166
+ #, c-format
+ msgid "%d addresses %s"
+ msgstr "%d adresów %s"
+
++#: inotify.c:46
++#, fuzzy, c-format
++msgid "failed to create inotify: %s"
++msgstr "nie udało się utworzyć procesu pomocniczego: %s"
++
++#: inotify.c:60
++#, fuzzy, c-format
++msgid "cannot cannonicalise resolv-file %s: %s"
++msgstr "nie potrafię otworzyć albo utworzyć pliku dzierżaw %s: %s"
++
++#: inotify.c:72
++#, c-format
++msgid "directory %s for resolv-file is missing, cannot poll"
++msgstr ""
++
++#: inotify.c:75 inotify.c:112
++#, fuzzy, c-format
++msgid "failed to create inotify for %s: %s"
++msgstr "nie udało się otworzyć gniazda %s: %s"
++
++#: inotify.c:97
++#, fuzzy, c-format
++msgid "bad dynamic directory %s: %s"
++msgstr "brak dostępu do katalogu %s: %s"
++
++#: inotify.c:197
++#, c-format
++msgid "inotify, new or changed file %s"
++msgstr ""
++
+ #~ msgid "Always send frequent router-advertisements"
+ #~ msgstr "Rozsyłanie wielokrotne anonsów rutera (RA)"
+
+diff --git a/po/pt_BR.po b/po/pt_BR.po
+index b91cf6ce53b4..ef6e4cbf529b 100644
+--- a/po/pt_BR.po
++++ b/po/pt_BR.po
+@@ -16,70 +16,70 @@ msgstr ""
+ "Content-Transfer-Encoding: 8bit\n"
+ "Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+-#: cache.c:505
++#: cache.c:523
+ msgid "Internal error in cache."
+ msgstr ""
+
+-#: cache.c:908
++#: cache.c:941
+ #, c-format
+ msgid "failed to load names from %s: %s"
+ msgstr ""
+
+-#: cache.c:934 dhcp.c:820
++#: cache.c:967 dhcp.c:825
+ #, c-format
+ msgid "bad address at %s line %d"
+ msgstr ""
+
+-#: cache.c:985 dhcp.c:836
++#: cache.c:1018 dhcp.c:841
+ #, c-format
+ msgid "bad name at %s line %d"
+ msgstr ""
+
+-#: cache.c:992 dhcp.c:911
++#: cache.c:1027 dhcp.c:916
+ #, c-format
+ msgid "read %s - %d addresses"
+ msgstr ""
+
+-#: cache.c:1100
++#: cache.c:1135
+ msgid "cleared cache"
+ msgstr ""
+
+-#: cache.c:1123
++#: cache.c:1164
+ #, c-format
+ msgid "No IPv4 address found for %s"
+ msgstr ""
+
+-#: cache.c:1201
++#: cache.c:1242
+ #, c-format
+ msgid "%s is a CNAME, not giving it to the DHCP lease of %s"
+ msgstr ""
+
+-#: cache.c:1225
++#: cache.c:1266
+ #, c-format
+ msgid "not giving name %s to the DHCP lease of %s because the name exists in %s with address %s"
+ msgstr ""
+
+-#: cache.c:1366
++#: cache.c:1421
+ #, c-format
+ msgid "time %lu"
+ msgstr ""
+
+-#: cache.c:1367
++#: cache.c:1422
+ #, c-format
+ msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
+ msgstr ""
+
+-#: cache.c:1369
++#: cache.c:1424
+ #, c-format
+ msgid "queries forwarded %u, queries answered locally %u"
+ msgstr ""
+
+-#: cache.c:1372
++#: cache.c:1427
+ #, c-format
+ msgid "queries for authoritative zones %u"
+ msgstr ""
+
+-#: cache.c:1398
++#: cache.c:1453
+ #, c-format
+ msgid "server %s#%d: queries sent %u, retried or failed %u"
+ msgstr ""
+@@ -93,7 +93,7 @@ msgstr ""
+ msgid "failed to allocate memory"
+ msgstr ""
+
+-#: util.c:243 option.c:579
++#: util.c:243 option.c:598
+ msgid "could not get memory"
+ msgstr ""
+
+@@ -107,990 +107,1018 @@ msgstr ""
+ msgid "failed to allocate %d bytes"
+ msgstr ""
+
+-#: util.c:429
++#: util.c:430
+ #, c-format
+ msgid "infinite"
+ msgstr ""
+
+-#: option.c:318
++#: option.c:330
+ msgid "Specify local address(es) to listen on."
+ msgstr ""
+
+-#: option.c:319
++#: option.c:331
+ msgid "Return ipaddr for all hosts in specified domains."
+ msgstr ""
+
+-#: option.c:320
++#: option.c:332
+ msgid "Fake reverse lookups for RFC1918 private address ranges."
+ msgstr ""
+
+-#: option.c:321
++#: option.c:333
+ msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
+ msgstr ""
+
+-#: option.c:322
++#: option.c:334
+ #, c-format
+ msgid "Specify the size of the cache in entries (defaults to %s)."
+ msgstr ""
+
+-#: option.c:323
++#: option.c:335
+ #, c-format
+ msgid "Specify configuration file (defaults to %s)."
+ msgstr ""
+
+-#: option.c:324
++#: option.c:336
+ msgid "Do NOT fork into the background: run in debug mode."
+ msgstr ""
+
+-#: option.c:325
++#: option.c:337
+ msgid "Do NOT forward queries with no domain part."
+ msgstr ""
+
+-#: option.c:326
++#: option.c:338
+ msgid "Return self-pointing MX records for local hosts."
+ msgstr ""
+
+-#: option.c:327
++#: option.c:339
+ msgid "Expand simple names in /etc/hosts with domain-suffix."
+ msgstr ""
+
+-#: option.c:328
++#: option.c:340
+ msgid "Don't forward spurious DNS requests from Windows hosts."
+ msgstr ""
+
+-#: option.c:329
++#: option.c:341
+ msgid "Enable DHCP in the range given with lease duration."
+ msgstr ""
+
+-#: option.c:330
++#: option.c:342
+ #, c-format
+ msgid "Change to this group after startup (defaults to %s)."
+ msgstr ""
+
+-#: option.c:331
++#: option.c:343
+ msgid "Set address or hostname for a specified machine."
+ msgstr ""
+
+-#: option.c:332
++#: option.c:344
+ msgid "Read DHCP host specs from file."
+ msgstr ""
+
+-#: option.c:333
++#: option.c:345
+ msgid "Read DHCP option specs from file."
+ msgstr ""
+
+-#: option.c:334
++#: option.c:346
++msgid "Read DHCP host specs from a directory."
++msgstr ""
++
++#: option.c:347
++msgid "Read DHCP options from a directory."
++msgstr ""
++
++#: option.c:348
+ msgid "Evaluate conditional tag expression."
+ msgstr ""
+
+-#: option.c:335
++#: option.c:349
+ #, c-format
+ msgid "Do NOT load %s file."
+ msgstr ""
+
+-#: option.c:336
++#: option.c:350
+ #, c-format
+ msgid "Specify a hosts file to be read in addition to %s."
+ msgstr ""
+
+-#: option.c:337
++#: option.c:351
++msgid "Read hosts files from a directory."
++msgstr ""
++
++#: option.c:352
+ msgid "Specify interface(s) to listen on."
+ msgstr ""
+
+-#: option.c:338
++#: option.c:353
+ msgid "Specify interface(s) NOT to listen on."
+ msgstr ""
+
+-#: option.c:339
++#: option.c:354
+ msgid "Map DHCP user class to tag."
+ msgstr ""
+
+-#: option.c:340
++#: option.c:355
+ msgid "Map RFC3046 circuit-id to tag."
+ msgstr ""
+
+-#: option.c:341
++#: option.c:356
+ msgid "Map RFC3046 remote-id to tag."
+ msgstr ""
+
+-#: option.c:342
++#: option.c:357
+ msgid "Map RFC3993 subscriber-id to tag."
+ msgstr ""
+
+-#: option.c:343
++#: option.c:358
+ msgid "Don't do DHCP for hosts with tag set."
+ msgstr ""
+
+-#: option.c:344
++#: option.c:359
+ msgid "Force broadcast replies for hosts with tag set."
+ msgstr ""
+
+-#: option.c:345
++#: option.c:360
+ msgid "Do NOT fork into the background, do NOT run in debug mode."
+ msgstr ""
+
+-#: option.c:346
++#: option.c:361
+ msgid "Assume we are the only DHCP server on the local network."
+ msgstr ""
+
+-#: option.c:347
++#: option.c:362
+ #, c-format
+ msgid "Specify where to store DHCP leases (defaults to %s)."
+ msgstr ""
+
+-#: option.c:348
++#: option.c:363
+ msgid "Return MX records for local hosts."
+ msgstr ""
+
+-#: option.c:349
++#: option.c:364
+ msgid "Specify an MX record."
+ msgstr ""
+
+-#: option.c:350
++#: option.c:365
+ msgid "Specify BOOTP options to DHCP server."
+ msgstr ""
+
+-#: option.c:351
++#: option.c:366
+ #, c-format
+ msgid "Do NOT poll %s file, reload only on SIGHUP."
+ msgstr ""
+
+-#: option.c:352
++#: option.c:367
+ msgid "Do NOT cache failed search results."
+ msgstr ""
+
+-#: option.c:353
++#: option.c:368
+ #, c-format
+ msgid "Use nameservers strictly in the order given in %s."
+ msgstr ""
+
+-#: option.c:354
++#: option.c:369
+ msgid "Specify options to be sent to DHCP clients."
+ msgstr ""
+
+-#: option.c:355
++#: option.c:370
+ msgid "DHCP option sent even if the client does not request it."
+ msgstr ""
+
+-#: option.c:356
++#: option.c:371
+ msgid "Specify port to listen for DNS requests on (defaults to 53)."
+ msgstr ""
+
+-#: option.c:357
++#: option.c:372
+ #, c-format
+ msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
+ msgstr ""
+
+-#: option.c:358
++#: option.c:373
+ msgid "Log DNS queries."
+ msgstr ""
+
+-#: option.c:359
++#: option.c:374
+ msgid "Force the originating port for upstream DNS queries."
+ msgstr ""
+
+-#: option.c:360
++#: option.c:375
+ msgid "Do NOT read resolv.conf."
+ msgstr ""
+
+-#: option.c:361
++#: option.c:376
+ #, c-format
+ msgid "Specify path to resolv.conf (defaults to %s)."
+ msgstr ""
+
+-#: option.c:362
++#: option.c:377
+ msgid "Specify path to file with server= options"
+ msgstr ""
+
+-#: option.c:363
++#: option.c:378
+ msgid "Specify address(es) of upstream servers with optional domains."
+ msgstr ""
+
+-#: option.c:364
++#: option.c:379
+ msgid "Specify address of upstream servers for reverse address queries"
+ msgstr ""
+
+-#: option.c:365
++#: option.c:380
+ msgid "Never forward queries to specified domains."
+ msgstr ""
+
+-#: option.c:366
++#: option.c:381
+ msgid "Specify the domain to be assigned in DHCP leases."
+ msgstr ""
+
+-#: option.c:367
++#: option.c:382
+ msgid "Specify default target in an MX record."
+ msgstr ""
+
+-#: option.c:368
++#: option.c:383
+ msgid "Specify time-to-live in seconds for replies from /etc/hosts."
+ msgstr ""
+
+-#: option.c:369
++#: option.c:384
+ msgid "Specify time-to-live in seconds for negative caching."
+ msgstr ""
+
+-#: option.c:370
++#: option.c:385
+ msgid "Specify time-to-live in seconds for maximum TTL to send to clients."
+ msgstr ""
+
+-#: option.c:371
++#: option.c:386
++msgid "Specify time-to-live ceiling for cache."
++msgstr ""
++
++#: option.c:387
++msgid "Specify time-to-live floor for cache."
++msgstr ""
++
++#: option.c:388
+ #, c-format
+ msgid "Change to this user after startup. (defaults to %s)."
+ msgstr ""
+
+-#: option.c:372
++#: option.c:389
+ msgid "Map DHCP vendor class to tag."
+ msgstr ""
+
+-#: option.c:373
++#: option.c:390
+ msgid "Display dnsmasq version and copyright information."
+ msgstr ""
+
+-#: option.c:374
++#: option.c:391
+ msgid "Translate IPv4 addresses from upstream servers."
+ msgstr ""
+
+-#: option.c:375
++#: option.c:392
+ msgid "Specify a SRV record."
+ msgstr ""
+
+-#: option.c:376
++#: option.c:393
+ msgid "Display this message. Use --help dhcp for known DHCP options."
+ msgstr ""
+
+-#: option.c:377
++#: option.c:394
+ #, c-format
+ msgid "Specify path of PID file (defaults to %s)."
+ msgstr ""
+
+-#: option.c:378
++#: option.c:395
+ #, c-format
+ msgid "Specify maximum number of DHCP leases (defaults to %s)."
+ msgstr ""
+
+-#: option.c:379
++#: option.c:396
+ msgid "Answer DNS queries based on the interface a query was sent to."
+ msgstr ""
+
+-#: option.c:380
++#: option.c:397
+ msgid "Specify TXT DNS record."
+ msgstr ""
+
+-#: option.c:381
++#: option.c:398
+ msgid "Specify PTR DNS record."
+ msgstr ""
+
+-#: option.c:382
++#: option.c:399
+ msgid "Give DNS name to IPv4 address of interface."
+ msgstr ""
+
+-#: option.c:383
++#: option.c:400
+ msgid "Bind only to interfaces in use."
+ msgstr ""
+
+-#: option.c:384
++#: option.c:401
+ #, c-format
+ msgid "Read DHCP static host information from %s."
+ msgstr ""
+
+-#: option.c:385
++#: option.c:402
+ msgid "Enable the DBus interface for setting upstream servers, etc."
+ msgstr ""
+
+-#: option.c:386
++#: option.c:403
+ msgid "Do not provide DHCP on this interface, only provide DNS."
+ msgstr ""
+
+-#: option.c:387
++#: option.c:404
+ msgid "Enable dynamic address allocation for bootp."
+ msgstr ""
+
+-#: option.c:388
++#: option.c:405
+ msgid "Map MAC address (with wildcards) to option set."
+ msgstr ""
+
+-#: option.c:389
++#: option.c:406
+ msgid "Treat DHCP requests on aliases as arriving from interface."
+ msgstr ""
+
+-#: option.c:390
++#: option.c:407
+ msgid "Disable ICMP echo address checking in the DHCP server."
+ msgstr ""
+
+-#: option.c:391
++#: option.c:408
+ msgid "Shell script to run on DHCP lease creation and destruction."
+ msgstr ""
+
+-#: option.c:392
++#: option.c:409
+ msgid "Lua script to run on DHCP lease creation and destruction."
+ msgstr ""
+
+-#: option.c:393
++#: option.c:410
+ msgid "Run lease-change scripts as this user."
+ msgstr ""
+
+-#: option.c:394
++#: option.c:411
+ msgid "Read configuration from all the files in this directory."
+ msgstr ""
+
+-#: option.c:395
++#: option.c:412
+ msgid "Log to this syslog facility or file. (defaults to DAEMON)"
+ msgstr ""
+
+-#: option.c:396
++#: option.c:413
+ msgid "Do not use leasefile."
+ msgstr ""
+
+-#: option.c:397
++#: option.c:414
+ #, c-format
+ msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
+ msgstr ""
+
+-#: option.c:398
++#: option.c:415
+ #, c-format
+ msgid "Clear DNS cache when reloading %s."
+ msgstr ""
+
+-#: option.c:399
++#: option.c:416
+ msgid "Ignore hostnames provided by DHCP clients."
+ msgstr ""
+
+-#: option.c:400
++#: option.c:417
+ msgid "Do NOT reuse filename and server fields for extra DHCP options."
+ msgstr ""
+
+-#: option.c:401
++#: option.c:418
+ msgid "Enable integrated read-only TFTP server."
+ msgstr ""
+
+-#: option.c:402
++#: option.c:419
+ msgid "Export files by TFTP only from the specified subtree."
+ msgstr ""
+
+-#: option.c:403
++#: option.c:420
+ msgid "Add client IP address to tftp-root."
+ msgstr ""
+
+-#: option.c:404
++#: option.c:421
+ msgid "Allow access only to files owned by the user running dnsmasq."
+ msgstr ""
+
+-#: option.c:405
++#: option.c:422
+ #, c-format
+ msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
+ msgstr ""
+
+-#: option.c:406
++#: option.c:423
+ msgid "Disable the TFTP blocksize extension."
+ msgstr ""
+
+-#: option.c:407
++#: option.c:424
+ msgid "Convert TFTP filenames to lowercase"
+ msgstr ""
+
+-#: option.c:408
++#: option.c:425
+ msgid "Ephemeral port range for use by TFTP transfers."
+ msgstr ""
+
+-#: option.c:409
++#: option.c:426
+ msgid "Extra logging for DHCP."
+ msgstr ""
+
+-#: option.c:410
++#: option.c:427
+ msgid "Enable async. logging; optionally set queue length."
+ msgstr ""
+
+-#: option.c:411
++#: option.c:428
+ msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
+ msgstr ""
+
+-#: option.c:412
++#: option.c:429
+ msgid "Allow rebinding of 127.0.0.0/8, for RBL servers."
+ msgstr ""
+
+-#: option.c:413
++#: option.c:430
+ msgid "Inhibit DNS-rebind protection on this domain."
+ msgstr ""
+
+-#: option.c:414
++#: option.c:431
+ msgid "Always perform DNS queries to all servers."
+ msgstr ""
+
+-#: option.c:415
++#: option.c:432
+ msgid "Set tag if client includes matching option in request."
+ msgstr ""
+
+-#: option.c:416
++#: option.c:433
+ msgid "Use alternative ports for DHCP."
+ msgstr ""
+
+-#: option.c:417
++#: option.c:434
+ msgid "Specify NAPTR DNS record."
+ msgstr ""
+
+-#: option.c:418
++#: option.c:435
+ msgid "Specify lowest port available for DNS query transmission."
+ msgstr ""
+
+-#: option.c:419
++#: option.c:436
+ msgid "Use only fully qualified domain names for DHCP clients."
+ msgstr ""
+
+-#: option.c:420
++#: option.c:437
+ msgid "Generate hostnames based on MAC address for nameless clients."
+ msgstr ""
+
+-#: option.c:421
++#: option.c:438
+ msgid "Use these DHCP relays as full proxies."
+ msgstr ""
+
+-#: option.c:422
++#: option.c:439
+ msgid "Relay DHCP requests to a remote server"
+ msgstr ""
+
+-#: option.c:423
++#: option.c:440
+ msgid "Specify alias name for LOCAL DNS name."
+ msgstr ""
+
+-#: option.c:424
++#: option.c:441
+ msgid "Prompt to send to PXE clients."
+ msgstr ""
+
+-#: option.c:425
++#: option.c:442
+ msgid "Boot service for PXE menu."
+ msgstr ""
+
+-#: option.c:426
++#: option.c:443
+ msgid "Check configuration syntax."
+ msgstr ""
+
+-#: option.c:427
++#: option.c:444
+ msgid "Add requestor's MAC address to forwarded DNS queries."
+ msgstr ""
+
+-#: option.c:428
++#: option.c:445
+ msgid "Add requestor's IP subnet to forwarded DNS queries."
+ msgstr ""
+
+-#: option.c:429
++#: option.c:446
+ msgid "Proxy DNSSEC validation results from upstream nameservers."
+ msgstr ""
+
+-#: option.c:430
++#: option.c:447
+ msgid "Attempt to allocate sequential IP addresses to DHCP clients."
+ msgstr ""
+
+-#: option.c:431
++#: option.c:448
+ msgid "Copy connection-track mark from queries to upstream connections."
+ msgstr ""
+
+-#: option.c:432
++#: option.c:449
+ msgid "Allow DHCP clients to do their own DDNS updates."
+ msgstr ""
+
+-#: option.c:433
++#: option.c:450
+ msgid "Send router-advertisements for interfaces doing DHCPv6"
+ msgstr ""
+
+-#: option.c:434
++#: option.c:451
+ msgid "Specify DUID_EN-type DHCPv6 server DUID"
+ msgstr ""
+
+-#: option.c:435
++#: option.c:452
+ msgid "Specify host (A/AAAA and PTR) records"
+ msgstr ""
+
+-#: option.c:436
++#: option.c:453
+ msgid "Specify arbitrary DNS resource record"
+ msgstr ""
+
+-#: option.c:437
++#: option.c:454
+ msgid "Bind to interfaces in use - check for new interfaces"
+ msgstr ""
+
+-#: option.c:438
++#: option.c:455
+ msgid "Export local names to global DNS"
+ msgstr ""
+
+-#: option.c:439
++#: option.c:456
+ msgid "Domain to export to global DNS"
+ msgstr ""
+
+-#: option.c:440
++#: option.c:457
+ msgid "Set TTL for authoritative replies"
+ msgstr ""
+
+-#: option.c:441
++#: option.c:458
+ msgid "Set authoritive zone information"
+ msgstr ""
+
+-#: option.c:442
++#: option.c:459
+ msgid "Secondary authoritative nameservers for forward domains"
+ msgstr ""
+
+-#: option.c:443
++#: option.c:460
+ msgid "Peers which are allowed to do zone transfer"
+ msgstr ""
+
+-#: option.c:444
++#: option.c:461
+ msgid "Specify ipsets to which matching domains should be added"
+ msgstr ""
+
+-#: option.c:445
++#: option.c:462
+ msgid "Specify a domain and address range for synthesised names"
+ msgstr ""
+
+-#: option.c:446
++#: option.c:463
+ msgid "Activate DNSSEC validation"
+ msgstr ""
+
+-#: option.c:447
++#: option.c:464
+ msgid "Specify trust anchor key digest."
+ msgstr ""
+
+-#: option.c:448
++#: option.c:465
+ msgid "Disable upstream checking for DNSSEC debugging."
+ msgstr ""
+
+-#: option.c:449
++#: option.c:466
+ msgid "Ensure answers without DNSSEC are in unsigned zones."
+ msgstr ""
+
+-#: option.c:450
++#: option.c:467
+ msgid "Don't check DNSSEC signature timestamps until first cache-reload"
+ msgstr ""
+
+-#: option.c:452
++#: option.c:468
++msgid "Timestamp file to verify system clock for DNSSEC"
++msgstr ""
++
++#: option.c:470
+ msgid "Specify DHCPv6 prefix class"
+ msgstr ""
+
+-#: option.c:454
++#: option.c:472
+ msgid "Set priority, resend-interval and router-lifetime"
+ msgstr ""
+
+-#: option.c:455
++#: option.c:473
+ msgid "Do not log routine DHCP."
+ msgstr ""
+
+-#: option.c:456
++#: option.c:474
+ msgid "Do not log routine DHCPv6."
+ msgstr ""
+
+-#: option.c:457
++#: option.c:475
+ msgid "Do not log RA."
+ msgstr ""
+
+-#: option.c:458
++#: option.c:476
+ msgid "Accept queries only from directly-connected networks"
+ msgstr ""
+
+-#: option.c:459
++#: option.c:477
+ msgid "Detect and remove DNS forwarding loops"
+ msgstr ""
+
+-#: option.c:661
++#: option.c:478
++msgid "Ignore DNS responses containing ipaddr."
++msgstr ""
++
++#: option.c:680
+ #, c-format
+ msgid ""
+ "Usage: dnsmasq [options]\n"
+ "\n"
+ msgstr ""
+
+-#: option.c:663
++#: option.c:682
+ #, c-format
+ msgid "Use short options only on the command line.\n"
+ msgstr ""
+
+-#: option.c:665
++#: option.c:684
+ #, c-format
+ msgid "Valid options are:\n"
+ msgstr ""
+
+-#: option.c:722 option.c:726
++#: option.c:741 option.c:745
+ msgid "bad port"
+ msgstr ""
+
+-#: option.c:753 option.c:785
++#: option.c:772 option.c:804
+ msgid "interface binding not supported"
+ msgstr ""
+
+-#: option.c:762 option.c:3494
++#: option.c:781 option.c:3570
+ msgid "bad interface name"
+ msgstr ""
+
+-#: option.c:792
++#: option.c:811
+ msgid "bad address"
+ msgstr ""
+
+-#: option.c:974
++#: option.c:993
+ msgid "unsupported encapsulation for IPv6 option"
+ msgstr ""
+
+-#: option.c:988
++#: option.c:1007
+ msgid "bad dhcp-option"
+ msgstr ""
+
+-#: option.c:1056
++#: option.c:1075
+ msgid "bad IP address"
+ msgstr ""
+
+-#: option.c:1059 option.c:1197 option.c:2812
++#: option.c:1078 option.c:1216 option.c:2888
+ msgid "bad IPv6 address"
+ msgstr ""
+
+-#: option.c:1224 option.c:1318
++#: option.c:1243 option.c:1337
+ msgid "bad domain in dhcp-option"
+ msgstr ""
+
+-#: option.c:1356
++#: option.c:1375
+ msgid "dhcp-option too long"
+ msgstr ""
+
+-#: option.c:1363
++#: option.c:1382
+ msgid "illegal dhcp-match"
+ msgstr ""
+
+-#: option.c:1425
++#: option.c:1444
+ msgid "illegal repeated flag"
+ msgstr ""
+
+-#: option.c:1433
++#: option.c:1452
+ msgid "illegal repeated keyword"
+ msgstr ""
+
+-#: option.c:1495 option.c:4092
++#: option.c:1517 option.c:4186
+ #, c-format
+ msgid "cannot access directory %s: %s"
+ msgstr ""
+
+-#: option.c:1541 tftp.c:493
++#: option.c:1563 tftp.c:493
+ #, c-format
+ msgid "cannot access %s: %s"
+ msgstr ""
+
+-#: option.c:1588
++#: option.c:1615
+ msgid "setting log facility is not possible under Android"
+ msgstr ""
+
+-#: option.c:1597
++#: option.c:1624
+ msgid "bad log facility"
+ msgstr ""
+
+-#: option.c:1650
++#: option.c:1677
+ msgid "bad MX preference"
+ msgstr ""
+
+-#: option.c:1655
++#: option.c:1682
+ msgid "bad MX name"
+ msgstr ""
+
+-#: option.c:1669
++#: option.c:1696
+ msgid "bad MX target"
+ msgstr ""
+
+-#: option.c:1681
++#: option.c:1708
+ msgid "cannot run scripts under uClinux"
+ msgstr ""
+
+-#: option.c:1683
++#: option.c:1710
+ msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts"
+ msgstr ""
+
+-#: option.c:1687
++#: option.c:1714
+ msgid "recompile with HAVE_LUASCRIPT defined to enable Lua scripts"
+ msgstr ""
+
+-#: option.c:1928 option.c:1966 option.c:2015
++#: option.c:1970 option.c:2015 option.c:2071
+ msgid "bad prefix"
+ msgstr ""
+
+-#: option.c:2289
++#: option.c:2352
+ msgid "recompile with HAVE_IPSET defined to enable ipset directives"
+ msgstr ""
+
+-#: option.c:2469
++#: option.c:2545
+ msgid "bad port range"
+ msgstr ""
+
+-#: option.c:2485
++#: option.c:2561
+ msgid "bad bridge-interface"
+ msgstr ""
+
+-#: option.c:2545
++#: option.c:2621
+ msgid "only one tag allowed"
+ msgstr ""
+
+-#: option.c:2565 option.c:2577 option.c:2683 option.c:2724
++#: option.c:2641 option.c:2653 option.c:2759 option.c:2800
+ msgid "bad dhcp-range"
+ msgstr ""
+
+-#: option.c:2592
++#: option.c:2668
+ msgid "inconsistent DHCP range"
+ msgstr ""
+
+-#: option.c:2651
++#: option.c:2727
+ msgid "prefix length must be exactly 64 for RA subnets"
+ msgstr ""
+
+-#: option.c:2653
++#: option.c:2729
+ msgid "prefix length must be exactly 64 for subnet constructors"
+ msgstr ""
+
+-#: option.c:2657
++#: option.c:2733
+ msgid "prefix length must be at least 64"
+ msgstr ""
+
+-#: option.c:2660
++#: option.c:2736
+ msgid "inconsistent DHCPv6 range"
+ msgstr ""
+
+-#: option.c:2671
++#: option.c:2747
+ msgid "prefix must be zero with \"constructor:\" argument"
+ msgstr ""
+
+-#: option.c:2782 option.c:2830
++#: option.c:2858 option.c:2906
+ msgid "bad hex constant"
+ msgstr ""
+
+-#: option.c:2804
++#: option.c:2880
+ msgid "cannot match tags in --dhcp-host"
+ msgstr ""
+
+-#: option.c:2852
++#: option.c:2928
+ #, c-format
+ msgid "duplicate dhcp-host IP address %s"
+ msgstr ""
+
+-#: option.c:2910
++#: option.c:2986
+ msgid "bad DHCP host name"
+ msgstr ""
+
+-#: option.c:2992
++#: option.c:3068
+ msgid "bad tag-if"
+ msgstr ""
+
+-#: option.c:3316 option.c:3710
++#: option.c:3392 option.c:3786
+ msgid "invalid port number"
+ msgstr ""
+
+-#: option.c:3378
++#: option.c:3454
+ msgid "bad dhcp-proxy address"
+ msgstr ""
+
+-#: option.c:3404
++#: option.c:3480
+ msgid "Bad dhcp-relay"
+ msgstr ""
+
+-#: option.c:3430
++#: option.c:3506
+ msgid "bad RA-params"
+ msgstr ""
+
+-#: option.c:3439
++#: option.c:3515
+ msgid "bad DUID"
+ msgstr ""
+
+-#: option.c:3481
++#: option.c:3557
+ msgid "invalid alias range"
+ msgstr ""
+
+-#: option.c:3535
++#: option.c:3611
+ msgid "bad CNAME"
+ msgstr ""
+
+-#: option.c:3540
++#: option.c:3616
+ msgid "duplicate CNAME"
+ msgstr ""
+
+-#: option.c:3560
++#: option.c:3636
+ msgid "bad PTR record"
+ msgstr ""
+
+-#: option.c:3591
++#: option.c:3667
+ msgid "bad NAPTR record"
+ msgstr ""
+
+-#: option.c:3625
++#: option.c:3701
+ msgid "bad RR record"
+ msgstr ""
+
+-#: option.c:3655
++#: option.c:3731
+ msgid "bad TXT record"
+ msgstr ""
+
+-#: option.c:3696
++#: option.c:3772
+ msgid "bad SRV record"
+ msgstr ""
+
+-#: option.c:3703
++#: option.c:3779
+ msgid "bad SRV target"
+ msgstr ""
+
+-#: option.c:3717
++#: option.c:3793
+ msgid "invalid priority"
+ msgstr ""
+
+-#: option.c:3724
++#: option.c:3800
+ msgid "invalid weight"
+ msgstr ""
+
+-#: option.c:3748
++#: option.c:3824
+ msgid "Bad host-record"
+ msgstr ""
+
+-#: option.c:3765
++#: option.c:3841
+ msgid "Bad name in host-record"
+ msgstr ""
+
+-#: option.c:3826
++#: option.c:3906
+ msgid "bad trust anchor"
+ msgstr ""
+
+-#: option.c:3840
++#: option.c:3920
+ msgid "bad HEX in trust anchor"
+ msgstr ""
+
+-#: option.c:3850
++#: option.c:3930
+ msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DNSSEC/DBus support)"
+ msgstr ""
+
+-#: option.c:3909
++#: option.c:3989
+ msgid "missing \""
+ msgstr ""
+
+-#: option.c:3966
++#: option.c:4046
+ msgid "bad option"
+ msgstr ""
+
+-#: option.c:3968
++#: option.c:4048
+ msgid "extraneous parameter"
+ msgstr ""
+
+-#: option.c:3970
++#: option.c:4050
+ msgid "missing parameter"
+ msgstr ""
+
+-#: option.c:3972
++#: option.c:4052
+ msgid "illegal option"
+ msgstr ""
+
+-#: option.c:3979
++#: option.c:4059
+ msgid "error"
+ msgstr ""
+
+-#: option.c:3981
++#: option.c:4061
+ #, c-format
+ msgid " at line %d of %s"
+ msgstr ""
+
+-#: option.c:4045 option.c:4168 tftp.c:667
++#: option.c:4076 option.c:4323 option.c:4359
+ #, c-format
+-msgid "cannot read %s: %s"
++msgid "read %s"
+ msgstr ""
+
+-#: option.c:4229 option.c:4265
++#: option.c:4139 option.c:4262 tftp.c:667
+ #, c-format
+-msgid "read %s"
++msgid "cannot read %s: %s"
+ msgstr ""
+
+-#: option.c:4331
++#: option.c:4425
+ msgid "junk found in command line"
+ msgstr ""
+
+-#: option.c:4366
++#: option.c:4460
+ #, c-format
+ msgid "Dnsmasq version %s %s\n"
+ msgstr ""
+
+-#: option.c:4367
++#: option.c:4461
+ #, c-format
+ msgid ""
+ "Compile time options: %s\n"
+ "\n"
+ msgstr ""
+
+-#: option.c:4368
++#: option.c:4462
+ #, c-format
+ msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
+ msgstr ""
+
+-#: option.c:4369
++#: option.c:4463
+ #, c-format
+ msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
+ msgstr ""
+
+-#: option.c:4370
++#: option.c:4464
+ #, c-format
+ msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
+ msgstr ""
+
+-#: option.c:4381
++#: option.c:4475
+ msgid "try --help"
+ msgstr ""
+
+-#: option.c:4383
++#: option.c:4477
+ msgid "try -w"
+ msgstr ""
+
+-#: option.c:4385
++#: option.c:4479
+ #, c-format
+ msgid "bad command line options: %s"
+ msgstr ""
+
+-#: option.c:4434
++#: option.c:4535
+ #, c-format
+ msgid "cannot get host-name: %s"
+ msgstr ""
+
+-#: option.c:4462
++#: option.c:4563
+ msgid "only one resolv.conf file allowed in no-poll mode."
+ msgstr ""
+
+-#: option.c:4472
++#: option.c:4573
+ msgid "must have exactly one resolv.conf to read domain from."
+ msgstr ""
+
+-#: option.c:4475 network.c:1506 dhcp.c:769
++#: option.c:4576 network.c:1506 dhcp.c:774
+ #, c-format
+ msgid "failed to read %s: %s"
+ msgstr ""
+
+-#: option.c:4492
++#: option.c:4593
+ #, c-format
+ msgid "no search directive found in %s"
+ msgstr ""
+
+-#: option.c:4513
++#: option.c:4614
+ msgid "there must be a default domain when --dhcp-fqdn is set"
+ msgstr ""
+
+-#: option.c:4522
++#: option.c:4623
+ msgid "syntax check OK"
+ msgstr ""
+
+-#: forward.c:114
++#: forward.c:111
+ #, c-format
+ msgid "failed to send packet: %s"
+ msgstr ""
+
+-#: forward.c:574
++#: forward.c:572
+ msgid "discarding DNS reply: subnet option mismatch"
+ msgstr ""
+
+-#: forward.c:597
++#: forward.c:595
+ #, c-format
+ msgid "nameserver %s refused to do a recursive query"
+ msgstr ""
+
+-#: forward.c:629
++#: forward.c:627
+ #, c-format
+ msgid "possible DNS-rebind attack detected: %s"
+ msgstr ""
+
+-#: forward.c:1132 forward.c:1663
++#: forward.c:1156 forward.c:1722
+ msgid "Ignoring query from non-local network"
+ msgstr ""
+
+-#: forward.c:2101
++#: forward.c:2178
+ #, c-format
+ msgid "Maximum number of concurrent DNS queries reached (max: %d)"
+ msgstr ""
+@@ -1180,263 +1208,276 @@ msgstr ""
+ msgid "using nameserver %s#%d"
+ msgstr ""
+
+-#: dnsmasq.c:154
+-msgid "No trust anchors provided for DNSSEC"
++#: dnsmasq.c:149
++msgid "dhcp-hostsdir, dhcp-optsdir and hostsdir are not supported on this platform"
+ msgstr ""
+
+-#: dnsmasq.c:157
+-msgid "Cannot reduce cache size from default when DNSSEC enabled"
++#: dnsmasq.c:156
++msgid "no trust anchors provided for DNSSEC"
+ msgstr ""
+
+ #: dnsmasq.c:159
++msgid "cannot reduce cache size from default when DNSSEC enabled"
++msgstr ""
++
++#: dnsmasq.c:161
+ msgid "DNSSEC not available: set HAVE_DNSSEC in src/config.h"
+ msgstr ""
+
+-#: dnsmasq.c:165
++#: dnsmasq.c:167
+ msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
+ msgstr ""
+
+-#: dnsmasq.c:170
+-msgid "Cannot use --conntrack AND --query-port"
++#: dnsmasq.c:172
++msgid "cannot use --conntrack AND --query-port"
+ msgstr ""
+
+-#: dnsmasq.c:173
+-msgid "Conntrack support not available: set HAVE_CONNTRACK in src/config.h"
++#: dnsmasq.c:175
++msgid "conntrack support not available: set HAVE_CONNTRACK in src/config.h"
+ msgstr ""
+
+-#: dnsmasq.c:178
++#: dnsmasq.c:180
+ msgid "asychronous logging is not available under Solaris"
+ msgstr ""
+
+-#: dnsmasq.c:183
++#: dnsmasq.c:185
+ msgid "asychronous logging is not available under Android"
+ msgstr ""
+
+-#: dnsmasq.c:188
++#: dnsmasq.c:190
+ msgid "authoritative DNS not available: set HAVE_AUTH in src/config.h"
+ msgstr ""
+
+-#: dnsmasq.c:193
+-msgid "Loop detection not available: set HAVE_LOOP in src/config.h"
++#: dnsmasq.c:195
++msgid "loop detection not available: set HAVE_LOOP in src/config.h"
+ msgstr ""
+
+-#: dnsmasq.c:201
++#: dnsmasq.c:203
+ msgid "zone serial must be configured in --auth-soa"
+ msgstr ""
+
+-#: dnsmasq.c:219
++#: dnsmasq.c:221
+ msgid "dhcp-range constructor not available on this platform"
+ msgstr ""
+
+-#: dnsmasq.c:262
++#: dnsmasq.c:264
+ msgid "cannot set --bind-interfaces and --bind-dynamic"
+ msgstr ""
+
+-#: dnsmasq.c:265
++#: dnsmasq.c:267
+ #, c-format
+ msgid "failed to find list of interfaces: %s"
+ msgstr ""
+
+-#: dnsmasq.c:274
++#: dnsmasq.c:276
+ #, c-format
+ msgid "unknown interface %s"
+ msgstr ""
+
+-#: dnsmasq.c:330 dnsmasq.c:954
++#: dnsmasq.c:340 dnsmasq.c:1004
+ #, c-format
+ msgid "DBus error: %s"
+ msgstr ""
+
+-#: dnsmasq.c:333
++#: dnsmasq.c:343
+ msgid "DBus not available: set HAVE_DBUS in src/config.h"
+ msgstr ""
+
+-#: dnsmasq.c:361
++#: dnsmasq.c:371
+ #, c-format
+ msgid "unknown user or group: %s"
+ msgstr ""
+
+-#: dnsmasq.c:416
++#: dnsmasq.c:426
+ #, c-format
+ msgid "cannot chdir to filesystem root: %s"
+ msgstr ""
+
+-#: dnsmasq.c:653
++#: dnsmasq.c:667
+ #, c-format
+ msgid "started, version %s DNS disabled"
+ msgstr ""
+
+-#: dnsmasq.c:655
++#: dnsmasq.c:669
+ #, c-format
+ msgid "started, version %s cachesize %d"
+ msgstr ""
+
+-#: dnsmasq.c:657
++#: dnsmasq.c:671
+ #, c-format
+ msgid "started, version %s cache disabled"
+ msgstr ""
+
+-#: dnsmasq.c:659
++#: dnsmasq.c:673
+ #, c-format
+ msgid "compile time options: %s"
+ msgstr ""
+
+-#: dnsmasq.c:665
++#: dnsmasq.c:679
+ msgid "DBus support enabled: connected to system bus"
+ msgstr ""
+
+-#: dnsmasq.c:667
++#: dnsmasq.c:681
+ msgid "DBus support enabled: bus connection pending"
+ msgstr ""
+
+-#: dnsmasq.c:672
++#: dnsmasq.c:686
+ msgid "DNS service limited to local subnets"
+ msgstr ""
+
+-#: dnsmasq.c:677
++#: dnsmasq.c:702
+ msgid "DNSSEC validation enabled"
+ msgstr ""
+
+-#: dnsmasq.c:679
++#: dnsmasq.c:705
+ msgid "DNSSEC signature timestamps not checked until first cache reload"
+ msgstr ""
+
+-#: dnsmasq.c:684
++#: dnsmasq.c:708
++msgid "DNSSEC signature timestamps not checked until system time valid"
++msgstr ""
++
++#: dnsmasq.c:713
+ #, c-format
+ msgid "warning: failed to change owner of %s: %s"
+ msgstr ""
+
+-#: dnsmasq.c:688
++#: dnsmasq.c:717
+ msgid "setting --bind-interfaces option because of OS limitations"
+ msgstr ""
+
+-#: dnsmasq.c:698
++#: dnsmasq.c:727
+ #, c-format
+ msgid "warning: interface %s does not currently exist"
+ msgstr ""
+
+-#: dnsmasq.c:703
++#: dnsmasq.c:732
+ msgid "warning: ignoring resolv-file flag because no-resolv is set"
+ msgstr ""
+
+-#: dnsmasq.c:706
++#: dnsmasq.c:735
+ msgid "warning: no upstream servers configured"
+ msgstr ""
+
+-#: dnsmasq.c:710
++#: dnsmasq.c:739
+ #, c-format
+ msgid "asynchronous logging enabled, queue limit is %d messages"
+ msgstr ""
+
+-#: dnsmasq.c:731
++#: dnsmasq.c:760
+ msgid "IPv6 router advertisement enabled"
+ msgstr ""
+
+-#: dnsmasq.c:736
++#: dnsmasq.c:765
+ #, c-format
+ msgid "DHCP, sockets bound exclusively to interface %s"
+ msgstr ""
+
+-#: dnsmasq.c:753
++#: dnsmasq.c:782
+ msgid "root is "
+ msgstr ""
+
+-#: dnsmasq.c:753
++#: dnsmasq.c:782
+ msgid "enabled"
+ msgstr ""
+
+-#: dnsmasq.c:755
++#: dnsmasq.c:784
+ msgid "secure mode"
+ msgstr ""
+
+-#: dnsmasq.c:781
++#: dnsmasq.c:810
+ #, c-format
+ msgid "restricting maximum simultaneous TFTP transfers to %d"
+ msgstr ""
+
+-#: dnsmasq.c:956
++#: dnsmasq.c:1006
+ msgid "connected to system DBus"
+ msgstr ""
+
+-#: dnsmasq.c:1106
++#: dnsmasq.c:1156
+ #, c-format
+ msgid "cannot fork into background: %s"
+ msgstr ""
+
+-#: dnsmasq.c:1109
++#: dnsmasq.c:1159
+ #, c-format
+ msgid "failed to create helper: %s"
+ msgstr ""
+
+-#: dnsmasq.c:1112
++#: dnsmasq.c:1162
+ #, c-format
+ msgid "setting capabilities failed: %s"
+ msgstr ""
+
+-#: dnsmasq.c:1115
++#: dnsmasq.c:1165
+ #, c-format
+ msgid "failed to change user-id to %s: %s"
+ msgstr ""
+
+-#: dnsmasq.c:1118
++#: dnsmasq.c:1168
+ #, c-format
+ msgid "failed to change group-id to %s: %s"
+ msgstr ""
+
+-#: dnsmasq.c:1121
++#: dnsmasq.c:1171
+ #, c-format
+ msgid "failed to open pidfile %s: %s"
+ msgstr ""
+
+-#: dnsmasq.c:1124
++#: dnsmasq.c:1174
+ #, c-format
+ msgid "cannot open log %s: %s"
+ msgstr ""
+
+-#: dnsmasq.c:1127
++#: dnsmasq.c:1177
+ #, c-format
+ msgid "failed to load Lua script: %s"
+ msgstr ""
+
+-#: dnsmasq.c:1130
++#: dnsmasq.c:1180
+ #, c-format
+ msgid "TFTP directory %s inaccessible: %s"
+ msgstr ""
+
+-#: dnsmasq.c:1151
++#: dnsmasq.c:1183
++#, c-format
++msgid "cannot create timestamp file %s: %s"
++msgstr ""
++
++#: dnsmasq.c:1204
+ msgid "now checking DNSSEC signature timestamps"
+ msgstr ""
+
+-#: dnsmasq.c:1218
++#: dnsmasq.c:1271
+ #, c-format
+ msgid "script process killed by signal %d"
+ msgstr ""
+
+-#: dnsmasq.c:1222
++#: dnsmasq.c:1275
+ #, c-format
+ msgid "script process exited with status %d"
+ msgstr ""
+
+-#: dnsmasq.c:1226
++#: dnsmasq.c:1279
+ #, c-format
+ msgid "failed to execute %s: %s"
+ msgstr ""
+
+-#: dnsmasq.c:1281
++#: dnsmasq.c:1334
+ msgid "exiting on receipt of SIGTERM"
+ msgstr ""
+
+-#: dnsmasq.c:1309
++#: dnsmasq.c:1362
+ #, c-format
+ msgid "failed to access %s: %s"
+ msgstr ""
+
+-#: dnsmasq.c:1339
++#: dnsmasq.c:1392
+ #, c-format
+ msgid "reading %s"
+ msgstr ""
+
+-#: dnsmasq.c:1350
++#: dnsmasq.c:1403
+ #, c-format
+ msgid "no servers found in %s, will retry"
+ msgstr ""
+@@ -1476,27 +1517,27 @@ msgstr ""
+ msgid "DHCP packet received on %s which has no address"
+ msgstr ""
+
+-#: dhcp.c:408
++#: dhcp.c:412
+ #, c-format
+ msgid "ARP-cache injection failed: %s"
+ msgstr ""
+
+-#: dhcp.c:506
++#: dhcp.c:511
+ #, c-format
+ msgid "DHCP range %s -- %s is not consistent with netmask %s"
+ msgstr ""
+
+-#: dhcp.c:807
++#: dhcp.c:812
+ #, c-format
+ msgid "bad line at %s line %d"
+ msgstr ""
+
+-#: dhcp.c:850
++#: dhcp.c:855
+ #, c-format
+ msgid "ignoring %s line %d, duplicate name or IP address"
+ msgstr ""
+
+-#: dhcp.c:994 rfc3315.c:2089
++#: dhcp.c:999 rfc3315.c:2139
+ #, c-format
+ msgid "DHCP relay %s -> %s"
+ msgstr ""
+@@ -1567,12 +1608,12 @@ msgstr ""
+ msgid "disabled"
+ msgstr ""
+
+-#: rfc2131.c:539 rfc2131.c:967 rfc2131.c:1385 rfc3315.c:602 rfc3315.c:823
+-#: rfc3315.c:1095
++#: rfc2131.c:539 rfc2131.c:967 rfc2131.c:1385 rfc3315.c:603 rfc3315.c:860
++#: rfc3315.c:1139
+ msgid "ignored"
+ msgstr ""
+
+-#: rfc2131.c:554 rfc2131.c:1205 rfc3315.c:873
++#: rfc2131.c:554 rfc2131.c:1205 rfc3315.c:910
+ msgid "address in use"
+ msgstr ""
+
+@@ -1592,7 +1633,7 @@ msgstr ""
+ msgid "no leases left"
+ msgstr ""
+
+-#: rfc2131.c:691 rfc3315.c:475
++#: rfc2131.c:691 rfc3315.c:476
+ #, c-format
+ msgid "%u client provides name: %s"
+ msgstr ""
+@@ -1601,7 +1642,7 @@ msgstr ""
+ msgid "PXE BIS not supported"
+ msgstr ""
+
+-#: rfc2131.c:935 rfc3315.c:1189
++#: rfc2131.c:935 rfc3315.c:1233
+ #, c-format
+ msgid "disabling DHCP static address %s for %s"
+ msgstr ""
+@@ -1637,7 +1678,7 @@ msgstr ""
+ msgid "wrong address"
+ msgstr ""
+
+-#: rfc2131.c:1143 rfc3315.c:969
++#: rfc2131.c:1143 rfc3315.c:1006
+ msgid "lease not found"
+ msgstr ""
+
+@@ -1687,7 +1728,7 @@ msgstr ""
+ msgid "PXE menu too large"
+ msgstr ""
+
+-#: rfc2131.c:2173 rfc3315.c:1456
++#: rfc2131.c:2173 rfc3315.c:1506
+ #, c-format
+ msgid "%u requested options: %s"
+ msgstr ""
+@@ -1702,7 +1743,7 @@ msgstr ""
+ msgid "cannot create netlink socket: %s"
+ msgstr ""
+
+-#: netlink.c:347
++#: netlink.c:348
+ #, c-format
+ msgid "netlink returns error: %s"
+ msgstr ""
+@@ -1820,62 +1861,62 @@ msgstr ""
+ msgid "%u available DHCPv6 subnet: %s/%d"
+ msgstr ""
+
+-#: rfc3315.c:379
++#: rfc3315.c:380
+ #, c-format
+ msgid "%u vendor class: %u"
+ msgstr ""
+
+-#: rfc3315.c:427
++#: rfc3315.c:428
+ #, c-format
+ msgid "%u client MAC address: %s"
+ msgstr ""
+
+-#: rfc3315.c:659
++#: rfc3315.c:660
+ #, c-format
+ msgid "unknown prefix-class %d"
+ msgstr ""
+
+-#: rfc3315.c:791 rfc3315.c:913
+-msgid "success"
++#: rfc3315.c:803 rfc3315.c:902
++msgid "address unavailable"
+ msgstr ""
+
+-#: rfc3315.c:806 rfc3315.c:808 rfc3315.c:921 rfc3315.c:923
+-msgid "no addresses available"
++#: rfc3315.c:815 rfc3315.c:950 rfc3315.c:1283
++msgid "success"
+ msgstr ""
+
+-#: rfc3315.c:865
+-msgid "address unavailable"
++#: rfc3315.c:843 rfc3315.c:845 rfc3315.c:958 rfc3315.c:960
++msgid "no addresses available"
+ msgstr ""
+
+-#: rfc3315.c:900
++#: rfc3315.c:937
+ msgid "not on link"
+ msgstr ""
+
+-#: rfc3315.c:973 rfc3315.c:1151 rfc3315.c:1228
++#: rfc3315.c:1010 rfc3315.c:1195 rfc3315.c:1272
+ msgid "no binding found"
+ msgstr ""
+
+-#: rfc3315.c:1011
++#: rfc3315.c:1048
+ msgid "deprecated"
+ msgstr ""
+
+-#: rfc3315.c:1016
++#: rfc3315.c:1053
+ msgid "address invalid"
+ msgstr ""
+
+-#: rfc3315.c:1061
++#: rfc3315.c:1100
+ msgid "confirm failed"
+ msgstr ""
+
+-#: rfc3315.c:1072
++#: rfc3315.c:1116
+ msgid "all addresses still on link"
+ msgstr ""
+
+-#: rfc3315.c:1160
++#: rfc3315.c:1204
+ msgid "release received"
+ msgstr ""
+
+-#: rfc3315.c:2080
++#: rfc3315.c:2130
+ msgid "Cannot multicast to DHCPv6 server without correct interface"
+ msgstr ""
+
+@@ -1968,7 +2009,7 @@ msgstr ""
+ msgid "cannot create ICMPv6 socket: %s"
+ msgstr ""
+
+-#: auth.c:429
++#: auth.c:436
+ #, c-format
+ msgid "ignoring zone transfer request from %s"
+ msgstr ""
+@@ -1983,50 +2024,85 @@ msgstr ""
+ msgid "failed to create IPset control socket: %s"
+ msgstr ""
+
++#: dnssec.c:425 dnssec.c:469
++#, c-format
++msgid "failed to update mtime on %s: %s"
++msgstr ""
++
+ #: blockdata.c:58
+ #, c-format
+ msgid "DNSSEC memory in use %u, max %u, allocated %u"
+ msgstr ""
+
+-#: tables.c:76
++#: tables.c:80
+ msgid "error: fill_addr missused"
+ msgstr ""
+
+-#: tables.c:105
++#: tables.c:109
+ #, c-format
+ msgid "failed to access pf devices: %s"
+ msgstr ""
+
+-#: tables.c:119
++#: tables.c:123
+ #, c-format
+ msgid "warning: no opened pf devices %s"
+ msgstr ""
+
+-#: tables.c:127
++#: tables.c:131
+ #, c-format
+ msgid "error: cannot use table name %s"
+ msgstr ""
+
+-#: tables.c:135
++#: tables.c:139
+ #, c-format
+ msgid "error: cannot strlcpy table name %s"
+ msgstr ""
+
+-#: tables.c:141
++#: tables.c:145
+ #, c-format
+ msgid "warning: pfr_add_tables: %s(%d)"
+ msgstr ""
+
+-#: tables.c:147
++#: tables.c:151
+ msgid "info: table created"
+ msgstr ""
+
+-#: tables.c:158
++#: tables.c:162
+ #, c-format
+ msgid "warning: DIOCR%sADDRS: %s"
+ msgstr ""
+
+-#: tables.c:162
++#: tables.c:166
+ #, c-format
+ msgid "%d addresses %s"
+ msgstr ""
++
++#: inotify.c:46
++#, c-format
++msgid "failed to create inotify: %s"
++msgstr ""
++
++#: inotify.c:60
++#, c-format
++msgid "cannot cannonicalise resolv-file %s: %s"
++msgstr ""
++
++#: inotify.c:72
++#, c-format
++msgid "directory %s for resolv-file is missing, cannot poll"
++msgstr ""
++
++#: inotify.c:75 inotify.c:112
++#, c-format
++msgid "failed to create inotify for %s: %s"
++msgstr ""
++
++#: inotify.c:97
++#, c-format
++msgid "bad dynamic directory %s: %s"
++msgstr ""
++
++#: inotify.c:197
++#, c-format
++msgid "inotify, new or changed file %s"
++msgstr ""
+diff --git a/po/ro.po b/po/ro.po
+index 6887fcb62636..0ac8bd63e25f 100644
+--- a/po/ro.po
++++ b/po/ro.po
+@@ -15,71 +15,71 @@ msgstr ""
+ "Content-Type: text/plain; charset=UTF-8\n"
+ "Content-Transfer-Encoding: 8bit\n"
+
+-#: cache.c:505
++#: cache.c:523
+ msgid "Internal error in cache."
+ msgstr ""
+
+ # for compatibility purposes the letters â, ă, ş, ţ and î can be written as their look-alike correspondent.
+-#: cache.c:908
++#: cache.c:941
+ #, fuzzy, c-format
+ msgid "failed to load names from %s: %s"
+ msgstr "încărcarea numelor din %s: %s a eşuat"
+
+-#: cache.c:934 dhcp.c:820
++#: cache.c:967 dhcp.c:825
+ #, c-format
+ msgid "bad address at %s line %d"
+ msgstr "adresă greşită în %s, linia %d"
+
+-#: cache.c:985 dhcp.c:836
++#: cache.c:1018 dhcp.c:841
+ #, c-format
+ msgid "bad name at %s line %d"
+ msgstr "nume greşit în %s linia %d"
+
+-#: cache.c:992 dhcp.c:911
++#: cache.c:1027 dhcp.c:916
+ #, c-format
+ msgid "read %s - %d addresses"
+ msgstr "citesc %s - %d adrese"
+
+-#: cache.c:1100
++#: cache.c:1135
+ msgid "cleared cache"
+ msgstr "memoria temporară a fost ştearsă"
+
+-#: cache.c:1123
++#: cache.c:1164
+ #, c-format
+ msgid "No IPv4 address found for %s"
+ msgstr ""
+
+-#: cache.c:1201
++#: cache.c:1242
+ #, c-format
+ msgid "%s is a CNAME, not giving it to the DHCP lease of %s"
+ msgstr ""
+
+-#: cache.c:1225
++#: cache.c:1266
+ #, c-format
+ msgid "not giving name %s to the DHCP lease of %s because the name exists in %s with address %s"
+ msgstr "nu pot da numele %s împrumutului de adresă DHCP a lui %s deoarece numeleexistă în %s cu adresa %s"
+
+-#: cache.c:1366
++#: cache.c:1421
+ #, c-format
+ msgid "time %lu"
+ msgstr ""
+
+-#: cache.c:1367
++#: cache.c:1422
+ #, fuzzy, c-format
+ msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
+ msgstr "cantitate de memorie temporară %d, %d/%d stocări temporare aureutilizat locaţii neexpirate."
+
+-#: cache.c:1369
++#: cache.c:1424
+ #, c-format
+ msgid "queries forwarded %u, queries answered locally %u"
+ msgstr ""
+
+-#: cache.c:1372
++#: cache.c:1427
+ #, c-format
+ msgid "queries for authoritative zones %u"
+ msgstr ""
+
+-#: cache.c:1398
++#: cache.c:1453
+ #, c-format
+ msgid "server %s#%d: queries sent %u, retried or failed %u"
+ msgstr ""
+@@ -94,7 +94,7 @@ msgstr "ascultarea pe socket a eşuat: %s"
+ msgid "failed to allocate memory"
+ msgstr "nu pot încărca %d bytes"
+
+-#: util.c:243 option.c:579
++#: util.c:243 option.c:598
+ msgid "could not get memory"
+ msgstr "nu am putut aloca memorie"
+
+@@ -108,610 +108,643 @@ msgstr "nu pot citi %s: %s"
+ msgid "failed to allocate %d bytes"
+ msgstr "nu pot încărca %d bytes"
+
+-#: util.c:429
++#: util.c:430
+ #, c-format
+ msgid "infinite"
+ msgstr "infinit"
+
+-#: option.c:318
++#: option.c:330
+ msgid "Specify local address(es) to listen on."
+ msgstr "Specificaţi adresele locale deservite."
+
+-#: option.c:319
++#: option.c:331
+ msgid "Return ipaddr for all hosts in specified domains."
+ msgstr "Afişează adresele IP ale maşinilor în domeniul dat."
+
+-#: option.c:320
++#: option.c:332
+ msgid "Fake reverse lookups for RFC1918 private address ranges."
+ msgstr "Simulează căutări după adresă pentru domenii de adresă private (RFC1918)."
+
+-#: option.c:321
++#: option.c:333
+ msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
+ msgstr "Interpretează adresa IP ca NXDOMAIN (împotriva manipulărilor Verisign)"
+
+-#: option.c:322
++#: option.c:334
+ #, c-format
+ msgid "Specify the size of the cache in entries (defaults to %s)."
+ msgstr "Specifică mărimea înregistrărilor temporare (implicit e %s)."
+
+-#: option.c:323
++#: option.c:335
+ #, c-format
+ msgid "Specify configuration file (defaults to %s)."
+ msgstr "Specifică fişier de configurare (implicit e %s)."
+
+-#: option.c:324
++#: option.c:336
+ msgid "Do NOT fork into the background: run in debug mode."
+ msgstr "NU porneşte în fundal: rulează în modul depanare."
+
+-#: option.c:325
++#: option.c:337
+ msgid "Do NOT forward queries with no domain part."
+ msgstr "NU înainta cererile ce nu conţin domeniu DNS."
+
+-#: option.c:326
++#: option.c:338
+ msgid "Return self-pointing MX records for local hosts."
+ msgstr "Răspunde cu înregistrări MX spre el însuşi pentru maşini locale."
+
+-#: option.c:327
++#: option.c:339
+ msgid "Expand simple names in /etc/hosts with domain-suffix."
+ msgstr "Adaugă numelor simple din /etc/hosts numele domeniului ca sufix."
+
+-#: option.c:328
++#: option.c:340
+ msgid "Don't forward spurious DNS requests from Windows hosts."
+ msgstr "Nu inainta cereri DNS defecte provenite de la maşini Windows."
+
+-#: option.c:329
++#: option.c:341
+ msgid "Enable DHCP in the range given with lease duration."
+ msgstr "Activează DHCP în domeniul dat cu durată limitată de împrumut."
+
+-#: option.c:330
++#: option.c:342
+ #, c-format
+ msgid "Change to this group after startup (defaults to %s)."
+ msgstr "Rulează sub acest grup după pornire (implicit e %s)."
+
+-#: option.c:331
++#: option.c:343
+ msgid "Set address or hostname for a specified machine."
+ msgstr "Schimbă adresa sau numele maşinii specificate."
+
+-#: option.c:332
++#: option.c:344
+ #, fuzzy
+ msgid "Read DHCP host specs from file."
+ msgstr "nume MX invalid"
+
+-#: option.c:333
++#: option.c:345
+ msgid "Read DHCP option specs from file."
+ msgstr ""
+
+-#: option.c:334
++#: option.c:346
++#, fuzzy
++msgid "Read DHCP host specs from a directory."
++msgstr "nume MX invalid"
++
++#: option.c:347
++#, fuzzy
++msgid "Read DHCP options from a directory."
++msgstr "nume MX invalid"
++
++#: option.c:348
+ msgid "Evaluate conditional tag expression."
+ msgstr ""
+
+-#: option.c:335
++#: option.c:349
+ #, c-format
+ msgid "Do NOT load %s file."
+ msgstr "Nu încarcă fişierul %s."
+
+-#: option.c:336
++#: option.c:350
+ #, c-format
+ msgid "Specify a hosts file to be read in addition to %s."
+ msgstr "Specifică spre citire un fişier hosts adiţional la %s."
+
+-#: option.c:337
++#: option.c:351
++#, fuzzy
++msgid "Read hosts files from a directory."
++msgstr "nume MX invalid"
++
++#: option.c:352
+ msgid "Specify interface(s) to listen on."
+ msgstr "Specifică interfeţele deservite."
+
+-#: option.c:338
++#: option.c:353
+ msgid "Specify interface(s) NOT to listen on."
+ msgstr "Specifică interfeţele NE-deservite."
+
+-#: option.c:339
++#: option.c:354
+ #, fuzzy
+ msgid "Map DHCP user class to tag."
+ msgstr "Leagă clasa de utilizator DHCP cu grup de opţiuni."
+
+-#: option.c:340
++#: option.c:355
+ msgid "Map RFC3046 circuit-id to tag."
+ msgstr ""
+
+-#: option.c:341
++#: option.c:356
+ msgid "Map RFC3046 remote-id to tag."
+ msgstr ""
+
+-#: option.c:342
++#: option.c:357
+ msgid "Map RFC3993 subscriber-id to tag."
+ msgstr ""
+
+-#: option.c:343
++#: option.c:358
+ #, fuzzy
+ msgid "Don't do DHCP for hosts with tag set."
+ msgstr "Nu furniza DHCP maşinilor din grupul de opţiuni."
+
+-#: option.c:344
++#: option.c:359
+ #, fuzzy
+ msgid "Force broadcast replies for hosts with tag set."
+ msgstr "Nu furniza DHCP maşinilor din grupul de opţiuni."
+
+-#: option.c:345
++#: option.c:360
+ msgid "Do NOT fork into the background, do NOT run in debug mode."
+ msgstr "NU porneşte în fundal, NU rulează în modul depanare."
+
+-#: option.c:346
++#: option.c:361
+ msgid "Assume we are the only DHCP server on the local network."
+ msgstr "Presupune că suntem singurul server DHCP din reţeaua locală."
+
+-#: option.c:347
++#: option.c:362
+ #, c-format
+ msgid "Specify where to store DHCP leases (defaults to %s)."
+ msgstr "Specifică fişierul de stocare a împrumuturilor DHCP (implicit e %s)."
+
+-#: option.c:348
++#: option.c:363
+ msgid "Return MX records for local hosts."
+ msgstr "Răspunde cu întregistrări MX pentru maşini locale."
+
+-#: option.c:349
++#: option.c:364
+ msgid "Specify an MX record."
+ msgstr "Specifică o înregistrare MX."
+
+-#: option.c:350
++#: option.c:365
+ msgid "Specify BOOTP options to DHCP server."
+ msgstr "Specifică opţiuni BOOTP serverului DHCP."
+
+-#: option.c:351
++#: option.c:366
+ #, c-format
+ msgid "Do NOT poll %s file, reload only on SIGHUP."
+ msgstr "Nu încărca fişierul %s, citeşte-l doar la SIGHUP."
+
+-#: option.c:352
++#: option.c:367
+ msgid "Do NOT cache failed search results."
+ msgstr "NU memora rezultatele de căutare DNS eşuatată."
+
+-#: option.c:353
++#: option.c:368
+ #, c-format
+ msgid "Use nameservers strictly in the order given in %s."
+ msgstr "Foloseşte servere DNS strict în ordinea dată în %s."
+
+-#: option.c:354
++#: option.c:369
+ #, fuzzy
+ msgid "Specify options to be sent to DHCP clients."
+ msgstr "Configurează opţiuni în plusce trebuie trimise clienţilor DHCP."
+
+-#: option.c:355
++#: option.c:370
+ msgid "DHCP option sent even if the client does not request it."
+ msgstr ""
+
+-#: option.c:356
++#: option.c:371
+ msgid "Specify port to listen for DNS requests on (defaults to 53)."
+ msgstr "Specifică numărul portului pentru cereri DNS (implicit e 53)."
+
+-#: option.c:357
++#: option.c:372
+ #, c-format
+ msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
+ msgstr "Marimea maximă a pachetului UDP pentru EDNS.0 (implicit e %s)."
+
+-#: option.c:358
++#: option.c:373
+ #, fuzzy
+ msgid "Log DNS queries."
+ msgstr "Înregistrează tranzacţiile."
+
+-#: option.c:359
++#: option.c:374
+ #, fuzzy
+ msgid "Force the originating port for upstream DNS queries."
+ msgstr "Forţează acest port pentru datele ce pleacă."
+
+-#: option.c:360
++#: option.c:375
+ msgid "Do NOT read resolv.conf."
+ msgstr "NU citi fişierul resolv.conf"
+
+-#: option.c:361
++#: option.c:376
+ #, c-format
+ msgid "Specify path to resolv.conf (defaults to %s)."
+ msgstr "Specifică calea către resolv.conf (implicit e %s)."
+
+-#: option.c:362
++#: option.c:377
+ #, fuzzy
+ msgid "Specify path to file with server= options"
+ msgstr "Specifică o cale pentru fişierul PID. (implicit %s)."
+
+-#: option.c:363
++#: option.c:378
+ msgid "Specify address(es) of upstream servers with optional domains."
+ msgstr "Specifică adresele server(elor) superioare cu domenii opţionale."
+
+-#: option.c:364
++#: option.c:379
+ #, fuzzy
+ msgid "Specify address of upstream servers for reverse address queries"
+ msgstr "Specifică adresele server(elor) superioare cu domenii opţionale."
+
+-#: option.c:365
++#: option.c:380
+ msgid "Never forward queries to specified domains."
+ msgstr "Nu înaintează cererile spre domeniile specificate."
+
+-#: option.c:366
++#: option.c:381
+ msgid "Specify the domain to be assigned in DHCP leases."
+ msgstr "Specifică domeniul de transmis prin DHCP."
+
+-#: option.c:367
++#: option.c:382
+ msgid "Specify default target in an MX record."
+ msgstr "Specifică o ţintă într-o înregistrare MX."
+
+-#: option.c:368
++#: option.c:383
+ msgid "Specify time-to-live in seconds for replies from /etc/hosts."
+ msgstr "Specifică TTL în secunde pentru răspunsurile din /etc/hosts."
+
+-#: option.c:369
++#: option.c:384
+ #, fuzzy
+ msgid "Specify time-to-live in seconds for negative caching."
+ msgstr "Specifică TTL în secunde pentru răspunsurile din /etc/hosts."
+
+-#: option.c:370
++#: option.c:385
+ #, fuzzy
+ msgid "Specify time-to-live in seconds for maximum TTL to send to clients."
+ msgstr "Specifică TTL în secunde pentru răspunsurile din /etc/hosts."
+
+-#: option.c:371
++#: option.c:386
++#, fuzzy
++msgid "Specify time-to-live ceiling for cache."
++msgstr "Specifică TTL în secunde pentru răspunsurile din /etc/hosts."
++
++#: option.c:387
++#, fuzzy
++msgid "Specify time-to-live floor for cache."
++msgstr "Specifică TTL în secunde pentru răspunsurile din /etc/hosts."
++
++#: option.c:388
+ #, c-format
+ msgid "Change to this user after startup. (defaults to %s)."
+ msgstr "Rulează sub acest utilizator după pornire. (implicit e %s)."
+
+-#: option.c:372
++#: option.c:389
+ #, fuzzy
+ msgid "Map DHCP vendor class to tag."
+ msgstr "Trimite opţiuni DHCP în funcţie de marca plăcii de reţea."
+
+-#: option.c:373
++#: option.c:390
+ msgid "Display dnsmasq version and copyright information."
+ msgstr "Afişează versiunea dnsmasq şi drepturile de autor."
+
+-#: option.c:374
++#: option.c:391
+ msgid "Translate IPv4 addresses from upstream servers."
+ msgstr "Traduce adresele IPv4 de la serverele DNS superioare."
+
+-#: option.c:375
++#: option.c:392
+ msgid "Specify a SRV record."
+ msgstr "Specifică o înregistrare SRV."
+
+-#: option.c:376
++#: option.c:393
+ msgid "Display this message. Use --help dhcp for known DHCP options."
+ msgstr ""
+
+-#: option.c:377
++#: option.c:394
+ #, fuzzy, c-format
+ msgid "Specify path of PID file (defaults to %s)."
+ msgstr "Specifică o cale pentru fişierul PID. (implicit %s)."
+
+-#: option.c:378
++#: option.c:395
+ #, c-format
+ msgid "Specify maximum number of DHCP leases (defaults to %s)."
+ msgstr "Specifică numărul maxim de împrumuturi DHCP (implicit %s)."
+
+-#: option.c:379
++#: option.c:396
+ msgid "Answer DNS queries based on the interface a query was sent to."
+ msgstr "Răspunde cererilor DNS în funcţie de interfaţa pe care a venit cererea."
+
+-#: option.c:380
++#: option.c:397
+ msgid "Specify TXT DNS record."
+ msgstr "Specifică o înregistrare TXT."
+
+-#: option.c:381
++#: option.c:398
+ #, fuzzy
+ msgid "Specify PTR DNS record."
+ msgstr "Specifică o înregistrare TXT."
+
+-#: option.c:382
++#: option.c:399
+ msgid "Give DNS name to IPv4 address of interface."
+ msgstr ""
+
+-#: option.c:383
++#: option.c:400
+ msgid "Bind only to interfaces in use."
+ msgstr "Ascultă doar pe interfeţele active."
+
+-#: option.c:384
++#: option.c:401
+ #, c-format
+ msgid "Read DHCP static host information from %s."
+ msgstr "Citeşte informaţii DHCP statice despre maşină din %s."
+
+-#: option.c:385
++#: option.c:402
+ msgid "Enable the DBus interface for setting upstream servers, etc."
+ msgstr "Activeaza interfaţa DBus pentru configurarea serverelor superioare."
+
+-#: option.c:386
++#: option.c:403
+ msgid "Do not provide DHCP on this interface, only provide DNS."
+ msgstr "Nu activează DHCP ci doar DNS pe această interfaţă."
+
+-#: option.c:387
++#: option.c:404
+ msgid "Enable dynamic address allocation for bootp."
+ msgstr "Activează alocarea dinamică a adreselor pentru BOOTP."
+
+-#: option.c:388
++#: option.c:405
+ #, fuzzy
+ msgid "Map MAC address (with wildcards) to option set."
+ msgstr "Trimite opţiuni DHCP în funcţie de marca plăcii de reţea."
+
+-#: option.c:389
++#: option.c:406
+ msgid "Treat DHCP requests on aliases as arriving from interface."
+ msgstr ""
+
+-#: option.c:390
++#: option.c:407
+ msgid "Disable ICMP echo address checking in the DHCP server."
+ msgstr ""
+
+-#: option.c:391
++#: option.c:408
+ msgid "Shell script to run on DHCP lease creation and destruction."
+ msgstr ""
+
+-#: option.c:392
++#: option.c:409
+ msgid "Lua script to run on DHCP lease creation and destruction."
+ msgstr ""
+
+-#: option.c:393
++#: option.c:410
+ msgid "Run lease-change scripts as this user."
+ msgstr ""
+
+-#: option.c:394
++#: option.c:411
+ msgid "Read configuration from all the files in this directory."
+ msgstr ""
+
+-#: option.c:395
++#: option.c:412
+ #, fuzzy
+ msgid "Log to this syslog facility or file. (defaults to DAEMON)"
+ msgstr "Rulează sub acest utilizator după pornire. (implicit e %s)."
+
+-#: option.c:396
++#: option.c:413
+ msgid "Do not use leasefile."
+ msgstr ""
+
+-#: option.c:397
++#: option.c:414
+ #, fuzzy, c-format
+ msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
+ msgstr "Specifică numărul maxim de împrumuturi DHCP (implicit %s)."
+
+-#: option.c:398
++#: option.c:415
+ #, c-format
+ msgid "Clear DNS cache when reloading %s."
+ msgstr ""
+
+-#: option.c:399
++#: option.c:416
+ msgid "Ignore hostnames provided by DHCP clients."
+ msgstr ""
+
+-#: option.c:400
++#: option.c:417
+ msgid "Do NOT reuse filename and server fields for extra DHCP options."
+ msgstr ""
+
+-#: option.c:401
++#: option.c:418
+ msgid "Enable integrated read-only TFTP server."
+ msgstr ""
+
+-#: option.c:402
++#: option.c:419
+ msgid "Export files by TFTP only from the specified subtree."
+ msgstr ""
+
+-#: option.c:403
++#: option.c:420
+ msgid "Add client IP address to tftp-root."
+ msgstr ""
+
+-#: option.c:404
++#: option.c:421
+ msgid "Allow access only to files owned by the user running dnsmasq."
+ msgstr ""
+
+-#: option.c:405
++#: option.c:422
+ #, fuzzy, c-format
+ msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
+ msgstr "Specifică numărul maxim de împrumuturi DHCP (implicit %s)."
+
+-#: option.c:406
++#: option.c:423
+ msgid "Disable the TFTP blocksize extension."
+ msgstr ""
+
+-#: option.c:407
++#: option.c:424
+ msgid "Convert TFTP filenames to lowercase"
+ msgstr ""
+
+-#: option.c:408
++#: option.c:425
+ msgid "Ephemeral port range for use by TFTP transfers."
+ msgstr ""
+
+-#: option.c:409
++#: option.c:426
+ msgid "Extra logging for DHCP."
+ msgstr ""
+
+-#: option.c:410
++#: option.c:427
+ msgid "Enable async. logging; optionally set queue length."
+ msgstr ""
+
+-#: option.c:411
++#: option.c:428
+ msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
+ msgstr ""
+
+-#: option.c:412
++#: option.c:429
+ msgid "Allow rebinding of 127.0.0.0/8, for RBL servers."
+ msgstr ""
+
+-#: option.c:413
++#: option.c:430
+ msgid "Inhibit DNS-rebind protection on this domain."
+ msgstr ""
+
+-#: option.c:414
++#: option.c:431
+ msgid "Always perform DNS queries to all servers."
+ msgstr ""
+
+-#: option.c:415
++#: option.c:432
+ msgid "Set tag if client includes matching option in request."
+ msgstr ""
+
+-#: option.c:416
++#: option.c:433
+ msgid "Use alternative ports for DHCP."
+ msgstr ""
+
+-#: option.c:417
++#: option.c:434
+ #, fuzzy
+ msgid "Specify NAPTR DNS record."
+ msgstr "Specifică o înregistrare TXT."
+
+-#: option.c:418
++#: option.c:435
+ msgid "Specify lowest port available for DNS query transmission."
+ msgstr ""
+
+-#: option.c:419
++#: option.c:436
+ msgid "Use only fully qualified domain names for DHCP clients."
+ msgstr ""
+
+-#: option.c:420
++#: option.c:437
+ msgid "Generate hostnames based on MAC address for nameless clients."
+ msgstr ""
+
+-#: option.c:421
++#: option.c:438
+ msgid "Use these DHCP relays as full proxies."
+ msgstr ""
+
+-#: option.c:422
++#: option.c:439
+ msgid "Relay DHCP requests to a remote server"
+ msgstr ""
+
+-#: option.c:423
++#: option.c:440
+ msgid "Specify alias name for LOCAL DNS name."
+ msgstr ""
+
+-#: option.c:424
++#: option.c:441
+ #, fuzzy
+ msgid "Prompt to send to PXE clients."
+ msgstr "Configurează opţiuni în plusce trebuie trimise clienţilor DHCP."
+
+-#: option.c:425
++#: option.c:442
+ msgid "Boot service for PXE menu."
+ msgstr ""
+
+-#: option.c:426
++#: option.c:443
+ msgid "Check configuration syntax."
+ msgstr ""
+
+-#: option.c:427
++#: option.c:444
+ msgid "Add requestor's MAC address to forwarded DNS queries."
+ msgstr ""
+
+-#: option.c:428
++#: option.c:445
+ msgid "Add requestor's IP subnet to forwarded DNS queries."
+ msgstr ""
+
+-#: option.c:429
++#: option.c:446
+ #, fuzzy
+ msgid "Proxy DNSSEC validation results from upstream nameservers."
+ msgstr "Traduce adresele IPv4 de la serverele DNS superioare."
+
+-#: option.c:430
++#: option.c:447
+ msgid "Attempt to allocate sequential IP addresses to DHCP clients."
+ msgstr ""
+
+-#: option.c:431
++#: option.c:448
+ msgid "Copy connection-track mark from queries to upstream connections."
+ msgstr ""
+
+-#: option.c:432
++#: option.c:449
+ msgid "Allow DHCP clients to do their own DDNS updates."
+ msgstr ""
+
+-#: option.c:433
++#: option.c:450
+ msgid "Send router-advertisements for interfaces doing DHCPv6"
+ msgstr ""
+
+-#: option.c:434
++#: option.c:451
+ msgid "Specify DUID_EN-type DHCPv6 server DUID"
+ msgstr ""
+
+-#: option.c:435
++#: option.c:452
+ #, fuzzy
+ msgid "Specify host (A/AAAA and PTR) records"
+ msgstr "Specifică o înregistrare MX."
+
+-#: option.c:436
++#: option.c:453
+ #, fuzzy
+ msgid "Specify arbitrary DNS resource record"
+ msgstr "Specifică o înregistrare TXT."
+
+-#: option.c:437
++#: option.c:454
+ #, fuzzy
+ msgid "Bind to interfaces in use - check for new interfaces"
+ msgstr "interfaţă necunoscută %s"
+
+-#: option.c:438
++#: option.c:455
+ msgid "Export local names to global DNS"
+ msgstr ""
+
+-#: option.c:439
++#: option.c:456
+ msgid "Domain to export to global DNS"
+ msgstr ""
+
+-#: option.c:440
++#: option.c:457
+ msgid "Set TTL for authoritative replies"
+ msgstr ""
+
+-#: option.c:441
++#: option.c:458
+ msgid "Set authoritive zone information"
+ msgstr ""
+
+-#: option.c:442
++#: option.c:459
+ msgid "Secondary authoritative nameservers for forward domains"
+ msgstr ""
+
+-#: option.c:443
++#: option.c:460
+ msgid "Peers which are allowed to do zone transfer"
+ msgstr ""
+
+-#: option.c:444
++#: option.c:461
+ msgid "Specify ipsets to which matching domains should be added"
+ msgstr ""
+
+-#: option.c:445
++#: option.c:462
+ msgid "Specify a domain and address range for synthesised names"
+ msgstr ""
+
+-#: option.c:446
++#: option.c:463
+ msgid "Activate DNSSEC validation"
+ msgstr ""
+
+-#: option.c:447
++#: option.c:464
+ msgid "Specify trust anchor key digest."
+ msgstr ""
+
+-#: option.c:448
++#: option.c:465
+ msgid "Disable upstream checking for DNSSEC debugging."
+ msgstr ""
+
+-#: option.c:449
++#: option.c:466
+ msgid "Ensure answers without DNSSEC are in unsigned zones."
+ msgstr ""
+
+-#: option.c:450
++#: option.c:467
+ msgid "Don't check DNSSEC signature timestamps until first cache-reload"
+ msgstr ""
+
+-#: option.c:452
++#: option.c:468
++msgid "Timestamp file to verify system clock for DNSSEC"
++msgstr ""
++
++#: option.c:470
+ msgid "Specify DHCPv6 prefix class"
+ msgstr ""
+
+-#: option.c:454
++#: option.c:472
+ msgid "Set priority, resend-interval and router-lifetime"
+ msgstr ""
+
+-#: option.c:455
++#: option.c:473
+ msgid "Do not log routine DHCP."
+ msgstr ""
+
+-#: option.c:456
++#: option.c:474
+ msgid "Do not log routine DHCPv6."
+ msgstr ""
+
+-#: option.c:457
++#: option.c:475
+ msgid "Do not log RA."
+ msgstr ""
+
+-#: option.c:458
++#: option.c:476
+ msgid "Accept queries only from directly-connected networks"
+ msgstr ""
+
+-#: option.c:459
++#: option.c:477
+ msgid "Detect and remove DNS forwarding loops"
+ msgstr ""
+
+-#: option.c:661
++#: option.c:478
++msgid "Ignore DNS responses containing ipaddr."
++msgstr ""
++
++#: option.c:680
+ #, c-format
+ msgid ""
+ "Usage: dnsmasq [options]\n"
+@@ -720,332 +753,332 @@ msgstr ""
+ "Utilizare: dnsmasq [opţiuni]\n"
+ "\n"
+
+-#: option.c:663
++#: option.c:682
+ #, c-format
+ msgid "Use short options only on the command line.\n"
+ msgstr "Folosiţi opţiunile prescurtate doar în linie de comandă.\n"
+
+-#: option.c:665
++#: option.c:684
+ #, fuzzy, c-format
+ msgid "Valid options are:\n"
+ msgstr "Opţiunile valide sunt:\n"
+
+-#: option.c:722 option.c:726
++#: option.c:741 option.c:745
+ msgid "bad port"
+ msgstr "port invalid"
+
+-#: option.c:753 option.c:785
++#: option.c:772 option.c:804
+ msgid "interface binding not supported"
+ msgstr ""
+
+-#: option.c:762 option.c:3494
++#: option.c:781 option.c:3570
+ #, fuzzy
+ msgid "bad interface name"
+ msgstr "nume MX invalid"
+
+-#: option.c:792
++#: option.c:811
+ #, fuzzy
+ msgid "bad address"
+ msgstr "citesc %s - %d adrese"
+
+-#: option.c:974
++#: option.c:993
+ msgid "unsupported encapsulation for IPv6 option"
+ msgstr ""
+
+-#: option.c:988
++#: option.c:1007
+ msgid "bad dhcp-option"
+ msgstr "dhcp-option invalid"
+
+-#: option.c:1056
++#: option.c:1075
+ #, fuzzy
+ msgid "bad IP address"
+ msgstr "citesc %s - %d adrese"
+
+-#: option.c:1059 option.c:1197 option.c:2812
++#: option.c:1078 option.c:1216 option.c:2888
+ #, fuzzy
+ msgid "bad IPv6 address"
+ msgstr "citesc %s - %d adrese"
+
+-#: option.c:1224 option.c:1318
++#: option.c:1243 option.c:1337
+ msgid "bad domain in dhcp-option"
+ msgstr "domeniu DNS invalid în declaraţia dhcp-option"
+
+-#: option.c:1356
++#: option.c:1375
+ msgid "dhcp-option too long"
+ msgstr "declararea dhcp-option este prea lungă"
+
+-#: option.c:1363
++#: option.c:1382
+ msgid "illegal dhcp-match"
+ msgstr ""
+
+-#: option.c:1425
++#: option.c:1444
+ msgid "illegal repeated flag"
+ msgstr ""
+
+-#: option.c:1433
++#: option.c:1452
+ msgid "illegal repeated keyword"
+ msgstr ""
+
+-#: option.c:1495 option.c:4092
++#: option.c:1517 option.c:4186
+ #, fuzzy, c-format
+ msgid "cannot access directory %s: %s"
+ msgstr "nu pot citi %s: %s"
+
+-#: option.c:1541 tftp.c:493
++#: option.c:1563 tftp.c:493
+ #, fuzzy, c-format
+ msgid "cannot access %s: %s"
+ msgstr "nu pot citi %s: %s"
+
+-#: option.c:1588
++#: option.c:1615
+ msgid "setting log facility is not possible under Android"
+ msgstr ""
+
+-#: option.c:1597
++#: option.c:1624
+ msgid "bad log facility"
+ msgstr ""
+
+-#: option.c:1650
++#: option.c:1677
+ msgid "bad MX preference"
+ msgstr "preferinţă MX invalidă"
+
+-#: option.c:1655
++#: option.c:1682
+ msgid "bad MX name"
+ msgstr "nume MX invalid"
+
+-#: option.c:1669
++#: option.c:1696
+ msgid "bad MX target"
+ msgstr "ţintă MX invalidă"
+
+-#: option.c:1681
++#: option.c:1708
+ msgid "cannot run scripts under uClinux"
+ msgstr ""
+
+-#: option.c:1683
++#: option.c:1710
+ msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts"
+ msgstr ""
+
+-#: option.c:1687
++#: option.c:1714
+ msgid "recompile with HAVE_LUASCRIPT defined to enable Lua scripts"
+ msgstr ""
+
+-#: option.c:1928 option.c:1966 option.c:2015
++#: option.c:1970 option.c:2015 option.c:2071
+ #, fuzzy
+ msgid "bad prefix"
+ msgstr "port invalid"
+
+-#: option.c:2289
++#: option.c:2352
+ msgid "recompile with HAVE_IPSET defined to enable ipset directives"
+ msgstr ""
+
+-#: option.c:2469
++#: option.c:2545
+ #, fuzzy
+ msgid "bad port range"
+ msgstr "port invalid"
+
+-#: option.c:2485
++#: option.c:2561
+ msgid "bad bridge-interface"
+ msgstr ""
+
+-#: option.c:2545
++#: option.c:2621
+ msgid "only one tag allowed"
+ msgstr ""
+
+-#: option.c:2565 option.c:2577 option.c:2683 option.c:2724
++#: option.c:2641 option.c:2653 option.c:2759 option.c:2800
+ msgid "bad dhcp-range"
+ msgstr "dhcp-range invalid"
+
+-#: option.c:2592
++#: option.c:2668
+ msgid "inconsistent DHCP range"
+ msgstr "domeniu DHCP inconsistent"
+
+-#: option.c:2651
++#: option.c:2727
+ msgid "prefix length must be exactly 64 for RA subnets"
+ msgstr ""
+
+-#: option.c:2653
++#: option.c:2729
+ msgid "prefix length must be exactly 64 for subnet constructors"
+ msgstr ""
+
+-#: option.c:2657
++#: option.c:2733
+ msgid "prefix length must be at least 64"
+ msgstr ""
+
+-#: option.c:2660
++#: option.c:2736
+ #, fuzzy
+ msgid "inconsistent DHCPv6 range"
+ msgstr "domeniu DHCP inconsistent"
+
+-#: option.c:2671
++#: option.c:2747
+ msgid "prefix must be zero with \"constructor:\" argument"
+ msgstr ""
+
+-#: option.c:2782 option.c:2830
++#: option.c:2858 option.c:2906
+ #, fuzzy
+ msgid "bad hex constant"
+ msgstr "dhcp-host invalid"
+
+-#: option.c:2804
++#: option.c:2880
+ msgid "cannot match tags in --dhcp-host"
+ msgstr ""
+
+-#: option.c:2852
++#: option.c:2928
+ #, fuzzy, c-format
+ msgid "duplicate dhcp-host IP address %s"
+ msgstr "adresă IP duplicat %s în declaraţia dhcp-config."
+
+-#: option.c:2910
++#: option.c:2986
+ #, fuzzy
+ msgid "bad DHCP host name"
+ msgstr "nume MX invalid"
+
+-#: option.c:2992
++#: option.c:3068
+ #, fuzzy
+ msgid "bad tag-if"
+ msgstr "ţintă MX invalidă"
+
+-#: option.c:3316 option.c:3710
++#: option.c:3392 option.c:3786
+ msgid "invalid port number"
+ msgstr "număr de port invalid"
+
+-#: option.c:3378
++#: option.c:3454
+ #, fuzzy
+ msgid "bad dhcp-proxy address"
+ msgstr "citesc %s - %d adrese"
+
+-#: option.c:3404
++#: option.c:3480
+ #, fuzzy
+ msgid "Bad dhcp-relay"
+ msgstr "dhcp-range invalid"
+
+-#: option.c:3430
++#: option.c:3506
+ msgid "bad RA-params"
+ msgstr ""
+
+-#: option.c:3439
++#: option.c:3515
+ msgid "bad DUID"
+ msgstr ""
+
+-#: option.c:3481
++#: option.c:3557
+ #, fuzzy
+ msgid "invalid alias range"
+ msgstr "pondere invalidă"
+
+-#: option.c:3535
++#: option.c:3611
+ msgid "bad CNAME"
+ msgstr ""
+
+-#: option.c:3540
++#: option.c:3616
+ msgid "duplicate CNAME"
+ msgstr ""
+
+-#: option.c:3560
++#: option.c:3636
+ #, fuzzy
+ msgid "bad PTR record"
+ msgstr "înregistrare SRV invalidă"
+
+-#: option.c:3591
++#: option.c:3667
+ #, fuzzy
+ msgid "bad NAPTR record"
+ msgstr "înregistrare SRV invalidă"
+
+-#: option.c:3625
++#: option.c:3701
+ #, fuzzy
+ msgid "bad RR record"
+ msgstr "înregistrare SRV invalidă"
+
+-#: option.c:3655
++#: option.c:3731
+ msgid "bad TXT record"
+ msgstr "înregistrare TXT invalidă"
+
+-#: option.c:3696
++#: option.c:3772
+ msgid "bad SRV record"
+ msgstr "înregistrare SRV invalidă"
+
+-#: option.c:3703
++#: option.c:3779
+ msgid "bad SRV target"
+ msgstr "ţintă SRV invalidă"
+
+-#: option.c:3717
++#: option.c:3793
+ msgid "invalid priority"
+ msgstr "prioritate invalidă"
+
+-#: option.c:3724
++#: option.c:3800
+ msgid "invalid weight"
+ msgstr "pondere invalidă"
+
+-#: option.c:3748
++#: option.c:3824
+ #, fuzzy
+ msgid "Bad host-record"
+ msgstr "înregistrare SRV invalidă"
+
+-#: option.c:3765
++#: option.c:3841
+ #, fuzzy
+ msgid "Bad name in host-record"
+ msgstr "nume invalid în %s"
+
+-#: option.c:3826
++#: option.c:3906
+ #, fuzzy
+ msgid "bad trust anchor"
+ msgstr "port invalid"
+
+-#: option.c:3840
++#: option.c:3920
+ msgid "bad HEX in trust anchor"
+ msgstr ""
+
+-#: option.c:3850
++#: option.c:3930
+ msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DNSSEC/DBus support)"
+ msgstr ""
+
+-#: option.c:3909
++#: option.c:3989
+ msgid "missing \""
+ msgstr "lipseşte \""
+
+-#: option.c:3966
++#: option.c:4046
+ msgid "bad option"
+ msgstr "opţiune invalidă"
+
+-#: option.c:3968
++#: option.c:4048
+ msgid "extraneous parameter"
+ msgstr "parametru nerecunoscut"
+
+-#: option.c:3970
++#: option.c:4050
+ msgid "missing parameter"
+ msgstr "parametru lipsa"
+
+-#: option.c:3972
++#: option.c:4052
+ #, fuzzy
+ msgid "illegal option"
+ msgstr "opţiune invalidă"
+
+-#: option.c:3979
++#: option.c:4059
+ msgid "error"
+ msgstr "eroare"
+
+-#: option.c:3981
++#: option.c:4061
+ #, fuzzy, c-format
+ msgid " at line %d of %s"
+ msgstr "%s la linia %d din %%s"
+
+-#: option.c:4045 option.c:4168 tftp.c:667
+-#, c-format
+-msgid "cannot read %s: %s"
+-msgstr "nu pot citi %s: %s"
+-
+-#: option.c:4229 option.c:4265
++#: option.c:4076 option.c:4323 option.c:4359
+ #, fuzzy, c-format
+ msgid "read %s"
+ msgstr "citesc %s"
+
+-#: option.c:4331
++#: option.c:4139 option.c:4262 tftp.c:667
++#, c-format
++msgid "cannot read %s: %s"
++msgstr "nu pot citi %s: %s"
++
++#: option.c:4425
+ msgid "junk found in command line"
+ msgstr ""
+
+-#: option.c:4366
++#: option.c:4460
+ #, c-format
+ msgid "Dnsmasq version %s %s\n"
+ msgstr "dnsmasq versiunea %s %s\n"
+
+-#: option.c:4367
++#: option.c:4461
+ #, fuzzy, c-format
+ msgid ""
+ "Compile time options: %s\n"
+@@ -1054,89 +1087,89 @@ msgstr ""
+ "Opţiuni cu care a fost compilat %s\n"
+ "\n"
+
+-#: option.c:4368
++#: option.c:4462
+ #, c-format
+ msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
+ msgstr "Acest program vine FĂRĂ NICI O GARANŢIE.\n"
+
+-#: option.c:4369
++#: option.c:4463
+ #, c-format
+ msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
+ msgstr "Dnsmasq este un program gratuit, sunteţi invitaţi să-l redistribuiţi\n"
+
+-#: option.c:4370
++#: option.c:4464
+ #, fuzzy, c-format
+ msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
+ msgstr "în termenii Licenţei publice generale GNU, versiunea 2.\n"
+
+-#: option.c:4381
++#: option.c:4475
+ msgid "try --help"
+ msgstr ""
+
+-#: option.c:4383
++#: option.c:4477
+ msgid "try -w"
+ msgstr ""
+
+-#: option.c:4385
++#: option.c:4479
+ #, fuzzy, c-format
+ msgid "bad command line options: %s"
+ msgstr "opţiuni în linie de comandă invalide: %s."
+
+-#: option.c:4434
++#: option.c:4535
+ #, c-format
+ msgid "cannot get host-name: %s"
+ msgstr "nu pot citi numele maşinii: %s"
+
+-#: option.c:4462
++#: option.c:4563
+ msgid "only one resolv.conf file allowed in no-poll mode."
+ msgstr "se permite un singur fişier resolv.conf în modul no-poll"
+
+-#: option.c:4472
++#: option.c:4573
+ msgid "must have exactly one resolv.conf to read domain from."
+ msgstr "am nevoie de un singur resolv.conf din care să citesc numele domeniului."
+
+-#: option.c:4475 network.c:1506 dhcp.c:769
++#: option.c:4576 network.c:1506 dhcp.c:774
+ #, fuzzy, c-format
+ msgid "failed to read %s: %s"
+ msgstr "nu pot citi %s: %s"
+
+-#: option.c:4492
++#: option.c:4593
+ #, c-format
+ msgid "no search directive found in %s"
+ msgstr "nu s-a găsit nici un criteriu de căutare în %s"
+
+-#: option.c:4513
++#: option.c:4614
+ msgid "there must be a default domain when --dhcp-fqdn is set"
+ msgstr ""
+
+-#: option.c:4522
++#: option.c:4623
+ msgid "syntax check OK"
+ msgstr ""
+
+-#: forward.c:114
++#: forward.c:111
+ #, fuzzy, c-format
+ msgid "failed to send packet: %s"
+ msgstr "ascultarea pe socket a eşuat: %s"
+
+-#: forward.c:574
++#: forward.c:572
+ msgid "discarding DNS reply: subnet option mismatch"
+ msgstr ""
+
+-#: forward.c:597
++#: forward.c:595
+ #, c-format
+ msgid "nameserver %s refused to do a recursive query"
+ msgstr "serverul DNS %s refuză interogările recursive"
+
+-#: forward.c:629
++#: forward.c:627
+ #, c-format
+ msgid "possible DNS-rebind attack detected: %s"
+ msgstr ""
+
+-#: forward.c:1132 forward.c:1663
++#: forward.c:1156 forward.c:1722
+ msgid "Ignoring query from non-local network"
+ msgstr ""
+
+-#: forward.c:2101
++#: forward.c:2178
+ #, fuzzy, c-format
+ msgid "Maximum number of concurrent DNS queries reached (max: %d)"
+ msgstr "Specifică numărul maxim de împrumuturi DHCP (implicit %s)."
+@@ -1226,273 +1259,286 @@ msgstr "folosim serverul DNS %s#%d"
+ msgid "using nameserver %s#%d"
+ msgstr "folosim serverul DNS %s#%d"
+
+-#: dnsmasq.c:154
+-msgid "No trust anchors provided for DNSSEC"
++#: dnsmasq.c:149
++msgid "dhcp-hostsdir, dhcp-optsdir and hostsdir are not supported on this platform"
+ msgstr ""
+
+-#: dnsmasq.c:157
+-msgid "Cannot reduce cache size from default when DNSSEC enabled"
++#: dnsmasq.c:156
++msgid "no trust anchors provided for DNSSEC"
+ msgstr ""
+
+ #: dnsmasq.c:159
++msgid "cannot reduce cache size from default when DNSSEC enabled"
++msgstr ""
++
++#: dnsmasq.c:161
+ #, fuzzy
+ msgid "DNSSEC not available: set HAVE_DNSSEC in src/config.h"
+ msgstr "DBus nu este disponibil: puneţi HAVE_DBUS in src/config.h"
+
+-#: dnsmasq.c:165
++#: dnsmasq.c:167
+ #, fuzzy
+ msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
+ msgstr "DBus nu este disponibil: puneţi HAVE_DBUS in src/config.h"
+
+-#: dnsmasq.c:170
+-msgid "Cannot use --conntrack AND --query-port"
++#: dnsmasq.c:172
++msgid "cannot use --conntrack AND --query-port"
+ msgstr ""
+
+-#: dnsmasq.c:173
++#: dnsmasq.c:175
+ #, fuzzy
+-msgid "Conntrack support not available: set HAVE_CONNTRACK in src/config.h"
++msgid "conntrack support not available: set HAVE_CONNTRACK in src/config.h"
+ msgstr "DBus nu este disponibil: puneţi HAVE_DBUS in src/config.h"
+
+-#: dnsmasq.c:178
++#: dnsmasq.c:180
+ msgid "asychronous logging is not available under Solaris"
+ msgstr ""
+
+-#: dnsmasq.c:183
++#: dnsmasq.c:185
+ msgid "asychronous logging is not available under Android"
+ msgstr ""
+
+-#: dnsmasq.c:188
++#: dnsmasq.c:190
+ #, fuzzy
+ msgid "authoritative DNS not available: set HAVE_AUTH in src/config.h"
+ msgstr "DBus nu este disponibil: puneţi HAVE_DBUS in src/config.h"
+
+-#: dnsmasq.c:193
++#: dnsmasq.c:195
+ #, fuzzy
+-msgid "Loop detection not available: set HAVE_LOOP in src/config.h"
++msgid "loop detection not available: set HAVE_LOOP in src/config.h"
+ msgstr "DBus nu este disponibil: puneţi HAVE_DBUS in src/config.h"
+
+-#: dnsmasq.c:201
++#: dnsmasq.c:203
+ msgid "zone serial must be configured in --auth-soa"
+ msgstr ""
+
+-#: dnsmasq.c:219
++#: dnsmasq.c:221
+ msgid "dhcp-range constructor not available on this platform"
+ msgstr ""
+
+-#: dnsmasq.c:262
++#: dnsmasq.c:264
+ msgid "cannot set --bind-interfaces and --bind-dynamic"
+ msgstr ""
+
+-#: dnsmasq.c:265
++#: dnsmasq.c:267
+ #, c-format
+ msgid "failed to find list of interfaces: %s"
+ msgstr "enumerarea interfeţelor a eşuat: %s"
+
+-#: dnsmasq.c:274
++#: dnsmasq.c:276
+ #, c-format
+ msgid "unknown interface %s"
+ msgstr "interfaţă necunoscută %s"
+
+-#: dnsmasq.c:330 dnsmasq.c:954
++#: dnsmasq.c:340 dnsmasq.c:1004
+ #, c-format
+ msgid "DBus error: %s"
+ msgstr "eroare DBus: %s"
+
+-#: dnsmasq.c:333
++#: dnsmasq.c:343
+ msgid "DBus not available: set HAVE_DBUS in src/config.h"
+ msgstr "DBus nu este disponibil: puneţi HAVE_DBUS in src/config.h"
+
+-#: dnsmasq.c:361
++#: dnsmasq.c:371
+ #, c-format
+ msgid "unknown user or group: %s"
+ msgstr ""
+
+-#: dnsmasq.c:416
++#: dnsmasq.c:426
+ #, c-format
+ msgid "cannot chdir to filesystem root: %s"
+ msgstr ""
+
+-#: dnsmasq.c:653
++#: dnsmasq.c:667
+ #, fuzzy, c-format
+ msgid "started, version %s DNS disabled"
+ msgstr "am pornit, versiunea %s memorie temporară dezactivată"
+
+-#: dnsmasq.c:655
++#: dnsmasq.c:669
+ #, c-format
+ msgid "started, version %s cachesize %d"
+ msgstr "am ponit, versiunea %s memorie temporară %d"
+
+-#: dnsmasq.c:657
++#: dnsmasq.c:671
+ #, c-format
+ msgid "started, version %s cache disabled"
+ msgstr "am pornit, versiunea %s memorie temporară dezactivată"
+
+-#: dnsmasq.c:659
++#: dnsmasq.c:673
+ #, c-format
+ msgid "compile time options: %s"
+ msgstr "compilat cu opţiunile: %s"
+
+-#: dnsmasq.c:665
++#: dnsmasq.c:679
+ msgid "DBus support enabled: connected to system bus"
+ msgstr "suportul DBus activ: sunt conectat la magistrala sistem"
+
+-#: dnsmasq.c:667
++#: dnsmasq.c:681
+ msgid "DBus support enabled: bus connection pending"
+ msgstr "suportul DBus activ: aştept conexiunea la magistrală"
+
+-#: dnsmasq.c:672
++#: dnsmasq.c:686
+ msgid "DNS service limited to local subnets"
+ msgstr ""
+
+-#: dnsmasq.c:677
++#: dnsmasq.c:702
+ msgid "DNSSEC validation enabled"
+ msgstr ""
+
+-#: dnsmasq.c:679
++#: dnsmasq.c:705
+ msgid "DNSSEC signature timestamps not checked until first cache reload"
+ msgstr ""
+
++#: dnsmasq.c:708
++msgid "DNSSEC signature timestamps not checked until system time valid"
++msgstr ""
++
+ # for compatibility purposes the letters â, ă, ş, ţ and î can be written as their look-alike correspondent.
+-#: dnsmasq.c:684
++#: dnsmasq.c:713
+ #, fuzzy, c-format
+ msgid "warning: failed to change owner of %s: %s"
+ msgstr "încărcarea numelor din %s: %s a eşuat"
+
+-#: dnsmasq.c:688
++#: dnsmasq.c:717
+ msgid "setting --bind-interfaces option because of OS limitations"
+ msgstr "specific opţiunea --bind-interfaces din cauza limitărilor SO"
+
+-#: dnsmasq.c:698
++#: dnsmasq.c:727
+ #, c-format
+ msgid "warning: interface %s does not currently exist"
+ msgstr "atenţie: interfaţa %s nu există momentan"
+
+-#: dnsmasq.c:703
++#: dnsmasq.c:732
+ msgid "warning: ignoring resolv-file flag because no-resolv is set"
+ msgstr ""
+
+-#: dnsmasq.c:706
++#: dnsmasq.c:735
+ #, fuzzy
+ msgid "warning: no upstream servers configured"
+ msgstr "configurăm serverele superioare prin Dbus"
+
+-#: dnsmasq.c:710
++#: dnsmasq.c:739
+ #, c-format
+ msgid "asynchronous logging enabled, queue limit is %d messages"
+ msgstr ""
+
+-#: dnsmasq.c:731
++#: dnsmasq.c:760
+ msgid "IPv6 router advertisement enabled"
+ msgstr ""
+
+-#: dnsmasq.c:736
++#: dnsmasq.c:765
+ #, c-format
+ msgid "DHCP, sockets bound exclusively to interface %s"
+ msgstr ""
+
+-#: dnsmasq.c:753
++#: dnsmasq.c:782
+ msgid "root is "
+ msgstr ""
+
+-#: dnsmasq.c:753
++#: dnsmasq.c:782
+ #, fuzzy
+ msgid "enabled"
+ msgstr "dezactivat"
+
+-#: dnsmasq.c:755
++#: dnsmasq.c:784
+ msgid "secure mode"
+ msgstr ""
+
+-#: dnsmasq.c:781
++#: dnsmasq.c:810
+ #, c-format
+ msgid "restricting maximum simultaneous TFTP transfers to %d"
+ msgstr ""
+
+-#: dnsmasq.c:956
++#: dnsmasq.c:1006
+ msgid "connected to system DBus"
+ msgstr "magistrala sistem Dbus conectată"
+
+-#: dnsmasq.c:1106
++#: dnsmasq.c:1156
+ #, c-format
+ msgid "cannot fork into background: %s"
+ msgstr ""
+
+-#: dnsmasq.c:1109
++#: dnsmasq.c:1159
+ #, fuzzy, c-format
+ msgid "failed to create helper: %s"
+ msgstr "nu pot citi %s: %s"
+
+-#: dnsmasq.c:1112
++#: dnsmasq.c:1162
+ #, c-format
+ msgid "setting capabilities failed: %s"
+ msgstr ""
+
+ # for compatibility purposes the letters â, ă, ş, ţ and î can be written as their look-alike correspondent.
+-#: dnsmasq.c:1115
++#: dnsmasq.c:1165
+ #, fuzzy, c-format
+ msgid "failed to change user-id to %s: %s"
+ msgstr "încărcarea numelor din %s: %s a eşuat"
+
+ # for compatibility purposes the letters â, ă, ş, ţ and î can be written as their look-alike correspondent.
+-#: dnsmasq.c:1118
++#: dnsmasq.c:1168
+ #, fuzzy, c-format
+ msgid "failed to change group-id to %s: %s"
+ msgstr "încărcarea numelor din %s: %s a eşuat"
+
+-#: dnsmasq.c:1121
++#: dnsmasq.c:1171
+ #, fuzzy, c-format
+ msgid "failed to open pidfile %s: %s"
+ msgstr "nu pot citi %s: %s"
+
+-#: dnsmasq.c:1124
++#: dnsmasq.c:1174
+ #, fuzzy, c-format
+ msgid "cannot open log %s: %s"
+ msgstr "nu pot deschide %s:%s"
+
+-#: dnsmasq.c:1127
++#: dnsmasq.c:1177
+ #, fuzzy, c-format
+ msgid "failed to load Lua script: %s"
+ msgstr "nu pot încărca %s: %s"
+
+-#: dnsmasq.c:1130
++#: dnsmasq.c:1180
+ #, c-format
+ msgid "TFTP directory %s inaccessible: %s"
+ msgstr ""
+
+-#: dnsmasq.c:1151
++#: dnsmasq.c:1183
++#, fuzzy, c-format
++msgid "cannot create timestamp file %s: %s"
++msgstr "nu pot creea sau deschide fişierul cu împrumuturi: %s"
++
++#: dnsmasq.c:1204
+ msgid "now checking DNSSEC signature timestamps"
+ msgstr ""
+
+-#: dnsmasq.c:1218
++#: dnsmasq.c:1271
+ #, c-format
+ msgid "script process killed by signal %d"
+ msgstr ""
+
+-#: dnsmasq.c:1222
++#: dnsmasq.c:1275
+ #, c-format
+ msgid "script process exited with status %d"
+ msgstr ""
+
+-#: dnsmasq.c:1226
++#: dnsmasq.c:1279
+ #, fuzzy, c-format
+ msgid "failed to execute %s: %s"
+ msgstr "accesarea serverului %s a eşuat: %s"
+
+-#: dnsmasq.c:1281
++#: dnsmasq.c:1334
+ msgid "exiting on receipt of SIGTERM"
+ msgstr "am primit SIGTERM, am terminat"
+
+-#: dnsmasq.c:1309
++#: dnsmasq.c:1362
+ #, fuzzy, c-format
+ msgid "failed to access %s: %s"
+ msgstr "accesarea serverului %s a eşuat: %s"
+
+-#: dnsmasq.c:1339
++#: dnsmasq.c:1392
+ #, c-format
+ msgid "reading %s"
+ msgstr "citesc %s"
+
+-#: dnsmasq.c:1350
++#: dnsmasq.c:1403
+ #, fuzzy, c-format
+ msgid "no servers found in %s, will retry"
+ msgstr "nu s-a găsit nici un criteriu de căutare în %s"
+@@ -1532,27 +1578,27 @@ msgstr "interfaţă necunoscută %s"
+ msgid "DHCP packet received on %s which has no address"
+ msgstr ""
+
+-#: dhcp.c:408
++#: dhcp.c:412
+ #, c-format
+ msgid "ARP-cache injection failed: %s"
+ msgstr ""
+
+-#: dhcp.c:506
++#: dhcp.c:511
+ #, c-format
+ msgid "DHCP range %s -- %s is not consistent with netmask %s"
+ msgstr "domeniu DHCP %s -- %s nu este consistent cu masca de reţea %s"
+
+-#: dhcp.c:807
++#: dhcp.c:812
+ #, c-format
+ msgid "bad line at %s line %d"
+ msgstr "linie invalidă în %s rândul %d"
+
+-#: dhcp.c:850
++#: dhcp.c:855
+ #, c-format
+ msgid "ignoring %s line %d, duplicate name or IP address"
+ msgstr ""
+
+-#: dhcp.c:994 rfc3315.c:2089
++#: dhcp.c:999 rfc3315.c:2139
+ #, c-format
+ msgid "DHCP relay %s -> %s"
+ msgstr ""
+@@ -1623,12 +1669,12 @@ msgstr "eroare DBus: %s"
+ msgid "disabled"
+ msgstr "dezactivat"
+
+-#: rfc2131.c:539 rfc2131.c:967 rfc2131.c:1385 rfc3315.c:602 rfc3315.c:823
+-#: rfc3315.c:1095
++#: rfc2131.c:539 rfc2131.c:967 rfc2131.c:1385 rfc3315.c:603 rfc3315.c:860
++#: rfc3315.c:1139
+ msgid "ignored"
+ msgstr "ignorat"
+
+-#: rfc2131.c:554 rfc2131.c:1205 rfc3315.c:873
++#: rfc2131.c:554 rfc2131.c:1205 rfc3315.c:910
+ msgid "address in use"
+ msgstr "adresa este folosită"
+
+@@ -1648,7 +1694,7 @@ msgstr "adresă lipsă"
+ msgid "no leases left"
+ msgstr "nu mai am de unde să împrumut"
+
+-#: rfc2131.c:691 rfc3315.c:475
++#: rfc2131.c:691 rfc3315.c:476
+ #, c-format
+ msgid "%u client provides name: %s"
+ msgstr ""
+@@ -1657,7 +1703,7 @@ msgstr ""
+ msgid "PXE BIS not supported"
+ msgstr ""
+
+-#: rfc2131.c:935 rfc3315.c:1189
++#: rfc2131.c:935 rfc3315.c:1233
+ #, fuzzy, c-format
+ msgid "disabling DHCP static address %s for %s"
+ msgstr "dezactivăm adresele DHCP statice %s"
+@@ -1693,7 +1739,7 @@ msgstr ""
+ msgid "wrong address"
+ msgstr "adresă greşită"
+
+-#: rfc2131.c:1143 rfc3315.c:969
++#: rfc2131.c:1143 rfc3315.c:1006
+ msgid "lease not found"
+ msgstr "împrumutul nu a fost găsit"
+
+@@ -1743,7 +1789,7 @@ msgstr "nu pot trimite opţiunea DHCP %d: nu mai este loc în pachet"
+ msgid "PXE menu too large"
+ msgstr ""
+
+-#: rfc2131.c:2173 rfc3315.c:1456
++#: rfc2131.c:2173 rfc3315.c:1506
+ #, fuzzy, c-format
+ msgid "%u requested options: %s"
+ msgstr "compilat cu opţiunile: %s"
+@@ -1758,7 +1804,7 @@ msgstr ""
+ msgid "cannot create netlink socket: %s"
+ msgstr "nu pot să activez socket-ul netlink: %s"
+
+-#: netlink.c:347
++#: netlink.c:348
+ #, fuzzy, c-format
+ msgid "netlink returns error: %s"
+ msgstr "eroare DBus: %s"
+@@ -1876,66 +1922,66 @@ msgstr "nici un domeniu de adrese disponibil pentru cererea DHCP %s %s"
+ msgid "%u available DHCPv6 subnet: %s/%d"
+ msgstr "nici un domeniu de adrese disponibil pentru cererea DHCP %s %s"
+
+-#: rfc3315.c:379
++#: rfc3315.c:380
+ #, fuzzy, c-format
+ msgid "%u vendor class: %u"
+ msgstr "eroare DBus: %s"
+
+-#: rfc3315.c:427
++#: rfc3315.c:428
+ #, fuzzy, c-format
+ msgid "%u client MAC address: %s"
+ msgstr "nu exista interfaţă pentru adresa %s"
+
+-#: rfc3315.c:659
++#: rfc3315.c:660
+ #, fuzzy, c-format
+ msgid "unknown prefix-class %d"
+ msgstr "împrumut necunoscut"
+
+-#: rfc3315.c:791 rfc3315.c:913
++#: rfc3315.c:803 rfc3315.c:902
++#, fuzzy
++msgid "address unavailable"
++msgstr "adresă indisponibilă"
++
++#: rfc3315.c:815 rfc3315.c:950 rfc3315.c:1283
+ msgid "success"
+ msgstr ""
+
+-#: rfc3315.c:806 rfc3315.c:808 rfc3315.c:921 rfc3315.c:923
++#: rfc3315.c:843 rfc3315.c:845 rfc3315.c:958 rfc3315.c:960
+ #, fuzzy
+ msgid "no addresses available"
+ msgstr "nici o adresă disponibilă"
+
+-#: rfc3315.c:865
+-#, fuzzy
+-msgid "address unavailable"
+-msgstr "adresă indisponibilă"
+-
+-#: rfc3315.c:900
++#: rfc3315.c:937
+ msgid "not on link"
+ msgstr ""
+
+-#: rfc3315.c:973 rfc3315.c:1151 rfc3315.c:1228
++#: rfc3315.c:1010 rfc3315.c:1195 rfc3315.c:1272
+ msgid "no binding found"
+ msgstr ""
+
+-#: rfc3315.c:1011
++#: rfc3315.c:1048
+ msgid "deprecated"
+ msgstr ""
+
+-#: rfc3315.c:1016
++#: rfc3315.c:1053
+ #, fuzzy
+ msgid "address invalid"
+ msgstr "adresa este folosită"
+
+-#: rfc3315.c:1061
++#: rfc3315.c:1100
+ msgid "confirm failed"
+ msgstr ""
+
+-#: rfc3315.c:1072
++#: rfc3315.c:1116
+ #, fuzzy
+ msgid "all addresses still on link"
+ msgstr "adresă greşită în %s, linia %d"
+
+-#: rfc3315.c:1160
++#: rfc3315.c:1204
+ msgid "release received"
+ msgstr ""
+
+-#: rfc3315.c:2080
++#: rfc3315.c:2130
+ msgid "Cannot multicast to DHCPv6 server without correct interface"
+ msgstr ""
+
+@@ -2028,7 +2074,7 @@ msgstr ""
+ msgid "cannot create ICMPv6 socket: %s"
+ msgstr "nu pot creea socket DHCP: %s"
+
+-#: auth.c:429
++#: auth.c:436
+ #, c-format
+ msgid "ignoring zone transfer request from %s"
+ msgstr ""
+@@ -2043,54 +2089,89 @@ msgstr "activarea socket-ului server-ului DHCP a eşuat: %s"
+ msgid "failed to create IPset control socket: %s"
+ msgstr "creearea socket-ului de ascultare a eşuat: %s"
+
++#: dnssec.c:425 dnssec.c:469
++#, fuzzy, c-format
++msgid "failed to update mtime on %s: %s"
++msgstr "nu pot citi %s: %s"
++
+ #: blockdata.c:58
+ #, c-format
+ msgid "DNSSEC memory in use %u, max %u, allocated %u"
+ msgstr ""
+
+-#: tables.c:76
++#: tables.c:80
+ msgid "error: fill_addr missused"
+ msgstr ""
+
+-#: tables.c:105
++#: tables.c:109
+ #, fuzzy, c-format
+ msgid "failed to access pf devices: %s"
+ msgstr "accesarea serverului %s a eşuat: %s"
+
+-#: tables.c:119
++#: tables.c:123
+ #, fuzzy, c-format
+ msgid "warning: no opened pf devices %s"
+ msgstr "folosim adresele locale doar pentru %S %s"
+
+-#: tables.c:127
++#: tables.c:131
+ #, fuzzy, c-format
+ msgid "error: cannot use table name %s"
+ msgstr "nu pot citi numele maşinii: %s"
+
+-#: tables.c:135
++#: tables.c:139
+ #, c-format
+ msgid "error: cannot strlcpy table name %s"
+ msgstr ""
+
+-#: tables.c:141
++#: tables.c:145
+ #, c-format
+ msgid "warning: pfr_add_tables: %s(%d)"
+ msgstr ""
+
+-#: tables.c:147
++#: tables.c:151
+ msgid "info: table created"
+ msgstr ""
+
+-#: tables.c:158
++#: tables.c:162
+ #, c-format
+ msgid "warning: DIOCR%sADDRS: %s"
+ msgstr ""
+
+-#: tables.c:162
++#: tables.c:166
+ #, fuzzy, c-format
+ msgid "%d addresses %s"
+ msgstr "citesc %s - %d adrese"
+
++#: inotify.c:46
++#, fuzzy, c-format
++msgid "failed to create inotify: %s"
++msgstr "nu pot citi %s: %s"
++
++#: inotify.c:60
++#, fuzzy, c-format
++msgid "cannot cannonicalise resolv-file %s: %s"
++msgstr "nu pot creea sau deschide fişierul cu împrumuturi: %s"
++
++#: inotify.c:72
++#, c-format
++msgid "directory %s for resolv-file is missing, cannot poll"
++msgstr ""
++
++#: inotify.c:75 inotify.c:112
++#, fuzzy, c-format
++msgid "failed to create inotify for %s: %s"
++msgstr "creearea socket-ului de ascultare a eşuat: %s"
++
++#: inotify.c:97
++#, fuzzy, c-format
++msgid "bad dynamic directory %s: %s"
++msgstr "nu pot citi %s: %s"
++
++#: inotify.c:197
++#, c-format
++msgid "inotify, new or changed file %s"
++msgstr ""
++
+ #~ msgid "duplicate IP address %s in dhcp-config directive."
+ #~ msgstr "adresă IP duplicat %s în declaraţia dhcp-config."
+
+--
+2.1.0
+
--- /dev/null
+From 30d0879ed55cb67b1b735beab3d93f3bb3ef1dd2 Mon Sep 17 00:00:00 2001
+From: Stefan Tomanek <stefan.tomanek+dnsmasq@wertarbyte.de>
+Date: Tue, 31 Mar 2015 22:32:11 +0100
+Subject: [PATCH 68/98] add --tftp-no-fail to ignore missing tftp root
+
+---
+ CHANGELOG | 3 +++
+ dnsmasq.conf.example | 3 +++
+ man/dnsmasq.8 | 3 +++
+ src/dnsmasq.c | 40 ++++++++++++++++++++++++++++++----------
+ src/dnsmasq.h | 4 +++-
+ src/option.c | 3 +++
+ 6 files changed, 45 insertions(+), 11 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 4f4fa305deaa..34432ae4807f 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -72,6 +72,9 @@ version 2.73
+ on systems without an RTC, whilst allowing DNS queries before the
+ clock is valid so that NTP can run. Thanks to
+ Kevin Darbyshire-Bryant for developing this idea.
++
++ Add --tftp-no-fail option. Thanks to Stefan Tomanek for
++ the patch.
+
+
+ version 2.72
+diff --git a/dnsmasq.conf.example b/dnsmasq.conf.example
+index 1bd305dbdbad..67be99acb028 100644
+--- a/dnsmasq.conf.example
++++ b/dnsmasq.conf.example
+@@ -486,6 +486,9 @@
+ # Set the root directory for files available via FTP.
+ #tftp-root=/var/ftpd
+
++# Do not abort if the tftp-root is unavailable
++#tftp-no-fail
++
+ # Make the TFTP server more secure: with this set, only files owned by
+ # the user dnsmasq is running as will be send over the net.
+ #tftp-secure
+diff --git a/man/dnsmasq.8 b/man/dnsmasq.8
+index 1f1dd7b69c53..6b4626cc0aad 100644
+--- a/man/dnsmasq.8
++++ b/man/dnsmasq.8
+@@ -1711,6 +1711,9 @@ Absolute paths (starting with /) are allowed, but they must be within
+ the tftp-root. If the optional interface argument is given, the
+ directory is only used for TFTP requests via that interface.
+ .TP
++.B --tftp-no-fail
++Do not abort startup if specified tftp root directories are inaccessible.
++.TP
+ .B --tftp-unique-root
+ Add the IP address of the TFTP client as a path component on the end
+ of the TFTP-root (in standard dotted-quad format). Only valid if a
+diff --git a/src/dnsmasq.c b/src/dnsmasq.c
+index b784951950d4..0d4d4558a2e2 100644
+--- a/src/dnsmasq.c
++++ b/src/dnsmasq.c
+@@ -58,6 +58,9 @@ int main (int argc, char **argv)
+ struct dhcp_context *context;
+ struct dhcp_relay *relay;
+ #endif
++#ifdef HAVE_TFTP
++ int tftp_prefix_missing = 0;
++#endif
+
+ #ifdef LOCALEDIR
+ setlocale(LC_ALL, "");
+@@ -636,7 +639,7 @@ int main (int argc, char **argv)
+ #endif
+
+ #ifdef HAVE_TFTP
+- if (option_bool(OPT_TFTP))
++ if (option_bool(OPT_TFTP))
+ {
+ DIR *dir;
+ struct tftp_prefix *p;
+@@ -645,24 +648,33 @@ int main (int argc, char **argv)
+ {
+ if (!((dir = opendir(daemon->tftp_prefix))))
+ {
+- send_event(err_pipe[1], EVENT_TFTP_ERR, errno, daemon->tftp_prefix);
+- _exit(0);
++ tftp_prefix_missing = 1;
++ if (!option_bool(OPT_TFTP_NO_FAIL))
++ {
++ send_event(err_pipe[1], EVENT_TFTP_ERR, errno, daemon->tftp_prefix);
++ _exit(0);
++ }
+ }
+ closedir(dir);
+ }
+-
++
+ for (p = daemon->if_prefix; p; p = p->next)
+ {
++ p->missing = 0;
+ if (!((dir = opendir(p->prefix))))
+- {
+- send_event(err_pipe[1], EVENT_TFTP_ERR, errno, p->prefix);
+- _exit(0);
+- }
++ {
++ p->missing = 1;
++ if (!option_bool(OPT_TFTP_NO_FAIL))
++ {
++ send_event(err_pipe[1], EVENT_TFTP_ERR, errno, p->prefix);
++ _exit(0);
++ }
++ }
+ closedir(dir);
+ }
+ }
+ #endif
+-
++
+ if (daemon->port == 0)
+ my_syslog(LOG_INFO, _("started, version %s DNS disabled"), VERSION);
+ else if (daemon->cachesize != 0)
+@@ -772,7 +784,8 @@ int main (int argc, char **argv)
+
+ #ifdef HAVE_TFTP
+ if (option_bool(OPT_TFTP))
+- {
++ {
++ struct tftp_prefix *p;
+ #ifdef FD_SETSIZE
+ if (FD_SETSIZE < (unsigned)max_fd)
+ max_fd = FD_SETSIZE;
+@@ -782,7 +795,14 @@ int main (int argc, char **argv)
+ daemon->tftp_prefix ? _("root is ") : _("enabled"),
+ daemon->tftp_prefix ? daemon->tftp_prefix: "",
+ option_bool(OPT_TFTP_SECURE) ? _("secure mode") : "");
++
++ if (tftp_prefix_missing)
++ my_syslog(MS_TFTP | LOG_WARNING, _("warning: %s inaccessible"), daemon->tftp_prefix);
+
++ for (p = daemon->if_prefix; p; p = p->next)
++ if (p->missing)
++ my_syslog(MS_TFTP | LOG_WARNING, _("warning: TFTP directory %s inaccessible"), p->prefix);
++
+ /* This is a guess, it assumes that for small limits,
+ disjoint files might be served, but for large limits,
+ a single file will be sent to may clients (the file only needs
+diff --git a/src/dnsmasq.h b/src/dnsmasq.h
+index de95d0e875e3..42952fc76c7a 100644
+--- a/src/dnsmasq.h
++++ b/src/dnsmasq.h
+@@ -240,7 +240,8 @@ struct event_desc {
+ #define OPT_LOCAL_SERVICE 49
+ #define OPT_LOOP_DETECT 50
+ #define OPT_EXTRALOG 51
+-#define OPT_LAST 52
++#define OPT_TFTP_NO_FAIL 52
++#define OPT_LAST 53
+
+ /* extra flags for my_syslog, we use a couple of facilities since they are known
+ not to occupy the same bits as priorities, no matter how syslog.h is set up. */
+@@ -901,6 +902,7 @@ struct addr_list {
+ struct tftp_prefix {
+ char *interface;
+ char *prefix;
++ int missing;
+ struct tftp_prefix *next;
+ };
+
+diff --git a/src/option.c b/src/option.c
+index 3009eb545fde..f91cfbb1aa54 100644
+--- a/src/option.c
++++ b/src/option.c
+@@ -153,6 +153,7 @@ struct myoption {
+ #define LOPT_DHOPT_INOTIFY 341
+ #define LOPT_HOST_INOTIFY 342
+ #define LOPT_DNSSEC_STAMP 343
++#define LOPT_TFTP_NO_FAIL 344
+
+ #ifdef HAVE_GETOPT_LONG
+ static const struct option opts[] =
+@@ -235,6 +236,7 @@ static const struct myoption opts[] =
+ { "dhcp-ignore-names", 2, 0, LOPT_NO_NAMES },
+ { "enable-tftp", 2, 0, LOPT_TFTP },
+ { "tftp-secure", 0, 0, LOPT_SECURE },
++ { "tftp-no-fail", 0, 0, LOPT_TFTP_NO_FAIL },
+ { "tftp-unique-root", 0, 0, LOPT_APREF },
+ { "tftp-root", 1, 0, LOPT_PREFIX },
+ { "tftp-max", 1, 0, LOPT_TFTP_MAX },
+@@ -419,6 +421,7 @@ static struct {
+ { LOPT_PREFIX, ARG_DUP, "<dir>[,<iface>]", gettext_noop("Export files by TFTP only from the specified subtree."), NULL },
+ { LOPT_APREF, OPT_TFTP_APREF, NULL, gettext_noop("Add client IP address to tftp-root."), NULL },
+ { LOPT_SECURE, OPT_TFTP_SECURE, NULL, gettext_noop("Allow access only to files owned by the user running dnsmasq."), NULL },
++ { LOPT_TFTP_NO_FAIL, OPT_TFTP_NO_FAIL, NULL, gettext_noop("Do not terminate the service if TFTP directories are inaccessible."), NULL },
+ { LOPT_TFTP_MAX, ARG_ONE, "<integer>", gettext_noop("Maximum number of conncurrent TFTP transfers (defaults to %s)."), "#" },
+ { LOPT_NOBLOCK, OPT_TFTP_NOBLOCK, NULL, gettext_noop("Disable the TFTP blocksize extension."), NULL },
+ { LOPT_TFTP_LC, OPT_TFTP_LC, NULL, gettext_noop("Convert TFTP filenames to lowercase"), NULL },
+--
+2.1.0
+
--- /dev/null
+From 7aa970e2c7043201663d86a4b5d8cd5c592cef39 Mon Sep 17 00:00:00 2001
+From: Stefan Tomanek <stefan.tomanek+dnsmasq@wertarbyte.de>
+Date: Wed, 1 Apr 2015 17:55:07 +0100
+Subject: [PATCH 69/98] Whitespace fixes.
+
+---
+ src/dnsmasq.c | 14 +++++++-------
+ src/tftp.c | 2 +-
+ 2 files changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/src/dnsmasq.c b/src/dnsmasq.c
+index 0d4d4558a2e2..a7c5da8fbd01 100644
+--- a/src/dnsmasq.c
++++ b/src/dnsmasq.c
+@@ -345,7 +345,7 @@ int main (int argc, char **argv)
+ #else
+ die(_("DBus not available: set HAVE_DBUS in src/config.h"), NULL, EC_BADCONF);
+ #endif
+-
++
+ if (daemon->port != 0)
+ pre_allocate_sfds();
+
+@@ -657,7 +657,7 @@ int main (int argc, char **argv)
+ }
+ closedir(dir);
+ }
+-
++
+ for (p = daemon->if_prefix; p; p = p->next)
+ {
+ p->missing = 0;
+@@ -669,12 +669,12 @@ int main (int argc, char **argv)
+ send_event(err_pipe[1], EVENT_TFTP_ERR, errno, p->prefix);
+ _exit(0);
+ }
+- }
++ }
+ closedir(dir);
+ }
+ }
+ #endif
+-
++
+ if (daemon->port == 0)
+ my_syslog(LOG_INFO, _("started, version %s DNS disabled"), VERSION);
+ else if (daemon->cachesize != 0)
+@@ -784,7 +784,7 @@ int main (int argc, char **argv)
+
+ #ifdef HAVE_TFTP
+ if (option_bool(OPT_TFTP))
+- {
++ {
+ struct tftp_prefix *p;
+ #ifdef FD_SETSIZE
+ if (FD_SETSIZE < (unsigned)max_fd)
+@@ -795,10 +795,10 @@ int main (int argc, char **argv)
+ daemon->tftp_prefix ? _("root is ") : _("enabled"),
+ daemon->tftp_prefix ? daemon->tftp_prefix: "",
+ option_bool(OPT_TFTP_SECURE) ? _("secure mode") : "");
+-
++
+ if (tftp_prefix_missing)
+ my_syslog(MS_TFTP | LOG_WARNING, _("warning: %s inaccessible"), daemon->tftp_prefix);
+-
++
+ for (p = daemon->if_prefix; p; p = p->next)
+ if (p->missing)
+ my_syslog(MS_TFTP | LOG_WARNING, _("warning: TFTP directory %s inaccessible"), p->prefix);
+diff --git a/src/tftp.c b/src/tftp.c
+index a57a31514f44..d3fb6d7492e4 100644
+--- a/src/tftp.c
++++ b/src/tftp.c
+@@ -236,7 +236,7 @@ void tftp_request(struct listener *listen, time_t now)
+ if (ioctl(listen->tftpfd, SIOCGIFMTU, &ifr) != -1)
+ mtu = ifr.ifr_mtu;
+ }
+-
++
+ if (name)
+ {
+ /* check for per-interface prefix */
+--
+2.1.0
+
--- /dev/null
+From fe3992f9fa69fa975ea31919c53933b5f6a63527 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Fri, 3 Apr 2015 21:25:05 +0100
+Subject: [PATCH 70/98] Return INSECURE, rather than BOGUS when DS proved not
+ to exist.
+
+Return INSECURE when validating DNS replies which have RRSIGs, but
+when a needed DS record in the trust chain is proved not to exist.
+It's allowed for a zone to set up DNSKEY and RRSIG records first, then
+add a DS later, completing the chain of trust.
+
+Also, since we don't have the infrastructure to track that these
+non-validated replies have RRSIGS, don't cache them, so we don't
+provide answers with missing RRSIGS from the cache.
+---
+ src/dnsmasq.h | 1 +
+ src/dnssec.c | 2 +-
+ src/forward.c | 87 +++++++++++++++++++++++++++++++++++++++++++++--------------
+ 3 files changed, 69 insertions(+), 21 deletions(-)
+
+diff --git a/src/dnsmasq.h b/src/dnsmasq.h
+index 42952fc76c7a..6fe4a4189188 100644
+--- a/src/dnsmasq.h
++++ b/src/dnsmasq.h
+@@ -583,6 +583,7 @@ struct hostsfile {
+ #define STAT_NO_NS 10
+ #define STAT_NEED_DS_NEG 11
+ #define STAT_CHASE_CNAME 12
++#define STAT_INSECURE_DS 13
+
+ #define FREC_NOREBIND 1
+ #define FREC_CHECKING_DISABLED 2
+diff --git a/src/dnssec.c b/src/dnssec.c
+index 14bae7e9bf75..05e0983cb251 100644
+--- a/src/dnssec.c
++++ b/src/dnssec.c
+@@ -981,7 +981,7 @@ int dnssec_validate_by_ds(time_t now, struct dns_header *header, size_t plen, ch
+
+ /* If we've cached that DS provably doesn't exist, result must be INSECURE */
+ if (crecp->flags & F_NEG)
+- return STAT_INSECURE;
++ return STAT_INSECURE_DS;
+
+ /* NOTE, we need to find ONE DNSKEY which matches the DS */
+ for (valid = 0, j = ntohs(header->ancount); j != 0 && !valid; j--)
+diff --git a/src/forward.c b/src/forward.c
+index 985814c3aec5..e8cf615aa939 100644
+--- a/src/forward.c
++++ b/src/forward.c
+@@ -521,7 +521,8 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
+ }
+
+ static size_t process_reply(struct dns_header *header, time_t now, struct server *server, size_t n, int check_rebind,
+- int no_cache, int cache_secure, int ad_reqd, int do_bit, int added_pheader, int check_subnet, union mysockaddr *query_source)
++ int no_cache, int cache_secure, int bogusanswer, int ad_reqd, int do_bit, int added_pheader,
++ int check_subnet, union mysockaddr *query_source)
+ {
+ unsigned char *pheader, *sizep;
+ char **sets = 0;
+@@ -634,7 +635,7 @@ static size_t process_reply(struct dns_header *header, time_t now, struct server
+ }
+
+ #ifdef HAVE_DNSSEC
+- if (no_cache && !(header->hb4 & HB4_CD))
++ if (bogusanswer && !(header->hb4 & HB4_CD))
+ {
+ if (!option_bool(OPT_DNSSEC_DEBUG))
+ {
+@@ -786,7 +787,7 @@ void reply_query(int fd, int family, time_t now)
+ everything is broken */
+ if (forward->forwardall == 0 || --forward->forwardall == 1 || RCODE(header) != SERVFAIL)
+ {
+- int check_rebind = 0, no_cache_dnssec = 0, cache_secure = 0;
++ int check_rebind = 0, no_cache_dnssec = 0, cache_secure = 0, bogusanswer = 0;
+
+ if (option_bool(OPT_NO_REBIND))
+ check_rebind = !(forward->flags & FREC_NOREBIND);
+@@ -819,7 +820,13 @@ void reply_query(int fd, int family, time_t now)
+ else if (forward->flags & FREC_DS_QUERY)
+ {
+ status = dnssec_validate_ds(now, header, n, daemon->namebuff, daemon->keyname, forward->class);
+- if (status == STAT_NO_DS || status == STAT_NO_NS)
++ /* Provably no DS, everything below is insecure, even if signatures are offered */
++ if (status == STAT_NO_DS)
++ /* We only cache sigs when we've validated a reply.
++ Avoid caching a reply with sigs if there's a vaildated break in the
++ DS chain, so we don't return replies from cache missing sigs. */
++ status = STAT_INSECURE_DS;
++ else if (status == STAT_NO_NS)
+ status = STAT_BOGUS;
+ }
+ else if (forward->flags & FREC_CHECK_NOSIGN)
+@@ -959,8 +966,14 @@ void reply_query(int fd, int family, time_t now)
+ else if (forward->flags & FREC_DS_QUERY)
+ {
+ status = dnssec_validate_ds(now, header, n, daemon->namebuff, daemon->keyname, forward->class);
+- if (status == STAT_NO_DS || status == STAT_NO_NS)
+- status = STAT_BOGUS;
++ /* Provably no DS, everything below is insecure, even if signatures are offered */
++ if (status == STAT_NO_DS)
++ /* We only cache sigs when we've validated a reply.
++ Avoid caching a reply with sigs if there's a vaildated break in the
++ DS chain, so we don't return replies from cache missing sigs. */
++ status = STAT_INSECURE_DS;
++ else if (status == STAT_NO_NS)
++ status = STAT_BOGUS;
+ }
+ else if (forward->flags & FREC_CHECK_NOSIGN)
+ {
+@@ -985,6 +998,17 @@ void reply_query(int fd, int family, time_t now)
+ }
+ }
+
++ no_cache_dnssec = 0;
++
++ if (status == STAT_INSECURE_DS)
++ {
++ /* We only cache sigs when we've validated a reply.
++ Avoid caching a reply with sigs if there's a vaildated break in the
++ DS chain, so we don't return replies from cache missing sigs. */
++ status = STAT_INSECURE;
++ no_cache_dnssec = 1;
++ }
++
+ if (status == STAT_TRUNCATED)
+ header->hb3 |= HB3_TC;
+ else
+@@ -1002,12 +1026,13 @@ void reply_query(int fd, int family, time_t now)
+ log_query(F_KEYTAG | F_SECSTAT, "result", NULL, result);
+ }
+
+- no_cache_dnssec = 0;
+-
+ if (status == STAT_SECURE)
+ cache_secure = 1;
+ else if (status == STAT_BOGUS)
+- no_cache_dnssec = 1;
++ {
++ no_cache_dnssec = 1;
++ bogusanswer = 1;
++ }
+ }
+ #endif
+
+@@ -1017,7 +1042,7 @@ void reply_query(int fd, int family, time_t now)
+ else
+ header->hb4 &= ~HB4_CD;
+
+- if ((nn = process_reply(header, now, server, (size_t)n, check_rebind, no_cache_dnssec, cache_secure,
++ if ((nn = process_reply(header, now, server, (size_t)n, check_rebind, no_cache_dnssec, cache_secure, bogusanswer,
+ forward->flags & FREC_AD_QUESTION, forward->flags & FREC_DO_QUESTION,
+ forward->flags & FREC_ADDED_PHEADER, forward->flags & FREC_HAS_SUBNET, &forward->source)))
+ {
+@@ -1420,7 +1445,7 @@ static int do_check_sign(struct frec *forward, int status, time_t now, char *nam
+ }
+ }
+
+-/* Move toward the root, until we find a signed non-existance of a DS, in which case
++/* Move down from the root, until we find a signed non-existance of a DS, in which case
+ an unsigned answer is OK, or we find a signed DS, in which case there should be
+ a signature, and the answer is BOGUS */
+ static int tcp_check_for_unsigned_zone(time_t now, struct dns_header *header, size_t plen, int class, char *name,
+@@ -1570,8 +1595,13 @@ static int tcp_key_recurse(time_t now, int status, struct dns_header *header, si
+ else if (status == STAT_NEED_DS || status == STAT_NEED_DS_NEG)
+ {
+ new_status = dnssec_validate_ds(now, header, n, name, keyname, class);
+- if (status == STAT_NEED_DS && (new_status == STAT_NO_DS || new_status == STAT_NO_NS))
+- new_status = STAT_BOGUS;
++ if (status == STAT_NEED_DS)
++ {
++ if (new_status == STAT_NO_DS)
++ new_status = STAT_INSECURE_DS;
++ else if (new_status == STAT_NO_NS)
++ new_status = STAT_BOGUS;
++ }
+ }
+ else if (status == STAT_CHASE_CNAME)
+ new_status = dnssec_chase_cname(now, header, n, name, keyname);
+@@ -1630,8 +1660,13 @@ static int tcp_key_recurse(time_t now, int status, struct dns_header *header, si
+ else if (status == STAT_NEED_DS || status == STAT_NEED_DS_NEG)
+ {
+ new_status = dnssec_validate_ds(now, header, n, name, keyname, class);
+- if (status == STAT_NEED_DS && (new_status == STAT_NO_DS || new_status == STAT_NO_NS))
+- new_status = STAT_BOGUS; /* Validated no DS */
++ if (status == STAT_NEED_DS)
++ {
++ if (new_status == STAT_NO_DS)
++ new_status = STAT_INSECURE_DS;
++ else if (new_status == STAT_NO_NS)
++ new_status = STAT_BOGUS; /* Validated no DS */
++ }
+ }
+ else if (status == STAT_CHASE_CNAME)
+ new_status = dnssec_chase_cname(now, header, n, name, keyname);
+@@ -1652,7 +1687,7 @@ static int tcp_key_recurse(time_t now, int status, struct dns_header *header, si
+ goto another_tcp_key;
+ }
+ }
+-
++
+ free(packet);
+ }
+ return new_status;
+@@ -1673,7 +1708,7 @@ unsigned char *tcp_request(int confd, time_t now,
+ int local_auth = 0;
+ #endif
+ int checking_disabled, ad_question, do_bit, added_pheader = 0;
+- int check_subnet, no_cache_dnssec = 0, cache_secure = 0;
++ int check_subnet, no_cache_dnssec = 0, cache_secure = 0, bogusanswer = 0;
+ size_t m;
+ unsigned short qtype;
+ unsigned int gotname;
+@@ -1941,6 +1976,15 @@ unsigned char *tcp_request(int confd, time_t now,
+ int status = tcp_key_recurse(now, STAT_TRUNCATED, header, m, 0, daemon->namebuff, daemon->keyname, last_server, &keycount);
+ char *result;
+
++ if (status == STAT_INSECURE_DS)
++ {
++ /* We only cache sigs when we've validated a reply.
++ Avoid caching a reply with sigs if there's a vaildated break in the
++ DS chain, so we don't return replies from cache missing sigs. */
++ status = STAT_INSECURE;
++ no_cache_dnssec = 1;
++ }
++
+ if (keycount == 0)
+ {
+ result = "ABANDONED";
+@@ -1952,8 +1996,11 @@ unsigned char *tcp_request(int confd, time_t now,
+ log_query(F_KEYTAG | F_SECSTAT, "result", NULL, result);
+
+ if (status == STAT_BOGUS)
+- no_cache_dnssec = 1;
+-
++ {
++ no_cache_dnssec = 1;
++ bogusanswer = 1;
++ }
++
+ if (status == STAT_SECURE)
+ cache_secure = 1;
+ }
+@@ -1987,7 +2034,7 @@ unsigned char *tcp_request(int confd, time_t now,
+ #endif
+
+ m = process_reply(header, now, last_server, (unsigned int)m,
+- option_bool(OPT_NO_REBIND) && !norebind, no_cache_dnssec,
++ option_bool(OPT_NO_REBIND) && !norebind, no_cache_dnssec, bogusanswer,
+ cache_secure, ad_question, do_bit, added_pheader, check_subnet, &peer_addr);
+
+ break;
+--
+2.1.0
+
--- /dev/null
+From 982faf402487e265ed11ac03524531d42b03c966 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Fri, 3 Apr 2015 21:42:30 +0100
+Subject: [PATCH 71/98] Fix compiler warning when not including DNSSEC.
+
+---
+ src/forward.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/forward.c b/src/forward.c
+index e8cf615aa939..3f6b9a23b6ab 100644
+--- a/src/forward.c
++++ b/src/forward.c
+@@ -530,7 +530,8 @@ static size_t process_reply(struct dns_header *header, time_t now, struct server
+ size_t plen;
+
+ (void)ad_reqd;
+- (void) do_bit;
++ (void)do_bit;
++ (void)bogusanswer;
+
+ #ifdef HAVE_IPSET
+ if (daemon->ipsets && extract_request(header, n, daemon->namebuff, NULL))
+--
+2.1.0
+
--- /dev/null
+From 04b0ac05377936d121a36873bb63d492cde292c9 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Mon, 6 Apr 2015 17:19:13 +0100
+Subject: [PATCH 72/98] Fix crash caused by looking up servers.bind when many
+ servers defined.
+
+---
+ CHANGELOG | 7 ++++++-
+ src/cache.c | 4 ++--
+ 2 files changed, 8 insertions(+), 3 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 34432ae4807f..6aa3d851a297 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -75,7 +75,12 @@ version 2.73
+
+ Add --tftp-no-fail option. Thanks to Stefan Tomanek for
+ the patch.
+-
++
++ Fix crash caused by looking up servers.bind, CHAOS text record,
++ when more than about five --servers= lines are in the dnsmasq
++ config. This causes memory corruption which causes a crash later.
++ Thanks to Matt Coddington for sterling work chasing this down.
++
+
+ version 2.72
+ Add ra-advrouter mode, for RFC-3775 mobile IPv6 support.
+diff --git a/src/cache.c b/src/cache.c
+index d7bea574c0d8..178d654ca92e 100644
+--- a/src/cache.c
++++ b/src/cache.c
+@@ -1367,7 +1367,7 @@ int cache_make_stat(struct txt_record *t)
+ }
+ port = prettyprint_addr(&serv->addr, daemon->addrbuff);
+ lenp = p++; /* length */
+- bytes_avail = (p - buff) + bufflen;
++ bytes_avail = bufflen - (p - buff );
+ bytes_needed = snprintf(p, bytes_avail, "%s#%d %u %u", daemon->addrbuff, port, queries, failed_queries);
+ if (bytes_needed >= bytes_avail)
+ {
+@@ -1381,7 +1381,7 @@ int cache_make_stat(struct txt_record *t)
+ lenp = p - 1;
+ buff = new;
+ bufflen = newlen;
+- bytes_avail = (p - buff) + bufflen;
++ bytes_avail = bufflen - (p - buff );
+ bytes_needed = snprintf(p, bytes_avail, "%s#%d %u %u", daemon->addrbuff, port, queries, failed_queries);
+ }
+ *lenp = bytes_needed;
+--
+2.1.0
+
--- /dev/null
+From ad4a8ff7d9097008d7623df8543df435bfddeac8 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Thu, 9 Apr 2015 21:48:00 +0100
+Subject: [PATCH 73/98] Fix crash on receipt of certain malformed DNS requests.
+
+---
+ CHANGELOG | 3 +++
+ src/rfc1035.c | 9 ++++++---
+ 2 files changed, 9 insertions(+), 3 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 6aa3d851a297..9af617056f1f 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -125,6 +125,9 @@ version 2.72
+ Fix problem with --local-service option on big-endian platforms
+ Thanks to Richard Genoud for the patch.
+
++ Fix crash on receipt of certain malformed DNS requests. Thanks
++ to Nick Sampanis for spotting the problem.
++
+
+ version 2.71
+ Subtle change to error handling to help DNSSEC validation
+diff --git a/src/rfc1035.c b/src/rfc1035.c
+index 7a07b0cee906..a995ab50d74a 100644
+--- a/src/rfc1035.c
++++ b/src/rfc1035.c
+@@ -1198,7 +1198,10 @@ unsigned int extract_request(struct dns_header *header, size_t qlen, char *name,
+ size_t setup_reply(struct dns_header *header, size_t qlen,
+ struct all_addr *addrp, unsigned int flags, unsigned long ttl)
+ {
+- unsigned char *p = skip_questions(header, qlen);
++ unsigned char *p;
++
++ if (!(p = skip_questions(header, qlen)))
++ return 0;
+
+ /* clear authoritative and truncated flags, set QR flag */
+ header->hb3 = (header->hb3 & ~(HB3_AA | HB3_TC)) | HB3_QR;
+@@ -1214,7 +1217,7 @@ size_t setup_reply(struct dns_header *header, size_t qlen,
+ SET_RCODE(header, NOERROR); /* empty domain */
+ else if (flags == F_NXDOMAIN)
+ SET_RCODE(header, NXDOMAIN);
+- else if (p && flags == F_IPV4)
++ else if (flags == F_IPV4)
+ { /* we know the address */
+ SET_RCODE(header, NOERROR);
+ header->ancount = htons(1);
+@@ -1222,7 +1225,7 @@ size_t setup_reply(struct dns_header *header, size_t qlen,
+ add_resource_record(header, NULL, NULL, sizeof(struct dns_header), &p, ttl, NULL, T_A, C_IN, "4", addrp);
+ }
+ #ifdef HAVE_IPV6
+- else if (p && flags == F_IPV6)
++ else if (flags == F_IPV6)
+ {
+ SET_RCODE(header, NOERROR);
+ header->ancount = htons(1);
+--
+2.1.0
+
--- /dev/null
+From 38440b204db65f9be16c4c3daa7e991e4356f6ed Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sun, 12 Apr 2015 21:52:47 +0100
+Subject: [PATCH 74/98] Fix crash in auth code with odd configuration.
+
+---
+ CHANGELOG | 32 +++++++++++++++++++++-----------
+ src/auth.c | 13 ++++++++-----
+ 2 files changed, 29 insertions(+), 16 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 9af617056f1f..f2142c71cbdc 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -68,18 +68,31 @@ version 2.73
+ Fix broken DNSSEC validation of ECDSA signatures.
+
+ Add --dnssec-timestamp option, which provides an automatic
+- way to detect when the system time becomes valid after boot
+- on systems without an RTC, whilst allowing DNS queries before the
+- clock is valid so that NTP can run. Thanks to
+- Kevin Darbyshire-Bryant for developing this idea.
++ way to detect when the system time becomes valid after
++ boot on systems without an RTC, whilst allowing DNS
++ queries before the clock is valid so that NTP can run.
++ Thanks to Kevin Darbyshire-Bryant for developing this idea.
+
+ Add --tftp-no-fail option. Thanks to Stefan Tomanek for
+ the patch.
+
+- Fix crash caused by looking up servers.bind, CHAOS text record,
+- when more than about five --servers= lines are in the dnsmasq
+- config. This causes memory corruption which causes a crash later.
+- Thanks to Matt Coddington for sterling work chasing this down.
++ Fix crash caused by looking up servers.bind, CHAOS text
++ record, when more than about five --servers= lines are
++ in the dnsmasq config. This causes memory corruption
++ which causes a crash later. Thanks to Matt Coddington for
++ sterling work chasing this down.
++
++ Fix crash on receipt of certain malformed DNS requests.
++ Thanks to Nick Sampanis for spotting the problem.
++
++ Fix crash in authoritative DNS code, if a .arpa zone
++ is declared as authoritative, and then a PTR query which
++ is not to be treated as authoritative arrived. Normally,
++ directly declaring .arpa zone as authoritative is not
++ done, so this crash wouldn't be seen. Instead the
++ relevant .arpa zone should be specified as a subnet
++ in the auth-zone declaration. Thanks to Johnny S. Lee
++ for the bugreport and initial patch.
+
+
+ version 2.72
+@@ -125,10 +138,7 @@ version 2.72
+ Fix problem with --local-service option on big-endian platforms
+ Thanks to Richard Genoud for the patch.
+
+- Fix crash on receipt of certain malformed DNS requests. Thanks
+- to Nick Sampanis for spotting the problem.
+
+-
+ version 2.71
+ Subtle change to error handling to help DNSSEC validation
+ when servers fail to provide NODATA answers for
+diff --git a/src/auth.c b/src/auth.c
+index 15721e52793f..4a5c39fc5c07 100644
+--- a/src/auth.c
++++ b/src/auth.c
+@@ -141,7 +141,7 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
+ for (zone = daemon->auth_zones; zone; zone = zone->next)
+ if ((subnet = find_subnet(zone, flag, &addr)))
+ break;
+-
++
+ if (!zone)
+ {
+ auth = 0;
+@@ -186,7 +186,7 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
+
+ if (intr)
+ {
+- if (in_zone(zone, intr->name, NULL))
++ if (local_query || in_zone(zone, intr->name, NULL))
+ {
+ found = 1;
+ log_query(flag | F_REVERSE | F_CONFIG, intr->name, &addr, NULL);
+@@ -208,8 +208,11 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
+ *p = 0; /* must be bare name */
+
+ /* add external domain */
+- strcat(name, ".");
+- strcat(name, zone->domain);
++ if (zone)
++ {
++ strcat(name, ".");
++ strcat(name, zone->domain);
++ }
+ log_query(flag | F_DHCP | F_REVERSE, name, &addr, record_source(crecp->uid));
+ found = 1;
+ if (add_resource_record(header, limit, &trunc, nameoffset, &ansp,
+@@ -217,7 +220,7 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
+ T_PTR, C_IN, "d", name))
+ anscount++;
+ }
+- else if (crecp->flags & (F_DHCP | F_HOSTS) && in_zone(zone, name, NULL))
++ else if (crecp->flags & (F_DHCP | F_HOSTS) && (local_query || in_zone(zone, name, NULL)))
+ {
+ log_query(crecp->flags & ~F_FORWARD, name, &addr, record_source(crecp->uid));
+ found = 1;
+--
+2.1.0
+
--- /dev/null
+From 78c6184752dce27849e36cce4360abc27b8d76d2 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Thu, 16 Apr 2015 15:05:30 +0100
+Subject: [PATCH 75/98] Auth: correct replies to NS and SOA in .arpa zones.
+
+---
+ CHANGELOG | 8 ++++++++
+ src/auth.c | 51 ++++++++++++++++++++++++++++++---------------------
+ 2 files changed, 38 insertions(+), 21 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index f2142c71cbdc..0619788e9cef 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -94,6 +94,14 @@ version 2.73
+ in the auth-zone declaration. Thanks to Johnny S. Lee
+ for the bugreport and initial patch.
+
++ Fix authoritative DNS code to correctly reply to NS
++ and SOA queries for .arpa zones for which we are
++ declared authoritative by means of a subnet in auth-zone.
++ Previously we provided correct answers to PTR queries
++ in such zones (including NS and SOA) but not direct
++ NS and SOA queries. Thanks to Johnny S. Lee for
++ pointing out the problem.
++
+
+ version 2.72
+ Add ra-advrouter mode, for RFC-3775 mobile IPv6 support.
+diff --git a/src/auth.c b/src/auth.c
+index 4a5c39fc5c07..2b0b7d6b052d 100644
+--- a/src/auth.c
++++ b/src/auth.c
+@@ -131,24 +131,27 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
+ continue;
+ }
+
+- if (qtype == T_PTR)
++ if ((qtype == T_PTR || qtype == T_SOA || qtype == T_NS) &&
++ (flag = in_arpa_name_2_addr(name, &addr)) &&
++ !local_query)
+ {
+- if (!(flag = in_arpa_name_2_addr(name, &addr)))
+- continue;
+-
+- if (!local_query)
++ for (zone = daemon->auth_zones; zone; zone = zone->next)
++ if ((subnet = find_subnet(zone, flag, &addr)))
++ break;
++
++ if (!zone)
+ {
+- for (zone = daemon->auth_zones; zone; zone = zone->next)
+- if ((subnet = find_subnet(zone, flag, &addr)))
+- break;
+-
+- if (!zone)
+- {
+- auth = 0;
+- continue;
+- }
++ auth = 0;
++ continue;
+ }
++ else if (qtype == T_SOA)
++ soa = 1, found = 1;
++ else if (qtype == T_NS)
++ ns = 1, found = 1;
++ }
+
++ if (qtype == T_PTR && flag)
++ {
+ intr = NULL;
+
+ if (flag == F_IPV4)
+@@ -243,14 +246,20 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
+ }
+
+ cname_restart:
+- for (zone = daemon->auth_zones; zone; zone = zone->next)
+- if (in_zone(zone, name, &cut))
+- break;
+-
+- if (!zone)
++ if (found)
++ /* NS and SOA .arpa requests have set found above. */
++ cut = NULL;
++ else
+ {
+- auth = 0;
+- continue;
++ for (zone = daemon->auth_zones; zone; zone = zone->next)
++ if (in_zone(zone, name, &cut))
++ break;
++
++ if (!zone)
++ {
++ auth = 0;
++ continue;
++ }
+ }
+
+ for (rec = daemon->mxnames; rec; rec = rec->next)
+--
+2.1.0
+
--- /dev/null
+From b4c0f092d8ce63ea4763c0ac17aa8d24318ad301 Mon Sep 17 00:00:00 2001
+From: Stefan Tomanek <stefan.tomanek+dnsmasq@wertarbyte.de>
+Date: Thu, 16 Apr 2015 15:20:59 +0100
+Subject: [PATCH 76/98] Fix (srk induced) crash in new tftp_no_fail code.
+
+---
+ src/dnsmasq.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/src/dnsmasq.c b/src/dnsmasq.c
+index a7c5da8fbd01..20b15c05103a 100644
+--- a/src/dnsmasq.c
++++ b/src/dnsmasq.c
+@@ -655,7 +655,8 @@ int main (int argc, char **argv)
+ _exit(0);
+ }
+ }
+- closedir(dir);
++ else
++ closedir(dir);
+ }
+
+ for (p = daemon->if_prefix; p; p = p->next)
+@@ -670,7 +671,8 @@ int main (int argc, char **argv)
+ _exit(0);
+ }
+ }
+- closedir(dir);
++ else
++ closedir(dir);
+ }
+ }
+ #endif
+--
+2.1.0
+
--- /dev/null
+From 0df29f5e23fd2f16181847db1fcf3a8b392d869a Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Thu, 16 Apr 2015 15:24:52 +0100
+Subject: [PATCH 77/98] Note CVE-2015-3294
+
+---
+ CHANGELOG | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 0619788e9cef..7f2b1e002e9e 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -84,6 +84,9 @@ version 2.73
+
+ Fix crash on receipt of certain malformed DNS requests.
+ Thanks to Nick Sampanis for spotting the problem.
++ Note that this is could allow the dnsmasq process's
++ memory to be read by an attacker under certain
++ circumstances, so it has a CVE, CVE-2015-3294
+
+ Fix crash in authoritative DNS code, if a .arpa zone
+ is declared as authoritative, and then a PTR query which
+--
+2.1.0
+
--- /dev/null
+From 554b580e970275d5a869cb4fbfb2716f92b2f664 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Fri, 17 Apr 2015 22:50:20 +0100
+Subject: [PATCH 78/98] Log domain when reporting DNSSEC validation failure.
+
+---
+ src/forward.c | 15 ++++++++++-----
+ 1 file changed, 10 insertions(+), 5 deletions(-)
+
+diff --git a/src/forward.c b/src/forward.c
+index 3f6b9a23b6ab..1c7da3f5655c 100644
+--- a/src/forward.c
++++ b/src/forward.c
+@@ -1014,7 +1014,7 @@ void reply_query(int fd, int family, time_t now)
+ header->hb3 |= HB3_TC;
+ else
+ {
+- char *result;
++ char *result, *domain = "result";
+
+ if (forward->work_counter == 0)
+ {
+@@ -1024,7 +1024,10 @@ void reply_query(int fd, int family, time_t now)
+ else
+ result = (status == STAT_SECURE ? "SECURE" : (status == STAT_INSECURE ? "INSECURE" : "BOGUS"));
+
+- log_query(F_KEYTAG | F_SECSTAT, "result", NULL, result);
++ if (status == STAT_BOGUS && extract_request(header, n, daemon->namebuff, NULL))
++ domain = daemon->namebuff;
++
++ log_query(F_KEYTAG | F_SECSTAT, domain, NULL, result);
+ }
+
+ if (status == STAT_SECURE)
+@@ -1975,7 +1978,7 @@ unsigned char *tcp_request(int confd, time_t now,
+ {
+ int keycount = DNSSEC_WORK; /* Limit to number of DNSSEC questions, to catch loops and avoid filling cache. */
+ int status = tcp_key_recurse(now, STAT_TRUNCATED, header, m, 0, daemon->namebuff, daemon->keyname, last_server, &keycount);
+- char *result;
++ char *result, *domain = "result";
+
+ if (status == STAT_INSECURE_DS)
+ {
+@@ -1993,8 +1996,10 @@ unsigned char *tcp_request(int confd, time_t now,
+ }
+ else
+ result = (status == STAT_SECURE ? "SECURE" : (status == STAT_INSECURE ? "INSECURE" : "BOGUS"));
+-
+- log_query(F_KEYTAG | F_SECSTAT, "result", NULL, result);
++ if (status == STAT_BOGUS && extract_request(header, m, daemon->namebuff, NULL))
++ domain = daemon->namebuff;
++
++ log_query(F_KEYTAG | F_SECSTAT, domain, NULL, result);
+
+ if (status == STAT_BOGUS)
+ {
+--
+2.1.0
+
--- /dev/null
+From a006eb7e1486023480ea40244720ef7aab51de71 Mon Sep 17 00:00:00 2001
+From: Moshe Levi <moshele@mellanox.com>
+Date: Sun, 19 Apr 2015 22:10:40 +0100
+Subject: [PATCH 79/98] Check IP address command line arg in dhcp_release.c
+
+---
+ contrib/wrt/dhcp_release.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/contrib/wrt/dhcp_release.c b/contrib/wrt/dhcp_release.c
+index 53f47dda3aec..a51f04b30cab 100644
+--- a/contrib/wrt/dhcp_release.c
++++ b/contrib/wrt/dhcp_release.c
+@@ -277,6 +277,11 @@ int main(int argc, char **argv)
+ exit(1);
+ }
+
++ if (inet_addr(argv[2]) == INADDR_NONE)
++ {
++ perror("invalid ip address");
++ exit(1);
++ }
+
+ lease.s_addr = inet_addr(argv[2]);
+ server = find_interface(lease, nl, if_nametoindex(argv[1]));
+--
+2.1.0
+
--- /dev/null
+From 338b340be9e7198f5c0f68133d070d6598a0814c Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Mon, 20 Apr 2015 21:34:05 +0100
+Subject: [PATCH 80/98] Revert 61b838dd574c51d96fef100285a0d225824534f9 and
+ just quieten log instead.
+
+---
+ src/rfc3315.c | 24 ++++++++++--------------
+ 1 file changed, 10 insertions(+), 14 deletions(-)
+
+diff --git a/src/rfc3315.c b/src/rfc3315.c
+index c1ddc805988d..c45116a40a09 100644
+--- a/src/rfc3315.c
++++ b/src/rfc3315.c
+@@ -824,25 +824,21 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
+ }
+ else
+ {
+- /* Windows 8 always requests an address even if the Managed bit
+- in RA is 0 and it keeps retrying if it receives a reply
+- stating that no addresses are available. We solve this
+- by not replying at all if we're not configured to give any
+- addresses by DHCPv6. RFC 3315 17.2.1. appears to allow this. */
+-
+- for (c = state->context; c; c = c->current)
+- if (!(c->flags & CONTEXT_RA_STATELESS))
+- break;
+-
+- if (!c)
+- return 0;
+-
+ /* no address, return error */
+ o1 = new_opt6(OPTION6_STATUS_CODE);
+ put_opt6_short(DHCP6NOADDRS);
+ put_opt6_string(_("no addresses available"));
+ end_opt6(o1);
+- log6_packet(state, state->lease_allocate ? "DHCPREPLY" : "DHCPADVERTISE", NULL, _("no addresses available"));
++
++ /* Some clients will ask repeatedly when we're not giving
++ out addresses because we're in stateless mode. Avoid spamming
++ the log in that case. */
++ for (c = state->context; c; c = c->current)
++ if (!(c->flags & CONTEXT_RA_STATELESS))
++ {
++ log6_packet(state, state->lease_allocate ? "DHCPREPLY" : "DHCPADVERTISE", NULL, _("no addresses available"));
++ break;
++ }
+ }
+
+ break;
+--
+2.1.0
+
--- /dev/null
+From cbe379ad6b52a538a4416a7cd992817e5637ccf9 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Tue, 21 Apr 2015 22:57:06 +0100
+Subject: [PATCH 81/98] Handle domain names with '.' or /000 within labels.
+
+Only in DNSSEC mode, where we might need to validate or store
+such names. In none-DNSSEC mode, simply don't cache these, as before.
+---
+ src/dns-protocol.h | 4 ++++
+ src/dnsmasq.c | 15 +++++++++++++--
+ src/dnssec.c | 40 +++++++++++++++++++++++++++++++---------
+ src/rfc1035.c | 16 +++++++++++++++-
+ src/util.c | 9 ++++++++-
+ 5 files changed, 71 insertions(+), 13 deletions(-)
+
+diff --git a/src/dns-protocol.h b/src/dns-protocol.h
+index 16fade33d98c..7f5d686bb150 100644
+--- a/src/dns-protocol.h
++++ b/src/dns-protocol.h
+@@ -142,3 +142,7 @@ struct dns_header {
+
+ #define ADD_RDLEN(header, pp, plen, len) \
+ (!CHECK_LEN(header, pp, plen, len) ? 0 : (((pp) += (len)), 1))
++
++/* Escape character in our presentation format for names.
++ Cannot be '.' or /000 and must be !isprint() */
++#define NAME_ESCAPE 1
+diff --git a/src/dnsmasq.c b/src/dnsmasq.c
+index 20b15c05103a..19a6428b09e8 100644
+--- a/src/dnsmasq.c
++++ b/src/dnsmasq.c
+@@ -102,8 +102,19 @@ int main (int argc, char **argv)
+ #ifdef HAVE_DNSSEC
+ if (option_bool(OPT_DNSSEC_VALID))
+ {
+- daemon->keyname = safe_malloc(MAXDNAME);
+- daemon->workspacename = safe_malloc(MAXDNAME);
++ /* Note that both /000 and '.' are allowed within labels. These get
++ represented in presentation format using NAME_ESCAPE as an escape
++ character when in DNSSEC mode.
++ In theory, if all the characters in a name were /000 or
++ '.' or NAME_ESCAPE then all would have to be escaped, so the
++ presentation format would be twice as long as the spec.
++
++ daemon->namebuff was previously allocated by the option-reading
++ code before we knew if we're in DNSSEC mode, so reallocate here. */
++ free(daemon->namebuff);
++ daemon->namebuff = safe_malloc(MAXDNAME * 2);
++ daemon->keyname = safe_malloc(MAXDNAME * 2);
++ daemon->workspacename = safe_malloc(MAXDNAME * 2);
+ }
+ #endif
+
+diff --git a/src/dnssec.c b/src/dnssec.c
+index 05e0983cb251..c116a7b5f6f4 100644
+--- a/src/dnssec.c
++++ b/src/dnssec.c
+@@ -321,10 +321,18 @@ static int verify(struct blockdata *key_data, unsigned int key_len, unsigned cha
+ thus generating names in canonical form.
+ Calling to_wire followed by from_wire is almost an identity,
+ except that the UC remains mapped to LC.
++
++ Note that both /000 and '.' are allowed within labels. These get
++ represented in presentation format using NAME_ESCAPE as an escape
++ character. In theory, if all the characters in a name were /000 or
++ '.' or NAME_ESCAPE then all would have to be escaped, so the
++ presentation format would be twice as long as the spec (1024).
++ The buffers are all delcared as 2049 (allowing for the trailing zero)
++ for this reason.
+ */
+ static int to_wire(char *name)
+ {
+- unsigned char *l, *p, term;
++ unsigned char *l, *p, *q, term;
+ int len;
+
+ for (l = (unsigned char*)name; *l != 0; l = p)
+@@ -332,7 +340,10 @@ static int to_wire(char *name)
+ for (p = l; *p != '.' && *p != 0; p++)
+ if (*p >= 'A' && *p <= 'Z')
+ *p = *p - 'A' + 'a';
+-
++ else if (*p == NAME_ESCAPE)
++ for (q = p; *q; q++)
++ *q = *(q+1);
++
+ term = *p;
+
+ if ((len = p - l) != 0)
+@@ -351,13 +362,23 @@ static int to_wire(char *name)
+ /* Note: no compression allowed in input. */
+ static void from_wire(char *name)
+ {
+- unsigned char *l;
++ unsigned char *l, *p, *last;
+ int len;
+-
++
++ for (last = (unsigned char *)name; *last != 0; last += *last+1);
++
+ for (l = (unsigned char *)name; *l != 0; l += len+1)
+ {
+ len = *l;
+ memmove(l, l+1, len);
++ for (p = l; p < l + len; p++)
++ if (*p == '.' || *p == 0 || *p == NAME_ESCAPE)
++ {
++ memmove(p+1, p, 1 + last - p);
++ len++;
++ *p++ = NAME_ESCAPE;
++ }
++
+ l[len] = '.';
+ }
+
+@@ -645,7 +666,7 @@ static void sort_rrset(struct dns_header *header, size_t plen, u16 *rr_desc, int
+ if (left1 != 0)
+ memmove(buff1, buff1 + len1 - left1, left1);
+
+- if ((len1 = get_rdata(header, plen, end1, buff1 + left1, MAXDNAME - left1, &p1, &dp1)) == 0)
++ if ((len1 = get_rdata(header, plen, end1, buff1 + left1, (MAXDNAME * 2) - left1, &p1, &dp1)) == 0)
+ {
+ quit = 1;
+ len1 = end1 - p1;
+@@ -656,7 +677,7 @@ static void sort_rrset(struct dns_header *header, size_t plen, u16 *rr_desc, int
+ if (left2 != 0)
+ memmove(buff2, buff2 + len2 - left2, left2);
+
+- if ((len2 = get_rdata(header, plen, end2, buff2 + left2, MAXDNAME - left2, &p2, &dp2)) == 0)
++ if ((len2 = get_rdata(header, plen, end2, buff2 + left2, (MAXDNAME *2) - left2, &p2, &dp2)) == 0)
+ {
+ quit = 1;
+ len2 = end2 - p2;
+@@ -902,10 +923,11 @@ static int validate_rrset(time_t now, struct dns_header *header, size_t plen, in
+
+ end = p + rdlen;
+
+- /* canonicalise rdata and calculate length of same, use name buffer as workspace */
++ /* canonicalise rdata and calculate length of same, use name buffer as workspace.
++ Note that name buffer is twice MAXDNAME long in DNSSEC mode. */
+ cp = p;
+ dp = rr_desc;
+- for (len = 0; (seg = get_rdata(header, plen, end, name, MAXDNAME, &cp, &dp)) != 0; len += seg);
++ for (len = 0; (seg = get_rdata(header, plen, end, name, MAXDNAME * 2, &cp, &dp)) != 0; len += seg);
+ len += end - cp;
+ len = htons(len);
+ hash->update(ctx, 2, (unsigned char *)&len);
+@@ -913,7 +935,7 @@ static int validate_rrset(time_t now, struct dns_header *header, size_t plen, in
+ /* Now canonicalise again and digest. */
+ cp = p;
+ dp = rr_desc;
+- while ((seg = get_rdata(header, plen, end, name, MAXDNAME, &cp, &dp)))
++ while ((seg = get_rdata(header, plen, end, name, MAXDNAME * 2, &cp, &dp)))
+ hash->update(ctx, seg, (unsigned char *)name);
+ if (cp != end)
+ hash->update(ctx, end - cp, cp);
+diff --git a/src/rfc1035.c b/src/rfc1035.c
+index a995ab50d74a..19fecc818c06 100644
+--- a/src/rfc1035.c
++++ b/src/rfc1035.c
+@@ -128,6 +128,15 @@ int extract_name(struct dns_header *header, size_t plen, unsigned char **pp,
+ if (isExtract)
+ {
+ unsigned char c = *p;
++#ifdef HAVE_DNSSEC
++ if (option_bool(OPT_DNSSEC_VALID))
++ {
++ if (c == 0 || c == '.' || c == NAME_ESCAPE)
++ *cp++ = NAME_ESCAPE;
++ *cp++ = c;
++ }
++ else
++#endif
+ if (c != 0 && c != '.')
+ *cp++ = c;
+ else
+@@ -144,9 +153,14 @@ int extract_name(struct dns_header *header, size_t plen, unsigned char **pp,
+ cp++;
+ if (c1 >= 'A' && c1 <= 'Z')
+ c1 += 'a' - 'A';
++#ifdef HAVE_DNSSEC
++ if (option_bool(OPT_DNSSEC_VALID) && c1 == NAME_ESCAPE)
++ c1 = *cp++;
++#endif
++
+ if (c2 >= 'A' && c2 <= 'Z')
+ c2 += 'a' - 'A';
+-
++
+ if (c1 != c2)
+ retvalue = 2;
+ }
+diff --git a/src/util.c b/src/util.c
+index 648bc4d4b428..0c1a48b4700a 100644
+--- a/src/util.c
++++ b/src/util.c
+@@ -226,7 +226,14 @@ unsigned char *do_rfc1035_name(unsigned char *p, char *sval)
+ {
+ unsigned char *cp = p++;
+ for (j = 0; *sval && (*sval != '.'); sval++, j++)
+- *p++ = *sval;
++ {
++#ifdef HAVE_DNSSEC
++ if (option_bool(OPT_DNSSEC_VALID) && *sval == NAME_ESCAPE)
++ *p++ = *(++sval);
++ else
++#endif
++ *p++ = *sval;
++ }
+ *cp = j;
+ if (*sval)
+ sval++;
+--
+2.1.0
+
--- /dev/null
+From b8f16556d36924cd8dc7663cb4129d7b1f3fc2be Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Wed, 22 Apr 2015 21:14:31 +0100
+Subject: [PATCH 82/98] Tweaks to previous, DNS label charset commit.
+
+---
+ src/dns-protocol.h | 6 +++++-
+ src/dnssec.c | 9 ++++++---
+ src/rfc1035.c | 25 ++++++++++++++++++-------
+ src/util.c | 2 +-
+ 4 files changed, 30 insertions(+), 12 deletions(-)
+
+diff --git a/src/dns-protocol.h b/src/dns-protocol.h
+index 7f5d686bb150..4b71746f8d26 100644
+--- a/src/dns-protocol.h
++++ b/src/dns-protocol.h
+@@ -144,5 +144,9 @@ struct dns_header {
+ (!CHECK_LEN(header, pp, plen, len) ? 0 : (((pp) += (len)), 1))
+
+ /* Escape character in our presentation format for names.
+- Cannot be '.' or /000 and must be !isprint() */
++ Cannot be '.' or /000 and must be !isprint().
++ Note that escaped chars are stored as
++ <NAME_ESCAPE> <orig-char+1>
++ to ensure that the escaped form of /000 doesn't include /000
++*/
+ #define NAME_ESCAPE 1
+diff --git a/src/dnssec.c b/src/dnssec.c
+index c116a7b5f6f4..a9e12153ccf2 100644
+--- a/src/dnssec.c
++++ b/src/dnssec.c
+@@ -341,9 +341,11 @@ static int to_wire(char *name)
+ if (*p >= 'A' && *p <= 'Z')
+ *p = *p - 'A' + 'a';
+ else if (*p == NAME_ESCAPE)
+- for (q = p; *q; q++)
++ {
++ for (q = p; *q; q++)
+ *q = *(q+1);
+-
++ (*p)--;
++ }
+ term = *p;
+
+ if ((len = p - l) != 0)
+@@ -376,7 +378,8 @@ static void from_wire(char *name)
+ {
+ memmove(p+1, p, 1 + last - p);
+ len++;
+- *p++ = NAME_ESCAPE;
++ *p++ = NAME_ESCAPE;
++ (*p)++;
+ }
+
+ l[len] = '.';
+diff --git a/src/rfc1035.c b/src/rfc1035.c
+index 19fecc818c06..32df31ad603c 100644
+--- a/src/rfc1035.c
++++ b/src/rfc1035.c
+@@ -20,7 +20,7 @@ int extract_name(struct dns_header *header, size_t plen, unsigned char **pp,
+ char *name, int isExtract, int extrabytes)
+ {
+ unsigned char *cp = (unsigned char *)name, *p = *pp, *p1 = NULL;
+- unsigned int j, l, hops = 0;
++ unsigned int j, l, namelen = 0, hops = 0;
+ int retvalue = 1;
+
+ if (isExtract)
+@@ -94,9 +94,15 @@ int extract_name(struct dns_header *header, size_t plen, unsigned char **pp,
+ count = 256;
+ digs = ((count-1)>>2)+1;
+
+- /* output is \[x<hex>/siz]. which is digs+9 chars */
+- if (cp - (unsigned char *)name + digs + 9 >= MAXDNAME)
++ /* output is \[x<hex>/siz]. which is digs+6/7/8 chars */
++ namelen += digs+6;
++ if (count > 9)
++ namelen++;
++ if (count > 99)
++ namelen++;
++ if (namelen+1 >= MAXDNAME)
+ return 0;
++
+ if (!CHECK_LEN(header, p, plen, (count-1)>>3))
+ return 0;
+
+@@ -119,7 +125,8 @@ int extract_name(struct dns_header *header, size_t plen, unsigned char **pp,
+ }
+ else
+ { /* label_type = 0 -> label. */
+- if (cp - (unsigned char *)name + l + 1 >= MAXDNAME)
++ namelen += l;
++ if (namelen+1 >= MAXDNAME)
+ return 0;
+ if (!CHECK_LEN(header, p, plen, l))
+ return 0;
+@@ -132,8 +139,12 @@ int extract_name(struct dns_header *header, size_t plen, unsigned char **pp,
+ if (option_bool(OPT_DNSSEC_VALID))
+ {
+ if (c == 0 || c == '.' || c == NAME_ESCAPE)
+- *cp++ = NAME_ESCAPE;
+- *cp++ = c;
++ {
++ *cp++ = NAME_ESCAPE;
++ *cp++ = c+1;
++ }
++ else
++ *cp++ = c;
+ }
+ else
+ #endif
+@@ -155,7 +166,7 @@ int extract_name(struct dns_header *header, size_t plen, unsigned char **pp,
+ c1 += 'a' - 'A';
+ #ifdef HAVE_DNSSEC
+ if (option_bool(OPT_DNSSEC_VALID) && c1 == NAME_ESCAPE)
+- c1 = *cp++;
++ c1 = (*cp++)-1;
+ #endif
+
+ if (c2 >= 'A' && c2 <= 'Z')
+diff --git a/src/util.c b/src/util.c
+index 0c1a48b4700a..9299703c6d30 100644
+--- a/src/util.c
++++ b/src/util.c
+@@ -229,7 +229,7 @@ unsigned char *do_rfc1035_name(unsigned char *p, char *sval)
+ {
+ #ifdef HAVE_DNSSEC
+ if (option_bool(OPT_DNSSEC_VALID) && *sval == NAME_ESCAPE)
+- *p++ = *(++sval);
++ *p++ = (*(++sval))-1;
+ else
+ #endif
+ *p++ = *sval;
+--
+2.1.0
+
--- /dev/null
+From a5ae1f85873829efe473075ad77806cc02792622 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sat, 25 Apr 2015 21:46:10 +0100
+Subject: [PATCH 83/98] Logs in DHCPv6 not suppressed by dhcp6-quiet.
+
+---
+ CHANGELOG | 6 +++++-
+ src/rfc3315.c | 4 ++--
+ 2 files changed, 7 insertions(+), 3 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 7f2b1e002e9e..af2b22cf8f73 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -103,7 +103,11 @@ version 2.73
+ Previously we provided correct answers to PTR queries
+ in such zones (including NS and SOA) but not direct
+ NS and SOA queries. Thanks to Johnny S. Lee for
+- pointing out the problem.
++ pointing out the problem.
++
++ Fix logging of DHCPREPLY which should be suppressed
++ by quiet-dhcp6. Thanks to J. Pablo Abonia for
++ spotting the problem.
+
+
+ version 2.72
+diff --git a/src/rfc3315.c b/src/rfc3315.c
+index c45116a40a09..b4f5dd2db61f 100644
+--- a/src/rfc3315.c
++++ b/src/rfc3315.c
+@@ -1047,9 +1047,9 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
+ {
+ preferred_time = valid_time = 0;
+ message = _("address invalid");
+- }
++ }
+
+- if (message)
++ if (message && (message != state->hostname))
+ log6_packet(state, "DHCPREPLY", req_addr, message);
+ else
+ log6_quiet(state, "DHCPREPLY", req_addr, message);
+--
+2.1.0
+
--- /dev/null
+From 8efd731cc4ed2baa42aa69d0a9d336392e9987cb Mon Sep 17 00:00:00 2001
+From: "Johnny S. Lee" <_@jsl.io>
+Date: Sun, 26 Apr 2015 22:23:57 +0100
+Subject: [PATCH 84/98] Make get-version work when repo is a git submodule.
+
+---
+ bld/get-version | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/bld/get-version b/bld/get-version
+index 7ab75db729ac..5372869c0852 100755
+--- a/bld/get-version
++++ b/bld/get-version
+@@ -11,8 +11,9 @@
+ # If there is more than one v[0-9].* tag, sort them and use the
+ # first. This favours, eg v2.63 over 2.63rc6.
+
+-if which git >/dev/null 2>&1 && [ -d $1/.git ]; then
+- cd $1; git describe | sed 's/^v//'
++if which git >/dev/null 2>&1 && \
++ ([ -d $1/.git ] || grep '^gitdir:' $1/.git >/dev/null 2>&1); then
++ cd $1; git describe | sed 's/^v//'
+ elif grep '\$Format:%d\$' $1/VERSION >/dev/null 2>&1; then
+ # unsubstituted VERSION, but no git available.
+ echo UNKNOWN
+--
+2.1.0
+
--- /dev/null
+From e66b4dff3c562c7836d5be4c26972d665ad783f1 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Tue, 28 Apr 2015 20:45:57 +0100
+Subject: [PATCH 85/98] Fix argument-order botch which broke DNSSEC for TCP
+ queries.
+
+---
+ src/forward.c | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/src/forward.c b/src/forward.c
+index 1c7da3f5655c..a8e403c4b25e 100644
+--- a/src/forward.c
++++ b/src/forward.c
+@@ -1996,8 +1996,9 @@ unsigned char *tcp_request(int confd, time_t now,
+ }
+ else
+ result = (status == STAT_SECURE ? "SECURE" : (status == STAT_INSECURE ? "INSECURE" : "BOGUS"));
+- if (status == STAT_BOGUS && extract_request(header, m, daemon->namebuff, NULL))
+- domain = daemon->namebuff;
++
++ if (status == STAT_BOGUS && extract_request(header, m, daemon->namebuff, NULL))
++ domain = daemon->namebuff;
+
+ log_query(F_KEYTAG | F_SECSTAT, domain, NULL, result);
+
+@@ -2040,8 +2041,8 @@ unsigned char *tcp_request(int confd, time_t now,
+ #endif
+
+ m = process_reply(header, now, last_server, (unsigned int)m,
+- option_bool(OPT_NO_REBIND) && !norebind, no_cache_dnssec, bogusanswer,
+- cache_secure, ad_question, do_bit, added_pheader, check_subnet, &peer_addr);
++ option_bool(OPT_NO_REBIND) && !norebind, no_cache_dnssec, cache_secure, bogusanswer,
++ ad_question, do_bit, added_pheader, check_subnet, &peer_addr);
+
+ break;
+ }
+--
+2.1.0
+
--- /dev/null
+From 2ed162ac204f3609fe4d9f9a0430baeaa352d88f Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Tue, 28 Apr 2015 21:26:35 +0100
+Subject: [PATCH 86/98] Don't remove RRSIG RR from answers to ANY queries when
+ the do bit is not set.
+
+---
+ src/rfc1035.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/src/rfc1035.c b/src/rfc1035.c
+index 32df31ad603c..5828055caa5d 100644
+--- a/src/rfc1035.c
++++ b/src/rfc1035.c
+@@ -1608,6 +1608,11 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
+ GETSHORT(qtype, p);
+ GETSHORT(qclass, p);
+
++ /* Don't filter RRSIGS from answers to ANY queries, even if do-bit
++ not set. */
++ if (qtype == T_ANY)
++ *do_bit = 1;
++
+ ans = 0; /* have we answered this question */
+
+ if (qtype == T_TXT || qtype == T_ANY)
+--
+2.1.0
+
--- /dev/null
+From 64bcff1c7c72eecda8750bc2dca8b4c5dc38a837 Mon Sep 17 00:00:00 2001
+From: Nicolas Cavallari <nicolas.cavallari@green-communications.fr>
+Date: Tue, 28 Apr 2015 21:55:18 +0100
+Subject: [PATCH 87/98] Constify some DHCP lease management functions.
+
+---
+ src/dnsmasq.h | 7 ++++---
+ src/lease.c | 8 ++++----
+ 2 files changed, 8 insertions(+), 7 deletions(-)
+
+diff --git a/src/dnsmasq.h b/src/dnsmasq.h
+index 6fe4a4189188..824a86009439 100644
+--- a/src/dnsmasq.h
++++ b/src/dnsmasq.h
+@@ -1304,9 +1304,10 @@ void lease_update_slaac(time_t now);
+ void lease_set_iaid(struct dhcp_lease *lease, int iaid);
+ void lease_make_duid(time_t now);
+ #endif
+-void lease_set_hwaddr(struct dhcp_lease *lease, unsigned char *hwaddr,
+- unsigned char *clid, int hw_len, int hw_type, int clid_len, time_t now, int force);
+-void lease_set_hostname(struct dhcp_lease *lease, char *name, int auth, char *domain, char *config_domain);
++void lease_set_hwaddr(struct dhcp_lease *lease, const unsigned char *hwaddr,
++ const unsigned char *clid, int hw_len, int hw_type,
++ int clid_len, time_t now, int force);
++void lease_set_hostname(struct dhcp_lease *lease, const char *name, int auth, char *domain, char *config_domain);
+ void lease_set_expires(struct dhcp_lease *lease, unsigned int len, time_t now);
+ void lease_set_interface(struct dhcp_lease *lease, int interface, time_t now);
+ struct dhcp_lease *lease_find_by_client(unsigned char *hwaddr, int hw_len, int hw_type,
+diff --git a/src/lease.c b/src/lease.c
+index 545bbb7fd09c..8adb60588671 100644
+--- a/src/lease.c
++++ b/src/lease.c
+@@ -813,9 +813,9 @@ void lease_set_iaid(struct dhcp_lease *lease, int iaid)
+ }
+ #endif
+
+-void lease_set_hwaddr(struct dhcp_lease *lease, unsigned char *hwaddr,
+- unsigned char *clid, int hw_len, int hw_type, int clid_len,
+- time_t now, int force)
++void lease_set_hwaddr(struct dhcp_lease *lease, const unsigned char *hwaddr,
++ const unsigned char *clid, int hw_len, int hw_type,
++ int clid_len, time_t now, int force)
+ {
+ #ifdef HAVE_DHCP6
+ int change = force;
+@@ -897,7 +897,7 @@ static void kill_name(struct dhcp_lease *lease)
+ lease->hostname = lease->fqdn = NULL;
+ }
+
+-void lease_set_hostname(struct dhcp_lease *lease, char *name, int auth, char *domain, char *config_domain)
++void lease_set_hostname(struct dhcp_lease *lease, const char *name, int auth, char *domain, char *config_domain)
+ {
+ struct dhcp_lease *lease_tmp;
+ char *new_name = NULL, *new_fqdn = NULL;
+--
+2.1.0
+
--- /dev/null
+From a77cec8d58231d71cbc26615f0c0f0292c09ef54 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Fri, 8 May 2015 16:25:38 +0100
+Subject: [PATCH 88/98] Handle UDP packet loss when fragmentation of large
+ packets is broken.
+
+---
+ CHANGELOG | 6 ++++++
+ src/config.h | 1 +
+ src/dnsmasq.h | 5 +++--
+ src/dnssec.c | 11 +++++++++--
+ src/forward.c | 37 +++++++++++++++++++++++++++++--------
+ src/network.c | 1 +
+ src/option.c | 18 +++++++++++-------
+ src/rfc1035.c | 22 ++++++----------------
+ 8 files changed, 66 insertions(+), 35 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index af2b22cf8f73..d8fc57a418bb 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -109,6 +109,12 @@ version 2.73
+ by quiet-dhcp6. Thanks to J. Pablo Abonia for
+ spotting the problem.
+
++ Try and handle net connections with broken fragmentation
++ that lose large UDP packets. If a server times out,
++ reduce the maximum UDP packet size field in the EDNS0
++ header to 1280 bytes. If it then answers, make that
++ change permanent.
++
+
+ version 2.72
+ Add ra-advrouter mode, for RFC-3775 mobile IPv6 support.
+diff --git a/src/config.h b/src/config.h
+index 8def6f200461..f75fe9db7081 100644
+--- a/src/config.h
++++ b/src/config.h
+@@ -19,6 +19,7 @@
+ #define CHILD_LIFETIME 150 /* secs 'till terminated (RFC1035 suggests > 120s) */
+ #define TCP_MAX_QUERIES 100 /* Maximum number of queries per incoming TCP connection */
+ #define EDNS_PKTSZ 4096 /* default max EDNS.0 UDP packet from RFC5625 */
++#define SAFE_PKTSZ 1280 /* "go anywhere" UDP packet size */
+ #define KEYBLOCK_LEN 40 /* choose to mininise fragmentation when storing DNSSEC keys */
+ #define DNSSEC_WORK 50 /* Max number of queries to validate one question */
+ #define TIMEOUT 10 /* drop UDP queries after TIMEOUT seconds */
+diff --git a/src/dnsmasq.h b/src/dnsmasq.h
+index 824a86009439..ab16f79b3ec9 100644
+--- a/src/dnsmasq.h
++++ b/src/dnsmasq.h
+@@ -504,7 +504,7 @@ struct server {
+ char interface[IF_NAMESIZE+1];
+ struct serverfd *sfd;
+ char *domain; /* set if this server only handles a domain. */
+- int flags, tcpfd;
++ int flags, tcpfd, edns_pktsz;
+ unsigned int queries, failed_queries;
+ #ifdef HAVE_LOOP
+ u32 uid;
+@@ -594,6 +594,7 @@ struct hostsfile {
+ #define FREC_DO_QUESTION 64
+ #define FREC_ADDED_PHEADER 128
+ #define FREC_CHECK_NOSIGN 256
++#define FREC_TEST_PKTSZ 512
+
+ #ifdef HAVE_DNSSEC
+ #define HASH_SIZE 20 /* SHA-1 digest size */
+@@ -1148,7 +1149,7 @@ int in_zone(struct auth_zone *zone, char *name, char **cut);
+ #endif
+
+ /* dnssec.c */
+-size_t dnssec_generate_query(struct dns_header *header, char *end, char *name, int class, int type, union mysockaddr *addr);
++size_t dnssec_generate_query(struct dns_header *header, char *end, char *name, int class, int type, union mysockaddr *addr, int edns_pktsz);
+ int dnssec_validate_by_ds(time_t now, struct dns_header *header, size_t n, char *name, char *keyname, int class);
+ int dnssec_validate_ds(time_t now, struct dns_header *header, size_t plen, char *name, char *keyname, int class);
+ int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, char *name, char *keyname, int *class, int *neganswer, int *nons);
+diff --git a/src/dnssec.c b/src/dnssec.c
+index a9e12153ccf2..e91d7c2cf040 100644
+--- a/src/dnssec.c
++++ b/src/dnssec.c
+@@ -2162,10 +2162,12 @@ int dnskey_keytag(int alg, int flags, unsigned char *key, int keylen)
+ }
+ }
+
+-size_t dnssec_generate_query(struct dns_header *header, char *end, char *name, int class, int type, union mysockaddr *addr)
++size_t dnssec_generate_query(struct dns_header *header, char *end, char *name, int class,
++ int type, union mysockaddr *addr, int edns_pktsz)
+ {
+ unsigned char *p;
+ char *types = querystr("dnssec-query", type);
++ size_t ret;
+
+ if (addr->sa.sa_family == AF_INET)
+ log_query(F_NOEXTRA | F_DNSSEC | F_IPV4, name, (struct all_addr *)&addr->in.sin_addr, types);
+@@ -2194,7 +2196,12 @@ size_t dnssec_generate_query(struct dns_header *header, char *end, char *name, i
+ PUTSHORT(type, p);
+ PUTSHORT(class, p);
+
+- return add_do_bit(header, p - (unsigned char *)header, end);
++ ret = add_do_bit(header, p - (unsigned char *)header, end);
++
++ if (find_pseudoheader(header, ret, NULL, &p, NULL))
++ PUTSHORT(edns_pktsz, p);
++
++ return ret;
+ }
+
+ /* Go through a domain name, find "pointers" and fix them up based on how many bytes
+diff --git a/src/forward.c b/src/forward.c
+index a8e403c4b25e..592243fd4d35 100644
+--- a/src/forward.c
++++ b/src/forward.c
+@@ -253,6 +253,7 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
+ void *hash = &crc;
+ #endif
+ unsigned int gotname = extract_request(header, plen, daemon->namebuff, NULL);
++ unsigned char *pheader;
+
+ (void)do_bit;
+
+@@ -261,19 +262,32 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
+ forward = NULL;
+ else if (forward || (hash && (forward = lookup_frec_by_sender(ntohs(header->id), udpaddr, hash))))
+ {
++ /* If we didn't get an answer advertising a maximal packet in EDNS,
++ fall back to 1280, which should work everywhere on IPv6.
++ If that generates an answer, it will become the new default
++ for this server */
++ forward->flags |= FREC_TEST_PKTSZ;
++
+ #ifdef HAVE_DNSSEC
+ /* If we've already got an answer to this query, but we're awaiting keys for validation,
+ there's no point retrying the query, retry the key query instead...... */
+ if (forward->blocking_query)
+ {
+ int fd;
+-
++
++ forward->flags &= ~FREC_TEST_PKTSZ;
++
+ while (forward->blocking_query)
+ forward = forward->blocking_query;
++
++ forward->flags |= FREC_TEST_PKTSZ;
+
+ blockdata_retrieve(forward->stash, forward->stash_len, (void *)header);
+ plen = forward->stash_len;
+
++ if (find_pseudoheader(header, plen, NULL, &pheader, NULL))
++ PUTSHORT((forward->flags & FREC_TEST_PKTSZ) ? SAFE_PKTSZ : forward->sentto->edns_pktsz, pheader);
++
+ if (forward->sentto->addr.sa.sa_family == AF_INET)
+ log_query(F_NOEXTRA | F_DNSSEC | F_IPV4, "retry", (struct all_addr *)&forward->sentto->addr.in.sin_addr, "dnssec");
+ #ifdef HAVE_IPV6
+@@ -417,7 +431,7 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
+ plen = new_plen;
+ }
+ #endif
+-
++
+ while (1)
+ {
+ /* only send to servers dealing with our domain.
+@@ -464,6 +478,9 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
+ }
+ #endif
+ }
++
++ if (find_pseudoheader(header, plen, NULL, &pheader, NULL))
++ PUTSHORT((forward->flags & FREC_TEST_PKTSZ) ? SAFE_PKTSZ : start->edns_pktsz, pheader);
+
+ if (retry_send(sendto(fd, (char *)header, plen, 0,
+ &start->addr.sa,
+@@ -760,7 +777,6 @@ void reply_query(int fd, int family, time_t now)
+ }
+
+ server = forward->sentto;
+-
+ if ((forward->sentto->flags & SERV_TYPE) == 0)
+ {
+ if (RCODE(header) == REFUSED)
+@@ -781,7 +797,12 @@ void reply_query(int fd, int family, time_t now)
+ if (!option_bool(OPT_ALL_SERVERS))
+ daemon->last_server = server;
+ }
+-
++
++ /* We tried resending to this server with a smaller maximum size and got an answer.
++ Make that permanent. */
++ if (server && (forward->flags & FREC_TEST_PKTSZ))
++ server->edns_pktsz = SAFE_PKTSZ;
++
+ /* If the answer is an error, keep the forward record in place in case
+ we get a good reply from another server. Kill it when we've
+ had replies from all to avoid filling the forwarding table when
+@@ -890,7 +911,7 @@ void reply_query(int fd, int family, time_t now)
+ {
+ new->flags |= FREC_DNSKEY_QUERY;
+ nn = dnssec_generate_query(header, ((char *) header) + daemon->packet_buff_sz,
+- daemon->keyname, forward->class, T_DNSKEY, &server->addr);
++ daemon->keyname, forward->class, T_DNSKEY, &server->addr, server->edns_pktsz);
+ }
+ else
+ {
+@@ -899,7 +920,7 @@ void reply_query(int fd, int family, time_t now)
+ else
+ new->flags |= FREC_DS_QUERY;
+ nn = dnssec_generate_query(header,((char *) header) + daemon->packet_buff_sz,
+- daemon->keyname, forward->class, T_DS, &server->addr);
++ daemon->keyname, forward->class, T_DS, &server->addr, server->edns_pktsz);
+ }
+ if ((hash = hash_questions(header, nn, daemon->namebuff)))
+ memcpy(new->hash, hash, HASH_SIZE);
+@@ -1526,7 +1547,7 @@ static int tcp_check_for_unsigned_zone(time_t now, struct dns_header *header, s
+
+ /* Can't find it in the cache, have to send a query */
+
+- m = dnssec_generate_query(header, ((char *) header) + 65536, name_start, class, T_DS, &server->addr);
++ m = dnssec_generate_query(header, ((char *) header) + 65536, name_start, class, T_DS, &server->addr, server->edns_pktsz);
+
+ *length = htons(m);
+
+@@ -1638,7 +1659,7 @@ static int tcp_key_recurse(time_t now, int status, struct dns_header *header, si
+
+ another_tcp_key:
+ m = dnssec_generate_query(new_header, ((char *) new_header) + 65536, keyname, class,
+- new_status == STAT_NEED_KEY ? T_DNSKEY : T_DS, &server->addr);
++ new_status == STAT_NEED_KEY ? T_DNSKEY : T_DS, &server->addr, server->edns_pktsz);
+
+ *length = htons(m);
+
+diff --git a/src/network.c b/src/network.c
+index 992f023c31de..a1d90c876fc1 100644
+--- a/src/network.c
++++ b/src/network.c
+@@ -1396,6 +1396,7 @@ void add_update_server(int flags,
+ serv->domain = domain_str;
+ serv->next = next;
+ serv->queries = serv->failed_queries = 0;
++ serv->edns_pktsz = daemon->edns_pktsz;
+ #ifdef HAVE_LOOP
+ serv->uid = rand32();
+ #endif
+diff --git a/src/option.c b/src/option.c
+index f91cfbb1aa54..c7add88de7ac 100644
+--- a/src/option.c
++++ b/src/option.c
+@@ -4498,15 +4498,19 @@ void read_opts(int argc, char **argv, char *compile_opts)
+ {
+ struct server *tmp;
+ for (tmp = daemon->servers; tmp; tmp = tmp->next)
+- if (!(tmp->flags & SERV_HAS_SOURCE))
+- {
+- if (tmp->source_addr.sa.sa_family == AF_INET)
+- tmp->source_addr.in.sin_port = htons(daemon->query_port);
++ {
++ tmp->edns_pktsz = daemon->edns_pktsz;
++
++ if (!(tmp->flags & SERV_HAS_SOURCE))
++ {
++ if (tmp->source_addr.sa.sa_family == AF_INET)
++ tmp->source_addr.in.sin_port = htons(daemon->query_port);
+ #ifdef HAVE_IPV6
+- else if (tmp->source_addr.sa.sa_family == AF_INET6)
+- tmp->source_addr.in6.sin6_port = htons(daemon->query_port);
++ else if (tmp->source_addr.sa.sa_family == AF_INET6)
++ tmp->source_addr.in6.sin6_port = htons(daemon->query_port);
+ #endif
+- }
++ }
++ }
+ }
+
+ if (daemon->if_addrs)
+diff --git a/src/rfc1035.c b/src/rfc1035.c
+index 5828055caa5d..8b1709dd3495 100644
+--- a/src/rfc1035.c
++++ b/src/rfc1035.c
+@@ -552,7 +552,7 @@ static size_t add_pseudoheader(struct dns_header *header, size_t plen, unsigned
+ return plen;
+ *p++ = 0; /* empty name */
+ PUTSHORT(T_OPT, p);
+- PUTSHORT(daemon->edns_pktsz, p); /* max packet length */
++ PUTSHORT(SAFE_PKTSZ, p); /* max packet length, this will be overwritten */
+ PUTSHORT(0, p); /* extended RCODE and version */
+ PUTSHORT(set_do ? 0x8000 : 0, p); /* DO flag */
+ lenp = p;
+@@ -1537,7 +1537,6 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
+ unsigned short flag;
+ int q, ans, anscount = 0, addncount = 0;
+ int dryrun = 0, sec_reqd = 0, have_pseudoheader = 0;
+- int is_sign;
+ struct crec *crecp;
+ int nxdomain = 0, auth = 1, trunc = 0, sec_data = 1;
+ struct mx_srv_record *rec;
+@@ -1557,28 +1556,19 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
+ forward rather than answering from the cache, which doesn't include
+ security information, unless we're in DNSSEC validation mode. */
+
+- if (find_pseudoheader(header, qlen, NULL, &pheader, &is_sign))
++ if (find_pseudoheader(header, qlen, NULL, &pheader, NULL))
+ {
+- unsigned short udpsz, flags;
+- unsigned char *psave = pheader;
+-
++ unsigned short flags;
++
+ have_pseudoheader = 1;
+
+- GETSHORT(udpsz, pheader);
+- pheader += 2; /* ext_rcode */
++ pheader += 4; /* udp size, ext_rcode */
+ GETSHORT(flags, pheader);
+
+ if ((sec_reqd = flags & 0x8000))
+ *do_bit = 1;/* do bit */
+- *ad_reqd = 1;
+-
+- /* If our client is advertising a larger UDP packet size
+- than we allow, trim it so that we don't get an overlarge
+- response from upstream */
+-
+- if (!is_sign && (udpsz > daemon->edns_pktsz))
+- PUTSHORT(daemon->edns_pktsz, psave);
+
++ *ad_reqd = 1;
+ dryrun = 1;
+ }
+
+--
+2.1.0
+
--- /dev/null
+From b059c96dc69dfe3055c5b32b078a05c53b11ebb3 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Fri, 8 May 2015 20:25:51 +0100
+Subject: [PATCH 89/98] Check IPv4-mapped IPv6 addresses with --stop-rebind.
+
+---
+ CHANGELOG | 3 +++
+ src/rfc1035.c | 21 +++++++++++++++++----
+ 2 files changed, 20 insertions(+), 4 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index d8fc57a418bb..94a521f996e2 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -115,6 +115,9 @@ version 2.73
+ header to 1280 bytes. If it then answers, make that
+ change permanent.
+
++ Check IPv4-mapped IPv6 addresses when --stop-rebind
++ is active. Thanks to Jordan Milne for spotting this.
++
+
+ version 2.72
+ Add ra-advrouter mode, for RFC-3775 mobile IPv6 support.
+diff --git a/src/rfc1035.c b/src/rfc1035.c
+index 8b1709dd3495..5e3f566fdbc5 100644
+--- a/src/rfc1035.c
++++ b/src/rfc1035.c
+@@ -1117,10 +1117,23 @@ int extract_addresses(struct dns_header *header, size_t qlen, char *name, time_t
+ memcpy(&addr, p1, addrlen);
+
+ /* check for returned address in private space */
+- if (check_rebind &&
+- (flags & F_IPV4) &&
+- private_net(addr.addr.addr4, !option_bool(OPT_LOCAL_REBIND)))
+- return 1;
++ if (check_rebind)
++ {
++ if ((flags & F_IPV4) &&
++ private_net(addr.addr.addr4, !option_bool(OPT_LOCAL_REBIND)))
++ return 1;
++
++#ifdef HAVE_IPV6
++ if ((flags & F_IPV6) &&
++ IN6_IS_ADDR_V4MAPPED(&addr.addr.addr6))
++ {
++ struct in_addr v4;
++ v4.s_addr = ((const uint32_t *) (&addr.addr.addr6))[3];
++ if (private_net(v4, !option_bool(OPT_LOCAL_REBIND)))
++ return 1;
++ }
++#endif
++ }
+
+ #ifdef HAVE_IPSET
+ if (ipsets && (flags & (F_IPV4 | F_IPV6)))
+--
+2.1.0
+
--- /dev/null
+From 86fa1046920dedc8134136a6244ca96e8a37e9d8 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sun, 10 May 2015 13:50:59 +0100
+Subject: [PATCH 90/98] Tweak EDNS timeout code.
+
+---
+ src/forward.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/src/forward.c b/src/forward.c
+index 592243fd4d35..74e5ab66c423 100644
+--- a/src/forward.c
++++ b/src/forward.c
+@@ -799,8 +799,10 @@ void reply_query(int fd, int family, time_t now)
+ }
+
+ /* We tried resending to this server with a smaller maximum size and got an answer.
+- Make that permanent. */
+- if (server && (forward->flags & FREC_TEST_PKTSZ))
++ Make that permanent. To avoid reduxing the packet size for an single dropped packet,
++ only do this when we get a truncated answer, or one larger than the safe size. */
++ if (server && (forward->flags & FREC_TEST_PKTSZ) &&
++ ((header->hb3 & HB3_TC) || n >= SAFE_PKTSZ))
+ server->edns_pktsz = SAFE_PKTSZ;
+
+ /* If the answer is an error, keep the forward record in place in case
+--
+2.1.0
+
--- /dev/null
+From 585840b03365372679907f175b07a01c9d621ae0 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Wed, 13 May 2015 12:35:57 +0100
+Subject: [PATCH 91/98] Pointer to mail-archive mailing list mirror in
+ doc.html.
+
+---
+ doc.html | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/doc.html b/doc.html
+index 92c9d0d6f34c..54f59bbbd4d0 100644
+--- a/doc.html
++++ b/doc.html
+@@ -74,7 +74,9 @@ for details.
+ There is a dnsmasq mailing list at <A
+ HREF="http://lists.thekelleys.org.uk/mailman/listinfo/dnsmasq-discuss">
+ http://lists.thekelleys.org.uk/mailman/listinfo/dnsmasq-discuss</A> which should be the
+-first location for queries, bugreports, suggestions etc.
++first location for queries, bugreports, suggestions etc. The list is mirrored, with a
++search facility, at <A HREF="https://www.mail-archive.com/dnsmasq-discuss@lists.thekelleys.org.uk/">
++https://www.mail-archive.com/dnsmasq-discuss@lists.thekelleys.org.uk/</A>.
+ You can contact me at <A
+ HREF="mailto:simon@thekelleys.org.uk">simon@thekelleys.org.uk</A>.
+
+--
+2.1.0
+
--- /dev/null
+From ca85a28241ef87919d68d52c843b6964b7070e11 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Wed, 13 May 2015 22:33:04 +0100
+Subject: [PATCH 92/98] Allow T1 and T2 DHCPv4 options to be set.
+
+---
+ CHANGELOG | 3 +++
+ dnsmasq.conf.example | 8 ++++++
+ src/dhcp-common.c | 4 +--
+ src/rfc2131.c | 71 ++++++++++++++++++++++++++++++++++++----------------
+ 4 files changed, 63 insertions(+), 23 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 94a521f996e2..ef39a415788b 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -118,6 +118,9 @@ version 2.73
+ Check IPv4-mapped IPv6 addresses when --stop-rebind
+ is active. Thanks to Jordan Milne for spotting this.
+
++ Allow DHCPv4 options T1 and T2 to be set using --dhcp-option.
++ Thanks to Kevin Benton for patches and work on this.
++
+
+ version 2.72
+ Add ra-advrouter mode, for RFC-3775 mobile IPv6 support.
+diff --git a/dnsmasq.conf.example b/dnsmasq.conf.example
+index 67be99acb028..1ae11dfb5358 100644
+--- a/dnsmasq.conf.example
++++ b/dnsmasq.conf.example
+@@ -345,6 +345,14 @@
+ # Ask client to poll for option changes every six hours. (RFC4242)
+ #dhcp-option=option6:information-refresh-time,6h
+
++# Set option 58 client renewal time (T1). Defaults to half of the
++# lease time if not specified. (RFC2132)
++#dhcp-option=option:T1:1m
++
++# Set option 59 rebinding time (T2). Defaults to 7/8 of the
++# lease time if not specified. (RFC2132)
++#dhcp-option=option:T2:2m
++
+ # Set the NTP time server address to be the same machine as
+ # is running dnsmasq
+ #dhcp-option=42,0.0.0.0
+diff --git a/src/dhcp-common.c b/src/dhcp-common.c
+index ce115202a646..bc48f41a14d7 100644
+--- a/src/dhcp-common.c
++++ b/src/dhcp-common.c
+@@ -545,8 +545,8 @@ static const struct opttab_t {
+ { "parameter-request", 55, OT_INTERNAL },
+ { "message", 56, OT_INTERNAL },
+ { "max-message-size", 57, OT_INTERNAL },
+- { "T1", 58, OT_INTERNAL | OT_TIME},
+- { "T2", 59, OT_INTERNAL | OT_TIME},
++ { "T1", 58, OT_TIME},
++ { "T2", 59, OT_TIME},
+ { "vendor-class", 60, 0 },
+ { "client-id", 61, OT_INTERNAL },
+ { "nis+-domain", 64, OT_NAME },
+diff --git a/src/rfc2131.c b/src/rfc2131.c
+index 55526443dc84..a10e499ef768 100644
+--- a/src/rfc2131.c
++++ b/src/rfc2131.c
+@@ -52,7 +52,9 @@ static void do_options(struct dhcp_context *context,
+ int null_term, int pxearch,
+ unsigned char *uuid,
+ int vendor_class_len,
+- time_t now);
++ time_t now,
++ unsigned int lease_time,
++ unsigned short fuzz);
+
+
+ static void match_vendor_opts(unsigned char *opt, struct dhcp_opt *dopt);
+@@ -610,7 +612,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
+
+ clear_packet(mess, end);
+ do_options(context, mess, end, NULL, hostname, get_domain(mess->yiaddr),
+- netid, subnet_addr, 0, 0, -1, NULL, vendor_class_len, now);
++ netid, subnet_addr, 0, 0, -1, NULL, vendor_class_len, now, 0xffffffff, 0);
+ }
+ }
+
+@@ -1042,13 +1044,8 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
+ option_put(mess, end, OPTION_SERVER_IDENTIFIER, INADDRSZ, ntohl(server_id(context, override, fallback).s_addr));
+ option_put(mess, end, OPTION_LEASE_TIME, 4, time);
+ /* T1 and T2 are required in DHCPOFFER by HP's wacky Jetdirect client. */
+- if (time != 0xffffffff)
+- {
+- option_put(mess, end, OPTION_T1, 4, (time/2));
+- option_put(mess, end, OPTION_T2, 4, (time*7)/8);
+- }
+ do_options(context, mess, end, req_options, offer_hostname, get_domain(mess->yiaddr),
+- netid, subnet_addr, fqdn_flags, borken_opt, pxearch, uuid, vendor_class_len, now);
++ netid, subnet_addr, fqdn_flags, borken_opt, pxearch, uuid, vendor_class_len, now, time, fuzz);
+
+ return dhcp_packet_size(mess, agent_id, real_end);
+
+@@ -1367,15 +1364,8 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
+ option_put(mess, end, OPTION_MESSAGE_TYPE, 1, DHCPACK);
+ option_put(mess, end, OPTION_SERVER_IDENTIFIER, INADDRSZ, ntohl(server_id(context, override, fallback).s_addr));
+ option_put(mess, end, OPTION_LEASE_TIME, 4, time);
+- if (time != 0xffffffff)
+- {
+- while (fuzz > (time/16))
+- fuzz = fuzz/2;
+- option_put(mess, end, OPTION_T1, 4, (time/2) - fuzz);
+- option_put(mess, end, OPTION_T2, 4, ((time/8)*7) - fuzz);
+- }
+ do_options(context, mess, end, req_options, hostname, get_domain(mess->yiaddr),
+- netid, subnet_addr, fqdn_flags, borken_opt, pxearch, uuid, vendor_class_len, now);
++ netid, subnet_addr, fqdn_flags, borken_opt, pxearch, uuid, vendor_class_len, now, time, fuzz);
+ }
+
+ return dhcp_packet_size(mess, agent_id, real_end);
+@@ -1440,7 +1430,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
+ }
+
+ do_options(context, mess, end, req_options, hostname, get_domain(mess->ciaddr),
+- netid, subnet_addr, fqdn_flags, borken_opt, pxearch, uuid, vendor_class_len, now);
++ netid, subnet_addr, fqdn_flags, borken_opt, pxearch, uuid, vendor_class_len, now, 0xffffffff, 0);
+
+ *is_inform = 1; /* handle reply differently */
+ return dhcp_packet_size(mess, agent_id, real_end);
+@@ -2137,7 +2127,9 @@ static void do_options(struct dhcp_context *context,
+ int null_term, int pxe_arch,
+ unsigned char *uuid,
+ int vendor_class_len,
+- time_t now)
++ time_t now,
++ unsigned int lease_time,
++ unsigned short fuzz)
+ {
+ struct dhcp_opt *opt, *config_opts = daemon->dhcp_opts;
+ struct dhcp_boot *boot;
+@@ -2261,7 +2253,42 @@ static void do_options(struct dhcp_context *context,
+ /* rfc3011 says this doesn't need to be in the requested options list. */
+ if (subnet_addr.s_addr)
+ option_put(mess, end, OPTION_SUBNET_SELECT, INADDRSZ, ntohl(subnet_addr.s_addr));
+-
++
++ if (lease_time != 0xffffffff)
++ {
++ unsigned int t1val = lease_time/2;
++ unsigned int t2val = (lease_time*7)/8;
++ unsigned int hval;
++
++ /* If set by user, sanity check, so not longer than lease. */
++ if ((opt = option_find2(OPTION_T1)))
++ {
++ hval = ntohl(*((unsigned int *)opt->val));
++ if (hval < lease_time && hval > 2)
++ t1val = hval;
++ }
++
++ if ((opt = option_find2(OPTION_T2)))
++ {
++ hval = ntohl(*((unsigned int *)opt->val));
++ if (hval < lease_time && hval > 2)
++ t2val = hval;
++ }
++
++ while (fuzz > (t1val/8))
++ fuzz = fuzz/2;
++
++ t1val -= fuzz;
++ t2val -= fuzz;
++
++ /* ensure T1 is still < T2 */
++ if (t2val <= t1val)
++ t1val = t2val - 1;
++
++ option_put(mess, end, OPTION_T1, 4, t1val);
++ option_put(mess, end, OPTION_T2, 4, t2val);
++ }
++
+ /* replies to DHCPINFORM may not have a valid context */
+ if (context)
+ {
+@@ -2356,12 +2383,14 @@ static void do_options(struct dhcp_context *context,
+ if (!(opt->flags & DHOPT_FORCE) && !in_list(req_options, optno))
+ continue;
+
+- /* prohibit some used-internally options */
++ /* prohibit some used-internally options. T1 and T2 already handled. */
+ if (optno == OPTION_CLIENT_FQDN ||
+ optno == OPTION_MAXMESSAGE ||
+ optno == OPTION_OVERLOAD ||
+ optno == OPTION_PAD ||
+- optno == OPTION_END)
++ optno == OPTION_END ||
++ optno == OPTION_T1 ||
++ optno == OPTION_T2)
+ continue;
+
+ if (optno == OPTION_SNAME && done_server)
+--
+2.1.0
+
--- /dev/null
+From 7c0f2543a7e761d1ec82738374556beeb8a35bef Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Thu, 14 May 2015 21:16:18 +0100
+Subject: [PATCH 93/98] Tweak last commit.
+
+---
+ src/rfc2131.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/src/rfc2131.c b/src/rfc2131.c
+index a10e499ef768..b95f9beadf59 100644
+--- a/src/rfc2131.c
++++ b/src/rfc2131.c
+@@ -2275,16 +2275,16 @@ static void do_options(struct dhcp_context *context,
+ t2val = hval;
+ }
+
++ /* ensure T1 is still < T2 */
++ if (t2val <= t1val)
++ t1val = t2val - 1;
++
+ while (fuzz > (t1val/8))
+ fuzz = fuzz/2;
+
+ t1val -= fuzz;
+ t2val -= fuzz;
+
+- /* ensure T1 is still < T2 */
+- if (t2val <= t1val)
+- t1val = t2val - 1;
+-
+ option_put(mess, end, OPTION_T1, 4, t1val);
+ option_put(mess, end, OPTION_T2, 4, t2val);
+ }
+--
+2.1.0
+
--- /dev/null
+From 62018e1f720fa11e83879111a4b1b3753b5c25bb Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Thu, 14 May 2015 21:30:00 +0100
+Subject: [PATCH 94/98] Use correct DHCP context for PXE-proxy server-id.
+
+---
+ src/rfc2131.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/rfc2131.c b/src/rfc2131.c
+index b95f9beadf59..70d1e59530ad 100644
+--- a/src/rfc2131.c
++++ b/src/rfc2131.c
+@@ -888,10 +888,10 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
+
+ option_put(mess, end, OPTION_MESSAGE_TYPE, 1,
+ mess_type == DHCPDISCOVER ? DHCPOFFER : DHCPACK);
+- option_put(mess, end, OPTION_SERVER_IDENTIFIER, INADDRSZ, htonl(context->local.s_addr));
++ option_put(mess, end, OPTION_SERVER_IDENTIFIER, INADDRSZ, htonl(tmp->local.s_addr));
+ pxe_misc(mess, end, uuid);
+ prune_vendor_opts(tagif_netid);
+- do_encap_opts(pxe_opts(pxearch, tagif_netid, context->local, now), OPTION_VENDOR_CLASS_OPT, DHOPT_VENDOR_MATCH, mess, end, 0);
++ do_encap_opts(pxe_opts(pxearch, tagif_netid, tmp->local, now), OPTION_VENDOR_CLASS_OPT, DHOPT_VENDOR_MATCH, mess, end, 0);
+
+ log_packet("PXE", NULL, emac, emac_len, iface_name, ignore ? "proxy-ignored" : "proxy", NULL, mess->xid);
+ log_tags(tagif_netid, ntohl(mess->xid));
+--
+2.1.0
+
--- /dev/null
+From 5d07d77e75e0f02bc0a8f6029ffbc8b371fa804e Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Fri, 15 May 2015 18:13:06 +0100
+Subject: [PATCH 95/98] Fix buffer overflow introduced in 2.73rc6.
+
+Fix off-by-one in code which checks for over-long domain names
+in received DNS packets. This enables buffer overflow attacks
+which can certainly crash dnsmasq and may allow for arbitrary
+code execution. The problem was introduced in commit b8f16556d,
+release 2.73rc6, so has not escaped into any stable release.
+Note that the off-by-one was in the label length determination,
+so the buffer can be overflowed by as many bytes as there are
+labels in the name - ie, many.
+
+Thanks to Ron Bowes, who used lcmatuf's afl-fuzz tool to find
+the problem.
+---
+ src/rfc1035.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/src/rfc1035.c b/src/rfc1035.c
+index 5e3f566fdbc5..a95241f83523 100644
+--- a/src/rfc1035.c
++++ b/src/rfc1035.c
+@@ -94,8 +94,8 @@ int extract_name(struct dns_header *header, size_t plen, unsigned char **pp,
+ count = 256;
+ digs = ((count-1)>>2)+1;
+
+- /* output is \[x<hex>/siz]. which is digs+6/7/8 chars */
+- namelen += digs+6;
++ /* output is \[x<hex>/siz]. which is digs+7/8/9 chars */
++ namelen += digs+7;
+ if (count > 9)
+ namelen++;
+ if (count > 99)
+@@ -125,8 +125,8 @@ int extract_name(struct dns_header *header, size_t plen, unsigned char **pp,
+ }
+ else
+ { /* label_type = 0 -> label. */
+- namelen += l;
+- if (namelen+1 >= MAXDNAME)
++ namelen += l + 1; /* include period */
++ if (namelen >= MAXDNAME)
+ return 0;
+ if (!CHECK_LEN(header, p, plen, l))
+ return 0;
+--
+2.1.0
+
--- /dev/null
+From 06568c663643b9ed1577d95efee69d734f427cf5 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Fri, 15 May 2015 20:43:48 +0100
+Subject: [PATCH 96/98] Remove support for DNS Extended Label Types.
+
+The support was only partial, and the whole concept is
+now deprecated in the standards.
+---
+ src/rfc1035.c | 52 ++++------------------------------------------------
+ 1 file changed, 4 insertions(+), 48 deletions(-)
+
+diff --git a/src/rfc1035.c b/src/rfc1035.c
+index a95241f83523..56647b02ab4d 100644
+--- a/src/rfc1035.c
++++ b/src/rfc1035.c
+@@ -77,53 +77,7 @@ int extract_name(struct dns_header *header, size_t plen, unsigned char **pp,
+
+ p = l + (unsigned char *)header;
+ }
+- else if (label_type == 0x80)
+- return 0; /* reserved */
+- else if (label_type == 0x40)
+- { /* ELT */
+- unsigned int count, digs;
+-
+- if ((l & 0x3f) != 1)
+- return 0; /* we only understand bitstrings */
+-
+- if (!isExtract)
+- return 0; /* Cannot compare bitsrings */
+-
+- count = *p++;
+- if (count == 0)
+- count = 256;
+- digs = ((count-1)>>2)+1;
+-
+- /* output is \[x<hex>/siz]. which is digs+7/8/9 chars */
+- namelen += digs+7;
+- if (count > 9)
+- namelen++;
+- if (count > 99)
+- namelen++;
+- if (namelen+1 >= MAXDNAME)
+- return 0;
+-
+- if (!CHECK_LEN(header, p, plen, (count-1)>>3))
+- return 0;
+-
+- *cp++ = '\\';
+- *cp++ = '[';
+- *cp++ = 'x';
+- for (j=0; j<digs; j++)
+- {
+- unsigned int dig;
+- if (j%2 == 0)
+- dig = *p >> 4;
+- else
+- dig = *p++ & 0x0f;
+-
+- *cp++ = dig < 10 ? dig + '0' : dig + 'A' - 10;
+- }
+- cp += sprintf((char *)cp, "/%d]", count);
+- /* do this here to overwrite the zero char from sprintf */
+- *cp++ = '.';
+- }
+- else
++ else if (label_type == 0x00)
+ { /* label_type = 0 -> label. */
+ namelen += l + 1; /* include period */
+ if (namelen >= MAXDNAME)
+@@ -176,12 +130,14 @@ int extract_name(struct dns_header *header, size_t plen, unsigned char **pp,
+ retvalue = 2;
+ }
+ }
+-
++
+ if (isExtract)
+ *cp++ = '.';
+ else if (*cp != 0 && *cp++ != '.')
+ retvalue = 2;
+ }
++ else
++ return 0; /* label types 0x40 and 0x80 not supported */
+ }
+ }
+
+--
+2.1.0
+
--- /dev/null
+From 7f8565b94ca52dde31f7688a9f9a0cc611d9dae3 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Tue, 19 May 2015 23:01:27 +0100
+Subject: [PATCH 97/98] Select correct DHCP context when in PXE bootserver
+ mode.
+
+---
+ src/rfc2131.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/rfc2131.c b/src/rfc2131.c
+index 70d1e59530ad..e602a21585c9 100644
+--- a/src/rfc2131.c
++++ b/src/rfc2131.c
+@@ -805,7 +805,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
+ if (service->type == type)
+ break;
+
+- if (!service || !service->basename)
++ if (!service || !service->basename || !(context = narrow_context(context, mess->ciaddr, tagif_netid)))
+ return 0;
+
+ clear_packet(mess, end);
+--
+2.1.0
+
--- /dev/null
+From 549b1a478c5eee9dbd3a0709913a26ec29d30f2c Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Wed, 20 May 2015 20:20:24 +0100
+Subject: [PATCH 98/98] Tweak immediately previous patch.
+
+---
+ src/rfc2131.c | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/src/rfc2131.c b/src/rfc2131.c
+index e602a21585c9..9f69ed595903 100644
+--- a/src/rfc2131.c
++++ b/src/rfc2131.c
+@@ -805,9 +805,14 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
+ if (service->type == type)
+ break;
+
+- if (!service || !service->basename || !(context = narrow_context(context, mess->ciaddr, tagif_netid)))
+- return 0;
++ for (; context; context = context->current)
++ if (match_netid(context->filter, tagif_netid, 1) &&
++ is_same_net(mess->ciaddr, context->start, context->netmask))
++ break;
+
++ if (!service || !service->basename || !context)
++ return 0;
++
+ clear_packet(mess, end);
+
+ mess->yiaddr = mess->ciaddr;
+--
+2.1.0
+
+++ /dev/null
-From 800c5cc1e7438818fd80f08c2d472df249a6942d Mon Sep 17 00:00:00 2001
-From: Simon Kelley <simon@thekelleys.org.uk>
-Date: Mon, 15 Dec 2014 17:50:15 +0000
-Subject: [PATCH] Remove floor on EDNS0 packet size with DNSSEC.
-
----
- src/dnsmasq.c | 5 -----
- 1 files changed, 5 deletions(-)
-
-diff --git a/src/dnsmasq.c b/src/dnsmasq.c
-index bf2e25a..5c7750d 100644
---- a/src/dnsmasq.c
-+++ b/src/dnsmasq.c
-@@ -87,11 +87,6 @@ int main (int argc, char **argv)
-
- if (daemon->edns_pktsz < PACKETSZ)
- daemon->edns_pktsz = PACKETSZ;
--#ifdef HAVE_DNSSEC
-- /* Enforce min packet big enough for DNSSEC */
-- if (option_bool(OPT_DNSSEC_VALID) && daemon->edns_pktsz < EDNS_PKTSZ)
-- daemon->edns_pktsz = EDNS_PKTSZ;
--#endif
-
- daemon->packet_buff_sz = daemon->edns_pktsz > DNSMASQ_PACKETSZ ?
- daemon->edns_pktsz : DNSMASQ_PACKETSZ;
---
-1.7.10.4
-
--- /dev/null
+diff -Naur dracut-038.org/modules.d/90kernel-modules/module-setup.sh dracut-038/modules.d/90kernel-modules/module-setup.sh
+--- dracut-038.org/modules.d/90kernel-modules/module-setup.sh 2014-06-30 12:03:12.000000000 +0200
++++ dracut-038/modules.d/90kernel-modules/module-setup.sh 2015-05-05 14:58:56.820197839 +0200
+@@ -47,7 +47,7 @@
+ atkbd i8042 usbhid hid-apple hid-sunplus hid-cherry hid-logitech \
+ hid-logitech-dj hid-microsoft firewire-ohci \
+ pcmcia usb_storage nvme hid-hyperv hv-vmbus \
+- sdhci_acpi
++ sdhci_acpi sdhci_pci
+
+ if [[ "$(uname -p)" == arm* ]]; then
+ # arm specific modules
--- /dev/null
+From edacae4b2cdc41f1c0bfc93e041532ff6c49f60c Mon Sep 17 00:00:00 2001
+From: Michael Tremer <michael.tremer@ipfire.org>
+Date: Tue, 17 Mar 2015 22:19:17 +0100
+Subject: [PATCH] Add an other forbidden string: "Serial"
+
+---
+ src/fireinfo/system.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/fireinfo/system.py b/src/fireinfo/system.py
+index daf77b399d20..9d7872822b85 100644
+--- a/src/fireinfo/system.py
++++ b/src/fireinfo/system.py
+@@ -45,7 +45,7 @@ INVALID_ID_STRINGS = (
+ "EVAL",
+ "Not Applicable",
+ "None", "empty",
+- "System Serial Number",
++ "Serial", "System Serial Number",
+ "XXXXX",
+ "01010101-0101-0101-0101-010101010101",
+ "00020003-0004-0005-0006-000700080009",
+--
+2.1.0
+
--- /dev/null
+From c667589410912ca980a78f417e86dd6585d58f9a Mon Sep 17 00:00:00 2001
+From: Michael Tremer <michael.tremer@ipfire.org>
+Date: Mon, 4 May 2015 16:00:31 +0200
+Subject: [PATCH] Skip search for hypervisor name when the CPU string is empty
+
+---
+ src/_fireinfo/fireinfo.c | 11 ++++++-----
+ 1 file changed, 6 insertions(+), 5 deletions(-)
+
+diff --git a/src/_fireinfo/fireinfo.c b/src/_fireinfo/fireinfo.c
+index fc639d9d4cd9..6601c21a733f 100644
+--- a/src/_fireinfo/fireinfo.c
++++ b/src/_fireinfo/fireinfo.c
+@@ -156,11 +156,12 @@ int detect_hypervisor(int *hypervisor) {
+
+ *hypervisor = HYPER_OTHER;
+
+- int id;
+- for (id = HYPER_NONE + 1; id < HYPER_LAST; id++) {
+- if (strcmp(hypervisor_ids[id], sig.text) == 0) {
+- *hypervisor = id;
+- break;
++ if (*sig.text) {
++ for (int id = HYPER_NONE + 1; id < HYPER_LAST; id++) {
++ if (strcmp(hypervisor_ids[id], sig.text) == 0) {
++ *hypervisor = id;
++ break;
++ }
+ }
+ }
+
+--
+2.1.0
+
+++ /dev/null
-From a9401d9542fae575d9ce2bb534cd4e598e9c7b8e Mon Sep 17 00:00:00 2001
-From: Michael Tremer <michael.tremer@ipfire.org>
-Date: Tue, 28 Oct 2014 21:14:41 +0100
-Subject: [PATCH 1/3] bogomips: Don't crash when no bogomips are available
-
-The RPi doesn't provide bogomips in /proc/cpuinfo any more
-and fireinfo crashed when trying to read that file
----
- src/fireinfo/cpu.py | 14 +++++++++-----
- src/fireinfo/system.py | 4 +++-
- 2 files changed, 12 insertions(+), 6 deletions(-)
-
-diff --git a/src/fireinfo/cpu.py b/src/fireinfo/cpu.py
-index 32d885db8124..541575af6bbb 100644
---- a/src/fireinfo/cpu.py
-+++ b/src/fireinfo/cpu.py
-@@ -80,12 +80,16 @@ class CPU(object):
- """
- Return the bogomips of this CPU.
- """
-- try:
-- bogomips = self.__cpuinfo["bogomips"]
-- except KeyError:
-- bogomips = self.__cpuinfo["BogoMIPS"]
-+ bogomips = None
-+
-+ for key in ("bogomips", "BogoMIPS"):
-+ try:
-+ bogomips = self.__cpuinfo[key]
-+ except KeyError:
-+ continue
-
-- return float(bogomips)
-+ if bogomips:
-+ return float(bogomips)
-
- @property
- def model(self):
-diff --git a/src/fireinfo/system.py b/src/fireinfo/system.py
-index 8e903e8e3449..890f58c05027 100644
---- a/src/fireinfo/system.py
-+++ b/src/fireinfo/system.py
-@@ -144,12 +144,14 @@ class System(object):
- "model_string" : self.cpu.model_string,
- "stepping" : self.cpu.stepping,
- "flags" : self.cpu.flags,
-- "bogomips" : self.cpu.bogomips,
- "speed" : self.cpu.speed,
- "family" : self.cpu.family,
- "count" : self.cpu.count
- }
-
-+ if self.cpu.bogomips:
-+ p["bogomips"] = self.cpu.bogomips
-+
- p["network"] = {
- "green" : self.network.has_green(),
- "blue" : self.network.has_blue(),
---
-1.9.3
-
+++ /dev/null
-From b9a068e26261007d4a0592fcb47f82658af2c775 Mon Sep 17 00:00:00 2001
-From: Michael Tremer <michael.tremer@ipfire.org>
-Date: Mon, 3 Nov 2014 21:33:45 +0100
-Subject: [PATCH 2/3] ARM: Read board model from device-tree in /proc
-
----
- src/fireinfo/system.py | 35 +++++++++--------------------------
- 1 file changed, 9 insertions(+), 26 deletions(-)
-
-diff --git a/src/fireinfo/system.py b/src/fireinfo/system.py
-index 890f58c05027..195832e9f7eb 100644
---- a/src/fireinfo/system.py
-+++ b/src/fireinfo/system.py
-@@ -304,27 +304,6 @@ class System(object):
- """
- return read_from_file("/sys/class/dmi/id/bios_vendor")
-
-- def vendor_model_tuple(self):
-- try:
-- s = self.__cpuinfo["Hardware"]
-- except KeyError:
-- return (None, None)
--
-- if s.startswith("ARM-Versatile"):
-- return ("ARM", s)
--
-- try:
-- v, m = s.split(" ", 1)
-- except ValueError:
-- if s.startswith("BCM"):
-- v = "Broadcom"
-- m = s
-- else:
-- v = None
-- m = s
--
-- return v, m
--
- @property
- def vendor(self):
- """
-@@ -337,8 +316,10 @@ class System(object):
- break
-
- if ret is None:
-- v, m = self.vendor_model_tuple()
-- ret = v
-+ try:
-+ return self.__cpuinfo["Hardware"]
-+ except KeyError:
-+ pass
-
- return ret
-
-@@ -353,9 +334,11 @@ class System(object):
- if ret:
- break
-
-- if ret is None:
-- v, m = self.vendor_model_tuple()
-- ret = m
-+ # Read device-tree model if available
-+ ret = read_from_file("/proc/device-tree/model")
-+ if ret:
-+ # replace the NULL byte with which the DT string ends
-+ ret = ret.replace(u"\u0000", "")
-
- return ret
-
---
-1.9.3
-
+++ /dev/null
-From 810fe43289f5b003cbf80ebb1d9a79f52a767cdb Mon Sep 17 00:00:00 2001
-From: Michael Tremer <michael.tremer@ipfire.org>
-Date: Mon, 15 Dec 2014 22:48:26 +0100
-Subject: [PATCH 3/3] Revert vendor/model for ARM to old behaviour
-
----
- src/fireinfo/system.py | 33 +++++++++++++++++++++++++++++----
- 1 file changed, 29 insertions(+), 4 deletions(-)
-
-diff --git a/src/fireinfo/system.py b/src/fireinfo/system.py
-index 195832e9f7eb..ce33837af747 100644
---- a/src/fireinfo/system.py
-+++ b/src/fireinfo/system.py
-@@ -304,6 +304,27 @@ class System(object):
- """
- return read_from_file("/sys/class/dmi/id/bios_vendor")
-
-+ def vendor_model_tuple(self):
-+ try:
-+ s = self.__cpuinfo["Hardware"]
-+ except KeyError:
-+ return (None, None)
-+
-+ if s.startswith("ARM-Versatile"):
-+ return ("ARM", s)
-+
-+ try:
-+ v, m = s.split(" ", 1)
-+ except ValueError:
-+ if s.startswith("BCM"):
-+ v = "Broadcom"
-+ m = s
-+ else:
-+ v = None
-+ m = s
-+
-+ return v, m
-+
- @property
- def vendor(self):
- """
-@@ -316,10 +337,10 @@ class System(object):
- break
-
- if ret is None:
-- try:
-- return self.__cpuinfo["Hardware"]
-- except KeyError:
-- pass
-+ if os.path.exists("/proc/device-tree"):
-+ ret = self.__cpuinfo.get("Hardware", None)
-+ else:
-+ ret, m = self.vendor_model_tuple()
-
- return ret
-
-@@ -340,6 +361,10 @@ class System(object):
- # replace the NULL byte with which the DT string ends
- ret = ret.replace(u"\u0000", "")
-
-+ # Fall back to read /proc/cpuinfo
-+ if not ret:
-+ v, ret = self.vendor_model_tuple()
-+
- return ret
-
- @property
---
-1.9.3
-
--- /dev/null
+commit 48b67d71ec677d1b3168e52a68b644784cead604
+Author: Andreas Schwab <schwab@redhat.com>
+Date: Wed Sep 14 12:12:25 2011 +0200
+
+ Also relocate in dependency order when doing symbol dependency testing
+
+diff --git a/elf/rtld.c b/elf/rtld.c
+index 764140d..324d979 100644
+--- a/elf/rtld.c
++++ b/elf/rtld.c
+@@ -2027,24 +2027,21 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
+ {
+ /* We have to do symbol dependency testing. */
+ struct relocate_args args;
+- struct link_map *l;
++ unsigned int i;
+
+ args.reloc_mode = GLRO(dl_lazy) ? RTLD_LAZY : 0;
+
+- l = main_map;
+- while (l->l_next != NULL)
+- l = l->l_next;
+- do
++ i = main_map->l_searchlist.r_nlist;
++ while (i-- > 0)
+ {
++ struct link_map *l = main_map->l_initfini[i];
+ if (l != &GL(dl_rtld_map) && ! l->l_faked)
+ {
+ args.l = l;
+ _dl_receive_error (print_unresolved, relocate_doit,
+ &args);
+ }
+- l = l->l_prev;
+ }
+- while (l != NULL);
+
+ if ((GLRO(dl_debug_mask) & DL_DEBUG_PRELINK)
+ && rtld_multiple_ref)
--- /dev/null
+commit 4d653a59ffeae0f46f76a40230e2cfa9587b7e7e
+Author: Siddhesh Poyarekar <siddhesh@redhat.com>
+Date: Fri May 30 22:43:52 2014 +0530
+
+ Add mmap usage in malloc_info output
+
+ The current malloc_info xml output only has information about
+ allocations on the heap. Display information about number of mappings
+ and total mmapped size to this to complete the picture.
+
+diff -pruN a/malloc/malloc.c b/malloc/malloc.c
+--- a/malloc/malloc.c 2014-06-02 07:35:22.573256155 +0530
++++ b/malloc/malloc.c 2014-06-02 07:34:58.856257177 +0530
+@@ -6553,12 +6553,14 @@ malloc_info (int options, FILE *fp)
+ fprintf (fp,
+ "<total type=\"fast\" count=\"%zu\" size=\"%zu\"/>\n"
+ "<total type=\"rest\" count=\"%zu\" size=\"%zu\"/>\n"
++ "<total type=\"mmap\" count=\"%d\" size=\"%zu\"/>\n"
+ "<system type=\"current\" size=\"%zu\"/>\n"
+ "<system type=\"max\" size=\"%zu\"/>\n"
+ "<aspace type=\"total\" size=\"%zu\"/>\n"
+ "<aspace type=\"mprotect\" size=\"%zu\"/>\n"
+ "</malloc>\n",
+ total_nfastblocks, total_fastavail, total_nblocks, total_avail,
++ mp_.n_mmaps, mp_.mmapped_mem,
+ total_system, total_max_system,
+ total_aspace, total_aspace_mprotect);
+
--- /dev/null
+commit 028478fa40d85a73b19638dbe3f83b1acebf370c
+Author: Ulrich Drepper <drepper@gmail.com>
+Date: Thu Mar 10 12:51:33 2011 -0500
+
+ Fix copy relocations handling of unique objects.
+
+ 2011-03-06 Ulrich Drepper <drepper@gmail.com>
+
+and a part of:
+
+commit 33f85a3fb9fe432e0ebf6a3481bc2d5e29cb605f
+Author: Ulrich Drepper <drepper@gmail.com>
+Date: Thu Mar 10 03:18:21 2011 -0500
+
+ Don't run tests checking xecutable stack when SELinux is enforcing.
+
+since the latter incorrectly had a bit of the former changes.
+
+Additionally, the test case needs -lstdc++ to build.
+
+diff --git a/elf/Makefile b/elf/Makefile
+index c427679..56cb1b1 100644
+--- a/elf/Makefile
++++ b/elf/Makefile
+@@ -201,7 +201,7 @@ tests += loadtest restest1 preloadtest loadfail multiload origtest resolvfail \
+ unload3 unload4 unload5 unload6 unload7 unload8 tst-global1 order2 \
+ tst-audit1 tst-audit2 tst-audit9 \
+ tst-stackguard1 tst-addr1 tst-thrlock \
+- tst-unique1 tst-unique2
++ tst-unique1 tst-unique2 tst-unique3
+ # reldep9
+ test-srcs = tst-pathopt
+ tests-execstack-yes = tst-execstack tst-execstack-needed tst-execstack-prog
+@@ -255,6 +255,7 @@ modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \
+ order2mod1 order2mod2 order2mod3 order2mod4 \
+ tst-unique1mod1 tst-unique1mod2 \
+ tst-unique2mod1 tst-unique2mod2 \
++ tst-unique3lib tst-unique3lib2 \
+ tst-auditmod9a tst-auditmod9b
+ ifeq (yes,$(have-initfini-array))
+ modules-names += tst-array2dep tst-array5dep
+@@ -1178,6 +1179,11 @@ $(objpfx)tst-unique1.out: $(objpfx)tst-unique1mod1.so \
+ $(objpfx)tst-unique2: $(libdl) $(objpfx)tst-unique2mod1.so
+ $(objpfx)tst-unique2.out: $(objpfx)tst-unique2mod2.so
+
++LDLIBS-tst-unique3lib.so = -lstdc++
++LDLIBS-tst-unique3lib2.so = -lstdc++
++$(objpfx)tst-unique3: $(libdl) $(objpfx)tst-unique3lib.so
++$(objpfx)tst-unique3.out: $(objpfx)tst-unique3lib2.so
++
+ ifeq (yes,$(config-cflags-avx))
+ CFLAGS-tst-audit4.c += -mavx
+ CFLAGS-tst-auditmod4a.c += -mavx
+diff --git a/elf/dl-lookup.c b/elf/dl-lookup.c
+index 78c8669..874a4bb 100644
+--- a/elf/dl-lookup.c
++++ b/elf/dl-lookup.c
+@@ -364,8 +363,19 @@ do_lookup_x (const char *undef_name, uint_fast32_t new_hash,
+ if (entries[idx].hashval == new_hash
+ && strcmp (entries[idx].name, undef_name) == 0)
+ {
+- result->s = entries[idx].sym;
+- result->m = (struct link_map *) entries[idx].map;
++ if ((type_class & ELF_RTYPE_CLASS_COPY) != 0)
++ {
++ /* We possibly have to initialize the central
++ copy from the copy addressed through the
++ relocation. */
++ result->s = sym;
++ result->m = (struct link_map *) map;
++ }
++ else
++ {
++ result->s = entries[idx].sym;
++ result->m = (struct link_map *) entries[idx].map;
++ }
+ __rtld_lock_unlock_recursive (tab->lock);
+ return 1;
+ }
+diff --git a/elf/tst-unique3.cc b/elf/tst-unique3.cc
+new file mode 100644
+index 0000000..b2c9593
+--- /dev/null
++++ b/elf/tst-unique3.cc
+@@ -0,0 +1,23 @@
++#include "tst-unique3.h"
++#include <cstdio>
++#include "../dlfcn/dlfcn.h"
++
++int t = S<char>::i;
++
++int
++main (void)
++{
++ std::printf ("%d %d\n", S<char>::i, t);
++ int result = S<char>::i++ != 1 || t != 1;
++ result |= in_lib ();
++ void *d = dlopen ("$ORIGIN/tst-unique3lib2.so", RTLD_LAZY);
++ int (*fp) ();
++ if (d == NULL || (fp = (int(*)()) dlsym (d, "in_lib2")) == NULL)
++ {
++ std::printf ("failed to get symbol in_lib2\n");
++ return 1;
++ }
++ result |= fp ();
++ dlclose (d);
++ return result;
++}
+diff --git a/elf/tst-unique3.h b/elf/tst-unique3.h
+new file mode 100644
+index 0000000..716d236
+--- /dev/null
++++ b/elf/tst-unique3.h
+@@ -0,0 +1,8 @@
++// BZ 12510
++template<typename T>
++struct S
++{
++ static int i;
++};
++
++extern int in_lib (void);
+diff --git a/elf/tst-unique3lib.cc b/elf/tst-unique3lib.cc
+new file mode 100644
+index 0000000..fa8e85a
+--- /dev/null
++++ b/elf/tst-unique3lib.cc
+@@ -0,0 +1,11 @@
++#include <cstdio>
++#include "tst-unique3.h"
++template<typename T> int S<T>::i = 1;
++static int i = S<char>::i;
++
++int
++in_lib (void)
++{
++ std::printf ("in_lib: %d %d\n", S<char>::i, i);
++ return S<char>::i++ != 2 || i != 1;
++}
+diff --git a/elf/tst-unique3lib2.cc b/elf/tst-unique3lib2.cc
+new file mode 100644
+index 0000000..17d817e
+--- /dev/null
++++ b/elf/tst-unique3lib2.cc
+@@ -0,0 +1,12 @@
++#include <cstdio>
++#include "tst-unique3.h"
++
++template<typename T> int S<T>::i;
++
++extern "C"
++int
++in_lib2 ()
++{
++ std::printf ("in_lib2: %d\n", S<char>::i);
++ return S<char>::i != 3;
++}
+diff --git a/include/bits/dlfcn.h b/include/bits/dlfcn.h
+index cb4a5c2..c31a645 100644
+--- a/include/bits/dlfcn.h
++++ b/include/bits/dlfcn.h
+@@ -1,4 +1,3 @@
+ #include_next <bits/dlfcn.h>
+
+-extern void _dl_mcount_wrapper_check (void *__selfpc);
+ libc_hidden_proto (_dl_mcount_wrapper_check)
--- /dev/null
+commit 7cbcdb3699584db8913ca90f705d6337633ee10f
+Author: Siddhesh Poyarekar <siddhesh@redhat.com>
+Date: Fri Oct 25 10:22:12 2013 +0530
+
+ Fix stack overflow due to large AF_INET6 requests
+
+ Resolves #16072 (CVE-2013-4458).
+
+ This patch fixes another stack overflow in getaddrinfo when it is
+ called with AF_INET6. The AF_UNSPEC case was fixed as CVE-2013-1914,
+ but the AF_INET6 case went undetected back then.
+
+commit 91ce40854d0b7f865cf5024ef95a8026b76096f3
+Author: Florian Weimer <fweimer@redhat.com>
+Date: Fri Aug 16 09:38:52 2013 +0200
+
+ CVE-2013-4237, BZ #14699: Buffer overflow in readdir_r
+
+ * sysdeps/posix/dirstream.h (struct __dirstream): Add errcode
+ member.
+ * sysdeps/posix/opendir.c (__alloc_dir): Initialize errcode
+ member.
+ * sysdeps/posix/rewinddir.c (rewinddir): Reset errcode member.
+ * sysdeps/posix/readdir_r.c (__READDIR_R): Enforce NAME_MAX limit.
+ Return delayed error code. Remove GETDENTS_64BIT_ALIGNED
+ conditional.
+ * sysdeps/unix/sysv/linux/wordsize-64/readdir_r.c: Do not define
+ GETDENTS_64BIT_ALIGNED.
+ * sysdeps/unix/sysv/linux/i386/readdir64_r.c: Likewise.
+ * manual/filesys.texi (Reading/Closing Directory): Document
+ ENAMETOOLONG return value of readdir_r. Recommend readdir more
+ strongly.
+ * manual/conf.texi (Limits for Files): Add portability note to
+ NAME_MAX, PATH_MAX.
+ (Pathconf): Add portability note for _PC_NAME_MAX, _PC_PATH_MAX.
+
+diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c
+index e6ce4cf..8ff74b4 100644
+--- a/sysdeps/posix/getaddrinfo.c
++++ b/sysdeps/posix/getaddrinfo.c
+@@ -197,7 +197,22 @@ gaih_inet_serv (const char *servicename, const struct gaih_typeproto *tp,
+ &rc, &herrno, NULL, &localcanon)); \
+ if (rc != ERANGE || herrno != NETDB_INTERNAL) \
+ break; \
+- tmpbuf = extend_alloca (tmpbuf, tmpbuflen, 2 * tmpbuflen); \
++ if (!malloc_tmpbuf && __libc_use_alloca (alloca_used + 2 * tmpbuflen)) \
++ tmpbuf = extend_alloca_account (tmpbuf, tmpbuflen, 2 * tmpbuflen, \
++ alloca_used); \
++ else \
++ { \
++ char *newp = realloc (malloc_tmpbuf ? tmpbuf : NULL, \
++ 2 * tmpbuflen); \
++ if (newp == NULL) \
++ { \
++ result = -EAI_MEMORY; \
++ goto free_and_return; \
++ } \
++ tmpbuf = newp; \
++ malloc_tmpbuf = true; \
++ tmpbuflen = 2 * tmpbuflen; \
++ } \
+ } \
+ if (status == NSS_STATUS_SUCCESS && rc == 0) \
+ h = &th; \
+@@ -209,7 +224,8 @@ gaih_inet_serv (const char *servicename, const struct gaih_typeproto *tp,
+ { \
+ __set_h_errno (herrno); \
+ _res.options = old_res_options; \
+- return -EAI_SYSTEM; \
++ result = -EAI_SYSTEM; \
++ goto free_and_return; \
+ } \
+ if (herrno == TRY_AGAIN) \
+ no_data = EAI_AGAIN; \
+
+diff --git a/manual/conf.texi b/manual/conf.texi
+index 7eb8b36..c720063 100644
+--- a/manual/conf.texi
++++ b/manual/conf.texi
+@@ -1149,6 +1149,9 @@ typed ahead as input. @xref{I/O Queues}.
+ @comment POSIX.1
+ @deftypevr Macro int NAME_MAX
+ The uniform system limit (if any) for the length of a file name component.
++
++@strong{Portability Note:} On some systems, the GNU C Library defines
++@code{NAME_MAX}, but does not actually enforce this limit.
+ @end deftypevr
+
+ @comment limits.h
+@@ -1157,6 +1160,9 @@ including the terminating null character.
+ @deftypevr Macro int PATH_MAX
+ The uniform system limit (if any) for the length of an entire file name (that
+ is, the argument given to system calls such as @code{open}).
++
++@strong{Portability Note:} The GNU C Library does not enforce this limit
++even if @code{PATH_MAX} is defined.
+ @end deftypevr
+
+ @cindex limits, pipe buffer size
+@@ -1476,6 +1482,9 @@ Inquire about the value of @code{POSIX_REC_MIN_XFER_SIZE}.
+ Inquire about the value of @code{POSIX_REC_XFER_ALIGN}.
+ @end table
+
++@strong{Portability Note:} On some systems, the GNU C Library does not
++enforce @code{_PC_NAME_MAX} or @code{_PC_PATH_MAX} limits.
++
+ @node Utility Limits
+ @section Utility Program Capacity Limits
+
+diff --git a/manual/filesys.texi b/manual/filesys.texi
+index 1df9cf2..814c210 100644
+--- a/manual/filesys.texi
++++ b/manual/filesys.texi
+@@ -444,9 +444,9 @@ symbols are declared in the header file @file{dirent.h}.
+ @comment POSIX.1
+ @deftypefun {struct dirent *} readdir (DIR *@var{dirstream})
+ This function reads the next entry from the directory. It normally
+-returns a pointer to a structure containing information about the file.
+-This structure is statically allocated and can be rewritten by a
+-subsequent call.
++returns a pointer to a structure containing information about the
++file. This structure is associated with the @var{dirstream} handle
++and can be rewritten by a subsequent call.
+
+ @strong{Portability Note:} On some systems @code{readdir} may not
+ return entries for @file{.} and @file{..}, even though these are always
+@@ -461,19 +461,61 @@ conditions are defined for this function:
+ The @var{dirstream} argument is not valid.
+ @end table
+
+-@code{readdir} is not thread safe. Multiple threads using
+-@code{readdir} on the same @var{dirstream} may overwrite the return
+-value. Use @code{readdir_r} when this is critical.
++To distinguish between an end-of-directory condition or an error, you
++must set @code{errno} to zero before calling @code{readdir}. To avoid
++entering an infinite loop, you should stop reading from the directory
++after the first error.
++
++In POSIX.1-2008, @code{readdir} is not thread-safe. In the GNU C Library
++implementation, it is safe to call @code{readdir} concurrently on
++different @var{dirstream}s, but multiple threads accessing the same
++@var{dirstream} result in undefined behavior. @code{readdir_r} is a
++fully thread-safe alternative, but suffers from poor portability (see
++below). It is recommended that you use @code{readdir}, with external
++locking if multiple threads access the same @var{dirstream}.
+ @end deftypefun
+
+ @comment dirent.h
+ @comment GNU
+ @deftypefun int readdir_r (DIR *@var{dirstream}, struct dirent *@var{entry}, struct dirent **@var{result})
+-This function is the reentrant version of @code{readdir}. Like
+-@code{readdir} it returns the next entry from the directory. But to
+-prevent conflicts between simultaneously running threads the result is
+-not stored in statically allocated memory. Instead the argument
+-@var{entry} points to a place to store the result.
++This function is a version of @code{readdir} which performs internal
++locking. Like @code{readdir} it returns the next entry from the
++directory. To prevent conflicts between simultaneously running
++threads the result is stored inside the @var{entry} object.
++
++@strong{Portability Note:} It is recommended to use @code{readdir}
++instead of @code{readdir_r} for the following reasons:
++
++@itemize @bullet
++@item
++On systems which do not define @code{NAME_MAX}, it may not be possible
++to use @code{readdir_r} safely because the caller does not specify the
++length of the buffer for the directory entry.
++
++@item
++On some systems, @code{readdir_r} cannot read directory entries with
++very long names. If such a name is encountered, the GNU C Library
++implementation of @code{readdir_r} returns with an error code of
++@code{ENAMETOOLONG} after the final directory entry has been read. On
++other systems, @code{readdir_r} may return successfully, but the
++@code{d_name} member may not be NUL-terminated or may be truncated.
++
++@item
++POSIX-1.2008 does not guarantee that @code{readdir} is thread-safe,
++even when access to the same @var{dirstream} is serialized. But in
++current implementations (including the GNU C Library), it is safe to call
++@code{readdir} concurrently on different @var{dirstream}s, so there is
++no need to use @code{readdir_r} in most multi-threaded programs. In
++the rare case that multiple threads need to read from the same
++@var{dirstream}, it is still better to use @code{readdir} and external
++synchronization.
++
++@item
++It is expected that future versions of POSIX will obsolete
++@code{readdir_r} and mandate the level of thread safety for
++@code{readdir} which is provided by the GNU C Library and other
++implementations today.
++@end itemize
+
+ Normally @code{readdir_r} returns zero and sets @code{*@var{result}}
+ to @var{entry}. If there are no more entries in the directory or an
+@@ -481,15 +523,6 @@ error is detected, @code{readdir_r} sets @code{*@var{result}} to a
+ null pointer and returns a nonzero error code, also stored in
+ @code{errno}, as described for @code{readdir}.
+
+-@strong{Portability Note:} On some systems @code{readdir_r} may not
+-return a NUL terminated string for the file name, even when there is no
+-@code{d_reclen} field in @code{struct dirent} and the file
+-name is the maximum allowed size. Modern systems all have the
+-@code{d_reclen} field, and on old systems multi-threading is not
+-critical. In any case there is no such problem with the @code{readdir}
+-function, so that even on systems without the @code{d_reclen} member one
+-could use multiple threads by using external locking.
+-
+ It is also important to look at the definition of the @code{struct
+ dirent} type. Simply passing a pointer to an object of this type for
+ the second parameter of @code{readdir_r} might not be enough. Some
+diff --git a/sysdeps/unix/dirstream.h b/sysdeps/unix/dirstream.h
+index a7a074d..8e8570d 100644
+--- a/sysdeps/unix/dirstream.h
++++ b/sysdeps/unix/dirstream.h
+@@ -39,6 +39,8 @@ struct __dirstream
+
+ off_t filepos; /* Position of next entry to read. */
+
++ int errcode; /* Delayed error code. */
++
+ /* Directory block. */
+ char data[0] __attribute__ ((aligned (__alignof__ (void*))));
+ };
+diff --git a/sysdeps/unix/opendir.c b/sysdeps/unix/opendir.c
+index ddfc3a7..fc05b0f 100644
+--- a/sysdeps/unix/opendir.c
++++ b/sysdeps/unix/opendir.c
+@@ -231,6 +231,7 @@ __alloc_dir (int fd, bool close_fd, int flags, const struct stat64 *statp)
+ dirp->size = 0;
+ dirp->offset = 0;
+ dirp->filepos = 0;
++ dirp->errcode = 0;
+
+ return dirp;
+ }
+diff --git a/sysdeps/unix/readdir_r.c b/sysdeps/unix/readdir_r.c
+index b5a8e2e..8ed5c3f 100644
+--- a/sysdeps/unix/readdir_r.c
++++ b/sysdeps/unix/readdir_r.c
+@@ -40,6 +40,7 @@ __READDIR_R (DIR *dirp, DIRENT_TYPE *entry, DIRENT_TYPE **result)
+ DIRENT_TYPE *dp;
+ size_t reclen;
+ const int saved_errno = errno;
++ int ret;
+
+ __libc_lock_lock (dirp->lock);
+
+@@ -70,10 +71,10 @@ __READDIR_R (DIR *dirp, DIRENT_TYPE *entry, DIRENT_TYPE **result)
+ bytes = 0;
+ __set_errno (saved_errno);
+ }
++ if (bytes < 0)
++ dirp->errcode = errno;
+
+ dp = NULL;
+- /* Reclen != 0 signals that an error occurred. */
+- reclen = bytes != 0;
+ break;
+ }
+ dirp->size = (size_t) bytes;
+@@ -106,28 +107,46 @@ __READDIR_R (DIR *dirp, DIRENT_TYPE *entry, DIRENT_TYPE **result)
+ dirp->filepos += reclen;
+ #endif
+
+- /* Skip deleted files. */
++#ifdef NAME_MAX
++ if (reclen > offsetof (DIRENT_TYPE, d_name) + NAME_MAX + 1)
++ {
++ /* The record is very long. It could still fit into the
++ caller-supplied buffer if we can skip padding at the
++ end. */
++ size_t namelen = _D_EXACT_NAMLEN (dp);
++ if (namelen <= NAME_MAX)
++ reclen = offsetof (DIRENT_TYPE, d_name) + namelen + 1;
++ else
++ {
++ /* The name is too long. Ignore this file. */
++ dirp->errcode = ENAMETOOLONG;
++ dp->d_ino = 0;
++ continue;
++ }
++ }
++#endif
++
++ /* Skip deleted and ignored files. */
+ }
+ while (dp->d_ino == 0);
+
+ if (dp != NULL)
+ {
+-#ifdef GETDENTS_64BIT_ALIGNED
+- /* The d_reclen value might include padding which is not part of
+- the DIRENT_TYPE data structure. */
+- reclen = MIN (reclen, sizeof (DIRENT_TYPE));
+-#endif
+ *result = memcpy (entry, dp, reclen);
+-#ifdef GETDENTS_64BIT_ALIGNED
++#ifdef _DIRENT_HAVE_D_RECLEN
+ entry->d_reclen = reclen;
+ #endif
++ ret = 0;
+ }
+ else
+- *result = NULL;
++ {
++ *result = NULL;
++ ret = dirp->errcode;
++ }
+
+ __libc_lock_unlock (dirp->lock);
+
+- return dp != NULL ? 0 : reclen ? errno : 0;
++ return ret;
+ }
+
+ #ifdef __READDIR_R_ALIAS
+diff --git a/sysdeps/unix/rewinddir.c b/sysdeps/unix/rewinddir.c
+index 2935a8e..d4991ad 100644
+--- a/sysdeps/unix/rewinddir.c
++++ b/sysdeps/unix/rewinddir.c
+@@ -33,5 +33,6 @@ rewinddir (dirp)
+ dirp->filepos = 0;
+ dirp->offset = 0;
+ dirp->size = 0;
++ dirp->errcode = 0;
+ __libc_lock_unlock (dirp->lock);
+ }
+diff --git a/sysdeps/unix/sysv/linux/i386/readdir64_r.c b/sysdeps/unix/sysv/linux/i386/readdir64_r.c
+index 8ebbcfd..a7d114e 100644
+--- a/sysdeps/unix/sysv/linux/i386/readdir64_r.c
++++ b/sysdeps/unix/sysv/linux/i386/readdir64_r.c
+@@ -18,7 +18,6 @@
+ #define __READDIR_R __readdir64_r
+ #define __GETDENTS __getdents64
+ #define DIRENT_TYPE struct dirent64
+-#define GETDENTS_64BIT_ALIGNED 1
+
+ #include <sysdeps/unix/readdir_r.c>
+
--- /dev/null
+commit 41488498b6d9440ee66ab033808cce8323bba7ac
+Author: Florian Weimer <fweimer@redhat.com>
+Date: Wed Sep 3 19:45:43 2014 +0200
+
+ CVE-2014-6040: Crashes on invalid input in IBM gconv modules [BZ #17325]
+
+ These changes are based on the fix for BZ #14134 in commit
+ 6e230d11837f3ae7b375ea69d7905f0d18eb79e5.
+
+diff --git a/iconvdata/Makefile b/iconvdata/Makefile
+index 0a410a1..b6327d6 100644
+--- a/iconvdata/Makefile
++++ b/iconvdata/Makefile
+@@ -297,6 +297,7 @@ $(objpfx)tst-iconv7.out: $(objpfx)gconv-modules \
+ $(objpfx)iconv-test.out: run-iconv-test.sh $(objpfx)gconv-modules \
+ $(addprefix $(objpfx),$(modules.so)) \
+ $(common-objdir)/iconv/iconv_prog TESTS
++ iconv_modules="$(modules)" \
+ $(SHELL) -e $< $(common-objdir) > $@
+
+ $(objpfx)tst-tables.out: tst-tables.sh $(objpfx)gconv-modules \
+diff --git a/iconvdata/ibm1364.c b/iconvdata/ibm1364.c
+index 0b5484f..cf80993 100644
+--- a/iconvdata/ibm1364.c
++++ b/iconvdata/ibm1364.c
+@@ -221,7 +221,8 @@ enum
+ ++rp2; \
+ \
+ uint32_t res; \
+- if (__builtin_expect (ch < rp2->start, 0) \
++ if (__builtin_expect (rp2->start == 0xffff, 0) \
++ || __builtin_expect (ch < rp2->start, 0) \
+ || (res = DB_TO_UCS4[ch + rp2->idx], \
+ __builtin_expect (res, L'\1') == L'\0' && ch != '\0')) \
+ { \
+diff --git a/iconvdata/ibm932.c b/iconvdata/ibm932.c
+index f5dca59..aa69d65 100644
+--- a/iconvdata/ibm932.c
++++ b/iconvdata/ibm932.c
+@@ -74,11 +74,12 @@
+ } \
+ \
+ ch = (ch * 0x100) + inptr[1]; \
++ /* ch was less than 0xfd. */ \
++ assert (ch < 0xfd00); \
+ while (ch > rp2->end) \
+ ++rp2; \
+ \
+- if (__builtin_expect (rp2 == NULL, 0) \
+- || __builtin_expect (ch < rp2->start, 0) \
++ if (__builtin_expect (ch < rp2->start, 0) \
+ || (res = __ibm932db_to_ucs4[ch + rp2->idx], \
+ __builtin_expect (res, '\1') == 0 && ch !=0)) \
+ { \
+diff --git a/iconvdata/ibm933.c b/iconvdata/ibm933.c
+index f46dfb5..461fb5e 100644
+--- a/iconvdata/ibm933.c
++++ b/iconvdata/ibm933.c
+@@ -162,7 +162,7 @@ enum
+ while (ch > rp2->end) \
+ ++rp2; \
+ \
+- if (__builtin_expect (rp2 == NULL, 0) \
++ if (__builtin_expect (rp2->start == 0xffff, 0) \
+ || __builtin_expect (ch < rp2->start, 0) \
+ || (res = __ibm933db_to_ucs4[ch + rp2->idx], \
+ __builtin_expect (res, L'\1') == L'\0' && ch != '\0')) \
+diff --git a/iconvdata/ibm935.c b/iconvdata/ibm935.c
+index a8e4e6c..132d816 100644
+--- a/iconvdata/ibm935.c
++++ b/iconvdata/ibm935.c
+@@ -162,7 +162,7 @@ enum
+ while (ch > rp2->end) \
+ ++rp2; \
+ \
+- if (__builtin_expect (rp2 == NULL, 0) \
++ if (__builtin_expect (rp2->start == 0xffff, 0) \
+ || __builtin_expect (ch < rp2->start, 0) \
+ || (res = __ibm935db_to_ucs4[ch + rp2->idx], \
+ __builtin_expect (res, L'\1') == L'\0' && ch != '\0')) \
+diff --git a/iconvdata/ibm937.c b/iconvdata/ibm937.c
+index 239be61..69b154d 100644
+--- a/iconvdata/ibm937.c
++++ b/iconvdata/ibm937.c
+@@ -162,7 +162,7 @@ enum
+ while (ch > rp2->end) \
+ ++rp2; \
+ \
+- if (__builtin_expect (rp2 == NULL, 0) \
++ if (__builtin_expect (rp2->start == 0xffff, 0) \
+ || __builtin_expect (ch < rp2->start, 0) \
+ || (res = __ibm937db_to_ucs4[ch + rp2->idx], \
+ __builtin_expect (res, L'\1') == L'\0' && ch != '\0')) \
+diff --git a/iconvdata/ibm939.c b/iconvdata/ibm939.c
+index 5d0db36..9936e2c 100644
+--- a/iconvdata/ibm939.c
++++ b/iconvdata/ibm939.c
+@@ -162,7 +162,7 @@ enum
+ while (ch > rp2->end) \
+ ++rp2; \
+ \
+- if (__builtin_expect (rp2 == NULL, 0) \
++ if (__builtin_expect (rp2->start == 0xffff, 0) \
+ || __builtin_expect (ch < rp2->start, 0) \
+ || (res = __ibm939db_to_ucs4[ch + rp2->idx], \
+ __builtin_expect (res, L'\1') == L'\0' && ch != '\0')) \
+diff --git a/iconvdata/ibm943.c b/iconvdata/ibm943.c
+index be0c14f..c5d5742 100644
+--- a/iconvdata/ibm943.c
++++ b/iconvdata/ibm943.c
+@@ -75,11 +75,12 @@
+ } \
+ \
+ ch = (ch * 0x100) + inptr[1]; \
++ /* ch was less than 0xfd. */ \
++ assert (ch < 0xfd00); \
+ while (ch > rp2->end) \
+ ++rp2; \
+ \
+- if (__builtin_expect (rp2 == NULL, 0) \
+- || __builtin_expect (ch < rp2->start, 0) \
++ if (__builtin_expect (ch < rp2->start, 0) \
+ || (res = __ibm943db_to_ucs4[ch + rp2->idx], \
+ __builtin_expect (res, '\1') == 0 && ch !=0)) \
+ { \
+diff --git a/iconvdata/run-iconv-test.sh b/iconvdata/run-iconv-test.sh
+index c98c929..5dfb69f 100755
+--- a/iconvdata/run-iconv-test.sh
++++ b/iconvdata/run-iconv-test.sh
+@@ -184,6 +184,24 @@ while read utf8 from filename; do
+
+ done < TESTS2
+
++# Check for crashes in decoders.
++printf '\016\377\377\377\377\377\377\377' > $temp1
++for from in $iconv_modules ; do
++ echo $ac_n "test decoder $from $ac_c"
++ PROG=`eval echo $ICONV`
++ if $PROG < $temp1 >/dev/null 2>&1 ; then
++ : # fall through
++ else
++ status=$?
++ if test $status -gt 1 ; then
++ echo "/FAILED"
++ failed=1
++ continue
++ fi
++ fi
++ echo "OK"
++done
++
+ exit $failed
+ # Local Variables:
+ # mode:shell-script
--- /dev/null
+#
+# This is a special patch for rhel-6 to fix recursive dlopen.
+# It is likely the upstream patch will always be too risky for
+# rhel-6 and will involve reorganizing the way in which recursive
+# dlopen is allowed to operate and how the _r_debug and stap
+# points are used by gdb for the recursive case.
+#
+# This fix changes the internal API to duplicate the ldconfig
+# cache data. This means that at any point the cache can be
+# unmapped without any consequences. The caller is responsible
+# fore freeing the returned string.
+#
+# A regression test is added to verify the assertion for _r_debug
+# is no longer triggered due to the recursive dlopen. The test to
+# verify the fix in _dl_load_cache_lookup is not automated and
+# has to be run by hand.
+#
+diff -urN glibc-2.12-2-gc4ccff1/elf/dl-cache.c glibc-2.12-2-gc4ccff1.mod/elf/dl-cache.c
+--- glibc-2.12-2-gc4ccff1/elf/dl-cache.c 2010-05-04 07:27:23.000000000 -0400
++++ glibc-2.12-2-gc4ccff1.mod/elf/dl-cache.c 2014-12-10 21:54:08.801985045 -0500
+@@ -175,9 +175,12 @@
+
+
+ /* Look up NAME in ld.so.cache and return the file name stored there,
+- or null if none is found. */
+-
+-const char *
++ or null if none is found.
++ The caller is responsible for freeing the returned string. The ld.so.cache
++ may be unmapped at any time by a completing recursive dlopen and
++ this function must take care that it does not return references to
++ any data in the mapping. */
++char *
+ internal_function
+ _dl_load_cache_lookup (const char *name)
+ {
+@@ -290,7 +293,17 @@
+ && best != NULL)
+ _dl_debug_printf (" trying file=%s\n", best);
+
+- return best;
++ if (best == NULL)
++ return NULL;
++
++ /* The double copy is *required* since malloc may be interposed
++ and call dlopen itself whose completion would unmap the data
++ we are accessing. Therefore we must make the copy of the
++ mapping data without using malloc. */
++ char *temp;
++ temp = alloca (strlen (best) + 1);
++ strcpy (temp, best);
++ return strdup (temp);
+ }
+
+ #ifndef MAP_COPY
+diff -urN glibc-2.12-2-gc4ccff1/elf/dl-load.c glibc-2.12-2-gc4ccff1.mod/elf/dl-load.c
+--- glibc-2.12-2-gc4ccff1/elf/dl-load.c 2014-12-10 11:03:17.966048404 -0500
++++ glibc-2.12-2-gc4ccff1.mod/elf/dl-load.c 2014-12-10 21:47:29.319387538 -0500
+@@ -2126,7 +2126,7 @@
+ {
+ /* Check the list of libraries in the file /etc/ld.so.cache,
+ for compatibility with Linux's ldconfig program. */
+- const char *cached = _dl_load_cache_lookup (name);
++ char *cached = _dl_load_cache_lookup (name);
+
+ if (cached != NULL)
+ {
+@@ -2156,6 +2156,7 @@
+ if (memcmp (cached, dirp, system_dirs_len[cnt]) == 0)
+ {
+ /* The prefix matches. Don't use the entry. */
++ free (cached);
+ cached = NULL;
+ break;
+ }
+@@ -2172,14 +2173,9 @@
+ &fb, loader ?: GL(dl_ns)[nsid]._ns_loaded,
+ LA_SER_CONFIG, &found_other_class, false);
+ if (__builtin_expect (fd != -1, 1))
+- {
+- realname = local_strdup (cached);
+- if (realname == NULL)
+- {
+- __close (fd);
+- fd = -1;
+- }
+- }
++ realname = cached;
++ else
++ free (cached);
+ }
+ }
+ }
+diff -urN glibc-2.12-2-gc4ccff1/elf/dl-open.c glibc-2.12-2-gc4ccff1.mod/elf/dl-open.c
+--- glibc-2.12-2-gc4ccff1/elf/dl-open.c 2014-12-10 11:03:18.083048497 -0500
++++ glibc-2.12-2-gc4ccff1.mod/elf/dl-open.c 2014-12-10 20:34:16.017503638 -0500
+@@ -220,7 +220,11 @@
+ }
+ }
+
+- assert (_dl_debug_initialize (0, args->nsid)->r_state == RT_CONSISTENT);
++ /* One might be tempted to assert that we are RT_CONSISTENT at this point, but that
++ may not be true if this is a recursive call to dlopen.
++ TODO: Fix all of the debug state so we end up at RT_CONSISTENT only when the last
++ recursive dlopen completes. */
++ _dl_debug_initialize (0, args->nsid);
+
+ /* Load the named object. */
+ struct link_map *new;
+diff -urN glibc-2.12-2-gc4ccff1/sysdeps/generic/ldsodefs.h glibc-2.12-2-gc4ccff1.mod/sysdeps/generic/ldsodefs.h
+--- glibc-2.12-2-gc4ccff1/sysdeps/generic/ldsodefs.h 2014-12-10 11:03:17.944048387 -0500
++++ glibc-2.12-2-gc4ccff1.mod/sysdeps/generic/ldsodefs.h 2014-12-10 21:46:14.071344018 -0500
+@@ -996,8 +996,8 @@
+ internal_function;
+
+ /* Look up NAME in ld.so.cache and return the file name stored there,
+- or null if none is found. */
+-extern const char *_dl_load_cache_lookup (const char *name)
++ or null if none is found. Caller must free returned string. */
++extern char *_dl_load_cache_lookup (const char *name)
+ internal_function;
+
+ /* If the system does not support MAP_COPY we cannot leave the file open
+diff -urN glibc-2.12-2-gc4ccff1/dlfcn/Makefile glibc-2.12-2-gc4ccff1.mod/dlfcn/Makefile
+--- glibc-2.12-2-gc4ccff1/dlfcn/Makefile 2010-05-04 07:27:23.000000000 -0400
++++ glibc-2.12-2-gc4ccff1.mod/dlfcn/Makefile 2014-12-11 16:58:55.719803063 -0500
+@@ -42,12 +42,12 @@
+ ifeq (yes,$(build-shared))
+ tests = glrefmain failtest tst-dladdr default errmsg1 tstcxaatexit \
+ bug-dlopen1 bug-dlsym1 tst-dlinfo bug-atexit1 bug-atexit2 \
+- bug-atexit3 tstatexit
++ bug-atexit3 tstatexit tst-rec-dlopen
+ endif
+ modules-names = glreflib1 glreflib2 glreflib3 failtestmod defaultmod1 \
+ defaultmod2 errmsg1mod modatexit modcxaatexit \
+ bug-dlsym1-lib1 bug-dlsym1-lib2 bug-atexit1-lib \
+- bug-atexit2-lib bug-atexit3-lib
++ bug-atexit2-lib bug-atexit3-lib moddummy1 moddummy2
+
+ failtestmod.so-no-z-defs = yes
+ glreflib2.so-no-z-defs = yes
+@@ -142,6 +142,8 @@
+ $(objpfx)bug-atexit3-lib.so: $(common-objpfx)libc.so \
+ $(common-objpfx)libc_nonshared.a
+
++LDLIBS-tst-rec-dlopen = -ldl
++$(objpfx)tst-rec-dlopen: $(libdl)
+
+ # Depend on libc.so so a DT_NEEDED is generated in the shared objects.
+ # This ensures they will load libc.so for needed symbols if loaded by
+diff -urN glibc-2.12-2-gc4ccff1/dlfcn/moddummy1.c glibc-2.12-2-gc4ccff1.mod/dlfcn/moddummy1.c
+--- glibc-2.12-2-gc4ccff1/dlfcn/moddummy1.c 1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.12-2-gc4ccff1.mod/dlfcn/moddummy1.c 2014-12-11 16:57:54.108797285 -0500
+@@ -0,0 +1,13 @@
++/* Provide a dummy DSO for tst-recursive-dlopen to use. */
++#include <stdio.h>
++#include <stdlib.h>
++
++int called_dummy1;
++
++void
++dummy1 (void)
++{
++ printf ("Called dummy1()\n");
++ called_dummy1++;
++}
++
+diff -urN glibc-2.12-2-gc4ccff1/dlfcn/moddummy2.c glibc-2.12-2-gc4ccff1.mod/dlfcn/moddummy2.c
+--- glibc-2.12-2-gc4ccff1/dlfcn/moddummy2.c 1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.12-2-gc4ccff1.mod/dlfcn/moddummy2.c 2014-12-11 16:57:54.108797285 -0500
+@@ -0,0 +1,13 @@
++/* Provide a dummy DSO for tst-recursive-dlopen to use. */
++#include <stdio.h>
++#include <stdlib.h>
++
++int called_dummy2;
++
++void
++dummy2 (void)
++{
++ printf ("Called dummy2()\n");
++ called_dummy2++;
++}
++
+diff -urN glibc-2.12-2-gc4ccff1/dlfcn/tst-rec-dlopen.c glibc-2.12-2-gc4ccff1.mod/dlfcn/tst-rec-dlopen.c
+--- glibc-2.12-2-gc4ccff1/dlfcn/tst-rec-dlopen.c 1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.12-2-gc4ccff1.mod/dlfcn/tst-rec-dlopen.c 2014-12-11 20:53:28.617848774 -0500
+@@ -0,0 +1,145 @@
++/* Test recursive dlopen using malloc hooks.
++ Copyright (C) 1998-2014 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library 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
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <stdio.h>
++#include <stdlib.h>
++#include <malloc.h>
++#include <dlfcn.h>
++
++#define DSO "moddummy1.so"
++#define FUNC "dummy1"
++
++#define DSO1 "moddummy2.so"
++#define FUNC1 "dummy2"
++
++/* Prevent the compiler from moving the assignment to called_func
++ before (*func)() since the compiler doesn't know we might abort
++ or catch a SIGSEGV signal and it may move the store. */
++volatile int called_func;
++
++/* Prototype for my hook. */
++void *custom_malloc_hook (size_t, const void *);
++
++/* Pointer to old malloc hooks. */
++void *(*old_malloc_hook) (size_t, const void *);
++
++/* Call function func_name in DSO dso_name via dlopen. */
++void
++call_func (const char *dso_name, const char *func_name)
++{
++ int ret;
++ void *dso;
++ void (*func) (void);
++ char *err;
++
++ /* Open the DSO. */
++ dso = dlopen (dso_name, RTLD_NOW|RTLD_GLOBAL);
++ if (dso == NULL)
++ {
++ err = dlerror ();
++ fprintf (stderr, "%s\n", err);
++ exit (1);
++ }
++ /* Clear any errors. */
++ dlerror ();
++
++ /* Lookup func. */
++ *(void **) (&func) = dlsym (dso, func_name);
++ if (func == NULL)
++ {
++ err = dlerror ();
++ if (err != NULL)
++ {
++ fprintf (stderr, "%s\n", err);
++ exit (1);
++ }
++ }
++ /* Call func. */
++ (*func) ();
++ called_func = 1;
++
++ /* Close the library and look for errors too. */
++ ret = dlclose (dso);
++ if (ret != 0)
++ {
++ err = dlerror ();
++ fprintf (stderr, "%s\n", err);
++ exit (1);
++ }
++
++}
++
++/* Empty hook that does nothing. */
++void *
++custom_malloc_hook (size_t size, const void *caller)
++{
++ void *result;
++ /* Restore old hooks. */
++ __malloc_hook = old_malloc_hook;
++ /* First call a function in another library via dlopen. */
++ call_func (DSO1, FUNC1);
++ /* Called recursively. */
++ result = malloc (size);
++ /* Restore new hooks. */
++ __malloc_hook = custom_malloc_hook;
++ return result;
++}
++
++static int
++do_test (void)
++{
++ /* Save old hook. */
++ old_malloc_hook = __malloc_hook;
++ /* Install new hook. */
++ __malloc_hook = custom_malloc_hook;
++
++ /* Bug 17702 fixes two things:
++ * A recursive dlopen unmapping the ld.so.cache.
++ * An assertion that _r_debug is RT_CONSISTENT at entry to dlopen.
++ We can only test the latter. Testing the former requires modifying
++ ld.so.conf to cache the dummy libraries, then running ldconfig,
++ then run the test. If you do all of that (and glibc's test
++ infrastructure doesn't support that yet) then the test will
++ SEGFAULT without the fix. If you don't do that, then the test
++ will abort because of the assert described in detail below. */
++ call_func (DSO, FUNC);
++
++ /* Restore old hook. */
++ __malloc_hook = old_malloc_hook;
++
++ /* The function dummy2() is called by the malloc hook. Check to
++ see that it was called. This ensures the second recursive
++ dlopen happened and we called the function in that library.
++
++ Before the fix you either get a SIGSEGV when accessing mmap'd
++ ld.so.cache data or an assertion failure about _r_debug not
++ beint RT_CONSISTENT. We don't test for the SIGSEGV since it
++ would require finding moddummy1 or moddummy2 in the cache and
++ we don't have any infrastructure to test that, but the _r_debug
++ assertion triggers. */
++ if (called_func > 0)
++ printf ("PASS: Function call_func() called more than once.\n");
++ else
++ printf ("FAIL: Function call_func() not called.\n");
++
++ return 0;
++}
++
++#define TEST_FUNCTION do_test ()
++#include "../test-skeleton.c"
--- /dev/null
+#
+# commit a39208bd7fb76c1b01c127b4c61f9bfd915bfe7c
+# Author: Carlos O'Donell <carlos@redhat.com>
+# Date: Wed Nov 19 11:44:12 2014 -0500
+#
+# CVE-2014-7817: wordexp fails to honour WRDE_NOCMD.
+#
+# The function wordexp() fails to properly handle the WRDE_NOCMD
+# flag when processing arithmetic inputs in the form of "$((... ``))"
+# where "..." can be anything valid. The backticks in the arithmetic
+# epxression are evaluated by in a shell even if WRDE_NOCMD forbade
+# command substitution. This allows an attacker to attempt to pass
+# dangerous commands via constructs of the above form, and bypass
+# the WRDE_NOCMD flag. This patch fixes this by checking for WRDE_NOCMD
+# in exec_comm(), the only place that can execute a shell. All other
+# checks for WRDE_NOCMD are superfluous and removed.
+#
+# We expand the testsuite and add 3 new regression tests of roughly
+# the same form but with a couple of nested levels.
+#
+# On top of the 3 new tests we add fork validation to the WRDE_NOCMD
+# testing. If any forks are detected during the execution of a wordexp()
+# call with WRDE_NOCMD, the test is marked as failed. This is slightly
+# heuristic since vfork might be used in the future, but it provides a
+# higher level of assurance that no shells were executed as part of
+# command substitution with WRDE_NOCMD in effect. In addition it doesn't
+# require libpthread or libdl, instead we use the public implementation
+# namespace function __register_atfork (already part of the public ABI
+# for libpthread).
+#
+# Tested on x86_64 with no regressions.
+#
+diff --git a/posix/wordexp-test.c b/posix/wordexp-test.c
+index 4957006..bdd65e4 100644
+--- a/posix/wordexp-test.c
++++ b/posix/wordexp-test.c
+@@ -27,6 +27,25 @@
+
+ #define IFS " \n\t"
+
++extern void *__dso_handle __attribute__ ((__weak__, __visibility__ ("hidden")));
++extern int __register_atfork (void (*) (void), void (*) (void), void (*) (void), void *);
++
++static int __app_register_atfork (void (*prepare) (void), void (*parent) (void), void (*child) (void))
++{
++ return __register_atfork (prepare, parent, child,
++ &__dso_handle == NULL ? NULL : __dso_handle);
++}
++
++/* Number of forks seen. */
++static int registered_forks;
++
++/* For each fork increment the fork count. */
++static void
++register_fork (void)
++{
++ registered_forks++;
++}
++
+ struct test_case_struct
+ {
+ int retval;
+@@ -206,6 +225,12 @@ struct test_case_struct
+ { WRDE_SYNTAX, NULL, "$((2+))", 0, 0, { NULL, }, IFS },
+ { WRDE_SYNTAX, NULL, "`", 0, 0, { NULL, }, IFS },
+ { WRDE_SYNTAX, NULL, "$((010+4+))", 0, 0, { NULL }, IFS },
++ /* Test for CVE-2014-7817. We test 3 combinations of command
++ substitution inside an arithmetic expression to make sure that
++ no commands are executed and error is returned. */
++ { WRDE_CMDSUB, NULL, "$((`echo 1`))", WRDE_NOCMD, 0, { NULL, }, IFS },
++ { WRDE_CMDSUB, NULL, "$((1+`echo 1`))", WRDE_NOCMD, 0, { NULL, }, IFS },
++ { WRDE_CMDSUB, NULL, "$((1+$((`echo 1`))))", WRDE_NOCMD, 0, { NULL, }, IFS },
+
+ { -1, NULL, NULL, 0, 0, { NULL, }, IFS },
+ };
+@@ -258,6 +283,15 @@ main (int argc, char *argv[])
+ return -1;
+ }
+
++ /* If we are not allowed to do command substitution, we install
++ fork handlers to verify that no forks happened. No forks should
++ happen at all if command substitution is disabled. */
++ if (__app_register_atfork (register_fork, NULL, NULL) != 0)
++ {
++ printf ("Failed to register fork handler.\n");
++ return -1;
++ }
++
+ for (test = 0; test_case[test].retval != -1; test++)
+ if (testit (&test_case[test]))
+ ++fail;
+@@ -367,6 +401,9 @@ testit (struct test_case_struct *tc)
+
+ printf ("Test %d (%s): ", ++tests, tc->words);
+
++ if (tc->flags & WRDE_NOCMD)
++ registered_forks = 0;
++
+ if (tc->flags & WRDE_APPEND)
+ {
+ /* initial wordexp() call, to be appended to */
+@@ -378,6 +415,13 @@ testit (struct test_case_struct *tc)
+ }
+ retval = wordexp (tc->words, &we, tc->flags);
+
++ if ((tc->flags & WRDE_NOCMD)
++ && (registered_forks > 0))
++ {
++ printf ("FAILED fork called for WRDE_NOCMD\n");
++ return 1;
++ }
++
+ if (tc->flags & WRDE_DOOFFS)
+ start_offs = sav_we.we_offs;
+
+diff --git a/posix/wordexp.c b/posix/wordexp.c
+index b6b65dd..26f3a26 100644
+--- a/posix/wordexp.c
++++ b/posix/wordexp.c
+@@ -893,6 +893,10 @@ exec_comm (char *comm, char **word, size_t *word_length, size_t *max_length,
+ pid_t pid;
+ int noexec = 0;
+
++ /* Do nothing if command substitution should not succeed. */
++ if (flags & WRDE_NOCMD)
++ return WRDE_CMDSUB;
++
+ /* Don't fork() unless necessary */
+ if (!comm || !*comm)
+ return 0;
+@@ -2082,9 +2086,6 @@ parse_dollars (char **word, size_t *word_length, size_t *max_length,
+ }
+ }
+
+- if (flags & WRDE_NOCMD)
+- return WRDE_CMDSUB;
+-
+ (*offset) += 2;
+ return parse_comm (word, word_length, max_length, words, offset, flags,
+ quoted? NULL : pwordexp, ifs, ifs_white);
+@@ -2196,9 +2197,6 @@ parse_dquote (char **word, size_t *word_length, size_t *max_length,
+ break;
+
+ case '`':
+- if (flags & WRDE_NOCMD)
+- return WRDE_CMDSUB;
+-
+ ++(*offset);
+ error = parse_backtick (word, word_length, max_length, words,
+ offset, flags, NULL, NULL, NULL);
+@@ -2357,12 +2355,6 @@ wordexp (const char *words, wordexp_t *pwordexp, int flags)
+ break;
+
+ case '`':
+- if (flags & WRDE_NOCMD)
+- {
+- error = WRDE_CMDSUB;
+- goto do_error;
+- }
+-
+ ++words_offset;
+ error = parse_backtick (&word, &word_length, &max_length, words,
+ &words_offset, flags, pwordexp, ifs,
--- /dev/null
+commit d5dd6189d506068ed11c8bfa1e1e9bffde04decd
+Author: Andreas Schwab <schwab@suse.de>
+Date: Mon Jan 21 17:41:28 2013 +0100
+
+ Fix parsing of numeric hosts in gethostbyname_r
+
+diff --git a/nss/digits_dots.c b/nss/digits_dots.c
+index 2b86295..e007ef4 100644
+--- a/nss/digits_dots.c
++++ b/nss/digits_dots.c
+@@ -46,7 +46,10 @@ __nss_hostname_digits_dots (const char *name, struct hostent *resbuf,
+ {
+ if (h_errnop)
+ *h_errnop = NETDB_INTERNAL;
+- *result = NULL;
++ if (buffer_size == NULL)
++ *status = NSS_STATUS_TRYAGAIN;
++ else
++ *result = NULL;
+ return -1;
+ }
+
+@@ -83,14 +86,16 @@ __nss_hostname_digits_dots (const char *name, struct hostent *resbuf,
+ }
+
+ size_needed = (sizeof (*host_addr)
+- + sizeof (*h_addr_ptrs) + strlen (name) + 1);
++ + sizeof (*h_addr_ptrs)
++ + sizeof (*h_alias_ptr) + strlen (name) + 1);
+
+ if (buffer_size == NULL)
+ {
+ if (buflen < size_needed)
+ {
++ *status = NSS_STATUS_TRYAGAIN;
+ if (h_errnop != NULL)
+- *h_errnop = TRY_AGAIN;
++ *h_errnop = NETDB_INTERNAL;
+ __set_errno (ERANGE);
+ goto done;
+ }
+@@ -109,7 +114,7 @@ __nss_hostname_digits_dots (const char *name, struct hostent *resbuf,
+ *buffer_size = 0;
+ __set_errno (save);
+ if (h_errnop != NULL)
+- *h_errnop = TRY_AGAIN;
++ *h_errnop = NETDB_INTERNAL;
+ *result = NULL;
+ goto done;
+ }
+@@ -149,7 +154,9 @@ __nss_hostname_digits_dots (const char *name, struct hostent *resbuf,
+ if (! ok)
+ {
+ *h_errnop = HOST_NOT_FOUND;
+- if (buffer_size)
++ if (buffer_size == NULL)
++ *status = NSS_STATUS_NOTFOUND;
++ else
+ *result = NULL;
+ goto done;
+ }
+@@ -190,7 +197,7 @@ __nss_hostname_digits_dots (const char *name, struct hostent *resbuf,
+ if (buffer_size == NULL)
+ *status = NSS_STATUS_SUCCESS;
+ else
+- *result = resbuf;
++ *result = resbuf;
+ goto done;
+ }
+
+@@ -201,15 +208,6 @@ __nss_hostname_digits_dots (const char *name, struct hostent *resbuf,
+
+ if ((isxdigit (name[0]) && strchr (name, ':') != NULL) || name[0] == ':')
+ {
+- const char *cp;
+- char *hostname;
+- typedef unsigned char host_addr_t[16];
+- host_addr_t *host_addr;
+- typedef char *host_addr_list_t[2];
+- host_addr_list_t *h_addr_ptrs;
+- size_t size_needed;
+- int addr_size;
+-
+ switch (af)
+ {
+ default:
+@@ -225,7 +223,10 @@ __nss_hostname_digits_dots (const char *name, struct hostent *resbuf,
+ /* This is not possible. We cannot represent an IPv6 address
+ in an `struct in_addr' variable. */
+ *h_errnop = HOST_NOT_FOUND;
+- *result = NULL;
++ if (buffer_size == NULL)
++ *status = NSS_STATUS_NOTFOUND;
++ else
++ *result = NULL;
+ goto done;
+
+ case AF_INET6:
+@@ -233,42 +234,6 @@ __nss_hostname_digits_dots (const char *name, struct hostent *resbuf,
+ break;
+ }
+
+- size_needed = (sizeof (*host_addr)
+- + sizeof (*h_addr_ptrs) + strlen (name) + 1);
+-
+- if (buffer_size == NULL && buflen < size_needed)
+- {
+- if (h_errnop != NULL)
+- *h_errnop = TRY_AGAIN;
+- __set_errno (ERANGE);
+- goto done;
+- }
+- else if (buffer_size != NULL && *buffer_size < size_needed)
+- {
+- char *new_buf;
+- *buffer_size = size_needed;
+- new_buf = realloc (*buffer, *buffer_size);
+-
+- if (new_buf == NULL)
+- {
+- save = errno;
+- free (*buffer);
+- __set_errno (save);
+- *buffer = NULL;
+- *buffer_size = 0;
+- *result = NULL;
+- goto done;
+- }
+- *buffer = new_buf;
+- }
+-
+- memset (*buffer, '\0', size_needed);
+-
+- host_addr = (host_addr_t *) *buffer;
+- h_addr_ptrs = (host_addr_list_t *)
+- ((char *) host_addr + sizeof (*host_addr));
+- hostname = (char *) h_addr_ptrs + sizeof (*h_addr_ptrs);
+-
+ for (cp = name;; ++cp)
+ {
+ if (!*cp)
+@@ -281,7 +246,9 @@ __nss_hostname_digits_dots (const char *name, struct hostent *resbuf,
+ if (inet_pton (AF_INET6, name, host_addr) <= 0)
+ {
+ *h_errnop = HOST_NOT_FOUND;
+- if (buffer_size)
++ if (buffer_size == NULL)
++ *status = NSS_STATUS_NOTFOUND;
++ else
+ *result = NULL;
+ goto done;
+ }
+diff --git a/nss/getXXbyYY_r.c b/nss/getXXbyYY_r.c
+index 1067744..44d00f4 100644
+--- a/nss/getXXbyYY_r.c
++++ b/nss/getXXbyYY_r.c
+@@ -179,6 +179,9 @@ INTERNAL (REENTRANT_NAME) (ADD_PARAMS, LOOKUP_TYPE *resbuf, char *buffer,
+ case -1:
+ return errno;
+ case 1:
++#ifdef NEED_H_ERRNO
++ any_service = true;
++#endif
+ goto done;
+ }
+ #endif
+diff --git a/nss/test-digits-dots.c b/nss/test-digits-dots.c
+new file mode 100644
+index 0000000..1efa344
+--- /dev/null
++++ b/nss/test-digits-dots.c
+@@ -0,0 +1,38 @@
++/* Copyright (C) 2013 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library 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
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++/* Testcase for BZ #15014 */
++
++#include <stdlib.h>
++#include <netdb.h>
++#include <errno.h>
++
++static int
++do_test (void)
++{
++ char buf[32];
++ struct hostent *result = NULL;
++ struct hostent ret;
++ int h_err = 0;
++ int err;
++
++ err = gethostbyname_r ("1.2.3.4", &ret, buf, sizeof (buf), &result, &h_err);
++ return err == ERANGE && h_err == NETDB_INTERNAL ? EXIT_SUCCESS : EXIT_FAILURE;
++}
++
++#define TEST_FUNCTION do_test ()
++#include "../test-skeleton.c"
--- /dev/null
+#
+# Based on the following commit:
+#
+# commit f9d2d03254a58d92635a311a42253eeed5a40a47
+# Author: Andreas Schwab <schwab@suse.de>
+# Date: Mon May 26 18:01:31 2014 +0200
+#
+# Fix invalid file descriptor reuse while sending DNS query (BZ #15946)
+#
+# 2014-06-03 Andreas Schwab <schwab@suse.de>
+#
+# [BZ #15946]
+# * resolv/res_send.c (send_dg): Reload file descriptor after
+# calling reopen.
+#
+diff --git a/resolv/res_send.c b/resolv/res_send.c
+index 3273d55..af42b8a 100644
+--- a/resolv/res_send.c
++++ b/resolv/res_send.c
+@@ -1410,6 +1410,7 @@ send_dg(res_state statp,
+ retval = reopen (statp, terrno, ns);
+ if (retval <= 0)
+ return retval;
++ pfd[0].fd = EXT(statp).nssocks[ns];
+ }
+ }
+ goto wait;
--- /dev/null
+@@ -, +, @@
+ resolv/nss_dns/dns-host.c:getanswer_r.
+---
+ resolv/nss_dns/dns-host.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+--- a/resolv/nss_dns/dns-host.c
++++ a/resolv/nss_dns/dns-host.c
+@@ -615,7 +615,8 @@ getanswer_r (const querybuf *answer, int anslen, const char *qname, int qtype,
+ int have_to_map = 0;
+ uintptr_t pad = -(uintptr_t) buffer % __alignof__ (struct host_data);
+ buffer += pad;
+- if (__builtin_expect (buflen < sizeof (struct host_data) + pad, 0))
++ buflen = buflen > pad ? buflen - pad : 0;
++ if (__builtin_expect (buflen < sizeof (struct host_data), 0))
+ {
+ /* The buffer is too small. */
+ too_small:
+--
--- /dev/null
+commit d26dfc60edc8c6dd160eefff16a734152a835ca0
+Author: Martin von Gagern <Martin.vGagern@gmx.net>
+Date: Sat May 14 21:25:43 2011 -0400
+
+ Fix handling of static TLS in dlopen'ed objects
+
+ When dynamically loading a library along with several dependencies, calls to
+ _dl_add_to_slotinfo and _dl_update_slotinfo can become intermixed. As a
+ consequence, _dl_update_slotinfo will update the generation counter of the dtv
+ although not all of the slots belonging to that generation have been added.
+ Subsequent calls to _dl_add_to_slotinfo will add more slots to the same
+ generation, for which no storage will be allocated, as the dtv generation
+ checks will claim no work is necessary. This will lead to uninitialized dtv
+ entries and will likely cause a SIGSEGV when thread local variables are
+ accessed.
+
+diff --git a/elf/Makefile b/elf/Makefile
+index 8d9657d..6efb86c 100644
+--- a/elf/Makefile
++++ b/elf/Makefile
+@@ -76,6 +76,7 @@ distribute := rtld-Rules \
+ tst-tlsmod12.c tst-tls10.h tst-alignmod.c tst-alignmod2.c \
+ circlemod1.c circlemod1a.c circlemod2.c circlemod2a.c \
+ circlemod3.c circlemod3a.c nodlopenmod2.c \
++ tst-tls19mod1.c tst-tls19mod2.c tst-tls19mod3.c \
+ tls-macros.h \
+ reldep8mod1.c reldep8mod2.c reldep8mod3.c \
+ nodel2mod1.c nodel2mod2.c nodel2mod3.c \
+@@ -194,7 +195,7 @@ tests += loadtest restest1 preloadtest loadfail multiload origtest resolvfail \
+ restest2 next dblload dblunload reldep5 reldep6 reldep7 reldep8 \
+ circleload1 tst-tls3 tst-tls4 tst-tls5 tst-tls6 tst-tls7 tst-tls8 \
+ tst-tls10 tst-tls11 tst-tls12 tst-tls13 tst-tls14 tst-tls15 \
+- tst-tls16 tst-tls17 tst-tls18 tst-tls-dlinfo \
++ tst-tls16 tst-tls17 tst-tls18 tst-tls19 tst-tls-dlinfo \
+ tst-align tst-align2 $(tests-execstack-$(have-z-execstack)) \
+ tst-dlmodcount tst-dlopenrpath tst-deep1 \
+ tst-dlmopen1 tst-dlmopen2 tst-dlmopen3 \
+@@ -240,6 +241,7 @@ modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \
+ $(patsubst %,tst-tlsmod17a%,$(tlsmod17a-suffixes)) \
+ tst-tlsmod17b \
+ $(patsubst %,tst-tlsmod18a%,$(tlsmod18a-suffixes)) \
++ tst-tls19mod1 tst-tls19mod2 tst-tls19mod3 \
+ circlemod1 circlemod1a circlemod2 circlemod2a \
+ circlemod3 circlemod3a \
+ reldep8mod1 reldep8mod2 reldep8mod3 \
+@@ -525,6 +527,8 @@ $(objpfx)tst-tlsmod13a.so: $(objpfx)tst-tlsmod13.so
+ # For tst-tls9-static, make sure the modules it dlopens have libc.so in DT_NEEDED
+ $(objpfx)tst-tlsmod5.so: $(common-objpfx)libc.so
+ $(objpfx)tst-tlsmod6.so: $(common-objpfx)libc.so
++$(objpfx)tst-tls19mod1.so: $(objpfx)tst-tls19mod2.so $(objpfx)tst-tls19mod3.so
++$(objpfx)tst-tls19mod3.so: $(objpfx)ld.so
+ $(objpfx)reldep8mod3.so: $(objpfx)reldep8mod1.so $(objpfx)reldep8mod2.so
+ $(objpfx)nodel2mod3.so: $(objpfx)nodel2mod1.so $(objpfx)nodel2mod2.so
+ $(objpfx)reldep9mod2.so: $(objpfx)reldep9mod1.so
+@@ -822,6 +826,9 @@ $(patsubst %,$(objpfx)%.os,$(tlsmod18a-modules)): $(objpfx)tst-tlsmod18a%.os : t
+ $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ -DN=$* -DNOT_IN_libc=1 $<
+ $(patsubst %,$(objpfx)tst-tlsmod18a%.so,$(tlsmod18a-suffixes)): $(objpfx)tst-tlsmod18a%.so: $(objpfx)ld.so
+
++$(objpfx)tst-tls19: $(libdl)
++$(objpfx)tst-tls19.out: $(objpfx)tst-tls19mod1.so
++
+ CFLAGS-tst-align.c = $(stack-align-test-flags)
+ CFLAGS-tst-align2.c = $(stack-align-test-flags)
+ CFLAGS-tst-alignmod.c = $(stack-align-test-flags)
+diff --git a/elf/dl-open.c b/elf/dl-open.c
+index cf8e8cc..8d90b56 100644
+--- a/elf/dl-open.c
++++ b/elf/dl-open.c
+@@ -347,6 +347,7 @@ dl_open_worker (void *a)
+ /* If the file is not loaded now as a dependency, add the search
+ list of the newly loaded object to the scope. */
+ bool any_tls = false;
++ unsigned int first_static_tls = new->l_searchlist.r_nlist;
+ for (unsigned int i = 0; i < new->l_searchlist.r_nlist; ++i)
+ {
+ struct link_map *imap = new->l_searchlist.r_list[i];
+@@ -425,30 +426,9 @@ dl_open_worker (void *a)
+ might have to increase its size. */
+ _dl_add_to_slotinfo (imap);
+
+- if (imap->l_need_tls_init)
+- {
+- /* For static TLS we have to allocate the memory here
+- and now. This includes allocating memory in the DTV.
+- But we cannot change any DTV other than our own. So,
+- if we cannot guarantee that there is room in the DTV
+- we don't even try it and fail the load.
+-
+- XXX We could track the minimum DTV slots allocated in
+- all threads. */
+- if (! RTLD_SINGLE_THREAD_P && imap->l_tls_modid > DTV_SURPLUS)
+- _dl_signal_error (0, "dlopen", NULL, N_("\
+-cannot load any more object with static TLS"));
+-
+- imap->l_need_tls_init = 0;
+-#ifdef SHARED
+- /* Update the slot information data for at least the
+- generation of the DSO we are allocating data for. */
+- _dl_update_slotinfo (imap->l_tls_modid);
+-#endif
+-
+- GL(dl_init_static_tls) (imap);
+- assert (imap->l_need_tls_init == 0);
+- }
++ if (imap->l_need_tls_init
++ && first_static_tls == new->l_searchlist.r_nlist)
++ first_static_tls = i;
+
+ /* We have to bump the generation counter. */
+ any_tls = true;
+@@ -460,6 +440,40 @@ cannot load any more object with static TLS"));
+ _dl_fatal_printf (N_("\
+ TLS generation counter wrapped! Please report this."));
+
++ /* We need a second pass for static tls data, because _dl_update_slotinfo
++ must not be run while calls to _dl_add_to_slotinfo are still pending. */
++ for (unsigned int i = first_static_tls; i < new->l_searchlist.r_nlist; ++i)
++ {
++ struct link_map *imap = new->l_searchlist.r_list[i];
++
++ if (imap->l_need_tls_init
++ && ! imap->l_init_called
++ && imap->l_tls_blocksize > 0)
++ {
++ /* For static TLS we have to allocate the memory here and
++ now. This includes allocating memory in the DTV. But we
++ cannot change any DTV other than our own. So, if we
++ cannot guarantee that there is room in the DTV we don't
++ even try it and fail the load.
++
++ XXX We could track the minimum DTV slots allocated in
++ all threads. */
++ if (! RTLD_SINGLE_THREAD_P && imap->l_tls_modid > DTV_SURPLUS)
++ _dl_signal_error (0, "dlopen", NULL, N_("\
++cannot load any more object with static TLS"));
++
++ imap->l_need_tls_init = 0;
++#ifdef SHARED
++ /* Update the slot information data for at least the
++ generation of the DSO we are allocating data for. */
++ _dl_update_slotinfo (imap->l_tls_modid);
++#endif
++
++ GL(dl_init_static_tls) (imap);
++ assert (imap->l_need_tls_init == 0);
++ }
++ }
++
+ /* Notify the debugger all new objects have been relocated. */
+ if (relocation_in_progress)
+ LIBC_PROBE (rtld_reloc_complete, 3, args->nsid, r, new);
+diff --git a/elf/tst-tls19.c b/elf/tst-tls19.c
+new file mode 100644
+index 0000000..acbc1d6
+--- /dev/null
++++ b/elf/tst-tls19.c
+@@ -0,0 +1,27 @@
++// BZ 12453
++#include <stdio.h>
++#include <dlfcn.h>
++
++
++static int
++do_test (void)
++{
++ void* dl = dlopen ("tst-tls19mod1.so", RTLD_LAZY | RTLD_GLOBAL);
++ if (dl == NULL)
++ {
++ printf ("Error loading tst-tls19mod1.so: %s\n", dlerror ());
++ return 1;
++ }
++
++ int (*fn) (void) = dlsym (dl, "foo");
++ if (fn == NULL)
++ {
++ printf("Error obtaining symbol foo\n");
++ return 1;
++ }
++
++ return fn ();
++}
++
++#define TEST_FUNCTION do_test ()
++#include "../test-skeleton.c"
+diff --git a/elf/tst-tls19mod1.c b/elf/tst-tls19mod1.c
+new file mode 100644
+index 0000000..2790097
+--- /dev/null
++++ b/elf/tst-tls19mod1.c
+@@ -0,0 +1,15 @@
++#include <stdio.h>
++
++extern int bar (void);
++extern int baz (void);
++
++int
++foo (void)
++{
++ int v1 = bar ();
++ int v2 = baz ();
++
++ printf ("bar=%d, baz=%d\n", v1, v2);
++
++ return v1 != 666 || v2 != 42;
++}
+diff --git a/elf/tst-tls19mod2.c b/elf/tst-tls19mod2.c
+new file mode 100644
+index 0000000..cae702f
+--- /dev/null
++++ b/elf/tst-tls19mod2.c
+@@ -0,0 +1,13 @@
++static int __thread tbar __attribute__ ((tls_model ("initial-exec"))) = 666;
++
++void
++setter (int a)
++{
++ tbar = a;
++}
++
++int
++bar (void)
++{
++ return tbar;
++}
+diff --git a/elf/tst-tls19mod3.c b/elf/tst-tls19mod3.c
+new file mode 100644
+index 0000000..e7b2801
+--- /dev/null
++++ b/elf/tst-tls19mod3.c
+@@ -0,0 +1,16 @@
++#include <stdio.h>
++
++static int __thread tbaz __attribute__ ((tls_model ("local-dynamic"))) = 42;
++
++void
++setter2 (int a)
++{
++ tbaz = a;
++}
++
++int
++baz (void)
++{
++ printf ("&tbaz=%p\n", &tbaz);
++ return tbaz;
++}
--- /dev/null
+diff -Naur hostapd-2.3.org/src/ap/wpa_auth.c hostapd-2.3/src/ap/wpa_auth.c
+--- hostapd-2.3.org/src/ap/wpa_auth.c 2014-10-09 16:41:31.000000000 +0200
++++ hostapd-2.3/src/ap/wpa_auth.c 2015-04-07 16:32:10.671422975 +0200
+@@ -45,9 +45,9 @@
+
+ static const u32 dot11RSNAConfigGroupUpdateCount = 4;
+ static const u32 dot11RSNAConfigPairwiseUpdateCount = 4;
+-static const u32 eapol_key_timeout_first = 100; /* ms */
+-static const u32 eapol_key_timeout_subseq = 1000; /* ms */
+-static const u32 eapol_key_timeout_first_group = 500; /* ms */
++static const u32 eapol_key_timeout_first = 300; /* ms */
++static const u32 eapol_key_timeout_subseq = 3000; /* ms */
++static const u32 eapol_key_timeout_first_group = 1500; /* ms */
+
+ /* TODO: make these configurable */
+ static const int dot11RSNAConfigPMKLifetime = 43200;
+++ /dev/null
-Add initial support for cm-fx6 module.
-
-cm-fx6 is a module based on mx6q SoC with the following features:
-- Up to 4GB of DDR3
-- 1 LCD/DVI output port
-- 1 HDMI output port
-- 2 LVDS LCD ports
-- Gigabit Ethernet
-- Analog Audio
-- CAN
-- SATA
-- NAND
-- PCIE
-
-This patch allows to boot up the module, configures the serial console,
-the Ethernet adapter and the heartbeat led.
-
-cm-fx6 is embedded inside the Utilite computer.
-
-Signed-off-by: Valentin Raevsky <valentin@compulab.co.il>
-Signed-off-by: Igor Grinberg <grinberg@compulab.co.il>
----
-
-Shawn, can this still be applied for 3.13 ?
-
-diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
-index f0895c5..7521a34 100644
---- a/arch/arm/boot/dts/Makefile
-+++ b/arch/arm/boot/dts/Makefile
-@@ -117,6 +117,7 @@ dtb-$(CONFIG_ARCH_MXC) += \
- imx6dl-sabresd.dtb \
- imx6dl-wandboard.dtb \
- imx6q-arm2.dtb \
-+ imx6q-cm-fx6.dtb \
- imx6q-sabreauto.dtb \
- imx6q-sabrelite.dtb \
- imx6q-sabresd.dtb \
-diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dts b/arch/arm/boot/dts/imx6q-cm-fx6.dts
-new file mode 100644
-index 0000000..2419751
---- /dev/null
-+++ b/arch/arm/boot/dts/imx6q-cm-fx6.dts
-@@ -0,0 +1,53 @@
-+/*
-+ * Copyright 2013 CompuLab Ltd.
-+ *
-+ * Author: Valentin Raevsky <valentin@compulab.co.il>
-+ *
-+ * The code contained herein is licensed under the GNU General Public
-+ * License. You may obtain a copy of the GNU General Public License
-+ * Version 2 or later at the following locations:
-+ *
-+ * http://www.opensource.org/licenses/gpl-license.html
-+ * http://www.gnu.org/copyleft/gpl.html
-+ */
-+
-+/dts-v1/;
-+#include "imx6q.dtsi"
-+
-+/ {
-+ model = "CompuLab CM-FX6";
-+ compatible = "compulab,cm-fx6", "fsl,imx6q";
-+
-+ memory {
-+ reg = <0x10000000 0x80000000>;
-+ };
-+
-+ leds {
-+ compatible = "gpio-leds";
-+
-+ heartbeat-led {
-+ label = "Heartbeat";
-+ gpios = <&gpio2 31 0>;
-+ linux,default-trigger = "heartbeat";
-+ };
-+ };
-+};
-+
-+&fec {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&pinctrl_enet_1>;
-+ phy-mode = "rgmii";
-+ status = "okay";
-+};
-+
-+&gpmi {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&pinctrl_gpmi_nand_1>;
-+ status = "okay";
-+};
-+
-+&uart4 {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&pinctrl_uart4_1>;
-+ status = "okay";
-+};
--- /dev/null
+From 77e3b7f055f824e4d6587faa73bd4aacd0c307e8 Mon Sep 17 00:00:00 2001
+From: hayeswang <hayeswang@realtek.com>
+Date: Wed, 9 Jul 2014 14:52:51 +0800
+Subject: [PATCH] r8169: disable L23
+
+For RTL8411, RTL8111G, RTL8402, RTL8105, and RTL8106, disable the feature
+of entering the L2/L3 link state of the PCIe. When the nic starts the process
+of entering the L2/L3 link state and the PCI reset occurs before the work
+is finished, the work would be queued and continue after the next the PCI
+reset occurs. This causes the device stays in L2/L3 link state, and the system
+couldn't find the device.
+
+Signed-off-by: Hayes Wang <hayeswang@realtek.com>
+Acked-by: Francois Romieu <romieu@fr.zoreil.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/ethernet/realtek/r8169.c | 25 +++++++++++++++++++++++++
+ 1 file changed, 25 insertions(+)
+
+diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
+index 3ff7bc3..b94f658 100644
+--- a/drivers/net/ethernet/realtek/r8169.c
++++ b/drivers/net/ethernet/realtek/r8169.c
+@@ -538,6 +538,7 @@ enum rtl_register_content {
+ MagicPacket = (1 << 5), /* Wake up when receives a Magic Packet */
+ LinkUp = (1 << 4), /* Wake up when the cable connection is re-established */
+ Jumbo_En0 = (1 << 2), /* 8168 only. Reserved in the 8168b */
++ Rdy_to_L23 = (1 << 1), /* L23 Enable */
+ Beacon_en = (1 << 0), /* 8168 only. Reserved in the 8168b */
+
+ /* Config4 register */
+@@ -4897,6 +4898,21 @@ static void rtl_enable_clock_request(struct pci_dev *pdev)
+ PCI_EXP_LNKCTL_CLKREQ_EN);
+ }
+
++static void rtl_pcie_state_l2l3_enable(struct rtl8169_private *tp, bool enable)
++{
++ void __iomem *ioaddr = tp->mmio_addr;
++ u8 data;
++
++ data = RTL_R8(Config3);
++
++ if (enable)
++ data |= Rdy_to_L23;
++ else
++ data &= ~Rdy_to_L23;
++
++ RTL_W8(Config3, data);
++}
++
+ #define R8168_CPCMD_QUIRK_MASK (\
+ EnableBist | \
+ Mac_dbgo_oe | \
+@@ -5246,6 +5262,7 @@ static void rtl_hw_start_8411(struct rtl8169_private *tp)
+ };
+
+ rtl_hw_start_8168f(tp);
++ rtl_pcie_state_l2l3_enable(tp, false);
+
+ rtl_ephy_init(tp, e_info_8168f_1, ARRAY_SIZE(e_info_8168f_1));
+
+@@ -5284,6 +5301,8 @@ static void rtl_hw_start_8168g_1(struct rtl8169_private *tp)
+
+ rtl_w1w0_eri(tp, 0x2fc, ERIAR_MASK_0001, 0x01, 0x06, ERIAR_EXGMAC);
+ rtl_w1w0_eri(tp, 0x1b0, ERIAR_MASK_0011, 0x0000, 0x1000, ERIAR_EXGMAC);
++
++ rtl_pcie_state_l2l3_enable(tp, false);
+ }
+
+ static void rtl_hw_start_8168g_2(struct rtl8169_private *tp)
+@@ -5536,6 +5555,8 @@ static void rtl_hw_start_8105e_1(struct rtl8169_private *tp)
+ RTL_W8(DLLPR, RTL_R8(DLLPR) | PFM_EN);
+
+ rtl_ephy_init(tp, e_info_8105e_1, ARRAY_SIZE(e_info_8105e_1));
++
++ rtl_pcie_state_l2l3_enable(tp, false);
+ }
+
+ static void rtl_hw_start_8105e_2(struct rtl8169_private *tp)
+@@ -5571,6 +5592,8 @@ static void rtl_hw_start_8402(struct rtl8169_private *tp)
+ rtl_eri_write(tp, 0xc0, ERIAR_MASK_0011, 0x0000, ERIAR_EXGMAC);
+ rtl_eri_write(tp, 0xb8, ERIAR_MASK_0011, 0x0000, ERIAR_EXGMAC);
+ rtl_w1w0_eri(tp, 0x0d4, ERIAR_MASK_0011, 0x0e00, 0xff00, ERIAR_EXGMAC);
++
++ rtl_pcie_state_l2l3_enable(tp, false);
+ }
+
+ static void rtl_hw_start_8106(struct rtl8169_private *tp)
+@@ -5583,6 +5606,8 @@ static void rtl_hw_start_8106(struct rtl8169_private *tp)
+ RTL_W32(MISC, (RTL_R32(MISC) | DISABLE_LAN_EN) & ~EARLY_TALLY_EN);
+ RTL_W8(MCU, RTL_R8(MCU) | EN_NDP | EN_OOB_RESET);
+ RTL_W8(DLLPR, RTL_R8(DLLPR) & ~PFM_EN);
++
++ rtl_pcie_state_l2l3_enable(tp, false);
+ }
+
+ static void rtl_hw_start_8101(struct net_device *dev)
+--
+1.8.5.2
+
--- /dev/null
+From 99d3016de4f2a29635f5382b0e9bd0e5f2151487 Mon Sep 17 00:00:00 2001
+From: Haiyang Zhang <haiyangz@microsoft.com>
+Date: Sun, 9 Mar 2014 16:10:59 -0700
+Subject: hyperv: Change the receive buffer size for legacy hosts
+
+Due to a bug in the Hyper-V host verion 2008R2, we need to use a slightly smaller
+receive buffer size, otherwise the buffer will not be accepted by the legacy hosts.
+
+Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+
+diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h
+index 7d06b49..13010b4 100644
+--- a/drivers/net/hyperv/hyperv_net.h
++++ b/drivers/net/hyperv/hyperv_net.h
+@@ -513,6 +513,7 @@ struct nvsp_message {
+ #define NETVSC_MTU 65536
+
+ #define NETVSC_RECEIVE_BUFFER_SIZE (1024*1024*16) /* 16MB */
++#define NETVSC_RECEIVE_BUFFER_SIZE_LEGACY (1024*1024*15) /* 15MB */
+
+ #define NETVSC_RECEIVE_BUFFER_ID 0xcafe
+
+diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c
+index 1a0280d..daddea2 100644
+--- a/drivers/net/hyperv/netvsc.c
++++ b/drivers/net/hyperv/netvsc.c
+@@ -365,6 +365,11 @@ static int netvsc_connect_vsp(struct hv_device *device)
+ goto cleanup;
+
+ /* Post the big receive buffer to NetVSP */
++ if (net_device->nvsp_version <= NVSP_PROTOCOL_VERSION_2)
++ net_device->recv_buf_size = NETVSC_RECEIVE_BUFFER_SIZE_LEGACY;
++ else
++ net_device->recv_buf_size = NETVSC_RECEIVE_BUFFER_SIZE;
++
+ ret = netvsc_init_recv_buf(device);
+
+ cleanup:
+@@ -898,7 +903,6 @@ int netvsc_device_add(struct hv_device *device, void *additional_info)
+ ndev = net_device->ndev;
+
+ /* Initialize the NetVSC channel extension */
+- net_device->recv_buf_size = NETVSC_RECEIVE_BUFFER_SIZE;
+ spin_lock_init(&net_device->recv_pkt_list_lock);
+
+ INIT_LIST_HEAD(&net_device->recv_pkt_list);
+--
+cgit v0.10.2
+
+++ /dev/null
-diff -Naur openssl-0.9.8u.org/crypto/engine/eng_all.c openssl-0.9.8u/crypto/engine/eng_all.c
---- openssl-0.9.8u.org/crypto/engine/eng_all.c 2010-03-01 01:30:11.000000000 +0100
-+++ openssl-0.9.8u/crypto/engine/eng_all.c 2012-03-27 14:07:11.000000000 +0200
-@@ -113,7 +113,6 @@
- #endif
- }
-
--#if defined(__OpenBSD__) || defined(__FreeBSD__)
- void ENGINE_setup_bsd_cryptodev(void) {
- static int bsd_cryptodev_default_loaded = 0;
- if (!bsd_cryptodev_default_loaded) {
-@@ -122,4 +121,3 @@
- }
- bsd_cryptodev_default_loaded=1;
- }
--#endif
-diff -Naur openssl-0.9.8u.org/crypto/engine/eng_cryptodev.c openssl-0.9.8u/crypto/engine/eng_cryptodev.c
---- openssl-0.9.8u.org/crypto/engine/eng_cryptodev.c 2012-03-06 14:22:32.000000000 +0100
-+++ openssl-0.9.8u/crypto/engine/eng_cryptodev.c 2012-03-27 14:02:59.000000000 +0200
-@@ -2,6 +2,7 @@
- * Copyright (c) 2002 Bob Beck <beck@openbsd.org>
- * Copyright (c) 2002 Theo de Raadt
- * Copyright (c) 2002 Markus Friedl
-+ * Copyright (c) 2012 Nikos Mavrogiannopoulos
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
-@@ -30,10 +31,6 @@
- #include <openssl/engine.h>
- #include <openssl/evp.h>
- #include <openssl/bn.h>
--#include <openssl/dsa.h>
--#include <openssl/rsa.h>
--#include <openssl/dh.h>
--#include <openssl/err.h>
-
- #if (defined(__unix__) || defined(unix)) && !defined(USG) && \
- (defined(OpenBSD) || defined(__FreeBSD__))
-@@ -59,6 +56,10 @@
-
- #include <sys/types.h>
- #include <crypto/cryptodev.h>
-+#include <crypto/dh/dh.h>
-+#include <crypto/dsa/dsa.h>
-+#include <crypto/err/err.h>
-+#include <crypto/rsa/rsa.h>
- #include <sys/ioctl.h>
- #include <errno.h>
- #include <stdio.h>
-@@ -72,6 +73,12 @@
- struct dev_crypto_state {
- struct session_op d_sess;
- int d_fd;
-+
-+#ifdef USE_CRYPTODEV_DIGESTS
-+ unsigned char digest_res[HASH_MAX_LEN];
-+ char *mac_data;
-+ int mac_len;
-+#endif
- };
-
- static u_int32_t cryptodev_asymfeat = 0;
-@@ -79,15 +86,14 @@
- static int get_asym_dev_crypto(void);
- static int open_dev_crypto(void);
- static int get_dev_crypto(void);
--static int cryptodev_max_iv(int cipher);
--static int cryptodev_key_length_valid(int cipher, int len);
--static int cipher_nid_to_cryptodev(int nid);
- static int get_cryptodev_ciphers(const int **cnids);
--/*static int get_cryptodev_digests(const int **cnids);*/
-+#ifdef USE_CRYPTODEV_DIGESTS
-+static int get_cryptodev_digests(const int **cnids);
-+#endif
- static int cryptodev_usable_ciphers(const int **nids);
- static int cryptodev_usable_digests(const int **nids);
- static int cryptodev_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
-- const unsigned char *in, unsigned int inl);
-+ const unsigned char *in, size_t inl);
- static int cryptodev_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
- const unsigned char *iv, int enc);
- static int cryptodev_cleanup(EVP_CIPHER_CTX *ctx);
-@@ -121,7 +127,7 @@
- static int cryptodev_dh_compute_key(unsigned char *key,
- const BIGNUM *pub_key, DH *dh);
- static int cryptodev_ctrl(ENGINE *e, int cmd, long i, void *p,
-- void (*f)());
-+ void (*f)(void));
- void ENGINE_load_cryptodev(void);
-
- static const ENGINE_CMD_DEFN cryptodev_defns[] = {
-@@ -134,27 +140,38 @@
- int ivmax;
- int keylen;
- } ciphers[] = {
-+ { CRYPTO_ARC4, NID_rc4, 0, 16, },
- { CRYPTO_DES_CBC, NID_des_cbc, 8, 8, },
- { CRYPTO_3DES_CBC, NID_des_ede3_cbc, 8, 24, },
- { CRYPTO_AES_CBC, NID_aes_128_cbc, 16, 16, },
-+ { CRYPTO_AES_CBC, NID_aes_192_cbc, 16, 24, },
-+ { CRYPTO_AES_CBC, NID_aes_256_cbc, 16, 32, },
- { CRYPTO_BLF_CBC, NID_bf_cbc, 8, 16, },
- { CRYPTO_CAST_CBC, NID_cast5_cbc, 8, 16, },
- { CRYPTO_SKIPJACK_CBC, NID_undef, 0, 0, },
- { 0, NID_undef, 0, 0, },
- };
-
--#if 0
-+#ifdef USE_CRYPTODEV_DIGESTS
- static struct {
- int id;
- int nid;
-+ int digestlen;
- } digests[] = {
-- { CRYPTO_SHA1_HMAC, NID_hmacWithSHA1, },
-- { CRYPTO_RIPEMD160_HMAC, NID_ripemd160, },
-- { CRYPTO_MD5_KPDK, NID_undef, },
-- { CRYPTO_SHA1_KPDK, NID_undef, },
-- { CRYPTO_MD5, NID_md5, },
-- { CRYPTO_SHA1, NID_undef, },
-- { 0, NID_undef, },
-+#if 0
-+ /* HMAC is not supported */
-+ { CRYPTO_MD5_HMAC, NID_hmacWithMD5, 16},
-+ { CRYPTO_SHA1_HMAC, NID_hmacWithSHA1, 20},
-+ { CRYPTO_SHA2_256_HMAC, NID_hmacWithSHA256, 32},
-+ { CRYPTO_SHA2_384_HMAC, NID_hmacWithSHA384, 48},
-+ { CRYPTO_SHA2_512_HMAC, NID_hmacWithSHA512, 64},
-+#endif
-+ { CRYPTO_MD5, NID_md5, 16},
-+ { CRYPTO_SHA1, NID_sha1, 20},
-+ { CRYPTO_SHA2_256, NID_sha256, 32},
-+ { CRYPTO_SHA2_384, NID_sha384, 48},
-+ { CRYPTO_SHA2_512, NID_sha512, 64},
-+ { 0, NID_undef, 0},
- };
- #endif
-
-@@ -186,6 +203,7 @@
-
- if ((fd = open_dev_crypto()) == -1)
- return (-1);
-+#ifndef CRIOGET_NOT_NEEDED
- if (ioctl(fd, CRIOGET, &retfd) == -1)
- return (-1);
-
-@@ -194,9 +212,19 @@
- close(retfd);
- return (-1);
- }
-+#else
-+ retfd = fd;
-+#endif
- return (retfd);
- }
-
-+static void put_dev_crypto(int fd)
-+{
-+#ifndef CRIOGET_NOT_NEEDED
-+ close(fd);
-+#endif
-+}
-+
- /* Caching version for asym operations */
- static int
- get_asym_dev_crypto(void)
-@@ -209,50 +237,6 @@
- }
-
- /*
-- * XXXX this needs to be set for each alg - and determined from
-- * a running card.
-- */
--static int
--cryptodev_max_iv(int cipher)
--{
-- int i;
--
-- for (i = 0; ciphers[i].id; i++)
-- if (ciphers[i].id == cipher)
-- return (ciphers[i].ivmax);
-- return (0);
--}
--
--/*
-- * XXXX this needs to be set for each alg - and determined from
-- * a running card. For now, fake it out - but most of these
-- * for real devices should return 1 for the supported key
-- * sizes the device can handle.
-- */
--static int
--cryptodev_key_length_valid(int cipher, int len)
--{
-- int i;
--
-- for (i = 0; ciphers[i].id; i++)
-- if (ciphers[i].id == cipher)
-- return (ciphers[i].keylen == len);
-- return (0);
--}
--
--/* convert libcrypto nids to cryptodev */
--static int
--cipher_nid_to_cryptodev(int nid)
--{
-- int i;
--
-- for (i = 0; ciphers[i].id; i++)
-- if (ciphers[i].nid == nid)
-- return (ciphers[i].id);
-- return (0);
--}
--
--/*
- * Find out what ciphers /dev/crypto will let us have a session for.
- * XXX note, that some of these openssl doesn't deal with yet!
- * returning them here is harmless, as long as we return NULL
-@@ -264,13 +248,14 @@
- static int nids[CRYPTO_ALGORITHM_MAX];
- struct session_op sess;
- int fd, i, count = 0;
-+ unsigned char fake_key[CRYPTO_CIPHER_MAX_KEY_LEN];
-
- if ((fd = get_dev_crypto()) < 0) {
- *cnids = NULL;
- return (0);
- }
- memset(&sess, 0, sizeof(sess));
-- sess.key = (caddr_t)"123456781234567812345678";
-+ sess.key = (void*)fake_key;
-
- for (i = 0; ciphers[i].id && count < CRYPTO_ALGORITHM_MAX; i++) {
- if (ciphers[i].nid == NID_undef)
-@@ -282,7 +267,7 @@
- ioctl(fd, CIOCFSESSION, &sess.ses) != -1)
- nids[count++] = ciphers[i].nid;
- }
-- close(fd);
-+ put_dev_crypto(fd);
-
- if (count > 0)
- *cnids = nids;
-@@ -291,7 +276,7 @@
- return (count);
- }
-
--#if 0 /* unused */
-+#ifdef USE_CRYPTODEV_DIGESTS
- /*
- * Find out what digests /dev/crypto will let us have a session for.
- * XXX note, that some of these openssl doesn't deal with yet!
-@@ -302,6 +287,7 @@
- get_cryptodev_digests(const int **cnids)
- {
- static int nids[CRYPTO_ALGORITHM_MAX];
-+ unsigned char fake_key[CRYPTO_CIPHER_MAX_KEY_LEN];
- struct session_op sess;
- int fd, i, count = 0;
-
-@@ -310,16 +296,18 @@
- return (0);
- }
- memset(&sess, 0, sizeof(sess));
-+ sess.mackey = fake_key;
- for (i = 0; digests[i].id && count < CRYPTO_ALGORITHM_MAX; i++) {
- if (digests[i].nid == NID_undef)
- continue;
- sess.mac = digests[i].id;
-+ sess.mackeylen = 8;
- sess.cipher = 0;
- if (ioctl(fd, CIOCGSESSION, &sess) != -1 &&
- ioctl(fd, CIOCFSESSION, &sess.ses) != -1)
- nids[count++] = digests[i].nid;
- }
-- close(fd);
-+ put_dev_crypto(fd);
-
- if (count > 0)
- *cnids = nids;
-@@ -327,8 +315,7 @@
- *cnids = NULL;
- return (count);
- }
--
--#endif
-+#endif /* 0 */
-
- /*
- * Find the useable ciphers|digests from dev/crypto - this is the first
-@@ -360,6 +347,9 @@
- static int
- cryptodev_usable_digests(const int **nids)
- {
-+#ifdef USE_CRYPTODEV_DIGESTS
-+ return (get_cryptodev_digests(nids));
-+#else
- /*
- * XXXX just disable all digests for now, because it sucks.
- * we need a better way to decide this - i.e. I may not
-@@ -374,11 +364,12 @@
- */
- *nids = NULL;
- return (0);
-+#endif
- }
-
- static int
- cryptodev_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
-- const unsigned char *in, unsigned int inl)
-+ const unsigned char *in, size_t inl)
- {
- struct crypt_op cryp;
- struct dev_crypto_state *state = ctx->cipher_data;
-@@ -398,14 +389,14 @@
- cryp.ses = sess->ses;
- cryp.flags = 0;
- cryp.len = inl;
-- cryp.src = (caddr_t) in;
-- cryp.dst = (caddr_t) out;
-+ cryp.src = (void*) in;
-+ cryp.dst = (void*) out;
- cryp.mac = 0;
-
- cryp.op = ctx->encrypt ? COP_ENCRYPT : COP_DECRYPT;
-
- if (ctx->cipher->iv_len) {
-- cryp.iv = (caddr_t) ctx->iv;
-+ cryp.iv = (void*) ctx->iv;
- if (!ctx->encrypt) {
- iiv = in + inl - ctx->cipher->iv_len;
- memcpy(save_iv, iiv, ctx->cipher->iv_len);
-@@ -436,28 +427,32 @@
- {
- struct dev_crypto_state *state = ctx->cipher_data;
- struct session_op *sess = &state->d_sess;
-- int cipher;
-+ int cipher = -1, i;
-
-- if ((cipher = cipher_nid_to_cryptodev(ctx->cipher->nid)) == NID_undef)
-- return (0);
--
-- if (ctx->cipher->iv_len > cryptodev_max_iv(cipher))
-- return (0);
-+ for (i = 0; ciphers[i].id; i++)
-+ if (ctx->cipher->nid == ciphers[i].nid &&
-+ ctx->cipher->iv_len <= ciphers[i].ivmax &&
-+ ctx->key_len == ciphers[i].keylen) {
-+ cipher = ciphers[i].id;
-+ break;
-+ }
-
-- if (!cryptodev_key_length_valid(cipher, ctx->key_len))
-+ if (!ciphers[i].id) {
-+ state->d_fd = -1;
- return (0);
-+ }
-
- memset(sess, 0, sizeof(struct session_op));
-
- if ((state->d_fd = get_dev_crypto()) < 0)
- return (0);
-
-- sess->key = (char *)key;
-+ sess->key = (void*)key;
- sess->keylen = ctx->key_len;
- sess->cipher = cipher;
-
- if (ioctl(state->d_fd, CIOCGSESSION, sess) == -1) {
-- close(state->d_fd);
-+ put_dev_crypto(state->d_fd);
- state->d_fd = -1;
- return (0);
- }
-@@ -494,7 +489,7 @@
- } else {
- ret = 1;
- }
-- close(state->d_fd);
-+ put_dev_crypto(state->d_fd);
- state->d_fd = -1;
-
- return (ret);
-@@ -505,6 +500,20 @@
- * gets called when libcrypto requests a cipher NID.
- */
-
-+/* RC4 */
-+const EVP_CIPHER cryptodev_rc4 = {
-+ NID_rc4,
-+ 1, 16, 0,
-+ EVP_CIPH_VARIABLE_LENGTH,
-+ cryptodev_init_key,
-+ cryptodev_cipher,
-+ cryptodev_cleanup,
-+ sizeof(struct dev_crypto_state),
-+ NULL,
-+ NULL,
-+ NULL
-+};
-+
- /* DES CBC EVP */
- const EVP_CIPHER cryptodev_des_cbc = {
- NID_des_cbc,
-@@ -572,6 +581,32 @@
- NULL
- };
-
-+const EVP_CIPHER cryptodev_aes_192_cbc = {
-+ NID_aes_192_cbc,
-+ 16, 24, 16,
-+ EVP_CIPH_CBC_MODE,
-+ cryptodev_init_key,
-+ cryptodev_cipher,
-+ cryptodev_cleanup,
-+ sizeof(struct dev_crypto_state),
-+ EVP_CIPHER_set_asn1_iv,
-+ EVP_CIPHER_get_asn1_iv,
-+ NULL
-+};
-+
-+const EVP_CIPHER cryptodev_aes_256_cbc = {
-+ NID_aes_256_cbc,
-+ 16, 32, 16,
-+ EVP_CIPH_CBC_MODE,
-+ cryptodev_init_key,
-+ cryptodev_cipher,
-+ cryptodev_cleanup,
-+ sizeof(struct dev_crypto_state),
-+ EVP_CIPHER_set_asn1_iv,
-+ EVP_CIPHER_get_asn1_iv,
-+ NULL
-+};
-+
- /*
- * Registered by the ENGINE when used to find out how to deal with
- * a particular NID in the ENGINE. this says what we'll do at the
-@@ -585,6 +620,9 @@
- return (cryptodev_usable_ciphers(nids));
-
- switch (nid) {
-+ case NID_rc4:
-+ *cipher = &cryptodev_rc4;
-+ break;
- case NID_des_ede3_cbc:
- *cipher = &cryptodev_3des_cbc;
- break;
-@@ -600,6 +638,12 @@
- case NID_aes_128_cbc:
- *cipher = &cryptodev_aes_cbc;
- break;
-+ case NID_aes_192_cbc:
-+ *cipher = &cryptodev_aes_192_cbc;
-+ break;
-+ case NID_aes_256_cbc:
-+ *cipher = &cryptodev_aes_256_cbc;
-+ break;
- default:
- *cipher = NULL;
- break;
-@@ -607,6 +651,286 @@
- return (*cipher != NULL);
- }
-
-+
-+#ifdef USE_CRYPTODEV_DIGESTS
-+
-+/* convert digest type to cryptodev */
-+static int
-+digest_nid_to_cryptodev(int nid)
-+{
-+ int i;
-+
-+ for (i = 0; digests[i].id; i++)
-+ if (digests[i].nid == nid)
-+ return (digests[i].id);
-+ return (0);
-+}
-+
-+
-+static int cryptodev_digest_init(EVP_MD_CTX *ctx)
-+{
-+ struct dev_crypto_state *state = ctx->md_data;
-+ struct session_op *sess = &state->d_sess;
-+ int digest;
-+
-+ if ((digest = digest_nid_to_cryptodev(ctx->digest->type)) == NID_undef){
-+ printf("cryptodev_digest_init: Can't get digest \n");
-+ return (0);
-+ }
-+ memset(state, 0, sizeof(struct dev_crypto_state));
-+
-+ if ((state->d_fd = get_dev_crypto()) < 0) {
-+ printf("cryptodev_digest_init: Can't get Dev \n");
-+ return (0);
-+ }
-+
-+ sess->mackey = NULL;
-+ sess->mackeylen = 0;
-+ sess->mac = digest;
-+
-+ if (ioctl(state->d_fd, CIOCGSESSION, sess) < 0) {
-+ put_dev_crypto(state->d_fd);
-+ state->d_fd = -1;
-+ printf("cryptodev_digest_init: Open session failed\n");
-+ return (0);
-+ }
-+
-+ return (1);
-+}
-+
-+static int cryptodev_digest_update(EVP_MD_CTX *ctx, const void *data,
-+ size_t count)
-+{
-+ struct dev_crypto_state *state = ctx->md_data;
-+ struct crypt_op cryp;
-+ struct session_op *sess = &state->d_sess;
-+
-+ if (!data || state->d_fd < 0) {
-+ printf("cryptodev_digest_update: illegal inputs \n");
-+ return (0);
-+ }
-+
-+ if (!count) {
-+ return (1);
-+ }
-+
-+ if (!(ctx->flags & EVP_MD_CTX_FLAG_ONESHOT)) {
-+ /* if application doesn't support one buffer */
-+ state->mac_data = OPENSSL_realloc(state->mac_data, state->mac_len + count);
-+
-+ if (!state->mac_data) {
-+ printf("cryptodev_digest_update: realloc failed\n");
-+ return (0);
-+ }
-+
-+ memcpy(state->mac_data + state->mac_len, data, count);
-+ state->mac_len += count;
-+
-+ return (1);
-+ }
-+
-+ memset(&cryp, 0, sizeof(cryp));
-+
-+ cryp.ses = sess->ses;
-+ cryp.flags = 0;
-+ cryp.len = count;
-+ cryp.src = (void*) data;
-+ cryp.dst = NULL;
-+ cryp.mac = (void*) state->digest_res;
-+ if (ioctl(state->d_fd, CIOCCRYPT, &cryp) < 0) {
-+ printf("cryptodev_digest_update: digest failed\n");
-+ return (0);
-+ }
-+ return (1);
-+}
-+
-+
-+static int cryptodev_digest_final(EVP_MD_CTX *ctx, unsigned char *md)
-+{
-+ struct crypt_op cryp;
-+ struct dev_crypto_state *state = ctx->md_data;
-+ struct session_op *sess = &state->d_sess;
-+
-+ if (!md || state->d_fd < 0) {
-+ printf("cryptodev_digest_final: illegal input\n");
-+ return(0);
-+ }
-+
-+ if (! (ctx->flags & EVP_MD_CTX_FLAG_ONESHOT) ) {
-+ /* if application doesn't support one buffer */
-+ memset(&cryp, 0, sizeof(cryp));
-+ cryp.ses = sess->ses;
-+ cryp.flags = 0;
-+ cryp.len = state->mac_len;
-+ cryp.src = state->mac_data;
-+ cryp.dst = NULL;
-+ cryp.mac = (void*)md;
-+ if (ioctl(state->d_fd, CIOCCRYPT, &cryp) < 0) {
-+ printf("cryptodev_digest_final: digest failed\n");
-+ return (0);
-+ }
-+
-+ return 1;
-+ }
-+
-+ memcpy(md, state->digest_res, ctx->digest->md_size);
-+
-+ return 1;
-+}
-+
-+
-+static int cryptodev_digest_cleanup(EVP_MD_CTX *ctx)
-+{
-+ int ret = 1;
-+ struct dev_crypto_state *state = ctx->md_data;
-+ struct session_op *sess = &state->d_sess;
-+
-+ if (state == NULL)
-+ return 0;
-+
-+ if (state->d_fd < 0) {
-+ printf("cryptodev_digest_cleanup: illegal input\n");
-+ return (0);
-+ }
-+
-+ if (state->mac_data) {
-+ OPENSSL_free(state->mac_data);
-+ state->mac_data = NULL;
-+ state->mac_len = 0;
-+ }
-+
-+ if (ioctl(state->d_fd, CIOCFSESSION, &sess->ses) < 0) {
-+ printf("cryptodev_digest_cleanup: failed to close session\n");
-+ ret = 0;
-+ } else {
-+ ret = 1;
-+ }
-+ put_dev_crypto(state->d_fd);
-+ state->d_fd = -1;
-+
-+ return (ret);
-+}
-+
-+static int cryptodev_digest_copy(EVP_MD_CTX *to,const EVP_MD_CTX *from)
-+{
-+ struct dev_crypto_state *fstate = from->md_data;
-+ struct dev_crypto_state *dstate = to->md_data;
-+ struct session_op *sess;
-+ int digest;
-+
-+ if (dstate == NULL || fstate == NULL)
-+ return 1;
-+
-+ memcpy(dstate, fstate, sizeof(struct dev_crypto_state));
-+
-+ sess = &dstate->d_sess;
-+
-+ digest = digest_nid_to_cryptodev(to->digest->type);
-+
-+ sess->mackey = NULL;
-+ sess->mackeylen = 0;
-+ sess->mac = digest;
-+
-+ dstate->d_fd = get_dev_crypto();
-+
-+ if (ioctl(dstate->d_fd, CIOCGSESSION, sess) < 0) {
-+ put_dev_crypto(dstate->d_fd);
-+ dstate->d_fd = -1;
-+ printf("cryptodev_digest_init: Open session failed\n");
-+ return (0);
-+ }
-+
-+ if (fstate->mac_len != 0) {
-+ if (fstate->mac_data != NULL)
-+ {
-+ dstate->mac_data = OPENSSL_malloc(fstate->mac_len);
-+ memcpy(dstate->mac_data, fstate->mac_data, fstate->mac_len);
-+ dstate->mac_len = fstate->mac_len;
-+ }
-+ }
-+
-+ return 1;
-+}
-+
-+
-+static const EVP_MD cryptodev_sha1 = {
-+ NID_sha1,
-+ NID_sha1WithRSAEncryption,
-+ SHA_DIGEST_LENGTH,
-+ EVP_MD_FLAG_PKEY_METHOD_SIGNATURE|EVP_MD_FLAG_DIGALGID_ABSENT|EVP_MD_FLAG_ONESHOT,
-+ cryptodev_digest_init,
-+ cryptodev_digest_update,
-+ cryptodev_digest_final,
-+ cryptodev_digest_copy,
-+ cryptodev_digest_cleanup,
-+ EVP_PKEY_RSA_method,
-+ SHA_CBLOCK,
-+ sizeof(EVP_MD *)+sizeof(struct dev_crypto_state),
-+};
-+
-+static const EVP_MD cryptodev_sha256 = {
-+ NID_sha256,
-+ NID_sha256WithRSAEncryption,
-+ SHA256_DIGEST_LENGTH,
-+ EVP_MD_FLAG_PKEY_METHOD_SIGNATURE|EVP_MD_FLAG_DIGALGID_ABSENT|EVP_MD_FLAG_ONESHOT,
-+ cryptodev_digest_init,
-+ cryptodev_digest_update,
-+ cryptodev_digest_final,
-+ cryptodev_digest_copy,
-+ cryptodev_digest_cleanup,
-+ EVP_PKEY_RSA_method,
-+ SHA256_CBLOCK,
-+ sizeof(EVP_MD *)+sizeof(struct dev_crypto_state),
-+};
-+
-+static const EVP_MD cryptodev_sha384 = {
-+ NID_sha384,
-+ NID_sha384WithRSAEncryption,
-+ SHA384_DIGEST_LENGTH,
-+ EVP_MD_FLAG_PKEY_METHOD_SIGNATURE|EVP_MD_FLAG_DIGALGID_ABSENT|EVP_MD_FLAG_ONESHOT,
-+ cryptodev_digest_init,
-+ cryptodev_digest_update,
-+ cryptodev_digest_final,
-+ cryptodev_digest_copy,
-+ cryptodev_digest_cleanup,
-+ EVP_PKEY_RSA_method,
-+ SHA512_CBLOCK,
-+ sizeof(EVP_MD *)+sizeof(struct dev_crypto_state),
-+};
-+
-+static const EVP_MD cryptodev_sha512 = {
-+ NID_sha512,
-+ NID_sha512WithRSAEncryption,
-+ SHA512_DIGEST_LENGTH,
-+ EVP_MD_FLAG_PKEY_METHOD_SIGNATURE|EVP_MD_FLAG_DIGALGID_ABSENT|EVP_MD_FLAG_ONESHOT,
-+ cryptodev_digest_init,
-+ cryptodev_digest_update,
-+ cryptodev_digest_final,
-+ cryptodev_digest_copy,
-+ cryptodev_digest_cleanup,
-+ EVP_PKEY_RSA_method,
-+ SHA512_CBLOCK,
-+ sizeof(EVP_MD *)+sizeof(struct dev_crypto_state),
-+};
-+
-+static const EVP_MD cryptodev_md5 = {
-+ NID_md5,
-+ NID_md5WithRSAEncryption,
-+ 16 /* MD5_DIGEST_LENGTH */,
-+ EVP_MD_FLAG_PKEY_METHOD_SIGNATURE|EVP_MD_FLAG_DIGALGID_ABSENT|EVP_MD_FLAG_ONESHOT,
-+ cryptodev_digest_init,
-+ cryptodev_digest_update,
-+ cryptodev_digest_final,
-+ cryptodev_digest_copy,
-+ cryptodev_digest_cleanup,
-+ EVP_PKEY_RSA_method,
-+ 64 /* MD5_CBLOCK */,
-+ sizeof(EVP_MD *)+sizeof(struct dev_crypto_state),
-+};
-+
-+#endif /* USE_CRYPTODEV_DIGESTS */
-+
-+
- static int
- cryptodev_engine_digests(ENGINE *e, const EVP_MD **digest,
- const int **nids, int nid)
-@@ -615,10 +939,24 @@
- return (cryptodev_usable_digests(nids));
-
- switch (nid) {
-+#ifdef USE_CRYPTODEV_DIGESTS
- case NID_md5:
-- *digest = NULL; /* need to make a clean md5 critter */
-+ *digest = &cryptodev_md5;
- break;
-+ case NID_sha1:
-+ *digest = &cryptodev_sha1;
-+ break;
-+ case NID_sha256:
-+ *digest = &cryptodev_sha256;
-+ break;
-+ case NID_sha384:
-+ *digest = &cryptodev_sha384;
-+ break;
-+ case NID_sha512:
-+ *digest = &cryptodev_sha512;
-+ break;
- default:
-+#endif /* USE_CRYPTODEV_DIGESTS */
- *digest = NULL;
- break;
- }
-@@ -646,8 +984,9 @@
- b = malloc(bytes);
- if (b == NULL)
- return (1);
-+ memset(b, 0, bytes);
-
-- crp->crp_p = (char *)b;
-+ crp->crp_p = (void*) b;
- crp->crp_nbits = bits;
-
- for (i = 0, j = 0; i < a->top; i++) {
-@@ -690,7 +1029,7 @@
- {
- int i;
-
-- for (i = 0; i <= kop->crk_iparams + kop->crk_oparams; i++) {
-+ for (i = 0; i < kop->crk_iparams + kop->crk_oparams; i++) {
- if (kop->crk_param[i].crp_p)
- free(kop->crk_param[i].crp_p);
- kop->crk_param[i].crp_p = NULL;
-@@ -776,8 +1115,9 @@
- cryptodev_rsa_nocrt_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx)
- {
- int r;
--
-+ ctx = BN_CTX_new();
- r = cryptodev_bn_mod_exp(r0, I, rsa->d, rsa->n, ctx, NULL);
-+ BN_CTX_free(ctx);
- return (r);
- }
-
-@@ -899,7 +1239,7 @@
- kop.crk_op = CRK_DSA_SIGN;
-
- /* inputs: dgst dsa->p dsa->q dsa->g dsa->priv_key */
-- kop.crk_param[0].crp_p = (caddr_t)dgst;
-+ kop.crk_param[0].crp_p = (void*)dgst;
- kop.crk_param[0].crp_nbits = dlen * 8;
- if (bn2crparam(dsa->p, &kop.crk_param[1]))
- goto err;
-@@ -939,7 +1279,7 @@
- kop.crk_op = CRK_DSA_VERIFY;
-
- /* inputs: dgst dsa->p dsa->q dsa->g dsa->pub_key sig->r sig->s */
-- kop.crk_param[0].crp_p = (caddr_t)dgst;
-+ kop.crk_param[0].crp_p = (void*)dgst;
- kop.crk_param[0].crp_nbits = dlen * 8;
- if (bn2crparam(dsa->p, &kop.crk_param[1]))
- goto err;
-@@ -1017,7 +1357,7 @@
- goto err;
- kop.crk_iparams = 3;
-
-- kop.crk_param[3].crp_p = (char *)key;
-+ kop.crk_param[3].crp_p = (void*) key;
- kop.crk_param[3].crp_nbits = keylen * 8;
- kop.crk_oparams = 1;
-
-@@ -1048,7 +1388,7 @@
- * but I expect we'll want some options soon.
- */
- static int
--cryptodev_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f)())
-+cryptodev_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f)(void))
- {
- #ifdef HAVE_SYSLOG_R
- struct syslog_data sd = SYSLOG_DATA_INIT;
-@@ -1084,14 +1424,14 @@
- * find out what asymmetric crypto algorithms we support
- */
- if (ioctl(fd, CIOCASYMFEAT, &cryptodev_asymfeat) == -1) {
-- close(fd);
-+ put_dev_crypto(fd);
- ENGINE_free(engine);
- return;
- }
-- close(fd);
-+ put_dev_crypto(fd);
-
- if (!ENGINE_set_id(engine, "cryptodev") ||
-- !ENGINE_set_name(engine, "BSD cryptodev engine") ||
-+ !ENGINE_set_name(engine, "cryptodev engine") ||
- !ENGINE_set_ciphers(engine, cryptodev_engine_ciphers) ||
- !ENGINE_set_digests(engine, cryptodev_engine_digests) ||
- !ENGINE_set_ctrl_function(engine, cryptodev_ctrl) ||
-diff -Naur openssl-0.9.8u.org/crypto/engine/engine.h openssl-0.9.8u/crypto/engine/engine.h
---- openssl-0.9.8u.org/crypto/engine/engine.h 2010-02-09 15:18:15.000000000 +0100
-+++ openssl-0.9.8u/crypto/engine/engine.h 2012-03-27 14:05:15.000000000 +0200
-@@ -705,9 +705,7 @@
- * values. */
- void *ENGINE_get_static_state(void);
-
--#if defined(__OpenBSD__) || defined(__FreeBSD__)
- void ENGINE_setup_bsd_cryptodev(void);
--#endif
-
- /* BEGIN ERROR CODES */
- /* The following lines are auto generated by the script mkerr.pl. Any changes
-diff -Naur openssl-0.9.8u.org/crypto/evp/c_all.c openssl-0.9.8u/crypto/evp/c_all.c
---- openssl-0.9.8u.org/crypto/evp/c_all.c 2004-08-29 18:36:04.000000000 +0200
-+++ openssl-0.9.8u/crypto/evp/c_all.c 2012-03-27 14:05:15.000000000 +0200
-@@ -83,8 +83,6 @@
- OpenSSL_add_all_ciphers();
- OpenSSL_add_all_digests();
- #ifndef OPENSSL_NO_ENGINE
--# if defined(__OpenBSD__) || defined(__FreeBSD__)
- ENGINE_setup_bsd_cryptodev();
--# endif
- #endif
- }
+++ /dev/null
-diff -up openssl-1.0.1-beta2/Configure.rpmbuild openssl-1.0.1-beta2/Configure
---- openssl-1.0.1-beta2/Configure.rpmbuild 2012-01-05 01:07:34.000000000 +0100
-+++ openssl-1.0.1-beta2/Configure 2012-02-02 12:43:56.547409325 +0100
-@@ -343,23 +343,23 @@ my %table=(
- ####
- # *-generic* is endian-neutral target, but ./config is free to
- # throw in -D[BL]_ENDIAN, whichever appropriate...
--"linux-generic32","gcc:-DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
--"linux-ppc", "gcc:-DB_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:${ppc32_asm}:linux32:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"linux-generic32","gcc:-DTERMIO -Wall \$(RPM_OPT_FLAGS)::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC:\$(RPM_OPT_FLAGS):.so.\$(SHLIB_SONAMEVER)",
-+"linux-ppc", "gcc:-DB_ENDIAN -DTERMIO -Wall \$(RPM_OPT_FLAGS)::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:${ppc32_asm}:linux32:dlfcn:linux-shared:-fPIC:\$(RPM_OPT_FLAGS):.so.\$(SHLIB_SONAMEVER)",
- # It's believed that majority of ARM toolchains predefine appropriate -march.
- # If you compiler does not, do complement config command line with one!
--"linux-armv4", "gcc:-DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${armv4_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"linux-armv4", "gcc:-DTERMIO -Wall \$(RPM_OPT_FLAGS)::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${armv4_asm}:dlfcn:linux-shared:-fPIC:\$(RPM_OPT_FLAGS):.so.\$(SHLIB_SONAMEVER)",
- #### IA-32 targets...
- "linux-ia32-icc", "icc:-DL_ENDIAN -DTERMIO -O2 -no_cpprt::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-KPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
--"linux-elf", "gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"linux-elf", "gcc:-DL_ENDIAN -DTERMIO -Wall \$(RPM_OPT_FLAGS)::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC:\$(RPM_OPT_FLAGS):.so.\$(SHLIB_SONAMEVER)",
- "linux-aout", "gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -march=i486 -Wall::(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_asm}:a.out",
- ####
--"linux-generic64","gcc:-DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
--"linux-ppc64", "gcc:-m64 -DB_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:${ppc64_asm}:linux64:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
--"linux-ia64", "gcc:-DL_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_UNROLL DES_INT:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"linux-generic64","gcc:-DTERMIO -Wall \$(RPM_OPT_FLAGS)::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC:\$(RPM_OPT_FLAGS):.so.\$(SHLIB_SONAMEVER)",
-+"linux-ppc64", "gcc:-m64 -DB_ENDIAN -DTERMIO -Wall \$(RPM_OPT_FLAGS)::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:${ppc64_asm}:linux64:dlfcn:linux-shared:-fPIC:-m64 \$(RPM_OPT_FLAGS):.so.\$(SHLIB_SONAMEVER):::64",
-+"linux-ia64", "gcc:-DL_ENDIAN -DTERMIO -Wall \$(RPM_OPT_FLAGS)::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_UNROLL DES_INT:${ia64_asm}:dlfcn:linux-shared:-fPIC:\$(RPM_OPT_FLAGS):.so.\$(SHLIB_SONAMEVER)",
- "linux-ia64-ecc","ecc:-DL_ENDIAN -DTERMIO -O2 -Wall -no_cpprt::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
- "linux-ia64-icc","icc:-DL_ENDIAN -DTERMIO -O2 -Wall -no_cpprt::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_RISC1 DES_INT:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
--"linux-x86_64", "gcc:-m64 -DL_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
--"linux64-s390x", "gcc:-m64 -DB_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL:${s390x_asm}:64:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
-+"linux-x86_64", "gcc:-m64 -DL_ENDIAN -DTERMIO -Wall \$(RPM_OPT_FLAGS)::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64 \$(RPM_OPT_FLAGS):.so.\$(SHLIB_SONAMEVER):::64",
-+"linux64-s390x", "gcc:-m64 -DB_ENDIAN -DTERMIO -Wall \$(RPM_OPT_FLAGS)::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL:${s390x_asm}:64:dlfcn:linux-shared:-fPIC:-m64 \$(RPM_OPT_FLAGS):.so.\$(SHLIB_SONAMEVER):::64",
- #### So called "highgprs" target for z/Architecture CPUs
- # "Highgprs" is kernel feature first implemented in Linux 2.6.32, see
- # /proc/cpuinfo. The idea is to preserve most significant bits of
-@@ -373,16 +373,16 @@ my %table=(
- # ldconfig and run-time linker to autodiscover. Unfortunately it
- # doesn't work just yet, because of couple of bugs in glibc
- # sysdeps/s390/dl-procinfo.c affecting ldconfig and ld.so.1...
--"linux32-s390x", "gcc:-m31 -Wa,-mzarch -DB_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL:".eval{my $asm=$s390x_asm;$asm=~s/bn\-s390x\.o/bn_asm.o/;$asm}.":31:dlfcn:linux-shared:-fPIC:-m31:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/highgprs",
-+"linux32-s390x", "gcc:-m31 -Wa,-mzarch -DB_ENDIAN -DTERMIO -Wall \$(RPM_OPT_FLAGS)::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL:".eval{my $asm=$s390x_asm;$asm=~s/bn\-s390x\.o/bn_asm.o/;$asm}.":31:dlfcn:linux-shared:-fPIC:-m31 \$(RPM_OPT_FLAGS):.so.\$(SHLIB_SONAMEVER):::/highgprs",
- #### SPARC Linux setups
- # Ray Miller <ray.miller@computing-services.oxford.ac.uk> has patiently
- # assisted with debugging of following two configs.
--"linux-sparcv8","gcc:-mv8 -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall -DBN_DIV2W::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${sparcv8_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"linux-sparcv8","gcc:-DB_ENDIAN -DTERMIO -Wall \$(RPM_OPT_FLAGS) -DBN_DIV2W::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${sparcv8_asm}:dlfcn:linux-shared:-fPIC:\$(RPM_OPT_FLAGS):.so.\$(SHLIB_SONAMEVER)",
- # it's a real mess with -mcpu=ultrasparc option under Linux, but
- # -Wa,-Av8plus should do the trick no matter what.
--"linux-sparcv9","gcc:-m32 -mcpu=ultrasparc -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall -Wa,-Av8plus -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:linux-shared:-fPIC:-m32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"linux-sparcv9","gcc:-DB_ENDIAN -DTERMIO -Wall \$(RPM_OPT_FLAGS) -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:linux-shared:-fPIC:\$(RPM_OPT_FLAGS):.so.\$(SHLIB_SONAMEVER)",
- # GCC 3.1 is a requirement
--"linux64-sparcv9","gcc:-m64 -mcpu=ultrasparc -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT:ULTRASPARC:-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
-+"linux64-sparcv9","gcc:-DB_ENDIAN -DTERMIO -Wall \$(RPM_OPT_FLAGS)::-D_REENTRANT:ULTRASPARC:-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:linux-shared:-fPIC:\$(RPM_OPT_FLAGS):.so.\$(SHLIB_SONAMEVER):::64",
- #### Alpha Linux with GNU C and Compaq C setups
- # Special notes:
- # - linux-alpha+bwx-gcc is ment to be used from ./config only. If you
-@@ -396,8 +396,8 @@ my %table=(
- #
- # <appro@fy.chalmers.se>
- #
--"linux-alpha-gcc","gcc:-O3 -DL_ENDIAN -DTERMIO::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_RISC1 DES_UNROLL:${alpha_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
--"linux-alpha+bwx-gcc","gcc:-O3 -DL_ENDIAN -DTERMIO::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:${alpha_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"linux-alpha-gcc","gcc:-DL_ENDIAN -DTERMIO -Wall \$(RPM_OPT_FLAGS)::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_RISC1 DES_UNROLL:${alpha_asm}:dlfcn:linux-shared:-fPIC:\$(RPM_OPT_FLAGS):.so.\$(SHLIB_SONAMEVER)",
-+"linux-alpha+bwx-gcc","gcc:-DL_ENDIAN -DTERMIO -Wall \$(RPM_OPT_FLAGS)::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:${alpha_asm}:dlfcn:linux-shared:-fPIC:\$(RPM_OPT_FLAGS):.so.\$(SHLIB_SONAMEVER)",
- "linux-alpha-ccc","ccc:-fast -readonly_strings -DL_ENDIAN -DTERMIO::-D_REENTRANT:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL:${alpha_asm}",
- "linux-alpha+bwx-ccc","ccc:-fast -readonly_strings -DL_ENDIAN -DTERMIO::-D_REENTRANT:::SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL:${alpha_asm}",
-
-@@ -1678,7 +1678,7 @@ while (<IN>)
- elsif ($shared_extension ne "" && $shared_extension =~ /^\.s([ol])\.[^\.]*\.[^\.]*$/)
- {
- my $sotmp = $1;
-- s/^SHARED_LIBS_LINK_EXTS=.*/SHARED_LIBS_LINK_EXTS=.s$sotmp.\$(SHLIB_MAJOR) .s$sotmp/;
-+ s/^SHARED_LIBS_LINK_EXTS=.*/SHARED_LIBS_LINK_EXTS=.s$sotmp.\$(SHLIB_SONAMEVER) .s$sotmp/;
- }
- elsif ($shared_extension ne "" && $shared_extension =~ /^\.[^\.]*\.[^\.]*\.dylib$/)
- {
-diff -up openssl-1.0.1-beta2/Makefile.org.rpmbuild openssl-1.0.1-beta2/Makefile.org
---- openssl-1.0.1-beta2/Makefile.org.rpmbuild 2011-12-27 16:17:50.000000000 +0100
-+++ openssl-1.0.1-beta2/Makefile.org 2012-02-02 12:30:23.652495435 +0100
-@@ -10,6 +10,7 @@ SHLIB_VERSION_HISTORY=
- SHLIB_MAJOR=
- SHLIB_MINOR=
- SHLIB_EXT=
-+SHLIB_SONAMEVER=10
- PLATFORM=dist
- OPTIONS=
- CONFIGURE_ARGS=
-@@ -333,10 +334,9 @@ clean-shared:
- link-shared:
- @ set -e; for i in $(SHLIBDIRS); do \
- $(MAKE) -f $(HERE)/Makefile.shared -e $(BUILDENV) \
-- LIBNAME=$$i LIBVERSION=$(SHLIB_MAJOR).$(SHLIB_MINOR) \
-+ LIBNAME=$$i LIBVERSION=$(SHLIB_SONAMEVER) \
- LIBCOMPATVERSIONS=";$(SHLIB_VERSION_HISTORY)" \
- symlink.$(SHLIB_TARGET); \
-- libs="$$libs -l$$i"; \
- done
-
- build-shared: do_$(SHLIB_TARGET) link-shared
-@@ -347,7 +347,7 @@ do_$(SHLIB_TARGET):
- libs="$(LIBKRB5) $$libs"; \
- fi; \
- $(CLEARENV) && $(MAKE) -f Makefile.shared -e $(BUILDENV) \
-- LIBNAME=$$i LIBVERSION=$(SHLIB_MAJOR).$(SHLIB_MINOR) \
-+ LIBNAME=$$i LIBVERSION=$(SHLIB_SONAMEVER) \
- LIBCOMPATVERSIONS=";$(SHLIB_VERSION_HISTORY)" \
- LIBDEPS="$$libs $(EX_LIBS)" \
- link_a.$(SHLIB_TARGET); \
+++ /dev/null
-Patch created by Michael Tremer <michael.tremer@ipfire.org> from
- http://download.gna.org/cryptodev-linux/cryptodev-linux-1.6.tar.gz
-
-diff -Nur openssl-1.0.1e-vanilla/crypto/cryptodev.h openssl-1.0.1e/crypto/cryptodev.h
---- openssl-1.0.1e-vanilla/crypto/cryptodev.h 1970-01-01 00:00:00.000000000 +0000
-+++ openssl-1.0.1e/crypto/cryptodev.h 2013-12-25 14:27:20.907326820 +0000
-@@ -0,0 +1,292 @@
-+/* This is a source compatible implementation with the original API of
-+ * cryptodev by Angelos D. Keromytis, found at openbsd cryptodev.h.
-+ * Placed under public domain */
-+
-+#ifndef L_CRYPTODEV_H
-+#define L_CRYPTODEV_H
-+
-+#include <linux/types.h>
-+#ifndef __KERNEL__
-+#define __user
-+#endif
-+
-+/* API extensions for linux */
-+#define CRYPTO_HMAC_MAX_KEY_LEN 512
-+#define CRYPTO_CIPHER_MAX_KEY_LEN 64
-+
-+/* All the supported algorithms
-+ */
-+enum cryptodev_crypto_op_t {
-+ CRYPTO_DES_CBC = 1,
-+ CRYPTO_3DES_CBC = 2,
-+ CRYPTO_BLF_CBC = 3,
-+ CRYPTO_CAST_CBC = 4,
-+ CRYPTO_SKIPJACK_CBC = 5,
-+ CRYPTO_MD5_HMAC = 6,
-+ CRYPTO_SHA1_HMAC = 7,
-+ CRYPTO_RIPEMD160_HMAC = 8,
-+ CRYPTO_MD5_KPDK = 9,
-+ CRYPTO_SHA1_KPDK = 10,
-+ CRYPTO_RIJNDAEL128_CBC = 11,
-+ CRYPTO_AES_CBC = CRYPTO_RIJNDAEL128_CBC,
-+ CRYPTO_ARC4 = 12,
-+ CRYPTO_MD5 = 13,
-+ CRYPTO_SHA1 = 14,
-+ CRYPTO_DEFLATE_COMP = 15,
-+ CRYPTO_NULL = 16,
-+ CRYPTO_LZS_COMP = 17,
-+ CRYPTO_SHA2_256_HMAC = 18,
-+ CRYPTO_SHA2_384_HMAC = 19,
-+ CRYPTO_SHA2_512_HMAC = 20,
-+ CRYPTO_AES_CTR = 21,
-+ CRYPTO_AES_XTS = 22,
-+ CRYPTO_AES_ECB = 23,
-+ CRYPTO_AES_GCM = 50,
-+
-+ CRYPTO_CAMELLIA_CBC = 101,
-+ CRYPTO_RIPEMD160,
-+ CRYPTO_SHA2_224,
-+ CRYPTO_SHA2_256,
-+ CRYPTO_SHA2_384,
-+ CRYPTO_SHA2_512,
-+ CRYPTO_SHA2_224_HMAC,
-+ CRYPTO_ALGORITHM_ALL, /* Keep updated - see below */
-+};
-+
-+#define CRYPTO_ALGORITHM_MAX (CRYPTO_ALGORITHM_ALL - 1)
-+
-+/* Values for ciphers */
-+#define DES_BLOCK_LEN 8
-+#define DES3_BLOCK_LEN 8
-+#define RIJNDAEL128_BLOCK_LEN 16
-+#define AES_BLOCK_LEN RIJNDAEL128_BLOCK_LEN
-+#define CAMELLIA_BLOCK_LEN 16
-+#define BLOWFISH_BLOCK_LEN 8
-+#define SKIPJACK_BLOCK_LEN 8
-+#define CAST128_BLOCK_LEN 8
-+
-+/* the maximum of the above */
-+#define EALG_MAX_BLOCK_LEN 16
-+
-+/* Values for hashes/MAC */
-+#define AALG_MAX_RESULT_LEN 64
-+
-+/* maximum length of verbose alg names (depends on CRYPTO_MAX_ALG_NAME) */
-+#define CRYPTODEV_MAX_ALG_NAME 64
-+
-+#define HASH_MAX_LEN 64
-+
-+/* input of CIOCGSESSION */
-+struct session_op {
-+ /* Specify either cipher or mac
-+ */
-+ __u32 cipher; /* cryptodev_crypto_op_t */
-+ __u32 mac; /* cryptodev_crypto_op_t */
-+
-+ __u32 keylen;
-+ __u8 __user *key;
-+ __u32 mackeylen;
-+ __u8 __user *mackey;
-+
-+ __u32 ses; /* session identifier */
-+};
-+
-+struct session_info_op {
-+ __u32 ses; /* session identifier */
-+
-+ /* verbose names for the requested ciphers */
-+ struct alg_info {
-+ char cra_name[CRYPTODEV_MAX_ALG_NAME];
-+ char cra_driver_name[CRYPTODEV_MAX_ALG_NAME];
-+ } cipher_info, hash_info;
-+
-+ __u16 alignmask; /* alignment constraints */
-+ __u32 flags; /* SIOP_FLAGS_* */
-+};
-+
-+/* If this flag is set then this algorithm uses
-+ * a driver only available in kernel (software drivers,
-+ * or drivers based on instruction sets do not set this flag).
-+ *
-+ * If multiple algorithms are involved (as in AEAD case), then
-+ * if one of them is kernel-driver-only this flag will be set.
-+ */
-+#define SIOP_FLAG_KERNEL_DRIVER_ONLY 1
-+
-+#define COP_ENCRYPT 0
-+#define COP_DECRYPT 1
-+
-+/* input of CIOCCRYPT */
-+struct crypt_op {
-+ __u32 ses; /* session identifier */
-+ __u16 op; /* COP_ENCRYPT or COP_DECRYPT */
-+ __u16 flags; /* see COP_FLAG_* */
-+ __u32 len; /* length of source data */
-+ __u8 __user *src; /* source data */
-+ __u8 __user *dst; /* pointer to output data */
-+ /* pointer to output data for hash/MAC operations */
-+ __u8 __user *mac;
-+ /* initialization vector for encryption operations */
-+ __u8 __user *iv;
-+};
-+
-+/* input of CIOCAUTHCRYPT */
-+struct crypt_auth_op {
-+ __u32 ses; /* session identifier */
-+ __u16 op; /* COP_ENCRYPT or COP_DECRYPT */
-+ __u16 flags; /* see COP_FLAG_AEAD_* */
-+ __u32 len; /* length of source data */
-+ __u32 auth_len; /* length of auth data */
-+ __u8 __user *auth_src; /* authenticated-only data */
-+
-+ /* The current implementation is more efficient if data are
-+ * encrypted in-place (src==dst). */
-+ __u8 __user *src; /* data to be encrypted and authenticated */
-+ __u8 __user *dst; /* pointer to output data. Must have
-+ * space for tag. For TLS this should be at least
-+ * len + tag_size + block_size for padding */
-+
-+ __u8 __user *tag; /* where the tag will be copied to. TLS mode
-+ * doesn't use that as tag is copied to dst.
-+ * SRTP mode copies tag there. */
-+ __u32 tag_len; /* the length of the tag. Use zero for digest size or max tag. */
-+
-+ /* initialization vector for encryption operations */
-+ __u8 __user *iv;
-+ __u32 iv_len;
-+};
-+
-+/* In plain AEAD mode the following are required:
-+ * flags : 0
-+ * iv : the initialization vector (12 bytes)
-+ * auth_len: the length of the data to be authenticated
-+ * auth_src: the data to be authenticated
-+ * len : length of data to be encrypted
-+ * src : the data to be encrypted
-+ * dst : space to hold encrypted data. It must have
-+ * at least a size of len + tag_size.
-+ * tag_size: the size of the desired authentication tag or zero to use
-+ * the maximum tag output.
-+ *
-+ * Note tag isn't being used because the Linux AEAD interface
-+ * copies the tag just after data.
-+ */
-+
-+/* In TLS mode (used for CBC ciphers that required padding)
-+ * the following are required:
-+ * flags : COP_FLAG_AEAD_TLS_TYPE
-+ * iv : the initialization vector
-+ * auth_len: the length of the data to be authenticated only
-+ * len : length of data to be encrypted
-+ * auth_src: the data to be authenticated
-+ * src : the data to be encrypted
-+ * dst : space to hold encrypted data (preferably in-place). It must have
-+ * at least a size of len + tag_size + blocksize.
-+ * tag_size: the size of the desired authentication tag or zero to use
-+ * the default mac output.
-+ *
-+ * Note that the padding used is the minimum padding.
-+ */
-+
-+/* In SRTP mode the following are required:
-+ * flags : COP_FLAG_AEAD_SRTP_TYPE
-+ * iv : the initialization vector
-+ * auth_len: the length of the data to be authenticated. This must
-+ * include the SRTP header + SRTP payload (data to be encrypted) + rest
-+ *
-+ * len : length of data to be encrypted
-+ * auth_src: pointer the data to be authenticated. Should point at the same buffer as src.
-+ * src : pointer to the data to be encrypted.
-+ * dst : This is mandatory to be the same as src (in-place only).
-+ * tag_size: the size of the desired authentication tag or zero to use
-+ * the default mac output.
-+ * tag : Pointer to an address where the authentication tag will be copied.
-+ */
-+
-+
-+/* struct crypt_op flags */
-+
-+#define COP_FLAG_NONE (0 << 0) /* totally no flag */
-+#define COP_FLAG_UPDATE (1 << 0) /* multi-update hash mode */
-+#define COP_FLAG_FINAL (1 << 1) /* multi-update final hash mode */
-+#define COP_FLAG_WRITE_IV (1 << 2) /* update the IV during operation */
-+#define COP_FLAG_NO_ZC (1 << 3) /* do not zero-copy */
-+#define COP_FLAG_AEAD_TLS_TYPE (1 << 4) /* authenticate and encrypt using the
-+ * TLS protocol rules */
-+#define COP_FLAG_AEAD_SRTP_TYPE (1 << 5) /* authenticate and encrypt using the
-+ * SRTP protocol rules */
-+#define COP_FLAG_RESET (1 << 6) /* multi-update reset the state.
-+ * should be used in combination
-+ * with COP_FLAG_UPDATE */
-+
-+
-+/* Stuff for bignum arithmetic and public key
-+ * cryptography - not supported yet by linux
-+ * cryptodev.
-+ */
-+
-+#define CRYPTO_ALG_FLAG_SUPPORTED 1
-+#define CRYPTO_ALG_FLAG_RNG_ENABLE 2
-+#define CRYPTO_ALG_FLAG_DSA_SHA 4
-+
-+struct crparam {
-+ __u8 *crp_p;
-+ __u32 crp_nbits;
-+};
-+
-+#define CRK_MAXPARAM 8
-+
-+/* input of CIOCKEY */
-+struct crypt_kop {
-+ __u32 crk_op; /* cryptodev_crk_ot_t */
-+ __u32 crk_status;
-+ __u16 crk_iparams;
-+ __u16 crk_oparams;
-+ __u32 crk_pad1;
-+ struct crparam crk_param[CRK_MAXPARAM];
-+};
-+
-+enum cryptodev_crk_op_t {
-+ CRK_MOD_EXP = 0,
-+ CRK_MOD_EXP_CRT = 1,
-+ CRK_DSA_SIGN = 2,
-+ CRK_DSA_VERIFY = 3,
-+ CRK_DH_COMPUTE_KEY = 4,
-+ CRK_ALGORITHM_ALL
-+};
-+
-+#define CRK_ALGORITHM_MAX (CRK_ALGORITHM_ALL-1)
-+
-+/* features to be queried with CIOCASYMFEAT ioctl
-+ */
-+#define CRF_MOD_EXP (1 << CRK_MOD_EXP)
-+#define CRF_MOD_EXP_CRT (1 << CRK_MOD_EXP_CRT)
-+#define CRF_DSA_SIGN (1 << CRK_DSA_SIGN)
-+#define CRF_DSA_VERIFY (1 << CRK_DSA_VERIFY)
-+#define CRF_DH_COMPUTE_KEY (1 << CRK_DH_COMPUTE_KEY)
-+
-+
-+/* ioctl's. Compatible with old linux cryptodev.h
-+ */
-+#define CRIOGET _IOWR('c', 101, __u32)
-+#define CIOCGSESSION _IOWR('c', 102, struct session_op)
-+#define CIOCFSESSION _IOW('c', 103, __u32)
-+#define CIOCCRYPT _IOWR('c', 104, struct crypt_op)
-+#define CIOCKEY _IOWR('c', 105, struct crypt_kop)
-+#define CIOCASYMFEAT _IOR('c', 106, __u32)
-+#define CIOCGSESSINFO _IOWR('c', 107, struct session_info_op)
-+
-+/* to indicate that CRIOGET is not required in linux
-+ */
-+#define CRIOGET_NOT_NEEDED 1
-+
-+/* additional ioctls for AEAD */
-+#define CIOCAUTHCRYPT _IOWR('c', 109, struct crypt_auth_op)
-+
-+/* additional ioctls for asynchronous operation.
-+ * These are conditionally enabled since version 1.6.
-+ */
-+#define CIOCASYNCCRYPT _IOW('c', 110, struct crypt_op)
-+#define CIOCASYNCFETCH _IOR('c', 111, struct crypt_op)
-+
-+#endif /* L_CRYPTODEV_H */
-diff -Nur openssl-1.0.1e-vanilla/crypto/engine/eng_cryptodev.c openssl-1.0.1e/crypto/engine/eng_cryptodev.c
---- openssl-1.0.1e-vanilla/crypto/engine/eng_cryptodev.c 2013-02-11 15:26:04.000000000 +0000
-+++ openssl-1.0.1e/crypto/engine/eng_cryptodev.c 2013-12-25 14:27:06.968877039 +0000
-@@ -2,6 +2,7 @@
- * Copyright (c) 2002 Bob Beck <beck@openbsd.org>
- * Copyright (c) 2002 Theo de Raadt
- * Copyright (c) 2002 Markus Friedl
-+ * Copyright (c) 2012 Nikos Mavrogiannopoulos
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
-@@ -74,8 +75,6 @@
- int d_fd;
-
- #ifdef USE_CRYPTODEV_DIGESTS
-- char dummy_mac_key[HASH_MAX_LEN];
--
- unsigned char digest_res[HASH_MAX_LEN];
- char *mac_data;
- int mac_len;
-@@ -157,15 +156,21 @@
- static struct {
- int id;
- int nid;
-- int keylen;
-+ int digestlen;
- } digests[] = {
-+#if 0
-+ /* HMAC is not supported */
- { CRYPTO_MD5_HMAC, NID_hmacWithMD5, 16},
- { CRYPTO_SHA1_HMAC, NID_hmacWithSHA1, 20},
-- { CRYPTO_RIPEMD160_HMAC, NID_ripemd160, 16/*?*/},
-- { CRYPTO_MD5_KPDK, NID_undef, 0},
-- { CRYPTO_SHA1_KPDK, NID_undef, 0},
-+ { CRYPTO_SHA2_256_HMAC, NID_hmacWithSHA256, 32},
-+ { CRYPTO_SHA2_384_HMAC, NID_hmacWithSHA384, 48},
-+ { CRYPTO_SHA2_512_HMAC, NID_hmacWithSHA512, 64},
-+#endif
- { CRYPTO_MD5, NID_md5, 16},
- { CRYPTO_SHA1, NID_sha1, 20},
-+ { CRYPTO_SHA2_256, NID_sha256, 32},
-+ { CRYPTO_SHA2_384, NID_sha384, 48},
-+ { CRYPTO_SHA2_512, NID_sha512, 64},
- { 0, NID_undef, 0},
- };
- #endif
-@@ -243,13 +248,14 @@
- static int nids[CRYPTO_ALGORITHM_MAX];
- struct session_op sess;
- int fd, i, count = 0;
-+ unsigned char fake_key[CRYPTO_CIPHER_MAX_KEY_LEN];
-
- if ((fd = get_dev_crypto()) < 0) {
- *cnids = NULL;
- return (0);
- }
- memset(&sess, 0, sizeof(sess));
-- sess.key = (caddr_t)"123456789abcdefghijklmno";
-+ sess.key = (void*)fake_key;
-
- for (i = 0; ciphers[i].id && count < CRYPTO_ALGORITHM_MAX; i++) {
- if (ciphers[i].nid == NID_undef)
-@@ -281,6 +287,7 @@
- get_cryptodev_digests(const int **cnids)
- {
- static int nids[CRYPTO_ALGORITHM_MAX];
-+ unsigned char fake_key[CRYPTO_CIPHER_MAX_KEY_LEN];
- struct session_op sess;
- int fd, i, count = 0;
-
-@@ -289,12 +296,12 @@
- return (0);
- }
- memset(&sess, 0, sizeof(sess));
-- sess.mackey = (caddr_t)"123456789abcdefghijklmno";
-+ sess.mackey = fake_key;
- for (i = 0; digests[i].id && count < CRYPTO_ALGORITHM_MAX; i++) {
- if (digests[i].nid == NID_undef)
- continue;
- sess.mac = digests[i].id;
-- sess.mackeylen = digests[i].keylen;
-+ sess.mackeylen = 8;
- sess.cipher = 0;
- if (ioctl(fd, CIOCGSESSION, &sess) != -1 &&
- ioctl(fd, CIOCFSESSION, &sess.ses) != -1)
-@@ -382,14 +389,14 @@
- cryp.ses = sess->ses;
- cryp.flags = 0;
- cryp.len = inl;
-- cryp.src = (caddr_t) in;
-- cryp.dst = (caddr_t) out;
-+ cryp.src = (void*) in;
-+ cryp.dst = (void*) out;
- cryp.mac = 0;
-
- cryp.op = ctx->encrypt ? COP_ENCRYPT : COP_DECRYPT;
-
- if (ctx->cipher->iv_len) {
-- cryp.iv = (caddr_t) ctx->iv;
-+ cryp.iv = (void*) ctx->iv;
- if (!ctx->encrypt) {
- iiv = in + inl - ctx->cipher->iv_len;
- memcpy(save_iv, iiv, ctx->cipher->iv_len);
-@@ -440,7 +447,7 @@
- if ((state->d_fd = get_dev_crypto()) < 0)
- return (0);
-
-- sess->key = (caddr_t)key;
-+ sess->key = (void*)key;
- sess->keylen = ctx->key_len;
- sess->cipher = cipher;
-
-@@ -660,18 +667,6 @@
- }
-
-
--static int
--digest_key_length(int nid)
--{
-- int i;
--
-- for (i = 0; digests[i].id; i++)
-- if (digests[i].nid == nid)
-- return digests[i].keylen;
-- return (0);
--}
--
--
- static int cryptodev_digest_init(EVP_MD_CTX *ctx)
- {
- struct dev_crypto_state *state = ctx->md_data;
-@@ -682,7 +677,6 @@
- printf("cryptodev_digest_init: Can't get digest \n");
- return (0);
- }
--
- memset(state, 0, sizeof(struct dev_crypto_state));
-
- if ((state->d_fd = get_dev_crypto()) < 0) {
-@@ -690,8 +684,8 @@
- return (0);
- }
-
-- sess->mackey = state->dummy_mac_key;
-- sess->mackeylen = digest_key_length(ctx->digest->type);
-+ sess->mackey = NULL;
-+ sess->mackeylen = 0;
- sess->mac = digest;
-
- if (ioctl(state->d_fd, CIOCGSESSION, sess) < 0) {
-@@ -707,8 +701,8 @@
- static int cryptodev_digest_update(EVP_MD_CTX *ctx, const void *data,
- size_t count)
- {
-- struct crypt_op cryp;
- struct dev_crypto_state *state = ctx->md_data;
-+ struct crypt_op cryp;
- struct session_op *sess = &state->d_sess;
-
- if (!data || state->d_fd < 0) {
-@@ -717,7 +711,7 @@
- }
-
- if (!count) {
-- return (0);
-+ return (1);
- }
-
- if (!(ctx->flags & EVP_MD_CTX_FLAG_ONESHOT)) {
-@@ -740,9 +734,9 @@
- cryp.ses = sess->ses;
- cryp.flags = 0;
- cryp.len = count;
-- cryp.src = (caddr_t) data;
-+ cryp.src = (void*) data;
- cryp.dst = NULL;
-- cryp.mac = (caddr_t) state->digest_res;
-+ cryp.mac = (void*) state->digest_res;
- if (ioctl(state->d_fd, CIOCCRYPT, &cryp) < 0) {
- printf("cryptodev_digest_update: digest failed\n");
- return (0);
-@@ -757,8 +751,6 @@
- struct dev_crypto_state *state = ctx->md_data;
- struct session_op *sess = &state->d_sess;
-
-- int ret = 1;
--
- if (!md || state->d_fd < 0) {
- printf("cryptodev_digest_final: illegal input\n");
- return(0);
-@@ -772,7 +764,7 @@
- cryp.len = state->mac_len;
- cryp.src = state->mac_data;
- cryp.dst = NULL;
-- cryp.mac = (caddr_t)md;
-+ cryp.mac = (void*)md;
- if (ioctl(state->d_fd, CIOCCRYPT, &cryp) < 0) {
- printf("cryptodev_digest_final: digest failed\n");
- return (0);
-@@ -783,7 +775,7 @@
-
- memcpy(md, state->digest_res, ctx->digest->md_size);
-
-- return (ret);
-+ return 1;
- }
-
-
-@@ -835,8 +827,8 @@
-
- digest = digest_nid_to_cryptodev(to->digest->type);
-
-- sess->mackey = dstate->dummy_mac_key;
-- sess->mackeylen = digest_key_length(to->digest->type);
-+ sess->mackey = NULL;
-+ sess->mackeylen = 0;
- sess->mac = digest;
-
- dstate->d_fd = get_dev_crypto();
-@@ -861,34 +853,117 @@
- }
-
-
--const EVP_MD cryptodev_sha1 = {
-+static const EVP_MD cryptodev_sha1 = {
- NID_sha1,
-- NID_undef,
-+ NID_sha1WithRSAEncryption,
- SHA_DIGEST_LENGTH,
-+#if defined(EVP_MD_FLAG_PKEY_METHOD_SIGNATURE) && defined(EVP_MD_FLAG_DIGALGID_ABSENT)
-+ EVP_MD_FLAG_PKEY_METHOD_SIGNATURE|
-+ EVP_MD_FLAG_DIGALGID_ABSENT|
-+#endif
- EVP_MD_FLAG_ONESHOT,
- cryptodev_digest_init,
- cryptodev_digest_update,
- cryptodev_digest_final,
- cryptodev_digest_copy,
- cryptodev_digest_cleanup,
-- EVP_PKEY_NULL_method,
-+ EVP_PKEY_RSA_method,
- SHA_CBLOCK,
-- sizeof(struct dev_crypto_state),
-+ sizeof(EVP_MD *)+sizeof(struct dev_crypto_state),
-+};
-+
-+static const EVP_MD cryptodev_sha256 = {
-+ NID_sha256,
-+ NID_sha256WithRSAEncryption,
-+ SHA256_DIGEST_LENGTH,
-+#if defined(EVP_MD_FLAG_PKEY_METHOD_SIGNATURE) && defined(EVP_MD_FLAG_DIGALGID_ABSENT)
-+ EVP_MD_FLAG_PKEY_METHOD_SIGNATURE|
-+ EVP_MD_FLAG_DIGALGID_ABSENT|
-+#endif
-+ EVP_MD_FLAG_ONESHOT,
-+ cryptodev_digest_init,
-+ cryptodev_digest_update,
-+ cryptodev_digest_final,
-+ cryptodev_digest_copy,
-+ cryptodev_digest_cleanup,
-+ EVP_PKEY_RSA_method,
-+ SHA256_CBLOCK,
-+ sizeof(EVP_MD *)+sizeof(struct dev_crypto_state),
-+};
-+static const EVP_MD cryptodev_sha224 = {
-+ NID_sha224,
-+ NID_sha224WithRSAEncryption,
-+ SHA224_DIGEST_LENGTH,
-+#if defined(EVP_MD_FLAG_PKEY_METHOD_SIGNATURE) && defined(EVP_MD_FLAG_DIGALGID_ABSENT)
-+ EVP_MD_FLAG_PKEY_METHOD_SIGNATURE|
-+ EVP_MD_FLAG_DIGALGID_ABSENT|
-+#endif
-+ EVP_MD_FLAG_ONESHOT,
-+ cryptodev_digest_init,
-+ cryptodev_digest_update,
-+ cryptodev_digest_final,
-+ cryptodev_digest_copy,
-+ cryptodev_digest_cleanup,
-+ EVP_PKEY_RSA_method,
-+ SHA256_CBLOCK,
-+ sizeof(EVP_MD *)+sizeof(struct dev_crypto_state),
-+};
-+
-+static const EVP_MD cryptodev_sha384 = {
-+ NID_sha384,
-+ NID_sha384WithRSAEncryption,
-+ SHA384_DIGEST_LENGTH,
-+#if defined(EVP_MD_FLAG_PKEY_METHOD_SIGNATURE) && defined(EVP_MD_FLAG_DIGALGID_ABSENT)
-+ EVP_MD_FLAG_PKEY_METHOD_SIGNATURE|
-+ EVP_MD_FLAG_DIGALGID_ABSENT|
-+#endif
-+ EVP_MD_FLAG_ONESHOT,
-+ cryptodev_digest_init,
-+ cryptodev_digest_update,
-+ cryptodev_digest_final,
-+ cryptodev_digest_copy,
-+ cryptodev_digest_cleanup,
-+ EVP_PKEY_RSA_method,
-+ SHA512_CBLOCK,
-+ sizeof(EVP_MD *)+sizeof(struct dev_crypto_state),
-+};
-+
-+static const EVP_MD cryptodev_sha512 = {
-+ NID_sha512,
-+ NID_sha512WithRSAEncryption,
-+ SHA512_DIGEST_LENGTH,
-+#if defined(EVP_MD_FLAG_PKEY_METHOD_SIGNATURE) && defined(EVP_MD_FLAG_DIGALGID_ABSENT)
-+ EVP_MD_FLAG_PKEY_METHOD_SIGNATURE|
-+ EVP_MD_FLAG_DIGALGID_ABSENT|
-+#endif
-+ EVP_MD_FLAG_ONESHOT,
-+ cryptodev_digest_init,
-+ cryptodev_digest_update,
-+ cryptodev_digest_final,
-+ cryptodev_digest_copy,
-+ cryptodev_digest_cleanup,
-+ EVP_PKEY_RSA_method,
-+ SHA512_CBLOCK,
-+ sizeof(EVP_MD *)+sizeof(struct dev_crypto_state),
- };
-
--const EVP_MD cryptodev_md5 = {
-+static const EVP_MD cryptodev_md5 = {
- NID_md5,
-- NID_undef,
-+ NID_md5WithRSAEncryption,
- 16 /* MD5_DIGEST_LENGTH */,
-+#if defined(EVP_MD_FLAG_PKEY_METHOD_SIGNATURE) && defined(EVP_MD_FLAG_DIGALGID_ABSENT)
-+ EVP_MD_FLAG_PKEY_METHOD_SIGNATURE|
-+ EVP_MD_FLAG_DIGALGID_ABSENT|
-+#endif
- EVP_MD_FLAG_ONESHOT,
- cryptodev_digest_init,
- cryptodev_digest_update,
- cryptodev_digest_final,
- cryptodev_digest_copy,
- cryptodev_digest_cleanup,
-- EVP_PKEY_NULL_method,
-+ EVP_PKEY_RSA_method,
- 64 /* MD5_CBLOCK */,
-- sizeof(struct dev_crypto_state),
-+ sizeof(EVP_MD *)+sizeof(struct dev_crypto_state),
- };
-
- #endif /* USE_CRYPTODEV_DIGESTS */
-@@ -909,6 +984,18 @@
- case NID_sha1:
- *digest = &cryptodev_sha1;
- break;
-+ case NID_sha224:
-+ *digest = &cryptodev_sha224;
-+ break;
-+ case NID_sha256:
-+ *digest = &cryptodev_sha256;
-+ break;
-+ case NID_sha384:
-+ *digest = &cryptodev_sha384;
-+ break;
-+ case NID_sha512:
-+ *digest = &cryptodev_sha512;
-+ break;
- default:
- #endif /* USE_CRYPTODEV_DIGESTS */
- *digest = NULL;
-@@ -940,7 +1027,7 @@
- return (1);
- memset(b, 0, bytes);
-
-- crp->crp_p = (caddr_t) b;
-+ crp->crp_p = (void*) b;
- crp->crp_nbits = bits;
-
- for (i = 0, j = 0; i < a->top; i++) {
-@@ -1193,7 +1280,7 @@
- kop.crk_op = CRK_DSA_SIGN;
-
- /* inputs: dgst dsa->p dsa->q dsa->g dsa->priv_key */
-- kop.crk_param[0].crp_p = (caddr_t)dgst;
-+ kop.crk_param[0].crp_p = (void*)dgst;
- kop.crk_param[0].crp_nbits = dlen * 8;
- if (bn2crparam(dsa->p, &kop.crk_param[1]))
- goto err;
-@@ -1233,7 +1320,7 @@
- kop.crk_op = CRK_DSA_VERIFY;
-
- /* inputs: dgst dsa->p dsa->q dsa->g dsa->pub_key sig->r sig->s */
-- kop.crk_param[0].crp_p = (caddr_t)dgst;
-+ kop.crk_param[0].crp_p = (void*)dgst;
- kop.crk_param[0].crp_nbits = dlen * 8;
- if (bn2crparam(dsa->p, &kop.crk_param[1]))
- goto err;
-@@ -1311,9 +1398,10 @@
- goto err;
- kop.crk_iparams = 3;
-
-- kop.crk_param[3].crp_p = (caddr_t) key;
-- kop.crk_param[3].crp_nbits = keylen * 8;
-+ kop.crk_param[3].crp_p = (void*) key;
-+ kop.crk_param[3].crp_nbits = keylen;
- kop.crk_oparams = 1;
-+ dhret = keylen/8;
-
- if (ioctl(fd, CIOCKEY, &kop) == -1) {
- const DH_METHOD *meth = DH_OpenSSL();
-@@ -1385,7 +1473,7 @@
- put_dev_crypto(fd);
-
- if (!ENGINE_set_id(engine, "cryptodev") ||
-- !ENGINE_set_name(engine, "BSD cryptodev engine") ||
-+ !ENGINE_set_name(engine, "cryptodev engine") ||
- !ENGINE_set_ciphers(engine, cryptodev_engine_ciphers) ||
- !ENGINE_set_digests(engine, cryptodev_engine_digests) ||
- !ENGINE_set_ctrl_function(engine, cryptodev_ctrl) ||
+++ /dev/null
-Submitted By: Armin K. <krejzi at email dot com>
-Date: 2013-05-05
-Initial Package Version: 1.0.1e
-Upstream Status: Unknown
-Origin: https://github.com/Alexpux/Qt-builds/tree/master/patches/openssl
-Description: Fixes build with make -jx, where x is greater than 1.
-
---- a/crypto/Makefile 2013-02-11 16:26:04.000000000 +0100
-+++ b/crypto/Makefile 2013-05-05 20:06:34.872208113 +0200
-@@ -86,11 +86,11 @@
- @if [ -z "$(THIS)" ]; then $(MAKE) -f $(TOP)/Makefile reflect THIS=$@; fi
-
- subdirs:
-- @target=all; $(RECURSIVE_MAKE)
-+ +@target=all; $(RECURSIVE_MAKE)
-
- files:
- $(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
-- @target=files; $(RECURSIVE_MAKE)
-+ +@target=files; $(RECURSIVE_MAKE)
-
- links:
- @$(PERL) $(TOP)/util/mklink.pl ../include/openssl $(EXHEADER)
-@@ -101,7 +101,7 @@
- # lib: $(LIB): are splitted to avoid end-less loop
- lib: $(LIB)
- @touch lib
--$(LIB): $(LIBOBJ)
-+$(LIB): $(LIBOBJ) | subdirs
- $(AR) $(LIB) $(LIBOBJ)
- [ -z "$(FIPSLIBDIR)" ] || $(AR) $(LIB) $(FIPSLIBDIR)fipscanister.o
- $(RANLIB) $(LIB) || echo Never mind.
-@@ -112,7 +112,7 @@
- fi
-
- libs:
-- @target=lib; $(RECURSIVE_MAKE)
-+ +@target=lib; $(RECURSIVE_MAKE)
-
- install:
- @[ -n "$(INSTALLTOP)" ] # should be set by top Makefile...
-@@ -121,7 +121,7 @@
- (cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \
- chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \
- done;
-- @target=install; $(RECURSIVE_MAKE)
-+ +@target=install; $(RECURSIVE_MAKE)
-
- lint:
- @target=lint; $(RECURSIVE_MAKE)
---- a/engines/Makefile 2013-02-11 16:26:04.000000000 +0100
-+++ b/engines/Makefile 2013-05-05 20:06:34.872208113 +0200
-@@ -72,7 +72,7 @@
-
- all: lib subdirs
-
--lib: $(LIBOBJ)
-+lib: $(LIBOBJ) | subdirs
- @if [ -n "$(SHARED_LIBS)" ]; then \
- set -e; \
- for l in $(LIBNAMES); do \
-@@ -89,7 +89,7 @@
-
- subdirs:
- echo $(EDIRS)
-- @target=all; $(RECURSIVE_MAKE)
-+ +@target=all; $(RECURSIVE_MAKE)
-
- files:
- $(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
-@@ -128,7 +128,7 @@
- mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$$pfx$$l$$sfx.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$$pfx$$l$$sfx ); \
- done; \
- fi
-- @target=install; $(RECURSIVE_MAKE)
-+ +@target=install; $(RECURSIVE_MAKE)
-
- tags:
- ctags $(SRC)
---- a/Makefile.org 2013-02-11 16:26:04.000000000 +0100
-+++ b/Makefile.org 2013-05-05 20:06:34.862207917 +0200
-@@ -273,17 +273,17 @@
- build_libs: build_crypto build_ssl build_engines
-
- build_crypto:
-- @dir=crypto; target=all; $(BUILD_ONE_CMD)
--build_ssl:
-- @dir=ssl; target=all; $(BUILD_ONE_CMD)
--build_engines:
-- @dir=engines; target=all; $(BUILD_ONE_CMD)
--build_apps:
-- @dir=apps; target=all; $(BUILD_ONE_CMD)
--build_tests:
-- @dir=test; target=all; $(BUILD_ONE_CMD)
--build_tools:
-- @dir=tools; target=all; $(BUILD_ONE_CMD)
-+ +@dir=crypto; target=all; $(BUILD_ONE_CMD)
-+build_ssl: build_crypto
-+ +@dir=ssl; target=all; $(BUILD_ONE_CMD)
-+build_engines: build_crypto
-+ +@dir=engines; target=all; $(BUILD_ONE_CMD)
-+build_apps: build_libs
-+ +@dir=apps; target=all; $(BUILD_ONE_CMD)
-+build_tests: build_libs
-+ +@dir=test; target=all; $(BUILD_ONE_CMD)
-+build_tools: build_libs
-+ +@dir=tools; target=all; $(BUILD_ONE_CMD)
-
- all_testapps: build_libs build_testapps
- build_testapps:
-@@ -537,9 +537,9 @@
- dist_pem_h:
- (cd crypto/pem; $(MAKE) -e $(BUILDENV) pem.h; $(MAKE) clean)
-
--install: all install_docs install_sw
-+install: install_docs install_sw
-
--install_sw:
-+install_dirs:
- @$(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/bin \
- $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR) \
- $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines \
-@@ -548,12 +548,19 @@
- $(INSTALL_PREFIX)$(OPENSSLDIR)/misc \
- $(INSTALL_PREFIX)$(OPENSSLDIR)/certs \
- $(INSTALL_PREFIX)$(OPENSSLDIR)/private
-+ @$(PERL) $(TOP)/util/mkdir-p.pl \
-+ $(INSTALL_PREFIX)$(MANDIR)/man1 \
-+ $(INSTALL_PREFIX)$(MANDIR)/man3 \
-+ $(INSTALL_PREFIX)$(MANDIR)/man5 \
-+ $(INSTALL_PREFIX)$(MANDIR)/man7
-+
-+install_sw: install_dirs
- @set -e; headerlist="$(EXHEADER)"; for i in $$headerlist;\
- do \
- (cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \
- chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \
- done;
-- @set -e; target=install; $(RECURSIVE_BUILD_CMD)
-+ +@set -e; target=install; $(RECURSIVE_BUILD_CMD)
- @set -e; liblist="$(LIBS)"; for i in $$liblist ;\
- do \
- if [ -f "$$i" ]; then \
-@@ -633,12 +640,7 @@
- done; \
- done
-
--install_docs:
-- @$(PERL) $(TOP)/util/mkdir-p.pl \
-- $(INSTALL_PREFIX)$(MANDIR)/man1 \
-- $(INSTALL_PREFIX)$(MANDIR)/man3 \
-- $(INSTALL_PREFIX)$(MANDIR)/man5 \
-- $(INSTALL_PREFIX)$(MANDIR)/man7
-+install_docs: install_dirs
- @pod2man="`cd ./util; ./pod2mantest $(PERL)`"; \
- here="`pwd`"; \
- filecase=; \
---- a/Makefile.shared 2013-02-11 16:26:04.000000000 +0100
-+++ b/Makefile.shared 2013-05-05 20:06:34.872208113 +0200
-@@ -105,6 +105,7 @@
- SHAREDFLAGS="$${SHAREDFLAGS:-$(CFLAGS) $(SHARED_LDFLAGS)}"; \
- LIBPATH=`for x in $$LIBDEPS; do echo $$x; done | sed -e 's/^ *-L//;t' -e d | uniq`; \
- LIBPATH=`echo $$LIBPATH | sed -e 's/ /:/g'`; \
-+ [ -e $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX ] && exit 0; \
- LD_LIBRARY_PATH=$$LIBPATH:$$LD_LIBRARY_PATH \
- $${SHAREDCMD} $${SHAREDFLAGS} \
- -o $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX \
-@@ -122,6 +123,7 @@
- done; \
- fi; \
- if [ -n "$$SHLIB_SOVER" ]; then \
-+ [ -e "$$SHLIB$$SHLIB_SUFFIX" ] || \
- ( $(SET_X); rm -f $$SHLIB$$SHLIB_SUFFIX; \
- ln -s $$prev $$SHLIB$$SHLIB_SUFFIX ); \
- fi; \
---- a/test/Makefile 2013-02-11 16:26:04.000000000 +0100
-+++ b/test/Makefile 2013-05-05 20:06:34.872208113 +0200
-@@ -124,7 +124,7 @@
- tags:
- ctags $(SRC)
-
--tests: exe apps $(TESTS)
-+tests: exe $(TESTS)
-
- apps:
- @(cd ..; $(MAKE) DIRS=apps all)
-@@ -365,109 +365,109 @@
- link_app.$${shlib_target}
-
- $(RSATEST)$(EXE_EXT): $(RSATEST).o $(DLIBCRYPTO)
-- @target=$(RSATEST); $(BUILD_CMD)
-+ +@target=$(RSATEST); $(BUILD_CMD)
-
- $(BNTEST)$(EXE_EXT): $(BNTEST).o $(DLIBCRYPTO)
-- @target=$(BNTEST); $(BUILD_CMD)
-+ +@target=$(BNTEST); $(BUILD_CMD)
-
- $(ECTEST)$(EXE_EXT): $(ECTEST).o $(DLIBCRYPTO)
-- @target=$(ECTEST); $(BUILD_CMD)
-+ +@target=$(ECTEST); $(BUILD_CMD)
-
- $(EXPTEST)$(EXE_EXT): $(EXPTEST).o $(DLIBCRYPTO)
-- @target=$(EXPTEST); $(BUILD_CMD)
-+ +@target=$(EXPTEST); $(BUILD_CMD)
-
- $(IDEATEST)$(EXE_EXT): $(IDEATEST).o $(DLIBCRYPTO)
-- @target=$(IDEATEST); $(BUILD_CMD)
-+ +@target=$(IDEATEST); $(BUILD_CMD)
-
- $(MD2TEST)$(EXE_EXT): $(MD2TEST).o $(DLIBCRYPTO)
-- @target=$(MD2TEST); $(BUILD_CMD)
-+ +@target=$(MD2TEST); $(BUILD_CMD)
-
- $(SHATEST)$(EXE_EXT): $(SHATEST).o $(DLIBCRYPTO)
-- @target=$(SHATEST); $(BUILD_CMD)
-+ +@target=$(SHATEST); $(BUILD_CMD)
-
- $(SHA1TEST)$(EXE_EXT): $(SHA1TEST).o $(DLIBCRYPTO)
-- @target=$(SHA1TEST); $(BUILD_CMD)
-+ +@target=$(SHA1TEST); $(BUILD_CMD)
-
- $(SHA256TEST)$(EXE_EXT): $(SHA256TEST).o $(DLIBCRYPTO)
-- @target=$(SHA256TEST); $(BUILD_CMD)
-+ +@target=$(SHA256TEST); $(BUILD_CMD)
-
- $(SHA512TEST)$(EXE_EXT): $(SHA512TEST).o $(DLIBCRYPTO)
-- @target=$(SHA512TEST); $(BUILD_CMD)
-+ +@target=$(SHA512TEST); $(BUILD_CMD)
-
- $(RMDTEST)$(EXE_EXT): $(RMDTEST).o $(DLIBCRYPTO)
-- @target=$(RMDTEST); $(BUILD_CMD)
-+ +@target=$(RMDTEST); $(BUILD_CMD)
-
- $(MDC2TEST)$(EXE_EXT): $(MDC2TEST).o $(DLIBCRYPTO)
-- @target=$(MDC2TEST); $(BUILD_CMD)
-+ +@target=$(MDC2TEST); $(BUILD_CMD)
-
- $(MD4TEST)$(EXE_EXT): $(MD4TEST).o $(DLIBCRYPTO)
-- @target=$(MD4TEST); $(BUILD_CMD)
-+ +@target=$(MD4TEST); $(BUILD_CMD)
-
- $(MD5TEST)$(EXE_EXT): $(MD5TEST).o $(DLIBCRYPTO)
-- @target=$(MD5TEST); $(BUILD_CMD)
-+ +@target=$(MD5TEST); $(BUILD_CMD)
-
- $(HMACTEST)$(EXE_EXT): $(HMACTEST).o $(DLIBCRYPTO)
-- @target=$(HMACTEST); $(BUILD_CMD)
-+ +@target=$(HMACTEST); $(BUILD_CMD)
-
- $(WPTEST)$(EXE_EXT): $(WPTEST).o $(DLIBCRYPTO)
-- @target=$(WPTEST); $(BUILD_CMD)
-+ +@target=$(WPTEST); $(BUILD_CMD)
-
- $(RC2TEST)$(EXE_EXT): $(RC2TEST).o $(DLIBCRYPTO)
-- @target=$(RC2TEST); $(BUILD_CMD)
-+ +@target=$(RC2TEST); $(BUILD_CMD)
-
- $(BFTEST)$(EXE_EXT): $(BFTEST).o $(DLIBCRYPTO)
-- @target=$(BFTEST); $(BUILD_CMD)
-+ +@target=$(BFTEST); $(BUILD_CMD)
-
- $(CASTTEST)$(EXE_EXT): $(CASTTEST).o $(DLIBCRYPTO)
-- @target=$(CASTTEST); $(BUILD_CMD)
-+ +@target=$(CASTTEST); $(BUILD_CMD)
-
- $(RC4TEST)$(EXE_EXT): $(RC4TEST).o $(DLIBCRYPTO)
-- @target=$(RC4TEST); $(BUILD_CMD)
-+ +@target=$(RC4TEST); $(BUILD_CMD)
-
- $(RC5TEST)$(EXE_EXT): $(RC5TEST).o $(DLIBCRYPTO)
-- @target=$(RC5TEST); $(BUILD_CMD)
-+ +@target=$(RC5TEST); $(BUILD_CMD)
-
- $(DESTEST)$(EXE_EXT): $(DESTEST).o $(DLIBCRYPTO)
-- @target=$(DESTEST); $(BUILD_CMD)
-+ +@target=$(DESTEST); $(BUILD_CMD)
-
- $(RANDTEST)$(EXE_EXT): $(RANDTEST).o $(DLIBCRYPTO)
-- @target=$(RANDTEST); $(BUILD_CMD)
-+ +@target=$(RANDTEST); $(BUILD_CMD)
-
- $(DHTEST)$(EXE_EXT): $(DHTEST).o $(DLIBCRYPTO)
-- @target=$(DHTEST); $(BUILD_CMD)
-+ +@target=$(DHTEST); $(BUILD_CMD)
-
- $(DSATEST)$(EXE_EXT): $(DSATEST).o $(DLIBCRYPTO)
-- @target=$(DSATEST); $(BUILD_CMD)
-+ +@target=$(DSATEST); $(BUILD_CMD)
-
- $(METHTEST)$(EXE_EXT): $(METHTEST).o $(DLIBCRYPTO)
-- @target=$(METHTEST); $(BUILD_CMD)
-+ +@target=$(METHTEST); $(BUILD_CMD)
-
- $(SSLTEST)$(EXE_EXT): $(SSLTEST).o $(DLIBSSL) $(DLIBCRYPTO)
-- @target=$(SSLTEST); $(FIPS_BUILD_CMD)
-+ +@target=$(SSLTEST); $(FIPS_BUILD_CMD)
-
- $(ENGINETEST)$(EXE_EXT): $(ENGINETEST).o $(DLIBCRYPTO)
-- @target=$(ENGINETEST); $(BUILD_CMD)
-+ +@target=$(ENGINETEST); $(BUILD_CMD)
-
- $(EVPTEST)$(EXE_EXT): $(EVPTEST).o $(DLIBCRYPTO)
-- @target=$(EVPTEST); $(BUILD_CMD)
-+ +@target=$(EVPTEST); $(BUILD_CMD)
-
- $(ECDSATEST)$(EXE_EXT): $(ECDSATEST).o $(DLIBCRYPTO)
-- @target=$(ECDSATEST); $(BUILD_CMD)
-+ +@target=$(ECDSATEST); $(BUILD_CMD)
-
- $(ECDHTEST)$(EXE_EXT): $(ECDHTEST).o $(DLIBCRYPTO)
-- @target=$(ECDHTEST); $(BUILD_CMD)
-+ +@target=$(ECDHTEST); $(BUILD_CMD)
-
- $(IGETEST)$(EXE_EXT): $(IGETEST).o $(DLIBCRYPTO)
-- @target=$(IGETEST); $(BUILD_CMD)
-+ +@target=$(IGETEST); $(BUILD_CMD)
-
- $(JPAKETEST)$(EXE_EXT): $(JPAKETEST).o $(DLIBCRYPTO)
-- @target=$(JPAKETEST); $(BUILD_CMD)
-+ +@target=$(JPAKETEST); $(BUILD_CMD)
-
- $(ASN1TEST)$(EXE_EXT): $(ASN1TEST).o $(DLIBCRYPTO)
-- @target=$(ASN1TEST); $(BUILD_CMD)
-+ +@target=$(ASN1TEST); $(BUILD_CMD)
-
- $(SRPTEST)$(EXE_EXT): $(SRPTEST).o $(DLIBCRYPTO)
-- @target=$(SRPTEST); $(BUILD_CMD)
-+ +@target=$(SRPTEST); $(BUILD_CMD)
-
- #$(AESTEST).o: $(AESTEST).c
- # $(CC) -c $(CFLAGS) -DINTERMEDIATE_VALUE_KAT -DTRACE_KAT_MCT $(AESTEST).c
-@@ -480,7 +480,7 @@
- # fi
-
- dummytest$(EXE_EXT): dummytest.o $(DLIBCRYPTO)
-- @target=dummytest; $(BUILD_CMD)
-+ +@target=dummytest; $(BUILD_CMD)
-
- # DO NOT DELETE THIS LINE -- make depend depends on it.
-
+++ /dev/null
-diff -up openssl-1.0.1e/ssl/ssl.h.weak-ciphers openssl-1.0.1e/ssl/ssl.h
---- openssl-1.0.1e/ssl/ssl.h.weak-ciphers 2013-12-18 15:50:40.881620314 +0100
-+++ openssl-1.0.1e/ssl/ssl.h 2013-12-18 14:25:25.596566704 +0100
-@@ -331,7 +331,7 @@ extern "C" {
- /* The following cipher list is used by default.
- * It also is substituted when an application-defined cipher list string
- * starts with 'DEFAULT'. */
--#define SSL_DEFAULT_CIPHER_LIST "ALL:!aNULL:!eNULL:!SSLv2"
-+#define SSL_DEFAULT_CIPHER_LIST "ALL:!aNULL:!eNULL:!SSLv2:!EXPORT:!RC2:!DES"
- /* As of OpenSSL 1.0.0, ssl_create_cipher_list() in ssl/ssl_ciph.c always
- * starts with a reasonable order, and all we have to do for DEFAULT is
- * throwing out anonymous and unencrypted ciphersuites!
--- /dev/null
+--- openssl-1.0.1m/ssl/ssl.h.old 2015-03-19 15:25:20.646533583 +0100
++++ openssl-1.0.1m/ssl/ssl.h 2015-03-19 15:25:31.229875691 +0100
+@@ -334,7 +334,7 @@
+ * The following cipher list is used by default. It also is substituted when
+ * an application-defined cipher list string starts with 'DEFAULT'.
+ */
+-# define SSL_DEFAULT_CIPHER_LIST "ALL:!EXPORT:!aNULL:!eNULL:!SSLv2"
++# define SSL_DEFAULT_CIPHER_LIST "ALL:!EXPORT:!aNULL:!eNULL:!SSLv2:!RC2:!DES"
+ /*
+ * As of OpenSSL 1.0.0, ssl_create_cipher_list() in ssl/ssl_ciph.c always
+ * starts with a reasonable order, and all we have to do for DEFAULT is
--- /dev/null
+diff -Nur openssl-1.0.2a-vanilla/Configure openssl-1.0.2a/Configure
+--- openssl-1.0.2a-vanilla/Configure 2015-03-19 13:30:36.000000000 +0000
++++ openssl-1.0.2a/Configure 2015-04-23 10:31:41.336569854 +0000
+@@ -348,7 +348,7 @@
+ ####
+ # *-generic* is endian-neutral target, but ./config is free to
+ # throw in -D[BL]_ENDIAN, whichever appropriate...
+-"linux-generic32","gcc:-O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++"linux-generic32","gcc:\$(CFLAGS) -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC:\$(CFLAGS):.so.\$(SHLIB_SONAMEVER)",
+ "linux-ppc", "gcc:-DB_ENDIAN -O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:${ppc32_asm}:linux32:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+
+ #######################################################################
+@@ -389,7 +389,7 @@
+ "linux64-mips64", "gcc:-mabi=64 -O3 -Wall -DBN_DIV3W::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${mips64_asm}:64:dlfcn:linux-shared:-fPIC:-mabi=64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
+ #### IA-32 targets...
+ "linux-ia32-icc", "icc:-DL_ENDIAN -O2::-D_REENTRANT::-ldl -no_cpprt:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-KPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+-"linux-elf", "gcc:-DL_ENDIAN -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++"linux-elf", "gcc:-DL_ENDIAN \$(CFLAGS) -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_SONAMEVER)",
+ "linux-aout", "gcc:-DL_ENDIAN -O3 -fomit-frame-pointer -march=i486 -Wall::(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_asm}:a.out",
+ ####
+ "linux-generic64","gcc:-O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+@@ -1737,7 +1737,7 @@
+ elsif ($shared_extension ne "" && $shared_extension =~ /^\.s([ol])\.[^\.]*\.[^\.]*$/)
+ {
+ my $sotmp = $1;
+- s/^SHARED_LIBS_LINK_EXTS=.*/SHARED_LIBS_LINK_EXTS=.s$sotmp.\$(SHLIB_MAJOR) .s$sotmp/;
++ s/^SHARED_LIBS_LINK_EXTS=.*/SHARED_LIBS_LINK_EXTS=.s$sotmp.\$(SHLIB_SONAMEVER) .s$sotmp/;
+ }
+ elsif ($shared_extension ne "" && $shared_extension =~ /^\.[^\.]*\.[^\.]*\.dylib$/)
+ {
+diff -Nur openssl-1.0.2a-vanilla/Makefile.org openssl-1.0.2a/Makefile.org
+--- openssl-1.0.2a-vanilla/Makefile.org 2015-03-19 13:30:36.000000000 +0000
++++ openssl-1.0.2a/Makefile.org 2015-04-23 10:30:03.184371933 +0000
+@@ -10,6 +10,7 @@
+ SHLIB_MAJOR=
+ SHLIB_MINOR=
+ SHLIB_EXT=
++SHLIB_SONAMEVER=10
+ PLATFORM=dist
+ OPTIONS=
+ CONFIGURE_ARGS=
+@@ -335,10 +336,9 @@
+ link-shared:
+ @ set -e; for i in $(SHLIBDIRS); do \
+ $(MAKE) -f $(HERE)/Makefile.shared -e $(BUILDENV) \
+- LIBNAME=$$i LIBVERSION=$(SHLIB_MAJOR).$(SHLIB_MINOR) \
++ LIBNAME=$$i LIBVERSION=$(SHLIB_SONAMEVER) \
+ LIBCOMPATVERSIONS=";$(SHLIB_VERSION_HISTORY)" \
+ symlink.$(SHLIB_TARGET); \
+- libs="$$libs -l$$i"; \
+ done
+
+ build-shared: do_$(SHLIB_TARGET) link-shared
+@@ -349,7 +349,7 @@
+ libs="$(LIBKRB5) $$libs"; \
+ fi; \
+ $(CLEARENV) && $(MAKE) -f Makefile.shared -e $(BUILDENV) \
+- LIBNAME=$$i LIBVERSION=$(SHLIB_MAJOR).$(SHLIB_MINOR) \
++ LIBNAME=$$i LIBVERSION=$(SHLIB_SONAMEVER) \
+ LIBCOMPATVERSIONS=";$(SHLIB_VERSION_HISTORY)" \
+ LIBDEPS="$$libs $(EX_LIBS)" \
+ link_a.$(SHLIB_TARGET); \
--- /dev/null
+diff -Naur openssl-1.0.2a.org/crypto/engine/eng_all.c openssl-1.0.2a/crypto/engine/eng_all.c
+--- openssl-1.0.2a.org/crypto/engine/eng_all.c 2015-03-19 14:30:36.000000000 +0100
++++ openssl-1.0.2a/crypto/engine/eng_all.c 2015-04-27 12:27:05.063569969 +0200
+@@ -120,6 +120,14 @@
+ ENGINE_load_capi();
+ # endif
+ #endif
++#ifdef OPENSSL_NO_STATIC_ENGINE
++ ENGINE *e;
++ e = ENGINE_by_id("padlock");
++ if (e != NULL) {
++ ENGINE_add(e);
++ ENGINE_free(e);
++ }
++#endif
+ ENGINE_register_all_complete();
+ }
+
+diff -Naur openssl-1.0.2a.org/ssl/ssl_algs.c openssl-1.0.2a/ssl/ssl_algs.c
+--- openssl-1.0.2a.org/ssl/ssl_algs.c 2015-03-19 14:30:36.000000000 +0100
++++ openssl-1.0.2a/ssl/ssl_algs.c 2015-04-27 11:04:27.893399695 +0200
+@@ -151,5 +151,12 @@
+ #endif
+ /* initialize cipher/digest methods table */
+ ssl_load_ciphers();
++
++ /* Init available hardware crypto engines */
++ ENGINE_load_builtin_engines();
++ ENGINE_register_all_complete();
++ ENGINE * padlock = ENGINE_by_id("padlock");
++ if (padlock) ENGINE_set_default_ciphers(padlock);
++
+ return (1);
+ }
--- /dev/null
+diff -Naur openssl-1.0.2a.org/crypto/x86cpuid.pl openssl-1.0.2a/crypto/x86cpuid.pl
+--- openssl-1.0.2a.org/crypto/x86cpuid.pl 2015-03-19 14:30:36.000000000 +0100
++++ openssl-1.0.2a/crypto/x86cpuid.pl 2015-04-28 13:47:57.853521020 +0200
+@@ -71,6 +71,7 @@
+ &mov ("eax",1);
+ &xor ("ecx","ecx");
+ &cpuid ();
++ &and ("ecx",0xfffffdff); # clear SSSE3 because it is incredible slow on AMD's
+ &bt ("edx",28);
+ &jnc (&label("generic"));
+ &shr ("ebx",16);
--- /dev/null
+--- openssl-1.0.1m/ssl/ssl_lib.c.old 2015-03-19 15:56:40.966287977 +0100
++++ openssl-1.0.1m/ssl/ssl_lib.c 2015-03-19 15:57:07.976160846 +0100
+@@ -1892,6 +1892,9 @@
+ */
+ ret->options |= SSL_OP_LEGACY_SERVER_CONNECT;
+
++ /* Disable SSLv2 and SSLv3 by default (affects the SSLv23_method() only) */
++ ret->options |= SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3;
++
+ return (ret);
+ err:
+ SSLerr(SSL_F_SSL_CTX_NEW, ERR_R_MALLOC_FAILURE);
+++ /dev/null
-diff -Naur qemu-kvm-0.15.0.org/hw/9pfs/virtio-9p-local.c qemu-kvm-0.15.0/hw/9pfs/virtio-9p-local.c
---- qemu-kvm-0.15.0.org/hw/9pfs/virtio-9p-local.c 2011-08-09 14:40:29.000000000 +0200
-+++ qemu-kvm-0.15.0/hw/9pfs/virtio-9p-local.c 2011-08-14 10:31:22.711480316 +0200
-@@ -21,6 +21,16 @@
- #include <sys/un.h>
- #include <attr/xattr.h>
-
-+#ifndef AT_FDCWD
-+/* Copied from linux/include/linux/fcntl.h * because direct include fails */
-+#define AT_FDCWD -100 /* Special value used to indicate
-+ openat should use the current
-+ working directory. */
-+#define AT_SYMLINK_NOFOLLOW 0x100 /* Do not follow symbolic links. */
-+#define AT_REMOVEDIR 0x200 /* Remove directory instead of
-+ unlinking file. */
-+#define AT_SYMLINK_FOLLOW 0x400 /* Follow symbolic links. */
-+#endif
-
- static int local_lstat(FsContext *fs_ctx, const char *path, struct stat *stbuf)
- {
-diff -Naur qemu-kvm-0.15.0.org/linux-user/syscall.c qemu-kvm-0.15.0/linux-user/syscall.c
---- qemu-kvm-0.15.0.org/linux-user/syscall.c 2011-08-09 14:40:29.000000000 +0200
-+++ qemu-kvm-0.15.0/linux-user/syscall.c 2011-08-14 12:43:43.190231600 +0200
-@@ -971,6 +971,16 @@
- return result;
- }
-
-+/* Copied from linux/include/asm/resource.h * because direct include fails */
-+
-+#ifndef RLIMIT_NICE
-+#define RLIMIT_NICE 13 /* max nice prio allowed to raise to
-+ 0-39 for nice level 19 .. -20 */
-+#endif
-+#ifndef RLIMIT_RTPRIO
-+#define RLIMIT_RTPRIO 14 /* maximum realtime priority */
-+#endif
-+
- static inline int target_to_host_resource(int code)
- {
- switch (code) {
--- /dev/null
+From 4b59d129fd1026bab37256af0df9ae7ace39e7ba Mon Sep 17 00:00:00 2001
+From: Michael Tremer <michael.tremer@ipfire.org>
+Date: Mon, 27 Apr 2015 18:49:45 +0200
+Subject: [PATCH] stroke: Increase stroke buffer size to 8k
+
+Complicated connections can have lots of arguments
+for the ike= and esp= directives in the ipsec.conf
+configuration file. strongSwan wouldn't import those
+because the size of the message that is send from
+stroke to charon exceeded the limit of 4k.
+
+This patch increases the size of the buffer that
+can be passed to charon to 8k which should be enough
+even for connections with longer configurations.
+---
+ src/stroke/stroke_msg.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/stroke/stroke_msg.h b/src/stroke/stroke_msg.h
+index c2b923f6db9a..c391efa00105 100644
+--- a/src/stroke/stroke_msg.h
++++ b/src/stroke/stroke_msg.h
+@@ -32,7 +32,7 @@
+ */
+ #define STROKE_SOCKET IPSEC_PIDDIR "/charon.ctl"
+
+-#define STROKE_BUF_LEN 4096
++#define STROKE_BUF_LEN 8192
+
+ typedef enum list_flag_t list_flag_t;
+
+--
+2.1.0
+
---- a/src/_updown/_updown.in
-+++ b/src/_updown/_updown.in
-@@ -178,6 +178,29 @@
- ;;
- esac
+--- strongswan-5.3.0/src/_updown/_updown.in.old 2015-03-17 18:17:43.000000000 +0000
++++ strongswan-5.3.0/src/_updown/_updown.in 2015-03-30 22:48:27.084030719 +0000
+@@ -122,6 +122,29 @@
+ # address family.
+ #
+function ip_encode() {
+ local IFS=.
+ [ $vlsm -eq 0 ] && echo 0 || echo $(( -1 << $(( 32 - $vlsm )) ))
+}
+
- # utility functions for route manipulation
- # Meddling with this stuff should not be necessary and requires great care.
- uproute() {
-@@ -407,12 +430,12 @@
+ # define a minimum PATH environment in case it is not set
+ PATH="/sbin:/bin:/usr/sbin:/usr/bin:@sbindir@"
+ export PATH
+@@ -232,12 +255,12 @@
# connection to me, with (left/right)firewall=yes, coming up
# This is used only by the default updown script, not by your custom
# ones, so do not mess with it; see CAUTION comment up at top.
- iptables -I INPUT 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
-+ iptables -I IPSECINPUT 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
++ iptables --wait -I IPSECINPUT 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
-s $PLUTO_PEER_CLIENT $S_PEER_PORT \
-d $PLUTO_ME $D_MY_PORT $IPSEC_POLICY_IN -j ACCEPT
- iptables -I OUTPUT 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
-+ iptables -I IPSECOUTPUT 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
++ iptables --wait -I IPSECOUTPUT 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
-s $PLUTO_ME $S_MY_PORT $IPSEC_POLICY_OUT \
- -d $PLUTO_PEER_CLIENT $D_PEER_PORT -j ACCEPT
+ -d $PLUTO_PEER_CLIENT $D_PEER_PORT -j MARK --set-mark 50
#
# allow IPIP traffic because of the implicit SA created by the kernel if
# IPComp is used (for small inbound packets that are not compressed)
-@@ -428,10 +451,10 @@
+@@ -253,10 +276,10 @@
if [ "$PLUTO_PEER_CLIENT" = "$PLUTO_PEER/32" ]
then
logger -t $TAG -p $FAC_PRIO \
fi
fi
;;
-@@ -439,12 +462,12 @@
+@@ -264,12 +287,12 @@
# connection to me, with (left/right)firewall=yes, going down
# This is used only by the default updown script, not by your custom
# ones, so do not mess with it; see CAUTION comment up at top.
- iptables -D INPUT -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
-+ iptables -D IPSECINPUT -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
++ iptables --wait -D IPSECINPUT -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
-s $PLUTO_PEER_CLIENT $S_PEER_PORT \
-d $PLUTO_ME $D_MY_PORT $IPSEC_POLICY_IN -j ACCEPT
- iptables -D OUTPUT -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
-+ iptables -D IPSECOUTPUT -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
++ iptables --wait -D IPSECOUTPUT -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
-s $PLUTO_ME $S_MY_PORT $IPSEC_POLICY_OUT \
- -d $PLUTO_PEER_CLIENT $D_PEER_PORT -j ACCEPT
+ -d $PLUTO_PEER_CLIENT $D_PEER_PORT -j MARK --set-mark 50
#
# IPIP exception teardown
if [ -n "$PLUTO_IPCOMP" ]
-@@ -459,10 +482,10 @@
+@@ -284,10 +307,10 @@
if [ "$PLUTO_PEER_CLIENT" = "$PLUTO_PEER/32" ]
then
logger -t $TAG -p $FAC_PRIO -- \
fi
fi
;;
-@@ -472,24 +495,24 @@
+@@ -297,24 +320,24 @@
# ones, so do not mess with it; see CAUTION comment up at top.
if [ "$PLUTO_PEER_CLIENT" != "$PLUTO_MY_SOURCEIP/32" ]
then
- iptables -I FORWARD 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
-+ iptables -I IPSECFORWARD 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
++ iptables --wait -I IPSECFORWARD 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
-s $PLUTO_MY_CLIENT $S_MY_PORT \
- -d $PLUTO_PEER_CLIENT $D_PEER_PORT $IPSEC_POLICY_OUT -j ACCEPT
- iptables -I FORWARD 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
+ -d $PLUTO_PEER_CLIENT $D_PEER_PORT $IPSEC_POLICY_OUT -j MARK --set-mark 50
-+ iptables -I IPSECFORWARD 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
++ iptables --wait -I IPSECFORWARD 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
-s $PLUTO_PEER_CLIENT $S_PEER_PORT \
- -d $PLUTO_MY_CLIENT $D_MY_PORT $IPSEC_POLICY_IN -j ACCEPT
+ -d $PLUTO_MY_CLIENT $D_MY_PORT $IPSEC_POLICY_IN -j RETURN
if [ -n "$PLUTO_MY_SOURCEIP" -o -n "$PLUTO_HOST_ACCESS" ]
then
- iptables -I INPUT 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
-+ iptables -I IPSECINPUT 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
++ iptables --wait -I IPSECINPUT 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
-s $PLUTO_PEER_CLIENT $S_PEER_PORT \
- -d $PLUTO_MY_CLIENT $D_MY_PORT $IPSEC_POLICY_IN -j ACCEPT
- iptables -I OUTPUT 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
+ -d $PLUTO_MY_CLIENT $D_MY_PORT $IPSEC_POLICY_IN -j RETURN
-+ iptables -I IPSECOUTPUT 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
++ iptables --wait -I IPSECOUTPUT 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
-s $PLUTO_MY_CLIENT $S_MY_PORT \
- -d $PLUTO_PEER_CLIENT $D_PEER_PORT $IPSEC_POLICY_OUT -j ACCEPT
+ -d $PLUTO_PEER_CLIENT $D_PEER_PORT $IPSEC_POLICY_OUT -j MARK --set-mark 50
fi
#
# allow IPIP traffic because of the implicit SA created by the kernel if
-@@ -497,7 +520,7 @@
+@@ -322,7 +345,7 @@
# INPUT is correct here even for forwarded traffic.
if [ -n "$PLUTO_IPCOMP" ]
then
- iptables -I INPUT 1 -i $PLUTO_INTERFACE -p 4 \
-+ iptables -I IPSECINPUT 1 -i $PLUTO_INTERFACE -p 4 \
++ iptables --wait -I IPSECINPUT 1 -i $PLUTO_INTERFACE -p 4 \
-s $PLUTO_PEER -d $PLUTO_ME $IPSEC_POLICY_IN -j ACCEPT
fi
#
-@@ -507,12 +530,51 @@
+@@ -332,12 +355,51 @@
if [ "$PLUTO_PEER_CLIENT" = "$PLUTO_PEER/32" ]
then
logger -t $TAG -p $FAC_PRIO \
+
+ #
+ # Open Firewall for IPinIP + AH + ESP Traffic
-+ iptables -I IPSECINPUT 1 -i $PLUTO_INTERFACE -p IP \
++ iptables --wait -I IPSECINPUT 1 -i $PLUTO_INTERFACE -p IP \
+ -s $PLUTO_PEER $S_PEER_PORT \
+ -d $PLUTO_ME $D_MY_PORT -j ACCEPT
-+ iptables -I IPSECINPUT 1 -i $PLUTO_INTERFACE -p AH \
++ iptables --wait -I IPSECINPUT 1 -i $PLUTO_INTERFACE -p AH \
+ -s $PLUTO_PEER $S_PEER_PORT \
+ -d $PLUTO_ME $D_MY_PORT -j ACCEPT
-+ iptables -I IPSECINPUT 1 -i $PLUTO_INTERFACE -p ESP \
++ iptables --wait -I IPSECINPUT 1 -i $PLUTO_INTERFACE -p ESP \
+ -s $PLUTO_PEER $S_PEER_PORT \
+ -d $PLUTO_ME $D_MY_PORT -j ACCEPT
+ if [ $VPN_LOGGING ]
+ done
+
+ if [ -n "${src}" ]; then
-+ iptables -t nat -A IPSECNAT -o $PLUTO_INTERFACE -s $PLUTO_ME -d $PLUTO_PEER_CLIENT -j SNAT --to $src
++ iptables --wait -t nat -A IPSECNAT -o $PLUTO_INTERFACE -s $PLUTO_ME -d $PLUTO_PEER_CLIENT -j SNAT --to $src
+ logger -t $TAG -p $FAC_PRIO \
+ "snat+ $PLUTO_INTERFACE-$PLUTO_ME : $PLUTO_PEER_CLIENT - $src"
+ else
;;
down-client:iptables)
# connection to client subnet, with (left/right)firewall=yes, going down
-@@ -520,34 +582,34 @@
+@@ -345,34 +407,34 @@
# ones, so do not mess with it; see CAUTION comment up at top.
if [ "$PLUTO_PEER_CLIENT" != "$PLUTO_MY_SOURCEIP/32" ]
then
- iptables -D FORWARD -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
-+ iptables -D IPSECFORWARD -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
++ iptables --wait -D IPSECFORWARD -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
-s $PLUTO_MY_CLIENT $S_MY_PORT \
-d $PLUTO_PEER_CLIENT $D_PEER_PORT \
- $IPSEC_POLICY_OUT -j ACCEPT
- iptables -D FORWARD -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
+ $IPSEC_POLICY_OUT -j MARK --set-mark 50
-+ iptables -D IPSECFORWARD -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
++ iptables --wait -D IPSECFORWARD -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
-s $PLUTO_PEER_CLIENT $S_PEER_PORT \
-d $PLUTO_MY_CLIENT $D_MY_PORT \
- $IPSEC_POLICY_IN -j ACCEPT
if [ -n "$PLUTO_MY_SOURCEIP" -o -n "$PLUTO_HOST_ACCESS" ]
then
- iptables -D INPUT -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
-+ iptables -D IPSECINPUT -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
++ iptables --wait -D IPSECINPUT -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
-s $PLUTO_PEER_CLIENT $S_PEER_PORT \
-d $PLUTO_MY_CLIENT $D_MY_PORT \
- $IPSEC_POLICY_IN -j ACCEPT
- iptables -D OUTPUT -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
+ $IPSEC_POLICY_IN -j RETURN
-+ iptables -D IPSECOUTPUT -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
++ iptables --wait -D IPSECOUTPUT -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
-s $PLUTO_MY_CLIENT $S_MY_PORT \
-d $PLUTO_PEER_CLIENT $D_PEER_PORT \
- $IPSEC_POLICY_OUT -j ACCEPT
if [ -n "$PLUTO_IPCOMP" ]
then
- iptables -D INPUT -i $PLUTO_INTERFACE -p 4 \
-+ iptables -D IPSECINPUT -i $PLUTO_INTERFACE -p 4 \
++ iptables --wait -D IPSECINPUT -i $PLUTO_INTERFACE -p 4 \
-s $PLUTO_PEER -d $PLUTO_ME $IPSEC_POLICY_IN -j ACCEPT
fi
#
-@@ -557,12 +619,51 @@
+@@ -382,12 +444,51 @@
if [ "$PLUTO_PEER_CLIENT" = "$PLUTO_PEER/32" ]
then
logger -t $TAG -p $FAC_PRIO -- \
+
+ #
+ # Close Firewall for IPinIP + AH + ESP Traffic
-+ iptables -D IPSECINPUT -i $PLUTO_INTERFACE -p IP \
++ iptables --wait -D IPSECINPUT -i $PLUTO_INTERFACE -p IP \
+ -s $PLUTO_PEER $S_PEER_PORT \
+ -d $PLUTO_ME $D_MY_PORT -j ACCEPT
-+ iptables -D IPSECINPUT -i $PLUTO_INTERFACE -p AH \
++ iptables --wait -D IPSECINPUT -i $PLUTO_INTERFACE -p AH \
+ -s $PLUTO_PEER $S_PEER_PORT \
+ -d $PLUTO_ME $D_MY_PORT -j ACCEPT
-+ iptables -D IPSECINPUT -i $PLUTO_INTERFACE -p ESP \
++ iptables --wait -D IPSECINPUT -i $PLUTO_INTERFACE -p ESP \
+ -s $PLUTO_PEER $S_PEER_PORT \
+ -d $PLUTO_ME $D_MY_PORT -j ACCEPT
+ if [ $VPN_LOGGING ]
+ done
+
+ if [ -n "${src}" ]; then
-+ iptables -t nat -D IPSECNAT -o $PLUTO_INTERFACE -s $PLUTO_ME -d $PLUTO_PEER_CLIENT -j SNAT --to $src
++ iptables --wait -t nat -D IPSECNAT -o $PLUTO_INTERFACE -s $PLUTO_ME -d $PLUTO_PEER_CLIENT -j SNAT --to $src
+ logger -t $TAG -p $FAC_PRIO \
+ "snat- $PLUTO_INTERFACE-$PLUTO_ME : $PLUTO_PEER_CLIENT - $src"
+ else
;;
#
# IPv6
-@@ -597,10 +698,10 @@
+@@ -412,10 +513,10 @@
# connection to me, with (left/right)firewall=yes, coming up
# This is used only by the default updown script, not by your custom
# ones, so do not mess with it; see CAUTION comment up at top.
- ip6tables -I INPUT 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
-+ ip6tables -I IPSECINPUT 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
++ ip6tables --wait -I IPSECINPUT 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
-s $PLUTO_PEER_CLIENT $S_PEER_PORT \
-d $PLUTO_ME $D_MY_PORT $IPSEC_POLICY_IN -j ACCEPT
- ip6tables -I OUTPUT 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
-+ ip6tables -I IPSECOUTPUT 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
++ ip6tables --wait -I IPSECOUTPUT 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
-s $PLUTO_ME $S_MY_PORT $IPSEC_POLICY_OUT \
-d $PLUTO_PEER_CLIENT $D_PEER_PORT -j ACCEPT
#
-@@ -621,10 +722,10 @@
+@@ -436,10 +537,10 @@
# connection to me, with (left/right)firewall=yes, going down
# This is used only by the default updown script, not by your custom
# ones, so do not mess with it; see CAUTION comment up at top.
- ip6tables -D INPUT -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
-+ ip6tables -D IPSECINPUT -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
++ ip6tables --wait -D IPSECINPUT -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
-s $PLUTO_PEER_CLIENT $S_PEER_PORT \
-d $PLUTO_ME $D_MY_PORT $IPSEC_POLICY_IN -j ACCEPT
- ip6tables -D OUTPUT -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
-+ ip6tables -D IPSECOUTPUT -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
++ ip6tables --wait -D IPSECOUTPUT -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
-s $PLUTO_ME $S_MY_PORT $IPSEC_POLICY_OUT \
-d $PLUTO_PEER_CLIENT $D_PEER_PORT -j ACCEPT
#
-@@ -647,10 +748,10 @@
+@@ -462,10 +563,10 @@
# ones, so do not mess with it; see CAUTION comment up at top.
if [ "$PLUTO_PEER_CLIENT" != "$PLUTO_MY_SOURCEIP/128" ]
then
- ip6tables -I FORWARD 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
-+ ip6tables -I IPSECFORWARD 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
++ ip6tables --wait -I IPSECFORWARD 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
-s $PLUTO_MY_CLIENT $S_MY_PORT \
-d $PLUTO_PEER_CLIENT $D_PEER_PORT $IPSEC_POLICY_OUT -j ACCEPT
- ip6tables -I FORWARD 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
-+ ip6tables -I IPSECFORWARD 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
++ ip6tables --wait -I IPSECFORWARD 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
-s $PLUTO_PEER_CLIENT $S_PEER_PORT \
-d $PLUTO_MY_CLIENT $D_MY_PORT $IPSEC_POLICY_IN -j ACCEPT
fi
-@@ -659,10 +760,10 @@
+@@ -474,10 +575,10 @@
# or sometimes host access via the internal IP is needed
if [ -n "$PLUTO_MY_SOURCEIP" -o -n "$PLUTO_HOST_ACCESS" ]
then
- ip6tables -I INPUT 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
-+ ip6tables -I IPSECINPUT 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
++ ip6tables --wait -I IPSECINPUT 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
-s $PLUTO_PEER_CLIENT $S_PEER_PORT \
-d $PLUTO_MY_CLIENT $D_MY_PORT $IPSEC_POLICY_IN -j ACCEPT
- ip6tables -I OUTPUT 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
-+ ip6tables -I IPSECOUTPUT 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
++ ip6tables --wait -I IPSECOUTPUT 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
-s $PLUTO_MY_CLIENT $S_MY_PORT \
-d $PLUTO_PEER_CLIENT $D_PEER_PORT $IPSEC_POLICY_OUT -j ACCEPT
fi
-@@ -686,11 +787,11 @@
+@@ -501,11 +602,11 @@
# ones, so do not mess with it; see CAUTION comment up at top.
if [ "$PLUTO_PEER_CLIENT" != "$PLUTO_MY_SOURCEIP/128" ]
then
- ip6tables -D FORWARD -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
-+ ip6tables -D IPSECFORWARD -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
++ ip6tables --wait -D IPSECFORWARD -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
-s $PLUTO_MY_CLIENT $S_MY_PORT \
-d $PLUTO_PEER_CLIENT $D_PEER_PORT \
$IPSEC_POLICY_OUT -j ACCEPT
- ip6tables -D FORWARD -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
-+ ip6tables -D IPSECFORWARD -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
++ ip6tables --wait -D IPSECFORWARD -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
-s $PLUTO_PEER_CLIENT $S_PEER_PORT \
-d $PLUTO_MY_CLIENT $D_MY_PORT \
$IPSEC_POLICY_IN -j ACCEPT
-@@ -700,11 +801,11 @@
+@@ -515,11 +616,11 @@
# or sometimes host access via the internal IP is needed
if [ -n "$PLUTO_MY_SOURCEIP" -o -n "$PLUTO_HOST_ACCESS" ]
then
- ip6tables -D INPUT -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
-+ ip6tables -D IPSECINPUT -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
++ ip6tables --wait -D IPSECINPUT -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
-s $PLUTO_PEER_CLIENT $S_PEER_PORT \
-d $PLUTO_MY_CLIENT $D_MY_PORT \
$IPSEC_POLICY_IN -j ACCEPT
- ip6tables -D OUTPUT -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
-+ ip6tables -D IPSECOUTPUT -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
++ ip6tables --wait -D IPSECOUTPUT -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
-s $PLUTO_MY_CLIENT $S_MY_PORT \
-d $PLUTO_PEER_CLIENT $D_PEER_PORT \
$IPSEC_POLICY_OUT -j ACCEPT
COREVER=$(cat /opt/pakfire/db/core/mine)
# FIXME: edit this lines before release
-URL="http://download.ipfire.org/releases/ipfire-2.x/2.15-core$COREVER/"
-ISO="ipfire-2.15.i586-full-core$COREVER.iso"
+URL="http://download.ipfire.org/releases/ipfire-2.x/2.17-core$COREVER/"
+ISO="ipfire-2.17.i586-full-core$COREVER.iso"
if [ -z $1 ]; then
echo usage: $0 backup-file
}else{
print "Client $ovpnconfig{$key}[2] NOT converted!\n";
}
- $ovpnconfig{$key}[32] = 'dynamic';
+ $ovpnconfig{$key}[32] = 'dynamic' if ($ovpnconfig{$key}[32] eq '');
}
&General::writehasharray("/var/ipfire/ovpn/ovpnconfig", \%ovpnconfig);
if ($running eq 'on')
--- /dev/null
+#!/usr/bin/perl
+# Converter script for adding existing OpenVPN N2N connections to collectd
+# Used for core update 89
+
+my %ovpnconfig=();
+
+require '/var/ipfire/general-functions.pl';
+
+open(COLLECTDVPN, ">${General::swroot}/ovpn/collectd.vpn") or die "Unable to open collectd.vpn: $!";
+print COLLECTDVPN "Loadplugin openvpn\n";
+print COLLECTDVPN "\n";
+print COLLECTDVPN "<Plugin openvpn>\n";
+print COLLECTDVPN "Statusfile \"/var/run/ovpnserver.log\"\n";
+
+&General::readhasharray("/var/ipfire/ovpn/ovpnconfig", \%ovpnconfig);
+foreach my $key (keys %ovpnconfig) {
+ if ($ovpnconfig{$key}[0] eq 'on' && $ovpnconfig{$key}[3] eq 'net') {
+ print COLLECTDVPN "Statusfile \"/var/run/openvpn/$ovpnconfig{$key}[1]-n2n\"\n";
+ }
+}
+
+print COLLECTDVPN "</Plugin>\n";
+close(COLLECTDVPN);
+
+# Reload collectd afterwards
+system("/usr/local/bin/collectdctrl restart &>/dev/null");
--- /dev/null
+#!/usr/bin/perl
+#
+# Converter for MaxMind CSV database to binary, for xt_geoip
+# Copyright © Jan Engelhardt, 2008-2011
+#
+use Getopt::Long;
+use IO::Handle;
+use Text::CSV_XS; # or trade for Text::CSV
+use strict;
+
+my $csv = Text::CSV_XS->new({
+ allow_whitespace => 1,
+ binary => 1,
+ eol => $/,
+}); # or Text::CSV
+my $target_dir = ".";
+
+&Getopt::Long::Configure(qw(bundling));
+&GetOptions(
+ "D=s" => \$target_dir,
+);
+
+if (!-d $target_dir) {
+ print STDERR "Target directory $target_dir does not exist.\n";
+ exit 1;
+}
+
+my $dir = "$target_dir/LE";
+if (!-e $dir && !mkdir($dir)) {
+ print STDERR "Could not mkdir $dir: $!\n";
+ exit 1;
+}
+
+&dump(&collect());
+
+sub collect
+{
+ my %country;
+
+ while (my $row = $csv->getline(*ARGV)) {
+ if (!defined($country{$row->[4]})) {
+ $country{$row->[4]} = {
+ name => $row->[5],
+ pool_v4 => [],
+ pool_v6 => [],
+ };
+ }
+ my $c = $country{$row->[4]};
+
+ push(@{$c->{pool_v4}}, [$row->[2], $row->[3]]);
+
+ if ($. % 4096 == 0) {
+ print STDERR "\r\e[2K$. entries";
+ }
+ }
+
+ print STDERR "\r\e[2K$. entries total\n";
+ return \%country;
+}
+
+sub dump
+{
+ my $country = shift @_;
+
+ foreach my $iso_code (sort keys %$country) {
+ &dump_one($iso_code, $country->{$iso_code});
+ }
+}
+
+sub dump_one
+{
+ my($iso_code, $country) = @_;
+ my($file, $fh_le, $fh_be);
+
+ printf "%5u IPv4 ranges for %s %s\n",
+ scalar(@{$country->{pool_v4}}),
+ $iso_code, $country->{name};
+
+ $file = "$target_dir/LE/".uc($iso_code).".iv4";
+ if (!open($fh_le, "> $file")) {
+ print STDERR "Error opening $file: $!\n";
+ exit 1;
+ }
+ foreach my $range (@{$country->{pool_v4}}) {
+ print $fh_le pack("VV", $range->[0], $range->[1]);
+ #print $fh_be pack("NN", $range->[0], $range->[1]);
+ }
+ close $fh_le;
+}
--- /dev/null
+#!/bin/bash
+###############################################################################
+# #
+# IPFire.org - A linux based firewall #
+# Copyright (C) 2014 IPFire Development 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/>. #
+# #
+###############################################################################
+
+TMP_PATH=$(mktemp -d)
+TMP_FILE=$(mktemp -p $TMP_PATH)
+
+SCRIPT_PATH=/usr/local/bin
+DEST_PATH=/usr/share/xt_geoip
+
+DL_URL=http://geolite.maxmind.com/download/geoip/database
+DL_FILE=GeoIPCountryCSV.zip
+
+CSV_FILE=GeoIPCountryWhois.csv
+
+ARCH=LE
+
+eval $(/usr/local/bin/readhash /var/ipfire/proxy/settings)
+
+function download() {
+ echo "Downloading latest GeoIP ruleset..."
+
+ # Create temporary directory.
+ mkdir -pv $TMP_PATH
+
+ # Proxy settings.
+ # Check if a proxy should be used.
+ if [[ $UPSTREAM_PROXY ]]; then
+ PROXYSETTINGS="-e http_proxy=http://"
+
+ # Check if authentication against the proxy is configured.
+ if [[ $UPSTREAM_USER && $UPSTREAM_PASSWORD ]]; then
+ PROXYSETTINGS="$PROXYSETTINGS$UPSTREAM_USER:$UPSTREAM_PASSWORD@"
+ fi
+
+ # Add proxy server.
+ PROXYSETTINGS="$PROXYSETTINGS$UPSTREAM_PROXY"
+ fi
+
+ # Get the latest GeoIP database from server.
+ wget $DL_URL/$DL_FILE $PROXYSETTINGS -O $TMP_FILE
+
+ # Extract files.
+ unzip $TMP_FILE -d $TMP_PATH
+
+ return 0
+}
+
+function build() {
+ echo "Convert database..."
+
+ # Check if the csv file exists.
+ if [ ! -e $TMP_PATH/$CSV_FILE ]; then
+ echo "$TMP_PATH/$CSV_FILE not found. Exiting."
+ return 1
+ fi
+
+ # Run script to convert the CSV file into several xtables
+ # compatible binary files.
+ if ! $SCRIPT_PATH/xt_geoip_build $TMP_PATH/$CSV_FILE -D $TMP_PATH; then
+ echo "Could not convert ruleset. Aborting." >&2
+ return 1
+ fi
+
+ return 0
+}
+
+function install() {
+ echo "Install databases..."
+
+ # Check if our destination exist.
+ if [ ! -e "$DEST_PATH" ]; then
+ mkdir -p $DEST_PATH &>/dev/null
+ fi
+
+ # Install databases.
+ if ! cp -af $TMP_PATH/$ARCH $DEST_PATH &>/dev/null; then
+ echo "Could not copy files. Aborting." >&2
+ return 1
+ fi
+
+ return 0
+}
+
+function cleanup() {
+ echo "Cleaning up temporary files..."
+ if ! rm -rf $TMP_PATH &>/dev/null; then
+ echo "Could not remove files. Aborting." >&2
+ return 1
+ fi
+
+ return 0
+}
+
+function main() {
+ # Download ruleset.
+ download || exit $?
+
+ # Convert the ruleset.
+ if ! build; then
+ # Do cleanup.
+ cleanup || exit $?
+ exit 1
+ fi
+
+ # Install the converted ruleset.
+ if ! install; then
+ # Do cleanup.
+ cleanup || exit $?
+ exit 1
+ fi
+
+ # Finaly remove temporary files.
+ cleanup || exit $?
+
+ return 0
+}
+
+# Run the main function.
+main
}
}
-int create_udev(void)
-{
- #define UDEV_NET_CONF "/etc/udev/rules.d/30-persistent-network.rules"
- FILE *fp;
- int i;
-
- if ( (fp = fopen(UDEV_NET_CONF, "w")) == NULL ) {
- fprintf(stderr,"Couldn't open" UDEV_NET_CONF);
- return 1;
- }
-
- for (i = 0 ; i < 4 ; i++)
- {
- if (strcmp(knics[i].macaddr, "")) {
- fprintf(fp,"\n# %s\nACTION==\"add\", SUBSYSTEM==\"net\", ATTR{type}==\"1\", ATTR{address}==\"%s\", NAME=\"%s0\"\n", knics[i].description, knics[i].macaddr, lcolourcard[i]);
- }
- }
- fclose(fp);
- return 0;
-}
-
int write_configs_netudev(int card , int colour)
{
char commandstring[STRING_SIZE];
} else {
rename_nics();
}
- create_udev();
return 1;
}
+ar
+ca
+cs_CZ
+da
de
+el_GR
+es
+fa
+fr
+hr
+hu
+id
+it
+ja
+jv
+km_KH
+nl
+pl
+pt_BR
+pt_PT
+ro_RO
+ru
+rw
+sk
+sq
+sr
+su
+sv
+th
+tk
+tr
+uk
+uz@Latn
+vi
+zh
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Roberto Peña <roberto.pena@northsecure.es>, 2015
+# Roberto Peña <roberto.pena@northsecure.es>, 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"
+"PO-Revision-Date: 2015-02-01 09:37+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"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
#: dhcp.c:50
msgid "Start address:"
-msgstr ""
+msgstr "Dirección inicial:"
#: dhcp.c:51
msgid "End address:"
-msgstr ""
+msgstr "Dirección final:"
#: dhcp.c:52 networking.c:717
msgid "Primary DNS:"
-msgstr ""
+msgstr "DNS primario:"
#: dhcp.c:53 networking.c:723
msgid "Secondary DNS:"
-msgstr ""
+msgstr "DNS secundario:"
#: dhcp.c:54
msgid "Default lease (mins):"
-msgstr ""
+msgstr "Concesión por defecto (mins):"
#: dhcp.c:55
msgid "Max lease (mins):"
-msgstr ""
+msgstr "Concesión máxima (mins):"
#: dhcp.c:56
msgid "Domain name suffix:"
-msgstr ""
+msgstr "Sufijo del nombre de dominio:"
#: 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 "No se puede abrir archivo de configuración"
#: dhcp.c:111
msgid "DHCP server configuration"
-msgstr ""
+msgstr "Configuración del servidor DHCP"
#: dhcp.c:116
msgid "Configure the DHCP server by entering the settings information."
-msgstr ""
+msgstr "Configurar el servidor DHCP mediante la introducción de la información de configuración."
#: dhcp.c:125
msgid "Enabled"
-msgstr ""
+msgstr "Habilitado"
#: 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 "Cancelar"
#: dhcp.c:156
msgid ""
"The following fields are invalid:\n"
"\n"
-msgstr ""
+msgstr "Los siguientes campos son inválidos:\n\n"
#: dhcp.c:159
msgid "Start address"
-msgstr ""
+msgstr "Dirección de inicio"
#: dhcp.c:165
msgid "End address"
-msgstr ""
+msgstr "Dirección final"
#: dhcp.c:173 networking.c:755
msgid "Primary DNS"
-msgstr ""
+msgstr "DNS primario"
#: dhcp.c:182 networking.c:764
msgid "Secondary DNS"
-msgstr ""
+msgstr "DNS secundario"
#: dhcp.c:189
msgid "Default lease time"
-msgstr ""
+msgstr "Tiempo de concesión por defecto"
#: dhcp.c:195
msgid "Max. lease time"
-msgstr ""
+msgstr "Concesión máx. de tiempo"
#: domainname.c:42 main.c:70
msgid "Domain name"
-msgstr ""
+msgstr "Nombre de dominio"
#: domainname.c:42
msgid "Enter Domain name"
-msgstr ""
+msgstr "Introduzca el nombre de dominio"
#: domainname.c:48
msgid "Domain name cannot be empty."
-msgstr ""
+msgstr "El nombre de dominio no puede estar vacio."
#: domainname.c:50
msgid "Domain name cannot contain spaces."
-msgstr ""
+msgstr "El nombre de dominio no puede contener espacios."
#: domainname.c:53
msgid "Domain name may only contain letters, numbers, hyphens and periods."
-msgstr ""
+msgstr "El nombre de dominio sólo puede contener letras, números, guiones y puntos."
#: hostname.c:46 main.c:69
msgid "Hostname"
-msgstr ""
+msgstr "Nombre de host"
#: hostname.c:46
msgid "Enter the machine's hostname."
-msgstr ""
+msgstr "Introduzca el nombre de host de la máquina."
#: hostname.c:53
msgid "Hostname cannot be empty."
-msgstr ""
+msgstr "El nombre de host no puede estar vacio."
#: hostname.c:55
msgid "Hostname cannot contain spaces."
-msgstr ""
+msgstr "El nombre de host no puede contener espacios."
#: hostname.c:58
msgid "Hostname may only contain letters, numbers and hyphens."
-msgstr ""
+msgstr "El nombre de host sólo puede contener letras, números y guiones."
#: keymap.c:84 main.c:67
msgid "Keyboard mapping"
-msgstr ""
+msgstr "Mapa del teclado"
#: keymap.c:85
msgid "Choose the type of keyboard you are using from the list below."
-msgstr ""
+msgstr "Elija el tipo de teclado que está utilizando de la lista de abajo."
#: main.c:68 timezone.c:77
msgid "Timezone"
-msgstr ""
+msgstr "Zona horaria"
#: main.c:71 networking.c:110 networking.c:115 networking.c:447
msgid "Networking"
-msgstr ""
+msgstr "Networking"
#: main.c:72 misc.c:147
msgid "ISDN"
-msgstr ""
+msgstr "RDSI"
#: main.c:73
msgid "'root' password"
-msgstr ""
+msgstr "Contraseña de 'root'"
#: main.c:74
msgid "'admin' password"
-msgstr ""
+msgstr "Contraseña de 'admin'"
#: main.c:90
msgid " <Tab>/<Alt-Tab> between elements | <Space> selects"
-msgstr ""
+msgstr "<Tab>/<Alt-Tab> entre elementos | <Space> seleccionar"
#: main.c:97
msgid "Section menu"
-msgstr ""
+msgstr "Menú de las secciones"
#: main.c:98
msgid "Select the item you wish to configure."
-msgstr ""
+msgstr "Seleccione el elemento que desea configurar."
#: main.c:99
msgid "Quit"
-msgstr ""
+msgstr "Salir"
#: main.c:172
msgid "Setup is complete."
-msgstr ""
+msgstr "La instalación está completa."
#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
msgid "Warning"
-msgstr ""
+msgstr "Advertencia"
#: 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 "La instalación inicial no ha sido completada enteramente. Debe asegurarse que está correctamente finalizada ejecutando la instalación en el shell."
#: misc.c:62
#, c-format
msgid "Unable to write %s/main/hostname.conf"
-msgstr ""
+msgstr "No se puede escribir %s/main/hostname.conf"
#: misc.c:71
msgid "Unable to open main hosts file."
-msgstr ""
+msgstr "No se puede abrir archivo principal host."
#: misc.c:76
msgid "Unable to write /etc/hosts."
-msgstr ""
+msgstr "No se puede escribir /etc/hosts."
#: misc.c:117
msgid "Unable to write /etc/hosts.deny."
-msgstr ""
+msgstr "No se puede escribir /etc/hosts.deny."
#: misc.c:125
msgid "Unable to write /etc/hosts.allow."
-msgstr ""
+msgstr "No se puede escribir /etc/hosts.allow."
#: misc.c:136
msgid "Unable to set hostname."
-msgstr ""
+msgstr "No se puede establecer el nombre del host."
#: misc.c:147
msgid "Scanning and configuring ISDN devices."
-msgstr ""
+msgstr "Escaneando y configurando los dispositivos RDSI."
#: misc.c:148
msgid "Unable to scan for ISDN devices."
-msgstr ""
+msgstr "Incapaz de buscar los dispositivos RDSI."
#: netstuff.c:86
#, c-format
msgid "Interface - %s"
-msgstr ""
+msgstr "Interfaz - %s"
#: netstuff.c:91
#, c-format
msgid "Enter the IP address information for the %s interface."
-msgstr ""
+msgstr "Introduzca la información de la dirección IP para la interfaz %s."
#: netstuff.c:103
msgid "Static"
-msgstr ""
+msgstr "Estático"
#: 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 "Nombre del host DHCP:"
#: netstuff.c:115
msgid "Force DHCP MTU:"
-msgstr ""
+msgstr "Forzar DHCP MTU:"
#: netstuff.c:134
msgid "IP address:"
-msgstr ""
+msgstr "Dirección IP:"
#: netstuff.c:146
msgid "Network mask:"
-msgstr ""
+msgstr "Máscara de red:"
#: netstuff.c:173 networking.c:749
msgid "The following fields are invalid:"
-msgstr ""
+msgstr "Los siguientes campos son inválidos:"
#: netstuff.c:183
msgid "IP address"
-msgstr ""
+msgstr "Dirección IP"
#: netstuff.c:189
msgid "Network mask"
-msgstr ""
+msgstr "Máscara de red"
#: netstuff.c:198
msgid "DHCP hostname"
-msgstr ""
+msgstr "Nombre del host DHCP"
#: netstuff.c:396 netstuff.c:709
msgid "Unset"
-msgstr ""
+msgstr "No definido"
#: netstuff.c:669
#, c-format
msgid "Please choose a networkcard for the following interface - %s."
-msgstr ""
+msgstr "Por favor elija una tarjeta de red para la siguiente interfaz - %s."
#: netstuff.c:672
msgid "Extended Network Menu"
-msgstr ""
+msgstr "Menú Extendido de Red"
#: netstuff.c:673 networking.c:520
msgid "Select"
-msgstr ""
+msgstr "Seleccionar"
#: netstuff.c:673
msgid "Identify"
-msgstr ""
+msgstr "Identificar"
#: netstuff.c:678
msgid "Device Identification"
-msgstr ""
+msgstr "Identificación del dispositivo"
#: netstuff.c:678
msgid "The lights on the selected port should flash now for 10 seconds..."
-msgstr ""
+msgstr "Las luces en el puerto seleccionado deben parpadear ahora durante 10 segundos ..."
#: netstuff.c:679
msgid "Identification is not supported by this interface."
-msgstr ""
+msgstr "La identificación no es compatible con esta interfaz."
#: netstuff.c:691
msgid "There are no unassigned interfaces on your system."
-msgstr ""
+msgstr "No hay interfaces no asignadas en el sistema."
#: netstuff.c:732
#, c-format
msgid "Do you really want to remove the assigned %s interface?"
-msgstr ""
+msgstr "¿Realmente desea eliminar la interfaz asignada %s?"
#: netstuff.c:755
msgid "Select network driver"
-msgstr ""
+msgstr "Seleccionar controlador de red"
#: netstuff.c:755
msgid "Set additional module parameters"
-msgstr ""
+msgstr "Establecer parámetros de los módulos adicionales"
#: netstuff.c:762
msgid "Loading module..."
-msgstr ""
+msgstr "Leyendo módulo..."
#: netstuff.c:777
msgid "Unable to load driver module."
-msgstr ""
+msgstr "No se puede cargar el módulo controlador."
#: netstuff.c:780
msgid "Module name cannot be blank."
-msgstr ""
+msgstr "Nombre del módulo no puede estar en blanco."
#: networking.c:110
msgid "Stopping network..."
-msgstr ""
+msgstr "Deteniendo la red..."
#: networking.c:115
msgid "Restarting network..."
-msgstr ""
+msgstr "Reiniciando la red..."
#: networking.c:146
msgid "No GREEN interface assigned."
-msgstr ""
+msgstr "No asignada la interfaz GREEN."
#: networking.c:152
msgid "Missing an IP address on GREEN."
-msgstr ""
+msgstr "Falta la dirección IP en GREEN."
#: networking.c:163
msgid "Error"
-msgstr ""
+msgstr "Error"
#: networking.c:163
msgid "Ignore"
-msgstr ""
+msgstr "Ignorar"
#: networking.c:164
msgid "No RED interface assigned."
-msgstr ""
+msgstr "No asignada la interfaz RED."
#: networking.c:173
msgid "Missing an IP address on RED."
-msgstr ""
+msgstr "Falta la dirección IP en RED."
#: networking.c:183
msgid "No ORANGE interface assigned."
-msgstr ""
+msgstr "No asignada la interfaz ORANGE."
#: networking.c:189
msgid "Missing an IP address on ORANGE."
-msgstr ""
+msgstr "Falta la dirección IP en ORANGE."
#: networking.c:199
msgid "No BLUE interface assigned."
-msgstr ""
+msgstr "No asignada la interfaz BLUE."
#: networking.c:205
msgid "Missing an IP address on BLUE."
-msgstr ""
+msgstr "Falta la dirección IP en BLUE."
#: networking.c:217
msgid "Misssing DNS."
-msgstr ""
+msgstr "Falta DNS."
#: networking.c:224
msgid "Missing Default Gateway."
-msgstr ""
+msgstr "Falta Puerta de Enlace predeterminada."
#: networking.c:237 networking.c:304
msgid "Network configuration type"
-msgstr ""
+msgstr "Tipo de configuración de red"
#: networking.c:238 networking.c:409
msgid "Drivers and card assignments"
-msgstr ""
+msgstr "Asignación de controladores y tarjetas"
#: networking.c:239 networking.c:640
msgid "Address settings"
-msgstr ""
+msgstr "Configuración de dirección"
#: networking.c:240 networking.c:743
msgid "DNS and Gateway settings"
-msgstr ""
+msgstr "Configuración de DNS y Puerta de Enlace"
#: networking.c:260
msgid "When configuration is complete, a network restart will be required."
-msgstr ""
+msgstr "Cuando haya finalizado la configuración, será necesario el reinicio de la red."
#: networking.c:267
#, c-format
"Current config: %s\n"
"\n"
"%s"
-msgstr ""
+msgstr "Configuración actual: %s\n\n%s"
#: networking.c:268
msgid "Network configuration menu"
-msgstr ""
+msgstr "Menú de la configuración de red"
#: networking.c:269 networking.c:520 networking.c:642
msgid "Done"
-msgstr ""
+msgstr "Hecho"
#: 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 "Seleccione la configuración de la red para %s. La lista de los siguientes tipos de configuración tienen que tener una conexión ethernet. Si cambia esta configuración, se requiere un reinicio de la red, y tendrá que volver a configurar las asignaciones de controlador de red."
#: networking.c:307
#, c-format
"Not enough netcards for your choice.\n"
"\n"
"Needed: %d - Available: %d\n"
-msgstr ""
+msgstr "No hay suficientes tarjetas de red para su elección.\n\nNecesarias: %d - Disponibles: %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 "Configurar los controladores de red y la interfaz que se ha asignado a cada tarjeta. La configuración actual es la siguiente:\n\n"
#: networking.c:408
msgid "Do you wish to change these settings?"
-msgstr ""
+msgstr "¿Desea cambiar esta configuración?"
#: networking.c:447
msgid "Restarting non-local network..."
-msgstr ""
+msgstr "Reiniciando redes no locales..."
#: networking.c:464
msgid ""
"Please choose the interface you wish to change.\n"
"\n"
-msgstr ""
+msgstr "Por favor, elija la interfaz que desea cambiar.\n\n"
#: networking.c:519
msgid "Assigned Cards"
-msgstr ""
+msgstr "Tarjetas asignadas"
#: networking.c:520
msgid "Remove"
-msgstr ""
+msgstr "Quitar"
#: 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 cambia esta dirección IP y tiene iniciada una sesión en el sistema de forma remota, la conexión a la máquina %s será cortada y tendrá que volver a conectar en la nueva IP. Esta es una operación arriesgada, y sólo debe intentarse si tiene acceso físico a la máquina, por si algo sale mal."
#: networking.c:641
msgid "Select the interface you wish to reconfigure."
-msgstr ""
+msgstr "Seleccione la interfaz que desea reconfigurar."
#: networking.c:729
msgid "Default gateway:"
-msgstr ""
+msgstr "Puerta de Enlace predeterminada:"
#: 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 "Introduzca la información del DNS y la Puerta de Enlace. Estos ajustes se utilizan sólo con IP estática (y DHCP si está configurado DNS) en la interfaz de RED."
#: networking.c:773
msgid "Default gateway"
-msgstr ""
+msgstr "Puerta de Enlace predeterminada"
#: networking.c:780
msgid "Secondary DNS specified without a Primary DNS"
-msgstr ""
+msgstr "DNS secundario especificado sin DNS primario"
#: passwords.c:33
msgid ""
"Enter the 'root' user password. Login as this user for commandline access."
-msgstr ""
+msgstr "Introduzca la contraseña de 'root'. Iniciar la sesión como este usuario para el acceso de linea de comandos."
#: passwords.c:38 passwords.c:61
msgid "Setting password"
-msgstr ""
+msgstr "Configuración de la contraseña"
#: passwords.c:38
msgid "Setting 'root' password...."
-msgstr ""
+msgstr "Configuración de la contraseña de 'root'..."
#: passwords.c:39
msgid "Problem setting 'root' password."
-msgstr ""
+msgstr "Problema en la configuración de la contraseña de '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 "Introduzca contraseña de usuario %s 'admin'. Este es el usuario que se utiliza para iniciar sesión en las páginas de administración web de %s."
#: passwords.c:60
#, c-format
msgid "Setting %s 'admin' user password..."
-msgstr ""
+msgstr "Configuración de la contraseña del usuario %s 'admin'..."
#: passwords.c:62
#, c-format
msgid "Problem setting %s 'admin' user password."
-msgstr ""
+msgstr "Problemas al configurar la contraseña del usuario %s 'admin'."
#: passwords.c:76
msgid "Password:"
-msgstr ""
+msgstr "Contraseña:"
#: passwords.c:77
msgid "Again:"
-msgstr ""
+msgstr "De nuevo:"
#: passwords.c:95
msgid "Password cannot be blank."
-msgstr ""
+msgstr "La contraseña no puede estar en blanco."
#: passwords.c:102
msgid "Passwords do not match."
-msgstr ""
+msgstr "Las contraseñas no coinciden."
#: passwords.c:109
msgid "Password cannot contain spaces."
-msgstr ""
+msgstr "La contraseña no puede contener espacios."
#: timezone.c:77
msgid "Choose the timezone you are in from the list below."
-msgstr ""
+msgstr "Seleccione la zona horaria de donde se encuentra en la lista de abajo."
#
# Translators:
# hashem ghavami <hashem.wolf@gmail.com>, 2014
-# Khalil Delavaran <khalil.delavaran@gmail.com>, 2014
+# Khalil Delavaran <khalil.delavaran@gmail.com>, 2014-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-11-12 18:28+0000\n"
+"PO-Revision-Date: 2015-01-26 06:42+0000\n"
"Last-Translator: Khalil Delavaran <khalil.delavaran@gmail.com>\n"
"Language-Team: Persian (http://www.transifex.com/projects/p/ipfire/language/fa/)\n"
"MIME-Version: 1.0\n"
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?"
"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 "اطلاعات gateway و DNS را بنویسید. این پیکربندی ها فقط با IP استاتیک (و DHCP اگر DNS نوشته شده باشد) بر روی اینترفیس قرمز بکار می روند."
#: networking.c:773
msgid "Default gateway"
msgid ""
"Enter %s 'admin' user password. This is the user to use for logging into the"
" %s web administration pages."
-msgstr ""
+msgstr "گذرواژه کاربر 'admin' %s را بنویسید. این کاربر برای ورود به برگه مدیریت وب %s می باشد."
#: passwords.c:60
#, c-format
#
# Translators:
# irenee Munyaneza <muirenee@yahoo.fr>, 2014
+# nonux <nonux@free.fr>, 2015
+# 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: 2014-10-06 16:32+0000\n"
-"Last-Translator: irenee Munyaneza <muirenee@yahoo.fr>\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"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
#: dhcp.c:50
msgid "Start address:"
-msgstr ""
+msgstr "Adresse du début :"
#: dhcp.c:51
msgid "End address:"
-msgstr ""
+msgstr "Adresse de fin : "
#: dhcp.c:52 networking.c:717
msgid "Primary DNS:"
-msgstr ""
+msgstr "DNS primaire:"
#: dhcp.c:53 networking.c:723
msgid "Secondary DNS:"
-msgstr ""
+msgstr "DNS secondaire:"
#: dhcp.c:54
msgid "Default lease (mins):"
-msgstr ""
+msgstr "Bail par défaut (mins) :"
#: dhcp.c:55
msgid "Max lease (mins):"
-msgstr ""
+msgstr "Bail maximum (mins) :"
#: dhcp.c:56
msgid "Domain name suffix:"
-msgstr ""
+msgstr "Suffixe du nom de domaine : "
#: 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 "Impossible d'ouvrir le fichier de paramètres"
#: dhcp.c:111
msgid "DHCP server configuration"
-msgstr ""
+msgstr "Configuration du serveur DHCP"
#: dhcp.c:116
msgid "Configure the DHCP server by entering the settings information."
#: dhcp.c:125
msgid "Enabled"
-msgstr ""
+msgstr "Activé"
#: 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
msgid ""
"The following fields are invalid:\n"
"\n"
-msgstr ""
+msgstr "Les champs suivants sont invalides:\n\n"
#: dhcp.c:159
msgid "Start address"
-msgstr ""
+msgstr "Adresse du début :"
#: dhcp.c:165
msgid "End address"
-msgstr ""
+msgstr "Adresse de fin : "
#: dhcp.c:173 networking.c:755
msgid "Primary DNS"
-msgstr ""
+msgstr "DNS primaire"
#: dhcp.c:182 networking.c:764
msgid "Secondary DNS"
-msgstr ""
+msgstr "DNS secondaire"
#: dhcp.c:189
msgid "Default lease time"
-msgstr ""
+msgstr "Bail par défaut"
#: dhcp.c:195
msgid "Max. lease time"
-msgstr ""
+msgstr "Bail maximum"
#: domainname.c:42 main.c:70
msgid "Domain name"
#: domainname.c:42
msgid "Enter Domain name"
-msgstr ""
+msgstr "Entrez le nom de domaine"
#: domainname.c:48
msgid "Domain name cannot be empty."
-msgstr ""
+msgstr "Le nom de domaine ne peut pas être vide."
#: domainname.c:50
msgid "Domain name cannot contain spaces."
-msgstr ""
+msgstr "Le nom de domaine ne peut pas contenir d'espace."
#: domainname.c:53
msgid "Domain name may only contain letters, numbers, hyphens and periods."
-msgstr ""
+msgstr "Le nom de domaine ne peut contenir que des lettres, nombres, traits d'union ou point."
#: hostname.c:46 main.c:69
msgid "Hostname"
-msgstr ""
+msgstr "Nom d'hôte"
#: hostname.c:46
msgid "Enter the machine's hostname."
-msgstr ""
+msgstr "Entrez le nom d'hôte de la machine."
#: hostname.c:53
msgid "Hostname cannot be empty."
-msgstr ""
+msgstr "Le nom de domaine ne peut pas être vide."
#: hostname.c:55
msgid "Hostname cannot contain spaces."
-msgstr ""
+msgstr "Le nom de domaine ne doit pas contenir d'espaces."
#: hostname.c:58
msgid "Hostname may only contain letters, numbers and hyphens."
#: main.c:68 timezone.c:77
msgid "Timezone"
-msgstr ""
+msgstr "Fuseau horaire"
#: main.c:71 networking.c:110 networking.c:115 networking.c:447
msgid "Networking"
-msgstr ""
+msgstr "Réseau"
#: main.c:72 misc.c:147
msgid "ISDN"
#: main.c:73
msgid "'root' password"
-msgstr ""
+msgstr "Mot de passe \"root\""
#: main.c:74
msgid "'admin' password"
-msgstr ""
+msgstr "Most de passe \"admin\""
#: main.c:90
msgid " <Tab>/<Alt-Tab> between elements | <Space> selects"
#: main.c:97
msgid "Section menu"
-msgstr ""
+msgstr "Menu de sélection"
#: main.c:98
msgid "Select the item you wish to configure."
#: main.c:99
msgid "Quit"
-msgstr ""
+msgstr "Quitter"
#: main.c:172
msgid "Setup is complete."
#: misc.c:76
msgid "Unable to write /etc/hosts."
-msgstr ""
+msgstr "Impossible d'écrire /etc/hosts."
#: misc.c:117
msgid "Unable to write /etc/hosts.deny."
-msgstr ""
+msgstr "Impossible d'écrire /etc/hosts.deny."
#: misc.c:125
msgid "Unable to write /etc/hosts.allow."
-msgstr ""
+msgstr "Impossible d'écrire /etc/hosts.allow."
#: misc.c:136
msgid "Unable to set hostname."
-msgstr ""
+msgstr "Impossible de définir le nom d'hôte"
#: misc.c:147
msgid "Scanning and configuring ISDN devices."
#: netstuff.c:86
#, c-format
msgid "Interface - %s"
-msgstr ""
+msgstr "Interface - %s"
#: netstuff.c:91
#, c-format
#: netstuff.c:103
msgid "Static"
-msgstr ""
+msgstr "Statique"
#: netstuff.c:104
msgid "DHCP"
-msgstr ""
+msgstr "DHCP"
#: netstuff.c:105
msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
#: netstuff.c:113
msgid "DHCP Hostname:"
-msgstr ""
+msgstr "Nom d'hôte DHCP:"
#: netstuff.c:115
msgid "Force DHCP MTU:"
#: netstuff.c:146
msgid "Network mask:"
-msgstr ""
+msgstr "Masque de sous-réseau : "
#: netstuff.c:173 networking.c:749
msgid "The following fields are invalid:"
-msgstr ""
+msgstr "Les champs suivants sont invalides : "
#: netstuff.c:183
msgid "IP address"
#: netstuff.c:189
msgid "Network mask"
-msgstr ""
+msgstr "Masque de réseau"
#: netstuff.c:198
msgid "DHCP hostname"
-msgstr ""
+msgstr "Nom d'hôte DHCP"
#: netstuff.c:396 netstuff.c:709
msgid "Unset"
#: netstuff.c:673 networking.c:520
msgid "Select"
-msgstr ""
+msgstr "Sélectionner"
#: netstuff.c:673
msgid "Identify"
#: netstuff.c:678
msgid "Device Identification"
-msgstr ""
+msgstr "Identification du périphérique"
#: netstuff.c:678
msgid "The lights on the selected port should flash now for 10 seconds..."
#: netstuff.c:762
msgid "Loading module..."
-msgstr ""
+msgstr "Chargement du module..."
#: netstuff.c:777
msgid "Unable to load driver module."
#: networking.c:110
msgid "Stopping network..."
-msgstr ""
+msgstr "Arrêt du réseau..."
#: networking.c:115
msgid "Restarting network..."
-msgstr ""
+msgstr "Re-démarrage du réseau..."
#: networking.c:146
msgid "No GREEN interface assigned."
-msgstr ""
+msgstr "Pas d'interface VERTE assignée."
#: networking.c:152
msgid "Missing an IP address on GREEN."
#: networking.c:164
msgid "No RED interface assigned."
-msgstr ""
+msgstr "Pas d'interface ROUGE assignée."
#: networking.c:173
msgid "Missing an IP address on RED."
#: networking.c:183
msgid "No ORANGE interface assigned."
-msgstr ""
+msgstr "Pas d'interface ORANGE assignée."
#: networking.c:189
msgid "Missing an IP address on ORANGE."
#: networking.c:199
msgid "No BLUE interface assigned."
-msgstr ""
+msgstr "Pas d'interface BLEUE assignée."
#: networking.c:205
msgid "Missing an IP address on BLUE."
#: networking.c:269 networking.c:520 networking.c:642
msgid "Done"
-msgstr ""
+msgstr "Terminé"
#: networking.c:300
#, c-format
--- /dev/null
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+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-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: jv\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: dhcp.c:50
+msgid "Start address:"
+msgstr ""
+
+#: dhcp.c:51
+msgid "End address:"
+msgstr ""
+
+#: dhcp.c:52 networking.c:717
+msgid "Primary DNS:"
+msgstr ""
+
+#: dhcp.c:53 networking.c:723
+msgid "Secondary DNS:"
+msgstr ""
+
+#: dhcp.c:54
+msgid "Default lease (mins):"
+msgstr ""
+
+#: dhcp.c:55
+msgid "Max lease (mins):"
+msgstr ""
+
+#: dhcp.c:56
+msgid "Domain name suffix:"
+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:134 networking.c:255 networking.c:291 networking.c:346
+#: 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 ""
+
+#: dhcp.c:111
+msgid "DHCP server configuration"
+msgstr ""
+
+#: dhcp.c:116
+msgid "Configure the DHCP server by entering the settings information."
+msgstr ""
+
+#: dhcp.c:125
+msgid "Enabled"
+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:269 networking.c:305 networking.c:409 networking.c:560
+#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89
+#: timezone.c:78
+msgid "OK"
+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 ""
+
+#: dhcp.c:156
+msgid ""
+"The following fields are invalid:\n"
+"\n"
+msgstr ""
+
+#: dhcp.c:159
+msgid "Start address"
+msgstr ""
+
+#: dhcp.c:165
+msgid "End address"
+msgstr ""
+
+#: dhcp.c:173 networking.c:755
+msgid "Primary DNS"
+msgstr ""
+
+#: dhcp.c:182 networking.c:764
+msgid "Secondary DNS"
+msgstr ""
+
+#: dhcp.c:189
+msgid "Default lease time"
+msgstr ""
+
+#: dhcp.c:195
+msgid "Max. lease time"
+msgstr ""
+
+#: domainname.c:42 main.c:70
+msgid "Domain name"
+msgstr ""
+
+#: domainname.c:42
+msgid "Enter Domain name"
+msgstr ""
+
+#: domainname.c:48
+msgid "Domain name cannot be empty."
+msgstr ""
+
+#: domainname.c:50
+msgid "Domain name cannot contain spaces."
+msgstr ""
+
+#: domainname.c:53
+msgid "Domain name may only contain letters, numbers, hyphens and periods."
+msgstr ""
+
+#: hostname.c:46 main.c:69
+msgid "Hostname"
+msgstr ""
+
+#: hostname.c:46
+msgid "Enter the machine's hostname."
+msgstr ""
+
+#: hostname.c:53
+msgid "Hostname cannot be empty."
+msgstr ""
+
+#: hostname.c:55
+msgid "Hostname cannot contain spaces."
+msgstr ""
+
+#: hostname.c:58
+msgid "Hostname may only contain letters, numbers and hyphens."
+msgstr ""
+
+#: keymap.c:84 main.c:67
+msgid "Keyboard mapping"
+msgstr ""
+
+#: keymap.c:85
+msgid "Choose the type of keyboard you are using from the list below."
+msgstr ""
+
+#: main.c:68 timezone.c:77
+msgid "Timezone"
+msgstr ""
+
+#: main.c:71 networking.c:110 networking.c:115 networking.c:447
+msgid "Networking"
+msgstr ""
+
+#: main.c:72 misc.c:147
+msgid "ISDN"
+msgstr ""
+
+#: main.c:73
+msgid "'root' password"
+msgstr ""
+
+#: main.c:74
+msgid "'admin' password"
+msgstr ""
+
+#: main.c:90
+msgid " <Tab>/<Alt-Tab> between elements | <Space> selects"
+msgstr ""
+
+#: main.c:97
+msgid "Section menu"
+msgstr ""
+
+#: main.c:98
+msgid "Select the item you wish to configure."
+msgstr ""
+
+#: main.c:99
+msgid "Quit"
+msgstr ""
+
+#: main.c:172
+msgid "Setup is complete."
+msgstr ""
+
+#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
+msgid "Warning"
+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 ""
+
+#: misc.c:62
+#, c-format
+msgid "Unable to write %s/main/hostname.conf"
+msgstr ""
+
+#: misc.c:71
+msgid "Unable to open main hosts file."
+msgstr ""
+
+#: misc.c:76
+msgid "Unable to write /etc/hosts."
+msgstr ""
+
+#: misc.c:117
+msgid "Unable to write /etc/hosts.deny."
+msgstr ""
+
+#: misc.c:125
+msgid "Unable to write /etc/hosts.allow."
+msgstr ""
+
+#: misc.c:136
+msgid "Unable to set hostname."
+msgstr ""
+
+#: misc.c:147
+msgid "Scanning and configuring ISDN devices."
+msgstr ""
+
+#: misc.c:148
+msgid "Unable to scan for ISDN devices."
+msgstr ""
+
+#: netstuff.c:86
+#, c-format
+msgid "Interface - %s"
+msgstr ""
+
+#: netstuff.c:91
+#, c-format
+msgid "Enter the IP address information for the %s interface."
+msgstr ""
+
+#: netstuff.c:103
+msgid "Static"
+msgstr ""
+
+#: netstuff.c:104
+msgid "DHCP"
+msgstr ""
+
+#: netstuff.c:105
+msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
+msgstr ""
+
+#: netstuff.c:113
+msgid "DHCP Hostname:"
+msgstr ""
+
+#: netstuff.c:115
+msgid "Force DHCP MTU:"
+msgstr ""
+
+#: netstuff.c:134
+msgid "IP address:"
+msgstr ""
+
+#: netstuff.c:146
+msgid "Network mask:"
+msgstr ""
+
+#: netstuff.c:173 networking.c:749
+msgid "The following fields are invalid:"
+msgstr ""
+
+#: netstuff.c:183
+msgid "IP address"
+msgstr ""
+
+#: netstuff.c:189
+msgid "Network mask"
+msgstr ""
+
+#: netstuff.c:198
+msgid "DHCP hostname"
+msgstr ""
+
+#: netstuff.c:396 netstuff.c:709
+msgid "Unset"
+msgstr ""
+
+#: netstuff.c:669
+#, c-format
+msgid "Please choose a networkcard for the following interface - %s."
+msgstr ""
+
+#: netstuff.c:672
+msgid "Extended Network Menu"
+msgstr ""
+
+#: netstuff.c:673 networking.c:520
+msgid "Select"
+msgstr ""
+
+#: netstuff.c:673
+msgid "Identify"
+msgstr ""
+
+#: netstuff.c:678
+msgid "Device Identification"
+msgstr ""
+
+#: netstuff.c:678
+msgid "The lights on the selected port should flash now for 10 seconds..."
+msgstr ""
+
+#: netstuff.c:679
+msgid "Identification is not supported by this interface."
+msgstr ""
+
+#: netstuff.c:691
+msgid "There are no unassigned interfaces on your system."
+msgstr ""
+
+#: netstuff.c:732
+#, c-format
+msgid "Do you really want to remove the assigned %s interface?"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Select network driver"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Set additional module parameters"
+msgstr ""
+
+#: netstuff.c:762
+msgid "Loading module..."
+msgstr ""
+
+#: netstuff.c:777
+msgid "Unable to load driver module."
+msgstr ""
+
+#: netstuff.c:780
+msgid "Module name cannot be blank."
+msgstr ""
+
+#: networking.c:110
+msgid "Stopping network..."
+msgstr ""
+
+#: networking.c:115
+msgid "Restarting network..."
+msgstr ""
+
+#: networking.c:146
+msgid "No GREEN interface assigned."
+msgstr ""
+
+#: networking.c:152
+msgid "Missing an IP address on GREEN."
+msgstr ""
+
+#: networking.c:163
+msgid "Error"
+msgstr ""
+
+#: networking.c:163
+msgid "Ignore"
+msgstr ""
+
+#: networking.c:164
+msgid "No RED interface assigned."
+msgstr ""
+
+#: networking.c:173
+msgid "Missing an IP address on RED."
+msgstr ""
+
+#: networking.c:183
+msgid "No ORANGE interface assigned."
+msgstr ""
+
+#: networking.c:189
+msgid "Missing an IP address on ORANGE."
+msgstr ""
+
+#: networking.c:199
+msgid "No BLUE interface assigned."
+msgstr ""
+
+#: networking.c:205
+msgid "Missing an IP address on BLUE."
+msgstr ""
+
+#: networking.c:217
+msgid "Misssing DNS."
+msgstr ""
+
+#: networking.c:224
+msgid "Missing Default Gateway."
+msgstr ""
+
+#: networking.c:237 networking.c:304
+msgid "Network configuration type"
+msgstr ""
+
+#: networking.c:238 networking.c:409
+msgid "Drivers and card assignments"
+msgstr ""
+
+#: networking.c:239 networking.c:640
+msgid "Address settings"
+msgstr ""
+
+#: networking.c:240 networking.c:743
+msgid "DNS and Gateway settings"
+msgstr ""
+
+#: networking.c:260
+msgid "When configuration is complete, a network restart will be required."
+msgstr ""
+
+#: networking.c:267
+#, c-format
+msgid ""
+"Current config: %s\n"
+"\n"
+"%s"
+msgstr ""
+
+#: networking.c:268
+msgid "Network configuration menu"
+msgstr ""
+
+#: networking.c:269 networking.c:520 networking.c:642
+msgid "Done"
+msgstr ""
+
+#: networking.c:300
+#, c-format
+msgid ""
+"Select the network configuration for %s. The following configuration types "
+"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 ""
+
+#: networking.c:307
+#, c-format
+msgid ""
+"Not enough netcards for your choice.\n"
+"\n"
+"Needed: %d - Available: %d\n"
+msgstr ""
+
+#: networking.c:359
+msgid ""
+"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
+"\n"
+msgstr ""
+
+#: networking.c:408
+msgid "Do you wish to change these settings?"
+msgstr ""
+
+#: networking.c:447
+msgid "Restarting non-local network..."
+msgstr ""
+
+#: networking.c:464
+msgid ""
+"Please choose the interface you wish to change.\n"
+"\n"
+msgstr ""
+
+#: networking.c:519
+msgid "Assigned Cards"
+msgstr ""
+
+#: networking.c:520
+msgid "Remove"
+msgstr ""
+
+#: networking.c:556 networking.c:649
+#, c-format
+msgid ""
+"If you change this IP address, and you are logged in remotely, your "
+"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 ""
+
+#: networking.c:641
+msgid "Select the interface you wish to reconfigure."
+msgstr ""
+
+#: networking.c:729
+msgid "Default gateway:"
+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 ""
+
+#: networking.c:773
+msgid "Default gateway"
+msgstr ""
+
+#: networking.c:780
+msgid "Secondary DNS specified without a Primary DNS"
+msgstr ""
+
+#: passwords.c:33
+msgid ""
+"Enter the 'root' user password. Login as this user for commandline access."
+msgstr ""
+
+#: passwords.c:38 passwords.c:61
+msgid "Setting password"
+msgstr ""
+
+#: passwords.c:38
+msgid "Setting 'root' password...."
+msgstr ""
+
+#: passwords.c:39
+msgid "Problem setting 'root' password."
+msgstr ""
+
+#: 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 ""
+
+#: passwords.c:60
+#, c-format
+msgid "Setting %s 'admin' user password..."
+msgstr ""
+
+#: passwords.c:62
+#, c-format
+msgid "Problem setting %s 'admin' user password."
+msgstr ""
+
+#: passwords.c:76
+msgid "Password:"
+msgstr ""
+
+#: passwords.c:77
+msgid "Again:"
+msgstr ""
+
+#: passwords.c:95
+msgid "Password cannot be blank."
+msgstr ""
+
+#: passwords.c:102
+msgid "Passwords do not match."
+msgstr ""
+
+#: passwords.c:109
+msgid "Password cannot contain spaces."
+msgstr ""
+
+#: timezone.c:77
+msgid "Choose the timezone you are in from the list below."
+msgstr ""
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Jacques Hylkema <j.hylkema@intronics.nl>, 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"
+"PO-Revision-Date: 2015-02-03 07:00+0000\n"
+"Last-Translator: Jacques Hylkema <j.hylkema@intronics.nl>\n"
"Language-Team: Dutch (http://www.transifex.com/projects/p/ipfire/language/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
#: dhcp.c:50
msgid "Start address:"
-msgstr ""
+msgstr "Start adres:"
#: dhcp.c:51
msgid "End address:"
-msgstr ""
+msgstr "Eind adres:"
#: dhcp.c:52 networking.c:717
msgid "Primary DNS:"
-msgstr ""
+msgstr "Primaire DNS:"
#: dhcp.c:53 networking.c:723
msgid "Secondary DNS:"
-msgstr ""
+msgstr "Secundaire DNS:"
#: dhcp.c:54
msgid "Default lease (mins):"
-msgstr ""
+msgstr "Standaard lease (minuten):"
#: dhcp.c:55
msgid "Max lease (mins):"
-msgstr ""
+msgstr "Maximum lease (minuten):"
#: dhcp.c:56
msgid "Domain name suffix:"
-msgstr ""
+msgstr "Domein naam achtervoegsel:"
#: 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 "Kon instellingen bestand niet openen"
#: dhcp.c:111
msgid "DHCP server configuration"
-msgstr ""
+msgstr "DHCP server configuratie"
#: dhcp.c:116
msgid "Configure the DHCP server by entering the settings information."
-msgstr ""
+msgstr "Configureer de DHCP server door de instellingen in te voeren."
#: dhcp.c:125
msgid "Enabled"
-msgstr ""
+msgstr "Ingeschakeld"
#: 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 "Oke"
#: 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 "Annuleren"
#: dhcp.c:156
msgid ""
"The following fields are invalid:\n"
"\n"
-msgstr ""
+msgstr "De volgende velden zijn ongeldig:\n\n"
#: dhcp.c:159
msgid "Start address"
-msgstr ""
+msgstr "Start adres"
#: dhcp.c:165
msgid "End address"
-msgstr ""
+msgstr "Eind adres"
#: dhcp.c:173 networking.c:755
msgid "Primary DNS"
-msgstr ""
+msgstr "Primaire DNS"
#: dhcp.c:182 networking.c:764
msgid "Secondary DNS"
-msgstr ""
+msgstr "Secundaire DNS"
#: dhcp.c:189
msgid "Default lease time"
-msgstr ""
+msgstr "Standaard lease tijd"
#: dhcp.c:195
msgid "Max. lease time"
-msgstr ""
+msgstr "Maximum lease tijd"
#: domainname.c:42 main.c:70
msgid "Domain name"
-msgstr ""
+msgstr "Domein naam"
#: domainname.c:42
msgid "Enter Domain name"
-msgstr ""
+msgstr "Voer domein naam in"
#: domainname.c:48
msgid "Domain name cannot be empty."
-msgstr ""
+msgstr "Domein naam kan niet leeg zijn."
#: domainname.c:50
msgid "Domain name cannot contain spaces."
-msgstr ""
+msgstr "Domein naam kan geen spaties bevatten."
#: domainname.c:53
msgid "Domain name may only contain letters, numbers, hyphens and periods."
-msgstr ""
+msgstr "Domein naam mag uitsluitend letters, nummers, koppeltekens en punten bevatten."
#: hostname.c:46 main.c:69
msgid "Hostname"
-msgstr ""
+msgstr "hostnaam"
#: hostname.c:46
msgid "Enter the machine's hostname."
-msgstr ""
+msgstr "Voer de hostnaam voor deze machine in."
#: hostname.c:53
msgid "Hostname cannot be empty."
-msgstr ""
+msgstr "Hostnaam kan niet leeg zijn."
#: hostname.c:55
msgid "Hostname cannot contain spaces."
-msgstr ""
+msgstr "Hostnaam kan geen spaties bevatten."
#: hostname.c:58
msgid "Hostname may only contain letters, numbers and hyphens."
-msgstr ""
+msgstr " Hostnaam mag uitsluitend letters, nummers en koppeltekens bevatten."
#: keymap.c:84 main.c:67
msgid "Keyboard mapping"
-msgstr ""
+msgstr "Toetsenbord indeling"
#: keymap.c:85
msgid "Choose the type of keyboard you are using from the list below."
-msgstr ""
+msgstr "Kies het toetsenbord type dat je gebruikt uit onderstaande lijst."
#: main.c:68 timezone.c:77
msgid "Timezone"
-msgstr ""
+msgstr "Tijdzone"
#: main.c:71 networking.c:110 networking.c:115 networking.c:447
msgid "Networking"
-msgstr ""
+msgstr "Netwerken"
#: main.c:72 misc.c:147
msgid "ISDN"
-msgstr ""
+msgstr "ISDN"
#: main.c:73
msgid "'root' password"
-msgstr ""
+msgstr "'root' wachtwoord"
#: main.c:74
msgid "'admin' password"
-msgstr ""
+msgstr "'admin' wachtwoord"
#: main.c:90
msgid " <Tab>/<Alt-Tab> between elements | <Space> selects"
-msgstr ""
+msgstr "<Tab>/<Alt-Tab> tussen onderdelen | <Space> selecteer"
#: main.c:97
msgid "Section menu"
-msgstr ""
+msgstr "Sectie menu"
#: main.c:98
msgid "Select the item you wish to configure."
-msgstr ""
+msgstr "Selecteer het onderdeel dat je wil configureren."
#: main.c:99
msgid "Quit"
-msgstr ""
+msgstr "Stoppen"
#: main.c:172
msgid "Setup is complete."
-msgstr ""
+msgstr "Installatie is gereed."
#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
msgid "Warning"
-msgstr ""
+msgstr "Waarschuwing"
#: 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 "Initiële configuratie was niet voltooid. Je moet ervoor zorgen dat de installatie wordt voltooid door 'setup' opnieuw uit te voeren vanaf de shell."
#: misc.c:62
#, c-format
msgid "Unable to write %s/main/hostname.conf"
-msgstr ""
+msgstr "Kon %s/main/hostname.conf niet wegschrijven"
#: misc.c:71
msgid "Unable to open main hosts file."
-msgstr ""
+msgstr "Kon het hosts bestand niet openen."
#: misc.c:76
msgid "Unable to write /etc/hosts."
-msgstr ""
+msgstr "Kon /etc/hosts niet wegschrijven."
#: misc.c:117
msgid "Unable to write /etc/hosts.deny."
-msgstr ""
+msgstr "Kon /etc/hosts.deny niet wegschrijven."
#: misc.c:125
msgid "Unable to write /etc/hosts.allow."
-msgstr ""
+msgstr "Kon /etc/hosts.allow niet wegschrijven."
#: misc.c:136
msgid "Unable to set hostname."
-msgstr ""
+msgstr "Kon de hostnaam niet instellen."
#: misc.c:147
msgid "Scanning and configuring ISDN devices."
-msgstr ""
+msgstr "Scannen en configureren van ISDN apparaten."
#: misc.c:148
msgid "Unable to scan for ISDN devices."
-msgstr ""
+msgstr "Kon ISDN apparaten niet scannen."
#: netstuff.c:86
#, c-format
msgid "Interface - %s"
-msgstr ""
+msgstr "Interface - %s"
#: netstuff.c:91
#, c-format
msgid "Enter the IP address information for the %s interface."
-msgstr ""
+msgstr "Voer de IP adres gegevens in voor de %s interface."
#: netstuff.c:103
msgid "Static"
-msgstr ""
+msgstr "Statisch"
#: 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 Hostnaam:"
#: netstuff.c:115
msgid "Force DHCP MTU:"
-msgstr ""
+msgstr "Forceer DHCP MTU:"
#: netstuff.c:134
msgid "IP address:"
-msgstr ""
+msgstr "IP adres:"
#: netstuff.c:146
msgid "Network mask:"
-msgstr ""
+msgstr "Netwerk masker:"
#: netstuff.c:173 networking.c:749
msgid "The following fields are invalid:"
-msgstr ""
+msgstr "De volgende velden zijn ongeldig:"
#: netstuff.c:183
msgid "IP address"
-msgstr ""
+msgstr "IP adres"
#: netstuff.c:189
msgid "Network mask"
-msgstr ""
+msgstr "Netwerk masker"
#: netstuff.c:198
msgid "DHCP hostname"
-msgstr ""
+msgstr "DHCP hostnaam"
#: netstuff.c:396 netstuff.c:709
msgid "Unset"
-msgstr ""
+msgstr "Niet ingesteld"
#: netstuff.c:669
#, c-format
msgid "Please choose a networkcard for the following interface - %s."
-msgstr ""
+msgstr "Kies een netwerkkaart voor de volgende interface - %s."
#: netstuff.c:672
msgid "Extended Network Menu"
-msgstr ""
+msgstr "Uitgebreid Netwerk Menu"
#: netstuff.c:673 networking.c:520
msgid "Select"
-msgstr ""
+msgstr "Selecteer"
#: netstuff.c:673
msgid "Identify"
-msgstr ""
+msgstr "Identificeer"
#: netstuff.c:678
msgid "Device Identification"
-msgstr ""
+msgstr "Apparaat identificatie"
#: netstuff.c:678
msgid "The lights on the selected port should flash now for 10 seconds..."
-msgstr ""
+msgstr "De lampjes op de geselecteerde netwerkkaart zouden nu 10 seconden moeten flikkeren..."
#: netstuff.c:679
msgid "Identification is not supported by this interface."
-msgstr ""
+msgstr "Identificatie wordt niet ondersteund door deze netwerkkaart."
#: netstuff.c:691
msgid "There are no unassigned interfaces on your system."
-msgstr ""
+msgstr "Er zijn geen niet-toegewezen netwerkkaarten in je systeem"
#: netstuff.c:732
#, c-format
msgid "Do you really want to remove the assigned %s interface?"
-msgstr ""
+msgstr "Wil je de toegewezen %s interface echt verwijderen?"
#: netstuff.c:755
msgid "Select network driver"
-msgstr ""
+msgstr "Selecteer netwerk stuurprogramma"
#: netstuff.c:755
msgid "Set additional module parameters"
-msgstr ""
+msgstr "Stel additionele module parameters in"
#: netstuff.c:762
msgid "Loading module..."
-msgstr ""
+msgstr "Bezig met laden van module..."
#: netstuff.c:777
msgid "Unable to load driver module."
-msgstr ""
+msgstr "Kan driver module niet laden."
#: netstuff.c:780
msgid "Module name cannot be blank."
-msgstr ""
+msgstr "Module naam mag niet leeg zijn."
#: networking.c:110
msgid "Stopping network..."
-msgstr ""
+msgstr "Bezig met stoppen van netwerk..."
#: networking.c:115
msgid "Restarting network..."
-msgstr ""
+msgstr "Bezig met herstarten van netwerk..."
#: networking.c:146
msgid "No GREEN interface assigned."
-msgstr ""
+msgstr "Geen GROENE interface toegewezen."
#: networking.c:152
msgid "Missing an IP address on GREEN."
-msgstr ""
+msgstr "Geen IP adres toegewezen aan GROEN."
#: networking.c:163
msgid "Error"
-msgstr ""
+msgstr "Fout"
#: networking.c:163
msgid "Ignore"
-msgstr ""
+msgstr "Negeer"
#: networking.c:164
msgid "No RED interface assigned."
-msgstr ""
+msgstr "Geen RODE interface toegewezen."
#: networking.c:173
msgid "Missing an IP address on RED."
-msgstr ""
+msgstr "Geen IP adres toegewezen aan ROOD."
#: networking.c:183
msgid "No ORANGE interface assigned."
-msgstr ""
+msgstr "Geen ORANJE interface toegewezen."
#: networking.c:189
msgid "Missing an IP address on ORANGE."
-msgstr ""
+msgstr "Geen IP adres toegewezen aan ORANJE"
#: networking.c:199
msgid "No BLUE interface assigned."
-msgstr ""
+msgstr "Geen BLAUWE interface toegewezen."
#: networking.c:205
msgid "Missing an IP address on BLUE."
-msgstr ""
+msgstr "Geen IP adres toegewezen aan BLAUW."
#: networking.c:217
msgid "Misssing DNS."
-msgstr ""
+msgstr "DNS gegevens ontbreken."
#: networking.c:224
msgid "Missing Default Gateway."
-msgstr ""
+msgstr "Standaard gateway ontbreekt."
#: networking.c:237 networking.c:304
msgid "Network configuration type"
-msgstr ""
+msgstr "Netwerk configuratie type"
#: networking.c:238 networking.c:409
msgid "Drivers and card assignments"
-msgstr ""
+msgstr "Drivers en kaart toewijzingen"
#: networking.c:239 networking.c:640
msgid "Address settings"
-msgstr ""
+msgstr "Adres instellingen"
#: networking.c:240 networking.c:743
msgid "DNS and Gateway settings"
-msgstr ""
+msgstr "DNS en Gateway instellingen"
#: networking.c:260
msgid "When configuration is complete, a network restart will be required."
-msgstr ""
+msgstr "Nadat de configuratie is voltooid, moet het netwerk worden herstart."
#: networking.c:267
#, c-format
"Current config: %s\n"
"\n"
"%s"
-msgstr ""
+msgstr "Huidige configuratie: %s\n\n%s"
#: networking.c:268
msgid "Network configuration menu"
-msgstr ""
+msgstr "Netwerk configuratie menu"
#: networking.c:269 networking.c:520 networking.c:642
msgid "Done"
-msgstr ""
+msgstr "Gereed"
#: 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 "Selecteer de netwerk configuratie voor %s. De volgende configuratie types laten alleen de netwerkkaarten zien die op ethernet zijn aangesloten. Als je dit wijzigt, moet het netwerk worden herstart en moet je de netwerk driver toewijzingen opnieuw configureren."
#: networking.c:307
#, c-format
"Not enough netcards for your choice.\n"
"\n"
"Needed: %d - Available: %d\n"
-msgstr ""
+msgstr "Er zijn onvoldoende netwerkkaarten aanwezig voor je keuze.\n\nBenodigd: %d - Beschikbaar: %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 "Configureer netwerk drivers, en welke netwerkkaart aan welke interface is toegewezen. De huidige configuratie is het volgende:\n\n"
#: networking.c:408
msgid "Do you wish to change these settings?"
-msgstr ""
+msgstr "Wil je deze instellingen wijzigen?"
#: networking.c:447
msgid "Restarting non-local network..."
-msgstr ""
+msgstr "Bezig met herstarten van het niet-lokale netwerk..."
#: networking.c:464
msgid ""
"Please choose the interface you wish to change.\n"
"\n"
-msgstr ""
+msgstr "Kies de interface die je wil wijzigen.\n\n"
#: networking.c:519
msgid "Assigned Cards"
-msgstr ""
+msgstr "Toegewezen kaarten"
#: networking.c:520
msgid "Remove"
-msgstr ""
+msgstr "Verwijder"
#: 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 "Als je dit IP adres wijzigt en je bent op afstand ingelogd, dan zal je connectie naar de %s machine worden onderbroken en moet je opnieuw inloggen op het nieuwe IP adres. Dit is een risicovolle operatie die alleen zou moeten worden uitgevoerd als je fysieke toegang tot de machine hebt, mocht er iets misgaan."
#: networking.c:641
msgid "Select the interface you wish to reconfigure."
-msgstr ""
+msgstr "Selecteer de interface die je wil herconfigureren."
#: networking.c:729
msgid "Default gateway:"
-msgstr ""
+msgstr "Standaard 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 "Voer de DNS en gatway informatie in. Deze instellingen worden alleen gebruikt indien een statisch IP adres (en DHCP indien DNS is ingesteld) voor de RODE interface is ingesteld."
#: networking.c:773
msgid "Default gateway"
-msgstr ""
+msgstr "Standaard gateway"
#: networking.c:780
msgid "Secondary DNS specified without a Primary DNS"
-msgstr ""
+msgstr "Er is een secundaire DNS ingesteld zonder dat een primaire DNS is ingesteld"
#: passwords.c:33
msgid ""
"Enter the 'root' user password. Login as this user for commandline access."
-msgstr ""
+msgstr "Voer het 'root' wachtwoord in. Log als deze gebruiker in voor commando regel toegang."
#: passwords.c:38 passwords.c:61
msgid "Setting password"
-msgstr ""
+msgstr "Instellen wachtwoord"
#: passwords.c:38
msgid "Setting 'root' password...."
-msgstr ""
+msgstr "Instellen 'root' wachtwoord..."
#: passwords.c:39
msgid "Problem setting 'root' password."
-msgstr ""
+msgstr "Probleem bij instellen van 'root' wachtwoord."
#: 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 "Voer het %s 'admin' gebruiker wachtwoord in. Dit is de gebruiker om mee in te loggen op de %s web administratie interface."
#: passwords.c:60
#, c-format
msgid "Setting %s 'admin' user password..."
-msgstr ""
+msgstr "Instellen %s 'admin' wachtwoord..."
#: passwords.c:62
#, c-format
msgid "Problem setting %s 'admin' user password."
-msgstr ""
+msgstr "Probleem bij instellen van %s 'admin' wachtwoord."
#: passwords.c:76
msgid "Password:"
-msgstr ""
+msgstr "Wachtwoord:"
#: passwords.c:77
msgid "Again:"
-msgstr ""
+msgstr "Nogmaals:"
#: passwords.c:95
msgid "Password cannot be blank."
-msgstr ""
+msgstr "Wachtwoord mag niet leeg zijn."
#: passwords.c:102
msgid "Passwords do not match."
-msgstr ""
+msgstr "Wachtwoorden komen niet overeen,"
#: passwords.c:109
msgid "Password cannot contain spaces."
-msgstr ""
+msgstr "Wachtwoord mag geen spaties bevatten."
#: timezone.c:77
msgid "Choose the timezone you are in from the list below."
-msgstr ""
+msgstr "Kies de tijdzone waar je bent uit onderstaande lijst."
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# douglasdiasn <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
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"
+"PO-Revision-Date: 2015-03-24 21:31+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"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\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):"
-msgstr ""
+msgstr "Concessão padrão (min):"
#: dhcp.c:55
msgid "Max lease (mins):"
-msgstr ""
+msgstr "Concessão máxima (min)"
#: dhcp.c:56
msgid "Domain name suffix:"
-msgstr ""
+msgstr "Sufixo do nome de Domínio:"
#: 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 "Não foi possível abrir o arquivo de configurações"
#: dhcp.c:111
msgid "DHCP server configuration"
-msgstr ""
+msgstr "Configuração do servidor DHCP"
#: dhcp.c:116
msgid "Configure the DHCP server by entering the settings information."
-msgstr ""
+msgstr "Configurar servidor DHCP digitando as informações de configuração"
#: dhcp.c:125
msgid "Enabled"
-msgstr ""
+msgstr "Habilitado"
#: 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 "Cancelar"
#: dhcp.c:156
msgid ""
"The following fields are invalid:\n"
"\n"
-msgstr ""
+msgstr "Os campos a seguir são inválidos: \n\n"
#: dhcp.c:159
msgid "Start address"
-msgstr ""
+msgstr "Endereço inicial"
#: dhcp.c:165
msgid "End address"
-msgstr ""
+msgstr "Endereço final"
#: dhcp.c:173 networking.c:755
msgid "Primary DNS"
-msgstr ""
+msgstr "DNS Primário"
#: dhcp.c:182 networking.c:764
msgid "Secondary DNS"
-msgstr ""
+msgstr "DNS Secundário"
#: dhcp.c:189
msgid "Default lease time"
-msgstr ""
+msgstr "Tempo de concessão padrão"
#: dhcp.c:195
msgid "Max. lease time"
-msgstr ""
+msgstr "Tempo de concessão máximo"
#: domainname.c:42 main.c:70
msgid "Domain name"
-msgstr ""
+msgstr "Nome de Domínio "
#: domainname.c:42
msgid "Enter Domain name"
-msgstr ""
+msgstr "Digite o nome do Domínio"
#: domainname.c:48
msgid "Domain name cannot be empty."
-msgstr ""
+msgstr "O nome de Domínio não pode ser vazio."
#: domainname.c:50
msgid "Domain name cannot contain spaces."
-msgstr ""
+msgstr "O nome de Domínio não pode conter \"espaços\"."
#: domainname.c:53
msgid "Domain name may only contain letters, numbers, hyphens and periods."
-msgstr ""
+msgstr "O nome de Domínio pode conter somente letras, números, hífens e pontos."
#: hostname.c:46 main.c:69
msgid "Hostname"
-msgstr ""
+msgstr "Nome do Host"
#: hostname.c:46
msgid "Enter the machine's hostname."
-msgstr ""
+msgstr "Entre com o nome de Host da máquina."
#: hostname.c:53
msgid "Hostname cannot be empty."
-msgstr ""
+msgstr "O nome de Host não pode ser vazio."
#: hostname.c:55
msgid "Hostname cannot contain spaces."
-msgstr ""
+msgstr "O nome de Host não pode conter \"espaços\"."
#: hostname.c:58
msgid "Hostname may only contain letters, numbers and hyphens."
-msgstr ""
+msgstr "O nome de Host pode conter somente Letras, números e hífens."
#: keymap.c:84 main.c:67
msgid "Keyboard mapping"
-msgstr ""
+msgstr "Selecione seu teclado"
#: keymap.c:85
msgid "Choose the type of keyboard you are using from the list below."
-msgstr ""
+msgstr "Escolha o tipo do teclado que você esta usando a partir da lista abaixo:"
#: main.c:68 timezone.c:77
msgid "Timezone"
-msgstr ""
+msgstr "Fuso horário "
#: main.c:71 networking.c:110 networking.c:115 networking.c:447
msgid "Networking"
-msgstr ""
+msgstr "Rede"
#: main.c:72 misc.c:147
msgid "ISDN"
-msgstr ""
+msgstr "ISDN"
#: main.c:73
msgid "'root' password"
-msgstr ""
+msgstr "senha 'ROOT'"
#: main.c:74
msgid "'admin' password"
-msgstr ""
+msgstr "senha 'ADMIN'"
#: main.c:90
msgid " <Tab>/<Alt-Tab> between elements | <Space> selects"
-msgstr ""
+msgstr "<Tab>/<Alt-Tab> entre elementos | <Space> seleciona"
#: main.c:97
msgid "Section menu"
-msgstr ""
+msgstr "Menu de seleção"
#: main.c:98
msgid "Select the item you wish to configure."
-msgstr ""
+msgstr "Selecione um item para configurar."
#: main.c:99
msgid "Quit"
-msgstr ""
+msgstr "Sair"
#: main.c:172
msgid "Setup is complete."
-msgstr ""
+msgstr "Configuração completa."
#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
msgid "Warning"
-msgstr ""
+msgstr "Atenção"
#: 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 "O setup inicial não foi inteiramente completo. Você deve se certificar que o Setup foi finalizado corretamente rodando o setup novamente no shell."
#: misc.c:62
#, c-format
msgid "Unable to write %s/main/hostname.conf"
-msgstr ""
+msgstr "Não foi possível salvar %s/main/hostname.conf"
#: misc.c:71
msgid "Unable to open main hosts file."
-msgstr ""
+msgstr "Não foi possível abrir o arquivo de Hosts Principal"
#: misc.c:76
msgid "Unable to write /etc/hosts."
-msgstr ""
+msgstr "Não foi possível salvar /etc/hosts."
#: misc.c:117
msgid "Unable to write /etc/hosts.deny."
-msgstr ""
+msgstr "Não foi possível salvar /etc/hosts.deny."
#: misc.c:125
msgid "Unable to write /etc/hosts.allow."
-msgstr ""
+msgstr "Não foi possível salvar /etc/hosts.allow."
#: misc.c:136
msgid "Unable to set hostname."
-msgstr ""
+msgstr "Não foi possível aplicar o Hostname"
#: misc.c:147
msgid "Scanning and configuring ISDN devices."
-msgstr ""
+msgstr "Escaneando e configurando dispositivos ISDN."
#: misc.c:148
msgid "Unable to scan for ISDN devices."
-msgstr ""
+msgstr "Não foi possível escanear por dispositivos ISDN."
#: netstuff.c:86
#, c-format
msgid "Interface - %s"
-msgstr ""
+msgstr "Interface - %s"
#: netstuff.c:91
#, c-format
msgid "Enter the IP address information for the %s interface."
-msgstr ""
+msgstr "Entre com a informação do endereço IP para a interface %s."
#: netstuff.c:103
msgid "Static"
-msgstr ""
+msgstr "Estático "
#: netstuff.c:104
msgid "DHCP"
-msgstr ""
+msgstr "DHCP"
#: netstuff.c:105
msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
-msgstr ""
+msgstr "Discador PPP (PPPoE, modem, ATM ...)"
#: netstuff.c:113
msgid "DHCP Hostname:"
-msgstr ""
+msgstr "Nome do Host DHCP:"
#: netstuff.c:115
msgid "Force DHCP MTU:"
-msgstr ""
+msgstr "Forçar DHCP MTU:"
#: netstuff.c:134
msgid "IP address:"
-msgstr ""
+msgstr "Endereço IP:"
#: netstuff.c:146
msgid "Network mask:"
-msgstr ""
+msgstr "Mascara de rede:"
#: netstuff.c:173 networking.c:749
msgid "The following fields are invalid:"
-msgstr ""
+msgstr "Os campos a seguir são inválidos:"
#: netstuff.c:183
msgid "IP address"
-msgstr ""
+msgstr "Endereço IP"
#: netstuff.c:189
msgid "Network mask"
-msgstr ""
+msgstr "Marcara de rede"
#: netstuff.c:198
msgid "DHCP hostname"
-msgstr ""
+msgstr "Nome do Host DHCP:"
#: netstuff.c:396 netstuff.c:709
msgid "Unset"
-msgstr ""
+msgstr "Desativado"
#: netstuff.c:669
#, c-format
msgid "Please choose a networkcard for the following interface - %s."
-msgstr ""
+msgstr "Favor selecionar a Placa de Rede para a interface - %s."
#: netstuff.c:672
msgid "Extended Network Menu"
-msgstr ""
+msgstr "Abrir o menu de redes"
#: netstuff.c:673 networking.c:520
msgid "Select"
-msgstr ""
+msgstr "Selecione"
#: netstuff.c:673
msgid "Identify"
-msgstr ""
+msgstr "Identifique"
#: netstuff.c:678
msgid "Device Identification"
-msgstr ""
+msgstr "Identificação do dispositivo"
#: netstuff.c:678
msgid "The lights on the selected port should flash now for 10 seconds..."
-msgstr ""
+msgstr "As luzes da porta selecionada deverão piscar por 10 segundos a partir de agora..."
#: netstuff.c:679
msgid "Identification is not supported by this interface."
-msgstr ""
+msgstr "Identificação não é suportada por esta interface."
#: netstuff.c:691
msgid "There are no unassigned interfaces on your system."
-msgstr ""
+msgstr "Não existem interfaces não associadas em seu sistema."
#: netstuff.c:732
#, c-format
msgid "Do you really want to remove the assigned %s interface?"
-msgstr ""
+msgstr "Você realmente quer remover a interface %s associada?"
#: netstuff.c:755
msgid "Select network driver"
-msgstr ""
+msgstr "Selecionar o driver de rede"
#: netstuff.c:755
msgid "Set additional module parameters"
-msgstr ""
+msgstr "Especifique os parâmetros adicionais"
#: netstuff.c:762
msgid "Loading module..."
-msgstr ""
+msgstr "Carregando modulo..."
#: netstuff.c:777
msgid "Unable to load driver module."
-msgstr ""
+msgstr "Não foi possível carregar o driver."
#: netstuff.c:780
msgid "Module name cannot be blank."
-msgstr ""
+msgstr "O nome do módulo não pode ficar vazio."
#: networking.c:110
msgid "Stopping network..."
-msgstr ""
+msgstr "Parando a rede..."
#: networking.c:115
msgid "Restarting network..."
-msgstr ""
+msgstr "Reiniciando a rede..."
#: networking.c:146
msgid "No GREEN interface assigned."
-msgstr ""
+msgstr "Nenhuma interface VERDE definida."
#: networking.c:152
msgid "Missing an IP address on GREEN."
-msgstr ""
+msgstr "Faltando endereço IP na interface VERDE."
#: networking.c:163
msgid "Error"
-msgstr ""
+msgstr "Erro"
#: networking.c:163
msgid "Ignore"
-msgstr ""
+msgstr "Ignorar"
#: networking.c:164
msgid "No RED interface assigned."
-msgstr ""
+msgstr "Nenhuma interface VERMELHA definida."
#: networking.c:173
msgid "Missing an IP address on RED."
-msgstr ""
+msgstr "Faltando endereço IP na interface VERMELHA."
#: networking.c:183
msgid "No ORANGE interface assigned."
-msgstr ""
+msgstr "Nenhuma interface LARANJA definida."
#: networking.c:189
msgid "Missing an IP address on ORANGE."
-msgstr ""
+msgstr "Faltando endereço IP na interface LARANJA."
#: networking.c:199
msgid "No BLUE interface assigned."
-msgstr ""
+msgstr "Nenhuma interface AZUL definida."
#: networking.c:205
msgid "Missing an IP address on BLUE."
-msgstr ""
+msgstr "Faltando endereço IP na interface AZUL."
#: networking.c:217
msgid "Misssing DNS."
-msgstr ""
+msgstr "Faltando DNS."
#: networking.c:224
msgid "Missing Default Gateway."
-msgstr ""
+msgstr "Faltando Gateway Padrão."
#: networking.c:237 networking.c:304
msgid "Network configuration type"
-msgstr ""
+msgstr "Tipo de configuração de rede"
#: networking.c:238 networking.c:409
msgid "Drivers and card assignments"
-msgstr ""
+msgstr "Definir Drivers e Placas"
#: networking.c:239 networking.c:640
msgid "Address settings"
-msgstr ""
+msgstr "Configurar endereços"
#: networking.c:240 networking.c:743
msgid "DNS and Gateway settings"
-msgstr ""
+msgstr "Configurar Gateway e DNS"
#: networking.c:260
msgid "When configuration is complete, a network restart will be required."
-msgstr ""
+msgstr "Quando a configuração estiver completa, um reinício da rede será necessário."
#: networking.c:267
#, c-format
"Current config: %s\n"
"\n"
"%s"
-msgstr ""
+msgstr "Configuração atual: %s\n\n%s"
#: networking.c:268
msgid "Network configuration menu"
-msgstr ""
+msgstr "Menu de configuração de rede"
#: networking.c:269 networking.c:520 networking.c:642
msgid "Done"
-msgstr ""
+msgstr "Pronto"
#: 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 "Selecione a configuração de rede para %s. Os tipos de configuração seguintes lista as interfaces cabo Ethernet. Se você alterar estas configurações, uma reinicialização de rede será exigida, e você terá que reconfigurar os drivers de rede especificados."
#: networking.c:307
#, c-format
"Not enough netcards for your choice.\n"
"\n"
"Needed: %d - Available: %d\n"
-msgstr ""
+msgstr "Não há dispositivos de rede suficientes para sua escolha.\n\nNecessárias: %d - Disponíveis: %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 "Configure os drivers de rede, e a placa de rede que a interface está relacionada. A configuração atual é a seguinte:\n\n"
#: networking.c:408
msgid "Do you wish to change these settings?"
-msgstr ""
+msgstr "Você gostaria de alterar essas configurações?"
#: networking.c:447
msgid "Restarting non-local network..."
-msgstr ""
+msgstr "Reiniciando rede non-local..."
#: networking.c:464
msgid ""
"Please choose the interface you wish to change.\n"
"\n"
-msgstr ""
+msgstr "Por favor, escolha a interface de rede que quer alterar.\n\n"
#: networking.c:519
msgid "Assigned Cards"
-msgstr ""
+msgstr "Placas Definidas"
#: networking.c:520
msgid "Remove"
-msgstr ""
+msgstr "Remover"
#: 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 "Se você alterar o endereço IP, e você estiver logado remotamente, sua conexão com a máquina %s cairá, e você terá que reconectar através do novo IP. Esta é uma operação arriscada, e somente deve ser feita se você tem acesso físico à máquina, caso algo errado aconteça."
#: networking.c:641
msgid "Select the interface you wish to reconfigure."
-msgstr ""
+msgstr "Selecione a interface que deseja reconfigurar."
#: networking.c:729
msgid "Default gateway:"
-msgstr ""
+msgstr "Gateway padrão:"
#: 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 "Digite as informações de DNS e roteador. Estas configurações são usada somente com IP estático (e DHCP se o DNS está habilitado) para a inerface VERMELHA."
#: networking.c:773
msgid "Default gateway"
-msgstr ""
+msgstr "Gateway padrão"
#: networking.c:780
msgid "Secondary DNS specified without a Primary DNS"
-msgstr ""
+msgstr "DNS secundário especificado sem um DNS primário"
#: passwords.c:33
msgid ""
"Enter the 'root' user password. Login as this user for commandline access."
-msgstr ""
+msgstr "Digite a senha do usuário 'root'. Autentique com este usuário para acesso à linha de comando."
#: passwords.c:38 passwords.c:61
msgid "Setting password"
-msgstr ""
+msgstr "Configurar senha"
#: passwords.c:38
msgid "Setting 'root' password...."
-msgstr ""
+msgstr "Configurar senha 'root'"
#: passwords.c:39
msgid "Problem setting 'root' password."
-msgstr ""
+msgstr "Problema ao configurar senha '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 "Digite a senha do usuário 'admin' do %s. Este é o usuário para autenticação na interface web de administração do %s."
#: passwords.c:60
#, c-format
msgid "Setting %s 'admin' user password..."
-msgstr ""
+msgstr "Especificando a senha do usuário 'admin' do %s..."
#: passwords.c:62
#, c-format
msgid "Problem setting %s 'admin' user password."
-msgstr ""
+msgstr "Tem um problema ao gravar senha do usuário 'admin' do %s."
#: passwords.c:76
msgid "Password:"
-msgstr ""
+msgstr "Senha:"
#: passwords.c:77
msgid "Again:"
-msgstr ""
+msgstr "Novamente:"
#: passwords.c:95
msgid "Password cannot be blank."
-msgstr ""
+msgstr "A senha não pode estar em branco."
#: passwords.c:102
msgid "Passwords do not match."
-msgstr ""
+msgstr "As senhas não coincidem."
#: passwords.c:109
msgid "Password cannot contain spaces."
-msgstr ""
+msgstr "A senha não pode conter espaços."
#: timezone.c:77
msgid "Choose the timezone you are in from the list below."
-msgstr ""
+msgstr "Selecione seu fuso horário na lista abaixo."
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Andrei Burdea <ragulka@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: 2014-08-21 15:13+0000\n"
-"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\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"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
#: dhcp.c:50
msgid "Start address:"
-msgstr ""
+msgstr "Adresa de Inceput"
#: dhcp.c:51
msgid "End address:"
-msgstr ""
+msgstr "Adresa de Final"
#: dhcp.c:52 networking.c:717
msgid "Primary DNS:"
-msgstr ""
+msgstr "Primul Server de Nume - NS1"
#: dhcp.c:53 networking.c:723
msgid "Secondary DNS:"
-msgstr ""
+msgstr "Al Doilea Server de Nume - NS2"
#: dhcp.c:54
msgid "Default lease (mins):"
-msgstr ""
+msgstr "Alocarea de baza (minute)"
#: dhcp.c:55
msgid "Max lease (mins):"
-msgstr ""
+msgstr "Alocare Maxima (minute)"
#: dhcp.c:56
msgid "Domain name suffix:"
-msgstr ""
+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 ""
+msgstr "Fisier de setari imposibil de deschis"
#: dhcp.c:111
msgid "DHCP server configuration"
-msgstr ""
+msgstr "Conficurearea serverului DHCP"
#: dhcp.c:116
msgid "Configure the DHCP server by entering the settings information."
-msgstr ""
+msgstr "Configureaza serverul DHCP introducand informatiile de setare"
#: dhcp.c:125
msgid "Enabled"
-msgstr ""
+msgstr "Activat"
#: 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 "Renunta"
#: dhcp.c:156
msgid ""
"The following fields are invalid:\n"
"\n"
-msgstr ""
+msgstr "Urmatoarele campuri sunt incorecte\n\n"
#: dhcp.c:159
msgid "Start address"
-msgstr ""
+msgstr "Adresa de Inceput"
#: dhcp.c:165
msgid "End address"
-msgstr ""
+msgstr "Adresa de Final"
#: dhcp.c:173 networking.c:755
msgid "Primary DNS"
-msgstr ""
+msgstr "Primul Server de Nume - NS1"
#: dhcp.c:182 networking.c:764
msgid "Secondary DNS"
-msgstr ""
+msgstr "Al Doilea Server de Nume - NS2"
#: dhcp.c:189
msgid "Default lease time"
-msgstr ""
+msgstr "Timpul pentru alocarea de baza"
#: dhcp.c:195
msgid "Max. lease time"
-msgstr ""
+msgstr "Timpul maxim pentru alocare"
#: domainname.c:42 main.c:70
msgid "Domain name"
-msgstr ""
+msgstr "Nume Domeniu"
#: domainname.c:42
msgid "Enter Domain name"
-msgstr ""
+msgstr "Introduceti Nume Domeniu"
#: domainname.c:48
msgid "Domain name cannot be empty."
-msgstr ""
+msgstr "Nume Domeniu nu poate fi gol"
#: domainname.c:50
msgid "Domain name cannot contain spaces."
-msgstr ""
+msgstr "Nume Domeniu nu poate contine spatii"
#: domainname.c:53
msgid "Domain name may only contain letters, numbers, hyphens and periods."
-msgstr ""
+msgstr "Nume Domeniu poate contine doar litere, numere, cratime sau paranteze"
#: hostname.c:46 main.c:69
msgid "Hostname"
-msgstr ""
+msgstr "Nume Gazda - HOST"
#: hostname.c:46
msgid "Enter the machine's hostname."
-msgstr ""
+msgstr "Introduceti Nume Gazda - HOST"
#: hostname.c:53
msgid "Hostname cannot be empty."
-msgstr ""
+msgstr "Nume Gazda - HOST - nu poate fi gol"
#: hostname.c:55
msgid "Hostname cannot contain spaces."
-msgstr ""
+msgstr "Nume Gazda - HOST - nu poate contine spatii"
#: hostname.c:58
msgid "Hostname may only contain letters, numbers and hyphens."
-msgstr ""
+msgstr "Nume Gazda - HOST - poate contine doar litere, numere si cratime"
#: keymap.c:84 main.c:67
msgid "Keyboard mapping"
-msgstr ""
+msgstr "Cartografiere Tastatura - tipul de tastatura"
#: keymap.c:85
msgid "Choose the type of keyboard you are using from the list below."
-msgstr ""
+msgstr "Alegeti tipul de tastatura pe care o folositi din lista urmatoare"
#: main.c:68 timezone.c:77
msgid "Timezone"
-msgstr ""
+msgstr "Fus Orar"
#: main.c:71 networking.c:110 networking.c:115 networking.c:447
msgid "Networking"
-msgstr ""
+msgstr "Retea"
#: main.c:72 misc.c:147
msgid "ISDN"
-msgstr ""
+msgstr "ISDN"
#: main.c:73
msgid "'root' password"
-msgstr ""
+msgstr "Parola pentru utilizator 'root'"
#: main.c:74
msgid "'admin' password"
-msgstr ""
+msgstr "Parola pentru utilizator 'admin'"
#: main.c:90
msgid " <Tab>/<Alt-Tab> between elements | <Space> selects"
-msgstr ""
+msgstr "<Tab>/<Alt-Tab> pentru comutare intre elemente | <Space> selecteaza"
#: main.c:97
msgid "Section menu"
-msgstr ""
+msgstr "Meniu Sectiuni"
#: main.c:98
msgid "Select the item you wish to configure."
-msgstr ""
+msgstr "Selectati articolul pe care doriti sa-l configurati"
#: main.c:99
msgid "Quit"
-msgstr ""
+msgstr "Iesire"
#: main.c:172
msgid "Setup is complete."
-msgstr ""
+msgstr "Setup-ul s-a incheiat"
#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
msgid "Warning"
-msgstr ""
+msgstr "Atentie"
#: 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 "Setup-ul initial nu s-a finalizat. Trebuie sa va asigurati ca Setup-ul s-a incheiat corect ruland din nou operatiunea din shell."
#: misc.c:62
#, c-format
msgid "Unable to write %s/main/hostname.conf"
-msgstr ""
+msgstr "%s/main/hostname.conf nu a putut fi scris"
#: misc.c:71
msgid "Unable to open main hosts file."
-msgstr ""
+msgstr "fisierul principal de hosts nu a putut fi deschis"
#: misc.c:76
msgid "Unable to write /etc/hosts."
#
# Translators:
# Andrei Skipin <skian2007@yandex.ru>, 2014
+# ellviss <kpe1501@gmail.com>, 2015
# bubnov_pi <ipfire@bubnov.su>, 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-12-10 10:22+0000\n"
-"Last-Translator: Andrei Skipin <skian2007@yandex.ru>\n"
+"PO-Revision-Date: 2015-02-17 19:30+0000\n"
+"Last-Translator: ellviss <kpe1501@gmail.com>\n"
"Language-Team: Russian (http://www.transifex.com/projects/p/ipfire/language/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
#: netstuff.c:104
msgid "DHCP"
-msgstr ""
+msgstr "DHCP-сервер"
#: netstuff.c:105
msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
#: networking.c:163
msgid "Error"
-msgstr ""
+msgstr "Ошибка"
#: networking.c:163
msgid "Ignore"
-msgstr ""
+msgstr "Игнорировать"
#: networking.c:164
msgid "No RED interface assigned."
#: 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."
#: networking.c:408
msgid "Do you wish to change these settings?"
-msgstr ""
+msgstr "Вы уверены что хотите изменить эти настройки?"
#: networking.c:447
msgid "Restarting non-local network..."
#: networking.c:641
msgid "Select the interface you wish to reconfigure."
-msgstr ""
+msgstr "Выберете интерфейс для реконфигурации"
#: networking.c:729
msgid "Default gateway:"
#: timezone.c:77
msgid "Choose the timezone you are in from the list below."
-msgstr ""
+msgstr "Выберете временную зону в которой вы находитесь из списка ниже"
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Ardit Dani <ardit.dani@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: 2014-08-21 15:13+0000\n"
-"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"PO-Revision-Date: 2015-02-02 22:35+0000\n"
+"Last-Translator: Ardit Dani <ardit.dani@gmail.com>\n"
"Language-Team: Albanian (http://www.transifex.com/projects/p/ipfire/language/sq/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
#: networking.c:410 networking.c:560 networking.c:653 networking.c:746
#: passwords.c:89 timezone.c:78
msgid "Cancel"
-msgstr ""
+msgstr "Anulo"
#: dhcp.c:156
msgid ""
#: netstuff.c:103
msgid "Static"
-msgstr ""
+msgstr "Statik"
#: netstuff.c:104
msgid "DHCP"
#: netstuff.c:673 networking.c:520
msgid "Select"
-msgstr ""
+msgstr "Përzgjedhje"
#: netstuff.c:673
msgid "Identify"
-msgstr ""
+msgstr "Identifikuesi"
#: netstuff.c:678
msgid "Device Identification"
"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: Japanese (Japan) (http://www.transifex.com/projects/p/ipfire/language/ja_JP/)\n"
+"Language-Team: Sundanese (http://www.transifex.com/projects/p/ipfire/language/su/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: ja_JP\n"
+"Language: su\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: dhcp.c:50
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Ersan YILDIRIM <ersan73@gmail.com>, 2015
# Kudret Emre <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: 2014-09-30 20:41+0000\n"
-"Last-Translator: Kudret Emre <kudretemre@hotmail.com.tr>\n"
+"PO-Revision-Date: 2015-03-20 15:05+0000\n"
+"Last-Translator: Ersan YILDIRIM <ersan73@gmail.com>\n"
"Language-Team: Turkish (http://www.transifex.com/projects/p/ipfire/language/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
#: dhcp.c:111
msgid "DHCP server configuration"
-msgstr "DHCP sunucu yapılandırması"
+msgstr "DHCP Sunucu Yapılandırması"
#: dhcp.c:116
msgid "Configure the DHCP server by entering the settings information."
-msgstr "Ayarlar bilgisini girerek DHCP sunucusunu yapılandırın."
+msgstr "DHCP ayar bilgilerini girerek DHCP sunucusunu yapılandırın."
#: dhcp.c:125
msgid "Enabled"
#: keymap.c:85
msgid "Choose the type of keyboard you are using from the list below."
-msgstr "Aşağıdaki listeden kullandığınız klavye tipini seçin."
+msgstr "Aşağıdaki listeden kullandığınız klavye türünü seçin."
#: main.c:68 timezone.c:77
msgid "Timezone"
#: main.c:73
msgid "'root' password"
-msgstr "'root' şifresi"
+msgstr "'root' parolası"
#: main.c:74
msgid "'admin' password"
-msgstr "'admin' şifresi"
+msgstr "'admin' parolası"
#: main.c:90
msgid " <Tab>/<Alt-Tab> between elements | <Space> selects"
#: main.c:97
msgid "Section menu"
-msgstr "Bölüm menüsü"
+msgstr "Bölüm listesi"
#: 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 "İlk kurulum tamamen yapılamadı. Kurulumun kabuktan yeniden başlatılıp düzgünce bitirildiğinden emin olmalısınız."
+msgstr "İlk kurulum tamamen yapılamadı. Kurulumun terminalden yeniden başlatılıp düzgünce bitirildiğinden emin olmalısınız."
#: misc.c:62
#, c-format
#: netstuff.c:86
#, c-format
msgid "Interface - %s"
-msgstr "Arayüz - %s"
+msgstr "Ara Birim - %s"
#: netstuff.c:91
#, c-format
msgid "Enter the IP address information for the %s interface."
-msgstr "%s arayüzü için IP adresi bilgisini girin."
+msgstr "%s ara birimi için IP adres bilgisini girin."
#: netstuff.c:103
msgid "Static"
#: netstuff.c:115
msgid "Force DHCP MTU:"
-msgstr "Force DHCP MTU:"
+msgstr "DHCP MTU zorla:"
#: netstuff.c:134
msgid "IP address:"
#: netstuff.c:396 netstuff.c:709
msgid "Unset"
-msgstr "Unset"
+msgstr "Kurulmamış"
#: netstuff.c:669
#, c-format
msgid "Please choose a networkcard for the following interface - %s."
-msgstr "Lütfen %s arayüzü için bit ağ kartı seçin."
+msgstr "Lütfen %s ara birimi için bir ağ kartı seçin."
#: netstuff.c:672
msgid "Extended Network Menu"
-msgstr "Genişletilmiş Ağ Menüsü"
+msgstr "Genişletilmiş Ağ Listesi"
#: netstuff.c:673 networking.c:520
msgid "Select"
#: netstuff.c:679
msgid "Identification is not supported by this interface."
-msgstr "Bu arayüz kimdik doğrulamayı desteklemiyor."
+msgstr "Bu ara birim kimdik doğrulamayı desteklemiyor."
#: netstuff.c:691
msgid "There are no unassigned interfaces on your system."
-msgstr "Sisteminizde atanmamış arayüz yok."
+msgstr "Sisteminizde atanmamış ara birim yok."
#: netstuff.c:732
#, c-format
msgid "Do you really want to remove the assigned %s interface?"
-msgstr "Atanmış %s arayüzü gerçekten kaldırmak istiyor musunuz?"
+msgstr "Atanmış %s ara birimini gerçekten kaldırmak istiyor musunuz?"
#: netstuff.c:755
msgid "Select network driver"
#: networking.c:146
msgid "No GREEN interface assigned."
-msgstr "Atanmış YEŞİL arayüz yok."
+msgstr "Atanmış YEŞİL ara birim yok."
#: networking.c:152
msgid "Missing an IP address on GREEN."
#: networking.c:164
msgid "No RED interface assigned."
-msgstr "Atanmış KIRMIZI arayüz yok."
+msgstr "Atanmış KIRMIZI ara birim yok."
#: networking.c:173
msgid "Missing an IP address on RED."
#: networking.c:183
msgid "No ORANGE interface assigned."
-msgstr "Atanmış TURUNCU arayüz yok."
+msgstr "Atanmış TURUNCU ara birim yok."
#: networking.c:189
msgid "Missing an IP address on ORANGE."
#: networking.c:199
msgid "No BLUE interface assigned."
-msgstr "Atanmış MAVİ arayüz yok."
+msgstr "Atanmış MAVİ ara birim yok."
#: networking.c:205
msgid "Missing an IP address on BLUE."
#: networking.c:237 networking.c:304
msgid "Network configuration type"
-msgstr "Ağ yapılandırma tipi"
+msgstr "Ağ yapılandırma türü"
#: networking.c:238 networking.c:409
msgid "Drivers and card assignments"
#: networking.c:239 networking.c:640
msgid "Address settings"
-msgstr "Adres ayarları"
+msgstr "Adres Ayarları"
#: networking.c:240 networking.c:743
msgid "DNS and Gateway settings"
-msgstr "DNS ve Ağ Geçidi ayarları"
+msgstr "DNS ve Ağ Geçidi Ayarları"
#: networking.c:260
msgid "When configuration is complete, a network restart will be required."
-msgstr "Yapılandırma tamamlandığında yeniden başlatma gerekecek."
+msgstr "Yapılandırma tamamlandığında ağı yeniden başlatmanız gerekir."
#: networking.c:267
#, c-format
#: networking.c:268
msgid "Network configuration menu"
-msgstr "Ağ yapılandırma menüsü"
+msgstr "Ağ Yapılandırma Listesi"
#: networking.c:269 networking.c:520 networking.c:642
msgid "Done"
-msgstr "Tamam"
+msgstr "Bitti"
#: 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 "%s için ağ yapılandırmasını seçin. Aşağıdaki yapılandırma tipi listesi ethernet ayarı yapılmış olan arayüzleri gösterir. Eğer bu ayarları değiştirirseniz, ağın yeniden başlatılması ve ağ sürücüleri atamalarını tekrar yapılandırmanız gerekecektir."
+msgstr "%s için ağ yapılandırmasını seçin. Aşağıdaki yapılandırma türleri ethernet kartlarına atanmış arabirimleri listeler. Eğer bu ayarları değiştirirseniz, ağın yeniden başlatılması ve ağ sürücüleri atamalarını tekrar yapılandırmanız gerekecektir."
#: networking.c:307
#, c-format
msgid ""
"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
"\n"
-msgstr "Ağ sürücülerini ve her bir kart için atanmış arayüzleri yapılandırın. Geçerli yapılandırma aşağıdaki gibidir:\n\n"
+msgstr "Ağ sürücülerini ve her bir kart için atanmış ara birimleri yapılandırın. Geçerli yapılandırma aşağıdaki gibidir:\n\n"
#: networking.c:408
msgid "Do you wish to change these settings?"
msgid ""
"Please choose the interface you wish to change.\n"
"\n"
-msgstr "Lütfen değiştirmek istediğiniz arayüzü seçin.\n\n"
+msgstr "Lütfen değiştirmek istediğiniz ara birimi seçin.\n\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 "Eğer bu IP adresini değiştirirseniz, ve uzaktan oturum açmışsanız, %s makinesine olan bağlantınız kopacaktır ve yeni IP adresine tekrar bağlanmanız gerekecektir. Bu riskli bir işlemdir ve bir şeylerin ters gitmesi durumunda makineye fiziksel erişiminiz varsa kullanmalısınız."
+msgstr "Uzaktan oturum açtığınızda bu IP adresini değiştirirseniz %s makinesine olan bağlantınız kopacaktır ve yeni IP adresine tekrar bağlanmanız gerekecektir. Bu riskli bir işlemdir ve bir şeylerin ters gitmesi durumunda makineye fiziksel erişiminiz varsa kullanmalısınız."
#: networking.c:641
msgid "Select the interface you wish to reconfigure."
-msgstr "Yeniden yapılandırmak istediğiniz arayüzü seçin."
+msgstr "Yeniden yapılandırmak istediğiniz ara birimi seçin."
#: 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 "DNS ve ağ geçidi bilgisini girin. Bu ayarlar sadece KIRMIZI arayüzde Statik IP (ve eğer DNS ayarlanmışsa DHCP) ile kullanılacaktır."
+msgstr "DNS ve ağ geçidi bilgilerini girin. Bu ayarlar sadece KIRMIZI ara birim adres ayarlarında Statik seçeneği seçilmişse kullanılır. Eğer KIRMIZI ara birim adres ayarlarında DHCP seçeneğini seçtiyseniz bu alanı boş bırakabilirsiniz."
#: networking.c:773
msgid "Default gateway"
#: passwords.c:33
msgid ""
"Enter the 'root' user password. Login as this user for commandline access."
-msgstr "'root' kullanıcı şifresini girin. Komut satırına erişmek için bu kullanıcıyla oturum açın."
+msgstr "%s '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"
-msgstr "Şifre ayarlanıyor"
+msgstr "Parola ayarlanıyor"
#: passwords.c:38
msgid "Setting 'root' password...."
-msgstr "'root' şifresi ayarlanıyor..."
+msgstr "'root' parolası ayarlanıyor..."
#: passwords.c:39
msgid "Problem setting 'root' password."
-msgstr "'root' şifresi ayarlama sorunu."
+msgstr "'root' parolası ayarlama sorunu."
#: 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 "%s 'admin' kullanıcısı için şifre girin. Bu kullanıcı, %s web yönetim sayfalarını kullanmak için oturum açılacak kullanıcıdır."
+msgstr "%s 'admin' kullanıcı parolasını girin. Bu kullanıcı, %s web yönetimi sayfalarının kayıtlarına erişebilen kullanıcıdır."
#: passwords.c:60
#, c-format
msgid "Setting %s 'admin' user password..."
-msgstr "%s 'admin' kullanıcısının şifresi ayarlanıyor..."
+msgstr "%s 'admin' kullanıcısının parolası ayarlanıyor..."
#: passwords.c:62
#, c-format
msgid "Problem setting %s 'admin' user password."
-msgstr "%s 'admin' kullanıcı şifresi ayarlama sorunu."
+msgstr "%s 'admin' kullanıcı parolası ayarlama sorunu."
#: passwords.c:76
msgid "Password:"
-msgstr "Şifre:"
+msgstr "Parola:"
#: passwords.c:77
msgid "Again:"
#: passwords.c:95
msgid "Password cannot be blank."
-msgstr "Şifre boş olamaz."
+msgstr "Parola boş olamaz."
#: passwords.c:102
msgid "Passwords do not match."
-msgstr "Şifreler eşleşmiyor."
+msgstr "Parolalar eşleşmiyor."
#: passwords.c:109
msgid "Password cannot contain spaces."
-msgstr "Şifre boşluk içeremez."
+msgstr "Parola boşluk içeremez."
#: timezone.c:77
msgid "Choose the timezone you are in from the list below."
-msgstr "Aşağıdaki listeden içinde bulunduğunuz zaman dilimini seçin."
+msgstr "Aşağıdaki listeden bulunduğunuz zaman dilimini seçin."
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# ipfire <qiwenqiu@yahoo.com.hk>, 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"
+"PO-Revision-Date: 2015-01-31 09:57+0000\n"
+"Last-Translator: ipfire <qiwenqiu@yahoo.com.hk>\n"
"Language-Team: Chinese (http://www.transifex.com/projects/p/ipfire/language/zh/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\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 "默认租约(分钟)"
#: dhcp.c:55
msgid "Max lease (mins):"
-msgstr ""
+msgstr "最大租约(分钟)"
#: 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 "确定"
#: 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 ""
int interfacecheck(struct keyvalue *kv, char *colour);
int rename_nics(void);
int init_knics(void);
-int create_udev(void);
int scan_network_cards(void);
int nicmenu(int colour);
int clear_card_entry(int cards);
my $sth;
my $cnt=0;
#If we want to show Data from within last 2 months, get DATA from ACCT
- if ( ! $grmon < ($mon+1) && $gryear == ($year+1900)){
+ if ( $grmon == ($mon)+1 && $gryear == ($year+1900)){
$sth=&ACCT::getmonthgraphdata("ACCT",$from,$till,$grhost);
}else{
#If we want to show data from a date older than last two months, use ACCT_HIST
sub viewtablehosts{
$dbh=&ACCT::connectdb;
&Header::openbox('100%', 'left', $Lang::tr{'acct hosts'});
- my $mon=$_[0];
- my $year=$_[1];
- my ($from,$till)=&ACCT::getmonth($mon,$year);
+ my $mon1=$_[0];
+ my $year1=$_[1];
+ my ($from,$till)=&ACCT::getmonth($mon1,$year1);
$count=0;
#Menu to display another month
print<<END;
</select></td>
<td style='text-align: center;'><select name='year'>
END
- for (my $j=2014;$j<=($year);$j++){
+ for (my $j=2014;$j<=($year1);$j++){
if(($_[1]) eq $j){
print"<option selected>$j</option>";
}else{
<th></th>
</tr>
END
- my $res = $dbh->selectall_arrayref("SELECT SUM(BYTES),min(TIME_RUN),max(TIME_RUN),NAME from ACCT where TIME_RUN between ".$from." and ".$till." group by NAME;");
+ my $res;
+ if (($mon)+1 == $mon1 && ($year)+1900 == $year1){
+ $res = $dbh->selectall_arrayref("SELECT SUM(BYTES),min(TIME_RUN),max(TIME_RUN),NAME from ACCT where TIME_RUN between ".$from." and ".$till." group by NAME;");
+ }else{
+ $res = $dbh->selectall_arrayref("SELECT SUM(BYTES),min(strftime('%s',TIME_RUN)),max(strftime('%s',TIME_RUN)),NAME from ACCT_HIST where date(TIME_RUN) > date($from,'unixepoch') and date(TIME_RUN) < date($till,'unixepoch') group by NAME;");
+ }
my $sumbytes;
my $type;
my $lineval;
<input type='image' src='/images/utilities-system-monitor.png' alt="$Lang::tr{'status'}" title="$Lang::tr{'status'}" />
<input type='hidden' name='ACTION' value='viewgraph'>
<input type='hidden' name='host' value='$name'>
- <input type='hidden' name='month' value='$mon'>
- <input type='hidden' name='year' value='$year'>
+ <input type='hidden' name='month' value='$mon1'>
+ <input type='hidden' name='year' value='$year1'>
<input type='hidden' name='traffic' value="$Lang::tr{'acct sum'} $Lang::tr{'acct traffic'} $lineval $type">
</form>
}
sub movedbdata {
- $dbh->do("insert into ACCT_HIST select datetime(TIME_RUN,'unixepoch'),NAME,SUM(BYTES) from ACCT where date(TIME_RUN,'unixepoch') < date('now','-2 months') group by NAME,date(TIME_RUN,'unixepoch');");
- $dbh->do("DELETE FROM ACCT WHERE datetime(TIME_RUN,'unixepoch') < date('now','-2 months');");
+ &connectdb;
+ $dbh->do("insert into ACCT_HIST select datetime(TIME_RUN,'unixepoch'),NAME,SUM(BYTES) from ACCT where datetime(TIME_RUN,'unixepoch') < datetime('now','start of month') group by NAME,datetime(TIME_RUN,'unixepoch');");
+ $dbh->do("DELETE FROM ACCT WHERE datetime(TIME_RUN,'unixepoch') < date('now','start of month');");
+ &closedb;
}
sub gethourgraphdata {
my $name=$_[3];
my $res;
$dbh=connectdb;
- if ($table eq 'ACCT'){
- $res = $dbh->selectall_arrayref( "SELECT strftime('%d.%m.%Y',xx.tag),(SELECT SUM(BYTES)/1024/1024 FROM ACCT WHERE date(TIME_RUN,'unixepoch') <= xx.tag and NAME = '".$name."') kum_bytes FROM (SELECT date(TIME_RUN,'unixepoch') tag,SUM(BYTES)/1024/1024 sbytes FROM ACCT WHERE NAME='".$name."' and TIME_RUN between ".$from." and ".$till." GROUP by date(TIME_RUN,'unixepoch')) xx;");
+ if ($table eq 'ACCT_HIST'){
+ $res = $dbh->selectall_arrayref( "SELECT strftime('%d.%m.%Y',TIME_RUN),(SELECT SUM(BYTES)/1024/1024 FROM ACCT_HIST WHERE TIME_RUN <= ah.TIME_RUN and TIME_RUN > date($from,'unixepoch') and NAME = '".$name."') kum_bytes FROM ACCT_HIST ah WHERE date(TIME_RUN) > date(".$from.",'unixepoch') AND date(TIME_RUN) < date(".$till.",'unixepoch') AND NAME = '".$name."' group by date(TIME_RUN);");
}else{
- $res = $dbh->selectall_arrayref( "SELECT TIME_RUN, (SELECT SUM(BYTES)/1024/1024 FROM ACCT_HIST WHERE TIME_RUN <= ah.TIME_RUN and NAME = '".$name."') kum_bytes FROM ACCT_HIST ah WHERE TIME_RUN BETWEEN date(".$from.",'unixepoch') AND date(".$till.",'unixepoch') AND NAME = '".$name."' group by TIME_RUN;");
+ $res = $dbh->selectall_arrayref( "SELECT strftime('%d.%m.%Y',xx.tag),(SELECT SUM(BYTES)/1024/1024 FROM ACCT WHERE date(TIME_RUN,'unixepoch') <= xx.tag and TIME_RUN > ".$from." and NAME = '".$name."') kum_bytes FROM (SELECT NAME,date(TIME_RUN,'unixepoch') tag,SUM(BYTES)/1024/1024 sbytes FROM ACCT WHERE NAME='".$name."' and TIME_RUN between ".$from." and ".$till." GROUP by NAME,date(TIME_RUN,'unixepoch')) xx;");
}
$dbh=closedb;
return $res;
open (FH,">/var/log/accounting.log");
close (FH);
chmod 0755, "/var/log/accounting.log";
- #move all db entries older than 2 months to second table and cumulate them hourly
+ #move all db entries older than this month to second table and cumulate them daily
&ACCT::movedbdata;
&ACCT::logger($settings{'LOG'},"New Month. Old trafficvalues moved to ACCT_HIST Table\n");
if ($settings{'USEMAIL'} eq 'on'){
###############################################################################
# #
# IPFire.org - A linux based firewall #
-# Copyright (C) 2007-2013 IPFire Team info@ipfire.org #
+# Copyright (C) 2007-2015 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 #
grep -r "^var/run//*" ./config/rootfiles/
echo "Comment this and create it at initskript if needed !"
fi
+
+grep -r "/i586" ./config/rootfiles/ --exclude gcc --exclude-dir oldcore >/dev/null 2>&1
+if [ "${?}" == "0" ]; then
+ echo "Error! '/i586' in rootfiles files found!"
+ grep -r "/i586" ./config/rootfiles/ --exclude gcc --exclude-dir oldcore
+ echo "Replace by MACHINE !"
+fi
+
+grep -r "/armv5tel" ./config/rootfiles/ --exclude gcc --exclude-dir oldcore >/dev/null 2>&1
+if [ "${?}" == "0" ]; then
+ echo "Error! '/armv5tel' in rootfiles files found!"
+ grep -r "/armv5tel" ./config/rootfiles/ --exclude gcc --exclude-dir oldcore
+ echo "Replace by MACHINE !"
+fi
$BASEDIR/tools/check_strings.pl it > $BASEDIR/doc/language_issues.it
$BASEDIR/tools/check_langs.sh > $BASEDIR/doc/language_missings
beautify message DONE
+
+ echo -ne "Updating language lists..."
+ update_language_list ${BASEDIR}/src/installer/po
+ update_language_list ${BASEDIR}/src/setup/po
+ beautify message DONE
+}
+
+update_language_list() {
+ local path="${1}"
+
+ local lang
+ for lang in ${path}/*.po; do
+ lang="$(basename "${lang}")"
+ echo "${lang%*.po}"
+ done | sort -u > "${path}/LINGUAS"
}