summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Kelley <simon@thekelleys.org.uk>2007-01-21 20:01:28 +0000
committerSimon Kelley <simon@thekelleys.org.uk>2012-01-05 17:31:13 +0000
commit832af0bafb81e7427b062f73d0e7ece21c77a530 (patch)
treeb3f69b068585bebe50c8cbfe6e7c57479dfdbeaa
parent4011c4e05e93238eba05d7b51e50f69a2f2be122 (diff)
downloaddnsmasq-832af0bafb81e7427b062f73d0e7ece21c77a530.tar.gz
import of dnsmasq-2.36.tar.gzv2.36
-rw-r--r--CHANGELOG51
-rw-r--r--FAQ24
-rw-r--r--bld/Makefile2
-rw-r--r--contrib/try-all-ns/README19
-rw-r--r--contrib/try-all-ns/dnsmasq-2.35-try-all-ns.patch61
-rw-r--r--dnsmasq.conf.example40
-rw-r--r--doc.html4
-rw-r--r--man/dnsmasq.882
-rw-r--r--po/de.po490
-rw-r--r--po/es.po500
-rw-r--r--po/fi.po486
-rw-r--r--po/fr.po500
-rw-r--r--po/id.po515
-rw-r--r--po/it.po486
-rw-r--r--po/no.po500
-rw-r--r--po/pl.po500
-rw-r--r--po/pt_BR.po486
-rw-r--r--po/ro.po500
-rw-r--r--src/cache.c26
-rw-r--r--src/config.h26
-rw-r--r--src/dhcp.c28
-rw-r--r--src/dnsmasq.c302
-rw-r--r--src/dnsmasq.h111
-rw-r--r--src/forward.c218
-rw-r--r--src/netlink.c8
-rw-r--r--src/network.c102
-rw-r--r--src/option.c742
-rw-r--r--src/rfc1035.c108
-rw-r--r--src/rfc2131.c34
-rw-r--r--src/tftp.c495
-rw-r--r--src/util.c5
31 files changed, 4832 insertions, 2619 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 62f99f0..5a86279 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -2036,5 +2036,54 @@ version 2.35
performance should be better. Thanks to "koko" for
pointing out the problem.
-
+version 2.36
+ Added --dhcp-ignore-names flag which tells dnsmasq not to
+ use names provided by DHCP clients. Suggestion from
+ Thomas M Steenholdt.
+
+ Send netmask and broadcast address DHCP options always,
+ even if the client doesn't request them. This makes a few
+ odd clients work better.
+
+ Added simple TFTP function, optimised for net-boot. It is
+ now possible to net boot hosts using only dnsmasq. The
+ TFTP server is read-only, binary-mode only, and designed to be
+ secure; it adds about 4K to the dnsmasq binary.
+ Support DHCP option 120, SIP servers, (RFC 3361). Both
+ encodings are supported, so both --dhcp-option=120,192.168.2.3
+ and --dhcp-option=120,sip.example.net will work. Brian
+ Candler pointed out the need for this.
+
+ Allow spaces in domain names, to support DNS-SD.
+
+ Add --ptr-record flag, again for DNS-SD. Thanks to Stephan
+ Sokolow for the suggestion.
+
+ Tolerate leading space on lines in the config file. Thanks
+ to Luigi Rizzo for pointing this out.
+
+ Fixed netlink.c to cope with headers from the Linux 2.6.19
+ kernel. Thanks to Philip Wall for the bug report.
+
+ Added --dhcp-bridge option, but only to the FreeBSD
+ build. This fixes an oddity with a a particular bridged
+ network configuration on FreeBSD. Thanks to Luigi Rizzo
+ for the patch.
+
+ Added FAQ entry about running dnsmasq in a Linux
+ vserver. Thanks to Gildas le Nadan for the information.
+
+ Fixed problem with option parsing which interpreted "/" as
+ an address and not a string. Thanks to Luigi Rizzo
+ for the patch.
+
+ Ignore the --domain-needed flag when forwarding NS
+ and SOA queries, since NS queries of TLDs are always legit.
+ Marcus Better pointed out this problem.
+
+ Take care to forward signed DNS requests bit-perfect, so
+ as not to affect the validity of the signature. This
+ should allow DDNS updates to be forwarded.
+
+
diff --git a/FAQ b/FAQ
index 063d6fa..279b6e8 100644
--- a/FAQ
+++ b/FAQ
@@ -311,7 +311,7 @@ A: Because when a Gentoo box shuts down, it releases its lease with
Q: My laptop has two network interfaces, a wired one and a wireless
one. I never use both interfaces at the same time, and I'd like the
- same IP and configuration to be used irrespcetive of which
+ same IP and configuration to be used irrespective of which
interface is in use. How can I do that?
A: By default, the identity of a machine is determined by using the
@@ -393,6 +393,28 @@ A: Dnsmasq is in Suse itself, and the latest releases are also
available at ftp://ftp.suse.com/pub/people/ug/
+Q: Can I run dnsmasq in a Linux vserver?
+
+A: Yes, as a DNS server, dnsmasq will just work in a vserver.
+ To use dnsmasq's DHCP function you need to give the vserver
+ extra system capabilities. Please note that doing so will lesser
+ the overall security of your system. The capabilities
+ required are NET_ADMIN and NET_RAW. NET_ADMIN is essential, NET_RAW
+ is required to do an ICMP "ping" check on newly allocated
+ addresses. If you don't need this check, you can disable it with
+ --no-ping and omit the NET_RAW capability.
+ Adding the capabilities is done by adding them, one per line, to
+ either /etc/vservers/<vservername>/ccapabilities for a 2.4 kernel or
+ /etc/vservers/<vservername>/bcapabilities for a 2.6 kernel (please
+ refer to the vserver documentation for more information).
+
+
+
+
+
+
+
+
diff --git a/bld/Makefile b/bld/Makefile
index 6cf3a9d..3843716 100644
--- a/bld/Makefile
+++ b/bld/Makefile
@@ -3,7 +3,7 @@ PKG_CONFIG ?= pkg-config
OBJS = cache.o rfc1035.o util.o option.o forward.o isc.o network.o \
- dnsmasq.o dhcp.o lease.o rfc2131.o netlink.o dbus.o bpf.o helper.o
+ dnsmasq.o dhcp.o lease.o rfc2131.o netlink.o dbus.o bpf.o helper.o tftp.o
.c.o:
$(CC) $(CFLAGS) $(COPTS) $(I18N) `echo $(COPTS) | ../bld/pkg-wrapper $(PKG_CONFIG) --cflags dbus-1` $(RPM_OPT_FLAGS) -Wall -W -c $<
diff --git a/contrib/try-all-ns/README b/contrib/try-all-ns/README
new file mode 100644
index 0000000..224d554
--- /dev/null
+++ b/contrib/try-all-ns/README
@@ -0,0 +1,19 @@
+Date: Thu, 07 Dec 2006 00:41:43 -0500
+From: Bob Carroll <bob.carroll@rit.edu>
+Subject: dnsmasq suggestion
+To: simon@thekelleys.org.uk
+
+
+Hello,
+
+I recently needed a feature in dnsmasq for a very bizarre situation. I
+placed a list of name servers in a special resolve file and told dnsmasq
+to use that. But I wanted it to try requests in order and treat NXDOMAIN
+requests as a failed tcp connection. I wrote the feature into dnsmasq
+and it seems to work. I prepared a patch in the event that others might
+find it useful as well.
+
+Thanks and keep up the good work.
+
+--Bob
+
diff --git a/contrib/try-all-ns/dnsmasq-2.35-try-all-ns.patch b/contrib/try-all-ns/dnsmasq-2.35-try-all-ns.patch
new file mode 100644
index 0000000..ec3f3e0
--- /dev/null
+++ b/contrib/try-all-ns/dnsmasq-2.35-try-all-ns.patch
@@ -0,0 +1,61 @@
+diff -Nau dnsmasq-2.35/src/dnsmasq.h dnsmasq/src/dnsmasq.h
+--- dnsmasq-2.35/src/dnsmasq.h 2006-10-18 16:24:50.000000000 -0400
++++ dnsmasq/src/dnsmasq.h 2006-11-16 22:06:31.000000000 -0500
+@@ -112,6 +112,7 @@
+ #define OPT_NO_PING 2097152
+ #define OPT_LEASE_RO 4194304
+ #define OPT_RELOAD 8388608
++#define OPT_TRY_ALL_NS 16777216
+
+ struct all_addr {
+ union {
+diff -Nau dnsmasq-2.35/src/forward.c dnsmasq/src/forward.c
+--- dnsmasq-2.35/src/forward.c 2006-10-18 16:24:50.000000000 -0400
++++ dnsmasq/src/forward.c 2006-11-16 22:08:19.000000000 -0500
+@@ -445,6 +445,10 @@
+ {
+ struct server *server = forward->sentto;
+
++ // If strict-order and try-all-ns are set, treat NXDOMAIN as a failed request
++ if( (daemon->options & OPT_ORDER) && (daemon->options && OPT_TRY_ALL_NS)
++ && header->rcode == NXDOMAIN ) header->rcode = SERVFAIL;
++
+ if ((header->rcode == SERVFAIL || header->rcode == REFUSED) && forward->forwardall == 0)
+ /* for broken servers, attempt to send to another one. */
+ {
+diff -Nau dnsmasq-2.35/src/option.c dnsmasq/src/option.c
+--- dnsmasq-2.35/src/option.c 2006-10-18 16:24:50.000000000 -0400
++++ dnsmasq/src/option.c 2006-11-16 22:10:36.000000000 -0500
+@@ -28,7 +28,7 @@
+
+ /* options which don't have a one-char version */
+ #define LOPT_RELOAD 256
+-
++#define LOPT_TRY_ALL_NS 257
+
+ #ifdef HAVE_GETOPT_LONG
+ static const struct option opts[] =
+@@ -102,6 +102,7 @@
+ {"leasefile-ro", 0, 0, '9'},
+ {"dns-forward-max", 1, 0, '0'},
+ {"clear-on-reload", 0, 0, LOPT_RELOAD },
++ {"try-all-ns", 0, 0, LOPT_TRY_ALL_NS },
+ { NULL, 0, 0, 0 }
+ };
+
+@@ -134,6 +135,7 @@
+ { '5', OPT_NO_PING },
+ { '9', OPT_LEASE_RO },
+ { LOPT_RELOAD, OPT_RELOAD },
++ { LOPT_TRY_ALL_NS,OPT_TRY_ALL_NS },
+ { 'v', 0},
+ { 'w', 0},
+ { 0, 0 }
+@@ -208,6 +210,7 @@
+ { "-9, --leasefile-ro", gettext_noop("Read leases at startup, but never write the lease file."), NULL },
+ { "-0, --dns-forward-max=<queries>", gettext_noop("Maximum number of concurrent DNS queries. (defaults to %s)"), "!" },
+ { " --clear-on-reload", gettext_noop("Clear DNS cache when reloading %s."), RESOLVFILE },
++ { " --try-all-ns", gettext_noop("Try all name servers in tandem on NXDOMAIN replies (use with strict-order)."), NULL },
+ { NULL, NULL, NULL }
+ };
+
diff --git a/dnsmasq.conf.example b/dnsmasq.conf.example
index 59d6dfa..adad609 100644
--- a/dnsmasq.conf.example
+++ b/dnsmasq.conf.example
@@ -37,7 +37,7 @@
# If you don't want dnsmasq to read /etc/resolv.conf or any other
# file, getting its servers from this file instead (see below), then
-# uncomment this
+# uncomment this.
#no-resolv
# If you don't want dnsmasq to poll /etc/resolv.conf or other resolv
@@ -206,12 +206,19 @@
# subnet mask - 1
# default router - 3
# DNS server - 6
+# hostname - 12
# broadcast address - 28
# Override the default route supplied by dnsmasq, which assumes the
# router is the same machine as the one running dnsmasq.
#dhcp-option=3,1.2.3.4
+# Override the default route supplied by dnsmasq and send no default
+# route at all. Note that this only works for the options sent by
+# default (1, 3, 6, 12, 28) the same line will send a zero-length option
+# for all other option numbers.
+#dhcp-option=3
+
# Set the NTP time server addresses to 192.168.0.4 and 10.10.0.5
#dhcp-option=42,192.168.0.4,10.10.0.5
@@ -262,9 +269,27 @@
# mtftp address to 0.0.0.0 for PXEClients
#dhcp-option=vendor:PXEClient,1,0.0.0.0
-# Set the boot filename and tftpd server name and address
-# for BOOTP. You will only need this is you want to
-# boot machines over the network.
+# Set the boot filename for BOOTP. You will only need
+# this is you want to boot machines over the network and you will need
+# a TFTP server; either dnsmasq's built in TFTP server or an
+# external one. (See below for how to enable the TFTP server.)
+#dhcp-boot=pxelinux.0
+
+# Enable dnsmasq's built-in TFTP server
+#enable-tftp
+
+# Set the root directory for files availble via FTP.
+#tftp-root=/var/ftpd
+
+# Make the TFTP server more secure: with this set, only files owned by
+# the user dnsmasq is running as will be send over the net.
+#tftp-secure
+
+# Set the boot file name only when the "red" tag is set.
+#dhcp-boot=net:red,pxelinux.red-net
+
+# An example of dhcp-boot with an external server: the name and IP
+# address of the server are given after the filename.
#dhcp-boot=/var/ftpd/pxelinux.0,boothost,192.168.0.3
# Set the limit on DHCP leases, the default is 150
@@ -363,6 +388,11 @@
# example.com
#srv-host=_ldap._tcp.example.com
+# The following line shows how to make dnsmasq serve an arbitrary PTR
+# record. This is useful for DNS-SD. (Note that the
+# domain-name expansion done for SRV records _does_not
+# occur for PTR records.)
+#ptr-record=_http._tcp.dns-sd-services,"New Employee Page._http._tcp.dns-sd-services"
# Change the following lines to enable dnsmasq to serve TXT records.
# These are used for things like SPF and zeroconf. (Note that the
@@ -370,7 +400,7 @@
# occur for TXT records.)
#Example SPF.
-#txt-record=example.com,v=spf1 a -all
+#txt-record=example.com,"v=spf1 a -all"
#Example zeroconf
#txt-record=_http._tcp.example.com,name=value,paper=A4
diff --git a/doc.html b/doc.html
index 1536209..4d9c3c6 100644
--- a/doc.html
+++ b/doc.html
@@ -11,7 +11,7 @@ Dnsmasq is a lightweight, easy to configure DNS forwarder and DHCP
server and allows machines with DHCP-allocated addresses
to appear in the DNS with names configured either in each host or
in a central configuration file. Dnsmasq supports static and dynamic
- DHCP leases and BOOTP for network booting of diskless machines.
+ DHCP leases and BOOTP/TFTP for network booting of diskless machines.
<P>
Dnsmasq is targeted at home networks using NAT and
connected to the internet via a modem, cable-modem or ADSL
@@ -83,7 +83,7 @@ for any or all local machines.
<A HREF="http://www.thekelleys.org.uk/dnsmasq/"> Download</A> dnsmasq here.
The tarball includes this documentation, source, and manpage.
-There is also a <A HREF="CHANGELOG"> CHANGELOG</A>.
+There is also a <A HREF="CHANGELOG"> CHANGELOG</A> and a <A HREF="FAQ">FAQ</A>.
Dnsmasq is part of the Debian distribution, it can be downloaded from
<A HREF="http://ftp.debian.org/debian/pool/main/d/dnsmasq/"> here</A> or installed using <TT>apt</TT>.
diff --git a/man/dnsmasq.8 b/man/dnsmasq.8
index 4841e25..d5ded1f 100644
--- a/man/dnsmasq.8
+++ b/man/dnsmasq.8
@@ -24,7 +24,7 @@ Dnsmasq
supports IPv6.
.SH OPTIONS
Note that in general missing parameters are allowed and switch off
-functions, for instance "--pid-file=" disables writing a PID file. On
+functions, for instance "--pid-file" disables writing a PID file. On
BSD, unless the GNU getopt library is linked, the long form of the
options does not work on the command line; it is still recognised in
the configuration file.
@@ -37,6 +37,10 @@ Additional hosts file. Read the specified file as well as /etc/hosts. If -h is g
only the specified file. This option may be repeated for more than one
additional hosts file.
.TP
+.B \-E, --expand-hosts
+Add the domain to simple names (without a period) in /etc/hosts
+in the same way as for DHCP-derived names.
+.TP
.B \-T, --local-ttl=<time>
When replying with information from /etc/hosts or the DHCP leases
file dnsmasq by default sets the time-to-live field to zero, meaning
@@ -123,7 +127,7 @@ options does not matter and that
options always override the others.
.TP
.B \-2, --no-dhcp-interface=<interface name>
-Do not provide DHCP on the specified interface, but do provide DNS service.
+Do not provide DHCP or TFTP on the specified interface, but do provide DNS service.
.TP
.B \-a, --listen-address=<ipaddr>
Listen on the given IP address(es). Both
@@ -229,7 +233,7 @@ Tells dnsmasq to never forward queries for plain names, without dots
or domain parts, to upstream nameservers. If the name is not known
from /etc/hosts or DHCP then a "not found" answer is returned.
.TP
-.B \-S, --server=[/[<domain>]/[domain/]][<ipaddr>[#<port>][@<source>[#<port>]]]
+.B \-S, ,--local, --server=[/[<domain>]/[domain/]][<ipaddr>[#<port>][@<source>[#<port>]]]
Specify IP address of upstream severs directly. Setting this flag does
not suppress reading of /etc/resolv.conf, use -R to do that. If one or
more
@@ -322,6 +326,9 @@ all that match are returned.
Return a TXT DNS record. The value of TXT record is a set of strings,
so any number may be included, split by commas.
.TP
+.B --ptr-record=<name>[,<target>]
+Return a PTR DNS record.
+.TP
.B \-c, --cache-size=<cachesize>
Set the size of dnsmasq's cache. The default is 150 names. Setting the cache size to zero disables caching.
.TP
@@ -368,7 +375,7 @@ addresses given via
.B dhcp-host
or from /etc/ethers will be served.
.TP
-.B \-G, --dhcp-host=[[<hwaddr>]|[id:[<client_id>][*]]][,net:<netid>][,<ipaddr>][,<hostname>][,<lease_time>][,ignore]
+.B \-G, --dhcp-host=[<hwaddr>][,id:<client_id>|*][,net:<netid>][,<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
@@ -449,9 +456,10 @@ and a text string. If the optional network-ids are given then
this option is only sent when all the network-ids are matched.
Special processing is done on a text argument for option 119, to
-conform with RFC 3397, and dotted-quad IP addresses which are followed
-by a slash and then a netmask size are encoded as described in RFC
-3442.
+conform with RFC 3397. Text or dotted-quad IP addresses as arguments
+to option 120 are handled as per RFC 3361. Dotted-quad IP addresses
+which are followed by a slash and then a netmask size are encoded as
+described in RFC 3442.
Be careful: no checking is done that the correct type of data for the
option number is sent, it is quite possible to
@@ -508,10 +516,23 @@ 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
not allocate it a DHCP lease.
.TP
+.B --dhcp-ignore-name[=<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
+provided by the host. Note that, unlike dhcp-ignore, it is permissable
+to supply no netid 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 \-M, --dhcp-boot=[net:<network-id>,]<filename>,[<servername>[,<server address>]]
-Set BOOTP options to be returned by the DHCP server. These are needed
-for machines which network boot, and tell the machine where to collect
-its initial configuration. If the optional network-id(s) are given,
+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.
.TP
@@ -602,6 +623,12 @@ stdout and exit with zero exit code. Setting this
option also forces the leasechange script to be called on changes
to the client-id and lease length and expiry time.
.TP
+.B --bridge-interface=<interface>,<alias>[,<alias>]
+Treat DHCP request packets arriving at any of the <alias> interfaces
+as if they had arrived at <interface>. This option is only available
+on FreeBSD and Dragonfly BSD, and is necessary when using "old style" bridging, since
+packets arrive at tap interfaces which don't have an IP address.
+.TP
.B \-s, --domain=<domain>
Specifies the domain for the DHCP server. This has two effects;
firstly it causes the DHCP server to return the domain to any hosts
@@ -614,10 +641,37 @@ both as "laptop" and "laptop.thekelleys.org.uk". If the domain is
given as "#" then the domain is read from the first "search" directive
in /etc/resolv.conf (or equivalent).
.TP
-.B \-E, --expand-hosts
-Add the domain to simple names (without a period) in /etc/hosts
-in the same way as for DHCP-derived names.
-.TP
+.B --enable-tftp
+Enable the TFTP server function. This is deliberately limited to that
+needed to net-boot a client: Only reading is allowed, and only in
+binary/octet mode. The tsize and blksize extensions are supported.
+.TP
+.B --tftp-root=<directory>
+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.
+.TP
+.B --tftp-secure
+Enable TFTP secure mode: without this, any file which is readble by
+the dnsmasq process under normal unix access-control rules is
+available via TFTP. When the --tftp-secure flag is given, only files
+owned by the user running the dnsmasq process are accessible. If
+dnsmasq is being run as root, different rules apply: --tftp-secure
+has not effect, but only files which have the world-readable bit set
+are accessible. It is not recommended to run dnsmasq as root with TFTP
+enabled, and certainly not without specifying --tftp-root. Doing so
+can expose any world-readable file on the server to any host on the net.
+.TP
+.B --tftp-max=<connections>
+Set the maximum number of concurrent TFTP connections allowed. This
+defaults to 50. When serving a large number of TFTP connections,
+per-process file descriptor limits may be encountered. Dnsmasq needs
+one file descriptor for each concurrent TFTP connection and one
+file descriptor per unique file (plus a few others). So serving the
+same file simultaneously to n clients will use require about n + 10 file
+descriptors, serving different files simultaneously to n clients will
+require about (2*n) + 10 descriptors.
+.TP
.B \-C, --conf-file=<file>
Specify a different configuration file. The conf-file option is also allowed in
configuration files, to include multiple configuration files.
diff --git a/po/de.po b/po/de.po
index c892646..4617dc3 100644
--- a/po/de.po
+++ b/po/de.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dnsmasq 2.24\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-10-28 15:42+0100\n"
+"POT-Creation-Date: 2007-01-21 15:53+0000\n"
"PO-Revision-Date: 2005-09-27 09:37+0100\n"
"Last-Translator: Simon Kelley <simon@thekelleys.org.uk>\n"
"Language-Team: German <de@li.org>\n"
@@ -15,37 +15,37 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: cache.c:665
+#: cache.c:671
#, c-format
msgid "failed to load names from %s: %m"
msgstr ""
-#: cache.c:699 dhcp.c:701
+#: cache.c:705 dhcp.c:715
#, c-format
msgid "bad address at %s line %d"
msgstr ""
# @Simon: Here I need an example to understand it :)
-#: cache.c:745 dhcp.c:715
+#: cache.c:751 dhcp.c:729
#, c-format
msgid "bad name at %s line %d"
msgstr ""
# @Simon: Here I need an example to understand it :)
-#: cache.c:752 dhcp.c:769
+#: cache.c:758 dhcp.c:783
#, c-format
msgid "read %s - %d addresses"
msgstr "lese %s - %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:790
+#: cache.c:796
msgid "cleared cache"
msgstr "Cache geleert"
# @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:843
+#: cache.c:849
#, c-format
msgid ""
"not giving name %s to the DHCP lease of %s because the name exists in %s "
@@ -56,7 +56,7 @@ msgstr ""
# @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:887
+#: cache.c:893
#, fuzzy, c-format
msgid ""
"time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache "
@@ -70,7 +70,7 @@ msgstr ""
# @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:153 option.c:1221
+#: util.c:154 option.c:579
msgid "could not get memory"
msgstr "Speicher nicht verfügbar"
@@ -79,7 +79,7 @@ msgstr "Speicher nicht verfügbar"
# @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" ?
-#: util.c:176
+#: util.c:177
#, c-format
msgid "%s at line %d of %%s"
msgstr "%s in Zeile %d von %%s"
@@ -87,36 +87,36 @@ msgstr "%s in Zeile %d von %%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.
-#: util.c:183
+#: util.c:184
msgid "FAILED to start up"
msgstr "Start gescheitert"
# @Simon: not perfect but I cannot get nearer right now.
-#: util.c:304
+#: util.c:305
#, c-format
msgid "infinite"
msgstr "unendlich"
-#: option.c:147
+#: option.c:164
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:148
+#: option.c:165
msgid "Return ipaddr for all hosts in specified domains."
msgstr "Rückkehr-IP-Adresse für alle Geräte in angebenen Domänen"
# @Simon: I hope "Return ipaddr" is similar to "Return-ipaddr" and not "Return the ipaddr ... !"
-#: option.c:149
+#: option.c:166
msgid "Fake reverse lookups for RFC1918 private address ranges."
msgstr ""
"'Gefälschte' Rückwärts-Ergebnisse für private Adressbereiche nach RFC1918"
# @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:150
+#: option.c:167
msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
msgstr "Behandle IP-Adr als NXDOMAIN (wehrt Verisign-Platzhalter ab)."
@@ -127,17 +127,17 @@ msgstr "Behandle IP-Adr als NXDOMAIN (wehrt Verisign-Platzhalter ab)."
# @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:151
+#: option.c:168
#, 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)."
-#: option.c:152
+#: option.c:169
#, c-format
msgid "Specify configuration file (defaults to %s)."
msgstr "Angabe der Konfigurationsdatei (Voreinstellung: %s)."
-#: option.c:153
+#: option.c:170
msgid "Do NOT fork into the background: run in debug mode."
msgstr "NICHT in den Hintergrund gehen: Betrieb im Debug-Modus"
@@ -145,455 +145,492 @@ msgstr "NICHT in den Hintergrund gehen: Betrieb im Debug-Modus"
# @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:154
+#: option.c:171
msgid "Do NOT forward queries with no domain part."
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:155
+#: option.c:172
msgid "Return self-pointing MX records for local hosts."
msgstr "Rückgabe auf sich selbst zeigender MX-Einträge für lokale Geräte"
# @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:156
+#: option.c:173
msgid "Expand simple names in /etc/hosts with domain-suffix."
msgstr "Erweitere einfache Namen in /etc/hosts mit der Domänen-Endung"
-#: option.c:157
+#: option.c:174
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:158
+#: option.c:175
msgid "Enable DHCP in the range given with lease duration."
msgstr ""
-#: option.c:159
+#: option.c:176
#, c-format
msgid "Change to this group after startup (defaults to %s)."
msgstr ""
-#: option.c:160
+#: option.c:177
msgid "Set address or hostname for a specified machine."
msgstr ""
-#: option.c:161
+#: option.c:178
#, c-format
msgid "Do NOT load %s file."
msgstr ""
-#: option.c:162
+#: option.c:179
#, c-format
msgid "Specify a hosts file to be read in addition to %s."
msgstr ""
-#: option.c:163
+#: option.c:180
msgid "Specify interface(s) to listen on."
msgstr ""
-#: option.c:164
+#: option.c:181
msgid "Specify interface(s) NOT to listen on."
msgstr ""
-#: option.c:165
+#: option.c:182
msgid "Map DHCP user class to option set."
msgstr ""
-#: option.c:166
+#: option.c:183
msgid "Don't do DHCP for hosts in option set."
msgstr ""
-#: option.c:167
+#: option.c:184
msgid "Do NOT fork into the background, do NOT run in debug mode."
msgstr ""
-#: option.c:168
+#: option.c:185
msgid "Assume we are the only DHCP server on the local network."
msgstr ""
-#: option.c:169
+#: option.c:186
#, c-format
msgid "Specify where to store DHCP leases (defaults to %s)."
msgstr ""
-#: option.c:170
+#: option.c:187
msgid "Return MX records for local hosts."
msgstr ""
-#: option.c:171
+#: option.c:188
msgid "Specify an MX record."
msgstr ""
-#: option.c:172
+#: option.c:189
msgid "Specify BOOTP options to DHCP server."
msgstr ""
-#: option.c:173
+#: option.c:190
#, c-format
msgid "Do NOT poll %s file, reload only on SIGHUP."
msgstr ""
-#: option.c:174
+#: option.c:191
msgid "Do NOT cache failed search results."
msgstr ""
-#: option.c:175
+#: option.c:192
#, c-format
msgid "Use nameservers strictly in the order given in %s."
msgstr ""
-#: option.c:176
+#: option.c:193
msgid "Set extra options to be set to DHCP clients."
msgstr ""
-#: option.c:177
+#: option.c:194
msgid "Specify port to listen for DNS requests on (defaults to 53)."
msgstr ""
-#: option.c:178
+#: option.c:195
#, c-format
msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
msgstr ""
-#: option.c:179
+#: option.c:196
msgid "Log queries."
msgstr ""
-#: option.c:180
+#: option.c:197
msgid "Force the originating port for upstream queries."
msgstr ""
-#: option.c:181
+#: option.c:198
msgid "Do NOT read resolv.conf."
msgstr ""
-#: option.c:182
+#: option.c:199
#, c-format
msgid "Specify path to resolv.conf (defaults to %s)."
msgstr ""
-#: option.c:183
+#: option.c:200
msgid "Specify address(es) of upstream servers with optional domains."
msgstr ""
-#: option.c:184
+#: option.c:201
msgid "Never forward queries to specified domains."
msgstr ""
-#: option.c:185
+#: option.c:202
msgid "Specify the domain to be assigned in DHCP leases."
msgstr ""
-#: option.c:186
+#: option.c:203
msgid "Specify default target in an MX record."
msgstr ""
-#: option.c:187
+#: option.c:204
msgid "Specify time-to-live in seconds for replies from /etc/hosts."
msgstr ""
-#: option.c:188
+#: option.c:205
#, c-format
msgid "Change to this user after startup. (defaults to %s)."
msgstr ""
-#: option.c:189
+#: option.c:206
msgid "Map DHCP vendor class to option set."
msgstr ""
-#: option.c:190
+#: option.c:207
msgid "Display dnsmasq version and copyright information."
msgstr ""
-#: option.c:191
+#: option.c:208
msgid "Translate IPv4 addresses from upstream servers."
msgstr ""
-#: option.c:192
+#: option.c:209
msgid "Specify a SRV record."
msgstr ""
-#: option.c:193
+#: option.c:210
msgid "Display this message."
msgstr ""
-#: option.c:194
-#, c-format
-msgid "Specify path of PID file. (defaults to %s)."
-msgstr ""
+#: option.c:211
+#, fuzzy, c-format
+msgid "Specify path of PID file (defaults to %s)."
+msgstr "Angabe der Konfigurationsdatei (Voreinstellung: %s)."
-#: option.c:195
+#: option.c:212
#, c-format
msgid "Specify maximum number of DHCP leases (defaults to %s)."
msgstr ""
-#: option.c:196
+#: option.c:213
msgid "Answer DNS queries based on the interface a query was sent to."
msgstr ""
-#: option.c:197
+#: option.c:214
msgid "Specify TXT DNS record."
msgstr ""
-#: option.c:198
+#: option.c:215
+msgid "Specify PTR DNS record."
+msgstr ""
+
+#: option.c:216
msgid "Bind only to interfaces in use."
msgstr ""
-#: option.c:199
+#: option.c:217
#, c-format
msgid "Read DHCP static host information from %s."
msgstr ""
-#: option.c:200
+#: option.c:218
msgid "Enable the DBus interface for setting upstream servers, etc."
msgstr ""
-#: option.c:201
+#: option.c:219
msgid "Do not provide DHCP on this interface, only provide DNS."
msgstr ""
-#: option.c:202
+#: option.c:220
msgid "Enable dynamic address allocation for bootp."
msgstr ""
-#: option.c:203
+#: option.c:221
msgid "Map MAC address (with wildcards) to option set."
msgstr ""
-#: option.c:204
+#: option.c:223
+msgid "Treat DHCP requests on aliases as arriving from interface."
+msgstr ""
+
+#: option.c:225
msgid "Disable ICMP echo address checking in the DHCP server."
msgstr ""
-#: option.c:205
+#: option.c:226
msgid "Script to run on DHCP lease creation and destruction."
msgstr ""
-#: option.c:206
+#: option.c:227
msgid "Read configuration from all the files in this directory."
msgstr ""
-#: option.c:207
+#: option.c:228
msgid "Log to this syslog facility. (defaults to DAEMON)"
msgstr ""
-#: option.c:208
+#: option.c:229
msgid "Read leases at startup, but never write the lease file."
msgstr ""
-#: option.c:209
+#: option.c:230
#, c-format
msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
msgstr ""
-#: option.c:210
+#: option.c:231
#, c-format
msgid "Clear DNS cache when reloading %s."
msgstr ""
-#: option.c:323
+#: option.c:232
+msgid "Ignore hostnames provided by DHCP clients."
+msgstr ""
+
+#: option.c:233
+msgid "Enable integrated read-only TFTP server."
+msgstr ""
+
+#: option.c:234
+msgid "Export files by TFTP only from the specified subtree."
+msgstr ""
+
+#: option.c:235
+msgid "Allow access only to files owned by the user running dnsmasq."
+msgstr ""
+
+#: option.c:236
+#, c-format
+msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
+msgstr ""
+
+#: option.c:361
#, c-format
msgid ""
"Usage: dnsmasq [options]\n"
"\n"
msgstr ""
-#: option.c:325
+#: option.c:363
#, c-format
msgid "Use short options only on the command line.\n"
msgstr ""
-#: option.c:327
+#: option.c:365
#, c-format
msgid "Valid options are :\n"
msgstr ""
-#: option.c:362
-msgid "extraneous parameter"
+#: option.c:428
+msgid "bad dhcp-option"
msgstr ""
-#: option.c:366
-msgid "missing parameter"
+#: option.c:574
+msgid "bad domain in dhcp-option"
+msgstr ""
+
+#: option.c:631
+msgid "dhcp-option too long"
msgstr ""
-#: option.c:388
+#: option.c:693
#, c-format
msgid "cannot access directory %s: %s"
msgstr ""
-#: option.c:407
+#: option.c:712 tftp.c:230
#, c-format
msgid "cannot access %s: %s"
msgstr ""
-#: option.c:484
+#: option.c:789
msgid "bad MX preference"
msgstr ""
-#: option.c:493
+#: option.c:798
msgid "bad MX name"
msgstr ""
-#: option.c:511
+#: option.c:816
msgid "bad MX target"
msgstr ""
-#: option.c:523
+#: option.c:828
msgid "cannot run scripts under uClinux"
msgstr ""
-#: option.c:722 option.c:733
+#: option.c:1027 option.c:1038
msgid "bad port"
msgstr ""
-#: option.c:878
+#: option.c:1182
+msgid "bad bridge-interface"
+msgstr ""
+
+#: option.c:1226
msgid "bad dhcp-range"
msgstr ""
-#: option.c:907
+#: option.c:1255
msgid "only one netid tag allowed"
msgstr ""
-#: option.c:952
+#: option.c:1300
msgid "inconsistent DHCP range"
msgstr ""
-#: option.c:1137
+#: option.c:1485
msgid "bad dhcp-host"
msgstr ""
-#: option.c:1198
-msgid "bad dhcp-option"
-msgstr ""
-
-#: option.c:1216
-msgid "bad domain in dhcp-option"
+#: option.c:1685
+msgid "bad PTR record"
msgstr ""
-#: option.c:1386
-msgid "dhcp-option too long"
-msgstr ""
-
-#: option.c:1583
+#: option.c:1710
msgid "bad TXT record"
msgstr ""
-#: option.c:1615
+#: option.c:1742
msgid "TXT record string too long"
msgstr ""
-#: option.c:1654
+#: option.c:1781
msgid "bad SRV record"
msgstr ""
-#: option.c:1667
+#: option.c:1794
msgid "bad SRV target"
msgstr ""
-#: option.c:1679
+#: option.c:1806
msgid "invalid port number"
msgstr ""
-#: option.c:1690
+#: option.c:1817
msgid "invalid priority"
msgstr ""
-#: option.c:1701
+#: option.c:1828
msgid "invalid weight"
msgstr ""
-#: option.c:1732
+#: option.c:1859
#, c-format
msgid "files nested too deep in %s"
msgstr ""
-#: option.c:1739
+#: option.c:1866 tftp.c:235 tftp.c:366
#, c-format
msgid "cannot read %s: %s"
msgstr ""
-#: option.c:1781
+#: option.c:1909
msgid "missing \""
msgstr ""
-#: option.c:1816
-msgid "error"
+#: option.c:1948
+msgid "bad option"
msgstr ""
-#: option.c:1820
-msgid "bad option"
+#: option.c:1950
+msgid "extraneous parameter"
msgstr ""
-#: option.c:1884
+#: option.c:1952
+msgid "missing parameter"
+msgstr ""
+
+#: option.c:1954
+msgid "error"
+msgstr ""
+
+#: option.c:2022
#, c-format
msgid "Dnsmasq version %s %s\n"
msgstr ""
-#: option.c:1885
+#: option.c:2023
#, c-format
msgid ""
"Compile time options %s\n"
"\n"
msgstr ""
-#: option.c:1886
+#: option.c:2024
#, c-format
msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
msgstr ""
-#: option.c:1887
+#: option.c:2025
#, c-format
msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
msgstr ""
-#: option.c:1888
+#: option.c:2026
#, c-format
msgid "under the terms of the GNU General Public License, version 2.\n"
msgstr ""
-#: option.c:1899
+#: option.c:2037
msgid "try --help"
msgstr ""
-#: option.c:1901
+#: option.c:2039
msgid "try -w"
msgstr ""
-#: option.c:1904
+#: option.c:2042
#, c-format
msgid "bad command line options: %s"
msgstr ""
-#: option.c:1955
+#: option.c:2093
#, c-format
msgid "cannot get host-name: %s"
msgstr ""
-#: option.c:1983
+#: option.c:2121
msgid "only one resolv.conf file allowed in no-poll mode."
msgstr ""
-#: option.c:1993
+#: option.c:2131
msgid "must have exactly one resolv.conf to read domain from."
msgstr ""
-#: option.c:1996
+#: option.c:2134
#, c-format
msgid "failed to read %s: %s"
msgstr ""
-#: option.c:2014
+#: option.c:2152
#, c-format
msgid "no search directive found in %s"
msgstr ""
-#: forward.c:370
+#: forward.c:376
#, c-format
msgid "nameserver %s refused to do a recursive query"
msgstr ""
-#: isc.c:73 dnsmasq.c:482
+#: isc.c:73 dnsmasq.c:527
#, c-format
msgid "failed to access %s: %m"
msgstr ""
@@ -603,7 +640,7 @@ msgstr ""
msgid "failed to load %s: %m"
msgstr ""
-#: isc.c:93 dnsmasq.c:504
+#: isc.c:93 dnsmasq.c:549
#, c-format
msgid "reading %s"
msgstr ""
@@ -618,64 +655,74 @@ msgstr ""
msgid "Ignoring DHCP lease for %s because it has an illegal domain part"
msgstr ""
-#: network.c:315 dnsmasq.c:132
+#: network.c:41
+#, c-format
+msgid "unknown interface %s in bridge-interface"
+msgstr ""
+
+#: network.c:379 dnsmasq.c:137
#, c-format
msgid "failed to create listening socket: %s"
msgstr ""
-#: network.c:322
+#: network.c:386
#, c-format
msgid "failed to set IPV6 options on listening socket: %s"
msgstr ""
-#: network.c:340
+#: network.c:404
#, c-format
msgid "failed to bind listening socket for %s: %s"
msgstr ""
-#: network.c:348
+#: network.c:412
#, c-format
msgid "failed to listen on socket: %s"
msgstr ""
-#: network.c:419
+#: network.c:423
+#, c-format
+msgid "failed to create TFTP socket: %s"
+msgstr ""
+
+#: network.c:495
#, c-format
msgid "ignoring nameserver %s - local interface"
msgstr ""
-#: network.c:428
+#: network.c:504
#, c-format
msgid "ignoring nameserver %s - cannot make/bind socket: %m"
msgstr ""
-#: network.c:442
+#: network.c:518
msgid "domain"
msgstr ""
-#: network.c:444
+#: network.c:520
msgid "unqualified"
msgstr ""
-#: network.c:444
+#: network.c:520
msgid "domains"
msgstr ""
-#: network.c:447
+#: network.c:523
#, c-format
msgid "using local addresses only for %s %s"
msgstr ""
-#: network.c:449
+#: network.c:525
#, c-format
msgid "using nameserver %s#%d for %s %s"
msgstr ""
-#: network.c:452
+#: network.c:528
#, c-format
msgid "using nameserver %s#%d"
msgstr ""
-#: network.c:472
+#: network.c:548
#, c-format
msgid "failed to read %s: %m"
msgstr ""
@@ -686,103 +733,124 @@ msgid ""
msgstr ""
#: dnsmasq.c:114
+msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
+msgstr ""
+
+#: dnsmasq.c:119
#, c-format
msgid "failed to find list of interfaces: %s"
msgstr ""
-#: dnsmasq.c:122
+#: dnsmasq.c:127
#, c-format
msgid "unknown interface %s"
msgstr ""
-#: dnsmasq.c:128
+#: dnsmasq.c:133
#, c-format
msgid "no interface with address %s"
msgstr ""
-#: dnsmasq.c:147
+#: dnsmasq.c:152
msgid "must set exactly one interface on broken systems without IP_RECVIF"
msgstr ""
-#: dnsmasq.c:160 dnsmasq.c:609
+#: dnsmasq.c:165 dnsmasq.c:654
#, c-format
msgid "DBus error: %s"
msgstr ""
-#: dnsmasq.c:163
+#: dnsmasq.c:168
msgid "DBus not available: set HAVE_DBUS in src/config.h"
msgstr ""
-#: dnsmasq.c:194
+#: dnsmasq.c:199
#, c-format
msgid "cannot create pipe: %s"
msgstr ""
-#: dnsmasq.c:337
+#: dnsmasq.c:342
#, c-format
msgid "started, version %s cachesize %d"
msgstr ""
-#: dnsmasq.c:339
+#: dnsmasq.c:344
#, c-format
msgid "started, version %s cache disabled"
msgstr ""
-#: dnsmasq.c:341
+#: dnsmasq.c:346
#, c-format
msgid "compile time options: %s"
msgstr ""
-#: dnsmasq.c:347
+#: dnsmasq.c:352
msgid "DBus support enabled: connected to system bus"
msgstr ""
-#: dnsmasq.c:349
+#: dnsmasq.c:354
msgid "DBus support enabled: bus connection pending"
msgstr ""
-#: dnsmasq.c:354
+#: dnsmasq.c:359
msgid "setting --bind-interfaces option because of OS limitations"
msgstr ""
-#: dnsmasq.c:359
+#: dnsmasq.c:364
#, c-format
msgid "warning: interface %s does not currently exist"
msgstr ""
-#: dnsmasq.c:364
+#: dnsmasq.c:369
msgid "warning: ignoring resolv-file flag because no-resolv is set"
msgstr ""
-#: dnsmasq.c:378
+#: dnsmasq.c:383
#, c-format
msgid "DHCP, static leases only on %.0s%s, lease time %s"
msgstr ""
-#: dnsmasq.c:379
+#: dnsmasq.c:384
#, c-format
msgid "DHCP, IP range %s -- %s, lease time %s"
msgstr ""
-#: dnsmasq.c:389
+#: dnsmasq.c:400
+msgid "root is "
+msgstr ""
+
+#: dnsmasq.c:400
+msgid "enabled"
+msgstr ""
+
+#: dnsmasq.c:402
+msgid "secure mode"
+msgstr ""
+
+#: dnsmasq.c:422
+#, c-format
+msgid "restricting maximum simultaneous TFTP transfers to %d"
+msgstr ""
+
+#: dnsmasq.c:433
#, c-format
msgid "warning: setting capabilities failed: %m"
msgstr ""
-#: dnsmasq.c:391
+#: dnsmasq.c:435
msgid "running as root"
msgstr ""
-#: dnsmasq.c:515
+#: dnsmasq.c:560
#, c-format
msgid "no servers found in %s, will retry"
msgstr ""
-#: dnsmasq.c:574
+#: dnsmasq.c:619
msgid "exiting on receipt of SIGTERM"
msgstr ""
-#: dnsmasq.c:611
+#: dnsmasq.c:656
msgid "connected to system DBus"
msgstr ""
@@ -816,27 +884,32 @@ msgstr ""
msgid "duplicate IP address %s in dhcp-config directive."
msgstr ""
-#: dhcp.c:336
+#: dhcp.c:219
+#, c-format
+msgid "DHCP packet received on %s which has no address"
+msgstr ""
+
+#: dhcp.c:350
#, c-format
msgid "DHCP range %s -- %s is not consistent with netmask %s"
msgstr ""
-#: dhcp.c:653
+#: dhcp.c:667
#, c-format
msgid "failed to read %s:%m"
msgstr ""
-#: dhcp.c:688
+#: dhcp.c:702
#, c-format
msgid "bad line at %s line %d"
msgstr ""
-#: dhcp.c:795
+#: dhcp.c:809
#, c-format
msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr ""
-#: dhcp.c:831
+#: dhcp.c:845
#, c-format
msgid "Ignoring DHCP host name %s because it has an illegal domain part"
msgstr ""
@@ -882,7 +955,7 @@ msgstr ""
msgid "disabled"
msgstr ""
-#: rfc2131.c:324 rfc2131.c:762
+#: rfc2131.c:324 rfc2131.c:763
msgid "address in use"
msgstr ""
@@ -890,87 +963,87 @@ msgstr ""
msgid "no address configured"
msgstr ""
-#: rfc2131.c:340 rfc2131.c:631
+#: rfc2131.c:340 rfc2131.c:630
msgid "no address available"
msgstr ""
-#: rfc2131.c:349 rfc2131.c:772
+#: rfc2131.c:349 rfc2131.c:773
msgid "no leases left"
msgstr ""
-#: rfc2131.c:352 rfc2131.c:736
+#: rfc2131.c:352 rfc2131.c:737
msgid "wrong network"
msgstr ""
-#: rfc2131.c:559
+#: rfc2131.c:558
#, c-format
msgid "disabling DHCP static address %s for %s"
msgstr ""
-#: rfc2131.c:580
+#: rfc2131.c:579
msgid "unknown lease"
msgstr ""
-#: rfc2131.c:589 rfc2131.c:873
+#: rfc2131.c:588 rfc2131.c:885
msgid "ignored"
msgstr ""
-#: rfc2131.c:605
+#: rfc2131.c:604
#, c-format
msgid "not using configured address %s because it is leased to %s"
msgstr ""
-#: rfc2131.c:614
+#: rfc2131.c:613
#, c-format
msgid ""
"not using configured address %s because it is in use by the server or relay"
msgstr ""
-#: rfc2131.c:617
+#: rfc2131.c:616
#, c-format
msgid "not using configured address %s because it was previously declined"
msgstr ""
-#: rfc2131.c:699
+#: rfc2131.c:700
msgid "wrong address"
msgstr ""
-#: rfc2131.c:712
+#: rfc2131.c:713
msgid "lease not found"
msgstr ""
-#: rfc2131.c:744
+#: rfc2131.c:745
msgid "address not available"
msgstr ""
-#: rfc2131.c:755
+#: rfc2131.c:756
msgid "static lease available"
msgstr ""
-#: rfc2131.c:759
+#: rfc2131.c:760
msgid "address reserved"
msgstr ""
-#: rfc2131.c:765
+#: rfc2131.c:766
msgid "no unique-id"
msgstr ""
-#: rfc2131.c:1011
+#: rfc2131.c:1023
#, c-format
msgid "cannot send DHCP option %d: no space left in packet"
msgstr ""
-#: rfc2131.c:1312
+#: rfc2131.c:1322
#, c-format
msgid "More than one vendor class matches, using %s"
msgstr ""
-#: netlink.c:51
+#: netlink.c:59
#, c-format
msgid "cannot create netlink socket: %s"
msgstr ""
-#: netlink.c:224
+#: netlink.c:232
#, c-format
msgid "netlink returns error: %s"
msgstr ""
@@ -1011,3 +1084,28 @@ msgstr ""
#, c-format
msgid "failed to execute %s: %m"
msgstr ""
+
+#: tftp.c:157
+#, c-format
+msgid "unsupported request from %s"
+msgstr ""
+
+#: tftp.c:226
+#, c-format
+msgid "file %s not found"
+msgstr ""
+
+#: tftp.c:293
+#, c-format
+msgid "TFTP sent %s to %s"
+msgstr ""
+
+#: tftp.c:343
+#, c-format
+msgid "TFTP error %d %s received from %s"
+msgstr ""
+
+#: tftp.c:374
+#, c-format
+msgid "TFTP failed sending %s to %s"
+msgstr ""
diff --git a/po/es.po b/po/es.po
index 7a0c12c..9360748 100644
--- a/po/es.po
+++ b/po/es.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dnsmasq 2.24\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-10-28 15:42+0100\n"
+"POT-Creation-Date: 2007-01-21 15:53+0000\n"
"PO-Revision-Date: 2005-10-07 11:04+0100\n"
"Last-Translator: Christopher Chatham <chrislinux@gmail.com>\n"
"Language-Team: Spanish <es@li.org>\n"
@@ -15,31 +15,31 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: cache.c:665
+#: cache.c:671
#, c-format
msgid "failed to load names from %s: %m"
msgstr "no se pudo cargar nombres desde %s: %m"
-#: cache.c:699 dhcp.c:701
+#: cache.c:705 dhcp.c:715
#, fuzzy, c-format
msgid "bad address at %s line %d"
msgstr "nombre erróneo en %s línea %d"
-#: cache.c:745 dhcp.c:715
+#: cache.c:751 dhcp.c:729
#, c-format
msgid "bad name at %s line %d"
msgstr "nombre erróneo en %s línea %d"
-#: cache.c:752 dhcp.c:769
+#: cache.c:758 dhcp.c:783
#, c-format
msgid "read %s - %d addresses"
msgstr "direcciónes %s - %d leídas"
-#: cache.c:790
+#: cache.c:796
msgid "cleared cache"
msgstr "el caché fue liberado"
-#: cache.c:843
+#: cache.c:849
#, c-format
msgid ""
"not giving name %s to the DHCP lease of %s because the name exists in %s "
@@ -48,7 +48,7 @@ msgstr ""
"no otorgando nombre %s al arriendo DHCP de %s porque el nombre existe en %s "
"con dirección %s"
-#: cache.c:887
+#: cache.c:893
#, fuzzy, c-format
msgid ""
"time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache "
@@ -57,312 +57,342 @@ msgstr ""
"tiempo %lu, tamaño de caché %d, %d/%d inserciónes de caché reutilizaron "
"objetos no vencidos."
-#: util.c:153 option.c:1221
+#: util.c:154 option.c:579
msgid "could not get memory"
msgstr "no se pudo conseguir memoria"
-#: util.c:176
+#: util.c:177
#, c-format
msgid "%s at line %d of %%s"
msgstr "%s en línea %d de %%s"
-#: util.c:183
+#: util.c:184
msgid "FAILED to start up"
msgstr "el inicio ha FALLADO"
-#: util.c:304
+#: util.c:305
#, c-format
msgid "infinite"
msgstr "infinito"
-#: option.c:147
+#: option.c:164
msgid "Specify local address(es) to listen on."
msgstr "Especificar dirección(es) locales dónde escuchar."
-#: option.c:148
+#: option.c:165
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:149
+#: option.c:166
msgid "Fake reverse lookups for RFC1918 private address ranges."
msgstr ""
"Falsificar búsquedas reversas para rangos de dirección privados RFC1918."
-#: option.c:150
+#: option.c:167
msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
msgstr "Tratar ipaddr (dirección IP) como NXDOMAIN (derrota comodín Verisign)."
-#: option.c:151
+#: option.c:168
#, 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:152
+#: option.c:169
#, c-format
msgid "Specify configuration file (defaults to %s)."
msgstr "Especificar archivo de configuración (%s por predeterminado)."
-#: option.c:153
+#: option.c:170
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:154
+#: option.c:171
msgid "Do NOT forward queries with no domain part."
msgstr "NO reenviar búsquedas sin parte de dominio."
-#: option.c:155
+#: option.c:172
msgid "Return self-pointing MX records for local hosts."
msgstr "Retornar expedientes MX auto-señaladores para hosts locales."
-#: option.c:156
+#: option.c:173
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:157
+#: option.c:174
msgid "Don't forward spurious DNS requests from Windows hosts."
msgstr "No reenviar pedidos DNS falsos desde máquinas Windows."
-#: option.c:158
+#: option.c:175
msgid "Enable DHCP in the range given with lease duration."
msgstr "Habilitar DHCP dentro del rango brindado con duración del arriendo."
-#: option.c:159
+#: option.c:176
#, 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:160
+#: option.c:177
msgid "Set address or hostname for a specified machine."
msgstr "Fijar dirección o nombre de host para una máquina específica."
-#: option.c:161
+#: option.c:178
#, c-format
msgid "Do NOT load %s file."
msgstr "NO cargar archivo %s."
-#: option.c:162
+#: option.c:179
#, 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:163
+#: option.c:180
msgid "Specify interface(s) to listen on."
msgstr "Especificar interface(s) donde escuchar."
-#: option.c:164
+#: option.c:181
msgid "Specify interface(s) NOT to listen on."
msgstr "Especificar interface(s) donde NO escuchar."
-#: option.c:165
+#: option.c:182
msgid "Map DHCP user class to option set."
msgstr "Trazar clase de usuario DHCP a la opción fijada."
-#: option.c:166
+#: option.c:183
msgid "Don't do DHCP for hosts in option set."
msgstr "No hacer DHCP para hosts en la opción fijada."
-#: option.c:167
+#: option.c:184
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:168
+#: option.c:185
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:169
+#: option.c:186
#, c-format
msgid "Specify where to store DHCP leases (defaults to %s)."
msgstr "Especificar donde almacenar arriendos DHCP (%s por predeterminado)."
-#: option.c:170
+#: option.c:187
msgid "Return MX records for local hosts."
msgstr "Retornar expedientes MX para hosts locales."
-#: option.c:171
+#: option.c:188
msgid "Specify an MX record."
msgstr "Especificar un expediente MX."
-#: option.c:172
+#: option.c:189
msgid "Specify BOOTP options to DHCP server."
msgstr "Especificar opciones BOOTP a servidor DHCP."
-#: option.c:173
+#: option.c:190
#, 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:174
+#: option.c:191
msgid "Do NOT cache failed search results."
msgstr "NO almacenar en caché resultados de búsquedas fallidas."
-#: option.c:175
+#: option.c:192
#, 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:176
+#: option.c:193
msgid "Set extra options to be set to DHCP clients."
msgstr "Fijar opciones extras para ser enviadas a clientes DHCP."
-#: option.c:177
+#: option.c:194
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:178
+#: option.c:195
#, 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:179
+#: option.c:196
msgid "Log queries."
msgstr "Bitacorear búsquedas."
-#: option.c:180
+#: option.c:197
msgid "Force the originating port for upstream queries."
msgstr "Enforzar el puerto original para búsquedas upstream."
-#: option.c:181
+#: option.c:198
msgid "Do NOT read resolv.conf."
msgstr "NO leer resolv.conf."
-#: option.c:182
+#: option.c:199
#, c-format
msgid "Specify path to resolv.conf (defaults to %s)."
msgstr "Especificar el path hacia resolv.conf (%s por predeterminado)."
-#: option.c:183
+#: option.c:200
msgid "Specify address(es) of upstream servers with optional domains."
msgstr ""
"Especificar dirección(es) de servidores upstream con dominios opcionales."
-#: option.c:184
+#: option.c:201
msgid "Never forward queries to specified domains."
msgstr "Nunca reenviar búsquedas a dominios especificados."
-#: option.c:185
+#: option.c:202
msgid "Specify the domain to be assigned in DHCP leases."
msgstr "Especificar el dominio para ser asignado en arriendos DHCP."
-#: option.c:186
+#: option.c:203
msgid "Specify default target in an MX record."
msgstr "Especificar destino predeterminado en un expediente MX."
-#: option.c:187
+#: option.c:204
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:188
+#: option.c:205
#, 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:189
+#: option.c:206
msgid "Map DHCP vendor class to option set."
msgstr "Trazar clase de vendedor DHCP a opción fijada."
-#: option.c:190
+#: option.c:207
msgid "Display dnsmasq version and copyright information."
msgstr "Mostrar información sobre la versión y copyright de dnsmasq."
-#: option.c:191
+#: option.c:208
msgid "Translate IPv4 addresses from upstream servers."
msgstr "Traducir direcciones IPv4 desde servidores upstream."
-#: option.c:192
+#: option.c:209
msgid "Specify a SRV record."
msgstr "Especificar un expediente SRV."
-#: option.c:193
+#: option.c:210
msgid "Display this message."
msgstr "Mostrar este mensaje."
-#: option.c:194
-#, c-format
-msgid "Specify path of PID file. (defaults to %s)."
+#: option.c:211
+#, fuzzy, c-format
+msgid "Specify path of PID file (defaults to %s)."
msgstr "Especificar path de archivo PID (%s por predeterminado)."
-#: option.c:195
+#: option.c:212
#, 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:196
+#: option.c:213
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:197
+#: option.c:214
msgid "Specify TXT DNS record."
msgstr "Especificar expediente DNS TXT."
-#: option.c:198
+#: option.c:215
+#, fuzzy
+msgid "Specify PTR DNS record."
+msgstr "Especificar expediente DNS TXT."
+
+#: option.c:216
msgid "Bind only to interfaces in use."
msgstr "Acoplar solo a interfaces en uso."
-#: option.c:199
+#: option.c:217
#, c-format
msgid "Read DHCP static host information from %s."
msgstr "Leer información sobre hosts DHCP estáticos desde %s."
-#: option.c:200
+#: option.c:218
msgid "Enable the DBus interface for setting upstream servers, etc."
msgstr "Habilitar la interface DBus para fijar servidores upstream, etc."
-#: option.c:201
+#: option.c:219
msgid "Do not provide DHCP on this interface, only provide DNS."
msgstr "No proveer DHCP en esta interface, sólo proveer DNS."
-#: option.c:202
+#: option.c:220
msgid "Enable dynamic address allocation for bootp."
msgstr "Habilitar alocación dinámica de direcciónes para BOOTP."
-#: option.c:203
+#: option.c:221
#, fuzzy
msgid "Map MAC address (with wildcards) to option set."
msgstr "Trazar clase de vendedor DHCP a opción fijada."
-#: option.c:204
+#: option.c:223
+msgid "Treat DHCP requests on aliases as arriving from interface."
+msgstr ""
+
+#: option.c:225
msgid "Disable ICMP echo address checking in the DHCP server."
msgstr ""
"Deshabilitar verificación de direcciónes echo ICMP en el servidor DHCP."
-#: option.c:205
+#: option.c:226
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:206
+#: option.c:227
msgid "Read configuration from all the files in this directory."
msgstr "Leer configuración desde todos los archivos en este directorio."
-#: option.c:207
+#: option.c:228
#, fuzzy
msgid "Log to this syslog facility. (defaults to DAEMON)"
msgstr "Bitacorear a esta facilidad syslog."
-#: option.c:208
+#: option.c:229
msgid "Read leases at startup, but never write the lease file."
msgstr ""
-#: option.c:209
+#: option.c:230
#, fuzzy, c-format
msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
msgstr "Especificar número máximo de arriendos DHCP (%s por predeterminado)."
-#: option.c:210
+#: option.c:231
#, c-format
msgid "Clear DNS cache when reloading %s."
msgstr ""
-#: option.c:323
+#: option.c:232
+msgid "Ignore hostnames provided by DHCP clients."
+msgstr ""
+
+#: option.c:233
+msgid "Enable integrated read-only TFTP server."
+msgstr ""
+
+#: option.c:234
+msgid "Export files by TFTP only from the specified subtree."
+msgstr ""
+
+#: option.c:235
+msgid "Allow access only to files owned by the user running dnsmasq."
+msgstr ""
+
+#: option.c:236
+#, fuzzy, c-format
+msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
+msgstr "Especificar número máximo de arriendos DHCP (%s por predeterminado)."
+
+#: option.c:361
#, c-format
msgid ""
"Usage: dnsmasq [options]\n"
@@ -371,138 +401,147 @@ msgstr ""
"Modo de uso: dnsmasq [opciones]\n"
"\n"
-#: option.c:325
+#: option.c:363
#, 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:327
+#: option.c:365
#, c-format
msgid "Valid options are :\n"
msgstr "Opciones válidas son :\n"
-#: option.c:362
-msgid "extraneous parameter"
-msgstr "parámetro extraño"
+#: option.c:428
+msgid "bad dhcp-option"
+msgstr "dhcp-option erróneo"
-#: option.c:366
-msgid "missing parameter"
-msgstr "parámetro ausente"
+#: option.c:574
+msgid "bad domain in dhcp-option"
+msgstr "dominio erróneo en dhcp-option"
-#: option.c:388
+#: option.c:631
+msgid "dhcp-option too long"
+msgstr "opción dhcp-option demasiado larga"
+
+#: option.c:693
#, fuzzy, c-format
msgid "cannot access directory %s: %s"
msgstr "no se puede leer %s: %s"
-#: option.c:407
+#: option.c:712 tftp.c:230
#, fuzzy, c-format
msgid "cannot access %s: %s"
msgstr "no se puede leer %s: %s"
-#: option.c:484
+#: option.c:789
msgid "bad MX preference"
msgstr "preferencia MX errónea"
-#: option.c:493
+#: option.c:798
msgid "bad MX name"
msgstr "nombre MX erróneo"
-#: option.c:511
+#: option.c:816
msgid "bad MX target"
msgstr "destino MX erróneo"
-#: option.c:523
+#: option.c:828
msgid "cannot run scripts under uClinux"
msgstr "no se pueden correr guiónes bajo uClinux"
-#: option.c:722 option.c:733
+#: option.c:1027 option.c:1038
msgid "bad port"
msgstr "puerto erróneo"
-#: option.c:878
+#: option.c:1182
+msgid "bad bridge-interface"
+msgstr ""
+
+#: option.c:1226
msgid "bad dhcp-range"
msgstr "dhcp-range (rango DHCP) erróneo"
-#: option.c:907
+#: option.c:1255
msgid "only one netid tag allowed"
msgstr "solo una etiqueta netid permitida"
-#: option.c:952
+#: option.c:1300
msgid "inconsistent DHCP range"
msgstr "rango DHCP inconsistente"
-#: option.c:1137
+#: option.c:1485
msgid "bad dhcp-host"
msgstr "dhcp-host erróneo"
-#: option.c:1198
-msgid "bad dhcp-option"
-msgstr "dhcp-option erróneo"
-
-#: option.c:1216
-msgid "bad domain in dhcp-option"
-msgstr "dominio erróneo en dhcp-option"
-
-#: option.c:1386
-msgid "dhcp-option too long"
-msgstr "opción dhcp-option demasiado larga"
+#: option.c:1685
+#, fuzzy
+msgid "bad PTR record"
+msgstr "expediente SRV erróneo"
-#: option.c:1583
+#: option.c:1710
msgid "bad TXT record"
msgstr "expediente TXT erróneo"
-#: option.c:1615
+#: option.c:1742
msgid "TXT record string too long"
msgstr "expediente TXT demasiado largo"
-#: option.c:1654
+#: option.c:1781
msgid "bad SRV record"
msgstr "expediente SRV erróneo"
-#: option.c:1667
+#: option.c:1794
msgid "bad SRV target"
msgstr "destino SRV erróneo"
-#: option.c:1679
+#: option.c:1806
msgid "invalid port number"
msgstr "número de puerto inválido"
-#: option.c:1690
+#: option.c:1817
msgid "invalid priority"
msgstr "prioridad inválida"
-#: option.c:1701
+#: option.c:1828
msgid "invalid weight"
msgstr "peso inválido"
-#: option.c:1732
+#: option.c:1859
#, c-format
msgid "files nested too deep in %s"
msgstr ""
-#: option.c:1739
+#: option.c:1866 tftp.c:235 tftp.c:366
#, c-format
msgid "cannot read %s: %s"
msgstr "no se puede leer %s: %s"
-#: option.c:1781
+#: option.c:1909
msgid "missing \""
msgstr "falta \""
-#: option.c:1816
-msgid "error"
-msgstr "error"
-
-#: option.c:1820
+#: option.c:1948
msgid "bad option"
msgstr "opción errónea"
-#: option.c:1884
+#: option.c:1950
+msgid "extraneous parameter"
+msgstr "parámetro extraño"
+
+#: option.c:1952
+msgid "missing parameter"
+msgstr "parámetro ausente"
+
+#: option.c:1954
+msgid "error"
+msgstr "error"
+
+#: option.c:2022
#, c-format
msgid "Dnsmasq version %s %s\n"
msgstr "Dnsmasq versión %s %s\n"
-#: option.c:1885
+#: option.c:2023
#, c-format
msgid ""
"Compile time options %s\n"
@@ -511,63 +550,63 @@ msgstr ""
"Opciones de compilación %s\n"
"\n"
-#: option.c:1886
+#: option.c:2024
#, c-format
msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
msgstr "Este software viene SIN NINGUNA GARANTIA.\n"
-#: option.c:1887
+#: option.c:2025
#, 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:1888
+#: option.c:2026
#, c-format
msgid "under the terms of the GNU General Public License, version 2.\n"
msgstr "bajo los términos de la GNU General Public License, versión 2.\n"
-#: option.c:1899
+#: option.c:2037
msgid "try --help"
msgstr "pruebe --help"
-#: option.c:1901
+#: option.c:2039
msgid "try -w"
msgstr "pruebe -w"
-#: option.c:1904
+#: option.c:2042
#, fuzzy, c-format
msgid "bad command line options: %s"
msgstr "opciones de línea de comandos erróneas: %s."
-#: option.c:1955
+#: option.c:2093
#, c-format
msgid "cannot get host-name: %s"
msgstr "no se puede obtener host-name (nombre de host): %s"
-#: option.c:1983
+#: option.c:2121
msgid "only one resolv.conf file allowed in no-poll mode."
msgstr "solo un archivo resolv.conf permitido en modo no-poll."
-#: option.c:1993
+#: option.c:2131
msgid "must have exactly one resolv.conf to read domain from."
msgstr "debe haber exactamente un resolv.conf desde donde leer dominio."
-#: option.c:1996
+#: option.c:2134
#, fuzzy, c-format
msgid "failed to read %s: %s"
msgstr "no se pudo leer %s: %m"
-#: option.c:2014
+#: option.c:2152
#, c-format
msgid "no search directive found in %s"
msgstr "ninguna directiva de búsqueda encontrada en %s"
-#: forward.c:370
+#: forward.c:376
#, c-format
msgid "nameserver %s refused to do a recursive query"
msgstr "servidor DNS %s se reusó a hacer una búsqueda recursiva"
-#: isc.c:73 dnsmasq.c:482
+#: isc.c:73 dnsmasq.c:527
#, c-format
msgid "failed to access %s: %m"
msgstr "no se pudo accesar %s: %m"
@@ -577,7 +616,7 @@ msgstr "no se pudo accesar %s: %m"
msgid "failed to load %s: %m"
msgstr "no se pudo cargar %s: %m"
-#: isc.c:93 dnsmasq.c:504
+#: isc.c:93 dnsmasq.c:549
#, c-format
msgid "reading %s"
msgstr "leyendo %s"
@@ -593,64 +632,74 @@ msgid "Ignoring DHCP lease for %s because it has an illegal domain part"
msgstr ""
"Ignorando arriendo DHCP para %s porque tiene una parte ilegal de dominio"
-#: network.c:315 dnsmasq.c:132
+#: network.c:41
+#, fuzzy, c-format
+msgid "unknown interface %s in bridge-interface"
+msgstr "interface desconocida %s"
+
+#: network.c:379 dnsmasq.c:137
#, c-format
msgid "failed to create listening socket: %s"
msgstr "no se pudo crear un socket escuchador: %s"
-#: network.c:322
+#: network.c:386
#, c-format
msgid "failed to set IPV6 options on listening socket: %s"
msgstr "no se pudo fijar opciones IPv6 sobre el socket escuchador: %s"
-#: network.c:340
+#: network.c:404
#, c-format
msgid "failed to bind listening socket for %s: %s"
msgstr "no se pudo acoplar socket escuchador para %s: %s"
-#: network.c:348
+#: network.c:412
#, c-format
msgid "failed to listen on socket: %s"
msgstr "no se pudo escuchar en el socket: %s"
-#: network.c:419
+#: network.c:423
+#, fuzzy, c-format
+msgid "failed to create TFTP socket: %s"
+msgstr "no se pudo crear un socket escuchador: %s"
+
+#: network.c:495
#, c-format
msgid "ignoring nameserver %s - local interface"
msgstr "ignorando servidor DNS %s - interface local"
-#: network.c:428
+#: network.c:504
#, c-format
msgid "ignoring nameserver %s - cannot make/bind socket: %m"
msgstr "ignorando servidor DNS %s - no se pudo crear/acoplar socket: %m"
-#: network.c:442
+#: network.c:518
msgid "domain"
msgstr "dominio"
-#: network.c:444
+#: network.c:520
msgid "unqualified"
msgstr "no calificado"
-#: network.c:444
+#: network.c:520
msgid "domains"
msgstr "dominios"
-#: network.c:447
+#: network.c:523
#, c-format
msgid "using local addresses only for %s %s"
msgstr "usando direcciones locales solo para %s %s"
-#: network.c:449
+#: network.c:525
#, c-format
msgid "using nameserver %s#%d for %s %s"
msgstr "usando servidor DNS %s#%d para %s %s"
-#: network.c:452
+#: network.c:528
#, c-format
msgid "using nameserver %s#%d"
msgstr "usando servidor DNS %s#%d"
-#: network.c:472
+#: network.c:548
#, c-format
msgid "failed to read %s: %m"
msgstr "no se pudo leer %s: %m"
@@ -662,104 +711,127 @@ msgstr ""
"Integración dhcpd ISC no disponible: fijar HAVE_ISC_READER en src/config.h"
#: dnsmasq.c:114
+#, fuzzy
+msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
+msgstr "DBus no disponible: fijar HAVE_DBUS en src/config.h"
+
+#: dnsmasq.c:119
#, c-format
msgid "failed to find list of interfaces: %s"
msgstr "no se pudo encontrar lista de interfaces: %s"
-#: dnsmasq.c:122
+#: dnsmasq.c:127
#, c-format
msgid "unknown interface %s"
msgstr "interface desconocida %s"
-#: dnsmasq.c:128
+#: dnsmasq.c:133
#, c-format
msgid "no interface with address %s"
msgstr "ninguna interface con dirección %s"
-#: dnsmasq.c:147
+#: dnsmasq.c:152
msgid "must set exactly one interface on broken systems without IP_RECVIF"
msgstr "debe fijarse exactamente una interface en sistemas rotos sin IP_RECVIF"
-#: dnsmasq.c:160 dnsmasq.c:609
+#: dnsmasq.c:165 dnsmasq.c:654
#, c-format
msgid "DBus error: %s"
msgstr "error DBus: %s"
-#: dnsmasq.c:163
+#: dnsmasq.c:168
msgid "DBus not available: set HAVE_DBUS in src/config.h"
msgstr "DBus no disponible: fijar HAVE_DBUS en src/config.h"
-#: dnsmasq.c:194
+#: dnsmasq.c:199
#, fuzzy, c-format
msgid "cannot create pipe: %s"
msgstr "no se puede leer pipe: %s"
-#: dnsmasq.c:337
+#: dnsmasq.c:342
#, c-format
msgid "started, version %s cachesize %d"
msgstr "versión %s iniciada, tamaño de caché %d"
-#: dnsmasq.c:339
+#: dnsmasq.c:344
#, c-format
msgid "started, version %s cache disabled"
msgstr "versión %s iniciada, caché deshabilitado"
-#: dnsmasq.c:341
+#: dnsmasq.c:346
#, c-format
msgid "compile time options: %s"
msgstr "opciones de compilación: %s"
-#: dnsmasq.c:347
+#: dnsmasq.c:352
msgid "DBus support enabled: connected to system bus"
msgstr "soporte DBus habilitado: conectado a bus de sistema"
-#: dnsmasq.c:349
+#: dnsmasq.c:354
msgid "DBus support enabled: bus connection pending"
msgstr "soporte DBus habilitado: conección a bus pendiente"
-#: dnsmasq.c:354
+#: dnsmasq.c:359
msgid "setting --bind-interfaces option because of OS limitations"
msgstr ""
"fijando opción --bind-interfaces debido a limitaciones de sistema operativo"
-#: dnsmasq.c:359
+#: dnsmasq.c:364
#, c-format
msgid "warning: interface %s does not currently exist"
msgstr "advertencia: interface %s no existe actualmente"
-#: dnsmasq.c:364
+#: dnsmasq.c:369
msgid "warning: ignoring resolv-file flag because no-resolv is set"
msgstr ""
-#: dnsmasq.c:378
+#: dnsmasq.c:383
#, c-format
msgid "DHCP, static leases only on %.0s%s, lease time %s"
msgstr "DHCP, arriendos estáticos solo en %.0s%s, tiempo de arriendo %s"
-#: dnsmasq.c:379
+#: dnsmasq.c:384
#, c-format
msgid "DHCP, IP range %s -- %s, lease time %s"
msgstr "DHCP, rango de IPs %s -- %s, tiempo de arriendo %s"
-#: dnsmasq.c:389
+#: dnsmasq.c:400
+msgid "root is "
+msgstr ""
+
+#: dnsmasq.c:400
+#, fuzzy
+msgid "enabled"
+msgstr "deshabilitado"
+
+#: dnsmasq.c:402
+msgid "secure mode"
+msgstr ""
+
+#: dnsmasq.c:422
+#, c-format
+msgid "restricting maximum simultaneous TFTP transfers to %d"
+msgstr ""
+
+#: dnsmasq.c:433
#, c-format
msgid "warning: setting capabilities failed: %m"
msgstr "advertencia: configuración de capacidades ha fallado: %m"
-#: dnsmasq.c:391
+#: dnsmasq.c:435
msgid "running as root"
msgstr "corriendo como root"
-#: dnsmasq.c:515
+#: dnsmasq.c:560
#, fuzzy, c-format
msgid "no servers found in %s, will retry"
msgstr "ninguna directiva de búsqueda encontrada en %s"
-#: dnsmasq.c:574
+#: dnsmasq.c:619
msgid "exiting on receipt of SIGTERM"
msgstr "saliendo al haber recibido SIGTERM"
-#: dnsmasq.c:611
+#: dnsmasq.c:656
msgid "connected to system DBus"
msgstr "conectado a DBus de sistema"
@@ -793,27 +865,32 @@ msgstr "no se puede crear socket crudo ICMP: %s."
msgid "duplicate IP address %s in dhcp-config directive."
msgstr "dirección IP duplicada en directiva dhcp-config."
-#: dhcp.c:336
+#: dhcp.c:219
+#, c-format
+msgid "DHCP packet received on %s which has no address"
+msgstr ""
+
+#: dhcp.c:350
#, 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:653
+#: dhcp.c:667
#, c-format
msgid "failed to read %s:%m"
msgstr "no se pudo leer %s:%m"
-#: dhcp.c:688
+#: dhcp.c:702
#, fuzzy, c-format
msgid "bad line at %s line %d"
msgstr "nombre erróneo en %s línea %d"
-#: dhcp.c:795
+#: dhcp.c:809
#, c-format
msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr "dirección IP duplicada %s (%s) en directiva dhcp-config"
-#: dhcp.c:831
+#: dhcp.c:845
#, c-format
msgid "Ignoring DHCP host name %s because it has an illegal domain part"
msgstr ""
@@ -860,7 +937,7 @@ msgstr "vía"
msgid "disabled"
msgstr "deshabilitado"
-#: rfc2131.c:324 rfc2131.c:762
+#: rfc2131.c:324 rfc2131.c:763
msgid "address in use"
msgstr "dirección en uso"
@@ -868,88 +945,88 @@ msgstr "dirección en uso"
msgid "no address configured"
msgstr "ninguna dirección configurada"
-#: rfc2131.c:340 rfc2131.c:631
+#: rfc2131.c:340 rfc2131.c:630
msgid "no address available"
msgstr "ninguna dirección disponible"
-#: rfc2131.c:349 rfc2131.c:772
+#: rfc2131.c:349 rfc2131.c:773
msgid "no leases left"
msgstr "no queda ningún arriendo"
-#: rfc2131.c:352 rfc2131.c:736
+#: rfc2131.c:352 rfc2131.c:737
msgid "wrong network"
msgstr "red equivocada"
-#: rfc2131.c:559
+#: rfc2131.c:558
#, fuzzy, c-format
msgid "disabling DHCP static address %s for %s"
msgstr "deshabilitando dirección DHCP estática %s"
-#: rfc2131.c:580
+#: rfc2131.c:579
msgid "unknown lease"
msgstr "arriendo desconocido"
-#: rfc2131.c:589 rfc2131.c:873
+#: rfc2131.c:588 rfc2131.c:885
msgid "ignored"
msgstr "ignorado"
-#: rfc2131.c:605
+#: rfc2131.c:604
#, c-format
msgid "not using configured address %s because it is leased to %s"
msgstr "no usando dirección configurada %s porque esta arriendada a %s"
-#: rfc2131.c:614
+#: rfc2131.c:613
#, 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 esta siendo usada por el servidor"
-#: rfc2131.c:617
+#: rfc2131.c:616
#, fuzzy, c-format
msgid "not using configured address %s because it was previously declined"
msgstr "no usando dirección configurada %s porque esta arriendada a %s"
-#: rfc2131.c:699
+#: rfc2131.c:700
msgid "wrong address"
msgstr "dirección equivocada"
-#: rfc2131.c:712
+#: rfc2131.c:713
msgid "lease not found"
msgstr "arriendo no encontrado"
-#: rfc2131.c:744
+#: rfc2131.c:745
msgid "address not available"
msgstr "dirección no disponible"
-#: rfc2131.c:755
+#: rfc2131.c:756
msgid "static lease available"
msgstr "arriendo estático disponible"
-#: rfc2131.c:759
+#: rfc2131.c:760
msgid "address reserved"
msgstr "dirección reservada"
-#: rfc2131.c:765
+#: rfc2131.c:766
msgid "no unique-id"
msgstr "ningún unique-id (ID único)"
-#: rfc2131.c:1011
+#: rfc2131.c:1023
#, c-format
msgid "cannot send DHCP option %d: no space left in packet"
msgstr "no se puede enviar opción DHCP %d: no queda espacio en el paquete"
-#: rfc2131.c:1312
+#: rfc2131.c:1322
#, c-format
msgid "More than one vendor class matches, using %s"
msgstr "Más de una clase de vendedor coincide, usando %s"
-#: netlink.c:51
+#: netlink.c:59
#, fuzzy, c-format
msgid "cannot create netlink socket: %s"
msgstr "no se puede crear socket netlink: %s"
-#: netlink.c:224
+#: netlink.c:232
#, fuzzy, c-format
msgid "netlink returns error: %s"
msgstr "netlink retorna error: %s"
@@ -992,6 +1069,31 @@ msgstr ""
msgid "failed to execute %s: %m"
msgstr "no se pudo ejecutar %s: %m"
+#: tftp.c:157
+#, c-format
+msgid "unsupported request from %s"
+msgstr ""
+
+#: tftp.c:226
+#, fuzzy, c-format
+msgid "file %s not found"
+msgstr "arriendo no encontrado"
+
+#: tftp.c:293
+#, c-format
+msgid "TFTP sent %s to %s"
+msgstr ""
+
+#: tftp.c:343
+#, c-format
+msgid "TFTP error %d %s received from %s"
+msgstr ""
+
+#: tftp.c:374
+#, fuzzy, c-format
+msgid "TFTP failed sending %s to %s"
+msgstr "no se pudo leer %s: %m"
+
#~ msgid "forwarding table overflow: check for server loops."
#~ msgstr ""
#~ "desbordamiento en la tabla de reenvio: revisar si hay loops de servidor."
diff --git a/po/fi.po b/po/fi.po
index cd7145c..078e209 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dnsmasq 2.24\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-10-28 15:42+0100\n"
+"POT-Creation-Date: 2007-01-21 15:53+0000\n"
"PO-Revision-Date: 2005-11-28 22:05+0000\n"
"Last-Translator: Simon Kelley <simon@thekelleys.org.uk>\n"
"Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
@@ -15,536 +15,573 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: cache.c:665
+#: cache.c:671
#, c-format
msgid "failed to load names from %s: %m"
msgstr ""
-#: cache.c:699 dhcp.c:701
+#: cache.c:705 dhcp.c:715
#, c-format
msgid "bad address at %s line %d"
msgstr ""
-#: cache.c:745 dhcp.c:715
+#: cache.c:751 dhcp.c:729
#, c-format
msgid "bad name at %s line %d"
msgstr ""
-#: cache.c:752 dhcp.c:769
+#: cache.c:758 dhcp.c:783
#, c-format
msgid "read %s - %d addresses"
msgstr ""
-#: cache.c:790
+#: cache.c:796
msgid "cleared cache"
msgstr ""
-#: cache.c:843
+#: cache.c:849
#, 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:887
+#: cache.c:893
#, c-format
msgid ""
"time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache "
"entries."
msgstr ""
-#: util.c:153 option.c:1221
+#: util.c:154 option.c:579
msgid "could not get memory"
msgstr ""
-#: util.c:176
+#: util.c:177
#, c-format
msgid "%s at line %d of %%s"
msgstr ""
-#: util.c:183
+#: util.c:184
msgid "FAILED to start up"
msgstr ""
-#: util.c:304
+#: util.c:305
#, c-format
msgid "infinite"
msgstr ""
-#: option.c:147
+#: option.c:164
msgid "Specify local address(es) to listen on."
msgstr ""
-#: option.c:148
+#: option.c:165
msgid "Return ipaddr for all hosts in specified domains."
msgstr ""
-#: option.c:149
+#: option.c:166
msgid "Fake reverse lookups for RFC1918 private address ranges."
msgstr ""
-#: option.c:150
+#: option.c:167
msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
msgstr ""
-#: option.c:151
+#: option.c:168
#, c-format
msgid "Specify the size of the cache in entries (defaults to %s)."
msgstr ""
-#: option.c:152
+#: option.c:169
#, c-format
msgid "Specify configuration file (defaults to %s)."
msgstr ""
-#: option.c:153
+#: option.c:170
msgid "Do NOT fork into the background: run in debug mode."
msgstr ""
-#: option.c:154
+#: option.c:171
msgid "Do NOT forward queries with no domain part."
msgstr ""
-#: option.c:155
+#: option.c:172
msgid "Return self-pointing MX records for local hosts."
msgstr ""
-#: option.c:156
+#: option.c:173
msgid "Expand simple names in /etc/hosts with domain-suffix."
msgstr ""
-#: option.c:157
+#: option.c:174
msgid "Don't forward spurious DNS requests from Windows hosts."
msgstr ""
-#: option.c:158
+#: option.c:175
msgid "Enable DHCP in the range given with lease duration."
msgstr ""
-#: option.c:159
+#: option.c:176
#, c-format
msgid "Change to this group after startup (defaults to %s)."
msgstr ""
-#: option.c:160
+#: option.c:177
msgid "Set address or hostname for a specified machine."
msgstr ""
-#: option.c:161
+#: option.c:178
#, c-format
msgid "Do NOT load %s file."
msgstr ""
-#: option.c:162
+#: option.c:179
#, c-format
msgid "Specify a hosts file to be read in addition to %s."
msgstr ""
-#: option.c:163
+#: option.c:180
msgid "Specify interface(s) to listen on."
msgstr ""
-#: option.c:164
+#: option.c:181
msgid "Specify interface(s) NOT to listen on."
msgstr ""
-#: option.c:165
+#: option.c:182
msgid "Map DHCP user class to option set."
msgstr ""
-#: option.c:166
+#: option.c:183
msgid "Don't do DHCP for hosts in option set."
msgstr ""
-#: option.c:167
+#: option.c:184
msgid "Do NOT fork into the background, do NOT run in debug mode."
msgstr ""
-#: option.c:168
+#: option.c:185
msgid "Assume we are the only DHCP server on the local network."
msgstr ""
-#: option.c:169
+#: option.c:186
#, c-format
msgid "Specify where to store DHCP leases (defaults to %s)."
msgstr ""
-#: option.c:170
+#: option.c:187
msgid "Return MX records for local hosts."
msgstr ""
-#: option.c:171
+#: option.c:188
msgid "Specify an MX record."
msgstr ""
-#: option.c:172
+#: option.c:189
msgid "Specify BOOTP options to DHCP server."
msgstr ""
-#: option.c:173
+#: option.c:190
#, c-format
msgid "Do NOT poll %s file, reload only on SIGHUP."
msgstr ""
-#: option.c:174
+#: option.c:191
msgid "Do NOT cache failed search results."
msgstr ""
-#: option.c:175
+#: option.c:192
#, c-format
msgid "Use nameservers strictly in the order given in %s."
msgstr ""
-#: option.c:176
+#: option.c:193
msgid "Set extra options to be set to DHCP clients."
msgstr ""
-#: option.c:177
+#: option.c:194
msgid "Specify port to listen for DNS requests on (defaults to 53)."
msgstr ""
-#: option.c:178
+#: option.c:195
#, c-format
msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
msgstr ""
-#: option.c:179
+#: option.c:196
msgid "Log queries."
msgstr ""
-#: option.c:180
+#: option.c:197
msgid "Force the originating port for upstream queries."
msgstr ""
-#: option.c:181
+#: option.c:198
msgid "Do NOT read resolv.conf."
msgstr ""
-#: option.c:182
+#: option.c:199
#, c-format
msgid "Specify path to resolv.conf (defaults to %s)."
msgstr ""
-#: option.c:183
+#: option.c:200
msgid "Specify address(es) of upstream servers with optional domains."
msgstr ""
-#: option.c:184
+#: option.c:201
msgid "Never forward queries to specified domains."
msgstr ""
-#: option.c:185
+#: option.c:202
msgid "Specify the domain to be assigned in DHCP leases."
msgstr ""
-#: option.c:186
+#: option.c:203
msgid "Specify default target in an MX record."
msgstr ""
-#: option.c:187
+#: option.c:204
msgid "Specify time-to-live in seconds for replies from /etc/hosts."
msgstr ""
-#: option.c:188
+#: option.c:205
#, c-format
msgid "Change to this user after startup. (defaults to %s)."
msgstr ""
-#: option.c:189
+#: option.c:206
msgid "Map DHCP vendor class to option set."
msgstr ""
-#: option.c:190
+#: option.c:207
msgid "Display dnsmasq version and copyright information."
msgstr ""
-#: option.c:191
+#: option.c:208
msgid "Translate IPv4 addresses from upstream servers."
msgstr ""
-#: option.c:192
+#: option.c:209
msgid "Specify a SRV record."
msgstr ""
-#: option.c:193
+#: option.c:210
msgid "Display this message."
msgstr ""
-#: option.c:194
+#: option.c:211
#, c-format
-msgid "Specify path of PID file. (defaults to %s)."
+msgid "Specify path of PID file (defaults to %s)."
msgstr ""
-#: option.c:195
+#: option.c:212
#, c-format
msgid "Specify maximum number of DHCP leases (defaults to %s)."
msgstr ""
-#: option.c:196
+#: option.c:213
msgid "Answer DNS queries based on the interface a query was sent to."
msgstr ""
-#: option.c:197
+#: option.c:214
msgid "Specify TXT DNS record."
msgstr ""
-#: option.c:198
+#: option.c:215
+msgid "Specify PTR DNS record."
+msgstr ""
+
+#: option.c:216
msgid "Bind only to interfaces in use."
msgstr ""
-#: option.c:199
+#: option.c:217
#, c-format
msgid "Read DHCP static host information from %s."
msgstr ""
-#: option.c:200
+#: option.c:218
msgid "Enable the DBus interface for setting upstream servers, etc."
msgstr ""
-#: option.c:201
+#: option.c:219
msgid "Do not provide DHCP on this interface, only provide DNS."
msgstr ""
-#: option.c:202
+#: option.c:220
msgid "Enable dynamic address allocation for bootp."
msgstr ""
-#: option.c:203
+#: option.c:221
msgid "Map MAC address (with wildcards) to option set."
msgstr ""
-#: option.c:204
+#: option.c:223
+msgid "Treat DHCP requests on aliases as arriving from interface."
+msgstr ""
+
+#: option.c:225
msgid "Disable ICMP echo address checking in the DHCP server."
msgstr ""
-#: option.c:205
+#: option.c:226
msgid "Script to run on DHCP lease creation and destruction."
msgstr ""
-#: option.c:206
+#: option.c:227
msgid "Read configuration from all the files in this directory."
msgstr ""
-#: option.c:207
+#: option.c:228
msgid "Log to this syslog facility. (defaults to DAEMON)"
msgstr ""
-#: option.c:208
+#: option.c:229
msgid "Read leases at startup, but never write the lease file."
msgstr ""
-#: option.c:209
+#: option.c:230
#, c-format
msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
msgstr ""
-#: option.c:210
+#: option.c:231
#, c-format
msgid "Clear DNS cache when reloading %s."
msgstr ""
-#: option.c:323
+#: option.c:232
+msgid "Ignore hostnames provided by DHCP clients."
+msgstr ""
+
+#: option.c:233
+msgid "Enable integrated read-only TFTP server."
+msgstr ""
+
+#: option.c:234
+msgid "Export files by TFTP only from the specified subtree."
+msgstr ""
+
+#: option.c:235
+msgid "Allow access only to files owned by the user running dnsmasq."
+msgstr ""
+
+#: option.c:236
+#, c-format
+msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
+msgstr ""
+
+#: option.c:361
#, c-format
msgid ""
"Usage: dnsmasq [options]\n"
"\n"
msgstr ""
-#: option.c:325
+#: option.c:363
#, c-format
msgid "Use short options only on the command line.\n"
msgstr ""
-#: option.c:327
+#: option.c:365
#, c-format
msgid "Valid options are :\n"
msgstr ""
-#: option.c:362
-msgid "extraneous parameter"
+#: option.c:428
+msgid "bad dhcp-option"
msgstr ""
-#: option.c:366
-msgid "missing parameter"
+#: option.c:574
+msgid "bad domain in dhcp-option"
+msgstr ""
+
+#: option.c:631
+msgid "dhcp-option too long"
msgstr ""
-#: option.c:388
+#: option.c:693
#, c-format
msgid "cannot access directory %s: %s"
msgstr ""
-#: option.c:407
+#: option.c:712 tftp.c:230
#, c-format
msgid "cannot access %s: %s"
msgstr ""
-#: option.c:484
+#: option.c:789
msgid "bad MX preference"
msgstr ""
-#: option.c:493
+#: option.c:798
msgid "bad MX name"
msgstr ""
-#: option.c:511
+#: option.c:816
msgid "bad MX target"
msgstr ""
-#: option.c:523
+#: option.c:828
msgid "cannot run scripts under uClinux"
msgstr ""
-#: option.c:722 option.c:733
+#: option.c:1027 option.c:1038
msgid "bad port"
msgstr ""
-#: option.c:878
+#: option.c:1182
+msgid "bad bridge-interface"
+msgstr ""
+
+#: option.c:1226
msgid "bad dhcp-range"
msgstr ""
-#: option.c:907
+#: option.c:1255
msgid "only one netid tag allowed"
msgstr ""
-#: option.c:952
+#: option.c:1300
msgid "inconsistent DHCP range"
msgstr ""
-#: option.c:1137
+#: option.c:1485
msgid "bad dhcp-host"
msgstr ""
-#: option.c:1198
-msgid "bad dhcp-option"
-msgstr ""
-
-#: option.c:1216
-msgid "bad domain in dhcp-option"
-msgstr ""
-
-#: option.c:1386
-msgid "dhcp-option too long"
+#: option.c:1685
+msgid "bad PTR record"
msgstr ""
-#: option.c:1583
+#: option.c:1710
msgid "bad TXT record"
msgstr ""
-#: option.c:1615
+#: option.c:1742
msgid "TXT record string too long"
msgstr ""
-#: option.c:1654
+#: option.c:1781
msgid "bad SRV record"
msgstr ""
-#: option.c:1667
+#: option.c:1794
msgid "bad SRV target"
msgstr ""
-#: option.c:1679
+#: option.c:1806
msgid "invalid port number"
msgstr ""
-#: option.c:1690
+#: option.c:1817
msgid "invalid priority"
msgstr ""
-#: option.c:1701
+#: option.c:1828
msgid "invalid weight"
msgstr ""
-#: option.c:1732
+#: option.c:1859
#, c-format
msgid "files nested too deep in %s"
msgstr ""
-#: option.c:1739
+#: option.c:1866 tftp.c:235 tftp.c:366
#, c-format
msgid "cannot read %s: %s"
msgstr ""
-#: option.c:1781
+#: option.c:1909
msgid "missing \""
msgstr ""
-#: option.c:1816
-msgid "error"
+#: option.c:1948
+msgid "bad option"
msgstr ""
-#: option.c:1820
-msgid "bad option"
+#: option.c:1950
+msgid "extraneous parameter"
+msgstr ""
+
+#: option.c:1952
+msgid "missing parameter"
msgstr ""
-#: option.c:1884
+#: option.c:1954
+msgid "error"
+msgstr ""
+
+#: option.c:2022
#, c-format
msgid "Dnsmasq version %s %s\n"
msgstr ""
-#: option.c:1885
+#: option.c:2023
#, c-format
msgid ""
"Compile time options %s\n"
"\n"
msgstr ""
-#: option.c:1886
+#: option.c:2024
#, c-format
msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
msgstr ""
-#: option.c:1887
+#: option.c:2025
#, c-format
msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
msgstr ""
-#: option.c:1888
+#: option.c:2026
#, c-format
msgid "under the terms of the GNU General Public License, version 2.\n"
msgstr ""
-#: option.c:1899
+#: option.c:2037
msgid "try --help"
msgstr ""
-#: option.c:1901
+#: option.c:2039
msgid "try -w"
msgstr ""
-#: option.c:1904
+#: option.c:2042
#, c-format
msgid "bad command line options: %s"
msgstr ""
-#: option.c:1955
+#: option.c:2093
#, c-format
msgid "cannot get host-name: %s"
msgstr ""
-#: option.c:1983
+#: option.c:2121
msgid "only one resolv.conf file allowed in no-poll mode."
msgstr ""
-#: option.c:1993
+#: option.c:2131
msgid "must have exactly one resolv.conf to read domain from."
msgstr ""
-#: option.c:1996
+#: option.c:2134
#, c-format
msgid "failed to read %s: %s"
msgstr ""
-#: option.c:2014
+#: option.c:2152
#, c-format
msgid "no search directive found in %s"
msgstr ""
-#: forward.c:370
+#: forward.c:376
#, c-format
msgid "nameserver %s refused to do a recursive query"
msgstr ""
-#: isc.c:73 dnsmasq.c:482
+#: isc.c:73 dnsmasq.c:527
#, c-format
msgid "failed to access %s: %m"
msgstr ""
@@ -554,7 +591,7 @@ msgstr ""
msgid "failed to load %s: %m"
msgstr ""
-#: isc.c:93 dnsmasq.c:504
+#: isc.c:93 dnsmasq.c:549
#, c-format
msgid "reading %s"
msgstr ""
@@ -569,64 +606,74 @@ msgstr ""
msgid "Ignoring DHCP lease for %s because it has an illegal domain part"
msgstr ""
-#: network.c:315 dnsmasq.c:132
+#: network.c:41
+#, c-format
+msgid "unknown interface %s in bridge-interface"
+msgstr ""
+
+#: network.c:379 dnsmasq.c:137
#, c-format
msgid "failed to create listening socket: %s"
msgstr ""
-#: network.c:322
+#: network.c:386
#, c-format
msgid "failed to set IPV6 options on listening socket: %s"
msgstr ""
-#: network.c:340
+#: network.c:404
#, c-format
msgid "failed to bind listening socket for %s: %s"
msgstr ""
-#: network.c:348
+#: network.c:412
#, c-format
msgid "failed to listen on socket: %s"
msgstr ""
-#: network.c:419
+#: network.c:423
+#, c-format
+msgid "failed to create TFTP socket: %s"
+msgstr ""
+
+#: network.c:495
#, c-format
msgid "ignoring nameserver %s - local interface"
msgstr ""
-#: network.c:428
+#: network.c:504
#, c-format
msgid "ignoring nameserver %s - cannot make/bind socket: %m"
msgstr ""
-#: network.c:442
+#: network.c:518
msgid "domain"
msgstr ""
-#: network.c:444
+#: network.c:520
msgid "unqualified"
msgstr ""
-#: network.c:444
+#: network.c:520
msgid "domains"
msgstr ""
-#: network.c:447
+#: network.c:523
#, c-format
msgid "using local addresses only for %s %s"
msgstr ""
-#: network.c:449
+#: network.c:525
#, c-format
msgid "using nameserver %s#%d for %s %s"
msgstr ""
-#: network.c:452
+#: network.c:528
#, c-format
msgid "using nameserver %s#%d"
msgstr ""
-#: network.c:472
+#: network.c:548
#, c-format
msgid "failed to read %s: %m"
msgstr ""
@@ -637,103 +684,124 @@ msgid ""
msgstr ""
#: dnsmasq.c:114
+msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
+msgstr ""
+
+#: dnsmasq.c:119
#, c-format
msgid "failed to find list of interfaces: %s"
msgstr ""
-#: dnsmasq.c:122
+#: dnsmasq.c:127
#, c-format
msgid "unknown interface %s"
msgstr ""
-#: dnsmasq.c:128
+#: dnsmasq.c:133
#, c-format
msgid "no interface with address %s"
msgstr ""
-#: dnsmasq.c:147
+#: dnsmasq.c:152
msgid "must set exactly one interface on broken systems without IP_RECVIF"
msgstr ""
-#: dnsmasq.c:160 dnsmasq.c:609
+#: dnsmasq.c:165 dnsmasq.c:654
#, c-format
msgid "DBus error: %s"
msgstr ""
-#: dnsmasq.c:163
+#: dnsmasq.c:168
msgid "DBus not available: set HAVE_DBUS in src/config.h"
msgstr ""
-#: dnsmasq.c:194
+#: dnsmasq.c:199
#, c-format
msgid "cannot create pipe: %s"
msgstr ""
-#: dnsmasq.c:337
+#: dnsmasq.c:342
#, c-format
msgid "started, version %s cachesize %d"
msgstr ""
-#: dnsmasq.c:339
+#: dnsmasq.c:344
#, c-format
msgid "started, version %s cache disabled"
msgstr ""
-#: dnsmasq.c:341
+#: dnsmasq.c:346
#, c-format
msgid "compile time options: %s"
msgstr ""
-#: dnsmasq.c:347
+#: dnsmasq.c:352
msgid "DBus support enabled: connected to system bus"
msgstr ""
-#: dnsmasq.c:349
+#: dnsmasq.c:354
msgid "DBus support enabled: bus connection pending"
msgstr ""
-#: dnsmasq.c:354
+#: dnsmasq.c:359
msgid "setting --bind-interfaces option because of OS limitations"
msgstr ""
-#: dnsmasq.c:359
+#: dnsmasq.c:364
#, c-format
msgid "warning: interface %s does not currently exist"
msgstr ""
-#: dnsmasq.c:364
+#: dnsmasq.c:369
msgid "warning: ignoring resolv-file flag because no-resolv is set"
msgstr ""
-#: dnsmasq.c:378
+#: dnsmasq.c:383
#, c-format
msgid "DHCP, static leases only on %.0s%s, lease time %s"
msgstr ""
-#: dnsmasq.c:379
+#: dnsmasq.c:384
#, c-format
msgid "DHCP, IP range %s -- %s, lease time %s"
msgstr ""
-#: dnsmasq.c:389
+#: dnsmasq.c:400
+msgid "root is "
+msgstr ""
+
+#: dnsmasq.c:400
+msgid "enabled"
+msgstr ""
+
+#: dnsmasq.c:402
+msgid "secure mode"
+msgstr ""
+
+#: dnsmasq.c:422
+#, c-format
+msgid "restricting maximum simultaneous TFTP transfers to %d"
+msgstr ""
+
+#: dnsmasq.c:433
#, c-format
msgid "warning: setting capabilities failed: %m"
msgstr ""
-#: dnsmasq.c:391
+#: dnsmasq.c:435
msgid "running as root"
msgstr ""
-#: dnsmasq.c:515
+#: dnsmasq.c:560
#, c-format
msgid "no servers found in %s, will retry"
msgstr ""
-#: dnsmasq.c:574
+#: dnsmasq.c:619
msgid "exiting on receipt of SIGTERM"
msgstr ""
-#: dnsmasq.c:611
+#: dnsmasq.c:656
msgid "connected to system DBus"
msgstr ""
@@ -767,27 +835,32 @@ msgstr ""
msgid "duplicate IP address %s in dhcp-config directive."
msgstr ""
-#: dhcp.c:336
+#: dhcp.c:219
+#, c-format
+msgid "DHCP packet received on %s which has no address"
+msgstr ""
+
+#: dhcp.c:350
#, c-format
msgid "DHCP range %s -- %s is not consistent with netmask %s"
msgstr ""
-#: dhcp.c:653
+#: dhcp.c:667
#, c-format
msgid "failed to read %s:%m"
msgstr ""
-#: dhcp.c:688
+#: dhcp.c:702
#, c-format
msgid "bad line at %s line %d"
msgstr ""
-#: dhcp.c:795
+#: dhcp.c:809
#, c-format
msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr ""
-#: dhcp.c:831
+#: dhcp.c:845
#, c-format
msgid "Ignoring DHCP host name %s because it has an illegal domain part"
msgstr ""
@@ -833,7 +906,7 @@ msgstr ""
msgid "disabled"
msgstr ""
-#: rfc2131.c:324 rfc2131.c:762
+#: rfc2131.c:324 rfc2131.c:763
msgid "address in use"
msgstr ""
@@ -841,87 +914,87 @@ msgstr ""
msgid "no address configured"
msgstr ""
-#: rfc2131.c:340 rfc2131.c:631
+#: rfc2131.c:340 rfc2131.c:630
msgid "no address available"
msgstr ""
-#: rfc2131.c:349 rfc2131.c:772
+#: rfc2131.c:349 rfc2131.c:773
msgid "no leases left"
msgstr ""
-#: rfc2131.c:352 rfc2131.c:736
+#: rfc2131.c:352 rfc2131.c:737
msgid "wrong network"
msgstr ""
-#: rfc2131.c:559
+#: rfc2131.c:558
#, c-format
msgid "disabling DHCP static address %s for %s"
msgstr ""
-#: rfc2131.c:580
+#: rfc2131.c:579
msgid "unknown lease"
msgstr ""
-#: rfc2131.c:589 rfc2131.c:873
+#: rfc2131.c:588 rfc2131.c:885
msgid "ignored"
msgstr ""
-#: rfc2131.c:605
+#: rfc2131.c:604
#, c-format
msgid "not using configured address %s because it is leased to %s"
msgstr ""
-#: rfc2131.c:614
+#: rfc2131.c:613
#, c-format
msgid ""
"not using configured address %s because it is in use by the server or relay"
msgstr ""
-#: rfc2131.c:617
+#: rfc2131.c:616
#, c-format
msgid "not using configured address %s because it was previously declined"
msgstr ""
-#: rfc2131.c:699
+#: rfc2131.c:700
msgid "wrong address"
msgstr ""
-#: rfc2131.c:712
+#: rfc2131.c:713
msgid "lease not found"
msgstr ""
-#: rfc2131.c:744
+#: rfc2131.c:745
msgid "address not available"
msgstr ""
-#: rfc2131.c:755
+#: rfc2131.c:756
msgid "static lease available"
msgstr ""
-#: rfc2131.c:759
+#: rfc2131.c:760
msgid "address reserved"
msgstr ""
-#: rfc2131.c:765
+#: rfc2131.c:766
msgid "no unique-id"
msgstr ""
-#: rfc2131.c:1011
+#: rfc2131.c:1023
#, c-format
msgid "cannot send DHCP option %d: no space left in packet"
msgstr ""
-#: rfc2131.c:1312
+#: rfc2131.c:1322
#, c-format
msgid "More than one vendor class matches, using %s"
msgstr ""
-#: netlink.c:51
+#: netlink.c:59
#, c-format
msgid "cannot create netlink socket: %s"
msgstr ""
-#: netlink.c:224
+#: netlink.c:232
#, c-format
msgid "netlink returns error: %s"
msgstr ""
@@ -962,3 +1035,28 @@ msgstr ""
#, c-format
msgid "failed to execute %s: %m"
msgstr ""
+
+#: tftp.c:157
+#, c-format
+msgid "unsupported request from %s"
+msgstr ""
+
+#: tftp.c:226
+#, c-format
+msgid "file %s not found"
+msgstr ""
+
+#: tftp.c:293
+#, c-format
+msgid "TFTP sent %s to %s"
+msgstr ""
+
+#: tftp.c:343
+#, c-format
+msgid "TFTP error %d %s received from %s"
+msgstr ""
+
+#: tftp.c:374
+#, c-format
+msgid "TFTP failed sending %s to %s"
+msgstr ""
diff --git a/po/fr.po b/po/fr.po
index 5ca9381..2460597 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dnsmasq 2.34\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-10-28 15:42+0100\n"
+"POT-Creation-Date: 2007-01-21 15:53+0000\n"
"PO-Revision-Date: 2005-10-02 19:05+0100\n"
"Last-Translator: Lionel Tricon <lionel.tricon@free.fr>\n"
"Language-Team: French <traduc@traduc.org>\n"
@@ -16,31 +16,31 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-#: cache.c:665
+#: cache.c:671
#, c-format
msgid "failed to load names from %s: %m"
msgstr "Impossible de charger les noms à partir de %s : %m"
-#: cache.c:699 dhcp.c:701
+#: cache.c:705 dhcp.c:715
#, c-format
msgid "bad address at %s line %d"
msgstr "mauvaise adresse dans %s ligne %d"
-#: cache.c:745 dhcp.c:715
+#: cache.c:751 dhcp.c:729
#, c-format
msgid "bad name at %s line %d"
msgstr "mauvais nom dans %s ligne %d"
-#: cache.c:752 dhcp.c:769
+#: cache.c:758 dhcp.c:783
#, c-format
msgid "read %s - %d addresses"
msgstr "lecture %s - %d adresses"
-#: cache.c:790
+#: cache.c:796
msgid "cleared cache"
msgstr "cache vidé"
-#: cache.c:843
+#: cache.c:849
#, c-format
msgid ""
"not giving name %s to the DHCP lease of %s because the name exists in %s "
@@ -49,7 +49,7 @@ 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:887
+#: cache.c:893
#, c-format
msgid ""
"time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache "
@@ -58,324 +58,354 @@ msgstr ""
"temps %lu, taille de cache %d, %d/%d insertions dans le cache ont "
"réutilisées des entrées qui n'ont pas expirées"
-#: util.c:153 option.c:1221
+#: util.c:154 option.c:579
msgid "could not get memory"
msgstr "impossible d'allouer de la mémoire"
-#: util.c:176
+#: util.c:177
#, c-format
msgid "%s at line %d of %%s"
msgstr "%s à la ligne %d de %%s"
-#: util.c:183
+#: util.c:184
msgid "FAILED to start up"
msgstr "IMPOSSIBLE de démarrer"
-#: util.c:304
+#: util.c:305
#, c-format
msgid "infinite"
msgstr "illimité(e)"
-#: option.c:147
+#: option.c:164
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:148
+#: option.c:165
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:149
+#: option.c:166
msgid "Fake reverse lookups for RFC1918 private address ranges."
msgstr "Traduction inverse truquée pour la plage d'adresse privée RFC1918"
-#: option.c:150
+#: option.c:167
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:151
+#: option.c:168
#, 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:152
+#: option.c:169
#, c-format
msgid "Specify configuration file (defaults to %s)."
msgstr "Spécifie le nom du fichier de configuration (par défaut : %s)"
-#: option.c:153
+#: option.c:170
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:154
+#: option.c:171
msgid "Do NOT forward queries with no domain part."
msgstr "Ne retransmet pas les requêtes qui n'ont pas de domaine."
-#: option.c:155
+#: option.c:172
msgid "Return self-pointing MX records for local hosts."
msgstr "Retourne les champs MX pour les machines locales."
-#: option.c:156
+#: option.c:173
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:157
+#: option.c:174
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:158
+#: option.c:175
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:159
+#: option.c:176
#, 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:160
+#: option.c:177
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:161
+#: option.c:178
#, c-format
msgid "Do NOT load %s file."
msgstr "Ne charge PAS le fichier %s."
-#: option.c:162
+#: option.c:179
#, 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:163
+#: option.c:180
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:164
+#: option.c:181
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:165
+#: option.c:182
msgid "Map DHCP user class to option set."
msgstr "Associe les classes d'utilisateurs ('user class') DHCP aux options."
-#: option.c:166
+#: option.c:183
msgid "Don't do DHCP for hosts in option set."
msgstr "Ne pas autoriser DHCP pour les machines énumerées dans les options."
-#: option.c:167
+#: option.c:184
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:168
+#: option.c:185
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:169
+#: option.c:186
#, 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:170
+#: option.c:187
msgid "Return MX records for local hosts."
msgstr "Retourne les champs MX pour les machines locales."
-#: option.c:171
+#: option.c:188
msgid "Specify an MX record."
msgstr "Spécifie un champ MX."
-#: option.c:172
+#: option.c:189
msgid "Specify BOOTP options to DHCP server."
msgstr "Spécifie les options BOOTP pour le serveur DHCP."
-#: option.c:173
+#: option.c:190
#, 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:174
+#: option.c:191
msgid "Do NOT cache failed search results."
msgstr "Ne place pas en cache le résultat des requêtes qui ont echouées."
-#: option.c:175
+#: option.c:192
#, 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:176
+#: option.c:193
msgid "Set extra options to be set to DHCP clients."
msgstr "Options supplémentaires à associer aux clients DHCP."
-#: option.c:177
+#: option.c:194
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:178
+#: option.c:195
#, 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:179
+#: option.c:196
msgid "Log queries."
msgstr "Logue les requêtes."
-#: option.c:180
+#: option.c:197
msgid "Force the originating port for upstream queries."
msgstr "Force le port d'origine pour les requêtes vers les serveurs amonts."
-#: option.c:181
+#: option.c:198
msgid "Do NOT read resolv.conf."
msgstr "Ne pas lire le fichier resolv.conf."
-#: option.c:182
+#: option.c:199
#, 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:183
+#: option.c:200
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:184
+#: option.c:201
msgid "Never forward queries to specified domains."
msgstr "Ne jamais retransmettre les requêtes pour les domaines spécifiés."
-#: option.c:185
+#: option.c:202
msgid "Specify the domain to be assigned in DHCP leases."
msgstr "Spécifie le domaine qui doit etre assigné aux baux DHCP."
-#: option.c:186
+#: option.c:203
msgid "Specify default target in an MX record."
msgstr "Spécifie la cible par défaut dans un champ MX."
-#: option.c:187
+#: option.c:204
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:188
+#: option.c:205
#, 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:189
+#: option.c:206
msgid "Map DHCP vendor class to option set."
msgstr "Associe les classes de fournisseurs ('vendor class') DHCP aux options."
-#: option.c:190
+#: option.c:207
msgid "Display dnsmasq version and copyright information."
msgstr "Affiche la version de Dnsmasq et les informations liées au copyright."
-#: option.c:191
+#: option.c:208
msgid "Translate IPv4 addresses from upstream servers."
msgstr "Traduit les adresses IPV4 des serveurs amonts."
-#: option.c:192
+#: option.c:209
msgid "Specify a SRV record."
msgstr " Spécifie un champ SRV."
-#: option.c:193
+#: option.c:210
msgid "Display this message."
msgstr "Affiche ce message."
-#: option.c:194
-#, c-format
-msgid "Specify path of PID file. (defaults to %s)."
+#: option.c:211
+#, fuzzy, 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:195
+#: option.c:212
#, 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:196
+#: option.c:213
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:197
+#: option.c:214
msgid "Specify TXT DNS record."
msgstr "Spécifie un champ DNS TXT"
-#: option.c:198
+#: option.c:215
+#, fuzzy
+msgid "Specify PTR DNS record."
+msgstr "Spécifie un champ DNS TXT"
+
+#: option.c:216
msgid "Bind only to interfaces in use."
msgstr "Association uniquement aux interfaces réseau actuellement actives."
-#: option.c:199
+#: option.c:217
#, c-format
msgid "Read DHCP static host information from %s."
msgstr "Lecture des informations de DHCP statique à partir de %s."
-#: option.c:200
+#: option.c:218
msgid "Enable the DBus interface for setting upstream servers, etc."
msgstr ""
"Autorise l'interface DBus pour la configuration des serveurs amonts, etc."
-#: option.c:201
+#: option.c:219
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:202
+#: option.c:220
msgid "Enable dynamic address allocation for bootp."
msgstr "Autorise l'allocation dynamique d'adresse pour bootp."
-#: option.c:203
+#: option.c:221
#, fuzzy
msgid "Map MAC address (with wildcards) to option set."
msgstr "Associe l'adresse MAC (avec les jokers) aux options."
-#: option.c:204
+#: option.c:223
+msgid "Treat DHCP requests on aliases as arriving from interface."
+msgstr ""
+
+#: option.c:225
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:205
+#: option.c:226
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:206
+#: option.c:227
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:207
+#: option.c:228
#, fuzzy
msgid "Log to this syslog facility. (defaults to DAEMON)"
msgstr "Logue dans cette facilité syslog. (défaut : DAEMON)"
-#: option.c:208
+#: option.c:229
msgid "Read leases at startup, but never write the lease file."
msgstr "Lecture des baux au démarrage, mais aucune écriture de fichier de baux"
-#: option.c:209
+#: option.c:230
#, fuzzy, c-format
msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
msgstr "Spécifie le nombre maximum de baux DHCP (par défaut : %s)."
-#: option.c:210
+#: option.c:231
#, c-format
msgid "Clear DNS cache when reloading %s."
msgstr ""
-#: option.c:323
+#: option.c:232
+msgid "Ignore hostnames provided by DHCP clients."
+msgstr ""
+
+#: option.c:233
+msgid "Enable integrated read-only TFTP server."
+msgstr ""
+
+#: option.c:234
+msgid "Export files by TFTP only from the specified subtree."
+msgstr ""
+
+#: option.c:235
+msgid "Allow access only to files owned by the user running dnsmasq."
+msgstr ""
+
+#: option.c:236
+#, fuzzy, c-format
+msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
+msgstr "Spécifie le nombre maximum de baux DHCP (par défaut : %s)."
+
+#: option.c:361
#, c-format
msgid ""
"Usage: dnsmasq [options]\n"
@@ -384,138 +414,147 @@ msgstr ""
"Usage : dnsmasq [options]\n"
"\n"
-#: option.c:325
+#: option.c:363
#, 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:327
+#: option.c:365
#, c-format
msgid "Valid options are :\n"
msgstr "Les options valides sont :\n"
-#: option.c:362
-msgid "extraneous parameter"
-msgstr "paramètre en trop"
+#: option.c:428
+msgid "bad dhcp-option"
+msgstr "mauvais dhcp-option"
-#: option.c:366
-msgid "missing parameter"
-msgstr "paramètre manquant"
+#: option.c:574
+msgid "bad domain in dhcp-option"
+msgstr "mauvais domaine dans dhcp-option"
-#: option.c:388
+#: option.c:631
+msgid "dhcp-option too long"
+msgstr "dhcp-option trop long"
+
+#: option.c:693
#, fuzzy, c-format
msgid "cannot access directory %s: %s"
msgstr "Ne peut pas lire le répertoire %s : %s"
-#: option.c:407
+#: option.c:712 tftp.c:230
#, fuzzy, c-format
msgid "cannot access %s: %s"
msgstr "Ne peut pas lire %s : %s"
-#: option.c:484
+#: option.c:789
msgid "bad MX preference"
msgstr "Mauvaise préference MX"
-#: option.c:493
+#: option.c:798
msgid "bad MX name"
msgstr "mauvais nom MX"
-#: option.c:511
+#: option.c:816
msgid "bad MX target"
msgstr "mauvaise cible MX"
-#: option.c:523
+#: option.c:828
msgid "cannot run scripts under uClinux"
msgstr "ne peut exécuter de script sous uClinux"
-#: option.c:722 option.c:733
+#: option.c:1027 option.c:1038
msgid "bad port"
msgstr "mauvais port"
-#: option.c:878
+#: option.c:1182
+msgid "bad bridge-interface"
+msgstr ""
+
+#: option.c:1226
msgid "bad dhcp-range"
msgstr "mauvaise plage d'adresses DHCP (dhcp-range)"
-#: option.c:907
+#: option.c:1255
msgid "only one netid tag allowed"
msgstr "une seule étiquette netid est autorisée"
-#: option.c:952
+#: option.c:1300
msgid "inconsistent DHCP range"
msgstr "plage d'adresses DHCP incohérente"
-#: option.c:1137
+#: option.c:1485
msgid "bad dhcp-host"
msgstr "mauvais dhcp-host"
-#: option.c:1198
-msgid "bad dhcp-option"
-msgstr "mauvais dhcp-option"
-
-#: option.c:1216
-msgid "bad domain in dhcp-option"
-msgstr "mauvais domaine dans dhcp-option"
-
-#: option.c:1386
-msgid "dhcp-option too long"
-msgstr "dhcp-option trop long"
+#: option.c:1685
+#, fuzzy
+msgid "bad PTR record"
+msgstr "mauvais champ SRV"
-#: option.c:1583
+#: option.c:1710
msgid "bad TXT record"
msgstr "mauvais champ TXT"
-#: option.c:1615
+#: option.c:1742
msgid "TXT record string too long"
msgstr "chaîne du champ TXT trop longue"
-#: option.c:1654
+#: option.c:1781
msgid "bad SRV record"
msgstr "mauvais champ SRV"
-#: option.c:1667
+#: option.c:1794
msgid "bad SRV target"
msgstr "mauvaise cible SRV"
-#: option.c:1679
+#: option.c:1806
msgid "invalid port number"
msgstr "numéro de port invalide"
-#: option.c:1690
+#: option.c:1817
msgid "invalid priority"
msgstr "priorité invalide"
-#: option.c:1701
+#: option.c:1828
msgid "invalid weight"
msgstr "poids invalide"
-#: option.c:1732
+#: option.c:1859
#, c-format
msgid "files nested too deep in %s"
msgstr "trop de niveaux de récursion pour les fichiers dans %s"
-#: option.c:1739
+#: option.c:1866 tftp.c:235 tftp.c:366
#, c-format
msgid "cannot read %s: %s"
msgstr "Ne peut pas lire %s : %s"
-#: option.c:1781
+#: option.c:1909
msgid "missing \""
msgstr "il manque \""
-#: option.c:1816
-msgid "error"
-msgstr "erreur"
-
-#: option.c:1820
+#: option.c:1948
msgid "bad option"
msgstr "mauvaise option"
-#: option.c:1884
+#: option.c:1950
+msgid "extraneous parameter"
+msgstr "paramètre en trop"
+
+#: option.c:1952
+msgid "missing parameter"
+msgstr "paramètre manquant"
+
+#: option.c:1954
+msgid "error"
+msgstr "erreur"
+
+#: option.c:2022
#, c-format
msgid "Dnsmasq version %s %s\n"
msgstr "Version de Dnsmasq %s %s\n"
-#: option.c:1885
+#: option.c:2023
#, c-format
msgid ""
"Compile time options %s\n"
@@ -524,66 +563,66 @@ msgstr ""
"Options à la compilation %s\n"
"\n"
-#: option.c:1886
+#: option.c:2024
#, c-format
msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
msgstr "Ce logiciel est fourni sans AUCUNE GARANTIE.\n"
-#: option.c:1887
+#: option.c:2025
#, 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:1888
+#: option.c:2026
#, c-format
msgid "under the terms of the GNU General Public License, version 2.\n"
msgstr ""
"sous les termes de la licence GPL (GNU General Public License), version 2.\n"
-#: option.c:1899
+#: option.c:2037
msgid "try --help"
msgstr "essayez avec --help"
-#: option.c:1901
+#: option.c:2039
msgid "try -w"
msgstr "essayez avec -w"
-#: option.c:1904
+#: option.c:2042
#, fuzzy, c-format
msgid "bad command line options: %s"
msgstr "mauvaises options en ligne de commande : %s."
-#: option.c:1955
+#: option.c:2093
#, c-format
msgid "cannot get host-name: %s"
msgstr "ne peut pas obtenir le nom de la machine : %s"
-#: option.c:1983
+#: option.c:2121
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:1993
+#: option.c:2131
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:1996
+#: option.c:2134
#, fuzzy, c-format
msgid "failed to read %s: %s"
msgstr "impossible de lire %s : %m"
-#: option.c:2014
+#: option.c:2152
#, c-format
msgid "no search directive found in %s"
msgstr "pas de directive de recherche trouvée dans %s"
-#: forward.c:370
+#: forward.c:376
#, 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"
-#: isc.c:73 dnsmasq.c:482
+#: isc.c:73 dnsmasq.c:527
#, c-format
msgid "failed to access %s: %m"
msgstr "impossible d'accéder à %s : %m"
@@ -593,7 +632,7 @@ msgstr "impossible d'accéder à %s : %m"
msgid "failed to load %s: %m"
msgstr "impossible de charger %s : %m"
-#: isc.c:93 dnsmasq.c:504
+#: isc.c:93 dnsmasq.c:549
#, c-format
msgid "reading %s"
msgstr "Lecture de %s"
@@ -609,64 +648,74 @@ msgid "Ignoring DHCP lease for %s because it has an illegal domain part"
msgstr ""
"On ignore le bail DHCP pour %s car il possède un nom de domaine illégal"
-#: network.c:315 dnsmasq.c:132
+#: network.c:41
+#, fuzzy, c-format
+msgid "unknown interface %s in bridge-interface"
+msgstr "interface %s inconnue"
+
+#: network.c:379 dnsmasq.c:137
#, c-format
msgid "failed to create listening socket: %s"
msgstr "impossible de créer une socket de lecture : %s"
-#: network.c:322
+#: network.c:386
#, 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:340
+#: network.c:404
#, c-format
msgid "failed to bind listening socket for %s: %s"
msgstr "impossible de lier la socket de lecture pour %s : %s"
-#: network.c:348
+#: network.c:412
#, c-format
msgid "failed to listen on socket: %s"
msgstr "impossible de lire sur la socket : %s"
-#: network.c:419
+#: network.c:423
+#, fuzzy, c-format
+msgid "failed to create TFTP socket: %s"
+msgstr "impossible de créer une socket de lecture : %s"
+
+#: network.c:495
#, c-format
msgid "ignoring nameserver %s - local interface"
msgstr "ignore le serveur de nom %s - interface locale"
-#: network.c:428
+#: network.c:504
#, c-format
msgid "ignoring nameserver %s - cannot make/bind socket: %m"
msgstr "ignore le serveur de nom %s - ne peut construire/lier la socket : %m"
-#: network.c:442
+#: network.c:518
msgid "domain"
msgstr "domaine"
-#: network.c:444
+#: network.c:520
msgid "unqualified"
msgstr "non-qualifié(e)"
-#: network.c:444
+#: network.c:520
msgid "domains"
msgstr "domaines"
-#: network.c:447
+#: network.c:523
#, c-format
msgid "using local addresses only for %s %s"
msgstr "utilise les adresses locales seulement pour %s %s"
-#: network.c:449
+#: network.c:525
#, c-format
msgid "using nameserver %s#%d for %s %s"
msgstr "utilise le serveur de nom %s#%d pour %s %s"
-#: network.c:452
+#: network.c:528
#, c-format
msgid "using nameserver %s#%d"
msgstr "utilise le serveur de nom %s#%d"
-#: network.c:472
+#: network.c:548
#, c-format
msgid "failed to read %s: %m"
msgstr "impossible de lire %s : %m"
@@ -679,107 +728,130 @@ msgstr ""
"src/config.h"
#: dnsmasq.c:114
+#, fuzzy
+msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
+msgstr "DBus n'est pas disponible : activez HAVE_DBUS dans src/config.h"
+
+#: dnsmasq.c:119
#, c-format
msgid "failed to find list of interfaces: %s"
msgstr "impossible de trouver la liste des interfaces : %s"
-#: dnsmasq.c:122
+#: dnsmasq.c:127
#, c-format
msgid "unknown interface %s"
msgstr "interface %s inconnue"
-#: dnsmasq.c:128
+#: dnsmasq.c:133
#, c-format
msgid "no interface with address %s"
msgstr "pas d'interface avec l'adresse %s"
-#: dnsmasq.c:147
+#: dnsmasq.c:152
msgid "must set exactly one interface on broken systems without IP_RECVIF"
msgstr ""
"Une interface et une seule doit être déclarée sur les systèmes sans IP_RECVIF"
-#: dnsmasq.c:160 dnsmasq.c:609
+#: dnsmasq.c:165 dnsmasq.c:654
#, c-format
msgid "DBus error: %s"
msgstr "Erreur DBus : %s"
-#: dnsmasq.c:163
+#: dnsmasq.c:168
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:194
+#: dnsmasq.c:199
#, fuzzy, c-format
msgid "cannot create pipe: %s"
msgstr "Ne peut pas lire %s : %s"
-#: dnsmasq.c:337
+#: dnsmasq.c:342
#, c-format
msgid "started, version %s cachesize %d"
msgstr "demarré, version %s (taille de cache %d)"
-#: dnsmasq.c:339
+#: dnsmasq.c:344
#, c-format
msgid "started, version %s cache disabled"
msgstr "démarrage avec le cache désactivé (version %s)"
-#: dnsmasq.c:341
+#: dnsmasq.c:346
#, c-format
msgid "compile time options: %s"
msgstr "options à la compilation : %s"
-#: dnsmasq.c:347
+#: dnsmasq.c:352
msgid "DBus support enabled: connected to system bus"
msgstr "Support DBus autorisé : connecté au bus système"
-#: dnsmasq.c:349
+#: dnsmasq.c:354
msgid "DBus support enabled: bus connection pending"
msgstr "Support DBus autorisé : connexion au bus en attente"
-#: dnsmasq.c:354
+#: dnsmasq.c:359
msgid "setting --bind-interfaces option because of OS limitations"
msgstr ""
"active l'option --bind-interfaces à cause de limitations dans le système "
"d'exploitation"
-#: dnsmasq.c:359
+#: dnsmasq.c:364
#, c-format
msgid "warning: interface %s does not currently exist"
msgstr "attention : l'interface %s n'existe pas actuellement"
-#: dnsmasq.c:364
+#: dnsmasq.c:369
msgid "warning: ignoring resolv-file flag because no-resolv is set"
msgstr ""
"attention : le drapeau resolv-file sera ignoré car no-resolv a été spécifié"
-#: dnsmasq.c:378
+#: dnsmasq.c:383
#, c-format
msgid "DHCP, static leases only on %.0s%s, lease time %s"
msgstr "baux statiques DHCP seulement sur %.0s%s, durée de validité de bail %s"
-#: dnsmasq.c:379
+#: dnsmasq.c:384
#, c-format
msgid "DHCP, IP range %s -- %s, lease time %s"
msgstr "DHCP, plage d'adresses %s -- %s, durée de bail %s"
-#: dnsmasq.c:389
+#: dnsmasq.c:400
+msgid "root is "
+msgstr ""
+
+#: dnsmasq.c:400
+#, fuzzy
+msgid "enabled"
+msgstr "désactivé"
+
+#: dnsmasq.c:402
+msgid "secure mode"
+msgstr ""
+
+#: dnsmasq.c:422
+#, c-format
+msgid "restricting maximum simultaneous TFTP transfers to %d"
+msgstr ""
+
+#: dnsmasq.c:433
#, c-format
msgid "warning: setting capabilities failed: %m"
msgstr "attention : impossible de configurer la capacité %m"
-#: dnsmasq.c:391
+#: dnsmasq.c:435
msgid "running as root"
msgstr "executé en temps que root"
-#: dnsmasq.c:515
+#: dnsmasq.c:560
#, fuzzy, c-format
msgid "no servers found in %s, will retry"
msgstr "aucun serveur trouvé dans %s, va réessayer"
-#: dnsmasq.c:574
+#: dnsmasq.c:619
msgid "exiting on receipt of SIGTERM"
msgstr "sortie sur réception du signal SIGTERM"
-#: dnsmasq.c:611
+#: dnsmasq.c:656
msgid "connected to system DBus"
msgstr "connecté au systeme DBus"
@@ -813,29 +885,34 @@ msgstr "ne peut créer de socket en mode raw pour ICMP : %s."
msgid "duplicate IP address %s in dhcp-config directive."
msgstr "adresse IP %s dupliquée dans la directive dhcp-config."
-#: dhcp.c:336
+#: dhcp.c:219
+#, c-format
+msgid "DHCP packet received on %s which has no address"
+msgstr ""
+
+#: dhcp.c:350
#, 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:653
+#: dhcp.c:667
#, c-format
msgid "failed to read %s:%m"
msgstr "impossible de lire %s : %m"
-#: dhcp.c:688
+#: dhcp.c:702
#, fuzzy, c-format
msgid "bad line at %s line %d"
msgstr "mauvais nom dans %s ligne %d"
-#: dhcp.c:795
+#: dhcp.c:809
#, c-format
msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr "adresse IP %s (%s) dupliquée dans la directive dhcp-config."
-#: dhcp.c:831
+#: dhcp.c:845
#, c-format
msgid "Ignoring DHCP host name %s because it has an illegal domain part"
msgstr ""
@@ -883,7 +960,7 @@ msgstr "par l'intermédiaire de"
msgid "disabled"
msgstr "désactivé"
-#: rfc2131.c:324 rfc2131.c:762
+#: rfc2131.c:324 rfc2131.c:763
msgid "address in use"
msgstr "adresse déjà utilisée"
@@ -891,38 +968,38 @@ msgstr "adresse déjà utilisée"
msgid "no address configured"
msgstr "pas d'adresse configurée"
-#: rfc2131.c:340 rfc2131.c:631
+#: rfc2131.c:340 rfc2131.c:630
msgid "no address available"
msgstr "pas d'adresse disponible"
-#: rfc2131.c:349 rfc2131.c:772
+#: rfc2131.c:349 rfc2131.c:773
msgid "no leases left"
msgstr "plus aucun bail disponible"
-#: rfc2131.c:352 rfc2131.c:736
+#: rfc2131.c:352 rfc2131.c:737
msgid "wrong network"
msgstr "mauvais réseau"
-#: rfc2131.c:559
+#: rfc2131.c:558
#, fuzzy, c-format
msgid "disabling DHCP static address %s for %s"
msgstr "désactive l'adresse statique DHCP %s pour %s"
-#: rfc2131.c:580
+#: rfc2131.c:579
msgid "unknown lease"
msgstr "bail inconnu"
-#: rfc2131.c:589 rfc2131.c:873
+#: rfc2131.c:588 rfc2131.c:885
msgid "ignored"
msgstr "ignoré"
-#: rfc2131.c:605
+#: rfc2131.c:604
#, 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:614
+#: rfc2131.c:613
#, c-format
msgid ""
"not using configured address %s because it is in use by the server or relay"
@@ -930,54 +1007,54 @@ msgstr ""
"L'adresse statique %s ne sera pas utilisée car elle est utilisée par le "
"serveur ou un relai"
-#: rfc2131.c:617
+#: rfc2131.c:616
#, 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:699
+#: rfc2131.c:700
msgid "wrong address"
msgstr "mauvaise adresse"
-#: rfc2131.c:712
+#: rfc2131.c:713
msgid "lease not found"
msgstr "bail non trouvé"
-#: rfc2131.c:744
+#: rfc2131.c:745
msgid "address not available"
msgstr "adresse non disponible"
-#: rfc2131.c:755
+#: rfc2131.c:756
msgid "static lease available"
msgstr "bail statique disponible"
-#: rfc2131.c:759
+#: rfc2131.c:760
msgid "address reserved"
msgstr "adresse reservée"
-#: rfc2131.c:765
+#: rfc2131.c:766
msgid "no unique-id"
msgstr "pas d'identifiant unique"
-#: rfc2131.c:1011
+#: rfc2131.c:1023
#, c-format
msgid "cannot send DHCP option %d: no space left in packet"
msgstr ""
"Impossible d'envoyer l'option DHCP %d : pas assez d'espace dans le paquet"
-#: rfc2131.c:1312
+#: rfc2131.c:1322
#, c-format
msgid "More than one vendor class matches, using %s"
msgstr "Plusieurs classes de fournisseurs correspondent, %s sera utilisé"
-#: netlink.c:51
+#: netlink.c:59
#, fuzzy, c-format
msgid "cannot create netlink socket: %s"
msgstr "ne peux lier une socket netlink : %s"
-#: netlink.c:224
+#: netlink.c:232
#, fuzzy, c-format
msgid "netlink returns error: %s"
msgstr "Erreur netlink : %s"
@@ -1019,3 +1096,28 @@ msgstr "Le processus fils s'est terminé avec le statut %d"
#, fuzzy, c-format
msgid "failed to execute %s: %m"
msgstr "impossible d'accéder à %s : %m"
+
+#: tftp.c:157
+#, c-format
+msgid "unsupported request from %s"
+msgstr ""
+
+#: tftp.c:226
+#, fuzzy, c-format
+msgid "file %s not found"
+msgstr "bail non trouvé"
+
+#: tftp.c:293
+#, c-format
+msgid "TFTP sent %s to %s"
+msgstr ""
+
+#: tftp.c:343
+#, c-format
+msgid "TFTP error %d %s received from %s"
+msgstr ""
+
+#: tftp.c:374
+#, fuzzy, c-format
+msgid "TFTP failed sending %s to %s"
+msgstr "impossible de lire %s : %m"
diff --git a/po/id.po b/po/id.po
index 41ffa18..4653081 100644
--- a/po/id.po
+++ b/po/id.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dnsmasq 2.24\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-10-28 15:42+0100\n"
+"POT-Creation-Date: 2007-01-21 15:53+0000\n"
"PO-Revision-Date: 2005-10-07 11:45+0100\n"
"Last-Translator: Salman AS <sas@salman.or.id>\n"
"Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
@@ -15,36 +15,36 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
# OK
-#: cache.c:665
+#: cache.c:671
#, c-format
msgid "failed to load names from %s: %m"
msgstr "gagal memuat nama-nama dari %s: %m"
# OK
-#: cache.c:699 dhcp.c:701
+#: cache.c:705 dhcp.c:715
#, fuzzy, c-format
msgid "bad address at %s line %d"
msgstr "kesalahan nama pada %s baris %d"
# OK
-#: cache.c:745 dhcp.c:715
+#: cache.c:751 dhcp.c:729
#, c-format
msgid "bad name at %s line %d"
msgstr "kesalahan nama pada %s baris %d"
# OK
-#: cache.c:752 dhcp.c:769
+#: cache.c:758 dhcp.c:783
#, c-format
msgid "read %s - %d addresses"
msgstr "membaca %s - %d alamat"
# OK
-#: cache.c:790
+#: cache.c:796
msgid "cleared cache"
msgstr "cache telah dihapus"
# OK
-#: cache.c:843
+#: cache.c:849
#, c-format
msgid ""
"not giving name %s to the DHCP lease of %s because the name exists in %s "
@@ -54,7 +54,7 @@ msgstr ""
"sdengan alamat %s"
# OK
-#: cache.c:887
+#: cache.c:893
#, fuzzy, c-format
msgid ""
"time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache "
@@ -63,365 +63,397 @@ msgstr ""
"ukuran cache %d, %d/%d penyisipan cache menimpa cache yang belum kadaluwarsa"
# OK
-#: util.c:153 option.c:1221
+#: util.c:154 option.c:579
msgid "could not get memory"
msgstr "tidak bisa mendapatkan memory"
# OK
-#: util.c:176
+#: util.c:177
#, c-format
msgid "%s at line %d of %%s"
msgstr "%s pada baris %d dari %%s"
# OK
-#: util.c:183
+#: util.c:184
msgid "FAILED to start up"
msgstr "GAGAL untuk memulai"
# OK
-#: util.c:304
+#: util.c:305
#, c-format
msgid "infinite"
msgstr "tak terbatas"
# OK
-#: option.c:147
+#: option.c:164
msgid "Specify local address(es) to listen on."
msgstr "Tentukan alamat lokal untuk mendengarkan."
# OK
-#: option.c:148
+#: option.c:165
msgid "Return ipaddr for all hosts in specified domains."
msgstr "Menghasilkan ipaddr untuk semua host dalam domain yang dipilih."
# OK
-#: option.c:149
+#: option.c:166
msgid "Fake reverse lookups for RFC1918 private address ranges."
msgstr "Fake pencarian balik untuk alamat private sesuai dengan RFC1918."
# OK
-#: option.c:150
+#: option.c:167
msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
msgstr "Perlakukan ipaddr sebagai NXDOMAIN (mengalahkan wildcard Verisign)."
# OK
-#: option.c:151
+#: option.c:168
#, 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:152
+#: option.c:169
#, c-format
msgid "Specify configuration file (defaults to %s)."
msgstr "Tentukan file konfigurasi (default %s)."
# OK
-#: option.c:153
+#: option.c:170
msgid "Do NOT fork into the background: run in debug mode."
msgstr "JANGAN berjalan di background: berjalan dalam modus debug."
# OK
-#: option.c:154
+#: option.c:171
msgid "Do NOT forward queries with no domain part."
msgstr "JANGAN teruskan permintaan tanpa bagian domain."
# OK
-#: option.c:155
+#: option.c:172
msgid "Return self-pointing MX records for local hosts."
msgstr "Mengembalikan record MX untuk diri sendiri host-host lokal."
# OK
-#: option.c:156
+#: option.c:173
msgid "Expand simple names in /etc/hosts with domain-suffix."
msgstr "Melengkapi nama-nama di /etc/hosts dengan akhiran domain."
# OK
-#: option.c:157
+#: option.c:174
msgid "Don't forward spurious DNS requests from Windows hosts."
msgstr "Jangan meneruskan permintaan DNS spurious dari host-host Windows."
# OK
-#: option.c:158
+#: option.c:175
msgid "Enable DHCP in the range given with lease duration."
msgstr "Bolehkan DHCP dalam jangkauan yang diberikan dengan durasi lease."
# OK
-#: option.c:159
+#: option.c:176
#, c-format
msgid "Change to this group after startup (defaults to %s)."
msgstr "Ubah ke group ini setelah mulai (default %s)."
# OK
-#: option.c:160
+#: option.c:177
msgid "Set address or hostname for a specified machine."
msgstr "Setel alamat atau nama host untuk mesin yang disebutkan."
# OK
-#: option.c:161
+#: option.c:178
#, c-format
msgid "Do NOT load %s file."
msgstr "JANGAN muat file %s."
# OK
-#: option.c:162
+#: option.c:179
#, 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:163
+#: option.c:180
msgid "Specify interface(s) to listen on."
msgstr "Sebutkan antarmuka untuk mendengarkan."
# OK
-#: option.c:164
+#: option.c:181
msgid "Specify interface(s) NOT to listen on."
msgstr "Sebutkan antarmuka untuk TIDAK mendengarkan."
# OK
-#: option.c:165
+#: option.c:182
msgid "Map DHCP user class to option set."
msgstr "Petakan kelas user DHCP ke setelan yang dipilih."
# OK
-#: option.c:166
+#: option.c:183
msgid "Don't do DHCP for hosts in option set."
msgstr "Jangan menggunakan DHCP untuk host-host yang dipilih."
# OK
-#: option.c:167
+#: option.c:184
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:168
+#: option.c:185
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:169
+#: option.c:186
#, c-format
msgid "Specify where to store DHCP leases (defaults to %s)."
msgstr "Sebutkan lokasi untuk menyimpan lease DHCP (default %s)."
# OK
-#: option.c:170
+#: option.c:187
msgid "Return MX records for local hosts."
msgstr "Kembalikan rekord MX untuk host-host lokal."
# OK
-#: option.c:171
+#: option.c:188
msgid "Specify an MX record."
msgstr "Sebutkan sebuah rekord MX."
# OK
-#: option.c:172
+#: option.c:189
msgid "Specify BOOTP options to DHCP server."
msgstr "Sebutkan pilihan-pilihan BOOTP untuk DHCP server."
-#: option.c:173
+#: option.c:190
#, c-format
msgid "Do NOT poll %s file, reload only on SIGHUP."
msgstr "Jangan kumpulkan file %s, muat kembali saat SIGHUP."
# OK
-#: option.c:174
+#: option.c:191
msgid "Do NOT cache failed search results."
msgstr "JANGAN menyimpan hasil pencarian yang gagal."
# OK
-#: option.c:175
+#: option.c:192
#, 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:176
+#: option.c:193
msgid "Set extra options to be set to DHCP clients."
msgstr ""
"Setel pilihan-pilihan tambahan yang akan disetel untuk klien-klien DHCP."
# OK
-#: option.c:177
+#: option.c:194
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:178
+#: option.c:195
#, 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:179
+#: option.c:196
msgid "Log queries."
msgstr "Permintaan log."
# OK
-#: option.c:180
+#: option.c:197
msgid "Force the originating port for upstream queries."
msgstr "Paksa port asal untuk permintaan ke atas."
# OK
-#: option.c:181
+#: option.c:198
msgid "Do NOT read resolv.conf."
msgstr "JANGAN baca resolv.conf."
# OK
-#: option.c:182
+#: option.c:199
#, c-format
msgid "Specify path to resolv.conf (defaults to %s)."
msgstr "Sebutkan path ke resolv.conf (default %s)."
# OK
-#: option.c:183
+#: option.c:200
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:184
+#: option.c:201
msgid "Never forward queries to specified domains."
msgstr "JANGAN pernah meneruskan permintaan ke domain yang disebutkan."
# OK
-#: option.c:185
+#: option.c:202
msgid "Specify the domain to be assigned in DHCP leases."
msgstr "Sebutkan domain yang digunakan dalam lease DHCP."
# OK
-#: option.c:186
+#: option.c:203
msgid "Specify default target in an MX record."
msgstr "Sebutkan tujuan default dalam rekord MX."
# OK
-#: option.c:187
+#: option.c:204
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:188
+#: option.c:205
#, c-format
msgid "Change to this user after startup. (defaults to %s)."
msgstr "Ubah ke user ini setelah mulai. (default %s)."
# OK
-#: option.c:189
+#: option.c:206
msgid "Map DHCP vendor class to option set."
msgstr "Memetakan kelas vendor DHCP ke daftar pilihan."
# OK
-#: option.c:190
+#: option.c:207
msgid "Display dnsmasq version and copyright information."
msgstr "Menampilkan versi dan informasi hak cipta dnsmasq."
# OK
-#: option.c:191
+#: option.c:208
msgid "Translate IPv4 addresses from upstream servers."
msgstr "Terjemahkan alamat-alamat IPv4 dari server-server di atas."
# OK
-#: option.c:192
+#: option.c:209
msgid "Specify a SRV record."
msgstr "Sebutkan rekord SRV."
# OK
-#: option.c:193
+#: option.c:210
msgid "Display this message."
msgstr "Menampilkan pesan ini."
# OK
-#: option.c:194
-#, c-format
-msgid "Specify path of PID file. (defaults to %s)."
+#: option.c:211
+#, fuzzy, c-format
+msgid "Specify path of PID file (defaults to %s)."
msgstr "Sebutkan path file PID. (default %s)."
# OK
-#: option.c:195
+#: option.c:212
#, c-format
msgid "Specify maximum number of DHCP leases (defaults to %s)."
msgstr "Sebutkan jumlah maksimum lease DHCP (default %s)."
# OK
-#: option.c:196
+#: option.c:213
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:197
+#: option.c:214
msgid "Specify TXT DNS record."
msgstr "Sebutkan rekord TXT DNS."
# OK
-#: option.c:198
+#: option.c:215
+#, fuzzy
+msgid "Specify PTR DNS record."
+msgstr "Sebutkan rekord TXT DNS."
+
+# OK
+#: option.c:216
msgid "Bind only to interfaces in use."
msgstr "Hanya kaitkan ke antarmuka yang sedang digunakan saja."
# OK
-#: option.c:199
+#: option.c:217
#, c-format
msgid "Read DHCP static host information from %s."
msgstr "Baca informasi statik host DHCP dari %s."
# OK
-#: option.c:200
+#: option.c:218
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:201
+#: option.c:219
msgid "Do not provide DHCP on this interface, only provide DNS."
msgstr "JANGAN menyediakan DHCP pada antarmuka ini, hanya menyediakan DNS."
# OK
-#: option.c:202
+#: option.c:220
msgid "Enable dynamic address allocation for bootp."
msgstr "Mungkinkan alokasi alamat dinamis untuk bootp."
# OK
-#: option.c:203
+#: option.c:221
#, fuzzy
msgid "Map MAC address (with wildcards) to option set."
msgstr "Memetakan kelas vendor DHCP ke daftar pilihan."
-#: option.c:204
+#: option.c:223
+msgid "Treat DHCP requests on aliases as arriving from interface."
+msgstr ""
+
+#: option.c:225
msgid "Disable ICMP echo address checking in the DHCP server."
msgstr ""
-#: option.c:205
+#: option.c:226
msgid "Script to run on DHCP lease creation and destruction."
msgstr ""
-#: option.c:206
+#: option.c:227
msgid "Read configuration from all the files in this directory."
msgstr ""
# OK
-#: option.c:207
+#: option.c:228
#, fuzzy
msgid "Log to this syslog facility. (defaults to DAEMON)"
msgstr "Ubah ke user ini setelah mulai. (default %s)."
-#: option.c:208
+#: option.c:229
msgid "Read leases at startup, but never write the lease file."
msgstr ""
# OK
-#: option.c:209
+#: option.c:230
#, fuzzy, c-format
msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
msgstr "Sebutkan jumlah maksimum lease DHCP (default %s)."
-#: option.c:210
+#: option.c:231
#, c-format
msgid "Clear DNS cache when reloading %s."
msgstr ""
+#: option.c:232
+msgid "Ignore hostnames provided by DHCP clients."
+msgstr ""
+
+#: option.c:233
+msgid "Enable integrated read-only TFTP server."
+msgstr ""
+
+#: option.c:234
+msgid "Export files by TFTP only from the specified subtree."
+msgstr ""
+
+#: option.c:235
+msgid "Allow access only to files owned by the user running dnsmasq."
+msgstr ""
+
# OK
-#: option.c:323
+#: option.c:236
+#, fuzzy, c-format
+msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
+msgstr "Sebutkan jumlah maksimum lease DHCP (default %s)."
+
+# OK
+#: option.c:361
#, c-format
msgid ""
"Usage: dnsmasq [options]\n"
@@ -431,166 +463,176 @@ msgstr ""
"\n"
# OK
-#: option.c:325
+#: option.c:363
#, c-format
msgid "Use short options only on the command line.\n"
msgstr "Gunakan pilihan pendek saja pada perintah baris.\n"
# OK
-#: option.c:327
+#: option.c:365
#, c-format
msgid "Valid options are :\n"
msgstr "Pilihan yang boleh adalah:\n"
# OK
-#: option.c:362
-msgid "extraneous parameter"
-msgstr "parameter berlebihan"
+#: option.c:428
+msgid "bad dhcp-option"
+msgstr "dhcp-option salah"
# OK
-#: option.c:366
-msgid "missing parameter"
-msgstr "parameter kurang"
+#: option.c:574
+msgid "bad domain in dhcp-option"
+msgstr "domain dalam dhcp-option salah"
# OK
-#: option.c:388
+#: option.c:631
+msgid "dhcp-option too long"
+msgstr "dhcp-option terlalu panjang"
+
+# OK
+#: option.c:693
#, fuzzy, c-format
msgid "cannot access directory %s: %s"
msgstr "tidak bisa membaca %s: %s"
# OK
-#: option.c:407
+#: option.c:712 tftp.c:230
#, fuzzy, c-format
msgid "cannot access %s: %s"
msgstr "tidak bisa membaca %s: %s"
# OK
-#: option.c:484
+#: option.c:789
msgid "bad MX preference"
msgstr "kesukaan MX salah"
# OK
-#: option.c:493
+#: option.c:798
msgid "bad MX name"
msgstr "nama MX salah"
# OK
-#: option.c:511
+#: option.c:816
msgid "bad MX target"
msgstr "target MX salah"
-#: option.c:523
+#: option.c:828
msgid "cannot run scripts under uClinux"
msgstr ""
# OK
-#: option.c:722 option.c:733
+#: option.c:1027 option.c:1038
msgid "bad port"
msgstr "port salah"
+#: option.c:1182
+msgid "bad bridge-interface"
+msgstr ""
+
# OK
-#: option.c:878
+#: option.c:1226
msgid "bad dhcp-range"
msgstr "dhcp-range salah"
-#: option.c:907
+#: option.c:1255
msgid "only one netid tag allowed"
msgstr ""
# OK
-#: option.c:952
+#: option.c:1300
msgid "inconsistent DHCP range"
msgstr "jangkauan DHCP tidak konsisten"
# OK
-#: option.c:1137
+#: option.c:1485
msgid "bad dhcp-host"
msgstr "dhcp-host salah"
# OK
-#: option.c:1198
-msgid "bad dhcp-option"
-msgstr "dhcp-option salah"
-
-# OK
-#: option.c:1216
-msgid "bad domain in dhcp-option"
-msgstr "domain dalam dhcp-option salah"
-
-# OK
-#: option.c:1386
-msgid "dhcp-option too long"
-msgstr "dhcp-option terlalu panjang"
+#: option.c:1685
+#, fuzzy
+msgid "bad PTR record"
+msgstr "rekord SRV salah"
# OK
-#: option.c:1583
+#: option.c:1710
msgid "bad TXT record"
msgstr "rekord TXT salah"
# OK
-#: option.c:1615
+#: option.c:1742
msgid "TXT record string too long"
msgstr "string rekord TXT terlalu panjang"
# OK
-#: option.c:1654
+#: option.c:1781
msgid "bad SRV record"
msgstr "rekord SRV salah"
# OK
-#: option.c:1667
+#: option.c:1794
msgid "bad SRV target"
msgstr "target SRV salah"
# OK
-#: option.c:1679
+#: option.c:1806
msgid "invalid port number"
msgstr "nomor port tidak benar"
# OK
-#: option.c:1690
+#: option.c:1817
msgid "invalid priority"
msgstr "prioritas tidak benar"
# OK
-#: option.c:1701
+#: option.c:1828
msgid "invalid weight"
msgstr "weight tidak benar"
-#: option.c:1732
+#: option.c:1859
#, c-format
msgid "files nested too deep in %s"
msgstr ""
# OK
-#: option.c:1739
+#: option.c:1866 tftp.c:235 tftp.c:366
#, c-format
msgid "cannot read %s: %s"
msgstr "tidak bisa membaca %s: %s"
# OK
-#: option.c:1781
+#: option.c:1909
msgid "missing \""
msgstr "kurang \""
# OK
-#: option.c:1816
-msgid "error"
-msgstr "kesalahan"
-
-# OK
-#: option.c:1820
+#: option.c:1948
msgid "bad option"
msgstr "pilihan salah"
# OK
-#: option.c:1884
+#: option.c:1950
+msgid "extraneous parameter"
+msgstr "parameter berlebihan"
+
+# OK
+#: option.c:1952
+msgid "missing parameter"
+msgstr "parameter kurang"
+
+# OK
+#: option.c:1954
+msgid "error"
+msgstr "kesalahan"
+
+# OK
+#: option.c:2022
#, c-format
msgid "Dnsmasq version %s %s\n"
msgstr "Dnsmasq versi %s %s\n"
# OK
-#: option.c:1885
+#: option.c:2023
#, c-format
msgid ""
"Compile time options %s\n"
@@ -600,13 +642,13 @@ msgstr ""
"\n"
# OK
-#: option.c:1886
+#: option.c:2024
#, c-format
msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
msgstr "Perangkat lunak ini tersedia TANPA JAMINAN SEDIKITPUN.\n"
# OK
-#: option.c:1887
+#: option.c:2025
#, c-format
msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
msgstr ""
@@ -614,61 +656,61 @@ msgstr ""
"membagikannya\n"
# OK
-#: option.c:1888
+#: option.c:2026
#, c-format
msgid "under the terms of the GNU General Public License, version 2.\n"
msgstr "dengan aturan GNU General Public License, versi 2.\n"
-#: option.c:1899
+#: option.c:2037
msgid "try --help"
msgstr ""
-#: option.c:1901
+#: option.c:2039
msgid "try -w"
msgstr ""
# OK
-#: option.c:1904
+#: option.c:2042
#, fuzzy, c-format
msgid "bad command line options: %s"
msgstr "pilihan baris perintah salah: %s."
# OK
-#: option.c:1955
+#: option.c:2093
#, c-format
msgid "cannot get host-name: %s"
msgstr "tidak bisa mendapatkan host-name: %s"
# OK
-#: option.c:1983
+#: option.c:2121
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:1993
+#: option.c:2131
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:1996
+#: option.c:2134
#, fuzzy, c-format
msgid "failed to read %s: %s"
msgstr "gagal membaca %s: %m"
# OK
-#: option.c:2014
+#: option.c:2152
#, c-format
msgid "no search directive found in %s"
msgstr "tidak ditemukan direktif search di %s"
# OK
-#: forward.c:370
+#: forward.c:376
#, c-format
msgid "nameserver %s refused to do a recursive query"
msgstr "nameserver %s menolak melakukan resolusi rekursif"
# OK
-#: isc.c:73 dnsmasq.c:482
+#: isc.c:73 dnsmasq.c:527
#, c-format
msgid "failed to access %s: %m"
msgstr "gagal mengakses %s: %m"
@@ -680,7 +722,7 @@ msgid "failed to load %s: %m"
msgstr "gagal memuat %S: %m"
# OK
-#: isc.c:93 dnsmasq.c:504
+#: isc.c:93 dnsmasq.c:549
#, c-format
msgid "reading %s"
msgstr "membaca %s"
@@ -699,75 +741,87 @@ msgstr ""
"Mengabaikan lease DHCP untuk %s sebab terdapat bagian domain yang tidak sah"
# OK
-#: network.c:315 dnsmasq.c:132
+#: network.c:41
+#, fuzzy, c-format
+msgid "unknown interface %s in bridge-interface"
+msgstr "antarmuka tidak dikenal %s"
+
+# OK
+#: network.c:379 dnsmasq.c:137
#, c-format
msgid "failed to create listening socket: %s"
msgstr "gagal membuat socket: %s "
# OK
-#: network.c:322
+#: network.c:386
#, c-format
msgid "failed to set IPV6 options on listening socket: %s"
msgstr "gagal menyetel IPV6 pada socket: %s"
-#: network.c:340
+#: network.c:404
#, c-format
msgid "failed to bind listening socket for %s: %s"
msgstr "gagal mem-bind socket untuk mendengarkan %s: %s"
# OK
-#: network.c:348
+#: network.c:412
#, c-format
msgid "failed to listen on socket: %s"
msgstr "gagal mendengarkan di socket: %s"
# OK
-#: network.c:419
+#: network.c:423
+#, fuzzy, c-format
+msgid "failed to create TFTP socket: %s"
+msgstr "gagal membuat socket: %s "
+
+# OK
+#: network.c:495
#, c-format
msgid "ignoring nameserver %s - local interface"
msgstr "mengabaikan nameserver %s - antarmuka lokal"
# OK
-#: network.c:428
+#: network.c:504
#, c-format
msgid "ignoring nameserver %s - cannot make/bind socket: %m"
msgstr "mengabaikan nameserver %s - tak dapat membuat/mem-bind socket: %m"
# OK
-#: network.c:442
+#: network.c:518
msgid "domain"
msgstr "domain"
# OK
-#: network.c:444
+#: network.c:520
msgid "unqualified"
msgstr "tidak memenuhi syarat"
# OK
-#: network.c:444
+#: network.c:520
msgid "domains"
msgstr "domain-domain"
# OK
-#: network.c:447
+#: network.c:523
#, c-format
msgid "using local addresses only for %s %s"
msgstr "menggunakan alamat lokal saja untuk %s %s"
# OK
-#: network.c:449
+#: network.c:525
#, c-format
msgid "using nameserver %s#%d for %s %s"
msgstr "menggunakan nameserver %s#%d untuk %s %s"
# OK
-#: network.c:452
+#: network.c:528
#, c-format
msgid "using nameserver %s#%d"
msgstr "menggunakan nameserver %s#%d"
# OK
-#: network.c:472
+#: network.c:548
#, c-format
msgid "failed to read %s: %m"
msgstr "gagal membaca %s: %m"
@@ -782,123 +836,148 @@ msgstr ""
# OK
#: dnsmasq.c:114
+#, fuzzy
+msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
+msgstr "DBus tidak tersedia: setel HAVE_DBUS dalam src/config.h"
+
+# OK
+#: dnsmasq.c:119
#, c-format
msgid "failed to find list of interfaces: %s"
msgstr "gagal mendapatkan daftar antarmuka: %s"
# OK
-#: dnsmasq.c:122
+#: dnsmasq.c:127
#, c-format
msgid "unknown interface %s"
msgstr "antarmuka tidak dikenal %s"
# OK
-#: dnsmasq.c:128
+#: dnsmasq.c:133
#, c-format
msgid "no interface with address %s"
msgstr "tidak ada antarmuka dengan alamat %s"
# OK
-#: dnsmasq.c:147
+#: dnsmasq.c:152
msgid "must set exactly one interface on broken systems without IP_RECVIF"
msgstr ""
"harus menyetel satu antarmuka saja pada sistem yang tidak benar dengan "
"IP_RECVIF"
# OK
-#: dnsmasq.c:160 dnsmasq.c:609
+#: dnsmasq.c:165 dnsmasq.c:654
#, c-format
msgid "DBus error: %s"
msgstr "DBus error: %s"
# OK
-#: dnsmasq.c:163
+#: dnsmasq.c:168
msgid "DBus not available: set HAVE_DBUS in src/config.h"
msgstr "DBus tidak tersedia: setel HAVE_DBUS dalam src/config.h"
# OK
-#: dnsmasq.c:194
+#: dnsmasq.c:199
#, fuzzy, c-format
msgid "cannot create pipe: %s"
msgstr "tidak bisa membaca %s: %s"
# OK
-#: dnsmasq.c:337
+#: dnsmasq.c:342
#, c-format
msgid "started, version %s cachesize %d"
msgstr "dimulai, versi %s ukuran cache %d"
# OK
-#: dnsmasq.c:339
+#: dnsmasq.c:344
#, c-format
msgid "started, version %s cache disabled"
msgstr "dimulai, cache versi %s di disable"
# OK
-#: dnsmasq.c:341
+#: dnsmasq.c:346
#, c-format
msgid "compile time options: %s"
msgstr "pilihan-pilihan saat kompilasi: %s"
# OK
-#: dnsmasq.c:347
+#: dnsmasq.c:352
msgid "DBus support enabled: connected to system bus"
msgstr "dukungan DBus dimungkinkan: terkoneksi pada bus sistem"
# OK
-#: dnsmasq.c:349
+#: dnsmasq.c:354
msgid "DBus support enabled: bus connection pending"
msgstr "dukungan DBus dimungkinkan: koneksi bus ditunda"
# OK
-#: dnsmasq.c:354
+#: dnsmasq.c:359
msgid "setting --bind-interfaces option because of OS limitations"
msgstr "setelan opsi --bind-interfaces disebabkan keterbatasan OS"
# OK
-#: dnsmasq.c:359
+#: dnsmasq.c:364
#, c-format
msgid "warning: interface %s does not currently exist"
msgstr "peringatan: antarmuka %s tidak ada"
-#: dnsmasq.c:364
+#: dnsmasq.c:369
msgid "warning: ignoring resolv-file flag because no-resolv is set"
msgstr ""
# OK
-#: dnsmasq.c:378
+#: dnsmasq.c:383
#, c-format
msgid "DHCP, static leases only on %.0s%s, lease time %s"
msgstr "DHCP, lease static pada %.0s%s, waktu lease %s"
# OK
-#: dnsmasq.c:379
+#: dnsmasq.c:384
#, c-format
msgid "DHCP, IP range %s -- %s, lease time %s"
msgstr "DHCP, jangkaun IP %s -- %s, waktu lease %s"
-#: dnsmasq.c:389
+#: dnsmasq.c:400
+msgid "root is "
+msgstr ""
+
+# OK
+#: dnsmasq.c:400
+#, fuzzy
+msgid "enabled"
+msgstr "di disable"
+
+#: dnsmasq.c:402
+msgid "secure mode"
+msgstr ""
+
+#: dnsmasq.c:422
+#, c-format
+msgid "restricting maximum simultaneous TFTP transfers to %d"
+msgstr ""
+
+#: dnsmasq.c:433
#, c-format
msgid "warning: setting capabilities failed: %m"
msgstr ""
# OK
-#: dnsmasq.c:391
+#: dnsmasq.c:435
msgid "running as root"
msgstr "berjalan menggunakan root"
# OK
-#: dnsmasq.c:515
+#: dnsmasq.c:560
#, fuzzy, c-format
msgid "no servers found in %s, will retry"
msgstr "tidak ditemukan direktif search di %s"
-#: dnsmasq.c:574
+#: dnsmasq.c:619
msgid "exiting on receipt of SIGTERM"
msgstr "keluar karena menerima SIGTERM"
# OK
-#: dnsmasq.c:611
+#: dnsmasq.c:656
msgid "connected to system DBus"
msgstr "terhubung ke sistem DBus"
@@ -938,32 +1017,37 @@ msgstr "tidak dapat membuat socket ICMP raw: %s"
msgid "duplicate IP address %s in dhcp-config directive."
msgstr "alamat IP kembar %s dalam direktif dhcp-config"
+#: dhcp.c:219
+#, c-format
+msgid "DHCP packet received on %s which has no address"
+msgstr ""
+
# OK
-#: dhcp.c:336
+#: dhcp.c:350
#, 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:653
+#: dhcp.c:667
#, c-format
msgid "failed to read %s:%m"
msgstr "gagal membaca %s:%m"
# OK
-#: dhcp.c:688
+#: dhcp.c:702
#, fuzzy, c-format
msgid "bad line at %s line %d"
msgstr "kesalahan nama pada %s baris %d"
# OK
-#: dhcp.c:795
+#: dhcp.c:809
#, c-format
msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr "alamat IP kembar %s (%s) dalam direktif dhcp-config"
# OK
-#: dhcp.c:831
+#: dhcp.c:845
#, c-format
msgid "Ignoring DHCP host name %s because it has an illegal domain part"
msgstr ""
@@ -1019,7 +1103,7 @@ msgid "disabled"
msgstr "di disable"
# OK
-#: rfc2131.c:324 rfc2131.c:762
+#: rfc2131.c:324 rfc2131.c:763
msgid "address in use"
msgstr "alamat telah digunakan"
@@ -1029,100 +1113,100 @@ msgid "no address configured"
msgstr "tak ada alamat yang disetel"
# OK
-#: rfc2131.c:340 rfc2131.c:631
+#: rfc2131.c:340 rfc2131.c:630
msgid "no address available"
msgstr "tak ada alamat yang tersedia"
# OK
-#: rfc2131.c:349 rfc2131.c:772
+#: rfc2131.c:349 rfc2131.c:773
msgid "no leases left"
msgstr "tak ada lease yang tersisa"
# OK
-#: rfc2131.c:352 rfc2131.c:736
+#: rfc2131.c:352 rfc2131.c:737
msgid "wrong network"
msgstr "jaringan yang salah"
# OK
-#: rfc2131.c:559
+#: rfc2131.c:558
#, fuzzy, c-format
msgid "disabling DHCP static address %s for %s"
msgstr "men-disable alamat statik DHCP %s"
# OK
-#: rfc2131.c:580
+#: rfc2131.c:579
msgid "unknown lease"
msgstr "lease tidak diketahui"
# OK
-#: rfc2131.c:589 rfc2131.c:873
+#: rfc2131.c:588 rfc2131.c:885
msgid "ignored"
msgstr "diabaikan"
-#: rfc2131.c:605
+#: rfc2131.c:604
#, c-format
msgid "not using configured address %s because it is leased to %s"
msgstr ""
-#: rfc2131.c:614
+#: rfc2131.c:613
#, c-format
msgid ""
"not using configured address %s because it is in use by the server or relay"
msgstr ""
-#: rfc2131.c:617
+#: rfc2131.c:616
#, c-format
msgid "not using configured address %s because it was previously declined"
msgstr ""
# OK
-#: rfc2131.c:699
+#: rfc2131.c:700
msgid "wrong address"
msgstr "alamat salah"
# OK
-#: rfc2131.c:712
+#: rfc2131.c:713
msgid "lease not found"
msgstr "lease tak ditemukan"
# OK
-#: rfc2131.c:744
+#: rfc2131.c:745
msgid "address not available"
msgstr "alamat tak tersedia"
# OK
-#: rfc2131.c:755
+#: rfc2131.c:756
msgid "static lease available"
msgstr "lease statik tak tersedia"
# OK
-#: rfc2131.c:759
+#: rfc2131.c:760
msgid "address reserved"
msgstr "alamat telah dipesan"
-#: rfc2131.c:765
+#: rfc2131.c:766
msgid "no unique-id"
msgstr ""
-#: rfc2131.c:1011
+#: rfc2131.c:1023
#, c-format
msgid "cannot send DHCP option %d: no space left in packet"
msgstr ""
# OK
-#: rfc2131.c:1312
+#: rfc2131.c:1322
#, c-format
msgid "More than one vendor class matches, using %s"
msgstr "Lebih dari satu kelas vendor yang sesuai, menggunakan %s"
# OK
-#: netlink.c:51
+#: netlink.c:59
#, fuzzy, c-format
msgid "cannot create netlink socket: %s"
msgstr "tidak bisa mem-bind netlink socket: %s"
# OK
-#: netlink.c:224
+#: netlink.c:232
#, fuzzy, c-format
msgid "netlink returns error: %s"
msgstr "DBus error: %s"
@@ -1173,6 +1257,33 @@ msgstr ""
msgid "failed to execute %s: %m"
msgstr "gagal mengakses %s: %m"
+#: tftp.c:157
+#, c-format
+msgid "unsupported request from %s"
+msgstr ""
+
+# OK
+#: tftp.c:226
+#, fuzzy, c-format
+msgid "file %s not found"
+msgstr "lease tak ditemukan"
+
+#: tftp.c:293
+#, c-format
+msgid "TFTP sent %s to %s"
+msgstr ""
+
+#: tftp.c:343
+#, c-format
+msgid "TFTP error %d %s received from %s"
+msgstr ""
+
+# OK
+#: tftp.c:374
+#, fuzzy, c-format
+msgid "TFTP failed sending %s to %s"
+msgstr "gagal membaca %s: %m"
+
# OK
#~ msgid "forwarding table overflow: check for server loops."
#~ msgstr "meneruskan tabel overflow: memeriksa apakah terjadi loop server."
diff --git a/po/it.po b/po/it.po
index 859ce74..925377f 100644
--- a/po/it.po
+++ b/po/it.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dnsmasq 2.32\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-10-28 15:42+0100\n"
+"POT-Creation-Date: 2007-01-21 15:53+0000\n"
"PO-Revision-Date: 2006-05-22 11:09+0100\n"
"Last-Translator: Simon Kelley <simon@thekelleys.org.uk>\n"
"Language-Team: Italian <tp@lists.linux.it>\n"
@@ -15,536 +15,573 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: cache.c:665
+#: cache.c:671
#, c-format
msgid "failed to load names from %s: %m"
msgstr ""
-#: cache.c:699 dhcp.c:701
+#: cache.c:705 dhcp.c:715
#, c-format
msgid "bad address at %s line %d"
msgstr ""
-#: cache.c:745 dhcp.c:715
+#: cache.c:751 dhcp.c:729
#, c-format
msgid "bad name at %s line %d"
msgstr ""
-#: cache.c:752 dhcp.c:769
+#: cache.c:758 dhcp.c:783
#, c-format
msgid "read %s - %d addresses"
msgstr ""
-#: cache.c:790
+#: cache.c:796
msgid "cleared cache"
msgstr ""
-#: cache.c:843
+#: cache.c:849
#, 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:887
+#: cache.c:893
#, c-format
msgid ""
"time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache "
"entries."
msgstr ""
-#: util.c:153 option.c:1221
+#: util.c:154 option.c:579
msgid "could not get memory"
msgstr ""
-#: util.c:176
+#: util.c:177
#, c-format
msgid "%s at line %d of %%s"
msgstr ""
-#: util.c:183
+#: util.c:184
msgid "FAILED to start up"
msgstr ""
-#: util.c:304
+#: util.c:305
#, c-format
msgid "infinite"
msgstr ""
-#: option.c:147
+#: option.c:164
msgid "Specify local address(es) to listen on."
msgstr ""
-#: option.c:148
+#: option.c:165
msgid "Return ipaddr for all hosts in specified domains."
msgstr ""
-#: option.c:149
+#: option.c:166
msgid "Fake reverse lookups for RFC1918 private address ranges."
msgstr ""
-#: option.c:150
+#: option.c:167
msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
msgstr ""
-#: option.c:151
+#: option.c:168
#, c-format
msgid "Specify the size of the cache in entries (defaults to %s)."
msgstr ""
-#: option.c:152
+#: option.c:169
#, c-format
msgid "Specify configuration file (defaults to %s)."
msgstr ""
-#: option.c:153
+#: option.c:170
msgid "Do NOT fork into the background: run in debug mode."
msgstr ""
-#: option.c:154
+#: option.c:171
msgid "Do NOT forward queries with no domain part."
msgstr ""
-#: option.c:155
+#: option.c:172
msgid "Return self-pointing MX records for local hosts."
msgstr ""
-#: option.c:156
+#: option.c:173
msgid "Expand simple names in /etc/hosts with domain-suffix."
msgstr ""
-#: option.c:157
+#: option.c:174
msgid "Don't forward spurious DNS requests from Windows hosts."
msgstr ""
-#: option.c:158
+#: option.c:175
msgid "Enable DHCP in the range given with lease duration."
msgstr ""
-#: option.c:159
+#: option.c:176
#, c-format
msgid "Change to this group after startup (defaults to %s)."
msgstr ""
-#: option.c:160
+#: option.c:177
msgid "Set address or hostname for a specified machine."
msgstr ""
-#: option.c:161
+#: option.c:178
#, c-format
msgid "Do NOT load %s file."
msgstr ""
-#: option.c:162
+#: option.c:179
#, c-format
msgid "Specify a hosts file to be read in addition to %s."
msgstr ""
-#: option.c:163
+#: option.c:180
msgid "Specify interface(s) to listen on."
msgstr ""
-#: option.c:164
+#: option.c:181
msgid "Specify interface(s) NOT to listen on."
msgstr ""
-#: option.c:165
+#: option.c:182
msgid "Map DHCP user class to option set."
msgstr ""
-#: option.c:166
+#: option.c:183
msgid "Don't do DHCP for hosts in option set."
msgstr ""
-#: option.c:167
+#: option.c:184
msgid "Do NOT fork into the background, do NOT run in debug mode."
msgstr ""
-#: option.c:168
+#: option.c:185
msgid "Assume we are the only DHCP server on the local network."
msgstr ""
-#: option.c:169
+#: option.c:186
#, c-format
msgid "Specify where to store DHCP leases (defaults to %s)."
msgstr ""
-#: option.c:170
+#: option.c:187
msgid "Return MX records for local hosts."
msgstr ""
-#: option.c:171
+#: option.c:188
msgid "Specify an MX record."
msgstr ""
-#: option.c:172
+#: option.c:189
msgid "Specify BOOTP options to DHCP server."
msgstr ""
-#: option.c:173
+#: option.c:190
#, c-format
msgid "Do NOT poll %s file, reload only on SIGHUP."
msgstr ""
-#: option.c:174
+#: option.c:191
msgid "Do NOT cache failed search results."
msgstr ""
-#: option.c:175
+#: option.c:192
#, c-format
msgid "Use nameservers strictly in the order given in %s."
msgstr ""
-#: option.c:176
+#: option.c:193
msgid "Set extra options to be set to DHCP clients."
msgstr ""
-#: option.c:177
+#: option.c:194
msgid "Specify port to listen for DNS requests on (defaults to 53)."
msgstr ""
-#: option.c:178
+#: option.c:195
#, c-format
msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
msgstr ""
-#: option.c:179
+#: option.c:196
msgid "Log queries."
msgstr ""
-#: option.c:180
+#: option.c:197
msgid "Force the originating port for upstream queries."
msgstr ""
-#: option.c:181
+#: option.c:198
msgid "Do NOT read resolv.conf."
msgstr ""
-#: option.c:182
+#: option.c:199
#, c-format
msgid "Specify path to resolv.conf (defaults to %s)."
msgstr ""
-#: option.c:183
+#: option.c:200
msgid "Specify address(es) of upstream servers with optional domains."
msgstr ""
-#: option.c:184
+#: option.c:201
msgid "Never forward queries to specified domains."
msgstr ""
-#: option.c:185
+#: option.c:202
msgid "Specify the domain to be assigned in DHCP leases."
msgstr ""
-#: option.c:186
+#: option.c:203
msgid "Specify default target in an MX record."
msgstr ""
-#: option.c:187
+#: option.c:204
msgid "Specify time-to-live in seconds for replies from /etc/hosts."
msgstr ""
-#: option.c:188
+#: option.c:205
#, c-format
msgid "Change to this user after startup. (defaults to %s)."
msgstr ""
-#: option.c:189
+#: option.c:206
msgid "Map DHCP vendor class to option set."
msgstr ""
-#: option.c:190
+#: option.c:207
msgid "Display dnsmasq version and copyright information."
msgstr ""
-#: option.c:191
+#: option.c:208
msgid "Translate IPv4 addresses from upstream servers."
msgstr ""
-#: option.c:192
+#: option.c:209
msgid "Specify a SRV record."
msgstr ""
-#: option.c:193
+#: option.c:210
msgid "Display this message."
msgstr ""
-#: option.c:194
+#: option.c:211
#, c-format
-msgid "Specify path of PID file. (defaults to %s)."
+msgid "Specify path of PID file (defaults to %s)."
msgstr ""
-#: option.c:195
+#: option.c:212
#, c-format
msgid "Specify maximum number of DHCP leases (defaults to %s)."
msgstr ""
-#: option.c:196
+#: option.c:213
msgid "Answer DNS queries based on the interface a query was sent to."
msgstr ""
-#: option.c:197
+#: option.c:214
msgid "Specify TXT DNS record."
msgstr ""
-#: option.c:198
+#: option.c:215
+msgid "Specify PTR DNS record."
+msgstr ""
+
+#: option.c:216
msgid "Bind only to interfaces in use."
msgstr ""
-#: option.c:199
+#: option.c:217
#, c-format
msgid "Read DHCP static host information from %s."
msgstr ""
-#: option.c:200
+#: option.c:218
msgid "Enable the DBus interface for setting upstream servers, etc."
msgstr ""
-#: option.c:201
+#: option.c:219
msgid "Do not provide DHCP on this interface, only provide DNS."
msgstr ""
-#: option.c:202
+#: option.c:220
msgid "Enable dynamic address allocation for bootp."
msgstr ""
-#: option.c:203
+#: option.c:221
msgid "Map MAC address (with wildcards) to option set."
msgstr ""
-#: option.c:204
+#: option.c:223
+msgid "Treat DHCP requests on aliases as arriving from interface."
+msgstr ""
+
+#: option.c:225
msgid "Disable ICMP echo address checking in the DHCP server."
msgstr ""
-#: option.c:205
+#: option.c:226
msgid "Script to run on DHCP lease creation and destruction."
msgstr ""
-#: option.c:206
+#: option.c:227
msgid "Read configuration from all the files in this directory."
msgstr ""
-#: option.c:207
+#: option.c:228
msgid "Log to this syslog facility. (defaults to DAEMON)"
msgstr ""
-#: option.c:208
+#: option.c:229
msgid "Read leases at startup, but never write the lease file."
msgstr ""
-#: option.c:209
+#: option.c:230
#, c-format
msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
msgstr ""
-#: option.c:210
+#: option.c:231
#, c-format
msgid "Clear DNS cache when reloading %s."
msgstr ""
-#: option.c:323
+#: option.c:232
+msgid "Ignore hostnames provided by DHCP clients."
+msgstr ""
+
+#: option.c:233
+msgid "Enable integrated read-only TFTP server."
+msgstr ""
+
+#: option.c:234
+msgid "Export files by TFTP only from the specified subtree."
+msgstr ""
+
+#: option.c:235
+msgid "Allow access only to files owned by the user running dnsmasq."
+msgstr ""
+
+#: option.c:236
+#, c-format
+msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
+msgstr ""
+
+#: option.c:361
#, c-format
msgid ""
"Usage: dnsmasq [options]\n"
"\n"
msgstr ""
-#: option.c:325
+#: option.c:363
#, c-format
msgid "Use short options only on the command line.\n"
msgstr ""
-#: option.c:327
+#: option.c:365
#, c-format
msgid "Valid options are :\n"
msgstr ""
-#: option.c:362
-msgid "extraneous parameter"
+#: option.c:428
+msgid "bad dhcp-option"
msgstr ""
-#: option.c:366
-msgid "missing parameter"
+#: option.c:574
+msgid "bad domain in dhcp-option"
+msgstr ""
+
+#: option.c:631
+msgid "dhcp-option too long"
msgstr ""
-#: option.c:388
+#: option.c:693
#, c-format
msgid "cannot access directory %s: %s"
msgstr ""
-#: option.c:407
+#: option.c:712 tftp.c:230
#, c-format
msgid "cannot access %s: %s"
msgstr ""
-#: option.c:484
+#: option.c:789
msgid "bad MX preference"
msgstr ""
-#: option.c:493
+#: option.c:798
msgid "bad MX name"
msgstr ""
-#: option.c:511
+#: option.c:816
msgid "bad MX target"
msgstr ""
-#: option.c:523
+#: option.c:828
msgid "cannot run scripts under uClinux"
msgstr ""
-#: option.c:722 option.c:733
+#: option.c:1027 option.c:1038
msgid "bad port"
msgstr ""
-#: option.c:878
+#: option.c:1182
+msgid "bad bridge-interface"
+msgstr ""
+
+#: option.c:1226
msgid "bad dhcp-range"
msgstr ""
-#: option.c:907
+#: option.c:1255
msgid "only one netid tag allowed"
msgstr ""
-#: option.c:952
+#: option.c:1300
msgid "inconsistent DHCP range"
msgstr ""
-#: option.c:1137
+#: option.c:1485
msgid "bad dhcp-host"
msgstr ""
-#: option.c:1198
-msgid "bad dhcp-option"
-msgstr ""
-
-#: option.c:1216
-msgid "bad domain in dhcp-option"
-msgstr ""
-
-#: option.c:1386
-msgid "dhcp-option too long"
+#: option.c:1685
+msgid "bad PTR record"
msgstr ""
-#: option.c:1583
+#: option.c:1710
msgid "bad TXT record"
msgstr ""
-#: option.c:1615
+#: option.c:1742
msgid "TXT record string too long"
msgstr ""
-#: option.c:1654
+#: option.c:1781
msgid "bad SRV record"
msgstr ""
-#: option.c:1667
+#: option.c:1794
msgid "bad SRV target"
msgstr ""
-#: option.c:1679
+#: option.c:1806
msgid "invalid port number"
msgstr ""
-#: option.c:1690
+#: option.c:1817
msgid "invalid priority"
msgstr ""
-#: option.c:1701
+#: option.c:1828
msgid "invalid weight"
msgstr ""
-#: option.c:1732
+#: option.c:1859
#, c-format
msgid "files nested too deep in %s"
msgstr ""
-#: option.c:1739
+#: option.c:1866 tftp.c:235 tftp.c:366
#, c-format
msgid "cannot read %s: %s"
msgstr ""
-#: option.c:1781
+#: option.c:1909
msgid "missing \""
msgstr ""
-#: option.c:1816
-msgid "error"
+#: option.c:1948
+msgid "bad option"
msgstr ""
-#: option.c:1820
-msgid "bad option"
+#: option.c:1950
+msgid "extraneous parameter"
+msgstr ""
+
+#: option.c:1952
+msgid "missing parameter"
msgstr ""
-#: option.c:1884
+#: option.c:1954
+msgid "error"
+msgstr ""
+
+#: option.c:2022
#, c-format
msgid "Dnsmasq version %s %s\n"
msgstr ""
-#: option.c:1885
+#: option.c:2023
#, c-format
msgid ""
"Compile time options %s\n"
"\n"
msgstr ""
-#: option.c:1886
+#: option.c:2024
#, c-format
msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
msgstr ""
-#: option.c:1887
+#: option.c:2025
#, c-format
msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
msgstr ""
-#: option.c:1888
+#: option.c:2026
#, c-format
msgid "under the terms of the GNU General Public License, version 2.\n"
msgstr ""
-#: option.c:1899
+#: option.c:2037
msgid "try --help"
msgstr ""
-#: option.c:1901
+#: option.c:2039
msgid "try -w"
msgstr ""
-#: option.c:1904
+#: option.c:2042
#, c-format
msgid "bad command line options: %s"
msgstr ""
-#: option.c:1955
+#: option.c:2093
#, c-format
msgid "cannot get host-name: %s"
msgstr ""
-#: option.c:1983
+#: option.c:2121
msgid "only one resolv.conf file allowed in no-poll mode."
msgstr ""
-#: option.c:1993
+#: option.c:2131
msgid "must have exactly one resolv.conf to read domain from."
msgstr ""
-#: option.c:1996
+#: option.c:2134
#, c-format
msgid "failed to read %s: %s"
msgstr ""
-#: option.c:2014
+#: option.c:2152
#, c-format
msgid "no search directive found in %s"
msgstr ""
-#: forward.c:370
+#: forward.c:376
#, c-format
msgid "nameserver %s refused to do a recursive query"
msgstr ""
-#: isc.c:73 dnsmasq.c:482
+#: isc.c:73 dnsmasq.c:527
#, c-format
msgid "failed to access %s: %m"
msgstr ""
@@ -554,7 +591,7 @@ msgstr ""
msgid "failed to load %s: %m"
msgstr ""
-#: isc.c:93 dnsmasq.c:504
+#: isc.c:93 dnsmasq.c:549
#, c-format
msgid "reading %s"
msgstr ""
@@ -569,64 +606,74 @@ msgstr ""
msgid "Ignoring DHCP lease for %s because it has an illegal domain part"
msgstr ""
-#: network.c:315 dnsmasq.c:132
+#: network.c:41
+#, c-format
+msgid "unknown interface %s in bridge-interface"
+msgstr ""
+
+#: network.c:379 dnsmasq.c:137
#, c-format
msgid "failed to create listening socket: %s"
msgstr ""
-#: network.c:322
+#: network.c:386
#, c-format
msgid "failed to set IPV6 options on listening socket: %s"
msgstr ""
-#: network.c:340
+#: network.c:404
#, c-format
msgid "failed to bind listening socket for %s: %s"
msgstr ""
-#: network.c:348
+#: network.c:412
#, c-format
msgid "failed to listen on socket: %s"
msgstr ""
-#: network.c:419
+#: network.c:423
+#, c-format
+msgid "failed to create TFTP socket: %s"
+msgstr ""
+
+#: network.c:495
#, c-format
msgid "ignoring nameserver %s - local interface"
msgstr ""
-#: network.c:428
+#: network.c:504
#, c-format
msgid "ignoring nameserver %s - cannot make/bind socket: %m"
msgstr ""
-#: network.c:442
+#: network.c:518
msgid "domain"
msgstr ""
-#: network.c:444
+#: network.c:520
msgid "unqualified"
msgstr ""
-#: network.c:444
+#: network.c:520
msgid "domains"
msgstr ""
-#: network.c:447
+#: network.c:523
#, c-format
msgid "using local addresses only for %s %s"
msgstr ""
-#: network.c:449
+#: network.c:525
#, c-format
msgid "using nameserver %s#%d for %s %s"
msgstr ""
-#: network.c:452
+#: network.c:528
#, c-format
msgid "using nameserver %s#%d"
msgstr ""
-#: network.c:472
+#: network.c:548
#, c-format
msgid "failed to read %s: %m"
msgstr ""
@@ -637,103 +684,124 @@ msgid ""
msgstr ""
#: dnsmasq.c:114
+msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
+msgstr ""
+
+#: dnsmasq.c:119
#, c-format
msgid "failed to find list of interfaces: %s"
msgstr ""
-#: dnsmasq.c:122
+#: dnsmasq.c:127
#, c-format
msgid "unknown interface %s"
msgstr ""
-#: dnsmasq.c:128
+#: dnsmasq.c:133
#, c-format
msgid "no interface with address %s"
msgstr ""
-#: dnsmasq.c:147
+#: dnsmasq.c:152
msgid "must set exactly one interface on broken systems without IP_RECVIF"
msgstr ""
-#: dnsmasq.c:160 dnsmasq.c:609
+#: dnsmasq.c:165 dnsmasq.c:654
#, c-format
msgid "DBus error: %s"
msgstr ""
-#: dnsmasq.c:163
+#: dnsmasq.c:168
msgid "DBus not available: set HAVE_DBUS in src/config.h"
msgstr ""
-#: dnsmasq.c:194
+#: dnsmasq.c:199
#, c-format
msgid "cannot create pipe: %s"
msgstr ""
-#: dnsmasq.c:337
+#: dnsmasq.c:342
#, c-format
msgid "started, version %s cachesize %d"
msgstr ""
-#: dnsmasq.c:339
+#: dnsmasq.c:344
#, c-format
msgid "started, version %s cache disabled"
msgstr ""
-#: dnsmasq.c:341
+#: dnsmasq.c:346
#, c-format
msgid "compile time options: %s"
msgstr ""
-#: dnsmasq.c:347
+#: dnsmasq.c:352
msgid "DBus support enabled: connected to system bus"
msgstr ""
-#: dnsmasq.c:349
+#: dnsmasq.c:354
msgid "DBus support enabled: bus connection pending"
msgstr ""
-#: dnsmasq.c:354
+#: dnsmasq.c:359
msgid "setting --bind-interfaces option because of OS limitations"
msgstr ""
-#: dnsmasq.c:359
+#: dnsmasq.c:364
#, c-format
msgid "warning: interface %s does not currently exist"
msgstr ""
-#: dnsmasq.c:364
+#: dnsmasq.c:369
msgid "warning: ignoring resolv-file flag because no-resolv is set"
msgstr ""
-#: dnsmasq.c:378
+#: dnsmasq.c:383
#, c-format
msgid "DHCP, static leases only on %.0s%s, lease time %s"
msgstr ""
-#: dnsmasq.c:379
+#: dnsmasq.c:384
#, c-format
msgid "DHCP, IP range %s -- %s, lease time %s"
msgstr ""
-#: dnsmasq.c:389
+#: dnsmasq.c:400
+msgid "root is "
+msgstr ""
+
+#: dnsmasq.c:400
+msgid "enabled"
+msgstr ""
+
+#: dnsmasq.c:402
+msgid "secure mode"
+msgstr ""
+
+#: dnsmasq.c:422
+#, c-format
+msgid "restricting maximum simultaneous TFTP transfers to %d"
+msgstr ""
+
+#: dnsmasq.c:433
#, c-format
msgid "warning: setting capabilities failed: %m"
msgstr ""
-#: dnsmasq.c:391
+#: dnsmasq.c:435
msgid "running as root"
msgstr ""
-#: dnsmasq.c:515
+#: dnsmasq.c:560
#, c-format
msgid "no servers found in %s, will retry"
msgstr ""
-#: dnsmasq.c:574
+#: dnsmasq.c:619
msgid "exiting on receipt of SIGTERM"
msgstr ""
-#: dnsmasq.c:611
+#: dnsmasq.c:656
msgid "connected to system DBus"
msgstr ""
@@ -767,27 +835,32 @@ msgstr ""
msgid "duplicate IP address %s in dhcp-config directive."
msgstr ""
-#: dhcp.c:336
+#: dhcp.c:219
+#, c-format
+msgid "DHCP packet received on %s which has no address"
+msgstr ""
+
+#: dhcp.c:350
#, c-format
msgid "DHCP range %s -- %s is not consistent with netmask %s"
msgstr ""
-#: dhcp.c:653
+#: dhcp.c:667
#, c-format
msgid "failed to read %s:%m"
msgstr ""
-#: dhcp.c:688
+#: dhcp.c:702
#, c-format
msgid "bad line at %s line %d"
msgstr ""
-#: dhcp.c:795
+#: dhcp.c:809
#, c-format
msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr ""
-#: dhcp.c:831
+#: dhcp.c:845
#, c-format
msgid "Ignoring DHCP host name %s because it has an illegal domain part"
msgstr ""
@@ -833,7 +906,7 @@ msgstr ""
msgid "disabled"
msgstr ""
-#: rfc2131.c:324 rfc2131.c:762
+#: rfc2131.c:324 rfc2131.c:763
msgid "address in use"
msgstr ""
@@ -841,87 +914,87 @@ msgstr ""
msgid "no address configured"
msgstr ""
-#: rfc2131.c:340 rfc2131.c:631
+#: rfc2131.c:340 rfc2131.c:630
msgid "no address available"
msgstr ""
-#: rfc2131.c:349 rfc2131.c:772
+#: rfc2131.c:349 rfc2131.c:773
msgid "no leases left"
msgstr ""
-#: rfc2131.c:352 rfc2131.c:736
+#: rfc2131.c:352 rfc2131.c:737
msgid "wrong network"
msgstr ""
-#: rfc2131.c:559
+#: rfc2131.c:558
#, c-format
msgid "disabling DHCP static address %s for %s"
msgstr ""
-#: rfc2131.c:580
+#: rfc2131.c:579
msgid "unknown lease"
msgstr ""
-#: rfc2131.c:589 rfc2131.c:873
+#: rfc2131.c:588 rfc2131.c:885
msgid "ignored"
msgstr ""
-#: rfc2131.c:605
+#: rfc2131.c:604
#, c-format
msgid "not using configured address %s because it is leased to %s"
msgstr ""
-#: rfc2131.c:614
+#: rfc2131.c:613
#, c-format
msgid ""
"not using configured address %s because it is in use by the server or relay"
msgstr ""
-#: rfc2131.c:617
+#: rfc2131.c:616
#, c-format
msgid "not using configured address %s because it was previously declined"
msgstr ""
-#: rfc2131.c:699
+#: rfc2131.c:700
msgid "wrong address"
msgstr ""
-#: rfc2131.c:712
+#: rfc2131.c:713
msgid "lease not found"
msgstr ""
-#: rfc2131.c:744
+#: rfc2131.c:745
msgid "address not available"
msgstr ""
-#: rfc2131.c:755
+#: rfc2131.c:756
msgid "static lease available"
msgstr ""
-#: rfc2131.c:759
+#: rfc2131.c:760
msgid "address reserved"
msgstr ""
-#: rfc2131.c:765
+#: rfc2131.c:766
msgid "no unique-id"
msgstr ""
-#: rfc2131.c:1011
+#: rfc2131.c:1023
#, c-format
msgid "cannot send DHCP option %d: no space left in packet"
msgstr ""
-#: rfc2131.c:1312
+#: rfc2131.c:1322
#, c-format
msgid "More than one vendor class matches, using %s"
msgstr ""
-#: netlink.c:51
+#: netlink.c:59
#, c-format
msgid "cannot create netlink socket: %s"
msgstr ""
-#: netlink.c:224
+#: netlink.c:232
#, c-format
msgid "netlink returns error: %s"
msgstr ""
@@ -962,3 +1035,28 @@ msgstr ""
#, c-format
msgid "failed to execute %s: %m"
msgstr ""
+
+#: tftp.c:157
+#, c-format
+msgid "unsupported request from %s"
+msgstr ""
+
+#: tftp.c:226
+#, c-format
+msgid "file %s not found"
+msgstr ""
+
+#: tftp.c:293
+#, c-format
+msgid "TFTP sent %s to %s"
+msgstr ""
+
+#: tftp.c:343
+#, c-format
+msgid "TFTP error %d %s received from %s"
+msgstr ""
+
+#: tftp.c:374
+#, c-format
+msgid "TFTP failed sending %s to %s"
+msgstr ""
diff --git a/po/no.po b/po/no.po
index 462c35d..2a6a1b4 100644
--- a/po/no.po
+++ b/po/no.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dnsmasq 2.25\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-10-28 15:42+0100\n"
+"POT-Creation-Date: 2007-01-21 15:53+0000\n"
"PO-Revision-Date: 2006-01-11 17:39+0000\n"
"Last-Translator: Jan Erik Askildt <jeaskildt@gmail.com>\n"
"Language-Team: Norwegian <i18n-nb@lister.ping.uio.no>\n"
@@ -17,31 +17,31 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: cache.c:665
+#: cache.c:671
#, c-format
msgid "failed to load names from %s: %m"
msgstr "feilet å laste navn fra %s: %m"
-#: cache.c:699 dhcp.c:701
+#: cache.c:705 dhcp.c:715
#, c-format
msgid "bad address at %s line %d"
msgstr "dårlig adresse ved %s linje %d"
-#: cache.c:745 dhcp.c:715
+#: cache.c:751 dhcp.c:729
#, c-format
msgid "bad name at %s line %d"
msgstr "dårlig navn ved %s linje %d"
-#: cache.c:752 dhcp.c:769
+#: cache.c:758 dhcp.c:783
#, c-format
msgid "read %s - %d addresses"
msgstr "les %s - %d adresser"
-#: cache.c:790
+#: cache.c:796
msgid "cleared cache"
msgstr "mellomlager tømt"
-#: cache.c:843
+#: cache.c:849
#, c-format
msgid ""
"not giving name %s to the DHCP lease of %s because the name exists in %s "
@@ -50,7 +50,7 @@ msgstr ""
"gir ikke navnet %s til DHCP leien for %s fordi navnet eksisterer i %s med "
"adressen %s"
-#: cache.c:887
+#: cache.c:893
#, fuzzy, c-format
msgid ""
"time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache "
@@ -59,299 +59,329 @@ msgstr ""
"mellomlager størrelse %d, %d/%d mellomlager innsettinger re-bruker "
"mellomlager plasser som ikke er utløpt"
-#: util.c:153 option.c:1221
+#: util.c:154 option.c:579
msgid "could not get memory"
msgstr "kunne ikke få minne"
-#: util.c:176
+#: util.c:177
#, c-format
msgid "%s at line %d of %%s"
msgstr "%s på linje %d av %%s"
-#: util.c:183
+#: util.c:184
msgid "FAILED to start up"
msgstr "FEILET å starte opp"
-#: util.c:304
+#: util.c:305
#, c-format
msgid "infinite"
msgstr "uendelig"
-#: option.c:147
+#: option.c:164
msgid "Specify local address(es) to listen on."
msgstr "Spesifiser lokal(e) adresse(r) å lytte på."
-#: option.c:148
+#: option.c:165
msgid "Return ipaddr for all hosts in specified domains."
msgstr "Returner ipaddr for alle verter i det spesifiserte domenet."
-#: option.c:149
+#: option.c:166
msgid "Fake reverse lookups for RFC1918 private address ranges."
msgstr "Forfalsk revers oppslag for RFC1918 private adresse områder."
-#: option.c:150
+#: option.c:167
msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
msgstr "Behandle ipaddr som NXDOMAIN (omgår Verisign wildcard)."
-#: option.c:151
+#: option.c:168
#, 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:152
+#: option.c:169
#, c-format
msgid "Specify configuration file (defaults to %s)."
msgstr "Spesifiser konfigurasjonsfil (standard er %s)."
-#: option.c:153
+#: option.c:170
msgid "Do NOT fork into the background: run in debug mode."
msgstr "IKKE legg (fork) som bakgrunnsprosess: kjør i debug modus."
-#: option.c:154
+#: option.c:171
msgid "Do NOT forward queries with no domain part."
msgstr "IKKE videresend oppslag som mangler domene del."
-#: option.c:155
+#: option.c:172
msgid "Return self-pointing MX records for local hosts."
msgstr "Returner selv-pekende MX post for lokale verter."
-#: option.c:156
+#: option.c:173
msgid "Expand simple names in /etc/hosts with domain-suffix."
msgstr "Utvid enkle navn i /etc/hosts med domene-suffiks."
-#: option.c:157
+#: option.c:174
msgid "Don't forward spurious DNS requests from Windows hosts."
msgstr "Ikke videresend falske/uekte DNS forespørsler fra Windows verter."
-#: option.c:158
+#: option.c:175
msgid "Enable DHCP in the range given with lease duration."
msgstr "Aktiver DHCP i det gitte området med leie varighet"
-#: option.c:159
+#: option.c:176
#, c-format
msgid "Change to this group after startup (defaults to %s)."
msgstr "Skift til denne gruppen etter oppstart (standard er %s)."
-#: option.c:160
+#: option.c:177
msgid "Set address or hostname for a specified machine."
msgstr "Sett adresse eller vertsnavn for en spesifikk maskin."
-#: option.c:161
+#: option.c:178
#, c-format
msgid "Do NOT load %s file."
msgstr "IKKE last %s filen."
-#: option.c:162
+#: option.c:179
#, 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:163
+#: option.c:180
msgid "Specify interface(s) to listen on."
msgstr "Spesifiser nettverkskort det skal lyttes på."
-#: option.c:164
+#: option.c:181
msgid "Specify interface(s) NOT to listen on."
msgstr "Spesifiser nettverkskort det IKKE skal lyttes på."
-#: option.c:165
+#: option.c:182
msgid "Map DHCP user class to option set."
msgstr "Map DHCP bruker klasse til opsjon sett."
-#: option.c:166
+#: option.c:183
msgid "Don't do DHCP for hosts in option set."
msgstr "Ikke utfør DHCP for klienter i opsjon sett."
-#: option.c:167
+#: option.c:184
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:168
+#: option.c:185
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:169
+#: option.c:186
#, c-format
msgid "Specify where to store DHCP leases (defaults to %s)."
msgstr "Spesifiser hvor DHCP leiene skal lagres (standard er %s)."
-#: option.c:170
+#: option.c:187
msgid "Return MX records for local hosts."
msgstr "Returner MX records for lokale verter."
-#: option.c:171
+#: option.c:188
msgid "Specify an MX record."
msgstr "Spesifiser en MX post."
-#: option.c:172
+#: option.c:189
msgid "Specify BOOTP options to DHCP server."
msgstr "Spesifiser BOOTP opsjoner til DHCP tjener."
-#: option.c:173
+#: option.c:190
#, 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:174
+#: option.c:191
msgid "Do NOT cache failed search results."
msgstr "IKKE mellomlagre søkeresultater som feiler."
-#: option.c:175
+#: option.c:192
#, 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:176
+#: option.c:193
msgid "Set extra options to be set to DHCP clients."
msgstr "Sett ekstra opsjoner som skal fordeles til DHCP klientene."
-#: option.c:177
+#: option.c:194
msgid "Specify port to listen for DNS requests on (defaults to 53)."
msgstr "Spesifiser lytteport for DNS oppslag (standard er 53)."
-#: option.c:178
+#: option.c:195
#, 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:179
+#: option.c:196
msgid "Log queries."
msgstr "Logg oppslag."
-#: option.c:180
+#: option.c:197
msgid "Force the originating port for upstream queries."
msgstr "Tving bruk av opprinnelig port for oppstrøms oppslag."
-#: option.c:181
+#: option.c:198
msgid "Do NOT read resolv.conf."
msgstr "IKKE les resolv.conf."
-#: option.c:182
+#: option.c:199
#, c-format
msgid "Specify path to resolv.conf (defaults to %s)."
msgstr "Spesifiser stien til resolv.conf (standard er %s)."
-#: option.c:183
+#: option.c:200
msgid "Specify address(es) of upstream servers with optional domains."
msgstr "Spesifiser adressen(e) til oppstrøms tjenere med valgfrie domener."
-#: option.c:184
+#: option.c:201
msgid "Never forward queries to specified domains."
msgstr "Aldri videresend oppslag til spesifiserte domener."
-#: option.c:185
+#: option.c:202
msgid "Specify the domain to be assigned in DHCP leases."
msgstr "Spesifiser domenet som skal tildeles i DHCP leien."
-#: option.c:186
+#: option.c:203
msgid "Specify default target in an MX record."
msgstr "Spesifiser default mål i en MX post."
-#: option.c:187
+#: option.c:204
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:188
+#: option.c:205
#, c-format
msgid "Change to this user after startup. (defaults to %s)."
msgstr "Skift til denne bruker etter oppstart (standard er %s)."
-#: option.c:189
+#: option.c:206
msgid "Map DHCP vendor class to option set."
msgstr "Map DHCP produsent klasse til opsjon sett."
-#: option.c:190
+#: option.c:207
msgid "Display dnsmasq version and copyright information."
msgstr "Vis dnsmasq versjon og copyright informasjon."
-#: option.c:191
+#: option.c:208
msgid "Translate IPv4 addresses from upstream servers."
msgstr "Oversett IPv4 adresser fra oppstrøms tjenere."
-#: option.c:192
+#: option.c:209
msgid "Specify a SRV record."
msgstr "Spesifiser en SRV post."
-#: option.c:193
+#: option.c:210
msgid "Display this message."
msgstr "Vis denne meldingen."
-#: option.c:194
-#, c-format
-msgid "Specify path of PID file. (defaults to %s)."
+#: option.c:211
+#, fuzzy, c-format
+msgid "Specify path of PID file (defaults to %s)."
msgstr "Spesifiser stien til PID fil. (standard er %s)."
-#: option.c:195
+#: option.c:212
#, c-format
msgid "Specify maximum number of DHCP leases (defaults to %s)."
msgstr "Spesifiser maksimum antall DHCP leier (standard er %s)"
-#: option.c:196
+#: option.c:213
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:197
+#: option.c:214
msgid "Specify TXT DNS record."
msgstr "Spesifiser TXT DNS post."
-#: option.c:198
+#: option.c:215
+#, fuzzy
+msgid "Specify PTR DNS record."
+msgstr "Spesifiser TXT DNS post."
+
+#: option.c:216
msgid "Bind only to interfaces in use."
msgstr "Bind kun til nettverkskort som er i bruk."
-#: option.c:199
+#: option.c:217
#, c-format
msgid "Read DHCP static host information from %s."
msgstr "Les DHCP statisk vert informasjon fra %s."
-#: option.c:200
+#: option.c:218
msgid "Enable the DBus interface for setting upstream servers, etc."
msgstr "Aktiver DBus interface for å sette oppstrøms tjenere, osv."
-#: option.c:201
+#: option.c:219
msgid "Do not provide DHCP on this interface, only provide DNS."
msgstr "Ikke lever DHCP på dette nettverkskortet, kun lever DNS."
-#: option.c:202
+#: option.c:220
msgid "Enable dynamic address allocation for bootp."
msgstr "Aktiver dynamisk adresse allokering for bootp."
-#: option.c:203
+#: option.c:221
#, fuzzy
msgid "Map MAC address (with wildcards) to option set."
msgstr "Map DHCP produsent klasse til opsjon sett."
-#: option.c:204
+#: option.c:223
+msgid "Treat DHCP requests on aliases as arriving from interface."
+msgstr ""
+
+#: option.c:225
msgid "Disable ICMP echo address checking in the DHCP server."
msgstr ""
-#: option.c:205
+#: option.c:226
msgid "Script to run on DHCP lease creation and destruction."
msgstr ""
-#: option.c:206
+#: option.c:227
msgid "Read configuration from all the files in this directory."
msgstr ""
-#: option.c:207
+#: option.c:228
#, fuzzy
msgid "Log to this syslog facility. (defaults to DAEMON)"
msgstr "Skift til denne bruker etter oppstart (standard er %s)."
-#: option.c:208
+#: option.c:229
msgid "Read leases at startup, but never write the lease file."
msgstr ""
-#: option.c:209
+#: option.c:230
#, fuzzy, c-format
msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
msgstr "Spesifiser maksimum antall DHCP leier (standard er %s)"
-#: option.c:210
+#: option.c:231
#, c-format
msgid "Clear DNS cache when reloading %s."
msgstr ""
-#: option.c:323
+#: option.c:232
+msgid "Ignore hostnames provided by DHCP clients."
+msgstr ""
+
+#: option.c:233
+msgid "Enable integrated read-only TFTP server."
+msgstr ""
+
+#: option.c:234
+msgid "Export files by TFTP only from the specified subtree."
+msgstr ""
+
+#: option.c:235
+msgid "Allow access only to files owned by the user running dnsmasq."
+msgstr ""
+
+#: option.c:236
+#, fuzzy, c-format
+msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
+msgstr "Spesifiser maksimum antall DHCP leier (standard er %s)"
+
+#: option.c:361
#, c-format
msgid ""
"Usage: dnsmasq [options]\n"
@@ -360,138 +390,147 @@ msgstr ""
"Bruk: dnsmasq [opsjoner]\n"
"\n"
-#: option.c:325
+#: option.c:363
#, c-format
msgid "Use short options only on the command line.\n"
msgstr "Bruk korte opsjoner kun på kommandolinjen.\n"
-#: option.c:327
+#: option.c:365
#, c-format
msgid "Valid options are :\n"
msgstr "Gyldige opsjoner er :\n"
-#: option.c:362
-msgid "extraneous parameter"
-msgstr "overflødig parameter"
+#: option.c:428
+msgid "bad dhcp-option"
+msgstr "dårlig dhcp-opsjon"
-#: option.c:366
-msgid "missing parameter"
-msgstr "mangler parameter"
+#: option.c:574
+msgid "bad domain in dhcp-option"
+msgstr "dårlig domene i dhcp-opsjon"
-#: option.c:388
+#: option.c:631
+msgid "dhcp-option too long"
+msgstr "dhcp-opsjon for lang"
+
+#: option.c:693
#, fuzzy, c-format
msgid "cannot access directory %s: %s"
msgstr "kan ikke lese %s: %s"
-#: option.c:407
+#: option.c:712 tftp.c:230
#, fuzzy, c-format
msgid "cannot access %s: %s"
msgstr "kan ikke lese %s: %s"
-#: option.c:484
+#: option.c:789
msgid "bad MX preference"
msgstr "dårlig MX preferanse"
-#: option.c:493
+#: option.c:798
msgid "bad MX name"
msgstr "dårlig MX navn"
-#: option.c:511
+#: option.c:816
msgid "bad MX target"
msgstr "dårlig MX mål"
-#: option.c:523
+#: option.c:828
msgid "cannot run scripts under uClinux"
msgstr ""
-#: option.c:722 option.c:733
+#: option.c:1027 option.c:1038
msgid "bad port"
msgstr "dårlig port"
-#: option.c:878
+#: option.c:1182
+msgid "bad bridge-interface"
+msgstr ""
+
+#: option.c:1226
msgid "bad dhcp-range"
msgstr "dårlig dhcp-område"
-#: option.c:907
+#: option.c:1255
msgid "only one netid tag allowed"
msgstr ""
-#: option.c:952
+#: option.c:1300
msgid "inconsistent DHCP range"
msgstr "ikke konsistent DHCP område"
-#: option.c:1137
+#: option.c:1485
msgid "bad dhcp-host"
msgstr "dårlig dhcp-vert"
-#: option.c:1198
-msgid "bad dhcp-option"
-msgstr "dårlig dhcp-opsjon"
-
-#: option.c:1216
-msgid "bad domain in dhcp-option"
-msgstr "dårlig domene i dhcp-opsjon"
-
-#: option.c:1386
-msgid "dhcp-option too long"
-msgstr "dhcp-opsjon for lang"
+#: option.c:1685
+#, fuzzy
+msgid "bad PTR record"
+msgstr "dårlig SRV post"
-#: option.c:1583
+#: option.c:1710
msgid "bad TXT record"
msgstr "dårlig TXT post"
-#: option.c:1615
+#: option.c:1742
msgid "TXT record string too long"
msgstr "TXT post streng for lang"
-#: option.c:1654
+#: option.c:1781
msgid "bad SRV record"
msgstr "dårlig SRV post"
-#: option.c:1667
+#: option.c:1794
msgid "bad SRV target"
msgstr "dårlig SRV mål"
-#: option.c:1679
+#: option.c:1806
msgid "invalid port number"
msgstr "ugyldig portnummer"
-#: option.c:1690
+#: option.c:1817
msgid "invalid priority"
msgstr "ugyldig prioritet"
-#: option.c:1701
+#: option.c:1828
msgid "invalid weight"
msgstr "ugyldig vekt"
-#: option.c:1732
+#: option.c:1859
#, c-format
msgid "files nested too deep in %s"
msgstr ""
-#: option.c:1739
+#: option.c:1866 tftp.c:235 tftp.c:366
#, c-format
msgid "cannot read %s: %s"
msgstr "kan ikke lese %s: %s"
-#: option.c:1781
+#: option.c:1909
msgid "missing \""
msgstr "mangler \""
-#: option.c:1816
-msgid "error"
-msgstr "feil"
-
-#: option.c:1820
+#: option.c:1948
msgid "bad option"
msgstr "dårlig opsjon"
-#: option.c:1884
+#: option.c:1950
+msgid "extraneous parameter"
+msgstr "overflødig parameter"
+
+#: option.c:1952
+msgid "missing parameter"
+msgstr "mangler parameter"
+
+#: option.c:1954
+msgid "error"
+msgstr "feil"
+
+#: option.c:2022
#, c-format
msgid "Dnsmasq version %s %s\n"
msgstr "Dnsmasq versjon %s %s\n"
-#: option.c:1885
+#: option.c:2023
#, c-format
msgid ""
"Compile time options %s\n"
@@ -500,63 +539,63 @@ msgstr ""
"Kompileringsopsjoner %s\n"
"\n"
-#: option.c:1886
+#: option.c:2024
#, c-format
msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
msgstr "Denne programvaren kommer med ABSOLUTT INGEN GARANTI.\n"
-#: option.c:1887
+#: option.c:2025
#, 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:1888
+#: option.c:2026
#, c-format
msgid "under the terms of the GNU General Public License, version 2.\n"
msgstr "under vilkårene gitt i GNU General Public License, versjon 2.\n"
-#: option.c:1899
+#: option.c:2037
msgid "try --help"
msgstr ""
-#: option.c:1901
+#: option.c:2039
msgid "try -w"
msgstr ""
-#: option.c:1904
+#: option.c:2042
#, fuzzy, c-format
msgid "bad command line options: %s"
msgstr "dårlige kommandlinje opsjoner: %s."
-#: option.c:1955
+#: option.c:2093
#, c-format
msgid "cannot get host-name: %s"
msgstr "klarer ikke å få vertsnavn: %s"
-#: option.c:1983
+#: option.c:2121
msgid "only one resolv.conf file allowed in no-poll mode."
msgstr "kun en resolv.conf fil tillat i no-poll modus."
-#: option.c:1993
+#: option.c:2131
msgid "must have exactly one resolv.conf to read domain from."
msgstr "må ha nøyaktig en resolv.conf å lese domene fra."
-#: option.c:1996
+#: option.c:2134
#, fuzzy, c-format
msgid "failed to read %s: %s"
msgstr "feilet å lese %s: %m"
-#: option.c:2014
+#: option.c:2152
#, c-format
msgid "no search directive found in %s"
msgstr "intet søke direktiv funnet i %s"
-#: forward.c:370
+#: forward.c:376
#, c-format
msgid "nameserver %s refused to do a recursive query"
msgstr "navnetjener %s nektet å gjøre et rekursivt oppslag"
-#: isc.c:73 dnsmasq.c:482
+#: isc.c:73 dnsmasq.c:527
#, c-format
msgid "failed to access %s: %m"
msgstr "feilet å få tilgang til %s: %m"
@@ -566,7 +605,7 @@ msgstr "feilet å få tilgang til %s: %m"
msgid "failed to load %s: %m"
msgstr "feilet å laste %s: %m"
-#: isc.c:93 dnsmasq.c:504
+#: isc.c:93 dnsmasq.c:549
#, c-format
msgid "reading %s"
msgstr "leser %s"
@@ -581,64 +620,74 @@ msgstr "dårlig navn i %s"
msgid "Ignoring DHCP lease for %s because it has an illegal domain part"
msgstr "Ignorerer DHCP leie for %s siden den har en ulovlig domene del"
-#: network.c:315 dnsmasq.c:132
+#: network.c:41
+#, fuzzy, c-format
+msgid "unknown interface %s in bridge-interface"
+msgstr "ukjent tilknytning (interface) %s"
+
+#: network.c:379 dnsmasq.c:137
#, c-format
msgid "failed to create listening socket: %s"
msgstr "feilet å lage lytte socket: %s"
-#: network.c:322
+#: network.c:386
#, c-format
msgid "failed to set IPV6 options on listening socket: %s"
msgstr "feilet å sette IPv6 opsjoner på lytte socket: %s"
-#: network.c:340
+#: network.c:404
#, c-format
msgid "failed to bind listening socket for %s: %s"
msgstr "feilet å binde lytte socket for %s: %s"
-#: network.c:348
+#: network.c:412
#, c-format
msgid "failed to listen on socket: %s"
msgstr "feilet å lytte på socket: %s"
-#: network.c:419
+#: network.c:423
+#, fuzzy, c-format
+msgid "failed to create TFTP socket: %s"
+msgstr "feilet å lage lytte socket: %s"
+
+#: network.c:495
#, c-format
msgid "ignoring nameserver %s - local interface"
msgstr "ignorerer navnetjener %s - lokal tilknytning"
-#: network.c:428
+#: network.c:504
#, c-format
msgid "ignoring nameserver %s - cannot make/bind socket: %m"
msgstr "ignorerer navnetjener %s - kan ikke lage/dinde socket: %m"
-#: network.c:442
+#: network.c:518
msgid "domain"
msgstr "domene"
-#: network.c:444
+#: network.c:520
msgid "unqualified"
msgstr "ikke kvalifisert"
-#: network.c:444
+#: network.c:520
msgid "domains"
msgstr "domener"
-#: network.c:447
+#: network.c:523
#, c-format
msgid "using local addresses only for %s %s"
msgstr "benytter lokale adresser kun for %s %s"
-#: network.c:449
+#: network.c:525
#, c-format
msgid "using nameserver %s#%d for %s %s"
msgstr "benytter navnetjener %s#%d for %s %s"
-#: network.c:452
+#: network.c:528
#, c-format
msgid "using nameserver %s#%d"
msgstr "benytter navnetjener %s#%d"
-#: network.c:472
+#: network.c:548
#, c-format
msgid "failed to read %s: %m"
msgstr "feilet å lese %s: %m"
@@ -650,103 +699,126 @@ msgstr ""
"ISC dhcpf integrasjon ikke tilgjengelig: sett HAVE_ISC_READER i src/config.h"
#: dnsmasq.c:114
+#, 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:119
#, c-format
msgid "failed to find list of interfaces: %s"
msgstr "feilet å finne liste av tilknytninger (interfaces): %s"
-#: dnsmasq.c:122
+#: dnsmasq.c:127
#, c-format
msgid "unknown interface %s"
msgstr "ukjent tilknytning (interface) %s"
-#: dnsmasq.c:128
+#: dnsmasq.c:133
#, c-format
msgid "no interface with address %s"
msgstr "ingen tilknytning (interface) med adresse %s"
-#: dnsmasq.c:147
+#: dnsmasq.c:152
msgid "must set exactly one interface on broken systems without IP_RECVIF"
msgstr "må sette nøyaktig et interface på ødelagte systemer uten IP_RECVIF"
-#: dnsmasq.c:160 dnsmasq.c:609
+#: dnsmasq.c:165 dnsmasq.c:654
#, c-format
msgid "DBus error: %s"
msgstr "DBus feil: %s"
-#: dnsmasq.c:163
+#: dnsmasq.c:168
msgid "DBus not available: set HAVE_DBUS in src/config.h"
msgstr "DBus ikke tilgjengelig: sett HAVE_DBUS i src/config.h"
-#: dnsmasq.c:194
+#: dnsmasq.c:199
#, fuzzy, c-format
msgid "cannot create pipe: %s"
msgstr "kan ikke lese %s: %s"
-#: dnsmasq.c:337
+#: dnsmasq.c:342
#, c-format
msgid "started, version %s cachesize %d"
msgstr "startet, versjon %s mellomlager størrelse %d"
-#: dnsmasq.c:339
+#: dnsmasq.c:344
#, c-format
msgid "started, version %s cache disabled"
msgstr "startet, versjon %s mellomlager deaktivert"
-#: dnsmasq.c:341
+#: dnsmasq.c:346
#, c-format
msgid "compile time options: %s"
msgstr "kompilerings opsjoner: %s"
-#: dnsmasq.c:347
+#: dnsmasq.c:352
msgid "DBus support enabled: connected to system bus"
msgstr "DBus støtte aktivert: koblet til system buss"
-#: dnsmasq.c:349
+#: dnsmasq.c:354
msgid "DBus support enabled: bus connection pending"
msgstr "DBus støtte aktivert: avventer buss tilkobling"
-#: dnsmasq.c:354
+#: dnsmasq.c:359
msgid "setting --bind-interfaces option because of OS limitations"
msgstr "setter --bind-interfaces opsjon på grunn av OS begrensninger"
-#: dnsmasq.c:359
+#: dnsmasq.c:364
#, c-format
msgid "warning: interface %s does not currently exist"
msgstr "advarsel: nettverkskort %s eksisterer ikke for tiden"
-#: dnsmasq.c:364
+#: dnsmasq.c:369
msgid "warning: ignoring resolv-file flag because no-resolv is set"
msgstr ""
-#: dnsmasq.c:378
+#: dnsmasq.c:383
#, c-format
msgid "DHCP, static leases only on %.0s%s, lease time %s"
msgstr "DHCP, statisk leie kun på %.0s%s, leie tid %s"
-#: dnsmasq.c:379
+#: dnsmasq.c:384
#, c-format
msgid "DHCP, IP range %s -- %s, lease time %s"
msgstr "DHCP, IP område %s -- %s, leie tid %s"
-#: dnsmasq.c:389
+#: dnsmasq.c:400
+msgid "root is "
+msgstr ""
+
+#: dnsmasq.c:400
+#, fuzzy
+msgid "enabled"
+msgstr "deaktivert"
+
+#: dnsmasq.c:402
+msgid "secure mode"
+msgstr ""
+
+#: dnsmasq.c:422
+#, c-format
+msgid "restricting maximum simultaneous TFTP transfers to %d"
+msgstr ""
+
+#: dnsmasq.c:433
#, c-format
msgid "warning: setting capabilities failed: %m"
msgstr ""
-#: dnsmasq.c:391
+#: dnsmasq.c:435
msgid "running as root"
msgstr "kjører som rot (root)"
-#: dnsmasq.c:515
+#: dnsmasq.c:560
#, fuzzy, c-format
msgid "no servers found in %s, will retry"
msgstr "intet søke direktiv funnet i %s"
-#: dnsmasq.c:574
+#: dnsmasq.c:619
msgid "exiting on receipt of SIGTERM"
msgstr "avslutter etter mottak av SIGTERM"
-#: dnsmasq.c:611
+#: dnsmasq.c:656
msgid "connected to system DBus"
msgstr "tilkoblet til system DBus"
@@ -780,27 +852,32 @@ msgstr "kan ikke lage ICMP raw socket: %s"
msgid "duplicate IP address %s in dhcp-config directive."
msgstr "dubliserte IP adresser i %s dhcp-config direktiv."
-#: dhcp.c:336
+#: dhcp.c:219
+#, c-format
+msgid "DHCP packet received on %s which has no address"
+msgstr ""
+
+#: dhcp.c:350
#, 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:653
+#: dhcp.c:667
#, c-format
msgid "failed to read %s:%m"
msgstr "feilet å lese %s:%m"
-#: dhcp.c:688
+#: dhcp.c:702
#, c-format
msgid "bad line at %s line %d"
msgstr "dårlig linje ved %s linje %d"
-#: dhcp.c:795
+#: dhcp.c:809
#, c-format
msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr "dubliserte IP adresser i %s (%s) i dhcp-config direktiv"
-#: dhcp.c:831
+#: dhcp.c:845
#, c-format
msgid "Ignoring DHCP host name %s because it has an illegal domain part"
msgstr "Ignorerer DHCP verts navn %s på grunn av ulovlig domene del"
@@ -846,7 +923,7 @@ msgstr "via"
msgid "disabled"
msgstr "deaktivert"
-#: rfc2131.c:324 rfc2131.c:762
+#: rfc2131.c:324 rfc2131.c:763
msgid "address in use"
msgstr "adresse i bruk"
@@ -854,87 +931,87 @@ msgstr "adresse i bruk"
msgid "no address configured"
msgstr "ingen adresse konfigurert"
-#: rfc2131.c:340 rfc2131.c:631
+#: rfc2131.c:340 rfc2131.c:630
msgid "no address available"
msgstr "ingen adresse tilgjengelig"
-#: rfc2131.c:349 rfc2131.c:772
+#: rfc2131.c:349 rfc2131.c:773
msgid "no leases left"
msgstr "ingen leier igjen"
-#: rfc2131.c:352 rfc2131.c:736
+#: rfc2131.c:352 rfc2131.c:737
msgid "wrong network"
msgstr "galt nettverk"
-#: rfc2131.c:559
+#: rfc2131.c:558
#, fuzzy, c-format
msgid "disabling DHCP static address %s for %s"
msgstr "deaktiverer DHCP statisk adresse %s"
-#: rfc2131.c:580
+#: rfc2131.c:579
msgid "unknown lease"
msgstr "ukjent leie"
-#: rfc2131.c:589 rfc2131.c:873
+#: rfc2131.c:588 rfc2131.c:885
msgid "ignored"
msgstr "oversett"
-#: rfc2131.c:605
+#: rfc2131.c:604
#, c-format
msgid "not using configured address %s because it is leased to %s"
msgstr ""
-#: rfc2131.c:614
+#: rfc2131.c:613
#, c-format
msgid ""
"not using configured address %s because it is in use by the server or relay"
msgstr ""
-#: rfc2131.c:617
+#: rfc2131.c:616
#, c-format
msgid "not using configured address %s because it was previously declined"
msgstr ""
-#: rfc2131.c:699
+#: rfc2131.c:700
msgid "wrong address"
msgstr "gal adresse"
-#: rfc2131.c:712
+#: rfc2131.c:713
msgid "lease not found"
msgstr "leie ikke funnet"
-#: rfc2131.c:744
+#: rfc2131.c:745
msgid "address not available"
msgstr "adresse ikke tilgjengelig"
-#: rfc2131.c:755
+#: rfc2131.c:756
msgid "static lease available"
msgstr "statisk leie tilgjengelig"
-#: rfc2131.c:759
+#: rfc2131.c:760
msgid "address reserved"
msgstr "adresse reservert"
-#: rfc2131.c:765
+#: rfc2131.c:766
msgid "no unique-id"
msgstr ""
-#: rfc2131.c:1011
+#: rfc2131.c:1023
#, c-format
msgid "cannot send DHCP option %d: no space left in packet"
msgstr "kan ikke sende DHCP opsjon %d: ikke mer plass i pakken"
-#: rfc2131.c:1312
+#: rfc2131.c:1322
#, c-format
msgid "More than one vendor class matches, using %s"
msgstr "Mer enn en produsent klasse som passer, bruker %s"
-#: netlink.c:51
+#: netlink.c:59
#, fuzzy, c-format
msgid "cannot create netlink socket: %s"
msgstr "kan ikke binde netlink socket: %s"
-#: netlink.c:224
+#: netlink.c:232
#, fuzzy, c-format
msgid "netlink returns error: %s"
msgstr "DBus feil: %s"
@@ -976,6 +1053,31 @@ msgstr ""
msgid "failed to execute %s: %m"
msgstr "feilet å få tilgang til %s: %m"
+#: tftp.c:157
+#, c-format
+msgid "unsupported request from %s"
+msgstr ""
+
+#: tftp.c:226
+#, fuzzy, c-format
+msgid "file %s not found"
+msgstr "leie ikke funnet"
+
+#: tftp.c:293
+#, c-format
+msgid "TFTP sent %s to %s"
+msgstr ""
+
+#: tftp.c:343
+#, c-format
+msgid "TFTP error %d %s received from %s"
+msgstr ""
+
+#: tftp.c:374
+#, fuzzy, c-format
+msgid "TFTP failed sending %s to %s"
+msgstr "feilet å lese %s: %m"
+
#~ msgid "forwarding table overflow: check for server loops."
#~ msgstr ""
#~ "fremsendelse (forwarding) tabell overflyt: sjekk etter tjener løkker."
diff --git a/po/pl.po b/po/pl.po
index ee47293..0fca34b 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dnsmasq 2.24\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-10-28 15:42+0100\n"
+"POT-Creation-Date: 2007-01-21 15:53+0000\n"
"PO-Revision-Date: 2005-10-04 19:17+0100\n"
"Last-Translator: Tomasz Sochañski <nerdhero@gmail.com>\n"
"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
@@ -16,31 +16,31 @@ msgstr ""
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2);\n"
-#: cache.c:665
+#: cache.c:671
#, c-format
msgid "failed to load names from %s: %m"
msgstr "b³±d ³adowania nazw z %s: %m"
-#: cache.c:699 dhcp.c:701
+#: cache.c:705 dhcp.c:715
#, fuzzy, c-format
msgid "bad address at %s line %d"
msgstr "b³êdna nazwa w %s, linia %d"
-#: cache.c:745 dhcp.c:715
+#: cache.c:751 dhcp.c:729
#, c-format
msgid "bad name at %s line %d"
msgstr "b³êdna nazwa w %s, linia %d"
-#: cache.c:752 dhcp.c:769
+#: cache.c:758 dhcp.c:783
#, c-format
msgid "read %s - %d addresses"
msgstr "przeczytano %s - %d adresów"
-#: cache.c:790
+#: cache.c:796
msgid "cleared cache"
msgstr "wyczyszczono cache"
-#: cache.c:843
+#: cache.c:849
#, c-format
msgid ""
"not giving name %s to the DHCP lease of %s because the name exists in %s "
@@ -49,7 +49,7 @@ msgstr ""
"nazwa %s nie zosta³a nadana dzier¿awie DHCP %s, poniewa¿ nazwa istnieje w %s "
"i ma adres %s"
-#: cache.c:887
+#: cache.c:893
#, fuzzy, c-format
msgid ""
"time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache "
@@ -57,310 +57,340 @@ msgid ""
msgstr ""
"wielko¶æ cache %d, %d/%d wpisów cache u¿yto ponownie z niewygas³ych wpisów"
-#: util.c:153 option.c:1221
+#: util.c:154 option.c:579
msgid "could not get memory"
msgstr "nie mo¿na pobraæ pamiêci"
-#: util.c:176
+#: util.c:177
#, c-format
msgid "%s at line %d of %%s"
msgstr "%s w linii %d z %%s"
-#: util.c:183
+#: util.c:184
msgid "FAILED to start up"
msgstr "B£¡D uruchomienia"
-#: util.c:304
+#: util.c:305
#, c-format
msgid "infinite"
msgstr "nieskoñczona"
-#: option.c:147
+#: option.c:164
msgid "Specify local address(es) to listen on."
msgstr "Adres(y) lokalne do nas³uchiwania."
-#: option.c:148
+#: option.c:165
msgid "Return ipaddr for all hosts in specified domains."
msgstr "Zwracanie adresu IP dla wszystkich hostów w podanych domenach."
-#: option.c:149
+#: option.c:166
msgid "Fake reverse lookups for RFC1918 private address ranges."
msgstr "Symulacja reverse lookups dla adresów prywatnych opisanych w RFC1918."
-#: option.c:150
+#: option.c:167
msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
msgstr "Adres IP traktowany jak NXDOMAIN"
-#: option.c:151
+#: option.c:168
#, c-format
msgid "Specify the size of the cache in entries (defaults to %s)."
msgstr "Wielko¶æ pamiêci cache we wpisach (domy¶lna: %s)"
-#: option.c:152
+#: option.c:169
#, c-format
msgid "Specify configuration file (defaults to %s)."
msgstr "¦cie¿ka do pliku konfiguracyjnego (domy¶lna: %s)"
-#: option.c:153
+#: option.c:170
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:154
+#: option.c:171
msgid "Do NOT forward queries with no domain part."
msgstr "Wy³±czenie przekazywania zapytañ bez czê¶ci domenowej."
-#: option.c:155
+#: option.c:172
msgid "Return self-pointing MX records for local hosts."
msgstr "Zwracanie samowskazuj±cego rekordu MX dla lokalnych hostów."
-#: option.c:156
+#: option.c:173
msgid "Expand simple names in /etc/hosts with domain-suffix."
msgstr "Rozwijanie prostych nazw z /etc/hosts przyrostkiem domenowym."
-#: option.c:157
+#: option.c:174
msgid "Don't forward spurious DNS requests from Windows hosts."
msgstr "Wy³±czenie przekazywania pozornych zapytañ DNS z komputerów Windows"
-#: option.c:158
+#: option.c:175
msgid "Enable DHCP in the range given with lease duration."
msgstr "Enable DHCP w zakresie okre¶lonym czasem dzier¿awy."
-#: option.c:159
+#: option.c:176
#, c-format
msgid "Change to this group after startup (defaults to %s)."
msgstr "Po starcie zmiana grupy procesu na podan± (domy¶lnie: %s)."
-#: option.c:160
+#: option.c:177
msgid "Set address or hostname for a specified machine."
msgstr "Ustawienie adresu lub nazwy hosta dla okre¶lonej maszyny."
-#: option.c:161
+#: option.c:178
#, c-format
msgid "Do NOT load %s file."
msgstr "Ignorowanie pliku %s."
-#: option.c:162
+#: option.c:179
#, c-format
msgid "Specify a hosts file to be read in addition to %s."
msgstr "Dodatkowy plik hostów poza %s."
-#: option.c:163
+#: option.c:180
msgid "Specify interface(s) to listen on."
msgstr "Interfejs(y) do nas³uchiwania."
-#: option.c:164
+#: option.c:181
msgid "Specify interface(s) NOT to listen on."
msgstr "Interfejs(y), na których nie nas³uchiwaæ."
-#: option.c:165
+#: option.c:182
msgid "Map DHCP user class to option set."
msgstr "W³±czenie mapowania klasy u¿ytkownika DHCP do option set."
-#: option.c:166
+#: option.c:183
msgid "Don't do DHCP for hosts in option set."
msgstr ""
"Wy³±czenie odpowiadania na ¿adania DHCP hostów okre¶lonych w option set"
-#: option.c:167
+#: option.c:184
msgid "Do NOT fork into the background, do NOT run in debug mode."
msgstr ""
"Wy³±czenie tworzenia procesu potomnego w tle, wy³±czenie dzia³ania w trybie "
"debug."
-#: option.c:168
+#: option.c:185
msgid "Assume we are the only DHCP server on the local network."
msgstr "Za³o¿enie, ¿e jeste¶my jedynym serwerem DHCP w sieci lokalnej."
-#: option.c:169
+#: option.c:186
#, c-format
msgid "Specify where to store DHCP leases (defaults to %s)."
msgstr "¦cie¿ka przechowywania pliku dzier¿aw DHCP (domy¶lna: %s)"
-#: option.c:170
+#: option.c:187
msgid "Return MX records for local hosts."
msgstr "W³±czenie zwracania rekord MX dla hostów lokalnych."
-#: option.c:171
+#: option.c:188
msgid "Specify an MX record."
msgstr "Specyfikacja rekordu MX."
-#: option.c:172
+#: option.c:189
msgid "Specify BOOTP options to DHCP server."
msgstr "Okre¶lenie opcji BOOTP serwera DHCP."
-#: option.c:173
+#: option.c:190
#, c-format
msgid "Do NOT poll %s file, reload only on SIGHUP."
msgstr ""
"Wy³aczenie analizy pliku %s, ponownie ³adowanie tylko po otrzymaniu sygna³u "
"HUP"
-#: option.c:174
+#: option.c:191
msgid "Do NOT cache failed search results."
msgstr ""
"Wy³±czenie zapisywania w pamiêci podrêcznej nieudanych wyników wyszukiwania."
-#: option.c:175
+#: option.c:192
#, c-format
msgid "Use nameservers strictly in the order given in %s."
msgstr "W³±czenie u¿ywania serwerów nazw w kolejno¶ci podanej w %s."
-#: option.c:176
+#: option.c:193
msgid "Set extra options to be set to DHCP clients."
msgstr "Dodatkowe opcje ustawieñ dla klientów DHCP."
-#: option.c:177
+#: option.c:194
msgid "Specify port to listen for DNS requests on (defaults to 53)."
msgstr "Port nas³uchiwania zapytañ DNS (domy¶lnie: 53)."
-#: option.c:178
+#: option.c:195
#, 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:179
+#: option.c:196
msgid "Log queries."
msgstr "Zapytania zapisywane w pliku log."
-#: option.c:180
+#: option.c:197
msgid "Force the originating port for upstream queries."
msgstr ""
-#: option.c:181
+#: option.c:198
msgid "Do NOT read resolv.conf."
msgstr "Wy³±czenie czytania pliku resolv.conf"
-#: option.c:182
+#: option.c:199
#, c-format
msgid "Specify path to resolv.conf (defaults to %s)."
msgstr "Podaj ¶cie¿kê do pliku resolv.conf (domy¶lnie: %s)."
-#: option.c:183
+#: option.c:200
msgid "Specify address(es) of upstream servers with optional domains."
msgstr ""
-#: option.c:184
+#: option.c:201
msgid "Never forward queries to specified domains."
msgstr "Wy³±czenie przekazywania zapytañ do okre¶lonych domen."
-#: option.c:185
+#: option.c:202
msgid "Specify the domain to be assigned in DHCP leases."
msgstr "Nazwa domeny, która bêdzie przypisana w dzier¿awach DHCP."
-#: option.c:186
+#: option.c:203
msgid "Specify default target in an MX record."
msgstr "Okre¶lenie domy¶lnego celu w rekordzie MX."
-#: option.c:187
+#: option.c:204
msgid "Specify time-to-live in seconds for replies from /etc/hosts."
msgstr ""
"Okre¶lenie czasu wa¿no¶ci (time-to-live) w sekundach odpowiedzi branych z /"
"etc/hosts."
-#: option.c:188
+#: option.c:205
#, c-format
msgid "Change to this user after startup. (defaults to %s)."
msgstr "Po starcie zmiana u¿ytkownika procesu na podanego. (domy¶lnie: %s)."
-#: option.c:189
+#: option.c:206
msgid "Map DHCP vendor class to option set."
msgstr "Mapowanie nazwy dystrybutora DHCP do ustawieñ opcji."
-#: option.c:190
+#: option.c:207
msgid "Display dnsmasq version and copyright information."
msgstr ""
"W³±czenie pokazywania wersji dnsmasq i informacji o ochronie praw autorskich."
-#: option.c:191
+#: option.c:208
msgid "Translate IPv4 addresses from upstream servers."
msgstr ""
-#: option.c:192
+#: option.c:209
msgid "Specify a SRV record."
msgstr "Okre¶lenie rekordu SRV."
-#: option.c:193
+#: option.c:210
msgid "Display this message."
msgstr "Wy¶wietlenie tych informacji."
-#: option.c:194
-#, c-format
-msgid "Specify path of PID file. (defaults to %s)."
+#: option.c:211
+#, fuzzy, c-format
+msgid "Specify path of PID file (defaults to %s)."
msgstr "Okre¶lenie ¶cie¿ki do pliku PID. (domy¶lnie: %s)."
-#: option.c:195
+#: option.c:212
#, c-format
msgid "Specify maximum number of DHCP leases (defaults to %s)."
msgstr "Maksymalna liczba dzier¿aw DHCP. (domy¶lnie: %s)."
-#: option.c:196
+#: option.c:213
msgid "Answer DNS queries based on the interface a query was sent to."
msgstr ""
"Odpowiedzi na zapytania DNS uzale¿nione od interfejsu, który odebra³ "
"zapytanie."
-#: option.c:197
+#: option.c:214
msgid "Specify TXT DNS record."
msgstr "Rekord TXT DNS."
-#: option.c:198
+#: option.c:215
+#, fuzzy
+msgid "Specify PTR DNS record."
+msgstr "Rekord TXT DNS."
+
+#: option.c:216
msgid "Bind only to interfaces in use."
msgstr "W³±czenie nas³uchiwania tylko na u¿ywanych interfejsach."
-#: option.c:199
+#: option.c:217
#, c-format
msgid "Read DHCP static host information from %s."
msgstr "Statycznych informacji DHCP hosta z pliku %s."
-#: option.c:200
+#: option.c:218
msgid "Enable the DBus interface for setting upstream servers, etc."
msgstr ""
-#: option.c:201
+#: option.c:219
msgid "Do not provide DHCP on this interface, only provide DNS."
msgstr "Wy³±czenie DHCP na tym interfejsie, w³±czenie tylko DNS."
-#: option.c:202
+#: option.c:220
msgid "Enable dynamic address allocation for bootp."
msgstr "W³±czenie automatycznej alokacji adresu dla BOOTP."
-#: option.c:203
+#: option.c:221
#, fuzzy
msgid "Map MAC address (with wildcards) to option set."
msgstr "Mapowanie nazwy dystrybutora DHCP do ustawieñ opcji."
-#: option.c:204
+#: option.c:223
+msgid "Treat DHCP requests on aliases as arriving from interface."
+msgstr ""
+
+#: option.c:225
msgid "Disable ICMP echo address checking in the DHCP server."
msgstr ""
-#: option.c:205
+#: option.c:226
msgid "Script to run on DHCP lease creation and destruction."
msgstr ""
-#: option.c:206
+#: option.c:227
msgid "Read configuration from all the files in this directory."
msgstr ""
-#: option.c:207
+#: option.c:228
#, fuzzy
msgid "Log to this syslog facility. (defaults to DAEMON)"
msgstr "Po starcie zmiana u¿ytkownika procesu na podanego. (domy¶lnie: %s)."
-#: option.c:208
+#: option.c:229
msgid "Read leases at startup, but never write the lease file."
msgstr ""
-#: option.c:209
+#: option.c:230
#, fuzzy, c-format
msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
msgstr "Maksymalna liczba dzier¿aw DHCP. (domy¶lnie: %s)."
-#: option.c:210
+#: option.c:231
#, c-format
msgid "Clear DNS cache when reloading %s."
msgstr ""
-#: option.c:323
+#: option.c:232
+msgid "Ignore hostnames provided by DHCP clients."
+msgstr ""
+
+#: option.c:233
+msgid "Enable integrated read-only TFTP server."
+msgstr ""
+
+#: option.c:234
+msgid "Export files by TFTP only from the specified subtree."
+msgstr ""
+
+#: option.c:235
+msgid "Allow access only to files owned by the user running dnsmasq."
+msgstr ""
+
+#: option.c:236
+#, fuzzy, c-format
+msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
+msgstr "Maksymalna liczba dzier¿aw DHCP. (domy¶lnie: %s)."
+
+#: option.c:361
#, c-format
msgid ""
"Usage: dnsmasq [options]\n"
@@ -369,138 +399,147 @@ msgstr ""
"U¿ycie: dnsmasq [opcje]\n"
"\n"
-#: option.c:325
+#: option.c:363
#, c-format
msgid "Use short options only on the command line.\n"
msgstr "Tylko krótkie opcje w linii komend.\n"
-#: option.c:327
+#: option.c:365
#, c-format
msgid "Valid options are :\n"
msgstr "Obs³ugiwane opcje:\n"
-#: option.c:362
-msgid "extraneous parameter"
-msgstr "dodatkowy parametr"
+#: option.c:428
+msgid "bad dhcp-option"
+msgstr "b³±d w dhcp-option"
-#: option.c:366
-msgid "missing parameter"
-msgstr "brak parametru"
+#: option.c:574
+msgid "bad domain in dhcp-option"
+msgstr "nieprawid³owa nazwa domeny w dhcp-option"
-#: option.c:388
+#: option.c:631
+msgid "dhcp-option too long"
+msgstr "zbyt d³uga nazwa w dhcp-option"
+
+#: option.c:693
#, fuzzy, c-format
msgid "cannot access directory %s: %s"
msgstr "b³±d odczytu z %s: %s"
-#: option.c:407
+#: option.c:712 tftp.c:230
#, fuzzy, c-format
msgid "cannot access %s: %s"
msgstr "b³±d odczytu z %s: %s"
-#: option.c:484
+#: option.c:789
msgid "bad MX preference"
msgstr ""
-#: option.c:493
+#: option.c:798
msgid "bad MX name"
msgstr "b³êdna nazwa MX"
-#: option.c:511
+#: option.c:816
msgid "bad MX target"
msgstr "b³êdny cel MX"
-#: option.c:523
+#: option.c:828
msgid "cannot run scripts under uClinux"
msgstr ""
-#: option.c:722 option.c:733
+#: option.c:1027 option.c:1038
msgid "bad port"
msgstr "nieprawid³owy port"
-#: option.c:878
+#: option.c:1182
+msgid "bad bridge-interface"
+msgstr ""
+
+#: option.c:1226
msgid "bad dhcp-range"
msgstr "nieprawid³owy zakres dhcp-range"
-#: option.c:907
+#: option.c:1255
msgid "only one netid tag allowed"
msgstr ""
-#: option.c:952
+#: option.c:1300
msgid "inconsistent DHCP range"
msgstr "niespójny zakres DHCP"
-#: option.c:1137
+#: option.c:1485
msgid "bad dhcp-host"
msgstr "b³±d w dhcp-host"
-#: option.c:1198
-msgid "bad dhcp-option"
-msgstr "b³±d w dhcp-option"
-
-#: option.c:1216
-msgid "bad domain in dhcp-option"
-msgstr "nieprawid³owa nazwa domeny w dhcp-option"
-
-#: option.c:1386
-msgid "dhcp-option too long"
-msgstr "zbyt d³uga nazwa w dhcp-option"
+#: option.c:1685
+#, fuzzy
+msgid "bad PTR record"
+msgstr "b³±d w rekordzie SRV"
-#: option.c:1583
+#: option.c:1710
msgid "bad TXT record"
msgstr "nieprawid³owy rekord TX"
-#: option.c:1615
+#: option.c:1742
msgid "TXT record string too long"
msgstr "zbyt d³ugi rekord TXT"
-#: option.c:1654
+#: option.c:1781
msgid "bad SRV record"
msgstr "b³±d w rekordzie SRV"
-#: option.c:1667
+#: option.c:1794
msgid "bad SRV target"
msgstr "nieprawid³owy cel SRV"
-#: option.c:1679
+#: option.c:1806
msgid "invalid port number"
msgstr "nieprawid³owy port"
-#: option.c:1690
+#: option.c:1817
msgid "invalid priority"
msgstr "nieprawid³owy priorytet"
-#: option.c:1701
+#: option.c:1828
msgid "invalid weight"
msgstr "nieprawid³owe znaczenie"
-#: option.c:1732
+#: option.c:1859
#, c-format
msgid "files nested too deep in %s"
msgstr ""
-#: option.c:1739
+#: option.c:1866 tftp.c:235 tftp.c:366
#, c-format
msgid "cannot read %s: %s"
msgstr "b³±d odczytu z %s: %s"
-#: option.c:1781
+#: option.c:1909
msgid "missing \""
msgstr "brakuje \""
-#: option.c:1816
-msgid "error"
-msgstr "b³±d"
-
-#: option.c:1820
+#: option.c:1948
msgid "bad option"
msgstr "nieprawid³owa opcja"
-#: option.c:1884
+#: option.c:1950
+msgid "extraneous parameter"
+msgstr "dodatkowy parametr"
+
+#: option.c:1952
+msgid "missing parameter"
+msgstr "brak parametru"
+
+#: option.c:1954
+msgid "error"
+msgstr "b³±d"
+
+#: option.c:2022
#, c-format
msgid "Dnsmasq version %s %s\n"
msgstr "Dnsmasq, wersja %s %s\n"
-#: option.c:1885
+#: option.c:2023
#, c-format
msgid ""
"Compile time options %s\n"
@@ -509,63 +548,63 @@ msgstr ""
"Wkompilowane opcje %s\n"
"\n"
-#: option.c:1886
+#: option.c:2024
#, c-format
msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
msgstr "Oprogramowanie to nie zawiera ¿adnych gwarancji.\n"
-#: option.c:1887
+#: option.c:2025
#, c-format
msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
msgstr "Dnsmasq jest wolnym oprogramowaniem, mo¿esz je rozprowadzaæ\n"
-#: option.c:1888
+#: option.c:2026
#, c-format
msgid "under the terms of the GNU General Public License, version 2.\n"
msgstr "na warunkach okre¶lonych w GNU General Public Licence, wersja 2.\n"
-#: option.c:1899
+#: option.c:2037
msgid "try --help"
msgstr ""
-#: option.c:1901
+#: option.c:2039
msgid "try -w"
msgstr ""
-#: option.c:1904
+#: option.c:2042
#, fuzzy, c-format
msgid "bad command line options: %s"
msgstr "nieprawid³owa opcja linii komend: %s."
-#: option.c:1955
+#: option.c:2093
#, c-format
msgid "cannot get host-name: %s"
msgstr "nie mo¿na pobraæ nazwy hosta: %s"
-#: option.c:1983
+#: option.c:2121
msgid "only one resolv.conf file allowed in no-poll mode."
msgstr "tylko jeden plik resolv.conf jest dopuszczany w trybie no-poll."
-#: option.c:1993
+#: option.c:2131
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:1996
+#: option.c:2134
#, fuzzy, c-format
msgid "failed to read %s: %s"
msgstr "b³±d w odczycie %s: %m"
-#: option.c:2014
+#: option.c:2152
#, c-format
msgid "no search directive found in %s"
msgstr "brak wytycznych wyszukiwania w %s"
-#: forward.c:370
+#: forward.c:376
#, c-format
msgid "nameserver %s refused to do a recursive query"
msgstr "serwer nazw %s odmawia wykonania zapytania rekursywnego"
-#: isc.c:73 dnsmasq.c:482
+#: isc.c:73 dnsmasq.c:527
#, c-format
msgid "failed to access %s: %m"
msgstr "b³±d w dostêpie do %s: %m"
@@ -575,7 +614,7 @@ msgstr "b³±d w dostêpie do %s: %m"
msgid "failed to load %s: %m"
msgstr "b³±d ³adowania %s: %m"
-#: isc.c:93 dnsmasq.c:504
+#: isc.c:93 dnsmasq.c:549
#, c-format
msgid "reading %s"
msgstr "czytanie %s"
@@ -592,64 +631,74 @@ msgstr ""
"Ignorujê dzier¿awy DHCP dla %s poniewa¿ zawieraj± nieprawid³ow± czê¶æ "
"domenow±"
-#: network.c:315 dnsmasq.c:132
+#: network.c:41
+#, fuzzy, c-format
+msgid "unknown interface %s in bridge-interface"
+msgstr "nieznany interfejs %s"
+
+#: network.c:379 dnsmasq.c:137
#, c-format
msgid "failed to create listening socket: %s"
msgstr "b³±d podczas tworzenia gniazda: %s"
-#: network.c:322
+#: network.c:386
#, c-format
msgid "failed to set IPV6 options on listening socket: %s"
msgstr "b³±d ustawienia opcji IPV6 na nas³uchuj±cym gnie¼dzie: %s"
-#: network.c:340
+#: network.c:404
#, c-format
msgid "failed to bind listening socket for %s: %s"
msgstr "b³±d pod³±czenia nas³uchuj±cego gniazda dla %s: %s"
-#: network.c:348
+#: network.c:412
#, c-format
msgid "failed to listen on socket: %s"
msgstr "b³±d w³±czenia nas³uchiwania gniazda: %s"
-#: network.c:419
+#: network.c:423
+#, fuzzy, c-format
+msgid "failed to create TFTP socket: %s"
+msgstr "b³±d podczas tworzenia gniazda: %s"
+
+#: network.c:495
#, c-format
msgid "ignoring nameserver %s - local interface"
msgstr "ignorowanie serwera nazw %s - interfejs lokalny"
-#: network.c:428
+#: network.c:504
#, c-format
msgid "ignoring nameserver %s - cannot make/bind socket: %m"
msgstr "ignorowanie serwera nazw %s - nie mo¿na utworzyæ/dowi±zaæ gniazda: %m"
-#: network.c:442
+#: network.c:518
msgid "domain"
msgstr "domena"
-#: network.c:444
+#: network.c:520
msgid "unqualified"
msgstr "niekwalifikowany(a/e)"
-#: network.c:444
+#: network.c:520
msgid "domains"
msgstr "domeny"
-#: network.c:447
+#: network.c:523
#, c-format
msgid "using local addresses only for %s %s"
msgstr "w³±czenie u¿ywania lokalnych adresów tylko dla %s %s"
-#: network.c:449
+#: network.c:525
#, c-format
msgid "using nameserver %s#%d for %s %s"
msgstr "u¿ywany serwer nazw: %s#%d dla %s %s"
-#: network.c:452
+#: network.c:528
#, c-format
msgid "using nameserver %s#%d"
msgstr "u¿ywany serwer nazw %s#%d"
-#: network.c:472
+#: network.c:548
#, c-format
msgid "failed to read %s: %m"
msgstr "b³±d w odczycie %s: %m"
@@ -662,103 +711,126 @@ msgstr ""
"config.h"
#: dnsmasq.c:114
+#, fuzzy
+msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
+msgstr "DBus jest niedostêpny: ustaw HAVE_DBUS w src/config.h"
+
+#: dnsmasq.c:119
#, c-format
msgid "failed to find list of interfaces: %s"
msgstr "b³±d w znalezieniu listy interfejsów sieciowych: %s"
-#: dnsmasq.c:122
+#: dnsmasq.c:127
#, c-format
msgid "unknown interface %s"
msgstr "nieznany interfejs %s"
-#: dnsmasq.c:128
+#: dnsmasq.c:133
#, c-format
msgid "no interface with address %s"
msgstr "brak interfejsu z adresem %s"
-#: dnsmasq.c:147
+#: dnsmasq.c:152
msgid "must set exactly one interface on broken systems without IP_RECVIF"
msgstr "musisz ustawiæ dok³adnie jeden interfejs w systemach bez IP_RECVIF"
-#: dnsmasq.c:160 dnsmasq.c:609
+#: dnsmasq.c:165 dnsmasq.c:654
#, c-format
msgid "DBus error: %s"
msgstr "b³±d DBus: %s"
-#: dnsmasq.c:163
+#: dnsmasq.c:168
msgid "DBus not available: set HAVE_DBUS in src/config.h"
msgstr "DBus jest niedostêpny: ustaw HAVE_DBUS w src/config.h"
-#: dnsmasq.c:194
+#: dnsmasq.c:199
#, fuzzy, c-format
msgid "cannot create pipe: %s"
msgstr "b³±d odczytu z %s: %s"
-#: dnsmasq.c:337
+#: dnsmasq.c:342
#, c-format
msgid "started, version %s cachesize %d"
msgstr "uruchomiony, wersja %s wielko¶æ cache %d"
-#: dnsmasq.c:339
+#: dnsmasq.c:344
#, c-format
msgid "started, version %s cache disabled"
msgstr "uruchomiony, wersja %s cache wy³±czony"
-#: dnsmasq.c:341
+#: dnsmasq.c:346
#, c-format
msgid "compile time options: %s"
msgstr "opcje kompilacji: %s"
-#: dnsmasq.c:347
+#: dnsmasq.c:352
msgid "DBus support enabled: connected to system bus"
msgstr "obs³uga DBus w³±czona: pod³±czono do szyny systemowej"
-#: dnsmasq.c:349
+#: dnsmasq.c:354
msgid "DBus support enabled: bus connection pending"
msgstr "obs³uga DBus w³±czona: pod³±czanie do szyny systemowej w toku"
-#: dnsmasq.c:354
+#: dnsmasq.c:359
msgid "setting --bind-interfaces option because of OS limitations"
msgstr "ustawiam opcjê --bind-interfaces z powodu limitów systemu operacyjnego"
-#: dnsmasq.c:359
+#: dnsmasq.c:364
#, c-format
msgid "warning: interface %s does not currently exist"
msgstr "ostrze¿enie: interfejs %s obecnie nie istnieje"
-#: dnsmasq.c:364
+#: dnsmasq.c:369
msgid "warning: ignoring resolv-file flag because no-resolv is set"
msgstr ""
-#: dnsmasq.c:378
+#: dnsmasq.c:383
#, c-format
msgid "DHCP, static leases only on %.0s%s, lease time %s"
msgstr "DHCP, statyczne dzier¿awy tylko na %.0s%s, czas dzier¿awy %s"
-#: dnsmasq.c:379
+#: dnsmasq.c:384
#, c-format
msgid "DHCP, IP range %s -- %s, lease time %s"
msgstr "DHCP, zakres IP %s -- %s, czas dzier¿awy %s"
-#: dnsmasq.c:389
+#: dnsmasq.c:400
+msgid "root is "
+msgstr ""
+
+#: dnsmasq.c:400
+#, fuzzy
+msgid "enabled"
+msgstr "wy³±czony(a)"
+
+#: dnsmasq.c:402
+msgid "secure mode"
+msgstr ""
+
+#: dnsmasq.c:422
+#, c-format
+msgid "restricting maximum simultaneous TFTP transfers to %d"
+msgstr ""
+
+#: dnsmasq.c:433
#, c-format
msgid "warning: setting capabilities failed: %m"
msgstr ""
-#: dnsmasq.c:391
+#: dnsmasq.c:435
msgid "running as root"
msgstr "pracuje z uprawnieniami u¿ytkownika root"
-#: dnsmasq.c:515
+#: dnsmasq.c:560
#, fuzzy, c-format
msgid "no servers found in %s, will retry"
msgstr "brak wytycznych wyszukiwania w %s"
-#: dnsmasq.c:574
+#: dnsmasq.c:619
msgid "exiting on receipt of SIGTERM"
msgstr "wy³±czenie po otrzymaniu sygnalu SIGTERM"
-#: dnsmasq.c:611
+#: dnsmasq.c:656
msgid "connected to system DBus"
msgstr "po³±czono do systemowego DBus"
@@ -792,27 +864,32 @@ msgstr "b³±d utworzenia surowego gniazda ICMP: %s."
msgid "duplicate IP address %s in dhcp-config directive."
msgstr "powtórzenie adresu IP %s w opcji dhcp-config"
-#: dhcp.c:336
+#: dhcp.c:219
+#, c-format
+msgid "DHCP packet received on %s which has no address"
+msgstr ""
+
+#: dhcp.c:350
#, c-format
msgid "DHCP range %s -- %s is not consistent with netmask %s"
msgstr "zakres DHCP %s -- %s jest niespójny z mask± sieciow± %s"
-#: dhcp.c:653
+#: dhcp.c:667
#, c-format
msgid "failed to read %s:%m"
msgstr "b³±d odczytu %s:%m"
-#: dhcp.c:688
+#: dhcp.c:702
#, fuzzy, c-format
msgid "bad line at %s line %d"
msgstr "b³êdna nazwa w %s, linia %d"
-#: dhcp.c:795
+#: dhcp.c:809
#, c-format
msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr "powtórzenie adresu IP %s (%s) w opcji dhcp-config"
-#: dhcp.c:831
+#: dhcp.c:845
#, c-format
msgid "Ignoring DHCP host name %s because it has an illegal domain part"
msgstr ""
@@ -859,7 +936,7 @@ msgstr "przez"
msgid "disabled"
msgstr "wy³±czony(a)"
-#: rfc2131.c:324 rfc2131.c:762
+#: rfc2131.c:324 rfc2131.c:763
msgid "address in use"
msgstr "adres w u¿yciu"
@@ -867,87 +944,87 @@ msgstr "adres w u¿yciu"
msgid "no address configured"
msgstr "brak skonfigurowanego adresu"
-#: rfc2131.c:340 rfc2131.c:631
+#: rfc2131.c:340 rfc2131.c:630
msgid "no address available"
msgstr "brak dostêpnego adresu"
-#: rfc2131.c:349 rfc2131.c:772
+#: rfc2131.c:349 rfc2131.c:773
msgid "no leases left"
msgstr "brak wolnych dzier¿aw"
-#: rfc2131.c:352 rfc2131.c:736
+#: rfc2131.c:352 rfc2131.c:737
msgid "wrong network"
msgstr "nieprawid³owa sieæ"
-#: rfc2131.c:559
+#: rfc2131.c:558
#, fuzzy, c-format
msgid "disabling DHCP static address %s for %s"
msgstr "wy³±czanie statycznego adresu DHCP %s"
-#: rfc2131.c:580
+#: rfc2131.c:579
msgid "unknown lease"
msgstr "nieznana dzier¿awa"
-#: rfc2131.c:589 rfc2131.c:873
+#: rfc2131.c:588 rfc2131.c:885
msgid "ignored"
msgstr "ignorujê"
-#: rfc2131.c:605
+#: rfc2131.c:604
#, c-format
msgid "not using configured address %s because it is leased to %s"
msgstr ""
-#: rfc2131.c:614
+#: rfc2131.c:613
#, c-format
msgid ""
"not using configured address %s because it is in use by the server or relay"
msgstr ""
-#: rfc2131.c:617
+#: rfc2131.c:616
#, c-format
msgid "not using configured address %s because it was previously declined"
msgstr ""
-#: rfc2131.c:699
+#: rfc2131.c:700
msgid "wrong address"
msgstr "b³êdny adres"
-#: rfc2131.c:712
+#: rfc2131.c:713
msgid "lease not found"
msgstr "dzier¿awa nie znaleziona"
-#: rfc2131.c:744
+#: rfc2131.c:745
msgid "address not available"
msgstr "adres niedostêpny"
-#: rfc2131.c:755
+#: rfc2131.c:756
msgid "static lease available"
msgstr "dostêpna statyczna dzier¿awa"
-#: rfc2131.c:759
+#: rfc2131.c:760
msgid "address reserved"
msgstr "adres zarezerwowany"
-#: rfc2131.c:765
+#: rfc2131.c:766
msgid "no unique-id"
msgstr ""
-#: rfc2131.c:1011
+#: rfc2131.c:1023
#, c-format
msgid "cannot send DHCP option %d: no space left in packet"
msgstr ""
-#: rfc2131.c:1312
+#: rfc2131.c:1322
#, c-format
msgid "More than one vendor class matches, using %s"
msgstr "Wiêcej ni¿ jeden dystrybutor pasuj±cy, u¿ywam %s"
-#: netlink.c:51
+#: netlink.c:59
#, fuzzy, c-format
msgid "cannot create netlink socket: %s"
msgstr "nie mo¿na pod³±czyæ gniazda netlink: %s"
-#: netlink.c:224
+#: netlink.c:232
#, fuzzy, c-format
msgid "netlink returns error: %s"
msgstr "b³±d DBus: %s"
@@ -989,6 +1066,31 @@ msgstr ""
msgid "failed to execute %s: %m"
msgstr "b³±d w dostêpie do %s: %m"
+#: tftp.c:157
+#, c-format
+msgid "unsupported request from %s"
+msgstr ""
+
+#: tftp.c:226
+#, fuzzy, c-format
+msgid "file %s not found"
+msgstr "dzier¿awa nie znaleziona"
+
+#: tftp.c:293
+#, c-format
+msgid "TFTP sent %s to %s"
+msgstr ""
+
+#: tftp.c:343
+#, c-format
+msgid "TFTP error %d %s received from %s"
+msgstr ""
+
+#: tftp.c:374
+#, fuzzy, c-format
+msgid "TFTP failed sending %s to %s"
+msgstr "b³±d w odczycie %s: %m"
+
#~ msgid "forwarding table overflow: check for server loops."
#~ msgstr ""
#~ "przekroczenie zakresu tablicy przekazywania: sprawd¼ zapêtlenie serwera."
diff --git a/po/pt_BR.po b/po/pt_BR.po
index d47888d..79b0bfb 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dnsmasq 2.26\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-10-28 15:42+0100\n"
+"POT-Creation-Date: 2007-01-21 15:53+0000\n"
"PO-Revision-Date: 2006-01-16 20:42+0000\n"
"Last-Translator: Simon Kelley <simon@thekelleys.org.uk>\n"
"Language-Team: Portuguese <ldp-br@bazar.conectiva.com.br>\n"
@@ -15,536 +15,573 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-#: cache.c:665
+#: cache.c:671
#, c-format
msgid "failed to load names from %s: %m"
msgstr ""
-#: cache.c:699 dhcp.c:701
+#: cache.c:705 dhcp.c:715
#, c-format
msgid "bad address at %s line %d"
msgstr ""
-#: cache.c:745 dhcp.c:715
+#: cache.c:751 dhcp.c:729
#, c-format
msgid "bad name at %s line %d"
msgstr ""
-#: cache.c:752 dhcp.c:769
+#: cache.c:758 dhcp.c:783
#, c-format
msgid "read %s - %d addresses"
msgstr ""
-#: cache.c:790
+#: cache.c:796
msgid "cleared cache"
msgstr ""
-#: cache.c:843
+#: cache.c:849
#, 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:887
+#: cache.c:893
#, c-format
msgid ""
"time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache "
"entries."
msgstr ""
-#: util.c:153 option.c:1221
+#: util.c:154 option.c:579
msgid "could not get memory"
msgstr ""
-#: util.c:176
+#: util.c:177
#, c-format
msgid "%s at line %d of %%s"
msgstr ""
-#: util.c:183
+#: util.c:184
msgid "FAILED to start up"
msgstr ""
-#: util.c:304
+#: util.c:305
#, c-format
msgid "infinite"
msgstr ""
-#: option.c:147
+#: option.c:164
msgid "Specify local address(es) to listen on."
msgstr ""
-#: option.c:148
+#: option.c:165
msgid "Return ipaddr for all hosts in specified domains."
msgstr ""
-#: option.c:149
+#: option.c:166
msgid "Fake reverse lookups for RFC1918 private address ranges."
msgstr ""
-#: option.c:150
+#: option.c:167
msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
msgstr ""
-#: option.c:151
+#: option.c:168
#, c-format
msgid "Specify the size of the cache in entries (defaults to %s)."
msgstr ""
-#: option.c:152
+#: option.c:169
#, c-format
msgid "Specify configuration file (defaults to %s)."
msgstr ""
-#: option.c:153
+#: option.c:170
msgid "Do NOT fork into the background: run in debug mode."
msgstr ""
-#: option.c:154
+#: option.c:171
msgid "Do NOT forward queries with no domain part."
msgstr ""
-#: option.c:155
+#: option.c:172
msgid "Return self-pointing MX records for local hosts."
msgstr ""
-#: option.c:156
+#: option.c:173
msgid "Expand simple names in /etc/hosts with domain-suffix."
msgstr ""
-#: option.c:157
+#: option.c:174
msgid "Don't forward spurious DNS requests from Windows hosts."
msgstr ""
-#: option.c:158
+#: option.c:175
msgid "Enable DHCP in the range given with lease duration."
msgstr ""
-#: option.c:159
+#: option.c:176
#, c-format
msgid "Change to this group after startup (defaults to %s)."
msgstr ""
-#: option.c:160
+#: option.c:177
msgid "Set address or hostname for a specified machine."
msgstr ""
-#: option.c:161
+#: option.c:178
#, c-format
msgid "Do NOT load %s file."
msgstr ""
-#: option.c:162
+#: option.c:179
#, c-format
msgid "Specify a hosts file to be read in addition to %s."
msgstr ""
-#: option.c:163
+#: option.c:180
msgid "Specify interface(s) to listen on."
msgstr ""
-#: option.c:164
+#: option.c:181
msgid "Specify interface(s) NOT to listen on."
msgstr ""
-#: option.c:165
+#: option.c:182
msgid "Map DHCP user class to option set."
msgstr ""
-#: option.c:166
+#: option.c:183
msgid "Don't do DHCP for hosts in option set."
msgstr ""
-#: option.c:167
+#: option.c:184
msgid "Do NOT fork into the background, do NOT run in debug mode."
msgstr ""
-#: option.c:168
+#: option.c:185
msgid "Assume we are the only DHCP server on the local network."
msgstr ""
-#: option.c:169
+#: option.c:186
#, c-format
msgid "Specify where to store DHCP leases (defaults to %s)."
msgstr ""
-#: option.c:170
+#: option.c:187
msgid "Return MX records for local hosts."
msgstr ""
-#: option.c:171
+#: option.c:188
msgid "Specify an MX record."
msgstr ""
-#: option.c:172
+#: option.c:189
msgid "Specify BOOTP options to DHCP server."
msgstr ""
-#: option.c:173
+#: option.c:190
#, c-format
msgid "Do NOT poll %s file, reload only on SIGHUP."
msgstr ""
-#: option.c:174
+#: option.c:191
msgid "Do NOT cache failed search results."
msgstr ""
-#: option.c:175
+#: option.c:192
#, c-format
msgid "Use nameservers strictly in the order given in %s."
msgstr ""
-#: option.c:176
+#: option.c:193
msgid "Set extra options to be set to DHCP clients."
msgstr ""
-#: option.c:177
+#: option.c:194
msgid "Specify port to listen for DNS requests on (defaults to 53)."
msgstr ""
-#: option.c:178
+#: option.c:195
#, c-format
msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
msgstr ""
-#: option.c:179
+#: option.c:196
msgid "Log queries."
msgstr ""
-#: option.c:180
+#: option.c:197
msgid "Force the originating port for upstream queries."
msgstr ""
-#: option.c:181
+#: option.c:198
msgid "Do NOT read resolv.conf."
msgstr ""
-#: option.c:182
+#: option.c:199
#, c-format
msgid "Specify path to resolv.conf (defaults to %s)."
msgstr ""
-#: option.c:183
+#: option.c:200
msgid "Specify address(es) of upstream servers with optional domains."
msgstr ""
-#: option.c:184
+#: option.c:201
msgid "Never forward queries to specified domains."
msgstr ""
-#: option.c:185
+#: option.c:202
msgid "Specify the domain to be assigned in DHCP leases."
msgstr ""
-#: option.c:186
+#: option.c:203
msgid "Specify default target in an MX record."
msgstr ""
-#: option.c:187
+#: option.c:204
msgid "Specify time-to-live in seconds for replies from /etc/hosts."
msgstr ""
-#: option.c:188
+#: option.c:205
#, c-format
msgid "Change to this user after startup. (defaults to %s)."
msgstr ""
-#: option.c:189
+#: option.c:206
msgid "Map DHCP vendor class to option set."
msgstr ""
-#: option.c:190
+#: option.c:207
msgid "Display dnsmasq version and copyright information."
msgstr ""
-#: option.c:191
+#: option.c:208
msgid "Translate IPv4 addresses from upstream servers."
msgstr ""
-#: option.c:192
+#: option.c:209
msgid "Specify a SRV record."
msgstr ""
-#: option.c:193
+#: option.c:210
msgid "Display this message."
msgstr ""
-#: option.c:194
+#: option.c:211
#, c-format
-msgid "Specify path of PID file. (defaults to %s)."
+msgid "Specify path of PID file (defaults to %s)."
msgstr ""
-#: option.c:195
+#: option.c:212
#, c-format
msgid "Specify maximum number of DHCP leases (defaults to %s)."
msgstr ""
-#: option.c:196
+#: option.c:213
msgid "Answer DNS queries based on the interface a query was sent to."
msgstr ""
-#: option.c:197
+#: option.c:214
msgid "Specify TXT DNS record."
msgstr ""
-#: option.c:198
+#: option.c:215
+msgid "Specify PTR DNS record."
+msgstr ""
+
+#: option.c:216
msgid "Bind only to interfaces in use."
msgstr ""
-#: option.c:199
+#: option.c:217
#, c-format
msgid "Read DHCP static host information from %s."
msgstr ""
-#: option.c:200
+#: option.c:218
msgid "Enable the DBus interface for setting upstream servers, etc."
msgstr ""
-#: option.c:201
+#: option.c:219
msgid "Do not provide DHCP on this interface, only provide DNS."
msgstr ""
-#: option.c:202
+#: option.c:220
msgid "Enable dynamic address allocation for bootp."
msgstr ""
-#: option.c:203
+#: option.c:221
msgid "Map MAC address (with wildcards) to option set."
msgstr ""
-#: option.c:204
+#: option.c:223
+msgid "Treat DHCP requests on aliases as arriving from interface."
+msgstr ""
+
+#: option.c:225
msgid "Disable ICMP echo address checking in the DHCP server."
msgstr ""
-#: option.c:205
+#: option.c:226
msgid "Script to run on DHCP lease creation and destruction."
msgstr ""
-#: option.c:206
+#: option.c:227
msgid "Read configuration from all the files in this directory."
msgstr ""
-#: option.c:207
+#: option.c:228
msgid "Log to this syslog facility. (defaults to DAEMON)"
msgstr ""
-#: option.c:208
+#: option.c:229
msgid "Read leases at startup, but never write the lease file."
msgstr ""
-#: option.c:209
+#: option.c:230
#, c-format
msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
msgstr ""
-#: option.c:210
+#: option.c:231
#, c-format
msgid "Clear DNS cache when reloading %s."
msgstr ""
-#: option.c:323
+#: option.c:232
+msgid "Ignore hostnames provided by DHCP clients."
+msgstr ""
+
+#: option.c:233
+msgid "Enable integrated read-only TFTP server."
+msgstr ""
+
+#: option.c:234
+msgid "Export files by TFTP only from the specified subtree."
+msgstr ""
+
+#: option.c:235
+msgid "Allow access only to files owned by the user running dnsmasq."
+msgstr ""
+
+#: option.c:236
+#, c-format
+msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
+msgstr ""
+
+#: option.c:361
#, c-format
msgid ""
"Usage: dnsmasq [options]\n"
"\n"
msgstr ""
-#: option.c:325
+#: option.c:363
#, c-format
msgid "Use short options only on the command line.\n"
msgstr ""
-#: option.c:327
+#: option.c:365
#, c-format
msgid "Valid options are :\n"
msgstr ""
-#: option.c:362
-msgid "extraneous parameter"
+#: option.c:428
+msgid "bad dhcp-option"
msgstr ""
-#: option.c:366
-msgid "missing parameter"
+#: option.c:574
+msgid "bad domain in dhcp-option"
+msgstr ""
+
+#: option.c:631
+msgid "dhcp-option too long"
msgstr ""
-#: option.c:388
+#: option.c:693
#, c-format
msgid "cannot access directory %s: %s"
msgstr ""
-#: option.c:407
+#: option.c:712 tftp.c:230
#, c-format
msgid "cannot access %s: %s"
msgstr ""
-#: option.c:484
+#: option.c:789
msgid "bad MX preference"
msgstr ""
-#: option.c:493
+#: option.c:798
msgid "bad MX name"
msgstr ""
-#: option.c:511
+#: option.c:816
msgid "bad MX target"
msgstr ""
-#: option.c:523
+#: option.c:828
msgid "cannot run scripts under uClinux"
msgstr ""
-#: option.c:722 option.c:733
+#: option.c:1027 option.c:1038
msgid "bad port"
msgstr ""
-#: option.c:878
+#: option.c:1182
+msgid "bad bridge-interface"
+msgstr ""
+
+#: option.c:1226
msgid "bad dhcp-range"
msgstr ""
-#: option.c:907
+#: option.c:1255
msgid "only one netid tag allowed"
msgstr ""
-#: option.c:952
+#: option.c:1300
msgid "inconsistent DHCP range"
msgstr ""
-#: option.c:1137
+#: option.c:1485
msgid "bad dhcp-host"
msgstr ""
-#: option.c:1198
-msgid "bad dhcp-option"
-msgstr ""
-
-#: option.c:1216
-msgid "bad domain in dhcp-option"
-msgstr ""
-
-#: option.c:1386
-msgid "dhcp-option too long"
+#: option.c:1685
+msgid "bad PTR record"
msgstr ""
-#: option.c:1583
+#: option.c:1710
msgid "bad TXT record"
msgstr ""
-#: option.c:1615
+#: option.c:1742
msgid "TXT record string too long"
msgstr ""
-#: option.c:1654
+#: option.c:1781
msgid "bad SRV record"
msgstr ""
-#: option.c:1667
+#: option.c:1794
msgid "bad SRV target"
msgstr ""
-#: option.c:1679
+#: option.c:1806
msgid "invalid port number"
msgstr ""
-#: option.c:1690
+#: option.c:1817
msgid "invalid priority"
msgstr ""
-#: option.c:1701
+#: option.c:1828
msgid "invalid weight"
msgstr ""
-#: option.c:1732
+#: option.c:1859
#, c-format
msgid "files nested too deep in %s"
msgstr ""
-#: option.c:1739
+#: option.c:1866 tftp.c:235 tftp.c:366
#, c-format
msgid "cannot read %s: %s"
msgstr ""
-#: option.c:1781
+#: option.c:1909
msgid "missing \""
msgstr ""
-#: option.c:1816
-msgid "error"
+#: option.c:1948
+msgid "bad option"
msgstr ""
-#: option.c:1820
-msgid "bad option"
+#: option.c:1950
+msgid "extraneous parameter"
+msgstr ""
+
+#: option.c:1952
+msgid "missing parameter"
msgstr ""
-#: option.c:1884
+#: option.c:1954
+msgid "error"
+msgstr ""
+
+#: option.c:2022
#, c-format
msgid "Dnsmasq version %s %s\n"
msgstr ""
-#: option.c:1885
+#: option.c:2023
#, c-format
msgid ""
"Compile time options %s\n"
"\n"
msgstr ""
-#: option.c:1886
+#: option.c:2024
#, c-format
msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
msgstr ""
-#: option.c:1887
+#: option.c:2025
#, c-format
msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
msgstr ""
-#: option.c:1888
+#: option.c:2026
#, c-format
msgid "under the terms of the GNU General Public License, version 2.\n"
msgstr ""
-#: option.c:1899
+#: option.c:2037
msgid "try --help"
msgstr ""
-#: option.c:1901
+#: option.c:2039
msgid "try -w"
msgstr ""
-#: option.c:1904
+#: option.c:2042
#, c-format
msgid "bad command line options: %s"
msgstr ""
-#: option.c:1955
+#: option.c:2093
#, c-format
msgid "cannot get host-name: %s"
msgstr ""
-#: option.c:1983
+#: option.c:2121
msgid "only one resolv.conf file allowed in no-poll mode."
msgstr ""
-#: option.c:1993
+#: option.c:2131
msgid "must have exactly one resolv.conf to read domain from."
msgstr ""
-#: option.c:1996
+#: option.c:2134
#, c-format
msgid "failed to read %s: %s"
msgstr ""
-#: option.c:2014
+#: option.c:2152
#, c-format
msgid "no search directive found in %s"
msgstr ""
-#: forward.c:370
+#: forward.c:376
#, c-format
msgid "nameserver %s refused to do a recursive query"
msgstr ""
-#: isc.c:73 dnsmasq.c:482
+#: isc.c:73 dnsmasq.c:527
#, c-format
msgid "failed to access %s: %m"
msgstr ""
@@ -554,7 +591,7 @@ msgstr ""
msgid "failed to load %s: %m"
msgstr ""
-#: isc.c:93 dnsmasq.c:504
+#: isc.c:93 dnsmasq.c:549
#, c-format
msgid "reading %s"
msgstr ""
@@ -569,64 +606,74 @@ msgstr ""
msgid "Ignoring DHCP lease for %s because it has an illegal domain part"
msgstr ""
-#: network.c:315 dnsmasq.c:132
+#: network.c:41
+#, c-format
+msgid "unknown interface %s in bridge-interface"
+msgstr ""
+
+#: network.c:379 dnsmasq.c:137
#, c-format
msgid "failed to create listening socket: %s"
msgstr ""
-#: network.c:322
+#: network.c:386
#, c-format
msgid "failed to set IPV6 options on listening socket: %s"
msgstr ""
-#: network.c:340
+#: network.c:404
#, c-format
msgid "failed to bind listening socket for %s: %s"
msgstr ""
-#: network.c:348
+#: network.c:412
#, c-format
msgid "failed to listen on socket: %s"
msgstr ""
-#: network.c:419
+#: network.c:423
+#, c-format
+msgid "failed to create TFTP socket: %s"
+msgstr ""
+
+#: network.c:495
#, c-format
msgid "ignoring nameserver %s - local interface"
msgstr ""
-#: network.c:428
+#: network.c:504
#, c-format
msgid "ignoring nameserver %s - cannot make/bind socket: %m"
msgstr ""
-#: network.c:442
+#: network.c:518
msgid "domain"
msgstr ""
-#: network.c:444
+#: network.c:520
msgid "unqualified"
msgstr ""
-#: network.c:444
+#: network.c:520
msgid "domains"
msgstr ""
-#: network.c:447
+#: network.c:523
#, c-format
msgid "using local addresses only for %s %s"
msgstr ""
-#: network.c:449
+#: network.c:525
#, c-format
msgid "using nameserver %s#%d for %s %s"
msgstr ""
-#: network.c:452
+#: network.c:528
#, c-format
msgid "using nameserver %s#%d"
msgstr ""
-#: network.c:472
+#: network.c:548
#, c-format
msgid "failed to read %s: %m"
msgstr ""
@@ -637,103 +684,124 @@ msgid ""
msgstr ""
#: dnsmasq.c:114
+msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
+msgstr ""
+
+#: dnsmasq.c:119
#, c-format
msgid "failed to find list of interfaces: %s"
msgstr ""
-#: dnsmasq.c:122
+#: dnsmasq.c:127
#, c-format
msgid "unknown interface %s"
msgstr ""
-#: dnsmasq.c:128
+#: dnsmasq.c:133
#, c-format
msgid "no interface with address %s"
msgstr ""
-#: dnsmasq.c:147
+#: dnsmasq.c:152
msgid "must set exactly one interface on broken systems without IP_RECVIF"
msgstr ""
-#: dnsmasq.c:160 dnsmasq.c:609
+#: dnsmasq.c:165 dnsmasq.c:654
#, c-format
msgid "DBus error: %s"
msgstr ""
-#: dnsmasq.c:163
+#: dnsmasq.c:168
msgid "DBus not available: set HAVE_DBUS in src/config.h"
msgstr ""
-#: dnsmasq.c:194
+#: dnsmasq.c:199
#, c-format
msgid "cannot create pipe: %s"
msgstr ""
-#: dnsmasq.c:337
+#: dnsmasq.c:342
#, c-format
msgid "started, version %s cachesize %d"
msgstr ""
-#: dnsmasq.c:339
+#: dnsmasq.c:344
#, c-format
msgid "started, version %s cache disabled"
msgstr ""
-#: dnsmasq.c:341
+#: dnsmasq.c:346
#, c-format
msgid "compile time options: %s"
msgstr ""
-#: dnsmasq.c:347
+#: dnsmasq.c:352
msgid "DBus support enabled: connected to system bus"
msgstr ""
-#: dnsmasq.c:349
+#: dnsmasq.c:354
msgid "DBus support enabled: bus connection pending"
msgstr ""
-#: dnsmasq.c:354
+#: dnsmasq.c:359
msgid "setting --bind-interfaces option because of OS limitations"
msgstr ""
-#: dnsmasq.c:359
+#: dnsmasq.c:364
#, c-format
msgid "warning: interface %s does not currently exist"
msgstr ""
-#: dnsmasq.c:364
+#: dnsmasq.c:369
msgid "warning: ignoring resolv-file flag because no-resolv is set"
msgstr ""
-#: dnsmasq.c:378
+#: dnsmasq.c:383
#, c-format
msgid "DHCP, static leases only on %.0s%s, lease time %s"
msgstr ""
-#: dnsmasq.c:379
+#: dnsmasq.c:384
#, c-format
msgid "DHCP, IP range %s -- %s, lease time %s"
msgstr ""
-#: dnsmasq.c:389
+#: dnsmasq.c:400
+msgid "root is "
+msgstr ""
+
+#: dnsmasq.c:400
+msgid "enabled"
+msgstr ""
+
+#: dnsmasq.c:402
+msgid "secure mode"
+msgstr ""
+
+#: dnsmasq.c:422
+#, c-format
+msgid "restricting maximum simultaneous TFTP transfers to %d"
+msgstr ""
+
+#: dnsmasq.c:433
#, c-format
msgid "warning: setting capabilities failed: %m"
msgstr ""
-#: dnsmasq.c:391
+#: dnsmasq.c:435
msgid "running as root"
msgstr ""
-#: dnsmasq.c:515
+#: dnsmasq.c:560
#, c-format
msgid "no servers found in %s, will retry"
msgstr ""
-#: dnsmasq.c:574
+#: dnsmasq.c:619
msgid "exiting on receipt of SIGTERM"
msgstr ""
-#: dnsmasq.c:611
+#: dnsmasq.c:656
msgid "connected to system DBus"
msgstr ""
@@ -767,27 +835,32 @@ msgstr ""
msgid "duplicate IP address %s in dhcp-config directive."
msgstr ""
-#: dhcp.c:336
+#: dhcp.c:219
+#, c-format
+msgid "DHCP packet received on %s which has no address"
+msgstr ""
+
+#: dhcp.c:350
#, c-format
msgid "DHCP range %s -- %s is not consistent with netmask %s"
msgstr ""
-#: dhcp.c:653
+#: dhcp.c:667
#, c-format
msgid "failed to read %s:%m"
msgstr ""
-#: dhcp.c:688
+#: dhcp.c:702
#, c-format
msgid "bad line at %s line %d"
msgstr ""
-#: dhcp.c:795
+#: dhcp.c:809
#, c-format
msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr ""
-#: dhcp.c:831
+#: dhcp.c:845
#, c-format
msgid "Ignoring DHCP host name %s because it has an illegal domain part"
msgstr ""
@@ -833,7 +906,7 @@ msgstr ""
msgid "disabled"
msgstr ""
-#: rfc2131.c:324 rfc2131.c:762
+#: rfc2131.c:324 rfc2131.c:763
msgid "address in use"
msgstr ""
@@ -841,87 +914,87 @@ msgstr ""
msgid "no address configured"
msgstr ""
-#: rfc2131.c:340 rfc2131.c:631
+#: rfc2131.c:340 rfc2131.c:630
msgid "no address available"
msgstr ""
-#: rfc2131.c:349 rfc2131.c:772
+#: rfc2131.c:349 rfc2131.c:773
msgid "no leases left"
msgstr ""
-#: rfc2131.c:352 rfc2131.c:736
+#: rfc2131.c:352 rfc2131.c:737
msgid "wrong network"
msgstr ""
-#: rfc2131.c:559
+#: rfc2131.c:558
#, c-format
msgid "disabling DHCP static address %s for %s"
msgstr ""
-#: rfc2131.c:580
+#: rfc2131.c:579
msgid "unknown lease"
msgstr ""
-#: rfc2131.c:589 rfc2131.c:873
+#: rfc2131.c:588 rfc2131.c:885
msgid "ignored"
msgstr ""
-#: rfc2131.c:605
+#: rfc2131.c:604
#, c-format
msgid "not using configured address %s because it is leased to %s"
msgstr ""
-#: rfc2131.c:614
+#: rfc2131.c:613
#, c-format
msgid ""
"not using configured address %s because it is in use by the server or relay"
msgstr ""
-#: rfc2131.c:617
+#: rfc2131.c:616
#, c-format
msgid "not using configured address %s because it was previously declined"
msgstr ""
-#: rfc2131.c:699
+#: rfc2131.c:700
msgid "wrong address"
msgstr ""
-#: rfc2131.c:712
+#: rfc2131.c:713
msgid "lease not found"
msgstr ""
-#: rfc2131.c:744
+#: rfc2131.c:745
msgid "address not available"
msgstr ""
-#: rfc2131.c:755
+#: rfc2131.c:756
msgid "static lease available"
msgstr ""
-#: rfc2131.c:759
+#: rfc2131.c:760
msgid "address reserved"
msgstr ""
-#: rfc2131.c:765
+#: rfc2131.c:766
msgid "no unique-id"
msgstr ""
-#: rfc2131.c:1011
+#: rfc2131.c:1023
#, c-format
msgid "cannot send DHCP option %d: no space left in packet"
msgstr ""
-#: rfc2131.c:1312
+#: rfc2131.c:1322
#, c-format
msgid "More than one vendor class matches, using %s"
msgstr ""
-#: netlink.c:51
+#: netlink.c:59
#, c-format
msgid "cannot create netlink socket: %s"
msgstr ""
-#: netlink.c:224
+#: netlink.c:232
#, c-format
msgid "netlink returns error: %s"
msgstr ""
@@ -962,3 +1035,28 @@ msgstr ""
#, c-format
msgid "failed to execute %s: %m"
msgstr ""
+
+#: tftp.c:157
+#, c-format
+msgid "unsupported request from %s"
+msgstr ""
+
+#: tftp.c:226
+#, c-format
+msgid "file %s not found"
+msgstr ""
+
+#: tftp.c:293
+#, c-format
+msgid "TFTP sent %s to %s"
+msgstr ""
+
+#: tftp.c:343
+#, c-format
+msgid "TFTP error %d %s received from %s"
+msgstr ""
+
+#: tftp.c:374
+#, c-format
+msgid "TFTP failed sending %s to %s"
+msgstr ""
diff --git a/po/ro.po b/po/ro.po
index 43045c5..5c49c88 100644
--- a/po/ro.po
+++ b/po/ro.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dnsmasq 2.24\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-10-28 15:42+0100\n"
+"POT-Creation-Date: 2007-01-21 15:53+0000\n"
"PO-Revision-Date: 2005-11-22 16:46+0000\n"
"Last-Translator: Simon Kelley <simon@thekelleys.org.uk>\n"
"Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
@@ -15,31 +15,31 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
# for compatibility purposes the letters â, ă, ş, ţ and î can be written as their look-alike correspondent.
-#: cache.c:665
+#: cache.c:671
#, c-format
msgid "failed to load names from %s: %m"
msgstr "încărcarea numelor din %s: %m a eşuat"
-#: cache.c:699 dhcp.c:701
+#: cache.c:705 dhcp.c:715
#, c-format
msgid "bad address at %s line %d"
msgstr "adresă greşită în %s, linia %d"
-#: cache.c:745 dhcp.c:715
+#: cache.c:751 dhcp.c:729
#, c-format
msgid "bad name at %s line %d"
msgstr "nume greşit în %s linia %d"
-#: cache.c:752 dhcp.c:769
+#: cache.c:758 dhcp.c:783
#, c-format
msgid "read %s - %d addresses"
msgstr "citesc %s - %d adrese"
-#: cache.c:790
+#: cache.c:796
msgid "cleared cache"
msgstr "memoria temporară a fost ştearsă"
-#: cache.c:843
+#: cache.c:849
#, c-format
msgid ""
"not giving name %s to the DHCP lease of %s because the name exists in %s "
@@ -48,7 +48,7 @@ msgstr ""
"nu pot da numele %s împrumutului de adresă DHCP a lui %s deoarece "
"numeleexistă în %s cu adresa %s"
-#: cache.c:887
+#: cache.c:893
#, fuzzy, c-format
msgid ""
"time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache "
@@ -57,301 +57,331 @@ msgstr ""
"cantitate de memorie temporară %d, %d/%d stocări temporare aureutilizat "
"locaţii neexpirate."
-#: util.c:153 option.c:1221
+#: util.c:154 option.c:579
msgid "could not get memory"
msgstr "nu am putut aloca memorie"
-#: util.c:176
+#: util.c:177
#, c-format
msgid "%s at line %d of %%s"
msgstr "%s la linia %d din %%s"
-#: util.c:183
+#: util.c:184
msgid "FAILED to start up"
msgstr "pornirea A EÅžUAT"
-#: util.c:304
+#: util.c:305
#, c-format
msgid "infinite"
msgstr "infinit"
-#: option.c:147
+#: option.c:164
msgid "Specify local address(es) to listen on."
msgstr "Specificaţi adresele locale deservite."
-#: option.c:148
+#: option.c:165
msgid "Return ipaddr for all hosts in specified domains."
msgstr "Afişează adresele IP ale maşinilor în domeniul dat."
-#: option.c:149
+#: option.c:166
msgid "Fake reverse lookups for RFC1918 private address ranges."
msgstr ""
"Simulează căutări după adresă pentru domenii de adresă private (RFC1918)."
-#: option.c:150
+#: option.c:167
msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
msgstr "Interpretează adresa IP ca NXDOMAIN (împotriva manipulărilor Verisign)"
-#: option.c:151
+#: option.c:168
#, 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:152
+#: option.c:169
#, c-format
msgid "Specify configuration file (defaults to %s)."
msgstr "Specifică fişier de configurare (implicit e %s)."
-#: option.c:153
+#: option.c:170
msgid "Do NOT fork into the background: run in debug mode."
msgstr "NU porneşte în fundal: rulează în modul depanare."
-#: option.c:154
+#: option.c:171
msgid "Do NOT forward queries with no domain part."
msgstr "NU înainta cererile ce nu conţin domeniu DNS."
-#: option.c:155
+#: option.c:172
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:156
+#: option.c:173
msgid "Expand simple names in /etc/hosts with domain-suffix."
msgstr "Adaugă numelor simple din /etc/hosts numele domeniului ca sufix."
-#: option.c:157
+#: option.c:174
msgid "Don't forward spurious DNS requests from Windows hosts."
msgstr "Nu inainta cereri DNS defecte provenite de la maÅŸini Windows."
-#: option.c:158
+#: option.c:175
msgid "Enable DHCP in the range given with lease duration."
msgstr "Activează DHCP în domeniul dat cu durată limitată de împrumut."
-#: option.c:159
+#: option.c:176
#, c-format
msgid "Change to this group after startup (defaults to %s)."
msgstr "Rulează sub acest grup după pornire (implicit e %s)."
-#: option.c:160
+#: option.c:177
msgid "Set address or hostname for a specified machine."
msgstr "Schimbă adresa sau numele maşinii specificate."
-#: option.c:161
+#: option.c:178
#, c-format
msgid "Do NOT load %s file."
msgstr "Nu încarcă fişierul %s."
-#: option.c:162
+#: option.c:179
#, 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:163
+#: option.c:180
msgid "Specify interface(s) to listen on."
msgstr "Specifică interfeţele deservite."
-#: option.c:164
+#: option.c:181
msgid "Specify interface(s) NOT to listen on."
msgstr "Specifică interfeţele NE-deservite."
-#: option.c:165
+#: option.c:182
msgid "Map DHCP user class to option set."
msgstr "Leagă clasa de utilizator DHCP cu grup de opţiuni."
-#: option.c:166
+#: option.c:183
msgid "Don't do DHCP for hosts in option set."
msgstr "Nu furniza DHCP maşinilor din grupul de opţiuni."
-#: option.c:167
+#: option.c:184
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:168
+#: option.c:185
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:169
+#: option.c:186
#, 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:170
+#: option.c:187
msgid "Return MX records for local hosts."
msgstr "Răspunde cu întregistrări MX pentru maşini locale."
-#: option.c:171
+#: option.c:188
msgid "Specify an MX record."
msgstr "Specifică o înregistrare MX."
-#: option.c:172
+#: option.c:189
msgid "Specify BOOTP options to DHCP server."
msgstr "Specifică opţiuni BOOTP serverului DHCP."
-#: option.c:173
+#: option.c:190
#, 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:174
+#: option.c:191
msgid "Do NOT cache failed search results."
msgstr "NU memora rezultatele de căutare DNS eşuatată."
-#: option.c:175
+#: option.c:192
#, 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:176
+#: option.c:193
msgid "Set extra options to be set to DHCP clients."
msgstr "Configurează opţiuni în plusce trebuie trimise clienţilor DHCP."
-#: option.c:177
+#: option.c:194
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:178
+#: option.c:195
#, 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:179
+#: option.c:196
msgid "Log queries."
msgstr "Înregistrează tranzacţiile."
-#: option.c:180
+#: option.c:197
msgid "Force the originating port for upstream queries."
msgstr "Forţează acest port pentru datele ce pleacă."
-#: option.c:181
+#: option.c:198
msgid "Do NOT read resolv.conf."
msgstr "NU citi fiÅŸierul resolv.conf"
-#: option.c:182
+#: option.c:199
#, c-format
msgid "Specify path to resolv.conf (defaults to %s)."
msgstr "Specifică calea către resolv.conf (implicit e %s)."
-#: option.c:183
+#: option.c:200
msgid "Specify address(es) of upstream servers with optional domains."
msgstr "Specifică adresele server(elor) superioare cu domenii opţionale."
-#: option.c:184
+#: option.c:201
msgid "Never forward queries to specified domains."
msgstr "Nu înaintează cererile spre domeniile specificate."
-#: option.c:185
+#: option.c:202
msgid "Specify the domain to be assigned in DHCP leases."
msgstr "Specifică domeniul de transmis prin DHCP."
-#: option.c:186
+#: option.c:203
msgid "Specify default target in an MX record."
msgstr "Specifică o ţintă într-o înregistrare MX."
-#: option.c:187
+#: option.c:204
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:188
+#: option.c:205
#, c-format
msgid "Change to this user after startup. (defaults to %s)."
msgstr "Rulează sub acest utilizator după pornire. (implicit e %s)."
-#: option.c:189
+#: option.c:206
msgid "Map DHCP vendor class to option set."
msgstr "Trimite opţiuni DHCP în funcţie de marca plăcii de reţea."
-#: option.c:190
+#: option.c:207
msgid "Display dnsmasq version and copyright information."
msgstr "Afişează versiunea dnsmasq şi drepturile de autor."
-#: option.c:191
+#: option.c:208
msgid "Translate IPv4 addresses from upstream servers."
msgstr "Traduce adresele IPv4 de la serverele DNS superioare."
-#: option.c:192
+#: option.c:209
msgid "Specify a SRV record."
msgstr "Specifică o înregistrare SRV."
-#: option.c:193
+#: option.c:210
msgid "Display this message."
msgstr "Afişează acest mesaj."
-#: option.c:194
-#, c-format
-msgid "Specify path of PID file. (defaults to %s)."
+#: option.c:211
+#, fuzzy, c-format
+msgid "Specify path of PID file (defaults to %s)."
msgstr "Specifică o cale pentru fişierul PID. (implicit %s)."
-#: option.c:195
+#: option.c:212
#, c-format
msgid "Specify maximum number of DHCP leases (defaults to %s)."
msgstr "Specifică numărul maxim de împrumuturi DHCP (implicit %s)."
-#: option.c:196
+#: option.c:213
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:197
+#: option.c:214
msgid "Specify TXT DNS record."
msgstr "Specifică o înregistrare TXT."
-#: option.c:198
+#: option.c:215
+#, fuzzy
+msgid "Specify PTR DNS record."
+msgstr "Specifică o înregistrare TXT."
+
+#: option.c:216
msgid "Bind only to interfaces in use."
msgstr "Ascultă doar pe interfeţele active."
-#: option.c:199
+#: option.c:217
#, c-format
msgid "Read DHCP static host information from %s."
msgstr "Citeşte informaţii DHCP statice despre maşină din %s."
-#: option.c:200
+#: option.c:218
msgid "Enable the DBus interface for setting upstream servers, etc."
msgstr "Activeaza interfaţa DBus pentru configurarea serverelor superioare."
-#: option.c:201
+#: option.c:219
msgid "Do not provide DHCP on this interface, only provide DNS."
msgstr "Nu activează DHCP ci doar DNS pe această interfaţă."
-#: option.c:202
+#: option.c:220
msgid "Enable dynamic address allocation for bootp."
msgstr "Activează alocarea dinamică a adreselor pentru BOOTP."
-#: option.c:203
+#: option.c:221
#, 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:204
+#: option.c:223
+msgid "Treat DHCP requests on aliases as arriving from interface."
+msgstr ""
+
+#: option.c:225
msgid "Disable ICMP echo address checking in the DHCP server."
msgstr ""
-#: option.c:205
+#: option.c:226
msgid "Script to run on DHCP lease creation and destruction."
msgstr ""
-#: option.c:206
+#: option.c:227
msgid "Read configuration from all the files in this directory."
msgstr ""
-#: option.c:207
+#: option.c:228
#, fuzzy
msgid "Log to this syslog facility. (defaults to DAEMON)"
msgstr "Rulează sub acest utilizator după pornire. (implicit e %s)."
-#: option.c:208
+#: option.c:229
msgid "Read leases at startup, but never write the lease file."
msgstr ""
-#: option.c:209
+#: option.c:230
#, 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:210
+#: option.c:231
#, c-format
msgid "Clear DNS cache when reloading %s."
msgstr ""
-#: option.c:323
+#: option.c:232
+msgid "Ignore hostnames provided by DHCP clients."
+msgstr ""
+
+#: option.c:233
+msgid "Enable integrated read-only TFTP server."
+msgstr ""
+
+#: option.c:234
+msgid "Export files by TFTP only from the specified subtree."
+msgstr ""
+
+#: option.c:235
+msgid "Allow access only to files owned by the user running dnsmasq."
+msgstr ""
+
+#: option.c:236
+#, 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:361
#, c-format
msgid ""
"Usage: dnsmasq [options]\n"
@@ -360,138 +390,147 @@ msgstr ""
"Utilizare: dnsmasq [opţiuni]\n"
"\n"
-#: option.c:325
+#: option.c:363
#, 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:327
+#: option.c:365
#, c-format
msgid "Valid options are :\n"
msgstr "Opţiunile valide sunt:\n"
-#: option.c:362
-msgid "extraneous parameter"
-msgstr "parametru nerecunoscut"
+#: option.c:428
+msgid "bad dhcp-option"
+msgstr "dhcp-option invalid"
-#: option.c:366
-msgid "missing parameter"
-msgstr "parametru lipsa"
+#: option.c:574
+msgid "bad domain in dhcp-option"
+msgstr "domeniu DNS invalid în declaraţia dhcp-option"
-#: option.c:388
+#: option.c:631
+msgid "dhcp-option too long"
+msgstr "declararea dhcp-option este prea lungă"
+
+#: option.c:693
#, fuzzy, c-format
msgid "cannot access directory %s: %s"
msgstr "nu pot citi %s: %s"
-#: option.c:407
+#: option.c:712 tftp.c:230
#, fuzzy, c-format
msgid "cannot access %s: %s"
msgstr "nu pot citi %s: %s"
-#: option.c:484
+#: option.c:789
msgid "bad MX preference"
msgstr "preferinţă MX invalidă"
-#: option.c:493
+#: option.c:798
msgid "bad MX name"
msgstr "nume MX invalid"
-#: option.c:511
+#: option.c:816
msgid "bad MX target"
msgstr "ţintă MX invalidă"
-#: option.c:523
+#: option.c:828
msgid "cannot run scripts under uClinux"
msgstr ""
-#: option.c:722 option.c:733
+#: option.c:1027 option.c:1038
msgid "bad port"
msgstr "port invalid"
-#: option.c:878
+#: option.c:1182
+msgid "bad bridge-interface"
+msgstr ""
+
+#: option.c:1226
msgid "bad dhcp-range"
msgstr "dhcp-range invalid"
-#: option.c:907
+#: option.c:1255
msgid "only one netid tag allowed"
msgstr ""
-#: option.c:952
+#: option.c:1300
msgid "inconsistent DHCP range"
msgstr "domeniu DHCP inconsistent"
-#: option.c:1137
+#: option.c:1485
msgid "bad dhcp-host"
msgstr "dhcp-host invalid"
-#: option.c:1198
-msgid "bad dhcp-option"
-msgstr "dhcp-option invalid"
-
-#: option.c:1216
-msgid "bad domain in dhcp-option"
-msgstr "domeniu DNS invalid în declaraţia dhcp-option"
-
-#: option.c:1386
-msgid "dhcp-option too long"
-msgstr "declararea dhcp-option este prea lungă"
+#: option.c:1685
+#, fuzzy
+msgid "bad PTR record"
+msgstr "înregistrare SRV invalidă"
-#: option.c:1583
+#: option.c:1710
msgid "bad TXT record"
msgstr "înregistrare TXT invalidă"
-#: option.c:1615
+#: option.c:1742
msgid "TXT record string too long"
msgstr "şirul de caractere pentru înregistrarea TXT este prea lung"
-#: option.c:1654
+#: option.c:1781
msgid "bad SRV record"
msgstr "înregistrare SRV invalidă"
-#: option.c:1667
+#: option.c:1794
msgid "bad SRV target"
msgstr "ţintă SRV invalidă"
-#: option.c:1679
+#: option.c:1806
msgid "invalid port number"
msgstr "număr de port invalid"
-#: option.c:1690
+#: option.c:1817
msgid "invalid priority"
msgstr "prioritate invalidă"
-#: option.c:1701
+#: option.c:1828
msgid "invalid weight"
msgstr "pondere invalidă"
-#: option.c:1732
+#: option.c:1859
#, c-format
msgid "files nested too deep in %s"
msgstr ""
-#: option.c:1739
+#: option.c:1866 tftp.c:235 tftp.c:366
#, c-format
msgid "cannot read %s: %s"
msgstr "nu pot citi %s: %s"
-#: option.c:1781
+#: option.c:1909
msgid "missing \""
msgstr "lipseÅŸte \""
-#: option.c:1816
-msgid "error"
-msgstr "eroare"
-
-#: option.c:1820
+#: option.c:1948
msgid "bad option"
msgstr "opţiune invalidă"
-#: option.c:1884
+#: option.c:1950
+msgid "extraneous parameter"
+msgstr "parametru nerecunoscut"
+
+#: option.c:1952
+msgid "missing parameter"
+msgstr "parametru lipsa"
+
+#: option.c:1954
+msgid "error"
+msgstr "eroare"
+
+#: option.c:2022
#, c-format
msgid "Dnsmasq version %s %s\n"
msgstr "dnsmasq versiunea %s %s\n"
-#: option.c:1885
+#: option.c:2023
#, c-format
msgid ""
"Compile time options %s\n"
@@ -500,64 +539,64 @@ msgstr ""
"Opţiuni cu care a fost compilat %s\n"
"\n"
-#: option.c:1886
+#: option.c:2024
#, c-format
msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
msgstr "Acest program vine FÄ‚RÄ‚ NICI O GARANÅ¢IE.\n"
-#: option.c:1887
+#: option.c:2025
#, 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:1888
+#: option.c:2026
#, c-format
msgid "under the terms of the GNU General Public License, version 2.\n"
msgstr "în termenii Licenţei publice generale GNU, versiunea 2.\n"
-#: option.c:1899
+#: option.c:2037
msgid "try --help"
msgstr ""
-#: option.c:1901
+#: option.c:2039
msgid "try -w"
msgstr ""
-#: option.c:1904
+#: option.c:2042
#, fuzzy, c-format
msgid "bad command line options: %s"
msgstr "opţiuni în linie de comandă invalide: %s."
-#: option.c:1955
+#: option.c:2093
#, c-format
msgid "cannot get host-name: %s"
msgstr "nu pot citi numele maÅŸinii: %s"
-#: option.c:1983
+#: option.c:2121
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:1993
+#: option.c:2131
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:1996
+#: option.c:2134
#, fuzzy, c-format
msgid "failed to read %s: %s"
msgstr "nu pot citi %s: %n"
-#: option.c:2014
+#: option.c:2152
#, c-format
msgid "no search directive found in %s"
msgstr "nu s-a găsit nici un criteriu de căutare în %s"
-#: forward.c:370
+#: forward.c:376
#, c-format
msgid "nameserver %s refused to do a recursive query"
msgstr "serverul DNS %s refuză interogările recursive"
-#: isc.c:73 dnsmasq.c:482
+#: isc.c:73 dnsmasq.c:527
#, c-format
msgid "failed to access %s: %m"
msgstr "accesarea serverului %s a eÅŸuat: %n"
@@ -567,7 +606,7 @@ msgstr "accesarea serverului %s a eÅŸuat: %n"
msgid "failed to load %s: %m"
msgstr "nu pot încărca %s: %n"
-#: isc.c:93 dnsmasq.c:504
+#: isc.c:93 dnsmasq.c:549
#, c-format
msgid "reading %s"
msgstr "citesc %s"
@@ -582,64 +621,74 @@ msgstr "nume invalid în %s"
msgid "Ignoring DHCP lease for %s because it has an illegal domain part"
msgstr "ÃŽmprumutul DHCP pentru %s va fi ignorat deoarece are domeniu invalid"
-#: network.c:315 dnsmasq.c:132
+#: network.c:41
+#, fuzzy, c-format
+msgid "unknown interface %s in bridge-interface"
+msgstr "interfaţă necunoscută %s"
+
+#: network.c:379 dnsmasq.c:137
#, c-format
msgid "failed to create listening socket: %s"
msgstr "creearea socket-ului de ascultare a eÅŸuat: %s"
-#: network.c:322
+#: network.c:386
#, 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:340
+#: network.c:404
#, 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:348
+#: network.c:412
#, c-format
msgid "failed to listen on socket: %s"
msgstr "ascultarea pe socket a eÅŸuat: %s"
-#: network.c:419
+#: network.c:423
+#, fuzzy, c-format
+msgid "failed to create TFTP socket: %s"
+msgstr "creearea socket-ului de ascultare a eÅŸuat: %s"
+
+#: network.c:495
#, c-format
msgid "ignoring nameserver %s - local interface"
msgstr "ignorăm serverul DNS %s - interfaţă locală"
-#: network.c:428
+#: network.c:504
#, c-format
msgid "ignoring nameserver %s - cannot make/bind socket: %m"
msgstr "ignorăm serverul DNS %s - nu pot creea/activa socket-ul: %s"
-#: network.c:442
+#: network.c:518
msgid "domain"
msgstr "domeniu"
-#: network.c:444
+#: network.c:520
msgid "unqualified"
msgstr "invalid"
-#: network.c:444
+#: network.c:520
msgid "domains"
msgstr "domenii"
-#: network.c:447
+#: network.c:523
#, c-format
msgid "using local addresses only for %s %s"
msgstr "folosim adresele locale doar pentru %S %s"
-#: network.c:449
+#: network.c:525
#, c-format
msgid "using nameserver %s#%d for %s %s"
msgstr "folosim serverul DNS %s#%d pentru %s %s"
-#: network.c:452
+#: network.c:528
#, c-format
msgid "using nameserver %s#%d"
msgstr "folosim serverul DNS %s#%d"
-#: network.c:472
+#: network.c:548
#, c-format
msgid "failed to read %s: %m"
msgstr "nu pot citi %s: %n"
@@ -652,105 +701,128 @@ msgstr ""
"config.h"
#: dnsmasq.c:114
+#, 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:119
#, c-format
msgid "failed to find list of interfaces: %s"
msgstr "enumerarea interfeţelor a eşuat: %s"
-#: dnsmasq.c:122
+#: dnsmasq.c:127
#, c-format
msgid "unknown interface %s"
msgstr "interfaţă necunoscută %s"
-#: dnsmasq.c:128
+#: dnsmasq.c:133
#, c-format
msgid "no interface with address %s"
msgstr "nu exista interfaţă pentru adresa %s"
-#: dnsmasq.c:147
+#: dnsmasq.c:152
msgid "must set exactly one interface on broken systems without IP_RECVIF"
msgstr ""
"trebuie specificată exact o singură interfaţă pe sistemele defectece nu au "
"IP_RECVIF"
-#: dnsmasq.c:160 dnsmasq.c:609
+#: dnsmasq.c:165 dnsmasq.c:654
#, c-format
msgid "DBus error: %s"
msgstr "eroare DBus: %s"
-#: dnsmasq.c:163
+#: dnsmasq.c:168
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:194
+#: dnsmasq.c:199
#, fuzzy, c-format
msgid "cannot create pipe: %s"
msgstr "nu pot citi %s: %s"
-#: dnsmasq.c:337
+#: dnsmasq.c:342
#, c-format
msgid "started, version %s cachesize %d"
msgstr "am ponit, versiunea %s memorie temporară %d"
-#: dnsmasq.c:339
+#: dnsmasq.c:344
#, c-format
msgid "started, version %s cache disabled"
msgstr "am pornit, versiunea %s memorie temporară dezactivată"
-#: dnsmasq.c:341
+#: dnsmasq.c:346
#, c-format
msgid "compile time options: %s"
msgstr "compilat cu opţiunile: %s"
-#: dnsmasq.c:347
+#: dnsmasq.c:352
msgid "DBus support enabled: connected to system bus"
msgstr "suportul DBus activ: sunt conectat la magistrala sistem"
-#: dnsmasq.c:349
+#: dnsmasq.c:354
msgid "DBus support enabled: bus connection pending"
msgstr "suportul DBus activ: aştept conexiunea la magistrală"
-#: dnsmasq.c:354
+#: dnsmasq.c:359
msgid "setting --bind-interfaces option because of OS limitations"
msgstr "specific opţiunea --bind-interfaces din cauza limitărilor SO"
-#: dnsmasq.c:359
+#: dnsmasq.c:364
#, c-format
msgid "warning: interface %s does not currently exist"
msgstr "atenţie: interfaţa %s nu există momentan"
-#: dnsmasq.c:364
+#: dnsmasq.c:369
msgid "warning: ignoring resolv-file flag because no-resolv is set"
msgstr ""
-#: dnsmasq.c:378
+#: dnsmasq.c:383
#, c-format
msgid "DHCP, static leases only on %.0s%s, lease time %s"
msgstr "DHCP, împrumuturi statice doar către %.0s%s, timpul reînoirii %s"
-#: dnsmasq.c:379
+#: dnsmasq.c:384
#, c-format
msgid "DHCP, IP range %s -- %s, lease time %s"
msgstr "DHCP, domeniu IP %s -- %s, timpul reînoirii %s"
-#: dnsmasq.c:389
+#: dnsmasq.c:400
+msgid "root is "
+msgstr ""
+
+#: dnsmasq.c:400
+#, fuzzy
+msgid "enabled"
+msgstr "dezactivat"
+
+#: dnsmasq.c:402
+msgid "secure mode"
+msgstr ""
+
+#: dnsmasq.c:422
+#, c-format
+msgid "restricting maximum simultaneous TFTP transfers to %d"
+msgstr ""
+
+#: dnsmasq.c:433
#, c-format
msgid "warning: setting capabilities failed: %m"
msgstr ""
-#: dnsmasq.c:391
+#: dnsmasq.c:435
msgid "running as root"
msgstr "rulez ca root"
-#: dnsmasq.c:515
+#: dnsmasq.c:560
#, 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"
-#: dnsmasq.c:574
+#: dnsmasq.c:619
msgid "exiting on receipt of SIGTERM"
msgstr "am primit SIGTERM, am terminat"
-#: dnsmasq.c:611
+#: dnsmasq.c:656
msgid "connected to system DBus"
msgstr "magistrala sistem Dbus conectată"
@@ -784,27 +856,32 @@ msgstr "nu pot creea socket ICMP raw: %s."
msgid "duplicate IP address %s in dhcp-config directive."
msgstr "adresă IP duplicat %s în declaraţia dhcp-config."
-#: dhcp.c:336
+#: dhcp.c:219
+#, c-format
+msgid "DHCP packet received on %s which has no address"
+msgstr ""
+
+#: dhcp.c:350
#, 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:653
+#: dhcp.c:667
#, c-format
msgid "failed to read %s:%m"
msgstr "citirea %s:%n a eÅŸuat"
-#: dhcp.c:688
+#: dhcp.c:702
#, c-format
msgid "bad line at %s line %d"
msgstr "linie invalidă în %s rândul %d"
-#: dhcp.c:795
+#: dhcp.c:809
#, c-format
msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr "adresă IP duplicat %s (%s) în declaraţia dhcp-config."
-#: dhcp.c:831
+#: dhcp.c:845
#, c-format
msgid "Ignoring DHCP host name %s because it has an illegal domain part"
msgstr "Ignor numele DHCP al maÅŸinii %s deoarece are domeniu DNS ilegal"
@@ -850,7 +927,7 @@ msgstr "prin"
msgid "disabled"
msgstr "dezactivat"
-#: rfc2131.c:324 rfc2131.c:762
+#: rfc2131.c:324 rfc2131.c:763
msgid "address in use"
msgstr "adresa este folosită"
@@ -858,87 +935,87 @@ msgstr "adresa este folosită"
msgid "no address configured"
msgstr "adresă lipsă"
-#: rfc2131.c:340 rfc2131.c:631
+#: rfc2131.c:340 rfc2131.c:630
msgid "no address available"
msgstr "nici o adresă disponibilă"
-#: rfc2131.c:349 rfc2131.c:772
+#: rfc2131.c:349 rfc2131.c:773
msgid "no leases left"
msgstr "nu mai am de unde să împrumut"
-#: rfc2131.c:352 rfc2131.c:736
+#: rfc2131.c:352 rfc2131.c:737
msgid "wrong network"
msgstr "reţea greşită"
-#: rfc2131.c:559
+#: rfc2131.c:558
#, fuzzy, c-format
msgid "disabling DHCP static address %s for %s"
msgstr "dezactivăm adresele DHCP statice %s"
-#: rfc2131.c:580
+#: rfc2131.c:579
msgid "unknown lease"
msgstr "împrumut necunoscut"
-#: rfc2131.c:589 rfc2131.c:873
+#: rfc2131.c:588 rfc2131.c:885
msgid "ignored"
msgstr "ignorat"
-#: rfc2131.c:605
+#: rfc2131.c:604
#, c-format
msgid "not using configured address %s because it is leased to %s"
msgstr ""
-#: rfc2131.c:614
+#: rfc2131.c:613
#, c-format
msgid ""
"not using configured address %s because it is in use by the server or relay"
msgstr ""
-#: rfc2131.c:617
+#: rfc2131.c:616
#, c-format
msgid "not using configured address %s because it was previously declined"
msgstr ""
-#: rfc2131.c:699
+#: rfc2131.c:700
msgid "wrong address"
msgstr "adresă greşită"
-#: rfc2131.c:712
+#: rfc2131.c:713
msgid "lease not found"
msgstr "împrumutul nu a fost găsit"
-#: rfc2131.c:744
+#: rfc2131.c:745
msgid "address not available"
msgstr "adresă indisponibilă"
-#: rfc2131.c:755
+#: rfc2131.c:756
msgid "static lease available"
msgstr "împrumut static este disponibil"
-#: rfc2131.c:759
+#: rfc2131.c:760
msgid "address reserved"
msgstr "adresă rezervată"
-#: rfc2131.c:765
+#: rfc2131.c:766
msgid "no unique-id"
msgstr ""
-#: rfc2131.c:1011
+#: rfc2131.c:1023
#, c-format
msgid "cannot send DHCP option %d: no space left in packet"
msgstr "nu pot trimite opţiunea DHCP %d: nu mai este loc în pachet"
-#: rfc2131.c:1312
+#: rfc2131.c:1322
#, c-format
msgid "More than one vendor class matches, using %s"
msgstr "Se potrivesc mai multe clase de mărci de interfeţe, folosim %s"
-#: netlink.c:51
+#: netlink.c:59
#, fuzzy, c-format
msgid "cannot create netlink socket: %s"
msgstr "nu pot să activez socket-ul netlink: %s"
-#: netlink.c:224
+#: netlink.c:232
#, fuzzy, c-format
msgid "netlink returns error: %s"
msgstr "eroare DBus: %s"
@@ -980,6 +1057,31 @@ msgstr ""
msgid "failed to execute %s: %m"
msgstr "accesarea serverului %s a eÅŸuat: %n"
+#: tftp.c:157
+#, c-format
+msgid "unsupported request from %s"
+msgstr ""
+
+#: tftp.c:226
+#, fuzzy, c-format
+msgid "file %s not found"
+msgstr "împrumutul nu a fost găsit"
+
+#: tftp.c:293
+#, c-format
+msgid "TFTP sent %s to %s"
+msgstr ""
+
+#: tftp.c:343
+#, c-format
+msgid "TFTP error %d %s received from %s"
+msgstr ""
+
+#: tftp.c:374
+#, fuzzy, c-format
+msgid "TFTP failed sending %s to %s"
+msgstr "nu pot citi %s: %n"
+
#~ msgid "forwarding table overflow: check for server loops."
#~ msgstr ""
#~ "depăşire de memorie în tabela cu înaintări DNS: verificaţi de bucle."
diff --git a/src/cache.c b/src/cache.c
index 752b2b1..6533ef7 100644
--- a/src/cache.c
+++ b/src/cache.c
@@ -46,6 +46,8 @@ static const struct {
{ 38, "A6" },
{ 39, "DNAME" },
{ 41, "OPT" },
+ { 48, "DNSKEY" },
+ { 249, "TKEY" },
{ 250, "TSIG" },
{ 251, "IXFR" },
{ 252, "AXFR" },
@@ -636,15 +638,19 @@ static void add_hosts_entry(struct crec *cache, struct all_addr *addr, int addrl
flags &= ~F_REVERSE;
else
for (i=0; i<hash_size; i++)
- for (lookup = hash_table[i]; lookup; lookup = lookup->hash_next)
- if ((lookup->flags & F_HOSTS) &&
- (lookup->flags & flags & (F_IPV4 | F_IPV6)) &&
- memcmp(&lookup->addr.addr, addr, addrlen) == 0)
- {
- flags &= ~F_REVERSE;
- break;
- }
-
+ {
+ for (lookup = hash_table[i]; lookup; lookup = lookup->hash_next)
+ if ((lookup->flags & F_HOSTS) &&
+ (lookup->flags & flags & (F_IPV4 | F_IPV6)) &&
+ memcmp(&lookup->addr.addr, addr, addrlen) == 0)
+ {
+ flags &= ~F_REVERSE;
+ break;
+ }
+ if (lookup)
+ break;
+ }
+
cache->flags = flags;
cache->uid = index;
memcpy(&cache->addr.addr, addr, addrlen);
@@ -997,6 +1003,8 @@ void log_query(unsigned short flags, char *name, struct all_addr *addr,
strcpy(addrbuff, "<SRV>");
else if (flags & F_NXDOMAIN)
strcpy(addrbuff, "<TXT>");
+ else if (flags & F_BIGNAME)
+ strcpy(addrbuff, "<PTR>");
else
strcpy(addrbuff, "<CNAME>");
}
diff --git a/src/config.h b/src/config.h
index aa503f3..8140dea 100644
--- a/src/config.h
+++ b/src/config.h
@@ -10,7 +10,7 @@
GNU General Public License for more details.
*/
-#define VERSION "2.35"
+#define VERSION "2.36"
#define FTABSIZ 150 /* max number of outstanding requests (default) */
#define MAX_PROCS 20 /* max no children for TCP requests */
@@ -48,6 +48,8 @@
#define CHGRP "dip"
#define DHCP_SERVER_PORT 67
#define DHCP_CLIENT_PORT 68
+#define TFTP_PORT 69
+#define TFTP_MAX_CONNECTIONS 50 /* max simultaneous connections */
/* DBUS interface specifics */
#define DNSMASQ_SERVICE "uk.org.thekelleys.dnsmasq"
@@ -55,6 +57,10 @@
/* A small collection of RR-types which are missing on some platforms */
+#ifndef T_SIG
+# define T_SIG 24
+#endif
+
#ifndef T_SRV
# define T_SRV 33
#endif
@@ -63,6 +69,15 @@
# define T_OPT 41
#endif
+#ifndef T_TKEY
+# define T_TKEY 249
+#endif
+
+#ifndef T_TSIG
+# define T_TSIG 250
+#endif
+
+
/* Get linux C library versions. */
#if defined(__linux__) && !defined(__UCLIBC__) && !defined(__uClinux__)
/*# include <libio.h> */
@@ -98,6 +113,9 @@ HAVE_ISC_READER
define this to include the old ISC dhcpcd integration. Note that you cannot
set both HAVE_ISC_READER and HAVE_BROKEN_RTC.
+HAVE_TFTP
+ define this to get dnsmasq's built-in TFTP server.
+
HAVE_GETOPT_LONG
define this if you have GNU libc or GNU getopt.
@@ -153,6 +171,7 @@ NOTES:
*/
/* platform independent options- uncomment to enable */
+#define HAVE_TFTP
/* #define HAVE_BROKEN_RTC */
/* #define HAVE_ISC_READER */
/* #define HAVE_DBUS */
@@ -161,6 +180,11 @@ NOTES:
# error HAVE_ISC_READER is not compatible with HAVE_BROKEN_RTC
#endif
+/* Allow TFTP to be disabled with CFLAGS=-DNO_TFTP */
+#ifdef NO_TFTP
+#undef HAVE_TFTP
+#endif
+
/* platform dependent options. */
/* Must preceed __linux__ since uClinux defines __linux__ too. */
diff --git a/src/dhcp.c b/src/dhcp.c
index efb48de..63a5039 100644
--- a/src/dhcp.c
+++ b/src/dhcp.c
@@ -117,7 +117,7 @@ void dhcp_packet(struct daemon *daemon, time_t now)
struct iovec iov;
ssize_t sz;
int iface_index = 0, unicast_dest = 0;
- struct in_addr iface_addr;
+ struct in_addr iface_addr, *addrp = NULL;
struct iface_param parm;
union {
@@ -185,7 +185,7 @@ void dhcp_packet(struct daemon *daemon, time_t now)
if (!(msg.msg_flags & MSG_BCAST))
unicast_dest = 1;
#endif
-
+
#else
/* fallback for systems without IP_RECVIF - allow only one interface
and assume packets arrive from it - yuk. */
@@ -198,16 +198,30 @@ void dhcp_packet(struct daemon *daemon, time_t now)
#endif
ifr.ifr_addr.sa_family = AF_INET;
- if (ioctl(daemon->dhcpfd, SIOCGIFADDR, &ifr) == -1 )
- return;
- iface_addr = ((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr;
+ if (ioctl(daemon->dhcpfd, SIOCGIFADDR, &ifr) != -1 )
+ {
+ addrp = &iface_addr;
+ iface_addr = ((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr;
+ }
+ if (!iface_check(daemon, AF_INET, (struct all_addr *)addrp, &ifr, &iface_index))
+ return;
+
for (tmp = daemon->dhcp_except; tmp; tmp = tmp->next)
if (tmp->name && (strcmp(tmp->name, ifr.ifr_name) == 0))
return;
- if (!iface_check(daemon, AF_INET, (struct all_addr *)&iface_addr, ifr.ifr_name))
- return;
+ /* interface may have been changed by alias in iface_check */
+ if (!addrp)
+ {
+ if (ioctl(daemon->dhcpfd, SIOCGIFADDR, &ifr) != -1)
+ {
+ syslog(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;
+ }
/* unlinked contexts are marked by context->current == context */
for (context = daemon->dhcp; context; context = context->next)
diff --git a/src/dnsmasq.c b/src/dnsmasq.c
index 788e168..774c530 100644
--- a/src/dnsmasq.c
+++ b/src/dnsmasq.c
@@ -109,6 +109,11 @@ int main (int argc, char **argv)
}
#endif
+#ifndef HAVE_TFTP
+ if (daemon->options & OPT_TFTP)
+ die(_("TFTP server not available: set HAVE_TFTP in src/config.h"), NULL);
+#endif
+
daemon->interfaces = NULL;
if (!enumerate_interfaces(daemon))
die(_("failed to find list of interfaces: %s"), NULL);
@@ -128,7 +133,7 @@ int main (int argc, char **argv)
die(_("no interface with address %s"), daemon->namebuff);
}
}
- else if (!(daemon->listeners = create_wildcard_listeners(daemon->port)))
+ else if (!(daemon->listeners = create_wildcard_listeners(daemon->port, daemon->options & OPT_TFTP)))
die(_("failed to create listening socket: %s"), NULL);
cache_init(daemon->cachesize, daemon->options & OPT_LOG);
@@ -270,7 +275,7 @@ int main (int argc, char **argv)
}
/* if we are to run scripts, we need to fork a helper before dropping root. */
- daemon->helperfd = create_helper(daemon);
+ daemon->helperfd = create_helper(daemon);
if (!(daemon->options & OPT_DEBUG))
{
@@ -381,6 +386,45 @@ int main (int argc, char **argv)
}
}
+#ifdef HAVE_TFTP
+ if (daemon->options & OPT_TFTP)
+ {
+ long max_fd = sysconf(_SC_OPEN_MAX);
+
+#ifdef FD_SETSIZE
+ if (FD_SETSIZE < max_fd)
+ max_fd = FD_SETSIZE;
+#endif
+
+ syslog(LOG_INFO, "TFTP %s%s %s",
+ daemon->tftp_prefix ? _("root is ") : _("enabled"),
+ daemon->tftp_prefix ? daemon->tftp_prefix: "",
+ daemon->options & OPT_TFTP_SECURE ? _("secure mode") : "");
+
+ /* This is a guess, it assumes that for small limits,
+ disjoint files might be servered, but for large limits,
+ a single file will be sent to may clients (the file only needs
+ one fd). */
+
+ max_fd -= 30; /* use other than TFTP */
+
+ if (max_fd < 0)
+ max_fd = 5;
+ else if (max_fd < 100)
+ max_fd = max_fd/2;
+ else
+ max_fd = max_fd - 20;
+
+ if (daemon->tftp_max > max_fd)
+ {
+ daemon->tftp_max = max_fd;
+ syslog(LOG_WARNING,
+ _("restricting maximum simultaneous TFTP transfers to %d"),
+ daemon->tftp_max);
+ }
+ }
+#endif
+
if (!(daemon->options & OPT_DEBUG) && (getuid() == 0 || geteuid() == 0))
{
if (bad_capabilities)
@@ -414,15 +458,16 @@ int main (int argc, char **argv)
tp = &t;
}
-#ifdef HAVE_DBUS
- /* Whilst polling for the dbus, wake every quarter second */
- if ((daemon->options & OPT_DBUS) && !daemon->dbus)
+ /* Whilst polling for the dbus, or doing a tftp transfer, wake every quarter second */
+ if (daemon->tftp_trans ||
+ ((daemon->options & OPT_DBUS) && !daemon->dbus))
{
t.tv_sec = 0;
t.tv_usec = 250000;
tp = &t;
}
+#ifdef HAVE_DBUS
set_dbus_listeners(daemon, &maxfd, &rset, &wset, &eset);
#endif
@@ -614,7 +659,11 @@ int main (int argc, char **argv)
#endif
check_dns_listeners(daemon, &rset, now);
-
+
+#ifdef HAVE_TFTP
+ check_tftp_listeners(daemon, &rset, now);
+#endif
+
if (daemon->dhcp && FD_ISSET(daemon->dhcpfd, &rset))
dhcp_packet(daemon, now);
@@ -668,7 +717,18 @@ static int set_dns_listeners(struct daemon *daemon, time_t now, fd_set *set, int
struct serverfd *serverfdp;
struct listener *listener;
int wait, i;
-
+
+#ifdef HAVE_TFTP
+ int tftp = 0;
+ struct tftp_transfer *transfer;
+ for (transfer = daemon->tftp_trans; transfer; transfer = transfer->next)
+ {
+ tftp++;
+ FD_SET(transfer->sockfd, set);
+ bump_maxfd(transfer->sockfd, maxfdp);
+ }
+#endif
+
/* will we be able to get memory? */
get_new_frec(daemon, now, &wait);
@@ -696,8 +756,17 @@ static int set_dns_listeners(struct daemon *daemon, time_t now, fd_set *set, int
bump_maxfd(listener->tcpfd, maxfdp);
break;
}
- }
+#ifdef HAVE_TFTP
+ if (tftp <= daemon->tftp_max && listener->tftpfd != -1)
+ {
+ FD_SET(listener->tftpfd, set);
+ bump_maxfd(listener->tftpfd, maxfdp);
+ }
+#endif
+
+ }
+
return wait;
}
@@ -705,116 +774,121 @@ static void check_dns_listeners(struct daemon *daemon, fd_set *set, time_t now)
{
struct serverfd *serverfdp;
struct listener *listener;
+
+ for (serverfdp = daemon->sfds; serverfdp; serverfdp = serverfdp->next)
+ if (FD_ISSET(serverfdp->fd, set))
+ reply_query(serverfdp, daemon, now);
+
+ for (listener = daemon->listeners; listener; listener = listener->next)
+ {
+ if (FD_ISSET(listener->fd, set))
+ receive_query(listener, daemon, now);
+
+#ifdef HAVE_TFTP
+ if (listener->tftpfd != -1 && FD_ISSET(listener->tftpfd, set))
+ tftp_request(listener, daemon, now);
+#endif
- for (serverfdp = daemon->sfds; serverfdp; serverfdp = serverfdp->next)
- if (FD_ISSET(serverfdp->fd, set))
- reply_query(serverfdp, daemon, now);
-
- for (listener = daemon->listeners; listener; listener = listener->next)
- {
- if (FD_ISSET(listener->fd, set))
- receive_query(listener, daemon, now);
-
- if (FD_ISSET(listener->tcpfd, set))
- {
- int confd;
- struct irec *iface = NULL;
- pid_t p;
-
- while((confd = accept(listener->tcpfd, NULL, NULL)) == -1 && errno == EINTR);
+ if (FD_ISSET(listener->tcpfd, set))
+ {
+ int confd;
+ struct irec *iface = NULL;
+ pid_t p;
+
+ while((confd = accept(listener->tcpfd, NULL, NULL)) == -1 && errno == EINTR);
+
+ if (confd == -1)
+ continue;
+
+ if (daemon->options & OPT_NOWILD)
+ iface = listener->iface;
+ else
+ {
+ union mysockaddr tcp_addr;
+ socklen_t tcp_len = sizeof(union mysockaddr);
+ /* Check for allowed interfaces when binding the wildcard address:
+ we do this by looking for an interface with the same address as
+ the local address of the TCP connection, then looking to see if that's
+ an allowed interface. As a side effect, we get the netmask of the
+ interface too, for localisation. */
- if (confd == -1)
- continue;
-
- if (daemon->options & OPT_NOWILD)
- iface = listener->iface;
- else
- {
- union mysockaddr tcp_addr;
- socklen_t tcp_len = sizeof(union mysockaddr);
- /* Check for allowed interfaces when binding the wildcard address:
- we do this by looking for an interface with the same address as
- the local address of the TCP connection, then looking to see if that's
- an allowed interface. As a side effect, we get the netmask of the
- interface too, for localisation. */
-
- /* interface may be new since startup */
- if (enumerate_interfaces(daemon) &&
- getsockname(confd, (struct sockaddr *)&tcp_addr, &tcp_len) != -1)
- for (iface = daemon->interfaces; iface; iface = iface->next)
- if (sockaddr_isequal(&iface->addr, &tcp_addr))
- break;
- }
-
- if (!iface)
- {
- shutdown(confd, SHUT_RDWR);
- close(confd);
- }
+ /* interface may be new since startup */
+ if (enumerate_interfaces(daemon) &&
+ getsockname(confd, (struct sockaddr *)&tcp_addr, &tcp_len) != -1)
+ for (iface = daemon->interfaces; iface; iface = iface->next)
+ if (sockaddr_isequal(&iface->addr, &tcp_addr))
+ break;
+ }
+
+ if (!iface)
+ {
+ shutdown(confd, SHUT_RDWR);
+ close(confd);
+ }
#ifndef NO_FORK
- else if (!(daemon->options & OPT_DEBUG) && (p = fork()) != 0)
- {
- if (p != -1)
- {
- int i;
- for (i = 0; i < MAX_PROCS; i++)
- if (daemon->tcp_pids[i] == 0)
- {
- daemon->tcp_pids[i] = p;
- break;
- }
- }
- close(confd);
- }
-#endif
- else
- {
- unsigned char *buff;
- struct server *s;
- int flags;
- struct in_addr dst_addr_4;
-
- dst_addr_4.s_addr = 0;
-
+ else if (!(daemon->options & OPT_DEBUG) && (p = fork()) != 0)
+ {
+ if (p != -1)
+ {
+ int i;
+ for (i = 0; i < MAX_PROCS; i++)
+ if (daemon->tcp_pids[i] == 0)
+ {
+ daemon->tcp_pids[i] = p;
+ break;
+ }
+ }
+ close(confd);
+ }
+#endif
+ else
+ {
+ unsigned char *buff;
+ struct server *s;
+ int flags;
+ struct in_addr dst_addr_4;
+
+ dst_addr_4.s_addr = 0;
+
/* Arrange for SIGALARM after CHILD_LIFETIME seconds to
terminate the process. */
- if (!(daemon->options & OPT_DEBUG))
- alarm(CHILD_LIFETIME);
-
- /* start with no upstream connections. */
- for (s = daemon->servers; s; s = s->next)
+ if (!(daemon->options & OPT_DEBUG))
+ alarm(CHILD_LIFETIME);
+
+ /* start with no upstream connections. */
+ for (s = daemon->servers; s; s = s->next)
s->tcpfd = -1;
+
+ /* The connected socket inherits non-blocking
+ attribute from the listening socket.
+ Reset that here. */
+ if ((flags = fcntl(confd, F_GETFL, 0)) != -1)
+ fcntl(confd, F_SETFL, flags & ~O_NONBLOCK);
+
+ if (listener->family == AF_INET)
+ dst_addr_4 = iface->addr.in.sin_addr;
+
+ buff = tcp_request(daemon, confd, now, dst_addr_4, iface->netmask);
- /* The connected socket inherits non-blocking
- attribute from the listening socket.
- Reset that here. */
- if ((flags = fcntl(confd, F_GETFL, 0)) != -1)
- fcntl(confd, F_SETFL, flags & ~O_NONBLOCK);
-
- if (listener->family == AF_INET)
- dst_addr_4 = iface->addr.in.sin_addr;
-
- buff = tcp_request(daemon, confd, now, dst_addr_4, iface->netmask);
-
- shutdown(confd, SHUT_RDWR);
- close(confd);
-
- if (buff)
- free(buff);
-
- for (s = daemon->servers; s; s = s->next)
- if (s->tcpfd != -1)
- {
- shutdown(s->tcpfd, SHUT_RDWR);
- close(s->tcpfd);
- }
+ shutdown(confd, SHUT_RDWR);
+ close(confd);
+
+ if (buff)
+ free(buff);
+
+ for (s = daemon->servers; s; s = s->next)
+ if (s->tcpfd != -1)
+ {
+ shutdown(s->tcpfd, SHUT_RDWR);
+ close(s->tcpfd);
+ }
#ifndef NO_FORK
- if (!(daemon->options & OPT_DEBUG))
- _exit(0);
+ if (!(daemon->options & OPT_DEBUG))
+ _exit(0);
#endif
- }
- }
- }
+ }
+ }
+ }
}
@@ -841,7 +915,7 @@ int icmp_ping(struct daemon *daemon, struct in_addr addr)
/* Try and get an ICMP echo from a machine. */
/* Note that whilst in the three second wait, we check for
- (and service) events on the DNS sockets, (so doing that
+ (and service) events on the DNS and TFTP sockets, (so doing that
better not use any resources our caller has in use...)
but we remain deaf to signals or further DHCP packets. */
@@ -900,13 +974,17 @@ int icmp_ping(struct daemon *daemon, struct in_addr addr)
FD_ZERO(&rset);
FD_SET(fd, &rset);
set_dns_listeners(daemon, now, &rset, &maxfd);
-
+
if (select(maxfd+1, &rset, NULL, NULL, &tv) < 0)
FD_ZERO(&rset);
now = dnsmasq_time();
check_dns_listeners(daemon, &rset, now);
-
+
+#ifdef HAVE_TFTP
+ check_tftp_listeners(daemon, &rset, now);
+#endif
+
if (FD_ISSET(fd, &rset) &&
recvfrom(fd, &packet, sizeof(packet), 0,
(struct sockaddr *)&faddr, &len) == sizeof(packet) &&
diff --git a/src/dnsmasq.h b/src/dnsmasq.h
index 2c81464..798a1e1 100644
--- a/src/dnsmasq.h
+++ b/src/dnsmasq.h
@@ -88,30 +88,32 @@ extern int capset(cap_user_header_t header, cap_user_data_t data);
*/
#define DNSMASQ_PACKETSZ PACKETSZ+MAXDNAME+RRFIXEDSZ
-#define OPT_BOGUSPRIV 1
-#define OPT_FILTER 2
-#define OPT_LOG 4
-#define OPT_SELFMX 8
-#define OPT_NO_HOSTS 16
-#define OPT_NO_POLL 32
-#define OPT_DEBUG 64
-#define OPT_ORDER 128
-#define OPT_NO_RESOLV 256
-#define OPT_EXPAND 512
-#define OPT_LOCALMX 1024
-#define OPT_NO_NEG 2048
-#define OPT_NODOTS_LOCAL 4096
-#define OPT_NOWILD 8192
-#define OPT_ETHERS 16384
-#define OPT_RESOLV_DOMAIN 32768
-#define OPT_NO_FORK 65536
-#define OPT_AUTHORITATIVE 131072
-#define OPT_LOCALISE 262144
-#define OPT_DBUS 524288
-#define OPT_BOOTP_DYNAMIC 1048576
-#define OPT_NO_PING 2097152
-#define OPT_LEASE_RO 4194304
-#define OPT_RELOAD 8388608
+#define OPT_BOGUSPRIV (1<<0)
+#define OPT_FILTER (1<<1)
+#define OPT_LOG (1<<2)
+#define OPT_SELFMX (1<<3)
+#define OPT_NO_HOSTS (1<<4)
+#define OPT_NO_POLL (1<<5)
+#define OPT_DEBUG (1<<6)
+#define OPT_ORDER (1<<7)
+#define OPT_NO_RESOLV (1<<8)
+#define OPT_EXPAND (1<<9)
+#define OPT_LOCALMX (1<<10)
+#define OPT_NO_NEG (1<<11)
+#define OPT_NODOTS_LOCAL (1<<12)
+#define OPT_NOWILD (1<<13)
+#define OPT_ETHERS (1<<14)
+#define OPT_RESOLV_DOMAIN (1<<15)
+#define OPT_NO_FORK (1<<16)
+#define OPT_AUTHORITATIVE (1<<17)
+#define OPT_LOCALISE (1<<18)
+#define OPT_DBUS (1<<19)
+#define OPT_BOOTP_DYNAMIC (1<<20)
+#define OPT_NO_PING (1<<21)
+#define OPT_LEASE_RO (1<<22)
+#define OPT_RELOAD (1<<24)
+#define OPT_TFTP (1<<25)
+#define OPT_TFTP_SECURE (1<<26)
struct all_addr {
union {
@@ -146,6 +148,11 @@ struct txt_record {
struct txt_record *next;
};
+struct ptr_record {
+ char *name, *ptr;
+ struct ptr_record *next;
+};
+
union bigname {
char name[MAXDNAME];
union bigname *next; /* freelist */
@@ -239,11 +246,12 @@ struct server {
struct irec {
union mysockaddr addr;
struct in_addr netmask; /* only valid for IPv4 */
+ int dhcp_ok;
struct irec *next;
};
struct listener {
- int fd, tcpfd, family;
+ int fd, tcpfd, tftpfd, family;
struct irec *iface; /* only valid for non-wildcard */
struct listener *next;
};
@@ -274,7 +282,7 @@ struct hostsfile {
struct frec {
union mysockaddr source;
struct all_addr dest;
- struct server *sentto;
+ struct server *sentto; /* NULL means free */
unsigned int iface;
unsigned short orig_id, new_id;
int fd, forwardall;
@@ -380,6 +388,13 @@ struct dhcp_mac {
struct dhcp_mac *next;
};
+#if defined(__FreeBSD__) || defined(__DragonFly__)
+struct dhcp_bridge {
+ char iface[IF_NAMESIZE];
+ struct dhcp_bridge *alias, *next;
+};
+#endif
+
struct dhcp_context {
unsigned int lease_time, addr_epoch;
struct in_addr netmask, broadcast;
@@ -415,6 +430,23 @@ struct ping_result {
struct ping_result *next;
};
+struct tftp_file {
+ int refcount, fd;
+ off_t size;
+ char filename[];
+};
+
+struct tftp_transfer {
+ int sockfd;
+ time_t timeout;
+ int backoff;
+ unsigned int block, blocksize;
+ struct sockaddr_in peer;
+ char opt_blocksize, opt_transize;
+ struct tftp_file *file;
+ struct tftp_transfer *next;
+};
+
struct daemon {
/* datastuctures representing the command-line and
config file arguments. All set (including defaults)
@@ -424,6 +456,7 @@ struct daemon {
struct resolvc default_resolv, *resolv_files;
struct mx_srv_record *mxnames;
struct txt_record *txt;
+ struct ptr_record *ptr;
char *mxtarget;
char *lease_file;
char *username, *groupname;
@@ -444,8 +477,8 @@ struct daemon {
struct dhcp_vendor *dhcp_vendors;
struct dhcp_mac *dhcp_macs;
struct dhcp_boot *boot_config;
- struct dhcp_netid_list *dhcp_ignore;
- int dhcp_max;
+ struct dhcp_netid_list *dhcp_ignore, *dhcp_ignore_names;
+ int dhcp_max, tftp_max;
unsigned int min_leasetime;
struct doctor *doctors;
unsigned short edns_pktsz;
@@ -473,14 +506,20 @@ struct daemon {
char *dhcp_buff, *dhcp_buff2;
struct ping_result *ping_results;
FILE *lease_stream;
+#if defined(__FreeBSD__) || defined(__DragonFly__)
+ struct dhcp_bridge *bridges;
+#endif
/* DBus stuff */
-#ifdef HAVE_DBUS
/* void * here to avoid depending on dbus headers outside dbus.c */
void *dbus;
+#ifdef HAVE_DBUS
struct watch *watches;
#endif
+ /* TFTP stuff */
+ struct tftp_transfer *tftp_trans;
+ char *tftp_prefix;
};
/* cache.c */
@@ -515,7 +554,7 @@ size_t answer_request(HEADER *header, char *limit, size_t qlen, struct daemon *d
int check_for_bogus_wildcard(HEADER *header, size_t qlen, char *name,
struct bogus_addr *addr, time_t now);
unsigned char *find_pseudoheader(HEADER *header, size_t plen,
- size_t *len, unsigned char **p);
+ size_t *len, unsigned char **p, int *is_sign);
int check_for_local_domain(char *name, time_t now, struct daemon *daemon);
unsigned int questions_crc(HEADER *header, size_t plen, char *buff);
size_t resize_packet(HEADER *header, size_t plen,
@@ -563,10 +602,10 @@ struct serverfd *allocate_sfd(union mysockaddr *addr, struct serverfd **sfds);
int reload_servers(char *fname, struct daemon *daemon);
void check_servers(struct daemon *daemon);
int enumerate_interfaces(struct daemon *daemon);
-struct listener *create_wildcard_listeners(int port);
+struct listener *create_wildcard_listeners(int port, int have_tftp);
struct listener *create_bound_listeners(struct daemon *daemon);
-int iface_check(struct daemon *daemon, int family,
- struct all_addr *addr, char *name);
+int iface_check(struct daemon *daemon, int family, struct all_addr *addr,
+ struct ifreq *ifr, int *indexp);
int fix_fd(int fd);
/* dhcp.c */
@@ -652,3 +691,9 @@ void helper_write(struct daemon *daemon);
void queue_script(struct daemon *daemon, int action,
struct dhcp_lease *lease, char *hostname);
int helper_buf_empty(void);
+
+/* tftp.c */
+#ifdef HAVE_TFTP
+void tftp_request(struct listener *listen, struct daemon *daemon, time_t now);
+void check_tftp_listeners(struct daemon *daemon, fd_set *rset, time_t now);
+#endif
diff --git a/src/forward.c b/src/forward.c
index 523a6e3..85fcb4c 100644
--- a/src/forward.c
+++ b/src/forward.c
@@ -14,11 +14,11 @@
static struct frec *frec_list = NULL;
-static struct frec *lookup_frec(unsigned short id);
+static struct frec *lookup_frec(unsigned short id, unsigned int crc);
static struct frec *lookup_frec_by_sender(unsigned short id,
union mysockaddr *addr,
unsigned int crc);
-static unsigned short get_id(void);
+static unsigned short get_id(int force, unsigned short force_id, unsigned int crc);
/* Send a UDP packet with it's source address set as "source"
@@ -163,7 +163,7 @@ static unsigned short search_servers(struct daemon *daemon, time_t now, struct a
{
if ((sflag | F_QUERY ) & qtype)
{
- flags = qtype;
+ flags = qtype & ~F_BIGNAME;
if (serv->addr.sa.sa_family == AF_INET)
*addrpp = (struct all_addr *)&serv->addr.in.sin_addr;
#ifdef HAVE_IPV6
@@ -184,7 +184,9 @@ static unsigned short search_servers(struct daemon *daemon, time_t now, struct a
else
log_query(F_CONFIG | F_FORWARD | flags, qdomain, *addrpp, 0, NULL, 0);
}
- else if (qtype && (daemon->options & OPT_NODOTS_LOCAL) && !strchr(qdomain, '.') && namelen != 0)
+ else if (qtype && !(qtype & F_BIGNAME) &&
+ (daemon->options & OPT_NODOTS_LOCAL) && !strchr(qdomain, '.') && namelen != 0)
+ /* don't forward simple names, make exception from NS queries and empty name. */
flags = F_NXDOMAIN;
if (flags == F_NXDOMAIN && check_for_local_domain(qdomain, now, daemon))
@@ -237,12 +239,16 @@ static void forward_query(struct daemon *daemon, int udpfd, union mysockaddr *ud
if (forward)
{
+ /* force unchanging id for signed packets */
+ int is_sign;
+ find_pseudoheader(header, plen, NULL, NULL, &is_sign);
+
forward->source = *udpaddr;
forward->dest = *dst_addr;
forward->iface = dst_iface;
- forward->new_id = get_id();
- forward->fd = udpfd;
forward->orig_id = ntohs(header->id);
+ forward->new_id = get_id(is_sign, forward->orig_id, crc);
+ forward->fd = udpfd;
forward->crc = crc;
forward->forwardall = 0;
header->id = htons(forward->new_id);
@@ -325,7 +331,7 @@ static void forward_query(struct daemon *daemon, int udpfd, union mysockaddr *ud
/* could not send on, prepare to return */
header->id = htons(forward->orig_id);
- forward->new_id = 0; /* cancel */
+ forward->sentto = NULL; /* cancel */
}
/* could not send on, return empty answer or address if known for whole domain */
@@ -339,17 +345,17 @@ static void forward_query(struct daemon *daemon, int udpfd, union mysockaddr *ud
}
static size_t process_reply(struct daemon *daemon, HEADER *header, time_t now,
- unsigned int query_crc, struct server *server, size_t n)
+ struct server *server, size_t n)
{
unsigned char *pheader, *sizep;
- int munged = 0;
+ int munged = 0, is_sign;
size_t plen;
/* If upstream is advertising a larger UDP packet size
than we allow, trim it so that we don't get overlarge
- requests for the client. */
+ requests for the client. We can't do this for signed packets. */
- if ((pheader = find_pseudoheader(header, n, &plen, &sizep)))
+ if ((pheader = find_pseudoheader(header, n, &plen, &sizep, &is_sign)) && !is_sign)
{
unsigned short udpsz;
unsigned char *psave = sizep;
@@ -359,7 +365,7 @@ static size_t process_reply(struct daemon *daemon, HEADER *header, time_t now,
PUTSHORT(daemon->edns_pktsz, psave);
}
- if (header->opcode != QUERY || (header->rcode != NOERROR && header->rcode != NXDOMAIN))
+ if (is_sign || header->opcode != QUERY || (header->rcode != NOERROR && header->rcode != NXDOMAIN))
return n;
/* Complain loudly if the upstream server is non-recursive. */
@@ -392,12 +398,8 @@ static size_t process_reply(struct daemon *daemon, HEADER *header, time_t now,
header->aa = 1;
header->rcode = NOERROR;
}
-
- /* If the crc of the question section doesn't match the crc we sent, then
- someone might be attempting to insert bogus values into the cache by
- sending replies containing questions and bogus answers. */
- if (query_crc == questions_crc(header, n, daemon->namebuff))
- extract_addresses(header, n, daemon->namebuff, now, daemon);
+
+ extract_addresses(header, n, daemon->namebuff, now, daemon);
}
/* do this after extract_addresses. Ensure NODATA reply and remove
@@ -421,16 +423,16 @@ void reply_query(struct serverfd *sfd, struct daemon *daemon, time_t now)
{
/* packet from peer server, extract data for cache, and send to
original requester */
- struct frec *forward;
HEADER *header;
union mysockaddr serveraddr;
+ struct frec *forward;
socklen_t addrlen = sizeof(serveraddr);
ssize_t n = recvfrom(sfd->fd, daemon->packet, daemon->edns_pktsz, 0, &serveraddr.sa, &addrlen);
size_t nn;
/* packet buffer overwritten */
daemon->srv_save = NULL;
-
+
/* Determine the address of the server replying so that we can mark that as good */
serveraddr.sa.sa_family = sfd->source_addr.sa.sa_family;
#ifdef HAVE_IPV6
@@ -439,51 +441,55 @@ void reply_query(struct serverfd *sfd, struct daemon *daemon, time_t now)
#endif
header = (HEADER *)daemon->packet;
- forward = lookup_frec(ntohs(header->id));
- if (n >= (int)sizeof(HEADER) && header->qr && forward)
+ if (n >= (int)sizeof(HEADER) && header->qr &&
+ (forward = lookup_frec(ntohs(header->id), questions_crc(header, n, daemon->namebuff))))
{
- struct server *server = forward->sentto;
-
- if ((header->rcode == SERVFAIL || header->rcode == REFUSED) && forward->forwardall == 0)
- /* for broken servers, attempt to send to another one. */
- {
- unsigned char *pheader;
- size_t plen;
-
- /* recreate query from reply */
- pheader = find_pseudoheader(header, (size_t)n, &plen, NULL);
- header->ancount = htons(0);
- header->nscount = htons(0);
- header->arcount = htons(0);
- if ((nn = resize_packet(header, (size_t)n, pheader, plen)))
- {
- header->qr = 0;
- header->tc = 0;
- forward_query(daemon, -1, NULL, NULL, 0, header, nn, now, forward);
- return;
- }
- }
-
- if ((forward->sentto->flags & SERV_TYPE) == 0)
- {
- if (header->rcode == SERVFAIL || header->rcode == REFUSED)
- server = NULL;
- else
- {
- struct server *last_server;
- /* find good server by address if possible, otherwise assume the last one we sent to */
- for (last_server = daemon->servers; last_server; last_server = last_server->next)
- if (!(last_server->flags & (SERV_LITERAL_ADDRESS | SERV_HAS_DOMAIN | SERV_FOR_NODOTS | SERV_NO_ADDR)) &&
- sockaddr_isequal(&last_server->addr, &serveraddr))
- {
- server = last_server;
- break;
- }
- }
- daemon->last_server = server;
- }
-
+ struct server *server = forward->sentto;
+
+ if ((header->rcode == SERVFAIL || header->rcode == REFUSED) && forward->forwardall == 0)
+ /* for broken servers, attempt to send to another one. */
+ {
+ unsigned char *pheader;
+ size_t plen;
+ int is_sign;
+
+ /* recreate query from reply */
+ pheader = find_pseudoheader(header, (size_t)n, &plen, NULL, &is_sign);
+ if (!is_sign)
+ {
+ header->ancount = htons(0);
+ header->nscount = htons(0);
+ header->arcount = htons(0);
+ if ((nn = resize_packet(header, (size_t)n, pheader, plen)))
+ {
+ header->qr = 0;
+ header->tc = 0;
+ forward_query(daemon, -1, NULL, NULL, 0, header, nn, now, forward);
+ return;
+ }
+ }
+ }
+
+ if ((forward->sentto->flags & SERV_TYPE) == 0)
+ {
+ if (header->rcode == SERVFAIL || header->rcode == REFUSED)
+ server = NULL;
+ else
+ {
+ struct server *last_server;
+ /* find good server by address if possible, otherwise assume the last one we sent to */
+ for (last_server = daemon->servers; last_server; last_server = last_server->next)
+ if (!(last_server->flags & (SERV_LITERAL_ADDRESS | SERV_HAS_DOMAIN | SERV_FOR_NODOTS | SERV_NO_ADDR)) &&
+ sockaddr_isequal(&last_server->addr, &serveraddr))
+ {
+ server = last_server;
+ break;
+ }
+ }
+ daemon->last_server = server;
+ }
+
/* If the answer is an error, keep the forward record in place in case
we get a good reply from another server. Kill it when we've
had replies from all to avoid filling the forwarding table when
@@ -491,14 +497,14 @@ void reply_query(struct serverfd *sfd, struct daemon *daemon, time_t now)
if (forward->forwardall == 0 || --forward->forwardall == 1 ||
(header->rcode != REFUSED && header->rcode != SERVFAIL))
{
- if ((nn = process_reply(daemon, header, now, forward->crc, server, (size_t)n)))
+ if ((nn = process_reply(daemon, header, now, server, (size_t)n)))
{
header->id = htons(forward->orig_id);
header->ra = 1; /* recursion if available */
send_from(forward->fd, daemon->options & OPT_NOWILD, daemon->packet, nn,
&forward->source, &forward->dest, forward->iface);
}
- forward->new_id = 0; /* cancel */
+ forward->sentto = NULL; /* cancel */
}
}
}
@@ -611,27 +617,24 @@ void receive_query(struct listener *listen, struct daemon *daemon, time_t now)
if (if_index == 0)
return;
- if (daemon->if_except || daemon->if_names || (daemon->options & OPT_LOCALISE))
- {
#ifdef SIOCGIFNAME
- ifr.ifr_ifindex = if_index;
- if (ioctl(listen->fd, SIOCGIFNAME, &ifr) == -1)
- return;
+ ifr.ifr_ifindex = if_index;
+ if (ioctl(listen->fd, SIOCGIFNAME, &ifr) == -1)
+ return;
#else
- if (!if_indextoname(if_index, ifr.ifr_name))
- return;
+ if (!if_indextoname(if_index, ifr.ifr_name))
+ return;
#endif
-
- if (listen->family == AF_INET &&
- (daemon->options & OPT_LOCALISE) &&
- ioctl(listen->fd, SIOCGIFNETMASK, &ifr) == -1)
- return;
-
- netmask = ((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr;
- }
-
- if (!iface_check(daemon, listen->family, &dst_addr, ifr.ifr_name))
+
+ if (!iface_check(daemon, listen->family, &dst_addr, &ifr, &if_index))
return;
+
+ if (listen->family == AF_INET &&
+ (daemon->options & OPT_LOCALISE) &&
+ ioctl(listen->fd, SIOCGIFNETMASK, &ifr) == -1)
+ return;
+
+ netmask = ((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr;
}
if (extract_request(header, (size_t)n, daemon->namebuff, &type))
@@ -788,9 +791,13 @@ unsigned char *tcp_request(struct daemon *daemon, int confd, time_t now,
#endif
/* There's no point in updating the cache, since this process will exit and
- lose the information after one query. We make this call for the alias and
+ lose the information after a few queries. We make this call for the alias and
bogus-nxdomain side-effects. */
- m = process_reply(daemon, header, now, crc, last_server, (unsigned int)m);
+ /* If the crc of the question section doesn't match the crc we sent, then
+ 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(daemon, header, now, last_server, (unsigned int)m);
break;
}
@@ -818,7 +825,7 @@ static struct frec *allocate_frec(time_t now)
{
f->next = frec_list;
f->time = now;
- f->new_id = 0;
+ f->sentto = NULL;
frec_list = f;
}
@@ -837,7 +844,7 @@ struct frec *get_new_frec(struct daemon *daemon, time_t now, int *wait)
*wait = 0;
for (f = frec_list, oldest = NULL, count = 0; f; f = f->next, count++)
- if (f->new_id == 0)
+ if (!f->sentto)
{
f->time = now;
return f;
@@ -858,7 +865,7 @@ struct frec *get_new_frec(struct daemon *daemon, time_t now, int *wait)
if (!wait)
{
- oldest->new_id = 0;
+ oldest->sentto = 0;
oldest->time = now;
}
return oldest;
@@ -879,12 +886,14 @@ struct frec *get_new_frec(struct daemon *daemon, time_t now, int *wait)
return f; /* OK if malloc fails and this is NULL */
}
-static struct frec *lookup_frec(unsigned short id)
+/* crc is all-ones if not known. */
+static struct frec *lookup_frec(unsigned short id, unsigned int crc)
{
struct frec *f;
for(f = frec_list; f; f = f->next)
- if (f->new_id == id)
+ if (f->sentto && f->new_id == id &&
+ (f->crc == crc || crc == 0xffffffff))
return f;
return NULL;
@@ -897,7 +906,7 @@ static struct frec *lookup_frec_by_sender(unsigned short id,
struct frec *f;
for(f = frec_list; f; f = f->next)
- if (f->new_id &&
+ if (f->sentto &&
f->orig_id == id &&
f->crc == crc &&
sockaddr_isequal(&f->source, addr))
@@ -912,8 +921,8 @@ void server_gone(struct daemon *daemon, struct server *server)
struct frec *f;
for (f = frec_list; f; f = f->next)
- if (f->new_id != 0 && f->sentto == server)
- f->new_id = 0;
+ if (f->sentto && f->sentto == server)
+ f->sentto = NULL;
if (daemon->last_server == server)
daemon->last_server = NULL;
@@ -922,20 +931,25 @@ void server_gone(struct daemon *daemon, struct server *server)
daemon->srv_save = NULL;
}
-/* return unique random ids between 1 and 65535 */
-static unsigned short get_id(void)
+/* return unique random ids.
+ For signed packets we can't change the ID without breaking the
+ signing, so we keep the same one. In this case force is set, and this
+ routine degenerates into killing any conflicting forward record. */
+static unsigned short get_id(int force, unsigned short force_id, unsigned int crc)
{
unsigned short ret = 0;
-
- while (ret == 0)
+
+ if (force)
{
- ret = rand16();
-
- /* scrap ids already in use */
- if ((ret != 0) && lookup_frec(ret))
- ret = 0;
+ struct frec *f = lookup_frec(force_id, crc);
+ if (f)
+ f->sentto = NULL; /* free */
+ ret = force_id;
}
-
+ else do
+ ret = rand16();
+ while (lookup_frec(ret, crc));
+
return ret;
}
diff --git a/src/netlink.c b/src/netlink.c
index 1be6c9a..b744ac9 100644
--- a/src/netlink.c
+++ b/src/netlink.c
@@ -18,6 +18,14 @@
#include <linux/netlink.h>
#include <linux/rtnetlink.h>
+/* linux 2.6.19 buggers up the headers, patch it up here. */
+#ifndef IFA_RTA
+# define IFA_RTA(r) \
+ ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifaddrmsg))))
+
+# include <linux/if_addr.h>
+#endif
+
static struct iovec iov;
static void nl_err(struct nlmsghdr *h);
diff --git a/src/network.c b/src/network.c
index 05a66ca..823ad39 100644
--- a/src/network.c
+++ b/src/network.c
@@ -12,7 +12,8 @@
#include "dnsmasq.h"
-int iface_check(struct daemon *daemon, int family, struct all_addr *addr, char *name)
+int iface_check(struct daemon *daemon, int family, struct all_addr *addr,
+ struct ifreq *ifr, int *indexp)
{
struct iname *tmp;
int ret = 1;
@@ -20,16 +21,49 @@ int iface_check(struct daemon *daemon, int family, struct all_addr *addr, char *
/* Note: have to check all and not bail out early, so that we set the
"used" flags. */
- if (daemon->if_names || daemon->if_addrs)
+ if (indexp)
+ {
+#if defined(__FreeBSD__) || defined(__DragonFly__)
+ /* One form of bridging on FreeBSD has the property that packets
+ can be recieved on bridge interfaces which do not have an IP address.
+ We allow these to be treated as aliases of another interface which does have
+ an IP address with --dhcp-bridge=interface,alias,alias */
+ struct dhcp_bridge *bridge, *alias;
+ for (bridge = daemon->bridges; bridge; bridge = bridge->next)
+ {
+ for (alias = bridge->alias; alias; alias = alias->next)
+ if (strncmp(ifr->ifr_name, alias->iface, IF_NAMESIZE) == 0)
+ {
+ int newindex;
+
+ if (!(newindex = if_nametoindex(bridge->iface)))
+ {
+ syslog(LOG_WARNING, _("unknown interface %s in bridge-interface"), ifr->ifr_name);
+ return 0;
+ }
+ else
+ {
+ *indexp = newindex;
+ strncpy(ifr->ifr_name, bridge->iface, IF_NAMESIZE);
+ break;
+ }
+ }
+ if (alias)
+ break;
+ }
+#endif
+ }
+
+ 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))
+ if (tmp->name && (strcmp(tmp->name, ifr->ifr_name) == 0))
ret = tmp->used = 1;
for (tmp = daemon->if_addrs; tmp; tmp = tmp->next)
- if (tmp->addr.sa.sa_family == family)
+ if (addr && tmp->addr.sa.sa_family == family)
{
if (family == AF_INET &&
tmp->addr.in.sin_addr.s_addr == addr->addr.addr4.s_addr)
@@ -44,7 +78,7 @@ int iface_check(struct daemon *daemon, int family, struct all_addr *addr, char *
}
for (tmp = daemon->if_except; tmp; tmp = tmp->next)
- if (tmp->name && (strcmp(tmp->name, name) == 0))
+ if (tmp->name && (strcmp(tmp->name, ifr->ifr_name) == 0))
ret = 0;
return ret;
@@ -56,6 +90,8 @@ static int iface_allowed(struct daemon *daemon, struct irec **irecp, int if_inde
struct irec *iface;
int fd;
struct ifreq ifr;
+ int dhcp_ok = 1;
+ struct iname *tmp;
/* check whether the interface IP has been added already
we call this routine multiple times. */
@@ -109,12 +145,16 @@ static int iface_allowed(struct daemon *daemon, struct irec **irecp, int if_inde
}
if (addr->sa.sa_family == AF_INET &&
- !iface_check(daemon, AF_INET, (struct all_addr *)&addr->in.sin_addr, ifr.ifr_name))
+ !iface_check(daemon, AF_INET, (struct all_addr *)&addr->in.sin_addr, &ifr, 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_IPV6
if (addr->sa.sa_family == AF_INET6 &&
- !iface_check(daemon, AF_INET6, (struct all_addr *)&addr->in6.sin6_addr, ifr.ifr_name))
+ !iface_check(daemon, AF_INET6, (struct all_addr *)&addr->in6.sin6_addr, &ifr, NULL))
return 1;
#endif
@@ -123,8 +163,9 @@ static int iface_allowed(struct daemon *daemon, struct irec **irecp, int if_inde
{
iface->addr = *addr;
iface->netmask = netmask;
+ iface->dhcp_ok = dhcp_ok;
iface->next = *irecp;
- *irecp = iface;
+ *irecp = iface;
return 1;
}
@@ -239,6 +280,7 @@ static int create_ipv6_listener(struct listener **link, int port)
l = safe_malloc(sizeof(struct listener));
l->fd = fd;
l->tcpfd = tcpfd;
+ l->tftpfd = -1;
l->family = AF_INET6;
l->next = NULL;
*link = l;
@@ -247,12 +289,12 @@ static int create_ipv6_listener(struct listener **link, int port)
}
#endif
-struct listener *create_wildcard_listeners(int port)
+struct listener *create_wildcard_listeners(int port, int have_tftp)
{
union mysockaddr addr;
int opt = 1;
struct listener *l, *l6 = NULL;
- int tcpfd, fd;
+ int tcpfd, fd, tftpfd = -1;
memset(&addr, 0, sizeof(addr));
addr.in.sin_family = AF_INET;
@@ -283,11 +325,32 @@ struct listener *create_wildcard_listeners(int port)
#endif
bind(fd, (struct sockaddr *)&addr, sa_len(&addr)) == -1)
return NULL;
+
+#ifdef HAVE_TFTP
+ if (have_tftp)
+ {
+ addr.in.sin_port = htons(TFTP_PORT);
+ if ((tftpfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
+ return NULL;
+ if (setsockopt(tftpfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) == -1 ||
+ !fix_fd(tftpfd) ||
+#if defined(HAVE_LINUX_NETWORK)
+ setsockopt(tftpfd, SOL_IP, IP_PKTINFO, &opt, sizeof(opt)) == -1 ||
+#elif defined(IP_RECVDSTADDR) && defined(IP_RECVIF)
+ setsockopt(tftpfd, IPPROTO_IP, IP_RECVDSTADDR, &opt, sizeof(opt)) == -1 ||
+ setsockopt(tftpfd, IPPROTO_IP, IP_RECVIF, &opt, sizeof(opt)) == -1 ||
+#endif
+ bind(tftpfd, (struct sockaddr *)&addr, sa_len(&addr)) == -1)
+ return NULL;
+ }
+#endif
+
l = safe_malloc(sizeof(struct listener));
l->family = AF_INET;
l->fd = fd;
l->tcpfd = tcpfd;
+ l->tftpfd = tftpfd;
l->next = l6;
return l;
@@ -295,7 +358,6 @@ struct listener *create_wildcard_listeners(int port)
struct listener *create_bound_listeners(struct daemon *daemon)
{
-
struct listener *listeners = NULL;
struct irec *iface;
int opt = 1;
@@ -306,6 +368,8 @@ struct listener *create_bound_listeners(struct daemon *daemon)
new->family = iface->addr.sa.sa_family;
new->iface = iface;
new->next = listeners;
+ new->tftpfd = -1;
+
if ((new->tcpfd = socket(iface->addr.sa.sa_family, SOCK_STREAM, 0)) == -1 ||
(new->fd = socket(iface->addr.sa.sa_family, SOCK_DGRAM, 0)) == -1 ||
setsockopt(new->fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) == -1 ||
@@ -347,8 +411,20 @@ struct listener *create_bound_listeners(struct daemon *daemon)
if (listen(new->tcpfd, 5) == -1)
die(_("failed to listen on socket: %s"), NULL);
}
+
+ if ((daemon->options & OPT_TFTP) && iface->addr.sa.sa_family == AF_INET && iface->dhcp_ok)
+ {
+ short save = iface->addr.in.sin_port;
+ iface->addr.in.sin_port = htons(TFTP_PORT);
+ if ((new->tftpfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1 ||
+ setsockopt(new->tftpfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) == -1 ||
+ !fix_fd(new->tftpfd) ||
+ bind(new->tftpfd, &iface->addr.sa, sa_len(&iface->addr)) == -1)
+ die(_("failed to create TFTP socket: %s"), NULL);
+ iface->addr.in.sin_port = save;
+ }
}
-
+
return listeners;
}
diff --git a/src/option.c b/src/option.c
index 7564552..66bd31c 100644
--- a/src/option.c
+++ b/src/option.c
@@ -27,8 +27,14 @@ struct myoption {
#define OPTSTRING "9531yZDNLERKzowefnbvhdkqr:m:p:c:l:s:i:t:u:g:a:x:S:C:A:T:H:Q:I:B:F:G:O:M:X:V:U:j:P:J:W:Y:2:4:6:7:8:0:"
/* options which don't have a one-char version */
-#define LOPT_RELOAD 256
-
+#define LOPT_RELOAD 256
+#define LOPT_NO_NAMES 257
+#define LOPT_TFTP 258
+#define LOPT_SECURE 259
+#define LOPT_PREFIX 260
+#define LOPT_PTR 261
+#define LOPT_BRIDGE 262
+#define LOPT_TFTP_MAX 263
#ifdef HAVE_GETOPT_LONG
static const struct option opts[] =
@@ -42,14 +48,14 @@ static const struct myoption opts[] =
{"help", 0, 0, 'w'},
{"no-daemon", 0, 0, 'd'},
{"log-queries", 0, 0, 'q'},
- {"user", 1, 0, 'u'},
- {"group", 1, 0, 'g'},
- {"resolv-file", 1, 0, 'r'},
+ {"user", 2, 0, 'u'},
+ {"group", 2, 0, 'g'},
+ {"resolv-file", 2, 0, 'r'},
{"mx-host", 1, 0, 'm'},
{"mx-target", 1, 0, 't'},
- {"cache-size", 1, 0, 'c'},
+ {"cache-size", 2, 0, 'c'},
{"port", 1, 0, 'p'},
- {"dhcp-leasefile", 1, 0, 'l'},
+ {"dhcp-leasefile", 2, 0, 'l'},
{"dhcp-lease", 1, 0, 'l' },
{"dhcp-host", 1, 0, 'G'},
{"dhcp-range", 1, 0, 'F'},
@@ -63,12 +69,12 @@ static const struct myoption opts[] =
{"bogus-nxdomain", 1, 0, 'B'},
{"selfmx", 0, 0, 'e'},
{"filterwin2k", 0, 0, 'f'},
- {"pid-file", 1, 0, 'x'},
+ {"pid-file", 2, 0, 'x'},
{"strict-order", 0, 0, 'o'},
{"server", 1, 0, 'S'},
{"local", 1, 0, 'S' },
{"address", 1, 0, 'A' },
- {"conf-file", 1, 0, 'C'},
+ {"conf-file", 2, 0, 'C'},
{"no-resolv", 0, 0, 'R'},
{"expand-hosts", 0, 0, 'E'},
{"localmx", 0, 0, 'L'},
@@ -102,6 +108,15 @@ static const struct myoption opts[] =
{"leasefile-ro", 0, 0, '9'},
{"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 },
+ {"tftp-secure", 0, 0, LOPT_SECURE },
+ {"tftp-root", 1, 0, LOPT_PREFIX },
+ {"tftp-max", 1, 0, LOPT_TFTP_MAX },
+ {"ptr-record", 1, 0, LOPT_PTR },
+#if defined(__FreeBSD__) || defined(__DragonFly__)
+ {"bridge-interface", 1, 0 , LOPT_BRIDGE },
+#endif
{ NULL, 0, 0, 0 }
};
@@ -134,6 +149,8 @@ static const struct optflags optmap[] = {
{ '5', OPT_NO_PING },
{ '9', OPT_LEASE_RO },
{ LOPT_RELOAD, OPT_RELOAD },
+ { LOPT_TFTP, OPT_TFTP },
+ { LOPT_SECURE, OPT_TFTP_SECURE },
{ 'v', 0},
{ 'w', 0},
{ 0, 0 }
@@ -191,16 +208,20 @@ static const struct {
{ "-V, --alias=addr,addr,mask", gettext_noop("Translate IPv4 addresses from upstream servers."), NULL },
{ "-W, --srv-host=name,target,...", gettext_noop("Specify a SRV record."), NULL },
{ "-w, --help", gettext_noop("Display this message."), NULL },
- { "-x, --pid-file=path", gettext_noop("Specify path of PID file. (defaults to %s)."), RUNFILE },
+ { "-x, --pid-file=path", gettext_noop("Specify path of PID file (defaults to %s)."), RUNFILE },
{ "-X, --dhcp-lease-max=number", gettext_noop("Specify maximum number of DHCP leases (defaults to %s)."), "&" },
{ "-y, --localise-queries", gettext_noop("Answer DNS queries based on the interface a query was sent to."), NULL },
{ "-Y --txt-record=name,txt....", gettext_noop("Specify TXT DNS record."), NULL },
+ { " --ptr-record=name,target", gettext_noop("Specify PTR DNS record."), NULL },
{ "-z, --bind-interfaces", gettext_noop("Bind only to interfaces in use."), NULL },
{ "-Z, --read-ethers", gettext_noop("Read DHCP static host information from %s."), ETHERSFILE },
{ "-1, --enable-dbus", gettext_noop("Enable the DBus interface for setting upstream servers, etc."), NULL },
{ "-2, --no-dhcp-interface=interface", gettext_noop("Do not provide DHCP on this interface, only provide DNS."), NULL },
{ "-3, --bootp-dynamic", gettext_noop("Enable dynamic address allocation for bootp."), NULL },
{ "-4, --dhcp-mac=<id>,<mac address>", gettext_noop("Map MAC address (with wildcards) to option set."), NULL },
+#if defined(__FreeBSD__) || defined(__DragonFly__)
+ { " --bridge-interface=iface,alias,..", gettext_noop("Treat DHCP requests on aliases as arriving from interface."), NULL },
+#endif
{ "-5, --no-ping", gettext_noop("Disable ICMP echo address checking in the DHCP server."), NULL },
{ "-6, --dhcp-script=path", gettext_noop("Script to run on DHCP lease creation and destruction."), NULL },
{ "-7, --conf-dir=path", gettext_noop("Read configuration from all the files in this directory."), NULL },
@@ -208,6 +229,11 @@ static const struct {
{ "-9, --leasefile-ro", gettext_noop("Read leases at startup, but never write the lease file."), NULL },
{ "-0, --dns-forward-max=<queries>", gettext_noop("Maximum number of concurrent DNS queries. (defaults to %s)"), "!" },
{ " --clear-on-reload", gettext_noop("Clear DNS cache when reloading %s."), RESOLVFILE },
+ { " --dhcp-ignore-names[=<id>]", gettext_noop("Ignore hostnames provided by DHCP clients."), NULL },
+ { " --enable-tftp", gettext_noop("Enable integrated read-only TFTP server."), NULL },
+ { " --tftp-root=<directory>", gettext_noop("Export files by TFTP only from the specified subtree."), NULL },
+ { " --tftp-secure", gettext_noop("Allow access only to files owned by the user running dnsmasq."), NULL },
+ { " --tftp-max=<connections>", gettext_noop("Maximum number of conncurrent TFTP transfers (defaults to %s)."), "#" },
{ NULL, NULL, NULL }
};
@@ -318,7 +344,19 @@ static void add_txt(struct daemon *daemon, char *name, char *txt)
static void do_usage(void)
{
char buff[100];
- int i;
+ int i, j;
+
+ struct {
+ char handle;
+ int val;
+ } tab[] = {
+ { '$', CACHESIZ },
+ { '*', EDNS_PKTSZ },
+ { '&', MAXLEASES },
+ { '!', FTABSIZ },
+ { '#', TFTP_MAX_CONNECTIONS },
+ { '\0', 0 }
+ };
printf(_("Usage: dnsmasq [options]\n\n"));
#ifndef HAVE_GETOPT_LONG
@@ -330,16 +368,10 @@ static void do_usage(void)
{
if (usage[i].arg)
{
- if (strcmp(usage[i].arg, "$") == 0)
- sprintf(buff, "%d", CACHESIZ);
- else if (strcmp(usage[i].arg, "*") == 0)
- sprintf(buff, "%d", EDNS_PKTSZ);
- else if (strcmp(usage[i].arg, "&") == 0)
- sprintf(buff, "%d", MAXLEASES);
- else if (strcmp(usage[i].arg, "!") == 0)
- sprintf(buff, "%d", FTABSIZ);
- else
- strcpy(buff, usage[i].arg);
+ strcpy(buff, usage[i].arg);
+ for (j = 0; tab[j].handle; j++)
+ if (tab[j].handle == *(usage[i].arg))
+ sprintf(buff, "%d", tab[j].val);
}
printf("%-36.36s", usage[i].flag);
printf(_(usage[i].desc), buff);
@@ -347,24 +379,297 @@ static void do_usage(void)
}
}
+/* This is too insanely large to keep in-line in the switch */
+static char *parse_dhcp_opt(struct daemon *daemon, char *arg)
+{
+ struct dhcp_opt *new = safe_malloc(sizeof(struct dhcp_opt));
+ char lenchar = 0, *cp;
+ int addrs, digs, is_addr, is_hex, is_dec;
+ char *comma, *problem = NULL;
+
+ new->len = 0;
+ new->flags = 0;
+ new->netid = NULL;
+ new->val = NULL;
+ new->vendor_class = NULL;
+
+ if ((comma = safe_strchr(arg, ',')))
+ {
+ struct dhcp_netid *np = NULL;
+ *comma++ = 0;
+
+ do {
+ for (cp = arg; *cp; cp++)
+ if (!(*cp == ' ' || (*cp >='0' && *cp <= '9')))
+ break;
+ if (!*cp)
+ break;
+
+ if (strstr(arg, "vendor:") == arg)
+ new->vendor_class = (unsigned char *)safe_string_alloc(arg+7);
+ else
+ {
+ new->netid = safe_malloc(sizeof (struct dhcp_netid));
+ /* allow optional "net:" for consistency */
+ if (strstr(arg, "net:") == arg)
+ new->netid->net = safe_string_alloc(arg+4);
+ else
+ new->netid->net = safe_string_alloc(arg);
+ new->netid->next = np;
+ np = new->netid;
+ }
+ arg = comma;
+ if ((comma = safe_strchr(arg, ',')))
+ *comma++ = 0;
+ } while (arg);
+ }
+
+ if (!arg || (new->opt = atoi(arg)) == 0)
+ problem = _("bad dhcp-option");
+ else if (comma)
+ {
+ /* characterise the value */
+ is_addr = is_hex = is_dec = 1;
+ addrs = digs = 1;
+ for (cp = comma; *cp; cp++)
+ if (*cp == ',')
+ {
+ addrs++;
+ is_dec = is_hex = 0;
+ }
+ else if (*cp == ':')
+ {
+ digs++;
+ is_dec = is_addr = 0;
+ }
+ else if (*cp == '/')
+ {
+ is_dec = is_hex = 0;
+ if (cp == comma) /* leading / means a pathname */
+ is_addr = 0;
+ }
+ else if (*cp == '.')
+ is_dec = is_hex = 0;
+ else if (!((*cp >='0' && *cp <= '9') || *cp == '-'))
+ {
+ is_addr = 0;
+ if (cp[1] == 0 && is_dec &&
+ (*cp == 'b' || *cp == 's' || *cp == 'i'))
+ {
+ lenchar = *cp;
+ *cp = 0;
+ }
+ else
+ is_dec = 0;
+ if (!((*cp >='A' && *cp <= 'F') ||
+ (*cp >='a' && *cp <= 'f')))
+ is_hex = 0;
+ }
+
+ if (is_hex && digs > 1)
+ {
+ new->len = digs;
+ new->val = safe_malloc(new->len);
+ parse_hex(comma, new->val, digs, NULL, NULL);
+ }
+ else if (is_dec)
+ {
+ int i, val = atoi(comma);
+ /* assume numeric arg is 1 byte except for
+ options where it is known otherwise.
+ For vendor class option, we have to hack. */
+ new->len = 1;
+ if (lenchar == 'b')
+ new->len = 1;
+ else if (lenchar == 's')
+ new->len = 2;
+ else if (lenchar == 'i')
+ new->len = 4;
+ else if (new->vendor_class)
+ {
+ if (val & 0xffff0000)
+ new->len = 4;
+ else if (val & 0xff00)
+ new->len = 2;
+ }
+ else
+ switch (new->opt)
+ {
+ case 13: case 22: case 25: case 26:
+ new->len = 2;
+ break;
+ case 2: case 24: case 35: case 38:
+ new->len = 4;
+ break;
+ }
+ new->val = safe_malloc(new->len);
+ for (i=0; i<new->len; i++)
+ new->val[i] = val>>((new->len - i - 1)*8);
+ }
+ else if (is_addr)
+ {
+ struct in_addr in;
+ unsigned char *op;
+ char *slash;
+ /* max length of address/subnet descriptor is five bytes,
+ add one for the option 120 enc byte too */
+ new->val = op = safe_malloc((5 * addrs) + 1);
+ if (!new->vendor_class)
+ {
+ if (new->opt == 120)
+ *(op++) = 1; /* RFC 3361 "enc byte" */
+ else
+ new->flags |= DHOPT_ADDR;
+ }
+ while (addrs--)
+ {
+ cp = comma;
+ if ((comma = strchr(cp, ',')))
+ *comma++ = 0;
+ if ((slash = strchr(cp, '/')))
+ *slash++ = 0;
+ in.s_addr = inet_addr(cp);
+ if (!slash)
+ {
+ memcpy(op, &in, INADDRSZ);
+ op += INADDRSZ;
+ }
+ else
+ {
+ unsigned char *p = (unsigned char *)&in;
+ int netsize = atoi(slash);
+ *op++ = netsize;
+ if (netsize > 0)
+ *op++ = *p++;
+ if (netsize > 8)
+ *op++ = *p++;
+ if (netsize > 16)
+ *op++ = *p++;
+ if (netsize > 24)
+ *op++ = *p++;
+ new->flags &= ~DHOPT_ADDR; /* cannot re-write descriptor format */
+ }
+ }
+ new->len = op - new->val;
+ }
+ else
+ {
+ /* text arg */
+ if ((new->opt == 119 || new->opt == 120) && !new->vendor_class)
+ {
+ /* dns search, RFC 3397, or SIP, RFC 3361 */
+ unsigned char *q, *r, *tail;
+ unsigned char *p, *m = NULL;
+ size_t newlen, len = 0;
+ int header_size = (new->opt == 119) ? 0 : 1;
+
+ arg = comma;
+ if ((comma = safe_strchr(arg, ',')))
+ *(comma++) = 0;
+
+ while (arg && *arg)
+ {
+ if (!canonicalise_opt(arg))
+ {
+ problem = _("bad domain in dhcp-option");
+ break;
+ }
+
+ if (!(m = realloc(m, len + strlen(arg) + 2 + header_size)))
+ die(_("could not get memory"), NULL);
+ p = m + header_size;
+ q = p + len;
+
+ /* add string on the end in RFC1035 format */
+ while (*arg)
+ {
+ unsigned char *cp = q++;
+ int j;
+ for (j = 0; *arg && (*arg != '.'); arg++, j++)
+ *q++ = *arg;
+ *cp = j;
+ if (*arg)
+ arg++;
+ }
+ *q++ = 0;
+
+ /* Now tail-compress using earlier names. */
+ newlen = q - p;
+ for (tail = p + len; *tail; tail += (*tail) + 1)
+ for (r = p; r - p < (int)len; r += (*r) + 1)
+ if (strcmp((char *)r, (char *)tail) == 0)
+ {
+ PUTSHORT((r - p) | 0xc000, tail);
+ newlen = tail - p;
+ goto end;
+ }
+ end:
+ len = newlen;
+
+ arg = comma;
+ if ((comma = safe_strchr(arg, ',')))
+ *(comma++) = 0;
+ }
+
+ /* RFC 3361, enc byte is zero for names */
+ if (new->opt == 120)
+ m[0] = 0;
+ new->len = (int) len + header_size;
+ new->val = m;
+ }
+ else
+ {
+ new->len = strlen(comma);
+ /* keep terminating zero on string */
+ new->val = (unsigned char *)safe_string_alloc(comma);
+ new->flags |= DHOPT_STRING;
+ }
+ }
+ }
+
+ if (new->len > 255)
+ problem = _("dhcp-option too long");
+
+ if (problem)
+ {
+ if (new->netid)
+ free(new->netid);
+ if (new->val)
+ free(new->val);
+ if (new->vendor_class)
+ free(new->vendor_class);
+ free(new);
+ }
+ else if (new->vendor_class)
+ {
+ new->next = daemon->vendor_opts;
+ daemon->vendor_opts = new;
+ }
+ else
+ {
+ new->next = daemon->dhcp_opts;
+ daemon->dhcp_opts = new;
+ }
+
+ return problem;
+}
+
+
static char *one_opt(struct daemon *daemon, int option, char *arg, char *problem, int nest)
{
int i;
char *comma;
- if(option == '?')
+ if (option == '?')
return problem;
-
+
for (i=0; optmap[i].c; i++)
if (option == optmap[i].c)
{
daemon->options |= optmap[i].flag;
- return arg ? _("extraneous parameter") : NULL;
+ return NULL;
}
-
- if (!arg)
- return _("missing parameter");
-
+
switch (option)
{
case 'C':
@@ -859,6 +1164,49 @@ static char *one_opt(struct daemon *daemon, int option, char *arg, char *problem
option = '?';
break;
+ case LOPT_TFTP_MAX:
+ if (!atoi_check(arg, &daemon->tftp_max))
+ option = '?';
+ break;
+
+ case LOPT_PREFIX:
+ daemon->tftp_prefix = safe_string_alloc(arg);
+ break;
+
+#if defined(__FreeBSD__) || defined(__DragonFly__)
+ case LOPT_BRIDGE:
+ {
+ struct dhcp_bridge *new = safe_malloc(sizeof(struct dhcp_bridge));
+ if (!(comma = strchr(arg, ',')))
+ {
+ problem = _("bad bridge-interface");
+ option = '?';
+ break;
+ }
+
+ *comma = 0;
+ strncpy(new->iface, arg, IF_NAMESIZE);
+ new->alias = NULL;
+ new->next = daemon->bridges;
+ daemon->bridges = new;
+
+ do {
+ arg = comma+1;
+ if ((comma = strchr(arg, ',')))
+ *comma = 0;
+ if (strlen(arg) != 0)
+ {
+ struct dhcp_bridge *b = safe_malloc(sizeof(struct dhcp_bridge));
+ b->next = new->alias;
+ new->alias = b;
+ strncpy(b->iface, arg, IF_NAMESIZE);
+ }
+ } while (comma);
+
+ break;
+ }
+#endif
+
case 'F':
{
int k, leasepos = 2;
@@ -1150,264 +1498,9 @@ static char *one_opt(struct daemon *daemon, int option, char *arg, char *problem
}
case 'O':
- {
- struct dhcp_opt *new = safe_malloc(sizeof(struct dhcp_opt));
- char lenchar = 0, *cp;
- int addrs, digs, is_addr, is_hex, is_dec;
-
- new->len = 0;
- new->flags = 0;
- new->netid = NULL;
- new->val = NULL;
- new->vendor_class = NULL;
-
- if ((comma = safe_strchr(arg, ',')))
- {
- struct dhcp_netid *np = NULL;
- *comma++ = 0;
-
- do {
- for (cp = arg; *cp; cp++)
- if (!(*cp == ' ' || (*cp >='0' && *cp <= '9')))
- break;
- if (!*cp)
- break;
-
- if (strstr(arg, "vendor:") == arg)
- new->vendor_class = (unsigned char *)safe_string_alloc(arg+7);
- else
- {
- new->netid = safe_malloc(sizeof (struct dhcp_netid));
- /* allow optional "net:" for consistency */
- if (strstr(arg, "net:") == arg)
- new->netid->net = safe_string_alloc(arg+4);
- else
- new->netid->net = safe_string_alloc(arg);
- new->netid->next = np;
- np = new->netid;
- }
- arg = comma;
- if ((comma = safe_strchr(arg, ',')))
- *comma++ = 0;
- } while (arg);
- }
-
- if (!arg || (new->opt = atoi(arg)) == 0)
- {
- option = '?';
- problem = _("bad dhcp-option");
- }
- else if (comma && new->opt == 119 && !new->vendor_class)
- {
- /* dns search, RFC 3397 */
- unsigned char *q, *r, *tail;
- unsigned char *p = NULL;
- size_t newlen, len = 0;
-
- arg = comma;
- if ((comma = safe_strchr(arg, ',')))
- *(comma++) = 0;
-
- while (arg && *arg)
- {
- if (!canonicalise_opt(arg))
- {
- option = '?';
- problem = _("bad domain in dhcp-option");
- break;
- }
-
- if (!(p = realloc(p, len + strlen(arg) + 2)))
- die(_("could not get memory"), NULL);
- q = p + len;
-
- /* add string on the end in RFC1035 format */
- while (*arg)
- {
- unsigned char *cp = q++;
- int j;
- for (j = 0; *arg && (*arg != '.'); arg++, j++)
- *q++ = *arg;
- *cp = j;
- if (*arg)
- arg++;
- }
- *q++ = 0;
-
- /* Now tail-compress using earlier names. */
- newlen = q - p;
- for (tail = p + len; *tail; tail += (*tail) + 1)
- for (r = p; r - p < (int)len; r += (*r) + 1)
- if (strcmp((char *)r, (char *)tail) == 0)
- {
- PUTSHORT((r - p) | 0xc000, tail);
- newlen = tail - p;
- goto end;
- }
- end:
- len = newlen;
-
- arg = comma;
- if ((comma = safe_strchr(arg, ',')))
- *(comma++) = 0;
- }
-
- new->len = (int) len;
- new->val = p;
- }
- else if (comma)
- {
- /* not option 119 */
- /* characterise the value */
- is_addr = is_hex = is_dec = 1;
- addrs = digs = 1;
- for (cp = comma; *cp; cp++)
- if (*cp == ',')
- {
- addrs++;
- is_dec = is_hex = 0;
- }
- else if (*cp == ':')
- {
- digs++;
- is_dec = is_addr = 0;
- }
- else if (*cp == '.' || *cp == '/')
- is_dec = is_hex = 0;
- else if (!((*cp >='0' && *cp <= '9') || *cp == '-'))
- {
- is_addr = 0;
- if (cp[1] == 0 && is_dec &&
- (*cp == 'b' || *cp == 's' || *cp == 'i'))
- {
- lenchar = *cp;
- *cp = 0;
- }
- else
- is_dec = 0;
- if (!((*cp >='A' && *cp <= 'F') ||
- (*cp >='a' && *cp <= 'f')))
- is_hex = 0;
- }
-
- if (is_hex && digs > 1)
- {
- new->len = digs;
- new->val = safe_malloc(new->len);
- parse_hex(comma, new->val, digs, NULL, NULL);
- }
- else if (is_dec)
- {
- int i, val = atoi(comma);
- /* assume numeric arg is 1 byte except for
- options where it is known otherwise.
- For vendor class option, we have to hack. */
- new->len = 1;
- if (lenchar == 'b')
- new->len = 1;
- else if (lenchar == 's')
- new->len = 2;
- else if (lenchar == 'i')
- new->len = 4;
- else if (new->vendor_class)
- {
- if (val & 0xffff0000)
- new->len = 4;
- else if (val & 0xff00)
- new->len = 2;
- }
- else
- switch (new->opt)
- {
- case 13: case 22: case 25: case 26:
- new->len = 2;
- break;
- case 2: case 24: case 35: case 38:
- new->len = 4;
- break;
- }
- new->val = safe_malloc(new->len);
- for (i=0; i<new->len; i++)
- new->val[i] = val>>((new->len - i - 1)*8);
- }
- else if (is_addr)
- {
- struct in_addr in;
- unsigned char *op;
- char *slash;
- /* max length of address/subnet descriptor is five bytes */
- new->val = op = safe_malloc(5 * addrs);
- if (!new->vendor_class)
- new->flags |= DHOPT_ADDR;
- while (addrs--)
- {
- cp = comma;
- if ((comma = strchr(cp, ',')))
- *comma++ = 0;
- if ((slash = strchr(cp, '/')))
- *slash++ = 0;
- in.s_addr = inet_addr(cp);
- if (!slash)
- {
- memcpy(op, &in, INADDRSZ);
- op += INADDRSZ;
- }
- else
- {
- unsigned char *p = (unsigned char *)&in;
- int netsize = atoi(slash);
- *op++ = netsize;
- if (netsize > 0)
- *op++ = *p++;
- if (netsize > 8)
- *op++ = *p++;
- if (netsize > 16)
- *op++ = *p++;
- if (netsize > 24)
- *op++ = *p++;
- new->flags &= ~DHOPT_ADDR; /* cannot re-write descriptor format */
- }
- }
- new->len = op - new->val;
- }
- else
- {
- /* text arg */
- new->len = strlen(comma);
- /* keep terminating zero on string */
- new->val = (unsigned char *)safe_string_alloc(comma);
- new->flags |= DHOPT_STRING;
- }
- }
-
- if (new->len > 255)
- {
- option = '?';
- problem = _("dhcp-option too long");
- }
-
- if (option == '?')
- {
- if (new->netid)
- free(new->netid);
- if (new->val)
- free(new->val);
- if (new->vendor_class)
- free(new->vendor_class);
- free(new);
- }
- else if (new->vendor_class)
- {
- new->next = daemon->vendor_opts;
- daemon->vendor_opts = new;
- }
- else
- {
- new->next = daemon->dhcp_opts;
- daemon->dhcp_opts = new;
- }
- break;
- }
+ if ((problem = parse_dhcp_opt(daemon, arg)))
+ option = '?';
+ break;
case 'M':
{
@@ -1509,12 +1602,22 @@ static char *one_opt(struct daemon *daemon, int option, char *arg, char *problem
}
case 'J':
+ case LOPT_NO_NAMES:
{
struct dhcp_netid_list *new = safe_malloc(sizeof(struct dhcp_netid_list));
struct dhcp_netid *list = NULL;
- new->next = daemon->dhcp_ignore;
- daemon->dhcp_ignore = new;
- do {
+ if (option == 'J')
+ {
+ new->next = daemon->dhcp_ignore;
+ daemon->dhcp_ignore = new;
+ }
+ else
+ {
+ new->next = daemon->dhcp_ignore_names;
+ daemon->dhcp_ignore_names = new;
+ }
+
+ while (arg) {
struct dhcp_netid *member = safe_malloc(sizeof(struct dhcp_netid));
if ((comma = safe_strchr(arg, ',')))
*comma++ = 0;
@@ -1522,7 +1625,7 @@ static char *one_opt(struct daemon *daemon, int option, char *arg, char *problem
list = member;
member->net = safe_string_alloc(arg);
arg = comma;
- } while (arg);
+ }
new->list = list;
break;
@@ -1569,6 +1672,30 @@ static char *one_opt(struct daemon *daemon, int option, char *arg, char *problem
break;
}
+ case LOPT_PTR:
+ {
+ struct ptr_record *new;
+
+ if ((comma = safe_strchr(arg, ',')))
+ *(comma) = 0;
+
+ if (!canonicalise_opt(arg))
+ {
+ option = '?';
+ problem = _("bad PTR record");
+ break;
+ }
+
+ new = safe_malloc(sizeof(struct ptr_record));
+ new->next = daemon->ptr;
+ daemon->ptr = new;
+ new->name = safe_string_alloc(arg);
+ new->ptr = NULL;
+ if (comma)
+ new->ptr = safe_string_alloc(comma+1);
+ break;
+ }
+
case 'Y':
{
struct txt_record *new;
@@ -1726,7 +1853,7 @@ static void one_file(struct daemon *daemon, char *file, int nest)
{
int i, option, lineno = 0;
FILE *f;
- char *p, *arg, *buff = daemon->namebuff;
+ char *p, *arg, *start, *buff = daemon->namebuff;
if (nest > 20)
die(_("files nested too deep in %s"), file);
@@ -1743,7 +1870,8 @@ static void one_file(struct daemon *daemon, char *file, int nest)
{
int white;
unsigned int lastquote;
-
+ char *errmess = NULL;
+
lineno++;
/* Implement quotes, inside quotes we allow \\ \" \n and \t
@@ -1805,19 +1933,28 @@ static void one_file(struct daemon *daemon, char *file, int nest)
}
else
arg = NULL;
+
+ /* skip leading space */
+ for (start = buff; *start && isspace(*start); start++);
for (option = 0, i = 0; opts[i].name; i++)
- if (strcmp(opts[i].name, buff) == 0)
- option = opts[i].val;
-
- if (option)
- {
- char *errmess;
- if ((errmess = one_opt(daemon, option, arg, _("error"), nest + 1)))
- complain(errmess, lineno, file);
- }
+ if (strcmp(opts[i].name, start) == 0)
+ {
+ option = opts[i].val;
+ break;
+ }
+
+ if (!option)
+ errmess = _("bad option");
+ else if (opts[i].has_arg == 0 && arg)
+ errmess = _("extraneous parameter");
+ else if (opts[i].has_arg == 1 && !arg)
+ errmess = _("missing parameter");
else
- complain(_("bad option"), lineno, file);
+ errmess = one_opt(daemon, option, arg, _("error"), nest + 1);
+
+ if (errmess)
+ complain(errmess, lineno, file);
}
fclose(f);
@@ -1846,6 +1983,7 @@ struct daemon *read_opts(int argc, char **argv, char *compile_opts)
daemon->groupname = CHGRP;
daemon->runfile = RUNFILE;
daemon->dhcp_max = MAXLEASES;
+ daemon->tftp_max = TFTP_MAX_CONNECTIONS;
daemon->edns_pktsz = EDNS_PKTSZ;
daemon->log_fac = -1;
add_txt(daemon, "version.bind", "dnsmasq-" VERSION );
diff --git a/src/rfc1035.c b/src/rfc1035.c
index fd02f1d..5c0e313 100644
--- a/src/rfc1035.c
+++ b/src/rfc1035.c
@@ -1,4 +1,4 @@
-/* dnsmasq is Copyright (c) 2000 - 2005 Simon Kelley
+/* dnsmasq is Copyright (c) 2000 - 2006 Simon Kelley
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -341,7 +341,8 @@ static unsigned char *skip_section(unsigned char *ansp, int count, HEADER *heade
retransmision and to detect answers to questions we didn't ask, which
might be poisoning attacks. Note that we decode the name rather
than CRC the raw bytes, since replies might be compressed differently.
- We ignore case in the names for the same reason. */
+ We ignore case in the names for the same reason. Return all-ones
+ if there is not question section. */
unsigned int questions_crc(HEADER *header, size_t plen, char *name)
{
int q;
@@ -407,21 +408,44 @@ size_t resize_packet(HEADER *header, size_t plen, unsigned char *pheader, size_t
return ansp - (unsigned char *)header;
}
-unsigned char *find_pseudoheader(HEADER *header, size_t plen, size_t *len, unsigned char **p)
+unsigned char *find_pseudoheader(HEADER *header, size_t plen, size_t *len, unsigned char **p, int *is_sign)
{
/* See if packet has an RFC2671 pseudoheader, and if so return a pointer to it.
- also return length of pseudoheader in *len and pointer to the UDP size in *p */
+ also return length of pseudoheader in *len and pointer to the UDP size in *p
+ Finally, check to see if a packet is signed. If it is we cannot change a single bit before
+ forwarding. We look for SIG and TSIG in the addition section, and TKEY queries (for GSS-TSIG) */
int i, arcount = ntohs(header->arcount);
- unsigned char *ansp;
- unsigned short rdlen, type;
-
- if (arcount == 0 || !(ansp = skip_questions(header, plen)))
+ unsigned char *ansp = (unsigned char *)(header+1);
+ unsigned short rdlen, type, class;
+ unsigned char *ret = NULL;
+
+ if (is_sign && header->opcode == QUERY)
+ {
+ for (i = 0; i < ntohs(header->qdcount); i++)
+ {
+ if (!(ansp = skip_name(ansp, header, plen)))
+ return NULL;
+
+ GETSHORT(type, ansp);
+ GETSHORT(class, ansp);
+
+ if (class == C_IN && type == T_TKEY)
+ *is_sign = 1;
+ }
+ }
+ else
+ {
+ if (!(ansp = skip_questions(header, plen)))
+ return NULL;
+ }
+
+ if (arcount == 0)
return NULL;
if (!(ansp = skip_section(ansp, ntohs(header->ancount) + ntohs(header->nscount), header, plen)))
return NULL;
-
+
for (i = 0; i < arcount; i++)
{
unsigned char *save, *start = ansp;
@@ -430,22 +454,28 @@ unsigned char *find_pseudoheader(HEADER *header, size_t plen, size_t *len, unsi
GETSHORT(type, ansp);
save = ansp;
- ansp += 6; /* class, TTL */
+ GETSHORT(class, ansp);
+ ansp += 4; /* TTL */
GETSHORT(rdlen, ansp);
if ((size_t)(ansp + rdlen - (unsigned char *)header) > plen)
return NULL;
- ansp += rdlen;
- if (type == T_OPT)
+ ansp += rdlen;
+ if (type == T_OPT)
{
if (len)
*len = ansp - start;
if (p)
*p = save;
- return start;
+ ret = start;
}
+ else if (is_sign &&
+ i == arcount - 1 &&
+ class == C_ANY &&
+ (type == T_SIG || type == T_TSIG))
+ *is_sign = 1;
}
- return NULL;
+ return ret;
}
@@ -744,7 +774,8 @@ void extract_addresses(HEADER *header, size_t qlen, char *name, time_t now, stru
}
/* If the packet holds exactly one query
- return 1 and leave the name from the query in name. */
+ return F_IPV4 or F_IPV6 and leave the name from the query in name.
+ Abuse F_BIGNAME to indicate an NS query - yuck. */
unsigned short extract_request(HEADER *header, size_t qlen, char *name, unsigned short *typep)
{
@@ -774,6 +805,8 @@ unsigned short extract_request(HEADER *header, size_t qlen, char *name, unsigned
return F_IPV6;
if (qtype == T_ANY)
return F_IPV4 | F_IPV6;
+ if (qtype == T_NS || qtype == T_SOA)
+ return F_QUERY | F_BIGNAME;
}
return F_QUERY;
@@ -975,27 +1008,25 @@ size_t answer_request(HEADER *header, char *limit, size_t qlen, struct daemon *d
{
char *name = daemon->namebuff;
unsigned char *p, *ansp, *pheader;
- int qtype, qclass, is_arpa;
+ int qtype, qclass;
struct all_addr addr;
unsigned int nameoffset;
unsigned short flag;
int qdcount = ntohs(header->qdcount);
int q, ans, anscount = 0, addncount = 0;
int dryrun = 0, sec_reqd = 0;
+ int is_sign;
struct crec *crecp;
int nxdomain = 0, auth = 1, trunc = 0;
struct mx_srv_record *rec;
- if (!qdcount || header->opcode != QUERY )
- return 0;
-
/* If there is an RFC2671 pseudoheader then it will be overwritten by
partial replies, so we have to do a dry run to see if we can answer
the query. We check to see if the do bit is set, if so we always
forward rather than answering from the cache, which doesn't include
security information. */
- if (find_pseudoheader(header, qlen, NULL, &pheader))
+ if (find_pseudoheader(header, qlen, NULL, &pheader, &is_sign))
{
unsigned short udpsz, ext_rcode, flags;
unsigned char *psave = pheader;
@@ -1010,12 +1041,15 @@ size_t answer_request(HEADER *header, char *limit, size_t qlen, struct daemon *d
than we allow, trim it so that we don't get an overlarge
response from upstream */
- if (udpsz > daemon->edns_pktsz)
+ if (!is_sign && (udpsz > daemon->edns_pktsz))
PUTSHORT(daemon->edns_pktsz, psave);
dryrun = 1;
}
+ if (!qdcount || header->opcode != QUERY )
+ return 0;
+
for (rec = daemon->mxnames; rec; rec = rec->next)
rec->offset = 0;
@@ -1035,11 +1069,7 @@ size_t answer_request(HEADER *header, char *limit, size_t qlen, struct daemon *d
/* now extract name as .-concatenated string into name */
if (!extract_name(header, qlen, &p, name, 1))
return 0; /* bad packet */
-
- /* see if it's w.z.y.z.in-addr.arpa format */
-
- is_arpa = in_arpa_name_2_addr(name, &addr);
-
+
GETSHORT(qtype, p);
GETSHORT(qclass, p);
@@ -1070,7 +1100,16 @@ size_t answer_request(HEADER *header, char *limit, size_t qlen, struct daemon *d
{
if (qtype == T_PTR || qtype == T_ANY)
{
- if (!(crecp = cache_find_by_addr(NULL, &addr, now, is_arpa)))
+ /* see if it's w.z.y.z.in-addr.arpa format */
+ int is_arpa = in_arpa_name_2_addr(name, &addr);
+ struct ptr_record *ptr;
+
+ for (ptr = daemon->ptr; ptr; ptr = ptr->next)
+ if (hostname_isequal(name, ptr->name))
+ break;
+
+ if (!ptr &&
+ !(crecp = cache_find_by_addr(NULL, &addr, now, is_arpa)))
{
if (is_arpa == F_IPV4 && (daemon->options & OPT_BOGUSPRIV) && private_net(&addr))
{
@@ -1081,6 +1120,21 @@ size_t answer_request(HEADER *header, char *limit, size_t qlen, struct daemon *d
log_query(F_CONFIG | F_REVERSE | F_IPV4 | F_NEG | F_NXDOMAIN, name, &addr, 0, NULL, 0);
}
}
+ else if (ptr)
+ {
+ ans = 1;
+ if (!dryrun)
+ {
+ log_query(F_CNAME | F_FORWARD | F_CONFIG | F_BIGNAME, name, NULL, 0, NULL, 0);
+ for (ptr = daemon->ptr; ptr; ptr = ptr->next)
+ if (hostname_isequal(name, ptr->name))
+ {
+ if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, daemon->local_ttl, NULL,
+ T_PTR, C_IN, "d", ptr->ptr))
+ anscount++;
+ }
+ }
+ }
else do
{
/* don't answer wildcard queries with data not from /etc/hosts or dhcp leases */
diff --git a/src/rfc2131.c b/src/rfc2131.c
index 6bebd2c..94f152a 100644
--- a/src/rfc2131.c
+++ b/src/rfc2131.c
@@ -95,7 +95,7 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa
struct dhcp_vendor *vendor;
struct dhcp_mac *mac;
struct dhcp_netid_list *id_list;
- int clid_len = 0, ignore = 0, do_classes = 0;
+ int clid_len = 0, ignore = 0, do_classes = 0, selecting = 0;
struct dhcp_packet *mess = daemon->dhcp_packet.iov_base;
unsigned char *p, *end = (unsigned char *)(mess + 1);
char *hostname = NULL, *offer_hostname = NULL, *client_hostname = NULL;
@@ -446,10 +446,9 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa
{
hostname = config->hostname;
hostname_auth = 1;
- /* be careful not to send an OFFER with a hostname not
- matching the DISCOVER. */
+ /* be careful not to send an OFFER with a hostname not matching the DISCOVER. */
if (fqdn_flags != 0 || !client_hostname || hostname_isequal(hostname, client_hostname))
- offer_hostname = hostname;
+ offer_hostname = hostname;
}
else if (client_hostname && (hostname = strip_hostname(daemon, client_hostname)) && !config)
{
@@ -510,7 +509,7 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa
for (id_list = daemon->dhcp_ignore; id_list; id_list = id_list->next)
if (match_netid(id_list->list, netid, 0))
ignore = 1;
-
+
/* Can have setting to ignore the client ID for a particular MAC address or hostname */
if (have_config(config, CONFIG_NOCLID))
clid = NULL;
@@ -675,6 +674,8 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa
if ((opt = option_find(mess, sz, OPTION_SERVER_IDENTIFIER, INADDRSZ)))
{
/* SELECTING */
+ selecting = 1;
+
for (; context; context = context->current)
if (context->local.s_addr == option_addr(opt).s_addr)
break;
@@ -746,7 +747,7 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa
/* Check if a new static address has been configured. Be very sure that
when the client does DISCOVER, it will get the static address, otherwise
an endless protocol loop will ensue. */
- else if (!tmp &&
+ else if (!tmp && !selecting &&
have_config(config, CONFIG_ADDR) &&
(!have_config(config, CONFIG_DECLINED) ||
difftime(now, config->decline_time) > (float)DECLINE_BACKOFF) &&
@@ -834,8 +835,6 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa
hostname = client_hostname;
hostname_auth = 1;
}
-
- log_packet(daemon, "ACK", &mess->yiaddr, mess, iface_name, hostname);
if (context->netid.net)
{
@@ -845,10 +844,23 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa
time = calc_time(context, config, NULL, option_find(mess, sz, OPTION_LEASE_TIME, 4), now);
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))
+ break;
+ if (id_list)
+ hostname = NULL;
+ }
if (hostname)
lease_set_hostname(lease, hostname, daemon->domain_suffix, hostname_auth);
+
lease_set_expires(lease, time, now);
-
+
+ log_packet(daemon, "ACK", &mess->yiaddr, mess, iface_name, hostname);
+
mess->siaddr = context->local;
bootp_option_put(mess, daemon->boot_config, netid);
p = option_put(p, end, OPTION_MESSAGE_TYPE, 1, DHCPACK);
@@ -1200,14 +1212,12 @@ static unsigned char *do_req_options(struct dhcp_context *context,
if (subnet_addr.s_addr)
p = option_put(p, end, OPTION_SUBNET_SELECT, INADDRSZ, ntohl(subnet_addr.s_addr));
- if (in_list(req_options, OPTION_NETMASK) &&
- !option_find2(netid, config_opts, OPTION_NETMASK))
+ if (!option_find2(netid, config_opts, OPTION_NETMASK))
p = option_put(p, end, OPTION_NETMASK, INADDRSZ, ntohl(context->netmask.s_addr));
/* May not have a "guessed" broadcast address if we got no packets via a relay
from this net yet (ie just unicast renewals after a restart */
if (context->broadcast.s_addr &&
- in_list(req_options, OPTION_BROADCAST) &&
!option_find2(netid, config_opts, OPTION_BROADCAST))
p = option_put(p, end, OPTION_BROADCAST, INADDRSZ, ntohl(context->broadcast.s_addr));
diff --git a/src/tftp.c b/src/tftp.c
new file mode 100644
index 0000000..aab73da
--- /dev/null
+++ b/src/tftp.c
@@ -0,0 +1,495 @@
+/* dnsmasq is Copyright (c) 2000-2006 Simon Kelley
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; version 2 dated June, 1991.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+*/
+
+#include "dnsmasq.h"
+
+#ifdef HAVE_TFTP
+
+static void free_transfer(struct tftp_transfer *transfer);
+static ssize_t tftp_err(int err, char *packet, char *mess, char *file);
+static ssize_t get_block(char *packet, struct tftp_transfer *transfer);
+static char *next(char **p, char *end);
+
+#define OP_RRQ 1
+#define OP_WRQ 2
+#define OP_DATA 3
+#define OP_ACK 4
+#define OP_ERR 5
+#define OP_OACK 6
+
+#define ERR_NOTDEF 0
+#define ERR_FNF 1
+#define ERR_PERM 2
+#define ERR_FULL 3
+#define ERR_ILL 4
+
+void tftp_request(struct listener *listen, struct daemon *daemon, time_t now)
+{
+ ssize_t len;
+ char *packet = daemon->packet;
+ char *filename, *mode, *p, *end, *opt;
+ struct stat statbuf;
+ struct sockaddr_in addr, peer;
+ struct msghdr msg;
+ struct cmsghdr *cmptr;
+ struct iovec iov;
+ struct ifreq ifr;
+ int is_err = 1, if_index = 0;
+ struct iname *tmp;
+ struct tftp_transfer *transfer, *t;
+ struct tftp_file *file;
+
+ union {
+ struct cmsghdr align; /* this ensures alignment */
+#ifdef HAVE_LINUX_NETWORK
+ char control[CMSG_SPACE(sizeof(struct in_pktinfo))];
+#else
+ char control[CMSG_SPACE(sizeof(struct sockaddr_dl))];
+#endif
+ } control_u;
+
+ msg.msg_controllen = sizeof(control_u);
+ msg.msg_control = control_u.control;
+ msg.msg_flags = 0;
+ msg.msg_name = &peer;
+ msg.msg_namelen = sizeof(peer);
+ msg.msg_iov = &iov;
+ msg.msg_iovlen = 1;
+
+ iov.iov_base = packet;
+ iov.iov_len = daemon->packet_buff_sz;
+
+ /* we overwrote the buffer... */
+ daemon->srv_save = NULL;
+
+ if ((len = recvmsg(listen->tftpfd, &msg, 0)) < 2)
+ return;
+
+ if (daemon->options & OPT_NOWILD)
+ addr = listen->iface->addr.in;
+ else
+ {
+ 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;
+ }
+ if (!(ifr.ifr_ifindex = if_index) ||
+ ioctl(listen->tftpfd, SIOCGIFNAME, &ifr) == -1)
+ return;
+
+#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;
+
+ if (if_index == 0 || !if_indextoname(if_index, ifr.ifr_name))
+ return;
+
+#endif
+
+ if (addr.sin_addr.s_addr == 0)
+ return;
+
+ if (!iface_check(daemon, AF_INET, (struct all_addr *)&addr, &ifr, &if_index))
+ return;
+
+ /* allowed interfaces are the same as for DHCP */
+ for (tmp = daemon->dhcp_except; tmp; tmp = tmp->next)
+ if (tmp->name && (strcmp(tmp->name, ifr.ifr_name) == 0))
+ return;
+
+ }
+
+ /* tell kernel to use ephemeral port */
+ addr.sin_port = 0;
+ addr.sin_family = AF_INET;
+#ifdef HAVE_SOCKADDR_SA_LEN
+ addr.sin_len = sizeof(addr);
+#endif
+
+ if (!(transfer = malloc(sizeof(struct tftp_transfer))))
+ return;
+
+ if ((transfer->sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
+ {
+ free(transfer);
+ return;
+ }
+
+ transfer->peer = peer;
+ transfer->timeout = now + 1;
+ transfer->backoff = 1;
+ transfer->block = 1;
+ transfer->blocksize = 512;
+ transfer->file = NULL;
+ transfer->opt_blocksize = transfer->opt_transize = 0;
+
+ if (bind(transfer->sockfd, (struct sockaddr *)&addr, sizeof(addr)) == -1 ||
+ !fix_fd(transfer->sockfd))
+ {
+ free_transfer(transfer);
+ return;
+ }
+
+ p = packet + 2;
+ end = packet + len;
+
+ if (ntohs(*((unsigned short *)packet)) != OP_RRQ ||
+ !(filename = next(&p, end)) ||
+ !(mode = next(&p, end)) ||
+ strcasecmp(mode, "octet") != 0)
+ len = tftp_err(ERR_ILL, packet, _("unsupported request from %s"), inet_ntoa(peer.sin_addr));
+ else
+ {
+ while ((opt = next(&p, end)))
+ {
+ if (strcasecmp(opt, "blksize") == 0 &&
+ (opt = next(&p, end)))
+ {
+ transfer->blocksize = atoi(opt);
+ if (transfer->blocksize < 1)
+ transfer->blocksize = 1;
+ if (transfer->blocksize > (unsigned)daemon->packet_buff_sz - 4)
+ transfer->blocksize = (unsigned)daemon->packet_buff_sz - 4;
+ transfer->opt_blocksize = 1;
+ transfer->block = 0;
+ }
+
+ if (strcasecmp(opt, "tsize") == 0 && next(&p, end))
+ {
+ transfer->opt_transize = 1;
+ transfer->block = 0;
+ }
+ }
+
+ if (daemon->tftp_prefix)
+ {
+ strncpy(daemon->namebuff, daemon->tftp_prefix, MAXDNAME);
+ if (daemon->tftp_prefix[strlen(daemon->tftp_prefix)-1] != '/' &&
+ filename[0] != '/')
+ strncat(daemon->namebuff, "/", MAXDNAME);
+ }
+ else if (filename[0] != '/')
+ strncpy(daemon->namebuff, "/", MAXDNAME);
+ else
+ daemon->namebuff[0] = 0;
+
+ strncat(daemon->namebuff, filename, MAXDNAME);
+ daemon->namebuff[MAXDNAME-1] = 0;
+
+ /* If we're doing many tranfers from the same file, only
+ open it once this saves lots of file descriptors
+ when mass-booting a big cluster, for instance. */
+ for (t = daemon->tftp_trans; t; t = t->next)
+ if (strcmp(t->file->filename, daemon->namebuff) == 0)
+ break;
+
+ if (t)
+ {
+ /* file already open */
+ transfer->file = t->file;
+ transfer->file->refcount++;
+ if ((len = get_block(packet, transfer)) == -1)
+ goto oops;
+ is_err = 0;
+ }
+ else
+ {
+ /* check permissions and open file */
+
+ /* trick to ban moving out of the subtree */
+ if (daemon->tftp_prefix && strstr(daemon->namebuff, "/../"))
+ {
+ errno = EACCES;
+ goto perm;
+ }
+
+ if (stat(daemon->namebuff, &statbuf) == -1)
+ {
+ if (errno == ENOENT || errno == ENOTDIR)
+ len = tftp_err(ERR_FNF, packet, _("file %s not found"), daemon->namebuff);
+ else if (errno == EACCES)
+ {
+ perm:
+ len = tftp_err(ERR_PERM, packet, _("cannot access %s: %s"), daemon->namebuff);
+ }
+ else
+ {
+ oops:
+ len = tftp_err(ERR_NOTDEF, packet, _("cannot read %s: %s"), daemon->namebuff);
+ }
+ }
+ else
+ {
+ uid_t uid = geteuid();
+ /* running as root, must be world-readable */
+ if (uid == 0)
+ {
+ if (!(statbuf.st_mode & S_IROTH))
+ {
+ errno = EACCES;
+ goto perm;
+ }
+ }
+ /* in secure mode, must be owned by user running dnsmasq */
+ else if ((daemon->options & OPT_TFTP_SECURE) && uid != statbuf.st_uid)
+ {
+ errno = EACCES;
+ goto perm;
+ }
+
+ if (!(file = malloc(sizeof(struct tftp_file) + strlen(daemon->namebuff) + 1)))
+ {
+ errno = ENOMEM;
+ goto oops;
+ }
+
+ if ((file->fd = open(daemon->namebuff, O_RDONLY)) == -1)
+ {
+ free(file);
+
+ if (errno == EACCES || errno == EISDIR)
+ goto perm;
+ else
+ goto oops;
+ }
+ else
+ {
+ transfer->file = file;
+ file->refcount = 1;
+ file->size = statbuf.st_size;
+ strcpy(file->filename, daemon->namebuff);
+ if ((len = get_block(packet, transfer)) == -1)
+ goto oops;
+ is_err = 0;
+ }
+ }
+ }
+ }
+
+ while (sendto(transfer->sockfd, packet, len, 0,
+ (struct sockaddr *)&peer, sizeof(peer)) == -1 && errno == EINTR);
+
+ if (is_err)
+ free_transfer(transfer);
+ else
+ {
+ syslog(LOG_INFO, _("TFTP sent %s to %s"), daemon->namebuff, inet_ntoa(peer.sin_addr));
+ transfer->next = daemon->tftp_trans;
+ daemon->tftp_trans = transfer;
+ }
+}
+
+void check_tftp_listeners(struct daemon *daemon, fd_set *rset, time_t now)
+{
+ struct tftp_transfer *transfer, *tmp, **up;
+ ssize_t len;
+
+ struct ack {
+ unsigned short op, block;
+ } *mess = (struct ack *)daemon->packet;
+
+ /* Check for activity on any existing transfers */
+ for (transfer = daemon->tftp_trans, up = &daemon->tftp_trans; transfer; transfer = tmp)
+ {
+ tmp = transfer->next;
+
+ if (FD_ISSET(transfer->sockfd, rset))
+ {
+ /* we overwrote the buffer... */
+ daemon->srv_save = NULL;
+
+ if ((len = recv(transfer->sockfd, daemon->packet, daemon->packet_buff_sz, 0)) >= (ssize_t)sizeof(struct ack))
+ {
+ if (ntohs(mess->op) == OP_ACK && ntohs(mess->block) == (unsigned short)transfer->block)
+ {
+ /* Got ack, ensure we take the (re)transmit path */
+ transfer->timeout = now;
+ transfer->backoff = 0;
+ transfer->block++;
+ }
+ else if (ntohs(mess->op) == OP_ERR)
+ {
+ char *p = daemon->packet + sizeof(struct ack);
+ char *end = daemon->packet + len;
+ char *err = next(&p, end);
+ /* Sanitise error message */
+ if (!err)
+ err = "";
+ else
+ {
+ char *q, *r;
+ for (q = r = err; *r; r++)
+ if (isprint(*r))
+ *(q++) = *r;
+ *q = 0;
+ }
+ syslog(LOG_ERR, _("TFTP error %d %s received from %s"),
+ (int)ntohs(mess->block), err,
+ inet_ntoa(transfer->peer.sin_addr));
+
+ /* Got err, ensure we take abort */
+ transfer->timeout = now;
+ transfer->backoff = 100;
+ }
+ }
+ }
+
+ if (difftime(now, transfer->timeout) >= 0.0)
+ {
+ int endcon = 0;
+
+ /* timeout, retransmit */
+ transfer->timeout += 1<<(transfer->backoff);
+
+ /* we overwrote the buffer... */
+ daemon->srv_save = NULL;
+
+ if ((len = get_block(daemon->packet, transfer)) == -1)
+ {
+ len = tftp_err(ERR_NOTDEF, daemon->packet, _("cannot read %s: %s"), transfer->file->filename);
+ endcon = 1;
+ }
+ else if (++transfer->backoff > 5)
+ {
+ /* don't complain about timeout when we're awaiting the last
+ ACK, some clients never send it */
+ if (len != 0)
+ syslog(LOG_ERR, _("TFTP failed sending %s to %s"),
+ transfer->file->filename, inet_ntoa(transfer->peer.sin_addr));
+ len = 0;
+ }
+
+ if (len != 0)
+ while(sendto(transfer->sockfd, daemon->packet, len, 0,
+ (struct sockaddr *)&transfer->peer, sizeof(transfer->peer)) == -1 && errno == EINTR);
+
+ if (endcon || len == 0)
+ {
+ /* unlink */
+ *up = tmp;
+ free_transfer(transfer);
+ continue;
+ }
+ }
+
+ up = &transfer->next;
+ }
+}
+
+static void free_transfer(struct tftp_transfer *transfer)
+{
+ close(transfer->sockfd);
+ if (transfer->file && (--transfer->file->refcount) == 0)
+ {
+ close(transfer->file->fd);
+ free(transfer->file);
+ }
+ free(transfer);
+}
+
+static char *next(char **p, char *end)
+{
+ char *ret = *p;
+ size_t len;
+
+ if (*(end-1) != 0 ||
+ *p == end ||
+ (len = strlen(ret)) == 0)
+ return NULL;
+
+ *p += len + 1;
+ return ret;
+}
+
+static ssize_t tftp_err(int err, char *packet, char *message, char *file)
+{
+ struct errmess {
+ unsigned short op, err;
+ char message[];
+ } *mess = (struct errmess *)packet;
+ ssize_t ret = 4;
+ char *errstr = strerror(errno);
+
+ mess->op = htons(OP_ERR);
+ mess->err = htons(err);
+ ret += (snprintf(mess->message, 500, message, file, errstr) + 1);
+ if (err != ERR_FNF)
+ syslog(LOG_ERR, "TFTP %s", mess->message);
+
+ return ret;
+}
+
+/* return -1 for error, zero for done. */
+static ssize_t get_block(char *packet, struct tftp_transfer *transfer)
+{
+ if (transfer->block == 0)
+ {
+ /* send OACK */
+ char *p;
+ struct oackmess {
+ unsigned short op;
+ char data[];
+ } *mess = (struct oackmess *)packet;
+
+ p = mess->data;
+ mess->op = htons(OP_OACK);
+ if (transfer->opt_blocksize)
+ {
+ p += (sprintf(p, "blksize") + 1);
+ p += (sprintf(p, "%d", transfer->blocksize) + 1);
+ }
+ if (transfer->opt_transize)
+ {
+ p += (sprintf(p,"tsize") + 1);
+ p += (sprintf(p, "%u", (unsigned int)transfer->file->size) + 1);
+ }
+
+ return p - packet;
+ }
+ else
+ {
+ /* send data packet */
+ struct datamess {
+ unsigned short op, block;
+ unsigned char data[];
+ } *mess = (struct datamess *)packet;
+
+ off_t offset = transfer->blocksize * (transfer->block - 1);
+ size_t size = transfer->file->size - offset;
+
+ if (offset > transfer->file->size)
+ return 0; /* finished */
+
+ if (size > transfer->blocksize)
+ size = transfer->blocksize;
+
+ lseek(transfer->file->fd, offset, SEEK_SET);
+
+ mess->op = htons(OP_DATA);
+ mess->block = htons((unsigned short)(transfer->block));
+
+ if (!read_write(transfer->file->fd, mess->data, size, 1))
+ return -1;
+ else
+ return size + 4;
+ }
+}
+
+#endif
diff --git a/src/util.c b/src/util.c
index 9bfea8b..a862b84 100644
--- a/src/util.c
+++ b/src/util.c
@@ -92,11 +92,12 @@ unsigned short rand16(void)
int legal_char(char c)
{
/* check for legal char a-z A-Z 0-9 -
- (also / , used for RFC2317 and _ used in windows queries) */
+ (also / , used for RFC2317 and _ used in windows queries
+ and space, for DNS-SD stuff) */
if ((c >= 'A' && c <= 'Z') ||
(c >= 'a' && c <= 'z') ||
(c >= '0' && c <= '9') ||
- c == '-' || c == '/' || c == '_')
+ c == '-' || c == '/' || c == '_' || c == ' ')
return 1;
return 0;