summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG167
-rw-r--r--FAQ10
-rw-r--r--contrib/Solaris10/README-sparc8
-rw-r--r--contrib/Solaris10/create_package2
-rw-r--r--contrib/static-arp/static-arp35
-rw-r--r--dnsmasq.conf.example46
-rw-r--r--man/dnsmasq.8368
-rw-r--r--man/es/dnsmasq.8397
-rw-r--r--man/fr/dnsmasq.8432
-rw-r--r--po/de.po1252
-rw-r--r--po/es.po631
-rw-r--r--po/fi.po616
-rw-r--r--po/fr.po657
-rw-r--r--po/id.po640
-rw-r--r--po/it.po616
-rw-r--r--po/no.po632
-rw-r--r--po/pl.po644
-rw-r--r--po/pt_BR.po616
-rw-r--r--po/ro.po632
-rw-r--r--src/cache.c15
-rw-r--r--src/config.h8
-rw-r--r--src/dhcp.c156
-rw-r--r--src/dnsmasq.c73
-rw-r--r--src/dnsmasq.h61
-rw-r--r--src/forward.c169
-rw-r--r--src/helper.c9
-rw-r--r--src/lease.c5
-rw-r--r--src/log.c93
-rw-r--r--src/netlink.c4
-rw-r--r--src/network.c167
-rw-r--r--src/option.c371
-rw-r--r--src/rfc1035.c87
-rw-r--r--src/rfc2131.c340
-rw-r--r--src/tftp.c126
34 files changed, 5941 insertions, 4144 deletions
diff --git a/CHANGELOG b/CHANGELOG
index d857065..735e00a 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,163 @@
+version 2.53
+ Fix failure to compile on Debian/kFreeBSD. Thanks to
+ Axel Beckert and Petr Salinger.
+
+ Fix code to avoid scary strict-aliasing warnings
+ generated by gcc 4.4.
+
+ Added FAQ entry warning about DHCP failures with Vista
+ when firewalls block 255.255.255.255.
+
+ Fixed bug which caused bad things to happen if a
+ resolv.conf file which exists is subsequently removed.
+ Thanks to Nikolai Saoukh for the patch.
+
+ Rationalised the DHCP tag system. Every configuration item
+ which can set a tag does so by adding "set:<tag>" and
+ every configuration item which is conditional on a tag is
+ made so by "tag:<tag>". The NOT operator changes to '!',
+ which is a bit more intuitive too. Dhcp-host directives
+ can set more than one tag now. The old '#' NOT,
+ "net:" prefix and no-prefixes are still honoured, so
+ no existing config file needs to be changed, but
+ the documentation and new-style config files should be
+ much less confusing.
+
+ Added --tag-if to allow boolean operations on tags.
+ This allows complicated logic to be clearer and more
+ general. A great suggestion from Richard Voigt.
+
+ Add broadcast/unicast information to DHCP logging.
+
+ Allow --dhcp-broadcast to be unconditional.
+
+ Fixed incorrect behaviour with NOT <tag> conditionals in
+ dhcp-options. Thanks to Max Turkewitz for assistance
+ finding this.
+
+ If we send vendor-class encapsulated options based on the
+ vendor-class supplied by the client, and no explicit
+ vendor-class option is given, echo back the vendor-class
+ from the client.
+
+ Fix bug which stopped dnsmasq from matching both a
+ circuitid and a remoteid. Thanks to Ignacio Bravo for
+ finding this.
+
+ Add --dhcp-proxy, which makes it possible to configure
+ dnsmasq to use a DHCP relay agent as a full proxy, with
+ all DHCP messages passing through the proxy. This is
+ useful if the relay adds extra information to the packets
+ it forwards, but cannot be configured with the RFC 5107
+ server-override option.
+
+ Added interface:<iface name> part to dhcp-range. The
+ semantics of this are very odd at first sight, but it
+ allows a single line of the form
+ dhcp-range=interface:virt0,192.168.0.4,192.168.0.200
+ to be added to dnsmasq configuration which then supplies
+ DHCP and DNS services to that interface, without affecting
+ what services are supplied to other interfaces and
+ irrespective of the existance or lack of
+ interface=<interface>
+ lines elsewhere in the dnsmasq configuration. The idea is
+ that such a line can be added automatically by libvirt
+ or equivalent systems, without disturbing any manual
+ configuration.
+
+ Similarly to the above, allow --enable-tftp=<interface>
+
+ Allow a TFTP root to be set separately for requests via
+ different interfaces, --tftp-root=<path>,<interface>
+
+ Correctly handle and log clashes between CNAMES and
+ DNS names being given to DHCP leases. This fixes a bug
+ which caused nonsense IP addresses to be logged. Thanks to
+ Sergei Zhirikov for finding and analysing the problem.
+
+ Tweak flush_log so as to avoid leaving the log
+ file in non-blocking mode. O_NONBLOCK is a property of the
+ file, not the process/descriptor.
+
+ Fix contrib/Solaris10/create_package
+ (/usr/man -> /usr/share/man) Thanks to Vita Batrla.
+
+ Fix a problem where, if a client got a lease, then went
+ to another subnet and got another lease, then moved back,
+ it couldn't resume the old lease, but would instead get
+ a new address. Thanks to Leonardo Rodrigues for spotting
+ this and testing the fix.
+
+ Fix weird bug which sometimes omitted certain characters
+ from the start of quoted strings in dhcp-options. Thanks
+ to Dayton Turner for spotting the problem.
+
+ Add facility to redirect some domains to the standard
+ upstream servers: this allows something like
+ --server=/google.com/1.2.3.4 --server=/www.google.com/#
+ which will send queries for *.google.com to 1.2.3.4,
+ except *www.google.com which will be forwarded as usual.
+ Thanks to AJ Weber for prompting this addition.
+
+ Improve the hash-algorithm used to generate IP addresses
+ from MAC addresses during initial DHCP address
+ allocation. This improves performance when large numbers
+ of hosts with similar MAC addresses all try and get an IP
+ address at the same time. Thanks to Paul Smith for his
+ work on this.
+
+ Tweak DHCP code so that --bridge-interface can be used to
+ select which IP alias of an interface should be used for
+ DHCP purposes on Linux. If eth0 has an alias eth0:dhcp
+ then adding --bridge-interface=eth0:dhcp,eth0 will use
+ the address of eth0:dhcp to determine the correct subnet
+ for DHCP address allocation. Thanks to Pawel Golaszewski
+ for prompting this and Eric Cooper for further testing.
+
+ Add --dhcp-generate-names. Suggestion by Ferenc Wagner.
+
+ Tweak DNS server selection algorithm when there is more
+ than one server available for a domain, eg.
+ --server=/mydomain/1.1.1.1
+ --server=/mydomain/2.2.2.2
+ Thanks to Alberto Cuesta-Canada for spotting a weakness
+ here.
+
+ Add --max-ttl. Thanks to Fredrik Ringertz for the patch.
+
+ Allow --log-facility=- to force all logging to
+ stderr. Suggestion from Clemens Fischer.
+
+ Fix regression which caused configuration like
+ --address=/.domain.com/1.2.3.4 to be rejected. The dot to the
+ left of the domain has been implied and not required for a
+ long time, but it should be accepted for backward
+ compatibility. Thanks to Andrew Burcin for spotting this.
+
+ Add --rebind-domain-ok and --rebind-localhost-ok.
+ Suggestion from Clemens Fischer.
+
+ Log replies to queries of type TXT, when --log-queries
+ is set.
+
+ Fix compiler warnings when compiled with -DNO_DHCP. Thanks
+ to Shantanu Gadgil for the patch.
+
+ Updated French translation. Thanks to Gildas Le Nadan.
+
+ Updated Polish translation. Thanks to Jan Psota.
+
+ Updated German translation. Thanks to Matthias Andree.
+
+ Added contrib/static-arp, thanks to Darren Hoo.
+
+ Fix corruption of the domain when a name from /etc/hosts
+ overrides one supplied by a DHCP client. Thanks to Fedor
+ Kozhevnikov for spotting the problem.
+
+ Updated Spanish translation. Thanks to Chris Chatham.
+
+
version 2.52
Work around a Linux kernel bug which insists that the
length of the option passed to setsockopt must be at least
@@ -81,7 +241,7 @@ version 2.52
reconfigured using --edns-packet-max if needed. Thanks to
Francis Dupont for pointing this out.
- Rewrite query-ids even for DNSSEC signed packets, since
+ Rewrite query-ids even for TSIG signed packets, since
this is allowed by RFC5625 section 4.5.
Use getopt_long by default on OS X. It has been supported
@@ -101,7 +261,12 @@ version 2.52
Updated Spanish translation. Thanks to Chris Chatham.
+ Fixed confusion about domains, when looking up DHCP hosts
+ in /etc/hosts. This could cause spurious "Ignoring
+ domain..." messages. Thanks to Fedor Kozhevnikov for
+ finding and analysing the problem.
+
version 2.51
Add support for internationalised DNS. Non-ASCII characters
in domain names found in /etc/hosts, /etc/ethers and
diff --git a/FAQ b/FAQ
index b51c31e..d7df80c 100644
--- a/FAQ
+++ b/FAQ
@@ -456,6 +456,16 @@ A: In almost all cases: none. If you have the normal arrangement with
and turn on syslog-ng's dns-cache function.
+Q: DHCP doesn't work with windows Vista, but everything else is fine.
+
+A: The DHCP client on windows Vista (and possibly later versions)
+ demands that the DHCP server send replies as broadcasts. Most other
+ clients don't do this. The broadcasts are send to
+ 255.255.255.255. A badly configured firewall which blocks such
+ packets will show exactly these symptoms (Vista fails, others
+ work).
+
+
diff --git a/contrib/Solaris10/README-sparc b/contrib/Solaris10/README-sparc
new file mode 100644
index 0000000..327b65c
--- /dev/null
+++ b/contrib/Solaris10/README-sparc
@@ -0,0 +1,8 @@
+Hi Simon,
+
+I just wanted to let you know that I have built a Solaris .pkg install package of your dnsmasq utility for people to use. Feel free to point them in my direction if you have people who want this sort of thing.
+
+http://ejesconsulting.wordpress.com/2010/05/12/gnu-dnsmasq-for-opensolaris-sparc/
+
+Thanks
+-evan
diff --git a/contrib/Solaris10/create_package b/contrib/Solaris10/create_package
index fd3fc84..acfa2a1 100644
--- a/contrib/Solaris10/create_package
+++ b/contrib/Solaris10/create_package
@@ -6,7 +6,7 @@
#
BIN_DIR="/usr/sbin"
CONF_DIR="/etc"
-MAN_DIR="/usr/man/man8"
+MAN_DIR="/usr/share/man/man8"
PACKAGE_NAME="dnsmasq"
diff --git a/contrib/static-arp/static-arp b/contrib/static-arp/static-arp
new file mode 100644
index 0000000..82115b7
--- /dev/null
+++ b/contrib/static-arp/static-arp
@@ -0,0 +1,35 @@
+#!/bin/sh
+
+# Contributed by Darren Hoo <darren.hoo@gmail.com>
+
+# If you use dnsmasq as DHCP server on a router, you may have
+# met with attackers trying ARP Poison Routing (APR) on your
+# local area network. This script will setup a 'permanent' entry
+# in the router's ARP table upon each DHCP transaction so as to
+# make the attacker's efforts less successful.
+
+# Usage:
+# edit /etc/dnsmasq.conf and specify the path of this script
+# to dhcp-script, for example:
+# dhcp-script=/usr/sbin/static-arp
+
+# if $1 is add or old, update the static arp table entry.
+# if $1 is del, then delete the entry from the table
+# if $1 is init which is called by dnsmasq at startup, it's ignored
+
+ARP=/usr/sbin/arp
+
+# Arguments.
+# $1 is action (add, del, old)
+# $2 is MAC
+# $3 is address
+# $4 is hostname (optional, may be unset)
+
+if [ ${1} = del ] ; then
+ ${ARP} -d $3
+fi
+
+if [ ${1} = old ] || [ ${1} = add ] ; then
+ ${ARP} -s $3 $2
+fi
+
diff --git a/dnsmasq.conf.example b/dnsmasq.conf.example
index 9540560..fd634bc 100644
--- a/dnsmasq.conf.example
+++ b/dnsmasq.conf.example
@@ -66,12 +66,12 @@
# 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
+# server=10.1.2.3@eth1
# and this sets the source (ie local) address used to talk to
# 10.1.2.3 to 192.168.1.1 port 55 (there must be a interface with that
# IP on the machine, obviously).
-# --server=10.1.2.3@192.168.1.1#55
+# server=10.1.2.3@192.168.1.1#55
# If you want dnsmasq to change uid and gid to something other
# than the default, edit the following lines.
@@ -141,10 +141,22 @@
# don't need to worry about this.
#dhcp-range=192.168.0.50,192.168.0.150,255.255.255.0,12h
-# This is an example of a DHCP range with a network-id, so that
+# This is an example of a DHCP range which sets a tag, so that
# some DHCP options may be set only for this network.
-#dhcp-range=red,192.168.0.50,192.168.0.150
-
+#dhcp-range=set:red,192.168.0.50,192.168.0.150
+
+# 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,
+# is available for hosts with matching --dhcp-host lines. Note that
+# 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.
+#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
@@ -200,29 +212,29 @@
# Send extra options which are tagged as "red" to
# the machine with ethernet address 11:22:33:44:55:66
-#dhcp-host=11:22:33:44:55:66,net:red
+#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:
-#dhcp-host=11:22:33:*:*:*,net:red
+#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
# a host is matched.
-#dhcp-ignore=#known
+#dhcp-ignore=tag:!known
# Send extra options which are tagged as "red" to any machine whose
# DHCP vendorclass string includes the substring "Linux"
-#dhcp-vendorclass=red,Linux
+#dhcp-vendorclass=set:red,Linux
# Send extra options which are tagged as "red" to any machine one
# of whose DHCP userclass strings includes the substring "accounts"
-#dhcp-userclass=red,accounts
+#dhcp-userclass=set:red,accounts
# Send extra options which are tagged as "red" to any machine whose
# MAC address matches the pattern.
-#dhcp-mac=red,00:60:8C:*:*:*
+#dhcp-mac=set:red,00:60:8C:*:*:*
# If this line is uncommented, dnsmasq will read /etc/ethers and act
# on the ethernet-address/IP pairs found there just as if they had
@@ -276,8 +288,8 @@
# Specify an option which will only be sent to the "red" network
# (see dhcp-range for the declaration of the "red" network)
-# Note that the net: part must precede the option: part.
-#dhcp-option = net:red, option:ntp-server, 192.168.1.1
+# Note that the tag: part must precede the option: part.
+#dhcp-option = tag:red, option:ntp-server, 192.168.1.1
# The following DHCP options set up dnsmasq in the same way as is specified
# for the ISC dhcpcd in
@@ -338,8 +350,8 @@
# Boot for Etherboot gPXE. The idea is to send two different
# filenames, the first loads gPXE, and the second tells gPXE what to
# load. The dhcp-match sets the gpxe tag for requests from gPXE.
-#dhcp-match=gpxe,175 # gPXE sends a 175 option.
-#dhcp-boot=net:#gpxe,undionly.kpxe
+#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
@@ -490,11 +502,11 @@
# set for this to work.)
# A SRV record sending LDAP for the example.com domain to
-# ldapserver.example.com port 289
+# ldapserver.example.com port 389
#srv-host=_ldap._tcp.example.com,ldapserver.example.com,389
# A SRV record sending LDAP for the example.com domain to
-# ldapserver.example.com port 289 (using domain=)
+# ldapserver.example.com port 389 (using domain=)
#domain=example.com
#srv-host=_ldap._tcp,ldapserver.example.com,389
diff --git a/man/dnsmasq.8 b/man/dnsmasq.8
index 6ed8a0d..80d0120 100644
--- a/man/dnsmasq.8
+++ b/man/dnsmasq.8
@@ -65,6 +65,12 @@ cache the reply. This option gives a default value for time-to-live
(in seconds) which dnsmasq uses to cache negative replies even in
the absence of an SOA record.
.TP
+.B --max-ttl=<time>
+Set a maximum TTL value that will be handed out to clients. The specified
+maximum TTL will be given to clients instead of the true TTL value if it is
+lower. The true TTL value is however kept in the cache to avoid flooding
+the upstream DNS servers.
+.TP
.B \-k, --keep-in-foreground
Do not go into the background at startup but otherwise run as
normal. This is intended for use when dnsmasq is run under daemontools
@@ -84,7 +90,8 @@ Set the facility to which dnsmasq will send syslog entries, this
defaults to DAEMON, and to LOCAL0 when debug mode is in operation. If
the facility given contains at least one '/' character, it is taken to
be a filename, and dnsmasq logs to the given file, instead of
-syslog. (Errors whilst reading configuration will still go to syslog,
+syslog. If the facility is '-' then dnsmasq logs to stderr.
+(Errors whilst reading configuration will still go to syslog,
but all output from a successful startup, and all output whilst
running, will go exclusively to the file.) When logging to a file,
dnsmasq will close and reopen the file when it receives SIGUSR2. This
@@ -276,6 +283,17 @@ Reject (and log) addresses from upstream nameservers which are in the
private IP ranges. This blocks an attack where a browser behind a
firewall is used to probe machines on the local network.
.TP
+.B --rebind-localhost-ok
+Exempt 127.0.0.0/8 from rebinding checks. This address range is
+returned by realtime black hole servers, so blocking it may disable
+these services.
+.TP
+.B --rebind-domain-ok=[<domain>]|[[/<domain>/[<domain>/]
+Do not detect and block dns-rebind on queries to these domains. The
+argument may be either a single domain, or multiple domains surrounded
+by '/', like the --server syntax, eg.
+.B --rebind-domain-ok=/domain1/domain2/domain3/
+.TP
.B \-n, --no-poll
Don't poll /etc/resolv.conf for changes.
.TP
@@ -308,7 +326,19 @@ dots in them. A non-standard port may be specified as
part of the IP
address using a # character.
More than one -S flag is allowed, with
-repeated domain or ipaddr parts as required.
+repeated domain or ipaddr parts as required.
+
+More specific domains take precendence over less specific domains, so:
+.B --server=/google.com/1.2.3.4
+.B --server=/www.google.com/2.3.4.5
+will send queries for *.google.com to 1.2.3.4, except *www.google.com,
+which will go to 2.3.4.5
+
+The special server address '#' means, "use the standard servers", so
+.B --server=/google.com/1.2.3.4
+.B --server=/www.google.com/#
+will send queries for *.google.com to 1.2.3.4, except *www.google.com which will
+be forwarded as usual.
Also permitted is a -S
flag which gives a domain but no IP address; this tells dnsmasq that
@@ -426,7 +456,7 @@ 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 \-F, --dhcp-range=[[net:]network-id,]<start-addr>,<end-addr>[,<netmask>[,<broadcast>]][,<lease time>]
+.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
in
@@ -442,10 +472,13 @@ networks on which the machine running dnsmasq has an interface) the
netmask is optional. It is, however, required for networks which
receive DHCP service via a relay agent. The broadcast address is
always optional. It is always
-allowed to have more than one dhcp-range in a single subnet. The optional
-network-id is a alphanumeric label which marks this network so that
+allowed to have more than one dhcp-range in a single subnet.
+
+The optional
+.B set:<tag>
+sets an alphanumeric label which marks this network so that
dhcp options may be specified on a per-network basis.
-When it is prefixed with 'net:' then its meaning changes from setting
+When it is prefixed with 'tag:' instead, then its meaning changes from setting
a tag to matching it. Only one tag may be set, but more than one tag may be matched.
The end address may be replaced by the keyword
.B static
@@ -462,8 +495,11 @@ subnet. (See
and
.B pxe-service
for details.)
+
+The interface:<interface name> section is not normally used. See the
+NOTES section for details of this.
.TP
-.B \-G, --dhcp-host=[<hwaddr>][,id:<client_id>|*][,net:<netid>][,<ipaddr>][,<hostname>][,<lease_time>][,ignore]
+.B \-G, --dhcp-host=[<hwaddr>][,id:<client_id>|*][,set:<tag>][,<ipaddr>][,<hostname>][,<lease_time>][,ignore]
Specify per host parameters for the DHCP server. This allows a machine
with a particular hardware address to be always allocated the same
hostname, IP address and lease time. A hostname specified like this
@@ -478,9 +514,15 @@ an infinite DHCP lease.
.B --dhcp-host=lap,192.168.0.199
tells
dnsmasq to always allocate the machine lap the IP address
-192.168.0.199. Addresses allocated like this are not constrained to be
-in the range given by the --dhcp-range option, but they must be on the
-network being served by the DHCP server. It is allowed to use client identifiers rather than
+192.168.0.199.
+
+Addresses allocated like this are not constrained to be
+in the range given by the --dhcp-range option, but they must be in
+the same subnet as some valid dhcp-range. For
+subnets which don't need a pool of dynamically allocated addresses,
+use the "static" keyword in the dhcp-range declaration.
+
+It is allowed to use client identifiers rather than
hardware addresses to identify hosts by prefixing with 'id:'. Thus:
.B --dhcp-host=id:01:02:03:04,.....
refers to the host with client identifier 01:02:03:04. It is also
@@ -494,7 +536,14 @@ but not others.
If a name appears in /etc/hosts, the associated address can be
allocated to a DHCP lease, but only if a
.B --dhcp-host
-option specifying the name also exists. The special keyword "ignore"
+option specifying the name also exists. Only one hostname can be
+given in a
+.B dhcp-host
+option, but aliases are possible by using CNAMEs. (See
+.B --cname
+).
+
+The special keyword "ignore"
tells dnsmasq to never offer a DHCP lease to a machine. The machine
can be specified by hardware address, client ID or hostname, for
instance
@@ -503,13 +552,15 @@ This is
useful when there is another DHCP server on the network which should
be used by some machines.
-The net:<network-id> sets the network-id tag
+The set:<tag> contruct sets the tag
whenever this dhcp-host directive is in use. This can be used to
-selectively send DHCP options just for this host. When a host matches any
+selectively send DHCP options just for this host. More than one tag
+can be set in a dhcp-host directive (but not in other places where
+"set:<tag>" is allowed). When a host matches any
dhcp-host directive (or one implied by /etc/ethers) then the special
-network-id tag "known" is set. This allows dnsmasq to be configured to
+tag "known" is set. This allows dnsmasq to be configured to
ignore requests from unknown machines using
-.B --dhcp-ignore=#known
+.B --dhcp-ignore=tag:!known
Ethernet addresses (but not client-ids) may have
wildcard bytes, so for example
.B --dhcp-host=00:20:e0:3b:13:*,ignore
@@ -563,7 +614,7 @@ have exactly the same effect as
options containing the same information. /etc/ethers is re-read when
dnsmasq receives SIGHUP.
.TP
-.B \-O, --dhcp-option=[<network-id>,[<network-id>,]][encap:<opt>,][vi-encap:<enterprise>,][vendor:[<vendor-class>],][<opt>|option:<opt-name>],[<value>[,<value>]]
+.B \-O, --dhcp-option=[tag:<tag>,[tag:<tag>,]][encap:<opt>,][vi-encap:<enterprise>,][vendor:[<vendor-class>],][<opt>|option:<opt-name>],[<value>[,<value>]]
Specify different or extra options to DHCP clients. By default,
dnsmasq sends some standard options to DHCP clients, the netmask and
broadcast address are set to the same as the host running dnsmasq, and
@@ -586,8 +637,8 @@ or
The special address 0.0.0.0 is taken to mean "the address of the
machine running dnsmasq". Data types allowed are comma separated
dotted-quad IP addresses, a decimal number, colon-separated hex digits
-and a text string. If the optional network-ids are given then
-this option is only sent when all the network-ids are matched.
+and a text string. If the optional tags are given then
+this option is only sent when all the tags are matched.
Special processing is done on a text argument for option 119, to
conform with RFC 3397. Text or dotted-quad IP addresses as arguments
@@ -640,7 +691,7 @@ used to identify this option.
The address 0.0.0.0 is not treated specially in
encapsulated options.
.TP
-.B --dhcp-option-force=[<network-id>,[<network-id>,]][encap:<opt>,][vi-encap:<enterprise>,][vendor:[<vendor-class>],]<opt>,[<value>[,<value>]]
+.B --dhcp-option-force=[tag:<tag>,[tag:<tag>,]][encap:<opt>,][vi-encap:<enterprise>,][vendor:[<vendor-class>],]<opt>,[<value>[,<value>]]
This works in exactly the same way as
.B --dhcp-option
except that the option will always be sent, even if the client does
@@ -655,20 +706,20 @@ DHCP options. This make extra space available in the DHCP packet for
options but can, rarely, confuse old or broken clients. This flag
forces "simple and safe" behaviour to avoid problems in such a case.
.TP
-.B \-U, --dhcp-vendorclass=<network-id>,<vendor-class>
-Map from a vendor-class string to a network id tag. Most DHCP clients provide a
+.B \-U, --dhcp-vendorclass=set:<tag>,<vendor-class>
+Map from a vendor-class string to a tag. Most DHCP clients provide a
"vendor class" which represents, in some sense, the type of host. This option
maps vendor classes to tags, so that DHCP options may be selectively delivered
to different classes of hosts. For example
-.B dhcp-vendorclass=printers,Hewlett-Packard JetDirect
+.B dhcp-vendorclass=set:printers,Hewlett-Packard JetDirect
will allow options to be set only for HP printers like so:
-.B --dhcp-option=printers,3,192.168.4.4
+.B --dhcp-option=tag:printers,3,192.168.4.4
The vendor-class string is
substring matched against the vendor-class supplied by the client, to
-allow fuzzy matching.
+allow fuzzy matching. The set: prefix is optional but allowed for consistency.
.TP
-.B \-j, --dhcp-userclass=<network-id>,<user-class>
-Map from a user-class string to a network id tag (with substring
+.B \-j, --dhcp-userclass=set:<tag>,<user-class>
+Map from a user-class string to a tag (with substring
matching, like vendor classes). Most DHCP clients provide a
"user class" which is configurable. This option
maps user classes to tags, so that DHCP options may be selectively delivered
@@ -676,24 +727,41 @@ to different classes of hosts. It is possible, for instance to use
this to set a different printer server for hosts in the class
"accounts" than for hosts in the class "engineering".
.TP
-.B \-4, --dhcp-mac=<network-id>,<MAC address>
-Map from a MAC address to a network-id tag. The MAC address may include
+.B \-4, --dhcp-mac=set:<tag>,<MAC address>
+Map from a MAC address to a tag. The MAC address may include
wildcards. For example
-.B --dhcp-mac=3com,01:34:23:*:*:*
+.B --dhcp-mac=set:3com,01:34:23:*:*:*
will set the tag "3com" for any host whose MAC address matches the pattern.
.TP
-.B --dhcp-circuitid=<network-id>,<circuit-id>, --dhcp-remoteid=<network-id>,<remote-id>
-Map from RFC3046 relay agent options to network-id tags. This data may
+.B --dhcp-circuitid=set:<tag>,<circuit-id>, --dhcp-remoteid=set:<tag>,<remote-id>
+Map from RFC3046 relay agent options to tags. This data may
be provided by DHCP relay agents. The circuit-id or remote-id is
normally given as colon-separated hex, but is also allowed to be a
simple string. If an exact match is achieved between the circuit or
-agent ID and one provided by a relay agent, the network-id tag is set.
-.TP
-.B --dhcp-subscrid=<network-id>,<subscriber-id>
-Map from RFC3993 subscriber-id relay agent options to network-id tags.
-.TP
-.B --dhcp-match=<network-id>,<option number>|option:<option name>|vi-encap:<enterprise>[,<value>]
-Without a value, set the network-id tag if the client sends a DHCP
+agent ID and one provided by a relay agent, the tag is set.
+.TP
+.B --dhcp-subscrid=set:<tag>,<subscriber-id>
+Map from RFC3993 subscriber-id relay agent options to tags.
+.TP
+.B --dhcp-proxy[=<ip addr>]......
+A normal DHCP relay agent is only used to forward the initial parts of
+a DHCP interaction to the DHCP server. Once a client is configured, it
+communicates directly with the server. This is undesirable if the
+relay agent is addding extra information to the DHCP packets, such as
+that used by
+.B dhcp-circuitid
+and
+.B dhcp-remoteid.
+A full relay implementation can use the RFC 5107 serverid-override
+option to force the DHCP server to use the relay as a full proxy, with all
+packets passing through it. This flag provides an alternative method
+of doing the same thing, for relays which don't support RFC
+5107. Given alone, it manipulates the server-id for all interactions
+via relays. If a list of IP addresses is given, only interactions via
+relays at those addresses are affected.
+.TP
+.B --dhcp-match=set:<tag>,<option number>|option:<option name>|vi-encap:<enterprise>[,<value>]
+Without a value, set the tag if the client sends a DHCP
option of the given number or name. When a value is given, set the tag only if
the option is sent and matches the value. The value may be of the form
"01:ff:*:02" in which case the value must match (apart from widcards)
@@ -703,7 +771,7 @@ value. The value may also be of the same form as in
in which case the option sent is treated as an array, and one element
must match, so
---dhcp-match=efi-ia32,option:client-arch,6
+--dhcp-match=set:efi-ia32,option:client-arch,6
will set the tag "efi-ia32" if the the number 6 appears in the list of
architectures sent by the client in option 93. (See RFC 4578 for
@@ -711,41 +779,56 @@ details.) If the value is a string, substring matching is used.
The special form with vi-encap:<enterpise number> matches against
vendor-identifying vendor classes for the specified enterprise. Please
-see RFC 3925 for more details of the rare and interesting beasts.
-.TP
-.B \-J, --dhcp-ignore=<network-id>[,<network-id>]
-When all the given network-ids match the set of network-ids derived
-from the net, host, vendor and user classes, ignore the host and do
+see RFC 3925 for more details of these rare and interesting beasts.
+.TP
+.B --tag-if=set:<tag>[,set:<tag>[,tag:<tag>[,tag:<tag>]]]
+Perform boolean operations on tags. Any tag appearing as set:<tag> is set if
+all the tags which appear as tag:<tag> are set, (or unset when tag:!<tag> is used)
+If no tag:<tag> appears set:<tag> tags are set unconditionally.
+Any number of set: and tag: forms may appear, in any order.
+Tag-if lines ares executed in order, so if the tag in tag:<tag> is a
+tag set by another
+.B tag-if,
+the line which sets the tag must precede the one which tests it.
+.TP
+.B \-J, --dhcp-ignore=tag:<tag>[,tag:<tag>]
+When all the given tags appear in the tag set ignore the host and do
not allocate it a DHCP lease.
.TP
-.B --dhcp-ignore-names[=<network-id>[,<network-id>]]
-When all the given network-ids match the set of network-ids derived
-from the net, host, vendor and user classes, ignore any hostname
+.B --dhcp-ignore-names[=tag:<tag>[,tag:<tag>]]
+When all the given tags appear in the tag set, ignore any hostname
provided by the host. Note that, unlike dhcp-ignore, it is permissible
-to supply no netid tags, in which case DHCP-client supplied hostnames
+to supply no tags, in which case DHCP-client supplied hostnames
are always ignored, and DHCP hosts are added to the DNS using only
dhcp-host configuration in dnsmasq and the contents of /etc/hosts and
/etc/ethers.
.TP
-.B --dhcp-broadcast=<network-id>[,<network-id>]
-When all the given network-ids match the set of network-ids derived
-from the net, host, vendor and user classes, always use broadcast to
-communicate with the host when it is unconfigured. Most DHCP clients which
+.B --dhcp-generate-names=tag:<tag>[,tag:<tag>]
+Generate a name for DHCP clients which do not otherwise have one,
+using the MAC address expressed in hex, seperated by dashes. Note that
+if a host provides a name, it will be used by preference to this,
+unless
+.B --dhcp-ignore-names
+is set.
+.TP
+.B --dhcp-broadcast[=tag:<tag>[,tag:<tag>]]
+When all the given tags appear in the tag set, always use broadcast to
+communicate with the host when it is unconfigured. It is permissible
+to supply no tags, in which case this is unconditional. Most DHCP clients which
need broadcast replies set a flag in their requests so that this
happens automatically, some old BOOTP clients do not.
.TP
-.B \-M, --dhcp-boot=[net:<network-id>,]<filename>,[<servername>[,<server address>]]
+.B \-M, --dhcp-boot=[tag:<tag>,]<filename>,[<servername>[,<server address>]]
Set BOOTP options to be returned by the DHCP server. Server name and
address are optional: if not provided, the name is left empty, and the
address set to the address of the machine running dnsmasq. If dnsmasq
is providing a TFTP service (see
.B --enable-tftp
) then only the filename is required here to enable network booting.
-If the optional network-id(s) are given,
-they must match for this configuration to be sent. Note that
-network-ids are prefixed by "net:" to distinguish them.
+If the optional tag(s) are given,
+they must match for this configuration to be sent.
.TP
-.B --pxe-service=[net:<network-id>,]<CSA>,<menu text>[,<basename>|<bootservicetype>][,<server address>]
+.B --pxe-service=[tag:<tag>,]<CSA>,<menu text>[,<basename>|<bootservicetype>][,<server address>]
Most uses of PXE boot-ROMS simply allow the PXE
system to obtain an IP address and then download the file specified by
.B dhcp-boot
@@ -773,7 +856,7 @@ If no boot service type or filename is provided (or a boot service type of 0 is
then the menu entry will abort the net boot procedure and
continue booting from local media.
.TP
-.B --pxe-prompt=[net:<network-id>,]<prompt>[,<timeout>]
+.B --pxe-prompt=[tag:<tag>,]<prompt>[,<timeout>]
Setting this provides a prompt to be displayed after PXE boot. If the
timeout is given then after the
timeout has elapsed with no keyboard input, the first available menu
@@ -799,7 +882,7 @@ keyword in
.TP
.B \-X, --dhcp-lease-max=<number>
Limits dnsmasq to the specified maximum number of DHCP leases. The
-default is 150. This limit is to prevent DoS attacks from hosts which
+default is 1000. This limit is to prevent DoS attacks from hosts which
create thousands of leases and use lots of memory in the dnsmasq
process.
.TP
@@ -836,14 +919,16 @@ tried. This flag disables this check. Use with caution.
.TP
.B --log-dhcp
Extra logging for DHCP: log all the options sent to DHCP clients and
-the netid tags used to determine them.
+the tags used to determine them.
.TP
.B \-l, --dhcp-leasefile=<path>
Use the specified file to store DHCP lease information.
.TP
.B \-6 --dhcp-script=<path>
Whenever a new DHCP lease is created, or an old one destroyed, the
-executable specified by this option is run. The arguments to the process
+executable specified by this option is run. <path>
+must be an absolute pathname, no PATH search occurs.
+The arguments to the process
are "add", "old" or "del", the MAC
address of the host, the IP address, and the hostname,
if known. "add" means a lease has been created, "del" means it has
@@ -854,39 +939,61 @@ If the MAC address is from a network type other than ethernet,
it will have the network type prepended, eg "06-01:23:45:67:89:ab" for
token ring. The process is run as root (assuming that dnsmasq was originally run as
root) even if dnsmasq is configured to change UID to an unprivileged user.
-The environment is inherited from the invoker of dnsmasq, and if the
-host provided a client-id, this is stored in the environment variable
-DNSMASQ_CLIENT_ID. If the fully-qualified domain name of the host is
-known, the domain part is stored in DNSMASQ_DOMAIN.
-If the client provides vendor-class, hostname or user-class,
- these are provided in DNSMASQ_VENDOR_CLASS
+
+The environment is inherited from the invoker of dnsmasq, with some or
+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.
+
+If the client provides vendor-class, hostname or user-class,
+these are provided in DNSMASQ_VENDOR_CLASS
DNSMASQ_SUPPLIED_HOSTNAME and
DNSMASQ_USER_CLASS0..DNSMASQ_USER_CLASSn variables, but only for
"add" actions or "old" actions when a host resumes an existing lease,
since these data are not held in dnsmasq's lease
-database. If dnsmasq was compiled with HAVE_BROKEN_RTC, then
+database.
+
+If dnsmasq was compiled with HAVE_BROKEN_RTC, then
the length of the lease (in seconds) is stored in
DNSMASQ_LEASE_LENGTH, otherwise the time of lease expiry is stored in
DNSMASQ_LEASE_EXPIRES. The number of seconds until lease expiry is
always stored in DNSMASQ_TIME_REMAINING.
+
If a lease used to have a hostname, which is
removed, an "old" event is generated with the new state of the lease,
ie no name, and the former name is provided in the environment
-variable DNSMASQ_OLD_HOSTNAME. DNSMASQ_INTERFACE stores the name of
+variable DNSMASQ_OLD_HOSTNAME.
+
+DNSMASQ_INTERFACE stores the name of
the interface on which the request arrived; this is not set for "old"
-actions when dnsmasq restarts. DNSMASQ_RELAY_ADDRESS is set if the client
+actions when dnsmasq restarts.
+
+DNSMASQ_RELAY_ADDRESS is set if the client
used a DHCP relay to contact dnsmasq and the IP address of the relay
-is known. DNSMASQ_TAGS contains all the network-id tags set during the
+is known.
+
+DNSMASQ_TAGS contains all the tags set during the
DHCP transaction, separated by spaces.
+
All file descriptors are
closed except stdin, stdout and stderr which are open to /dev/null
(except in debug mode).
-The script is not invoked concurrently: if subsequent lease
-changes occur, the script is not invoked again until any existing
-invocation exits. At dnsmasq startup, the script will be invoked for
+
+The script is not invoked concurrently: at most one instance
+of the script is ever running (dnsmasq waits for an instance of script to exit
+before running the next). Changes to the lease database are which
+require the script to be invoked are queued awaiting exit of a running instance.
+If this queueing allows multiple state changes occur to a single
+lease before the script can be run then
+earlier states are discarded and the current state of that lease is
+reflected when the script finally runs.
+
+At dnsmasq startup, the script will be invoked for
all existing leases as they are read from the lease file. Expired
-leases will be called with "del" and others with "old". <path>
-must be an absolute pathname, no PATH search occurs. When dnsmasq
+leases will be called with "del" and others with "old". When dnsmasq
receives a HUP signal, the script will be invoked for existing leases
with an "old " event.
.TP
@@ -955,17 +1062,20 @@ without an address specified when
.B --dhcp-fqdn
is set.
.TP
-.B --enable-tftp
+.B --enable-tftp[=<interface>]
Enable the TFTP server function. This is deliberately limited to that
needed to net-boot a client. Only reading is allowed; the tsize and
-blksize extensions are supported (tsize is only supported in octet mode).
+blksize extensions are supported (tsize is only supported in octet
+mode). See NOTES section for use of the interface argument.
+
.TP
-.B --tftp-root=<directory>
+.B --tftp-root=<directory>[,<interface>]
Look for files to transfer using TFTP relative to the given
directory. When this is set, TFTP paths which include ".." are
rejected, to stop clients getting outside the specified root.
Absolute paths (starting with /) are allowed, but they must be within
-the tftp-root.
+the tftp-root. If the optional interface argument is given, the
+directory is only used for TFTP requests via that interface.
.TP
.B --tftp-unique-root
Add the IP address of the TFTP client as a path component on the end
@@ -1152,31 +1262,41 @@ the CNAME. To work around this, add the CNAME to /etc/hosts so that
the CNAME is shadowed too.
.PP
-The network-id system works as follows: For each DHCP request, dnsmasq
-collects a set of valid network-id tags, one from the
+The tag system works as follows: For each DHCP request, dnsmasq
+collects a set of valid tags from active configuration lines which
+include set:<tag>, including one from the
.B dhcp-range
used to allocate the address, one from any matching
.B dhcp-host
(and "known" if a dhcp-host matches)
-the tag "bootp" for BOOTP requests, a tag whose name is the
-name if the interface on which the request arrived,
-and possibly many from matching vendor classes and user
-classes sent by the DHCP client. Any
+The tag "bootp" is set for BOOTP requests, and a tag whose name is the
+name of the interface on which the request arrived is also set.
+
+Any configuration lines which includes one or more tag:<tag> contructs
+will only be valid if all that tags are matched in the set derived
+above. Typically this is dhcp-option.
.B dhcp-option
-which has network-id tags will be used in preference to an untagged
+which has tags will be used in preference to an untagged
.B dhcp-option,
provided that _all_ the tags match somewhere in the
-set collected as described above. The prefix '#' on a tag means 'not'
-so --dhcp=option=#purple,3,1.2.3.4 sends the option when the
-network-id tag purple is not in the set of valid tags.
+set collected as described above. The prefix '!' on a tag means 'not'
+so --dhcp=option=tag:!purple,3,1.2.3.4 sends the option when the
+tag purple is not in the set of valid tags. (If using this in a
+command line rather than a configuration file, be sure to escape !,
+which is a shell metacharacter)
.PP
-If the network-id in a
+Note that for
.B dhcp-range
-is prefixed with 'net:' then its meaning changes from setting a
-tag to matching it. Thus if there is more than dhcp-range on a subnet,
-and one is tagged with a network-id which is set (for instance
-from a vendorclass option) then hosts which set the netid tag will be
-allocated addresses in the tagged range.
+both tag:<tag> and set:<tag> are allowed, to both select the range in
+use based on (eg) dhcp-host, and to affect the options sent, based on
+the range selected.
+
+This system evolved from an earlier, more limited one and for backward
+compatibility "net:" may be used instead of "tag:" and "set:" may be
+omitted. (Except in
+.B dhcp-host,
+where "net:" may be used instead of "set:".) For the same reason, '#'
+may be used instead of '!' to indicate NOT.
.PP
The DHCP server in dnsmasq will function as a BOOTP server also,
provided that the MAC address and IP address for clients are given,
@@ -1189,11 +1309,56 @@ configurations or in
configuration option is present to activate the DHCP server
on a particular network. (Setting --bootp-dynamic removes the need for
static address mappings.) The filename
-parameter in a BOOTP request is matched against netids in
-.B dhcp-option
-configurations, as is the tag "bootp", allowing some control over the options returned to
+parameter in a BOOTP request is used as a tag,
+as is the tag "bootp", allowing some control over the options returned to
different classes of hosts.
+.B dhcp-range
+may have an interface name supplied as
+"interface:<interface-name>". The semantics if this are as follows:
+For DHCP, if any other dhcp-range exists _without_ an interface name,
+then the interface name is ignored and and dnsmasq behaves as if the
+interface parts did not exist, otherwise DHCP is only provided to
+interfaces mentioned in dhcp-range
+declarations. For DNS, if there are no
+.B --interface
+or
+.B --listen-address
+flags, behaviour is unchanged by the interface part. If either of
+these flags are present, the interfaces mentioned in
+dhcp-ranges are added to the set which get DNS service.
+
+Similarly,
+.B enable-tftp
+may take an interface name, which enables TFTP only for a particular
+interface, ignoring
+.B --interface
+or
+.B --listen-address
+flags. In addition
+.B --tftp-secure
+and
+.B --tftp-unique-root
+and
+.B --tftp-no-blocksize
+are ignored for requests from such interfaces. (A
+.B --tftp-root
+directive giving a root path and an interface should be
+provided too.)
+
+These rules may seem odd at first sight, but they
+allow a single line of the form "dhcp-range=interface:virt0,192.168.0.4,192.168.0.200"
+to be added to dnsmasq configuration which then supplies
+DHCP and DNS services to that interface, without affecting
+what services are supplied to other interfaces and irrespective of
+the existance or lack of "interface=<interface>"
+lines elsewhere in the dnsmasq configuration.
+"enable-tftp=virt0" and "tftp-root=<root>,virt0" do the same job for TFTP.
+ The idea is
+that such a line can be added automatically by libvirt
+or equivalent systems, without disturbing any manual
+configuration.
+
.SH EXIT CODES
.PP
0 - Dnsmasq successfully forked into the background, or terminated
@@ -1224,10 +1389,7 @@ following applies to dnsmasq-2.37: earlier versions did not scale as well.
.PP
Dnsmasq is capable of handling DNS and DHCP for at least a thousand
-clients. Clearly to do this the value of
-.B --dhcp-lease-max
-must be increased,
-and lease times should not be very short (less than one hour). The
+clients. The DHCP lease times should not be very short (less than one hour). The
value of
.B --dns-forward-max
can be increased: start with it equal to
diff --git a/man/es/dnsmasq.8 b/man/es/dnsmasq.8
index 19ac845..65e4b72 100644
--- a/man/es/dnsmasq.8
+++ b/man/es/dnsmasq.8
@@ -68,8 +68,14 @@ información time-to-live (tiempo de vida) en expedientes SOA que
dnsmasq usa para hacer caché. Si las respuestas de servidores upstream
omiten esta información, dnsmasq no mete la respuesta en el caché.
Esta opción brinda un valor predeterminado para el time-to-live que
-dnsmasq usa para meter respuestas en el caché aún en la ausencia de
-un expediente SOA.
+dnsmasq usa para meter respuestas negativas en el caché aún en la
+ausencia de un expediente SOA.
+.TP
+.B --max-ttl=<tiempo>
+Fijar un valor TTL (tiempo de vida) máximo que será entregado a
+clientes. El TTL máximo especificado será otorgado a clientes en vez
+del TTL verdadero si es menor. El valor TTL real es mantenido en el caché
+para prevenir la inundación de los servidores DNS upstream.
.TP
.B \-k, --keep-in-foreground
No ir hacia el fondo al iniciar, pero aparte de eso ejecutar como
@@ -91,7 +97,8 @@ Fijar la facilidad a la cual dnsmasq deberá enviar mensajes syslog,
esto es DAEMON por predeterminado, y LOCAL0 cuando el modo debug está
en operación. Si la facilidad brindada contiene por lo menos un carácter
"/", se trata como un nombre de archivo, y dnsmasq bitacoreará a dicho
-archivo, en vez de syslog. (Errores durante la lectura de la configuración
+archivo, en vez de syslog. Si la facilidad es '-' entonces dnsmasq
+bitacorea a stderr. (Errores durante la lectura de la configuración
irán a syslog todavía, pero todo output desde un inicio exitoso, y todo
output mientras en ejecución, irá a este archivo exclusivamente.)
Al bitacorear a un archivo, dnsmasq cerrará y reabrirá el archivo al
@@ -304,6 +311,17 @@ Denegar (y bitacorear) direcciones de servidores upstream que están
dentro de rangos IP privados. Esto bloquea un ataque donde un navegador
detrás de un firewall es usado para analizar máquinas en la red local.
.TP
+.B --rebind-localhost-ok
+Eximir a 127.0.0.0/8 de verificaciones de rebinding. Este rango de
+direcciones es retornado por servidores de tiempo real tipo hoyo
+negro, así que bloquearlo puede deshabilitar estos servicios.
+.TP
+.B --rebind-domain-ok=[<domain>]|[[/<domain>/[<domain>/]
+No detectar y bloquear dns-rebind en búsquedas a estos dominios. El
+argumento puede ser o un dominio sencillo, o múltiples dominios
+rodeados por '/', como el syntax de --server, por ejemplo
+.B --rebind-domain-ok=/dominio1/dominio2/dominio3/
+.TP
.B \-n, --no-poll
No revisar periodicamente a /etc/resolv.conf en busca de cambios.
.TP
@@ -339,6 +357,20 @@ ser especificado como parte de la dirección IP usando el caracter
#. Más de una opción -S es permitida, con partes de dominio o
dirección IP repetidas como sea necesario.
+Dominios más específicos toman precedencia sobre los menos específicos,
+así que:
+.B --server=/google.com/1.2.3.4
+.B --server=/www.google.com/2.3.4.5
+enviará búsquedas por *.google.com hacia 1.2.3.4, excepto
+*www.google.com, el cual irá a 2.3.4.5.
+
+La dirección especial de servidor '#' significa "usar los servidores
+estándares", así que
+.B --server=/google.com/1.2.3.4
+.B --server=/www.google.com/#
+enviará búsquedas por *.google.com hacia 1.2.3.4, excepto
+*www.google.com, el cual será reenviado de manera usual.
+
También se permite una opción -S la cual brinda un dominio pero
ninguna dirección IP; esto le dice a dnsmasq que un dominio es local
y puede responder a búsquedas desde /etc/hosts o DHCP pero nunca
@@ -460,7 +492,7 @@ de casos. La única situación conocida donde esto debe ser incrementado
es al usar resolvedores de bitácoras de servidores web, los cuales pueden
generar un número inmenso de búsquedas simultáneas.
.TP
-.B \-F, --dhcp-range=[[net:]network-id,]<dirección-inicio>,<dirección-final>[,<máscara>[,<broadcast>]][,<tiempo de arriendo>]
+.B \-F, --dhcp-range=[interface:<interface>,][tag:<tag>[,tag:<tag>],][set:<tag],]<dirección-inicio>,<dirección-final>[,<netmask>[,<broadcast>]][,<tiempo de arriendo>]
Habilitar el servidor DHCP. Direcciones serán distribuidas desde el
rango <dirección-inicio> hasta <dirección-final> y desde direcciones definidas
estáticamente en opciones
@@ -477,10 +509,13 @@ cuales la máquina corriendo dnsmasq tiene una interface) la
máscara de subred es opcional. Pero, es requerida para redes que
reciben servicio DHCP vía un agente de relay. La dirección de
broadcast siempre es opcional. Siempre se permite tener más de
-un rango dhcp (dhcp-range) en una subred. El parámetro opcional
-network-id es una etiqueta alfanumérica la cual marca esta red de
+un rango dhcp (dhcp-range) en una subred.
+
+El parámetro opcional
+.B set:<tag>
+fija una etiqueta alfanumérica la cual marca esta red de
tal forma que opciones dhcp puedan ser especificadas en base a cada red.
-Cuando es prefijada con 'net:' entonces el significado cambia
+Cuando es prefijada con 'tag:' en vez, entonces el significado cambia
de "fijar etiqueta" a "coincidir con etiqueta". Solo una etiqueta puede
ser fijada, pero más de una puede ser revisada por coincidencias. La
dirección final puede ser remplazada por la palabra clave
@@ -497,8 +532,11 @@ caso en el cual dnsmasq proveerá proxy-DHCP en la subred especificada. (Ver
y
.B pxe-service
para detalles.)
+
+La sección interface:<interface name> no es normalmente usada. Ver la
+sección NOTAS para detalles sobre esto.
.TP
-.B \-G, --dhcp-host=[<dirección de hardware>][,id:<client_id>|*][,net:<netid>][,<dirección IP>][,<nombre de host>][,<tiempo de arriendo>][,ignore]
+.B \-G, --dhcp-host=[<hwaddr>][,id:<client_id>|*][,set:<tag>][,<ipaddr>][,<hostname>][,<tiempo_de_arriendo>][,ignorar]
Especificar parámetros por host para el servidor DHCP. Esto permite
que una máquina con una dirección de hardware particular sea siempre
alocada el mismo nombre de host, dirección IP, y tiempo de arriendo.
@@ -513,10 +551,15 @@ le dice a dnsmasq que debe darle a la máquina con dirección
ethernet 00:20:e0:3b:13:af el nombre wap, y un arriendo DHCP infinito.
.B --dhcp-host=lap,192.168.0.199
le dice a dnsmasq que siempre debe alocarle a la maquina lap
-la dirección IP 192.168.0.199. Direcciones alocadas de esta manera
-no tienen que estar dentro del rango dado con la opción --dhcp-range,
-pero deben estar en la red siendo servida por el servidor DHCP. Se
-permite usar identificadores de clientes en vez de direcciones de
+la dirección IP 192.168.0.199.
+
+Direcciones alocadas de esta manera no tienen que estar dentro
+del rango dado con la opción --dhcp-range, pero deben estar en la subred
+de un rango DHCP (dhcp-range) válido. Para subredes que no necesitan
+una collección de direcciones dinamicamente alocadas, usar la palabra
+clave "static" in la declaración dhcp-range.
+
+Es permitido usar identificadores de cliente en vez de direcciones de
hardware para identificar hosts prefijando 'id:'. O sea que:
.B --dhcp-host=id:01:02:03:04,.....
se refiere al host con identificador de cliente 01:02:03:04.
@@ -530,7 +573,14 @@ presenta un ID de cliente algunas veces pero otras no.
Si un nombre aparece en /etc/hosts, la dirección asociada puede
ser alocada a un arriendo DHCP, pero solo si existe una opción
.B --dhcp-host
-la cual especifica el nombre también. La palabra clave "ignore"
+la cual especifica el nombre también. Solo un hostname puede ser
+brindado en una opción
+.B dhcp-host
+pero aliases son posibles por medio del uso de CNAMEs. (Ver
+.B --cname
+).
+
+La palabra clave "ignore"
le dice a dnsmasq que no debe ofrecer jamás un arriendo DHCP a
una máquina. La máquina puede ser especificada por dirección de
hardware, ID de cliente, o nombre de host, por ejemplo:
@@ -538,14 +588,16 @@ hardware, ID de cliente, o nombre de host, por ejemplo:
Esto es útil cuando hay otro servidor DHCP en la red que debe ser
usado por algúnas máquinas.
-El net:<network-id> fija la etiqueta network-id cuando sea que
+El set:<tag> fija la etiqueta cuando sea que
esta directiva dhcp-host está en uso. Esto puede ser usado para
-enviar selectivamente opciones DHCP a este host. Cuando un host
-coincide con cualquier directiva dhcp-host (o una implicada por
-/etc/ethers) entonces la etiqueta network-id especial "known" es
+enviar selectivamente opciones DHCP a este host. Más de una etiqueta
+puede ser fijada en una directiva dhcp-host (pero no en otros lugares
+donde "set:<tag>" es permitido). Cuando un host coincide con
+cualquier directiva dhcp-host (o una implicada por
+/etc/ethers) entonces la etiqueta especial "known" es
fijada. Esto permite que dnsmasq sea configurado para ignorar
pedidos desde máquinas desconocidas usando
-.B --dhcp-ignore=#known
+.B --dhcp-ignore=tag:!known
Direcciones ethernet (pero no client-ids) pueden tener bytes
comodínes, así que por ejemplo
.B --dhcp-host=00:20:e0:3b:13:*,ignore
@@ -591,9 +643,10 @@ DHCP. El formato de /etc/ethers es una dirección de hardware, seguida
por ya sea un nombre de host o una dirección IP. Al ser leidas por
dnsmasq, estas líneas tienen exáctamente el mismo efecto que opciones
.B --dhcp-host
-que contienen la misma información. /etc/ethers es re-leída cuando dnsmasq recibe un SIGHUP.
+que contienen la misma información. /etc/ethers es re-leída cuando
+dnsmasq recibe un SIGHUP.
.TP
-.B \-O, --dhcp-option=[<network-id>,[<network-id>,]][encap:<opt>,][vi-encap:<enterprise>,][vendor:[<vendor-class>],][<opt>|option:<opt-name>],[<valor>[,<valor>]]
+.B \-O, --dhcp-option=[tag:<tag>,[tag:<tag>,]][encap:<opt>,][vi-encap:<enterprise>,][vendor:[<vendor-class>],][<opt>|option:<opt-name>],[<value>[,<value>]]
Especificar opciones diferentes o extra a clientes DHCP. Por
predeterminado, dnsmasq envía algunas opciones estándar a clientes
DHCP. La máscara de subred y dirección broadcast son fijadas igual
@@ -618,9 +671,9 @@ o
La dirección especial 0.0.0.0 es entendida que significa "la
dirección de la máquina que corre dnsmasq". Tipos de data permitidos
son direcciones IP de cuatro segmentos, un número decimal, dígitos hex
-separados por colones, y un string de texto. Si las network-ids
+separados por colones, y un string de texto. Si las etiquetas
opcionales son brindadas, entonces esta opción es solo enviada cuando
-todas las network-ids coinciden.
+todas las etiquetas coinciden.
Procesamiento especial es llevado a cabo en un argumento de texto para
la opción 119, en conforme con RFC3397. Direcciones IP textuales o de
@@ -672,7 +725,7 @@ para identificar esta opción.
La dirección 0.0.0.0 no es tratada de forma especial en opciones encapsuladas.
.TP
-.B --dhcp-option-force=[<network-id>,[<network-id>,]][encap:<opt>,][rfc3925-encap:<enterprise>,][vendor:[<vendor-class>],]<opt>,[<valor>[,<valor>]]
+.B --dhcp-option-force=[tag:<tag>,[tag:<tag>,]][encap:<opt>,][vi-encap:<enterprise>,][vendor:[<vendor-class>],]<opt>,[<value>[,<value>]]
Esto funciona exáctamente de la misma forma que
.B --dhcp-option
excepto que la opción siempre será enviada, aún si el cliente no la pide en
@@ -687,20 +740,21 @@ hacia opciones DHCP. Esto crea espacio extra en el paquete DHCP para opciones,
pero puede raramente confundir clientes viejos o defectuosos. Esta opción forza
comportamiento "simple y sencillo" para prevenir problemas en tales casos.
.TP
-.B \-U, --dhcp-vendorclass=<network-id>,<vendor-class>
-Trazar desde un string vendor-class a un network id. La mayoría de los
+.B \-U, --dhcp-vendorclass=set:<tag>,<vendor-class>
+Trazar desde un string vendor-class a una etiqueta. La mayoría de los
clientes DHCP proveen una "vendor class" la cual representa, en cierto
sentido, el tipo de host. Esta opción traza clases de vendedor a network
ids, de tal forma que opciones DHCP pueden ser selectivamente entregadas
a diferentes clases de hosts. Por ejemplo
-.B dhcp-vendorclass=printers,Hewlett-Packard JetDirect
+.B dhcp-vendorclass=set:printers,Hewlett-Packard JetDirect
peritiría que opciones sean fijadas solo para impresoras HP así:
-.B --dhcp-option=printers,3,192.168.4.4
+.B --dhcp-option=tag:printers,3,192.168.4.4
El string vendor-class es coordinado con el vendor-class proveido por
-el cliente, para permitir coincidencias borrosas.
+el cliente, para permitir coincidencias borrosas. El prefijo set: es
+opcional, pero permitido por razones de consistencia.
.TP
-.B \-j, --dhcp-userclass=<network-id>,<user-class>
-Trazar desde un string user-class a un network id (con coordinación
+.B \-j, --dhcp-userclass=set:<tag>,<user-class>
+Trazar desde un string user-class a una etiqueta (con coordinación
substring, como con vendor-class). La mayoría de los clientes DHCP
proveen un "user class" el cual es configurable. Esta opción traza
clases user a network ids, de tal manera que opciones DHCP puedan
@@ -708,26 +762,43 @@ ser selectivamente enviadas a diferentes tipos de hosts. Es posible,
por ejemplo, usar esto para especificar una impresora diferente para
hosts en la clase "cuentas" que para los de la clase "ingenieria".
.TP
-.B \-4, --dhcp-mac=<network-id>,<dirección MAC>
-Trazar desde una dirección MAC a una network id. La dirección MAC
+.B \-4, --dhcp-mac=set:<tag>,<MAC address>
+Trazar desde una dirección MAC a una etiqueta. La dirección MAC
puede incluir comodínes. Por ejemplo:
-.B --dhcp-mac=3com,01:34:23:*:*:*
+.B --dhcp-mac=set:3com,01:34:23:*:*:*
fijaría el tag "3com" a cualquier host el cual su MAC coincida con
el patrón.
.TP
.B --dhcp-circuitid=<network-id>,<circuit-id>, --dhcp-remoteid=<network-id>,<remote-id>
-Trazar de opciones agente de relay RFC3046 a opciones network-id. Estos
+Trazar de opciones agente de relay RFC3046 a etiquetas. Estos
datos pueden ser proveídos por agentes de relay DHCP. El circuit-id o
remote-id es normlamente brindado como hex separado por doblepuntos, pero
también se permite un string simple. Si se obtiene una coincidencia exacta
entre el circuit o agent ID y uno proveído por un agente de relay,
-network-id es fijado.
-.TP
-.B --dhcp-subscrid=<network-id>,<subscriber-id>
-Trazar de opciones relay subscriber-id RFC3993 a opciones network-id.
-.TP
-.B --dhcp-match=<network-id>,<option number>|option:<option name>|vi-encap:<enterprise>[,<valor>]
-Sin un valor, fijar la etiqueta network-id si el cliente envía una opción
+la etiqueta es fijada.
+.TP
+.B --dhcp-subscrid=set:<tag>,<subscriber-id>
+Trazar de opciones relay subscriber-id RFC3993 a etiquetas.
+.TP
+.B --dhcp-proxy[=<ip addr>]......
+Un agente de relay normal es usado solamente para reenviar las partes
+iniciales de una interacción DHCP con el servidor DHCP. Una vez que
+un cliente es configurado, se comunica diectamente con el servidor. Esto
+es indeseable si el agente de relay está agregando información extra a
+los paquetes DHCP, tal como usado por
+.B dhcp-circuitid
+y
+.B dhcp-remoteid.
+Una implementación relay completa puede usar la opción serverid-override
+RFC 5107 para obligar al servidor DHCP a usar el relay como un proxy
+completo, con todos los paquetes pasando a travez de el. Esta opción
+provee una manera alternativa de hacer la misma cosa, para relays que
+no tienen soporte RFC 5107. Brindada por si sola, manipula el server-id
+para todas las interacciones via relays. Si una lista de IPs es brindada,
+solo interacciones via relays en esas direcciones son afectadas.
+.TP
+.B --dhcp-match=set:<tag>,<option number>|option:<option name>|vi-encap:<enterprise>[,<value>]
+Sin un valor, fijar la etiqueta si el cliente envía una opción
DHCP del número o valor brindado. Cuando un valor es brindado, fijar la
etiqueta solo si la opción es enviada y coincide con el valor. El valor puede
ser de la forma "01:ff:*:02", caso en el cual el valor debe coincidir (aparte
@@ -737,7 +808,7 @@ del final del valor. El valor también puede ser de la misma forma que
caso en el cual la opción enviada es tratada como un array, y un elemento debe
coincidir, así que
---dhcp-match=efi-ia32,option:client-arch,6
+--dhcp-match=set:efi-ia32,option:client-arch,6
fijará la etiqueta a "efi-ia32" si el número 6 aparece en la lista de
architecturas enviada por los clientes en opción 93. (Ver RFC 4578 para
@@ -745,42 +816,58 @@ detalles.) Si el valor es un string, coincidencia substring es usada.
La forma especial con vi-encap:<enterpise number> busca coincidencia con
clases de vendedor identificadoras para el enterprise especificado. Por
-favor ver RFC 3925 para mas detalles sobre las bestias raras e interesantes.
-.TP
-.B \-J, --dhcp-ignore=<network-id>[,<network-id>]
-Cuando todos los network ids brindados coincidan con el juego de
-network ids derivados de las clases net, host, y vendor, ignorar
-el host y no brindarle un arriendo DHCP.
-.TP
-.B --dhcp-ignore-names[=<network-id>[,<network-id>]]
-Cuando todos los network-ids brindados coinciden con el juego de
-network-ids derivado de la red, host, classes de vendedor y usuario,
-ignorar cualquier nombre de host proveido por el host. Nótese que,
-a diferencia de dhcp-ignore, es permisible no brindar ningún tag netid,
+favor ver RFC 3925 para mas detalles sobre estas bestias raras e interesantes.
+.TP
+.B --tag-if=set:<tag>[,set:<tag>[,tag:<tag>[,tag:<tag>]]]
+Llevar a cabo operaciones boolean en etiquetas. Cualquier etiqueta
+que aparece como set:<tag> es fijada si todas las etiquetas que aparecen
+como tag:<tag> estan fijadas, (o desfijadas cuando tag:!<tag> es
+usado). Si ningún tag:<tag> aparece, etiquetas set:<tag> son fijadas
+incondicionalmente. Cualquier cantidad de formas set: y tag:
+pueden aparecer, en cualquier orden. Líneas tag-if son ejecutadas
+en orden, así que si la etiqueta en tag:<tag> es una etiqueta fijada
+por otra
+.B tag-if,
+la línea que fija la etiqueta debe preceder a la que comprueba.
+.TP
+.B \-J, --dhcp-ignore=tag:<tag>[,tag:<tag>]
+Cuando todoas las etiquetas brindadas aparecen en el juego de etiquetas
+ignorar el host y no brindarle un arriendo DHCP.
+.TP
+.B --dhcp-ignore-names[=tag:<tag>[,tag:<tag>]]
+Cuando todos las etiquetas brindadas aparecen en el juego de etiquetas, ignorar cualquier nombre de host proveido por el host. Nótese que,
+a diferencia de dhcp-ignore, es permisible no brindar ninguna etiqueta,
y en tal caso nombres de host proveidos por clientes DHCP siempre son
ignorados, y hosts DHCP son agregados al DNS usando solo la configuración
dhcp-host en dnsmasq y el contenido de /etc/hosts y /etc/ethers.
.TP
-.B --dhcp-broadcast=<network-id>[,<network-id>]
-Cuando todos los network-ids brindados coinciden con el juego de network-ids
-derivados de la red, host, clases de vendedor y usuarios, siempre usar
-broadcast para comunicarse con el host cuando está sin configurar. La
-mayoría de clientes DHCP que necesitan respuestas broadcast fijan una
-opción en sus pedidos para que esto pase automaticamente, algunos
-clientes BOOTP viejos no lo hacen.
-.TP
-.B \-M, --dhcp-boot=[net:<network-id>,]<filename>,[<servername>[,<server address>]]
+.B --dhcp-generate-names=tag:<tag>[,tag:<tag>]
+Generar un nombre para clientes DHCP que de otra forma no tienen uno,
+usando la dirección MAC expresada en hex, separada por guiones. Nótese
+que si un host provee un nombre, será usado preferiblemente sobre este,
+a menos que
+.B --dhcp-ignore-names
+esté fijado.
+.TP
+.B --dhcp-broadcast[=tag:<tag>[,tag:<tag>]]
+Cuando todas las etiquetas aparecen en el juego de etiquetas, siempre
+usar broadcast para comunicar con el host cuando no está configurado.
+Es permisible omitir las etiquetas, caso en el cual esto es
+incondicional. La mayoría de clientes DHCP que necesitan
+respuestas broadcast fijan una opción en sus pedidos para que esto pase automaticamente, algunos clientes BOOTP viejos no lo hacen.
+.TP
+.B \-M, --dhcp-boot=[tag:<tag>,]<filename>,[<servername>[,<server address>]]
Fijar opciones BOOTP que han de ser devueltas por el servidor DHCP. Nombre
y dirección de servidor son opcionales: si no son brindadas, el nombre es
dejado en blanco, y la dirección es fijada a la de la máquina que corre
dnsmasq. Si dnsmasq está brindando servicio TFTP (ver
.B --enable-tftp
) entonces solo el nombre de archivo es requirido aquí para habilitar
-el inicio atravéz de una red. Si las opcionales network-ids son brindadas,
+el inicio atravéz de una red. Si las opcionales etiquetas son brindadas,
ellas deberán coincidir para que esta configuración sea enviada. Nótese
que network-ids están prefijadas con "net:" para distinguirlas.
.TP
-.B --pxe-service=[net:<network-id>,]<CSA>,<texto de menú>[,<nombre base>|<tipo de servicio boot>][,<dirección de servidor>]
+.B --pxe-service=[tag:<tag>,]<CSA>,<menu text>[,<basename>|<bootservicetype>][,<server address>]
La mayoría de usos para boot-ROMS PXE simplemente permiten al sistema PXE
obtener una dirección IP y entonces bajar el archivo especificado por
.B dhcp-boot
@@ -808,7 +895,7 @@ de servicio boot o nombre de archivo es brindado (o un tipo de servicio boot
de 0 es especificado), entonces la opción de menú abortará el proceso net boot
y continuará desde el medio local.
.TP
-.B --pxe-prompt=[net:<network-id>,]<prompt>[,<timeout>]
+.B --pxe-prompt=[tag:<tag>,]<prompt>[,<timeout>]
Fijar esto hace que un aviso sea expuesto despues del boot PXE. Si el timeout
es brindado, entonces despues que el timeout se haya vencido sin input del
teclado, la primera opción del menú sera automaticamente ejecutada. Si el
@@ -834,7 +921,7 @@ en
.TP
.B \-X, --dhcp-lease-max=<número>
Limita a dnsmasq a el número especificado de arriendos DHCP. El
-predeterminado es 150. El limite es para prevenir ataques DoS desde
+predeterminado es 1000. El limite es para prevenir ataques DoS desde
hosts que crean cientos de arriendos y usan mucha de la memoria del
proceso dnsmasq.
.TP
@@ -874,7 +961,7 @@ cuidado.
.TP
.B --log-dhcp
Bitacoréo extra para DHCP: Bitacorear todas las opciones enviadas a
-clientes DHCP y las etiquetas netid usadas para determinarlos.
+clientes DHCP y las etiquetas usadas para determinarlos.
.TP
.B \-l, --dhcp-leasefile=<path>
Usar el archivo especificado para almacenar información de arriendos
@@ -883,6 +970,7 @@ DHCP.
.B \-6 --dhcp-script=<path>
Cuando un arriendo DHCP nuevo es creado, o uno viejo es
destruido, el ejecutable especificado por esta opción es ejecutado.
+<path> debe ser un pathname absoluto, ninguna búsqueda PATH ocurre.
Los argumentos para el binario son "add", "old", o "del", la dirección
MAC del host, la dirección IP, y el hostname, si es
conocido. "add" significa que un arriendo ha sido creado, "del" que
@@ -894,40 +982,64 @@ que no es ethernet, tendrá el tipo de red precolocado, por ejemplo
"06-01:23:45:67:89:ab" para token ring. El proceso es ejecutado como root
(asumiendo que dnsmasq fue originalmente ejecutado como root) aún si dnsmasq
está configurado para cambiar su UID a un usuario sin privilegios.
-El ambiente es heredado del usuario que ha invocado a dnsmasq, y si el
-host brindó un client-id, es almacenado en la variable de ambiente
-DNSMASQ_CLIENT_ID. Si el dominio completamente calificado del host
-es conocido, la parte de dominio es almacenada en DNSMASQ_DOMAIN. Si
-el cliente brinda información de clase de vendedor, nombre de host,
-o clase de usuario, estos son brindados en las variables
+
+
+El ambiente es heredado del usuario que ha invocado a dnsmasq, con algunas
+o todas de las siguientes variables agregadas.
+
+DNSMASQ_CLIENT_ID si el host brindo un client-id.
+
+DNSMASQ_DOMAIN si el nombre de dominio completamente calificado del host
+es conocido, esto es fijado a la parte del dominio.
+
+Si el cliente brinda vendor-class, hostname o user-class, estos son
+brindados en las variables
DNSMASQ_VENDOR_CLASS, DNSMASQ_SUPPLIED_HOSTNAME, y
DNSMASQ_USER_CLASS0..DNSMASQ_USER_CLASSn, pero solo para acciones "add"
y "old" cuando un host reanuda un arriendo existente, dado a que estos
datos no son almacenados en la base de datos de arriendos de dnsmasq.
+
Si dnsmasq fue compilado con HAVE_BROKEN_RTC, entonces la duración del
arriendo (en segundos) es almacenada en DNSMASQ_LEASE_LENGTH, de otra
manera el tiempo de vencimiento es almacenado en DNSMASQ_LEASE_EXPIRES.
El número de segundos faltante para el vencimiento del arriendo siempre
es almacenado en DNSMASQ_TIME_REMAINING.
+
Si un arriendo solía tener un nombre de host, el cual es removido, un
evento "old" es generado con el nuevo estado del arriendo, (por ejemplo, sin
nombre), y el nombre anterior es brindado en la variable de ambiente
-DNSMASQ_OLD_HOSTNAME. DNSMASQ_INTERFACE almacena el nombre de la interface
+DNSMASQ_OLD_HOSTNAME.
+
+DNSMASQ_INTERFACE almacena el nombre de la interface
en la cual llegó el pedido; esto no es fijado para acciones "viejas"
-cuando dnsmasq re-inicia. DNSMASQ_RELAY_ADDRESS es fijado si el cliente
+cuando dnsmasq re-inicia.
+
+DNSMASQ_RELAY_ADDRESS es fijado si el cliente
usó un relay DHCP para contactar a dnsmasq y la dirección IP del relay
-es conocida. DNSMASQ_TAGS contiene todas las etiquetas network-id fijadas
+es conocida.
+
+DNSMASQ_TAGS contiene todas las etiquetas network-id fijadas
durante la transacción DHCP, separadas por espacios.
+
Todos los descriptores de archivo están cerrados
excepto stdin, stdout, y stderr los cuales están abiertos a /dev/null
(excepto en modo debug).
-Este guión no es invocado concurrentemente: si cambios de arriendos
-subsiguientes ocurren, el guión no es invocado otra vez hasta que
-cualquier invocación existente haga exit. Al inicio de dnsmasq, el guión
+
+Este guión no es invocado concurrentemente: máximo una instamcia del
+guión está corriendo a la vez (dnsmasq espera a que una instancia de
+guión haga exit antes de correr la siguiente). Cambios a la base de
+datos de arriendos que requieren que el guión sea invocado son puestos
+en cola esperando el exit de una instancia corriente. Si esta cola permite
+que cambios multiples de estado le ocurran a un arriendo individual antes
+de que el guión pueda ser ejecutado entonces estados anteriores son descartados
+y el estado actual del arriendo es reflejado cuando el guión finalmente corre.
+
+Al inicio de dnsmasq, el guión
será invocado para todos los arriendos existentes mientras van siendo
leídos desde el archivo de arriendos. Arriendos vencidos serán llamados
con "del" y otros con "old". <path> debe ser un path absoluto, ninguna
-búsqueda PATH ocurre. Cuando dnsmasq recibe una señal HUP, el guión será
+búsqueda PATH ocurre cuando arriendos dnsmasq serán llamados con "del"
+y otros con "old". Cuando dnsmasq recibe una señal HUP, el guión será
invocado para arriendos existentes con un evento "old".
.TP
.B --dhcp-scriptuser
@@ -1000,18 +1112,20 @@ sin una dirección especificada cuando
.B --dhcp-fqdn
está fijado.
.TP
-.B --enable-tftp
+.B --enable-tftp[=<interface>]
Habilitar la función de servidor TFTP. Esto está deliberadamente limitado
a lo necesario para hacerle a un cliente un inicio vía red. Solo lectura es
permitida; las extensiones tsize y blksize son soportadas (tsize solo es
-soportada en modo octeto).
+soportada en modo octeto). Ver sección de NOTAS para el uso de el argumento
+de interface.
.TP
-.B --tftp-root=<directorio>
+.B --tftp-root=<directory>[,<interface>]
Buscar, relativo al directorio brindado, archivos para transferir mediante el
uso de TFTP. Cuando esta opción está fijada, paths TFTP que incluyen ".." son
rechazados, para prevenir que clientes salgan de la raíz especificada. Paths
absolutos (los que comienzan con "/") están permitidos, pero deben estar
-dentro del tftp-root.
+dentro del tftp-root. Si el argumento opcional de interface es brindado, el
+directorio es solo usado para pedidos TFTP vía esa interface.
.TP
.B --tftp-unique-root
Agregar la dirección IP del cliente TFTP como un componente path del lado del
@@ -1199,36 +1313,46 @@ apunta a un nombre sombreado, entonces buscando el CNAME a travéz de
dnsmasq resultará en que la dirección no-sombreada será asociada con
el destino del CNAME. Para circumventar esto, agregar el CNAME a
/etc/hosts de tal manera que el CNAME es sombreado también.
+
.PP
-El sistema network-id funciona de la siguiente manera: Para cada pedido
-DHCP, dnsmasq colecciona un juego de etiquetas network-id válidas,
-una del
+El sistema de etiquetas funciona de la siguiente manera: Para cada pedido
+DHCP, dnsmasq colecciona un juego de etiquetas válidas de líneas de
+configuración activas que incluyen set:<tag>, incluyendo una del
.B dhcp-range
usado para alocar la dirección, una de cualquier
.B dhcp-host
-que coincida (y "known" si un dhcp-host coincide), la etiqueta "bootp"
-para pedidos BOOTP, una etiqueta cuyo nombre es el nombre de la
-interface donde llegó el pedido, y posiblemente muchas de clases
-de vendedor y usuario que coincidan que hayan sido enviadas por
-el cliente DHCP. Cualquier opción
+que coincida (y "known" si un dhcp-host coincide).
+La etiqueta "bootp" es fijada para pedidos BOOTP, y una etiqueta cuyo
+nombre es el nombre de la interface donde llegó el pedido tambien es
+fijada.
+
+Cualquier linea de configuración que incluya uno o mas
+construcciones tag:<tag> solo será válida si todas las etiquetas
+coinciden en el juego derivado arriba. Típicamente esto es dhcp-option.
.B dhcp-option
-que tenga etiquetas network-id será usada en preferencia de una opción
+que tenga etiquetas será usada en preferencia de una opción
.B dhcp-option,
sin etiqueta, con tal que _todas_ las etiquetas coincidan en alguna
-parte del juego coleccionado describido arriba. El prefijo "#" en una
-etiqueta significa "no" así que --dhcp=option=#purple,3,1.2.3.4 envía
-la opción cuando la etiqueta network-id "purple" no está en el juego
-de etiquetas válidas.
+parte del juego coleccionado describido arriba. El prefijo '!' en una
+etiqueta significa "no" así que --dhcp=option=tag:!purple,3,1.2.3.4 envía
+la opción cuando la etiqueta "purple" no está en el juego
+de etiquetas válidas. (Si se está usando esto en una línea de comandos
+en vez de un archivo de configuración, asegurese de escapar !, el cual
+es un metacaracter de shell.)
+.PP
+Nótese que para
+.B dhcp-range
+ambos tag:<tag> y set:<tag> son permitidos, para seleccionar el rango
+en uso basado en (por ejemplo) dhcp-host, y para afectar las opciones
+enviadas, basadas en el rango seleccionado.
+
+Este sistema evolucionó de uno anterior mas limitado y para compatibildad
+reversa "net:" puede ser usada en vez de "tag:" y "set:" puede ser
+omitida. (Excepto en
+.B dhcp-host,
+donde "net:" puede ser usado en vez de "set:".) Por la misma razón, '#'
+puede ser usado en vez de '!' para indicar NO.
.PP
-Si el network-id en un
-.B dhcp-range
-es prefijado con "net:", entonces su significado cambia de "fijar
-etiqueta" a "coincidir con etiqueta". O sea que si hay más de un
-dhcp-range en en una subred, y uno tiene una etiqueta network-id la
-cual está fijada (por ejemplo una opción de clase de vendedor) entonces
-hosts que fijen la etiqueta network-id serán alocados direcciones en
-el rango etiquetado.
-.PP
El servidor DHCP de dnsmasq funcionará como servidor BOOTP tambien,
con tal que las direcciones MAC y IP de los clientes sean brindadas,
ya sea usando configuraciones
@@ -1239,11 +1363,54 @@ o en
.B dhcp-range
esté presente para activar el servidor DHCP en una red particular.
(Fijar --bootp-dynamic elimina la necesidad de trazados estáticos.) El
-parámetro de nombre de archivos en un pedido BOOTP es revisado para
-ver si coincide con algún network-id en configuraciónes
-.B dhcp-option
-al igual que la etiqueta "bootp", permitiendo así algún control sobre
-las opciones devueltas a diferentes clases de hosts.
+parámetro de nombre de archivos en un pedido BOOTP es usado como
+una etiqueta, al igual que la etiqueta "bootp", permitiendo así algún
+control sobre las opciones devueltas a diferentes clases de hosts.
+
+.B dhcp-range
+puede tener un nombre de interface brindado como
+"interface:<interface-name>". La semántica de esto es así:
+Para DHCP, si cualquier otro dhcp-range existe _sin_ un nombre de
+interface, entonces el nombre de interface es ignorado y dnsmasq
+se comporta como si las partes de interface no existieran, de otra forma
+DHCP solo se provee a interfaces mencionadas en declaraciones
+dhcp-range. Para DNS, si no hay opciones
+.B --interface
+o
+.B --listen-address
+el comportamiento no se modifica por la parte de interface. Si cualquiera
+de estas opciones está presente, las interfaces mencionadas en dhcp-ranges
+son agregadas all juego que obtienen servicio DNS.
+
+Similarmente,
+.B enable-tftp
+puede tomar un nombre de interface, el cual habilita TFTP solo para una
+interface en particular, ignorando opciones
+.B --interface
+o
+.B --listen-address.
+Adicionalmente,
+.B --tftp-secure
+y
+.B --tftp-unique-root
+y
+.B --tftp-no-blocksize
+son ignorados por pedidos desde dichas interfaces. (Una directiva
+.B --tftp-root
+brindando un path raíz y una interface debe ser brindada tambien.)
+
+Estas reglas pueden parecer raras a primera vista, pero permiten que
+una simple linea de la forma
+"dhcp-range=interface:virt0,192.168.0.4,192.168.0.200" sea agregada a
+configuración dnsmasq, lo cual brinda servicios DHCP y DNS a esa interface,
+sin afectar los servicios en otras interfaces y irrespectivamente de
+la existencia o no de lineas "interface=<interface>" en alguna otra parte
+de la configuración dnsmasq.
+"enable-tftp=virt0" y "tftp-root=<root>,virt0" hacen el mismo trabajo
+para TFTP.
+La idea es que una linea así pueda ser agregada automaticamente
+por libvirt o sistemas equivalentes, sin estorbar alguna
+configuración manual.
.SH CÓDIGOS EXIT
.PP
@@ -1276,10 +1443,8 @@ no escalaban tan bien.
.PP
Dnsmasq es capaz de soportar con DNS y DHCP a por lo menos mil (1,000)
-clientes. Por supuesto que para lograr esto debe aumentarse el valor de
-.B --dhcp-lease-max
-, y tiempos de arriendo no deben ser muy cortos (menos de una hora).
-El valor de
+clientes. Los tiempos de arriendo no deben ser muy cortos (menos
+de una hora). El valor de
.B --dns-forward-max
puede ser aumentado: comienze con el equivalente a el número de clientes y
auméntelo si parece lento el DNS. Nótese que el rendimiento DNS depende
diff --git a/man/fr/dnsmasq.8 b/man/fr/dnsmasq.8
index 2e6dad1..631f141 100644
--- a/man/fr/dnsmasq.8
+++ b/man/fr/dnsmasq.8
@@ -73,6 +73,12 @@ option permet de doner une valeur de durée de vie par défaut (en secondes) que
dnsmasq utilise pour mettre les réponses négatives dans son cache, même en
l'absence d'enregistrement SOA.
.TP
+.B --max-ttl=<durée>
+Définie la valeur de TTL maximum qui sera fournie aux clients. La valeur maximum
+de TTL spécifiée sera fournie aux clients en remplacement de la vraie valeur de TTL
+si cette dernière est supérieure. La valeur réelle de TTL est cependant conservée dans
+le cache afin d'éviter de saturer les serveurs DNS en amont.
+.TP
.B \-k, --keep-in-foreground
Ne pas aller en tâche de fond au lancement, mais en dehors de cela, fonctionner
normalement. Ce mode est prévu pour les cas où Dnsmasq est lancé par daemontools
@@ -94,10 +100,12 @@ réception d'un signal SIGUSR1.
Définit la "facility" dans laquelle Dnsmasq enverra ses entrées syslog, par
défaut DAEMON ou LOCAL0 si le mode debug est activé. Si la "facility" contient
au moins un caractère "/", alors Dnsmasq considère qu'il s'agit d'un fichier et
-enverra les logs dans le fichier correspondant à la place du syslog. (Les
-erreurs lors de la lecture de la configuration vont toujours vers le syslog,
-mais tous les messages postérieures à un démarrage réussi seront exclusivement
-envoyés vers le fichier de logs). Lorsque Dnsmasq est configuré pour envoyer
+enverra les logs dans le fichier correspondant à la place du syslog. Si la
+"facility" est '-', alors dnsmasq envoie les logs sur la sortie d'erreur
+standard stderr. (Les erreurs lors de la lecture de la configuration vont
+toujours vers le syslog, mais tous les messages postérieurs à un démarrage
+réussi seront exclusivement envoyés vers le fichier de logs).
+Lorsque Dnsmasq est configuré pour envoyer
ses traces vers un fichier, la réception d'un signal SIGUSR2 entraine la
fermeture et réouverture du fichier. Cela permet la rotation de fichiers de
traces sans nécessiter l'arrêt de Dnsmasq.
@@ -317,6 +325,19 @@ serveurs amonts suite à une résolution de nom. Cela bloque les attaques cherch
à détourner de leur usage les logiciels de navigation web ('browser') en s'en
servant pour découvrir les machines situées sur le réseau local.
.TP
+.B --rebind-localhost-ok
+Exclue 127.0.0/8 des vérifications de réassociation DNS. Cette gamme d'adresses
+est retournée par les serveurs Realtime Blackhole (RBL, utilisés dans la
+lutte contre le spam), la bloquer peut entraîner des disfonctionnements de ces
+services.
+.TP
+.B --rebind-domain-ok=[<domaine>]|[[/<domaine>/[<domaine>/]
+Ne pas détecter ni bloquer les actions de type dns-rebind pour ces domaines.
+Cette option peut prendre comme valeur soit un nom de domaine soit plusieurs
+noms de domains entourés par des '/', selon une syntaxe similaire à l'option
+--server, c-à-d :
+.B --rebind-domain-ok=/domaine1/domaine2/domaine3/
+.TP
.B \-n, --no-poll
Ne pas vérifier régulièrement si le fichier /etc/resolv.conf a été modifié.
.TP
@@ -354,6 +375,20 @@ option
.B -S
est autorisée, en répétant les domaines et adresses IP comme requis.
+Le domaine le plus spécifique l'emporte sur le domaine le moins spécifique,
+ainsi :
+.B --server=/google.com/1.2.3.4
+.B --server=/www.google.com/2.3.4.5
+enverra les requêtes pour *.google.com à 1.2.3.4, à l'exception des requêtes
+*www.google.com, qui seront envoyées à 2.3.4.5.
+
+L'adresse spéciale '#' signifie "utiliser les serveurs standards", ainsi
+.B --server=/google.com/1.2.3.4
+.B --server=/www.google.com/#
+enverra les requêtes pour *.google.com à 1.2.3.4, à l'exception des requêtes
+pour *www.google.com qui seront envoyées comme d'habitude (c-à-d aux serveurs
+définis par défaut).
+
Il est également permis de donner une option
.B -S
avec un nom de domaine mais sans
@@ -502,7 +537,7 @@ 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 \-F, --dhcp-range=[[net:]identifiant de réseau,]<adresse de début>,<adresse de fin>[,<masque de réseau>[,<broadcast>]][,<durée de bail>]
+.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
statiquement dans l'option
@@ -522,10 +557,11 @@ relais DHCP ("relay agent"). L'adresse de broadcast est toujours optionnelle.
Il est toujours possible d'avoir plus d'une plage DHCP pour un même
sous-réseau.
-
-L'identifiant de réseau optionnel est un label alphanumérique qui permet de
-marquer ce réseau afin de fournir des options DHCP spécifiques à chaque réseau.
-Lorsque préfixé par 'net:', la signification change est au lieu de définir un
+L'identifiant de label optionnel
+.B set:<label>
+fournie une étiquette alphanumérique qui identifie ce réseau, afin de permettre
+la fourniture d'options DHCP spécifiques à chaque réseau.
+Lorsque préfixé par 'tag:', la signification change, et au lieu de définir un
label, il définit le label pour laquelle la règle s'applique. Un seul label peut-
être défini mais plusieurs labels peuvent coïncider.
@@ -545,8 +581,11 @@ spécifié. (voir
et
.B pxe-service
pour plus de détails).
+
+La section interface:<nom d'interface> n'est normalement pas utilisée. Se
+référer aux indications de la section NOTES pour plus de détail à ce sujet.
.TP
-.B \-G, --dhcp-host=[<adresse matérielle>][,id:<identifiant client>|*][,net:<identifiant de réseau>][,<adresse IP>][,<nom d'hôte>][,<durée de bail>][,ignore]
+.B \-G, --dhcp-host=[<adresse matérielle>][,id:<identifiant client>|*][,set:<label>][,<adresse IP>][,<nom d'hôte>][,<durée de bail>][,ignore]
Spécifie les paramètres DHCP relatifs à un hôte. Cela permet à une machine
possédant une adresse matérielle spécifique de se voir toujours allouée les
mêmes nom d'hôte, adresse IP et durée de bail. Un nom d'hôte spécifié comme
@@ -560,9 +599,15 @@ spécifie à Dnsmasq de fournir à la machine d'adresse matérielle
.B --dhcp-host=lap,192.168.0.199
spécifie à Dnsmasq d'allouer toujours à la machine portant le nom lap
-l'adresse IP 92.168.0.199. Les adresses allouées comme ceci ne sont pas
-contraintes dans une plage d'adresse spécifiée par une option --dhcp-range, mais
-elles doivent être sur un réseau servi par le serveur DHCP. Il est possible
+l'adresse IP 192.168.0.199.
+
+Les adresses allouées de la sorte ne sont pas contraintes à une plage d'adresse
+spécifiée par une option --dhcp-range, mais elles se trouver dans le même
+sous-réseau qu'une plage dhcp-range valide. Pour les sous-réseaux qui n'ont pas
+besoin d'adresses dynamiquement allouées, utiliser le mot-clef "static" dans la
+déclaration de plage d'adresses dhcp-range.
+
+Il est possible
d'utiliser des identifiants clients plutôt que des adresses matérielles pour
identifier les hôtes, en préfixant par ceux-ci par 'id:'. Ainsi,
.B --dhcp-host=id:01:02:03:04,.....
@@ -578,7 +623,13 @@ identifiant client mais pas les autres.
Si un nom apparaît dans /etc/hosts, l'adresse associée peut être allouée à un
bail DHCP mais seulement si une option
.B --dhcp-host
-spécifiant le nom existe par ailleurs. Le mot clef "ignore" ("ignorer") indique
+spécifiant le nom existe par ailleurs. Seul un nom d'hôte peut-être donné dans
+une option
+.B dhcp-host
+, mais les alias sont possibles au travers de l'utilisation des CNAMEs. (Voir
+.B --cname
+).
+Le mot clef "ignore" ("ignorer") indique
à Dnsmasq de ne jamais fournir de bail DHCP à une machine. La machine peut être
spécifiée par son adresse matérielle, son identifiant client ou son nom d'hôte.
Par exemple
@@ -586,14 +637,15 @@ Par exemple
Cela est utile lorsqu'un autre serveur DHCP sur le réseau doit être utilisé par
certaines machines.
-Le paramètre net:<identifiant réseau> permet de définir un
+Le paramètre set:<identifiant réseau> permet de définir un
identifiant de réseau lorsque l'option dhcp-host est utilisée. Cela peut servir
-à sélectionner des options DHCP juste pour cet hôte. Lorsqu'une machine coïncide
-avec une directive dhcp-host (ou une impliquée par /etc/ethers), alors
-l'identifiant réseau réservé "known" ("connu") est associé. Cela permet à
+à sélectionner des options DHCP juste pour cet hôte. Plus d'un label peut être
+fourni dans une directive dhcp-host (et dans cette seule directive). Lorsqu'une
+machine coïncide avec une directive dhcp-host (ou une impliquée par
+/etc/ethers), alors le label réservé "known" ("connu") est associé. Cela permet à
Dnsmasq d'être configuré pour ignorer les requêtes issus de machines inconnue
par le biais de
-.B --dhcp-ignore=#known.
+.B --dhcp-ignore=tag:!known.
Les adresses ethernet (mais pas les identifiants clients) peuvent être définies
avec des octets joker, ainsi par exemple
@@ -649,7 +701,7 @@ par Dnsmasq, ces lignes ont exactement le même effet que l'option
contenant les mêmes informations. /etc/ethers est relu à la réception d'un
signal SIGHUP par Dnsmasq.
.TP
-.B \-O, --dhcp-option=[<identifiant_de_réseau>,[<identifiant_de_réseau>,]][encap:<option>,][vi-encap:<entreprise>,][vendor:[<classe_vendeur>],][<option>|option:<nom d'option>],[<valeur>[,<valeur>]]
+.B \-O, --dhcp-option=[tag:<label>,[tag:<label>]][encap:<option>,][vi-encap:<entreprise>,][vendor:[<classe_vendeur>],][<option>|option:<nom d'option>],[<valeur>[,<valeur>]]
Spécifie des options différentes ou supplémentaires pour des clients DHCP. Par
défaut, Dnsmasq envoie un ensemble standard d'options aux clients DHCP : le
masque de réseau et l'adresse de broadcast sont les mêmes que pour l'hôte
@@ -675,8 +727,8 @@ L'adresse 0.0.0.0 prends ici le sens "d'adresse de la machine sur laquelle
tourne Dnsmasq". Les types de données autorisées sont des adresses IP sous la
forme de 4 chiffres séparés par des points, un nombre décimal, une liste de
caractères hexadécimaux séparés par des 2 points, ou une chaîne de caractères.
-Si des identifiants de réseaux sont fournis, alors cette option n'est envoyée
-qu'aux réseaux dont tous les identifiants coïncident.
+Si des labels optionnels sont fournis, alors cette option n'est envoyée
+qu'aux réseaux dont tous les labels coïncident avec ceux de la requête.
Un traitement spécial est effectué sur les chaînes de caractères fournies pour
l'option 119, conformément à la RFC 3397. Les chaînes de caractères ou les
@@ -738,7 +790,7 @@ Le numéro dans la section vi-encap: est le numéro IANA de l'entreprise servant
L'adresse 0.0.0.0 n'est pas traitée de manière particulière lorsque fournie dans
une option encapsulée.
.TP
-.B --dhcp-option-force=[<identifiant de réseau>,[<identifiant de réseau>,]][encap:<option>,][vi-encap:<entreprise>,][vendor:[<classe de vendeur>],]<option>,[<valeur>[,<valeur>]]
+.B --dhcp-option-force=[tag:<label>,[tag:<label>]][encap:<option>,][vi-encap:<entreprise>,][vendor:[<classe_vendeur>],][<option>|option:<nom d'option>],[<valeur>[,<valeur>]]
Cela fonctionne exactement de la même façon que
.B --dhcp-option
sauf que cette option sera toujours envoyée, même si le client ne la demande pas
@@ -756,22 +808,25 @@ quelques rares cas, perturber des clients vieux ou défectueux. Cette
option force le comportement à l'utilisation des valeurs "simples et sûres"
afin d'éviter des problèmes dans de tels cas.
.TP
-.B \-U, --dhcp-vendorclass=<identifiant de réseau>,<classe de vendeur>
-Associe une chaîne de classe de vendeur à un indentifiant de réseau. La plupart
+.B \-U, --dhcp-vendorclass=set:<label>,<classe de vendeur>
+Associe une chaîne de classe de vendeur à un label. La plupart
des clients DHCP fournissent une "classe de vendeur" ("vendor class") qui
représente, d'une certaine façon, le type d'hôte. Cette option associe des
classes de vendeur à des labels, de telle sorte que des options DHCP peuvent-être
fournie de manière sélective aux différentes classes d'hôtes. Par exemple,
+.B dhcp-vendorclass=set:printers,Hewlett-Packard JetDirect
+ou
.B dhcp-vendorclass=printers,Hewlett-Packard JetDirect
permet de n'allouer des options qu'aux imprimantes HP de la manière suivante :
-.B --dhcp-option=printers,3,192.168.4.4
+.B --dhcp-option=tag:printers,3,192.168.4.4
La chaîne de caractères de la classe de vendeur founie en argument est cherchée
en temps que sous-chaîne de caractères au sein de la classe de vendeur fournie
par le client, de façon à permettre la recherche d'un sous-ensemble de la chaîne
-de caractères ("fuzzy matching").
+de caractères ("fuzzy matching"). Le préfixe set: est optionnel mais autorisé
+afin de conserver une certaine homogénéité.
.TP
-.B \-j, --dhcp-userclass=<identifiant de réseau>,<classe utilisateur>
-Associe une chaîne de classe d'utilisateur à un identifiant réseau (effectue la
+.B \-j, --dhcp-userclass=set:<label>,<classe utilisateur>
+Associe une chaîne de classe d'utilisateur à un label (effectue la
recherche sur des sous-chaînes, comme pour les classes de vendeur). La plupart
des clients permettent de configurer une "classe d'utilisateur". Cette option
associe une classe d'utilisateur à un label, de telle manière qu'il soit
@@ -780,28 +835,44 @@ Il est possible, par exemple, d'utiliser ceci pour définir un serveur
d'impression différent pour les hôtes de la classe "comptes" et ceux de la
classe "ingénierie".
.TP
-.B \-4, --dhcp-mac=<identifiant de réseau>,<adresse MAC>
-Associe une adresse matérielle (MAC) à un identifiant réseau. L'adresse
+.B \-4, --dhcp-mac=set:<label>,<adresse MAC>
+Associe une adresse matérielle (MAC) à un label. L'adresse
matérielle peut inclure des jokers. Par exemple
-.B --dhcp-mac=3com,01:34:23:*:*:*
+.B --dhcp-mac=set:3com,01:34:23:*:*:*
permet de définir le label "3com" pour n'importe quel hôte dont l'adresse
matérielle coïncide avec les critères définis.
.TP
-.B --dhcp-circuitid=<identifiant de réseau>,<identifiant de circuit>, --dhcp-remoteid=<identifiant de réseau>,<identifiant distant>
-Associe des options de relais DHCP issus de la RFC3046 à des identifiants de
-réseau. Cette information peut-être fournie par des relais DHCP. L'identifiant
+.B --dhcp-circuitid=set:<label>,<identifiant de circuit>, --dhcp-remoteid=set:<label>,<identifiant distant>
+Associe des options de relais DHCP issus de la RFC3046 à des labels.
+Cette information peut-être fournie par des relais DHCP. L'identifiant
de circuit ou l'identifiant distant est normalement fourni sous la forme d'une
chaîne de valeurs hexadécimales séparées par des ":", mais il est également
possible qu'elle le soit sous la forme d'une simple chaîne de caractères. Si
l'identifiant de circuit ou d'agent correspond exactement à celui fourni par le
-relais DHCP, alors l'identifiant de réseau est positionné.
-.TP
-.B --dhcp-subscrid=<identifiant de réseau>,<identifiant d'abonné>
-Associe des options de relais DHCP issues de la RFC3993 à des identifiants de
-réseau.
-.TP
-.B --dhcp-match=<identifiant de réseau>,<numéro d'option>|option:<nom d'option>|vi-encap:<entreprise>[,<valeur>]
-Si aucune valeur n'est spécifiée, associe l'identifiant de réseau si le client
+relais DHCP, alors le label est apposé.
+.TP
+.B --dhcp-subscrid=set:<label>,<identifiant d'abonné>
+Associe des options de relais DHCP issues de la RFC3993 à des labels.
+.TP
+.B --dhcp-proxy[=<adresse ip>]......
+Un agent relai DHCP normal est uniquement utilisé pour faire suivre les
+éléments initiaux de l'interaction avec le serveur DHCP. Une fois que le
+client est configuré, il communique directement avec le serveur. Cela n'est pas
+souhaitable si le relais rajoute des informations supplémentaires aux paquets
+DHCP, telles que celles utilisées dans
+.B dhcp-circuitid
+et
+.B dhcp-remoteid.
+Une implémentation complète de relai peut utiliser l'option serverid-override
+de la RFC 5107 afin de forcer le serveur DHCP à utiliser le relai en temps que
+proxy complet, de sorte que tous les paquets passent par le relai. Cette option
+permet d'obtenir le même résultat pour des relais ne supportant pas la RFC
+5107. Fournie seule, elle manipule la valeur de server-id pour toutes les
+interactions via des relais. Si une liste d'adresses IP est donnée, seules les
+interactions avec les relais dont l'adresse est dans la liste seront affectées.
+.TP
+.B --dhcp-match=set:<label>,<numéro d'option>|option:<nom d'option>|vi-encap:<entreprise>[,<valeur>]
+Si aucune valeur n'est spécifiée, associe le label si le client
envoie une option DHCP avec le numéro ou le nom spécifié. Lorsqu'une valeur est
fournie, positionne le label seulement dans le cas où l'option est fournie et
correspond à la valeur. La valeur peut-être de la forme "01:ff:*:02", auquel
@@ -811,7 +882,7 @@ valeur peut aussi être de la même forme que dans
, auquel cas l'option est traitée comme un tableau de valeur, et un des
éléments doit correspondre, ainsi
---dhcp-match=efi-ia32,option:client-arch,6
+--dhcp-match=set:efi-ia32,option:client-arch,6
spécifie le label "efi-ia32" si le numéro 6 apparaît dnas la liste
d'architectures envoyé par le client au sein de l'option 93. (se réferer
@@ -823,30 +894,50 @@ fait avec les classes de vendeur "identifiant de vendeur" ("vendor-identifying
vendor classes") pour l'entreprise dont le numéro est fourni en option.
Veuillez vous réferer à la RFC 3925 pour plus de détail.
.TP
-.B \-J, --dhcp-ignore=<identifiant de réseau>[,<identifiant de réseau>]
-Lorsque tous les identifiants de réseau fournis coïncident avec la liste
-d'identifiants réseau dérivée des classes de réseau, hôte, vendeur et
-utilisateur, ignorer l'hôte et ne pas donner de bail DHCP.
-.TP
-.B --dhcp-ignore-names[=<identifiant de réseau>[,<identifiant de réseau>]]
-Lorsque tous les identifiant de réseau coïncident avec la liste d'identifiants
-réseau dérivées des classes de réseau, hôte, vendeur et utilisateur, ignorer le
+.B --tag-if=set:<label>[,set:<label>[,tag:<label>[,tag:<label>]]]
+Effectue une opération booléenne sur les labels. Si tous les labels
+apparaissant dans la liste tag:<label> sont positionnés, alors tous les
+la de la liste "set:<labels>" sont positionnés (ou supprimés, dans le cas
+où "tag:!<label>" utilisé).
+Si aucun tag:<label> n'est spécifié, alors tous les labels fournis par
+set:<label> sont positionnés.
+N'importe quel nombre de set: ou tag: peuvent être fournis, et l'ordre est sans
+importance.
+Les lignes tag-if sont executées dans l'ordre, ce qui fait que si un label dans
+tag:<label> est un label positionné par une rêgle
+.B tag-if,
+la ligne qui positionne le label doit précéder celle qui le teste.
+.TP
+.B \-J, --dhcp-ignore=tag:<label>[,tag:<label>]
+Lorsque tous les labels fournis dans l'option sont présents, ignorer l'hôte et
+ne pas donner de bail DHCP.
+.TP
+.B --dhcp-ignore-names[=tag:<label>[,tag:<label>]]
+Lorsque tous les labels fournis dans l'option sont présents, ignorer le
nom de machine fourni par l'hôte. Il est à noter que, à la différence de
-l'option "dhcp-ignore", il est permis de ne pas fournir d'identifiant réseau.
+l'option "dhcp-ignore", il est permis de ne pas fournir de label.
Dans ce cas, les noms d'hôtes fournis par les clients DHCP seront toujours
ignorés, et les noms d'hôtes seront ajoutés au DNS en utilisant uniquement la
configuration dhcp-host de Dnsmasq, ainsi que le contenu des fichiers /etc/hosts
et /etc/ethers.
.TP
-.B --dhcp-broadcast=<identifiant de réseau>[,<identifiant de réseau>]
-Lorsque tous les identifiants de réseaux fournis correspondent à ceux
-obtenus à partir des classes de réseau, d'hôte ou d'utilisateur, force
-l'utilisation du broadcast pour communiquer avec l'hôte lorsque celui-ci n'est
-pas configuré. La plupart des clients DHCP nécessitant une réponse par le biais
+.B --dhcp-generate-names=tag:<label>[,tag:<label>]
+Générer un nom pour les clients DHCP qui autrement n'en aurait pas, en
+utilisant l'adresse MAC sous sa forme hexadécimale, séparée par des tirets.
+Noter que si un hôte fourni un nom, celui-ci sera utilisé de préférence au nom
+autogénéré, à moins que
+.B --dhcp-ignore-names
+ne soit positionné.
+.TP
+.B --dhcp-broadcast=[tag:<label>[,tag:<label>]]
+Lorsque tous les labels fournis dans l'option sont présents, toujours utiliser
+le broadcast pour communiquer avec l'hôte lorsque celui-ci n'est
+pas configuré. Il est possible de ne spécifier aucun label, auquel cas cette
+option s'applique inconditionnellement. La plupart des clients DHCP nécessitant une réponse par le biais
d'un broadcast activent une option dans leur requête, ce qui fait que cela
se fait automatiquement, mais ce n'est pas la cas de certains vieux clients BOOTP.
.TP
-.B \-M, --dhcp-boot=[net:<identifiant de réseau>,]<nom de fichier>,[<nom de serveur>[,<adresse de serveur>]]
+.B \-M, --dhcp-boot=[tag:<label>,]<nom de fichier>,[<nom de serveur>[,<adresse de serveur>]]
Spécifie les options BOOTP devant être retournées par le serveur DHCP. Le nom de
serveur ainsi que l'adresse sont optionnels : s'ils ne sont pas fournis, le nom
est laissé vide et l'adresse fournie est celle de la machine sur laquelle
@@ -854,11 +945,10 @@ s'exécute Dnsmasq. Si Dnsmasq founit un service TFTP (voir
.B --enable-tftp
), alors seul un nom de fichier est requis ici pour permettre un démarrage par
le réseau.
-Si d'éventuels identifiants de réseau sont fournis, ils doivent coïncider avec
-ceux du client pour que cet élement de configuration lui soit envoyé. Il est à
-noter que les identifiants de réseau doivent-être préfixés par "net:".
+Si d'éventuels labels sont fournis, ils doivent coïncider avec
+ceux du client pour que cet élement de configuration lui soit envoyé.
.TP
-.B --pxe-service=[net:<identifiant de réseau>,]<CSA>,<entrée de menu>[,<nom de fichier>|<type de service de démarrage>][,<adresse de serveur>]
+.B --pxe-service=[tag:<label>,]<CSA>,<entrée de menu>[,<nom de fichier>|<type de service de démarrage>][,<adresse de serveur>]
La plupart des ROMS de démarrage PXE ne permettent au système PXE que la simple
obtention d'une adresse IP, le téléchargement du fichier spécifié dans
.B dhcp-boot
@@ -888,7 +978,7 @@ démarrage n'est fournie (ou qu'une valeur de 0 est donnée pour le type de
service), alors l'entrée de menu provoque l'interruption du démarrage par
le réseau et la poursuite du démarrage sur un média local.
.TP
-.B --pxe-prompt=[net:<identifiant de réseau>,]<invite>[,<délai>]
+.B --pxe-prompt=[tag:<label>,]<invite>[,<délai>]
Cette option permet d'afficher une invite à la suite du démarrage PXE. Si un
délai est fourni, alors la première entrée du menu de démarrage sera
automatiquement exécutée après ce délai. Si le délai vaut 0, alors la première
@@ -913,7 +1003,7 @@ dans
.B dhcp-range.
.TP
.B \-X, --dhcp-lease-max=<nombre>
-Limite Dnsmasq à un maximum de <nombre> baux DHCP. Le défaut est de 150. Cette
+Limite Dnsmasq à un maximum de <nombre> baux DHCP. Le défaut est de 1000. Cette
limite permet d'éviter des attaques de déni de service ("DoS") par des hôtes
créant des milliers de baux et utilisant beaucoup de mémoire dans le processus
Dnsmasq.
@@ -954,7 +1044,7 @@ utiliser avec précaution.
.TP
.B --log-dhcp
Traces additionnelles pour le service DHCP : enregistre toutes les options
-envoyées aux clients DHCP et les identifiants de réseaux utilisés pour la
+envoyées aux clients DHCP et les labels utilisés pour la
détermination de celles-ci.
.TP
.B \-l, --dhcp-leasefile=<chemin de fichier>
@@ -963,7 +1053,9 @@ baux DHCP.
.TP
.B \-6 --dhcp-script=<chemin de fichier>
Lorsqu'un bail DHCP est créé, ou qu'un ancien est supprimé, le fichier dont le
-chemin est spécifié est exécuté. Les arguments fournis à celui-ci sont soit
+chemin est spécifié est exécuté. Le <chemin de fichier> doit être un chemin
+absolu, aucune recherche n'est effectuée via la variable d'environnement PATH.
+Les arguments fournis à celui-ci sont soit
"add" ("ajouter"), "old" ("ancien") ou "del" ("supprimer"), suivi de l'adresse
MAC de l'hôte puis l'adresse IP et le nom d'hôte si celui-ci est
connu."add" signifie qu'un bail a été créé, "del" signifie qu'il a été supprimé,
@@ -975,43 +1067,59 @@ nécessaire de la préceder du type de réseau, par exemple "06-01:23:45:67:89:a
pour du token ring. Le processus est exécuté en temps que super-utilisateur
(si Dnsmasq a été lancé en temps que "root"), même si Dnsmasq est configuré
pour changer son UID pour celle d'un utilisateur non-privilégié.
-L'environnement est hérité de celui de l'invocation du processus Dnsmasq, et
-si l'hôte fournit un identifiant de client, celui-ci est stocké dans la
-variable d'environnement DNSMASQ_CLIENT_ID. Si un nom de domaine pleinement
-qualifié (FQDN) est connu pour l'hôte, la part relative au domaine est stockée
-dans DNSMASQ_DOMAIN. Si le client fournit une information de classe de vendeur,
-de classe d'utilisateur ou un nom d'hôte, celles-ci sont positionnées dans les
+
+L'environnement est hérité de celui de l'invocation du processus Dnsmasq,
+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.
+
+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
variables DNSMASQ_VENDOR_CLASS et DNSMASQ_USER_CLASS0 à DNSMASQ_USER_CLASSn
et DNSMASQ_SUPPLIED_HOSTNAME respectivement, mais seulement pour les actions
"add" et "old" lorsqu'un hôte reprend un bail existant, ces variables n'étant
-pas stockées dans la base de baux de Dnsmasq. Si Dnsmasq a été compilé avec
-l'option HAVE_BROKEN_RTC ("horloge RTC défectueuse"), alors la durée du bail
-(en secondes) est stockée dans la variable DNSMASQ_LEASE_LENGTH, sinon la date
-d'expiration du bail est toujours stocké dans la variable d'environnement
-DNSMASQ_LEASE_EXPIRES. Le nombre de secondes avant expiration est toujours
-stocké dans DNSMASQ_TIME_REMAINING. Si un bail était associé à un nom d'hôte et
+pas stockées dans la base de baux de Dnsmasq.
+
+Si Dnsmasq a été compilé avec l'option HAVE_BROKEN_RTC ("horloge RTC
+défectueuse"), alors la durée du bail (en secondes) est stockée dans la
+variable DNSMASQ_LEASE_LENGTH, sinon la date d'expiration du bail est toujours
+stocké dans la variable d'environnement DNSMASQ_LEASE_EXPIRES. Le nombre de
+secondes avant expiration est toujours stocké dans DNSMASQ_TIME_REMAINING.
+
+Si un bail était associé à un nom d'hôte et
que celui-ci est supprimé, un évênement de type "old" est généré avec le
nouveau statut du bail, c-à-d sans nom d'hôte, et le nom initial est fourni
-dans la variable d'environnement DNSMASQ_OLD_HOSTNAME. La variable
-DNSMASQ_INTERFACE contient le nom de l'interface sur laquelle la requête est
-arrivée; ceci n'est pas renseigné dans le cas des actions "old" ayant lieu
-après un redémarrage de dnsmasq. La variable DNSMASQ_RELAY_ADDRESS est
-renseignée si le client a utilisé un relai DHCP pour contacter Dnsmasq, si
-l'adresse IP du relai est connue. DNSMASQ_TAGS contient tous les labels
-d'identifiants de réseau fournis pendant la transaction DHCP, séparés par des
-espaces.
+dans la variable d'environnement DNSMASQ_OLD_HOSTNAME.
+
+La variable DNSMASQ_INTERFACE contient le nom de l'interface sur laquelle la
+requête est arrivée; ceci n'est pas renseigné dans le cas des actions "old"
+ayant lieu après un redémarrage de dnsmasq.
+
+La variable DNSMASQ_RELAY_ADDRESS est renseignée si le client a utilisé un
+relai DHCP pour contacter Dnsmasq, si l'adresse IP du relai est connue.
+
+DNSMASQ_TAGS contient tous les labels fournis pendant la transaction DHCP,
+séparés par des espaces.
+
Tous les descripteurs de fichiers sont fermés, sauf stdin, stdout et stderr qui
sont ouverts sur /dev/null (sauf en mode déverminage).
-Le script n'est pas lancé de manière concurrente : si un autre changement de
-bail intervient, le script ne sera relancé que lorsque l'exécution actuelle sera
-terminée.
+
+Le script n'est pas lancé de manière concurrente : au plus une instance du
+script est executée à la fois (dnsmasq attends qu'une instance de script se
+termine avant de lancer la suivante). Les changements dans la base des baux
+nécessitant le lancement du script sont placé en attente dans une queue jusqu'à
+terminaison d'une instance du script en cours. Si cette mise en queue fait que
+plusieurs changements d'états apparaissent pour un bail donné avant que le
+script puisse être lancé, alors les états les plus anciens sont supprimés et
+lorsque le script sera finalement lancé, ce sera avec l'état courant du bail.
+
Au démarrage de Dnsmasq, le script sera invoqué pour chacun des baux existants
-dans le fichier des baux. Le script sera lancé avec l'action "del" pour les baux
-expirés, et "old" pour les autres. <chemin de fichier> doit être un chemin
-absolu (c'est-à-dire partant de la racine "/"), aucune recherche n'aura lieu
-dans les répertoires de la variable d'environnement PATH. Lorsque Dnsmasq reçoit
-un signal HUP, le script sera invoqué avec une action "old" pour tous les baux
-existants.
+dans le fichier des baux. Le script sera lancé avec l'action "del" pour les
+baux expirés, et "old" pour les autres. Lorsque Dnsmasq reçoit un signal HUP,
+le script sera invoqué avec une action "old" pour tous les baux existants.
.TP
.B --dhcp-scriptuser
Spécifie l'utilisateur sous lequel le script lease-change doit être exécuté. La
@@ -1089,18 +1197,21 @@ sans gamme d'adresses de spécifié lorsque l'option
.B --dhcp-fqdn
est configurée.
.TP
-.B --enable-tftp
+.B --enable-tftp[=<interface>]
Active la fonction serveur TFTP. Celui-ci est de manière délibérée limité aux
fonctions nécessaires au démarrage par le réseau ("net-boot") d'un client. Seul
un accès en lecture est possible; les extensions tsize et blksize sont supportées
-(tsize est seulement supporté en mode octet).
+(tsize est seulement supporté en mode octet). Voir dans la section NOTES les
+informations relatives à la spécification de l'interface.
.TP
-.B --tftp-root=<répertoire>
+.B --tftp-root=<répertoire>[,<interface>]
Les fichiers à fournir dans les transferts TFTP seront cherchés en prenant le
répertoire fourni comme racine. Lorsque cela est fourni, les chemins TFTP
incluant ".." sont rejetés, afin d'éviter que les clients ne puissent sortir de
la racine spécifiée. Les chemins absolus (commençant par "/") sont autorisés,
-mais ils doivent être à la racine TFTP fournie.
+mais ils doivent être à la racine TFTP fournie. Si l'option interface est
+spécifiée, le répertoire n'est utilisé que pour les requêtes TFTP reçues sur
+cette interface.
.TP
.B --tftp-unique-root
Ajouter l'adresse IP du client TFTP en temps qu'élément de chemin, à la suite
@@ -1322,38 +1433,48 @@ exception à ceci : si le DNS amont contient un CNAME qui pointe vers un nom
présent dans /etc/hosts, alors la recherche du CNAME via Dnsmasq fournira
l'adresse DNS amont. Pour contourner cela, il suffit de mettre l'entrée
correspondant au CNAME dans /etc/hosts.
-
.PP
-les identifiants de réseau fonctionnent comme suit : Dnsmasq associe à chaque
-requête DHCP un ensemble d'identifiants de réseau; un pour la plage d'adresse
-DHCP (
+le système de label fonctionne comme suit : pour chaque requête DHCP, dnsmasq
+associe un ensemble de labels obtenus à partir des lignes de la configuration
+incluant set:<label>, y compris un pour la plage d'adresse (
.B dhcp-range
-) utilisée pour allouer l'adresse, un identifiant pour chaque entrée
+) utilisée pour allouer l'adresse, un pour chaque entrée
.B dhcp-host
-associée (il ajoute "known" lorsqu'une entrée dhcp-host coïncide), l'étiquette
-"bootp" pour les requêtes BOOTP, un identifiant dont le nom est le nom de
-l'interface sur laquelle la requête est arrivée, et éventuellement un
-identifiant pour chaque classe de vendeur ou d'utilisateur
-fournie par le client DHCP dans sa requête. Les options DHCP (
+associée (auquel est rajouté le mot-clef "known" si une entrée dhcp-host
+coïncide).
+
+Le label "bootp" est associé aux requêtes BOOTP, un label dont le nom est le
+nom de l'interface sur laquelle la requête est arrivée.
+
+Pour les lignes de configuration comportant des éléments tag:<label>,
+seules seront valides celles pour lesquels tous les labels correspondants
+seront présents. C'est typiquement le cas des lignes dhcp-options.
+Un
+.B dhcp-option
+possédant des labels sera utilisé de préférence à un
.B dhcp-option
-) ayant un identifiant de réseau seront utilisés de préférence à celles
-sans identifiants de réseau, pour peu que
-.I tous
-les labels correspondent.
-Le préfixe '#' sur un label est un indicateur de négation, ainsi
-.B --dhcp=option=#purple,3,1.2.3.4
-envoie l'option lorsque le label "purple" n'est pas dans la liste de labels
-valides pour l'hôte considéré.
+sans label, pour peu que _tous_ les labels positionnés correspondent à l'ensemble
+de labels décrit plus haut.
+Le préfixe '!' sur un label est un indicateur de négation, ainsi
+.B --dhcp=option=tag:!purple,3,1.2.3.4
+n'envoie l'option que lorsque le label "purple" n'est pas dans la liste de
+labels définis pour l'hôte considéré. (dans le cas de l'utilisation dans une
+ligne de commande au lieu d'un fichier de configuration, ne pas oublier
+d'échapper le caractère !, qui est un méta-caractère d'interpréteur de commande
+shell).
.PP
-Si l'identifiant de réseau dans la plage d'adresses DHCP (
-.B dhcp-range
-) est préfixé par 'net:', alors sa signification change : au lieu d'associer un
-label à la plage spécifiée, cela indique un label de réseau devant être spécifié
-par le client DHCP. Ainsi, s'il y a plus d'une plage d'adresses DHCP sur un
-sous-réseau, et que l'une est préfixée par un identifiant de réseau (par exemple
-l'un spécifié dans une option de classe de vendeur), alors un hôte ayant
-l'identifiant de réseau en question positionné se verra allouer une adresse dans
-la plage d'adresses DHCP préfixée.
+Veuillez noter que pour
+.B dhcp-range
+, les éléments tag:<label> et set:<label> sont tous les deux autorisés
+pour sélectionner la plage à utiliser selon, par exemple, le dhcp-host,
+et pour affecter l'option envoyée, sur la base de la plage sélectionnée.
+
+Ce système a évolué d'un système plus ancien et aux possibilités plus limitées,
+et pour des raisons de compatibilité "net:" peut être utilisé à la place de
+"tag:" et "set:" peut-être omis (à l'exception de
+.B dhcp-host,
+où "net:" peut-être utilisé à la place de "set:"). Pour les mêmes raisons, '#'
+peut-être utilisé à la place de '!' pour indiquer la négation.
.PP
Le serveur DHCP intégré dans Dnsmasq fonctionne également en temps que serveur
BOOTP, pour peu que l'adresse MAC et l'adresse IP des clients soient fournies,
@@ -1366,12 +1487,55 @@ ou dans le fichier
soit présente afin d'activer le serveur DHCP pour un réseau donné (L'option
.B --bootp-dynamic
supprime la nécessité des associations statiques). Le paramètre
-"filename" (nom de fichier) de la requête BOOTP est comparé avec les
-identifiants de réseaux des options
-.B dhcp-option
-ainsi que le label "bootp", ce qui permet de contrôler les options retournées
+"filename" (nom de fichier) de la requête BOOTP est utilisé comme label, ainsi
+que le label "bootp", permettant un certain contrôle sur les options retournées
aux différentes classes d'hôtes.
+Il est possible de spécifier un nom d'interface à
+.B dhcp-range
+sous la forme "interface:<nom d'interface>". La sémantique est comme suit :
+Pour le DHCP, s'il existe une autre valeur de dhcp-range pour laquelle
+_aucun_ nom d'interface n'est donné, alors le nom d'interface est ignoré
+et dnsmasq se comporte comme si la partie spécifiant l'interface n'existait
+pas, sinon le service DHCP n'est fourni qu'aux interfaces mentionnées dans
+les déclarations dhcp-range. Pour le DNS, si il n'y a pas d'option
+.B --interface
+ou
+.B --listen-address
+, alors le comportement n'est pas impacté par la spécification d'interface. Si
+l'une ou l'autre de ces options est présente, alors les interfaces mentionnées
+dans les plages d'adresses dhcp-range sont rajoutées à la liste de celles
+où le service DNS est assuré.
+
+De manière similaire,
+.B enable-tftp
+peut prendre un nom d'interface, ce qui active le TFTP pour cette seule
+interface, en ignorant les options
+.B --interface
+ou
+.B --listen-address
+De plus,
+.B --tftp-secure
+,
+.B --tftp-unique-root
+et
+.B --tftp-no-blocksize
+sont ignorées pour les requêtes sur de telles interfaces. (une directive
+.B --tftp-root
+donnant le chemin de la racine et une interface doit-être fournie).
+
+Ces règles peuvent paraître étrange à première vue, mais elles permettent
+d'ajouter à la configuration de dnsmasq des lignes de configuration de la
+forme "dhcp-range=interface:virt0,192.168.0.4,192.168.0.200" afin de fournir
+un service DHCP et DNS sur cette interface, sans pour autant affecter les
+services fournis sur d'autres interfaces, malgré l'absence de paramètres
+"interface=<interface>" sur les autres lignes de configuration.
+"enable-tftp=virt0" et "tftp-root=<root>,virt0" effectuent la même chose pour
+TFTP.
+L'idée de tout cela est de permettre l'addition de telles lignes
+automatiquement par libvirt ou un système équivalent, sans perturbation
+d'une configuration manuelle existant par ailleurs.
+
.SH CODES DE SORTIE
.PP
0 - Dnsmasq s'est correctement lancé en tâche de fond, ou alors s'est
@@ -1403,10 +1567,8 @@ ultérieur : les versions précédentes ne montaient pas en charge aussi bien.
.PP
Dnsmasq est capable de gérer le DNS et DHCP pour au moins un millier de clients.
-Evidement, pour cela la valeur de
-.B --dhcp-lease-max
-doit être augmentée et la durée des baux ne doit pas être très courte (moins
-d'une heure). La valeur de
+Pour cela, la durée des bail ne doit pas être très courte (moins d'une heure).
+La valeur de
.B --dns-forward-max
peut-être augmentée : commencer par la rendre égale au nombre de clients et
l'augmenter si le DNS semble lent. Noter que la performance du DNS dépends
diff --git a/po/de.po b/po/de.po
index 9d32c89..5a822a6 100644
--- a/po/de.po
+++ b/po/de.po
@@ -1,14 +1,19 @@
# German translations for dnsmasq package.
-# This file is put in the public domain.
-# Simon Kelley <simon@thekelleys.org.uk>, 2005.
#
+# This revised version is (C) Copyright by
+# Matthias Andree <matthias.andree@gmx.de>, 2010.
+# It is subject to the GNU General Public License v2,
+# or at your option, any later version.
+#
+# An older version of this file was originally put in the public domain by
+# Simon Kelley <simon@thekelleys.org.uk>, 2005.
msgid ""
msgstr ""
-"Project-Id-Version: dnsmasq 2.24\n"
+"Project-Id-Version: dnsmasq 2.53rc1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-06-18 12:24+0100\n"
-"PO-Revision-Date: 2005-09-27 09:37+0100\n"
-"Last-Translator: Simon Kelley <simon@thekelleys.org.uk>\n"
+"PO-Revision-Date: 2010-05-24 16:29+0200\n"
+"Last-Translator: Matthias Andree <matthias.andree@gmx.de>\n"
"Language-Team: German <de@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,92 +23,84 @@ msgstr ""
#: cache.c:764
#, c-format
msgid "failed to load names from %s: %s"
-msgstr ""
+msgstr "Fehler beim Laden der Namen von %s: %s"
-#: cache.c:798 dhcp.c:804
+#: cache.c:798 dhcp.c:865
#, c-format
msgid "bad address at %s line %d"
-msgstr ""
+msgstr "Fehlerhafte Adresse in %s Zeile %d"
-# @Simon: Here I need an example to understand it :)
-#: cache.c:856 dhcp.c:820
+#: cache.c:856 dhcp.c:881
#, c-format
msgid "bad name at %s line %d"
-msgstr ""
+msgstr "Fehlerhafter Name in %s Zeile %d"
-# @Simon: Here I need an example to understand it :)
-#: cache.c:863 dhcp.c:894
+#: cache.c:863 dhcp.c:955
#, c-format
msgid "read %s - %d addresses"
-msgstr "lese %s - %d Adressen"
+msgstr "%s gelesen - %d Adressen"
-# @Simon: 'lese' is present, is that ok? If it should be past, it would be
-# @Simon: "gelesen: %s - %d Adressen" - note the colon, it's a must, then.
#: cache.c:902
msgid "cleared cache"
msgstr "Cache geleert"
-#: cache.c:933 option.c:1069
+#: cache.c:933 option.c:1103
#, c-format
msgid "cannot access directory %s: %s"
-msgstr ""
+msgstr "Kann auf Verzeichnis %s nicht zugreifen: %s"
-# @Simon: "Cache geleert" is literally "Cache emptied" but I think other translations could be misleading
-# @Simon: (I don't know a good german replacement for "Cache" but AFAIK "Cache" is common in german)
-#: cache.c:1052
+#: cache.c:1053
+#, 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
#, 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 nicht dem DHCP 'Mieter' von %s zugewiesen, da der Name in %smit der Adresse %s bereits existiert"
+msgstr "Name %s wurde dem DHCP-Lease von %s nicht zugewiesen, da der Name in %s bereits mit Adresse %s existiert"
-#: cache.c:1129
+#: cache.c:1132
#, c-format
msgid "time %lu"
-msgstr ""
+msgstr "Zeit %lu"
-# @Simon: "Mieter" is rather 'logder, renter, tenant, lessee' but I couldn't find anything that fits better.
-# @Simon: So I thought I put it in ''-marks :)
-#: cache.c:1130
-#, fuzzy, c-format
+#: cache.c:1133
+#, 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:1132
+#: cache.c:1135
#, c-format
msgid "queries forwarded %u, queries answered locally %u"
-msgstr ""
+msgstr "%u weitergeleitete Anfragen, %u lokal beantwortete Anfragen"
-#: cache.c:1155
+#: cache.c:1158
#, c-format
msgid "server %s#%d: queries sent %u, retried or failed %u"
-msgstr ""
+msgstr "Server %s#%d: %u Anfragen gesendet, %u erneut versucht oder fehlgeschlagen"
#: util.c:59
#, c-format
msgid "failed to seed the random number generator: %s"
-msgstr ""
+msgstr "Konnte den Zufallszahlengenerator nicht initialisieren: %s"
#: util.c:191
msgid "failed to allocate memory"
-msgstr ""
+msgstr "Konnte Speicher nicht belegen"
-# @Simon: "re-used" = "wiederverwenden", but in such a case it must be split apart to "verwendet ... wieder"
-# @Simon: "unexpired" = "nicht abgelaufen" (expired=abgelaufen) -- altogether it sounds complicated in german,
-# @Simon: I would prefer to use "noch gültige" = "still valid", would that fit to the sense? Then it would be:
-# @Simon: msgstr "Cache Größe %d, %d/%d Cache-Einfügungen verwendeten noch gültige Cache-Einträge wieder."
-# @Simon: btw, what is the "%d/%d"-part?
-#: util.c:229 option.c:549
+#: util.c:229 option.c:567
msgid "could not get memory"
msgstr "Speicher nicht verfügbar"
#: util.c:239
#, c-format
msgid "cannot create pipe: %s"
-msgstr ""
+msgstr "Konnte Pipe nicht erzeugen: %s"
#: util.c:247
#, c-format
msgid "failed to allocate %d bytes"
-msgstr ""
+msgstr "Konnte %d Bytes nicht belegen"
# @Simon: not perfect but I cannot get nearer right now.
#: util.c:352
@@ -111,867 +108,893 @@ msgstr ""
msgid "infinite"
msgstr "unendlich"
-#: option.c:228
+#: option.c:240
msgid "Specify local address(es) to listen on."
msgstr "Lokale abzuhörende Adresse(n) angeben."
-# @Simon: Quite literal translation, sounds not too polite in german.
-# @Simon: How about: "Bitte die lokalen abzuhörende Adresse(n) angeben."
-# @Simon: = "Please specify the local address(es) to listen on."
-#: option.c:229
+#: option.c:241
msgid "Return ipaddr for all hosts in specified domains."
-msgstr "Rückkehr-IP-Adresse für alle Geräte in angebenen Domänen"
+msgstr "IP-Adresse für alle Hosts in angebenen Domänen festlegen."
-# @Simon: I hope "Return ipaddr" is similar to "Return-ipaddr" and not "Return the ipaddr ... !"
-#: option.c:230
+# FIXME: the English test is not to the point. Just use a shortened description
+# from the manpage instead. -- MA
+#: option.c:242
msgid "Fake reverse lookups for RFC1918 private address ranges."
-msgstr "'Gefälschte' Rückwärts-Ergebnisse für private Adressbereiche nach RFC1918"
+msgstr "Für private Adressbereiche nach RFC1918 \"keine solche Domain\" liefern."
-# @Simon: I'm a bit unsure about the meaning of "Fake" here, and the best word for "lookup" is "Nachsehen"
-# @Simon: (that is "looking-for") but I think that cannot be used. "Ergebnisse" = "results", is that near enough?
-#: option.c:231
+#: option.c:243
msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
-msgstr "Behandle IP-Adr als NXDOMAIN (wehrt Verisign-Platzhalter ab)."
+msgstr "Diese IP-Adresse als NXDOMAIN interpretieren (wehrt \"Suchhilfen\" ab)."
-# @Simon: or "Behandle IP-Adr als NXDOMAIN (gegen Verisign-Platzhalter)."
-# @Simon: "gegen" = "against", I believe that might be clumsy in english but it is fine in german.
-# @Simon: Just by chance I know what this is for - it is merely against verisign's use of wildcard
-# @Simon: entries (that lead to their own servers), right. Therefore, how about:
-# @Simon: "Behandle IP-Adr als NXDOMAIN (gegen Verisigns Platzhalter-Gebrauch)."
-# @Simon: = "Treat ipaddr as NXDOMAIN (defeats Verisigns wildcard usage)." ?
-# @Simon: But the explanatory(?) effect is only a very tiny bit better, I believe - what do U think?
-#: option.c:232
+#: option.c:244
#, c-format
msgid "Specify the size of the cache in entries (defaults to %s)."
-msgstr "Angabe der Größe des Caches in Einträgen (Voreinstellung: %s)."
+msgstr "Größe des Caches (Zahl der Einträge) festlegen (Voreinstellung: %s)."
-#: option.c:233
+#: option.c:245
#, c-format
msgid "Specify configuration file (defaults to %s)."
-msgstr "Angabe der Konfigurationsdatei (Voreinstellung: %s)."
+msgstr "Konfigurationsdatei festlegen (Voreinstellung: %s)."
-#: option.c:234
+#: option.c:246
msgid "Do NOT fork into the background: run in debug mode."
msgstr "NICHT in den Hintergrund gehen: Betrieb im Debug-Modus"
-# @Simon: = "DO NOT go into the background: Operation in debug-mode"
-# @Simon: I know it sounds a bit clumsy in english, but "fork" would be hard to understand
-# @Simon: and then I get a problem between "go" and "run" - so...
-# @Simon: "Debug-mode" = "Fehlersuch-Modus", literally, but I think "Debug-Modus" is better :)
-#: option.c:235
+#: option.c:247
msgid "Do NOT forward queries with no domain part."
-msgstr "Anfragen ohne Domänen-Teil NICHT weiterschicken"
+msgstr "Anfragen ohne Domänen-Teil NICHT weiterschicken."
-# @Simon: "weiterschicken" is rather "pass on" (I hope) but that's the best I found.
-#: option.c:236
+#: option.c:248
msgid "Return self-pointing MX records for local hosts."
-msgstr "Rückgabe auf sich selbst zeigender MX-Einträge für lokale Geräte"
+msgstr "Für lokale Einträge MX-Einträge liefern, die auf sich selbst zeigen."
-# @Simon: "self-pointing" is a bit difficult, the meaning is clear but takes 3-4 words to express it in german.
-# @Simon: "Geräte" is about "hard-devices". There is a word for "host" (it is "Wirt") but it would be misleading.
-# @Simon: My online dict suggest "Rechner" (= Computer), but I think "hard-devices" is better because it's more general.
-#: option.c:237
+#: option.c:249
msgid "Expand simple names in /etc/hosts with domain-suffix."
-msgstr "Erweitere einfache Namen in /etc/hosts mit der Domänen-Endung"
+msgstr "Erweitere einfache Namen in /etc/hosts mit der Domänen-Endung."
-#: option.c:238
+#: option.c:250
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:239
+#: option.c:251
msgid "Enable DHCP in the range given with lease duration."
-msgstr ""
+msgstr "DHCP für angegebenen Bereich und Dauer einschalten"
-#: option.c:240
+#: option.c:252
#, c-format
msgid "Change to this group after startup (defaults to %s)."
-msgstr ""
+msgstr "Nach dem Start in diese Benutzergruppe wechseln (Voreinstellung %s)."
-#: option.c:241
+#: option.c:253
msgid "Set address or hostname for a specified machine."
-msgstr ""
+msgstr "Adresse oder Hostnamen für einen angegebenen Computer setzen."
-#: option.c:242
-msgid "Read DHCP host specs from file"
-msgstr ""
+#: option.c:254
+#, fuzzy
+msgid "Read DHCP host specs from file."
+msgstr "DHCP-Host-Angaben aus Datei lesen"
-#: option.c:243
-msgid "Read DHCP option specs from file"
-msgstr ""
+#: option.c:255
+#, fuzzy
+msgid "Read DHCP option specs from file."
+msgstr "DHCP-Optionen aus Datei lesen"
-#: option.c:244
+#: option.c:256
+#, fuzzy
+msgid "Evaluate conditional tag expression."
+msgstr "Auswertung eines Ausdrucks bedingter Marken"
+
+#: option.c:257
#, c-format
msgid "Do NOT load %s file."
-msgstr ""
+msgstr "%s-Datei NICHT laden."
-#: option.c:245
+#: option.c:258
#, c-format
msgid "Specify a hosts file to be read in addition to %s."
-msgstr ""
+msgstr "Hosts-Datei festlegen, die zusätzlich zu %s gelesen wird."
-#: option.c:246
+#: option.c:259
msgid "Specify interface(s) to listen on."
-msgstr ""
+msgstr "Schnittstelle(n) zum Empfang festlegen."
-#: option.c:247
+#: option.c:260
msgid "Specify interface(s) NOT to listen on."
-msgstr ""
+msgstr "Schnittstelle(n) festlegen, die NICHT empfangen sollen."
-#: option.c:248
+#: option.c:261
msgid "Map DHCP user class to tag."
-msgstr ""
+msgstr "DHCP-Benutzerklasse auf Marke abbilden."
-#: option.c:249
+#: option.c:262
msgid "Map RFC3046 circuit-id to tag."
-msgstr ""
+msgstr "RFC3046 \"circuit-id\" auf Marke abbilden."
-#: option.c:250
+#: option.c:263
msgid "Map RFC3046 remote-id to tag."
-msgstr ""
+msgstr "RFC3046 \"remote-id\" auf Marke abbilden."
-#: option.c:251
+#: option.c:264
msgid "Map RFC3993 subscriber-id to tag."
-msgstr ""
+msgstr "RFC3993 \"subscriber-id\" auf Marke abbilden."
-#: option.c:252
+#: option.c:265
msgid "Don't do DHCP for hosts with tag set."
-msgstr ""
+msgstr "Kein DHCP für Hosts mit gesetzter Marke verwenden."
-#: option.c:253
+#: option.c:266
msgid "Force broadcast replies for hosts with tag set."
-msgstr ""
+msgstr "Rundsendung für Hosts mit gesetzter Marke erzwingen."
-#: option.c:254
+#: option.c:267
msgid "Do NOT fork into the background, do NOT run in debug mode."
-msgstr ""
+msgstr "NICHT in den Hintergrund wechseln, NICHT im Debug-Modus laufen."
-#: option.c:255
+#: option.c:268
msgid "Assume we are the only DHCP server on the local network."
-msgstr ""
+msgstr "Voraussetzen, dass wir der einzige DHCP-Server im lokalen Netz sind."
-#: option.c:256
+#: option.c:269
#, c-format
msgid "Specify where to store DHCP leases (defaults to %s)."
-msgstr ""
+msgstr "Festlegen, wo DHCP-Leases gespeichert werden (Voreinstellung %s)."
-#: option.c:257
+#: option.c:270
msgid "Return MX records for local hosts."
-msgstr ""
+msgstr "MX-Einträge für lokale Hosts liefern."
-#: option.c:258
+#: option.c:271
msgid "Specify an MX record."
-msgstr ""
+msgstr "Einen MX-Eintrag festlegen."
-#: option.c:259
+#: option.c:272
msgid "Specify BOOTP options to DHCP server."
-msgstr ""
+msgstr "BOOTP-Optionen für DHCP-Server festlegen."
-#: option.c:260
+#: option.c:273
#, c-format
msgid "Do NOT poll %s file, reload only on SIGHUP."
-msgstr ""
+msgstr "%s-Datei NICHT abfragen, nur bei SIGHUP neu laden."
-#: option.c:261
+#: option.c:274
msgid "Do NOT cache failed search results."
-msgstr ""
+msgstr "Fehlerhafte Suchergebnisse NICHT zwischenspeichern."
-#: option.c:262
+#: option.c:275
#, c-format
msgid "Use nameservers strictly in the order given in %s."
-msgstr ""
+msgstr "Namensserver streng in der in %s angegebenen Reihenfolge verwenden."
-#: option.c:263
+#: option.c:276
msgid "Specify options to be sent to DHCP clients."
-msgstr ""
+msgstr "Optionen festlegen, die an DHCP-Klienten gesendet werden."
-#: option.c:264
+#: option.c:277
msgid "DHCP option sent even if the client does not request it."
-msgstr ""
+msgstr "DHCP-Option, die selbst ohne Klientenanfrage gesendet wird."
-#: option.c:265
+#: option.c:278
msgid "Specify port to listen for DNS requests on (defaults to 53)."
-msgstr ""
+msgstr "Port zum Abhören der DNS-Anfragen festlegen (53 voreingestellt)."
-#: option.c:266
+#: option.c:279
#, c-format
msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
-msgstr ""
+msgstr "Maximale unterstützte UDP-Paketgröße für EDNS.0 (Voreinstellung %s)."
-#: option.c:267
+#: option.c:280
msgid "Log DNS queries."
-msgstr ""
+msgstr "DNS-Anfragen protokollieren."
-#: option.c:268
+#: option.c:281
msgid "Force the originating port for upstream DNS queries."
-msgstr ""
+msgstr "Ausgehenden Port erzwingen für DNS-Anfragen an vorgelagerte Server."
-#: option.c:269
+#: option.c:282
msgid "Do NOT read resolv.conf."
-msgstr ""
+msgstr "resolv.conf NICHT lesen."
-#: option.c:270
+#: option.c:283
#, c-format
msgid "Specify path to resolv.conf (defaults to %s)."
-msgstr ""
+msgstr "Pfad zu resolv.conf festlegen (%s voreingestellt)."
-#: option.c:271
+#: option.c:284
msgid "Specify address(es) of upstream servers with optional domains."
-msgstr ""
+msgstr "Adresse(n) vorgelagerter Server festlegen, optional mit Domänen."
-#: option.c:272
+#: option.c:285
msgid "Never forward queries to specified domains."
-msgstr ""
+msgstr "Anfragen für angegebene Domänen niemals weiterleiten."
-#: option.c:273
+#: option.c:286
msgid "Specify the domain to be assigned in DHCP leases."
-msgstr ""
+msgstr "Domäne festlegen, die für DHCP-Leases zugewiesen wird."
-#: option.c:274
+#: option.c:287
msgid "Specify default target in an MX record."
-msgstr ""
+msgstr "Voreingestelltes Ziel für MX-Einträge festlegen."
-#: option.c:275
+#: option.c:288
msgid "Specify time-to-live in seconds for replies from /etc/hosts."
-msgstr ""
+msgstr "Gültigkeitsdauer für Antworten aus /etc/hosts festlegen."
-#: option.c:276
+#: option.c:289
msgid "Specify time-to-live in seconds for negative caching."
-msgstr ""
+msgstr "Gültigkeitsdauer in Sekunden für Caching negativer Ergebnisse festlegen."
-#: option.c:277
+#: option.c:290
+#, 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
#, c-format
msgid "Change to this user after startup. (defaults to %s)."
-msgstr ""
+msgstr "Nach dem Start diese Benutzerrechte annehmen (%s voreingestellt)."
-#: option.c:278
+#: option.c:292
msgid "Map DHCP vendor class to tag."
-msgstr ""
+msgstr "DHCP-\"vendor class\" auf Marke abbilden."
-#: option.c:279
+#: option.c:293
msgid "Display dnsmasq version and copyright information."
-msgstr ""
+msgstr "dnsmasq-Version und Urheberrecht anzeigen."
-#: option.c:280
+#: option.c:294
msgid "Translate IPv4 addresses from upstream servers."
-msgstr ""
+msgstr "IPv4-Adressen von vorgelagerten Servern übersetzen."
-#: option.c:281
+#: option.c:295
msgid "Specify a SRV record."
-msgstr ""
+msgstr "SRV-Eintrag festlegen."
-#: option.c:282
+#: option.c:296
msgid "Display this message. Use --help dhcp for known DHCP options."
-msgstr ""
+msgstr "Diese Hilfe anzeigen. Benutzen Sie --help dhcp für bekannte DHCP-Optionen."
-#: option.c:283
-#, fuzzy, c-format
+#: option.c:297
+#, c-format
msgid "Specify path of PID file (defaults to %s)."
-msgstr "Angabe der Konfigurationsdatei (Voreinstellung: %s)."
+msgstr "Dateipfad für Prozesskennung (PID) festlegen (Voreinstellung: %s)."
-#: option.c:284
+#: option.c:298
#, c-format
msgid "Specify maximum number of DHCP leases (defaults to %s)."
-msgstr ""
+msgstr "Höchstzahl der DHCP-Leases festlegen (%s voreingestellt)."
-#: option.c:285
+#: option.c:299
msgid "Answer DNS queries based on the interface a query was sent to."
-msgstr ""
+msgstr "DNS-Anfragen abhängig der Emfpangsschnittstelle beantworten."
-#: option.c:286
+#: option.c:300
msgid "Specify TXT DNS record."
-msgstr ""
+msgstr "DNS-TXT-Eintrag festlegen."
-#: option.c:287
+#: option.c:301
msgid "Specify PTR DNS record."
-msgstr ""
+msgstr "DNS-PTR-Eintrag festlegen."
-#: option.c:288
+#: option.c:302
msgid "Give DNS name to IPv4 address of interface."
-msgstr ""
+msgstr "Schnittstellennamen zur IPv4-Adresse des Interfaces auflösen."
-#: option.c:289
+#: option.c:303
msgid "Bind only to interfaces in use."
-msgstr ""
+msgstr "Nur an verwendete Schnittstellen binden."
-#: option.c:290
+#: option.c:304
#, c-format
msgid "Read DHCP static host information from %s."
-msgstr ""
+msgstr "Statische DHCP-Host-Information aus %s lesen."
-#: option.c:291
+#: option.c:305
msgid "Enable the DBus interface for setting upstream servers, etc."
-msgstr ""
+msgstr "DBus-Schnittstelle zum Festlegen vorgelagerter Server usw. festlegen."
-#: option.c:292
+#: option.c:306
msgid "Do not provide DHCP on this interface, only provide DNS."
-msgstr ""
+msgstr "Auf dieser Schnittstelle kein DHCP anbieten, sondern nur DNS."
-#: option.c:293
+#: option.c:307
msgid "Enable dynamic address allocation for bootp."
-msgstr ""
+msgstr "Dynamische Adressbelegung für bootp einschalten."
-#: option.c:294
+#: option.c:308
msgid "Map MAC address (with wildcards) to option set."
-msgstr ""
+msgstr "MAC-Adresse (mit Jokerzeichen) auf Netzmarke abbilden."
-#: option.c:295
+#: option.c:309
msgid "Treat DHCP requests on aliases as arriving from interface."
-msgstr ""
+msgstr "DHCP-Anfragen von Alias-Schnittstellen für die Hauptschnittstelle beantworten."
-#: option.c:296
+#: option.c:310
msgid "Disable ICMP echo address checking in the DHCP server."
-msgstr ""
+msgstr "ICMP-Echo-Adressprüfung im DHCP-Server abschalten."
-#: option.c:297
+#: option.c:311
msgid "Script to run on DHCP lease creation and destruction."
-msgstr ""
+msgstr "Skript, das bei Erzeugung/Löschung einer DHCP-Lease laufen soll."
-#: option.c:298
+#: option.c:312
msgid "Read configuration from all the files in this directory."
-msgstr ""
+msgstr "Konfiguration aus allen Dateien in diesem Verzeichnis lesen."
-#: option.c:299
+#: option.c:313
msgid "Log to this syslog facility or file. (defaults to DAEMON)"
-msgstr ""
+msgstr "Für diese Syslog-Anlage oder in Datei loggen (Voreinstellung DAEMON)."
-#: option.c:300
+#: option.c:314
msgid "Do not use leasefile."
-msgstr ""
+msgstr "Keine Lease-Datei benützen."
-#: option.c:301
+#: option.c:315
#, c-format
msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
-msgstr ""
+msgstr "Höchstzahl nebenläufiger DNS-Anfragen (%s voreingestellt)."
-#: option.c:302
+#: option.c:316
#, c-format
msgid "Clear DNS cache when reloading %s."
-msgstr ""
+msgstr "DNS-Cache beim Neuladen von %s löschen."
-#: option.c:303
+#: option.c:317
msgid "Ignore hostnames provided by DHCP clients."
-msgstr ""
+msgstr "Von DHCP-Clients gelieferte Hostnamen ignorieren."
-#: option.c:304
+#: option.c:318
msgid "Do NOT reuse filename and server fields for extra DHCP options."
-msgstr ""
+msgstr "Dateinamen und Server-Datenfehler für zusätzliche DHCP-Optionen NICHT wiederverwenden."
-#: option.c:305
+#: option.c:319
msgid "Enable integrated read-only TFTP server."
-msgstr ""
+msgstr "Eingebauten Nur-Lese-TFTP-Server einschalten."
-#: option.c:306
+#: option.c:320
msgid "Export files by TFTP only from the specified subtree."
-msgstr ""
+msgstr "Nur vom festgelegten Unterbaum Dateien per TFTP exportieren."
-#: option.c:307
+#: option.c:321
msgid "Add client IP address to tftp-root."
-msgstr ""
+msgstr "IP-Adresse des Klienten an tftp-root anhängen."
-#: option.c:308
+#: option.c:322
msgid "Allow access only to files owned by the user running dnsmasq."
-msgstr ""
+msgstr "Zugriff nur auf Dateien gestatten, die dem dnsmasq aufrufenden Benutzer gehören."
-#: option.c:309
+#: option.c:323
#, c-format
msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
-msgstr ""
+msgstr "Höchstzahl nebenläufiger TFTP-Übertragungen (%s voreingestellt)."
-#: option.c:310
+#: option.c:324
msgid "Disable the TFTP blocksize extension."
-msgstr ""
+msgstr "TFTP-Blockgrößen-Erweiterung abschalten."
-#: option.c:311
+#: option.c:325
msgid "Ephemeral port range for use by TFTP transfers."
-msgstr ""
+msgstr "Bereich für vorübergehende Ports für TFTP-Übertragungen."
-#: option.c:312
+#: option.c:326
msgid "Extra logging for DHCP."
-msgstr ""
+msgstr "Erweiterte DHCP-Protokollierung."
-#: option.c:313
+#: option.c:327
msgid "Enable async. logging; optionally set queue length."
-msgstr ""
+msgstr "Asynchrone Protokollierung einschalten, opt. Warteschlangenlänge festlegen."
-#: option.c:314
+#: option.c:328
msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
-msgstr ""
+msgstr "DNS-Rebinding unterbinden, private IP-Bereiche bei der Auflösung ausfiltern."
-#: option.c:315
+#: option.c:329
+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
+#, fuzzy
+msgid "Inhibit DNS-rebind protection on this domain."
+msgstr "DNS-Rebind-Schutz für diese Domäne sperren."
+
+#: option.c:331
msgid "Always perform DNS queries to all servers."
-msgstr ""
+msgstr "DNS-Anfragen immer an alle Server weiterleiten."
-#: option.c:316
+#: option.c:332
msgid "Set tag if client includes matching option in request."
-msgstr ""
+msgstr "Marke setzen, wenn Klient eine entsprechende Option anfragt."
-#: option.c:317
+#: option.c:333
msgid "Use alternative ports for DHCP."
-msgstr ""
+msgstr "Alternative Ports für DHCP verwenden."
-#: option.c:318
+#: option.c:334
msgid "Run lease-change script as this user."
-msgstr ""
+msgstr "Lease-Änderungs-Skript mit den Rechten dieses Nutzers ausführen."
-#: option.c:319
+#: option.c:335
msgid "Specify NAPTR DNS record."
-msgstr ""
+msgstr "DNS-NAPTR-Eintrag festlegen."
-#: option.c:320
+#: option.c:336
msgid "Specify lowest port available for DNS query transmission."
-msgstr ""
+msgstr "Niedrigsten verfügbaren Port für Übertragung von DNS-Anfragen festlegen."
-#: option.c:321
+#: option.c:337
msgid "Use only fully qualified domain names for DHCP clients."
-msgstr ""
+msgstr "Für DHCP-Klienten nur vollständig bestimmte Domänennamen benutzen."
-#: option.c:322
+# FIXME: probably typo in original message. -- MA
+#: option.c:338
+#, fuzzy
+msgid "Generate hostnames based on MAC address for nameless clients."
+msgstr "Für namenlose Klienten die Hostnamen MAC-basiert erzeugen."
+
+#: option.c:339
+msgid "Use these DHCP relays as full proxies."
+msgstr "Diese DHCP-Relais als vollwertige Proxies verwenden."
+
+#: option.c:340
msgid "Specify alias name for LOCAL DNS name."
-msgstr ""
+msgstr "Alias für LOKALEN DNS-Namen festlegen."
-#: option.c:323
+#: option.c:341
msgid "Prompt to send to PXE clients."
-msgstr ""
+msgstr "Aufforderung, die an PXE-Klienten geschickt wird."
-#: option.c:324
+#: option.c:342
msgid "Boot service for PXE menu."
-msgstr ""
+msgstr "Boot-Dienst für PXE-Menü."
-#: option.c:325
+#: option.c:343
msgid "Check configuration syntax."
-msgstr ""
+msgstr "Konfigurationssyntax prüfen."
-#: option.c:614
+#: option.c:632
#, c-format
msgid ""
"Usage: dnsmasq [options]\n"
"\n"
msgstr ""
+"Verwendung: dnsmasq [Optionen]\n"
+"\n"
-#: option.c:616
+#: option.c:634
#, c-format
msgid "Use short options only on the command line.\n"
-msgstr ""
+msgstr "Auf der Befehlszeile nur kurze Optionen verwenden!\n"
-#: option.c:618
+#: option.c:636
#, c-format
msgid "Valid options are:\n"
-msgstr ""
+msgstr "Gültige Optionen sind:\n"
-#: option.c:659
+#: option.c:677
#, c-format
msgid "Known DHCP options:\n"
-msgstr ""
+msgstr "Bekannte DHCP-Optionen:\n"
-#: option.c:747
+#: option.c:781
msgid "bad dhcp-option"
-msgstr ""
+msgstr "Fehlerhafte DHCP-Option"
-# @Simon: Here I need an example to understand it :)
-#: option.c:804
-#, fuzzy
+#: option.c:838
msgid "bad IP address"
-msgstr "lese %s - %d Adressen"
+msgstr "Fehlerhafte IP-Adresse"
-#: option.c:903
+#: option.c:937
msgid "bad domain in dhcp-option"
-msgstr ""
+msgstr "Fehlerhafte Domäne in DHCP-Option"
-#: option.c:964
+#: option.c:998
msgid "dhcp-option too long"
-msgstr ""
+msgstr "DHCP-Option zu lang"
-#: option.c:973
+#: option.c:1007
msgid "illegal dhcp-match"
-msgstr ""
+msgstr "Unzulässige dhcp-match-Option"
-#: option.c:1009
+#: option.c:1043
msgid "illegal repeated flag"
-msgstr ""
+msgstr "unzulässig wiederholte Markierung"
-#: option.c:1017
+#: option.c:1051
msgid "illegal repeated keyword"
-msgstr ""
+msgstr "unzulässig wiederholtes Schlüsselwort"
-#: option.c:1100 tftp.c:359
+#: option.c:1134 tftp.c:413
#, c-format
msgid "cannot access %s: %s"
-msgstr ""
+msgstr "Kann auf %s nicht zugreifen: %s"
-#: option.c:1145
+#: option.c:1179
msgid "only one dhcp-hostsfile allowed"
-msgstr ""
+msgstr "nur eine DHCP-Hostdatei (dhcp-hostsfile) zulässig"
-#: option.c:1152
+#: option.c:1186
msgid "only one dhcp-optsfile allowed"
-msgstr ""
+msgstr "nur eine DHCP-Optionsdatei (dhcp-optsfile) zulässig"
-#: option.c:1197
+#: option.c:1231
msgid "bad MX preference"
-msgstr ""
+msgstr "unzulässige MX-Präferenz-Angabe"
-#: option.c:1202
+#: option.c:1236
msgid "bad MX name"
-msgstr ""
+msgstr "unzulässiger MX-Name"
-#: option.c:1216
+#: option.c:1250
msgid "bad MX target"
-msgstr ""
+msgstr "unzulässiges MX-Ziel"
-#: option.c:1226
+#: option.c:1260
msgid "cannot run scripts under uClinux"
-msgstr ""
+msgstr "unter uClinux ist die Skriptausführung nicht möglich"
-#: option.c:1228
+#: option.c:1262
msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts"
-msgstr ""
+msgstr "Neuübersetzung mit HAVE_SCRIPT nötig, um Lease-Änderungs-Skripte auszuführen"
-#: option.c:1456 option.c:1460
+#: option.c:1507 option.c:1511
msgid "bad port"
-msgstr ""
+msgstr "unzulässiger Port"
-#: option.c:1479 option.c:1504
+#: option.c:1530 option.c:1555
msgid "interface binding not supported"
-msgstr ""
+msgstr "Schnittstellenbindung nicht unterstützt"
-#: option.c:1625
+#: option.c:1701
msgid "bad port range"
-msgstr ""
+msgstr "unzulässiger Portbereich"
-#: option.c:1642
+#: option.c:1718
msgid "bad bridge-interface"
-msgstr ""
+msgstr "unzulässige Brücken-Schnittstelle"
-#: option.c:1683
+#: option.c:1760
msgid "bad dhcp-range"
-msgstr ""
+msgstr "unzulässiger DHCP-Bereich"
-#: option.c:1709
-msgid "only one netid tag allowed"
-msgstr ""
+#: option.c:1788
+msgid "only one tag allowed"
+msgstr "nur eine Marke zulässig"
-#: option.c:1754
+#: option.c:1835
msgid "inconsistent DHCP range"
-msgstr ""
+msgstr "inkonsistenter DHCP-Bereich"
-#: option.c:1926
+#: option.c:2010
msgid "bad DHCP host name"
-msgstr ""
+msgstr "unzulässiger DHCP-Hostname"
-#: option.c:2221 option.c:2501
+#: option.c:2091
+msgid "bad tag-if"
+msgstr "unzulässige bedingte Marke (tag-if)"
+
+#: option.c:2365 option.c:2664
msgid "invalid port number"
-msgstr ""
+msgstr "unzulässige Portnummer"
-#: option.c:2304
+#: option.c:2427
+msgid "bad dhcp-proxy address"
+msgstr "Fehlerhafte DHCP-Proxy-Adresse"
+
+#: option.c:2467
msgid "invalid alias range"
-msgstr ""
+msgstr "unzulässiger Alias-Bereich"
-#: option.c:2317
+#: option.c:2480
msgid "bad interface name"
-msgstr ""
+msgstr "unzulässiger Schnittestellenname"
-#: option.c:2342
+#: option.c:2505
msgid "bad CNAME"
-msgstr ""
+msgstr "unzulässiger CNAME"
-#: option.c:2347
+#: option.c:2510
msgid "duplicate CNAME"
-msgstr ""
+msgstr "doppelter CNAME"
-#: option.c:2367
+#: option.c:2530
msgid "bad PTR record"
-msgstr ""
+msgstr "unzulässiger PTR-Eintrag"
-#: option.c:2398
+#: option.c:2561
msgid "bad NAPTR record"
-msgstr ""
+msgstr "unzulässiger NAPTR-Eintrag"
-#: option.c:2423
+#: option.c:2586
msgid "TXT record string too long"
-msgstr ""
+msgstr "TXT-Eintrag zu lang"
-#: option.c:2471
+#: option.c:2634
msgid "bad TXT record"
-msgstr ""
+msgstr "unzulässiger TXT-Eintrag"
-#: option.c:2487
+#: option.c:2650
msgid "bad SRV record"
-msgstr ""
+msgstr "unzulässiger SRV-Eintrag"
-#: option.c:2494
+#: option.c:2657
msgid "bad SRV target"
-msgstr ""
+msgstr "unzulässiges SRV-Ziel"
-#: option.c:2508
+#: option.c:2671
msgid "invalid priority"
-msgstr ""
+msgstr "unzulässige Priorität"
-#: option.c:2515
+#: option.c:2678
msgid "invalid weight"
-msgstr ""
+msgstr "unzulässige Wichtung"
-#: option.c:2534
+#: option.c:2697
msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DBus support)"
-msgstr ""
+msgstr "unzulässige Option (prüfen Sie, ob dnsmasq mit DHCP/TFTP/DBus-Unterstützt übersetzt wurde)"
-#: option.c:2577
+#: option.c:2739
#, c-format
msgid "files nested too deep in %s"
-msgstr ""
+msgstr "Dateien in %s zu tief verschachtelt"
-#: option.c:2585 tftp.c:513
+#: option.c:2747 tftp.c:567
#, c-format
msgid "cannot read %s: %s"
-msgstr ""
+msgstr "kann %s nicht lesen: %s"
-#: option.c:2646
+#: option.c:2804
msgid "missing \""
-msgstr ""
+msgstr "fehlende \\\""
-#: option.c:2693
+#: option.c:2863
msgid "bad option"
-msgstr ""
+msgstr "unzulässige Option"
-#: option.c:2695
+#: option.c:2865
msgid "extraneous parameter"
-msgstr ""
+msgstr "überschüssiger Parameter"
-#: option.c:2697
+#: option.c:2867
msgid "missing parameter"
-msgstr ""
+msgstr "fehler Parameter"
-#: option.c:2705
+#: option.c:2871
msgid "error"
-msgstr ""
+msgstr "Fehler"
-# @Simon: "Speicher nicht verfügbar" = "memory not available"
-# @Simon: "could not get memory" = "konnte keinen Speicher bekommen" or "konnte Speicher nicht bekommen"
-# @Simon: ("keinen Speicher" = "no memory", "... nicht bekommen" = "... not get")
-# @Simon: both would be correct - but would sound rather clumsy in german
-# @Simon: how about "Nicht genügend Speicher verfügbar" = "Not enough memory available" ?
-#: option.c:2711
+#: option.c:2876
#, c-format
msgid "%s at line %d of %%s"
msgstr "%s in Zeile %d von %%s"
-#: option.c:2760 option.c:2791
+#: option.c:2933 option.c:2964
#, c-format
msgid "read %s"
-msgstr ""
+msgstr "%s gelesen"
-#: option.c:2863
+#: option.c:3036
#, c-format
msgid "Dnsmasq version %s %s\n"
-msgstr ""
+msgstr "Dnsmasq Version %s %s\n"
-#: option.c:2864
+#: option.c:3037
#, c-format
msgid ""
"Compile time options %s\n"
"\n"
msgstr ""
+"Ãœbersetzungs-Optionen %s\n"
+"\n"
-#: option.c:2865
+#: option.c:3038
#, c-format
msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
-msgstr ""
+msgstr "Für diese Software wird ABSOLUT KEINE GARANTIE gewährt.\n"
-#: option.c:2866
+# FIXME: this must be one long string! -- MA
+#: option.c:3039
#, c-format
msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
msgstr ""
-#: option.c:2867
+#: option.c:3040
#, c-format
msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
msgstr ""
-#: option.c:2878
+#: option.c:3051
msgid "try --help"
-msgstr ""
+msgstr "versuchen Sie --help"
-#: option.c:2880
+#: option.c:3053
msgid "try -w"
-msgstr ""
+msgstr "versuchen Sie -w"
-#: option.c:2883
+#: option.c:3056
#, c-format
msgid "bad command line options: %s"
-msgstr ""
+msgstr "unzulässige Optionen auf der Befehlszeile: %s"
-#: option.c:2924
+#: option.c:3097
#, c-format
msgid "cannot get host-name: %s"
-msgstr ""
+msgstr "kann Hostnamen nicht ermitteln: %s"
-#: option.c:2952
+#: option.c:3125
msgid "only one resolv.conf file allowed in no-poll mode."
-msgstr ""
+msgstr "mit -n/--no-poll ist nur eine resolv.conf-Datei zulässig."
-#: option.c:2962
+#: option.c:3135
msgid "must have exactly one resolv.conf to read domain from."
-msgstr ""
+msgstr "Um die Domäne zu lesen, muss genau eine resolv.conf-Datei verwendet werden."
-#: option.c:2965 network.c:777 dhcp.c:753
+#: option.c:3138 network.c:813 dhcp.c:814
#, c-format
msgid "failed to read %s: %s"
-msgstr ""
+msgstr "konnte %s nicht lesen: %s"
-#: option.c:2982
+#: option.c:3155
#, c-format
msgid "no search directive found in %s"
-msgstr ""
+msgstr "keine \"search\"-Anweisung in %s gefunden"
-#: option.c:3003
+#: option.c:3176
msgid "there must be a default domain when --dhcp-fqdn is set"
-msgstr ""
+msgstr "für --dhcp-fqdn muss eine Domäne vorausgewählt werden"
-#: option.c:3007
+#: option.c:3180
msgid "syntax check OK"
-msgstr ""
+msgstr "Syntaxprüfung OK"
-#: forward.c:405
+#: forward.c:427
#, c-format
msgid "nameserver %s refused to do a recursive query"
-msgstr ""
+msgstr "Namensserver %s hat eine rekursive Anfrage verweigert"
-#: forward.c:433
-msgid "possible DNS-rebind attack detected"
-msgstr ""
+#: forward.c:455
+#, c-format
+msgid "possible DNS-rebind attack detected: %s"
+msgstr "möglichen DNS-Rebind-Angriff entdeckt: %s"
-#: network.c:73
+#: network.c:110
#, c-format
msgid "unknown interface %s in bridge-interface"
-msgstr ""
+msgstr "unbekannte Schnittstelle %s in bridge-interface"
-#: network.c:436 dnsmasq.c:189
+#: network.c:467 dnsmasq.c:188
#, c-format
msgid "failed to create listening socket: %s"
-msgstr ""
+msgstr "Konnte Empfangs-Socket nicht erzeugen: %s"
-#: network.c:443
+#: network.c:474
#, c-format
msgid "failed to set IPV6 options on listening socket: %s"
-msgstr ""
+msgstr "konnte IPV6-Optionen auf Empfangs-Socket nicht einstellen: %s"
-#: network.c:469
+#: network.c:500
#, c-format
msgid "failed to bind listening socket for %s: %s"
-msgstr ""
+msgstr "konnte Empfangs-Socket nicht an %s binden: %s"
-#: network.c:474
+#: network.c:505
#, c-format
msgid "failed to listen on socket: %s"
-msgstr ""
+msgstr "konnte Socket nicht zum Empfang einrichten: %s"
-#: network.c:486
+#: network.c:517
#, c-format
msgid "failed to create TFTP socket: %s"
-msgstr ""
+msgstr "konnte TFTP-Socket nicht erzeugen: %s"
-#: network.c:680
+#: network.c:711
#, c-format
msgid "failed to bind server socket for %s: %s"
-msgstr ""
+msgstr "konnte nicht an Server-Socket für %s binden: %s"
-#: network.c:717
+#: network.c:748
#, c-format
msgid "ignoring nameserver %s - local interface"
-msgstr ""
+msgstr "ignoriere Namensserver %s - lokale Schnittstelle"
-#: network.c:728
+#: network.c:759
#, c-format
msgid "ignoring nameserver %s - cannot make/bind socket: %s"
-msgstr ""
+msgstr "ignoriere Namensserver %s - kann Socket nicht erzeugen/binden: %s"
-#: network.c:743
+# FIXME: this isn't translatable - always provide full strings, do not assemble yourself! -- MA
+#: network.c:776
msgid "unqualified"
msgstr ""
-#: network.c:743
+#: network.c:776
msgid "names"
msgstr ""
-#: network.c:745
+#: network.c:778
msgid "default"
msgstr ""
-#: network.c:747
+#: network.c:780
msgid "domain"
msgstr ""
-#: network.c:750
+#: network.c:783
#, c-format
msgid "using local addresses only for %s %s"
msgstr ""
-#: network.c:752
+#: network.c:785
+#, c-format
+msgid "using standard nameservers for %s %s"
+msgstr ""
+
+#: network.c:787
#, c-format
msgid "using nameserver %s#%d for %s %s"
msgstr ""
-#: network.c:755
+#: network.c:790
#, c-format
msgid "using nameserver %s#%d(via %s)"
msgstr ""
-#: network.c:757
+#: network.c:792
#, c-format
msgid "using nameserver %s#%d"
msgstr ""
-#: dnsmasq.c:146
+#: dnsmasq.c:145
msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
-msgstr ""
+msgstr "TFTP-Server nicht verfügbar, setzen Sie HAVE_TFTP in src/config.h"
-#: dnsmasq.c:151
+#: dnsmasq.c:150
msgid "asychronous logging is not available under Solaris"
-msgstr ""
+msgstr "asynchrone Protokollierung unter Solaris nicht verfügbar"
-#: dnsmasq.c:170
+#: dnsmasq.c:169
#, c-format
msgid "failed to find list of interfaces: %s"
-msgstr ""
+msgstr "konnte Schnitstellenliste nicht beziehen: %s"
-#: dnsmasq.c:178
+#: dnsmasq.c:177
#, c-format
msgid "unknown interface %s"
-msgstr ""
+msgstr "unbekannte Schnittstelle %s"
-#: dnsmasq.c:184
+#: dnsmasq.c:183
#, c-format
msgid "no interface with address %s"
-msgstr ""
+msgstr "keine Schnittstelle mit Adresse %s"
-#: dnsmasq.c:201 dnsmasq.c:670
+#: dnsmasq.c:200 dnsmasq.c:671
#, c-format
msgid "DBus error: %s"
-msgstr ""
+msgstr "DBus-Fehler: %s"
-#: dnsmasq.c:204
+#: dnsmasq.c:203
msgid "DBus not available: set HAVE_DBUS in src/config.h"
-msgstr ""
+msgstr "DBus nicht verfügbar: setzen Sie HAVE_DBUS in src/config.h"
-#: dnsmasq.c:230
+#: dnsmasq.c:229
#, c-format
msgid "unknown user or group: %s"
-msgstr ""
+msgstr "Unbekannter Benutzer oder Gruppe: %s"
-#: dnsmasq.c:287
+#: dnsmasq.c:284
#, c-format
msgid "cannot chdir to filesystem root: %s"
-msgstr ""
+msgstr "kann nicht ins Wurzelverzeichnis des Dateisystems wechseln: %s"
+# FIXME: this and the next would need commas after the version
#: dnsmasq.c:448
#, c-format
msgid "started, version %s DNS disabled"
-msgstr ""
+msgstr "gestartet, Version %s, DNS abgeschaltet"
#: dnsmasq.c:450
#, c-format
msgid "started, version %s cachesize %d"
-msgstr ""
+msgstr "gestartet, Version %s, Cachegröße %d"
#: dnsmasq.c:452
#, c-format
@@ -981,61 +1004,61 @@ msgstr ""
#: dnsmasq.c:454
#, c-format
msgid "compile time options: %s"
-msgstr ""
+msgstr "Ãœbersetzungsoptionen: %s"
#: dnsmasq.c:460
msgid "DBus support enabled: connected to system bus"
-msgstr ""
+msgstr "DBus-Unterstützung eingeschaltet: mit Systembus verbunden"
#: dnsmasq.c:462
msgid "DBus support enabled: bus connection pending"
-msgstr ""
+msgstr "DBus-Unterstützung eingeschaltet: warte auf Systembus-Verbindung"
#: dnsmasq.c:467
#, c-format
msgid "warning: failed to change owner of %s: %s"
-msgstr ""
+msgstr "Warnung: konnte den Besitzer von %s nicht ändern: %s"
#: dnsmasq.c:471
msgid "setting --bind-interfaces option because of OS limitations"
-msgstr ""
+msgstr "Aktiviere --bind-interfaces wegen Einschränkungen des Betriebssystems"
#: dnsmasq.c:476
#, c-format
msgid "warning: interface %s does not currently exist"
-msgstr ""
+msgstr "Warnung: Schnittstelle %s existiert derzeit nicht"
#: dnsmasq.c:481
msgid "warning: ignoring resolv-file flag because no-resolv is set"
-msgstr ""
+msgstr "Warnung: Ignoriere \"resolv-file\", weil \"no-resolv\" aktiv ist"
#: dnsmasq.c:484
msgid "warning: no upstream servers configured"
-msgstr ""
+msgstr "Warnung: keine vorgelagerten (Upstream) Server konfiguriert"
#: dnsmasq.c:488
#, c-format
msgid "asynchronous logging enabled, queue limit is %d messages"
-msgstr ""
+msgstr "asynchrone Protokollierung eingeschaltet, Warteschlange fasst %d Nachrichten"
#: dnsmasq.c:501
#, c-format
msgid "DHCP, static leases only on %.0s%s, lease time %s"
-msgstr ""
+msgstr "DHCP, nur statische Leases auf %.0s%s, Lease-Zeit %s"
#: dnsmasq.c:503
#, c-format
msgid "DHCP, proxy on subnet %.0s%s%.0s"
-msgstr ""
+msgstr "DHCP, Proxy im Subnetz %.0s%s%.0s"
#: dnsmasq.c:504
#, c-format
msgid "DHCP, IP range %s -- %s, lease time %s"
-msgstr ""
+msgstr "DHCP, IP-Bereich %s - %s, Lease-Zeit %s "
#: dnsmasq.c:519
msgid "root is "
-msgstr ""
+msgstr "FIXME: this and the next few must be full strings to be translatable - do not assemble in code"
#: dnsmasq.c:519
msgid "enabled"
@@ -1048,420 +1071,423 @@ msgstr ""
#: dnsmasq.c:547
#, c-format
msgid "restricting maximum simultaneous TFTP transfers to %d"
-msgstr ""
+msgstr "Begrenze gleichzeitige TFTP-Ãœbertragungen auf maximal %d"
-#: dnsmasq.c:672
+#: dnsmasq.c:673
msgid "connected to system DBus"
-msgstr ""
+msgstr "Mit System-DBus verbunden"
-#: dnsmasq.c:767
+#: dnsmasq.c:768
#, c-format
msgid "cannot fork into background: %s"
-msgstr ""
+msgstr "kann nicht in den Hintergrund abspalten: %s"
-#: dnsmasq.c:770
+#: dnsmasq.c:771
#, c-format
msgid "failed to create helper: %s"
-msgstr ""
+msgstr "kann Helfer nicht erzeugen: %s"
-#: dnsmasq.c:773
+#: dnsmasq.c:774
#, c-format
msgid "setting capabilities failed: %s"
-msgstr ""
+msgstr "kann \"capabilities\" nicht setzen: %s"
-#: dnsmasq.c:777
+#: dnsmasq.c:778
#, c-format
msgid "failed to change user-id to %s: %s"
-msgstr ""
+msgstr "Kann nicht Benutzerrechte %s annehmen: %s"
-#: dnsmasq.c:782
+#: dnsmasq.c:783
#, c-format
msgid "failed to change group-id to %s: %s"
-msgstr ""
+msgstr "Kann nicht Gruppenrechte %s annehmen: %s"
-#: dnsmasq.c:785
+#: dnsmasq.c:786
#, c-format
msgid "failed to open pidfile %s: %s"
-msgstr ""
+msgstr "kann die Prozessidentifikations-(PID)-Datei %s nicht öffnen: %s"
-#: dnsmasq.c:788
+#: dnsmasq.c:789
#, c-format
msgid "cannot open %s: %s"
-msgstr ""
+msgstr "kann %s nicht öffnen: %s"
-#: dnsmasq.c:843
+#: dnsmasq.c:844
#, c-format
msgid "child process killed by signal %d"
-msgstr ""
+msgstr "Tochterprozess durch Signal %d zerstört"
-#: dnsmasq.c:847
+#: dnsmasq.c:848
#, c-format
msgid "child process exited with status %d"
-msgstr ""
+msgstr "Tochterprozess beendete sich mit Status %d"
-#: dnsmasq.c:851
+#: dnsmasq.c:852
#, c-format
msgid "failed to execute %s: %s"
-msgstr ""
+msgstr "konnte %s nicht ausführen: %s"
-#: dnsmasq.c:895
+#: dnsmasq.c:896
msgid "exiting on receipt of SIGTERM"
-msgstr ""
+msgstr "beende nach Empfang von SIGTERM"
-#: dnsmasq.c:913
+#: dnsmasq.c:924
#, c-format
msgid "failed to access %s: %s"
-msgstr ""
+msgstr "konnte auf %s nicht zugreifen: %s"
-#: dnsmasq.c:935
+#: dnsmasq.c:954
#, c-format
msgid "reading %s"
-msgstr ""
+msgstr "lese %s"
-#: dnsmasq.c:946
+#: dnsmasq.c:965
#, c-format
msgid "no servers found in %s, will retry"
-msgstr ""
+msgstr "keine Server in %s gefunden, werde es später neu versuchen"
#: dhcp.c:40
#, c-format
msgid "cannot create DHCP socket: %s"
-msgstr ""
+msgstr "kann DHCP-Socket nicht erzeugen: %s"
#: dhcp.c:52
#, c-format
msgid "failed to set options on DHCP socket: %s"
-msgstr ""
+msgstr "kann Optionen für DHCP-Socket nicht setzen: %s"
#: dhcp.c:65
#, c-format
msgid "failed to set SO_REUSE{ADDR|PORT} on DHCP socket: %s"
-msgstr ""
+msgstr "kann SO_REUSE{ADDR|PORT} für DHCP-Socket nicht aktivieren: %s"
#: dhcp.c:77
#, c-format
msgid "failed to bind DHCP server socket: %s"
-msgstr ""
+msgstr "kann nicht an DHCP-Server-Socket binden: %s"
#: dhcp.c:103
#, c-format
msgid "cannot create ICMP raw socket: %s."
-msgstr ""
+msgstr "kann ICMP-Rohdaten-Socket nicht erzeugen: %s."
-#: dhcp.c:240
+#: dhcp.c:281
#, c-format
msgid "DHCP packet received on %s which has no address"
-msgstr ""
+msgstr "DHCP-Paket ohne Adresse an Schnittstelle %s empfangen"
-#: dhcp.c:404
+#: dhcp.c:445
#, c-format
msgid "DHCP range %s -- %s is not consistent with netmask %s"
-msgstr ""
+msgstr "DHCP-Bereich %s - %s passt nicht zur Netzmaske %s"
-#: dhcp.c:791
+#: dhcp.c:852
#, c-format
msgid "bad line at %s line %d"
-msgstr ""
+msgstr "ungültige Zeile %2$d in Datei %1$s"
-#: dhcp.c:834
+#: dhcp.c:895
#, c-format
msgid "ignoring %s line %d, duplicate name or IP address"
-msgstr ""
+msgstr "ignoriere %s Zeile %d, doppelter Name oder doppelte IP-Adresse"
-#: dhcp.c:916
+#: dhcp.c:977
#, c-format
msgid "duplicate IP address %s in dhcp-config directive."
-msgstr ""
+msgstr "doppelte IP-Adresse %s in \"dhcp-config\"-Anweisung"
-#: dhcp.c:919
+#: dhcp.c:980
#, c-format
msgid "duplicate IP address %s in %s."
-msgstr ""
+msgstr "doppelte IP-Adresse %s in %s."
-#: dhcp.c:962
+#: dhcp.c:1023
#, c-format
msgid "%s has more than one address in hostsfile, using %s for DHCP"
-msgstr ""
+msgstr "%s hat mehr als eine Adresse in hosts-Datei, benutze %s für DHCP"
-#: dhcp.c:967
+#: dhcp.c:1028
#, c-format
msgid "duplicate IP address %s (%s) in dhcp-config directive"
-msgstr ""
+msgstr "doppelte IP-Adresse %s (%s) in \"dhcp-config\"-Anweisung"
-#: lease.c:66
+#: lease.c:67
#, c-format
msgid "cannot open or create lease file %s: %s"
-msgstr ""
+msgstr "kann Lease-Datei %s nicht öffnen: %s"
-#: lease.c:92
+#: lease.c:93
msgid "too many stored leases"
-msgstr ""
+msgstr "zu viele Leases gespeichert"
-#: lease.c:128
+#: lease.c:129
#, c-format
msgid "cannot run lease-init script %s: %s"
-msgstr ""
+msgstr "kann Lease-Start-Skript %s nicht ausführen: %s"
-#: lease.c:134
+#: lease.c:135
#, c-format
msgid "lease-init script returned exit code %s"
-msgstr ""
+msgstr "Lease-Start-Skript beendete sich mit Code %s"
-#: lease.c:234
+# FIXME: This should be %u s also in English according to NIST and SI rules. -- MA
+#: lease.c:235
#, c-format
msgid "failed to write %s: %s (retry in %us)"
-msgstr ""
+msgstr "Konnte %s nicht schreiben: %s (Neuversuch in %u s)"
-#: rfc2131.c:375
+# FIXME: this and the next few are not translatable. Please provide full
+# strings, do not programmatically assemble them.
+#: rfc2131.c:377
#, c-format
msgid "no address range available for DHCP request %s %s"
msgstr ""
-#: rfc2131.c:376
+#: rfc2131.c:378
msgid "with subnet selector"
msgstr ""
-#: rfc2131.c:376
+#: rfc2131.c:378
msgid "via"
msgstr ""
-#: rfc2131.c:391
+#: rfc2131.c:393
#, c-format
-msgid "%u Available DHCP subnet: %s/%s"
-msgstr ""
+msgid "%u available DHCP subnet: %s/%s"
+msgstr "%u verfügbare(s) DHCP-Subnetz: %s/%s"
-#: rfc2131.c:394
+#: rfc2131.c:396
#, c-format
-msgid "%u Available DHCP range: %s -- %s"
-msgstr ""
+msgid "%u available DHCP range: %s -- %s"
+msgstr "%u verfügbare(r) DHCP-Bereich: %s - %s"
-#: rfc2131.c:423
+# FIXME: do not programmatically assemble strings - untranslatable
+#: rfc2131.c:425
msgid "disabled"
msgstr ""
-#: rfc2131.c:457 rfc2131.c:928 rfc2131.c:1277
+#: rfc2131.c:466 rfc2131.c:969 rfc2131.c:1335
msgid "ignored"
msgstr ""
-#: rfc2131.c:472 rfc2131.c:1145
+#: rfc2131.c:481 rfc2131.c:1183
msgid "address in use"
msgstr ""
-#: rfc2131.c:486 rfc2131.c:982
+#: rfc2131.c:495 rfc2131.c:1023
msgid "no address available"
msgstr ""
-#: rfc2131.c:493 rfc2131.c:1108
+#: rfc2131.c:502 rfc2131.c:1146
msgid "wrong network"
msgstr ""
-#: rfc2131.c:506
+#: rfc2131.c:516
msgid "no address configured"
msgstr ""
-#: rfc2131.c:512 rfc2131.c:1158
+#: rfc2131.c:522 rfc2131.c:1196
msgid "no leases left"
msgstr ""
-#: rfc2131.c:597
+#: rfc2131.c:607
#, c-format
msgid "%u client provides name: %s"
-msgstr ""
+msgstr "%u Klient stellt Name bereit: %s"
-#: rfc2131.c:741
+#: rfc2131.c:762
#, c-format
-msgid "%u Vendor class: %s"
-msgstr ""
+msgid "%u vendor class: %s"
+msgstr "%u \"Vendor class\": %s"
-#: rfc2131.c:743
+#: rfc2131.c:764
#, c-format
-msgid "%u User class: %s"
-msgstr ""
+msgid "%u user class: %s"
+msgstr "%u Benutzerklasse: %s"
-#: rfc2131.c:782
+#: rfc2131.c:823
msgid "PXE BIS not supported"
-msgstr ""
+msgstr "PXE BIS nicht unterstützt"
-#: rfc2131.c:898
+#: rfc2131.c:939
#, c-format
msgid "disabling DHCP static address %s for %s"
-msgstr ""
+msgstr "schalte statische DHCP-Adresse %s für %s ab"
-#: rfc2131.c:919
+# FIXME: do not assemble
+#: rfc2131.c:960
msgid "unknown lease"
msgstr ""
-#: rfc2131.c:951
+#: rfc2131.c:992
#, c-format
msgid "not using configured address %s because it is leased to %s"
-msgstr ""
+msgstr "benutze konfigurierte Adresse %s nicht, weil sie an %s verleast ist"
-#: rfc2131.c:961
+#: rfc2131.c:1002
#, c-format
msgid "not using configured address %s because it is in use by the server or relay"
-msgstr ""
+msgstr "benutze konfigurierte Adresse %s nicht, weil sie von Server/Relais verwendet wird"
-#: rfc2131.c:964
+#: rfc2131.c:1005
#, c-format
msgid "not using configured address %s because it was previously declined"
-msgstr ""
+msgstr "benutze konfigurierte Adresse %s nicht, weil sie zuvor abgelehnt wurde"
-#: rfc2131.c:980 rfc2131.c:1151
+# FIXME: do not assemble
+#: rfc2131.c:1021 rfc2131.c:1189
msgid "no unique-id"
msgstr ""
-#: rfc2131.c:1048
+#: rfc2131.c:1090
msgid "wrong server-ID"
msgstr ""
-#: rfc2131.c:1067
+#: rfc2131.c:1108
msgid "wrong address"
msgstr ""
-#: rfc2131.c:1084
+#: rfc2131.c:1121
msgid "lease not found"
msgstr ""
-#: rfc2131.c:1116
+#: rfc2131.c:1154
msgid "address not available"
msgstr ""
-#: rfc2131.c:1127
+#: rfc2131.c:1165
msgid "static lease available"
msgstr ""
-#: rfc2131.c:1131
+#: rfc2131.c:1169
msgid "address reserved"
msgstr ""
-#: rfc2131.c:1139
+#: rfc2131.c:1177
#, c-format
msgid "abandoning lease to %s of %s"
-msgstr ""
+msgstr "Gebe Lease von %2$s an %1$s auf"
-#: rfc2131.c:1698
+#: rfc2131.c:1757
#, c-format
msgid "%u tags: %s"
-msgstr ""
+msgstr "%u Marken: %s"
-#: rfc2131.c:1711
+#: rfc2131.c:1770
#, c-format
msgid "%u bootfile name: %s"
-msgstr ""
+msgstr "%u Name der Bootdatei: %s"
-#: rfc2131.c:1720
+#: rfc2131.c:1779
#, c-format
msgid "%u server name: %s"
-msgstr ""
+msgstr "%u Servername: %s"
-#: rfc2131.c:1728
+#: rfc2131.c:1793
#, c-format
msgid "%u next server: %s"
-msgstr ""
+msgstr "%u nächster Server: %s"
+
+#: rfc2131.c:1796
+#, c-format
+msgid "%u broadcast response"
+msgstr "%u Antwort per Rundsendung"
-#: rfc2131.c:1795
+#: rfc2131.c:1859
#, c-format
msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
-msgstr ""
+msgstr "kann DHCP/BOOTP-Opition %d nicht setzen: kein Platz mehr im Paket"
-#: rfc2131.c:2032
+#: rfc2131.c:2105
msgid "PXE menu too large"
-msgstr ""
+msgstr "PXE-Menüeintrag zu groß"
-#: rfc2131.c:2143
+#: rfc2131.c:2218
#, c-format
msgid "Ignoring domain %s for DHCP host name %s"
-msgstr ""
+msgstr "Ignoriere Domäne %s für DHCP-Hostnamen %s"
-#: rfc2131.c:2161
+#: rfc2131.c:2236
#, c-format
msgid "%u requested options: %s"
-msgstr ""
+msgstr "%u angeforderte Optionen: %s"
-#: rfc2131.c:2425
+#: rfc2131.c:2503
#, c-format
msgid "cannot send RFC3925 option: too many options for enterprise number %d"
-msgstr ""
+msgstr "Kann RFC3925-Option nicht senden: zu viele Optionen für Unternehmen Nr. %d"
#: netlink.c:66
#, c-format
msgid "cannot create netlink socket: %s"
-msgstr ""
+msgstr "kann Netlink-Socket nicht erzeugen: %s"
#: netlink.c:265
#, c-format
msgid "netlink returns error: %s"
-msgstr ""
+msgstr "Netlink liefert Fehler %s"
#: dbus.c:150
msgid "attempt to set an IPv6 server address via DBus - no IPv6 support"
-msgstr ""
+msgstr "Versuch, via DBus eine IPv6-Serveradresse zu setzen: keine IPv6-Unterstützung"
#: dbus.c:286
msgid "setting upstream servers from DBus"
-msgstr ""
+msgstr "vorgelagerte Server von DBus gesetzt"
#: dbus.c:324
msgid "could not register a DBus message handler"
-msgstr ""
+msgstr "konnte Steuerungsprogramm für DBus-Nachrichten nicht anmelden"
#: bpf.c:150
#, c-format
msgid "cannot create DHCP BPF socket: %s"
-msgstr ""
+msgstr "konnte DHCP-BPF-Socket nicht einrichten: %s"
#: bpf.c:178
#, c-format
msgid "DHCP request for unsupported hardware type (%d) received on %s"
-msgstr ""
+msgstr "DHCP-Anfrage für nicht unterstützen Hardwaretyp (%d) auf %s empfangen"
-#: tftp.c:179
+#: tftp.c:233
msgid "unable to get free port for TFTP"
-msgstr ""
+msgstr "konnte keinen freien Port für TFTP bekommen"
-#: tftp.c:194
+#: tftp.c:248
#, c-format
msgid "unsupported request from %s"
-msgstr ""
+msgstr "nicht unterstützte Anfrage von %s"
-#: tftp.c:282
+#: tftp.c:336
#, c-format
msgid "sent %s to %s"
-msgstr ""
+msgstr "%s an %s verschickt"
-#: tftp.c:305
+#: tftp.c:359
#, c-format
msgid "file %s not found"
-msgstr ""
+msgstr "Datei %s nicht gefunden"
-#: tftp.c:416
+#: tftp.c:470
#, c-format
msgid "error %d %s received from %s"
-msgstr ""
+msgstr "Fehler %d %s von %s empfangen"
-#: tftp.c:447
+#: tftp.c:501
#, c-format
msgid "failed sending %s to %s"
-msgstr ""
+msgstr "konnte %s nicht an %s senden"
-#: log.c:169
+#: log.c:173
#, c-format
msgid "overflow: %d log entries lost"
-msgstr ""
+msgstr "Überlauf: %d Protokolleinträge verloren"
-#: log.c:246
+#: log.c:250
#, c-format
msgid "log failed: %s"
-msgstr ""
+msgstr "Protokollierung fehlgeschlagen: %s"
-# @Simon: I would like to have an example :) - instead of "von" it would be possible to use "aus",
-# @Simon: both translate to "of" and nothing else, but depending on the sense one could be better
-# @Simon: than the other.
-#: log.c:420
+#: log.c:431
msgid "FAILED to start up"
-msgstr "Start gescheitert"
-
-# @Simon: Here I need an example to understand it :)
-#, fuzzy
-#~ msgid "read %s - %d hosts"
-#~ msgstr "lese %s - %d Adressen"
+msgstr "Start fehlgeschlagen"
diff --git a/po/es.po b/po/es.po
index 30eea7c..7ae1984 100644
--- a/po/es.po
+++ b/po/es.po
@@ -20,17 +20,17 @@ msgstr ""
msgid "failed to load names from %s: %s"
msgstr "no se pudo cargar nombres desde %s: %s"
-#: cache.c:798 dhcp.c:804
+#: cache.c:798 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:820
+#: cache.c:856 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:894
+#: cache.c:863 dhcp.c:955
#, c-format
msgid "read %s - %d addresses"
msgstr "direcciónes %s - %d leídas"
@@ -39,32 +39,37 @@ msgstr "direcciónes %s - %d leídas"
msgid "cleared cache"
msgstr "el caché fue liberado"
-#: cache.c:933 option.c:1069
+#: cache.c:933 option.c:1103
#, fuzzy, c-format
msgid "cannot access directory %s: %s"
msgstr "no se puede accesar directorio %s: %s"
-#: cache.c:1052
+#: cache.c:1053
+#, 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
#, 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:1129
+#: cache.c:1132
#, c-format
msgid "time %lu"
msgstr "tiempo %lu"
-#: cache.c:1130
+#: cache.c:1133
#, 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:1132
+#: cache.c:1135
#, c-format
msgid "queries forwarded %u, queries answered locally %u"
msgstr "búsquedas reenviadas %u, búsquedas respondidas localmente %u"
-#: cache.c:1155
+#: cache.c:1158
#, 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"
@@ -79,7 +84,7 @@ msgstr "no se pudo crear valor semilla para el generador de números aleatorios:
msgid "failed to allocate memory"
msgstr "no se pudo asignar memoria"
-#: util.c:229 option.c:549
+#: util.c:229 option.c:567
msgid "could not get memory"
msgstr "no se pudo adquirir memoria"
@@ -98,430 +103,457 @@ msgstr "no se pudo asignar %d bytes"
msgid "infinite"
msgstr "infinito"
-#: option.c:228
+#: option.c:240
msgid "Specify local address(es) to listen on."
msgstr "Especificar dirección(es) locales dónde escuchar."
-#: option.c:229
+#: option.c:241
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:230
+#: option.c:242
msgid "Fake reverse lookups for RFC1918 private address ranges."
msgstr "Falsificar búsquedas reversas para rangos de dirección privados RFC1918."
-#: option.c:231
+#: option.c:243
msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
msgstr "Tratar ipaddr (dirección IP) como NXDOMAIN (derrota comodín Verisign)."
-#: option.c:232
+#: option.c:244
#, 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:233
+#: option.c:245
#, c-format
msgid "Specify configuration file (defaults to %s)."
msgstr "Especificar archivo de configuración (%s por predeterminado)."
-#: option.c:234
+#: option.c:246
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:235
+#: option.c:247
msgid "Do NOT forward queries with no domain part."
msgstr "NO reenviar búsquedas sin parte de dominio."
-#: option.c:236
+#: option.c:248
msgid "Return self-pointing MX records for local hosts."
msgstr "Retornar expedientes MX auto-señaladores para hosts locales."
-#: option.c:237
+#: option.c:249
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:238
+#: option.c:250
msgid "Don't forward spurious DNS requests from Windows hosts."
msgstr "No reenviar pedidos DNS falsos desde máquinas Windows."
-#: option.c:239
+#: option.c:251
msgid "Enable DHCP in the range given with lease duration."
msgstr "Habilitar DHCP dentro del rango brindado con duración del arriendo."
-#: option.c:240
+#: option.c:252
#, 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:241
+#: option.c:253
msgid "Set address or hostname for a specified machine."
msgstr "Fijar dirección o nombre de host para una máquina especificada."
-#: option.c:242
-msgid "Read DHCP host specs from file"
+#: option.c:254
+#, fuzzy
+msgid "Read DHCP host specs from file."
msgstr "Leer especificaciones DHCP de host desde archivo"
-#: option.c:243
-msgid "Read DHCP option specs from file"
+#: option.c:255
+#, fuzzy
+msgid "Read DHCP option specs from file."
msgstr "Leer opciones DHCP de host desde archivo"
-#: option.c:244
+#: option.c:256
+msgid "Evaluate conditional tag expression."
+msgstr "Evaluar expresión condicional de etiqueta."
+
+#: option.c:257
#, c-format
msgid "Do NOT load %s file."
msgstr "NO cargar archivo %s."
-#: option.c:245
+#: option.c:258
#, 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:246
+#: option.c:259
msgid "Specify interface(s) to listen on."
msgstr "Especificar interface(s) donde escuchar."
-#: option.c:247
+#: option.c:260
msgid "Specify interface(s) NOT to listen on."
msgstr "Especificar interface(s) donde NO escuchar."
-#: option.c:248
+#: option.c:261
#, fuzzy
msgid "Map DHCP user class to tag."
msgstr "Trazar clase de usuario DHCP a etiqueta."
-#: option.c:249
+#: option.c:262
msgid "Map RFC3046 circuit-id to tag."
msgstr "Trazar circuit-id (identificación de circuito) RFC3046 a etiqueta."
-#: option.c:250
+#: option.c:263
msgid "Map RFC3046 remote-id to tag."
msgstr "Trazar remote-id (identificación remota) RFC3046 a etiqueta."
-#: option.c:251
+#: option.c:264
msgid "Map RFC3993 subscriber-id to tag."
msgstr "Trazar subscriber-id (identificación de suscritor) RFC3993 a etiqueta."
-#: option.c:252
+#: option.c:265
#, fuzzy
msgid "Don't do DHCP for hosts with tag set."
msgstr "No hacer DHCP para hosts con etiqueta fijada."
-#: option.c:253
+#: option.c:266
#, fuzzy
msgid "Force broadcast replies for hosts with tag set."
msgstr "Forzar respuestas broadcast para hosts con etiqueta fijada."
-#: option.c:254
+#: option.c:267
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:255
+#: option.c:268
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:256
+#: option.c:269
#, c-format
msgid "Specify where to store DHCP leases (defaults to %s)."
msgstr "Especificar donde almacenar arriendos DHCP (%s por predeterminado)."
-#: option.c:257
+#: option.c:270
msgid "Return MX records for local hosts."
msgstr "Retornar expedientes MX para hosts locales."
-#: option.c:258
+#: option.c:271
msgid "Specify an MX record."
msgstr "Especificar un expediente MX."
-#: option.c:259
+#: option.c:272
msgid "Specify BOOTP options to DHCP server."
msgstr "Especificar opciones BOOTP a servidor DHCP."
-#: option.c:260
+#: option.c:273
#, 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:261
+#: option.c:274
msgid "Do NOT cache failed search results."
msgstr "NO almacenar en caché resultados de búsquedas fallidas."
-#: option.c:262
+#: option.c:275
#, 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:263
+#: option.c:276
#, fuzzy
msgid "Specify options to be sent to DHCP clients."
msgstr "Especificar opciones para ser enviadas a clientes DHCP."
-#: option.c:264
+#: option.c:277
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:265
+#: option.c:278
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:266
+#: option.c:279
#, 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:267
+#: option.c:280
#, fuzzy
msgid "Log DNS queries."
msgstr "Bitacorear búsquedas DNS."
-#: option.c:268
+#: option.c:281
#, fuzzy
msgid "Force the originating port for upstream DNS queries."
msgstr "Enforzar el puerto original para búsquedas DNS upstream."
-#: option.c:269
+#: option.c:282
msgid "Do NOT read resolv.conf."
msgstr "NO leer resolv.conf."
-#: option.c:270
+#: option.c:283
#, c-format
msgid "Specify path to resolv.conf (defaults to %s)."
msgstr "Especificar el path hacia resolv.conf (%s por predeterminado)."
-#: option.c:271
+#: option.c:284
msgid "Specify address(es) of upstream servers with optional domains."
msgstr "Especificar dirección(es) de servidores upstream con dominios opcionales."
-#: option.c:272
+#: option.c:285
msgid "Never forward queries to specified domains."
msgstr "Nunca reenviar búsquedas a dominios especificados."
-#: option.c:273
+#: option.c:286
msgid "Specify the domain to be assigned in DHCP leases."
msgstr "Especificar el dominio para ser asignado en arriendos DHCP."
-#: option.c:274
+#: option.c:287
msgid "Specify default target in an MX record."
msgstr "Especificar destino predeterminado en un expediente MX."
-#: option.c:275
+#: option.c:288
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:276
+#: option.c:289
#, fuzzy
msgid "Specify time-to-live in seconds for negative caching."
msgstr "Especificar tiempo de vida en segundos para caché negativo."
-#: option.c:277
+#: option.c:290
+#, 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
#, 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:278
+#: option.c:292
#, fuzzy
msgid "Map DHCP vendor class to tag."
msgstr "Trazar clase de vendedor DHCP a etiqueta."
-#: option.c:279
+#: option.c:293
msgid "Display dnsmasq version and copyright information."
msgstr "Mostrar información sobre la versión y copyright de dnsmasq."
-#: option.c:280
+#: option.c:294
msgid "Translate IPv4 addresses from upstream servers."
msgstr "Traducir direcciones IPv4 desde servidores upstream."
-#: option.c:281
+#: option.c:295
msgid "Specify a SRV record."
msgstr "Especificar un expediente SRV."
-#: option.c:282
+#: option.c:296
msgid "Display this message. Use --help dhcp for known DHCP options."
msgstr "Mostrar este mensaje. Usar --help dhcp para opciones DHCP conocidas."
-#: option.c:283
+#: option.c:297
#, fuzzy, c-format
msgid "Specify path of PID file (defaults to %s)."
msgstr "Especificar path de archivo PID (%s por predeterminado)."
-#: option.c:284
+#: option.c:298
#, 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:285
+#: option.c:299
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:286
+#: option.c:300
msgid "Specify TXT DNS record."
msgstr "Especificar expediente DNS TXT."
-#: option.c:287
+#: option.c:301
#, fuzzy
msgid "Specify PTR DNS record."
msgstr "Especificar expediente DNS PTR."
-#: option.c:288
+#: option.c:302
msgid "Give DNS name to IPv4 address of interface."
msgstr "Otorgar nombre DNS a dirección IPv4 de interface."
-#: option.c:289
+#: option.c:303
msgid "Bind only to interfaces in use."
msgstr "Acoplar solo a interfaces en uso."
-#: option.c:290
+#: option.c:304
#, c-format
msgid "Read DHCP static host information from %s."
msgstr "Leer información sobre hosts DHCP estáticos desde %s."
-#: option.c:291
+#: option.c:305
msgid "Enable the DBus interface for setting upstream servers, etc."
msgstr "Habilitar la interface DBus para fijar servidores upstream, etc."
-#: option.c:292
+#: option.c:306
msgid "Do not provide DHCP on this interface, only provide DNS."
msgstr "No proveer DHCP en esta interface, sólo proveer DNS."
-#: option.c:293
+#: option.c:307
msgid "Enable dynamic address allocation for bootp."
msgstr "Habilitar alocación dinámica de direcciónes para BOOTP."
-#: option.c:294
+#: option.c:308
#, fuzzy
msgid "Map MAC address (with wildcards) to option set."
msgstr "Trazar dirección MAC (con comodínes) a opción fijada."
-#: option.c:295
+#: option.c:309
msgid "Treat DHCP requests on aliases as arriving from interface."
msgstr "Tratar pedidos DHCP en alias como si llegaran de la interface."
-#: option.c:296
+#: option.c:310
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:297
+#: option.c:311
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:298
+#: option.c:312
msgid "Read configuration from all the files in this directory."
msgstr "Leer configuración desde todos los archivos en este directorio."
-#: option.c:299
+#: option.c:313
#, 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:300
+#: option.c:314
msgid "Do not use leasefile."
msgstr "No usar archivo de arriendos."
-#: option.c:301
+#: option.c:315
#, 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:302
+#: option.c:316
#, c-format
msgid "Clear DNS cache when reloading %s."
msgstr "Liberar caché DNS al recargar %s."
-#: option.c:303
+#: option.c:317
msgid "Ignore hostnames provided by DHCP clients."
msgstr "Ignorar nombres de host brindados por clientes DHCP."
-#: option.c:304
+#: option.c:318
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:305
+#: option.c:319
msgid "Enable integrated read-only TFTP server."
msgstr "Habilitar servidor integrado TFTP solo-lectura."
-#: option.c:306
+#: option.c:320
msgid "Export files by TFTP only from the specified subtree."
msgstr "Exportar archivos vía TFTP solo del sub-árbol especificado."
-#: option.c:307
+#: option.c:321
msgid "Add client IP address to tftp-root."
msgstr "Agregar IP de cliente a tftp-root."
-#: option.c:308
+#: option.c:322
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:309
+#: option.c:323
#, 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:310
+#: option.c:324
msgid "Disable the TFTP blocksize extension."
msgstr "Deshabilitar la extensión TFTP blocksize (tamaño de bloque)."
-#: option.c:311
+#: option.c:325
msgid "Ephemeral port range for use by TFTP transfers."
msgstr "Rango de puertos efímeros para ser usados por transferencias TFTP."
-#: option.c:312
+#: option.c:326
msgid "Extra logging for DHCP."
msgstr "Bitacoreo extra para DHCP."
-#: option.c:313
+#: option.c:327
msgid "Enable async. logging; optionally set queue length."
msgstr "Habilitar bitacoreo asincrónico; opcionalmente fijar tamaño de cola."
-#: option.c:314
+#: option.c:328
msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
msgstr "Detener revinculación DNS. Filtrar rangos de IP privados al resolver."
-#: option.c:315
+#: option.c:329
+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
+msgid "Inhibit DNS-rebind protection on this domain."
+msgstr "Inhibir protección de revinculación DNS en este dominio."
+
+#: option.c:331
msgid "Always perform DNS queries to all servers."
msgstr "Siempre realizar búsquedas DNS a todos los servidores."
-#: option.c:316
+#: option.c:332
#, fuzzy
msgid "Set tag if client includes matching option in request."
msgstr "Fijar etiqueta si cliente incluye opción coincidente en pedido."
-#: option.c:317
+#: option.c:333
msgid "Use alternative ports for DHCP."
msgstr "Usar puertos alternativos para DHCP."
-#: option.c:318
+#: option.c:334
msgid "Run lease-change script as this user."
msgstr "Correr archivo guión de cambio de arriendos como este usuario."
-#: option.c:319
+#: option.c:335
#, fuzzy
msgid "Specify NAPTR DNS record."
msgstr "Especificar expediente DNS NAPTR."
-#: option.c:320
+#: option.c:336
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:321
+#: option.c:337
msgid "Use only fully qualified domain names for DHCP clients."
msgstr "Usar solo nombres de dominio completamente calificados para clientes DHCP."
-#: option.c:322
+#: option.c:338
+msgid "Generate hostnames based on MAC address for nameless clients."
+msgstr "Generar hostnames basados en direcciones MAC para clientes sin nombre."
+
+#: option.c:339
+msgid "Use these DHCP relays as full proxies."
+msgstr "Usar estos relays DHCP como proxies completos."
+
+#: option.c:340
msgid "Specify alias name for LOCAL DNS name."
msgstr "Especificar nombre alias para nombre DNS LOCAL."
-#: option.c:323
+#: option.c:341
#, fuzzy
msgid "Prompt to send to PXE clients."
msgstr "Aviso a ser enviado a clientes PXE."
-#: option.c:324
+#: option.c:342
msgid "Boot service for PXE menu."
msgstr "Servico boot para menú PXE."
-#: option.c:325
+#: option.c:343
msgid "Check configuration syntax."
msgstr "Revisar sintaxis de configuración."
-#: option.c:614
+#: option.c:632
#, c-format
msgid ""
"Usage: dnsmasq [options]\n"
@@ -530,225 +562,235 @@ msgstr ""
"Modo de uso: dnsmasq [opciones]\n"
"\n"
-#: option.c:616
+#: option.c:634
#, 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:618
+#: option.c:636
#, fuzzy, c-format
msgid "Valid options are:\n"
msgstr "Opciones válidas son :\n"
-#: option.c:659
+#: option.c:677
#, c-format
msgid "Known DHCP options:\n"
msgstr "Opciones DHCP conocidas:\n"
-#: option.c:747
+#: option.c:781
msgid "bad dhcp-option"
msgstr "opción dhcp-option errónea"
-#: option.c:804
+#: option.c:838
#, fuzzy
msgid "bad IP address"
msgstr "dirección IP errónea"
-#: option.c:903
+#: option.c:937
msgid "bad domain in dhcp-option"
msgstr "dominio erróneo en dhcp-option"
-#: option.c:964
+#: option.c:998
msgid "dhcp-option too long"
msgstr "opción dhcp-option demasiado larga"
-#: option.c:973
+#: option.c:1007
msgid "illegal dhcp-match"
msgstr "dhcp-match ilegal"
-#: option.c:1009
+#: option.c:1043
msgid "illegal repeated flag"
msgstr "opción repetida ilegal"
-#: option.c:1017
+#: option.c:1051
msgid "illegal repeated keyword"
msgstr "palabra clave repetida ilegal"
-#: option.c:1100 tftp.c:359
+#: option.c:1134 tftp.c:413
#, fuzzy, c-format
msgid "cannot access %s: %s"
msgstr "no se puede accesar %s: %s"
-#: option.c:1145
+#: option.c:1179
#, fuzzy
msgid "only one dhcp-hostsfile allowed"
msgstr "solo un dhcp-hostsfile permitido"
-#: option.c:1152
+#: option.c:1186
#, fuzzy
msgid "only one dhcp-optsfile allowed"
msgstr "solo un dhcp-optsfile permitido"
-#: option.c:1197
+#: option.c:1231
msgid "bad MX preference"
msgstr "preferencia MX errónea"
-#: option.c:1202
+#: option.c:1236
msgid "bad MX name"
msgstr "nombre MX erróneo"
-#: option.c:1216
+#: option.c:1250
msgid "bad MX target"
msgstr "destino MX erróneo"
-#: option.c:1226
+#: option.c:1260
msgid "cannot run scripts under uClinux"
msgstr "no se pueden correr archivos guiónes bajo uClinux"
-#: option.c:1228
+#: option.c:1262
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:1456 option.c:1460
+#: option.c:1507 option.c:1511
msgid "bad port"
msgstr "puerto erróneo"
-#: option.c:1479 option.c:1504
+#: option.c:1530 option.c:1555
msgid "interface binding not supported"
msgstr "vinculación de interface no está soportado"
-#: option.c:1625
+#: option.c:1701
#, fuzzy
msgid "bad port range"
msgstr "rango de puertos erróneo"
-#: option.c:1642
+#: option.c:1718
msgid "bad bridge-interface"
msgstr "opción bridge-interface (interface puente) errónea"
-#: option.c:1683
+#: option.c:1760
msgid "bad dhcp-range"
msgstr "opción dhcp-range (rango DHCP) errónea"
-#: option.c:1709
-msgid "only one netid tag allowed"
-msgstr "solo una etiqueta netid permitida"
+#: option.c:1788
+msgid "only one tag allowed"
+msgstr "solo una etiqueta permitida"
-#: option.c:1754
+#: option.c:1835
msgid "inconsistent DHCP range"
msgstr "rango DHCP inconsistente"
-#: option.c:1926
+#: option.c:2010
#, fuzzy
msgid "bad DHCP host name"
msgstr "nombre de host DHCP erróneo"
-#: option.c:2221 option.c:2501
+#: option.c:2091
+#, fuzzy
+msgid "bad tag-if"
+msgstr "destino MX erróneo"
+
+#: option.c:2365 option.c:2664
msgid "invalid port number"
msgstr "número de puerto inválido"
-#: option.c:2304
+#: option.c:2427
+#, fuzzy
+msgid "bad dhcp-proxy address"
+msgstr "dirección IP errónea"
+
+#: option.c:2467
#, fuzzy
msgid "invalid alias range"
msgstr "rango alias inválido"
-#: option.c:2317
+#: option.c:2480
#, fuzzy
msgid "bad interface name"
msgstr "nombre de interface erróneo"
-#: option.c:2342
+#: option.c:2505
msgid "bad CNAME"
msgstr "CNAME erróneo"
-#: option.c:2347
+#: option.c:2510
msgid "duplicate CNAME"
msgstr "CNAME duplicado"
-#: option.c:2367
+#: option.c:2530
#, fuzzy
msgid "bad PTR record"
msgstr "expediente PTR erróneo"
-#: option.c:2398
+#: option.c:2561
#, fuzzy
msgid "bad NAPTR record"
msgstr "expediente NAPTR erróneo"
-#: option.c:2423
+#: option.c:2586
msgid "TXT record string too long"
msgstr "expediente TXT demasiado largo"
-#: option.c:2471
+#: option.c:2634
msgid "bad TXT record"
msgstr "expediente TXT erróneo"
-#: option.c:2487
+#: option.c:2650
msgid "bad SRV record"
msgstr "expediente SRV erróneo"
-#: option.c:2494
+#: option.c:2657
msgid "bad SRV target"
msgstr "destino SRV erróneo"
-#: option.c:2508
+#: option.c:2671
msgid "invalid priority"
msgstr "prioridad inválida"
-#: option.c:2515
+#: option.c:2678
msgid "invalid weight"
msgstr "peso inválido"
-#: option.c:2534
+#: option.c:2697
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:2577
+#: option.c:2739
#, c-format
msgid "files nested too deep in %s"
msgstr "archivos jerarquizados demasiado profundo en %s"
-#: option.c:2585 tftp.c:513
+#: option.c:2747 tftp.c:567
#, c-format
msgid "cannot read %s: %s"
msgstr "no se puede leer %s: %s"
-#: option.c:2646
+#: option.c:2804
msgid "missing \""
msgstr "falta \""
-#: option.c:2693
+#: option.c:2863
msgid "bad option"
msgstr "opción errónea"
-#: option.c:2695
+#: option.c:2865
msgid "extraneous parameter"
msgstr "parámetro extraño"
-#: option.c:2697
+#: option.c:2867
msgid "missing parameter"
msgstr "parámetro ausente"
-#: option.c:2705
+#: option.c:2871
msgid "error"
msgstr "error"
-#: option.c:2711
+#: option.c:2876
#, c-format
msgid "%s at line %d of %%s"
msgstr "%s en línea %d de %%s"
-#: option.c:2760 option.c:2791
+#: option.c:2933 option.c:2964
#, fuzzy, c-format
msgid "read %s"
msgstr "leyendo %s"
-#: option.c:2863
+#: option.c:3036
#, c-format
msgid "Dnsmasq version %s %s\n"
msgstr "Dnsmasq versión %s %s\n"
-#: option.c:2864
+#: option.c:3037
#, c-format
msgid ""
"Compile time options %s\n"
@@ -757,195 +799,201 @@ msgstr ""
"Opciones de compilación %s\n"
"\n"
-#: option.c:2865
+#: option.c:3038
#, c-format
msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
msgstr "Este software viene SIN NINGUNA GARANTIA.\n"
-#: option.c:2866
+#: option.c:3039
#, 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:2867
+#: option.c:3040
#, 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:2878
+#: option.c:3051
msgid "try --help"
msgstr "pruebe --help"
-#: option.c:2880
+#: option.c:3053
msgid "try -w"
msgstr "pruebe -w"
-#: option.c:2883
+#: option.c:3056
#, fuzzy, c-format
msgid "bad command line options: %s"
msgstr "opciones de línea de comandos erróneas: %s"
-#: option.c:2924
+#: option.c:3097
#, c-format
msgid "cannot get host-name: %s"
msgstr "no se puede obtener host-name (nombre de host): %s"
-#: option.c:2952
+#: option.c:3125
msgid "only one resolv.conf file allowed in no-poll mode."
msgstr "solo un archivo resolv.conf permitido en modo no-poll."
-#: option.c:2962
+#: option.c:3135
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:2965 network.c:777 dhcp.c:753
+#: option.c:3138 network.c:813 dhcp.c:814
#, fuzzy, c-format
msgid "failed to read %s: %s"
msgstr "no se pudo leer %s: %s"
-#: option.c:2982
+#: option.c:3155
#, c-format
msgid "no search directive found in %s"
msgstr "ninguna directiva de búsqueda encontrada en %s"
-#: option.c:3003
+#: option.c:3176
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:3007
+#: option.c:3180
msgid "syntax check OK"
msgstr "revisión de sintaxis OK"
-#: forward.c:405
+#: forward.c:427
#, 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:433
-msgid "possible DNS-rebind attack detected"
+#: forward.c:455
+#, fuzzy, c-format
+msgid "possible DNS-rebind attack detected: %s"
msgstr "posible ataque de revinculación DNS detectado"
-#: network.c:73
+#: network.c:110
#, fuzzy, c-format
msgid "unknown interface %s in bridge-interface"
msgstr "interface desconocida %s en bridge-interface"
-#: network.c:436 dnsmasq.c:189
+#: 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:443
+#: 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:469
+#: 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:474
+#: network.c:505
#, c-format
msgid "failed to listen on socket: %s"
msgstr "no se pudo escuchar en socket: %s"
-#: network.c:486
+#: network.c:517
#, fuzzy, c-format
msgid "failed to create TFTP socket: %s"
msgstr "no se pudo crear socket TFTP: %s"
-#: network.c:680
+#: network.c:711
#, fuzzy, c-format
msgid "failed to bind server socket for %s: %s"
msgstr "no se pudo acoplar socket escuchador para %s: %s"
-#: network.c:717
+#: network.c:748
#, c-format
msgid "ignoring nameserver %s - local interface"
msgstr "ignorando servidor DNS %s - interface local"
-#: network.c:728
+#: network.c:759
#, 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:743
+#: network.c:776
msgid "unqualified"
msgstr "no calificado"
-#: network.c:743
+#: network.c:776
msgid "names"
msgstr "nombres"
-#: network.c:745
+#: network.c:778
msgid "default"
msgstr "predeterminado"
-#: network.c:747
+#: network.c:780
msgid "domain"
msgstr "dominio"
-#: network.c:750
+#: network.c:783
#, c-format
msgid "using local addresses only for %s %s"
msgstr "usando direcciones locales solo para %s %s"
-#: network.c:752
+#: network.c:785
+#, fuzzy, c-format
+msgid "using standard nameservers for %s %s"
+msgstr "usando servidor DNS %s#%d para %s %s"
+
+#: network.c:787
#, c-format
msgid "using nameserver %s#%d for %s %s"
msgstr "usando servidor DNS %s#%d para %s %s"
-#: network.c:755
+#: network.c:790
#, fuzzy, c-format
msgid "using nameserver %s#%d(via %s)"
msgstr "usando servidor DNS %s#%d(vía %s)"
-#: network.c:757
+#: network.c:792
#, c-format
msgid "using nameserver %s#%d"
msgstr "usando servidor DNS %s#%d"
-#: dnsmasq.c:146
+#: dnsmasq.c:145
#, fuzzy
msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
msgstr "servidor TFTP no disponible: fijar HAVE_TFTP en src/config.h"
-#: dnsmasq.c:151
+#: dnsmasq.c:150
#, fuzzy
msgid "asychronous logging is not available under Solaris"
msgstr "bitacoreo asincrónico no está disponible bajo Solaris"
-#: dnsmasq.c:170
+#: dnsmasq.c:169
#, c-format
msgid "failed to find list of interfaces: %s"
msgstr "no se pudo encontrar lista de interfaces: %s"
-#: dnsmasq.c:178
+#: dnsmasq.c:177
#, c-format
msgid "unknown interface %s"
msgstr "interface desconocida %s"
-#: dnsmasq.c:184
+#: dnsmasq.c:183
#, c-format
msgid "no interface with address %s"
msgstr "ninguna interface con dirección %s"
-#: dnsmasq.c:201 dnsmasq.c:670
+#: dnsmasq.c:200 dnsmasq.c:671
#, c-format
msgid "DBus error: %s"
msgstr "error DBus: %s"
-#: dnsmasq.c:204
+#: dnsmasq.c:203
msgid "DBus not available: set HAVE_DBUS in src/config.h"
msgstr "DBus no disponible: fijar HAVE_DBUS en src/config.h"
-#: dnsmasq.c:230
+#: dnsmasq.c:229
#, c-format
msgid "unknown user or group: %s"
msgstr "usuario o grupo desconocido: %s"
-#: dnsmasq.c:287
+#: dnsmasq.c:284
#, c-format
msgid "cannot chdir to filesystem root: %s"
msgstr "no se puede cambiar directorio a raíz de sistema de archivos: %s"
@@ -1039,75 +1087,75 @@ msgstr "modo seguro"
msgid "restricting maximum simultaneous TFTP transfers to %d"
msgstr "limitando número máximo de transferencias TFTP simultáneas a %d"
-#: dnsmasq.c:672
+#: dnsmasq.c:673
msgid "connected to system DBus"
msgstr "conectado a DBus de sistema"
-#: dnsmasq.c:767
+#: dnsmasq.c:768
#, c-format
msgid "cannot fork into background: %s"
msgstr "no se puede hacer fork hacia el fondo: %s"
-#: dnsmasq.c:770
+#: dnsmasq.c:771
#, fuzzy, c-format
msgid "failed to create helper: %s"
msgstr "no se pudo crear ayudante: %s"
-#: dnsmasq.c:773
+#: dnsmasq.c:774
#, fuzzy, c-format
msgid "setting capabilities failed: %s"
msgstr "configuración de capacidades ha fallado: %s"
-#: dnsmasq.c:777
+#: dnsmasq.c:778
#, fuzzy, c-format
msgid "failed to change user-id to %s: %s"
msgstr "no se pudo cambiar user-id a %s: %s"
-#: dnsmasq.c:782
+#: dnsmasq.c:783
#, fuzzy, c-format
msgid "failed to change group-id to %s: %s"
msgstr "no se pudo cambiar group-id a %s: %s"
-#: dnsmasq.c:785
+#: dnsmasq.c:786
#, fuzzy, c-format
msgid "failed to open pidfile %s: %s"
msgstr "no se pudo abrir archivo PID %s: %s"
-#: dnsmasq.c:788
+#: dnsmasq.c:789
#, fuzzy, c-format
msgid "cannot open %s: %s"
msgstr "no se puede abrir %s: %s"
-#: dnsmasq.c:843
+#: dnsmasq.c:844
#, c-format
msgid "child process killed by signal %d"
msgstr "proceso hijo eliminado por señal %d"
-#: dnsmasq.c:847
+#: dnsmasq.c:848
#, c-format
msgid "child process exited with status %d"
msgstr "proceso hijo hizo exit con estado %d"
-#: dnsmasq.c:851
+#: dnsmasq.c:852
#, fuzzy, c-format
msgid "failed to execute %s: %s"
msgstr "no se pudo ejecutar %s: %s"
-#: dnsmasq.c:895
+#: dnsmasq.c:896
msgid "exiting on receipt of SIGTERM"
msgstr "saliendo al recibir SIGTERM"
-#: dnsmasq.c:913
+#: dnsmasq.c:924
#, fuzzy, c-format
msgid "failed to access %s: %s"
msgstr "no se pudo accesar %s: %s"
-#: dnsmasq.c:935
+#: dnsmasq.c:954
#, c-format
msgid "reading %s"
msgstr "leyendo %s"
-#: dnsmasq.c:946
+#: dnsmasq.c:965
#, fuzzy, c-format
msgid "no servers found in %s, will retry"
msgstr "ningún servidor encontrado en %s, se reintentará"
@@ -1137,237 +1185,242 @@ msgstr "no se pudo acoplar socket de servidor DHCP: %s"
msgid "cannot create ICMP raw socket: %s."
msgstr "no se puede crear socket crudo ICMP: %s."
-#: dhcp.c:240
+#: dhcp.c:281
#, c-format
msgid "DHCP packet received on %s which has no address"
msgstr "Paquete DHCP recibido en %s que no tiene dirección"
-#: dhcp.c:404
+#: dhcp.c:445
#, c-format
msgid "DHCP range %s -- %s is not consistent with netmask %s"
msgstr "rango DHCP %s -- %s no coincide con máscara de subred %s"
-#: dhcp.c:791
+#: dhcp.c:852
#, fuzzy, c-format
msgid "bad line at %s line %d"
msgstr "línea errónea en %s línea %d"
-#: dhcp.c:834
+#: dhcp.c:895
#, c-format
msgid "ignoring %s line %d, duplicate name or IP address"
msgstr "ignorando %s línea %d, nombre o dirección IP duplicada"
-#: dhcp.c:916
+#: dhcp.c:977
#, c-format
msgid "duplicate IP address %s in dhcp-config directive."
msgstr "dirección IP duplicada %s en directiva dhcp-config."
-#: dhcp.c:919
+#: dhcp.c:980
#, fuzzy, c-format
msgid "duplicate IP address %s in %s."
msgstr "dirección IP duplicada %s en %s."
-#: dhcp.c:962
+#: dhcp.c:1023
#, c-format
msgid "%s has more than one address in hostsfile, using %s for DHCP"
msgstr "%s tiene más de una dirección en hostsfile, usando %s para DHCP"
-#: dhcp.c:967
+#: dhcp.c:1028
#, c-format
msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr "dirección IP duplicada %s (%s) en directiva dhcp-config"
-#: lease.c:66
+#: lease.c:67
#, fuzzy, c-format
msgid "cannot open or create lease file %s: %s"
msgstr "no se puede abrir o crear archivo de arriendos %s: %s"
-#: lease.c:92
+#: lease.c:93
msgid "too many stored leases"
msgstr "demasiados arriendos almacenados"
-#: lease.c:128
+#: lease.c:129
#, fuzzy, c-format
msgid "cannot run lease-init script %s: %s"
msgstr "no se puede ejecutar archivo guión lease-init %s: %s"
-#: lease.c:134
+#: lease.c:135
#, c-format
msgid "lease-init script returned exit code %s"
msgstr "archivo guión lease-init retornó exit code %s"
-#: lease.c:234
+#: lease.c:235
#, fuzzy, c-format
msgid "failed to write %s: %s (retry in %us)"
msgstr "error al escribir %s: %s (reintentar en %us)"
-#: rfc2131.c:375
+#: rfc2131.c:377
#, c-format
msgid "no address range available for DHCP request %s %s"
msgstr "ningún rango de direcciónes disponible para pedido DHCP %s %s"
-#: rfc2131.c:376
+#: rfc2131.c:378
msgid "with subnet selector"
msgstr "con selector de subred"
-#: rfc2131.c:376
+#: rfc2131.c:378
msgid "via"
msgstr "vía"
-#: rfc2131.c:391
-#, c-format
-msgid "%u Available DHCP subnet: %s/%s"
+#: rfc2131.c:393
+#, fuzzy, c-format
+msgid "%u available DHCP subnet: %s/%s"
msgstr "%u Subred DHCP disponible: %s/%s"
-#: rfc2131.c:394
-#, c-format
-msgid "%u Available DHCP range: %s -- %s"
+#: rfc2131.c:396
+#, fuzzy, c-format
+msgid "%u available DHCP range: %s -- %s"
msgstr "%u Rango DHCP disponible: %s -- %s"
-#: rfc2131.c:423
+#: rfc2131.c:425
msgid "disabled"
msgstr "deshabilitado"
-#: rfc2131.c:457 rfc2131.c:928 rfc2131.c:1277
+#: rfc2131.c:466 rfc2131.c:969 rfc2131.c:1335
msgid "ignored"
msgstr "ignorado"
-#: rfc2131.c:472 rfc2131.c:1145
+#: rfc2131.c:481 rfc2131.c:1183
msgid "address in use"
msgstr "dirección en uso"
-#: rfc2131.c:486 rfc2131.c:982
+#: rfc2131.c:495 rfc2131.c:1023
msgid "no address available"
msgstr "ninguna dirección disponible"
-#: rfc2131.c:493 rfc2131.c:1108
+#: rfc2131.c:502 rfc2131.c:1146
msgid "wrong network"
msgstr "red equivocada"
-#: rfc2131.c:506
+#: rfc2131.c:516
msgid "no address configured"
msgstr "ninguna dirección configurada"
-#: rfc2131.c:512 rfc2131.c:1158
+#: rfc2131.c:522 rfc2131.c:1196
msgid "no leases left"
msgstr "no sobra ningún arriendo"
-#: rfc2131.c:597
+#: rfc2131.c:607
#, fuzzy, c-format
msgid "%u client provides name: %s"
msgstr "%u cliente provee nombre: %s"
-#: rfc2131.c:741
-#, c-format
-msgid "%u Vendor class: %s"
+#: rfc2131.c:762
+#, fuzzy, c-format
+msgid "%u vendor class: %s"
msgstr "%u Clase de vendedor: %s"
-#: rfc2131.c:743
-#, c-format
-msgid "%u User class: %s"
+#: rfc2131.c:764
+#, fuzzy, c-format
+msgid "%u user class: %s"
msgstr "%u Clase de usuario: %s"
-#: rfc2131.c:782
+#: rfc2131.c:823
msgid "PXE BIS not supported"
msgstr "no hay soporte para BIS PXE"
-#: rfc2131.c:898
+#: rfc2131.c:939
#, fuzzy, c-format
msgid "disabling DHCP static address %s for %s"
msgstr "deshabilitando dirección DHCP estática %s para %s"
-#: rfc2131.c:919
+#: rfc2131.c:960
msgid "unknown lease"
msgstr "arriendo desconocido"
-#: rfc2131.c:951
+#: rfc2131.c:992
#, 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:961
+#: rfc2131.c:1002
#, 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:964
+#: rfc2131.c:1005
#, 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:980 rfc2131.c:1151
+#: rfc2131.c:1021 rfc2131.c:1189
msgid "no unique-id"
msgstr "ningún unique-id (identificación única)"
-#: rfc2131.c:1048
+#: rfc2131.c:1090
msgid "wrong server-ID"
msgstr "ID de servidor equivocada"
-#: rfc2131.c:1067
+#: rfc2131.c:1108
msgid "wrong address"
msgstr "dirección equivocada"
-#: rfc2131.c:1084
+#: rfc2131.c:1121
msgid "lease not found"
msgstr "arriendo no encontrado"
-#: rfc2131.c:1116
+#: rfc2131.c:1154
msgid "address not available"
msgstr "dirección no disponible"
-#: rfc2131.c:1127
+#: rfc2131.c:1165
msgid "static lease available"
msgstr "arriendo estático disponible"
-#: rfc2131.c:1131
+#: rfc2131.c:1169
msgid "address reserved"
msgstr "dirección reservada"
-#: rfc2131.c:1139
+#: rfc2131.c:1177
#, c-format
msgid "abandoning lease to %s of %s"
msgstr "abandonando arriendo a %s de %s"
-#: rfc2131.c:1698
+#: rfc2131.c:1757
#, c-format
msgid "%u tags: %s"
msgstr "%u etiquetas: %s"
-#: rfc2131.c:1711
+#: rfc2131.c:1770
#, c-format
msgid "%u bootfile name: %s"
msgstr "%u nombre de bootfile: %s"
-#: rfc2131.c:1720
+#: rfc2131.c:1779
#, c-format
msgid "%u server name: %s"
msgstr "%u nombre de servidor: %s"
-#: rfc2131.c:1728
+#: rfc2131.c:1793
#, fuzzy, c-format
msgid "%u next server: %s"
msgstr "%u siguiente servidor: %s"
-#: rfc2131.c:1795
+#: rfc2131.c:1796
+#, c-format
+msgid "%u broadcast response"
+msgstr ""
+
+#: rfc2131.c:1859
#, 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:2032
+#: rfc2131.c:2105
msgid "PXE menu too large"
msgstr "menú PXE demasiado grande"
-#: rfc2131.c:2143
+#: rfc2131.c:2218
#, c-format
msgid "Ignoring domain %s for DHCP host name %s"
msgstr "Ignorando dominio %s para nombre de host DHCP %s"
-#: rfc2131.c:2161
+#: rfc2131.c:2236
#, fuzzy, c-format
msgid "%u requested options: %s"
msgstr "%u opciones solicitadas: %s"
-#: rfc2131.c:2425
+#: rfc2131.c:2503
#, 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"
@@ -1404,46 +1457,46 @@ msgstr "no se puede crear socket BPF DHCP: %s"
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:179
+#: tftp.c:233
msgid "unable to get free port for TFTP"
msgstr "incapaz de conseguir puerto libre para TFTP"
-#: tftp.c:194
+#: tftp.c:248
#, c-format
msgid "unsupported request from %s"
msgstr "pedido no-soportado desde %s"
-#: tftp.c:282
+#: tftp.c:336
#, fuzzy, c-format
msgid "sent %s to %s"
msgstr "TFTP envió %s a %s"
-#: tftp.c:305
+#: tftp.c:359
#, fuzzy, c-format
msgid "file %s not found"
msgstr "archivo %s no encontrado"
-#: tftp.c:416
+#: tftp.c:470
#, fuzzy, c-format
msgid "error %d %s received from %s"
msgstr "error TFTP %d %s recibido de %s"
-#: tftp.c:447
+#: tftp.c:501
#, fuzzy, c-format
msgid "failed sending %s to %s"
msgstr "TFTP no pudo enviar %s a %s"
-#: log.c:169
+#: log.c:173
#, c-format
msgid "overflow: %d log entries lost"
msgstr "desbordamiento: %d entradas de bitácora perdidas"
-#: log.c:246
+#: log.c:250
#, c-format
msgid "log failed: %s"
msgstr "bitácora falló: %s"
-#: log.c:420
+#: log.c:431
msgid "FAILED to start up"
msgstr "el inicio ha FALLADO"
diff --git a/po/fi.po b/po/fi.po
index f11e53a..4d4e25b 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -20,17 +20,17 @@ msgstr ""
msgid "failed to load names from %s: %s"
msgstr ""
-#: cache.c:798 dhcp.c:804
+#: cache.c:798 dhcp.c:865
#, c-format
msgid "bad address at %s line %d"
msgstr ""
-#: cache.c:856 dhcp.c:820
+#: cache.c:856 dhcp.c:881
#, c-format
msgid "bad name at %s line %d"
msgstr ""
-#: cache.c:863 dhcp.c:894
+#: cache.c:863 dhcp.c:955
#, c-format
msgid "read %s - %d addresses"
msgstr ""
@@ -39,32 +39,37 @@ msgstr ""
msgid "cleared cache"
msgstr ""
-#: cache.c:933 option.c:1069
+#: cache.c:933 option.c:1103
#, c-format
msgid "cannot access directory %s: %s"
msgstr ""
-#: cache.c:1052
+#: cache.c:1053
+#, c-format
+msgid "%s is a CNAME, not giving it to the DHCP lease of %s"
+msgstr ""
+
+#: cache.c:1059
#, 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:1129
+#: cache.c:1132
#, c-format
msgid "time %lu"
msgstr ""
-#: cache.c:1130
+#: cache.c:1133
#, c-format
msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
msgstr ""
-#: cache.c:1132
+#: cache.c:1135
#, c-format
msgid "queries forwarded %u, queries answered locally %u"
msgstr ""
-#: cache.c:1155
+#: cache.c:1158
#, c-format
msgid "server %s#%d: queries sent %u, retried or failed %u"
msgstr ""
@@ -78,7 +83,7 @@ msgstr ""
msgid "failed to allocate memory"
msgstr ""
-#: util.c:229 option.c:549
+#: util.c:229 option.c:567
msgid "could not get memory"
msgstr ""
@@ -97,825 +102,863 @@ msgstr ""
msgid "infinite"
msgstr ""
-#: option.c:228
+#: option.c:240
msgid "Specify local address(es) to listen on."
msgstr ""
-#: option.c:229
+#: option.c:241
msgid "Return ipaddr for all hosts in specified domains."
msgstr ""
-#: option.c:230
+#: option.c:242
msgid "Fake reverse lookups for RFC1918 private address ranges."
msgstr ""
-#: option.c:231
+#: option.c:243
msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
msgstr ""
-#: option.c:232
+#: option.c:244
#, c-format
msgid "Specify the size of the cache in entries (defaults to %s)."
msgstr ""
-#: option.c:233
+#: option.c:245
#, c-format
msgid "Specify configuration file (defaults to %s)."
msgstr ""
-#: option.c:234
+#: option.c:246
msgid "Do NOT fork into the background: run in debug mode."
msgstr ""
-#: option.c:235
+#: option.c:247
msgid "Do NOT forward queries with no domain part."
msgstr ""
-#: option.c:236
+#: option.c:248
msgid "Return self-pointing MX records for local hosts."
msgstr ""
-#: option.c:237
+#: option.c:249
msgid "Expand simple names in /etc/hosts with domain-suffix."
msgstr ""
-#: option.c:238
+#: option.c:250
msgid "Don't forward spurious DNS requests from Windows hosts."
msgstr ""
-#: option.c:239
+#: option.c:251
msgid "Enable DHCP in the range given with lease duration."
msgstr ""
-#: option.c:240
+#: option.c:252
#, c-format
msgid "Change to this group after startup (defaults to %s)."
msgstr ""
-#: option.c:241
+#: option.c:253
msgid "Set address or hostname for a specified machine."
msgstr ""
-#: option.c:242
-msgid "Read DHCP host specs from file"
+#: option.c:254
+msgid "Read DHCP host specs from file."
msgstr ""
-#: option.c:243
-msgid "Read DHCP option specs from file"
+#: option.c:255
+msgid "Read DHCP option specs from file."
msgstr ""
-#: option.c:244
+#: option.c:256
+msgid "Evaluate conditional tag expression."
+msgstr ""
+
+#: option.c:257
#, c-format
msgid "Do NOT load %s file."
msgstr ""
-#: option.c:245
+#: option.c:258
#, c-format
msgid "Specify a hosts file to be read in addition to %s."
msgstr ""
-#: option.c:246
+#: option.c:259
msgid "Specify interface(s) to listen on."
msgstr ""
-#: option.c:247
+#: option.c:260
msgid "Specify interface(s) NOT to listen on."
msgstr ""
-#: option.c:248
+#: option.c:261
msgid "Map DHCP user class to tag."
msgstr ""
-#: option.c:249
+#: option.c:262
msgid "Map RFC3046 circuit-id to tag."
msgstr ""
-#: option.c:250
+#: option.c:263
msgid "Map RFC3046 remote-id to tag."
msgstr ""
-#: option.c:251
+#: option.c:264
msgid "Map RFC3993 subscriber-id to tag."
msgstr ""
-#: option.c:252
+#: option.c:265
msgid "Don't do DHCP for hosts with tag set."
msgstr ""
-#: option.c:253
+#: option.c:266
msgid "Force broadcast replies for hosts with tag set."
msgstr ""
-#: option.c:254
+#: option.c:267
msgid "Do NOT fork into the background, do NOT run in debug mode."
msgstr ""
-#: option.c:255
+#: option.c:268
msgid "Assume we are the only DHCP server on the local network."
msgstr ""
-#: option.c:256
+#: option.c:269
#, c-format
msgid "Specify where to store DHCP leases (defaults to %s)."
msgstr ""
-#: option.c:257
+#: option.c:270
msgid "Return MX records for local hosts."
msgstr ""
-#: option.c:258
+#: option.c:271
msgid "Specify an MX record."
msgstr ""
-#: option.c:259
+#: option.c:272
msgid "Specify BOOTP options to DHCP server."
msgstr ""
-#: option.c:260
+#: option.c:273
#, c-format
msgid "Do NOT poll %s file, reload only on SIGHUP."
msgstr ""
-#: option.c:261
+#: option.c:274
msgid "Do NOT cache failed search results."
msgstr ""
-#: option.c:262
+#: option.c:275
#, c-format
msgid "Use nameservers strictly in the order given in %s."
msgstr ""
-#: option.c:263
+#: option.c:276
msgid "Specify options to be sent to DHCP clients."
msgstr ""
-#: option.c:264
+#: option.c:277
msgid "DHCP option sent even if the client does not request it."
msgstr ""
-#: option.c:265
+#: option.c:278
msgid "Specify port to listen for DNS requests on (defaults to 53)."
msgstr ""
-#: option.c:266
+#: option.c:279
#, c-format
msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
msgstr ""
-#: option.c:267
+#: option.c:280
msgid "Log DNS queries."
msgstr ""
-#: option.c:268
+#: option.c:281
msgid "Force the originating port for upstream DNS queries."
msgstr ""
-#: option.c:269
+#: option.c:282
msgid "Do NOT read resolv.conf."
msgstr ""
-#: option.c:270
+#: option.c:283
#, c-format
msgid "Specify path to resolv.conf (defaults to %s)."
msgstr ""
-#: option.c:271
+#: option.c:284
msgid "Specify address(es) of upstream servers with optional domains."
msgstr ""
-#: option.c:272
+#: option.c:285
msgid "Never forward queries to specified domains."
msgstr ""
-#: option.c:273
+#: option.c:286
msgid "Specify the domain to be assigned in DHCP leases."
msgstr ""
-#: option.c:274
+#: option.c:287
msgid "Specify default target in an MX record."
msgstr ""
-#: option.c:275
+#: option.c:288
msgid "Specify time-to-live in seconds for replies from /etc/hosts."
msgstr ""
-#: option.c:276
+#: option.c:289
msgid "Specify time-to-live in seconds for negative caching."
msgstr ""
-#: option.c:277
+#: option.c:290
+msgid "Specify time-to-live in seconds for maximum TTL to send to clients."
+msgstr ""
+
+#: option.c:291
#, c-format
msgid "Change to this user after startup. (defaults to %s)."
msgstr ""
-#: option.c:278
+#: option.c:292
msgid "Map DHCP vendor class to tag."
msgstr ""
-#: option.c:279
+#: option.c:293
msgid "Display dnsmasq version and copyright information."
msgstr ""
-#: option.c:280
+#: option.c:294
msgid "Translate IPv4 addresses from upstream servers."
msgstr ""
-#: option.c:281
+#: option.c:295
msgid "Specify a SRV record."
msgstr ""
-#: option.c:282
+#: option.c:296
msgid "Display this message. Use --help dhcp for known DHCP options."
msgstr ""
-#: option.c:283
+#: option.c:297
#, c-format
msgid "Specify path of PID file (defaults to %s)."
msgstr ""
-#: option.c:284
+#: option.c:298
#, c-format
msgid "Specify maximum number of DHCP leases (defaults to %s)."
msgstr ""
-#: option.c:285
+#: option.c:299
msgid "Answer DNS queries based on the interface a query was sent to."
msgstr ""
-#: option.c:286
+#: option.c:300
msgid "Specify TXT DNS record."
msgstr ""
-#: option.c:287
+#: option.c:301
msgid "Specify PTR DNS record."
msgstr ""
-#: option.c:288
+#: option.c:302
msgid "Give DNS name to IPv4 address of interface."
msgstr ""
-#: option.c:289
+#: option.c:303
msgid "Bind only to interfaces in use."
msgstr ""
-#: option.c:290
+#: option.c:304
#, c-format
msgid "Read DHCP static host information from %s."
msgstr ""
-#: option.c:291
+#: option.c:305
msgid "Enable the DBus interface for setting upstream servers, etc."
msgstr ""
-#: option.c:292
+#: option.c:306
msgid "Do not provide DHCP on this interface, only provide DNS."
msgstr ""
-#: option.c:293
+#: option.c:307
msgid "Enable dynamic address allocation for bootp."
msgstr ""
-#: option.c:294
+#: option.c:308
msgid "Map MAC address (with wildcards) to option set."
msgstr ""
-#: option.c:295
+#: option.c:309
msgid "Treat DHCP requests on aliases as arriving from interface."
msgstr ""
-#: option.c:296
+#: option.c:310
msgid "Disable ICMP echo address checking in the DHCP server."
msgstr ""
-#: option.c:297
+#: option.c:311
msgid "Script to run on DHCP lease creation and destruction."
msgstr ""
-#: option.c:298
+#: option.c:312
msgid "Read configuration from all the files in this directory."
msgstr ""
-#: option.c:299
+#: option.c:313
msgid "Log to this syslog facility or file. (defaults to DAEMON)"
msgstr ""
-#: option.c:300
+#: option.c:314
msgid "Do not use leasefile."
msgstr ""
-#: option.c:301
+#: option.c:315
#, c-format
msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
msgstr ""
-#: option.c:302
+#: option.c:316
#, c-format
msgid "Clear DNS cache when reloading %s."
msgstr ""
-#: option.c:303
+#: option.c:317
msgid "Ignore hostnames provided by DHCP clients."
msgstr ""
-#: option.c:304
+#: option.c:318
msgid "Do NOT reuse filename and server fields for extra DHCP options."
msgstr ""
-#: option.c:305
+#: option.c:319
msgid "Enable integrated read-only TFTP server."
msgstr ""
-#: option.c:306
+#: option.c:320
msgid "Export files by TFTP only from the specified subtree."
msgstr ""
-#: option.c:307
+#: option.c:321
msgid "Add client IP address to tftp-root."
msgstr ""
-#: option.c:308
+#: option.c:322
msgid "Allow access only to files owned by the user running dnsmasq."
msgstr ""
-#: option.c:309
+#: option.c:323
#, c-format
msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
msgstr ""
-#: option.c:310
+#: option.c:324
msgid "Disable the TFTP blocksize extension."
msgstr ""
-#: option.c:311
+#: option.c:325
msgid "Ephemeral port range for use by TFTP transfers."
msgstr ""
-#: option.c:312
+#: option.c:326
msgid "Extra logging for DHCP."
msgstr ""
-#: option.c:313
+#: option.c:327
msgid "Enable async. logging; optionally set queue length."
msgstr ""
-#: option.c:314
+#: option.c:328
msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
msgstr ""
-#: option.c:315
+#: option.c:329
+msgid "Allow rebinding of 127.0.0.0/8, for RBL servers."
+msgstr ""
+
+#: option.c:330
+msgid "Inhibit DNS-rebind protection on this domain."
+msgstr ""
+
+#: option.c:331
msgid "Always perform DNS queries to all servers."
msgstr ""
-#: option.c:316
+#: option.c:332
msgid "Set tag if client includes matching option in request."
msgstr ""
-#: option.c:317
+#: option.c:333
msgid "Use alternative ports for DHCP."
msgstr ""
-#: option.c:318
+#: option.c:334
msgid "Run lease-change script as this user."
msgstr ""
-#: option.c:319
+#: option.c:335
msgid "Specify NAPTR DNS record."
msgstr ""
-#: option.c:320
+#: option.c:336
msgid "Specify lowest port available for DNS query transmission."
msgstr ""
-#: option.c:321
+#: option.c:337
msgid "Use only fully qualified domain names for DHCP clients."
msgstr ""
-#: option.c:322
+#: option.c:338
+msgid "Generate hostnames based on MAC address for nameless clients."
+msgstr ""
+
+#: option.c:339
+msgid "Use these DHCP relays as full proxies."
+msgstr ""
+
+#: option.c:340
msgid "Specify alias name for LOCAL DNS name."
msgstr ""
-#: option.c:323
+#: option.c:341
msgid "Prompt to send to PXE clients."
msgstr ""
-#: option.c:324
+#: option.c:342
msgid "Boot service for PXE menu."
msgstr ""
-#: option.c:325
+#: option.c:343
msgid "Check configuration syntax."
msgstr ""
-#: option.c:614
+#: option.c:632
#, c-format
msgid ""
"Usage: dnsmasq [options]\n"
"\n"
msgstr ""
-#: option.c:616
+#: option.c:634
#, c-format
msgid "Use short options only on the command line.\n"
msgstr ""
-#: option.c:618
+#: option.c:636
#, c-format
msgid "Valid options are:\n"
msgstr ""
-#: option.c:659
+#: option.c:677
#, c-format
msgid "Known DHCP options:\n"
msgstr ""
-#: option.c:747
+#: option.c:781
msgid "bad dhcp-option"
msgstr ""
-#: option.c:804
+#: option.c:838
msgid "bad IP address"
msgstr ""
-#: option.c:903
+#: option.c:937
msgid "bad domain in dhcp-option"
msgstr ""
-#: option.c:964
+#: option.c:998
msgid "dhcp-option too long"
msgstr ""
-#: option.c:973
+#: option.c:1007
msgid "illegal dhcp-match"
msgstr ""
-#: option.c:1009
+#: option.c:1043
msgid "illegal repeated flag"
msgstr ""
-#: option.c:1017
+#: option.c:1051
msgid "illegal repeated keyword"
msgstr ""
-#: option.c:1100 tftp.c:359
+#: option.c:1134 tftp.c:413
#, c-format
msgid "cannot access %s: %s"
msgstr ""
-#: option.c:1145
+#: option.c:1179
msgid "only one dhcp-hostsfile allowed"
msgstr ""
-#: option.c:1152
+#: option.c:1186
msgid "only one dhcp-optsfile allowed"
msgstr ""
-#: option.c:1197
+#: option.c:1231
msgid "bad MX preference"
msgstr ""
-#: option.c:1202
+#: option.c:1236
msgid "bad MX name"
msgstr ""
-#: option.c:1216
+#: option.c:1250
msgid "bad MX target"
msgstr ""
-#: option.c:1226
+#: option.c:1260
msgid "cannot run scripts under uClinux"
msgstr ""
-#: option.c:1228
+#: option.c:1262
msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts"
msgstr ""
-#: option.c:1456 option.c:1460
+#: option.c:1507 option.c:1511
msgid "bad port"
msgstr ""
-#: option.c:1479 option.c:1504
+#: option.c:1530 option.c:1555
msgid "interface binding not supported"
msgstr ""
-#: option.c:1625
+#: option.c:1701
msgid "bad port range"
msgstr ""
-#: option.c:1642
+#: option.c:1718
msgid "bad bridge-interface"
msgstr ""
-#: option.c:1683
+#: option.c:1760
msgid "bad dhcp-range"
msgstr ""
-#: option.c:1709
-msgid "only one netid tag allowed"
+#: option.c:1788
+msgid "only one tag allowed"
msgstr ""
-#: option.c:1754
+#: option.c:1835
msgid "inconsistent DHCP range"
msgstr ""
-#: option.c:1926
+#: option.c:2010
msgid "bad DHCP host name"
msgstr ""
-#: option.c:2221 option.c:2501
+#: option.c:2091
+msgid "bad tag-if"
+msgstr ""
+
+#: option.c:2365 option.c:2664
msgid "invalid port number"
msgstr ""
-#: option.c:2304
+#: option.c:2427
+msgid "bad dhcp-proxy address"
+msgstr ""
+
+#: option.c:2467
msgid "invalid alias range"
msgstr ""
-#: option.c:2317
+#: option.c:2480
msgid "bad interface name"
msgstr ""
-#: option.c:2342
+#: option.c:2505
msgid "bad CNAME"
msgstr ""
-#: option.c:2347
+#: option.c:2510
msgid "duplicate CNAME"
msgstr ""
-#: option.c:2367
+#: option.c:2530
msgid "bad PTR record"
msgstr ""
-#: option.c:2398
+#: option.c:2561
msgid "bad NAPTR record"
msgstr ""
-#: option.c:2423
+#: option.c:2586
msgid "TXT record string too long"
msgstr ""
-#: option.c:2471
+#: option.c:2634
msgid "bad TXT record"
msgstr ""
-#: option.c:2487
+#: option.c:2650
msgid "bad SRV record"
msgstr ""
-#: option.c:2494
+#: option.c:2657
msgid "bad SRV target"
msgstr ""
-#: option.c:2508
+#: option.c:2671
msgid "invalid priority"
msgstr ""
-#: option.c:2515
+#: option.c:2678
msgid "invalid weight"
msgstr ""
-#: option.c:2534
+#: option.c:2697
msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DBus support)"
msgstr ""
-#: option.c:2577
+#: option.c:2739
#, c-format
msgid "files nested too deep in %s"
msgstr ""
-#: option.c:2585 tftp.c:513
+#: option.c:2747 tftp.c:567
#, c-format
msgid "cannot read %s: %s"
msgstr ""
-#: option.c:2646
+#: option.c:2804
msgid "missing \""
msgstr ""
-#: option.c:2693
+#: option.c:2863
msgid "bad option"
msgstr ""
-#: option.c:2695
+#: option.c:2865
msgid "extraneous parameter"
msgstr ""
-#: option.c:2697
+#: option.c:2867
msgid "missing parameter"
msgstr ""
-#: option.c:2705
+#: option.c:2871
msgid "error"
msgstr ""
-#: option.c:2711
+#: option.c:2876
#, c-format
msgid "%s at line %d of %%s"
msgstr ""
-#: option.c:2760 option.c:2791
+#: option.c:2933 option.c:2964
#, c-format
msgid "read %s"
msgstr ""
-#: option.c:2863
+#: option.c:3036
#, c-format
msgid "Dnsmasq version %s %s\n"
msgstr ""
-#: option.c:2864
+#: option.c:3037
#, c-format
msgid ""
"Compile time options %s\n"
"\n"
msgstr ""
-#: option.c:2865
+#: option.c:3038
#, c-format
msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
msgstr ""
-#: option.c:2866
+#: option.c:3039
#, c-format
msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
msgstr ""
-#: option.c:2867
+#: option.c:3040
#, c-format
msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
msgstr ""
-#: option.c:2878
+#: option.c:3051
msgid "try --help"
msgstr ""
-#: option.c:2880
+#: option.c:3053
msgid "try -w"
msgstr ""
-#: option.c:2883
+#: option.c:3056
#, c-format
msgid "bad command line options: %s"
msgstr ""
-#: option.c:2924
+#: option.c:3097
#, c-format
msgid "cannot get host-name: %s"
msgstr ""
-#: option.c:2952
+#: option.c:3125
msgid "only one resolv.conf file allowed in no-poll mode."
msgstr ""
-#: option.c:2962
+#: option.c:3135
msgid "must have exactly one resolv.conf to read domain from."
msgstr ""
-#: option.c:2965 network.c:777 dhcp.c:753
+#: option.c:3138 network.c:813 dhcp.c:814
#, c-format
msgid "failed to read %s: %s"
msgstr ""
-#: option.c:2982
+#: option.c:3155
#, c-format
msgid "no search directive found in %s"
msgstr ""
-#: option.c:3003
+#: option.c:3176
msgid "there must be a default domain when --dhcp-fqdn is set"
msgstr ""
-#: option.c:3007
+#: option.c:3180
msgid "syntax check OK"
msgstr ""
-#: forward.c:405
+#: forward.c:427
#, c-format
msgid "nameserver %s refused to do a recursive query"
msgstr ""
-#: forward.c:433
-msgid "possible DNS-rebind attack detected"
+#: forward.c:455
+#, c-format
+msgid "possible DNS-rebind attack detected: %s"
msgstr ""
-#: network.c:73
+#: network.c:110
#, c-format
msgid "unknown interface %s in bridge-interface"
msgstr ""
-#: network.c:436 dnsmasq.c:189
+#: network.c:467 dnsmasq.c:188
#, c-format
msgid "failed to create listening socket: %s"
msgstr ""
-#: network.c:443
+#: network.c:474
#, c-format
msgid "failed to set IPV6 options on listening socket: %s"
msgstr ""
-#: network.c:469
+#: network.c:500
#, c-format
msgid "failed to bind listening socket for %s: %s"
msgstr ""
-#: network.c:474
+#: network.c:505
#, c-format
msgid "failed to listen on socket: %s"
msgstr ""
-#: network.c:486
+#: network.c:517
#, c-format
msgid "failed to create TFTP socket: %s"
msgstr ""
-#: network.c:680
+#: network.c:711
#, c-format
msgid "failed to bind server socket for %s: %s"
msgstr ""
-#: network.c:717
+#: network.c:748
#, c-format
msgid "ignoring nameserver %s - local interface"
msgstr ""
-#: network.c:728
+#: network.c:759
#, c-format
msgid "ignoring nameserver %s - cannot make/bind socket: %s"
msgstr ""
-#: network.c:743
+#: network.c:776
msgid "unqualified"
msgstr ""
-#: network.c:743
+#: network.c:776
msgid "names"
msgstr ""
-#: network.c:745
+#: network.c:778
msgid "default"
msgstr ""
-#: network.c:747
+#: network.c:780
msgid "domain"
msgstr ""
-#: network.c:750
+#: network.c:783
#, c-format
msgid "using local addresses only for %s %s"
msgstr ""
-#: network.c:752
+#: network.c:785
+#, c-format
+msgid "using standard nameservers for %s %s"
+msgstr ""
+
+#: network.c:787
#, c-format
msgid "using nameserver %s#%d for %s %s"
msgstr ""
-#: network.c:755
+#: network.c:790
#, c-format
msgid "using nameserver %s#%d(via %s)"
msgstr ""
-#: network.c:757
+#: network.c:792
#, c-format
msgid "using nameserver %s#%d"
msgstr ""
-#: dnsmasq.c:146
+#: dnsmasq.c:145
msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
msgstr ""
-#: dnsmasq.c:151
+#: dnsmasq.c:150
msgid "asychronous logging is not available under Solaris"
msgstr ""
-#: dnsmasq.c:170
+#: dnsmasq.c:169
#, c-format
msgid "failed to find list of interfaces: %s"
msgstr ""
-#: dnsmasq.c:178
+#: dnsmasq.c:177
#, c-format
msgid "unknown interface %s"
msgstr ""
-#: dnsmasq.c:184
+#: dnsmasq.c:183
#, c-format
msgid "no interface with address %s"
msgstr ""
-#: dnsmasq.c:201 dnsmasq.c:670
+#: dnsmasq.c:200 dnsmasq.c:671
#, c-format
msgid "DBus error: %s"
msgstr ""
-#: dnsmasq.c:204
+#: dnsmasq.c:203
msgid "DBus not available: set HAVE_DBUS in src/config.h"
msgstr ""
-#: dnsmasq.c:230
+#: dnsmasq.c:229
#, c-format
msgid "unknown user or group: %s"
msgstr ""
-#: dnsmasq.c:287
+#: dnsmasq.c:284
#, c-format
msgid "cannot chdir to filesystem root: %s"
msgstr ""
@@ -1007,75 +1050,75 @@ msgstr ""
msgid "restricting maximum simultaneous TFTP transfers to %d"
msgstr ""
-#: dnsmasq.c:672
+#: dnsmasq.c:673
msgid "connected to system DBus"
msgstr ""
-#: dnsmasq.c:767
+#: dnsmasq.c:768
#, c-format
msgid "cannot fork into background: %s"
msgstr ""
-#: dnsmasq.c:770
+#: dnsmasq.c:771
#, c-format
msgid "failed to create helper: %s"
msgstr ""
-#: dnsmasq.c:773
+#: dnsmasq.c:774
#, c-format
msgid "setting capabilities failed: %s"
msgstr ""
-#: dnsmasq.c:777
+#: dnsmasq.c:778
#, c-format
msgid "failed to change user-id to %s: %s"
msgstr ""
-#: dnsmasq.c:782
+#: dnsmasq.c:783
#, c-format
msgid "failed to change group-id to %s: %s"
msgstr ""
-#: dnsmasq.c:785
+#: dnsmasq.c:786
#, c-format
msgid "failed to open pidfile %s: %s"
msgstr ""
-#: dnsmasq.c:788
+#: dnsmasq.c:789
#, c-format
msgid "cannot open %s: %s"
msgstr ""
-#: dnsmasq.c:843
+#: dnsmasq.c:844
#, c-format
msgid "child process killed by signal %d"
msgstr ""
-#: dnsmasq.c:847
+#: dnsmasq.c:848
#, c-format
msgid "child process exited with status %d"
msgstr ""
-#: dnsmasq.c:851
+#: dnsmasq.c:852
#, c-format
msgid "failed to execute %s: %s"
msgstr ""
-#: dnsmasq.c:895
+#: dnsmasq.c:896
msgid "exiting on receipt of SIGTERM"
msgstr ""
-#: dnsmasq.c:913
+#: dnsmasq.c:924
#, c-format
msgid "failed to access %s: %s"
msgstr ""
-#: dnsmasq.c:935
+#: dnsmasq.c:954
#, c-format
msgid "reading %s"
msgstr ""
-#: dnsmasq.c:946
+#: dnsmasq.c:965
#, c-format
msgid "no servers found in %s, will retry"
msgstr ""
@@ -1105,237 +1148,242 @@ msgstr ""
msgid "cannot create ICMP raw socket: %s."
msgstr ""
-#: dhcp.c:240
+#: dhcp.c:281
#, c-format
msgid "DHCP packet received on %s which has no address"
msgstr ""
-#: dhcp.c:404
+#: dhcp.c:445
#, c-format
msgid "DHCP range %s -- %s is not consistent with netmask %s"
msgstr ""
-#: dhcp.c:791
+#: dhcp.c:852
#, c-format
msgid "bad line at %s line %d"
msgstr ""
-#: dhcp.c:834
+#: dhcp.c:895
#, c-format
msgid "ignoring %s line %d, duplicate name or IP address"
msgstr ""
-#: dhcp.c:916
+#: dhcp.c:977
#, c-format
msgid "duplicate IP address %s in dhcp-config directive."
msgstr ""
-#: dhcp.c:919
+#: dhcp.c:980
#, c-format
msgid "duplicate IP address %s in %s."
msgstr ""
-#: dhcp.c:962
+#: dhcp.c:1023
#, c-format
msgid "%s has more than one address in hostsfile, using %s for DHCP"
msgstr ""
-#: dhcp.c:967
+#: dhcp.c:1028
#, c-format
msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr ""
-#: lease.c:66
+#: lease.c:67
#, c-format
msgid "cannot open or create lease file %s: %s"
msgstr ""
-#: lease.c:92
+#: lease.c:93
msgid "too many stored leases"
msgstr ""
-#: lease.c:128
+#: lease.c:129
#, c-format
msgid "cannot run lease-init script %s: %s"
msgstr ""
-#: lease.c:134
+#: lease.c:135
#, c-format
msgid "lease-init script returned exit code %s"
msgstr ""
-#: lease.c:234
+#: lease.c:235
#, c-format
msgid "failed to write %s: %s (retry in %us)"
msgstr ""
-#: rfc2131.c:375
+#: rfc2131.c:377
#, c-format
msgid "no address range available for DHCP request %s %s"
msgstr ""
-#: rfc2131.c:376
+#: rfc2131.c:378
msgid "with subnet selector"
msgstr ""
-#: rfc2131.c:376
+#: rfc2131.c:378
msgid "via"
msgstr ""
-#: rfc2131.c:391
+#: rfc2131.c:393
#, c-format
-msgid "%u Available DHCP subnet: %s/%s"
+msgid "%u available DHCP subnet: %s/%s"
msgstr ""
-#: rfc2131.c:394
+#: rfc2131.c:396
#, c-format
-msgid "%u Available DHCP range: %s -- %s"
+msgid "%u available DHCP range: %s -- %s"
msgstr ""
-#: rfc2131.c:423
+#: rfc2131.c:425
msgid "disabled"
msgstr ""
-#: rfc2131.c:457 rfc2131.c:928 rfc2131.c:1277
+#: rfc2131.c:466 rfc2131.c:969 rfc2131.c:1335
msgid "ignored"
msgstr ""
-#: rfc2131.c:472 rfc2131.c:1145
+#: rfc2131.c:481 rfc2131.c:1183
msgid "address in use"
msgstr ""
-#: rfc2131.c:486 rfc2131.c:982
+#: rfc2131.c:495 rfc2131.c:1023
msgid "no address available"
msgstr ""
-#: rfc2131.c:493 rfc2131.c:1108
+#: rfc2131.c:502 rfc2131.c:1146
msgid "wrong network"
msgstr ""
-#: rfc2131.c:506
+#: rfc2131.c:516
msgid "no address configured"
msgstr ""
-#: rfc2131.c:512 rfc2131.c:1158
+#: rfc2131.c:522 rfc2131.c:1196
msgid "no leases left"
msgstr ""
-#: rfc2131.c:597
+#: rfc2131.c:607
#, c-format
msgid "%u client provides name: %s"
msgstr ""
-#: rfc2131.c:741
+#: rfc2131.c:762
#, c-format
-msgid "%u Vendor class: %s"
+msgid "%u vendor class: %s"
msgstr ""
-#: rfc2131.c:743
+#: rfc2131.c:764
#, c-format
-msgid "%u User class: %s"
+msgid "%u user class: %s"
msgstr ""
-#: rfc2131.c:782
+#: rfc2131.c:823
msgid "PXE BIS not supported"
msgstr ""
-#: rfc2131.c:898
+#: rfc2131.c:939
#, c-format
msgid "disabling DHCP static address %s for %s"
msgstr ""
-#: rfc2131.c:919
+#: rfc2131.c:960
msgid "unknown lease"
msgstr ""
-#: rfc2131.c:951
+#: rfc2131.c:992
#, c-format
msgid "not using configured address %s because it is leased to %s"
msgstr ""
-#: rfc2131.c:961
+#: rfc2131.c:1002
#, c-format
msgid "not using configured address %s because it is in use by the server or relay"
msgstr ""
-#: rfc2131.c:964
+#: rfc2131.c:1005
#, c-format
msgid "not using configured address %s because it was previously declined"
msgstr ""
-#: rfc2131.c:980 rfc2131.c:1151
+#: rfc2131.c:1021 rfc2131.c:1189
msgid "no unique-id"
msgstr ""
-#: rfc2131.c:1048
+#: rfc2131.c:1090
msgid "wrong server-ID"
msgstr ""
-#: rfc2131.c:1067
+#: rfc2131.c:1108
msgid "wrong address"
msgstr ""
-#: rfc2131.c:1084
+#: rfc2131.c:1121
msgid "lease not found"
msgstr ""
-#: rfc2131.c:1116
+#: rfc2131.c:1154
msgid "address not available"
msgstr ""
-#: rfc2131.c:1127
+#: rfc2131.c:1165
msgid "static lease available"
msgstr ""
-#: rfc2131.c:1131
+#: rfc2131.c:1169
msgid "address reserved"
msgstr ""
-#: rfc2131.c:1139
+#: rfc2131.c:1177
#, c-format
msgid "abandoning lease to %s of %s"
msgstr ""
-#: rfc2131.c:1698
+#: rfc2131.c:1757
#, c-format
msgid "%u tags: %s"
msgstr ""
-#: rfc2131.c:1711
+#: rfc2131.c:1770
#, c-format
msgid "%u bootfile name: %s"
msgstr ""
-#: rfc2131.c:1720
+#: rfc2131.c:1779
#, c-format
msgid "%u server name: %s"
msgstr ""
-#: rfc2131.c:1728
+#: rfc2131.c:1793
#, c-format
msgid "%u next server: %s"
msgstr ""
-#: rfc2131.c:1795
+#: rfc2131.c:1796
+#, c-format
+msgid "%u broadcast response"
+msgstr ""
+
+#: rfc2131.c:1859
#, c-format
msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
msgstr ""
-#: rfc2131.c:2032
+#: rfc2131.c:2105
msgid "PXE menu too large"
msgstr ""
-#: rfc2131.c:2143
+#: rfc2131.c:2218
#, c-format
msgid "Ignoring domain %s for DHCP host name %s"
msgstr ""
-#: rfc2131.c:2161
+#: rfc2131.c:2236
#, c-format
msgid "%u requested options: %s"
msgstr ""
-#: rfc2131.c:2425
+#: rfc2131.c:2503
#, c-format
msgid "cannot send RFC3925 option: too many options for enterprise number %d"
msgstr ""
@@ -1372,45 +1420,45 @@ msgstr ""
msgid "DHCP request for unsupported hardware type (%d) received on %s"
msgstr ""
-#: tftp.c:179
+#: tftp.c:233
msgid "unable to get free port for TFTP"
msgstr ""
-#: tftp.c:194
+#: tftp.c:248
#, c-format
msgid "unsupported request from %s"
msgstr ""
-#: tftp.c:282
+#: tftp.c:336
#, c-format
msgid "sent %s to %s"
msgstr ""
-#: tftp.c:305
+#: tftp.c:359
#, c-format
msgid "file %s not found"
msgstr ""
-#: tftp.c:416
+#: tftp.c:470
#, c-format
msgid "error %d %s received from %s"
msgstr ""
-#: tftp.c:447
+#: tftp.c:501
#, c-format
msgid "failed sending %s to %s"
msgstr ""
-#: log.c:169
+#: log.c:173
#, c-format
msgid "overflow: %d log entries lost"
msgstr ""
-#: log.c:246
+#: log.c:250
#, c-format
msgid "log failed: %s"
msgstr ""
-#: log.c:420
+#: log.c:431
msgid "FAILED to start up"
msgstr ""
diff --git a/po/fr.po b/po/fr.po
index cb691a1..949358d 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -4,10 +4,10 @@
# Translation completed by Gildas Le Nadan <3ntr0p13@gmail.com>
msgid ""
msgstr ""
-"Project-Id-Version: dnsmasq 2.52\n"
+"Project-Id-Version: dnsmasq 2.53\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-06-18 12:24+0100\n"
-"PO-Revision-Date: 2010-01-14 17:24+0100\n"
+"PO-Revision-Date: 2010-05-21 11:39+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"
@@ -19,17 +19,17 @@ msgstr ""
msgid "failed to load names from %s: %s"
msgstr "Impossible de charger les noms à partir de %s : %s"
-#: cache.c:798 dhcp.c:804
+#: cache.c:798 dhcp.c:865
#, c-format
msgid "bad address at %s line %d"
msgstr "mauvaise adresse dans %s ligne %d"
-#: cache.c:856 dhcp.c:820
+#: cache.c:856 dhcp.c:881
#, c-format
msgid "bad name at %s line %d"
msgstr "mauvais nom dans %s ligne %d"
-#: cache.c:863 dhcp.c:894
+#: cache.c:863 dhcp.c:955
#, c-format
msgid "read %s - %d addresses"
msgstr "lecture %s - %d adresses"
@@ -38,32 +38,37 @@ msgstr "lecture %s - %d adresses"
msgid "cleared cache"
msgstr "cache vidé"
-#: cache.c:933 option.c:1069
+#: cache.c:933 option.c:1103
#, c-format
msgid "cannot access directory %s: %s"
msgstr "Ne peut pas lire le répertoire %s : %s"
-#: cache.c:1052
+#: cache.c:1053
+#, 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
#, 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:1129
+#: cache.c:1132
#, c-format
msgid "time %lu"
msgstr "horodatage %lu"
-#: cache.c:1130
+#: cache.c:1133
#, 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:1132
+#: cache.c:1135
#, c-format
msgid "queries forwarded %u, queries answered locally %u"
msgstr "requêtes transmises %u, requêtes résolues localement %u"
-#: cache.c:1155
+#: cache.c:1158
#, 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"
@@ -77,7 +82,7 @@ msgstr "impossible d'initialiser le générateur de nombre aléatoire : %s"
msgid "failed to allocate memory"
msgstr "impossible d'allouer la mémoire"
-#: util.c:229 option.c:549
+#: util.c:229 option.c:567
msgid "could not get memory"
msgstr "impossible d'allouer de la mémoire"
@@ -96,430 +101,460 @@ msgstr "impossible d'allouer %d octets"
msgid "infinite"
msgstr "illimité(e)"
-#: option.c:228
+#: option.c:240
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:229
+#: option.c:241
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:230
+#: option.c:242
msgid "Fake reverse lookups for RFC1918 private address ranges."
msgstr "Traduction inverse truquée pour la plage d'adresse privée RFC1918"
-#: option.c:231
+#: option.c:243
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:232
+#: option.c:244
#, 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:233
+#: option.c:245
#, c-format
msgid "Specify configuration file (defaults to %s)."
msgstr "Spécifie le nom du fichier de configuration (par défaut : %s)"
-#: option.c:234
+#: option.c:246
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:235
+#: option.c:247
msgid "Do NOT forward queries with no domain part."
msgstr "Ne retransmet pas les requêtes qui n'ont pas de domaine."
-#: option.c:236
+#: option.c:248
msgid "Return self-pointing MX records for local hosts."
msgstr "Retourne les champs MX pour les machines locales."
-#: option.c:237
+#: option.c:249
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:238
+#: option.c:250
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:239
+#: option.c:251
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:240
+#: option.c:252
#, 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:241
+#: option.c:253
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:242
-msgid "Read DHCP host specs from file"
+#: option.c:254
+#, fuzzy
+msgid "Read DHCP host specs from file."
msgstr "Lecture des spécifications d'hôtes DHCP à partir du fichier"
-#: option.c:243
-msgid "Read DHCP option specs from file"
+#: option.c:255
+#, fuzzy
+msgid "Read DHCP option specs from file."
msgstr "Lecture des options DHCP à partir du fichier"
-#: option.c:244
+#: option.c:256
+#, fuzzy
+msgid "Evaluate conditional tag expression."
+msgstr "Expression d'évaluation conditionnelle d'étiquette"
+
+#: option.c:257
#, c-format
msgid "Do NOT load %s file."
msgstr "Ne charge PAS le fichier %s."
-#: option.c:245
+#: option.c:258
#, 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:246
+#: option.c:259
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:247
+#: option.c:260
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:248
+#: option.c:261
msgid "Map DHCP user class to tag."
msgstr "Associe les classes d'utilisateurs ('user class') DHCP aux options."
-#: option.c:249
+#: option.c:262
msgid "Map RFC3046 circuit-id to tag."
msgstr "Associe les identifiants de circuits RFC3046 ('circuit-id') aux options"
-#: option.c:250
+#: option.c:263
msgid "Map RFC3046 remote-id to tag."
msgstr "Associe les identifiants distants RFC3046 ('remote-id') aux options"
-#: option.c:251
+#: option.c:264
msgid "Map RFC3993 subscriber-id to tag."
msgstr "Associe les identifiants de souscripteurs RFC3993 ('subscriber-id') aux options"
#
-#: option.c:252
+#: option.c:265
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:253
+#: option.c:266
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:254
+#: option.c:267
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:255
+#: option.c:268
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:256
+#: option.c:269
#, 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:257
+#: option.c:270
msgid "Return MX records for local hosts."
msgstr "Retourne les champs MX pour les machines locales."
-#: option.c:258
+#: option.c:271
msgid "Specify an MX record."
msgstr "Spécifie un champ MX."
-#: option.c:259
+#: option.c:272
msgid "Specify BOOTP options to DHCP server."
msgstr "Spécifie les options BOOTP pour le serveur DHCP."
-#: option.c:260
+#: option.c:273
#, 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:261
+#: option.c:274
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:262
+#: option.c:275
#, 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:263
+#: option.c:276
msgid "Specify options to be sent to DHCP clients."
msgstr "Options supplémentaires à associer aux clients DHCP."
-#: option.c:264
+#: option.c:277
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:265
+#: option.c:278
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:266
+#: option.c:279
#, 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:267
+#: option.c:280
msgid "Log DNS queries."
msgstr "Enregistre les requêtes DNS dans un journal d'activité."
#
-#: option.c:268
+#: option.c:281
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:269
+#: option.c:282
msgid "Do NOT read resolv.conf."
msgstr "Ne pas lire le fichier resolv.conf."
-#: option.c:270
+#: option.c:283
#, 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:271
+#: option.c:284
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:272
+#: option.c:285
msgid "Never forward queries to specified domains."
msgstr "Ne jamais retransmettre les requêtes pour les domaines spécifiés."
-#: option.c:273
+#: option.c:286
msgid "Specify the domain to be assigned in DHCP leases."
msgstr "Spécifie le domaine qui doit etre assigné aux baux DHCP."
-#: option.c:274
+#: option.c:287
msgid "Specify default target in an MX record."
msgstr "Spécifie la cible par défaut dans un champ MX."
-#: option.c:275
+#: option.c:288
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:276
+#: option.c:289
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:277
+#: option.c:290
+#, fuzzy
+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
#, 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:278
+#: option.c:292
msgid "Map DHCP vendor class to tag."
msgstr "Associe les classes de fournisseurs ('vendor class') DHCP aux options."
-#: option.c:279
+#: option.c:293
msgid "Display dnsmasq version and copyright information."
msgstr "Affiche la version de Dnsmasq et les informations liées au copyright."
-#: option.c:280
+#: option.c:294
msgid "Translate IPv4 addresses from upstream servers."
msgstr "Traduit les adresses IPV4 des serveurs amonts."
-#: option.c:281
+#: option.c:295
msgid "Specify a SRV record."
-msgstr " Spécifie un champ SRV."
+msgstr "Spécifie un champ SRV."
-#: option.c:282
+#: option.c:296
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:283
+#: option.c:297
#, 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:284
+#: option.c:298
#, 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:285
+#: option.c:299
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:286
+#: option.c:300
msgid "Specify TXT DNS record."
msgstr "Spécifie un champ DNS TXT"
#
-#: option.c:287
+#: option.c:301
msgid "Specify PTR DNS record."
msgstr "Spécifie un champ DNS PTR"
-#: option.c:288
+#: option.c:302
msgid "Give DNS name to IPv4 address of interface."
msgstr "Donne le nom DNS pour l'adresse IPv4 de l'interface."
-#: option.c:289
+#: option.c:303
msgid "Bind only to interfaces in use."
msgstr "Association uniquement aux interfaces réseau actuellement actives."
-#: option.c:290
+#: option.c:304
#, c-format
msgid "Read DHCP static host information from %s."
msgstr "Lecture des informations de DHCP statique à partir de %s."
-#: option.c:291
+#: option.c:305
msgid "Enable the DBus interface for setting upstream servers, etc."
msgstr "Autorise l'interface DBus pour la configuration des serveurs amonts, etc."
-#: option.c:292
+#: option.c:306
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:293
+#: option.c:307
msgid "Enable dynamic address allocation for bootp."
msgstr "Autorise l'allocation dynamique d'adresse pour bootp."
#
-#: option.c:294
+#: option.c:308
msgid "Map MAC address (with wildcards) to option set."
msgstr "Associe l'adresse MAC (avec les jokers) aux options."
-#: option.c:295
+#: option.c:309
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:296
+#: option.c:310
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:297
+#: option.c:311
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:298
+#: option.c:312
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:299
+#: option.c:313
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:300
+#: option.c:314
msgid "Do not use leasefile."
msgstr "Ne pas utiliser de fichier de baux."
-#: option.c:301
+#: option.c:315
#, 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:302
+#: option.c:316
#, c-format
msgid "Clear DNS cache when reloading %s."
msgstr "Vider le cache DNS lors du rechargement de %s."
-#: option.c:303
+#: option.c:317
msgid "Ignore hostnames provided by DHCP clients."
msgstr "Ignorer les noms d'hôtes fournis par les clients DHCP"
-#: option.c:304
+#: option.c:318
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:305
+#: option.c:319
msgid "Enable integrated read-only TFTP server."
msgstr "Activer le server TFTP intégré (fonctionnant en lecture seulement)"
-#: option.c:306
+#: option.c:320
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:307
+#: option.c:321
msgid "Add client IP address to tftp-root."
msgstr "Ajouter les adresses IP clientes à la racine tftp ('tftp-root')."
-#: option.c:308
+#: option.c:322
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:309
+#: option.c:323
#, 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:310
+#: option.c:324
msgid "Disable the TFTP blocksize extension."
msgstr "Désactivation de l'extension TFTP « taille de bloc »"
-#: option.c:311
+#: option.c:325
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:312
+#: option.c:326
msgid "Extra logging for DHCP."
msgstr "Traces supplémentaires pour le DHCP."
-#: option.c:313
+#: option.c:327
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:314
+#: option.c:328
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:315
+#: option.c:329
+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
+msgid "Inhibit DNS-rebind protection on this domain."
+msgstr "Désactive la protection contre les réassociation DNS pour ce domaine"
+
+#: option.c:331
msgid "Always perform DNS queries to all servers."
msgstr "Toujours effectuer les requêtes DNS à tous les serveurs."
#
-#: option.c:316
+#: option.c:332
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:317
+#: option.c:333
msgid "Use alternative ports for DHCP."
msgstr "Utiliser des ports alternatifs pour le DHCP."
-#: option.c:318
+#: option.c:334
msgid "Run lease-change script as this user."
msgstr "Lancer le script 'lease-change' avec cet utilisateur."
#
-#: option.c:319
+#: option.c:335
msgid "Specify NAPTR DNS record."
msgstr "Spécifie un champ DNS NAPTR."
-#: option.c:320
+#: option.c:336
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:321
+#: option.c:337
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:322
+#: option.c:338
+#, fuzzy
+msgid "Generate hostnames based on MAC address for nameless clients."
+msgstr "Génère les noms d'hôtes à partir de l'adresse MAC pour les clients sans nom,"
+
+#: option.c:339
+msgid "Use these DHCP relays as full proxies."
+msgstr "Utilise ces relais DHCP en temps que proxy complets."
+
+#: option.c:340
msgid "Specify alias name for LOCAL DNS name."
msgstr "Spécifie un alias pour un nom DNS local."
#
-#: option.c:323
+#: option.c:341
msgid "Prompt to send to PXE clients."
msgstr "Invite à envoyer aux clients PXE."
-#: option.c:324
+#: option.c:342
msgid "Boot service for PXE menu."
msgstr "Service de démarrage pour menu PXE"
-#: option.c:325
+#: option.c:343
msgid "Check configuration syntax."
msgstr "vérification de la syntaxe de la configuration"
-#: option.c:614
+#: option.c:632
#, c-format
msgid ""
"Usage: dnsmasq [options]\n"
@@ -528,225 +563,234 @@ msgstr ""
"Usage : dnsmasq [options]\n"
"\n"
-#: option.c:616
+#: option.c:634
#, 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:618
+#: option.c:636
#, c-format
msgid "Valid options are:\n"
msgstr "Les options valides sont :\n"
-#: option.c:659
+#: option.c:677
#, c-format
msgid "Known DHCP options:\n"
msgstr "Options DHCP connues :\n"
-#: option.c:747
+#: option.c:781
msgid "bad dhcp-option"
msgstr "mauvaise valeur de 'dhcp-option'"
#
-#: option.c:804
+#: option.c:838
msgid "bad IP address"
msgstr "mauvaise adresse IP"
-#: option.c:903
+#: option.c:937
msgid "bad domain in dhcp-option"
msgstr "mauvais domaine dans dhcp-option"
-#: option.c:964
+#: option.c:998
msgid "dhcp-option too long"
msgstr "dhcp-option trop long"
-#: option.c:973
+#: option.c:1007
msgid "illegal dhcp-match"
msgstr "valeur illégale pour 'dhcp-match'"
-#: option.c:1009
+#: option.c:1043
msgid "illegal repeated flag"
msgstr "Une option ne pouvant être spécifié qu'une seule fois à été donnée plusieurs fois."
-#: option.c:1017
+#: option.c:1051
msgid "illegal repeated keyword"
msgstr "Mot-clef ne pouvant être répété"
-#: option.c:1100 tftp.c:359
+#: option.c:1134 tftp.c:413
#, c-format
msgid "cannot access %s: %s"
msgstr "Ne peut pas lire %s : %s"
#
-#: option.c:1145
+#: option.c:1179
msgid "only one dhcp-hostsfile allowed"
msgstr "une seule valeur est autorisée pour 'dhcp-hostsfile'"
#
-#: option.c:1152
+#: option.c:1186
msgid "only one dhcp-optsfile allowed"
msgstr "une seule valeur est autorisée pour 'dhcp-optsfile'"
-#: option.c:1197
+#: option.c:1231
msgid "bad MX preference"
-msgstr "Mauvaise préference MX"
+msgstr "préference MX incorrecte"
-#: option.c:1202
+#: option.c:1236
msgid "bad MX name"
-msgstr "mauvais nom MX"
+msgstr "nom MX incorrect"
-#: option.c:1216
+#: option.c:1250
msgid "bad MX target"
-msgstr "mauvaise cible MX"
+msgstr "valeur MX cible incorrecte"
-#: option.c:1226
+#: option.c:1260
msgid "cannot run scripts under uClinux"
msgstr "ne peut exécuter de script sous uClinux"
-#: option.c:1228
+#: option.c:1262
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:1456 option.c:1460
+#: option.c:1507 option.c:1511
msgid "bad port"
-msgstr "mauvais port"
+msgstr "numéro de port incorrect"
-#: option.c:1479 option.c:1504
+#: option.c:1530 option.c:1555
msgid "interface binding not supported"
msgstr "association d'interface non supportée"
#
-#: option.c:1625
+#: option.c:1701
msgid "bad port range"
-msgstr "mauvaise gamme de ports"
+msgstr "gamme de ports incorrecte"
-#: option.c:1642
+#: option.c:1718
msgid "bad bridge-interface"
-msgstr "mauvaise interface-pont"
+msgstr "interface-pont incorrecte"
-#: option.c:1683
+#: option.c:1760
msgid "bad dhcp-range"
-msgstr "mauvaise plage d'adresses DHCP (dhcp-range)"
+msgstr "plage d'adresses DHCP (dhcp-range) incorrecte"
-#: option.c:1709
-msgid "only one netid tag allowed"
-msgstr "une seule étiquette netid est autorisée"
+#: option.c:1788
+msgid "only one tag allowed"
+msgstr "une seule étiquette est autorisée"
-#: option.c:1754
+#: option.c:1835
msgid "inconsistent DHCP range"
msgstr "plage d'adresses DHCP incohérente"
#
-#: option.c:1926
+#: option.c:2010
msgid "bad DHCP host name"
-msgstr "mauvais nom d'hôte DHCP"
+msgstr "nom d'hôte DHCP incorrect"
-#: option.c:2221 option.c:2501
+#: option.c:2091
+msgid "bad tag-if"
+msgstr "mauvaise étiquette tag-if"
+
+#: option.c:2365 option.c:2664
msgid "invalid port number"
msgstr "numéro de port invalide"
#
-#: option.c:2304
+#: option.c:2427
+msgid "bad dhcp-proxy address"
+msgstr "adresse dhcp-proxy incorrecte"
+
+#
+#: option.c:2467
msgid "invalid alias range"
msgstr "poids invalide"
#
-#: option.c:2317
+#: option.c:2480
msgid "bad interface name"
-msgstr "mauvais nom d'interface"
+msgstr "nom d'interface invalide"
-#: option.c:2342
+#: option.c:2505
msgid "bad CNAME"
msgstr "mauvais CNAME"
-#: option.c:2347
+#: option.c:2510
msgid "duplicate CNAME"
msgstr "ce CNAME existe déja"
#
-#: option.c:2367
+#: option.c:2530
msgid "bad PTR record"
msgstr "mauvais champ PTR"
#
-#: option.c:2398
+#: option.c:2561
msgid "bad NAPTR record"
msgstr "mauvais champ NAPTR"
-#: option.c:2423
+#: option.c:2586
msgid "TXT record string too long"
msgstr "chaîne du champ TXT trop longue"
-#: option.c:2471
+#: option.c:2634
msgid "bad TXT record"
-msgstr "mauvais champ TXT"
+msgstr "champ TXT invalide"
-#: option.c:2487
+#: option.c:2650
msgid "bad SRV record"
-msgstr "mauvais champ SRV"
+msgstr "champ SRV invalide"
-#: option.c:2494
+#: option.c:2657
msgid "bad SRV target"
-msgstr "mauvaise cible SRV"
+msgstr "cible SRV invalide"
-#: option.c:2508
+#: option.c:2671
msgid "invalid priority"
msgstr "priorité invalide"
-#: option.c:2515
+#: option.c:2678
msgid "invalid weight"
msgstr "poids invalide"
-#: option.c:2534
+#: option.c:2697
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:2577
+#: option.c:2739
#, c-format
msgid "files nested too deep in %s"
msgstr "trop de niveaux de récursion pour les fichiers dans %s"
-#: option.c:2585 tftp.c:513
+#: option.c:2747 tftp.c:567
#, c-format
msgid "cannot read %s: %s"
msgstr "Ne peut pas lire %s : %s"
-#: option.c:2646
+#: option.c:2804
msgid "missing \""
msgstr "il manque \""
-#: option.c:2693
+#: option.c:2863
msgid "bad option"
msgstr "mauvaise option"
-#: option.c:2695
+#: option.c:2865
msgid "extraneous parameter"
msgstr "paramètre en trop"
-#: option.c:2697
+#: option.c:2867
msgid "missing parameter"
msgstr "paramètre manquant"
-#: option.c:2705
+#: option.c:2871
msgid "error"
msgstr "erreur"
-#: option.c:2711
+#: option.c:2876
#, c-format
msgid "%s at line %d of %%s"
msgstr "%s à la ligne %d de %%s"
-#: option.c:2760 option.c:2791
+#: option.c:2933 option.c:2964
#, c-format
msgid "read %s"
msgstr "Lecture de %s"
-#: option.c:2863
+#: option.c:3036
#, c-format
msgid "Dnsmasq version %s %s\n"
msgstr "Version de Dnsmasq %s %s\n"
-#: option.c:2864
+#: option.c:3037
#, c-format
msgid ""
"Compile time options %s\n"
@@ -755,194 +799,200 @@ msgstr ""
"Options à la compilation %s\n"
"\n"
-#: option.c:2865
+#: option.c:3038
#, c-format
msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
msgstr "Ce logiciel est fourni sans AUCUNE GARANTIE.\n"
-#: option.c:2866
+#: option.c:3039
#, 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:2867
+#: option.c:3040
#, 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:2878
+#: option.c:3051
msgid "try --help"
msgstr "essayez avec --help"
-#: option.c:2880
+#: option.c:3053
msgid "try -w"
msgstr "essayez avec -w"
-#: option.c:2883
+#: option.c:3056
#, c-format
msgid "bad command line options: %s"
msgstr "mauvaises options en ligne de commande : %s."
-#: option.c:2924
+#: option.c:3097
#, c-format
msgid "cannot get host-name: %s"
msgstr "ne peut pas obtenir le nom de la machine : %s"
-#: option.c:2952
+#: option.c:3125
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:2962
+#: option.c:3135
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:2965 network.c:777 dhcp.c:753
+#: option.c:3138 network.c:813 dhcp.c:814
#, c-format
msgid "failed to read %s: %s"
msgstr "impossible de lire %s : %s"
-#: option.c:2982
+#: option.c:3155
#, c-format
msgid "no search directive found in %s"
msgstr "pas de directive de recherche trouvée dans %s"
-#: option.c:3003
+#: option.c:3176
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:3007
+#: option.c:3180
msgid "syntax check OK"
msgstr "vérification de syntaxe OK"
-#: forward.c:405
+#: forward.c:427
#, 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:433
-msgid "possible DNS-rebind attack detected"
-msgstr "détection d'une possible attaque de type DNS-rebind"
+#: forward.c:455
+#, c-format
+msgid "possible DNS-rebind attack detected: %s"
+msgstr "détection d'une possible attaque de type DNS-rebind: %s"
-#: network.c:73
+#: network.c:110
#, c-format
msgid "unknown interface %s in bridge-interface"
msgstr "interface %s inconnue spécifiée comme interface de pont"
-#: network.c:436 dnsmasq.c:189
+#: 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:443
+#: 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:469
+#: 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:474
+#: network.c:505
#, c-format
msgid "failed to listen on socket: %s"
msgstr "impossible de lire sur la socket : %s"
-#: network.c:486
+#: network.c:517
#, c-format
msgid "failed to create TFTP socket: %s"
msgstr "impossible de créer une socket TFTP : %s"
-#: network.c:680
+#: network.c:711
#, c-format
msgid "failed to bind server socket for %s: %s"
msgstr "impossible de lier la socket de serveur pour %s : %s"
-#: network.c:717
+#: network.c:748
#, c-format
msgid "ignoring nameserver %s - local interface"
msgstr "ignore le serveur de nom %s - interface locale"
-#: network.c:728
+#: network.c:759
#, 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:743
+#: network.c:776
msgid "unqualified"
msgstr "non-qualifié(e)"
-#: network.c:743
+#: network.c:776
msgid "names"
msgstr "noms"
-#: network.c:745
+#: network.c:778
msgid "default"
msgstr "défaut"
-#: network.c:747
+#: network.c:780
msgid "domain"
msgstr "domaine"
-#: network.c:750
+#: network.c:783
#, c-format
msgid "using local addresses only for %s %s"
msgstr "utilise les adresses locales seulement pour %s %s"
-#: network.c:752
+#: network.c:785
+#, c-format
+msgid "using standard nameservers for %s %s"
+msgstr "utilisation des serveurs de nom standards pour %s %s"
+
+#: network.c:787
#, c-format
msgid "using nameserver %s#%d for %s %s"
msgstr "utilise le serveur de nom %s#%d pour %s %s"
-#: network.c:755
+#: network.c:790
#, c-format
msgid "using nameserver %s#%d(via %s)"
msgstr "utilise le serveur de nom %s#%d (via %s)"
-#: network.c:757
+#: network.c:792
#, c-format
msgid "using nameserver %s#%d"
msgstr "utilise le serveur de nom %s#%d"
#
-#: dnsmasq.c:146
+#: dnsmasq.c:145
msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
msgstr "TFTP n'est pas disponible : activez HAVE_TFTP dans src/config.h"
-#: dnsmasq.c:151
+#: dnsmasq.c:150
msgid "asychronous logging is not available under Solaris"
msgstr "l'écriture de traces en mode asynchrone n'est pas disponible sous Solaris."
-#: dnsmasq.c:170
+#: dnsmasq.c:169
#, c-format
msgid "failed to find list of interfaces: %s"
msgstr "impossible de trouver la liste des interfaces : %s"
-#: dnsmasq.c:178
+#: dnsmasq.c:177
#, c-format
msgid "unknown interface %s"
msgstr "interface %s inconnue"
-#: dnsmasq.c:184
+#: dnsmasq.c:183
#, c-format
msgid "no interface with address %s"
msgstr "pas d'interface avec l'adresse %s"
-#: dnsmasq.c:201 dnsmasq.c:670
+#: dnsmasq.c:200 dnsmasq.c:671
#, c-format
msgid "DBus error: %s"
msgstr "Erreur DBus : %s"
-#: dnsmasq.c:204
+#: dnsmasq.c:203
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:230
+#: dnsmasq.c:229
#, c-format
msgid "unknown user or group: %s"
msgstr "utilisateur ou groupe inconnu : %s"
-#: dnsmasq.c:287
+#: dnsmasq.c:284
#, c-format
msgid "cannot chdir to filesystem root: %s"
msgstr "Ne peut effectuer un 'chdir' à la racine du système de fichier : %s"
@@ -1036,75 +1086,75 @@ msgstr "mode sécurisé"
msgid "restricting maximum simultaneous TFTP transfers to %d"
msgstr "le nombre maximum de transferts TFTP simultanés sera restreint à %d"
-#: dnsmasq.c:672
+#: dnsmasq.c:673
msgid "connected to system DBus"
msgstr "connecté au systeme DBus"
-#: dnsmasq.c:767
+#: dnsmasq.c:768
#, c-format
msgid "cannot fork into background: %s"
msgstr "Ne peut se lancer en tâche de fond : %s"
-#: dnsmasq.c:770
+#: dnsmasq.c:771
#, c-format
msgid "failed to create helper: %s"
msgstr "impossible de créer le 'helper' : %s"
-#: dnsmasq.c:773
+#: dnsmasq.c:774
#, c-format
msgid "setting capabilities failed: %s"
msgstr "impossible de configurer la capacité %s"
-#: dnsmasq.c:777
+#: dnsmasq.c:778
#, c-format
msgid "failed to change user-id to %s: %s"
msgstr "Impossible de changer l'identifiant utilisateur pour %s : %s"
-#: dnsmasq.c:782
+#: dnsmasq.c:783
#, c-format
msgid "failed to change group-id to %s: %s"
msgstr "Impossible de changer l'identifiant de groupe pour %s : %s"
-#: dnsmasq.c:785
+#: dnsmasq.c:786
#, c-format
msgid "failed to open pidfile %s: %s"
msgstr "impossible de lire le fichier de PID %s : %s"
-#: dnsmasq.c:788
+#: dnsmasq.c:789
#, c-format
msgid "cannot open %s: %s"
msgstr "Ne peut pas lire %s : %s"
-#: dnsmasq.c:843
+#: dnsmasq.c:844
#, c-format
msgid "child process killed by signal %d"
msgstr "Le processus fils a été terminé par le signal %d"
-#: dnsmasq.c:847
+#: dnsmasq.c:848
#, c-format
msgid "child process exited with status %d"
msgstr "Le processus fils s'est terminé avec le statut %d"
-#: dnsmasq.c:851
+#: dnsmasq.c:852
#, c-format
msgid "failed to execute %s: %s"
msgstr "impossible d'exécuter à %s : %s"
-#: dnsmasq.c:895
+#: dnsmasq.c:896
msgid "exiting on receipt of SIGTERM"
msgstr "sortie sur réception du signal SIGTERM"
-#: dnsmasq.c:913
+#: dnsmasq.c:924
#, c-format
msgid "failed to access %s: %s"
msgstr "impossible d'accéder à %s : %s"
-#: dnsmasq.c:935
+#: dnsmasq.c:954
#, c-format
msgid "reading %s"
msgstr "Lecture de %s"
-#: dnsmasq.c:946
+#: dnsmasq.c:965
#, c-format
msgid "no servers found in %s, will retry"
msgstr "aucun serveur trouvé dans %s, va réessayer"
@@ -1134,237 +1184,242 @@ msgstr "impossible de lier la socket serveur DHCP : %s"
msgid "cannot create ICMP raw socket: %s."
msgstr "ne peut créer de socket en mode raw pour ICMP : %s."
-#: dhcp.c:240
+#: dhcp.c:281
#, c-format
msgid "DHCP packet received on %s which has no address"
msgstr "Paquet DHCP reçu sur %s qui n'a pas d'adresse"
-#: dhcp.c:404
+#: dhcp.c:445
#, c-format
msgid "DHCP range %s -- %s is not consistent with netmask %s"
msgstr "La plage d'adresses DHCP %s -- %s n'est pas cohérente avec le masque de réseau %s"
-#: dhcp.c:791
+#: dhcp.c:852
#, c-format
msgid "bad line at %s line %d"
msgstr "mauvaise ligne dans %s ligne %d"
-#: dhcp.c:834
+#: dhcp.c:895
#, c-format
msgid "ignoring %s line %d, duplicate name or IP address"
msgstr "ignore %s à la ligne %d : duplication de nom ou d'adresse IP"
-#: dhcp.c:916
+#: dhcp.c:977
#, c-format
msgid "duplicate IP address %s in dhcp-config directive."
msgstr "adresse IP %s dupliquée dans la directive dhcp-config."
-#: dhcp.c:919
+#: dhcp.c:980
#, c-format
msgid "duplicate IP address %s in %s."
msgstr "adresse IP %s dupliquée dans %s."
-#: dhcp.c:962
+#: dhcp.c:1023
#, c-format
msgid "%s has more than one address in hostsfile, using %s for DHCP"
msgstr "%s a plus d'une adresse dans le fichier d'hôte, utilisation de %s pour le DHCP."
-#: dhcp.c:967
+#: dhcp.c:1028
#, c-format
msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr "adresse IP %s (%s) dupliquée dans la directive dhcp-config."
-#: lease.c:66
+#: lease.c:67
#, c-format
msgid "cannot open or create lease file %s: %s"
msgstr "ne peut ouvrir ou créer le fichiers de baux %s : %s"
-#: lease.c:92
+#: lease.c:93
msgid "too many stored leases"
msgstr "beaucoup trop de baux enregistrés"
-#: lease.c:128
+#: lease.c:129
#, c-format
msgid "cannot run lease-init script %s: %s"
msgstr "Ne peut pas exécuter le script lease-init %s : %s"
-#: lease.c:134
+#: lease.c:135
#, c-format
msgid "lease-init script returned exit code %s"
msgstr "le script lease-init a retourné le code %s"
-#: lease.c:234
+#: lease.c:235
#, c-format
msgid "failed to write %s: %s (retry in %us)"
msgstr "impossible de lire %s : %s (prochain essai dans %us)"
-#: rfc2131.c:375
+#: rfc2131.c:377
#, c-format
msgid "no address range available for DHCP request %s %s"
msgstr "pas de plage d'adresse disponible pour la requête DHCP %s %s"
-#: rfc2131.c:376
+#: rfc2131.c:378
msgid "with subnet selector"
msgstr "avec sélecteur de sous-reseau"
-#: rfc2131.c:376
+#: rfc2131.c:378
msgid "via"
msgstr "par l'intermédiaire de"
-#: rfc2131.c:391
+#: rfc2131.c:393
#, c-format
-msgid "%u Available DHCP subnet: %s/%s"
+msgid "%u available DHCP subnet: %s/%s"
msgstr "%u sous-réseaux DHCP disponibles : %s/%s"
-#: rfc2131.c:394
+#: rfc2131.c:396
#, c-format
-msgid "%u Available DHCP range: %s -- %s"
+msgid "%u available DHCP range: %s -- %s"
msgstr "%u la gamme DHCP disponible est : %s -- %s"
-#: rfc2131.c:423
+#: rfc2131.c:425
msgid "disabled"
msgstr "désactivé"
-#: rfc2131.c:457 rfc2131.c:928 rfc2131.c:1277
+#: rfc2131.c:466 rfc2131.c:969 rfc2131.c:1335
msgid "ignored"
msgstr "ignoré"
-#: rfc2131.c:472 rfc2131.c:1145
+#: rfc2131.c:481 rfc2131.c:1183
msgid "address in use"
msgstr "adresse déjà utilisée"
-#: rfc2131.c:486 rfc2131.c:982
+#: rfc2131.c:495 rfc2131.c:1023
msgid "no address available"
msgstr "pas d'adresse disponible"
-#: rfc2131.c:493 rfc2131.c:1108
+#: rfc2131.c:502 rfc2131.c:1146
msgid "wrong network"
msgstr "mauvais réseau"
-#: rfc2131.c:506
+#: rfc2131.c:516
msgid "no address configured"
msgstr "pas d'adresse configurée"
-#: rfc2131.c:512 rfc2131.c:1158
+#: rfc2131.c:522 rfc2131.c:1196
msgid "no leases left"
msgstr "plus aucun bail disponible"
-#: rfc2131.c:597
+#: rfc2131.c:607
#, c-format
msgid "%u client provides name: %s"
msgstr "le client %u fourni le nom : %s"
-#: rfc2131.c:741
+#: rfc2131.c:762
#, c-format
-msgid "%u Vendor class: %s"
+msgid "%u vendor class: %s"
msgstr "%u Classe de vendeur ('Vendor Class') : %s"
-#: rfc2131.c:743
+#: rfc2131.c:764
#, c-format
-msgid "%u User class: %s"
+msgid "%u user class: %s"
msgstr "%u Classe d'utilisateur : %s"
-#: rfc2131.c:782
+#: rfc2131.c:823
msgid "PXE BIS not supported"
msgstr "Service PXE BIS (Boot Integrity Services) non supporté"
-#: rfc2131.c:898
+#: rfc2131.c:939
#, c-format
msgid "disabling DHCP static address %s for %s"
msgstr "désactive l'adresse statique DHCP %s pour %s"
-#: rfc2131.c:919
+#: rfc2131.c:960
msgid "unknown lease"
msgstr "bail inconnu"
-#: rfc2131.c:951
+#: rfc2131.c:992
#, 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:961
+#: rfc2131.c:1002
#, 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:964
+#: rfc2131.c:1005
#, 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:980 rfc2131.c:1151
+#: rfc2131.c:1021 rfc2131.c:1189
msgid "no unique-id"
msgstr "pas d'identifiant unique"
-#: rfc2131.c:1048
+#: rfc2131.c:1090
msgid "wrong server-ID"
msgstr "mauvais identifiant de serveur"
-#: rfc2131.c:1067
+#: rfc2131.c:1108
msgid "wrong address"
msgstr "mauvaise adresse"
-#: rfc2131.c:1084
+#: rfc2131.c:1121
msgid "lease not found"
msgstr "bail non trouvé"
-#: rfc2131.c:1116
+#: rfc2131.c:1154
msgid "address not available"
msgstr "adresse non disponible"
-#: rfc2131.c:1127
+#: rfc2131.c:1165
msgid "static lease available"
msgstr "bail statique disponible"
-#: rfc2131.c:1131
+#: rfc2131.c:1169
msgid "address reserved"
msgstr "adresse reservée"
-#: rfc2131.c:1139
+#: rfc2131.c:1177
#, c-format
msgid "abandoning lease to %s of %s"
msgstr "abandon du bail de %s pour %s"
-#: rfc2131.c:1698
+#: rfc2131.c:1757
#, c-format
msgid "%u tags: %s"
msgstr "%u options: %s"
-#: rfc2131.c:1711
+#: rfc2131.c:1770
#, c-format
msgid "%u bootfile name: %s"
msgstr "%u nom de fichier 'bootfile' : %s"
-#: rfc2131.c:1720
+#: rfc2131.c:1779
#, c-format
msgid "%u server name: %s"
msgstr "%u nom du serveur : %s"
-#: rfc2131.c:1728
+#: rfc2131.c:1793
#, c-format
msgid "%u next server: %s"
msgstr "%u serveur suivant : %s"
-#: rfc2131.c:1795
+#: rfc2131.c:1796
+#, c-format
+msgid "%u broadcast response"
+msgstr "%u réponse broadcast"
+
+#: rfc2131.c:1859
#, 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:2032
+#: rfc2131.c:2105
msgid "PXE menu too large"
msgstr "menu PXE trop grand"
-#: rfc2131.c:2143
+#: rfc2131.c:2218
#, 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:2161
+#: rfc2131.c:2236
#, c-format
msgid "%u requested options: %s"
msgstr "%u options demandées : %s"
-#: rfc2131.c:2425
+#: rfc2131.c:2503
#, 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"
@@ -1401,46 +1456,46 @@ msgstr "impossible de créer une socket BPF pour DHCP : %s"
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:179
+#: tftp.c:233
msgid "unable to get free port for TFTP"
msgstr "impossible d'obtenir un port libre pour TFTP"
-#: tftp.c:194
+#: tftp.c:248
#, c-format
msgid "unsupported request from %s"
msgstr "requête de %s non supportée"
-#: tftp.c:282
+#: tftp.c:336
#, c-format
msgid "sent %s to %s"
msgstr "envoyé %s à %s"
-#: tftp.c:305
+#: tftp.c:359
#, c-format
msgid "file %s not found"
msgstr "fichier %s non trouvé"
-#: tftp.c:416
+#: tftp.c:470
#, c-format
msgid "error %d %s received from %s"
msgstr "erreur %d %s reçu de %s"
-#: tftp.c:447
+#: tftp.c:501
#, c-format
msgid "failed sending %s to %s"
msgstr "impossible d'envoyer %s à %s"
-#: log.c:169
+#: log.c:173
#, c-format
msgid "overflow: %d log entries lost"
msgstr "débordement : %d traces perdues"
-#: log.c:246
+#: log.c:250
#, c-format
msgid "log failed: %s"
msgstr "trace perdue : %s"
-#: log.c:420
+#: log.c:431
msgid "FAILED to start up"
msgstr "IMPOSSIBLE de démarrer"
diff --git a/po/id.po b/po/id.po
index 9547f7b..5437b6f 100644
--- a/po/id.po
+++ b/po/id.po
@@ -21,19 +21,19 @@ msgid "failed to load names from %s: %s"
msgstr "gagal memuat nama-nama dari %s: %s"
# OK
-#: cache.c:798 dhcp.c:804
+#: cache.c:798 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:820
+#: cache.c:856 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:894
+#: cache.c:863 dhcp.c:955
#, c-format
msgid "read %s - %d addresses"
msgstr "membaca %s - %d alamat"
@@ -44,34 +44,39 @@ msgid "cleared cache"
msgstr "cache telah dihapus"
# OK
-#: cache.c:933 option.c:1069
+#: cache.c:933 option.c:1103
#, fuzzy, c-format
msgid "cannot access directory %s: %s"
msgstr "tidak bisa membaca %s: %s"
+#: cache.c:1053
+#, c-format
+msgid "%s is a CNAME, not giving it to the DHCP lease of %s"
+msgstr ""
+
# OK
-#: cache.c:1052
+#: cache.c:1059
#, 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:1129
+#: cache.c:1132
#, c-format
msgid "time %lu"
msgstr ""
# OK
-#: cache.c:1130
+#: cache.c:1133
#, 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:1132
+#: cache.c:1135
#, c-format
msgid "queries forwarded %u, queries answered locally %u"
msgstr ""
-#: cache.c:1155
+#: cache.c:1158
#, c-format
msgid "server %s#%d: queries sent %u, retried or failed %u"
msgstr ""
@@ -89,7 +94,7 @@ msgid "failed to allocate memory"
msgstr "gagal memuat %S: %m"
# OK
-#: util.c:229 option.c:549
+#: util.c:229 option.c:567
msgid "could not get memory"
msgstr "tidak bisa mendapatkan memory"
@@ -112,492 +117,520 @@ msgid "infinite"
msgstr "tak terbatas"
# OK
-#: option.c:228
+#: option.c:240
msgid "Specify local address(es) to listen on."
msgstr "Tentukan alamat lokal untuk mendengarkan."
# OK
-#: option.c:229
+#: option.c:241
msgid "Return ipaddr for all hosts in specified domains."
msgstr "Menghasilkan ipaddr untuk semua host dalam domain yang dipilih."
# OK
-#: option.c:230
+#: option.c:242
msgid "Fake reverse lookups for RFC1918 private address ranges."
msgstr "Fake pencarian balik untuk alamat private sesuai dengan RFC1918."
# OK
-#: option.c:231
+#: option.c:243
msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
msgstr "Perlakukan ipaddr sebagai NXDOMAIN (mengalahkan wildcard Verisign)."
# OK
-#: option.c:232
+#: option.c:244
#, 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:233
+#: option.c:245
#, c-format
msgid "Specify configuration file (defaults to %s)."
msgstr "Tentukan file konfigurasi (default %s)."
# OK
-#: option.c:234
+#: option.c:246
msgid "Do NOT fork into the background: run in debug mode."
msgstr "JANGAN berjalan di background: berjalan dalam modus debug."
# OK
-#: option.c:235
+#: option.c:247
msgid "Do NOT forward queries with no domain part."
msgstr "JANGAN teruskan permintaan tanpa bagian domain."
# OK
-#: option.c:236
+#: option.c:248
msgid "Return self-pointing MX records for local hosts."
msgstr "Mengembalikan record MX untuk diri sendiri host-host lokal."
# OK
-#: option.c:237
+#: option.c:249
msgid "Expand simple names in /etc/hosts with domain-suffix."
msgstr "Melengkapi nama-nama di /etc/hosts dengan akhiran domain."
# OK
-#: option.c:238
+#: option.c:250
msgid "Don't forward spurious DNS requests from Windows hosts."
msgstr "Jangan meneruskan permintaan DNS spurious dari host-host Windows."
# OK
-#: option.c:239
+#: option.c:251
msgid "Enable DHCP in the range given with lease duration."
msgstr "Bolehkan DHCP dalam jangkauan yang diberikan dengan durasi lease."
# OK
-#: option.c:240
+#: option.c:252
#, c-format
msgid "Change to this group after startup (defaults to %s)."
msgstr "Ubah ke group ini setelah mulai (default %s)."
# OK
-#: option.c:241
+#: option.c:253
msgid "Set address or hostname for a specified machine."
msgstr "Setel alamat atau nama host untuk mesin yang disebutkan."
-#: option.c:242
-msgid "Read DHCP host specs from file"
+# OK
+#: option.c:254
+#, fuzzy
+msgid "Read DHCP host specs from file."
+msgstr "nama MX salah"
+
+#: option.c:255
+msgid "Read DHCP option specs from file."
msgstr ""
-#: option.c:243
-msgid "Read DHCP option specs from file"
+#: option.c:256
+msgid "Evaluate conditional tag expression."
msgstr ""
# OK
-#: option.c:244
+#: option.c:257
#, c-format
msgid "Do NOT load %s file."
msgstr "JANGAN muat file %s."
# OK
-#: option.c:245
+#: option.c:258
#, 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:246
+#: option.c:259
msgid "Specify interface(s) to listen on."
msgstr "Sebutkan antarmuka untuk mendengarkan."
# OK
-#: option.c:247
+#: option.c:260
msgid "Specify interface(s) NOT to listen on."
msgstr "Sebutkan antarmuka untuk TIDAK mendengarkan."
# OK
-#: option.c:248
+#: option.c:261
#, fuzzy
msgid "Map DHCP user class to tag."
msgstr "Petakan kelas user DHCP ke setelan yang dipilih."
-#: option.c:249
+#: option.c:262
msgid "Map RFC3046 circuit-id to tag."
msgstr ""
-#: option.c:250
+#: option.c:263
msgid "Map RFC3046 remote-id to tag."
msgstr ""
-#: option.c:251
+#: option.c:264
msgid "Map RFC3993 subscriber-id to tag."
msgstr ""
# OK
-#: option.c:252
+#: option.c:265
#, fuzzy
msgid "Don't do DHCP for hosts with tag set."
msgstr "Jangan menggunakan DHCP untuk host-host yang dipilih."
# OK
-#: option.c:253
+#: option.c:266
#, fuzzy
msgid "Force broadcast replies for hosts with tag set."
msgstr "Jangan menggunakan DHCP untuk host-host yang dipilih."
# OK
-#: option.c:254
+#: option.c:267
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:255
+#: option.c:268
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:256
+#: option.c:269
#, c-format
msgid "Specify where to store DHCP leases (defaults to %s)."
msgstr "Sebutkan lokasi untuk menyimpan lease DHCP (default %s)."
# OK
-#: option.c:257
+#: option.c:270
msgid "Return MX records for local hosts."
msgstr "Kembalikan rekord MX untuk host-host lokal."
# OK
-#: option.c:258
+#: option.c:271
msgid "Specify an MX record."
msgstr "Sebutkan sebuah rekord MX."
# OK
-#: option.c:259
+#: option.c:272
msgid "Specify BOOTP options to DHCP server."
msgstr "Sebutkan pilihan-pilihan BOOTP untuk DHCP server."
-#: option.c:260
+#: option.c:273
#, c-format
msgid "Do NOT poll %s file, reload only on SIGHUP."
msgstr "Jangan kumpulkan file %s, muat kembali saat SIGHUP."
# OK
-#: option.c:261
+#: option.c:274
msgid "Do NOT cache failed search results."
msgstr "JANGAN menyimpan hasil pencarian yang gagal."
# OK
-#: option.c:262
+#: option.c:275
#, 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:263
+#: option.c:276
#, fuzzy
msgid "Specify options to be sent to DHCP clients."
msgstr "Setel pilihan-pilihan tambahan yang akan disetel untuk klien-klien DHCP."
-#: option.c:264
+#: option.c:277
msgid "DHCP option sent even if the client does not request it."
msgstr ""
# OK
-#: option.c:265
+#: option.c:278
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:266
+#: option.c:279
#, 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:267
+#: option.c:280
#, fuzzy
msgid "Log DNS queries."
msgstr "Permintaan log."
# OK
-#: option.c:268
+#: option.c:281
#, fuzzy
msgid "Force the originating port for upstream DNS queries."
msgstr "Paksa port asal untuk permintaan ke atas."
# OK
-#: option.c:269
+#: option.c:282
msgid "Do NOT read resolv.conf."
msgstr "JANGAN baca resolv.conf."
# OK
-#: option.c:270
+#: option.c:283
#, c-format
msgid "Specify path to resolv.conf (defaults to %s)."
msgstr "Sebutkan path ke resolv.conf (default %s)."
# OK
-#: option.c:271
+#: option.c:284
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:272
+#: option.c:285
msgid "Never forward queries to specified domains."
msgstr "JANGAN pernah meneruskan permintaan ke domain yang disebutkan."
# OK
-#: option.c:273
+#: option.c:286
msgid "Specify the domain to be assigned in DHCP leases."
msgstr "Sebutkan domain yang digunakan dalam lease DHCP."
# OK
-#: option.c:274
+#: option.c:287
msgid "Specify default target in an MX record."
msgstr "Sebutkan tujuan default dalam rekord MX."
# OK
-#: option.c:275
+#: option.c:288
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:276
+#: option.c:289
#, 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:277
+#: option.c:290
+#, 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
#, c-format
msgid "Change to this user after startup. (defaults to %s)."
msgstr "Ubah ke user ini setelah mulai. (default %s)."
# OK
-#: option.c:278
+#: option.c:292
#, fuzzy
msgid "Map DHCP vendor class to tag."
msgstr "Memetakan kelas vendor DHCP ke daftar pilihan."
# OK
-#: option.c:279
+#: option.c:293
msgid "Display dnsmasq version and copyright information."
msgstr "Menampilkan versi dan informasi hak cipta dnsmasq."
# OK
-#: option.c:280
+#: option.c:294
msgid "Translate IPv4 addresses from upstream servers."
msgstr "Terjemahkan alamat-alamat IPv4 dari server-server di atas."
# OK
-#: option.c:281
+#: option.c:295
msgid "Specify a SRV record."
msgstr "Sebutkan rekord SRV."
-#: option.c:282
+#: option.c:296
msgid "Display this message. Use --help dhcp for known DHCP options."
msgstr ""
# OK
-#: option.c:283
+#: option.c:297
#, fuzzy, c-format
msgid "Specify path of PID file (defaults to %s)."
msgstr "Sebutkan path file PID. (default %s)."
# OK
-#: option.c:284
+#: option.c:298
#, c-format
msgid "Specify maximum number of DHCP leases (defaults to %s)."
msgstr "Sebutkan jumlah maksimum lease DHCP (default %s)."
# OK
-#: option.c:285
+#: option.c:299
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:286
+#: option.c:300
msgid "Specify TXT DNS record."
msgstr "Sebutkan rekord TXT DNS."
# OK
-#: option.c:287
+#: option.c:301
#, fuzzy
msgid "Specify PTR DNS record."
msgstr "Sebutkan rekord TXT DNS."
-#: option.c:288
+#: option.c:302
msgid "Give DNS name to IPv4 address of interface."
msgstr ""
# OK
-#: option.c:289
+#: option.c:303
msgid "Bind only to interfaces in use."
msgstr "Hanya kaitkan ke antarmuka yang sedang digunakan saja."
# OK
-#: option.c:290
+#: option.c:304
#, c-format
msgid "Read DHCP static host information from %s."
msgstr "Baca informasi statik host DHCP dari %s."
# OK
-#: option.c:291
+#: option.c:305
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:292
+#: option.c:306
msgid "Do not provide DHCP on this interface, only provide DNS."
msgstr "JANGAN menyediakan DHCP pada antarmuka ini, hanya menyediakan DNS."
# OK
-#: option.c:293
+#: option.c:307
msgid "Enable dynamic address allocation for bootp."
msgstr "Mungkinkan alokasi alamat dinamis untuk bootp."
# OK
-#: option.c:294
+#: option.c:308
#, fuzzy
msgid "Map MAC address (with wildcards) to option set."
msgstr "Memetakan kelas vendor DHCP ke daftar pilihan."
-#: option.c:295
+#: option.c:309
msgid "Treat DHCP requests on aliases as arriving from interface."
msgstr ""
-#: option.c:296
+#: option.c:310
msgid "Disable ICMP echo address checking in the DHCP server."
msgstr ""
-#: option.c:297
+#: option.c:311
msgid "Script to run on DHCP lease creation and destruction."
msgstr ""
-#: option.c:298
+#: option.c:312
msgid "Read configuration from all the files in this directory."
msgstr ""
# OK
-#: option.c:299
+#: option.c:313
#, fuzzy
msgid "Log to this syslog facility or file. (defaults to DAEMON)"
msgstr "Ubah ke user ini setelah mulai. (default %s)."
-#: option.c:300
+#: option.c:314
msgid "Do not use leasefile."
msgstr ""
# OK
-#: option.c:301
+#: option.c:315
#, fuzzy, c-format
msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
msgstr "Sebutkan jumlah maksimum lease DHCP (default %s)."
-#: option.c:302
+#: option.c:316
#, c-format
msgid "Clear DNS cache when reloading %s."
msgstr ""
-#: option.c:303
+#: option.c:317
msgid "Ignore hostnames provided by DHCP clients."
msgstr ""
-#: option.c:304
+#: option.c:318
msgid "Do NOT reuse filename and server fields for extra DHCP options."
msgstr ""
-#: option.c:305
+#: option.c:319
msgid "Enable integrated read-only TFTP server."
msgstr ""
-#: option.c:306
+#: option.c:320
msgid "Export files by TFTP only from the specified subtree."
msgstr ""
-#: option.c:307
+#: option.c:321
msgid "Add client IP address to tftp-root."
msgstr ""
-#: option.c:308
+#: option.c:322
msgid "Allow access only to files owned by the user running dnsmasq."
msgstr ""
# OK
-#: option.c:309
+#: option.c:323
#, fuzzy, c-format
msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
msgstr "Sebutkan jumlah maksimum lease DHCP (default %s)."
-#: option.c:310
+#: option.c:324
msgid "Disable the TFTP blocksize extension."
msgstr ""
-#: option.c:311
+#: option.c:325
msgid "Ephemeral port range for use by TFTP transfers."
msgstr ""
-#: option.c:312
+#: option.c:326
msgid "Extra logging for DHCP."
msgstr ""
-#: option.c:313
+#: option.c:327
msgid "Enable async. logging; optionally set queue length."
msgstr ""
-#: option.c:314
+#: option.c:328
msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
msgstr ""
-#: option.c:315
+#: option.c:329
+msgid "Allow rebinding of 127.0.0.0/8, for RBL servers."
+msgstr ""
+
+#: option.c:330
+msgid "Inhibit DNS-rebind protection on this domain."
+msgstr ""
+
+#: option.c:331
msgid "Always perform DNS queries to all servers."
msgstr ""
-#: option.c:316
+#: option.c:332
msgid "Set tag if client includes matching option in request."
msgstr ""
-#: option.c:317
+#: option.c:333
msgid "Use alternative ports for DHCP."
msgstr ""
-#: option.c:318
+#: option.c:334
msgid "Run lease-change script as this user."
msgstr ""
# OK
-#: option.c:319
+#: option.c:335
#, fuzzy
msgid "Specify NAPTR DNS record."
msgstr "Sebutkan rekord TXT DNS."
-#: option.c:320
+#: option.c:336
msgid "Specify lowest port available for DNS query transmission."
msgstr ""
-#: option.c:321
+#: option.c:337
msgid "Use only fully qualified domain names for DHCP clients."
msgstr ""
-#: option.c:322
+#: option.c:338
+msgid "Generate hostnames based on MAC address for nameless clients."
+msgstr ""
+
+#: option.c:339
+msgid "Use these DHCP relays as full proxies."
+msgstr ""
+
+#: option.c:340
msgid "Specify alias name for LOCAL DNS name."
msgstr ""
# OK
-#: option.c:323
+#: option.c:341
#, fuzzy
msgid "Prompt to send to PXE clients."
msgstr "Setel pilihan-pilihan tambahan yang akan disetel untuk klien-klien DHCP."
-#: option.c:324
+#: option.c:342
msgid "Boot service for PXE menu."
msgstr ""
-#: option.c:325
+#: option.c:343
msgid "Check configuration syntax."
msgstr ""
# OK
-#: option.c:614
+#: option.c:632
#, c-format
msgid ""
"Usage: dnsmasq [options]\n"
@@ -607,258 +640,270 @@ msgstr ""
"\n"
# OK
-#: option.c:616
+#: option.c:634
#, c-format
msgid "Use short options only on the command line.\n"
msgstr "Gunakan pilihan pendek saja pada perintah baris.\n"
# OK
-#: option.c:618
+#: option.c:636
#, fuzzy, c-format
msgid "Valid options are:\n"
msgstr "Pilihan yang boleh adalah:\n"
-#: option.c:659
+#: option.c:677
#, c-format
msgid "Known DHCP options:\n"
msgstr ""
# OK
-#: option.c:747
+#: option.c:781
msgid "bad dhcp-option"
msgstr "dhcp-option salah"
# OK
-#: option.c:804
+#: option.c:838
#, fuzzy
msgid "bad IP address"
msgstr "membaca %s - %d alamat"
# OK
-#: option.c:903
+#: option.c:937
msgid "bad domain in dhcp-option"
msgstr "domain dalam dhcp-option salah"
# OK
-#: option.c:964
+#: option.c:998
msgid "dhcp-option too long"
msgstr "dhcp-option terlalu panjang"
-#: option.c:973
+#: option.c:1007
msgid "illegal dhcp-match"
msgstr ""
-#: option.c:1009
+#: option.c:1043
msgid "illegal repeated flag"
msgstr ""
-#: option.c:1017
+#: option.c:1051
msgid "illegal repeated keyword"
msgstr ""
# OK
-#: option.c:1100 tftp.c:359
+#: option.c:1134 tftp.c:413
#, fuzzy, c-format
msgid "cannot access %s: %s"
msgstr "tidak bisa membaca %s: %s"
-#: option.c:1145
+#: option.c:1179
msgid "only one dhcp-hostsfile allowed"
msgstr ""
-#: option.c:1152
+#: option.c:1186
msgid "only one dhcp-optsfile allowed"
msgstr ""
# OK
-#: option.c:1197
+#: option.c:1231
msgid "bad MX preference"
msgstr "kesukaan MX salah"
# OK
-#: option.c:1202
+#: option.c:1236
msgid "bad MX name"
msgstr "nama MX salah"
# OK
-#: option.c:1216
+#: option.c:1250
msgid "bad MX target"
msgstr "target MX salah"
-#: option.c:1226
+#: option.c:1260
msgid "cannot run scripts under uClinux"
msgstr ""
-#: option.c:1228
+#: option.c:1262
msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts"
msgstr ""
# OK
-#: option.c:1456 option.c:1460
+#: option.c:1507 option.c:1511
msgid "bad port"
msgstr "port salah"
-#: option.c:1479 option.c:1504
+#: option.c:1530 option.c:1555
msgid "interface binding not supported"
msgstr ""
# OK
-#: option.c:1625
+#: option.c:1701
#, fuzzy
msgid "bad port range"
msgstr "port salah"
-#: option.c:1642
+#: option.c:1718
msgid "bad bridge-interface"
msgstr ""
# OK
-#: option.c:1683
+#: option.c:1760
msgid "bad dhcp-range"
msgstr "dhcp-range salah"
-#: option.c:1709
-msgid "only one netid tag allowed"
+#: option.c:1788
+msgid "only one tag allowed"
msgstr ""
# OK
-#: option.c:1754
+#: option.c:1835
msgid "inconsistent DHCP range"
msgstr "jangkauan DHCP tidak konsisten"
# OK
-#: option.c:1926
+#: option.c:2010
#, fuzzy
msgid "bad DHCP host name"
msgstr "nama MX salah"
# OK
-#: option.c:2221 option.c:2501
+#: option.c:2091
+#, fuzzy
+msgid "bad tag-if"
+msgstr "target MX salah"
+
+# OK
+#: option.c:2365 option.c:2664
msgid "invalid port number"
msgstr "nomor port tidak benar"
# OK
-#: option.c:2304
+#: option.c:2427
+#, fuzzy
+msgid "bad dhcp-proxy address"
+msgstr "membaca %s - %d alamat"
+
+# OK
+#: option.c:2467
#, fuzzy
msgid "invalid alias range"
msgstr "weight tidak benar"
# OK
-#: option.c:2317
+#: option.c:2480
#, fuzzy
msgid "bad interface name"
msgstr "nama MX salah"
-#: option.c:2342
+#: option.c:2505
msgid "bad CNAME"
msgstr ""
-#: option.c:2347
+#: option.c:2510
msgid "duplicate CNAME"
msgstr ""
# OK
-#: option.c:2367
+#: option.c:2530
#, fuzzy
msgid "bad PTR record"
msgstr "rekord SRV salah"
# OK
-#: option.c:2398
+#: option.c:2561
#, fuzzy
msgid "bad NAPTR record"
msgstr "rekord SRV salah"
# OK
-#: option.c:2423
+#: option.c:2586
msgid "TXT record string too long"
msgstr "string rekord TXT terlalu panjang"
# OK
-#: option.c:2471
+#: option.c:2634
msgid "bad TXT record"
msgstr "rekord TXT salah"
# OK
-#: option.c:2487
+#: option.c:2650
msgid "bad SRV record"
msgstr "rekord SRV salah"
# OK
-#: option.c:2494
+#: option.c:2657
msgid "bad SRV target"
msgstr "target SRV salah"
# OK
-#: option.c:2508
+#: option.c:2671
msgid "invalid priority"
msgstr "prioritas tidak benar"
# OK
-#: option.c:2515
+#: option.c:2678
msgid "invalid weight"
msgstr "weight tidak benar"
-#: option.c:2534
+#: option.c:2697
msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DBus support)"
msgstr ""
-#: option.c:2577
+#: option.c:2739
#, c-format
msgid "files nested too deep in %s"
msgstr ""
# OK
-#: option.c:2585 tftp.c:513
+#: option.c:2747 tftp.c:567
#, c-format
msgid "cannot read %s: %s"
msgstr "tidak bisa membaca %s: %s"
# OK
-#: option.c:2646
+#: option.c:2804
msgid "missing \""
msgstr "kurang \""
# OK
-#: option.c:2693
+#: option.c:2863
msgid "bad option"
msgstr "pilihan salah"
# OK
-#: option.c:2695
+#: option.c:2865
msgid "extraneous parameter"
msgstr "parameter berlebihan"
# OK
-#: option.c:2697
+#: option.c:2867
msgid "missing parameter"
msgstr "parameter kurang"
# OK
-#: option.c:2705
+#: option.c:2871
msgid "error"
msgstr "kesalahan"
# OK
-#: option.c:2711
+#: option.c:2876
#, c-format
msgid "%s at line %d of %%s"
msgstr "%s pada baris %d dari %%s"
# OK
-#: option.c:2760 option.c:2791
+#: option.c:2933 option.c:2964
#, fuzzy, c-format
msgid "read %s"
msgstr "membaca %s"
# OK
-#: option.c:2863
+#: option.c:3036
#, c-format
msgid "Dnsmasq version %s %s\n"
msgstr "Dnsmasq versi %s %s\n"
# OK
-#: option.c:2864
+#: option.c:3037
#, c-format
msgid ""
"Compile time options %s\n"
@@ -868,222 +913,229 @@ msgstr ""
"\n"
# OK
-#: option.c:2865
+#: option.c:3038
#, c-format
msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
msgstr "Perangkat lunak ini tersedia TANPA JAMINAN SEDIKITPUN.\n"
# OK
-#: option.c:2866
+#: option.c:3039
#, 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:2867
+#: option.c:3040
#, 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:2878
+#: option.c:3051
msgid "try --help"
msgstr ""
-#: option.c:2880
+#: option.c:3053
msgid "try -w"
msgstr ""
# OK
-#: option.c:2883
+#: option.c:3056
#, fuzzy, c-format
msgid "bad command line options: %s"
msgstr "pilihan baris perintah salah: %s."
# OK
-#: option.c:2924
+#: option.c:3097
#, c-format
msgid "cannot get host-name: %s"
msgstr "tidak bisa mendapatkan host-name: %s"
# OK
-#: option.c:2952
+#: option.c:3125
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:2962
+#: option.c:3135
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:2965 network.c:777 dhcp.c:753
+#: option.c:3138 network.c:813 dhcp.c:814
#, fuzzy, c-format
msgid "failed to read %s: %s"
msgstr "gagal membaca %s: %s"
# OK
-#: option.c:2982
+#: option.c:3155
#, c-format
msgid "no search directive found in %s"
msgstr "tidak ditemukan direktif search di %s"
-#: option.c:3003
+#: option.c:3176
msgid "there must be a default domain when --dhcp-fqdn is set"
msgstr ""
-#: option.c:3007
+#: option.c:3180
msgid "syntax check OK"
msgstr ""
# OK
-#: forward.c:405
+#: forward.c:427
#, c-format
msgid "nameserver %s refused to do a recursive query"
msgstr "nameserver %s menolak melakukan resolusi rekursif"
-#: forward.c:433
-msgid "possible DNS-rebind attack detected"
+#: forward.c:455
+#, c-format
+msgid "possible DNS-rebind attack detected: %s"
msgstr ""
# OK
-#: network.c:73
+#: network.c:110
#, fuzzy, c-format
msgid "unknown interface %s in bridge-interface"
msgstr "antarmuka tidak dikenal %s"
# OK
-#: network.c:436 dnsmasq.c:189
+#: network.c:467 dnsmasq.c:188
#, c-format
msgid "failed to create listening socket: %s"
msgstr "gagal membuat socket: %s "
# OK
-#: network.c:443
+#: network.c:474
#, c-format
msgid "failed to set IPV6 options on listening socket: %s"
msgstr "gagal menyetel IPV6 pada socket: %s"
-#: network.c:469
+#: 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:474
+#: network.c:505
#, c-format
msgid "failed to listen on socket: %s"
msgstr "gagal mendengarkan di socket: %s"
# OK
-#: network.c:486
+#: network.c:517
#, fuzzy, c-format
msgid "failed to create TFTP socket: %s"
msgstr "gagal membuat socket: %s "
-#: network.c:680
+#: network.c:711
#, fuzzy, c-format
msgid "failed to bind server socket for %s: %s"
msgstr "gagal mem-bind socket untuk mendengarkan %s: %s"
# OK
-#: network.c:717
+#: network.c:748
#, c-format
msgid "ignoring nameserver %s - local interface"
msgstr "mengabaikan nameserver %s - antarmuka lokal"
# OK
-#: network.c:728
+#: network.c:759
#, 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:743
+#: network.c:776
msgid "unqualified"
msgstr "tidak memenuhi syarat"
-#: network.c:743
+#: network.c:776
msgid "names"
msgstr ""
-#: network.c:745
+#: network.c:778
msgid "default"
msgstr ""
# OK
-#: network.c:747
+#: network.c:780
msgid "domain"
msgstr "domain"
# OK
-#: network.c:750
+#: network.c:783
#, c-format
msgid "using local addresses only for %s %s"
msgstr "menggunakan alamat lokal saja untuk %s %s"
# OK
-#: network.c:752
+#: network.c:785
+#, fuzzy, c-format
+msgid "using standard nameservers for %s %s"
+msgstr "menggunakan nameserver %s#%d untuk %s %s"
+
+# OK
+#: network.c:787
#, c-format
msgid "using nameserver %s#%d for %s %s"
msgstr "menggunakan nameserver %s#%d untuk %s %s"
# OK
-#: network.c:755
+#: network.c:790
#, fuzzy, c-format
msgid "using nameserver %s#%d(via %s)"
msgstr "menggunakan nameserver %s#%d"
# OK
-#: network.c:757
+#: network.c:792
#, c-format
msgid "using nameserver %s#%d"
msgstr "menggunakan nameserver %s#%d"
# OK
-#: dnsmasq.c:146
+#: dnsmasq.c:145
#, fuzzy
msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
msgstr "DBus tidak tersedia: setel HAVE_DBUS dalam src/config.h"
-#: dnsmasq.c:151
+#: dnsmasq.c:150
msgid "asychronous logging is not available under Solaris"
msgstr ""
# OK
-#: dnsmasq.c:170
+#: dnsmasq.c:169
#, c-format
msgid "failed to find list of interfaces: %s"
msgstr "gagal mendapatkan daftar antarmuka: %s"
# OK
-#: dnsmasq.c:178
+#: dnsmasq.c:177
#, c-format
msgid "unknown interface %s"
msgstr "antarmuka tidak dikenal %s"
# OK
-#: dnsmasq.c:184
+#: dnsmasq.c:183
#, c-format
msgid "no interface with address %s"
msgstr "tidak ada antarmuka dengan alamat %s"
# OK
-#: dnsmasq.c:201 dnsmasq.c:670
+#: dnsmasq.c:200 dnsmasq.c:671
#, c-format
msgid "DBus error: %s"
msgstr "DBus error: %s"
# OK
-#: dnsmasq.c:204
+#: dnsmasq.c:203
msgid "DBus not available: set HAVE_DBUS in src/config.h"
msgstr "DBus tidak tersedia: setel HAVE_DBUS dalam src/config.h"
-#: dnsmasq.c:230
+#: dnsmasq.c:229
#, c-format
msgid "unknown user or group: %s"
msgstr ""
-#: dnsmasq.c:287
+#: dnsmasq.c:284
#, c-format
msgid "cannot chdir to filesystem root: %s"
msgstr ""
@@ -1191,84 +1243,84 @@ msgid "restricting maximum simultaneous TFTP transfers to %d"
msgstr ""
# OK
-#: dnsmasq.c:672
+#: dnsmasq.c:673
msgid "connected to system DBus"
msgstr "terhubung ke sistem DBus"
-#: dnsmasq.c:767
+#: dnsmasq.c:768
#, c-format
msgid "cannot fork into background: %s"
msgstr ""
# OK
-#: dnsmasq.c:770
+#: dnsmasq.c:771
#, fuzzy, c-format
msgid "failed to create helper: %s"
msgstr "gagal membaca %s: %s"
-#: dnsmasq.c:773
+#: dnsmasq.c:774
#, c-format
msgid "setting capabilities failed: %s"
msgstr ""
# OK
-#: dnsmasq.c:777
+#: dnsmasq.c:778
#, fuzzy, c-format
msgid "failed to change user-id to %s: %s"
msgstr "gagal memuat nama-nama dari %s: %s"
# OK
-#: dnsmasq.c:782
+#: dnsmasq.c:783
#, fuzzy, c-format
msgid "failed to change group-id to %s: %s"
msgstr "gagal memuat nama-nama dari %s: %s"
# OK
-#: dnsmasq.c:785
+#: dnsmasq.c:786
#, fuzzy, c-format
msgid "failed to open pidfile %s: %s"
msgstr "gagal membaca %s: %s"
# OK
-#: dnsmasq.c:788
+#: dnsmasq.c:789
#, fuzzy, c-format
msgid "cannot open %s: %s"
msgstr "tidak bisa membuka %s:%s"
-#: dnsmasq.c:843
+#: dnsmasq.c:844
#, c-format
msgid "child process killed by signal %d"
msgstr ""
-#: dnsmasq.c:847
+#: dnsmasq.c:848
#, c-format
msgid "child process exited with status %d"
msgstr ""
# OK
-#: dnsmasq.c:851
+#: dnsmasq.c:852
#, fuzzy, c-format
msgid "failed to execute %s: %s"
msgstr "gagal mengakses %s: %s"
-#: dnsmasq.c:895
+#: dnsmasq.c:896
msgid "exiting on receipt of SIGTERM"
msgstr "keluar karena menerima SIGTERM"
# OK
-#: dnsmasq.c:913
+#: dnsmasq.c:924
#, fuzzy, c-format
msgid "failed to access %s: %s"
msgstr "gagal mengakses %s: %s"
# OK
-#: dnsmasq.c:935
+#: dnsmasq.c:954
#, c-format
msgid "reading %s"
msgstr "membaca %s"
# OK
-#: dnsmasq.c:946
+#: dnsmasq.c:965
#, fuzzy, c-format
msgid "no servers found in %s, will retry"
msgstr "tidak ditemukan direktif search di %s"
@@ -1303,266 +1355,274 @@ msgstr "gagal mem-bind socket server DHCP: %s"
msgid "cannot create ICMP raw socket: %s."
msgstr "tidak dapat membuat socket ICMP raw: %s"
-#: dhcp.c:240
+#: dhcp.c:281
#, c-format
msgid "DHCP packet received on %s which has no address"
msgstr ""
# OK
-#: dhcp.c:404
+#: dhcp.c:445
#, c-format
msgid "DHCP range %s -- %s is not consistent with netmask %s"
msgstr "jangkauan DHCP %s -- %s tidak konsisten dengan netmask %s"
# OK
-#: dhcp.c:791
+#: dhcp.c:852
#, fuzzy, c-format
msgid "bad line at %s line %d"
msgstr "kesalahan nama pada %s baris %d"
-#: dhcp.c:834
+#: dhcp.c:895
#, c-format
msgid "ignoring %s line %d, duplicate name or IP address"
msgstr ""
# OK
-#: dhcp.c:916
+#: dhcp.c:977
#, c-format
msgid "duplicate IP address %s in dhcp-config directive."
msgstr "alamat IP kembar %s dalam direktif dhcp-config"
# OK
-#: dhcp.c:919
+#: dhcp.c:980
#, fuzzy, c-format
msgid "duplicate IP address %s in %s."
msgstr "alamat IP kembar %s dalam direktif dhcp-config"
-#: dhcp.c:962
+#: dhcp.c:1023
#, c-format
msgid "%s has more than one address in hostsfile, using %s for DHCP"
msgstr ""
# OK
-#: dhcp.c:967
+#: dhcp.c:1028
#, c-format
msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr "alamat IP kembar %s (%s) dalam direktif dhcp-config"
# OK
-#: lease.c:66
+#: lease.c:67
#, fuzzy, c-format
msgid "cannot open or create lease file %s: %s"
msgstr "tidak dapat membuka atau membuat file lease: %s"
# OK
-#: lease.c:92
+#: lease.c:93
msgid "too many stored leases"
msgstr "terlalu banyak lease yang disimpan"
# OK
-#: lease.c:128
+#: lease.c:129
#, fuzzy, c-format
msgid "cannot run lease-init script %s: %s"
msgstr "tidak bisa membaca %s: %s"
-#: lease.c:134
+#: lease.c:135
#, c-format
msgid "lease-init script returned exit code %s"
msgstr ""
# OK
-#: lease.c:234
+#: lease.c:235
#, fuzzy, c-format
msgid "failed to write %s: %s (retry in %us)"
msgstr "gagal membaca %s: %s"
# OK
-#: rfc2131.c:375
+#: rfc2131.c:377
#, c-format
msgid "no address range available for DHCP request %s %s"
msgstr "tidak ada alamat yang bisa dipakai untuk permintaan DHCP %s %s"
# OK
-#: rfc2131.c:376
+#: rfc2131.c:378
msgid "with subnet selector"
msgstr "dengan pemilih subnet"
# OK
-#: rfc2131.c:376
+#: rfc2131.c:378
msgid "via"
msgstr "lewat"
-#: rfc2131.c:391
-#, c-format
-msgid "%u Available DHCP subnet: %s/%s"
-msgstr ""
+# OK
+#: rfc2131.c:393
+#, fuzzy, c-format
+msgid "%u available DHCP subnet: %s/%s"
+msgstr "tidak ada alamat yang bisa dipakai untuk permintaan DHCP %s %s"
-#: rfc2131.c:394
+#: rfc2131.c:396
#, c-format
-msgid "%u Available DHCP range: %s -- %s"
+msgid "%u available DHCP range: %s -- %s"
msgstr ""
# OK
-#: rfc2131.c:423
+#: rfc2131.c:425
msgid "disabled"
msgstr "di disable"
# OK
-#: rfc2131.c:457 rfc2131.c:928 rfc2131.c:1277
+#: rfc2131.c:466 rfc2131.c:969 rfc2131.c:1335
msgid "ignored"
msgstr "diabaikan"
# OK
-#: rfc2131.c:472 rfc2131.c:1145
+#: rfc2131.c:481 rfc2131.c:1183
msgid "address in use"
msgstr "alamat telah digunakan"
# OK
-#: rfc2131.c:486 rfc2131.c:982
+#: rfc2131.c:495 rfc2131.c:1023
msgid "no address available"
msgstr "tak ada alamat yang tersedia"
# OK
-#: rfc2131.c:493 rfc2131.c:1108
+#: rfc2131.c:502 rfc2131.c:1146
msgid "wrong network"
msgstr "jaringan yang salah"
# OK
-#: rfc2131.c:506
+#: rfc2131.c:516
msgid "no address configured"
msgstr "tak ada alamat yang disetel"
# OK
-#: rfc2131.c:512 rfc2131.c:1158
+#: rfc2131.c:522 rfc2131.c:1196
msgid "no leases left"
msgstr "tak ada lease yang tersisa"
-#: rfc2131.c:597
+#: rfc2131.c:607
#, c-format
msgid "%u client provides name: %s"
msgstr ""
-#: rfc2131.c:741
-#, c-format
-msgid "%u Vendor class: %s"
-msgstr ""
+# OK
+#: rfc2131.c:762
+#, fuzzy, c-format
+msgid "%u vendor class: %s"
+msgstr "DBus error: %s"
-#: rfc2131.c:743
-#, c-format
-msgid "%u User class: %s"
-msgstr ""
+# OK
+#: rfc2131.c:764
+#, fuzzy, c-format
+msgid "%u user class: %s"
+msgstr "DBus error: %s"
-#: rfc2131.c:782
+#: rfc2131.c:823
msgid "PXE BIS not supported"
msgstr ""
# OK
-#: rfc2131.c:898
+#: rfc2131.c:939
#, fuzzy, c-format
msgid "disabling DHCP static address %s for %s"
msgstr "men-disable alamat statik DHCP %s"
# OK
-#: rfc2131.c:919
+#: rfc2131.c:960
msgid "unknown lease"
msgstr "lease tidak diketahui"
-#: rfc2131.c:951
+#: rfc2131.c:992
#, c-format
msgid "not using configured address %s because it is leased to %s"
msgstr ""
-#: rfc2131.c:961
+#: rfc2131.c:1002
#, c-format
msgid "not using configured address %s because it is in use by the server or relay"
msgstr ""
-#: rfc2131.c:964
+#: rfc2131.c:1005
#, c-format
msgid "not using configured address %s because it was previously declined"
msgstr ""
-#: rfc2131.c:980 rfc2131.c:1151
+#: rfc2131.c:1021 rfc2131.c:1189
msgid "no unique-id"
msgstr ""
-#: rfc2131.c:1048
+#: rfc2131.c:1090
msgid "wrong server-ID"
msgstr ""
# OK
-#: rfc2131.c:1067
+#: rfc2131.c:1108
msgid "wrong address"
msgstr "alamat salah"
# OK
-#: rfc2131.c:1084
+#: rfc2131.c:1121
msgid "lease not found"
msgstr "lease tak ditemukan"
# OK
-#: rfc2131.c:1116
+#: rfc2131.c:1154
msgid "address not available"
msgstr "alamat tak tersedia"
# OK
-#: rfc2131.c:1127
+#: rfc2131.c:1165
msgid "static lease available"
msgstr "lease statik tak tersedia"
# OK
-#: rfc2131.c:1131
+#: rfc2131.c:1169
msgid "address reserved"
msgstr "alamat telah dipesan"
-#: rfc2131.c:1139
+#: rfc2131.c:1177
#, c-format
msgid "abandoning lease to %s of %s"
msgstr ""
-#: rfc2131.c:1698
+#: rfc2131.c:1757
#, c-format
msgid "%u tags: %s"
msgstr ""
-#: rfc2131.c:1711
+#: rfc2131.c:1770
#, c-format
msgid "%u bootfile name: %s"
msgstr ""
# OK
-#: rfc2131.c:1720
+#: rfc2131.c:1779
#, fuzzy, c-format
msgid "%u server name: %s"
msgstr "DBus error: %s"
# OK
-#: rfc2131.c:1728
+#: rfc2131.c:1793
#, fuzzy, c-format
msgid "%u next server: %s"
msgstr "DBus error: %s"
-#: rfc2131.c:1795
+#: rfc2131.c:1796
+#, c-format
+msgid "%u broadcast response"
+msgstr ""
+
+#: rfc2131.c:1859
#, c-format
msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
msgstr ""
-#: rfc2131.c:2032
+#: rfc2131.c:2105
msgid "PXE menu too large"
msgstr ""
-#: rfc2131.c:2143
+#: rfc2131.c:2218
#, c-format
msgid "Ignoring domain %s for DHCP host name %s"
msgstr ""
# OK
-#: rfc2131.c:2161
+#: rfc2131.c:2236
#, fuzzy, c-format
msgid "%u requested options: %s"
msgstr "pilihan-pilihan saat kompilasi: %s"
-#: rfc2131.c:2425
+#: rfc2131.c:2503
#, c-format
msgid "cannot send RFC3925 option: too many options for enterprise number %d"
msgstr ""
@@ -1606,49 +1666,49 @@ msgstr "tidak dapat membuat socket DHCP BPF: %s"
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:179
+#: tftp.c:233
msgid "unable to get free port for TFTP"
msgstr ""
-#: tftp.c:194
+#: tftp.c:248
#, c-format
msgid "unsupported request from %s"
msgstr ""
-#: tftp.c:282
+#: tftp.c:336
#, c-format
msgid "sent %s to %s"
msgstr ""
# OK
-#: tftp.c:305
+#: tftp.c:359
#, fuzzy, c-format
msgid "file %s not found"
msgstr "lease tak ditemukan"
-#: tftp.c:416
+#: tftp.c:470
#, c-format
msgid "error %d %s received from %s"
msgstr ""
# OK
-#: tftp.c:447
+#: tftp.c:501
#, fuzzy, c-format
msgid "failed sending %s to %s"
msgstr "gagal membaca %s: %s"
-#: log.c:169
+#: log.c:173
#, c-format
msgid "overflow: %d log entries lost"
msgstr ""
-#: log.c:246
+#: log.c:250
#, c-format
msgid "log failed: %s"
msgstr ""
# OK
-#: log.c:420
+#: log.c:431
msgid "FAILED to start up"
msgstr "GAGAL untuk memulai"
diff --git a/po/it.po b/po/it.po
index d4cf10e..8ac4661 100644
--- a/po/it.po
+++ b/po/it.po
@@ -20,17 +20,17 @@ msgstr ""
msgid "failed to load names from %s: %s"
msgstr ""
-#: cache.c:798 dhcp.c:804
+#: cache.c:798 dhcp.c:865
#, c-format
msgid "bad address at %s line %d"
msgstr ""
-#: cache.c:856 dhcp.c:820
+#: cache.c:856 dhcp.c:881
#, c-format
msgid "bad name at %s line %d"
msgstr ""
-#: cache.c:863 dhcp.c:894
+#: cache.c:863 dhcp.c:955
#, c-format
msgid "read %s - %d addresses"
msgstr ""
@@ -39,32 +39,37 @@ msgstr ""
msgid "cleared cache"
msgstr ""
-#: cache.c:933 option.c:1069
+#: cache.c:933 option.c:1103
#, c-format
msgid "cannot access directory %s: %s"
msgstr ""
-#: cache.c:1052
+#: cache.c:1053
+#, c-format
+msgid "%s is a CNAME, not giving it to the DHCP lease of %s"
+msgstr ""
+
+#: cache.c:1059
#, 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:1129
+#: cache.c:1132
#, c-format
msgid "time %lu"
msgstr ""
-#: cache.c:1130
+#: cache.c:1133
#, c-format
msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
msgstr ""
-#: cache.c:1132
+#: cache.c:1135
#, c-format
msgid "queries forwarded %u, queries answered locally %u"
msgstr ""
-#: cache.c:1155
+#: cache.c:1158
#, c-format
msgid "server %s#%d: queries sent %u, retried or failed %u"
msgstr ""
@@ -78,7 +83,7 @@ msgstr ""
msgid "failed to allocate memory"
msgstr ""
-#: util.c:229 option.c:549
+#: util.c:229 option.c:567
msgid "could not get memory"
msgstr ""
@@ -97,825 +102,863 @@ msgstr ""
msgid "infinite"
msgstr ""
-#: option.c:228
+#: option.c:240
msgid "Specify local address(es) to listen on."
msgstr ""
-#: option.c:229
+#: option.c:241
msgid "Return ipaddr for all hosts in specified domains."
msgstr ""
-#: option.c:230
+#: option.c:242
msgid "Fake reverse lookups for RFC1918 private address ranges."
msgstr ""
-#: option.c:231
+#: option.c:243
msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
msgstr ""
-#: option.c:232
+#: option.c:244
#, c-format
msgid "Specify the size of the cache in entries (defaults to %s)."
msgstr ""
-#: option.c:233
+#: option.c:245
#, c-format
msgid "Specify configuration file (defaults to %s)."
msgstr ""
-#: option.c:234
+#: option.c:246
msgid "Do NOT fork into the background: run in debug mode."
msgstr ""
-#: option.c:235
+#: option.c:247
msgid "Do NOT forward queries with no domain part."
msgstr ""
-#: option.c:236
+#: option.c:248
msgid "Return self-pointing MX records for local hosts."
msgstr ""
-#: option.c:237
+#: option.c:249
msgid "Expand simple names in /etc/hosts with domain-suffix."
msgstr ""
-#: option.c:238
+#: option.c:250
msgid "Don't forward spurious DNS requests from Windows hosts."
msgstr ""
-#: option.c:239
+#: option.c:251
msgid "Enable DHCP in the range given with lease duration."
msgstr ""
-#: option.c:240
+#: option.c:252
#, c-format
msgid "Change to this group after startup (defaults to %s)."
msgstr ""
-#: option.c:241
+#: option.c:253
msgid "Set address or hostname for a specified machine."
msgstr ""
-#: option.c:242
-msgid "Read DHCP host specs from file"
+#: option.c:254
+msgid "Read DHCP host specs from file."
msgstr ""
-#: option.c:243
-msgid "Read DHCP option specs from file"
+#: option.c:255
+msgid "Read DHCP option specs from file."
msgstr ""
-#: option.c:244
+#: option.c:256
+msgid "Evaluate conditional tag expression."
+msgstr ""
+
+#: option.c:257
#, c-format
msgid "Do NOT load %s file."
msgstr ""
-#: option.c:245
+#: option.c:258
#, c-format
msgid "Specify a hosts file to be read in addition to %s."
msgstr ""
-#: option.c:246
+#: option.c:259
msgid "Specify interface(s) to listen on."
msgstr ""
-#: option.c:247
+#: option.c:260
msgid "Specify interface(s) NOT to listen on."
msgstr ""
-#: option.c:248
+#: option.c:261
msgid "Map DHCP user class to tag."
msgstr ""
-#: option.c:249
+#: option.c:262
msgid "Map RFC3046 circuit-id to tag."
msgstr ""
-#: option.c:250
+#: option.c:263
msgid "Map RFC3046 remote-id to tag."
msgstr ""
-#: option.c:251
+#: option.c:264
msgid "Map RFC3993 subscriber-id to tag."
msgstr ""
-#: option.c:252
+#: option.c:265
msgid "Don't do DHCP for hosts with tag set."
msgstr ""
-#: option.c:253
+#: option.c:266
msgid "Force broadcast replies for hosts with tag set."
msgstr ""
-#: option.c:254
+#: option.c:267
msgid "Do NOT fork into the background, do NOT run in debug mode."
msgstr ""
-#: option.c:255
+#: option.c:268
msgid "Assume we are the only DHCP server on the local network."
msgstr ""
-#: option.c:256
+#: option.c:269
#, c-format
msgid "Specify where to store DHCP leases (defaults to %s)."
msgstr ""
-#: option.c:257
+#: option.c:270
msgid "Return MX records for local hosts."
msgstr ""
-#: option.c:258
+#: option.c:271
msgid "Specify an MX record."
msgstr ""
-#: option.c:259
+#: option.c:272
msgid "Specify BOOTP options to DHCP server."
msgstr ""
-#: option.c:260
+#: option.c:273
#, c-format
msgid "Do NOT poll %s file, reload only on SIGHUP."
msgstr ""
-#: option.c:261
+#: option.c:274
msgid "Do NOT cache failed search results."
msgstr ""
-#: option.c:262
+#: option.c:275
#, c-format
msgid "Use nameservers strictly in the order given in %s."
msgstr ""
-#: option.c:263
+#: option.c:276
msgid "Specify options to be sent to DHCP clients."
msgstr ""
-#: option.c:264
+#: option.c:277
msgid "DHCP option sent even if the client does not request it."
msgstr ""
-#: option.c:265
+#: option.c:278
msgid "Specify port to listen for DNS requests on (defaults to 53)."
msgstr ""
-#: option.c:266
+#: option.c:279
#, c-format
msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
msgstr ""
-#: option.c:267
+#: option.c:280
msgid "Log DNS queries."
msgstr ""
-#: option.c:268
+#: option.c:281
msgid "Force the originating port for upstream DNS queries."
msgstr ""
-#: option.c:269
+#: option.c:282
msgid "Do NOT read resolv.conf."
msgstr ""
-#: option.c:270
+#: option.c:283
#, c-format
msgid "Specify path to resolv.conf (defaults to %s)."
msgstr ""
-#: option.c:271
+#: option.c:284
msgid "Specify address(es) of upstream servers with optional domains."
msgstr ""
-#: option.c:272
+#: option.c:285
msgid "Never forward queries to specified domains."
msgstr ""
-#: option.c:273
+#: option.c:286
msgid "Specify the domain to be assigned in DHCP leases."
msgstr ""
-#: option.c:274
+#: option.c:287
msgid "Specify default target in an MX record."
msgstr ""
-#: option.c:275
+#: option.c:288
msgid "Specify time-to-live in seconds for replies from /etc/hosts."
msgstr ""
-#: option.c:276
+#: option.c:289
msgid "Specify time-to-live in seconds for negative caching."
msgstr ""
-#: option.c:277
+#: option.c:290
+msgid "Specify time-to-live in seconds for maximum TTL to send to clients."
+msgstr ""
+
+#: option.c:291
#, c-format
msgid "Change to this user after startup. (defaults to %s)."
msgstr ""
-#: option.c:278
+#: option.c:292
msgid "Map DHCP vendor class to tag."
msgstr ""
-#: option.c:279
+#: option.c:293
msgid "Display dnsmasq version and copyright information."
msgstr ""
-#: option.c:280
+#: option.c:294
msgid "Translate IPv4 addresses from upstream servers."
msgstr ""
-#: option.c:281
+#: option.c:295
msgid "Specify a SRV record."
msgstr ""
-#: option.c:282
+#: option.c:296
msgid "Display this message. Use --help dhcp for known DHCP options."
msgstr ""
-#: option.c:283
+#: option.c:297
#, c-format
msgid "Specify path of PID file (defaults to %s)."
msgstr ""
-#: option.c:284
+#: option.c:298
#, c-format
msgid "Specify maximum number of DHCP leases (defaults to %s)."
msgstr ""
-#: option.c:285
+#: option.c:299
msgid "Answer DNS queries based on the interface a query was sent to."
msgstr ""
-#: option.c:286
+#: option.c:300
msgid "Specify TXT DNS record."
msgstr ""
-#: option.c:287
+#: option.c:301
msgid "Specify PTR DNS record."
msgstr ""
-#: option.c:288
+#: option.c:302
msgid "Give DNS name to IPv4 address of interface."
msgstr ""
-#: option.c:289
+#: option.c:303
msgid "Bind only to interfaces in use."
msgstr ""
-#: option.c:290
+#: option.c:304
#, c-format
msgid "Read DHCP static host information from %s."
msgstr ""
-#: option.c:291
+#: option.c:305
msgid "Enable the DBus interface for setting upstream servers, etc."
msgstr ""
-#: option.c:292
+#: option.c:306
msgid "Do not provide DHCP on this interface, only provide DNS."
msgstr ""
-#: option.c:293
+#: option.c:307
msgid "Enable dynamic address allocation for bootp."
msgstr ""
-#: option.c:294
+#: option.c:308
msgid "Map MAC address (with wildcards) to option set."
msgstr ""
-#: option.c:295
+#: option.c:309
msgid "Treat DHCP requests on aliases as arriving from interface."
msgstr ""
-#: option.c:296
+#: option.c:310
msgid "Disable ICMP echo address checking in the DHCP server."
msgstr ""
-#: option.c:297
+#: option.c:311
msgid "Script to run on DHCP lease creation and destruction."
msgstr ""
-#: option.c:298
+#: option.c:312
msgid "Read configuration from all the files in this directory."
msgstr ""
-#: option.c:299
+#: option.c:313
msgid "Log to this syslog facility or file. (defaults to DAEMON)"
msgstr ""
-#: option.c:300
+#: option.c:314
msgid "Do not use leasefile."
msgstr ""
-#: option.c:301
+#: option.c:315
#, c-format
msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
msgstr ""
-#: option.c:302
+#: option.c:316
#, c-format
msgid "Clear DNS cache when reloading %s."
msgstr ""
-#: option.c:303
+#: option.c:317
msgid "Ignore hostnames provided by DHCP clients."
msgstr ""
-#: option.c:304
+#: option.c:318
msgid "Do NOT reuse filename and server fields for extra DHCP options."
msgstr ""
-#: option.c:305
+#: option.c:319
msgid "Enable integrated read-only TFTP server."
msgstr ""
-#: option.c:306
+#: option.c:320
msgid "Export files by TFTP only from the specified subtree."
msgstr ""
-#: option.c:307
+#: option.c:321
msgid "Add client IP address to tftp-root."
msgstr ""
-#: option.c:308
+#: option.c:322
msgid "Allow access only to files owned by the user running dnsmasq."
msgstr ""
-#: option.c:309
+#: option.c:323
#, c-format
msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
msgstr ""
-#: option.c:310
+#: option.c:324
msgid "Disable the TFTP blocksize extension."
msgstr ""
-#: option.c:311
+#: option.c:325
msgid "Ephemeral port range for use by TFTP transfers."
msgstr ""
-#: option.c:312
+#: option.c:326
msgid "Extra logging for DHCP."
msgstr ""
-#: option.c:313
+#: option.c:327
msgid "Enable async. logging; optionally set queue length."
msgstr ""
-#: option.c:314
+#: option.c:328
msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
msgstr ""
-#: option.c:315
+#: option.c:329
+msgid "Allow rebinding of 127.0.0.0/8, for RBL servers."
+msgstr ""
+
+#: option.c:330
+msgid "Inhibit DNS-rebind protection on this domain."
+msgstr ""
+
+#: option.c:331
msgid "Always perform DNS queries to all servers."
msgstr ""
-#: option.c:316
+#: option.c:332
msgid "Set tag if client includes matching option in request."
msgstr ""
-#: option.c:317
+#: option.c:333
msgid "Use alternative ports for DHCP."
msgstr ""
-#: option.c:318
+#: option.c:334
msgid "Run lease-change script as this user."
msgstr ""
-#: option.c:319
+#: option.c:335
msgid "Specify NAPTR DNS record."
msgstr ""
-#: option.c:320
+#: option.c:336
msgid "Specify lowest port available for DNS query transmission."
msgstr ""
-#: option.c:321
+#: option.c:337
msgid "Use only fully qualified domain names for DHCP clients."
msgstr ""
-#: option.c:322
+#: option.c:338
+msgid "Generate hostnames based on MAC address for nameless clients."
+msgstr ""
+
+#: option.c:339
+msgid "Use these DHCP relays as full proxies."
+msgstr ""
+
+#: option.c:340
msgid "Specify alias name for LOCAL DNS name."
msgstr ""
-#: option.c:323
+#: option.c:341
msgid "Prompt to send to PXE clients."
msgstr ""
-#: option.c:324
+#: option.c:342
msgid "Boot service for PXE menu."
msgstr ""
-#: option.c:325
+#: option.c:343
msgid "Check configuration syntax."
msgstr ""
-#: option.c:614
+#: option.c:632
#, c-format
msgid ""
"Usage: dnsmasq [options]\n"
"\n"
msgstr ""
-#: option.c:616
+#: option.c:634
#, c-format
msgid "Use short options only on the command line.\n"
msgstr ""
-#: option.c:618
+#: option.c:636
#, c-format
msgid "Valid options are:\n"
msgstr ""
-#: option.c:659
+#: option.c:677
#, c-format
msgid "Known DHCP options:\n"
msgstr ""
-#: option.c:747
+#: option.c:781
msgid "bad dhcp-option"
msgstr ""
-#: option.c:804
+#: option.c:838
msgid "bad IP address"
msgstr ""
-#: option.c:903
+#: option.c:937
msgid "bad domain in dhcp-option"
msgstr ""
-#: option.c:964
+#: option.c:998
msgid "dhcp-option too long"
msgstr ""
-#: option.c:973
+#: option.c:1007
msgid "illegal dhcp-match"
msgstr ""
-#: option.c:1009
+#: option.c:1043
msgid "illegal repeated flag"
msgstr ""
-#: option.c:1017
+#: option.c:1051
msgid "illegal repeated keyword"
msgstr ""
-#: option.c:1100 tftp.c:359
+#: option.c:1134 tftp.c:413
#, c-format
msgid "cannot access %s: %s"
msgstr ""
-#: option.c:1145
+#: option.c:1179
msgid "only one dhcp-hostsfile allowed"
msgstr ""
-#: option.c:1152
+#: option.c:1186
msgid "only one dhcp-optsfile allowed"
msgstr ""
-#: option.c:1197
+#: option.c:1231
msgid "bad MX preference"
msgstr ""
-#: option.c:1202
+#: option.c:1236
msgid "bad MX name"
msgstr ""
-#: option.c:1216
+#: option.c:1250
msgid "bad MX target"
msgstr ""
-#: option.c:1226
+#: option.c:1260
msgid "cannot run scripts under uClinux"
msgstr ""
-#: option.c:1228
+#: option.c:1262
msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts"
msgstr ""
-#: option.c:1456 option.c:1460
+#: option.c:1507 option.c:1511
msgid "bad port"
msgstr ""
-#: option.c:1479 option.c:1504
+#: option.c:1530 option.c:1555
msgid "interface binding not supported"
msgstr ""
-#: option.c:1625
+#: option.c:1701
msgid "bad port range"
msgstr ""
-#: option.c:1642
+#: option.c:1718
msgid "bad bridge-interface"
msgstr ""
-#: option.c:1683
+#: option.c:1760
msgid "bad dhcp-range"
msgstr ""
-#: option.c:1709
-msgid "only one netid tag allowed"
+#: option.c:1788
+msgid "only one tag allowed"
msgstr ""
-#: option.c:1754
+#: option.c:1835
msgid "inconsistent DHCP range"
msgstr ""
-#: option.c:1926
+#: option.c:2010
msgid "bad DHCP host name"
msgstr ""
-#: option.c:2221 option.c:2501
+#: option.c:2091
+msgid "bad tag-if"
+msgstr ""
+
+#: option.c:2365 option.c:2664
msgid "invalid port number"
msgstr ""
-#: option.c:2304
+#: option.c:2427
+msgid "bad dhcp-proxy address"
+msgstr ""
+
+#: option.c:2467
msgid "invalid alias range"
msgstr ""
-#: option.c:2317
+#: option.c:2480
msgid "bad interface name"
msgstr ""
-#: option.c:2342
+#: option.c:2505
msgid "bad CNAME"
msgstr ""
-#: option.c:2347
+#: option.c:2510
msgid "duplicate CNAME"
msgstr ""
-#: option.c:2367
+#: option.c:2530
msgid "bad PTR record"
msgstr ""
-#: option.c:2398
+#: option.c:2561
msgid "bad NAPTR record"
msgstr ""
-#: option.c:2423
+#: option.c:2586
msgid "TXT record string too long"
msgstr ""
-#: option.c:2471
+#: option.c:2634
msgid "bad TXT record"
msgstr ""
-#: option.c:2487
+#: option.c:2650
msgid "bad SRV record"
msgstr ""
-#: option.c:2494
+#: option.c:2657
msgid "bad SRV target"
msgstr ""
-#: option.c:2508
+#: option.c:2671
msgid "invalid priority"
msgstr ""
-#: option.c:2515
+#: option.c:2678
msgid "invalid weight"
msgstr ""
-#: option.c:2534
+#: option.c:2697
msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DBus support)"
msgstr ""
-#: option.c:2577
+#: option.c:2739
#, c-format
msgid "files nested too deep in %s"
msgstr ""
-#: option.c:2585 tftp.c:513
+#: option.c:2747 tftp.c:567
#, c-format
msgid "cannot read %s: %s"
msgstr ""
-#: option.c:2646
+#: option.c:2804
msgid "missing \""
msgstr ""
-#: option.c:2693
+#: option.c:2863
msgid "bad option"
msgstr ""
-#: option.c:2695
+#: option.c:2865
msgid "extraneous parameter"
msgstr ""
-#: option.c:2697
+#: option.c:2867
msgid "missing parameter"
msgstr ""
-#: option.c:2705
+#: option.c:2871
msgid "error"
msgstr ""
-#: option.c:2711
+#: option.c:2876
#, c-format
msgid "%s at line %d of %%s"
msgstr ""
-#: option.c:2760 option.c:2791
+#: option.c:2933 option.c:2964
#, c-format
msgid "read %s"
msgstr ""
-#: option.c:2863
+#: option.c:3036
#, c-format
msgid "Dnsmasq version %s %s\n"
msgstr ""
-#: option.c:2864
+#: option.c:3037
#, c-format
msgid ""
"Compile time options %s\n"
"\n"
msgstr ""
-#: option.c:2865
+#: option.c:3038
#, c-format
msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
msgstr ""
-#: option.c:2866
+#: option.c:3039
#, c-format
msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
msgstr ""
-#: option.c:2867
+#: option.c:3040
#, c-format
msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
msgstr ""
-#: option.c:2878
+#: option.c:3051
msgid "try --help"
msgstr ""
-#: option.c:2880
+#: option.c:3053
msgid "try -w"
msgstr ""
-#: option.c:2883
+#: option.c:3056
#, c-format
msgid "bad command line options: %s"
msgstr ""
-#: option.c:2924
+#: option.c:3097
#, c-format
msgid "cannot get host-name: %s"
msgstr ""
-#: option.c:2952
+#: option.c:3125
msgid "only one resolv.conf file allowed in no-poll mode."
msgstr ""
-#: option.c:2962
+#: option.c:3135
msgid "must have exactly one resolv.conf to read domain from."
msgstr ""
-#: option.c:2965 network.c:777 dhcp.c:753
+#: option.c:3138 network.c:813 dhcp.c:814
#, c-format
msgid "failed to read %s: %s"
msgstr ""
-#: option.c:2982
+#: option.c:3155
#, c-format
msgid "no search directive found in %s"
msgstr ""
-#: option.c:3003
+#: option.c:3176
msgid "there must be a default domain when --dhcp-fqdn is set"
msgstr ""
-#: option.c:3007
+#: option.c:3180
msgid "syntax check OK"
msgstr ""
-#: forward.c:405
+#: forward.c:427
#, c-format
msgid "nameserver %s refused to do a recursive query"
msgstr ""
-#: forward.c:433
-msgid "possible DNS-rebind attack detected"
+#: forward.c:455
+#, c-format
+msgid "possible DNS-rebind attack detected: %s"
msgstr ""
-#: network.c:73
+#: network.c:110
#, c-format
msgid "unknown interface %s in bridge-interface"
msgstr ""
-#: network.c:436 dnsmasq.c:189
+#: network.c:467 dnsmasq.c:188
#, c-format
msgid "failed to create listening socket: %s"
msgstr ""
-#: network.c:443
+#: network.c:474
#, c-format
msgid "failed to set IPV6 options on listening socket: %s"
msgstr ""
-#: network.c:469
+#: network.c:500
#, c-format
msgid "failed to bind listening socket for %s: %s"
msgstr ""
-#: network.c:474
+#: network.c:505
#, c-format
msgid "failed to listen on socket: %s"
msgstr ""
-#: network.c:486
+#: network.c:517
#, c-format
msgid "failed to create TFTP socket: %s"
msgstr ""
-#: network.c:680
+#: network.c:711
#, c-format
msgid "failed to bind server socket for %s: %s"
msgstr ""
-#: network.c:717
+#: network.c:748
#, c-format
msgid "ignoring nameserver %s - local interface"
msgstr ""
-#: network.c:728
+#: network.c:759
#, c-format
msgid "ignoring nameserver %s - cannot make/bind socket: %s"
msgstr ""
-#: network.c:743
+#: network.c:776
msgid "unqualified"
msgstr ""
-#: network.c:743
+#: network.c:776
msgid "names"
msgstr ""
-#: network.c:745
+#: network.c:778
msgid "default"
msgstr ""
-#: network.c:747
+#: network.c:780
msgid "domain"
msgstr ""
-#: network.c:750
+#: network.c:783
#, c-format
msgid "using local addresses only for %s %s"
msgstr ""
-#: network.c:752
+#: network.c:785
+#, c-format
+msgid "using standard nameservers for %s %s"
+msgstr ""
+
+#: network.c:787
#, c-format
msgid "using nameserver %s#%d for %s %s"
msgstr ""
-#: network.c:755
+#: network.c:790
#, c-format
msgid "using nameserver %s#%d(via %s)"
msgstr ""
-#: network.c:757
+#: network.c:792
#, c-format
msgid "using nameserver %s#%d"
msgstr ""
-#: dnsmasq.c:146
+#: dnsmasq.c:145
msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
msgstr ""
-#: dnsmasq.c:151
+#: dnsmasq.c:150
msgid "asychronous logging is not available under Solaris"
msgstr ""
-#: dnsmasq.c:170
+#: dnsmasq.c:169
#, c-format
msgid "failed to find list of interfaces: %s"
msgstr ""
-#: dnsmasq.c:178
+#: dnsmasq.c:177
#, c-format
msgid "unknown interface %s"
msgstr ""
-#: dnsmasq.c:184
+#: dnsmasq.c:183
#, c-format
msgid "no interface with address %s"
msgstr ""
-#: dnsmasq.c:201 dnsmasq.c:670
+#: dnsmasq.c:200 dnsmasq.c:671
#, c-format
msgid "DBus error: %s"
msgstr ""
-#: dnsmasq.c:204
+#: dnsmasq.c:203
msgid "DBus not available: set HAVE_DBUS in src/config.h"
msgstr ""
-#: dnsmasq.c:230
+#: dnsmasq.c:229
#, c-format
msgid "unknown user or group: %s"
msgstr ""
-#: dnsmasq.c:287
+#: dnsmasq.c:284
#, c-format
msgid "cannot chdir to filesystem root: %s"
msgstr ""
@@ -1007,75 +1050,75 @@ msgstr ""
msgid "restricting maximum simultaneous TFTP transfers to %d"
msgstr ""
-#: dnsmasq.c:672
+#: dnsmasq.c:673
msgid "connected to system DBus"
msgstr ""
-#: dnsmasq.c:767
+#: dnsmasq.c:768
#, c-format
msgid "cannot fork into background: %s"
msgstr ""
-#: dnsmasq.c:770
+#: dnsmasq.c:771
#, c-format
msgid "failed to create helper: %s"
msgstr ""
-#: dnsmasq.c:773
+#: dnsmasq.c:774
#, c-format
msgid "setting capabilities failed: %s"
msgstr ""
-#: dnsmasq.c:777
+#: dnsmasq.c:778
#, c-format
msgid "failed to change user-id to %s: %s"
msgstr ""
-#: dnsmasq.c:782
+#: dnsmasq.c:783
#, c-format
msgid "failed to change group-id to %s: %s"
msgstr ""
-#: dnsmasq.c:785
+#: dnsmasq.c:786
#, c-format
msgid "failed to open pidfile %s: %s"
msgstr ""
-#: dnsmasq.c:788
+#: dnsmasq.c:789
#, c-format
msgid "cannot open %s: %s"
msgstr ""
-#: dnsmasq.c:843
+#: dnsmasq.c:844
#, c-format
msgid "child process killed by signal %d"
msgstr ""
-#: dnsmasq.c:847
+#: dnsmasq.c:848
#, c-format
msgid "child process exited with status %d"
msgstr ""
-#: dnsmasq.c:851
+#: dnsmasq.c:852
#, c-format
msgid "failed to execute %s: %s"
msgstr ""
-#: dnsmasq.c:895
+#: dnsmasq.c:896
msgid "exiting on receipt of SIGTERM"
msgstr ""
-#: dnsmasq.c:913
+#: dnsmasq.c:924
#, c-format
msgid "failed to access %s: %s"
msgstr ""
-#: dnsmasq.c:935
+#: dnsmasq.c:954
#, c-format
msgid "reading %s"
msgstr ""
-#: dnsmasq.c:946
+#: dnsmasq.c:965
#, c-format
msgid "no servers found in %s, will retry"
msgstr ""
@@ -1105,237 +1148,242 @@ msgstr ""
msgid "cannot create ICMP raw socket: %s."
msgstr ""
-#: dhcp.c:240
+#: dhcp.c:281
#, c-format
msgid "DHCP packet received on %s which has no address"
msgstr ""
-#: dhcp.c:404
+#: dhcp.c:445
#, c-format
msgid "DHCP range %s -- %s is not consistent with netmask %s"
msgstr ""
-#: dhcp.c:791
+#: dhcp.c:852
#, c-format
msgid "bad line at %s line %d"
msgstr ""
-#: dhcp.c:834
+#: dhcp.c:895
#, c-format
msgid "ignoring %s line %d, duplicate name or IP address"
msgstr ""
-#: dhcp.c:916
+#: dhcp.c:977
#, c-format
msgid "duplicate IP address %s in dhcp-config directive."
msgstr ""
-#: dhcp.c:919
+#: dhcp.c:980
#, c-format
msgid "duplicate IP address %s in %s."
msgstr ""
-#: dhcp.c:962
+#: dhcp.c:1023
#, c-format
msgid "%s has more than one address in hostsfile, using %s for DHCP"
msgstr ""
-#: dhcp.c:967
+#: dhcp.c:1028
#, c-format
msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr ""
-#: lease.c:66
+#: lease.c:67
#, c-format
msgid "cannot open or create lease file %s: %s"
msgstr ""
-#: lease.c:92
+#: lease.c:93
msgid "too many stored leases"
msgstr ""
-#: lease.c:128
+#: lease.c:129
#, c-format
msgid "cannot run lease-init script %s: %s"
msgstr ""
-#: lease.c:134
+#: lease.c:135
#, c-format
msgid "lease-init script returned exit code %s"
msgstr ""
-#: lease.c:234
+#: lease.c:235
#, c-format
msgid "failed to write %s: %s (retry in %us)"
msgstr ""
-#: rfc2131.c:375
+#: rfc2131.c:377
#, c-format
msgid "no address range available for DHCP request %s %s"
msgstr ""
-#: rfc2131.c:376
+#: rfc2131.c:378
msgid "with subnet selector"
msgstr ""
-#: rfc2131.c:376
+#: rfc2131.c:378
msgid "via"
msgstr ""
-#: rfc2131.c:391
+#: rfc2131.c:393
#, c-format
-msgid "%u Available DHCP subnet: %s/%s"
+msgid "%u available DHCP subnet: %s/%s"
msgstr ""
-#: rfc2131.c:394
+#: rfc2131.c:396
#, c-format
-msgid "%u Available DHCP range: %s -- %s"
+msgid "%u available DHCP range: %s -- %s"
msgstr ""
-#: rfc2131.c:423
+#: rfc2131.c:425
msgid "disabled"
msgstr ""
-#: rfc2131.c:457 rfc2131.c:928 rfc2131.c:1277
+#: rfc2131.c:466 rfc2131.c:969 rfc2131.c:1335
msgid "ignored"
msgstr ""
-#: rfc2131.c:472 rfc2131.c:1145
+#: rfc2131.c:481 rfc2131.c:1183
msgid "address in use"
msgstr ""
-#: rfc2131.c:486 rfc2131.c:982
+#: rfc2131.c:495 rfc2131.c:1023
msgid "no address available"
msgstr ""
-#: rfc2131.c:493 rfc2131.c:1108
+#: rfc2131.c:502 rfc2131.c:1146
msgid "wrong network"
msgstr ""
-#: rfc2131.c:506
+#: rfc2131.c:516
msgid "no address configured"
msgstr ""
-#: rfc2131.c:512 rfc2131.c:1158
+#: rfc2131.c:522 rfc2131.c:1196
msgid "no leases left"
msgstr ""
-#: rfc2131.c:597
+#: rfc2131.c:607
#, c-format
msgid "%u client provides name: %s"
msgstr ""
-#: rfc2131.c:741
+#: rfc2131.c:762
#, c-format
-msgid "%u Vendor class: %s"
+msgid "%u vendor class: %s"
msgstr ""
-#: rfc2131.c:743
+#: rfc2131.c:764
#, c-format
-msgid "%u User class: %s"
+msgid "%u user class: %s"
msgstr ""
-#: rfc2131.c:782
+#: rfc2131.c:823
msgid "PXE BIS not supported"
msgstr ""
-#: rfc2131.c:898
+#: rfc2131.c:939
#, c-format
msgid "disabling DHCP static address %s for %s"
msgstr ""
-#: rfc2131.c:919
+#: rfc2131.c:960
msgid "unknown lease"
msgstr ""
-#: rfc2131.c:951
+#: rfc2131.c:992
#, c-format
msgid "not using configured address %s because it is leased to %s"
msgstr ""
-#: rfc2131.c:961
+#: rfc2131.c:1002
#, c-format
msgid "not using configured address %s because it is in use by the server or relay"
msgstr ""
-#: rfc2131.c:964
+#: rfc2131.c:1005
#, c-format
msgid "not using configured address %s because it was previously declined"
msgstr ""
-#: rfc2131.c:980 rfc2131.c:1151
+#: rfc2131.c:1021 rfc2131.c:1189
msgid "no unique-id"
msgstr ""
-#: rfc2131.c:1048
+#: rfc2131.c:1090
msgid "wrong server-ID"
msgstr ""
-#: rfc2131.c:1067
+#: rfc2131.c:1108
msgid "wrong address"
msgstr ""
-#: rfc2131.c:1084
+#: rfc2131.c:1121
msgid "lease not found"
msgstr ""
-#: rfc2131.c:1116
+#: rfc2131.c:1154
msgid "address not available"
msgstr ""
-#: rfc2131.c:1127
+#: rfc2131.c:1165
msgid "static lease available"
msgstr ""
-#: rfc2131.c:1131
+#: rfc2131.c:1169
msgid "address reserved"
msgstr ""
-#: rfc2131.c:1139
+#: rfc2131.c:1177
#, c-format
msgid "abandoning lease to %s of %s"
msgstr ""
-#: rfc2131.c:1698
+#: rfc2131.c:1757
#, c-format
msgid "%u tags: %s"
msgstr ""
-#: rfc2131.c:1711
+#: rfc2131.c:1770
#, c-format
msgid "%u bootfile name: %s"
msgstr ""
-#: rfc2131.c:1720
+#: rfc2131.c:1779
#, c-format
msgid "%u server name: %s"
msgstr ""
-#: rfc2131.c:1728
+#: rfc2131.c:1793
#, c-format
msgid "%u next server: %s"
msgstr ""
-#: rfc2131.c:1795
+#: rfc2131.c:1796
+#, c-format
+msgid "%u broadcast response"
+msgstr ""
+
+#: rfc2131.c:1859
#, c-format
msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
msgstr ""
-#: rfc2131.c:2032
+#: rfc2131.c:2105
msgid "PXE menu too large"
msgstr ""
-#: rfc2131.c:2143
+#: rfc2131.c:2218
#, c-format
msgid "Ignoring domain %s for DHCP host name %s"
msgstr ""
-#: rfc2131.c:2161
+#: rfc2131.c:2236
#, c-format
msgid "%u requested options: %s"
msgstr ""
-#: rfc2131.c:2425
+#: rfc2131.c:2503
#, c-format
msgid "cannot send RFC3925 option: too many options for enterprise number %d"
msgstr ""
@@ -1372,45 +1420,45 @@ msgstr ""
msgid "DHCP request for unsupported hardware type (%d) received on %s"
msgstr ""
-#: tftp.c:179
+#: tftp.c:233
msgid "unable to get free port for TFTP"
msgstr ""
-#: tftp.c:194
+#: tftp.c:248
#, c-format
msgid "unsupported request from %s"
msgstr ""
-#: tftp.c:282
+#: tftp.c:336
#, c-format
msgid "sent %s to %s"
msgstr ""
-#: tftp.c:305
+#: tftp.c:359
#, c-format
msgid "file %s not found"
msgstr ""
-#: tftp.c:416
+#: tftp.c:470
#, c-format
msgid "error %d %s received from %s"
msgstr ""
-#: tftp.c:447
+#: tftp.c:501
#, c-format
msgid "failed sending %s to %s"
msgstr ""
-#: log.c:169
+#: log.c:173
#, c-format
msgid "overflow: %d log entries lost"
msgstr ""
-#: log.c:246
+#: log.c:250
#, c-format
msgid "log failed: %s"
msgstr ""
-#: log.c:420
+#: log.c:431
msgid "FAILED to start up"
msgstr ""
diff --git a/po/no.po b/po/no.po
index 9902704..bb14641 100644
--- a/po/no.po
+++ b/po/no.po
@@ -22,17 +22,17 @@ msgstr ""
msgid "failed to load names from %s: %s"
msgstr "feilet å laste navn fra %s: %s"
-#: cache.c:798 dhcp.c:804
+#: cache.c:798 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:820
+#: cache.c:856 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:894
+#: cache.c:863 dhcp.c:955
#, c-format
msgid "read %s - %d addresses"
msgstr "les %s - %d adresser"
@@ -41,32 +41,37 @@ msgstr "les %s - %d adresser"
msgid "cleared cache"
msgstr "mellomlager tømt"
-#: cache.c:933 option.c:1069
+#: cache.c:933 option.c:1103
#, fuzzy, c-format
msgid "cannot access directory %s: %s"
msgstr "kan ikke lese %s: %s"
-#: cache.c:1052
+#: cache.c:1053
+#, c-format
+msgid "%s is a CNAME, not giving it to the DHCP lease of %s"
+msgstr ""
+
+#: cache.c:1059
#, 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:1129
+#: cache.c:1132
#, c-format
msgid "time %lu"
msgstr ""
-#: cache.c:1130
+#: cache.c:1133
#, 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:1132
+#: cache.c:1135
#, c-format
msgid "queries forwarded %u, queries answered locally %u"
msgstr ""
-#: cache.c:1155
+#: cache.c:1158
#, c-format
msgid "server %s#%d: queries sent %u, retried or failed %u"
msgstr ""
@@ -81,7 +86,7 @@ msgstr "feilet å lytte på socket: %s"
msgid "failed to allocate memory"
msgstr "feilet å laste %d bytes"
-#: util.c:229 option.c:549
+#: util.c:229 option.c:567
msgid "could not get memory"
msgstr "kunne ikke få minne"
@@ -100,429 +105,455 @@ msgstr "feilet å laste %d bytes"
msgid "infinite"
msgstr "uendelig"
-#: option.c:228
+#: option.c:240
msgid "Specify local address(es) to listen on."
msgstr "Spesifiser lokal(e) adresse(r) å lytte på."
-#: option.c:229
+#: option.c:241
msgid "Return ipaddr for all hosts in specified domains."
msgstr "Returner ipaddr for alle verter i det spesifiserte domenet."
-#: option.c:230
+#: option.c:242
msgid "Fake reverse lookups for RFC1918 private address ranges."
msgstr "Forfalsk revers oppslag for RFC1918 private adresse områder."
-#: option.c:231
+#: option.c:243
msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
msgstr "Behandle ipaddr som NXDOMAIN (omgår Verisign wildcard)."
-#: option.c:232
+#: option.c:244
#, 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:233
+#: option.c:245
#, c-format
msgid "Specify configuration file (defaults to %s)."
msgstr "Spesifiser konfigurasjonsfil (standard er %s)."
-#: option.c:234
+#: option.c:246
msgid "Do NOT fork into the background: run in debug mode."
msgstr "IKKE legg (fork) som bakgrunnsprosess: kjør i debug modus."
-#: option.c:235
+#: option.c:247
msgid "Do NOT forward queries with no domain part."
msgstr "IKKE videresend oppslag som mangler domene del."
-#: option.c:236
+#: option.c:248
msgid "Return self-pointing MX records for local hosts."
msgstr "Returner selv-pekende MX post for lokale verter."
-#: option.c:237
+#: option.c:249
msgid "Expand simple names in /etc/hosts with domain-suffix."
msgstr "Utvid enkle navn i /etc/hosts med domene-suffiks."
-#: option.c:238
+#: option.c:250
msgid "Don't forward spurious DNS requests from Windows hosts."
msgstr "Ikke videresend falske/uekte DNS forespørsler fra Windows verter."
-#: option.c:239
+#: option.c:251
msgid "Enable DHCP in the range given with lease duration."
msgstr "Aktiver DHCP i det gitte området med leie varighet"
-#: option.c:240
+#: option.c:252
#, c-format
msgid "Change to this group after startup (defaults to %s)."
msgstr "Skift til denne gruppen etter oppstart (standard er %s)."
-#: option.c:241
+#: option.c:253
msgid "Set address or hostname for a specified machine."
msgstr "Sett adresse eller vertsnavn for en spesifikk maskin."
-#: option.c:242
-msgid "Read DHCP host specs from file"
+#: option.c:254
+#, fuzzy
+msgid "Read DHCP host specs from file."
+msgstr "dårlig MX navn"
+
+#: option.c:255
+msgid "Read DHCP option specs from file."
msgstr ""
-#: option.c:243
-msgid "Read DHCP option specs from file"
+#: option.c:256
+msgid "Evaluate conditional tag expression."
msgstr ""
-#: option.c:244
+#: option.c:257
#, c-format
msgid "Do NOT load %s file."
msgstr "IKKE last %s filen."
-#: option.c:245
+#: option.c:258
#, 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:246
+#: option.c:259
msgid "Specify interface(s) to listen on."
msgstr "Spesifiser nettverkskort det skal lyttes på."
-#: option.c:247
+#: option.c:260
msgid "Specify interface(s) NOT to listen on."
msgstr "Spesifiser nettverkskort det IKKE skal lyttes på."
-#: option.c:248
+#: option.c:261
#, fuzzy
msgid "Map DHCP user class to tag."
msgstr "Map DHCP bruker klasse til opsjon sett."
-#: option.c:249
+#: option.c:262
msgid "Map RFC3046 circuit-id to tag."
msgstr ""
-#: option.c:250
+#: option.c:263
msgid "Map RFC3046 remote-id to tag."
msgstr ""
-#: option.c:251
+#: option.c:264
msgid "Map RFC3993 subscriber-id to tag."
msgstr ""
-#: option.c:252
+#: option.c:265
#, fuzzy
msgid "Don't do DHCP for hosts with tag set."
msgstr "Ikke utfør DHCP for klienter i opsjon sett."
-#: option.c:253
+#: option.c:266
#, fuzzy
msgid "Force broadcast replies for hosts with tag set."
msgstr "Ikke utfør DHCP for klienter i opsjon sett."
-#: option.c:254
+#: option.c:267
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:255
+#: option.c:268
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:256
+#: option.c:269
#, c-format
msgid "Specify where to store DHCP leases (defaults to %s)."
msgstr "Spesifiser hvor DHCP leiene skal lagres (standard er %s)."
-#: option.c:257
+#: option.c:270
msgid "Return MX records for local hosts."
msgstr "Returner MX records for lokale verter."
-#: option.c:258
+#: option.c:271
msgid "Specify an MX record."
msgstr "Spesifiser en MX post."
-#: option.c:259
+#: option.c:272
msgid "Specify BOOTP options to DHCP server."
msgstr "Spesifiser BOOTP opsjoner til DHCP tjener."
-#: option.c:260
+#: option.c:273
#, 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:261
+#: option.c:274
msgid "Do NOT cache failed search results."
msgstr "IKKE mellomlagre søkeresultater som feiler."
-#: option.c:262
+#: option.c:275
#, 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:263
+#: option.c:276
#, fuzzy
msgid "Specify options to be sent to DHCP clients."
msgstr "Sett ekstra opsjoner som skal fordeles til DHCP klientene."
-#: option.c:264
+#: option.c:277
msgid "DHCP option sent even if the client does not request it."
msgstr ""
-#: option.c:265
+#: option.c:278
msgid "Specify port to listen for DNS requests on (defaults to 53)."
msgstr "Spesifiser lytteport for DNS oppslag (standard er 53)."
-#: option.c:266
+#: option.c:279
#, 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:267
+#: option.c:280
#, fuzzy
msgid "Log DNS queries."
msgstr "Logg oppslag."
-#: option.c:268
+#: option.c:281
#, fuzzy
msgid "Force the originating port for upstream DNS queries."
msgstr "Tving bruk av opprinnelig port for oppstrøms oppslag."
-#: option.c:269
+#: option.c:282
msgid "Do NOT read resolv.conf."
msgstr "IKKE les resolv.conf."
-#: option.c:270
+#: option.c:283
#, c-format
msgid "Specify path to resolv.conf (defaults to %s)."
msgstr "Spesifiser stien til resolv.conf (standard er %s)."
-#: option.c:271
+#: option.c:284
msgid "Specify address(es) of upstream servers with optional domains."
msgstr "Spesifiser adressen(e) til oppstrøms tjenere med valgfrie domener."
-#: option.c:272
+#: option.c:285
msgid "Never forward queries to specified domains."
msgstr "Aldri videresend oppslag til spesifiserte domener."
-#: option.c:273
+#: option.c:286
msgid "Specify the domain to be assigned in DHCP leases."
msgstr "Spesifiser domenet som skal tildeles i DHCP leien."
-#: option.c:274
+#: option.c:287
msgid "Specify default target in an MX record."
msgstr "Spesifiser default mål i en MX post."
-#: option.c:275
+#: option.c:288
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:276
+#: option.c:289
#, 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:277
+#: option.c:290
+#, 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
#, c-format
msgid "Change to this user after startup. (defaults to %s)."
msgstr "Skift til denne bruker etter oppstart (standard er %s)."
-#: option.c:278
+#: option.c:292
#, fuzzy
msgid "Map DHCP vendor class to tag."
msgstr "Map DHCP produsent klasse til opsjon sett."
-#: option.c:279
+#: option.c:293
msgid "Display dnsmasq version and copyright information."
msgstr "Vis dnsmasq versjon og copyright informasjon."
-#: option.c:280
+#: option.c:294
msgid "Translate IPv4 addresses from upstream servers."
msgstr "Oversett IPv4 adresser fra oppstrøms tjenere."
-#: option.c:281
+#: option.c:295
msgid "Specify a SRV record."
msgstr "Spesifiser en SRV post."
-#: option.c:282
+#: option.c:296
msgid "Display this message. Use --help dhcp for known DHCP options."
msgstr ""
-#: option.c:283
+#: option.c:297
#, fuzzy, c-format
msgid "Specify path of PID file (defaults to %s)."
msgstr "Spesifiser stien til PID fil. (standard er %s)."
-#: option.c:284
+#: option.c:298
#, c-format
msgid "Specify maximum number of DHCP leases (defaults to %s)."
msgstr "Spesifiser maksimum antall DHCP leier (standard er %s)"
-#: option.c:285
+#: option.c:299
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:286
+#: option.c:300
msgid "Specify TXT DNS record."
msgstr "Spesifiser TXT DNS post."
-#: option.c:287
+#: option.c:301
#, fuzzy
msgid "Specify PTR DNS record."
msgstr "Spesifiser TXT DNS post."
-#: option.c:288
+#: option.c:302
msgid "Give DNS name to IPv4 address of interface."
msgstr ""
-#: option.c:289
+#: option.c:303
msgid "Bind only to interfaces in use."
msgstr "Bind kun til nettverkskort som er i bruk."
-#: option.c:290
+#: option.c:304
#, c-format
msgid "Read DHCP static host information from %s."
msgstr "Les DHCP statisk vert informasjon fra %s."
-#: option.c:291
+#: option.c:305
msgid "Enable the DBus interface for setting upstream servers, etc."
msgstr "Aktiver DBus interface for å sette oppstrøms tjenere, osv."
-#: option.c:292
+#: option.c:306
msgid "Do not provide DHCP on this interface, only provide DNS."
msgstr "Ikke lever DHCP på dette nettverkskortet, kun lever DNS."
-#: option.c:293
+#: option.c:307
msgid "Enable dynamic address allocation for bootp."
msgstr "Aktiver dynamisk adresse allokering for bootp."
-#: option.c:294
+#: option.c:308
#, fuzzy
msgid "Map MAC address (with wildcards) to option set."
msgstr "Map DHCP produsent klasse til opsjon sett."
-#: option.c:295
+#: option.c:309
msgid "Treat DHCP requests on aliases as arriving from interface."
msgstr ""
-#: option.c:296
+#: option.c:310
msgid "Disable ICMP echo address checking in the DHCP server."
msgstr ""
-#: option.c:297
+#: option.c:311
msgid "Script to run on DHCP lease creation and destruction."
msgstr ""
-#: option.c:298
+#: option.c:312
msgid "Read configuration from all the files in this directory."
msgstr ""
-#: option.c:299
+#: option.c:313
#, fuzzy
msgid "Log to this syslog facility or file. (defaults to DAEMON)"
msgstr "Skift til denne bruker etter oppstart (standard er %s)."
-#: option.c:300
+#: option.c:314
msgid "Do not use leasefile."
msgstr ""
-#: option.c:301
+#: option.c:315
#, fuzzy, c-format
msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
msgstr "Spesifiser maksimum antall DHCP leier (standard er %s)"
-#: option.c:302
+#: option.c:316
#, c-format
msgid "Clear DNS cache when reloading %s."
msgstr ""
-#: option.c:303
+#: option.c:317
msgid "Ignore hostnames provided by DHCP clients."
msgstr ""
-#: option.c:304
+#: option.c:318
msgid "Do NOT reuse filename and server fields for extra DHCP options."
msgstr ""
-#: option.c:305
+#: option.c:319
msgid "Enable integrated read-only TFTP server."
msgstr ""
-#: option.c:306
+#: option.c:320
msgid "Export files by TFTP only from the specified subtree."
msgstr ""
-#: option.c:307
+#: option.c:321
msgid "Add client IP address to tftp-root."
msgstr ""
-#: option.c:308
+#: option.c:322
msgid "Allow access only to files owned by the user running dnsmasq."
msgstr ""
-#: option.c:309
+#: option.c:323
#, fuzzy, c-format
msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
msgstr "Spesifiser maksimum antall DHCP leier (standard er %s)"
-#: option.c:310
+#: option.c:324
msgid "Disable the TFTP blocksize extension."
msgstr ""
-#: option.c:311
+#: option.c:325
msgid "Ephemeral port range for use by TFTP transfers."
msgstr ""
-#: option.c:312
+#: option.c:326
msgid "Extra logging for DHCP."
msgstr ""
-#: option.c:313
+#: option.c:327
msgid "Enable async. logging; optionally set queue length."
msgstr ""
-#: option.c:314
+#: option.c:328
msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
msgstr ""
-#: option.c:315
+#: option.c:329
+msgid "Allow rebinding of 127.0.0.0/8, for RBL servers."
+msgstr ""
+
+#: option.c:330
+msgid "Inhibit DNS-rebind protection on this domain."
+msgstr ""
+
+#: option.c:331
msgid "Always perform DNS queries to all servers."
msgstr ""
-#: option.c:316
+#: option.c:332
msgid "Set tag if client includes matching option in request."
msgstr ""
-#: option.c:317
+#: option.c:333
msgid "Use alternative ports for DHCP."
msgstr ""
-#: option.c:318
+#: option.c:334
msgid "Run lease-change script as this user."
msgstr ""
-#: option.c:319
+#: option.c:335
#, fuzzy
msgid "Specify NAPTR DNS record."
msgstr "Spesifiser TXT DNS post."
-#: option.c:320
+#: option.c:336
msgid "Specify lowest port available for DNS query transmission."
msgstr ""
-#: option.c:321
+#: option.c:337
msgid "Use only fully qualified domain names for DHCP clients."
msgstr ""
-#: option.c:322
+#: option.c:338
+msgid "Generate hostnames based on MAC address for nameless clients."
+msgstr ""
+
+#: option.c:339
+msgid "Use these DHCP relays as full proxies."
+msgstr ""
+
+#: option.c:340
msgid "Specify alias name for LOCAL DNS name."
msgstr ""
-#: option.c:323
+#: option.c:341
#, fuzzy
msgid "Prompt to send to PXE clients."
msgstr "Sett ekstra opsjoner som skal fordeles til DHCP klientene."
-#: option.c:324
+#: option.c:342
msgid "Boot service for PXE menu."
msgstr ""
-#: option.c:325
+#: option.c:343
msgid "Check configuration syntax."
msgstr ""
-#: option.c:614
+#: option.c:632
#, c-format
msgid ""
"Usage: dnsmasq [options]\n"
@@ -531,223 +562,233 @@ msgstr ""
"Bruk: dnsmasq [opsjoner]\n"
"\n"
-#: option.c:616
+#: option.c:634
#, c-format
msgid "Use short options only on the command line.\n"
msgstr "Bruk korte opsjoner kun på kommandolinjen.\n"
-#: option.c:618
+#: option.c:636
#, fuzzy, c-format
msgid "Valid options are:\n"
msgstr "Gyldige opsjoner er :\n"
-#: option.c:659
+#: option.c:677
#, c-format
msgid "Known DHCP options:\n"
msgstr ""
-#: option.c:747
+#: option.c:781
msgid "bad dhcp-option"
msgstr "dårlig dhcp-opsjon"
-#: option.c:804
+#: option.c:838
#, fuzzy
msgid "bad IP address"
msgstr "les %s - %d adresser"
-#: option.c:903
+#: option.c:937
msgid "bad domain in dhcp-option"
msgstr "dårlig domene i dhcp-opsjon"
-#: option.c:964
+#: option.c:998
msgid "dhcp-option too long"
msgstr "dhcp-opsjon for lang"
-#: option.c:973
+#: option.c:1007
msgid "illegal dhcp-match"
msgstr ""
-#: option.c:1009
+#: option.c:1043
msgid "illegal repeated flag"
msgstr ""
-#: option.c:1017
+#: option.c:1051
msgid "illegal repeated keyword"
msgstr ""
-#: option.c:1100 tftp.c:359
+#: option.c:1134 tftp.c:413
#, fuzzy, c-format
msgid "cannot access %s: %s"
msgstr "kan ikke lese %s: %s"
-#: option.c:1145
+#: option.c:1179
msgid "only one dhcp-hostsfile allowed"
msgstr ""
-#: option.c:1152
+#: option.c:1186
msgid "only one dhcp-optsfile allowed"
msgstr ""
-#: option.c:1197
+#: option.c:1231
msgid "bad MX preference"
msgstr "dårlig MX preferanse"
-#: option.c:1202
+#: option.c:1236
msgid "bad MX name"
msgstr "dårlig MX navn"
-#: option.c:1216
+#: option.c:1250
msgid "bad MX target"
msgstr "dårlig MX mål"
-#: option.c:1226
+#: option.c:1260
msgid "cannot run scripts under uClinux"
msgstr ""
-#: option.c:1228
+#: option.c:1262
msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts"
msgstr ""
-#: option.c:1456 option.c:1460
+#: option.c:1507 option.c:1511
msgid "bad port"
msgstr "dårlig port"
-#: option.c:1479 option.c:1504
+#: option.c:1530 option.c:1555
msgid "interface binding not supported"
msgstr ""
-#: option.c:1625
+#: option.c:1701
#, fuzzy
msgid "bad port range"
msgstr "dårlig port"
-#: option.c:1642
+#: option.c:1718
msgid "bad bridge-interface"
msgstr ""
-#: option.c:1683
+#: option.c:1760
msgid "bad dhcp-range"
msgstr "dårlig dhcp-område"
-#: option.c:1709
-msgid "only one netid tag allowed"
+#: option.c:1788
+msgid "only one tag allowed"
msgstr ""
-#: option.c:1754
+#: option.c:1835
msgid "inconsistent DHCP range"
msgstr "ikke konsistent DHCP område"
-#: option.c:1926
+#: option.c:2010
#, fuzzy
msgid "bad DHCP host name"
msgstr "dårlig MX navn"
-#: option.c:2221 option.c:2501
+#: option.c:2091
+#, fuzzy
+msgid "bad tag-if"
+msgstr "dårlig MX mål"
+
+#: option.c:2365 option.c:2664
msgid "invalid port number"
msgstr "ugyldig portnummer"
-#: option.c:2304
+#: option.c:2427
+#, fuzzy
+msgid "bad dhcp-proxy address"
+msgstr "les %s - %d adresser"
+
+#: option.c:2467
#, fuzzy
msgid "invalid alias range"
msgstr "ugyldig vekt"
-#: option.c:2317
+#: option.c:2480
#, fuzzy
msgid "bad interface name"
msgstr "dårlig MX navn"
-#: option.c:2342
+#: option.c:2505
msgid "bad CNAME"
msgstr ""
-#: option.c:2347
+#: option.c:2510
msgid "duplicate CNAME"
msgstr ""
-#: option.c:2367
+#: option.c:2530
#, fuzzy
msgid "bad PTR record"
msgstr "dårlig SRV post"
-#: option.c:2398
+#: option.c:2561
#, fuzzy
msgid "bad NAPTR record"
msgstr "dårlig SRV post"
-#: option.c:2423
+#: option.c:2586
msgid "TXT record string too long"
msgstr "TXT post streng for lang"
-#: option.c:2471
+#: option.c:2634
msgid "bad TXT record"
msgstr "dårlig TXT post"
-#: option.c:2487
+#: option.c:2650
msgid "bad SRV record"
msgstr "dårlig SRV post"
-#: option.c:2494
+#: option.c:2657
msgid "bad SRV target"
msgstr "dårlig SRV mål"
-#: option.c:2508
+#: option.c:2671
msgid "invalid priority"
msgstr "ugyldig prioritet"
-#: option.c:2515
+#: option.c:2678
msgid "invalid weight"
msgstr "ugyldig vekt"
-#: option.c:2534
+#: option.c:2697
msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DBus support)"
msgstr ""
-#: option.c:2577
+#: option.c:2739
#, c-format
msgid "files nested too deep in %s"
msgstr ""
-#: option.c:2585 tftp.c:513
+#: option.c:2747 tftp.c:567
#, c-format
msgid "cannot read %s: %s"
msgstr "kan ikke lese %s: %s"
-#: option.c:2646
+#: option.c:2804
msgid "missing \""
msgstr "mangler \""
-#: option.c:2693
+#: option.c:2863
msgid "bad option"
msgstr "dårlig opsjon"
-#: option.c:2695
+#: option.c:2865
msgid "extraneous parameter"
msgstr "overflødig parameter"
-#: option.c:2697
+#: option.c:2867
msgid "missing parameter"
msgstr "mangler parameter"
-#: option.c:2705
+#: option.c:2871
msgid "error"
msgstr "feil"
-#: option.c:2711
+#: option.c:2876
#, c-format
msgid "%s at line %d of %%s"
msgstr "%s på linje %d av %%s"
-#: option.c:2760 option.c:2791
+#: option.c:2933 option.c:2964
#, fuzzy, c-format
msgid "read %s"
msgstr "leser %s"
-#: option.c:2863
+#: option.c:3036
#, c-format
msgid "Dnsmasq version %s %s\n"
msgstr "Dnsmasq versjon %s %s\n"
-#: option.c:2864
+#: option.c:3037
#, c-format
msgid ""
"Compile time options %s\n"
@@ -756,194 +797,200 @@ msgstr ""
"Kompileringsopsjoner %s\n"
"\n"
-#: option.c:2865
+#: option.c:3038
#, c-format
msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
msgstr "Denne programvaren kommer med ABSOLUTT INGEN GARANTI.\n"
-#: option.c:2866
+#: option.c:3039
#, 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:2867
+#: option.c:3040
#, 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:2878
+#: option.c:3051
msgid "try --help"
msgstr ""
-#: option.c:2880
+#: option.c:3053
msgid "try -w"
msgstr ""
-#: option.c:2883
+#: option.c:3056
#, fuzzy, c-format
msgid "bad command line options: %s"
msgstr "dårlige kommandlinje opsjoner: %s."
-#: option.c:2924
+#: option.c:3097
#, c-format
msgid "cannot get host-name: %s"
msgstr "klarer ikke å få vertsnavn: %s"
-#: option.c:2952
+#: option.c:3125
msgid "only one resolv.conf file allowed in no-poll mode."
msgstr "kun en resolv.conf fil tillat i no-poll modus."
-#: option.c:2962
+#: option.c:3135
msgid "must have exactly one resolv.conf to read domain from."
msgstr "må ha nøyaktig en resolv.conf å lese domene fra."
-#: option.c:2965 network.c:777 dhcp.c:753
+#: option.c:3138 network.c:813 dhcp.c:814
#, fuzzy, c-format
msgid "failed to read %s: %s"
msgstr "feilet å lese %s: %s"
-#: option.c:2982
+#: option.c:3155
#, c-format
msgid "no search directive found in %s"
msgstr "intet søke direktiv funnet i %s"
-#: option.c:3003
+#: option.c:3176
msgid "there must be a default domain when --dhcp-fqdn is set"
msgstr ""
-#: option.c:3007
+#: option.c:3180
msgid "syntax check OK"
msgstr ""
-#: forward.c:405
+#: forward.c:427
#, c-format
msgid "nameserver %s refused to do a recursive query"
msgstr "navnetjener %s nektet å gjøre et rekursivt oppslag"
-#: forward.c:433
-msgid "possible DNS-rebind attack detected"
+#: forward.c:455
+#, c-format
+msgid "possible DNS-rebind attack detected: %s"
msgstr ""
-#: network.c:73
+#: network.c:110
#, fuzzy, c-format
msgid "unknown interface %s in bridge-interface"
msgstr "ukjent tilknytning (interface) %s"
-#: network.c:436 dnsmasq.c:189
+#: network.c:467 dnsmasq.c:188
#, c-format
msgid "failed to create listening socket: %s"
msgstr "feilet å lage lytte socket: %s"
-#: network.c:443
+#: 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:469
+#: network.c:500
#, c-format
msgid "failed to bind listening socket for %s: %s"
msgstr "feilet å binde lytte socket for %s: %s"
-#: network.c:474
+#: network.c:505
#, c-format
msgid "failed to listen on socket: %s"
msgstr "feilet å lytte på socket: %s"
-#: network.c:486
+#: network.c:517
#, fuzzy, c-format
msgid "failed to create TFTP socket: %s"
msgstr "feilet å lage lytte socket: %s"
-#: network.c:680
+#: network.c:711
#, fuzzy, c-format
msgid "failed to bind server socket for %s: %s"
msgstr "feilet å binde lytte socket for %s: %s"
-#: network.c:717
+#: network.c:748
#, c-format
msgid "ignoring nameserver %s - local interface"
msgstr "ignorerer navnetjener %s - lokal tilknytning"
-#: network.c:728
+#: network.c:759
#, fuzzy, c-format
msgid "ignoring nameserver %s - cannot make/bind socket: %s"
msgstr "ignorerer navnetjener %s - kan ikke lage/dinde socket: %s"
-#: network.c:743
+#: network.c:776
msgid "unqualified"
msgstr "ikke kvalifisert"
-#: network.c:743
+#: network.c:776
msgid "names"
msgstr ""
-#: network.c:745
+#: network.c:778
msgid "default"
msgstr ""
-#: network.c:747
+#: network.c:780
msgid "domain"
msgstr "domene"
-#: network.c:750
+#: network.c:783
#, c-format
msgid "using local addresses only for %s %s"
msgstr "benytter lokale adresser kun for %s %s"
-#: network.c:752
+#: network.c:785
+#, fuzzy, c-format
+msgid "using standard nameservers for %s %s"
+msgstr "benytter navnetjener %s#%d for %s %s"
+
+#: network.c:787
#, c-format
msgid "using nameserver %s#%d for %s %s"
msgstr "benytter navnetjener %s#%d for %s %s"
-#: network.c:755
+#: network.c:790
#, fuzzy, c-format
msgid "using nameserver %s#%d(via %s)"
msgstr "benytter navnetjener %s#%d"
-#: network.c:757
+#: network.c:792
#, c-format
msgid "using nameserver %s#%d"
msgstr "benytter navnetjener %s#%d"
-#: dnsmasq.c:146
+#: dnsmasq.c:145
#, fuzzy
msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
msgstr "DBus ikke tilgjengelig: sett HAVE_DBUS i src/config.h"
-#: dnsmasq.c:151
+#: dnsmasq.c:150
msgid "asychronous logging is not available under Solaris"
msgstr ""
-#: dnsmasq.c:170
+#: dnsmasq.c:169
#, c-format
msgid "failed to find list of interfaces: %s"
msgstr "feilet å finne liste av tilknytninger (interfaces): %s"
-#: dnsmasq.c:178
+#: dnsmasq.c:177
#, c-format
msgid "unknown interface %s"
msgstr "ukjent tilknytning (interface) %s"
-#: dnsmasq.c:184
+#: dnsmasq.c:183
#, c-format
msgid "no interface with address %s"
msgstr "ingen tilknytning (interface) med adresse %s"
-#: dnsmasq.c:201 dnsmasq.c:670
+#: dnsmasq.c:200 dnsmasq.c:671
#, c-format
msgid "DBus error: %s"
msgstr "DBus feil: %s"
-#: dnsmasq.c:204
+#: dnsmasq.c:203
msgid "DBus not available: set HAVE_DBUS in src/config.h"
msgstr "DBus ikke tilgjengelig: sett HAVE_DBUS i src/config.h"
-#: dnsmasq.c:230
+#: dnsmasq.c:229
#, c-format
msgid "unknown user or group: %s"
msgstr ""
-#: dnsmasq.c:287
+#: dnsmasq.c:284
#, c-format
msgid "cannot chdir to filesystem root: %s"
msgstr ""
@@ -1037,75 +1084,75 @@ msgstr ""
msgid "restricting maximum simultaneous TFTP transfers to %d"
msgstr ""
-#: dnsmasq.c:672
+#: dnsmasq.c:673
msgid "connected to system DBus"
msgstr "tilkoblet til system DBus"
-#: dnsmasq.c:767
+#: dnsmasq.c:768
#, c-format
msgid "cannot fork into background: %s"
msgstr ""
-#: dnsmasq.c:770
+#: dnsmasq.c:771
#, fuzzy, c-format
msgid "failed to create helper: %s"
msgstr "feilet å lese %s: %s"
-#: dnsmasq.c:773
+#: dnsmasq.c:774
#, c-format
msgid "setting capabilities failed: %s"
msgstr ""
-#: dnsmasq.c:777
+#: dnsmasq.c:778
#, fuzzy, c-format
msgid "failed to change user-id to %s: %s"
msgstr "feilet å laste navn fra %s: %s"
-#: dnsmasq.c:782
+#: dnsmasq.c:783
#, fuzzy, c-format
msgid "failed to change group-id to %s: %s"
msgstr "feilet å laste navn fra %s: %s"
-#: dnsmasq.c:785
+#: dnsmasq.c:786
#, fuzzy, c-format
msgid "failed to open pidfile %s: %s"
msgstr "feilet å lese %s: %s"
-#: dnsmasq.c:788
+#: dnsmasq.c:789
#, fuzzy, c-format
msgid "cannot open %s: %s"
msgstr "kan ikke åpne %s:%s"
-#: dnsmasq.c:843
+#: dnsmasq.c:844
#, c-format
msgid "child process killed by signal %d"
msgstr ""
-#: dnsmasq.c:847
+#: dnsmasq.c:848
#, c-format
msgid "child process exited with status %d"
msgstr ""
-#: dnsmasq.c:851
+#: dnsmasq.c:852
#, fuzzy, c-format
msgid "failed to execute %s: %s"
msgstr "feilet å få tilgang til %s: %s"
-#: dnsmasq.c:895
+#: dnsmasq.c:896
msgid "exiting on receipt of SIGTERM"
msgstr "avslutter etter mottak av SIGTERM"
-#: dnsmasq.c:913
+#: dnsmasq.c:924
#, fuzzy, c-format
msgid "failed to access %s: %s"
msgstr "feilet å få tilgang til %s: %s"
-#: dnsmasq.c:935
+#: dnsmasq.c:954
#, c-format
msgid "reading %s"
msgstr "leser %s"
-#: dnsmasq.c:946
+#: dnsmasq.c:965
#, fuzzy, c-format
msgid "no servers found in %s, will retry"
msgstr "intet søke direktiv funnet i %s"
@@ -1135,237 +1182,242 @@ msgstr "feilet å binde DHCP tjener socket: %s"
msgid "cannot create ICMP raw socket: %s."
msgstr "kan ikke lage ICMP raw socket: %s"
-#: dhcp.c:240
+#: dhcp.c:281
#, c-format
msgid "DHCP packet received on %s which has no address"
msgstr ""
-#: dhcp.c:404
+#: dhcp.c:445
#, c-format
msgid "DHCP range %s -- %s is not consistent with netmask %s"
msgstr "DHCP område %s -- %s er ikke konsistent med nettmaske %s"
-#: dhcp.c:791
+#: dhcp.c:852
#, c-format
msgid "bad line at %s line %d"
msgstr "dårlig linje ved %s linje %d"
-#: dhcp.c:834
+#: dhcp.c:895
#, c-format
msgid "ignoring %s line %d, duplicate name or IP address"
msgstr ""
-#: dhcp.c:916
+#: dhcp.c:977
#, c-format
msgid "duplicate IP address %s in dhcp-config directive."
msgstr "dubliserte IP adresser i %s dhcp-config direktiv."
-#: dhcp.c:919
+#: dhcp.c:980
#, fuzzy, c-format
msgid "duplicate IP address %s in %s."
msgstr "dubliserte IP adresser i %s dhcp-config direktiv."
-#: dhcp.c:962
+#: dhcp.c:1023
#, c-format
msgid "%s has more than one address in hostsfile, using %s for DHCP"
msgstr ""
-#: dhcp.c:967
+#: dhcp.c:1028
#, c-format
msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr "dubliserte IP adresser i %s (%s) i dhcp-config direktiv"
-#: lease.c:66
+#: lease.c:67
#, fuzzy, c-format
msgid "cannot open or create lease file %s: %s"
msgstr "kan ikke åpne eller lage leie fil: %s"
-#: lease.c:92
+#: lease.c:93
msgid "too many stored leases"
msgstr "for mange lagrede leier"
-#: lease.c:128
+#: lease.c:129
#, fuzzy, c-format
msgid "cannot run lease-init script %s: %s"
msgstr "kan ikke lese %s: %s"
-#: lease.c:134
+#: lease.c:135
#, c-format
msgid "lease-init script returned exit code %s"
msgstr ""
-#: lease.c:234
+#: lease.c:235
#, fuzzy, c-format
msgid "failed to write %s: %s (retry in %us)"
msgstr "feilet å lese %s: %s"
-#: rfc2131.c:375
+#: rfc2131.c:377
#, c-format
msgid "no address range available for DHCP request %s %s"
msgstr "ingen adresse område tilgjengelig for DHCP krav %s %s"
-#: rfc2131.c:376
+#: rfc2131.c:378
msgid "with subnet selector"
msgstr "med subnet velger"
-#: rfc2131.c:376
+#: rfc2131.c:378
msgid "via"
msgstr "via"
-#: rfc2131.c:391
-#, c-format
-msgid "%u Available DHCP subnet: %s/%s"
-msgstr ""
+#: rfc2131.c:393
+#, fuzzy, c-format
+msgid "%u available DHCP subnet: %s/%s"
+msgstr "ingen adresse område tilgjengelig for DHCP krav %s %s"
-#: rfc2131.c:394
+#: rfc2131.c:396
#, c-format
-msgid "%u Available DHCP range: %s -- %s"
+msgid "%u available DHCP range: %s -- %s"
msgstr ""
-#: rfc2131.c:423
+#: rfc2131.c:425
msgid "disabled"
msgstr "deaktivert"
-#: rfc2131.c:457 rfc2131.c:928 rfc2131.c:1277
+#: rfc2131.c:466 rfc2131.c:969 rfc2131.c:1335
msgid "ignored"
msgstr "oversett"
-#: rfc2131.c:472 rfc2131.c:1145
+#: rfc2131.c:481 rfc2131.c:1183
msgid "address in use"
msgstr "adresse i bruk"
-#: rfc2131.c:486 rfc2131.c:982
+#: rfc2131.c:495 rfc2131.c:1023
msgid "no address available"
msgstr "ingen adresse tilgjengelig"
-#: rfc2131.c:493 rfc2131.c:1108
+#: rfc2131.c:502 rfc2131.c:1146
msgid "wrong network"
msgstr "galt nettverk"
-#: rfc2131.c:506
+#: rfc2131.c:516
msgid "no address configured"
msgstr "ingen adresse konfigurert"
-#: rfc2131.c:512 rfc2131.c:1158
+#: rfc2131.c:522 rfc2131.c:1196
msgid "no leases left"
msgstr "ingen leier igjen"
-#: rfc2131.c:597
+#: rfc2131.c:607
#, c-format
msgid "%u client provides name: %s"
msgstr ""
-#: rfc2131.c:741
-#, c-format
-msgid "%u Vendor class: %s"
-msgstr ""
+#: rfc2131.c:762
+#, fuzzy, c-format
+msgid "%u vendor class: %s"
+msgstr "DBus feil: %s"
-#: rfc2131.c:743
-#, c-format
-msgid "%u User class: %s"
-msgstr ""
+#: rfc2131.c:764
+#, fuzzy, c-format
+msgid "%u user class: %s"
+msgstr "DBus feil: %s"
-#: rfc2131.c:782
+#: rfc2131.c:823
msgid "PXE BIS not supported"
msgstr ""
-#: rfc2131.c:898
+#: rfc2131.c:939
#, fuzzy, c-format
msgid "disabling DHCP static address %s for %s"
msgstr "deaktiverer DHCP statisk adresse %s"
-#: rfc2131.c:919
+#: rfc2131.c:960
msgid "unknown lease"
msgstr "ukjent leie"
-#: rfc2131.c:951
+#: rfc2131.c:992
#, c-format
msgid "not using configured address %s because it is leased to %s"
msgstr ""
-#: rfc2131.c:961
+#: rfc2131.c:1002
#, c-format
msgid "not using configured address %s because it is in use by the server or relay"
msgstr ""
-#: rfc2131.c:964
+#: rfc2131.c:1005
#, c-format
msgid "not using configured address %s because it was previously declined"
msgstr ""
-#: rfc2131.c:980 rfc2131.c:1151
+#: rfc2131.c:1021 rfc2131.c:1189
msgid "no unique-id"
msgstr ""
-#: rfc2131.c:1048
+#: rfc2131.c:1090
msgid "wrong server-ID"
msgstr ""
-#: rfc2131.c:1067
+#: rfc2131.c:1108
msgid "wrong address"
msgstr "gal adresse"
-#: rfc2131.c:1084
+#: rfc2131.c:1121
msgid "lease not found"
msgstr "leie ikke funnet"
-#: rfc2131.c:1116
+#: rfc2131.c:1154
msgid "address not available"
msgstr "adresse ikke tilgjengelig"
-#: rfc2131.c:1127
+#: rfc2131.c:1165
msgid "static lease available"
msgstr "statisk leie tilgjengelig"
-#: rfc2131.c:1131
+#: rfc2131.c:1169
msgid "address reserved"
msgstr "adresse reservert"
-#: rfc2131.c:1139
+#: rfc2131.c:1177
#, c-format
msgid "abandoning lease to %s of %s"
msgstr ""
-#: rfc2131.c:1698
+#: rfc2131.c:1757
#, c-format
msgid "%u tags: %s"
msgstr ""
-#: rfc2131.c:1711
+#: rfc2131.c:1770
#, c-format
msgid "%u bootfile name: %s"
msgstr ""
-#: rfc2131.c:1720
+#: rfc2131.c:1779
#, fuzzy, c-format
msgid "%u server name: %s"
msgstr "DBus feil: %s"
-#: rfc2131.c:1728
+#: rfc2131.c:1793
#, fuzzy, c-format
msgid "%u next server: %s"
msgstr "DBus feil: %s"
-#: rfc2131.c:1795
+#: rfc2131.c:1796
+#, c-format
+msgid "%u broadcast response"
+msgstr ""
+
+#: rfc2131.c:1859
#, 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:2032
+#: rfc2131.c:2105
msgid "PXE menu too large"
msgstr ""
-#: rfc2131.c:2143
+#: rfc2131.c:2218
#, c-format
msgid "Ignoring domain %s for DHCP host name %s"
msgstr ""
-#: rfc2131.c:2161
+#: rfc2131.c:2236
#, fuzzy, c-format
msgid "%u requested options: %s"
msgstr "kompilerings opsjoner: %s"
-#: rfc2131.c:2425
+#: rfc2131.c:2503
#, c-format
msgid "cannot send RFC3925 option: too many options for enterprise number %d"
msgstr ""
@@ -1402,46 +1454,46 @@ msgstr "kan ikke lage DHCP BPF socket: %s"
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:179
+#: tftp.c:233
msgid "unable to get free port for TFTP"
msgstr ""
-#: tftp.c:194
+#: tftp.c:248
#, c-format
msgid "unsupported request from %s"
msgstr ""
-#: tftp.c:282
+#: tftp.c:336
#, c-format
msgid "sent %s to %s"
msgstr ""
-#: tftp.c:305
+#: tftp.c:359
#, fuzzy, c-format
msgid "file %s not found"
msgstr "leie ikke funnet"
-#: tftp.c:416
+#: tftp.c:470
#, c-format
msgid "error %d %s received from %s"
msgstr ""
-#: tftp.c:447
+#: tftp.c:501
#, fuzzy, c-format
msgid "failed sending %s to %s"
msgstr "feilet å lese %s: %s"
-#: log.c:169
+#: log.c:173
#, c-format
msgid "overflow: %d log entries lost"
msgstr ""
-#: log.c:246
+#: log.c:250
#, c-format
msgid "log failed: %s"
msgstr ""
-#: log.c:420
+#: log.c:431
msgid "FAILED to start up"
msgstr "FEILET å starte opp"
diff --git a/po/pl.po b/po/pl.po
index 6af56ad..632f4c5 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -4,14 +4,15 @@
#
# Tomasz Sochañski <nerdhero@gmail.com>, 2005.
# Jan Psota <jasiu@belsznica.pl>, 2008, 2009, 2010.
+# Jan Psota <jasiupsota@gmail.com>, 2010.
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-01-14 21:47+0100\n"
-"Last-Translator: Jan Psota <jasiu@belsznica.pl>\n"
-"Language-Team: Polish\n"
+"PO-Revision-Date: 2010-05-25 12:37+0200\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-Transfer-Encoding: 8bit\n"
@@ -24,17 +25,17 @@ msgstr ""
msgid "failed to load names from %s: %s"
msgstr "nie potrafiê wczytaæ nazw z %s: %s"
-#: cache.c:798 dhcp.c:804
+#: cache.c:798 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:820
+#: cache.c:856 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:894
+#: cache.c:863 dhcp.c:955
#, c-format
msgid "read %s - %d addresses"
msgstr "wczyta³em %s - %d adresów"
@@ -43,32 +44,37 @@ msgstr "wczyta³em %s - %d adresów"
msgid "cleared cache"
msgstr "wyczyszczono pamiêæ podrêczn±"
-#: cache.c:933 option.c:1069
+#: cache.c:933 option.c:1103
#, c-format
msgid "cannot access directory %s: %s"
msgstr "brak dostêpu do katalogu %s: %s"
-#: cache.c:1052
+#: cache.c:1053
+#, 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
#, 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:1129
+#: cache.c:1132
#, c-format
msgid "time %lu"
msgstr "czas %lu"
-#: cache.c:1130
+#: cache.c:1133
#, 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:1132
+#: cache.c:1135
#, c-format
msgid "queries forwarded %u, queries answered locally %u"
msgstr "%u zapytañ przes³anych dalej, %u odpowiedzi udzielonych samodzielnie"
-#: cache.c:1155
+#: cache.c:1158
#, 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"
@@ -82,7 +88,7 @@ msgstr "brak mo¿liwo¶ci u¿ycia generatora liczb losowych: %s"
msgid "failed to allocate memory"
msgstr "nie uda³o siê przydzieliæ pamiêci"
-#: util.c:229 option.c:549
+#: util.c:229 option.c:567
msgid "could not get memory"
msgstr "nie mo¿na dostaæ pamiêci"
@@ -101,416 +107,440 @@ msgstr "niemo¿liwo¶æ przydzielenia %d bajtów pamiêci"
msgid "infinite"
msgstr "nieskoñczona"
-#: option.c:228
+#: option.c:240
msgid "Specify local address(es) to listen on."
msgstr "Wskazanie adresów, na których nale¿y nas³uchiwaæ."
-#: option.c:229
+#: option.c:241
msgid "Return ipaddr for all hosts in specified domains."
msgstr "Zwracanie adresu IP dla wszystkich hostów we wskazanych domenach."
-#: option.c:230
+#: option.c:242
msgid "Fake reverse lookups for RFC1918 private address ranges."
msgstr "Wy³±czenie przekazywania zapytañ odwrotnych dla prywatnych zakresów IP."
-#: option.c:231
+#: option.c:243
msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
msgstr "Traktowanie adresu IP jako NXDOMAIN (uniewa¿nia ,,Verisign wildcard'')."
-#: option.c:232
+#: option.c:244
#, 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:233
+#: option.c:245
#, c-format
msgid "Specify configuration file (defaults to %s)."
msgstr "Wskazanie pliku konfiguracyjnego (domy¶lnie: %s)."
-#: option.c:234
+#: option.c:246
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:235
+#: option.c:247
msgid "Do NOT forward queries with no domain part."
msgstr "Wy³±czenie przekazywania zapytañ bez podanej czê¶ci domenowej."
-#: option.c:236
+#: option.c:248
msgid "Return self-pointing MX records for local hosts."
msgstr "Zwracanie samowskazuj±cego rekordu MX dla lokalnych hostów."
-#: option.c:237
+#: option.c:249
msgid "Expand simple names in /etc/hosts with domain-suffix."
msgstr "Rozwijanie prostych nazw z /etc/hosts przyrostkiem domenowym."
-#: option.c:238
+#: option.c:250
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:239
+#: option.c:251
msgid "Enable DHCP in the range given with lease duration."
msgstr "W³±czenie serwera DHCP dla wskazanego zakresu adresów."
-#: option.c:240
+#: option.c:252
#, 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:241
+#: option.c:253
msgid "Set address or hostname for a specified machine."
msgstr "Ustawienie adresu lub nazwy dla wskazanego komputera."
-#: option.c:242
-msgid "Read DHCP host specs from file"
-msgstr "Wczytanie z podanego pliku opisu maszyn na potrzeby DHCP."
+#: option.c:254
+msgid "Read DHCP host specs from file."
+msgstr "Wskazanie pliku z warto¶ciami 'dhcp-host='."
-#: option.c:243
-msgid "Read DHCP option specs from file"
-msgstr "Wczytanie z podanego pliku warto¶ci opcji DHCP."
+#: option.c:255
+msgid "Read DHCP option specs from file."
+msgstr "Wskazanie pliku z warto¶ciami 'dhcp-option='."
-#: option.c:244
+#: option.c:256
+msgid "Evaluate conditional tag expression."
+msgstr "Warunkowe ustawianie znaczników."
+
+#: option.c:257
#, c-format
msgid "Do NOT load %s file."
-msgstr "Nie wczytywanie pliku %s."
+msgstr "NIE wczytywanie pliku %s."
-#: option.c:245
+#: option.c:258
#, c-format
msgid "Specify a hosts file to be read in addition to %s."
msgstr "Wskazanie dodatkowego pliku 'hosts' oprócz %s."
-#: option.c:246
+#: option.c:259
msgid "Specify interface(s) to listen on."
msgstr "Interfejsy, na których nas³uchiwaæ."
-#: option.c:247
+#: option.c:260
msgid "Specify interface(s) NOT to listen on."
msgstr "Interfejsy, na których NIE nas³uchiwaæ."
-#: option.c:248
+#: option.c:261
msgid "Map DHCP user class to tag."
msgstr "Przyporz±dkowanie znacznika w zale¿no¶ci od klasy u¿ytkownika DHCP."
-#: option.c:249
+#: option.c:262
msgid "Map RFC3046 circuit-id to tag."
msgstr "Przyporz±dkowanie znacznika w zale¿no¶ci od numeru obwodu (w rozumieniu RFC3046)."
-#: option.c:250
+#: option.c:263
msgid "Map RFC3046 remote-id to tag."
msgstr "Przyporz±dkowanie znacznika w zale¿no¶ci od numeru agenta (w rozumieniu RFC3046)."
-#: option.c:251
+#: option.c:264
msgid "Map RFC3993 subscriber-id to tag."
msgstr "Przyporz±dkowanie znacznika w zale¿no¶ci od numeru subskrybenta (w rozumieniu RFC3993)."
-#: option.c:252
+#: option.c:265
msgid "Don't do DHCP for hosts with tag set."
msgstr "Wy³±czenie DHCP dla hostów z okre¶lonym znacznikiem."
-#: option.c:253
+#: option.c:266
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:254
+#: option.c:267
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:255
+#: option.c:268
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:256
+#: option.c:269
#, 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:257
+#: option.c:270
msgid "Return MX records for local hosts."
msgstr "W³±czenie zwracania rekordu MX dla hostów lokalnych."
-#: option.c:258
+#: option.c:271
msgid "Specify an MX record."
msgstr "Specyfikacja rekordu MX."
-#: option.c:259
+#: option.c:272
msgid "Specify BOOTP options to DHCP server."
msgstr "Okre¶lenie opcji BOOTP serwera DHCP."
-#: option.c:260
+#: option.c:273
#, c-format
msgid "Do NOT poll %s file, reload only on SIGHUP."
-msgstr "Wy³±czenie obserwacji pliku %s, ponowne odczytywanie tylko po odebraniu sygna³u SIGHUP."
+msgstr "Wy³±czenie obserwowania pliku %s; ponowne odczytywanie tylko po odebraniu sygna³u SIGHUP."
-#: option.c:261
+#: option.c:274
msgid "Do NOT cache failed search results."
msgstr "Wy³±czenie przechowywania w pamiêci podrêcznej wyników nieudanych wyszukiwañ."
-#: option.c:262
+#: option.c:275
#, 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:263
+#: option.c:276
msgid "Specify options to be sent to DHCP clients."
msgstr "Specyfikacja opcji wysy³anej do klientów DHCP."
-#: option.c:264
+#: option.c:277
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:265
+#: option.c:278
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:266
+#: option.c:279
#, 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:267
+#: option.c:280
msgid "Log DNS queries."
msgstr "W³±czenie spisywania zapytañ DNS do logu."
-#: option.c:268
+#: option.c:281
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:269
+#: option.c:282
msgid "Do NOT read resolv.conf."
msgstr "Wy³±czenie czytania pliku resolv.conf."
-#: option.c:270
+#: option.c:283
#, c-format
msgid "Specify path to resolv.conf (defaults to %s)."
msgstr "Wskazanie po³o¿enia pliku resolv.conf (domy¶lnie: %s)."
-#: option.c:271
+#: option.c:284
msgid "Specify address(es) of upstream servers with optional domains."
msgstr "Wskazywanie adresów serwerów nazw, opcjonalnie z przypisaniem do domeny."
-#: option.c:272
+#: option.c:285
msgid "Never forward queries to specified domains."
msgstr "Wy³±czenie przekazywania zapytañ do wskazanych domen."
-#: option.c:273
+#: option.c:286
msgid "Specify the domain to be assigned in DHCP leases."
msgstr "Wskazanie domeny dla serwera DHCP."
-#: option.c:274
+#: option.c:287
msgid "Specify default target in an MX record."
msgstr "Okre¶lenie domy¶lnego celu w rekordzie MX."
-#: option.c:275
+#: option.c:288
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:276
+#: option.c:289
msgid "Specify time-to-live in seconds for negative caching."
msgstr "Okre¶lenie (w sekundach) czasu wa¿no¶ci negatywnych odpowiedzi."
-#: option.c:277
+#: option.c:290
+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
#, 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:278
+#: option.c:292
msgid "Map DHCP vendor class to tag."
msgstr "Przyporz±dkowanie znacznika w zale¿no¶ci od typu klienta DHCP."
-#: option.c:279
+#: option.c:293
msgid "Display dnsmasq version and copyright information."
msgstr "Wydrukowanie informacji o programie i ochronie praw autorskich."
-#: option.c:280
+#: option.c:294
msgid "Translate IPv4 addresses from upstream servers."
msgstr "T³umaczenie adresów IPv4 z serwerów nadrzêdnych."
-#: option.c:281
+#: option.c:295
msgid "Specify a SRV record."
msgstr "Okre¶lenie rekordu SRV."
-#: option.c:282
+#: option.c:296
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:283
+#: option.c:297
#, c-format
msgid "Specify path of PID file (defaults to %s)."
msgstr "Okre¶lenie ¶cie¿ki do pliku PID (domy¶lnie: %s)."
-#: option.c:284
+#: option.c:298
#, c-format
msgid "Specify maximum number of DHCP leases (defaults to %s)."
msgstr "Maksymalna liczba dzier¿aw DHCP (domy¶lnie: %s)."
-#: option.c:285
+#: option.c:299
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:286
+#: option.c:300
msgid "Specify TXT DNS record."
msgstr "Specyfikacja rekordu DNS TXT."
-#: option.c:287
+#: option.c:301
msgid "Specify PTR DNS record."
msgstr "Specyfikacja rekordu DNS PTR."
-#: option.c:288
+#: option.c:302
msgid "Give DNS name to IPv4 address of interface."
msgstr "Zwraca nazwê domenow± powi±zan± z adresem interfejsu sieciowego."
-#: option.c:289
+#: option.c:303
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:290
+#: option.c:304
#, c-format
msgid "Read DHCP static host information from %s."
msgstr "Wczytanie przyporz±dkowañ adresów z %s."
-#: option.c:291
+#: option.c:305
msgid "Enable the DBus interface for setting upstream servers, etc."
msgstr "W³±czenie u¿ywania interfejsu DBus do informowania o zmianach konfiguracji."
-#: option.c:292
+#: option.c:306
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:293
+#: option.c:307
msgid "Enable dynamic address allocation for bootp."
msgstr "W³±czenie dynamicznego przydzielania adresów dla klientów BOOTP."
-#: option.c:294
+#: option.c:308
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:295
+#: option.c:309
msgid "Treat DHCP requests on aliases as arriving from interface."
msgstr "Traktowanie ¿±dañ DHCP odebranych na interfejsach alias, ..., jako odebranych na iface."
-#: option.c:296
+#: option.c:310
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:297
+#: option.c:311
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:298
+#: option.c:312
msgid "Read configuration from all the files in this directory."
msgstr "Wczytanie wszystkich plików ze wskazanego katalogu jako konfiguracyjnych."
-#: option.c:299
+#: option.c:313
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:300
+#: option.c:314
msgid "Do not use leasefile."
msgstr "Nieu¿ywanie bazy dzier¿aw."
-#: option.c:301
+#: option.c:315
#, 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:302
+#: option.c:316
#, c-format
msgid "Clear DNS cache when reloading %s."
msgstr "Czyszczenie pamiêci podrêcznej serwera nazw w przypadku ponownego odczytu %s."
-#: option.c:303
+#: option.c:317
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:304
+#: option.c:318
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:305
+#: option.c:319
msgid "Enable integrated read-only TFTP server."
msgstr "W³±czenie wbudowanego serwera TFTP (tylko do wysy³ania)."
-#: option.c:306
+#: option.c:320
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:307
+#: option.c:321
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:308
+#: option.c:322
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:309
+#: option.c:323
#, 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:310
+#: option.c:324
msgid "Disable the TFTP blocksize extension."
msgstr "Wy³±czenie mo¿liwo¶ci negocjowania wielko¶ci bloku dla przesy³ów przez TFTP."
-#: option.c:311
+#: option.c:325
msgid "Ephemeral port range for use by TFTP transfers."
msgstr "Wskazanie zakresu portów do u¿ytku TFTP."
-#: option.c:312
+#: option.c:326
msgid "Extra logging for DHCP."
msgstr "W³±czenie spisywania w logu operacji DHCP."
-#: option.c:313
+#: option.c:327
msgid "Enable async. logging; optionally set queue length."
msgstr "W³±czenie asynchronicznego zapisywania do logu z ewentualnym wskazaniem d³ugo¶ci kolejki."
-#: option.c:314
+#: option.c:328
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:315
+#: option.c:329
+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
+msgid "Inhibit DNS-rebind protection on this domain."
+msgstr "Dezaktywacja zabezpieczenia przed atakami DNS-rebind dla wskazanych domen."
+
+#: option.c:331
msgid "Always perform DNS queries to all servers."
msgstr "Jednoczesne odpytywanie wszystkich serwerów nadrzêdnych; klientowi przekazywana jest pierwsza odpowied¼."
-#: option.c:316
+#: option.c:332
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:317
+#: option.c:333
msgid "Use alternative ports for DHCP."
msgstr "U¿ycie alternatywnych portów dla us³ugi DHCP."
-#: option.c:318
+#: option.c:334
msgid "Run lease-change script as this user."
msgstr "Uruchamianie skryptu dhcp-script jako wskazany u¿ytkownik."
-#: option.c:319
+#: option.c:335
msgid "Specify NAPTR DNS record."
msgstr "Specyfikacja rekordu DNS NAPTR."
-#: option.c:320
+#: option.c:336
msgid "Specify lowest port available for DNS query transmission."
msgstr "Ustawienie dolnej granicy numerów portów do przesy³ania zapytañ DNS."
-#: option.c:321
+#: option.c:337
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:322
+#: option.c:338
+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
+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
msgid "Specify alias name for LOCAL DNS name."
msgstr "Wskazanie synonimu nazwy komputera lokalnego - znanego z /etc/hosts albo z DHCP."
-#: option.c:323
+#: option.c:341
msgid "Prompt to send to PXE clients."
msgstr "Zg³oszenie wysy³ane klientom PXE."
-#: option.c:324
+#: option.c:342
msgid "Boot service for PXE menu."
msgstr "Sk³adnik menu PXE (--> man)."
-#: option.c:325
+#: option.c:343
msgid "Check configuration syntax."
-msgstr "Sprawd¼ sk³adniê."
+msgstr "Sprawdzenie sk³adni."
-#: option.c:614
+#: option.c:632
#, c-format
msgid ""
"Usage: dnsmasq [options]\n"
@@ -519,216 +549,224 @@ msgstr ""
"U¿ycie: dnsmasq [opcje]\n"
"\n"
-#: option.c:616
+#: option.c:634
#, 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:618
+#: option.c:636
#, c-format
msgid "Valid options are:\n"
msgstr "Dostêpne opcje:\n"
-#: option.c:659
+#: option.c:677
#, c-format
msgid "Known DHCP options:\n"
msgstr "Znane opcje DHCP:\n"
-#: option.c:747
+#: option.c:781
msgid "bad dhcp-option"
msgstr "b³±d w dhcp-option"
-#: option.c:804
+#: option.c:838
msgid "bad IP address"
msgstr "z³y adres IP"
-#: option.c:903
+#: option.c:937
msgid "bad domain in dhcp-option"
msgstr "nieprawid³owa nazwa domeny w dhcp-option"
-#: option.c:964
+#: option.c:998
msgid "dhcp-option too long"
msgstr "zbyt d³uga dhcp-option (>255 znaków)"
-#: option.c:973
+#: option.c:1007
msgid "illegal dhcp-match"
msgstr "niedopuszczalne dhcp-match"
-#: option.c:1009
+#: option.c:1043
msgid "illegal repeated flag"
msgstr "wielokrotne u¿ycie opcji niedozwolone (pojawi³a siê wcze¶niej w linii poleceñ)"
-#: option.c:1017
+#: option.c:1051
msgid "illegal repeated keyword"
msgstr "wielokrotne u¿ycie opcji niedozwolone (pojawi³a siê wsze¶niej w pliku konfiguracyjnym)"
-#: option.c:1100 tftp.c:359
+#: option.c:1134 tftp.c:413
#, c-format
msgid "cannot access %s: %s"
msgstr "brak dostêpu do %s: %s"
-#: option.c:1145
+#: option.c:1179
msgid "only one dhcp-hostsfile allowed"
msgstr "mo¿na wskazaæ tylko jeden plik dhcp-hostsfile"
-#: option.c:1152
+#: option.c:1186
msgid "only one dhcp-optsfile allowed"
msgstr "mo¿na wskazaæ tylko jeden plik dhcp-optsfile"
-#: option.c:1197
+#: option.c:1231
msgid "bad MX preference"
msgstr "nieprawid³owa warto¶æ preferencji MX"
-#: option.c:1202
+#: option.c:1236
msgid "bad MX name"
msgstr "nieprawid³owa nazwa MX"
-#: option.c:1216
+#: option.c:1250
msgid "bad MX target"
msgstr "nieprawid³owa warto¶æ celu MX"
-#: option.c:1226
+#: option.c:1260
msgid "cannot run scripts under uClinux"
msgstr "w uClinuksie nie ma mo¿liwo¶ci uruchamiania skryptów"
-#: option.c:1228
+#: option.c:1262
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:1456 option.c:1460
+#: option.c:1507 option.c:1511
msgid "bad port"
msgstr "nieprawid³owy numer portu"
-#: option.c:1479 option.c:1504
+#: option.c:1530 option.c:1555
msgid "interface binding not supported"
msgstr "nie ma mo¿liwo¶ci dowi±zywania do interfejsu"
-#: option.c:1625
+#: option.c:1701
msgid "bad port range"
msgstr "nieprawid³owy zakres numerów portów"
-#: option.c:1642
+#: option.c:1718
msgid "bad bridge-interface"
msgstr "nieprawid³owa nazwa urz±dzenia w bridge-interface"
-#: option.c:1683
+#: option.c:1760
msgid "bad dhcp-range"
msgstr "nieprawid³owy zakres dhcp-range"
-#: option.c:1709
-msgid "only one netid tag allowed"
+#: option.c:1788
+msgid "only one tag allowed"
msgstr "mo¿na wskazaæ tylko jeden znacznik sieci"
-#: option.c:1754
+#: option.c:1835
msgid "inconsistent DHCP range"
msgstr "niespójny zakres adresów DHCP"
-#: option.c:1926
+#: option.c:2010
msgid "bad DHCP host name"
msgstr "niedopuszczalna nazwa komputera w dhcp-host"
-#: option.c:2221 option.c:2501
+#: option.c:2091
+msgid "bad tag-if"
+msgstr "nieprawid³owa sk³adnia 'tag-if'"
+
+#: option.c:2365 option.c:2664
msgid "invalid port number"
msgstr "nieprawid³owy numer portu"
-#: option.c:2304
+#: option.c:2427
+msgid "bad dhcp-proxy address"
+msgstr "z³y adres dhcp-proxy"
+
+#: option.c:2467
msgid "invalid alias range"
msgstr "nieprawid³owy zakres adresów w --alias"
-#: option.c:2317
+#: option.c:2480
msgid "bad interface name"
msgstr "nieprawid³owa nazwa interfejsu"
-#: option.c:2342
+#: option.c:2505
msgid "bad CNAME"
msgstr "z³a CNAME"
-#: option.c:2347
+#: option.c:2510
msgid "duplicate CNAME"
msgstr "powtórzona CNAME"
-#: option.c:2367
+#: option.c:2530
msgid "bad PTR record"
msgstr "nieprawid³owy zapis rekordu PTR"
-#: option.c:2398
+#: option.c:2561
msgid "bad NAPTR record"
msgstr "nieprawid³owy zapis rekordu NAPTR"
-#: option.c:2423
+#: option.c:2586
msgid "TXT record string too long"
msgstr "zbyt d³ugi rekord TXT"
-#: option.c:2471
+#: option.c:2634
msgid "bad TXT record"
msgstr "nieprawid³owy zapis rekordu TXT"
-#: option.c:2487
+#: option.c:2650
msgid "bad SRV record"
msgstr "nieprawid³owy zapis rekordu SRV"
-#: option.c:2494
+#: option.c:2657
msgid "bad SRV target"
msgstr "nieprawid³owa warto¶æ celu SRV"
-#: option.c:2508
+#: option.c:2671
msgid "invalid priority"
msgstr "nieprawid³owy priorytet"
-#: option.c:2515
+#: option.c:2678
msgid "invalid weight"
msgstr "nieprawid³owa waga"
-#: option.c:2534
+#: option.c:2697
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:2577
+#: option.c:2739
#, c-format
msgid "files nested too deep in %s"
msgstr "zbyt du¿e zag³êbienie plików w %s"
-#: option.c:2585 tftp.c:513
+#: option.c:2747 tftp.c:567
#, c-format
msgid "cannot read %s: %s"
msgstr "b³±d odczytu z pliku %s: %s"
-#: option.c:2646
+#: option.c:2804
msgid "missing \""
msgstr "brakuje \""
-#: option.c:2693
+#: option.c:2863
msgid "bad option"
msgstr "nieprawid³owa opcja"
-#: option.c:2695
+#: option.c:2865
msgid "extraneous parameter"
msgstr "nadwy¿kowy parametr"
-#: option.c:2697
+#: option.c:2867
msgid "missing parameter"
msgstr "brak parametru"
-#: option.c:2705
+#: option.c:2871
msgid "error"
msgstr "b³±d"
-#: option.c:2711
+#: option.c:2876
#, c-format
msgid "%s at line %d of %%s"
msgstr "%s w linii %d pliku %%s"
-#: option.c:2760 option.c:2791
+#: option.c:2933 option.c:2964
#, c-format
msgid "read %s"
msgstr "przeczyta³em %s"
-#: option.c:2863
+#: option.c:3036
#, c-format
msgid "Dnsmasq version %s %s\n"
msgstr "Dnsmasq, wersja %s %s\n"
-#: option.c:2864
+#: option.c:3037
#, c-format
msgid ""
"Compile time options %s\n"
@@ -737,193 +775,199 @@ msgstr ""
"Wkompilowane opcje %s\n"
"\n"
-#: option.c:2865
+#: option.c:3038
#, c-format
msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
msgstr "Autor nie daje ¯ADNYCH GWARANCJI egzekwowalnych prawnie.\n"
-#: option.c:2866
+#: option.c:3039
#, 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:2867
+#: option.c:3040
#, 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:2878
+#: option.c:3051
msgid "try --help"
msgstr "spróbuj: --help"
-#: option.c:2880
+#: option.c:3053
msgid "try -w"
msgstr "spróbuj: -w"
-#: option.c:2883
+#: option.c:3056
#, c-format
msgid "bad command line options: %s"
msgstr "nieprawid³owa opcja w linii poleceñ %s"
-#: option.c:2924
+#: option.c:3097
#, c-format
msgid "cannot get host-name: %s"
msgstr "nie mo¿na pobraæ nazwy hosta: %s"
-#: option.c:2952
+#: option.c:3125
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:2962
+#: option.c:3135
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:2965 network.c:777 dhcp.c:753
+#: option.c:3138 network.c:813 dhcp.c:814
#, c-format
msgid "failed to read %s: %s"
msgstr "nie uda³o siê odczytaæ %s: %s"
-#: option.c:2982
+#: option.c:3155
#, c-format
msgid "no search directive found in %s"
msgstr "brak wytycznych wyszukiwania w %s"
-#: option.c:3003
+#: option.c:3176
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:3007
+#: option.c:3180
msgid "syntax check OK"
msgstr "sk³adnia sprawdzona, jest prawid³owa"
-#: forward.c:405
+#: forward.c:427
#, c-format
msgid "nameserver %s refused to do a recursive query"
msgstr "serwer nazw %s odmawia wykonania zapytania rekurencyjnego"
-#: forward.c:433
-msgid "possible DNS-rebind attack detected"
-msgstr "prawdopodobnie wykryto atak DNS-rebind"
+#: forward.c:455
+#, c-format
+msgid "possible DNS-rebind attack detected: %s"
+msgstr "prawdopodobnie wykryto atak DNS-rebind: %s"
-#: network.c:73
+#: network.c:110
#, c-format
msgid "unknown interface %s in bridge-interface"
msgstr "nieznany interfejs %s w bridge-u"
-#: network.c:436 dnsmasq.c:189
+#: network.c:467 dnsmasq.c:188
#, c-format
msgid "failed to create listening socket: %s"
msgstr "b³±d podczas tworzenia gniazda: %s"
-#: network.c:443
+#: 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:469
+#: network.c:500
#, c-format
msgid "failed to bind listening socket for %s: %s"
msgstr "b³±d przy przyznawaniu nazwy gniazdu %s: %s"
-#: network.c:474
+#: 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:486
+#: 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:680
+#: network.c:711
#, c-format
msgid "failed to bind server socket for %s: %s"
msgstr "b³±d przy przyznawaniu nazwy gniazdu serwera %s: %s"
-#: network.c:717
+#: network.c:748
#, c-format
msgid "ignoring nameserver %s - local interface"
msgstr "ignorowanie serwera nazw %s - interfejs lokalny"
-#: network.c:728
+#: network.c:759
#, 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:743
+#: network.c:776
msgid "unqualified"
msgstr "niekwalifikowane(-a)"
-#: network.c:743
+#: network.c:776
msgid "names"
msgstr "nazwy"
-#: network.c:745
+#: network.c:778
msgid "default"
msgstr "domy¶lne"
-#: network.c:747
+#: network.c:780
msgid "domain"
msgstr "domeny"
-#: network.c:750
+#: network.c:783
#, c-format
msgid "using local addresses only for %s %s"
msgstr "u¿ywam adresów lokalnych tylko dla %s %s"
-#: network.c:752
+#: network.c:785
+#, c-format
+msgid "using standard nameservers for %s %s"
+msgstr "u¿ywam standardowych serwerów nazw dla %s %s"
+
+#: network.c:787
#, c-format
msgid "using nameserver %s#%d for %s %s"
msgstr "u¿ywam serwera nazw %s#%d dla %s %s"
-#: network.c:755
+#: network.c:790
#, c-format
msgid "using nameserver %s#%d(via %s)"
msgstr "u¿ywam serwera nazw %s#%d (przez %s)"
-#: network.c:757
+#: network.c:792
#, c-format
msgid "using nameserver %s#%d"
msgstr "u¿ywam serwera nazw %s#%d"
-#: dnsmasq.c:146
+#: dnsmasq.c:145
msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
msgstr "Serwer TFTP nie zosta³ wkompilowany -- ustaw HAVE_TFTP w src/config.h"
-#: dnsmasq.c:151
+#: dnsmasq.c:150
msgid "asychronous logging is not available under Solaris"
msgstr "zapis do logów w trybie asynchronicznym nie jest dostêpny w Solarisie"
-#: dnsmasq.c:170
+#: dnsmasq.c:169
#, c-format
msgid "failed to find list of interfaces: %s"
msgstr "b³±d podczas tworzenia listy interfejsów sieciowych: %s"
-#: dnsmasq.c:178
+#: dnsmasq.c:177
#, c-format
msgid "unknown interface %s"
msgstr "nieznany interfejs %s"
-#: dnsmasq.c:184
+#: dnsmasq.c:183
#, c-format
msgid "no interface with address %s"
msgstr "brak interfejsu z adresem %s"
-#: dnsmasq.c:201 dnsmasq.c:670
+#: dnsmasq.c:200 dnsmasq.c:671
#, c-format
msgid "DBus error: %s"
msgstr "b³±d DBus: %s"
-#: dnsmasq.c:204
+#: dnsmasq.c:203
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:230
+#: dnsmasq.c:229
#, c-format
msgid "unknown user or group: %s"
msgstr "nieznany u¿ytkownik lub grupa: %s"
-#: dnsmasq.c:287
+#: dnsmasq.c:284
#, c-format
msgid "cannot chdir to filesystem root: %s"
msgstr "nie potrafiê wej¶æ do g³ównego katalogu: %s"
@@ -1015,75 +1059,75 @@ msgstr "w trybie bezpiecznym"
msgid "restricting maximum simultaneous TFTP transfers to %d"
msgstr "ograniczam ilo¶æ jednoczesnych przes³añ TFTP do %d"
-#: dnsmasq.c:672
+#: dnsmasq.c:673
msgid "connected to system DBus"
msgstr "pod³±czono do DBus-a"
-#: dnsmasq.c:767
+#: dnsmasq.c:768
#, c-format
msgid "cannot fork into background: %s"
msgstr "nie potrafiê prze³±czyæ siê do pracy w tle: %s"
-#: dnsmasq.c:770
+#: dnsmasq.c:771
#, c-format
msgid "failed to create helper: %s"
msgstr "nie uda³o siê utworzyæ procesu pomocniczego: %s"
-#: dnsmasq.c:773
+#: dnsmasq.c:774
#, c-format
msgid "setting capabilities failed: %s"
msgstr "nie powiod³o siê ustawianie ograniczeñ (capabilities): %s"
-#: dnsmasq.c:777
+#: dnsmasq.c:778
#, 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:782
+#: dnsmasq.c:783
#, c-format
msgid "failed to change group-id to %s: %s"
msgstr "nie uda³o siê zmieniæ grupy procesu na %s: %s"
-#: dnsmasq.c:785
+#: dnsmasq.c:786
#, c-format
msgid "failed to open pidfile %s: %s"
msgstr "nie uda³o siê otworzyæ pliku z PID-em %s: %s"
-#: dnsmasq.c:788
+#: dnsmasq.c:789
#, c-format
msgid "cannot open %s: %s"
msgstr "nie mo¿na otworzyæ %s: %s"
-#: dnsmasq.c:843
+#: dnsmasq.c:844
#, c-format
msgid "child process killed by signal %d"
msgstr "proces potomny zabity sygna³em %d"
-#: dnsmasq.c:847
+#: dnsmasq.c:848
#, c-format
msgid "child process exited with status %d"
msgstr "proces potomny zakoñczy³ siê z kodem powrotu %d"
-#: dnsmasq.c:851
+#: dnsmasq.c:852
#, c-format
msgid "failed to execute %s: %s"
msgstr "nie uda³o siê uruchomiæ %s: %s"
-#: dnsmasq.c:895
+#: dnsmasq.c:896
msgid "exiting on receipt of SIGTERM"
msgstr "zakoñczy³em dzia³anie z powodu odebrania SIGTERM"
-#: dnsmasq.c:913
+#: dnsmasq.c:924
#, c-format
msgid "failed to access %s: %s"
msgstr "brak dostêpu do %s: %s"
-#: dnsmasq.c:935
+#: dnsmasq.c:954
#, c-format
msgid "reading %s"
msgstr "czytanie %s"
-#: dnsmasq.c:946
+#: dnsmasq.c:965
#, c-format
msgid "no servers found in %s, will retry"
msgstr "w %s nie znalaz³em serwerów, spróbujê ponownie pó¼niej"
@@ -1113,237 +1157,242 @@ msgstr "b³±d przy przyznawaniu nazwy gniazdu serwera DHCP: %s"
msgid "cannot create ICMP raw socket: %s."
msgstr "nie uda³o siê utworzyæ surowego gniazda ICMP: %s."
-#: dhcp.c:240
+#: dhcp.c:281
#, c-format
msgid "DHCP packet received on %s which has no address"
msgstr "¿±danie DHCP odebrano na interfejsie %s, który nie ma adresu"
-#: dhcp.c:404
+#: dhcp.c:445
#, c-format
msgid "DHCP range %s -- %s is not consistent with netmask %s"
msgstr "zakres adresów DHCP %s -- %s jest niespójny z mask± sieci %s"
-#: dhcp.c:791
+#: dhcp.c:852
#, c-format
msgid "bad line at %s line %d"
msgstr "z³a zawarto¶æ pliku %s, w linii %d"
-#: dhcp.c:834
+#: dhcp.c:895
#, c-format
msgid "ignoring %s line %d, duplicate name or IP address"
msgstr "w %s pomijam liniê %d -- powtórzona nazwa lub adres IP"
-#: dhcp.c:916
+#: dhcp.c:977
#, c-format
msgid "duplicate IP address %s in dhcp-config directive."
msgstr "powtórzony adres IP (%s) w parametrze dhcp-config"
-#: dhcp.c:919
+#: dhcp.c:980
#, c-format
msgid "duplicate IP address %s in %s."
msgstr "powtórzony adres IP (%s) w pliku %s"
-#: dhcp.c:962
+#: dhcp.c:1023
#, c-format
msgid "%s has more than one address in hostsfile, using %s for DHCP"
msgstr "do komputera o nazwie %s pasuje wiêcej ni¿ jeden adres, w odpowiedzi DHCP wysy³am %s"
-#: dhcp.c:967
+#: dhcp.c:1028
#, c-format
msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr "powtórzenie adresu IP %s (%s) w opcji dhcp-config"
-#: lease.c:66
+#: lease.c:67
#, c-format
msgid "cannot open or create lease file %s: %s"
msgstr "nie potrafiê otworzyæ albo utworzyæ pliku dzier¿aw %s: %s"
-#: lease.c:92
+#: lease.c:93
msgid "too many stored leases"
msgstr "zbyt du¿a ilo¶æ zapisanych dzier¿aw"
-#: lease.c:128
+#: lease.c:129
#, c-format
msgid "cannot run lease-init script %s: %s"
msgstr "nie potrafiê uruchomiæ skryptu %s: %s"
-#: lease.c:134
+#: lease.c:135
#, c-format
msgid "lease-init script returned exit code %s"
msgstr "skrypt zakoñczy³ siê z kodem powrotu %s"
-#: lease.c:234
+#: lease.c:235
#, c-format
msgid "failed to write %s: %s (retry in %us)"
msgstr "b³±d zapisu do %s: %s (spróbujê ponownie za %us)"
-#: rfc2131.c:375
+#: rfc2131.c:377
#, c-format
msgid "no address range available for DHCP request %s %s"
msgstr "nie zdefiniowano zakresu adresów odpowiedniego dla ¿±dania %s %s"
-#: rfc2131.c:376
+#: rfc2131.c:378
msgid "with subnet selector"
msgstr "z wyborem podsieci"
-#: rfc2131.c:376
+#: rfc2131.c:378
msgid "via"
msgstr "przez"
-#: rfc2131.c:391
+#: rfc2131.c:393
#, c-format
-msgid "%u Available DHCP subnet: %s/%s"
-msgstr "%u Dostêpna podsieæ DHCP: %s/%s"
+msgid "%u available DHCP subnet: %s/%s"
+msgstr "%u dostêpna podsieæ DHCP: %s/%s"
-#: rfc2131.c:394
+#: rfc2131.c:396
#, c-format
-msgid "%u Available DHCP range: %s -- %s"
-msgstr "%u zakres adresów na u¿ytek DHCP: %s -- %s"
+msgid "%u available DHCP range: %s -- %s"
+msgstr "%u dostêpny zakres adresów DHCP: %s -- %s"
-#: rfc2131.c:423
+#: rfc2131.c:425
msgid "disabled"
msgstr "wy³±czony(a)"
-#: rfc2131.c:457 rfc2131.c:928 rfc2131.c:1277
+#: rfc2131.c:466 rfc2131.c:969 rfc2131.c:1335
msgid "ignored"
msgstr "ignorujê"
-#: rfc2131.c:472 rfc2131.c:1145
+#: rfc2131.c:481 rfc2131.c:1183
msgid "address in use"
msgstr "adres jest w u¿yciu"
-#: rfc2131.c:486 rfc2131.c:982
+#: rfc2131.c:495 rfc2131.c:1023
msgid "no address available"
msgstr "brak dostêpnego adresu"
-#: rfc2131.c:493 rfc2131.c:1108
+#: rfc2131.c:502 rfc2131.c:1146
msgid "wrong network"
msgstr "nieprawid³owa sieæ"
-#: rfc2131.c:506
+#: rfc2131.c:516
msgid "no address configured"
msgstr "brak skonfigurowanego adresu"
-#: rfc2131.c:512 rfc2131.c:1158
+#: rfc2131.c:522 rfc2131.c:1196
msgid "no leases left"
msgstr "brak wolnych dzier¿aw"
-#: rfc2131.c:597
+#: rfc2131.c:607
#, c-format
msgid "%u client provides name: %s"
msgstr "klient %u przedstawia siê jako %s"
-#: rfc2131.c:741
+#: rfc2131.c:762
#, c-format
-msgid "%u Vendor class: %s"
-msgstr "%u klasa klienta: %s"
+msgid "%u vendor class: %s"
+msgstr "%u klasa dostawcy: %s"
-#: rfc2131.c:743
+#: rfc2131.c:764
#, c-format
-msgid "%u User class: %s"
-msgstr "%u Klasa u¿ytkownika: %s"
+msgid "%u user class: %s"
+msgstr "%u klasa u¿ytkownika: %s"
-#: rfc2131.c:782
+#: rfc2131.c:823
msgid "PXE BIS not supported"
msgstr "PXE BIS nie jest obs³ugiwane"
-#: rfc2131.c:898
+#: rfc2131.c:939
#, c-format
msgid "disabling DHCP static address %s for %s"
msgstr "wy³±czam statyczne przypisanie adresu %s dla %s"
-#: rfc2131.c:919
+#: rfc2131.c:960
msgid "unknown lease"
msgstr "nieznana dzier¿awa"
-#: rfc2131.c:951
+#: rfc2131.c:992
#, 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:961
+#: rfc2131.c:1002
#, 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:964
+#: rfc2131.c:1005
#, 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:980 rfc2131.c:1151
+#: rfc2131.c:1021 rfc2131.c:1189
msgid "no unique-id"
msgstr "brak unikalnego id"
-#: rfc2131.c:1048
+#: rfc2131.c:1090
msgid "wrong server-ID"
msgstr "nieprawid³owy identyfikator serwera (server-ID)"
-#: rfc2131.c:1067
+#: rfc2131.c:1108
msgid "wrong address"
msgstr "b³êdny adres"
-#: rfc2131.c:1084
+#: rfc2131.c:1121
msgid "lease not found"
msgstr "dzier¿awa nieznaleziona"
-#: rfc2131.c:1116
+#: rfc2131.c:1154
msgid "address not available"
msgstr "adres niedostêpny"
-#: rfc2131.c:1127
+#: rfc2131.c:1165
msgid "static lease available"
msgstr "dostêpna statyczna dzier¿awa"
-#: rfc2131.c:1131
+#: rfc2131.c:1169
msgid "address reserved"
msgstr "adres zarezerwowany"
-#: rfc2131.c:1139
+#: rfc2131.c:1177
#, c-format
msgid "abandoning lease to %s of %s"
msgstr "porzucam przypisanie do %s nazwy %s"
-#: rfc2131.c:1698
+#: rfc2131.c:1757
#, c-format
msgid "%u tags: %s"
msgstr "%u cechy: %s"
-#: rfc2131.c:1711
+#: rfc2131.c:1770
#, c-format
msgid "%u bootfile name: %s"
msgstr "%u nazwa pliku bootowania: %s"
-#: rfc2131.c:1720
+#: rfc2131.c:1779
#, c-format
msgid "%u server name: %s"
msgstr "%u nazwa serwera: %s"
-#: rfc2131.c:1728
+#: rfc2131.c:1793
#, c-format
msgid "%u next server: %s"
msgstr "%u nastêpny serwer: %s"
-#: rfc2131.c:1795
+#: rfc2131.c:1796
+#, c-format
+msgid "%u broadcast response"
+msgstr "%u odpowied¼ rozg³oszeniowa"
+
+#: rfc2131.c:1859
#, 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:2032
+#: rfc2131.c:2105
msgid "PXE menu too large"
msgstr "menu PXE zbyt du¿e"
-#: rfc2131.c:2143
+#: rfc2131.c:2218
#, c-format
msgid "Ignoring domain %s for DHCP host name %s"
msgstr "Nie uwzglêdniam czê¶ci domenowej (%s) dla komputera %s"
-#: rfc2131.c:2161
+#: rfc2131.c:2236
#, c-format
msgid "%u requested options: %s"
msgstr "%u za¿±dano: %s"
-#: rfc2131.c:2425
+#: rfc2131.c:2503
#, 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"
@@ -1380,46 +1429,47 @@ msgstr "nie potrafiê utworzyæ gniazda DHCP BPF: %s"
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:179
+#: tftp.c:233
msgid "unable to get free port for TFTP"
msgstr "brak wolnego portu dla us³ugi TFTP"
-#: tftp.c:194
+#: tftp.c:248
#, c-format
msgid "unsupported request from %s"
msgstr "nieobs³ugiwane ¿±danie od komputera %s"
-#: tftp.c:282
+#: tftp.c:336
#, c-format
msgid "sent %s to %s"
msgstr "plik %s przes³ano do %s"
-#: tftp.c:305
+#: tftp.c:359
#, c-format
msgid "file %s not found"
msgstr "plik %s nie zosta³ znaleziony"
-#: tftp.c:416
+#: tftp.c:470
#, c-format
msgid "error %d %s received from %s"
msgstr "b³±d %d %s odebrano od %s"
-#: tftp.c:447
+#: tftp.c:501
#, c-format
msgid "failed sending %s to %s"
msgstr "b³±d wysy³ania pliku %s do komputera %s"
-#: log.c:169
+#: log.c:173
#, c-format
msgid "overflow: %d log entries lost"
msgstr "przepe³nienie: stracono %d wpisów do logów"
-#: log.c:246
+#: log.c:250
#, c-format
msgid "log failed: %s"
msgstr "nie uda³o siê zapisaæ komunikatów do %s"
-#: log.c:420
+#: log.c:431
msgid "FAILED to start up"
msgstr "B£¡D: nie uda³o siê uruchomiæ dnsmasq-a"
+
diff --git a/po/pt_BR.po b/po/pt_BR.po
index a380678..a1cdba9 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -20,17 +20,17 @@ msgstr ""
msgid "failed to load names from %s: %s"
msgstr ""
-#: cache.c:798 dhcp.c:804
+#: cache.c:798 dhcp.c:865
#, c-format
msgid "bad address at %s line %d"
msgstr ""
-#: cache.c:856 dhcp.c:820
+#: cache.c:856 dhcp.c:881
#, c-format
msgid "bad name at %s line %d"
msgstr ""
-#: cache.c:863 dhcp.c:894
+#: cache.c:863 dhcp.c:955
#, c-format
msgid "read %s - %d addresses"
msgstr ""
@@ -39,32 +39,37 @@ msgstr ""
msgid "cleared cache"
msgstr ""
-#: cache.c:933 option.c:1069
+#: cache.c:933 option.c:1103
#, c-format
msgid "cannot access directory %s: %s"
msgstr ""
-#: cache.c:1052
+#: cache.c:1053
+#, c-format
+msgid "%s is a CNAME, not giving it to the DHCP lease of %s"
+msgstr ""
+
+#: cache.c:1059
#, 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:1129
+#: cache.c:1132
#, c-format
msgid "time %lu"
msgstr ""
-#: cache.c:1130
+#: cache.c:1133
#, c-format
msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
msgstr ""
-#: cache.c:1132
+#: cache.c:1135
#, c-format
msgid "queries forwarded %u, queries answered locally %u"
msgstr ""
-#: cache.c:1155
+#: cache.c:1158
#, c-format
msgid "server %s#%d: queries sent %u, retried or failed %u"
msgstr ""
@@ -78,7 +83,7 @@ msgstr ""
msgid "failed to allocate memory"
msgstr ""
-#: util.c:229 option.c:549
+#: util.c:229 option.c:567
msgid "could not get memory"
msgstr ""
@@ -97,825 +102,863 @@ msgstr ""
msgid "infinite"
msgstr ""
-#: option.c:228
+#: option.c:240
msgid "Specify local address(es) to listen on."
msgstr ""
-#: option.c:229
+#: option.c:241
msgid "Return ipaddr for all hosts in specified domains."
msgstr ""
-#: option.c:230
+#: option.c:242
msgid "Fake reverse lookups for RFC1918 private address ranges."
msgstr ""
-#: option.c:231
+#: option.c:243
msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
msgstr ""
-#: option.c:232
+#: option.c:244
#, c-format
msgid "Specify the size of the cache in entries (defaults to %s)."
msgstr ""
-#: option.c:233
+#: option.c:245
#, c-format
msgid "Specify configuration file (defaults to %s)."
msgstr ""
-#: option.c:234
+#: option.c:246
msgid "Do NOT fork into the background: run in debug mode."
msgstr ""
-#: option.c:235
+#: option.c:247
msgid "Do NOT forward queries with no domain part."
msgstr ""
-#: option.c:236
+#: option.c:248
msgid "Return self-pointing MX records for local hosts."
msgstr ""
-#: option.c:237
+#: option.c:249
msgid "Expand simple names in /etc/hosts with domain-suffix."
msgstr ""
-#: option.c:238
+#: option.c:250
msgid "Don't forward spurious DNS requests from Windows hosts."
msgstr ""
-#: option.c:239
+#: option.c:251
msgid "Enable DHCP in the range given with lease duration."
msgstr ""
-#: option.c:240
+#: option.c:252
#, c-format
msgid "Change to this group after startup (defaults to %s)."
msgstr ""
-#: option.c:241
+#: option.c:253
msgid "Set address or hostname for a specified machine."
msgstr ""
-#: option.c:242
-msgid "Read DHCP host specs from file"
+#: option.c:254
+msgid "Read DHCP host specs from file."
msgstr ""
-#: option.c:243
-msgid "Read DHCP option specs from file"
+#: option.c:255
+msgid "Read DHCP option specs from file."
msgstr ""
-#: option.c:244
+#: option.c:256
+msgid "Evaluate conditional tag expression."
+msgstr ""
+
+#: option.c:257
#, c-format
msgid "Do NOT load %s file."
msgstr ""
-#: option.c:245
+#: option.c:258
#, c-format
msgid "Specify a hosts file to be read in addition to %s."
msgstr ""
-#: option.c:246
+#: option.c:259
msgid "Specify interface(s) to listen on."
msgstr ""
-#: option.c:247
+#: option.c:260
msgid "Specify interface(s) NOT to listen on."
msgstr ""
-#: option.c:248
+#: option.c:261
msgid "Map DHCP user class to tag."
msgstr ""
-#: option.c:249
+#: option.c:262
msgid "Map RFC3046 circuit-id to tag."
msgstr ""
-#: option.c:250
+#: option.c:263
msgid "Map RFC3046 remote-id to tag."
msgstr ""
-#: option.c:251
+#: option.c:264
msgid "Map RFC3993 subscriber-id to tag."
msgstr ""
-#: option.c:252
+#: option.c:265
msgid "Don't do DHCP for hosts with tag set."
msgstr ""
-#: option.c:253
+#: option.c:266
msgid "Force broadcast replies for hosts with tag set."
msgstr ""
-#: option.c:254
+#: option.c:267
msgid "Do NOT fork into the background, do NOT run in debug mode."
msgstr ""
-#: option.c:255
+#: option.c:268
msgid "Assume we are the only DHCP server on the local network."
msgstr ""
-#: option.c:256
+#: option.c:269
#, c-format
msgid "Specify where to store DHCP leases (defaults to %s)."
msgstr ""
-#: option.c:257
+#: option.c:270
msgid "Return MX records for local hosts."
msgstr ""
-#: option.c:258
+#: option.c:271
msgid "Specify an MX record."
msgstr ""
-#: option.c:259
+#: option.c:272
msgid "Specify BOOTP options to DHCP server."
msgstr ""
-#: option.c:260
+#: option.c:273
#, c-format
msgid "Do NOT poll %s file, reload only on SIGHUP."
msgstr ""
-#: option.c:261
+#: option.c:274
msgid "Do NOT cache failed search results."
msgstr ""
-#: option.c:262
+#: option.c:275
#, c-format
msgid "Use nameservers strictly in the order given in %s."
msgstr ""
-#: option.c:263
+#: option.c:276
msgid "Specify options to be sent to DHCP clients."
msgstr ""
-#: option.c:264
+#: option.c:277
msgid "DHCP option sent even if the client does not request it."
msgstr ""
-#: option.c:265
+#: option.c:278
msgid "Specify port to listen for DNS requests on (defaults to 53)."
msgstr ""
-#: option.c:266
+#: option.c:279
#, c-format
msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
msgstr ""
-#: option.c:267
+#: option.c:280
msgid "Log DNS queries."
msgstr ""
-#: option.c:268
+#: option.c:281
msgid "Force the originating port for upstream DNS queries."
msgstr ""
-#: option.c:269
+#: option.c:282
msgid "Do NOT read resolv.conf."
msgstr ""
-#: option.c:270
+#: option.c:283
#, c-format
msgid "Specify path to resolv.conf (defaults to %s)."
msgstr ""
-#: option.c:271
+#: option.c:284
msgid "Specify address(es) of upstream servers with optional domains."
msgstr ""
-#: option.c:272
+#: option.c:285
msgid "Never forward queries to specified domains."
msgstr ""
-#: option.c:273
+#: option.c:286
msgid "Specify the domain to be assigned in DHCP leases."
msgstr ""
-#: option.c:274
+#: option.c:287
msgid "Specify default target in an MX record."
msgstr ""
-#: option.c:275
+#: option.c:288
msgid "Specify time-to-live in seconds for replies from /etc/hosts."
msgstr ""
-#: option.c:276
+#: option.c:289
msgid "Specify time-to-live in seconds for negative caching."
msgstr ""
-#: option.c:277
+#: option.c:290
+msgid "Specify time-to-live in seconds for maximum TTL to send to clients."
+msgstr ""
+
+#: option.c:291
#, c-format
msgid "Change to this user after startup. (defaults to %s)."
msgstr ""
-#: option.c:278
+#: option.c:292
msgid "Map DHCP vendor class to tag."
msgstr ""
-#: option.c:279
+#: option.c:293
msgid "Display dnsmasq version and copyright information."
msgstr ""
-#: option.c:280
+#: option.c:294
msgid "Translate IPv4 addresses from upstream servers."
msgstr ""
-#: option.c:281
+#: option.c:295
msgid "Specify a SRV record."
msgstr ""
-#: option.c:282
+#: option.c:296
msgid "Display this message. Use --help dhcp for known DHCP options."
msgstr ""
-#: option.c:283
+#: option.c:297
#, c-format
msgid "Specify path of PID file (defaults to %s)."
msgstr ""
-#: option.c:284
+#: option.c:298
#, c-format
msgid "Specify maximum number of DHCP leases (defaults to %s)."
msgstr ""
-#: option.c:285
+#: option.c:299
msgid "Answer DNS queries based on the interface a query was sent to."
msgstr ""
-#: option.c:286
+#: option.c:300
msgid "Specify TXT DNS record."
msgstr ""
-#: option.c:287
+#: option.c:301
msgid "Specify PTR DNS record."
msgstr ""
-#: option.c:288
+#: option.c:302
msgid "Give DNS name to IPv4 address of interface."
msgstr ""
-#: option.c:289
+#: option.c:303
msgid "Bind only to interfaces in use."
msgstr ""
-#: option.c:290
+#: option.c:304
#, c-format
msgid "Read DHCP static host information from %s."
msgstr ""
-#: option.c:291
+#: option.c:305
msgid "Enable the DBus interface for setting upstream servers, etc."
msgstr ""
-#: option.c:292
+#: option.c:306
msgid "Do not provide DHCP on this interface, only provide DNS."
msgstr ""
-#: option.c:293
+#: option.c:307
msgid "Enable dynamic address allocation for bootp."
msgstr ""
-#: option.c:294
+#: option.c:308
msgid "Map MAC address (with wildcards) to option set."
msgstr ""
-#: option.c:295
+#: option.c:309
msgid "Treat DHCP requests on aliases as arriving from interface."
msgstr ""
-#: option.c:296
+#: option.c:310
msgid "Disable ICMP echo address checking in the DHCP server."
msgstr ""
-#: option.c:297
+#: option.c:311
msgid "Script to run on DHCP lease creation and destruction."
msgstr ""
-#: option.c:298
+#: option.c:312
msgid "Read configuration from all the files in this directory."
msgstr ""
-#: option.c:299
+#: option.c:313
msgid "Log to this syslog facility or file. (defaults to DAEMON)"
msgstr ""
-#: option.c:300
+#: option.c:314
msgid "Do not use leasefile."
msgstr ""
-#: option.c:301
+#: option.c:315
#, c-format
msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
msgstr ""
-#: option.c:302
+#: option.c:316
#, c-format
msgid "Clear DNS cache when reloading %s."
msgstr ""
-#: option.c:303
+#: option.c:317
msgid "Ignore hostnames provided by DHCP clients."
msgstr ""
-#: option.c:304
+#: option.c:318
msgid "Do NOT reuse filename and server fields for extra DHCP options."
msgstr ""
-#: option.c:305
+#: option.c:319
msgid "Enable integrated read-only TFTP server."
msgstr ""
-#: option.c:306
+#: option.c:320
msgid "Export files by TFTP only from the specified subtree."
msgstr ""
-#: option.c:307
+#: option.c:321
msgid "Add client IP address to tftp-root."
msgstr ""
-#: option.c:308
+#: option.c:322
msgid "Allow access only to files owned by the user running dnsmasq."
msgstr ""
-#: option.c:309
+#: option.c:323
#, c-format
msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
msgstr ""
-#: option.c:310
+#: option.c:324
msgid "Disable the TFTP blocksize extension."
msgstr ""
-#: option.c:311
+#: option.c:325
msgid "Ephemeral port range for use by TFTP transfers."
msgstr ""
-#: option.c:312
+#: option.c:326
msgid "Extra logging for DHCP."
msgstr ""
-#: option.c:313
+#: option.c:327
msgid "Enable async. logging; optionally set queue length."
msgstr ""
-#: option.c:314
+#: option.c:328
msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
msgstr ""
-#: option.c:315
+#: option.c:329
+msgid "Allow rebinding of 127.0.0.0/8, for RBL servers."
+msgstr ""
+
+#: option.c:330
+msgid "Inhibit DNS-rebind protection on this domain."
+msgstr ""
+
+#: option.c:331
msgid "Always perform DNS queries to all servers."
msgstr ""
-#: option.c:316
+#: option.c:332
msgid "Set tag if client includes matching option in request."
msgstr ""
-#: option.c:317
+#: option.c:333
msgid "Use alternative ports for DHCP."
msgstr ""
-#: option.c:318
+#: option.c:334
msgid "Run lease-change script as this user."
msgstr ""
-#: option.c:319
+#: option.c:335
msgid "Specify NAPTR DNS record."
msgstr ""
-#: option.c:320
+#: option.c:336
msgid "Specify lowest port available for DNS query transmission."
msgstr ""
-#: option.c:321
+#: option.c:337
msgid "Use only fully qualified domain names for DHCP clients."
msgstr ""
-#: option.c:322
+#: option.c:338
+msgid "Generate hostnames based on MAC address for nameless clients."
+msgstr ""
+
+#: option.c:339
+msgid "Use these DHCP relays as full proxies."
+msgstr ""
+
+#: option.c:340
msgid "Specify alias name for LOCAL DNS name."
msgstr ""
-#: option.c:323
+#: option.c:341
msgid "Prompt to send to PXE clients."
msgstr ""
-#: option.c:324
+#: option.c:342
msgid "Boot service for PXE menu."
msgstr ""
-#: option.c:325
+#: option.c:343
msgid "Check configuration syntax."
msgstr ""
-#: option.c:614
+#: option.c:632
#, c-format
msgid ""
"Usage: dnsmasq [options]\n"
"\n"
msgstr ""
-#: option.c:616
+#: option.c:634
#, c-format
msgid "Use short options only on the command line.\n"
msgstr ""
-#: option.c:618
+#: option.c:636
#, c-format
msgid "Valid options are:\n"
msgstr ""
-#: option.c:659
+#: option.c:677
#, c-format
msgid "Known DHCP options:\n"
msgstr ""
-#: option.c:747
+#: option.c:781
msgid "bad dhcp-option"
msgstr ""
-#: option.c:804
+#: option.c:838
msgid "bad IP address"
msgstr ""
-#: option.c:903
+#: option.c:937
msgid "bad domain in dhcp-option"
msgstr ""
-#: option.c:964
+#: option.c:998
msgid "dhcp-option too long"
msgstr ""
-#: option.c:973
+#: option.c:1007
msgid "illegal dhcp-match"
msgstr ""
-#: option.c:1009
+#: option.c:1043
msgid "illegal repeated flag"
msgstr ""
-#: option.c:1017
+#: option.c:1051
msgid "illegal repeated keyword"
msgstr ""
-#: option.c:1100 tftp.c:359
+#: option.c:1134 tftp.c:413
#, c-format
msgid "cannot access %s: %s"
msgstr ""
-#: option.c:1145
+#: option.c:1179
msgid "only one dhcp-hostsfile allowed"
msgstr ""
-#: option.c:1152
+#: option.c:1186
msgid "only one dhcp-optsfile allowed"
msgstr ""
-#: option.c:1197
+#: option.c:1231
msgid "bad MX preference"
msgstr ""
-#: option.c:1202
+#: option.c:1236
msgid "bad MX name"
msgstr ""
-#: option.c:1216
+#: option.c:1250
msgid "bad MX target"
msgstr ""
-#: option.c:1226
+#: option.c:1260
msgid "cannot run scripts under uClinux"
msgstr ""
-#: option.c:1228
+#: option.c:1262
msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts"
msgstr ""
-#: option.c:1456 option.c:1460
+#: option.c:1507 option.c:1511
msgid "bad port"
msgstr ""
-#: option.c:1479 option.c:1504
+#: option.c:1530 option.c:1555
msgid "interface binding not supported"
msgstr ""
-#: option.c:1625
+#: option.c:1701
msgid "bad port range"
msgstr ""
-#: option.c:1642
+#: option.c:1718
msgid "bad bridge-interface"
msgstr ""
-#: option.c:1683
+#: option.c:1760
msgid "bad dhcp-range"
msgstr ""
-#: option.c:1709
-msgid "only one netid tag allowed"
+#: option.c:1788
+msgid "only one tag allowed"
msgstr ""
-#: option.c:1754
+#: option.c:1835
msgid "inconsistent DHCP range"
msgstr ""
-#: option.c:1926
+#: option.c:2010
msgid "bad DHCP host name"
msgstr ""
-#: option.c:2221 option.c:2501
+#: option.c:2091
+msgid "bad tag-if"
+msgstr ""
+
+#: option.c:2365 option.c:2664
msgid "invalid port number"
msgstr ""
-#: option.c:2304
+#: option.c:2427
+msgid "bad dhcp-proxy address"
+msgstr ""
+
+#: option.c:2467
msgid "invalid alias range"
msgstr ""
-#: option.c:2317
+#: option.c:2480
msgid "bad interface name"
msgstr ""
-#: option.c:2342
+#: option.c:2505
msgid "bad CNAME"
msgstr ""
-#: option.c:2347
+#: option.c:2510
msgid "duplicate CNAME"
msgstr ""
-#: option.c:2367
+#: option.c:2530
msgid "bad PTR record"
msgstr ""
-#: option.c:2398
+#: option.c:2561
msgid "bad NAPTR record"
msgstr ""
-#: option.c:2423
+#: option.c:2586
msgid "TXT record string too long"
msgstr ""
-#: option.c:2471
+#: option.c:2634
msgid "bad TXT record"
msgstr ""
-#: option.c:2487
+#: option.c:2650
msgid "bad SRV record"
msgstr ""
-#: option.c:2494
+#: option.c:2657
msgid "bad SRV target"
msgstr ""
-#: option.c:2508
+#: option.c:2671
msgid "invalid priority"
msgstr ""
-#: option.c:2515
+#: option.c:2678
msgid "invalid weight"
msgstr ""
-#: option.c:2534
+#: option.c:2697
msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DBus support)"
msgstr ""
-#: option.c:2577
+#: option.c:2739
#, c-format
msgid "files nested too deep in %s"
msgstr ""
-#: option.c:2585 tftp.c:513
+#: option.c:2747 tftp.c:567
#, c-format
msgid "cannot read %s: %s"
msgstr ""
-#: option.c:2646
+#: option.c:2804
msgid "missing \""
msgstr ""
-#: option.c:2693
+#: option.c:2863
msgid "bad option"
msgstr ""
-#: option.c:2695
+#: option.c:2865
msgid "extraneous parameter"
msgstr ""
-#: option.c:2697
+#: option.c:2867
msgid "missing parameter"
msgstr ""
-#: option.c:2705
+#: option.c:2871
msgid "error"
msgstr ""
-#: option.c:2711
+#: option.c:2876
#, c-format
msgid "%s at line %d of %%s"
msgstr ""
-#: option.c:2760 option.c:2791
+#: option.c:2933 option.c:2964
#, c-format
msgid "read %s"
msgstr ""
-#: option.c:2863
+#: option.c:3036
#, c-format
msgid "Dnsmasq version %s %s\n"
msgstr ""
-#: option.c:2864
+#: option.c:3037
#, c-format
msgid ""
"Compile time options %s\n"
"\n"
msgstr ""
-#: option.c:2865
+#: option.c:3038
#, c-format
msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
msgstr ""
-#: option.c:2866
+#: option.c:3039
#, c-format
msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
msgstr ""
-#: option.c:2867
+#: option.c:3040
#, c-format
msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
msgstr ""
-#: option.c:2878
+#: option.c:3051
msgid "try --help"
msgstr ""
-#: option.c:2880
+#: option.c:3053
msgid "try -w"
msgstr ""
-#: option.c:2883
+#: option.c:3056
#, c-format
msgid "bad command line options: %s"
msgstr ""
-#: option.c:2924
+#: option.c:3097
#, c-format
msgid "cannot get host-name: %s"
msgstr ""
-#: option.c:2952
+#: option.c:3125
msgid "only one resolv.conf file allowed in no-poll mode."
msgstr ""
-#: option.c:2962
+#: option.c:3135
msgid "must have exactly one resolv.conf to read domain from."
msgstr ""
-#: option.c:2965 network.c:777 dhcp.c:753
+#: option.c:3138 network.c:813 dhcp.c:814
#, c-format
msgid "failed to read %s: %s"
msgstr ""
-#: option.c:2982
+#: option.c:3155
#, c-format
msgid "no search directive found in %s"
msgstr ""
-#: option.c:3003
+#: option.c:3176
msgid "there must be a default domain when --dhcp-fqdn is set"
msgstr ""
-#: option.c:3007
+#: option.c:3180
msgid "syntax check OK"
msgstr ""
-#: forward.c:405
+#: forward.c:427
#, c-format
msgid "nameserver %s refused to do a recursive query"
msgstr ""
-#: forward.c:433
-msgid "possible DNS-rebind attack detected"
+#: forward.c:455
+#, c-format
+msgid "possible DNS-rebind attack detected: %s"
msgstr ""
-#: network.c:73
+#: network.c:110
#, c-format
msgid "unknown interface %s in bridge-interface"
msgstr ""
-#: network.c:436 dnsmasq.c:189
+#: network.c:467 dnsmasq.c:188
#, c-format
msgid "failed to create listening socket: %s"
msgstr ""
-#: network.c:443
+#: network.c:474
#, c-format
msgid "failed to set IPV6 options on listening socket: %s"
msgstr ""
-#: network.c:469
+#: network.c:500
#, c-format
msgid "failed to bind listening socket for %s: %s"
msgstr ""
-#: network.c:474
+#: network.c:505
#, c-format
msgid "failed to listen on socket: %s"
msgstr ""
-#: network.c:486
+#: network.c:517
#, c-format
msgid "failed to create TFTP socket: %s"
msgstr ""
-#: network.c:680
+#: network.c:711
#, c-format
msgid "failed to bind server socket for %s: %s"
msgstr ""
-#: network.c:717
+#: network.c:748
#, c-format
msgid "ignoring nameserver %s - local interface"
msgstr ""
-#: network.c:728
+#: network.c:759
#, c-format
msgid "ignoring nameserver %s - cannot make/bind socket: %s"
msgstr ""
-#: network.c:743
+#: network.c:776
msgid "unqualified"
msgstr ""
-#: network.c:743
+#: network.c:776
msgid "names"
msgstr ""
-#: network.c:745
+#: network.c:778
msgid "default"
msgstr ""
-#: network.c:747
+#: network.c:780
msgid "domain"
msgstr ""
-#: network.c:750
+#: network.c:783
#, c-format
msgid "using local addresses only for %s %s"
msgstr ""
-#: network.c:752
+#: network.c:785
+#, c-format
+msgid "using standard nameservers for %s %s"
+msgstr ""
+
+#: network.c:787
#, c-format
msgid "using nameserver %s#%d for %s %s"
msgstr ""
-#: network.c:755
+#: network.c:790
#, c-format
msgid "using nameserver %s#%d(via %s)"
msgstr ""
-#: network.c:757
+#: network.c:792
#, c-format
msgid "using nameserver %s#%d"
msgstr ""
-#: dnsmasq.c:146
+#: dnsmasq.c:145
msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
msgstr ""
-#: dnsmasq.c:151
+#: dnsmasq.c:150
msgid "asychronous logging is not available under Solaris"
msgstr ""
-#: dnsmasq.c:170
+#: dnsmasq.c:169
#, c-format
msgid "failed to find list of interfaces: %s"
msgstr ""
-#: dnsmasq.c:178
+#: dnsmasq.c:177
#, c-format
msgid "unknown interface %s"
msgstr ""
-#: dnsmasq.c:184
+#: dnsmasq.c:183
#, c-format
msgid "no interface with address %s"
msgstr ""
-#: dnsmasq.c:201 dnsmasq.c:670
+#: dnsmasq.c:200 dnsmasq.c:671
#, c-format
msgid "DBus error: %s"
msgstr ""
-#: dnsmasq.c:204
+#: dnsmasq.c:203
msgid "DBus not available: set HAVE_DBUS in src/config.h"
msgstr ""
-#: dnsmasq.c:230
+#: dnsmasq.c:229
#, c-format
msgid "unknown user or group: %s"
msgstr ""
-#: dnsmasq.c:287
+#: dnsmasq.c:284
#, c-format
msgid "cannot chdir to filesystem root: %s"
msgstr ""
@@ -1007,75 +1050,75 @@ msgstr ""
msgid "restricting maximum simultaneous TFTP transfers to %d"
msgstr ""
-#: dnsmasq.c:672
+#: dnsmasq.c:673
msgid "connected to system DBus"
msgstr ""
-#: dnsmasq.c:767
+#: dnsmasq.c:768
#, c-format
msgid "cannot fork into background: %s"
msgstr ""
-#: dnsmasq.c:770
+#: dnsmasq.c:771
#, c-format
msgid "failed to create helper: %s"
msgstr ""
-#: dnsmasq.c:773
+#: dnsmasq.c:774
#, c-format
msgid "setting capabilities failed: %s"
msgstr ""
-#: dnsmasq.c:777
+#: dnsmasq.c:778
#, c-format
msgid "failed to change user-id to %s: %s"
msgstr ""
-#: dnsmasq.c:782
+#: dnsmasq.c:783
#, c-format
msgid "failed to change group-id to %s: %s"
msgstr ""
-#: dnsmasq.c:785
+#: dnsmasq.c:786
#, c-format
msgid "failed to open pidfile %s: %s"
msgstr ""
-#: dnsmasq.c:788
+#: dnsmasq.c:789
#, c-format
msgid "cannot open %s: %s"
msgstr ""
-#: dnsmasq.c:843
+#: dnsmasq.c:844
#, c-format
msgid "child process killed by signal %d"
msgstr ""
-#: dnsmasq.c:847
+#: dnsmasq.c:848
#, c-format
msgid "child process exited with status %d"
msgstr ""
-#: dnsmasq.c:851
+#: dnsmasq.c:852
#, c-format
msgid "failed to execute %s: %s"
msgstr ""
-#: dnsmasq.c:895
+#: dnsmasq.c:896
msgid "exiting on receipt of SIGTERM"
msgstr ""
-#: dnsmasq.c:913
+#: dnsmasq.c:924
#, c-format
msgid "failed to access %s: %s"
msgstr ""
-#: dnsmasq.c:935
+#: dnsmasq.c:954
#, c-format
msgid "reading %s"
msgstr ""
-#: dnsmasq.c:946
+#: dnsmasq.c:965
#, c-format
msgid "no servers found in %s, will retry"
msgstr ""
@@ -1105,237 +1148,242 @@ msgstr ""
msgid "cannot create ICMP raw socket: %s."
msgstr ""
-#: dhcp.c:240
+#: dhcp.c:281
#, c-format
msgid "DHCP packet received on %s which has no address"
msgstr ""
-#: dhcp.c:404
+#: dhcp.c:445
#, c-format
msgid "DHCP range %s -- %s is not consistent with netmask %s"
msgstr ""
-#: dhcp.c:791
+#: dhcp.c:852
#, c-format
msgid "bad line at %s line %d"
msgstr ""
-#: dhcp.c:834
+#: dhcp.c:895
#, c-format
msgid "ignoring %s line %d, duplicate name or IP address"
msgstr ""
-#: dhcp.c:916
+#: dhcp.c:977
#, c-format
msgid "duplicate IP address %s in dhcp-config directive."
msgstr ""
-#: dhcp.c:919
+#: dhcp.c:980
#, c-format
msgid "duplicate IP address %s in %s."
msgstr ""
-#: dhcp.c:962
+#: dhcp.c:1023
#, c-format
msgid "%s has more than one address in hostsfile, using %s for DHCP"
msgstr ""
-#: dhcp.c:967
+#: dhcp.c:1028
#, c-format
msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr ""
-#: lease.c:66
+#: lease.c:67
#, c-format
msgid "cannot open or create lease file %s: %s"
msgstr ""
-#: lease.c:92
+#: lease.c:93
msgid "too many stored leases"
msgstr ""
-#: lease.c:128
+#: lease.c:129
#, c-format
msgid "cannot run lease-init script %s: %s"
msgstr ""
-#: lease.c:134
+#: lease.c:135
#, c-format
msgid "lease-init script returned exit code %s"
msgstr ""
-#: lease.c:234
+#: lease.c:235
#, c-format
msgid "failed to write %s: %s (retry in %us)"
msgstr ""
-#: rfc2131.c:375
+#: rfc2131.c:377
#, c-format
msgid "no address range available for DHCP request %s %s"
msgstr ""
-#: rfc2131.c:376
+#: rfc2131.c:378
msgid "with subnet selector"
msgstr ""
-#: rfc2131.c:376
+#: rfc2131.c:378
msgid "via"
msgstr ""
-#: rfc2131.c:391
+#: rfc2131.c:393
#, c-format
-msgid "%u Available DHCP subnet: %s/%s"
+msgid "%u available DHCP subnet: %s/%s"
msgstr ""
-#: rfc2131.c:394
+#: rfc2131.c:396
#, c-format
-msgid "%u Available DHCP range: %s -- %s"
+msgid "%u available DHCP range: %s -- %s"
msgstr ""
-#: rfc2131.c:423
+#: rfc2131.c:425
msgid "disabled"
msgstr ""
-#: rfc2131.c:457 rfc2131.c:928 rfc2131.c:1277
+#: rfc2131.c:466 rfc2131.c:969 rfc2131.c:1335
msgid "ignored"
msgstr ""
-#: rfc2131.c:472 rfc2131.c:1145
+#: rfc2131.c:481 rfc2131.c:1183
msgid "address in use"
msgstr ""
-#: rfc2131.c:486 rfc2131.c:982
+#: rfc2131.c:495 rfc2131.c:1023
msgid "no address available"
msgstr ""
-#: rfc2131.c:493 rfc2131.c:1108
+#: rfc2131.c:502 rfc2131.c:1146
msgid "wrong network"
msgstr ""
-#: rfc2131.c:506
+#: rfc2131.c:516
msgid "no address configured"
msgstr ""
-#: rfc2131.c:512 rfc2131.c:1158
+#: rfc2131.c:522 rfc2131.c:1196
msgid "no leases left"
msgstr ""
-#: rfc2131.c:597
+#: rfc2131.c:607
#, c-format
msgid "%u client provides name: %s"
msgstr ""
-#: rfc2131.c:741
+#: rfc2131.c:762
#, c-format
-msgid "%u Vendor class: %s"
+msgid "%u vendor class: %s"
msgstr ""
-#: rfc2131.c:743
+#: rfc2131.c:764
#, c-format
-msgid "%u User class: %s"
+msgid "%u user class: %s"
msgstr ""
-#: rfc2131.c:782
+#: rfc2131.c:823
msgid "PXE BIS not supported"
msgstr ""
-#: rfc2131.c:898
+#: rfc2131.c:939
#, c-format
msgid "disabling DHCP static address %s for %s"
msgstr ""
-#: rfc2131.c:919
+#: rfc2131.c:960
msgid "unknown lease"
msgstr ""
-#: rfc2131.c:951
+#: rfc2131.c:992
#, c-format
msgid "not using configured address %s because it is leased to %s"
msgstr ""
-#: rfc2131.c:961
+#: rfc2131.c:1002
#, c-format
msgid "not using configured address %s because it is in use by the server or relay"
msgstr ""
-#: rfc2131.c:964
+#: rfc2131.c:1005
#, c-format
msgid "not using configured address %s because it was previously declined"
msgstr ""
-#: rfc2131.c:980 rfc2131.c:1151
+#: rfc2131.c:1021 rfc2131.c:1189
msgid "no unique-id"
msgstr ""
-#: rfc2131.c:1048
+#: rfc2131.c:1090
msgid "wrong server-ID"
msgstr ""
-#: rfc2131.c:1067
+#: rfc2131.c:1108
msgid "wrong address"
msgstr ""
-#: rfc2131.c:1084
+#: rfc2131.c:1121
msgid "lease not found"
msgstr ""
-#: rfc2131.c:1116
+#: rfc2131.c:1154
msgid "address not available"
msgstr ""
-#: rfc2131.c:1127
+#: rfc2131.c:1165
msgid "static lease available"
msgstr ""
-#: rfc2131.c:1131
+#: rfc2131.c:1169
msgid "address reserved"
msgstr ""
-#: rfc2131.c:1139
+#: rfc2131.c:1177
#, c-format
msgid "abandoning lease to %s of %s"
msgstr ""
-#: rfc2131.c:1698
+#: rfc2131.c:1757
#, c-format
msgid "%u tags: %s"
msgstr ""
-#: rfc2131.c:1711
+#: rfc2131.c:1770
#, c-format
msgid "%u bootfile name: %s"
msgstr ""
-#: rfc2131.c:1720
+#: rfc2131.c:1779
#, c-format
msgid "%u server name: %s"
msgstr ""
-#: rfc2131.c:1728
+#: rfc2131.c:1793
#, c-format
msgid "%u next server: %s"
msgstr ""
-#: rfc2131.c:1795
+#: rfc2131.c:1796
+#, c-format
+msgid "%u broadcast response"
+msgstr ""
+
+#: rfc2131.c:1859
#, c-format
msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
msgstr ""
-#: rfc2131.c:2032
+#: rfc2131.c:2105
msgid "PXE menu too large"
msgstr ""
-#: rfc2131.c:2143
+#: rfc2131.c:2218
#, c-format
msgid "Ignoring domain %s for DHCP host name %s"
msgstr ""
-#: rfc2131.c:2161
+#: rfc2131.c:2236
#, c-format
msgid "%u requested options: %s"
msgstr ""
-#: rfc2131.c:2425
+#: rfc2131.c:2503
#, c-format
msgid "cannot send RFC3925 option: too many options for enterprise number %d"
msgstr ""
@@ -1372,45 +1420,45 @@ msgstr ""
msgid "DHCP request for unsupported hardware type (%d) received on %s"
msgstr ""
-#: tftp.c:179
+#: tftp.c:233
msgid "unable to get free port for TFTP"
msgstr ""
-#: tftp.c:194
+#: tftp.c:248
#, c-format
msgid "unsupported request from %s"
msgstr ""
-#: tftp.c:282
+#: tftp.c:336
#, c-format
msgid "sent %s to %s"
msgstr ""
-#: tftp.c:305
+#: tftp.c:359
#, c-format
msgid "file %s not found"
msgstr ""
-#: tftp.c:416
+#: tftp.c:470
#, c-format
msgid "error %d %s received from %s"
msgstr ""
-#: tftp.c:447
+#: tftp.c:501
#, c-format
msgid "failed sending %s to %s"
msgstr ""
-#: log.c:169
+#: log.c:173
#, c-format
msgid "overflow: %d log entries lost"
msgstr ""
-#: log.c:246
+#: log.c:250
#, c-format
msgid "log failed: %s"
msgstr ""
-#: log.c:420
+#: log.c:431
msgid "FAILED to start up"
msgstr ""
diff --git a/po/ro.po b/po/ro.po
index 700c5b6..aae4251 100644
--- a/po/ro.po
+++ b/po/ro.po
@@ -20,17 +20,17 @@ msgstr ""
msgid "failed to load names from %s: %s"
msgstr "încărcarea numelor din %s: %s a eşuat"
-#: cache.c:798 dhcp.c:804
+#: cache.c:798 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:820
+#: cache.c:856 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:894
+#: cache.c:863 dhcp.c:955
#, c-format
msgid "read %s - %d addresses"
msgstr "citesc %s - %d adrese"
@@ -39,32 +39,37 @@ msgstr "citesc %s - %d adrese"
msgid "cleared cache"
msgstr "memoria temporară a fost ştearsă"
-#: cache.c:933 option.c:1069
+#: cache.c:933 option.c:1103
#, fuzzy, c-format
msgid "cannot access directory %s: %s"
msgstr "nu pot citi %s: %s"
-#: cache.c:1052
+#: cache.c:1053
+#, c-format
+msgid "%s is a CNAME, not giving it to the DHCP lease of %s"
+msgstr ""
+
+#: cache.c:1059
#, 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:1129
+#: cache.c:1132
#, c-format
msgid "time %lu"
msgstr ""
-#: cache.c:1130
+#: cache.c:1133
#, 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:1132
+#: cache.c:1135
#, c-format
msgid "queries forwarded %u, queries answered locally %u"
msgstr ""
-#: cache.c:1155
+#: cache.c:1158
#, c-format
msgid "server %s#%d: queries sent %u, retried or failed %u"
msgstr ""
@@ -79,7 +84,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:549
+#: util.c:229 option.c:567
msgid "could not get memory"
msgstr "nu am putut aloca memorie"
@@ -98,429 +103,455 @@ msgstr "nu pot încărca %d bytes"
msgid "infinite"
msgstr "infinit"
-#: option.c:228
+#: option.c:240
msgid "Specify local address(es) to listen on."
msgstr "Specificaţi adresele locale deservite."
-#: option.c:229
+#: option.c:241
msgid "Return ipaddr for all hosts in specified domains."
msgstr "Afişează adresele IP ale maşinilor în domeniul dat."
-#: option.c:230
+#: option.c:242
msgid "Fake reverse lookups for RFC1918 private address ranges."
msgstr "Simulează căutări după adresă pentru domenii de adresă private (RFC1918)."
-#: option.c:231
+#: option.c:243
msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
msgstr "Interpretează adresa IP ca NXDOMAIN (împotriva manipulărilor Verisign)"
-#: option.c:232
+#: option.c:244
#, 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:233
+#: option.c:245
#, c-format
msgid "Specify configuration file (defaults to %s)."
msgstr "Specifică fişier de configurare (implicit e %s)."
-#: option.c:234
+#: option.c:246
msgid "Do NOT fork into the background: run in debug mode."
msgstr "NU porneşte în fundal: rulează în modul depanare."
-#: option.c:235
+#: option.c:247
msgid "Do NOT forward queries with no domain part."
msgstr "NU înainta cererile ce nu conţin domeniu DNS."
-#: option.c:236
+#: option.c:248
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:237
+#: option.c:249
msgid "Expand simple names in /etc/hosts with domain-suffix."
msgstr "Adaugă numelor simple din /etc/hosts numele domeniului ca sufix."
-#: option.c:238
+#: option.c:250
msgid "Don't forward spurious DNS requests from Windows hosts."
msgstr "Nu inainta cereri DNS defecte provenite de la maÅŸini Windows."
-#: option.c:239
+#: option.c:251
msgid "Enable DHCP in the range given with lease duration."
msgstr "Activează DHCP în domeniul dat cu durată limitată de împrumut."
-#: option.c:240
+#: option.c:252
#, c-format
msgid "Change to this group after startup (defaults to %s)."
msgstr "Rulează sub acest grup după pornire (implicit e %s)."
-#: option.c:241
+#: option.c:253
msgid "Set address or hostname for a specified machine."
msgstr "Schimbă adresa sau numele maşinii specificate."
-#: option.c:242
-msgid "Read DHCP host specs from file"
+#: option.c:254
+#, fuzzy
+msgid "Read DHCP host specs from file."
+msgstr "nume MX invalid"
+
+#: option.c:255
+msgid "Read DHCP option specs from file."
msgstr ""
-#: option.c:243
-msgid "Read DHCP option specs from file"
+#: option.c:256
+msgid "Evaluate conditional tag expression."
msgstr ""
-#: option.c:244
+#: option.c:257
#, c-format
msgid "Do NOT load %s file."
msgstr "Nu încarcă fişierul %s."
-#: option.c:245
+#: option.c:258
#, 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:246
+#: option.c:259
msgid "Specify interface(s) to listen on."
msgstr "Specifică interfeţele deservite."
-#: option.c:247
+#: option.c:260
msgid "Specify interface(s) NOT to listen on."
msgstr "Specifică interfeţele NE-deservite."
-#: option.c:248
+#: option.c:261
#, fuzzy
msgid "Map DHCP user class to tag."
msgstr "Leagă clasa de utilizator DHCP cu grup de opţiuni."
-#: option.c:249
+#: option.c:262
msgid "Map RFC3046 circuit-id to tag."
msgstr ""
-#: option.c:250
+#: option.c:263
msgid "Map RFC3046 remote-id to tag."
msgstr ""
-#: option.c:251
+#: option.c:264
msgid "Map RFC3993 subscriber-id to tag."
msgstr ""
-#: option.c:252
+#: option.c:265
#, fuzzy
msgid "Don't do DHCP for hosts with tag set."
msgstr "Nu furniza DHCP maşinilor din grupul de opţiuni."
-#: option.c:253
+#: option.c:266
#, fuzzy
msgid "Force broadcast replies for hosts with tag set."
msgstr "Nu furniza DHCP maşinilor din grupul de opţiuni."
-#: option.c:254
+#: option.c:267
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:255
+#: option.c:268
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:256
+#: option.c:269
#, 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:257
+#: option.c:270
msgid "Return MX records for local hosts."
msgstr "Răspunde cu întregistrări MX pentru maşini locale."
-#: option.c:258
+#: option.c:271
msgid "Specify an MX record."
msgstr "Specifică o înregistrare MX."
-#: option.c:259
+#: option.c:272
msgid "Specify BOOTP options to DHCP server."
msgstr "Specifică opţiuni BOOTP serverului DHCP."
-#: option.c:260
+#: option.c:273
#, 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:261
+#: option.c:274
msgid "Do NOT cache failed search results."
msgstr "NU memora rezultatele de căutare DNS eşuatată."
-#: option.c:262
+#: option.c:275
#, 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:263
+#: option.c:276
#, fuzzy
msgid "Specify options to be sent to DHCP clients."
msgstr "Configurează opţiuni în plusce trebuie trimise clienţilor DHCP."
-#: option.c:264
+#: option.c:277
msgid "DHCP option sent even if the client does not request it."
msgstr ""
-#: option.c:265
+#: option.c:278
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:266
+#: option.c:279
#, 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:267
+#: option.c:280
#, fuzzy
msgid "Log DNS queries."
msgstr "Înregistrează tranzacţiile."
-#: option.c:268
+#: option.c:281
#, fuzzy
msgid "Force the originating port for upstream DNS queries."
msgstr "Forţează acest port pentru datele ce pleacă."
-#: option.c:269
+#: option.c:282
msgid "Do NOT read resolv.conf."
msgstr "NU citi fiÅŸierul resolv.conf"
-#: option.c:270
+#: option.c:283
#, c-format
msgid "Specify path to resolv.conf (defaults to %s)."
msgstr "Specifică calea către resolv.conf (implicit e %s)."
-#: option.c:271
+#: option.c:284
msgid "Specify address(es) of upstream servers with optional domains."
msgstr "Specifică adresele server(elor) superioare cu domenii opţionale."
-#: option.c:272
+#: option.c:285
msgid "Never forward queries to specified domains."
msgstr "Nu înaintează cererile spre domeniile specificate."
-#: option.c:273
+#: option.c:286
msgid "Specify the domain to be assigned in DHCP leases."
msgstr "Specifică domeniul de transmis prin DHCP."
-#: option.c:274
+#: option.c:287
msgid "Specify default target in an MX record."
msgstr "Specifică o ţintă într-o înregistrare MX."
-#: option.c:275
+#: option.c:288
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:276
+#: option.c:289
#, fuzzy
msgid "Specify time-to-live in seconds for negative caching."
msgstr "Specifică TTL în secunde pentru răspunsurile din /etc/hosts."
-#: option.c:277
+#: option.c:290
+#, 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
#, c-format
msgid "Change to this user after startup. (defaults to %s)."
msgstr "Rulează sub acest utilizator după pornire. (implicit e %s)."
-#: option.c:278
+#: option.c:292
#, 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:279
+#: option.c:293
msgid "Display dnsmasq version and copyright information."
msgstr "Afişează versiunea dnsmasq şi drepturile de autor."
-#: option.c:280
+#: option.c:294
msgid "Translate IPv4 addresses from upstream servers."
msgstr "Traduce adresele IPv4 de la serverele DNS superioare."
-#: option.c:281
+#: option.c:295
msgid "Specify a SRV record."
msgstr "Specifică o înregistrare SRV."
-#: option.c:282
+#: option.c:296
msgid "Display this message. Use --help dhcp for known DHCP options."
msgstr ""
-#: option.c:283
+#: option.c:297
#, fuzzy, c-format
msgid "Specify path of PID file (defaults to %s)."
msgstr "Specifică o cale pentru fişierul PID. (implicit %s)."
-#: option.c:284
+#: option.c:298
#, c-format
msgid "Specify maximum number of DHCP leases (defaults to %s)."
msgstr "Specifică numărul maxim de împrumuturi DHCP (implicit %s)."
-#: option.c:285
+#: option.c:299
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:286
+#: option.c:300
msgid "Specify TXT DNS record."
msgstr "Specifică o înregistrare TXT."
-#: option.c:287
+#: option.c:301
#, fuzzy
msgid "Specify PTR DNS record."
msgstr "Specifică o înregistrare TXT."
-#: option.c:288
+#: option.c:302
msgid "Give DNS name to IPv4 address of interface."
msgstr ""
-#: option.c:289
+#: option.c:303
msgid "Bind only to interfaces in use."
msgstr "Ascultă doar pe interfeţele active."
-#: option.c:290
+#: option.c:304
#, c-format
msgid "Read DHCP static host information from %s."
msgstr "Citeşte informaţii DHCP statice despre maşină din %s."
-#: option.c:291
+#: option.c:305
msgid "Enable the DBus interface for setting upstream servers, etc."
msgstr "Activeaza interfaţa DBus pentru configurarea serverelor superioare."
-#: option.c:292
+#: option.c:306
msgid "Do not provide DHCP on this interface, only provide DNS."
msgstr "Nu activează DHCP ci doar DNS pe această interfaţă."
-#: option.c:293
+#: option.c:307
msgid "Enable dynamic address allocation for bootp."
msgstr "Activează alocarea dinamică a adreselor pentru BOOTP."
-#: option.c:294
+#: option.c:308
#, 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:295
+#: option.c:309
msgid "Treat DHCP requests on aliases as arriving from interface."
msgstr ""
-#: option.c:296
+#: option.c:310
msgid "Disable ICMP echo address checking in the DHCP server."
msgstr ""
-#: option.c:297
+#: option.c:311
msgid "Script to run on DHCP lease creation and destruction."
msgstr ""
-#: option.c:298
+#: option.c:312
msgid "Read configuration from all the files in this directory."
msgstr ""
-#: option.c:299
+#: option.c:313
#, fuzzy
msgid "Log to this syslog facility or file. (defaults to DAEMON)"
msgstr "Rulează sub acest utilizator după pornire. (implicit e %s)."
-#: option.c:300
+#: option.c:314
msgid "Do not use leasefile."
msgstr ""
-#: option.c:301
+#: option.c:315
#, 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:302
+#: option.c:316
#, c-format
msgid "Clear DNS cache when reloading %s."
msgstr ""
-#: option.c:303
+#: option.c:317
msgid "Ignore hostnames provided by DHCP clients."
msgstr ""
-#: option.c:304
+#: option.c:318
msgid "Do NOT reuse filename and server fields for extra DHCP options."
msgstr ""
-#: option.c:305
+#: option.c:319
msgid "Enable integrated read-only TFTP server."
msgstr ""
-#: option.c:306
+#: option.c:320
msgid "Export files by TFTP only from the specified subtree."
msgstr ""
-#: option.c:307
+#: option.c:321
msgid "Add client IP address to tftp-root."
msgstr ""
-#: option.c:308
+#: option.c:322
msgid "Allow access only to files owned by the user running dnsmasq."
msgstr ""
-#: option.c:309
+#: option.c:323
#, 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:310
+#: option.c:324
msgid "Disable the TFTP blocksize extension."
msgstr ""
-#: option.c:311
+#: option.c:325
msgid "Ephemeral port range for use by TFTP transfers."
msgstr ""
-#: option.c:312
+#: option.c:326
msgid "Extra logging for DHCP."
msgstr ""
-#: option.c:313
+#: option.c:327
msgid "Enable async. logging; optionally set queue length."
msgstr ""
-#: option.c:314
+#: option.c:328
msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
msgstr ""
-#: option.c:315
+#: option.c:329
+msgid "Allow rebinding of 127.0.0.0/8, for RBL servers."
+msgstr ""
+
+#: option.c:330
+msgid "Inhibit DNS-rebind protection on this domain."
+msgstr ""
+
+#: option.c:331
msgid "Always perform DNS queries to all servers."
msgstr ""
-#: option.c:316
+#: option.c:332
msgid "Set tag if client includes matching option in request."
msgstr ""
-#: option.c:317
+#: option.c:333
msgid "Use alternative ports for DHCP."
msgstr ""
-#: option.c:318
+#: option.c:334
msgid "Run lease-change script as this user."
msgstr ""
-#: option.c:319
+#: option.c:335
#, fuzzy
msgid "Specify NAPTR DNS record."
msgstr "Specifică o înregistrare TXT."
-#: option.c:320
+#: option.c:336
msgid "Specify lowest port available for DNS query transmission."
msgstr ""
-#: option.c:321
+#: option.c:337
msgid "Use only fully qualified domain names for DHCP clients."
msgstr ""
-#: option.c:322
+#: option.c:338
+msgid "Generate hostnames based on MAC address for nameless clients."
+msgstr ""
+
+#: option.c:339
+msgid "Use these DHCP relays as full proxies."
+msgstr ""
+
+#: option.c:340
msgid "Specify alias name for LOCAL DNS name."
msgstr ""
-#: option.c:323
+#: option.c:341
#, fuzzy
msgid "Prompt to send to PXE clients."
msgstr "Configurează opţiuni în plusce trebuie trimise clienţilor DHCP."
-#: option.c:324
+#: option.c:342
msgid "Boot service for PXE menu."
msgstr ""
-#: option.c:325
+#: option.c:343
msgid "Check configuration syntax."
msgstr ""
-#: option.c:614
+#: option.c:632
#, c-format
msgid ""
"Usage: dnsmasq [options]\n"
@@ -529,223 +560,233 @@ msgstr ""
"Utilizare: dnsmasq [opţiuni]\n"
"\n"
-#: option.c:616
+#: option.c:634
#, 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:618
+#: option.c:636
#, fuzzy, c-format
msgid "Valid options are:\n"
msgstr "Opţiunile valide sunt:\n"
-#: option.c:659
+#: option.c:677
#, c-format
msgid "Known DHCP options:\n"
msgstr ""
-#: option.c:747
+#: option.c:781
msgid "bad dhcp-option"
msgstr "dhcp-option invalid"
-#: option.c:804
+#: option.c:838
#, fuzzy
msgid "bad IP address"
msgstr "citesc %s - %d adrese"
-#: option.c:903
+#: option.c:937
msgid "bad domain in dhcp-option"
msgstr "domeniu DNS invalid în declaraţia dhcp-option"
-#: option.c:964
+#: option.c:998
msgid "dhcp-option too long"
msgstr "declararea dhcp-option este prea lungă"
-#: option.c:973
+#: option.c:1007
msgid "illegal dhcp-match"
msgstr ""
-#: option.c:1009
+#: option.c:1043
msgid "illegal repeated flag"
msgstr ""
-#: option.c:1017
+#: option.c:1051
msgid "illegal repeated keyword"
msgstr ""
-#: option.c:1100 tftp.c:359
+#: option.c:1134 tftp.c:413
#, fuzzy, c-format
msgid "cannot access %s: %s"
msgstr "nu pot citi %s: %s"
-#: option.c:1145
+#: option.c:1179
msgid "only one dhcp-hostsfile allowed"
msgstr ""
-#: option.c:1152
+#: option.c:1186
msgid "only one dhcp-optsfile allowed"
msgstr ""
-#: option.c:1197
+#: option.c:1231
msgid "bad MX preference"
msgstr "preferinţă MX invalidă"
-#: option.c:1202
+#: option.c:1236
msgid "bad MX name"
msgstr "nume MX invalid"
-#: option.c:1216
+#: option.c:1250
msgid "bad MX target"
msgstr "ţintă MX invalidă"
-#: option.c:1226
+#: option.c:1260
msgid "cannot run scripts under uClinux"
msgstr ""
-#: option.c:1228
+#: option.c:1262
msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts"
msgstr ""
-#: option.c:1456 option.c:1460
+#: option.c:1507 option.c:1511
msgid "bad port"
msgstr "port invalid"
-#: option.c:1479 option.c:1504
+#: option.c:1530 option.c:1555
msgid "interface binding not supported"
msgstr ""
-#: option.c:1625
+#: option.c:1701
#, fuzzy
msgid "bad port range"
msgstr "port invalid"
-#: option.c:1642
+#: option.c:1718
msgid "bad bridge-interface"
msgstr ""
-#: option.c:1683
+#: option.c:1760
msgid "bad dhcp-range"
msgstr "dhcp-range invalid"
-#: option.c:1709
-msgid "only one netid tag allowed"
+#: option.c:1788
+msgid "only one tag allowed"
msgstr ""
-#: option.c:1754
+#: option.c:1835
msgid "inconsistent DHCP range"
msgstr "domeniu DHCP inconsistent"
-#: option.c:1926
+#: option.c:2010
#, fuzzy
msgid "bad DHCP host name"
msgstr "nume MX invalid"
-#: option.c:2221 option.c:2501
+#: option.c:2091
+#, fuzzy
+msgid "bad tag-if"
+msgstr "ţintă MX invalidă"
+
+#: option.c:2365 option.c:2664
msgid "invalid port number"
msgstr "număr de port invalid"
-#: option.c:2304
+#: option.c:2427
+#, fuzzy
+msgid "bad dhcp-proxy address"
+msgstr "citesc %s - %d adrese"
+
+#: option.c:2467
#, fuzzy
msgid "invalid alias range"
msgstr "pondere invalidă"
-#: option.c:2317
+#: option.c:2480
#, fuzzy
msgid "bad interface name"
msgstr "nume MX invalid"
-#: option.c:2342
+#: option.c:2505
msgid "bad CNAME"
msgstr ""
-#: option.c:2347
+#: option.c:2510
msgid "duplicate CNAME"
msgstr ""
-#: option.c:2367
+#: option.c:2530
#, fuzzy
msgid "bad PTR record"
msgstr "înregistrare SRV invalidă"
-#: option.c:2398
+#: option.c:2561
#, fuzzy
msgid "bad NAPTR record"
msgstr "înregistrare SRV invalidă"
-#: option.c:2423
+#: option.c:2586
msgid "TXT record string too long"
msgstr "şirul de caractere pentru înregistrarea TXT este prea lung"
-#: option.c:2471
+#: option.c:2634
msgid "bad TXT record"
msgstr "înregistrare TXT invalidă"
-#: option.c:2487
+#: option.c:2650
msgid "bad SRV record"
msgstr "înregistrare SRV invalidă"
-#: option.c:2494
+#: option.c:2657
msgid "bad SRV target"
msgstr "ţintă SRV invalidă"
-#: option.c:2508
+#: option.c:2671
msgid "invalid priority"
msgstr "prioritate invalidă"
-#: option.c:2515
+#: option.c:2678
msgid "invalid weight"
msgstr "pondere invalidă"
-#: option.c:2534
+#: option.c:2697
msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DBus support)"
msgstr ""
-#: option.c:2577
+#: option.c:2739
#, c-format
msgid "files nested too deep in %s"
msgstr ""
-#: option.c:2585 tftp.c:513
+#: option.c:2747 tftp.c:567
#, c-format
msgid "cannot read %s: %s"
msgstr "nu pot citi %s: %s"
-#: option.c:2646
+#: option.c:2804
msgid "missing \""
msgstr "lipseÅŸte \""
-#: option.c:2693
+#: option.c:2863
msgid "bad option"
msgstr "opţiune invalidă"
-#: option.c:2695
+#: option.c:2865
msgid "extraneous parameter"
msgstr "parametru nerecunoscut"
-#: option.c:2697
+#: option.c:2867
msgid "missing parameter"
msgstr "parametru lipsa"
-#: option.c:2705
+#: option.c:2871
msgid "error"
msgstr "eroare"
-#: option.c:2711
+#: option.c:2876
#, c-format
msgid "%s at line %d of %%s"
msgstr "%s la linia %d din %%s"
-#: option.c:2760 option.c:2791
+#: option.c:2933 option.c:2964
#, fuzzy, c-format
msgid "read %s"
msgstr "citesc %s"
-#: option.c:2863
+#: option.c:3036
#, c-format
msgid "Dnsmasq version %s %s\n"
msgstr "dnsmasq versiunea %s %s\n"
-#: option.c:2864
+#: option.c:3037
#, c-format
msgid ""
"Compile time options %s\n"
@@ -754,194 +795,200 @@ msgstr ""
"Opţiuni cu care a fost compilat %s\n"
"\n"
-#: option.c:2865
+#: option.c:3038
#, c-format
msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
msgstr "Acest program vine FÄ‚RÄ‚ NICI O GARANÅ¢IE.\n"
-#: option.c:2866
+#: option.c:3039
#, 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:2867
+#: option.c:3040
#, 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:2878
+#: option.c:3051
msgid "try --help"
msgstr ""
-#: option.c:2880
+#: option.c:3053
msgid "try -w"
msgstr ""
-#: option.c:2883
+#: option.c:3056
#, fuzzy, c-format
msgid "bad command line options: %s"
msgstr "opţiuni în linie de comandă invalide: %s."
-#: option.c:2924
+#: option.c:3097
#, c-format
msgid "cannot get host-name: %s"
msgstr "nu pot citi numele maÅŸinii: %s"
-#: option.c:2952
+#: option.c:3125
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:2962
+#: option.c:3135
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:2965 network.c:777 dhcp.c:753
+#: option.c:3138 network.c:813 dhcp.c:814
#, fuzzy, c-format
msgid "failed to read %s: %s"
msgstr "nu pot citi %s: %s"
-#: option.c:2982
+#: option.c:3155
#, 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:3003
+#: option.c:3176
msgid "there must be a default domain when --dhcp-fqdn is set"
msgstr ""
-#: option.c:3007
+#: option.c:3180
msgid "syntax check OK"
msgstr ""
-#: forward.c:405
+#: forward.c:427
#, c-format
msgid "nameserver %s refused to do a recursive query"
msgstr "serverul DNS %s refuză interogările recursive"
-#: forward.c:433
-msgid "possible DNS-rebind attack detected"
+#: forward.c:455
+#, c-format
+msgid "possible DNS-rebind attack detected: %s"
msgstr ""
-#: network.c:73
+#: network.c:110
#, fuzzy, c-format
msgid "unknown interface %s in bridge-interface"
msgstr "interfaţă necunoscută %s"
-#: network.c:436 dnsmasq.c:189
+#: 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:443
+#: 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:469
+#: 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:474
+#: network.c:505
#, c-format
msgid "failed to listen on socket: %s"
msgstr "ascultarea pe socket a eÅŸuat: %s"
-#: network.c:486
+#: network.c:517
#, fuzzy, c-format
msgid "failed to create TFTP socket: %s"
msgstr "creearea socket-ului de ascultare a eÅŸuat: %s"
-#: network.c:680
+#: network.c:711
#, 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:717
+#: network.c:748
#, c-format
msgid "ignoring nameserver %s - local interface"
msgstr "ignorăm serverul DNS %s - interfaţă locală"
-#: network.c:728
+#: network.c:759
#, 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:743
+#: network.c:776
msgid "unqualified"
msgstr "invalid"
-#: network.c:743
+#: network.c:776
msgid "names"
msgstr ""
-#: network.c:745
+#: network.c:778
msgid "default"
msgstr ""
-#: network.c:747
+#: network.c:780
msgid "domain"
msgstr "domeniu"
-#: network.c:750
+#: network.c:783
#, c-format
msgid "using local addresses only for %s %s"
msgstr "folosim adresele locale doar pentru %S %s"
-#: network.c:752
+#: network.c:785
+#, fuzzy, c-format
+msgid "using standard nameservers for %s %s"
+msgstr "folosim serverul DNS %s#%d pentru %s %s"
+
+#: network.c:787
#, c-format
msgid "using nameserver %s#%d for %s %s"
msgstr "folosim serverul DNS %s#%d pentru %s %s"
-#: network.c:755
+#: network.c:790
#, fuzzy, c-format
msgid "using nameserver %s#%d(via %s)"
msgstr "folosim serverul DNS %s#%d"
-#: network.c:757
+#: network.c:792
#, c-format
msgid "using nameserver %s#%d"
msgstr "folosim serverul DNS %s#%d"
-#: dnsmasq.c:146
+#: dnsmasq.c:145
#, fuzzy
msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
msgstr "DBus nu este disponibil: puneţi HAVE_DBUS in src/config.h"
-#: dnsmasq.c:151
+#: dnsmasq.c:150
msgid "asychronous logging is not available under Solaris"
msgstr ""
-#: dnsmasq.c:170
+#: dnsmasq.c:169
#, c-format
msgid "failed to find list of interfaces: %s"
msgstr "enumerarea interfeţelor a eşuat: %s"
-#: dnsmasq.c:178
+#: dnsmasq.c:177
#, c-format
msgid "unknown interface %s"
msgstr "interfaţă necunoscută %s"
-#: dnsmasq.c:184
+#: dnsmasq.c:183
#, c-format
msgid "no interface with address %s"
msgstr "nu exista interfaţă pentru adresa %s"
-#: dnsmasq.c:201 dnsmasq.c:670
+#: dnsmasq.c:200 dnsmasq.c:671
#, c-format
msgid "DBus error: %s"
msgstr "eroare DBus: %s"
-#: dnsmasq.c:204
+#: dnsmasq.c:203
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:230
+#: dnsmasq.c:229
#, c-format
msgid "unknown user or group: %s"
msgstr ""
-#: dnsmasq.c:287
+#: dnsmasq.c:284
#, c-format
msgid "cannot chdir to filesystem root: %s"
msgstr ""
@@ -1036,77 +1083,77 @@ msgstr ""
msgid "restricting maximum simultaneous TFTP transfers to %d"
msgstr ""
-#: dnsmasq.c:672
+#: dnsmasq.c:673
msgid "connected to system DBus"
msgstr "magistrala sistem Dbus conectată"
-#: dnsmasq.c:767
+#: dnsmasq.c:768
#, c-format
msgid "cannot fork into background: %s"
msgstr ""
-#: dnsmasq.c:770
+#: dnsmasq.c:771
#, fuzzy, c-format
msgid "failed to create helper: %s"
msgstr "nu pot citi %s: %s"
-#: dnsmasq.c:773
+#: dnsmasq.c:774
#, c-format
msgid "setting capabilities failed: %s"
msgstr ""
# for compatibility purposes the letters â, ă, ş, ţ and î can be written as their look-alike correspondent.
-#: dnsmasq.c:777
+#: dnsmasq.c:778
#, 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:782
+#: dnsmasq.c:783
#, fuzzy, c-format
msgid "failed to change group-id to %s: %s"
msgstr "încărcarea numelor din %s: %s a eşuat"
-#: dnsmasq.c:785
+#: dnsmasq.c:786
#, fuzzy, c-format
msgid "failed to open pidfile %s: %s"
msgstr "nu pot citi %s: %s"
-#: dnsmasq.c:788
+#: dnsmasq.c:789
#, fuzzy, c-format
msgid "cannot open %s: %s"
msgstr "nu pot deschide %s:%s"
-#: dnsmasq.c:843
+#: dnsmasq.c:844
#, c-format
msgid "child process killed by signal %d"
msgstr ""
-#: dnsmasq.c:847
+#: dnsmasq.c:848
#, c-format
msgid "child process exited with status %d"
msgstr ""
-#: dnsmasq.c:851
+#: dnsmasq.c:852
#, fuzzy, c-format
msgid "failed to execute %s: %s"
msgstr "accesarea serverului %s a eÅŸuat: %s"
-#: dnsmasq.c:895
+#: dnsmasq.c:896
msgid "exiting on receipt of SIGTERM"
msgstr "am primit SIGTERM, am terminat"
-#: dnsmasq.c:913
+#: dnsmasq.c:924
#, fuzzy, c-format
msgid "failed to access %s: %s"
msgstr "accesarea serverului %s a eÅŸuat: %s"
-#: dnsmasq.c:935
+#: dnsmasq.c:954
#, c-format
msgid "reading %s"
msgstr "citesc %s"
-#: dnsmasq.c:946
+#: dnsmasq.c:965
#, 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"
@@ -1136,237 +1183,242 @@ msgstr "activarea socket-ului server-ului DHCP a eÅŸuat: %s"
msgid "cannot create ICMP raw socket: %s."
msgstr "nu pot creea socket ICMP raw: %s."
-#: dhcp.c:240
+#: dhcp.c:281
#, c-format
msgid "DHCP packet received on %s which has no address"
msgstr ""
-#: dhcp.c:404
+#: dhcp.c:445
#, c-format
msgid "DHCP range %s -- %s is not consistent with netmask %s"
msgstr "domeniu DHCP %s -- %s nu este consistent cu masca de reţea %s"
-#: dhcp.c:791
+#: dhcp.c:852
#, c-format
msgid "bad line at %s line %d"
msgstr "linie invalidă în %s rândul %d"
-#: dhcp.c:834
+#: dhcp.c:895
#, c-format
msgid "ignoring %s line %d, duplicate name or IP address"
msgstr ""
-#: dhcp.c:916
+#: dhcp.c:977
#, c-format
msgid "duplicate IP address %s in dhcp-config directive."
msgstr "adresă IP duplicat %s în declaraţia dhcp-config."
-#: dhcp.c:919
+#: dhcp.c:980
#, fuzzy, c-format
msgid "duplicate IP address %s in %s."
msgstr "adresă IP duplicat %s în declaraţia dhcp-config."
-#: dhcp.c:962
+#: dhcp.c:1023
#, c-format
msgid "%s has more than one address in hostsfile, using %s for DHCP"
msgstr ""
-#: dhcp.c:967
+#: dhcp.c:1028
#, c-format
msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr "adresă IP duplicat %s (%s) în declaraţia dhcp-config."
-#: lease.c:66
+#: lease.c:67
#, fuzzy, c-format
msgid "cannot open or create lease file %s: %s"
msgstr "nu pot creea sau deschide fişierul cu împrumuturi: %s"
-#: lease.c:92
+#: lease.c:93
msgid "too many stored leases"
msgstr "prea multe împrumuturi stocate"
-#: lease.c:128
+#: lease.c:129
#, fuzzy, c-format
msgid "cannot run lease-init script %s: %s"
msgstr "nu pot citi %s: %s"
-#: lease.c:134
+#: lease.c:135
#, c-format
msgid "lease-init script returned exit code %s"
msgstr ""
-#: lease.c:234
+#: lease.c:235
#, fuzzy, c-format
msgid "failed to write %s: %s (retry in %us)"
msgstr "nu pot citi %s: %s"
-#: rfc2131.c:375
+#: rfc2131.c:377
#, c-format
msgid "no address range available for DHCP request %s %s"
msgstr "nici un domeniu de adrese disponibil pentru cererea DHCP %s %s"
-#: rfc2131.c:376
+#: rfc2131.c:378
msgid "with subnet selector"
msgstr "cu selectorul de subreţea"
-#: rfc2131.c:376
+#: rfc2131.c:378
msgid "via"
msgstr "prin"
-#: rfc2131.c:391
-#, c-format
-msgid "%u Available DHCP subnet: %s/%s"
-msgstr ""
+#: rfc2131.c:393
+#, fuzzy, c-format
+msgid "%u available DHCP subnet: %s/%s"
+msgstr "nici un domeniu de adrese disponibil pentru cererea DHCP %s %s"
-#: rfc2131.c:394
+#: rfc2131.c:396
#, c-format
-msgid "%u Available DHCP range: %s -- %s"
+msgid "%u available DHCP range: %s -- %s"
msgstr ""
-#: rfc2131.c:423
+#: rfc2131.c:425
msgid "disabled"
msgstr "dezactivat"
-#: rfc2131.c:457 rfc2131.c:928 rfc2131.c:1277
+#: rfc2131.c:466 rfc2131.c:969 rfc2131.c:1335
msgid "ignored"
msgstr "ignorat"
-#: rfc2131.c:472 rfc2131.c:1145
+#: rfc2131.c:481 rfc2131.c:1183
msgid "address in use"
msgstr "adresa este folosită"
-#: rfc2131.c:486 rfc2131.c:982
+#: rfc2131.c:495 rfc2131.c:1023
msgid "no address available"
msgstr "nici o adresă disponibilă"
-#: rfc2131.c:493 rfc2131.c:1108
+#: rfc2131.c:502 rfc2131.c:1146
msgid "wrong network"
msgstr "reţea greşită"
-#: rfc2131.c:506
+#: rfc2131.c:516
msgid "no address configured"
msgstr "adresă lipsă"
-#: rfc2131.c:512 rfc2131.c:1158
+#: rfc2131.c:522 rfc2131.c:1196
msgid "no leases left"
msgstr "nu mai am de unde să împrumut"
-#: rfc2131.c:597
+#: rfc2131.c:607
#, c-format
msgid "%u client provides name: %s"
msgstr ""
-#: rfc2131.c:741
-#, c-format
-msgid "%u Vendor class: %s"
-msgstr ""
+#: rfc2131.c:762
+#, fuzzy, c-format
+msgid "%u vendor class: %s"
+msgstr "eroare DBus: %s"
-#: rfc2131.c:743
-#, c-format
-msgid "%u User class: %s"
-msgstr ""
+#: rfc2131.c:764
+#, fuzzy, c-format
+msgid "%u user class: %s"
+msgstr "eroare DBus: %s"
-#: rfc2131.c:782
+#: rfc2131.c:823
msgid "PXE BIS not supported"
msgstr ""
-#: rfc2131.c:898
+#: rfc2131.c:939
#, fuzzy, c-format
msgid "disabling DHCP static address %s for %s"
msgstr "dezactivăm adresele DHCP statice %s"
-#: rfc2131.c:919
+#: rfc2131.c:960
msgid "unknown lease"
msgstr "împrumut necunoscut"
-#: rfc2131.c:951
+#: rfc2131.c:992
#, c-format
msgid "not using configured address %s because it is leased to %s"
msgstr ""
-#: rfc2131.c:961
+#: rfc2131.c:1002
#, c-format
msgid "not using configured address %s because it is in use by the server or relay"
msgstr ""
-#: rfc2131.c:964
+#: rfc2131.c:1005
#, c-format
msgid "not using configured address %s because it was previously declined"
msgstr ""
-#: rfc2131.c:980 rfc2131.c:1151
+#: rfc2131.c:1021 rfc2131.c:1189
msgid "no unique-id"
msgstr ""
-#: rfc2131.c:1048
+#: rfc2131.c:1090
msgid "wrong server-ID"
msgstr ""
-#: rfc2131.c:1067
+#: rfc2131.c:1108
msgid "wrong address"
msgstr "adresă greşită"
-#: rfc2131.c:1084
+#: rfc2131.c:1121
msgid "lease not found"
msgstr "împrumutul nu a fost găsit"
-#: rfc2131.c:1116
+#: rfc2131.c:1154
msgid "address not available"
msgstr "adresă indisponibilă"
-#: rfc2131.c:1127
+#: rfc2131.c:1165
msgid "static lease available"
msgstr "împrumut static este disponibil"
-#: rfc2131.c:1131
+#: rfc2131.c:1169
msgid "address reserved"
msgstr "adresă rezervată"
-#: rfc2131.c:1139
+#: rfc2131.c:1177
#, c-format
msgid "abandoning lease to %s of %s"
msgstr ""
-#: rfc2131.c:1698
+#: rfc2131.c:1757
#, c-format
msgid "%u tags: %s"
msgstr ""
-#: rfc2131.c:1711
+#: rfc2131.c:1770
#, c-format
msgid "%u bootfile name: %s"
msgstr ""
-#: rfc2131.c:1720
+#: rfc2131.c:1779
#, fuzzy, c-format
msgid "%u server name: %s"
msgstr "eroare DBus: %s"
-#: rfc2131.c:1728
+#: rfc2131.c:1793
#, fuzzy, c-format
msgid "%u next server: %s"
msgstr "eroare DBus: %s"
-#: rfc2131.c:1795
+#: rfc2131.c:1796
+#, c-format
+msgid "%u broadcast response"
+msgstr ""
+
+#: rfc2131.c:1859
#, 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:2032
+#: rfc2131.c:2105
msgid "PXE menu too large"
msgstr ""
-#: rfc2131.c:2143
+#: rfc2131.c:2218
#, c-format
msgid "Ignoring domain %s for DHCP host name %s"
msgstr ""
-#: rfc2131.c:2161
+#: rfc2131.c:2236
#, fuzzy, c-format
msgid "%u requested options: %s"
msgstr "compilat cu opţiunile: %s"
-#: rfc2131.c:2425
+#: rfc2131.c:2503
#, c-format
msgid "cannot send RFC3925 option: too many options for enterprise number %d"
msgstr ""
@@ -1403,46 +1455,46 @@ msgstr "nu pot creea socket DHCP BPF: %s"
msgid "DHCP request for unsupported hardware type (%d) received on %s"
msgstr "cerere DHCP pentru dispozitiv nesuportat (%d) recepţionată prin %s"
-#: tftp.c:179
+#: tftp.c:233
msgid "unable to get free port for TFTP"
msgstr ""
-#: tftp.c:194
+#: tftp.c:248
#, c-format
msgid "unsupported request from %s"
msgstr ""
-#: tftp.c:282
+#: tftp.c:336
#, c-format
msgid "sent %s to %s"
msgstr ""
-#: tftp.c:305
+#: tftp.c:359
#, fuzzy, c-format
msgid "file %s not found"
msgstr "împrumutul nu a fost găsit"
-#: tftp.c:416
+#: tftp.c:470
#, c-format
msgid "error %d %s received from %s"
msgstr ""
-#: tftp.c:447
+#: tftp.c:501
#, fuzzy, c-format
msgid "failed sending %s to %s"
msgstr "nu pot citi %s: %s"
-#: log.c:169
+#: log.c:173
#, c-format
msgid "overflow: %d log entries lost"
msgstr ""
-#: log.c:246
+#: log.c:250
#, c-format
msgid "log failed: %s"
msgstr ""
-#: log.c:420
+#: log.c:431
msgid "FAILED to start up"
msgstr "pornirea A EÅžUAT"
diff --git a/src/cache.c b/src/cache.c
index c7bcaaf..6cb95c2 100644
--- a/src/cache.c
+++ b/src/cache.c
@@ -1045,7 +1045,14 @@ void cache_add_dhcp_entry(char *host_name,
/* check all addresses associated with name */
if (crec->flags & F_HOSTS)
{
- if (crec->addr.addr.addr.addr4.s_addr != host_address->s_addr)
+ /* if in hosts, don't need DHCP record */
+ in_hosts = 1;
+
+ if (crec->flags & F_CNAME)
+ my_syslog(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,
@@ -1053,11 +1060,7 @@ void cache_add_dhcp_entry(char *host_name,
"the name exists in %s with address %s"),
host_name, inet_ntoa(*host_address),
record_source(crec->uid), daemon->namebuff);
- return;
- }
- else
- /* if in hosts, don't need DHCP record */
- in_hosts = 1;
+ }
}
else if (!(crec->flags & F_DHCP))
{
diff --git a/src/config.h b/src/config.h
index b260ca8..c10f0f8 100644
--- a/src/config.h
+++ b/src/config.h
@@ -14,7 +14,7 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#define VERSION "2.52"
+#define VERSION "2.54"
#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 10 /* or 10 seconds */
+#define FORWARD_TIME 20 /* or 10 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 */
@@ -230,13 +230,13 @@ NOTES:
#elif defined(__FreeBSD__) || \
defined(__OpenBSD__) || \
defined(__DragonFly__) || \
- defined (__FreeBSD_kernel__)
+ defined(__FreeBSD_kernel__)
#define HAVE_BSD_NETWORK
/* Later verions of FreeBSD have getopt_long() */
#if defined(optional_argument) && defined(required_argument)
# define HAVE_GETOPT_LONG
#endif
-#if !defined (__FreeBSD_kernel__)
+#if !defined(__FreeBSD_kernel__)
# define HAVE_ARC4RANDOM
#endif
#define HAVE_SOCKADDR_SA_LEN
diff --git a/src/dhcp.c b/src/dhcp.c
index dcc57b1..8c300cf 100644
--- a/src/dhcp.c
+++ b/src/dhcp.c
@@ -127,7 +127,10 @@ void dhcp_packet(time_t now, int pxe_fd)
int iface_index = 0, unicast_dest = 0, is_inform = 0;
struct in_addr iface_addr, *addrp = NULL;
struct iface_param parm;
-
+#ifdef HAVE_LINUX_NETWORK
+ struct arpreq arp_req;
+#endif
+
union {
struct cmsghdr align; /* this ensures alignment */
#if defined(HAVE_LINUX_NETWORK)
@@ -189,8 +192,13 @@ void dhcp_packet(time_t now, int pxe_fd)
for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, cmptr))
if (cmptr->cmsg_level == SOL_IP && cmptr->cmsg_type == IP_PKTINFO)
{
- iface_index = ((struct in_pktinfo *)CMSG_DATA(cmptr))->ipi_ifindex;
- if (((struct in_pktinfo *)CMSG_DATA(cmptr))->ipi_addr.s_addr != INADDR_BROADCAST)
+ union {
+ unsigned char *c;
+ struct in_pktinfo *p;
+ } p;
+ p.c = CMSG_DATA(cmptr);
+ iface_index = p.p->ipi_ifindex;
+ if (p.p->ipi_addr.s_addr != INADDR_BROADCAST)
unicast_dest = 1;
}
@@ -198,20 +206,37 @@ void dhcp_packet(time_t now, int pxe_fd)
if (msg.msg_controllen >= sizeof(struct cmsghdr))
for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, cmptr))
if (cmptr->cmsg_level == IPPROTO_IP && cmptr->cmsg_type == IP_RECVIF)
- iface_index = ((struct sockaddr_dl *)CMSG_DATA(cmptr))->sdl_index;
-
+ {
+ union {
+ unsigned char *c;
+ struct sockaddr_dl *s;
+ } p;
+ p.c = CMSG_DATA(cmptr);
+ iface_index = p.s->sdl_index;
+ }
#elif defined(HAVE_SOLARIS_NETWORK)
if (msg.msg_controllen >= sizeof(struct cmsghdr))
for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, cmptr))
if (cmptr->cmsg_level == IPPROTO_IP && cmptr->cmsg_type == IP_RECVIF)
- iface_index = *((unsigned int *)CMSG_DATA(cmptr));
-
+ {
+ union {
+ unsigned char *c;
+ unsigned int *i;
+ } p;
+ p.c = CMSG_DATA(cmptr);
+ iface_index = *(p.i);
+ }
#endif
if (!indextoname(daemon->dhcpfd, iface_index, ifr.ifr_name))
return;
+#ifdef HAVE_LINUX_NETWORK
+ /* ARP fiddling uses original interface even if we pretend to use a different one. */
+ strncpy(arp_req.arp_dev, ifr.ifr_name, 16);
+#endif
+
#ifdef MSG_BCAST
/* OpenBSD tells us when a packet was broadcast */
if (!(msg.msg_flags & MSG_BCAST))
@@ -231,18 +256,14 @@ void dhcp_packet(time_t now, int pxe_fd)
for (tmp = daemon->dhcp_except; tmp; tmp = tmp->next)
if (tmp->name && (strcmp(tmp->name, ifr.ifr_name) == 0))
return;
-
- /* interface may have been changed by alias in iface_check */
- if (!addrp)
- {
- if (ioctl(daemon->dhcpfd, SIOCGIFADDR, &ifr) == -1)
- {
- my_syslog(MS_DHCP | LOG_WARNING, _("DHCP packet received on %s which has no address"), ifr.ifr_name);
- return;
- }
- else
- iface_addr = ((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr;
- }
+
+ /* weird libvirt-inspired access control */
+ for (context = daemon->dhcp; context; context = context->next)
+ if (!context->interface || strcmp(context->interface, ifr.ifr_name) == 0)
+ break;
+
+ if (!context)
+ return;
/* unlinked contexts are marked by context->current == context */
for (context = daemon->dhcp; context; context = context->next)
@@ -253,6 +274,27 @@ void dhcp_packet(time_t now, int pxe_fd)
parm.current = NULL;
parm.ind = iface_index;
+ /* interface may have been changed by alias in iface_check, make sure it gets priority in case
+ there is more than one address on the interface in the same subnet */
+ if (ioctl(daemon->dhcpfd, SIOCGIFADDR, &ifr) == -1)
+ {
+ my_syslog(MS_DHCP | LOG_WARNING, _("DHCP packet received on %s which has no address"), ifr.ifr_name);
+ return;
+ }
+ else
+ {
+ iface_addr = ((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr;
+ if (ioctl(daemon->dhcpfd, SIOCGIFNETMASK, &ifr) != -1)
+ {
+ struct in_addr netmask = ((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr;
+ if (ioctl(daemon->dhcpfd, SIOCGIFBRDADDR, &ifr) != -1)
+ {
+ struct in_addr broadcast = ((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr;
+ complete_context(iface_addr, iface_index, netmask, broadcast, &parm);
+ }
+ }
+ }
+
if (!iface_enumerate(&parm, complete_context, NULL))
return;
lease_prune(NULL, now); /* lose any expired leases */
@@ -324,15 +366,14 @@ void dhcp_packet(time_t now, int pxe_fd)
{
/* unicast to unconfigured client. Inject mac address direct into ARP cache.
struct sockaddr limits size to 14 bytes. */
- struct arpreq req;
dest.sin_addr = mess->yiaddr;
dest.sin_port = htons(daemon->dhcp_client_port);
- *((struct sockaddr_in *)&req.arp_pa) = dest;
- req.arp_ha.sa_family = mess->htype;
- memcpy(req.arp_ha.sa_data, mess->chaddr, mess->hlen);
- strncpy(req.arp_dev, ifr.ifr_name, 16);
- req.arp_flags = ATF_COM;
- ioctl(daemon->dhcpfd, SIOCSARP, &req);
+ memcpy(&arp_req.arp_pa, &dest, sizeof(struct sockaddr_in));
+ arp_req.arp_ha.sa_family = mess->htype;
+ memcpy(arp_req.arp_ha.sa_data, mess->chaddr, mess->hlen);
+ /* interface name already copied in */
+ arp_req.arp_flags = ATF_COM;
+ ioctl(daemon->dhcpfd, SIOCSARP, &arp_req);
}
#elif defined(HAVE_SOLARIS_NETWORK)
else if ((ntohs(mess->flags) & 0x8000) || mess->hlen != ETHER_ADDR_LEN || mess->htype != ARPHRD_ETHER)
@@ -491,13 +532,15 @@ struct dhcp_context *narrow_context(struct dhcp_context *context,
if (!(tmp = address_available(context, taddr, netids)))
{
for (tmp = context; tmp; tmp = tmp->current)
- if (is_same_net(taddr, tmp->start, tmp->netmask) &&
+ if (match_netid(tmp->filter, netids, 1) &&
+ is_same_net(taddr, tmp->start, tmp->netmask) &&
(tmp->flags & CONTEXT_STATIC))
break;
if (!tmp)
for (tmp = context; tmp; tmp = tmp->current)
- if (is_same_net(taddr, tmp->start, tmp->netmask))
+ if (match_netid(tmp->filter, netids, 1) &&
+ is_same_net(taddr, tmp->start, tmp->netmask))
break;
}
@@ -530,7 +573,8 @@ int match_netid(struct dhcp_netid *check, struct dhcp_netid *pool, int tagnotnee
for (; check; check = check->next)
{
- if (check->net[0] != '#')
+ /* '#' for not is for backwards compat. */
+ if (check->net[0] != '!' && check->net[0] != '#')
{
for (tmp1 = pool; tmp1; tmp1 = tmp1->next)
if (strcmp(check->net, tmp1->net) == 0)
@@ -546,6 +590,22 @@ int match_netid(struct dhcp_netid *check, struct dhcp_netid *pool, int tagnotnee
return 1;
}
+struct dhcp_netid *run_tag_if(struct dhcp_netid *tags)
+{
+ struct tag_if *exprs;
+ struct dhcp_netid_list *list;
+
+ for (exprs = daemon->tag_if; exprs; exprs = exprs->next)
+ if (match_netid(exprs->tag, tags, 1))
+ for (list = exprs->set; list; list = list->next)
+ {
+ list->list->next = tags;
+ tags = list->list;
+ }
+
+ return tags;
+}
+
int address_allocate(struct dhcp_context *context,
struct in_addr *addrp, unsigned char *hwaddr, int hw_len,
struct dhcp_netid *netids, time_t now)
@@ -559,9 +619,10 @@ int address_allocate(struct dhcp_context *context,
int i, pass;
unsigned int j;
- /* hash hwaddr */
+ /* hash hwaddr: use the SDBM hashing algorithm. Seems to give good
+ dispersal even with similarly-valued "strings". */
for (j = 0, i = 0; i < hw_len; i++)
- j += hwaddr[i] + (hwaddr[i] << 8) + (hwaddr[i] << 16);
+ j += hwaddr[i] + (j << 6) + (j << 16) - j;
for (pass = 0; pass <= 1; pass++)
for (c = context; c; c = c->current)
@@ -977,29 +1038,40 @@ void dhcp_update_configs(struct dhcp_config *configs)
/* If we've not found a hostname any other way, try and see if there's one in /etc/hosts
for this address. If it has a domain part, that must match the set domain and
it gets stripped. The set of legal domain names is bigger than the set of legal hostnames
- so check here that the domain name is legal as a hostname. */
+ so check here that the domain name is legal as a hostname.
+ NOTE: we're only allowed to overwrite daemon->dhcp_buff if we succeed. */
char *host_from_dns(struct in_addr addr)
{
struct crec *lookup;
- char *hostname = NULL;
- char *d1, *d2;
if (daemon->port == 0)
return NULL; /* DNS disabled. */
lookup = cache_find_by_addr(NULL, (struct all_addr *)&addr, 0, F_IPV4);
+
if (lookup && (lookup->flags & F_HOSTS))
{
- hostname = daemon->dhcp_buff;
- strncpy(hostname, cache_get_name(lookup), 256);
- hostname[255] = 0;
- d1 = strip_hostname(hostname);
- d2 = get_domain(addr);
- if (!legal_hostname(hostname) || (d1 && (!d2 || !hostname_isequal(d1, d2))))
- hostname = NULL;
+ char *dot, *hostname = cache_get_name(lookup);
+ dot = strchr(hostname, '.');
+
+ if (dot && strlen(dot+1) != 0)
+ {
+ char *d2 = get_domain(addr);
+ if (!d2 || !hostname_isequal(dot+1, d2))
+ return NULL; /* wrong domain */
+ }
+
+ if (!legal_hostname(hostname))
+ return NULL;
+
+ strncpy(daemon->dhcp_buff, hostname, 256);
+ daemon->dhcp_buff[255] = 0;
+ strip_hostname(daemon->dhcp_buff);
+
+ return daemon->dhcp_buff;
}
- return hostname;
+ return NULL;
}
/* return domain or NULL if none. */
diff --git a/src/dnsmasq.c b/src/dnsmasq.c
index 6f70768..8783650 100644
--- a/src/dnsmasq.c
+++ b/src/dnsmasq.c
@@ -63,7 +63,6 @@ static void check_dns_listeners(fd_set *set, time_t now);
static void sig_handler(int sig);
static void async_event(int pipe, time_t now);
static void fatal_event(struct event_desc *ev);
-static void poll_resolv(void);
int main (int argc, char **argv)
{
@@ -142,7 +141,7 @@ int main (int argc, char **argv)
#endif
#ifndef HAVE_TFTP
- if (daemon->options & OPT_TFTP)
+ if (daemon->tftp_unlimited || daemon->tftp_interfaces)
die(_("TFTP server not available: set HAVE_TFTP in src/config.h"), NULL, EC_BADCONF);
#endif
@@ -184,7 +183,7 @@ int main (int argc, char **argv)
die(_("no interface with address %s"), daemon->namebuff, EC_BADNET);
}
}
- else if ((daemon->port != 0 || (daemon->options & OPT_TFTP)) &&
+ 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);
@@ -278,8 +277,6 @@ int main (int argc, char **argv)
if (!(daemon->options & OPT_DEBUG))
{
- int nullfd;
-
/* The following code "daemonizes" the process.
See Stevens section 12.4 */
@@ -344,16 +341,19 @@ int main (int argc, char **argv)
_exit(0);
}
}
-
- /* open stdout etc to /dev/null */
- nullfd = open("/dev/null", O_RDWR);
- dup2(nullfd, STDOUT_FILENO);
- dup2(nullfd, STDERR_FILENO);
- dup2(nullfd, STDIN_FILENO);
- close(nullfd);
}
- log_err = log_start(ent_pw, err_pipe[1]);
+ log_err = log_start(ent_pw, err_pipe[1]);
+
+ if (!(daemon->options & OPT_DEBUG))
+ {
+ /* open stdout etc to /dev/null */
+ int nullfd = open("/dev/null", O_RDWR);
+ dup2(nullfd, STDOUT_FILENO);
+ dup2(nullfd, STDERR_FILENO);
+ dup2(nullfd, STDIN_FILENO);
+ close(nullfd);
+ }
/* if we are to run scripts, we need to fork a helper before dropping root. */
daemon->helperfd = -1;
@@ -508,7 +508,7 @@ int main (int argc, char **argv)
#endif
#ifdef HAVE_TFTP
- if (daemon->options & OPT_TFTP)
+ if (daemon->tftp_unlimited || daemon->tftp_interfaces)
{
#ifdef FD_SETSIZE
if (FD_SETSIZE < (unsigned)max_fd)
@@ -647,10 +647,11 @@ int main (int argc, char **argv)
difftime(now, daemon->last_resolv) > 1.0 ||
difftime(now, daemon->last_resolv) < -1.0)
{
- daemon->last_resolv = now;
+ /* poll_resolv doesn't need to reload first time through, since
+ that's queued anyway. */
- if (daemon->port != 0 && !(daemon->options & OPT_NO_POLL))
- poll_resolv();
+ poll_resolv(0, daemon->last_resolv != 0, now);
+ daemon->last_resolv = now;
}
if (FD_ISSET(piperead, &rset))
@@ -898,7 +899,7 @@ static void async_event(int pipe, time_t now)
}
}
-static void poll_resolv()
+void poll_resolv(int force, int do_reload, time_t now)
{
struct resolvc *res, *latest;
struct stat statbuf;
@@ -906,19 +907,37 @@ static void poll_resolv()
/* There may be more than one possible file.
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))
+ return;
+
for (latest = NULL, res = daemon->resolv_files; res; res = res->next)
if (stat(res->name, &statbuf) == -1)
{
+ if (force)
+ {
+ res->mtime = 0;
+ continue;
+ }
+
if (!res->logged)
my_syslog(LOG_WARNING, _("failed to access %s: %s"), res->name, strerror(errno));
res->logged = 1;
+
+ if (res->mtime != 0)
+ {
+ /* existing file evaporated, force selection of the latest
+ file even if its mtime hasn't changed since we last looked */
+ poll_resolv(1, do_reload, now);
+ return;
+ }
}
else
{
res->logged = 0;
- if (statbuf.st_mtime != res->mtime)
- {
- res->mtime = statbuf.st_mtime;
+ if (force || (statbuf.st_mtime != res->mtime))
+ {
+ res->mtime = statbuf.st_mtime;
if (difftime(statbuf.st_mtime, last_change) > 0.0)
{
last_change = statbuf.st_mtime;
@@ -935,8 +954,8 @@ static void poll_resolv()
my_syslog(LOG_INFO, _("reading %s"), latest->name);
warned = 0;
check_servers();
- if (daemon->options & OPT_RELOAD)
- cache_reload();
+ if ((daemon->options & OPT_RELOAD) && do_reload)
+ clear_cache_and_reload(now);
}
else
{
@@ -1125,11 +1144,13 @@ static void check_dns_listeners(fd_set *set, time_t now)
dst_addr_4.s_addr = 0;
- /* Arrange for SIGALARM after CHILD_LIFETIME seconds to
- terminate the process. */
+#ifndef NO_FORK
+ /* Arrange for SIGALARM after CHILD_LIFETIME seconds to
+ terminate the process. */
if (!(daemon->options & OPT_DEBUG))
alarm(CHILD_LIFETIME);
-
+#endif
+
/* start with no upstream connections. */
for (s = daemon->servers; s; s = s->next)
s->tcpfd = -1;
diff --git a/src/dnsmasq.h b/src/dnsmasq.h
index 209ae9a..672e4cb 100644
--- a/src/dnsmasq.h
+++ b/src/dnsmasq.h
@@ -22,8 +22,8 @@
# define _FILE_OFFSET_BITS 64
#endif
-/* Get linux C library versions. */
-#ifdef __linux__
+/* Get linux C library versions and define _GNU_SOURCE for kFreeBSD. */
+#if defined(__linux__) || defined(__GLIBC__)
# define _GNU_SOURCE
# include <features.h>
#endif
@@ -188,7 +188,7 @@ struct event_desc {
#define OPT_LEASE_RO (1u<<22)
#define OPT_ALL_SERVERS (1u<<23)
#define OPT_RELOAD (1u<<24)
-#define OPT_TFTP (1u<<25)
+#define OPT_LOCAL_REBIND (1u<<25)
#define OPT_TFTP_SECURE (1u<<26)
#define OPT_TFTP_NOBLOCK (1u<<27)
#define OPT_LOG_OPTS (1u<<28)
@@ -319,6 +319,8 @@ union mysockaddr {
#define SERV_MARK 256 /* for mark-and-delete */
#define SERV_TYPE (SERV_HAS_DOMAIN | SERV_FOR_NODOTS)
#define SERV_COUNTED 512 /* workspace for log code */
+#define SERV_USE_RESOLV 1024 /* forward this domain in the normal way */
+#define SERV_NO_REBIND 2048 /* inhibit dns-rebind protection */
struct serverfd {
int fd;
@@ -345,7 +347,8 @@ struct server {
struct irec {
union mysockaddr addr;
struct in_addr netmask; /* only valid for IPv4 */
- int dhcp_ok, mtu;
+ int tftp_ok, mtu;
+ char *name;
struct irec *next;
};
@@ -391,7 +394,7 @@ struct frec {
#endif
unsigned int iface;
unsigned short orig_id, new_id;
- int fd, forwardall;
+ int fd, forwardall, norebind;
unsigned int crc;
time_t time;
struct frec *next;
@@ -437,6 +440,12 @@ struct dhcp_netid_list {
struct dhcp_netid_list *next;
};
+struct tag_if {
+ struct dhcp_netid_list *set;
+ struct dhcp_netid *tag;
+ struct tag_if *next;
+};
+
struct hwaddr_config {
int hwaddr_len, hwaddr_type;
unsigned char hwaddr[DHCP_CHADDR_MAX];
@@ -449,7 +458,7 @@ struct dhcp_config {
int clid_len; /* length of client identifier */
unsigned char *clid; /* clientid */
char *hostname, *domain;
- struct dhcp_netid netid;
+ struct dhcp_netid_list *netid;
struct in_addr addr;
time_t decline_time;
unsigned int lease_time;
@@ -462,7 +471,6 @@ struct dhcp_config {
#define CONFIG_TIME 8
#define CONFIG_NAME 16
#define CONFIG_ADDR 32
-#define CONFIG_NETID 64
#define CONFIG_NOCLID 128
#define CONFIG_FROM_ETHERS 256 /* entry created by /etc/ethers */
#define CONFIG_ADDR_HOSTS 512 /* address added by from /etc/hosts */
@@ -548,6 +556,7 @@ struct dhcp_context {
struct in_addr local, router;
struct in_addr start, end; /* range of available addresses */
int flags;
+ char *interface;
struct dhcp_netid netid, *filter;
struct dhcp_context *next, *current;
};
@@ -598,6 +607,23 @@ struct tftp_transfer {
struct tftp_transfer *next;
};
+struct addr_list {
+ struct in_addr addr;
+ struct addr_list *next;
+};
+
+struct interface_list {
+ char *interface;
+ struct interface_list *next;
+};
+
+struct tftp_prefix {
+ char *interface;
+ char *prefix;
+ struct tftp_prefix *next;
+};
+
+
extern struct daemon {
/* datastuctures representing the command-line and
config file arguments. All set (including defaults)
@@ -628,7 +654,7 @@ extern struct daemon {
int max_logs; /* queue limit */
int cachesize, ftabsize;
int port, query_port, min_port;
- unsigned long local_ttl, neg_ttl;
+ unsigned long local_ttl, neg_ttl, max_ttl;
struct hostsfile *addn_hosts;
struct dhcp_context *dhcp;
struct dhcp_config *dhcp_conf;
@@ -637,8 +663,12 @@ extern struct daemon {
struct dhcp_mac *dhcp_macs;
struct dhcp_boot *boot_config;
struct pxe_service *pxe_services;
+ struct tag_if *tag_if;
+ struct addr_list *override_relays;
+ int override;
int enable_pxe;
- struct dhcp_netid_list *dhcp_ignore, *dhcp_ignore_names, *force_broadcast, *bootp_dynamic;
+ 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;
int dhcp_max, tftp_max;
int dhcp_server_port, dhcp_client_port;
@@ -647,6 +677,9 @@ extern struct daemon {
struct doctor *doctors;
unsigned short edns_pktsz;
char *tftp_prefix;
+ struct tftp_prefix *if_prefix; /* per-interface TFTP prefixes */
+ struct interface_list *tftp_interfaces; /* interfaces for limited TFTP service */
+ int tftp_unlimited;
/* globally used stuff for DNS */
char *packet; /* packet buffer */
@@ -675,7 +708,7 @@ extern struct daemon {
int dhcp_raw_fd, dhcp_icmp_fd;
#endif
struct iovec dhcp_packet;
- char *dhcp_buff, *dhcp_buff2;
+ char *dhcp_buff, *dhcp_buff2, *dhcp_buff3;
struct ping_result *ping_results;
FILE *lease_stream;
struct dhcp_bridge *bridges;
@@ -719,7 +752,8 @@ unsigned short extract_request(HEADER *header, size_t qlen,
size_t setup_reply(HEADER *header, size_t qlen,
struct all_addr *addrp, unsigned short flags,
unsigned long local_ttl);
-int extract_addresses(HEADER *header, size_t qlen, char *namebuff, time_t now);
+int extract_addresses(HEADER *header, size_t qlen, char *namebuff,
+ time_t now, int is_sign, int checkrebind);
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,
@@ -803,9 +837,11 @@ struct dhcp_context *address_available(struct dhcp_context *context,
struct dhcp_context *narrow_context(struct dhcp_context *context,
struct in_addr taddr,
struct dhcp_netid *netids);
-int match_netid(struct dhcp_netid *check, struct dhcp_netid *pool, int negonly);int address_allocate(struct dhcp_context *context,
+int match_netid(struct dhcp_netid *check, struct dhcp_netid *pool, int negonly);
+int address_allocate(struct dhcp_context *context,
struct in_addr *addrp, unsigned char *hwaddr, int hw_len,
struct dhcp_netid *netids, time_t now);
+struct dhcp_netid *run_tag_if(struct dhcp_netid *input);
int config_has_mac(struct dhcp_config *config, unsigned char *hwaddr, int len, int type);
struct dhcp_config *find_config(struct dhcp_config *configs,
struct dhcp_context *context,
@@ -856,6 +892,7 @@ int icmp_ping(struct in_addr addr);
#endif
void send_event(int fd, int event, int data);
void clear_cache_and_reload(time_t now);
+void poll_resolv(int force, int do_reload, time_t now);
/* netlink.c */
#ifdef HAVE_LINUX_NETWORK
diff --git a/src/forward.c b/src/forward.c
index 268bfb4..e086db7 100644
--- a/src/forward.c
+++ b/src/forward.c
@@ -65,15 +65,15 @@ static void send_from(int fd, int nowild, char *packet, size_t len,
if (to->sa.sa_family == AF_INET)
{
#if defined(HAVE_LINUX_NETWORK)
- struct in_pktinfo *pkt = (struct in_pktinfo *)CMSG_DATA(cmptr);
- pkt->ipi_ifindex = 0;
- pkt->ipi_spec_dst = source->addr.addr4;
+ struct in_pktinfo p;
+ p.ipi_ifindex = 0;
+ p.ipi_spec_dst = source->addr.addr4;
+ memcpy(CMSG_DATA(cmptr), &p, sizeof(p));
msg.msg_controllen = cmptr->cmsg_len = CMSG_LEN(sizeof(struct in_pktinfo));
cmptr->cmsg_level = SOL_IP;
cmptr->cmsg_type = IP_PKTINFO;
#elif defined(IP_SENDSRCADDR)
- struct in_addr *a = (struct in_addr *)CMSG_DATA(cmptr);
- *a = source->addr.addr4;
+ memcpy(CMSG_DATA(cmptr), &(source->addr.addr4), sizeof(source->addr.addr4));
msg.msg_controllen = cmptr->cmsg_len = CMSG_LEN(sizeof(struct in_addr));
cmptr->cmsg_level = IPPROTO_IP;
cmptr->cmsg_type = IP_SENDSRCADDR;
@@ -82,9 +82,10 @@ static void send_from(int fd, int nowild, char *packet, size_t len,
else
#ifdef HAVE_IPV6
{
- struct in6_pktinfo *pkt = (struct in6_pktinfo *)CMSG_DATA(cmptr);
- pkt->ipi6_ifindex = iface; /* Need iface for IPv6 to handle link-local addrs */
- pkt->ipi6_addr = source->addr.addr6;
+ struct in6_pktinfo p;
+ p.ipi6_ifindex = iface; /* Need iface for IPv6 to handle link-local addrs */
+ p.ipi6_addr = source->addr.addr6;
+ memcpy(CMSG_DATA(cmptr), &p, sizeof(p));
msg.msg_controllen = cmptr->cmsg_len = CMSG_LEN(sizeof(struct in6_pktinfo));
cmptr->cmsg_type = daemon->v6pktinfo;
cmptr->cmsg_level = IPV6_LEVEL;
@@ -111,7 +112,7 @@ 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)
+ unsigned short qtype, char *qdomain, int *type, char **domain, int *norebind)
{
/* If the query ends in the domain in one of our servers, set
@@ -153,38 +154,44 @@ static unsigned short search_servers(time_t now, struct all_addr **addrpp,
char *matchstart = qdomain + namelen - domainlen;
if (namelen >= domainlen &&
hostname_isequal(matchstart, serv->domain) &&
- domainlen >= matchlen &&
- (domainlen == 0 || namelen == domainlen || *(serv->domain) == '.' || *(matchstart-1) == '.' ))
+ (domainlen == 0 || namelen == domainlen || *(matchstart-1) == '.' ))
{
- unsigned short sflag = serv->addr.sa.sa_family == AF_INET ? F_IPV4 : F_IPV6;
- *type = SERV_HAS_DOMAIN;
- *domain = serv->domain;
- matchlen = domainlen;
- if (serv->flags & SERV_NO_ADDR)
- flags = F_NXDOMAIN;
- else if (serv->flags & SERV_LITERAL_ADDRESS)
+ if (serv->flags & SERV_NO_REBIND)
+ *norebind = 1;
+ else if (domainlen >= matchlen)
{
- if (sflag & qtype)
+ 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)
{
- flags = sflag;
- if (serv->addr.sa.sa_family == AF_INET)
- *addrpp = (struct all_addr *)&serv->addr.in.sin_addr;
+ 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;
+ }
+ }
}
-
+
if (flags == 0 && !(qtype & F_BIGNAME) &&
(daemon->options & OPT_NODOTS_LOCAL) && !strchr(qdomain, '.') && namelen != 0)
/* don't forward simple names, make exception for NS queries and empty name. */
flags = F_NXDOMAIN;
-
+
if (flags == F_NXDOMAIN && check_for_local_domain(qdomain, now))
flags = F_NOERR;
@@ -197,7 +204,11 @@ static unsigned short search_servers(time_t now, struct all_addr **addrpp,
log_query(logflags | flags | F_CONFIG | F_FORWARD, qdomain, *addrpp, NULL);
}
-
+ else if ((*type) & SERV_USE_RESOLV)
+ {
+ *type = 0; /* use normal servers for this domain */
+ *domain = NULL;
+ }
return flags;
}
@@ -206,7 +217,7 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
HEADER *header, size_t plen, time_t now, struct frec *forward)
{
char *domain = NULL;
- int type = 0;
+ int type = 0, norebind = 0;
struct all_addr *addrp = NULL;
unsigned int crc = questions_crc(header, plen, daemon->namebuff);
unsigned short flags = 0;
@@ -234,7 +245,7 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
else
{
if (gotname)
- flags = search_servers(now, &addrp, gotname, daemon->namebuff, &type, &domain);
+ flags = search_servers(now, &addrp, gotname, daemon->namebuff, &type, &domain, &norebind);
if (!flags && !(forward = get_new_frec(now, NULL)))
/* table full - server failure. */
@@ -250,22 +261,33 @@ 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);
- /* In strict_order mode, or when using domain specific servers
- always try servers in the order specified in resolv.conf,
+ /* 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,
otherwise, use the one last known to work. */
- if (type != 0 || (daemon->options & OPT_ORDER))
- start = daemon->servers;
- else if (!(start = daemon->last_server) ||
- daemon->forwardcount++ > FORWARD_TEST ||
- difftime(now, daemon->forwardtime) > FORWARD_TIME)
+ if (type == 0)
+ {
+ if (daemon->options & OPT_ORDER)
+ start = daemon->servers;
+ else if (!(start = daemon->last_server) ||
+ daemon->forwardcount++ > FORWARD_TEST ||
+ difftime(now, daemon->forwardtime) > FORWARD_TIME)
+ {
+ start = daemon->servers;
+ forward->forwardall = 1;
+ daemon->forwardcount = 0;
+ daemon->forwardtime = now;
+ }
+ }
+ else
{
start = daemon->servers;
- forward->forwardall = 1;
- daemon->forwardcount = 0;
- daemon->forwardtime = now;
+ if (!(daemon->options & OPT_ORDER))
+ forward->forwardall = 1;
}
}
}
@@ -374,7 +396,7 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
}
static size_t process_reply(HEADER *header, time_t now,
- struct server *server, size_t n)
+ struct server *server, size_t n, int check_rebind)
{
unsigned char *pheader, *sizep;
int munged = 0, is_sign;
@@ -428,9 +450,9 @@ static size_t process_reply(HEADER *header, time_t now,
header->rcode = NOERROR;
}
- if (extract_addresses(header, n, daemon->namebuff, now))
+ if (extract_addresses(header, n, daemon->namebuff, now, is_sign, check_rebind))
{
- my_syslog(LOG_WARNING, _("possible DNS-rebind attack detected"));
+ my_syslog(LOG_WARNING, _("possible DNS-rebind attack detected: %s"), daemon->namebuff);
munged = 1;
}
}
@@ -543,7 +565,12 @@ void reply_query(int fd, int family, time_t now)
if (forward->forwardall == 0 || --forward->forwardall == 1 ||
(header->rcode != REFUSED && header->rcode != SERVFAIL))
{
- if ((nn = process_reply(header, now, server, (size_t)n)))
+ int check_rebind = !forward->norebind;
+
+ if (!(daemon->options & OPT_NO_REBIND))
+ check_rebind = 0;
+
+ if ((nn = process_reply(header, now, server, (size_t)n, check_rebind)))
{
header->id = htons(forward->orig_id);
header->ra = 1; /* recursion if available */
@@ -635,21 +662,37 @@ void receive_query(struct listener *listen, time_t now)
for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, cmptr))
if (cmptr->cmsg_level == SOL_IP && cmptr->cmsg_type == IP_PKTINFO)
{
- dst_addr_4 = dst_addr.addr.addr4 = ((struct in_pktinfo *)CMSG_DATA(cmptr))->ipi_spec_dst;
- if_index = ((struct in_pktinfo *)CMSG_DATA(cmptr))->ipi_ifindex;
+ union {
+ unsigned char *c;
+ struct in_pktinfo *p;
+ } p;
+ p.c = CMSG_DATA(cmptr);
+ dst_addr_4 = dst_addr.addr.addr4 = p.p->ipi_spec_dst;
+ if_index = p.p->ipi_ifindex;
}
#elif defined(IP_RECVDSTADDR) && defined(IP_RECVIF)
if (listen->family == AF_INET)
{
for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, cmptr))
- if (cmptr->cmsg_level == IPPROTO_IP && cmptr->cmsg_type == IP_RECVDSTADDR)
- dst_addr_4 = dst_addr.addr.addr4 = *((struct in_addr *)CMSG_DATA(cmptr));
- else if (cmptr->cmsg_level == IPPROTO_IP && cmptr->cmsg_type == IP_RECVIF)
+ {
+ union {
+ unsigned char *c;
+ unsigned int *i;
+ struct in_addr *a;
+#ifndef HAVE_SOLARIS_NETWORK
+ struct sockaddr_dl *s;
+#endif
+ } p;
+ p.c = CMSG_DATA(cmptr);
+ if (cmptr->cmsg_level == IPPROTO_IP && cmptr->cmsg_type == IP_RECVDSTADDR)
+ dst_addr_4 = dst_addr.addr.addr4 = *(p.a);
+ else if (cmptr->cmsg_level == IPPROTO_IP && cmptr->cmsg_type == IP_RECVIF)
#ifdef HAVE_SOLARIS_NETWORK
- if_index = *((unsigned int *)CMSG_DATA(cmptr));
+ if_index = *(p.i);
#else
- if_index = ((struct sockaddr_dl *)CMSG_DATA(cmptr))->sdl_index;
+ if_index = p.s->sdl_index;
#endif
+ }
}
#endif
@@ -659,8 +702,14 @@ void receive_query(struct listener *listen, time_t now)
for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, cmptr))
if (cmptr->cmsg_level == IPV6_LEVEL && cmptr->cmsg_type == daemon->v6pktinfo)
{
- dst_addr.addr.addr6 = ((struct in6_pktinfo *)CMSG_DATA(cmptr))->ipi6_addr;
- if_index =((struct in6_pktinfo *)CMSG_DATA(cmptr))->ipi6_ifindex;
+ union {
+ unsigned char *c;
+ struct in6_pktinfo *p;
+ } p;
+ p.c = CMSG_DATA(cmptr);
+
+ dst_addr.addr.addr6 = p.p->ipi6_addr;
+ if_index = p.p->ipi6_ifindex;
}
}
#endif
@@ -717,7 +766,7 @@ 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;
+ int size = 0, norebind = 0;
size_t m;
unsigned short qtype, gotname;
unsigned char c1, c2;
@@ -776,7 +825,7 @@ unsigned char *tcp_request(int confd, time_t now,
char *domain = NULL;
if (gotname)
- flags = search_servers(now, &addrp, gotname, daemon->namebuff, &type, &domain);
+ flags = search_servers(now, &addrp, gotname, daemon->namebuff, &type, &domain, &norebind);
if (type != 0 || (daemon->options & OPT_ORDER) || !daemon->last_server)
last_server = daemon->servers;
@@ -792,7 +841,7 @@ unsigned char *tcp_request(int confd, time_t now,
Note that this code subtley ensures that consecutive queries on this connection
which can go to the same server, do so. */
while (1)
- {
+ {
if (!firstsendto)
firstsendto = last_server;
else
@@ -857,7 +906,7 @@ 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);
+ m = process_reply(header, now, last_server, (unsigned int)m, (daemon->options & OPT_NO_REBIND) && !norebind );
break;
}
diff --git a/src/helper.c b/src/helper.c
index b131501..efc0ab3 100644
--- a/src/helper.c
+++ b/src/helper.c
@@ -245,9 +245,12 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd)
if (data.giaddr.s_addr != 0)
my_setenv("DNSMASQ_RELAY_ADDRESS", inet_ntoa(data.giaddr), &err);
- sprintf(daemon->dhcp_buff2, "%u", data.remaining_time);
- my_setenv("DNSMASQ_TIME_REMAINING", daemon->dhcp_buff2, &err);
-
+ if (data.action != ACTION_DEL)
+ {
+ sprintf(daemon->dhcp_buff2, "%u", data.remaining_time);
+ my_setenv("DNSMASQ_TIME_REMAINING", daemon->dhcp_buff2, &err);
+ }
+
if (data.action == ACTION_OLD_HOSTNAME && hostname)
{
my_setenv("DNSMASQ_OLD_HOSTNAME", hostname, &err);
diff --git a/src/lease.c b/src/lease.c
index d312dce..4443cf2 100644
--- a/src/lease.c
+++ b/src/lease.c
@@ -29,11 +29,12 @@ void lease_init(time_t now)
int clid_len, hw_len, hw_type;
FILE *leasestream;
- /* These two each hold a DHCP option max size 255
+ /* These each hold a DHCP option max size 255
and get a terminating zero added */
daemon->dhcp_buff = safe_malloc(256);
daemon->dhcp_buff2 = safe_malloc(256);
-
+ daemon->dhcp_buff3 = safe_malloc(256);
+
leases_left = daemon->dhcp_max;
if (daemon->options & OPT_LEASE_RO)
diff --git a/src/log.c b/src/log.c
index 7f2e2e3..33a0de3 100644
--- a/src/log.c
+++ b/src/log.c
@@ -30,7 +30,8 @@
/* defaults in case we die() before we log_start() */
static int log_fac = LOG_DAEMON;
-static int log_stderr = 0;
+static int log_stderr = 0;
+static int echo_stderr = 0;
static int log_fd = -1;
static int log_to_file = 0;
static int entries_alloced = 0;
@@ -54,7 +55,7 @@ int log_start(struct passwd *ent_pw, int errfd)
{
int ret = 0;
- log_stderr = !!(daemon->options & OPT_DEBUG);
+ echo_stderr = !!(daemon->options & OPT_DEBUG);
if (daemon->log_fac != -1)
log_fac = daemon->log_fac;
@@ -67,6 +68,12 @@ int log_start(struct passwd *ent_pw, int errfd)
{
log_to_file = 1;
daemon->max_logs = 0;
+ if (strcmp(daemon->log_file, "-") == 0)
+ {
+ log_stderr = 1;
+ echo_stderr = 0;
+ log_fd = dup(STDERR_FILENO);
+ }
}
max_logs = daemon->max_logs;
@@ -90,7 +97,7 @@ int log_start(struct passwd *ent_pw, int errfd)
change the ownership here so that the file is always owned by
the dnsmasq user. Then logrotate can just copy the owner.
Failure of the chown call is OK, (for instance when started as non-root) */
- if (log_to_file && ent_pw && ent_pw->pw_uid != 0 &&
+ if (log_to_file && !log_stderr && ent_pw && ent_pw->pw_uid != 0 &&
fchown(log_fd, ent_pw->pw_uid, -1) != 0)
ret = errno;
@@ -99,37 +106,34 @@ int log_start(struct passwd *ent_pw, int errfd)
int log_reopen(char *log_file)
{
- if (log_fd != -1)
- close(log_fd);
-
- /* NOTE: umask is set to 022 by the time this gets called */
-
- if (log_file)
- {
- log_fd = open(log_file, O_WRONLY|O_CREAT|O_APPEND, S_IRUSR|S_IWUSR|S_IRGRP);
- return log_fd != -1;
- }
- else
+ if (!log_stderr)
+ {
+ if (log_fd != -1)
+ close(log_fd);
+
+ /* NOTE: umask is set to 022 by the time this gets called */
+
+ if (log_file)
+ log_fd = open(log_file, O_WRONLY|O_CREAT|O_APPEND, S_IRUSR|S_IWUSR|S_IRGRP);
+ else
+ {
#ifdef HAVE_SOLARIS_NETWORK
- /* Solaris logging is "different", /dev/log is not unix-domain socket.
- Just leave log_fd == -1 and use the vsyslog call for everything.... */
+ /* Solaris logging is "different", /dev/log is not unix-domain socket.
+ Just leave log_fd == -1 and use the vsyslog call for everything.... */
# define _PATH_LOG "" /* dummy */
- log_fd = -1;
+ return 1;
#else
- {
- int flags;
- log_fd = socket(AF_UNIX, connection_type, 0);
-
- if (log_fd == -1)
- return 0;
-
- /* if max_logs is zero, leave the socket blocking */
- if (max_logs != 0 && (flags = fcntl(log_fd, F_GETFL)) != -1)
- fcntl(log_fd, F_SETFL, flags | O_NONBLOCK);
- }
+ int flags;
+ log_fd = socket(AF_UNIX, connection_type, 0);
+
+ /* if max_logs is zero, leave the socket blocking */
+ if (log_fd != -1 && max_logs != 0 && (flags = fcntl(log_fd, F_GETFL)) != -1)
+ fcntl(log_fd, F_SETFL, flags | O_NONBLOCK);
#endif
-
- return 1;
+ }
+ }
+
+ return log_fd != -1;
}
static void free_entry(void)
@@ -274,7 +278,7 @@ void my_syslog(int priority, const char *format, ...)
priority &= LOG_PRIMASK;
#endif
- if (log_stderr)
+ if (echo_stderr)
{
fprintf(stderr, "dnsmasq%s: ", func);
va_start(ap, format);
@@ -394,14 +398,19 @@ void check_log_writer(fd_set *set)
void flush_log(void)
{
- /* block until queue empty */
- if (log_fd != -1)
+ /* write until queue empty */
+ while (log_fd != -1)
{
- int flags;
- if ((flags = fcntl(log_fd, F_GETFL)) != -1)
- fcntl(log_fd, F_SETFL, flags & ~O_NONBLOCK);
+ struct timespec waiter;
log_write();
- close(log_fd);
+ if (!entries)
+ {
+ close(log_fd);
+ break;
+ }
+ waiter.tv_sec = 0;
+ waiter.tv_nsec = 1000000; /* 1 ms */
+ nanosleep(&waiter, NULL);
}
}
@@ -412,11 +421,13 @@ void die(char *message, char *arg1, int exit_code)
if (!arg1)
arg1 = errmess;
- log_stderr = 1; /* print as well as log when we die.... */
- fputc('\n', stderr); /* prettyfy startup-script message */
+ if (!log_stderr)
+ {
+ echo_stderr = 1; /* print as well as log when we die.... */
+ fputc('\n', stderr); /* prettyfy startup-script message */
+ }
my_syslog(LOG_CRIT, message, arg1, errmess);
-
- log_stderr = 0;
+ echo_stderr = 0;
my_syslog(LOG_CRIT, _("FAILED to start up"));
flush_log();
diff --git a/src/netlink.c b/src/netlink.c
index 1f247d8..46c8d26 100644
--- a/src/netlink.c
+++ b/src/netlink.c
@@ -281,8 +281,8 @@ static void nl_routechange(struct nlmsghdr *h)
return;
/* Force re-reading resolv file right now, for luck. */
- daemon->last_resolv = 0;
-
+ poll_resolv(1, 1, dnsmasq_time());
+
if (daemon->srv_save)
{
if (daemon->srv_save->sfd)
diff --git a/src/network.c b/src/network.c
index 6e148de..a144a7a 100644
--- a/src/network.c
+++ b/src/network.c
@@ -53,7 +53,44 @@ int iface_check(int family, struct all_addr *addr, char *name, int *indexp)
/* Note: have to check all and not bail out early, so that we set the
"used" flags. */
+
+ if (daemon->if_names || (addr && daemon->if_addrs))
+ {
+#ifdef HAVE_DHCP
+ struct dhcp_context *range;
+#endif
+
+ ret = 0;
+#ifdef HAVE_DHCP
+ for (range = daemon->dhcp; range; range = range->next)
+ if (range->interface && strcmp(range->interface, name) == 0)
+ ret = 1;
+#endif
+
+ for (tmp = daemon->if_names; tmp; tmp = tmp->next)
+ if (tmp->name && (strcmp(tmp->name, name) == 0))
+ ret = tmp->used = 1;
+
+ for (tmp = daemon->if_addrs; tmp; tmp = tmp->next)
+ if (addr && tmp->addr.sa.sa_family == family)
+ {
+ if (family == AF_INET &&
+ tmp->addr.in.sin_addr.s_addr == addr->addr.addr4.s_addr)
+ ret = tmp->used = 1;
+#ifdef HAVE_IPV6
+ else if (family == AF_INET6 &&
+ IN6_ARE_ADDR_EQUAL(&tmp->addr.in6.sin6_addr,
+ &addr->addr.addr6))
+ ret = tmp->used = 1;
+#endif
+ }
+ }
+
+ for (tmp = daemon->if_except; tmp; tmp = tmp->next)
+ if (tmp->name && (strcmp(tmp->name, name) == 0))
+ ret = 0;
+
if (indexp)
{
/* One form of bridging on BSD has the property that packets
@@ -85,33 +122,6 @@ int iface_check(int family, struct all_addr *addr, char *name, int *indexp)
}
}
- if (daemon->if_names || (addr && daemon->if_addrs))
- {
- ret = 0;
-
- for (tmp = daemon->if_names; tmp; tmp = tmp->next)
- if (tmp->name && (strcmp(tmp->name, name) == 0))
- ret = tmp->used = 1;
-
- for (tmp = daemon->if_addrs; tmp; tmp = tmp->next)
- if (addr && tmp->addr.sa.sa_family == family)
- {
- if (family == AF_INET &&
- tmp->addr.in.sin_addr.s_addr == addr->addr.addr4.s_addr)
- ret = tmp->used = 1;
-#ifdef HAVE_IPV6
- else if (family == AF_INET6 &&
- IN6_ARE_ADDR_EQUAL(&tmp->addr.in6.sin6_addr,
- &addr->addr.addr6))
- ret = tmp->used = 1;
-#endif
- }
- }
-
- for (tmp = daemon->if_except; tmp; tmp = tmp->next)
- if (tmp->name && (strcmp(tmp->name, name) == 0))
- ret = 0;
-
return ret;
}
@@ -121,9 +131,12 @@ static int iface_allowed(struct irec **irecp, int if_index,
struct irec *iface;
int fd, mtu = 0, loopback;
struct ifreq ifr;
- int dhcp_ok = 1;
+ int tftp_ok = daemon->tftp_unlimited;
+#ifdef HAVE_DHCP
struct iname *tmp;
-
+#endif
+ struct interface_list *ir = NULL;
+
/* check whether the interface IP has been added already
we call this routine multiple times. */
for (iface = *irecp; iface; iface = iface->next)
@@ -173,27 +186,45 @@ static int iface_allowed(struct irec **irecp, int if_index,
}
}
- if (addr->sa.sa_family == AF_INET &&
- !iface_check(AF_INET, (struct all_addr *)&addr->in.sin_addr, ifr.ifr_name, NULL))
- return 1;
-
- for (tmp = daemon->dhcp_except; tmp; tmp = tmp->next)
- if (tmp->name && (strcmp(tmp->name, ifr.ifr_name) == 0))
- dhcp_ok = 0;
-
+#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;
+ }
+#endif
+
+ if (!ir)
+ {
+ if (addr->sa.sa_family == AF_INET &&
+ !iface_check(AF_INET, (struct all_addr *)&addr->in.sin_addr, ifr.ifr_name, NULL))
+ return 1;
+
+#ifdef HAVE_DHCP
+ for (tmp = daemon->dhcp_except; tmp; tmp = tmp->next)
+ if (tmp->name && (strcmp(tmp->name, ifr.ifr_name) == 0))
+ tftp_ok = 0;
+#endif
+
#ifdef HAVE_IPV6
- if (addr->sa.sa_family == AF_INET6 &&
- !iface_check(AF_INET6, (struct all_addr *)&addr->in6.sin6_addr, ifr.ifr_name, NULL))
- return 1;
+ if (addr->sa.sa_family == AF_INET6 &&
+ !iface_check(AF_INET6, (struct all_addr *)&addr->in6.sin6_addr, ifr.ifr_name, NULL))
+ return 1;
#endif
+ }
/* add to list */
if ((iface = whine_malloc(sizeof(struct irec))))
{
iface->addr = *addr;
iface->netmask = netmask;
- iface->dhcp_ok = dhcp_ok;
+ iface->tftp_ok = tftp_ok;
iface->mtu = mtu;
+ if ((iface->name = whine_malloc(strlen(ifr.ifr_name)+1)))
+ strcpy(iface->name, ifr.ifr_name);
iface->next = *irecp;
*irecp = iface;
return 1;
@@ -377,7 +408,7 @@ struct listener *create_wildcard_listeners(void)
}
#ifdef HAVE_TFTP
- if (daemon->options & OPT_TFTP)
+ if (daemon->tftp_unlimited || daemon->tftp_interfaces)
{
addr.in.sin_port = htons(TFTP_PORT);
if ((tftpfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
@@ -475,7 +506,7 @@ struct listener *create_bound_listeners(void)
}
#ifdef HAVE_TFTP
- if ((daemon->options & OPT_TFTP) && iface->addr.sa.sa_family == AF_INET && iface->dhcp_ok)
+ 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);
@@ -666,7 +697,7 @@ void pre_allocate_sfds(void)
}
for (srv = daemon->servers; srv; srv = srv->next)
- if (!(srv->flags & (SERV_LITERAL_ADDRESS | SERV_NO_ADDR)) &&
+ 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))
@@ -697,7 +728,7 @@ void check_servers(void)
{
tmp = new->next;
- if (!(new->flags & (SERV_LITERAL_ADDRESS | SERV_NO_ADDR)))
+ if (!(new->flags & (SERV_LITERAL_ADDRESS | SERV_NO_ADDR | SERV_USE_RESOLV | SERV_NO_REBIND)))
{
port = prettyprint_addr(&new->addr, daemon->namebuff);
@@ -736,25 +767,30 @@ void check_servers(void)
new->next = ret;
ret = new;
- if (new->flags & (SERV_HAS_DOMAIN | SERV_FOR_NODOTS))
+ if (!(new->flags & SERV_NO_REBIND))
{
- char *s1, *s2;
- if (!(new->flags & SERV_HAS_DOMAIN))
- s1 = _("unqualified"), s2 = _("names");
- else if (strlen(new->domain) == 0)
- s1 = _("default"), s2 = "";
+ if (new->flags & (SERV_HAS_DOMAIN | SERV_FOR_NODOTS | SERV_USE_RESOLV))
+ {
+ char *s1, *s2;
+ if (!(new->flags & SERV_HAS_DOMAIN))
+ s1 = _("unqualified"), s2 = _("names");
+ else if (strlen(new->domain) == 0)
+ s1 = _("default"), s2 = "";
+ else
+ s1 = _("domain"), s2 = new->domain;
+
+ if (new->flags & SERV_NO_ADDR)
+ my_syslog(LOG_INFO, _("using local addresses only for %s %s"), s1, s2);
+ else if (new->flags & SERV_USE_RESOLV)
+ my_syslog(LOG_INFO, _("using standard nameservers for %s %s"), s1, s2);
+ else if (!(new->flags & SERV_LITERAL_ADDRESS))
+ my_syslog(LOG_INFO, _("using nameserver %s#%d for %s %s"), daemon->namebuff, port, s1, s2);
+ }
+ else if (new->interface[0] != 0)
+ my_syslog(LOG_INFO, _("using nameserver %s#%d(via %s)"), daemon->namebuff, port, new->interface);
else
- s1 = _("domain"), s2 = new->domain;
-
- if (new->flags & SERV_NO_ADDR)
- my_syslog(LOG_INFO, _("using local addresses only for %s %s"), s1, s2);
- else if (!(new->flags & SERV_LITERAL_ADDRESS))
- my_syslog(LOG_INFO, _("using nameserver %s#%d for %s %s"), daemon->namebuff, port, s1, s2);
+ my_syslog(LOG_INFO, _("using nameserver %s#%d"), daemon->namebuff, port);
}
- else if (new->interface[0] != 0)
- my_syslog(LOG_INFO, _("using nameserver %s#%d(via %s)"), daemon->namebuff, port, new->interface);
- else
- my_syslog(LOG_INFO, _("using nameserver %s#%d"), daemon->namebuff, port);
}
daemon->servers = ret;
@@ -881,16 +917,19 @@ struct in_addr get_ifaddr(char *intr)
{
struct listener *l;
struct ifreq ifr;
+ struct sockaddr_in ret;
+
+ ret.sin_addr.s_addr = -1;
for (l = daemon->listeners; l && l->family != AF_INET; l = l->next);
strncpy(ifr.ifr_name, intr, IF_NAMESIZE);
ifr.ifr_addr.sa_family = AF_INET;
- if (!l || ioctl(l->fd, SIOCGIFADDR, &ifr) == -1)
- ((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr.s_addr = -1;
+ if (l && ioctl(l->fd, SIOCGIFADDR, &ifr) != -1)
+ memcpy(&ret, &ifr.ifr_addr, sizeof(ret));
- return ((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr;
+ return ret.sin_addr;
}
diff --git a/src/option.c b/src/option.c
index ac06b00..7c934da 100644
--- a/src/option.c
+++ b/src/option.c
@@ -102,6 +102,12 @@ struct myoption {
#define LOPT_PXE_PROMT 291
#define LOPT_PXE_SERV 292
#define LOPT_TEST 293
+#define LOPT_TAG_IF 294
+#define LOPT_PROXY 295
+#define LOPT_GEN_NAMES 296
+#define LOPT_MAXTTL 297
+#define LOPT_NO_REBIND 298
+#define LOPT_LOC_REBND 299
#ifdef HAVE_GETOPT_LONG
static const struct option opts[] =
@@ -176,7 +182,7 @@ static const struct myoption opts[] =
{ "dns-forward-max", 1, 0, '0' },
{ "clear-on-reload", 0, 0, LOPT_RELOAD },
{ "dhcp-ignore-names", 2, 0, LOPT_NO_NAMES },
- { "enable-tftp", 0, 0, LOPT_TFTP },
+ { "enable-tftp", 2, 0, LOPT_TFTP },
{ "tftp-secure", 0, 0, LOPT_SECURE },
{ "tftp-unique-root", 0, 0, LOPT_APREF },
{ "tftp-root", 1, 0, LOPT_PREFIX },
@@ -197,10 +203,12 @@ static const struct myoption opts[] =
{ "dhcp-no-override", 0, 0, LOPT_OVERRIDE },
{ "tftp-port-range", 1, 0, LOPT_TFTPPORTS },
{ "stop-dns-rebind", 0, 0, LOPT_REBIND },
+ { "rebind-domain-ok", 1, 0, LOPT_NO_REBIND },
{ "all-servers", 0, 0, LOPT_NOLAST },
{ "dhcp-match", 1, 0, LOPT_MATCH },
- { "dhcp-broadcast", 1, 0, LOPT_BROADCAST },
+ { "dhcp-broadcast", 2, 0, LOPT_BROADCAST },
{ "neg-ttl", 1, 0, LOPT_NEGTTL },
+ { "max-ttl", 1, 0, LOPT_MAXTTL },
{ "dhcp-alternate-port", 2, 0, LOPT_ALTPORT },
{ "dhcp-scriptuser", 1, 0, LOPT_SCRIPTUSR },
{ "min-port", 1, 0, LOPT_MINPORT },
@@ -209,6 +217,10 @@ static const struct myoption opts[] =
{ "pxe-prompt", 1, 0, LOPT_PXE_PROMT },
{ "pxe-service", 1, 0, LOPT_PXE_SERV },
{ "test", 0, 0, LOPT_TEST },
+ { "tag-if", 1, 0, LOPT_TAG_IF },
+ { "dhcp-proxy", 2, 0, LOPT_PROXY },
+ { "dhcp-generate-names", 2, 0, LOPT_GEN_NAMES },
+ { "rebind-localhost-ok", 0, 0, LOPT_LOC_REBND },
{ NULL, 0, 0, 0 }
};
@@ -239,18 +251,19 @@ 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_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_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 },
{ 'i', ARG_DUP, "interface", gettext_noop("Specify interface(s) to listen on."), NULL },
{ 'I', ARG_DUP, "int", gettext_noop("Specify interface(s) NOT to listen on.") , NULL },
- { 'j', ARG_DUP, "<tag>,<class>", gettext_noop("Map DHCP user class to tag."), NULL },
- { LOPT_CIRCUIT, ARG_DUP, "<tag>,<circuit>", gettext_noop("Map RFC3046 circuit-id to tag."), NULL },
- { LOPT_REMOTE, ARG_DUP, "<tag>,<remote>", gettext_noop("Map RFC3046 remote-id to tag."), NULL },
- { LOPT_SUBSCR, ARG_DUP, "<tag>,<remote>", gettext_noop("Map RFC3993 subscriber-id to tag."), NULL },
- { 'J', ARG_DUP, "=<id>[,<id>]", gettext_noop("Don't do DHCP for hosts with tag set."), NULL },
- { LOPT_BROADCAST, ARG_DUP, "=<id>[,<id>]", gettext_noop("Force broadcast replies for hosts with tag set."), NULL },
+ { 'j', ARG_DUP, "set:<tag>,<class>", gettext_noop("Map DHCP user class to tag."), NULL },
+ { LOPT_CIRCUIT, ARG_DUP, "set:<tag>,<circuit>", gettext_noop("Map RFC3046 circuit-id to tag."), NULL },
+ { LOPT_REMOTE, ARG_DUP, "set:<tag>,<remote>", gettext_noop("Map RFC3046 remote-id to tag."), NULL },
+ { LOPT_SUBSCR, ARG_DUP, "set:<tag>,<remote>", gettext_noop("Map RFC3993 subscriber-id to tag."), NULL },
+ { 'J', ARG_DUP, "tag:<tag>...", gettext_noop("Don't do DHCP for hosts with tag set."), NULL },
+ { LOPT_BROADCAST, ARG_DUP, "[=tag:<tag>...]", gettext_noop("Force broadcast replies for hosts with tag set."), NULL },
{ 'k', OPT_NO_FORK, NULL, gettext_noop("Do NOT fork into the background, do NOT run in debug mode."), NULL },
{ 'K', OPT_AUTHORITATIVE, NULL, gettext_noop("Assume we are the only DHCP server on the local network."), NULL },
{ 'l', ARG_ONE, "path", gettext_noop("Specify where to store DHCP leases (defaults to %s)."), LEASEFILE },
@@ -274,8 +287,9 @@ static struct {
{ 't', ARG_ONE, "host_name", gettext_noop("Specify default target in an MX record."), NULL },
{ 'T', ARG_ONE, "time", gettext_noop("Specify time-to-live in seconds for replies from /etc/hosts."), NULL },
{ LOPT_NEGTTL, ARG_ONE, "time", gettext_noop("Specify time-to-live in seconds for negative caching."), NULL },
+ { LOPT_MAXTTL, ARG_ONE, "time", gettext_noop("Specify time-to-live in seconds for maximum TTL to send to clients."), NULL },
{ 'u', ARG_ONE, "username", gettext_noop("Change to this user after startup. (defaults to %s)."), CHUSER },
- { 'U', ARG_DUP, "<id>,<class>", gettext_noop("Map DHCP vendor class to tag."), NULL },
+ { 'U', ARG_DUP, "set:<tag>,<class>", gettext_noop("Map DHCP vendor class to tag."), NULL },
{ 'v', 0, NULL, gettext_noop("Display dnsmasq version and copyright information."), NULL },
{ 'V', ARG_DUP, "addr,addr,mask", gettext_noop("Translate IPv4 addresses from upstream servers."), NULL },
{ 'W', ARG_DUP, "name,target,...", gettext_noop("Specify a SRV record."), NULL },
@@ -290,8 +304,8 @@ static struct {
{ 'Z', OPT_ETHERS, NULL, gettext_noop("Read DHCP static host information from %s."), ETHERSFILE },
{ '1', OPT_DBUS, NULL, gettext_noop("Enable the DBus interface for setting upstream servers, etc."), NULL },
{ '2', ARG_DUP, "interface", gettext_noop("Do not provide DHCP on this interface, only provide DNS."), NULL },
- { '3', ARG_DUP, "[=<id>[,<id>]]", gettext_noop("Enable dynamic address allocation for bootp."), NULL },
- { '4', ARG_DUP, "<id>,<mac address>", gettext_noop("Map MAC address (with wildcards) to option set."), NULL },
+ { '3', ARG_DUP, "[=tag:<tag>]...", gettext_noop("Enable dynamic address allocation for bootp."), NULL },
+ { '4', ARG_DUP, "set:<tag>,<mac address>", gettext_noop("Map MAC address (with wildcards) to option set."), NULL },
{ LOPT_BRIDGE, ARG_DUP, "iface,alias,..", gettext_noop("Treat DHCP requests on aliases as arriving from interface."), NULL },
{ '5', OPT_NO_PING, NULL, gettext_noop("Disable ICMP echo address checking in the DHCP server."), NULL },
{ '6', ARG_ONE, "path", gettext_noop("Script to run on DHCP lease creation and destruction."), NULL },
@@ -300,10 +314,10 @@ static struct {
{ '9', OPT_LEASE_RO, NULL, gettext_noop("Do not use leasefile."), NULL },
{ '0', ARG_ONE, "<queries>", gettext_noop("Maximum number of concurrent DNS queries. (defaults to %s)"), "!" },
{ LOPT_RELOAD, OPT_RELOAD, NULL, gettext_noop("Clear DNS cache when reloading %s."), RESOLVFILE },
- { LOPT_NO_NAMES, ARG_DUP, "[=<id>[,<id>]]", gettext_noop("Ignore hostnames provided by DHCP clients."), NULL },
+ { LOPT_NO_NAMES, ARG_DUP, "[=tag:<tag>]...", gettext_noop("Ignore hostnames provided by DHCP clients."), NULL },
{ LOPT_OVERRIDE, OPT_NO_OVERRIDE, NULL, gettext_noop("Do NOT reuse filename and server fields for extra DHCP options."), NULL },
- { LOPT_TFTP, OPT_TFTP, NULL, gettext_noop("Enable integrated read-only TFTP server."), NULL },
- { LOPT_PREFIX, ARG_ONE, "<directory>", gettext_noop("Export files by TFTP only from the specified subtree."), NULL },
+ { LOPT_TFTP, ARG_DUP, "[=<interface>]", gettext_noop("Enable integrated read-only TFTP server."), NULL },
+ { LOPT_PREFIX, ARG_ONE, "<dir>[,<iface>]", gettext_noop("Export files by TFTP only from the specified subtree."), NULL },
{ LOPT_APREF, OPT_TFTP_APREF, NULL, gettext_noop("Add client IP address to tftp-root."), NULL },
{ LOPT_SECURE, OPT_TFTP_SECURE, NULL, gettext_noop("Allow access only to files owned by the user running dnsmasq."), NULL },
{ LOPT_TFTP_MAX, ARG_ONE, "<connections>", gettext_noop("Maximum number of conncurrent TFTP transfers (defaults to %s)."), "#" },
@@ -312,13 +326,17 @@ static struct {
{ LOPT_LOG_OPTS, OPT_LOG_OPTS, NULL, gettext_noop("Extra logging for DHCP."), NULL },
{ LOPT_MAX_LOGS, ARG_ONE, "[=<log lines>]", gettext_noop("Enable async. logging; optionally set queue length."), NULL },
{ LOPT_REBIND, OPT_NO_REBIND, NULL, gettext_noop("Stop DNS rebinding. Filter private IP ranges when resolving."), NULL },
+ { LOPT_LOC_REBND, OPT_LOCAL_REBIND, NULL, gettext_noop("Allow rebinding of 127.0.0.0/8, for RBL servers."), NULL },
+ { LOPT_NO_REBIND, ARG_DUP, "/domain/", gettext_noop("Inhibit DNS-rebind protection on this domain."), NULL },
{ LOPT_NOLAST, OPT_ALL_SERVERS, NULL, gettext_noop("Always perform DNS queries to all servers."), NULL },
- { LOPT_MATCH, ARG_DUP, "<netid>,<optspec>", gettext_noop("Set tag if client includes matching option in request."), NULL },
+ { LOPT_MATCH, ARG_DUP, "set:<tag>,<optspec>", gettext_noop("Set tag if client includes matching option in request."), NULL },
{ LOPT_ALTPORT, ARG_ONE, "[=<ports>]", gettext_noop("Use alternative ports for DHCP."), NULL },
{ LOPT_SCRIPTUSR, ARG_ONE, "<username>", gettext_noop("Run lease-change script as this user."), NULL },
{ LOPT_NAPTR, ARG_DUP, "<name>,<naptr>", gettext_noop("Specify NAPTR DNS record."), NULL },
{ LOPT_MINPORT, ARG_ONE, "<port>", gettext_noop("Specify lowest port available for DNS query transmission."), NULL },
{ LOPT_DHCP_FQDN, OPT_DHCP_FQDN, NULL, gettext_noop("Use only fully qualified domain names for DHCP clients."), NULL },
+ { LOPT_GEN_NAMES, ARG_DUP, "[=tag:<tag>]...", gettext_noop("Generate hostnames based on MAC address for nameless clients."), NULL},
+ { LOPT_PROXY, ARG_DUP, "[=<ip_address>]...", gettext_noop("Use these DHCP relays as full proxies."), NULL },
{ LOPT_CNAME, ARG_DUP, "<alias>,<target>", gettext_noop("Specify alias name for LOCAL DNS name."), NULL },
{ 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 },
@@ -519,9 +537,9 @@ static char *split_chr(char *s, char c)
p = comma;
*comma = ' ';
- for (; isspace((int)*comma); comma++);
+ for (; *comma == ' '; comma++);
- for (; (p >= s) && isspace((int)*p); p--)
+ for (; (p >= s) && *p == ' '; p--)
*p = 0;
return comma;
@@ -637,7 +655,7 @@ static void do_usage(void)
sprintf(buff, " ");
sprintf(buff+4, "--%s%s%s", opts[j].name, eq, desc);
- printf("%-36.36s", buff);
+ printf("%-40.40s", buff);
if (usage[i].arg)
{
@@ -663,6 +681,22 @@ static void display_opts(void)
printf("%3d %s\n", opttab[i].val, opttab[i].name);
}
+static int is_tag_prefix(char *arg)
+{
+ if (arg && (strstr(arg, "net:") == arg || strstr(arg, "tag:") == arg))
+ return 1;
+
+ return 0;
+}
+
+static char *set_prefix(char *arg)
+{
+ if (strstr(arg, "set:") == arg)
+ return arg+4;
+
+ return arg;
+}
+
/* This is too insanely large to keep in-line in the switch */
static char *parse_dhcp_opt(char *arg, int flags)
{
@@ -730,11 +764,11 @@ static char *parse_dhcp_opt(char *arg, int flags)
else
{
new->netid = opt_malloc(sizeof (struct dhcp_netid));
- /* allow optional "net:" for consistency */
- if (strstr(arg, "net:") == arg)
+ /* allow optional "net:" or "tag:" for consistency */
+ if (is_tag_prefix(arg))
new->netid->net = opt_string_alloc(arg+4);
else
- new->netid->net = opt_string_alloc(arg);
+ new->netid->net = opt_string_alloc(set_prefix(arg));
new->netid->next = np;
np = new->netid;
}
@@ -1121,7 +1155,7 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
case '8': /* --log-facility */
/* may be a filename */
- if (strchr(arg, '/'))
+ if (strchr(arg, '/') || strcmp (arg, "-") == 0)
daemon->log_file = opt_string_alloc(arg);
else
{
@@ -1391,21 +1425,26 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
} while (arg);
break;
- case 'S': /* --server */
- case LOPT_LOCAL: /* --local */
- case 'A': /* --address */
+ case 'S': /* --server */
+ case LOPT_LOCAL: /* --local */
+ case 'A': /* --address */
+ case LOPT_NO_REBIND: /* --rebind-domain-ok */
{
struct server *serv, *newlist = NULL;
unhide_metas(arg);
- if (arg && *arg == '/')
+ if (arg && (*arg == '/' || option == LOPT_NO_REBIND))
{
- char *end;
- arg++;
- while ((end = split_chr(arg, '/')))
+ int rebind = !(*arg == '/');
+ char *end = NULL;
+ if (!rebind)
+ arg++;
+ while (rebind || (end = split_chr(arg, '/')))
{
char *domain = NULL;
+ /* elide leading dots - they are implied in the search algorithm */
+ while (*arg == '.') arg++;
/* # matches everything and becomes a zero length domain string */
if (strcmp(arg, "#") == 0)
domain = "";
@@ -1418,6 +1457,8 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
serv->domain = domain;
serv->flags = domain ? SERV_HAS_DOMAIN : SERV_FOR_NODOTS;
arg = end;
+ if (rebind)
+ break;
}
if (!newlist)
{
@@ -1438,10 +1479,20 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
if (!(newlist->flags & SERV_TYPE))
option = '?';
}
+ else if (option == LOPT_NO_REBIND)
+ newlist->flags |= SERV_NO_REBIND;
if (!arg || !*arg)
{
- newlist->flags |= SERV_NO_ADDR; /* no server */
+ if (!(newlist->flags & SERV_NO_REBIND))
+ newlist->flags |= SERV_NO_ADDR; /* no server */
+ if (newlist->flags & SERV_LITERAL_ADDRESS)
+ option = '?';
+ }
+
+ else if (strcmp(arg, "#") == 0)
+ {
+ newlist->flags |= SERV_USE_RESOLV; /* treat in ordinary way */
if (newlist->flags & SERV_LITERAL_ADDRESS)
option = '?';
}
@@ -1590,12 +1641,15 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
case 'T': /* --local-ttl */
case LOPT_NEGTTL: /* --neg-ttl */
+ case LOPT_MAXTTL: /* --max-ttl */
{
int ttl;
if (!atoi_check(arg, &ttl))
option = '?';
else if (option == LOPT_NEGTTL)
daemon->neg_ttl = (unsigned long)ttl;
+ else if (option == LOPT_MAXTTL)
+ daemon->max_ttl = (unsigned long)ttl;
else
daemon->local_ttl = (unsigned long)ttl;
break;
@@ -1609,13 +1663,35 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
#endif
#ifdef HAVE_TFTP
+ case LOPT_TFTP: /* --enable-tftp */
+ if (arg)
+ {
+ struct interface_list *new = opt_malloc(sizeof(struct interface_list));
+ new->interface = opt_string_alloc(arg);
+ new->next = daemon->tftp_interfaces;
+ daemon->tftp_interfaces = new;
+ }
+ else
+ daemon->tftp_unlimited = 1;
+ break;
+
case LOPT_TFTP_MAX: /* --tftp-max */
if (!atoi_check(arg, &daemon->tftp_max))
option = '?';
break;
case LOPT_PREFIX: /* --tftp-prefix */
- daemon->tftp_prefix = opt_string_alloc(arg);
+ comma = split(arg);
+ if (comma)
+ {
+ struct tftp_prefix *new = opt_malloc(sizeof(struct tftp_prefix));
+ new->interface = opt_string_alloc(comma);
+ new->prefix = opt_string_alloc(arg);
+ new->next = daemon->if_prefix;
+ daemon->if_prefix = new;
+ }
+ else
+ daemon->tftp_prefix = opt_string_alloc(arg);
break;
case LOPT_TFTPPORTS: /* --tftp-port-range */
@@ -1679,7 +1755,8 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
new->netid.net = NULL;
new->filter = NULL;
new->flags = 0;
-
+ new->interface = NULL;
+
gen_prob = _("bad dhcp-range");
if (!arg)
@@ -1696,7 +1773,9 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
if (*cp != ',' && (comma = split(arg)))
{
- if (strstr(arg, "net:") == arg)
+ if (strstr(arg, "interface:") == arg)
+ new->interface = opt_string_alloc(arg+10);
+ else if (is_tag_prefix(arg))
{
struct dhcp_netid *tt = opt_malloc(sizeof (struct dhcp_netid));
tt->net = opt_string_alloc(arg+4);
@@ -1706,7 +1785,9 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
else
{
if (new->netid.net)
- problem = _("only one netid tag allowed");
+ problem = _("only one tag allowed");
+ else if (strstr(arg, "set:") == arg)
+ new->netid.net = opt_string_alloc(arg+4);
else
new->netid.net = opt_string_alloc(arg);
}
@@ -1814,7 +1895,8 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
new->next = daemon->dhcp_conf;
new->flags = (option == LOPT_BANK) ? CONFIG_BANK : 0;
new->hwaddr = NULL;
-
+ new->netid = NULL;
+
if ((a[0] = arg))
for (k = 1; k < 6; k++)
if (!(a[k] = split(a[k-1])))
@@ -1851,15 +1933,17 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
}
}
}
- else if (strstr(arg, "net:") == arg)
+ /* dhcp-host has strange backwards-compat needs. */
+ else if (strstr(arg, "net:") == arg || strstr(arg, "set:") == arg)
{
- int len = strlen(arg + 4) + 1;
- if ((new->netid.net = opt_malloc(len)))
- {
- new->flags |= CONFIG_NETID;
- strcpy(new->netid.net, arg+4);
- unhide_metas(new->netid.net);
- }
+ struct dhcp_netid *newtag = opt_malloc(sizeof(struct dhcp_netid));
+ struct dhcp_netid_list *newlist = opt_malloc(sizeof(struct dhcp_netid_list));
+ newtag->net = opt_malloc(strlen(arg + 4) + 1);
+ newlist->next = new->netid;
+ new->netid = newlist;
+ newlist->list = newtag;
+ strcpy(newtag->net, arg+4);
+ unhide_metas(newtag->net);
}
else
{
@@ -1943,6 +2027,72 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
daemon->dhcp_conf = new;
break;
}
+
+ case LOPT_TAG_IF: /* --tag-if */
+ {
+ struct tag_if *new = opt_malloc(sizeof(struct tag_if));
+
+ new->tag = NULL;
+ new->set = NULL;
+ new->next = NULL;
+
+ /* preserve order */
+ if (!daemon->tag_if)
+ daemon->tag_if = new;
+ else
+ {
+ struct tag_if *tmp;
+ for (tmp = daemon->tag_if; tmp->next; tmp = tmp->next);
+ tmp->next = new;
+ }
+
+ while (arg)
+ {
+ size_t len;
+
+ comma = split(arg);
+ len = strlen(arg);
+
+ if (len < 5)
+ {
+ new->set = NULL;
+ break;
+ }
+ else
+ {
+ struct dhcp_netid *newtag = opt_malloc(sizeof(struct dhcp_netid));
+ newtag->net = opt_malloc(len - 3);
+ strcpy(newtag->net, arg+4);
+ unhide_metas(newtag->net);
+
+ if (strstr(arg, "set:") == arg)
+ {
+ struct dhcp_netid_list *newlist = opt_malloc(sizeof(struct dhcp_netid_list));
+ newlist->next = new->set;
+ new->set = newlist;
+ newlist->list = newtag;
+ }
+ else if (strstr(arg, "tag:") == arg)
+ {
+ newtag->next = new->tag;
+ new->tag = newtag;
+ }
+ else
+ {
+ new->set = NULL;
+ break;
+ }
+ }
+
+ arg = comma;
+ }
+
+ if (!new->set)
+ problem = _("bad tag-if");
+
+ break;
+ }
+
case 'O': /* --dhcp-option */
case LOPT_FORCE: /* --dhcp-option-force */
@@ -1957,7 +2107,7 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
case 'M': /* --dhcp-boot */
{
struct dhcp_netid *id = NULL;
- while (arg && strstr(arg, "net:") == arg)
+ while (is_tag_prefix(arg))
{
struct dhcp_netid *newid = opt_malloc(sizeof(struct dhcp_netid));
newid->next = id;
@@ -2011,8 +2161,8 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
new->netid = NULL;
new->opt = 10; /* PXE_MENU_PROMPT */
- while (arg && strstr(arg, "net:") == arg)
- {
+ while (is_tag_prefix(arg))
+ {
struct dhcp_netid *nn = opt_malloc(sizeof (struct dhcp_netid));
comma = split(arg);
nn->next = new->netid;
@@ -2057,7 +2207,7 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
new->netid = NULL;
new->server.s_addr = 0;
- while (arg && strstr(arg, "net:") == arg)
+ while (is_tag_prefix(arg))
{
struct dhcp_netid *nn = opt_malloc(sizeof (struct dhcp_netid));
comma = split(arg);
@@ -2133,10 +2283,7 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
else
{
struct dhcp_mac *new = opt_malloc(sizeof(struct dhcp_mac));
- if (strstr(arg, "net:") == arg)
- new->netid.net = opt_string_alloc(arg+4);
- else
- new->netid.net = opt_string_alloc(arg);
+ 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;
@@ -2158,10 +2305,7 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
char *p;
int dig = 0;
struct dhcp_vendor *new = opt_malloc(sizeof(struct dhcp_vendor));
- if (strstr(arg, "net:") == arg)
- new->netid.net = opt_string_alloc(arg+4);
- else
- new->netid.net = opt_string_alloc(arg);
+ new->netid.net = opt_string_alloc(set_prefix(arg));
/* check for hex string - must digits may include : must not have nothing else,
only allowed for agent-options. */
for (p = comma; *p; p++)
@@ -2227,7 +2371,8 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
case 'J': /* --dhcp-ignore */
case LOPT_NO_NAMES: /* --dhcp-ignore-names */
case LOPT_BROADCAST: /* --dhcp-broadcast */
- case '3': /* --bootp-dynamic */
+ case '3': /* --bootp-dynamic */
+ case LOPT_GEN_NAMES: /* --dhcp-generate-names */
{
struct dhcp_netid_list *new = opt_malloc(sizeof(struct dhcp_netid_list));
struct dhcp_netid *list = NULL;
@@ -2246,6 +2391,11 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
new->next = daemon->bootp_dynamic;
daemon->bootp_dynamic = new;
}
+ else if (option == LOPT_GEN_NAMES)
+ {
+ new->next = daemon->dhcp_gen_names;
+ daemon->dhcp_gen_names = new;
+ }
else
{
new->next = daemon->dhcp_ignore_names;
@@ -2257,7 +2407,7 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
comma = split(arg);
member->next = list;
list = member;
- if (strstr(arg, "net:") == arg)
+ if (is_tag_prefix(arg))
member->net = opt_string_alloc(arg+4);
else
member->net = opt_string_alloc(arg);
@@ -2267,6 +2417,19 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
new->list = list;
break;
}
+
+ case LOPT_PROXY: /* --dhcp-proxy */
+ daemon->override = 1;
+ while (arg) {
+ struct addr_list *new = opt_malloc(sizeof(struct addr_list));
+ comma = split(arg);
+ if ((new->addr.s_addr = inet_addr(arg)) == (in_addr_t)-1)
+ problem = _("bad dhcp-proxy address");
+ new->next = daemon->override_relays;
+ daemon->override_relays = new;
+ arg = comma;
+ }
+ break;
#endif
case 'V': /* --alias */
@@ -2547,9 +2710,8 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
static void one_file(char *file, int nest, int hard_opt)
{
volatile int lineno = 0;
- int i, option;
FILE *f;
- char *p, *arg, *start, *buff = daemon->namebuff;
+ char *buff = daemon->namebuff;
static struct fileread {
dev_t dev;
ino_t ino;
@@ -2595,9 +2757,9 @@ static void one_file(char *file, int nest, int hard_opt)
while (fgets(buff, MAXDNAME, f))
{
- int white;
- unsigned int lastquote;
- char *errmess;
+ int white, i, option; ;
+ char *errmess, *p, *arg, *start;
+ size_t len;
/* Memory allocation failure longjmps here if mem_recover == 1 */
if (hard_opt)
@@ -2612,12 +2774,12 @@ static void one_file(char *file, int nest, int hard_opt)
/* Implement quotes, inside quotes we allow \\ \" \n and \t
metacharacters get hidden also strip comments */
-
- for (white = 1, lastquote = 0, p = buff; *p; p++)
+ for (white = 1, p = buff; *p; p++)
{
if (*p == '"')
{
memmove(p, p+1, strlen(p+1)+1);
+
for(; *p && *p != '"'; p++)
{
if (*p == '\\' && strchr("\"tnebr\\", p[1]))
@@ -2636,40 +2798,51 @@ static void one_file(char *file, int nest, int hard_opt)
}
*p = hide_meta(*p);
}
- if (*p == '"')
- {
- memmove(p, p+1, strlen(p+1)+1);
- lastquote = p - buff;
- }
- else
+
+ if (*p == 0)
{
errmess = _("missing \"");
goto oops;
}
+
+ memmove(p, p+1, strlen(p+1)+1);
}
- if (white && *p == '#')
- {
- *p = 0;
- break;
+ if (isspace(*p))
+ {
+ *p = ' ';
+ white = 1;
}
- white = isspace((int)unhide_meta(*p));
+ else
+ {
+ if (white && *p == '#')
+ {
+ *p = 0;
+ break;
+ }
+ white = 0;
+ }
}
- /* fgets gets end of line char too. */
- while (strlen(buff) > lastquote && isspace((int)unhide_meta(buff[strlen(buff)-1])))
- buff[strlen(buff)-1] = 0;
-
- if (*buff == 0)
+
+ /* strip leading spaces */
+ for (start = buff; *start && *start == ' '; start++);
+
+ /* strip trailing spaces */
+ for (len = strlen(start); (len != 0) && (start[len-1] == ' '); len--);
+
+ if (len == 0)
continue;
-
+ else
+ start[len] = 0;
+
if (hard_opt != 0)
- arg = buff;
- else if ((p=strchr(buff, '=')))
+ arg = start;
+ else if ((p=strchr(start, '=')))
{
/* allow spaces around "=" */
- arg = p+1;
- for (; p >= buff && (isspace((int)*p) || *p == '='); p--)
+ for (arg = p+1; *arg == ' '; arg++);
+ for (; p >= start && (*p == ' ' || *p == '='); p--)
*p = 0;
}
else
@@ -2679,9 +2852,6 @@ static void one_file(char *file, int nest, int hard_opt)
option = hard_opt;
else
{
- /* skip leading space */
- for (start = buff; *start && isspace((int)*start); start++);
-
for (option = 0, i = 0; opts[i].name; i++)
if (strcmp(opts[i].name, start) == 0)
{
@@ -2698,12 +2868,7 @@ static void one_file(char *file, int nest, int hard_opt)
}
if (!errmess)
- {
- if (arg)
- for (; isspace((int)*arg); arg++);
-
- errmess = one_opt(option, arg, _("error"), nest + 1);
- }
+ errmess = one_opt(option, arg, _("error"), nest + 1);
if (errmess)
{
@@ -2716,7 +2881,7 @@ static void one_file(char *file, int nest, int hard_opt)
}
}
- mem_recover = 1;
+ mem_recover = 0;
fclose(f);
}
@@ -2735,16 +2900,24 @@ void reread_dhcp(void)
if (configs->flags & CONFIG_BANK)
{
struct hwaddr_config *mac, *tmp;
+ struct dhcp_netid_list *list, *tmplist;
for (mac = configs->hwaddr; mac; mac = tmp)
{
tmp = mac->next;
free(mac);
}
+
if (configs->flags & CONFIG_CLID)
free(configs->clid);
- if (configs->flags & CONFIG_NETID)
- free(configs->netid.net);
+
+ for (list = configs->netid; list; list = tmplist)
+ {
+ free(list->list);
+ tmplist = list->next;
+ free(list);
+ }
+
if (configs->flags & CONFIG_NAME)
free(configs->hostname);
diff --git a/src/rfc1035.c b/src/rfc1035.c
index ae645a8..3289bf3 100644
--- a/src/rfc1035.c
+++ b/src/rfc1035.c
@@ -513,26 +513,31 @@ unsigned char *find_pseudoheader(HEADER *header, size_t plen, size_t *len, unsi
/* is addr in the non-globally-routed IP space? */
-static int private_net(struct in_addr addr)
+static int private_net(struct in_addr addr, int ban_localhost)
{
in_addr_t ip_addr = ntohl(addr.s_addr);
return
- ((ip_addr & 0xFF000000) == 0x7F000000) /* 127.0.0.0/8 (loopback) */ ||
+ (((ip_addr & 0xFF000000) == 0x7F000000) && ban_localhost) /* 127.0.0.0/8 (loopback) */ ||
((ip_addr & 0xFFFF0000) == 0xC0A80000) /* 192.168.0.0/16 (private) */ ||
((ip_addr & 0xFF000000) == 0x0A000000) /* 10.0.0.0/8 (private) */ ||
((ip_addr & 0xFFF00000) == 0xAC100000) /* 172.16.0.0/12 (private) */ ||
((ip_addr & 0xFFFF0000) == 0xA9FE0000) /* 169.254.0.0/16 (zeroconf) */ ;
}
-static unsigned char *do_doctor(unsigned char *p, int count, HEADER *header, size_t qlen)
+static unsigned char *do_doctor(unsigned char *p, int count, HEADER *header, size_t qlen, char *name)
{
int i, qtype, qclass, rdlen;
unsigned long ttl;
for (i = count; i != 0; i--)
{
- if (!(p = skip_name(p, header, qlen, 10)))
+ if (name && (daemon->options & OPT_LOG))
+ {
+ if (!extract_name(header, qlen, &p, name, 1, 10))
+ return 0;
+ }
+ else if (!(p = skip_name(p, header, qlen, 10)))
return 0; /* bad packet */
GETSHORT(qtype, p);
@@ -540,15 +545,15 @@ static unsigned char *do_doctor(unsigned char *p, int count, HEADER *header, siz
GETLONG(ttl, p);
GETSHORT(rdlen, p);
- if ((qclass == C_IN) && (qtype == T_A))
+ if (qclass == C_IN && qtype == T_A)
{
struct doctor *doctor;
struct in_addr addr;
if (!CHECK_LEN(header, p, qlen, INADDRSZ))
return 0;
-
- /* alignment */
+
+ /* alignment */
memcpy(&addr, p, INADDRSZ);
for (doctor = daemon->doctors; doctor; doctor = doctor->next)
@@ -561,7 +566,7 @@ static unsigned char *do_doctor(unsigned char *p, int count, HEADER *header, siz
else if (ntohl(doctor->in.s_addr) > ntohl(addr.s_addr) ||
ntohl(doctor->end.s_addr) < ntohl(addr.s_addr))
continue;
-
+
addr.s_addr &= ~doctor->mask.s_addr;
addr.s_addr |= (doctor->out.s_addr & doctor->mask.s_addr);
/* Since we munged the data, the server it came from is no longer authoritative */
@@ -570,6 +575,30 @@ static unsigned char *do_doctor(unsigned char *p, int count, HEADER *header, siz
break;
}
}
+ else if (qtype == T_TXT && name && (daemon->options & OPT_LOG))
+ {
+ unsigned char *p1 = p;
+ if (!CHECK_LEN(header, p1, qlen, rdlen))
+ return 0;
+ while ((p1 - p) < rdlen)
+ {
+ unsigned int i, len = *p1;
+ unsigned char *p2 = p1;
+ /* make counted string zero-term and sanitise */
+ for (i = 0; i < len; i++)
+ if (isprint(*(p2+1)))
+ {
+ *p2 = *(p2+1);
+ p2++;
+ }
+ *p2 = 0;
+ my_syslog(LOG_DEBUG, "reply %s is %s", name, p1);
+ /* restore */
+ memmove(p1 + 1, p1, len);
+ *p1 = len;
+ p1 += len+1;
+ }
+ }
if (!ADD_RDLEN(header, p, qlen, rdlen))
return 0; /* bad packet */
@@ -578,7 +607,7 @@ static unsigned char *do_doctor(unsigned char *p, int count, HEADER *header, siz
return p;
}
-static int find_soa(HEADER *header, size_t qlen)
+static int find_soa(HEADER *header, size_t qlen, char *name)
{
unsigned char *p;
int qtype, qclass, rdlen;
@@ -587,7 +616,7 @@ static int find_soa(HEADER *header, size_t qlen)
/* first move to NS section and find TTL from any SOA section */
if (!(p = skip_questions(header, qlen)) ||
- !(p = do_doctor(p, ntohs(header->ancount), header, qlen)))
+ !(p = do_doctor(p, ntohs(header->ancount), header, qlen, name)))
return 0; /* bad packet */
for (i = ntohs(header->nscount); i != 0; i--)
@@ -623,7 +652,7 @@ static int find_soa(HEADER *header, size_t qlen)
}
/* rewrite addresses in additioal section too */
- if (!do_doctor(p, ntohs(header->arcount), header, qlen))
+ if (!do_doctor(p, ntohs(header->arcount), header, qlen, NULL))
return 0;
if (!found_soa)
@@ -635,8 +664,8 @@ static int find_soa(HEADER *header, size_t qlen)
/* Note that the following code can create CNAME chains that don't point to a real record,
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 parct of dns-rebinding attack. */
-int extract_addresses(HEADER *header, size_t qlen, char *name, time_t now)
+ 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)
{
unsigned char *p, *p1, *endrr, *namep;
int i, j, qtype, qclass, aqtype, aqclass, ardlen, res, searched_soa = 0;
@@ -645,11 +674,11 @@ int extract_addresses(HEADER *header, size_t qlen, char *name, time_t now)
cache_start_insert();
- /* find_soa is needed for dns_doctor side-effects, so don't call it lazily if there are any. */
- if (daemon->doctors)
+ /* 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))
{
searched_soa = 1;
- ttl = find_soa(header, qlen);
+ ttl = find_soa(header, qlen, name);
}
/* go through the questions. */
@@ -698,6 +727,11 @@ int extract_addresses(HEADER *header, size_t qlen, char *name, time_t now)
GETSHORT(aqtype, p1);
GETSHORT(aqclass, p1);
GETLONG(attl, p1);
+ if ((daemon->max_ttl != 0) && (attl > daemon->max_ttl) && !is_sign)
+ {
+ (p1) -= NS_INT32SZ;
+ PUTLONG(daemon->max_ttl, p1);
+ }
GETSHORT(ardlen, p1);
endrr = p1+ardlen;
@@ -732,7 +766,7 @@ int extract_addresses(HEADER *header, size_t qlen, char *name, time_t now)
if (!searched_soa)
{
searched_soa = 1;
- ttl = find_soa(header, qlen);
+ ttl = find_soa(header, qlen, NULL);
}
if (ttl)
cache_insert(NULL, &addr, now, ttl, name_encoding | F_REVERSE | F_NEG | flags);
@@ -773,6 +807,11 @@ int extract_addresses(HEADER *header, size_t qlen, char *name, time_t now)
GETSHORT(aqtype, p1);
GETSHORT(aqclass, p1);
GETLONG(attl, p1);
+ if ((daemon->max_ttl != 0) && (attl > daemon->max_ttl) && !is_sign)
+ {
+ (p1) -= NS_INT32SZ;
+ PUTLONG(daemon->max_ttl, p1);
+ }
GETSHORT(ardlen, p1);
endrr = p1+ardlen;
@@ -807,9 +846,9 @@ int extract_addresses(HEADER *header, size_t qlen, char *name, time_t now)
memcpy(&addr, p1, addrlen);
/* check for returned address in private space */
- if ((daemon->options & OPT_NO_REBIND) &&
+ if (check_rebind &&
(flags & F_IPV4) &&
- private_net(addr.addr.addr4))
+ private_net(addr.addr.addr4, !(daemon->options & OPT_LOCAL_REBIND)))
return 1;
newc = cache_insert(name, &addr, now, attl, flags | F_FORWARD);
@@ -833,7 +872,7 @@ int extract_addresses(HEADER *header, size_t qlen, char *name, time_t now)
if (!searched_soa)
{
searched_soa = 1;
- ttl = find_soa(header, qlen);
+ ttl = find_soa(header, qlen, NULL);
}
/* If there's no SOA to get the TTL from, but there is a CNAME
pointing at this, inherit its TTL */
@@ -1120,7 +1159,11 @@ static unsigned long crec_ttl(struct crec *crecp, time_t now)
if (crecp->flags & (F_IMMORTAL | F_DHCP))
return daemon->local_ttl;
- return crecp->ttd - now;
+ /* Return the Max TTL value if it is lower then the actual TTL */
+ if (daemon->max_ttl == 0 || ((unsigned)(crecp->ttd - now) < daemon->max_ttl))
+ return crecp->ttd - now;
+ else
+ return daemon->max_ttl;
}
@@ -1302,7 +1345,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) &&
- private_net(addr.addr.addr4))
+ private_net(addr.addr.addr4, 1))
{
/* if not in cache, enabled and private IPV4 address, return NXDOMAIN */
ans = 1;
diff --git a/src/rfc2131.c b/src/rfc2131.c
index ae7b212..2802ca1 100644
--- a/src/rfc2131.c
+++ b/src/rfc2131.c
@@ -116,11 +116,12 @@ static void do_options(struct dhcp_context *context,
struct in_addr subnet_addr,
unsigned char fqdn_flags,
int null_term, int pxearch,
- unsigned char *uuid);
+ unsigned char *uuid,
+ int vendor_class_len);
static void match_vendor_opts(unsigned char *opt, struct dhcp_opt *dopt);
-static void do_encap_opts(struct dhcp_opt *opts, int encap, int flag, struct dhcp_packet *mess, unsigned char *end, int null_term);
+static int do_encap_opts(struct dhcp_opt *opts, int encap, int flag, struct dhcp_packet *mess, unsigned char *end, int null_term);
static void pxe_misc(struct dhcp_packet *mess, unsigned char *end, unsigned char *uuid);
static int prune_vendor_opts(struct dhcp_netid *netid);
static struct dhcp_opt *pxe_opts(int pxe_arch, struct dhcp_netid *netid, struct in_addr local);
@@ -145,14 +146,14 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
char *message = NULL;
unsigned int time;
struct dhcp_config *config;
- struct dhcp_netid *netid;
+ struct dhcp_netid *netid, *tagif_netid;
struct in_addr subnet_addr, fallback, override;
unsigned short fuzz = 0;
unsigned int mess_type = 0;
unsigned char fqdn_flags = 0;
unsigned char *agent_id = NULL, *uuid = NULL;
unsigned char *emac = NULL;
- int emac_len = 0;
+ int vendor_class_len = 0, emac_len = 0;
struct dhcp_netid known_id, iface_id, cpewan_id;
struct dhcp_opt *o;
unsigned char pxe_uuid[17];
@@ -174,12 +175,14 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
/* check for DHCP rather than BOOTP */
if ((opt = option_find(mess, sz, OPTION_MESSAGE_TYPE, 1)))
{
- mess_type = option_uint(opt, 0, 1);
-
+ u32 cookie = htonl(DHCP_COOKIE);
+
/* only insist on a cookie for DHCP. */
- if (*((u32 *)&mess->options) != htonl(DHCP_COOKIE))
+ if (memcmp(mess->options, &cookie, sizeof(u32)) != 0)
return 0;
-
+
+ mess_type = option_uint(opt, 0, 1);
+
/* two things to note here: expand_buf may move the packet,
so reassign mess from daemon->packet. Also, the size
sent includes the IP and UDP headers, hence the magic "-28" */
@@ -278,7 +281,6 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
{
vendor->netid.next = netid;
netid = &vendor->netid;
- break;
}
}
}
@@ -388,10 +390,10 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
{
strcpy(daemon->namebuff, inet_ntoa(context_tmp->start));
if (context_tmp->flags & (CONTEXT_STATIC | CONTEXT_PROXY))
- my_syslog(MS_DHCP | LOG_INFO, _("%u Available DHCP subnet: %s/%s"),
+ my_syslog(MS_DHCP | LOG_INFO, _("%u available DHCP subnet: %s/%s"),
ntohl(mess->xid), daemon->namebuff, inet_ntoa(context_tmp->netmask));
else
- my_syslog(MS_DHCP | LOG_INFO, _("%u Available DHCP range: %s -- %s"),
+ my_syslog(MS_DHCP | LOG_INFO, _("%u available DHCP range: %s -- %s"),
ntohl(mess->xid), daemon->namebuff, inet_ntoa(context_tmp->end));
}
}
@@ -430,10 +432,15 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
domain = config->domain;
}
- if (have_config(config, CONFIG_NETID))
+ if (config)
{
- config->netid.next = netid;
- netid = &config->netid;
+ struct dhcp_netid_list *list;
+
+ for (list = config->netid; list; list = list->next)
+ {
+ list->list->next = netid;
+ netid = list->list;
+ }
}
/* Match incoming filename field as a netid. */
@@ -452,8 +459,10 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
bootp_id.next = netid;
netid = &bootp_id;
+ tagif_netid = run_tag_if(netid);
+
for (id_list = daemon->dhcp_ignore; id_list; id_list = id_list->next)
- if (match_netid(id_list->list, netid, 0))
+ if (match_netid(id_list->list, tagif_netid, 0))
message = _("ignored");
if (!message)
@@ -474,7 +483,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
else
{
if (!(lease = lease_find_by_client(mess->chaddr, mess->hlen, mess->htype, NULL, 0)) ||
- !address_available(context, lease->addr, netid))
+ !address_available(context, lease->addr, tagif_netid))
{
if (lease)
{
@@ -482,7 +491,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
lease_prune(lease, now);
lease = NULL;
}
- if (!address_allocate(context, &mess->yiaddr, mess->chaddr, mess->hlen, netid, now))
+ if (!address_allocate(context, &mess->yiaddr, mess->chaddr, mess->hlen, tagif_netid, now))
message = _("no address available");
}
else
@@ -494,13 +503,14 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
else if (context->netid.net)
{
context->netid.next = netid;
- netid = &context->netid;
- }
-
+ netid = &context->netid;
+ tagif_netid = run_tag_if(netid);
+ }
+
if (!message && !nailed)
{
for (id_list = daemon->bootp_dynamic; id_list; id_list = id_list->next)
- if ((!id_list->list) || match_netid(id_list->list, netid, 0))
+ if ((!id_list->list) || match_netid(id_list->list, tagif_netid, 0))
break;
if (!id_list)
message = _("no address configured");
@@ -526,13 +536,13 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
clear_packet(mess, end);
do_options(context, mess, end, NULL, hostname, get_domain(mess->yiaddr),
- domain, netid, subnet_addr, 0, 0, 0, NULL);
+ domain, tagif_netid, subnet_addr, 0, 0, 0, NULL, 0);
}
}
log_packet("BOOTP", logaddr, mess->chaddr, mess->hlen, iface_name, message, mess->xid);
- return message ? 0 : dhcp_packet_size(mess, netid, agent_id, real_end);
+ return message ? 0 : dhcp_packet_size(mess, tagif_netid, agent_id, real_end);
}
if ((opt = option_find(mess, sz, OPTION_CLIENT_FQDN, 4)))
@@ -632,10 +642,15 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
}
}
- if (have_config(config, CONFIG_NETID))
+ if (config)
{
- config->netid.next = netid;
- netid = &config->netid;
+ struct dhcp_netid_list *list;
+
+ for (list = config->netid; list; list = list->next)
+ {
+ list->list->next = netid;
+ netid = list->list;
+ }
}
/* dhcp-match. If we have hex-and-wildcards, look for a left-anchored match.
@@ -732,22 +747,48 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
}
}
- /* mark vendor-encapsulated options which match the client-supplied vendor class */
- match_vendor_opts(option_find(mess, sz, OPTION_VENDOR_ID, 1), daemon->dhcp_opts);
-
+ /* mark vendor-encapsulated options which match the client-supplied vendor class,
+ save client-supplied vendor class */
+ if ((opt = option_find(mess, sz, OPTION_VENDOR_ID, 1)))
+ {
+ memcpy(daemon->dhcp_buff3, option_ptr(opt, 0), option_len(opt));
+ vendor_class_len = option_len(opt);
+ }
+ match_vendor_opts(opt, daemon->dhcp_opts);
+
if (daemon->options & OPT_LOG_OPTS)
{
- if (sanitise(option_find(mess, sz, OPTION_VENDOR_ID, 1), daemon->namebuff))
- my_syslog(MS_DHCP | LOG_INFO, _("%u Vendor class: %s"), ntohl(mess->xid), daemon->namebuff);
+ if (sanitise(opt, daemon->namebuff))
+ my_syslog(MS_DHCP | LOG_INFO, _("%u vendor class: %s"), ntohl(mess->xid), daemon->namebuff);
if (sanitise(option_find(mess, sz, OPTION_USER_CLASS, 1), daemon->namebuff))
- my_syslog(MS_DHCP | LOG_INFO, _("%u User class: %s"), ntohl(mess->xid), daemon->namebuff);
+ my_syslog(MS_DHCP | LOG_INFO, _("%u user class: %s"), ntohl(mess->xid), daemon->namebuff);
}
+ tagif_netid = run_tag_if(netid);
+
/* if all the netids in the ignore list are present, ignore this client */
for (id_list = daemon->dhcp_ignore; id_list; id_list = id_list->next)
- if (match_netid(id_list->list, netid, 0))
+ if (match_netid(id_list->list, tagif_netid, 0))
ignore = 1;
-
+
+ /* If configured, we can override the server-id to be the address of the relay,
+ so that all traffic goes via the relay and can pick up agent-id info. This can be
+ configured for all relays, or by address. */
+ if (daemon->override && mess->giaddr.s_addr != 0 && override.s_addr == 0)
+ {
+ if (!daemon->override_relays)
+ override = mess->giaddr;
+ else
+ {
+ struct addr_list *l;
+ for (l = daemon->override_relays; l; l = l->next)
+ if (l->addr.s_addr == mess->giaddr.s_addr)
+ break;
+ if (l)
+ override = mess->giaddr;
+ }
+ }
+
/* Can have setting to ignore the client ID for a particular MAC address or hostname */
if (have_config(config, CONFIG_NOCLID))
clid = NULL;
@@ -806,7 +847,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
option_put(mess, end, OPTION_SERVER_IDENTIFIER, INADDRSZ, htonl(context->local.s_addr));
pxe_misc(mess, end, uuid);
- prune_vendor_opts(netid);
+ prune_vendor_opts(tagif_netid);
opt71.val = save71;
opt71.opt = SUBOPT_PXE_BOOT_ITEM;
opt71.len = 4;
@@ -816,7 +857,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
do_encap_opts(&opt71, OPTION_VENDOR_CLASS_OPT, DHOPT_VENDOR_MATCH, mess, end, 0);
log_packet("PXE", &mess->yiaddr, emac, emac_len, iface_name, (char *)mess->file, mess->xid);
- return dhcp_packet_size(mess, netid, agent_id, real_end);
+ return dhcp_packet_size(mess, tagif_netid, agent_id, real_end);
}
if ((opt = option_find(mess, sz, OPTION_ARCH, 2)))
@@ -827,7 +868,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
if ((mess_type == DHCPDISCOVER || (pxe && mess_type == DHCPREQUEST)) &&
(context->flags & CONTEXT_PROXY))
{
- struct dhcp_boot *boot = find_boot(netid);
+ struct dhcp_boot *boot = find_boot(tagif_netid);
mess->yiaddr.s_addr = 0;
if (mess_type == DHCPDISCOVER || mess->ciaddr.s_addr == 0)
@@ -853,11 +894,11 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
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(netid);
- do_encap_opts(pxe_opts(pxearch, netid, context->local), OPTION_VENDOR_CLASS_OPT, DHOPT_VENDOR_MATCH, mess, end, 0);
+ 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, netid, agent_id, real_end);
+ return ignore ? 0 : dhcp_packet_size(mess, tagif_netid, agent_id, real_end);
}
}
}
@@ -908,7 +949,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
return 0;
case DHCPRELEASE:
- if (!(context = narrow_context(context, mess->ciaddr, netid)) ||
+ if (!(context = narrow_context(context, mess->ciaddr, tagif_netid)) ||
!(opt = option_find(mess, sz, OPTION_SERVER_IDENTIFIER, INADDRSZ)) ||
option_addr(opt).s_addr != server_id(context, override, fallback).s_addr)
return 0;
@@ -970,21 +1011,21 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
if (conf.s_addr)
mess->yiaddr = conf;
else if (lease &&
- address_available(context, lease->addr, netid) &&
+ address_available(context, lease->addr, tagif_netid) &&
!config_find_by_address(daemon->dhcp_conf, lease->addr))
mess->yiaddr = lease->addr;
- else if (opt && address_available(context, addr, netid) && !lease_find_by_addr(addr) &&
+ else if (opt && address_available(context, addr, tagif_netid) && !lease_find_by_addr(addr) &&
!config_find_by_address(daemon->dhcp_conf, addr))
mess->yiaddr = addr;
else if (emac_len == 0)
message = _("no unique-id");
- else if (!address_allocate(context, &mess->yiaddr, emac, emac_len, netid, now))
+ else if (!address_allocate(context, &mess->yiaddr, emac, emac_len, tagif_netid, now))
message = _("no address available");
}
log_packet("DHCPDISCOVER", opt ? option_ptr(opt, 0) : NULL, emac, emac_len, iface_name, message, mess->xid);
- if (message || !(context = narrow_context(context, mess->yiaddr, netid)))
+ if (message || !(context = narrow_context(context, mess->yiaddr, tagif_netid)))
return 0;
log_packet("DHCPOFFER" , &mess->yiaddr, emac, emac_len, iface_name, NULL, mess->xid);
@@ -993,6 +1034,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
{
context->netid.next = netid;
netid = &context->netid;
+ tagif_netid = run_tag_if(netid);
}
time = calc_time(context, config, option_find(mess, sz, OPTION_LEASE_TIME, 4));
@@ -1007,9 +1049,9 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
option_put(mess, end, OPTION_T2, 4, (time*7)/8);
}
do_options(context, mess, end, req_options, offer_hostname, get_domain(mess->yiaddr),
- domain, netid, subnet_addr, fqdn_flags, borken_opt, pxearch, uuid);
+ domain, tagif_netid, subnet_addr, fqdn_flags, borken_opt, pxearch, uuid, vendor_class_len);
- return dhcp_packet_size(mess, netid, agent_id, real_end);
+ return dhcp_packet_size(mess, tagif_netid, agent_id, real_end);
case DHCPREQUEST:
if (ignore || have_config(config, CONFIG_DISABLE))
@@ -1063,12 +1105,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
return 0;
if (lease && lease->addr.s_addr != mess->yiaddr.s_addr)
- {
- message = _("wrong address");
- /* avoid loops when client brain-dead */
- lease_prune(lease, now);
- lease = NULL;
- }
+ message = _("wrong address");
}
}
else
@@ -1085,6 +1122,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
/* ensure we broadcast NAK */
unicast_dest = 0;
}
+
/* desynchronise renewals */
fuzz = rand16();
mess->yiaddr = mess->ciaddr;
@@ -1102,7 +1140,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
if (context->router.s_addr == config->addr.s_addr)
break;
- if (!(context = narrow_context(context, mess->yiaddr, netid)))
+ if (!(context = narrow_context(context, mess->yiaddr, tagif_netid)))
{
/* If a machine moves networks whilst it has a lease, we catch that here. */
message = _("wrong network");
@@ -1111,7 +1149,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
}
/* Check for renewal of a lease which is outside the allowed range. */
- else if (!address_available(context, mess->yiaddr, netid) &&
+ else if (!address_available(context, mess->yiaddr, tagif_netid) &&
(!have_config(config, CONFIG_ADDR) || config->addr.s_addr != mess->yiaddr.s_addr))
message = _("address not available");
@@ -1184,64 +1222,84 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
{
context->netid.next = netid;
netid = &context->netid;
+ tagif_netid = run_tag_if(netid);
}
-
+
#ifdef HAVE_SCRIPT
- if (do_classes && daemon->lease_change_command)
- {
- struct dhcp_netid *n;
-
- if (mess->giaddr.s_addr)
- lease->giaddr = mess->giaddr;
-
- lease->changed = 1;
- free(lease->extradata);
- lease->extradata_size = lease->extradata_len = 0;
-
- add_extradata_opt(lease, option_find(mess, sz, OPTION_VENDOR_ID, 1));
- add_extradata_opt(lease, option_find(mess, sz, OPTION_HOSTNAME, 1));
- add_extradata_opt(lease, oui);
- add_extradata_opt(lease, serial);
- add_extradata_opt(lease, class);
-
- /* space-concat tag set */
- if (!netid)
- add_extradata_opt(lease, NULL);
- else
- for (n = netid; n; n = n->next)
- add_extradata_data(lease, (unsigned char *)n->net, strlen(n->net), n->next ? ' ' : 0);
-
- if ((opt = option_find(mess, sz, OPTION_USER_CLASS, 1)))
- {
- int len = option_len(opt);
- unsigned char *ucp = option_ptr(opt, 0);
- /* If the user-class option started as counted strings, the first byte will be zero. */
- if (len != 0 && ucp[0] == 0)
- ucp++, len--;
- add_extradata_data(lease, ucp, len, 0);
- }
- }
+ if (do_classes && daemon->lease_change_command)
+ {
+ struct dhcp_netid *n;
+
+ if (mess->giaddr.s_addr)
+ lease->giaddr = mess->giaddr;
+
+ lease->changed = 1;
+ free(lease->extradata);
+ lease->extradata_size = lease->extradata_len = 0;
+
+ add_extradata_opt(lease, option_find(mess, sz, OPTION_VENDOR_ID, 1));
+ add_extradata_opt(lease, option_find(mess, sz, OPTION_HOSTNAME, 1));
+ add_extradata_opt(lease, oui);
+ add_extradata_opt(lease, serial);
+ add_extradata_opt(lease, class);
+
+ /* space-concat tag set */
+ if (!tagif_netid)
+ add_extradata_opt(lease, NULL);
+ else
+ for (n = tagif_netid; n; n = n->next)
+ add_extradata_data(lease, (unsigned char *)n->net, strlen(n->net), n->next ? ' ' : 0);
+
+ if ((opt = option_find(mess, sz, OPTION_USER_CLASS, 1)))
+ {
+ int len = option_len(opt);
+ unsigned char *ucp = option_ptr(opt, 0);
+ /* If the user-class option started as counted strings, the first byte will be zero. */
+ if (len != 0 && ucp[0] == 0)
+ ucp++, len--;
+ add_extradata_data(lease, ucp, len, 0);
+ }
+ }
#endif
-
-
- if (!hostname_auth && (client_hostname = host_from_dns(mess->yiaddr)))
- {
+
+ if (!hostname_auth && (client_hostname = host_from_dns(mess->yiaddr)))
+ {
+ domain = get_domain(mess->yiaddr);
hostname = client_hostname;
hostname_auth = 1;
}
-
+
time = calc_time(context, config, option_find(mess, sz, OPTION_LEASE_TIME, 4));
lease_set_hwaddr(lease, mess->chaddr, clid, mess->hlen, mess->htype, clid_len);
-
+
/* if all the netids in the ignore_name list are present, ignore client-supplied name */
if (!hostname_auth)
{
for (id_list = daemon->dhcp_ignore_names; id_list; id_list = id_list->next)
- if ((!id_list->list) || match_netid(id_list->list, netid, 0))
+ if ((!id_list->list) || match_netid(id_list->list, tagif_netid, 0))
break;
if (id_list)
hostname = NULL;
}
+
+ /* Last ditch, if configured, generate hostname from mac address */
+ if (!hostname && emac_len != 0)
+ {
+ for (id_list = daemon->dhcp_gen_names; id_list; id_list = id_list->next)
+ if ((!id_list->list) || match_netid(id_list->list, tagif_netid, 0))
+ break;
+ if (id_list)
+ {
+ int i;
+
+ hostname = daemon->dhcp_buff;
+ /* buffer is 256 bytes, 3 bytes per octet */
+ for (i = 0; (i < emac_len) && (i < 80); i++)
+ hostname += sprintf(hostname, "%.2x%s", emac[i], (i == emac_len - 1) ? "" : "-");
+ hostname = daemon->dhcp_buff;
+ }
+ }
+
if (hostname)
lease_set_hostname(lease, hostname, hostname_auth);
@@ -1267,10 +1325,10 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
option_put(mess, end, OPTION_T2, 4, ((time/8)*7) - fuzz);
}
do_options(context, mess, end, req_options, hostname, get_domain(mess->yiaddr),
- domain, netid, subnet_addr, fqdn_flags, borken_opt, pxearch, uuid);
+ domain, tagif_netid, subnet_addr, fqdn_flags, borken_opt, pxearch, uuid, vendor_class_len);
}
- return dhcp_packet_size(mess, netid, agent_id, real_end);
+ return dhcp_packet_size(mess, tagif_netid, agent_id, real_end);
case DHCPINFORM:
if (ignore || have_config(config, CONFIG_DISABLE))
@@ -1282,7 +1340,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
return 0;
/* For DHCPINFORM only, cope without a valid context */
- context = narrow_context(context, mess->ciaddr, netid);
+ context = narrow_context(context, mess->ciaddr, tagif_netid);
/* Find a least based on IP address if we didn't
get one from MAC address/client-d */
@@ -1291,8 +1349,8 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
lease->hostname)
hostname = lease->hostname;
- if (!hostname)
- hostname = host_from_dns(mess->ciaddr);
+ if (!hostname && (hostname = host_from_dns(mess->ciaddr)))
+ domain = get_domain(mess->ciaddr);
log_packet("DHCPACK", &mess->ciaddr, emac, emac_len, iface_name, hostname, mess->xid);
@@ -1300,6 +1358,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
{
context->netid.next = netid;
netid = &context->netid;
+ tagif_netid = run_tag_if(netid);
}
if (lease)
@@ -1325,10 +1384,10 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
}
do_options(context, mess, end, req_options, hostname, get_domain(mess->ciaddr),
- domain, netid, subnet_addr, fqdn_flags, borken_opt, pxearch, uuid);
+ domain, tagif_netid, subnet_addr, fqdn_flags, borken_opt, pxearch, uuid, vendor_class_len);
*is_inform = 1; /* handle reply differently */
- return dhcp_packet_size(mess, netid, agent_id, real_end);
+ return dhcp_packet_size(mess, tagif_netid, agent_id, real_end);
}
return 0;
@@ -1722,23 +1781,28 @@ static size_t dhcp_packet_size(struct dhcp_packet *mess, struct dhcp_netid *neti
*p++ = OPTION_END;
+ for (id_list = daemon->force_broadcast; id_list; id_list = id_list->next)
+ if ((!id_list->list) || match_netid(id_list->list, netid, 0))
+ break;
+ if (id_list)
+ mess->flags |= htons(0x8000); /* force broadcast */
+
if (daemon->options & 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));
+ if ((mess->flags & htons(0x8000)) && mess->ciaddr.s_addr == 0)
+ my_syslog(MS_DHCP | LOG_INFO, _("%u broadcast response"), ntohl(mess->xid));
+
log_options(&mess->options[0] + sizeof(u32), mess->xid);
}
- for (id_list = daemon->force_broadcast; id_list; id_list = id_list->next)
- if (match_netid(id_list->list, netid, 0))
- mess->flags |= htons(0x8000); /* force broadcast */
-
ret = (size_t)(p - (unsigned char *)mess);
if (ret < MIN_PACKETSZ)
ret = MIN_PACKETSZ;
-
+
return ret;
}
@@ -1877,10 +1941,16 @@ static struct dhcp_opt *option_find2(struct dhcp_netid *netid, struct dhcp_opt *
struct dhcp_opt *tmp;
for (tmp = opts; tmp; tmp = tmp->next)
if (tmp->opt == opt && !(tmp->flags & (DHOPT_ENCAPSULATE | DHOPT_VENDOR | DHOPT_RFC3925)))
- if (match_netid(tmp->netid, netid, netid ? 0 : 1))
+ if (match_netid(tmp->netid, netid, 0))
return tmp;
-
- return netid ? option_find2(NULL, opts, opt) : NULL;
+
+ /* No match, look for one without a netid */
+ for (tmp = opts; tmp; tmp = tmp->next)
+ if (tmp->opt == opt && !(tmp->flags & (DHOPT_ENCAPSULATE | DHOPT_VENDOR | DHOPT_RFC3925)))
+ if (match_netid(tmp->netid, netid, 1))
+ return tmp;
+
+ return NULL;
}
/* mark vendor-encapsulated options which match the client-supplied or
@@ -1905,10 +1975,10 @@ static void match_vendor_opts(unsigned char *opt, struct dhcp_opt *dopt)
}
}
-static void do_encap_opts(struct dhcp_opt *opt, int encap, int flag,
- struct dhcp_packet *mess, unsigned char *end, int null_term)
+static int do_encap_opts(struct dhcp_opt *opt, int encap, int flag,
+ struct dhcp_packet *mess, unsigned char *end, int null_term)
{
- int len, enc_len;
+ int len, enc_len, ret = 0;
struct dhcp_opt *start;
unsigned char *p;
@@ -1917,6 +1987,7 @@ static void do_encap_opts(struct dhcp_opt *opt, int encap, int flag,
if (opt->flags & flag)
{
int new = do_opt(opt, NULL, NULL, null_term) + 2;
+ ret = 1;
if (enc_len + new <= 255)
enc_len += new;
else
@@ -1948,6 +2019,8 @@ static void do_encap_opts(struct dhcp_opt *opt, int encap, int flag,
}
*p = OPTION_END;
}
+
+ return ret;
}
static void pxe_misc(struct dhcp_packet *mess, unsigned char *end, unsigned char *uuid)
@@ -2009,7 +2082,7 @@ static struct dhcp_opt *pxe_opts(int pxe_arch, struct dhcp_netid *netid, struct
/* create the data for the PXE_MENU and PXE_SERVERS options. */
p = (unsigned char *)daemon->dhcp_buff;
- q = (unsigned char *)daemon->dhcp_buff2;
+ q = (unsigned char *)daemon->dhcp_buff3;
for (i = 0, service = daemon->pxe_services; service; service = service->next)
if (pxe_arch == service->CSA && match_netid(service->netid, netid, 1))
@@ -2037,7 +2110,7 @@ static struct dhcp_opt *pxe_opts(int pxe_arch, struct dhcp_netid *netid, struct
if (boot_server.s_addr != 0)
{
- if (q - (unsigned char *)daemon->dhcp_buff2 + 3 + INADDRSZ >= 253)
+ if (q - (unsigned char *)daemon->dhcp_buff3 + 3 + INADDRSZ >= 253)
goto toobig;
/* Boot service with known address - give it */
@@ -2066,11 +2139,11 @@ static struct dhcp_opt *pxe_opts(int pxe_arch, struct dhcp_netid *netid, struct
ret->val = (unsigned char *)daemon->dhcp_buff;
ret->opt = SUBOPT_PXE_MENU;
- if (q - (unsigned char *)daemon->dhcp_buff2 != 0)
+ if (q - (unsigned char *)daemon->dhcp_buff3 != 0)
{
ret = &fake_opts[j--];
- ret->len = q - (unsigned char *)daemon->dhcp_buff2;
- ret->val = (unsigned char *)daemon->dhcp_buff2;
+ ret->len = q - (unsigned char *)daemon->dhcp_buff3;
+ ret->val = (unsigned char *)daemon->dhcp_buff3;
ret->opt = SUBOPT_PXE_SERVERS;
}
}
@@ -2130,7 +2203,8 @@ static void do_options(struct dhcp_context *context,
struct in_addr subnet_addr,
unsigned char fqdn_flags,
int null_term, int pxe_arch,
- unsigned char *uuid)
+ unsigned char *uuid,
+ int vendor_class_len)
{
struct dhcp_opt *opt, *config_opts = daemon->dhcp_opts;
struct dhcp_boot *boot;
@@ -2138,6 +2212,7 @@ static void do_options(struct dhcp_context *context,
int i, len, force_encap = 0;
unsigned char f0 = 0, s0 = 0;
int done_file = 0, done_server = 0;
+ int done_vendor_class = 0;
if (config_domain && (!domain || !hostname_isequal(domain, config_domain)))
my_syslog(MS_DHCP | LOG_WARNING, _("Ignoring domain %s for DHCP host name %s"), config_domain, hostname);
@@ -2203,7 +2278,7 @@ static void do_options(struct dhcp_context *context,
as an internal way to specify siaddr without using dhcp-boot, for use in
dhcp-optsfile. */
{
- if ((!req_options || !in_list(req_options, OPTION_FILENAME)) && mess->file[0] == 0 &&
+ if ((!req_options || !in_list(req_options, OPTION_FILENAME)) &&
(opt = option_find2(netid, config_opts, OPTION_FILENAME)) && !(opt->flags & DHOPT_FORCE))
{
strncpy((char *)mess->file, (char *)opt->val, sizeof(mess->file)-1);
@@ -2373,7 +2448,10 @@ static void do_options(struct dhcp_context *context,
/* If we send a vendor-id, revisit which vendor-ops we consider
it appropriate to send. */
if (optno == OPTION_VENDOR_ID)
- match_vendor_opts(p - 2, config_opts);
+ {
+ match_vendor_opts(p - 2, config_opts);
+ done_vendor_class = 1;
+ }
}
}
@@ -2442,20 +2520,22 @@ static void do_options(struct dhcp_context *context,
}
}
- /* Must precede pxe_opts, since it overwrites req_options */
force_encap = prune_vendor_opts(netid);
- if (in_list(req_options, OPTION_VENDOR_CLASS_OPT))
- force_encap = 1;
-
+
if (context && pxe_arch != -1)
{
pxe_misc(mess, end, uuid);
config_opts = pxe_opts(pxe_arch, netid, context->local);
}
- if (force_encap)
- do_encap_opts(config_opts, OPTION_VENDOR_CLASS_OPT, DHOPT_VENDOR_MATCH, mess, end, null_term);
-
+ if ((force_encap || in_list(req_options, OPTION_VENDOR_CLASS_OPT)) &&
+ do_encap_opts(config_opts, OPTION_VENDOR_CLASS_OPT, DHOPT_VENDOR_MATCH, mess, end, null_term) &&
+ pxe_arch == -1 && !done_vendor_class && vendor_class_len != 0 &&
+ (p = free_space(mess, end, OPTION_VENDOR_ID, vendor_class_len)))
+ /* If we send vendor encapsulated options, and haven't already sent option 60,
+ echo back the value we got from the client. */
+ memcpy(p, daemon->dhcp_buff3, vendor_class_len);
+
/* restore BOOTP anti-overload hack */
if (!req_options || (daemon->options & OPT_NO_OVERRIDE))
{
diff --git a/src/tftp.c b/src/tftp.c
index ae81a0e..1f33eef 100644
--- a/src/tftp.c
+++ b/src/tftp.c
@@ -18,7 +18,7 @@
#ifdef HAVE_TFTP
-static struct tftp_file *check_tftp_fileperm(ssize_t *len);
+static struct tftp_file *check_tftp_fileperm(ssize_t *len, char *prefix, int special);
static void free_transfer(struct tftp_transfer *transfer);
static ssize_t tftp_err(int err, char *packet, char *mess, char *file);
static ssize_t tftp_err_oops(char *packet, char *file);
@@ -47,14 +47,21 @@ void tftp_request(struct listener *listen, time_t now)
struct msghdr msg;
struct iovec iov;
struct ifreq ifr;
- int is_err = 1, if_index = 0, mtu = 0;
+ int is_err = 1, if_index = 0, mtu = 0, special = 0;
+#ifdef HAVE_DHCP
struct iname *tmp;
+#endif
struct tftp_transfer *transfer;
int port = daemon->start_tftp_port; /* may be zero to use ephemeral port */
#if defined(IP_MTU_DISCOVER) && defined(IP_PMTUDISC_DONT)
int mtuflag = IP_PMTUDISC_DONT;
#endif
-
+ char namebuff[IF_NAMESIZE];
+ char *name;
+ char *prefix = daemon->tftp_prefix;
+ struct tftp_prefix *pref;
+ struct interface_list *ir;
+
union {
struct cmsghdr align; /* this ensures alignment */
#if defined(HAVE_LINUX_NETWORK)
@@ -87,54 +94,101 @@ void tftp_request(struct listener *listen, time_t now)
{
addr = listen->iface->addr.in;
mtu = listen->iface->mtu;
+ name = listen->iface->name;
}
else
{
- char name[IF_NAMESIZE];
struct cmsghdr *cmptr;
-
+ int check;
+ struct interface_list *ir;
+
addr.sin_addr.s_addr = 0;
#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)
{
- addr.sin_addr = ((struct in_pktinfo *)CMSG_DATA(cmptr))->ipi_spec_dst;
- if_index = ((struct in_pktinfo *)CMSG_DATA(cmptr))->ipi_ifindex;
+ union {
+ unsigned char *c;
+ struct in_pktinfo *p;
+ } p;
+ p.c = CMSG_DATA(cmptr);
+ addr.sin_addr = p.p->ipi_spec_dst;
+ if_index = p.p->ipi_ifindex;
}
#elif defined(HAVE_SOLARIS_NETWORK)
for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, cmptr))
- if (cmptr->cmsg_level == IPPROTO_IP && cmptr->cmsg_type == IP_RECVDSTADDR)
- addr.sin_addr = *((struct in_addr *)CMSG_DATA(cmptr));
- else if (cmptr->cmsg_level == IPPROTO_IP && cmptr->cmsg_type == IP_RECVIF)
- if_index = *((unsigned int *)CMSG_DATA(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))
- if (cmptr->cmsg_level == IPPROTO_IP && cmptr->cmsg_type == IP_RECVDSTADDR)
- addr.sin_addr = *((struct in_addr *)CMSG_DATA(cmptr));
- else if (cmptr->cmsg_level == IPPROTO_IP && cmptr->cmsg_type == IP_RECVIF)
- if_index = ((struct sockaddr_dl *)CMSG_DATA(cmptr))->sdl_index;
-
+ {
+ 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;
+ }
+
#endif
- if (!indextoname(listen->tftpfd, if_index, name) ||
- addr.sin_addr.s_addr == 0 ||
- !iface_check(AF_INET, (struct all_addr *)&addr.sin_addr, name, &if_index))
+ if (!indextoname(listen->tftpfd, if_index, namebuff) ||
+ addr.sin_addr.s_addr == 0)
return;
-
- /* allowed interfaces are the same as for DHCP */
- for (tmp = daemon->dhcp_except; tmp; tmp = tmp->next)
- if (tmp->name && (strcmp(tmp->name, name) == 0))
- return;
-
+
+ name = namebuff;
+ check = iface_check(AF_INET, (struct all_addr *)&addr.sin_addr, name, &if_index);
+
+ /* wierd TFTP service override */
+ for (ir = daemon->tftp_interfaces; ir; ir = ir->next)
+ if (strcmp(ir->interface, name) == 0)
+ break;
+
+ if (!ir)
+ {
+ if (!daemon->tftp_unlimited || !check)
+ return;
+
+#ifdef HAVE_DHCP
+ /* allowed interfaces are the same as for DHCP */
+ for (tmp = daemon->dhcp_except; tmp; tmp = tmp->next)
+ if (tmp->name && (strcmp(tmp->name, name) == 0))
+ return;
+#endif
+ }
+
strncpy(ifr.ifr_name, name, IF_NAMESIZE);
if (ioctl(listen->tftpfd, SIOCGIFMTU, &ifr) != -1)
mtu = ifr.ifr_mtu;
}
+ /* check for per-interface prefix */
+ for (pref = daemon->if_prefix; pref; pref = pref->next)
+ if (strcmp(pref->interface, name) == 0)
+ prefix = pref->prefix;
+
+ /* wierd TFTP interfaces disable special options. */
+ for (ir = daemon->tftp_interfaces; ir; ir = ir->next)
+ if (strcmp(ir->interface, name) == 0)
+ special = 1;
+
addr.sin_port = htons(port);
addr.sin_family = AF_INET;
#ifdef HAVE_SOCKADDR_SA_LEN
@@ -202,7 +256,7 @@ void tftp_request(struct listener *listen, time_t now)
if (strcasecmp(opt, "blksize") == 0)
{
if ((opt = next(&p, end)) &&
- !(daemon->options & OPT_TFTP_NOBLOCK))
+ (special || !(daemon->options & OPT_TFTP_NOBLOCK)))
{
transfer->blocksize = atoi(opt);
if (transfer->blocksize < 1)
@@ -228,15 +282,15 @@ void tftp_request(struct listener *listen, time_t now)
*p = '/';
strcpy(daemon->namebuff, "/");
- if (daemon->tftp_prefix)
+ if (prefix)
{
- if (daemon->tftp_prefix[0] == '/')
+ if (prefix[0] == '/')
daemon->namebuff[0] = 0;
- strncat(daemon->namebuff, daemon->tftp_prefix, (MAXDNAME-1) - strlen(daemon->namebuff));
- if (daemon->tftp_prefix[strlen(daemon->tftp_prefix)-1] != '/')
+ strncat(daemon->namebuff, prefix, (MAXDNAME-1) - strlen(daemon->namebuff));
+ if (prefix[strlen(prefix)-1] != '/')
strncat(daemon->namebuff, "/", (MAXDNAME-1) - strlen(daemon->namebuff));
- if (daemon->options & OPT_TFTP_APREF)
+ if (!special && (daemon->options & OPT_TFTP_APREF))
{
size_t oldlen = strlen(daemon->namebuff);
struct stat statbuf;
@@ -263,7 +317,7 @@ void tftp_request(struct listener *listen, time_t now)
strncat(daemon->namebuff, filename, (MAXDNAME-1) - strlen(daemon->namebuff));
/* check permissions and open file */
- if ((transfer->file = check_tftp_fileperm(&len)))
+ if ((transfer->file = check_tftp_fileperm(&len, prefix, special)))
{
if ((len = get_block(packet, transfer)) == -1)
len = tftp_err_oops(packet, daemon->namebuff);
@@ -285,7 +339,7 @@ void tftp_request(struct listener *listen, time_t now)
}
}
-static struct tftp_file *check_tftp_fileperm(ssize_t *len)
+static struct tftp_file *check_tftp_fileperm(ssize_t *len, char *prefix, int special)
{
char *packet = daemon->packet, *namebuff = daemon->namebuff;
struct tftp_file *file;
@@ -295,7 +349,7 @@ static struct tftp_file *check_tftp_fileperm(ssize_t *len)
int fd = -1;
/* trick to ban moving out of the subtree */
- if (daemon->tftp_prefix && strstr(namebuff, "/../"))
+ if (prefix && strstr(namebuff, "/../"))
goto perm;
if ((fd = open(namebuff, O_RDONLY)) == -1)
@@ -322,7 +376,7 @@ static struct tftp_file *check_tftp_fileperm(ssize_t *len)
goto perm;
}
/* in secure mode, must be owned by user running dnsmasq */
- else if ((daemon->options & OPT_TFTP_SECURE) && uid != statbuf.st_uid)
+ else if (!special && (daemon->options & OPT_TFTP_SECURE) && uid != statbuf.st_uid)
goto perm;
/* If we're doing many tranfers from the same file, only