]> git.ipfire.org Git - people/ms/dnsmasq.git/commitdiff
import of dnsmasq-2.56.tar.gz
authorSimon Kelley <simon@thekelleys.org.uk>
Mon, 14 Feb 2011 20:19:14 +0000 (20:19 +0000)
committerSimon Kelley <simon@thekelleys.org.uk>
Thu, 5 Jan 2012 17:31:15 +0000 (17:31 +0000)
39 files changed:
CHANGELOG
FAQ
contrib/MacOSX-launchd/uk.org.thekelleys.dnsmasq.plist
dnsmasq.conf.example
doc.html
logo/README [new file with mode: 0644]
logo/favicon.ico [new file with mode: 0644]
logo/icon.png [new file with mode: 0644]
logo/icon.svg [new file with mode: 0644]
man/dnsmasq.8
man/fr/dnsmasq.8
po/de.po
po/es.po
po/fi.po
po/fr.po
po/id.po
po/it.po
po/no.po
po/pl.po
po/pt_BR.po
po/ro.po
src/bpf.c
src/cache.c
src/config.h
src/dbus.c
src/dhcp.c
src/dnsmasq.c
src/dnsmasq.h
src/forward.c
src/helper.c
src/lease.c
src/log.c
src/netlink.c
src/network.c
src/option.c
src/rfc1035.c
src/rfc2131.c
src/tftp.c
src/util.c

index 37395418652da00cb05efbea3ea1f13a5a54dd96..f2e4977c6bcc877cda67a4741cb92ebdb4b6f436 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
+version 2.56
+            Add a patch to allow dnsmasq to get interface names right in a
+            Solaris zone. Thanks to Dj Padzensky for this.
+
+           Improve data-type parsing heuristics so that
+           --dhcp-option=option:domain-search,. 
+           treats the value as a string and not an IP address.
+           Thanks to Clemens Fischer for spotting that.
+
+           Add IPv6 support to the TFTP server. Many thanks to Jan 
+           'RedBully' Seiffert for the patches.
+           
+           Log DNS queries at level LOG_INFO, rather then
+           LOG_DEBUG. This makes things consistent with DHCP
+           logging. Thanks to Adam Pribyl for spotting the problem.
+
+            Ensure that dnsmasq terminates cleanly when using
+            --syslog-async even if it cannot make a connection to the
+            syslogd.
+
+           Add --add-mac option. This is to support currently 
+           experimental DNS filtering facilities. Thanks to Benjamin
+           Petrin for the orignal patch. 
+
+           Fix bug which meant that tags were ignored in dhcp-range
+           configuration specifying PXE-proxy service. Thanks to
+           Cristiano Cumer for spotting this.
+
+           Raise an error if there is extra junk, not part of an
+           option, on the command line.
+
+           Flag a couple of log messages in cache.c as coming from
+           the DHCP subsystem. Thanks to Olaf Westrik for the patch.
+
+           Omit timestamps from logs when a) logging to stderr and 
+           b) --keep-in-forground is set. The logging facility on the
+           other end of stderr can be assumned to supply them. Thanks
+           to John Hallam for the patch.
+
+           Don't complain about strings longer than 255 characters in
+           --txt-record, just split the long strings into 255
+           character chunks instead.
+
+           Fix crash on double-free. This bug can only happen when
+           dhcp-script is in use and then only in rare circumstances
+           triggered by high DHCP transaction rate and a slow
+           script. Thanks to Ferenc Wagner for finding the problem.
+
+           Only log that a file has been sent by TFTP after the
+           transfer has completed succesfully. 
+
+           A good suggestion from Ferenc Wagner: extend
+           the --domain option to allow this sort of thing:
+            --domain=thekelleys.org.uk,192.168.0.0/24,local
+           which automatically creates
+           --local=/thekelleys.org.uk/
+           --local=/0.168.192.in-addr.arpa/ 
+
+           Tighten up syntax checking of hex contants in the config
+           file.  Thanks to Fred Damen for spotting this.
+
+           Add dnsmasq logo/icon, contributed by Justin Swift. Many
+           thanks for that.
+
+           Never cache DNS replies which have the 'cd' bit set, or
+           which result from queries forwarded with the 'cd' bit
+           set. The 'cd' bit instructs a DNSSEC validating server
+           upstream to ignore signature failures and return replies
+           anyway. Without this change it's possible to pollute the
+           dnsmasq cache with bad data by making a query with the
+           'cd' bit set and subsequent queries would return this data
+           without its being marked as suspect. Thanks to Anders
+           Kaseorg for pointing out this problem.
+
+           Add --proxy-dnssec flag, for compliance with RFC
+           4035. Dnsmasq will now clear the 'ad' bit in answers returned
+           from upstream validating nameservers unless this option is
+           set.
+
+           Allow a filename of "-" for --conf-file to read
+           stdin. Suggestion from Timothy Redaelli.
+
+           Rotate the order of SRV records in replies, to provide
+           round-robin load balancing when all the priorities are
+           equal. Thanks to Peter McKinney for the suggestion. 
+
+           Edit
+           contrib/MacOSX-launchd/uk.org.thekelleys.dnsmasq.plist 
+           so that it doesn't log all queries to a file by
+           default. Thanks again to Peter McKinney.    
+
+           By default, setting an IPv4 address for a domain but not
+           an IPv6 address causes dnsmasq to return
+           an NODATA reply for IPv6 (or vice-versa). So
+           --address=/google.com/1.2.3.4 stops IPv6 queries for
+           *google.com from being forwarded. Make it possible to
+           override this behaviour by defining the sematics if the
+           same domain appears in  both --server and --address.
+           In that case, the --address has priority for the address
+           family in which is appears, but the --server has priority
+           of the address family which doesn't appear in --adddress  
+           So:
+           --address=/google.com/1.2.3.4
+           --server=/google.com/#
+           will return 1.2.3.4 for IPv4 queries for *.google.com but
+           forward IPv6 queries to the normal upstream nameserver.
+           Similarly when setting an IPv6 address
+           only this will allow forwarding of IPv4 queries. Thanks to
+           William for pointing out the need for this.
+
+           Allow more than one --dhcp-optsfile and --dhcp-hostsfile
+           and make them understand directories as arguments in the
+           same way as --addn-hosts. Suggestion from John Hanks. 
+
+           Ignore rebinding requests for leases we don't know
+           about. Rebind is broadcast, so we might get to overhear a
+           request meant for another DHCP server. NAKing this is
+           wrong. Thanks to Brad D'Hondt for assistance with this.
+
+           Fix cosmetic bug which produced strange output when
+           dumping cache statistics with some configurations. Thanks
+           to Fedor Kozhevnikov for spotting this.
+
+
 version 2.55
-           Fix crash when /etc/ethers is in use. Thanks to 
-          Gianluigi Tiesi for finding this.
+            Fix crash when /etc/ethers is in use. Thanks to 
+           Gianluigi Tiesi for finding this.
 
-          Fix crash in netlink_multicast(). Thanks to Arno Wald for
-          finding this one.
+           Fix crash in netlink_multicast(). Thanks to Arno Wald for
+           finding this one.
 
-          Allow the empty domain "." in dhcp domain-search (119)
-          options. 
+           Allow the empty domain "." in dhcp domain-search (119)
+           options. 
 
 
 version 2.54
-           There is no version 2.54 to avoid confusion with 2.53,
-           which incorrectly identifies itself as 2.54.
+            There is no version 2.54 to avoid confusion with 2.53,
+            which incorrectly identifies itself as 2.54.
 
 
 version 2.53
diff --git a/FAQ b/FAQ
index d7df80c4fb3d0b3cdd4c630a81370ad35131b19b..a9305166fba8bbb9c9d117cfdd3576ce792e7848 100644 (file)
--- a/FAQ
+++ b/FAQ
@@ -354,7 +354,7 @@ A: Yes, from version-2.21. The support is only available running under
    If a physical interface has more than one IP address or aliases
    with extra IP addresses, then any dhcp-ranges corresponding to
    these addresses can be used for address allocation. So if an
-   interface has addresses 192.168.1.0/24 and 192.68.2.0/24 and there
+   interface has addresses 192.168.1.0/24 and 192.168.2.0/24 and there
    are DHCP ranges 192.168.1.100-192.168.1.200 and
    192.168.2.100-192.168.2.200 then both ranges would be used for host
    connected to the physical interface. A more typical use might be to
@@ -413,10 +413,11 @@ A: Change your kernel configuration: either deselect CONFIG_SECURITY
    _or_ select CONFIG_SECURITY_CAPABILITIES. Alternatively, you can 
    remove the need to set capabilities by running dnsmasq as root.
 
-Q: Where can I get .rpms Suitable for Suse?
 
-A: Dnsmasq is in Suse itself, and the latest releases are also
-   available at ftp://ftp.suse.com/pub/people/ug/
+Q: Where can I get .rpms Suitable for openSUSE/SLES?
+
+A: Dnsmasq is in openSUSE itself, and the latest releases are also
+   available at http://download.opensuse.org/repositories/network/
 
 
 Q: Can I run dnsmasq in a Linux vserver?
index fa99176110d7021384680d2cbc0668fb2f3ceff2..87725b160f87419b9905e26090be63d259cc9895 100644 (file)
@@ -8,8 +8,6 @@
        <array>
                <string>/usr/local/sbin/dnsmasq</string>
                <string>--keep-in-foreground</string>
-               <string>--log-queries</string>
-               <string>--log-facility=/var/log/dnsmasq.log</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
index fd634bc3ed038025f7839d55c6798da5d548a318..f7ea58b3d36190b47894ff257ac2c9edcf107694 100644 (file)
@@ -7,8 +7,8 @@
 # The following two options make you a better netizen, since they
 # tell dnsmasq to filter out queries which the public DNS cannot
 # answer, and which load the servers (especially the root servers)
-# uneccessarily. If you have a dial-on-demand link they also stop
-# these requests from bringing up the link uneccessarily.
+# necessarily. If you have a dial-on-demand link they also stop
+# these requests from bringing up the link necessarily.
 
 # Never forward plain names (without a dot or domain part)
 #domain-needed
@@ -48,7 +48,7 @@
 # non-public domains.
 #server=/localnet/192.168.0.1
 
-# Example of routing PTR queries to nameservers: this will send all 
+# Example of routing PTR queries to nameservers: this will send all
 # address->name queries for 192.168.3/24 to nameserver 10.1.2.3
 #server=/3.168.192.in-addr.arpa/10.1.2.3
 
 #local=/localnet/
 
 # Add domains which you want to force to an IP address here.
-# The example below send any host in doubleclick.net to a local
-# webserver.
-#address=/doubleclick.net/127.0.0.1
+# The example below send any host in double-click.net to a local
+# web-server.
+#address=/double-click.net/127.0.0.1
 
 # --address (and --server) work with IPv6 addresses too.
 #address=/www.thekelleys.org.uk/fe80::20d:60ff:fe36:f83
 
-# You can control how dnsmasq talks to a server: this forces 
+# You can control how dnsmasq talks to a server: this forces
 # queries to 10.1.2.3 to be routed via eth1
 # server=10.1.2.3@eth1
 
@@ -90,7 +90,7 @@
 #listen-address=
 # If you want dnsmasq to provide only DNS service on an interface,
 # configure it as shown above, and then use the following line to
-# disable DHCP on it.
+# disable DHCP and TFTP on it.
 #no-dhcp-interface=
 
 # On systems which support it, dnsmasq binds the wildcard address,
 # some DHCP options may be set only for this network.
 #dhcp-range=set:red,192.168.0.50,192.168.0.150
 
-# Use this DHCP range only when the tag "green" is set. 
+# Use this DHCP range only when the tag "green" is set.
 #dhcp-range=tag:green,192.168.0.50,192.168.0.150,12h
 
 # Specify a subnet which can't be used for dynamic address allocation,
 # dhcp-host declarations will be ignored unless there is a dhcp-range
 # of some type for the subnet in question.
 # In this case the netmask is implied (it comes from the network
-# configuration on the machine running dnsmasq) it is possible to give 
-# an explict netmask instead.
+# configuration on the machine running dnsmasq) it is possible to give
+# an explicit netmask instead.
 #dhcp-range=192.168.0.0,static
+
 # Supply parameters for specified hosts using DHCP. There are lots
 # of valid alternatives, so we will give examples of each. Note that
 # IP addresses DO NOT have to be in the range given above, they just
 # need to be on the same network. The order of the parameters in these
-# do not matter, it's permissble to give name,adddress and MAC in any order
+# do not matter, it's permissible to give name,address and MAC in any order
 
-# Always allocate the host with ethernet address 11:22:33:44:55:66
+# Always allocate the host with Ethernet address 11:22:33:44:55:66
 # The IP address 192.168.0.60
 #dhcp-host=11:22:33:44:55:66,192.168.0.60
 
 # 11:22:33:44:55:66 to be "fred"
 #dhcp-host=11:22:33:44:55:66,fred
 
-# Always give the host with ethernet address 11:22:33:44:55:66
+# Always give the host with Ethernet address 11:22:33:44:55:66
 # the name fred and IP address 192.168.0.60 and lease time 45 minutes
 #dhcp-host=11:22:33:44:55:66,fred,192.168.0.60,45m
 
-# Give a host with ethernet address 11:22:33:44:55:66 or
+# Give a host with Ethernet address 11:22:33:44:55:66 or
 # 12:34:56:78:90:12 the IP address 192.168.0.60. Dnsmasq will assume
-# that these two ethernet interfaces will never be in use at the same
+# that these two Ethernet interfaces will never be in use at the same
 # time, and give the IP address to the second, even if it is already
 # in use by the first. Useful for laptops with wired and wireless
 # addresses.
 # it asks for a DHCP lease.
 #dhcp-host=judge
 
-# Never offer DHCP service to a machine whose ethernet
+# Never offer DHCP service to a machine whose Ethernet
 # address is 11:22:33:44:55:66
 #dhcp-host=11:22:33:44:55:66,ignore
 
-# Ignore any client-id presented by the machine with ethernet
+# Ignore any client-id presented by the machine with Ethernet
 # address 11:22:33:44:55:66. This is useful to prevent a machine
 # being treated differently when running under different OS's or
 # between PXE boot and OS boot.
 #dhcp-host=11:22:33:44:55:66,id:*
 
 # Send extra options which are tagged as "red" to
-# the machine with ethernet address 11:22:33:44:55:66
+# the machine with Ethernet address 11:22:33:44:55:66
 #dhcp-host=11:22:33:44:55:66,set:red
 
 # Send extra options which are tagged as "red" to
-# any machine with ethernet address starting 11:22:33:
+# any machine with Ethernet address starting 11:22:33:
 #dhcp-host=11:22:33:*:*:*,set:red
 
 # Ignore any clients which are specified in dhcp-host lines
-# or /etc/ethers. Equivalent to ISC "deny unkown-clients".
-# This relies on the special "known" tag which is set when 
+# or /etc/ethers. Equivalent to ISC "deny unknown-clients".
+# This relies on the special "known" tag which is set when
 # a host is matched.
 #dhcp-ignore=tag:!known
 
 
 # Send options to hosts which ask for a DHCP lease.
 # See RFC 2132 for details of available options.
-# Common options can be given to dnsmasq by name: 
+# Common options can be given to dnsmasq by name:
 # run "dnsmasq --help dhcp" to get a list.
 # Note that all the common settings, such as netmask and
 # broadcast address, DNS server and default route, are given
-# sane defaults by dnsmasq. You very likely will not need 
+# sane defaults by dnsmasq. You very likely will not need
 # any dhcp-options. If you use Windows clients and Samba, there
 # are some options which are recommended, they are detailed at the
 # end of this section.
 
 # Override the default route supplied by dnsmasq and send no default
 # route at all. Note that this only works for the options sent by
-# default (1, 3, 6, 12, 28) the same line will send a zero-length option 
+# default (1, 3, 6, 12, 28) the same line will send a zero-length option
 # for all other option numbers.
 #dhcp-option=3
 
 # http://www.samba.org/samba/ftp/docs/textdocs/DHCP-Server-Configuration.txt
 # adapted for a typical dnsmasq installation where the host running
 # dnsmasq is also the host running samba.
-# you may want to uncomment some or all of them if you use 
+# you may want to uncomment some or all of them if you use
 # Windows clients and Samba.
 #dhcp-option=19,0           # option ip-forwarding off
 #dhcp-option=44,0.0.0.0     # set netbios-over-TCP/IP nameserver(s) aka WINS server(s)
 # Send RFC-3442 classless static routes (note the netmask encoding)
 #dhcp-option=121,192.168.1.0/24,1.2.3.4,10.0.0.0/8,5.6.7.8
 
-# Send vendor-class specific options encapsulated in DHCP option 43. 
+# Send vendor-class specific options encapsulated in DHCP option 43.
 # The meaning of the options is defined by the vendor-class so
 # options are sent only when the client supplied vendor class
-# matches the class given here. (A substring match is OK, so "MSFT" 
+# matches the class given here. (A substring match is OK, so "MSFT"
 # matches "MSFT" and "MSFT 5.0"). This example sets the
 # mtftp address to 0.0.0.0 for PXEClients.
 #dhcp-option=vendor:PXEClient,1,0.0.0.0
 
 # Send options to PXELinux. Note that we need to send the options even
 # though they don't appear in the parameter request list, so we need
-# to use dhcp-option-force here. 
+# to use dhcp-option-force here.
 # See http://syslinux.zytor.com/pxe.php#special for details.
 # Magic number - needed before anything else is recognised
 #dhcp-option-force=208,f1:00:74:7e
 # Reboot time. (Note 'i' to send 32-bit value)
 #dhcp-option-force=211,30i
 
-# Set the boot filename for netboot/PXE. You will only need 
+# Set the boot filename for netboot/PXE. You will only need
 # this is you want to boot machines over the network and you will need
 # a TFTP server; either dnsmasq's built in TFTP server or an
 # external one. (See below for how to enable the TFTP server.)
 #dhcp-match=set:gpxe,175 # gPXE sends a 175 option.
 #dhcp-boot=tag:!gpxe,undionly.kpxe
 #dhcp-boot=mybootimage
+
 # Encapsulated options for Etherboot gPXE. All the options are
 # encapsulated within option 175
 #dhcp-option=encap:175, 1, 5b         # priority code
-#dhcp-option=encap:175, 176, 1b       # no-proxydhcp 
-#dhcp-option=encap:175, 177, string   # bus-id 
+#dhcp-option=encap:175, 176, 1b       # no-proxydhcp
+#dhcp-option=encap:175, 177, string   # bus-id
 #dhcp-option=encap:175, 189, 1b       # BIOS drive code
 #dhcp-option=encap:175, 190, user     # iSCSI username
 #dhcp-option=encap:175, 191, pass     # iSCSI password
 #dhcp-match=peecees, option:client-arch, 0 #x86-32
 #dhcp-match=itanics, option:client-arch, 2 #IA64
 #dhcp-match=hammers, option:client-arch, 6 #x86-64
-#dhcp-match=mactels, option:client-arch, 7 #EFI x86-64 
+#dhcp-match=mactels, option:client-arch, 7 #EFI x86-64
 
 # Do real PXE, rather than just booting a single file, this is an
 # alternative to dhcp-boot.
 #pxe-service=x86PC, "Boot from local disk"
 
 # Loads <tftp-root>/pxelinux.0 from dnsmasq TFTP server.
-#pxe-service=x86PC, "Install Linux", pxelinux 
+#pxe-service=x86PC, "Install Linux", pxelinux
 
 # Loads <tftp-root>/pxelinux.0 from TFTP server at 1.2.3.4.
 # Beware this fails on old PXE ROMS.
-#pxe-service=x86PC, "Install Linux", pxelinux, 1.2.3.4 
+#pxe-service=x86PC, "Install Linux", pxelinux, 1.2.3.4
 
 # Use bootserver on network, found my multicast or broadcast.
 #pxe-service=x86PC, "Install windows from RIS server", 1
 # If you have multicast-FTP available,
 # information for that can be passed in a similar way using options 1
 # to 5. See page 19 of
-# http://download.intel.com/design/archives/wfm/downloads/pxespec.pdf  
+# http://download.intel.com/design/archives/wfm/downloads/pxespec.pdf
+
 
-  
 # Enable dnsmasq's built-in TFTP server
 #enable-tftp
 
-# Set the root directory for files availble via FTP.
+# Set the root directory for files available via FTP.
 #tftp-root=/var/ftpd
 
 # 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
 
-# This option stops dnsmasq from negotiating a larger blocksize for TFTP 
+# This option stops dnsmasq from negotiating a larger blocksize for TFTP
 # transfers. It will slow things down, but may rescue some broken TFTP
 # clients.
 #tftp-no-blocksize
 # and take over the lease for any client which broadcasts on the network,
 # whether it has a record of the lease or not. This avoids long timeouts
 # when a machine wakes up on a new network. DO NOT enable this if there's
-# the slighest chance that you might end up accidentally configuring a DHCP
+# the slightest chance that you might end up accidentally configuring a DHCP
 # server for your campus/company accidentally. The ISC server uses
 # the same option, and this URL provides more information:
-# http://www.isc.org/index.pl?/sw/dhcp/authoritative.php
+# http://www.isc.org/files/auth.html
 #dhcp-authoritative
 
 # Run an executable when a DHCP lease is created or destroyed.
-# The arguments sent to the script are "add" or "del", 
+# The arguments sent to the script are "add" or "del",
 # then the MAC address, the IP address and finally the hostname
-# if there is one. 
+# if there is one.
 #dhcp-script=/bin/echo
 
 # Set the cachesize here.
index 18a4b248f1c4407d78aefdf23bdb0d6b05cf086f..0a730838450e8289b2dc82e467e6d7bc411e3ac7 100644 (file)
--- a/doc.html
+++ b/doc.html
@@ -1,9 +1,17 @@
 <HTML>
 <HEAD>
 <TITLE> Dnsmasq - a DNS forwarder for NAT firewalls.</TITLE>
+<link rel="icon"
+      href="http://www.thekelleys.org.uk/dnsmasq/images/favicon.ico">
 </HEAD>
 <BODY BGCOLOR="WHITE"> 
-<H1 ALIGN=center>Dnsmasq</H1> 
+<table width="100%" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<td align="left" valign="middle"><img border="0" src="http://www.thekelleys.org.uk/dnsmasq/images/icon.png" /></td>
+<td align="middle" valign="middle"><h1>Dnsmasq</h1></td>
+<td align="right" valign="middle"><img border="0" src="http://www.thekelleys.org.uk/dnsmasq/images/icon.png" /></td></tr>
+</table>
+
 Dnsmasq is a lightweight, easy to configure DNS forwarder and DHCP
  server. It is designed to provide DNS and, optionally, DHCP, to a 
  small network. It can serve the names of local machines which are 
diff --git a/logo/README b/logo/README
new file mode 100644 (file)
index 0000000..05a8250
--- /dev/null
@@ -0,0 +1,12 @@
+Dnsmasq logo, contributed by Justin Clift.
+
+The source format is Inkscape SVG vector format, which is scalable and
+easy to export to other formats. For convenience I've included a 56x31
+png export and a 16x16 ico suitable for use as a web favicon.
+
+Simon Kelley, 22/10/2010
+
+
+
+
diff --git a/logo/favicon.ico b/logo/favicon.ico
new file mode 100644 (file)
index 0000000..1c7e8f8
Binary files /dev/null and b/logo/favicon.ico differ
diff --git a/logo/icon.png b/logo/icon.png
new file mode 100644 (file)
index 0000000..cf48461
Binary files /dev/null and b/logo/icon.png differ
diff --git a/logo/icon.svg b/logo/icon.svg
new file mode 100644 (file)
index 0000000..a2f7521
--- /dev/null
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
+   x="0px"
+   y="0px"
+   width="56"
+   height="31"
+   viewBox="0 0 56 31"
+   enable-background="new 0 0 72.833 46.667"
+   xml:space="preserve"
+   id="svg2"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="dnsmasq_icon.svg"
+   inkscape:export-filename="/x/centos_home/jc/workspace/git_repos/libvirt-media/libvirt-media/png/dnsmasq_icon.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90"><metadata
+   id="metadata27"><rdf:RDF><cc:Work
+       rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+         rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+   id="defs25"><inkscape:perspective
+   sodipodi:type="inkscape:persp3d"
+   inkscape:vp_x="0 : 23.3335 : 1"
+   inkscape:vp_y="0 : 1000 : 0"
+   inkscape:vp_z="72.833 : 23.3335 : 1"
+   inkscape:persp3d-origin="36.4165 : 15.555667 : 1"
+   id="perspective4857" />
+       <filter
+   id="filter3802"
+   inkscape:label="filter1"
+   color-interpolation-filters="sRGB" /><linearGradient
+   inkscape:collect="always"
+   xlink:href="#SVGID_3_"
+   id="linearGradient4929"
+   gradientUnits="userSpaceOnUse"
+   x1="30.564501"
+   y1="-8.8144999"
+   x2="32.937"
+   y2="32.715599" />
+               <linearGradient
+   inkscape:collect="always"
+   xlink:href="#SVGID_3_"
+   id="linearGradient5798"
+   gradientUnits="userSpaceOnUse"
+   x1="30.564501"
+   y1="-8.8144999"
+   x2="32.937"
+   y2="32.715599" /><linearGradient
+   inkscape:collect="always"
+   xlink:href="#SVGID_3_"
+   id="linearGradient5812"
+   gradientUnits="userSpaceOnUse"
+   x1="30.564501"
+   y1="-8.8144999"
+   x2="32.937"
+   y2="32.715599" /><filter
+   id="filter6262"
+   inkscape:label="Drop shadow"
+   width="1.5"
+   height="1.5"
+   x="-0.25"
+   y="-0.25"
+   color-interpolation-filters="sRGB"><feGaussianBlur
+     id="feGaussianBlur6264"
+     in="SourceAlpha"
+     stdDeviation="2.500000"
+     result="blur" /><feColorMatrix
+     id="feColorMatrix6266"
+     result="bluralpha"
+     type="matrix"
+     values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0.500000 0 " /><feOffset
+     id="feOffset6268"
+     in="bluralpha"
+     dx="2.700000"
+     dy="2.600000"
+     result="offsetBlur" /><feMerge
+     id="feMerge6270"><feMergeNode
+       id="feMergeNode6272"
+       in="offsetBlur" /><feMergeNode
+       id="feMergeNode6274"
+       in="SourceGraphic" /></feMerge></filter></defs><sodipodi:namedview
+   pagecolor="#ffffff"
+   bordercolor="#666666"
+   borderopacity="1"
+   objecttolerance="10"
+   gridtolerance="10"
+   guidetolerance="10"
+   inkscape:pageopacity="0"
+   inkscape:pageshadow="2"
+   inkscape:window-width="1568"
+   inkscape:window-height="1076"
+   id="namedview23"
+   showgrid="false"
+   inkscape:zoom="8"
+   inkscape:cx="31.966768"
+   inkscape:cy="21.211869"
+   inkscape:window-x="567"
+   inkscape:window-y="328"
+   inkscape:window-maximized="0"
+   inkscape:current-layer="layer1"
+   inkscape:showpageshadow="false"
+   showborder="true" />
+<g
+   inkscape:groupmode="layer"
+   id="layer1"
+   inkscape:label="dnsmasq"
+   style="display:inline"
+   transform="translate(5.2838057,-15.545371)"><g
+     id="g3790"
+     transform="matrix(0.8183832,0,0,0.8183832,65.304897,9.8747678)"
+     style="filter:url(#filter6262)"
+     inkscape:export-xdpi="90"
+     inkscape:export-ydpi="90"><g
+       transform="translate(-91.018462,1.0687099)"
+       id="g9">
+                       <path
+   style="fill:#6700ad"
+   inkscape:connector-curvature="0"
+   id="path11"
+   d="M 54.997,12.151 C 50.083,9.132 43.29,7.266 35.791,7.266 c -7.5,0 -14.29,1.866 -19.204,4.885 -4.915,3.016 -7.956,7.184 -7.956,11.789 0,4.604 3.041,8.772 7.956,11.788 4.914,3.02 11.704,-4.271 19.204,-4.271 7.499,0 14.292,7.291 19.206,4.271 4.914,-3.016 7.955,-7.185 7.955,-11.788 0,-4.606 -3.041,-8.773 -7.955,-11.789 z M 24.996,24.318 c -2.698,0 -4.885,-0.922 -4.885,-2.061 0,-1.14 2.187,-2.063 4.885,-2.063 2.697,0 4.885,0.924 4.885,2.063 0,1.139 -2.188,2.061 -4.885,2.061 z m 21.501,0.191 c -2.686,0 -4.861,-0.856 -4.861,-1.912 0,-1.054 2.176,-1.911 4.861,-1.911 2.685,0 4.863,0.857 4.863,1.911 0,1.056 -2.178,1.912 -4.863,1.912 z" />
+                       <path
+   style="fill:none;stroke:#ffb616;stroke-width:1.85353255"
+   inkscape:connector-curvature="0"
+   id="path13"
+   d="M 54.997,12.151 C 50.083,9.132 43.29,7.266 35.791,7.266 c -7.5,0 -14.29,1.866 -19.204,4.885 -4.915,3.016 -7.956,7.184 -7.956,11.789 0,4.604 3.041,8.772 7.956,11.788 4.914,3.02 11.704,-4.271 19.204,-4.271 7.499,0 14.292,7.291 19.206,4.271 4.914,-3.016 7.955,-7.185 7.955,-11.788 0,-4.606 -3.041,-8.773 -7.955,-11.789 z M 24.996,24.318 c -2.698,0 -4.885,-0.922 -4.885,-2.061 0,-1.14 2.187,-2.063 4.885,-2.063 2.697,0 4.885,0.924 4.885,2.063 0,1.139 -2.188,2.061 -4.885,2.061 z m 21.501,0.191 c -2.686,0 -4.861,-0.856 -4.861,-1.912 0,-1.054 2.176,-1.911 4.861,-1.911 2.685,0 4.863,0.857 4.863,1.911 0,1.056 -2.178,1.912 -4.863,1.912 z" />
+               </g><g
+       transform="translate(-91.018462,1.0687099)"
+       id="Layer_2">
+       <linearGradient
+   y2="32.715599"
+   x2="32.937"
+   y1="-8.8144999"
+   x1="30.564501"
+   gradientUnits="userSpaceOnUse"
+   id="SVGID_3_">
+               <stop
+   id="stop17"
+   style="stop-color:#FFFFFF;stop-opacity:0.73"
+   offset="0" />
+               <stop
+   id="stop19"
+   style="stop-color:#FFFFFF;stop-opacity:0"
+   offset="1" />
+       </linearGradient>
+       <path
+   inkscape:connector-curvature="0"
+   style="fill:url(#linearGradient5812)"
+   id="path21"
+   d="m 54.1,15.361 c -0.924,1.078 -2.782,1.265 -3.857,1.06 C 38,14.083 22.75,12.75 16.027,23.031 14.858,24.819 11.992,25.39 10.293,23.887 8.631,22.417 13.105,15.804 17.646,13.033 22.194,10.252 28.474,8.53 35.41,8.53 c 6.936,0 13.215,1.722 17.756,4.502 0.731,0.442 1.627,1.52 0.934,2.329 z" />
+</g></g></g></svg>
\ No newline at end of file
index 80d0120376ac6a4892150ae846690ba14bde8ee4..511f57f40478e3f60c0abf3a42af3a882aae8eb9 100644 (file)
@@ -23,7 +23,7 @@ options. It includes a secure, read-only,
 TFTP server to allow net/PXE boot of DHCP hosts and also supports BOOTP.
 .PP
 Dnsmasq 
-supports IPv6 for DNS, but not DHCP.
+supports IPv6 for DNS and TFTP, but not DHCP.
 .SH OPTIONS
 Note that in general missing parameters are allowed and switch off
 functions, for instance "--pid-file" disables writing a PID file. On
@@ -415,7 +415,9 @@ all that match are returned.
 .TP
 .B \-Y, --txt-record=<name>[[,<text>],<text>]
 Return a TXT DNS record. The value of TXT record is a set of strings,
-so  any number may be included, split by commas.
+so  any number may be included, delimited by commas; use quotes to put
+commas into a string. Note that the maximum length of a single string
+is 255 characters, longer strings are split into 255 character chunks.
 .TP
 .B --ptr-record=<name>[,<target>]
 Return a PTR DNS record.
@@ -442,6 +444,15 @@ the name. More than one name may be associated with an interface
 address by repeating the flag; in that case the first instance is used
 for the reverse address-to-name mapping.
 .TP
+.B --add-mac
+Add the MAC address of the requestor to DNS queries which are
+forwarded upstream. This may be used to DNS filtering by the upstream
+server. The MAC address can only be added if the requestor is on the same
+subnet as the dnsmasq server. Note that the mechanism used to achieve this (an EDNS0 option)
+is not yet standardised, so this should be considered
+experimental. Also note that exposing MAC addresses in this way may
+have security and privacy implications. 
+.TP
 .B \-c, --cache-size=<cachesize>
 Set the size of dnsmasq's cache. The default is 150 names. Setting the cache size to zero disables caching.
 .TP
@@ -456,6 +467,20 @@ Set the maximum number of concurrent DNS queries. The default value is
 where this needs to be increased is when using web-server log file
 resolvers, which can generate large numbers of concurrent queries.
 .TP
+.B --proxy-dnssec
+A resolver on a client machine can do DNSSEC validation in two ways: it
+can perform the cryptograhic operations on the reply it receives, or
+it can rely on the upstream recursive nameserver to do the validation
+and set a bit in the reply if it succeeds. Dnsmasq is not a DNSSEC
+validator, so it cannot perform the validation role of the recursive nameserver,
+but it can pass through the validation results from its own upstream
+nameservers. This option enables this behaviour. You should only do
+this if you trust all the configured upstream nameservers 
+.I and the network between you and them.
+If you use the first DNSSEC mode, validating resolvers in clients,
+this option is not required. Dnsmasq always returns all the data
+needed for a client to do validation itself. 
+.TP
 .B \-F, --dhcp-range=[interface:<interface>,][tag:<tag>[,tag:<tag>],][set:<tag],]<start-addr>,<end-addr>[,<netmask>[,<broadcast>]][,<lease time>]
 Enable the DHCP server. Addresses will be given out from the range
 <start-addr> to <end-addr> and from statically defined addresses given
@@ -588,15 +613,17 @@ time and there is no way for dnsmasq to enforce this. It is, for instance,
 useful to allocate a stable IP address to a laptop which
 has both wired and wireless interfaces.
 .TP
-.B --dhcp-hostsfile=<file>
-Read DHCP host information from the specified file. The file contains 
+.B --dhcp-hostsfile=<path>
+Read DHCP host information from the specified file. If a directory
+is given, then read all the files contained in that directory. The file contains 
 information about one host per line. The format of a line is the same
 as text to the right of '=' in --dhcp-host. The advantage of storing DHCP host information
 in this file is that it can be changed without re-starting dnsmasq:
 the file will be re-read when dnsmasq receives SIGHUP.
 .TP
-.B --dhcp-optsfile=<file>
-Read DHCP option information from the specified file. The advantage of 
+.B --dhcp-optsfile=<path>
+Read DHCP option information from the specified file.  If a directory
+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
@@ -946,7 +973,8 @@ all of the following variables added.
 DNSMASQ_CLIENT_ID if the host provided a client-id.
 
 DNSMASQ_DOMAIN if the fully-qualified domain name of the host is
-known, this is set to the  domain part.
+known, this is set to the  domain part. (Note that the hostname passed
+to the script as an argument is never fully-qualified.)
 
 If the client provides vendor-class, hostname or user-class, 
 these are provided in DNSMASQ_VENDOR_CLASS
@@ -1020,7 +1048,7 @@ as if they had arrived at <interface>. This option is necessary when
 using "old style" bridging on BSD platforms, since
 packets arrive at tap interfaces which don't have an IP address.
 .TP
-.B \-s, --domain=<domain>[,<address range>]
+.B \-s, --domain=<domain>[,<address range>[,local]]
 Specifies DNS domains for the DHCP server. Domains may be be given 
 unconditionally (without the IP range) or for limited IP ranges. This has two effects;
 firstly it causes the DHCP server to return the domain to any hosts
@@ -1039,11 +1067,22 @@ and have a machine whose DHCP hostname is "laptop". The IP address for that mach
 .B dnsmasq
 both as "laptop" and "laptop.thekelleys.org.uk". If the domain is
 given as "#" then the domain is read from the first "search" directive
-in /etc/resolv.conf (or equivalent). The address range can be of the form
+in /etc/resolv.conf (or equivalent).
+
+The address range can be of the form
 <ip address>,<ip address> or <ip address>/<netmask> or just a single
 <ip address>. See 
 .B --dhcp-fqdn
 which can change the behaviour of dnsmasq with domains.
+
+If the address range is given as ip-address/network-size, then a
+additional flag "local" may be supplied which has the effect of adding
+--local declarations for forward and reverse DNS queries. Eg.
+.B --domain=thekelleys.org.uk,192.168.0.0/24,local
+is identical to
+.B --domain=thekelleys.org.uk,192.168.0.0/24
+--local=/thekelleys.org.uk/ --local=/0.168.192.in-addr.arpa/
+The network size must be 8, 16 or 24 for this to be legal.
 .TP
 .B --dhcp-fqdn
 In the default mode, dnsmasq inserts the unqualified names of
@@ -1123,7 +1162,8 @@ of concurrent TFTP connections is limited by the size of the port range.
 .TP  
 .B \-C, --conf-file=<file>
 Specify a different configuration file. The conf-file option is also allowed in
-configuration files, to include multiple configuration files.
+configuration files, to include multiple configuration files. A
+filename of "-" causes dnsmasq to read configuration from stdin.
 .TP
 .B \-7, --conf-dir=<directory>[,<file-extension>......]
 Read all the files in the given directory as configuration
@@ -1445,6 +1485,9 @@ assume that it is the system default.
 .IR /usr/local/etc/dnsmasq.conf
 
 .IR /etc/resolv.conf
+.IR /var/run/dnsmasq/resolv.conf
+.IR /etc/ppp/resolv.conf
+.IR /etc/dhcpc/resolv.conf
 
 .IR /etc/hosts
 
index 631f141877f5c9a3240058593d59c8855fd006be..44c301b3f5b759eea9d7a8b31c2024f49bced28e 100644 (file)
@@ -22,7 +22,7 @@ peut Ãªtre configuré pour envoyer n'importe quel option DHCP.
 Il inclut un serveur TFTP sécurisé en lecture seule permettant le démarrage via
 le réseau/PXE de clients DHCP et supporte Ã©galement le protocole BOOTP.
 .PP
-Dnsmasq supporte IPv6 pour le DNS mais pas pour le DHCP.
+Dnsmasq supporte IPv6 pour le DNS et TFTP mais pas pour le DHCP.
 .SH OPTIONS
 Notes : Il est possible d'utiliser des options sans leur donner de paramètre.
 Dans ce cas, la fonction correspondante sera désactivée. Par exemple
@@ -491,7 +491,10 @@ retournés dans la réponse.
 .B \-Y, --txt-record=<nom>[[,<texte>],<texte>]
 Définit un enregistrement DNS de type TXT. La valeur de l'enregistrement TXT est
 un ensemble de chaînes de caractères, donc un nombre variable de chaînes de
-caractères peuvent Ãªtre spécifiées, séparées par des virgules.
+caractères peuvent Ãªtre spécifiées, séparées par des virgules. Utilisez des
+guillemets pour mettre une virgule dans une chaîne de caractères. Notez que la
+longueur maximale pour une chaîne est de 255 caractères, les chaînes plus
+longues Ã©tant découpées en morceaux de 255 caractères de longs.
 .TP
 .B --ptr-record=<nom>[,<cible>]
 Définit un enregistrement DNS de type PTR.
@@ -519,6 +522,16 @@ Plus d'un nom peut Ãªtre associé Ã  une interface donnée en répétant cette o
 plusieurs fois; dans ce cas, l'enregistrement inverse pointe vers le nom fourni
 dans la première instance de cette option.
 .TP
+.B --add-mac
+Ajoute l'adresse MAC du requêteur aux requêtes DNS transmises aux serveurs
+amonts. Cela peut Ãªtre utilisé dans un but de filtrage DNS par les serveurs
+amonts. L'adresse MAC peut uniquement Ãªtre ajoutée si le requêteur est sur le
+même sous-réseau que le serveur dnsmasq. Veuillez noter que le mécanisme
+utilisé pour effectuer cela (une option EDNS0) n'est pas encore standardisée,
+aussi cette fonctionalité doit Ãªtre considérée comme expérimentale. Notez
+également qu'exposer les adresses MAC de la sorte peut avoir des implications
+en termes de sécurité et de vie privée.
+.TP
 .B \-c, --cache-size=<taille>
 Définit la taille du cache de Dnsmasq. La valeur par défaut est de 150 noms.
 Définir une valeur de zéro désactive le cache.
@@ -537,6 +550,21 @@ lorsqu'un serveur web a la résolution de nom activée pour l'enregistrement de
 son journal des requêtes, ce qui peut générer un nombre important de requêtes
 simultanées.
 .TP
+.B --proxy-dnssec
+Un resolveur sur une machine cliente peut effectuer la validation DNSSEC de
+deux façons : il peut effectuer lui-même les opérations de chiffrements sur
+la réponse reçue, ou il peut laisser le serveur récursif amont faire la
+validation et positionner un drapeau dans la réponse au cas où celle-ci est
+correcte. Dnsmasq n'est pas un validateur DNSSEC, aussi il ne peut effectuer
+la validation comme un serveur de nom récursif, cependant il peut retransmettre
+les résultats de validation de ses serveurs amonts. Cette option permet
+l'activation de cette fonctionalité. Vous ne devriez utiliser cela que si vous
+faites confiance aux serveurs amonts
+.I ainsi que le réseau entre vous et eux.
+Si vous utilisez le premier mode DNSSEC, la validation par le resolveur des
+clients, cette option n'est pas requise. Dnsmasq retourne toujours toutes les
+données nécessaires par un client pour effectuer la validation lui-même.
+.TP
 .B \-F, --dhcp-range=[interface:<interface>,][tag:<label>[,tag:<label>],][set:<label],]<adresse de début>,<adresse de fin>[,<masque de réseau>[,<broadcast>]][,<durée de bail>]
 Active le serveur DHCP. Les adresses seront données dans la plage comprise entre
 <adresse de début> et <adresse de fin> et Ã  partir des adresses définies
@@ -674,20 +702,24 @@ donné et dnsmasq n'a aucun moyen de s'assurer de cela. Cela est utile,
 par exemple, pour allouer une adresse IP stable Ã  un laptop qui
 aurait Ã  la fois une connexion filaire et sans-fil.
 .TP
-.B --dhcp-hostsfile=<fichier>
-Lis les informations d'hôtes DHCP dans le fichier spécifié. Le fichier contient
-des informations Ã  raison d'un hôte par ligne. Le format d'une ligne est la même
-que le texte fourni Ã  la droite sur caractère "=" dans l'option
+.B --dhcp-hostsfile=<chemin>
+Lis les informations d'hôtes DHCP dans le fichier spécifié. Si l'argument est
+un chemin vers un répertoire, lis tous les fichiers de ce répertoire. Le
+fichier contient des informations Ã  raison d'un hôte par ligne. Le format
+d'une ligne est la même que le texte fourni Ã  la droite sur caractère "=" dans
+l'option
 .B --dhcp-host.
 L'avantage de stocker les informations sur les hôtes DHCP dans ce fichier est
 que celles-ci peuvent Ãªtre modifiées sans recharger Dnsmasq; le fichier sera
 relu lorsque Dnsmasq reçoit un signal SIGHUP.
 .TP
-.B --dhcp-optsfile=<fichier>
-Lis les informations relatives aux options DHCP dans le fichier spécifié.
-L'intérêt d'utiliser cette option est le même que pour --dhcp-hostsfile : le
-fichier spécifié sera rechargé Ã  la réception par dnsmasq d'un signal SIGHUP.
-Notez qu'il est possible d'encoder l'information via
+.B --dhcp-optsfile=<chemin>
+Lis les informations relatives aux options DHCP dans le fichier spécifié. Si
+l'argument est un chemin vers un répertoire, lis tous les fichiers de ce
+répertoire. L'intérêt d'utiliser cette option est le même que pour
+ --dhcp-hostsfile : le fichier spécifié sera rechargé Ã  la réception par
+dnsmasq d'un signal SIGHUP. Notez qu'il est possible d'encoder l'information
+via
 .B --dhcp-boot
 en utilisant les noms optionnels bootfile-name, server-ip-address et
 tftp-server. Ceci permet d'inclure ces options dans un fichier "dhcp-optsfile".DNSMASQ_SUPPLIED_HOSTNAME
@@ -1074,7 +1106,8 @@ auquel se rajoute quelques unes ou toutes les variables décrites ci-dessous :
 DNSMASQ_CLIENT_ID, si l'hôte a fourni un identifiant de client.
 
 DNSMASQ_DOMAIN si le nom de domaine pleinement qualifié de l'hôte est connu, la
-part relative au domaine y est stockée.
+part relative au domaine y est stockée. (Notez que le nom d'hôte transmis comme
+argument au script n'est jamais pleinement qualifié).
 
 Si le client fournit une information de classe de vendeur, un nom d'hôte, ou
 des classes d'utilisateur, celles-ci sont fournies dans les
@@ -1151,7 +1184,7 @@ nécessaire lors de l'utilisation de pont ethernet "ancien mode" sur plate-forme
 BSD, puisque dans ce cas les paquets arrivent sur des interfaces "tap" n'ont
 pas d'adresse IP.
 .TP
-.B \-s, --domain=<domaine>[,<gamme d'adresses>]
+.B \-s, --domain=<domaine>[,<gamme d'adresses>[,local]]
 Spécifie le domaine du serveur DHCP. Le domaine peut Ãªtre donné de manière
 inconditionnelle (sans spécifier de gamme d'adresses IP) ou pour des gammes
 d'adresses IP limitées. Cela a deux effets; tout d'abord, le
@@ -1173,11 +1206,23 @@ et avoir une machine dont le nom DHCP serait "laptop". L'adresse IP de cette
 machine sera disponible Ã  la fois pour "laptop" et "laptop.thekelleys.org.uk".
 Si la valeur fournie pour <domaine> est "#", alors le nom de domaine est
 positionné Ã  la première valeur de la directive "search" du fichier
-/etc/resolv.conf (ou Ã©quivalent). La gamme d'adresses peut Ãªtre de la forme
+/etc/resolv.conf (ou Ã©quivalent).
+
+La gamme d'adresses peut Ãªtre de la forme
 <adresse ip>,<adresse ip> ou <adresse ip>/<masque de réseau> voire une simple
 <adresse ip>. Voir
 .B --dhcp-fqdn
 qui peut changer le comportement de dnsmasq relatif aux domaines.
+
+Si la gamme d'adresse est fournie sous la forme
+<adresse ip>/<taille de réseau>, alors le drapeau "local" peut-être rajouté
+qui a pour effect d'ajouter --local-declarations aux requêtes DNS directes et
+inverses. C-à-d
+.B --domain=thekelleys.org.uk,192.168.0.0/24,local
+est indentique Ã 
+.B --domain=thekelleys.org.uk,192.168.0.0/24
+--local=/thekelleys.org.uk/ --local=/0.168.192.in-addr.arpa/
+La taille de réseau doit-être de 8, 16 ou 24 pour Ãªtre valide.
 .TP
 .B --dhcp-fqdn
 Dans le mode par défaut, dnsmasq insère les noms non-qualifiés des clients
@@ -1284,7 +1329,9 @@ est limitée par la taille de la plage de ports ainsi définie.
 .B \-C, --conf-file=<fichier>
 Spécifie un fichier de configuration différent. L'option "conf-file" est
 Ã©galement autorisée dans des fichiers de configuration, ce qui permet
-l'inclusion de multiples fichiers de configuration.
+l'inclusion de multiples fichiers de configuration. L'utilisation de "-" comme
+nom de fichier permet la lecture par dnsmasq de sa configuration sur l'entrée standard
+stdin.
 .TP
 .B \-7, --conf-dir=<répertoire>[,<extension de fichier>...]
 Lis tous les fichiers du répertoire spécifié et les traite comme des fichiers de
@@ -1621,6 +1668,9 @@ et assume de ce fait qu'il s'agit de la valeur par défaut du système.
 .IR /etc/dnsmasq.conf 
 
 .IR /usr/local/etc/dnsmasq.conf
+.IR /var/run/dnsmasq/resolv.conf
+.IR /etc/ppp/resolv.conf
+.IR /etc/dhcpc/resolv.conf
 
 .IR /etc/resolv.conf
 
index 43ad8bbeeb634d49bc91564083b1249756cb3f9c..430b4f804bd00c72d8a447b2943bb53d41356816 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -20,61 +20,56 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: cache.c:764
+#: cache.c:761
 #, c-format
 msgid "failed to load names from %s: %s"
 msgstr "Fehler beim Laden der Namen von %s: %s"
 
-#: cache.c:798 dhcp.c:865
+#: cache.c:795 dhcp.c:865
 #, c-format
 msgid "bad address at %s line %d"
 msgstr "Fehlerhafte Adresse in %s Zeile %d"
 
-#: cache.c:856 dhcp.c:881
+#: cache.c:853 dhcp.c:881
 #, c-format
 msgid "bad name at %s line %d"
 msgstr "Fehlerhafter Name in %s Zeile %d"
 
-#: cache.c:863 dhcp.c:956
+#: cache.c:860 dhcp.c:956
 #, c-format
 msgid "read %s - %d addresses"
 msgstr "%s gelesen - %d Adressen"
 
-#: cache.c:902
+#: cache.c:899
 msgid "cleared cache"
 msgstr "Cache geleert"
 
-#: cache.c:933 option.c:1112
-#, c-format
-msgid "cannot access directory %s: %s"
-msgstr "Kann auf Verzeichnis %s nicht zugreifen: %s"
-
-#: cache.c:1053
+#: cache.c:960
 #, 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:1059
+#: cache.c:966
 #, 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:1132
+#: cache.c:1039
 #, c-format
 msgid "time %lu"
 msgstr "Zeit %lu"
 
-#: cache.c:1133
+#: cache.c:1040
 #, 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:1135
+#: cache.c:1042
 #, c-format
 msgid "queries forwarded %u, queries answered locally %u"
 msgstr "%u weitergeleitete Anfragen, %u lokal beantwortete Anfragen"
 
-#: cache.c:1158
+#: cache.c:1068
 #, 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"
@@ -88,7 +83,7 @@ msgstr "Konnte den Zufallszahlengenerator nicht initialisieren: %s"
 msgid "failed to allocate memory"
 msgstr "Konnte Speicher nicht belegen"
 
-#: util.c:229 option.c:567
+#: util.c:229 option.c:573
 msgid "could not get memory"
 msgstr "Speicher nicht verfügbar"
 
@@ -108,450 +103,459 @@ msgstr "Konnte %d Bytes nicht belegen"
 msgid "infinite"
 msgstr "unendlich"
 
-#: option.c:240
+#: option.c:244
 msgid "Specify local address(es) to listen on."
 msgstr "Lokale abzuhörende Adresse(n) angeben."
 
-#: option.c:241
+#: option.c:245
 msgid "Return ipaddr for all hosts in specified domains."
 msgstr "IP-Adresse für alle Hosts in angebenen Domänen festlegen."
 
 # FIXME: the English test is not to the point. Just use a shortened description
 # from the manpage instead. -- MA
-#: option.c:242
+#: option.c:246
 msgid "Fake reverse lookups for RFC1918 private address ranges."
 msgstr "Für private Adressbereiche nach RFC1918 \"keine solche Domain\" liefern."
 
-#: option.c:243
+#: option.c:247
 msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
 msgstr "Diese IP-Adresse als NXDOMAIN interpretieren (wehrt \"Suchhilfen\" ab)."
 
-#: option.c:244
+#: option.c:248
 #, 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:245
+#: option.c:249
 #, c-format
 msgid "Specify configuration file (defaults to %s)."
 msgstr "Konfigurationsdatei festlegen (Voreinstellung: %s)."
 
-#: option.c:246
+#: option.c:250
 msgid "Do NOT fork into the background: run in debug mode."
 msgstr "NICHT in den Hintergrund gehen: Betrieb im Debug-Modus"
 
-#: option.c:247
+#: option.c:251
 msgid "Do NOT forward queries with no domain part."
 msgstr "Anfragen ohne Domänen-Teil NICHT weiterschicken."
 
-#: option.c:248
+#: option.c:252
 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:249
+#: option.c:253
 msgid "Expand simple names in /etc/hosts with domain-suffix."
 msgstr "Erweitere einfache Namen in /etc/hosts mit der Domänen-Endung."
 
-#: option.c:250
+#: option.c:254
 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:251
+#: option.c:255
 msgid "Enable DHCP in the range given with lease duration."
 msgstr "DHCP für angegebenen Bereich und Dauer einschalten"
 
-#: option.c:252
+#: option.c:256
 #, c-format
 msgid "Change to this group after startup (defaults to %s)."
 msgstr "Nach dem Start in diese Benutzergruppe wechseln (Voreinstellung %s)."
 
-#: option.c:253
+#: option.c:257
 msgid "Set address or hostname for a specified machine."
 msgstr "Adresse oder Hostnamen für einen angegebenen Computer setzen."
 
-#: option.c:254
+#: option.c:258
 #, fuzzy
 msgid "Read DHCP host specs from file."
 msgstr "DHCP-Host-Angaben aus Datei lesen"
 
-#: option.c:255
+#: option.c:259
 #, fuzzy
 msgid "Read DHCP option specs from file."
 msgstr "DHCP-Optionen aus Datei lesen"
 
-#: option.c:256
+#: option.c:260
 #, fuzzy
 msgid "Evaluate conditional tag expression."
 msgstr "Auswertung eines Ausdrucks bedingter Marken"
 
-#: option.c:257
+#: option.c:261
 #, c-format
 msgid "Do NOT load %s file."
 msgstr "%s-Datei NICHT laden."
 
-#: option.c:258
+#: option.c:262
 #, 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:259
+#: option.c:263
 msgid "Specify interface(s) to listen on."
 msgstr "Schnittstelle(n) zum Empfang festlegen."
 
-#: option.c:260
+#: option.c:264
 msgid "Specify interface(s) NOT to listen on."
 msgstr "Schnittstelle(n) festlegen, die NICHT empfangen sollen."
 
-#: option.c:261
+#: option.c:265
 msgid "Map DHCP user class to tag."
 msgstr "DHCP-Benutzerklasse auf Marke abbilden."
 
-#: option.c:262
+#: option.c:266
 msgid "Map RFC3046 circuit-id to tag."
 msgstr "RFC3046 \"circuit-id\" auf Marke abbilden."
 
-#: option.c:263
+#: option.c:267
 msgid "Map RFC3046 remote-id to tag."
 msgstr "RFC3046 \"remote-id\" auf Marke abbilden."
 
-#: option.c:264
+#: option.c:268
 msgid "Map RFC3993 subscriber-id to tag."
 msgstr "RFC3993 \"subscriber-id\" auf Marke abbilden."
 
-#: option.c:265
+#: option.c:269
 msgid "Don't do DHCP for hosts with tag set."
 msgstr "Kein DHCP für Hosts mit gesetzter Marke verwenden."
 
-#: option.c:266
+#: option.c:270
 msgid "Force broadcast replies for hosts with tag set."
 msgstr "Rundsendung für Hosts mit gesetzter Marke erzwingen."
 
-#: option.c:267
+#: option.c:271
 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:268
+#: option.c:272
 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:269
+#: option.c:273
 #, c-format
 msgid "Specify where to store DHCP leases (defaults to %s)."
 msgstr "Festlegen, wo DHCP-Leases gespeichert werden (Voreinstellung %s)."
 
-#: option.c:270
+#: option.c:274
 msgid "Return MX records for local hosts."
 msgstr "MX-Einträge für lokale Hosts liefern."
 
-#: option.c:271
+#: option.c:275
 msgid "Specify an MX record."
 msgstr "Einen MX-Eintrag festlegen."
 
-#: option.c:272
+#: option.c:276
 msgid "Specify BOOTP options to DHCP server."
 msgstr "BOOTP-Optionen für DHCP-Server festlegen."
 
-#: option.c:273
+#: option.c:277
 #, c-format
 msgid "Do NOT poll %s file, reload only on SIGHUP."
 msgstr "%s-Datei NICHT abfragen, nur bei SIGHUP neu laden."
 
-#: option.c:274
+#: option.c:278
 msgid "Do NOT cache failed search results."
 msgstr "Fehlerhafte Suchergebnisse NICHT zwischenspeichern."
 
-#: option.c:275
+#: option.c:279
 #, c-format
 msgid "Use nameservers strictly in the order given in %s."
 msgstr "Namensserver streng in der in %s angegebenen Reihenfolge verwenden."
 
-#: option.c:276
+#: option.c:280
 msgid "Specify options to be sent to DHCP clients."
 msgstr "Optionen festlegen, die an DHCP-Klienten gesendet werden."
 
-#: option.c:277
+#: option.c:281
 msgid "DHCP option sent even if the client does not request it."
 msgstr "DHCP-Option, die selbst ohne Klientenanfrage gesendet wird."
 
-#: option.c:278
+#: option.c:282
 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:279
+#: option.c:283
 #, 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:280
+#: option.c:284
 msgid "Log DNS queries."
 msgstr "DNS-Anfragen protokollieren."
 
-#: option.c:281
+#: option.c:285
 msgid "Force the originating port for upstream DNS queries."
 msgstr "Ausgehenden Port erzwingen für DNS-Anfragen an vorgelagerte Server."
 
-#: option.c:282
+#: option.c:286
 msgid "Do NOT read resolv.conf."
 msgstr "resolv.conf NICHT lesen."
 
-#: option.c:283
+#: option.c:287
 #, c-format
 msgid "Specify path to resolv.conf (defaults to %s)."
 msgstr "Pfad zu resolv.conf festlegen (%s voreingestellt)."
 
-#: option.c:284
+#: option.c:288
 msgid "Specify address(es) of upstream servers with optional domains."
 msgstr "Adresse(n) vorgelagerter Server festlegen, optional mit Domänen."
 
-#: option.c:285
+#: option.c:289
 msgid "Never forward queries to specified domains."
 msgstr "Anfragen für angegebene Domänen niemals weiterleiten."
 
-#: option.c:286
+#: option.c:290
 msgid "Specify the domain to be assigned in DHCP leases."
 msgstr "Domäne festlegen, die für DHCP-Leases zugewiesen wird."
 
-#: option.c:287
+#: option.c:291
 msgid "Specify default target in an MX record."
 msgstr "Voreingestelltes Ziel für MX-Einträge festlegen."
 
-#: option.c:288
+#: option.c:292
 msgid "Specify time-to-live in seconds for replies from /etc/hosts."
 msgstr "Gültigkeitsdauer für Antworten aus /etc/hosts festlegen."
 
-#: option.c:289
+#: option.c:293
 msgid "Specify time-to-live in seconds for negative caching."
 msgstr "Gültigkeitsdauer in Sekunden für Caching negativer Ergebnisse festlegen."
 
-#: option.c:290
+#: option.c:294
 #, fuzzy
 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:291
+#: option.c:295
 #, c-format
 msgid "Change to this user after startup. (defaults to %s)."
 msgstr "Nach dem Start diese Benutzerrechte annehmen (%s voreingestellt)."
 
-#: option.c:292
+#: option.c:296
 msgid "Map DHCP vendor class to tag."
 msgstr "DHCP-\"vendor class\" auf Marke abbilden."
 
-#: option.c:293
+#: option.c:297
 msgid "Display dnsmasq version and copyright information."
 msgstr "dnsmasq-Version und Urheberrecht anzeigen."
 
-#: option.c:294
+#: option.c:298
 msgid "Translate IPv4 addresses from upstream servers."
 msgstr "IPv4-Adressen von vorgelagerten Servern Ã¼bersetzen."
 
-#: option.c:295
+#: option.c:299
 msgid "Specify a SRV record."
 msgstr "SRV-Eintrag festlegen."
 
-#: option.c:296
+#: option.c:300
 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:297
+#: option.c:301
 #, c-format
 msgid "Specify path of PID file (defaults to %s)."
 msgstr "Dateipfad für Prozesskennung (PID) festlegen (Voreinstellung: %s)."
 
-#: option.c:298
+#: option.c:302
 #, c-format
 msgid "Specify maximum number of DHCP leases (defaults to %s)."
 msgstr "Höchstzahl der DHCP-Leases festlegen (%s voreingestellt)."
 
-#: option.c:299
+#: option.c:303
 msgid "Answer DNS queries based on the interface a query was sent to."
 msgstr "DNS-Anfragen abhängig der Emfpangsschnittstelle beantworten."
 
-#: option.c:300
+#: option.c:304
 msgid "Specify TXT DNS record."
 msgstr "DNS-TXT-Eintrag festlegen."
 
-#: option.c:301
+#: option.c:305
 msgid "Specify PTR DNS record."
 msgstr "DNS-PTR-Eintrag festlegen."
 
-#: option.c:302
+#: option.c:306
 msgid "Give DNS name to IPv4 address of interface."
 msgstr "Schnittstellennamen zur IPv4-Adresse des Interfaces auflösen."
 
-#: option.c:303
+#: option.c:307
 msgid "Bind only to interfaces in use."
 msgstr "Nur an verwendete Schnittstellen binden."
 
-#: option.c:304
+#: option.c:308
 #, c-format
 msgid "Read DHCP static host information from %s."
 msgstr "Statische DHCP-Host-Information aus %s lesen."
 
-#: option.c:305
+#: option.c:309
 msgid "Enable the DBus interface for setting upstream servers, etc."
 msgstr "DBus-Schnittstelle zum Festlegen vorgelagerter Server usw. festlegen."
 
-#: option.c:306
+#: option.c:310
 msgid "Do not provide DHCP on this interface, only provide DNS."
 msgstr "Auf dieser Schnittstelle kein DHCP anbieten, sondern nur DNS."
 
-#: option.c:307
+#: option.c:311
 msgid "Enable dynamic address allocation for bootp."
 msgstr "Dynamische Adressbelegung für bootp einschalten."
 
-#: option.c:308
+#: option.c:312
 msgid "Map MAC address (with wildcards) to option set."
 msgstr "MAC-Adresse (mit Jokerzeichen) auf Netzmarke abbilden."
 
-#: option.c:309
+#: option.c:313
 msgid "Treat DHCP requests on aliases as arriving from interface."
 msgstr "DHCP-Anfragen von Alias-Schnittstellen für die Hauptschnittstelle beantworten."
 
-#: option.c:310
+#: option.c:314
 msgid "Disable ICMP echo address checking in the DHCP server."
 msgstr "ICMP-Echo-Adressprüfung im DHCP-Server abschalten."
 
-#: option.c:311
+#: option.c:315
 msgid "Script to run on DHCP lease creation and destruction."
 msgstr "Skript, das bei Erzeugung/Löschung einer DHCP-Lease laufen soll."
 
-#: option.c:312
+#: option.c:316
 msgid "Read configuration from all the files in this directory."
 msgstr "Konfiguration aus allen Dateien in diesem Verzeichnis lesen."
 
-#: option.c:313
+#: option.c:317
 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:314
+#: option.c:318
 msgid "Do not use leasefile."
 msgstr "Keine Lease-Datei benützen."
 
-#: option.c:315
+#: option.c:319
 #, c-format
 msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
 msgstr "Höchstzahl nebenläufiger DNS-Anfragen (%s voreingestellt)."
 
-#: option.c:316
+#: option.c:320
 #, c-format
 msgid "Clear DNS cache when reloading %s."
 msgstr "DNS-Cache beim Neuladen von %s löschen."
 
-#: option.c:317
+#: option.c:321
 msgid "Ignore hostnames provided by DHCP clients."
 msgstr "Von DHCP-Clients gelieferte Hostnamen ignorieren."
 
-#: option.c:318
+#: option.c:322
 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:319
+#: option.c:323
 msgid "Enable integrated read-only TFTP server."
 msgstr "Eingebauten Nur-Lese-TFTP-Server einschalten."
 
-#: option.c:320
+#: option.c:324
 msgid "Export files by TFTP only from the specified subtree."
 msgstr "Nur vom festgelegten Unterbaum Dateien per TFTP exportieren."
 
-#: option.c:321
+#: option.c:325
 msgid "Add client IP address to tftp-root."
 msgstr "IP-Adresse des Klienten an tftp-root anhängen."
 
-#: option.c:322
+#: option.c:326
 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:323
+#: option.c:327
 #, c-format
 msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
 msgstr "Höchstzahl nebenläufiger TFTP-Ãœbertragungen (%s voreingestellt)."
 
-#: option.c:324
+#: option.c:328
 msgid "Disable the TFTP blocksize extension."
 msgstr "TFTP-Blockgrößen-Erweiterung abschalten."
 
-#: option.c:325
+#: option.c:329
 msgid "Ephemeral port range for use by TFTP transfers."
 msgstr "Bereich für vorübergehende Ports für TFTP-Ãœbertragungen."
 
-#: option.c:326
+#: option.c:330
 msgid "Extra logging for DHCP."
 msgstr "Erweiterte DHCP-Protokollierung."
 
-#: option.c:327
+#: option.c:331
 msgid "Enable async. logging; optionally set queue length."
 msgstr "Asynchrone Protokollierung einschalten, opt. Warteschlangenlänge festlegen."
 
-#: option.c:328
+#: option.c:332
 msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
 msgstr "DNS-Rebinding unterbinden, private IP-Bereiche bei der Auflösung ausfiltern."
 
-#: option.c:329
+#: option.c:333
 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:330
+#: option.c:334
 #, fuzzy
 msgid "Inhibit DNS-rebind protection on this domain."
 msgstr "DNS-Rebind-Schutz für diese Domäne sperren."
 
-#: option.c:331
+#: option.c:335
 msgid "Always perform DNS queries to all servers."
 msgstr "DNS-Anfragen immer an alle Server weiterleiten."
 
-#: option.c:332
+#: option.c:336
 msgid "Set tag if client includes matching option in request."
 msgstr "Marke setzen, wenn Klient eine entsprechende Option anfragt."
 
-#: option.c:333
+#: option.c:337
 msgid "Use alternative ports for DHCP."
 msgstr "Alternative Ports für DHCP verwenden."
 
-#: option.c:334
+#: option.c:338
 msgid "Run lease-change script as this user."
 msgstr "Lease-Änderungs-Skript mit den Rechten dieses Nutzers ausführen."
 
-#: option.c:335
+#: option.c:339
 msgid "Specify NAPTR DNS record."
 msgstr "DNS-NAPTR-Eintrag festlegen."
 
-#: option.c:336
+#: option.c:340
 msgid "Specify lowest port available for DNS query transmission."
 msgstr "Niedrigsten verfügbaren Port für Ãœbertragung von DNS-Anfragen festlegen."
 
-#: option.c:337
+#: option.c:341
 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:338
+#: option.c:342
 #, fuzzy
 msgid "Generate hostnames based on MAC address for nameless clients."
 msgstr "Für namenlose Klienten die Hostnamen MAC-basiert erzeugen."
 
-#: option.c:339
+#: option.c:343
 msgid "Use these DHCP relays as full proxies."
 msgstr "Diese DHCP-Relais als vollwertige Proxies verwenden."
 
-#: option.c:340
+#: option.c:344
 msgid "Specify alias name for LOCAL DNS name."
 msgstr "Alias für LOKALEN DNS-Namen festlegen."
 
-#: option.c:341
+#: option.c:345
 msgid "Prompt to send to PXE clients."
 msgstr "Aufforderung, die an PXE-Klienten geschickt wird."
 
-#: option.c:342
+#: option.c:346
 msgid "Boot service for PXE menu."
 msgstr "Boot-Dienst für PXE-Menü."
 
-#: option.c:343
+#: option.c:347
 msgid "Check configuration syntax."
 msgstr "Konfigurationssyntax prüfen."
 
-#: option.c:632
+#: option.c:348
+msgid "Add requestor's MAC address to forwarded DNS queries"
+msgstr ""
+
+#: option.c:349
+#, fuzzy
+msgid "Proxy DNSSEC validation results from upstream nameservers"
+msgstr "IPv4-Adressen von vorgelagerten Servern Ã¼bersetzen."
+
+#: option.c:638
 #, c-format
 msgid ""
 "Usage: dnsmasq [options]\n"
@@ -560,224 +564,220 @@ msgstr ""
 "Verwendung: dnsmasq [Optionen]\n"
 "\n"
 
-#: option.c:634
+#: option.c:640
 #, c-format
 msgid "Use short options only on the command line.\n"
 msgstr "Auf der Befehlszeile nur kurze Optionen verwenden!\n"
 
-#: option.c:636
+#: option.c:642
 #, c-format
 msgid "Valid options are:\n"
 msgstr "Gültige Optionen sind:\n"
 
-#: option.c:677
+#: option.c:683
 #, c-format
 msgid "Known DHCP options:\n"
 msgstr "Bekannte DHCP-Optionen:\n"
 
-#: option.c:781
+#: option.c:798
 msgid "bad dhcp-option"
 msgstr "Fehlerhafte DHCP-Option"
 
-#: option.c:838
+#: option.c:860
 msgid "bad IP address"
 msgstr "Fehlerhafte IP-Adresse"
 
-#: option.c:941
+#: option.c:966
 msgid "bad domain in dhcp-option"
 msgstr "Fehlerhafte Domäne in DHCP-Option"
 
-#: option.c:1007
+#: option.c:1032
 msgid "dhcp-option too long"
 msgstr "DHCP-Option zu lang"
 
-#: option.c:1016
+#: option.c:1041
 msgid "illegal dhcp-match"
 msgstr "Unzulässige dhcp-match-Option"
 
-#: option.c:1052
+#: option.c:1085
 msgid "illegal repeated flag"
 msgstr "unzulässig wiederholte Markierung"
 
-#: option.c:1060
+#: option.c:1093
 msgid "illegal repeated keyword"
 msgstr "unzulässig wiederholtes Schlüsselwort"
 
-#: option.c:1143 tftp.c:413
+#: option.c:1145 option.c:3024
+#, c-format
+msgid "cannot access directory %s: %s"
+msgstr "Kann auf Verzeichnis %s nicht zugreifen: %s"
+
+#: option.c:1176 tftp.c:460
 #, c-format
 msgid "cannot access %s: %s"
 msgstr "Kann auf %s nicht zugreifen: %s"
 
-#: option.c:1188
-msgid "only one dhcp-hostsfile allowed"
-msgstr "nur eine DHCP-Hostdatei (dhcp-hostsfile) zulässig"
-
-#: option.c:1195
-msgid "only one dhcp-optsfile allowed"
-msgstr "nur eine DHCP-Optionsdatei (dhcp-optsfile) zulässig"
-
-#: option.c:1240
+#: option.c:1259
 msgid "bad MX preference"
 msgstr "unzulässige MX-Präferenz-Angabe"
 
-#: option.c:1245
+#: option.c:1264
 msgid "bad MX name"
 msgstr "unzulässiger MX-Name"
 
-#: option.c:1259
+#: option.c:1278
 msgid "bad MX target"
 msgstr "unzulässiges MX-Ziel"
 
-#: option.c:1269
+#: option.c:1288
 msgid "cannot run scripts under uClinux"
 msgstr "unter uClinux ist die Skriptausführung nicht möglich"
 
-#: option.c:1271
+#: option.c:1290
 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:1516 option.c:1520
+#: option.c:1591 option.c:1595
 msgid "bad port"
 msgstr "unzulässiger Port"
 
-#: option.c:1539 option.c:1564
+#: option.c:1614 option.c:1639
 msgid "interface binding not supported"
 msgstr "Schnittstellenbindung nicht unterstützt"
 
-#: option.c:1710
+#: option.c:1785
 msgid "bad port range"
 msgstr "unzulässiger Portbereich"
 
-#: option.c:1727
+#: option.c:1802
 msgid "bad bridge-interface"
 msgstr "unzulässige Brücken-Schnittstelle"
 
-#: option.c:1769
+#: option.c:1844
 msgid "bad dhcp-range"
 msgstr "unzulässiger DHCP-Bereich"
 
-#: option.c:1797
+#: option.c:1872
 msgid "only one tag allowed"
 msgstr "nur eine Marke zulässig"
 
-#: option.c:1844
+#: option.c:1919
 msgid "inconsistent DHCP range"
 msgstr "inkonsistenter DHCP-Bereich"
 
-#: option.c:2019
+#: option.c:2013 option.c:2039
+msgid "bad hex constant"
+msgstr ""
+
+#: option.c:2101
 msgid "bad DHCP host name"
 msgstr "unzulässiger DHCP-Hostname"
 
-#: option.c:2100
+#: option.c:2182
 msgid "bad tag-if"
 msgstr "unzulässige bedingte Marke (tag-if)"
 
-#: option.c:2374 option.c:2673
+#: option.c:2461 option.c:2746
 msgid "invalid port number"
 msgstr "unzulässige Portnummer"
 
-#: option.c:2436
+#: option.c:2523
 msgid "bad dhcp-proxy address"
 msgstr "Fehlerhafte DHCP-Proxy-Adresse"
 
-#: option.c:2476
+#: option.c:2563
 msgid "invalid alias range"
 msgstr "unzulässiger Alias-Bereich"
 
-#: option.c:2489
+#: option.c:2576
 msgid "bad interface name"
 msgstr "unzulässiger Schnittestellenname"
 
-#: option.c:2514
+#: option.c:2601
 msgid "bad CNAME"
 msgstr "unzulässiger CNAME"
 
-#: option.c:2519
+#: option.c:2606
 msgid "duplicate CNAME"
 msgstr "doppelter CNAME"
 
-#: option.c:2539
+#: option.c:2626
 msgid "bad PTR record"
 msgstr "unzulässiger PTR-Eintrag"
 
-#: option.c:2570
+#: option.c:2657
 msgid "bad NAPTR record"
 msgstr "unzulässiger NAPTR-Eintrag"
 
-#: option.c:2595
-msgid "TXT record string too long"
-msgstr "TXT-Eintrag zu lang"
-
-#: option.c:2643
+#: option.c:2689
 msgid "bad TXT record"
 msgstr "unzulässiger TXT-Eintrag"
 
-#: option.c:2659
+#: option.c:2732
 msgid "bad SRV record"
 msgstr "unzulässiger SRV-Eintrag"
 
-#: option.c:2666
+#: option.c:2739
 msgid "bad SRV target"
 msgstr "unzulässiges SRV-Ziel"
 
-#: option.c:2680
+#: option.c:2753
 msgid "invalid priority"
 msgstr "unzulässige Priorität"
 
-#: option.c:2687
+#: option.c:2760
 msgid "invalid weight"
 msgstr "unzulässige Wichtung"
 
-#: option.c:2706
+#: option.c:2779
 msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DBus support)"
 msgstr "unzulässige Option (prüfen Sie, ob dnsmasq mit DHCP/TFTP/DBus-Unterstützt Ã¼bersetzt wurde)"
 
-#: option.c:2748
-#, c-format
-msgid "files nested too deep in %s"
-msgstr "Dateien in %s zu tief verschachtelt"
-
-#: option.c:2756 tftp.c:567
-#, c-format
-msgid "cannot read %s: %s"
-msgstr "kann %s nicht lesen: %s"
-
-#: option.c:2813
+#: option.c:2843
 msgid "missing \""
 msgstr "fehlende \\\""
 
-#: option.c:2872
+#: option.c:2902
 msgid "bad option"
 msgstr "unzulässige Option"
 
-#: option.c:2874
+#: option.c:2904
 msgid "extraneous parameter"
 msgstr "überschüssiger Parameter"
 
-#: option.c:2876
+#: option.c:2906
 msgid "missing parameter"
 msgstr "fehler Parameter"
 
-#: option.c:2880
+#: option.c:2910
 msgid "error"
 msgstr "Fehler"
 
-#: option.c:2885
+#: option.c:2915
 #, c-format
 msgid "%s at line %d of %%s"
 msgstr "%s in Zeile %d von %%s"
 
-#: option.c:2942 option.c:2973
+#: option.c:2979 tftp.c:624
+#, c-format
+msgid "cannot read %s: %s"
+msgstr "kann %s nicht lesen: %s"
+
+#: option.c:3145 option.c:3181
 #, c-format
 msgid "read %s"
 msgstr "%s gelesen"
 
-#: option.c:3045
+#: option.c:3229
+msgid "junk found in command line"
+msgstr ""
+
+#: option.c:3258
 #, c-format
 msgid "Dnsmasq version %s  %s\n"
 msgstr "Dnsmasq Version %s  %s\n"
 
-#: option.c:3046
+#: option.c:3259
 #, c-format
 msgid ""
 "Compile time options %s\n"
@@ -786,159 +786,140 @@ msgstr ""
 "Ãœbersetzungs-Optionen %s\n"
 "\n"
 
-#: option.c:3047
+#: option.c:3260
 #, 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:3048
+#: option.c:3261
 #, c-format
 msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
 msgstr ""
 
-#: option.c:3049
+#: option.c:3262
 #, c-format
 msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
 msgstr ""
 
-#: option.c:3060
+#: option.c:3273
 msgid "try --help"
 msgstr "versuchen Sie --help"
 
-#: option.c:3062
+#: option.c:3275
 msgid "try -w"
 msgstr "versuchen Sie -w"
 
-#: option.c:3065
+#: option.c:3278
 #, c-format
 msgid "bad command line options: %s"
 msgstr "unzulässige Optionen auf der Befehlszeile: %s"
 
-#: option.c:3106
+#: option.c:3319
 #, c-format
 msgid "cannot get host-name: %s"
 msgstr "kann Hostnamen nicht ermitteln: %s"
 
-#: option.c:3134
+#: option.c:3347
 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:3144
+#: option.c:3357
 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:3147 network.c:813 dhcp.c:814
+#: option.c:3360 network.c:848 dhcp.c:814
 #, c-format
 msgid "failed to read %s: %s"
 msgstr "konnte %s nicht lesen: %s"
 
-#: option.c:3164
+#: option.c:3377
 #, c-format
 msgid "no search directive found in %s"
 msgstr "keine \"search\"-Anweisung in %s gefunden"
 
-#: option.c:3185
+#: option.c:3398
+#, fuzzy
 msgid "there must be a default domain when --dhcp-fqdn is set"
 msgstr "für --dhcp-fqdn muss eine Domäne vorausgewählt werden"
 
-#: option.c:3189
+#: option.c:3402
 msgid "syntax check OK"
 msgstr "Syntaxprüfung OK"
 
-#: forward.c:427
+#: forward.c:461
 #, c-format
 msgid "nameserver %s refused to do a recursive query"
 msgstr "Namensserver %s hat eine rekursive Anfrage verweigert"
 
-#: forward.c:455
+#: forward.c:489
 #, c-format
 msgid "possible DNS-rebind attack detected: %s"
 msgstr "möglichen DNS-Rebind-Angriff entdeckt: %s"
 
-#: network.c:110
+#: network.c:171
 #, c-format
 msgid "unknown interface %s in bridge-interface"
 msgstr "unbekannte Schnittstelle %s in bridge-interface"
 
-#: network.c:467 dnsmasq.c:188
-#, c-format
-msgid "failed to create listening socket: %s"
+#: network.c:380
+#, fuzzy, c-format
+msgid "failed to create listening socket for %s: %s"
 msgstr "Konnte Empfangs-Socket nicht erzeugen: %s"
 
-#: network.c:474
-#, c-format
-msgid "failed to set IPV6 options on listening socket: %s"
-msgstr "konnte IPV6-Optionen auf Empfangs-Socket nicht einstellen: %s"
-
-#: network.c:500
-#, c-format
-msgid "failed to bind listening socket for %s: %s"
-msgstr "konnte Empfangs-Socket nicht an %s binden: %s"
-
-#: network.c:505
-#, c-format
-msgid "failed to listen on socket: %s"
-msgstr "konnte Socket nicht zum Empfang einrichten: %s"
-
-#: network.c:517
-#, c-format
-msgid "failed to create TFTP socket: %s"
-msgstr "konnte TFTP-Socket nicht erzeugen: %s"
-
-#: network.c:711
+#: network.c:746
 #, c-format
 msgid "failed to bind server socket for %s: %s"
 msgstr "konnte nicht an Server-Socket für %s binden: %s"
 
-#: network.c:748
+#: network.c:783
 #, c-format
 msgid "ignoring nameserver %s - local interface"
 msgstr "ignoriere Namensserver %s - lokale Schnittstelle"
 
-#: network.c:759
+#: network.c:794
 #, c-format
 msgid "ignoring nameserver %s - cannot make/bind socket: %s"
 msgstr "ignoriere Namensserver %s - kann Socket nicht erzeugen/binden: %s"
 
 # FIXME: this isn't translatable - always provide full strings, do not assemble yourself! -- MA
-#: network.c:776
+#: network.c:811
 msgid "unqualified"
 msgstr ""
 
-#: network.c:776
+#: network.c:811
 msgid "names"
 msgstr ""
 
-#: network.c:778
+#: network.c:813
 msgid "default"
 msgstr ""
 
-#: network.c:780
+#: network.c:815
 msgid "domain"
 msgstr ""
 
-#: network.c:783
+#: network.c:818
 #, c-format
 msgid "using local addresses only for %s %s"
 msgstr ""
 
-#: network.c:785
+#: network.c:820
 #, c-format
 msgid "using standard nameservers for %s %s"
 msgstr ""
 
-#: network.c:787
+#: network.c:822
 #, c-format
 msgid "using nameserver %s#%d for %s %s"
 msgstr ""
 
-#: network.c:790
+#: network.c:825
 #, c-format
 msgid "using nameserver %s#%d(via %s)"
 msgstr ""
 
-#: network.c:792
+#: network.c:827
 #, c-format
 msgid "using nameserver %s#%d"
 msgstr ""
@@ -966,182 +947,182 @@ msgstr "unbekannte Schnittstelle %s"
 msgid "no interface with address %s"
 msgstr "keine Schnittstelle mit Adresse %s"
 
-#: dnsmasq.c:200 dnsmasq.c:671
+#: dnsmasq.c:199 dnsmasq.c:670
 #, c-format
 msgid "DBus error: %s"
 msgstr "DBus-Fehler: %s"
 
-#: dnsmasq.c:203
+#: dnsmasq.c:202
 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:229
+#: dnsmasq.c:228
 #, c-format
 msgid "unknown user or group: %s"
 msgstr "Unbekannter Benutzer oder Gruppe: %s"
 
-#: dnsmasq.c:284
+#: dnsmasq.c:283
 #, 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:448
+#: dnsmasq.c:447
 #, c-format
 msgid "started, version %s DNS disabled"
 msgstr "gestartet, Version %s, DNS abgeschaltet"
 
-#: dnsmasq.c:450
+#: dnsmasq.c:449
 #, c-format
 msgid "started, version %s cachesize %d"
 msgstr "gestartet, Version %s, Cachegröße %d"
 
-#: dnsmasq.c:452
+#: dnsmasq.c:451
 #, c-format
 msgid "started, version %s cache disabled"
 msgstr ""
 
-#: dnsmasq.c:454
+#: dnsmasq.c:453
 #, c-format
 msgid "compile time options: %s"
 msgstr "Ãœbersetzungsoptionen: %s"
 
-#: dnsmasq.c:460
+#: dnsmasq.c:459
 msgid "DBus support enabled: connected to system bus"
 msgstr "DBus-Unterstützung eingeschaltet: mit Systembus verbunden"
 
-#: dnsmasq.c:462
+#: dnsmasq.c:461
 msgid "DBus support enabled: bus connection pending"
 msgstr "DBus-Unterstützung eingeschaltet: warte auf Systembus-Verbindung"
 
-#: dnsmasq.c:467
+#: dnsmasq.c:466
 #, c-format
 msgid "warning: failed to change owner of %s: %s"
 msgstr "Warnung: konnte den Besitzer von %s nicht Ã¤ndern: %s"
 
-#: dnsmasq.c:471
+#: dnsmasq.c:470
 msgid "setting --bind-interfaces option because of OS limitations"
 msgstr "Aktiviere --bind-interfaces wegen Einschränkungen des Betriebssystems"
 
-#: dnsmasq.c:476
+#: dnsmasq.c:475
 #, c-format
 msgid "warning: interface %s does not currently exist"
 msgstr "Warnung: Schnittstelle %s existiert derzeit nicht"
 
-#: dnsmasq.c:481
+#: dnsmasq.c:480
 msgid "warning: ignoring resolv-file flag because no-resolv is set"
 msgstr "Warnung: Ignoriere \"resolv-file\", weil \"no-resolv\" aktiv ist"
 
-#: dnsmasq.c:484
+#: dnsmasq.c:483
 msgid "warning: no upstream servers configured"
 msgstr "Warnung: keine vorgelagerten (Upstream) Server konfiguriert"
 
-#: dnsmasq.c:488
+#: dnsmasq.c:487
 #, c-format
 msgid "asynchronous logging enabled, queue limit is %d messages"
 msgstr "asynchrone Protokollierung eingeschaltet, Warteschlange fasst %d Nachrichten"
 
-#: dnsmasq.c:501
+#: dnsmasq.c:500
 #, c-format
 msgid "DHCP, static leases only on %.0s%s, lease time %s"
 msgstr "DHCP, nur statische Leases auf %.0s%s, Lease-Zeit %s"
 
-#: dnsmasq.c:503
+#: dnsmasq.c:502
 #, c-format
 msgid "DHCP, proxy on subnet %.0s%s%.0s"
 msgstr "DHCP, Proxy im Subnetz %.0s%s%.0s"
 
-#: dnsmasq.c:504
+#: dnsmasq.c:503
 #, c-format
 msgid "DHCP, IP range %s -- %s, lease time %s"
 msgstr "DHCP, IP-Bereich %s - %s, Lease-Zeit %s "
 
-#: dnsmasq.c:519
+#: dnsmasq.c:518
 msgid "root is "
 msgstr "FIXME: this and the next few must be full strings to be translatable - do not assemble in code"
 
-#: dnsmasq.c:519
+#: dnsmasq.c:518
 msgid "enabled"
 msgstr ""
 
-#: dnsmasq.c:521
+#: dnsmasq.c:520
 msgid "secure mode"
 msgstr ""
 
-#: dnsmasq.c:547
+#: dnsmasq.c:546
 #, c-format
 msgid "restricting maximum simultaneous TFTP transfers to %d"
 msgstr "Begrenze gleichzeitige TFTP-Ãœbertragungen auf maximal %d"
 
-#: dnsmasq.c:673
+#: dnsmasq.c:672
 msgid "connected to system DBus"
 msgstr "Mit System-DBus verbunden"
 
-#: dnsmasq.c:768
+#: dnsmasq.c:767
 #, c-format
 msgid "cannot fork into background: %s"
 msgstr "kann nicht in den Hintergrund abspalten: %s"
 
-#: dnsmasq.c:771
+#: dnsmasq.c:770
 #, c-format
 msgid "failed to create helper: %s"
 msgstr "kann Helfer nicht erzeugen: %s"
 
-#: dnsmasq.c:774
+#: dnsmasq.c:773
 #, c-format
 msgid "setting capabilities failed: %s"
 msgstr "kann \"capabilities\" nicht setzen: %s"
 
-#: dnsmasq.c:778
+#: dnsmasq.c:777
 #, c-format
 msgid "failed to change user-id to %s: %s"
 msgstr "Kann nicht Benutzerrechte %s annehmen: %s"
 
-#: dnsmasq.c:783
+#: dnsmasq.c:782
 #, c-format
 msgid "failed to change group-id to %s: %s"
 msgstr "Kann nicht Gruppenrechte %s annehmen: %s"
 
-#: dnsmasq.c:786
+#: dnsmasq.c:785
 #, c-format
 msgid "failed to open pidfile %s: %s"
 msgstr "kann die Prozessidentifikations-(PID)-Datei %s nicht Ã¶ffnen: %s"
 
-#: dnsmasq.c:789
+#: dnsmasq.c:788
 #, c-format
 msgid "cannot open %s: %s"
 msgstr "kann %s nicht Ã¶ffnen: %s"
 
-#: dnsmasq.c:844
+#: dnsmasq.c:843
 #, c-format
 msgid "child process killed by signal %d"
 msgstr "Tochterprozess durch Signal %d zerstört"
 
-#: dnsmasq.c:848
+#: dnsmasq.c:847
 #, c-format
 msgid "child process exited with status %d"
 msgstr "Tochterprozess beendete sich mit Status %d"
 
-#: dnsmasq.c:852
+#: dnsmasq.c:851
 #, c-format
 msgid "failed to execute %s: %s"
 msgstr "konnte %s nicht ausführen: %s"
 
-#: dnsmasq.c:896
+#: dnsmasq.c:895
 msgid "exiting on receipt of SIGTERM"
 msgstr "beende nach Empfang von SIGTERM"
 
-#: dnsmasq.c:924
+#: dnsmasq.c:923
 #, c-format
 msgid "failed to access %s: %s"
 msgstr "konnte auf %s nicht zugreifen: %s"
 
-#: dnsmasq.c:954
+#: dnsmasq.c:953
 #, c-format
 msgid "reading %s"
 msgstr "lese %s"
 
-#: dnsmasq.c:965
+#: dnsmasq.c:964
 #, c-format
 msgid "no servers found in %s, will retry"
 msgstr "keine Server in %s gefunden, werde es später neu versuchen"
@@ -1266,19 +1247,19 @@ msgstr "%u verfügbare(r) DHCP-Bereich: %s - %s"
 msgid "disabled"
 msgstr ""
 
-#: rfc2131.c:466 rfc2131.c:969 rfc2131.c:1335
+#: rfc2131.c:466 rfc2131.c:978 rfc2131.c:1350
 msgid "ignored"
 msgstr ""
 
-#: rfc2131.c:481 rfc2131.c:1183
+#: rfc2131.c:481 rfc2131.c:1197
 msgid "address in use"
 msgstr ""
 
-#: rfc2131.c:495 rfc2131.c:1023
+#: rfc2131.c:495 rfc2131.c:1032
 msgid "no address available"
 msgstr ""
 
-#: rfc2131.c:502 rfc2131.c:1146
+#: rfc2131.c:502 rfc2131.c:1160
 msgid "wrong network"
 msgstr ""
 
@@ -1286,7 +1267,7 @@ msgstr ""
 msgid "no address configured"
 msgstr ""
 
-#: rfc2131.c:522 rfc2131.c:1196
+#: rfc2131.c:522 rfc2131.c:1210
 msgid "no leases left"
 msgstr ""
 
@@ -1309,120 +1290,120 @@ msgstr "%u Benutzerklasse: %s"
 msgid "PXE BIS not supported"
 msgstr "PXE BIS nicht unterstützt"
 
-#: rfc2131.c:939
+#: rfc2131.c:948
 #, c-format
 msgid "disabling DHCP static address %s for %s"
 msgstr "schalte statische DHCP-Adresse %s für %s ab"
 
 # FIXME: do not assemble
-#: rfc2131.c:960
+#: rfc2131.c:969
 msgid "unknown lease"
 msgstr ""
 
-#: rfc2131.c:992
+#: rfc2131.c:1001
 #, c-format
 msgid "not using configured address %s because it is leased to %s"
 msgstr "benutze konfigurierte Adresse %s nicht, weil sie an %s verleast ist"
 
-#: rfc2131.c:1002
+#: rfc2131.c:1011
 #, c-format
 msgid "not using configured address %s because it is in use by the server or relay"
 msgstr "benutze konfigurierte Adresse %s nicht, weil sie von Server/Relais verwendet wird"
 
-#: rfc2131.c:1005
+#: rfc2131.c:1014
 #, c-format
 msgid "not using configured address %s because it was previously declined"
 msgstr "benutze konfigurierte Adresse %s nicht, weil sie zuvor abgelehnt wurde"
 
 # FIXME: do not assemble
-#: rfc2131.c:1021 rfc2131.c:1189
+#: rfc2131.c:1030 rfc2131.c:1203
 msgid "no unique-id"
 msgstr ""
 
-#: rfc2131.c:1090
+#: rfc2131.c:1099
 msgid "wrong server-ID"
 msgstr ""
 
-#: rfc2131.c:1108
+#: rfc2131.c:1117
 msgid "wrong address"
 msgstr ""
 
-#: rfc2131.c:1121
+#: rfc2131.c:1135
 msgid "lease not found"
 msgstr ""
 
-#: rfc2131.c:1154
+#: rfc2131.c:1168
 msgid "address not available"
 msgstr ""
 
-#: rfc2131.c:1165
+#: rfc2131.c:1179
 msgid "static lease available"
 msgstr ""
 
-#: rfc2131.c:1169
+#: rfc2131.c:1183
 msgid "address reserved"
 msgstr ""
 
-#: rfc2131.c:1177
+#: rfc2131.c:1191
 #, c-format
 msgid "abandoning lease to %s of %s"
 msgstr "Gebe Lease von %2$s an %1$s auf"
 
-#: rfc2131.c:1757
+#: rfc2131.c:1772
 #, c-format
 msgid "%u tags: %s"
 msgstr "%u Marken: %s"
 
-#: rfc2131.c:1770
+#: rfc2131.c:1785
 #, c-format
 msgid "%u bootfile name: %s"
 msgstr "%u Name der Bootdatei: %s"
 
-#: rfc2131.c:1779
+#: rfc2131.c:1794
 #, c-format
 msgid "%u server name: %s"
 msgstr "%u Servername: %s"
 
-#: rfc2131.c:1793
+#: rfc2131.c:1808
 #, c-format
 msgid "%u next server: %s"
 msgstr "%u nächster Server: %s"
 
-#: rfc2131.c:1796
+#: rfc2131.c:1811
 #, c-format
 msgid "%u broadcast response"
 msgstr "%u Antwort per Rundsendung"
 
-#: rfc2131.c:1859
+#: rfc2131.c:1874
 #, c-format
 msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
 msgstr "kann DHCP/BOOTP-Opition %d nicht setzen: kein Platz mehr im Paket"
 
-#: rfc2131.c:2105
+#: rfc2131.c:2120
 msgid "PXE menu too large"
 msgstr "PXE-Menüeintrag zu groß"
 
-#: rfc2131.c:2218
+#: rfc2131.c:2233
 #, c-format
 msgid "Ignoring domain %s for DHCP host name %s"
 msgstr "Ignoriere Domäne %s für DHCP-Hostnamen %s"
 
-#: rfc2131.c:2236
+#: rfc2131.c:2251
 #, c-format
 msgid "%u requested options: %s"
 msgstr "%u angeforderte Optionen: %s"
 
-#: rfc2131.c:2503
+#: rfc2131.c:2518
 #, c-format
 msgid "cannot send RFC3925 option: too many options for enterprise number %d"
 msgstr "Kann RFC3925-Option nicht senden: zu viele Optionen für Unternehmen Nr. %d"
 
-#: netlink.c:66
+#: netlink.c:70
 #, c-format
 msgid "cannot create netlink socket: %s"
 msgstr "kann Netlink-Socket nicht erzeugen: %s"
 
-#: netlink.c:265
+#: netlink.c:288
 #, c-format
 msgid "netlink returns error: %s"
 msgstr "Netlink liefert Fehler %s"
@@ -1439,45 +1420,45 @@ msgstr "vorgelagerte Server von DBus gesetzt"
 msgid "could not register a DBus message handler"
 msgstr "konnte Steuerungsprogramm für DBus-Nachrichten nicht anmelden"
 
-#: bpf.c:150
+#: bpf.c:217
 #, c-format
 msgid "cannot create DHCP BPF socket: %s"
 msgstr "konnte DHCP-BPF-Socket nicht einrichten: %s"
 
-#: bpf.c:178
+#: bpf.c:245
 #, c-format
 msgid "DHCP request for unsupported hardware type (%d) received on %s"
 msgstr "DHCP-Anfrage für nicht unterstützen Hardwaretyp (%d) auf %s empfangen"
 
-#: tftp.c:233
+#: tftp.c:281
 msgid "unable to get free port for TFTP"
 msgstr "konnte keinen freien Port für TFTP bekommen"
 
-#: tftp.c:248
+#: tftp.c:296
 #, c-format
 msgid "unsupported request from %s"
 msgstr "nicht unterstützte Anfrage von %s"
 
-#: tftp.c:336
-#, c-format
-msgid "sent %s to %s"
-msgstr "%s an %s verschickt"
-
-#: tftp.c:359
+#: tftp.c:406
 #, c-format
 msgid "file %s not found"
 msgstr "Datei %s nicht gefunden"
 
-#: tftp.c:470
+#: tftp.c:522
 #, c-format
 msgid "error %d %s received from %s"
 msgstr "Fehler %d %s von %s empfangen"
 
-#: tftp.c:501
+#: tftp.c:554
 #, c-format
 msgid "failed sending %s to %s"
 msgstr "konnte %s nicht an %s senden"
 
+#: tftp.c:568
+#, c-format
+msgid "sent %s to %s"
+msgstr "%s an %s verschickt"
+
 #: log.c:173
 #, c-format
 msgid "overflow: %d log entries lost"
@@ -1488,6 +1469,30 @@ msgstr "Ãœberlauf: %d Protokolleinträge verloren"
 msgid "log failed: %s"
 msgstr "Protokollierung fehlgeschlagen: %s"
 
-#: log.c:431
+#: log.c:436
 msgid "FAILED to start up"
 msgstr "Start fehlgeschlagen"
+
+#~ msgid "only one dhcp-hostsfile allowed"
+#~ msgstr "nur eine DHCP-Hostdatei (dhcp-hostsfile) zulässig"
+
+#~ msgid "only one dhcp-optsfile allowed"
+#~ msgstr "nur eine DHCP-Optionsdatei (dhcp-optsfile) zulässig"
+
+#~ msgid "files nested too deep in %s"
+#~ msgstr "Dateien in %s zu tief verschachtelt"
+
+#~ msgid "TXT record string too long"
+#~ msgstr "TXT-Eintrag zu lang"
+
+#~ msgid "failed to set IPV6 options on listening socket: %s"
+#~ msgstr "konnte IPV6-Optionen auf Empfangs-Socket nicht einstellen: %s"
+
+#~ msgid "failed to bind listening socket for %s: %s"
+#~ msgstr "konnte Empfangs-Socket nicht an %s binden: %s"
+
+#~ msgid "failed to listen on socket: %s"
+#~ msgstr "konnte Socket nicht zum Empfang einrichten: %s"
+
+#~ msgid "failed to create TFTP socket: %s"
+#~ msgstr "konnte TFTP-Socket nicht erzeugen: %s"
index 37456e41cdf2b80ae879b88a94aaad960fc6a325..aa15e557187b952a9c2294341f88b6d97ea8575c 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -15,61 +15,56 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: cache.c:764
+#: cache.c:761
 #, fuzzy, c-format
 msgid "failed to load names from %s: %s"
 msgstr "no se pudo cargar nombres desde %s: %s"
 
-#: cache.c:798 dhcp.c:865
+#: cache.c:795 dhcp.c:865
 #, fuzzy, c-format
 msgid "bad address at %s line %d"
 msgstr "dirección errónea en %s línea %d"
 
-#: cache.c:856 dhcp.c:881
+#: cache.c:853 dhcp.c:881
 #, c-format
 msgid "bad name at %s line %d"
 msgstr "nombre erróneo en %s línea %d"
 
-#: cache.c:863 dhcp.c:956
+#: cache.c:860 dhcp.c:956
 #, c-format
 msgid "read %s - %d addresses"
 msgstr "direcciónes %s - %d leídas"
 
-#: cache.c:902
+#: cache.c:899
 msgid "cleared cache"
 msgstr "el caché fue liberado"
 
-#: cache.c:933 option.c:1112
-#, fuzzy, c-format
-msgid "cannot access directory %s: %s"
-msgstr "no se puede accesar directorio %s: %s"
-
-#: cache.c:1053
+#: cache.c:960
 #, 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 al arriendo DHCP de %s"
 
-#: cache.c:1059
+#: cache.c:966
 #, 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 al arriendo DHCP de %s porque el nombre existe en %s con dirección %s"
 
-#: cache.c:1132
+#: cache.c:1039
 #, c-format
 msgid "time %lu"
 msgstr "tiempo %lu"
 
-#: cache.c:1133
+#: cache.c:1040
 #, 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:1135
+#: cache.c:1042
 #, c-format
 msgid "queries forwarded %u, queries answered locally %u"
 msgstr "búsquedas reenviadas %u, búsquedas respondidas localmente %u"
 
-#: cache.c:1158
+#: cache.c:1068
 #, 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"
@@ -84,7 +79,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:229 option.c:567
+#: util.c:229 option.c:573
 msgid "could not get memory"
 msgstr "no se pudo adquirir memoria"
 
@@ -103,457 +98,466 @@ msgstr "no se pudo asignar %d bytes"
 msgid "infinite"
 msgstr "infinito"
 
-#: option.c:240
+#: option.c:244
 msgid "Specify local address(es) to listen on."
 msgstr "Especificar dirección(es) locales dónde escuchar."
 
-#: option.c:241
+#: option.c:245
 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:242
+#: option.c:246
 msgid "Fake reverse lookups for RFC1918 private address ranges."
 msgstr "Falsificar búsquedas reversas para rangos de dirección privados RFC1918."
 
-#: option.c:243
+#: option.c:247
 msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
 msgstr "Tratar ipaddr (dirección IP) como NXDOMAIN (derrota comodín Verisign)."
 
-#: option.c:244
+#: option.c:248
 #, 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:245
+#: option.c:249
 #, c-format
 msgid "Specify configuration file (defaults to %s)."
 msgstr "Especificar archivo de configuración (%s por predeterminado)."
 
-#: option.c:246
+#: option.c:250
 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:247
+#: option.c:251
 msgid "Do NOT forward queries with no domain part."
 msgstr "NO reenviar búsquedas sin parte de dominio."
 
-#: option.c:248
+#: option.c:252
 msgid "Return self-pointing MX records for local hosts."
 msgstr "Retornar expedientes MX auto-señaladores para hosts locales."
 
-#: option.c:249
+#: option.c:253
 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:250
+#: option.c:254
 msgid "Don't forward spurious DNS requests from Windows hosts."
 msgstr "No reenviar pedidos DNS falsos desde máquinas Windows."
 
-#: option.c:251
+#: option.c:255
 msgid "Enable DHCP in the range given with lease duration."
 msgstr "Habilitar DHCP dentro del rango brindado con duración del arriendo."
 
-#: option.c:252
+#: option.c:256
 #, 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:253
+#: option.c:257
 msgid "Set address or hostname for a specified machine."
 msgstr "Fijar dirección o nombre de host para una máquina especificada."
 
-#: option.c:254
+#: option.c:258
 #, fuzzy
 msgid "Read DHCP host specs from file."
 msgstr "Leer especificaciones DHCP de host desde archivo"
 
-#: option.c:255
+#: option.c:259
 #, fuzzy
 msgid "Read DHCP option specs from file."
 msgstr "Leer opciones DHCP de host desde archivo"
 
-#: option.c:256
+#: option.c:260
 msgid "Evaluate conditional tag expression."
 msgstr "Evaluar expresión condicional de etiqueta."
 
-#: option.c:257
+#: option.c:261
 #, c-format
 msgid "Do NOT load %s file."
 msgstr "NO cargar archivo %s."
 
-#: option.c:258
+#: option.c:262
 #, 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:259
+#: option.c:263
 msgid "Specify interface(s) to listen on."
 msgstr "Especificar interface(s) donde escuchar."
 
-#: option.c:260
+#: option.c:264
 msgid "Specify interface(s) NOT to listen on."
 msgstr "Especificar interface(s) donde NO escuchar."
 
-#: option.c:261
+#: option.c:265
 #, fuzzy
 msgid "Map DHCP user class to tag."
 msgstr "Trazar clase de usuario DHCP a etiqueta."
 
-#: option.c:262
+#: option.c:266
 msgid "Map RFC3046 circuit-id to tag."
 msgstr "Trazar circuit-id (identificación de circuito) RFC3046 a etiqueta."
 
-#: option.c:263
+#: option.c:267
 msgid "Map RFC3046 remote-id to tag."
 msgstr "Trazar remote-id (identificación remota) RFC3046 a etiqueta."
 
-#: option.c:264
+#: option.c:268
 msgid "Map RFC3993 subscriber-id to tag."
 msgstr "Trazar subscriber-id (identificación de suscritor) RFC3993 a etiqueta."
 
-#: option.c:265
+#: option.c:269
 #, fuzzy
 msgid "Don't do DHCP for hosts with tag set."
 msgstr "No hacer DHCP para hosts con etiqueta fijada."
 
-#: option.c:266
+#: option.c:270
 #, fuzzy
 msgid "Force broadcast replies for hosts with tag set."
 msgstr "Forzar respuestas broadcast para hosts con etiqueta fijada."
 
-#: option.c:267
+#: option.c:271
 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:268
+#: option.c:272
 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:269
+#: option.c:273
 #, c-format
 msgid "Specify where to store DHCP leases (defaults to %s)."
 msgstr "Especificar donde almacenar arriendos DHCP (%s por predeterminado)."
 
-#: option.c:270
+#: option.c:274
 msgid "Return MX records for local hosts."
 msgstr "Retornar expedientes MX para hosts locales."
 
-#: option.c:271
+#: option.c:275
 msgid "Specify an MX record."
 msgstr "Especificar un expediente MX."
 
-#: option.c:272
+#: option.c:276
 msgid "Specify BOOTP options to DHCP server."
 msgstr "Especificar opciones BOOTP a servidor DHCP."
 
-#: option.c:273
+#: option.c:277
 #, 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:274
+#: option.c:278
 msgid "Do NOT cache failed search results."
 msgstr "NO almacenar en caché resultados de búsquedas fallidas."
 
-#: option.c:275
+#: option.c:279
 #, 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:276
+#: option.c:280
 #, fuzzy
 msgid "Specify options to be sent to DHCP clients."
 msgstr "Especificar opciones para ser enviadas a clientes DHCP."
 
-#: option.c:277
+#: option.c:281
 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:278
+#: option.c:282
 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:279
+#: option.c:283
 #, 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:280
+#: option.c:284
 #, fuzzy
 msgid "Log DNS queries."
 msgstr "Bitacorear búsquedas DNS."
 
-#: option.c:281
+#: option.c:285
 #, fuzzy
 msgid "Force the originating port for upstream DNS queries."
 msgstr "Enforzar el puerto original para búsquedas DNS upstream."
 
-#: option.c:282
+#: option.c:286
 msgid "Do NOT read resolv.conf."
 msgstr "NO leer resolv.conf."
 
-#: option.c:283
+#: option.c:287
 #, c-format
 msgid "Specify path to resolv.conf (defaults to %s)."
 msgstr "Especificar el path hacia resolv.conf (%s por predeterminado)."
 
-#: option.c:284
+#: option.c:288
 msgid "Specify address(es) of upstream servers with optional domains."
 msgstr "Especificar dirección(es) de servidores upstream con dominios opcionales."
 
-#: option.c:285
+#: option.c:289
 msgid "Never forward queries to specified domains."
 msgstr "Nunca reenviar búsquedas a dominios especificados."
 
-#: option.c:286
+#: option.c:290
 msgid "Specify the domain to be assigned in DHCP leases."
 msgstr "Especificar el dominio para ser asignado en arriendos DHCP."
 
-#: option.c:287
+#: option.c:291
 msgid "Specify default target in an MX record."
 msgstr "Especificar destino predeterminado en un expediente MX."
 
-#: option.c:288
+#: option.c:292
 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:289
+#: option.c:293
 #, fuzzy
 msgid "Specify time-to-live in seconds for negative caching."
 msgstr "Especificar tiempo de vida en segundos para caché negativo."
 
-#: option.c:290
+#: option.c:294
 #, 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:291
+#: option.c:295
 #, 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:292
+#: option.c:296
 #, fuzzy
 msgid "Map DHCP vendor class to tag."
 msgstr "Trazar clase de vendedor DHCP a etiqueta."
 
-#: option.c:293
+#: option.c:297
 msgid "Display dnsmasq version and copyright information."
 msgstr "Mostrar información sobre la versión y copyright de dnsmasq."
 
-#: option.c:294
+#: option.c:298
 msgid "Translate IPv4 addresses from upstream servers."
 msgstr "Traducir direcciones IPv4 desde servidores upstream."
 
-#: option.c:295
+#: option.c:299
 msgid "Specify a SRV record."
 msgstr "Especificar un expediente SRV."
 
-#: option.c:296
+#: option.c:300
 msgid "Display this message. Use --help dhcp for known DHCP options."
 msgstr "Mostrar este mensaje. Usar --help dhcp para opciones DHCP conocidas."
 
-#: option.c:297
+#: option.c:301
 #, fuzzy, c-format
 msgid "Specify path of PID file (defaults to %s)."
 msgstr "Especificar path de archivo PID (%s por predeterminado)."
 
-#: option.c:298
+#: option.c:302
 #, c-format
 msgid "Specify maximum number of DHCP leases (defaults to %s)."
 msgstr "Especificar número máximo de arriendos DHCP (%s por predeterminado)."
 
-#: option.c:299
+#: option.c:303
 msgid "Answer DNS queries based on the interface a query was sent to."
 msgstr "Responder a búsquedas DNS en base a la interface a la cuál fueron enviadas."
 
-#: option.c:300
+#: option.c:304
 msgid "Specify TXT DNS record."
 msgstr "Especificar expediente DNS TXT."
 
-#: option.c:301
+#: option.c:305
 #, fuzzy
 msgid "Specify PTR DNS record."
 msgstr "Especificar expediente DNS PTR."
 
-#: option.c:302
+#: option.c:306
 msgid "Give DNS name to IPv4 address of interface."
 msgstr "Otorgar nombre DNS a dirección IPv4 de interface."
 
-#: option.c:303
+#: option.c:307
 msgid "Bind only to interfaces in use."
 msgstr "Acoplar solo a interfaces en uso."
 
-#: option.c:304
+#: option.c:308
 #, c-format
 msgid "Read DHCP static host information from %s."
 msgstr "Leer información sobre hosts DHCP estáticos desde %s."
 
-#: option.c:305
+#: option.c:309
 msgid "Enable the DBus interface for setting upstream servers, etc."
 msgstr "Habilitar la interface DBus para fijar servidores upstream, etc."
 
-#: option.c:306
+#: option.c:310
 msgid "Do not provide DHCP on this interface, only provide DNS."
 msgstr "No proveer DHCP en esta interface, sólo proveer DNS."
 
-#: option.c:307
+#: option.c:311
 msgid "Enable dynamic address allocation for bootp."
 msgstr "Habilitar alocación dinámica de direcciónes para BOOTP."
 
-#: option.c:308
+#: option.c:312
 #, fuzzy
 msgid "Map MAC address (with wildcards) to option set."
 msgstr "Trazar dirección MAC (con comodínes) a opción fijada."
 
-#: option.c:309
+#: option.c:313
 msgid "Treat DHCP requests on aliases as arriving from interface."
 msgstr "Tratar pedidos DHCP en alias como si llegaran de la interface."
 
-#: option.c:310
+#: option.c:314
 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:311
+#: option.c:315
 msgid "Script to run on DHCP lease creation and destruction."
 msgstr "Archivo guión para ejecutar cuando se crea o destruye un arriendo DHCP."
 
-#: option.c:312
+#: option.c:316
 msgid "Read configuration from all the files in this directory."
 msgstr "Leer configuración desde todos los archivos en este directorio."
 
-#: option.c:313
+#: option.c:317
 #, 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:314
+#: option.c:318
 msgid "Do not use leasefile."
 msgstr "No usar archivo de arriendos."
 
-#: option.c:315
+#: option.c:319
 #, 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:316
+#: option.c:320
 #, c-format
 msgid "Clear DNS cache when reloading %s."
 msgstr "Liberar caché DNS al recargar %s."
 
-#: option.c:317
+#: option.c:321
 msgid "Ignore hostnames provided by DHCP clients."
 msgstr "Ignorar nombres de host brindados por clientes DHCP."
 
-#: option.c:318
+#: option.c:322
 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:319
+#: option.c:323
 msgid "Enable integrated read-only TFTP server."
 msgstr "Habilitar servidor integrado TFTP solo-lectura."
 
-#: option.c:320
+#: option.c:324
 msgid "Export files by TFTP only from the specified subtree."
 msgstr "Exportar archivos vía TFTP solo del sub-árbol especificado."
 
-#: option.c:321
+#: option.c:325
 msgid "Add client IP address to tftp-root."
 msgstr "Agregar IP de cliente a tftp-root."
 
-#: option.c:322
+#: option.c:326
 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:323
+#: option.c:327
 #, 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:324
+#: option.c:328
 msgid "Disable the TFTP blocksize extension."
 msgstr "Deshabilitar la extensión TFTP blocksize (tamaño de bloque)."
 
-#: option.c:325
+#: option.c:329
 msgid "Ephemeral port range for use by TFTP transfers."
 msgstr "Rango de puertos efímeros para ser usados por transferencias TFTP."
 
-#: option.c:326
+#: option.c:330
 msgid "Extra logging for DHCP."
 msgstr "Bitacoreo extra para DHCP."
 
-#: option.c:327
+#: option.c:331
 msgid "Enable async. logging; optionally set queue length."
 msgstr "Habilitar bitacoreo asincrónico; opcionalmente fijar tamaño de cola."
 
-#: option.c:328
+#: option.c:332
 msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
 msgstr "Detener revinculación DNS. Filtrar rangos de IP privados al resolver."
 
-#: option.c:329
+#: option.c:333
 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:330
+#: option.c:334
 msgid "Inhibit DNS-rebind protection on this domain."
 msgstr "Inhibir protección de revinculación DNS en este dominio."
 
-#: option.c:331
+#: option.c:335
 msgid "Always perform DNS queries to all servers."
 msgstr "Siempre realizar búsquedas DNS a todos los servidores."
 
-#: option.c:332
+#: option.c:336
 #, fuzzy
 msgid "Set tag if client includes matching option in request."
 msgstr "Fijar etiqueta si cliente incluye opción coincidente en pedido."
 
-#: option.c:333
+#: option.c:337
 msgid "Use alternative ports for DHCP."
 msgstr "Usar puertos alternativos para DHCP."
 
-#: option.c:334
+#: option.c:338
 msgid "Run lease-change script as this user."
 msgstr "Correr archivo guión de cambio de arriendos como este usuario."
 
-#: option.c:335
+#: option.c:339
 #, fuzzy
 msgid "Specify NAPTR DNS record."
 msgstr "Especificar expediente DNS NAPTR."
 
-#: option.c:336
+#: option.c:340
 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:337
+#: option.c:341
 msgid "Use only fully qualified domain names for DHCP clients."
 msgstr "Usar solo nombres de dominio completamente calificados para clientes DHCP."
 
-#: option.c:338
+#: option.c:342
 msgid "Generate hostnames based on MAC address for nameless clients."
 msgstr "Generar hostnames basados en direcciones MAC para clientes sin nombre."
 
-#: option.c:339
+#: option.c:343
 msgid "Use these DHCP relays as full proxies."
 msgstr "Usar estos relays DHCP como proxies completos."
 
-#: option.c:340
+#: option.c:344
 msgid "Specify alias name for LOCAL DNS name."
 msgstr "Especificar nombre alias para nombre DNS LOCAL."
 
-#: option.c:341
+#: option.c:345
 #, fuzzy
 msgid "Prompt to send to PXE clients."
 msgstr "Aviso a ser enviado a clientes PXE."
 
-#: option.c:342
+#: option.c:346
 msgid "Boot service for PXE menu."
 msgstr "Servico boot para menú PXE."
 
-#: option.c:343
+#: option.c:347
 msgid "Check configuration syntax."
 msgstr "Revisar sintaxis de configuración."
 
-#: option.c:632
+#: option.c:348
+msgid "Add requestor's MAC address to forwarded DNS queries"
+msgstr ""
+
+#: option.c:349
+#, fuzzy
+msgid "Proxy DNSSEC validation results from upstream nameservers"
+msgstr "Traducir direcciones IPv4 desde servidores upstream."
+
+#: option.c:638
 #, c-format
 msgid ""
 "Usage: dnsmasq [options]\n"
@@ -562,235 +566,230 @@ msgstr ""
 "Modo de uso: dnsmasq [opciones]\n"
 "\n"
 
-#: option.c:634
+#: option.c:640
 #, 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:636
+#: option.c:642
 #, fuzzy, c-format
 msgid "Valid options are:\n"
 msgstr "Opciones válidas son :\n"
 
-#: option.c:677
+#: option.c:683
 #, c-format
 msgid "Known DHCP options:\n"
 msgstr "Opciones DHCP conocidas:\n"
 
-#: option.c:781
+#: option.c:798
 msgid "bad dhcp-option"
 msgstr "opción dhcp-option errónea"
 
-#: option.c:838
+#: option.c:860
 #, fuzzy
 msgid "bad IP address"
 msgstr "dirección IP errónea"
 
-#: option.c:941
+#: option.c:966
 msgid "bad domain in dhcp-option"
 msgstr "dominio erróneo en dhcp-option"
 
-#: option.c:1007
+#: option.c:1032
 msgid "dhcp-option too long"
 msgstr "opción dhcp-option demasiado larga"
 
-#: option.c:1016
+#: option.c:1041
 msgid "illegal dhcp-match"
 msgstr "dhcp-match ilegal"
 
-#: option.c:1052
+#: option.c:1085
 msgid "illegal repeated flag"
 msgstr "opción repetida ilegal"
 
-#: option.c:1060
+#: option.c:1093
 msgid "illegal repeated keyword"
 msgstr "palabra clave repetida ilegal"
 
-#: option.c:1143 tftp.c:413
+#: option.c:1145 option.c:3024
+#, fuzzy, c-format
+msgid "cannot access directory %s: %s"
+msgstr "no se puede accesar directorio %s: %s"
+
+#: option.c:1176 tftp.c:460
 #, fuzzy, c-format
 msgid "cannot access %s: %s"
 msgstr "no se puede accesar %s: %s"
 
-#: option.c:1188
-#, fuzzy
-msgid "only one dhcp-hostsfile allowed"
-msgstr "solo un dhcp-hostsfile permitido"
-
-#: option.c:1195
-#, fuzzy
-msgid "only one dhcp-optsfile allowed"
-msgstr "solo un dhcp-optsfile permitido"
-
-#: option.c:1240
+#: option.c:1259
 msgid "bad MX preference"
 msgstr "preferencia MX errónea"
 
-#: option.c:1245
+#: option.c:1264
 msgid "bad MX name"
 msgstr "nombre MX erróneo"
 
-#: option.c:1259
+#: option.c:1278
 msgid "bad MX target"
 msgstr "destino MX erróneo"
 
-#: option.c:1269
+#: option.c:1288
 msgid "cannot run scripts under uClinux"
 msgstr "no se pueden correr archivos guiónes bajo uClinux"
 
-#: option.c:1271
+#: option.c:1290
 msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts"
 msgstr "recompilar con HAVE_SCRIPT definido para habilitar guiónes de cambio de arriendo"
 
-#: option.c:1516 option.c:1520
+#: option.c:1591 option.c:1595
 msgid "bad port"
 msgstr "puerto erróneo"
 
-#: option.c:1539 option.c:1564
+#: option.c:1614 option.c:1639
 msgid "interface binding not supported"
 msgstr "vinculación de interface no está soportado"
 
-#: option.c:1710
+#: option.c:1785
 #, fuzzy
 msgid "bad port range"
 msgstr "rango de puertos erróneo"
 
-#: option.c:1727
+#: option.c:1802
 msgid "bad bridge-interface"
 msgstr "opción bridge-interface (interface puente) errónea"
 
-#: option.c:1769
+#: option.c:1844
 msgid "bad dhcp-range"
 msgstr "opción dhcp-range (rango DHCP) errónea"
 
-#: option.c:1797
+#: option.c:1872
 msgid "only one tag allowed"
 msgstr "solo una etiqueta permitida"
 
-#: option.c:1844
+#: option.c:1919
 msgid "inconsistent DHCP range"
 msgstr "rango DHCP inconsistente"
 
-#: option.c:2019
+#: option.c:2013 option.c:2039
+#, fuzzy
+msgid "bad hex constant"
+msgstr "opción dhcp-host errónea"
+
+#: option.c:2101
 #, fuzzy
 msgid "bad DHCP host name"
 msgstr "nombre de host DHCP erróneo"
 
-#: option.c:2100
+#: option.c:2182
 #, fuzzy
 msgid "bad tag-if"
 msgstr "destino MX erróneo"
 
-#: option.c:2374 option.c:2673
+#: option.c:2461 option.c:2746
 msgid "invalid port number"
 msgstr "número de puerto inválido"
 
-#: option.c:2436
+#: option.c:2523
 #, fuzzy
 msgid "bad dhcp-proxy address"
 msgstr "dirección IP errónea"
 
-#: option.c:2476
+#: option.c:2563
 #, fuzzy
 msgid "invalid alias range"
 msgstr "rango alias inválido"
 
-#: option.c:2489
+#: option.c:2576
 #, fuzzy
 msgid "bad interface name"
 msgstr "nombre de interface erróneo"
 
-#: option.c:2514
+#: option.c:2601
 msgid "bad CNAME"
 msgstr "CNAME erróneo"
 
-#: option.c:2519
+#: option.c:2606
 msgid "duplicate CNAME"
 msgstr "CNAME duplicado"
 
-#: option.c:2539
+#: option.c:2626
 #, fuzzy
 msgid "bad PTR record"
 msgstr "expediente PTR erróneo"
 
-#: option.c:2570
+#: option.c:2657
 #, fuzzy
 msgid "bad NAPTR record"
 msgstr "expediente NAPTR erróneo"
 
-#: option.c:2595
-msgid "TXT record string too long"
-msgstr "expediente TXT demasiado largo"
-
-#: option.c:2643
+#: option.c:2689
 msgid "bad TXT record"
 msgstr "expediente TXT erróneo"
 
-#: option.c:2659
+#: option.c:2732
 msgid "bad SRV record"
 msgstr "expediente SRV erróneo"
 
-#: option.c:2666
+#: option.c:2739
 msgid "bad SRV target"
 msgstr "destino SRV erróneo"
 
-#: option.c:2680
+#: option.c:2753
 msgid "invalid priority"
 msgstr "prioridad inválida"
 
-#: option.c:2687
+#: option.c:2760
 msgid "invalid weight"
 msgstr "peso inválido"
 
-#: option.c:2706
+#: option.c:2779
 msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DBus support)"
 msgstr "opción no soportada (verificar que dnsmasq fue compilado con soporte para DHCP/TFTP/DBus)"
 
-#: option.c:2748
-#, c-format
-msgid "files nested too deep in %s"
-msgstr "archivos jerarquizados demasiado profundo en %s"
-
-#: option.c:2756 tftp.c:567
-#, c-format
-msgid "cannot read %s: %s"
-msgstr "no se puede leer %s: %s"
-
-#: option.c:2813
+#: option.c:2843
 msgid "missing \""
 msgstr "falta \""
 
-#: option.c:2872
+#: option.c:2902
 msgid "bad option"
 msgstr "opción errónea"
 
-#: option.c:2874
+#: option.c:2904
 msgid "extraneous parameter"
 msgstr "parámetro extraño"
 
-#: option.c:2876
+#: option.c:2906
 msgid "missing parameter"
 msgstr "parámetro ausente"
 
-#: option.c:2880
+#: option.c:2910
 msgid "error"
 msgstr "error"
 
-#: option.c:2885
+#: option.c:2915
 #, c-format
 msgid "%s at line %d of %%s"
 msgstr "%s en línea %d de %%s"
 
-#: option.c:2942 option.c:2973
+#: option.c:2979 tftp.c:624
+#, c-format
+msgid "cannot read %s: %s"
+msgstr "no se puede leer %s: %s"
+
+#: option.c:3145 option.c:3181
 #, fuzzy, c-format
 msgid "read %s"
 msgstr "leyendo %s"
 
-#: option.c:3045
+#: option.c:3229
+msgid "junk found in command line"
+msgstr ""
+
+#: option.c:3258
 #, c-format
 msgid "Dnsmasq version %s  %s\n"
 msgstr "Dnsmasq versión %s  %s\n"
 
-#: option.c:3046
+#: option.c:3259
 #, c-format
 msgid ""
 "Compile time options %s\n"
@@ -799,157 +798,138 @@ msgstr ""
 "Opciones de compilación %s\n"
 "\n"
 
-#: option.c:3047
+#: option.c:3260
 #, c-format
 msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
 msgstr "Este software viene SIN NINGUNA GARANTIA.\n"
 
-#: option.c:3048
+#: option.c:3261
 #, c-format
 msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
 msgstr "Dnsmasq es software libre, y usted está bienvenido a redistribuirlo\n"
 
-#: option.c:3049
+#: option.c:3262
 #, 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:3060
+#: option.c:3273
 msgid "try --help"
 msgstr "pruebe --help"
 
-#: option.c:3062
+#: option.c:3275
 msgid "try -w"
 msgstr "pruebe -w"
 
-#: option.c:3065
+#: option.c:3278
 #, fuzzy, c-format
 msgid "bad command line options: %s"
 msgstr "opciones de línea de comandos erróneas: %s"
 
-#: option.c:3106
+#: option.c:3319
 #, c-format
 msgid "cannot get host-name: %s"
 msgstr "no se puede obtener host-name (nombre de host): %s"
 
-#: option.c:3134
+#: option.c:3347
 msgid "only one resolv.conf file allowed in no-poll mode."
 msgstr "solo un archivo resolv.conf permitido en modo no-poll."
 
-#: option.c:3144
+#: option.c:3357
 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:3147 network.c:813 dhcp.c:814
+#: option.c:3360 network.c:848 dhcp.c:814
 #, fuzzy, c-format
 msgid "failed to read %s: %s"
 msgstr "no se pudo leer %s: %s"
 
-#: option.c:3164
+#: option.c:3377
 #, c-format
 msgid "no search directive found in %s"
 msgstr "ninguna directiva de búsqueda encontrada en %s"
 
-#: option.c:3185
+#: option.c:3398
+#, 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:3189
+#: option.c:3402
 msgid "syntax check OK"
 msgstr "revisión de sintaxis OK"
 
-#: forward.c:427
+#: forward.c:461
 #, c-format
 msgid "nameserver %s refused to do a recursive query"
 msgstr "servidor DNS %s se reusó a hacer una búsqueda recursiva"
 
-#: forward.c:455
+#: forward.c:489
 #, fuzzy, c-format
 msgid "possible DNS-rebind attack detected: %s"
 msgstr "posible ataque de revinculación DNS detectado"
 
-#: network.c:110
+#: network.c:171
 #, fuzzy, c-format
 msgid "unknown interface %s in bridge-interface"
 msgstr "interface desconocida %s en bridge-interface"
 
-#: network.c:467 dnsmasq.c:188
-#, c-format
-msgid "failed to create listening socket: %s"
-msgstr "no se pudo crear un socket escuchador: %s"
-
-#: network.c:474
-#, c-format
-msgid "failed to set IPV6 options on listening socket: %s"
-msgstr "no se pudo fijar opciones IPv6 sobre socket escuchador: %s"
-
-#: network.c:500
-#, c-format
-msgid "failed to bind listening socket for %s: %s"
-msgstr "no se pudo acoplar socket escuchador para %s: %s"
-
-#: network.c:505
-#, c-format
-msgid "failed to listen on socket: %s"
-msgstr "no se pudo escuchar en socket: %s"
-
-#: network.c:517
+#: network.c:380
 #, fuzzy, c-format
-msgid "failed to create TFTP socket: %s"
-msgstr "no se pudo crear socket TFTP: %s"
+msgid "failed to create listening socket for %s: %s"
+msgstr "no se pudo crear un socket escuchador: %s"
 
-#: network.c:711
+#: network.c:746
 #, fuzzy, c-format
 msgid "failed to bind server socket for %s: %s"
 msgstr "no se pudo acoplar socket escuchador para %s: %s"
 
-#: network.c:748
+#: network.c:783
 #, c-format
 msgid "ignoring nameserver %s - local interface"
 msgstr "ignorando servidor DNS %s - interface local"
 
-#: network.c:759
+#: network.c:794
 #, fuzzy, c-format
 msgid "ignoring nameserver %s - cannot make/bind socket: %s"
 msgstr "ignorando servidor DNS %s - no se puede crear/acoplar socket: %s"
 
-#: network.c:776
+#: network.c:811
 msgid "unqualified"
 msgstr "no calificado"
 
-#: network.c:776
+#: network.c:811
 msgid "names"
 msgstr "nombres"
 
-#: network.c:778
+#: network.c:813
 msgid "default"
 msgstr "predeterminado"
 
-#: network.c:780
+#: network.c:815
 msgid "domain"
 msgstr "dominio"
 
-#: network.c:783
+#: network.c:818
 #, c-format
 msgid "using local addresses only for %s %s"
 msgstr "usando direcciones locales solo para %s %s"
 
-#: network.c:785
+#: network.c:820
 #, fuzzy, c-format
 msgid "using standard nameservers for %s %s"
 msgstr "usando servidor DNS %s#%d para %s %s"
 
-#: network.c:787
+#: network.c:822
 #, c-format
 msgid "using nameserver %s#%d for %s %s"
 msgstr "usando servidor DNS %s#%d para %s %s"
 
-#: network.c:790
+#: network.c:825
 #, fuzzy, c-format
 msgid "using nameserver %s#%d(via %s)"
 msgstr "usando servidor DNS %s#%d(vía %s)"
 
-#: network.c:792
+#: network.c:827
 #, c-format
 msgid "using nameserver %s#%d"
 msgstr "usando servidor DNS %s#%d"
@@ -979,183 +959,183 @@ msgstr "interface desconocida %s"
 msgid "no interface with address %s"
 msgstr "ninguna interface con dirección %s"
 
-#: dnsmasq.c:200 dnsmasq.c:671
+#: dnsmasq.c:199 dnsmasq.c:670
 #, c-format
 msgid "DBus error: %s"
 msgstr "error DBus: %s"
 
-#: dnsmasq.c:203
+#: dnsmasq.c:202
 msgid "DBus not available: set HAVE_DBUS in src/config.h"
 msgstr "DBus no disponible: fijar HAVE_DBUS en src/config.h"
 
-#: dnsmasq.c:229
+#: dnsmasq.c:228
 #, c-format
 msgid "unknown user or group: %s"
 msgstr "usuario o grupo desconocido: %s"
 
-#: dnsmasq.c:284
+#: dnsmasq.c:283
 #, 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:448
+#: dnsmasq.c:447
 #, fuzzy, c-format
 msgid "started, version %s DNS disabled"
 msgstr "iniciado, versión %s DNS deshabilitado"
 
-#: dnsmasq.c:450
+#: dnsmasq.c:449
 #, c-format
 msgid "started, version %s cachesize %d"
 msgstr "iniciado, versión %s tamaño de caché %d"
 
-#: dnsmasq.c:452
+#: dnsmasq.c:451
 #, c-format
 msgid "started, version %s cache disabled"
 msgstr "iniciado, versión %s caché deshabilitado"
 
-#: dnsmasq.c:454
+#: dnsmasq.c:453
 #, c-format
 msgid "compile time options: %s"
 msgstr "opciones de compilación: %s"
 
-#: dnsmasq.c:460
+#: dnsmasq.c:459
 msgid "DBus support enabled: connected to system bus"
 msgstr "soporte DBus habilitado: conectado a bus de sistema"
 
-#: dnsmasq.c:462
+#: dnsmasq.c:461
 msgid "DBus support enabled: bus connection pending"
 msgstr "soporte DBus habilitado: conección a bus pendiente"
 
-#: dnsmasq.c:467
+#: dnsmasq.c:466
 #, fuzzy, c-format
 msgid "warning: failed to change owner of %s: %s"
 msgstr "advertencia: no se pudo cambiar dueño de %s: %s"
 
-#: dnsmasq.c:471
+#: dnsmasq.c:470
 msgid "setting --bind-interfaces option because of OS limitations"
 msgstr "fijando opción --bind-interfaces debido a limitaciones de sistema operativo"
 
-#: dnsmasq.c:476
+#: dnsmasq.c:475
 #, c-format
 msgid "warning: interface %s does not currently exist"
 msgstr "advertencia: interface %s no existe actuálmente"
 
-#: dnsmasq.c:481
+#: dnsmasq.c:480
 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:484
+#: dnsmasq.c:483
 #, fuzzy
 msgid "warning: no upstream servers configured"
 msgstr "advertencia: ningún servidor upstream configurado"
 
-#: dnsmasq.c:488
+#: dnsmasq.c:487
 #, c-format
 msgid "asynchronous logging enabled, queue limit is %d messages"
 msgstr "bitacoreo asincrónico habilitado, límite de cola es %d mensajes"
 
-#: dnsmasq.c:501
+#: dnsmasq.c:500
 #, c-format
 msgid "DHCP, static leases only on %.0s%s, lease time %s"
 msgstr "DHCP, arriendos estáticos solo en %.0s%s, tiempo de arriendo %s"
 
-#: dnsmasq.c:503
+#: dnsmasq.c:502
 #, c-format
 msgid "DHCP, proxy on subnet %.0s%s%.0s"
 msgstr "DHCP, proxy en subred %.0s%s%.0s"
 
-#: dnsmasq.c:504
+#: dnsmasq.c:503
 #, c-format
 msgid "DHCP, IP range %s -- %s, lease time %s"
 msgstr "DHCP, rango de IPs %s -- %s, tiempo de arriendo %s"
 
-#: dnsmasq.c:519
+#: dnsmasq.c:518
 msgid "root is "
 msgstr "root es "
 
-#: dnsmasq.c:519
+#: dnsmasq.c:518
 #, fuzzy
 msgid "enabled"
 msgstr "habilitado"
 
-#: dnsmasq.c:521
+#: dnsmasq.c:520
 msgid "secure mode"
 msgstr "modo seguro"
 
-#: dnsmasq.c:547
+#: dnsmasq.c:546
 #, 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:673
+#: dnsmasq.c:672
 msgid "connected to system DBus"
 msgstr "conectado a DBus de sistema"
 
-#: dnsmasq.c:768
+#: dnsmasq.c:767
 #, c-format
 msgid "cannot fork into background: %s"
 msgstr "no se puede hacer fork hacia el fondo: %s"
 
-#: dnsmasq.c:771
+#: dnsmasq.c:770
 #, fuzzy, c-format
 msgid "failed to create helper: %s"
 msgstr "no se pudo crear ayudante: %s"
 
-#: dnsmasq.c:774
+#: dnsmasq.c:773
 #, fuzzy, c-format
 msgid "setting capabilities failed: %s"
 msgstr "configuración de capacidades ha fallado: %s"
 
-#: dnsmasq.c:778
+#: dnsmasq.c:777
 #, fuzzy, c-format
 msgid "failed to change user-id to %s: %s"
 msgstr "no se pudo cambiar user-id a %s: %s"
 
-#: dnsmasq.c:783
+#: dnsmasq.c:782
 #, fuzzy, c-format
 msgid "failed to change group-id to %s: %s"
 msgstr "no se pudo cambiar group-id a %s: %s"
 
-#: dnsmasq.c:786
+#: dnsmasq.c:785
 #, fuzzy, c-format
 msgid "failed to open pidfile %s: %s"
 msgstr "no se pudo abrir archivo PID %s: %s"
 
-#: dnsmasq.c:789
+#: dnsmasq.c:788
 #, fuzzy, c-format
 msgid "cannot open %s: %s"
 msgstr "no se puede abrir %s: %s"
 
-#: dnsmasq.c:844
+#: dnsmasq.c:843
 #, c-format
 msgid "child process killed by signal %d"
 msgstr "proceso hijo eliminado por señal %d"
 
-#: dnsmasq.c:848
+#: dnsmasq.c:847
 #, c-format
 msgid "child process exited with status %d"
 msgstr "proceso hijo hizo exit con estado %d"
 
-#: dnsmasq.c:852
+#: dnsmasq.c:851
 #, fuzzy, c-format
 msgid "failed to execute %s: %s"
 msgstr "no se pudo ejecutar %s: %s"
 
-#: dnsmasq.c:896
+#: dnsmasq.c:895
 msgid "exiting on receipt of SIGTERM"
 msgstr "saliendo al recibir SIGTERM"
 
-#: dnsmasq.c:924
+#: dnsmasq.c:923
 #, fuzzy, c-format
 msgid "failed to access %s: %s"
 msgstr "no se pudo accesar %s: %s"
 
-#: dnsmasq.c:954
+#: dnsmasq.c:953
 #, c-format
 msgid "reading %s"
 msgstr "leyendo %s"
 
-#: dnsmasq.c:965
+#: dnsmasq.c:964
 #, fuzzy, c-format
 msgid "no servers found in %s, will retry"
 msgstr "ningún servidor encontrado en %s, se reintentará"
@@ -1276,19 +1256,19 @@ msgstr "%u Rango DHCP disponible: %s -- %s"
 msgid "disabled"
 msgstr "deshabilitado"
 
-#: rfc2131.c:466 rfc2131.c:969 rfc2131.c:1335
+#: rfc2131.c:466 rfc2131.c:978 rfc2131.c:1350
 msgid "ignored"
 msgstr "ignorado"
 
-#: rfc2131.c:481 rfc2131.c:1183
+#: rfc2131.c:481 rfc2131.c:1197
 msgid "address in use"
 msgstr "dirección en uso"
 
-#: rfc2131.c:495 rfc2131.c:1023
+#: rfc2131.c:495 rfc2131.c:1032
 msgid "no address available"
 msgstr "ninguna dirección disponible"
 
-#: rfc2131.c:502 rfc2131.c:1146
+#: rfc2131.c:502 rfc2131.c:1160
 msgid "wrong network"
 msgstr "red equivocada"
 
@@ -1296,7 +1276,7 @@ msgstr "red equivocada"
 msgid "no address configured"
 msgstr "ninguna dirección configurada"
 
-#: rfc2131.c:522 rfc2131.c:1196
+#: rfc2131.c:522 rfc2131.c:1210
 msgid "no leases left"
 msgstr "no sobra ningún arriendo"
 
@@ -1319,118 +1299,118 @@ msgstr "%u Clase de usuario: %s"
 msgid "PXE BIS not supported"
 msgstr "no hay soporte para BIS PXE"
 
-#: rfc2131.c:939
+#: rfc2131.c:948
 #, fuzzy, c-format
 msgid "disabling DHCP static address %s for %s"
 msgstr "deshabilitando dirección DHCP estática %s para %s"
 
-#: rfc2131.c:960
+#: rfc2131.c:969
 msgid "unknown lease"
 msgstr "arriendo desconocido"
 
-#: rfc2131.c:992
+#: rfc2131.c:1001
 #, c-format
 msgid "not using configured address %s because it is leased to %s"
 msgstr "no usando dirección configurada %s porque está arrendada a %s"
 
-#: rfc2131.c:1002
+#: rfc2131.c:1011
 #, fuzzy, c-format
 msgid "not using configured address %s because it is in use by the server or relay"
 msgstr "no usando dirección configurada %s porque está en uso por el servidor o relay"
 
-#: rfc2131.c:1005
+#: rfc2131.c:1014
 #, fuzzy, c-format
 msgid "not using configured address %s because it was previously declined"
 msgstr "no usando dirección configurada %s porque fué previamente denegada"
 
-#: rfc2131.c:1021 rfc2131.c:1189
+#: rfc2131.c:1030 rfc2131.c:1203
 msgid "no unique-id"
 msgstr "ningún unique-id (identificación Ãºnica)"
 
-#: rfc2131.c:1090
+#: rfc2131.c:1099
 msgid "wrong server-ID"
 msgstr "ID de servidor equivocada"
 
-#: rfc2131.c:1108
+#: rfc2131.c:1117
 msgid "wrong address"
 msgstr "dirección equivocada"
 
-#: rfc2131.c:1121
+#: rfc2131.c:1135
 msgid "lease not found"
 msgstr "arriendo no encontrado"
 
-#: rfc2131.c:1154
+#: rfc2131.c:1168
 msgid "address not available"
 msgstr "dirección no disponible"
 
-#: rfc2131.c:1165
+#: rfc2131.c:1179
 msgid "static lease available"
 msgstr "arriendo estático disponible"
 
-#: rfc2131.c:1169
+#: rfc2131.c:1183
 msgid "address reserved"
 msgstr "dirección reservada"
 
-#: rfc2131.c:1177
+#: rfc2131.c:1191
 #, c-format
 msgid "abandoning lease to %s of %s"
 msgstr "abandonando arriendo a %s de %s"
 
-#: rfc2131.c:1757
+#: rfc2131.c:1772
 #, c-format
 msgid "%u tags: %s"
 msgstr "%u etiquetas: %s"
 
-#: rfc2131.c:1770
+#: rfc2131.c:1785
 #, c-format
 msgid "%u bootfile name: %s"
 msgstr "%u nombre de bootfile: %s"
 
-#: rfc2131.c:1779
+#: rfc2131.c:1794
 #, c-format
 msgid "%u server name: %s"
 msgstr "%u nombre de servidor: %s"
 
-#: rfc2131.c:1793
+#: rfc2131.c:1808
 #, fuzzy, c-format
 msgid "%u next server: %s"
 msgstr "%u siguiente servidor: %s"
 
-#: rfc2131.c:1796
+#: rfc2131.c:1811
 #, c-format
 msgid "%u broadcast response"
 msgstr ""
 
-#: rfc2131.c:1859
+#: rfc2131.c:1874
 #, fuzzy, c-format
 msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
 msgstr "no se puede enviar opción DHCP/BOOTP %d: no queda espacio en paquete"
 
-#: rfc2131.c:2105
+#: rfc2131.c:2120
 msgid "PXE menu too large"
 msgstr "menú PXE demasiado grande"
 
-#: rfc2131.c:2218
+#: rfc2131.c:2233
 #, c-format
 msgid "Ignoring domain %s for DHCP host name %s"
 msgstr "Ignorando dominio %s para nombre de host DHCP %s"
 
-#: rfc2131.c:2236
+#: rfc2131.c:2251
 #, fuzzy, c-format
 msgid "%u requested options: %s"
 msgstr "%u opciones solicitadas: %s"
 
-#: rfc2131.c:2503
+#: rfc2131.c:2518
 #, c-format
 msgid "cannot send RFC3925 option: too many options for enterprise number %d"
 msgstr "no se puede enviar opción RFC3925: demasiadas opciones para número enterprise %d"
 
-#: netlink.c:66
+#: netlink.c:70
 #, fuzzy, c-format
 msgid "cannot create netlink socket: %s"
 msgstr "no se puede crear socket netlink: %s"
 
-#: netlink.c:265
+#: netlink.c:288
 #, fuzzy, c-format
 msgid "netlink returns error: %s"
 msgstr "netlink retorna error: %s"
@@ -1447,45 +1427,45 @@ msgstr "fijando servidores upstream desde DBus"
 msgid "could not register a DBus message handler"
 msgstr "no se pudo registrar un manejador de mensajes DBus"
 
-#: bpf.c:150
+#: bpf.c:217
 #, c-format
 msgid "cannot create DHCP BPF socket: %s"
 msgstr "no se puede crear socket BPF DHCP: %s"
 
-#: bpf.c:178
+#: bpf.c:245
 #, fuzzy, c-format
 msgid "DHCP request for unsupported hardware type (%d) received on %s"
 msgstr "pedido DHCP por tipo de hardware no-soportado (%d) recibido en %s"
 
-#: tftp.c:233
+#: tftp.c:281
 msgid "unable to get free port for TFTP"
 msgstr "incapaz de conseguir puerto libre para TFTP"
 
-#: tftp.c:248
+#: tftp.c:296
 #, c-format
 msgid "unsupported request from %s"
 msgstr "pedido no-soportado desde %s"
 
-#: tftp.c:336
-#, fuzzy, c-format
-msgid "sent %s to %s"
-msgstr "TFTP envió %s a %s"
-
-#: tftp.c:359
+#: tftp.c:406
 #, fuzzy, c-format
 msgid "file %s not found"
 msgstr "archivo %s no encontrado"
 
-#: tftp.c:470
+#: tftp.c:522
 #, fuzzy, c-format
 msgid "error %d %s received from %s"
 msgstr "error TFTP %d %s recibido de %s"
 
-#: tftp.c:501
+#: tftp.c:554
 #, fuzzy, c-format
 msgid "failed sending %s to %s"
 msgstr "TFTP no pudo enviar %s a %s"
 
+#: tftp.c:568
+#, fuzzy, c-format
+msgid "sent %s to %s"
+msgstr "TFTP envió %s a %s"
+
 #: log.c:173
 #, c-format
 msgid "overflow: %d log entries lost"
@@ -1496,10 +1476,37 @@ msgstr "desbordamiento: %d entradas de bit
 msgid "log failed: %s"
 msgstr "bitácora falló: %s"
 
-#: log.c:431
+#: log.c:436
 msgid "FAILED to start up"
 msgstr "el inicio ha FALLADO"
 
+#, fuzzy
+#~ msgid "only one dhcp-hostsfile allowed"
+#~ msgstr "solo un dhcp-hostsfile permitido"
+
+#, fuzzy
+#~ msgid "only one dhcp-optsfile allowed"
+#~ msgstr "solo un dhcp-optsfile permitido"
+
+#~ msgid "files nested too deep in %s"
+#~ msgstr "archivos jerarquizados demasiado profundo en %s"
+
+#~ msgid "TXT record string too long"
+#~ msgstr "expediente TXT demasiado largo"
+
+#~ msgid "failed to set IPV6 options on listening socket: %s"
+#~ msgstr "no se pudo fijar opciones IPv6 sobre socket escuchador: %s"
+
+#~ msgid "failed to bind listening socket for %s: %s"
+#~ msgstr "no se pudo acoplar socket escuchador para %s: %s"
+
+#~ msgid "failed to listen on socket: %s"
+#~ msgstr "no se pudo escuchar en socket: %s"
+
+#, fuzzy
+#~ msgid "failed to create TFTP socket: %s"
+#~ msgstr "no se pudo crear socket TFTP: %s"
+
 #~ msgid "DHCP packet: transaction-id is %u"
 #~ msgstr "paquete DHCP: transaction-id (identificación de transacción) es %u"
 
@@ -1539,9 +1546,6 @@ msgstr "el inicio ha FALLADO"
 #~ msgid "Limit of %d leases exceeded."
 #~ msgstr "Límite de %d arriendos excedido."
 
-#~ msgid "bad dhcp-host"
-#~ msgstr "opción dhcp-host errónea"
-
 #~ msgid "domains"
 #~ msgstr "dominios"
 
index 98e308861b465f13c286b23d3536d71c90508a73..ca1d2aa9605893c0a2222463caa7e5b4193c85dd 100644 (file)
--- a/po/fi.po
+++ b/po/fi.po
@@ -15,61 +15,56 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: cache.c:764
+#: cache.c:761
 #, c-format
 msgid "failed to load names from %s: %s"
 msgstr ""
 
-#: cache.c:798 dhcp.c:865
+#: cache.c:795 dhcp.c:865
 #, c-format
 msgid "bad address at %s line %d"
 msgstr ""
 
-#: cache.c:856 dhcp.c:881
+#: cache.c:853 dhcp.c:881
 #, c-format
 msgid "bad name at %s line %d"
 msgstr ""
 
-#: cache.c:863 dhcp.c:956
+#: cache.c:860 dhcp.c:956
 #, c-format
 msgid "read %s - %d addresses"
 msgstr ""
 
-#: cache.c:902
+#: cache.c:899
 msgid "cleared cache"
 msgstr ""
 
-#: cache.c:933 option.c:1112
-#, c-format
-msgid "cannot access directory %s: %s"
-msgstr ""
-
-#: cache.c:1053
+#: cache.c:960
 #, c-format
 msgid "%s is a CNAME, not giving it to the DHCP lease of %s"
 msgstr ""
 
-#: cache.c:1059
+#: cache.c:966
 #, 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:1132
+#: cache.c:1039
 #, c-format
 msgid "time %lu"
 msgstr ""
 
-#: cache.c:1133
+#: cache.c:1040
 #, c-format
 msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
 msgstr ""
 
-#: cache.c:1135
+#: cache.c:1042
 #, c-format
 msgid "queries forwarded %u, queries answered locally %u"
 msgstr ""
 
-#: cache.c:1158
+#: cache.c:1068
 #, c-format
 msgid "server %s#%d: queries sent %u, retried or failed %u"
 msgstr ""
@@ -83,7 +78,7 @@ msgstr ""
 msgid "failed to allocate memory"
 msgstr ""
 
-#: util.c:229 option.c:567
+#: util.c:229 option.c:573
 msgid "could not get memory"
 msgstr ""
 
@@ -102,821 +97,805 @@ msgstr ""
 msgid "infinite"
 msgstr ""
 
-#: option.c:240
+#: option.c:244
 msgid "Specify local address(es) to listen on."
 msgstr ""
 
-#: option.c:241
+#: option.c:245
 msgid "Return ipaddr for all hosts in specified domains."
 msgstr ""
 
-#: option.c:242
+#: option.c:246
 msgid "Fake reverse lookups for RFC1918 private address ranges."
 msgstr ""
 
-#: option.c:243
+#: option.c:247
 msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
 msgstr ""
 
-#: option.c:244
+#: option.c:248
 #, c-format
 msgid "Specify the size of the cache in entries (defaults to %s)."
 msgstr ""
 
-#: option.c:245
+#: option.c:249
 #, c-format
 msgid "Specify configuration file (defaults to %s)."
 msgstr ""
 
-#: option.c:246
+#: option.c:250
 msgid "Do NOT fork into the background: run in debug mode."
 msgstr ""
 
-#: option.c:247
+#: option.c:251
 msgid "Do NOT forward queries with no domain part."
 msgstr ""
 
-#: option.c:248
+#: option.c:252
 msgid "Return self-pointing MX records for local hosts."
 msgstr ""
 
-#: option.c:249
+#: option.c:253
 msgid "Expand simple names in /etc/hosts with domain-suffix."
 msgstr ""
 
-#: option.c:250
+#: option.c:254
 msgid "Don't forward spurious DNS requests from Windows hosts."
 msgstr ""
 
-#: option.c:251
+#: option.c:255
 msgid "Enable DHCP in the range given with lease duration."
 msgstr ""
 
-#: option.c:252
+#: option.c:256
 #, c-format
 msgid "Change to this group after startup (defaults to %s)."
 msgstr ""
 
-#: option.c:253
+#: option.c:257
 msgid "Set address or hostname for a specified machine."
 msgstr ""
 
-#: option.c:254
+#: option.c:258
 msgid "Read DHCP host specs from file."
 msgstr ""
 
-#: option.c:255
+#: option.c:259
 msgid "Read DHCP option specs from file."
 msgstr ""
 
-#: option.c:256
+#: option.c:260
 msgid "Evaluate conditional tag expression."
 msgstr ""
 
-#: option.c:257
+#: option.c:261
 #, c-format
 msgid "Do NOT load %s file."
 msgstr ""
 
-#: option.c:258
+#: option.c:262
 #, c-format
 msgid "Specify a hosts file to be read in addition to %s."
 msgstr ""
 
-#: option.c:259
+#: option.c:263
 msgid "Specify interface(s) to listen on."
 msgstr ""
 
-#: option.c:260
+#: option.c:264
 msgid "Specify interface(s) NOT to listen on."
 msgstr ""
 
-#: option.c:261
+#: option.c:265
 msgid "Map DHCP user class to tag."
 msgstr ""
 
-#: option.c:262
+#: option.c:266
 msgid "Map RFC3046 circuit-id to tag."
 msgstr ""
 
-#: option.c:263
+#: option.c:267
 msgid "Map RFC3046 remote-id to tag."
 msgstr ""
 
-#: option.c:264
+#: option.c:268
 msgid "Map RFC3993 subscriber-id to tag."
 msgstr ""
 
-#: option.c:265
+#: option.c:269
 msgid "Don't do DHCP for hosts with tag set."
 msgstr ""
 
-#: option.c:266
+#: option.c:270
 msgid "Force broadcast replies for hosts with tag set."
 msgstr ""
 
-#: option.c:267
+#: option.c:271
 msgid "Do NOT fork into the background, do NOT run in debug mode."
 msgstr ""
 
-#: option.c:268
+#: option.c:272
 msgid "Assume we are the only DHCP server on the local network."
 msgstr ""
 
-#: option.c:269
+#: option.c:273
 #, c-format
 msgid "Specify where to store DHCP leases (defaults to %s)."
 msgstr ""
 
-#: option.c:270
+#: option.c:274
 msgid "Return MX records for local hosts."
 msgstr ""
 
-#: option.c:271
+#: option.c:275
 msgid "Specify an MX record."
 msgstr ""
 
-#: option.c:272
+#: option.c:276
 msgid "Specify BOOTP options to DHCP server."
 msgstr ""
 
-#: option.c:273
+#: option.c:277
 #, c-format
 msgid "Do NOT poll %s file, reload only on SIGHUP."
 msgstr ""
 
-#: option.c:274
+#: option.c:278
 msgid "Do NOT cache failed search results."
 msgstr ""
 
-#: option.c:275
+#: option.c:279
 #, c-format
 msgid "Use nameservers strictly in the order given in %s."
 msgstr ""
 
-#: option.c:276
+#: option.c:280
 msgid "Specify options to be sent to DHCP clients."
 msgstr ""
 
-#: option.c:277
+#: option.c:281
 msgid "DHCP option sent even if the client does not request it."
 msgstr ""
 
-#: option.c:278
+#: option.c:282
 msgid "Specify port to listen for DNS requests on (defaults to 53)."
 msgstr ""
 
-#: option.c:279
+#: option.c:283
 #, c-format
 msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
 msgstr ""
 
-#: option.c:280
+#: option.c:284
 msgid "Log DNS queries."
 msgstr ""
 
-#: option.c:281
+#: option.c:285
 msgid "Force the originating port for upstream DNS queries."
 msgstr ""
 
-#: option.c:282
+#: option.c:286
 msgid "Do NOT read resolv.conf."
 msgstr ""
 
-#: option.c:283
+#: option.c:287
 #, c-format
 msgid "Specify path to resolv.conf (defaults to %s)."
 msgstr ""
 
-#: option.c:284
+#: option.c:288
 msgid "Specify address(es) of upstream servers with optional domains."
 msgstr ""
 
-#: option.c:285
+#: option.c:289
 msgid "Never forward queries to specified domains."
 msgstr ""
 
-#: option.c:286
+#: option.c:290
 msgid "Specify the domain to be assigned in DHCP leases."
 msgstr ""
 
-#: option.c:287
+#: option.c:291
 msgid "Specify default target in an MX record."
 msgstr ""
 
-#: option.c:288
+#: option.c:292
 msgid "Specify time-to-live in seconds for replies from /etc/hosts."
 msgstr ""
 
-#: option.c:289
+#: option.c:293
 msgid "Specify time-to-live in seconds for negative caching."
 msgstr ""
 
-#: option.c:290
+#: option.c:294
 msgid "Specify time-to-live in seconds for maximum TTL to send to clients."
 msgstr ""
 
-#: option.c:291
+#: option.c:295
 #, c-format
 msgid "Change to this user after startup. (defaults to %s)."
 msgstr ""
 
-#: option.c:292
+#: option.c:296
 msgid "Map DHCP vendor class to tag."
 msgstr ""
 
-#: option.c:293
+#: option.c:297
 msgid "Display dnsmasq version and copyright information."
 msgstr ""
 
-#: option.c:294
+#: option.c:298
 msgid "Translate IPv4 addresses from upstream servers."
 msgstr ""
 
-#: option.c:295
+#: option.c:299
 msgid "Specify a SRV record."
 msgstr ""
 
-#: option.c:296
+#: option.c:300
 msgid "Display this message. Use --help dhcp for known DHCP options."
 msgstr ""
 
-#: option.c:297
+#: option.c:301
 #, c-format
 msgid "Specify path of PID file (defaults to %s)."
 msgstr ""
 
-#: option.c:298
+#: option.c:302
 #, c-format
 msgid "Specify maximum number of DHCP leases (defaults to %s)."
 msgstr ""
 
-#: option.c:299
+#: option.c:303
 msgid "Answer DNS queries based on the interface a query was sent to."
 msgstr ""
 
-#: option.c:300
+#: option.c:304
 msgid "Specify TXT DNS record."
 msgstr ""
 
-#: option.c:301
+#: option.c:305
 msgid "Specify PTR DNS record."
 msgstr ""
 
-#: option.c:302
+#: option.c:306
 msgid "Give DNS name to IPv4 address of interface."
 msgstr ""
 
-#: option.c:303
+#: option.c:307
 msgid "Bind only to interfaces in use."
 msgstr ""
 
-#: option.c:304
+#: option.c:308
 #, c-format
 msgid "Read DHCP static host information from %s."
 msgstr ""
 
-#: option.c:305
+#: option.c:309
 msgid "Enable the DBus interface for setting upstream servers, etc."
 msgstr ""
 
-#: option.c:306
+#: option.c:310
 msgid "Do not provide DHCP on this interface, only provide DNS."
 msgstr ""
 
-#: option.c:307
+#: option.c:311
 msgid "Enable dynamic address allocation for bootp."
 msgstr ""
 
-#: option.c:308
+#: option.c:312
 msgid "Map MAC address (with wildcards) to option set."
 msgstr ""
 
-#: option.c:309
+#: option.c:313
 msgid "Treat DHCP requests on aliases as arriving from interface."
 msgstr ""
 
-#: option.c:310
+#: option.c:314
 msgid "Disable ICMP echo address checking in the DHCP server."
 msgstr ""
 
-#: option.c:311
+#: option.c:315
 msgid "Script to run on DHCP lease creation and destruction."
 msgstr ""
 
-#: option.c:312
+#: option.c:316
 msgid "Read configuration from all the files in this directory."
 msgstr ""
 
-#: option.c:313
+#: option.c:317
 msgid "Log to this syslog facility or file. (defaults to DAEMON)"
 msgstr ""
 
-#: option.c:314
+#: option.c:318
 msgid "Do not use leasefile."
 msgstr ""
 
-#: option.c:315
+#: option.c:319
 #, c-format
 msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
 msgstr ""
 
-#: option.c:316
+#: option.c:320
 #, c-format
 msgid "Clear DNS cache when reloading %s."
 msgstr ""
 
-#: option.c:317
+#: option.c:321
 msgid "Ignore hostnames provided by DHCP clients."
 msgstr ""
 
-#: option.c:318
+#: option.c:322
 msgid "Do NOT reuse filename and server fields for extra DHCP options."
 msgstr ""
 
-#: option.c:319
+#: option.c:323
 msgid "Enable integrated read-only TFTP server."
 msgstr ""
 
-#: option.c:320
+#: option.c:324
 msgid "Export files by TFTP only from the specified subtree."
 msgstr ""
 
-#: option.c:321
+#: option.c:325
 msgid "Add client IP address to tftp-root."
 msgstr ""
 
-#: option.c:322
+#: option.c:326
 msgid "Allow access only to files owned by the user running dnsmasq."
 msgstr ""
 
-#: option.c:323
+#: option.c:327
 #, c-format
 msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
 msgstr ""
 
-#: option.c:324
+#: option.c:328
 msgid "Disable the TFTP blocksize extension."
 msgstr ""
 
-#: option.c:325
+#: option.c:329
 msgid "Ephemeral port range for use by TFTP transfers."
 msgstr ""
 
-#: option.c:326
+#: option.c:330
 msgid "Extra logging for DHCP."
 msgstr ""
 
-#: option.c:327
+#: option.c:331
 msgid "Enable async. logging; optionally set queue length."
 msgstr ""
 
-#: option.c:328
+#: option.c:332
 msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
 msgstr ""
 
-#: option.c:329
+#: option.c:333
 msgid "Allow rebinding of 127.0.0.0/8, for RBL servers."
 msgstr ""
 
-#: option.c:330
+#: option.c:334
 msgid "Inhibit DNS-rebind protection on this domain."
 msgstr ""
 
-#: option.c:331
+#: option.c:335
 msgid "Always perform DNS queries to all servers."
 msgstr ""
 
-#: option.c:332
+#: option.c:336
 msgid "Set tag if client includes matching option in request."
 msgstr ""
 
-#: option.c:333
+#: option.c:337
 msgid "Use alternative ports for DHCP."
 msgstr ""
 
-#: option.c:334
+#: option.c:338
 msgid "Run lease-change script as this user."
 msgstr ""
 
-#: option.c:335
+#: option.c:339
 msgid "Specify NAPTR DNS record."
 msgstr ""
 
-#: option.c:336
+#: option.c:340
 msgid "Specify lowest port available for DNS query transmission."
 msgstr ""
 
-#: option.c:337
+#: option.c:341
 msgid "Use only fully qualified domain names for DHCP clients."
 msgstr ""
 
-#: option.c:338
+#: option.c:342
 msgid "Generate hostnames based on MAC address for nameless clients."
 msgstr ""
 
-#: option.c:339
+#: option.c:343
 msgid "Use these DHCP relays as full proxies."
 msgstr ""
 
-#: option.c:340
+#: option.c:344
 msgid "Specify alias name for LOCAL DNS name."
 msgstr ""
 
-#: option.c:341
+#: option.c:345
 msgid "Prompt to send to PXE clients."
 msgstr ""
 
-#: option.c:342
+#: option.c:346
 msgid "Boot service for PXE menu."
 msgstr ""
 
-#: option.c:343
+#: option.c:347
 msgid "Check configuration syntax."
 msgstr ""
 
-#: option.c:632
+#: option.c:348
+msgid "Add requestor's MAC address to forwarded DNS queries"
+msgstr ""
+
+#: option.c:349
+msgid "Proxy DNSSEC validation results from upstream nameservers"
+msgstr ""
+
+#: option.c:638
 #, c-format
 msgid ""
 "Usage: dnsmasq [options]\n"
 "\n"
 msgstr ""
 
-#: option.c:634
+#: option.c:640
 #, c-format
 msgid "Use short options only on the command line.\n"
 msgstr ""
 
-#: option.c:636
+#: option.c:642
 #, c-format
 msgid "Valid options are:\n"
 msgstr ""
 
-#: option.c:677
+#: option.c:683
 #, c-format
 msgid "Known DHCP options:\n"
 msgstr ""
 
-#: option.c:781
+#: option.c:798
 msgid "bad dhcp-option"
 msgstr ""
 
-#: option.c:838
+#: option.c:860
 msgid "bad IP address"
 msgstr ""
 
-#: option.c:941
+#: option.c:966
 msgid "bad domain in dhcp-option"
 msgstr ""
 
-#: option.c:1007
+#: option.c:1032
 msgid "dhcp-option too long"
 msgstr ""
 
-#: option.c:1016
+#: option.c:1041
 msgid "illegal dhcp-match"
 msgstr ""
 
-#: option.c:1052
+#: option.c:1085
 msgid "illegal repeated flag"
 msgstr ""
 
-#: option.c:1060
+#: option.c:1093
 msgid "illegal repeated keyword"
 msgstr ""
 
-#: option.c:1143 tftp.c:413
+#: option.c:1145 option.c:3024
 #, c-format
-msgid "cannot access %s: %s"
-msgstr ""
-
-#: option.c:1188
-msgid "only one dhcp-hostsfile allowed"
+msgid "cannot access directory %s: %s"
 msgstr ""
 
-#: option.c:1195
-msgid "only one dhcp-optsfile allowed"
+#: option.c:1176 tftp.c:460
+#, c-format
+msgid "cannot access %s: %s"
 msgstr ""
 
-#: option.c:1240
+#: option.c:1259
 msgid "bad MX preference"
 msgstr ""
 
-#: option.c:1245
+#: option.c:1264
 msgid "bad MX name"
 msgstr ""
 
-#: option.c:1259
+#: option.c:1278
 msgid "bad MX target"
 msgstr ""
 
-#: option.c:1269
+#: option.c:1288
 msgid "cannot run scripts under uClinux"
 msgstr ""
 
-#: option.c:1271
+#: option.c:1290
 msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts"
 msgstr ""
 
-#: option.c:1516 option.c:1520
+#: option.c:1591 option.c:1595
 msgid "bad port"
 msgstr ""
 
-#: option.c:1539 option.c:1564
+#: option.c:1614 option.c:1639
 msgid "interface binding not supported"
 msgstr ""
 
-#: option.c:1710
+#: option.c:1785
 msgid "bad port range"
 msgstr ""
 
-#: option.c:1727
+#: option.c:1802
 msgid "bad bridge-interface"
 msgstr ""
 
-#: option.c:1769
+#: option.c:1844
 msgid "bad dhcp-range"
 msgstr ""
 
-#: option.c:1797
+#: option.c:1872
 msgid "only one tag allowed"
 msgstr ""
 
-#: option.c:1844
+#: option.c:1919
 msgid "inconsistent DHCP range"
 msgstr ""
 
-#: option.c:2019
+#: option.c:2013 option.c:2039
+msgid "bad hex constant"
+msgstr ""
+
+#: option.c:2101
 msgid "bad DHCP host name"
 msgstr ""
 
-#: option.c:2100
+#: option.c:2182
 msgid "bad tag-if"
 msgstr ""
 
-#: option.c:2374 option.c:2673
+#: option.c:2461 option.c:2746
 msgid "invalid port number"
 msgstr ""
 
-#: option.c:2436
+#: option.c:2523
 msgid "bad dhcp-proxy address"
 msgstr ""
 
-#: option.c:2476
+#: option.c:2563
 msgid "invalid alias range"
 msgstr ""
 
-#: option.c:2489
+#: option.c:2576
 msgid "bad interface name"
 msgstr ""
 
-#: option.c:2514
+#: option.c:2601
 msgid "bad CNAME"
 msgstr ""
 
-#: option.c:2519
+#: option.c:2606
 msgid "duplicate CNAME"
 msgstr ""
 
-#: option.c:2539
+#: option.c:2626
 msgid "bad PTR record"
 msgstr ""
 
-#: option.c:2570
+#: option.c:2657
 msgid "bad NAPTR record"
 msgstr ""
 
-#: option.c:2595
-msgid "TXT record string too long"
-msgstr ""
-
-#: option.c:2643
+#: option.c:2689
 msgid "bad TXT record"
 msgstr ""
 
-#: option.c:2659
+#: option.c:2732
 msgid "bad SRV record"
 msgstr ""
 
-#: option.c:2666
+#: option.c:2739
 msgid "bad SRV target"
 msgstr ""
 
-#: option.c:2680
+#: option.c:2753
 msgid "invalid priority"
 msgstr ""
 
-#: option.c:2687
+#: option.c:2760
 msgid "invalid weight"
 msgstr ""
 
-#: option.c:2706
+#: option.c:2779
 msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DBus support)"
 msgstr ""
 
-#: option.c:2748
-#, c-format
-msgid "files nested too deep in %s"
-msgstr ""
-
-#: option.c:2756 tftp.c:567
-#, c-format
-msgid "cannot read %s: %s"
-msgstr ""
-
-#: option.c:2813
+#: option.c:2843
 msgid "missing \""
 msgstr ""
 
-#: option.c:2872
+#: option.c:2902
 msgid "bad option"
 msgstr ""
 
-#: option.c:2874
+#: option.c:2904
 msgid "extraneous parameter"
 msgstr ""
 
-#: option.c:2876
+#: option.c:2906
 msgid "missing parameter"
 msgstr ""
 
-#: option.c:2880
+#: option.c:2910
 msgid "error"
 msgstr ""
 
-#: option.c:2885
+#: option.c:2915
 #, c-format
 msgid "%s at line %d of %%s"
 msgstr ""
 
-#: option.c:2942 option.c:2973
+#: option.c:2979 tftp.c:624
+#, c-format
+msgid "cannot read %s: %s"
+msgstr ""
+
+#: option.c:3145 option.c:3181
 #, c-format
 msgid "read %s"
 msgstr ""
 
-#: option.c:3045
+#: option.c:3229
+msgid "junk found in command line"
+msgstr ""
+
+#: option.c:3258
 #, c-format
 msgid "Dnsmasq version %s  %s\n"
 msgstr ""
 
-#: option.c:3046
+#: option.c:3259
 #, c-format
 msgid ""
 "Compile time options %s\n"
 "\n"
 msgstr ""
 
-#: option.c:3047
+#: option.c:3260
 #, c-format
 msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
 msgstr ""
 
-#: option.c:3048
+#: option.c:3261
 #, c-format
 msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
 msgstr ""
 
-#: option.c:3049
+#: option.c:3262
 #, c-format
 msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
 msgstr ""
 
-#: option.c:3060
+#: option.c:3273
 msgid "try --help"
 msgstr ""
 
-#: option.c:3062
+#: option.c:3275
 msgid "try -w"
 msgstr ""
 
-#: option.c:3065
+#: option.c:3278
 #, c-format
 msgid "bad command line options: %s"
 msgstr ""
 
-#: option.c:3106
+#: option.c:3319
 #, c-format
 msgid "cannot get host-name: %s"
 msgstr ""
 
-#: option.c:3134
+#: option.c:3347
 msgid "only one resolv.conf file allowed in no-poll mode."
 msgstr ""
 
-#: option.c:3144
+#: option.c:3357
 msgid "must have exactly one resolv.conf to read domain from."
 msgstr ""
 
-#: option.c:3147 network.c:813 dhcp.c:814
+#: option.c:3360 network.c:848 dhcp.c:814
 #, c-format
 msgid "failed to read %s: %s"
 msgstr ""
 
-#: option.c:3164
+#: option.c:3377
 #, c-format
 msgid "no search directive found in %s"
 msgstr ""
 
-#: option.c:3185
+#: option.c:3398
 msgid "there must be a default domain when --dhcp-fqdn is set"
 msgstr ""
 
-#: option.c:3189
+#: option.c:3402
 msgid "syntax check OK"
 msgstr ""
 
-#: forward.c:427
+#: forward.c:461
 #, c-format
 msgid "nameserver %s refused to do a recursive query"
 msgstr ""
 
-#: forward.c:455
+#: forward.c:489
 #, c-format
 msgid "possible DNS-rebind attack detected: %s"
 msgstr ""
 
-#: network.c:110
+#: network.c:171
 #, c-format
 msgid "unknown interface %s in bridge-interface"
 msgstr ""
 
-#: network.c:467 dnsmasq.c:188
-#, c-format
-msgid "failed to create listening socket: %s"
-msgstr ""
-
-#: network.c:474
-#, c-format
-msgid "failed to set IPV6 options on listening socket: %s"
-msgstr ""
-
-#: network.c:500
-#, c-format
-msgid "failed to bind listening socket for %s: %s"
-msgstr ""
-
-#: network.c:505
-#, c-format
-msgid "failed to listen on socket: %s"
-msgstr ""
-
-#: network.c:517
+#: network.c:380
 #, c-format
-msgid "failed to create TFTP socket: %s"
+msgid "failed to create listening socket for %s: %s"
 msgstr ""
 
-#: network.c:711
+#: network.c:746
 #, c-format
 msgid "failed to bind server socket for %s: %s"
 msgstr ""
 
-#: network.c:748
+#: network.c:783
 #, c-format
 msgid "ignoring nameserver %s - local interface"
 msgstr ""
 
-#: network.c:759
+#: network.c:794
 #, c-format
 msgid "ignoring nameserver %s - cannot make/bind socket: %s"
 msgstr ""
 
-#: network.c:776
+#: network.c:811
 msgid "unqualified"
 msgstr ""
 
-#: network.c:776
+#: network.c:811
 msgid "names"
 msgstr ""
 
-#: network.c:778
+#: network.c:813
 msgid "default"
 msgstr ""
 
-#: network.c:780
+#: network.c:815
 msgid "domain"
 msgstr ""
 
-#: network.c:783
+#: network.c:818
 #, c-format
 msgid "using local addresses only for %s %s"
 msgstr ""
 
-#: network.c:785
+#: network.c:820
 #, c-format
 msgid "using standard nameservers for %s %s"
 msgstr ""
 
-#: network.c:787
+#: network.c:822
 #, c-format
 msgid "using nameserver %s#%d for %s %s"
 msgstr ""
 
-#: network.c:790
+#: network.c:825
 #, c-format
 msgid "using nameserver %s#%d(via %s)"
 msgstr ""
 
-#: network.c:792
+#: network.c:827
 #, c-format
 msgid "using nameserver %s#%d"
 msgstr ""
@@ -944,181 +923,181 @@ msgstr ""
 msgid "no interface with address %s"
 msgstr ""
 
-#: dnsmasq.c:200 dnsmasq.c:671
+#: dnsmasq.c:199 dnsmasq.c:670
 #, c-format
 msgid "DBus error: %s"
 msgstr ""
 
-#: dnsmasq.c:203
+#: dnsmasq.c:202
 msgid "DBus not available: set HAVE_DBUS in src/config.h"
 msgstr ""
 
-#: dnsmasq.c:229
+#: dnsmasq.c:228
 #, c-format
 msgid "unknown user or group: %s"
 msgstr ""
 
-#: dnsmasq.c:284
+#: dnsmasq.c:283
 #, c-format
 msgid "cannot chdir to filesystem root: %s"
 msgstr ""
 
-#: dnsmasq.c:448
+#: dnsmasq.c:447
 #, c-format
 msgid "started, version %s DNS disabled"
 msgstr ""
 
-#: dnsmasq.c:450
+#: dnsmasq.c:449
 #, c-format
 msgid "started, version %s cachesize %d"
 msgstr ""
 
-#: dnsmasq.c:452
+#: dnsmasq.c:451
 #, c-format
 msgid "started, version %s cache disabled"
 msgstr ""
 
-#: dnsmasq.c:454
+#: dnsmasq.c:453
 #, c-format
 msgid "compile time options: %s"
 msgstr ""
 
-#: dnsmasq.c:460
+#: dnsmasq.c:459
 msgid "DBus support enabled: connected to system bus"
 msgstr ""
 
-#: dnsmasq.c:462
+#: dnsmasq.c:461
 msgid "DBus support enabled: bus connection pending"
 msgstr ""
 
-#: dnsmasq.c:467
+#: dnsmasq.c:466
 #, c-format
 msgid "warning: failed to change owner of %s: %s"
 msgstr ""
 
-#: dnsmasq.c:471
+#: dnsmasq.c:470
 msgid "setting --bind-interfaces option because of OS limitations"
 msgstr ""
 
-#: dnsmasq.c:476
+#: dnsmasq.c:475
 #, c-format
 msgid "warning: interface %s does not currently exist"
 msgstr ""
 
-#: dnsmasq.c:481
+#: dnsmasq.c:480
 msgid "warning: ignoring resolv-file flag because no-resolv is set"
 msgstr ""
 
-#: dnsmasq.c:484
+#: dnsmasq.c:483
 msgid "warning: no upstream servers configured"
 msgstr ""
 
-#: dnsmasq.c:488
+#: dnsmasq.c:487
 #, c-format
 msgid "asynchronous logging enabled, queue limit is %d messages"
 msgstr ""
 
-#: dnsmasq.c:501
+#: dnsmasq.c:500
 #, c-format
 msgid "DHCP, static leases only on %.0s%s, lease time %s"
 msgstr ""
 
-#: dnsmasq.c:503
+#: dnsmasq.c:502
 #, c-format
 msgid "DHCP, proxy on subnet %.0s%s%.0s"
 msgstr ""
 
-#: dnsmasq.c:504
+#: dnsmasq.c:503
 #, c-format
 msgid "DHCP, IP range %s -- %s, lease time %s"
 msgstr ""
 
-#: dnsmasq.c:519
+#: dnsmasq.c:518
 msgid "root is "
 msgstr ""
 
-#: dnsmasq.c:519
+#: dnsmasq.c:518
 msgid "enabled"
 msgstr ""
 
-#: dnsmasq.c:521
+#: dnsmasq.c:520
 msgid "secure mode"
 msgstr ""
 
-#: dnsmasq.c:547
+#: dnsmasq.c:546
 #, c-format
 msgid "restricting maximum simultaneous TFTP transfers to %d"
 msgstr ""
 
-#: dnsmasq.c:673
+#: dnsmasq.c:672
 msgid "connected to system DBus"
 msgstr ""
 
-#: dnsmasq.c:768
+#: dnsmasq.c:767
 #, c-format
 msgid "cannot fork into background: %s"
 msgstr ""
 
-#: dnsmasq.c:771
+#: dnsmasq.c:770
 #, c-format
 msgid "failed to create helper: %s"
 msgstr ""
 
-#: dnsmasq.c:774
+#: dnsmasq.c:773
 #, c-format
 msgid "setting capabilities failed: %s"
 msgstr ""
 
-#: dnsmasq.c:778
+#: dnsmasq.c:777
 #, c-format
 msgid "failed to change user-id to %s: %s"
 msgstr ""
 
-#: dnsmasq.c:783
+#: dnsmasq.c:782
 #, c-format
 msgid "failed to change group-id to %s: %s"
 msgstr ""
 
-#: dnsmasq.c:786
+#: dnsmasq.c:785
 #, c-format
 msgid "failed to open pidfile %s: %s"
 msgstr ""
 
-#: dnsmasq.c:789
+#: dnsmasq.c:788
 #, c-format
 msgid "cannot open %s: %s"
 msgstr ""
 
-#: dnsmasq.c:844
+#: dnsmasq.c:843
 #, c-format
 msgid "child process killed by signal %d"
 msgstr ""
 
-#: dnsmasq.c:848
+#: dnsmasq.c:847
 #, c-format
 msgid "child process exited with status %d"
 msgstr ""
 
-#: dnsmasq.c:852
+#: dnsmasq.c:851
 #, c-format
 msgid "failed to execute %s: %s"
 msgstr ""
 
-#: dnsmasq.c:896
+#: dnsmasq.c:895
 msgid "exiting on receipt of SIGTERM"
 msgstr ""
 
-#: dnsmasq.c:924
+#: dnsmasq.c:923
 #, c-format
 msgid "failed to access %s: %s"
 msgstr ""
 
-#: dnsmasq.c:954
+#: dnsmasq.c:953
 #, c-format
 msgid "reading %s"
 msgstr ""
 
-#: dnsmasq.c:965
+#: dnsmasq.c:964
 #, c-format
 msgid "no servers found in %s, will retry"
 msgstr ""
@@ -1239,19 +1218,19 @@ msgstr ""
 msgid "disabled"
 msgstr ""
 
-#: rfc2131.c:466 rfc2131.c:969 rfc2131.c:1335
+#: rfc2131.c:466 rfc2131.c:978 rfc2131.c:1350
 msgid "ignored"
 msgstr ""
 
-#: rfc2131.c:481 rfc2131.c:1183
+#: rfc2131.c:481 rfc2131.c:1197
 msgid "address in use"
 msgstr ""
 
-#: rfc2131.c:495 rfc2131.c:1023
+#: rfc2131.c:495 rfc2131.c:1032
 msgid "no address available"
 msgstr ""
 
-#: rfc2131.c:502 rfc2131.c:1146
+#: rfc2131.c:502 rfc2131.c:1160
 msgid "wrong network"
 msgstr ""
 
@@ -1259,7 +1238,7 @@ msgstr ""
 msgid "no address configured"
 msgstr ""
 
-#: rfc2131.c:522 rfc2131.c:1196
+#: rfc2131.c:522 rfc2131.c:1210
 msgid "no leases left"
 msgstr ""
 
@@ -1282,118 +1261,118 @@ msgstr ""
 msgid "PXE BIS not supported"
 msgstr ""
 
-#: rfc2131.c:939
+#: rfc2131.c:948
 #, c-format
 msgid "disabling DHCP static address %s for %s"
 msgstr ""
 
-#: rfc2131.c:960
+#: rfc2131.c:969
 msgid "unknown lease"
 msgstr ""
 
-#: rfc2131.c:992
+#: rfc2131.c:1001
 #, c-format
 msgid "not using configured address %s because it is leased to %s"
 msgstr ""
 
-#: rfc2131.c:1002
+#: rfc2131.c:1011
 #, c-format
 msgid "not using configured address %s because it is in use by the server or relay"
 msgstr ""
 
-#: rfc2131.c:1005
+#: rfc2131.c:1014
 #, c-format
 msgid "not using configured address %s because it was previously declined"
 msgstr ""
 
-#: rfc2131.c:1021 rfc2131.c:1189
+#: rfc2131.c:1030 rfc2131.c:1203
 msgid "no unique-id"
 msgstr ""
 
-#: rfc2131.c:1090
+#: rfc2131.c:1099
 msgid "wrong server-ID"
 msgstr ""
 
-#: rfc2131.c:1108
+#: rfc2131.c:1117
 msgid "wrong address"
 msgstr ""
 
-#: rfc2131.c:1121
+#: rfc2131.c:1135
 msgid "lease not found"
 msgstr ""
 
-#: rfc2131.c:1154
+#: rfc2131.c:1168
 msgid "address not available"
 msgstr ""
 
-#: rfc2131.c:1165
+#: rfc2131.c:1179
 msgid "static lease available"
 msgstr ""
 
-#: rfc2131.c:1169
+#: rfc2131.c:1183
 msgid "address reserved"
 msgstr ""
 
-#: rfc2131.c:1177
+#: rfc2131.c:1191
 #, c-format
 msgid "abandoning lease to %s of %s"
 msgstr ""
 
-#: rfc2131.c:1757
+#: rfc2131.c:1772
 #, c-format
 msgid "%u tags: %s"
 msgstr ""
 
-#: rfc2131.c:1770
+#: rfc2131.c:1785
 #, c-format
 msgid "%u bootfile name: %s"
 msgstr ""
 
-#: rfc2131.c:1779
+#: rfc2131.c:1794
 #, c-format
 msgid "%u server name: %s"
 msgstr ""
 
-#: rfc2131.c:1793
+#: rfc2131.c:1808
 #, c-format
 msgid "%u next server: %s"
 msgstr ""
 
-#: rfc2131.c:1796
+#: rfc2131.c:1811
 #, c-format
 msgid "%u broadcast response"
 msgstr ""
 
-#: rfc2131.c:1859
+#: rfc2131.c:1874
 #, c-format
 msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
 msgstr ""
 
-#: rfc2131.c:2105
+#: rfc2131.c:2120
 msgid "PXE menu too large"
 msgstr ""
 
-#: rfc2131.c:2218
+#: rfc2131.c:2233
 #, c-format
 msgid "Ignoring domain %s for DHCP host name %s"
 msgstr ""
 
-#: rfc2131.c:2236
+#: rfc2131.c:2251
 #, c-format
 msgid "%u requested options: %s"
 msgstr ""
 
-#: rfc2131.c:2503
+#: rfc2131.c:2518
 #, c-format
 msgid "cannot send RFC3925 option: too many options for enterprise number %d"
 msgstr ""
 
-#: netlink.c:66
+#: netlink.c:70
 #, c-format
 msgid "cannot create netlink socket: %s"
 msgstr ""
 
-#: netlink.c:265
+#: netlink.c:288
 #, c-format
 msgid "netlink returns error: %s"
 msgstr ""
@@ -1410,45 +1389,45 @@ msgstr ""
 msgid "could not register a DBus message handler"
 msgstr ""
 
-#: bpf.c:150
+#: bpf.c:217
 #, c-format
 msgid "cannot create DHCP BPF socket: %s"
 msgstr ""
 
-#: bpf.c:178
+#: bpf.c:245
 #, c-format
 msgid "DHCP request for unsupported hardware type (%d) received on %s"
 msgstr ""
 
-#: tftp.c:233
+#: tftp.c:281
 msgid "unable to get free port for TFTP"
 msgstr ""
 
-#: tftp.c:248
+#: tftp.c:296
 #, c-format
 msgid "unsupported request from %s"
 msgstr ""
 
-#: tftp.c:336
-#, c-format
-msgid "sent %s to %s"
-msgstr ""
-
-#: tftp.c:359
+#: tftp.c:406
 #, c-format
 msgid "file %s not found"
 msgstr ""
 
-#: tftp.c:470
+#: tftp.c:522
 #, c-format
 msgid "error %d %s received from %s"
 msgstr ""
 
-#: tftp.c:501
+#: tftp.c:554
 #, c-format
 msgid "failed sending %s to %s"
 msgstr ""
 
+#: tftp.c:568
+#, c-format
+msgid "sent %s to %s"
+msgstr ""
+
 #: log.c:173
 #, c-format
 msgid "overflow: %d log entries lost"
@@ -1459,6 +1438,6 @@ msgstr ""
 msgid "log failed: %s"
 msgstr ""
 
-#: log.c:431
+#: log.c:436
 msgid "FAILED to start up"
 msgstr ""
index 694d1ecd83e31f4e77545e9b07fd79a46f0790b0..3a73e457e9b3b98c0d9392fa611ef930d9fff3ad 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -4,71 +4,66 @@
 # Translation completed by Gildas Le Nadan <3ntr0p13@gmail.com>
 msgid ""
 msgstr ""
-"Project-Id-Version: dnsmasq 2.53\n"
+"Project-Id-Version: dnsmasq 2.56\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2009-06-18 12:24+0100\n"
-"PO-Revision-Date: 2010-05-21 11:39+0100\n"
+"PO-Revision-Date: 2011-02-10 20:40+0100\n"
 "Last-Translator:  Gildas Le Nadan <3ntr0p13@gmail.com>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=ISO-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
 
-#: cache.c:764
+#: cache.c:761
 #, c-format
 msgid "failed to load names from %s: %s"
 msgstr "Impossible de charger les noms Ã  partir de %s : %s"
 
-#: cache.c:798 dhcp.c:865
+#: cache.c:795 dhcp.c:865
 #, c-format
 msgid "bad address at %s line %d"
 msgstr "mauvaise adresse dans %s ligne %d"
 
-#: cache.c:856 dhcp.c:881
+#: cache.c:853 dhcp.c:881
 #, c-format
 msgid "bad name at %s line %d"
 msgstr "mauvais nom dans %s ligne %d"
 
-#: cache.c:863 dhcp.c:956
+#: cache.c:860 dhcp.c:956
 #, c-format
 msgid "read %s - %d addresses"
 msgstr "lecture %s - %d adresses"
 
-#: cache.c:902
+#: cache.c:899
 msgid "cleared cache"
 msgstr "cache vidé"
 
-#: cache.c:933 option.c:1112
-#, c-format
-msgid "cannot access directory %s: %s"
-msgstr "Ne peut pas lire le répertoire %s : %s"
-
-#: cache.c:1053
+#: cache.c:960
 #, 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:1059
+#: cache.c:966
 #, 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:1132
+#: cache.c:1039
 #, c-format
 msgid "time %lu"
 msgstr "horodatage %lu"
 
-#: cache.c:1133
+#: cache.c:1040
 #, 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:1135
+#: cache.c:1042
 #, c-format
 msgid "queries forwarded %u, queries answered locally %u"
 msgstr "requêtes transmises %u, requêtes résolues localement %u"
 
-#: cache.c:1158
+#: cache.c:1068
 #, 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"
@@ -82,7 +77,7 @@ msgstr "impossible d'initialiser le g
 msgid "failed to allocate memory"
 msgstr "impossible d'allouer la mémoire"
 
-#: util.c:229 option.c:567
+#: util.c:229 option.c:573
 msgid "could not get memory"
 msgstr "impossible d'allouer de la mémoire"
 
@@ -101,460 +96,462 @@ msgstr "impossible d'allouer %d octets"
 msgid "infinite"
 msgstr "illimité(e)"
 
-#: option.c:240
+#: option.c:244
 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:241
+#: option.c:245
 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:242
+#: option.c:246
 msgid "Fake reverse lookups for RFC1918 private address ranges."
 msgstr "Traduction inverse truquée pour la plage d'adresse privée RFC1918"
 
-#: option.c:243
+#: option.c:247
 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:244
+#: option.c:248
 #, 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:245
+#: option.c:249
 #, c-format
 msgid "Specify configuration file (defaults to %s)."
 msgstr "Spécifie le nom du fichier de configuration (par défaut : %s)"
 
-#: option.c:246
+#: option.c:250
 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:247
+#: option.c:251
 msgid "Do NOT forward queries with no domain part."
 msgstr "Ne retransmet pas les requêtes qui n'ont pas de domaine."
 
-#: option.c:248
+#: option.c:252
 msgid "Return self-pointing MX records for local hosts."
 msgstr "Retourne les champs MX pour les machines locales."
 
-#: option.c:249
+#: option.c:253
 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:250
+#: option.c:254
 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:251
+#: option.c:255
 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:252
+#: option.c:256
 #, 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:253
+#: option.c:257
 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:254
-#, fuzzy
+#: option.c:258
 msgid "Read DHCP host specs from file."
 msgstr "Lecture des spécifications d'hôtes DHCP Ã  partir du fichier"
 
-#: option.c:255
-#, fuzzy
+#: option.c:259
 msgid "Read DHCP option specs from file."
 msgstr "Lecture des options DHCP Ã  partir du fichier"
 
-#: option.c:256
-#, fuzzy
+#: option.c:260
 msgid "Evaluate conditional tag expression."
 msgstr "Expression d'évaluation conditionnelle d'étiquette"
 
-#: option.c:257
+#: option.c:261
 #, c-format
 msgid "Do NOT load %s file."
 msgstr "Ne charge PAS le fichier %s."
 
-#: option.c:258
+#: option.c:262
 #, 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:259
+#: option.c:263
 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:260
+#: option.c:264
 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:261
+#: option.c:265
 msgid "Map DHCP user class to tag."
 msgstr "Associe les classes d'utilisateurs ('user class') DHCP aux options."
 
-#: option.c:262
+#: option.c:266
 msgid "Map RFC3046 circuit-id to tag."
 msgstr "Associe les identifiants de circuits RFC3046 ('circuit-id') aux options"
 
-#: option.c:263
+#: option.c:267
 msgid "Map RFC3046 remote-id to tag."
 msgstr "Associe les identifiants distants RFC3046 ('remote-id') aux options"
 
-#: option.c:264
+#: option.c:268
 msgid "Map RFC3993 subscriber-id to tag."
 msgstr "Associe les identifiants de souscripteurs RFC3993 ('subscriber-id') aux options"
 
 #
-#: option.c:265
+#: option.c:269
 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:266
+#: option.c:270
 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:267
+#: option.c:271
 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:268
+#: option.c:272
 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:269
+#: option.c:273
 #, 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:270
+#: option.c:274
 msgid "Return MX records for local hosts."
 msgstr "Retourne les champs MX pour les machines locales."
 
-#: option.c:271
+#: option.c:275
 msgid "Specify an MX record."
 msgstr "Spécifie un champ MX."
 
-#: option.c:272
+#: option.c:276
 msgid "Specify BOOTP options to DHCP server."
 msgstr "Spécifie les options BOOTP pour le serveur DHCP."
 
-#: option.c:273
+#: option.c:277
 #, 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:274
+#: option.c:278
 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:275
+#: option.c:279
 #, 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:276
+#: option.c:280
 msgid "Specify options to be sent to DHCP clients."
 msgstr "Options supplémentaires Ã  associer aux clients DHCP."
 
-#: option.c:277
+#: option.c:281
 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:278
+#: option.c:282
 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:279
+#: option.c:283
 #, 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:280
+#: option.c:284
 msgid "Log DNS queries."
 msgstr "Enregistre les requêtes DNS dans un journal d'activité."
 
 #
-#: option.c:281
+#: option.c:285
 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:282
+#: option.c:286
 msgid "Do NOT read resolv.conf."
 msgstr "Ne pas lire le fichier resolv.conf."
 
-#: option.c:283
+#: option.c:287
 #, 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:284
+#: option.c:288
 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:285
+#: option.c:289
 msgid "Never forward queries to specified domains."
 msgstr "Ne jamais retransmettre les requêtes pour les domaines spécifiés."
 
-#: option.c:286
+#: option.c:290
 msgid "Specify the domain to be assigned in DHCP leases."
 msgstr "Spécifie le domaine qui doit etre assigné aux baux DHCP."
 
-#: option.c:287
+#: option.c:291
 msgid "Specify default target in an MX record."
 msgstr "Spécifie la cible par défaut dans un champ MX."
 
-#: option.c:288
+#: option.c:292
 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:289
+#: option.c:293
 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:290
-#, fuzzy
+#: option.c:294
 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:291
+#: option.c:295
 #, 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:292
+#: option.c:296
 msgid "Map DHCP vendor class to tag."
 msgstr "Associe les classes de fournisseurs ('vendor class') DHCP aux options."
 
-#: option.c:293
+#: option.c:297
 msgid "Display dnsmasq version and copyright information."
 msgstr "Affiche la version de Dnsmasq et les informations liées au copyright."
 
-#: option.c:294
+#: option.c:298
 msgid "Translate IPv4 addresses from upstream servers."
 msgstr "Traduit les adresses IPV4 des serveurs amonts."
 
-#: option.c:295
+#: option.c:299
 msgid "Specify a SRV record."
 msgstr "Spécifie un champ SRV."
 
-#: option.c:296
+#: option.c:300
 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:297
+#: option.c:301
 #, 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:298
+#: option.c:302
 #, 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:299
+#: option.c:303
 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:300
+#: option.c:304
 msgid "Specify TXT DNS record."
 msgstr "Spécifie un champ DNS TXT"
 
 #
-#: option.c:301
+#: option.c:305
 msgid "Specify PTR DNS record."
 msgstr "Spécifie un champ DNS PTR"
 
-#: option.c:302
+#: option.c:306
 msgid "Give DNS name to IPv4 address of interface."
 msgstr "Donne le nom DNS pour l'adresse IPv4 de l'interface."
 
-#: option.c:303
+#: option.c:307
 msgid "Bind only to interfaces in use."
 msgstr "Association uniquement aux interfaces réseau actuellement actives."
 
-#: option.c:304
+#: option.c:308
 #, c-format
 msgid "Read DHCP static host information from %s."
 msgstr "Lecture des informations de DHCP statique Ã  partir de %s."
 
-#: option.c:305
+#: option.c:309
 msgid "Enable the DBus interface for setting upstream servers, etc."
 msgstr "Autorise l'interface DBus pour la configuration des serveurs amonts, etc."
 
-#: option.c:306
+#: option.c:310
 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:307
+#: option.c:311
 msgid "Enable dynamic address allocation for bootp."
 msgstr "Autorise l'allocation dynamique d'adresse pour bootp."
 
 #
-#: option.c:308
+#: option.c:312
 msgid "Map MAC address (with wildcards) to option set."
 msgstr "Associe l'adresse MAC (avec les jokers) aux options."
 
-#: option.c:309
+#: option.c:313
 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:310
+#: option.c:314
 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:311
+#: option.c:315
 msgid "Script to run on DHCP lease creation and destruction."
 msgstr "Script Ã  exécuter lors de la création ou destruction de bail DHCP."
 
-#: option.c:312
+#: option.c:316
 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:313
+#: option.c:317
 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:314
+#: option.c:318
 msgid "Do not use leasefile."
 msgstr "Ne pas utiliser de fichier de baux."
 
-#: option.c:315
+#: option.c:319
 #, 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:316
+#: option.c:320
 #, c-format
 msgid "Clear DNS cache when reloading %s."
 msgstr "Vider le cache DNS lors du rechargement de %s."
 
-#: option.c:317
+#: option.c:321
 msgid "Ignore hostnames provided by DHCP clients."
 msgstr "Ignorer les noms d'hôtes fournis par les clients DHCP"
 
-#: option.c:318
+#: option.c:322
 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:319
+#: option.c:323
 msgid "Enable integrated read-only TFTP server."
 msgstr "Activer le server TFTP intégré (fonctionnant en lecture seulement)"
 
-#: option.c:320
+#: option.c:324
 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:321
+#: option.c:325
 msgid "Add client IP address to tftp-root."
 msgstr "Ajouter les adresses IP clientes Ã  la racine tftp ('tftp-root')."
 
-#: option.c:322
+#: option.c:326
 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:323
+#: option.c:327
 #, 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:324
+#: option.c:328
 msgid "Disable the TFTP blocksize extension."
 msgstr "Désactivation de l'extension TFTP Â« taille de bloc Â»"
 
-#: option.c:325
+#: option.c:329
 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:326
+#: option.c:330
 msgid "Extra logging for DHCP."
 msgstr "Traces supplémentaires pour le DHCP."
 
-#: option.c:327
+#: option.c:331
 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:328
+#: option.c:332
 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:329
+#: option.c:333
 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:330
-#, fuzzy
+#: option.c:334
 msgid "Inhibit DNS-rebind protection on this domain."
 msgstr "Désactive la protection contre les réassociation DNS pour ce domaine"
 
-#: option.c:331
+#: option.c:335
 msgid "Always perform DNS queries to all servers."
 msgstr "Toujours effectuer les requêtes DNS Ã  tous les serveurs."
 
 #
-#: option.c:332
+#: option.c:336
 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:333
+#: option.c:337
 msgid "Use alternative ports for DHCP."
 msgstr "Utiliser des ports alternatifs pour le DHCP."
 
-#: option.c:334
+#: option.c:338
 msgid "Run lease-change script as this user."
 msgstr "Lancer le script 'lease-change' avec cet utilisateur."
 
 #
-#: option.c:335
+#: option.c:339
 msgid "Specify NAPTR DNS record."
 msgstr "Spécifie un champ DNS NAPTR."
 
-#: option.c:336
+#: option.c:340
 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:337
+#: option.c:341
 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:338
-#, fuzzy
+#: option.c:342
 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,"
+msgstr "Génère les noms d'hôtes Ã  partir de l'adresse MAC pour les clients sans nom."
 
-#: option.c:339
+#: option.c:343
 msgid "Use these DHCP relays as full proxies."
 msgstr "Utilise ces relais DHCP en temps que proxy complets."
 
-#: option.c:340
+#: option.c:344
 msgid "Specify alias name for LOCAL DNS name."
 msgstr "Spécifie un alias pour un nom DNS local."
 
 #
-#: option.c:341
+#: option.c:345
 msgid "Prompt to send to PXE clients."
 msgstr "Invite Ã  envoyer aux clients PXE."
 
-#: option.c:342
+#: option.c:346
 msgid "Boot service for PXE menu."
-msgstr "Service de démarrage pour menu PXE"
+msgstr "Service de démarrage pour menu PXE."
 
-#: option.c:343
+#: option.c:347
 msgid "Check configuration syntax."
-msgstr "vérification de la syntaxe de la configuration"
+msgstr "vérification de la syntaxe de la configuration."
+
+#: option.c:348
+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:349
+msgid "Proxy DNSSEC validation results from upstream nameservers"
+msgstr "Transmet les résultats de validation DNSSEC des serveurs amonts"
 
-#: option.c:632
+#: option.c:638
 #, c-format
 msgid ""
 "Usage: dnsmasq [options]\n"
@@ -563,234 +560,228 @@ msgstr ""
 "Usage : dnsmasq [options]\n"
 "\n"
 
-#: option.c:634
+#: option.c:640
 #, 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:636
+#: option.c:642
 #, c-format
 msgid "Valid options are:\n"
 msgstr "Les options valides sont :\n"
 
-#: option.c:677
+#: option.c:683
 #, c-format
 msgid "Known DHCP options:\n"
 msgstr "Options DHCP connues :\n"
 
-#: option.c:781
+#: option.c:798
 msgid "bad dhcp-option"
 msgstr "mauvaise valeur de 'dhcp-option'"
 
 #
-#: option.c:838
+#: option.c:860
 msgid "bad IP address"
 msgstr "mauvaise adresse IP"
 
-#: option.c:941
+#: option.c:966
 msgid "bad domain in dhcp-option"
 msgstr "mauvais domaine dans dhcp-option"
 
-#: option.c:1007
+#: option.c:1032
 msgid "dhcp-option too long"
 msgstr "dhcp-option trop long"
 
-#: option.c:1016
+#: option.c:1041
 msgid "illegal dhcp-match"
 msgstr "valeur illégale pour 'dhcp-match'"
 
-#: option.c:1052
+#: option.c:1085
 msgid "illegal repeated flag"
-msgstr "Une option ne pouvant Ãªtre spécifié qu'une seule fois Ã  Ã©té donnée plusieurs fois."
+msgstr "Une option ne pouvant Ãªtre spécifié qu'une seule fois Ã  Ã©té donnée plusieurs fois"
 
-#: option.c:1060
+#: option.c:1093
 msgid "illegal repeated keyword"
 msgstr "Mot-clef ne pouvant Ãªtre répété"
 
-#: option.c:1143 tftp.c:413
+#: option.c:1145 option.c:3024
+#, c-format
+msgid "cannot access directory %s: %s"
+msgstr "Ne peut pas lire le répertoire %s : %s"
+
+#: option.c:1176 tftp.c:460
 #, c-format
 msgid "cannot access %s: %s"
 msgstr "Ne peut pas lire %s : %s"
 
-#
-#: option.c:1188
-msgid "only one dhcp-hostsfile allowed"
-msgstr "une seule valeur est autorisée pour 'dhcp-hostsfile'"
-
-#
-#: option.c:1195
-msgid "only one dhcp-optsfile allowed"
-msgstr "une seule valeur est autorisée pour 'dhcp-optsfile'"
-
-#: option.c:1240
+#: option.c:1259
 msgid "bad MX preference"
 msgstr "préference MX incorrecte"
 
-#: option.c:1245
+#: option.c:1264
 msgid "bad MX name"
 msgstr "nom MX incorrect"
 
-#: option.c:1259
+#: option.c:1278
 msgid "bad MX target"
 msgstr "valeur MX cible incorrecte"
 
-#: option.c:1269
+#: option.c:1288
 msgid "cannot run scripts under uClinux"
 msgstr "ne peut exécuter de script sous uClinux"
 
-#: option.c:1271
+#: option.c:1290
 msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts"
 msgstr "pour permettre l'exécution de scripts au changement de bail (lease-change), recompiler en définissant HAVE_SCRIPT"
 
-#: option.c:1516 option.c:1520
+#: option.c:1591 option.c:1595
 msgid "bad port"
 msgstr "numéro de port incorrect"
 
-#: option.c:1539 option.c:1564
+#: option.c:1614 option.c:1639
 msgid "interface binding not supported"
 msgstr "association d'interface non supportée"
 
 #
-#: option.c:1710
+#: option.c:1785
 msgid "bad port range"
 msgstr "gamme de ports incorrecte"
 
-#: option.c:1727
+#: option.c:1802
 msgid "bad bridge-interface"
 msgstr "interface-pont incorrecte"
 
-#: option.c:1769
+#: option.c:1844
 msgid "bad dhcp-range"
 msgstr "plage d'adresses DHCP (dhcp-range) incorrecte"
 
-#: option.c:1797
+#: option.c:1872
 msgid "only one tag allowed"
 msgstr "une seule Ã©tiquette est autorisée"
 
-#: option.c:1844
+#: option.c:1919
 msgid "inconsistent DHCP range"
 msgstr "plage d'adresses DHCP incohérente"
 
+#: option.c:2013 option.c:2039
+msgid "bad hex constant"
+msgstr "mauvaise constante hexadecimale"
+
 #
-#: option.c:2019
+#: option.c:2101
 msgid "bad DHCP host name"
 msgstr "nom d'hôte DHCP incorrect"
 
-#: option.c:2100
+#: option.c:2182
 msgid "bad tag-if"
 msgstr "mauvaise Ã©tiquette tag-if"
 
-#: option.c:2374 option.c:2673
+#: option.c:2461 option.c:2746
 msgid "invalid port number"
 msgstr "numéro de port invalide"
 
 #
-#: option.c:2436
+#: option.c:2523
 msgid "bad dhcp-proxy address"
 msgstr "adresse dhcp-proxy incorrecte"
 
 #
-#: option.c:2476
+#: option.c:2563
 msgid "invalid alias range"
 msgstr "poids invalide"
 
 #
-#: option.c:2489
+#: option.c:2576
 msgid "bad interface name"
 msgstr "nom d'interface invalide"
 
-#: option.c:2514
+#: option.c:2601
 msgid "bad CNAME"
 msgstr "mauvais CNAME"
 
-#: option.c:2519
+#: option.c:2606
 msgid "duplicate CNAME"
 msgstr "ce CNAME existe déja"
 
 #
-#: option.c:2539
+#: option.c:2626
 msgid "bad PTR record"
 msgstr "mauvais champ PTR"
 
 #
-#: option.c:2570
+#: option.c:2657
 msgid "bad NAPTR record"
 msgstr "mauvais champ NAPTR"
 
-#: option.c:2595
-msgid "TXT record string too long"
-msgstr "chaîne du champ TXT trop longue"
-
-#: option.c:2643
+#: option.c:2689
 msgid "bad TXT record"
 msgstr "champ TXT invalide"
 
-#: option.c:2659
+#: option.c:2732
 msgid "bad SRV record"
 msgstr "champ SRV invalide"
 
-#: option.c:2666
+#: option.c:2739
 msgid "bad SRV target"
 msgstr "cible SRV invalide"
 
-#: option.c:2680
+#: option.c:2753
 msgid "invalid priority"
 msgstr "priorité invalide"
 
-#: option.c:2687
+#: option.c:2760
 msgid "invalid weight"
 msgstr "poids invalide"
 
-#: option.c:2706
+#: option.c:2779
 msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DBus support)"
 msgstr "option non supportée (vérifier que Dnsmasq a Ã©té compilé avec le support DHCP/TFTP/DBus)"
 
-#: option.c:2748
-#, c-format
-msgid "files nested too deep in %s"
-msgstr "trop de niveaux de récursion pour les fichiers dans %s"
-
-#: option.c:2756 tftp.c:567
-#, c-format
-msgid "cannot read %s: %s"
-msgstr "Ne peut pas lire %s : %s"
-
-#: option.c:2813
+#: option.c:2843
 msgid "missing \""
 msgstr "il manque \""
 
-#: option.c:2872
+#: option.c:2902
 msgid "bad option"
 msgstr "mauvaise option"
 
-#: option.c:2874
+#: option.c:2904
 msgid "extraneous parameter"
 msgstr "paramètre en trop"
 
-#: option.c:2876
+#: option.c:2906
 msgid "missing parameter"
 msgstr "paramètre manquant"
 
-#: option.c:2880
+#: option.c:2910
 msgid "error"
 msgstr "erreur"
 
-#: option.c:2885
+#: option.c:2915
 #, c-format
 msgid "%s at line %d of %%s"
 msgstr "%s Ã  la ligne %d de %%s"
 
-#: option.c:2942 option.c:2973
+#: option.c:2979 tftp.c:624
+#, c-format
+msgid "cannot read %s: %s"
+msgstr "Ne peut pas lire %s : %s"
+
+#: option.c:3145 option.c:3181
 #, c-format
 msgid "read %s"
 msgstr "Lecture de %s"
 
-#: option.c:3045
+#: option.c:3229
+msgid "junk found in command line"
+msgstr "la ligne de commande contient des Ã©léments indésirables ou incompréhensibles"
+
+#: option.c:3258
 #, c-format
 msgid "Dnsmasq version %s  %s\n"
 msgstr "Version de Dnsmasq %s  %s\n"
 
-#: option.c:3046
+#: option.c:3259
 #, c-format
 msgid ""
 "Compile time options %s\n"
@@ -799,157 +790,137 @@ msgstr ""
 "Options Ã  la compilation %s\n"
 "\n"
 
-#: option.c:3047
+#: option.c:3260
 #, c-format
 msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
 msgstr "Ce logiciel est fourni sans AUCUNE GARANTIE.\n"
 
-#: option.c:3048
+#: option.c:3261
 #, 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:3049
+#: option.c:3262
 #, 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:3060
+#: option.c:3273
 msgid "try --help"
 msgstr "essayez avec --help"
 
-#: option.c:3062
+#: option.c:3275
 msgid "try -w"
 msgstr "essayez avec -w"
 
-#: option.c:3065
+#: option.c:3278
 #, c-format
 msgid "bad command line options: %s"
 msgstr "mauvaises options en ligne de commande : %s."
 
-#: option.c:3106
+#: option.c:3319
 #, c-format
 msgid "cannot get host-name: %s"
 msgstr "ne peut pas obtenir le nom de la machine : %s"
 
-#: option.c:3134
+#: option.c:3347
 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:3144
+#: option.c:3357
 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:3147 network.c:813 dhcp.c:814
+#: option.c:3360 network.c:848 dhcp.c:814
 #, c-format
 msgid "failed to read %s: %s"
 msgstr "impossible de lire %s : %s"
 
-#: option.c:3164
+#: option.c:3377
 #, c-format
 msgid "no search directive found in %s"
 msgstr "pas de directive de recherche trouvée dans %s"
 
-#: option.c:3185
+#: option.c:3398
 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:3189
+#: option.c:3402
 msgid "syntax check OK"
 msgstr "vérification de syntaxe OK"
 
-#: forward.c:427
+#: forward.c:461
 #, 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:455
+#: forward.c:489
 #, c-format
 msgid "possible DNS-rebind attack detected: %s"
 msgstr "détection d'une possible attaque de type DNS-rebind: %s"
 
-#: network.c:110
+#: network.c:171
 #, c-format
 msgid "unknown interface %s in bridge-interface"
 msgstr "interface %s inconnue spécifiée comme interface de pont"
 
-#: network.c:467 dnsmasq.c:188
-#, c-format
-msgid "failed to create listening socket: %s"
-msgstr "impossible de créer une socket de lecture : %s"
-
-#: network.c:474
-#, c-format
-msgid "failed to set IPV6 options on listening socket: %s"
-msgstr "impossible d'activer les options IPV6 sur la socket de lecture : %s"
-
-#: network.c:500
-#, c-format
-msgid "failed to bind listening socket for %s: %s"
-msgstr "impossible de lier la socket de lecture pour %s : %s"
-
-#: network.c:505
-#, c-format
-msgid "failed to listen on socket: %s"
-msgstr "impossible de lire sur la socket : %s"
-
-#: network.c:517
+#: network.c:380
 #, c-format
-msgid "failed to create TFTP socket: %s"
-msgstr "impossible de créer une socket TFTP : %s"
+msgid "failed to create listening socket for %s: %s"
+msgstr "impossible de créer une socket d'écoute pour %s : %s"
 
-#: network.c:711
+#: network.c:746
 #, c-format
 msgid "failed to bind server socket for %s: %s"
 msgstr "impossible de lier la socket de serveur pour %s : %s"
 
-#: network.c:748
+#: network.c:783
 #, c-format
 msgid "ignoring nameserver %s - local interface"
 msgstr "ignore le serveur de nom %s - interface locale"
 
-#: network.c:759
+#: network.c:794
 #, c-format
 msgid "ignoring nameserver %s - cannot make/bind socket: %s"
 msgstr "ignore le serveur de nom %s - ne peut construire/lier la socket : %m"
 
-#: network.c:776
+#: network.c:811
 msgid "unqualified"
 msgstr "non-qualifié(e)"
 
-#: network.c:776
+#: network.c:811
 msgid "names"
 msgstr "noms"
 
-#: network.c:778
+#: network.c:813
 msgid "default"
 msgstr "défaut"
 
-#: network.c:780
+#: network.c:815
 msgid "domain"
 msgstr "domaine"
 
-#: network.c:783
+#: network.c:818
 #, c-format
 msgid "using local addresses only for %s %s"
 msgstr "utilise les adresses locales seulement pour %s %s"
 
-#: network.c:785
+#: network.c:820
 #, c-format
 msgid "using standard nameservers for %s %s"
 msgstr "utilisation des serveurs de nom standards pour %s %s"
 
-#: network.c:787
+#: network.c:822
 #, c-format
 msgid "using nameserver %s#%d for %s %s"
 msgstr "utilise le serveur de nom %s#%d pour %s %s"
 
-#: network.c:790
+#: network.c:825
 #, c-format
 msgid "using nameserver %s#%d(via %s)"
 msgstr "utilise le serveur de nom %s#%d (via %s)"
 
-#: network.c:792
+#: network.c:827
 #, c-format
 msgid "using nameserver %s#%d"
 msgstr "utilise le serveur de nom %s#%d"
@@ -978,183 +949,183 @@ msgstr "interface %s inconnue"
 msgid "no interface with address %s"
 msgstr "pas d'interface avec l'adresse %s"
 
-#: dnsmasq.c:200 dnsmasq.c:671
+#: dnsmasq.c:199 dnsmasq.c:670
 #, c-format
 msgid "DBus error: %s"
 msgstr "Erreur DBus : %s"
 
-#: dnsmasq.c:203
+#: dnsmasq.c:202
 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:229
+#: dnsmasq.c:228
 #, c-format
 msgid "unknown user or group: %s"
 msgstr "utilisateur ou groupe inconnu : %s"
 
-#: dnsmasq.c:284
+#: dnsmasq.c:283
 #, 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:448
+#: dnsmasq.c:447
 #, c-format
 msgid "started, version %s DNS disabled"
 msgstr "démarrage avec le DNS désactivé (version %s)"
 
-#: dnsmasq.c:450
+#: dnsmasq.c:449
 #, c-format
 msgid "started, version %s cachesize %d"
 msgstr "demarré, version %s (taille de cache %d)"
 
-#: dnsmasq.c:452
+#: dnsmasq.c:451
 #, c-format
 msgid "started, version %s cache disabled"
 msgstr "démarrage avec le cache désactivé (version %s)"
 
-#: dnsmasq.c:454
+#: dnsmasq.c:453
 #, c-format
 msgid "compile time options: %s"
 msgstr "options Ã  la compilation : %s"
 
-#: dnsmasq.c:460
+#: dnsmasq.c:459
 msgid "DBus support enabled: connected to system bus"
 msgstr "Support DBus autorisé : connecté au bus système"
 
-#: dnsmasq.c:462
+#: dnsmasq.c:461
 msgid "DBus support enabled: bus connection pending"
 msgstr "Support DBus autorisé : connexion au bus en attente"
 
-#: dnsmasq.c:467
+#: dnsmasq.c:466
 #, c-format
 msgid "warning: failed to change owner of %s: %s"
 msgstr "Impossible de changer pour l'utilisateur %s : %s"
 
-#: dnsmasq.c:471
+#: dnsmasq.c:470
 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:476
+#: dnsmasq.c:475
 #, c-format
 msgid "warning: interface %s does not currently exist"
 msgstr "attention : l'interface %s n'existe pas actuellement"
 
-#: dnsmasq.c:481
+#: dnsmasq.c:480
 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:484
+#: dnsmasq.c:483
 msgid "warning: no upstream servers configured"
 msgstr "attention : aucun serveur amont n'est configuré"
 
-#: dnsmasq.c:488
+#: dnsmasq.c:487
 #, 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:501
+#: dnsmasq.c:500
 #, c-format
 msgid "DHCP, static leases only on %.0s%s, lease time %s"
 msgstr "baux statiques DHCP seulement sur %.0s%s, durée de validité de bail %s"
 
-#: dnsmasq.c:503
+#: dnsmasq.c:502
 #, c-format
 msgid "DHCP, proxy on subnet %.0s%s%.0s"
 msgstr "DHCP, proxy sur le sous-réseau %.0s%s%.0s"
 
-#: dnsmasq.c:504
+#: dnsmasq.c:503
 #, c-format
 msgid "DHCP, IP range %s -- %s, lease time %s"
 msgstr "DHCP, plage d'adresses %s -- %s, durée de bail %s"
 
-#: dnsmasq.c:519
+#: dnsmasq.c:518
 msgid "root is "
 msgstr "root est"
 
 #
-#: dnsmasq.c:519
+#: dnsmasq.c:518
 msgid "enabled"
 msgstr "activé"
 
-#: dnsmasq.c:521
+#: dnsmasq.c:520
 msgid "secure mode"
 msgstr "mode sécurisé"
 
-#: dnsmasq.c:547
+#: dnsmasq.c:546
 #, c-format
 msgid "restricting maximum simultaneous TFTP transfers to %d"
 msgstr "le nombre maximum de transferts TFTP simultanés sera restreint Ã  %d"
 
-#: dnsmasq.c:673
+#: dnsmasq.c:672
 msgid "connected to system DBus"
 msgstr "connecté au systeme DBus"
 
-#: dnsmasq.c:768
+#: dnsmasq.c:767
 #, c-format
 msgid "cannot fork into background: %s"
 msgstr "Ne peut se lancer en tâche de fond : %s"
 
-#: dnsmasq.c:771
+#: dnsmasq.c:770
 #, c-format
 msgid "failed to create helper: %s"
 msgstr "impossible de créer le 'helper' : %s"
 
-#: dnsmasq.c:774
+#: dnsmasq.c:773
 #, c-format
 msgid "setting capabilities failed: %s"
 msgstr "impossible de configurer la capacité %s"
 
-#: dnsmasq.c:778
+#: dnsmasq.c:777
 #, c-format
 msgid "failed to change user-id to %s: %s"
 msgstr "Impossible de changer l'identifiant utilisateur pour %s : %s"
 
-#: dnsmasq.c:783
+#: dnsmasq.c:782
 #, c-format
 msgid "failed to change group-id to %s: %s"
 msgstr "Impossible de changer l'identifiant de groupe pour %s : %s"
 
-#: dnsmasq.c:786
+#: dnsmasq.c:785
 #, c-format
 msgid "failed to open pidfile %s: %s"
 msgstr "impossible de lire le fichier de PID %s : %s"
 
-#: dnsmasq.c:789
+#: dnsmasq.c:788
 #, c-format
 msgid "cannot open %s: %s"
 msgstr "Ne peut pas lire %s : %s"
 
-#: dnsmasq.c:844
+#: dnsmasq.c:843
 #, c-format
 msgid "child process killed by signal %d"
 msgstr "Le processus fils a Ã©té terminé par le signal %d"
 
-#: dnsmasq.c:848
+#: dnsmasq.c:847
 #, c-format
 msgid "child process exited with status %d"
 msgstr "Le processus fils s'est terminé avec le statut %d"
 
-#: dnsmasq.c:852
+#: dnsmasq.c:851
 #, c-format
 msgid "failed to execute %s: %s"
 msgstr "impossible d'exécuter Ã  %s : %s"
 
-#: dnsmasq.c:896
+#: dnsmasq.c:895
 msgid "exiting on receipt of SIGTERM"
 msgstr "sortie sur réception du signal SIGTERM"
 
-#: dnsmasq.c:924
+#: dnsmasq.c:923
 #, c-format
 msgid "failed to access %s: %s"
 msgstr "impossible d'accéder Ã  %s : %s"
 
-#: dnsmasq.c:954
+#: dnsmasq.c:953
 #, c-format
 msgid "reading %s"
 msgstr "Lecture de %s"
 
-#: dnsmasq.c:965
+#: dnsmasq.c:964
 #, c-format
 msgid "no servers found in %s, will retry"
 msgstr "aucun serveur trouvé dans %s, va réessayer"
@@ -1275,19 +1246,19 @@ msgstr "%u la gamme DHCP disponible est : %s -- %s"
 msgid "disabled"
 msgstr "désactivé"
 
-#: rfc2131.c:466 rfc2131.c:969 rfc2131.c:1335
+#: rfc2131.c:466 rfc2131.c:978 rfc2131.c:1350
 msgid "ignored"
 msgstr "ignoré"
 
-#: rfc2131.c:481 rfc2131.c:1183
+#: rfc2131.c:481 rfc2131.c:1197
 msgid "address in use"
 msgstr "adresse déjà utilisée"
 
-#: rfc2131.c:495 rfc2131.c:1023
+#: rfc2131.c:495 rfc2131.c:1032
 msgid "no address available"
 msgstr "pas d'adresse disponible"
 
-#: rfc2131.c:502 rfc2131.c:1146
+#: rfc2131.c:502 rfc2131.c:1160
 msgid "wrong network"
 msgstr "mauvais réseau"
 
@@ -1295,7 +1266,7 @@ msgstr "mauvais r
 msgid "no address configured"
 msgstr "pas d'adresse configurée"
 
-#: rfc2131.c:522 rfc2131.c:1196
+#: rfc2131.c:522 rfc2131.c:1210
 msgid "no leases left"
 msgstr "plus aucun bail disponible"
 
@@ -1318,118 +1289,118 @@ msgstr "%u Classe d'utilisateur : %s"
 msgid "PXE BIS not supported"
 msgstr "Service PXE BIS (Boot Integrity Services) non supporté"
 
-#: rfc2131.c:939
+#: rfc2131.c:948
 #, c-format
 msgid "disabling DHCP static address %s for %s"
 msgstr "désactive l'adresse statique DHCP %s pour %s"
 
-#: rfc2131.c:960
+#: rfc2131.c:969
 msgid "unknown lease"
 msgstr "bail inconnu"
 
-#: rfc2131.c:992
+#: rfc2131.c:1001
 #, c-format
 msgid "not using configured address %s because it is leased to %s"
 msgstr "L'adresse statique %s ne sera pas utilisée car un bail est déjà attribué Ã  %s"
 
-#: rfc2131.c:1002
+#: rfc2131.c:1011
 #, c-format
 msgid "not using configured address %s because it is in use by the server or relay"
 msgstr "L'adresse statique %s ne sera pas utilisée car elle est utilisée par le serveur ou un relai"
 
-#: rfc2131.c:1005
+#: rfc2131.c:1014
 #, c-format
 msgid "not using configured address %s because it was previously declined"
 msgstr "L'adresse statique %s ne sera pas utilisée car elle a préalablement Ã©té refusée"
 
-#: rfc2131.c:1021 rfc2131.c:1189
+#: rfc2131.c:1030 rfc2131.c:1203
 msgid "no unique-id"
 msgstr "pas d'identifiant unique"
 
-#: rfc2131.c:1090
+#: rfc2131.c:1099
 msgid "wrong server-ID"
 msgstr "mauvais identifiant de serveur"
 
-#: rfc2131.c:1108
+#: rfc2131.c:1117
 msgid "wrong address"
 msgstr "mauvaise adresse"
 
-#: rfc2131.c:1121
+#: rfc2131.c:1135
 msgid "lease not found"
 msgstr "bail non trouvé"
 
-#: rfc2131.c:1154
+#: rfc2131.c:1168
 msgid "address not available"
 msgstr "adresse non disponible"
 
-#: rfc2131.c:1165
+#: rfc2131.c:1179
 msgid "static lease available"
 msgstr "bail statique disponible"
 
-#: rfc2131.c:1169
+#: rfc2131.c:1183
 msgid "address reserved"
 msgstr "adresse reservée"
 
-#: rfc2131.c:1177
+#: rfc2131.c:1191
 #, c-format
 msgid "abandoning lease to %s of %s"
 msgstr "abandon du bail de %s pour %s"
 
-#: rfc2131.c:1757
+#: rfc2131.c:1772
 #, c-format
 msgid "%u tags: %s"
 msgstr "%u options: %s"
 
-#: rfc2131.c:1770
+#: rfc2131.c:1785
 #, c-format
 msgid "%u bootfile name: %s"
 msgstr "%u nom de fichier 'bootfile' : %s"
 
-#: rfc2131.c:1779
+#: rfc2131.c:1794
 #, c-format
 msgid "%u server name: %s"
 msgstr "%u nom du serveur : %s"
 
-#: rfc2131.c:1793
+#: rfc2131.c:1808
 #, c-format
 msgid "%u next server: %s"
 msgstr "%u serveur suivant : %s"
 
-#: rfc2131.c:1796
+#: rfc2131.c:1811
 #, c-format
 msgid "%u broadcast response"
 msgstr "%u réponse broadcast"
 
-#: rfc2131.c:1859
+#: rfc2131.c:1874
 #, c-format
 msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
 msgstr "Impossible d'envoyer l'option DHCP/BOOTP %d : pas assez d'espace dans le paquet"
 
-#: rfc2131.c:2105
+#: rfc2131.c:2120
 msgid "PXE menu too large"
 msgstr "menu PXE trop grand"
 
-#: rfc2131.c:2218
+#: rfc2131.c:2233
 #, c-format
 msgid "Ignoring domain %s for DHCP host name %s"
 msgstr "Le domaine %s est ignoré pour l'hôte DHCP %s"
 
-#: rfc2131.c:2236
+#: rfc2131.c:2251
 #, c-format
 msgid "%u requested options: %s"
 msgstr "%u options demandées : %s"
 
-#: rfc2131.c:2503
+#: rfc2131.c:2518
 #, c-format
 msgid "cannot send RFC3925 option: too many options for enterprise number %d"
 msgstr "ne peux envoyer l'option RFC3925 : trop d'options pour le numéro d'entreprise %d"
 
-#: netlink.c:66
+#: netlink.c:70
 #, c-format
 msgid "cannot create netlink socket: %s"
 msgstr "ne peux lier une socket netlink : %s"
 
-#: netlink.c:265
+#: netlink.c:288
 #, c-format
 msgid "netlink returns error: %s"
 msgstr "Erreur netlink : %s"
@@ -1446,45 +1417,45 @@ msgstr "configuration des serveurs amonts 
 msgid "could not register a DBus message handler"
 msgstr "ne peut enregistrer une routine de traitement des messages DBus"
 
-#: bpf.c:150
+#: bpf.c:217
 #, c-format
 msgid "cannot create DHCP BPF socket: %s"
 msgstr "impossible de créer une socket BPF pour DHCP : %s"
 
-#: bpf.c:178
+#: bpf.c:245
 #, c-format
 msgid "DHCP request for unsupported hardware type (%d) received on %s"
 msgstr "requête DHCP pour un type de matériel non supporté (%d) reçue sur %s"
 
-#: tftp.c:233
+#: tftp.c:281
 msgid "unable to get free port for TFTP"
 msgstr "impossible d'obtenir un port libre pour TFTP"
 
-#: tftp.c:248
+#: tftp.c:296
 #, c-format
 msgid "unsupported request from %s"
 msgstr "requête de %s non supportée"
 
-#: tftp.c:336
-#, c-format
-msgid "sent %s to %s"
-msgstr "envoyé %s Ã  %s"
-
-#: tftp.c:359
+#: tftp.c:406
 #, c-format
 msgid "file %s not found"
 msgstr "fichier %s non trouvé"
 
-#: tftp.c:470
+#: tftp.c:522
 #, c-format
 msgid "error %d %s received from %s"
 msgstr "erreur %d %s reçu de %s"
 
-#: tftp.c:501
+#: tftp.c:554
 #, c-format
 msgid "failed sending %s to %s"
 msgstr "impossible d'envoyer %s Ã  %s"
 
+#: tftp.c:568
+#, c-format
+msgid "sent %s to %s"
+msgstr "envoyé %s Ã  %s"
+
 #: log.c:173
 #, c-format
 msgid "overflow: %d log entries lost"
@@ -1495,10 +1466,36 @@ msgstr "d
 msgid "log failed: %s"
 msgstr "trace perdue : %s"
 
-#: log.c:431
+#: log.c:436
 msgid "FAILED to start up"
 msgstr "IMPOSSIBLE de démarrer"
 
+#
+#~ msgid "only one dhcp-hostsfile allowed"
+#~ msgstr "une seule valeur est autorisée pour 'dhcp-hostsfile'"
+
+#
+#~ msgid "only one dhcp-optsfile allowed"
+#~ msgstr "une seule valeur est autorisée pour 'dhcp-optsfile'"
+
+#~ msgid "files nested too deep in %s"
+#~ msgstr "trop de niveaux de récursion pour les fichiers dans %s"
+
+#~ msgid "TXT record string too long"
+#~ msgstr "chaîne du champ TXT trop longue"
+
+#~ msgid "failed to set IPV6 options on listening socket: %s"
+#~ msgstr "impossible d'activer les options IPV6 sur la socket de lecture : %s"
+
+#~ msgid "failed to bind listening socket for %s: %s"
+#~ msgstr "impossible de lier la socket de lecture pour %s : %s"
+
+#~ msgid "failed to listen on socket: %s"
+#~ msgstr "impossible de lire sur la socket : %s"
+
+#~ msgid "failed to create TFTP socket: %s"
+#~ msgstr "impossible de créer une socket TFTP : %s"
+
 #~ msgid "DHCP packet: transaction-id is %u"
 #~ msgstr "paquet DHCP : l'identifiant de transaction ('transaction-id') est %u"
 
@@ -1538,9 +1535,6 @@ msgstr "IMPOSSIBLE de d
 #~ msgid "read %s - %d hosts"
 #~ msgstr "lecture %s - %d hôtes"
 
-#~ msgid "bad dhcp-host"
-#~ msgstr "mauvais dhcp-host"
-
 #~ msgid "domains"
 #~ msgstr "domaines"
 
index b813a329c37872331b5a3c26b0a389b8cc175739..da1e9afd9e8c1c7b18b6d963782534d09242a787 100644 (file)
--- a/po/id.po
+++ b/po/id.po
@@ -15,68 +15,62 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 
 # OK
-#: cache.c:764
+#: cache.c:761
 #, fuzzy, c-format
 msgid "failed to load names from %s: %s"
 msgstr "gagal memuat nama-nama dari %s: %s"
 
 # OK
-#: cache.c:798 dhcp.c:865
+#: cache.c:795 dhcp.c:865
 #, fuzzy, c-format
 msgid "bad address at %s line %d"
 msgstr "kesalahan nama pada %s baris %d"
 
 # OK
-#: cache.c:856 dhcp.c:881
+#: cache.c:853 dhcp.c:881
 #, c-format
 msgid "bad name at %s line %d"
 msgstr "kesalahan nama pada %s baris %d"
 
 # OK
-#: cache.c:863 dhcp.c:956
+#: cache.c:860 dhcp.c:956
 #, c-format
 msgid "read %s - %d addresses"
 msgstr "membaca %s - %d alamat"
 
 # OK
-#: cache.c:902
+#: cache.c:899
 msgid "cleared cache"
 msgstr "cache telah dihapus"
 
-# OK
-#: cache.c:933 option.c:1112
-#, fuzzy, c-format
-msgid "cannot access directory %s: %s"
-msgstr "tidak bisa membaca %s: %s"
-
-#: cache.c:1053
+#: cache.c:960
 #, c-format
 msgid "%s is a CNAME, not giving it to the DHCP lease of %s"
 msgstr ""
 
 # OK
-#: cache.c:1059
+#: cache.c:966
 #, 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:1132
+#: cache.c:1039
 #, c-format
 msgid "time %lu"
 msgstr ""
 
 # OK
-#: cache.c:1133
+#: cache.c:1040
 #, 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:1135
+#: cache.c:1042
 #, c-format
 msgid "queries forwarded %u, queries answered locally %u"
 msgstr ""
 
-#: cache.c:1158
+#: cache.c:1068
 #, c-format
 msgid "server %s#%d: queries sent %u, retried or failed %u"
 msgstr ""
@@ -94,7 +88,7 @@ msgid "failed to allocate memory"
 msgstr "gagal memuat %S: %m"
 
 # OK
-#: util.c:229 option.c:567
+#: util.c:229 option.c:573
 msgid "could not get memory"
 msgstr "tidak bisa mendapatkan memory"
 
@@ -117,520 +111,530 @@ msgid "infinite"
 msgstr "tak terbatas"
 
 # OK
-#: option.c:240
+#: option.c:244
 msgid "Specify local address(es) to listen on."
 msgstr "Tentukan alamat lokal untuk mendengarkan."
 
 # OK
-#: option.c:241
+#: option.c:245
 msgid "Return ipaddr for all hosts in specified domains."
 msgstr "Menghasilkan ipaddr untuk semua host dalam domain yang dipilih."
 
 # OK
-#: option.c:242
+#: option.c:246
 msgid "Fake reverse lookups for RFC1918 private address ranges."
 msgstr "Fake pencarian balik untuk alamat private sesuai dengan RFC1918."
 
 # OK
-#: option.c:243
+#: option.c:247
 msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
 msgstr "Perlakukan ipaddr sebagai NXDOMAIN (mengalahkan wildcard Verisign)."
 
 # OK
-#: option.c:244
+#: option.c:248
 #, 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:245
+#: option.c:249
 #, c-format
 msgid "Specify configuration file (defaults to %s)."
 msgstr "Tentukan file konfigurasi (default %s)."
 
 # OK
-#: option.c:246
+#: option.c:250
 msgid "Do NOT fork into the background: run in debug mode."
 msgstr "JANGAN berjalan di background: berjalan dalam modus debug."
 
 # OK
-#: option.c:247
+#: option.c:251
 msgid "Do NOT forward queries with no domain part."
 msgstr "JANGAN teruskan permintaan tanpa bagian domain."
 
 # OK
-#: option.c:248
+#: option.c:252
 msgid "Return self-pointing MX records for local hosts."
 msgstr "Mengembalikan record MX untuk diri sendiri host-host lokal."
 
 # OK
-#: option.c:249
+#: option.c:253
 msgid "Expand simple names in /etc/hosts with domain-suffix."
 msgstr "Melengkapi nama-nama di /etc/hosts dengan akhiran domain."
 
 # OK
-#: option.c:250
+#: option.c:254
 msgid "Don't forward spurious DNS requests from Windows hosts."
 msgstr "Jangan meneruskan permintaan DNS spurious dari host-host Windows."
 
 # OK
-#: option.c:251
+#: option.c:255
 msgid "Enable DHCP in the range given with lease duration."
 msgstr "Bolehkan DHCP dalam jangkauan yang diberikan dengan durasi lease."
 
 # OK
-#: option.c:252
+#: option.c:256
 #, c-format
 msgid "Change to this group after startup (defaults to %s)."
 msgstr "Ubah ke group ini setelah mulai (default %s)."
 
 # OK
-#: option.c:253
+#: option.c:257
 msgid "Set address or hostname for a specified machine."
 msgstr "Setel alamat atau nama host untuk mesin yang disebutkan."
 
 # OK
-#: option.c:254
+#: option.c:258
 #, fuzzy
 msgid "Read DHCP host specs from file."
 msgstr "nama MX salah"
 
-#: option.c:255
+#: option.c:259
 msgid "Read DHCP option specs from file."
 msgstr ""
 
-#: option.c:256
+#: option.c:260
 msgid "Evaluate conditional tag expression."
 msgstr ""
 
 # OK
-#: option.c:257
+#: option.c:261
 #, c-format
 msgid "Do NOT load %s file."
 msgstr "JANGAN muat file %s."
 
 # OK
-#: option.c:258
+#: option.c:262
 #, 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:259
+#: option.c:263
 msgid "Specify interface(s) to listen on."
 msgstr "Sebutkan antarmuka untuk mendengarkan."
 
 # OK
-#: option.c:260
+#: option.c:264
 msgid "Specify interface(s) NOT to listen on."
 msgstr "Sebutkan antarmuka untuk TIDAK mendengarkan."
 
 # OK
-#: option.c:261
+#: option.c:265
 #, fuzzy
 msgid "Map DHCP user class to tag."
 msgstr "Petakan kelas user DHCP ke setelan yang dipilih."
 
-#: option.c:262
+#: option.c:266
 msgid "Map RFC3046 circuit-id to tag."
 msgstr ""
 
-#: option.c:263
+#: option.c:267
 msgid "Map RFC3046 remote-id to tag."
 msgstr ""
 
-#: option.c:264
+#: option.c:268
 msgid "Map RFC3993 subscriber-id to tag."
 msgstr ""
 
 # OK
-#: option.c:265
+#: option.c:269
 #, fuzzy
 msgid "Don't do DHCP for hosts with tag set."
 msgstr "Jangan menggunakan DHCP untuk host-host yang dipilih."
 
 # OK
-#: option.c:266
+#: option.c:270
 #, fuzzy
 msgid "Force broadcast replies for hosts with tag set."
 msgstr "Jangan menggunakan DHCP untuk host-host yang dipilih."
 
 # OK
-#: option.c:267
+#: option.c:271
 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:268
+#: option.c:272
 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:269
+#: option.c:273
 #, c-format
 msgid "Specify where to store DHCP leases (defaults to %s)."
 msgstr "Sebutkan lokasi untuk menyimpan lease DHCP (default %s)."
 
 # OK
-#: option.c:270
+#: option.c:274
 msgid "Return MX records for local hosts."
 msgstr "Kembalikan rekord MX untuk host-host lokal."
 
 # OK
-#: option.c:271
+#: option.c:275
 msgid "Specify an MX record."
 msgstr "Sebutkan sebuah rekord MX."
 
 # OK
-#: option.c:272
+#: option.c:276
 msgid "Specify BOOTP options to DHCP server."
 msgstr "Sebutkan pilihan-pilihan BOOTP untuk DHCP server."
 
-#: option.c:273
+#: option.c:277
 #, c-format
 msgid "Do NOT poll %s file, reload only on SIGHUP."
 msgstr "Jangan kumpulkan file %s, muat kembali saat SIGHUP."
 
 # OK
-#: option.c:274
+#: option.c:278
 msgid "Do NOT cache failed search results."
 msgstr "JANGAN menyimpan hasil pencarian yang gagal."
 
 # OK
-#: option.c:275
+#: option.c:279
 #, 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:276
+#: option.c:280
 #, fuzzy
 msgid "Specify options to be sent to DHCP clients."
 msgstr "Setel pilihan-pilihan tambahan yang akan disetel untuk klien-klien DHCP."
 
-#: option.c:277
+#: option.c:281
 msgid "DHCP option sent even if the client does not request it."
 msgstr ""
 
 # OK
-#: option.c:278
+#: option.c:282
 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:279
+#: option.c:283
 #, 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:280
+#: option.c:284
 #, fuzzy
 msgid "Log DNS queries."
 msgstr "Permintaan log."
 
 # OK
-#: option.c:281
+#: option.c:285
 #, fuzzy
 msgid "Force the originating port for upstream DNS queries."
 msgstr "Paksa port asal untuk permintaan ke atas."
 
 # OK
-#: option.c:282
+#: option.c:286
 msgid "Do NOT read resolv.conf."
 msgstr "JANGAN baca resolv.conf."
 
 # OK
-#: option.c:283
+#: option.c:287
 #, c-format
 msgid "Specify path to resolv.conf (defaults to %s)."
 msgstr "Sebutkan path ke resolv.conf (default %s)."
 
 # OK
-#: option.c:284
+#: option.c:288
 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:285
+#: option.c:289
 msgid "Never forward queries to specified domains."
 msgstr "JANGAN pernah meneruskan permintaan ke domain yang disebutkan."
 
 # OK
-#: option.c:286
+#: option.c:290
 msgid "Specify the domain to be assigned in DHCP leases."
 msgstr "Sebutkan domain yang digunakan dalam lease DHCP."
 
 # OK
-#: option.c:287
+#: option.c:291
 msgid "Specify default target in an MX record."
 msgstr "Sebutkan tujuan default dalam rekord MX."
 
 # OK
-#: option.c:288
+#: option.c:292
 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:289
+#: option.c:293
 #, 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:290
+#: option.c:294
 #, 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:291
+#: option.c:295
 #, c-format
 msgid "Change to this user after startup. (defaults to %s)."
 msgstr "Ubah ke user ini setelah mulai. (default %s)."
 
 # OK
-#: option.c:292
+#: option.c:296
 #, fuzzy
 msgid "Map DHCP vendor class to tag."
 msgstr "Memetakan kelas vendor DHCP ke daftar pilihan."
 
 # OK
-#: option.c:293
+#: option.c:297
 msgid "Display dnsmasq version and copyright information."
 msgstr "Menampilkan versi dan informasi hak cipta dnsmasq."
 
 # OK
-#: option.c:294
+#: option.c:298
 msgid "Translate IPv4 addresses from upstream servers."
 msgstr "Terjemahkan alamat-alamat IPv4 dari server-server di atas."
 
 # OK
-#: option.c:295
+#: option.c:299
 msgid "Specify a SRV record."
 msgstr "Sebutkan rekord SRV."
 
-#: option.c:296
+#: option.c:300
 msgid "Display this message. Use --help dhcp for known DHCP options."
 msgstr ""
 
 # OK
-#: option.c:297
+#: option.c:301
 #, fuzzy, c-format
 msgid "Specify path of PID file (defaults to %s)."
 msgstr "Sebutkan path file PID. (default %s)."
 
 # OK
-#: option.c:298
+#: option.c:302
 #, c-format
 msgid "Specify maximum number of DHCP leases (defaults to %s)."
 msgstr "Sebutkan jumlah maksimum lease DHCP (default %s)."
 
 # OK
-#: option.c:299
+#: option.c:303
 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:300
+#: option.c:304
 msgid "Specify TXT DNS record."
 msgstr "Sebutkan rekord TXT DNS."
 
 # OK
-#: option.c:301
+#: option.c:305
 #, fuzzy
 msgid "Specify PTR DNS record."
 msgstr "Sebutkan rekord TXT DNS."
 
-#: option.c:302
+#: option.c:306
 msgid "Give DNS name to IPv4 address of interface."
 msgstr ""
 
 # OK
-#: option.c:303
+#: option.c:307
 msgid "Bind only to interfaces in use."
 msgstr "Hanya kaitkan ke antarmuka yang sedang digunakan saja."
 
 # OK
-#: option.c:304
+#: option.c:308
 #, c-format
 msgid "Read DHCP static host information from %s."
 msgstr "Baca informasi statik host DHCP dari %s."
 
 # OK
-#: option.c:305
+#: option.c:309
 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:306
+#: option.c:310
 msgid "Do not provide DHCP on this interface, only provide DNS."
 msgstr "JANGAN menyediakan DHCP pada antarmuka ini, hanya menyediakan DNS."
 
 # OK
-#: option.c:307
+#: option.c:311
 msgid "Enable dynamic address allocation for bootp."
 msgstr "Mungkinkan alokasi alamat dinamis untuk bootp."
 
 # OK
-#: option.c:308
+#: option.c:312
 #, fuzzy
 msgid "Map MAC address (with wildcards) to option set."
 msgstr "Memetakan kelas vendor DHCP ke daftar pilihan."
 
-#: option.c:309
+#: option.c:313
 msgid "Treat DHCP requests on aliases as arriving from interface."
 msgstr ""
 
-#: option.c:310
+#: option.c:314
 msgid "Disable ICMP echo address checking in the DHCP server."
 msgstr ""
 
-#: option.c:311
+#: option.c:315
 msgid "Script to run on DHCP lease creation and destruction."
 msgstr ""
 
-#: option.c:312
+#: option.c:316
 msgid "Read configuration from all the files in this directory."
 msgstr ""
 
 # OK
-#: option.c:313
+#: option.c:317
 #, fuzzy
 msgid "Log to this syslog facility or file. (defaults to DAEMON)"
 msgstr "Ubah ke user ini setelah mulai. (default %s)."
 
-#: option.c:314
+#: option.c:318
 msgid "Do not use leasefile."
 msgstr ""
 
 # OK
-#: option.c:315
+#: option.c:319
 #, fuzzy, c-format
 msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
 msgstr "Sebutkan jumlah maksimum lease DHCP (default %s)."
 
-#: option.c:316
+#: option.c:320
 #, c-format
 msgid "Clear DNS cache when reloading %s."
 msgstr ""
 
-#: option.c:317
+#: option.c:321
 msgid "Ignore hostnames provided by DHCP clients."
 msgstr ""
 
-#: option.c:318
+#: option.c:322
 msgid "Do NOT reuse filename and server fields for extra DHCP options."
 msgstr ""
 
-#: option.c:319
+#: option.c:323
 msgid "Enable integrated read-only TFTP server."
 msgstr ""
 
-#: option.c:320
+#: option.c:324
 msgid "Export files by TFTP only from the specified subtree."
 msgstr ""
 
-#: option.c:321
+#: option.c:325
 msgid "Add client IP address to tftp-root."
 msgstr ""
 
-#: option.c:322
+#: option.c:326
 msgid "Allow access only to files owned by the user running dnsmasq."
 msgstr ""
 
 # OK
-#: option.c:323
+#: option.c:327
 #, fuzzy, c-format
 msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
 msgstr "Sebutkan jumlah maksimum lease DHCP (default %s)."
 
-#: option.c:324
+#: option.c:328
 msgid "Disable the TFTP blocksize extension."
 msgstr ""
 
-#: option.c:325
+#: option.c:329
 msgid "Ephemeral port range for use by TFTP transfers."
 msgstr ""
 
-#: option.c:326
+#: option.c:330
 msgid "Extra logging for DHCP."
 msgstr ""
 
-#: option.c:327
+#: option.c:331
 msgid "Enable async. logging; optionally set queue length."
 msgstr ""
 
-#: option.c:328
+#: option.c:332
 msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
 msgstr ""
 
-#: option.c:329
+#: option.c:333
 msgid "Allow rebinding of 127.0.0.0/8, for RBL servers."
 msgstr ""
 
-#: option.c:330
+#: option.c:334
 msgid "Inhibit DNS-rebind protection on this domain."
 msgstr ""
 
-#: option.c:331
+#: option.c:335
 msgid "Always perform DNS queries to all servers."
 msgstr ""
 
-#: option.c:332
+#: option.c:336
 msgid "Set tag if client includes matching option in request."
 msgstr ""
 
-#: option.c:333
+#: option.c:337
 msgid "Use alternative ports for DHCP."
 msgstr ""
 
-#: option.c:334
+#: option.c:338
 msgid "Run lease-change script as this user."
 msgstr ""
 
 # OK
-#: option.c:335
+#: option.c:339
 #, fuzzy
 msgid "Specify NAPTR DNS record."
 msgstr "Sebutkan rekord TXT DNS."
 
-#: option.c:336
+#: option.c:340
 msgid "Specify lowest port available for DNS query transmission."
 msgstr ""
 
-#: option.c:337
+#: option.c:341
 msgid "Use only fully qualified domain names for DHCP clients."
 msgstr ""
 
-#: option.c:338
+#: option.c:342
 msgid "Generate hostnames based on MAC address for nameless clients."
 msgstr ""
 
-#: option.c:339
+#: option.c:343
 msgid "Use these DHCP relays as full proxies."
 msgstr ""
 
-#: option.c:340
+#: option.c:344
 msgid "Specify alias name for LOCAL DNS name."
 msgstr ""
 
 # OK
-#: option.c:341
+#: option.c:345
 #, fuzzy
 msgid "Prompt to send to PXE clients."
 msgstr "Setel pilihan-pilihan tambahan yang akan disetel untuk klien-klien DHCP."
 
-#: option.c:342
+#: option.c:346
 msgid "Boot service for PXE menu."
 msgstr ""
 
-#: option.c:343
+#: option.c:347
 msgid "Check configuration syntax."
 msgstr ""
 
+#: option.c:348
+msgid "Add requestor's MAC address to forwarded DNS queries"
+msgstr ""
+
+# OK
+#: option.c:349
+#, fuzzy
+msgid "Proxy DNSSEC validation results from upstream nameservers"
+msgstr "Terjemahkan alamat-alamat IPv4 dari server-server di atas."
+
 # OK
-#: option.c:632
+#: option.c:638
 #, c-format
 msgid ""
 "Usage: dnsmasq [options]\n"
@@ -640,270 +644,268 @@ msgstr ""
 "\n"
 
 # OK
-#: option.c:634
+#: option.c:640
 #, c-format
 msgid "Use short options only on the command line.\n"
 msgstr "Gunakan pilihan pendek saja pada perintah baris.\n"
 
 # OK
-#: option.c:636
+#: option.c:642
 #, fuzzy, c-format
 msgid "Valid options are:\n"
 msgstr "Pilihan yang boleh adalah:\n"
 
-#: option.c:677
+#: option.c:683
 #, c-format
 msgid "Known DHCP options:\n"
 msgstr ""
 
 # OK
-#: option.c:781
+#: option.c:798
 msgid "bad dhcp-option"
 msgstr "dhcp-option salah"
 
 # OK
-#: option.c:838
+#: option.c:860
 #, fuzzy
 msgid "bad IP address"
 msgstr "membaca %s - %d alamat"
 
 # OK
-#: option.c:941
+#: option.c:966
 msgid "bad domain in dhcp-option"
 msgstr "domain dalam dhcp-option salah"
 
 # OK
-#: option.c:1007
+#: option.c:1032
 msgid "dhcp-option too long"
 msgstr "dhcp-option terlalu panjang"
 
-#: option.c:1016
+#: option.c:1041
 msgid "illegal dhcp-match"
 msgstr ""
 
-#: option.c:1052
+#: option.c:1085
 msgid "illegal repeated flag"
 msgstr ""
 
-#: option.c:1060
+#: option.c:1093
 msgid "illegal repeated keyword"
 msgstr ""
 
 # OK
-#: option.c:1143 tftp.c:413
+#: option.c:1145 option.c:3024
 #, fuzzy, c-format
-msgid "cannot access %s: %s"
+msgid "cannot access directory %s: %s"
 msgstr "tidak bisa membaca %s: %s"
 
-#: option.c:1188
-msgid "only one dhcp-hostsfile allowed"
-msgstr ""
-
-#: option.c:1195
-msgid "only one dhcp-optsfile allowed"
-msgstr ""
+# OK
+#: option.c:1176 tftp.c:460
+#, fuzzy, c-format
+msgid "cannot access %s: %s"
+msgstr "tidak bisa membaca %s: %s"
 
 # OK
-#: option.c:1240
+#: option.c:1259
 msgid "bad MX preference"
 msgstr "kesukaan MX salah"
 
 # OK
-#: option.c:1245
+#: option.c:1264
 msgid "bad MX name"
 msgstr "nama MX salah"
 
 # OK
-#: option.c:1259
+#: option.c:1278
 msgid "bad MX target"
 msgstr "target MX salah"
 
-#: option.c:1269
+#: option.c:1288
 msgid "cannot run scripts under uClinux"
 msgstr ""
 
-#: option.c:1271
+#: option.c:1290
 msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts"
 msgstr ""
 
 # OK
-#: option.c:1516 option.c:1520
+#: option.c:1591 option.c:1595
 msgid "bad port"
 msgstr "port salah"
 
-#: option.c:1539 option.c:1564
+#: option.c:1614 option.c:1639
 msgid "interface binding not supported"
 msgstr ""
 
 # OK
-#: option.c:1710
+#: option.c:1785
 #, fuzzy
 msgid "bad port range"
 msgstr "port salah"
 
-#: option.c:1727
+#: option.c:1802
 msgid "bad bridge-interface"
 msgstr ""
 
 # OK
-#: option.c:1769
+#: option.c:1844
 msgid "bad dhcp-range"
 msgstr "dhcp-range salah"
 
-#: option.c:1797
+#: option.c:1872
 msgid "only one tag allowed"
 msgstr ""
 
 # OK
-#: option.c:1844
+#: option.c:1919
 msgid "inconsistent DHCP range"
 msgstr "jangkauan DHCP tidak konsisten"
 
 # OK
-#: option.c:2019
+#: option.c:2013 option.c:2039
+#, fuzzy
+msgid "bad hex constant"
+msgstr "dhcp-host salah"
+
+# OK
+#: option.c:2101
 #, fuzzy
 msgid "bad DHCP host name"
 msgstr "nama MX salah"
 
 # OK
-#: option.c:2100
+#: option.c:2182
 #, fuzzy
 msgid "bad tag-if"
 msgstr "target MX salah"
 
 # OK
-#: option.c:2374 option.c:2673
+#: option.c:2461 option.c:2746
 msgid "invalid port number"
 msgstr "nomor port tidak benar"
 
 # OK
-#: option.c:2436
+#: option.c:2523
 #, fuzzy
 msgid "bad dhcp-proxy address"
 msgstr "membaca %s - %d alamat"
 
 # OK
-#: option.c:2476
+#: option.c:2563
 #, fuzzy
 msgid "invalid alias range"
 msgstr "weight tidak benar"
 
 # OK
-#: option.c:2489
+#: option.c:2576
 #, fuzzy
 msgid "bad interface name"
 msgstr "nama MX salah"
 
-#: option.c:2514
+#: option.c:2601
 msgid "bad CNAME"
 msgstr ""
 
-#: option.c:2519
+#: option.c:2606
 msgid "duplicate CNAME"
 msgstr ""
 
 # OK
-#: option.c:2539
+#: option.c:2626
 #, fuzzy
 msgid "bad PTR record"
 msgstr "rekord SRV salah"
 
 # OK
-#: option.c:2570
+#: option.c:2657
 #, fuzzy
 msgid "bad NAPTR record"
 msgstr "rekord SRV salah"
 
 # OK
-#: option.c:2595
-msgid "TXT record string too long"
-msgstr "string rekord TXT terlalu panjang"
-
-# OK
-#: option.c:2643
+#: option.c:2689
 msgid "bad TXT record"
 msgstr "rekord TXT salah"
 
 # OK
-#: option.c:2659
+#: option.c:2732
 msgid "bad SRV record"
 msgstr "rekord SRV salah"
 
 # OK
-#: option.c:2666
+#: option.c:2739
 msgid "bad SRV target"
 msgstr "target SRV salah"
 
 # OK
-#: option.c:2680
+#: option.c:2753
 msgid "invalid priority"
 msgstr "prioritas tidak benar"
 
 # OK
-#: option.c:2687
+#: option.c:2760
 msgid "invalid weight"
 msgstr "weight tidak benar"
 
-#: option.c:2706
+#: option.c:2779
 msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DBus support)"
 msgstr ""
 
-#: option.c:2748
-#, c-format
-msgid "files nested too deep in %s"
-msgstr ""
-
 # OK
-#: option.c:2756 tftp.c:567
-#, c-format
-msgid "cannot read %s: %s"
-msgstr "tidak bisa membaca %s: %s"
-
-# OK
-#: option.c:2813
+#: option.c:2843
 msgid "missing \""
 msgstr "kurang \""
 
 # OK
-#: option.c:2872
+#: option.c:2902
 msgid "bad option"
 msgstr "pilihan salah"
 
 # OK
-#: option.c:2874
+#: option.c:2904
 msgid "extraneous parameter"
 msgstr "parameter berlebihan"
 
 # OK
-#: option.c:2876
+#: option.c:2906
 msgid "missing parameter"
 msgstr "parameter kurang"
 
 # OK
-#: option.c:2880
+#: option.c:2910
 msgid "error"
 msgstr "kesalahan"
 
 # OK
-#: option.c:2885
+#: option.c:2915
 #, c-format
 msgid "%s at line %d of %%s"
 msgstr "%s pada baris %d dari %%s"
 
 # OK
-#: option.c:2942 option.c:2973
+#: option.c:2979 tftp.c:624
+#, c-format
+msgid "cannot read %s: %s"
+msgstr "tidak bisa membaca %s: %s"
+
+# OK
+#: option.c:3145 option.c:3181
 #, fuzzy, c-format
 msgid "read %s"
 msgstr "membaca %s"
 
+#: option.c:3229
+msgid "junk found in command line"
+msgstr ""
+
 # OK
-#: option.c:3045
+#: option.c:3258
 #, c-format
 msgid "Dnsmasq version %s  %s\n"
 msgstr "Dnsmasq versi %s  %s\n"
 
 # OK
-#: option.c:3046
+#: option.c:3259
 #, c-format
 msgid ""
 "Compile time options %s\n"
@@ -913,180 +915,157 @@ msgstr ""
 "\n"
 
 # OK
-#: option.c:3047
+#: option.c:3260
 #, c-format
 msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
 msgstr "Perangkat lunak ini tersedia TANPA JAMINAN SEDIKITPUN.\n"
 
 # OK
-#: option.c:3048
+#: option.c:3261
 #, 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:3049
+#: option.c:3262
 #, 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:3060
+#: option.c:3273
 msgid "try --help"
 msgstr ""
 
-#: option.c:3062
+#: option.c:3275
 msgid "try -w"
 msgstr ""
 
 # OK
-#: option.c:3065
+#: option.c:3278
 #, fuzzy, c-format
 msgid "bad command line options: %s"
 msgstr "pilihan baris perintah salah: %s."
 
 # OK
-#: option.c:3106
+#: option.c:3319
 #, c-format
 msgid "cannot get host-name: %s"
 msgstr "tidak bisa mendapatkan host-name: %s"
 
 # OK
-#: option.c:3134
+#: option.c:3347
 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:3144
+#: option.c:3357
 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:3147 network.c:813 dhcp.c:814
+#: option.c:3360 network.c:848 dhcp.c:814
 #, fuzzy, c-format
 msgid "failed to read %s: %s"
 msgstr "gagal membaca %s: %s"
 
 # OK
-#: option.c:3164
+#: option.c:3377
 #, c-format
 msgid "no search directive found in %s"
 msgstr "tidak ditemukan direktif search di %s"
 
-#: option.c:3185
+#: option.c:3398
 msgid "there must be a default domain when --dhcp-fqdn is set"
 msgstr ""
 
-#: option.c:3189
+#: option.c:3402
 msgid "syntax check OK"
 msgstr ""
 
 # OK
-#: forward.c:427
+#: forward.c:461
 #, c-format
 msgid "nameserver %s refused to do a recursive query"
 msgstr "nameserver %s menolak melakukan resolusi rekursif"
 
-#: forward.c:455
+#: forward.c:489
 #, c-format
 msgid "possible DNS-rebind attack detected: %s"
 msgstr ""
 
 # OK
-#: network.c:110
+#: network.c:171
 #, fuzzy, c-format
 msgid "unknown interface %s in bridge-interface"
 msgstr "antarmuka tidak dikenal %s"
 
 # OK
-#: network.c:467 dnsmasq.c:188
-#, c-format
-msgid "failed to create listening socket: %s"
-msgstr "gagal membuat socket: %s "
-
-# OK
-#: network.c:474
-#, c-format
-msgid "failed to set IPV6 options on listening socket: %s"
-msgstr "gagal menyetel IPV6 pada socket: %s"
-
-#: network.c:500
-#, c-format
-msgid "failed to bind listening socket for %s: %s"
-msgstr "gagal mem-bind socket untuk mendengarkan %s: %s"
-
-# OK
-#: network.c:505
-#, c-format
-msgid "failed to listen on socket: %s"
-msgstr "gagal mendengarkan di socket: %s"
-
-# OK
-#: network.c:517
+#: network.c:380
 #, fuzzy, c-format
-msgid "failed to create TFTP socket: %s"
+msgid "failed to create listening socket for %s: %s"
 msgstr "gagal membuat socket: %s "
 
-#: network.c:711
+#: network.c:746
 #, fuzzy, c-format
 msgid "failed to bind server socket for %s: %s"
 msgstr "gagal mem-bind socket untuk mendengarkan %s: %s"
 
 # OK
-#: network.c:748
+#: network.c:783
 #, c-format
 msgid "ignoring nameserver %s - local interface"
 msgstr "mengabaikan nameserver %s - antarmuka lokal"
 
 # OK
-#: network.c:759
+#: network.c:794
 #, fuzzy, c-format
 msgid "ignoring nameserver %s - cannot make/bind socket: %s"
 msgstr "mengabaikan nameserver %s - tak dapat membuat/mem-bind socket: %s"
 
 # OK
-#: network.c:776
+#: network.c:811
 msgid "unqualified"
 msgstr "tidak memenuhi syarat"
 
-#: network.c:776
+#: network.c:811
 msgid "names"
 msgstr ""
 
-#: network.c:778
+#: network.c:813
 msgid "default"
 msgstr ""
 
 # OK
-#: network.c:780
+#: network.c:815
 msgid "domain"
 msgstr "domain"
 
 # OK
-#: network.c:783
+#: network.c:818
 #, c-format
 msgid "using local addresses only for %s %s"
 msgstr "menggunakan alamat lokal saja untuk %s %s"
 
 # OK
-#: network.c:785
+#: network.c:820
 #, fuzzy, c-format
 msgid "using standard nameservers for %s %s"
 msgstr "menggunakan nameserver %s#%d untuk %s %s"
 
 # OK
-#: network.c:787
+#: network.c:822
 #, c-format
 msgid "using nameserver %s#%d for %s %s"
 msgstr "menggunakan nameserver %s#%d untuk %s %s"
 
 # OK
-#: network.c:790
+#: network.c:825
 #, fuzzy, c-format
 msgid "using nameserver %s#%d(via %s)"
 msgstr "menggunakan nameserver %s#%d"
 
 # OK
-#: network.c:792
+#: network.c:827
 #, c-format
 msgid "using nameserver %s#%d"
 msgstr "menggunakan nameserver %s#%d"
@@ -1120,207 +1099,207 @@ msgid "no interface with address %s"
 msgstr "tidak ada antarmuka dengan alamat %s"
 
 # OK
-#: dnsmasq.c:200 dnsmasq.c:671
+#: dnsmasq.c:199 dnsmasq.c:670
 #, c-format
 msgid "DBus error: %s"
 msgstr "DBus error: %s"
 
 # OK
-#: dnsmasq.c:203
+#: dnsmasq.c:202
 msgid "DBus not available: set HAVE_DBUS in src/config.h"
 msgstr "DBus tidak tersedia: setel HAVE_DBUS dalam src/config.h"
 
-#: dnsmasq.c:229
+#: dnsmasq.c:228
 #, c-format
 msgid "unknown user or group: %s"
 msgstr ""
 
-#: dnsmasq.c:284
+#: dnsmasq.c:283
 #, c-format
 msgid "cannot chdir to filesystem root: %s"
 msgstr ""
 
 # OK
-#: dnsmasq.c:448
+#: dnsmasq.c:447
 #, fuzzy, c-format
 msgid "started, version %s DNS disabled"
 msgstr "dimulai, cache versi %s di disable"
 
 # OK
-#: dnsmasq.c:450
+#: dnsmasq.c:449
 #, c-format
 msgid "started, version %s cachesize %d"
 msgstr "dimulai, versi %s ukuran cache %d"
 
 # OK
-#: dnsmasq.c:452
+#: dnsmasq.c:451
 #, c-format
 msgid "started, version %s cache disabled"
 msgstr "dimulai, cache versi %s di disable"
 
 # OK
-#: dnsmasq.c:454
+#: dnsmasq.c:453
 #, c-format
 msgid "compile time options: %s"
 msgstr "pilihan-pilihan saat kompilasi: %s"
 
 # OK
-#: dnsmasq.c:460
+#: dnsmasq.c:459
 msgid "DBus support enabled: connected to system bus"
 msgstr "dukungan DBus dimungkinkan: terkoneksi pada bus sistem"
 
 # OK
-#: dnsmasq.c:462
+#: dnsmasq.c:461
 msgid "DBus support enabled: bus connection pending"
 msgstr "dukungan DBus dimungkinkan: koneksi bus ditunda"
 
 # OK
-#: dnsmasq.c:467
+#: dnsmasq.c:466
 #, fuzzy, c-format
 msgid "warning: failed to change owner of %s: %s"
 msgstr "gagal memuat nama-nama dari %s: %s"
 
 # OK
-#: dnsmasq.c:471
+#: dnsmasq.c:470
 msgid "setting --bind-interfaces option because of OS limitations"
 msgstr "setelan opsi --bind-interfaces disebabkan keterbatasan OS"
 
 # OK
-#: dnsmasq.c:476
+#: dnsmasq.c:475
 #, c-format
 msgid "warning: interface %s does not currently exist"
 msgstr "peringatan: antarmuka %s tidak ada"
 
-#: dnsmasq.c:481
+#: dnsmasq.c:480
 msgid "warning: ignoring resolv-file flag because no-resolv is set"
 msgstr ""
 
 # OK
-#: dnsmasq.c:484
+#: dnsmasq.c:483
 #, fuzzy
 msgid "warning: no upstream servers configured"
 msgstr "menyetel server-server di atas dengan DBus"
 
-#: dnsmasq.c:488
+#: dnsmasq.c:487
 #, c-format
 msgid "asynchronous logging enabled, queue limit is %d messages"
 msgstr ""
 
 # OK
-#: dnsmasq.c:501
+#: dnsmasq.c:500
 #, c-format
 msgid "DHCP, static leases only on %.0s%s, lease time %s"
 msgstr "DHCP, lease static pada %.0s%s, waktu lease %s"
 
-#: dnsmasq.c:503
+#: dnsmasq.c:502
 #, c-format
 msgid "DHCP, proxy on subnet %.0s%s%.0s"
 msgstr ""
 
 # OK
-#: dnsmasq.c:504
+#: dnsmasq.c:503
 #, c-format
 msgid "DHCP, IP range %s -- %s, lease time %s"
 msgstr "DHCP, jangkaun IP %s -- %s, waktu lease %s"
 
-#: dnsmasq.c:519
+#: dnsmasq.c:518
 msgid "root is "
 msgstr ""
 
 # OK
-#: dnsmasq.c:519
+#: dnsmasq.c:518
 #, fuzzy
 msgid "enabled"
 msgstr "di disable"
 
-#: dnsmasq.c:521
+#: dnsmasq.c:520
 msgid "secure mode"
 msgstr ""
 
-#: dnsmasq.c:547
+#: dnsmasq.c:546
 #, c-format
 msgid "restricting maximum simultaneous TFTP transfers to %d"
 msgstr ""
 
 # OK
-#: dnsmasq.c:673
+#: dnsmasq.c:672
 msgid "connected to system DBus"
 msgstr "terhubung ke sistem DBus"
 
-#: dnsmasq.c:768
+#: dnsmasq.c:767
 #, c-format
 msgid "cannot fork into background: %s"
 msgstr ""
 
 # OK
-#: dnsmasq.c:771
+#: dnsmasq.c:770
 #, fuzzy, c-format
 msgid "failed to create helper: %s"
 msgstr "gagal membaca %s: %s"
 
-#: dnsmasq.c:774
+#: dnsmasq.c:773
 #, c-format
 msgid "setting capabilities failed: %s"
 msgstr ""
 
 # OK
-#: dnsmasq.c:778
+#: dnsmasq.c:777
 #, fuzzy, c-format
 msgid "failed to change user-id to %s: %s"
 msgstr "gagal memuat nama-nama dari %s: %s"
 
 # OK
-#: dnsmasq.c:783
+#: dnsmasq.c:782
 #, fuzzy, c-format
 msgid "failed to change group-id to %s: %s"
 msgstr "gagal memuat nama-nama dari %s: %s"
 
 # OK
-#: dnsmasq.c:786
+#: dnsmasq.c:785
 #, fuzzy, c-format
 msgid "failed to open pidfile %s: %s"
 msgstr "gagal membaca %s: %s"
 
 # OK
-#: dnsmasq.c:789
+#: dnsmasq.c:788
 #, fuzzy, c-format
 msgid "cannot open %s: %s"
 msgstr "tidak bisa membuka %s:%s"
 
-#: dnsmasq.c:844
+#: dnsmasq.c:843
 #, c-format
 msgid "child process killed by signal %d"
 msgstr ""
 
-#: dnsmasq.c:848
+#: dnsmasq.c:847
 #, c-format
 msgid "child process exited with status %d"
 msgstr ""
 
 # OK
-#: dnsmasq.c:852
+#: dnsmasq.c:851
 #, fuzzy, c-format
 msgid "failed to execute %s: %s"
 msgstr "gagal mengakses %s: %s"
 
-#: dnsmasq.c:896
+#: dnsmasq.c:895
 msgid "exiting on receipt of SIGTERM"
 msgstr "keluar karena menerima SIGTERM"
 
 # OK
-#: dnsmasq.c:924
+#: dnsmasq.c:923
 #, fuzzy, c-format
 msgid "failed to access %s: %s"
 msgstr "gagal mengakses %s: %s"
 
 # OK
-#: dnsmasq.c:954
+#: dnsmasq.c:953
 #, c-format
 msgid "reading %s"
 msgstr "membaca %s"
 
 # OK
-#: dnsmasq.c:965
+#: dnsmasq.c:964
 #, fuzzy, c-format
 msgid "no servers found in %s, will retry"
 msgstr "tidak ditemukan direktif search di %s"
@@ -1461,22 +1440,22 @@ msgid "disabled"
 msgstr "di disable"
 
 # OK
-#: rfc2131.c:466 rfc2131.c:969 rfc2131.c:1335
+#: rfc2131.c:466 rfc2131.c:978 rfc2131.c:1350
 msgid "ignored"
 msgstr "diabaikan"
 
 # OK
-#: rfc2131.c:481 rfc2131.c:1183
+#: rfc2131.c:481 rfc2131.c:1197
 msgid "address in use"
 msgstr "alamat telah digunakan"
 
 # OK
-#: rfc2131.c:495 rfc2131.c:1023
+#: rfc2131.c:495 rfc2131.c:1032
 msgid "no address available"
 msgstr "tak ada alamat yang tersedia"
 
 # OK
-#: rfc2131.c:502 rfc2131.c:1146
+#: rfc2131.c:502 rfc2131.c:1160
 msgid "wrong network"
 msgstr "jaringan yang salah"
 
@@ -1486,7 +1465,7 @@ msgid "no address configured"
 msgstr "tak ada alamat yang disetel"
 
 # OK
-#: rfc2131.c:522 rfc2131.c:1196
+#: rfc2131.c:522 rfc2131.c:1210
 msgid "no leases left"
 msgstr "tak ada lease yang tersisa"
 
@@ -1512,129 +1491,129 @@ msgid "PXE BIS not supported"
 msgstr ""
 
 # OK
-#: rfc2131.c:939
+#: rfc2131.c:948
 #, fuzzy, c-format
 msgid "disabling DHCP static address %s for %s"
 msgstr "men-disable alamat statik DHCP %s"
 
 # OK
-#: rfc2131.c:960
+#: rfc2131.c:969
 msgid "unknown lease"
 msgstr "lease tidak diketahui"
 
-#: rfc2131.c:992
+#: rfc2131.c:1001
 #, c-format
 msgid "not using configured address %s because it is leased to %s"
 msgstr ""
 
-#: rfc2131.c:1002
+#: rfc2131.c:1011
 #, c-format
 msgid "not using configured address %s because it is in use by the server or relay"
 msgstr ""
 
-#: rfc2131.c:1005
+#: rfc2131.c:1014
 #, c-format
 msgid "not using configured address %s because it was previously declined"
 msgstr ""
 
-#: rfc2131.c:1021 rfc2131.c:1189
+#: rfc2131.c:1030 rfc2131.c:1203
 msgid "no unique-id"
 msgstr ""
 
-#: rfc2131.c:1090
+#: rfc2131.c:1099
 msgid "wrong server-ID"
 msgstr ""
 
 # OK
-#: rfc2131.c:1108
+#: rfc2131.c:1117
 msgid "wrong address"
 msgstr "alamat salah"
 
 # OK
-#: rfc2131.c:1121
+#: rfc2131.c:1135
 msgid "lease not found"
 msgstr "lease tak ditemukan"
 
 # OK
-#: rfc2131.c:1154
+#: rfc2131.c:1168
 msgid "address not available"
 msgstr "alamat tak tersedia"
 
 # OK
-#: rfc2131.c:1165
+#: rfc2131.c:1179
 msgid "static lease available"
 msgstr "lease statik tak tersedia"
 
 # OK
-#: rfc2131.c:1169
+#: rfc2131.c:1183
 msgid "address reserved"
 msgstr "alamat telah dipesan"
 
-#: rfc2131.c:1177
+#: rfc2131.c:1191
 #, c-format
 msgid "abandoning lease to %s of %s"
 msgstr ""
 
-#: rfc2131.c:1757
+#: rfc2131.c:1772
 #, c-format
 msgid "%u tags: %s"
 msgstr ""
 
-#: rfc2131.c:1770
+#: rfc2131.c:1785
 #, c-format
 msgid "%u bootfile name: %s"
 msgstr ""
 
 # OK
-#: rfc2131.c:1779
+#: rfc2131.c:1794
 #, fuzzy, c-format
 msgid "%u server name: %s"
 msgstr "DBus error: %s"
 
 # OK
-#: rfc2131.c:1793
+#: rfc2131.c:1808
 #, fuzzy, c-format
 msgid "%u next server: %s"
 msgstr "DBus error: %s"
 
-#: rfc2131.c:1796
+#: rfc2131.c:1811
 #, c-format
 msgid "%u broadcast response"
 msgstr ""
 
-#: rfc2131.c:1859
+#: rfc2131.c:1874
 #, c-format
 msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
 msgstr ""
 
-#: rfc2131.c:2105
+#: rfc2131.c:2120
 msgid "PXE menu too large"
 msgstr ""
 
-#: rfc2131.c:2218
+#: rfc2131.c:2233
 #, c-format
 msgid "Ignoring domain %s for DHCP host name %s"
 msgstr ""
 
 # OK
-#: rfc2131.c:2236
+#: rfc2131.c:2251
 #, fuzzy, c-format
 msgid "%u requested options: %s"
 msgstr "pilihan-pilihan saat kompilasi: %s"
 
-#: rfc2131.c:2503
+#: rfc2131.c:2518
 #, c-format
 msgid "cannot send RFC3925 option: too many options for enterprise number %d"
 msgstr ""
 
 # OK
-#: netlink.c:66
+#: netlink.c:70
 #, fuzzy, c-format
 msgid "cannot create netlink socket: %s"
 msgstr "tidak bisa mem-bind netlink socket: %s"
 
 # OK
-#: netlink.c:265
+#: netlink.c:288
 #, fuzzy, c-format
 msgid "netlink returns error: %s"
 msgstr "DBus error: %s"
@@ -1655,48 +1634,48 @@ msgid "could not register a DBus message handler"
 msgstr "tidak bisa mendaftar sebuah DBus message handler"
 
 # OK
-#: bpf.c:150
+#: bpf.c:217
 #, c-format
 msgid "cannot create DHCP BPF socket: %s"
 msgstr "tidak dapat membuat socket DHCP BPF: %s"
 
 # OK
-#: bpf.c:178
+#: bpf.c:245
 #, fuzzy, c-format
 msgid "DHCP request for unsupported hardware type (%d) received on %s"
 msgstr "permintaan DHCP untuk tipe hardware yang tidak didukung (%d) diterima pada %s"
 
-#: tftp.c:233
+#: tftp.c:281
 msgid "unable to get free port for TFTP"
 msgstr ""
 
-#: tftp.c:248
+#: tftp.c:296
 #, c-format
 msgid "unsupported request from %s"
 msgstr ""
 
-#: tftp.c:336
-#, c-format
-msgid "sent %s to %s"
-msgstr ""
-
 # OK
-#: tftp.c:359
+#: tftp.c:406
 #, fuzzy, c-format
 msgid "file %s not found"
 msgstr "lease tak ditemukan"
 
-#: tftp.c:470
+#: tftp.c:522
 #, c-format
 msgid "error %d %s received from %s"
 msgstr ""
 
 # OK
-#: tftp.c:501
+#: tftp.c:554
 #, fuzzy, c-format
 msgid "failed sending %s to %s"
 msgstr "gagal membaca %s: %s"
 
+#: tftp.c:568
+#, c-format
+msgid "sent %s to %s"
+msgstr ""
+
 #: log.c:173
 #, c-format
 msgid "overflow: %d log entries lost"
@@ -1708,10 +1687,30 @@ msgid "log failed: %s"
 msgstr ""
 
 # OK
-#: log.c:431
+#: log.c:436
 msgid "FAILED to start up"
 msgstr "GAGAL untuk memulai"
 
+# OK
+#~ msgid "TXT record string too long"
+#~ msgstr "string rekord TXT terlalu panjang"
+
+# OK
+#~ msgid "failed to set IPV6 options on listening socket: %s"
+#~ msgstr "gagal menyetel IPV6 pada socket: %s"
+
+#~ msgid "failed to bind listening socket for %s: %s"
+#~ msgstr "gagal mem-bind socket untuk mendengarkan %s: %s"
+
+# OK
+#~ msgid "failed to listen on socket: %s"
+#~ msgstr "gagal mendengarkan di socket: %s"
+
+# OK
+#, fuzzy
+#~ msgid "failed to create TFTP socket: %s"
+#~ msgstr "gagal membuat socket: %s "
+
 # OK
 #~ msgid "must set exactly one interface on broken systems without IP_RECVIF"
 #~ msgstr "harus menyetel satu antarmuka saja pada sistem yang tidak benar dengan IP_RECVIF"
@@ -1747,10 +1746,6 @@ msgstr "GAGAL untuk memulai"
 #~ msgid "read %s - %d hosts"
 #~ msgstr "membaca %s - %d alamat"
 
-# OK
-#~ msgid "bad dhcp-host"
-#~ msgstr "dhcp-host salah"
-
 # OK
 #~ msgid "domains"
 #~ msgstr "domain-domain"
index af819e9e564bc59b3c410edae2babc4486cff363..b9ec12da28c3d016e11b4fe46b032dda59e319cd 100644 (file)
--- a/po/it.po
+++ b/po/it.po
@@ -15,61 +15,56 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: cache.c:764
+#: cache.c:761
 #, c-format
 msgid "failed to load names from %s: %s"
 msgstr ""
 
-#: cache.c:798 dhcp.c:865
+#: cache.c:795 dhcp.c:865
 #, c-format
 msgid "bad address at %s line %d"
 msgstr ""
 
-#: cache.c:856 dhcp.c:881
+#: cache.c:853 dhcp.c:881
 #, c-format
 msgid "bad name at %s line %d"
 msgstr ""
 
-#: cache.c:863 dhcp.c:956
+#: cache.c:860 dhcp.c:956
 #, c-format
 msgid "read %s - %d addresses"
 msgstr ""
 
-#: cache.c:902
+#: cache.c:899
 msgid "cleared cache"
 msgstr ""
 
-#: cache.c:933 option.c:1112
-#, c-format
-msgid "cannot access directory %s: %s"
-msgstr ""
-
-#: cache.c:1053
+#: cache.c:960
 #, c-format
 msgid "%s is a CNAME, not giving it to the DHCP lease of %s"
 msgstr ""
 
-#: cache.c:1059
+#: cache.c:966
 #, 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:1132
+#: cache.c:1039
 #, c-format
 msgid "time %lu"
 msgstr ""
 
-#: cache.c:1133
+#: cache.c:1040
 #, c-format
 msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
 msgstr ""
 
-#: cache.c:1135
+#: cache.c:1042
 #, c-format
 msgid "queries forwarded %u, queries answered locally %u"
 msgstr ""
 
-#: cache.c:1158
+#: cache.c:1068
 #, c-format
 msgid "server %s#%d: queries sent %u, retried or failed %u"
 msgstr ""
@@ -83,7 +78,7 @@ msgstr ""
 msgid "failed to allocate memory"
 msgstr ""
 
-#: util.c:229 option.c:567
+#: util.c:229 option.c:573
 msgid "could not get memory"
 msgstr ""
 
@@ -102,821 +97,805 @@ msgstr ""
 msgid "infinite"
 msgstr ""
 
-#: option.c:240
+#: option.c:244
 msgid "Specify local address(es) to listen on."
 msgstr ""
 
-#: option.c:241
+#: option.c:245
 msgid "Return ipaddr for all hosts in specified domains."
 msgstr ""
 
-#: option.c:242
+#: option.c:246
 msgid "Fake reverse lookups for RFC1918 private address ranges."
 msgstr ""
 
-#: option.c:243
+#: option.c:247
 msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
 msgstr ""
 
-#: option.c:244
+#: option.c:248
 #, c-format
 msgid "Specify the size of the cache in entries (defaults to %s)."
 msgstr ""
 
-#: option.c:245
+#: option.c:249
 #, c-format
 msgid "Specify configuration file (defaults to %s)."
 msgstr ""
 
-#: option.c:246
+#: option.c:250
 msgid "Do NOT fork into the background: run in debug mode."
 msgstr ""
 
-#: option.c:247
+#: option.c:251
 msgid "Do NOT forward queries with no domain part."
 msgstr ""
 
-#: option.c:248
+#: option.c:252
 msgid "Return self-pointing MX records for local hosts."
 msgstr ""
 
-#: option.c:249
+#: option.c:253
 msgid "Expand simple names in /etc/hosts with domain-suffix."
 msgstr ""
 
-#: option.c:250
+#: option.c:254
 msgid "Don't forward spurious DNS requests from Windows hosts."
 msgstr ""
 
-#: option.c:251
+#: option.c:255
 msgid "Enable DHCP in the range given with lease duration."
 msgstr ""
 
-#: option.c:252
+#: option.c:256
 #, c-format
 msgid "Change to this group after startup (defaults to %s)."
 msgstr ""
 
-#: option.c:253
+#: option.c:257
 msgid "Set address or hostname for a specified machine."
 msgstr ""
 
-#: option.c:254
+#: option.c:258
 msgid "Read DHCP host specs from file."
 msgstr ""
 
-#: option.c:255
+#: option.c:259
 msgid "Read DHCP option specs from file."
 msgstr ""
 
-#: option.c:256
+#: option.c:260
 msgid "Evaluate conditional tag expression."
 msgstr ""
 
-#: option.c:257
+#: option.c:261
 #, c-format
 msgid "Do NOT load %s file."
 msgstr ""
 
-#: option.c:258
+#: option.c:262
 #, c-format
 msgid "Specify a hosts file to be read in addition to %s."
 msgstr ""
 
-#: option.c:259
+#: option.c:263
 msgid "Specify interface(s) to listen on."
 msgstr ""
 
-#: option.c:260
+#: option.c:264
 msgid "Specify interface(s) NOT to listen on."
 msgstr ""
 
-#: option.c:261
+#: option.c:265
 msgid "Map DHCP user class to tag."
 msgstr ""
 
-#: option.c:262
+#: option.c:266
 msgid "Map RFC3046 circuit-id to tag."
 msgstr ""
 
-#: option.c:263
+#: option.c:267
 msgid "Map RFC3046 remote-id to tag."
 msgstr ""
 
-#: option.c:264
+#: option.c:268
 msgid "Map RFC3993 subscriber-id to tag."
 msgstr ""
 
-#: option.c:265
+#: option.c:269
 msgid "Don't do DHCP for hosts with tag set."
 msgstr ""
 
-#: option.c:266
+#: option.c:270
 msgid "Force broadcast replies for hosts with tag set."
 msgstr ""
 
-#: option.c:267
+#: option.c:271
 msgid "Do NOT fork into the background, do NOT run in debug mode."
 msgstr ""
 
-#: option.c:268
+#: option.c:272
 msgid "Assume we are the only DHCP server on the local network."
 msgstr ""
 
-#: option.c:269
+#: option.c:273
 #, c-format
 msgid "Specify where to store DHCP leases (defaults to %s)."
 msgstr ""
 
-#: option.c:270
+#: option.c:274
 msgid "Return MX records for local hosts."
 msgstr ""
 
-#: option.c:271
+#: option.c:275
 msgid "Specify an MX record."
 msgstr ""
 
-#: option.c:272
+#: option.c:276
 msgid "Specify BOOTP options to DHCP server."
 msgstr ""
 
-#: option.c:273
+#: option.c:277
 #, c-format
 msgid "Do NOT poll %s file, reload only on SIGHUP."
 msgstr ""
 
-#: option.c:274
+#: option.c:278
 msgid "Do NOT cache failed search results."
 msgstr ""
 
-#: option.c:275
+#: option.c:279
 #, c-format
 msgid "Use nameservers strictly in the order given in %s."
 msgstr ""
 
-#: option.c:276
+#: option.c:280
 msgid "Specify options to be sent to DHCP clients."
 msgstr ""
 
-#: option.c:277
+#: option.c:281
 msgid "DHCP option sent even if the client does not request it."
 msgstr ""
 
-#: option.c:278
+#: option.c:282
 msgid "Specify port to listen for DNS requests on (defaults to 53)."
 msgstr ""
 
-#: option.c:279
+#: option.c:283
 #, c-format
 msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
 msgstr ""
 
-#: option.c:280
+#: option.c:284
 msgid "Log DNS queries."
 msgstr ""
 
-#: option.c:281
+#: option.c:285
 msgid "Force the originating port for upstream DNS queries."
 msgstr ""
 
-#: option.c:282
+#: option.c:286
 msgid "Do NOT read resolv.conf."
 msgstr ""
 
-#: option.c:283
+#: option.c:287
 #, c-format
 msgid "Specify path to resolv.conf (defaults to %s)."
 msgstr ""
 
-#: option.c:284
+#: option.c:288
 msgid "Specify address(es) of upstream servers with optional domains."
 msgstr ""
 
-#: option.c:285
+#: option.c:289
 msgid "Never forward queries to specified domains."
 msgstr ""
 
-#: option.c:286
+#: option.c:290
 msgid "Specify the domain to be assigned in DHCP leases."
 msgstr ""
 
-#: option.c:287
+#: option.c:291
 msgid "Specify default target in an MX record."
 msgstr ""
 
-#: option.c:288
+#: option.c:292
 msgid "Specify time-to-live in seconds for replies from /etc/hosts."
 msgstr ""
 
-#: option.c:289
+#: option.c:293
 msgid "Specify time-to-live in seconds for negative caching."
 msgstr ""
 
-#: option.c:290
+#: option.c:294
 msgid "Specify time-to-live in seconds for maximum TTL to send to clients."
 msgstr ""
 
-#: option.c:291
+#: option.c:295
 #, c-format
 msgid "Change to this user after startup. (defaults to %s)."
 msgstr ""
 
-#: option.c:292
+#: option.c:296
 msgid "Map DHCP vendor class to tag."
 msgstr ""
 
-#: option.c:293
+#: option.c:297
 msgid "Display dnsmasq version and copyright information."
 msgstr ""
 
-#: option.c:294
+#: option.c:298
 msgid "Translate IPv4 addresses from upstream servers."
 msgstr ""
 
-#: option.c:295
+#: option.c:299
 msgid "Specify a SRV record."
 msgstr ""
 
-#: option.c:296
+#: option.c:300
 msgid "Display this message. Use --help dhcp for known DHCP options."
 msgstr ""
 
-#: option.c:297
+#: option.c:301
 #, c-format
 msgid "Specify path of PID file (defaults to %s)."
 msgstr ""
 
-#: option.c:298
+#: option.c:302
 #, c-format
 msgid "Specify maximum number of DHCP leases (defaults to %s)."
 msgstr ""
 
-#: option.c:299
+#: option.c:303
 msgid "Answer DNS queries based on the interface a query was sent to."
 msgstr ""
 
-#: option.c:300
+#: option.c:304
 msgid "Specify TXT DNS record."
 msgstr ""
 
-#: option.c:301
+#: option.c:305
 msgid "Specify PTR DNS record."
 msgstr ""
 
-#: option.c:302
+#: option.c:306
 msgid "Give DNS name to IPv4 address of interface."
 msgstr ""
 
-#: option.c:303
+#: option.c:307
 msgid "Bind only to interfaces in use."
 msgstr ""
 
-#: option.c:304
+#: option.c:308
 #, c-format
 msgid "Read DHCP static host information from %s."
 msgstr ""
 
-#: option.c:305
+#: option.c:309
 msgid "Enable the DBus interface for setting upstream servers, etc."
 msgstr ""
 
-#: option.c:306
+#: option.c:310
 msgid "Do not provide DHCP on this interface, only provide DNS."
 msgstr ""
 
-#: option.c:307
+#: option.c:311
 msgid "Enable dynamic address allocation for bootp."
 msgstr ""
 
-#: option.c:308
+#: option.c:312
 msgid "Map MAC address (with wildcards) to option set."
 msgstr ""
 
-#: option.c:309
+#: option.c:313
 msgid "Treat DHCP requests on aliases as arriving from interface."
 msgstr ""
 
-#: option.c:310
+#: option.c:314
 msgid "Disable ICMP echo address checking in the DHCP server."
 msgstr ""
 
-#: option.c:311
+#: option.c:315
 msgid "Script to run on DHCP lease creation and destruction."
 msgstr ""
 
-#: option.c:312
+#: option.c:316
 msgid "Read configuration from all the files in this directory."
 msgstr ""
 
-#: option.c:313
+#: option.c:317
 msgid "Log to this syslog facility or file. (defaults to DAEMON)"
 msgstr ""
 
-#: option.c:314
+#: option.c:318
 msgid "Do not use leasefile."
 msgstr ""
 
-#: option.c:315
+#: option.c:319
 #, c-format
 msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
 msgstr ""
 
-#: option.c:316
+#: option.c:320
 #, c-format
 msgid "Clear DNS cache when reloading %s."
 msgstr ""
 
-#: option.c:317
+#: option.c:321
 msgid "Ignore hostnames provided by DHCP clients."
 msgstr ""
 
-#: option.c:318
+#: option.c:322
 msgid "Do NOT reuse filename and server fields for extra DHCP options."
 msgstr ""
 
-#: option.c:319
+#: option.c:323
 msgid "Enable integrated read-only TFTP server."
 msgstr ""
 
-#: option.c:320
+#: option.c:324
 msgid "Export files by TFTP only from the specified subtree."
 msgstr ""
 
-#: option.c:321
+#: option.c:325
 msgid "Add client IP address to tftp-root."
 msgstr ""
 
-#: option.c:322
+#: option.c:326
 msgid "Allow access only to files owned by the user running dnsmasq."
 msgstr ""
 
-#: option.c:323
+#: option.c:327
 #, c-format
 msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
 msgstr ""
 
-#: option.c:324
+#: option.c:328
 msgid "Disable the TFTP blocksize extension."
 msgstr ""
 
-#: option.c:325
+#: option.c:329
 msgid "Ephemeral port range for use by TFTP transfers."
 msgstr ""
 
-#: option.c:326
+#: option.c:330
 msgid "Extra logging for DHCP."
 msgstr ""
 
-#: option.c:327
+#: option.c:331
 msgid "Enable async. logging; optionally set queue length."
 msgstr ""
 
-#: option.c:328
+#: option.c:332
 msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
 msgstr ""
 
-#: option.c:329
+#: option.c:333
 msgid "Allow rebinding of 127.0.0.0/8, for RBL servers."
 msgstr ""
 
-#: option.c:330
+#: option.c:334
 msgid "Inhibit DNS-rebind protection on this domain."
 msgstr ""
 
-#: option.c:331
+#: option.c:335
 msgid "Always perform DNS queries to all servers."
 msgstr ""
 
-#: option.c:332
+#: option.c:336
 msgid "Set tag if client includes matching option in request."
 msgstr ""
 
-#: option.c:333
+#: option.c:337
 msgid "Use alternative ports for DHCP."
 msgstr ""
 
-#: option.c:334
+#: option.c:338
 msgid "Run lease-change script as this user."
 msgstr ""
 
-#: option.c:335
+#: option.c:339
 msgid "Specify NAPTR DNS record."
 msgstr ""
 
-#: option.c:336
+#: option.c:340
 msgid "Specify lowest port available for DNS query transmission."
 msgstr ""
 
-#: option.c:337
+#: option.c:341
 msgid "Use only fully qualified domain names for DHCP clients."
 msgstr ""
 
-#: option.c:338
+#: option.c:342
 msgid "Generate hostnames based on MAC address for nameless clients."
 msgstr ""
 
-#: option.c:339
+#: option.c:343
 msgid "Use these DHCP relays as full proxies."
 msgstr ""
 
-#: option.c:340
+#: option.c:344
 msgid "Specify alias name for LOCAL DNS name."
 msgstr ""
 
-#: option.c:341
+#: option.c:345
 msgid "Prompt to send to PXE clients."
 msgstr ""
 
-#: option.c:342
+#: option.c:346
 msgid "Boot service for PXE menu."
 msgstr ""
 
-#: option.c:343
+#: option.c:347
 msgid "Check configuration syntax."
 msgstr ""
 
-#: option.c:632
+#: option.c:348
+msgid "Add requestor's MAC address to forwarded DNS queries"
+msgstr ""
+
+#: option.c:349
+msgid "Proxy DNSSEC validation results from upstream nameservers"
+msgstr ""
+
+#: option.c:638
 #, c-format
 msgid ""
 "Usage: dnsmasq [options]\n"
 "\n"
 msgstr ""
 
-#: option.c:634
+#: option.c:640
 #, c-format
 msgid "Use short options only on the command line.\n"
 msgstr ""
 
-#: option.c:636
+#: option.c:642
 #, c-format
 msgid "Valid options are:\n"
 msgstr ""
 
-#: option.c:677
+#: option.c:683
 #, c-format
 msgid "Known DHCP options:\n"
 msgstr ""
 
-#: option.c:781
+#: option.c:798
 msgid "bad dhcp-option"
 msgstr ""
 
-#: option.c:838
+#: option.c:860
 msgid "bad IP address"
 msgstr ""
 
-#: option.c:941
+#: option.c:966
 msgid "bad domain in dhcp-option"
 msgstr ""
 
-#: option.c:1007
+#: option.c:1032
 msgid "dhcp-option too long"
 msgstr ""
 
-#: option.c:1016
+#: option.c:1041
 msgid "illegal dhcp-match"
 msgstr ""
 
-#: option.c:1052
+#: option.c:1085
 msgid "illegal repeated flag"
 msgstr ""
 
-#: option.c:1060
+#: option.c:1093
 msgid "illegal repeated keyword"
 msgstr ""
 
-#: option.c:1143 tftp.c:413
+#: option.c:1145 option.c:3024
 #, c-format
-msgid "cannot access %s: %s"
-msgstr ""
-
-#: option.c:1188
-msgid "only one dhcp-hostsfile allowed"
+msgid "cannot access directory %s: %s"
 msgstr ""
 
-#: option.c:1195
-msgid "only one dhcp-optsfile allowed"
+#: option.c:1176 tftp.c:460
+#, c-format
+msgid "cannot access %s: %s"
 msgstr ""
 
-#: option.c:1240
+#: option.c:1259
 msgid "bad MX preference"
 msgstr ""
 
-#: option.c:1245
+#: option.c:1264
 msgid "bad MX name"
 msgstr ""
 
-#: option.c:1259
+#: option.c:1278
 msgid "bad MX target"
 msgstr ""
 
-#: option.c:1269
+#: option.c:1288
 msgid "cannot run scripts under uClinux"
 msgstr ""
 
-#: option.c:1271
+#: option.c:1290
 msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts"
 msgstr ""
 
-#: option.c:1516 option.c:1520
+#: option.c:1591 option.c:1595
 msgid "bad port"
 msgstr ""
 
-#: option.c:1539 option.c:1564
+#: option.c:1614 option.c:1639
 msgid "interface binding not supported"
 msgstr ""
 
-#: option.c:1710
+#: option.c:1785
 msgid "bad port range"
 msgstr ""
 
-#: option.c:1727
+#: option.c:1802
 msgid "bad bridge-interface"
 msgstr ""
 
-#: option.c:1769
+#: option.c:1844
 msgid "bad dhcp-range"
 msgstr ""
 
-#: option.c:1797
+#: option.c:1872
 msgid "only one tag allowed"
 msgstr ""
 
-#: option.c:1844
+#: option.c:1919
 msgid "inconsistent DHCP range"
 msgstr ""
 
-#: option.c:2019
+#: option.c:2013 option.c:2039
+msgid "bad hex constant"
+msgstr ""
+
+#: option.c:2101
 msgid "bad DHCP host name"
 msgstr ""
 
-#: option.c:2100
+#: option.c:2182
 msgid "bad tag-if"
 msgstr ""
 
-#: option.c:2374 option.c:2673
+#: option.c:2461 option.c:2746
 msgid "invalid port number"
 msgstr ""
 
-#: option.c:2436
+#: option.c:2523
 msgid "bad dhcp-proxy address"
 msgstr ""
 
-#: option.c:2476
+#: option.c:2563
 msgid "invalid alias range"
 msgstr ""
 
-#: option.c:2489
+#: option.c:2576
 msgid "bad interface name"
 msgstr ""
 
-#: option.c:2514
+#: option.c:2601
 msgid "bad CNAME"
 msgstr ""
 
-#: option.c:2519
+#: option.c:2606
 msgid "duplicate CNAME"
 msgstr ""
 
-#: option.c:2539
+#: option.c:2626
 msgid "bad PTR record"
 msgstr ""
 
-#: option.c:2570
+#: option.c:2657
 msgid "bad NAPTR record"
 msgstr ""
 
-#: option.c:2595
-msgid "TXT record string too long"
-msgstr ""
-
-#: option.c:2643
+#: option.c:2689
 msgid "bad TXT record"
 msgstr ""
 
-#: option.c:2659
+#: option.c:2732
 msgid "bad SRV record"
 msgstr ""
 
-#: option.c:2666
+#: option.c:2739
 msgid "bad SRV target"
 msgstr ""
 
-#: option.c:2680
+#: option.c:2753
 msgid "invalid priority"
 msgstr ""
 
-#: option.c:2687
+#: option.c:2760
 msgid "invalid weight"
 msgstr ""
 
-#: option.c:2706
+#: option.c:2779
 msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DBus support)"
 msgstr ""
 
-#: option.c:2748
-#, c-format
-msgid "files nested too deep in %s"
-msgstr ""
-
-#: option.c:2756 tftp.c:567
-#, c-format
-msgid "cannot read %s: %s"
-msgstr ""
-
-#: option.c:2813
+#: option.c:2843
 msgid "missing \""
 msgstr ""
 
-#: option.c:2872
+#: option.c:2902
 msgid "bad option"
 msgstr ""
 
-#: option.c:2874
+#: option.c:2904
 msgid "extraneous parameter"
 msgstr ""
 
-#: option.c:2876
+#: option.c:2906
 msgid "missing parameter"
 msgstr ""
 
-#: option.c:2880
+#: option.c:2910
 msgid "error"
 msgstr ""
 
-#: option.c:2885
+#: option.c:2915
 #, c-format
 msgid "%s at line %d of %%s"
 msgstr ""
 
-#: option.c:2942 option.c:2973
+#: option.c:2979 tftp.c:624
+#, c-format
+msgid "cannot read %s: %s"
+msgstr ""
+
+#: option.c:3145 option.c:3181
 #, c-format
 msgid "read %s"
 msgstr ""
 
-#: option.c:3045
+#: option.c:3229
+msgid "junk found in command line"
+msgstr ""
+
+#: option.c:3258
 #, c-format
 msgid "Dnsmasq version %s  %s\n"
 msgstr ""
 
-#: option.c:3046
+#: option.c:3259
 #, c-format
 msgid ""
 "Compile time options %s\n"
 "\n"
 msgstr ""
 
-#: option.c:3047
+#: option.c:3260
 #, c-format
 msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
 msgstr ""
 
-#: option.c:3048
+#: option.c:3261
 #, c-format
 msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
 msgstr ""
 
-#: option.c:3049
+#: option.c:3262
 #, c-format
 msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
 msgstr ""
 
-#: option.c:3060
+#: option.c:3273
 msgid "try --help"
 msgstr ""
 
-#: option.c:3062
+#: option.c:3275
 msgid "try -w"
 msgstr ""
 
-#: option.c:3065
+#: option.c:3278
 #, c-format
 msgid "bad command line options: %s"
 msgstr ""
 
-#: option.c:3106
+#: option.c:3319
 #, c-format
 msgid "cannot get host-name: %s"
 msgstr ""
 
-#: option.c:3134
+#: option.c:3347
 msgid "only one resolv.conf file allowed in no-poll mode."
 msgstr ""
 
-#: option.c:3144
+#: option.c:3357
 msgid "must have exactly one resolv.conf to read domain from."
 msgstr ""
 
-#: option.c:3147 network.c:813 dhcp.c:814
+#: option.c:3360 network.c:848 dhcp.c:814
 #, c-format
 msgid "failed to read %s: %s"
 msgstr ""
 
-#: option.c:3164
+#: option.c:3377
 #, c-format
 msgid "no search directive found in %s"
 msgstr ""
 
-#: option.c:3185
+#: option.c:3398
 msgid "there must be a default domain when --dhcp-fqdn is set"
 msgstr ""
 
-#: option.c:3189
+#: option.c:3402
 msgid "syntax check OK"
 msgstr ""
 
-#: forward.c:427
+#: forward.c:461
 #, c-format
 msgid "nameserver %s refused to do a recursive query"
 msgstr ""
 
-#: forward.c:455
+#: forward.c:489
 #, c-format
 msgid "possible DNS-rebind attack detected: %s"
 msgstr ""
 
-#: network.c:110
+#: network.c:171
 #, c-format
 msgid "unknown interface %s in bridge-interface"
 msgstr ""
 
-#: network.c:467 dnsmasq.c:188
-#, c-format
-msgid "failed to create listening socket: %s"
-msgstr ""
-
-#: network.c:474
-#, c-format
-msgid "failed to set IPV6 options on listening socket: %s"
-msgstr ""
-
-#: network.c:500
-#, c-format
-msgid "failed to bind listening socket for %s: %s"
-msgstr ""
-
-#: network.c:505
-#, c-format
-msgid "failed to listen on socket: %s"
-msgstr ""
-
-#: network.c:517
+#: network.c:380
 #, c-format
-msgid "failed to create TFTP socket: %s"
+msgid "failed to create listening socket for %s: %s"
 msgstr ""
 
-#: network.c:711
+#: network.c:746
 #, c-format
 msgid "failed to bind server socket for %s: %s"
 msgstr ""
 
-#: network.c:748
+#: network.c:783
 #, c-format
 msgid "ignoring nameserver %s - local interface"
 msgstr ""
 
-#: network.c:759
+#: network.c:794
 #, c-format
 msgid "ignoring nameserver %s - cannot make/bind socket: %s"
 msgstr ""
 
-#: network.c:776
+#: network.c:811
 msgid "unqualified"
 msgstr ""
 
-#: network.c:776
+#: network.c:811
 msgid "names"
 msgstr ""
 
-#: network.c:778
+#: network.c:813
 msgid "default"
 msgstr ""
 
-#: network.c:780
+#: network.c:815
 msgid "domain"
 msgstr ""
 
-#: network.c:783
+#: network.c:818
 #, c-format
 msgid "using local addresses only for %s %s"
 msgstr ""
 
-#: network.c:785
+#: network.c:820
 #, c-format
 msgid "using standard nameservers for %s %s"
 msgstr ""
 
-#: network.c:787
+#: network.c:822
 #, c-format
 msgid "using nameserver %s#%d for %s %s"
 msgstr ""
 
-#: network.c:790
+#: network.c:825
 #, c-format
 msgid "using nameserver %s#%d(via %s)"
 msgstr ""
 
-#: network.c:792
+#: network.c:827
 #, c-format
 msgid "using nameserver %s#%d"
 msgstr ""
@@ -944,181 +923,181 @@ msgstr ""
 msgid "no interface with address %s"
 msgstr ""
 
-#: dnsmasq.c:200 dnsmasq.c:671
+#: dnsmasq.c:199 dnsmasq.c:670
 #, c-format
 msgid "DBus error: %s"
 msgstr ""
 
-#: dnsmasq.c:203
+#: dnsmasq.c:202
 msgid "DBus not available: set HAVE_DBUS in src/config.h"
 msgstr ""
 
-#: dnsmasq.c:229
+#: dnsmasq.c:228
 #, c-format
 msgid "unknown user or group: %s"
 msgstr ""
 
-#: dnsmasq.c:284
+#: dnsmasq.c:283
 #, c-format
 msgid "cannot chdir to filesystem root: %s"
 msgstr ""
 
-#: dnsmasq.c:448
+#: dnsmasq.c:447
 #, c-format
 msgid "started, version %s DNS disabled"
 msgstr ""
 
-#: dnsmasq.c:450
+#: dnsmasq.c:449
 #, c-format
 msgid "started, version %s cachesize %d"
 msgstr ""
 
-#: dnsmasq.c:452
+#: dnsmasq.c:451
 #, c-format
 msgid "started, version %s cache disabled"
 msgstr ""
 
-#: dnsmasq.c:454
+#: dnsmasq.c:453
 #, c-format
 msgid "compile time options: %s"
 msgstr ""
 
-#: dnsmasq.c:460
+#: dnsmasq.c:459
 msgid "DBus support enabled: connected to system bus"
 msgstr ""
 
-#: dnsmasq.c:462
+#: dnsmasq.c:461
 msgid "DBus support enabled: bus connection pending"
 msgstr ""
 
-#: dnsmasq.c:467
+#: dnsmasq.c:466
 #, c-format
 msgid "warning: failed to change owner of %s: %s"
 msgstr ""
 
-#: dnsmasq.c:471
+#: dnsmasq.c:470
 msgid "setting --bind-interfaces option because of OS limitations"
 msgstr ""
 
-#: dnsmasq.c:476
+#: dnsmasq.c:475
 #, c-format
 msgid "warning: interface %s does not currently exist"
 msgstr ""
 
-#: dnsmasq.c:481
+#: dnsmasq.c:480
 msgid "warning: ignoring resolv-file flag because no-resolv is set"
 msgstr ""
 
-#: dnsmasq.c:484
+#: dnsmasq.c:483
 msgid "warning: no upstream servers configured"
 msgstr ""
 
-#: dnsmasq.c:488
+#: dnsmasq.c:487
 #, c-format
 msgid "asynchronous logging enabled, queue limit is %d messages"
 msgstr ""
 
-#: dnsmasq.c:501
+#: dnsmasq.c:500
 #, c-format
 msgid "DHCP, static leases only on %.0s%s, lease time %s"
 msgstr ""
 
-#: dnsmasq.c:503
+#: dnsmasq.c:502
 #, c-format
 msgid "DHCP, proxy on subnet %.0s%s%.0s"
 msgstr ""
 
-#: dnsmasq.c:504
+#: dnsmasq.c:503
 #, c-format
 msgid "DHCP, IP range %s -- %s, lease time %s"
 msgstr ""
 
-#: dnsmasq.c:519
+#: dnsmasq.c:518
 msgid "root is "
 msgstr ""
 
-#: dnsmasq.c:519
+#: dnsmasq.c:518
 msgid "enabled"
 msgstr ""
 
-#: dnsmasq.c:521
+#: dnsmasq.c:520
 msgid "secure mode"
 msgstr ""
 
-#: dnsmasq.c:547
+#: dnsmasq.c:546
 #, c-format
 msgid "restricting maximum simultaneous TFTP transfers to %d"
 msgstr ""
 
-#: dnsmasq.c:673
+#: dnsmasq.c:672
 msgid "connected to system DBus"
 msgstr ""
 
-#: dnsmasq.c:768
+#: dnsmasq.c:767
 #, c-format
 msgid "cannot fork into background: %s"
 msgstr ""
 
-#: dnsmasq.c:771
+#: dnsmasq.c:770
 #, c-format
 msgid "failed to create helper: %s"
 msgstr ""
 
-#: dnsmasq.c:774
+#: dnsmasq.c:773
 #, c-format
 msgid "setting capabilities failed: %s"
 msgstr ""
 
-#: dnsmasq.c:778
+#: dnsmasq.c:777
 #, c-format
 msgid "failed to change user-id to %s: %s"
 msgstr ""
 
-#: dnsmasq.c:783
+#: dnsmasq.c:782
 #, c-format
 msgid "failed to change group-id to %s: %s"
 msgstr ""
 
-#: dnsmasq.c:786
+#: dnsmasq.c:785
 #, c-format
 msgid "failed to open pidfile %s: %s"
 msgstr ""
 
-#: dnsmasq.c:789
+#: dnsmasq.c:788
 #, c-format
 msgid "cannot open %s: %s"
 msgstr ""
 
-#: dnsmasq.c:844
+#: dnsmasq.c:843
 #, c-format
 msgid "child process killed by signal %d"
 msgstr ""
 
-#: dnsmasq.c:848
+#: dnsmasq.c:847
 #, c-format
 msgid "child process exited with status %d"
 msgstr ""
 
-#: dnsmasq.c:852
+#: dnsmasq.c:851
 #, c-format
 msgid "failed to execute %s: %s"
 msgstr ""
 
-#: dnsmasq.c:896
+#: dnsmasq.c:895
 msgid "exiting on receipt of SIGTERM"
 msgstr ""
 
-#: dnsmasq.c:924
+#: dnsmasq.c:923
 #, c-format
 msgid "failed to access %s: %s"
 msgstr ""
 
-#: dnsmasq.c:954
+#: dnsmasq.c:953
 #, c-format
 msgid "reading %s"
 msgstr ""
 
-#: dnsmasq.c:965
+#: dnsmasq.c:964
 #, c-format
 msgid "no servers found in %s, will retry"
 msgstr ""
@@ -1239,19 +1218,19 @@ msgstr ""
 msgid "disabled"
 msgstr ""
 
-#: rfc2131.c:466 rfc2131.c:969 rfc2131.c:1335
+#: rfc2131.c:466 rfc2131.c:978 rfc2131.c:1350
 msgid "ignored"
 msgstr ""
 
-#: rfc2131.c:481 rfc2131.c:1183
+#: rfc2131.c:481 rfc2131.c:1197
 msgid "address in use"
 msgstr ""
 
-#: rfc2131.c:495 rfc2131.c:1023
+#: rfc2131.c:495 rfc2131.c:1032
 msgid "no address available"
 msgstr ""
 
-#: rfc2131.c:502 rfc2131.c:1146
+#: rfc2131.c:502 rfc2131.c:1160
 msgid "wrong network"
 msgstr ""
 
@@ -1259,7 +1238,7 @@ msgstr ""
 msgid "no address configured"
 msgstr ""
 
-#: rfc2131.c:522 rfc2131.c:1196
+#: rfc2131.c:522 rfc2131.c:1210
 msgid "no leases left"
 msgstr ""
 
@@ -1282,118 +1261,118 @@ msgstr ""
 msgid "PXE BIS not supported"
 msgstr ""
 
-#: rfc2131.c:939
+#: rfc2131.c:948
 #, c-format
 msgid "disabling DHCP static address %s for %s"
 msgstr ""
 
-#: rfc2131.c:960
+#: rfc2131.c:969
 msgid "unknown lease"
 msgstr ""
 
-#: rfc2131.c:992
+#: rfc2131.c:1001
 #, c-format
 msgid "not using configured address %s because it is leased to %s"
 msgstr ""
 
-#: rfc2131.c:1002
+#: rfc2131.c:1011
 #, c-format
 msgid "not using configured address %s because it is in use by the server or relay"
 msgstr ""
 
-#: rfc2131.c:1005
+#: rfc2131.c:1014
 #, c-format
 msgid "not using configured address %s because it was previously declined"
 msgstr ""
 
-#: rfc2131.c:1021 rfc2131.c:1189
+#: rfc2131.c:1030 rfc2131.c:1203
 msgid "no unique-id"
 msgstr ""
 
-#: rfc2131.c:1090
+#: rfc2131.c:1099
 msgid "wrong server-ID"
 msgstr ""
 
-#: rfc2131.c:1108
+#: rfc2131.c:1117
 msgid "wrong address"
 msgstr ""
 
-#: rfc2131.c:1121
+#: rfc2131.c:1135
 msgid "lease not found"
 msgstr ""
 
-#: rfc2131.c:1154
+#: rfc2131.c:1168
 msgid "address not available"
 msgstr ""
 
-#: rfc2131.c:1165
+#: rfc2131.c:1179
 msgid "static lease available"
 msgstr ""
 
-#: rfc2131.c:1169
+#: rfc2131.c:1183
 msgid "address reserved"
 msgstr ""
 
-#: rfc2131.c:1177
+#: rfc2131.c:1191
 #, c-format
 msgid "abandoning lease to %s of %s"
 msgstr ""
 
-#: rfc2131.c:1757
+#: rfc2131.c:1772
 #, c-format
 msgid "%u tags: %s"
 msgstr ""
 
-#: rfc2131.c:1770
+#: rfc2131.c:1785
 #, c-format
 msgid "%u bootfile name: %s"
 msgstr ""
 
-#: rfc2131.c:1779
+#: rfc2131.c:1794
 #, c-format
 msgid "%u server name: %s"
 msgstr ""
 
-#: rfc2131.c:1793
+#: rfc2131.c:1808
 #, c-format
 msgid "%u next server: %s"
 msgstr ""
 
-#: rfc2131.c:1796
+#: rfc2131.c:1811
 #, c-format
 msgid "%u broadcast response"
 msgstr ""
 
-#: rfc2131.c:1859
+#: rfc2131.c:1874
 #, c-format
 msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
 msgstr ""
 
-#: rfc2131.c:2105
+#: rfc2131.c:2120
 msgid "PXE menu too large"
 msgstr ""
 
-#: rfc2131.c:2218
+#: rfc2131.c:2233
 #, c-format
 msgid "Ignoring domain %s for DHCP host name %s"
 msgstr ""
 
-#: rfc2131.c:2236
+#: rfc2131.c:2251
 #, c-format
 msgid "%u requested options: %s"
 msgstr ""
 
-#: rfc2131.c:2503
+#: rfc2131.c:2518
 #, c-format
 msgid "cannot send RFC3925 option: too many options for enterprise number %d"
 msgstr ""
 
-#: netlink.c:66
+#: netlink.c:70
 #, c-format
 msgid "cannot create netlink socket: %s"
 msgstr ""
 
-#: netlink.c:265
+#: netlink.c:288
 #, c-format
 msgid "netlink returns error: %s"
 msgstr ""
@@ -1410,45 +1389,45 @@ msgstr ""
 msgid "could not register a DBus message handler"
 msgstr ""
 
-#: bpf.c:150
+#: bpf.c:217
 #, c-format
 msgid "cannot create DHCP BPF socket: %s"
 msgstr ""
 
-#: bpf.c:178
+#: bpf.c:245
 #, c-format
 msgid "DHCP request for unsupported hardware type (%d) received on %s"
 msgstr ""
 
-#: tftp.c:233
+#: tftp.c:281
 msgid "unable to get free port for TFTP"
 msgstr ""
 
-#: tftp.c:248
+#: tftp.c:296
 #, c-format
 msgid "unsupported request from %s"
 msgstr ""
 
-#: tftp.c:336
-#, c-format
-msgid "sent %s to %s"
-msgstr ""
-
-#: tftp.c:359
+#: tftp.c:406
 #, c-format
 msgid "file %s not found"
 msgstr ""
 
-#: tftp.c:470
+#: tftp.c:522
 #, c-format
 msgid "error %d %s received from %s"
 msgstr ""
 
-#: tftp.c:501
+#: tftp.c:554
 #, c-format
 msgid "failed sending %s to %s"
 msgstr ""
 
+#: tftp.c:568
+#, c-format
+msgid "sent %s to %s"
+msgstr ""
+
 #: log.c:173
 #, c-format
 msgid "overflow: %d log entries lost"
@@ -1459,6 +1438,6 @@ msgstr ""
 msgid "log failed: %s"
 msgstr ""
 
-#: log.c:431
+#: log.c:436
 msgid "FAILED to start up"
 msgstr ""
index 04ceabc2998c2f32b95ac5409a5accd4ba6b1cd5..0b31cd3dd2760b4b3d5c335817cfa9e17f6b6958 100644 (file)
--- a/po/no.po
+++ b/po/no.po
@@ -17,61 +17,56 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: cache.c:764
+#: cache.c:761
 #, fuzzy, c-format
 msgid "failed to load names from %s: %s"
 msgstr "feilet Ã¥ laste navn fra %s: %s"
 
-#: cache.c:798 dhcp.c:865
+#: cache.c:795 dhcp.c:865
 #, c-format
 msgid "bad address at %s line %d"
 msgstr "dÃ¥rlig adresse ved %s linje %d"
 
-#: cache.c:856 dhcp.c:881
+#: cache.c:853 dhcp.c:881
 #, c-format
 msgid "bad name at %s line %d"
 msgstr "dÃ¥rlig navn ved %s linje %d"
 
-#: cache.c:863 dhcp.c:956
+#: cache.c:860 dhcp.c:956
 #, c-format
 msgid "read %s - %d addresses"
 msgstr "les %s - %d adresser"
 
-#: cache.c:902
+#: cache.c:899
 msgid "cleared cache"
 msgstr "mellomlager tømt"
 
-#: cache.c:933 option.c:1112
-#, fuzzy, c-format
-msgid "cannot access directory %s: %s"
-msgstr "kan ikke lese %s: %s"
-
-#: cache.c:1053
+#: cache.c:960
 #, c-format
 msgid "%s is a CNAME, not giving it to the DHCP lease of %s"
 msgstr ""
 
-#: cache.c:1059
+#: cache.c:966
 #, 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:1132
+#: cache.c:1039
 #, c-format
 msgid "time %lu"
 msgstr ""
 
-#: cache.c:1133
+#: cache.c:1040
 #, 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:1135
+#: cache.c:1042
 #, c-format
 msgid "queries forwarded %u, queries answered locally %u"
 msgstr ""
 
-#: cache.c:1158
+#: cache.c:1068
 #, c-format
 msgid "server %s#%d: queries sent %u, retried or failed %u"
 msgstr ""
@@ -86,7 +81,7 @@ msgstr "feilet 
 msgid "failed to allocate memory"
 msgstr "feilet Ã¥ laste %d bytes"
 
-#: util.c:229 option.c:567
+#: util.c:229 option.c:573
 msgid "could not get memory"
 msgstr "kunne ikke fÃ¥ minne"
 
@@ -105,455 +100,464 @@ msgstr "feilet 
 msgid "infinite"
 msgstr "uendelig"
 
-#: option.c:240
+#: option.c:244
 msgid "Specify local address(es) to listen on."
 msgstr "Spesifiser lokal(e) adresse(r) Ã¥ lytte pÃ¥."
 
-#: option.c:241
+#: option.c:245
 msgid "Return ipaddr for all hosts in specified domains."
 msgstr "Returner ipaddr for alle verter i det spesifiserte domenet."
 
-#: option.c:242
+#: option.c:246
 msgid "Fake reverse lookups for RFC1918 private address ranges."
 msgstr "Forfalsk revers oppslag for RFC1918 private adresse omrÃ¥der."
 
-#: option.c:243
+#: option.c:247
 msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
 msgstr "Behandle ipaddr som NXDOMAIN (omgÃ¥r Verisign wildcard)."
 
-#: option.c:244
+#: option.c:248
 #, 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:245
+#: option.c:249
 #, c-format
 msgid "Specify configuration file (defaults to %s)."
 msgstr "Spesifiser konfigurasjonsfil (standard er %s)."
 
-#: option.c:246
+#: option.c:250
 msgid "Do NOT fork into the background: run in debug mode."
 msgstr "IKKE legg (fork) som bakgrunnsprosess: kjør i debug modus."
 
-#: option.c:247
+#: option.c:251
 msgid "Do NOT forward queries with no domain part."
 msgstr "IKKE videresend oppslag som mangler domene del."
 
-#: option.c:248
+#: option.c:252
 msgid "Return self-pointing MX records for local hosts."
 msgstr "Returner selv-pekende MX post for lokale verter."
 
-#: option.c:249
+#: option.c:253
 msgid "Expand simple names in /etc/hosts with domain-suffix."
 msgstr "Utvid enkle navn i /etc/hosts med domene-suffiks."
 
-#: option.c:250
+#: option.c:254
 msgid "Don't forward spurious DNS requests from Windows hosts."
 msgstr "Ikke videresend falske/uekte DNS forespørsler fra Windows verter."
 
-#: option.c:251
+#: option.c:255
 msgid "Enable DHCP in the range given with lease duration."
 msgstr "Aktiver DHCP i det gitte omrÃ¥det med leie varighet"
 
-#: option.c:252
+#: option.c:256
 #, c-format
 msgid "Change to this group after startup (defaults to %s)."
 msgstr "Skift til denne gruppen etter oppstart (standard er %s)."
 
-#: option.c:253
+#: option.c:257
 msgid "Set address or hostname for a specified machine."
 msgstr "Sett adresse eller vertsnavn for en spesifikk maskin."
 
-#: option.c:254
+#: option.c:258
 #, fuzzy
 msgid "Read DHCP host specs from file."
 msgstr "dÃ¥rlig MX navn"
 
-#: option.c:255
+#: option.c:259
 msgid "Read DHCP option specs from file."
 msgstr ""
 
-#: option.c:256
+#: option.c:260
 msgid "Evaluate conditional tag expression."
 msgstr ""
 
-#: option.c:257
+#: option.c:261
 #, c-format
 msgid "Do NOT load %s file."
 msgstr "IKKE last %s filen."
 
-#: option.c:258
+#: option.c:262
 #, 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:259
+#: option.c:263
 msgid "Specify interface(s) to listen on."
 msgstr "Spesifiser nettverkskort det skal lyttes pÃ¥."
 
-#: option.c:260
+#: option.c:264
 msgid "Specify interface(s) NOT to listen on."
 msgstr "Spesifiser nettverkskort det IKKE skal lyttes pÃ¥."
 
-#: option.c:261
+#: option.c:265
 #, fuzzy
 msgid "Map DHCP user class to tag."
 msgstr "Map DHCP bruker klasse til opsjon sett."
 
-#: option.c:262
+#: option.c:266
 msgid "Map RFC3046 circuit-id to tag."
 msgstr ""
 
-#: option.c:263
+#: option.c:267
 msgid "Map RFC3046 remote-id to tag."
 msgstr ""
 
-#: option.c:264
+#: option.c:268
 msgid "Map RFC3993 subscriber-id to tag."
 msgstr ""
 
-#: option.c:265
+#: option.c:269
 #, fuzzy
 msgid "Don't do DHCP for hosts with tag set."
 msgstr "Ikke utfør DHCP for klienter i opsjon sett."
 
-#: option.c:266
+#: option.c:270
 #, fuzzy
 msgid "Force broadcast replies for hosts with tag set."
 msgstr "Ikke utfør DHCP for klienter i opsjon sett."
 
-#: option.c:267
+#: option.c:271
 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:268
+#: option.c:272
 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:269
+#: option.c:273
 #, c-format
 msgid "Specify where to store DHCP leases (defaults to %s)."
 msgstr "Spesifiser hvor DHCP leiene skal lagres (standard er %s)."
 
-#: option.c:270
+#: option.c:274
 msgid "Return MX records for local hosts."
 msgstr "Returner MX records for lokale verter."
 
-#: option.c:271
+#: option.c:275
 msgid "Specify an MX record."
 msgstr "Spesifiser en MX post."
 
-#: option.c:272
+#: option.c:276
 msgid "Specify BOOTP options to DHCP server."
 msgstr "Spesifiser BOOTP opsjoner til DHCP tjener."
 
-#: option.c:273
+#: option.c:277
 #, 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:274
+#: option.c:278
 msgid "Do NOT cache failed search results."
 msgstr "IKKE mellomlagre søkeresultater som feiler."
 
-#: option.c:275
+#: option.c:279
 #, 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:276
+#: option.c:280
 #, fuzzy
 msgid "Specify options to be sent to DHCP clients."
 msgstr "Sett ekstra opsjoner som skal fordeles til DHCP klientene."
 
-#: option.c:277
+#: option.c:281
 msgid "DHCP option sent even if the client does not request it."
 msgstr ""
 
-#: option.c:278
+#: option.c:282
 msgid "Specify port to listen for DNS requests on (defaults to 53)."
 msgstr "Spesifiser lytteport for DNS oppslag (standard er 53)."
 
-#: option.c:279
+#: option.c:283
 #, 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:280
+#: option.c:284
 #, fuzzy
 msgid "Log DNS queries."
 msgstr "Logg oppslag."
 
-#: option.c:281
+#: option.c:285
 #, fuzzy
 msgid "Force the originating port for upstream DNS queries."
 msgstr "Tving bruk av opprinnelig port for oppstrøms oppslag."
 
-#: option.c:282
+#: option.c:286
 msgid "Do NOT read resolv.conf."
 msgstr "IKKE les resolv.conf."
 
-#: option.c:283
+#: option.c:287
 #, c-format
 msgid "Specify path to resolv.conf (defaults to %s)."
 msgstr "Spesifiser stien til resolv.conf (standard er %s)."
 
-#: option.c:284
+#: option.c:288
 msgid "Specify address(es) of upstream servers with optional domains."
 msgstr "Spesifiser adressen(e) til oppstrøms tjenere med valgfrie domener."
 
-#: option.c:285
+#: option.c:289
 msgid "Never forward queries to specified domains."
 msgstr "Aldri videresend oppslag til spesifiserte domener."
 
-#: option.c:286
+#: option.c:290
 msgid "Specify the domain to be assigned in DHCP leases."
 msgstr "Spesifiser domenet som skal tildeles i DHCP leien."
 
-#: option.c:287
+#: option.c:291
 msgid "Specify default target in an MX record."
 msgstr "Spesifiser default mÃ¥l i en MX post."
 
-#: option.c:288
+#: option.c:292
 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:289
+#: option.c:293
 #, 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:290
+#: option.c:294
 #, 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:291
+#: option.c:295
 #, c-format
 msgid "Change to this user after startup. (defaults to %s)."
 msgstr "Skift til denne bruker etter oppstart (standard er %s)."
 
-#: option.c:292
+#: option.c:296
 #, fuzzy
 msgid "Map DHCP vendor class to tag."
 msgstr "Map DHCP produsent klasse til opsjon sett."
 
-#: option.c:293
+#: option.c:297
 msgid "Display dnsmasq version and copyright information."
 msgstr "Vis dnsmasq versjon og copyright informasjon."
 
-#: option.c:294
+#: option.c:298
 msgid "Translate IPv4 addresses from upstream servers."
 msgstr "Oversett IPv4 adresser fra oppstrøms tjenere."
 
-#: option.c:295
+#: option.c:299
 msgid "Specify a SRV record."
 msgstr "Spesifiser en SRV post."
 
-#: option.c:296
+#: option.c:300
 msgid "Display this message. Use --help dhcp for known DHCP options."
 msgstr ""
 
-#: option.c:297
+#: option.c:301
 #, fuzzy, c-format
 msgid "Specify path of PID file (defaults to %s)."
 msgstr "Spesifiser stien til PID fil. (standard er %s)."
 
-#: option.c:298
+#: option.c:302
 #, c-format
 msgid "Specify maximum number of DHCP leases (defaults to %s)."
 msgstr "Spesifiser maksimum antall DHCP leier (standard er %s)"
 
-#: option.c:299
+#: option.c:303
 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:300
+#: option.c:304
 msgid "Specify TXT DNS record."
 msgstr "Spesifiser TXT DNS post."
 
-#: option.c:301
+#: option.c:305
 #, fuzzy
 msgid "Specify PTR DNS record."
 msgstr "Spesifiser TXT DNS post."
 
-#: option.c:302
+#: option.c:306
 msgid "Give DNS name to IPv4 address of interface."
 msgstr ""
 
-#: option.c:303
+#: option.c:307
 msgid "Bind only to interfaces in use."
 msgstr "Bind kun til nettverkskort som er i bruk."
 
-#: option.c:304
+#: option.c:308
 #, c-format
 msgid "Read DHCP static host information from %s."
 msgstr "Les DHCP statisk vert informasjon fra %s."
 
-#: option.c:305
+#: option.c:309
 msgid "Enable the DBus interface for setting upstream servers, etc."
 msgstr "Aktiver DBus interface for Ã¥ sette oppstrøms tjenere, osv."
 
-#: option.c:306
+#: option.c:310
 msgid "Do not provide DHCP on this interface, only provide DNS."
 msgstr "Ikke lever DHCP pÃ¥ dette nettverkskortet, kun lever DNS."
 
-#: option.c:307
+#: option.c:311
 msgid "Enable dynamic address allocation for bootp."
 msgstr "Aktiver dynamisk adresse allokering for bootp."
 
-#: option.c:308
+#: option.c:312
 #, fuzzy
 msgid "Map MAC address (with wildcards) to option set."
 msgstr "Map DHCP produsent klasse til opsjon sett."
 
-#: option.c:309
+#: option.c:313
 msgid "Treat DHCP requests on aliases as arriving from interface."
 msgstr ""
 
-#: option.c:310
+#: option.c:314
 msgid "Disable ICMP echo address checking in the DHCP server."
 msgstr ""
 
-#: option.c:311
+#: option.c:315
 msgid "Script to run on DHCP lease creation and destruction."
 msgstr ""
 
-#: option.c:312
+#: option.c:316
 msgid "Read configuration from all the files in this directory."
 msgstr ""
 
-#: option.c:313
+#: option.c:317
 #, fuzzy
 msgid "Log to this syslog facility or file. (defaults to DAEMON)"
 msgstr "Skift til denne bruker etter oppstart (standard er %s)."
 
-#: option.c:314
+#: option.c:318
 msgid "Do not use leasefile."
 msgstr ""
 
-#: option.c:315
+#: option.c:319
 #, fuzzy, c-format
 msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
 msgstr "Spesifiser maksimum antall DHCP leier (standard er %s)"
 
-#: option.c:316
+#: option.c:320
 #, c-format
 msgid "Clear DNS cache when reloading %s."
 msgstr ""
 
-#: option.c:317
+#: option.c:321
 msgid "Ignore hostnames provided by DHCP clients."
 msgstr ""
 
-#: option.c:318
+#: option.c:322
 msgid "Do NOT reuse filename and server fields for extra DHCP options."
 msgstr ""
 
-#: option.c:319
+#: option.c:323
 msgid "Enable integrated read-only TFTP server."
 msgstr ""
 
-#: option.c:320
+#: option.c:324
 msgid "Export files by TFTP only from the specified subtree."
 msgstr ""
 
-#: option.c:321
+#: option.c:325
 msgid "Add client IP address to tftp-root."
 msgstr ""
 
-#: option.c:322
+#: option.c:326
 msgid "Allow access only to files owned by the user running dnsmasq."
 msgstr ""
 
-#: option.c:323
+#: option.c:327
 #, fuzzy, c-format
 msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
 msgstr "Spesifiser maksimum antall DHCP leier (standard er %s)"
 
-#: option.c:324
+#: option.c:328
 msgid "Disable the TFTP blocksize extension."
 msgstr ""
 
-#: option.c:325
+#: option.c:329
 msgid "Ephemeral port range for use by TFTP transfers."
 msgstr ""
 
-#: option.c:326
+#: option.c:330
 msgid "Extra logging for DHCP."
 msgstr ""
 
-#: option.c:327
+#: option.c:331
 msgid "Enable async. logging; optionally set queue length."
 msgstr ""
 
-#: option.c:328
+#: option.c:332
 msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
 msgstr ""
 
-#: option.c:329
+#: option.c:333
 msgid "Allow rebinding of 127.0.0.0/8, for RBL servers."
 msgstr ""
 
-#: option.c:330
+#: option.c:334
 msgid "Inhibit DNS-rebind protection on this domain."
 msgstr ""
 
-#: option.c:331
+#: option.c:335
 msgid "Always perform DNS queries to all servers."
 msgstr ""
 
-#: option.c:332
+#: option.c:336
 msgid "Set tag if client includes matching option in request."
 msgstr ""
 
-#: option.c:333
+#: option.c:337
 msgid "Use alternative ports for DHCP."
 msgstr ""
 
-#: option.c:334
+#: option.c:338
 msgid "Run lease-change script as this user."
 msgstr ""
 
-#: option.c:335
+#: option.c:339
 #, fuzzy
 msgid "Specify NAPTR DNS record."
 msgstr "Spesifiser TXT DNS post."
 
-#: option.c:336
+#: option.c:340
 msgid "Specify lowest port available for DNS query transmission."
 msgstr ""
 
-#: option.c:337
+#: option.c:341
 msgid "Use only fully qualified domain names for DHCP clients."
 msgstr ""
 
-#: option.c:338
+#: option.c:342
 msgid "Generate hostnames based on MAC address for nameless clients."
 msgstr ""
 
-#: option.c:339
+#: option.c:343
 msgid "Use these DHCP relays as full proxies."
 msgstr ""
 
-#: option.c:340
+#: option.c:344
 msgid "Specify alias name for LOCAL DNS name."
 msgstr ""
 
-#: option.c:341
+#: option.c:345
 #, fuzzy
 msgid "Prompt to send to PXE clients."
 msgstr "Sett ekstra opsjoner som skal fordeles til DHCP klientene."
 
-#: option.c:342
+#: option.c:346
 msgid "Boot service for PXE menu."
 msgstr ""
 
-#: option.c:343
+#: option.c:347
 msgid "Check configuration syntax."
 msgstr ""
 
-#: option.c:632
+#: option.c:348
+msgid "Add requestor's MAC address to forwarded DNS queries"
+msgstr ""
+
+#: option.c:349
+#, fuzzy
+msgid "Proxy DNSSEC validation results from upstream nameservers"
+msgstr "Oversett IPv4 adresser fra oppstrøms tjenere."
+
+#: option.c:638
 #, c-format
 msgid ""
 "Usage: dnsmasq [options]\n"
@@ -562,233 +566,230 @@ msgstr ""
 "Bruk: dnsmasq [opsjoner]\n"
 "\n"
 
-#: option.c:634
+#: option.c:640
 #, c-format
 msgid "Use short options only on the command line.\n"
 msgstr "Bruk korte opsjoner kun pÃ¥ kommandolinjen.\n"
 
-#: option.c:636
+#: option.c:642
 #, fuzzy, c-format
 msgid "Valid options are:\n"
 msgstr "Gyldige opsjoner er :\n"
 
-#: option.c:677
+#: option.c:683
 #, c-format
 msgid "Known DHCP options:\n"
 msgstr ""
 
-#: option.c:781
+#: option.c:798
 msgid "bad dhcp-option"
 msgstr "dÃ¥rlig dhcp-opsjon"
 
-#: option.c:838
+#: option.c:860
 #, fuzzy
 msgid "bad IP address"
 msgstr "les %s - %d adresser"
 
-#: option.c:941
+#: option.c:966
 msgid "bad domain in dhcp-option"
 msgstr "dÃ¥rlig domene i dhcp-opsjon"
 
-#: option.c:1007
+#: option.c:1032
 msgid "dhcp-option too long"
 msgstr "dhcp-opsjon for lang"
 
-#: option.c:1016
+#: option.c:1041
 msgid "illegal dhcp-match"
 msgstr ""
 
-#: option.c:1052
+#: option.c:1085
 msgid "illegal repeated flag"
 msgstr ""
 
-#: option.c:1060
+#: option.c:1093
 msgid "illegal repeated keyword"
 msgstr ""
 
-#: option.c:1143 tftp.c:413
+#: option.c:1145 option.c:3024
 #, fuzzy, c-format
-msgid "cannot access %s: %s"
+msgid "cannot access directory %s: %s"
 msgstr "kan ikke lese %s: %s"
 
-#: option.c:1188
-msgid "only one dhcp-hostsfile allowed"
-msgstr ""
-
-#: option.c:1195
-msgid "only one dhcp-optsfile allowed"
-msgstr ""
+#: option.c:1176 tftp.c:460
+#, fuzzy, c-format
+msgid "cannot access %s: %s"
+msgstr "kan ikke lese %s: %s"
 
-#: option.c:1240
+#: option.c:1259
 msgid "bad MX preference"
 msgstr "dÃ¥rlig MX preferanse"
 
-#: option.c:1245
+#: option.c:1264
 msgid "bad MX name"
 msgstr "dÃ¥rlig MX navn"
 
-#: option.c:1259
+#: option.c:1278
 msgid "bad MX target"
 msgstr "dÃ¥rlig MX mÃ¥l"
 
-#: option.c:1269
+#: option.c:1288
 msgid "cannot run scripts under uClinux"
 msgstr ""
 
-#: option.c:1271
+#: option.c:1290
 msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts"
 msgstr ""
 
-#: option.c:1516 option.c:1520
+#: option.c:1591 option.c:1595
 msgid "bad port"
 msgstr "dÃ¥rlig port"
 
-#: option.c:1539 option.c:1564
+#: option.c:1614 option.c:1639
 msgid "interface binding not supported"
 msgstr ""
 
-#: option.c:1710
+#: option.c:1785
 #, fuzzy
 msgid "bad port range"
 msgstr "dÃ¥rlig port"
 
-#: option.c:1727
+#: option.c:1802
 msgid "bad bridge-interface"
 msgstr ""
 
-#: option.c:1769
+#: option.c:1844
 msgid "bad dhcp-range"
 msgstr "dÃ¥rlig dhcp-omrÃ¥de"
 
-#: option.c:1797
+#: option.c:1872
 msgid "only one tag allowed"
 msgstr ""
 
-#: option.c:1844
+#: option.c:1919
 msgid "inconsistent DHCP range"
 msgstr "ikke konsistent DHCP omrÃ¥de"
 
-#: option.c:2019
+#: option.c:2013 option.c:2039
+#, fuzzy
+msgid "bad hex constant"
+msgstr "dÃ¥rlig dhcp-vert"
+
+#: option.c:2101
 #, fuzzy
 msgid "bad DHCP host name"
 msgstr "dÃ¥rlig MX navn"
 
-#: option.c:2100
+#: option.c:2182
 #, fuzzy
 msgid "bad tag-if"
 msgstr "dÃ¥rlig MX mÃ¥l"
 
-#: option.c:2374 option.c:2673
+#: option.c:2461 option.c:2746
 msgid "invalid port number"
 msgstr "ugyldig portnummer"
 
-#: option.c:2436
+#: option.c:2523
 #, fuzzy
 msgid "bad dhcp-proxy address"
 msgstr "les %s - %d adresser"
 
-#: option.c:2476
+#: option.c:2563
 #, fuzzy
 msgid "invalid alias range"
 msgstr "ugyldig vekt"
 
-#: option.c:2489
+#: option.c:2576
 #, fuzzy
 msgid "bad interface name"
 msgstr "dÃ¥rlig MX navn"
 
-#: option.c:2514
+#: option.c:2601
 msgid "bad CNAME"
 msgstr ""
 
-#: option.c:2519
+#: option.c:2606
 msgid "duplicate CNAME"
 msgstr ""
 
-#: option.c:2539
+#: option.c:2626
 #, fuzzy
 msgid "bad PTR record"
 msgstr "dÃ¥rlig SRV post"
 
-#: option.c:2570
+#: option.c:2657
 #, fuzzy
 msgid "bad NAPTR record"
 msgstr "dÃ¥rlig SRV post"
 
-#: option.c:2595
-msgid "TXT record string too long"
-msgstr "TXT post streng for lang"
-
-#: option.c:2643
+#: option.c:2689
 msgid "bad TXT record"
 msgstr "dÃ¥rlig TXT post"
 
-#: option.c:2659
+#: option.c:2732
 msgid "bad SRV record"
 msgstr "dÃ¥rlig SRV post"
 
-#: option.c:2666
+#: option.c:2739
 msgid "bad SRV target"
 msgstr "dÃ¥rlig SRV mÃ¥l"
 
-#: option.c:2680
+#: option.c:2753
 msgid "invalid priority"
 msgstr "ugyldig prioritet"
 
-#: option.c:2687
+#: option.c:2760
 msgid "invalid weight"
 msgstr "ugyldig vekt"
 
-#: option.c:2706
+#: option.c:2779
 msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DBus support)"
 msgstr ""
 
-#: option.c:2748
-#, c-format
-msgid "files nested too deep in %s"
-msgstr ""
-
-#: option.c:2756 tftp.c:567
-#, c-format
-msgid "cannot read %s: %s"
-msgstr "kan ikke lese %s: %s"
-
-#: option.c:2813
+#: option.c:2843
 msgid "missing \""
 msgstr "mangler \""
 
-#: option.c:2872
+#: option.c:2902
 msgid "bad option"
 msgstr "dÃ¥rlig opsjon"
 
-#: option.c:2874
+#: option.c:2904
 msgid "extraneous parameter"
 msgstr "overflødig parameter"
 
-#: option.c:2876
+#: option.c:2906
 msgid "missing parameter"
 msgstr "mangler parameter"
 
-#: option.c:2880
+#: option.c:2910
 msgid "error"
 msgstr "feil"
 
-#: option.c:2885
+#: option.c:2915
 #, c-format
 msgid "%s at line %d of %%s"
 msgstr "%s pÃ¥ linje %d av %%s"
 
-#: option.c:2942 option.c:2973
+#: option.c:2979 tftp.c:624
+#, c-format
+msgid "cannot read %s: %s"
+msgstr "kan ikke lese %s: %s"
+
+#: option.c:3145 option.c:3181
 #, fuzzy, c-format
 msgid "read %s"
 msgstr "leser %s"
 
-#: option.c:3045
+#: option.c:3229
+msgid "junk found in command line"
+msgstr ""
+
+#: option.c:3258
 #, c-format
 msgid "Dnsmasq version %s  %s\n"
 msgstr "Dnsmasq versjon %s %s\n"
 
-#: option.c:3046
+#: option.c:3259
 #, c-format
 msgid ""
 "Compile time options %s\n"
@@ -797,157 +798,137 @@ msgstr ""
 "Kompileringsopsjoner %s\n"
 "\n"
 
-#: option.c:3047
+#: option.c:3260
 #, c-format
 msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
 msgstr "Denne programvaren kommer med ABSOLUTT INGEN GARANTI.\n"
 
-#: option.c:3048
+#: option.c:3261
 #, 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:3049
+#: option.c:3262
 #, 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:3060
+#: option.c:3273
 msgid "try --help"
 msgstr ""
 
-#: option.c:3062
+#: option.c:3275
 msgid "try -w"
 msgstr ""
 
-#: option.c:3065
+#: option.c:3278
 #, fuzzy, c-format
 msgid "bad command line options: %s"
 msgstr "dÃ¥rlige kommandlinje opsjoner: %s."
 
-#: option.c:3106
+#: option.c:3319
 #, c-format
 msgid "cannot get host-name: %s"
 msgstr "klarer ikke Ã¥ fÃ¥ vertsnavn: %s"
 
-#: option.c:3134
+#: option.c:3347
 msgid "only one resolv.conf file allowed in no-poll mode."
 msgstr "kun en resolv.conf fil tillat i no-poll modus."
 
-#: option.c:3144
+#: option.c:3357
 msgid "must have exactly one resolv.conf to read domain from."
 msgstr "mÃ¥ ha nøyaktig en resolv.conf Ã¥ lese domene fra."
 
-#: option.c:3147 network.c:813 dhcp.c:814
+#: option.c:3360 network.c:848 dhcp.c:814
 #, fuzzy, c-format
 msgid "failed to read %s: %s"
 msgstr "feilet Ã¥ lese %s: %s"
 
-#: option.c:3164
+#: option.c:3377
 #, c-format
 msgid "no search directive found in %s"
 msgstr "intet søke direktiv funnet i %s"
 
-#: option.c:3185
+#: option.c:3398
 msgid "there must be a default domain when --dhcp-fqdn is set"
 msgstr ""
 
-#: option.c:3189
+#: option.c:3402
 msgid "syntax check OK"
 msgstr ""
 
-#: forward.c:427
+#: forward.c:461
 #, c-format
 msgid "nameserver %s refused to do a recursive query"
 msgstr "navnetjener %s nektet Ã¥ gjøre et rekursivt oppslag"
 
-#: forward.c:455
+#: forward.c:489
 #, c-format
 msgid "possible DNS-rebind attack detected: %s"
 msgstr ""
 
-#: network.c:110
+#: network.c:171
 #, fuzzy, c-format
 msgid "unknown interface %s in bridge-interface"
 msgstr "ukjent tilknytning (interface) %s"
 
-#: network.c:467 dnsmasq.c:188
-#, c-format
-msgid "failed to create listening socket: %s"
-msgstr "feilet Ã¥ lage lytte socket: %s"
-
-#: network.c:474
-#, c-format
-msgid "failed to set IPV6 options on listening socket: %s"
-msgstr "feilet Ã¥ sette IPv6 opsjoner pÃ¥ lytte socket: %s"
-
-#: network.c:500
-#, c-format
-msgid "failed to bind listening socket for %s: %s"
-msgstr "feilet Ã¥ binde lytte socket for %s: %s"
-
-#: network.c:505
-#, c-format
-msgid "failed to listen on socket: %s"
-msgstr "feilet Ã¥ lytte pÃ¥ socket: %s"
-
-#: network.c:517
+#: network.c:380
 #, fuzzy, c-format
-msgid "failed to create TFTP socket: %s"
+msgid "failed to create listening socket for %s: %s"
 msgstr "feilet Ã¥ lage lytte socket: %s"
 
-#: network.c:711
+#: network.c:746
 #, fuzzy, c-format
 msgid "failed to bind server socket for %s: %s"
 msgstr "feilet Ã¥ binde lytte socket for %s: %s"
 
-#: network.c:748
+#: network.c:783
 #, c-format
 msgid "ignoring nameserver %s - local interface"
 msgstr "ignorerer navnetjener %s - lokal tilknytning"
 
-#: network.c:759
+#: network.c:794
 #, fuzzy, c-format
 msgid "ignoring nameserver %s - cannot make/bind socket: %s"
 msgstr "ignorerer navnetjener %s - kan ikke lage/dinde socket: %s"
 
-#: network.c:776
+#: network.c:811
 msgid "unqualified"
 msgstr "ikke kvalifisert"
 
-#: network.c:776
+#: network.c:811
 msgid "names"
 msgstr ""
 
-#: network.c:778
+#: network.c:813
 msgid "default"
 msgstr ""
 
-#: network.c:780
+#: network.c:815
 msgid "domain"
 msgstr "domene"
 
-#: network.c:783
+#: network.c:818
 #, c-format
 msgid "using local addresses only for %s %s"
 msgstr "benytter lokale adresser kun for %s %s"
 
-#: network.c:785
+#: network.c:820
 #, fuzzy, c-format
 msgid "using standard nameservers for %s %s"
 msgstr "benytter navnetjener %s#%d for %s %s"
 
-#: network.c:787
+#: network.c:822
 #, c-format
 msgid "using nameserver %s#%d for %s %s"
 msgstr "benytter navnetjener %s#%d for %s %s"
 
-#: network.c:790
+#: network.c:825
 #, fuzzy, c-format
 msgid "using nameserver %s#%d(via %s)"
 msgstr "benytter navnetjener %s#%d"
 
-#: network.c:792
+#: network.c:827
 #, c-format
 msgid "using nameserver %s#%d"
 msgstr "benytter navnetjener %s#%d"
@@ -976,183 +957,183 @@ msgstr "ukjent tilknytning (interface) %s"
 msgid "no interface with address %s"
 msgstr "ingen tilknytning (interface) med adresse %s"
 
-#: dnsmasq.c:200 dnsmasq.c:671
+#: dnsmasq.c:199 dnsmasq.c:670
 #, c-format
 msgid "DBus error: %s"
 msgstr "DBus feil: %s"
 
-#: dnsmasq.c:203
+#: dnsmasq.c:202
 msgid "DBus not available: set HAVE_DBUS in src/config.h"
 msgstr "DBus ikke tilgjengelig: sett HAVE_DBUS i src/config.h"
 
-#: dnsmasq.c:229
+#: dnsmasq.c:228
 #, c-format
 msgid "unknown user or group: %s"
 msgstr ""
 
-#: dnsmasq.c:284
+#: dnsmasq.c:283
 #, c-format
 msgid "cannot chdir to filesystem root: %s"
 msgstr ""
 
-#: dnsmasq.c:448
+#: dnsmasq.c:447
 #, fuzzy, c-format
 msgid "started, version %s DNS disabled"
 msgstr "startet, versjon %s mellomlager deaktivert"
 
-#: dnsmasq.c:450
+#: dnsmasq.c:449
 #, c-format
 msgid "started, version %s cachesize %d"
 msgstr "startet, versjon %s mellomlager størrelse %d"
 
-#: dnsmasq.c:452
+#: dnsmasq.c:451
 #, c-format
 msgid "started, version %s cache disabled"
 msgstr "startet, versjon %s mellomlager deaktivert"
 
-#: dnsmasq.c:454
+#: dnsmasq.c:453
 #, c-format
 msgid "compile time options: %s"
 msgstr "kompilerings opsjoner: %s"
 
-#: dnsmasq.c:460
+#: dnsmasq.c:459
 msgid "DBus support enabled: connected to system bus"
 msgstr "DBus støtte aktivert: koblet til system buss"
 
-#: dnsmasq.c:462
+#: dnsmasq.c:461
 msgid "DBus support enabled: bus connection pending"
 msgstr "DBus støtte aktivert: avventer buss tilkobling"
 
-#: dnsmasq.c:467
+#: dnsmasq.c:466
 #, fuzzy, c-format
 msgid "warning: failed to change owner of %s: %s"
 msgstr "feilet Ã¥ laste navn fra %s: %s"
 
-#: dnsmasq.c:471
+#: dnsmasq.c:470
 msgid "setting --bind-interfaces option because of OS limitations"
 msgstr "setter --bind-interfaces opsjon pÃ¥ grunn av OS begrensninger"
 
-#: dnsmasq.c:476
+#: dnsmasq.c:475
 #, c-format
 msgid "warning: interface %s does not currently exist"
 msgstr "advarsel: nettverkskort %s eksisterer ikke for tiden"
 
-#: dnsmasq.c:481
+#: dnsmasq.c:480
 msgid "warning: ignoring resolv-file flag because no-resolv is set"
 msgstr ""
 
-#: dnsmasq.c:484
+#: dnsmasq.c:483
 #, fuzzy
 msgid "warning: no upstream servers configured"
 msgstr "setter oppstrøms tjener fra DBus"
 
-#: dnsmasq.c:488
+#: dnsmasq.c:487
 #, c-format
 msgid "asynchronous logging enabled, queue limit is %d messages"
 msgstr ""
 
-#: dnsmasq.c:501
+#: dnsmasq.c:500
 #, c-format
 msgid "DHCP, static leases only on %.0s%s, lease time %s"
 msgstr "DHCP, statisk leie kun pÃ¥ %.0s%s, leie tid %s"
 
-#: dnsmasq.c:503
+#: dnsmasq.c:502
 #, c-format
 msgid "DHCP, proxy on subnet %.0s%s%.0s"
 msgstr ""
 
-#: dnsmasq.c:504
+#: dnsmasq.c:503
 #, c-format
 msgid "DHCP, IP range %s -- %s, lease time %s"
 msgstr "DHCP, IP omrÃ¥de %s -- %s, leie tid %s"
 
-#: dnsmasq.c:519
+#: dnsmasq.c:518
 msgid "root is "
 msgstr ""
 
-#: dnsmasq.c:519
+#: dnsmasq.c:518
 #, fuzzy
 msgid "enabled"
 msgstr "deaktivert"
 
-#: dnsmasq.c:521
+#: dnsmasq.c:520
 msgid "secure mode"
 msgstr ""
 
-#: dnsmasq.c:547
+#: dnsmasq.c:546
 #, c-format
 msgid "restricting maximum simultaneous TFTP transfers to %d"
 msgstr ""
 
-#: dnsmasq.c:673
+#: dnsmasq.c:672
 msgid "connected to system DBus"
 msgstr "tilkoblet til system DBus"
 
-#: dnsmasq.c:768
+#: dnsmasq.c:767
 #, c-format
 msgid "cannot fork into background: %s"
 msgstr ""
 
-#: dnsmasq.c:771
+#: dnsmasq.c:770
 #, fuzzy, c-format
 msgid "failed to create helper: %s"
 msgstr "feilet Ã¥ lese %s: %s"
 
-#: dnsmasq.c:774
+#: dnsmasq.c:773
 #, c-format
 msgid "setting capabilities failed: %s"
 msgstr ""
 
-#: dnsmasq.c:778
+#: dnsmasq.c:777
 #, fuzzy, c-format
 msgid "failed to change user-id to %s: %s"
 msgstr "feilet Ã¥ laste navn fra %s: %s"
 
-#: dnsmasq.c:783
+#: dnsmasq.c:782
 #, fuzzy, c-format
 msgid "failed to change group-id to %s: %s"
 msgstr "feilet Ã¥ laste navn fra %s: %s"
 
-#: dnsmasq.c:786
+#: dnsmasq.c:785
 #, fuzzy, c-format
 msgid "failed to open pidfile %s: %s"
 msgstr "feilet Ã¥ lese %s: %s"
 
-#: dnsmasq.c:789
+#: dnsmasq.c:788
 #, fuzzy, c-format
 msgid "cannot open %s: %s"
 msgstr "kan ikke Ã¥pne %s:%s"
 
-#: dnsmasq.c:844
+#: dnsmasq.c:843
 #, c-format
 msgid "child process killed by signal %d"
 msgstr ""
 
-#: dnsmasq.c:848
+#: dnsmasq.c:847
 #, c-format
 msgid "child process exited with status %d"
 msgstr ""
 
-#: dnsmasq.c:852
+#: dnsmasq.c:851
 #, fuzzy, c-format
 msgid "failed to execute %s: %s"
 msgstr "feilet Ã¥ fÃ¥ tilgang til %s: %s"
 
-#: dnsmasq.c:896
+#: dnsmasq.c:895
 msgid "exiting on receipt of SIGTERM"
 msgstr "avslutter etter mottak av SIGTERM"
 
-#: dnsmasq.c:924
+#: dnsmasq.c:923
 #, fuzzy, c-format
 msgid "failed to access %s: %s"
 msgstr "feilet Ã¥ fÃ¥ tilgang til %s: %s"
 
-#: dnsmasq.c:954
+#: dnsmasq.c:953
 #, c-format
 msgid "reading %s"
 msgstr "leser %s"
 
-#: dnsmasq.c:965
+#: dnsmasq.c:964
 #, fuzzy, c-format
 msgid "no servers found in %s, will retry"
 msgstr "intet søke direktiv funnet i %s"
@@ -1273,19 +1254,19 @@ msgstr ""
 msgid "disabled"
 msgstr "deaktivert"
 
-#: rfc2131.c:466 rfc2131.c:969 rfc2131.c:1335
+#: rfc2131.c:466 rfc2131.c:978 rfc2131.c:1350
 msgid "ignored"
 msgstr "oversett"
 
-#: rfc2131.c:481 rfc2131.c:1183
+#: rfc2131.c:481 rfc2131.c:1197
 msgid "address in use"
 msgstr "adresse i bruk"
 
-#: rfc2131.c:495 rfc2131.c:1023
+#: rfc2131.c:495 rfc2131.c:1032
 msgid "no address available"
 msgstr "ingen adresse tilgjengelig"
 
-#: rfc2131.c:502 rfc2131.c:1146
+#: rfc2131.c:502 rfc2131.c:1160
 msgid "wrong network"
 msgstr "galt nettverk"
 
@@ -1293,7 +1274,7 @@ msgstr "galt nettverk"
 msgid "no address configured"
 msgstr "ingen adresse konfigurert"
 
-#: rfc2131.c:522 rfc2131.c:1196
+#: rfc2131.c:522 rfc2131.c:1210
 msgid "no leases left"
 msgstr "ingen leier igjen"
 
@@ -1316,118 +1297,118 @@ msgstr "DBus feil: %s"
 msgid "PXE BIS not supported"
 msgstr ""
 
-#: rfc2131.c:939
+#: rfc2131.c:948
 #, fuzzy, c-format
 msgid "disabling DHCP static address %s for %s"
 msgstr "deaktiverer DHCP statisk adresse %s"
 
-#: rfc2131.c:960
+#: rfc2131.c:969
 msgid "unknown lease"
 msgstr "ukjent leie"
 
-#: rfc2131.c:992
+#: rfc2131.c:1001
 #, c-format
 msgid "not using configured address %s because it is leased to %s"
 msgstr ""
 
-#: rfc2131.c:1002
+#: rfc2131.c:1011
 #, c-format
 msgid "not using configured address %s because it is in use by the server or relay"
 msgstr ""
 
-#: rfc2131.c:1005
+#: rfc2131.c:1014
 #, c-format
 msgid "not using configured address %s because it was previously declined"
 msgstr ""
 
-#: rfc2131.c:1021 rfc2131.c:1189
+#: rfc2131.c:1030 rfc2131.c:1203
 msgid "no unique-id"
 msgstr ""
 
-#: rfc2131.c:1090
+#: rfc2131.c:1099
 msgid "wrong server-ID"
 msgstr ""
 
-#: rfc2131.c:1108
+#: rfc2131.c:1117
 msgid "wrong address"
 msgstr "gal adresse"
 
-#: rfc2131.c:1121
+#: rfc2131.c:1135
 msgid "lease not found"
 msgstr "leie ikke funnet"
 
-#: rfc2131.c:1154
+#: rfc2131.c:1168
 msgid "address not available"
 msgstr "adresse ikke tilgjengelig"
 
-#: rfc2131.c:1165
+#: rfc2131.c:1179
 msgid "static lease available"
 msgstr "statisk leie tilgjengelig"
 
-#: rfc2131.c:1169
+#: rfc2131.c:1183
 msgid "address reserved"
 msgstr "adresse reservert"
 
-#: rfc2131.c:1177
+#: rfc2131.c:1191
 #, c-format
 msgid "abandoning lease to %s of %s"
 msgstr ""
 
-#: rfc2131.c:1757
+#: rfc2131.c:1772
 #, c-format
 msgid "%u tags: %s"
 msgstr ""
 
-#: rfc2131.c:1770
+#: rfc2131.c:1785
 #, c-format
 msgid "%u bootfile name: %s"
 msgstr ""
 
-#: rfc2131.c:1779
+#: rfc2131.c:1794
 #, fuzzy, c-format
 msgid "%u server name: %s"
 msgstr "DBus feil: %s"
 
-#: rfc2131.c:1793
+#: rfc2131.c:1808
 #, fuzzy, c-format
 msgid "%u next server: %s"
 msgstr "DBus feil: %s"
 
-#: rfc2131.c:1796
+#: rfc2131.c:1811
 #, c-format
 msgid "%u broadcast response"
 msgstr ""
 
-#: rfc2131.c:1859
+#: rfc2131.c:1874
 #, fuzzy, c-format
 msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
 msgstr "kan ikke sende DHCP opsjon %d: ikke mer plass i pakken"
 
-#: rfc2131.c:2105
+#: rfc2131.c:2120
 msgid "PXE menu too large"
 msgstr ""
 
-#: rfc2131.c:2218
+#: rfc2131.c:2233
 #, c-format
 msgid "Ignoring domain %s for DHCP host name %s"
 msgstr ""
 
-#: rfc2131.c:2236
+#: rfc2131.c:2251
 #, fuzzy, c-format
 msgid "%u requested options: %s"
 msgstr "kompilerings opsjoner: %s"
 
-#: rfc2131.c:2503
+#: rfc2131.c:2518
 #, c-format
 msgid "cannot send RFC3925 option: too many options for enterprise number %d"
 msgstr ""
 
-#: netlink.c:66
+#: netlink.c:70
 #, fuzzy, c-format
 msgid "cannot create netlink socket: %s"
 msgstr "kan ikke binde netlink socket: %s"
 
-#: netlink.c:265
+#: netlink.c:288
 #, fuzzy, c-format
 msgid "netlink returns error: %s"
 msgstr "DBus feil: %s"
@@ -1444,45 +1425,45 @@ msgstr "setter oppstr
 msgid "could not register a DBus message handler"
 msgstr "kunne ikke registrere en DBus meldingshÃ¥ndterer"
 
-#: bpf.c:150
+#: bpf.c:217
 #, c-format
 msgid "cannot create DHCP BPF socket: %s"
 msgstr "kan ikke lage DHCP BPF socket: %s"
 
-#: bpf.c:178
+#: bpf.c:245
 #, fuzzy, c-format
 msgid "DHCP request for unsupported hardware type (%d) received on %s"
 msgstr "DHCP krav for ikke støttet maskinvare type (%d) mottatt pÃ¥ %s"
 
-#: tftp.c:233
+#: tftp.c:281
 msgid "unable to get free port for TFTP"
 msgstr ""
 
-#: tftp.c:248
+#: tftp.c:296
 #, c-format
 msgid "unsupported request from %s"
 msgstr ""
 
-#: tftp.c:336
-#, c-format
-msgid "sent %s to %s"
-msgstr ""
-
-#: tftp.c:359
+#: tftp.c:406
 #, fuzzy, c-format
 msgid "file %s not found"
 msgstr "leie ikke funnet"
 
-#: tftp.c:470
+#: tftp.c:522
 #, c-format
 msgid "error %d %s received from %s"
 msgstr ""
 
-#: tftp.c:501
+#: tftp.c:554
 #, fuzzy, c-format
 msgid "failed sending %s to %s"
 msgstr "feilet Ã¥ lese %s: %s"
 
+#: tftp.c:568
+#, c-format
+msgid "sent %s to %s"
+msgstr ""
+
 #: log.c:173
 #, c-format
 msgid "overflow: %d log entries lost"
@@ -1493,10 +1474,26 @@ msgstr ""
 msgid "log failed: %s"
 msgstr ""
 
-#: log.c:431
+#: log.c:436
 msgid "FAILED to start up"
 msgstr "FEILET Ã¥ starte opp"
 
+#~ msgid "TXT record string too long"
+#~ msgstr "TXT post streng for lang"
+
+#~ msgid "failed to set IPV6 options on listening socket: %s"
+#~ msgstr "feilet Ã¥ sette IPv6 opsjoner pÃ¥ lytte socket: %s"
+
+#~ msgid "failed to bind listening socket for %s: %s"
+#~ msgstr "feilet Ã¥ binde lytte socket for %s: %s"
+
+#~ msgid "failed to listen on socket: %s"
+#~ msgstr "feilet Ã¥ lytte pÃ¥ socket: %s"
+
+#, fuzzy
+#~ msgid "failed to create TFTP socket: %s"
+#~ msgstr "feilet Ã¥ lage lytte socket: %s"
+
 #~ msgid "must set exactly one interface on broken systems without IP_RECVIF"
 #~ msgstr "mÃ¥ sette nøyaktig et interface pÃ¥ Ã¸delagte systemer uten IP_RECVIF"
 
@@ -1524,9 +1521,6 @@ msgstr "FEILET 
 #~ msgid "read %s - %d hosts"
 #~ msgstr "les %s - %d adresser"
 
-#~ msgid "bad dhcp-host"
-#~ msgstr "dÃ¥rlig dhcp-vert"
-
 #~ msgid "domains"
 #~ msgstr "domener"
 
index 150666990e611fac2008845f5a0628ecf56d4040..398abd0ba92837bc48b9938bc946b98849a08bb6 100644 (file)
--- a/po/pl.po
+++ b/po/pl.po
@@ -4,77 +4,72 @@
 #
 # Tomasz Sochañski <nerdhero@gmail.com>, 2005.
 # Jan Psota <jasiu@belsznica.pl>, 2008, 2009, 2010.
-# Jan Psota <jasiupsota@gmail.com>, 2010.
+# Jan Psota <jasiupsota@gmail.com>, 2010, 2011.
 msgid ""
 msgstr ""
 "Project-Id-Version: pl\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2009-06-10 20:57+0100\n"
-"PO-Revision-Date: 2010-05-25 12:37+0200\n"
+"PO-Revision-Date: 2011-01-16 23:56+0100\n"
 "Last-Translator: Jan Psota <jasiupsota@gmail.com>\n"
 "Language-Team: Polish <>\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-2\n"
+"Content-Type: text/plain; charset=iso-8859-2\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms:  nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Lokalize 1.0\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Generator: Lokalize 1.1\n"
 "X-Language: pl_PL\n"
 
-#: cache.c:764
+#: cache.c:761
 #, c-format
 msgid "failed to load names from %s: %s"
 msgstr "nie potrafiê wczytaæ nazw z %s: %s"
 
-#: cache.c:798 dhcp.c:865
+#: cache.c:795 dhcp.c:865
 #, c-format
 msgid "bad address at %s line %d"
 msgstr "b³êdny adres w pliku %s, w linii %d"
 
-#: cache.c:856 dhcp.c:881
+#: cache.c:853 dhcp.c:881
 #, c-format
 msgid "bad name at %s line %d"
 msgstr "b³êdna nazwa w pliku %s, w linii %d"
 
-#: cache.c:863 dhcp.c:956
+#: cache.c:860 dhcp.c:956
 #, c-format
 msgid "read %s - %d addresses"
 msgstr "wczyta³em %s - %d adresów"
 
-#: cache.c:902
+#: cache.c:899
 msgid "cleared cache"
 msgstr "wyczyszczono pamiêæ podrêczn±"
 
-#: cache.c:933 option.c:1112
-#, c-format
-msgid "cannot access directory %s: %s"
-msgstr "brak dostêpu do katalogu %s: %s"
-
-#: cache.c:1053
+#: cache.c:960
 #, 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:1059
+#: cache.c:966
 #, 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:1132
+#: cache.c:1039
 #, c-format
 msgid "time %lu"
 msgstr "czas %lu"
 
-#: cache.c:1133
+#: cache.c:1040
 #, 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:1135
+#: cache.c:1042
 #, c-format
 msgid "queries forwarded %u, queries answered locally %u"
 msgstr "%u zapytañ przes³anych dalej, %u odpowiedzi udzielonych samodzielnie"
 
-#: cache.c:1158
+#: cache.c:1068
 #, 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"
@@ -88,7 +83,7 @@ msgstr "brak mo
 msgid "failed to allocate memory"
 msgstr "nie uda³o siê przydzieliæ pamiêci"
 
-#: util.c:229 option.c:567
+#: util.c:229 option.c:573
 msgid "could not get memory"
 msgstr "nie mo¿na dostaæ pamiêci"
 
@@ -107,440 +102,448 @@ msgstr "niemo
 msgid "infinite"
 msgstr "nieskoñczona"
 
-#: option.c:240
+#: option.c:244
 msgid "Specify local address(es) to listen on."
 msgstr "Wskazanie adresów, na których nale¿y nas³uchiwaæ."
 
-#: option.c:241
+#: option.c:245
 msgid "Return ipaddr for all hosts in specified domains."
 msgstr "Zwracanie adresu IP dla wszystkich hostów we wskazanych domenach."
 
-#: option.c:242
+#: option.c:246
 msgid "Fake reverse lookups for RFC1918 private address ranges."
 msgstr "Wy³±czenie przekazywania zapytañ odwrotnych dla prywatnych zakresów IP."
 
-#: option.c:243
+#: option.c:247
 msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
 msgstr "Traktowanie adresu IP jako NXDOMAIN (uniewa¿nia ,,Verisign wildcard'')."
 
-#: option.c:244
+#: option.c:248
 #, 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:245
+#: option.c:249
 #, c-format
 msgid "Specify configuration file (defaults to %s)."
 msgstr "Wskazanie pliku konfiguracyjnego (domy¶lnie: %s)."
 
-#: option.c:246
+#: option.c:250
 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:247
+#: option.c:251
 msgid "Do NOT forward queries with no domain part."
 msgstr "Wy³±czenie przekazywania zapytañ bez podanej czê¶ci domenowej."
 
-#: option.c:248
+#: option.c:252
 msgid "Return self-pointing MX records for local hosts."
 msgstr "Zwracanie samowskazuj±cego rekordu MX dla lokalnych hostów."
 
-#: option.c:249
+#: option.c:253
 msgid "Expand simple names in /etc/hosts with domain-suffix."
 msgstr "Rozwijanie prostych nazw z /etc/hosts przyrostkiem domenowym."
 
-#: option.c:250
+#: option.c:254
 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:251
+#: option.c:255
 msgid "Enable DHCP in the range given with lease duration."
 msgstr "W³±czenie serwera DHCP dla wskazanego zakresu adresów."
 
-#: option.c:252
+#: option.c:256
 #, 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:253
+#: option.c:257
 msgid "Set address or hostname for a specified machine."
 msgstr "Ustawienie adresu lub nazwy dla wskazanego komputera."
 
-#: option.c:254
+#: option.c:258
 msgid "Read DHCP host specs from file."
 msgstr "Wskazanie pliku z warto¶ciami 'dhcp-host='."
 
-#: option.c:255
+#: option.c:259
 msgid "Read DHCP option specs from file."
 msgstr "Wskazanie pliku z warto¶ciami 'dhcp-option='."
 
-#: option.c:256
+#: option.c:260
 msgid "Evaluate conditional tag expression."
 msgstr "Warunkowe ustawianie znaczników."
 
-#: option.c:257
+#: option.c:261
 #, c-format
 msgid "Do NOT load %s file."
 msgstr "NIE wczytywanie pliku %s."
 
-#: option.c:258
+#: option.c:262
 #, c-format
 msgid "Specify a hosts file to be read in addition to %s."
 msgstr "Wskazanie dodatkowego pliku 'hosts' oprócz %s."
 
-#: option.c:259
+#: option.c:263
 msgid "Specify interface(s) to listen on."
 msgstr "Interfejsy, na których nas³uchiwaæ."
 
-#: option.c:260
+#: option.c:264
 msgid "Specify interface(s) NOT to listen on."
 msgstr "Interfejsy, na których NIE nas³uchiwaæ."
 
-#: option.c:261
+#: option.c:265
 msgid "Map DHCP user class to tag."
 msgstr "Przyporz±dkowanie znacznika w zale¿no¶ci od klasy u¿ytkownika DHCP."
 
-#: option.c:262
+#: option.c:266
 msgid "Map RFC3046 circuit-id to tag."
 msgstr "Przyporz±dkowanie znacznika w zale¿no¶ci od numeru obwodu (w rozumieniu RFC3046)."
 
-#: option.c:263
+#: option.c:267
 msgid "Map RFC3046 remote-id to tag."
 msgstr "Przyporz±dkowanie znacznika w zale¿no¶ci od numeru agenta (w rozumieniu RFC3046)."
 
-#: option.c:264
+#: option.c:268
 msgid "Map RFC3993 subscriber-id to tag."
 msgstr "Przyporz±dkowanie znacznika w zale¿no¶ci od numeru subskrybenta (w rozumieniu RFC3993)."
 
-#: option.c:265
+#: option.c:269
 msgid "Don't do DHCP for hosts with tag set."
 msgstr "Wy³±czenie DHCP dla hostów z okre¶lonym znacznikiem."
 
-#: option.c:266
+#: option.c:270
 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:267
+#: option.c:271
 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:268
+#: option.c:272
 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:269
+#: option.c:273
 #, 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:270
+#: option.c:274
 msgid "Return MX records for local hosts."
 msgstr "W³±czenie zwracania rekordu MX dla hostów lokalnych."
 
-#: option.c:271
+#: option.c:275
 msgid "Specify an MX record."
 msgstr "Specyfikacja rekordu MX."
 
-#: option.c:272
+#: option.c:276
 msgid "Specify BOOTP options to DHCP server."
 msgstr "Okre¶lenie opcji BOOTP serwera DHCP."
 
-#: option.c:273
+#: option.c:277
 #, 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:274
+#: option.c:278
 msgid "Do NOT cache failed search results."
 msgstr "Wy³±czenie przechowywania w pamiêci podrêcznej wyników nieudanych wyszukiwañ."
 
-#: option.c:275
+#: option.c:279
 #, 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:276
+#: option.c:280
 msgid "Specify options to be sent to DHCP clients."
 msgstr "Specyfikacja opcji wysy³anej do klientów DHCP."
 
-#: option.c:277
+#: option.c:281
 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:278
+#: option.c:282
 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:279
+#: option.c:283
 #, 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:280
+#: option.c:284
 msgid "Log DNS queries."
 msgstr "W³±czenie spisywania zapytañ DNS do logu."
 
-#: option.c:281
+#: option.c:285
 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:282
+#: option.c:286
 msgid "Do NOT read resolv.conf."
 msgstr "Wy³±czenie czytania pliku resolv.conf."
 
-#: option.c:283
+#: option.c:287
 #, c-format
 msgid "Specify path to resolv.conf (defaults to %s)."
 msgstr "Wskazanie po³o¿enia pliku resolv.conf (domy¶lnie: %s)."
 
-#: option.c:284
+#: option.c:288
 msgid "Specify address(es) of upstream servers with optional domains."
 msgstr "Wskazywanie adresów serwerów nazw, opcjonalnie z przypisaniem do domeny."
 
-#: option.c:285
+#: option.c:289
 msgid "Never forward queries to specified domains."
 msgstr "Wy³±czenie przekazywania zapytañ do wskazanych domen."
 
-#: option.c:286
+#: option.c:290
 msgid "Specify the domain to be assigned in DHCP leases."
 msgstr "Wskazanie domeny dla serwera DHCP."
 
-#: option.c:287
+#: option.c:291
 msgid "Specify default target in an MX record."
 msgstr "Okre¶lenie domy¶lnego celu w rekordzie MX."
 
-#: option.c:288
+#: option.c:292
 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:289
+#: option.c:293
 msgid "Specify time-to-live in seconds for negative caching."
 msgstr "Okre¶lenie (w sekundach) czasu wa¿no¶ci negatywnych odpowiedzi."
 
-#: option.c:290
+#: option.c:294
 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:291
+#: option.c:295
 #, 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:292
+#: option.c:296
 msgid "Map DHCP vendor class to tag."
 msgstr "Przyporz±dkowanie znacznika w zale¿no¶ci od typu klienta DHCP."
 
-#: option.c:293
+#: option.c:297
 msgid "Display dnsmasq version and copyright information."
 msgstr "Wydrukowanie informacji o programie i ochronie praw autorskich."
 
-#: option.c:294
+#: option.c:298
 msgid "Translate IPv4 addresses from upstream servers."
 msgstr "T³umaczenie adresów IPv4 z serwerów nadrzêdnych."
 
-#: option.c:295
+#: option.c:299
 msgid "Specify a SRV record."
 msgstr "Okre¶lenie rekordu SRV."
 
-#: option.c:296
+#: option.c:300
 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:297
+#: option.c:301
 #, c-format
 msgid "Specify path of PID file (defaults to %s)."
 msgstr "Okre¶lenie Â¶cie¿ki do pliku PID (domy¶lnie: %s)."
 
-#: option.c:298
+#: option.c:302
 #, c-format
 msgid "Specify maximum number of DHCP leases (defaults to %s)."
 msgstr "Maksymalna liczba dzier¿aw DHCP (domy¶lnie: %s)."
 
-#: option.c:299
+#: option.c:303
 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:300
+#: option.c:304
 msgid "Specify TXT DNS record."
 msgstr "Specyfikacja rekordu DNS TXT."
 
-#: option.c:301
+#: option.c:305
 msgid "Specify PTR DNS record."
 msgstr "Specyfikacja rekordu DNS PTR."
 
-#: option.c:302
+#: option.c:306
 msgid "Give DNS name to IPv4 address of interface."
 msgstr "Zwraca nazwê domenow± powi±zan± z adresem interfejsu sieciowego."
 
-#: option.c:303
+#: option.c:307
 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:304
+#: option.c:308
 #, c-format
 msgid "Read DHCP static host information from %s."
 msgstr "Wczytanie przyporz±dkowañ adresów z %s."
 
-#: option.c:305
+#: option.c:309
 msgid "Enable the DBus interface for setting upstream servers, etc."
 msgstr "W³±czenie u¿ywania interfejsu DBus do informowania o zmianach konfiguracji."
 
-#: option.c:306
+#: option.c:310
 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:307
+#: option.c:311
 msgid "Enable dynamic address allocation for bootp."
 msgstr "W³±czenie dynamicznego przydzielania adresów dla klientów BOOTP."
 
-#: option.c:308
+#: option.c:312
 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:309
+#: option.c:313
 msgid "Treat DHCP requests on aliases as arriving from interface."
 msgstr "Traktowanie Â¿Â±dañ DHCP odebranych na interfejsach alias, ..., jako odebranych na iface."
 
-#: option.c:310
+#: option.c:314
 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:311
+#: option.c:315
 msgid "Script to run on DHCP lease creation and destruction."
 msgstr "Wskazanie skryptu uruchamianego w przypadku wydzier¿awienia adresu lub wyga¶niêcia dzier¿awy."
 
-#: option.c:312
+#: option.c:316
 msgid "Read configuration from all the files in this directory."
 msgstr "Wczytanie wszystkich plików ze wskazanego katalogu jako konfiguracyjnych."
 
-#: option.c:313
+#: option.c:317
 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:314
+#: option.c:318
 msgid "Do not use leasefile."
 msgstr "Nieu¿ywanie bazy dzier¿aw."
 
-#: option.c:315
+#: option.c:319
 #, 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:316
+#: option.c:320
 #, c-format
 msgid "Clear DNS cache when reloading %s."
 msgstr "Czyszczenie pamiêci podrêcznej serwera nazw w przypadku ponownego odczytu %s."
 
-#: option.c:317
+#: option.c:321
 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:318
+#: option.c:322
 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:319
+#: option.c:323
 msgid "Enable integrated read-only TFTP server."
 msgstr "W³±czenie wbudowanego serwera TFTP (tylko do wysy³ania)."
 
-#: option.c:320
+#: option.c:324
 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:321
+#: option.c:325
 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:322
+#: option.c:326
 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:323
+#: option.c:327
 #, 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:324
+#: option.c:328
 msgid "Disable the TFTP blocksize extension."
 msgstr "Wy³±czenie mo¿liwo¶ci negocjowania wielko¶ci bloku dla przesy³ów przez TFTP."
 
-#: option.c:325
+#: option.c:329
 msgid "Ephemeral port range for use by TFTP transfers."
 msgstr "Wskazanie zakresu portów do u¿ytku TFTP."
 
-#: option.c:326
+#: option.c:330
 msgid "Extra logging for DHCP."
 msgstr "W³±czenie spisywania w logu operacji DHCP."
 
-#: option.c:327
+#: option.c:331
 msgid "Enable async. logging; optionally set queue length."
 msgstr "W³±czenie asynchronicznego zapisywania do logu z ewentualnym wskazaniem d³ugo¶ci kolejki."
 
-#: option.c:328
+#: option.c:332
 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:329
+#: option.c:333
 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:330
+#: option.c:334
 msgid "Inhibit DNS-rebind protection on this domain."
 msgstr "Dezaktywacja zabezpieczenia przed atakami DNS-rebind dla wskazanych domen."
 
-#: option.c:331
+#: option.c:335
 msgid "Always perform DNS queries to all servers."
 msgstr "Jednoczesne odpytywanie wszystkich serwerów nadrzêdnych; klientowi przekazywana jest pierwsza odpowied¼."
 
-#: option.c:332
+#: option.c:336
 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:333
+#: option.c:337
 msgid "Use alternative ports for DHCP."
 msgstr "U¿ycie alternatywnych portów dla us³ugi DHCP."
 
-#: option.c:334
+#: option.c:338
 msgid "Run lease-change script as this user."
 msgstr "Uruchamianie skryptu dhcp-script jako wskazany u¿ytkownik."
 
-#: option.c:335
+#: option.c:339
 msgid "Specify NAPTR DNS record."
 msgstr "Specyfikacja rekordu DNS NAPTR."
 
-#: option.c:336
+#: option.c:340
 msgid "Specify lowest port available for DNS query transmission."
 msgstr "Ustawienie dolnej granicy numerów portów do przesy³ania zapytañ DNS."
 
-#: option.c:337
+#: option.c:341
 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:338
+#: option.c:342
 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:339
+#: option.c:343
 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:340
+#: option.c:344
 msgid "Specify alias name for LOCAL DNS name."
 msgstr "Wskazanie synonimu nazwy komputera lokalnego - znanego z /etc/hosts albo z DHCP."
 
-#: option.c:341
+#: option.c:345
 msgid "Prompt to send to PXE clients."
 msgstr "Zg³oszenie wysy³ane klientom PXE."
 
-#: option.c:342
+#: option.c:346
 msgid "Boot service for PXE menu."
 msgstr "Sk³adnik menu PXE (--> man)."
 
-#: option.c:343
+#: option.c:347
 msgid "Check configuration syntax."
 msgstr "Sprawdzenie sk³adni."
 
-#: option.c:632
+#: option.c:348
+msgid "Add requestor's MAC address to forwarded DNS queries"
+msgstr "Za³±czanie MAC-adresu komputera pytaj±cego w przekazywanych dalej zapytaniach DNS."
+
+#: option.c:349
+msgid "Proxy DNSSEC validation results from upstream nameservers"
+msgstr "Przekazywanie wyników weryfikacji DNSSEC z serwerów nadrzêdnych."
+
+#: option.c:638
 #, c-format
 msgid ""
 "Usage: dnsmasq [options]\n"
@@ -549,224 +552,220 @@ msgstr ""
 "U¿ycie: dnsmasq [opcje]\n"
 "\n"
 
-#: option.c:634
+#: option.c:640
 #, 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:636
+#: option.c:642
 #, c-format
 msgid "Valid options are:\n"
 msgstr "Dostêpne opcje:\n"
 
-#: option.c:677
+#: option.c:683
 #, c-format
 msgid "Known DHCP options:\n"
 msgstr "Znane opcje DHCP:\n"
 
-#: option.c:781
+#: option.c:798
 msgid "bad dhcp-option"
 msgstr "b³±d w dhcp-option"
 
-#: option.c:838
+#: option.c:860
 msgid "bad IP address"
 msgstr "z³y adres IP"
 
-#: option.c:941
+#: option.c:966
 msgid "bad domain in dhcp-option"
 msgstr "nieprawid³owa nazwa domeny w dhcp-option"
 
-#: option.c:1007
+#: option.c:1032
 msgid "dhcp-option too long"
 msgstr "zbyt d³uga dhcp-option (>255 znaków)"
 
-#: option.c:1016
+#: option.c:1041
 msgid "illegal dhcp-match"
 msgstr "niedopuszczalne dhcp-match"
 
-#: option.c:1052
+#: option.c:1085
 msgid "illegal repeated flag"
 msgstr "wielokrotne u¿ycie opcji niedozwolone (pojawi³a siê wcze¶niej w linii poleceñ)"
 
-#: option.c:1060
+#: option.c:1093
 msgid "illegal repeated keyword"
 msgstr "wielokrotne u¿ycie opcji niedozwolone (pojawi³a siê wsze¶niej w pliku konfiguracyjnym)"
 
-#: option.c:1143 tftp.c:413
+#: option.c:1145 option.c:3024
+#, c-format
+msgid "cannot access directory %s: %s"
+msgstr "brak dostêpu do katalogu %s: %s"
+
+#: option.c:1176 tftp.c:460
 #, c-format
 msgid "cannot access %s: %s"
 msgstr "brak dostêpu do %s: %s"
 
-#: option.c:1188
-msgid "only one dhcp-hostsfile allowed"
-msgstr "mo¿na wskazaæ tylko jeden plik dhcp-hostsfile"
-
-#: option.c:1195
-msgid "only one dhcp-optsfile allowed"
-msgstr "mo¿na wskazaæ tylko jeden plik dhcp-optsfile"
-
-#: option.c:1240
+#: option.c:1259
 msgid "bad MX preference"
 msgstr "nieprawid³owa warto¶æ preferencji MX"
 
-#: option.c:1245
+#: option.c:1264
 msgid "bad MX name"
 msgstr "nieprawid³owa nazwa MX"
 
-#: option.c:1259
+#: option.c:1278
 msgid "bad MX target"
 msgstr "nieprawid³owa warto¶æ celu MX"
 
-#: option.c:1269
+#: option.c:1288
 msgid "cannot run scripts under uClinux"
 msgstr "w uClinuksie nie ma mo¿liwo¶ci uruchamiania skryptów"
 
-#: option.c:1271
+#: option.c:1290
 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:1516 option.c:1520
+#: option.c:1591 option.c:1595
 msgid "bad port"
 msgstr "nieprawid³owy numer portu"
 
-#: option.c:1539 option.c:1564
+#: option.c:1614 option.c:1639
 msgid "interface binding not supported"
 msgstr "nie ma mo¿liwo¶ci dowi±zywania do interfejsu"
 
-#: option.c:1710
+#: option.c:1785
 msgid "bad port range"
 msgstr "nieprawid³owy zakres numerów portów"
 
-#: option.c:1727
+#: option.c:1802
 msgid "bad bridge-interface"
 msgstr "nieprawid³owa nazwa urz±dzenia w bridge-interface"
 
-#: option.c:1769
+#: option.c:1844
 msgid "bad dhcp-range"
 msgstr "nieprawid³owy zakres dhcp-range"
 
-#: option.c:1797
+#: option.c:1872
 msgid "only one tag allowed"
 msgstr "mo¿na wskazaæ tylko jeden znacznik sieci"
 
-#: option.c:1844
+#: option.c:1919
 msgid "inconsistent DHCP range"
 msgstr "niespójny zakres adresów DHCP"
 
-#: option.c:2019
+#: option.c:2013 option.c:2039
+msgid "bad hex constant"
+msgstr "zapis niezgodny z formatem szesnastkowym"
+
+#: option.c:2101
 msgid "bad DHCP host name"
 msgstr "niedopuszczalna nazwa komputera w dhcp-host"
 
-#: option.c:2100
+#: option.c:2182
 msgid "bad tag-if"
 msgstr "nieprawid³owa sk³adnia 'tag-if'"
 
-#: option.c:2374 option.c:2673
+#: option.c:2461 option.c:2746
 msgid "invalid port number"
 msgstr "nieprawid³owy numer portu"
 
-#: option.c:2436
+#: option.c:2523
 msgid "bad dhcp-proxy address"
 msgstr "z³y adres dhcp-proxy"
 
-#: option.c:2476
+#: option.c:2563
 msgid "invalid alias range"
 msgstr "nieprawid³owy zakres adresów w --alias"
 
-#: option.c:2489
+#: option.c:2576
 msgid "bad interface name"
 msgstr "nieprawid³owa nazwa interfejsu"
 
-#: option.c:2514
+#: option.c:2601
 msgid "bad CNAME"
 msgstr "z³a CNAME"
 
-#: option.c:2519
+#: option.c:2606
 msgid "duplicate CNAME"
 msgstr "powtórzona CNAME"
 
-#: option.c:2539
+#: option.c:2626
 msgid "bad PTR record"
 msgstr "nieprawid³owy zapis rekordu PTR"
 
-#: option.c:2570
+#: option.c:2657
 msgid "bad NAPTR record"
 msgstr "nieprawid³owy zapis rekordu NAPTR"
 
-#: option.c:2595
-msgid "TXT record string too long"
-msgstr "zbyt d³ugi rekord TXT"
-
-#: option.c:2643
+#: option.c:2689
 msgid "bad TXT record"
 msgstr "nieprawid³owy zapis rekordu TXT"
 
-#: option.c:2659
+#: option.c:2732
 msgid "bad SRV record"
 msgstr "nieprawid³owy zapis rekordu SRV"
 
-#: option.c:2666
+#: option.c:2739
 msgid "bad SRV target"
 msgstr "nieprawid³owa warto¶æ celu SRV"
 
-#: option.c:2680
+#: option.c:2753
 msgid "invalid priority"
 msgstr "nieprawid³owy priorytet"
 
-#: option.c:2687
+#: option.c:2760
 msgid "invalid weight"
 msgstr "nieprawid³owa waga"
 
-#: option.c:2706
+#: option.c:2779
 msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DBus support)"
 msgstr "nieobs³ugiwana opcja (sprawd¼, czy obs³uga DHCP/TFTP/DBus zosta³a wkompilowana)"
 
-#: option.c:2748
-#, c-format
-msgid "files nested too deep in %s"
-msgstr "zbyt du¿e zag³êbienie plików w %s"
-
-#: option.c:2756 tftp.c:567
-#, c-format
-msgid "cannot read %s: %s"
-msgstr "b³±d odczytu z pliku %s: %s"
-
-#: option.c:2813
+#: option.c:2843
 msgid "missing \""
 msgstr "brakuje \""
 
-#: option.c:2872
+#: option.c:2902
 msgid "bad option"
 msgstr "nieprawid³owa opcja"
 
-#: option.c:2874
+#: option.c:2904
 msgid "extraneous parameter"
 msgstr "nadwy¿kowy parametr"
 
-#: option.c:2876
+#: option.c:2906
 msgid "missing parameter"
 msgstr "brak parametru"
 
-#: option.c:2880
+#: option.c:2910
 msgid "error"
 msgstr "b³±d"
 
-#: option.c:2885
+#: option.c:2915
 #, c-format
 msgid "%s at line %d of %%s"
 msgstr "%s w linii %d pliku %%s"
 
-#: option.c:2942 option.c:2973
+#: option.c:2979 tftp.c:624
+#, c-format
+msgid "cannot read %s: %s"
+msgstr "b³±d odczytu z pliku %s: %s"
+
+#: option.c:3145 option.c:3181
 #, c-format
 msgid "read %s"
 msgstr "przeczyta³em %s"
 
-#: option.c:3045
+#: option.c:3229
+msgid "junk found in command line"
+msgstr "jakie¶ Â¶mieci w linii poleceñ"
+
+#: option.c:3258
 #, c-format
 msgid "Dnsmasq version %s  %s\n"
 msgstr "Dnsmasq, wersja %s  %s\n"
 
-#: option.c:3046
+#: option.c:3259
 #, c-format
 msgid ""
 "Compile time options %s\n"
@@ -775,157 +774,138 @@ msgstr ""
 "Wkompilowane opcje %s\n"
 "\n"
 
-#: option.c:3047
+#: option.c:3260
 #, c-format
 msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
 msgstr "Autor nie daje Â¯ADNYCH GWARANCJI egzekwowalnych prawnie.\n"
 
-#: option.c:3048
+#: option.c:3261
 #, 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:3049
+#: option.c:3262
 #, 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:3060
+#: option.c:3273
 msgid "try --help"
 msgstr "spróbuj: --help"
 
-#: option.c:3062
+#: option.c:3275
 msgid "try -w"
 msgstr "spróbuj: -w"
 
-#: option.c:3065
+#: option.c:3278
 #, c-format
 msgid "bad command line options: %s"
 msgstr "nieprawid³owa opcja w linii poleceñ %s"
 
-#: option.c:3106
+#: option.c:3319
 #, c-format
 msgid "cannot get host-name: %s"
 msgstr "nie mo¿na pobraæ nazwy hosta: %s"
 
-#: option.c:3134
+#: option.c:3347
 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:3144
+#: option.c:3357
 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:3147 network.c:813 dhcp.c:814
+#: option.c:3360 network.c:848 dhcp.c:814
 #, c-format
 msgid "failed to read %s: %s"
 msgstr "nie uda³o siê odczytaæ %s: %s"
 
-#: option.c:3164
+#: option.c:3377
 #, c-format
 msgid "no search directive found in %s"
 msgstr "brak wytycznych wyszukiwania w %s"
 
-#: option.c:3185
+#: option.c:3398
+#, fuzzy
 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:3189
+#: option.c:3402
 msgid "syntax check OK"
 msgstr "sk³adnia sprawdzona, jest prawid³owa"
 
-#: forward.c:427
+#: forward.c:461
 #, c-format
 msgid "nameserver %s refused to do a recursive query"
 msgstr "serwer nazw %s odmawia wykonania zapytania rekurencyjnego"
 
-#: forward.c:455
+#: forward.c:489
 #, c-format
 msgid "possible DNS-rebind attack detected: %s"
 msgstr "prawdopodobnie wykryto atak DNS-rebind: %s"
 
-#: network.c:110
+#: network.c:171
 #, c-format
 msgid "unknown interface %s in bridge-interface"
 msgstr "nieznany interfejs %s w bridge-u"
 
-#: network.c:467 dnsmasq.c:188
-#, c-format
-msgid "failed to create listening socket: %s"
-msgstr "b³±d podczas tworzenia gniazda: %s"
-
-#: network.c:474
-#, c-format
-msgid "failed to set IPV6 options on listening socket: %s"
-msgstr "b³±d ustawiania opcji IPV6 na nas³uchuj±cym gnie¼dzie: %s"
-
-#: network.c:500
+#: network.c:380
 #, c-format
-msgid "failed to bind listening socket for %s: %s"
-msgstr "b³±d przy przyznawaniu nazwy gniazdu %s: %s"
+msgid "failed to create listening socket for %s: %s"
+msgstr "nie uda³o siê otworzyæ gniazda %s: %s"
 
-#: network.c:505
-#, c-format
-msgid "failed to listen on socket: %s"
-msgstr "b³±d przy w³±czaniu nas³uchu na gnie¼dzie: %s"
-
-#: network.c:517
-#, c-format
-msgid "failed to create TFTP socket: %s"
-msgstr "nie powiod³o siê otwieranie gniazda dla us³ugi TFTP: %s"
-
-#: network.c:711
+#: network.c:746
 #, c-format
 msgid "failed to bind server socket for %s: %s"
 msgstr "b³±d przy przyznawaniu nazwy gniazdu serwera %s: %s"
 
-#: network.c:748
+#: network.c:783
 #, c-format
 msgid "ignoring nameserver %s - local interface"
 msgstr "ignorowanie serwera nazw %s - interfejs lokalny"
 
-#: network.c:759
+#: network.c:794
 #, c-format
 msgid "ignoring nameserver %s - cannot make/bind socket: %s"
 msgstr "ignorowanie serwera nazw %s - nie mo¿na utworzyæ/dowi±zaæ gniazda: %s"
 
-#: network.c:776
+#: network.c:811
 msgid "unqualified"
 msgstr "niekwalifikowane(-a)"
 
-#: network.c:776
+#: network.c:811
 msgid "names"
 msgstr "nazwy"
 
-#: network.c:778
+#: network.c:813
 msgid "default"
 msgstr "domy¶lne"
 
-#: network.c:780
+#: network.c:815
 msgid "domain"
 msgstr "domeny"
 
-#: network.c:783
+#: network.c:818
 #, c-format
 msgid "using local addresses only for %s %s"
 msgstr "u¿ywam adresów lokalnych tylko dla %s %s"
 
-#: network.c:785
+#: network.c:820
 #, c-format
 msgid "using standard nameservers for %s %s"
 msgstr "u¿ywam standardowych serwerów nazw dla %s %s"
 
-#: network.c:787
+#: network.c:822
 #, c-format
 msgid "using nameserver %s#%d for %s %s"
 msgstr "u¿ywam serwera nazw %s#%d dla %s %s"
 
-#: network.c:790
+#: network.c:825
 #, c-format
 msgid "using nameserver %s#%d(via %s)"
 msgstr "u¿ywam serwera nazw %s#%d (przez %s)"
 
-#: network.c:792
+#: network.c:827
 #, c-format
 msgid "using nameserver %s#%d"
 msgstr "u¿ywam serwera nazw %s#%d"
@@ -953,181 +933,181 @@ msgstr "nieznany interfejs %s"
 msgid "no interface with address %s"
 msgstr "brak interfejsu z adresem %s"
 
-#: dnsmasq.c:200 dnsmasq.c:671
+#: dnsmasq.c:199 dnsmasq.c:670
 #, c-format
 msgid "DBus error: %s"
 msgstr "b³±d DBus: %s"
 
-#: dnsmasq.c:203
+#: dnsmasq.c:202
 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:229
+#: dnsmasq.c:228
 #, c-format
 msgid "unknown user or group: %s"
 msgstr "nieznany u¿ytkownik lub grupa: %s"
 
-#: dnsmasq.c:284
+#: dnsmasq.c:283
 #, c-format
 msgid "cannot chdir to filesystem root: %s"
 msgstr "nie potrafiê wej¶æ do g³ównego katalogu: %s"
 
-#: dnsmasq.c:448
+#: dnsmasq.c:447
 #, c-format
 msgid "started, version %s DNS disabled"
 msgstr "uruchomiony, wersja %s, DNS wy³±czony"
 
-#: dnsmasq.c:450
+#: dnsmasq.c:449
 #, c-format
 msgid "started, version %s cachesize %d"
 msgstr "uruchomiony, wersja %s, %d miejsc w pamiêci podrêcznej"
 
-#: dnsmasq.c:452
+#: dnsmasq.c:451
 #, c-format
 msgid "started, version %s cache disabled"
 msgstr "uruchomiony, wersja %s, pamiêæ podrêczna wy³±czona"
 
-#: dnsmasq.c:454
+#: dnsmasq.c:453
 #, c-format
 msgid "compile time options: %s"
 msgstr "opcje kompilacji: %s"
 
-#: dnsmasq.c:460
+#: dnsmasq.c:459
 msgid "DBus support enabled: connected to system bus"
 msgstr "obs³uga DBus w³±czona, pod³±czono do serwera DBus"
 
-#: dnsmasq.c:462
+#: dnsmasq.c:461
 msgid "DBus support enabled: bus connection pending"
 msgstr "obs³uga DBus w³±czona, trwa pod³±czanie do serwera DBus"
 
-#: dnsmasq.c:467
+#: dnsmasq.c:466
 #, 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:471
+#: dnsmasq.c:470
 msgid "setting --bind-interfaces option because of OS limitations"
 msgstr "ustawiam --bind-interfaces z powodu ograniczeñ systemu operacyjnego"
 
-#: dnsmasq.c:476
+#: dnsmasq.c:475
 #, c-format
 msgid "warning: interface %s does not currently exist"
 msgstr "uwaga: interfejs %s nie jest w³±czony"
 
-#: dnsmasq.c:481
+#: dnsmasq.c:480
 msgid "warning: ignoring resolv-file flag because no-resolv is set"
 msgstr "uwaga: ignorujê opcjê resolv-file, poniewa¿ wybrano tryb no-resolv"
 
-#: dnsmasq.c:484
+#: dnsmasq.c:483
 msgid "warning: no upstream servers configured"
 msgstr "uwaga: nie wskazano nadrzêdnych serwerów DNS"
 
-#: dnsmasq.c:488
+#: dnsmasq.c:487
 #, 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:501
+#: dnsmasq.c:500
 #, c-format
 msgid "DHCP, static leases only on %.0s%s, lease time %s"
 msgstr "DHCP: tylko statyczne dzier¿awy na %.0s%s, czas dzier¿awy %s"
 
-#: dnsmasq.c:503
+#: dnsmasq.c:502
 #, c-format
 msgid "DHCP, proxy on subnet %.0s%s%.0s"
 msgstr "DHCP: po¶rednik na podsieci %.0s%s%.0s"
 
-#: dnsmasq.c:504
+#: dnsmasq.c:503
 #, c-format
 msgid "DHCP, IP range %s -- %s, lease time %s"
 msgstr "DHCP: zakres IP %s -- %s, czas dzier¿awy %s"
 
-#: dnsmasq.c:519
+#: dnsmasq.c:518
 msgid "root is "
 msgstr "z g³ównym katalogiem w "
 
-#: dnsmasq.c:519
+#: dnsmasq.c:518
 msgid "enabled"
 msgstr "w³±czony"
 
-#: dnsmasq.c:521
+#: dnsmasq.c:520
 msgid "secure mode"
 msgstr "w trybie bezpiecznym"
 
-#: dnsmasq.c:547
+#: dnsmasq.c:546
 #, c-format
 msgid "restricting maximum simultaneous TFTP transfers to %d"
 msgstr "ograniczam ilo¶æ jednoczesnych przes³añ TFTP do %d"
 
-#: dnsmasq.c:673
+#: dnsmasq.c:672
 msgid "connected to system DBus"
 msgstr "pod³±czono do DBus-a"
 
-#: dnsmasq.c:768
+#: dnsmasq.c:767
 #, c-format
 msgid "cannot fork into background: %s"
 msgstr "nie potrafiê prze³±czyæ siê do pracy w tle: %s"
 
-#: dnsmasq.c:771
+#: dnsmasq.c:770
 #, c-format
 msgid "failed to create helper: %s"
 msgstr "nie uda³o siê utworzyæ procesu pomocniczego: %s"
 
-#: dnsmasq.c:774
+#: dnsmasq.c:773
 #, c-format
 msgid "setting capabilities failed: %s"
 msgstr "nie powiod³o siê ustawianie ograniczeñ (capabilities): %s"
 
-#: dnsmasq.c:778
+#: dnsmasq.c:777
 #, 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:783
+#: dnsmasq.c:782
 #, c-format
 msgid "failed to change group-id to %s: %s"
 msgstr "nie uda³o siê zmieniæ grupy procesu na %s: %s"
 
-#: dnsmasq.c:786
+#: dnsmasq.c:785
 #, c-format
 msgid "failed to open pidfile %s: %s"
 msgstr "nie uda³o siê otworzyæ pliku z PID-em %s: %s"
 
-#: dnsmasq.c:789
+#: dnsmasq.c:788
 #, c-format
 msgid "cannot open %s: %s"
 msgstr "nie mo¿na otworzyæ %s: %s"
 
-#: dnsmasq.c:844
+#: dnsmasq.c:843
 #, c-format
 msgid "child process killed by signal %d"
 msgstr "proces potomny zabity sygna³em %d"
 
-#: dnsmasq.c:848
+#: dnsmasq.c:847
 #, c-format
 msgid "child process exited with status %d"
 msgstr "proces potomny zakoñczy³ siê z kodem powrotu %d"
 
-#: dnsmasq.c:852
+#: dnsmasq.c:851
 #, c-format
 msgid "failed to execute %s: %s"
 msgstr "nie uda³o siê uruchomiæ %s: %s"
 
-#: dnsmasq.c:896
+#: dnsmasq.c:895
 msgid "exiting on receipt of SIGTERM"
 msgstr "zakoñczy³em dzia³anie z powodu odebrania SIGTERM"
 
-#: dnsmasq.c:924
+#: dnsmasq.c:923
 #, c-format
 msgid "failed to access %s: %s"
 msgstr "brak dostêpu do %s: %s"
 
-#: dnsmasq.c:954
+#: dnsmasq.c:953
 #, c-format
 msgid "reading %s"
 msgstr "czytanie %s"
 
-#: dnsmasq.c:965
+#: dnsmasq.c:964
 #, c-format
 msgid "no servers found in %s, will retry"
 msgstr "w %s nie znalaz³em serwerów, spróbujê ponownie pó¼niej"
@@ -1248,19 +1228,19 @@ msgstr "%u dost
 msgid "disabled"
 msgstr "wy³±czony(a)"
 
-#: rfc2131.c:466 rfc2131.c:969 rfc2131.c:1335
+#: rfc2131.c:466 rfc2131.c:978 rfc2131.c:1350
 msgid "ignored"
 msgstr "ignorujê"
 
-#: rfc2131.c:481 rfc2131.c:1183
+#: rfc2131.c:481 rfc2131.c:1197
 msgid "address in use"
 msgstr "adres jest w u¿yciu"
 
-#: rfc2131.c:495 rfc2131.c:1023
+#: rfc2131.c:495 rfc2131.c:1032
 msgid "no address available"
 msgstr "brak dostêpnego adresu"
 
-#: rfc2131.c:502 rfc2131.c:1146
+#: rfc2131.c:502 rfc2131.c:1160
 msgid "wrong network"
 msgstr "nieprawid³owa sieæ"
 
@@ -1268,7 +1248,7 @@ msgstr "nieprawid
 msgid "no address configured"
 msgstr "brak skonfigurowanego adresu"
 
-#: rfc2131.c:522 rfc2131.c:1196
+#: rfc2131.c:522 rfc2131.c:1210
 msgid "no leases left"
 msgstr "brak wolnych dzier¿aw"
 
@@ -1291,118 +1271,118 @@ msgstr "%u klasa u
 msgid "PXE BIS not supported"
 msgstr "PXE BIS nie jest obs³ugiwane"
 
-#: rfc2131.c:939
+#: rfc2131.c:948
 #, c-format
 msgid "disabling DHCP static address %s for %s"
 msgstr "wy³±czam statyczne przypisanie adresu %s dla %s"
 
-#: rfc2131.c:960
+#: rfc2131.c:969
 msgid "unknown lease"
 msgstr "nieznana dzier¿awa"
 
-#: rfc2131.c:992
+#: rfc2131.c:1001
 #, c-format
 msgid "not using configured address %s because it is leased to %s"
 msgstr "nie proponujê zak³adanego w konfiguracji adresu %s, bo jest on ju¿ wydzier¿awiony komputerowi %s"
 
-#: rfc2131.c:1002
+#: rfc2131.c:1011
 #, c-format
 msgid "not using configured address %s because it is in use by the server or relay"
 msgstr "nie proponujê zak³adanego w konfiguracji adresu %s, bo u¿ywa go który¶ z serwerów"
 
-#: rfc2131.c:1005
+#: rfc2131.c:1014
 #, c-format
 msgid "not using configured address %s because it was previously declined"
 msgstr "nie proponujê zak³adanego w konfiguracji adresu %s, bo ju¿ poprzednio zosta³ odrzucony"
 
-#: rfc2131.c:1021 rfc2131.c:1189
+#: rfc2131.c:1030 rfc2131.c:1203
 msgid "no unique-id"
 msgstr "brak unikalnego id"
 
-#: rfc2131.c:1090
+#: rfc2131.c:1099
 msgid "wrong server-ID"
 msgstr "nieprawid³owy identyfikator serwera (server-ID)"
 
-#: rfc2131.c:1108
+#: rfc2131.c:1117
 msgid "wrong address"
 msgstr "b³êdny adres"
 
-#: rfc2131.c:1121
+#: rfc2131.c:1135
 msgid "lease not found"
 msgstr "dzier¿awa nieznaleziona"
 
-#: rfc2131.c:1154
+#: rfc2131.c:1168
 msgid "address not available"
 msgstr "adres niedostêpny"
 
-#: rfc2131.c:1165
+#: rfc2131.c:1179
 msgid "static lease available"
 msgstr "dostêpna statyczna dzier¿awa"
 
-#: rfc2131.c:1169
+#: rfc2131.c:1183
 msgid "address reserved"
 msgstr "adres zarezerwowany"
 
-#: rfc2131.c:1177
+#: rfc2131.c:1191
 #, c-format
 msgid "abandoning lease to %s of %s"
 msgstr "porzucam przypisanie do %s nazwy %s"
 
-#: rfc2131.c:1757
+#: rfc2131.c:1772
 #, c-format
 msgid "%u tags: %s"
 msgstr "%u cechy: %s"
 
-#: rfc2131.c:1770
+#: rfc2131.c:1785
 #, c-format
 msgid "%u bootfile name: %s"
 msgstr "%u nazwa pliku bootowania: %s"
 
-#: rfc2131.c:1779
+#: rfc2131.c:1794
 #, c-format
 msgid "%u server name: %s"
 msgstr "%u nazwa serwera: %s"
 
-#: rfc2131.c:1793
+#: rfc2131.c:1808
 #, c-format
 msgid "%u next server: %s"
 msgstr "%u nastêpny serwer: %s"
 
-#: rfc2131.c:1796
+#: rfc2131.c:1811
 #, c-format
 msgid "%u broadcast response"
 msgstr "%u odpowied¼ rozg³oszeniowa"
 
-#: rfc2131.c:1859
+#: rfc2131.c:1874
 #, c-format
 msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
 msgstr "nie mam mo¿liwo¶ci wys³ania opcji %d DHCP/BOOTP: niedostateczna ilo¶æ miejsca w pakiecie"
 
-#: rfc2131.c:2105
+#: rfc2131.c:2120
 msgid "PXE menu too large"
 msgstr "menu PXE zbyt du¿e"
 
-#: rfc2131.c:2218
+#: rfc2131.c:2233
 #, c-format
 msgid "Ignoring domain %s for DHCP host name %s"
 msgstr "Nie uwzglêdniam czê¶ci domenowej (%s) dla komputera %s"
 
-#: rfc2131.c:2236
+#: rfc2131.c:2251
 #, c-format
 msgid "%u requested options: %s"
 msgstr "%u za¿±dano: %s"
 
-#: rfc2131.c:2503
+#: rfc2131.c:2518
 #, c-format
 msgid "cannot send RFC3925 option: too many options for enterprise number %d"
 msgstr "nie mogê wys³aæ opcji RFC3925: za d³ugi Â³añcuch opcji przy numerze %d"
 
-#: netlink.c:66
+#: netlink.c:70
 #, c-format
 msgid "cannot create netlink socket: %s"
 msgstr "nie potrafiê utworzyæ po³±czenia netlink %s"
 
-#: netlink.c:265
+#: netlink.c:288
 #, c-format
 msgid "netlink returns error: %s"
 msgstr "wyst±pi³ b³±d w po³±czeniu netlink %s"
@@ -1419,45 +1399,45 @@ msgstr "ustawiam adresy serwer
 msgid "could not register a DBus message handler"
 msgstr "nie mo¿na zarejestrowaæ uchwytu DBus"
 
-#: bpf.c:150
+#: bpf.c:217
 #, c-format
 msgid "cannot create DHCP BPF socket: %s"
 msgstr "nie potrafiê utworzyæ gniazda DHCP BPF: %s"
 
-#: bpf.c:178
+#: bpf.c:245
 #, c-format
 msgid "DHCP request for unsupported hardware type (%d) received on %s"
 msgstr "¿±danie DHCP od urz±dzenia nieobs³ugiwanego typu (%d) odebrano na %s"
 
-#: tftp.c:233
+#: tftp.c:281
 msgid "unable to get free port for TFTP"
 msgstr "brak wolnego portu dla us³ugi TFTP"
 
-#: tftp.c:248
+#: tftp.c:296
 #, c-format
 msgid "unsupported request from %s"
 msgstr "nieobs³ugiwane Â¿Â±danie od komputera %s"
 
-#: tftp.c:336
-#, c-format
-msgid "sent %s to %s"
-msgstr "plik %s przes³ano do %s"
-
-#: tftp.c:359
+#: tftp.c:406
 #, c-format
 msgid "file %s not found"
 msgstr "plik %s nie zosta³ znaleziony"
 
-#: tftp.c:470
+#: tftp.c:522
 #, c-format
 msgid "error %d %s received from %s"
 msgstr "b³±d %d %s odebrano od %s"
 
-#: tftp.c:501
+#: tftp.c:554
 #, c-format
 msgid "failed sending %s to %s"
 msgstr "b³±d wysy³ania pliku %s do komputera %s"
 
+#: tftp.c:568
+#, c-format
+msgid "sent %s to %s"
+msgstr "plik %s przes³ano do %s"
+
 #: log.c:173
 #, c-format
 msgid "overflow: %d log entries lost"
@@ -1468,6 +1448,30 @@ msgstr "przepe
 msgid "log failed: %s"
 msgstr "nie uda³o siê zapisaæ komunikatów do %s"
 
-#: log.c:431
+#: log.c:436
 msgid "FAILED to start up"
 msgstr "B£¡D: nie uda³o siê uruchomiæ dnsmasq-a"
+
+#~ msgid "only one dhcp-hostsfile allowed"
+#~ msgstr "mo¿na wskazaæ tylko jeden plik dhcp-hostsfile"
+
+#~ msgid "only one dhcp-optsfile allowed"
+#~ msgstr "mo¿na wskazaæ tylko jeden plik dhcp-optsfile"
+
+#~ msgid "files nested too deep in %s"
+#~ msgstr "zbyt du¿e zag³êbienie plików w %s"
+
+#~ msgid "TXT record string too long"
+#~ msgstr "zbyt d³ugi rekord TXT"
+
+#~ msgid "failed to set IPV6 options on listening socket: %s"
+#~ msgstr "b³±d ustawiania opcji IPV6 na nas³uchuj±cym gnie¼dzie: %s"
+
+#~ msgid "failed to bind listening socket for %s: %s"
+#~ msgstr "b³±d przy przyznawaniu nazwy gniazdu %s: %s"
+
+#~ msgid "failed to listen on socket: %s"
+#~ msgstr "b³±d przy w³±czaniu nas³uchu na gnie¼dzie: %s"
+
+#~ msgid "failed to create TFTP socket: %s"
+#~ msgstr "nie powiod³o siê otwieranie gniazda dla us³ugi TFTP: %s"
index 798a9c77d7d27ef7c7e42074975187affcafd22f..c08d2d047a67baeb3e43dc0f37bcaba9c6dbff96 100644 (file)
@@ -15,61 +15,56 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
 
-#: cache.c:764
+#: cache.c:761
 #, c-format
 msgid "failed to load names from %s: %s"
 msgstr ""
 
-#: cache.c:798 dhcp.c:865
+#: cache.c:795 dhcp.c:865
 #, c-format
 msgid "bad address at %s line %d"
 msgstr ""
 
-#: cache.c:856 dhcp.c:881
+#: cache.c:853 dhcp.c:881
 #, c-format
 msgid "bad name at %s line %d"
 msgstr ""
 
-#: cache.c:863 dhcp.c:956
+#: cache.c:860 dhcp.c:956
 #, c-format
 msgid "read %s - %d addresses"
 msgstr ""
 
-#: cache.c:902
+#: cache.c:899
 msgid "cleared cache"
 msgstr ""
 
-#: cache.c:933 option.c:1112
-#, c-format
-msgid "cannot access directory %s: %s"
-msgstr ""
-
-#: cache.c:1053
+#: cache.c:960
 #, c-format
 msgid "%s is a CNAME, not giving it to the DHCP lease of %s"
 msgstr ""
 
-#: cache.c:1059
+#: cache.c:966
 #, 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:1132
+#: cache.c:1039
 #, c-format
 msgid "time %lu"
 msgstr ""
 
-#: cache.c:1133
+#: cache.c:1040
 #, c-format
 msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
 msgstr ""
 
-#: cache.c:1135
+#: cache.c:1042
 #, c-format
 msgid "queries forwarded %u, queries answered locally %u"
 msgstr ""
 
-#: cache.c:1158
+#: cache.c:1068
 #, c-format
 msgid "server %s#%d: queries sent %u, retried or failed %u"
 msgstr ""
@@ -83,7 +78,7 @@ msgstr ""
 msgid "failed to allocate memory"
 msgstr ""
 
-#: util.c:229 option.c:567
+#: util.c:229 option.c:573
 msgid "could not get memory"
 msgstr ""
 
@@ -102,821 +97,805 @@ msgstr ""
 msgid "infinite"
 msgstr ""
 
-#: option.c:240
+#: option.c:244
 msgid "Specify local address(es) to listen on."
 msgstr ""
 
-#: option.c:241
+#: option.c:245
 msgid "Return ipaddr for all hosts in specified domains."
 msgstr ""
 
-#: option.c:242
+#: option.c:246
 msgid "Fake reverse lookups for RFC1918 private address ranges."
 msgstr ""
 
-#: option.c:243
+#: option.c:247
 msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
 msgstr ""
 
-#: option.c:244
+#: option.c:248
 #, c-format
 msgid "Specify the size of the cache in entries (defaults to %s)."
 msgstr ""
 
-#: option.c:245
+#: option.c:249
 #, c-format
 msgid "Specify configuration file (defaults to %s)."
 msgstr ""
 
-#: option.c:246
+#: option.c:250
 msgid "Do NOT fork into the background: run in debug mode."
 msgstr ""
 
-#: option.c:247
+#: option.c:251
 msgid "Do NOT forward queries with no domain part."
 msgstr ""
 
-#: option.c:248
+#: option.c:252
 msgid "Return self-pointing MX records for local hosts."
 msgstr ""
 
-#: option.c:249
+#: option.c:253
 msgid "Expand simple names in /etc/hosts with domain-suffix."
 msgstr ""
 
-#: option.c:250
+#: option.c:254
 msgid "Don't forward spurious DNS requests from Windows hosts."
 msgstr ""
 
-#: option.c:251
+#: option.c:255
 msgid "Enable DHCP in the range given with lease duration."
 msgstr ""
 
-#: option.c:252
+#: option.c:256
 #, c-format
 msgid "Change to this group after startup (defaults to %s)."
 msgstr ""
 
-#: option.c:253
+#: option.c:257
 msgid "Set address or hostname for a specified machine."
 msgstr ""
 
-#: option.c:254
+#: option.c:258
 msgid "Read DHCP host specs from file."
 msgstr ""
 
-#: option.c:255
+#: option.c:259
 msgid "Read DHCP option specs from file."
 msgstr ""
 
-#: option.c:256
+#: option.c:260
 msgid "Evaluate conditional tag expression."
 msgstr ""
 
-#: option.c:257
+#: option.c:261
 #, c-format
 msgid "Do NOT load %s file."
 msgstr ""
 
-#: option.c:258
+#: option.c:262
 #, c-format
 msgid "Specify a hosts file to be read in addition to %s."
 msgstr ""
 
-#: option.c:259
+#: option.c:263
 msgid "Specify interface(s) to listen on."
 msgstr ""
 
-#: option.c:260
+#: option.c:264
 msgid "Specify interface(s) NOT to listen on."
 msgstr ""
 
-#: option.c:261
+#: option.c:265
 msgid "Map DHCP user class to tag."
 msgstr ""
 
-#: option.c:262
+#: option.c:266
 msgid "Map RFC3046 circuit-id to tag."
 msgstr ""
 
-#: option.c:263
+#: option.c:267
 msgid "Map RFC3046 remote-id to tag."
 msgstr ""
 
-#: option.c:264
+#: option.c:268
 msgid "Map RFC3993 subscriber-id to tag."
 msgstr ""
 
-#: option.c:265
+#: option.c:269
 msgid "Don't do DHCP for hosts with tag set."
 msgstr ""
 
-#: option.c:266
+#: option.c:270
 msgid "Force broadcast replies for hosts with tag set."
 msgstr ""
 
-#: option.c:267
+#: option.c:271
 msgid "Do NOT fork into the background, do NOT run in debug mode."
 msgstr ""
 
-#: option.c:268
+#: option.c:272
 msgid "Assume we are the only DHCP server on the local network."
 msgstr ""
 
-#: option.c:269
+#: option.c:273
 #, c-format
 msgid "Specify where to store DHCP leases (defaults to %s)."
 msgstr ""
 
-#: option.c:270
+#: option.c:274
 msgid "Return MX records for local hosts."
 msgstr ""
 
-#: option.c:271
+#: option.c:275
 msgid "Specify an MX record."
 msgstr ""
 
-#: option.c:272
+#: option.c:276
 msgid "Specify BOOTP options to DHCP server."
 msgstr ""
 
-#: option.c:273
+#: option.c:277
 #, c-format
 msgid "Do NOT poll %s file, reload only on SIGHUP."
 msgstr ""
 
-#: option.c:274
+#: option.c:278
 msgid "Do NOT cache failed search results."
 msgstr ""
 
-#: option.c:275
+#: option.c:279
 #, c-format
 msgid "Use nameservers strictly in the order given in %s."
 msgstr ""
 
-#: option.c:276
+#: option.c:280
 msgid "Specify options to be sent to DHCP clients."
 msgstr ""
 
-#: option.c:277
+#: option.c:281
 msgid "DHCP option sent even if the client does not request it."
 msgstr ""
 
-#: option.c:278
+#: option.c:282
 msgid "Specify port to listen for DNS requests on (defaults to 53)."
 msgstr ""
 
-#: option.c:279
+#: option.c:283
 #, c-format
 msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
 msgstr ""
 
-#: option.c:280
+#: option.c:284
 msgid "Log DNS queries."
 msgstr ""
 
-#: option.c:281
+#: option.c:285
 msgid "Force the originating port for upstream DNS queries."
 msgstr ""
 
-#: option.c:282
+#: option.c:286
 msgid "Do NOT read resolv.conf."
 msgstr ""
 
-#: option.c:283
+#: option.c:287
 #, c-format
 msgid "Specify path to resolv.conf (defaults to %s)."
 msgstr ""
 
-#: option.c:284
+#: option.c:288
 msgid "Specify address(es) of upstream servers with optional domains."
 msgstr ""
 
-#: option.c:285
+#: option.c:289
 msgid "Never forward queries to specified domains."
 msgstr ""
 
-#: option.c:286
+#: option.c:290
 msgid "Specify the domain to be assigned in DHCP leases."
 msgstr ""
 
-#: option.c:287
+#: option.c:291
 msgid "Specify default target in an MX record."
 msgstr ""
 
-#: option.c:288
+#: option.c:292
 msgid "Specify time-to-live in seconds for replies from /etc/hosts."
 msgstr ""
 
-#: option.c:289
+#: option.c:293
 msgid "Specify time-to-live in seconds for negative caching."
 msgstr ""
 
-#: option.c:290
+#: option.c:294
 msgid "Specify time-to-live in seconds for maximum TTL to send to clients."
 msgstr ""
 
-#: option.c:291
+#: option.c:295
 #, c-format
 msgid "Change to this user after startup. (defaults to %s)."
 msgstr ""
 
-#: option.c:292
+#: option.c:296
 msgid "Map DHCP vendor class to tag."
 msgstr ""
 
-#: option.c:293
+#: option.c:297
 msgid "Display dnsmasq version and copyright information."
 msgstr ""
 
-#: option.c:294
+#: option.c:298
 msgid "Translate IPv4 addresses from upstream servers."
 msgstr ""
 
-#: option.c:295
+#: option.c:299
 msgid "Specify a SRV record."
 msgstr ""
 
-#: option.c:296
+#: option.c:300
 msgid "Display this message. Use --help dhcp for known DHCP options."
 msgstr ""
 
-#: option.c:297
+#: option.c:301
 #, c-format
 msgid "Specify path of PID file (defaults to %s)."
 msgstr ""
 
-#: option.c:298
+#: option.c:302
 #, c-format
 msgid "Specify maximum number of DHCP leases (defaults to %s)."
 msgstr ""
 
-#: option.c:299
+#: option.c:303
 msgid "Answer DNS queries based on the interface a query was sent to."
 msgstr ""
 
-#: option.c:300
+#: option.c:304
 msgid "Specify TXT DNS record."
 msgstr ""
 
-#: option.c:301
+#: option.c:305
 msgid "Specify PTR DNS record."
 msgstr ""
 
-#: option.c:302
+#: option.c:306
 msgid "Give DNS name to IPv4 address of interface."
 msgstr ""
 
-#: option.c:303
+#: option.c:307
 msgid "Bind only to interfaces in use."
 msgstr ""
 
-#: option.c:304
+#: option.c:308
 #, c-format
 msgid "Read DHCP static host information from %s."
 msgstr ""
 
-#: option.c:305
+#: option.c:309
 msgid "Enable the DBus interface for setting upstream servers, etc."
 msgstr ""
 
-#: option.c:306
+#: option.c:310
 msgid "Do not provide DHCP on this interface, only provide DNS."
 msgstr ""
 
-#: option.c:307
+#: option.c:311
 msgid "Enable dynamic address allocation for bootp."
 msgstr ""
 
-#: option.c:308
+#: option.c:312
 msgid "Map MAC address (with wildcards) to option set."
 msgstr ""
 
-#: option.c:309
+#: option.c:313
 msgid "Treat DHCP requests on aliases as arriving from interface."
 msgstr ""
 
-#: option.c:310
+#: option.c:314
 msgid "Disable ICMP echo address checking in the DHCP server."
 msgstr ""
 
-#: option.c:311
+#: option.c:315
 msgid "Script to run on DHCP lease creation and destruction."
 msgstr ""
 
-#: option.c:312
+#: option.c:316
 msgid "Read configuration from all the files in this directory."
 msgstr ""
 
-#: option.c:313
+#: option.c:317
 msgid "Log to this syslog facility or file. (defaults to DAEMON)"
 msgstr ""
 
-#: option.c:314
+#: option.c:318
 msgid "Do not use leasefile."
 msgstr ""
 
-#: option.c:315
+#: option.c:319
 #, c-format
 msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
 msgstr ""
 
-#: option.c:316
+#: option.c:320
 #, c-format
 msgid "Clear DNS cache when reloading %s."
 msgstr ""
 
-#: option.c:317
+#: option.c:321
 msgid "Ignore hostnames provided by DHCP clients."
 msgstr ""
 
-#: option.c:318
+#: option.c:322
 msgid "Do NOT reuse filename and server fields for extra DHCP options."
 msgstr ""
 
-#: option.c:319
+#: option.c:323
 msgid "Enable integrated read-only TFTP server."
 msgstr ""
 
-#: option.c:320
+#: option.c:324
 msgid "Export files by TFTP only from the specified subtree."
 msgstr ""
 
-#: option.c:321
+#: option.c:325
 msgid "Add client IP address to tftp-root."
 msgstr ""
 
-#: option.c:322
+#: option.c:326
 msgid "Allow access only to files owned by the user running dnsmasq."
 msgstr ""
 
-#: option.c:323
+#: option.c:327
 #, c-format
 msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
 msgstr ""
 
-#: option.c:324
+#: option.c:328
 msgid "Disable the TFTP blocksize extension."
 msgstr ""
 
-#: option.c:325
+#: option.c:329
 msgid "Ephemeral port range for use by TFTP transfers."
 msgstr ""
 
-#: option.c:326
+#: option.c:330
 msgid "Extra logging for DHCP."
 msgstr ""
 
-#: option.c:327
+#: option.c:331
 msgid "Enable async. logging; optionally set queue length."
 msgstr ""
 
-#: option.c:328
+#: option.c:332
 msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
 msgstr ""
 
-#: option.c:329
+#: option.c:333
 msgid "Allow rebinding of 127.0.0.0/8, for RBL servers."
 msgstr ""
 
-#: option.c:330
+#: option.c:334
 msgid "Inhibit DNS-rebind protection on this domain."
 msgstr ""
 
-#: option.c:331
+#: option.c:335
 msgid "Always perform DNS queries to all servers."
 msgstr ""
 
-#: option.c:332
+#: option.c:336
 msgid "Set tag if client includes matching option in request."
 msgstr ""
 
-#: option.c:333
+#: option.c:337
 msgid "Use alternative ports for DHCP."
 msgstr ""
 
-#: option.c:334
+#: option.c:338
 msgid "Run lease-change script as this user."
 msgstr ""
 
-#: option.c:335
+#: option.c:339
 msgid "Specify NAPTR DNS record."
 msgstr ""
 
-#: option.c:336
+#: option.c:340
 msgid "Specify lowest port available for DNS query transmission."
 msgstr ""
 
-#: option.c:337
+#: option.c:341
 msgid "Use only fully qualified domain names for DHCP clients."
 msgstr ""
 
-#: option.c:338
+#: option.c:342
 msgid "Generate hostnames based on MAC address for nameless clients."
 msgstr ""
 
-#: option.c:339
+#: option.c:343
 msgid "Use these DHCP relays as full proxies."
 msgstr ""
 
-#: option.c:340
+#: option.c:344
 msgid "Specify alias name for LOCAL DNS name."
 msgstr ""
 
-#: option.c:341
+#: option.c:345
 msgid "Prompt to send to PXE clients."
 msgstr ""
 
-#: option.c:342
+#: option.c:346
 msgid "Boot service for PXE menu."
 msgstr ""
 
-#: option.c:343
+#: option.c:347
 msgid "Check configuration syntax."
 msgstr ""
 
-#: option.c:632
+#: option.c:348
+msgid "Add requestor's MAC address to forwarded DNS queries"
+msgstr ""
+
+#: option.c:349
+msgid "Proxy DNSSEC validation results from upstream nameservers"
+msgstr ""
+
+#: option.c:638
 #, c-format
 msgid ""
 "Usage: dnsmasq [options]\n"
 "\n"
 msgstr ""
 
-#: option.c:634
+#: option.c:640
 #, c-format
 msgid "Use short options only on the command line.\n"
 msgstr ""
 
-#: option.c:636
+#: option.c:642
 #, c-format
 msgid "Valid options are:\n"
 msgstr ""
 
-#: option.c:677
+#: option.c:683
 #, c-format
 msgid "Known DHCP options:\n"
 msgstr ""
 
-#: option.c:781
+#: option.c:798
 msgid "bad dhcp-option"
 msgstr ""
 
-#: option.c:838
+#: option.c:860
 msgid "bad IP address"
 msgstr ""
 
-#: option.c:941
+#: option.c:966
 msgid "bad domain in dhcp-option"
 msgstr ""
 
-#: option.c:1007
+#: option.c:1032
 msgid "dhcp-option too long"
 msgstr ""
 
-#: option.c:1016
+#: option.c:1041
 msgid "illegal dhcp-match"
 msgstr ""
 
-#: option.c:1052
+#: option.c:1085
 msgid "illegal repeated flag"
 msgstr ""
 
-#: option.c:1060
+#: option.c:1093
 msgid "illegal repeated keyword"
 msgstr ""
 
-#: option.c:1143 tftp.c:413
+#: option.c:1145 option.c:3024
 #, c-format
-msgid "cannot access %s: %s"
-msgstr ""
-
-#: option.c:1188
-msgid "only one dhcp-hostsfile allowed"
+msgid "cannot access directory %s: %s"
 msgstr ""
 
-#: option.c:1195
-msgid "only one dhcp-optsfile allowed"
+#: option.c:1176 tftp.c:460
+#, c-format
+msgid "cannot access %s: %s"
 msgstr ""
 
-#: option.c:1240
+#: option.c:1259
 msgid "bad MX preference"
 msgstr ""
 
-#: option.c:1245
+#: option.c:1264
 msgid "bad MX name"
 msgstr ""
 
-#: option.c:1259
+#: option.c:1278
 msgid "bad MX target"
 msgstr ""
 
-#: option.c:1269
+#: option.c:1288
 msgid "cannot run scripts under uClinux"
 msgstr ""
 
-#: option.c:1271
+#: option.c:1290
 msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts"
 msgstr ""
 
-#: option.c:1516 option.c:1520
+#: option.c:1591 option.c:1595
 msgid "bad port"
 msgstr ""
 
-#: option.c:1539 option.c:1564
+#: option.c:1614 option.c:1639
 msgid "interface binding not supported"
 msgstr ""
 
-#: option.c:1710
+#: option.c:1785
 msgid "bad port range"
 msgstr ""
 
-#: option.c:1727
+#: option.c:1802
 msgid "bad bridge-interface"
 msgstr ""
 
-#: option.c:1769
+#: option.c:1844
 msgid "bad dhcp-range"
 msgstr ""
 
-#: option.c:1797
+#: option.c:1872
 msgid "only one tag allowed"
 msgstr ""
 
-#: option.c:1844
+#: option.c:1919
 msgid "inconsistent DHCP range"
 msgstr ""
 
-#: option.c:2019
+#: option.c:2013 option.c:2039
+msgid "bad hex constant"
+msgstr ""
+
+#: option.c:2101
 msgid "bad DHCP host name"
 msgstr ""
 
-#: option.c:2100
+#: option.c:2182
 msgid "bad tag-if"
 msgstr ""
 
-#: option.c:2374 option.c:2673
+#: option.c:2461 option.c:2746
 msgid "invalid port number"
 msgstr ""
 
-#: option.c:2436
+#: option.c:2523
 msgid "bad dhcp-proxy address"
 msgstr ""
 
-#: option.c:2476
+#: option.c:2563
 msgid "invalid alias range"
 msgstr ""
 
-#: option.c:2489
+#: option.c:2576
 msgid "bad interface name"
 msgstr ""
 
-#: option.c:2514
+#: option.c:2601
 msgid "bad CNAME"
 msgstr ""
 
-#: option.c:2519
+#: option.c:2606
 msgid "duplicate CNAME"
 msgstr ""
 
-#: option.c:2539
+#: option.c:2626
 msgid "bad PTR record"
 msgstr ""
 
-#: option.c:2570
+#: option.c:2657
 msgid "bad NAPTR record"
 msgstr ""
 
-#: option.c:2595
-msgid "TXT record string too long"
-msgstr ""
-
-#: option.c:2643
+#: option.c:2689
 msgid "bad TXT record"
 msgstr ""
 
-#: option.c:2659
+#: option.c:2732
 msgid "bad SRV record"
 msgstr ""
 
-#: option.c:2666
+#: option.c:2739
 msgid "bad SRV target"
 msgstr ""
 
-#: option.c:2680
+#: option.c:2753
 msgid "invalid priority"
 msgstr ""
 
-#: option.c:2687
+#: option.c:2760
 msgid "invalid weight"
 msgstr ""
 
-#: option.c:2706
+#: option.c:2779
 msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DBus support)"
 msgstr ""
 
-#: option.c:2748
-#, c-format
-msgid "files nested too deep in %s"
-msgstr ""
-
-#: option.c:2756 tftp.c:567
-#, c-format
-msgid "cannot read %s: %s"
-msgstr ""
-
-#: option.c:2813
+#: option.c:2843
 msgid "missing \""
 msgstr ""
 
-#: option.c:2872
+#: option.c:2902
 msgid "bad option"
 msgstr ""
 
-#: option.c:2874
+#: option.c:2904
 msgid "extraneous parameter"
 msgstr ""
 
-#: option.c:2876
+#: option.c:2906
 msgid "missing parameter"
 msgstr ""
 
-#: option.c:2880
+#: option.c:2910
 msgid "error"
 msgstr ""
 
-#: option.c:2885
+#: option.c:2915
 #, c-format
 msgid "%s at line %d of %%s"
 msgstr ""
 
-#: option.c:2942 option.c:2973
+#: option.c:2979 tftp.c:624
+#, c-format
+msgid "cannot read %s: %s"
+msgstr ""
+
+#: option.c:3145 option.c:3181
 #, c-format
 msgid "read %s"
 msgstr ""
 
-#: option.c:3045
+#: option.c:3229
+msgid "junk found in command line"
+msgstr ""
+
+#: option.c:3258
 #, c-format
 msgid "Dnsmasq version %s  %s\n"
 msgstr ""
 
-#: option.c:3046
+#: option.c:3259
 #, c-format
 msgid ""
 "Compile time options %s\n"
 "\n"
 msgstr ""
 
-#: option.c:3047
+#: option.c:3260
 #, c-format
 msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
 msgstr ""
 
-#: option.c:3048
+#: option.c:3261
 #, c-format
 msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
 msgstr ""
 
-#: option.c:3049
+#: option.c:3262
 #, c-format
 msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
 msgstr ""
 
-#: option.c:3060
+#: option.c:3273
 msgid "try --help"
 msgstr ""
 
-#: option.c:3062
+#: option.c:3275
 msgid "try -w"
 msgstr ""
 
-#: option.c:3065
+#: option.c:3278
 #, c-format
 msgid "bad command line options: %s"
 msgstr ""
 
-#: option.c:3106
+#: option.c:3319
 #, c-format
 msgid "cannot get host-name: %s"
 msgstr ""
 
-#: option.c:3134
+#: option.c:3347
 msgid "only one resolv.conf file allowed in no-poll mode."
 msgstr ""
 
-#: option.c:3144
+#: option.c:3357
 msgid "must have exactly one resolv.conf to read domain from."
 msgstr ""
 
-#: option.c:3147 network.c:813 dhcp.c:814
+#: option.c:3360 network.c:848 dhcp.c:814
 #, c-format
 msgid "failed to read %s: %s"
 msgstr ""
 
-#: option.c:3164
+#: option.c:3377
 #, c-format
 msgid "no search directive found in %s"
 msgstr ""
 
-#: option.c:3185
+#: option.c:3398
 msgid "there must be a default domain when --dhcp-fqdn is set"
 msgstr ""
 
-#: option.c:3189
+#: option.c:3402
 msgid "syntax check OK"
 msgstr ""
 
-#: forward.c:427
+#: forward.c:461
 #, c-format
 msgid "nameserver %s refused to do a recursive query"
 msgstr ""
 
-#: forward.c:455
+#: forward.c:489
 #, c-format
 msgid "possible DNS-rebind attack detected: %s"
 msgstr ""
 
-#: network.c:110
+#: network.c:171
 #, c-format
 msgid "unknown interface %s in bridge-interface"
 msgstr ""
 
-#: network.c:467 dnsmasq.c:188
-#, c-format
-msgid "failed to create listening socket: %s"
-msgstr ""
-
-#: network.c:474
-#, c-format
-msgid "failed to set IPV6 options on listening socket: %s"
-msgstr ""
-
-#: network.c:500
-#, c-format
-msgid "failed to bind listening socket for %s: %s"
-msgstr ""
-
-#: network.c:505
-#, c-format
-msgid "failed to listen on socket: %s"
-msgstr ""
-
-#: network.c:517
+#: network.c:380
 #, c-format
-msgid "failed to create TFTP socket: %s"
+msgid "failed to create listening socket for %s: %s"
 msgstr ""
 
-#: network.c:711
+#: network.c:746
 #, c-format
 msgid "failed to bind server socket for %s: %s"
 msgstr ""
 
-#: network.c:748
+#: network.c:783
 #, c-format
 msgid "ignoring nameserver %s - local interface"
 msgstr ""
 
-#: network.c:759
+#: network.c:794
 #, c-format
 msgid "ignoring nameserver %s - cannot make/bind socket: %s"
 msgstr ""
 
-#: network.c:776
+#: network.c:811
 msgid "unqualified"
 msgstr ""
 
-#: network.c:776
+#: network.c:811
 msgid "names"
 msgstr ""
 
-#: network.c:778
+#: network.c:813
 msgid "default"
 msgstr ""
 
-#: network.c:780
+#: network.c:815
 msgid "domain"
 msgstr ""
 
-#: network.c:783
+#: network.c:818
 #, c-format
 msgid "using local addresses only for %s %s"
 msgstr ""
 
-#: network.c:785
+#: network.c:820
 #, c-format
 msgid "using standard nameservers for %s %s"
 msgstr ""
 
-#: network.c:787
+#: network.c:822
 #, c-format
 msgid "using nameserver %s#%d for %s %s"
 msgstr ""
 
-#: network.c:790
+#: network.c:825
 #, c-format
 msgid "using nameserver %s#%d(via %s)"
 msgstr ""
 
-#: network.c:792
+#: network.c:827
 #, c-format
 msgid "using nameserver %s#%d"
 msgstr ""
@@ -944,181 +923,181 @@ msgstr ""
 msgid "no interface with address %s"
 msgstr ""
 
-#: dnsmasq.c:200 dnsmasq.c:671
+#: dnsmasq.c:199 dnsmasq.c:670
 #, c-format
 msgid "DBus error: %s"
 msgstr ""
 
-#: dnsmasq.c:203
+#: dnsmasq.c:202
 msgid "DBus not available: set HAVE_DBUS in src/config.h"
 msgstr ""
 
-#: dnsmasq.c:229
+#: dnsmasq.c:228
 #, c-format
 msgid "unknown user or group: %s"
 msgstr ""
 
-#: dnsmasq.c:284
+#: dnsmasq.c:283
 #, c-format
 msgid "cannot chdir to filesystem root: %s"
 msgstr ""
 
-#: dnsmasq.c:448
+#: dnsmasq.c:447
 #, c-format
 msgid "started, version %s DNS disabled"
 msgstr ""
 
-#: dnsmasq.c:450
+#: dnsmasq.c:449
 #, c-format
 msgid "started, version %s cachesize %d"
 msgstr ""
 
-#: dnsmasq.c:452
+#: dnsmasq.c:451
 #, c-format
 msgid "started, version %s cache disabled"
 msgstr ""
 
-#: dnsmasq.c:454
+#: dnsmasq.c:453
 #, c-format
 msgid "compile time options: %s"
 msgstr ""
 
-#: dnsmasq.c:460
+#: dnsmasq.c:459
 msgid "DBus support enabled: connected to system bus"
 msgstr ""
 
-#: dnsmasq.c:462
+#: dnsmasq.c:461
 msgid "DBus support enabled: bus connection pending"
 msgstr ""
 
-#: dnsmasq.c:467
+#: dnsmasq.c:466
 #, c-format
 msgid "warning: failed to change owner of %s: %s"
 msgstr ""
 
-#: dnsmasq.c:471
+#: dnsmasq.c:470
 msgid "setting --bind-interfaces option because of OS limitations"
 msgstr ""
 
-#: dnsmasq.c:476
+#: dnsmasq.c:475
 #, c-format
 msgid "warning: interface %s does not currently exist"
 msgstr ""
 
-#: dnsmasq.c:481
+#: dnsmasq.c:480
 msgid "warning: ignoring resolv-file flag because no-resolv is set"
 msgstr ""
 
-#: dnsmasq.c:484
+#: dnsmasq.c:483
 msgid "warning: no upstream servers configured"
 msgstr ""
 
-#: dnsmasq.c:488
+#: dnsmasq.c:487
 #, c-format
 msgid "asynchronous logging enabled, queue limit is %d messages"
 msgstr ""
 
-#: dnsmasq.c:501
+#: dnsmasq.c:500
 #, c-format
 msgid "DHCP, static leases only on %.0s%s, lease time %s"
 msgstr ""
 
-#: dnsmasq.c:503
+#: dnsmasq.c:502
 #, c-format
 msgid "DHCP, proxy on subnet %.0s%s%.0s"
 msgstr ""
 
-#: dnsmasq.c:504
+#: dnsmasq.c:503
 #, c-format
 msgid "DHCP, IP range %s -- %s, lease time %s"
 msgstr ""
 
-#: dnsmasq.c:519
+#: dnsmasq.c:518
 msgid "root is "
 msgstr ""
 
-#: dnsmasq.c:519
+#: dnsmasq.c:518
 msgid "enabled"
 msgstr ""
 
-#: dnsmasq.c:521
+#: dnsmasq.c:520
 msgid "secure mode"
 msgstr ""
 
-#: dnsmasq.c:547
+#: dnsmasq.c:546
 #, c-format
 msgid "restricting maximum simultaneous TFTP transfers to %d"
 msgstr ""
 
-#: dnsmasq.c:673
+#: dnsmasq.c:672
 msgid "connected to system DBus"
 msgstr ""
 
-#: dnsmasq.c:768
+#: dnsmasq.c:767
 #, c-format
 msgid "cannot fork into background: %s"
 msgstr ""
 
-#: dnsmasq.c:771
+#: dnsmasq.c:770
 #, c-format
 msgid "failed to create helper: %s"
 msgstr ""
 
-#: dnsmasq.c:774
+#: dnsmasq.c:773
 #, c-format
 msgid "setting capabilities failed: %s"
 msgstr ""
 
-#: dnsmasq.c:778
+#: dnsmasq.c:777
 #, c-format
 msgid "failed to change user-id to %s: %s"
 msgstr ""
 
-#: dnsmasq.c:783
+#: dnsmasq.c:782
 #, c-format
 msgid "failed to change group-id to %s: %s"
 msgstr ""
 
-#: dnsmasq.c:786
+#: dnsmasq.c:785
 #, c-format
 msgid "failed to open pidfile %s: %s"
 msgstr ""
 
-#: dnsmasq.c:789
+#: dnsmasq.c:788
 #, c-format
 msgid "cannot open %s: %s"
 msgstr ""
 
-#: dnsmasq.c:844
+#: dnsmasq.c:843
 #, c-format
 msgid "child process killed by signal %d"
 msgstr ""
 
-#: dnsmasq.c:848
+#: dnsmasq.c:847
 #, c-format
 msgid "child process exited with status %d"
 msgstr ""
 
-#: dnsmasq.c:852
+#: dnsmasq.c:851
 #, c-format
 msgid "failed to execute %s: %s"
 msgstr ""
 
-#: dnsmasq.c:896
+#: dnsmasq.c:895
 msgid "exiting on receipt of SIGTERM"
 msgstr ""
 
-#: dnsmasq.c:924
+#: dnsmasq.c:923
 #, c-format
 msgid "failed to access %s: %s"
 msgstr ""
 
-#: dnsmasq.c:954
+#: dnsmasq.c:953
 #, c-format
 msgid "reading %s"
 msgstr ""
 
-#: dnsmasq.c:965
+#: dnsmasq.c:964
 #, c-format
 msgid "no servers found in %s, will retry"
 msgstr ""
@@ -1239,19 +1218,19 @@ msgstr ""
 msgid "disabled"
 msgstr ""
 
-#: rfc2131.c:466 rfc2131.c:969 rfc2131.c:1335
+#: rfc2131.c:466 rfc2131.c:978 rfc2131.c:1350
 msgid "ignored"
 msgstr ""
 
-#: rfc2131.c:481 rfc2131.c:1183
+#: rfc2131.c:481 rfc2131.c:1197
 msgid "address in use"
 msgstr ""
 
-#: rfc2131.c:495 rfc2131.c:1023
+#: rfc2131.c:495 rfc2131.c:1032
 msgid "no address available"
 msgstr ""
 
-#: rfc2131.c:502 rfc2131.c:1146
+#: rfc2131.c:502 rfc2131.c:1160
 msgid "wrong network"
 msgstr ""
 
@@ -1259,7 +1238,7 @@ msgstr ""
 msgid "no address configured"
 msgstr ""
 
-#: rfc2131.c:522 rfc2131.c:1196
+#: rfc2131.c:522 rfc2131.c:1210
 msgid "no leases left"
 msgstr ""
 
@@ -1282,118 +1261,118 @@ msgstr ""
 msgid "PXE BIS not supported"
 msgstr ""
 
-#: rfc2131.c:939
+#: rfc2131.c:948
 #, c-format
 msgid "disabling DHCP static address %s for %s"
 msgstr ""
 
-#: rfc2131.c:960
+#: rfc2131.c:969
 msgid "unknown lease"
 msgstr ""
 
-#: rfc2131.c:992
+#: rfc2131.c:1001
 #, c-format
 msgid "not using configured address %s because it is leased to %s"
 msgstr ""
 
-#: rfc2131.c:1002
+#: rfc2131.c:1011
 #, c-format
 msgid "not using configured address %s because it is in use by the server or relay"
 msgstr ""
 
-#: rfc2131.c:1005
+#: rfc2131.c:1014
 #, c-format
 msgid "not using configured address %s because it was previously declined"
 msgstr ""
 
-#: rfc2131.c:1021 rfc2131.c:1189
+#: rfc2131.c:1030 rfc2131.c:1203
 msgid "no unique-id"
 msgstr ""
 
-#: rfc2131.c:1090
+#: rfc2131.c:1099
 msgid "wrong server-ID"
 msgstr ""
 
-#: rfc2131.c:1108
+#: rfc2131.c:1117
 msgid "wrong address"
 msgstr ""
 
-#: rfc2131.c:1121
+#: rfc2131.c:1135
 msgid "lease not found"
 msgstr ""
 
-#: rfc2131.c:1154
+#: rfc2131.c:1168
 msgid "address not available"
 msgstr ""
 
-#: rfc2131.c:1165
+#: rfc2131.c:1179
 msgid "static lease available"
 msgstr ""
 
-#: rfc2131.c:1169
+#: rfc2131.c:1183
 msgid "address reserved"
 msgstr ""
 
-#: rfc2131.c:1177
+#: rfc2131.c:1191
 #, c-format
 msgid "abandoning lease to %s of %s"
 msgstr ""
 
-#: rfc2131.c:1757
+#: rfc2131.c:1772
 #, c-format
 msgid "%u tags: %s"
 msgstr ""
 
-#: rfc2131.c:1770
+#: rfc2131.c:1785
 #, c-format
 msgid "%u bootfile name: %s"
 msgstr ""
 
-#: rfc2131.c:1779
+#: rfc2131.c:1794
 #, c-format
 msgid "%u server name: %s"
 msgstr ""
 
-#: rfc2131.c:1793
+#: rfc2131.c:1808
 #, c-format
 msgid "%u next server: %s"
 msgstr ""
 
-#: rfc2131.c:1796
+#: rfc2131.c:1811
 #, c-format
 msgid "%u broadcast response"
 msgstr ""
 
-#: rfc2131.c:1859
+#: rfc2131.c:1874
 #, c-format
 msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
 msgstr ""
 
-#: rfc2131.c:2105
+#: rfc2131.c:2120
 msgid "PXE menu too large"
 msgstr ""
 
-#: rfc2131.c:2218
+#: rfc2131.c:2233
 #, c-format
 msgid "Ignoring domain %s for DHCP host name %s"
 msgstr ""
 
-#: rfc2131.c:2236
+#: rfc2131.c:2251
 #, c-format
 msgid "%u requested options: %s"
 msgstr ""
 
-#: rfc2131.c:2503
+#: rfc2131.c:2518
 #, c-format
 msgid "cannot send RFC3925 option: too many options for enterprise number %d"
 msgstr ""
 
-#: netlink.c:66
+#: netlink.c:70
 #, c-format
 msgid "cannot create netlink socket: %s"
 msgstr ""
 
-#: netlink.c:265
+#: netlink.c:288
 #, c-format
 msgid "netlink returns error: %s"
 msgstr ""
@@ -1410,45 +1389,45 @@ msgstr ""
 msgid "could not register a DBus message handler"
 msgstr ""
 
-#: bpf.c:150
+#: bpf.c:217
 #, c-format
 msgid "cannot create DHCP BPF socket: %s"
 msgstr ""
 
-#: bpf.c:178
+#: bpf.c:245
 #, c-format
 msgid "DHCP request for unsupported hardware type (%d) received on %s"
 msgstr ""
 
-#: tftp.c:233
+#: tftp.c:281
 msgid "unable to get free port for TFTP"
 msgstr ""
 
-#: tftp.c:248
+#: tftp.c:296
 #, c-format
 msgid "unsupported request from %s"
 msgstr ""
 
-#: tftp.c:336
-#, c-format
-msgid "sent %s to %s"
-msgstr ""
-
-#: tftp.c:359
+#: tftp.c:406
 #, c-format
 msgid "file %s not found"
 msgstr ""
 
-#: tftp.c:470
+#: tftp.c:522
 #, c-format
 msgid "error %d %s received from %s"
 msgstr ""
 
-#: tftp.c:501
+#: tftp.c:554
 #, c-format
 msgid "failed sending %s to %s"
 msgstr ""
 
+#: tftp.c:568
+#, c-format
+msgid "sent %s to %s"
+msgstr ""
+
 #: log.c:173
 #, c-format
 msgid "overflow: %d log entries lost"
@@ -1459,6 +1438,6 @@ msgstr ""
 msgid "log failed: %s"
 msgstr ""
 
-#: log.c:431
+#: log.c:436
 msgid "FAILED to start up"
 msgstr ""
index a1a62f08477be29e6e8c5d3a539b9d48b3f1b8a1..2ced989547f109b4eced22646bc808a119b4903d 100644 (file)
--- a/po/ro.po
+++ b/po/ro.po
@@ -15,61 +15,56 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 
 # for compatibility purposes the letters Ã¢, Äƒ, ÅŸ, Å£ and Ã® can be written as their look-alike correspondent.
-#: cache.c:764
+#: cache.c:761
 #, fuzzy, c-format
 msgid "failed to load names from %s: %s"
 msgstr "încărcarea numelor din %s: %s a eÅŸuat"
 
-#: cache.c:798 dhcp.c:865
+#: cache.c:795 dhcp.c:865
 #, c-format
 msgid "bad address at %s line %d"
 msgstr "adresă greÅŸită Ã®n %s, linia %d"
 
-#: cache.c:856 dhcp.c:881
+#: cache.c:853 dhcp.c:881
 #, c-format
 msgid "bad name at %s line %d"
 msgstr "nume greÅŸit Ã®n %s linia %d"
 
-#: cache.c:863 dhcp.c:956
+#: cache.c:860 dhcp.c:956
 #, c-format
 msgid "read %s - %d addresses"
 msgstr "citesc %s - %d adrese"
 
-#: cache.c:902
+#: cache.c:899
 msgid "cleared cache"
 msgstr "memoria temporară a fost ÅŸtearsă"
 
-#: cache.c:933 option.c:1112
-#, fuzzy, c-format
-msgid "cannot access directory %s: %s"
-msgstr "nu pot citi %s: %s"
-
-#: cache.c:1053
+#: cache.c:960
 #, c-format
 msgid "%s is a CNAME, not giving it to the DHCP lease of %s"
 msgstr ""
 
-#: cache.c:1059
+#: cache.c:966
 #, 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:1132
+#: cache.c:1039
 #, c-format
 msgid "time %lu"
 msgstr ""
 
-#: cache.c:1133
+#: cache.c:1040
 #, 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:1135
+#: cache.c:1042
 #, c-format
 msgid "queries forwarded %u, queries answered locally %u"
 msgstr ""
 
-#: cache.c:1158
+#: cache.c:1068
 #, c-format
 msgid "server %s#%d: queries sent %u, retried or failed %u"
 msgstr ""
@@ -84,7 +79,7 @@ msgstr "ascultarea pe socket a eÅŸuat: %s"
 msgid "failed to allocate memory"
 msgstr "nu pot Ã®ncărca %d bytes"
 
-#: util.c:229 option.c:567
+#: util.c:229 option.c:573
 msgid "could not get memory"
 msgstr "nu am putut aloca memorie"
 
@@ -103,455 +98,464 @@ msgstr "nu pot Ã®ncărca %d bytes"
 msgid "infinite"
 msgstr "infinit"
 
-#: option.c:240
+#: option.c:244
 msgid "Specify local address(es) to listen on."
 msgstr "SpecificaÅ£i adresele locale deservite."
 
-#: option.c:241
+#: option.c:245
 msgid "Return ipaddr for all hosts in specified domains."
 msgstr "AfiÅŸează adresele IP ale maÅŸinilor Ã®n domeniul dat."
 
-#: option.c:242
+#: option.c:246
 msgid "Fake reverse lookups for RFC1918 private address ranges."
 msgstr "Simulează căutări după adresă pentru domenii de adresă private (RFC1918)."
 
-#: option.c:243
+#: option.c:247
 msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
 msgstr "Interpretează adresa IP ca NXDOMAIN (împotriva manipulărilor Verisign)"
 
-#: option.c:244
+#: option.c:248
 #, 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:245
+#: option.c:249
 #, c-format
 msgid "Specify configuration file (defaults to %s)."
 msgstr "Specifică fiÅŸier de configurare (implicit e %s)."
 
-#: option.c:246
+#: option.c:250
 msgid "Do NOT fork into the background: run in debug mode."
 msgstr "NU porneÅŸte Ã®n fundal: rulează Ã®n modul depanare."
 
-#: option.c:247
+#: option.c:251
 msgid "Do NOT forward queries with no domain part."
 msgstr "NU Ã®nainta cererile ce nu conÅ£in domeniu DNS."
 
-#: option.c:248
+#: option.c:252
 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:249
+#: option.c:253
 msgid "Expand simple names in /etc/hosts with domain-suffix."
 msgstr "Adaugă numelor simple din /etc/hosts numele domeniului ca sufix."
 
-#: option.c:250
+#: option.c:254
 msgid "Don't forward spurious DNS requests from Windows hosts."
 msgstr "Nu inainta cereri DNS defecte provenite de la maÅŸini Windows."
 
-#: option.c:251
+#: option.c:255
 msgid "Enable DHCP in the range given with lease duration."
 msgstr "Activează DHCP Ã®n domeniul dat cu durată limitată de Ã®mprumut."
 
-#: option.c:252
+#: option.c:256
 #, c-format
 msgid "Change to this group after startup (defaults to %s)."
 msgstr "Rulează sub acest grup după pornire (implicit e %s)."
 
-#: option.c:253
+#: option.c:257
 msgid "Set address or hostname for a specified machine."
 msgstr "Schimbă adresa sau numele maÅŸinii specificate."
 
-#: option.c:254
+#: option.c:258
 #, fuzzy
 msgid "Read DHCP host specs from file."
 msgstr "nume MX invalid"
 
-#: option.c:255
+#: option.c:259
 msgid "Read DHCP option specs from file."
 msgstr ""
 
-#: option.c:256
+#: option.c:260
 msgid "Evaluate conditional tag expression."
 msgstr ""
 
-#: option.c:257
+#: option.c:261
 #, c-format
 msgid "Do NOT load %s file."
 msgstr "Nu Ã®ncarcă fiÅŸierul %s."
 
-#: option.c:258
+#: option.c:262
 #, 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:259
+#: option.c:263
 msgid "Specify interface(s) to listen on."
 msgstr "Specifică interfeÅ£ele deservite."
 
-#: option.c:260
+#: option.c:264
 msgid "Specify interface(s) NOT to listen on."
 msgstr "Specifică interfeÅ£ele NE-deservite."
 
-#: option.c:261
+#: option.c:265
 #, fuzzy
 msgid "Map DHCP user class to tag."
 msgstr "Leagă clasa de utilizator DHCP cu grup de opÅ£iuni."
 
-#: option.c:262
+#: option.c:266
 msgid "Map RFC3046 circuit-id to tag."
 msgstr ""
 
-#: option.c:263
+#: option.c:267
 msgid "Map RFC3046 remote-id to tag."
 msgstr ""
 
-#: option.c:264
+#: option.c:268
 msgid "Map RFC3993 subscriber-id to tag."
 msgstr ""
 
-#: option.c:265
+#: option.c:269
 #, fuzzy
 msgid "Don't do DHCP for hosts with tag set."
 msgstr "Nu furniza DHCP maÅŸinilor din grupul de opÅ£iuni."
 
-#: option.c:266
+#: option.c:270
 #, fuzzy
 msgid "Force broadcast replies for hosts with tag set."
 msgstr "Nu furniza DHCP maÅŸinilor din grupul de opÅ£iuni."
 
-#: option.c:267
+#: option.c:271
 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:268
+#: option.c:272
 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:269
+#: option.c:273
 #, 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:270
+#: option.c:274
 msgid "Return MX records for local hosts."
 msgstr "Răspunde cu Ã®ntregistrări MX pentru maÅŸini locale."
 
-#: option.c:271
+#: option.c:275
 msgid "Specify an MX record."
 msgstr "Specifică o Ã®nregistrare MX."
 
-#: option.c:272
+#: option.c:276
 msgid "Specify BOOTP options to DHCP server."
 msgstr "Specifică opÅ£iuni BOOTP serverului DHCP."
 
-#: option.c:273
+#: option.c:277
 #, 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:274
+#: option.c:278
 msgid "Do NOT cache failed search results."
 msgstr "NU memora rezultatele de căutare DNS eÅŸuatată."
 
-#: option.c:275
+#: option.c:279
 #, 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:276
+#: option.c:280
 #, fuzzy
 msgid "Specify options to be sent to DHCP clients."
 msgstr "Configurează opÅ£iuni Ã®n plusce trebuie trimise clienÅ£ilor DHCP."
 
-#: option.c:277
+#: option.c:281
 msgid "DHCP option sent even if the client does not request it."
 msgstr ""
 
-#: option.c:278
+#: option.c:282
 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:279
+#: option.c:283
 #, 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:280
+#: option.c:284
 #, fuzzy
 msgid "Log DNS queries."
 msgstr "ÃŽnregistrează tranzacÅ£iile."
 
-#: option.c:281
+#: option.c:285
 #, fuzzy
 msgid "Force the originating port for upstream DNS queries."
 msgstr "ForÅ£ează acest port pentru datele ce pleacă."
 
-#: option.c:282
+#: option.c:286
 msgid "Do NOT read resolv.conf."
 msgstr "NU citi fiÅŸierul resolv.conf"
 
-#: option.c:283
+#: option.c:287
 #, c-format
 msgid "Specify path to resolv.conf (defaults to %s)."
 msgstr "Specifică calea către resolv.conf (implicit e %s)."
 
-#: option.c:284
+#: option.c:288
 msgid "Specify address(es) of upstream servers with optional domains."
 msgstr "Specifică adresele server(elor) superioare cu domenii opÅ£ionale."
 
-#: option.c:285
+#: option.c:289
 msgid "Never forward queries to specified domains."
 msgstr "Nu Ã®naintează cererile spre domeniile specificate."
 
-#: option.c:286
+#: option.c:290
 msgid "Specify the domain to be assigned in DHCP leases."
 msgstr "Specifică domeniul de transmis prin DHCP."
 
-#: option.c:287
+#: option.c:291
 msgid "Specify default target in an MX record."
 msgstr "Specifică o Å£intă Ã®ntr-o Ã®nregistrare MX."
 
-#: option.c:288
+#: option.c:292
 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:289
+#: option.c:293
 #, fuzzy
 msgid "Specify time-to-live in seconds for negative caching."
 msgstr "Specifică TTL Ã®n secunde pentru răspunsurile din /etc/hosts."
 
-#: option.c:290
+#: option.c:294
 #, 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:291
+#: option.c:295
 #, c-format
 msgid "Change to this user after startup. (defaults to %s)."
 msgstr "Rulează sub acest utilizator după pornire. (implicit e %s)."
 
-#: option.c:292
+#: option.c:296
 #, 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:293
+#: option.c:297
 msgid "Display dnsmasq version and copyright information."
 msgstr "AfiÅŸează versiunea dnsmasq ÅŸi drepturile de autor."
 
-#: option.c:294
+#: option.c:298
 msgid "Translate IPv4 addresses from upstream servers."
 msgstr "Traduce adresele IPv4 de la serverele DNS superioare."
 
-#: option.c:295
+#: option.c:299
 msgid "Specify a SRV record."
 msgstr "Specifică o Ã®nregistrare SRV."
 
-#: option.c:296
+#: option.c:300
 msgid "Display this message. Use --help dhcp for known DHCP options."
 msgstr ""
 
-#: option.c:297
+#: option.c:301
 #, fuzzy, c-format
 msgid "Specify path of PID file (defaults to %s)."
 msgstr "Specifică o cale pentru fiÅŸierul PID. (implicit %s)."
 
-#: option.c:298
+#: option.c:302
 #, c-format
 msgid "Specify maximum number of DHCP leases (defaults to %s)."
 msgstr "Specifică numărul maxim de Ã®mprumuturi DHCP (implicit %s)."
 
-#: option.c:299
+#: option.c:303
 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:300
+#: option.c:304
 msgid "Specify TXT DNS record."
 msgstr "Specifică o Ã®nregistrare TXT."
 
-#: option.c:301
+#: option.c:305
 #, fuzzy
 msgid "Specify PTR DNS record."
 msgstr "Specifică o Ã®nregistrare TXT."
 
-#: option.c:302
+#: option.c:306
 msgid "Give DNS name to IPv4 address of interface."
 msgstr ""
 
-#: option.c:303
+#: option.c:307
 msgid "Bind only to interfaces in use."
 msgstr "Ascultă doar pe interfeÅ£ele active."
 
-#: option.c:304
+#: option.c:308
 #, c-format
 msgid "Read DHCP static host information from %s."
 msgstr "CiteÅŸte informaÅ£ii DHCP statice despre maÅŸină din %s."
 
-#: option.c:305
+#: option.c:309
 msgid "Enable the DBus interface for setting upstream servers, etc."
 msgstr "Activeaza interfaÅ£a DBus pentru configurarea serverelor superioare."
 
-#: option.c:306
+#: option.c:310
 msgid "Do not provide DHCP on this interface, only provide DNS."
 msgstr "Nu activează DHCP ci doar DNS pe această interfaţă."
 
-#: option.c:307
+#: option.c:311
 msgid "Enable dynamic address allocation for bootp."
 msgstr "Activează alocarea dinamică a adreselor pentru BOOTP."
 
-#: option.c:308
+#: option.c:312
 #, 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:309
+#: option.c:313
 msgid "Treat DHCP requests on aliases as arriving from interface."
 msgstr ""
 
-#: option.c:310
+#: option.c:314
 msgid "Disable ICMP echo address checking in the DHCP server."
 msgstr ""
 
-#: option.c:311
+#: option.c:315
 msgid "Script to run on DHCP lease creation and destruction."
 msgstr ""
 
-#: option.c:312
+#: option.c:316
 msgid "Read configuration from all the files in this directory."
 msgstr ""
 
-#: option.c:313
+#: option.c:317
 #, fuzzy
 msgid "Log to this syslog facility or file. (defaults to DAEMON)"
 msgstr "Rulează sub acest utilizator după pornire. (implicit e %s)."
 
-#: option.c:314
+#: option.c:318
 msgid "Do not use leasefile."
 msgstr ""
 
-#: option.c:315
+#: option.c:319
 #, 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:316
+#: option.c:320
 #, c-format
 msgid "Clear DNS cache when reloading %s."
 msgstr ""
 
-#: option.c:317
+#: option.c:321
 msgid "Ignore hostnames provided by DHCP clients."
 msgstr ""
 
-#: option.c:318
+#: option.c:322
 msgid "Do NOT reuse filename and server fields for extra DHCP options."
 msgstr ""
 
-#: option.c:319
+#: option.c:323
 msgid "Enable integrated read-only TFTP server."
 msgstr ""
 
-#: option.c:320
+#: option.c:324
 msgid "Export files by TFTP only from the specified subtree."
 msgstr ""
 
-#: option.c:321
+#: option.c:325
 msgid "Add client IP address to tftp-root."
 msgstr ""
 
-#: option.c:322
+#: option.c:326
 msgid "Allow access only to files owned by the user running dnsmasq."
 msgstr ""
 
-#: option.c:323
+#: option.c:327
 #, 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:324
+#: option.c:328
 msgid "Disable the TFTP blocksize extension."
 msgstr ""
 
-#: option.c:325
+#: option.c:329
 msgid "Ephemeral port range for use by TFTP transfers."
 msgstr ""
 
-#: option.c:326
+#: option.c:330
 msgid "Extra logging for DHCP."
 msgstr ""
 
-#: option.c:327
+#: option.c:331
 msgid "Enable async. logging; optionally set queue length."
 msgstr ""
 
-#: option.c:328
+#: option.c:332
 msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
 msgstr ""
 
-#: option.c:329
+#: option.c:333
 msgid "Allow rebinding of 127.0.0.0/8, for RBL servers."
 msgstr ""
 
-#: option.c:330
+#: option.c:334
 msgid "Inhibit DNS-rebind protection on this domain."
 msgstr ""
 
-#: option.c:331
+#: option.c:335
 msgid "Always perform DNS queries to all servers."
 msgstr ""
 
-#: option.c:332
+#: option.c:336
 msgid "Set tag if client includes matching option in request."
 msgstr ""
 
-#: option.c:333
+#: option.c:337
 msgid "Use alternative ports for DHCP."
 msgstr ""
 
-#: option.c:334
+#: option.c:338
 msgid "Run lease-change script as this user."
 msgstr ""
 
-#: option.c:335
+#: option.c:339
 #, fuzzy
 msgid "Specify NAPTR DNS record."
 msgstr "Specifică o Ã®nregistrare TXT."
 
-#: option.c:336
+#: option.c:340
 msgid "Specify lowest port available for DNS query transmission."
 msgstr ""
 
-#: option.c:337
+#: option.c:341
 msgid "Use only fully qualified domain names for DHCP clients."
 msgstr ""
 
-#: option.c:338
+#: option.c:342
 msgid "Generate hostnames based on MAC address for nameless clients."
 msgstr ""
 
-#: option.c:339
+#: option.c:343
 msgid "Use these DHCP relays as full proxies."
 msgstr ""
 
-#: option.c:340
+#: option.c:344
 msgid "Specify alias name for LOCAL DNS name."
 msgstr ""
 
-#: option.c:341
+#: option.c:345
 #, fuzzy
 msgid "Prompt to send to PXE clients."
 msgstr "Configurează opÅ£iuni Ã®n plusce trebuie trimise clienÅ£ilor DHCP."
 
-#: option.c:342
+#: option.c:346
 msgid "Boot service for PXE menu."
 msgstr ""
 
-#: option.c:343
+#: option.c:347
 msgid "Check configuration syntax."
 msgstr ""
 
-#: option.c:632
+#: option.c:348
+msgid "Add requestor's MAC address to forwarded DNS queries"
+msgstr ""
+
+#: option.c:349
+#, fuzzy
+msgid "Proxy DNSSEC validation results from upstream nameservers"
+msgstr "Traduce adresele IPv4 de la serverele DNS superioare."
+
+#: option.c:638
 #, c-format
 msgid ""
 "Usage: dnsmasq [options]\n"
@@ -560,233 +564,230 @@ msgstr ""
 "Utilizare: dnsmasq [opÅ£iuni]\n"
 "\n"
 
-#: option.c:634
+#: option.c:640
 #, 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:636
+#: option.c:642
 #, fuzzy, c-format
 msgid "Valid options are:\n"
 msgstr "OpÅ£iunile valide sunt:\n"
 
-#: option.c:677
+#: option.c:683
 #, c-format
 msgid "Known DHCP options:\n"
 msgstr ""
 
-#: option.c:781
+#: option.c:798
 msgid "bad dhcp-option"
 msgstr "dhcp-option invalid"
 
-#: option.c:838
+#: option.c:860
 #, fuzzy
 msgid "bad IP address"
 msgstr "citesc %s - %d adrese"
 
-#: option.c:941
+#: option.c:966
 msgid "bad domain in dhcp-option"
 msgstr "domeniu DNS invalid Ã®n declaraÅ£ia dhcp-option"
 
-#: option.c:1007
+#: option.c:1032
 msgid "dhcp-option too long"
 msgstr "declararea dhcp-option este prea lungă"
 
-#: option.c:1016
+#: option.c:1041
 msgid "illegal dhcp-match"
 msgstr ""
 
-#: option.c:1052
+#: option.c:1085
 msgid "illegal repeated flag"
 msgstr ""
 
-#: option.c:1060
+#: option.c:1093
 msgid "illegal repeated keyword"
 msgstr ""
 
-#: option.c:1143 tftp.c:413
+#: option.c:1145 option.c:3024
 #, fuzzy, c-format
-msgid "cannot access %s: %s"
+msgid "cannot access directory %s: %s"
 msgstr "nu pot citi %s: %s"
 
-#: option.c:1188
-msgid "only one dhcp-hostsfile allowed"
-msgstr ""
-
-#: option.c:1195
-msgid "only one dhcp-optsfile allowed"
-msgstr ""
+#: option.c:1176 tftp.c:460
+#, fuzzy, c-format
+msgid "cannot access %s: %s"
+msgstr "nu pot citi %s: %s"
 
-#: option.c:1240
+#: option.c:1259
 msgid "bad MX preference"
 msgstr "preferinţă MX invalidă"
 
-#: option.c:1245
+#: option.c:1264
 msgid "bad MX name"
 msgstr "nume MX invalid"
 
-#: option.c:1259
+#: option.c:1278
 msgid "bad MX target"
 msgstr "Å£intă MX invalidă"
 
-#: option.c:1269
+#: option.c:1288
 msgid "cannot run scripts under uClinux"
 msgstr ""
 
-#: option.c:1271
+#: option.c:1290
 msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts"
 msgstr ""
 
-#: option.c:1516 option.c:1520
+#: option.c:1591 option.c:1595
 msgid "bad port"
 msgstr "port invalid"
 
-#: option.c:1539 option.c:1564
+#: option.c:1614 option.c:1639
 msgid "interface binding not supported"
 msgstr ""
 
-#: option.c:1710
+#: option.c:1785
 #, fuzzy
 msgid "bad port range"
 msgstr "port invalid"
 
-#: option.c:1727
+#: option.c:1802
 msgid "bad bridge-interface"
 msgstr ""
 
-#: option.c:1769
+#: option.c:1844
 msgid "bad dhcp-range"
 msgstr "dhcp-range invalid"
 
-#: option.c:1797
+#: option.c:1872
 msgid "only one tag allowed"
 msgstr ""
 
-#: option.c:1844
+#: option.c:1919
 msgid "inconsistent DHCP range"
 msgstr "domeniu DHCP inconsistent"
 
-#: option.c:2019
+#: option.c:2013 option.c:2039
+#, fuzzy
+msgid "bad hex constant"
+msgstr "dhcp-host invalid"
+
+#: option.c:2101
 #, fuzzy
 msgid "bad DHCP host name"
 msgstr "nume MX invalid"
 
-#: option.c:2100
+#: option.c:2182
 #, fuzzy
 msgid "bad tag-if"
 msgstr "Å£intă MX invalidă"
 
-#: option.c:2374 option.c:2673
+#: option.c:2461 option.c:2746
 msgid "invalid port number"
 msgstr "număr de port invalid"
 
-#: option.c:2436
+#: option.c:2523
 #, fuzzy
 msgid "bad dhcp-proxy address"
 msgstr "citesc %s - %d adrese"
 
-#: option.c:2476
+#: option.c:2563
 #, fuzzy
 msgid "invalid alias range"
 msgstr "pondere invalidă"
 
-#: option.c:2489
+#: option.c:2576
 #, fuzzy
 msgid "bad interface name"
 msgstr "nume MX invalid"
 
-#: option.c:2514
+#: option.c:2601
 msgid "bad CNAME"
 msgstr ""
 
-#: option.c:2519
+#: option.c:2606
 msgid "duplicate CNAME"
 msgstr ""
 
-#: option.c:2539
+#: option.c:2626
 #, fuzzy
 msgid "bad PTR record"
 msgstr "înregistrare SRV invalidă"
 
-#: option.c:2570
+#: option.c:2657
 #, fuzzy
 msgid "bad NAPTR record"
 msgstr "înregistrare SRV invalidă"
 
-#: option.c:2595
-msgid "TXT record string too long"
-msgstr "ÅŸirul de caractere pentru Ã®nregistrarea TXT este prea lung"
-
-#: option.c:2643
+#: option.c:2689
 msgid "bad TXT record"
 msgstr "înregistrare TXT invalidă"
 
-#: option.c:2659
+#: option.c:2732
 msgid "bad SRV record"
 msgstr "înregistrare SRV invalidă"
 
-#: option.c:2666
+#: option.c:2739
 msgid "bad SRV target"
 msgstr "Å£intă SRV invalidă"
 
-#: option.c:2680
+#: option.c:2753
 msgid "invalid priority"
 msgstr "prioritate invalidă"
 
-#: option.c:2687
+#: option.c:2760
 msgid "invalid weight"
 msgstr "pondere invalidă"
 
-#: option.c:2706
+#: option.c:2779
 msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DBus support)"
 msgstr ""
 
-#: option.c:2748
-#, c-format
-msgid "files nested too deep in %s"
-msgstr ""
-
-#: option.c:2756 tftp.c:567
-#, c-format
-msgid "cannot read %s: %s"
-msgstr "nu pot citi %s: %s"
-
-#: option.c:2813
+#: option.c:2843
 msgid "missing \""
 msgstr "lipseÅŸte \""
 
-#: option.c:2872
+#: option.c:2902
 msgid "bad option"
 msgstr "opÅ£iune invalidă"
 
-#: option.c:2874
+#: option.c:2904
 msgid "extraneous parameter"
 msgstr "parametru nerecunoscut"
 
-#: option.c:2876
+#: option.c:2906
 msgid "missing parameter"
 msgstr "parametru lipsa"
 
-#: option.c:2880
+#: option.c:2910
 msgid "error"
 msgstr "eroare"
 
-#: option.c:2885
+#: option.c:2915
 #, c-format
 msgid "%s at line %d of %%s"
 msgstr "%s la linia %d din %%s"
 
-#: option.c:2942 option.c:2973
+#: option.c:2979 tftp.c:624
+#, c-format
+msgid "cannot read %s: %s"
+msgstr "nu pot citi %s: %s"
+
+#: option.c:3145 option.c:3181
 #, fuzzy, c-format
 msgid "read %s"
 msgstr "citesc %s"
 
-#: option.c:3045
+#: option.c:3229
+msgid "junk found in command line"
+msgstr ""
+
+#: option.c:3258
 #, c-format
 msgid "Dnsmasq version %s  %s\n"
 msgstr "dnsmasq versiunea %s  %s\n"
 
-#: option.c:3046
+#: option.c:3259
 #, c-format
 msgid ""
 "Compile time options %s\n"
@@ -795,157 +796,137 @@ msgstr ""
 "OpÅ£iuni cu care a fost compilat %s\n"
 "\n"
 
-#: option.c:3047
+#: option.c:3260
 #, c-format
 msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
 msgstr "Acest program vine FÄ‚RÄ‚ NICI O GARANÅ¢IE.\n"
 
-#: option.c:3048
+#: option.c:3261
 #, 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:3049
+#: option.c:3262
 #, 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:3060
+#: option.c:3273
 msgid "try --help"
 msgstr ""
 
-#: option.c:3062
+#: option.c:3275
 msgid "try -w"
 msgstr ""
 
-#: option.c:3065
+#: option.c:3278
 #, fuzzy, c-format
 msgid "bad command line options: %s"
 msgstr "opÅ£iuni Ã®n linie de comandă invalide: %s."
 
-#: option.c:3106
+#: option.c:3319
 #, c-format
 msgid "cannot get host-name: %s"
 msgstr "nu pot citi numele maÅŸinii: %s"
 
-#: option.c:3134
+#: option.c:3347
 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:3144
+#: option.c:3357
 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:3147 network.c:813 dhcp.c:814
+#: option.c:3360 network.c:848 dhcp.c:814
 #, fuzzy, c-format
 msgid "failed to read %s: %s"
 msgstr "nu pot citi %s: %s"
 
-#: option.c:3164
+#: option.c:3377
 #, 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:3185
+#: option.c:3398
 msgid "there must be a default domain when --dhcp-fqdn is set"
 msgstr ""
 
-#: option.c:3189
+#: option.c:3402
 msgid "syntax check OK"
 msgstr ""
 
-#: forward.c:427
+#: forward.c:461
 #, c-format
 msgid "nameserver %s refused to do a recursive query"
 msgstr "serverul DNS %s refuză interogările recursive"
 
-#: forward.c:455
+#: forward.c:489
 #, c-format
 msgid "possible DNS-rebind attack detected: %s"
 msgstr ""
 
-#: network.c:110
+#: network.c:171
 #, fuzzy, c-format
 msgid "unknown interface %s in bridge-interface"
 msgstr "interfaţă necunoscută %s"
 
-#: network.c:467 dnsmasq.c:188
-#, c-format
-msgid "failed to create listening socket: %s"
-msgstr "creearea socket-ului de ascultare a eÅŸuat: %s"
-
-#: network.c:474
-#, c-format
-msgid "failed to set IPV6 options on listening socket: %s"
-msgstr "configurarea opÅ£iunilor IPv6 a eÅŸuat pe socket-ul de ascultare: %s"
-
-#: network.c:500
-#, c-format
-msgid "failed to bind listening socket for %s: %s"
-msgstr "activarea socket-ului de ascultare pentru %s a eÅŸuat: %s"
-
-#: network.c:505
-#, c-format
-msgid "failed to listen on socket: %s"
-msgstr "ascultarea pe socket a eÅŸuat: %s"
-
-#: network.c:517
+#: network.c:380
 #, fuzzy, c-format
-msgid "failed to create TFTP socket: %s"
+msgid "failed to create listening socket for %s: %s"
 msgstr "creearea socket-ului de ascultare a eÅŸuat: %s"
 
-#: network.c:711
+#: network.c:746
 #, fuzzy, c-format
 msgid "failed to bind server socket for %s: %s"
 msgstr "activarea socket-ului de ascultare pentru %s a eÅŸuat: %s"
 
-#: network.c:748
+#: network.c:783
 #, c-format
 msgid "ignoring nameserver %s - local interface"
 msgstr "ignorăm serverul DNS %s - interfaţă locală"
 
-#: network.c:759
+#: network.c:794
 #, fuzzy, c-format
 msgid "ignoring nameserver %s - cannot make/bind socket: %s"
 msgstr "ignorăm serverul DNS %s - nu pot creea/activa socket-ul: %s"
 
-#: network.c:776
+#: network.c:811
 msgid "unqualified"
 msgstr "invalid"
 
-#: network.c:776
+#: network.c:811
 msgid "names"
 msgstr ""
 
-#: network.c:778
+#: network.c:813
 msgid "default"
 msgstr ""
 
-#: network.c:780
+#: network.c:815
 msgid "domain"
 msgstr "domeniu"
 
-#: network.c:783
+#: network.c:818
 #, c-format
 msgid "using local addresses only for %s %s"
 msgstr "folosim adresele locale doar pentru %S %s"
 
-#: network.c:785
+#: network.c:820
 #, fuzzy, c-format
 msgid "using standard nameservers for %s %s"
 msgstr "folosim serverul DNS %s#%d pentru %s %s"
 
-#: network.c:787
+#: network.c:822
 #, c-format
 msgid "using nameserver %s#%d for %s %s"
 msgstr "folosim serverul DNS %s#%d pentru %s %s"
 
-#: network.c:790
+#: network.c:825
 #, fuzzy, c-format
 msgid "using nameserver %s#%d(via %s)"
 msgstr "folosim serverul DNS %s#%d"
 
-#: network.c:792
+#: network.c:827
 #, c-format
 msgid "using nameserver %s#%d"
 msgstr "folosim serverul DNS %s#%d"
@@ -974,186 +955,186 @@ msgstr "interfaţă necunoscută %s"
 msgid "no interface with address %s"
 msgstr "nu exista interfaţă pentru adresa %s"
 
-#: dnsmasq.c:200 dnsmasq.c:671
+#: dnsmasq.c:199 dnsmasq.c:670
 #, c-format
 msgid "DBus error: %s"
 msgstr "eroare DBus: %s"
 
-#: dnsmasq.c:203
+#: dnsmasq.c:202
 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:229
+#: dnsmasq.c:228
 #, c-format
 msgid "unknown user or group: %s"
 msgstr ""
 
-#: dnsmasq.c:284
+#: dnsmasq.c:283
 #, c-format
 msgid "cannot chdir to filesystem root: %s"
 msgstr ""
 
-#: dnsmasq.c:448
+#: dnsmasq.c:447
 #, fuzzy, c-format
 msgid "started, version %s DNS disabled"
 msgstr "am pornit, versiunea %s memorie temporară dezactivată"
 
-#: dnsmasq.c:450
+#: dnsmasq.c:449
 #, c-format
 msgid "started, version %s cachesize %d"
 msgstr "am ponit, versiunea %s memorie temporară %d"
 
-#: dnsmasq.c:452
+#: dnsmasq.c:451
 #, c-format
 msgid "started, version %s cache disabled"
 msgstr "am pornit, versiunea %s memorie temporară dezactivată"
 
-#: dnsmasq.c:454
+#: dnsmasq.c:453
 #, c-format
 msgid "compile time options: %s"
 msgstr "compilat cu opÅ£iunile: %s"
 
-#: dnsmasq.c:460
+#: dnsmasq.c:459
 msgid "DBus support enabled: connected to system bus"
 msgstr "suportul DBus activ: sunt conectat la magistrala sistem"
 
-#: dnsmasq.c:462
+#: dnsmasq.c:461
 msgid "DBus support enabled: bus connection pending"
 msgstr "suportul DBus activ: aÅŸtept conexiunea la magistrală"
 
 # for compatibility purposes the letters Ã¢, Äƒ, ÅŸ, Å£ and Ã® can be written as their look-alike correspondent.
-#: dnsmasq.c:467
+#: dnsmasq.c:466
 #, fuzzy, c-format
 msgid "warning: failed to change owner of %s: %s"
 msgstr "încărcarea numelor din %s: %s a eÅŸuat"
 
-#: dnsmasq.c:471
+#: dnsmasq.c:470
 msgid "setting --bind-interfaces option because of OS limitations"
 msgstr "specific opÅ£iunea --bind-interfaces din cauza limitărilor SO"
 
-#: dnsmasq.c:476
+#: dnsmasq.c:475
 #, c-format
 msgid "warning: interface %s does not currently exist"
 msgstr "atenÅ£ie: interfaÅ£a %s nu există momentan"
 
-#: dnsmasq.c:481
+#: dnsmasq.c:480
 msgid "warning: ignoring resolv-file flag because no-resolv is set"
 msgstr ""
 
-#: dnsmasq.c:484
+#: dnsmasq.c:483
 #, fuzzy
 msgid "warning: no upstream servers configured"
 msgstr "configurăm serverele superioare prin Dbus"
 
-#: dnsmasq.c:488
+#: dnsmasq.c:487
 #, c-format
 msgid "asynchronous logging enabled, queue limit is %d messages"
 msgstr ""
 
-#: dnsmasq.c:501
+#: dnsmasq.c:500
 #, c-format
 msgid "DHCP, static leases only on %.0s%s, lease time %s"
 msgstr "DHCP, Ã®mprumuturi statice doar către  %.0s%s, timpul reînoirii %s"
 
-#: dnsmasq.c:503
+#: dnsmasq.c:502
 #, c-format
 msgid "DHCP, proxy on subnet %.0s%s%.0s"
 msgstr ""
 
-#: dnsmasq.c:504
+#: dnsmasq.c:503
 #, c-format
 msgid "DHCP, IP range %s -- %s, lease time %s"
 msgstr "DHCP, domeniu IP %s -- %s, timpul reînoirii %s"
 
-#: dnsmasq.c:519
+#: dnsmasq.c:518
 msgid "root is "
 msgstr ""
 
-#: dnsmasq.c:519
+#: dnsmasq.c:518
 #, fuzzy
 msgid "enabled"
 msgstr "dezactivat"
 
-#: dnsmasq.c:521
+#: dnsmasq.c:520
 msgid "secure mode"
 msgstr ""
 
-#: dnsmasq.c:547
+#: dnsmasq.c:546
 #, c-format
 msgid "restricting maximum simultaneous TFTP transfers to %d"
 msgstr ""
 
-#: dnsmasq.c:673
+#: dnsmasq.c:672
 msgid "connected to system DBus"
 msgstr "magistrala sistem Dbus conectată"
 
-#: dnsmasq.c:768
+#: dnsmasq.c:767
 #, c-format
 msgid "cannot fork into background: %s"
 msgstr ""
 
-#: dnsmasq.c:771
+#: dnsmasq.c:770
 #, fuzzy, c-format
 msgid "failed to create helper: %s"
 msgstr "nu pot citi %s: %s"
 
-#: dnsmasq.c:774
+#: dnsmasq.c:773
 #, c-format
 msgid "setting capabilities failed: %s"
 msgstr ""
 
 # for compatibility purposes the letters Ã¢, Äƒ, ÅŸ, Å£ and Ã® can be written as their look-alike correspondent.
-#: dnsmasq.c:778
+#: dnsmasq.c:777
 #, 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:783
+#: dnsmasq.c:782
 #, fuzzy, c-format
 msgid "failed to change group-id to %s: %s"
 msgstr "încărcarea numelor din %s: %s a eÅŸuat"
 
-#: dnsmasq.c:786
+#: dnsmasq.c:785
 #, fuzzy, c-format
 msgid "failed to open pidfile %s: %s"
 msgstr "nu pot citi %s: %s"
 
-#: dnsmasq.c:789
+#: dnsmasq.c:788
 #, fuzzy, c-format
 msgid "cannot open %s: %s"
 msgstr "nu pot deschide %s:%s"
 
-#: dnsmasq.c:844
+#: dnsmasq.c:843
 #, c-format
 msgid "child process killed by signal %d"
 msgstr ""
 
-#: dnsmasq.c:848
+#: dnsmasq.c:847
 #, c-format
 msgid "child process exited with status %d"
 msgstr ""
 
-#: dnsmasq.c:852
+#: dnsmasq.c:851
 #, fuzzy, c-format
 msgid "failed to execute %s: %s"
 msgstr "accesarea serverului %s a eÅŸuat: %s"
 
-#: dnsmasq.c:896
+#: dnsmasq.c:895
 msgid "exiting on receipt of SIGTERM"
 msgstr "am primit SIGTERM, am terminat"
 
-#: dnsmasq.c:924
+#: dnsmasq.c:923
 #, fuzzy, c-format
 msgid "failed to access %s: %s"
 msgstr "accesarea serverului %s a eÅŸuat: %s"
 
-#: dnsmasq.c:954
+#: dnsmasq.c:953
 #, c-format
 msgid "reading %s"
 msgstr "citesc %s"
 
-#: dnsmasq.c:965
+#: dnsmasq.c:964
 #, 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"
@@ -1274,19 +1255,19 @@ msgstr ""
 msgid "disabled"
 msgstr "dezactivat"
 
-#: rfc2131.c:466 rfc2131.c:969 rfc2131.c:1335
+#: rfc2131.c:466 rfc2131.c:978 rfc2131.c:1350
 msgid "ignored"
 msgstr "ignorat"
 
-#: rfc2131.c:481 rfc2131.c:1183
+#: rfc2131.c:481 rfc2131.c:1197
 msgid "address in use"
 msgstr "adresa este folosită"
 
-#: rfc2131.c:495 rfc2131.c:1023
+#: rfc2131.c:495 rfc2131.c:1032
 msgid "no address available"
 msgstr "nici o adresă disponibilă"
 
-#: rfc2131.c:502 rfc2131.c:1146
+#: rfc2131.c:502 rfc2131.c:1160
 msgid "wrong network"
 msgstr "reÅ£ea greÅŸită"
 
@@ -1294,7 +1275,7 @@ msgstr "reÅ£ea greÅŸită"
 msgid "no address configured"
 msgstr "adresă lipsă"
 
-#: rfc2131.c:522 rfc2131.c:1196
+#: rfc2131.c:522 rfc2131.c:1210
 msgid "no leases left"
 msgstr "nu mai am de unde să Ã®mprumut"
 
@@ -1317,118 +1298,118 @@ msgstr "eroare DBus: %s"
 msgid "PXE BIS not supported"
 msgstr ""
 
-#: rfc2131.c:939
+#: rfc2131.c:948
 #, fuzzy, c-format
 msgid "disabling DHCP static address %s for %s"
 msgstr "dezactivăm adresele DHCP statice %s"
 
-#: rfc2131.c:960
+#: rfc2131.c:969
 msgid "unknown lease"
 msgstr "împrumut necunoscut"
 
-#: rfc2131.c:992
+#: rfc2131.c:1001
 #, c-format
 msgid "not using configured address %s because it is leased to %s"
 msgstr ""
 
-#: rfc2131.c:1002
+#: rfc2131.c:1011
 #, c-format
 msgid "not using configured address %s because it is in use by the server or relay"
 msgstr ""
 
-#: rfc2131.c:1005
+#: rfc2131.c:1014
 #, c-format
 msgid "not using configured address %s because it was previously declined"
 msgstr ""
 
-#: rfc2131.c:1021 rfc2131.c:1189
+#: rfc2131.c:1030 rfc2131.c:1203
 msgid "no unique-id"
 msgstr ""
 
-#: rfc2131.c:1090
+#: rfc2131.c:1099
 msgid "wrong server-ID"
 msgstr ""
 
-#: rfc2131.c:1108
+#: rfc2131.c:1117
 msgid "wrong address"
 msgstr "adresă greÅŸită"
 
-#: rfc2131.c:1121
+#: rfc2131.c:1135
 msgid "lease not found"
 msgstr "împrumutul nu a fost găsit"
 
-#: rfc2131.c:1154
+#: rfc2131.c:1168
 msgid "address not available"
 msgstr "adresă indisponibilă"
 
-#: rfc2131.c:1165
+#: rfc2131.c:1179
 msgid "static lease available"
 msgstr "împrumut static este disponibil"
 
-#: rfc2131.c:1169
+#: rfc2131.c:1183
 msgid "address reserved"
 msgstr "adresă rezervată"
 
-#: rfc2131.c:1177
+#: rfc2131.c:1191
 #, c-format
 msgid "abandoning lease to %s of %s"
 msgstr ""
 
-#: rfc2131.c:1757
+#: rfc2131.c:1772
 #, c-format
 msgid "%u tags: %s"
 msgstr ""
 
-#: rfc2131.c:1770
+#: rfc2131.c:1785
 #, c-format
 msgid "%u bootfile name: %s"
 msgstr ""
 
-#: rfc2131.c:1779
+#: rfc2131.c:1794
 #, fuzzy, c-format
 msgid "%u server name: %s"
 msgstr "eroare DBus: %s"
 
-#: rfc2131.c:1793
+#: rfc2131.c:1808
 #, fuzzy, c-format
 msgid "%u next server: %s"
 msgstr "eroare DBus: %s"
 
-#: rfc2131.c:1796
+#: rfc2131.c:1811
 #, c-format
 msgid "%u broadcast response"
 msgstr ""
 
-#: rfc2131.c:1859
+#: rfc2131.c:1874
 #, fuzzy, c-format
 msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
 msgstr "nu pot trimite opÅ£iunea DHCP %d: nu mai este loc Ã®n pachet"
 
-#: rfc2131.c:2105
+#: rfc2131.c:2120
 msgid "PXE menu too large"
 msgstr ""
 
-#: rfc2131.c:2218
+#: rfc2131.c:2233
 #, c-format
 msgid "Ignoring domain %s for DHCP host name %s"
 msgstr ""
 
-#: rfc2131.c:2236
+#: rfc2131.c:2251
 #, fuzzy, c-format
 msgid "%u requested options: %s"
 msgstr "compilat cu opÅ£iunile: %s"
 
-#: rfc2131.c:2503
+#: rfc2131.c:2518
 #, c-format
 msgid "cannot send RFC3925 option: too many options for enterprise number %d"
 msgstr ""
 
-#: netlink.c:66
+#: netlink.c:70
 #, fuzzy, c-format
 msgid "cannot create netlink socket: %s"
 msgstr "nu pot să activez socket-ul netlink: %s"
 
-#: netlink.c:265
+#: netlink.c:288
 #, fuzzy, c-format
 msgid "netlink returns error: %s"
 msgstr "eroare DBus: %s"
@@ -1445,45 +1426,45 @@ msgstr "configurăm serverele superioare prin Dbus"
 msgid "could not register a DBus message handler"
 msgstr "nu pot activa o interfaţă de mesaje DBus"
 
-#: bpf.c:150
+#: bpf.c:217
 #, c-format
 msgid "cannot create DHCP BPF socket: %s"
 msgstr "nu pot creea socket DHCP BPF: %s"
 
-#: bpf.c:178
+#: bpf.c:245
 #, fuzzy, c-format
 msgid "DHCP request for unsupported hardware type (%d) received on %s"
 msgstr "cerere DHCP pentru dispozitiv nesuportat (%d) recepÅ£ionată prin %s"
 
-#: tftp.c:233
+#: tftp.c:281
 msgid "unable to get free port for TFTP"
 msgstr ""
 
-#: tftp.c:248
+#: tftp.c:296
 #, c-format
 msgid "unsupported request from %s"
 msgstr ""
 
-#: tftp.c:336
-#, c-format
-msgid "sent %s to %s"
-msgstr ""
-
-#: tftp.c:359
+#: tftp.c:406
 #, fuzzy, c-format
 msgid "file %s not found"
 msgstr "împrumutul nu a fost găsit"
 
-#: tftp.c:470
+#: tftp.c:522
 #, c-format
 msgid "error %d %s received from %s"
 msgstr ""
 
-#: tftp.c:501
+#: tftp.c:554
 #, fuzzy, c-format
 msgid "failed sending %s to %s"
 msgstr "nu pot citi %s: %s"
 
+#: tftp.c:568
+#, c-format
+msgid "sent %s to %s"
+msgstr ""
+
 #: log.c:173
 #, c-format
 msgid "overflow: %d log entries lost"
@@ -1494,10 +1475,26 @@ msgstr ""
 msgid "log failed: %s"
 msgstr ""
 
-#: log.c:431
+#: log.c:436
 msgid "FAILED to start up"
 msgstr "pornirea A EÅžUAT"
 
+#~ msgid "TXT record string too long"
+#~ msgstr "ÅŸirul de caractere pentru Ã®nregistrarea TXT este prea lung"
+
+#~ msgid "failed to set IPV6 options on listening socket: %s"
+#~ msgstr "configurarea opÅ£iunilor IPv6 a eÅŸuat pe socket-ul de ascultare: %s"
+
+#~ msgid "failed to bind listening socket for %s: %s"
+#~ msgstr "activarea socket-ului de ascultare pentru %s a eÅŸuat: %s"
+
+#~ msgid "failed to listen on socket: %s"
+#~ msgstr "ascultarea pe socket a eÅŸuat: %s"
+
+#, fuzzy
+#~ msgid "failed to create TFTP socket: %s"
+#~ msgstr "creearea socket-ului de ascultare a eÅŸuat: %s"
+
 #~ msgid "must set exactly one interface on broken systems without IP_RECVIF"
 #~ msgstr "trebuie specificată exact o singură interfaţă pe sistemele defectece nu au IP_RECVIF"
 
@@ -1525,9 +1522,6 @@ msgstr "pornirea A EÅžUAT"
 #~ msgid "read %s - %d hosts"
 #~ msgstr "citesc %s - %d adrese"
 
-#~ msgid "bad dhcp-host"
-#~ msgstr "dhcp-host invalid"
-
 #~ msgid "domains"
 #~ msgstr "domenii"
 
index 3eea7e418abc3bae0dff5e6b3a50d93ef7ddac7c..9a77426743a1586069003c1df64e598505bc682d 100644 (file)
--- a/src/bpf.c
+++ b/src/bpf.c
@@ -1,4 +1,4 @@
-/* dnsmasq is Copyright (c) 2000-2010 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2011 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
@@ -28,7 +28,64 @@ static struct iovec ifreq = {
   .iov_len = 0
 };
 
-int iface_enumerate(void *parm, int (*ipv4_callback)(), int (*ipv6_callback)())
+#if defined(HAVE_BSD_NETWORK) && !defined(__APPLE__)
+
+#include <sys/sysctl.h>
+#include <net/route.h>
+#include <net/if_dl.h>
+#include <netinet/if_ether.h>
+
+int arp_enumerate(void *parm, int (*callback)())
+{
+  int mib[6];
+  size_t needed;
+  char *next;
+  struct rt_msghdr *rtm;
+  struct sockaddr_inarp *sin2;
+  struct sockaddr_dl *sdl;
+  int rc;
+  
+  mib[0] = CTL_NET;
+  mib[1] = PF_ROUTE;
+  mib[2] = 0;
+  mib[3] = AF_INET;
+  mib[4] = NET_RT_FLAGS;
+#ifdef RTF_LLINFO
+  mib[5] = RTF_LLINFO;
+#else
+  mib[5] = 0;
+#endif 
+  if (sysctl(mib, 6, NULL, &needed, NULL, 0) == -1 || needed == 0)
+    return 0;
+
+  while (1) 
+    {
+      if (!expand_buf(&ifconf, needed))
+       return 0;
+      if ((rc = sysctl(mib, 6, ifconf.iov_base, &needed, NULL, 0)) == 0 ||
+         errno != ENOMEM)
+       break;
+      needed += needed / 8;
+    }
+  if (rc == -1)
+    return 0;
+  
+  for (next = ifconf.iov_base ; next < (char *)ifconf.iov_base + needed; next += rtm->rtm_msglen)
+    {
+      rtm = (struct rt_msghdr *)next;
+      sin2 = (struct sockaddr_inarp *)(rtm + 1);
+      sdl = (struct sockaddr_dl *)((char *)sin2 + SA_SIZE(sin2));
+      if (!(*callback)(AF_INET, &sin2->sin_addr, LLADDR(sdl), sdl->sdl_alen, parm))
+       return 0;
+    }
+
+  return 1;
+}
+
+#endif
+
+
+int iface_enumerate(int family, void *parm, int (*callback)())
 {
   char *ptr;
   struct ifreq *ifr;
@@ -37,6 +94,13 @@ int iface_enumerate(void *parm, int (*ipv4_callback)(), int (*ipv6_callback)())
   int lastlen = 0;
   size_t len = 0;
   
+  if (family == AF_UNSPEC)
+#if defined(HAVE_BSD_NETWORK) && !defined(__APPLE__)
+    return  arp_enumerate(parm, callback);
+#else
+  return 0; /* need code for Solaris and MacOS*/
+#endif
+
   if ((fd = socket(PF_INET, SOCK_DGRAM, 0)) == -1)
     return 0;
   
@@ -83,39 +147,42 @@ int iface_enumerate(void *parm, int (*ipv4_callback)(), int (*ipv6_callback)())
       ifr = (struct ifreq *)ifreq.iov_base;
       memcpy(ifr, ptr, len);
            
-      if (ifr->ifr_addr.sa_family == AF_INET && ipv4_callback)
+      if (ifr->ifr_addr.sa_family == family)
        {
-         struct in_addr addr, netmask, broadcast;
-         broadcast.s_addr = 0;
-         addr = ((struct sockaddr_in *) &ifr->ifr_addr)->sin_addr;
-         if (ioctl(fd, SIOCGIFNETMASK, ifr) == -1)
-           continue;
-         netmask = ((struct sockaddr_in *) &ifr->ifr_addr)->sin_addr;
-         if (ioctl(fd, SIOCGIFBRDADDR, ifr) != -1)
-           broadcast = ((struct sockaddr_in *) &ifr->ifr_addr)->sin_addr; 
-         if (!((*ipv4_callback)(addr, 
-                                (int)if_nametoindex(ifr->ifr_name),
-                                netmask, broadcast, 
-                                parm)))
-           goto err;
-       }
+         if (family == AF_INET)
+           {
+             struct in_addr addr, netmask, broadcast;
+             broadcast.s_addr = 0;
+             addr = ((struct sockaddr_in *) &ifr->ifr_addr)->sin_addr;
+             if (ioctl(fd, SIOCGIFNETMASK, ifr) == -1)
+               continue;
+             netmask = ((struct sockaddr_in *) &ifr->ifr_addr)->sin_addr;
+             if (ioctl(fd, SIOCGIFBRDADDR, ifr) != -1)
+               broadcast = ((struct sockaddr_in *) &ifr->ifr_addr)->sin_addr; 
+             if (!((*callback)(addr, 
+                               (int)if_nametoindex(ifr->ifr_name),
+                               netmask, broadcast, 
+                               parm)))
+               goto err;
+           }
 #ifdef HAVE_IPV6
-      else if (ifr->ifr_addr.sa_family == AF_INET6 && ipv6_callback)
-       {
-         struct in6_addr *addr = &((struct sockaddr_in6 *)&ifr->ifr_addr)->sin6_addr;
-         /* voodoo to clear interface field in address */
-         if (!(daemon->options & OPT_NOWILD) && IN6_IS_ADDR_LINKLOCAL(addr))
+         else if (family == AF_INET6)
            {
-             addr->s6_addr[2] = 0;
-             addr->s6_addr[3] = 0;
+             struct in6_addr *addr = &((struct sockaddr_in6 *)&ifr->ifr_addr)->sin6_addr;
+             /* voodoo to clear interface field in address */
+             if (!option_bool(OPT_NOWILD) && IN6_IS_ADDR_LINKLOCAL(addr))
+               {
+                 addr->s6_addr[2] = 0;
+                 addr->s6_addr[3] = 0;
+               }
+             if (!((*callback)(addr,
+                               (int)((struct sockaddr_in6 *)&ifr->ifr_addr)->sin6_scope_id,
+                               (int)if_nametoindex(ifr->ifr_name),
+                               parm)))
+               goto err;
            }
-         if (!((*ipv6_callback)(addr,
-                                (int)((struct sockaddr_in6 *)&ifr->ifr_addr)->sin6_scope_id,
-                                (int)if_nametoindex(ifr->ifr_name),
-                                parm)))
-           goto err;
-       }
 #endif
+       }
     }
   
   ret = 1;
index 6cb95c2f3f2540e28fe7e20cb66cd6f835afab4d..77c1972c8859879d5842c5721d722b29f9bc6c53 100644 (file)
@@ -1,4 +1,4 @@
-/* dnsmasq is Copyright (c) 2000-2010 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2011 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
@@ -75,7 +75,7 @@ void cache_init(void)
   struct crec *crecp;
   int i;
 
-  if (daemon->options & OPT_LOG)
+  if (option_bool(OPT_LOG))
     addrbuff = safe_malloc(ADDRSTRLEN);
   
   bignames_left = daemon->cachesize/10;
@@ -226,7 +226,7 @@ char *cache_get_name(struct crec *crecp)
 {
   if (crecp->flags & F_BIGNAME)
     return crecp->name.bname->name;
-  else if (crecp->flags & (F_DHCP | F_CONFIG)
+  else if (crecp->flags & F_NAMEP
     return crecp->name.namep;
   
   return crecp->name.sname;
@@ -366,9 +366,6 @@ struct crec *cache_insert(char *name, struct all_addr *addr,
 
   log_query(flags | F_UPSTREAM, name, addr, NULL);
 
-  /* CONFIG bit means something else when stored in cache entries */
-  flags &= ~F_CONFIG;
-
   /* if previous insertion failed give up now. */
   if (insert_error)
     return NULL;
@@ -503,7 +500,7 @@ struct crec *cache_find_by_name(struct crec *crecp, char *name, time_t now, unsi
       /* first search, look for relevant entries and push to top of list
         also free anything which has expired */
       struct crec *next, **up, **insert = NULL, **chainp = &ans;
-      int ins_flags = 0;
+      unsigned short ins_flags = 0;
       
       for (up = hash_bucket(name), crecp = *up; crecp; crecp = next)
        {
@@ -695,7 +692,7 @@ static void add_hosts_entry(struct crec *cache, struct all_addr *addr, int addrl
       if (hostname_isequal(cache->name.sname, a->target) &&
          (lookup = whine_malloc(sizeof(struct crec))))
        {
-         lookup->flags = F_FORWARD | F_IMMORTAL | F_CONFIG | F_HOSTS | F_CNAME;
+         lookup->flags = F_FORWARD | F_IMMORTAL | F_NAMEP | F_HOSTS | F_CNAME;
          lookup->name.namep = a->alias;
          lookup->addr.cname.cache = cache;
          lookup->addr.cname.uid = index;
@@ -832,7 +829,7 @@ static int read_hostsfile(char *filename, int index, int cache_size)
          if ((canon = canonicalise(token, &nomem)))
            {
              /* If set, add a version of the name with a default domain appended */
-             if ((daemon->options & OPT_EXPAND) && domain_suffix && !fqdn && 
+             if (option_bool(OPT_EXPAND) && domain_suffix && !fqdn && 
                  (cache = whine_malloc(sizeof(struct crec) + 
                                        strlen(canon)+2+strlen(domain_suffix)-SMALLDNAME)))
                {
@@ -896,107 +893,17 @@ void cache_reload(void)
          up = &cache->hash_next;
       }
   
-  if ((daemon->options & OPT_NO_HOSTS) && !daemon->addn_hosts)
+  if (option_bool(OPT_NO_HOSTS) && !daemon->addn_hosts)
     {
       if (daemon->cachesize > 0)
        my_syslog(LOG_INFO, _("cleared cache"));
       return;
     }
 
-  if (!(daemon->options & OPT_NO_HOSTS))
+  if (!option_bool(OPT_NO_HOSTS))
     total_size = read_hostsfile(HOSTSFILE, 0, total_size);
-  
-  for (i = 0, ah = daemon->addn_hosts; ah; ah = ah->next)
-    {
-      if (i <= ah->index)
-       i = ah->index + 1;
-
-      if (ah->flags & AH_DIR)
-       ah->flags |= AH_INACTIVE;
-      else
-       ah->flags &= ~AH_INACTIVE;
-    }
-
-  for (ah = daemon->addn_hosts; ah; ah = ah->next)
-    if (!(ah->flags & AH_INACTIVE))
-      {
-       struct stat buf;
-       if (stat(ah->fname, &buf) != -1 && S_ISDIR(buf.st_mode))
-         {
-           DIR *dir_stream;
-           struct dirent *ent;
-           
-           /* 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));
-           else
-             {
-               while ((ent = readdir(dir_stream)))
-                 {
-                   size_t lendir = strlen(ah->fname);
-                   size_t lenfile = strlen(ent->d_name);
-                   struct hostsfile *ah1;
-                   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;
-                   
-                   /* see if we have an existing record.
-                      dir is ah->fname 
-                      file is ent->d_name
-                      path to match is ah1->fname */
-
-                   for (ah1 = daemon->addn_hosts; ah1; ah1 = ah1->next)
-                     {
-                       if (lendir < strlen(ah1->fname) &&
-                           strstr(ah1->fname, ah->fname) == ah1->fname &&
-                           ah1->fname[lendir] == '/' &&
-                           strcmp(ah1->fname + lendir + 1, ent->d_name) == 0)
-                         {
-                           ah1->flags &= ~AH_INACTIVE;
-                           break;
-                         }
-                     }
-                   
-                   /* make new record */
-                   if (!ah1)
-                     {
-                       if (!(ah1 = whine_malloc(sizeof(struct hostsfile))))
-                         continue;
-                       
-                       if (!(path = whine_malloc(lendir + lenfile + 2)))
-                         {
-                           free(ah1);
-                           continue;
-                         }
-                       
-                       strcpy(path, ah->fname);
-                       strcat(path, "/");
-                       strcat(path, ent->d_name);
-                       ah1->fname = path;
-                       ah1->index = i++;
-                       ah1->flags = AH_DIR;
-                       ah1->next = daemon->addn_hosts;
-                       daemon->addn_hosts = ah1;
-                     }
-                   
-                   /* inactivate record if not regular file */
-                   if ((ah1->flags & AH_DIR) && stat(ah1->fname, &buf) != -1 && !S_ISREG(buf.st_mode))
-                     ah1->flags |= AH_INACTIVE; 
-
-                 }
-               closedir(dir_stream);
-             }
-         }
-      }
-           
+          
+  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);
@@ -1036,7 +943,7 @@ void cache_add_dhcp_entry(char *host_name,
                          struct in_addr *host_address, time_t ttd) 
 {
   struct crec *crec = NULL, *aliasc;
-  unsigned short flags =  F_DHCP | F_FORWARD | F_IPV4 | F_REVERSE;
+  unsigned short flags =  F_NAMEP | F_DHCP | F_FORWARD | F_IPV4 | F_REVERSE;
   int in_hosts = 0;
   struct cname *a;
   
@@ -1049,13 +956,13 @@ void cache_add_dhcp_entry(char *host_name,
          in_hosts = 1;
          
          if (crec->flags & F_CNAME)
-           my_syslog(LOG_WARNING, 
+           my_syslog(MS_DHCP | LOG_WARNING, 
                      _("%s is a CNAME, not giving it to the DHCP lease of %s"),
                      host_name, inet_ntoa(*host_address));
          else if (crec->addr.addr.addr.addr4.s_addr != host_address->s_addr)
            {
              strcpy(daemon->namebuff, inet_ntoa(crec->addr.addr.addr.addr4));
-             my_syslog(LOG_WARNING, 
+             my_syslog(MS_DHCP | LOG_WARNING, 
                        _("not giving name %s to the DHCP lease of %s because "
                          "the name exists in %s with address %s"), 
                        host_name, inet_ntoa(*host_address),
@@ -1109,7 +1016,7 @@ void cache_add_dhcp_entry(char *host_name,
            
            if (aliasc)
              {
-               aliasc->flags = F_FORWARD | F_CONFIG | F_DHCP | F_CNAME;
+               aliasc->flags = F_FORWARD | F_NAMEP | F_DHCP | F_CNAME;
                if (ttd == 0)
                  aliasc->flags |= F_IMMORTAL;
                else
@@ -1143,12 +1050,15 @@ void dump_cache(time_t now)
     serv->flags &= ~SERV_COUNTED;
   
   for (serv = daemon->servers; serv; serv = serv->next)
-    if (!(serv->flags & (SERV_NO_ADDR | SERV_LITERAL_ADDRESS | SERV_COUNTED)))
+    if (!(serv->flags & 
+         (SERV_NO_ADDR | SERV_LITERAL_ADDRESS | SERV_COUNTED | SERV_USE_RESOLV | SERV_NO_REBIND)))
       {
        int port;
        unsigned int queries = 0, failed_queries = 0;
        for (serv1 = serv; serv1; serv1 = serv1->next)
-         if (!(serv1->flags & (SERV_NO_ADDR | SERV_LITERAL_ADDRESS | SERV_COUNTED)) && sockaddr_isequal(&serv->addr, &serv1->addr))
+         if (!(serv1->flags & 
+               (SERV_NO_ADDR | SERV_LITERAL_ADDRESS | SERV_COUNTED | SERV_USE_RESOLV | SERV_NO_REBIND)) && 
+             sockaddr_isequal(&serv->addr, &serv1->addr))
            {
              serv1->flags |= SERV_COUNTED;
              queries += serv1->queries;
@@ -1158,11 +1068,11 @@ void dump_cache(time_t now)
        my_syslog(LOG_INFO, _("server %s#%d: queries sent %u, retried or failed %u"), addrbuff, port, queries, failed_queries);
       }
   
-  if ((daemon->options & (OPT_DEBUG | OPT_LOG)))
+  if (option_bool(OPT_DEBUG) || option_bool(OPT_LOG))
     {
       struct crec *cache ;
       int i;
-      my_syslog(LOG_DEBUG, "Host                                     Address                        Flags     Expires");
+      my_syslog(LOG_INFO, "Host                                     Address                        Flags     Expires");
     
       for (i=0; i<hash_size; i++)
        for (cache = hash_table[i]; cache; cache = cache->hash_next)
@@ -1208,7 +1118,7 @@ void dump_cache(time_t now)
            /* ctime includes trailing \n - eat it */
            *(p-1) = 0;
 #endif
-           my_syslog(LOG_DEBUG, daemon->namebuff);
+           my_syslog(LOG_INFO, daemon->namebuff);
          }
     }
 }
@@ -1237,12 +1147,12 @@ void querystr(char *str, unsigned short type)
       sprintf(str,"query[%s]", typestr[i].name);
 }
 
-void log_query(unsigned short flags, char *name, struct all_addr *addr, char *arg)
+void log_query(unsigned int flags, char *name, struct all_addr *addr, char *arg)
 {
   char *source, *dest = addrbuff;
   char *verb = "is";
   
-  if (!(daemon->options & OPT_LOG))
+  if (!option_bool(OPT_LOG))
     return;
 
   if (addr)
@@ -1283,13 +1193,9 @@ void log_query(unsigned short flags, char *name, struct all_addr *addr, char *ar
        }
     }
   else if (flags & F_CNAME)
-    {
-      /* nasty abuse of NXDOMAIN and CNAME flags */
-      if (flags & F_NXDOMAIN)
-       dest = arg;
-      else
-       dest = "<CNAME>";
-    }
+    dest = "<CNAME>";
+  else if (flags & F_RRNAME)
+    dest = arg;
     
   if (flags & F_CONFIG)
     source = "config";
@@ -1315,6 +1221,6 @@ void log_query(unsigned short flags, char *name, struct all_addr *addr, char *ar
   if (strlen(name) == 0)
     name = ".";
 
-  my_syslog(LOG_DEBUG, "%s %s %s %s", source, name, verb, dest);
+  my_syslog(LOG_INFO, "%s %s %s %s", source, name, verb, dest);
 }
 
index 204e363b44a3c6ff9a98370faa1ae1c33085c524..11aa17efbf783124b71fac872d1787639ab397ee 100644 (file)
@@ -1,4 +1,4 @@
-/* dnsmasq is Copyright (c) 2000-2010 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2011 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 VERSION "2.55"
+#define VERSION "2.56"
 
 #define FTABSIZ 150 /* max number of outstanding requests (default) */
 #define MAX_PROCS 20 /* max no children for TCP requests */
@@ -22,7 +22,7 @@
 #define EDNS_PKTSZ 4096 /* default max EDNS.0 UDP packet from RFC5625 */
 #define TIMEOUT 10 /* drop UDP queries after TIMEOUT seconds */
 #define FORWARD_TEST 50 /* try all servers every 50 queries */
-#define FORWARD_TIME 20 /* or 10 seconds */
+#define FORWARD_TIME 20 /* or 20 seconds */
 #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 */
@@ -72,6 +72,7 @@
 #define LOG_MAX 5 /* log-queue length */
 #define RANDFILE "/dev/urandom"
 #define DAD_WAIT 20 /* retry binding IPv6 sockets for this long */
+#define EDNS0_OPTION_MAC 5 /* dyndns.org temporary assignment */
 
 /* DBUS interface specifics */
 #define DNSMASQ_SERVICE "uk.org.thekelleys.dnsmasq"
index b0fae8bbeae2a5a491ffd2245f82eb1077bb58c5..445e5d4e7260e83dbbdbf5eeeed5ba6289af19a0 100644 (file)
@@ -1,4 +1,4 @@
-/* dnsmasq is Copyright (c) 2000-2010 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2011 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
index 00ca03a51c3bf980e9377177c8036daeb7cb55c5..29ddf24495731b6800abcce1f784195571cf03f2 100644 (file)
@@ -1,4 +1,4 @@
-/* dnsmasq is Copyright (c) 2000-2010 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2011 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
@@ -54,7 +54,7 @@ static int make_fd(int port)
   /* When bind-interfaces is set, there might be more than one dnmsasq
      instance binding port 67. That's OK if they serve different networks.
      Need to set REUSEADDR to make this posible, or REUSEPORT on *BSD. */
-  if (daemon->options & OPT_NOWILD)
+  if (option_bool(OPT_NOWILD))
     {
 #ifdef SO_REUSEPORT
       int rc = setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &oneopt, sizeof(oneopt));
@@ -96,7 +96,7 @@ void dhcp_init(void)
      we drop root. Also, set buffer size small, to avoid wasting
      kernel buffers */
   
-  if (daemon->options & OPT_NO_PING)
+  if (option_bool(OPT_NO_PING))
     daemon->dhcp_icmp_fd = -1;
   else if ((daemon->dhcp_icmp_fd = make_icmp_sock()) == -1 ||
           setsockopt(daemon->dhcp_icmp_fd, SOL_SOCKET, SO_RCVBUF, &oneopt, sizeof(oneopt)) == -1 )
@@ -295,7 +295,7 @@ void dhcp_packet(time_t now, int pxe_fd)
        }
     } 
 
-  if (!iface_enumerate(&parm, complete_context, NULL))
+  if (!iface_enumerate(AF_INET, &parm, complete_context))
     return;
   lease_prune(NULL, now); /* lose any expired leases */
   iov.iov_len = dhcp_reply(parm.current, ifr.ifr_name, iface_index, (size_t)sz, 
@@ -660,7 +660,7 @@ int address_allocate(struct dhcp_context *context,
                
                *addrp = addr;
 
-               if (daemon->options & OPT_NO_PING)
+               if (option_bool(OPT_NO_PING))
                  return 1;
                
                /* check if we failed to ping addr sometime in the last
index 727d5e2e94cec3a005c36f9b5de40ac5203f0375..689a86b606a363d3e8e99172400e4e261e462c4c 100644 (file)
@@ -1,4 +1,4 @@
-/* dnsmasq is Copyright (c) 2000-2010 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2011 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
@@ -133,10 +133,10 @@ int main (int argc, char **argv)
 #elif !(defined(IP_RECVDSTADDR) && \
        defined(IP_RECVIF) && \
        defined(IP_SENDSRCADDR))
-  if (!(daemon->options & OPT_NOWILD))
+  if (!option_bool(OPT_NOWILD))
     {
       bind_fallback = 1;
-      daemon->options |= OPT_NOWILD;
+      set_option_bool(OPT_NOWILD);
     }
 #endif
 
@@ -168,7 +168,7 @@ int main (int argc, char **argv)
   if (!enumerate_interfaces())
     die(_("failed to find list of interfaces: %s"), NULL, EC_MISC);
     
-  if (daemon->options & OPT_NOWILD
+  if (option_bool(OPT_NOWILD)
     {
       daemon->listeners = create_bound_listeners();
 
@@ -183,14 +183,13 @@ int main (int argc, char **argv)
            die(_("no interface with address %s"), daemon->namebuff, EC_BADNET);
          }
     }
-  else if ((daemon->port != 0 || daemon->tftp_interfaces || daemon->tftp_unlimited) &&
-          !(daemon->listeners = create_wildcard_listeners()))
-    die(_("failed to create listening socket: %s"), NULL, EC_BADNET);
+  else 
+    daemon->listeners = create_wildcard_listeners();
   
   if (daemon->port != 0)
     cache_init();
     
-  if (daemon->options & OPT_DBUS)
+  if (option_bool(OPT_DBUS))
 #ifdef HAVE_DBUS
     {
       char *err;
@@ -275,7 +274,7 @@ int main (int argc, char **argv)
 
   err_pipe[1] = -1;
   
-  if (!(daemon->options & OPT_DEBUG))   
+  if (!option_bool(OPT_DEBUG))   
     {
       /* The following code "daemonizes" the process. 
         See Stevens section 12.4 */
@@ -284,7 +283,7 @@ int main (int argc, char **argv)
        die(_("cannot chdir to filesystem root: %s"), NULL, EC_MISC); 
 
 #ifndef NO_FORK      
-      if (!(daemon->options & OPT_NO_FORK))
+      if (!option_bool(OPT_NO_FORK))
        {
          pid_t pid;
          
@@ -345,7 +344,7 @@ int main (int argc, char **argv)
   
    log_err = log_start(ent_pw, err_pipe[1]);
 
-   if (!(daemon->options & OPT_DEBUG)) 
+   if (!option_bool(OPT_DEBUG)) 
      {       
        /* open  stdout etc to /dev/null */
        int nullfd = open("/dev/null", O_RDWR);
@@ -362,7 +361,7 @@ int main (int argc, char **argv)
     daemon->helperfd = create_helper(pipewrite, err_pipe[1], script_uid, script_gid, max_fd);
 #endif
 
-  if (!(daemon->options & OPT_DEBUG) && getuid() == 0)   
+  if (!option_bool(OPT_DEBUG) && getuid() == 0)   
     {
       int bad_capabilities = 0;
       gid_t dummy;
@@ -440,7 +439,7 @@ int main (int argc, char **argv)
     }
   
 #ifdef HAVE_LINUX_NETWORK
-  if (daemon->options & OPT_DEBUG
+  if (option_bool(OPT_DEBUG)
     prctl(PR_SET_DUMPABLE, 1);
 #endif
 
@@ -454,7 +453,7 @@ int main (int argc, char **argv)
   my_syslog(LOG_INFO, _("compile time options: %s"), compile_opts);
   
 #ifdef HAVE_DBUS
-  if (daemon->options & OPT_DBUS)
+  if (option_bool(OPT_DBUS))
     {
       if (daemon->dbus)
        my_syslog(LOG_INFO, _("DBus support enabled: connected to system bus"));
@@ -470,12 +469,12 @@ int main (int argc, char **argv)
   if (bind_fallback)
     my_syslog(LOG_WARNING, _("setting --bind-interfaces option because of OS limitations"));
   
-  if (!(daemon->options & OPT_NOWILD)) 
+  if (!option_bool(OPT_NOWILD)) 
     for (if_tmp = daemon->if_names; if_tmp; if_tmp = if_tmp->next)
       if (if_tmp->name && !if_tmp->used)
        my_syslog(LOG_WARNING, _("warning: interface %s does not currently exist"), if_tmp->name);
    
-  if (daemon->port != 0 && (daemon->options & OPT_NO_RESOLV))
+  if (daemon->port != 0 && option_bool(OPT_NO_RESOLV))
     {
       if (daemon->resolv_files && !daemon->resolv_files->is_default)
        my_syslog(LOG_WARNING, _("warning: ignoring resolv-file flag because no-resolv is set"));
@@ -518,7 +517,7 @@ int main (int argc, char **argv)
       my_syslog(MS_TFTP | LOG_INFO, "TFTP %s%s %s", 
                daemon->tftp_prefix ? _("root is ") : _("enabled"),
                daemon->tftp_prefix ? daemon->tftp_prefix: "",
-               daemon->options & OPT_TFTP_SECURE ? _("secure mode") : "");
+               option_bool(OPT_TFTP_SECURE) ? _("secure mode") : "");
       
       /* This is a guess, it assumes that for small limits, 
         disjoint files might be served, but for large limits, 
@@ -580,7 +579,7 @@ int main (int argc, char **argv)
 
       /* Whilst polling for the dbus, or doing a tftp transfer, wake every quarter second */
       if (daemon->tftp_trans ||
-         ((daemon->options & OPT_DBUS) && !daemon->dbus))
+         (option_bool(OPT_DBUS) && !daemon->dbus))
        {
          t.tv_sec = 0;
          t.tv_usec = 250000;
@@ -664,7 +663,7 @@ int main (int argc, char **argv)
       
 #ifdef HAVE_DBUS
       /* if we didn't create a DBus connection, retry now. */ 
-     if ((daemon->options & OPT_DBUS) && !daemon->dbus)
+     if (option_bool(OPT_DBUS) && !daemon->dbus)
        {
          char *err;
          if ((err = dbus_init()))
@@ -801,7 +800,7 @@ static void async_event(int pipe, time_t now)
       {
       case EVENT_RELOAD:
        clear_cache_and_reload(now);
-       if (daemon->port != 0 && daemon->resolv_files && (daemon->options & OPT_NO_POLL))
+       if (daemon->port != 0 && daemon->resolv_files && option_bool(OPT_NO_POLL))
          {
            reload_servers(daemon->resolv_files->name);
            check_servers();
@@ -908,7 +907,7 @@ void poll_resolv(int force, int do_reload, time_t now)
      Go through and find the one which changed _last_.
      Warn of any which can't be read. */
 
-  if (daemon->port == 0 || (daemon->options & OPT_NO_POLL))
+  if (daemon->port == 0 || option_bool(OPT_NO_POLL))
     return;
   
   for (latest = NULL, res = daemon->resolv_files; res; res = res->next)
@@ -954,7 +953,7 @@ void poll_resolv(int force, int do_reload, time_t now)
          my_syslog(LOG_INFO, _("reading %s"), latest->name);
          warned = 0;
          check_servers();
-         if ((daemon->options & OPT_RELOAD) && do_reload)
+         if (option_bool(OPT_RELOAD) && do_reload)
            clear_cache_and_reload(now);
        }
       else 
@@ -977,7 +976,7 @@ void clear_cache_and_reload(time_t now)
 #ifdef HAVE_DHCP
   if (daemon->dhcp)
     {
-      if (daemon->options & OPT_ETHERS)
+      if (option_bool(OPT_ETHERS))
        dhcp_read_ethers();
       reread_dhcp();
       dhcp_update_configs(daemon->dhcp_conf);
@@ -1094,7 +1093,7 @@ static void check_dns_listeners(fd_set *set, time_t now)
          if (confd == -1)
            continue;
          
-         if (daemon->options & OPT_NOWILD)
+         if (option_bool(OPT_NOWILD))
            iface = listener->iface;
          else
            {
@@ -1120,7 +1119,7 @@ static void check_dns_listeners(fd_set *set, time_t now)
              close(confd);
            }
 #ifndef NO_FORK
-         else if (!(daemon->options & OPT_DEBUG) && (p = fork()) != 0)
+         else if (!option_bool(OPT_DEBUG) && (p = fork()) != 0)
            {
              if (p != -1)
                {
@@ -1147,7 +1146,7 @@ static void check_dns_listeners(fd_set *set, time_t now)
 #ifndef NO_FORK
              /* Arrange for SIGALARM after CHILD_LIFETIME seconds to
                 terminate the process. */
-             if (!(daemon->options & OPT_DEBUG))
+             if (!option_bool(OPT_DEBUG))
                alarm(CHILD_LIFETIME);
 #endif
 
@@ -1179,7 +1178,7 @@ static void check_dns_listeners(fd_set *set, time_t now)
                    close(s->tcpfd);
                  }
 #ifndef NO_FORK                   
-             if (!(daemon->options & OPT_DEBUG))
+             if (!option_bool(OPT_DEBUG))
                {
                  flush_log();
                  _exit(0);
index 672e4cb6c3f2fb35a98762b5b67062397eead91f..10e7eef25ce67733d0a09223340c3410a82ee42d 100644 (file)
@@ -1,4 +1,4 @@
-/* dnsmasq is Copyright (c) 2000-2010 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2011 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-2010 Simon Kelley" 
+#define COPYRIGHT "Copyright (c) 2000-2011 Simon Kelley" 
 
 #ifndef NO_LARGEFILE
 /* Ensure we can use files >2GB (log files may grow this big) */
@@ -163,38 +163,44 @@ struct event_desc {
 */
 #define DNSMASQ_PACKETSZ PACKETSZ+MAXDNAME+RRFIXEDSZ
 
-#define OPT_BOGUSPRIV      (1u<<0)
-#define OPT_FILTER         (1u<<1)
-#define OPT_LOG            (1u<<2)
-#define OPT_SELFMX         (1u<<3)
-#define OPT_NO_HOSTS       (1u<<4)
-#define OPT_NO_POLL        (1u<<5)
-#define OPT_DEBUG          (1u<<6)
-#define OPT_ORDER          (1u<<7)
-#define OPT_NO_RESOLV      (1u<<8)
-#define OPT_EXPAND         (1u<<9)
-#define OPT_LOCALMX        (1u<<10)
-#define OPT_NO_NEG         (1u<<11)
-#define OPT_NODOTS_LOCAL   (1u<<12)
-#define OPT_NOWILD         (1u<<13)
-#define OPT_ETHERS         (1u<<14)
-#define OPT_RESOLV_DOMAIN  (1u<<15)
-#define OPT_NO_FORK        (1u<<16)
-#define OPT_AUTHORITATIVE  (1u<<17)
-#define OPT_LOCALISE       (1u<<18)
-#define OPT_DBUS           (1u<<19)
-#define OPT_DHCP_FQDN      (1u<<20)
-#define OPT_NO_PING        (1u<<21)
-#define OPT_LEASE_RO       (1u<<22)
-#define OPT_ALL_SERVERS    (1u<<23)
-#define OPT_RELOAD         (1u<<24)
-#define OPT_LOCAL_REBIND   (1u<<25)  
-#define OPT_TFTP_SECURE    (1u<<26)
-#define OPT_TFTP_NOBLOCK   (1u<<27)
-#define OPT_LOG_OPTS       (1u<<28)
-#define OPT_TFTP_APREF     (1u<<29)
-#define OPT_NO_OVERRIDE    (1u<<30)
-#define OPT_NO_REBIND      (1u<<31)
+/* Trust the compiler dead-code elimator.... */
+#define option_bool(x) (((x) < 32) ? daemon->options & (1u << (x)) : daemon->options2 & (1u << ((x) - 32)))
+
+#define OPT_BOGUSPRIV      0
+#define OPT_FILTER         1
+#define OPT_LOG            2
+#define OPT_SELFMX         3
+#define OPT_NO_HOSTS       4
+#define OPT_NO_POLL        5
+#define OPT_DEBUG          6
+#define OPT_ORDER          7
+#define OPT_NO_RESOLV      8
+#define OPT_EXPAND         9
+#define OPT_LOCALMX        10
+#define OPT_NO_NEG         11
+#define OPT_NODOTS_LOCAL   12
+#define OPT_NOWILD         13
+#define OPT_ETHERS         14
+#define OPT_RESOLV_DOMAIN  15
+#define OPT_NO_FORK        16
+#define OPT_AUTHORITATIVE  17
+#define OPT_LOCALISE       18
+#define OPT_DBUS           19
+#define OPT_DHCP_FQDN      20
+#define OPT_NO_PING        21
+#define OPT_LEASE_RO       22
+#define OPT_ALL_SERVERS    23
+#define OPT_RELOAD         24
+#define OPT_LOCAL_REBIND   25  
+#define OPT_TFTP_SECURE    26
+#define OPT_TFTP_NOBLOCK   27
+#define OPT_LOG_OPTS       28
+#define OPT_TFTP_APREF     29
+#define OPT_NO_OVERRIDE    30
+#define OPT_NO_REBIND      31
+#define OPT_ADD_MAC        32
+#define OPT_DNSSEC         33
+#define OPT_LAST           34
 
 /* 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. */
@@ -235,7 +241,8 @@ struct naptr {
 };
 
 struct txt_record {
-  char *name, *txt;
+  char *name;
+  unsigned char *txt;
   unsigned short class, len;
   struct txt_record *next;
 };
@@ -280,22 +287,28 @@ struct crec {
   } name;
 };
 
-#define F_IMMORTAL  1
-#define F_CONFIG    2
-#define F_REVERSE   4
-#define F_FORWARD   8
-#define F_DHCP      16 
-#define F_NEG       32       
-#define F_HOSTS     64
-#define F_IPV4      128
-#define F_IPV6      256
-#define F_BIGNAME   512
-#define F_UPSTREAM  1024
-#define F_SERVER    2048
-#define F_NXDOMAIN  4096
-#define F_QUERY     8192
-#define F_CNAME     16384
-#define F_NOERR     32768
+#define F_IMMORTAL  (1u<<0)
+#define F_NAMEP     (1u<<1)
+#define F_REVERSE   (1u<<2)
+#define F_FORWARD   (1u<<3)
+#define F_DHCP      (1u<<4)
+#define F_NEG       (1u<<5)       
+#define F_HOSTS     (1u<<6)
+#define F_IPV4      (1u<<7)
+#define F_IPV6      (1u<<8)
+#define F_BIGNAME   (1u<<9)
+#define F_NXDOMAIN  (1u<<10)
+#define F_CNAME     (1u<<11)
+#define F_NOERR     (1u<<12)
+#define F_CONFIG    (1u<<13)
+/* below here are only valid as args to log_query: cache
+   entries are limited to 16 bits */
+#define F_UPSTREAM  (1u<<16)
+#define F_RRNAME    (1u<<17)
+#define F_SERVER    (1u<<18)
+#define F_QUERY     (1u<<19)
+#define F_NSRR      (1u<<20)
+
 
 /* struct sockaddr is not large enough to hold any address,
    and specifically not big enough to hold an IPv6 address.
@@ -374,7 +387,7 @@ struct resolvc {
   char *name;
 };
 
-/* adn-hosts parms from command-line */
+/* adn-hosts parms from command-line (also dhcp-hostsfile and dhcp-optsfile */
 #define AH_DIR      1
 #define AH_INACTIVE 2
 struct hostsfile {
@@ -384,6 +397,9 @@ struct hostsfile {
   int index; /* matches to cache entries for logging */
 };
 
+#define FREC_NOREBIND           1
+#define FREC_CHECKING_DISABLED  2
+
 struct frec {
   union mysockaddr source;
   struct all_addr dest;
@@ -394,7 +410,7 @@ struct frec {
 #endif
   unsigned int iface;
   unsigned short orig_id, new_id;
-  int fd, forwardall, norebind;
+  int fd, forwardall, flags;
   unsigned int crc;
   time_t time;
   struct frec *next;
@@ -601,7 +617,7 @@ struct tftp_transfer {
   int backoff;
   unsigned int block, blocksize, expansion;
   off_t offset;
-  struct sockaddr_in peer;
+  union mysockaddr peer;
   char opt_blocksize, opt_transize, netascii, carrylf;
   struct tftp_file *file;
   struct tftp_transfer *next;
@@ -629,7 +645,7 @@ extern struct daemon {
      config file arguments. All set (including defaults)
      in option.c */
 
-  unsigned int options;
+  unsigned int options, options2;
   struct resolvc default_resolv, *resolv_files;
   time_t last_resolv;
   struct mx_srv_record *mxnames;
@@ -669,7 +685,7 @@ extern struct daemon {
   int enable_pxe;
   struct dhcp_netid_list *dhcp_ignore, *dhcp_ignore_names, *dhcp_gen_names; 
   struct dhcp_netid_list *force_broadcast, *bootp_dynamic;
-  char *dhcp_hosts_file, *dhcp_opts_file;
+  struct hostsfile *dhcp_hosts_file, *dhcp_opts_file;
   int dhcp_max, tftp_max;
   int dhcp_server_port, dhcp_client_port;
   int start_tftp_port, end_tftp_port; 
@@ -727,7 +743,7 @@ extern struct daemon {
 
 /* cache.c */
 void cache_init(void);
-void log_query(unsigned short flags, char *name, struct all_addr *addr, char *arg); 
+void log_query(unsigned int flags, char *name, struct all_addr *addr, char *arg); 
 char *record_source(int index);
 void querystr(char *str, unsigned short type);
 struct crec *cache_find_by_addr(struct crec *crecp,
@@ -747,13 +763,13 @@ char *cache_get_name(struct crec *crecp);
 char *get_domain(struct in_addr addr);
 
 /* rfc1035.c */
-unsigned short extract_request(HEADER *header, size_t qlen, 
+unsigned int extract_request(HEADER *header, size_t qlen, 
                               char *name, unsigned short *typep);
 size_t setup_reply(HEADER *header, size_t  qlen,
-                  struct all_addr *addrp, unsigned short flags,
+                  struct all_addr *addrp, unsigned int flags,
                   unsigned long local_ttl);
 int extract_addresses(HEADER *header, size_t qlen, char *namebuff, 
-                     time_t now, int is_sign, int checkrebind);
+                     time_t now, int is_sign, int checkrebind, int checking_disabled);
 size_t answer_request(HEADER *header, char *limit, size_t qlen,  
                   struct in_addr local_addr, struct in_addr local_netmask, time_t now);
 int check_for_bogus_wildcard(HEADER *header, size_t qlen, char *name, 
@@ -764,6 +780,7 @@ int check_for_local_domain(char *name, time_t now);
 unsigned int questions_crc(HEADER *header, size_t plen, char *buff);
 size_t resize_packet(HEADER *header, size_t plen, 
                  unsigned char *pheader, size_t hlen);
+size_t add_mac(HEADER *header, size_t plen, char *limit, union mysockaddr *l3);
 
 /* util.c */
 void rand_init(void);
@@ -804,6 +821,8 @@ void flush_log(void);
 void read_opts (int argc, char **argv, char *compile_opts);
 char *option_string(unsigned char opt, int *is_ip, int *is_name);
 void reread_dhcp(void);
+void set_option_bool(unsigned int opt);
+struct hostsfile *expand_filelist(struct hostsfile *list);
 
 /* forward.c */
 void reply_query(int fd, int family, time_t now);
@@ -908,7 +927,7 @@ void send_via_bpf(struct dhcp_packet *mess, size_t len,
 #endif
 
 /* bpf.c or netlink.c */
-int iface_enumerate(void *parm, int (*ipv4_callback)(), int (*ipv6_callback)());
+int iface_enumerate(int family, void *parm, int (callback)());
 
 /* dbus.c */
 #ifdef HAVE_DBUS
index e086db722ff06edfa69bf98c3dd11fd3215aa219..c37ede3f60e41da6b568549c1f443b57b5c75a8e 100644 (file)
@@ -1,4 +1,4 @@
-/* dnsmasq is Copyright (c) 2000-2010 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2011 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
@@ -111,8 +111,8 @@ static void send_from(int fd, int nowild, char *packet, size_t len,
     }
 }
           
-static unsigned short search_servers(time_t now, struct all_addr **addrpp, 
-                                    unsigned short qtype, char *qdomain, int *type, char **domain, int *norebind)
+static unsigned int search_servers(time_t now, struct all_addr **addrpp, 
+                                    unsigned int qtype, char *qdomain, int *type, char **domain, int *norebind)
                              
 {
   /* If the query ends in the domain in one of our servers, set
@@ -122,13 +122,13 @@ static unsigned short search_servers(time_t now, struct all_addr **addrpp,
   unsigned int namelen = strlen(qdomain);
   unsigned int matchlen = 0;
   struct server *serv;
-  unsigned short flags = 0;
+  unsigned int flags = 0;
   
   for (serv = daemon->servers; serv; serv=serv->next)
     /* domain matches take priority over NODOTS matches */
     if ((serv->flags & SERV_FOR_NODOTS) && *type != SERV_HAS_DOMAIN && !strchr(qdomain, '.') && namelen != 0)
       {
-       unsigned short sflag = serv->addr.sa.sa_family == AF_INET ? F_IPV4 : F_IPV6; 
+       unsigned int sflag = serv->addr.sa.sa_family == AF_INET ? F_IPV4 : F_IPV6; 
        *type = SERV_FOR_NODOTS;
        if (serv->flags & SERV_NO_ADDR)
          flags = F_NXDOMAIN;
@@ -158,37 +158,57 @@ static unsigned short search_servers(time_t now, struct all_addr **addrpp,
          {
            if (serv->flags & SERV_NO_REBIND)   
              *norebind = 1;
-           else if (domainlen >= matchlen)
+           else
              {
-               unsigned short sflag = serv->addr.sa.sa_family == AF_INET ? F_IPV4 : F_IPV6;
-               *type = serv->flags & (SERV_HAS_DOMAIN | SERV_USE_RESOLV | SERV_NO_REBIND);
-               *domain = serv->domain;
-               matchlen = domainlen;
-               if (serv->flags & SERV_NO_ADDR)
-                 flags = F_NXDOMAIN;
-               else if (serv->flags & SERV_LITERAL_ADDRESS)
+               unsigned int sflag = serv->addr.sa.sa_family == AF_INET ? F_IPV4 : F_IPV6;
+               /* implement priority rules for --address and --server for same domain.
+                  --address wins if the address is for the correct AF
+                  --server wins otherwise. */
+               if (domainlen != 0 && domainlen == matchlen)
                  {
-                   if (sflag & qtype)
+                   if ((serv->flags & SERV_LITERAL_ADDRESS))
                      {
-                       flags = sflag;
-                       if (serv->addr.sa.sa_family == AF_INET) 
-                         *addrpp = (struct all_addr *)&serv->addr.in.sin_addr;
+                       if (!(sflag & qtype) && flags == 0)
+                         continue;
+                     }
+                   else
+                     {
+                       if (flags & (F_IPV4 | F_IPV6))
+                         continue;
+                     }
+                 }
+               
+               if (domainlen >= matchlen)
+                 {
+                   *type = serv->flags & (SERV_HAS_DOMAIN | SERV_USE_RESOLV | SERV_NO_REBIND);
+                   *domain = serv->domain;
+                   matchlen = domainlen;
+                   if (serv->flags & SERV_NO_ADDR)
+                     flags = F_NXDOMAIN;
+                   else if (serv->flags & SERV_LITERAL_ADDRESS)
+                     {
+                       if (sflag & qtype)
+                         {
+                           flags = sflag;
+                           if (serv->addr.sa.sa_family == AF_INET) 
+                             *addrpp = (struct all_addr *)&serv->addr.in.sin_addr;
 #ifdef HAVE_IPV6
-                       else
-                         *addrpp = (struct all_addr *)&serv->addr.in6.sin6_addr;
+                           else
+                             *addrpp = (struct all_addr *)&serv->addr.in6.sin6_addr;
 #endif
+                         }
+                       else if (!flags || (flags & F_NXDOMAIN))
+                         flags = F_NOERR;
                      }
-                   else if (!flags || (flags & F_NXDOMAIN))
-                     flags = F_NOERR;
-                 }
-               else
-                 flags = 0;
-             } 
+                   else
+                     flags = 0;
+                 } 
+             }
          }
       }
   
-  if (flags == 0 && !(qtype & F_BIGNAME) && 
-      (daemon->options & OPT_NODOTS_LOCAL) && !strchr(qdomain, '.') && namelen != 0)
+  if (flags == 0 && !(qtype & F_NSRR) && 
+      option_bool(OPT_NODOTS_LOCAL) && !strchr(qdomain, '.') && namelen != 0)
     /* don't forward simple names, make exception for NS queries and empty name. */
     flags = F_NXDOMAIN;
   
@@ -220,10 +240,13 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
   int type = 0, norebind = 0;
   struct all_addr *addrp = NULL;
   unsigned int crc = questions_crc(header, plen, daemon->namebuff);
-  unsigned short flags = 0;
-  unsigned short gotname = extract_request(header, plen, daemon->namebuff, NULL);
+  unsigned int flags = 0;
+  unsigned int gotname = extract_request(header, plen, daemon->namebuff, NULL);
   struct server *start = NULL;
     
+  /* RFC 4035: sect 4.6 para 2 */
+  header->ad = 0;
+
   /* may be no servers available. */
   if (!daemon->servers)
     forward = NULL;
@@ -232,7 +255,7 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
       /* retry on existing query, send to all available servers  */
       domain = forward->sentto->domain;
       forward->sentto->failed_queries++;
-      if (!(daemon->options & OPT_ORDER))
+      if (!option_bool(OPT_ORDER))
        {
          forward->forwardall = 1;
          daemon->last_server = NULL;
@@ -261,9 +284,13 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
          forward->fd = udpfd;
          forward->crc = crc;
          forward->forwardall = 0;
-         forward->norebind = norebind;
-         header->id = htons(forward->new_id);
+         if (norebind)
+           forward->flags |= FREC_NOREBIND;
+         if (header->cd)
+           forward->flags |= FREC_CHECKING_DISABLED;
 
+         header->id = htons(forward->new_id);
+         
          /* In strict_order mode, always try servers in the order 
             specified in resolv.conf, if a domain is given 
             always try all the available servers,
@@ -271,7 +298,7 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
          
          if (type == 0)
            {
-             if (daemon->options & OPT_ORDER)
+             if (option_bool(OPT_ORDER))
                start = daemon->servers;
              else if (!(start = daemon->last_server) ||
                       daemon->forwardcount++ > FORWARD_TEST ||
@@ -286,7 +313,7 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
          else
            {
              start = daemon->servers;
-             if (!(daemon->options & OPT_ORDER))
+             if (!option_bool(OPT_ORDER))
                forward->forwardall = 1;
            }
        }
@@ -300,7 +327,10 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
     {
       struct server *firstsentto = start;
       int forwarded = 0;
-
+      
+      if (udpaddr && option_bool(OPT_ADD_MAC))
+       plen = add_mac(header, plen, ((char *) header) + PACKETSZ, udpaddr);
+      
       while (1)
        { 
          /* only send to servers dealing with our domain.
@@ -389,14 +419,14 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
   if (udpfd != -1)
     {
       plen = setup_reply(header, plen, addrp, flags, daemon->local_ttl);
-      send_from(udpfd, daemon->options & OPT_NOWILD, (char *)header, plen, udpaddr, dst_addr, dst_iface);
+      send_from(udpfd, option_bool(OPT_NOWILD), (char *)header, plen, udpaddr, dst_addr, dst_iface);
     }
 
   return 0;
 }
 
 static size_t process_reply(HEADER *header, time_t now, 
-                           struct server *server, size_t n, int check_rebind)
+                           struct server *server, size_t n, int check_rebind, int checking_disabled)
 {
   unsigned char *pheader, *sizep;
   int munged = 0, is_sign;
@@ -416,6 +446,10 @@ static size_t process_reply(HEADER *header, time_t now,
        PUTSHORT(daemon->edns_pktsz, psave);
     }
 
+  /* RFC 4035 sect 4.6 para 3 */
+  if (!is_sign && !option_bool(OPT_DNSSEC))
+    header->ad = 0;
+
   if (header->opcode != QUERY || (header->rcode != NOERROR && header->rcode != NXDOMAIN))
     return n;
   
@@ -425,7 +459,7 @@ static size_t process_reply(HEADER *header, time_t now,
     {
       prettyprint_addr(&server->addr, daemon->namebuff);
       my_syslog(LOG_WARNING, _("nameserver %s refused to do a recursive query"), daemon->namebuff);
-      if (!(daemon->options & OPT_LOG))
+      if (!option_bool(OPT_LOG))
        server->flags |= SERV_WARNED_RECURSIVE;
     }  
     
@@ -450,7 +484,7 @@ static size_t process_reply(HEADER *header, time_t now,
          header->rcode = NOERROR;
        }
       
-      if (extract_addresses(header, n, daemon->namebuff, now, is_sign, check_rebind))
+      if (extract_addresses(header, n, daemon->namebuff, now, is_sign, check_rebind, checking_disabled))
        {
          my_syslog(LOG_WARNING, _("possible DNS-rebind attack detected: %s"), daemon->namebuff);
          munged = 1;
@@ -512,7 +546,7 @@ void reply_query(int fd, int family, time_t now)
   server = forward->sentto;
   
   if ((header->rcode == SERVFAIL || header->rcode == REFUSED) &&
-      !(daemon->options & OPT_ORDER) &&
+      !option_bool(OPT_ORDER) &&
       forward->forwardall == 0)
     /* for broken servers, attempt to send to another one. */
     {
@@ -554,7 +588,7 @@ void reply_query(int fd, int family, time_t now)
                break;
              }
        } 
-      if (!(daemon->options & OPT_ALL_SERVERS))
+      if (!option_bool(OPT_ALL_SERVERS))
        daemon->last_server = server;
     }
   
@@ -565,16 +599,16 @@ void reply_query(int fd, int family, time_t now)
   if (forward->forwardall == 0 || --forward->forwardall == 1 || 
       (header->rcode != REFUSED && header->rcode != SERVFAIL))
     {
-      int check_rebind = !forward->norebind;
+      int check_rebind = !(forward->flags & FREC_NOREBIND);
 
-      if (!(daemon->options & OPT_NO_REBIND))
+      if (!option_bool(OPT_NO_REBIND))
        check_rebind = 0;
       
-      if ((nn = process_reply(header, now, server, (size_t)n, check_rebind)))
+      if ((nn = process_reply(header, now, server, (size_t)n, check_rebind, forward->flags & FREC_CHECKING_DISABLED)))
        {
          header->id = htons(forward->orig_id);
          header->ra = 1; /* recursion if available */
-         send_from(forward->fd, daemon->options & OPT_NOWILD, daemon->packet, nn, 
+         send_from(forward->fd, option_bool(OPT_NOWILD), daemon->packet, nn, 
                    &forward->source, &forward->dest, forward->iface);
        }
       free_frec(forward); /* cancel */
@@ -614,7 +648,7 @@ void receive_query(struct listener *listen, time_t now)
   /* packet buffer overwritten */
   daemon->srv_save = NULL;
   
-  if (listen->family == AF_INET && (daemon->options & OPT_NOWILD))
+  if (listen->family == AF_INET && option_bool(OPT_NOWILD))
     {
       dst_addr_4 = listen->iface->addr.in.sin_addr;
       netmask = listen->iface->netmask;
@@ -649,8 +683,8 @@ void receive_query(struct listener *listen, time_t now)
   if (listen->family == AF_INET6)
     source_addr.in6.sin6_flowinfo = 0;
 #endif
-  
-  if (!(daemon->options & OPT_NOWILD))
+
+  if (!option_bool(OPT_NOWILD))
     {
       struct ifreq ifr;
 
@@ -721,7 +755,7 @@ void receive_query(struct listener *listen, time_t now)
        return;
       
       if (listen->family == AF_INET &&
-         (daemon->options & OPT_LOCALISE) &&
+         option_bool(OPT_LOCALISE) &&
          ioctl(listen->fd, SIOCGIFNETMASK, &ifr) == -1)
        return;
       
@@ -748,7 +782,7 @@ void receive_query(struct listener *listen, time_t now)
                      dst_addr_4, netmask, now);
   if (m >= 1)
     {
-      send_from(listen->fd, daemon->options & OPT_NOWILD, (char *)header, 
+      send_from(listen->fd, option_bool(OPT_NOWILD), (char *)header, 
                m, &source_addr, &dst_addr, if_index);
       daemon->local_answer++;
     }
@@ -766,7 +800,9 @@ void receive_query(struct listener *listen, time_t now)
 unsigned char *tcp_request(int confd, time_t now,
                           struct in_addr local_addr, struct in_addr netmask)
 {
-  int size = 0, norebind = 0;
+  size_t size = 0;
+  int norebind = 0;
+  int checking_disabled;
   size_t m;
   unsigned short qtype, gotname;
   unsigned char c1, c2;
@@ -787,6 +823,12 @@ unsigned char *tcp_request(int confd, time_t now,
        continue;
       
       header = (HEADER *)packet;
+
+      /* save state of "cd" flag in query */
+      checking_disabled = header->cd;
+       
+      /* RFC 4035: sect 4.6 para 2 */
+      header->ad = 0;
       
       if ((gotname = extract_request(header, (unsigned int)size, daemon->namebuff, &qtype)))
        {
@@ -819,15 +861,24 @@ unsigned char *tcp_request(int confd, time_t now,
       
       if (m == 0)
        {
-         unsigned short flags = 0;
+         unsigned int flags = 0;
          struct all_addr *addrp = NULL;
          int type = 0;
          char *domain = NULL;
-         
+          
+         if (option_bool(OPT_ADD_MAC))
+           {
+             union mysockaddr peer_addr;
+             socklen_t peer_len = sizeof(union mysockaddr);
+             
+             if (getpeername(confd, (struct sockaddr *)&peer_addr, &peer_len) != -1)
+               size = add_mac(header, size, ((char *) header) + 65536, &peer_addr);
+           }
+      
          if (gotname)
            flags = search_servers(now, &addrp, gotname, daemon->namebuff, &type, &domain, &norebind);
          
-         if (type != 0  || (daemon->options & OPT_ORDER) || !daemon->last_server)
+         if (type != 0  || option_bool(OPT_ORDER) || !daemon->last_server)
            last_server = daemon->servers;
          else
            last_server = daemon->last_server;
@@ -906,7 +957,8 @@ unsigned char *tcp_request(int confd, time_t now,
                     someone might be attempting to insert bogus values into the cache by 
                     sending replies containing questions and bogus answers. */
                  if (crc == questions_crc(header, (unsigned int)m, daemon->namebuff))
-                   m = process_reply(header, now, last_server, (unsigned int)m, (daemon->options & OPT_NO_REBIND) && !norebind );
+                   m = process_reply(header, now, last_server, (unsigned int)m, 
+                                     option_bool(OPT_NO_REBIND) && !norebind, checking_disabled);
                  
                  break;
                }
@@ -938,6 +990,7 @@ static struct frec *allocate_frec(time_t now)
       f->time = now;
       f->sentto = NULL;
       f->rfd4 = NULL;
+      f->flags = 0;
 #ifdef HAVE_IPV6
       f->rfd6 = NULL;
 #endif
@@ -990,6 +1043,7 @@ static void free_frec(struct frec *f)
     
   f->rfd4 = NULL;
   f->sentto = NULL;
+  f->flags = 0;
   
 #ifdef HAVE_IPV6
   if (f->rfd6 && --(f->rfd6->refcount) == 0)
index efc0ab3f7b691f4646f5b247ea23e382c413cdcd..93f99f062d61c8c17265f4208495e59d03a38370 100644 (file)
@@ -1,4 +1,4 @@
-/* dnsmasq is Copyright (c) 2000-2010 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2011 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
@@ -79,14 +79,14 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd)
   sigaction(SIGTERM, &sigact, NULL);
   sigaction(SIGALRM, &sigact, NULL);
 
-  if (!(daemon->options & OPT_DEBUG) && uid != 0)
+  if (!option_bool(OPT_DEBUG) && uid != 0)
     {
       gid_t dummy;
       if (setgroups(0, &dummy) == -1 || 
          setgid(gid) == -1 || 
          setuid(uid) == -1)
        {
-         if (daemon->options & OPT_NO_FORK)
+         if (option_bool(OPT_NO_FORK))
            /* send error to daemon process if no-fork */
            send_event(event_fd, EVENT_HUSER_ERR, errno);
          else
index 4443cf21c51c6933af2086b8764467baccccb6d0..cfa7543fbb264675cd2a685746e0d0882ed2bdc2 100644 (file)
@@ -1,4 +1,4 @@
-/* dnsmasq is Copyright (c) 2000-2010 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2011 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
@@ -37,7 +37,7 @@ void lease_init(time_t now)
  
   leases_left = daemon->dhcp_max;
 
-  if (daemon->options & OPT_LEASE_RO)
+  if (option_bool(OPT_LEASE_RO))
     {
       /* run "<lease_change_script> init" once to get the
         initial state of the database. If leasefile-ro is
@@ -254,7 +254,7 @@ void lease_update_dns(void)
          if (lease->fqdn)
            cache_add_dhcp_entry(lease->fqdn, &lease->addr, lease->expires);
             
-         if (!(daemon->options & OPT_DHCP_FQDN) && lease->hostname)
+         if (!option_bool(OPT_DHCP_FQDN) && lease->hostname)
            cache_add_dhcp_entry(lease->hostname, &lease->addr, lease->expires);
        }
       
@@ -470,7 +470,7 @@ void lease_set_hostname(struct dhcp_lease *lease, char *name, int auth)
       /* Depending on mode, we check either unqualified name or FQDN. */
       for (lease_tmp = leases; lease_tmp; lease_tmp = lease_tmp->next)
        {
-         if (daemon->options & OPT_DHCP_FQDN)
+         if (option_bool(OPT_DHCP_FQDN))
            {
              if (!new_fqdn || !lease_tmp->fqdn || !hostname_isequal(lease_tmp->fqdn, new_fqdn) )
                continue;
@@ -534,7 +534,7 @@ int do_script_run(time_t now)
 #ifdef HAVE_DBUS
   /* If we're going to be sending DBus signals, but the connection is not yet up,
      delay everything until it is. */
-  if ((daemon->options & OPT_DBUS) && !daemon->dbus)
+  if (option_bool(OPT_DBUS) && !daemon->dbus)
     return 0;
 #endif
 
@@ -586,7 +586,7 @@ int do_script_run(time_t now)
   
   for (lease = leases; lease; lease = lease->next)
     if (lease->new || lease->changed || 
-       (lease->aux_changed && (daemon->options & OPT_LEASE_RO)))
+       (lease->aux_changed && option_bool(OPT_LEASE_RO)))
       {
 #ifdef HAVE_SCRIPT
        queue_script(lease->new ? ACTION_ADD : ACTION_OLD, lease, 
index 33a0de35fd6f92e42e1f06926f21a16ceb5673d0..6c8993b8be5b1e4bf1e9848292a607b8b3a74b61 100644 (file)
--- a/src/log.c
+++ b/src/log.c
@@ -1,4 +1,4 @@
-/* dnsmasq is Copyright (c) 2000-2010 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2011 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
@@ -55,12 +55,12 @@ int log_start(struct passwd *ent_pw, int errfd)
 {
   int ret = 0;
 
-  echo_stderr = !!(daemon->options & OPT_DEBUG);
+  echo_stderr = option_bool(OPT_DEBUG);
 
   if (daemon->log_fac != -1)
     log_fac = daemon->log_fac;
 #ifdef LOG_LOCAL0
-  else if (daemon->options & OPT_DEBUG)
+  else if (option_bool(OPT_DEBUG))
     log_fac = LOG_LOCAL0;
 #endif
 
@@ -327,7 +327,11 @@ void my_syslog(int priority, const char *format, ...)
       if (!log_to_file)
        p += sprintf(p, "<%d>", priority | log_fac);
 
-      p += sprintf(p, "%.15s dnsmasq%s[%d]: ", ctime(&time_now) + 4, func, (int)pid);
+      /* Omit timestamp for default daemontools situation */
+      if (!log_stderr || !option_bool(OPT_NO_FORK)) 
+       p += sprintf(p, "%.15s ", ctime(&time_now) + 4);
+      
+      p += sprintf(p, "dnsmasq%s[%d]: ", func, (int)pid);
         
       len = p - entry->payload;
       va_start(ap, format);  
@@ -398,12 +402,13 @@ void check_log_writer(fd_set *set)
 
 void flush_log(void)
 {
-  /* write until queue empty */
+  /* write until queue empty, but don't loop forever if there's
+   no connection to the syslog in existance */
   while (log_fd != -1)
     {
       struct timespec waiter;
       log_write();
-      if (!entries)
+      if (!entries || !connection_good)
        {
          close(log_fd);        
          break;
index 0fc4a144090aa59053d3bb73661aa1ad01c4f5fa..f6da7db82179df7c216521858f4c22df938e5ee2 100644 (file)
@@ -1,4 +1,4 @@
-/* dnsmasq is Copyright (c) 2000-2010 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2011 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
 #  include <linux/if_addr.h>
 #endif
 
+#ifndef NDA_RTA
+#  define NDA_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ndmsg)))) 
+#endif 
+
 static struct iovec iov;
 static u32 netlink_pid;
 
@@ -122,13 +126,14 @@ static ssize_t netlink_recv(void)
   return rc;
 }
   
-int iface_enumerate(void *parm, int (*ipv4_callback)(), int (*ipv6_callback)())
+
+/* family = AF_UNSPEC finds ARP table entries. */
+int iface_enumerate(int family, void *parm, int (*callback)())
 {
   struct sockaddr_nl addr;
   struct nlmsghdr *h;
   ssize_t len;
   static unsigned int seq = 0;
-  int family = AF_INET;
 
   struct {
     struct nlmsghdr nlh;
@@ -142,7 +147,7 @@ int iface_enumerate(void *parm, int (*ipv4_callback)(), int (*ipv6_callback)())
 
  again:
   req.nlh.nlmsg_len = sizeof(req);
-  req.nlh.nlmsg_type = RTM_GETADDR;
+  req.nlh.nlmsg_type = family == AF_UNSPEC ? RTM_GETNEIGH : RTM_GETADDR;
   req.nlh.nlmsg_flags = NLM_F_ROOT | NLM_F_MATCH | NLM_F_REQUEST | NLM_F_ACK; 
   req.nlh.nlmsg_pid = 0;
   req.nlh.nlmsg_seq = ++seq;
@@ -173,66 +178,84 @@ int iface_enumerate(void *parm, int (*ipv4_callback)(), int (*ipv6_callback)())
        else if (h->nlmsg_type == NLMSG_ERROR)
          nl_err(h);
        else if (h->nlmsg_type == NLMSG_DONE)
-         {
-#ifdef HAVE_IPV6
-           if (family == AF_INET && ipv6_callback)
-             {
-               family = AF_INET6;
-               goto again;
-             }
-#endif
-           return 1;
-         }
-       else if (h->nlmsg_type == RTM_NEWADDR)
+         return 1;
+       else if (h->nlmsg_type == RTM_NEWADDR && family != AF_UNSPEC)
          {
            struct ifaddrmsg *ifa = NLMSG_DATA(h);  
            struct rtattr *rta = IFA_RTA(ifa);
            unsigned int len1 = h->nlmsg_len - NLMSG_LENGTH(sizeof(*ifa));
            
-           if (ifa->ifa_family == AF_INET)
+           if (ifa->ifa_family == family)
              {
-               struct in_addr netmask, addr, broadcast;
-               
-               netmask.s_addr = htonl(0xffffffff << (32 - ifa->ifa_prefixlen));
-               addr.s_addr = 0;
-               broadcast.s_addr = 0;
-               
-               while (RTA_OK(rta, len1))
+               if (ifa->ifa_family == AF_INET)
                  {
-                   if (rta->rta_type == IFA_LOCAL)
-                     addr = *((struct in_addr *)(rta+1));
-                   else if (rta->rta_type == IFA_BROADCAST)
-                     broadcast = *((struct in_addr *)(rta+1));
+                   struct in_addr netmask, addr, broadcast;
+                   
+                   netmask.s_addr = htonl(0xffffffff << (32 - ifa->ifa_prefixlen));
+                   addr.s_addr = 0;
+                   broadcast.s_addr = 0;
                    
-                   rta = RTA_NEXT(rta, len1);
+                   while (RTA_OK(rta, len1))
+                     {
+                       if (rta->rta_type == IFA_LOCAL)
+                         addr = *((struct in_addr *)(rta+1));
+                       else if (rta->rta_type == IFA_BROADCAST)
+                         broadcast = *((struct in_addr *)(rta+1));
+                       
+                       rta = RTA_NEXT(rta, len1);
+                     }
+                   
+                   if (addr.s_addr)
+                     if (!((*callback)(addr, ifa->ifa_index, netmask, broadcast, parm)))
+                       return 0;
                  }
-               
-               if (addr.s_addr && ipv4_callback)
-                 if (!((*ipv4_callback)(addr, ifa->ifa_index, netmask, broadcast, parm)))
-                   return 0;
-             }
 #ifdef HAVE_IPV6
-           else if (ifa->ifa_family == AF_INET6)
-             {
-               struct in6_addr *addrp = NULL;
-               while (RTA_OK(rta, len1))
+               else if (ifa->ifa_family == AF_INET6)
                  {
-                   if (rta->rta_type == IFA_ADDRESS)
-                     addrp = ((struct in6_addr *)(rta+1)); 
+                   struct in6_addr *addrp = NULL;
+                   while (RTA_OK(rta, len1))
+                     {
+                       if (rta->rta_type == IFA_ADDRESS)
+                         addrp = ((struct in6_addr *)(rta+1)); 
+                       
+                       rta = RTA_NEXT(rta, len1);
+                     }
                    
-                   rta = RTA_NEXT(rta, len1);
+                   if (addrp)
+                     if (!((*callback)(addrp, ifa->ifa_index, ifa->ifa_index, parm)))
+                       return 0;
                  }
-               
-               if (addrp && ipv6_callback)
-                 if (!((*ipv6_callback)(addrp, ifa->ifa_index, ifa->ifa_index, parm)))
-                   return 0;
-             }
 #endif
+             }
          }
+       else if (h->nlmsg_type == RTM_NEWNEIGH && family == AF_UNSPEC)
+         {
+           struct ndmsg *neigh = NLMSG_DATA(h);  
+           struct rtattr *rta = NDA_RTA(neigh);
+           unsigned int len1 = h->nlmsg_len - NLMSG_LENGTH(sizeof(*neigh));
+           size_t maclen = 0;
+           char *inaddr = NULL, *mac = NULL;
+           
+           while (RTA_OK(rta, len1))
+             {
+               if (rta->rta_type == NDA_DST)
+                 inaddr = (char *)(rta+1);
+               else if (rta->rta_type == NDA_LLADDR)
+                 {
+                   maclen = rta->rta_len - sizeof(struct rtattr);
+                   mac = (char *)(rta+1);
+                 }
+               
+               rta = RTA_NEXT(rta, len1);
+             }
+
+           if (inaddr && mac)
+             if (!((*callback)(neigh->ndm_family, inaddr, mac, maclen, parm)))
+               return 0;
+         }     
     }
 }
 
-
 void netlink_multicast(void)
 {
   ssize_t len;
index a144a7a21294b98b196ed4ced88490d821696aeb..7b2e905e4cf46cc1c30d4706b591b117dc758364 100644 (file)
@@ -1,4 +1,4 @@
-/* dnsmasq is Copyright (c) 2000-2010 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2011 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
@@ -34,6 +34,67 @@ int indextoname(int fd, int index, char *name)
   return 1;
 }
 
+
+#elif defined(HAVE_SOLARIS_NETWORK)
+
+#include <zone.h>
+#include <alloca.h>
+#ifndef LIFC_UNDER_IPMP
+#  define LIFC_UNDER_IPMP 0
+#endif
+
+int indextoname(int fd, int index, char *name)
+{
+  int64_t lifc_flags;
+  struct lifnum lifn;
+  int numifs, bufsize, i;
+  struct lifconf lifc;
+  struct lifreq *lifrp;
+  
+  if (index == 0)
+    return 0;
+  
+  if (getzoneid() == GLOBAL_ZONEID) 
+    {
+      if (!if_indextoname(index, name))
+       return 0;
+      return 1;
+    }
+  
+  lifc_flags = LIFC_NOXMIT | LIFC_TEMPORARY | LIFC_ALLZONES | LIFC_UNDER_IPMP;
+  lifn.lifn_family = AF_UNSPEC;
+  lifn.lifn_flags = lifc_flags;
+  if (ioctl(fd, SIOCGLIFNUM, &lifn) < 0) 
+    return 0;
+  
+  numifs = lifn.lifn_count;
+  bufsize = numifs * sizeof(struct lifreq);
+  
+  lifc.lifc_family = AF_UNSPEC;
+  lifc.lifc_flags = lifc_flags;
+  lifc.lifc_len = bufsize;
+  lifc.lifc_buf = alloca(bufsize);
+  
+  if (ioctl(fd, SIOCGLIFCONF, &lifc) < 0)  
+    return 0;
+  
+  lifrp = lifc.lifc_req;
+  for (i = lifc.lifc_len / sizeof(struct lifreq); i; i--, lifrp++) 
+    {
+      struct lifreq lifr;
+      strncpy(lifr.lifr_name, lifrp->lifr_name, IF_NAMESIZE);
+      if (ioctl(fd, SIOCGLIFINDEX, &lifr) < 0) 
+       return 0;
+      
+      if (lifr.lifr_index == index) {
+       strncpy(name, lifr.lifr_name, IF_NAMESIZE);
+       return 1;
+      }
+    }
+  return 0;
+}
+
+
 #else
 
 int indextoname(int fd, int index, char *name)
@@ -188,15 +249,14 @@ static int iface_allowed(struct irec **irecp, int if_index,
   
 #ifdef HAVE_TFTP
   /* implement wierd TFTP service rules */
-  if (addr->sa.sa_family == AF_INET)
-    for (ir = daemon->tftp_interfaces; ir; ir = ir->next)
-      if (strcmp(ir->interface, ifr.ifr_name) == 0)
-       {
-         tftp_ok = 1;
-         break;
-       }
+  for (ir = daemon->tftp_interfaces; ir; ir = ir->next)
+    if (strcmp(ir->interface, ifr.ifr_name) == 0)
+      {
+       tftp_ok = 1;
+       break;
+      }
 #endif
-
+  
   if (!ir)
     {
       if (addr->sa.sa_family == AF_INET &&
@@ -276,10 +336,11 @@ static int iface_allowed_v4(struct in_addr local, int if_index,
 int enumerate_interfaces(void)
 {
 #ifdef HAVE_IPV6
-  return iface_enumerate(&daemon->interfaces, iface_allowed_v4, iface_allowed_v6);
-#else
-  return iface_enumerate(&daemon->interfaces, iface_allowed_v4, NULL);
+  if (!iface_enumerate(AF_INET6, &daemon->interfaces, iface_allowed_v6))
+    return 0; 
 #endif
+
+  return iface_enumerate(AF_INET, &daemon->interfaces, iface_allowed_v4); 
 }
 
 /* set NONBLOCK bit on fd: See Stevens 16.6 */
@@ -294,233 +355,207 @@ int fix_fd(int fd)
   return 1;
 }
 
-#if defined(HAVE_IPV6)
-static int create_ipv6_listener(struct listener **link, int port)
+static int make_sock(union mysockaddr *addr, int type)
 {
-  union mysockaddr addr;
-  int tcpfd, fd;
-  struct listener *l;
-  int opt = 1;
-
-  memset(&addr, 0, sizeof(addr));
-  addr.in6.sin6_family = AF_INET6;
-  addr.in6.sin6_addr = in6addr_any;
-  addr.in6.sin6_port = htons(port);
-#ifdef HAVE_SOCKADDR_SA_LEN
-  addr.in6.sin6_len = sizeof(addr.in6);
+  int family = addr->sa.sa_family;
+  int fd, rc, opt = 1;
+#ifdef HAVE_IPV6
+  static int dad_count = 0;
 #endif
-
-  /* No error of the kernel doesn't support IPv6 */
-  if ((fd = socket(AF_INET6, SOCK_DGRAM, 0)) == -1)
-    return (errno == EPROTONOSUPPORT ||
-           errno == EAFNOSUPPORT ||
-           errno == EINVAL);
   
-  if ((tcpfd = socket(AF_INET6, SOCK_STREAM, 0)) == -1)
-    return 0;
-      
-  if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) == -1 ||
-      setsockopt(tcpfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) == -1 ||
-      setsockopt(fd, IPV6_LEVEL, IPV6_V6ONLY, &opt, sizeof(opt)) == -1 ||
-      setsockopt(tcpfd, IPV6_LEVEL, IPV6_V6ONLY, &opt, sizeof(opt)) == -1 ||
-      !fix_fd(fd) ||
-      !fix_fd(tcpfd) ||
-      bind(tcpfd, (struct sockaddr *)&addr, sa_len(&addr)) == -1 ||
-      listen(tcpfd, 5) == -1 ||
-      bind(fd, (struct sockaddr *)&addr, sa_len(&addr)) == -1) 
-    return 0;
-
-  /* The API changed around Linux 2.6.14 but the old ABI is still supported:
-     handle all combinations of headers and kernel.
-     OpenWrt note that this fixes the problem addressed by your very broken patch. */
+  if ((fd = socket(family, type, 0)) == -1)
+    {
+      int port;
 
-  daemon->v6pktinfo = IPV6_PKTINFO;
+      /* No error if the kernel just doesn't support this IP flavour */
+      if (errno == EPROTONOSUPPORT ||
+         errno == EAFNOSUPPORT ||
+         errno == EINVAL)
+       return -1;
+      
+    err:
+      port = prettyprint_addr(addr, daemon->namebuff);
+      if (!option_bool(OPT_NOWILD))
+       sprintf(daemon->namebuff, "port %d", port);
+      die(_("failed to create listening socket for %s: %s"), 
+         daemon->namebuff, EC_BADNET);
+    }  
 
-#ifdef IPV6_RECVPKTINFO
-#  ifdef IPV6_2292PKTINFO
-  if (setsockopt(fd, IPV6_LEVEL, IPV6_RECVPKTINFO, &opt, sizeof(opt)) == -1)
+  if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) == -1 || !fix_fd(fd))
+    goto err;
+  
+#ifdef HAVE_IPV6
+  if (family == AF_INET6 && setsockopt(fd, IPV6_LEVEL, IPV6_V6ONLY, &opt, sizeof(opt)) == -1)
+    goto err;
+#endif
+  
+  while (1)
     {
-      if (errno == ENOPROTOOPT && setsockopt(fd, IPV6_LEVEL, IPV6_2292PKTINFO, &opt, sizeof(opt)) != -1)
-       daemon->v6pktinfo = IPV6_2292PKTINFO;
-      else
-       return 0;
-    }
-#  else
-  if (setsockopt(fd, IPV6_LEVEL, IPV6_RECVPKTINFO, &opt, sizeof(opt)) == -1)
-    return 0;
-#  endif 
-#else
-  if (setsockopt(fd, IPV6_LEVEL, IPV6_PKTINFO, &opt, sizeof(opt)) == -1)
-    return 0;
+      if ((rc = bind(fd, (struct sockaddr *)addr, sa_len(addr))) != -1)
+       break;
+      
+#ifdef HAVE_IPV6
+      /* An interface may have an IPv6 address which is still undergoing DAD. 
+        If so, the bind will fail until the DAD completes, so we try over 20 seconds
+        before failing. */
+      if (family == AF_INET6 && 
+         (errno == ENODEV || errno == EADDRNOTAVAIL) && 
+         dad_count++ < DAD_WAIT)
+       {
+         sleep(1);
+         continue;
+       }
 #endif
+      break;
+    }
   
-  l = safe_malloc(sizeof(struct listener));
-  l->fd = fd;
-  l->tcpfd = tcpfd;
-  l->tftpfd = -1;
-  l->family = AF_INET6;
-  l->next = NULL;
-  *link = l;
+  if (rc == -1)
+    goto err;
   
-  return 1;
-}
+  if (type == SOCK_STREAM)
+    {
+      if (listen(fd, 5) == -1)
+       goto err;
+    }
+  else if (!option_bool(OPT_NOWILD))
+    {
+      if (family == AF_INET)
+       {
+#if defined(HAVE_LINUX_NETWORK) 
+         if (setsockopt(fd, SOL_IP, IP_PKTINFO, &opt, sizeof(opt)) == -1)
+           goto err;
+#elif defined(IP_RECVDSTADDR) && defined(IP_RECVIF)
+         if (setsockopt(fd, IPPROTO_IP, IP_RECVDSTADDR, &opt, sizeof(opt)) == -1 ||
+             setsockopt(fd, IPPROTO_IP, IP_RECVIF, &opt, sizeof(opt)) == -1)
+           goto err;
+#endif
+       }
+#ifdef HAVE_IPV6
+      else
+       {
+         /* The API changed around Linux 2.6.14 but the old ABI is still supported:
+            handle all combinations of headers and kernel.
+            OpenWrt note that this fixes the problem addressed by your very broken patch. */
+         daemon->v6pktinfo = IPV6_PKTINFO;
+         
+#  ifdef IPV6_RECVPKTINFO
+#    ifdef IPV6_2292PKTINFO
+         if (setsockopt(fd, IPV6_LEVEL, IPV6_RECVPKTINFO, &opt, sizeof(opt)) == -1)
+           {
+             if (errno == ENOPROTOOPT && setsockopt(fd, IPV6_LEVEL, IPV6_2292PKTINFO, &opt, sizeof(opt)) != -1)
+               daemon->v6pktinfo = IPV6_2292PKTINFO;
+             else
+               goto err;
+           }
+#    else
+         if (setsockopt(fd, IPV6_LEVEL, IPV6_RECVPKTINFO, &opt, sizeof(opt)) == -1)
+           goto err;
+#    endif 
+#  else
+         if (setsockopt(fd, IPV6_LEVEL, IPV6_PKTINFO, &opt, sizeof(opt)) == -1)
+           goto err;
+#  endif
+       }
 #endif
+    }
 
-struct listener *create_wildcard_listeners(void)
+  return fd;
+}
+      
+static struct listener *create_listeners(union mysockaddr *addr, int do_tftp)
 {
-  union mysockaddr addr;
-  int opt = 1;
-  struct listener *l, *l6 = NULL;
-  int tcpfd = -1, fd = -1, tftpfd = -1;
-
-  memset(&addr, 0, sizeof(addr));
-  addr.in.sin_family = AF_INET;
-  addr.in.sin_addr.s_addr = INADDR_ANY;
-  addr.in.sin_port = htons(daemon->port);
-#ifdef HAVE_SOCKADDR_SA_LEN
-  addr.in.sin_len = sizeof(struct sockaddr_in);
-#endif
+  struct listener *l = NULL;
+  int fd = -1, tcpfd = -1, tftpfd = -1;
 
   if (daemon->port != 0)
     {
-      
-      if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1 ||
-         (tcpfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
-       return NULL;
-      
-      if (setsockopt(tcpfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) == -1 ||
-         bind(tcpfd, (struct sockaddr *)&addr, sa_len(&addr)) == -1 ||
-         listen(tcpfd, 5) == -1 ||
-         !fix_fd(tcpfd) ||
-#ifdef HAVE_IPV6
-         !create_ipv6_listener(&l6, daemon->port) ||
-#endif
-         setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) == -1 ||
-         !fix_fd(fd) ||
-#if defined(HAVE_LINUX_NETWORK) 
-         setsockopt(fd, SOL_IP, IP_PKTINFO, &opt, sizeof(opt)) == -1 ||
-#elif defined(IP_RECVDSTADDR) && defined(IP_RECVIF)
-         setsockopt(fd, IPPROTO_IP, IP_RECVDSTADDR, &opt, sizeof(opt)) == -1 ||
-         setsockopt(fd, IPPROTO_IP, IP_RECVIF, &opt, sizeof(opt)) == -1 ||
-#endif 
-         bind(fd, (struct sockaddr *)&addr, sa_len(&addr)) == -1)
-       return NULL;
+      fd = make_sock(addr, SOCK_DGRAM);
+      tcpfd = make_sock(addr, SOCK_STREAM);
     }
   
 #ifdef HAVE_TFTP
-  if (daemon->tftp_unlimited || daemon->tftp_interfaces)
+  if (do_tftp)
     {
-      addr.in.sin_port = htons(TFTP_PORT);
-      if ((tftpfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
-       return NULL;
-      
-      if (!fix_fd(tftpfd) ||
-#if defined(HAVE_LINUX_NETWORK) 
-         setsockopt(tftpfd, SOL_IP, IP_PKTINFO, &opt, sizeof(opt)) == -1 ||
-#elif defined(IP_RECVDSTADDR) && defined(IP_RECVIF)
-         setsockopt(tftpfd, IPPROTO_IP, IP_RECVDSTADDR, &opt, sizeof(opt)) == -1 ||
-         setsockopt(tftpfd, IPPROTO_IP, IP_RECVIF, &opt, sizeof(opt)) == -1 ||
-#endif 
-         bind(tftpfd, (struct sockaddr *)&addr, sa_len(&addr)) == -1)
-       return NULL;
+      if (addr->sa.sa_family == AF_INET)
+       {
+         /* port must be restored to DNS port for TCP code */
+         short save = addr->in.sin_port;
+         addr->in.sin_port = htons(TFTP_PORT);
+         tftpfd = make_sock(addr, SOCK_DGRAM);
+         addr->in.sin_port = save;
+       }
+#  ifdef HAVE_IPV6
+      else
+       {
+         short save = addr->in6.sin6_port;
+         addr->in6.sin6_port = htons(TFTP_PORT);
+         tftpfd = make_sock(addr, SOCK_DGRAM);
+         addr->in6.sin6_port = save;
+       }  
+#  endif
     }
 #endif
-  
-  l = safe_malloc(sizeof(struct listener));
-  l->family = AF_INET;
-  l->fd = fd;
-  l->tcpfd = tcpfd;
-  l->tftpfd = tftpfd;
-  l->next = l6;
+
+  if (fd != -1 || tcpfd != -1 || tftpfd != -1)
+    {
+      l = safe_malloc(sizeof(struct listener));
+      l->next = NULL;
+      l->family = addr->sa.sa_family;
+      l->fd = fd;
+      l->tcpfd = tcpfd;
+      l->tftpfd = tftpfd;
+    }
 
   return l;
 }
 
-struct listener *create_bound_listeners(void)
+struct listener *create_wildcard_listeners(void)
 {
-  struct listener *listeners = NULL;
-  struct irec *iface;
-  int rc, opt = 1;
-#ifdef HAVE_IPV6
-  static int dad_count = 0;
-#endif
+  union mysockaddr addr;
+  struct listener *l;
+  int tftp_enabled = daemon->tftp_unlimited || daemon->tftp_interfaces; 
 
-  for (iface = daemon->interfaces; iface; iface = iface->next)
-    {
-      struct listener *new = safe_malloc(sizeof(struct listener));
-      new->family = iface->addr.sa.sa_family;
-      new->iface = iface;
-      new->next = listeners;
-      new->tftpfd = -1;
-      new->tcpfd = -1;
-      new->fd = -1;
-      listeners = new;
-
-      if (daemon->port != 0)
-       {
-         if ((new->tcpfd = socket(iface->addr.sa.sa_family, SOCK_STREAM, 0)) == -1 ||
-             (new->fd = socket(iface->addr.sa.sa_family, SOCK_DGRAM, 0)) == -1 ||
-             setsockopt(new->fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) == -1 ||
-             setsockopt(new->tcpfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) == -1 ||
-             !fix_fd(new->tcpfd) ||
-             !fix_fd(new->fd))
-           die(_("failed to create listening socket: %s"), NULL, EC_BADNET);
-         
-#ifdef HAVE_IPV6
-         if (iface->addr.sa.sa_family == AF_INET6)
-           {
-             if (setsockopt(new->fd, IPV6_LEVEL, IPV6_V6ONLY, &opt, sizeof(opt)) == -1 ||
-                 setsockopt(new->tcpfd, IPV6_LEVEL, IPV6_V6ONLY, &opt, sizeof(opt)) == -1)
-               die(_("failed to set IPV6 options on listening socket: %s"), NULL, EC_BADNET);
-           }
+  memset(&addr, 0, sizeof(addr));
+#ifdef HAVE_SOCKADDR_SA_LEN
+  addr.in.sin_len = sizeof(addr.in);
 #endif
+  addr.in.sin_family = AF_INET;
+  addr.in.sin_addr.s_addr = INADDR_ANY;
+  addr.in.sin_port = htons(daemon->port);
+
+  l = create_listeners(&addr, tftp_enabled);
 
-         while(1)
-           {
-             if ((rc = bind(new->fd, &iface->addr.sa, sa_len(&iface->addr))) != -1)
-               break;
-             
 #ifdef HAVE_IPV6
-             /* An interface may have an IPv6 address which is still undergoing DAD. 
-                If so, the bind will fail until the DAD completes, so we try over 20 seconds
-                before failing. */
-             if (iface->addr.sa.sa_family == AF_INET6 && (errno == ENODEV || errno == EADDRNOTAVAIL) && 
-                 dad_count++ < DAD_WAIT)
-               {
-                 sleep(1);
-                 continue;
-               }
+  memset(&addr, 0, sizeof(addr));
+#  ifdef HAVE_SOCKADDR_SA_LEN
+  addr.in6.sin6_len = sizeof(addr.in6);
+#  endif
+  addr.in6.sin6_family = AF_INET6;
+  addr.in6.sin6_addr = in6addr_any;
+  addr.in6.sin6_port = htons(daemon->port);
+  
+  if (l) 
+    l->next = create_listeners(&addr, tftp_enabled);
+  else 
+    l = create_listeners(&addr, tftp_enabled);
 #endif
-             break;
-           }
-         
-         if (rc == -1 || bind(new->tcpfd, &iface->addr.sa, sa_len(&iface->addr)) == -1)
-           {
-             prettyprint_addr(&iface->addr, daemon->namebuff);
-             die(_("failed to bind listening socket for %s: %s"), 
-                 daemon->namebuff, EC_BADNET);
-           }
-           
-         if (listen(new->tcpfd, 5) == -1)
-           die(_("failed to listen on socket: %s"), NULL, EC_BADNET);
-       }
 
-#ifdef HAVE_TFTP
-      if (iface->addr.sa.sa_family == AF_INET && iface->tftp_ok)
-       {
-         short save = iface->addr.in.sin_port;
-         iface->addr.in.sin_port = htons(TFTP_PORT);
-         if ((new->tftpfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1 ||
-             setsockopt(new->tftpfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) == -1 ||
-             !fix_fd(new->tftpfd) ||
-             bind(new->tftpfd, &iface->addr.sa, sa_len(&iface->addr)) == -1)
-           die(_("failed to create TFTP socket: %s"), NULL, EC_BADNET);
-         iface->addr.in.sin_port = save;
-       }
-#endif
+  return l;
+}
 
-    }
+struct listener *create_bound_listeners(void)
+{
+  struct listener *new, *listeners = NULL;
+  struct irec *iface;
 
+  for (iface = daemon->interfaces; iface; iface = iface->next)
+    if ((new = create_listeners(&iface->addr, iface->tftp_ok)))
+      {
+       new->iface = iface;
+       new->next = listeners;
+       listeners = new;
+      }
+  
   return listeners;
 }
 
@@ -700,7 +735,7 @@ void pre_allocate_sfds(void)
     if (!(srv->flags & (SERV_LITERAL_ADDRESS | SERV_NO_ADDR | SERV_USE_RESOLV | SERV_NO_REBIND)) &&
        !allocate_sfd(&srv->source_addr, srv->interface) &&
        errno != 0 &&
-       (daemon->options & OPT_NOWILD))
+       option_bool(OPT_NOWILD))
       {
        prettyprint_addr(&srv->source_addr, daemon->namebuff);
        if (srv->interface[0] != 0)
@@ -721,7 +756,7 @@ void check_servers(void)
   int port = 0;
 
   /* interface may be new since startup */
-  if (!(daemon->options & OPT_NOWILD))
+  if (!option_bool(OPT_NOWILD))
     enumerate_interfaces();
   
   for (new = daemon->servers; new; new = tmp)
@@ -921,7 +956,9 @@ struct in_addr get_ifaddr(char *intr)
   
   ret.sin_addr.s_addr = -1;
 
-  for (l = daemon->listeners; l && l->family != AF_INET; l = l->next);
+  for (l = daemon->listeners; 
+       l && (l->family != AF_INET || l->fd == -1);
+       l = l->next);
   
   strncpy(ifr.ifr_name, intr, IF_NAMESIZE);
   ifr.ifr_addr.sa_family = AF_INET;
index ec16b4ba705b6bd763996e840dac14b39c962977..214fd912c460090302d7d191b8d5205bbab8e00c 100644 (file)
@@ -1,4 +1,4 @@
-/* dnsmasq is Copyright (c) 2000-2010 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2011 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
@@ -21,7 +21,7 @@
 
 static volatile int mem_recover = 0;
 static jmp_buf mem_jmp;
-static void one_file(char *file, int nest, int hard_opt);
+static void one_file(char *file, int hard_opt);
 
 /* Solaris headers don't have facility names. */
 #ifdef HAVE_SOLARIS_NETWORK
@@ -108,6 +108,8 @@ struct myoption {
 #define LOPT_MAXTTL    297
 #define LOPT_NO_REBIND 298
 #define LOPT_LOC_REBND 299
+#define LOPT_ADD_MAC   300
+#define LOPT_DNSSEC    301
 
 #ifdef HAVE_GETOPT_LONG
 static const struct option opts[] =  
@@ -221,14 +223,16 @@ static const struct myoption opts[] =
     { "dhcp-proxy", 2, 0, LOPT_PROXY },
     { "dhcp-generate-names", 2, 0, LOPT_GEN_NAMES },
     { "rebind-localhost-ok", 0, 0,  LOPT_LOC_REBND },
+    { "add-mac", 0, 0, LOPT_ADD_MAC },
+    { "proxy-dnssec", 0, 0, LOPT_DNSSEC },
     { NULL, 0, 0, 0 }
   };
 
-/* These must have more the one '1' bit */
-#define ARG_DUP       3
-#define ARG_ONE       5
-#define ARG_USED_CL   7
-#define ARG_USED_FILE 9
+
+#define ARG_DUP       OPT_LAST
+#define ARG_ONE       OPT_LAST + 1
+#define ARG_USED_CL   OPT_LAST + 2
+#define ARG_USED_FILE OPT_LAST + 3
 
 static struct {
   int opt;
@@ -251,8 +255,8 @@ static struct {
   { 'F', ARG_DUP, "ipaddr,ipaddr,time", gettext_noop("Enable DHCP in the range given with lease duration."), NULL },
   { 'g', ARG_ONE, "groupname", gettext_noop("Change to this group after startup (defaults to %s)."), CHGRP },
   { 'G', ARG_DUP, "<hostspec>", gettext_noop("Set address or hostname for a specified machine."), NULL },
-  { LOPT_DHCP_HOST, ARG_ONE, "<filename>", gettext_noop("Read DHCP host specs from file."), NULL },
-  { LOPT_DHCP_OPTS, ARG_ONE, "<filename>", gettext_noop("Read DHCP option specs from file."), NULL },
+  { LOPT_DHCP_HOST, ARG_DUP, "<filename>", gettext_noop("Read DHCP host specs from file."), NULL },
+  { LOPT_DHCP_OPTS, ARG_DUP, "<filename>", gettext_noop("Read DHCP option specs from file."), 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 },
@@ -341,15 +345,17 @@ static struct {
   { LOPT_PXE_PROMT, ARG_DUP, "<prompt>,[<timeout>]", gettext_noop("Prompt to send to PXE clients."), NULL },
   { LOPT_PXE_SERV, ARG_DUP, "<service>", gettext_noop("Boot service for PXE menu."), NULL },
   { LOPT_TEST, 0, NULL, gettext_noop("Check configuration syntax."), NULL },
+  { LOPT_ADD_MAC, OPT_ADD_MAC, NULL, gettext_noop("Add requestor's MAC address to forwarded DNS queries"), NULL },
+  { LOPT_DNSSEC, OPT_DNSSEC, NULL, gettext_noop("Proxy DNSSEC validation results from upstream nameservers"), NULL },
   { 0, 0, NULL, NULL, NULL }
 }; 
 
 #ifdef HAVE_DHCP
-/* makes options which take a list of addresses */
 #define OT_ADDR_LIST 0x80
-/* DHCP-internal options, for logging. not valid in config file */
-#define OT_INTERNAL 0x40
-#define OT_NAME 0x20
+#define OT_RFC1035_NAME 0x40
+#define OT_INTERNAL 0x20
+#define OT_NAME 0x10
+
 
 static const struct {
   char *name;
@@ -365,8 +371,8 @@ static const struct {
   { "boot-file-size", 13, 2 },
   { "domain-name", 15, OT_NAME },
   { "swap-server", 16, OT_ADDR_LIST },
-  { "root-path", 17, 0 },
-  { "extension-path", 18, 0 },
+  { "root-path", 17, OT_NAME },
+  { "extension-path", 18, OT_NAME },
   { "ip-forward-enable", 19, 1 },
   { "non-local-source-routing", 20, 1 },
   { "policy-filter", 21, OT_ADDR_LIST },
@@ -383,7 +389,7 @@ static const struct {
   { "ethernet-encap", 36, 1 },
   { "tcp-ttl", 37, 1 },
   { "tcp-keepalive", 38, 4 },
-  { "nis-domain", 40, 0 },
+  { "nis-domain", 40, OT_NAME },
   { "nis-server", 41, OT_ADDR_LIST },
   { "ntp-server", 42, OT_ADDR_LIST },
   { "vendor-encap", 43, OT_INTERNAL },
@@ -405,10 +411,10 @@ static const struct {
   { "T2", 59, OT_INTERNAL },
   { "vendor-class", 60, 0 },
   { "client-id", 61,OT_INTERNAL },
-  { "nis+-domain", 64, 0 },
+  { "nis+-domain", 64, OT_NAME },
   { "nis+-server", 65, OT_ADDR_LIST },
-  { "tftp-server", 66, 0 },
-  { "bootfile-name", 67, 0 },
+  { "tftp-server", 66, OT_NAME },
+  { "bootfile-name", 67, OT_NAME },
   { "mobile-ip-home", 68, OT_ADDR_LIST }, 
   { "smtp-server", 69, OT_ADDR_LIST }, 
   { "pop3-server", 70, OT_ADDR_LIST }, 
@@ -421,7 +427,7 @@ static const struct {
   { "client-interface-id", 94, 0 },
   { "client-machine-id", 97, 0 },
   { "subnet-select", 118, OT_INTERNAL },
-  { "domain-search", 119, 0 },
+  { "domain-search", 119, OT_RFC1035_NAME },
   { "sip-server", 120, 0 },
   { "classless-static-route", 121, 0 },
   { "vendor-id-encap", 125, 0 },
@@ -776,6 +782,17 @@ static char *parse_dhcp_opt(char *arg, int flags)
       arg = comma; 
     }
   
+  if (opt_len == 0 &&
+      !(new->flags & (DHOPT_VENDOR | DHOPT_ENCAPSULATE | DHOPT_RFC3925)))
+    for (i = 0; opttab[i].name; i++)
+      if (new->opt == opttab[i].val)
+       {
+         opt_len = opttab[i].size;
+         if (opt_len & OT_INTERNAL)
+           opt_len = 0;
+         break;
+       }
+
   /* option may be missing with rfc3925 match */
   if (new->opt == 0)
     problem = _("bad dhcp-option");
@@ -783,6 +800,7 @@ static char *parse_dhcp_opt(char *arg, int flags)
     {
       /* characterise the value */
       char c;
+      int found_dig = 0;
       is_addr = is_hex = is_dec = is_string = 1;
       addrs = digs = 1;
       dots = 0;
@@ -828,15 +846,22 @@ static char *parse_dhcp_opt(char *arg, int flags)
                  (c == '*' && (flags & DHOPT_MATCH))))
              is_hex = 0;
          }
+       else
+         found_dig = 1;
      
+      if (!found_dig)
+       is_dec = is_addr = 0;
+      
       /* We know that some options take addresses */
-
       if (opt_len & OT_ADDR_LIST)
        {
          is_string = is_dec = is_hex = 0;
          if (!is_addr || dots == 0)
            problem = _("bad IP address");
        }
+      /* or names */
+      else if (opt_len & (OT_NAME | OT_RFC1035_NAME))
+       is_addr = is_dec = is_hex = 0;
          
       if (is_hex && digs > 1)
        {
@@ -1032,7 +1057,15 @@ static char *parse_dhcp_opt(char *arg, int flags)
 
 #endif
 
-static char *one_opt(int option, char *arg, char *gen_prob, int nest)
+void set_option_bool(unsigned int opt)
+{
+  if (opt < 32)
+    daemon->options |= 1u << opt;
+  else
+    daemon->options2 |= 1u << (opt - 32);
+}
+
+static char *one_opt(int option, char *arg, char *gen_prob, int command_line)
 {      
   int i;
   char *comma, *problem = NULL;;
@@ -1045,7 +1078,7 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
       {
         int rept = usage[i].rept;
         
-        if (nest == 0)
+        if (command_line)
           {
             /* command line */
             if (rept == ARG_USED_CL)
@@ -1064,7 +1097,7 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
 
         if (rept != ARG_DUP && rept != ARG_ONE && rept != ARG_USED_CL) 
           {
-            daemon->options |= rept;
+            set_option_bool(rept);
             return NULL;
           }
        
@@ -1078,7 +1111,7 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
        char *file = opt_string_alloc(arg);
        if (file)
          {
-           one_file(file, nest, 0);
+           one_file(file, 0);
            free(file);
          }
        break;
@@ -1145,8 +1178,8 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
            if (!S_ISREG(buf.st_mode))
              continue;
            
-           /* dir is one level, so files must be readable */
-           one_file(path, nest + 1, 0);
+           /* files must be readable */
+           one_file(path, 0);
            free(path);
          }
      
@@ -1183,20 +1216,6 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
       daemon->runfile = opt_string_alloc(arg);
       break;
 
-    case LOPT_DHCP_HOST: /* --dhcp-hostfile */
-      if (daemon->dhcp_hosts_file)
-       problem = _("only one dhcp-hostsfile allowed");
-      else
-       daemon->dhcp_hosts_file = opt_string_alloc(arg);
-      break;
-     
-    case LOPT_DHCP_OPTS: /* --dhcp-optsfile */
-      if (daemon->dhcp_opts_file)
-       problem = _("only one dhcp-optsfile allowed");
-      else
-       daemon->dhcp_opts_file = opt_string_alloc(arg);
-      break; 
-      
     case 'r': /* --resolv-file */
       {
        char *name = opt_string_alloc(arg);
@@ -1275,6 +1294,8 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
       break;
 #endif
 
+    case LOPT_DHCP_HOST: /* --dhcp-hostfile */
+    case LOPT_DHCP_OPTS: /* --dhcp-optsfile */
     case 'H': /* --addn-hosts */
       {
        struct hostsfile *new = opt_malloc(sizeof(struct hostsfile));
@@ -1282,14 +1303,27 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
        new->fname = opt_string_alloc(arg);
        new->index = hosts_index++;
        new->flags = 0;
-       new->next = daemon->addn_hosts;
-       daemon->addn_hosts = new;
+       if (option == 'H')
+         {
+           new->next = daemon->addn_hosts;
+           daemon->addn_hosts = new;
+         }
+       else if (option == LOPT_DHCP_HOST)
+         {
+           new->next = daemon->dhcp_hosts_file;
+           daemon->dhcp_hosts_file = new;
+         }
+       else if (option ==  LOPT_DHCP_OPTS)
+         {
+           new->next = daemon->dhcp_opts_file;
+           daemon->dhcp_opts_file = new;
+         }       
        break;
       }
       
     case 's': /* --domain */
       if (strcmp (arg, "#") == 0)
-       daemon->options |= OPT_RESOLV_DOMAIN;
+       set_option_bool(OPT_RESOLV_DOMAIN);
       else
        {
          char *d;
@@ -1301,18 +1335,59 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
              if (comma)
                {
                  struct cond_domain *new = safe_malloc(sizeof(struct cond_domain));
+                 char *netpart;
+
                  unhide_metas(comma);
-                 if ((arg = split_chr(comma, '/')))
+                 if ((netpart = split_chr(comma, '/')))
                    {
-                     int mask;
+                     int msize, mask;
+                     arg = split(netpart);
                      if ((new->start.s_addr = inet_addr(comma)) == (in_addr_t)-1 ||
-                         !atoi_check(arg, &mask))
+                         !atoi_check(netpart, &msize))
                        option = '?';
                      else
                        {
-                         mask = (1 << (32 - mask)) - 1;
+                         mask = (1 << (32 - msize)) - 1;
                          new->start.s_addr = ntohl(htonl(new->start.s_addr) & ~mask);
                          new->end.s_addr = new->start.s_addr | htonl(mask);
+                         if (arg)
+                           {
+                             /* generate the equivalent of
+                                local=/<domain>/
+                                local=/xxx.yyy.zzz.in-addr.arpa/ */
+
+                             if (strcmp(arg, "local") != 0 || 
+                                 (msize != 8 && msize != 16 && msize != 24))
+                               option = '?';
+                             else
+                               {
+                                 struct server *serv = opt_malloc(sizeof(struct server));
+                                 in_addr_t a = ntohl(new->start.s_addr) >> 8;
+                                 char *p;
+
+                                 memset(serv, 0, sizeof(struct server));
+                                 serv->domain = d;
+                                 serv->flags = SERV_HAS_DOMAIN | SERV_NO_ADDR;
+                                 serv->next = daemon->servers;
+                                 daemon->servers = serv;
+
+                                 serv = opt_malloc(sizeof(struct server));
+                                 memset(serv, 0, sizeof(struct server));
+                                 p = serv->domain = opt_malloc(25); /* strlen("xxx.yyy.zzz.in-addr.arpa")+1 */
+                                 
+                                 if (msize == 24)
+                                   p += sprintf(p, "%d.", a & 0xff);
+                                 a = a >> 8;
+                                 if (msize != 8)
+                                   p += sprintf(p, "%d.", a & 0xff);
+                                 a = a >> 8;
+                                 p += sprintf(p, "%d.in-addr.arpa", a & 0xff);
+
+                                 serv->flags = SERV_HAS_DOMAIN | SERV_NO_ADDR;
+                                 serv->next = daemon->servers;
+                                 daemon->servers = serv;
+                               }
+                           }
                        }
                    }
                  else if ((arg = split(comma)))
@@ -1934,7 +2009,9 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
                          len = (int) strlen(arg);
                        }
 
-                     if ((new->clid = opt_malloc(len)))
+                     if (len == -1)
+                       problem = _("bad hex constant");
+                     else if ((new->clid = opt_malloc(len)))
                        {
                          new->flags |= CONFIG_CLID;
                          new->clid_len = len;
@@ -1957,10 +2034,15 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
              else 
                {
                  struct hwaddr_config *newhw = opt_malloc(sizeof(struct hwaddr_config));
-                 newhw->next = new->hwaddr;
-                 new->hwaddr = newhw;
-                 newhw->hwaddr_len = parse_hex(a[j], newhw->hwaddr, DHCP_CHADDR_MAX, 
-                                               &newhw->wildcard_mask, &newhw->hwaddr_type);
+                 if ((newhw->hwaddr_len = parse_hex(a[j], newhw->hwaddr, DHCP_CHADDR_MAX, 
+                                                    &newhw->wildcard_mask, &newhw->hwaddr_type)) == -1)
+                   problem = _("bad hex constant");
+                 else
+                   {
+                     
+                     newhw->next = new->hwaddr;
+                     new->hwaddr = newhw;
+                   }               
                }
            }
          else if (strchr(a[j], '.') && (in.s_addr = inet_addr(a[j])) != (in_addr_t)-1)
@@ -2295,8 +2377,13 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
            new->netid.net = opt_string_alloc(set_prefix(arg));
            unhide_metas(comma);
            new->hwaddr_len = parse_hex(comma, new->hwaddr, DHCP_CHADDR_MAX, &new->mask, &new->hwaddr_type);
-           new->next = daemon->dhcp_macs;
-           daemon->dhcp_macs = new;
+           if (new->hwaddr_len == -1)
+             option = '?';
+           else
+             {
+               new->next = daemon->dhcp_macs;
+               daemon->dhcp_macs = new;
+             }
          }
       }
       break;
@@ -2587,63 +2674,49 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
     case 'Y':  /* --txt-record */
       {
        struct txt_record *new;
-       unsigned char *p, *q;
-       
-       if ((comma = split(arg)))
-         comma--;
-       
-       gen_prob = _("TXT record string too long");
-       
-       if ((q = (unsigned char *)comma))
-         while (1)
-           {
-             size_t len;
-             if ((p = (unsigned char *)strchr((char*)q+1, ',')))
-               {
-                 if ((len = p - q - 1) > 255)
-                   option = '?';
-                 *q = len;
-                 for (q = q+1; q < p; q++)
-                   *q = unhide_meta(*q);
-               }
-             else
-               {
-                 if ((len = strlen((char *)q+1)) > 255)
-                   option = '?';
-                 *q = len;
-                 for (q = q+1; *q; q++)
-                   *q = unhide_meta(*q);
-                 break;
-               }
-           }
-       
+       unsigned char *p, *cnt;
+       size_t len;
+
+       comma = split(arg);
+               
        new = opt_malloc(sizeof(struct txt_record));
        new->next = daemon->txt;
        daemon->txt = new;
        new->class = C_IN;
-       if (comma)
-         {
-           new->len = q - ((unsigned char *)comma);
-           new->txt = opt_malloc(new->len);
-           memcpy(new->txt, comma, new->len);
-         }
-       else
-         {
-           static char empty[] = "";
-           new->len = 1;
-           new->txt = empty;
-         }
        
-       /* ensure arg is terminated */
-       if (comma)
-         *comma = 0;
-
        if (!(new->name = canonicalise_opt(arg)))
          {
            problem = _("bad TXT record");
            break;
          }
 
+       len = comma ? strlen(comma) : 0;
+       len += (len/255) + 1; /* room for extra counts */
+       new->txt = p = opt_malloc(len);
+
+       cnt = p++;
+       *cnt = 0;
+       
+       while (comma && *comma)
+         {
+           unsigned char c = (unsigned char)*comma++;
+
+           if (c == ',' || *cnt == 255)
+             {
+               if (c != ',')
+                 comma--;
+               cnt = p++;
+               *cnt = 0;
+             }
+           else
+             {
+               *p++ = unhide_meta(c);
+               (*cnt)++;
+             }
+         }
+
+       new->len = p - new->txt;
+
        break;
       }
       
@@ -2716,53 +2789,10 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
   return NULL;
 }
 
-static void one_file(char *file, int nest, int hard_opt)       
+static void read_file(char *file, FILE *f, int hard_opt)       
 {
   volatile int lineno = 0;
-  FILE *f;
   char *buff = daemon->namebuff;
-  static struct fileread {
-    dev_t dev;
-    ino_t ino;
-    struct fileread *next;
-  } *filesread = NULL;
-  struct stat statbuf;
-  
-  /* ignore repeated files. */
-  if (hard_opt == 0 && stat(file, &statbuf) == 0)
-    {
-      struct fileread *r;
-
-      for (r = filesread; r; r = r->next)
-       if (r->dev == statbuf.st_dev && r->ino == statbuf.st_ino)
-         return;
-
-      r = safe_malloc(sizeof(struct fileread));
-      r->next = filesread;
-      filesread = r;
-      r->dev = statbuf.st_dev;
-      r->ino = statbuf.st_ino;
-    }
-
-  if (nest > 20)
-    die(_("files nested too deep in %s"), file, EC_BADCONF);
-
-  if (!(f = fopen(file, "r")))
-    {   
-      if (errno == ENOENT && nest == 0)
-       return; /* No conffile, all done. */
-      else
-       {
-         char *str = _("cannot read %s: %s");
-         if (hard_opt != 0)
-           {
-             my_syslog(LOG_ERR, str, file, strerror(errno));
-             return;
-           }
-         else
-           die(str, file, EC_FILE);
-       }
-    } 
   
   while (fgets(buff, MAXDNAME, f))
     {
@@ -2877,7 +2907,7 @@ static void one_file(char *file, int nest, int hard_opt)
        }
          
       if (!errmess)
-       errmess = one_opt(option, arg, _("error"), nest + 1);
+       errmess = one_opt(option, arg, _("error"), 0);
       
       if (errmess)
        {
@@ -2894,13 +2924,183 @@ static void one_file(char *file, int nest, int hard_opt)
   fclose(f);
 }
 
+static void one_file(char *file, int hard_opt)
+{
+  FILE *f;
+  int nofile_ok = 0;
+  static int read_stdin = 0;
+  static struct fileread {
+    dev_t dev;
+    ino_t ino;
+    struct fileread *next;
+  } *filesread = NULL;
+  
+  if (hard_opt == '7')
+    {
+      /* default conf-file reading */
+      hard_opt = 0;
+      nofile_ok = 1;
+    }
+
+  if (hard_opt == 0 && strcmp(file, "-") == 0)
+    {
+      if (read_stdin == 1)
+       return;
+      read_stdin = 1;
+      file = "stdin";
+      f = stdin;
+    }
+  else
+    {
+      /* ignore repeated files. */
+      struct stat statbuf;
+    
+      if (hard_opt == 0 && stat(file, &statbuf) == 0)
+       {
+         struct fileread *r;
+         
+         for (r = filesread; r; r = r->next)
+           if (r->dev == statbuf.st_dev && r->ino == statbuf.st_ino)
+             return;
+         
+         r = safe_malloc(sizeof(struct fileread));
+         r->next = filesread;
+         filesread = r;
+         r->dev = statbuf.st_dev;
+         r->ino = statbuf.st_ino;
+       }
+      
+      if (!(f = fopen(file, "r")))
+       {   
+         if (errno == ENOENT && nofile_ok)
+           return; /* No conffile, all done. */
+         else
+           {
+             char *str = _("cannot read %s: %s");
+             if (hard_opt != 0)
+               {
+                 my_syslog(LOG_ERR, str, file, strerror(errno));
+                 return;
+               }
+             else
+               die(str, file, EC_FILE);
+           }
+       } 
+    }
+  
+  read_file(file, f, hard_opt);
+}
+
+/* expand any name which is a directory */
+struct hostsfile *expand_filelist(struct hostsfile *list)
+{
+  int i;
+  struct hostsfile *ah;
+
+  for (i = 0, ah = list; ah; ah = ah->next)
+    {
+      if (i <= ah->index)
+       i = ah->index + 1;
+
+      if (ah->flags & AH_DIR)
+       ah->flags |= AH_INACTIVE;
+      else
+       ah->flags &= ~AH_INACTIVE;
+    }
+
+  for (ah = list; ah; ah = ah->next)
+    if (!(ah->flags & AH_INACTIVE))
+      {
+       struct stat buf;
+       if (stat(ah->fname, &buf) != -1 && S_ISDIR(buf.st_mode))
+         {
+           DIR *dir_stream;
+           struct dirent *ent;
+           
+           /* 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));
+           else
+             {
+               while ((ent = readdir(dir_stream)))
+                 {
+                   size_t lendir = strlen(ah->fname);
+                   size_t lenfile = strlen(ent->d_name);
+                   struct hostsfile *ah1;
+                   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;
+                   
+                   /* see if we have an existing record.
+                      dir is ah->fname 
+                      file is ent->d_name
+                      path to match is ah1->fname */
+                   
+                   for (ah1 = list; ah1; ah1 = ah1->next)
+                     {
+                       if (lendir < strlen(ah1->fname) &&
+                           strstr(ah1->fname, ah->fname) == ah1->fname &&
+                           ah1->fname[lendir] == '/' &&
+                           strcmp(ah1->fname + lendir + 1, ent->d_name) == 0)
+                         {
+                           ah1->flags &= ~AH_INACTIVE;
+                           break;
+                         }
+                     }
+                   
+                   /* make new record */
+                   if (!ah1)
+                     {
+                       if (!(ah1 = whine_malloc(sizeof(struct hostsfile))))
+                         continue;
+                       
+                       if (!(path = whine_malloc(lendir + lenfile + 2)))
+                         {
+                           free(ah1);
+                           continue;
+                         }
+                       
+                       strcpy(path, ah->fname);
+                       strcat(path, "/");
+                       strcat(path, ent->d_name);
+                       ah1->fname = path;
+                       ah1->index = i++;
+                       ah1->flags = AH_DIR;
+                       ah1->next = list;
+                       list = ah1;
+                     }
+                   
+                   /* inactivate record if not regular file */
+                   if ((ah1->flags & AH_DIR) && stat(ah1->fname, &buf) != -1 && !S_ISREG(buf.st_mode))
+                     ah1->flags |= AH_INACTIVE; 
+                   
+                 }
+               closedir(dir_stream);
+             }
+         }
+      }
+  
+  return list;
+}
+
+
 #ifdef HAVE_DHCP
 void reread_dhcp(void)
 {
+  struct hostsfile *hf;
+
   if (daemon->dhcp_hosts_file)
     {
       struct dhcp_config *configs, *cp, **up;
-      
+  
       /* remove existing... */
       for (up = &daemon->dhcp_conf, configs = daemon->dhcp_conf; configs; configs = cp)
        {
@@ -2930,7 +3130,6 @@ void reread_dhcp(void)
              if (configs->flags & CONFIG_NAME)
                free(configs->hostname);
              
-     
              *up = configs->next;
              free(configs);
            }
@@ -2938,8 +3137,13 @@ void reread_dhcp(void)
            up = &configs->next;
        }
       
-      one_file(daemon->dhcp_hosts_file, 1, LOPT_BANK);  
-      my_syslog(MS_DHCP | LOG_INFO, _("read %s"), daemon->dhcp_hosts_file);
+      daemon->dhcp_hosts_file = expand_filelist(daemon->dhcp_hosts_file);
+      for (hf = daemon->dhcp_hosts_file; hf; hf = hf->next)
+        if (!(hf->flags & AH_INACTIVE))
+          {
+            one_file(hf->fname, LOPT_BANK);  
+            my_syslog(MS_DHCP | LOG_INFO, _("read %s"), hf->fname);
+          }
     }
 
   if (daemon->dhcp_opts_file)
@@ -2969,8 +3173,13 @@ void reread_dhcp(void)
            up = &opts->next;
        }
       
-      one_file(daemon->dhcp_opts_file, 1, LOPT_OPTS);  
-      my_syslog(MS_DHCP | LOG_INFO, _("read %s"), daemon->dhcp_opts_file);
+      daemon->dhcp_opts_file = expand_filelist(daemon->dhcp_opts_file);
+      for (hf = daemon->dhcp_opts_file; hf; hf = hf->next)
+       if (!(hf->flags & AH_INACTIVE))
+         {
+           one_file(hf->fname, LOPT_OPTS);  
+           my_syslog(MS_DHCP | LOG_INFO, _("read %s"), hf->fname);
+         }
     }
 }
 #endif
@@ -2978,7 +3187,7 @@ void reread_dhcp(void)
 void read_opts(int argc, char **argv, char *compile_opts)
 {
   char *buff = opt_malloc(MAXDNAME);
-  int option, nest = 0, testmode = 0;
+  int option, conffile_opt = '7', testmode = 0;
   char *errmess, *arg, *conffile = CONFFILE;
       
   opterr = 0;
@@ -3015,8 +3224,12 @@ void read_opts(int argc, char **argv, char *compile_opts)
 #endif
       
       if (option == -1)
-       break;
-      
+       {
+         if (optind < argc)
+           die(_("junk found in command line"), NULL, EC_BADCONF);
+         break;
+       }
+
       /* Copy optarg so that argv doesn't get changed */
       if (optarg)
        {
@@ -3051,15 +3264,15 @@ void read_opts(int argc, char **argv, char *compile_opts)
         }
       else if (option == 'C')
        {
+         conffile_opt = 0; /* file must exist */
          conffile = opt_string_alloc(arg);
-         nest++;
        }
       else
        {
 #ifdef HAVE_GETOPT_LONG
-         errmess = one_opt(option, arg, _("try --help"), 0);
+         errmess = one_opt(option, arg, _("try --help"), 1);
 #else 
-         errmess = one_opt(option, arg, _("try -w"), 0); 
+         errmess = one_opt(option, arg, _("try -w"), 1); 
 #endif  
          if (errmess)
            die(_("bad command line options: %s"), errmess, EC_BADCONF);
@@ -3067,7 +3280,7 @@ void read_opts(int argc, char **argv, char *compile_opts)
     }
 
   if (conffile)
-    one_file(conffile, nest, 0);
+    one_file(conffile, conffile_opt);
 
   /* port might not be known when the address is parsed - fill in here */
   if (daemon->servers)
@@ -3098,7 +3311,7 @@ void read_opts(int argc, char **argv, char *compile_opts)
     }
                      
   /* only one of these need be specified: the other defaults to the host-name */
-  if ((daemon->options & OPT_LOCALMX) || daemon->mxnames || daemon->mxtarget)
+  if (option_bool(OPT_LOCALMX) || daemon->mxnames || daemon->mxtarget)
     {
       struct mx_srv_record *mx;
       
@@ -3109,7 +3322,7 @@ void read_opts(int argc, char **argv, char *compile_opts)
        if (!mx->issrv && hostname_isequal(mx->name, buff))
          break;
       
-      if ((daemon->mxtarget || (daemon->options & OPT_LOCALMX)) && !mx)
+      if ((daemon->mxtarget || option_bool(OPT_LOCALMX)) && !mx)
        {
          mx = opt_malloc(sizeof(struct mx_srv_record));
          mx->next = daemon->mxnames;
@@ -3127,18 +3340,18 @@ void read_opts(int argc, char **argv, char *compile_opts)
          mx->target = daemon->mxtarget;
     }
 
-  if (!(daemon->options & OPT_NO_RESOLV) &&
+  if (!option_bool(OPT_NO_RESOLV) &&
       daemon->resolv_files && 
       daemon->resolv_files->next && 
-      (daemon->options & OPT_NO_POLL))
+      option_bool(OPT_NO_POLL))
     die(_("only one resolv.conf file allowed in no-poll mode."), NULL, EC_BADCONF);
   
-  if (daemon->options & OPT_RESOLV_DOMAIN)
+  if (option_bool(OPT_RESOLV_DOMAIN))
     {
       char *line;
       FILE *f;
 
-      if ((daemon->options & OPT_NO_RESOLV) ||
+      if (option_bool(OPT_NO_RESOLV) ||
          !daemon->resolv_files || 
          (daemon->resolv_files)->next)
        die(_("must have exactly one resolv.conf to read domain from."), NULL, EC_BADCONF);
@@ -3181,7 +3394,7 @@ void read_opts(int argc, char **argv, char *compile_opts)
            srv->name = opt_string_alloc(buff);
          }
     }
-  else if (daemon->options & OPT_DHCP_FQDN)
+  else if (option_bool(OPT_DHCP_FQDN))
     die(_("there must be a default domain when --dhcp-fqdn is set"), NULL, EC_BADCONF);
 
   if (testmode)
index 3289bf3a86a762a3bbbb72e97e257c9e90d3e82d..93f855c8b5fa3c729382e61ddb2f8d8f1ef0a5de 100644 (file)
@@ -1,4 +1,4 @@
-/* dnsmasq is Copyright (c) 2000-2010 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2011 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
@@ -510,8 +510,122 @@ unsigned char *find_pseudoheader(HEADER *header, size_t plen, size_t  *len, unsi
   
   return ret;
 }
+
+struct macparm {
+  unsigned char *limit;
+  HEADER *header;
+  size_t plen;
+  union mysockaddr *l3;
+};
+
+static int filter_mac(int family, char *addrp, char *mac, size_t maclen, void *parmv)
+{
+  struct macparm *parm = parmv;
+  int match = 0;
+  unsigned short rdlen;
+  HEADER *header = parm->header;
+  unsigned char *lenp, *datap, *p;
+  
+  if (family == parm->l3->sa.sa_family)
+    {
+      if (family == AF_INET && memcmp (&parm->l3->in.sin_addr, addrp, INADDRSZ) == 0)
+       match = 1;
+#ifdef HAVE_IPV6
+      else
+       if (family == AF_INET6 && memcmp (&parm->l3->in6.sin6_addr, addrp, IN6ADDRSZ) == 0)
+         match = 1;
+#endif
+    }
+  if (!match)
+    return 1; /* continue */
+  
+  if (ntohs(header->arcount) == 0)
+    {
+      /* We are adding the pseudoheader */
+      if (!(p = skip_questions(header, parm->plen)) ||
+         !(p = skip_section(p, 
+                            ntohs(header->ancount) + ntohs(header->nscount), 
+                            header, parm->plen)))
+       return 0;
+      *p++ = 0; /* empty name */
+      PUTSHORT(T_OPT, p);
+      PUTSHORT(PACKETSZ, p); /* max packet length - is 512 suitable default for non-EDNS0 resolvers? */
+      PUTLONG(0, p);    /* extended RCODE */
+      lenp = p;
+      PUTSHORT(0, p);    /* RDLEN */
+      rdlen = 0;
+      if (((ssize_t)maclen) > (parm->limit - (p + 4)))
+       return 0; /* Too big */
+      header->arcount = htons(1);
+      datap = p;
+    }
+  else
+    {
+      int i, is_sign;
+      unsigned short code, len;
+      
+      if (ntohs(header->arcount) != 1 ||
+         !(p = find_pseudoheader(header, parm->plen, NULL, NULL, &is_sign)) ||
+         is_sign ||
+         (!(p = skip_name(p, header, parm->plen, 10))))
+       return 0;
+      
+      p += 8; /* skip UDP length and RCODE */
+      
+      lenp = p;
+      GETSHORT(rdlen, p);
+      if (!CHECK_LEN(header, p, parm->plen, rdlen))
+       return 0; /* bad packet */
+      datap = p;
+
+      /* check if option already there */
+      for (i = 0; i + 4 < rdlen; i += len + 4)
+       {
+         GETSHORT(code, p);
+         GETSHORT(len, p);
+         if (code == EDNS0_OPTION_MAC)
+           return 0;
+         p += len;
+       }
       
+      if (((ssize_t)maclen) > (parm->limit - (p + 4)))
+       return 0; /* Too big */
+    }
+  
+  PUTSHORT(EDNS0_OPTION_MAC, p);
+  PUTSHORT(maclen, p);
+  memcpy(p, mac, maclen);
+  p += maclen;  
+
+  PUTSHORT(p - datap, lenp);
+  parm->plen = p - (unsigned char *)header;
+  
+  return 0; /* done */
+}            
+     
+
+size_t add_mac(HEADER *header, size_t plen, char *limit, union mysockaddr *l3)
+{
+  struct macparm parm;
+     
+/* Must have an existing pseudoheader as the only ar-record, 
+   or have no ar-records. Must also not be signed */
+   
+  if (ntohs(header->arcount) > 1)
+    return plen;
+
+  parm.header = header;
+  parm.limit = (unsigned char *)limit;
+  parm.plen = plen;
+  parm.l3 = l3;
+
+  iface_enumerate(AF_UNSPEC, &parm, filter_mac);
   
+  return parm.plen; 
+}
+
+    
 /* is addr in the non-globally-routed IP space? */ 
 static int private_net(struct in_addr addr, int ban_localhost) 
 {
@@ -532,7 +646,7 @@ static unsigned char *do_doctor(unsigned char *p, int count, HEADER *header, siz
 
   for (i = count; i != 0; i--)
     {
-      if (name && (daemon->options & OPT_LOG))
+      if (name && option_bool(OPT_LOG))
        {
          if (!extract_name(header, qlen, &p, name, 1, 10))
            return 0;
@@ -575,7 +689,7 @@ static unsigned char *do_doctor(unsigned char *p, int count, HEADER *header, siz
              break;
            }
        }
-      else if (qtype == T_TXT && name && (daemon->options & OPT_LOG))
+      else if (qtype == T_TXT && name && option_bool(OPT_LOG))
        {
          unsigned char *p1 = p;
          if (!CHECK_LEN(header, p1, qlen, rdlen))
@@ -592,7 +706,7 @@ static unsigned char *do_doctor(unsigned char *p, int count, HEADER *header, siz
                    p2++;
                  }
              *p2 = 0;
-             my_syslog(LOG_DEBUG, "reply %s is %s", name, p1);
+             my_syslog(LOG_INFO, "reply %s is %s", name, p1);
              /* restore */
              memmove(p1 + 1, p1, len);
              *p1 = len;
@@ -665,7 +779,8 @@ static int find_soa(HEADER *header, size_t qlen, char *name)
    either because of lack of memory, or lack of SOA records.  These are treated by the cache code as 
    expired and cleaned out that way. 
    Return 1 if we reject an address because it look like part of dns-rebinding attack. */
-int extract_addresses(HEADER *header, size_t qlen, char *name, time_t now, int is_sign, int check_rebind)
+int extract_addresses(HEADER *header, size_t qlen, char *name, time_t now, 
+                     int is_sign, int check_rebind, int checking_disabled)
 {
   unsigned char *p, *p1, *endrr, *namep;
   int i, j, qtype, qclass, aqtype, aqclass, ardlen, res, searched_soa = 0;
@@ -675,7 +790,7 @@ int extract_addresses(HEADER *header, size_t qlen, char *name, time_t now, int i
   cache_start_insert();
 
   /* find_soa is needed for dns_doctor and logging side-effects, so don't call it lazily if there are any. */
-  if (daemon->doctors || (daemon->options & OPT_LOG))
+  if (daemon->doctors || option_bool(OPT_LOG))
     {
       searched_soa = 1;
       ttl = find_soa(header, qlen, name);
@@ -761,7 +876,7 @@ int extract_addresses(HEADER *header, size_t qlen, char *name, time_t now, int i
                }
            }
          
-          if (!found && !(daemon->options & OPT_NO_NEG))
+          if (!found && !option_bool(OPT_NO_NEG))
            {
              if (!searched_soa)
                {
@@ -848,7 +963,7 @@ int extract_addresses(HEADER *header, size_t qlen, char *name, time_t now, int i
                          /* check for returned address in private space */
                          if (check_rebind &&
                              (flags & F_IPV4) &&
-                             private_net(addr.addr.addr4, !(daemon->options & OPT_LOCAL_REBIND)))
+                             private_net(addr.addr.addr4, !option_bool(OPT_LOCAL_REBIND)))
                            return 1;
                          
                          newc = cache_insert(name, &addr, now, attl, flags | F_FORWARD);
@@ -867,7 +982,7 @@ int extract_addresses(HEADER *header, size_t qlen, char *name, time_t now, int i
                }
            }
          
-         if (!found && !(daemon->options & OPT_NO_NEG))
+         if (!found && !option_bool(OPT_NO_NEG))
            {
              if (!searched_soa)
                {
@@ -889,18 +1004,19 @@ int extract_addresses(HEADER *header, size_t qlen, char *name, time_t now, int i
        }
     }
   
-  /* Don't put stuff from a truncated packet into the cache, but do everything else */
-  if (!header->tc)
+  /* Don't put stuff from a truncated packet into the cache,
+     also don't cache replies where DNSSEC validation was turned off, either
+     the upstream server told us so, or the original query specified it. */
+  if (!header->tc && !header->cd && !checking_disabled)
     cache_end_insert();
 
   return 0;
 }
 
 /* If the packet holds exactly one query
-   return F_IPV4 or F_IPV6  and leave the name from the query in name. 
-   Abuse F_BIGNAME to indicate an NS query - yuck. */
+   return F_IPV4 or F_IPV6  and leave the name from the query in name */
 
-unsigned short extract_request(HEADER *header, size_t qlen, char *name, unsigned short *typep)
+unsigned int extract_request(HEADER *header, size_t qlen, char *name, unsigned short *typep)
 {
   unsigned char *p = (unsigned char *)(header+1);
   int qtype, qclass;
@@ -929,7 +1045,7 @@ unsigned short extract_request(HEADER *header, size_t qlen, char *name, unsigned
       if (qtype == T_ANY)
        return  F_IPV4 | F_IPV6;
       if (qtype == T_NS || qtype == T_SOA)
-       return F_QUERY | F_BIGNAME;
+       return F_QUERY | F_NSRR;
     }
   
   return F_QUERY;
@@ -937,7 +1053,7 @@ unsigned short extract_request(HEADER *header, size_t qlen, char *name, unsigned
 
 
 size_t setup_reply(HEADER *header, size_t qlen,
-               struct all_addr *addrp, unsigned short flags, unsigned long ttl)
+               struct all_addr *addrp, unsigned int flags, unsigned long ttl)
 {
   unsigned char *p = skip_questions(header, qlen);
   
@@ -1249,7 +1365,7 @@ size_t answer_request(HEADER *header, char *limit, size_t qlen,
                  ans = 1;
                  if (!dryrun)
                    {
-                     log_query(F_CNAME | F_FORWARD | F_CONFIG | F_NXDOMAIN, name, NULL, "<TXT>");
+                     log_query(F_CONFIG | F_RRNAME, name, NULL, "<TXT>");
                      if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, 
                                              daemon->local_ttl, NULL,
                                              T_TXT, t->class, "t", t->len, t->txt))
@@ -1300,7 +1416,7 @@ size_t answer_request(HEADER *header, char *limit, size_t qlen,
                  ans = 1;
                  if (!dryrun)
                    {
-                     log_query(F_CNAME | F_FORWARD | F_CONFIG | F_NXDOMAIN, name, NULL, "<PTR>");
+                     log_query(F_CONFIG | F_RRNAME, name, NULL, "<PTR>");
                      for (ptr = daemon->ptr; ptr; ptr = ptr->next)
                        if (hostname_isequal(name, ptr->name) &&
                            add_resource_record(header, limit, &trunc, nameoffset, &ansp, 
@@ -1344,7 +1460,7 @@ size_t answer_request(HEADER *header, char *limit, size_t qlen,
                      }
                  } while ((crecp = cache_find_by_addr(crecp, &addr, now, is_arpa)));
              else if (is_arpa == F_IPV4 && 
-                      (daemon->options & OPT_BOGUSPRIV) && 
+                      option_bool(OPT_BOGUSPRIV) && 
                       private_net(addr.addr.addr4, 1))
                {
                  /* if not in cache, enabled and private IPV4 address, return NXDOMAIN */
@@ -1442,7 +1558,7 @@ size_t answer_request(HEADER *header, char *limit, size_t qlen,
                  
                  /* See if a putative address is on the network from which we recieved
                     the query, is so we'll filter other answers. */
-                 if (local_addr.s_addr != 0 && (daemon->options & OPT_LOCALISE) && flag == F_IPV4)
+                 if (local_addr.s_addr != 0 && option_bool(OPT_LOCALISE) && flag == F_IPV4)
                    {
                      struct crec *save = crecp;
                      do {
@@ -1525,7 +1641,7 @@ size_t answer_request(HEADER *header, char *limit, size_t qlen,
                  if (!dryrun)
                    {
                      unsigned int offset;
-                     log_query(F_CNAME | F_FORWARD | F_CONFIG | F_NXDOMAIN, name, NULL, "<MX>");
+                     log_query(F_CONFIG | F_RRNAME, name, NULL, "<MX>");
                      if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, daemon->local_ttl,
                                              &offset, T_MX, C_IN, "sd", rec->weight, rec->target))
                        {
@@ -1536,16 +1652,16 @@ size_t answer_request(HEADER *header, char *limit, size_t qlen,
                    }
                  }
              
-             if (!found && (daemon->options & (OPT_SELFMX | OPT_LOCALMX)) && 
+             if (!found && (option_bool(OPT_SELFMX) || option_bool(OPT_LOCALMX)) && 
                  cache_find_by_name(NULL, name, now, F_HOSTS | F_DHCP))
                { 
                  ans = 1;
                  if (!dryrun)
                    {
-                     log_query(F_CNAME | F_FORWARD | F_CONFIG | F_NXDOMAIN, name, NULL, "<MX>");
+                     log_query(F_CONFIG | F_RRNAME, name, NULL, "<MX>");
                      if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, daemon->local_ttl, NULL, 
                                              T_MX, C_IN, "sd", 1, 
-                                             (daemon->options & OPT_SELFMX) ? name : daemon->mxtarget))
+                                             option_bool(OPT_SELFMX) ? name : daemon->mxtarget))
                        anscount++;
                    }
                }
@@ -1554,7 +1670,8 @@ size_t answer_request(HEADER *header, char *limit, size_t qlen,
          if (qtype == T_SRV || qtype == T_ANY)
            {
              int found = 0;
-             
+             struct mx_srv_record *move = NULL, **up = &daemon->mxnames;
+
              for (rec = daemon->mxnames; rec; rec = rec->next)
                if (rec->issrv && hostname_isequal(name, rec->name))
                  {
@@ -1562,7 +1679,7 @@ size_t answer_request(HEADER *header, char *limit, size_t qlen,
                    if (!dryrun)
                      {
                        unsigned int offset;
-                       log_query(F_CNAME | F_FORWARD | F_CONFIG | F_NXDOMAIN, name, NULL, "<SRV>");
+                       log_query(F_CONFIG | F_RRNAME, name, NULL, "<SRV>");
                        if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, daemon->local_ttl, 
                                                &offset, T_SRV, C_IN, "sssd", 
                                                rec->priority, rec->weight, rec->srvport, rec->target))
@@ -1572,9 +1689,27 @@ size_t answer_request(HEADER *header, char *limit, size_t qlen,
                              rec->offset = offset;
                          }
                      }
+                   
+                   /* unlink first SRV record found */
+                   if (!move)
+                     {
+                       move = rec;
+                       *up = rec->next;
+                     }
+                   else
+                     up = &rec->next;      
                  }
+               else
+                 up = &rec->next;
+
+             /* put first SRV record back at the end. */
+             if (move)
+               {
+                 *up = move;
+                 move->next = NULL;
+               }
              
-             if (!found && (daemon->options & OPT_FILTER) &&  (qtype == T_SRV || (qtype == T_ANY && strchr(name, '_'))))
+             if (!found && option_bool(OPT_FILTER) && (qtype == T_SRV || (qtype == T_ANY && strchr(name, '_'))))
                {
                  ans = 1;
                  if (!dryrun)
@@ -1591,7 +1726,7 @@ size_t answer_request(HEADER *header, char *limit, size_t qlen,
                    ans = 1;
                    if (!dryrun)
                      {
-                       log_query(F_CNAME | F_FORWARD | F_CONFIG | F_NXDOMAIN, name, NULL, "<NAPTR>");
+                       log_query(F_CONFIG | F_RRNAME, name, NULL, "<NAPTR>");
                        if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, daemon->local_ttl, 
                                                NULL, T_NAPTR, C_IN, "sszzzd", 
                                                na->order, na->pref, na->flags, na->services, na->regexp, na->replace))
@@ -1603,7 +1738,7 @@ size_t answer_request(HEADER *header, char *limit, size_t qlen,
          if (qtype == T_MAILB)
            ans = 1, nxdomain = 1;
 
-         if (qtype == T_SOA && (daemon->options & OPT_FILTER))
+         if (qtype == T_SOA && option_bool(OPT_FILTER))
            {
              ans = 1; 
              if (!dryrun)
index 2802ca1edf9840dabea94852af8c059870c24589..67e6dd645ac40d9f0fe229530e8ba1615af726b7 100644 (file)
@@ -1,4 +1,4 @@
-/* dnsmasq is Copyright (c) 2000-2010 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2011 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
@@ -383,7 +383,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
   /* keep _a_ local address available. */
   fallback = context->local;
   
-  if (daemon->options & OPT_LOG_OPTS)
+  if (option_bool(OPT_LOG_OPTS))
     {
       struct dhcp_context *context_tmp;
       for (context_tmp = context; context_tmp; context_tmp = context_tmp->current)
@@ -603,7 +603,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
        client_hostname = daemon->dhcp_buff;
     }
 
-  if (client_hostname && daemon->options & OPT_LOG_OPTS)
+  if (client_hostname && option_bool(OPT_LOG_OPTS))
     my_syslog(MS_DHCP | LOG_INFO, _("%u client provides name: %s"), ntohl(mess->xid), client_hostname);
   
   if (have_config(config, CONFIG_NAME))
@@ -756,7 +756,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
     }
   match_vendor_opts(opt, daemon->dhcp_opts);
   
-  if (daemon->options & OPT_LOG_OPTS)
+  if (option_bool(OPT_LOG_OPTS))
     {
       if (sanitise(opt, daemon->namebuff))
        my_syslog(MS_DHCP | LOG_INFO, _("%u vendor class: %s"), ntohl(mess->xid), daemon->namebuff);
@@ -865,40 +865,49 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
          pxearch = option_uint(opt, 0, 2);
 
          /* proxy DHCP here. */
-         if ((mess_type == DHCPDISCOVER || (pxe && mess_type == DHCPREQUEST)) && 
-             (context->flags & CONTEXT_PROXY))
+         if ((mess_type == DHCPDISCOVER || (pxe && mess_type == DHCPREQUEST)))
            {
-             struct dhcp_boot *boot = find_boot(tagif_netid);
-
-             mess->yiaddr.s_addr = 0;
-             if  (mess_type == DHCPDISCOVER || mess->ciaddr.s_addr == 0)
-               {
-                 mess->ciaddr.s_addr = 0;
-                 mess->flags |= htons(0x8000); /* broadcast */
-               }
-
-             clear_packet(mess, end);
+             struct dhcp_context *tmp;
              
-             /* Provide the bootfile here, for gPXE, and in case we have no menu items
-                and set discovery_control = 8 */
-             if (boot)
+             for (tmp = context; tmp; tmp = tmp->current)
+               if ((tmp->flags & CONTEXT_PROXY) &&
+                   match_netid(tmp->filter, tagif_netid, 1))
+                 break;
+             
+             if (tmp)
                {
-                 if (boot->next_server.s_addr)
-                   mess->siaddr = boot->next_server;
+                 struct dhcp_boot *boot = find_boot(tagif_netid);
+               
+                 mess->yiaddr.s_addr = 0;
+                 if  (mess_type == DHCPDISCOVER || mess->ciaddr.s_addr == 0)
+                   {
+                     mess->ciaddr.s_addr = 0;
+                     mess->flags |= htons(0x8000); /* broadcast */
+                   }
+                 
+                 clear_packet(mess, end);
+                 
+                 /* Provide the bootfile here, for gPXE, and in case we have no menu items
+                    and set discovery_control = 8 */
+                 if (boot)
+                   {
+                     if (boot->next_server.s_addr)
+                       mess->siaddr = boot->next_server;
+                     
+                     if (boot->file)
+                       strncpy((char *)mess->file, boot->file, sizeof(mess->file)-1);
+                   }
                  
-                 if (boot->file)
-                   strncpy((char *)mess->file, boot->file, sizeof(mess->file)-1);
+                 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));
+                 pxe_misc(mess, end, uuid);
+                 prune_vendor_opts(tagif_netid);
+                 do_encap_opts(pxe_opts(pxearch, tagif_netid, context->local), OPTION_VENDOR_CLASS_OPT, DHOPT_VENDOR_MATCH, mess, end, 0);
+                 
+                 log_packet("PXE", NULL, emac, emac_len, iface_name, ignore ? "proxy-ignored" : "proxy", mess->xid);
+                 return ignore ? 0 : dhcp_packet_size(mess, tagif_netid, agent_id, real_end);    
                }
-
-             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));
-             pxe_misc(mess, end, uuid);
-             prune_vendor_opts(tagif_netid);
-             do_encap_opts(pxe_opts(pxearch, tagif_netid, context->local), OPTION_VENDOR_CLASS_OPT, DHOPT_VENDOR_MATCH, mess, end, 0);
-             
-             log_packet("PXE", NULL, emac, emac_len, iface_name, ignore ? "proxy-ignored" : "proxy", mess->xid);
-             return ignore ? 0 : dhcp_packet_size(mess, tagif_netid, agent_id, real_end);        
            }
        }
     }
@@ -1085,7 +1094,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
                      /* In auth mode, a REQUEST sent to the wrong server
                         should be faulted, so that the client establishes 
                         communication with us, otherwise, silently ignore. */
-                     if (!(daemon->options & OPT_AUTHORITATIVE))
+                     if (!option_bool(OPT_AUTHORITATIVE))
                        return 0;
                      message = _("wrong server-ID");
                    }
@@ -1101,7 +1110,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
          else
            {
              /* INIT-REBOOT */
-             if (!lease && !(daemon->options & OPT_AUTHORITATIVE))
+             if (!lease && !option_bool(OPT_AUTHORITATIVE))
                return 0;
              
              if (lease && lease->addr.s_addr != mess->yiaddr.s_addr)
@@ -1116,8 +1125,13 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
             as long as we can allocate the lease now - checked below.
             This makes for a smooth recovery from a lost lease DB */
          if ((lease && mess->ciaddr.s_addr != lease->addr.s_addr) ||
-             (!lease && !(daemon->options & OPT_AUTHORITATIVE)))
+             (!lease && !option_bool(OPT_AUTHORITATIVE)))
            {
+             /* A client rebinding will broadcast the request, so we may see it even 
+                if the lease is held by another server. Just ignore it in that case. 
+                If the request is unicast to us, then somethings wrong, NAK */
+             if (!unicast_dest)
+               return 0;
              message = _("lease not found");
              /* ensure we broadcast NAK */
              unicast_dest = 0;
@@ -1235,6 +1249,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
              
              lease->changed = 1;
              free(lease->extradata);
+             lease->extradata = NULL;
              lease->extradata_size = lease->extradata_len = 0;
              
              add_extradata_opt(lease, option_find(mess, sz, OPTION_VENDOR_ID, 1));
@@ -1568,7 +1583,7 @@ static void log_packet(char *type, void *addr, unsigned char *ext_mac,
   
   print_mac(daemon->namebuff, ext_mac, mac_len);
   
-  if(daemon->options & OPT_LOG_OPTS)
+  if(option_bool(OPT_LOG_OPTS))
      my_syslog(MS_DHCP | LOG_INFO, "%u %s(%s) %s%s%s %s",
               ntohl(xid), 
               type,
@@ -1737,7 +1752,7 @@ static size_t dhcp_packet_size(struct dhcp_packet *mess, struct dhcp_netid *neti
     }
   
   /* We do logging too */
-  if (netid && (daemon->options & OPT_LOG_OPTS))
+  if (netid && option_bool(OPT_LOG_OPTS))
     {
       char *s = daemon->namebuff;
       for (*s = 0; netid; netid = netid->next)
@@ -1763,19 +1778,19 @@ static size_t dhcp_packet_size(struct dhcp_packet *mess, struct dhcp_netid *neti
   if (overload && (option_uint(overload, 0, 1) & 1))
     {
       *dhcp_skip_opts(mess->file) = OPTION_END;
-      if (daemon->options & OPT_LOG_OPTS)
+      if (option_bool(OPT_LOG_OPTS))
        log_options(mess->file, mess->xid);
     }
-  else if ((daemon->options & OPT_LOG_OPTS) && strlen((char *)mess->file) != 0)
+  else if (option_bool(OPT_LOG_OPTS) && strlen((char *)mess->file) != 0)
     my_syslog(MS_DHCP | LOG_INFO, _("%u bootfile name: %s"), ntohl(mess->xid), (char *)mess->file);
   
   if (overload && (option_uint(overload, 0, 1) & 2))
     {
       *dhcp_skip_opts(mess->sname) = OPTION_END;
-      if (daemon->options & OPT_LOG_OPTS)
+      if (option_bool(OPT_LOG_OPTS))
        log_options(mess->sname, mess->xid);
     }
-  else if ((daemon->options & OPT_LOG_OPTS) && strlen((char *)mess->sname) != 0)
+  else if (option_bool(OPT_LOG_OPTS) && strlen((char *)mess->sname) != 0)
     my_syslog(MS_DHCP | LOG_INFO, _("%u server name: %s"), ntohl(mess->xid), (char *)mess->sname);
 
 
@@ -1787,7 +1802,7 @@ static size_t dhcp_packet_size(struct dhcp_packet *mess, struct dhcp_netid *neti
   if (id_list)
     mess->flags |= htons(0x8000); /* force broadcast */
   
-  if (daemon->options & OPT_LOG_OPTS)
+  if (option_bool(OPT_LOG_OPTS))
     {
       if (mess->siaddr.s_addr != 0)
        my_syslog(MS_DHCP | LOG_INFO, _("%u next server: %s"), ntohl(mess->xid), inet_ntoa(mess->siaddr));
@@ -2218,7 +2233,7 @@ static void do_options(struct dhcp_context *context,
     my_syslog(MS_DHCP | LOG_WARNING, _("Ignoring domain %s for DHCP host name %s"), config_domain, hostname);
   
   /* logging */
-  if ((daemon->options & OPT_LOG_OPTS) && req_options)
+  if (option_bool(OPT_LOG_OPTS) && req_options)
     {
       char *q = daemon->namebuff;
       for (i = 0; req_options[i] != OPTION_END; i++)
@@ -2251,7 +2266,7 @@ static void do_options(struct dhcp_context *context,
     {
       if (boot->sname)
        {         
-         if (!(daemon->options & OPT_NO_OVERRIDE) &&
+         if (!option_bool(OPT_NO_OVERRIDE) &&
              req_options && 
              in_list(req_options, OPTION_SNAME))
            option_put_string(mess, end, OPTION_SNAME, boot->sname, 1);
@@ -2261,7 +2276,7 @@ static void do_options(struct dhcp_context *context,
       
       if (boot->file)
        {
-         if (!(daemon->options & OPT_NO_OVERRIDE) &&
+         if (!option_bool(OPT_NO_OVERRIDE) &&
              req_options && 
              in_list(req_options, OPTION_FILENAME))
            option_put_string(mess, end, OPTION_FILENAME, boot->file, 1);
@@ -2300,7 +2315,7 @@ static void do_options(struct dhcp_context *context,
      fields look like they are in use, even when they aren't. This gets restored
      at the end of this function. */
 
-  if (!req_options || (daemon->options & OPT_NO_OVERRIDE))
+  if (!req_options || option_bool(OPT_NO_OVERRIDE))
     {
       f0 = mess->file[0];
       mess->file[0] = 1;
@@ -2537,7 +2552,7 @@ static void do_options(struct dhcp_context *context,
     memcpy(p, daemon->dhcp_buff3, vendor_class_len);       
    
    /* restore BOOTP anti-overload hack */
-  if (!req_options || (daemon->options & OPT_NO_OVERRIDE))
+  if (!req_options || option_bool(OPT_NO_OVERRIDE))
     {
       mess->file[0] = f0;
       mess->sname[0] = s0;
index 1f33eef003a776d6c52b5c2e562e7417a1e4d90b..ad5f54461bf00004920774d1d6738be1378814dc 100644 (file)
@@ -1,4 +1,4 @@
-/* dnsmasq is Copyright (c) 2000-2010 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2011 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
@@ -43,7 +43,7 @@ void tftp_request(struct listener *listen, time_t now)
   ssize_t len;
   char *packet = daemon->packet;
   char *filename, *mode, *p, *end, *opt;
-  struct sockaddr_in addr, peer;
+  union mysockaddr addr, peer;
   struct msghdr msg;
   struct iovec iov;
   struct ifreq ifr;
@@ -57,6 +57,7 @@ void tftp_request(struct listener *listen, time_t now)
   int mtuflag = IP_PMTUDISC_DONT;
 #endif
   char namebuff[IF_NAMESIZE];
+  char pretty_addr[ADDRSTRLEN];
   char *name;
   char *prefix = daemon->tftp_prefix;
   struct tftp_prefix *pref;
@@ -64,6 +65,9 @@ void tftp_request(struct listener *listen, time_t now)
 
   union {
     struct cmsghdr align; /* this ensures alignment */
+#ifdef HAVE_IPV6
+    char control6[CMSG_SPACE(sizeof(struct in6_pktinfo))];
+#endif
 #if defined(HAVE_LINUX_NETWORK)
     char control[CMSG_SPACE(sizeof(struct in_pktinfo))];
 #elif defined(HAVE_SOLARIS_NETWORK)
@@ -90,9 +94,9 @@ void tftp_request(struct listener *listen, time_t now)
   if ((len = recvmsg(listen->tftpfd, &msg, 0)) < 2)
     return;
   
-  if (daemon->options & OPT_NOWILD)
+  if (option_bool(OPT_NOWILD))
     {
-      addr = listen->iface->addr.in;
+      addr = listen->iface->addr;
       mtu = listen->iface->mtu;
       name = listen->iface->name;
     }
@@ -102,59 +106,88 @@ void tftp_request(struct listener *listen, time_t now)
       int check;
       struct interface_list *ir;
 
-      addr.sin_addr.s_addr = 0;
+      if (msg.msg_controllen < sizeof(struct cmsghdr))
+        return;
+      
+      addr.sa.sa_family = listen->family;
       
 #if defined(HAVE_LINUX_NETWORK)
-      for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, cmptr))
-       if (cmptr->cmsg_level == SOL_IP && cmptr->cmsg_type == IP_PKTINFO)
+      if (listen->family == AF_INET)
+       for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, cmptr))
+         if (cmptr->cmsg_level == SOL_IP && cmptr->cmsg_type == IP_PKTINFO)
+           {
+             union {
+               unsigned char *c;
+               struct in_pktinfo *p;
+             } p;
+             p.c = CMSG_DATA(cmptr);
+             addr.in.sin_addr = p.p->ipi_spec_dst;
+             if_index = p.p->ipi_ifindex;
+           }
+      
+#elif defined(HAVE_SOLARIS_NETWORK)
+      if (listen->family == AF_INET)
+       for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, cmptr))
          {
            union {
              unsigned char *c;
-             struct in_pktinfo *p;
+             struct in_addr *a;
+             unsigned int *i;
            } p;
            p.c = CMSG_DATA(cmptr);
-           addr.sin_addr = p.p->ipi_spec_dst;
-           if_index = p.p->ipi_ifindex;
+           if (cmptr->cmsg_level == IPPROTO_IP && cmptr->cmsg_type == IP_RECVDSTADDR)
+           addr.in.sin_addr = *(p.a);
+           else if (cmptr->cmsg_level == IPPROTO_IP && cmptr->cmsg_type == IP_RECVIF)
+           if_index = *(p.i);
          }
       
-#elif defined(HAVE_SOLARIS_NETWORK)
-      for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, cmptr))
-       {
-         union {
-           unsigned char *c;
-           struct in_addr *a;
-           unsigned int *i;
-         } p;
-         p.c = CMSG_DATA(cmptr);
-         if (cmptr->cmsg_level == IPPROTO_IP && cmptr->cmsg_type == IP_RECVDSTADDR)
-           addr.sin_addr = *(p.a);
-         else if (cmptr->cmsg_level == IPPROTO_IP && cmptr->cmsg_type == IP_RECVIF)
-           if_index = *(p.i);
-       }
-
 #elif defined(IP_RECVDSTADDR) && defined(IP_RECVIF)
-      for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, cmptr))
-       {
-         union {
-           unsigned char *c;
-           struct in_addr *a;
-           struct sockaddr_dl *s;
-         } p;
-         p.c = CMSG_DATA(cmptr);
-         if (cmptr->cmsg_level == IPPROTO_IP && cmptr->cmsg_type == IP_RECVDSTADDR)
-           addr.sin_addr = *(p.a);
-         else if (cmptr->cmsg_level == IPPROTO_IP && cmptr->cmsg_type == IP_RECVIF)
-           if_index = p.s->sdl_index;
-       }
+      if (listen->family == AF_INET)
+       for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, cmptr))
+         {
+           union {
+             unsigned char *c;
+             struct in_addr *a;
+             struct sockaddr_dl *s;
+           } p;
+           p.c = CMSG_DATA(cmptr);
+           if (cmptr->cmsg_level == IPPROTO_IP && cmptr->cmsg_type == IP_RECVDSTADDR)
+             addr.in.sin_addr = *(p.a);
+           else if (cmptr->cmsg_level == IPPROTO_IP && cmptr->cmsg_type == IP_RECVIF)
+             if_index = p.s->sdl_index;
+         }
          
+#endif
+
+#ifdef HAVE_IPV6
+      if (listen->family == AF_INET6)
+        {
+          for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, cmptr))
+            if (cmptr->cmsg_level == IPV6_LEVEL && cmptr->cmsg_type == daemon->v6pktinfo)
+              {
+                union {
+                  unsigned char *c;
+                  struct in6_pktinfo *p;
+                } p;
+                p.c = CMSG_DATA(cmptr);
+                  
+                addr.in6.sin6_addr = p.p->ipi6_addr;
+                if_index = p.p->ipi6_ifindex;
+              }
+        }
 #endif
       
-      if (!indextoname(listen->tftpfd, if_index, namebuff) ||
-         addr.sin_addr.s_addr == 0)
+      if (!indextoname(listen->tftpfd, if_index, namebuff))
        return;
 
       name = namebuff;
-      check = iface_check(AF_INET, (struct all_addr *)&addr.sin_addr, name, &if_index);
+
+#ifdef HAVE_IPV6
+      if (listen->family == AF_INET6)
+       check = iface_check(AF_INET6, (struct all_addr *)&addr.in6.sin6_addr, name, &if_index);
+      else
+#endif
+        check = iface_check(AF_INET, (struct all_addr *)&addr.in.sin_addr, name, &if_index);
 
       /* wierd TFTP service override */
       for (ir = daemon->tftp_interfaces; ir; ir = ir->next)
@@ -189,16 +222,24 @@ void tftp_request(struct listener *listen, time_t now)
     if (strcmp(ir->interface, name) == 0)
       special = 1;
 
-  addr.sin_port = htons(port);
-  addr.sin_family = AF_INET;
 #ifdef HAVE_SOCKADDR_SA_LEN
-  addr.sin_len = sizeof(addr);
+  addr.sa.sa_len = sa_len(&addr);
 #endif
-  
+
+  if (listen->family == AF_INET)
+    addr.in.sin_port = htons(port);
+#ifdef HAVE_IPV6
+  else
+    {
+      addr.in6.sin6_port = htons(port);
+      addr.in6.sin6_flowinfo = 0;
+    }
+#endif
+
   if (!(transfer = whine_malloc(sizeof(struct tftp_transfer))))
     return;
   
-  if ((transfer->sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
+  if ((transfer->sockfd = socket(listen->family, SOCK_DGRAM, 0)) == -1)
     {
       free(transfer);
       return;
@@ -213,11 +254,13 @@ void tftp_request(struct listener *listen, time_t now)
   transfer->file = NULL;
   transfer->opt_blocksize = transfer->opt_transize = 0;
   transfer->netascii = transfer->carrylf = 0;
-
+  prettyprint_addr(&peer, pretty_addr);
+  
   /* if we have a nailed-down range, iterate until we find a free one. */
   while (1)
     {
-      if (bind(transfer->sockfd, (struct sockaddr *)&addr, sizeof(addr)) == -1 ||
+      if (bind(transfer->sockfd, &addr.sa, sizeof(addr)) == -1 ||
 #if defined(IP_MTU_DISCOVER) && defined(IP_PMTUDISC_DONT)
          setsockopt(transfer->sockfd, SOL_IP, IP_MTU_DISCOVER, &mtuflag, sizeof(mtuflag)) == -1 ||
 #endif
@@ -227,7 +270,12 @@ void tftp_request(struct listener *listen, time_t now)
            {
              if (++port <= daemon->end_tftp_port)
                { 
-                 addr.sin_port = htons(port);
+                 if (listen->family == AF_INET)
+                   addr.in.sin_port = htons(port);
+#ifdef HAVE_IPV6
+                 else
+                    addr.in6.sin6_port = htons(port);
+#endif
                  continue;
                }
              my_syslog(MS_TFTP | LOG_ERR, _("unable to get free port for TFTP"));
@@ -245,7 +293,7 @@ void tftp_request(struct listener *listen, time_t now)
       !(filename = next(&p, end)) ||
       !(mode = next(&p, end)) ||
       (strcasecmp(mode, "octet") != 0 && strcasecmp(mode, "netascii") != 0))
-    len = tftp_err(ERR_ILL, packet, _("unsupported request from %s"), inet_ntoa(peer.sin_addr));
+    len = tftp_err(ERR_ILL, packet, _("unsupported request from %s"), pretty_addr);
   else
     {
       if (strcasecmp(mode, "netascii") == 0)
@@ -256,7 +304,7 @@ void tftp_request(struct listener *listen, time_t now)
          if (strcasecmp(opt, "blksize") == 0)
            {
              if ((opt = next(&p, end)) &&
-                 (special || !(daemon->options & OPT_TFTP_NOBLOCK)))
+                 (special || !option_bool(OPT_TFTP_NOBLOCK)))
                {
                  transfer->blocksize = atoi(opt);
                  if (transfer->blocksize < 1)
@@ -290,12 +338,12 @@ void tftp_request(struct listener *listen, time_t now)
          if (prefix[strlen(prefix)-1] != '/')
            strncat(daemon->namebuff, "/", (MAXDNAME-1) - strlen(daemon->namebuff));
 
-         if (!special && (daemon->options & OPT_TFTP_APREF))
+         if (!special && option_bool(OPT_TFTP_APREF))
            {
              size_t oldlen = strlen(daemon->namebuff);
              struct stat statbuf;
              
-             strncat(daemon->namebuff, inet_ntoa(peer.sin_addr), (MAXDNAME-1) - strlen(daemon->namebuff));
+             strncat(daemon->namebuff, pretty_addr, (MAXDNAME-1) - strlen(daemon->namebuff));
              strncat(daemon->namebuff, "/", (MAXDNAME-1) - strlen(daemon->namebuff));
              
              /* remove unique-directory if it doesn't exist */
@@ -333,7 +381,6 @@ void tftp_request(struct listener *listen, time_t now)
     free_transfer(transfer);
   else
     {
-      my_syslog(MS_TFTP | LOG_INFO, _("sent %s to %s"), daemon->namebuff, inet_ntoa(peer.sin_addr));
       transfer->next = daemon->tftp_trans;
       daemon->tftp_trans = transfer;
     }
@@ -376,7 +423,7 @@ static struct tftp_file *check_tftp_fileperm(ssize_t *len, char *prefix, int spe
        goto perm;
     }
   /* in secure mode, must be owned by user running dnsmasq */
-  else if (!special && (daemon->options & OPT_TFTP_SECURE) && uid != statbuf.st_uid)
+  else if (!special && option_bool(OPT_TFTP_SECURE) && uid != statbuf.st_uid)
     goto perm;
       
   /* If we're doing many tranfers from the same file, only 
@@ -426,6 +473,7 @@ void check_tftp_listeners(fd_set *rset, time_t now)
 {
   struct tftp_transfer *transfer, *tmp, **up;
   ssize_t len;
+  char pretty_addr[ADDRSTRLEN];
   
   struct ack {
     unsigned short op, block;
@@ -440,6 +488,8 @@ void check_tftp_listeners(fd_set *rset, time_t now)
        {
          /* we overwrote the buffer... */
          daemon->srv_save = NULL;
+          
+         prettyprint_addr(&transfer->peer, pretty_addr);
          
          if ((len = recv(transfer->sockfd, daemon->packet, daemon->packet_buff_sz, 0)) >= (ssize_t)sizeof(struct ack))
            {
@@ -456,6 +506,7 @@ void check_tftp_listeners(fd_set *rset, time_t now)
                  char *p = daemon->packet + sizeof(struct ack);
                  char *end = daemon->packet + len;
                  char *err = next(&p, end);
+                 
                  /* Sanitise error message */
                  if (!err)
                    err = "";
@@ -467,9 +518,10 @@ void check_tftp_listeners(fd_set *rset, time_t now)
                          *(q++) = *r;
                      *q = 0;
                    }
+
                  my_syslog(MS_TFTP | LOG_ERR, _("error %d %s received from %s"),
                            (int)ntohs(mess->block), err, 
-                           inet_ntoa(transfer->peer.sin_addr));        
+                           pretty_addr);       
                  
                  /* Got err, ensure we take abort */
                  transfer->timeout = now;
@@ -498,9 +550,12 @@ void check_tftp_listeners(fd_set *rset, time_t now)
              /* don't complain about timeout when we're awaiting the last
                 ACK, some clients never send it */
              if (len != 0)
-               my_syslog(MS_TFTP | LOG_ERR, _("failed sending %s to %s"), 
-                         transfer->file->filename, inet_ntoa(transfer->peer.sin_addr));
-             len = 0;
+               {
+                 my_syslog(MS_TFTP | LOG_ERR, _("failed sending %s to %s"), 
+                           transfer->file->filename, pretty_addr);
+                 len = 0;
+                 endcon = 1;
+               }
            }
          
          if (len != 0)
@@ -509,6 +564,8 @@ void check_tftp_listeners(fd_set *rset, time_t now)
          
          if (endcon || len == 0)
            {
+             if (!endcon)
+               my_syslog(MS_TFTP | LOG_INFO, _("sent %s to %s"), transfer->file->filename, pretty_addr);
              /* unlink */
              *up = tmp;
              free_transfer(transfer);
@@ -517,7 +574,7 @@ void check_tftp_listeners(fd_set *rset, time_t now)
        }
 
       up = &transfer->next;
-    }
+    }    
 }
 
 static void free_transfer(struct tftp_transfer *transfer)
index 6b193b72b9c46922fe51214f39f7e9cda3b94fd7..49719cf2ff314118e019d22f5aa2159045c901b3 100644 (file)
@@ -1,4 +1,4 @@
-/* dnsmasq is Copyright (c) 2000-2010 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2011 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
@@ -365,7 +365,8 @@ void prettyprint_time(char *buf, unsigned int t)
 }
 
 
-/* in may equal out, when maxlen may be -1 (No max len). */
+/* in may equal out, when maxlen may be -1 (No max len). 
+   Return -1 for extraneous no-hex chars found. */
 int parse_hex(char *in, unsigned char *out, int maxlen, 
              unsigned int *wildcard_mask, int *mac_type)
 {
@@ -377,7 +378,10 @@ int parse_hex(char *in, unsigned char *out, int maxlen,
   
   while (maxlen == -1 || i < maxlen)
     {
-      for (r = in; *r != 0 && *r != ':' && *r != '-'; r++);
+      for (r = in; *r != 0 && *r != ':' && *r != '-'; r++)
+       if (!isxdigit((int)*r))
+         return -1;
+      
       if (*r == 0)
        maxlen = i;