Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cdeda28f82 | ||
|
|
aedef83058 | ||
|
|
e17fb629a2 | ||
|
|
b8187c80a8 |
150
CHANGELOG
150
CHANGELOG
@@ -1544,3 +1544,153 @@ 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.
|
||||
|
||||
version 2.25
|
||||
Fixed RedHat spec file for FC4 - thanks to Werner Hoelzl
|
||||
and Andrew Bird.
|
||||
|
||||
Fixed Suse spec file - thanks to Steven Springl.
|
||||
|
||||
Fixed DHCP bug when two distict subnets are on the same
|
||||
physical interface. Thanks to Pawel Zawora for finding
|
||||
this and suggesting the fix.
|
||||
|
||||
Added logging to make it explicit when dnsmasq falls back
|
||||
from using RT-netlink sockets to the old ioctl API for
|
||||
getting information about interfaces. Doing this
|
||||
completely silently made remote debugging hard.
|
||||
|
||||
Merged uclibc build fixes from the OpenWRT package into
|
||||
src/config.h
|
||||
|
||||
Added Norwegian translation - thanks to Jan Erik Askildt.
|
||||
|
||||
version 2.26
|
||||
Fixed SuSe rpm patch problem - thanks to Steven Springl.
|
||||
|
||||
Fixed crash when attempting to send a DHCP NAK to a host
|
||||
which believes it has a lease on an unknown
|
||||
network. Thanks to Lutz Pressler for the bug report and
|
||||
patch.
|
||||
|
||||
version 2.27
|
||||
Tweaked DHCP behaviour when a client attempts to renew a lease
|
||||
which dnsmasq doesn't know about. Previously that would always
|
||||
result in a DHCPNAK. Now, in dhcp-authoritative mode, the
|
||||
lease will be created, if it's legal. This makes dnsmasq work
|
||||
better if the lease database is lost, for example on an OpenWRT
|
||||
system which reboots. Thanks to Stephen Rose for work on
|
||||
this.
|
||||
|
||||
Added the ability to support RFC-3442 style destination
|
||||
descriptors in dhcp-options. This makes classless static
|
||||
routes easy to do, eg dhcp-option=121,192.168.1.0/24,1.2.3.4
|
||||
|
||||
Added error-checking to the code which writes the lease
|
||||
file. If this fails for any reason, an error is logged,
|
||||
and a retry occurs after one minute. This should improve
|
||||
things eg when a filesystem is full. Thanks to Jens Holze
|
||||
for the bug report.
|
||||
|
||||
Fixed breakage of the "/#/ matches any domain" facility
|
||||
which happened in 2.24. Thanks to Peter Surda for the bug
|
||||
report.
|
||||
|
||||
Use "size_t" and "ssize_t" types where appropriate in the
|
||||
code.
|
||||
|
||||
Fix buggy CNAME handling in mixed IPv4 and IPv6
|
||||
queries. Thanks to Andreas Pelme for help finding that.
|
||||
|
||||
Added some code to attempt to re-transmit DNS queries when
|
||||
a network interface comes up. This helps on DoD links,
|
||||
where frequently the packet which triggers dialling is
|
||||
a DNS query, which then gets lost. By re-sending, we can
|
||||
avoid the lookup failing. This function is only active
|
||||
when netlink support is compiled in, and therefore only
|
||||
under Linux. Thanks to Jean Wolter for help with this.
|
||||
|
||||
Tweaked the DHCP tag-matching code to work correctly with
|
||||
NOT-tag conditions. Thanks to Lutz Pressler for finding
|
||||
the bug.
|
||||
|
||||
Generalised netid-tag matching in dhcp-range statements to
|
||||
allow more than one tag.
|
||||
|
||||
Added --dhcp-mac to do MAC address matching in the same
|
||||
way as vendorclass and userclass matching. A good
|
||||
suggestion from Lutz Pressler.
|
||||
|
||||
Add workaround for buggy early Microsoft DHCP clients
|
||||
which need zero-termination in string options.
|
||||
Thanks to Fabiano Pires for help with this.
|
||||
|
||||
Generalised the DHCP code to cope with any hardware
|
||||
address type, at least on Linux. *BSD is still limited to
|
||||
ethernet only.
|
||||
|
||||
13
FAQ
13
FAQ
@@ -357,6 +357,19 @@ A: Probably the nameserver is an authoritative nameserver for a
|
||||
may work for sometime with a broken upstream nameserver
|
||||
configuration.
|
||||
|
||||
|
||||
Q: Does the dnsmasq DHCP server probe addresses before allocating
|
||||
them, as recommended in RFC2131?
|
||||
|
||||
A: Yes, dynmaically allocated IP addresses are checked by sending an
|
||||
ICMP echo request (ping). If a reply is received, then dnsmasq
|
||||
assumes that the address is in use, and attempts to allocate an
|
||||
different address. The wait for a reply is between two and three
|
||||
seconds. Because the DHCP server is not re-entrant, it cannot serve
|
||||
other DHCP requests during this time. To avoid dropping requests,
|
||||
the address probe may be skipped when dnsmasq is under heavy load.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
32
Makefile
32
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
|
||||
|
||||
|
||||
|
||||
12
bld/Makefile
12
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 -
|
||||
|
||||
9
bld/install-man
Executable file
9
bld/install-man
Executable file
@@ -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
|
||||
9
bld/install-mo
Executable file
9
bld/install-mo
Executable file
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
+}
|
||||
|
||||
56
contrib/slackware-dnsmasq/dnsmasq.SlackBuild
Executable file
56
contrib/slackware-dnsmasq/dnsmasq.SlackBuild
Executable file
@@ -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
|
||||
|
||||
BIN
contrib/slackware-dnsmasq/dnsmasq.leasedir.diff.gz
Normal file
BIN
contrib/slackware-dnsmasq/dnsmasq.leasedir.diff.gz
Normal file
Binary file not shown.
BIN
contrib/slackware-dnsmasq/doinst.sh.gz
Normal file
BIN
contrib/slackware-dnsmasq/doinst.sh.gz
Normal file
Binary file not shown.
BIN
contrib/slackware-dnsmasq/rc.dnsmasq.gz
Normal file
BIN
contrib/slackware-dnsmasq/rc.dnsmasq.gz
Normal file
Binary file not shown.
19
contrib/slackware-dnsmasq/slack-desc
Normal file
19
contrib/slackware-dnsmasq/slack-desc
Normal file
@@ -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:
|
||||
@@ -5,9 +5,9 @@
|
||||
###############################################################################
|
||||
|
||||
Name: dnsmasq
|
||||
Version: 2.23
|
||||
Version: 2.27
|
||||
Release: 1
|
||||
Copyright: GPL
|
||||
License: GPL
|
||||
Group: System Environment/Daemons
|
||||
Vendor: Simon Kelley
|
||||
Packager: Simon Kelley
|
||||
@@ -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/*
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
###############################################################################
|
||||
|
||||
Name: dnsmasq
|
||||
Version: 2.23
|
||||
Version: 2.27
|
||||
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
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
@@ -108,6 +104,7 @@ rm -rf $RPM_BUILD_ROOT
|
||||
%config /etc/dnsmasq.conf
|
||||
/usr/sbin/rcdnsmasq
|
||||
/usr/sbin/dnsmasq
|
||||
/usr/share/locale/*/LC_MESSAGES/*
|
||||
%doc %{_mandir}/man8/dnsmasq.8.gz
|
||||
|
||||
|
||||
|
||||
@@ -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,10 +180,14 @@ 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
|
||||
|
||||
# Send extra options which are tagged as "red" to any machine whose
|
||||
# MAC address matches the pattern.
|
||||
#dhcp-mac=red,00:60:8C:*:*:*
|
||||
|
||||
# If this line is uncommented, dnsmasq will read /etc/ethers and act
|
||||
# on the ethernet-address/IP pairs found there just as if they had
|
||||
# been given as --dhcp-host options. Useful if you keep
|
||||
@@ -204,10 +208,14 @@ bogus-priv
|
||||
# DNS server - 6
|
||||
# broadcast address - 28
|
||||
|
||||
# Override the default route supplied by dnsmasq, which assumes the
|
||||
# router is the same machine as the one running dnsmasq.
|
||||
#dhcp-option=3,1.2.3.4
|
||||
|
||||
# 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 +232,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 +250,15 @@ 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 RFC-3442 classless static routes (note the netmask encoding)
|
||||
#dhcp-option=121,192.168.1.0/24,1.2.3.4,10.0.0.0/8,5.6.7.8
|
||||
|
||||
# Send 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 +275,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 +293,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 +329,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 +354,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 +376,3 @@ bogus-priv
|
||||
|
||||
# Include a another lot of configuration options.
|
||||
#conf-file=/etc/dnsmasq.more.conf
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -349,7 +349,7 @@ allowed to have more than one dhcp-range in a single subnet. The optional
|
||||
network-id is a alphanumeric label which marks this network so that
|
||||
dhcp options may be specified on a per-network basis.
|
||||
When it is prefixed with 'net:' then its meaning changes from setting
|
||||
a tag to matching it.
|
||||
a tag to matching it. Only one tag may be set, but more than one tag may be matched.
|
||||
The end address may be replaced by the keyword
|
||||
.B static
|
||||
which tells dnsmasq to enable DHCP for the network specified, but not
|
||||
@@ -368,7 +368,7 @@ which case the IP address and lease times will apply to any machine
|
||||
claiming that name. For example
|
||||
.B --dhcp-host=00:20:e0:3b:13:af,wap,infinite
|
||||
tells dnsmasq to give
|
||||
the machine with ethernet address 00:20:e0:3b:13:af the name wap, and
|
||||
the machine with hardware address 00:20:e0:3b:13:af the name wap, and
|
||||
an infinite DHCP lease.
|
||||
.B --dhcp-host=lap,192.168.0.199
|
||||
tells
|
||||
@@ -401,9 +401,15 @@ for this host.
|
||||
Ethernet addresses (but not client-ids) may have
|
||||
wildcard bytes, so for example
|
||||
.B --dhcp-host=00:20:e0:3b:13:*,ignore
|
||||
will cause dnsmasq to ignore a range of ethernet addresses. Note that
|
||||
will cause dnsmasq to ignore a range of hardware addresses. Note that
|
||||
the "*" will need to be escaped or quoted on a command line, but not
|
||||
in the configuration file.
|
||||
in the configuration file. Hardware addresses normally match any
|
||||
network (ARP) type, but it is possible to restrict them to a single
|
||||
ARP type by preceding them with the ARP-type (in HEX) and "-". so
|
||||
.B --dhcp-host=06-00:20:e0:3b:13:af,1.2.3.4
|
||||
will only match a
|
||||
Token-Ring hardware address, since the ARP-address type for token ring
|
||||
is 6.
|
||||
.TP
|
||||
.B \-Z, --read-ethers
|
||||
Read /etc/ethers for information about hosts for the DHCP server. The
|
||||
@@ -414,14 +420,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
|
||||
@@ -432,12 +438,17 @@ dotted-quad IP addresses, a decimal number, colon-separated hex digits
|
||||
and a text string. If the optional network-ids are given then
|
||||
this option is only sent when all the network-ids are matched.
|
||||
|
||||
Special processing is done on a text argument for option 119, to
|
||||
conform with RFC 3397, and dotted-quad IP addresses which are followed
|
||||
by a slash and then a netmask size are encoded as described in RFC
|
||||
3442.
|
||||
|
||||
Be careful: no checking is done that the correct type of data for the
|
||||
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
|
||||
@@ -476,7 +487,13 @@ to different classes of hosts. It is possible, for instance to use
|
||||
this to set a different printer server for hosts in the class
|
||||
"accounts" than for hosts in the class "engineering".
|
||||
.TP
|
||||
.B \ -J, --dhcp-ignore=<network-id>[,<network-id>]
|
||||
.B \-4, --dhcp-mac=<network-id>,<MAC address>
|
||||
Map from a MAC address to a network-id. The MAC address may include
|
||||
wildcards. For example
|
||||
.B --dhcp-mac=3com,01:34:23:*:*:*
|
||||
will set the tag "3com" for any host whose MAC address matches the pattern.
|
||||
.TP
|
||||
.B \-J, --dhcp-ignore=<network-id>[,<network-id>]
|
||||
When all the given network-ids match the set of network-ids derived
|
||||
from the net, host, vendor and user classes, ignore the host and do
|
||||
not allocate it a DHCP lease.
|
||||
@@ -495,10 +512,12 @@ 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.
|
||||
to get a lease without a tedious timeout under all circumstances. It also
|
||||
allows dnsmasq to rebuild its lease database without each client needing to
|
||||
reaquire a lease, if the database is lost.
|
||||
.TP
|
||||
.B \-3, --bootp-dynamic
|
||||
Enable dynamic allocation of IP addresses to BOOTP clients. Use this
|
||||
@@ -529,20 +548,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 +686,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
|
||||
908
po/de.po
Normal file
908
po/de.po
Normal file
@@ -0,0 +1,908 @@
|
||||
# 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: 2006-03-16 20:04+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:754
|
||||
#, c-format
|
||||
msgid "bad address at %s line %d"
|
||||
msgstr ""
|
||||
|
||||
# @Simon: Here I need an example to understand it :)
|
||||
#: cache.c:628 dhcp.c:768
|
||||
#, c-format
|
||||
msgid "bad name at %s line %d"
|
||||
msgstr ""
|
||||
|
||||
# @Simon: Here I need an example to understand it :)
|
||||
#: cache.c:634 dhcp.c:822
|
||||
#, 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:1302
|
||||
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:125
|
||||
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:126
|
||||
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:127
|
||||
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:128
|
||||
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:129
|
||||
#, 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:130
|
||||
#, c-format
|
||||
msgid "Specify configuration file (defaults to %s)."
|
||||
msgstr "Angabe der Konfigurationsdatei (Voreinstellung: %s)."
|
||||
|
||||
#: option.c:131
|
||||
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:132
|
||||
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:133
|
||||
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:134
|
||||
msgid "Expand simple names in /etc/hosts with domain-suffix."
|
||||
msgstr "Erweitere einfache Namen in /etc/hosts mit der Domänen-Endung"
|
||||
|
||||
#: option.c:135
|
||||
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:136
|
||||
msgid "Enable DHCP in the range given with lease duration."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:137
|
||||
#, c-format
|
||||
msgid "Change to this group after startup (defaults to %s)."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:138
|
||||
msgid "Set address or hostname for a specified machine."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:139
|
||||
#, c-format
|
||||
msgid "Do NOT load %s file."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:140
|
||||
#, c-format
|
||||
msgid "Specify a hosts file to be read in addition to %s."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:141
|
||||
msgid "Specify interface(s) to listen on."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:142
|
||||
msgid "Specify interface(s) NOT to listen on."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:143
|
||||
msgid "Map DHCP user class to option set."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:144
|
||||
msgid "Don't do DHCP for hosts in option set."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:145
|
||||
msgid "Do NOT fork into the background, do NOT run in debug mode."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:146
|
||||
msgid "Assume we are the only DHCP server on the local network."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:147
|
||||
#, c-format
|
||||
msgid "Specify where to store DHCP leases (defaults to %s)."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:148
|
||||
msgid "Return MX records for local hosts."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:149
|
||||
msgid "Specify an MX record."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:150
|
||||
msgid "Specify BOOTP options to DHCP server."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:151
|
||||
#, c-format
|
||||
msgid "Do NOT poll %s file, reload only on SIGHUP."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:152
|
||||
msgid "Do NOT cache failed search results."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:153
|
||||
#, c-format
|
||||
msgid "Use nameservers strictly in the order given in %s."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:154
|
||||
msgid "Set extra options to be set to DHCP clients."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:155
|
||||
msgid "Specify port to listen for DNS requests on (defaults to 53)."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:156
|
||||
#, c-format
|
||||
msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:157
|
||||
msgid "Log queries."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:158
|
||||
msgid "Force the originating port for upstream queries."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:159
|
||||
msgid "Do NOT read resolv.conf."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:160
|
||||
#, c-format
|
||||
msgid "Specify path to resolv.conf (defaults to %s)."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:161
|
||||
msgid "Specify address(es) of upstream servers with optional domains."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:162
|
||||
msgid "Never forward queries to specified domains."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:163
|
||||
msgid "Specify the domain to be assigned in DHCP leases."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:164
|
||||
msgid "Specify default target in an MX record."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:165
|
||||
msgid "Specify time-to-live in seconds for replies from /etc/hosts."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:166
|
||||
#, c-format
|
||||
msgid "Change to this user after startup. (defaults to %s)."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:167
|
||||
msgid "Map DHCP vendor class to option set."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:168
|
||||
msgid "Display dnsmasq version and copyright information."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:169
|
||||
msgid "Translate IPv4 addresses from upstream servers."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:170
|
||||
msgid "Specify a SRV record."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:171
|
||||
msgid "Display this message."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:172
|
||||
#, c-format
|
||||
msgid "Specify path of PID file. (defaults to %s)."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:173
|
||||
#, c-format
|
||||
msgid "Specify maximum number of DHCP leases (defaults to %s)."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:174
|
||||
msgid "Answer DNS queries based on the interface a query was sent to."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:175
|
||||
msgid "Specify TXT DNS record."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:176
|
||||
msgid "Bind only to interfaces in use."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:177
|
||||
#, c-format
|
||||
msgid "Read DHCP static host information from %s."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:178
|
||||
msgid "Enable the DBus interface for setting upstream servers, etc."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:179
|
||||
msgid "Do not provide DHCP on this interface, only provide DNS."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:180
|
||||
msgid "Enable dynamic address allocation for bootp."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:181
|
||||
msgid "Map MAC address (with wildcards) to option set."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:396
|
||||
msgid "missing \""
|
||||
msgstr ""
|
||||
|
||||
#: option.c:425
|
||||
msgid "bad option"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:442
|
||||
#, c-format
|
||||
msgid "cannot read %s: %s"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:448
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Usage: dnsmasq [options]\n"
|
||||
"\n"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:450
|
||||
#, c-format
|
||||
msgid "Use short options only on the command line.\n"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:452
|
||||
#, c-format
|
||||
msgid "Valid options are :\n"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:477
|
||||
#, c-format
|
||||
msgid "Dnsmasq version %s %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:478
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Compile time options %s\n"
|
||||
"\n"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:479
|
||||
#, c-format
|
||||
msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:480
|
||||
#, c-format
|
||||
msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:481
|
||||
#, c-format
|
||||
msgid "under the terms of the GNU General Public License, version 2.\n"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:491
|
||||
msgid "extraneous parameter"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:499
|
||||
msgid "missing parameter"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:516
|
||||
msgid "nested includes not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:576
|
||||
msgid "bad MX preference"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:585
|
||||
msgid "bad MX name"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:603
|
||||
msgid "bad MX target"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:805 option.c:816
|
||||
msgid "bad port"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:957
|
||||
msgid "bad dhcp-range"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:986
|
||||
msgid "only one netid tag allowed"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1031
|
||||
msgid "inconsistent DHCP range"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1219
|
||||
msgid "bad dhcp-host"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1279
|
||||
msgid "bad dhcp-option"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1297
|
||||
msgid "bad domain in dhcp-option"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1467
|
||||
msgid "dhcp-option too long"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1664
|
||||
msgid "bad TXT record"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1696
|
||||
msgid "TXT record string too long"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1735
|
||||
msgid "bad SRV record"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1748
|
||||
msgid "bad SRV target"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1760
|
||||
msgid "invalid port number"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1771
|
||||
msgid "invalid priority"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1782
|
||||
msgid "invalid weight"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1807
|
||||
msgid "error"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1809
|
||||
#, c-format
|
||||
msgid "bad command line options: %s."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1853
|
||||
#, c-format
|
||||
msgid "cannot get host-name: %s"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1882
|
||||
msgid "only one resolv.conf file allowed in no-poll mode."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1889
|
||||
msgid "must have exactly one resolv.conf to read domain from."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1892 network.c:591
|
||||
#, c-format
|
||||
msgid "failed to read %s: %m"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1910
|
||||
#, c-format
|
||||
msgid "no search directive found in %s"
|
||||
msgstr ""
|
||||
|
||||
#: forward.c:383
|
||||
#, c-format
|
||||
msgid "nameserver %s refused to do a recursive query"
|
||||
msgstr ""
|
||||
|
||||
#: forward.c:914
|
||||
msgid "forwarding table overflow: check for server loops."
|
||||
msgstr ""
|
||||
|
||||
#: isc.c:71 dnsmasq.c:482
|
||||
#, 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:115
|
||||
msgid ""
|
||||
"ISC dhcpd integration not available: set HAVE_ISC_READER in src/config.h"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:119
|
||||
#, c-format
|
||||
msgid "failed to find list of interfaces: %s"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:134
|
||||
#, c-format
|
||||
msgid "unknown interface %s"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:140
|
||||
#, c-format
|
||||
msgid "no interface with address %s"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:149
|
||||
#, c-format
|
||||
msgid "cannot open %s:%s"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:163
|
||||
msgid "must set exactly one interface on broken systems without IP_RECVIF"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:176 dnsmasq.c:520
|
||||
#, c-format
|
||||
msgid "DBus error: %s"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:179
|
||||
msgid "DBus not available: set HAVE_DBUS in src/config.h"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:292
|
||||
#, c-format
|
||||
msgid "started, version %s cachesize %d"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:294
|
||||
#, c-format
|
||||
msgid "started, version %s cache disabled"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:296
|
||||
#, c-format
|
||||
msgid "compile time options: %s"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:302
|
||||
msgid "DBus support enabled: connected to system bus"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:304
|
||||
msgid "DBus support enabled: bus connection pending"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:309
|
||||
msgid "setting --bind-interfaces option because of OS limitations"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:314
|
||||
#, c-format
|
||||
msgid "warning: interface %s does not currently exist"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:331
|
||||
#, c-format
|
||||
msgid "DHCP, static leases only on %.0s%s, lease time %s"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:332
|
||||
#, c-format
|
||||
msgid "DHCP, IP range %s -- %s, lease time %s"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:343
|
||||
#, c-format
|
||||
msgid "DHCP, %s will be written every %s"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:348
|
||||
msgid "running as root"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:522
|
||||
msgid "connected to system DBus"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:533
|
||||
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:234
|
||||
msgid "Cannot use RTnetlink socket, falling back to ioctl API"
|
||||
msgstr ""
|
||||
|
||||
#: dhcp.c:345
|
||||
#, c-format
|
||||
msgid "DHCP request for unsupported hardware type (%d) recieved on %s"
|
||||
msgstr ""
|
||||
|
||||
#: dhcp.c:413
|
||||
#, c-format
|
||||
msgid "DHCP range %s -- %s is not consistent with netmask %s"
|
||||
msgstr ""
|
||||
|
||||
#: dhcp.c:722
|
||||
#, c-format
|
||||
msgid "failed to read %s:%m"
|
||||
msgstr ""
|
||||
|
||||
#: dhcp.c:741
|
||||
#, c-format
|
||||
msgid "bad line at %s line %d"
|
||||
msgstr ""
|
||||
|
||||
#: dhcp.c:845
|
||||
#, c-format
|
||||
msgid "duplicate IP address %s (%s) in dhcp-config directive"
|
||||
msgstr ""
|
||||
|
||||
#: dhcp.c:881
|
||||
#, c-format
|
||||
msgid "Ignoring DHCP host name %s because it has an illegal domain part"
|
||||
msgstr ""
|
||||
|
||||
#: lease.c:38
|
||||
#, c-format
|
||||
msgid "cannot open or create leases file: %s"
|
||||
msgstr ""
|
||||
|
||||
#: lease.c:80
|
||||
msgid "too many stored leases"
|
||||
msgstr ""
|
||||
|
||||
#: lease.c:179
|
||||
msgid "failed to write"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:218
|
||||
#, c-format
|
||||
msgid "no address range available for DHCP request %s %s"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:219
|
||||
msgid "with subnet selector"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:219
|
||||
msgid "via"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:240 rfc2131.c:264
|
||||
msgid "disabled"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:275 rfc2131.c:674
|
||||
msgid "address in use"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:278
|
||||
msgid "no address configured"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:291 rfc2131.c:546
|
||||
msgid "no address available"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:298 rfc2131.c:677
|
||||
msgid "no leases left"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:301 rfc2131.c:650
|
||||
msgid "wrong network"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:505
|
||||
#, c-format
|
||||
msgid "disabling DHCP static address %s"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:523
|
||||
msgid "unknown lease"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:536 rfc2131.c:749
|
||||
msgid "ignored"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:619
|
||||
msgid "wrong address"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:632
|
||||
msgid "lease not found"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:658
|
||||
msgid "address not available"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:667
|
||||
msgid "static lease available"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:671
|
||||
msgid "address reserved"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:871
|
||||
#, c-format
|
||||
msgid "cannot send DHCP option %d: no space left in packet"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:1174
|
||||
#, c-format
|
||||
msgid "More than one vendor class matches, using %s"
|
||||
msgstr ""
|
||||
|
||||
#: netlink.c:41
|
||||
#, 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 ""
|
||||
887
po/es.po
Normal file
887
po/es.po
Normal file
@@ -0,0 +1,887 @@
|
||||
# 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: 2006-03-16 20:04+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:754
|
||||
#, fuzzy, c-format
|
||||
msgid "bad address at %s line %d"
|
||||
msgstr "nombre erróneo en %s línea %d"
|
||||
|
||||
#: cache.c:628 dhcp.c:768
|
||||
#, c-format
|
||||
msgid "bad name at %s line %d"
|
||||
msgstr "nombre erróneo en %s línea %d"
|
||||
|
||||
#: cache.c:634 dhcp.c:822
|
||||
#, 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:1302
|
||||
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:125
|
||||
msgid "Specify local address(es) to listen on."
|
||||
msgstr "Especificar dirección(es) locales dónde escuchar."
|
||||
|
||||
#: option.c:126
|
||||
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:127
|
||||
msgid "Fake reverse lookups for RFC1918 private address ranges."
|
||||
msgstr ""
|
||||
"Falsificar búsquedas reversas para rangos de dirección privados RFC1918."
|
||||
|
||||
#: option.c:128
|
||||
msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
|
||||
msgstr "Tratar ipaddr (dirección IP) como NXDOMAIN (derrota comodín Verisign)."
|
||||
|
||||
#: option.c:129
|
||||
#, 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:130
|
||||
#, c-format
|
||||
msgid "Specify configuration file (defaults to %s)."
|
||||
msgstr "Especificar archivo de configuración (%s por predeterminado)."
|
||||
|
||||
#: option.c:131
|
||||
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:132
|
||||
msgid "Do NOT forward queries with no domain part."
|
||||
msgstr "NO reenviar búsquedas sin parte de dominio."
|
||||
|
||||
#: option.c:133
|
||||
msgid "Return self-pointing MX records for local hosts."
|
||||
msgstr "Retornar records MX auto-señaladores para hosts locales."
|
||||
|
||||
#: option.c:134
|
||||
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:135
|
||||
msgid "Don't forward spurious DNS requests from Windows hosts."
|
||||
msgstr "No reenviar pedidos DNS falsos desde máquinas Windows."
|
||||
|
||||
#: option.c:136
|
||||
msgid "Enable DHCP in the range given with lease duration."
|
||||
msgstr "Habilitar DHCP dentro del rango brindado con duración del arriendo."
|
||||
|
||||
#: option.c:137
|
||||
#, 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:138
|
||||
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:139
|
||||
#, c-format
|
||||
msgid "Do NOT load %s file."
|
||||
msgstr "NO cargar archivo %s."
|
||||
|
||||
#: option.c:140
|
||||
#, 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:141
|
||||
msgid "Specify interface(s) to listen on."
|
||||
msgstr "Especificar interface(s) donde escuchar."
|
||||
|
||||
#: option.c:142
|
||||
msgid "Specify interface(s) NOT to listen on."
|
||||
msgstr "Especificar interface(s) donde NO escuchar."
|
||||
|
||||
#: option.c:143
|
||||
msgid "Map DHCP user class to option set."
|
||||
msgstr "Trazar clase de usuario DHCP a la opción fijada."
|
||||
|
||||
#: option.c:144
|
||||
msgid "Don't do DHCP for hosts in option set."
|
||||
msgstr "No hacer DHCP para hosts en la opción fijada."
|
||||
|
||||
#: option.c:145
|
||||
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:146
|
||||
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:147
|
||||
#, c-format
|
||||
msgid "Specify where to store DHCP leases (defaults to %s)."
|
||||
msgstr "Especificar donde guardar arriendos DHCP (%s por predeterminado)."
|
||||
|
||||
#: option.c:148
|
||||
msgid "Return MX records for local hosts."
|
||||
msgstr "Retornar récords MX para hosts locales."
|
||||
|
||||
#: option.c:149
|
||||
msgid "Specify an MX record."
|
||||
msgstr "Especificar un récord MX."
|
||||
|
||||
#: option.c:150
|
||||
msgid "Specify BOOTP options to DHCP server."
|
||||
msgstr "Especificar opciónes BOOTP a servidor DHCP."
|
||||
|
||||
#: option.c:151
|
||||
#, c-format
|
||||
msgid "Do NOT poll %s file, reload only on SIGHUP."
|
||||
msgstr "NO revisar archivo %s periodicamente, recargar solo con SIGHUP."
|
||||
|
||||
#: option.c:152
|
||||
msgid "Do NOT cache failed search results."
|
||||
msgstr "NO cachear resultados de búsquedas fallidas."
|
||||
|
||||
#: option.c:153
|
||||
#, 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:154
|
||||
msgid "Set extra options to be set to DHCP clients."
|
||||
msgstr "Fijar opciones extra para ser enviadas a clientes DHCP."
|
||||
|
||||
#: option.c:155
|
||||
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:156
|
||||
#, 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:157
|
||||
msgid "Log queries."
|
||||
msgstr "Bitacorear búsquedas."
|
||||
|
||||
#: option.c:158
|
||||
msgid "Force the originating port for upstream queries."
|
||||
msgstr "Enforzar el puerto original para búsquedas upstream."
|
||||
|
||||
#: option.c:159
|
||||
msgid "Do NOT read resolv.conf."
|
||||
msgstr "NO leer resolv.conf."
|
||||
|
||||
#: option.c:160
|
||||
#, c-format
|
||||
msgid "Specify path to resolv.conf (defaults to %s)."
|
||||
msgstr "Especificar el destino hacia resolv.conf (%s por predeterminado)."
|
||||
|
||||
#: option.c:161
|
||||
msgid "Specify address(es) of upstream servers with optional domains."
|
||||
msgstr ""
|
||||
"Especificar dirección(es) de servidor upstream con dominios opcionales."
|
||||
|
||||
#: option.c:162
|
||||
msgid "Never forward queries to specified domains."
|
||||
msgstr "Nunca reenviar búsquedas a dominios especificados."
|
||||
|
||||
#: option.c:163
|
||||
msgid "Specify the domain to be assigned in DHCP leases."
|
||||
msgstr "Especificar dominio para asignar en arriendos DHCP."
|
||||
|
||||
#: option.c:164
|
||||
msgid "Specify default target in an MX record."
|
||||
msgstr "Especificar destino predeterminado en un récord MX."
|
||||
|
||||
#: option.c:165
|
||||
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:166
|
||||
#, 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:167
|
||||
msgid "Map DHCP vendor class to option set."
|
||||
msgstr "Trazar clase de vendedor DHCP a opción fijada."
|
||||
|
||||
#: option.c:168
|
||||
msgid "Display dnsmasq version and copyright information."
|
||||
msgstr "Mostrar información sobre la versión y copyright de dnsmasq."
|
||||
|
||||
#: option.c:169
|
||||
msgid "Translate IPv4 addresses from upstream servers."
|
||||
msgstr "Traducir direcciones IPv4 desde servidores upstream."
|
||||
|
||||
#: option.c:170
|
||||
msgid "Specify a SRV record."
|
||||
msgstr "Especificar un récord SRV."
|
||||
|
||||
#: option.c:171
|
||||
msgid "Display this message."
|
||||
msgstr "Mostrar este mensaje."
|
||||
|
||||
#: option.c:172
|
||||
#, c-format
|
||||
msgid "Specify path of PID file. (defaults to %s)."
|
||||
msgstr "Especificar path de archivo PID (%s por predeterminado)."
|
||||
|
||||
#: option.c:173
|
||||
#, 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:174
|
||||
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:175
|
||||
msgid "Specify TXT DNS record."
|
||||
msgstr "Especificar récord DNS TXT."
|
||||
|
||||
#: option.c:176
|
||||
msgid "Bind only to interfaces in use."
|
||||
msgstr "Acoplar solo a interfaces en uso."
|
||||
|
||||
#: option.c:177
|
||||
#, c-format
|
||||
msgid "Read DHCP static host information from %s."
|
||||
msgstr "Leer información sobre hosts DHCP estáticos desde %s."
|
||||
|
||||
#: option.c:178
|
||||
msgid "Enable the DBus interface for setting upstream servers, etc."
|
||||
msgstr "Habilitar la interface DBus para fijar servidores upstream, etc."
|
||||
|
||||
#: option.c:179
|
||||
msgid "Do not provide DHCP on this interface, only provide DNS."
|
||||
msgstr "No proveer DHCP en esta interface, solo proveer DNS."
|
||||
|
||||
#: option.c:180
|
||||
msgid "Enable dynamic address allocation for bootp."
|
||||
msgstr "Habilitar alocación dinámica de direcciónes para BOOTP."
|
||||
|
||||
#: option.c:181
|
||||
#, fuzzy
|
||||
msgid "Map MAC address (with wildcards) to option set."
|
||||
msgstr "Trazar clase de vendedor DHCP a opción fijada."
|
||||
|
||||
#: option.c:396
|
||||
msgid "missing \""
|
||||
msgstr "falta \""
|
||||
|
||||
#: option.c:425
|
||||
msgid "bad option"
|
||||
msgstr "opción errónea"
|
||||
|
||||
#: option.c:442
|
||||
#, c-format
|
||||
msgid "cannot read %s: %s"
|
||||
msgstr "no se puede leer %s: %s"
|
||||
|
||||
#: option.c:448
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Usage: dnsmasq [options]\n"
|
||||
"\n"
|
||||
msgstr ""
|
||||
"Modo de uso: dnsmasq [opciones]\n"
|
||||
"\n"
|
||||
|
||||
#: option.c:450
|
||||
#, 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:452
|
||||
#, c-format
|
||||
msgid "Valid options are :\n"
|
||||
msgstr "Opciones válidas son :\n"
|
||||
|
||||
#: option.c:477
|
||||
#, c-format
|
||||
msgid "Dnsmasq version %s %s\n"
|
||||
msgstr "Dnsmasq versión %s %s\n"
|
||||
|
||||
#: option.c:478
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Compile time options %s\n"
|
||||
"\n"
|
||||
msgstr ""
|
||||
"Opciones de compilación %s\n"
|
||||
"\n"
|
||||
|
||||
#: option.c:479
|
||||
#, c-format
|
||||
msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
|
||||
msgstr "Este software viene SIN NINGUNA GARANTIA.\n"
|
||||
|
||||
#: option.c:480
|
||||
#, 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:481
|
||||
#, 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:491
|
||||
msgid "extraneous parameter"
|
||||
msgstr "parámetro extraño"
|
||||
|
||||
#: option.c:499
|
||||
msgid "missing parameter"
|
||||
msgstr "parámetro ausente"
|
||||
|
||||
#: option.c:516
|
||||
msgid "nested includes not allowed"
|
||||
msgstr "inclusiones jerarquizadas no permitidas"
|
||||
|
||||
#: option.c:576
|
||||
msgid "bad MX preference"
|
||||
msgstr "preferencia MX errónea"
|
||||
|
||||
#: option.c:585
|
||||
msgid "bad MX name"
|
||||
msgstr "nombre MX erróneo"
|
||||
|
||||
#: option.c:603
|
||||
msgid "bad MX target"
|
||||
msgstr "destino MX erróneo"
|
||||
|
||||
#: option.c:805 option.c:816
|
||||
msgid "bad port"
|
||||
msgstr "puerto erróneo"
|
||||
|
||||
#: option.c:957
|
||||
msgid "bad dhcp-range"
|
||||
msgstr "dhcp-range (rango DHCP) erróneo"
|
||||
|
||||
#: option.c:986
|
||||
msgid "only one netid tag allowed"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1031
|
||||
msgid "inconsistent DHCP range"
|
||||
msgstr "rango DHCP inconsistente"
|
||||
|
||||
#: option.c:1219
|
||||
msgid "bad dhcp-host"
|
||||
msgstr "dhcp-host erróneo"
|
||||
|
||||
#: option.c:1279
|
||||
msgid "bad dhcp-option"
|
||||
msgstr "dhcp-option erróneo"
|
||||
|
||||
#: option.c:1297
|
||||
msgid "bad domain in dhcp-option"
|
||||
msgstr "dominio erróneo en dhcp-option"
|
||||
|
||||
#: option.c:1467
|
||||
msgid "dhcp-option too long"
|
||||
msgstr "opción dhcp-option demasiado larga"
|
||||
|
||||
#: option.c:1664
|
||||
msgid "bad TXT record"
|
||||
msgstr "récord TXT erróneo"
|
||||
|
||||
#: option.c:1696
|
||||
msgid "TXT record string too long"
|
||||
msgstr "récord TXT demasiado largo"
|
||||
|
||||
#: option.c:1735
|
||||
msgid "bad SRV record"
|
||||
msgstr "récord SRV erróneo"
|
||||
|
||||
#: option.c:1748
|
||||
msgid "bad SRV target"
|
||||
msgstr "destino SRV erróneo"
|
||||
|
||||
#: option.c:1760
|
||||
msgid "invalid port number"
|
||||
msgstr "número de puerto inválido"
|
||||
|
||||
#: option.c:1771
|
||||
msgid "invalid priority"
|
||||
msgstr "prioridad inválida"
|
||||
|
||||
#: option.c:1782
|
||||
msgid "invalid weight"
|
||||
msgstr "peso inválido"
|
||||
|
||||
#: option.c:1807
|
||||
msgid "error"
|
||||
msgstr "error"
|
||||
|
||||
#: option.c:1809
|
||||
#, c-format
|
||||
msgid "bad command line options: %s."
|
||||
msgstr "opciones de línea de comandos erróneas: %s."
|
||||
|
||||
#: option.c:1853
|
||||
#, c-format
|
||||
msgid "cannot get host-name: %s"
|
||||
msgstr "no se puede obtener host-name (nombre de host): %s"
|
||||
|
||||
#: option.c:1882
|
||||
msgid "only one resolv.conf file allowed in no-poll mode."
|
||||
msgstr "solo un archivo resolv.conf permitido en modo no-poll."
|
||||
|
||||
#: option.c:1889
|
||||
msgid "must have exactly one resolv.conf to read domain from."
|
||||
msgstr "debe haber exactamente un resolv.conf desde donde leer dominio."
|
||||
|
||||
#: option.c:1892 network.c:591
|
||||
#, c-format
|
||||
msgid "failed to read %s: %m"
|
||||
msgstr "no se pudo leer %s: %m"
|
||||
|
||||
#: option.c:1910
|
||||
#, c-format
|
||||
msgid "no search directive found in %s"
|
||||
msgstr "ninguna directiva de búsqueda encontrada en %s"
|
||||
|
||||
#: forward.c:383
|
||||
#, 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:914
|
||||
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:482
|
||||
#, 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:115
|
||||
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:119
|
||||
#, c-format
|
||||
msgid "failed to find list of interfaces: %s"
|
||||
msgstr "no se pudo encontrar lista de interfaces: %s"
|
||||
|
||||
#: dnsmasq.c:134
|
||||
#, c-format
|
||||
msgid "unknown interface %s"
|
||||
msgstr "interface desconocida %s"
|
||||
|
||||
#: dnsmasq.c:140
|
||||
#, c-format
|
||||
msgid "no interface with address %s"
|
||||
msgstr "ninguna interface con dirección %s"
|
||||
|
||||
#: dnsmasq.c:149
|
||||
#, c-format
|
||||
msgid "cannot open %s:%s"
|
||||
msgstr "no se puede abrir %s:%s"
|
||||
|
||||
#: dnsmasq.c:163
|
||||
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:176 dnsmasq.c:520
|
||||
#, c-format
|
||||
msgid "DBus error: %s"
|
||||
msgstr "error DBus: %s"
|
||||
|
||||
#: dnsmasq.c:179
|
||||
msgid "DBus not available: set HAVE_DBUS in src/config.h"
|
||||
msgstr "DBus no disponible: fijar HAVE_DBUS en src/config.h"
|
||||
|
||||
#: dnsmasq.c:292
|
||||
#, c-format
|
||||
msgid "started, version %s cachesize %d"
|
||||
msgstr "versión %s iniciada, tamaño de caché %d"
|
||||
|
||||
#: dnsmasq.c:294
|
||||
#, c-format
|
||||
msgid "started, version %s cache disabled"
|
||||
msgstr "versión %s iniciada, caché deshabilitado"
|
||||
|
||||
#: dnsmasq.c:296
|
||||
#, c-format
|
||||
msgid "compile time options: %s"
|
||||
msgstr "opciones de compilación: %s"
|
||||
|
||||
#: dnsmasq.c:302
|
||||
msgid "DBus support enabled: connected to system bus"
|
||||
msgstr "soporte DBus habilitado: conectado a bus de sistema"
|
||||
|
||||
#: dnsmasq.c:304
|
||||
msgid "DBus support enabled: bus connection pending"
|
||||
msgstr "soporte DBus habilitado: conección a bus pendiente"
|
||||
|
||||
#: dnsmasq.c:309
|
||||
msgid "setting --bind-interfaces option because of OS limitations"
|
||||
msgstr ""
|
||||
"fijando opción --bind-interfaces debido a limitaciones de sistema operativo"
|
||||
|
||||
#: dnsmasq.c:314
|
||||
#, c-format
|
||||
msgid "warning: interface %s does not currently exist"
|
||||
msgstr "advertencia: interface %s no existe actualmente"
|
||||
|
||||
#: dnsmasq.c:331
|
||||
#, 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:332
|
||||
#, c-format
|
||||
msgid "DHCP, IP range %s -- %s, lease time %s"
|
||||
msgstr "DHCP, rango de IP %s -- %s, tiempo de arriendo %s"
|
||||
|
||||
#: dnsmasq.c:343
|
||||
#, c-format
|
||||
msgid "DHCP, %s will be written every %s"
|
||||
msgstr "DHCP, %s será escrito cada %s"
|
||||
|
||||
#: dnsmasq.c:348
|
||||
msgid "running as root"
|
||||
msgstr "corriendo como root"
|
||||
|
||||
#: dnsmasq.c:522
|
||||
msgid "connected to system DBus"
|
||||
msgstr "conectado a DBus de sistema"
|
||||
|
||||
#: dnsmasq.c:533
|
||||
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:234
|
||||
msgid "Cannot use RTnetlink socket, falling back to ioctl API"
|
||||
msgstr ""
|
||||
|
||||
#: dhcp.c:345
|
||||
#, 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"
|
||||
|
||||
#: dhcp.c:413
|
||||
#, 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:722
|
||||
#, c-format
|
||||
msgid "failed to read %s:%m"
|
||||
msgstr "no se pudo leer %s:%m"
|
||||
|
||||
#: dhcp.c:741
|
||||
#, fuzzy, c-format
|
||||
msgid "bad line at %s line %d"
|
||||
msgstr "nombre erróneo en %s línea %d"
|
||||
|
||||
#: dhcp.c:845
|
||||
#, 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:881
|
||||
#, 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:38
|
||||
#, c-format
|
||||
msgid "cannot open or create leases file: %s"
|
||||
msgstr "no se puede abrir o crear archivo de arriendos: %s"
|
||||
|
||||
#: lease.c:80
|
||||
msgid "too many stored leases"
|
||||
msgstr "demasiados arriendos almacenados"
|
||||
|
||||
#: lease.c:179
|
||||
#, fuzzy
|
||||
msgid "failed to write"
|
||||
msgstr "no se pudo leer %s:%m"
|
||||
|
||||
#: rfc2131.c:218
|
||||
#, 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:219
|
||||
msgid "with subnet selector"
|
||||
msgstr "con selector de subred"
|
||||
|
||||
#: rfc2131.c:219
|
||||
msgid "via"
|
||||
msgstr "vía"
|
||||
|
||||
#: rfc2131.c:240 rfc2131.c:264
|
||||
msgid "disabled"
|
||||
msgstr "deshabilitado"
|
||||
|
||||
#: rfc2131.c:275 rfc2131.c:674
|
||||
msgid "address in use"
|
||||
msgstr "dirección en uso"
|
||||
|
||||
#: rfc2131.c:278
|
||||
msgid "no address configured"
|
||||
msgstr "ninguna dirección configurada"
|
||||
|
||||
#: rfc2131.c:291 rfc2131.c:546
|
||||
msgid "no address available"
|
||||
msgstr "ninguna dirección disponible"
|
||||
|
||||
#: rfc2131.c:298 rfc2131.c:677
|
||||
msgid "no leases left"
|
||||
msgstr "no queda ningún arriendo"
|
||||
|
||||
#: rfc2131.c:301 rfc2131.c:650
|
||||
msgid "wrong network"
|
||||
msgstr "red equivocada"
|
||||
|
||||
#: rfc2131.c:505
|
||||
#, c-format
|
||||
msgid "disabling DHCP static address %s"
|
||||
msgstr "deshabilitando dirección DHCP estática %s"
|
||||
|
||||
#: rfc2131.c:523
|
||||
msgid "unknown lease"
|
||||
msgstr "arriendo desconocido"
|
||||
|
||||
#: rfc2131.c:536 rfc2131.c:749
|
||||
msgid "ignored"
|
||||
msgstr "ignorado"
|
||||
|
||||
#: rfc2131.c:619
|
||||
msgid "wrong address"
|
||||
msgstr "dirección equivocada"
|
||||
|
||||
#: rfc2131.c:632
|
||||
msgid "lease not found"
|
||||
msgstr "arriendo no encontrado"
|
||||
|
||||
#: rfc2131.c:658
|
||||
msgid "address not available"
|
||||
msgstr "dirección no disponible"
|
||||
|
||||
#: rfc2131.c:667
|
||||
msgid "static lease available"
|
||||
msgstr "arriendo estático disponible"
|
||||
|
||||
#: rfc2131.c:671
|
||||
msgid "address reserved"
|
||||
msgstr "dirección reservada"
|
||||
|
||||
#: rfc2131.c:871
|
||||
#, 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:1174
|
||||
#, c-format
|
||||
msgid "More than one vendor class matches, using %s"
|
||||
msgstr "Más de una clase de vendedor coincide, usando %s"
|
||||
|
||||
#: netlink.c:41
|
||||
#, 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"
|
||||
859
po/fi.po
Normal file
859
po/fi.po
Normal file
@@ -0,0 +1,859 @@
|
||||
# Finnish 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: 2006-03-16 20:04+0000\n"
|
||||
"PO-Revision-Date: 2005-11-28 22:05+0000\n"
|
||||
"Last-Translator: Simon Kelley <simon@thekelleys.org.uk>\n"
|
||||
"Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=ASCII\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:754
|
||||
#, c-format
|
||||
msgid "bad address at %s line %d"
|
||||
msgstr ""
|
||||
|
||||
#: cache.c:628 dhcp.c:768
|
||||
#, c-format
|
||||
msgid "bad name at %s line %d"
|
||||
msgstr ""
|
||||
|
||||
#: cache.c:634 dhcp.c:822
|
||||
#, c-format
|
||||
msgid "read %s - %d addresses"
|
||||
msgstr ""
|
||||
|
||||
#: cache.c:670
|
||||
msgid "cleared cache"
|
||||
msgstr ""
|
||||
|
||||
#: 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 ""
|
||||
|
||||
#: cache.c:767
|
||||
#, c-format
|
||||
msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
|
||||
msgstr ""
|
||||
|
||||
#: util.c:149 option.c:1302
|
||||
msgid "could not get memory"
|
||||
msgstr ""
|
||||
|
||||
#: util.c:172
|
||||
#, c-format
|
||||
msgid "%s at line %d of %%s"
|
||||
msgstr ""
|
||||
|
||||
#: util.c:179
|
||||
msgid "FAILED to start up"
|
||||
msgstr ""
|
||||
|
||||
#: util.c:305
|
||||
#, c-format
|
||||
msgid "infinite"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:125
|
||||
msgid "Specify local address(es) to listen on."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:126
|
||||
msgid "Return ipaddr for all hosts in specified domains."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:127
|
||||
msgid "Fake reverse lookups for RFC1918 private address ranges."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:128
|
||||
msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:129
|
||||
#, c-format
|
||||
msgid "Specify the size of the cache in entries (defaults to %s)."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:130
|
||||
#, c-format
|
||||
msgid "Specify configuration file (defaults to %s)."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:131
|
||||
msgid "Do NOT fork into the background: run in debug mode."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:132
|
||||
msgid "Do NOT forward queries with no domain part."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:133
|
||||
msgid "Return self-pointing MX records for local hosts."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:134
|
||||
msgid "Expand simple names in /etc/hosts with domain-suffix."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:135
|
||||
msgid "Don't forward spurious DNS requests from Windows hosts."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:136
|
||||
msgid "Enable DHCP in the range given with lease duration."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:137
|
||||
#, c-format
|
||||
msgid "Change to this group after startup (defaults to %s)."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:138
|
||||
msgid "Set address or hostname for a specified machine."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:139
|
||||
#, c-format
|
||||
msgid "Do NOT load %s file."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:140
|
||||
#, c-format
|
||||
msgid "Specify a hosts file to be read in addition to %s."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:141
|
||||
msgid "Specify interface(s) to listen on."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:142
|
||||
msgid "Specify interface(s) NOT to listen on."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:143
|
||||
msgid "Map DHCP user class to option set."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:144
|
||||
msgid "Don't do DHCP for hosts in option set."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:145
|
||||
msgid "Do NOT fork into the background, do NOT run in debug mode."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:146
|
||||
msgid "Assume we are the only DHCP server on the local network."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:147
|
||||
#, c-format
|
||||
msgid "Specify where to store DHCP leases (defaults to %s)."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:148
|
||||
msgid "Return MX records for local hosts."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:149
|
||||
msgid "Specify an MX record."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:150
|
||||
msgid "Specify BOOTP options to DHCP server."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:151
|
||||
#, c-format
|
||||
msgid "Do NOT poll %s file, reload only on SIGHUP."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:152
|
||||
msgid "Do NOT cache failed search results."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:153
|
||||
#, c-format
|
||||
msgid "Use nameservers strictly in the order given in %s."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:154
|
||||
msgid "Set extra options to be set to DHCP clients."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:155
|
||||
msgid "Specify port to listen for DNS requests on (defaults to 53)."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:156
|
||||
#, c-format
|
||||
msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:157
|
||||
msgid "Log queries."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:158
|
||||
msgid "Force the originating port for upstream queries."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:159
|
||||
msgid "Do NOT read resolv.conf."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:160
|
||||
#, c-format
|
||||
msgid "Specify path to resolv.conf (defaults to %s)."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:161
|
||||
msgid "Specify address(es) of upstream servers with optional domains."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:162
|
||||
msgid "Never forward queries to specified domains."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:163
|
||||
msgid "Specify the domain to be assigned in DHCP leases."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:164
|
||||
msgid "Specify default target in an MX record."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:165
|
||||
msgid "Specify time-to-live in seconds for replies from /etc/hosts."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:166
|
||||
#, c-format
|
||||
msgid "Change to this user after startup. (defaults to %s)."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:167
|
||||
msgid "Map DHCP vendor class to option set."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:168
|
||||
msgid "Display dnsmasq version and copyright information."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:169
|
||||
msgid "Translate IPv4 addresses from upstream servers."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:170
|
||||
msgid "Specify a SRV record."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:171
|
||||
msgid "Display this message."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:172
|
||||
#, c-format
|
||||
msgid "Specify path of PID file. (defaults to %s)."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:173
|
||||
#, c-format
|
||||
msgid "Specify maximum number of DHCP leases (defaults to %s)."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:174
|
||||
msgid "Answer DNS queries based on the interface a query was sent to."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:175
|
||||
msgid "Specify TXT DNS record."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:176
|
||||
msgid "Bind only to interfaces in use."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:177
|
||||
#, c-format
|
||||
msgid "Read DHCP static host information from %s."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:178
|
||||
msgid "Enable the DBus interface for setting upstream servers, etc."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:179
|
||||
msgid "Do not provide DHCP on this interface, only provide DNS."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:180
|
||||
msgid "Enable dynamic address allocation for bootp."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:181
|
||||
msgid "Map MAC address (with wildcards) to option set."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:396
|
||||
msgid "missing \""
|
||||
msgstr ""
|
||||
|
||||
#: option.c:425
|
||||
msgid "bad option"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:442
|
||||
#, c-format
|
||||
msgid "cannot read %s: %s"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:448
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Usage: dnsmasq [options]\n"
|
||||
"\n"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:450
|
||||
#, c-format
|
||||
msgid "Use short options only on the command line.\n"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:452
|
||||
#, c-format
|
||||
msgid "Valid options are :\n"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:477
|
||||
#, c-format
|
||||
msgid "Dnsmasq version %s %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:478
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Compile time options %s\n"
|
||||
"\n"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:479
|
||||
#, c-format
|
||||
msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:480
|
||||
#, c-format
|
||||
msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:481
|
||||
#, c-format
|
||||
msgid "under the terms of the GNU General Public License, version 2.\n"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:491
|
||||
msgid "extraneous parameter"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:499
|
||||
msgid "missing parameter"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:516
|
||||
msgid "nested includes not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:576
|
||||
msgid "bad MX preference"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:585
|
||||
msgid "bad MX name"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:603
|
||||
msgid "bad MX target"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:805 option.c:816
|
||||
msgid "bad port"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:957
|
||||
msgid "bad dhcp-range"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:986
|
||||
msgid "only one netid tag allowed"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1031
|
||||
msgid "inconsistent DHCP range"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1219
|
||||
msgid "bad dhcp-host"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1279
|
||||
msgid "bad dhcp-option"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1297
|
||||
msgid "bad domain in dhcp-option"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1467
|
||||
msgid "dhcp-option too long"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1664
|
||||
msgid "bad TXT record"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1696
|
||||
msgid "TXT record string too long"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1735
|
||||
msgid "bad SRV record"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1748
|
||||
msgid "bad SRV target"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1760
|
||||
msgid "invalid port number"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1771
|
||||
msgid "invalid priority"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1782
|
||||
msgid "invalid weight"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1807
|
||||
msgid "error"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1809
|
||||
#, c-format
|
||||
msgid "bad command line options: %s."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1853
|
||||
#, c-format
|
||||
msgid "cannot get host-name: %s"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1882
|
||||
msgid "only one resolv.conf file allowed in no-poll mode."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1889
|
||||
msgid "must have exactly one resolv.conf to read domain from."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1892 network.c:591
|
||||
#, c-format
|
||||
msgid "failed to read %s: %m"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1910
|
||||
#, c-format
|
||||
msgid "no search directive found in %s"
|
||||
msgstr ""
|
||||
|
||||
#: forward.c:383
|
||||
#, c-format
|
||||
msgid "nameserver %s refused to do a recursive query"
|
||||
msgstr ""
|
||||
|
||||
#: forward.c:914
|
||||
msgid "forwarding table overflow: check for server loops."
|
||||
msgstr ""
|
||||
|
||||
#: isc.c:71 dnsmasq.c:482
|
||||
#, 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:115
|
||||
msgid ""
|
||||
"ISC dhcpd integration not available: set HAVE_ISC_READER in src/config.h"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:119
|
||||
#, c-format
|
||||
msgid "failed to find list of interfaces: %s"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:134
|
||||
#, c-format
|
||||
msgid "unknown interface %s"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:140
|
||||
#, c-format
|
||||
msgid "no interface with address %s"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:149
|
||||
#, c-format
|
||||
msgid "cannot open %s:%s"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:163
|
||||
msgid "must set exactly one interface on broken systems without IP_RECVIF"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:176 dnsmasq.c:520
|
||||
#, c-format
|
||||
msgid "DBus error: %s"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:179
|
||||
msgid "DBus not available: set HAVE_DBUS in src/config.h"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:292
|
||||
#, c-format
|
||||
msgid "started, version %s cachesize %d"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:294
|
||||
#, c-format
|
||||
msgid "started, version %s cache disabled"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:296
|
||||
#, c-format
|
||||
msgid "compile time options: %s"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:302
|
||||
msgid "DBus support enabled: connected to system bus"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:304
|
||||
msgid "DBus support enabled: bus connection pending"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:309
|
||||
msgid "setting --bind-interfaces option because of OS limitations"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:314
|
||||
#, c-format
|
||||
msgid "warning: interface %s does not currently exist"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:331
|
||||
#, c-format
|
||||
msgid "DHCP, static leases only on %.0s%s, lease time %s"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:332
|
||||
#, c-format
|
||||
msgid "DHCP, IP range %s -- %s, lease time %s"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:343
|
||||
#, c-format
|
||||
msgid "DHCP, %s will be written every %s"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:348
|
||||
msgid "running as root"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:522
|
||||
msgid "connected to system DBus"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:533
|
||||
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:234
|
||||
msgid "Cannot use RTnetlink socket, falling back to ioctl API"
|
||||
msgstr ""
|
||||
|
||||
#: dhcp.c:345
|
||||
#, c-format
|
||||
msgid "DHCP request for unsupported hardware type (%d) recieved on %s"
|
||||
msgstr ""
|
||||
|
||||
#: dhcp.c:413
|
||||
#, c-format
|
||||
msgid "DHCP range %s -- %s is not consistent with netmask %s"
|
||||
msgstr ""
|
||||
|
||||
#: dhcp.c:722
|
||||
#, c-format
|
||||
msgid "failed to read %s:%m"
|
||||
msgstr ""
|
||||
|
||||
#: dhcp.c:741
|
||||
#, c-format
|
||||
msgid "bad line at %s line %d"
|
||||
msgstr ""
|
||||
|
||||
#: dhcp.c:845
|
||||
#, c-format
|
||||
msgid "duplicate IP address %s (%s) in dhcp-config directive"
|
||||
msgstr ""
|
||||
|
||||
#: dhcp.c:881
|
||||
#, c-format
|
||||
msgid "Ignoring DHCP host name %s because it has an illegal domain part"
|
||||
msgstr ""
|
||||
|
||||
#: lease.c:38
|
||||
#, c-format
|
||||
msgid "cannot open or create leases file: %s"
|
||||
msgstr ""
|
||||
|
||||
#: lease.c:80
|
||||
msgid "too many stored leases"
|
||||
msgstr ""
|
||||
|
||||
#: lease.c:179
|
||||
msgid "failed to write"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:218
|
||||
#, c-format
|
||||
msgid "no address range available for DHCP request %s %s"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:219
|
||||
msgid "with subnet selector"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:219
|
||||
msgid "via"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:240 rfc2131.c:264
|
||||
msgid "disabled"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:275 rfc2131.c:674
|
||||
msgid "address in use"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:278
|
||||
msgid "no address configured"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:291 rfc2131.c:546
|
||||
msgid "no address available"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:298 rfc2131.c:677
|
||||
msgid "no leases left"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:301 rfc2131.c:650
|
||||
msgid "wrong network"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:505
|
||||
#, c-format
|
||||
msgid "disabling DHCP static address %s"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:523
|
||||
msgid "unknown lease"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:536 rfc2131.c:749
|
||||
msgid "ignored"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:619
|
||||
msgid "wrong address"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:632
|
||||
msgid "lease not found"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:658
|
||||
msgid "address not available"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:667
|
||||
msgid "static lease available"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:671
|
||||
msgid "address reserved"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:871
|
||||
#, c-format
|
||||
msgid "cannot send DHCP option %d: no space left in packet"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:1174
|
||||
#, c-format
|
||||
msgid "More than one vendor class matches, using %s"
|
||||
msgstr ""
|
||||
|
||||
#: netlink.c:41
|
||||
#, 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 ""
|
||||
905
po/fr.po
Normal file
905
po/fr.po
Normal file
@@ -0,0 +1,905 @@
|
||||
# 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: 2006-03-16 20:04+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:754
|
||||
#, fuzzy, c-format
|
||||
msgid "bad address at %s line %d"
|
||||
msgstr "mauvais nom dans %s ligne %d"
|
||||
|
||||
#: cache.c:628 dhcp.c:768
|
||||
#, c-format
|
||||
msgid "bad name at %s line %d"
|
||||
msgstr "mauvais nom dans %s ligne %d"
|
||||
|
||||
#: cache.c:634 dhcp.c:822
|
||||
#, 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:1302
|
||||
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:125
|
||||
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:126
|
||||
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:127
|
||||
msgid "Fake reverse lookups for RFC1918 private address ranges."
|
||||
msgstr "Traduction inverse truquee pour la plage d'adresse privee RFC1918"
|
||||
|
||||
#: option.c:128
|
||||
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:129
|
||||
#, 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:130
|
||||
#, c-format
|
||||
msgid "Specify configuration file (defaults to %s)."
|
||||
msgstr "Specifie le nom du fichier de configuration (par defaut %s)"
|
||||
|
||||
#: option.c:131
|
||||
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:132
|
||||
msgid "Do NOT forward queries with no domain part."
|
||||
msgstr "Ne retransmet pas les requetes qui n'ont pas de domaine."
|
||||
|
||||
#: option.c:133
|
||||
msgid "Return self-pointing MX records for local hosts."
|
||||
msgstr "Retourne les champs MX pour les machines locales."
|
||||
|
||||
#: option.c:134
|
||||
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:135
|
||||
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:136
|
||||
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:137
|
||||
#, 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:138
|
||||
msgid "Set address or hostname for a specified machine."
|
||||
msgstr "On assigne une adresse ou un nom pour une machine specifiee."
|
||||
|
||||
#: option.c:139
|
||||
#, c-format
|
||||
msgid "Do NOT load %s file."
|
||||
msgstr "Ne charge PAS le fichier %s."
|
||||
|
||||
#: option.c:140
|
||||
#, 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:141
|
||||
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:142
|
||||
msgid "Specify interface(s) NOT to listen on."
|
||||
msgstr "Specifie la ou les interface(s) que le demon ne doit PAS traiter."
|
||||
|
||||
#: option.c:143
|
||||
msgid "Map DHCP user class to option set."
|
||||
msgstr "Associe les 'user class' DHCP aux options."
|
||||
|
||||
#: option.c:144
|
||||
msgid "Don't do DHCP for hosts in option set."
|
||||
msgstr "Ne pas autoriser DHCP pour les machines enumerees dans les options."
|
||||
|
||||
#: option.c:145
|
||||
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:146
|
||||
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:147
|
||||
#, 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:148
|
||||
msgid "Return MX records for local hosts."
|
||||
msgstr "Retourne les champs MX pour les machines locales."
|
||||
|
||||
#: option.c:149
|
||||
msgid "Specify an MX record."
|
||||
msgstr "Specifie un champ MX."
|
||||
|
||||
#: option.c:150
|
||||
msgid "Specify BOOTP options to DHCP server."
|
||||
msgstr "Specifie les options BOOTP pour le serveur DHCP."
|
||||
|
||||
#: option.c:151
|
||||
#, 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:152
|
||||
msgid "Do NOT cache failed search results."
|
||||
msgstr "Ne place pas en cache le resultat des requetes qui ont echouees."
|
||||
|
||||
#: option.c:153
|
||||
#, 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:154
|
||||
msgid "Set extra options to be set to DHCP clients."
|
||||
msgstr "Options supplementaires a associer aux clients DHCP."
|
||||
|
||||
#: option.c:155
|
||||
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:156
|
||||
#, 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:157
|
||||
msgid "Log queries."
|
||||
msgstr "Logue les requetes."
|
||||
|
||||
#: option.c:158
|
||||
msgid "Force the originating port for upstream queries."
|
||||
msgstr "Force le port d'origine des requetes vers les serveurs amonts."
|
||||
|
||||
#: option.c:159
|
||||
msgid "Do NOT read resolv.conf."
|
||||
msgstr "Ne pas lire le fichier resolv.conf."
|
||||
|
||||
#: option.c:160
|
||||
#, 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:161
|
||||
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:162
|
||||
msgid "Never forward queries to specified domains."
|
||||
msgstr "Ne jamais retransmettre les requetes pour les domaines specifies."
|
||||
|
||||
#: option.c:163
|
||||
msgid "Specify the domain to be assigned in DHCP leases."
|
||||
msgstr "Specifie le domaine qui doit etre assigne aux baux DHCP."
|
||||
|
||||
#: option.c:164
|
||||
msgid "Specify default target in an MX record."
|
||||
msgstr "Speficie la cible par defaut dans un champ MX."
|
||||
|
||||
#: option.c:165
|
||||
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:166
|
||||
#, 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:167
|
||||
msgid "Map DHCP vendor class to option set."
|
||||
msgstr "Associe les 'vendor class' DHCP aux options."
|
||||
|
||||
#: option.c:168
|
||||
msgid "Display dnsmasq version and copyright information."
|
||||
msgstr "Affiche la version de Dnsmasq et les informations liees au copyright."
|
||||
|
||||
#: option.c:169
|
||||
msgid "Translate IPv4 addresses from upstream servers."
|
||||
msgstr "Traduit les adresses IPV4 des serveurs amonts."
|
||||
|
||||
#: option.c:170
|
||||
msgid "Specify a SRV record."
|
||||
msgstr " Specifie un champ SRV."
|
||||
|
||||
#: option.c:171
|
||||
msgid "Display this message."
|
||||
msgstr "Affiche ce message."
|
||||
|
||||
#: option.c:172
|
||||
#, 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:173
|
||||
#, 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:174
|
||||
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:175
|
||||
msgid "Specify TXT DNS record."
|
||||
msgstr "Specifie un champ DNS TXT"
|
||||
|
||||
#: option.c:176
|
||||
msgid "Bind only to interfaces in use."
|
||||
msgstr "Associe seulement aux interfaces en utilisation."
|
||||
|
||||
#: option.c:177
|
||||
#, c-format
|
||||
msgid "Read DHCP static host information from %s."
|
||||
msgstr "Lecture des informations de DHCP statique a partir de %s."
|
||||
|
||||
#: option.c:178
|
||||
msgid "Enable the DBus interface for setting upstream servers, etc."
|
||||
msgstr "Autorise l'interface DBus a configurer les serveurs amonts, etc."
|
||||
|
||||
#: option.c:179
|
||||
msgid "Do not provide DHCP on this interface, only provide DNS."
|
||||
msgstr "Ne fourni pas DHCP pour cette interface, mais seulement DNS."
|
||||
|
||||
#: option.c:180
|
||||
msgid "Enable dynamic address allocation for bootp."
|
||||
msgstr "Autorise l'allocation dynamique d'adresse pour bootp."
|
||||
|
||||
#: option.c:181
|
||||
#, fuzzy
|
||||
msgid "Map MAC address (with wildcards) to option set."
|
||||
msgstr "Associe les 'vendor class' DHCP aux options."
|
||||
|
||||
#: option.c:396
|
||||
msgid "missing \""
|
||||
msgstr "il manque \""
|
||||
|
||||
#: option.c:425
|
||||
msgid "bad option"
|
||||
msgstr "mauvaise option"
|
||||
|
||||
#: option.c:442
|
||||
#, c-format
|
||||
msgid "cannot read %s: %s"
|
||||
msgstr "Ne peut pas lire %s: %s"
|
||||
|
||||
#: option.c:448
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Usage: dnsmasq [options]\n"
|
||||
"\n"
|
||||
msgstr ""
|
||||
"Usage: dnsmasq [options]\n"
|
||||
"\n"
|
||||
|
||||
#: option.c:450
|
||||
#, 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:452
|
||||
#, c-format
|
||||
msgid "Valid options are :\n"
|
||||
msgstr "Les options valides sont :\n"
|
||||
|
||||
#: option.c:477
|
||||
#, c-format
|
||||
msgid "Dnsmasq version %s %s\n"
|
||||
msgstr "Version de Dnsmasq %s %s\n"
|
||||
|
||||
#: option.c:478
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Compile time options %s\n"
|
||||
"\n"
|
||||
msgstr ""
|
||||
"Options a la compilation %s\n"
|
||||
"\n"
|
||||
|
||||
#: option.c:479
|
||||
#, c-format
|
||||
msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
|
||||
msgstr "Ce logiciel est fourni sans GARANTIE aucune.\n"
|
||||
|
||||
#: option.c:480
|
||||
#, 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:481
|
||||
#, 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:491
|
||||
msgid "extraneous parameter"
|
||||
msgstr "parametre supplementaire"
|
||||
|
||||
#: option.c:499
|
||||
msgid "missing parameter"
|
||||
msgstr "parametre manquant"
|
||||
|
||||
#: option.c:516
|
||||
msgid "nested includes not allowed"
|
||||
msgstr "Inclusions d'inclusions non autorisees"
|
||||
|
||||
#: option.c:576
|
||||
msgid "bad MX preference"
|
||||
msgstr "Mauvaise preference MX"
|
||||
|
||||
#: option.c:585
|
||||
msgid "bad MX name"
|
||||
msgstr "mauvais nom MX"
|
||||
|
||||
#: option.c:603
|
||||
msgid "bad MX target"
|
||||
msgstr "mauvaise cible MX"
|
||||
|
||||
#: option.c:805 option.c:816
|
||||
msgid "bad port"
|
||||
msgstr "mauvais port"
|
||||
|
||||
#: option.c:957
|
||||
msgid "bad dhcp-range"
|
||||
msgstr "mauvaise plage d'adresses DHCP (dhcp-range)"
|
||||
|
||||
#: option.c:986
|
||||
msgid "only one netid tag allowed"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1031
|
||||
msgid "inconsistent DHCP range"
|
||||
msgstr "plage d'adresses DHCP incoherente"
|
||||
|
||||
#: option.c:1219
|
||||
msgid "bad dhcp-host"
|
||||
msgstr "mauvais dhcp-host"
|
||||
|
||||
#: option.c:1279
|
||||
msgid "bad dhcp-option"
|
||||
msgstr "mauvais dhcp-option"
|
||||
|
||||
#: option.c:1297
|
||||
msgid "bad domain in dhcp-option"
|
||||
msgstr "mauvais domaine dans dhcp-option"
|
||||
|
||||
#: option.c:1467
|
||||
msgid "dhcp-option too long"
|
||||
msgstr "dhcp-option trop long"
|
||||
|
||||
#: option.c:1664
|
||||
msgid "bad TXT record"
|
||||
msgstr "mauvais champ TXT"
|
||||
|
||||
#: option.c:1696
|
||||
msgid "TXT record string too long"
|
||||
msgstr "chaîne du champ TXT trop longue"
|
||||
|
||||
#: option.c:1735
|
||||
msgid "bad SRV record"
|
||||
msgstr "mauvais champ SRV"
|
||||
|
||||
#: option.c:1748
|
||||
msgid "bad SRV target"
|
||||
msgstr "mauvaise cible SRV"
|
||||
|
||||
#: option.c:1760
|
||||
msgid "invalid port number"
|
||||
msgstr "numero de port invalide"
|
||||
|
||||
#: option.c:1771
|
||||
msgid "invalid priority"
|
||||
msgstr "priorite invalide"
|
||||
|
||||
#: option.c:1782
|
||||
msgid "invalid weight"
|
||||
msgstr "poids invalide"
|
||||
|
||||
#: option.c:1807
|
||||
msgid "error"
|
||||
msgstr "erreur"
|
||||
|
||||
#: option.c:1809
|
||||
#, c-format
|
||||
msgid "bad command line options: %s."
|
||||
msgstr "mauvaises options en ligne de commande: %s."
|
||||
|
||||
#: option.c:1853
|
||||
#, c-format
|
||||
msgid "cannot get host-name: %s"
|
||||
msgstr "ne peut pas obtenir le nom de la machine: %s"
|
||||
|
||||
#: option.c:1882
|
||||
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:1889
|
||||
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:1892 network.c:591
|
||||
#, c-format
|
||||
msgid "failed to read %s: %m"
|
||||
msgstr "impossible de lire %s: %m"
|
||||
|
||||
#: option.c:1910
|
||||
#, c-format
|
||||
msgid "no search directive found in %s"
|
||||
msgstr "pas de directive de recherche trouvee dans %s"
|
||||
|
||||
#: forward.c:383
|
||||
#, 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:914
|
||||
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:482
|
||||
#, 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:115
|
||||
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:119
|
||||
#, c-format
|
||||
msgid "failed to find list of interfaces: %s"
|
||||
msgstr "impossible de trouver la liste des interfaces: %s"
|
||||
|
||||
#: dnsmasq.c:134
|
||||
#, c-format
|
||||
msgid "unknown interface %s"
|
||||
msgstr "interface %s inconnue"
|
||||
|
||||
#: dnsmasq.c:140
|
||||
#, c-format
|
||||
msgid "no interface with address %s"
|
||||
msgstr "pas d'interface avec l'adresse %s"
|
||||
|
||||
#: dnsmasq.c:149
|
||||
#, c-format
|
||||
msgid "cannot open %s:%s"
|
||||
msgstr "ne peut pas ouvrir %s:%s"
|
||||
|
||||
#: dnsmasq.c:163
|
||||
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:176 dnsmasq.c:520
|
||||
#, c-format
|
||||
msgid "DBus error: %s"
|
||||
msgstr "Erreur DBus: %s"
|
||||
|
||||
#: dnsmasq.c:179
|
||||
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:292
|
||||
#, c-format
|
||||
msgid "started, version %s cachesize %d"
|
||||
msgstr "demarre, version %s taille de cache %d"
|
||||
|
||||
#: dnsmasq.c:294
|
||||
#, c-format
|
||||
msgid "started, version %s cache disabled"
|
||||
msgstr "demarre, version %s cache desactive"
|
||||
|
||||
#: dnsmasq.c:296
|
||||
#, c-format
|
||||
msgid "compile time options: %s"
|
||||
msgstr "options a la compilation: %s"
|
||||
|
||||
#: dnsmasq.c:302
|
||||
msgid "DBus support enabled: connected to system bus"
|
||||
msgstr "Support DBus autorise: connecte au bus systeme"
|
||||
|
||||
#: dnsmasq.c:304
|
||||
msgid "DBus support enabled: bus connection pending"
|
||||
msgstr "Support DBus autorise: connexion au bus en suspend"
|
||||
|
||||
#: dnsmasq.c:309
|
||||
msgid "setting --bind-interfaces option because of OS limitations"
|
||||
msgstr "Active l'option --bind-interfaces a cause des limitations de l'OS"
|
||||
|
||||
#: dnsmasq.c:314
|
||||
#, c-format
|
||||
msgid "warning: interface %s does not currently exist"
|
||||
msgstr "Attention: l'interface %s n'existe pas actuellement"
|
||||
|
||||
#: dnsmasq.c:331
|
||||
#, 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:332
|
||||
#, c-format
|
||||
msgid "DHCP, IP range %s -- %s, lease time %s"
|
||||
msgstr "DHCP, plage d'adresse %s -- %s, duree de bail %s"
|
||||
|
||||
#: dnsmasq.c:343
|
||||
#, c-format
|
||||
msgid "DHCP, %s will be written every %s"
|
||||
msgstr "DHCP, %s sera ecrit chaque %s"
|
||||
|
||||
#: dnsmasq.c:348
|
||||
msgid "running as root"
|
||||
msgstr "execute sous root"
|
||||
|
||||
#: dnsmasq.c:522
|
||||
msgid "connected to system DBus"
|
||||
msgstr "connecte au systeme DBus"
|
||||
|
||||
#: dnsmasq.c:533
|
||||
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:234
|
||||
msgid "Cannot use RTnetlink socket, falling back to ioctl API"
|
||||
msgstr ""
|
||||
|
||||
#: dhcp.c:345
|
||||
#, 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"
|
||||
|
||||
#: dhcp.c:413
|
||||
#, 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:722
|
||||
#, c-format
|
||||
msgid "failed to read %s:%m"
|
||||
msgstr "impossible de lire %s:%m"
|
||||
|
||||
#: dhcp.c:741
|
||||
#, fuzzy, c-format
|
||||
msgid "bad line at %s line %d"
|
||||
msgstr "mauvais nom dans %s ligne %d"
|
||||
|
||||
#: dhcp.c:845
|
||||
#, 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:881
|
||||
#, 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:38
|
||||
#, c-format
|
||||
msgid "cannot open or create leases file: %s"
|
||||
msgstr "ne peut ouvrir ou creer des fichiers de baux: %s"
|
||||
|
||||
#: lease.c:80
|
||||
msgid "too many stored leases"
|
||||
msgstr "beaucoup trop de baux enregistres"
|
||||
|
||||
#: lease.c:179
|
||||
#, fuzzy
|
||||
msgid "failed to write"
|
||||
msgstr "impossible de lire %s:%m"
|
||||
|
||||
#: rfc2131.c:218
|
||||
#, 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:219
|
||||
msgid "with subnet selector"
|
||||
msgstr "avec selecteur de sous-reseau"
|
||||
|
||||
#: rfc2131.c:219
|
||||
msgid "via"
|
||||
msgstr "par l'intermediaire de"
|
||||
|
||||
#: rfc2131.c:240 rfc2131.c:264
|
||||
msgid "disabled"
|
||||
msgstr "desactive"
|
||||
|
||||
#: rfc2131.c:275 rfc2131.c:674
|
||||
msgid "address in use"
|
||||
msgstr "adresse deja utilisee"
|
||||
|
||||
#: rfc2131.c:278
|
||||
msgid "no address configured"
|
||||
msgstr "pas d'adresse configuree"
|
||||
|
||||
#: rfc2131.c:291 rfc2131.c:546
|
||||
msgid "no address available"
|
||||
msgstr "pas d'adresse disponible"
|
||||
|
||||
#: rfc2131.c:298 rfc2131.c:677
|
||||
msgid "no leases left"
|
||||
msgstr "aucun baux laisses"
|
||||
|
||||
#: rfc2131.c:301 rfc2131.c:650
|
||||
msgid "wrong network"
|
||||
msgstr "mauvais reseau"
|
||||
|
||||
#: rfc2131.c:505
|
||||
#, c-format
|
||||
msgid "disabling DHCP static address %s"
|
||||
msgstr "desactive l'adresse statique DHCP %s"
|
||||
|
||||
#: rfc2131.c:523
|
||||
msgid "unknown lease"
|
||||
msgstr "bail inconnu"
|
||||
|
||||
#: rfc2131.c:536 rfc2131.c:749
|
||||
msgid "ignored"
|
||||
msgstr "ignore"
|
||||
|
||||
#: rfc2131.c:619
|
||||
msgid "wrong address"
|
||||
msgstr "mauvaise adresse"
|
||||
|
||||
#: rfc2131.c:632
|
||||
msgid "lease not found"
|
||||
msgstr "bail non trouve"
|
||||
|
||||
#: rfc2131.c:658
|
||||
msgid "address not available"
|
||||
msgstr "adresse non disponible"
|
||||
|
||||
#: rfc2131.c:667
|
||||
msgid "static lease available"
|
||||
msgstr "bail statique disponible"
|
||||
|
||||
#: rfc2131.c:671
|
||||
msgid "address reserved"
|
||||
msgstr "adresse reservee"
|
||||
|
||||
#: rfc2131.c:871
|
||||
#, c-format
|
||||
msgid "cannot send DHCP option %d: no space left in packet"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:1174
|
||||
#, 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:41
|
||||
#, 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"
|
||||
873
po/no.po
Normal file
873
po/no.po
Normal file
@@ -0,0 +1,873 @@
|
||||
# Norwegian translations for dnsmasq package.
|
||||
# This file is put in the public domain.
|
||||
# Simon Kelley <simon@thekelleys.org.uk>, 2006.
|
||||
#
|
||||
# Current translator: Jan Erik Askildt <jeaskildt@gmail.com>, 2006
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: dnsmasq 2.25\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2006-03-16 20:04+0000\n"
|
||||
"PO-Revision-Date: 2006-01-11 17:39+0000\n"
|
||||
"Last-Translator: Jan Erik Askildt <jeaskildt@gmail.com>\n"
|
||||
"Language-Team: Norwegian <i18n-nb@lister.ping.uio.no>\n"
|
||||
"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 "feilet å laste navn fra %s: %m"
|
||||
|
||||
#: cache.c:601 dhcp.c:754
|
||||
#, c-format
|
||||
msgid "bad address at %s line %d"
|
||||
msgstr "dårlig adresse ved %s linje %d"
|
||||
|
||||
#: cache.c:628 dhcp.c:768
|
||||
#, c-format
|
||||
msgid "bad name at %s line %d"
|
||||
msgstr "dårlig navn ved %s linje %d"
|
||||
|
||||
#: cache.c:634 dhcp.c:822
|
||||
#, c-format
|
||||
msgid "read %s - %d addresses"
|
||||
msgstr "les %s - %d adresser"
|
||||
|
||||
#: cache.c:670
|
||||
msgid "cleared cache"
|
||||
msgstr "mellomlager tømt"
|
||||
|
||||
#: 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 ""
|
||||
"gir ikke navnet %s til DHCP leien for %s fordi navnet eksisterer i %s med "
|
||||
"adressen %s"
|
||||
|
||||
#: cache.c:767
|
||||
#, c-format
|
||||
msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
|
||||
msgstr ""
|
||||
"mellomlager størrelse %d, %d/%d mellomlager innsettinger re-bruker "
|
||||
"mellomlager plasser som ikke er utløpt"
|
||||
|
||||
#: util.c:149 option.c:1302
|
||||
msgid "could not get memory"
|
||||
msgstr "kunne ikke få minne"
|
||||
|
||||
#: util.c:172
|
||||
#, c-format
|
||||
msgid "%s at line %d of %%s"
|
||||
msgstr "%s på linje %d av %%s"
|
||||
|
||||
#: util.c:179
|
||||
msgid "FAILED to start up"
|
||||
msgstr "FEILET å starte opp"
|
||||
|
||||
#: util.c:305
|
||||
#, c-format
|
||||
msgid "infinite"
|
||||
msgstr "uendelig"
|
||||
|
||||
#: option.c:125
|
||||
msgid "Specify local address(es) to listen on."
|
||||
msgstr "Spesifiser lokal(e) adresse(r) å lytte på."
|
||||
|
||||
#: option.c:126
|
||||
msgid "Return ipaddr for all hosts in specified domains."
|
||||
msgstr "Returner ipaddr for alle verter i det spesifiserte domenet."
|
||||
|
||||
#: option.c:127
|
||||
msgid "Fake reverse lookups for RFC1918 private address ranges."
|
||||
msgstr "Forfalsk revers oppslag for RFC1918 private adresse områder."
|
||||
|
||||
#: option.c:128
|
||||
msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
|
||||
msgstr "Behandle ipaddr som NXDOMAIN (omgår Verisign wildcard)."
|
||||
|
||||
#: option.c:129
|
||||
#, c-format
|
||||
msgid "Specify the size of the cache in entries (defaults to %s)."
|
||||
msgstr "Spesifiser størrelsen på mellomlager plassene (standard er %s)."
|
||||
|
||||
#: option.c:130
|
||||
#, c-format
|
||||
msgid "Specify configuration file (defaults to %s)."
|
||||
msgstr "Spesifiser konfigurasjonsfil (standard er %s)."
|
||||
|
||||
#: option.c:131
|
||||
msgid "Do NOT fork into the background: run in debug mode."
|
||||
msgstr "IKKE legg (fork) som bakgrunnsprosess: kjør i debug modus."
|
||||
|
||||
#: option.c:132
|
||||
msgid "Do NOT forward queries with no domain part."
|
||||
msgstr "IKKE videresend oppslag som mangler domene del."
|
||||
|
||||
#: option.c:133
|
||||
msgid "Return self-pointing MX records for local hosts."
|
||||
msgstr "Returner selv-pekende MX post for lokale verter."
|
||||
|
||||
#: option.c:134
|
||||
msgid "Expand simple names in /etc/hosts with domain-suffix."
|
||||
msgstr "Utvid enkle navn i /etc/hosts med domene-suffiks."
|
||||
|
||||
#: option.c:135
|
||||
msgid "Don't forward spurious DNS requests from Windows hosts."
|
||||
msgstr "Ikke videresend falske/uekte DNS forespørsler fra Windows verter."
|
||||
|
||||
#: option.c:136
|
||||
msgid "Enable DHCP in the range given with lease duration."
|
||||
msgstr "Aktiver DHCP i det gitte området med leie varighet"
|
||||
|
||||
#: option.c:137
|
||||
#, c-format
|
||||
msgid "Change to this group after startup (defaults to %s)."
|
||||
msgstr "Skift til denne gruppen etter oppstart (standard er %s)."
|
||||
|
||||
#: option.c:138
|
||||
msgid "Set address or hostname for a specified machine."
|
||||
msgstr "Sett adresse eller vertsnavn for en spesifikk maskin."
|
||||
|
||||
#: option.c:139
|
||||
#, c-format
|
||||
msgid "Do NOT load %s file."
|
||||
msgstr "IKKE last %s filen."
|
||||
|
||||
#: option.c:140
|
||||
#, c-format
|
||||
msgid "Specify a hosts file to be read in addition to %s."
|
||||
msgstr "Spesifiser en verts (hosts) fil som skal leses i tilleg til %s."
|
||||
|
||||
#: option.c:141
|
||||
msgid "Specify interface(s) to listen on."
|
||||
msgstr "Spesifiser nettverkskort det skal lyttes på."
|
||||
|
||||
#: option.c:142
|
||||
msgid "Specify interface(s) NOT to listen on."
|
||||
msgstr "Spesifiser nettverkskort det IKKE skal lyttes på."
|
||||
|
||||
#: option.c:143
|
||||
msgid "Map DHCP user class to option set."
|
||||
msgstr "Map DHCP bruker klasse til opsjon sett."
|
||||
|
||||
#: option.c:144
|
||||
msgid "Don't do DHCP for hosts in option set."
|
||||
msgstr "Ikke utfør DHCP for klienter i opsjon sett."
|
||||
|
||||
#: option.c:145
|
||||
msgid "Do NOT fork into the background, do NOT run in debug mode."
|
||||
msgstr "IKKE last (fork) som bakgrunnsprosess, IKKE kjør i debug modus."
|
||||
|
||||
#: option.c:146
|
||||
msgid "Assume we are the only DHCP server on the local network."
|
||||
msgstr "Anta at vi er den eneste DHCP tjeneren på det lokale nettverket."
|
||||
|
||||
#: option.c:147
|
||||
#, c-format
|
||||
msgid "Specify where to store DHCP leases (defaults to %s)."
|
||||
msgstr "Spesifiser hvor DHCP leiene skal lagres (standard er %s)."
|
||||
|
||||
#: option.c:148
|
||||
msgid "Return MX records for local hosts."
|
||||
msgstr "Returner MX records for lokale verter."
|
||||
|
||||
#: option.c:149
|
||||
msgid "Specify an MX record."
|
||||
msgstr "Spesifiser en MX post."
|
||||
|
||||
#: option.c:150
|
||||
msgid "Specify BOOTP options to DHCP server."
|
||||
msgstr "Spesifiser BOOTP opsjoner til DHCP tjener."
|
||||
|
||||
#: option.c:151
|
||||
#, c-format
|
||||
msgid "Do NOT poll %s file, reload only on SIGHUP."
|
||||
msgstr "IKKE spør (poll) %s fil, les på nytt kun ved SIGHUP"
|
||||
|
||||
#: option.c:152
|
||||
msgid "Do NOT cache failed search results."
|
||||
msgstr "IKKE mellomlagre søkeresultater som feiler."
|
||||
|
||||
#: option.c:153
|
||||
#, c-format
|
||||
msgid "Use nameservers strictly in the order given in %s."
|
||||
msgstr "Bruk navnetjenere kun som bestemt i rekkefølgen gitt i %s."
|
||||
|
||||
#: option.c:154
|
||||
msgid "Set extra options to be set to DHCP clients."
|
||||
msgstr "Sett ekstra opsjoner som skal fordeles til DHCP klientene."
|
||||
|
||||
#: option.c:155
|
||||
msgid "Specify port to listen for DNS requests on (defaults to 53)."
|
||||
msgstr "Spesifiser lytteport for DNS oppslag (standard er 53)."
|
||||
|
||||
#: option.c:156
|
||||
#, c-format
|
||||
msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
|
||||
msgstr "Maksimal støttet UDP pakkestørrelse for EDNS.0 (standard er %s)."
|
||||
|
||||
#: option.c:157
|
||||
msgid "Log queries."
|
||||
msgstr "Logg oppslag."
|
||||
|
||||
#: option.c:158
|
||||
msgid "Force the originating port for upstream queries."
|
||||
msgstr "Tving bruk av opprinnelig port for oppstrøms oppslag."
|
||||
|
||||
#: option.c:159
|
||||
msgid "Do NOT read resolv.conf."
|
||||
msgstr "IKKE les resolv.conf."
|
||||
|
||||
#: option.c:160
|
||||
#, c-format
|
||||
msgid "Specify path to resolv.conf (defaults to %s)."
|
||||
msgstr "Spesifiser stien til resolv.conf (standard er %s)."
|
||||
|
||||
#: option.c:161
|
||||
msgid "Specify address(es) of upstream servers with optional domains."
|
||||
msgstr "Spesifiser adressen(e) til oppstrøms tjenere med valgfrie domener."
|
||||
|
||||
#: option.c:162
|
||||
msgid "Never forward queries to specified domains."
|
||||
msgstr "Aldri videresend oppslag til spesifiserte domener."
|
||||
|
||||
#: option.c:163
|
||||
msgid "Specify the domain to be assigned in DHCP leases."
|
||||
msgstr "Spesifiser domenet som skal tildeles i DHCP leien."
|
||||
|
||||
#: option.c:164
|
||||
msgid "Specify default target in an MX record."
|
||||
msgstr "Spesifiser default mål i en MX post."
|
||||
|
||||
#: option.c:165
|
||||
msgid "Specify time-to-live in seconds for replies from /etc/hosts."
|
||||
msgstr "Spesifiser time-to-live i sekunder for svar fra /etc/hosts."
|
||||
|
||||
#: option.c:166
|
||||
#, c-format
|
||||
msgid "Change to this user after startup. (defaults to %s)."
|
||||
msgstr "Skift til denne bruker etter oppstart (standard er %s)."
|
||||
|
||||
#: option.c:167
|
||||
msgid "Map DHCP vendor class to option set."
|
||||
msgstr "Map DHCP produsent klasse til opsjon sett."
|
||||
|
||||
#: option.c:168
|
||||
msgid "Display dnsmasq version and copyright information."
|
||||
msgstr "Vis dnsmasq versjon og copyright informasjon."
|
||||
|
||||
#: option.c:169
|
||||
msgid "Translate IPv4 addresses from upstream servers."
|
||||
msgstr "Oversett IPv4 adresser fra oppstrøms tjenere."
|
||||
|
||||
#: option.c:170
|
||||
msgid "Specify a SRV record."
|
||||
msgstr "Spesifiser en SRV post."
|
||||
|
||||
#: option.c:171
|
||||
msgid "Display this message."
|
||||
msgstr "Vis denne meldingen."
|
||||
|
||||
#: option.c:172
|
||||
#, c-format
|
||||
msgid "Specify path of PID file. (defaults to %s)."
|
||||
msgstr "Spesifiser stien til PID fil. (standard er %s)."
|
||||
|
||||
#: option.c:173
|
||||
#, c-format
|
||||
msgid "Specify maximum number of DHCP leases (defaults to %s)."
|
||||
msgstr "Spesifiser maksimum antall DHCP leier (standard er %s)"
|
||||
|
||||
#: option.c:174
|
||||
msgid "Answer DNS queries based on the interface a query was sent to."
|
||||
msgstr "Svar DNS oppslag basert på nettverkskortet oppslaget ble sendt til."
|
||||
|
||||
#: option.c:175
|
||||
msgid "Specify TXT DNS record."
|
||||
msgstr "Spesifiser TXT DNS post."
|
||||
|
||||
#: option.c:176
|
||||
msgid "Bind only to interfaces in use."
|
||||
msgstr "Bind kun til nettverkskort som er i bruk."
|
||||
|
||||
#: option.c:177
|
||||
#, c-format
|
||||
msgid "Read DHCP static host information from %s."
|
||||
msgstr "Les DHCP statisk vert informasjon fra %s."
|
||||
|
||||
#: option.c:178
|
||||
msgid "Enable the DBus interface for setting upstream servers, etc."
|
||||
msgstr "Aktiver DBus interface for å sette oppstrøms tjenere, osv."
|
||||
|
||||
#: option.c:179
|
||||
msgid "Do not provide DHCP on this interface, only provide DNS."
|
||||
msgstr "Ikke lever DHCP på dette nettverkskortet, kun lever DNS."
|
||||
|
||||
#: option.c:180
|
||||
msgid "Enable dynamic address allocation for bootp."
|
||||
msgstr "Aktiver dynamisk adresse allokering for bootp."
|
||||
|
||||
#: option.c:181
|
||||
#, fuzzy
|
||||
msgid "Map MAC address (with wildcards) to option set."
|
||||
msgstr "Map DHCP produsent klasse til opsjon sett."
|
||||
|
||||
#: option.c:396
|
||||
msgid "missing \""
|
||||
msgstr "mangler \""
|
||||
|
||||
#: option.c:425
|
||||
msgid "bad option"
|
||||
msgstr "dårlig opsjon"
|
||||
|
||||
#: option.c:442
|
||||
#, c-format
|
||||
msgid "cannot read %s: %s"
|
||||
msgstr "kan ikke lese %s: %s"
|
||||
|
||||
#: option.c:448
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Usage: dnsmasq [options]\n"
|
||||
"\n"
|
||||
msgstr ""
|
||||
"Bruk: dnsmasq [opsjoner]\n"
|
||||
"\n"
|
||||
|
||||
#: option.c:450
|
||||
#, c-format
|
||||
msgid "Use short options only on the command line.\n"
|
||||
msgstr "Bruk korte opsjoner kun på kommandolinjen.\n"
|
||||
|
||||
#: option.c:452
|
||||
#, c-format
|
||||
msgid "Valid options are :\n"
|
||||
msgstr "Gyldige opsjoner er :\n"
|
||||
|
||||
#: option.c:477
|
||||
#, c-format
|
||||
msgid "Dnsmasq version %s %s\n"
|
||||
msgstr "Dnsmasq versjon %s %s\n"
|
||||
|
||||
#: option.c:478
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Compile time options %s\n"
|
||||
"\n"
|
||||
msgstr ""
|
||||
"Kompileringsopsjoner %s\n"
|
||||
"\n"
|
||||
|
||||
#: option.c:479
|
||||
#, c-format
|
||||
msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
|
||||
msgstr "Denne programvaren kommer med ABSOLUTT INGEN GARANTI.\n"
|
||||
|
||||
#: option.c:480
|
||||
#, c-format
|
||||
msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
|
||||
msgstr "DNsmasq er fri programvare, du er velkommen til å redistribuere den\n"
|
||||
|
||||
#: option.c:481
|
||||
#, c-format
|
||||
msgid "under the terms of the GNU General Public License, version 2.\n"
|
||||
msgstr "under vilkårene gitt i GNU General Public License, versjon 2.\n"
|
||||
|
||||
#: option.c:491
|
||||
msgid "extraneous parameter"
|
||||
msgstr "overflødig parameter"
|
||||
|
||||
#: option.c:499
|
||||
msgid "missing parameter"
|
||||
msgstr "mangler parameter"
|
||||
|
||||
#: option.c:516
|
||||
msgid "nested includes not allowed"
|
||||
msgstr "nøstede inkluderinger er ikke tillatt"
|
||||
|
||||
#: option.c:576
|
||||
msgid "bad MX preference"
|
||||
msgstr "dårlig MX preferanse"
|
||||
|
||||
#: option.c:585
|
||||
msgid "bad MX name"
|
||||
msgstr "dårlig MX navn"
|
||||
|
||||
#: option.c:603
|
||||
msgid "bad MX target"
|
||||
msgstr "dårlig MX mål"
|
||||
|
||||
#: option.c:805 option.c:816
|
||||
msgid "bad port"
|
||||
msgstr "dårlig port"
|
||||
|
||||
#: option.c:957
|
||||
msgid "bad dhcp-range"
|
||||
msgstr "dårlig dhcp-område"
|
||||
|
||||
#: option.c:986
|
||||
msgid "only one netid tag allowed"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1031
|
||||
msgid "inconsistent DHCP range"
|
||||
msgstr "ikke konsistent DHCP område"
|
||||
|
||||
#: option.c:1219
|
||||
msgid "bad dhcp-host"
|
||||
msgstr "dårlig dhcp-vert"
|
||||
|
||||
#: option.c:1279
|
||||
msgid "bad dhcp-option"
|
||||
msgstr "dårlig dhcp-opsjon"
|
||||
|
||||
#: option.c:1297
|
||||
msgid "bad domain in dhcp-option"
|
||||
msgstr "dårlig domene i dhcp-opsjon"
|
||||
|
||||
#: option.c:1467
|
||||
msgid "dhcp-option too long"
|
||||
msgstr "dhcp-opsjon for lang"
|
||||
|
||||
#: option.c:1664
|
||||
msgid "bad TXT record"
|
||||
msgstr "dårlig TXT post"
|
||||
|
||||
#: option.c:1696
|
||||
msgid "TXT record string too long"
|
||||
msgstr "TXT post streng for lang"
|
||||
|
||||
#: option.c:1735
|
||||
msgid "bad SRV record"
|
||||
msgstr "dårlig SRV post"
|
||||
|
||||
#: option.c:1748
|
||||
msgid "bad SRV target"
|
||||
msgstr "dårlig SRV mål"
|
||||
|
||||
#: option.c:1760
|
||||
msgid "invalid port number"
|
||||
msgstr "ugyldig portnummer"
|
||||
|
||||
#: option.c:1771
|
||||
msgid "invalid priority"
|
||||
msgstr "ugyldig prioritet"
|
||||
|
||||
#: option.c:1782
|
||||
msgid "invalid weight"
|
||||
msgstr "ugyldig vekt"
|
||||
|
||||
#: option.c:1807
|
||||
msgid "error"
|
||||
msgstr "feil"
|
||||
|
||||
#: option.c:1809
|
||||
#, c-format
|
||||
msgid "bad command line options: %s."
|
||||
msgstr "dårlige kommandlinje opsjoner: %s."
|
||||
|
||||
#: option.c:1853
|
||||
#, c-format
|
||||
msgid "cannot get host-name: %s"
|
||||
msgstr "klarer ikke å få vertsnavn: %s"
|
||||
|
||||
#: option.c:1882
|
||||
msgid "only one resolv.conf file allowed in no-poll mode."
|
||||
msgstr "kun en resolv.conf fil tillat i no-poll modus."
|
||||
|
||||
#: option.c:1889
|
||||
msgid "must have exactly one resolv.conf to read domain from."
|
||||
msgstr "må ha nøyaktig en resolv.conf å lese domene fra."
|
||||
|
||||
#: option.c:1892 network.c:591
|
||||
#, c-format
|
||||
msgid "failed to read %s: %m"
|
||||
msgstr "feilet å lese %s: %m"
|
||||
|
||||
#: option.c:1910
|
||||
#, c-format
|
||||
msgid "no search directive found in %s"
|
||||
msgstr "intet søke direktiv funnet i %s"
|
||||
|
||||
#: forward.c:383
|
||||
#, c-format
|
||||
msgid "nameserver %s refused to do a recursive query"
|
||||
msgstr "navnetjener %s nektet å gjøre et rekursivt oppslag"
|
||||
|
||||
#: forward.c:914
|
||||
msgid "forwarding table overflow: check for server loops."
|
||||
msgstr "fremsendelse (forwarding) tabell overflyt: sjekk etter tjener løkker."
|
||||
|
||||
#: isc.c:71 dnsmasq.c:482
|
||||
#, c-format
|
||||
msgid "failed to access %s: %m"
|
||||
msgstr "feilet å få tilgang til %s: %m"
|
||||
|
||||
#: isc.c:87
|
||||
#, c-format
|
||||
msgid "failed to load %s: %m"
|
||||
msgstr "feilet å laste %s: %m"
|
||||
|
||||
#: isc.c:91 network.c:595
|
||||
#, c-format
|
||||
msgid "reading %s"
|
||||
msgstr "leser %s"
|
||||
|
||||
#: isc.c:113
|
||||
#, c-format
|
||||
msgid "bad name in %s"
|
||||
msgstr "dårlig navn i %s"
|
||||
|
||||
#: isc.c:175
|
||||
#, c-format
|
||||
msgid "Ignoring DHCP lease for %s because it has an illegal domain part"
|
||||
msgstr "Ignorerer DHCP leie for %s siden den har en ulovlig domene del"
|
||||
|
||||
#: network.c:418
|
||||
#, c-format
|
||||
msgid "failed to create listening socket: %s"
|
||||
msgstr "feilet å lage lytte socket: %s"
|
||||
|
||||
#: network.c:425
|
||||
#, c-format
|
||||
msgid "failed to set IPV6 options on listening socket: %s"
|
||||
msgstr "feilet å sette IPv6 opsjoner på lytte socket: %s"
|
||||
|
||||
#: network.c:444
|
||||
#, c-format
|
||||
msgid "failed to bind listening socket for %s: %s"
|
||||
msgstr "feilet å binde lytte socket for %s: %s"
|
||||
|
||||
#: network.c:451
|
||||
#, c-format
|
||||
msgid "failed to listen on socket: %s"
|
||||
msgstr "feilet å lytte på socket: %s"
|
||||
|
||||
#: network.c:521
|
||||
#, c-format
|
||||
msgid "ignoring nameserver %s - local interface"
|
||||
msgstr "ignorerer navnetjener %s - lokal tilknytning"
|
||||
|
||||
#: network.c:530
|
||||
#, c-format
|
||||
msgid "ignoring nameserver %s - cannot make/bind socket: %m"
|
||||
msgstr "ignorerer navnetjener %s - kan ikke lage/dinde socket: %m"
|
||||
|
||||
#: network.c:544
|
||||
msgid "domain"
|
||||
msgstr "domene"
|
||||
|
||||
#: network.c:546
|
||||
msgid "unqualified"
|
||||
msgstr "ikke kvalifisert"
|
||||
|
||||
#: network.c:546
|
||||
msgid "domains"
|
||||
msgstr "domener"
|
||||
|
||||
#: network.c:549
|
||||
#, c-format
|
||||
msgid "using local addresses only for %s %s"
|
||||
msgstr "benytter lokale adresser kun for %s %s"
|
||||
|
||||
#: network.c:551
|
||||
#, c-format
|
||||
msgid "using nameserver %s#%d for %s %s"
|
||||
msgstr "benytter navnetjener %s#%d for %s %s"
|
||||
|
||||
#: network.c:554
|
||||
#, c-format
|
||||
msgid "using nameserver %s#%d"
|
||||
msgstr "benytter navnetjener %s#%d"
|
||||
|
||||
#: dnsmasq.c:115
|
||||
msgid ""
|
||||
"ISC dhcpd integration not available: set HAVE_ISC_READER in src/config.h"
|
||||
msgstr ""
|
||||
"ISC dhcpf integrasjon ikke tilgjengelig: sett HAVE_ISC_READER i src/config.h"
|
||||
|
||||
#: dnsmasq.c:119
|
||||
#, c-format
|
||||
msgid "failed to find list of interfaces: %s"
|
||||
msgstr "feilet å finne liste av tilknytninger (interfaces): %s"
|
||||
|
||||
#: dnsmasq.c:134
|
||||
#, c-format
|
||||
msgid "unknown interface %s"
|
||||
msgstr "ukjent tilknytning (interface) %s"
|
||||
|
||||
#: dnsmasq.c:140
|
||||
#, c-format
|
||||
msgid "no interface with address %s"
|
||||
msgstr "ingen tilknytning (interface) med adresse %s"
|
||||
|
||||
#: dnsmasq.c:149
|
||||
#, c-format
|
||||
msgid "cannot open %s:%s"
|
||||
msgstr "kan ikke åpne %s:%s"
|
||||
|
||||
#: dnsmasq.c:163
|
||||
msgid "must set exactly one interface on broken systems without IP_RECVIF"
|
||||
msgstr "må sette nøyaktig et interface på ødelagte systemer uten IP_RECVIF"
|
||||
|
||||
#: dnsmasq.c:176 dnsmasq.c:520
|
||||
#, c-format
|
||||
msgid "DBus error: %s"
|
||||
msgstr "DBus feil: %s"
|
||||
|
||||
#: dnsmasq.c:179
|
||||
msgid "DBus not available: set HAVE_DBUS in src/config.h"
|
||||
msgstr "DBus ikke tilgjengelig: sett HAVE_DBUS i src/config.h"
|
||||
|
||||
#: dnsmasq.c:292
|
||||
#, c-format
|
||||
msgid "started, version %s cachesize %d"
|
||||
msgstr "startet, versjon %s mellomlager størrelse %d"
|
||||
|
||||
#: dnsmasq.c:294
|
||||
#, c-format
|
||||
msgid "started, version %s cache disabled"
|
||||
msgstr "startet, versjon %s mellomlager deaktivert"
|
||||
|
||||
#: dnsmasq.c:296
|
||||
#, c-format
|
||||
msgid "compile time options: %s"
|
||||
msgstr "kompilerings opsjoner: %s"
|
||||
|
||||
#: dnsmasq.c:302
|
||||
msgid "DBus support enabled: connected to system bus"
|
||||
msgstr "DBus støtte aktivert: koblet til system buss"
|
||||
|
||||
#: dnsmasq.c:304
|
||||
msgid "DBus support enabled: bus connection pending"
|
||||
msgstr "DBus støtte aktivert: avventer buss tilkobling"
|
||||
|
||||
#: dnsmasq.c:309
|
||||
msgid "setting --bind-interfaces option because of OS limitations"
|
||||
msgstr "setter --bind-interfaces opsjon på grunn av OS begrensninger"
|
||||
|
||||
#: dnsmasq.c:314
|
||||
#, c-format
|
||||
msgid "warning: interface %s does not currently exist"
|
||||
msgstr "advarsel: nettverkskort %s eksisterer ikke for tiden"
|
||||
|
||||
#: dnsmasq.c:331
|
||||
#, c-format
|
||||
msgid "DHCP, static leases only on %.0s%s, lease time %s"
|
||||
msgstr "DHCP, statisk leie kun på %.0s%s, leie tid %s"
|
||||
|
||||
#: dnsmasq.c:332
|
||||
#, c-format
|
||||
msgid "DHCP, IP range %s -- %s, lease time %s"
|
||||
msgstr "DHCP, IP område %s -- %s, leie tid %s"
|
||||
|
||||
#: dnsmasq.c:343
|
||||
#, c-format
|
||||
msgid "DHCP, %s will be written every %s"
|
||||
msgstr "DHCP, %s vil bli skrevet hver %s"
|
||||
|
||||
#: dnsmasq.c:348
|
||||
msgid "running as root"
|
||||
msgstr "kjører som rot (root)"
|
||||
|
||||
#: dnsmasq.c:522
|
||||
msgid "connected to system DBus"
|
||||
msgstr "tilkoblet til system DBus"
|
||||
|
||||
#: dnsmasq.c:533
|
||||
msgid "exiting on receipt of SIGTERM"
|
||||
msgstr "avslutter etter mottak av SIGTERM"
|
||||
|
||||
#: dhcp.c:25
|
||||
#, c-format
|
||||
msgid "cannot create DHCP socket : %s"
|
||||
msgstr "kan ikke lage DHCP socket : %s"
|
||||
|
||||
#: dhcp.c:35
|
||||
#, c-format
|
||||
msgid "failed to set options on DHCP socket: %s"
|
||||
msgstr "feilet å sette opsjoner på DHCP socket: %s"
|
||||
|
||||
#: dhcp.c:42
|
||||
#, c-format
|
||||
msgid "failed to set SO_REUSEADDR on DHCP socket: %s"
|
||||
msgstr "feilet å sette SO_REUSEADDR på DHCP socket: %s"
|
||||
|
||||
#: dhcp.c:52
|
||||
#, c-format
|
||||
msgid "failed to bind DHCP server socket: %s"
|
||||
msgstr "feilet å binde DHCP tjener socket: %s"
|
||||
|
||||
#: dhcp.c:61
|
||||
#, c-format
|
||||
msgid "cannot create ICMP raw socket: %s."
|
||||
msgstr "kan ikke lage ICMP raw socket: %s"
|
||||
|
||||
#: dhcp.c:75
|
||||
#, c-format
|
||||
msgid "cannot create DHCP BPF socket: %s"
|
||||
msgstr "kan ikke lage DHCP BPF socket: %s"
|
||||
|
||||
#: dhcp.c:86
|
||||
#, c-format
|
||||
msgid ""
|
||||
"cannot create DHCP packet socket: %s. Is CONFIG_PACKET enabled in your "
|
||||
"kernel?"
|
||||
msgstr ""
|
||||
"kan ikke lage DHCP pakke socket: %s. Er CONFIG_PACKET aktivert i din kjerne?"
|
||||
|
||||
#: dhcp.c:98
|
||||
#, c-format
|
||||
msgid "duplicate IP address %s in dhcp-config directive."
|
||||
msgstr "dubliserte IP adresser i %s dhcp-config direktiv."
|
||||
|
||||
#: dhcp.c:234
|
||||
msgid "Cannot use RTnetlink socket, falling back to ioctl API"
|
||||
msgstr "Kan ikke benytte RTnetlink socket, faller tilbake til ioctl API"
|
||||
|
||||
#: dhcp.c:345
|
||||
#, c-format
|
||||
msgid "DHCP request for unsupported hardware type (%d) recieved on %s"
|
||||
msgstr "DHCP krav for ikke støttet maskinvare type (%d) mottatt på %s"
|
||||
|
||||
#: dhcp.c:413
|
||||
#, c-format
|
||||
msgid "DHCP range %s -- %s is not consistent with netmask %s"
|
||||
msgstr "DHCP område %s -- %s er ikke konsistent med nettmaske %s"
|
||||
|
||||
#: dhcp.c:722
|
||||
#, c-format
|
||||
msgid "failed to read %s:%m"
|
||||
msgstr "feilet å lese %s:%m"
|
||||
|
||||
#: dhcp.c:741
|
||||
#, c-format
|
||||
msgid "bad line at %s line %d"
|
||||
msgstr "dårlig linje ved %s linje %d"
|
||||
|
||||
#: dhcp.c:845
|
||||
#, c-format
|
||||
msgid "duplicate IP address %s (%s) in dhcp-config directive"
|
||||
msgstr "dubliserte IP adresser i %s (%s) i dhcp-config direktiv"
|
||||
|
||||
#: dhcp.c:881
|
||||
#, c-format
|
||||
msgid "Ignoring DHCP host name %s because it has an illegal domain part"
|
||||
msgstr "Ignorerer DHCP verts navn %s på grunn av ulovlig domene del"
|
||||
|
||||
#: lease.c:38
|
||||
#, c-format
|
||||
msgid "cannot open or create leases file: %s"
|
||||
msgstr "kan ikke åpne eller lage leie fil: %s"
|
||||
|
||||
#: lease.c:80
|
||||
msgid "too many stored leases"
|
||||
msgstr "for mange lagrede leier"
|
||||
|
||||
#: lease.c:179
|
||||
#, fuzzy
|
||||
msgid "failed to write"
|
||||
msgstr "feilet å lese %s:%m"
|
||||
|
||||
#: rfc2131.c:218
|
||||
#, c-format
|
||||
msgid "no address range available for DHCP request %s %s"
|
||||
msgstr "ingen adresse område tilgjengelig for DHCP krav %s %s"
|
||||
|
||||
#: rfc2131.c:219
|
||||
msgid "with subnet selector"
|
||||
msgstr "med subnet velger"
|
||||
|
||||
#: rfc2131.c:219
|
||||
msgid "via"
|
||||
msgstr "via"
|
||||
|
||||
#: rfc2131.c:240 rfc2131.c:264
|
||||
msgid "disabled"
|
||||
msgstr "deaktivert"
|
||||
|
||||
#: rfc2131.c:275 rfc2131.c:674
|
||||
msgid "address in use"
|
||||
msgstr "adresse i bruk"
|
||||
|
||||
#: rfc2131.c:278
|
||||
msgid "no address configured"
|
||||
msgstr "ingen adresse konfigurert"
|
||||
|
||||
#: rfc2131.c:291 rfc2131.c:546
|
||||
msgid "no address available"
|
||||
msgstr "ingen adresse tilgjengelig"
|
||||
|
||||
#: rfc2131.c:298 rfc2131.c:677
|
||||
msgid "no leases left"
|
||||
msgstr "ingen leier igjen"
|
||||
|
||||
#: rfc2131.c:301 rfc2131.c:650
|
||||
msgid "wrong network"
|
||||
msgstr "galt nettverk"
|
||||
|
||||
#: rfc2131.c:505
|
||||
#, c-format
|
||||
msgid "disabling DHCP static address %s"
|
||||
msgstr "deaktiverer DHCP statisk adresse %s"
|
||||
|
||||
#: rfc2131.c:523
|
||||
msgid "unknown lease"
|
||||
msgstr "ukjent leie"
|
||||
|
||||
#: rfc2131.c:536 rfc2131.c:749
|
||||
msgid "ignored"
|
||||
msgstr "oversett"
|
||||
|
||||
#: rfc2131.c:619
|
||||
msgid "wrong address"
|
||||
msgstr "gal adresse"
|
||||
|
||||
#: rfc2131.c:632
|
||||
msgid "lease not found"
|
||||
msgstr "leie ikke funnet"
|
||||
|
||||
#: rfc2131.c:658
|
||||
msgid "address not available"
|
||||
msgstr "adresse ikke tilgjengelig"
|
||||
|
||||
#: rfc2131.c:667
|
||||
msgid "static lease available"
|
||||
msgstr "statisk leie tilgjengelig"
|
||||
|
||||
#: rfc2131.c:671
|
||||
msgid "address reserved"
|
||||
msgstr "adresse reservert"
|
||||
|
||||
#: rfc2131.c:871
|
||||
#, c-format
|
||||
msgid "cannot send DHCP option %d: no space left in packet"
|
||||
msgstr "kan ikke sende DHCP opsjon %d: ikke mer plass i pakken"
|
||||
|
||||
#: rfc2131.c:1174
|
||||
#, c-format
|
||||
msgid "More than one vendor class matches, using %s"
|
||||
msgstr "Mer enn en produsent klasse som passer, bruker %s"
|
||||
|
||||
#: netlink.c:41
|
||||
#, c-format
|
||||
msgid "cannot bind netlink socket: %s"
|
||||
msgstr "kan ikke binde netlink socket: %s"
|
||||
|
||||
#: dbus.c:112
|
||||
msgid "attempt to set an IPv6 server address via DBus - no IPv6 support"
|
||||
msgstr "forsøk på å sette en IPv6 tjener adresse via DBus - ingen IPv6 støtte"
|
||||
|
||||
#: dbus.c:237
|
||||
msgid "setting upstream servers from DBus"
|
||||
msgstr "setter oppstrøms tjener fra DBus"
|
||||
|
||||
#: dbus.c:273
|
||||
msgid "could not register a DBus message handler"
|
||||
msgstr "kunne ikke registrere en DBus meldingshåndterer"
|
||||
888
po/pl.po
Normal file
888
po/pl.po
Normal file
@@ -0,0 +1,888 @@
|
||||
# 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: 2006-03-16 20:04+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:754
|
||||
#, fuzzy, c-format
|
||||
msgid "bad address at %s line %d"
|
||||
msgstr "b³êdna nazwa w %s, linia %d"
|
||||
|
||||
#: cache.c:628 dhcp.c:768
|
||||
#, c-format
|
||||
msgid "bad name at %s line %d"
|
||||
msgstr "b³êdna nazwa w %s, linia %d"
|
||||
|
||||
#: cache.c:634 dhcp.c:822
|
||||
#, 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:1302
|
||||
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:125
|
||||
msgid "Specify local address(es) to listen on."
|
||||
msgstr "Adres(y) lokalne do nas³uchiwania."
|
||||
|
||||
#: option.c:126
|
||||
msgid "Return ipaddr for all hosts in specified domains."
|
||||
msgstr "Zwracanie adresu IP dla wszystkich hostów w podanych domenach."
|
||||
|
||||
#: option.c:127
|
||||
msgid "Fake reverse lookups for RFC1918 private address ranges."
|
||||
msgstr "Symulacja reverse lookups dla adresów prywatnych opisanych w RFC1918."
|
||||
|
||||
#: option.c:128
|
||||
msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
|
||||
msgstr "Adres IP traktowany jak NXDOMAIN"
|
||||
|
||||
#: option.c:129
|
||||
#, 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:130
|
||||
#, c-format
|
||||
msgid "Specify configuration file (defaults to %s)."
|
||||
msgstr "¦cie¿ka do pliku konfiguracyjnego (domy¶lna: %s)"
|
||||
|
||||
#: option.c:131
|
||||
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:132
|
||||
msgid "Do NOT forward queries with no domain part."
|
||||
msgstr "Wy³±czenie przekazywania zapytañ bez czê¶ci domenowej."
|
||||
|
||||
#: option.c:133
|
||||
msgid "Return self-pointing MX records for local hosts."
|
||||
msgstr "Zwracanie samowskazuj±cego rekordu MX dla lokalnych hostów."
|
||||
|
||||
#: option.c:134
|
||||
msgid "Expand simple names in /etc/hosts with domain-suffix."
|
||||
msgstr "Rozwijanie prostych nazw z /etc/hosts przyrostkiem domenowym."
|
||||
|
||||
#: option.c:135
|
||||
msgid "Don't forward spurious DNS requests from Windows hosts."
|
||||
msgstr "Wy³±czenie przekazywania pozornych zapytañ DNS z komputerów Windows"
|
||||
|
||||
#: option.c:136
|
||||
msgid "Enable DHCP in the range given with lease duration."
|
||||
msgstr "Enable DHCP w zakresie okre¶lonym czasem dzier¿awy."
|
||||
|
||||
#: option.c:137
|
||||
#, 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:138
|
||||
msgid "Set address or hostname for a specified machine."
|
||||
msgstr "Ustawienie adresu lub nazwy hosta dla okre¶lonej maszyny."
|
||||
|
||||
#: option.c:139
|
||||
#, c-format
|
||||
msgid "Do NOT load %s file."
|
||||
msgstr "Ignorowanie pliku %s."
|
||||
|
||||
#: option.c:140
|
||||
#, c-format
|
||||
msgid "Specify a hosts file to be read in addition to %s."
|
||||
msgstr "Dodatkowy plik hostów poza %s."
|
||||
|
||||
#: option.c:141
|
||||
msgid "Specify interface(s) to listen on."
|
||||
msgstr "Interfejs(y) do nas³uchiwania."
|
||||
|
||||
#: option.c:142
|
||||
msgid "Specify interface(s) NOT to listen on."
|
||||
msgstr "Interfejs(y), na których nie nas³uchiwaæ."
|
||||
|
||||
#: option.c:143
|
||||
msgid "Map DHCP user class to option set."
|
||||
msgstr "W³±czenie mapowania klasy u¿ytkownika DHCP do option set."
|
||||
|
||||
#: option.c:144
|
||||
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:145
|
||||
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:146
|
||||
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:147
|
||||
#, 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:148
|
||||
msgid "Return MX records for local hosts."
|
||||
msgstr "W³±czenie zwracania rekord MX dla hostów lokalnych."
|
||||
|
||||
#: option.c:149
|
||||
msgid "Specify an MX record."
|
||||
msgstr "Specyfikacja rekordu MX."
|
||||
|
||||
#: option.c:150
|
||||
msgid "Specify BOOTP options to DHCP server."
|
||||
msgstr "Okre¶lenie opcji BOOTP serwera DHCP."
|
||||
|
||||
#: option.c:151
|
||||
#, 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:152
|
||||
msgid "Do NOT cache failed search results."
|
||||
msgstr ""
|
||||
"Wy³±czenie zapisywania w pamiêci podrêcznej nieudanych wyników wyszukiwania."
|
||||
|
||||
#: option.c:153
|
||||
#, 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:154
|
||||
msgid "Set extra options to be set to DHCP clients."
|
||||
msgstr "Dodatkowe opcje ustawieñ dla klientów DHCP."
|
||||
|
||||
#: option.c:155
|
||||
msgid "Specify port to listen for DNS requests on (defaults to 53)."
|
||||
msgstr "Port nas³uchiwania zapytañ DNS (domy¶lnie: 53)."
|
||||
|
||||
#: option.c:156
|
||||
#, 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:157
|
||||
msgid "Log queries."
|
||||
msgstr "Zapytania zapisywane w pliku log."
|
||||
|
||||
#: option.c:158
|
||||
msgid "Force the originating port for upstream queries."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:159
|
||||
msgid "Do NOT read resolv.conf."
|
||||
msgstr "Wy³±czenie czytania pliku resolv.conf"
|
||||
|
||||
#: option.c:160
|
||||
#, c-format
|
||||
msgid "Specify path to resolv.conf (defaults to %s)."
|
||||
msgstr "Podaj ¶cie¿kê do pliku resolv.conf (domy¶lnie: %s)."
|
||||
|
||||
#: option.c:161
|
||||
msgid "Specify address(es) of upstream servers with optional domains."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:162
|
||||
msgid "Never forward queries to specified domains."
|
||||
msgstr "Wy³±czenie przekazywania zapytañ do okre¶lonych domen."
|
||||
|
||||
#: option.c:163
|
||||
msgid "Specify the domain to be assigned in DHCP leases."
|
||||
msgstr "Nazwa domeny, która bêdzie przypisana w dzier¿awach DHCP."
|
||||
|
||||
#: option.c:164
|
||||
msgid "Specify default target in an MX record."
|
||||
msgstr "Okre¶lenie domy¶lnego celu w rekordzie MX."
|
||||
|
||||
#: option.c:165
|
||||
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:166
|
||||
#, 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:167
|
||||
msgid "Map DHCP vendor class to option set."
|
||||
msgstr "Mapowanie nazwy dystrybutora DHCP do ustawieñ opcji."
|
||||
|
||||
#: option.c:168
|
||||
msgid "Display dnsmasq version and copyright information."
|
||||
msgstr ""
|
||||
"W³±czenie pokazywania wersji dnsmasq i informacji o ochronie praw autorskich."
|
||||
|
||||
#: option.c:169
|
||||
msgid "Translate IPv4 addresses from upstream servers."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:170
|
||||
msgid "Specify a SRV record."
|
||||
msgstr "Okre¶lenie rekordu SRV."
|
||||
|
||||
#: option.c:171
|
||||
msgid "Display this message."
|
||||
msgstr "Wy¶wietlenie tych informacji."
|
||||
|
||||
#: option.c:172
|
||||
#, c-format
|
||||
msgid "Specify path of PID file. (defaults to %s)."
|
||||
msgstr "Okre¶lenie ¶cie¿ki do pliku PID. (domy¶lnie: %s)."
|
||||
|
||||
#: option.c:173
|
||||
#, c-format
|
||||
msgid "Specify maximum number of DHCP leases (defaults to %s)."
|
||||
msgstr "Maksymalna liczba dzier¿aw DHCP. (domy¶lnie: %s)."
|
||||
|
||||
#: option.c:174
|
||||
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:175
|
||||
msgid "Specify TXT DNS record."
|
||||
msgstr "Rekord TXT DNS."
|
||||
|
||||
#: option.c:176
|
||||
msgid "Bind only to interfaces in use."
|
||||
msgstr "W³±czenie nas³uchiwania tylko na u¿ywanych interfejsach."
|
||||
|
||||
#: option.c:177
|
||||
#, c-format
|
||||
msgid "Read DHCP static host information from %s."
|
||||
msgstr "Statycznych informacji DHCP hosta z pliku %s."
|
||||
|
||||
#: option.c:178
|
||||
msgid "Enable the DBus interface for setting upstream servers, etc."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:179
|
||||
msgid "Do not provide DHCP on this interface, only provide DNS."
|
||||
msgstr "Wy³±czenie DHCP na tym interfejsie, w³±czenie tylko DNS."
|
||||
|
||||
#: option.c:180
|
||||
msgid "Enable dynamic address allocation for bootp."
|
||||
msgstr "W³±czenie automatycznej alokacji adresu dla BOOTP."
|
||||
|
||||
#: option.c:181
|
||||
#, fuzzy
|
||||
msgid "Map MAC address (with wildcards) to option set."
|
||||
msgstr "Mapowanie nazwy dystrybutora DHCP do ustawieñ opcji."
|
||||
|
||||
#: option.c:396
|
||||
msgid "missing \""
|
||||
msgstr "brakuje \""
|
||||
|
||||
#: option.c:425
|
||||
msgid "bad option"
|
||||
msgstr "nieprawid³owa opcja"
|
||||
|
||||
#: option.c:442
|
||||
#, c-format
|
||||
msgid "cannot read %s: %s"
|
||||
msgstr "b³±d odczytu z %s: %s"
|
||||
|
||||
#: option.c:448
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Usage: dnsmasq [options]\n"
|
||||
"\n"
|
||||
msgstr ""
|
||||
"U¿ycie: dnsmasq [opcje]\n"
|
||||
"\n"
|
||||
|
||||
#: option.c:450
|
||||
#, c-format
|
||||
msgid "Use short options only on the command line.\n"
|
||||
msgstr "Tylko krótkie opcje w linii komend.\n"
|
||||
|
||||
#: option.c:452
|
||||
#, c-format
|
||||
msgid "Valid options are :\n"
|
||||
msgstr "Obs³ugiwane opcje:\n"
|
||||
|
||||
#: option.c:477
|
||||
#, c-format
|
||||
msgid "Dnsmasq version %s %s\n"
|
||||
msgstr "Dnsmasq, wersja %s %s\n"
|
||||
|
||||
#: option.c:478
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Compile time options %s\n"
|
||||
"\n"
|
||||
msgstr ""
|
||||
"Wkompilowane opcje %s\n"
|
||||
"\n"
|
||||
|
||||
#: option.c:479
|
||||
#, c-format
|
||||
msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
|
||||
msgstr "Oprogramowanie to nie zawiera ¿adnych gwarancji.\n"
|
||||
|
||||
#: option.c:480
|
||||
#, 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:481
|
||||
#, 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:491
|
||||
msgid "extraneous parameter"
|
||||
msgstr "dodatkowy parametr"
|
||||
|
||||
#: option.c:499
|
||||
msgid "missing parameter"
|
||||
msgstr "brak parametru"
|
||||
|
||||
#: option.c:516
|
||||
msgid "nested includes not allowed"
|
||||
msgstr "zagnie¿d¿one do³±czanie plików jest niedozwolone"
|
||||
|
||||
#: option.c:576
|
||||
msgid "bad MX preference"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:585
|
||||
msgid "bad MX name"
|
||||
msgstr "b³êdna nazwa MX"
|
||||
|
||||
#: option.c:603
|
||||
msgid "bad MX target"
|
||||
msgstr "b³êdny cel MX"
|
||||
|
||||
#: option.c:805 option.c:816
|
||||
msgid "bad port"
|
||||
msgstr "nieprawid³owy port"
|
||||
|
||||
#: option.c:957
|
||||
msgid "bad dhcp-range"
|
||||
msgstr "nieprawid³owy zakres dhcp-range"
|
||||
|
||||
#: option.c:986
|
||||
msgid "only one netid tag allowed"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1031
|
||||
msgid "inconsistent DHCP range"
|
||||
msgstr "niespójny zakres DHCP"
|
||||
|
||||
#: option.c:1219
|
||||
msgid "bad dhcp-host"
|
||||
msgstr "b³±d w dhcp-host"
|
||||
|
||||
#: option.c:1279
|
||||
msgid "bad dhcp-option"
|
||||
msgstr "b³±d w dhcp-option"
|
||||
|
||||
#: option.c:1297
|
||||
msgid "bad domain in dhcp-option"
|
||||
msgstr "nieprawid³owa nazwa domeny w dhcp-option"
|
||||
|
||||
#: option.c:1467
|
||||
msgid "dhcp-option too long"
|
||||
msgstr "zbyt d³uga nazwa w dhcp-option"
|
||||
|
||||
#: option.c:1664
|
||||
msgid "bad TXT record"
|
||||
msgstr "nieprawid³owy rekord TX"
|
||||
|
||||
#: option.c:1696
|
||||
msgid "TXT record string too long"
|
||||
msgstr "zbyt d³ugi rekord TXT"
|
||||
|
||||
#: option.c:1735
|
||||
msgid "bad SRV record"
|
||||
msgstr "b³±d w rekordzie SRV"
|
||||
|
||||
#: option.c:1748
|
||||
msgid "bad SRV target"
|
||||
msgstr "nieprawid³owy cel SRV"
|
||||
|
||||
#: option.c:1760
|
||||
msgid "invalid port number"
|
||||
msgstr "nieprawid³owy port"
|
||||
|
||||
#: option.c:1771
|
||||
msgid "invalid priority"
|
||||
msgstr "nieprawid³owy priorytet"
|
||||
|
||||
#: option.c:1782
|
||||
msgid "invalid weight"
|
||||
msgstr "nieprawid³owe znaczenie"
|
||||
|
||||
#: option.c:1807
|
||||
msgid "error"
|
||||
msgstr "b³±d"
|
||||
|
||||
#: option.c:1809
|
||||
#, c-format
|
||||
msgid "bad command line options: %s."
|
||||
msgstr "nieprawid³owa opcja linii komend: %s."
|
||||
|
||||
#: option.c:1853
|
||||
#, c-format
|
||||
msgid "cannot get host-name: %s"
|
||||
msgstr "nie mo¿na pobraæ nazwy hosta: %s"
|
||||
|
||||
#: option.c:1882
|
||||
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:1889
|
||||
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:1892 network.c:591
|
||||
#, c-format
|
||||
msgid "failed to read %s: %m"
|
||||
msgstr "b³±d w odczycie %s: %m"
|
||||
|
||||
#: option.c:1910
|
||||
#, c-format
|
||||
msgid "no search directive found in %s"
|
||||
msgstr "brak wytycznych wyszukiwania w %s"
|
||||
|
||||
#: forward.c:383
|
||||
#, c-format
|
||||
msgid "nameserver %s refused to do a recursive query"
|
||||
msgstr "serwer nazw %s odmawia wykonania zapytania rekursywnego"
|
||||
|
||||
#: forward.c:914
|
||||
msgid "forwarding table overflow: check for server loops."
|
||||
msgstr ""
|
||||
"przekroczenie zakresu tablicy przekazywania: sprawd¼ zapêtlenie serwera."
|
||||
|
||||
#: isc.c:71 dnsmasq.c:482
|
||||
#, 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:115
|
||||
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:119
|
||||
#, c-format
|
||||
msgid "failed to find list of interfaces: %s"
|
||||
msgstr "b³±d w znalezieniu listy interfejsów sieciowych: %s"
|
||||
|
||||
#: dnsmasq.c:134
|
||||
#, c-format
|
||||
msgid "unknown interface %s"
|
||||
msgstr "nieznany interfejs %s"
|
||||
|
||||
#: dnsmasq.c:140
|
||||
#, c-format
|
||||
msgid "no interface with address %s"
|
||||
msgstr "brak interfejsu z adresem %s"
|
||||
|
||||
#: dnsmasq.c:149
|
||||
#, c-format
|
||||
msgid "cannot open %s:%s"
|
||||
msgstr "nie mo¿na otworzyæ %s:%s"
|
||||
|
||||
#: dnsmasq.c:163
|
||||
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:176 dnsmasq.c:520
|
||||
#, c-format
|
||||
msgid "DBus error: %s"
|
||||
msgstr "b³±d DBus: %s"
|
||||
|
||||
#: dnsmasq.c:179
|
||||
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:292
|
||||
#, c-format
|
||||
msgid "started, version %s cachesize %d"
|
||||
msgstr "uruchomiony, wersja %s wielko¶æ cache %d"
|
||||
|
||||
#: dnsmasq.c:294
|
||||
#, c-format
|
||||
msgid "started, version %s cache disabled"
|
||||
msgstr "uruchomiony, wersja %s cache wy³±czony"
|
||||
|
||||
#: dnsmasq.c:296
|
||||
#, c-format
|
||||
msgid "compile time options: %s"
|
||||
msgstr "opcje kompilacji: %s"
|
||||
|
||||
#: dnsmasq.c:302
|
||||
msgid "DBus support enabled: connected to system bus"
|
||||
msgstr "obs³uga DBus w³±czona: pod³±czono do szyny systemowej"
|
||||
|
||||
#: dnsmasq.c:304
|
||||
msgid "DBus support enabled: bus connection pending"
|
||||
msgstr "obs³uga DBus w³±czona: pod³±czanie do szyny systemowej w toku"
|
||||
|
||||
#: dnsmasq.c:309
|
||||
msgid "setting --bind-interfaces option because of OS limitations"
|
||||
msgstr "ustawiam opcjê --bind-interfaces z powodu limitów systemu operacyjnego"
|
||||
|
||||
#: dnsmasq.c:314
|
||||
#, c-format
|
||||
msgid "warning: interface %s does not currently exist"
|
||||
msgstr "ostrze¿enie: interfejs %s obecnie nie istnieje"
|
||||
|
||||
#: dnsmasq.c:331
|
||||
#, 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:332
|
||||
#, c-format
|
||||
msgid "DHCP, IP range %s -- %s, lease time %s"
|
||||
msgstr "DHCP, zakres IP %s -- %s, czas dzier¿awy %s"
|
||||
|
||||
#: dnsmasq.c:343
|
||||
#, c-format
|
||||
msgid "DHCP, %s will be written every %s"
|
||||
msgstr "DHCP, %s bêdzie zapisywane co %s"
|
||||
|
||||
#: dnsmasq.c:348
|
||||
msgid "running as root"
|
||||
msgstr "pracuje z uprawnieniami u¿ytkownika root"
|
||||
|
||||
#: dnsmasq.c:522
|
||||
msgid "connected to system DBus"
|
||||
msgstr "po³±czono do systemowego DBus"
|
||||
|
||||
#: dnsmasq.c:533
|
||||
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:234
|
||||
msgid "Cannot use RTnetlink socket, falling back to ioctl API"
|
||||
msgstr ""
|
||||
|
||||
#: dhcp.c:345
|
||||
#, 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"
|
||||
|
||||
#: dhcp.c:413
|
||||
#, 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:722
|
||||
#, c-format
|
||||
msgid "failed to read %s:%m"
|
||||
msgstr "b³±d odczytu %s:%m"
|
||||
|
||||
#: dhcp.c:741
|
||||
#, fuzzy, c-format
|
||||
msgid "bad line at %s line %d"
|
||||
msgstr "b³êdna nazwa w %s, linia %d"
|
||||
|
||||
#: dhcp.c:845
|
||||
#, 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:881
|
||||
#, 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:38
|
||||
#, c-format
|
||||
msgid "cannot open or create leases file: %s"
|
||||
msgstr "b³±d otwarcia lub utworzenia pliku dzier¿aw: %s"
|
||||
|
||||
#: lease.c:80
|
||||
msgid "too many stored leases"
|
||||
msgstr "zbyt du¿a ilo¶æ zapisanych dzier¿aw"
|
||||
|
||||
#: lease.c:179
|
||||
#, fuzzy
|
||||
msgid "failed to write"
|
||||
msgstr "b³±d odczytu %s:%m"
|
||||
|
||||
#: rfc2131.c:218
|
||||
#, 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:219
|
||||
msgid "with subnet selector"
|
||||
msgstr "z selekcj± podsieci"
|
||||
|
||||
#: rfc2131.c:219
|
||||
msgid "via"
|
||||
msgstr "przez"
|
||||
|
||||
#: rfc2131.c:240 rfc2131.c:264
|
||||
msgid "disabled"
|
||||
msgstr "wy³±czony(a)"
|
||||
|
||||
#: rfc2131.c:275 rfc2131.c:674
|
||||
msgid "address in use"
|
||||
msgstr "adres w u¿yciu"
|
||||
|
||||
#: rfc2131.c:278
|
||||
msgid "no address configured"
|
||||
msgstr "brak skonfigurowanego adresu"
|
||||
|
||||
#: rfc2131.c:291 rfc2131.c:546
|
||||
msgid "no address available"
|
||||
msgstr "brak dostêpnego adresu"
|
||||
|
||||
#: rfc2131.c:298 rfc2131.c:677
|
||||
msgid "no leases left"
|
||||
msgstr "brak wolnych dzier¿aw"
|
||||
|
||||
#: rfc2131.c:301 rfc2131.c:650
|
||||
msgid "wrong network"
|
||||
msgstr "nieprawid³owa sieæ"
|
||||
|
||||
#: rfc2131.c:505
|
||||
#, c-format
|
||||
msgid "disabling DHCP static address %s"
|
||||
msgstr "wy³±czanie statycznego adresu DHCP %s"
|
||||
|
||||
#: rfc2131.c:523
|
||||
msgid "unknown lease"
|
||||
msgstr "nieznana dzier¿awa"
|
||||
|
||||
#: rfc2131.c:536 rfc2131.c:749
|
||||
msgid "ignored"
|
||||
msgstr "ignorujê"
|
||||
|
||||
#: rfc2131.c:619
|
||||
msgid "wrong address"
|
||||
msgstr "b³êdny adres"
|
||||
|
||||
#: rfc2131.c:632
|
||||
msgid "lease not found"
|
||||
msgstr "dzier¿awa nie znaleziona"
|
||||
|
||||
#: rfc2131.c:658
|
||||
msgid "address not available"
|
||||
msgstr "adres niedostêpny"
|
||||
|
||||
#: rfc2131.c:667
|
||||
msgid "static lease available"
|
||||
msgstr "dostêpna statyczna dzier¿awa"
|
||||
|
||||
#: rfc2131.c:671
|
||||
msgid "address reserved"
|
||||
msgstr "adres zarezerwowany"
|
||||
|
||||
#: rfc2131.c:871
|
||||
#, c-format
|
||||
msgid "cannot send DHCP option %d: no space left in packet"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:1174
|
||||
#, c-format
|
||||
msgid "More than one vendor class matches, using %s"
|
||||
msgstr "Wiêcej ni¿ jeden dystrybutor pasuj±cy, u¿ywam %s"
|
||||
|
||||
#: netlink.c:41
|
||||
#, 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"
|
||||
859
po/pt_BR.po
Normal file
859
po/pt_BR.po
Normal file
@@ -0,0 +1,859 @@
|
||||
# Portuguese translations for dnsmasq package.
|
||||
# This file is put in the public domain.
|
||||
# Simon Kelley <simon@thekelleys.org.uk>, 2006.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: dnsmasq 2.26\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2006-03-16 20:04+0000\n"
|
||||
"PO-Revision-Date: 2006-01-16 20:42+0000\n"
|
||||
"Last-Translator: Simon Kelley <simon@thekelleys.org.uk>\n"
|
||||
"Language-Team: Portuguese <ldp-br@bazar.conectiva.com.br>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=ASCII\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:754
|
||||
#, c-format
|
||||
msgid "bad address at %s line %d"
|
||||
msgstr ""
|
||||
|
||||
#: cache.c:628 dhcp.c:768
|
||||
#, c-format
|
||||
msgid "bad name at %s line %d"
|
||||
msgstr ""
|
||||
|
||||
#: cache.c:634 dhcp.c:822
|
||||
#, c-format
|
||||
msgid "read %s - %d addresses"
|
||||
msgstr ""
|
||||
|
||||
#: cache.c:670
|
||||
msgid "cleared cache"
|
||||
msgstr ""
|
||||
|
||||
#: 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 ""
|
||||
|
||||
#: cache.c:767
|
||||
#, c-format
|
||||
msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
|
||||
msgstr ""
|
||||
|
||||
#: util.c:149 option.c:1302
|
||||
msgid "could not get memory"
|
||||
msgstr ""
|
||||
|
||||
#: util.c:172
|
||||
#, c-format
|
||||
msgid "%s at line %d of %%s"
|
||||
msgstr ""
|
||||
|
||||
#: util.c:179
|
||||
msgid "FAILED to start up"
|
||||
msgstr ""
|
||||
|
||||
#: util.c:305
|
||||
#, c-format
|
||||
msgid "infinite"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:125
|
||||
msgid "Specify local address(es) to listen on."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:126
|
||||
msgid "Return ipaddr for all hosts in specified domains."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:127
|
||||
msgid "Fake reverse lookups for RFC1918 private address ranges."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:128
|
||||
msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:129
|
||||
#, c-format
|
||||
msgid "Specify the size of the cache in entries (defaults to %s)."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:130
|
||||
#, c-format
|
||||
msgid "Specify configuration file (defaults to %s)."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:131
|
||||
msgid "Do NOT fork into the background: run in debug mode."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:132
|
||||
msgid "Do NOT forward queries with no domain part."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:133
|
||||
msgid "Return self-pointing MX records for local hosts."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:134
|
||||
msgid "Expand simple names in /etc/hosts with domain-suffix."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:135
|
||||
msgid "Don't forward spurious DNS requests from Windows hosts."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:136
|
||||
msgid "Enable DHCP in the range given with lease duration."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:137
|
||||
#, c-format
|
||||
msgid "Change to this group after startup (defaults to %s)."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:138
|
||||
msgid "Set address or hostname for a specified machine."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:139
|
||||
#, c-format
|
||||
msgid "Do NOT load %s file."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:140
|
||||
#, c-format
|
||||
msgid "Specify a hosts file to be read in addition to %s."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:141
|
||||
msgid "Specify interface(s) to listen on."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:142
|
||||
msgid "Specify interface(s) NOT to listen on."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:143
|
||||
msgid "Map DHCP user class to option set."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:144
|
||||
msgid "Don't do DHCP for hosts in option set."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:145
|
||||
msgid "Do NOT fork into the background, do NOT run in debug mode."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:146
|
||||
msgid "Assume we are the only DHCP server on the local network."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:147
|
||||
#, c-format
|
||||
msgid "Specify where to store DHCP leases (defaults to %s)."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:148
|
||||
msgid "Return MX records for local hosts."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:149
|
||||
msgid "Specify an MX record."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:150
|
||||
msgid "Specify BOOTP options to DHCP server."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:151
|
||||
#, c-format
|
||||
msgid "Do NOT poll %s file, reload only on SIGHUP."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:152
|
||||
msgid "Do NOT cache failed search results."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:153
|
||||
#, c-format
|
||||
msgid "Use nameservers strictly in the order given in %s."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:154
|
||||
msgid "Set extra options to be set to DHCP clients."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:155
|
||||
msgid "Specify port to listen for DNS requests on (defaults to 53)."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:156
|
||||
#, c-format
|
||||
msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:157
|
||||
msgid "Log queries."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:158
|
||||
msgid "Force the originating port for upstream queries."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:159
|
||||
msgid "Do NOT read resolv.conf."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:160
|
||||
#, c-format
|
||||
msgid "Specify path to resolv.conf (defaults to %s)."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:161
|
||||
msgid "Specify address(es) of upstream servers with optional domains."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:162
|
||||
msgid "Never forward queries to specified domains."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:163
|
||||
msgid "Specify the domain to be assigned in DHCP leases."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:164
|
||||
msgid "Specify default target in an MX record."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:165
|
||||
msgid "Specify time-to-live in seconds for replies from /etc/hosts."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:166
|
||||
#, c-format
|
||||
msgid "Change to this user after startup. (defaults to %s)."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:167
|
||||
msgid "Map DHCP vendor class to option set."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:168
|
||||
msgid "Display dnsmasq version and copyright information."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:169
|
||||
msgid "Translate IPv4 addresses from upstream servers."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:170
|
||||
msgid "Specify a SRV record."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:171
|
||||
msgid "Display this message."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:172
|
||||
#, c-format
|
||||
msgid "Specify path of PID file. (defaults to %s)."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:173
|
||||
#, c-format
|
||||
msgid "Specify maximum number of DHCP leases (defaults to %s)."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:174
|
||||
msgid "Answer DNS queries based on the interface a query was sent to."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:175
|
||||
msgid "Specify TXT DNS record."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:176
|
||||
msgid "Bind only to interfaces in use."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:177
|
||||
#, c-format
|
||||
msgid "Read DHCP static host information from %s."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:178
|
||||
msgid "Enable the DBus interface for setting upstream servers, etc."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:179
|
||||
msgid "Do not provide DHCP on this interface, only provide DNS."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:180
|
||||
msgid "Enable dynamic address allocation for bootp."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:181
|
||||
msgid "Map MAC address (with wildcards) to option set."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:396
|
||||
msgid "missing \""
|
||||
msgstr ""
|
||||
|
||||
#: option.c:425
|
||||
msgid "bad option"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:442
|
||||
#, c-format
|
||||
msgid "cannot read %s: %s"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:448
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Usage: dnsmasq [options]\n"
|
||||
"\n"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:450
|
||||
#, c-format
|
||||
msgid "Use short options only on the command line.\n"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:452
|
||||
#, c-format
|
||||
msgid "Valid options are :\n"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:477
|
||||
#, c-format
|
||||
msgid "Dnsmasq version %s %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:478
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Compile time options %s\n"
|
||||
"\n"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:479
|
||||
#, c-format
|
||||
msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:480
|
||||
#, c-format
|
||||
msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:481
|
||||
#, c-format
|
||||
msgid "under the terms of the GNU General Public License, version 2.\n"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:491
|
||||
msgid "extraneous parameter"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:499
|
||||
msgid "missing parameter"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:516
|
||||
msgid "nested includes not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:576
|
||||
msgid "bad MX preference"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:585
|
||||
msgid "bad MX name"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:603
|
||||
msgid "bad MX target"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:805 option.c:816
|
||||
msgid "bad port"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:957
|
||||
msgid "bad dhcp-range"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:986
|
||||
msgid "only one netid tag allowed"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1031
|
||||
msgid "inconsistent DHCP range"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1219
|
||||
msgid "bad dhcp-host"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1279
|
||||
msgid "bad dhcp-option"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1297
|
||||
msgid "bad domain in dhcp-option"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1467
|
||||
msgid "dhcp-option too long"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1664
|
||||
msgid "bad TXT record"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1696
|
||||
msgid "TXT record string too long"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1735
|
||||
msgid "bad SRV record"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1748
|
||||
msgid "bad SRV target"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1760
|
||||
msgid "invalid port number"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1771
|
||||
msgid "invalid priority"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1782
|
||||
msgid "invalid weight"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1807
|
||||
msgid "error"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1809
|
||||
#, c-format
|
||||
msgid "bad command line options: %s."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1853
|
||||
#, c-format
|
||||
msgid "cannot get host-name: %s"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1882
|
||||
msgid "only one resolv.conf file allowed in no-poll mode."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1889
|
||||
msgid "must have exactly one resolv.conf to read domain from."
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1892 network.c:591
|
||||
#, c-format
|
||||
msgid "failed to read %s: %m"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1910
|
||||
#, c-format
|
||||
msgid "no search directive found in %s"
|
||||
msgstr ""
|
||||
|
||||
#: forward.c:383
|
||||
#, c-format
|
||||
msgid "nameserver %s refused to do a recursive query"
|
||||
msgstr ""
|
||||
|
||||
#: forward.c:914
|
||||
msgid "forwarding table overflow: check for server loops."
|
||||
msgstr ""
|
||||
|
||||
#: isc.c:71 dnsmasq.c:482
|
||||
#, 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:115
|
||||
msgid ""
|
||||
"ISC dhcpd integration not available: set HAVE_ISC_READER in src/config.h"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:119
|
||||
#, c-format
|
||||
msgid "failed to find list of interfaces: %s"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:134
|
||||
#, c-format
|
||||
msgid "unknown interface %s"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:140
|
||||
#, c-format
|
||||
msgid "no interface with address %s"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:149
|
||||
#, c-format
|
||||
msgid "cannot open %s:%s"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:163
|
||||
msgid "must set exactly one interface on broken systems without IP_RECVIF"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:176 dnsmasq.c:520
|
||||
#, c-format
|
||||
msgid "DBus error: %s"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:179
|
||||
msgid "DBus not available: set HAVE_DBUS in src/config.h"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:292
|
||||
#, c-format
|
||||
msgid "started, version %s cachesize %d"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:294
|
||||
#, c-format
|
||||
msgid "started, version %s cache disabled"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:296
|
||||
#, c-format
|
||||
msgid "compile time options: %s"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:302
|
||||
msgid "DBus support enabled: connected to system bus"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:304
|
||||
msgid "DBus support enabled: bus connection pending"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:309
|
||||
msgid "setting --bind-interfaces option because of OS limitations"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:314
|
||||
#, c-format
|
||||
msgid "warning: interface %s does not currently exist"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:331
|
||||
#, c-format
|
||||
msgid "DHCP, static leases only on %.0s%s, lease time %s"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:332
|
||||
#, c-format
|
||||
msgid "DHCP, IP range %s -- %s, lease time %s"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:343
|
||||
#, c-format
|
||||
msgid "DHCP, %s will be written every %s"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:348
|
||||
msgid "running as root"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:522
|
||||
msgid "connected to system DBus"
|
||||
msgstr ""
|
||||
|
||||
#: dnsmasq.c:533
|
||||
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:234
|
||||
msgid "Cannot use RTnetlink socket, falling back to ioctl API"
|
||||
msgstr ""
|
||||
|
||||
#: dhcp.c:345
|
||||
#, c-format
|
||||
msgid "DHCP request for unsupported hardware type (%d) recieved on %s"
|
||||
msgstr ""
|
||||
|
||||
#: dhcp.c:413
|
||||
#, c-format
|
||||
msgid "DHCP range %s -- %s is not consistent with netmask %s"
|
||||
msgstr ""
|
||||
|
||||
#: dhcp.c:722
|
||||
#, c-format
|
||||
msgid "failed to read %s:%m"
|
||||
msgstr ""
|
||||
|
||||
#: dhcp.c:741
|
||||
#, c-format
|
||||
msgid "bad line at %s line %d"
|
||||
msgstr ""
|
||||
|
||||
#: dhcp.c:845
|
||||
#, c-format
|
||||
msgid "duplicate IP address %s (%s) in dhcp-config directive"
|
||||
msgstr ""
|
||||
|
||||
#: dhcp.c:881
|
||||
#, c-format
|
||||
msgid "Ignoring DHCP host name %s because it has an illegal domain part"
|
||||
msgstr ""
|
||||
|
||||
#: lease.c:38
|
||||
#, c-format
|
||||
msgid "cannot open or create leases file: %s"
|
||||
msgstr ""
|
||||
|
||||
#: lease.c:80
|
||||
msgid "too many stored leases"
|
||||
msgstr ""
|
||||
|
||||
#: lease.c:179
|
||||
msgid "failed to write"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:218
|
||||
#, c-format
|
||||
msgid "no address range available for DHCP request %s %s"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:219
|
||||
msgid "with subnet selector"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:219
|
||||
msgid "via"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:240 rfc2131.c:264
|
||||
msgid "disabled"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:275 rfc2131.c:674
|
||||
msgid "address in use"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:278
|
||||
msgid "no address configured"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:291 rfc2131.c:546
|
||||
msgid "no address available"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:298 rfc2131.c:677
|
||||
msgid "no leases left"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:301 rfc2131.c:650
|
||||
msgid "wrong network"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:505
|
||||
#, c-format
|
||||
msgid "disabling DHCP static address %s"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:523
|
||||
msgid "unknown lease"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:536 rfc2131.c:749
|
||||
msgid "ignored"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:619
|
||||
msgid "wrong address"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:632
|
||||
msgid "lease not found"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:658
|
||||
msgid "address not available"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:667
|
||||
msgid "static lease available"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:671
|
||||
msgid "address reserved"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:871
|
||||
#, c-format
|
||||
msgid "cannot send DHCP option %d: no space left in packet"
|
||||
msgstr ""
|
||||
|
||||
#: rfc2131.c:1174
|
||||
#, c-format
|
||||
msgid "More than one vendor class matches, using %s"
|
||||
msgstr ""
|
||||
|
||||
#: netlink.c:41
|
||||
#, 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 ""
|
||||
878
po/ro.po
Normal file
878
po/ro.po
Normal file
@@ -0,0 +1,878 @@
|
||||
# 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: 2006-03-16 20:04+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:754
|
||||
#, c-format
|
||||
msgid "bad address at %s line %d"
|
||||
msgstr "adresă greşită în %s, linia %d"
|
||||
|
||||
#: cache.c:628 dhcp.c:768
|
||||
#, c-format
|
||||
msgid "bad name at %s line %d"
|
||||
msgstr "nume greşit în %s linia %d"
|
||||
|
||||
#: cache.c:634 dhcp.c:822
|
||||
#, 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:1302
|
||||
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:125
|
||||
msgid "Specify local address(es) to listen on."
|
||||
msgstr "Specificaţi adresele locale deservite."
|
||||
|
||||
#: option.c:126
|
||||
msgid "Return ipaddr for all hosts in specified domains."
|
||||
msgstr "Afişează adresele IP ale maşinilor în domeniul dat."
|
||||
|
||||
#: option.c:127
|
||||
msgid "Fake reverse lookups for RFC1918 private address ranges."
|
||||
msgstr ""
|
||||
"Simulează căutări după adresă pentru domenii de adresă private (RFC1918)."
|
||||
|
||||
#: option.c:128
|
||||
msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
|
||||
msgstr "Interpretează adresa IP ca NXDOMAIN (împotriva manipulărilor Verisign)"
|
||||
|
||||
#: option.c:129
|
||||
#, 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:130
|
||||
#, c-format
|
||||
msgid "Specify configuration file (defaults to %s)."
|
||||
msgstr "Specifică fişier de configurare (implicit e %s)."
|
||||
|
||||
#: option.c:131
|
||||
msgid "Do NOT fork into the background: run in debug mode."
|
||||
msgstr "NU porneşte în fundal: rulează în modul depanare."
|
||||
|
||||
#: option.c:132
|
||||
msgid "Do NOT forward queries with no domain part."
|
||||
msgstr "NU înainta cererile ce nu conţin domeniu DNS."
|
||||
|
||||
#: option.c:133
|
||||
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:134
|
||||
msgid "Expand simple names in /etc/hosts with domain-suffix."
|
||||
msgstr "Adaugă numelor simple din /etc/hosts numele domeniului ca sufix."
|
||||
|
||||
#: option.c:135
|
||||
msgid "Don't forward spurious DNS requests from Windows hosts."
|
||||
msgstr "Nu inainta cereri DNS defecte provenite de la maşini Windows."
|
||||
|
||||
#: option.c:136
|
||||
msgid "Enable DHCP in the range given with lease duration."
|
||||
msgstr "Activează DHCP în domeniul dat cu durată limitată de împrumut."
|
||||
|
||||
#: option.c:137
|
||||
#, c-format
|
||||
msgid "Change to this group after startup (defaults to %s)."
|
||||
msgstr "Rulează sub acest grup după pornire (implicit e %s)."
|
||||
|
||||
#: option.c:138
|
||||
msgid "Set address or hostname for a specified machine."
|
||||
msgstr "Schimbă adresa sau numele maşinii specificate."
|
||||
|
||||
#: option.c:139
|
||||
#, c-format
|
||||
msgid "Do NOT load %s file."
|
||||
msgstr "Nu încarcă fişierul %s."
|
||||
|
||||
#: option.c:140
|
||||
#, 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:141
|
||||
msgid "Specify interface(s) to listen on."
|
||||
msgstr "Specifică interfeţele deservite."
|
||||
|
||||
#: option.c:142
|
||||
msgid "Specify interface(s) NOT to listen on."
|
||||
msgstr "Specifică interfeţele NE-deservite."
|
||||
|
||||
#: option.c:143
|
||||
msgid "Map DHCP user class to option set."
|
||||
msgstr "Leagă clasa de utilizator DHCP cu grup de opţiuni."
|
||||
|
||||
#: option.c:144
|
||||
msgid "Don't do DHCP for hosts in option set."
|
||||
msgstr "Nu furniza DHCP maşinilor din grupul de opţiuni."
|
||||
|
||||
#: option.c:145
|
||||
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:146
|
||||
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:147
|
||||
#, 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:148
|
||||
msgid "Return MX records for local hosts."
|
||||
msgstr "Răspunde cu întregistrări MX pentru maşini locale."
|
||||
|
||||
#: option.c:149
|
||||
msgid "Specify an MX record."
|
||||
msgstr "Specifică o înregistrare MX."
|
||||
|
||||
#: option.c:150
|
||||
msgid "Specify BOOTP options to DHCP server."
|
||||
msgstr "Specifică opţiuni BOOTP serverului DHCP."
|
||||
|
||||
#: option.c:151
|
||||
#, 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:152
|
||||
msgid "Do NOT cache failed search results."
|
||||
msgstr "NU memora rezultatele de căutare DNS eşuatată."
|
||||
|
||||
#: option.c:153
|
||||
#, 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:154
|
||||
msgid "Set extra options to be set to DHCP clients."
|
||||
msgstr "Configurează opţiuni în plusce trebuie trimise clienţilor DHCP."
|
||||
|
||||
#: option.c:155
|
||||
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:156
|
||||
#, 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:157
|
||||
msgid "Log queries."
|
||||
msgstr "Înregistrează tranzacţiile."
|
||||
|
||||
#: option.c:158
|
||||
msgid "Force the originating port for upstream queries."
|
||||
msgstr "Forţează acest port pentru datele ce pleacă."
|
||||
|
||||
#: option.c:159
|
||||
msgid "Do NOT read resolv.conf."
|
||||
msgstr "NU citi fişierul resolv.conf"
|
||||
|
||||
#: option.c:160
|
||||
#, c-format
|
||||
msgid "Specify path to resolv.conf (defaults to %s)."
|
||||
msgstr "Specifică calea către resolv.conf (implicit e %s)."
|
||||
|
||||
#: option.c:161
|
||||
msgid "Specify address(es) of upstream servers with optional domains."
|
||||
msgstr "Specifică adresele server(elor) superioare cu domenii opţionale."
|
||||
|
||||
#: option.c:162
|
||||
msgid "Never forward queries to specified domains."
|
||||
msgstr "Nu înaintează cererile spre domeniile specificate."
|
||||
|
||||
#: option.c:163
|
||||
msgid "Specify the domain to be assigned in DHCP leases."
|
||||
msgstr "Specifică domeniul de transmis prin DHCP."
|
||||
|
||||
#: option.c:164
|
||||
msgid "Specify default target in an MX record."
|
||||
msgstr "Specifică o ţintă într-o înregistrare MX."
|
||||
|
||||
#: option.c:165
|
||||
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:166
|
||||
#, c-format
|
||||
msgid "Change to this user after startup. (defaults to %s)."
|
||||
msgstr "Rulează sub acest utilizator după pornire. (implicit e %s)."
|
||||
|
||||
#: option.c:167
|
||||
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:168
|
||||
msgid "Display dnsmasq version and copyright information."
|
||||
msgstr "Afişează versiunea dnsmasq şi drepturile de autor."
|
||||
|
||||
#: option.c:169
|
||||
msgid "Translate IPv4 addresses from upstream servers."
|
||||
msgstr "Traduce adresele IPv4 de la serverele DNS superioare."
|
||||
|
||||
#: option.c:170
|
||||
msgid "Specify a SRV record."
|
||||
msgstr "Specifică o înregistrare SRV."
|
||||
|
||||
#: option.c:171
|
||||
msgid "Display this message."
|
||||
msgstr "Afişează acest mesaj."
|
||||
|
||||
#: option.c:172
|
||||
#, c-format
|
||||
msgid "Specify path of PID file. (defaults to %s)."
|
||||
msgstr "Specifică o cale pentru fişierul PID. (implicit %s)."
|
||||
|
||||
#: option.c:173
|
||||
#, c-format
|
||||
msgid "Specify maximum number of DHCP leases (defaults to %s)."
|
||||
msgstr "Specifică numărul maxim de împrumuturi DHCP (implicit %s)."
|
||||
|
||||
#: option.c:174
|
||||
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:175
|
||||
msgid "Specify TXT DNS record."
|
||||
msgstr "Specifică o înregistrare TXT."
|
||||
|
||||
#: option.c:176
|
||||
msgid "Bind only to interfaces in use."
|
||||
msgstr "Ascultă doar pe interfeţele active."
|
||||
|
||||
#: option.c:177
|
||||
#, c-format
|
||||
msgid "Read DHCP static host information from %s."
|
||||
msgstr "Citeşte informaţii DHCP statice despre maşină din %s."
|
||||
|
||||
#: option.c:178
|
||||
msgid "Enable the DBus interface for setting upstream servers, etc."
|
||||
msgstr "Activeaza interfaţa DBus pentru configurarea serverelor superioare."
|
||||
|
||||
#: option.c:179
|
||||
msgid "Do not provide DHCP on this interface, only provide DNS."
|
||||
msgstr "Nu activează DHCP ci doar DNS pe această interfaţă."
|
||||
|
||||
#: option.c:180
|
||||
msgid "Enable dynamic address allocation for bootp."
|
||||
msgstr "Activează alocarea dinamică a adreselor pentru BOOTP."
|
||||
|
||||
#: option.c:181
|
||||
#, fuzzy
|
||||
msgid "Map MAC address (with wildcards) to option set."
|
||||
msgstr "Trimite opţiuni DHCP în funcţie de marca plăcii de reţea."
|
||||
|
||||
#: option.c:396
|
||||
msgid "missing \""
|
||||
msgstr "lipseşte \""
|
||||
|
||||
#: option.c:425
|
||||
msgid "bad option"
|
||||
msgstr "opţiune invalidă"
|
||||
|
||||
#: option.c:442
|
||||
#, c-format
|
||||
msgid "cannot read %s: %s"
|
||||
msgstr "nu pot citi %s: %s"
|
||||
|
||||
#: option.c:448
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Usage: dnsmasq [options]\n"
|
||||
"\n"
|
||||
msgstr ""
|
||||
"Utilizare: dnsmasq [opţiuni]\n"
|
||||
"\n"
|
||||
|
||||
#: option.c:450
|
||||
#, 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:452
|
||||
#, c-format
|
||||
msgid "Valid options are :\n"
|
||||
msgstr "Opţiunile valide sunt:\n"
|
||||
|
||||
#: option.c:477
|
||||
#, c-format
|
||||
msgid "Dnsmasq version %s %s\n"
|
||||
msgstr "dnsmasq versiunea %s %s\n"
|
||||
|
||||
#: option.c:478
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Compile time options %s\n"
|
||||
"\n"
|
||||
msgstr ""
|
||||
"Opţiuni cu care a fost compilat %s\n"
|
||||
"\n"
|
||||
|
||||
#: option.c:479
|
||||
#, c-format
|
||||
msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
|
||||
msgstr "Acest program vine FĂRĂ NICI O GARANŢIE.\n"
|
||||
|
||||
#: option.c:480
|
||||
#, 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:481
|
||||
#, 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:491
|
||||
msgid "extraneous parameter"
|
||||
msgstr "parametru nerecunoscut"
|
||||
|
||||
#: option.c:499
|
||||
msgid "missing parameter"
|
||||
msgstr "parametru lipsa"
|
||||
|
||||
#: option.c:516
|
||||
msgid "nested includes not allowed"
|
||||
msgstr "incluziunile locale nu sunt permise"
|
||||
|
||||
#: option.c:576
|
||||
msgid "bad MX preference"
|
||||
msgstr "preferinţă MX invalidă"
|
||||
|
||||
#: option.c:585
|
||||
msgid "bad MX name"
|
||||
msgstr "nume MX invalid"
|
||||
|
||||
#: option.c:603
|
||||
msgid "bad MX target"
|
||||
msgstr "ţintă MX invalidă"
|
||||
|
||||
#: option.c:805 option.c:816
|
||||
msgid "bad port"
|
||||
msgstr "port invalid"
|
||||
|
||||
#: option.c:957
|
||||
msgid "bad dhcp-range"
|
||||
msgstr "dhcp-range invalid"
|
||||
|
||||
#: option.c:986
|
||||
msgid "only one netid tag allowed"
|
||||
msgstr ""
|
||||
|
||||
#: option.c:1031
|
||||
msgid "inconsistent DHCP range"
|
||||
msgstr "domeniu DHCP inconsistent"
|
||||
|
||||
#: option.c:1219
|
||||
msgid "bad dhcp-host"
|
||||
msgstr "dhcp-host invalid"
|
||||
|
||||
#: option.c:1279
|
||||
msgid "bad dhcp-option"
|
||||
msgstr "dhcp-option invalid"
|
||||
|
||||
#: option.c:1297
|
||||
msgid "bad domain in dhcp-option"
|
||||
msgstr "domeniu DNS invalid în declaraţia dhcp-option"
|
||||
|
||||
#: option.c:1467
|
||||
msgid "dhcp-option too long"
|
||||
msgstr "declararea dhcp-option este prea lungă"
|
||||
|
||||
#: option.c:1664
|
||||
msgid "bad TXT record"
|
||||
msgstr "înregistrare TXT invalidă"
|
||||
|
||||
#: option.c:1696
|
||||
msgid "TXT record string too long"
|
||||
msgstr "şirul de caractere pentru înregistrarea TXT este prea lung"
|
||||
|
||||
#: option.c:1735
|
||||
msgid "bad SRV record"
|
||||
msgstr "înregistrare SRV invalidă"
|
||||
|
||||
#: option.c:1748
|
||||
msgid "bad SRV target"
|
||||
msgstr "ţintă SRV invalidă"
|
||||
|
||||
#: option.c:1760
|
||||
msgid "invalid port number"
|
||||
msgstr "număr de port invalid"
|
||||
|
||||
#: option.c:1771
|
||||
msgid "invalid priority"
|
||||
msgstr "prioritate invalidă"
|
||||
|
||||
#: option.c:1782
|
||||
msgid "invalid weight"
|
||||
msgstr "pondere invalidă"
|
||||
|
||||
#: option.c:1807
|
||||
msgid "error"
|
||||
msgstr "eroare"
|
||||
|
||||
#: option.c:1809
|
||||
#, c-format
|
||||
msgid "bad command line options: %s."
|
||||
msgstr "opţiuni în linie de comandă invalide: %s."
|
||||
|
||||
#: option.c:1853
|
||||
#, c-format
|
||||
msgid "cannot get host-name: %s"
|
||||
msgstr "nu pot citi numele maşinii: %s"
|
||||
|
||||
#: option.c:1882
|
||||
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:1889
|
||||
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:1892 network.c:591
|
||||
#, c-format
|
||||
msgid "failed to read %s: %m"
|
||||
msgstr "nu pot citi %s: %n"
|
||||
|
||||
#: option.c:1910
|
||||
#, 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:383
|
||||
#, c-format
|
||||
msgid "nameserver %s refused to do a recursive query"
|
||||
msgstr "serverul DNS %s refuză interogările recursive"
|
||||
|
||||
#: forward.c:914
|
||||
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:482
|
||||
#, 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:115
|
||||
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:119
|
||||
#, c-format
|
||||
msgid "failed to find list of interfaces: %s"
|
||||
msgstr "enumerarea interfeţelor a eşuat: %s"
|
||||
|
||||
#: dnsmasq.c:134
|
||||
#, c-format
|
||||
msgid "unknown interface %s"
|
||||
msgstr "interfaţă necunoscută %s"
|
||||
|
||||
#: dnsmasq.c:140
|
||||
#, c-format
|
||||
msgid "no interface with address %s"
|
||||
msgstr "nu exista interfaţă pentru adresa %s"
|
||||
|
||||
#: dnsmasq.c:149
|
||||
#, c-format
|
||||
msgid "cannot open %s:%s"
|
||||
msgstr "nu pot deschide %s:%s"
|
||||
|
||||
#: dnsmasq.c:163
|
||||
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:176 dnsmasq.c:520
|
||||
#, c-format
|
||||
msgid "DBus error: %s"
|
||||
msgstr "eroare DBus: %s"
|
||||
|
||||
#: dnsmasq.c:179
|
||||
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:292
|
||||
#, c-format
|
||||
msgid "started, version %s cachesize %d"
|
||||
msgstr "am ponit, versiunea %s memorie temporară %d"
|
||||
|
||||
#: dnsmasq.c:294
|
||||
#, c-format
|
||||
msgid "started, version %s cache disabled"
|
||||
msgstr "am pornit, versiunea %s memorie temporară dezactivată"
|
||||
|
||||
#: dnsmasq.c:296
|
||||
#, c-format
|
||||
msgid "compile time options: %s"
|
||||
msgstr "compilat cu opţiunile: %s"
|
||||
|
||||
#: dnsmasq.c:302
|
||||
msgid "DBus support enabled: connected to system bus"
|
||||
msgstr "suportul DBus activ: sunt conectat la magistrala sistem"
|
||||
|
||||
#: dnsmasq.c:304
|
||||
msgid "DBus support enabled: bus connection pending"
|
||||
msgstr "suportul DBus activ: aştept conexiunea la magistrală"
|
||||
|
||||
#: dnsmasq.c:309
|
||||
msgid "setting --bind-interfaces option because of OS limitations"
|
||||
msgstr "specific opţiunea --bind-interfaces din cauza limitărilor SO"
|
||||
|
||||
#: dnsmasq.c:314
|
||||
#, c-format
|
||||
msgid "warning: interface %s does not currently exist"
|
||||
msgstr "atenţie: interfaţa %s nu există momentan"
|
||||
|
||||
#: dnsmasq.c:331
|
||||
#, 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:332
|
||||
#, c-format
|
||||
msgid "DHCP, IP range %s -- %s, lease time %s"
|
||||
msgstr "DHCP, domeniu IP %s -- %s, timpul reînoirii %s"
|
||||
|
||||
#: dnsmasq.c:343
|
||||
#, c-format
|
||||
msgid "DHCP, %s will be written every %s"
|
||||
msgstr "DHCP, %s va fi rescris odată la fiecare %s"
|
||||
|
||||
#: dnsmasq.c:348
|
||||
msgid "running as root"
|
||||
msgstr "rulez ca root"
|
||||
|
||||
#: dnsmasq.c:522
|
||||
msgid "connected to system DBus"
|
||||
msgstr "magistrala sistem Dbus conectată"
|
||||
|
||||
#: dnsmasq.c:533
|
||||
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:234
|
||||
msgid "Cannot use RTnetlink socket, falling back to ioctl API"
|
||||
msgstr ""
|
||||
|
||||
#: dhcp.c:345
|
||||
#, c-format
|
||||
msgid "DHCP request for unsupported hardware type (%d) recieved on %s"
|
||||
msgstr "cerere DHCP pentru dispozitiv nesuportat (%d) recepţionată prin %s"
|
||||
|
||||
#: dhcp.c:413
|
||||
#, 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:722
|
||||
#, c-format
|
||||
msgid "failed to read %s:%m"
|
||||
msgstr "citirea %s:%n a eşuat"
|
||||
|
||||
#: dhcp.c:741
|
||||
#, c-format
|
||||
msgid "bad line at %s line %d"
|
||||
msgstr "linie invalidă în %s rândul %d"
|
||||
|
||||
#: dhcp.c:845
|
||||
#, 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:881
|
||||
#, 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:38
|
||||
#, c-format
|
||||
msgid "cannot open or create leases file: %s"
|
||||
msgstr "nu pot creea sau deschide fişierul cu împrumuturi: %s"
|
||||
|
||||
#: lease.c:80
|
||||
msgid "too many stored leases"
|
||||
msgstr "prea multe împrumuturi stocate"
|
||||
|
||||
#: lease.c:179
|
||||
#, fuzzy
|
||||
msgid "failed to write"
|
||||
msgstr "citirea %s:%n a eşuat"
|
||||
|
||||
#: rfc2131.c:218
|
||||
#, 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:219
|
||||
msgid "with subnet selector"
|
||||
msgstr "cu selectorul de subreţea"
|
||||
|
||||
#: rfc2131.c:219
|
||||
msgid "via"
|
||||
msgstr "prin"
|
||||
|
||||
#: rfc2131.c:240 rfc2131.c:264
|
||||
msgid "disabled"
|
||||
msgstr "dezactivat"
|
||||
|
||||
#: rfc2131.c:275 rfc2131.c:674
|
||||
msgid "address in use"
|
||||
msgstr "adresa este folosită"
|
||||
|
||||
#: rfc2131.c:278
|
||||
msgid "no address configured"
|
||||
msgstr "adresă lipsă"
|
||||
|
||||
#: rfc2131.c:291 rfc2131.c:546
|
||||
msgid "no address available"
|
||||
msgstr "nici o adresă disponibilă"
|
||||
|
||||
#: rfc2131.c:298 rfc2131.c:677
|
||||
msgid "no leases left"
|
||||
msgstr "nu mai am de unde să împrumut"
|
||||
|
||||
#: rfc2131.c:301 rfc2131.c:650
|
||||
msgid "wrong network"
|
||||
msgstr "reţea greşită"
|
||||
|
||||
#: rfc2131.c:505
|
||||
#, c-format
|
||||
msgid "disabling DHCP static address %s"
|
||||
msgstr "dezactivăm adresele DHCP statice %s"
|
||||
|
||||
#: rfc2131.c:523
|
||||
msgid "unknown lease"
|
||||
msgstr "împrumut necunoscut"
|
||||
|
||||
#: rfc2131.c:536 rfc2131.c:749
|
||||
msgid "ignored"
|
||||
msgstr "ignorat"
|
||||
|
||||
#: rfc2131.c:619
|
||||
msgid "wrong address"
|
||||
msgstr "adresă greşită"
|
||||
|
||||
#: rfc2131.c:632
|
||||
msgid "lease not found"
|
||||
msgstr "împrumutul nu a fost găsit"
|
||||
|
||||
#: rfc2131.c:658
|
||||
msgid "address not available"
|
||||
msgstr "adresă indisponibilă"
|
||||
|
||||
#: rfc2131.c:667
|
||||
msgid "static lease available"
|
||||
msgstr "împrumut static este disponibil"
|
||||
|
||||
#: rfc2131.c:671
|
||||
msgid "address reserved"
|
||||
msgstr "adresă rezervată"
|
||||
|
||||
#: rfc2131.c:871
|
||||
#, 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:1174
|
||||
#, 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:41
|
||||
#, 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"
|
||||
@@ -1,5 +1,5 @@
|
||||
--- dnsmasq.8 2004-08-08 20:57:56.000000000 +0200
|
||||
+++ dnsmasq.8 2004-08-12 00:40:01.000000000 +0200
|
||||
--- man/dnsmasq.8 2004-08-08 20:57:56.000000000 +0200
|
||||
+++ man/dnsmasq.8 2004-08-12 00:40:01.000000000 +0200
|
||||
@@ -69,7 +69,7 @@
|
||||
.TP
|
||||
.B \-g, --group=<groupname>
|
||||
@@ -20,12 +20,13 @@
|
||||
#define IP6INTERFACES "/proc/net/if_inet6"
|
||||
#define UPTIME "/proc/uptime"
|
||||
#define DHCP_SERVER_PORT 67
|
||||
@@ -195,7 +195,7 @@
|
||||
@@ -195,8 +195,8 @@
|
||||
|
||||
/* platform independent options. */
|
||||
#undef HAVE_BROKEN_RTC
|
||||
-#define HAVE_ISC_READER
|
||||
+#undef HAVE_ISC_READER
|
||||
#undef HAVE_DBUS
|
||||
|
||||
#if defined(HAVE_BROKEN_RTC) && defined(HAVE_ISC_READER)
|
||||
# error HAVE_ISC_READER is not compatible with HAVE_BROKEN_RTC
|
||||
|
||||
21
src/cache.c
21
src/cache.c
@@ -194,7 +194,7 @@ static int cache_scan_free(char *name, struct all_addr *addr, time_t now, unsign
|
||||
}
|
||||
}
|
||||
else if ((crecp->flags & F_FORWARD) &&
|
||||
((flags & crecp->flags & (F_IPV4 | F_IPV6)) || (crecp->flags & F_CNAME)) &&
|
||||
((flags & crecp->flags & (F_IPV4 | F_IPV6)) || ((crecp->flags | flags) & F_CNAME)) &&
|
||||
hostname_isequal(cache_get_name(crecp), name))
|
||||
{
|
||||
if (crecp->flags & (F_HOSTS | F_DHCP))
|
||||
@@ -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))
|
||||
|
||||
76
src/config.h
76
src/config.h
@@ -1,4 +1,4 @@
|
||||
/* dnsmasq is Copyright (c) 2000-2005 Simon Kelley
|
||||
/* dnsmasq is Copyright (c) 2000-2006 Simon Kelley
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -12,13 +12,14 @@
|
||||
|
||||
/* Author's email: simon@thekelleys.org.uk */
|
||||
|
||||
#define VERSION "2.23"
|
||||
#define VERSION "2.27"
|
||||
|
||||
#define FTABSIZ 150 /* max number of outstanding requests */
|
||||
#define MAX_PROCS 20 /* max no children for TCP requests */
|
||||
#define CHILD_LIFETIME 150 /* secs 'till terminated (RFC1035 suggests > 120s) */
|
||||
#define EDNS_PKTSZ 1280 /* default max EDNS.0 UDP packet from RFC2671 */
|
||||
#define TIMEOUT 20 /* drop UDP queries after TIMEOUT seconds */
|
||||
#define LEASE_RETRY 60 /* on error, retry writing leasefile after LEASE_RETRY seconds */
|
||||
#define LOGRATE 120 /* log table overflows every LOGRATE seconds */
|
||||
#define CACHESIZ 150 /* default cache size */
|
||||
#define MAXTOK 50 /* token in DHCP leases */
|
||||
@@ -78,26 +79,6 @@
|
||||
# define T_OPT 41
|
||||
#endif
|
||||
|
||||
/* Decide if we're going to support IPv6 */
|
||||
/* We assume that systems which don't have IPv6
|
||||
headers don't have ntop and pton either */
|
||||
|
||||
#if defined(INET6_ADDRSTRLEN) && defined(IPV6_V6ONLY) && !defined(NO_IPV6)
|
||||
# define HAVE_IPV6
|
||||
# define ADDRSTRLEN INET6_ADDRSTRLEN
|
||||
# if defined(SOL_IPV6)
|
||||
# define IPV6_LEVEL SOL_IPV6
|
||||
# else
|
||||
# define IPV6_LEVEL IPPROTO_IPV6
|
||||
# endif
|
||||
#elif defined(INET_ADDRSTRLEN)
|
||||
# undef HAVE_IPV6
|
||||
# define ADDRSTRLEN INET_ADDRSTRLEN
|
||||
#else
|
||||
# undef HAVE_IPV6
|
||||
# define ADDRSTRLEN 16 /* 4*3 + 3 dots + NULL */
|
||||
#endif
|
||||
|
||||
/* Get linux C library versions. */
|
||||
#if defined(__linux__) && !defined(__UCLIBC__) && !defined(__uClinux__)
|
||||
# include <libio.h>
|
||||
@@ -205,18 +186,17 @@ NOTES:
|
||||
/* platform independent options. */
|
||||
#undef HAVE_BROKEN_RTC
|
||||
#define HAVE_ISC_READER
|
||||
#undef HAVE_DBUS
|
||||
|
||||
#if defined(HAVE_BROKEN_RTC) && defined(HAVE_ISC_READER)
|
||||
# error HAVE_ISC_READER is not compatible with HAVE_BROKEN_RTC
|
||||
#endif
|
||||
|
||||
#undef HAVE_DBUS
|
||||
|
||||
/* platform dependent options. */
|
||||
|
||||
/* Must preceed __linux__ since uClinux defines __linux__ too. */
|
||||
#if defined(__uClinux__) || defined(__UCLIBC__)
|
||||
#undef HAVE_LINUX_IPV6_PROC
|
||||
#if defined(__uClinux__)
|
||||
#define HAVE_LINUX_IPV6_PROC
|
||||
#define HAVE_GETOPT_LONG
|
||||
#define HAVE_RTNETLINK
|
||||
#undef HAVE_ARC4RANDOM
|
||||
@@ -225,12 +205,32 @@ NOTES:
|
||||
#define HAVE_DEV_RANDOM
|
||||
#undef HAVE_SOCKADDR_SA_LEN
|
||||
#undef HAVE_PSELECT
|
||||
#if defined(__uClinux__)
|
||||
/* Never use fork() on uClinux. Note that this is subtly different from the
|
||||
--keep-in-foreground option, since it also suppresses forking new
|
||||
processes for TCP connections. It's intended for use on MMU-less kernels. */
|
||||
#define NO_FORK
|
||||
|
||||
#elif defined(__UCLIBC__)
|
||||
#define HAVE_LINUX_IPV6_PROC
|
||||
#if defined(__UCLIBC_HAS_GNU_GETOPT__) || \
|
||||
((__UCLIBC_MAJOR__==0) && (__UCLIBC_MINOR__==9) && (__UCLIBC_SUBLEVEL__<21))
|
||||
# define HAVE_GETOPT_LONG
|
||||
# else
|
||||
# undef HAVE_GETOPT_LONG
|
||||
# endif
|
||||
#define HAVE_RTNETLINK
|
||||
#undef HAVE_ARC4RANDOM
|
||||
#define HAVE_RANDOM
|
||||
#define HAVE_DEV_URANDOM
|
||||
#define HAVE_DEV_RANDOM
|
||||
#undef HAVE_SOCKADDR_SA_LEN
|
||||
#undef HAVE_PSELECT
|
||||
#if !defined(__ARCH_HAS_MMU__)
|
||||
# define NO_FORK
|
||||
#endif
|
||||
#if !defined(__UCLIBC_HAS_IPV6__)
|
||||
# define NO_IPV6
|
||||
#endif
|
||||
|
||||
/* libc5 - must precede __linux__ too */
|
||||
/* Note to build a libc5 binary on a modern Debian system:
|
||||
@@ -271,10 +271,8 @@ typedef size_t socklen_t;
|
||||
#if defined(__GLIBC__) && (__GLIBC__ == 2) && \
|
||||
defined(__GLIBC_MINOR__) && (__GLIBC_MINOR__ < 2)
|
||||
typedef unsigned long in_addr_t;
|
||||
#if defined(HAVE_IPV6)
|
||||
# define HAVE_BROKEN_SOCKADDR_IN6
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#elif defined(__FreeBSD__) || defined(__OpenBSD__)
|
||||
#undef HAVE_LINUX_IPV6_PROC
|
||||
@@ -334,5 +332,25 @@ typedef unsigned long in_addr_t;
|
||||
#endif
|
||||
|
||||
|
||||
/* Decide if we're going to support IPv6 */
|
||||
/* We assume that systems which don't have IPv6
|
||||
headers don't have ntop and pton either */
|
||||
|
||||
#if defined(INET6_ADDRSTRLEN) && defined(IPV6_V6ONLY) && !defined(NO_IPV6)
|
||||
# define HAVE_IPV6
|
||||
# define ADDRSTRLEN INET6_ADDRSTRLEN
|
||||
# if defined(SOL_IPV6)
|
||||
# define IPV6_LEVEL SOL_IPV6
|
||||
# else
|
||||
# define IPV6_LEVEL IPPROTO_IPV6
|
||||
# endif
|
||||
#elif defined(INET_ADDRSTRLEN)
|
||||
# undef HAVE_IPV6
|
||||
# define ADDRSTRLEN INET_ADDRSTRLEN
|
||||
#else
|
||||
# undef HAVE_IPV6
|
||||
# define ADDRSTRLEN 16 /* 4*3 + 3 dots + NULL */
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
385
src/dhcp.c
385
src/dhcp.c
@@ -1,4 +1,4 @@
|
||||
/* dnsmasq is Copyright (c) 2000-2005 Simon Kelley
|
||||
/* dnsmasq is Copyright (c) 2000-2006 Simon Kelley
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -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
|
||||
@@ -115,7 +115,9 @@ void dhcp_packet(struct daemon *daemon, time_t now)
|
||||
struct msghdr msg;
|
||||
struct iovec iov[2];
|
||||
struct cmsghdr *cmptr;
|
||||
int sz, newlen, iface_index = 0;
|
||||
ssize_t sz;
|
||||
size_t newlen;
|
||||
int iface_index = 0, unicast_dest = 0;
|
||||
struct in_addr iface_addr;
|
||||
#ifdef HAVE_BPF
|
||||
unsigned char iface_hwaddr[ETHER_ADDR_LEN];
|
||||
@@ -143,7 +145,7 @@ void dhcp_packet(struct daemon *daemon, time_t now)
|
||||
|
||||
sz = recvmsg(daemon->dhcpfd, &msg, 0);
|
||||
|
||||
if (sz < (int)(sizeof(*mess) - sizeof(mess->options)))
|
||||
if (sz < (ssize_t)(sizeof(*mess) - sizeof(mess->options)))
|
||||
return;
|
||||
|
||||
#if defined (IP_PKTINFO)
|
||||
@@ -151,19 +153,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;
|
||||
|
||||
@@ -219,7 +225,17 @@ void dhcp_packet(struct daemon *daemon, time_t now)
|
||||
#endif
|
||||
{
|
||||
struct in_addr iface_netmask, iface_broadcast;
|
||||
|
||||
|
||||
#ifdef HAVE_RTNETLINK
|
||||
static int warned = 0;
|
||||
|
||||
if (!warned)
|
||||
{
|
||||
syslog(LOG_WARNING, _("Cannot use RTnetlink socket, falling back to ioctl API"));
|
||||
warned = 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (ioctl(daemon->dhcpfd, SIOCGIFNETMASK, &ifr) < 0)
|
||||
return;
|
||||
iface_netmask = ((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr;
|
||||
@@ -233,8 +249,8 @@ 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);
|
||||
lease_update_file(0, now);
|
||||
newlen = dhcp_reply(daemon, context, ifr.ifr_name, (size_t)sz, now, unicast_dest);
|
||||
lease_update_file(daemon, 0, now);
|
||||
lease_update_dns(daemon);
|
||||
|
||||
if (newlen == 0)
|
||||
@@ -274,16 +290,16 @@ void dhcp_packet(struct daemon *daemon, time_t now)
|
||||
the kernel IP stack */
|
||||
|
||||
u32 i, sum;
|
||||
unsigned char hwdest[ETHER_ADDR_LEN];
|
||||
unsigned char hwdest[DHCP_CHADDR_MAX];
|
||||
|
||||
if (ntohs(mess->flags) & 0x8000)
|
||||
{
|
||||
memset(hwdest, 255, ETHER_ADDR_LEN);
|
||||
memset(hwdest, 255, mess->hlen);
|
||||
rawpacket->ip.ip_dst.s_addr = INADDR_BROADCAST;
|
||||
}
|
||||
else
|
||||
{
|
||||
memcpy(hwdest, mess->chaddr, ETHER_ADDR_LEN);
|
||||
memcpy(hwdest, mess->chaddr, mess->hlen);
|
||||
rawpacket->ip.ip_dst.s_addr = mess->yiaddr.s_addr;
|
||||
}
|
||||
|
||||
@@ -307,7 +323,8 @@ void dhcp_packet(struct daemon *daemon, time_t now)
|
||||
|
||||
rawpacket->udp.uh_sport = htons(DHCP_SERVER_PORT);
|
||||
rawpacket->udp.uh_dport = htons(DHCP_CLIENT_PORT);
|
||||
((u8 *)&rawpacket->data)[newlen] = 0; /* for checksum, in case length is odd. */
|
||||
if (newlen & 1)
|
||||
((u8 *)&rawpacket->data)[newlen] = 0; /* for checksum, in case length is odd. */
|
||||
rawpacket->udp.uh_sum = 0;
|
||||
rawpacket->udp.uh_ulen = sum = htons(sizeof(struct udphdr) + newlen);
|
||||
sum += htons(IPPROTO_UDP);
|
||||
@@ -323,26 +340,43 @@ void dhcp_packet(struct daemon *daemon, time_t now)
|
||||
#ifdef HAVE_BPF
|
||||
struct ether_header header;
|
||||
|
||||
header.ether_type = htons(ETHERTYPE_IP);
|
||||
memcpy(header.ether_shost, iface_hwaddr, ETHER_ADDR_LEN);
|
||||
memcpy(header.ether_dhost, hwdest, ETHER_ADDR_LEN);
|
||||
|
||||
ioctl(daemon->dhcp_raw_fd, BIOCSETIF, &ifr);
|
||||
|
||||
iov[0].iov_base = (char *)&header;
|
||||
iov[0].iov_len = sizeof(struct ether_header);
|
||||
iov[1].iov_base = (char *)rawpacket;
|
||||
iov[1].iov_len = ntohs(rawpacket->ip.ip_len);
|
||||
while (writev(daemon->dhcp_raw_fd, iov, 2) == -1 && retry_send());
|
||||
/* Only know how to do ethernet on *BSD */
|
||||
if (mess->htype != ARPHRD_ETHER || mess->hlen != ETHER_ADDR_LEN)
|
||||
syslog(LOG_WARNING, _("DHCP request for unsupported hardware type (%d) recieved on %s"),
|
||||
mess->htype, ifr.ifr_name);
|
||||
else
|
||||
{
|
||||
header.ether_type = htons(ETHERTYPE_IP);
|
||||
memcpy(header.ether_shost, iface_hwaddr, ETHER_ADDR_LEN);
|
||||
memcpy(header.ether_dhost, hwdest, ETHER_ADDR_LEN);
|
||||
|
||||
ioctl(daemon->dhcp_raw_fd, BIOCSETIF, &ifr);
|
||||
|
||||
iov[0].iov_base = (char *)&header;
|
||||
iov[0].iov_len = sizeof(struct ether_header);
|
||||
iov[1].iov_base = (char *)rawpacket;
|
||||
iov[1].iov_len = ntohs(rawpacket->ip.ip_len);
|
||||
while (writev(daemon->dhcp_raw_fd, iov, 2) == -1 && retry_send());
|
||||
}
|
||||
#else
|
||||
struct sockaddr_ll dest;
|
||||
/* Most definitions of this only include 8 bytes of address,
|
||||
so we roll our own, since later kernels allow more. */
|
||||
struct {
|
||||
unsigned short int sll_family;
|
||||
unsigned short int sll_protocol;
|
||||
int sll_ifindex;
|
||||
unsigned short int sll_hatype;
|
||||
unsigned char sll_pkttype;
|
||||
unsigned char sll_halen;
|
||||
unsigned char sll_addr[DHCP_CHADDR_MAX];
|
||||
} dest;
|
||||
|
||||
memset(&dest, 0, sizeof(dest));
|
||||
dest.sll_family = AF_PACKET;
|
||||
dest.sll_halen = ETHER_ADDR_LEN;
|
||||
dest.sll_halen = mess->hlen;
|
||||
dest.sll_ifindex = iface_index;
|
||||
dest.sll_protocol = htons(ETHERTYPE_IP);
|
||||
memcpy(dest.sll_addr, hwdest, ETHER_ADDR_LEN);
|
||||
memcpy(dest.sll_addr, hwdest, mess->hlen);
|
||||
while (sendto(daemon->dhcp_raw_fd, rawpacket, ntohs(rawpacket->ip.ip_len),
|
||||
0, (struct sockaddr *)&dest, sizeof(dest)) == -1 &&
|
||||
retry_send());
|
||||
@@ -376,7 +410,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;
|
||||
@@ -442,24 +476,29 @@ struct dhcp_context *address_available(struct dhcp_context *context, struct in_a
|
||||
|
||||
struct dhcp_context *narrow_context(struct dhcp_context *context, struct in_addr taddr)
|
||||
{
|
||||
/* We start of with a set of possible contexts, all on the current subnet.
|
||||
/* We start of with a set of possible contexts, all on the current physical interface.
|
||||
These are chained on ->current.
|
||||
Here we have an address, and return the actual context correponding to that
|
||||
address. Note that none may fit, if the address came a dhcp-host and is outside
|
||||
any dhcp-range. In that case we return a static range is possible, or failing that,
|
||||
any context on the subnet. (If there's more than one, this is a dodgy configuration:
|
||||
maybe there should be a warning.) */
|
||||
any dhcp-range. In that case we return a static range if possible, or failing that,
|
||||
any context on the correct subnet. (If there's more than one, this is a dodgy
|
||||
configuration: maybe there should be a warning.) */
|
||||
|
||||
struct dhcp_context *tmp = address_available(context, taddr);
|
||||
struct dhcp_context *tmp;
|
||||
|
||||
if (tmp)
|
||||
if ((tmp = address_available(context, taddr)))
|
||||
return tmp;
|
||||
|
||||
for (tmp = context; tmp; tmp = tmp->current)
|
||||
if (tmp->flags & CONTEXT_STATIC)
|
||||
if (is_same_net(taddr, tmp->start, tmp->netmask) &&
|
||||
(tmp->flags & CONTEXT_STATIC))
|
||||
return tmp;
|
||||
|
||||
return context;
|
||||
for (tmp = context; tmp; tmp = tmp->current)
|
||||
if (is_same_net(taddr, tmp->start, tmp->netmask))
|
||||
return tmp;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct dhcp_config *config_find_by_address(struct dhcp_config *configs, struct in_addr addr)
|
||||
@@ -473,12 +512,13 @@ struct dhcp_config *config_find_by_address(struct dhcp_config *configs, struct i
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Is every member of check matched by a member of pool? */
|
||||
int match_netid(struct dhcp_netid *check, struct dhcp_netid *pool)
|
||||
/* Is every member of check matched by a member of pool?
|
||||
If negonly, match unless there's a negative tag which matches. */
|
||||
int match_netid(struct dhcp_netid *check, struct dhcp_netid *pool, int negonly)
|
||||
{
|
||||
struct dhcp_netid *tmp1;
|
||||
|
||||
if (!check)
|
||||
if (!check && !negonly)
|
||||
return 0;
|
||||
|
||||
for (; check; check = check->next)
|
||||
@@ -488,7 +528,7 @@ int match_netid(struct dhcp_netid *check, struct dhcp_netid *pool)
|
||||
for (tmp1 = pool; tmp1; tmp1 = tmp1->next)
|
||||
if (strcmp(check->net, tmp1->net) == 0)
|
||||
break;
|
||||
if (!tmp1)
|
||||
if (!tmp1 || negonly)
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
@@ -500,108 +540,103 @@ int match_netid(struct dhcp_netid *check, struct dhcp_netid *pool)
|
||||
}
|
||||
|
||||
int address_allocate(struct dhcp_context *context, struct daemon *daemon,
|
||||
struct in_addr *addrp, unsigned char *hwaddr,
|
||||
struct in_addr *addrp, unsigned char *hwaddr, int hw_len,
|
||||
struct dhcp_netid *netids, time_t now)
|
||||
{
|
||||
/* Find a free address: exclude anything in use and anything allocated to
|
||||
a particular hwaddr/clientid/hostname in our configuration.
|
||||
Try to return from contexts which mathc netis first. */
|
||||
Try to return from contexts which match netids first. */
|
||||
|
||||
struct in_addr start, addr ;
|
||||
struct dhcp_context *c;
|
||||
unsigned int i, j;
|
||||
|
||||
for (c = context; c; c = c->current)
|
||||
if (c->flags & CONTEXT_STATIC)
|
||||
continue;
|
||||
else if (netids && !(c->flags & CONTEXT_FILTER))
|
||||
continue;
|
||||
else if (!netids && (c->flags & CONTEXT_FILTER))
|
||||
continue;
|
||||
else if (netids && (c->flags & CONTEXT_FILTER) && !match_netid(&c->netid, netids))
|
||||
continue;
|
||||
else
|
||||
{
|
||||
/* pick a seed based on hwaddr then iterate until we find a free address. */
|
||||
for (j = c->addr_epoch, i = 0; i < ETHER_ADDR_LEN; i++)
|
||||
j += hwaddr[i] + (hwaddr[i] << 8) + (hwaddr[i] << 16);
|
||||
|
||||
start.s_addr = addr.s_addr =
|
||||
htonl(ntohl(c->start.s_addr) +
|
||||
(j % (1 + ntohl(c->end.s_addr) - ntohl(c->start.s_addr))));
|
||||
|
||||
do {
|
||||
if (!lease_find_by_addr(addr) &&
|
||||
!config_find_by_address(daemon->dhcp_conf, addr))
|
||||
{
|
||||
struct ping_result *r, *victim = NULL;
|
||||
int count;
|
||||
int i, pass;
|
||||
unsigned int j;
|
||||
|
||||
/* check if we failed to ping addr sometime in the last
|
||||
30s. If so, assume the same situation still exists.
|
||||
This avoids problems when a stupid client bangs
|
||||
on us repeatedly. As a final check, is we did more
|
||||
than six ping checks in the last 30s, we are in
|
||||
high-load mode, so don't do any more. */
|
||||
for (count = 0, r = daemon->ping_results; r; r = r->next)
|
||||
if (difftime(now, r->time) > 30.0)
|
||||
victim = r; /* old record */
|
||||
else if (++count == 6 || r->addr.s_addr == addr.s_addr)
|
||||
for (pass = 0; pass <= 1; pass++)
|
||||
for (c = context; c; c = c->current)
|
||||
if (c->flags & CONTEXT_STATIC)
|
||||
continue;
|
||||
else if (!match_netid(c->filter, netids, pass))
|
||||
continue;
|
||||
else
|
||||
{
|
||||
/* pick a seed based on hwaddr then iterate until we find a free address. */
|
||||
for (j = c->addr_epoch, i = 0; i < hw_len; i++)
|
||||
j += hwaddr[i] + (hwaddr[i] << 8) + (hwaddr[i] << 16);
|
||||
|
||||
start.s_addr = addr.s_addr =
|
||||
htonl(ntohl(c->start.s_addr) +
|
||||
(j % (1 + ntohl(c->end.s_addr) - ntohl(c->start.s_addr))));
|
||||
|
||||
do {
|
||||
if (!lease_find_by_addr(addr) &&
|
||||
!config_find_by_address(daemon->dhcp_conf, addr))
|
||||
{
|
||||
struct ping_result *r, *victim = NULL;
|
||||
int count;
|
||||
|
||||
/* check if we failed to ping addr sometime in the last
|
||||
30s. If so, assume the same situation still exists.
|
||||
This avoids problems when a stupid client bangs
|
||||
on us repeatedly. As a final check, is we did more
|
||||
than six ping checks in the last 30s, we are in
|
||||
high-load mode, so don't do any more. */
|
||||
for (count = 0, r = daemon->ping_results; r; r = r->next)
|
||||
if (difftime(now, r->time) > 30.0)
|
||||
victim = r; /* old record */
|
||||
else if (++count == 6 || r->addr.s_addr == addr.s_addr)
|
||||
{
|
||||
*addrp = addr;
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (icmp_ping(daemon, addr))
|
||||
/* address in use: perturb address selection so that we are
|
||||
less likely to try this address again. */
|
||||
c->addr_epoch++;
|
||||
else
|
||||
{
|
||||
/* at this point victim may hold an expired record */
|
||||
if (!victim)
|
||||
{
|
||||
if ((victim = malloc(sizeof(struct ping_result))))
|
||||
{
|
||||
victim->next = daemon->ping_results;
|
||||
daemon->ping_results = victim;
|
||||
}
|
||||
}
|
||||
|
||||
/* record that this address is OK for 30s
|
||||
without more ping checks */
|
||||
if (victim)
|
||||
{
|
||||
victim->addr = addr;
|
||||
victim->time = now;
|
||||
}
|
||||
*addrp = addr;
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (icmp_ping(daemon, addr))
|
||||
/* address in use: perturb address selection so that we are
|
||||
less likely to try this address again. */
|
||||
c->addr_epoch++;
|
||||
else
|
||||
{
|
||||
/* at this point victim may hold an expired record */
|
||||
if (!victim)
|
||||
{
|
||||
if ((victim = malloc(sizeof(struct ping_result))))
|
||||
{
|
||||
victim->next = daemon->ping_results;
|
||||
daemon->ping_results = victim;
|
||||
}
|
||||
}
|
||||
|
||||
/* record that this address is OK for 30s
|
||||
without more ping checks */
|
||||
if (victim)
|
||||
{
|
||||
victim->addr = addr;
|
||||
victim->time = now;
|
||||
}
|
||||
*addrp = addr;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
addr.s_addr = htonl(ntohl(addr.s_addr) + 1);
|
||||
|
||||
if (addr.s_addr == htonl(ntohl(c->end.s_addr) + 1))
|
||||
addr = c->start;
|
||||
|
||||
} while (addr.s_addr != start.s_addr);
|
||||
}
|
||||
|
||||
if (netids)
|
||||
return address_allocate(context, daemon, addrp, hwaddr, NULL, now);
|
||||
}
|
||||
|
||||
addr.s_addr = htonl(ntohl(addr.s_addr) + 1);
|
||||
|
||||
if (addr.s_addr == htonl(ntohl(c->end.s_addr) + 1))
|
||||
addr = c->start;
|
||||
|
||||
} while (addr.s_addr != start.s_addr);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
@@ -610,7 +645,8 @@ static int is_addr_in_context(struct dhcp_context *context, struct dhcp_config *
|
||||
struct dhcp_config *find_config(struct dhcp_config *configs,
|
||||
struct dhcp_context *context,
|
||||
unsigned char *clid, int clid_len,
|
||||
unsigned char *hwaddr, char *hostname)
|
||||
unsigned char *hwaddr, int hw_len,
|
||||
int hw_type, char *hostname)
|
||||
{
|
||||
struct dhcp_config *config;
|
||||
|
||||
@@ -632,15 +668,16 @@ struct dhcp_config *find_config(struct dhcp_config *configs,
|
||||
}
|
||||
|
||||
|
||||
if (hwaddr)
|
||||
for (config = configs; config; config = config->next)
|
||||
if ((config->flags & CONFIG_HWADDR) &&
|
||||
config->wildcard_mask == 0 &&
|
||||
memcmp(config->hwaddr, hwaddr, ETHER_ADDR_LEN) == 0 &&
|
||||
is_addr_in_context(context, config))
|
||||
return config;
|
||||
|
||||
for (config = configs; config; config = config->next)
|
||||
if ((config->flags & CONFIG_HWADDR) &&
|
||||
config->wildcard_mask == 0 &&
|
||||
config->hwaddr_len == hw_len &&
|
||||
(config->hwaddr_type == hw_type || config->hwaddr_type == 0) &&
|
||||
memcmp(config->hwaddr, hwaddr, hw_len) == 0 &&
|
||||
is_addr_in_context(context, config))
|
||||
return config;
|
||||
|
||||
|
||||
if (hostname && context)
|
||||
for (config = configs; config; config = config->next)
|
||||
if ((config->flags & CONFIG_NAME) &&
|
||||
@@ -648,20 +685,21 @@ struct dhcp_config *find_config(struct dhcp_config *configs,
|
||||
is_addr_in_context(context, config))
|
||||
return config;
|
||||
|
||||
if (hwaddr)
|
||||
for (config = configs; config; config = config->next)
|
||||
if ((config->flags & CONFIG_HWADDR) &&
|
||||
config->wildcard_mask != 0 &&
|
||||
is_addr_in_context(context, config))
|
||||
{
|
||||
int i;
|
||||
unsigned int mask = config->wildcard_mask;
|
||||
for (i = ETHER_ADDR_LEN - 1; i >= 0; i--, mask = mask >> 1)
|
||||
if (mask & 1)
|
||||
config->hwaddr[i] = hwaddr[i];
|
||||
if (memcmp(config->hwaddr, hwaddr, ETHER_ADDR_LEN) == 0)
|
||||
return config;
|
||||
}
|
||||
for (config = configs; config; config = config->next)
|
||||
if ((config->flags & CONFIG_HWADDR) &&
|
||||
config->wildcard_mask != 0 &&
|
||||
config->hwaddr_len == hw_len &&
|
||||
(config->hwaddr_type == hw_type || config->hwaddr_type == 0) &&
|
||||
is_addr_in_context(context, config))
|
||||
{
|
||||
int i;
|
||||
unsigned int mask = config->wildcard_mask;
|
||||
for (i = hw_len - 1; i >= 0; i--, mask = mask >> 1)
|
||||
if (mask & 1)
|
||||
config->hwaddr[i] = hwaddr[i];
|
||||
if (memcmp(config->hwaddr, hwaddr, hw_len) == 0)
|
||||
return config;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
@@ -675,18 +713,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 +736,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, ETHER_ADDR_LEN, NULL, NULL) != ETHER_ADDR_LEN)
|
||||
{
|
||||
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 +750,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 +764,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)
|
||||
@@ -733,6 +781,8 @@ void dhcp_read_ethers(struct daemon *daemon)
|
||||
for (config = configs; config; config = config->next)
|
||||
if ((config->flags & CONFIG_HWADDR) &&
|
||||
config->wildcard_mask == 0 &&
|
||||
config->hwaddr_len == ETHER_ADDR_LEN &&
|
||||
(config->hwaddr_type == ARPHRD_ETHER || config->hwaddr_type == 0) &&
|
||||
memcmp(config->hwaddr, hwaddr, ETHER_ADDR_LEN) == 0)
|
||||
break;
|
||||
|
||||
@@ -762,13 +812,14 @@ void dhcp_read_ethers(struct daemon *daemon)
|
||||
|
||||
config->flags |= CONFIG_HWADDR | CONFIG_NOCLID;
|
||||
memcpy(config->hwaddr, hwaddr, ETHER_ADDR_LEN);
|
||||
|
||||
config->hwaddr_len = ETHER_ADDR_LEN;
|
||||
config->hwaddr_type = ARPHRD_ETHER;
|
||||
count++;
|
||||
}
|
||||
|
||||
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 +842,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 +878,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
|
||||
|
||||
100
src/dnsmasq.c
100
src/dnsmasq.c
@@ -1,4 +1,4 @@
|
||||
/* dnsmasq is Copyright (c) 2000-2005 Simon Kelley
|
||||
/* dnsmasq is Copyright (c) 2000-2006 Simon Kelley
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -26,6 +26,9 @@ static char *compile_opts =
|
||||
#ifdef HAVE_BROKEN_RTC
|
||||
"no-RTC "
|
||||
#endif
|
||||
#ifdef HAVE_RTNETLINK
|
||||
"RTNetlink "
|
||||
#endif
|
||||
#ifndef HAVE_ISC_READER
|
||||
"no-"
|
||||
#endif
|
||||
@@ -33,7 +36,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 +58,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 +112,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 +131,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 +146,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 +160,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 +173,10 @@ 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
|
||||
@@ -243,7 +255,7 @@ int main (int argc, char **argv)
|
||||
#endif
|
||||
|
||||
if (daemon->dhcp &&
|
||||
(i == daemon->lease_fd ||
|
||||
(i == fileno(daemon->lease_stream) ||
|
||||
i == daemon->dhcpfd ||
|
||||
i == daemon->dhcp_raw_fd ||
|
||||
i == daemon->dhcp_icmp_fd))
|
||||
@@ -277,38 +289,38 @@ 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);
|
||||
|
||||
#ifdef HAVE_RTNETLINK
|
||||
/* Must do this after daemonizing so that the pid is right */
|
||||
netlink_init(daemon);
|
||||
#endif
|
||||
|
||||
if (daemon->dhcp)
|
||||
{
|
||||
struct dhcp_context *dhcp_tmp;
|
||||
|
||||
#ifdef HAVE_RTNETLINK
|
||||
/* Must do this after daemonizing so that the pid is right */
|
||||
daemon->netlinkfd = netlink_init();
|
||||
#endif
|
||||
|
||||
for (dhcp_tmp = daemon->dhcp; dhcp_tmp; dhcp_tmp = dhcp_tmp->next)
|
||||
{
|
||||
@@ -316,8 +328,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 +340,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);
|
||||
|
||||
@@ -362,7 +374,7 @@ int main (int argc, char **argv)
|
||||
{
|
||||
if (daemon->dhcp)
|
||||
{
|
||||
lease_update_file(1, now);
|
||||
lease_update_file(daemon, 1, now);
|
||||
#ifdef HAVE_BROKEN_RTC
|
||||
alarm(daemon->min_leasetime);
|
||||
#endif
|
||||
@@ -387,6 +399,15 @@ int main (int argc, char **argv)
|
||||
maxfd = daemon->dhcpfd;
|
||||
}
|
||||
|
||||
#ifdef HAVE_RTNETLINK
|
||||
if (daemon->netlinkfd != -1)
|
||||
{
|
||||
FD_SET(daemon->netlinkfd, &rset);
|
||||
if (daemon->netlinkfd > maxfd)
|
||||
maxfd = daemon->netlinkfd;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Whilst polling for the dbus, wake every quarter second */
|
||||
#ifdef HAVE_PSELECT
|
||||
{
|
||||
@@ -458,7 +479,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
|
||||
@@ -484,6 +505,11 @@ int main (int argc, char **argv)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef HAVE_RTNETLINK
|
||||
if (daemon->netlinkfd != -1 && FD_ISSET(daemon->netlinkfd, &rset))
|
||||
netlink_multicast(daemon);
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_DBUS
|
||||
/* if we didn't create a DBus connection, retry now. */
|
||||
@@ -491,9 +517,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,14 +530,14 @@ 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)
|
||||
{
|
||||
#ifdef HAVE_BROKEN_RTC
|
||||
lease_update_file(1, now);
|
||||
lease_update_file(daemon, 1, now);
|
||||
#endif
|
||||
close(daemon->lease_fd);
|
||||
fclose(daemon->lease_stream);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -551,8 +577,8 @@ 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_file(0, now);
|
||||
lease_update_from_configs(daemon);
|
||||
lease_update_file(daemon, 0, now);
|
||||
lease_update_dns(daemon);
|
||||
}
|
||||
}
|
||||
|
||||
114
src/dnsmasq.h
114
src/dnsmasq.h
@@ -12,7 +12,7 @@
|
||||
|
||||
/* Author's email: simon@thekelleys.org.uk */
|
||||
|
||||
#define COPYRIGHT "Copyright (C) 2000-2005 Simon Kelley"
|
||||
#define COPYRIGHT "Copyright (C) 2000-2006 Simon Kelley"
|
||||
|
||||
#ifdef __linux__
|
||||
/* for pselect.... */
|
||||
@@ -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>
|
||||
@@ -83,13 +92,8 @@
|
||||
memory for the largest packet, and the largest record so the
|
||||
min for DNS is PACKETSZ+MAXDNAME+RRFIXEDSZ which is < 1000.
|
||||
This might be increased is EDNS packet size if greater than the minimum.
|
||||
The buffer is also used for NETLINK, which needs to be about 2000
|
||||
on systems with many interfaces/addresses. */
|
||||
#ifdef HAVE_RTNETLINK
|
||||
# define DNSMASQ_PACKETSZ PACKETSZ+MAXDNAME+RRFIXEDSZ
|
||||
#else
|
||||
# define DNSMASQ_PACKETSZ 2000
|
||||
#endif
|
||||
*/
|
||||
#define DNSMASQ_PACKETSZ PACKETSZ+MAXDNAME+RRFIXEDSZ
|
||||
|
||||
#define OPT_BOGUSPRIV 1
|
||||
#define OPT_FILTER 2
|
||||
@@ -188,7 +192,7 @@ struct crec {
|
||||
#define F_NOERR 32768
|
||||
|
||||
/* struct sockaddr is not large enough to hold any address,
|
||||
and specifically not big enough to hold and IPv6 address.
|
||||
and specifically not big enough to hold an IPv6 address.
|
||||
Blech. Roll our own. */
|
||||
union mysockaddr {
|
||||
struct sockaddr sa;
|
||||
@@ -269,7 +273,7 @@ struct resolvc {
|
||||
struct hostsfile {
|
||||
struct hostsfile *next;
|
||||
char *fname;
|
||||
int index; /* matches to cache entries fro logging */
|
||||
int index; /* matches to cache entries for logging */
|
||||
};
|
||||
|
||||
struct frec {
|
||||
@@ -284,12 +288,16 @@ struct frec {
|
||||
struct frec *next;
|
||||
};
|
||||
|
||||
#define DHCP_CHADDR_MAX 16
|
||||
|
||||
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];
|
||||
int hwaddr_len, hwaddr_type;
|
||||
unsigned char hwaddr[DHCP_CHADDR_MAX];
|
||||
struct in_addr addr;
|
||||
struct dhcp_lease *next;
|
||||
};
|
||||
@@ -307,7 +315,8 @@ struct dhcp_config {
|
||||
unsigned int flags;
|
||||
int clid_len; /* length of client identifier */
|
||||
unsigned char *clid; /* clientid */
|
||||
unsigned char hwaddr[ETHER_ADDR_LEN];
|
||||
int hwaddr_len, hwaddr_type;
|
||||
unsigned char hwaddr[DHCP_CHADDR_MAX];
|
||||
char *hostname;
|
||||
struct dhcp_netid netid;
|
||||
struct in_addr addr;
|
||||
@@ -325,12 +334,15 @@ struct dhcp_config {
|
||||
#define CONFIG_NOCLID 128
|
||||
|
||||
struct dhcp_opt {
|
||||
int opt, len, is_addr;
|
||||
int opt, len, flags;
|
||||
unsigned char *val, *vendor_class;
|
||||
struct dhcp_netid *netid;
|
||||
struct dhcp_opt *next;
|
||||
};
|
||||
|
||||
#define DHOPT_ADDR 1
|
||||
#define DHOPT_STRING 2
|
||||
|
||||
struct dhcp_boot {
|
||||
char *file, *sname;
|
||||
struct in_addr next_server;
|
||||
@@ -345,20 +357,27 @@ struct dhcp_vendor {
|
||||
struct dhcp_vendor *next;
|
||||
};
|
||||
|
||||
struct dhcp_mac {
|
||||
unsigned int mask;
|
||||
int hwaddr_len, hwaddr_type;
|
||||
unsigned char hwaddr[DHCP_CHADDR_MAX];
|
||||
struct dhcp_netid netid;
|
||||
struct dhcp_mac *next;
|
||||
};
|
||||
|
||||
struct dhcp_context {
|
||||
unsigned int lease_time, addr_epoch;
|
||||
struct in_addr netmask, broadcast;
|
||||
struct in_addr local, router;
|
||||
struct in_addr start, end; /* range of available addresses */
|
||||
int flags;
|
||||
struct dhcp_netid netid;
|
||||
struct dhcp_netid netid, *filter;
|
||||
struct dhcp_context *next, *current;
|
||||
};
|
||||
|
||||
#define CONTEXT_STATIC 1
|
||||
#define CONTEXT_FILTER 2
|
||||
#define CONTEXT_NETMASK 4
|
||||
#define CONTEXT_BRDCAST 8
|
||||
#define CONTEXT_NETMASK 2
|
||||
#define CONTEXT_BRDCAST 4
|
||||
|
||||
|
||||
typedef unsigned char u8;
|
||||
@@ -379,7 +398,7 @@ struct udp_dhcp_packet {
|
||||
u32 xid;
|
||||
u16 secs, flags;
|
||||
struct in_addr ciaddr, yiaddr, siaddr, giaddr;
|
||||
u8 chaddr[16], sname[64], file[128];
|
||||
u8 chaddr[DHCP_CHADDR_MAX], sname[64], file[128];
|
||||
u8 options[312];
|
||||
} data;
|
||||
};
|
||||
@@ -415,6 +434,7 @@ struct daemon {
|
||||
struct dhcp_config *dhcp_conf;
|
||||
struct dhcp_opt *dhcp_opts, *vendor_opts;
|
||||
struct dhcp_vendor *dhcp_vendors;
|
||||
struct dhcp_mac *dhcp_macs;
|
||||
struct dhcp_boot *boot_config;
|
||||
struct dhcp_netid_list *dhcp_ignore;
|
||||
int dhcp_max;
|
||||
@@ -430,16 +450,19 @@ struct daemon {
|
||||
struct irec *interfaces;
|
||||
struct listener *listeners;
|
||||
struct server *last_server;
|
||||
struct server *srv_save; /* Used for resend on DoD */
|
||||
size_t packet_len; /* " " */
|
||||
int uptime_fd;
|
||||
|
||||
/* DHCP state */
|
||||
int dhcpfd, dhcp_raw_fd, dhcp_icmp_fd, lease_fd;
|
||||
int dhcpfd, dhcp_raw_fd, dhcp_icmp_fd;
|
||||
#ifdef HAVE_RTNETLINK
|
||||
int netlinkfd;
|
||||
#endif
|
||||
struct udp_dhcp_packet *dhcp_packet;
|
||||
char *dhcp_buff, *dhcp_buff2;
|
||||
struct ping_result *ping_results;
|
||||
FILE *lease_stream;
|
||||
|
||||
/* DBus stuff */
|
||||
#ifdef HAVE_DBUS
|
||||
@@ -470,23 +493,23 @@ void dump_cache(struct daemon *daemon);
|
||||
char *cache_get_name(struct crec *crecp);
|
||||
|
||||
/* rfc1035.c */
|
||||
unsigned short extract_request(HEADER *header, unsigned int qlen,
|
||||
unsigned short extract_request(HEADER *header, size_t qlen,
|
||||
char *name, unsigned short *typep);
|
||||
int setup_reply(HEADER *header, unsigned int qlen,
|
||||
struct all_addr *addrp, unsigned short flags,
|
||||
unsigned long local_ttl);
|
||||
void extract_addresses(HEADER *header, unsigned int qlen, char *namebuff,
|
||||
size_t setup_reply(HEADER *header, size_t qlen,
|
||||
struct all_addr *addrp, unsigned short flags,
|
||||
unsigned long local_ttl);
|
||||
void extract_addresses(HEADER *header, size_t qlen, char *namebuff,
|
||||
time_t now, struct daemon *daemon);
|
||||
int answer_request(HEADER *header, char *limit, unsigned int qlen, struct daemon *daemon,
|
||||
size_t answer_request(HEADER *header, char *limit, size_t qlen, struct daemon *daemon,
|
||||
struct in_addr local_addr, struct in_addr local_netmask, time_t now);
|
||||
int check_for_bogus_wildcard(HEADER *header, unsigned int qlen, char *name,
|
||||
int check_for_bogus_wildcard(HEADER *header, size_t qlen, char *name,
|
||||
struct bogus_addr *addr, time_t now);
|
||||
unsigned char *find_pseudoheader(HEADER *header, unsigned int plen,
|
||||
unsigned int *len, unsigned char **p);
|
||||
unsigned char *find_pseudoheader(HEADER *header, size_t plen,
|
||||
size_t *len, unsigned char **p);
|
||||
int check_for_local_domain(char *name, time_t now, struct daemon *daemon);
|
||||
unsigned int questions_crc(HEADER *header, unsigned int plen, char *buff);
|
||||
int resize_packet(HEADER *header, unsigned int plen,
|
||||
unsigned char *pheader, unsigned int hlen);
|
||||
unsigned int questions_crc(HEADER *header, size_t plen, char *buff);
|
||||
size_t resize_packet(HEADER *header, size_t plen,
|
||||
unsigned char *pheader, size_t hlen);
|
||||
|
||||
/* util.c */
|
||||
unsigned short rand16(void);
|
||||
@@ -505,7 +528,7 @@ int retry_send(void);
|
||||
void prettyprint_time(char *buf, unsigned int t);
|
||||
int prettyprint_addr(union mysockaddr *addr, char *buf);
|
||||
int parse_hex(char *in, unsigned char *out, int maxlen,
|
||||
unsigned int *wildcard_mask);
|
||||
unsigned int *wildcard_mask, int *mac_type);
|
||||
|
||||
/* option.c */
|
||||
struct daemon *read_opts (int argc, char **argv, char *compile_opts);
|
||||
@@ -532,14 +555,15 @@ void dhcp_packet(struct daemon *daemon, time_t now);
|
||||
|
||||
struct dhcp_context *address_available(struct dhcp_context *context, struct in_addr addr);
|
||||
struct dhcp_context *narrow_context(struct dhcp_context *context, struct in_addr taddr);
|
||||
int match_netid(struct dhcp_netid *check, struct dhcp_netid *pool);
|
||||
int match_netid(struct dhcp_netid *check, struct dhcp_netid *pool, int negonly);
|
||||
int address_allocate(struct dhcp_context *context, struct daemon *daemon,
|
||||
struct in_addr *addrp, unsigned char *hwaddr,
|
||||
struct in_addr *addrp, unsigned char *hwaddr, int hw_len,
|
||||
struct dhcp_netid *netids, time_t now);
|
||||
struct dhcp_config *find_config(struct dhcp_config *configs,
|
||||
struct dhcp_context *context,
|
||||
unsigned char *clid, int clid_len,
|
||||
unsigned char *hwaddr, char *hostname);
|
||||
unsigned char *hwaddr, int hw_len,
|
||||
int hw_type, char *hostname);
|
||||
void dhcp_update_configs(struct dhcp_config *configs);
|
||||
void dhcp_read_ethers(struct daemon *daemon);
|
||||
struct dhcp_config *config_find_by_address(struct dhcp_config *configs, struct in_addr addr);
|
||||
@@ -551,23 +575,24 @@ struct dhcp_context *complete_context(struct daemon *daemon, struct in_addr loca
|
||||
struct in_addr primary);
|
||||
|
||||
/* lease.c */
|
||||
void lease_update_file(int force, time_t now);
|
||||
void lease_update_file(struct daemon *daemon, int force, time_t now);
|
||||
void lease_update_dns(struct daemon *daemon);
|
||||
void lease_init(struct daemon *daemon, time_t now);
|
||||
struct dhcp_lease *lease_allocate(unsigned char *hwaddr, unsigned char *clid,
|
||||
int clid_len, struct in_addr addr);
|
||||
int hw_len, int hw_type, 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);
|
||||
unsigned char *clid, int hw_len, int hw_type, int clid_len);
|
||||
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,
|
||||
struct dhcp_lease *lease_find_by_client(unsigned char *hwaddr, int hw_len, int hw_type,
|
||||
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);
|
||||
size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_name, size_t sz, time_t now, int unicast_dest);
|
||||
|
||||
/* dnsmasq.c */
|
||||
int icmp_ping(struct daemon *daemon, struct in_addr addr);
|
||||
@@ -580,10 +605,11 @@ void load_dhcp(struct daemon *daemon, time_t now);
|
||||
|
||||
/* netlink.c */
|
||||
#ifdef HAVE_RTNETLINK
|
||||
int netlink_init(void);
|
||||
void netlink_init(struct daemon *daemon);
|
||||
int netlink_process(struct daemon *daemon, int index,
|
||||
struct in_addr relay, struct in_addr primary,
|
||||
struct dhcp_context **retp);
|
||||
void netlink_multicast(struct daemon *daemon);
|
||||
#endif
|
||||
|
||||
/* dbus.c */
|
||||
|
||||
135
src/forward.c
135
src/forward.c
@@ -36,7 +36,7 @@ void forward_init(int first)
|
||||
|
||||
/* Send a UDP packet with it's source address set as "source"
|
||||
unless nowild is true, when we just send it with the kernel default */
|
||||
static void send_from(int fd, int nowild, char *packet, int len,
|
||||
static void send_from(int fd, int nowild, char *packet, size_t len,
|
||||
union mysockaddr *to, struct all_addr *source,
|
||||
unsigned int iface)
|
||||
{
|
||||
@@ -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 &&
|
||||
(domainlen == 0 || 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,21 +212,20 @@ 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, size_t plen, time_t now, struct frec *forward)
|
||||
{
|
||||
struct frec *forward;
|
||||
char *domain = NULL;
|
||||
int type = 0;
|
||||
struct all_addr *addrp = NULL;
|
||||
unsigned int crc = questions_crc(header, (unsigned int)plen, daemon->namebuff);
|
||||
unsigned int crc = questions_crc(header, plen, daemon->namebuff);
|
||||
unsigned short flags = 0;
|
||||
unsigned short gotname = extract_request(header, (unsigned int)plen, daemon->namebuff, NULL);
|
||||
unsigned short gotname = extract_request(header, plen, daemon->namebuff, NULL);
|
||||
struct server *start = NULL;
|
||||
|
||||
/* 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;
|
||||
@@ -301,6 +302,10 @@ static void forward_query(struct daemon *daemon, int udpfd, union mysockaddr *ud
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Keep info in case we want to re-send this packet */
|
||||
daemon->srv_save = start;
|
||||
daemon->packet_len = plen;
|
||||
|
||||
if (!gotname)
|
||||
strcpy(daemon->namebuff, "query");
|
||||
if (start->addr.sa.sa_family == AF_INET)
|
||||
@@ -337,18 +342,22 @@ 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, plen, addrp, flags, daemon->local_ttl);
|
||||
send_from(udpfd, daemon->options & OPT_NOWILD, (char *)header, plen, udpaddr, dst_addr, dst_iface);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static int process_reply(struct daemon *daemon, HEADER *header, time_t now,
|
||||
unsigned int query_crc, struct server *server, unsigned int n)
|
||||
static size_t process_reply(struct daemon *daemon, HEADER *header, time_t now,
|
||||
unsigned int query_crc, struct server *server, size_t n)
|
||||
{
|
||||
unsigned char *pheader, *sizep;
|
||||
unsigned int plen, munged = 0;
|
||||
|
||||
int munged = 0;
|
||||
size_t plen;
|
||||
|
||||
/* If upstream is advertising a larger UDP packet size
|
||||
than we allow, trim it so that we don't get overlarge
|
||||
requests for the client. */
|
||||
@@ -371,7 +380,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;
|
||||
}
|
||||
@@ -429,8 +438,12 @@ void reply_query(struct serverfd *sfd, struct daemon *daemon, time_t now)
|
||||
HEADER *header;
|
||||
union mysockaddr serveraddr;
|
||||
socklen_t addrlen = sizeof(serveraddr);
|
||||
int n = recvfrom(sfd->fd, daemon->packet, daemon->edns_pktsz, 0, &serveraddr.sa, &addrlen);
|
||||
|
||||
ssize_t n = recvfrom(sfd->fd, daemon->packet, daemon->edns_pktsz, 0, &serveraddr.sa, &addrlen);
|
||||
size_t nn;
|
||||
|
||||
/* packet buffer overwritten */
|
||||
daemon->srv_save = NULL;
|
||||
|
||||
/* Determine the address of the server replying so that we can mark that as good */
|
||||
serveraddr.sa.sa_family = sfd->source_addr.sa.sa_family;
|
||||
#ifdef HAVE_IPV6
|
||||
@@ -445,40 +458,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;
|
||||
size_t plen;
|
||||
|
||||
/* recreate query from reply */
|
||||
pheader = find_pseudoheader(header, (size_t)n, &plen, NULL);
|
||||
header->ancount = htons(0);
|
||||
header->nscount = htons(0);
|
||||
header->arcount = htons(0);
|
||||
if ((nn = resize_packet(header, (size_t)n, pheader, plen)))
|
||||
{
|
||||
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 ((nn = process_reply(daemon, header, now, forward->crc, server, (size_t)n)))
|
||||
{
|
||||
header->id = htons(forward->orig_id);
|
||||
header->ra = 1; /* recursion if available */
|
||||
send_from(forward->fd, daemon->options & OPT_NOWILD, daemon->packet, nn,
|
||||
&forward->source, &forward->dest, forward->iface);
|
||||
}
|
||||
forward->new_id = 0; /* cancel */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -490,7 +525,9 @@ void receive_query(struct listener *listen, struct daemon *daemon, time_t now)
|
||||
struct iname *tmp;
|
||||
struct all_addr dst_addr;
|
||||
struct in_addr netmask, dst_addr_4;
|
||||
int m, n, if_index = 0;
|
||||
size_t m;
|
||||
ssize_t n;
|
||||
int if_index = 0;
|
||||
struct iovec iov[1];
|
||||
struct msghdr msg;
|
||||
struct cmsghdr *cmptr;
|
||||
@@ -507,6 +544,9 @@ void receive_query(struct listener *listen, struct daemon *daemon, time_t now)
|
||||
#endif
|
||||
} control_u;
|
||||
|
||||
/* packet buffer overwritten */
|
||||
daemon->srv_save = NULL;
|
||||
|
||||
if (listen->family == AF_INET && (daemon->options & OPT_NOWILD))
|
||||
{
|
||||
dst_addr_4 = listen->iface->addr.in.sin_addr;
|
||||
@@ -632,7 +672,7 @@ void receive_query(struct listener *listen, struct daemon *daemon, time_t now)
|
||||
}
|
||||
}
|
||||
|
||||
if (extract_request(header, (unsigned int)n, daemon->namebuff, &type))
|
||||
if (extract_request(header, (size_t)n, daemon->namebuff, &type))
|
||||
{
|
||||
if (listen->family == AF_INET)
|
||||
log_query(F_QUERY | F_IPV4 | F_FORWARD, daemon->namebuff,
|
||||
@@ -644,18 +684,18 @@ void receive_query(struct listener *listen, struct daemon *daemon, time_t now)
|
||||
#endif
|
||||
}
|
||||
|
||||
m = answer_request (header, ((char *) header) + PACKETSZ, (unsigned int)n, daemon,
|
||||
m = answer_request (header, ((char *) header) + PACKETSZ, (size_t)n, daemon,
|
||||
dst_addr_4, netmask, now);
|
||||
if (m >= 1)
|
||||
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, (size_t)n, now, NULL);
|
||||
}
|
||||
|
||||
static int read_write(int fd, unsigned char *packet, int size, int rw)
|
||||
{
|
||||
int n, done;
|
||||
ssize_t n, done;
|
||||
|
||||
for (done = 0; done < size; done += n)
|
||||
{
|
||||
@@ -685,7 +725,8 @@ static int read_write(int fd, unsigned char *packet, int size, int rw)
|
||||
unsigned char *tcp_request(struct daemon *daemon, int confd, time_t now,
|
||||
struct in_addr local_addr, struct in_addr netmask)
|
||||
{
|
||||
int size = 0, m;
|
||||
int size = 0;
|
||||
size_t m;
|
||||
unsigned short qtype, gotname;
|
||||
unsigned char c1, c2;
|
||||
/* Max TCP packet + slop */
|
||||
@@ -870,7 +911,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;
|
||||
}
|
||||
|
||||
10
src/isc.c
10
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;
|
||||
}
|
||||
|
||||
137
src/lease.c
137
src/lease.c
@@ -1,4 +1,4 @@
|
||||
/* dnsmasq is Copyright (c) 2000-2005 Simon Kelley
|
||||
/* dnsmasq is Copyright (c) 2000-2006 Simon Kelley
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -15,9 +15,8 @@
|
||||
#include "dnsmasq.h"
|
||||
|
||||
static struct dhcp_lease *leases;
|
||||
static FILE *lease_file;
|
||||
static int dns_dirty;
|
||||
enum { no, yes, force } file_dirty;
|
||||
static enum { no, yes, force } file_dirty;
|
||||
static int leases_left;
|
||||
|
||||
void lease_init(struct daemon *daemon, time_t now)
|
||||
@@ -25,25 +24,25 @@ void lease_init(struct daemon *daemon, time_t now)
|
||||
unsigned int a0, a1, a2, a3;
|
||||
unsigned long ei;
|
||||
time_t expires;
|
||||
unsigned char hwaddr[ETHER_ADDR_LEN];
|
||||
unsigned char hwaddr[DHCP_CHADDR_MAX];
|
||||
struct in_addr addr;
|
||||
struct dhcp_lease *lease;
|
||||
int clid_len = 0;
|
||||
int clid_len = 0, hw_len, hw_type;
|
||||
int has_old = 0;
|
||||
|
||||
leases = NULL;
|
||||
leases_left = daemon->dhcp_max;
|
||||
|
||||
/* 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);
|
||||
if (!(daemon->lease_stream = fopen(daemon->lease_file, "a+")))
|
||||
die(_("cannot open or create leases file: %s"), NULL);
|
||||
|
||||
/* a+ mode lease pointer at end. */
|
||||
rewind(lease_file);
|
||||
rewind(daemon->lease_stream);
|
||||
|
||||
/* client-id max length is 255 which is 255*2 digits + 254 colons
|
||||
borrow DNS packet buffer which is always larger than 1000 bytes */
|
||||
while (fscanf(lease_file, "%lu %40s %d.%d.%d.%d %255s %764s",
|
||||
while (fscanf(daemon->lease_stream, "%lu %255s %d.%d.%d.%d %255s %764s",
|
||||
&ei, daemon->dhcp_buff2, &a0, &a1, &a2, &a3,
|
||||
daemon->dhcp_buff, daemon->packet) == 8)
|
||||
{
|
||||
@@ -64,48 +63,56 @@ void lease_init(struct daemon *daemon, time_t now)
|
||||
}
|
||||
#endif
|
||||
|
||||
parse_hex(daemon->dhcp_buff2, hwaddr, ETHER_ADDR_LEN, NULL);
|
||||
hw_len = parse_hex(daemon->dhcp_buff2, hwaddr, DHCP_CHADDR_MAX, NULL, &hw_type);
|
||||
/* For backwards compatibility, no explict MAC address type means ether. */
|
||||
if (hw_type == 0)
|
||||
hw_type = ARPHRD_ETHER;
|
||||
|
||||
addr.s_addr = htonl((a0<<24) + (a1<<16) + (a2<<8) + a3);
|
||||
|
||||
/* decode hex in place */
|
||||
if (strcmp(daemon->packet, "*") == 0)
|
||||
clid_len = 0;
|
||||
else
|
||||
clid_len = parse_hex(daemon->packet, (unsigned char *)daemon->packet, 255, NULL);
|
||||
clid_len = parse_hex(daemon->packet, (unsigned char *)daemon->packet, 255, NULL, NULL);
|
||||
|
||||
if (!(lease = lease_allocate(hwaddr, (unsigned char *)daemon->packet, clid_len, addr)))
|
||||
die ("too many stored leases", NULL);
|
||||
if (!(lease = lease_allocate(hwaddr, (unsigned char *)daemon->packet, hw_len, hw_type, clid_len, addr)))
|
||||
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;
|
||||
file_dirty = has_old ? yes: no;
|
||||
|
||||
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, lease->hwaddr_len, lease->hwaddr_type, 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)
|
||||
void lease_update_file(struct daemon *daemon, int always, time_t now)
|
||||
{
|
||||
struct dhcp_lease *lease;
|
||||
int i = always; /* avoid warning */
|
||||
unsigned long expires;
|
||||
char *mess;
|
||||
|
||||
#ifdef HAVE_BROKEN_RTC
|
||||
if (always || file_dirty == force)
|
||||
@@ -115,8 +122,10 @@ void lease_update_file(int always, time_t now)
|
||||
if (file_dirty != no)
|
||||
{
|
||||
#endif
|
||||
rewind(lease_file);
|
||||
ftruncate(fileno(lease_file), 0);
|
||||
errno = 0;
|
||||
rewind(daemon->lease_stream);
|
||||
if (errno != 0 || ftruncate(fileno(daemon->lease_stream), 0) != 0)
|
||||
goto write_err;
|
||||
|
||||
for (lease = leases; lease; lease = lease->next)
|
||||
{
|
||||
@@ -129,27 +138,51 @@ void lease_update_file(int always, time_t now)
|
||||
expires = now; /* eliminate warning */
|
||||
expires = (unsigned long)lease->expires;
|
||||
#endif
|
||||
fprintf(lease_file, "%lu %.2x:%.2x:%.2x:%.2x:%.2x:%.2x %s %s ",
|
||||
expires, lease->hwaddr[0], lease->hwaddr[1],
|
||||
lease->hwaddr[2], lease->hwaddr[3], lease->hwaddr[4],
|
||||
lease->hwaddr[5], inet_ntoa(lease->addr),
|
||||
lease->hostname && strlen(lease->hostname) != 0 ? lease->hostname : "*");
|
||||
if (fprintf(daemon->lease_stream, "%lu ", expires) < 0)
|
||||
goto write_err;
|
||||
if (lease->hwaddr_type != ARPHRD_ETHER &&
|
||||
fprintf(daemon->lease_stream, "%.2x-", lease->hwaddr_type) < 0)
|
||||
goto write_err;
|
||||
for (i = 0; i < lease->hwaddr_len - 1; i++)
|
||||
if (fprintf(daemon->lease_stream, "%.2x:", lease->hwaddr[i]) < 0)
|
||||
goto write_err;
|
||||
if (fprintf(daemon->lease_stream, "%.2x", lease->hwaddr[i]) < 0)
|
||||
goto write_err;
|
||||
if (fprintf(daemon->lease_stream, " %s %s ", inet_ntoa(lease->addr),
|
||||
lease->hostname && strlen(lease->hostname) != 0 ? lease->hostname : "*") < 0)
|
||||
goto write_err;
|
||||
|
||||
if (lease->clid && lease->clid_len != 0)
|
||||
{
|
||||
for (i = 0; i < lease->clid_len - 1; i++)
|
||||
fprintf(lease_file, "%.2x:", lease->clid[i]);
|
||||
fprintf(lease_file, "%.2x\n", lease->clid[i]);
|
||||
if (fprintf(daemon->lease_stream, "%.2x:", lease->clid[i]) < 0)
|
||||
goto write_err;
|
||||
if (fprintf(daemon->lease_stream, "%.2x\n", lease->clid[i]) < 0)
|
||||
goto write_err;
|
||||
}
|
||||
else
|
||||
fprintf(lease_file, "*\n");
|
||||
if (fprintf(daemon->lease_stream, "*\n") < 0)
|
||||
goto write_err;
|
||||
|
||||
}
|
||||
|
||||
fflush(lease_file);
|
||||
fsync(fileno(lease_file));
|
||||
if (fflush(daemon->lease_stream) != 0)
|
||||
goto write_err;
|
||||
if (fsync(fileno(daemon->lease_stream)) < 0)
|
||||
goto write_err;
|
||||
file_dirty = no;
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
write_err:
|
||||
mess = _("failed to write");
|
||||
#ifdef HAVE_BROKEN_RTC
|
||||
syslog(LOG_ERR, "%s %s: %m", mess, daemon->lease_file);
|
||||
#else
|
||||
syslog(LOG_ERR, "%s %s: %m (retry in %ds)", mess, daemon->lease_file, LEASE_RETRY);
|
||||
alarm(LEASE_RETRY);
|
||||
#endif
|
||||
}
|
||||
|
||||
void lease_update_dns(struct daemon *daemon)
|
||||
@@ -200,7 +233,7 @@ void lease_prune(struct dhcp_lease *target, time_t now)
|
||||
}
|
||||
|
||||
|
||||
struct dhcp_lease *lease_find_by_client(unsigned char *hwaddr,
|
||||
struct dhcp_lease *lease_find_by_client(unsigned char *hwaddr, int hw_len, int hw_type,
|
||||
unsigned char *clid, int clid_len)
|
||||
{
|
||||
struct dhcp_lease *lease;
|
||||
@@ -213,7 +246,9 @@ struct dhcp_lease *lease_find_by_client(unsigned char *hwaddr,
|
||||
|
||||
for (lease = leases; lease; lease = lease->next)
|
||||
if ((!lease->clid || !clid) &&
|
||||
memcmp(hwaddr, lease->hwaddr, ETHER_ADDR_LEN) == 0)
|
||||
lease->hwaddr_len == hw_len &&
|
||||
lease->hwaddr_type == hw_type &&
|
||||
memcmp(hwaddr, lease->hwaddr, hw_len) == 0)
|
||||
return lease;
|
||||
|
||||
return NULL;
|
||||
@@ -232,7 +267,7 @@ struct dhcp_lease *lease_find_by_addr(struct in_addr addr)
|
||||
|
||||
|
||||
struct dhcp_lease *lease_allocate(unsigned char *hwaddr, unsigned char *clid,
|
||||
int clid_len, struct in_addr addr)
|
||||
int hw_len, int hw_type, int clid_len, struct in_addr addr)
|
||||
{
|
||||
struct dhcp_lease *lease;
|
||||
if (!leases_left || !(lease = malloc(sizeof(struct dhcp_lease))))
|
||||
@@ -241,10 +276,10 @@ struct dhcp_lease *lease_allocate(unsigned char *hwaddr, unsigned char *clid,
|
||||
lease->clid = NULL;
|
||||
lease->hostname = lease->fqdn = NULL;
|
||||
lease->addr = addr;
|
||||
memset(lease->hwaddr, 0, ETHER_ADDR_LEN);
|
||||
memset(lease->hwaddr, 0, DHCP_CHADDR_MAX);
|
||||
lease->expires = 1;
|
||||
|
||||
if (!lease_set_hwaddr(lease, hwaddr, clid, clid_len))
|
||||
if (!lease_set_hwaddr(lease, hwaddr, clid, hw_len, hw_type, clid_len))
|
||||
{
|
||||
free(lease);
|
||||
return NULL;
|
||||
@@ -270,12 +305,16 @@ void lease_set_expires(struct dhcp_lease *lease, time_t exp)
|
||||
}
|
||||
|
||||
int lease_set_hwaddr(struct dhcp_lease *lease, unsigned char *hwaddr,
|
||||
unsigned char *clid, int clid_len)
|
||||
unsigned char *clid, int hw_len, int hw_type, int clid_len)
|
||||
{
|
||||
if (memcmp(lease->hwaddr, hwaddr, ETHER_ADDR_LEN) != 0)
|
||||
if (hw_len != lease->hwaddr_len ||
|
||||
hw_type != lease->hwaddr_type ||
|
||||
memcmp(lease->hwaddr, hwaddr, hw_len) != 0)
|
||||
{
|
||||
file_dirty = force;
|
||||
memcpy(lease->hwaddr, hwaddr, ETHER_ADDR_LEN);
|
||||
memcpy(lease->hwaddr, hwaddr, hw_len);
|
||||
lease->hwaddr_len = hw_len;
|
||||
lease->hwaddr_type = hw_type;
|
||||
}
|
||||
|
||||
/* only update clid when one is available, stops packets
|
||||
@@ -304,26 +343,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 +376,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 +397,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;
|
||||
|
||||
118
src/netlink.c
118
src/netlink.c
@@ -1,4 +1,4 @@
|
||||
/* dnsmasq is Copyright (c) 2000-2005 Simon Kelley
|
||||
/* dnsmasq is Copyright (c) 2000-2006 Simon Kelley
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -10,8 +10,6 @@
|
||||
GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
/* Author's email: simon@thekelleys.org.uk */
|
||||
|
||||
#include "dnsmasq.h"
|
||||
|
||||
#ifdef HAVE_RTNETLINK
|
||||
@@ -20,35 +18,74 @@
|
||||
#include <linux/netlink.h>
|
||||
#include <linux/rtnetlink.h>
|
||||
|
||||
int netlink_init(void)
|
||||
static struct iovec iov[1];
|
||||
|
||||
void netlink_init(struct daemon *daemon)
|
||||
{
|
||||
struct sockaddr_nl addr;
|
||||
int sock = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
|
||||
daemon->netlinkfd = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
|
||||
|
||||
if (sock < 0)
|
||||
return -1; /* no kernel support */
|
||||
if (daemon->netlinkfd < 0)
|
||||
return; /* no kernel support */
|
||||
|
||||
addr.nl_family = AF_NETLINK;
|
||||
addr.nl_pad = 0;
|
||||
addr.nl_pid = getpid();
|
||||
addr.nl_groups = 0;
|
||||
#ifdef HAVE_IPV6
|
||||
addr.nl_groups = RTMGRP_IPV4_IFADDR | RTMGRP_IPV6_IFADDR | RTMGRP_IPV4_ROUTE | RTMGRP_IPV6_ROUTE;
|
||||
#else
|
||||
addr.nl_groups = RTMGRP_IPV4_IFADDR | RTMGRP_IPV4_ROUTE;
|
||||
#endif
|
||||
|
||||
if (bind(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0)
|
||||
die("cannot bind netlink socket: %s", NULL);
|
||||
|
||||
return sock;
|
||||
if (bind(daemon->netlinkfd, (struct sockaddr *)&addr, sizeof(addr)) < 0)
|
||||
die(_("cannot bind netlink socket: %s"), NULL);
|
||||
|
||||
iov[0].iov_len = 200;
|
||||
iov[0].iov_base = safe_malloc(iov[0].iov_len);
|
||||
}
|
||||
|
||||
static ssize_t netlink_recv(struct daemon *daemon)
|
||||
{
|
||||
struct msghdr msg;
|
||||
ssize_t rc;
|
||||
|
||||
/* We borrow the DNS packet buffer here. (The DHCP one already has a packet in it)
|
||||
Since it's used only within this routine, that's fine, just remember
|
||||
that calling icmp_echo() will trash it */
|
||||
msg.msg_control = NULL;
|
||||
msg.msg_controllen = 0;
|
||||
msg.msg_flags = 0;
|
||||
msg.msg_name = NULL;
|
||||
msg.msg_namelen = 0;
|
||||
msg.msg_iov = iov;
|
||||
msg.msg_iovlen = 1;
|
||||
|
||||
retry:
|
||||
while ((rc = recvmsg(daemon->netlinkfd, &msg, MSG_PEEK)) == -1 && retry_send());
|
||||
|
||||
if (rc == -1)
|
||||
return -1;
|
||||
|
||||
if (msg.msg_flags & MSG_TRUNC)
|
||||
{
|
||||
size_t newsz = iov[0].iov_len + 100;
|
||||
void *new = realloc(iov[0].iov_base, newsz);
|
||||
if (!new)
|
||||
return -1;
|
||||
iov[0].iov_len = newsz;
|
||||
iov[0].iov_base = new;
|
||||
goto retry;
|
||||
}
|
||||
|
||||
while ((rc = recvmsg(daemon->netlinkfd, &msg, 0)) == -1 && retry_send());
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
int netlink_process(struct daemon *daemon, int index, struct in_addr relay,
|
||||
struct in_addr primary, struct dhcp_context **retp)
|
||||
{
|
||||
struct sockaddr_nl addr;
|
||||
struct nlmsghdr *h;
|
||||
int len, found_primary = 0;
|
||||
int found_primary = 0;
|
||||
ssize_t len;
|
||||
struct dhcp_context *ret = NULL;
|
||||
static unsigned int seq = 0;
|
||||
|
||||
@@ -88,17 +125,11 @@ int netlink_process(struct daemon *daemon, int index, struct in_addr relay,
|
||||
}
|
||||
|
||||
get_next:
|
||||
while((len = recvfrom(daemon->netlinkfd, daemon->packet, daemon->packet_buff_sz,
|
||||
MSG_WAITALL, NULL, 0)) == -1 && retry_send());
|
||||
|
||||
if (len == -1)
|
||||
if ((len = netlink_recv(daemon)) == -1)
|
||||
return 0;
|
||||
|
||||
h = (struct nlmsghdr *)daemon->packet;
|
||||
|
||||
while (NLMSG_OK(h, (unsigned int)len))
|
||||
for (h = (struct nlmsghdr *)iov[0].iov_base; NLMSG_OK(h, (unsigned int)len); h = NLMSG_NEXT(h, len))
|
||||
{
|
||||
|
||||
if (h->nlmsg_seq != seq)
|
||||
goto get_next;
|
||||
|
||||
@@ -110,8 +141,7 @@ int netlink_process(struct daemon *daemon, int index, struct in_addr relay,
|
||||
|
||||
if (h->nlmsg_type == RTM_NEWADDR)
|
||||
{
|
||||
struct ifaddrmsg *ifa = NLMSG_DATA(h);
|
||||
|
||||
struct ifaddrmsg *ifa = NLMSG_DATA(h);
|
||||
if (ifa->ifa_index == index && ifa->ifa_family == AF_INET)
|
||||
{
|
||||
struct rtattr *rta = IFA_RTA(ifa);
|
||||
@@ -132,7 +162,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)
|
||||
@@ -140,15 +170,43 @@ int netlink_process(struct daemon *daemon, int index, struct in_addr relay,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
h = NLMSG_NEXT(h, len);
|
||||
}
|
||||
|
||||
*retp = ret;
|
||||
|
||||
return found_primary;
|
||||
}
|
||||
|
||||
|
||||
/* We arrange to receive netlink multicast messages whenever the network config changes.
|
||||
If this happens and we still have a DNS packet in the buffer, we re-send it.
|
||||
This helps on DoD links, where frequently the packet which triggers dialling is
|
||||
a DNS query, which then gets lost. By re-sending, we can avoid the lookup
|
||||
failing. */
|
||||
void netlink_multicast(struct daemon *daemon)
|
||||
{
|
||||
ssize_t len;
|
||||
struct nlmsghdr *h;
|
||||
|
||||
if ((len = netlink_recv(daemon)) == -1)
|
||||
return;
|
||||
|
||||
if (!daemon->srv_save)
|
||||
return;
|
||||
|
||||
for (h = (struct nlmsghdr *)iov[0].iov_base; NLMSG_OK(h, (unsigned int)len); h = NLMSG_NEXT(h, len))
|
||||
{
|
||||
if (h->nlmsg_type == NLMSG_DONE || h->nlmsg_type == NLMSG_ERROR)
|
||||
break;
|
||||
|
||||
if (h->nlmsg_type == RTM_NEWADDR || h->nlmsg_type == RTM_NEWROUTE)
|
||||
{
|
||||
while(sendto(daemon->srv_save->sfd->fd, daemon->packet, daemon->packet_len, 0,
|
||||
&daemon->srv_save->addr.sa, sa_len(&daemon->srv_save->addr)) == -1 && retry_send());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -503,7 +503,7 @@ void check_servers(struct daemon *daemon)
|
||||
/* forward table rules reference servers, so have to blow them away */
|
||||
forward_init(0);
|
||||
|
||||
daemon->last_server = NULL;
|
||||
daemon->last_server = daemon->srv_save = NULL;
|
||||
|
||||
for (new = daemon->servers; new; new = tmp)
|
||||
{
|
||||
@@ -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;
|
||||
|
||||
355
src/option.c
355
src/option.c
@@ -1,4 +1,4 @@
|
||||
/* dnsmasq is Copyright (c) 2000 - 2005 Simon Kelley
|
||||
/* dnsmasq is Copyright (c) 2000 - 2006 Simon Kelley
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -21,7 +21,7 @@ struct myoption {
|
||||
int val;
|
||||
};
|
||||
|
||||
#define OPTSTRING "31yZDNLERKzowefnbvhdkqr:m:p:c:l:s:i:t:u:g:a:x:S:C:A:T:H:Q:I:B:F:G:O:M:X:V:U:j:P:J:W:Y:2:"
|
||||
#define OPTSTRING "31yZDNLERKzowefnbvhdkqr:m:p:c:l:s:i:t:u:g:a:x:S:C:A:T:H:Q:I:B:F:G:O:M:X:V:U:j:P:J:W:Y:2:4:"
|
||||
|
||||
static const struct myoption opts[] = {
|
||||
{"version", 0, 0, 'v'},
|
||||
@@ -82,6 +82,7 @@ static const struct myoption opts[] = {
|
||||
{"txt-record", 1, 0, 'Y'},
|
||||
{"enable-dbus", 0, 0, '1'},
|
||||
{"bootp-dynamic", 0, 0, '3'},
|
||||
{"dhcp-mac", 1, 0, '4'},
|
||||
{0, 0, 0, 0}
|
||||
};
|
||||
|
||||
@@ -116,69 +117,70 @@ 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 },
|
||||
{ "-4, --dhcp-mac=<id>,<mac address>", gettext_noop("Map MAC address (with wildcards) to option set."), 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 +189,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 +293,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 +393,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 +422,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 +439,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 +488,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 +496,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 +513,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 +573,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 +582,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 +600,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 +802,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 +813,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");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -925,9 +951,10 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
|
||||
new->broadcast.s_addr = 0;
|
||||
new->router.s_addr = 0;
|
||||
new->netid.net = NULL;
|
||||
new->filter = NULL;
|
||||
new->flags = 0;
|
||||
|
||||
problem = "bad dhcp-range";
|
||||
problem = _("bad dhcp-range");
|
||||
|
||||
if (!arg)
|
||||
{
|
||||
@@ -935,26 +962,40 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
|
||||
break;
|
||||
}
|
||||
|
||||
for (cp = arg; *cp; cp++)
|
||||
if (!(*cp == ' ' || *cp == '.' || (*cp >='0' && *cp <= '9')))
|
||||
break;
|
||||
|
||||
if (*cp != ',' && (comma = strchr(arg, ',')))
|
||||
while(1)
|
||||
{
|
||||
*comma = 0;
|
||||
if (strstr(arg, "net:") == arg)
|
||||
for (cp = arg; *cp; cp++)
|
||||
if (!(*cp == ' ' || *cp == '.' || (*cp >='0' && *cp <= '9')))
|
||||
break;
|
||||
|
||||
if (*cp != ',' && (comma = strchr(arg, ',')))
|
||||
{
|
||||
new->netid.net = safe_string_alloc(arg+4);
|
||||
new->netid.next = NULL;
|
||||
new->flags |= CONTEXT_FILTER;
|
||||
*comma = 0;
|
||||
if (strstr(arg, "net:") == arg)
|
||||
{
|
||||
struct dhcp_netid *tt = safe_malloc(sizeof (struct dhcp_netid));
|
||||
tt->net = safe_string_alloc(arg+4);
|
||||
tt->next = new->filter;
|
||||
new->filter = tt;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (new->netid.net)
|
||||
{
|
||||
option = '?';
|
||||
problem = _("only one netid tag allowed");
|
||||
}
|
||||
else
|
||||
new->netid.net = safe_string_alloc(arg);
|
||||
}
|
||||
arg = comma + 1;
|
||||
}
|
||||
else
|
||||
new->netid.net = safe_string_alloc(arg);
|
||||
a[0] = comma + 1;
|
||||
{
|
||||
a[0] = arg;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
a[0] = arg;
|
||||
|
||||
|
||||
for (k = 1; k < 5; k++)
|
||||
{
|
||||
@@ -963,7 +1004,7 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
|
||||
*(a[k]++) = 0;
|
||||
}
|
||||
|
||||
if ((k < 2) || ((new->start.s_addr = inet_addr(a[0])) == (in_addr_t)-1))
|
||||
if (option == '?' || (k < 2) || ((new->start.s_addr = inet_addr(a[0])) == (in_addr_t)-1))
|
||||
option = '?';
|
||||
else if (strcmp(a[1], "static") == 0)
|
||||
{
|
||||
@@ -987,7 +1028,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 = '?';
|
||||
}
|
||||
}
|
||||
@@ -1086,7 +1127,7 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
|
||||
int len;
|
||||
arg += 3; /* dump id: */
|
||||
if (strchr(arg, ':'))
|
||||
len = parse_hex(arg, (unsigned char *)arg, -1, NULL);
|
||||
len = parse_hex(arg, (unsigned char *)arg, -1, NULL, NULL);
|
||||
else
|
||||
len = (int) strlen(arg);
|
||||
|
||||
@@ -1101,10 +1142,11 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
|
||||
new->flags |= CONFIG_NETID;
|
||||
new->netid.net = safe_string_alloc(arg+4);
|
||||
}
|
||||
else if (parse_hex(a[j], new->hwaddr, 6, &new->wildcard_mask) == 6)
|
||||
else
|
||||
{
|
||||
new->hwaddr_len = parse_hex(a[j], new->hwaddr, DHCP_CHADDR_MAX, &new->wildcard_mask, &new->hwaddr_type);
|
||||
new->flags |= CONFIG_HWADDR;
|
||||
else
|
||||
option = '?';
|
||||
}
|
||||
}
|
||||
else if (strchr(a[j], '.') && (in.s_addr = inet_addr(a[j])) != (in_addr_t)-1)
|
||||
{
|
||||
@@ -1174,7 +1216,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)
|
||||
@@ -1199,7 +1241,7 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
|
||||
int addrs, digs, is_addr, is_hex, is_dec;
|
||||
|
||||
new->len = 0;
|
||||
new->is_addr = 0;
|
||||
new->flags = 0;
|
||||
new->netid = NULL;
|
||||
new->val = NULL;
|
||||
new->vendor_class = NULL;
|
||||
@@ -1234,7 +1276,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 +1294,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 */
|
||||
@@ -1311,7 +1353,7 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
|
||||
digs++;
|
||||
is_dec = is_addr = 0;
|
||||
}
|
||||
else if (*cp == '.')
|
||||
else if (*cp == '.' || *cp == '/')
|
||||
is_dec = is_hex = 0;
|
||||
else if (!((*cp >='0' && *cp <= '9') || *cp == '-'))
|
||||
{
|
||||
@@ -1333,7 +1375,7 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
|
||||
{
|
||||
new->len = digs;
|
||||
new->val = safe_malloc(new->len);
|
||||
parse_hex(comma, new->val, digs, NULL);
|
||||
parse_hex(comma, new->val, digs, NULL, NULL);
|
||||
}
|
||||
else if (is_dec)
|
||||
{
|
||||
@@ -1372,19 +1414,42 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
|
||||
else if (is_addr)
|
||||
{
|
||||
struct in_addr in;
|
||||
unsigned char *op;
|
||||
new->len = INADDRSZ * addrs;
|
||||
new->val = op = safe_malloc(new->len);
|
||||
new->is_addr = 1;
|
||||
unsigned char *op;
|
||||
char *slash;
|
||||
/* max length of address/subnet descriptor is five bytes */
|
||||
new->val = op = safe_malloc(5 * addrs);
|
||||
if (!new->vendor_class)
|
||||
new->flags |= DHOPT_ADDR;
|
||||
while (addrs--)
|
||||
{
|
||||
cp = comma;
|
||||
if ((comma = strchr(cp, ',')))
|
||||
*comma++ = 0;
|
||||
if ((slash = strchr(cp, '/')))
|
||||
*slash++ = 0;
|
||||
in.s_addr = inet_addr(cp);
|
||||
memcpy(op, &in, INADDRSZ);
|
||||
op += INADDRSZ;
|
||||
if (!slash)
|
||||
{
|
||||
memcpy(op, &in, INADDRSZ);
|
||||
op += INADDRSZ;
|
||||
}
|
||||
else
|
||||
{
|
||||
unsigned char *p = (unsigned char *)∈
|
||||
int netsize = atoi(slash);
|
||||
*op++ = netsize;
|
||||
if (netsize > 0)
|
||||
*op++ = *p++;
|
||||
if (netsize > 8)
|
||||
*op++ = *p++;
|
||||
if (netsize > 16)
|
||||
*op++ = *p++;
|
||||
if (netsize > 24)
|
||||
*op++ = *p++;
|
||||
new->flags &= ~DHOPT_ADDR; /* cannot re-write descriptor format */
|
||||
}
|
||||
}
|
||||
new->len = op - new->val;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1392,13 +1457,14 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
|
||||
new->len = strlen(comma);
|
||||
/* keep terminating zero on string */
|
||||
new->val = (unsigned char *)safe_string_alloc(comma);
|
||||
new->flags |= DHOPT_STRING;
|
||||
}
|
||||
}
|
||||
|
||||
if (new->len > 255)
|
||||
{
|
||||
option = '?';
|
||||
problem = "dhcp-option too long";
|
||||
problem = _("dhcp-option too long");
|
||||
}
|
||||
|
||||
if (option == '?')
|
||||
@@ -1484,7 +1550,24 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
case '4':
|
||||
{
|
||||
if (!(comma = safe_strchr(arg, ',')))
|
||||
option = '?';
|
||||
else
|
||||
{
|
||||
struct dhcp_mac *new = safe_malloc(sizeof(struct dhcp_mac));
|
||||
*comma = 0;
|
||||
new->netid.net = safe_string_alloc(arg);
|
||||
unhide_metas(comma+1);
|
||||
new->hwaddr_len = parse_hex(comma+1, new->hwaddr, DHCP_CHADDR_MAX, &new->mask, &new->hwaddr_type);
|
||||
new->next = daemon->dhcp_macs;
|
||||
daemon->dhcp_macs = new;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 'U':
|
||||
case 'j':
|
||||
{
|
||||
@@ -1578,7 +1661,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 +1693,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 +1732,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 +1745,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 +1757,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 +1768,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 +1779,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 +1804,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 +1850,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 +1879,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 +1907,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)
|
||||
|
||||
@@ -17,7 +17,7 @@ static int add_resource_record(HEADER *header, char *limit, int *truncp,
|
||||
unsigned long ttl, unsigned int *offset, unsigned short type,
|
||||
unsigned short class, char *format, ...);
|
||||
|
||||
static int extract_name(HEADER *header, unsigned int plen, unsigned char **pp,
|
||||
static int extract_name(HEADER *header, size_t plen, unsigned char **pp,
|
||||
char *name, int isExtract)
|
||||
{
|
||||
unsigned char *cp = (unsigned char *)name, *p = *pp, *p1 = NULL;
|
||||
@@ -38,7 +38,7 @@ static int extract_name(HEADER *header, unsigned int plen, unsigned char **pp,
|
||||
/* get offset */
|
||||
l = (l&0x3f) << 8;
|
||||
l |= *p++;
|
||||
if (l >= (unsigned int)plen)
|
||||
if (l >= plen)
|
||||
return 0;
|
||||
|
||||
if (!p1) /* first jump, save location to go back to */
|
||||
@@ -253,7 +253,7 @@ static int in_arpa_name_2_addr(char *namein, struct all_addr *addrp)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static unsigned char *skip_name(unsigned char *ansp, HEADER *header, unsigned int plen)
|
||||
static unsigned char *skip_name(unsigned char *ansp, HEADER *header, size_t plen)
|
||||
{
|
||||
while(1)
|
||||
{
|
||||
@@ -298,7 +298,7 @@ static unsigned char *skip_name(unsigned char *ansp, HEADER *header, unsigned in
|
||||
return ansp;
|
||||
}
|
||||
|
||||
static unsigned char *skip_questions(HEADER *header, unsigned int plen)
|
||||
static unsigned char *skip_questions(HEADER *header, size_t plen)
|
||||
{
|
||||
int q, qdcount = ntohs(header->qdcount);
|
||||
unsigned char *ansp = (unsigned char *)(header+1);
|
||||
@@ -315,7 +315,7 @@ static unsigned char *skip_questions(HEADER *header, unsigned int plen)
|
||||
return ansp;
|
||||
}
|
||||
|
||||
static unsigned char *skip_section(unsigned char *ansp, int count, HEADER *header, unsigned int plen)
|
||||
static unsigned char *skip_section(unsigned char *ansp, int count, HEADER *header, size_t plen)
|
||||
{
|
||||
int i, rdlen;
|
||||
|
||||
@@ -338,7 +338,7 @@ static unsigned char *skip_section(unsigned char *ansp, int count, HEADER *heade
|
||||
might be poisoning attacks. Note that we decode the name rather
|
||||
than CRC the raw bytes, since replies might be compressed differently.
|
||||
We ignore case in the names for the same reason. */
|
||||
unsigned int questions_crc(HEADER *header, unsigned int plen, char *name)
|
||||
unsigned int questions_crc(HEADER *header, size_t plen, char *name)
|
||||
{
|
||||
int q;
|
||||
unsigned int crc = 0xffffffff;
|
||||
@@ -380,7 +380,7 @@ unsigned int questions_crc(HEADER *header, unsigned int plen, char *name)
|
||||
}
|
||||
|
||||
|
||||
int resize_packet(HEADER *header, unsigned int plen, unsigned char *pheader, unsigned int hlen)
|
||||
size_t resize_packet(HEADER *header, size_t plen, unsigned char *pheader, size_t hlen)
|
||||
{
|
||||
unsigned char *ansp = skip_questions(header, plen);
|
||||
|
||||
@@ -403,7 +403,7 @@ int resize_packet(HEADER *header, unsigned int plen, unsigned char *pheader, uns
|
||||
return ansp - (unsigned char *)header;
|
||||
}
|
||||
|
||||
unsigned char *find_pseudoheader(HEADER *header, unsigned int plen, unsigned int *len, unsigned char **p)
|
||||
unsigned char *find_pseudoheader(HEADER *header, size_t plen, size_t *len, unsigned char **p)
|
||||
{
|
||||
/* See if packet has an RFC2671 pseudoheader, and if so return a pointer to it.
|
||||
also return length of pseudoheader in *len and pointer to the UDP size in *p */
|
||||
@@ -428,7 +428,7 @@ unsigned char *find_pseudoheader(HEADER *header, unsigned int plen, unsigned int
|
||||
save = ansp;
|
||||
ansp += 6; /* class, TTL */
|
||||
GETSHORT(rdlen, ansp);
|
||||
if ((unsigned int)(ansp + rdlen - (unsigned char *)header) > plen)
|
||||
if ((size_t)(ansp + rdlen - (unsigned char *)header) > plen)
|
||||
return NULL;
|
||||
ansp += rdlen;
|
||||
if (type == T_OPT)
|
||||
@@ -470,7 +470,7 @@ static void dns_doctor(HEADER *header, struct doctor *doctor, struct in_addr *ad
|
||||
}
|
||||
}
|
||||
|
||||
static int find_soa(HEADER *header, struct doctor *doctor, unsigned int qlen)
|
||||
static int find_soa(HEADER *header, struct doctor *doctor, size_t qlen)
|
||||
{
|
||||
unsigned char *p;
|
||||
int qtype, qclass, rdlen;
|
||||
@@ -513,7 +513,7 @@ static int find_soa(HEADER *header, struct doctor *doctor, unsigned int qlen)
|
||||
else
|
||||
p += rdlen;
|
||||
|
||||
if ((unsigned int)(p - (unsigned char *)header) > qlen)
|
||||
if ((size_t)(p - (unsigned char *)header) > qlen)
|
||||
return 0; /* bad packet */
|
||||
}
|
||||
|
||||
@@ -533,7 +533,7 @@ static int find_soa(HEADER *header, struct doctor *doctor, unsigned int qlen)
|
||||
|
||||
p += rdlen;
|
||||
|
||||
if ((unsigned int)(p - (unsigned char *)header) > qlen)
|
||||
if ((size_t)(p - (unsigned char *)header) > qlen)
|
||||
return 0; /* bad packet */
|
||||
}
|
||||
|
||||
@@ -543,7 +543,7 @@ static int find_soa(HEADER *header, struct doctor *doctor, unsigned int qlen)
|
||||
/* Note that the following code can create CNAME chains that don't point to a real record,
|
||||
either because of lack of memory, or lack of SOA records. These are treated by the cache code as
|
||||
expired and cleaned out that way. */
|
||||
void extract_addresses(HEADER *header, unsigned int qlen, char *name, time_t now, struct daemon *daemon)
|
||||
void extract_addresses(HEADER *header, size_t qlen, char *name, time_t now, struct daemon *daemon)
|
||||
{
|
||||
unsigned char *p, *p1, *endrr;
|
||||
int i, j, qtype, qclass, aqtype, aqclass, ardlen, res, searched_soa = 0;
|
||||
@@ -625,7 +625,7 @@ void extract_addresses(HEADER *header, unsigned int qlen, char *name, time_t now
|
||||
}
|
||||
|
||||
p1 = endrr;
|
||||
if ((unsigned int)(p1 - (unsigned char *)header) > qlen)
|
||||
if ((size_t)(p1 - (unsigned char *)header) > qlen)
|
||||
return; /* bad packet */
|
||||
}
|
||||
}
|
||||
@@ -709,7 +709,7 @@ void extract_addresses(HEADER *header, unsigned int qlen, char *name, time_t now
|
||||
}
|
||||
|
||||
p1 = endrr;
|
||||
if ((unsigned int)(p1 - (unsigned char *)header) > qlen)
|
||||
if ((size_t)(p1 - (unsigned char *)header) > qlen)
|
||||
return; /* bad packet */
|
||||
}
|
||||
}
|
||||
@@ -742,7 +742,7 @@ void extract_addresses(HEADER *header, unsigned int qlen, char *name, time_t now
|
||||
/* If the packet holds exactly one query
|
||||
return 1 and leave the name from the query in name. */
|
||||
|
||||
unsigned short extract_request(HEADER *header,unsigned int qlen, char *name, unsigned short *typep)
|
||||
unsigned short extract_request(HEADER *header, size_t qlen, char *name, unsigned short *typep)
|
||||
{
|
||||
unsigned char *p = (unsigned char *)(header+1);
|
||||
int qtype, qclass;
|
||||
@@ -776,7 +776,7 @@ unsigned short extract_request(HEADER *header,unsigned int qlen, char *name, uns
|
||||
}
|
||||
|
||||
|
||||
int setup_reply(HEADER *header, unsigned int qlen,
|
||||
size_t setup_reply(HEADER *header, size_t qlen,
|
||||
struct all_addr *addrp, unsigned short flags, unsigned long ttl)
|
||||
{
|
||||
unsigned char *p = skip_questions(header, qlen);
|
||||
@@ -841,7 +841,7 @@ int check_for_local_domain(char *name, time_t now, struct daemon *daemon)
|
||||
/* Is the packet a reply with the answer address equal to addr?
|
||||
If so mung is into an NXDOMAIN reply and also put that information
|
||||
in the cache. */
|
||||
int check_for_bogus_wildcard(HEADER *header, unsigned int qlen, char *name,
|
||||
int check_for_bogus_wildcard(HEADER *header, size_t qlen, char *name,
|
||||
struct bogus_addr *baddr, time_t now)
|
||||
{
|
||||
unsigned char *p;
|
||||
@@ -966,8 +966,8 @@ static int add_resource_record(HEADER *header, char *limit, int *truncp, unsigne
|
||||
}
|
||||
|
||||
/* return zero if we can't answer from cache, or packet size if we can */
|
||||
int answer_request(HEADER *header, char *limit, unsigned int qlen, struct daemon *daemon,
|
||||
struct in_addr local_addr, struct in_addr local_netmask, time_t now)
|
||||
size_t answer_request(HEADER *header, char *limit, size_t qlen, struct daemon *daemon,
|
||||
struct in_addr local_addr, struct in_addr local_netmask, time_t now)
|
||||
{
|
||||
char *name = daemon->namebuff;
|
||||
unsigned char *p, *ansp, *pheader;
|
||||
@@ -1049,11 +1049,15 @@ int answer_request(HEADER *header, char *limit, unsigned int qlen, struct daemon
|
||||
if (t->class == qclass && hostname_isequal(name, t->name))
|
||||
{
|
||||
ans = 1;
|
||||
log_query(F_CNAME | F_FORWARD | F_CONFIG | F_NXDOMAIN, name, NULL, 0, NULL, 0);
|
||||
if (!dryrun &&
|
||||
add_resource_record(header, limit, &trunc, nameoffset, &ansp, 0, NULL,
|
||||
T_TXT, t->class, "t", t->len, t->txt))
|
||||
anscount++;
|
||||
if (!dryrun)
|
||||
{
|
||||
log_query(F_CNAME | F_FORWARD | F_CONFIG | F_NXDOMAIN, name, NULL, 0, NULL, 0);
|
||||
if (add_resource_record(header, limit, &trunc, nameoffset, &ansp,
|
||||
daemon->local_ttl, NULL,
|
||||
T_TXT, t->class, "t", t->len, t->txt))
|
||||
anscount++;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
400
src/rfc2131.c
400
src/rfc2131.c
@@ -1,4 +1,4 @@
|
||||
/* dnsmasq is Copyright (c) 2000-2005 Simon Kelley
|
||||
/* dnsmasq is Copyright (c) 2000-2006 Simon Kelley
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -60,15 +60,16 @@
|
||||
|
||||
static unsigned char *option_put(unsigned char *p, unsigned char *end, int opt, int len, unsigned int val);
|
||||
static unsigned char *option_end(unsigned char *p, unsigned char *end, struct dhcp_packet *start);
|
||||
static unsigned char *option_put_string(unsigned char *p, unsigned char *end, int opt, char *string);
|
||||
static unsigned char *option_put_string(unsigned char *p, unsigned char *end,
|
||||
int opt, char *string, int null_term);
|
||||
static void bootp_option_put(struct dhcp_packet *mess,
|
||||
struct dhcp_boot *boot_opts, struct dhcp_netid *netids);
|
||||
static int option_len(unsigned char *opt);
|
||||
static void *option_ptr(unsigned char *opt);
|
||||
static struct in_addr option_addr(unsigned char *opt);
|
||||
static unsigned int option_uint(unsigned char *opt, int size);
|
||||
static void log_packet(char *type, struct in_addr *addr, unsigned char *hwaddr, char *interface, char *string);
|
||||
static unsigned char *option_find(struct dhcp_packet *mess, int size, int opt_type, int minsize);
|
||||
static void log_packet(char *type, struct in_addr *addr, unsigned char *hwaddr, int hw_len, char *interface, char *string);
|
||||
static unsigned char *option_find(struct dhcp_packet *mess, size_t size, int opt_type, int minsize);
|
||||
static unsigned char *do_req_options(struct dhcp_context *context,
|
||||
unsigned char *p, unsigned char *end,
|
||||
unsigned char *req_options,
|
||||
@@ -76,33 +77,39 @@ static unsigned char *do_req_options(struct dhcp_context *context,
|
||||
char *hostname,
|
||||
struct dhcp_netid *netid,
|
||||
struct in_addr subnet_addr,
|
||||
unsigned char fqdn_flags);
|
||||
unsigned char fqdn_flags,
|
||||
int null_term);
|
||||
|
||||
int dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_name, unsigned int sz, time_t now)
|
||||
size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_name,
|
||||
size_t sz, time_t now, int unicast_dest)
|
||||
{
|
||||
unsigned char *opt, *clid = NULL;
|
||||
struct dhcp_lease *ltmp, *lease = NULL;
|
||||
struct dhcp_vendor *vendor;
|
||||
struct dhcp_mac *mac;
|
||||
struct dhcp_netid_list *id_list;
|
||||
int clid_len = 0, ignore = 0;
|
||||
struct dhcp_packet *mess = &daemon->dhcp_packet->data;
|
||||
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, borken_opt = 0;
|
||||
unsigned char *req_options = NULL;
|
||||
char *message = NULL;
|
||||
unsigned int time;
|
||||
struct dhcp_config *config;
|
||||
struct dhcp_netid *netid = NULL;
|
||||
struct in_addr subnet_addr;
|
||||
struct in_addr subnet_addr, fallback;
|
||||
unsigned short fuzz = 0;
|
||||
unsigned int mess_type = 0;
|
||||
u8 *chaddr;
|
||||
unsigned char fqdn_flags = 0;
|
||||
subnet_addr.s_addr = 0;
|
||||
|
||||
if (mess->op != BOOTREQUEST)
|
||||
return 0;
|
||||
|
||||
if (mess->hlen > DHCP_CHADDR_MAX)
|
||||
return 0;
|
||||
|
||||
/* check for DHCP rather than BOOTP */
|
||||
if ((opt = option_find(mess, sz, OPTION_MESSAGE_TYPE, 1)))
|
||||
@@ -130,8 +137,8 @@ int dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_
|
||||
}
|
||||
|
||||
/* do we have a lease in store? */
|
||||
if (mess->htype != 0)
|
||||
lease = lease_find_by_client(mess->chaddr, clid, clid_len);
|
||||
if (mess->htype != 0 && mess->hlen != 0)
|
||||
lease = lease_find_by_client(mess->chaddr, mess->hlen, mess->htype, clid, clid_len);
|
||||
|
||||
/* If this request is missing a clid, but we've seen one before,
|
||||
use it again for option matching etc. */
|
||||
@@ -142,38 +149,31 @@ int dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_
|
||||
}
|
||||
}
|
||||
|
||||
/* htype == 0 is only allowed in DHCPINFORM, this seems to be a
|
||||
microsoftism. chaddr == NULL in that case */
|
||||
|
||||
if (mess->htype == 0 && mess_type == DHCPINFORM)
|
||||
/* htype == 0 is only allowed in DHCPINFORM,
|
||||
this seems to be a microsoftism. */
|
||||
if (mess->htype == 0)
|
||||
{
|
||||
chaddr = NULL;
|
||||
if (mess->hlen != 0)
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
chaddr = mess->chaddr;
|
||||
|
||||
/* Token ring is supported when we have packet sockets
|
||||
to make the HW headers for us. We don't have the code to build
|
||||
token ring headers when using BPF. We rely on the fact that
|
||||
token ring hwaddrs are the same size as ethernet hwaddrs. */
|
||||
|
||||
#ifdef HAVE_BPF
|
||||
if (mess->htype != ARPHRD_ETHER)
|
||||
#else
|
||||
if (mess->htype != ARPHRD_ETHER && mess->htype != ARPHRD_IEEE802)
|
||||
#endif
|
||||
{
|
||||
syslog(LOG_WARNING, "DHCP request for unsupported hardware type (%d) recieved on %s",
|
||||
mess->htype, iface_name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (mess->hlen != ETHER_ADDR_LEN)
|
||||
if (mess_type != DHCPINFORM || mess->hlen != 0)
|
||||
return 0;
|
||||
}
|
||||
else if (mess->hlen == 0)
|
||||
return 0;
|
||||
|
||||
for (mac = daemon->dhcp_macs; mac; mac = mac->next)
|
||||
if (mac->hwaddr_len == mess->hlen &&
|
||||
(mac->hwaddr_type == mess->htype || mac->hwaddr_type == 0))
|
||||
{
|
||||
int i;
|
||||
unsigned int mask = mac->mask;
|
||||
for (i = mac->hwaddr_len - 1; i >= 0; i--, mask = mask >> 1)
|
||||
if (mask & 1)
|
||||
mac->hwaddr[i] = mess->chaddr[i];
|
||||
if (memcmp(mac->hwaddr, mess->chaddr, mac->hwaddr_len) == 0)
|
||||
{
|
||||
mac->netid.next = netid;
|
||||
netid = &mac->netid;
|
||||
}
|
||||
}
|
||||
|
||||
/* Determine network for this packet. Our caller will have already linked all the
|
||||
contexts which match the addresses of the receiving interface but if the
|
||||
@@ -215,15 +215,19 @@ 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;
|
||||
}
|
||||
|
||||
/* keep _a_ local address available. */
|
||||
fallback = context->local;
|
||||
|
||||
mess->op = BOOTREPLY;
|
||||
|
||||
config = find_config(daemon->dhcp_conf, context, clid, clid_len, chaddr, NULL);
|
||||
config = find_config(daemon->dhcp_conf, context, clid, clid_len,
|
||||
mess->chaddr, mess->hlen, mess->htype, NULL);
|
||||
|
||||
if (mess_type == 0)
|
||||
{
|
||||
@@ -233,7 +237,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 */
|
||||
|
||||
@@ -256,8 +260,8 @@ 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";
|
||||
if (match_netid(id_list->list, netid, 0))
|
||||
message = _("disabled");
|
||||
|
||||
if (!message)
|
||||
{
|
||||
@@ -266,40 +270,53 @@ int dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_
|
||||
logaddr = &config->addr;
|
||||
mess->yiaddr = config->addr;
|
||||
if ((lease = lease_find_by_addr(config->addr)) &&
|
||||
memcmp(lease->hwaddr, chaddr, ETHER_ADDR_LEN) != 0)
|
||||
message = "address in use";
|
||||
(lease->hwaddr_len != mess->hlen ||
|
||||
memcmp(lease->hwaddr, mess->chaddr, lease->hwaddr_len) != 0))
|
||||
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)))
|
||||
if (!(lease = lease_find_by_client(mess->chaddr, mess->hlen, mess->htype, NULL, 0)) ||
|
||||
!address_available(context, lease->addr))
|
||||
{
|
||||
if (lease)
|
||||
{
|
||||
/* lease exists, wrong network. */
|
||||
lease_prune(lease, now);
|
||||
lease = NULL;
|
||||
}
|
||||
if (!address_allocate(context, daemon, &mess->yiaddr, mess->chaddr, mess->hlen, netid, now))
|
||||
message = _("no address available");
|
||||
}
|
||||
else
|
||||
mess->yiaddr = lease->addr;
|
||||
else if (!address_allocate(context, daemon, &mess->yiaddr, chaddr, netid, now))
|
||||
message = "no address available";
|
||||
}
|
||||
|
||||
if (!message && !lease && (!(lease = lease_allocate(chaddr, NULL, 0, mess->yiaddr))))
|
||||
message = "no leases left";
|
||||
if (!message && !lease && (!(lease = lease_allocate(mess->chaddr, NULL, mess->hlen, mess->htype, 0, mess->yiaddr))))
|
||||
message = _("no leases left");
|
||||
|
||||
if (!message && !(context = narrow_context(context, mess->yiaddr)))
|
||||
message = _("wrong network");
|
||||
|
||||
if (!message)
|
||||
{
|
||||
logaddr = &mess->yiaddr;
|
||||
context = narrow_context(context, mess->yiaddr);
|
||||
|
||||
if (context->netid.net && !(context->flags & CONTEXT_FILTER))
|
||||
if (context->netid.net)
|
||||
{
|
||||
context->netid.next = netid;
|
||||
netid = &context->netid;
|
||||
}
|
||||
|
||||
lease_set_hwaddr(lease, chaddr, NULL, 0);
|
||||
lease_set_hwaddr(lease, mess->chaddr, NULL, mess->hlen, mess->htype, 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,
|
||||
hostname, netid, subnet_addr, fqdn_flags);
|
||||
hostname, netid, subnet_addr, fqdn_flags, 0);
|
||||
/* must do this after do_req_options since it overwrites filename field. */
|
||||
mess->siaddr = context->local;
|
||||
bootp_option_put(mess, daemon->boot_config, netid);
|
||||
@@ -307,7 +324,7 @@ int dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_
|
||||
}
|
||||
}
|
||||
|
||||
log_packet(NULL, logaddr, chaddr, iface_name, message);
|
||||
log_packet(NULL, logaddr, mess->chaddr, mess->hlen, iface_name, message);
|
||||
mess->file[128] = save;
|
||||
|
||||
if (message)
|
||||
@@ -329,7 +346,7 @@ int dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_
|
||||
pp = op;
|
||||
|
||||
/* Always force update, since the client has no way to do it itself. */
|
||||
if (fqdn_flags & 0x01)
|
||||
if (!(fqdn_flags & 0x01))
|
||||
fqdn_flags |= 0x02;
|
||||
|
||||
fqdn_flags &= ~0x08;
|
||||
@@ -346,6 +363,8 @@ int dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_
|
||||
else
|
||||
{
|
||||
memcpy(pq, op, len);
|
||||
if (len > 0 && op[len-1] == 0)
|
||||
borken_opt = 1;
|
||||
pq += len + 1;
|
||||
}
|
||||
|
||||
@@ -361,8 +380,13 @@ int dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_
|
||||
{
|
||||
int len = option_len(opt);
|
||||
memcpy(daemon->dhcp_buff, option_ptr(opt), len);
|
||||
/* May not be zero terminated */
|
||||
daemon->dhcp_buff[len] = 0;
|
||||
/* Microsoft clients are broken, and need zero-terminated strings
|
||||
in options. We detect this state here, and do the same in
|
||||
any options we send */
|
||||
if (len > 0 && daemon->dhcp_buff[len-1] == 0)
|
||||
borken_opt = 1;
|
||||
else
|
||||
daemon->dhcp_buff[len] = 0;
|
||||
if (canonicalise(daemon->dhcp_buff))
|
||||
client_hostname = daemon->dhcp_buff;
|
||||
}
|
||||
@@ -370,6 +394,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))
|
||||
@@ -380,7 +405,9 @@ int dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_
|
||||
/* Search again now we have a hostname.
|
||||
Only accept configs without CLID and HWADDR here, (they won't match)
|
||||
to avoid impersonation by name. */
|
||||
struct dhcp_config *new = find_config(daemon->dhcp_conf, context, NULL, 0, chaddr, hostname);
|
||||
struct dhcp_config *new = find_config(daemon->dhcp_conf, context, NULL, 0,
|
||||
mess->chaddr, mess->hlen,
|
||||
mess->htype, hostname);
|
||||
if (!have_config(new, CONFIG_CLID) && !have_config(new, CONFIG_HWADDR))
|
||||
config = new;
|
||||
}
|
||||
@@ -424,10 +451,10 @@ int dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* if all the netids in the ignore list are present, ignore this client */
|
||||
for (id_list = daemon->dhcp_ignore; id_list; id_list = id_list->next)
|
||||
if (match_netid(id_list->list, netid))
|
||||
if (match_netid(id_list->list, netid, 0))
|
||||
ignore = 1;
|
||||
|
||||
/* Can have setting to ignore the client ID for a particular MAC address or hostname */
|
||||
@@ -467,7 +494,7 @@ int dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_
|
||||
if (!(opt = option_find(mess, sz, OPTION_REQUESTED_IP, INADDRSZ)))
|
||||
return 0;
|
||||
|
||||
log_packet("DECLINE", option_ptr(opt), chaddr, iface_name, message);
|
||||
log_packet("DECLINE", option_ptr(opt), mess->chaddr, mess->hlen, iface_name, message);
|
||||
|
||||
if (lease && lease->addr.s_addr == option_addr(opt).s_addr)
|
||||
lease_prune(lease, now);
|
||||
@@ -475,7 +502,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,9 +520,9 @@ 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);
|
||||
log_packet("RELEASE", &mess->ciaddr, mess->chaddr, mess->hlen, iface_name, message);
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -506,7 +533,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;
|
||||
@@ -515,16 +542,15 @@ int dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_
|
||||
else if (opt && address_available(context, addr) && !lease_find_by_addr(addr) &&
|
||||
!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";
|
||||
log_packet("DISCOVER", opt ? &addr : NULL, chaddr, iface_name, message);
|
||||
else if (!address_allocate(context, daemon, &mess->yiaddr, mess->chaddr, mess->hlen, netid, now))
|
||||
message = _("no address available");
|
||||
log_packet("DISCOVER", opt ? &addr : NULL, mess->chaddr, mess->hlen, iface_name, message);
|
||||
}
|
||||
|
||||
if (message)
|
||||
if (message || !(context = narrow_context(context, mess->yiaddr)))
|
||||
return 0;
|
||||
|
||||
context = narrow_context(context, mess->yiaddr);
|
||||
if (context->netid.net && !(context->flags & CONTEXT_FILTER))
|
||||
|
||||
if (context->netid.net)
|
||||
{
|
||||
context->netid.next = netid;
|
||||
netid = &context->netid;
|
||||
@@ -552,10 +578,10 @@ int dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_
|
||||
p = option_put(p, end, OPTION_T2, 4, (time*7)/8);
|
||||
}
|
||||
p = do_req_options(context, p, end, req_options, daemon,
|
||||
offer_hostname, netid, subnet_addr, fqdn_flags);
|
||||
offer_hostname, netid, subnet_addr, fqdn_flags, borken_opt);
|
||||
p = option_end(p, end, mess);
|
||||
|
||||
log_packet("OFFER" , &mess->yiaddr, chaddr, iface_name, NULL);
|
||||
log_packet("OFFER" , &mess->yiaddr, mess->chaddr, mess->hlen, iface_name, NULL);
|
||||
return p - (unsigned char *)mess;
|
||||
|
||||
case DHCPREQUEST:
|
||||
@@ -569,7 +595,11 @@ int dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_
|
||||
if ((opt = option_find(mess, sz, OPTION_SERVER_IDENTIFIER, INADDRSZ)))
|
||||
{
|
||||
/* SELECTING */
|
||||
if (context->local.s_addr != option_addr(opt).s_addr)
|
||||
for (; context; context = context->current)
|
||||
if (context->local.s_addr == option_addr(opt).s_addr)
|
||||
break;
|
||||
|
||||
if (!context)
|
||||
return 0;
|
||||
|
||||
/* If a lease exists for this host and another address, squash it. */
|
||||
@@ -586,36 +616,47 @@ 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
|
||||
{
|
||||
/* RENEWING or REBINDING */
|
||||
/* Must exist a lease for this address */
|
||||
if (!lease || mess->ciaddr.s_addr != lease->addr.s_addr)
|
||||
message = "lease not found";
|
||||
|
||||
/* Check existing lease for this address.
|
||||
We allow it to be missing if dhcp-authoritative mode
|
||||
as long as we can allocate the lease now - checked below.
|
||||
This makes for a smooth recovery from a lost lease DB */
|
||||
if ((lease && mess->ciaddr.s_addr != lease->addr.s_addr) ||
|
||||
(!lease && !(daemon->options & OPT_AUTHORITATIVE)))
|
||||
{
|
||||
message = _("lease not found");
|
||||
/* ensure we broadcast NAK */
|
||||
unicast_dest = 0;
|
||||
}
|
||||
/* desynchronise renewals */
|
||||
fuzz = rand16();
|
||||
mess->yiaddr = mess->ciaddr;
|
||||
}
|
||||
|
||||
log_packet("REQUEST", &mess->yiaddr, chaddr, iface_name, NULL);
|
||||
|
||||
log_packet("REQUEST", &mess->yiaddr, mess->chaddr, mess->hlen, iface_name, NULL);
|
||||
|
||||
if (!message)
|
||||
{
|
||||
struct dhcp_config *addr_config;
|
||||
|
||||
/* 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";
|
||||
|
||||
|
||||
if (!(context = narrow_context(context, mess->yiaddr)))
|
||||
{
|
||||
/* If a machine moves networks whilst it has a lease, we catch that here. */
|
||||
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
|
||||
an endless protocol loop will ensue. */
|
||||
@@ -623,39 +664,49 @@ 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";
|
||||
else if (!lease && !(lease = lease_allocate(mess->chaddr, clid, mess->hlen, mess->htype, clid_len, mess->yiaddr)))
|
||||
message = _("no leases left");
|
||||
}
|
||||
|
||||
if (message)
|
||||
{
|
||||
log_packet("NAK", &mess->yiaddr, chaddr, iface_name, message);
|
||||
log_packet("NAK", &mess->yiaddr, mess->chaddr, mess->hlen, 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 */
|
||||
p = option_put(p, end, OPTION_SERVER_IDENTIFIER, INADDRSZ,
|
||||
ntohl(context ? context->local.s_addr : fallback.s_addr));
|
||||
p = option_put_string(p, end, OPTION_MESSAGE, message, borken_opt);
|
||||
/* 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);
|
||||
|
||||
log_packet("ACK", &mess->yiaddr, chaddr, iface_name, hostname);
|
||||
if (!hostname_auth && (client_hostname = host_from_dns(daemon, mess->yiaddr)))
|
||||
{
|
||||
hostname = client_hostname;
|
||||
hostname_auth = 1;
|
||||
}
|
||||
|
||||
log_packet("ACK", &mess->yiaddr, mess->chaddr, mess->hlen, iface_name, hostname);
|
||||
|
||||
context = narrow_context(context, mess->yiaddr);
|
||||
if (context->netid.net && !(context->flags & CONTEXT_FILTER))
|
||||
if (context->netid.net)
|
||||
{
|
||||
context->netid.next = netid;
|
||||
netid = &context->netid;
|
||||
@@ -669,9 +720,9 @@ int dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_
|
||||
time = req_time;
|
||||
}
|
||||
|
||||
lease_set_hwaddr(lease, chaddr, clid, clid_len);
|
||||
lease_set_hwaddr(lease, mess->chaddr, clid, mess->hlen, mess->htype, 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;
|
||||
@@ -687,7 +738,7 @@ int dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_
|
||||
p = option_put(p, end, OPTION_T2, 4, ((time * 7)/8) - fuzz);
|
||||
}
|
||||
p = do_req_options(context, p, end, req_options, daemon,
|
||||
hostname, netid, subnet_addr, fqdn_flags);
|
||||
hostname, netid, subnet_addr, fqdn_flags, borken_opt);
|
||||
}
|
||||
|
||||
p = option_end(p, end, mess);
|
||||
@@ -695,14 +746,14 @@ 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);
|
||||
log_packet("INFORM", &mess->ciaddr, mess->chaddr, mess->hlen, iface_name, message);
|
||||
|
||||
if (message || mess->ciaddr.s_addr == 0)
|
||||
if (message || mess->ciaddr.s_addr == 0 ||
|
||||
!(context = narrow_context(context, mess->ciaddr)))
|
||||
return 0;
|
||||
|
||||
context = narrow_context(context, mess->ciaddr);
|
||||
if (context->netid.net)
|
||||
{
|
||||
context->netid.next = netid;
|
||||
@@ -716,31 +767,34 @@ int dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_
|
||||
if (!hostname)
|
||||
hostname = host_from_dns(daemon, mess->yiaddr);
|
||||
p = do_req_options(context, p, end, req_options, daemon,
|
||||
hostname, netid, subnet_addr, fqdn_flags);
|
||||
hostname, netid, subnet_addr, fqdn_flags, borken_opt);
|
||||
p = option_end(p, end, mess);
|
||||
|
||||
log_packet("ACK", &mess->ciaddr, chaddr, iface_name, hostname);
|
||||
log_packet("ACK", &mess->ciaddr, mess->chaddr, mess->hlen, iface_name, hostname);
|
||||
return p - (unsigned char *)mess;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void log_packet(char *type, struct in_addr *addr, unsigned char *hwaddr, char *interface, char *string)
|
||||
static void log_packet(char *type, struct in_addr *addr, unsigned char *hwaddr, int hw_len, char *interface, char *string)
|
||||
{
|
||||
u8 empty[] = { 0, 0, 0, 0, 0, 0};
|
||||
char buff[(DHCP_CHADDR_MAX * 3) + 1];
|
||||
char *p = buff;
|
||||
int i;
|
||||
|
||||
if (!hwaddr)
|
||||
hwaddr = empty;
|
||||
|
||||
syslog(LOG_INFO, "%s%s(%s)%s%s %.2x:%.2x:%.2x:%.2x:%.2x:%.2x%s%s",
|
||||
*buff = 0;
|
||||
for (i = 0; i < hw_len - 1; i++)
|
||||
p += sprintf(p, "%.2x:", hwaddr[i]);
|
||||
p += sprintf(p, "%.2x ", hwaddr[i]);
|
||||
|
||||
syslog(LOG_INFO, "%s%s(%s) %s%s%s%s",
|
||||
type ? "DHCP" : "BOOTP",
|
||||
type ? type : "",
|
||||
interface,
|
||||
addr ? " " : "",
|
||||
addr ? inet_ntoa(*addr) : "",
|
||||
hwaddr[0], hwaddr[1], hwaddr[2], hwaddr[3], hwaddr[4], hwaddr[5],
|
||||
string ? " " : "",
|
||||
addr ? " " : "",
|
||||
buff,
|
||||
string ? string : "");
|
||||
}
|
||||
|
||||
@@ -784,12 +838,12 @@ static void bootp_option_put(struct dhcp_packet *mess,
|
||||
struct dhcp_boot *tmp;
|
||||
|
||||
for (tmp = boot_opts; tmp; tmp = tmp->next)
|
||||
if (match_netid(tmp->netid, netids))
|
||||
if (match_netid(tmp->netid, netids, 0))
|
||||
break;
|
||||
if (!tmp)
|
||||
/* No match, look for one without a netid */
|
||||
for (tmp = boot_opts; tmp; tmp = tmp->next)
|
||||
if (!tmp->netid)
|
||||
if (match_netid(tmp->netid, netids, 1))
|
||||
break;
|
||||
|
||||
/* Do this _after_ the matching above, since in
|
||||
@@ -809,12 +863,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;
|
||||
@@ -834,11 +900,15 @@ static unsigned char *option_end(unsigned char *p, unsigned char *end, struct dh
|
||||
return p;
|
||||
}
|
||||
|
||||
static unsigned char *option_put_string(unsigned char *p, unsigned char *end, int opt, char *string)
|
||||
static unsigned char *option_put_string(unsigned char *p, unsigned char *end, int opt,
|
||||
char *string, int null_term)
|
||||
{
|
||||
size_t len = strlen(string);
|
||||
|
||||
if (p + len + 3 < end)
|
||||
if (null_term && len != 255)
|
||||
len++;
|
||||
|
||||
if (check_space(p, end, len, opt))
|
||||
{
|
||||
*(p++) = opt;
|
||||
*(p++) = len;
|
||||
@@ -885,7 +955,7 @@ static unsigned char *option_find1(unsigned char *p, unsigned char *end, int opt
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static unsigned char *option_find(struct dhcp_packet *mess, int size, int opt_type, int minsize)
|
||||
static unsigned char *option_find(struct dhcp_packet *mess, size_t size, int opt_type, int minsize)
|
||||
{
|
||||
int overload = 0;
|
||||
unsigned char *ret;
|
||||
@@ -926,31 +996,30 @@ static struct dhcp_opt *option_find2(struct dhcp_netid *netid, struct dhcp_opt *
|
||||
struct dhcp_opt *tmp;
|
||||
for (tmp = opts; tmp; tmp = tmp->next)
|
||||
if (tmp->opt == opt)
|
||||
{
|
||||
if (netid)
|
||||
{
|
||||
if (match_netid(tmp->netid, netid))
|
||||
return tmp;
|
||||
}
|
||||
else if (!tmp->netid)
|
||||
return tmp;
|
||||
}
|
||||
if (match_netid(tmp->netid, netid, 1) || match_netid(tmp->netid, netid, 0))
|
||||
return tmp;
|
||||
|
||||
return netid ? option_find2(NULL, opts, opt) : NULL;
|
||||
}
|
||||
|
||||
static unsigned char *do_opt(struct dhcp_opt *opt, unsigned char *p, unsigned char *end, struct in_addr local)
|
||||
static unsigned char *do_opt(struct dhcp_opt *opt, unsigned char *p, unsigned char *end,
|
||||
struct in_addr local, int null_term)
|
||||
{
|
||||
if (p + opt->len + 3 >= end)
|
||||
int len = opt->len;
|
||||
|
||||
if ((opt->flags & DHOPT_STRING) && null_term && len != 255)
|
||||
len++;
|
||||
|
||||
if (!check_space(p, end, len, opt->opt))
|
||||
return p;
|
||||
|
||||
|
||||
*(p++) = opt->opt;
|
||||
*(p++) = opt->len;
|
||||
*(p++) = len;
|
||||
|
||||
if (opt->len == 0)
|
||||
if (len == 0)
|
||||
return p;
|
||||
|
||||
if (opt->is_addr && !opt->vendor_class)
|
||||
if (opt->flags & DHOPT_ADDR)
|
||||
{
|
||||
int j;
|
||||
struct in_addr *a = (struct in_addr *)opt->val;
|
||||
@@ -966,8 +1035,8 @@ static unsigned char *do_opt(struct dhcp_opt *opt, unsigned char *p, unsigned ch
|
||||
}
|
||||
else
|
||||
{
|
||||
memcpy(p, opt->val, opt->len);
|
||||
p += opt->len;
|
||||
memcpy(p, opt->val, len);
|
||||
p += len;
|
||||
}
|
||||
|
||||
return p;
|
||||
@@ -980,7 +1049,8 @@ static unsigned char *do_req_options(struct dhcp_context *context,
|
||||
char *hostname,
|
||||
struct dhcp_netid *netid,
|
||||
struct in_addr subnet_addr,
|
||||
unsigned char fqdn_flags)
|
||||
unsigned char fqdn_flags,
|
||||
int null_term)
|
||||
{
|
||||
struct dhcp_opt *opt, *config_opts = daemon->dhcp_opts;
|
||||
char *vendor_class = NULL;
|
||||
@@ -1016,7 +1086,7 @@ static unsigned char *do_req_options(struct dhcp_context *context,
|
||||
|
||||
if (daemon->domain_suffix && in_list(req_options, OPTION_DOMAINNAME) &&
|
||||
!option_find2(netid, config_opts, OPTION_DOMAINNAME))
|
||||
p = option_put_string(p, end, OPTION_DOMAINNAME, daemon->domain_suffix);
|
||||
p = option_put_string(p, end, OPTION_DOMAINNAME, daemon->domain_suffix, null_term);
|
||||
|
||||
/* Note that we ignore attempts to set the hostname using
|
||||
--dhcp-option=12,<name> and the fqdn using
|
||||
@@ -1024,14 +1094,16 @@ static unsigned char *do_req_options(struct dhcp_context *context,
|
||||
if (hostname)
|
||||
{
|
||||
if (in_list(req_options, OPTION_HOSTNAME))
|
||||
p = option_put_string(p, end, OPTION_HOSTNAME, hostname);
|
||||
p = option_put_string(p, end, OPTION_HOSTNAME, hostname, null_term);
|
||||
|
||||
if (fqdn_flags != 0)
|
||||
{
|
||||
int len = strlen(hostname) + 3;
|
||||
if (fqdn_flags & 0x04)
|
||||
len += 2;
|
||||
|
||||
else if (null_term)
|
||||
len++;
|
||||
|
||||
if (daemon->domain_suffix)
|
||||
len += strlen(daemon->domain_suffix) + 1;
|
||||
|
||||
@@ -1059,7 +1131,9 @@ static unsigned char *do_req_options(struct dhcp_context *context,
|
||||
*(p++) = '.';
|
||||
memcpy(p, daemon->domain_suffix, strlen(daemon->domain_suffix));
|
||||
p += strlen(daemon->domain_suffix);
|
||||
}
|
||||
}
|
||||
if (null_term)
|
||||
*(p++) = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1088,23 +1162,23 @@ static unsigned char *do_req_options(struct dhcp_context *context,
|
||||
if (opt->opt == OPTION_VENDOR_ID)
|
||||
vendor_class = (char *)opt->val;
|
||||
else
|
||||
p = do_opt(opt, p, end, context->local);
|
||||
p = do_opt(opt, p, end, context->local, null_term);
|
||||
}
|
||||
|
||||
if (in_list(req_options, OPTION_VENDOR_ID))
|
||||
{
|
||||
for (opt = daemon->vendor_opts; opt; opt = opt->next)
|
||||
if (!opt->netid || match_netid(opt->netid, netid))
|
||||
if (match_netid(opt->netid, netid, 1) || match_netid(opt->netid, netid, 0))
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
if (vendor_class)
|
||||
{
|
||||
p = option_put_string(p, end, OPTION_VENDOR_ID, vendor_class);
|
||||
p = option_put_string(p, end, OPTION_VENDOR_ID, vendor_class, 0);
|
||||
|
||||
if (in_list(req_options, OPTION_VENDOR_CLASS_OPT))
|
||||
{
|
||||
@@ -1122,9 +1196,9 @@ static unsigned char *do_req_options(struct dhcp_context *context,
|
||||
plen = p++; /* fill in later */
|
||||
|
||||
for (opt = daemon->vendor_opts; opt; opt = opt->next)
|
||||
if ((!opt->netid || match_netid(opt->netid, netid)) &&
|
||||
if ((match_netid(opt->netid, netid, 1) || match_netid(opt->netid, netid, 0)) &&
|
||||
strcmp(vendor_class, (char *)opt->vendor_class) == 0)
|
||||
p = do_opt(opt, p, oend, context->local);
|
||||
p = do_opt(opt, p, oend, context->local, null_term);
|
||||
|
||||
*plen = p - plen - 1;
|
||||
}
|
||||
|
||||
38
src/util.c
38
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;
|
||||
@@ -319,25 +319,39 @@ void prettyprint_time(char *buf, unsigned int t)
|
||||
|
||||
|
||||
/* in may equal out, when maxlen may be -1 (No max len). */
|
||||
int parse_hex(char *in, unsigned char *out, int maxlen, unsigned int *wildcard_mask)
|
||||
int parse_hex(char *in, unsigned char *out, int maxlen,
|
||||
unsigned int *wildcard_mask, int *mac_type)
|
||||
{
|
||||
int mask = 0, i = 0;
|
||||
char *r;
|
||||
|
||||
|
||||
if (mac_type)
|
||||
*mac_type = 0;
|
||||
|
||||
while (maxlen == -1 || i < maxlen)
|
||||
{
|
||||
for (r = in; *r != 0 && *r != ':' && *r != '-'; r++);
|
||||
if (*r == 0)
|
||||
maxlen = i;
|
||||
|
||||
if (r != in )
|
||||
{
|
||||
*r = 0;
|
||||
mask = mask << 1;
|
||||
if (strcmp(in, "*") == 0)
|
||||
mask |= 1;
|
||||
if (*r == '-' && i == 0 && mac_type)
|
||||
{
|
||||
*r = 0;
|
||||
*mac_type = strtol(in, NULL, 16);
|
||||
mac_type = NULL;
|
||||
}
|
||||
else
|
||||
out[i] = strtol(in, NULL, 16);
|
||||
i++;
|
||||
{
|
||||
*r = 0;
|
||||
mask = mask << 1;
|
||||
if (strcmp(in, "*") == 0)
|
||||
mask |= 1;
|
||||
else
|
||||
out[i] = strtol(in, NULL, 16);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
in = r+1;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user