summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG66
-rw-r--r--Makefile32
-rw-r--r--bld/Makefile12
-rwxr-xr-xbld/install-man9
-rwxr-xr-xbld/install-mo9
-rw-r--r--contrib/openvpn/dnsmasq.patch2
-rwxr-xr-xcontrib/slackware-dnsmasq/dnsmasq.SlackBuild56
-rw-r--r--contrib/slackware-dnsmasq/dnsmasq.leasedir.diff.gzbin0 -> 435 bytes
-rw-r--r--contrib/slackware-dnsmasq/doinst.sh.gzbin0 -> 302 bytes
-rw-r--r--contrib/slackware-dnsmasq/rc.dnsmasq.gzbin0 -> 265 bytes
-rw-r--r--contrib/slackware-dnsmasq/slack-desc19
-rw-r--r--dnsmasq-rh.spec11
-rw-r--r--dnsmasq-suse.spec12
-rw-r--r--dnsmasq.conf.example79
-rw-r--r--man/dnsmasq.8 (renamed from dnsmasq.8)41
-rw-r--r--po/de.po892
-rw-r--r--po/es.po869
-rw-r--r--po/fr.po887
-rw-r--r--po/id.po1046
-rw-r--r--po/pl.po870
-rw-r--r--po/ro.po860
-rw-r--r--src/cache.c19
-rw-r--r--src/config.h2
-rw-r--r--src/dbus.c6
-rw-r--r--src/dhcp.c76
-rw-r--r--src/dnsmasq.c60
-rw-r--r--src/dnsmasq.h19
-rw-r--r--src/forward.c92
-rw-r--r--src/isc.c10
-rw-r--r--src/lease.c34
-rw-r--r--src/netlink.c4
-rw-r--r--src/network.c26
-rw-r--r--src/option.c232
-rw-r--r--src/rfc2131.c108
-rw-r--r--src/util.c8
35 files changed, 6104 insertions, 364 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 335b854..8f5c8ab 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1544,3 +1544,69 @@ version 2.23
Added --bootp-dynamic option and associated
functionality. Thanks to Josef Wolf for the suggestion.
+version 2.24
+ Updated contrib/openvpn/dnsmasq.patch from Joseph Tate.
+
+ Tweaked DHCP NAK code, a DHCP NAK is now unicast as a
+ fallback in cases where a broadcast is futile: namely in
+ response to a unicast REQUEST from a non-local network
+ which was not sent via a relay.
+
+ Slightly changed the semantics of domain matching in
+ --server and --address configs. --server=/domain.com/ still
+ matches domain.com and sub.domain.com but does not
+ now match newdomain.com The semantics of
+ --server=/.domain.com/ are unchanged.
+ Thanks to Chris Blaise for the patch.
+
+ Added backwards-compatible internationalisation support.
+ The existing make targets, (all, dnsmasq, install) work as
+ before. New ones (all-i18n, and install-i18n) add gettext.
+ The translations live in po/ There are not too many
+ strings, so if anybody can provide translations (and for
+ the manpage....) please send them in.
+
+ Tweak behaviour on receipt of REFUSED or SERVFAIL rcodes,
+ now the query gets retried on all servers before returning
+ the error to the source of the query. Thanks to Javier
+ Kohen for the report.
+
+ Added Polish translation - thanks to Tomasz Sochanski.
+
+ Changed default manpage install location from /usr/man
+ to /usr/share/man
+
+ Added Spanish translation - thanks to Christopher Chatham.
+
+ Log a warning when a DHCP packet is truncated due to lack
+ of space. (Thanks to Michael Welle for the prompt to do
+ this.)
+
+ Added French translation - thanks to Lionel Tricon.
+
+ Added Indonesian translation - thanks to Salman AS.
+
+ Tweaked the netlink code to cope with interface broadcast
+ address not set, or set to 0.0.0.0.
+
+ Fixed problem assigning fixed addresses to hosts when more
+ than one dhcp-range is available. Thanks to Sorin Panca
+ for help chasing this down.
+
+ Added more explict error mesages to the hosts file and
+ ethers file reading code. Markus Kaiserswerth suffered to
+ make this happen.
+
+ Ensure that a hostname supplied by a DHCP client can never
+ override one configured on the server. Previously, any
+ host claiming a name would be given it, even if that
+ over-rode a dhcp-host declaration, leading to potentially
+ confusing situations.
+
+ Added Slackware package-build stuff into contrib/ The i18n
+ effort broke the current scripts, and working ones were
+ needed for testing, so they ended up here rather than make
+ Pat re-invent the wheel.
+
+ Added Romanian translation, thanks to Sorin Panca for
+ that.
diff --git a/Makefile b/Makefile
index 46a531d..d9e125f 100644
--- a/Makefile
+++ b/Makefile
@@ -1,22 +1,42 @@
PREFIX?=/usr/local
BINDIR = ${PREFIX}/sbin
-MANDIR = ${PREFIX}/man
+MANDIR = ${PREFIX}/share/man
+LOCALEDIR = ${PREFIX}/share/locale
SRC = src
+PO = po
+MAN = man
CFLAGS?= -O2
all :
- $(MAKE) -f ../bld/Makefile -C $(SRC) dnsmasq
+ $(MAKE) I18N=-DNO_GETTEXT -f ../bld/Makefile -C $(SRC) dnsmasq
clean :
- rm -f *~ bld/*~ contrib/*/*~ */*~ $(SRC)/*.o $(SRC)/dnsmasq core build
+ rm -f *~ $(SRC)/*.mo contrib/*/*~ */*~ $(SRC)/*.pot
+ rm -f $(SRC)/*.o $(SRC)/dnsmasq core */core
-install : all
+install : all install-common
+
+install-common :
install -d $(DESTDIR)$(BINDIR) -d $(DESTDIR)$(MANDIR)/man8
- install -m 644 dnsmasq.8 $(DESTDIR)$(MANDIR)/man8
+ install -m 644 $(MAN)/dnsmasq.8 $(DESTDIR)$(MANDIR)/man8
install -m 755 $(SRC)/dnsmasq $(DESTDIR)$(BINDIR)
-
+all-i18n :
+ $(MAKE) I18N=-DLOCALEDIR='\"$(LOCALEDIR)\"' -f ../bld/Makefile -C $(SRC) dnsmasq
+ cd $(PO); for f in *.po; do \
+ $(MAKE) -f ../bld/Makefile -C ../$(SRC) $${f/.po/.mo}; \
+ done
+
+install-i18n : all-i18n install-common
+ cd $(SRC); ../bld/install-mo $(DESTDIR)$(LOCALEDIR)
+ cd $(MAN); ../bld/install-man $(DESTDIR)$(MANDIR)
+
+merge :
+ $(MAKE) I18N=-DLOCALEDIR='\"$(LOCALEDIR)\"' -f ../bld/Makefile -C $(SRC) dnsmasq.pot
+ cd $(PO); for f in *.po; do \
+ msgmerge -U $$f ../$(SRC)/dnsmasq.pot; \
+ done
diff --git a/bld/Makefile b/bld/Makefile
index a394506..4aa895b 100644
--- a/bld/Makefile
+++ b/bld/Makefile
@@ -4,14 +4,18 @@
CFLAGS ?= -O2
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
-.c.o: dnsmasq.h config.h
- $(CC) $(CFLAGS) `../bld/pkg-wrapper $(PKG_CONFIG) --cflags dbus-1` $(RPM_OPT_FLAGS) -Wall -W -c $*.c
+.c.o:
+ $(CC) $(CFLAGS) $(I18N) `../bld/pkg-wrapper $(PKG_CONFIG) --cflags dbus-1` $(RPM_OPT_FLAGS) -Wall -W -c $<
-dnsmasq : $(OBJS) dnsmasq.h config.h
+dnsmasq : $(OBJS)
$(CC) -o $@ $(OBJS) `../bld/pkg-wrapper $(PKG_CONFIG) --libs dbus-1` $(LIBS)
+dnsmasq.pot : $(OBJS:.o=.c) dnsmasq.h config.h
+ xgettext -d dnsmasq --foreign-user --keyword=_ -o dnsmasq.pot -i $(OBJS:.o=.c)
-
+%.mo : ../po/%.po dnsmasq.pot
+ msgmerge -o - ../po/$*.po dnsmasq.pot | msgfmt -o $*.mo -
diff --git a/bld/install-man b/bld/install-man
new file mode 100755
index 0000000..c569f85
--- /dev/null
+++ b/bld/install-man
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+for f in *; do
+ if [ -d $f ]; then
+ install -d $1/$f/man8
+ install -m 644 $f/dnsmasq.8 $1/$f/man8
+ echo installing $1/$f/man8/dnsmasq.8
+ fi
+done
diff --git a/bld/install-mo b/bld/install-mo
new file mode 100755
index 0000000..903cd22
--- /dev/null
+++ b/bld/install-mo
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+for f in *.mo; do
+ install -d $1/${f/.mo/}/LC_MESSAGES
+ install -m 644 $f $1/${f/.mo/}/LC_MESSAGES/dnsmasq.mo
+ echo installing $1/${f/.mo/}/LC_MESSAGES/dnsmasq.mo
+done
+
+
diff --git a/contrib/openvpn/dnsmasq.patch b/contrib/openvpn/dnsmasq.patch
index 683507e..5c11881 100644
--- a/contrib/openvpn/dnsmasq.patch
+++ b/contrib/openvpn/dnsmasq.patch
@@ -18,7 +18,7 @@
+ . /etc/dhclient-enter-hooks
+ cp /etc/resolv.conf /etc/resolv.conf.dnsmasq
+ cp /etc/dhclient-enter-hooks /etc/dhclient-enter-hooks.dnsmasq
-+ sed -e 's/resolv\.conf$/resolv.conf.dhclient/' /etc/dhclient-enter-hooks.dnsmasq > /etc/dhclient-enter-hooks
++ sed -e 's/resolv\.conf$/resolv.conf.dnsmasq/' /etc/dhclient-enter-hooks.dnsmasq > /etc/dhclient-enter-hooks
+ sed -e 's/\(nameserver[ tab]\+\)[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+$/\1127.0.0.1/' /etc/resolv.conf.dnsmasq > /etc/resolv.conf
+ fi
+}
diff --git a/contrib/slackware-dnsmasq/dnsmasq.SlackBuild b/contrib/slackware-dnsmasq/dnsmasq.SlackBuild
new file mode 100755
index 0000000..c5ba083
--- /dev/null
+++ b/contrib/slackware-dnsmasq/dnsmasq.SlackBuild
@@ -0,0 +1,56 @@
+#!/bin/sh
+CWD=`pwd`
+PKG=/tmp/package-dnsmasq
+
+VERSION=2.24
+ARCH=${ARCH:-i486}
+BUILD=${BUILD:-1}
+
+if [ "$ARCH" = "i386" ]; then
+ SLKCFLAGS="-O2 -march=i386 -mcpu=i686"
+elif [ "$ARCH" = "i486" ]; then
+ SLKCFLAGS="-O2 -march=i486 -mcpu=i686"
+elif [ "$ARCH" = "s390" ]; then
+ SLKCFLAGS="-O2"
+elif [ "$ARCH" = "x86_64" ]; then
+ SLKCFLAGS="-O2"
+fi
+
+rm -rf $PKG
+mkdir -p $PKG
+cd /tmp
+rm -rf dnsmasq-$VERSION
+tar xzvf $CWD/dnsmasq-$VERSION.tar.gz
+cd dnsmasq-$VERSION
+zcat $CWD/dnsmasq.leasedir.diff.gz | patch -p1 --verbose --backup --suffix=.orig || exit
+chown -R root.root .
+make install-i18n PREFIX=/usr DESTDIR=$PKG MANDIR=/usr/man
+chmod 755 $PKG/usr/sbin/dnsmasq
+chown -R root.bin $PKG/usr/sbin
+gzip -9 $PKG/usr/man/man8/dnsmasq.8
+for f in $PKG/usr/share/man/*; do
+ if [ -f $$f/man8/dnsmasq.8 ]; then
+ gzip -9 $$f/man8/dnsmasq.8 ;
+ fi
+done
+gzip -9 $PKG/usr/man/*/man8/dnsmasq.8
+mkdir -p $PKG/var/state/dnsmasq
+( cd $PKG
+ find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
+ find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
+)
+mkdir $PKG/etc
+cat dnsmasq.conf.example > $PKG/etc/dnsmasq.conf.new
+mkdir $PKG/etc/rc.d
+zcat $CWD/rc.dnsmasq.gz > $PKG/etc/rc.d/rc.dnsmasq.new
+mkdir -p $PKG/usr/doc/dnsmasq-$VERSION
+cp -a \
+ CHANGELOG COPYING FAQ UPGRADING_to_2.0 doc.html setup.html \
+ $PKG/usr/doc/dnsmasq-$VERSION
+mkdir -p $PKG/install
+cat $CWD/slack-desc > $PKG/install/slack-desc
+zcat $CWD/doinst.sh.gz > $PKG/install/doinst.sh
+
+cd $PKG
+makepkg -l y -c n ../dnsmasq-$VERSION-$ARCH-$BUILD.tgz
+
diff --git a/contrib/slackware-dnsmasq/dnsmasq.leasedir.diff.gz b/contrib/slackware-dnsmasq/dnsmasq.leasedir.diff.gz
new file mode 100644
index 0000000..22fc32b
--- /dev/null
+++ b/contrib/slackware-dnsmasq/dnsmasq.leasedir.diff.gz
Binary files differ
diff --git a/contrib/slackware-dnsmasq/doinst.sh.gz b/contrib/slackware-dnsmasq/doinst.sh.gz
new file mode 100644
index 0000000..3b44227
--- /dev/null
+++ b/contrib/slackware-dnsmasq/doinst.sh.gz
Binary files differ
diff --git a/contrib/slackware-dnsmasq/rc.dnsmasq.gz b/contrib/slackware-dnsmasq/rc.dnsmasq.gz
new file mode 100644
index 0000000..a86abbb
--- /dev/null
+++ b/contrib/slackware-dnsmasq/rc.dnsmasq.gz
Binary files differ
diff --git a/contrib/slackware-dnsmasq/slack-desc b/contrib/slackware-dnsmasq/slack-desc
new file mode 100644
index 0000000..0a0c577
--- /dev/null
+++ b/contrib/slackware-dnsmasq/slack-desc
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description. Line
+# up the first '|' above the ':' following the base package name, and the '|' on
+# the right side marks the last column you can put a character in. You must make
+# exactly 11 lines for the formatting to be correct. It's also customary to
+# leave one space after the ':'.
+
+ |-----handy-ruler------------------------------------------------------|
+dnsmasq: dnsmasq (small DNS and DHCP server)
+dnsmasq:
+dnsmasq: Dnsmasq is a lightweight, easy to configure DNS forwarder and DHCP
+dnsmasq: server. It is designed to provide DNS (and optionally DHCP) to a
+dnsmasq: small network, and can serve the names of local machines which are not
+dnsmasq: in the global DNS.
+dnsmasq:
+dnsmasq: Dnsmasq was written by Simon Kelley.
+dnsmasq:
+dnsmasq:
+dnsmasq:
diff --git a/dnsmasq-rh.spec b/dnsmasq-rh.spec
index c9d7c9a..9dc0032 100644
--- a/dnsmasq-rh.spec
+++ b/dnsmasq-rh.spec
@@ -5,7 +5,7 @@
###############################################################################
Name: dnsmasq
-Version: 2.23
+Version: 2.24
Release: 1
Copyright: GPL
Group: System Environment/Daemons
@@ -38,7 +38,7 @@ leases and BOOTP for network booting of diskless machines.
%prep
%setup -q
%build
-make
+make all-i18n PREFIX=/usr
###############################################################################
@@ -55,9 +55,9 @@ mkdir -p -m 755 $RPM_BUILD_ROOT/etc/rc.d/init.d
mkdir -p -m 755 $RPM_BUILD_ROOT/usr/share/man/man8
cp rpm/dnsmasq.rh $RPM_BUILD_ROOT/etc/rc.d/init.d/dnsmasq
-strip src/dnsmasq
+make install-i18n DESTDIR=$RPM_BUILD_ROOT PREFIX=/usr
+strip $RPM_BUILD_ROOT/usr/sbin/dnsmasq
cp src/dnsmasq $RPM_BUILD_ROOT/usr/sbin
-cp dnsmasq.8 $RPM_BUILD_ROOT/usr/share/man/man8
cp dnsmasq.conf.example $RPM_BUILD_ROOT/etc/dnsmasq.conf
###############################################################################
@@ -127,6 +127,7 @@ fi
%attr(0755,root,root) /etc/rc.d/init.d/dnsmasq
%attr(0664,root,root) /etc/dnsmasq.conf
%attr(0755,root,root) /usr/sbin/dnsmasq
+%attr(0644,root,root) /usr/share/man/*/man8/dnsmasq*
%attr(0644,root,root) /usr/share/man/man8/dnsmasq*
-
+%attr(0644,root,root) /usr/share/locale/*/LC_MESSAGES/*
diff --git a/dnsmasq-suse.spec b/dnsmasq-suse.spec
index f669a7e..72a8946 100644
--- a/dnsmasq-suse.spec
+++ b/dnsmasq-suse.spec
@@ -5,7 +5,7 @@
###############################################################################
Name: dnsmasq
-Version: 2.23
+Version: 2.24
Release: 1
Copyright: GPL
Group: Productivity/Networking/DNS/Servers
@@ -43,7 +43,7 @@ patch -p0 <rpm/%{name}-SuSE.patch
%build
%{?suse_update_config:%{suse_update_config -f}}
-make
+make all-i18n DESTDIR=$RPM_BUILD_ROOT PREFIX=/usr
###############################################################################
#
@@ -54,15 +54,11 @@ make
%install
rm -rf $RPM_BUILD_ROOT
mkdir -p ${RPM_BUILD_ROOT}/etc/init.d
-mkdir -p ${RPM_BUILD_ROOT}/usr/sbin
-mkdir -p ${RPM_BUILD_ROOT}%{_mandir}/man8
+make install-i18n DESTDIR=$RPM_BUILD_ROOT PREFIX=/usr
install -o root -g root -m 755 rpm/rc.dnsmasq-suse $RPM_BUILD_ROOT/etc/init.d/dnsmasq
install -o root -g root -m 644 dnsmasq.conf.example $RPM_BUILD_ROOT/etc/dnsmasq.conf
-strip src/dnsmasq
-install -o root -g root -m 755 src/dnsmasq $RPM_BUILD_ROOT/usr/sbin
+strip $RPM_BUILD_ROOT/usr/sbin/dnsmasq
ln -sf ../../etc/init.d/dnsmasq $RPM_BUILD_ROOT/usr/sbin/rcdnsmasq
-gzip -9 dnsmasq.8
-install -o root -g root -m 644 dnsmasq.8.gz $RPM_BUILD_ROOT%{_mandir}/man8
###############################################################################
#
diff --git a/dnsmasq.conf.example b/dnsmasq.conf.example
index eafe7cb..3d33705 100644
--- a/dnsmasq.conf.example
+++ b/dnsmasq.conf.example
@@ -4,9 +4,9 @@
# as the long options legal on the command line. See
# "/usr/sbin/dnsmasq --help" or "man 8 dnsmasq" for details.
-# The following two options make you a better netizen, since they
+# The following two options make you a better netizen, since they
# tell dnsmasq to filter out queries which the public DNS cannot
-# answer, and which load the servers (especially the root servers)
+# answer, and which load the servers (especially the root servers)
# uneccessarily. If you have a dial-on-demand link they also stop
# these requests from bringing up the link uneccessarily.
@@ -18,14 +18,14 @@ bogus-priv
# Uncomment this to filter useless windows-originated DNS requests
# which can trigger dial-on-demand links needlessly.
-# Note that (amongst other things) this blocks all SRV requests,
+# Note that (amongst other things) this blocks all SRV requests,
# so don't use it if you use eg Kerberos.
# This option only affects forwarding, SRV records originating for
# dnsmasq (via srv-host= lines) are not suppressed by it.
#filterwin2k
# Change this line if you want dns to get its upstream servers from
-# somewhere other that /etc/resolv.conf
+# somewhere other that /etc/resolv.conf
#resolv-file=
# By default, dnsmasq will send queries to any of the upstream
@@ -36,7 +36,7 @@ bogus-priv
#strict-order
# If you don't want dnsmasq to read /etc/resolv.conf or any other
-# file, getting its servers for this file instead (see below), then
+# file, getting its servers from this file instead (see below), then
# uncomment this
#no-resolv
@@ -44,7 +44,7 @@ bogus-priv
# files for changes and re-read them then uncomment this.
#no-poll
-# Add other name servers here, with domain specs if they are for
+# Add other name servers here, with domain specs if they are for
# non-public domains.
#server=/localnet/192.168.0.1
@@ -62,9 +62,9 @@ bogus-priv
#user=
#group=
-# If you want dnsmasq to listen for DHCP and DNS requests only on
-# specified interfaces (and the loopback) give the name of the
-# interface (eg eth0) here.
+# If you want dnsmasq to listen for DHCP and DNS requests only on
+# specified interfaces (and the loopback) give the name of the
+# interface (eg eth0) here.
# Repeat the line for more than one interface.
#interface=
# Or you can specify which interface _not_ to listen on
@@ -79,12 +79,12 @@ bogus-priv
# On systems which support it, dnsmasq binds the wildcard address,
# even when it is listening on only some interfaces. It then discards
-# requests that it shouldn't reply to. This has the advantage of
+# requests that it shouldn't reply to. This has the advantage of
# working even when interfaces come and go and change address. If you
# want dnsmasq to really bind only the interfaces it is listening on,
-# uncomment this option. About the only time you may need this is when
+# uncomment this option. About the only time you may need this is when
# running another nameserver on the same machine.
-#bind-interfaces
+#bind-interfaces
# If you don't want dnsmasq to read /etc/hosts, uncomment the
# following line.
@@ -105,16 +105,16 @@ bogus-priv
# domain of all systems configured by DHCP
# 3) Provides the domain part for "expand-hosts"
#domain=thekelleys.org.uk
-
+
# Uncomment this to enable the integrated DHCP server, you need
-# to supply the range of addresses available for lease and optionally
+# to supply the range of addresses available for lease and optionally
# a lease time. If you have more than one network, you will need to
# repeat this for each network on which you want to supply DHCP
# service.
#dhcp-range=192.168.0.50,192.168.0.150,12h
# This is an example of a DHCP range where the netmask is given. This
-# is needed for networks we reach the dnsmasq DHCP server via a relay
+# is needed for networks we reach the dnsmasq DHCP server via a relay
# agent. If you don't know what a DHCP relay agent is, you probably
# don't need to worry about this.
#dhcp-range=192.168.0.50,192.168.0.150,255.255.255.0,12h
@@ -129,7 +129,7 @@ bogus-priv
# need to be on the same network. The order of the parameters in these
# do not matter, it's permissble to give name,adddress and MAC in any order
-# Always allocate the host with ethernet address 11:22:33:44:55:66
+# Always allocate the host with ethernet address 11:22:33:44:55:66
# The IP address 192.168.0.60
#dhcp-host=11:22:33:44:55:66,192.168.0.60
@@ -145,7 +145,7 @@ bogus-priv
# 192.168.0.70 and an infinite lease
#dhcp-host=bert,192.168.0.70,infinite
-# Always give the host with client identifier 01:02:02:04
+# Always give the host with client identifier 01:02:02:04
# the IP address 192.168.0.60
#dhcp-host=id:01:02:02:04,192.168.0.60
@@ -158,21 +158,21 @@ bogus-priv
# it asks for a DHCP lease.
#dhcp-host=judge
-# Never offer DHCP service to a machine whose ethernet
+# Never offer DHCP service to a machine whose ethernet
# address is 11:22:33:44:55:66
#dhcp-host=11:22:33:44:55:66,ignore
# Ignore any client-id presented by the machine with ethernet
-# address 11:22:33:44:55:66. This is useful to prevent a machine
+# address 11:22:33:44:55:66. This is useful to prevent a machine
# being treated differently when running under different OS's or
# between PXE boot and OS boot.
#dhcp-host=11:22:33:44:55:66,id:*
-# Send extra options which are tagged as "red" to
+# Send extra options which are tagged as "red" to
# the machine with ethernet address 11:22:33:44:55:66
#dhcp-host=11:22:33:44:55:66,net:red
-# Send extra options which are tagged as "red" to
+# Send extra options which are tagged as "red" to
# any machine with ethernet address starting 11:22:33:
#dhcp-host=11:22:33:*:*:*,net:red
@@ -180,7 +180,7 @@ bogus-priv
# DHCP vendorclass string includes the substring "Linux"
#dhcp-vendorclass=red,Linux
-# Send extra options which are tagged as "red" to any machine one
+# Send extra options which are tagged as "red" to any machine one
# of whose DHCP userclass strings includes the substring "accounts"
#dhcp-userclass=red,accounts
@@ -207,7 +207,7 @@ bogus-priv
# 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
-# Set the NTP time server address to be the same machine as
+# Set the NTP time server address to be the same machine as
# is running dnsmasq
#dhcp-option=42,0.0.0.0
@@ -224,17 +224,17 @@ bogus-priv
#dhcp-option=128,e4:45:74:68:00:00
#dhcp-option=129,NIC=eepro100
-# Specify an option which will only be sent to the "red" network
+# Specify an option which will only be sent to the "red" network
# (see dhcp-range for the declaration of the "red" network)
#dhcp-option=red,42,192.168.1.1
# The following DHCP options set up dnsmasq in the same way as is specified
-# for the ISC dhcpcd in
+# for the ISC dhcpcd in
# http://www.samba.org/samba/ftp/docs/textdocs/DHCP-Server-Configuration.txt
# adapted for a typical dnsmasq installation where the host running
# dnsmasq is also the host running samba.
# you may want to uncomment them if you use Windows clients and Samba.
-#dhcp-option=19,0 # option ip-forwarding off
+#dhcp-option=19,0 # option ip-forwarding off
#dhcp-option=44,0.0.0.0 # set netbios-over-TCP/IP nameserver(s) aka WINS server(s)
#dhcp-option=45,0.0.0.0 # netbios datagram distribution server
#dhcp-option=46,8 # netbios node type
@@ -242,12 +242,12 @@ bogus-priv
# Send RFC-3397 DNS domain search DHCP option. WARNING: Your DHCP client
# probably doesn't support this......
-#dhcp-option=119,eng.apple.com,marketing.apple.com
+#dhcp-option=119,eng.apple.com,marketing.apple.com
# Send encapsulated vendor-class specific options. The vendor-class
# is sent as DHCP option 60, and all the options marked with the
# vendor class are send encapsulated in DHCP option 43. The meaning of
-# the options is defined by the vendor-class. This example sets the
+# the options is defined by the vendor-class. This example sets the
# mtftp address to 0.0.0.0 for PXEClients
#dhcp-option=vendor:PXEClient,1,0.0.0.0
@@ -264,10 +264,10 @@ bogus-priv
# the line below.
#dhcp-leasefile=/var/lib/misc/dnsmasq.leases
-# Set the DHCP server to authoritative mode. In this mode it will barge in
-# and take over the lease for any client which broadcasts on the network,
+# Set the DHCP server to authoritative mode. In this mode it will barge in
+# and take over the lease for any client which broadcasts on the network,
# whether it has a record of the lease or not. This avoids long timeouts
-# when a machine wakes up on a new network. DO NOT enable this if there's
+# when a machine wakes up on a new network. DO NOT enable this if there's
# the slighest chance that you might end up accidentally configuring a DHCP
# server for your campus/company accidentally. The ISC server uses the same
# the same option, and this URL provides more information:
@@ -282,8 +282,8 @@ bogus-priv
# Normally responses which come form /etc/hosts and the DHCP lease
# file have Time-To-Live set as zero, which conventionally means
-# do not cache further. If you are happy to trade lower load on the
-# server for potentially stale date, you can set a time-to-live (in
+# do not cache further. If you are happy to trade lower load on the
+# server for potentially stale date, you can set a time-to-live (in
# seconds) here.
#local-ttl=
@@ -318,11 +318,11 @@ bogus-priv
# Return an MX record pointing to itself for all local machines.
#selfmx
-# Change the following lines if you want dnsmasq to serve SRV
+# Change the following lines if you want dnsmasq to serve SRV
# records. These are useful if you want to serve ldap requests for
# Active Directory and other windows-originated DNS requests.
# See RFC 2782.
-# You may add multiple srv-host lines.
+# You may add multiple srv-host lines.
# The fields are <name>,<target>,<port>,<priority>,<weight>
# If the domain part if missing from the name (so that is just has the
# service and protocol sections) then the domain given by the domain=
@@ -343,13 +343,13 @@ bogus-priv
#srv-host=_ldap._tcp.example.com,ldapserver.example.com,389,2
# A SRV record indicating that there is no LDAP server for the domain
-# example.com
+# example.com
#srv-host=_ldap._tcp.example.com
# Change the following lines to enable dnsmasq to serve TXT records.
# These are used for things like SPF and zeroconf. (Note that the
-# domain-name expansion done for SRV records _does_not
+# domain-name expansion done for SRV records _does_not
# occur for TXT records.)
#Example SPF.
@@ -365,8 +365,3 @@ bogus-priv
# Include a another lot of configuration options.
#conf-file=/etc/dnsmasq.more.conf
-
-
-
-
-
diff --git a/dnsmasq.8 b/man/dnsmasq.8
index f3d6dcf..9a826a5 100644
--- a/dnsmasq.8
+++ b/man/dnsmasq.8
@@ -65,7 +65,7 @@ Specify an alternate path for dnsmasq to record its process-id in. Normally /var
.TP
.B \-u, --user=<username>
Specify the userid to which dnsmasq will change after startup. Dnsmasq must normally be started as root, but it will drop root
-priviledges after startup by changing id to another user. Normally this user is "nobody" but that
+privileges after startup by changing id to another user. Normally this user is "nobody" but that
can be over-ridden with this switch.
.TP
.B \-g, --group=<groupname>
@@ -155,7 +155,7 @@ dnsmasq which provide DHCP service to run in the same machine.
.TP
.B \-y, --localise-queries
Return answers to DNS queries from /etc/hosts which depend on the interface over which the query was
-recieved. If a name in /etc/hosts has more than one address associated with
+received. If a name in /etc/hosts has more than one address associated with
it, and at least one of those addresses is on the same subnet as the
interface to which the query was sent, then return only the
address(es) on that subnet. This allows for a server to have multiple
@@ -179,11 +179,11 @@ Cisco PIX routers call "DNS doctoring".
.B \-B, --bogus-nxdomain=<ipaddr>
Transform replies which contain the IP address given into "No such
domain" replies. This is intended to counteract a devious move made by
-Versign in September 2003 when they started returning the address of
+Verisign in September 2003 when they started returning the address of
an advertising web page in response to queries for unregistered names,
instead of the correct NXDOMAIN response. This option tells dnsmasq to
fake the correct response when it sees this behaviour. As at Sept 2003
-the IP address being returnd by Verisign is 64.94.110.11
+the IP address being returned by Verisign is 64.94.110.11
.TP
.B \-f, --filterwin2k
Later versions of windows make periodic DNS requests which don't get sensible answers from
@@ -208,7 +208,7 @@ line or the dnsmasq configuration file.
.B \-1, --enable-dbus
Allow dnsmasq configuration to be updated via DBus method calls. The
configuration which can be changed is upstream DNS servers (and
-corressponding domains) and cache clear. Requires that dnsmasq has
+corresponding domains) and cache clear. Requires that dnsmasq has
been built with DBus support.
.TP
.B \-o, --strict-order
@@ -234,7 +234,7 @@ and they are queried only using the specified server. This is
intended for private nameservers: if you have a nameserver on your
network which deals with names of the form
xxx.internal.thekelleys.org.uk at 192.168.1.1 then giving the flag
-.B -S /.internal.thekelleys.org.uk/192.168.1.1
+.B -S /internal.thekelleys.org.uk/192.168.1.1
will send all queries for
internal machines to that nameserver, everything else will go to the
servers in /etc/resolv.conf. An empty domain specification,
@@ -333,13 +333,13 @@ Enable the DHCP server. Addresses will be given out from the range
in
.B dhcp-host
options. If the lease time is given, then leases
-will be given for that length of time. The lease time is on seconds,
+will be given for that length of time. The lease time is in seconds,
or minutes (eg 45m) or hours (eg 1h) or the literal "infinite". This
option may be repeated, with different addresses, to enable DHCP
service to more than one network. For directly connected networks (ie,
networks on which the machine running dnsmasq has an interface) the
netmask is optional. It is, however, required for networks which
-recieve DHCP service via a relay agent. The broadcast address is
+receive DHCP service via a relay agent. The broadcast address is
always optional. On some broken systems, dnsmasq can listen on only
one interface when using DHCP, and the name of that interface must be
given using the
@@ -414,14 +414,14 @@ have exactly the same effect as
options containing the same information.
.TP
.B \-O, --dhcp-option=[<network-id>,[<network-id>,]][vendor:<vendor-class>]<opt>,[<value>[,<value>]]
-Specfify different or extra options to DHCP clients. By default,
+Specify different or extra options to DHCP clients. By default,
dnsmasq sends some standard options to DHCP clients, the netmask and
broadcast address are set to the same as the host running dnsmasq, and
the DNS server and default route are set to the address of the machine
running dnsmasq. If the domain name option has been set, that is sent.
This option allows these defaults to be overridden,
or other options specified. The <opt> is the number of the option, as
-specfied in RFC2132. For example, to set the default route option to
+specified in RFC2132. For example, to set the default route option to
192.168.4.4, do
.B --dhcp-option=3,192.168.4.4
and to set the time-server address to 192.168.0.4, do
@@ -437,7 +437,7 @@ option number is sent, it is quite possible to
persuade dnsmasq to generate illegal DHCP packets with injudicious use
of this flag. When the value is a decimal number, dnsmasq must determine how
large the data item is. It does this by examining the option number and/or the
-value, but can be overriden by appending a single letter flag as follows:
+value, but can be overridden by appending a single letter flag as follows:
b = one byte, s = two bytes, i = four bytes. This is mainly useful with
encapsulated vendor class options (see below) where dnsmasq cannot
determine data size from the option number. Option data which
@@ -495,7 +495,7 @@ create thousands of leases and use lots of memory in the dnsmasq
process.
.TP
.B \-K, --dhcp-authoritative
-Should be set when dnsmasq is definatively the only DHCP server on a network.
+Should be set when dnsmasq is definately the only DHCP server on a network.
It changes the behaviour from strict RFC compliance so that DHCP requests on
unknown leases from unknown hosts are not ignored. This allows new hosts
to get a lease without a tedious timeout under all circumstances.
@@ -529,20 +529,24 @@ in /etc/resolv.conf (or equivalent).
.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 \-C, --conf-file=<file>
+Specify a different configuration file. The conf-file option is also allowed in
+configuration files, to include multiple configuration files. Only one
+level of nesting is allowed.
.SH CONFIG FILE
At startup, dnsmasq reads
.I /etc/dnsmasq.conf,
if it exists. (On
FreeBSD, the file is
.I /usr/local/etc/dnsmasq.conf
-) The format of this
+) (but see the
+.B \-C
+option.) The format of this
file consists of one option per line, exactly as the long options detailed
in the OPTIONS section but without the leading "--". Lines starting with # are comments and ignored. For
options which may only be specified once, the configuration file overrides
-the command line. Use the --conf-file (or -C) option to specify a different
-configuration file. The conf-file option is also allowed in
-configuration files, to include multiple configuration files. Only one
-level of nesting is allowed. Quoting is allowed in a config file:
+the command line. Quoting is allowed in a config file:
between " quotes the special meanings of ,:. and # are removed and the
following escapes are allowed: \\\\ \\" \\t \\a \\b \\r and \\n. The later
corresponding to tab, bell, backspace, return and newline.
@@ -663,7 +667,8 @@ configurations or in
, and a
.B dhcp-range
configuration option is present to activate the DHCP server
-on a particular network. The filename
+on a particular network. (Setting --bootp-dynamic removes the need for
+static address mappings.) The filename
parameter in a BOOTP request is matched against netids in
.B dhcp-option
configurations, allowing some control over the options returned to
diff --git a/po/de.po b/po/de.po
new file mode 100644
index 0000000..153de04
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,892 @@
+# German translations for dnsmasq package.
+# This file is put in the public domain.
+# Simon Kelley <simon@thekelleys.org.uk>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: dnsmasq 2.24\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-11-22 20:10+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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: cache.c:565
+#, c-format
+msgid "failed to load names from %s: %m"
+msgstr ""
+
+#: cache.c:601 dhcp.c:722
+#, c-format
+msgid "bad address at %s line %d"
+msgstr ""
+
+# @Simon: Here I need an example to understand it :)
+#: cache.c:628 dhcp.c:736
+#, c-format
+msgid "bad name at %s line %d"
+msgstr ""
+
+# @Simon: Here I need an example to understand it :)
+#: cache.c:634 dhcp.c:787
+#, 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:670
+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:723
+#, c-format
+msgid ""
+"not giving name %s to the DHCP lease of %s because the name exists in %s "
+"with address %s"
+msgstr ""
+"Name %s wurde nicht dem DHCP 'Mieter' von %s zugewiesen, da der Name in %"
+"smit der Adresse %s bereits existiert"
+
+# @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:767
+#, c-format
+msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
+msgstr ""
+"Cache Größe %d, %d/%d Cache-Einfügungen verwendeten nicht abgelaufene Cache-"
+"Einträge wieder."
+
+# @Simon: "re-used" = "wiederverwenden", but in such a case it must be split apart to "verwendet ... wieder"
+# @Simon: "unexpired" = "nicht abgelaufen" (expired=abgelaufen) -- altogether it sounds complicated in german,
+# @Simon: I would prefer to use "noch gültige" = "still valid", would that fit to the sense? Then it would be:
+# @Simon: msgstr "Cache Größe %d, %d/%d Cache-Einfügungen verwendeten noch gültige Cache-Einträge wieder."
+# @Simon: btw, what is the "%d/%d"-part?
+#: util.c:149 option.c:1284
+msgid "could not get memory"
+msgstr "Speicher nicht verfügbar"
+
+# @Simon: "Speicher nicht verfügbar" = "memory not available"
+# @Simon: "could not get memory" = "konnte keinen Speicher bekommen" or "konnte Speicher nicht bekommen"
+# @Simon: ("keinen Speicher" = "no memory", "... nicht bekommen" = "... not get")
+# @Simon: both would be correct - but would sound rather clumsy in german
+# @Simon: how about "Nicht genügend Speicher verfügbar" = "Not enough memory available" ?
+#: util.c:172
+#, c-format
+msgid "%s at line %d of %%s"
+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:179
+msgid "FAILED to start up"
+msgstr "Start gescheitert"
+
+# @Simon: not perfect but I cannot get nearer right now.
+#: util.c:305
+#, c-format
+msgid "infinite"
+msgstr "unendlich"
+
+#: option.c:124
+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:125
+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:126
+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:127
+msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
+msgstr "Behandle IP-Adr als NXDOMAIN (wehrt Verisign-Platzhalter ab)."
+
+# @Simon: or "Behandle IP-Adr als NXDOMAIN (gegen Verisign-Platzhalter)."
+# @Simon: "gegen" = "against", I believe that might be clumsy in english but it is fine in german.
+# @Simon: Just by chance I know what this is for - it is merely against verisign's use of wildcard
+# @Simon: entries (that lead to their own servers), right. Therefore, how about:
+# @Simon: "Behandle IP-Adr als NXDOMAIN (gegen Verisigns Platzhalter-Gebrauch)."
+# @Simon: = "Treat ipaddr as NXDOMAIN (defeats Verisigns wildcard usage)." ?
+# @Simon: But the explanatory(?) effect is only a very tiny bit better, I believe - what do U think?
+#: option.c:128
+#, 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:129
+#, c-format
+msgid "Specify configuration file (defaults to %s)."
+msgstr "Angabe der Konfigurationsdatei (Voreinstellung: %s)."
+
+#: option.c:130
+msgid "Do NOT fork into the background: run in debug mode."
+msgstr "NICHT in den Hintergrund gehen: Betrieb im Debug-Modus"
+
+# @Simon: = "DO NOT go into the background: Operation in debug-mode"
+# @Simon: I know it sounds a bit clumsy in english, but "fork" would be hard to understand
+# @Simon: and then I get a problem between "go" and "run" - so...
+# @Simon: "Debug-mode" = "Fehlersuch-Modus", literally, but I think "Debug-Modus" is better :)
+#: option.c:131
+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:132
+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:133
+msgid "Expand simple names in /etc/hosts with domain-suffix."
+msgstr "Erweitere einfache Namen in /etc/hosts mit der Domänen-Endung"
+
+#: option.c:134
+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:135
+msgid "Enable DHCP in the range given with lease duration."
+msgstr ""
+
+#: option.c:136
+#, c-format
+msgid "Change to this group after startup (defaults to %s)."
+msgstr ""
+
+#: option.c:137
+msgid "Set address or hostname for a specified machine."
+msgstr ""
+
+#: option.c:138
+#, c-format
+msgid "Do NOT load %s file."
+msgstr ""
+
+#: option.c:139
+#, c-format
+msgid "Specify a hosts file to be read in addition to %s."
+msgstr ""
+
+#: option.c:140
+msgid "Specify interface(s) to listen on."
+msgstr ""
+
+#: option.c:141
+msgid "Specify interface(s) NOT to listen on."
+msgstr ""
+
+#: option.c:142
+msgid "Map DHCP user class to option set."
+msgstr ""
+
+#: option.c:143
+msgid "Don't do DHCP for hosts in option set."
+msgstr ""
+
+#: option.c:144
+msgid "Do NOT fork into the background, do NOT run in debug mode."
+msgstr ""
+
+#: option.c:145
+msgid "Assume we are the only DHCP server on the local network."
+msgstr ""
+
+#: option.c:146
+#, c-format
+msgid "Specify where to store DHCP leases (defaults to %s)."
+msgstr ""
+
+#: option.c:147
+msgid "Return MX records for local hosts."
+msgstr ""
+
+#: option.c:148
+msgid "Specify an MX record."
+msgstr ""
+
+#: option.c:149
+msgid "Specify BOOTP options to DHCP server."
+msgstr ""
+
+#: option.c:150
+#, c-format
+msgid "Do NOT poll %s file, reload only on SIGHUP."
+msgstr ""
+
+#: option.c:151
+msgid "Do NOT cache failed search results."
+msgstr ""
+
+#: option.c:152
+#, c-format
+msgid "Use nameservers strictly in the order given in %s."
+msgstr ""
+
+#: option.c:153
+msgid "Set extra options to be set to DHCP clients."
+msgstr ""
+
+#: option.c:154
+msgid "Specify port to listen for DNS requests on (defaults to 53)."
+msgstr ""
+
+#: option.c:155
+#, c-format
+msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
+msgstr ""
+
+#: option.c:156
+msgid "Log queries."
+msgstr ""
+
+#: option.c:157
+msgid "Force the originating port for upstream queries."
+msgstr ""
+
+#: option.c:158
+msgid "Do NOT read resolv.conf."
+msgstr ""
+
+#: option.c:159
+#, c-format
+msgid "Specify path to resolv.conf (defaults to %s)."
+msgstr ""
+
+#: option.c:160
+msgid "Specify address(es) of upstream servers with optional domains."
+msgstr ""
+
+#: option.c:161
+msgid "Never forward queries to specified domains."
+msgstr ""
+
+#: option.c:162
+msgid "Specify the domain to be assigned in DHCP leases."
+msgstr ""
+
+#: option.c:163
+msgid "Specify default target in an MX record."
+msgstr ""
+
+#: option.c:164
+msgid "Specify time-to-live in seconds for replies from /etc/hosts."
+msgstr ""
+
+#: option.c:165
+#, c-format
+msgid "Change to this user after startup. (defaults to %s)."
+msgstr ""
+
+#: option.c:166
+msgid "Map DHCP vendor class to option set."
+msgstr ""
+
+#: option.c:167
+msgid "Display dnsmasq version and copyright information."
+msgstr ""
+
+#: option.c:168
+msgid "Translate IPv4 addresses from upstream servers."
+msgstr ""
+
+#: option.c:169
+msgid "Specify a SRV record."
+msgstr ""
+
+#: option.c:170
+msgid "Display this message."
+msgstr ""
+
+#: option.c:171
+#, c-format
+msgid "Specify path of PID file. (defaults to %s)."
+msgstr ""
+
+#: option.c:172
+#, c-format
+msgid "Specify maximum number of DHCP leases (defaults to %s)."
+msgstr ""
+
+#: option.c:173
+msgid "Answer DNS queries based on the interface a query was sent to."
+msgstr ""
+
+#: option.c:174
+msgid "Specify TXT DNS record."
+msgstr ""
+
+#: option.c:175
+msgid "Bind only to interfaces in use."
+msgstr ""
+
+#: option.c:176
+#, c-format
+msgid "Read DHCP static host information from %s."
+msgstr ""
+
+#: option.c:177
+msgid "Enable the DBus interface for setting upstream servers, etc."
+msgstr ""
+
+#: option.c:178
+msgid "Do not provide DHCP on this interface, only provide DNS."
+msgstr ""
+
+#: option.c:179
+msgid "Enable dynamic address allocation for bootp."
+msgstr ""
+
+#: option.c:394
+msgid "missing \""
+msgstr ""
+
+#: option.c:423
+msgid "bad option"
+msgstr ""
+
+#: option.c:440
+#, c-format
+msgid "cannot read %s: %s"
+msgstr ""
+
+#: option.c:446
+#, c-format
+msgid ""
+"Usage: dnsmasq [options]\n"
+"\n"
+msgstr ""
+
+#: option.c:448
+#, c-format
+msgid "Use short options only on the command line.\n"
+msgstr ""
+
+#: option.c:450
+#, c-format
+msgid "Valid options are :\n"
+msgstr ""
+
+#: option.c:475
+#, c-format
+msgid "Dnsmasq version %s %s\n"
+msgstr ""
+
+#: option.c:476
+#, c-format
+msgid ""
+"Compile time options %s\n"
+"\n"
+msgstr ""
+
+#: option.c:477
+#, c-format
+msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
+msgstr ""
+
+#: option.c:478
+#, c-format
+msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
+msgstr ""
+
+#: option.c:479
+#, c-format
+msgid "under the terms of the GNU General Public License, version 2.\n"
+msgstr ""
+
+#: option.c:489
+msgid "extraneous parameter"
+msgstr ""
+
+#: option.c:497
+msgid "missing parameter"
+msgstr ""
+
+#: option.c:514
+msgid "nested includes not allowed"
+msgstr ""
+
+#: option.c:574
+msgid "bad MX preference"
+msgstr ""
+
+#: option.c:583
+msgid "bad MX name"
+msgstr ""
+
+#: option.c:601
+msgid "bad MX target"
+msgstr ""
+
+#: option.c:803 option.c:814
+msgid "bad port"
+msgstr ""
+
+#: option.c:954
+msgid "bad dhcp-range"
+msgstr ""
+
+#: option.c:1014
+msgid "inconsistent DHCP range"
+msgstr ""
+
+#: option.c:1201
+msgid "bad dhcp-host"
+msgstr ""
+
+#: option.c:1261
+msgid "bad dhcp-option"
+msgstr ""
+
+#: option.c:1279
+msgid "bad domain in dhcp-option"
+msgstr ""
+
+#: option.c:1425
+msgid "dhcp-option too long"
+msgstr ""
+
+#: option.c:1605
+msgid "bad TXT record"
+msgstr ""
+
+#: option.c:1637
+msgid "TXT record string too long"
+msgstr ""
+
+#: option.c:1676
+msgid "bad SRV record"
+msgstr ""
+
+#: option.c:1689
+msgid "bad SRV target"
+msgstr ""
+
+#: option.c:1701
+msgid "invalid port number"
+msgstr ""
+
+#: option.c:1712
+msgid "invalid priority"
+msgstr ""
+
+#: option.c:1723
+msgid "invalid weight"
+msgstr ""
+
+#: option.c:1748
+msgid "error"
+msgstr ""
+
+#: option.c:1750
+#, c-format
+msgid "bad command line options: %s."
+msgstr ""
+
+#: option.c:1794
+#, c-format
+msgid "cannot get host-name: %s"
+msgstr ""
+
+#: option.c:1823
+msgid "only one resolv.conf file allowed in no-poll mode."
+msgstr ""
+
+#: option.c:1830
+msgid "must have exactly one resolv.conf to read domain from."
+msgstr ""
+
+#: option.c:1833 network.c:591
+#, c-format
+msgid "failed to read %s: %m"
+msgstr ""
+
+#: option.c:1851
+#, c-format
+msgid "no search directive found in %s"
+msgstr ""
+
+#: forward.c:378
+#, c-format
+msgid "nameserver %s refused to do a recursive query"
+msgstr ""
+
+#: forward.c:899
+msgid "forwarding table overflow: check for server loops."
+msgstr ""
+
+#: isc.c:71 dnsmasq.c:471
+#, c-format
+msgid "failed to access %s: %m"
+msgstr ""
+
+#: isc.c:87
+#, c-format
+msgid "failed to load %s: %m"
+msgstr ""
+
+#: isc.c:91 network.c:595
+#, c-format
+msgid "reading %s"
+msgstr ""
+
+#: isc.c:113
+#, c-format
+msgid "bad name in %s"
+msgstr ""
+
+#: isc.c:175
+#, c-format
+msgid "Ignoring DHCP lease for %s because it has an illegal domain part"
+msgstr ""
+
+#: network.c:418
+#, c-format
+msgid "failed to create listening socket: %s"
+msgstr ""
+
+#: network.c:425
+#, c-format
+msgid "failed to set IPV6 options on listening socket: %s"
+msgstr ""
+
+#: network.c:444
+#, c-format
+msgid "failed to bind listening socket for %s: %s"
+msgstr ""
+
+#: network.c:451
+#, c-format
+msgid "failed to listen on socket: %s"
+msgstr ""
+
+#: network.c:521
+#, c-format
+msgid "ignoring nameserver %s - local interface"
+msgstr ""
+
+#: network.c:530
+#, c-format
+msgid "ignoring nameserver %s - cannot make/bind socket: %m"
+msgstr ""
+
+#: network.c:544
+msgid "domain"
+msgstr ""
+
+#: network.c:546
+msgid "unqualified"
+msgstr ""
+
+#: network.c:546
+msgid "domains"
+msgstr ""
+
+#: network.c:549
+#, c-format
+msgid "using local addresses only for %s %s"
+msgstr ""
+
+#: network.c:551
+#, c-format
+msgid "using nameserver %s#%d for %s %s"
+msgstr ""
+
+#: network.c:554
+#, c-format
+msgid "using nameserver %s#%d"
+msgstr ""
+
+#: dnsmasq.c:112
+msgid ""
+"ISC dhcpd integration not available: set HAVE_ISC_READER in src/config.h"
+msgstr ""
+
+#: dnsmasq.c:116
+#, c-format
+msgid "failed to find list of interfaces: %s"
+msgstr ""
+
+#: dnsmasq.c:131
+#, c-format
+msgid "unknown interface %s"
+msgstr ""
+
+#: dnsmasq.c:137
+#, c-format
+msgid "no interface with address %s"
+msgstr ""
+
+#: dnsmasq.c:146
+#, c-format
+msgid "cannot open %s:%s"
+msgstr ""
+
+#: dnsmasq.c:160
+msgid "must set exactly one interface on broken systems without IP_RECVIF"
+msgstr ""
+
+#: dnsmasq.c:173 dnsmasq.c:504
+#, c-format
+msgid "DBus error: %s"
+msgstr ""
+
+#: dnsmasq.c:177
+msgid "DBus not available: set HAVE_DBUS in src/config.h"
+msgstr ""
+
+#: dnsmasq.c:290
+#, c-format
+msgid "started, version %s cachesize %d"
+msgstr ""
+
+#: dnsmasq.c:292
+#, c-format
+msgid "started, version %s cache disabled"
+msgstr ""
+
+#: dnsmasq.c:294
+#, c-format
+msgid "compile time options: %s"
+msgstr ""
+
+#: dnsmasq.c:300
+msgid "DBus support enabled: connected to system bus"
+msgstr ""
+
+#: dnsmasq.c:302
+msgid "DBus support enabled: bus connection pending"
+msgstr ""
+
+#: dnsmasq.c:307
+msgid "setting --bind-interfaces option because of OS limitations"
+msgstr ""
+
+#: dnsmasq.c:312
+#, c-format
+msgid "warning: interface %s does not currently exist"
+msgstr ""
+
+#: dnsmasq.c:329
+#, c-format
+msgid "DHCP, static leases only on %.0s%s, lease time %s"
+msgstr ""
+
+#: dnsmasq.c:330
+#, c-format
+msgid "DHCP, IP range %s -- %s, lease time %s"
+msgstr ""
+
+#: dnsmasq.c:341
+#, c-format
+msgid "DHCP, %s will be written every %s"
+msgstr ""
+
+#: dnsmasq.c:346
+msgid "running as root"
+msgstr ""
+
+#: dnsmasq.c:506
+msgid "connected to system DBus"
+msgstr ""
+
+#: dnsmasq.c:517
+msgid "exiting on receipt of SIGTERM"
+msgstr ""
+
+#: dhcp.c:25
+#, c-format
+msgid "cannot create DHCP socket : %s"
+msgstr ""
+
+#: dhcp.c:35
+#, c-format
+msgid "failed to set options on DHCP socket: %s"
+msgstr ""
+
+#: dhcp.c:42
+#, c-format
+msgid "failed to set SO_REUSEADDR on DHCP socket: %s"
+msgstr ""
+
+#: dhcp.c:52
+#, c-format
+msgid "failed to bind DHCP server socket: %s"
+msgstr ""
+
+#: dhcp.c:61
+#, c-format
+msgid "cannot create ICMP raw socket: %s."
+msgstr ""
+
+#: dhcp.c:75
+#, c-format
+msgid "cannot create DHCP BPF socket: %s"
+msgstr ""
+
+#: dhcp.c:86
+#, c-format
+msgid ""
+"cannot create DHCP packet socket: %s. Is CONFIG_PACKET enabled in your "
+"kernel?"
+msgstr ""
+
+#: dhcp.c:98
+#, c-format
+msgid "duplicate IP address %s in dhcp-config directive."
+msgstr ""
+
+#: dhcp.c:384
+#, c-format
+msgid "DHCP range %s -- %s is not consistent with netmask %s"
+msgstr ""
+
+#: dhcp.c:690
+#, c-format
+msgid "failed to read %s:%m"
+msgstr ""
+
+#: dhcp.c:709
+#, c-format
+msgid "bad line at %s line %d"
+msgstr ""
+
+#: dhcp.c:810
+#, c-format
+msgid "duplicate IP address %s (%s) in dhcp-config directive"
+msgstr ""
+
+#: dhcp.c:846
+#, c-format
+msgid "Ignoring DHCP host name %s because it has an illegal domain part"
+msgstr ""
+
+#: lease.c:39
+#, c-format
+msgid "cannot open or create leases file: %s"
+msgstr ""
+
+#: lease.c:77
+msgid "too many stored leases"
+msgstr ""
+
+#: rfc2131.c:171
+#, c-format
+msgid "DHCP request for unsupported hardware type (%d) recieved on %s"
+msgstr ""
+
+#: rfc2131.c:220
+#, c-format
+msgid "no address range available for DHCP request %s %s"
+msgstr ""
+
+#: rfc2131.c:221
+msgid "with subnet selector"
+msgstr ""
+
+#: rfc2131.c:221
+msgid "via"
+msgstr ""
+
+#: rfc2131.c:238 rfc2131.c:262
+msgid "disabled"
+msgstr ""
+
+#: rfc2131.c:272 rfc2131.c:643
+msgid "address in use"
+msgstr ""
+
+#: rfc2131.c:275
+msgid "no address configured"
+msgstr ""
+
+#: rfc2131.c:281 rfc2131.c:522
+msgid "no address available"
+msgstr ""
+
+#: rfc2131.c:285 rfc2131.c:646
+msgid "no leases left"
+msgstr ""
+
+#: rfc2131.c:481
+#, c-format
+msgid "disabling DHCP static address %s"
+msgstr ""
+
+#: rfc2131.c:499
+msgid "unknown lease"
+msgstr ""
+
+#: rfc2131.c:512 rfc2131.c:718
+msgid "ignored"
+msgstr ""
+
+#: rfc2131.c:592
+msgid "wrong address"
+msgstr ""
+
+#: rfc2131.c:601
+msgid "lease not found"
+msgstr ""
+
+#: rfc2131.c:619
+msgid "wrong network"
+msgstr ""
+
+#: rfc2131.c:627
+msgid "address not available"
+msgstr ""
+
+#: rfc2131.c:636
+msgid "static lease available"
+msgstr ""
+
+#: rfc2131.c:640
+msgid "address reserved"
+msgstr ""
+
+#: rfc2131.c:837
+#, c-format
+msgid "cannot send DHCP option %d: no space left in packet"
+msgstr ""
+
+#: rfc2131.c:1132
+#, c-format
+msgid "More than one vendor class matches, using %s"
+msgstr ""
+
+#: netlink.c:37
+#, c-format
+msgid "cannot bind netlink socket: %s"
+msgstr ""
+
+#: dbus.c:112
+msgid "attempt to set an IPv6 server address via DBus - no IPv6 support"
+msgstr ""
+
+#: dbus.c:237
+msgid "setting upstream servers from DBus"
+msgstr ""
+
+#: dbus.c:273
+msgid "could not register a DBus message handler"
+msgstr ""
diff --git a/po/es.po b/po/es.po
new file mode 100644
index 0000000..52d26c3
--- /dev/null
+++ b/po/es.po
@@ -0,0 +1,869 @@
+# Spanish translations for dnsmasq package.
+# This file is put in the public domain.
+# Christopher Chatham <chrislinux@gmail.com>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: dnsmasq 2.24\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-11-22 20:10+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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: cache.c:565
+#, c-format
+msgid "failed to load names from %s: %m"
+msgstr "no se pudo cargar nombres desde %s: %m"
+
+#: cache.c:601 dhcp.c:722
+#, fuzzy, c-format
+msgid "bad address at %s line %d"
+msgstr "nombre erróneo en %s línea %d"
+
+#: cache.c:628 dhcp.c:736
+#, c-format
+msgid "bad name at %s line %d"
+msgstr "nombre erróneo en %s línea %d"
+
+#: cache.c:634 dhcp.c:787
+#, c-format
+msgid "read %s - %d addresses"
+msgstr "direcciónes %s - %d leídas"
+
+#: cache.c:670
+msgid "cleared cache"
+msgstr "el caché fue limpiado"
+
+#: cache.c:723
+#, c-format
+msgid ""
+"not giving name %s to the DHCP lease of %s because the name exists in %s "
+"with address %s"
+msgstr ""
+"no otorgando nombre %s al arriendo DHCP de %s porque el nombre existe en %s "
+"con dirección %s"
+
+#: cache.c:767
+#, c-format
+msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
+msgstr ""
+"tamaño de caché %d, %d/%d inserciónes de caché reutilizaron entradas no "
+"vencidas."
+
+#: util.c:149 option.c:1284
+msgid "could not get memory"
+msgstr "no se pudo conseguir memoria"
+
+#: util.c:172
+#, c-format
+msgid "%s at line %d of %%s"
+msgstr "%s en línea %d de %%s"
+
+#: util.c:179
+msgid "FAILED to start up"
+msgstr "el intento de inicio ha FALLADO"
+
+#: util.c:305
+#, c-format
+msgid "infinite"
+msgstr "infinito"
+
+#: option.c:124
+msgid "Specify local address(es) to listen on."
+msgstr "Especificar dirección(es) locales dónde escuchar."
+
+#: option.c:125
+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:126
+msgid "Fake reverse lookups for RFC1918 private address ranges."
+msgstr ""
+"Falsificar búsquedas reversas para rangos de dirección privados RFC1918."
+
+#: option.c:127
+msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
+msgstr "Tratar ipaddr (dirección IP) como NXDOMAIN (derrota comodín Verisign)."
+
+#: option.c:128
+#, c-format
+msgid "Specify the size of the cache in entries (defaults to %s)."
+msgstr ""
+"Especificar tamaño de caché en cuanto a entradas (%s por predeterminado)."
+
+#: option.c:129
+#, c-format
+msgid "Specify configuration file (defaults to %s)."
+msgstr "Especificar archivo de configuración (%s por predeterminado)."
+
+#: option.c:130
+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:131
+msgid "Do NOT forward queries with no domain part."
+msgstr "NO reenviar búsquedas sin parte de dominio."
+
+#: option.c:132
+msgid "Return self-pointing MX records for local hosts."
+msgstr "Retornar records MX auto-señaladores para hosts locales."
+
+#: option.c:133
+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:134
+msgid "Don't forward spurious DNS requests from Windows hosts."
+msgstr "No reenviar pedidos DNS falsos desde máquinas Windows."
+
+#: option.c:135
+msgid "Enable DHCP in the range given with lease duration."
+msgstr "Habilitar DHCP dentro del rango brindado con duración del arriendo."
+
+#: option.c:136
+#, 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:137
+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:138
+#, c-format
+msgid "Do NOT load %s file."
+msgstr "NO cargar archivo %s."
+
+#: option.c:139
+#, c-format
+msgid "Specify a hosts file to be read in addition to %s."
+msgstr "Especificar un archivo de hosts para leer adicionalmente a %s."
+
+#: option.c:140
+msgid "Specify interface(s) to listen on."
+msgstr "Especificar interface(s) donde escuchar."
+
+#: option.c:141
+msgid "Specify interface(s) NOT to listen on."
+msgstr "Especificar interface(s) donde NO escuchar."
+
+#: option.c:142
+msgid "Map DHCP user class to option set."
+msgstr "Trazar clase de usuario DHCP a la opción fijada."
+
+#: option.c:143
+msgid "Don't do DHCP for hosts in option set."
+msgstr "No hacer DHCP para hosts en la opción fijada."
+
+#: option.c:144
+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:145
+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:146
+#, c-format
+msgid "Specify where to store DHCP leases (defaults to %s)."
+msgstr "Especificar donde guardar arriendos DHCP (%s por predeterminado)."
+
+#: option.c:147
+msgid "Return MX records for local hosts."
+msgstr "Retornar récords MX para hosts locales."
+
+#: option.c:148
+msgid "Specify an MX record."
+msgstr "Especificar un récord MX."
+
+#: option.c:149
+msgid "Specify BOOTP options to DHCP server."
+msgstr "Especificar opciónes BOOTP a servidor DHCP."
+
+#: option.c:150
+#, c-format
+msgid "Do NOT poll %s file, reload only on SIGHUP."
+msgstr "NO revisar archivo %s periodicamente, recargar solo con SIGHUP."
+
+#: option.c:151
+msgid "Do NOT cache failed search results."
+msgstr "NO cachear resultados de búsquedas fallidas."
+
+#: option.c:152
+#, c-format
+msgid "Use nameservers strictly in the order given in %s."
+msgstr "Usar servidores DNS estrictamente en el órden dado en %s."
+
+#: option.c:153
+msgid "Set extra options to be set to DHCP clients."
+msgstr "Fijar opciones extra para ser enviadas a clientes DHCP."
+
+#: option.c:154
+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:155
+#, c-format
+msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
+msgstr ""
+"Máximo tamaño soportado de paquetes UDP para EDNS.0 (%s por predeterminado)."
+
+#: option.c:156
+msgid "Log queries."
+msgstr "Bitacorear búsquedas."
+
+#: option.c:157
+msgid "Force the originating port for upstream queries."
+msgstr "Enforzar el puerto original para búsquedas upstream."
+
+#: option.c:158
+msgid "Do NOT read resolv.conf."
+msgstr "NO leer resolv.conf."
+
+#: option.c:159
+#, c-format
+msgid "Specify path to resolv.conf (defaults to %s)."
+msgstr "Especificar el destino hacia resolv.conf (%s por predeterminado)."
+
+#: option.c:160
+msgid "Specify address(es) of upstream servers with optional domains."
+msgstr ""
+"Especificar dirección(es) de servidor upstream con dominios opcionales."
+
+#: option.c:161
+msgid "Never forward queries to specified domains."
+msgstr "Nunca reenviar búsquedas a dominios especificados."
+
+#: option.c:162
+msgid "Specify the domain to be assigned in DHCP leases."
+msgstr "Especificar dominio para asignar en arriendos DHCP."
+
+#: option.c:163
+msgid "Specify default target in an MX record."
+msgstr "Especificar destino predeterminado en un récord MX."
+
+#: option.c:164
+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:165
+#, c-format
+msgid "Change to this user after startup. (defaults to %s)."
+msgstr "Cambiar a este usuario despues de iniciar (%s por predeterminado)."
+
+#: option.c:166
+msgid "Map DHCP vendor class to option set."
+msgstr "Trazar clase de vendedor DHCP a opción fijada."
+
+#: option.c:167
+msgid "Display dnsmasq version and copyright information."
+msgstr "Mostrar información sobre la versión y copyright de dnsmasq."
+
+#: option.c:168
+msgid "Translate IPv4 addresses from upstream servers."
+msgstr "Traducir direcciones IPv4 desde servidores upstream."
+
+#: option.c:169
+msgid "Specify a SRV record."
+msgstr "Especificar un récord SRV."
+
+#: option.c:170
+msgid "Display this message."
+msgstr "Mostrar este mensaje."
+
+#: option.c:171
+#, c-format
+msgid "Specify path of PID file. (defaults to %s)."
+msgstr "Especificar path de archivo PID (%s por predeterminado)."
+
+#: option.c:172
+#, 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:173
+msgid "Answer DNS queries based on the interface a query was sent to."
+msgstr ""
+"Responder a búsquedas DNS en base a la interface donde fueron enviadas."
+
+#: option.c:174
+msgid "Specify TXT DNS record."
+msgstr "Especificar récord DNS TXT."
+
+#: option.c:175
+msgid "Bind only to interfaces in use."
+msgstr "Acoplar solo a interfaces en uso."
+
+#: option.c:176
+#, c-format
+msgid "Read DHCP static host information from %s."
+msgstr "Leer información sobre hosts DHCP estáticos desde %s."
+
+#: option.c:177
+msgid "Enable the DBus interface for setting upstream servers, etc."
+msgstr "Habilitar la interface DBus para fijar servidores upstream, etc."
+
+#: option.c:178
+msgid "Do not provide DHCP on this interface, only provide DNS."
+msgstr "No proveer DHCP en esta interface, solo proveer DNS."
+
+#: option.c:179
+msgid "Enable dynamic address allocation for bootp."
+msgstr "Habilitar alocación dinámica de direcciónes para BOOTP."
+
+#: option.c:394
+msgid "missing \""
+msgstr "falta \""
+
+#: option.c:423
+msgid "bad option"
+msgstr "opción errónea"
+
+#: option.c:440
+#, c-format
+msgid "cannot read %s: %s"
+msgstr "no se puede leer %s: %s"
+
+#: option.c:446
+#, c-format
+msgid ""
+"Usage: dnsmasq [options]\n"
+"\n"
+msgstr ""
+"Modo de uso: dnsmasq [opciones]\n"
+"\n"
+
+#: option.c:448
+#, 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:450
+#, c-format
+msgid "Valid options are :\n"
+msgstr "Opciones válidas son :\n"
+
+#: option.c:475
+#, c-format
+msgid "Dnsmasq version %s %s\n"
+msgstr "Dnsmasq versión %s %s\n"
+
+#: option.c:476
+#, c-format
+msgid ""
+"Compile time options %s\n"
+"\n"
+msgstr ""
+"Opciones de compilación %s\n"
+"\n"
+
+#: option.c:477
+#, c-format
+msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
+msgstr "Este software viene SIN NINGUNA GARANTIA.\n"
+
+#: option.c:478
+#, 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:479
+#, 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:489
+msgid "extraneous parameter"
+msgstr "parámetro extraño"
+
+#: option.c:497
+msgid "missing parameter"
+msgstr "parámetro ausente"
+
+#: option.c:514
+msgid "nested includes not allowed"
+msgstr "inclusiones jerarquizadas no permitidas"
+
+#: option.c:574
+msgid "bad MX preference"
+msgstr "preferencia MX errónea"
+
+#: option.c:583
+msgid "bad MX name"
+msgstr "nombre MX erróneo"
+
+#: option.c:601
+msgid "bad MX target"
+msgstr "destino MX erróneo"
+
+#: option.c:803 option.c:814
+msgid "bad port"
+msgstr "puerto erróneo"
+
+#: option.c:954
+msgid "bad dhcp-range"
+msgstr "dhcp-range (rango DHCP) erróneo"
+
+#: option.c:1014
+msgid "inconsistent DHCP range"
+msgstr "rango DHCP inconsistente"
+
+#: option.c:1201
+msgid "bad dhcp-host"
+msgstr "dhcp-host erróneo"
+
+#: option.c:1261
+msgid "bad dhcp-option"
+msgstr "dhcp-option erróneo"
+
+#: option.c:1279
+msgid "bad domain in dhcp-option"
+msgstr "dominio erróneo en dhcp-option"
+
+#: option.c:1425
+msgid "dhcp-option too long"
+msgstr "opción dhcp-option demasiado larga"
+
+#: option.c:1605
+msgid "bad TXT record"
+msgstr "récord TXT erróneo"
+
+#: option.c:1637
+msgid "TXT record string too long"
+msgstr "récord TXT demasiado largo"
+
+#: option.c:1676
+msgid "bad SRV record"
+msgstr "récord SRV erróneo"
+
+#: option.c:1689
+msgid "bad SRV target"
+msgstr "destino SRV erróneo"
+
+#: option.c:1701
+msgid "invalid port number"
+msgstr "número de puerto inválido"
+
+#: option.c:1712
+msgid "invalid priority"
+msgstr "prioridad inválida"
+
+#: option.c:1723
+msgid "invalid weight"
+msgstr "peso inválido"
+
+#: option.c:1748
+msgid "error"
+msgstr "error"
+
+#: option.c:1750
+#, c-format
+msgid "bad command line options: %s."
+msgstr "opciones de línea de comandos erróneas: %s."
+
+#: option.c:1794
+#, c-format
+msgid "cannot get host-name: %s"
+msgstr "no se puede obtener host-name (nombre de host): %s"
+
+#: option.c:1823
+msgid "only one resolv.conf file allowed in no-poll mode."
+msgstr "solo un archivo resolv.conf permitido en modo no-poll."
+
+#: option.c:1830
+msgid "must have exactly one resolv.conf to read domain from."
+msgstr "debe haber exactamente un resolv.conf desde donde leer dominio."
+
+#: option.c:1833 network.c:591
+#, c-format
+msgid "failed to read %s: %m"
+msgstr "no se pudo leer %s: %m"
+
+#: option.c:1851
+#, c-format
+msgid "no search directive found in %s"
+msgstr "ninguna directiva de búsqueda encontrada en %s"
+
+#: forward.c:378
+#, c-format
+msgid "nameserver %s refused to do a recursive query"
+msgstr "servidor DNS %s se reuso a hacer una búsqueda recursiva"
+
+#: forward.c:899
+msgid "forwarding table overflow: check for server loops."
+msgstr ""
+"desbordamiento en la tabla de reenvio: revisar si hay loops de servidor."
+
+#: isc.c:71 dnsmasq.c:471
+#, c-format
+msgid "failed to access %s: %m"
+msgstr "no se pudo accesar %s: %m"
+
+#: isc.c:87
+#, c-format
+msgid "failed to load %s: %m"
+msgstr "no se pudo cargar %s: %m"
+
+#: isc.c:91 network.c:595
+#, c-format
+msgid "reading %s"
+msgstr "leyendo %s"
+
+#: isc.c:113
+#, c-format
+msgid "bad name in %s"
+msgstr "nombre erróneo en %s"
+
+#: isc.c:175
+#, c-format
+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:418
+#, c-format
+msgid "failed to create listening socket: %s"
+msgstr "no se pudo crear un socket escuchador: %s"
+
+#: network.c:425
+#, 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:444
+#, c-format
+msgid "failed to bind listening socket for %s: %s"
+msgstr "no se pudo acoplar socket escuchador para %s: %s"
+
+#: network.c:451
+#, c-format
+msgid "failed to listen on socket: %s"
+msgstr "no se pudo escuchar en el socket: %s"
+
+#: network.c:521
+#, c-format
+msgid "ignoring nameserver %s - local interface"
+msgstr "ignorando servidor DNS %s - interface local"
+
+#: network.c:530
+#, 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:544
+msgid "domain"
+msgstr "dominio"
+
+#: network.c:546
+msgid "unqualified"
+msgstr "no calificado"
+
+#: network.c:546
+msgid "domains"
+msgstr "dominios"
+
+#: network.c:549
+#, c-format
+msgid "using local addresses only for %s %s"
+msgstr "usando direcciones locales solo para %s %s"
+
+#: network.c:551
+#, c-format
+msgid "using nameserver %s#%d for %s %s"
+msgstr "usando servidor DNS %s#%d para %s %s"
+
+#: network.c:554
+#, c-format
+msgid "using nameserver %s#%d"
+msgstr "usando servidor DNS %s#%d"
+
+#: dnsmasq.c:112
+msgid ""
+"ISC dhcpd integration not available: set HAVE_ISC_READER in src/config.h"
+msgstr ""
+"Integración dhcpd ISC no disponible: fijar HAVE_ISC_READER en src/config.h"
+
+#: dnsmasq.c:116
+#, c-format
+msgid "failed to find list of interfaces: %s"
+msgstr "no se pudo encontrar lista de interfaces: %s"
+
+#: dnsmasq.c:131
+#, c-format
+msgid "unknown interface %s"
+msgstr "interface desconocida %s"
+
+#: dnsmasq.c:137
+#, c-format
+msgid "no interface with address %s"
+msgstr "ninguna interface con dirección %s"
+
+#: dnsmasq.c:146
+#, c-format
+msgid "cannot open %s:%s"
+msgstr "no se puede abrir %s:%s"
+
+#: dnsmasq.c:160
+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:173 dnsmasq.c:504
+#, c-format
+msgid "DBus error: %s"
+msgstr "error DBus: %s"
+
+#: dnsmasq.c:177
+msgid "DBus not available: set HAVE_DBUS in src/config.h"
+msgstr "DBus no disponible: fijar HAVE_DBUS en src/config.h"
+
+#: dnsmasq.c:290
+#, c-format
+msgid "started, version %s cachesize %d"
+msgstr "versión %s iniciada, tamaño de caché %d"
+
+#: dnsmasq.c:292
+#, c-format
+msgid "started, version %s cache disabled"
+msgstr "versión %s iniciada, caché deshabilitado"
+
+#: dnsmasq.c:294
+#, c-format
+msgid "compile time options: %s"
+msgstr "opciones de compilación: %s"
+
+#: dnsmasq.c:300
+msgid "DBus support enabled: connected to system bus"
+msgstr "soporte DBus habilitado: conectado a bus de sistema"
+
+#: dnsmasq.c:302
+msgid "DBus support enabled: bus connection pending"
+msgstr "soporte DBus habilitado: conección a bus pendiente"
+
+#: dnsmasq.c:307
+msgid "setting --bind-interfaces option because of OS limitations"
+msgstr ""
+"fijando opción --bind-interfaces debido a limitaciones de sistema operativo"
+
+#: dnsmasq.c:312
+#, c-format
+msgid "warning: interface %s does not currently exist"
+msgstr "advertencia: interface %s no existe actualmente"
+
+#: dnsmasq.c:329
+#, 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:330
+#, c-format
+msgid "DHCP, IP range %s -- %s, lease time %s"
+msgstr "DHCP, rango de IP %s -- %s, tiempo de arriendo %s"
+
+#: dnsmasq.c:341
+#, c-format
+msgid "DHCP, %s will be written every %s"
+msgstr "DHCP, %s será escrito cada %s"
+
+#: dnsmasq.c:346
+msgid "running as root"
+msgstr "corriendo como root"
+
+#: dnsmasq.c:506
+msgid "connected to system DBus"
+msgstr "conectado a DBus de sistema"
+
+#: dnsmasq.c:517
+msgid "exiting on receipt of SIGTERM"
+msgstr "haciendo exit al haber recibido SIGTERM"
+
+#: dhcp.c:25
+#, c-format
+msgid "cannot create DHCP socket : %s"
+msgstr "no se puede crear socket DHCP: %s"
+
+#: dhcp.c:35
+#, c-format
+msgid "failed to set options on DHCP socket: %s"
+msgstr "no se pudo fijar opciones en socket DHCP: %s"
+
+#: dhcp.c:42
+#, c-format
+msgid "failed to set SO_REUSEADDR on DHCP socket: %s"
+msgstr "no se pudo fijar SO_REUSEADDR en socket DHCP: %s"
+
+#: dhcp.c:52
+#, c-format
+msgid "failed to bind DHCP server socket: %s"
+msgstr "no se pudo acoplar socket de servidor DHCP: %s"
+
+#: dhcp.c:61
+#, c-format
+msgid "cannot create ICMP raw socket: %s."
+msgstr "no se puede crear socket crudo ICMP: %s."
+
+#: dhcp.c:75
+#, c-format
+msgid "cannot create DHCP BPF socket: %s"
+msgstr "no se puede crear socket BPF DHCP: %s"
+
+#: dhcp.c:86
+#, c-format
+msgid ""
+"cannot create DHCP packet socket: %s. Is CONFIG_PACKET enabled in your "
+"kernel?"
+msgstr ""
+"no se puede crear socket para paquetes DHCP: %s. Está CONFIG_PACKET "
+"habilitado en el kernel?"
+
+#: dhcp.c:98
+#, c-format
+msgid "duplicate IP address %s in dhcp-config directive."
+msgstr "dirección IP duplicada en directiva dhcp-config."
+
+#: dhcp.c:384
+#, c-format
+msgid "DHCP range %s -- %s is not consistent with netmask %s"
+msgstr "rango DHCP %s -- %s no coincide con máscara de red %s"
+
+#: dhcp.c:690
+#, c-format
+msgid "failed to read %s:%m"
+msgstr "no se pudo leer %s:%m"
+
+#: dhcp.c:709
+#, fuzzy, c-format
+msgid "bad line at %s line %d"
+msgstr "nombre erróneo en %s línea %d"
+
+#: dhcp.c:810
+#, c-format
+msgid "duplicate IP address %s (%s) in dhcp-config directive"
+msgstr "dirección IP %s (%s) duplicada en directiva dhcp-config"
+
+#: dhcp.c:846
+#, c-format
+msgid "Ignoring DHCP host name %s because it has an illegal domain part"
+msgstr ""
+"Ignorando nombre de host DHCP %s porque contiene una parte ilegal de dominio."
+
+#: lease.c:39
+#, c-format
+msgid "cannot open or create leases file: %s"
+msgstr "no se puede abrir o crear archivo de arriendos: %s"
+
+#: lease.c:77
+msgid "too many stored leases"
+msgstr "demasiados arriendos almacenados"
+
+#: rfc2131.c:171
+#, c-format
+msgid "DHCP request for unsupported hardware type (%d) recieved on %s"
+msgstr "pedido DHCP por hardware no soportado tipo (%d) recibido en %s"
+
+#: rfc2131.c:220
+#, c-format
+msgid "no address range available for DHCP request %s %s"
+msgstr "ningún rango de direcciónes disponible para pedido DHCP %s %s"
+
+#: rfc2131.c:221
+msgid "with subnet selector"
+msgstr "con selector de subred"
+
+#: rfc2131.c:221
+msgid "via"
+msgstr "vía"
+
+#: rfc2131.c:238 rfc2131.c:262
+msgid "disabled"
+msgstr "deshabilitado"
+
+#: rfc2131.c:272 rfc2131.c:643
+msgid "address in use"
+msgstr "dirección en uso"
+
+#: rfc2131.c:275
+msgid "no address configured"
+msgstr "ninguna dirección configurada"
+
+#: rfc2131.c:281 rfc2131.c:522
+msgid "no address available"
+msgstr "ninguna dirección disponible"
+
+#: rfc2131.c:285 rfc2131.c:646
+msgid "no leases left"
+msgstr "no queda ningún arriendo"
+
+#: rfc2131.c:481
+#, c-format
+msgid "disabling DHCP static address %s"
+msgstr "deshabilitando dirección DHCP estática %s"
+
+#: rfc2131.c:499
+msgid "unknown lease"
+msgstr "arriendo desconocido"
+
+#: rfc2131.c:512 rfc2131.c:718
+msgid "ignored"
+msgstr "ignorado"
+
+#: rfc2131.c:592
+msgid "wrong address"
+msgstr "dirección equivocada"
+
+#: rfc2131.c:601
+msgid "lease not found"
+msgstr "arriendo no encontrado"
+
+#: rfc2131.c:619
+msgid "wrong network"
+msgstr "red equivocada"
+
+#: rfc2131.c:627
+msgid "address not available"
+msgstr "dirección no disponible"
+
+#: rfc2131.c:636
+msgid "static lease available"
+msgstr "arriendo estático disponible"
+
+#: rfc2131.c:640
+msgid "address reserved"
+msgstr "dirección reservada"
+
+#: rfc2131.c:837
+#, 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:1132
+#, c-format
+msgid "More than one vendor class matches, using %s"
+msgstr "Más de una clase de vendedor coincide, usando %s"
+
+#: netlink.c:37
+#, c-format
+msgid "cannot bind netlink socket: %s"
+msgstr "no se puede acoplar socket netlink: %s"
+
+#: dbus.c:112
+msgid "attempt to set an IPv6 server address via DBus - no IPv6 support"
+msgstr ""
+"intento de fijar dirección IPv6 a servidor vía DBus - no hay soporte IPv6"
+
+#: dbus.c:237
+msgid "setting upstream servers from DBus"
+msgstr "fijando servidores upstream desde DBus"
+
+#: dbus.c:273
+msgid "could not register a DBus message handler"
+msgstr "no se pudo registrar un manejador de mensajes DBus"
diff --git a/po/fr.po b/po/fr.po
new file mode 100644
index 0000000..78ff976
--- /dev/null
+++ b/po/fr.po
@@ -0,0 +1,887 @@
+# French translations for dnsmasq package.
+# This file is put in the public domain.
+# Lionel Tricon <lionel.tricon@free.fr>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: dnsmasq 2.24\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-11-22 20:10+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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: cache.c:565
+#, c-format
+msgid "failed to load names from %s: %m"
+msgstr "Impossible de charger les noms a partir de %s: %m"
+
+#: cache.c:601 dhcp.c:722
+#, fuzzy, c-format
+msgid "bad address at %s line %d"
+msgstr "mauvais nom dans %s ligne %d"
+
+#: cache.c:628 dhcp.c:736
+#, c-format
+msgid "bad name at %s line %d"
+msgstr "mauvais nom dans %s ligne %d"
+
+#: cache.c:634 dhcp.c:787
+#, c-format
+msgid "read %s - %d addresses"
+msgstr "lecture %s - %d adresses"
+
+#: cache.c:670
+msgid "cleared cache"
+msgstr "cache nettoye"
+
+#: cache.c:723
+#, c-format
+msgid ""
+"not giving name %s to the DHCP lease of %s because the name exists in %s "
+"with address %s"
+msgstr ""
+"ne donne pas de nom %s au bail DHCP de %s parce-que le nom existe dans %s "
+"avec l'adresse %s"
+
+#: cache.c:767
+#, c-format
+msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
+msgstr ""
+"taille de cache %d, %d/%d insertions dans le cache ont reutilisees des "
+"entrees qui n'ont pas expirees"
+
+#: util.c:149 option.c:1284
+msgid "could not get memory"
+msgstr "impossible d'allouer de la memoire"
+
+#: util.c:172
+#, c-format
+msgid "%s at line %d of %%s"
+msgstr "%s a la ligne %d de %%s"
+
+#: util.c:179
+msgid "FAILED to start up"
+msgstr "IMPOSSIBLE de demarrer"
+
+#: util.c:305
+#, c-format
+msgid "infinite"
+msgstr "illimite"
+
+#: option.c:124
+msgid "Specify local address(es) to listen on."
+msgstr ""
+"Specifie la ou les adresse(s) locales ou le demon doit se mettre a l'ecoute."
+
+#: option.c:125
+msgid "Return ipaddr for all hosts in specified domains."
+msgstr ""
+"Retourne les adresses IP pour toutes les machines presentent dans les "
+"domaines specifies"
+
+#: option.c:126
+msgid "Fake reverse lookups for RFC1918 private address ranges."
+msgstr "Traduction inverse truquee pour la plage d'adresse privee RFC1918"
+
+#: option.c:127
+msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
+msgstr ""
+"Traite l'adresse IP comme un domaine inexistant NXDOMAIN (contourne le "
+"systemede redirection de Verisign)"
+
+#: option.c:128
+#, c-format
+msgid "Specify the size of the cache in entries (defaults to %s)."
+msgstr "Specifie la taille du cache en entree (par defaut a %s)."
+
+#: option.c:129
+#, c-format
+msgid "Specify configuration file (defaults to %s)."
+msgstr "Specifie le nom du fichier de configuration (par defaut %s)"
+
+#: option.c:130
+msgid "Do NOT fork into the background: run in debug mode."
+msgstr "Ne passe pas en tache de fond: demarre en mode debug"
+
+#: option.c:131
+msgid "Do NOT forward queries with no domain part."
+msgstr "Ne retransmet pas les requetes qui n'ont pas de domaine."
+
+#: option.c:132
+msgid "Return self-pointing MX records for local hosts."
+msgstr "Retourne les champs MX pour les machines locales."
+
+#: option.c:133
+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:134
+msgid "Don't forward spurious DNS requests from Windows hosts."
+msgstr ""
+"Ne retransmet pas les fausses requetes DNS en provenance des machines "
+"Windows."
+
+#: option.c:135
+msgid "Enable DHCP in the range given with lease duration."
+msgstr ""
+"Autorise DHCP dans la plage d'adresses donnee sur la duree de validite du "
+"bail."
+
+#: option.c:136
+#, c-format
+msgid "Change to this group after startup (defaults to %s)."
+msgstr "On change pour ce groupe apres le demarrage (par defaut a %s)."
+
+#: option.c:137
+msgid "Set address or hostname for a specified machine."
+msgstr "On assigne une adresse ou un nom pour une machine specifiee."
+
+#: option.c:138
+#, c-format
+msgid "Do NOT load %s file."
+msgstr "Ne charge PAS le fichier %s."
+
+#: option.c:139
+#, c-format
+msgid "Specify a hosts file to be read in addition to %s."
+msgstr "Specifie un nom de fichier hosts a lire en complement de %s"
+
+#: option.c:140
+msgid "Specify interface(s) to listen on."
+msgstr "Specifie la ou les interface(s) ou le demon doit se mettre a l'ecoute."
+
+#: option.c:141
+msgid "Specify interface(s) NOT to listen on."
+msgstr "Specifie la ou les interface(s) que le demon ne doit PAS traiter."
+
+#: option.c:142
+msgid "Map DHCP user class to option set."
+msgstr "Associe les 'user class' DHCP aux options."
+
+#: option.c:143
+msgid "Don't do DHCP for hosts in option set."
+msgstr "Ne pas autoriser DHCP pour les machines enumerees dans les options."
+
+#: option.c:144
+msgid "Do NOT fork into the background, do NOT run in debug mode."
+msgstr "Ne passe pas en tache de fond, ne s'execute pas en mode debug."
+
+#: option.c:145
+msgid "Assume we are the only DHCP server on the local network."
+msgstr "On considere que l'on est le seul serveur DHCP sur le reseau local."
+
+#: option.c:146
+#, c-format
+msgid "Specify where to store DHCP leases (defaults to %s)."
+msgstr "Specifie ou il faut sauvegarder les baux DHCP (par defaut a %s)."
+
+#: option.c:147
+msgid "Return MX records for local hosts."
+msgstr "Retourne les champs MX pour les machines locales."
+
+#: option.c:148
+msgid "Specify an MX record."
+msgstr "Specifie un champ MX."
+
+#: option.c:149
+msgid "Specify BOOTP options to DHCP server."
+msgstr "Specifie les options BOOTP pour le serveur DHCP."
+
+#: option.c:150
+#, c-format
+msgid "Do NOT poll %s file, reload only on SIGHUP."
+msgstr ""
+"Ne pas scruter le fichier %s, recharger les modifications seulement sur "
+"reception du signal SIGHUP."
+
+#: option.c:151
+msgid "Do NOT cache failed search results."
+msgstr "Ne place pas en cache le resultat des requetes qui ont echouees."
+
+#: option.c:152
+#, c-format
+msgid "Use nameservers strictly in the order given in %s."
+msgstr "Utilise les serveurs de noms dans l'ordre donne dans %s."
+
+#: option.c:153
+msgid "Set extra options to be set to DHCP clients."
+msgstr "Options supplementaires a associer aux clients DHCP."
+
+#: option.c:154
+msgid "Specify port to listen for DNS requests on (defaults to 53)."
+msgstr ""
+"Specifie le port ou il faut ecouter les requetes DNS (par defaut a 53)."
+
+#: option.c:155
+#, c-format
+msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
+msgstr ""
+"Taille maximale des paquets UDP supportee pour EDNS.0 (par defaut a %s)."
+
+#: option.c:156
+msgid "Log queries."
+msgstr "Logue les requetes."
+
+#: option.c:157
+msgid "Force the originating port for upstream queries."
+msgstr "Force le port d'origine des requetes vers les serveurs amonts."
+
+#: option.c:158
+msgid "Do NOT read resolv.conf."
+msgstr "Ne pas lire le fichier resolv.conf."
+
+#: option.c:159
+#, c-format
+msgid "Specify path to resolv.conf (defaults to %s)."
+msgstr "Specifie le chemin pour le fichier resolv.conf (par defaut a %s)."
+
+#: option.c:160
+msgid "Specify address(es) of upstream servers with optional domains."
+msgstr ""
+"Specifie la ou les adresses des serveurs amonts avec des domaines optionels."
+
+#: option.c:161
+msgid "Never forward queries to specified domains."
+msgstr "Ne jamais retransmettre les requetes pour les domaines specifies."
+
+#: option.c:162
+msgid "Specify the domain to be assigned in DHCP leases."
+msgstr "Specifie le domaine qui doit etre assigne aux baux DHCP."
+
+#: option.c:163
+msgid "Specify default target in an MX record."
+msgstr "Speficie la cible par defaut dans un champ MX."
+
+#: option.c:164
+msgid "Specify time-to-live in seconds for replies from /etc/hosts."
+msgstr ""
+"Specifie le TTL en secondes pour les reponses qui utilisent /etc/hosts."
+
+#: option.c:165
+#, c-format
+msgid "Change to this user after startup. (defaults to %s)."
+msgstr "Change pour cet utilisateur apres le demarrage (par defaut a %s)."
+
+#: option.c:166
+msgid "Map DHCP vendor class to option set."
+msgstr "Associe les 'vendor class' DHCP aux options."
+
+#: option.c:167
+msgid "Display dnsmasq version and copyright information."
+msgstr "Affiche la version de Dnsmasq et les informations liees au copyright."
+
+#: option.c:168
+msgid "Translate IPv4 addresses from upstream servers."
+msgstr "Traduit les adresses IPV4 des serveurs amonts."
+
+#: option.c:169
+msgid "Specify a SRV record."
+msgstr " Specifie un champ SRV."
+
+#: option.c:170
+msgid "Display this message."
+msgstr "Affiche ce message."
+
+#: option.c:171
+#, c-format
+msgid "Specify path of PID file. (defaults to %s)."
+msgstr "Specifie un chemin pour le fichier PID (par defaut a %s)."
+
+#: option.c:172
+#, c-format
+msgid "Specify maximum number of DHCP leases (defaults to %s)."
+msgstr "Specifie le nombre maximum de baux DHCP (par defaut a %s)."
+
+#: option.c:173
+msgid "Answer DNS queries based on the interface a query was sent to."
+msgstr ""
+"Repond aux requetes DNS en se basant sur l'interface ou a ete envoyee la "
+"requete."
+
+#: option.c:174
+msgid "Specify TXT DNS record."
+msgstr "Specifie un champ DNS TXT"
+
+#: option.c:175
+msgid "Bind only to interfaces in use."
+msgstr "Associe seulement aux interfaces en utilisation."
+
+#: option.c:176
+#, c-format
+msgid "Read DHCP static host information from %s."
+msgstr "Lecture des informations de DHCP statique a partir de %s."
+
+#: option.c:177
+msgid "Enable the DBus interface for setting upstream servers, etc."
+msgstr "Autorise l'interface DBus a configurer les serveurs amonts, etc."
+
+#: option.c:178
+msgid "Do not provide DHCP on this interface, only provide DNS."
+msgstr "Ne fourni pas DHCP pour cette interface, mais seulement DNS."
+
+#: option.c:179
+msgid "Enable dynamic address allocation for bootp."
+msgstr "Autorise l'allocation dynamique d'adresse pour bootp."
+
+#: option.c:394
+msgid "missing \""
+msgstr "il manque \""
+
+#: option.c:423
+msgid "bad option"
+msgstr "mauvaise option"
+
+#: option.c:440
+#, c-format
+msgid "cannot read %s: %s"
+msgstr "Ne peut pas lire %s: %s"
+
+#: option.c:446
+#, c-format
+msgid ""
+"Usage: dnsmasq [options]\n"
+"\n"
+msgstr ""
+"Usage: dnsmasq [options]\n"
+"\n"
+
+#: option.c:448
+#, 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:450
+#, c-format
+msgid "Valid options are :\n"
+msgstr "Les options valides sont :\n"
+
+#: option.c:475
+#, c-format
+msgid "Dnsmasq version %s %s\n"
+msgstr "Version de Dnsmasq %s %s\n"
+
+#: option.c:476
+#, c-format
+msgid ""
+"Compile time options %s\n"
+"\n"
+msgstr ""
+"Options a la compilation %s\n"
+"\n"
+
+#: option.c:477
+#, c-format
+msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
+msgstr "Ce logiciel est fourni sans GARANTIE aucune.\n"
+
+#: option.c:478
+#, c-format
+msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
+msgstr "Dnsmasq est un logiciel libre, et vous etes invite a le redistribuer\n"
+
+#: option.c:479
+#, 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:489
+msgid "extraneous parameter"
+msgstr "parametre supplementaire"
+
+#: option.c:497
+msgid "missing parameter"
+msgstr "parametre manquant"
+
+#: option.c:514
+msgid "nested includes not allowed"
+msgstr "Inclusions d'inclusions non autorisees"
+
+#: option.c:574
+msgid "bad MX preference"
+msgstr "Mauvaise preference MX"
+
+#: option.c:583
+msgid "bad MX name"
+msgstr "mauvais nom MX"
+
+#: option.c:601
+msgid "bad MX target"
+msgstr "mauvaise cible MX"
+
+#: option.c:803 option.c:814
+msgid "bad port"
+msgstr "mauvais port"
+
+#: option.c:954
+msgid "bad dhcp-range"
+msgstr "mauvaise plage d'adresses DHCP (dhcp-range)"
+
+#: option.c:1014
+msgid "inconsistent DHCP range"
+msgstr "plage d'adresses DHCP incoherente"
+
+#: option.c:1201
+msgid "bad dhcp-host"
+msgstr "mauvais dhcp-host"
+
+#: option.c:1261
+msgid "bad dhcp-option"
+msgstr "mauvais dhcp-option"
+
+#: option.c:1279
+msgid "bad domain in dhcp-option"
+msgstr "mauvais domaine dans dhcp-option"
+
+#: option.c:1425
+msgid "dhcp-option too long"
+msgstr "dhcp-option trop long"
+
+#: option.c:1605
+msgid "bad TXT record"
+msgstr "mauvais champ TXT"
+
+#: option.c:1637
+msgid "TXT record string too long"
+msgstr "chaîne du champ TXT trop longue"
+
+#: option.c:1676
+msgid "bad SRV record"
+msgstr "mauvais champ SRV"
+
+#: option.c:1689
+msgid "bad SRV target"
+msgstr "mauvaise cible SRV"
+
+#: option.c:1701
+msgid "invalid port number"
+msgstr "numero de port invalide"
+
+#: option.c:1712
+msgid "invalid priority"
+msgstr "priorite invalide"
+
+#: option.c:1723
+msgid "invalid weight"
+msgstr "poids invalide"
+
+#: option.c:1748
+msgid "error"
+msgstr "erreur"
+
+#: option.c:1750
+#, c-format
+msgid "bad command line options: %s."
+msgstr "mauvaises options en ligne de commande: %s."
+
+#: option.c:1794
+#, c-format
+msgid "cannot get host-name: %s"
+msgstr "ne peut pas obtenir le nom de la machine: %s"
+
+#: option.c:1823
+msgid "only one resolv.conf file allowed in no-poll mode."
+msgstr "seul un fichier resolv.conf est autorise dans le mode no-poll"
+
+#: option.c:1830
+msgid "must have exactly one resolv.conf to read domain from."
+msgstr ""
+"on doit avoir exactement un seul fichier resolv.conf pour y recuperer le nom "
+"de domaine."
+
+#: option.c:1833 network.c:591
+#, c-format
+msgid "failed to read %s: %m"
+msgstr "impossible de lire %s: %m"
+
+#: option.c:1851
+#, c-format
+msgid "no search directive found in %s"
+msgstr "pas de directive de recherche trouvee dans %s"
+
+#: forward.c:378
+#, c-format
+msgid "nameserver %s refused to do a recursive query"
+msgstr "le serveur de nom %s a refuse de faire une recherche recursive"
+
+#: forward.c:899
+msgid "forwarding table overflow: check for server loops."
+msgstr ""
+"Table de stockage des requetes DNS pleine : verifiez la configuration du "
+"serveur (risque de boucle recursive)."
+
+#: isc.c:71 dnsmasq.c:471
+#, c-format
+msgid "failed to access %s: %m"
+msgstr "impossible d'acceder a %s: %m"
+
+#: isc.c:87
+#, c-format
+msgid "failed to load %s: %m"
+msgstr "impossible de charger %s: %m"
+
+#: isc.c:91 network.c:595
+#, c-format
+msgid "reading %s"
+msgstr "Lecture %s"
+
+#: isc.c:113
+#, c-format
+msgid "bad name in %s"
+msgstr "mauvais nom dans %s"
+
+#: isc.c:175
+#, c-format
+msgid "Ignoring DHCP lease for %s because it has an illegal domain part"
+msgstr ""
+"On ignore le bail DHCP pour %s car il possede un nom de domaine illegal"
+
+#: network.c:418
+#, c-format
+msgid "failed to create listening socket: %s"
+msgstr "impossible de creer une socket de lecture: %s"
+
+#: network.c:425
+#, 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:444
+#, c-format
+msgid "failed to bind listening socket for %s: %s"
+msgstr "impossible de lier la socket de lecture pour %s: %s"
+
+#: network.c:451
+#, c-format
+msgid "failed to listen on socket: %s"
+msgstr "impossible de lire sur la socket: %s"
+
+#: network.c:521
+#, c-format
+msgid "ignoring nameserver %s - local interface"
+msgstr "on ignore le serveur de nom %s - interface locale"
+
+#: network.c:530
+#, c-format
+msgid "ignoring nameserver %s - cannot make/bind socket: %m"
+msgstr "on ignore le serveur de nom %s - ne peut construire/lier la socket: %m"
+
+#: network.c:544
+msgid "domain"
+msgstr "domaine"
+
+#: network.c:546
+msgid "unqualified"
+msgstr "non-qualifie"
+
+#: network.c:546
+msgid "domains"
+msgstr "domaines"
+
+#: network.c:549
+#, c-format
+msgid "using local addresses only for %s %s"
+msgstr "on utilise les adresses locales seulement pour %s %s"
+
+#: network.c:551
+#, c-format
+msgid "using nameserver %s#%d for %s %s"
+msgstr "on utilise le serveur de nom %s#%d pour %s %s"
+
+#: network.c:554
+#, c-format
+msgid "using nameserver %s#%d"
+msgstr "on utilise le serveur de nom %s#%d"
+
+#: dnsmasq.c:112
+msgid ""
+"ISC dhcpd integration not available: set HAVE_ISC_READER in src/config.h"
+msgstr ""
+"L'integration DHCP ISC n'est pas disponible: activez HAVE_ISC_READER dans "
+"src/config.h"
+
+#: dnsmasq.c:116
+#, c-format
+msgid "failed to find list of interfaces: %s"
+msgstr "impossible de trouver la liste des interfaces: %s"
+
+#: dnsmasq.c:131
+#, c-format
+msgid "unknown interface %s"
+msgstr "interface %s inconnue"
+
+#: dnsmasq.c:137
+#, c-format
+msgid "no interface with address %s"
+msgstr "pas d'interface avec l'adresse %s"
+
+#: dnsmasq.c:146
+#, c-format
+msgid "cannot open %s:%s"
+msgstr "ne peut pas ouvrir %s:%s"
+
+#: dnsmasq.c:160
+msgid "must set exactly one interface on broken systems without IP_RECVIF"
+msgstr ""
+"on doit declarer exactement une interface sur les systemes sans IP_RECVIF"
+
+#: dnsmasq.c:173 dnsmasq.c:504
+#, c-format
+msgid "DBus error: %s"
+msgstr "Erreur DBus: %s"
+
+#: dnsmasq.c:177
+msgid "DBus not available: set HAVE_DBUS in src/config.h"
+msgstr "DBus n'est pas disponible: declarez HAVE_DBUS dans src/config.h"
+
+#: dnsmasq.c:290
+#, c-format
+msgid "started, version %s cachesize %d"
+msgstr "demarre, version %s taille de cache %d"
+
+#: dnsmasq.c:292
+#, c-format
+msgid "started, version %s cache disabled"
+msgstr "demarre, version %s cache desactive"
+
+#: dnsmasq.c:294
+#, c-format
+msgid "compile time options: %s"
+msgstr "options a la compilation: %s"
+
+#: dnsmasq.c:300
+msgid "DBus support enabled: connected to system bus"
+msgstr "Support DBus autorise: connecte au bus systeme"
+
+#: dnsmasq.c:302
+msgid "DBus support enabled: bus connection pending"
+msgstr "Support DBus autorise: connexion au bus en suspend"
+
+#: dnsmasq.c:307
+msgid "setting --bind-interfaces option because of OS limitations"
+msgstr "Active l'option --bind-interfaces a cause des limitations de l'OS"
+
+#: dnsmasq.c:312
+#, c-format
+msgid "warning: interface %s does not currently exist"
+msgstr "Attention: l'interface %s n'existe pas actuellement"
+
+#: dnsmasq.c:329
+#, c-format
+msgid "DHCP, static leases only on %.0s%s, lease time %s"
+msgstr ""
+"DHCP, baux statiques seulement sur %.0s%s, duree de validite de bail %s"
+
+#: dnsmasq.c:330
+#, c-format
+msgid "DHCP, IP range %s -- %s, lease time %s"
+msgstr "DHCP, plage d'adresse %s -- %s, duree de bail %s"
+
+#: dnsmasq.c:341
+#, c-format
+msgid "DHCP, %s will be written every %s"
+msgstr "DHCP, %s sera ecrit chaque %s"
+
+#: dnsmasq.c:346
+msgid "running as root"
+msgstr "execute sous root"
+
+#: dnsmasq.c:506
+msgid "connected to system DBus"
+msgstr "connecte au systeme DBus"
+
+#: dnsmasq.c:517
+msgid "exiting on receipt of SIGTERM"
+msgstr "sortie sur reception du signal SIGTERM"
+
+#: dhcp.c:25
+#, c-format
+msgid "cannot create DHCP socket : %s"
+msgstr "ne peut creer la socket DHCP : %s"
+
+#: dhcp.c:35
+#, c-format
+msgid "failed to set options on DHCP socket: %s"
+msgstr "impossible d'appliquer les options sur la socket DHCP: %s"
+
+#: dhcp.c:42
+#, c-format
+msgid "failed to set SO_REUSEADDR on DHCP socket: %s"
+msgstr "impossible de declarer SO_REUSEADDR sur la socket DHCP: %s"
+
+#: dhcp.c:52
+#, c-format
+msgid "failed to bind DHCP server socket: %s"
+msgstr "impossible de lier la socket serveur DHCP: %s"
+
+#: dhcp.c:61
+#, c-format
+msgid "cannot create ICMP raw socket: %s."
+msgstr "ne peut creer de socket en mode raw pour ICMP: %s."
+
+#: dhcp.c:75
+#, c-format
+msgid "cannot create DHCP BPF socket: %s"
+msgstr "impossible de creer une socket BPF pour DHCP: %s"
+
+#: dhcp.c:86
+#, c-format
+msgid ""
+"cannot create DHCP packet socket: %s. Is CONFIG_PACKET enabled in your "
+"kernel?"
+msgstr ""
+"impossible de creer une socket DHCP en mode paquet: %s. Est-ce que "
+"CONFIG_PACKET est active dans votre noyau?"
+
+#: dhcp.c:98
+#, c-format
+msgid "duplicate IP address %s in dhcp-config directive."
+msgstr "adresse IP %s dupliquee dans la directive dhcp-config."
+
+#: dhcp.c:384
+#, c-format
+msgid "DHCP range %s -- %s is not consistent with netmask %s"
+msgstr ""
+"La plage d'adresses DHCP %s -- %s n'est pas coherente avec le masque de "
+"reseau %s"
+
+#: dhcp.c:690
+#, c-format
+msgid "failed to read %s:%m"
+msgstr "impossible de lire %s:%m"
+
+#: dhcp.c:709
+#, fuzzy, c-format
+msgid "bad line at %s line %d"
+msgstr "mauvais nom dans %s ligne %d"
+
+#: dhcp.c:810
+#, c-format
+msgid "duplicate IP address %s (%s) in dhcp-config directive"
+msgstr "adresse IP %s (%s) dupliquee dans la directive dhcp-config."
+
+#: dhcp.c:846
+#, c-format
+msgid "Ignoring DHCP host name %s because it has an illegal domain part"
+msgstr ""
+"On ignore le nom de machine DHCP %s parce-qu'il possede un nom de domaine "
+"illegal"
+
+#: lease.c:39
+#, c-format
+msgid "cannot open or create leases file: %s"
+msgstr "ne peut ouvrir ou creer des fichiers de baux: %s"
+
+#: lease.c:77
+msgid "too many stored leases"
+msgstr "beaucoup trop de baux enregistres"
+
+#: rfc2131.c:171
+#, c-format
+msgid "DHCP request for unsupported hardware type (%d) recieved on %s"
+msgstr "requete DHCP pour un type de materiel non supporte (%d) recue sur %s"
+
+#: rfc2131.c:220
+#, c-format
+msgid "no address range available for DHCP request %s %s"
+msgstr "pas de plage d'adresse disponible pour la requete DHCP %s %s"
+
+#: rfc2131.c:221
+msgid "with subnet selector"
+msgstr "avec selecteur de sous-reseau"
+
+#: rfc2131.c:221
+msgid "via"
+msgstr "par l'intermediaire de"
+
+#: rfc2131.c:238 rfc2131.c:262
+msgid "disabled"
+msgstr "desactive"
+
+#: rfc2131.c:272 rfc2131.c:643
+msgid "address in use"
+msgstr "adresse deja utilisee"
+
+#: rfc2131.c:275
+msgid "no address configured"
+msgstr "pas d'adresse configuree"
+
+#: rfc2131.c:281 rfc2131.c:522
+msgid "no address available"
+msgstr "pas d'adresse disponible"
+
+#: rfc2131.c:285 rfc2131.c:646
+msgid "no leases left"
+msgstr "aucun baux laisses"
+
+#: rfc2131.c:481
+#, c-format
+msgid "disabling DHCP static address %s"
+msgstr "desactive l'adresse statique DHCP %s"
+
+#: rfc2131.c:499
+msgid "unknown lease"
+msgstr "bail inconnu"
+
+#: rfc2131.c:512 rfc2131.c:718
+msgid "ignored"
+msgstr "ignore"
+
+#: rfc2131.c:592
+msgid "wrong address"
+msgstr "mauvaise adresse"
+
+#: rfc2131.c:601
+msgid "lease not found"
+msgstr "bail non trouve"
+
+#: rfc2131.c:619
+msgid "wrong network"
+msgstr "mauvais reseau"
+
+#: rfc2131.c:627
+msgid "address not available"
+msgstr "adresse non disponible"
+
+#: rfc2131.c:636
+msgid "static lease available"
+msgstr "bail statique disponible"
+
+#: rfc2131.c:640
+msgid "address reserved"
+msgstr "adresse reservee"
+
+#: rfc2131.c:837
+#, c-format
+msgid "cannot send DHCP option %d: no space left in packet"
+msgstr ""
+
+#: rfc2131.c:1132
+#, c-format
+msgid "More than one vendor class matches, using %s"
+msgstr "Plus d'une seule classe de fournisseur correspond, on utilise %s"
+
+#: netlink.c:37
+#, c-format
+msgid "cannot bind netlink socket: %s"
+msgstr "ne peux lier une socket netlink: %s"
+
+#: dbus.c:112
+msgid "attempt to set an IPv6 server address via DBus - no IPv6 support"
+msgstr ""
+"tentative de lier une adresse serveur IPV6 via DBus - pas de support IPV6"
+
+#: dbus.c:237
+msgid "setting upstream servers from DBus"
+msgstr "configuration des serveurs amonts a partir de DBus"
+
+#: dbus.c:273
+msgid "could not register a DBus message handler"
+msgstr "ne peut enregistrer une routine de traitement des messages DBus"
diff --git a/po/id.po b/po/id.po
new file mode 100644
index 0000000..0346c9b
--- /dev/null
+++ b/po/id.po
@@ -0,0 +1,1046 @@
+# Indonesian translations for dnsmasq package.
+# This file is put in the public domain.
+# Salman AS <sas@salman.or.id>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: dnsmasq 2.24\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-11-22 20:10+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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ASCII\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+# OK
+#: cache.c:565
+#, c-format
+msgid "failed to load names from %s: %m"
+msgstr "gagal memuat nama-nama dari %s: %m"
+
+# OK
+#: cache.c:601 dhcp.c:722
+#, fuzzy, c-format
+msgid "bad address at %s line %d"
+msgstr "kesalahan nama pada %s baris %d"
+
+# OK
+#: cache.c:628 dhcp.c:736
+#, c-format
+msgid "bad name at %s line %d"
+msgstr "kesalahan nama pada %s baris %d"
+
+# OK
+#: cache.c:634 dhcp.c:787
+#, c-format
+msgid "read %s - %d addresses"
+msgstr "membaca %s - %d alamat"
+
+# OK
+#: cache.c:670
+msgid "cleared cache"
+msgstr "cache telah dihapus"
+
+# OK
+#: cache.c:723
+#, c-format
+msgid ""
+"not giving name %s to the DHCP lease of %s because the name exists in %s "
+"with address %s"
+msgstr ""
+"tidak memberikan nama %s kepada lease DHCP %s karena nama telah ada dalam %"
+"sdengan alamat %s"
+
+# OK
+#: cache.c:767
+#, c-format
+msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
+msgstr ""
+"ukuran cache %d, %d/%d penyisipan cache menimpa cache yang belum kadaluwarsa"
+
+# OK
+#: util.c:149 option.c:1284
+msgid "could not get memory"
+msgstr "tidak bisa mendapatkan memory"
+
+# OK
+#: util.c:172
+#, c-format
+msgid "%s at line %d of %%s"
+msgstr "%s pada baris %d dari %%s"
+
+# OK
+#: util.c:179
+msgid "FAILED to start up"
+msgstr "GAGAL untuk memulai"
+
+# OK
+#: util.c:305
+#, c-format
+msgid "infinite"
+msgstr "tak terbatas"
+
+# OK
+#: option.c:124
+msgid "Specify local address(es) to listen on."
+msgstr "Tentukan alamat lokal untuk mendengarkan."
+
+# OK
+#: option.c:125
+msgid "Return ipaddr for all hosts in specified domains."
+msgstr "Menghasilkan ipaddr untuk semua host dalam domain yang dipilih."
+
+# OK
+#: option.c:126
+msgid "Fake reverse lookups for RFC1918 private address ranges."
+msgstr "Fake pencarian balik untuk alamat private sesuai dengan RFC1918."
+
+# OK
+#: option.c:127
+msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
+msgstr "Perlakukan ipaddr sebagai NXDOMAIN (mengalahkan wildcard Verisign)."
+
+# OK
+#: option.c:128
+#, 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:129
+#, c-format
+msgid "Specify configuration file (defaults to %s)."
+msgstr "Tentukan file konfigurasi (default %s)."
+
+# OK
+#: option.c:130
+msgid "Do NOT fork into the background: run in debug mode."
+msgstr "JANGAN berjalan di background: berjalan dalam modus debug."
+
+# OK
+#: option.c:131
+msgid "Do NOT forward queries with no domain part."
+msgstr "JANGAN teruskan permintaan tanpa bagian domain."
+
+# OK
+#: option.c:132
+msgid "Return self-pointing MX records for local hosts."
+msgstr "Mengembalikan record MX untuk diri sendiri host-host lokal."
+
+# OK
+#: option.c:133
+msgid "Expand simple names in /etc/hosts with domain-suffix."
+msgstr "Melengkapi nama-nama di /etc/hosts dengan akhiran domain."
+
+# OK
+#: option.c:134
+msgid "Don't forward spurious DNS requests from Windows hosts."
+msgstr "Jangan meneruskan permintaan DNS spurious dari host-host Windows."
+
+# OK
+#: option.c:135
+msgid "Enable DHCP in the range given with lease duration."
+msgstr "Bolehkan DHCP dalam jangkauan yang diberikan dengan durasi lease."
+
+# OK
+#: option.c:136
+#, c-format
+msgid "Change to this group after startup (defaults to %s)."
+msgstr "Ubah ke group ini setelah mulai (default %s)."
+
+# OK
+#: option.c:137
+msgid "Set address or hostname for a specified machine."
+msgstr "Setel alamat atau nama host untuk mesin yang disebutkan."
+
+# OK
+#: option.c:138
+#, c-format
+msgid "Do NOT load %s file."
+msgstr "JANGAN muat file %s."
+
+# OK
+#: option.c:139
+#, 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:140
+msgid "Specify interface(s) to listen on."
+msgstr "Sebutkan antarmuka untuk mendengarkan."
+
+# OK
+#: option.c:141
+msgid "Specify interface(s) NOT to listen on."
+msgstr "Sebutkan antarmuka untuk TIDAK mendengarkan."
+
+# OK
+#: option.c:142
+msgid "Map DHCP user class to option set."
+msgstr "Petakan kelas user DHCP ke setelan yang dipilih."
+
+# OK
+#: option.c:143
+msgid "Don't do DHCP for hosts in option set."
+msgstr "Jangan menggunakan DHCP untuk host-host yang dipilih."
+
+# OK
+#: option.c:144
+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:145
+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:146
+#, c-format
+msgid "Specify where to store DHCP leases (defaults to %s)."
+msgstr "Sebutkan lokasi untuk menyimpan lease DHCP (default %s)."
+
+# OK
+#: option.c:147
+msgid "Return MX records for local hosts."
+msgstr "Kembalikan rekord MX untuk host-host lokal."
+
+# OK
+#: option.c:148
+msgid "Specify an MX record."
+msgstr "Sebutkan sebuah rekord MX."
+
+# OK
+#: option.c:149
+msgid "Specify BOOTP options to DHCP server."
+msgstr "Sebutkan pilihan-pilihan BOOTP untuk DHCP server."
+
+#: option.c:150
+#, c-format
+msgid "Do NOT poll %s file, reload only on SIGHUP."
+msgstr "Jangan kumpulkan file %s, muat kembali saat SIGHUP."
+
+# OK
+#: option.c:151
+msgid "Do NOT cache failed search results."
+msgstr "JANGAN menyimpan hasil pencarian yang gagal."
+
+# OK
+#: option.c:152
+#, 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:153
+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:154
+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:155
+#, 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:156
+msgid "Log queries."
+msgstr "Permintaan log."
+
+# OK
+#: option.c:157
+msgid "Force the originating port for upstream queries."
+msgstr "Paksa port asal untuk permintaan ke atas."
+
+# OK
+#: option.c:158
+msgid "Do NOT read resolv.conf."
+msgstr "JANGAN baca resolv.conf."
+
+# OK
+#: option.c:159
+#, c-format
+msgid "Specify path to resolv.conf (defaults to %s)."
+msgstr "Sebutkan path ke resolv.conf (default %s)."
+
+# OK
+#: option.c:160
+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:161
+msgid "Never forward queries to specified domains."
+msgstr "JANGAN pernah meneruskan permintaan ke domain yang disebutkan."
+
+# OK
+#: option.c:162
+msgid "Specify the domain to be assigned in DHCP leases."
+msgstr "Sebutkan domain yang digunakan dalam lease DHCP."
+
+# OK
+#: option.c:163
+msgid "Specify default target in an MX record."
+msgstr "Sebutkan tujuan default dalam rekord MX."
+
+# OK
+#: option.c:164
+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:165
+#, c-format
+msgid "Change to this user after startup. (defaults to %s)."
+msgstr "Ubah ke user ini setelah mulai. (default %s)."
+
+# OK
+#: option.c:166
+msgid "Map DHCP vendor class to option set."
+msgstr "Memetakan kelas vendor DHCP ke daftar pilihan."
+
+# OK
+#: option.c:167
+msgid "Display dnsmasq version and copyright information."
+msgstr "Menampilkan versi dan informasi hak cipta dnsmasq."
+
+# OK
+#: option.c:168
+msgid "Translate IPv4 addresses from upstream servers."
+msgstr "Terjemahkan alamat-alamat IPv4 dari server-server di atas."
+
+# OK
+#: option.c:169
+msgid "Specify a SRV record."
+msgstr "Sebutkan rekord SRV."
+
+# OK
+#: option.c:170
+msgid "Display this message."
+msgstr "Menampilkan pesan ini."
+
+# OK
+#: option.c:171
+#, c-format
+msgid "Specify path of PID file. (defaults to %s)."
+msgstr "Sebutkan path file PID. (default %s)."
+
+# OK
+#: option.c:172
+#, c-format
+msgid "Specify maximum number of DHCP leases (defaults to %s)."
+msgstr "Sebutkan jumlah maksimum lease DHCP (default %s)."
+
+# OK
+#: option.c:173
+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:174
+msgid "Specify TXT DNS record."
+msgstr "Sebutkan rekord TXT DNS."
+
+# OK
+#: option.c:175
+msgid "Bind only to interfaces in use."
+msgstr "Hanya kaitkan ke antarmuka yang sedang digunakan saja."
+
+# OK
+#: option.c:176
+#, c-format
+msgid "Read DHCP static host information from %s."
+msgstr "Baca informasi statik host DHCP dari %s."
+
+# OK
+#: option.c:177
+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:178
+msgid "Do not provide DHCP on this interface, only provide DNS."
+msgstr "JANGAN menyediakan DHCP pada antarmuka ini, hanya menyediakan DNS."
+
+# OK
+#: option.c:179
+msgid "Enable dynamic address allocation for bootp."
+msgstr "Mungkinkan alokasi alamat dinamis untuk bootp."
+
+# OK
+#: option.c:394
+msgid "missing \""
+msgstr "kurang \""
+
+# OK
+#: option.c:423
+msgid "bad option"
+msgstr "pilihan salah"
+
+# OK
+#: option.c:440
+#, c-format
+msgid "cannot read %s: %s"
+msgstr "tidak bisa membaca %s: %s"
+
+# OK
+#: option.c:446
+#, c-format
+msgid ""
+"Usage: dnsmasq [options]\n"
+"\n"
+msgstr ""
+"Penggunaan: dnsmasq [pilihan]\n"
+"\n"
+
+# OK
+#: option.c:448
+#, c-format
+msgid "Use short options only on the command line.\n"
+msgstr "Gunakan pilihan pendek saja pada perintah baris.\n"
+
+# OK
+#: option.c:450
+#, c-format
+msgid "Valid options are :\n"
+msgstr "Pilihan yang boleh adalah:\n"
+
+# OK
+#: option.c:475
+#, c-format
+msgid "Dnsmasq version %s %s\n"
+msgstr "Dnsmasq versi %s %s\n"
+
+# OK
+#: option.c:476
+#, c-format
+msgid ""
+"Compile time options %s\n"
+"\n"
+msgstr ""
+"Pilihan-pilihan saat kompilasi %s\n"
+"\n"
+
+# OK
+#: option.c:477
+#, c-format
+msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
+msgstr "Perangkat lunak ini tersedia TANPA JAMINAN SEDIKITPUN.\n"
+
+# OK
+#: option.c:478
+#, c-format
+msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
+msgstr ""
+"Dnsdmasq adalah perangkat lunak bebas, dan Anda dipersilahkan untuk "
+"membagikannya\n"
+
+# OK
+#: option.c:479
+#, 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"
+
+# OK
+#: option.c:489
+msgid "extraneous parameter"
+msgstr "parameter berlebihan"
+
+# OK
+#: option.c:497
+msgid "missing parameter"
+msgstr "parameter kurang"
+
+# OK
+#: option.c:514
+msgid "nested includes not allowed"
+msgstr "includes bersarang tidak diijinkan"
+
+# OK
+#: option.c:574
+msgid "bad MX preference"
+msgstr "kesukaan MX salah"
+
+# OK
+#: option.c:583
+msgid "bad MX name"
+msgstr "nama MX salah"
+
+# OK
+#: option.c:601
+msgid "bad MX target"
+msgstr "target MX salah"
+
+# OK
+#: option.c:803 option.c:814
+msgid "bad port"
+msgstr "port salah"
+
+# OK
+#: option.c:954
+msgid "bad dhcp-range"
+msgstr "dhcp-range salah"
+
+# OK
+#: option.c:1014
+msgid "inconsistent DHCP range"
+msgstr "jangkauan DHCP tidak konsisten"
+
+# OK
+#: option.c:1201
+msgid "bad dhcp-host"
+msgstr "dhcp-host salah"
+
+# OK
+#: option.c:1261
+msgid "bad dhcp-option"
+msgstr "dhcp-option salah"
+
+# OK
+#: option.c:1279
+msgid "bad domain in dhcp-option"
+msgstr "domain dalam dhcp-option salah"
+
+# OK
+#: option.c:1425
+msgid "dhcp-option too long"
+msgstr "dhcp-option terlalu panjang"
+
+# OK
+#: option.c:1605
+msgid "bad TXT record"
+msgstr "rekord TXT salah"
+
+# OK
+#: option.c:1637
+msgid "TXT record string too long"
+msgstr "string rekord TXT terlalu panjang"
+
+# OK
+#: option.c:1676
+msgid "bad SRV record"
+msgstr "rekord SRV salah"
+
+# OK
+#: option.c:1689
+msgid "bad SRV target"
+msgstr "target SRV salah"
+
+# OK
+#: option.c:1701
+msgid "invalid port number"
+msgstr "nomor port tidak benar"
+
+# OK
+#: option.c:1712
+msgid "invalid priority"
+msgstr "prioritas tidak benar"
+
+# OK
+#: option.c:1723
+msgid "invalid weight"
+msgstr "weight tidak benar"
+
+# OK
+#: option.c:1748
+msgid "error"
+msgstr "kesalahan"
+
+# OK
+#: option.c:1750
+#, c-format
+msgid "bad command line options: %s."
+msgstr "pilihan baris perintah salah: %s."
+
+# OK
+#: option.c:1794
+#, c-format
+msgid "cannot get host-name: %s"
+msgstr "tidak bisa mendapatkan host-name: %s"
+
+# OK
+#: option.c:1823
+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:1830
+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:1833 network.c:591
+#, c-format
+msgid "failed to read %s: %m"
+msgstr "gagal membaca %s: %m"
+
+# OK
+#: option.c:1851
+#, c-format
+msgid "no search directive found in %s"
+msgstr "tidak ditemukan direktif search di %s"
+
+# OK
+#: forward.c:378
+#, c-format
+msgid "nameserver %s refused to do a recursive query"
+msgstr "nameserver %s menolak melakukan resolusi rekursif"
+
+# OK
+#: forward.c:899
+msgid "forwarding table overflow: check for server loops."
+msgstr "meneruskan tabel overflow: memeriksa apakah terjadi loop server."
+
+# OK
+#: isc.c:71 dnsmasq.c:471
+#, c-format
+msgid "failed to access %s: %m"
+msgstr "gagal mengakses %s: %m"
+
+# OK
+#: isc.c:87
+#, c-format
+msgid "failed to load %s: %m"
+msgstr "gagal memuat %S: %m"
+
+# OK
+#: isc.c:91 network.c:595
+#, c-format
+msgid "reading %s"
+msgstr "membaca %s"
+
+# OK
+#: isc.c:113
+#, c-format
+msgid "bad name in %s"
+msgstr "kesalahan nama di %s"
+
+# OK
+#: isc.c:175
+#, c-format
+msgid "Ignoring DHCP lease for %s because it has an illegal domain part"
+msgstr ""
+"Mengabaikan lease DHCP untuk %s sebab terdapat bagian domain yang tidak sah"
+
+# OK
+#: network.c:418
+#, c-format
+msgid "failed to create listening socket: %s"
+msgstr "gagal membuat socket: %s "
+
+# OK
+#: network.c:425
+#, c-format
+msgid "failed to set IPV6 options on listening socket: %s"
+msgstr "gagal menyetel IPV6 pada socket: %s"
+
+#: network.c:444
+#, c-format
+msgid "failed to bind listening socket for %s: %s"
+msgstr "gagal mem-bind socket untuk mendengarkan %s: %s"
+
+# OK
+#: network.c:451
+#, c-format
+msgid "failed to listen on socket: %s"
+msgstr "gagal mendengarkan di socket: %s"
+
+# OK
+#: network.c:521
+#, c-format
+msgid "ignoring nameserver %s - local interface"
+msgstr "mengabaikan nameserver %s - antarmuka lokal"
+
+# OK
+#: network.c:530
+#, 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:544
+msgid "domain"
+msgstr "domain"
+
+# OK
+#: network.c:546
+msgid "unqualified"
+msgstr "tidak memenuhi syarat"
+
+# OK
+#: network.c:546
+msgid "domains"
+msgstr "domain-domain"
+
+# OK
+#: network.c:549
+#, c-format
+msgid "using local addresses only for %s %s"
+msgstr "menggunakan alamat lokal saja untuk %s %s"
+
+# OK
+#: network.c:551
+#, c-format
+msgid "using nameserver %s#%d for %s %s"
+msgstr "menggunakan nameserver %s#%d untuk %s %s"
+
+# OK
+#: network.c:554
+#, c-format
+msgid "using nameserver %s#%d"
+msgstr "menggunakan nameserver %s#%d"
+
+# OK
+#: dnsmasq.c:112
+msgid ""
+"ISC dhcpd integration not available: set HAVE_ISC_READER in src/config.h"
+msgstr ""
+"Integrasi dengan dhcpd ISC tidak tersedia: atur HAVE_ISC_READER dalam src/"
+"config.h"
+
+# OK
+#: dnsmasq.c:116
+#, c-format
+msgid "failed to find list of interfaces: %s"
+msgstr "gagal mendapatkan daftar antarmuka: %s"
+
+# OK
+#: dnsmasq.c:131
+#, c-format
+msgid "unknown interface %s"
+msgstr "antarmuka tidak dikenal %s"
+
+# OK
+#: dnsmasq.c:137
+#, c-format
+msgid "no interface with address %s"
+msgstr "tidak ada antarmuka dengan alamat %s"
+
+# OK
+#: dnsmasq.c:146
+#, c-format
+msgid "cannot open %s:%s"
+msgstr "tidak bisa membuka %s:%s"
+
+# OK
+#: dnsmasq.c:160
+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:173 dnsmasq.c:504
+#, c-format
+msgid "DBus error: %s"
+msgstr "DBus error: %s"
+
+# OK
+#: dnsmasq.c:177
+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:290
+#, c-format
+msgid "started, version %s cachesize %d"
+msgstr "dimulai, versi %s ukuran cache %d"
+
+# OK
+#: dnsmasq.c:292
+#, c-format
+msgid "started, version %s cache disabled"
+msgstr "dimulai, cache versi %s di disable"
+
+# OK
+#: dnsmasq.c:294
+#, c-format
+msgid "compile time options: %s"
+msgstr "pilihan-pilihan saat kompilasi: %s"
+
+# OK
+#: dnsmasq.c:300
+msgid "DBus support enabled: connected to system bus"
+msgstr "dukungan DBus dimungkinkan: terkoneksi pada bus sistem"
+
+# OK
+#: dnsmasq.c:302
+msgid "DBus support enabled: bus connection pending"
+msgstr "dukungan DBus dimungkinkan: koneksi bus ditunda"
+
+# OK
+#: dnsmasq.c:307
+msgid "setting --bind-interfaces option because of OS limitations"
+msgstr "setelan opsi --bind-interfaces disebabkan keterbatasan OS"
+
+# OK
+#: dnsmasq.c:312
+#, c-format
+msgid "warning: interface %s does not currently exist"
+msgstr "peringatan: antarmuka %s tidak ada"
+
+# OK
+#: dnsmasq.c:329
+#, 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:330
+#, c-format
+msgid "DHCP, IP range %s -- %s, lease time %s"
+msgstr "DHCP, jangkaun IP %s -- %s, waktu lease %s"
+
+# OK
+#: dnsmasq.c:341
+#, c-format
+msgid "DHCP, %s will be written every %s"
+msgstr "DHCP, %s akan ditulis setiap %s"
+
+# OK
+#: dnsmasq.c:346
+msgid "running as root"
+msgstr "berjalan menggunakan root"
+
+# OK
+#: dnsmasq.c:506
+msgid "connected to system DBus"
+msgstr "terhubung ke sistem DBus"
+
+#: dnsmasq.c:517
+msgid "exiting on receipt of SIGTERM"
+msgstr "keluar karena menerima SIGTERM"
+
+# OK
+#: dhcp.c:25
+#, c-format
+msgid "cannot create DHCP socket : %s"
+msgstr "tidak bisa membuat socket DHCP: %s"
+
+# OK
+#: dhcp.c:35
+#, c-format
+msgid "failed to set options on DHCP socket: %s"
+msgstr "gagal menyetel opsi pada socket DHCP: %s"
+
+# OK
+#: dhcp.c:42
+#, c-format
+msgid "failed to set SO_REUSEADDR on DHCP socket: %s"
+msgstr "gagal menyetel SO_REUSEADDR pada socket DHCP: %s"
+
+# OK
+#: dhcp.c:52
+#, c-format
+msgid "failed to bind DHCP server socket: %s"
+msgstr "gagal mem-bind socket server DHCP: %s"
+
+# OK
+#: dhcp.c:61
+#, c-format
+msgid "cannot create ICMP raw socket: %s."
+msgstr "tidak dapat membuat socket ICMP raw: %s"
+
+# OK
+#: dhcp.c:75
+#, c-format
+msgid "cannot create DHCP BPF socket: %s"
+msgstr "tidak dapat membuat socket DHCP BPF: %s"
+
+# OK
+#: dhcp.c:86
+#, c-format
+msgid ""
+"cannot create DHCP packet socket: %s. Is CONFIG_PACKET enabled in your "
+"kernel?"
+msgstr ""
+"tidak dapat membuat socket packet DHCP: %s. Apakah CONFIG_PACKET "
+"dimungkinkan pada kernel?"
+
+# OK
+#: dhcp.c:98
+#, c-format
+msgid "duplicate IP address %s in dhcp-config directive."
+msgstr "alamat IP kembar %s dalam direktif dhcp-config"
+
+# OK
+#: dhcp.c:384
+#, 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:690
+#, c-format
+msgid "failed to read %s:%m"
+msgstr "gagal membaca %s:%m"
+
+# OK
+#: dhcp.c:709
+#, fuzzy, c-format
+msgid "bad line at %s line %d"
+msgstr "kesalahan nama pada %s baris %d"
+
+# OK
+#: dhcp.c:810
+#, 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:846
+#, c-format
+msgid "Ignoring DHCP host name %s because it has an illegal domain part"
+msgstr ""
+"Mengabaikan nama host DHCP %s sebab memiliki bagian domain yang tidak sah"
+
+# OK
+#: lease.c:39
+#, c-format
+msgid "cannot open or create leases file: %s"
+msgstr "tidak dapat membuka atau membuat file lease: %s"
+
+# OK
+#: lease.c:77
+msgid "too many stored leases"
+msgstr "terlalu banyak lease yang disimpan"
+
+# OK
+#: rfc2131.c:171
+#, c-format
+msgid "DHCP request for unsupported hardware type (%d) recieved on %s"
+msgstr ""
+"permintaan DHCP untuk tipe hardware yang tidak didukung (%d) diterima pada %s"
+
+# OK
+#: rfc2131.c:220
+#, c-format
+msgid "no address range available for DHCP request %s %s"
+msgstr "tidak ada alamat yang bisa dipakai untuk permintaan DHCP %s %s"
+
+# OK
+#: rfc2131.c:221
+msgid "with subnet selector"
+msgstr "dengan pemilih subnet"
+
+# OK
+#: rfc2131.c:221
+msgid "via"
+msgstr "lewat"
+
+# OK
+#: rfc2131.c:238 rfc2131.c:262
+msgid "disabled"
+msgstr "di disable"
+
+# OK
+#: rfc2131.c:272 rfc2131.c:643
+msgid "address in use"
+msgstr "alamat telah digunakan"
+
+# OK
+#: rfc2131.c:275
+msgid "no address configured"
+msgstr "tak ada alamat yang disetel"
+
+# OK
+#: rfc2131.c:281 rfc2131.c:522
+msgid "no address available"
+msgstr "tak ada alamat yang tersedia"
+
+# OK
+#: rfc2131.c:285 rfc2131.c:646
+msgid "no leases left"
+msgstr "tak ada lease yang tersisa"
+
+# OK
+#: rfc2131.c:481
+#, c-format
+msgid "disabling DHCP static address %s"
+msgstr "men-disable alamat statik DHCP %s"
+
+# OK
+#: rfc2131.c:499
+msgid "unknown lease"
+msgstr "lease tidak diketahui"
+
+# OK
+#: rfc2131.c:512 rfc2131.c:718
+msgid "ignored"
+msgstr "diabaikan"
+
+# OK
+#: rfc2131.c:592
+msgid "wrong address"
+msgstr "alamat salah"
+
+# OK
+#: rfc2131.c:601
+msgid "lease not found"
+msgstr "lease tak ditemukan"
+
+# OK
+#: rfc2131.c:619
+msgid "wrong network"
+msgstr "jaringan yang salah"
+
+# OK
+#: rfc2131.c:627
+msgid "address not available"
+msgstr "alamat tak tersedia"
+
+# OK
+#: rfc2131.c:636
+msgid "static lease available"
+msgstr "lease statik tak tersedia"
+
+# OK
+#: rfc2131.c:640
+msgid "address reserved"
+msgstr "alamat telah dipesan"
+
+#: rfc2131.c:837
+#, c-format
+msgid "cannot send DHCP option %d: no space left in packet"
+msgstr ""
+
+# OK
+#: rfc2131.c:1132
+#, c-format
+msgid "More than one vendor class matches, using %s"
+msgstr "Lebih dari satu kelas vendor yang sesuai, menggunakan %s"
+
+# OK
+#: netlink.c:37
+#, c-format
+msgid "cannot bind netlink socket: %s"
+msgstr "tidak bisa mem-bind netlink socket: %s"
+
+# OK
+#: dbus.c:112
+msgid "attempt to set an IPv6 server address via DBus - no IPv6 support"
+msgstr ""
+"mencoba menyetel sebuah alamat IPv6 server lewat DBus - tidak ada dukungan "
+"untuk IPv6"
+
+# OK
+#: dbus.c:237
+msgid "setting upstream servers from DBus"
+msgstr "menyetel server-server di atas dengan DBus"
+
+# OK
+#: dbus.c:273
+msgid "could not register a DBus message handler"
+msgstr "tidak bisa mendaftar sebuah DBus message handler"
diff --git a/po/pl.po b/po/pl.po
new file mode 100644
index 0000000..d99ee48
--- /dev/null
+++ b/po/pl.po
@@ -0,0 +1,870 @@
+# Polish translations for dnsmasq package.
+# This file is put in the public domain.
+# Tomasz Sochañski <nerdhero@gmail.com>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: dnsmasq 2.24\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-11-22 20:10+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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2);\n"
+
+#: cache.c:565
+#, c-format
+msgid "failed to load names from %s: %m"
+msgstr "b³±d ³adowania nazw z %s: %m"
+
+#: cache.c:601 dhcp.c:722
+#, fuzzy, c-format
+msgid "bad address at %s line %d"
+msgstr "b³êdna nazwa w %s, linia %d"
+
+#: cache.c:628 dhcp.c:736
+#, c-format
+msgid "bad name at %s line %d"
+msgstr "b³êdna nazwa w %s, linia %d"
+
+#: cache.c:634 dhcp.c:787
+#, c-format
+msgid "read %s - %d addresses"
+msgstr "przeczytano %s - %d adresów"
+
+#: cache.c:670
+msgid "cleared cache"
+msgstr "wyczyszczono cache"
+
+#: cache.c:723
+#, c-format
+msgid ""
+"not giving name %s to the DHCP lease of %s because the name exists in %s "
+"with address %s"
+msgstr ""
+"nazwa %s nie zosta³a nadana dzier¿awie DHCP %s, poniewa¿ nazwa istnieje w %s "
+"i ma adres %s"
+
+#: cache.c:767
+#, c-format
+msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
+msgstr ""
+"wielko¶æ cache %d, %d/%d wpisów cache u¿yto ponownie z niewygas³ych wpisów"
+
+#: util.c:149 option.c:1284
+msgid "could not get memory"
+msgstr "nie mo¿na pobraæ pamiêci"
+
+#: util.c:172
+#, c-format
+msgid "%s at line %d of %%s"
+msgstr "%s w linii %d z %%s"
+
+#: util.c:179
+msgid "FAILED to start up"
+msgstr "B£¡D uruchomienia"
+
+#: util.c:305
+#, c-format
+msgid "infinite"
+msgstr "nieskoñczona"
+
+#: option.c:124
+msgid "Specify local address(es) to listen on."
+msgstr "Adres(y) lokalne do nas³uchiwania."
+
+#: option.c:125
+msgid "Return ipaddr for all hosts in specified domains."
+msgstr "Zwracanie adresu IP dla wszystkich hostów w podanych domenach."
+
+#: option.c:126
+msgid "Fake reverse lookups for RFC1918 private address ranges."
+msgstr "Symulacja reverse lookups dla adresów prywatnych opisanych w RFC1918."
+
+#: option.c:127
+msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
+msgstr "Adres IP traktowany jak NXDOMAIN"
+
+#: option.c:128
+#, 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:129
+#, c-format
+msgid "Specify configuration file (defaults to %s)."
+msgstr "¦cie¿ka do pliku konfiguracyjnego (domy¶lna: %s)"
+
+#: option.c:130
+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:131
+msgid "Do NOT forward queries with no domain part."
+msgstr "Wy³±czenie przekazywania zapytañ bez czê¶ci domenowej."
+
+#: option.c:132
+msgid "Return self-pointing MX records for local hosts."
+msgstr "Zwracanie samowskazuj±cego rekordu MX dla lokalnych hostów."
+
+#: option.c:133
+msgid "Expand simple names in /etc/hosts with domain-suffix."
+msgstr "Rozwijanie prostych nazw z /etc/hosts przyrostkiem domenowym."
+
+#: option.c:134
+msgid "Don't forward spurious DNS requests from Windows hosts."
+msgstr "Wy³±czenie przekazywania pozornych zapytañ DNS z komputerów Windows"
+
+#: option.c:135
+msgid "Enable DHCP in the range given with lease duration."
+msgstr "Enable DHCP w zakresie okre¶lonym czasem dzier¿awy."
+
+#: option.c:136
+#, 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:137
+msgid "Set address or hostname for a specified machine."
+msgstr "Ustawienie adresu lub nazwy hosta dla okre¶lonej maszyny."
+
+#: option.c:138
+#, c-format
+msgid "Do NOT load %s file."
+msgstr "Ignorowanie pliku %s."
+
+#: option.c:139
+#, c-format
+msgid "Specify a hosts file to be read in addition to %s."
+msgstr "Dodatkowy plik hostów poza %s."
+
+#: option.c:140
+msgid "Specify interface(s) to listen on."
+msgstr "Interfejs(y) do nas³uchiwania."
+
+#: option.c:141
+msgid "Specify interface(s) NOT to listen on."
+msgstr "Interfejs(y), na których nie nas³uchiwaæ."
+
+#: option.c:142
+msgid "Map DHCP user class to option set."
+msgstr "W³±czenie mapowania klasy u¿ytkownika DHCP do option set."
+
+#: option.c:143
+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:144
+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:145
+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:146
+#, 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:147
+msgid "Return MX records for local hosts."
+msgstr "W³±czenie zwracania rekord MX dla hostów lokalnych."
+
+#: option.c:148
+msgid "Specify an MX record."
+msgstr "Specyfikacja rekordu MX."
+
+#: option.c:149
+msgid "Specify BOOTP options to DHCP server."
+msgstr "Okre¶lenie opcji BOOTP serwera DHCP."
+
+#: option.c:150
+#, 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:151
+msgid "Do NOT cache failed search results."
+msgstr ""
+"Wy³±czenie zapisywania w pamiêci podrêcznej nieudanych wyników wyszukiwania."
+
+#: option.c:152
+#, 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:153
+msgid "Set extra options to be set to DHCP clients."
+msgstr "Dodatkowe opcje ustawieñ dla klientów DHCP."
+
+#: option.c:154
+msgid "Specify port to listen for DNS requests on (defaults to 53)."
+msgstr "Port nas³uchiwania zapytañ DNS (domy¶lnie: 53)."
+
+#: option.c:155
+#, 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:156
+msgid "Log queries."
+msgstr "Zapytania zapisywane w pliku log."
+
+#: option.c:157
+msgid "Force the originating port for upstream queries."
+msgstr ""
+
+#: option.c:158
+msgid "Do NOT read resolv.conf."
+msgstr "Wy³±czenie czytania pliku resolv.conf"
+
+#: option.c:159
+#, c-format
+msgid "Specify path to resolv.conf (defaults to %s)."
+msgstr "Podaj ¶cie¿kê do pliku resolv.conf (domy¶lnie: %s)."
+
+#: option.c:160
+msgid "Specify address(es) of upstream servers with optional domains."
+msgstr ""
+
+#: option.c:161
+msgid "Never forward queries to specified domains."
+msgstr "Wy³±czenie przekazywania zapytañ do okre¶lonych domen."
+
+#: option.c:162
+msgid "Specify the domain to be assigned in DHCP leases."
+msgstr "Nazwa domeny, która bêdzie przypisana w dzier¿awach DHCP."
+
+#: option.c:163
+msgid "Specify default target in an MX record."
+msgstr "Okre¶lenie domy¶lnego celu w rekordzie MX."
+
+#: option.c:164
+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:165
+#, 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:166
+msgid "Map DHCP vendor class to option set."
+msgstr "Mapowanie nazwy dystrybutora DHCP do ustawieñ opcji."
+
+#: option.c:167
+msgid "Display dnsmasq version and copyright information."
+msgstr ""
+"W³±czenie pokazywania wersji dnsmasq i informacji o ochronie praw autorskich."
+
+#: option.c:168
+msgid "Translate IPv4 addresses from upstream servers."
+msgstr ""
+
+#: option.c:169
+msgid "Specify a SRV record."
+msgstr "Okre¶lenie rekordu SRV."
+
+#: option.c:170
+msgid "Display this message."
+msgstr "Wy¶wietlenie tych informacji."
+
+#: option.c:171
+#, c-format
+msgid "Specify path of PID file. (defaults to %s)."
+msgstr "Okre¶lenie ¶cie¿ki do pliku PID. (domy¶lnie: %s)."
+
+#: option.c:172
+#, c-format
+msgid "Specify maximum number of DHCP leases (defaults to %s)."
+msgstr "Maksymalna liczba dzier¿aw DHCP. (domy¶lnie: %s)."
+
+#: option.c:173
+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:174
+msgid "Specify TXT DNS record."
+msgstr "Rekord TXT DNS."
+
+#: option.c:175
+msgid "Bind only to interfaces in use."
+msgstr "W³±czenie nas³uchiwania tylko na u¿ywanych interfejsach."
+
+#: option.c:176
+#, c-format
+msgid "Read DHCP static host information from %s."
+msgstr "Statycznych informacji DHCP hosta z pliku %s."
+
+#: option.c:177
+msgid "Enable the DBus interface for setting upstream servers, etc."
+msgstr ""
+
+#: option.c:178
+msgid "Do not provide DHCP on this interface, only provide DNS."
+msgstr "Wy³±czenie DHCP na tym interfejsie, w³±czenie tylko DNS."
+
+#: option.c:179
+msgid "Enable dynamic address allocation for bootp."
+msgstr "W³±czenie automatycznej alokacji adresu dla BOOTP."
+
+#: option.c:394
+msgid "missing \""
+msgstr "brakuje \""
+
+#: option.c:423
+msgid "bad option"
+msgstr "nieprawid³owa opcja"
+
+#: option.c:440
+#, c-format
+msgid "cannot read %s: %s"
+msgstr "b³±d odczytu z %s: %s"
+
+#: option.c:446
+#, c-format
+msgid ""
+"Usage: dnsmasq [options]\n"
+"\n"
+msgstr ""
+"U¿ycie: dnsmasq [opcje]\n"
+"\n"
+
+#: option.c:448
+#, c-format
+msgid "Use short options only on the command line.\n"
+msgstr "Tylko krótkie opcje w linii komend.\n"
+
+#: option.c:450
+#, c-format
+msgid "Valid options are :\n"
+msgstr "Obs³ugiwane opcje:\n"
+
+#: option.c:475
+#, c-format
+msgid "Dnsmasq version %s %s\n"
+msgstr "Dnsmasq, wersja %s %s\n"
+
+#: option.c:476
+#, c-format
+msgid ""
+"Compile time options %s\n"
+"\n"
+msgstr ""
+"Wkompilowane opcje %s\n"
+"\n"
+
+#: option.c:477
+#, c-format
+msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
+msgstr "Oprogramowanie to nie zawiera ¿adnych gwarancji.\n"
+
+#: option.c:478
+#, 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:479
+#, 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:489
+msgid "extraneous parameter"
+msgstr "dodatkowy parametr"
+
+#: option.c:497
+msgid "missing parameter"
+msgstr "brak parametru"
+
+#: option.c:514
+msgid "nested includes not allowed"
+msgstr "zagnie¿d¿one do³±czanie plików jest niedozwolone"
+
+#: option.c:574
+msgid "bad MX preference"
+msgstr ""
+
+#: option.c:583
+msgid "bad MX name"
+msgstr "b³êdna nazwa MX"
+
+#: option.c:601
+msgid "bad MX target"
+msgstr "b³êdny cel MX"
+
+#: option.c:803 option.c:814
+msgid "bad port"
+msgstr "nieprawid³owy port"
+
+#: option.c:954
+msgid "bad dhcp-range"
+msgstr "nieprawid³owy zakres dhcp-range"
+
+#: option.c:1014
+msgid "inconsistent DHCP range"
+msgstr "niespójny zakres DHCP"
+
+#: option.c:1201
+msgid "bad dhcp-host"
+msgstr "b³±d w dhcp-host"
+
+#: option.c:1261
+msgid "bad dhcp-option"
+msgstr "b³±d w dhcp-option"
+
+#: option.c:1279
+msgid "bad domain in dhcp-option"
+msgstr "nieprawid³owa nazwa domeny w dhcp-option"
+
+#: option.c:1425
+msgid "dhcp-option too long"
+msgstr "zbyt d³uga nazwa w dhcp-option"
+
+#: option.c:1605
+msgid "bad TXT record"
+msgstr "nieprawid³owy rekord TX"
+
+#: option.c:1637
+msgid "TXT record string too long"
+msgstr "zbyt d³ugi rekord TXT"
+
+#: option.c:1676
+msgid "bad SRV record"
+msgstr "b³±d w rekordzie SRV"
+
+#: option.c:1689
+msgid "bad SRV target"
+msgstr "nieprawid³owy cel SRV"
+
+#: option.c:1701
+msgid "invalid port number"
+msgstr "nieprawid³owy port"
+
+#: option.c:1712
+msgid "invalid priority"
+msgstr "nieprawid³owy priorytet"
+
+#: option.c:1723
+msgid "invalid weight"
+msgstr "nieprawid³owe znaczenie"
+
+#: option.c:1748
+msgid "error"
+msgstr "b³±d"
+
+#: option.c:1750
+#, c-format
+msgid "bad command line options: %s."
+msgstr "nieprawid³owa opcja linii komend: %s."
+
+#: option.c:1794
+#, c-format
+msgid "cannot get host-name: %s"
+msgstr "nie mo¿na pobraæ nazwy hosta: %s"
+
+#: option.c:1823
+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:1830
+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:1833 network.c:591
+#, c-format
+msgid "failed to read %s: %m"
+msgstr "b³±d w odczycie %s: %m"
+
+#: option.c:1851
+#, c-format
+msgid "no search directive found in %s"
+msgstr "brak wytycznych wyszukiwania w %s"
+
+#: forward.c:378
+#, c-format
+msgid "nameserver %s refused to do a recursive query"
+msgstr "serwer nazw %s odmawia wykonania zapytania rekursywnego"
+
+#: forward.c:899
+msgid "forwarding table overflow: check for server loops."
+msgstr ""
+"przekroczenie zakresu tablicy przekazywania: sprawd¼ zapêtlenie serwera."
+
+#: isc.c:71 dnsmasq.c:471
+#, c-format
+msgid "failed to access %s: %m"
+msgstr "b³±d w dostêpie do %s: %m"
+
+#: isc.c:87
+#, c-format
+msgid "failed to load %s: %m"
+msgstr "b³±d ³adowania %s: %m"
+
+#: isc.c:91 network.c:595
+#, c-format
+msgid "reading %s"
+msgstr "czytanie %s"
+
+#: isc.c:113
+#, c-format
+msgid "bad name in %s"
+msgstr "nieprawid³owa nazwa w %s"
+
+#: isc.c:175
+#, c-format
+msgid "Ignoring DHCP lease for %s because it has an illegal domain part"
+msgstr ""
+"Ignorujê dzier¿awy DHCP dla %s poniewa¿ zawieraj± nieprawid³ow± czê¶æ "
+"domenow±"
+
+#: network.c:418
+#, c-format
+msgid "failed to create listening socket: %s"
+msgstr "b³±d podczas tworzenia gniazda: %s"
+
+#: network.c:425
+#, 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:444
+#, 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:451
+#, c-format
+msgid "failed to listen on socket: %s"
+msgstr "b³±d w³±czenia nas³uchiwania gniazda: %s"
+
+#: network.c:521
+#, c-format
+msgid "ignoring nameserver %s - local interface"
+msgstr "ignorowanie serwera nazw %s - interfejs lokalny"
+
+#: network.c:530
+#, 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:544
+msgid "domain"
+msgstr "domena"
+
+#: network.c:546
+msgid "unqualified"
+msgstr "niekwalifikowany(a/e)"
+
+#: network.c:546
+msgid "domains"
+msgstr "domeny"
+
+#: network.c:549
+#, c-format
+msgid "using local addresses only for %s %s"
+msgstr "w³±czenie u¿ywania lokalnych adresów tylko dla %s %s"
+
+#: network.c:551
+#, c-format
+msgid "using nameserver %s#%d for %s %s"
+msgstr "u¿ywany serwer nazw: %s#%d dla %s %s"
+
+#: network.c:554
+#, c-format
+msgid "using nameserver %s#%d"
+msgstr "u¿ywany serwer nazw %s#%d"
+
+#: dnsmasq.c:112
+msgid ""
+"ISC dhcpd integration not available: set HAVE_ISC_READER in src/config.h"
+msgstr ""
+"Intergracja z ISC dhcpd nie jest dostêpna: ustaw HAVE_ISC_READER w src/"
+"config.h"
+
+#: dnsmasq.c:116
+#, c-format
+msgid "failed to find list of interfaces: %s"
+msgstr "b³±d w znalezieniu listy interfejsów sieciowych: %s"
+
+#: dnsmasq.c:131
+#, c-format
+msgid "unknown interface %s"
+msgstr "nieznany interfejs %s"
+
+#: dnsmasq.c:137
+#, c-format
+msgid "no interface with address %s"
+msgstr "brak interfejsu z adresem %s"
+
+#: dnsmasq.c:146
+#, c-format
+msgid "cannot open %s:%s"
+msgstr "nie mo¿na otworzyæ %s:%s"
+
+#: dnsmasq.c:160
+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:173 dnsmasq.c:504
+#, c-format
+msgid "DBus error: %s"
+msgstr "b³±d DBus: %s"
+
+#: dnsmasq.c:177
+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:290
+#, c-format
+msgid "started, version %s cachesize %d"
+msgstr "uruchomiony, wersja %s wielko¶æ cache %d"
+
+#: dnsmasq.c:292
+#, c-format
+msgid "started, version %s cache disabled"
+msgstr "uruchomiony, wersja %s cache wy³±czony"
+
+#: dnsmasq.c:294
+#, c-format
+msgid "compile time options: %s"
+msgstr "opcje kompilacji: %s"
+
+#: dnsmasq.c:300
+msgid "DBus support enabled: connected to system bus"
+msgstr "obs³uga DBus w³±czona: pod³±czono do szyny systemowej"
+
+#: dnsmasq.c:302
+msgid "DBus support enabled: bus connection pending"
+msgstr "obs³uga DBus w³±czona: pod³±czanie do szyny systemowej w toku"
+
+#: dnsmasq.c:307
+msgid "setting --bind-interfaces option because of OS limitations"
+msgstr "ustawiam opcjê --bind-interfaces z powodu limitów systemu operacyjnego"
+
+#: dnsmasq.c:312
+#, c-format
+msgid "warning: interface %s does not currently exist"
+msgstr "ostrze¿enie: interfejs %s obecnie nie istnieje"
+
+#: dnsmasq.c:329
+#, 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:330
+#, c-format
+msgid "DHCP, IP range %s -- %s, lease time %s"
+msgstr "DHCP, zakres IP %s -- %s, czas dzier¿awy %s"
+
+#: dnsmasq.c:341
+#, c-format
+msgid "DHCP, %s will be written every %s"
+msgstr "DHCP, %s bêdzie zapisywane co %s"
+
+#: dnsmasq.c:346
+msgid "running as root"
+msgstr "pracuje z uprawnieniami u¿ytkownika root"
+
+#: dnsmasq.c:506
+msgid "connected to system DBus"
+msgstr "po³±czono do systemowego DBus"
+
+#: dnsmasq.c:517
+msgid "exiting on receipt of SIGTERM"
+msgstr "wy³±czenie po otrzymaniu sygnalu SIGTERM"
+
+#: dhcp.c:25
+#, c-format
+msgid "cannot create DHCP socket : %s"
+msgstr "nie mo¿na utworzyæ gniazda DHCP : %s"
+
+#: dhcp.c:35
+#, c-format
+msgid "failed to set options on DHCP socket: %s"
+msgstr "b³±d ustawienia opcji gniazda DHCP: %s"
+
+#: dhcp.c:42
+#, c-format
+msgid "failed to set SO_REUSEADDR on DHCP socket: %s"
+msgstr "b³±d ustawienia SO_REUSEADDR gniazda DHCP: %s"
+
+#: dhcp.c:52
+#, c-format
+msgid "failed to bind DHCP server socket: %s"
+msgstr "b³±d pod³±czenia gniazda serwera DHCP: %s"
+
+#: dhcp.c:61
+#, c-format
+msgid "cannot create ICMP raw socket: %s."
+msgstr "b³±d utworzenia surowego gniazda ICMP: %s."
+
+#: dhcp.c:75
+#, c-format
+msgid "cannot create DHCP BPF socket: %s"
+msgstr "b³±d utworzenia gniazda DHCP BPF: %s"
+
+#: dhcp.c:86
+#, c-format
+msgid ""
+"cannot create DHCP packet socket: %s. Is CONFIG_PACKET enabled in your "
+"kernel?"
+msgstr ""
+"b³±d utworzenia gniazda pakietów DHCP: %s. Czy w Twoim kernelu uaktywni³e¶ "
+"opcjê CONFIG_PACKET?"
+
+#: dhcp.c:98
+#, c-format
+msgid "duplicate IP address %s in dhcp-config directive."
+msgstr "powtórzenie adresu IP %s w opcji dhcp-config"
+
+#: dhcp.c:384
+#, 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:690
+#, c-format
+msgid "failed to read %s:%m"
+msgstr "b³±d odczytu %s:%m"
+
+#: dhcp.c:709
+#, fuzzy, c-format
+msgid "bad line at %s line %d"
+msgstr "b³êdna nazwa w %s, linia %d"
+
+#: dhcp.c:810
+#, 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:846
+#, c-format
+msgid "Ignoring DHCP host name %s because it has an illegal domain part"
+msgstr ""
+"Ignorujê nazwê hosta DHCP %s, poniewa¿ posiada nieprawid³ow± czê¶æ domenow±"
+
+#: lease.c:39
+#, c-format
+msgid "cannot open or create leases file: %s"
+msgstr "b³±d otwarcia lub utworzenia pliku dzier¿aw: %s"
+
+#: lease.c:77
+msgid "too many stored leases"
+msgstr "zbyt du¿a ilo¶æ zapisanych dzier¿aw"
+
+#: rfc2131.c:171
+#, c-format
+msgid "DHCP request for unsupported hardware type (%d) recieved on %s"
+msgstr "¿±danie DHCP nieobs³ugiwanego typu sprzêtowego (%d) otrzymane na %s"
+
+#: rfc2131.c:220
+#, c-format
+msgid "no address range available for DHCP request %s %s"
+msgstr "¿aden zakres adresowy nie jest dostêpny dla ¿adania DHCP %s %s"
+
+#: rfc2131.c:221
+msgid "with subnet selector"
+msgstr "z selekcj± podsieci"
+
+#: rfc2131.c:221
+msgid "via"
+msgstr "przez"
+
+#: rfc2131.c:238 rfc2131.c:262
+msgid "disabled"
+msgstr "wy³±czony(a)"
+
+#: rfc2131.c:272 rfc2131.c:643
+msgid "address in use"
+msgstr "adres w u¿yciu"
+
+#: rfc2131.c:275
+msgid "no address configured"
+msgstr "brak skonfigurowanego adresu"
+
+#: rfc2131.c:281 rfc2131.c:522
+msgid "no address available"
+msgstr "brak dostêpnego adresu"
+
+#: rfc2131.c:285 rfc2131.c:646
+msgid "no leases left"
+msgstr "brak wolnych dzier¿aw"
+
+#: rfc2131.c:481
+#, c-format
+msgid "disabling DHCP static address %s"
+msgstr "wy³±czanie statycznego adresu DHCP %s"
+
+#: rfc2131.c:499
+msgid "unknown lease"
+msgstr "nieznana dzier¿awa"
+
+#: rfc2131.c:512 rfc2131.c:718
+msgid "ignored"
+msgstr "ignorujê"
+
+#: rfc2131.c:592
+msgid "wrong address"
+msgstr "b³êdny adres"
+
+#: rfc2131.c:601
+msgid "lease not found"
+msgstr "dzier¿awa nie znaleziona"
+
+#: rfc2131.c:619
+msgid "wrong network"
+msgstr "nieprawid³owa sieæ"
+
+#: rfc2131.c:627
+msgid "address not available"
+msgstr "adres niedostêpny"
+
+#: rfc2131.c:636
+msgid "static lease available"
+msgstr "dostêpna statyczna dzier¿awa"
+
+#: rfc2131.c:640
+msgid "address reserved"
+msgstr "adres zarezerwowany"
+
+#: rfc2131.c:837
+#, c-format
+msgid "cannot send DHCP option %d: no space left in packet"
+msgstr ""
+
+#: rfc2131.c:1132
+#, c-format
+msgid "More than one vendor class matches, using %s"
+msgstr "Wiêcej ni¿ jeden dystrybutor pasuj±cy, u¿ywam %s"
+
+#: netlink.c:37
+#, c-format
+msgid "cannot bind netlink socket: %s"
+msgstr "nie mo¿na pod³±czyæ gniazda netlink: %s"
+
+#: dbus.c:112
+msgid "attempt to set an IPv6 server address via DBus - no IPv6 support"
+msgstr "próba ustawienia adresu IPv6 serwera przez DBus - brak obs³ugi IPv6"
+
+#: dbus.c:237
+msgid "setting upstream servers from DBus"
+msgstr ""
+
+#: dbus.c:273
+msgid "could not register a DBus message handler"
+msgstr "nie mo¿na zarejestrowaæ uchwytu wiadomo¶ci DBus"
diff --git a/po/ro.po b/po/ro.po
new file mode 100644
index 0000000..1c3978a
--- /dev/null
+++ b/po/ro.po
@@ -0,0 +1,860 @@
+# Romanian translations for dnsmasq package.
+# This file is put in the public domain.
+# Simon Kelley <simon@thekelleys.org.uk>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: dnsmasq 2.24\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-11-24 21:10+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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+# for compatibility purposes the letters â, ă, ş, ţ and î can be written as their look-alike correspondent.
+#: cache.c:565
+#, c-format
+msgid "failed to load names from %s: %m"
+msgstr "încărcarea numelor din %s: %m a eşuat"
+
+#: cache.c:601 dhcp.c:722
+#, c-format
+msgid "bad address at %s line %d"
+msgstr "adresă greşită în %s, linia %d"
+
+#: cache.c:628 dhcp.c:736
+#, c-format
+msgid "bad name at %s line %d"
+msgstr "nume greşit în %s linia %d"
+
+#: cache.c:634 dhcp.c:787
+#, c-format
+msgid "read %s - %d addresses"
+msgstr "citesc %s - %d adrese"
+
+#: cache.c:670
+msgid "cleared cache"
+msgstr "memoria temporară a fost ştearsă"
+
+#: cache.c:723
+#, c-format
+msgid ""
+"not giving name %s to the DHCP lease of %s because the name exists in %s "
+"with address %s"
+msgstr ""
+"nu pot da numele %s împrumutului de adresă DHCP a lui %s deoarece "
+"numeleexistă în %s cu adresa %s"
+
+#: cache.c:767
+#, c-format
+msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
+msgstr ""
+"cantitate de memorie temporară %d, %d/%d stocări temporare aureutilizat "
+"locaţii neexpirate."
+
+#: util.c:149 option.c:1284
+msgid "could not get memory"
+msgstr "nu am putut aloca memorie"
+
+#: util.c:172
+#, c-format
+msgid "%s at line %d of %%s"
+msgstr "%s la linia %d din %%s"
+
+#: util.c:179
+msgid "FAILED to start up"
+msgstr "pornirea A EÅžUAT"
+
+#: util.c:305
+#, c-format
+msgid "infinite"
+msgstr "infinit"
+
+#: option.c:124
+msgid "Specify local address(es) to listen on."
+msgstr "Specificaţi adresele locale deservite."
+
+#: option.c:125
+msgid "Return ipaddr for all hosts in specified domains."
+msgstr "Afişează adresele IP ale maşinilor în domeniul dat."
+
+#: option.c:126
+msgid "Fake reverse lookups for RFC1918 private address ranges."
+msgstr ""
+"Simulează căutări după adresă pentru domenii de adresă private (RFC1918)."
+
+#: option.c:127
+msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
+msgstr "Interpretează adresa IP ca NXDOMAIN (împotriva manipulărilor Verisign)"
+
+#: option.c:128
+#, 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:129
+#, c-format
+msgid "Specify configuration file (defaults to %s)."
+msgstr "Specifică fişier de configurare (implicit e %s)."
+
+#: option.c:130
+msgid "Do NOT fork into the background: run in debug mode."
+msgstr "NU porneşte în fundal: rulează în modul depanare."
+
+#: option.c:131
+msgid "Do NOT forward queries with no domain part."
+msgstr "NU înainta cererile ce nu conţin domeniu DNS."
+
+#: option.c:132
+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:133
+msgid "Expand simple names in /etc/hosts with domain-suffix."
+msgstr "Adaugă numelor simple din /etc/hosts numele domeniului ca sufix."
+
+#: option.c:134
+msgid "Don't forward spurious DNS requests from Windows hosts."
+msgstr "Nu inainta cereri DNS defecte provenite de la maÅŸini Windows."
+
+#: option.c:135
+msgid "Enable DHCP in the range given with lease duration."
+msgstr "Activează DHCP în domeniul dat cu durată limitată de împrumut."
+
+#: option.c:136
+#, c-format
+msgid "Change to this group after startup (defaults to %s)."
+msgstr "Rulează sub acest grup după pornire (implicit e %s)."
+
+#: option.c:137
+msgid "Set address or hostname for a specified machine."
+msgstr "Schimbă adresa sau numele maşinii specificate."
+
+#: option.c:138
+#, c-format
+msgid "Do NOT load %s file."
+msgstr "Nu încarcă fişierul %s."
+
+#: option.c:139
+#, 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:140
+msgid "Specify interface(s) to listen on."
+msgstr "Specifică interfeţele deservite."
+
+#: option.c:141
+msgid "Specify interface(s) NOT to listen on."
+msgstr "Specifică interfeţele NE-deservite."
+
+#: option.c:142
+msgid "Map DHCP user class to option set."
+msgstr "Leagă clasa de utilizator DHCP cu grup de opţiuni."
+
+#: option.c:143
+msgid "Don't do DHCP for hosts in option set."
+msgstr "Nu furniza DHCP maşinilor din grupul de opţiuni."
+
+#: option.c:144
+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:145
+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:146
+#, 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:147
+msgid "Return MX records for local hosts."
+msgstr "Răspunde cu întregistrări MX pentru maşini locale."
+
+#: option.c:148
+msgid "Specify an MX record."
+msgstr "Specifică o înregistrare MX."
+
+#: option.c:149
+msgid "Specify BOOTP options to DHCP server."
+msgstr "Specifică opţiuni BOOTP serverului DHCP."
+
+#: option.c:150
+#, 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:151
+msgid "Do NOT cache failed search results."
+msgstr "NU memora rezultatele de căutare DNS eşuatată."
+
+#: option.c:152
+#, 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:153
+msgid "Set extra options to be set to DHCP clients."
+msgstr "Configurează opţiuni în plusce trebuie trimise clienţilor DHCP."
+
+#: option.c:154
+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:155
+#, 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:156
+msgid "Log queries."
+msgstr "Înregistrează tranzacţiile."
+
+#: option.c:157
+msgid "Force the originating port for upstream queries."
+msgstr "Forţează acest port pentru datele ce pleacă."
+
+#: option.c:158
+msgid "Do NOT read resolv.conf."
+msgstr "NU citi fiÅŸierul resolv.conf"
+
+#: option.c:159
+#, c-format
+msgid "Specify path to resolv.conf (defaults to %s)."
+msgstr "Specifică calea către resolv.conf (implicit e %s)."
+
+#: option.c:160
+msgid "Specify address(es) of upstream servers with optional domains."
+msgstr "Specifică adresele server(elor) superioare cu domenii opţionale."
+
+#: option.c:161
+msgid "Never forward queries to specified domains."
+msgstr "Nu înaintează cererile spre domeniile specificate."
+
+#: option.c:162
+msgid "Specify the domain to be assigned in DHCP leases."
+msgstr "Specifică domeniul de transmis prin DHCP."
+
+#: option.c:163
+msgid "Specify default target in an MX record."
+msgstr "Specifică o ţintă într-o înregistrare MX."
+
+#: option.c:164
+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:165
+#, c-format
+msgid "Change to this user after startup. (defaults to %s)."
+msgstr "Rulează sub acest utilizator după pornire. (implicit e %s)."
+
+#: option.c:166
+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:167
+msgid "Display dnsmasq version and copyright information."
+msgstr "Afişează versiunea dnsmasq şi drepturile de autor."
+
+#: option.c:168
+msgid "Translate IPv4 addresses from upstream servers."
+msgstr "Traduce adresele IPv4 de la serverele DNS superioare."
+
+#: option.c:169
+msgid "Specify a SRV record."
+msgstr "Specifică o înregistrare SRV."
+
+#: option.c:170
+msgid "Display this message."
+msgstr "Afişează acest mesaj."
+
+#: option.c:171
+#, c-format
+msgid "Specify path of PID file. (defaults to %s)."
+msgstr "Specifică o cale pentru fişierul PID. (implicit %s)."
+
+#: option.c:172
+#, c-format
+msgid "Specify maximum number of DHCP leases (defaults to %s)."
+msgstr "Specifică numărul maxim de împrumuturi DHCP (implicit %s)."
+
+#: option.c:173
+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:174
+msgid "Specify TXT DNS record."
+msgstr "Specifică o înregistrare TXT."
+
+#: option.c:175
+msgid "Bind only to interfaces in use."
+msgstr "Ascultă doar pe interfeţele active."
+
+#: option.c:176
+#, c-format
+msgid "Read DHCP static host information from %s."
+msgstr "Citeşte informaţii DHCP statice despre maşină din %s."
+
+#: option.c:177
+msgid "Enable the DBus interface for setting upstream servers, etc."
+msgstr "Activeaza interfaţa DBus pentru configurarea serverelor superioare."
+
+#: option.c:178
+msgid "Do not provide DHCP on this interface, only provide DNS."
+msgstr "Nu activează DHCP ci doar DNS pe această interfaţă."
+
+#: option.c:179
+msgid "Enable dynamic address allocation for bootp."
+msgstr "Activează alocarea dinamică a adreselor pentru BOOTP."
+
+#: option.c:394
+msgid "missing \""
+msgstr "lipseÅŸte \""
+
+#: option.c:423
+msgid "bad option"
+msgstr "opţiune invalidă"
+
+#: option.c:440
+#, c-format
+msgid "cannot read %s: %s"
+msgstr "nu pot citi %s: %s"
+
+#: option.c:446
+#, c-format
+msgid ""
+"Usage: dnsmasq [options]\n"
+"\n"
+msgstr ""
+"Utilizare: dnsmasq [opţiuni]\n"
+"\n"
+
+#: option.c:448
+#, 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:450
+#, c-format
+msgid "Valid options are :\n"
+msgstr "Opţiunile valide sunt:\n"
+
+#: option.c:475
+#, c-format
+msgid "Dnsmasq version %s %s\n"
+msgstr "dnsmasq versiunea %s %s\n"
+
+#: option.c:476
+#, c-format
+msgid ""
+"Compile time options %s\n"
+"\n"
+msgstr ""
+"Opţiuni cu care a fost compilat %s\n"
+"\n"
+
+#: option.c:477
+#, c-format
+msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
+msgstr "Acest program vine FÄ‚RÄ‚ NICI O GARANÅ¢IE.\n"
+
+#: option.c:478
+#, 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:479
+#, 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:489
+msgid "extraneous parameter"
+msgstr "parametru nerecunoscut"
+
+#: option.c:497
+msgid "missing parameter"
+msgstr "parametru lipsa"
+
+#: option.c:514
+msgid "nested includes not allowed"
+msgstr "incluziunile locale nu sunt permise"
+
+#: option.c:574
+msgid "bad MX preference"
+msgstr "preferinţă MX invalidă"
+
+#: option.c:583
+msgid "bad MX name"
+msgstr "nume MX invalid"
+
+#: option.c:601
+msgid "bad MX target"
+msgstr "ţintă MX invalidă"
+
+#: option.c:803 option.c:814
+msgid "bad port"
+msgstr "port invalid"
+
+#: option.c:954
+msgid "bad dhcp-range"
+msgstr "dhcp-range invalid"
+
+#: option.c:1014
+msgid "inconsistent DHCP range"
+msgstr "domeniu DHCP inconsistent"
+
+#: option.c:1201
+msgid "bad dhcp-host"
+msgstr "dhcp-host invalid"
+
+#: option.c:1261
+msgid "bad dhcp-option"
+msgstr "dhcp-option invalid"
+
+#: option.c:1279
+msgid "bad domain in dhcp-option"
+msgstr "domeniu DNS invalid în declaraţia dhcp-option"
+
+#: option.c:1425
+msgid "dhcp-option too long"
+msgstr "declararea dhcp-option este prea lungă"
+
+#: option.c:1605
+msgid "bad TXT record"
+msgstr "înregistrare TXT invalidă"
+
+#: option.c:1637
+msgid "TXT record string too long"
+msgstr "şirul de caractere pentru înregistrarea TXT este prea lung"
+
+#: option.c:1676
+msgid "bad SRV record"
+msgstr "înregistrare SRV invalidă"
+
+#: option.c:1689
+msgid "bad SRV target"
+msgstr "ţintă SRV invalidă"
+
+#: option.c:1701
+msgid "invalid port number"
+msgstr "număr de port invalid"
+
+#: option.c:1712
+msgid "invalid priority"
+msgstr "prioritate invalidă"
+
+#: option.c:1723
+msgid "invalid weight"
+msgstr "pondere invalidă"
+
+#: option.c:1748
+msgid "error"
+msgstr "eroare"
+
+#: option.c:1750
+#, c-format
+msgid "bad command line options: %s."
+msgstr "opţiuni în linie de comandă invalide: %s."
+
+#: option.c:1794
+#, c-format
+msgid "cannot get host-name: %s"
+msgstr "nu pot citi numele maÅŸinii: %s"
+
+#: option.c:1823
+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:1830
+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:1833 network.c:591
+#, c-format
+msgid "failed to read %s: %m"
+msgstr "nu pot citi %s: %n"
+
+#: option.c:1851
+#, 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:378
+#, c-format
+msgid "nameserver %s refused to do a recursive query"
+msgstr "serverul DNS %s refuză interogările recursive"
+
+#: forward.c:899
+msgid "forwarding table overflow: check for server loops."
+msgstr "depăşire de memorie în tabela cu înaintări DNS: verificaţi de bucle."
+
+#: isc.c:71 dnsmasq.c:471
+#, c-format
+msgid "failed to access %s: %m"
+msgstr "accesarea serverului %s a eÅŸuat: %n"
+
+#: isc.c:87
+#, c-format
+msgid "failed to load %s: %m"
+msgstr "nu pot încărca %s: %n"
+
+#: isc.c:91 network.c:595
+#, c-format
+msgid "reading %s"
+msgstr "citesc %s"
+
+#: isc.c:113
+#, c-format
+msgid "bad name in %s"
+msgstr "nume invalid în %s"
+
+#: isc.c:175
+#, c-format
+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:418
+#, c-format
+msgid "failed to create listening socket: %s"
+msgstr "creearea socket-ului de ascultare a eÅŸuat: %s"
+
+#: network.c:425
+#, 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:444
+#, 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:451
+#, c-format
+msgid "failed to listen on socket: %s"
+msgstr "ascultarea pe socket a eÅŸuat: %s"
+
+#: network.c:521
+#, c-format
+msgid "ignoring nameserver %s - local interface"
+msgstr "ignorăm serverul DNS %s - interfaţă locală"
+
+#: network.c:530
+#, 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:544
+msgid "domain"
+msgstr "domeniu"
+
+#: network.c:546
+msgid "unqualified"
+msgstr "invalid"
+
+#: network.c:546
+msgid "domains"
+msgstr "domenii"
+
+#: network.c:549
+#, c-format
+msgid "using local addresses only for %s %s"
+msgstr "folosim adresele locale doar pentru %S %s"
+
+#: network.c:551
+#, c-format
+msgid "using nameserver %s#%d for %s %s"
+msgstr "folosim serverul DNS %s#%d pentru %s %s"
+
+#: network.c:554
+#, c-format
+msgid "using nameserver %s#%d"
+msgstr "folosim serverul DNS %s#%d"
+
+#: dnsmasq.c:112
+msgid ""
+"ISC dhcpd integration not available: set HAVE_ISC_READER in src/config.h"
+msgstr ""
+"Integrarea cu ISC dhcpd nu este disponibilă:puneţi HAVE_ISC_HEADER în src/"
+"config.h"
+
+#: dnsmasq.c:116
+#, c-format
+msgid "failed to find list of interfaces: %s"
+msgstr "enumerarea interfeţelor a eşuat: %s"
+
+#: dnsmasq.c:131
+#, c-format
+msgid "unknown interface %s"
+msgstr "interfaţă necunoscută %s"
+
+#: dnsmasq.c:137
+#, c-format
+msgid "no interface with address %s"
+msgstr "nu exista interfaţă pentru adresa %s"
+
+#: dnsmasq.c:146
+#, c-format
+msgid "cannot open %s:%s"
+msgstr "nu pot deschide %s:%s"
+
+#: dnsmasq.c:160
+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:173 dnsmasq.c:504
+#, c-format
+msgid "DBus error: %s"
+msgstr "eroare DBus: %s"
+
+#: dnsmasq.c:177
+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:290
+#, c-format
+msgid "started, version %s cachesize %d"
+msgstr "am ponit, versiunea %s memorie temporară %d"
+
+#: dnsmasq.c:292
+#, c-format
+msgid "started, version %s cache disabled"
+msgstr "am pornit, versiunea %s memorie temporară dezactivată"
+
+#: dnsmasq.c:294
+#, c-format
+msgid "compile time options: %s"
+msgstr "compilat cu opţiunile: %s"
+
+#: dnsmasq.c:300
+msgid "DBus support enabled: connected to system bus"
+msgstr "suportul DBus activ: sunt conectat la magistrala sistem"
+
+#: dnsmasq.c:302
+msgid "DBus support enabled: bus connection pending"
+msgstr "suportul DBus activ: aştept conexiunea la magistrală"
+
+#: dnsmasq.c:307
+msgid "setting --bind-interfaces option because of OS limitations"
+msgstr "specific opţiunea --bind-interfaces din cauza limitărilor SO"
+
+#: dnsmasq.c:312
+#, c-format
+msgid "warning: interface %s does not currently exist"
+msgstr "atenţie: interfaţa %s nu există momentan"
+
+#: dnsmasq.c:329
+#, 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:330
+#, c-format
+msgid "DHCP, IP range %s -- %s, lease time %s"
+msgstr "DHCP, domeniu IP %s -- %s, timpul reînoirii %s"
+
+#: dnsmasq.c:341
+#, c-format
+msgid "DHCP, %s will be written every %s"
+msgstr "DHCP, %s va fi rescris odată la fiecare %s"
+
+#: dnsmasq.c:346
+msgid "running as root"
+msgstr "rulez ca root"
+
+#: dnsmasq.c:506
+msgid "connected to system DBus"
+msgstr "magistrala sistem Dbus conectată"
+
+#: dnsmasq.c:517
+msgid "exiting on receipt of SIGTERM"
+msgstr "am primit SIGTERM, am terminat"
+
+#: dhcp.c:25
+#, c-format
+msgid "cannot create DHCP socket : %s"
+msgstr "nu pot creea socket DHCP : %s"
+
+#: dhcp.c:35
+#, c-format
+msgid "failed to set options on DHCP socket: %s"
+msgstr "configurarea opţiunilor socketului DHCP a eşuat: %s"
+
+#: dhcp.c:42
+#, c-format
+msgid "failed to set SO_REUSEADDR on DHCP socket: %s"
+msgstr "configurarea SO_REUSEADDR pe socket-ul DHCP a eÅŸuat: %s"
+
+#: dhcp.c:52
+#, c-format
+msgid "failed to bind DHCP server socket: %s"
+msgstr "activarea socket-ului server-ului DHCP a eÅŸuat: %s"
+
+#: dhcp.c:61
+#, c-format
+msgid "cannot create ICMP raw socket: %s."
+msgstr "nu pot creea socket ICMP raw: %s."
+
+#: dhcp.c:75
+#, c-format
+msgid "cannot create DHCP BPF socket: %s"
+msgstr "nu pot creea socket DHCP BPF: %s"
+
+#: dhcp.c:86
+#, c-format
+msgid ""
+"cannot create DHCP packet socket: %s. Is CONFIG_PACKET enabled in your "
+"kernel?"
+msgstr ""
+"nu pot creea socket DHCP packet: %s. Aveţi activată în nucleulsistemului "
+"opţiunea CONFIG_PACKET ?"
+
+#: dhcp.c:98
+#, c-format
+msgid "duplicate IP address %s in dhcp-config directive."
+msgstr "adresă IP duplicat %s în declaraţia dhcp-config."
+
+#: dhcp.c:384
+#, 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:690
+#, c-format
+msgid "failed to read %s:%m"
+msgstr "citirea %s:%n a eÅŸuat"
+
+#: dhcp.c:709
+#, c-format
+msgid "bad line at %s line %d"
+msgstr "linie invalidă în %s rândul %d"
+
+#: dhcp.c:810
+#, 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:846
+#, 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"
+
+#: lease.c:39
+#, c-format
+msgid "cannot open or create leases file: %s"
+msgstr "nu pot creea sau deschide fişierul cu împrumuturi: %s"
+
+#: lease.c:77
+msgid "too many stored leases"
+msgstr "prea multe împrumuturi stocate"
+
+#: rfc2131.c:171
+#, c-format
+msgid "DHCP request for unsupported hardware type (%d) recieved on %s"
+msgstr "cerere DHCP pentru dispozitiv nesuportat (%d) recepţionată prin %s"
+
+#: rfc2131.c:220
+#, c-format
+msgid "no address range available for DHCP request %s %s"
+msgstr "nici un domeniu de adrese disponibil pentru cererea DHCP %s %s"
+
+#: rfc2131.c:221
+msgid "with subnet selector"
+msgstr "cu selectorul de subreţea"
+
+#: rfc2131.c:221
+msgid "via"
+msgstr "prin"
+
+#: rfc2131.c:238 rfc2131.c:262
+msgid "disabled"
+msgstr "dezactivat"
+
+#: rfc2131.c:272 rfc2131.c:643
+msgid "address in use"
+msgstr "adresa este folosită"
+
+#: rfc2131.c:275
+msgid "no address configured"
+msgstr "adresă lipsă"
+
+#: rfc2131.c:281 rfc2131.c:522
+msgid "no address available"
+msgstr "nici o adresă disponibilă"
+
+#: rfc2131.c:285 rfc2131.c:646
+msgid "no leases left"
+msgstr "nu mai am de unde să împrumut"
+
+#: rfc2131.c:481
+#, c-format
+msgid "disabling DHCP static address %s"
+msgstr "dezactivăm adresele DHCP statice %s"
+
+#: rfc2131.c:499
+msgid "unknown lease"
+msgstr "împrumut necunoscut"
+
+#: rfc2131.c:512 rfc2131.c:718
+msgid "ignored"
+msgstr "ignorat"
+
+#: rfc2131.c:592
+msgid "wrong address"
+msgstr "adresă greşită"
+
+#: rfc2131.c:601
+msgid "lease not found"
+msgstr "împrumutul nu a fost găsit"
+
+#: rfc2131.c:619
+msgid "wrong network"
+msgstr "reţea greşită"
+
+#: rfc2131.c:627
+msgid "address not available"
+msgstr "adresă indisponibilă"
+
+#: rfc2131.c:636
+msgid "static lease available"
+msgstr "împrumut static este disponibil"
+
+#: rfc2131.c:640
+msgid "address reserved"
+msgstr "adresă rezervată"
+
+#: rfc2131.c:837
+#, 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:1132
+#, 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:37
+#, c-format
+msgid "cannot bind netlink socket: %s"
+msgstr "nu pot să activez socket-ul netlink: %s"
+
+#: dbus.c:112
+msgid "attempt to set an IPv6 server address via DBus - no IPv6 support"
+msgstr "incerc să configurez un server IPv6 prin Dbus - nu este suport IPv6"
+
+#: dbus.c:237
+msgid "setting upstream servers from DBus"
+msgstr "configurăm serverele superioare prin Dbus"
+
+#: dbus.c:273
+msgid "could not register a DBus message handler"
+msgstr "nu pot activa o interfaţă de mesaje DBus"
diff --git a/src/cache.c b/src/cache.c
index 79d7161..16f8810 100644
--- a/src/cache.c
+++ b/src/cache.c
@@ -562,7 +562,7 @@ static void read_hostsfile(char *filename, int opts, char *buff, char *domain_su
if (!f)
{
- syslog(LOG_ERR, "failed to load names from %s: %m", filename);
+ syslog(LOG_ERR, _("failed to load names from %s: %m"), filename);
return;
}
@@ -597,7 +597,10 @@ static void read_hostsfile(char *filename, int opts, char *buff, char *domain_su
}
#endif
else
- continue;
+ {
+ syslog(LOG_ERR, _("bad address at %s line %d"), filename, lineno);
+ continue;
+ }
while ((token = strtok(NULL, " \t\n\r")) && (*token != '#'))
{
@@ -622,13 +625,13 @@ static void read_hostsfile(char *filename, int opts, char *buff, char *domain_su
}
}
else
- syslog(LOG_ERR, "bad name at %s line %d", filename, lineno);
+ syslog(LOG_ERR, _("bad name at %s line %d"), filename, lineno);
}
}
fclose(f);
- syslog(LOG_INFO, "read %s - %d addresses", filename, count);
+ syslog(LOG_INFO, _("read %s - %d addresses"), filename, count);
}
void cache_reload(int opts, char *buff, char *domain_suffix, struct hostsfile *addn_hosts)
@@ -664,7 +667,7 @@ void cache_reload(int opts, char *buff, char *domain_suffix, struct hostsfile *a
if ((opts & OPT_NO_HOSTS) && !addn_hosts)
{
if (cache_size > 0)
- syslog(LOG_INFO, "cleared cache");
+ syslog(LOG_INFO, _("cleared cache"));
return;
}
@@ -717,8 +720,8 @@ void cache_add_dhcp_entry(struct daemon *daemon, char *host_name,
{
strcpy(daemon->namebuff, inet_ntoa(crec->addr.addr.addr.addr4));
syslog(LOG_WARNING,
- "not giving name %s to the DHCP lease of %s because "
- "the name exists in %s with address %s",
+ _("not giving name %s to the DHCP lease of %s because "
+ "the name exists in %s with address %s"),
host_name, inet_ntoa(*host_address),
record_source(daemon->addn_hosts, crec->uid), daemon->namebuff);
}
@@ -761,7 +764,7 @@ void cache_add_dhcp_entry(struct daemon *daemon, char *host_name,
void dump_cache(struct daemon *daemon)
{
- syslog(LOG_INFO, "cache size %d, %d/%d cache insertions re-used unexpired cache entries.",
+ syslog(LOG_INFO, _("cache size %d, %d/%d cache insertions re-used unexpired cache entries."),
daemon->cachesize, cache_live_freed, cache_inserted);
if (daemon->options & (OPT_DEBUG | OPT_LOG))
diff --git a/src/config.h b/src/config.h
index d491503..d0754df 100644
--- a/src/config.h
+++ b/src/config.h
@@ -12,7 +12,7 @@
/* Author's email: simon@thekelleys.org.uk */
-#define VERSION "2.23"
+#define VERSION "2.24"
#define FTABSIZ 150 /* max number of outstanding requests */
#define MAX_PROCS 20 /* max no children for TCP requests */
diff --git a/src/dbus.c b/src/dbus.c
index c1a9ac0..7be913a 100644
--- a/src/dbus.c
+++ b/src/dbus.c
@@ -109,7 +109,7 @@ static void dbus_read_servers(struct daemon *daemon, DBusMessage *message)
}
#ifndef HAVE_IPV6
- syslog(LOG_WARNING, "attempt to set an IPv6 server address via DBus - no IPv6 support");
+ syslog(LOG_WARNING, _("attempt to set an IPv6 server address via DBus - no IPv6 support"));
#else
if (i == sizeof(struct in6_addr)-1)
{
@@ -234,7 +234,7 @@ DBusHandlerResult message_handler (DBusConnection *connection,
}
else if (strcmp(method, "SetServers") == 0)
{
- syslog(LOG_INFO, "setting upstream servers from DBus");
+ syslog(LOG_INFO, _("setting upstream servers from DBus"));
dbus_read_servers(daemon, message);
check_servers(daemon);
}
@@ -270,7 +270,7 @@ char *dbus_init(struct daemon *daemon)
if (!dbus_connection_register_object_path(connection, DNSMASQ_PATH,
&dnsmasq_vtable, daemon))
- return "could not register a DBus message handler";
+ return _("could not register a DBus message handler");
daemon->dbus = connection;
diff --git a/src/dhcp.c b/src/dhcp.c
index ea013dc..5e6344b 100644
--- a/src/dhcp.c
+++ b/src/dhcp.c
@@ -22,7 +22,7 @@ void dhcp_init(struct daemon *daemon)
struct dhcp_config *configs, *cp;
if (fd == -1)
- die ("cannot create DHCP socket : %s", NULL);
+ die (_("cannot create DHCP socket : %s"), NULL);
if ((flags = fcntl(fd, F_GETFL, 0)) == -1 ||
fcntl(fd, F_SETFL, flags | O_NONBLOCK) == -1 ||
@@ -32,14 +32,14 @@ void dhcp_init(struct daemon *daemon)
setsockopt(fd, IPPROTO_IP, IP_RECVIF, &oneopt, sizeof(oneopt)) == -1 ||
#endif
setsockopt(fd, SOL_SOCKET, SO_BROADCAST, &oneopt, sizeof(oneopt)) == -1)
- die("failed to set options on DHCP socket: %s", NULL);
+ die(_("failed to set options on DHCP socket: %s"), NULL);
/* When bind-interfaces is set, there might be more than one dnmsasq
instance binding port 67. That's Ok if they serve different networks.
Need to set REUSEADDR to make this posible. */
if ((daemon->options & OPT_NOWILD) &&
setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &oneopt, sizeof(oneopt)) == -1)
- die("failed to set SO_REUSEADDR on DHCP socket: %s", NULL);
+ die(_("failed to set SO_REUSEADDR on DHCP socket: %s"), NULL);
saddr.sin_family = AF_INET;
saddr.sin_port = htons(DHCP_SERVER_PORT);
@@ -49,7 +49,7 @@ void dhcp_init(struct daemon *daemon)
#endif
if (bind(fd, (struct sockaddr *)&saddr, sizeof(struct sockaddr_in)))
- die("failed to bind DHCP server socket: %s", NULL);
+ die(_("failed to bind DHCP server socket: %s"), NULL);
daemon->dhcpfd = fd;
@@ -58,7 +58,7 @@ void dhcp_init(struct daemon *daemon)
fcntl(fd, F_SETFL, flags | O_NONBLOCK) == -1 ||
setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &oneopt, sizeof(oneopt)) == -1 ||
setsockopt(fd, SOL_SOCKET, SO_DONTROUTE, &zeroopt, sizeof(zeroopt)) == -1)
- die("cannot create ICMP raw socket: %s.", NULL);
+ die(_("cannot create ICMP raw socket: %s."), NULL);
daemon->dhcp_icmp_fd = fd;
@@ -72,7 +72,7 @@ void dhcp_init(struct daemon *daemon)
if ((fd = open(filename, O_RDWR, 0)) != -1)
break;
if (errno != EBUSY)
- die("cannot create DHCP BPF socket: %s", NULL);
+ die(_("cannot create DHCP BPF socket: %s"), NULL);
}
}
#else
@@ -83,8 +83,8 @@ void dhcp_init(struct daemon *daemon)
rejected as non-sensical by some BSD kernels) */
if ((fd = socket(PF_PACKET, SOCK_DGRAM, htons(ETHERTYPE_IP))) == -1 ||
setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &oneopt, sizeof(oneopt)) == -1)
- die("cannot create DHCP packet socket: %s. "
- "Is CONFIG_PACKET enabled in your kernel?", NULL);
+ die(_("cannot create DHCP packet socket: %s. "
+ "Is CONFIG_PACKET enabled in your kernel?"), NULL);
#endif
daemon->dhcp_raw_fd = fd;
@@ -95,7 +95,7 @@ void dhcp_init(struct daemon *daemon)
for (configs = daemon->dhcp_conf; configs; configs = configs->next)
for (cp = configs->next; cp; cp = cp->next)
if ((configs->flags & cp->flags & CONFIG_ADDR) && configs->addr.s_addr == cp->addr.s_addr)
- die("duplicate IP address %s in dhcp-config directive.", inet_ntoa(cp->addr));
+ die(_("duplicate IP address %s in dhcp-config directive."), inet_ntoa(cp->addr));
daemon->dhcp_packet = safe_malloc(sizeof(struct udp_dhcp_packet));
/* These two each hold a DHCP option max size 255
@@ -116,6 +116,7 @@ void dhcp_packet(struct daemon *daemon, time_t now)
struct iovec iov[2];
struct cmsghdr *cmptr;
int sz, newlen, iface_index = 0;
+ int unicast_dest = 0;
struct in_addr iface_addr;
#ifdef HAVE_BPF
unsigned char iface_hwaddr[ETHER_ADDR_LEN];
@@ -151,19 +152,23 @@ void dhcp_packet(struct daemon *daemon, time_t now)
return;
for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, cmptr))
if (cmptr->cmsg_level == SOL_IP && cmptr->cmsg_type == IP_PKTINFO)
- iface_index = ((struct in_pktinfo *)CMSG_DATA(cmptr))->ipi_ifindex;
-
+ {
+ iface_index = ((struct in_pktinfo *)CMSG_DATA(cmptr))->ipi_ifindex;
+ if (((struct in_pktinfo *)CMSG_DATA(cmptr))->ipi_addr.s_addr != INADDR_BROADCAST)
+ unicast_dest = 1;
+ }
+
if (!(ifr.ifr_ifindex = iface_index) ||
ioctl(daemon->dhcpfd, SIOCGIFNAME, &ifr) == -1)
return;
-
+
#elif defined(IP_RECVIF)
if (msg.msg_controllen < sizeof(struct cmsghdr))
return;
for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, cmptr))
if (cmptr->cmsg_level == IPPROTO_IP && cmptr->cmsg_type == IP_RECVIF)
iface_index = ((struct sockaddr_dl *)CMSG_DATA(cmptr))->sdl_index;
-
+
if (!iface_index || !if_indextoname(iface_index, ifr.ifr_name))
return;
@@ -233,7 +238,7 @@ void dhcp_packet(struct daemon *daemon, time_t now)
}
lease_prune(NULL, now); /* lose any expired leases */
- newlen = dhcp_reply(daemon, context, ifr.ifr_name, sz, now);
+ newlen = dhcp_reply(daemon, context, ifr.ifr_name, sz, now, unicast_dest);
lease_update_file(0, now);
lease_update_dns(daemon);
@@ -376,7 +381,7 @@ struct dhcp_context *complete_context(struct daemon *daemon, struct in_addr loca
{
strcpy(daemon->dhcp_buff, inet_ntoa(context->start));
strcpy(daemon->dhcp_buff2, inet_ntoa(context->end));
- syslog(LOG_WARNING, "DHCP range %s -- %s is not consistent with netmask %s",
+ syslog(LOG_WARNING, _("DHCP range %s -- %s is not consistent with netmask %s"),
daemon->dhcp_buff, daemon->dhcp_buff2, inet_ntoa(netmask));
}
context->netmask = netmask;
@@ -596,12 +601,13 @@ int address_allocate(struct dhcp_context *context, struct daemon *daemon,
static int is_addr_in_context(struct dhcp_context *context, struct dhcp_config *config)
{
- if (!context)
+ if (!context) /* called via find_config() from lease_update_from_configs() */
return 1;
if (!(config->flags & CONFIG_ADDR))
return 1;
- if (is_same_net(config->addr, context->start, context->netmask))
- return 1;
+ for (; context; context = context->current)
+ if (is_same_net(config->addr, context->start, context->netmask))
+ return 1;
return 0;
}
@@ -675,18 +681,20 @@ void dhcp_read_ethers(struct daemon *daemon)
struct in_addr addr;
unsigned char hwaddr[ETHER_ADDR_LEN];
struct dhcp_config *config, *configs = daemon->dhcp_conf;
- int count = 0;
+ int count = 0, lineno = 0;
addr.s_addr = 0; /* eliminate warning */
if (!f)
{
- syslog(LOG_ERR, "failed to read " ETHERSFILE ":%m");
+ syslog(LOG_ERR, _("failed to read %s:%m"), ETHERSFILE);
return;
}
while (fgets(buff, MAXDNAME, f))
{
+ lineno++;
+
while (strlen(buff) > 0 && isspace(buff[strlen(buff)-1]))
buff[strlen(buff)-1] = 0;
@@ -696,11 +704,11 @@ void dhcp_read_ethers(struct daemon *daemon)
for (ip = buff; *ip && !isspace(*ip); ip++);
for(; *ip && isspace(*ip); ip++)
*ip = 0;
- if (!*ip)
- continue;
-
- if (parse_hex(buff, hwaddr, 6, NULL) != 6)
- continue;
+ if (!*ip || parse_hex(buff, hwaddr, 6, NULL) != 6)
+ {
+ syslog(LOG_ERR, _("bad line at %s line %d"), ETHERSFILE, lineno);
+ continue;
+ }
/* check for name or dotted-quad */
for (cp = ip; *cp; cp++)
@@ -710,7 +718,11 @@ void dhcp_read_ethers(struct daemon *daemon)
if (!*cp)
{
if ((addr.s_addr = inet_addr(ip)) == (in_addr_t)-1)
- continue;
+ {
+ syslog(LOG_ERR, _("bad address at %s line %d"), ETHERSFILE, lineno);
+ continue;
+ }
+
flags = CONFIG_ADDR;
for (config = configs; config; config = config->next)
@@ -720,7 +732,11 @@ void dhcp_read_ethers(struct daemon *daemon)
else
{
if (!canonicalise(ip))
- continue;
+ {
+ syslog(LOG_ERR, _("bad name at %s line %d"), ETHERSFILE, lineno);
+ continue;
+ }
+
flags = CONFIG_NAME;
for (config = configs; config; config = config->next)
@@ -768,7 +784,7 @@ void dhcp_read_ethers(struct daemon *daemon)
fclose(f);
- syslog(LOG_INFO, "read " ETHERSFILE " - %d addresses", count);
+ syslog(LOG_INFO, _("read %s - %d addresses"), ETHERSFILE, count);
daemon->dhcp_conf = configs;
}
@@ -791,7 +807,7 @@ void dhcp_update_configs(struct dhcp_config *configs)
(crec->flags & F_HOSTS))
{
if (config_find_by_address(configs, crec->addr.addr.addr.addr4))
- syslog(LOG_WARNING, "duplicate IP address %s (%s) in dhcp-config directive",
+ syslog(LOG_WARNING, _("duplicate IP address %s (%s) in dhcp-config directive"),
inet_ntoa(crec->addr.addr.addr.addr4), config->hostname);
else
{
@@ -827,7 +843,7 @@ char *strip_hostname(struct daemon *daemon, char *hostname)
{
if (!daemon->domain_suffix || !hostname_isequal(dot+1, daemon->domain_suffix))
{
- syslog(LOG_WARNING, "Ignoring DHCP host name %s because it has an illegal domain part", hostname);
+ syslog(LOG_WARNING, _("Ignoring DHCP host name %s because it has an illegal domain part"), hostname);
hostname = NULL;
}
else
diff --git a/src/dnsmasq.c b/src/dnsmasq.c
index d545ba7..9378081 100644
--- a/src/dnsmasq.c
+++ b/src/dnsmasq.c
@@ -33,7 +33,11 @@ static char *compile_opts =
#ifndef HAVE_DBUS
"no-"
#endif
-"DBus";
+"DBus "
+#ifdef NO_GETTEXT
+"no-"
+#endif
+"i18n";
static volatile int sigterm, sighup, sigusr1, sigalarm, num_kids, in_child;
@@ -51,6 +55,12 @@ int main (int argc, char **argv)
sigset_t sigmask;
struct iname *if_tmp;
+#ifndef NO_GETTEXT
+ setlocale(LC_ALL, "");
+ bindtextdomain("dnsmasq", LOCALEDIR);
+ textdomain("dnsmasq");
+#endif
+
sighup = 1; /* init cache the first time through */
sigusr1 = 0; /* but don't dump */
sigterm = 0; /* or die */
@@ -99,11 +109,11 @@ int main (int argc, char **argv)
}
#ifndef HAVE_ISC_READER
else if (!daemon->dhcp)
- die("ISC dhcpd integration not available: set HAVE_ISC_READER in src/config.h", NULL);
+ die(_("ISC dhcpd integration not available: set HAVE_ISC_READER in src/config.h"), NULL);
#endif
if (!enumerate_interfaces(daemon, &daemon->interfaces, NULL, NULL))
- die("failed to find list of interfaces: %s", NULL);
+ die(_("failed to find list of interfaces: %s"), NULL);
if (!(daemon->options & OPT_NOWILD) &&
!(daemon->listeners = create_wildcard_listeners(daemon->port)))
@@ -118,13 +128,13 @@ int main (int argc, char **argv)
for (if_tmp = daemon->if_names; if_tmp; if_tmp = if_tmp->next)
if (if_tmp->name && !if_tmp->used)
- die("unknown interface %s", if_tmp->name);
+ die(_("unknown interface %s"), if_tmp->name);
for (if_tmp = daemon->if_addrs; if_tmp; if_tmp = if_tmp->next)
if (!if_tmp->used)
{
prettyprint_addr(&if_tmp->addr, daemon->namebuff);
- die("no interface with address %s", daemon->namebuff);
+ die(_("no interface with address %s"), daemon->namebuff);
}
}
@@ -133,7 +143,7 @@ int main (int argc, char **argv)
#ifdef HAVE_BROKEN_RTC
if ((daemon->uptime_fd = open(UPTIME, O_RDONLY)) == -1)
- die("cannot open " UPTIME ":%s", NULL);
+ die(_("cannot open %s:%s"), UPTIME);
#endif
now = dnsmasq_time(daemon->uptime_fd);
@@ -147,7 +157,7 @@ int main (int argc, char **argv)
if (!tmp->isloop)
c++;
if (c != 1)
- die("must set exactly one interface on broken systems without IP_RECVIF", NULL);
+ die(_("must set exactly one interface on broken systems without IP_RECVIF"), NULL);
#endif
dhcp_init(daemon);
lease_init(daemon, now);
@@ -160,11 +170,11 @@ int main (int argc, char **argv)
daemon->dbus = NULL;
daemon->watches = NULL;
if ((err = dbus_init(daemon)))
- die("DBus error: %s", err);
+ die(_("DBus error: %s"), err);
}
#else
if (daemon->options & OPT_DBUS)
- die("DBus not available: set HAVE_DBUS in src/config.h", NULL);
+ die(_("DBus not available: set HAVE_DBUS in src/config.h"), NULL);
#endif
/* If query_port is set then create a socket now, before dumping root
@@ -277,29 +287,29 @@ int main (int argc, char **argv)
DNSMASQ_LOG_FAC(daemon->options & OPT_DEBUG));
if (daemon->cachesize != 0)
- syslog(LOG_INFO, "started, version %s cachesize %d", VERSION, daemon->cachesize);
+ syslog(LOG_INFO, _("started, version %s cachesize %d"), VERSION, daemon->cachesize);
else
- syslog(LOG_INFO, "started, version %s cache disabled", VERSION);
+ syslog(LOG_INFO, _("started, version %s cache disabled"), VERSION);
- syslog(LOG_INFO, "compile time options: %s", compile_opts);
+ syslog(LOG_INFO, _("compile time options: %s"), compile_opts);
#ifdef HAVE_DBUS
if (daemon->options & OPT_DBUS)
{
if (daemon->dbus)
- syslog(LOG_INFO, "DBus support enabled: connected to system bus");
+ syslog(LOG_INFO, _("DBus support enabled: connected to system bus"));
else
- syslog(LOG_INFO, "DBus support enabled: bus connection pending");
+ syslog(LOG_INFO, _("DBus support enabled: bus connection pending"));
}
#endif
if (bind_fallback)
- syslog(LOG_WARNING, "setting --bind-interfaces option because of OS limitations");
+ syslog(LOG_WARNING, _("setting --bind-interfaces option because of OS limitations"));
if (!(daemon->options & OPT_NOWILD))
for (if_tmp = daemon->if_names; if_tmp; if_tmp = if_tmp->next)
if (if_tmp->name && !if_tmp->used)
- syslog(LOG_WARNING, "warning: interface %s does not currently exist", if_tmp->name);
+ syslog(LOG_WARNING, _("warning: interface %s does not currently exist"), if_tmp->name);
if (daemon->dhcp)
{
@@ -316,8 +326,8 @@ int main (int argc, char **argv)
strcpy(daemon->dhcp_buff, inet_ntoa(dhcp_tmp->start));
syslog(LOG_INFO,
(dhcp_tmp->flags & CONTEXT_STATIC) ?
- "DHCP, static leases only on %.0s%s, lease time %s" :
- "DHCP, IP range %s -- %s, lease time %s",
+ _("DHCP, static leases only on %.0s%s, lease time %s") :
+ _("DHCP, IP range %s -- %s, lease time %s"),
daemon->dhcp_buff, inet_ntoa(dhcp_tmp->end), daemon->dhcp_buff2);
}
@@ -328,12 +338,12 @@ int main (int argc, char **argv)
if (daemon->min_leasetime < 60)
daemon->min_leasetime = 60;
prettyprint_time(daemon->dhcp_buff2, daemon->min_leasetime);
- syslog(LOG_INFO, "DHCP, %s will be written every %s", daemon->lease_file, daemon->dhcp_buff2);
+ syslog(LOG_INFO, _("DHCP, %s will be written every %s"), daemon->lease_file, daemon->dhcp_buff2);
#endif
}
if (!(daemon->options & OPT_DEBUG) && (getuid() == 0 || geteuid() == 0))
- syslog(LOG_WARNING, "running as root");
+ syslog(LOG_WARNING, _("running as root"));
check_servers(daemon);
@@ -458,7 +468,7 @@ int main (int argc, char **argv)
if (stat(res->name, &statbuf) == -1)
{
if (!res->logged)
- syslog(LOG_WARNING, "failed to access %s: %m", res->name);
+ syslog(LOG_WARNING, _("failed to access %s: %m"), res->name);
res->logged = 1;
}
else
@@ -491,9 +501,9 @@ int main (int argc, char **argv)
{
char *err;
if ((err = dbus_init(daemon)))
- syslog(LOG_WARNING, "DBus error: %s", err);
+ syslog(LOG_WARNING, _("DBus error: %s"), err);
if (daemon->dbus)
- syslog(LOG_INFO, "connected to system DBus");
+ syslog(LOG_INFO, _("connected to system DBus"));
}
check_dbus_listeners(daemon, &rset, &wset, &eset);
#endif
@@ -504,7 +514,7 @@ int main (int argc, char **argv)
dhcp_packet(daemon, now);
}
- syslog(LOG_INFO, "exiting on receipt of SIGTERM");
+ syslog(LOG_INFO, _("exiting on receipt of SIGTERM"));
if (daemon->dhcp)
{
@@ -551,7 +561,7 @@ void clear_cache_and_reload(struct daemon *daemon, time_t now)
if (daemon->options & OPT_ETHERS)
dhcp_read_ethers(daemon);
dhcp_update_configs(daemon->dhcp_conf);
- lease_update_from_configs(daemon->dhcp_conf, daemon->domain_suffix);
+ lease_update_from_configs(daemon);
lease_update_file(0, now);
lease_update_dns(daemon);
}
diff --git a/src/dnsmasq.h b/src/dnsmasq.h
index 94ab217..a203b8d 100644
--- a/src/dnsmasq.h
+++ b/src/dnsmasq.h
@@ -37,7 +37,16 @@
#include <getopt.h>
#include "config.h"
-
+
+#define gettext_noop(S) (S)
+#ifdef NO_GETTEXT
+# define _(S) (S)
+#else
+# include <libintl.h>
+# include <locale.h>
+# define _(S) gettext(S)
+#endif
+
#include <arpa/inet.h>
#include <sys/stat.h>
#include <sys/socket.h>
@@ -288,6 +297,7 @@ struct dhcp_lease {
int clid_len; /* length of client identifier */
unsigned char *clid; /* clientid */
char *hostname, *fqdn; /* name from client-hostname option or config */
+ int auth_name; /* hostname came from config, not from client */
time_t expires; /* lease expiry */
unsigned char hwaddr[ETHER_ADDR_LEN];
struct in_addr addr;
@@ -558,16 +568,17 @@ struct dhcp_lease *lease_allocate(unsigned char *hwaddr, unsigned char *clid,
int clid_len, struct in_addr addr);
int lease_set_hwaddr(struct dhcp_lease *lease, unsigned char *hwaddr,
unsigned char *clid, int clid_len);
-void lease_set_hostname(struct dhcp_lease *lease, char *name, char *suffix);
+void lease_set_hostname(struct dhcp_lease *lease, char *name,
+ char *suffix, int auth);
void lease_set_expires(struct dhcp_lease *lease, time_t exp);
struct dhcp_lease *lease_find_by_client(unsigned char *hwaddr,
unsigned char *clid, int clid_len);
struct dhcp_lease *lease_find_by_addr(struct in_addr addr);
void lease_prune(struct dhcp_lease *target, time_t now);
-void lease_update_from_configs(struct dhcp_config *dhcp_configs, char *domain);
+void lease_update_from_configs(struct daemon *daemon);
/* rfc2131.c */
-int dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_name, unsigned int sz, time_t now);
+int dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_name, unsigned int sz, time_t now, int unicast_dest);
/* dnsmasq.c */
int icmp_ping(struct daemon *daemon, struct in_addr addr);
diff --git a/src/forward.c b/src/forward.c
index 082ee74..064f5f9 100644
--- a/src/forward.c
+++ b/src/forward.c
@@ -90,7 +90,7 @@ static void send_from(int fd, int nowild, char *packet, int len,
#endif
}
else
-#ifdef HAVE_IPV
+#ifdef HAVE_IPV6
{
struct in6_pktinfo *pkt = (struct in6_pktinfo *)CMSG_DATA(cmptr);
pkt->ipi6_ifindex = iface; /* Need iface for IPv6 to handle link-local addrs */
@@ -160,9 +160,11 @@ static unsigned short search_servers(struct daemon *daemon, time_t now, struct a
else if (serv->flags & SERV_HAS_DOMAIN)
{
unsigned int domainlen = strlen(serv->domain);
+ char *matchstart = qdomain + namelen - domainlen;
if (namelen >= domainlen &&
- hostname_isequal(qdomain + namelen - domainlen, serv->domain) &&
- domainlen >= matchlen)
+ hostname_isequal(matchstart, serv->domain) &&
+ domainlen >= matchlen &&
+ (namelen == domainlen || *(serv->domain) == '.' || *(matchstart-1) == '.' ))
{
unsigned short sflag = serv->addr.sa.sa_family == AF_INET ? F_IPV4 : F_IPV6;
*type = SERV_HAS_DOMAIN;
@@ -210,9 +212,8 @@ static unsigned short search_servers(struct daemon *daemon, time_t now, struct a
/* returns new last_server */
static void forward_query(struct daemon *daemon, int udpfd, union mysockaddr *udpaddr,
struct all_addr *dst_addr, unsigned int dst_iface,
- HEADER *header, int plen, time_t now)
+ HEADER *header, int plen, time_t now, struct frec *forward)
{
- struct frec *forward;
char *domain = NULL;
int type = 0;
struct all_addr *addrp = NULL;
@@ -224,7 +225,7 @@ static void forward_query(struct daemon *daemon, int udpfd, union mysockaddr *ud
/* may be no servers available. */
if (!daemon->servers)
forward = NULL;
- else if ((forward = lookup_frec_by_sender(ntohs(header->id), udpaddr, crc)))
+ else if (forward || (forward = lookup_frec_by_sender(ntohs(header->id), udpaddr, crc)))
{
/* retry on existing query, send to all available servers */
domain = forward->sentto->domain;
@@ -337,9 +338,12 @@ static void forward_query(struct daemon *daemon, int udpfd, union mysockaddr *ud
}
/* could not send on, return empty answer or address if known for whole domain */
- plen = setup_reply(header, (unsigned int)plen, addrp, flags, daemon->local_ttl);
- send_from(udpfd, daemon->options & OPT_NOWILD, (char *)header, plen, udpaddr, dst_addr, dst_iface);
-
+ if (udpfd != -1)
+ {
+ plen = setup_reply(header, (unsigned int)plen, addrp, flags, daemon->local_ttl);
+ send_from(udpfd, daemon->options & OPT_NOWILD, (char *)header, plen, udpaddr, dst_addr, dst_iface);
+ }
+
return;
}
@@ -371,7 +375,7 @@ static int process_reply(struct daemon *daemon, HEADER *header, time_t now,
server && !(server->flags & SERV_WARNED_RECURSIVE))
{
prettyprint_addr(&server->addr, daemon->namebuff);
- syslog(LOG_WARNING, "nameserver %s refused to do a recursive query", daemon->namebuff);
+ syslog(LOG_WARNING, _("nameserver %s refused to do a recursive query"), daemon->namebuff);
if (!(daemon->options & OPT_LOG))
server->flags |= SERV_WARNED_RECURSIVE;
}
@@ -445,40 +449,62 @@ void reply_query(struct serverfd *sfd, struct daemon *daemon, time_t now)
{
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;
+ unsigned int plen;
+ int nn;
+ /* recreate query from reply */
+ pheader = find_pseudoheader(header, n, &plen, NULL);
+ header->ancount = htons(0);
+ header->nscount = htons(0);
+ header->arcount = htons(0);
+ if ((nn = resize_packet(header, n, pheader, plen)))
+ {
+ forward->forwardall = 1;
+ 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
- {
- /* find good server by address if possible, otherwise assume the last one we sent to */
- struct server *last_server;
- 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;
- }
- }
+ {
+ 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 ((n = process_reply(daemon, header, now, forward->crc, server, (unsigned int)n)))
- {
- header->id = htons(forward->orig_id);
- header->ra = 1; /* recursion if available */
- send_from(forward->fd, daemon->options & OPT_NOWILD, daemon->packet, n,
- &forward->source, &forward->dest, forward->iface);
- }
-
+
/* 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
everything is broken */
if (forward->forwardall == 0 || --forward->forwardall == 1 ||
(header->rcode != REFUSED && header->rcode != SERVFAIL))
- forward->new_id = 0; /* cancel */
+ {
+ if ((n = process_reply(daemon, header, now, forward->crc, server, (unsigned int)n)))
+ {
+ header->id = htons(forward->orig_id);
+ header->ra = 1; /* recursion if available */
+ send_from(forward->fd, daemon->options & OPT_NOWILD, daemon->packet, n,
+ &forward->source, &forward->dest, forward->iface);
+ }
+ forward->new_id = 0; /* cancel */
+ }
}
}
@@ -650,7 +676,7 @@ void receive_query(struct listener *listen, struct daemon *daemon, time_t now)
send_from(listen->fd, daemon->options & OPT_NOWILD, (char *)header, m, &source_addr, &dst_addr, if_index);
else
forward_query(daemon, listen->fd, &source_addr, &dst_addr, if_index,
- header, n, now);
+ header, n, now, NULL);
}
static int read_write(int fd, unsigned char *packet, int size, int rw)
@@ -870,7 +896,7 @@ static struct frec *get_new_frec(time_t now)
if (!warntime || difftime(now, warntime) > LOGRATE)
{
warntime = now;
- syslog(LOG_WARNING, "forwarding table overflow: check for server loops.");
+ syslog(LOG_WARNING, _("forwarding table overflow: check for server loops."));
}
return NULL;
}
diff --git a/src/isc.c b/src/isc.c
index 6c092b6..43769e1 100644
--- a/src/isc.c
+++ b/src/isc.c
@@ -68,7 +68,7 @@ void load_dhcp(struct daemon *daemon, time_t now)
if (stat(daemon->lease_file, &statbuf) == -1)
{
if (!logged_lease)
- syslog(LOG_WARNING, "failed to access %s: %m", daemon->lease_file);
+ syslog(LOG_WARNING, _("failed to access %s: %m"), daemon->lease_file);
logged_lease = 1;
return;
}
@@ -84,11 +84,11 @@ void load_dhcp(struct daemon *daemon, time_t now)
if (!(fp = fopen (daemon->lease_file, "r")))
{
- syslog (LOG_ERR, "failed to load %s: %m", daemon->lease_file);
+ syslog (LOG_ERR, _("failed to load %s: %m"), daemon->lease_file);
return;
}
- syslog (LOG_INFO, "reading %s", daemon->lease_file);
+ syslog (LOG_INFO, _("reading %s"), daemon->lease_file);
while ((next_token(token, MAXTOK, fp)))
{
@@ -110,7 +110,7 @@ void load_dhcp(struct daemon *daemon, time_t now)
if (!canonicalise(hostname))
{
*hostname = 0;
- syslog(LOG_ERR, "bad name in %s", daemon->lease_file);
+ syslog(LOG_ERR, _("bad name in %s"), daemon->lease_file);
}
}
else if ((strcmp(token, "ends") == 0) ||
@@ -172,7 +172,7 @@ void load_dhcp(struct daemon *daemon, time_t now)
if (!daemon->domain_suffix || hostname_isequal(dot+1, daemon->domain_suffix))
{
syslog(LOG_WARNING,
- "Ignoring DHCP lease for %s because it has an illegal domain part",
+ _("Ignoring DHCP lease for %s because it has an illegal domain part"),
hostname);
continue;
}
diff --git a/src/lease.c b/src/lease.c
index 69fcc82..577ad72 100644
--- a/src/lease.c
+++ b/src/lease.c
@@ -36,7 +36,7 @@ void lease_init(struct daemon *daemon, time_t now)
/* NOTE: need a+ mode to create file if it doesn't exist */
if (!(lease_file = fopen(daemon->lease_file, "a+")))
- die("cannot open or create leases file: %s", NULL);
+ die(_("cannot open or create leases file: %s"), NULL);
/* a+ mode lease pointer at end. */
rewind(lease_file);
@@ -74,12 +74,12 @@ void lease_init(struct daemon *daemon, time_t now)
clid_len = parse_hex(daemon->packet, (unsigned char *)daemon->packet, 255, NULL);
if (!(lease = lease_allocate(hwaddr, (unsigned char *)daemon->packet, clid_len, addr)))
- die ("too many stored leases", NULL);
+ die (_("too many stored leases"), NULL);
lease->expires = expires;
if (strcmp(daemon->dhcp_buff, "*") != 0)
- lease_set_hostname(lease, daemon->dhcp_buff, daemon->domain_suffix);
+ lease_set_hostname(lease, daemon->dhcp_buff, daemon->domain_suffix, 0);
}
dns_dirty = 1;
@@ -88,17 +88,21 @@ void lease_init(struct daemon *daemon, time_t now)
daemon->lease_fd = fileno(lease_file);
}
-void lease_update_from_configs(struct dhcp_config *dhcp_configs, char *domain)
+void lease_update_from_configs(struct daemon *daemon)
{
/* changes to the config may change current leases. */
struct dhcp_lease *lease;
struct dhcp_config *config;
-
+ char *name;
+
for (lease = leases; lease; lease = lease->next)
- if ((config = find_config(dhcp_configs, NULL, lease->clid, lease->clid_len, lease->hwaddr, NULL)) &&
- (config->flags & CONFIG_NAME))
- lease_set_hostname(lease, config->hostname, domain);
+ if ((config = find_config(daemon->dhcp_conf, NULL, lease->clid, lease->clid_len, lease->hwaddr, NULL)) &&
+ (config->flags & CONFIG_NAME) &&
+ (!(config->flags & CONFIG_ADDR) || config->addr.s_addr == lease->addr.s_addr))
+ lease_set_hostname(lease, config->hostname, daemon->domain_suffix, 1);
+ else if ((name = host_from_dns(daemon, lease->addr)))
+ lease_set_hostname(lease, name, daemon->domain_suffix, 1); /* updates auth flag only */
}
void lease_update_file(int always, time_t now)
@@ -304,26 +308,32 @@ int lease_set_hwaddr(struct dhcp_lease *lease, unsigned char *hwaddr,
return 1;
}
-void lease_set_hostname(struct dhcp_lease *lease, char *name, char *suffix)
+void lease_set_hostname(struct dhcp_lease *lease, char *name, char *suffix, int auth)
{
struct dhcp_lease *lease_tmp;
char *new_name = NULL, *new_fqdn = NULL;
if (lease->hostname && name && hostname_isequal(lease->hostname, name))
- return;
+ {
+ lease->auth_name = auth;
+ return;
+ }
if (!name && !lease->hostname)
return;
/* If a machine turns up on a new net without dropping the old lease,
or two machines claim the same name, then we end up with two interfaces with
- the same name. Check for that here and remove the name from the old lease. */
+ the same name. Check for that here and remove the name from the old lease.
+ Don't allow a name from the client to override a name from dnsmasq config. */
if (name)
{
for (lease_tmp = leases; lease_tmp; lease_tmp = lease_tmp->next)
if (lease_tmp->hostname && hostname_isequal(lease_tmp->hostname, name))
{
+ if (lease_tmp->auth_name && !auth)
+ return;
new_name = lease_tmp->hostname;
lease_tmp->hostname = NULL;
if (lease_tmp->fqdn)
@@ -331,6 +341,7 @@ void lease_set_hostname(struct dhcp_lease *lease, char *name, char *suffix)
new_fqdn = lease_tmp->fqdn;
lease_tmp->fqdn = NULL;
}
+ break;
}
if (!new_name && (new_name = malloc(strlen(name) + 1)))
@@ -351,6 +362,7 @@ void lease_set_hostname(struct dhcp_lease *lease, char *name, char *suffix)
lease->hostname = new_name;
lease->fqdn = new_fqdn;
+ lease->auth_name = auth;
file_dirty = force;
dns_dirty = 1;
diff --git a/src/netlink.c b/src/netlink.c
index b8aac0f..768a062 100644
--- a/src/netlink.c
+++ b/src/netlink.c
@@ -34,7 +34,7 @@ int netlink_init(void)
addr.nl_groups = 0;
if (bind(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0)
- die("cannot bind netlink socket: %s", NULL);
+ die(_("cannot bind netlink socket: %s"), NULL);
return sock;
}
@@ -132,7 +132,7 @@ int netlink_process(struct daemon *daemon, int index, struct in_addr relay,
rta = RTA_NEXT(rta, len1);
}
- if (addr.s_addr && broadcast.s_addr)
+ if (addr.s_addr)
{
ret = complete_context(daemon, addr, ret, netmask, broadcast, relay, primary);
if (addr.s_addr == primary.s_addr)
diff --git a/src/network.c b/src/network.c
index e821f8f..98e9721 100644
--- a/src/network.c
+++ b/src/network.c
@@ -415,14 +415,14 @@ struct listener *create_bound_listeners(struct irec *interfaces, int port)
fcntl(new->tcpfd, F_SETFL, flags | O_NONBLOCK) == -1 ||
(flags = fcntl(new->fd, F_GETFL, 0)) == -1 ||
fcntl(new->fd, F_SETFL, flags | O_NONBLOCK) == -1)
- die("failed to create listening socket: %s", NULL);
+ die(_("failed to create listening socket: %s"), NULL);
#ifdef HAVE_IPV6
if (iface->addr.sa.sa_family == AF_INET6)
{
if (setsockopt(new->fd, IPV6_LEVEL, IPV6_V6ONLY, &opt, sizeof(opt)) == -1 ||
setsockopt(new->tcpfd, IPV6_LEVEL, IPV6_V6ONLY, &opt, sizeof(opt)) == -1)
- die("failed to set IPV6 options on listening socket: %s", NULL);
+ die(_("failed to set IPV6 options on listening socket: %s"), NULL);
}
#endif
@@ -441,14 +441,14 @@ struct listener *create_bound_listeners(struct irec *interfaces, int port)
{
char addrbuff[ADDRSTRLEN];
prettyprint_addr(&iface->addr, addrbuff);
- die("failed to bind listening socket for %s: %s", addrbuff);
+ die(_("failed to bind listening socket for %s: %s"), addrbuff);
}
}
else
{
listeners = new;
if (listen(new->tcpfd, 5) == -1)
- die("failed to listen on socket: %s", NULL);
+ die(_("failed to listen on socket: %s"), NULL);
}
}
@@ -518,7 +518,7 @@ void check_servers(struct daemon *daemon)
break;
if (iface)
{
- syslog(LOG_WARNING, "ignoring nameserver %s - local interface", daemon->namebuff);
+ syslog(LOG_WARNING, _("ignoring nameserver %s - local interface"), daemon->namebuff);
free(new);
continue;
}
@@ -527,7 +527,7 @@ void check_servers(struct daemon *daemon)
if (!new->sfd && !(new->sfd = allocate_sfd(&new->source_addr, &daemon->sfds)))
{
syslog(LOG_WARNING,
- "ignoring nameserver %s - cannot make/bind socket: %m", daemon->namebuff);
+ _("ignoring nameserver %s - cannot make/bind socket: %m"), daemon->namebuff);
free(new);
continue;
}
@@ -541,17 +541,17 @@ void check_servers(struct daemon *daemon)
{
char *s1, *s2;
if (new->flags & SERV_HAS_DOMAIN)
- s1 = "domain", s2 = new->domain;
+ s1 = _("domain"), s2 = new->domain;
else
- s1 = "unqualified", s2 = "domains";
+ s1 = _("unqualified"), s2 = _("domains");
if (new->flags & SERV_NO_ADDR)
- syslog(LOG_INFO, "using local addresses only for %s %s", s1, s2);
+ syslog(LOG_INFO, _("using local addresses only for %s %s"), s1, s2);
else if (!(new->flags & SERV_LITERAL_ADDRESS))
- syslog(LOG_INFO, "using nameserver %s#%d for %s %s", daemon->namebuff, port, s1, s2);
+ syslog(LOG_INFO, _("using nameserver %s#%d for %s %s"), daemon->namebuff, port, s1, s2);
}
else
- syslog(LOG_INFO, "using nameserver %s#%d", daemon->namebuff, port);
+ syslog(LOG_INFO, _("using nameserver %s#%d"), daemon->namebuff, port);
}
daemon->servers = ret;
@@ -588,11 +588,11 @@ void reload_servers(char *fname, struct daemon *daemon)
f = fopen(fname, "r");
if (!f)
{
- syslog(LOG_ERR, "failed to read %s: %m", fname);
+ syslog(LOG_ERR, _("failed to read %s: %m"), fname);
}
else
{
- syslog(LOG_INFO, "reading %s", fname);
+ syslog(LOG_INFO, _("reading %s"), fname);
while ((line = fgets(daemon->namebuff, MAXDNAME, f)))
{
union mysockaddr addr, source_addr;
diff --git a/src/option.c b/src/option.c
index d0ac22b..cfc568f 100644
--- a/src/option.c
+++ b/src/option.c
@@ -116,69 +116,69 @@ static const struct optflags optmap[] = {
{ 0, 0 }
};
-static const char * const usage =
-"Usage: dnsmasq [options]\n\n"
-#ifndef HAVE_GETOPT_LONG
-"Use short options only on the command line.\n"
-#endif
-"Valid options are :\n"
-"-a, --listen-address=ipaddr Specify local address(es) to listen on.\n"
-"-A, --address=/domain/ipaddr Return ipaddr for all hosts in specified domains.\n"
-"-b, --bogus-priv Fake reverse lookups for RFC1918 private address ranges.\n"
-"-B, --bogus-nxdomain=ipaddr Treat ipaddr as NXDOMAIN (defeats Verisign wildcard).\n"
-"-c, --cache-size=cachesize Specify the size of the cache in entries (defaults to %d).\n"
-"-C, --conf-file=path Specify configuration file (defaults to " CONFFILE ").\n"
-"-d, --no-daemon Do NOT fork into the background: run in debug mode.\n"
-"-D, --domain-needed Do NOT forward queries with no domain part.\n"
-"-e, --selfmx Return self-pointing MX records for local hosts.\n"
-"-E, --expand-hosts Expand simple names in /etc/hosts with domain-suffix.\n"
-"-f, --filterwin2k Don't forward spurious DNS requests from Windows hosts.\n"
-"-F, --dhcp-range=ipaddr,ipaddr,time Enable DHCP in the range given with lease duration.\n"
-"-g, --group=groupname Change to this group after startup (defaults to " CHGRP ").\n"
-"-G, --dhcp-host=<hostspec> Set address or hostname for a specified machine.\n"
-"-h, --no-hosts Do NOT load " HOSTSFILE " file.\n"
-"-H, --addn-hosts=path Specify a hosts file to be read in addition to " HOSTSFILE ".\n"
-"-i, --interface=interface Specify interface(s) to listen on.\n"
-"-I, --except-interface=int Specify interface(s) NOT to listen on.\n"
-"-j, --dhcp-userclass=<id>,<class> Map DHCP user class to option set.\n"
-"-J, --dhcp-ignore=<id> Don't do DHCP for hosts in option set.\n"
-"-k, --keep-in-foreground Do NOT fork into the background, do NOT run in debug mode.\n"
-"-K, --dhcp-authoritative Assume we are the only DHCP server on the local network.\n"
-"-l, --dhcp-leasefile=path Specify where to store DHCP leases (defaults to " LEASEFILE ").\n"
-"-L, --localmx Return MX records for local hosts.\n"
-"-m, --mx-host=host_name,target,pref Specify an MX record.\n"
-"-M, --dhcp-boot=<bootp opts> Specify BOOTP options to DHCP server.\n"
-"-n, --no-poll Do NOT poll " RESOLVFILE " file, reload only on SIGHUP.\n"
-"-N, --no-negcache Do NOT cache failed search results.\n"
-"-o, --strict-order Use nameservers strictly in the order given in " RESOLVFILE ".\n"
-"-O, --dhcp-option=<optspec> Set extra options to be set to DHCP clients.\n"
-"-p, --port=number Specify port to listen for DNS requests on (defaults to 53).\n"
-"-P, --edns-packet-max=<size> Maximum supported UDP packet size for EDNS.0 (defaults to %d).\n"
-"-q, --log-queries Log queries.\n"
-"-Q, --query-port=number Force the originating port for upstream queries.\n"
-"-R, --no-resolv Do NOT read resolv.conf.\n"
-"-r, --resolv-file=path Specify path to resolv.conf (defaults to " RESOLVFILE ").\n"
-"-S, --server=/domain/ipaddr Specify address(es) of upstream servers with optional domains.\n"
-" --local=/domain/ Never forward queries to specified domains.\n"
-"-s, --domain=domain Specify the domain to be assigned in DHCP leases.\n"
-"-t, --mx-target=host_name Specify default target in an MX record.\n"
-"-T, --local-ttl=time Specify time-to-live in seconds for replies from /etc/hosts.\n"
-"-u, --user=username Change to this user after startup. (defaults to " CHUSER ").\n"
-"-U, --dhcp-vendorclass=<id>,<class> Map DHCP vendor class to option set.\n"
-"-v, --version Display dnsmasq version and copyright information.\n"
-"-V, --alias=addr,addr,mask Translate IPv4 addresses from upstream servers.\n"
-"-W, --srv-host=name,target,... Specify a SRV record.\n"
-"-w, --help Display this message.\n"
-"-x, --pid-file=path Specify path of PID file. (defaults to " RUNFILE ").\n"
-"-X, --dhcp-lease-max=number Specify maximum number of DHCP leases (defaults to %d).\n"
-"-y, --localise-queries Answer DNS queries based on the interface a query was sent to.\n"
-"-Y --txt-record=name,txt.... Specify TXT DNS record.\n"
-"-z, --bind-interfaces Bind only to interfaces in use.\n"
-"-Z, --read-ethers Read DHCP static host information from " ETHERSFILE ".\n"
-"-1, --enable-dbus Enable the DBus interface for setting upstream servers, etc.\n"
-"-2, --no-dhcp-interface=interface Do not provide DHCP on this interface, only provide DNS.\n"
-"-3, --bootp-dynamic Enable dynamic address allocation for bootp.\n"
-"\n";
+static const struct {
+ char * const flag;
+ char * const desc;
+ char * const arg;
+} usage[] = {
+ { "-a, --listen-address=ipaddr", gettext_noop("Specify local address(es) to listen on."), NULL },
+ { "-A, --address=/domain/ipaddr", gettext_noop("Return ipaddr for all hosts in specified domains."), NULL },
+ { "-b, --bogus-priv", gettext_noop("Fake reverse lookups for RFC1918 private address ranges."), NULL },
+ { "-B, --bogus-nxdomain=ipaddr", gettext_noop("Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."), NULL },
+ { "-c, --cache-size=cachesize", gettext_noop("Specify the size of the cache in entries (defaults to %s)."), "$" },
+ { "-C, --conf-file=path", gettext_noop("Specify configuration file (defaults to %s)."), CONFFILE },
+ { "-d, --no-daemon", gettext_noop("Do NOT fork into the background: run in debug mode."), NULL },
+ { "-D, --domain-needed", gettext_noop("Do NOT forward queries with no domain part."), NULL },
+ { "-e, --selfmx", gettext_noop("Return self-pointing MX records for local hosts."), NULL },
+ { "-E, --expand-hosts", gettext_noop("Expand simple names in /etc/hosts with domain-suffix."), NULL },
+ { "-f, --filterwin2k", gettext_noop("Don't forward spurious DNS requests from Windows hosts."), NULL },
+ { "-F, --dhcp-range=ipaddr,ipaddr,time", gettext_noop("Enable DHCP in the range given with lease duration."), NULL },
+ { "-g, --group=groupname", gettext_noop("Change to this group after startup (defaults to %s)."), CHGRP },
+ { "-G, --dhcp-host=<hostspec>", gettext_noop("Set address or hostname for a specified machine."), NULL },
+ { "-h, --no-hosts", gettext_noop("Do NOT load %s file."), HOSTSFILE },
+ { "-H, --addn-hosts=path", gettext_noop("Specify a hosts file to be read in addition to %s."), HOSTSFILE },
+ { "-i, --interface=interface", gettext_noop("Specify interface(s) to listen on."), NULL },
+ { "-I, --except-interface=int", gettext_noop("Specify interface(s) NOT to listen on.") , NULL },
+ { "-j, --dhcp-userclass=<id>,<class>", gettext_noop("Map DHCP user class to option set."), NULL },
+ { "-J, --dhcp-ignore=<id>", gettext_noop("Don't do DHCP for hosts in option set."), NULL },
+ { "-k, --keep-in-foreground", gettext_noop("Do NOT fork into the background, do NOT run in debug mode."), NULL },
+ { "-K, --dhcp-authoritative", gettext_noop("Assume we are the only DHCP server on the local network."), NULL },
+ { "-l, --dhcp-leasefile=path", gettext_noop("Specify where to store DHCP leases (defaults to %s)."), LEASEFILE },
+ { "-L, --localmx", gettext_noop("Return MX records for local hosts."), NULL },
+ { "-m, --mx-host=host_name,target,pref", gettext_noop("Specify an MX record."), NULL },
+ { "-M, --dhcp-boot=<bootp opts>", gettext_noop("Specify BOOTP options to DHCP server."), NULL },
+ { "-n, --no-poll", gettext_noop("Do NOT poll %s file, reload only on SIGHUP."), RESOLVFILE },
+ { "-N, --no-negcache", gettext_noop("Do NOT cache failed search results."), NULL },
+ { "-o, --strict-order", gettext_noop("Use nameservers strictly in the order given in %s."), RESOLVFILE },
+ { "-O, --dhcp-option=<optspec>", gettext_noop("Set extra options to be set to DHCP clients."), NULL },
+ { "-p, --port=number", gettext_noop("Specify port to listen for DNS requests on (defaults to 53)."), NULL },
+ { "-P, --edns-packet-max=<size>", gettext_noop("Maximum supported UDP packet size for EDNS.0 (defaults to %s)."), "*" },
+ { "-q, --log-queries", gettext_noop("Log queries."), NULL },
+ { "-Q, --query-port=number", gettext_noop("Force the originating port for upstream queries."), NULL },
+ { "-R, --no-resolv", gettext_noop("Do NOT read resolv.conf."), NULL },
+ { "-r, --resolv-file=path", gettext_noop("Specify path to resolv.conf (defaults to %s)."), RESOLVFILE },
+ { "-S, --server=/domain/ipaddr", gettext_noop("Specify address(es) of upstream servers with optional domains."), NULL },
+ { " --local=/domain/", gettext_noop("Never forward queries to specified domains."), NULL },
+ { "-s, --domain=domain", gettext_noop("Specify the domain to be assigned in DHCP leases."), NULL },
+ { "-t, --mx-target=host_name", gettext_noop("Specify default target in an MX record."), NULL },
+ { "-T, --local-ttl=time", gettext_noop("Specify time-to-live in seconds for replies from /etc/hosts."), NULL },
+ { "-u, --user=username", gettext_noop("Change to this user after startup. (defaults to %s)."), CHUSER },
+ { "-U, --dhcp-vendorclass=<id>,<class>", gettext_noop("Map DHCP vendor class to option set."), NULL },
+ { "-v, --version", gettext_noop("Display dnsmasq version and copyright information."), NULL },
+ { "-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, --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 },
+ { "-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 },
+ { NULL, NULL, NULL }
+};
/* We hide metacharaters in quoted strings by mapping them into the ASCII control
character space. Note that the \0, \t \a \b \r and \n characters are carefully placed in the
@@ -187,7 +187,7 @@ static const char * const usage =
The transformation gets undone by opt_canonicalise, atoi_check and safe_string_alloc, and a
couple of other places. */
-static char meta[] = "\000123456\a\b\t\n78\r90abcdefABCDEF:,.";
+static const char meta[] = "\000123456\a\b\t\n78\r90abcdefABCDEF:,.";
static char hide_meta(char c)
{
@@ -291,6 +291,7 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
char *p, *arg, *comma, *file_name_save = NULL, *conffile = CONFFILE;
int hosts_index = 1, conffile_set = 0;
int line_save = 0, lineno = 0;
+
opterr = 0;
memset(daemon, 0, sizeof(struct daemon));
@@ -390,7 +391,7 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
lastquote = p - buff;
}
else
- complain("missing \"", lineno, conffile);
+ complain(_("missing \""), lineno, conffile);
}
if (white && *p == '#')
@@ -419,7 +420,7 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
option = opts[i].val;
if (!option)
{
- complain("bad option", lineno, conffile);
+ complain(_("bad option"), lineno, conffile);
continue;
}
}
@@ -436,23 +437,46 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
if (errno == ENOENT && !conffile_set)
break; /* No conffile, all done. */
else
- die("cannot read %s: %s", conffile);
+ die(_("cannot read %s: %s"), conffile);
}
}
if (!f && option == 'w')
{
- printf (usage, CACHESIZ, EDNS_PKTSZ, MAXLEASES);
+ printf(_("Usage: dnsmasq [options]\n\n"));
+#ifndef HAVE_GETOPT_LONG
+ printf(_("Use short options only on the command line.\n"));
+#endif
+ printf(_("Valid options are :\n"));
+
+ for (i = 0; usage[i].flag; i++)
+ {
+ 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
+ strcpy(buff, usage[i].arg);
+ }
+ printf("%-36.36s", usage[i].flag);
+ printf(_(usage[i].desc), buff);
+ printf("\n");
+ }
+
exit(0);
}
if (!f && option == 'v')
{
- printf("Dnsmasq version %s %s\n", VERSION, COPYRIGHT);
- printf("Compile time options %s\n\n", compile_opts);
- printf("This software comes with ABSOLUTELY NO WARRANTY.\n");
- printf("Dnsmasq is free software, and you are welcome to redistribute it\n");
- printf("under the terms of the GNU General Public License, version 2.\n");
+ printf(_("Dnsmasq version %s %s\n"), VERSION, COPYRIGHT);
+ printf(_("Compile time options %s\n\n"), compile_opts);
+ printf(_("This software comes with ABSOLUTELY NO WARRANTY.\n"));
+ printf(_("Dnsmasq is free software, and you are welcome to redistribute it\n"));
+ printf(_("under the terms of the GNU General Public License, version 2.\n"));
exit(0);
}
@@ -462,7 +486,7 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
daemon->options |= optmap[i].flag;
option = 0;
if (f && arg)
- complain("extraneous parameter", lineno, conffile);
+ complain(_("extraneous parameter"), lineno, conffile);
break;
}
@@ -470,7 +494,7 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
{
if (f && !arg)
{
- complain("missing parameter", lineno, conffile);
+ complain(_("missing parameter"), lineno, conffile);
continue;
}
@@ -487,7 +511,7 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
/* nest conffiles one deep */
if (file_save)
{
- complain("nested includes not allowed", lineno, conffile);
+ complain(_("nested includes not allowed"), lineno, conffile);
continue;
}
file_name_save = conffile;
@@ -547,7 +571,7 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
if (!atoi_check(prefstr, &pref))
{
option = '?';
- problem = "bad MX preference";
+ problem = _("bad MX preference");
break;
}
}
@@ -556,7 +580,7 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
if (!canonicalise_opt(arg) || (comma && !canonicalise_opt(comma)))
{
option = '?';
- problem = "bad MX name";
+ problem = _("bad MX name");
break;
}
@@ -574,7 +598,7 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
if (!canonicalise_opt(arg))
{
option = '?';
- problem = "bad MX target";
+ problem = _("bad MX target");
}
else
daemon->mxtarget = safe_string_alloc(arg);
@@ -776,7 +800,7 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
if (!atoi_check(portno+1, &source_port))
{
option = '?';
- problem = "bad port";
+ problem = _("bad port");
}
}
}
@@ -787,7 +811,7 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
if (!atoi_check(portno+1, &serv_port))
{
option = '?';
- problem = "bad port";
+ problem = _("bad port");
}
}
@@ -927,7 +951,7 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
new->netid.net = NULL;
new->flags = 0;
- problem = "bad dhcp-range";
+ problem = _("bad dhcp-range");
if (!arg)
{
@@ -987,7 +1011,7 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
leasepos = 3;
if (!is_same_net(new->start, new->end, new->netmask))
{
- problem = "inconsistent DHCP range";
+ problem = _("inconsistent DHCP range");
option = '?';
}
}
@@ -1174,7 +1198,7 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
if (option == '?')
{
- problem = "bad dhcp-host";
+ problem = _("bad dhcp-host");
if (new->flags & CONFIG_NAME)
free(new->hostname);
if (new->flags & CONFIG_CLID)
@@ -1234,7 +1258,7 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
if (!arg || (new->opt = atoi(arg)) == 0)
{
option = '?';
- problem = "bad dhcp-option";
+ problem = _("bad dhcp-option");
}
else if (comma && new->opt == 119 && !new->vendor_class)
{
@@ -1252,12 +1276,12 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
if (!canonicalise_opt(arg))
{
option = '?';
- problem = "bad domain in dhcp-option";
+ problem = _("bad domain in dhcp-option");
break;
}
if (!(p = realloc(p, len + strlen(arg) + 2)))
- die("could not get memory", NULL);
+ die(_("could not get memory"), NULL);
q = p + len;
/* add string on the end in RFC1035 format */
@@ -1398,7 +1422,7 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
if (new->len > 255)
{
option = '?';
- problem = "dhcp-option too long";
+ problem = _("dhcp-option too long");
}
if (option == '?')
@@ -1578,7 +1602,7 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
if (!canonicalise_opt(arg))
{
option = '?';
- problem = "bad TXT record";
+ problem = _("bad TXT record");
break;
}
@@ -1610,7 +1634,7 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
if (option == '?')
{
- problem = "TXT record string too long";
+ problem = _("TXT record string too long");
break;
}
@@ -1649,7 +1673,7 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
if (!canonicalise_opt(arg))
{
option = '?';
- problem = "bad SRV record";
+ problem = _("bad SRV record");
break;
}
name = safe_string_alloc(arg);
@@ -1662,7 +1686,7 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
if (!canonicalise_opt(arg))
{
option = '?';
- problem = "bad SRV target";
+ problem = _("bad SRV target");
break;
}
target = safe_string_alloc(arg);
@@ -1674,7 +1698,7 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
if (!atoi_check(arg, &port))
{
option = '?';
- problem = "invalid port number";
+ problem = _("invalid port number");
break;
}
if (comma)
@@ -1685,7 +1709,7 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
if (!atoi_check(arg, &priority))
{
option = '?';
- problem = "invalid priority";
+ problem = _("invalid priority");
break;
}
if (comma)
@@ -1696,7 +1720,7 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
if (!atoi_check(arg, &weight))
{
option = '?';
- problem = "invalid weight";
+ problem = _("invalid weight");
break;
}
}
@@ -1721,13 +1745,15 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
if (option == '?')
{
if (f)
- complain( problem ? problem : "error", lineno, conffile);
+ complain( problem ? problem : _("error"), lineno, conffile);
else
+ die(_("bad command line options: %s."),
#ifdef HAVE_GETOPT_LONG
- die("bad command line options: %s.", problem ? problem : "try --help");
+ problem ? problem : "try --help"
#else
- die("bad command line options: %s.", problem ? problem : "try -w");
+ problem ? problem : "try -w"
#endif
+ );
}
}
@@ -1765,7 +1791,7 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
struct mx_srv_record *mx;
if (gethostname(buff, MAXDNAME) == -1)
- die("cannot get host-name: %s", NULL);
+ die(_("cannot get host-name: %s"), NULL);
for (mx = daemon->mxnames; mx; mx = mx->next)
if (!mx->issrv && hostname_isequal(mx->name, buff))
@@ -1794,17 +1820,17 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
else if (daemon->resolv_files &&
(daemon->resolv_files)->next &&
(daemon->options & OPT_NO_POLL))
- die("only one resolv.conf file allowed in no-poll mode.", NULL);
+ die(_("only one resolv.conf file allowed in no-poll mode."), NULL);
if (daemon->options & OPT_RESOLV_DOMAIN)
{
char *line;
if (!daemon->resolv_files || (daemon->resolv_files)->next)
- die("must have exactly one resolv.conf to read domain from.", NULL);
+ die(_("must have exactly one resolv.conf to read domain from."), NULL);
if (!(f = fopen((daemon->resolv_files)->name, "r")))
- die("failed to read %s: %m", (daemon->resolv_files)->name);
+ die(_("failed to read %s: %m"), (daemon->resolv_files)->name);
while ((line = fgets(buff, MAXDNAME, f)))
{
@@ -1822,7 +1848,7 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
fclose(f);
if (!daemon->domain_suffix)
- die("no search directive found in %s", (daemon->resolv_files)->name);
+ die(_("no search directive found in %s"), (daemon->resolv_files)->name);
}
if (daemon->domain_suffix)
diff --git a/src/rfc2131.c b/src/rfc2131.c
index eaf492e..01620b9 100644
--- a/src/rfc2131.c
+++ b/src/rfc2131.c
@@ -78,7 +78,8 @@ static unsigned char *do_req_options(struct dhcp_context *context,
struct in_addr subnet_addr,
unsigned char fqdn_flags);
-int dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_name, unsigned int sz, time_t now)
+int dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_name,
+ unsigned int sz, time_t now, int unicast_dest)
{
unsigned char *opt, *clid = NULL;
struct dhcp_lease *ltmp, *lease = NULL;
@@ -89,6 +90,7 @@ int dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_
unsigned char *p = mess->options + sizeof(u32); /* skip cookie */
unsigned char *end = (unsigned char *)(daemon->dhcp_packet + 1);
char *hostname = NULL, *offer_hostname = NULL, *client_hostname = NULL;
+ int hostname_auth = 0;
unsigned char *req_options = NULL;
char *message = NULL;
unsigned int time;
@@ -166,7 +168,7 @@ int dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_
if (mess->htype != ARPHRD_ETHER && mess->htype != ARPHRD_IEEE802)
#endif
{
- syslog(LOG_WARNING, "DHCP request for unsupported hardware type (%d) recieved on %s",
+ syslog(LOG_WARNING, _("DHCP request for unsupported hardware type (%d) recieved on %s"),
mess->htype, iface_name);
return 0;
}
@@ -215,8 +217,8 @@ int dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_
if (!context)
{
- syslog(LOG_WARNING, "no address range available for DHCP request %s %s",
- subnet_addr.s_addr ? "with subnet selector" : "via",
+ syslog(LOG_WARNING, _("no address range available for DHCP request %s %s"),
+ subnet_addr.s_addr ? _("with subnet selector") : _("via"),
subnet_addr.s_addr ? inet_ntoa(subnet_addr) : (mess->giaddr.s_addr ? inet_ntoa(mess->giaddr) : iface_name));
return 0;
}
@@ -233,7 +235,7 @@ int dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_
struct in_addr *logaddr = NULL;
if (have_config(config, CONFIG_DISABLE))
- message = "disabled";
+ message = _("disabled");
end = mess->options + 64; /* BOOTP vend area is only 64 bytes */
@@ -257,7 +259,7 @@ int dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_
for (id_list = daemon->dhcp_ignore; id_list; id_list = id_list->next)
if (match_netid(id_list->list, netid))
- message = "disabled";
+ message = _("disabled");
if (!message)
{
@@ -267,20 +269,20 @@ int dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_
mess->yiaddr = config->addr;
if ((lease = lease_find_by_addr(config->addr)) &&
memcmp(lease->hwaddr, chaddr, ETHER_ADDR_LEN) != 0)
- message = "address in use";
+ message = _("address in use");
}
else if (!(daemon->options & OPT_BOOTP_DYNAMIC))
- message = "no address configured";
+ message = _("no address configured");
else
{
if ((lease = lease_find_by_client(mess->chaddr, NULL, 0)))
mess->yiaddr = lease->addr;
else if (!address_allocate(context, daemon, &mess->yiaddr, chaddr, netid, now))
- message = "no address available";
+ message = _("no address available");
}
if (!message && !lease && (!(lease = lease_allocate(chaddr, NULL, 0, mess->yiaddr))))
- message = "no leases left";
+ message = _("no leases left");
if (!message)
{
@@ -295,7 +297,7 @@ int dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_
lease_set_hwaddr(lease, chaddr, NULL, 0);
if (hostname)
- lease_set_hostname(lease, hostname, daemon->domain_suffix);
+ lease_set_hostname(lease, hostname, daemon->domain_suffix, 1);
lease_set_expires(lease, 0); /* infinite lease */
p = do_req_options(context, p, end, NULL, daemon,
@@ -370,6 +372,7 @@ int dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_
if (have_config(config, CONFIG_NAME))
{
hostname = config->hostname;
+ hostname_auth = 1;
/* 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))
@@ -475,7 +478,7 @@ int dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_
if (have_config(config, CONFIG_ADDR) &&
config->addr.s_addr == option_addr(opt).s_addr)
{
- syslog(LOG_WARNING, "disabling DHCP static address %s", inet_ntoa(config->addr));
+ syslog(LOG_WARNING, _("disabling DHCP static address %s"), inet_ntoa(config->addr));
config->flags &= ~CONFIG_ADDR ;
}
else
@@ -493,7 +496,7 @@ int dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_
if (lease && lease->addr.s_addr == mess->ciaddr.s_addr)
lease_prune(lease, now);
else
- message = "unknown lease";
+ message = _("unknown lease");
log_packet("RELEASE", &mess->ciaddr, chaddr, iface_name, message);
@@ -506,7 +509,7 @@ int dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_
if ((opt = option_find(mess, sz, OPTION_REQUESTED_IP, INADDRSZ)))
addr = option_addr(opt);
if (ignore || have_config(config, CONFIG_DISABLE))
- message = "ignored";
+ message = _("ignored");
else if (have_config(config, CONFIG_ADDR) &&
(!(ltmp = lease_find_by_addr(config->addr)) || ltmp == lease))
mess->yiaddr = config->addr;
@@ -516,7 +519,7 @@ int dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_
!config_find_by_address(daemon->dhcp_conf, addr))
mess->yiaddr = addr;
else if (!address_allocate(context, daemon, &mess->yiaddr, chaddr, netid, now))
- message = "no address available";
+ message = _("no address available");
log_packet("DISCOVER", opt ? &addr : NULL, chaddr, iface_name, message);
}
@@ -586,7 +589,7 @@ int dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_
return 0;
if (lease && lease->addr.s_addr != mess->yiaddr.s_addr)
- message = "wrong address";
+ message = _("wrong address");
}
}
else
@@ -594,8 +597,11 @@ int dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_
/* RENEWING or REBINDING */
/* Must exist a lease for this address */
if (!lease || mess->ciaddr.s_addr != lease->addr.s_addr)
- message = "lease not found";
-
+ {
+ message = _("lease not found");
+ /* ensure we broadcast NAK */
+ unicast_dest = 0;
+ }
/* desynchronise renewals */
fuzz = rand16();
mess->yiaddr = mess->ciaddr;
@@ -609,12 +615,16 @@ int dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_
/* If a machine moves networks whilst it has a lease, we catch that here. */
if (!is_same_net(mess->yiaddr, context->start, context->netmask))
- message = "wrong network";
-
+ {
+ message = _("wrong network");
+ /* ensure we broadcast NAK */
+ unicast_dest = 0;
+ }
+
/* Check for renewal of a lease which is outside the allowed range. */
else if (!address_available(context, mess->yiaddr) &&
(!have_config(config, CONFIG_ADDR) || config->addr.s_addr != mess->yiaddr.s_addr))
- message = "address not available";
+ message = _("address not available");
/* 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
@@ -623,35 +633,45 @@ int dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_
else if (have_config(config, CONFIG_ADDR) &&
config->addr.s_addr != mess->yiaddr.s_addr &&
(!(ltmp = lease_find_by_addr(config->addr)) || ltmp == lease))
- message = "static lease available";
+ message = _("static lease available");
/* Check to see if the address is reserved as a static address for another host */
else if ((addr_config = config_find_by_address(daemon->dhcp_conf, mess->yiaddr)) && addr_config != config)
- message = "address reserved";
+ message = _("address reserved");
else if ((ltmp = lease_find_by_addr(mess->yiaddr)) && ltmp != lease)
- message = "address in use";
+ message = _("address in use");
else if (!lease && !(lease = lease_allocate(chaddr, clid, clid_len, mess->yiaddr)))
- message = "no leases left";
+ message = _("no leases left");
}
if (message)
{
log_packet("NAK", &mess->yiaddr, chaddr, iface_name, message);
- mess->siaddr.s_addr = mess->yiaddr.s_addr = mess->ciaddr.s_addr = 0;
+ mess->siaddr.s_addr = mess->yiaddr.s_addr = 0;
bootp_option_put(mess, NULL, NULL);
p = option_put(p, end, OPTION_MESSAGE_TYPE, 1, DHCPNAK);
p = option_put(p, end, OPTION_SERVER_IDENTIFIER, INADDRSZ, ntohl(context->local.s_addr));
p = option_put_string(p, end, OPTION_MESSAGE, message);
- mess->flags |= htons(0x8000); /* broadcast */
+ /* This fixes a problem with the DHCP spec, broadcasting a NAK to a host on
+ a distant subnet which unicast a REQ to us won't work. */
+ if (!unicast_dest || mess->giaddr.s_addr != 0 ||
+ mess->ciaddr.s_addr == 0 || is_same_net(context->local, mess->ciaddr, context->netmask))
+ {
+ mess->flags |= htons(0x8000); /* broadcast */
+ mess->ciaddr.s_addr = 0;
+ }
}
else
{
- if (!hostname)
- hostname = host_from_dns(daemon, mess->yiaddr);
-
+ if (!hostname_auth && (client_hostname = host_from_dns(daemon, mess->yiaddr)))
+ {
+ hostname = client_hostname;
+ hostname_auth = 1;
+ }
+
log_packet("ACK", &mess->yiaddr, chaddr, iface_name, hostname);
context = narrow_context(context, mess->yiaddr);
@@ -671,7 +691,7 @@ int dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_
lease_set_hwaddr(lease, chaddr, clid, clid_len);
if (hostname)
- lease_set_hostname(lease, hostname, daemon->domain_suffix);
+ lease_set_hostname(lease, hostname, daemon->domain_suffix, hostname_auth);
lease_set_expires(lease, time == 0xffffffff ? 0 : now + (time_t)time);
mess->siaddr = context->local;
@@ -695,7 +715,7 @@ int dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_
case DHCPINFORM:
if (ignore || have_config(config, CONFIG_DISABLE))
- message = "ignored";
+ message = _("ignored");
log_packet("INFORM", &mess->ciaddr, chaddr, iface_name, message);
@@ -809,12 +829,24 @@ static void bootp_option_put(struct dhcp_packet *mess,
}
}
+static int check_space(unsigned char *p, unsigned char *end, int len, int opt)
+{
+ /* always keep one octet space for the END option. */
+ if (p + len + 3 >= end)
+ {
+ syslog(LOG_WARNING, _("cannot send DHCP option %d: no space left in packet"), opt);
+ return 0;
+ }
+
+ return 1;
+}
+
+
static unsigned char *option_put(unsigned char *p, unsigned char *end, int opt, int len, unsigned int val)
{
int i;
- /* always keep one octet space for the END option. */
- if (p + len + 3 < end)
+ if (check_space(p, end, len, opt))
{
*(p++) = opt;
*(p++) = len;
@@ -838,7 +870,7 @@ static unsigned char *option_put_string(unsigned char *p, unsigned char *end, in
{
size_t len = strlen(string);
- if (p + len + 3 < end)
+ if (check_space(p, end, len, opt))
{
*(p++) = opt;
*(p++) = len;
@@ -941,9 +973,9 @@ static struct dhcp_opt *option_find2(struct dhcp_netid *netid, struct dhcp_opt *
static unsigned char *do_opt(struct dhcp_opt *opt, unsigned char *p, unsigned char *end, struct in_addr local)
{
- if (p + opt->len + 3 >= end)
+ if (!check_space(p, end, opt->len, opt->opt))
return p;
-
+
*(p++) = opt->opt;
*(p++) = opt->len;
@@ -1097,7 +1129,7 @@ static unsigned char *do_req_options(struct dhcp_context *context,
if (!opt->netid || match_netid(opt->netid, netid))
{
if (vendor_class && strcmp(vendor_class, (char *)opt->vendor_class) != 0)
- syslog(LOG_WARNING, "More than one vendor class matches, using %s", vendor_class);
+ syslog(LOG_WARNING, _("More than one vendor class matches, using %s"), vendor_class);
else
vendor_class = (char *)opt->vendor_class;
}
diff --git a/src/util.c b/src/util.c
index ea91f56..730075d 100644
--- a/src/util.c
+++ b/src/util.c
@@ -146,7 +146,7 @@ void *safe_malloc(size_t size)
void *ret = malloc(size);
if (!ret)
- die("could not get memory", NULL);
+ die(_("could not get memory"), NULL);
return ret;
}
@@ -169,14 +169,14 @@ void complain(char *message, int lineno, char *file)
{
char buff[256];
- sprintf(buff, "%s at line %d of %%s", message, lineno);
+ sprintf(buff, _("%s at line %d of %%s"), message, lineno);
log_err(buff, file);
}
void die(char *message, char *arg1)
{
log_err(message, arg1);
- syslog(LOG_CRIT, "FAILED to start up");
+ syslog(LOG_CRIT, _("FAILED to start up"));
exit(1);
}
@@ -302,7 +302,7 @@ int prettyprint_addr(union mysockaddr *addr, char *buf)
void prettyprint_time(char *buf, unsigned int t)
{
if (t == 0xffffffff)
- sprintf(buf, "infinite");
+ sprintf(buf, _("infinite"));
else
{
unsigned int x, p = 0;