summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Kelley <simon@thekelleys.org.uk>2008-02-12 20:43:05 +0000
committerSimon Kelley <simon@thekelleys.org.uk>2012-01-05 17:31:13 +0000
commit824af85bdf7a19ea2281b85826180696fed22125 (patch)
tree9af5f879ed008f583eafc4e28b33d8daf6a2bffb
parent5aabfc78bc90d34f64dc43a9851556dde1aa103e (diff)
downloaddnsmasq-824af85bdf7a19ea2281b85826180696fed22125.tar.gz
import of dnsmasq-2.41.tar.gzv2.41
-rw-r--r--CHANGELOG125
-rw-r--r--COPYING-v3674
-rw-r--r--FAQ22
-rw-r--r--Makefile58
-rw-r--r--bld/Makefile8
-rwxr-xr-xbld/install-man2
-rwxr-xr-xbld/install-mo2
-rwxr-xr-xbld/pkg-wrapper3
-rw-r--r--dnsmasq.conf.example23
-rw-r--r--doc.html6
-rw-r--r--man/dnsmasq.8101
-rw-r--r--man/es/dnsmasq.8104
-rw-r--r--man/fr/dnsmasq.81197
-rw-r--r--po/de.po686
-rw-r--r--po/es.po745
-rw-r--r--po/fi.po676
-rw-r--r--po/fr.po705
-rw-r--r--po/id.po720
-rw-r--r--po/it.po676
-rw-r--r--po/no.po703
-rw-r--r--po/pl.po705
-rw-r--r--po/pt_BR.po676
-rw-r--r--po/ro.po704
-rw-r--r--src/bpf.c215
-rw-r--r--src/cache.c108
-rw-r--r--src/config.h62
-rw-r--r--src/dbus.c22
-rw-r--r--src/dhcp.c284
-rw-r--r--src/dnsmasq.c152
-rw-r--r--src/dnsmasq.h79
-rw-r--r--src/forward.c92
-rw-r--r--src/helper.c94
-rw-r--r--src/isc.c10
-rw-r--r--src/lease.c21
-rw-r--r--src/log.c70
-rw-r--r--src/netlink.c10
-rw-r--r--src/network.c226
-rw-r--r--src/option.c664
-rw-r--r--src/rfc1035.c162
-rw-r--r--src/rfc2131.c223
-rw-r--r--src/tftp.c56
-rw-r--r--src/util.c13
42 files changed, 7882 insertions, 4002 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 9f83c65..312a3c1 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -45,7 +45,7 @@ release 0.95 Major rewrite: remove calls to gethostbyname() and talk
dnsmasq to serve names to the machine it is running
on (put nameserver 127.0.0.1 in /etc/resolv.conf and
give dnsmasq the option -r /etc/resolv.dnsmasq)
- (6) Dnsmasq will re-read it's servers if the
+ (6) Dnsmasq will re-read its servers if the
modification time of resolv.conf changes. Along with
4 above this allows nameservers to be set
automatically by ppp or dhcp.
@@ -1076,7 +1076,7 @@ release 2.10
NAK attempts to renew a pool DHCP lease when a statically
allocated address has become available, forcing a host to
- move to it's allocated address. Lots of people have
+ move to its allocated address. Lots of people have
suggested this change and been rebuffed (they know who
they are) the straws that broke the camel's back were Tim
Cutts and Jamie Lokier.
@@ -2343,5 +2343,126 @@ version 2.40
inetd is also listening on the same port. Thanks to Erik
Brown for spotting the problem.
+version 2.41
+ Remove deprecated calls when compiled against libdbus 1.1.
+
+ Fix "strict-alias" warning in bpf.c
+
+ Reduce dependency on Gnu-make in build system: dnsmasq now
+ builds with system make under OpenBSD.
+
+ Port to Solaris. Dnsmasq 1.x used to run under Solaris,
+ and this release does so again, for Solaris 9 or better.
+
+ Allow the DNS function to be completely disabled, by
+ setting the port to zero "--port=0". The allows dnsmasq to
+ be used as a simple DHCP server, simple TFTP server, or
+ both, but without the DNS server getting in the way.
+
+ Fix a bug where NXDOMAIN could be returned for a query
+ even if the name's value was known for a different query
+ type. This bug could be prodded with
+ --local=/domain/ --address=/name.domain/1.2.3.4
+ An IPv6 query for name.domain would return NXDOMAIN, and
+ not the correct NOERROR. Thanks to Lars Nooden for
+ spotting the bug and Jima for diagnosis of the problem.
+
+ Added per-server stats to the information logged when
+ dnsmasq gets SIGUSR1.
+
+ Added counts of queries forwarded and queries answered
+ locally (from the cache, /etc/hosts or config).
+
+ Fixed possible crash bug in DBus IPv6 code. Thanks to Matt
+ Domsch and Jima.
+
+ Tighten checks for clashes between hosts-file and
+ DHCP-derived names. Multiple addresses associated with a
+ name in hosts-file no longer confuses the check.
+
+ Add --dhcp-no-override option to fix problems with some
+ combinations of stage zero and stage one
+ bootloaders. Thanks to Steve Alexander for the bug report.
+
+ Add --tftp-port-range option. Thanks to Daniel Mierswa for
+ the suggestion.
+
+ Add --stop-dns-rebind option. Thanks to Collin Mulliner
+ for the patch.
+
+ Added GPL version 3 as a license option.
+
+ Added --all-servers option. Thanks to Peter Naulls for the
+ patch.
+
+ Extend source address mechanism so that the interface used
+ to contact an upstream DNS server can be nailed
+ down. Something like "--server=1.2.3.4@eth1" will force
+ the use of eth1 for traffic to DNS-server 1.2.3.4. This
+ facility is only available on Linux and Solaris. Thanks to
+ Peter Naulls for prompting this.
+
+ Add --dhcp-optsfile option. Thanks to Carlos Carvalho for
+ the suggestion.
+
+ Fixed failure to set source address for server connections
+ when using TCP. Thanks to Simon Capper for finding this
+ bug.
+
+ Refuse to give a DHCP client the address it asks for if
+ the address range in question is not available to that
+ particular host. Thanks to Cedric Duval for the bug
+ report.
+
+ Changed behavior of DHCP server to always return total length of
+ a new lease in DHCPOFFER, even if an existing lease
+ exists. (It used to return the time remaining on the lease
+ whne one existed.) This fixes problems with the Sony Ericsson
+ K610i phone. Thanks to Hakon Stordahl for finding and
+ fixing this.
+
+ Add DNSMASQ_INTERFACE to the environment of the
+ lease-change script. Thanks to Nikos Mavrogiannopoulos for
+ the patch.
+
+ Fixed broken --alias functionality. Thanks to Michael
+ Meelis for the bug report.
+ Added French translation of the man page. Thank to Gildas
+ Le Nadan for that.
+ Add --dhcp-match flag, to check for arbitrary options in
+ DHCP messages from clients. This enables use of dnsmasq
+ with gPXE. Thanks to Rance Hall for the suggestion.
+
+ Added --dhcp-broadcast, to force broadcast replies to DHCP
+ clients which need them but are too dumb or too old to
+ ask. Thanks to Bodo Bellut for the suggestion.
+
+ Disable path-MTU discovery on DHCP and TFTP sockets. This
+ is never needed, and the presence of DF flags in the IP
+ header confuses some broken PXE ROMS. Thanks again to Bodo
+ Bellut for spotting this.
+
+ Fix problems with addresses which have multiple PTR
+ records - all but one of these could get lost.
+
+ Fix bug with --address and ANY query type seeing REFUSED
+ return code in replies. Thanks to Mike Wright for spotting
+ the problem.
+
+ Update Spanish translation. Thanks to Chris Chatham.
+
+ Add --neg-ttl option.
+
+ Add warnings about the bad effects of --filterwin2k on
+ SIP, XMPP and Google-talk to the example config file.
+
+ Fix va_list abuse in log.c. This fixes crashes on powerpc
+ when debug mode is set. Thanks to cedric Duval for the
+ patch.
+
+
+
+
+
diff --git a/COPYING-v3 b/COPYING-v3
new file mode 100644
index 0000000..94a9ed0
--- /dev/null
+++ b/COPYING-v3
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/FAQ b/FAQ
index cb74994..4800f1b 100644
--- a/FAQ
+++ b/FAQ
@@ -1,7 +1,7 @@
Q: Why does dnsmasq open UDP ports >1024 as well as port 53.
Is this a security problem/trojan/backdoor?
-A: The high ports that dnsmasq opens is for replies from the upstream
+A: The high ports that dnsmasq opens are for replies from the upstream
nameserver(s). Queries from dnsmasq to upstream nameservers are sent
from these ports and replies received to them. The reason for doing this is
that most firewall setups block incoming packets _to_ port 53, in order
@@ -39,10 +39,9 @@ A: They are negative entries: that's what the N flag means. Dnsmasq asked
Q: Will dnsmasq compile/run on non-Linux systems?
-A: Yes, there is explicit support for *BSD and MacOS X. There are
- start-up scripts for MacOS X Tiger and Panther in /contrib. Earlier
- dnsmasq releases ran under Solaris, but that capability has
- rotted. Dnsmasq will link with uclibc to provide small
+A: Yes, there is explicit support for *BSD and MacOS X and Solaris.
+ There are start-up scripts for MacOS X Tiger and Panther
+ in /contrib. Dnsmasq will link with uclibc to provide small
binaries suitable for use in embedded systems such as
routers. (There's special code to support machines with flash
filesystems and no battery-backed RTC.)
@@ -50,7 +49,7 @@ A: Yes, there is explicit support for *BSD and MacOS X. There are
ports and building dnsmasq with "make MAKE=gmake"
For other systems, try altering the settings in config.h.
-Q: My companies' nameserver knows about some names which aren't in the
+Q: My company's nameserver knows about some names which aren't in the
public DNS. Even though I put it first in /etc/resolv.conf, it
dosen't work: dnsmasq seems not to use the nameservers in the order
given. What am I doing wrong?
@@ -380,6 +379,14 @@ A: This a variant on the iptables problem. Explicit details on how to
http://lists.thekelleys.org.uk/pipermail/dnsmasq-discuss/2005q3/000431.html
+Q: I'm using dnsmasq on a machine with the shorewall firewall, and
+ DHCP doesn't work. What's the problem?
+
+A: This a variant on the iptables problem. Explicit details on how to
+ proceed can be found at
+ http://lists.thekelleys.org.uk/pipermail/dnsmasq-discuss/2007q4/001764.html
+
+
Q: Dnsmasq logs "running as root because setting capabilities failed"
when it starts up. Why did that happen and what can do to fix it?
@@ -429,9 +436,6 @@ A: In almost all cases: none. If you have the normal arrangement with
chain reaction runaway will occur. To avoid this, use syslog-ng
and turn on syslog-ng's dns-cache function.
-
-
-
diff --git a/Makefile b/Makefile
index 406625d..a647cd8 100644
--- a/Makefile
+++ b/Makefile
@@ -1,18 +1,47 @@
-PREFIX ?= /usr/local
-BINDIR ?= ${PREFIX}/sbin
-MANDIR ?= ${PREFIX}/share/man
-LOCALEDIR ?= ${PREFIX}/share/locale
+# dnsmasq is Copyright (c) 2000-2007 Simon Kelley
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 dated June, 1991, or
+# (at your option) version 3 dated 29 June, 2007.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+PREFIX = /usr/local
+BINDIR = ${PREFIX}/sbin
+MANDIR = ${PREFIX}/share/man
+LOCALEDIR = ${PREFIX}/share/locale
SRC = src
PO = po
MAN = man
-CFLAGS?= -O2
+PKG_CONFIG = pkg-config
+AWK = nawk
+INSTALL = install
+
+DBUS_MINOR=" `echo $(COPTS) | ../bld/pkg-wrapper $(PKG_CONFIG) --modversion dbus-1 | $(AWK) -F . -- '{ if ($$(NF-1)) print \"-DDBUS_MINOR=\"$$(NF-1) }'`"
+DBUS_CFLAGS="`echo $(COPTS) | ../bld/pkg-wrapper $(PKG_CONFIG) --cflags dbus-1`"
+DBUS_LIBS=" `echo $(COPTS) | ../bld/pkg-wrapper $(PKG_CONFIG) --libs dbus-1`"
+SUNOS_VER=" `if uname | grep SunOS 2>&1 >/dev/null; then uname -r | $(AWK) -F . -- '{ print \"-DSUNOS_VER=\"$$2 }'; fi`"
+SUNOS_LIBS=" `if uname | grep SunOS 2>&1 >/dev/null; then echo -lsocket -lnsl -lposix4; fi `"
all : dnsmasq
dnsmasq :
- $(MAKE) I18N=-DNO_GETTEXT -f ../bld/Makefile -C $(SRC) dnsmasq
+ cd $(SRC) && $(MAKE) \
+ DBUS_MINOR=$(DBUS_MINOR) \
+ DBUS_CFLAGS=$(DBUS_CFLAGS) \
+ DBUS_LIBS=$(DBUS_LIBS) \
+ SUNOS_LIBS=$(SUNOS_LIBS) \
+ SUNOS_VER=$(SUNOS_VER) \
+ -f ../bld/Makefile dnsmasq
clean :
rm -f *~ $(SRC)/*.mo contrib/*/*~ */*~ $(SRC)/*.pot
@@ -21,14 +50,21 @@ clean :
install : all install-common
install-common :
- install -d $(DESTDIR)$(BINDIR) -d $(DESTDIR)$(MANDIR)/man8
- install -m 644 $(MAN)/dnsmasq.8 $(DESTDIR)$(MANDIR)/man8
- install -m 755 $(SRC)/dnsmasq $(DESTDIR)$(BINDIR)
+ $(INSTALL) -d $(DESTDIR)$(BINDIR) -d $(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 $(SRC) && $(MAKE) \
+ I18N=-DLOCALEDIR='\"$(LOCALEDIR)\"' \
+ DBUS_MINOR=$(DBUS_MINOR) \
+ DBUS_CFLAGS=$(DBUS_CFLAGS) \
+ DBUS_LIBS=$(DBUS_LIBS) \
+ SUNOS_LIBS=$(SUNOS_LIBS) \
+ SUNOS_VER=$(SUNOS_VER) \
+ -f ../bld/Makefile dnsmasq
cd $(PO); for f in *.po; do \
- $(MAKE) -f ../bld/Makefile -C ../$(SRC) $${f%.po}.mo; \
+ cd ../$(SRC) && $(MAKE) -f ../bld/Makefile $${f%.po}.mo; \
done
install-i18n : all-i18n install-common
diff --git a/bld/Makefile b/bld/Makefile
index c072a9a..e622296 100644
--- a/bld/Makefile
+++ b/bld/Makefile
@@ -1,16 +1,14 @@
-CFLAGS ?= -O2
-PKG_CONFIG ?= pkg-config
-
+CFLAGS = -Wall -W -O2
OBJS = cache.o rfc1035.o util.o option.o forward.o isc.o network.o \
dnsmasq.o dhcp.o lease.o rfc2131.o netlink.o dbus.o bpf.o \
helper.o tftp.o log.o
.c.o:
- $(CC) $(CFLAGS) $(COPTS) $(I18N) `echo $(COPTS) | ../bld/pkg-wrapper $(PKG_CONFIG) --cflags dbus-1` $(RPM_OPT_FLAGS) -Wall -W -c $<
+ $(CC) $(CFLAGS) $(COPTS) $(DBUS_MINOR) $(I18N) $(DBUS_CFLAGS) $(SUNOS_VER) $(RPM_OPT_FLAGS) -c $<
dnsmasq : $(OBJS)
- $(CC) $(LDFLAGS) -o $@ $(OBJS) `echo $(COPTS) | ../bld/pkg-wrapper $(PKG_CONFIG) --libs dbus-1` $(LIBS)
+ $(CC) $(LDFLAGS) -o $@ $(OBJS) $(DBUS_LIBS) $(SUNOS_LIBS) $(LIBS)
dnsmasq.pot : $(OBJS:.o=.c) dnsmasq.h config.h
xgettext -d dnsmasq --foreign-user --keyword=_ -o dnsmasq.pot -i $(OBJS:.o=.c)
diff --git a/bld/install-man b/bld/install-man
index c569f85..f6dea75 100755
--- a/bld/install-man
+++ b/bld/install-man
@@ -2,7 +2,7 @@
for f in *; do
if [ -d $f ]; then
- install -d $1/$f/man8
+ install -m 755 -d $1/$f/man8
install -m 644 $f/dnsmasq.8 $1/$f/man8
echo installing $1/$f/man8/dnsmasq.8
fi
diff --git a/bld/install-mo b/bld/install-mo
index 725aa81..e6d462a 100755
--- a/bld/install-mo
+++ b/bld/install-mo
@@ -1,7 +1,7 @@
#!/bin/sh
for f in *.mo; do
- install -d $1/${f%.mo}/LC_MESSAGES
+ install -m 755 -d $1/${f%.mo}/LC_MESSAGES
install -m 644 $f $1/${f%.mo}/LC_MESSAGES/dnsmasq.mo
echo installing $1/${f%.mo}/LC_MESSAGES/dnsmasq.mo
done
diff --git a/bld/pkg-wrapper b/bld/pkg-wrapper
index 55efced..66859e2 100755
--- a/bld/pkg-wrapper
+++ b/bld/pkg-wrapper
@@ -1,6 +1,7 @@
#!/bin/sh
-if grep -q "^\#.*define.*HAVE_DBUS" config.h || grep -q HAVE_DBUS ; then
+if grep "^\#.*define.*HAVE_DBUS" config.h 2>&1 >/dev/null || \
+ grep HAVE_DBUS 2>&1 >/dev/null ; then
exec $*
fi
diff --git a/dnsmasq.conf.example b/dnsmasq.conf.example
index f06590b..c6fed05 100644
--- a/dnsmasq.conf.example
+++ b/dnsmasq.conf.example
@@ -19,7 +19,7 @@
# 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,
-# so don't use it if you use eg Kerberos.
+# so don't use it if you use eg Kerberos, SIP, XMMP or Google-talk.
# This option only affects forwarding, SRV records originating for
# dnsmasq (via srv-host= lines) are not suppressed by it.
#filterwin2k
@@ -61,6 +61,18 @@
# webserver.
#address=/doubleclick.net/127.0.0.1
+# --address (and --server) work with IPv6 addresses too.
+#address=/www.thekelleys.org.uk/fe80::20d:60ff:fe36:f83
+
+# You can control how dnsmasq talks to a server: this forces
+# queries to 10.1.2.3 to be routed via eth1
+# --server=10.1.2.3@eth1
+
+# and this sets the source (ie local) address used to talk to
+# 10.1.2.3 to 192.168.1.1 port 55 (there must be a interface with that
+# IP on the machine, obviously).
+# --server=10.1.2.3@192.168.1.1#55
+
# If you want dnsmasq to change uid and gid to something other
# than the default, edit the following lines.
#user=
@@ -145,7 +157,7 @@
# the name fred and IP address 192.168.0.60 and lease time 45 minutes
#dhcp-host=11:22:33:44:55:66,fred,192.168.0.60,45m
-# Give the machine which says it's name is "bert" IP address
+# Give the machine which says its name is "bert" IP address
# 192.168.0.70 and an infinite lease
#dhcp-host=bert,192.168.0.70,infinite
@@ -309,6 +321,13 @@
# external one. (See below for how to enable the TFTP server.)
#dhcp-boot=pxelinux.0
+# Boot for Etherboot gPXE. The idea is to send two different
+# filenames, the first loads gPXE, and the second tells gPXE what to
+# load. The dhcp-match sets the gpxe tag for requests from gPXE.
+#dhcp-match=gpxe,175 # gPXE sends a 175 option.
+#dhcp-boot=net:#gpxe,undionly.kpxe
+#dhcp-boot=mybootimage
+
# Enable dnsmasq's built-in TFTP server
#enable-tftp
diff --git a/doc.html b/doc.html
index 65b6802..d8b8fd9 100644
--- a/doc.html
+++ b/doc.html
@@ -19,8 +19,8 @@ connection but would be a good choice for any smallish network (up to
1000 clients is known to work) where low
resource use and ease of configuration are important.
<P>
-Supported platforms include Linux (with glibc and uclibc), *BSD and
-Mac OS X.
+Supported platforms include Linux (with glibc and uclibc), *BSD,
+Solaris and Mac OS X.
Dnsmasq is included in at least the following Linux distributions:
Gentoo, Debian, Slackware, Suse, Fedora,
Smoothwall, IP-Cop, floppyfw, Firebox, LEAF, Freesco, fli4l,
@@ -59,7 +59,7 @@ improving performance (especially on modem connections).
</LI>
<LI>
Dnsmasq can be configured to automatically pick up the addresses of
-it's upstream nameservers from ppp or dhcp configuration. It will
+its upstream nameservers from ppp or dhcp configuration. It will
automatically reload this information if it changes. This facility
will be of particular interest to maintainers of Linux firewall
distributions since it allows dns configuration to be made automatic.
diff --git a/man/dnsmasq.8 b/man/dnsmasq.8
index 09c7fac..f9fb580 100644
--- a/man/dnsmasq.8
+++ b/man/dnsmasq.8
@@ -52,6 +52,14 @@ time-to-live (in seconds) to be given for these replies. This will
reduce the load on the server at the expense of clients using stale
data under some circumstances.
.TP
+.B --neg-ttl=<time>
+Negative replies from upstream servers normally contain time-to-live
+information in SOA records which dnsmasq uses for caching. If the
+replies from upstream servers omit this information, dnsmasq does not
+cache the reply. This option gives a default value for time-to-live
+(in seconds) which dnsmasq uses to cache negative replies even in
+the absence of an SOA record.
+.TP
.B \-k, --keep-in-foreground
Do not go into the background at startup but otherwise run as
normal. This is intended for use when dnsmasq is run under daemontools
@@ -105,8 +113,8 @@ as. The defaults to "dip", if available, to facilitate access to
Print the version number.
.TP
.B \-p, --port=<port>
-Listen on <port> instead of the standard DNS port (53). Useful mainly for
-debugging.
+Listen on <port> instead of the standard DNS port (53). Setting this
+to zero completely disables DNS function, leaving only DHCP and/or TFTP.
.TP
.B \-P, --edns-packet-max=<size>
Specify the largest EDNS.0 UDP packet which is supported by the DNS
@@ -236,10 +244,21 @@ been built with DBus support.
.TP
.B \-o, --strict-order
By default, dnsmasq will send queries to any of the upstream servers
-it knows about and tries to favour servers to are known to
+it knows about and tries to favour servers that are known to
be up. Setting this flag forces dnsmasq to try each query with each
server strictly in the order they appear in /etc/resolv.conf
.TP
+.B --all-servers
+By default, when dnsmasq has more than one upstream server available,
+it will send queries to just one server. Setting this flag forces
+dnsmasq to send all queries to all available servers. The reply from
+the server which answers first will be returned to the original requestor.
+.TP
+.B --stop-dns-rebind
+Reject (and log) addresses from upstream nameservers which are in the
+private IP ranges. This blocks an attack where a browser behind a
+firewall is used to probe machines on the local network.
+.TP
.B \-n, --no-poll
Don't poll /etc/resolv.conf for changes.
.TP
@@ -253,7 +272,7 @@ Tells dnsmasq to never forward queries for plain names, without dots
or domain parts, to upstream nameservers. If the name is not known
from /etc/hosts or DHCP then a "not found" answer is returned.
.TP
-.B \-S, --local, --server=[/[<domain>]/[domain/]][<ipaddr>[#<port>][@<source>[#<port>]]]
+.B \-S, --local, --server=[/[<domain>]/[domain/]][<ipaddr>[#<port>][@<source-ip>|<interface>[#<port>]]
Specify IP address of upstream servers directly. Setting this flag does
not suppress reading of /etc/resolv.conf, use -R to do that. If one or
more
@@ -284,13 +303,18 @@ is a synonym for
.B server
to make configuration files clearer in this case.
-The optional second IP address after the @ character tells
-dnsmasq how to set the source address of the queries to this
-nameserver. It should be an address belonging to the machine on which
+The optional string after the @ character tells
+dnsmasq how to set the source of the queries to this
+nameserver. It should be an ip-address, which should belong to the machine on which
dnsmasq is running otherwise this server line will be logged and then
-ignored. The query-port flag is ignored for any servers which have a
+ignored, or an interface name. If an interface name is given, then
+queries to the server will be forced via that interface; if an
+ip-address is given then the source address of the queries will be set
+to that address.
+The query-port flag is ignored for any servers which have a
source address specified but the port may be specified directly as
-part of the source address.
+part of the source address. Forcing queries to an interface is not
+implemented on all platforms supported by dnsmasq.
.TP
.B \-A, --address=/<domain>/[domain/]<ipaddr>
Specify an IP address to return for any host in the given domains.
@@ -381,7 +405,8 @@ 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 in seconds,
-or minutes (eg 45m) or hours (eg 1h) or the literal "infinite". This
+or minutes (eg 45m) or hours (eg 1h) or the literal "infinite". The
+minimum lease time is two minutres. 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
@@ -467,6 +492,11 @@ information about one host per line. The format of a line is the same
as text to the right of '=' in --dhcp-host. The advantage of storing DHCP host information
in this file is that it can be changed without re-starting dnsmasq:
the file will be re-read when dnsmasq receives SIGHUP.
+.TP
+.B --dhcp-optsfile=<file>
+Read DHCP option information from the specified file. The advantage of
+using this option is the same as for --dhcp-hostsfile: the
+dhcp-optsfile will be re-read when dnsmasq receives SIGHUP.
.TP
.B \-Z, --read-ethers
Read /etc/ethers for information about hosts for the DHCP server. The
@@ -547,6 +577,14 @@ except that the option will always be sent, even if the client does
not ask for it in the parameter request list. This is sometimes
needed, for example when sending options to PXELinux.
.TP
+.B --dhcp-no-override
+Disable re-use of the DHCP servername and filename fields as extra
+option space. If it can, dnsmasq moves the boot server and filename
+information (from dhcp-boot) out of their dedicated fields into
+DHCP options. This make extra space available in the DHCP packet for
+options but can, rarely, confuse old or broken clients. This flag
+forces "simple and safe" behaviour to avoid problems in such a case.
+.TP
.B \-U, --dhcp-vendorclass=<network-id>,<vendor-class>
Map from a vendor-class string to a network id tag. Most DHCP clients provide a
"vendor class" which represents, in some sense, the type of host. This option
@@ -582,7 +620,12 @@ simple string. If an exact match is achieved between the circuit or
agent ID and one provided by a relay agent, the network-id tag is set.
.TP
.B --dhcp-subscrid=<network-id>,<subscriber-id>
-Map from RFC3993 subscriber-d relay agent options to network-id tags.
+Map from RFC3993 subscriber-id relay agent options to network-id tags.
+.TP
+.B --dhcp-match=<network-id>,<option number>
+Set the network-id tag if the client sends a DHCP option of the given
+number. This can be used to identify particular clients which send
+information using private option numbers.
.TP
.B \-J, --dhcp-ignore=<network-id>[,<network-id>]
When all the given network-ids match the set of network-ids derived
@@ -598,6 +641,13 @@ are always ignored, and DHCP hosts are added to the DNS using only
dhcp-host configuration in dnsmasq and the contents of /etc/hosts and
/etc/ethers.
.TP
+.B --dhcp-broadcast=<network-id>[,<network-id>]
+When all the given network-ids match the set of network-ids derived
+from the net, host, vendor and user classes, always use broadcast to
+communicate with the host when it is unconfigured. Most DHCP clients which
+need broadcast replies set a flag in their requests so that this
+happens automatically, some old BOOTP clients do not.
+.TP
.B \-M, --dhcp-boot=[net:<network-id>,]<filename>,[<servername>[,<server address>]]
Set BOOTP options to be returned by the DHCP server. Server name and
address are optional: if not provided, the name is left empty, and the
@@ -677,7 +727,9 @@ always stored in DNSMASQ_TIME_REMAINING.
If a lease used to have a hostname, which is
removed, an "old" event is generated with the new state of the lease,
ie no name, and the former name is provided in the environment
-variable DNSMASQ_OLD_HOSTNAME.
+variable DNSMASQ_OLD_HOSTNAME. DNSMASQ_INTERFACE stores the name of
+the interface on which the reuest arrived; this is not set for "old"
+actions when dnsmasq restarts.
All file decriptors are
closed except stdin, stdout and stderr which are open to /dev/null
(except in debug mode).
@@ -768,12 +820,23 @@ one file descriptor for each concurrent TFTP connection and one
file descriptor per unique file (plus a few others). So serving the
same file simultaneously to n clients will use require about n + 10 file
descriptors, serving different files simultaneously to n clients will
-require about (2*n) + 10 descriptors.
+require about (2*n) + 10 descriptors. If
+.B --tftp-port-range
+is given, that can affect the number of concurrent connections.
.TP
.B --tftp-no-blocksize
Stop the TFTP server from negotiating the "blocksize" option with a
client. Some buggy clients request this option but then behave badly
when it is granted.
+.TP
+.B --tftp-port-range=<start>,<end>
+A TFTP server listens on a well-known port (69) for connection initiation,
+but it also uses a dynamically-allocated port for each
+connection. Normally these are allocated by the OS, but this option
+specifies a range of ports for use by TFTP transfers. This can be
+useful when TFTP has to traverse a firewall. The start of the range
+cannot be lower than 1025 unless dnsmasq is running as root. The number
+of concurrent TFTP connections is limited by the size of the port range.
.TP
.B \-C, --conf-file=<file>
Specify a different configuration file. The conf-file option is also allowed in
@@ -800,8 +863,8 @@ in the OPTIONS section but without the leading "--". Lines starting with # are c
options which may only be specified once, the configuration file overrides
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.
+following escapes are allowed: \\\\ \\" \\t \\e \\b \\r and \\n. The later
+corresponding to tab, escape, backspace, return and newline.
.SH NOTES
When it receives a SIGHUP,
.B dnsmasq
@@ -809,7 +872,7 @@ clears its cache and then re-loads
.I /etc/hosts
and
.I /etc/ethers
-and any file given by --dhcp-hostsfile.
+and any file given by --dhcp-hostsfile, --dhcp-optsfile or --addn-hosts.
The dhcp lease change script is called for all
existing DHCP leases. If
.B
@@ -821,10 +884,12 @@ does NOT re-read the configuration file.
.PP
When it receives a SIGUSR1,
.B dnsmasq
-writes cache statistics to the system log. It writes the cache size,
+writes statistics to the system log. It writes the cache size,
the number of names which have had to removed from the cache before
they expired in order to make room for new names and the total number
-of names that have been inserted into the cache. In
+of names that have been inserted into the cache. For each upstream
+server it gives the number of queries sent, and the number which
+resulted in an error. In
.B --no-daemon
mode or when full logging is enabled (-q), a complete dump of the
contents of the cache is made.
diff --git a/man/es/dnsmasq.8 b/man/es/dnsmasq.8
index a871f31..e2cc9cd 100644
--- a/man/es/dnsmasq.8
+++ b/man/es/dnsmasq.8
@@ -55,6 +55,15 @@ cierto tiempo de vida (en segundos) para estas respuestas. Esto
reduce la carga sobre el servidor al costo de que los clientes
usaran datos añejos bajo algunas circunstancias.
.TP
+.B --neg-ttl=<tiempo>
+Respuestas negativas desde servidores upstream normalmente contienen
+información time-to-live (tiempo de vida) en expedientes SOA que
+dnsmasq usa para hacer caché. Si las respuestas de servidores upstream
+omiten esta información, dnsmasq no mete la respuesta en el caché.
+Esta opción brinda un valor predeterminado para el time-to-live que
+dnsmasq usa para meter respuestas en el caché aún en la ausencia de
+un expediente SOA.
+.TP
.B \-k, --keep-in-foreground
No ir hacia el fondo al iniciar, pero aparte de eso ejecutar como
normal. La intención de esto es para cuando dnsmasq es ejecutado
@@ -113,7 +122,8 @@ Mostrar el número de versión.
.TP
.B \-p, --port=<puerto>
Escuchar en el puerto <puerto> en vez del puerto estándar DNS (53).
-Principalmente útil para debugging.
+Fijar esto a cero deshabilita completamente la función DNS, dejando
+solo DHCP y/o TFTP.
.TP
.B \-P, --edns-packet-max=<tamaño>
Especificar el paquete UDP EDNS.0 más grande que es soportado por
@@ -263,6 +273,18 @@ cuales sabe que están activos. Fijar esta opción forza a dnsmasq a
probar cada búsqueda con cada servidor estrictamente en el orden
que aparecen en /etc/resolv.conf
.TP
+.B --all-servers
+Por predeterminado, cuando dnsmasq tiene más de un servidor upstream
+disponible, enviará búsquedas a solo un servidor. Fijar esta opción
+forza a dnsmasq a enviar todas las búsquedas a todos los servidores
+disponibles. La respuesta del servidor que responda primero será
+devuelta al solicitante original.
+.TP
+.B --stop-dns-rebind
+Denegar (y bitacorear) direcciones de servidores upstream que están
+dentro de rangos IP privados. Esto bloquea un ataque donde un navegador
+detrás de un firewall es usado para analizar máquinas en la red local.
+.TP
.B \-n, --no-poll
No revisar periodicamente a /etc/resolv.conf en busca de cambios.
.TP
@@ -277,7 +299,7 @@ sin puntos o partes de dominios, a servidores upstream. Si el nombre
no se conoce desde /etc/hosts o desde DHCP entonces una respuesta
"no encontrado" es devuelta.
.TP
-.B \-S, --local, --server=[/[<dominio>]/[dominio/]][<dirección IP>[#<puerto>][@<remitente>[#<puerto>]]]
+.B \-S, --local, --server=[/[<dominio>]/[dominio/]][<dirección IP>[#<puerto>][@<IP de remitente>|<interface>[#<puerto>]]
Especificar la dirección IP de servidores upstream directamente. Fijar
esta opción no suprime la lectura de /etc/resolv.conf, use -R para
hacer eso. Si uno a más dominios opcionales son brindados, ese servidor
@@ -307,14 +329,19 @@ es un sinónimo de
.B server
para hacer los archivos de configuración mas claros en este caso.
-La segunda dirección IP opcional después del carácter @ le dice
-a dnsmasq como fijar la dirección de remitente de las búsquedas
-hacia este servidor DNS. Debe ser una dirección perteneciente a
-la máquina en la cual corre dnsmasq, de forma contraria esta
-línea de servidor será bitacoreada y después ignorada. La opción
-query-port es ignorada para cualquier servidores que tengan una
-dirección remitente especificada, pero el puerto puede ser
-especificado directamente como parte de la dirección remitente.
+El string opcional despues del carácter @ le dice a dnsmasq como fijar
+el remitente de las búsquedas hacia este servidor DNS. Debe ser una
+dirección IP, la cual debe ser perteneciente a la máquina en la cual
+corre dnsmasq, de forma contraria esta línea de servidor será bitacoreada
+y después ignorada, o un nombre de interface. Si un nombre de interface
+es brindado, entonces búsquedas hacia el servidor serán forzadas vía esa
+interface; si una dirección IP es brindada, entonces la dirección de
+remitente de las búsquedas será fijada a esa dirección.
+La etiqueta query-port es ignorada para cualquier servidores que tengan
+una dirección remitente especificada, pero el puerto puede ser
+especificado directamente como parte de la dirección remitente. Forzar
+búsquedas a una interface no está implementado en todas las plataformas
+soportadas por dnsmasq.
.TP
.B \-A, --address=/<dominio>/[dominio/]<dirección IP>
Especificar una dirección IP para retornar por cualquier host en
@@ -498,6 +525,11 @@ el tipo ARP para Token-Ring es 6.
.B --dhcp-hostsfile=<archivo>
Leer información host DHCP desde el archivo especificado. El archivo contiene información de un host por línea. El formato de una línea es igual que texto hacia la derecha de '=' en --dhcp-host. La ventaja de almacenar información host DHCP en este archivo es que puede ser cambiada sin tener que reiniciar dnsmasq. El archivo será re-leído cuando dnsmasq recibe un SIGHUP.
.TP
+.B --dhcp-optsfile=<archivo>
+Leer información sobre opciones DHCP desde el archivo especificado. La
+ventaja de usar esta opción es la misma que con --dhcp-hostsfile: el
+archivo dhcp-optsfile será re-leído cuando dnsmasq recibe un SIGHUP.
+.TP
.B \-Z, --read-ethers
Leer /etc/ethers en busca de información sobre hosts para el servidor
DHCP. El formato de /etc/ethers es una dirección de hardware, seguida
@@ -580,6 +612,14 @@ excepto que la opción siempre será enviada, aún si el cliente no la pide en
la lista de pedido de parámetros. Esto se necesita aveces, por ejemplo cuando
enviando opciones a PXELinux.
.TP
+.B --dhcp-no-override
+Deshabilitar la reutilización de los campos DHCP de nombre de servidor y
+archivo como espacio para opciones extra. Si puede, dnsmasq mueve la información
+del servidor boot y del nombre de archivo (de dhcp-boot) de sus campos dedicados
+hacia opciones DHCP. Esto crea espacio extra en el paquete DHCP para opciones,
+pero puede raramente confundir clientes viejos o defectuosos. Esta opción forza
+comportamiento "simple y sencillo" para prevenir problemas en tales casos.
+.TP
.B \-U, --dhcp-vendorclass=<network-id>,<vendor-class>
Trazar desde un string vendor-class a un network id. La mayoría de los
clientes DHCP proveen una "vendor class" la cual representa, en cierto
@@ -619,6 +659,11 @@ network-id es fijado.
.B --dhcp-subscrid=<network-id>,<subscriber-id>
Trazar de opciones relay subscriber-id RFC3993 a opciones network-id.
.TP
+.B --dhcp-match=<network-id>,<número de opción>
+Fijar la opción network-id si el cliente envía un opción DHCP del nombre
+brindado. Esto puede ser utilizado para identificar clientes particulares
+que envían información usando números privados de opciones.
+.TP
.B \-J, --dhcp-ignore=<network-id>[,<network-id>]
Cuando todos los network ids brindados coincidan con el juego de
network ids derivados de las clases net, host, y vendor, ignorar
@@ -633,6 +678,14 @@ y en tal caso nombres de host proveidos por clientes DHCP siempre son
ignorados, y hosts DHCP son agregados al DNS usando solo la configuración
dhcp-host en dnsmasq y el contenido de /etc/hosts y /etc/ethers.
.TP
+.B --dhcp-broadcast=<network-id>[,<network-id>]
+Cuando todos los network-ids brindados coinciden con el juego de network-ids
+derivados de la red, host, clases de vendedor y usuarios, siempre usar
+broadcast para comunicarse con el host cuando está sin configurar. La
+mayoría de clientes DHCP que necesitan respuestas broadcast fijan una
+opción en sus pedidos para que esto pase automaticamente, algunos
+clientes BOOTP viejos no lo hacen.
+.TP
.B \-M, --dhcp-boot=[net:<network-id>,]<filename>,[<servername>[,<server address>]]
Fijar opciones BOOTP que han de ser devueltas por el servidor DHCP. Nombre
y dirección de servidor son opcionales: si no son brindadas, el nombre es
@@ -716,7 +769,9 @@ es almacenado en DNSMASQ_TIME_REMAINING.
Si un arriendo solía tener un nombre de host, el cual es removido, un
evento "old" es generado con el nuevo estado del arriendo, (por ejemplo, sin
nombre), y el nombre anterior es brindado en la variable de ambiente
-DNSMASQ_OLD_HOSTNAME.
+DNSMASQ_OLD_HOSTNAME. DNSMASQ_INTERFACE almacena el nombre de la interface
+en la cual llegó el pedido; esto no es fijado para acciones "viejas"
+cuando dnsmasq re-inicia.
Todos los descriptores de archivo están cerrados
excepto stdin, stdout, y stderr los cuales están abiertos a /dev/null
(excepto en modo debug).
@@ -812,13 +867,25 @@ un descriptor de archivo por cada coneccion TFTP concurrente, y por archivo
único (mas algunos otros). De tal manera que servirle el mismo archivo
simultáneo a n clientes requerirá el uso de n + 10 descriptores de archivo,
y servirles archivos diferentes simultáneamente requerirá (2*n) + 10
-descriptores.
+descriptores. Si
+.B --tftp-port-range
+es brindado, eso puede afectar el número de conexiones simultáneas.
.TP
.B --tftp-no-blocksize
No permitir que el servidor negocie la opción "blocksize" con un cliente.
Algunos clientes con errores piden esta opción pero se portán mal cuando se
les brinda.
.TP
+.B --tftp-port-range=<inicio>,<final>
+Un servidor TFTP escucha por inicios de conexión en un puerto bien conocido
+(69), pero tambien usa un puerto dinamicamente seleccionado para cada
+conexión. Normalmente estos son seleccionados por el sistema operativo,
+pero esta opción especifica un rango de puertos para ser usado por transferencias
+TFTP. Esto puede ser útil cuando TFTP tiene que pasar atraves de un firewall.
+El comienzo del rango no puede ser menor a 1025 a menos que dnsmasq esté corriendo
+como root. El número de conexiones simultáneas está limitado por el tamaño del
+rango de puertos.
+.TP
.B \-C, --conf-file=<archivo>
Especificar un archivo de configuración diferente. La opción conf-file
también es permitida en archivos de configuración, para incluir múltiples
@@ -845,8 +912,8 @@ y son ignoradas. Para opciones que solo pueden ser especificadas una
sola vez, el archivo de configuración invalida la línea de comandos.
Las comillas son permitidas en el archivo de configuración: entre comillas
tipo " los significados especiales de ,:. y # son eliminados y los
-siguientes escapes son permitidos: \\\\ \\" \\t \\a \\b \\r y \\n. El
-último corresponde a tab, bell, backspace, return y newline.
+siguientes escapes son permitidos: \\\\ \\" \\t \\e \\b \\r y \\n.
+Corresponden a tab, escape, backspace, return y newline.
.SH NOTAS
Al recibir un SIGHUP
.B dnsmasq
@@ -854,7 +921,8 @@ libera su cache y entonces recarga
.I /etc/hosts
y
.I /etc/ethers
-al igual que cualquier archivo brindado con --dhcp-hostsfile.
+al igual que cualquier archivo brindado con --dhcp-hostsfile, --dhcp-optsfile,
+o --addn-hosts.
El archivo guión de cambio de arriendos es llamado para todos los arriendos
DHCP existentes. Si
.B
@@ -866,10 +934,12 @@ NO re-lee el archivo de configuración.
.PP
Al recibir un SIGUSR1,
.B dnsmasq
-escribe estadísticas de caché a la bitácora del sistema. Escribe el tamaño
+escribe estadísticas a la bitácora del sistema. Escribe el tamaño
del caché, el numero de nombres que han tenido que ser removidos del
caché antes de que vencieran para hacer espacio para nombres nuevos, y el
-número total de nombres que han sido insertados en el caché. En modo
+número total de nombres que han sido insertados en el caché. Para cada
+servidor upstream brinda el número de búsquedas enviadas, y el
+número que resultaron en error. En modo
.B --no-daemon
o cuando bitacoréo completo está habilitado (-q), una descarga completa de
el contenido del caché es hecha.
diff --git a/man/fr/dnsmasq.8 b/man/fr/dnsmasq.8
new file mode 100644
index 0000000..c07aab5
--- /dev/null
+++ b/man/fr/dnsmasq.8
@@ -0,0 +1,1197 @@
+.TH DNSMASQ 8
+.SH NAME
+Dnsmasq \- Un serveur DHCP et cache DNS poids-plume.
+.SH SYNOPSIS
+.B dnsmasq
+.I [OPTION]...
+.SH "DESCRIPTION"
+.BR dnsmasq
+est un serveur DHCP et DNS à faible empreinte mémoire. Il offre à la fois les
+services DNS et DHCP pour un réseau local (LAN).
+.PP
+Dnsmasq accepte les requêtes DNS et y réponds soit en utilisant un petit cache
+local, soit en effectuant une requête à un serveur DNS récursif externe (par
+exemple celui de votre fournisseur d'accès internet). Il charge le contenu du
+fichier /etc/hosts afin que les noms locaux n'apparaissant pas dans les DNS
+globaux soient tout de même résolus, et assure également la résolution de nom
+pour les hôtes présents dans le service DHCP.
+.PP
+Le serveur DHCP Dnsmasq DHCP supporte les définitions d'adresses statiques, les
+réseaux multiples, le relai DHCP et les spécifications de sous-réseaux conformes
+à la RFC3011. Il envoie par défaut un jeu raisonnable de paramètres DHCP, et
+peut être configuré pour envoyer n'importe quel option DHCP.
+Il inclut un serveur TFTP sécurisé en lecture seule permettant le démarrage via
+le réseau/PXE de clients DHCP et supporte également le protocole BOOTP.
+.PP
+Dnsmasq supporte IPv6 pour le DNS mais pas pour le DHCP.
+.SH OPTIONS
+Notes : Il est possible d'utiliser des options sans leur donner de paramètre.
+Dans ce cas, la fonction correspondante sera désactivée. Par exemple
+.B --pid-file=
+(sans paramètre après le =) désactive l'écriture du fichier PID.
+Sur BSD, à moins que le logiciel ne soit compilé avec la bibliothèque GNU
+getopt, la forme longue des options ne fonctionne pas en ligne de commande; Elle
+est toujours supportée dans le fichier de configuration.
+.TP
+.B \-h, --no-hosts
+Ne pas charger les noms du fichier /etc/hosts.
+.TP
+.B \-H, --addn-hosts=<fichier>
+Fichiers d'hôtes additionnels. Lire le fichier spécifié en plus de /etc/hosts.
+Si
+.B -h
+est spécifié, lire uniquement le fichier spécifié. Cette option peut être
+répétée afin d'ajouter d'autres fichiers.
+.TP
+.B \-E, --expand-hosts
+Ajoute le nom de domaine aux noms simples (ne contenant pas de point dans le
+nom) contenus dans le fichier /etc/hosts, de la même façon que pour le service
+DHCP.
+.TP
+.B \-T, --local-ttl=<durée>
+Lorsque Dnsmasq répond avec une information provenant du fichier /etc/hosts ou
+avec un bail DHCP, il donne un temps de vie (time-to-live) positionné à zéro,
+afin d'indiquer à la machine faisant la requête que celle-ci ne doit pas être
+mise dans un cache. Ceci est le comportement correct dans presque toutes les
+situations.
+Cette option permet de spécifier la valeur de time-to-live à retourner (en
+secondes). Cela permet de réduire la charge sur le serveur, mais les clients
+risquent d'utiliser des données périmées dans certains cas.
+.TP
+.B \-k, --keep-in-foreground
+Ne pas aller en tâche de fond au lancement, mais en dehors de cela, fonctionner
+normalement. Ce mode est prévu pour les cas où Dnsmasq est lancé par daemontools
+ou launchd.
+.TP
+.B \-d, --no-daemon
+Mode debug (déverminage) : ne pas aller en tâche de fond, ne pas écrire de
+fichier pid, ne pas changer d'identifiant utilisateur, générer un état complet
+du cache lors de la réception d'un signal SIGUSR1, envoyer les logs sur la
+sortie standard d'erreur ("stderr") de même que dans le syslog, ne pas créer de
+processus fils pour traiter les requêtes TCP.
+.TP
+.B \-q, --log-queries
+Enregistrer les résultats des requêtes DNS traitées par Dnsmasq dans un fichier
+de traces ("logs"). Active la génération d'un état complet du cache lors de la
+réception d'un signal SIGUSR1.
+.TP
+.B \-8, --log-facility=<facility>
+Définit la "facility" dans laquelle Dnsmasq enverra ses entrées syslog, par
+défaut DAEMON ou LOCAL0 si le mode debug est activé. Si la "facility" contient
+au moins un caractère "/", alors Dnsmasq considère qu'il s'agit d'un fichier et
+enverra les logs dans le fichier correspondant à la place du syslog. (Les
+erreurs lors de la lecture de la configuration vont toujours vers le syslog,
+mais tous les messages postérieures à un démarrage réussi seront exclusivement
+envoyés vers le fichier de logs). Lorsque Dnsmasq est configuré pour envoyer
+ses traces vers un fichier, la réception d'un signal SIGUSR2 entraine la
+fermeture et réouverture du fichier. Cela permet la rotation de fichiers de
+traces sans nécessiter l'arrêt de Dnsmasq.
+.TP
+.B --log-async[=<lignes>]
+Permet l'envoi de traces de manière asynchrone, et de manière optionnelle, le
+nombre de lignes devant être mises dans la file d'attente par Dnsmasq lorsque
+l'écriture vers le syslog est lente.
+Dnsmasq peut envoyer ses logs de manière asynchrone : cela lui permet de
+continuer à fonctionner sans être bloqué par le syslog, et permet à syslog
+d'utiliser Dnsmasq pour les résolutions DNS sans risque d'interblocage.
+Si la file d'attente devient pleine, Dnsmasq loggera le dépassement de file et
+le nombre de messages perdus. La longueur par défaut de la file d'attente est de
+5 et une valeur saine sera comprise entre 5 et 25, avec une limite maximum
+imposée de 100.
+.TP
+.B \-x, --pid-file=<chemin>
+Spécifie un fichier dans lequel stocker le numéro de processus (pid). La valeur
+par défaut est /var/run/dnsmasq.pid.
+.TP
+.B \-u, --user=<nom d'utilisateur>
+Spécifie l'identité (nom d'utilisateur) prise par Dnsmasq après le démarrage.
+Dnsmasq doit normalement être démarré en temps que root ("super-utilisateur"),
+mais abandonne ses privilèges après le démarrage en changeant d'identité.
+Normalement cet utilisateur est l'utilisateur nobody ("personne"), mais il est
+possible d'en définir un autre par le biais de ce paramètre.
+.TP
+.B \-g, --group=<nom de groupe>
+Spécifie le groupe sous lequel Dnsmasq s'exécute. Par défaut, il s'agit du
+groupe "dip", afin de faciliter l'accès au fichier /etc/ppp/resolv.conf qui
+n'est en général pas en lecture par tout le monde.
+.TP
+.B \-v, --version
+Imprime le numéro de version.
+.TP
+.B \-p, --port=<port>
+Ecoute sur le port numéro <port> au lieu du port DNS standard (53). Cette option
+est essentiellement utile à des fins de déverminage ("debug").
+.TP
+.B \-P, --edns-packet-max=<taille>
+Spécifie la taille maximum de paquet UDP EDNS.0 supporté par le relai DNS. Le
+défaut est de 1280, qui est la valeur maximale
+recommandée pour ethernet dans la RFC2671.
+.TP
+.B \-Q, --query-port=<numéro de port>
+Envoie et écoute les requêtes DNS sortantes depuis le port UDP spécifié par
+<numéro de port>, et non sur un port défini lors de l'exécution. Cette option
+permet de simplifier les règles de garde-barrière ("firewall"). Sans cela en
+effet, votre garde-barrière serait obligé d'accepter les connexions depuis les
+serveurs DNS externes sur une plage de ports UDP, ou de s'adapter dynamiquement
+au port utilisé par l'instance courante de Dnsmasq.
+.TP
+.B \-i, --interface=<nom d'interface>
+N'écouter que sur l'interface réseau spécifiée. Dnsmasq aujoute automatiquement
+l'interface locale ("loopback") à la liste des interfaces lorsque l'option
+.B --interface
+est utilisée.
+Si aucune option
+.B --interface
+ou
+.B --listen-address
+n'est donnée, Dnsmasq écoutera sur toutes les interfaces disponibles sauf
+celle(s) spécifiée(s) par l'option
+.B --except-interface.
+Les alias d'interfaces IP (e-g "eth1:0") ne peuvent être utilisés ni avec
+.B --interface
+ni
+.B \--except-interface.
+Utiliser l'option
+.B --listen-address
+à la place.
+.TP
+.B \-I, --except-interface=<interface name>
+Ne pas écouter sur l'interface spécifiée. Notez que l'ordre dans lesquelles les
+options
+.B \--listen-address
+,
+.B --interface
+et
+.B --except-interface
+sont fournies n'importe pas, et que l'option
+.B --except-interface
+l'emporte toujours sur les autres.
+.TP
+.B \-2, --no-dhcp-interface=<nom d'interface>
+Ne pas fournir de service DHCP sur l'interface spécifiée, mais fournir tout de
+même le service DNS.
+.TP
+.B \-a, --listen-address=<adresse IP>
+Ecouter sur la ou les adresse(s) IP spécifiée(s). Les options
+.B \--interface
+et
+.B \--listen-address
+peuvent-être spécifiées simultanément, auquel cas un jeu d'interfaces et
+d'adresses seront utilisées. Notez que si
+aucune option
+.B \--interface
+n'est donnée alors qu'une option
+.B \--listen-address
+l'est, Dnsmasq n'écoutera pas automatiquement sur l'interface locale
+("loopback"). Pour activer l'écoute sur l'interface locale, il est alors
+nécessaire de fournir explicitement son adresse IP, 127.0.0.1 via l'option
+.B \--listen-address.
+.TP
+.B \-z, --bind-interfaces
+Sur les systèmes qui le supporte, Dnsmasq s'associe avec l'interface joker
+("wildcard"), même lorsqu'il ne doit écouter que sur certaines interfaces. Par
+la suite, il rejette les requêtes auxquelles il ne doit pas répondre. Cette
+situation présente l'avantage de fonctionner même lorsque les interfaces vont
+et viennent ou changent d'adresses. L'option
+.B --bind-interfaces
+force Dnsmasq à ne réellement s'associer qu'avec les interfaces sur lesquelles
+il doit écouter. L'un des seuls cas où cette option est utile est celui où un
+autre serveur de nom (ou une autre instance de Dnsmasq) tourne sur la même
+machine. Utiliser cette option permet également d'avoir plusieurs instances de
+Dnsmasq fournissant un service DHCP sur la même machine.
+.TP
+.B \-y, --localise-queries
+Retourne des réponses aux requêtes DNS dépendantes de l'interface sur laquelle
+la requête a été reçue, à partir du fichier /etc/hosts. Si un nom dans
+/etc/hosts a plus d'une adresse associée avec lui, et qu'une des adresses au
+moins est dans le même sous-réseau que l'interface sur laquelle la requête a été
+reçue, alors ne retourne que la(les) adresse(s) du sous-réseau considéré. Cela
+permet d'avoir dans /etc/hosts un serveur avec de multiples adresses, une pour
+chacune de ses interfaces, et de fournir aux hôtes l'adresse correcte (basée sur
+le réseau auquel ils sont attachés). Cette possibilité est actuellement limitée
+à IPv4.
+.TP
+.B \-b, --bogus-priv
+Fausse résolution inverse pour les réseaux privés. Toutes les requêtes DNS
+inverses pour des adresses IP privées (ie 192.168.x.x, etc...) qui ne sont pas
+trouvées dans /etc/hosts ou dans le fichier de baux DHCP se voient retournées
+une réponse "pas de tel domaine" ("no such domain") au lieu d'être transmises
+aux serveurs de nom amont ("upstream server").
+.TP
+.B \-V, --alias=<ancienne IP>,<nouvelle IP>[,<masque>]
+Modifie les adresses IPv4 retournées par les serveurs de nom amont;
+<ancienne IP> est remplacée par <nouvelle IP>. Si le <masque> optionnel est
+fourni, alors toute adresse correspondant à l'adresse <ancienne IP>/<masque>
+sera réécrite. Ainsi par exemple
+.B --alias=1.2.3.0,6.7.8.0,255.255.255.0
+modifiera 1.2.3.56 en 6.7.8.56 et 1.2.3.67 en 6.7.8.67.
+Cette fonctionnalité correspond à ce que les routeurs Cisco PIX appellent
+"bidouillage DNS" ("DNS doctoring").
+.TP
+.B \-B, --bogus-nxdomain=<adresse IP>
+Transforme les réponses contenant l'adresse IP fournie en réponses "pas de tel
+domaine" ("no such domain"). Ceci a pour but de neutraliser la modification
+sournoise mise en place par Verisign en septembre 2003, lorsqu'ils ont commencé
+à retourner l'adresse d'un serveur web publicitaire en réponse aux requêtes pour
+les noms de domaines non enregistrés, au lieu de la réponse correcte "NXDOMAIN".
+Cette option demande à Dnsmasq de retourner la réponse correcte lorsqu'il
+constate ce comportement. L'adresse retournée par Verisign en septembre 2003
+est 64.94.110.11.
+.TP
+.B \-f, --filterwin2k
+Les dernières versions de windows font des requêtes DNS périodiques auxquelles
+non seulement les serveurs DNS publics ne peuvent donner de réponse, mais qui,
+de surcroît, peuvent poser des problèmes en déclenchant des connexions
+intempestives pour des liens réseaux avec des connexions "à la demande". Fournir
+cette option active le filtrage des requêtes de ce type. Les requêtes bloquées
+sont les requêtes pour les entrées de type SOA ou SRV, ainsi que les requêtes de
+type ANY avec des noms possédant des caractères sous-lignés (requêtes pour des
+serveurs LDAP).
+.TP
+.B \-r, --resolv-file=<fichier>
+Lis les adresses des serveurs de nom amont dans le fichier de nom <fichier>,
+au lieu du fichier /etc/resolv.conf. Pour le format de ce fichier, voir dans le
+manuel pour
+.BR resolv.conf (5)
+les entrées correspondant aux serveurs de noms (nameserver). Dnsmasq peut lire
+plusieurs fichiers de type resolv.conf, le premier fichier spécifié remplace le
+fichier par défaut, le contenu des suivants est rajouté dans la liste des
+fichiers à consulter. Seul le fichier ayant la dernière date de modification
+sera chargé en mémoire.
+.TP
+.B \-R, --no-resolv
+Ne pas lire le contenu du fichier /etc/resolv.conf. N'obtenir l'adresse des
+serveurs de nom amont que depuis la ligne de commande ou le fichier de
+configuration de Dnsmasq.
+.TP
+.B \-1, --enable-dbus
+Autoriser la mise à jour de la configuration de Dnsmasq par le biais d'appel de
+méthodes DBus. Il est possible par ce biais de mettre à jour l'adresse de
+serveurs DNS amont (et les domaines correspondants) et de vider le cache. Cette
+option nécessite que Dnsmasq soit compilé avec le support DBus.
+.TP
+.B \-o, --strict-order
+Par défaut, Dnsmasq envoie les requêtes à n'importe lequel des serveurs amonts
+dont il a connaissance tout en essayant de favoriser les serveurs qu'il sait
+fonctionner. Cette option force Dnsmasq à essayer d'interroger, pour chaque
+requête, les serveurs DNS dans leur ordre d'apparition dans le fichier
+/etc/resolv.conf.
+.TP
+.B \-n, --no-poll
+Ne pas vérifier régulièrement si le fichier /etc/resolv.conf a été modifié.
+.TP
+.B --clear-on-reload
+Lorsque le fichier /etc/resolv.conf est relu, vider le cache DNS.
+Cela est utile si les nouveaux serveurs sont susceptibles d'avoir des données
+différentes de celles stockées dans le cache.
+.TP
+.B \-D, --domain-needed
+Indique à Dnsmasq de ne jamais transmettre en amont de requêtes pour des noms
+simples, ne comprenant donc ni points ni nom de domaine. Si un nom n'est pas
+dans /etc/hosts ou dans la liste des baux DHCP, alors une réponse de type
+"non trouvé" est renvoyée.
+.TP
+.B \-S, --local, --server=[/[<domaine>]/[domaine/]][<Adresse IP>[#<port>][@<Adresse IP source>[#<port>]]]
+Spécifie directement l'adresse IP d'un serveur de nom amont. Cette option ne
+supprime pas la lecture du fichier /etc/resolv.conf : utiliser pour cela
+l'option
+.B -R .
+Si un ou plusieurs nom(s) de domaine(s) optionnel(s) sont fournis, ce
+serveur sera uniquement utilisé uniquement pour ce(s) domaine(s), et toute
+requête concernant ce(s) domaine(s) sera adressée uniquement à ce serveur.
+Cette option est destinée aux serveurs de nom privés : si vous avez un serveur
+de nom sur votre réseau ayant pour adresse IP 192.168.1.1 et effectuant la
+résolution des noms de la forme xxx.internal.thekelleys.org.uk, alors
+.B -S /internal.thekelleys.org.uk/192.168.1.1
+enverra toutes les requêtes pour les machines internes vers ce serveur de nom,
+alors que toutes les autres requêtes seront adressées aux serveurs indiqués dans
+le fichier /etc/resolv.conf. Une spécification de nom de domaine vide,
+.B //
+possède le sens particulier de "pour les noms non qualifiés uniquement",
+c'est-à-dire les noms ne possédant pas de points. Un port non standard peut être
+rajouté à la suite des adresses IP en utilisant le caractère #. Plus d'une
+option
+.B -S
+est autorisée, en répétant les domaines et adresses IP comme requis.
+
+Il est également permis de donner une option
+.B -S
+avec un nom de domaine mais sans
+adresse IP; Cela informe Dnsmasq que le domaine est local et qu'il doit répondre
+aux requêtes le concernant depuis les entrées contenues dans le fichier
+/etc/hosts ou les baux DHCP, et ne doit en aucun cas transmettre les requêtes
+aux serveurs amonts.
+.B local
+est synonyme de
+.B server
+("serveur") afin de rendre plus claire l'utilisation de cette option pour cet
+usage particulier.
+
+La deuxième adresse IP optionnelle suivant le caractère @ permet de définir
+l'adresse source que Dnsmasq doit utiliser comme source pour les réponses à ce
+serveur de nom. Il doit s'agir d'une des adresses appartenant à la machine sur
+laquelle tourne Dnsmasq ou sinon la ligne sera ignorée et une erreur sera
+consignée dans le journal des événements. L'option
+.B query-port
+est ignorée pour tous les serveurs ayant une adresse source spécifiée, mais il
+est possible de la donner directement dans la spécification de l'adresse source.
+.TP
+.B \-A, --address=/<domaine>/[domaine/]<adresse IP>
+Spécifie une adresse IP à retourner pour toute requête pour les domaines fournis
+en option. Les requêtes pour ce(s) domaine(s) ne sont jamais transmises aux
+serveurs amonts et reçoivent comme réponse l'adresse IP spécifiée qui peut être
+une adresse IPv4 ou IPv6. Pour donner à la fois une adresse IPv4 et une adresse
+IPv6 pour un domaine, utiliser plusieurs options
+.B -A.
+Il faut noter que le
+contenu du fichier /etc/hosts et de celui des baux DHCP supplante ceci pour des
+noms individuels. Une utilisation courante de cette option est de rediriger la
+totalité du domaine doubleclick.net vers un serveur web local afin d'éviter les
+bannières publicitaires. La spécification de domaine fonctionne de la même façon
+que
+.B --server,
+avec la caractéristique supplémentaire que
+.B /#/
+coïncide avec tout domaine. Ainsi,
+.B --address=/#/1.2.3.4
+retournera 1.2.3.4 pour toute requête
+n'ayant de réponse ni dans /etc/hosts, ni dans les baux DHCP, et n'étant pas
+transmise à un serveur spécifique par le biais d'une directive
+.B --server.
+.TP
+.B \-m, --mx-host=<nom de l'hôte>[[,<nom du MX>],<préference>]
+Spécifie un enregistrement de type MX pour <nom de l'hôte> retournant le nom
+donné dans <nom du MX> (s'il est présent), ou sinon le nom spécifié dans
+l'option
+.B --mx-target
+si elle est présente. Sinon retourne le nom de la machine
+sur laquelle Dnsmasq tourne. La valeur par défaut (spécifiée dans l'option
+.B --mx-target
+) est utile dans un réseau local pour rediriger les courriers
+électroniques vers un serveur central. La valeur de préférence est optionnelle
+et vaut par défaut 1 si elle n'est pas spécifiée. Plus d'une entrée MX peut être
+fournie pour un hôte donné.
+.TP
+.B \-t, --mx-target=<nom d'hôte>
+Spécifie la réponse par défaut fournie par Dnsmasq pour les requêtes sur des
+enregistrements de type MX. Voir
+.B --mx-host.
+Si
+.B --mx-target
+est donné mais pas de
+.B --mx-host,
+alors Dnsmasq retourne comme réponse un enregistrement MX
+contenant le nom d'hôte spécifié dans l'option
+.B --mx-target
+pour toute requête
+concernant le MX de la machine sur laquelle tourne Dnsmasq.
+.TP
+.B \-e, --selfmx
+Définit, pour toutes les machines locales, un MX correspondant à l'hôte
+considéré. Les machines locales sont celles définies dans le fichier /etc/hosts
+ou dans un bail DHCP.
+.TP
+.B \-L, --localmx
+Définit, pour toutes les machines locales, un enregistrement MX pointant sur
+l'hôte spécifié par mx-target (ou la machine sur laquelle Dnsmasq tourne). Les
+machines locales sont celles définies dans le fichier /etc/hosts ou dans un bail
+DHCP.
+.TP
+.B \-W --srv-host=<_service>.<_protocole>.[<domaine>],[<cible>[,<port>[,<priorité>[,<poids>]]]]
+Spécifie un enregistrement DNS de type SRV. Voir la RFC2782 pour plus de
+détails. Si le champs <domaine> n'est pas fourni, prends par défaut la valeur
+fournie dans l'option
+.B --domain.
+La valeur par défaut pour le domaine est vide et le port par défaut est 1, alors
+que les poids et priorités par défaut sont 0. Attention lorsque vous transposez
+des valeurs issues d'une configuration BIND : les ports, poids et priorités sont
+dans un ordre différents. Pour un service/domaine donné, plus d'un
+enregistrement SRV est autorisé et tous les enregistrements qui coïncident sont
+retournés dans la réponse.
+.TP
+.B \-Y, --txt-record=<nom>[[,<texte>],<texte>]
+Définit un enregistrement DNS de type TXT. La valeur de l'enregistrement TXT est
+un ensemble de chaînes de caractères, donc un nombre variable de chaînes de
+caractères peuvent être spécifiées, séparées par des virgules.
+.TP
+.B --ptr-record=<nom>[,<cible>]
+Définit un enregistrement DNS de type PTR.
+.TP
+.B --interface-name=<nom>,<interface>
+Définit un entregistrement DNS associant le nom avec l'adresse primaire sur
+l'interface donnée en argument. Cette option spécifie un enregistrement de type
+A pour le nom donné en argument de la même façon que s'il était défini par une
+ligne de /etc/hosts, sauf que l'adresse n'est pas constante mais dépendante de
+l'interface définie. Si l'interface est inactive, non existante ou non
+configurée, une réponse vide est fournie. Un enregistrement inverse (PTR) est
+également créé par cette option, associant l'adresse de l'interface avec le nom.
+Plus d'un nom peut être associé à une interface donnée en répétant cette option
+plusieurs fois; dans ce cas, l'enregistrement inverse pointe vers le nom fourni
+dans la première instance de cette option.
+.TP
+.B \-c, --cache-size=<taille>
+Définit la taille du cache de Dnsmasq. La valeur par défaut est de 150 noms.
+Définir une valeur de zéro désactive le cache.
+.TP
+.B \-N, --no-negcache
+Désactive le "cache négatif". Le "cache négatif" permet à Dnsmasq de se souvenir
+des réponses de type "no such domain" fournies par les serveurs DNS en amont et
+de fournir les réponses sans avoir à re-transmettre les requêtes aux serveurs
+amont.
+.TP
+.B \-0, --dns-forward-max=<nombre de requêtes>
+Définit le nombre maximum de requêtes DNS simultanées. La valeur par défaut est
+150, ce qui devrait être suffisant dans la majorité des configurations. La seule
+situation identifiée dans laquelle cette valeur nécessite d'être augmentée est
+lorsqu'un serveur web a la résolution de nom activée pour l'enregistrement de
+son journal des requêtes, ce qui peut générer un nombre important de requêtes
+simultanées.
+.TP
+.B \-F, --dhcp-range=[[net:]identifiant de réseau,]<adresse de début>,<adresse de fin>[[,<masque de réseau>],<broadcast>][,<durée de bail par défaut>]
+Active le serveur DHCP. Les adresses seront données dans la plage comprise entre
+<adresse de début> et <adresse de fin> et à partir des adresses définies
+statiquement dans l'option
+.B dhcp-host.
+Si une durée de bail est donnée, alors les baux seront donnés pour cette
+durée. La durée de bail est donnée en secondes, en minutes (exemple : 45m),
+en heures (exemple : 1h) ou être la chaine de caractère "infinite" pour une
+durée indéterminée. Cette option peut être répétée, avec différentes adresses,
+pour activer le service DHCP sur plus d'un réseau. Pour des réseaux directement
+connectés (c'est-à-dire des réseaux dans lesquels la machine sur laquelle tourne
+Dnsmasq possède une interface), le masque de réseau est optionnel. Il est par
+contre requis pour les réseaux pour lesquels le service DHCP se fait via un
+relais DHCP ("relay agent"). L'adresse de broadcast est toujours optionnelle.
+
+Sur certains systèmes, Dnsmasq ne peut écouter que sur une interface lorsqu'il
+utilise DHCP, et le nom de l'interface doit être spécifié par l'option
+.B interface.
+Cette limitation affecte tous les systèmes OpenBSD avant la version 4.0. Il
+est toujours possible d'avoir plus d'une plage DHCP pour un même sous-réseau.
+
+L'identifiant de réseau optionnel est un label alphanumérique qui permet de
+marquer ce réseau afin de fournir des options DHCP spécifiques à chaque réseau.
+Lorsque préfixé par 'net:', la signification change est au lieu de définir un
+label, il définit le label pour laquelle la règle s'applique. Un seul label peut-
+être défini mais plusieurs labels peuvent coïncider.
+
+L'adresse de fin peut être remplacée par le mot-clef
+.B static
+("statique") qui indique à Dnsmasq d'activer le service DHCP pour le réseau
+spécifié, mais de ne pas activer l'allocation dynamique d'adresses IP. Seuls les
+hôtes possédant des adresses IP statiques fournies via
+.B dhcp-host
+ou présentes dans le fichier /etc/ethers seront alors servis par le DHCP.
+.TP
+.B \-G, --dhcp-host=[<adresse matérielle>][,id:<identifiant client>|*][,net:<identifiant de réseau>][,<adresse IP>][,<nom d'hôte>][,<durée de bail>][,ignore]
+Spécifie les paramètres DHCP relatifs à un hôte. Cela permet à une machine
+possédant une adresse matérielle spécifique de se voir toujours allouée les
+mêmes nom d'hôte, adresse IP et durée de bail. Un nom d'hôte spécifié comme
+ceci remplace le nom fourni par le client DHCP de la machine hôte. Il est
+également possible d'omettre l'adresse matérielle et d'inclure le nom d'hôte,
+auquel cas l'adresse IP et la durée de bail s'appliqueront à toute machine se
+réclamant de ce nom. Par exemple
+.B --dhcp-host=00:20:e0:3b:13:af,wap,infinite
+spécifie à Dnsmasq de fournir à la machine d'adresse matérielle
+00:20:e0:3b:13:af le nom, et un bail de durée indéterminée.
+
+.B --dhcp-host=lap,192.168.0.199
+spécifie à Dnsmasq d'allouer toujours à la machine portant le nom lap
+l'adresse IP 92.168.0.199. Les adresses allouées comme ceci ne sont pas
+contraintes dans une plage d'adresse spécifiée par une option --dhcp-range, mais
+elles doivent être sur un réseau servi par le serveur DHCP. Il est possible
+d'utiliser des identifiants clients plutôt que des adresses matérielles pour
+identifier les hôtes, en préfixant par ceux-ci par 'id:'. Ainsi,
+.B --dhcp-host=id:01:02:03:04,.....
+réfère à l'hôte d'identifiant 01:02:03:04. Il est également possible de
+spécifier l'identifiant client sous la forme d'une chaîne de caractères, comme
+ceci :
+.B --dhcp-host=id:identifiantclientsousformedechaine,.....
+L'option spéciale id:* signifie : "ignorer tout identifiant client et n'utiliser
+que l'adresse matérielle". Cela est utile lorsqu'un client présente un
+identifiant client mais pas les autres.
+
+Si un nom apparaît dans /etc/hosts, l'adresse associée peut être allouée à un
+bail DHCP mais seulement si une option
+.B --dhcp-host
+spécifiant le nom existe par ailleurs. Le mot clef "ignore" ("ignorer") indique
+à Dnsmasq de ne jamais fournir de bail DHCP à une machine. La machine peut être
+spécifiée par son adresse matérielle, son identifiant client ou son nom d'hôte.
+Par exemple
+.B --dhcp-host=00:20:e0:3b:13:af,ignore
+Cela est utile lorsqu'un autre serveur DHCP sur le réseau doit être utilisé par
+certaines machines. Le paramètre net:<identifiant réseau> permet de définir un
+identifiant de réseau lorsque l'option dhcp-host est utilisée. Cela peut servir
+à sélectionner des options DHCP juste pour cet hôte. Lorsqu'une machine coïncide
+avec une directive dhcp-host (ou une impliquée par /etc/ethers), alors
+l'identifiant réseau réservé "known" ("connu") est associé. Cela permet à
+Dnsmasq d'être configuré pour ignorer les requêtes issus de machines inconnue
+ par le biais de
+.B --dhcp-ignore=#known.
+
+Les adresses ethernet (mais pas les identifiants clients) peuvent être définies
+avec des octets joker, ainsi par exemple
+.B --dhcp-host=00:20:e0:3b:13:*,ignore
+demande à Dnsmasq d'ignorer une gamme d'adresses matérielles. Il est à noter
+que "*" doit-être précédé d'un caractère d'échappement ou mis entre guillemets
+lorsque spécifié en option de ligne de commande, mais pas dans le fichier de
+configuration. Les adresses matérielles coïncident en principe avec n'importe
+quel type de réseau (ARP), mais il est possible de les limiter à un seul type
+ARP en les précédant du type ARP (en Hexadécimal) et de "-". Ainsi
+.B --dhcp-host=06-00:20:e0:3b:13:af,1.2.3.4
+coïncidera uniquement avec des adresses matérielles Token-Ring, puisque le type
+ARP pour une adresse Token-Ring est 6.
+.TP
+.B --dhcp-hostsfile=<fichier>
+Lis les informations d'hôtes DHCP dans le fichier spécifié. Le fichier contient
+des informations à raison d'un hôte par ligne. Le format d'une ligne est la même
+que le texte fourni à la droite sur caractère "=" dans l'option
+.B --dhcp-host.
+L'avantage de stocker les informations sur les hôtes DHCP dans ce fichier est
+que celles-ci peuvent être modifiées sans recharger Dnsmasq; le fichier sera
+relu lorsque Dnsmasq reçoit un signal SIGHUP.
+.TP
+.B \-Z, --read-ethers
+Lis les informations d'hôtes DHCP dans le fichier /etc/ethers. Le format de
+/etc/ethers est une adresse matérielle suivie, soit par un nom d'hôte, soit par
+une adresse IP sous la forme de 4 chiffres séparés par des points. Lorsque lu
+par Dnsmasq, ces lignes ont exactement le même effet que l'option
+.B --dhcp-host
+contenant les mêmes informations. /etc/ethers est relu à la réception d'un
+signal SIGHUP par Dnsmasq.
+.TP
+.B \-O, --dhcp-option=[<identifiant_de_réseau>,[<identifiant_de_réseau>,]][vendor:[<classe_vendeur>],][<opt>|option:<nom d'option>],[<valeur>[,<valeur>]]
+Spécifie des options différentes ou supplémentaires pour des clients DHCP. Par
+défaut, Dnsmasq envoie un ensemble standard d'options aux clients DHCP : le
+masque de réseau et l'adresse de broadcast sont les mêmes que pour l'hôte
+sur lequel tourne Dnsmasq, et le serveur DNS ainsi que la route par défaut
+prennent comme valeur l'adresse de la machine sur laquelle tourne Dnsmasq. Si
+une option de nom de domaine a été définie, son contenu est transmis. Cette
+option de configuration permet de changer toutes ces valeurs par défaut, ou de
+spécifier d'autres options. L'option DHCP à transmettre peut être fournie sous
+forme d'un nombre décimal ou sous la forme "option:<nom d'option>". Les nombres
+correspondants aux options sont définis dans la RFC2132 et suivants. Les noms
+d'options connus par Dnsmasq peuvent être obtenus via "Dnsmasq --help dhcp".
+Par exemple, pour définir la route par défaut à 192.168.4.4, il est possible de
+faire
+.B --dhcp-option=3,192.168.4.4
+ou
+.B --dhcp-option = option:router, 192.168.4.4
+ou encore, pour positionner l'adresse du serveur de temps à 192.168.0.4, on peut
+faire
+.B --dhcp-option = 42,192.168.0.4
+ou
+.B --dhcp-option = option:ntp-server, 192.168.0.4
+L'adresse 0.0.0.0 prends ici le sens "d'adresse de la machine sur laquelle
+tourne Dnsmasq". Les types de données autorisées sont des adresses IP sous la
+forme de 4 chiffres séparés par des points, un nombre décimal, une liste de
+caractères hexadécimaux séparés par des 2 points, ou une chaîne de caractères.
+Si des identifiants de réseaux sont fournis, alors cette option n'est envoyée
+qu'aux réseaux dont tous les identifiants coïncident.
+
+Un traitement spécial est effectué sur les chaînes de caractères fournies pour
+l'option 119, conformément à la RFC 3397. Les chaînes de caractères ou les
+adresses IP sous forme de 4 chiffres séparés par des points donnés en arguments
+de l'option 120 sont traités conforméments à la RFC 3361. Les adresses IP sous
+forme de 4 chiffres séparés par des points suivies par une barre montante "/",
+puis une taille de masque sont encodés conforméments à la RFC 3442.
+
+Attention : aucun test n'étant fait pour vérifier que des données d'un type
+adéquat sont envoyées pour un numéro d'option donné, il est tout à fait possible
+de persuader Dnsmasq de générer des paquets DHCP illégaux par une utilisation
+incorrecte de cette option. Lorsque la valeur est un nombre décimal, Dnsmasq
+doit déterminer la taille des données. Cela est fait en examinant le numéro de
+l'option et/ou la valeur, mais peut-être évité en rajoutant un suffixe d'une
+lettre comme suit :
+b = un octet, s = 2 octets, i = 4 octets. Cela sert essentiellement pour des
+options encapsulées de classes de vendeurs (voir plus bas), pour lesquelles
+Dnsmasq ne peut déterminer la taille de la valeur. Les données d'options
+consistant uniquement de points et de décimaux sont interprétées par Dnsmasq
+comme des adresses IP, et envoyées comme telles. Pour forcer l'envoi sous forme
+de chaîne de caractère, il est nécessaire d'utiliser des guillemets doubles. Par
+exemple, l'utilisation de l'option 66 pour fournir une adresse IP sous la forme
+d'une chaîne de caractères comme nom de serveur TFTP, il est nécessaire de faire
+comme suit :
+.B --dhcp-option=66,"1.2.3.4"
+
+Les options encapsulées de classes de vendeurs peuvent-être aussi spécifiées en
+utilisant
+.B --dhcp-option
+: par exemple
+.B --dhcp-option=vendor:PXEClient,1,0.0.0.0
+envoie l'option encapsulée de classe de vendeur "mftp-address=0.0.0.0" à
+n'importe quel client dont la classe de vendeur correspond à "PXEClient". La
+correspondance pour les classes de vendeur s'effectue sur des sous-chaînes de
+caractères (voir
+.B --dhcp-vendorclass
+pour plus de détails). Si une option de
+classe de vendeur (numéro 60) est envoyée par Dnsmasq, alors cela est utilisé
+pour sélectionner les options encapsulées, de préférence à toute option envoyée
+par le client. Il est possible d'omettre complètement une classe de vendeur :
+.B --dhcp-option=vendor:,1,0.0.0.0
+Dans ce cas l'option encapsulée est toujours envoyée.
+L'adresse 0.0.0.0 n'est pas traitée de manière particulière lorsque fournie dans
+une option encapsulée de classe de vendeur.
+.TP
+.B --dhcp-option-force=[<identifiant de réseau>,[<identifiant de réseau>,]][vendor:[<classe de vendeur>],]<opt>,[<valeur>[,<valeur>]]
+Cela fonctionne exactement de la même façon que
+.B --dhcp-option
+sauf que cette option sera toujours envoyée, même si le client ne la demande pas
+dans la liste de paramêtres requis. Cela est parfois nécessaire, par exemple lors
+de la fourniture d'options à PXELinux.
+.TP
+.B \-U, --dhcp-vendorclass=<identifiant de réseau>,<classe de vendeur>
+Associe une chaîne de classe de vendeur à un indentifiant de réseau. La plupart
+des clients DHCP fournissent une "classe de vendeur" ("vendor class") qui
+représente, d'une certaine façon, le type d'hôte. Cette option associe des
+classes de vendeur à des labels, de telle sorte que des options DHCP peuvent-être
+fournie de manière sélective aux différentes classes d'hôtes. Par exemple,
+.B dhcp-vendorclass=printers,Hewlett-Packard JetDirect
+permet de n'allouer des options qu'aux imprimantes HP de la manière suivante :
+.B --dhcp-option=printers,3,192.168.4.4
+La chaîne de caractères de la classe de vendeur founie en argument est cherchée
+en temps que sous-chaîne de caractères au sein de la classe de vendeur fournie
+par le client, de façon à permettre la recherche d'un sous-ensemble de la chaîne
+de caractères ("fuzzy matching").
+.TP
+.B \-j, --dhcp-userclass=<identifiant de réseau>,<classe utilisateur>
+Associe une chaîne de classe d'utilisateur à un identifiant réseau (effectue la
+recherche sur des sous-chaînes, comme pour les classes de vendeur). La plupart
+des clients permettent de configurer une "classe d'utilisateur". Cette option
+associe une classe d'utilisateur à un label, de telle manière qu'il soit
+possible de fournir des options DHCP spécifiques à différentes classes d'hôtes.
+Il est possible, par exemple, d'utiliser ceci pour définir un serveur
+d'impression différent pour les hôtes de la classe "comptes" et ceux de la
+classe "ingénierie".
+.TP
+.B \-4, --dhcp-mac=<identifiant de réseau>,<adresse MAC>
+Associe une adresse matérielle (MAC) à un identifiant réseau. L'adresse
+matérielle peut inclure des jokers. Par exemple
+.B --dhcp-mac=3com,01:34:23:*:*:*
+permet de définir le label "3com" pour n'importe quel hôte dont l'adresse
+matérielle coïncide avec les critères définis.
+.TP
+.B --dhcp-circuitid=<identifiant de réseau>,<identifiant de circuit>, --dhcp-remoteid=<identifiant de réseau>,<identifiant distant>
+Associe des options de relais DHCP issus de la RFC3046 à des identifiants de
+réseau. Cette information peut-être fournie par des relais DHCP. L'identifiant
+de circuit ou l'identifiant distant est normalement fourni sous la forme d'une
+chaîne de valeurs hexadécimales séparées par des ":", mais il est également
+possible qu'elle le soit sous la forme d'une simple chaîne de caractères. Si
+l'identifiant de circuit ou d'agent correspond exactement à celui fourni par le
+relais DHCP, alors l'identifiant de réseau est positionné.
+.TP
+.B --dhcp-subscrid=<identifiant de réseau>,<identifiant d'abonné>
+Associe des options de relais DHCP issues de la RFC3993 à des identifiants de
+réseau.
+.TP
+.B \-J, --dhcp-ignore=<identifiant de réseau>[,<identifiant de réseau>]
+Lorsque tous les identifiants de réseau fournis coïncident avec la liste
+d'identifiants réseau dérivée des classes de réseau, hôte, vendeur et
+utilisateur, ignorer l'hôte et ne pas donner de bail DHCP.
+.TP
+.B --dhcp-ignore-names[=<identifiant de réseau>[,<identifiant de réseau>]]
+Lorsque tous les identifiant de réseau coïncident avec la liste d'identifiants
+réseau dérivées des classes de réseau, hôte, vendeur et utilisateur, ignorer le
+nom de machine fourni par l'hôte. Il est à noter que, à la différence de
+l'option "dhcp-ignore", il est permis de ne pas fournir d'identifiant réseau.
+Dans ce cas, les noms d'hôtes fournis par les clients DHCP seront toujours
+ignorés, et les noms d'hôtes seront ajoutés au DNS en utilisant uniquement la
+configuration dhcp-host de Dnsmasq, ainsi que le contenu des fichiers /etc/hosts
+et /etc/ethers.
+.TP
+.B \-M, --dhcp-boot=[net:<identifiant de réseau>,]<nom de fichier>,[<nom de serveur>[,<adresse de serveur>]]
+Spécifie les options BOOTP devant être retournées par le serveur DHCP. Le nom de
+serveur ainsi que l'adresse sont optionnels : s'ils ne sont pas fournis, le nom
+est laissé vide et l'adresse fournie est celle de la machine sur laquelle
+s'exécute Dnsmasq. Si Dnsmasq founit un service TFTP (voir
+.B --enable-tftp
+), alors seul un nom de fichier est requis ici pour permettre un démarrage par
+le réseau.
+Si d'éventuels identifiants de réseau sont fournis, ils doivent coïncider avec
+ceux du client pour que cet élement de configuration lui soit envoyé. Il est à
+noter que les identifiants de réseau doivent-être préfixés par "net:".
+.TP
+.B \-X, --dhcp-lease-max=<nombre>
+Limite Dnsmasq à un maximum de <nombre> baux DHCP. Le défaut est de 150. Cette
+limite permet d'éviter des attaques de déni de service ("DoS") par des hôtes
+créant des milliers de baux et utilisant beaucoup de mémoire dans le processus
+Dnsmasq.
+.TP
+.B \-K, --dhcp-authoritative
+Cette option doit être donnée lorsque Dnsmasq est le seul serveur DHCP sur le
+réseau. Cela change le comportement par défaut qui est celui d'un strict respect
+des RFC, afin que les requêtes DHCP pour des baux inconnus par des hôtes
+inconnus ne soient pas ignorées. Cela permet à de nouveaux hôtes d'obtenir des
+baux sans tenir compte de fastidieuses temporisations ("timeout"). Cela permet
+également à Dnsmasq de reconstruire sa base de donnée contenant les baux sans
+que les clients n'aient besoin de redemander un bail, si celle-ci est perdue.
+.TP
+.B \-3, --bootp-dynamic
+Permet l'allocation dynamique d'adresses IP à des clients BOOTP. Utiliser cette
+option avec précaution, une adresse allouée à un client BOOTP étant perpétuelle,
+et de fait n'est plus disponibles pour d'autres hôtes.
+.TP
+.B \-5, --no-ping
+Par défaut, le serveur DHCP tente de s'assurer qu'une adresse n'est pas utilisée
+avant de l'allouer à un hôte. Cela est fait en envoyant une requête ICMP de type
+"echo request" (aussi connue sous le nom de "ping") à l'adresse en question. Si
+le serveur obtient une réponse, alors l'adresse doit déjà être utilisée et une
+autre est essayée. Cette option permet de supprimer cette vérification. A
+utiliser avec précaution.
+.TP
+.B --log-dhcp
+Traces additionnelles pour le service DHCP : enregistre toutes les options
+envoyées aux clients DHCP et les identifiants de réseaux utilisés pour la
+détermination de celles-ci.
+.TP
+.B \-l, --dhcp-leasefile=<chemin de fichier>
+Utilise le fichier dont le chemin est fourni pour stocker les informations de
+baux DHCP. Si cette option est fournie mais qu'aucune option de type dhcp-range
+n'est donnée, alors un comportement de type Dnsmasq version 1 est activé. Le
+fichier fourni est supposé être un fichier de baux DHCP de type ISC DHCPD et est
+parcouru à la recherche de baux contenant des noms d'hôtes. Les noms trouvés
+sont rajoutés au DNS. Cette fonctionalité peut être exclue de Dnsmasq à la
+compilation, auquel cas une erreur sera produite. Il est à noter que
+l'intégration avec un fichier de baux au format ISC est une fonctionalité
+obsolète. Elle ne devrait pas être utilisée dans les nouvelles installations et
+sera retirée dans une future version.
+.TP
+.B \-6 --dhcp-script=<chemin de fichier>
+Lorsqu'un bail DHCP est créé, ou qu'un ancien est supprimé, le fichier dont le
+chemin est spécifié est exécuté. Les arguments fournis à celui-ci sont soit
+"add" ("ajouter"), "old" ("ancien") ou "del" ("supprimer"), suivi de l'adresse
+MAC de l'hôte (ou "<null>") puis l'adresse IP et le nom d'hôte si celui-ci est
+connu."add" signifie qu'un bail a été créé, "del" signifie qu'il a été supprimé,
+"old" notifie que le bail existait au lancement de Dnsmasq, ou un changement
+d'adresse MAC ou de nom d'hôte pour un bail existant (ou, dans le cas où
+leasefile-ro est spécifié, un changement de durée de bail ou d'identifiant
+d'hôte). Le processus est exécuté en temps que super-utilisateur (si Dnsmasq a
+été lancé en temps que "root"), même si Dnsmasq est configuré pour changer son
+UID pour celle d'un utilisateur non-privilégié. L'environnement est hérité de
+celui de l'invocation du processus Dnsmasq, et si l'hôte fournit un identifiant
+de client, celui-ci est stocké dans la variable d'environnement
+DNSMASQ_CLIENT_ID. Si le client fournit une information de classe de vendeur ou
+de classe d'utilisateur, celles-ci sont positionnées dans les variables
+DNSMASQ_VENDOR_CLASS et DNSMASQ_USER_CLASS0 à DNSMASQ_USER_CLASSn
+respectivement, mais seulement pour les actions "add" et "old" lorsqu'un hôte
+reprend un bail existant, ces variables n'étant pas stockées dans la base de
+baux de Dnsmasq. Si Dnsmasq a été compilé avec l'option HAVE_BROKEN_RTC
+("horloge RTC défectueuse"), alors la durée du bail (en secondes) est stockée
+dans la variable DNSMASQ_LEASE_LENGTH, sinon la date d'expiration du bail est
+toujours stocké dans la variable d'environnement DNSMASQ_LEASE_EXPIRES. Le
+nombre de secondes avant expiration est toujours stocké dans
+DNSMASQ_TIME_REMAINING. Si un bail était associé à un nom d'hôte et que celui-ci
+est supprimé, un évênement de type "old" est généré avec le nouveau statut du
+bail, c-à-d sans nom d'hôte, et le nom initial est fourni dans la variable
+d'environnement DNSMASQ_OLD_HOSTNAME.
+Tous les descripteurs de fichiers sont fermés, sauf stdin, stdout et stderr qui
+sont ouverts sur /dev/null (sauf en mode déverminage).
+Le script n'est pas lancé de manière concurrente : si un autre changement de
+bail intervient, le script ne sera relancé que lorsque l'exécution actuelle sera
+terminée.
+Au démarrage de Dnsmasq, le script sera invoqué pour chacun des baux existants
+dans le fichier des baux. Le script sera lancé avec l'action "del" pour les baux
+expirés, et "old" pour les autres. <chemin de fichier> doit être un chemin
+absolu (c'est-à-dire partant de la racine "/"), aucune recherche n'aura lieu
+dans les répertoires de la variable d'environnement PATH. Lorsque Dnsmasq reçoit
+un signal HUP, le script sera invoqué avec une action "old" pour tous les baux
+existants.
+.TP
+.B \-9, --leasefile-ro
+Supprimer complètement l'usage du fichier servant de base de donnée pour les
+baux DHCP. Le fichier ne sera ni créé, ni lu, ni écrit. Change la façon dont le
+script de changement d'état de bail est lancé (si celui-ci est fourni par le
+biais de l'option
+.B --dhcp-script
+), de sorte que la base de données de baux puisse
+être complètement gérée par le script sur un stockage externe. En addition aux
+actions décrites dans
+.B --dhcp-script,
+le script de changement d'état de bail est appellé une fois, au lancement de
+Dnsmasq, avec pour seul argument "init". Lorsqu'appellé de la sorte, le script
+doit fournir l'état de la base de baux, dans le format de fichier de baux de
+Dnsmasq, sur sa sortie standard (stdout) et retourner un code de retour de 0.
+Positionner cette option provoque également une invocation du script de
+changement d'état de bail à chaque changement de l'identifiant de client, de
+longueur de bail ou de date d'expiration.
+.TP
+.B --bridge-interface=<interface>,<alias>[,<alias>]
+Traiter les requêtes DHCP arrivant sur n'importe laquelle des interfaces <alias>
+comme si elles arrivaient de l'interface <interface>. Cette option est
+uniquement disponible sous FreeBSD et DragonflyBSD, et est uniquement nécessaire
+lors de l'utilisation de pont ethernet "ancien mode", puisque dans ce cas les
+paquets arrivent sur des interfaces "tap" n'ayant pas d'adresse IP.
+.TP
+.B \-s, --domain=<domaine>
+Spécifie le domaine du serveur DHCP. Cela a deux effets; tout d'abord, le
+serveur DHCP retourne le domaine à tous les hôtes le demandant, deuxièmement,
+cela spécifie le domaine valide pour les hôtes DHCP configurés. Le but de cela
+est de contraindre les noms d'hôte afin qu'aucun hôte sur le LAN ne puisse
+fournir via DHCP un nom tel que par exemple "microsoft.com" et capturer du
+trafic de manière illégitime. Si aucun nom de domaine n'est spécifié, alors
+les noms d'hôtes avec un nom de domaine (c-à-d un point dans le nom) seront
+interdits et enregistrés dans le journal (logs). Si un suffixe est fourni, alors
+les noms d'hôtes possédant un domaine sont autorisés, pour peu que le nom de
+domaine coïncide avec le nom fourni. De plus, si un suffixe est fourni, alors
+les noms d'hôtes ne possédant pas de nom de domain se voient rajouter le
+suffixe fourni dans l'option
+.B --domain.
+Ainsi, sur mon réseau, je peux configurer
+.B --domain=thekelleys.org.uk
+et avoir une machine dont le nom DHCP serait "laptop". L'adresse IP de cette
+machine sera disponible à la fois pour "laptop" et "laptop.thekelleys.org.uk".
+Si la valeur fournie pour <domaine> est "#", alors le nom de domaine est
+positionné à la première valeur de la directive "search" du fichier
+/etc/resolv.conf (ou équivalent).
+.TP
+.B --enable-tftp
+Active la fonction serveur TFTP. Celui-ci est de manière délibérée limité aux
+fonctions nécessaires au démarrage par le réseau ("net-boot") d'un client : seul
+un accès en lecture est possible, et uniquement en mode binaire/octet. Les
+extensions tsize et blksize sont supportées.
+.TP
+.B --tftp-root=<répertoire>
+Les fichiers à fournir dans les transferts TFTP seront cherchés en prenant le
+répertoire fourni comme racine. Lorsque cela est fourni, les chemins TFTP
+incluant ".." sont rejetés, afin d'éviter que les clients ne puissent sortir de
+la racine spécifiée. Les chemins absolus (commençant par "/") sont autorisés,
+mais ils doivent être à la racine TFTP fournie.
+.TP
+.B --tftp-unique-root
+Ajouter l'adresse IP du client TFTP en temps qu'élément de chemin, à la suite
+de la racine tftp (adresse sous forme de 4 chiffres séparés par des points).
+Uniquement valable si une racine TFTP est spécifiée et si le répertoire
+correspond existe. Ainsi, si la valeur pour tftp-root est "/tftp" et que le
+client d'adresse IP 1.2.3.4 requiert le fichier "monfichier", alors le chemin
+effective résultant sera "/tftp/1.2.3.4/monfichier" si /tftp/1.2.3.4 existe, ou
+"/tftp/monfichier" dans le cas contraire.
+.TP
+.B --tftp-secure
+Active le mode TFTP sécurisé : sans cela, tout fichier lisible
+par Dnsmasq est disponible via TFTP (les règles de contrôle d'accès unix
+habituelles s'appliquent). Lorsque l'option
+.B --tftp-secure
+est spécifiée, seuls les fichiers possédés par l'utilisateur sous lequel tourne
+le processus Dnsmasq sont accessibles. Si Dnsmasq est exécuté en temps que
+super-utilisateur ("root"), des règles différentes s'appliquent :
+.B --tftp-secure
+n'a aucun effet, mais seuls les fichiers ayant un droit de lecture pour tout le
+monde sont accessibles. Il n'est pas recommandé d'exécuter Dnsmasq sous
+l'utilisateur "root" lorsque le service TFTP est activé, et il est formellement
+déconseillé de le faire sans fournir l'option
+.B --tftp-root.
+Sans cela, en effet, l'accès de tous les fichiers du serveur pour lequel le
+droit de lecture pour tout le monde est positionné ("world-readable") devient
+possible par n'importe quel hôte sur le réseau.
+.TP
+.B --tftp-max=<connexions>
+Définit le nombre maximum de connexions TFTP simultanées autorisées. La valeur
+par défaut est de 50. Lorsqu'un grand nombre de connexions TFTP est spécifié,
+il se peut que la limite de nombre de descripteurs de fichiers par processus
+soit atteinte. Dnsmasq nécessite quelques descripteurs de fichiers, ainsi qu'un
+descripteur de fichier pour chaque connexion TFTP simultanée et pour chacun des
+fichiers devant être fournis. De fait, servir le même fichier à n clients ne
+nécessitera qu'environ n + 10 descripteurs de fichiers, alors que fournir des
+fichiers tous différents à n clients utilisera environ (2*n) + 10 descripteurs.
+.TP
+.B --tftp-no-blocksize
+Empêche le serveur TFTP de négocier l'option "blocksize" (taille de bloc) avec
+les clients. Certains clients buggés spécifient cette option mais se comportent
+ensuite de manière incorrecte si celle-ci est accordée.
+.TP
+.B --tftp-port-range=<début>,<fin>
+Un serveur TFTP écoute sur un numéro de port bien connu (69) pour l'initiation
+de la connexion, et alloue dynamiquement un port pour chaque connexion. Ces
+numéros de ports sont en principe alloués par le système d'exploitation, mais
+cette option permet de spécifier une gamme de ports à utiliser pour les
+transferts TFTP. Cela peut-être utile lorsque ceux-ci doivent traverser un
+dispositif garde-barrière ("firewall"). Le début de la plage ne peut-être
+inférieur à 1024 à moins que Dnsmasq ne fonctionne en temps que
+super-utilisateur ("root"). Le nombre maximal de connexions TFTP concurrentes
+est limitée par la taille de la plage de ports ainsi définie.
+.TP
+.B \-C, --conf-file=<fichier>
+Spécifie un fichier de configuration différent. L'option "conf-file" est
+également autorisée dans des fichiers de configuration, ce qui permet
+l'inclusion de multiples fichiers de configuration.
+.TP
+.B \-7, --conf-dir=<répertoire>
+Lis tous les fichiers du répertoire spécifié et les traite comme des fichiers de
+configuration. Les fichiers dont les noms se terminent en ~ ou commençant par .,
+ainsi que ceux commençant ou se terminant par # ne sont pas pris en compte.
+Cette option peut être donnée en ligne de commande ou dans un fichier de
+configuration.
+.SH FICHIER DE CONFIGURATION
+Au démarrage, Dnsmasq lis
+.I /etc/dnsmasq.conf,
+si ce fichier existe. (Sur FreeBSD, ce fichier est
+.I /usr/local/etc/dnsmasq.conf
+) (voir cependant les options
+.B \-C
+et
+.B \-7
+). Le format de ce fichier consiste en une option par ligne, exactement comme
+les options longues détaillées dans la section OPTIONS, mais sans être précédées
+par "--". Les lignes commençant par # sont des commentaires et sont ignorées.
+Pour les options qui ne peuvent-être spécifiées qu'une seule fois, celle du
+fichier de configuration prends le pas sur celle fournie en ligne de commande.
+Il est possible d'utiliser des guillemets afin d'éviter que les ",",":","." et
+"#" ne soit interprêtés, et il est possible d'utiliser les séquences
+d'échappement suivantes : \\\\ \\" \\t \\a \\b \\r et \\n. Elles correspondent
+respectivement à la barre oblique descendante ("anti-slash"), guillemets doubles,
+tabulation, sonnerie ("bell"), suppression ("backspace"), retour ("return") et
+nouvelle ligne ("newline").
+.SH NOTES
+A la réception d'un signal SIGHUP,
+.B Dnsmasq
+vide son cache et recharge les fichiers
+.I /etc/hosts
+et
+.I /etc/ethers
+ainsi que tout autre fichier spécifié par les options
+.B --dhcp-hostsfile
+,
+.B --dhcp-optsfile
+ou
+.B --addn-hosts.
+Le script de changement de bail est appellé pour chaque bail DHCP existant. Si
+l'option
+.B --no-poll
+est positionnée, alors le fichier
+.I /etc/resolv.conf
+est également rechargé.
+SIGHUP ne provoque PAS de rechargement du fichier de configuration.
+.PP
+A la réception d'un signal SIGUSR1,
+.B Dnsmasq
+écrit des statistiques dans les traces système. Les informations fournies sont :
+la taille du cache, le nombre de noms ayant été supprimés du cache avant
+expiration afin de faire de la place pour les nouveaux noms, ainsi que le nombre
+total d'entrées ayant été insérées dans le cache.
+Lorsque Dnsmasq a été lancé via
+.B --no-daemon
+ou lorsque la traçabilité maximale a été activée (
+.B -q
+), la totalité du contenu du
+cache est de surcroît fournie.
+.PP
+A la réception d'un signal SIGUSR2 et lorsqu'il enregistre directement ses
+traces dans un fichier (voir
+.B --log-facility
+), alors
+.B Dnsmasq
+ferme et re-rouvre le fichier de traces. Il faut noter que pendant cette
+opération Dnsmasq ne s'exécute pas en temps que "root". Lorsqu'il créé un
+fichier de traces pour la première fois, Dnsmasq change le propriétaire du
+fichier afin de le faire appartenir à l'utilisateur non "root" sous lequel
+Dnsmasq s'exécute. Le logiciel de rotation de fichiers de trace logrotate doit
+être configuré pour créer un nouveau fichier avec un propriétaire identique au
+fichier existant avant d'envoyer le signal SIGUSR2. Si une requête DNS TCP est
+en cours, l'ancien fichier de traces reste ouvert dans le processus fils qui
+traite la requête TCP et il peut y être écrit. Il existe cependant une limite
+de 150 secondes après laquelle tous les processus traitant des requêtes TCP
+expirent : pour cette raison, il est préférable de ne pas configurer la
+compression des fichiers de traces venant juste de faire l'objet d'une rotation.
+Dans le cas de l'utilisation du logiciel logrotate, les options requises sont
+.B create
+et
+.B delaycompress.
+
+
+.PP
+Dnsmasq est un logiciel de transmission de requêtes DNS : il n'est pas capable
+d'effectuer une résolution de nom récursive en partant des serveurs DNS racine,
+mais transmet de telles requêtes à un serveur DNS amont capable de telles
+recherches récursives, ce qui est typiquement le cas d'un serveur DNS de FAI.
+Par défaut, Dnsmasq lis
+.I /etc/resolv.conf
+pour découvrir les adresses IP des serveurs DNS amonts à utiliser, puisque cette
+information est en général stockée à cet endroit. A moins que l'option
+.B --no-poll
+ne soit utilisée,
+.B Dnsmasq
+vérifie la date de modification du fichier
+.I /etc/resolv.conf
+(ou l'équivalent si
+.B \--resolv-file
+est utilisé), et le relis lorsqu'il change. Cela permet de définir les serveurs
+DNS amont de manière dynamique lorsque PPP ou DHCP sont utilisés, puisque ces
+protocoles fournissent cette information.
+L'absence du fichier
+.I /etc/resolv.conf
+ne conduit pas à une erreur, puisqu'il peut très bien ne pas être créé avant
+qu'une connexion PPP ne soit établie. Dans ce cas, Dnsmasq vérifie régulièrement
+pour voir si un fichier
+.I /etc/resolv.conf
+est créé. Dnsmasq peut être configuré pour lire plus d'un fichier resolv.conf.
+Cela est utile sur un ordinateur portable où PPP et DHCP peuvent-être utilisés :
+Dnsmasq peut alors être configuré pour lire à la fois
+.I /etc/ppp/resolv.conf
+et
+.I /etc/dhcpc/resolv.conf
+et utilisera le contenu du fichier ayant changé en dernier, ce qui permet de
+passer automatiquement de serveurs DNS à d'autres.
+.PP
+Les serveurs amonts peuvent aussi être spécifiés sur la ligne de commande ou
+dans un fichier de configuration. Ces spécifications de serveurs peuvent
+éventuellement se voir adjoindre d'un nom de domaine qui précise à Dnsmasq quel
+serveur utiliser pour trouver les noms d'un domaine donné.
+.PP
+Pour configurer Dnsmasq afin qu'il se comporte comme un cache pour la machine
+sur laquelle il tourne, mettre "nameserver 127.0.0.1" dans le fichier
+.I /etc/resolv.conf
+afin de forcer les processus locaux à envoyer leurs requêtes à Dnsmasq. Ensuite,
+spécifier les serveurs DNS amont soit en les fournissant directement à Dnsmasq
+via l'option
+.B \--server
+ou alors en mettant leurs adresses dans un autre fichier, par exemple
+.I /etc/resolv.dnsmasq
+et en lançant Dnsmasq avec l'option
+.B \-r /etc/resolv.dnsmasq.
+Cette deuxième technique permet la mise-à-jour dynamique des addresses de
+serveurs DNS amont par le biais de PPP ou DHCP.
+.PP
+Les adresses dans /etc/hosts prennent le dessus sur celles fournies par le
+serveur DNS amont, ainsi "macompagnie.com 1.2.3.4" dans /etc/hosts assure que
+les requêtes pour "macompagnie.com" retourneront toujours 1.2.3.4, même si une
+requête au serveur DNS amont retournerait une adresse différente. Il y a une
+exception à ceci : si le DNS amont contient un CNAME qui pointe vers un nom
+présent dans /etc/hosts, alors la recherche du CNAME via Dnsmasq fournira
+l'adresse DNS amont. Pour contourner cela, il suffit de mettre l'entrée
+correspondant au CNAME dans /etc/hosts.
+
+.PP
+les identifiants de réseau fonctionnent comme suit : Dnsmasq associe à chaque
+requête DHCP un ensemble d'identifiants de réseau; un pour la plage d'adresse
+DHCP (
+.B dhcp-range
+) utilisée pour allouer l'adresse, une pour chaque entrée
+.B dhcp-host
+associée et éventuellement une pour chaque classe de vendeur ou d'utilisateur
+fournie par le client DHCP dans sa requête. Les options DHCP (
+.B dhcp-option
+) ayant un identifiant de réseau seront utilisés de préférence à celles
+sans identifiants de réseau, pour peu que
+.I tous
+les labels correspondent.
+Le préfixe '#' sur un label est un indicateur de négation, ainsi
+.B --dhcp=option=#purple,3,1.2.3.4
+envoie l'option lorsque le label "purple" n'est pas dans la liste de labels
+valides pour l'hôte considéré.
+.PP
+Si l'identifiant de réseau dans la plage d'adresses DHCP (
+.B dhcp-range
+) est préfixé par 'net:', alors sa signification change : au lieu d'associer un
+label à la plage spécifiée, cela indique un label de réseau devant être spécifié
+par le client DHCP. Ainsi, s'il y a plus d'une plage d'adresses DHCP sur un
+sous-réseau, et que l'une est préfixée par un identifiant de réseau (par exemple
+l'un spécifié dans une option de classe de vendeur), alors un hôte ayant
+l'identifiant de réseau en question positionné se verra allouer une adresse dans
+la plage d'adresses DHCP préfixée.
+.PP
+Le serveur DHCP intégré dans Dnsmasq fonctionne également en temps que serveur
+BOOTP, pour peu que l'adresse MAC et l'adresse IP des clients soient fournies,
+que ce soit par le biais de l'option
+.B dhcp-host
+ou dans le fichier
+.I /etc/ethers
+, et que l'option
+.B dhcp-range
+soit présente afin d'activer le serveur DHCP pour un réseau donné (L'option
+.B --bootp-dynamic
+supprime la nécessité des associations statiques). Le paramètre
+"filename" (nom de fichier) de la requête BOOTP est comparé avec les
+identifiants de réseaux des options
+.B dhcp-option
+ainsi que le label "bootp", ce qui permet de contrôler les options retournées
+aux différentes classes d'hôtes.
+
+.SH CODES DE SORTIE
+.PP
+0 - Dnsmasq s'est correctement lancé en tâche de fond, ou alors s'est
+correctement terminé si le lancement en tâche de fond n'a pas été activé.
+.PP
+1 - Un problème de configuration a été détecté.
+.PP
+2 - Un problème est survenu avec un accès réseau (adresse déjà utilisée,
+tentative d'utiliser un port privilégié sans les permissions nécessaires).
+.PP
+3 - Un problème est survenu avec une opération sur un système de fichier
+(fichier ou répertoire manquant, permissions).
+.PP
+4 - Impossibilité d'allouer de la mémoire.
+.PP
+5 - Autre problème.
+.PP
+11 ou plus - un code de retour différent de 0 a été reçu lors de l'appel au
+processus "init" du script des bails. Le code de retour de Dnsmasq correspond
+au code de retour du script plus 10.
+
+.SH LIMITES
+Les valeurs par défaut pour les limites de ressources de Dnsmasq sont en général
+conservatrices et appropriées pour des utilisations embarquées sur des machines
+de type routeur ayant des processeurs lents et une mémoire limitée. Sur du
+matériel plus performant, il est possible d'augmenter les limites et de gérer
+plus de clients. Les remarques suivantes s'appliquent à Dnsmasq version 2.37 et
+ultérieur : les versions précédentes ne montaient pas en charge aussi bien.
+
+.PP
+Dnsmasq est capable de gérer le DNS et DHCP pour au moins un millier de clients.
+Evidement, pour cela la valeur de
+.B --dhcp-lease-max
+doit être augmentée et la durée des baux ne doit pas être très courte (moins
+d'une heure). La valeur de
+.B --dns-forward-max
+peut-être augmentée : commencer par la rendre égale au nombre de clients et
+l'augmenter si le DNS semble lent. Noter que la performance du DNS dépends
+également de la performance des serveurs amonts. La taille du cache DNS peut-
+être augmentée : la limite en dur est de 10000 entrées et la valeur par défaut
+(150) est très basse. Envoyer un signal SIGUSR1 à Dnsmasq le fait émettre des
+informations utiles pour paramétrer la taille de cache. Voir la section
+.B NOTES
+pour plus de détails.
+.PP
+Le serveur TFTP intégré est capable de plusieurs transferts de fichiers
+simultanés : La limite absolue est liée au nombre maximal de descripteurs de
+fichiers alloué à un processus et à la capacité de l'appel système select() à
+gérer un grand nombre de HANDLE de fichier. Si la limite est fixée trop haut par
+le biais de
+.B --tftp-max
+elle sera réduite et la limite actuelle sera enregistrée au démarrage. Il faut
+noter que plus de transferts sont possible lorsque le même fichier est transmis
+au lieu d'avoir un fichier différent pour chaque transfert.
+
+.PP
+Il est possible d'utiliser Dnsmasq pour bloquer la publicité sur la toile
+en associant des serveurs de publicité bien connus à l'adresse 127.0.0.1 ou
+0.0.0.0 par le biais du fichier
+.B /etc/hosts
+ou d'un fichier d'hôte additionnel. Cette liste peut-être très longue, Dnsmasq
+ayant été testé avec succès avec un million de noms. Cette taille de fichier
+nécessite un processeur à 1 Ghz et environ 60 Mo de RAM.
+
+.SH FICHIERS
+.IR /etc/dnsmasq.conf
+
+.IR /usr/local/etc/dnsmasq.conf
+
+.IR /etc/resolv.conf
+
+.IR /etc/hosts
+
+.IR /etc/ethers
+
+.IR /var/lib/misc/dnsmasq.leases
+
+.IR /var/db/dnsmasq.leases
+
+.IR /var/run/dnsmasq.pid
+.SH VOIR AUSSI
+.BR hosts (5),
+.BR resolver (5)
+.SH AUTEUR
+Cette page de manuel a été écrite par Simon Kelley <simon@thekelleys.org.uk>.
+
+La traduction dans un français bancal a été commise par Gildas Le Nadan
+<3ntr0p13@gmail.com> : Toute révision/correction permettant de corriger
+orthographe ou grammaire mais surtout les éventuelles fautes de sens sera la
+bienvenue!
diff --git a/po/de.po b/po/de.po
index 268f052..462a506 100644
--- a/po/de.po
+++ b/po/de.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dnsmasq 2.24\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-08-29 11:09+0100\n"
+"POT-Creation-Date: 2008-02-12 11: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"
@@ -15,37 +15,37 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: cache.c:671
+#: cache.c:680
#, c-format
msgid "failed to load names from %s: %s"
msgstr ""
-#: cache.c:705 dhcp.c:717
+#: cache.c:714 dhcp.c:757
#, c-format
msgid "bad address at %s line %d"
msgstr ""
# @Simon: Here I need an example to understand it :)
-#: cache.c:752 dhcp.c:731
+#: cache.c:761 dhcp.c:771
#, c-format
msgid "bad name at %s line %d"
msgstr ""
# @Simon: Here I need an example to understand it :)
-#: cache.c:759 dhcp.c:785
+#: cache.c:768 dhcp.c:825
#, 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:797
+#: cache.c:806
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:844
+#: cache.c:855
#, c-format
msgid ""
"not giving name %s to the DHCP lease of %s because the name exists in %s "
@@ -54,57 +54,70 @@ msgstr ""
"Name %s wurde nicht dem DHCP 'Mieter' von %s zugewiesen, da der Name in %"
"smit der Adresse %s bereits existiert"
+#: cache.c:907
+#, c-format
+msgid "time %lu"
+msgstr ""
+
# @Simon: "Mieter" is rather 'logder, renter, tenant, lessee' but I couldn't find anything that fits better.
# @Simon: So I thought I put it in ''-marks :)
-#: cache.c:884
+#: cache.c:908
#, fuzzy, c-format
-msgid ""
-"time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache "
-"entries."
+msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
msgstr ""
"Cache Größe %d, %d/%d Cache-Einfügungen verwendeten nicht abgelaufene Cache-"
"Einträge wieder."
+#: cache.c:910
+#, c-format
+msgid "queries forwarded %u, queries answered locally %u"
+msgstr ""
+
+#: cache.c:933
+#, c-format
+msgid "server %s#%d: queries sent %u, retried or failed %u"
+msgstr ""
+
# @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:157 option.c:758
+#: util.c:160
msgid "could not get memory"
msgstr "Speicher nicht verfügbar"
-#: util.c:167
+#: util.c:170
#, c-format
msgid "failed to allocate %d bytes"
msgstr ""
# @Simon: not perfect but I cannot get nearer right now.
-#: util.c:272
+#: util.c:275
#, c-format
msgid "infinite"
msgstr "unendlich"
-#: option.c:188
+#: option.c:244
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:189
+#: option.c:245
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:190
+#: option.c:246
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:191
+#: option.c:247
msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
msgstr "Behandle IP-Adr als NXDOMAIN (wehrt Verisign-Platzhalter ab)."
@@ -115,17 +128,17 @@ msgstr "Behandle IP-Adr als NXDOMAIN (wehrt Verisign-Platzhalter ab)."
# @Simon: "Behandle IP-Adr als NXDOMAIN (gegen Verisigns Platzhalter-Gebrauch)."
# @Simon: = "Treat ipaddr as NXDOMAIN (defeats Verisigns wildcard usage)." ?
# @Simon: But the explanatory(?) effect is only a very tiny bit better, I believe - what do U think?
-#: option.c:192
+#: option.c:248
#, 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:193
+#: option.c:249
#, c-format
msgid "Specify configuration file (defaults to %s)."
msgstr "Angabe der Konfigurationsdatei (Voreinstellung: %s)."
-#: option.c:194
+#: option.c:250
msgid "Do NOT fork into the background: run in debug mode."
msgstr "NICHT in den Hintergrund gehen: Betrieb im Debug-Modus"
@@ -133,479 +146,523 @@ msgstr "NICHT in den Hintergrund gehen: Betrieb im Debug-Modus"
# @Simon: I know it sounds a bit clumsy in english, but "fork" would be hard to understand
# @Simon: and then I get a problem between "go" and "run" - so...
# @Simon: "Debug-mode" = "Fehlersuch-Modus", literally, but I think "Debug-Modus" is better :)
-#: option.c:195
+#: option.c:251
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:196
+#: option.c:252
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:197
+#: option.c:253
msgid "Expand simple names in /etc/hosts with domain-suffix."
msgstr "Erweitere einfache Namen in /etc/hosts mit der Domänen-Endung"
-#: option.c:198
+#: option.c:254
msgid "Don't forward spurious DNS requests from Windows hosts."
msgstr "'unechte' DNS-Anfragen von Windows-Rechnern nicht weiterleiten"
# @Simon: I'm a bit unsure about "spurious"
-#: option.c:199
+#: option.c:255
msgid "Enable DHCP in the range given with lease duration."
msgstr ""
-#: option.c:200
+#: option.c:256
#, c-format
msgid "Change to this group after startup (defaults to %s)."
msgstr ""
-#: option.c:201
+#: option.c:257
msgid "Set address or hostname for a specified machine."
msgstr ""
-#: option.c:202
+#: option.c:258
msgid "Read DHCP host specs from file"
msgstr ""
-#: option.c:203
+#: option.c:259
+msgid "Read DHCP option specs from file"
+msgstr ""
+
+#: option.c:260
#, c-format
msgid "Do NOT load %s file."
msgstr ""
-#: option.c:204
+#: option.c:261
#, c-format
msgid "Specify a hosts file to be read in addition to %s."
msgstr ""
-#: option.c:205
+#: option.c:262
msgid "Specify interface(s) to listen on."
msgstr ""
-#: option.c:206
+#: option.c:263
msgid "Specify interface(s) NOT to listen on."
msgstr ""
-#: option.c:207
+#: option.c:264
msgid "Map DHCP user class to tag."
msgstr ""
-#: option.c:208
+#: option.c:265
msgid "Map RFC3046 circuit-id to tag."
msgstr ""
-#: option.c:209
+#: option.c:266
msgid "Map RFC3046 remote-id to tag."
msgstr ""
-#: option.c:210
+#: option.c:267
msgid "Map RFC3993 subscriber-id to tag."
msgstr ""
-#: option.c:211
+#: option.c:268
msgid "Don't do DHCP for hosts with tag set."
msgstr ""
-#: option.c:212
+#: option.c:269
+msgid "Force broadcast replies for hosts with tag set."
+msgstr ""
+
+#: option.c:270
msgid "Do NOT fork into the background, do NOT run in debug mode."
msgstr ""
-#: option.c:213
+#: option.c:271
msgid "Assume we are the only DHCP server on the local network."
msgstr ""
-#: option.c:214
+#: option.c:272
#, c-format
msgid "Specify where to store DHCP leases (defaults to %s)."
msgstr ""
-#: option.c:215
+#: option.c:273
msgid "Return MX records for local hosts."
msgstr ""
-#: option.c:216
+#: option.c:274
msgid "Specify an MX record."
msgstr ""
-#: option.c:217
+#: option.c:275
msgid "Specify BOOTP options to DHCP server."
msgstr ""
-#: option.c:218
+#: option.c:276
#, c-format
msgid "Do NOT poll %s file, reload only on SIGHUP."
msgstr ""
-#: option.c:219
+#: option.c:277
msgid "Do NOT cache failed search results."
msgstr ""
-#: option.c:220
+#: option.c:278
#, c-format
msgid "Use nameservers strictly in the order given in %s."
msgstr ""
-#: option.c:221
+#: option.c:279
msgid "Specify options to be sent to DHCP clients."
msgstr ""
-#: option.c:222
+#: option.c:280
msgid "DHCP option sent even if the client does not request it."
msgstr ""
-#: option.c:223
+#: option.c:281
msgid "Specify port to listen for DNS requests on (defaults to 53)."
msgstr ""
-#: option.c:224
+#: option.c:282
#, c-format
msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
msgstr ""
-#: option.c:225
-msgid "Log queries."
+#: option.c:283
+msgid "Log DNS queries."
msgstr ""
-#: option.c:226
-msgid "Force the originating port for upstream queries."
+#: option.c:284
+msgid "Force the originating port for upstream DNS queries."
msgstr ""
-#: option.c:227
+#: option.c:285
msgid "Do NOT read resolv.conf."
msgstr ""
-#: option.c:228
+#: option.c:286
#, c-format
msgid "Specify path to resolv.conf (defaults to %s)."
msgstr ""
-#: option.c:229
+#: option.c:287
msgid "Specify address(es) of upstream servers with optional domains."
msgstr ""
-#: option.c:230
+#: option.c:288
msgid "Never forward queries to specified domains."
msgstr ""
-#: option.c:231
+#: option.c:289
msgid "Specify the domain to be assigned in DHCP leases."
msgstr ""
-#: option.c:232
+#: option.c:290
msgid "Specify default target in an MX record."
msgstr ""
-#: option.c:233
+#: option.c:291
msgid "Specify time-to-live in seconds for replies from /etc/hosts."
msgstr ""
-#: option.c:234
+#: option.c:292
+msgid "Specify time-to-live in seconds for negative caching."
+msgstr ""
+
+#: option.c:293
#, c-format
msgid "Change to this user after startup. (defaults to %s)."
msgstr ""
-#: option.c:235
+#: option.c:294
msgid "Map DHCP vendor class to tag."
msgstr ""
-#: option.c:236
+#: option.c:295
msgid "Display dnsmasq version and copyright information."
msgstr ""
-#: option.c:237
+#: option.c:296
msgid "Translate IPv4 addresses from upstream servers."
msgstr ""
-#: option.c:238
+#: option.c:297
msgid "Specify a SRV record."
msgstr ""
-#: option.c:239
+#: option.c:298
msgid "Display this message. Use --help dhcp for known DHCP options."
msgstr ""
-#: option.c:240
+#: option.c:299
#, fuzzy, c-format
msgid "Specify path of PID file (defaults to %s)."
msgstr "Angabe der Konfigurationsdatei (Voreinstellung: %s)."
-#: option.c:241
+#: option.c:300
#, c-format
msgid "Specify maximum number of DHCP leases (defaults to %s)."
msgstr ""
-#: option.c:242
+#: option.c:301
msgid "Answer DNS queries based on the interface a query was sent to."
msgstr ""
-#: option.c:243
+#: option.c:302
msgid "Specify TXT DNS record."
msgstr ""
-#: option.c:244
+#: option.c:303
msgid "Specify PTR DNS record."
msgstr ""
-#: option.c:245
+#: option.c:304
msgid "Give DNS name to IPv4 address of interface."
msgstr ""
-#: option.c:246
+#: option.c:305
msgid "Bind only to interfaces in use."
msgstr ""
-#: option.c:247
+#: option.c:306
#, c-format
msgid "Read DHCP static host information from %s."
msgstr ""
-#: option.c:248
+#: option.c:307
msgid "Enable the DBus interface for setting upstream servers, etc."
msgstr ""
-#: option.c:249
+#: option.c:308
msgid "Do not provide DHCP on this interface, only provide DNS."
msgstr ""
-#: option.c:250
+#: option.c:309
msgid "Enable dynamic address allocation for bootp."
msgstr ""
-#: option.c:251
+#: option.c:310
msgid "Map MAC address (with wildcards) to option set."
msgstr ""
-#: option.c:253
+#: option.c:312
msgid "Treat DHCP requests on aliases as arriving from interface."
msgstr ""
-#: option.c:255
+#: option.c:314
msgid "Disable ICMP echo address checking in the DHCP server."
msgstr ""
-#: option.c:256
+#: option.c:315
msgid "Script to run on DHCP lease creation and destruction."
msgstr ""
-#: option.c:257
+#: option.c:316
msgid "Read configuration from all the files in this directory."
msgstr ""
-#: option.c:258
+#: option.c:317
msgid "Log to this syslog facility or file. (defaults to DAEMON)"
msgstr ""
-#: option.c:259
+#: option.c:318
msgid "Read leases at startup, but never write the lease file."
msgstr ""
-#: option.c:260
+#: option.c:319
#, c-format
msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
msgstr ""
-#: option.c:261
+#: option.c:320
#, c-format
msgid "Clear DNS cache when reloading %s."
msgstr ""
-#: option.c:262
+#: option.c:321
msgid "Ignore hostnames provided by DHCP clients."
msgstr ""
-#: option.c:263
+#: option.c:322
+msgid "Do NOT reuse filename and server fields for extra DHCP options."
+msgstr ""
+
+#: option.c:323
msgid "Enable integrated read-only TFTP server."
msgstr ""
-#: option.c:264
+#: option.c:324
msgid "Export files by TFTP only from the specified subtree."
msgstr ""
-#: option.c:265
+#: option.c:325
msgid "Add client IP address to tftp-root."
msgstr ""
-#: option.c:266
+#: option.c:326
msgid "Allow access only to files owned by the user running dnsmasq."
msgstr ""
-#: option.c:267
+#: option.c:327
#, c-format
msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
msgstr ""
-#: option.c:268
+#: option.c:328
msgid "Disable the TFTP blocksize extension."
msgstr ""
-#: option.c:269
+#: option.c:329
+msgid "Ephemeral port range for use by TFTP transfers."
+msgstr ""
+
+#: option.c:330
msgid "Extra logging for DHCP."
msgstr ""
-#: option.c:270
+#: option.c:331
msgid "Enable async. logging; optionally set queue length."
msgstr ""
-#: option.c:501
+#: option.c:332
+msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
+msgstr ""
+
+#: option.c:333
+msgid "Always perform DNS queries to all servers."
+msgstr ""
+
+#: option.c:334
+msgid "Set tag if client includes option in request."
+msgstr ""
+
+#: option.c:585
#, c-format
msgid ""
"Usage: dnsmasq [options]\n"
"\n"
msgstr ""
-#: option.c:503
+#: option.c:587
#, c-format
msgid "Use short options only on the command line.\n"
msgstr ""
-#: option.c:505
+#: option.c:589
#, c-format
msgid "Valid options are :\n"
msgstr ""
-#: option.c:526
+#: option.c:610
#, c-format
msgid "Known DHCP options:\n"
msgstr ""
-#: option.c:599
+#: option.c:683
msgid "bad dhcp-option"
msgstr ""
# @Simon: Here I need an example to understand it :)
-#: option.c:655
+#: option.c:739
#, fuzzy
msgid "bad IP address"
msgstr "lese %s - %d Adressen"
-#: option.c:753
+#: option.c:837
msgid "bad domain in dhcp-option"
msgstr ""
-#: option.c:809
+#: option.c:895
msgid "dhcp-option too long"
msgstr ""
-#: option.c:853
+#: option.c:942
#, c-format
msgid "cannot access directory %s: %s"
msgstr ""
-#: option.c:872 tftp.c:313
+#: option.c:961 tftp.c:343
#, c-format
msgid "cannot access %s: %s"
msgstr ""
-#: option.c:913
+#: option.c:998
msgid "only one dhcp-hostsfile allowed"
msgstr ""
-#: option.c:962
+#: option.c:1005
+msgid "only one dhcp-optsfile allowed"
+msgstr ""
+
+#: option.c:1049
msgid "bad MX preference"
msgstr ""
-#: option.c:971
+#: option.c:1053
msgid "bad MX name"
msgstr ""
-#: option.c:989
+#: option.c:1067
msgid "bad MX target"
msgstr ""
-#: option.c:1001
+#: option.c:1078
msgid "cannot run scripts under uClinux"
msgstr ""
-#: option.c:1196 option.c:1207
+#: option.c:1265 option.c:1273
msgid "bad port"
msgstr ""
-#: option.c:1349
+#: option.c:1293 option.c:1318
+msgid "interface binding not supported"
+msgstr ""
+
+#: option.c:1427
+msgid "bad port range"
+msgstr ""
+
+#: option.c:1444
msgid "bad bridge-interface"
msgstr ""
-#: option.c:1391
+#: option.c:1485
msgid "bad dhcp-range"
msgstr ""
-#: option.c:1419
+#: option.c:1511
msgid "only one netid tag allowed"
msgstr ""
-#: option.c:1461
+#: option.c:1551
msgid "inconsistent DHCP range"
msgstr ""
-#: option.c:1637
+#: option.c:1719
msgid "bad DHCP host name"
msgstr ""
-#: option.c:1861
+#: option.c:1959
msgid "bad interface name"
msgstr ""
-#: option.c:1885
+#: option.c:1979
msgid "bad PTR record"
msgstr ""
-#: option.c:1909
-msgid "bad TXT record"
+#: option.c:1999
+msgid "TXT record string too long"
msgstr ""
-#: option.c:1941
-msgid "TXT record string too long"
+#: option.c:2003
+msgid "bad TXT record"
msgstr ""
-#: option.c:1980
+#: option.c:2063
msgid "bad SRV record"
msgstr ""
-#: option.c:1992
+#: option.c:2072
msgid "bad SRV target"
msgstr ""
-#: option.c:2003
+#: option.c:2080
msgid "invalid port number"
msgstr ""
-#: option.c:2013
+#: option.c:2087
msgid "invalid priority"
msgstr ""
-#: option.c:2023
+#: option.c:2094
msgid "invalid weight"
msgstr ""
-#: option.c:2054
+#: option.c:2130
#, c-format
msgid "files nested too deep in %s"
msgstr ""
-#: option.c:2062 tftp.c:467
+#: option.c:2138 tftp.c:497
#, c-format
msgid "cannot read %s: %s"
msgstr ""
-#: option.c:2114
+#: option.c:2199
msgid "missing \""
msgstr ""
-#: option.c:2161
+#: option.c:2246
msgid "bad option"
msgstr ""
-#: option.c:2163
+#: option.c:2248
msgid "extraneous parameter"
msgstr ""
-#: option.c:2165
+#: option.c:2250
msgid "missing parameter"
msgstr ""
-#: option.c:2173
+#: option.c:2258
msgid "error"
msgstr ""
@@ -614,659 +671,695 @@ msgstr ""
# @Simon: ("keinen Speicher" = "no memory", "... nicht bekommen" = "... not get")
# @Simon: both would be correct - but would sound rather clumsy in german
# @Simon: how about "Nicht genügend Speicher verfügbar" = "Not enough memory available" ?
-#: option.c:2179
+#: option.c:2264
#, c-format
msgid "%s at line %d of %%s"
msgstr "%s in Zeile %d von %%s"
-#: option.c:2252
+#: option.c:2304 option.c:2334
+#, c-format
+msgid "read %s"
+msgstr ""
+
+#: option.c:2400
#, c-format
msgid "Dnsmasq version %s %s\n"
msgstr ""
-#: option.c:2253
+#: option.c:2401
#, c-format
msgid ""
"Compile time options %s\n"
"\n"
msgstr ""
-#: option.c:2254
+#: option.c:2402
#, c-format
msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
msgstr ""
-#: option.c:2255
+#: option.c:2403
#, c-format
msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
msgstr ""
-#: option.c:2256
+#: option.c:2404
#, c-format
-msgid "under the terms of the GNU General Public License, version 2.\n"
+msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
msgstr ""
-#: option.c:2267
+#: option.c:2415
msgid "try --help"
msgstr ""
-#: option.c:2269
+#: option.c:2417
msgid "try -w"
msgstr ""
-#: option.c:2272
+#: option.c:2420
#, c-format
msgid "bad command line options: %s"
msgstr ""
-#: option.c:2313
+#: option.c:2461
#, c-format
msgid "cannot get host-name: %s"
msgstr ""
-#: option.c:2341
+#: option.c:2489
msgid "only one resolv.conf file allowed in no-poll mode."
msgstr ""
-#: option.c:2351
+#: option.c:2499
msgid "must have exactly one resolv.conf to read domain from."
msgstr ""
-#: option.c:2354 network.c:549
+#: option.c:2502 network.c:640
#, c-format
msgid "failed to read %s: %s"
msgstr ""
-#: option.c:2372
+#: option.c:2520
#, c-format
msgid "no search directive found in %s"
msgstr ""
-#: forward.c:376
+#: forward.c:381
#, c-format
msgid "nameserver %s refused to do a recursive query"
msgstr ""
-#: isc.c:73 dnsmasq.c:723
+#: forward.c:409
+msgid "possible DNS-rebind attack detected"
+msgstr ""
+
+#: isc.c:77 dnsmasq.c:747
#, c-format
msgid "failed to access %s: %s"
msgstr ""
-#: isc.c:89
+#: isc.c:93
#, c-format
msgid "failed to load %s: %s"
msgstr ""
-#: isc.c:93 dnsmasq.c:745
+#: isc.c:97 dnsmasq.c:769
#, c-format
msgid "reading %s"
msgstr ""
-#: isc.c:115
+#: isc.c:119
#, c-format
msgid "bad name in %s"
msgstr ""
-#: isc.c:177
+#: isc.c:181
#, c-format
msgid "Ignoring DHCP lease for %s because it has an illegal domain part"
msgstr ""
-#: network.c:41
+#: network.c:45
#, c-format
msgid "unknown interface %s in bridge-interface"
msgstr ""
-#: network.c:377 dnsmasq.c:170
+#: network.c:389 dnsmasq.c:180
#, c-format
msgid "failed to create listening socket: %s"
msgstr ""
-#: network.c:384
+#: network.c:396
#, c-format
msgid "failed to set IPV6 options on listening socket: %s"
msgstr ""
-#: network.c:402
+#: network.c:415
#, c-format
msgid "failed to bind listening socket for %s: %s"
msgstr ""
-#: network.c:410
+#: network.c:420
#, c-format
msgid "failed to listen on socket: %s"
msgstr ""
-#: network.c:421
+#: network.c:432
#, c-format
msgid "failed to create TFTP socket: %s"
msgstr ""
-#: network.c:493
+#: network.c:549
+#, c-format
+msgid "failed to bind server socket for %s: %s"
+msgstr ""
+
+#: network.c:582
#, c-format
msgid "ignoring nameserver %s - local interface"
msgstr ""
-#: network.c:502
+#: network.c:591
#, c-format
msgid "ignoring nameserver %s - cannot make/bind socket: %s"
msgstr ""
-#: network.c:517
+#: network.c:606
msgid "unqualified"
msgstr ""
-#: network.c:517
+#: network.c:606
msgid "names"
msgstr ""
-#: network.c:519
+#: network.c:608
msgid "default"
msgstr ""
-#: network.c:521
+#: network.c:610
msgid "domain"
msgstr ""
-#: network.c:524
+#: network.c:613
#, c-format
msgid "using local addresses only for %s %s"
msgstr ""
-#: network.c:526
+#: network.c:615
#, c-format
msgid "using nameserver %s#%d for %s %s"
msgstr ""
-#: network.c:529
+#: network.c:618
+#, c-format
+msgid "using nameserver %s#%d(via %s)"
+msgstr ""
+
+#: network.c:620
#, c-format
msgid "using nameserver %s#%d"
msgstr ""
-#: dnsmasq.c:106
+#: dnsmasq.c:110
msgid ""
"ISC dhcpd integration not available: set HAVE_ISC_READER in src/config.h"
msgstr ""
-#: dnsmasq.c:128
+#: dnsmasq.c:132
msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
msgstr ""
-#: dnsmasq.c:142
+#: dnsmasq.c:137
+msgid "asychronous logging is not available under Solaris"
+msgstr ""
+
+#: dnsmasq.c:151
msgid "must set exactly one interface on broken systems without IP_RECVIF"
msgstr ""
-#: dnsmasq.c:152
+#: dnsmasq.c:161
#, c-format
msgid "failed to find list of interfaces: %s"
msgstr ""
-#: dnsmasq.c:160
+#: dnsmasq.c:169
#, c-format
msgid "unknown interface %s"
msgstr ""
-#: dnsmasq.c:166
+#: dnsmasq.c:175
#, c-format
msgid "no interface with address %s"
msgstr ""
-#: dnsmasq.c:181 dnsmasq.c:538
+#: dnsmasq.c:192 dnsmasq.c:561
#, c-format
msgid "DBus error: %s"
msgstr ""
-#: dnsmasq.c:184
+#: dnsmasq.c:195
msgid "DBus not available: set HAVE_DBUS in src/config.h"
msgstr ""
-#: dnsmasq.c:216
+#: dnsmasq.c:204
#, c-format
msgid "cannot create pipe: %s"
msgstr ""
-#: dnsmasq.c:237
+#: dnsmasq.c:225
#, c-format
msgid "cannot fork into background: %s"
msgstr ""
-#: dnsmasq.c:335
+#: dnsmasq.c:239
+#, c-format
+msgid "cannot chdir to filesystem root: %s"
+msgstr ""
+
+#: dnsmasq.c:349
+#, c-format
+msgid "started, version %s DNS disabled"
+msgstr ""
+
+#: dnsmasq.c:351
#, c-format
msgid "started, version %s cachesize %d"
msgstr ""
-#: dnsmasq.c:337
+#: dnsmasq.c:353
#, c-format
msgid "started, version %s cache disabled"
msgstr ""
-#: dnsmasq.c:339
+#: dnsmasq.c:355
#, c-format
msgid "compile time options: %s"
msgstr ""
-#: dnsmasq.c:345
+#: dnsmasq.c:361
msgid "DBus support enabled: connected to system bus"
msgstr ""
-#: dnsmasq.c:347
+#: dnsmasq.c:363
msgid "DBus support enabled: bus connection pending"
msgstr ""
-#: dnsmasq.c:352
+#: dnsmasq.c:368
msgid "setting --bind-interfaces option because of OS limitations"
msgstr ""
-#: dnsmasq.c:357
+#: dnsmasq.c:373
#, c-format
msgid "warning: interface %s does not currently exist"
msgstr ""
-#: dnsmasq.c:362
+#: dnsmasq.c:378
msgid "warning: ignoring resolv-file flag because no-resolv is set"
msgstr ""
-#: dnsmasq.c:365
+#: dnsmasq.c:381
msgid "warning: no upstream servers configured"
msgstr ""
-#: dnsmasq.c:369
+#: dnsmasq.c:385
#, c-format
msgid "asynchronous logging enabled, queue limit is %d messages"
msgstr ""
-#: dnsmasq.c:381
+#: dnsmasq.c:397
#, c-format
msgid "DHCP, static leases only on %.0s%s, lease time %s"
msgstr ""
-#: dnsmasq.c:382
+#: dnsmasq.c:398
#, c-format
msgid "DHCP, IP range %s -- %s, lease time %s"
msgstr ""
-#: dnsmasq.c:396
+#: dnsmasq.c:412
msgid "root is "
msgstr ""
-#: dnsmasq.c:396
+#: dnsmasq.c:412
msgid "enabled"
msgstr ""
-#: dnsmasq.c:398
+#: dnsmasq.c:414
msgid "secure mode"
msgstr ""
-#: dnsmasq.c:418
+#: dnsmasq.c:440
#, c-format
msgid "restricting maximum simultaneous TFTP transfers to %d"
msgstr ""
-#: dnsmasq.c:427
+#: dnsmasq.c:449
#, c-format
msgid "warning: setting capabilities failed: %s"
msgstr ""
-#: dnsmasq.c:429
+#: dnsmasq.c:451
msgid "running as root"
msgstr ""
-#: dnsmasq.c:540
+#: dnsmasq.c:563
msgid "connected to system DBus"
msgstr ""
-#: dnsmasq.c:659
+#: dnsmasq.c:683
#, c-format
msgid "child process killed by signal %d"
msgstr ""
-#: dnsmasq.c:663
+#: dnsmasq.c:687
#, c-format
msgid "child process exited with status %d"
msgstr ""
-#: dnsmasq.c:667
+#: dnsmasq.c:691
#, c-format
msgid "failed to execute %s: %s"
msgstr ""
-#: dnsmasq.c:671
+#: dnsmasq.c:695
#, c-format
msgid "failed to create helper: %s"
msgstr ""
-#: dnsmasq.c:705
+#: dnsmasq.c:729
msgid "exiting on receipt of SIGTERM"
msgstr ""
-#: dnsmasq.c:756
+#: dnsmasq.c:780
#, c-format
msgid "no servers found in %s, will retry"
msgstr ""
-#: dhcp.c:32
+#: dhcp.c:38
#, c-format
msgid "cannot create DHCP socket : %s"
msgstr ""
-#: dhcp.c:41
+#: dhcp.c:50
#, c-format
msgid "failed to set options on DHCP socket: %s"
msgstr ""
-#: dhcp.c:59
+#: dhcp.c:68
#, c-format
msgid "failed to set SO_REUSE{ADDR|PORT} on DHCP socket: %s"
msgstr ""
-#: dhcp.c:72
+#: dhcp.c:81
#, c-format
msgid "failed to bind DHCP server socket: %s"
msgstr ""
-#: dhcp.c:85
+#: dhcp.c:94
#, c-format
msgid "cannot create ICMP raw socket: %s."
msgstr ""
-#: dhcp.c:100
+#: dhcp.c:223
#, c-format
-msgid "duplicate IP address %s in dhcp-config directive."
+msgid "DHCP packet received on %s which has no address"
msgstr ""
-#: dhcp.c:103
+#: dhcp.c:382
#, c-format
-msgid "illegal domain %s in dhcp-config directive."
+msgid "DHCP range %s -- %s is not consistent with netmask %s"
msgstr ""
-#: dhcp.c:221
+#: dhcp.c:709
#, c-format
-msgid "DHCP packet received on %s which has no address"
+msgid "failed to read %s:%s"
msgstr ""
-#: dhcp.c:352
+#: dhcp.c:744
#, c-format
-msgid "DHCP range %s -- %s is not consistent with netmask %s"
+msgid "bad line at %s line %d"
msgstr ""
-#: dhcp.c:669
+#: dhcp.c:847
#, c-format
-msgid "failed to read %s:%s"
+msgid "duplicate IP address %s in dhcp-config directive."
msgstr ""
-#: dhcp.c:704
+#: dhcp.c:850
#, c-format
-msgid "bad line at %s line %d"
+msgid "duplicate IP address %s in %s."
msgstr ""
-#: dhcp.c:826
+#: dhcp.c:858
#, c-format
-msgid "duplicate IP address %s in %s."
+msgid "illegal domain %s in dhcp-config directive."
msgstr ""
-#: dhcp.c:832
+#: dhcp.c:860
#, c-format
msgid "illegal domain %s in %s."
msgstr ""
-# @Simon: Here I need an example to understand it :)
-#: dhcp.c:839
-#, fuzzy, c-format
-msgid "read %s - %d hosts"
-msgstr "lese %s - %d Adressen"
+#: dhcp.c:899
+#, c-format
+msgid "%s has more then one address in hostsfile, using %s for DHCP"
+msgstr ""
-#: dhcp.c:866
+#: dhcp.c:904
#, c-format
msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr ""
-#: lease.c:54
+#: lease.c:58
#, c-format
msgid "cannot open or create lease file %s: %s"
msgstr ""
-#: lease.c:80
+#: lease.c:84
msgid "too many stored leases"
msgstr ""
-#: lease.c:121
+#: lease.c:125
#, c-format
msgid "cannot run lease-init script %s: %s"
msgstr ""
-#: lease.c:127
+#: lease.c:131
#, c-format
msgid "lease-init script returned exit code %s"
msgstr ""
-#: lease.c:234
+#: lease.c:238
#, c-format
msgid "failed to write %s: %s (retry in %us)"
msgstr ""
-#: rfc2131.c:300
+#: rfc2131.c:303
#, c-format
msgid "no address range available for DHCP request %s %s"
msgstr ""
-#: rfc2131.c:301
+#: rfc2131.c:304
msgid "with subnet selector"
msgstr ""
-#: rfc2131.c:301
+#: rfc2131.c:304
msgid "via"
msgstr ""
-#: rfc2131.c:312
+#: rfc2131.c:315
#, c-format
msgid "DHCP packet: transaction-id is %u"
msgstr ""
-#: rfc2131.c:317
+#: rfc2131.c:320
#, c-format
msgid "Available DHCP subnet: %s/%s"
msgstr ""
-#: rfc2131.c:319
+#: rfc2131.c:322
#, c-format
msgid "Available DHCP range: %s -- %s"
msgstr ""
-#: rfc2131.c:347 rfc2131.c:378
+#: rfc2131.c:350 rfc2131.c:381
msgid "disabled"
msgstr ""
-#: rfc2131.c:390 rfc2131.c:852
+#: rfc2131.c:393 rfc2131.c:873
msgid "address in use"
msgstr ""
-#: rfc2131.c:393
+#: rfc2131.c:396
msgid "no address configured"
msgstr ""
-#: rfc2131.c:406 rfc2131.c:720
+#: rfc2131.c:409 rfc2131.c:736
msgid "no address available"
msgstr ""
-#: rfc2131.c:416
-#, c-format
-msgid "Limit of %d leases exceeded."
-msgstr ""
-
-#: rfc2131.c:417 rfc2131.c:862
+#: rfc2131.c:418 rfc2131.c:883
msgid "no leases left"
msgstr ""
-#: rfc2131.c:421 rfc2131.c:826
+#: rfc2131.c:421 rfc2131.c:847
msgid "wrong network"
msgstr ""
-#: rfc2131.c:519
+#: rfc2131.c:520
#, c-format
msgid "Ignoring domain %s for DHCP host name %s"
msgstr ""
-#: rfc2131.c:598
+#: rfc2131.c:614
#, c-format
msgid "Vendor class: %s"
msgstr ""
-#: rfc2131.c:600
+#: rfc2131.c:616
#, c-format
msgid "User class: %s"
msgstr ""
-#: rfc2131.c:641
+#: rfc2131.c:657
#, c-format
msgid "disabling DHCP static address %s for %s"
msgstr ""
-#: rfc2131.c:662
+#: rfc2131.c:678
msgid "unknown lease"
msgstr ""
-#: rfc2131.c:671 rfc2131.c:970
+#: rfc2131.c:687 rfc2131.c:992
msgid "ignored"
msgstr ""
-#: rfc2131.c:691
+#: rfc2131.c:707
#, c-format
msgid "not using configured address %s because it is leased to %s"
msgstr ""
-#: rfc2131.c:701
+#: rfc2131.c:717
#, c-format
msgid ""
"not using configured address %s because it is in use by the server or relay"
msgstr ""
-#: rfc2131.c:704
+#: rfc2131.c:720
#, c-format
msgid "not using configured address %s because it was previously declined"
msgstr ""
-#: rfc2131.c:718 rfc2131.c:855
+#: rfc2131.c:734 rfc2131.c:876
msgid "no unique-id"
msgstr ""
-#: rfc2131.c:789
+#: rfc2131.c:806
msgid "wrong address"
msgstr ""
-#: rfc2131.c:802
+#: rfc2131.c:823
msgid "lease not found"
msgstr ""
-#: rfc2131.c:834
+#: rfc2131.c:855
msgid "address not available"
msgstr ""
-#: rfc2131.c:845
+#: rfc2131.c:866
msgid "static lease available"
msgstr ""
-#: rfc2131.c:849
+#: rfc2131.c:870
msgid "address reserved"
msgstr ""
-#: rfc2131.c:1252
+#: rfc2131.c:1265
#, c-format
msgid "tags: %s"
msgstr ""
-#: rfc2131.c:1334
+#: rfc2131.c:1352
#, c-format
msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
msgstr ""
-#: rfc2131.c:1488
+#: rfc2131.c:1507
#, c-format
msgid "requested options: %s"
msgstr ""
-#: rfc2131.c:1519
+#: rfc2131.c:1556
#, c-format
-msgid "server name: %s"
+msgid "next server: %s"
msgstr ""
-#: rfc2131.c:1531
+#: rfc2131.c:1580
#, c-format
msgid "bootfile name: %s"
msgstr ""
-#: rfc2131.c:1540
+#: rfc2131.c:1583
#, c-format
-msgid "next server: %s"
+msgid "server name: %s"
msgstr ""
-#: netlink.c:59
+#: netlink.c:63
#, c-format
msgid "cannot create netlink socket: %s"
msgstr ""
-#: netlink.c:226
+#: netlink.c:230
#, c-format
msgid "netlink returns error: %s"
msgstr ""
-#: dbus.c:111
+#: dbus.c:115
msgid "attempt to set an IPv6 server address via DBus - no IPv6 support"
msgstr ""
-#: dbus.c:237
+#: dbus.c:241
msgid "setting upstream servers from DBus"
msgstr ""
-#: dbus.c:275
+#: dbus.c:279
msgid "could not register a DBus message handler"
msgstr ""
-#: bpf.c:43
+#: bpf.c:146
#, c-format
msgid "cannot create DHCP BPF socket: %s"
msgstr ""
-#: bpf.c:71
+#: bpf.c:174
#, c-format
msgid "DHCP request for unsupported hardware type (%d) received on %s"
msgstr ""
-#: tftp.c:158
+#: tftp.c:173
+msgid "unable to get free port for TFTP"
+msgstr ""
+
+#: tftp.c:188
#, c-format
msgid "unsupported request from %s"
msgstr ""
-#: tftp.c:236
+#: tftp.c:266
#, c-format
msgid "TFTP sent %s to %s"
msgstr ""
-#: tftp.c:259
+#: tftp.c:289
#, c-format
msgid "file %s not found"
msgstr ""
-#: tftp.c:369
+#: tftp.c:399
#, c-format
msgid "TFTP error %d %s received from %s"
msgstr ""
-#: tftp.c:400
+#: tftp.c:430
#, c-format
msgid "TFTP failed sending %s to %s"
msgstr ""
-#: log.c:69
+#: log.c:73
#, c-format
msgid "cannot open %s: %s"
msgstr ""
-#: log.c:146
+#: log.c:89
+#, c-format
+msgid "warning: failed to change owner of %s: %s"
+msgstr ""
+
+#: log.c:161
#, c-format
msgid "overflow: %d log entries lost"
msgstr ""
-#: log.c:223
+#: log.c:238
#, c-format
msgid "log failed: %s"
msgstr ""
@@ -1274,6 +1367,11 @@ msgstr ""
# @Simon: I would like to have an example :) - instead of "von" it would be possible to use "aus",
# @Simon: both translate to "of" and nothing else, but depending on the sense one could be better
# @Simon: than the other.
-#: log.c:378
+#: log.c:394
msgid "FAILED to start up"
msgstr "Start gescheitert"
+
+# @Simon: Here I need an example to understand it :)
+#, fuzzy
+#~ msgid "read %s - %d hosts"
+#~ msgstr "lese %s - %d Adressen"
diff --git a/po/es.po b/po/es.po
index 0bfc565..3c6a307 100644
--- a/po/es.po
+++ b/po/es.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dnsmasq 2.24\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-08-29 11:09+0100\n"
+"POT-Creation-Date: 2008-02-12 11: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"
@@ -15,31 +15,31 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: cache.c:671
+#: cache.c:680
#, fuzzy, c-format
msgid "failed to load names from %s: %s"
msgstr "no se pudo cargar nombres desde %s: %s"
-#: cache.c:705 dhcp.c:717
+#: cache.c:714 dhcp.c:757
#, fuzzy, c-format
msgid "bad address at %s line %d"
msgstr "dirección errónea en %s línea %d"
-#: cache.c:752 dhcp.c:731
+#: cache.c:761 dhcp.c:771
#, c-format
msgid "bad name at %s line %d"
msgstr "nombre erróneo en %s línea %d"
-#: cache.c:759 dhcp.c:785
+#: cache.c:768 dhcp.c:825
#, c-format
msgid "read %s - %d addresses"
msgstr "direcciónes %s - %d leídas"
-#: cache.c:797
+#: cache.c:806
msgid "cleared cache"
msgstr "el caché fue liberado"
-#: cache.c:844
+#: cache.c:855
#, c-format
msgid ""
"not giving name %s to the DHCP lease of %s because the name exists in %s "
@@ -48,394 +48,445 @@ msgstr ""
"no otorgando nombre %s al arriendo DHCP de %s porque el nombre existe en %s "
"con dirección %s"
-#: cache.c:884
+#: cache.c:907
+#, c-format
+msgid "time %lu"
+msgstr "tiempo %lu"
+
+#: cache.c:908
#, fuzzy, c-format
-msgid ""
-"time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache "
-"entries."
+msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
msgstr ""
-"tiempo %lu, tamaño de caché %d, %d/%d inserciónes de caché reutilizaron "
-"objetos no vencidos."
+"tamaño de caché %d, %d/%d inserciónes de caché reutilizaron objetos no "
+"vencidos."
+
+#: cache.c:910
+#, c-format
+msgid "queries forwarded %u, queries answered locally %u"
+msgstr "búsquedas reenviadas %u, búsquedas respondidas localmente %u"
-#: util.c:157 option.c:758
+#: cache.c:933
+#, c-format
+msgid "server %s#%d: queries sent %u, retried or failed %u"
+msgstr "servidor %s#%d: búsquedas enviadas %u, reintentadas o fallidas %u"
+
+#: util.c:160
msgid "could not get memory"
msgstr "no se pudo adquirir memoria"
-#: util.c:167
+#: util.c:170
#, fuzzy, c-format
msgid "failed to allocate %d bytes"
-msgstr "no se pudo cargar %s: %s"
+msgstr "no se pudo alocar %d bytes"
-#: util.c:272
+#: util.c:275
#, c-format
msgid "infinite"
msgstr "infinito"
-#: option.c:188
+#: option.c:244
msgid "Specify local address(es) to listen on."
msgstr "Especificar dirección(es) locales dónde escuchar."
-#: option.c:189
+#: option.c:245
msgid "Return ipaddr for all hosts in specified domains."
msgstr ""
"Retornar ipaddr (dirección IP) para todos los hosts en los dominios "
"especificados."
-#: option.c:190
+#: option.c:246
msgid "Fake reverse lookups for RFC1918 private address ranges."
msgstr ""
"Falsificar búsquedas reversas para rangos de dirección privados RFC1918."
-#: option.c:191
+#: option.c:247
msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
msgstr "Tratar ipaddr (dirección IP) como NXDOMAIN (derrota comodín Verisign)."
-#: option.c:192
+#: option.c:248
#, c-format
msgid "Specify the size of the cache in entries (defaults to %s)."
msgstr ""
"Especificar tamaño de caché en cuanto a cantidad de objetos (%s por "
"predeterminado)."
-#: option.c:193
+#: option.c:249
#, c-format
msgid "Specify configuration file (defaults to %s)."
msgstr "Especificar archivo de configuración (%s por predeterminado)."
-#: option.c:194
+#: option.c:250
msgid "Do NOT fork into the background: run in debug mode."
msgstr "NO hacer un fork hacia el fondo: correr en modo debug."
-#: option.c:195
+#: option.c:251
msgid "Do NOT forward queries with no domain part."
msgstr "NO reenviar búsquedas sin parte de dominio."
-#: option.c:196
+#: option.c:252
msgid "Return self-pointing MX records for local hosts."
msgstr "Retornar expedientes MX auto-señaladores para hosts locales."
-#: option.c:197
+#: option.c:253
msgid "Expand simple names in /etc/hosts with domain-suffix."
msgstr ""
"Expandir nombres simples en /etc/hosts con domain-suffix (sufijo de dominio)."
-#: option.c:198
+#: option.c:254
msgid "Don't forward spurious DNS requests from Windows hosts."
msgstr "No reenviar pedidos DNS falsos desde máquinas Windows."
-#: option.c:199
+#: option.c:255
msgid "Enable DHCP in the range given with lease duration."
msgstr "Habilitar DHCP dentro del rango brindado con duración del arriendo."
-#: option.c:200
+#: option.c:256
#, c-format
msgid "Change to this group after startup (defaults to %s)."
msgstr "Cambiar a este grupo después del inicio (%s por predeterminado)."
-#: option.c:201
+#: option.c:257
msgid "Set address or hostname for a specified machine."
msgstr "Fijar dirección o nombre de host para una máquina especificada."
-#: option.c:202
+#: option.c:258
msgid "Read DHCP host specs from file"
-msgstr ""
+msgstr "Leer especificaciones DHCP de host desde archivo"
-#: option.c:203
+#: option.c:259
+msgid "Read DHCP option specs from file"
+msgstr "Leer opciones DHCP de host desde archivo"
+
+#: option.c:260
#, c-format
msgid "Do NOT load %s file."
msgstr "NO cargar archivo %s."
-#: option.c:204
+#: option.c:261
#, c-format
msgid "Specify a hosts file to be read in addition to %s."
msgstr "Especificar un archivo de hosts para ser leído adicionalmente a %s."
-#: option.c:205
+#: option.c:262
msgid "Specify interface(s) to listen on."
msgstr "Especificar interface(s) donde escuchar."
-#: option.c:206
+#: option.c:263
msgid "Specify interface(s) NOT to listen on."
msgstr "Especificar interface(s) donde NO escuchar."
-#: option.c:207
+#: option.c:264
#, fuzzy
msgid "Map DHCP user class to tag."
msgstr "Trazar clase de usuario DHCP a etiqueta."
-#: option.c:208
+#: option.c:265
msgid "Map RFC3046 circuit-id to tag."
msgstr "Trazar circuit-id (identificación de circuito) RFC3046 a etiqueta."
-#: option.c:209
+#: option.c:266
msgid "Map RFC3046 remote-id to tag."
msgstr "Trazar remote-id (identificación remota) RFC3046 a etiqueta."
-#: option.c:210
+#: option.c:267
msgid "Map RFC3993 subscriber-id to tag."
msgstr "Trazar subscriber-id (identificación de suscritor) RFC3993 a etiqueta."
-#: option.c:211
+#: option.c:268
#, fuzzy
msgid "Don't do DHCP for hosts with tag set."
msgstr "No hacer DHCP para hosts con la etiqueta fijada."
-#: option.c:212
+#: option.c:269
+#, fuzzy
+msgid "Force broadcast replies for hosts with tag set."
+msgstr "Forzar respuestas broadcast para hosts con etiqueta fijada."
+
+#: option.c:270
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:213
+#: option.c:271
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:214
+#: option.c:272
#, c-format
msgid "Specify where to store DHCP leases (defaults to %s)."
msgstr "Especificar donde almacenar arriendos DHCP (%s por predeterminado)."
-#: option.c:215
+#: option.c:273
msgid "Return MX records for local hosts."
msgstr "Retornar expedientes MX para hosts locales."
-#: option.c:216
+#: option.c:274
msgid "Specify an MX record."
msgstr "Especificar un expediente MX."
-#: option.c:217
+#: option.c:275
msgid "Specify BOOTP options to DHCP server."
msgstr "Especificar opciones BOOTP a servidor DHCP."
-#: option.c:218
+#: option.c:276
#, c-format
msgid "Do NOT poll %s file, reload only on SIGHUP."
msgstr "NO revisar archivo %s periódicamente, recargar solo con SIGHUP."
-#: option.c:219
+#: option.c:277
msgid "Do NOT cache failed search results."
msgstr "NO almacenar en caché resultados de búsquedas fallidas."
-#: option.c:220
+#: option.c:278
#, c-format
msgid "Use nameservers strictly in the order given in %s."
msgstr "Usar servidores DNS estrictamente en el órden brindado en %s."
-#: option.c:221
+#: option.c:279
#, fuzzy
msgid "Specify options to be sent to DHCP clients."
msgstr "Especificar opciones para ser enviadas a clientes DHCP."
-#: option.c:222
+#: option.c:280
msgid "DHCP option sent even if the client does not request it."
msgstr "Opción DHCP enviada aún si el cliente no la pide."
-#: option.c:223
+#: option.c:281
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:224
+#: option.c:282
#, c-format
msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
msgstr ""
"Tamaño máximo de paquetes UDP soportado para EDNS.0 (%s por predeterminado)."
-#: option.c:225
-msgid "Log queries."
+#: option.c:283
+#, fuzzy
+msgid "Log DNS queries."
msgstr "Bitacorear búsquedas."
-#: option.c:226
-msgid "Force the originating port for upstream queries."
+#: option.c:284
+#, fuzzy
+msgid "Force the originating port for upstream DNS queries."
msgstr "Enforzar el puerto original para búsquedas upstream."
-#: option.c:227
+#: option.c:285
msgid "Do NOT read resolv.conf."
msgstr "NO leer resolv.conf."
-#: option.c:228
+#: option.c:286
#, c-format
msgid "Specify path to resolv.conf (defaults to %s)."
msgstr "Especificar el path hacia resolv.conf (%s por predeterminado)."
-#: option.c:229
+#: option.c:287
msgid "Specify address(es) of upstream servers with optional domains."
msgstr ""
"Especificar dirección(es) de servidores upstream con dominios opcionales."
-#: option.c:230
+#: option.c:288
msgid "Never forward queries to specified domains."
msgstr "Nunca reenviar búsquedas a dominios especificados."
-#: option.c:231
+#: option.c:289
msgid "Specify the domain to be assigned in DHCP leases."
msgstr "Especificar el dominio para ser asignado en arriendos DHCP."
-#: option.c:232
+#: option.c:290
msgid "Specify default target in an MX record."
msgstr "Especificar destino predeterminado en un expediente MX."
-#: option.c:233
+#: option.c:291
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:234
+#: option.c:292
+#, fuzzy
+msgid "Specify time-to-live in seconds for negative caching."
+msgstr "Especificar tiempo de vida en segundos para caché negativo."
+
+#: option.c:293
#, c-format
msgid "Change to this user after startup. (defaults to %s)."
msgstr "Cambiar a este usuario despues del inicio (%s por predeterminado)."
-#: option.c:235
+#: option.c:294
#, fuzzy
msgid "Map DHCP vendor class to tag."
msgstr "Trazar clase de vendedor DHCP a etiqueta."
-#: option.c:236
+#: option.c:295
msgid "Display dnsmasq version and copyright information."
msgstr "Mostrar información sobre la versión y copyright de dnsmasq."
-#: option.c:237
+#: option.c:296
msgid "Translate IPv4 addresses from upstream servers."
msgstr "Traducir direcciones IPv4 desde servidores upstream."
-#: option.c:238
+#: option.c:297
msgid "Specify a SRV record."
msgstr "Especificar un expediente SRV."
-#: option.c:239
+#: option.c:298
msgid "Display this message. Use --help dhcp for known DHCP options."
msgstr "Mostrar este mensaje. Usar --help dhcp para opciones DHCP conocidas."
-#: option.c:240
+#: option.c:299
#, fuzzy, c-format
msgid "Specify path of PID file (defaults to %s)."
msgstr "Especificar path de archivo PID (%s por predeterminado)."
-#: option.c:241
+#: option.c:300
#, 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:242
+#: option.c:301
msgid "Answer DNS queries based on the interface a query was sent to."
msgstr ""
"Responder a búsquedas DNS en base a la interface a la cuál fueron enviadas."
-#: option.c:243
+#: option.c:302
msgid "Specify TXT DNS record."
msgstr "Especificar expediente DNS TXT."
-#: option.c:244
+#: option.c:303
#, fuzzy
msgid "Specify PTR DNS record."
msgstr "Especificar expediente DNS PTR."
-#: option.c:245
+#: option.c:304
msgid "Give DNS name to IPv4 address of interface."
msgstr "Otorgar nombre DNS a dirección IPv4 de interface."
-#: option.c:246
+#: option.c:305
msgid "Bind only to interfaces in use."
msgstr "Acoplar solo a interfaces en uso."
-#: option.c:247
+#: option.c:306
#, c-format
msgid "Read DHCP static host information from %s."
msgstr "Leer información sobre hosts DHCP estáticos desde %s."
-#: option.c:248
+#: option.c:307
msgid "Enable the DBus interface for setting upstream servers, etc."
msgstr "Habilitar la interface DBus para fijar servidores upstream, etc."
-#: option.c:249
+#: option.c:308
msgid "Do not provide DHCP on this interface, only provide DNS."
msgstr "No proveer DHCP en esta interface, sólo proveer DNS."
-#: option.c:250
+#: option.c:309
msgid "Enable dynamic address allocation for bootp."
msgstr "Habilitar alocación dinámica de direcciónes para BOOTP."
-#: option.c:251
+#: option.c:310
#, fuzzy
msgid "Map MAC address (with wildcards) to option set."
msgstr "Trazar dirección MAC (con comodínes) a opción fijada."
-#: option.c:253
+#: option.c:312
msgid "Treat DHCP requests on aliases as arriving from interface."
msgstr "Tratar pedidos DHCP en alias como si llegaran de la interface."
-#: option.c:255
+#: option.c:314
msgid "Disable ICMP echo address checking in the DHCP server."
msgstr ""
"Deshabilitar verificación de direcciónes echo ICMP en el servidor DHCP."
-#: option.c:256
+#: option.c:315
msgid "Script to run on DHCP lease creation and destruction."
msgstr ""
"Archivo guión para ejecutar cuando se crea o destruye un arriendo DHCP."
-#: option.c:257
+#: option.c:316
msgid "Read configuration from all the files in this directory."
msgstr "Leer configuración desde todos los archivos en este directorio."
-#: option.c:258
+#: option.c:317
#, fuzzy
msgid "Log to this syslog facility or file. (defaults to DAEMON)"
msgstr ""
"Bitacorear a esta facilidad syslog o archivo. (DAEMON por predeterminado)"
-#: option.c:259
+#: option.c:318
msgid "Read leases at startup, but never write the lease file."
msgstr "Leer arriendos al inicio, pero nunca escribir el archivo de arriendos."
-#: option.c:260
+#: option.c:319
#, fuzzy, c-format
msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
msgstr "Número máximo de búsquedas DNS simultáneas. (%s por predeterminado)"
-#: option.c:261
+#: option.c:320
#, c-format
msgid "Clear DNS cache when reloading %s."
msgstr "Liberar caché DNS al recargar %s."
-#: option.c:262
+#: option.c:321
msgid "Ignore hostnames provided by DHCP clients."
msgstr "Ignorar nombres de host brindados por clientes DHCP."
-#: option.c:263
+#: option.c:322
+msgid "Do NOT reuse filename and server fields for extra DHCP options."
+msgstr ""
+"NO reutilizar campos de nombre de archivo y servidor para opciones DHCP "
+"extra."
+
+#: option.c:323
msgid "Enable integrated read-only TFTP server."
msgstr "Habilitar servidor integrado TFTP solo-lectura."
-#: option.c:264
+#: option.c:324
msgid "Export files by TFTP only from the specified subtree."
msgstr "Exportar archivos vía TFTP solo del sub-árbol especificado."
-#: option.c:265
+#: option.c:325
msgid "Add client IP address to tftp-root."
-msgstr ""
+msgstr "Agregar IP de cliente a tftp-root."
-#: option.c:266
+#: option.c:326
msgid "Allow access only to files owned by the user running dnsmasq."
msgstr ""
"Permitir acceso solo a archivos pertenecientes al usuario que corre dnsmasq."
-#: option.c:267
+#: option.c:327
#, fuzzy, c-format
msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
msgstr ""
"Número máximo de transferencias TFTP simultáneas (%s por predeterminado)."
-#: option.c:268
+#: option.c:328
msgid "Disable the TFTP blocksize extension."
msgstr "Deshabilitar la extensión TFTP blocksize (tamaño de bloque)."
-#: option.c:269
+#: option.c:329
+msgid "Ephemeral port range for use by TFTP transfers."
+msgstr "Rango de puertos efímeros para ser usados por transferencias TFTP."
+
+#: option.c:330
msgid "Extra logging for DHCP."
msgstr "Bitacoreo extra para DHCP."
-#: option.c:270
+#: option.c:331
msgid "Enable async. logging; optionally set queue length."
msgstr "Habilitar bitacoreo asincrónico; opcionalmente fijar tamaño de cola."
-#: option.c:501
+#: option.c:332
+msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
+msgstr "Detener revinculación DNS. Filtrar rangos de IP privados al resolver."
+
+#: option.c:333
+msgid "Always perform DNS queries to all servers."
+msgstr "Siempre realizar búsquedas DNS a todos los servidores."
+
+#: option.c:334
+msgid "Set tag if client includes option in request."
+msgstr "Fijar etiqueta si cliente incluye opción en pedido."
+
+#: option.c:585
#, c-format
msgid ""
"Usage: dnsmasq [options]\n"
@@ -444,173 +495,192 @@ msgstr ""
"Modo de uso: dnsmasq [opciones]\n"
"\n"
-#: option.c:503
+#: option.c:587
#, 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:505
+#: option.c:589
#, c-format
msgid "Valid options are :\n"
msgstr "Opciones válidas son :\n"
-#: option.c:526
+#: option.c:610
#, c-format
msgid "Known DHCP options:\n"
msgstr "Opciones DHCP conocidas:\n"
-#: option.c:599
+#: option.c:683
msgid "bad dhcp-option"
msgstr "opción dhcp-option errónea"
-#: option.c:655
+#: option.c:739
#, fuzzy
msgid "bad IP address"
msgstr "dirección IP errónea"
-#: option.c:753
+#: option.c:837
msgid "bad domain in dhcp-option"
msgstr "dominio erróneo en dhcp-option"
-#: option.c:809
+#: option.c:895
msgid "dhcp-option too long"
msgstr "opción dhcp-option demasiado larga"
-#: option.c:853
+#: option.c:942
#, fuzzy, c-format
msgid "cannot access directory %s: %s"
msgstr "no se puede accesar directorio %s: %s"
-#: option.c:872 tftp.c:313
+#: option.c:961 tftp.c:343
#, fuzzy, c-format
msgid "cannot access %s: %s"
msgstr "no se puede accesar %s: %s"
-#: option.c:913
+#: option.c:998
#, fuzzy
msgid "only one dhcp-hostsfile allowed"
-msgstr "solo una etiqueta netid permitida"
+msgstr "solo un dhcp-hostsfile permitido"
-#: option.c:962
+#: option.c:1005
+#, fuzzy
+msgid "only one dhcp-optsfile allowed"
+msgstr "solo un dhcp-optsfile permitido"
+
+#: option.c:1049
msgid "bad MX preference"
msgstr "preferencia MX errónea"
-#: option.c:971
+#: option.c:1053
msgid "bad MX name"
msgstr "nombre MX erróneo"
-#: option.c:989
+#: option.c:1067
msgid "bad MX target"
msgstr "destino MX erróneo"
-#: option.c:1001
+#: option.c:1078
msgid "cannot run scripts under uClinux"
msgstr "no se pueden correr archivos guiónes bajo uClinux"
-#: option.c:1196 option.c:1207
+#: option.c:1265 option.c:1273
msgid "bad port"
msgstr "puerto erróneo"
-#: option.c:1349
+#: option.c:1293 option.c:1318
+msgid "interface binding not supported"
+msgstr "vinculación de interface no está soportado"
+
+#: option.c:1427
+#, fuzzy
+msgid "bad port range"
+msgstr "puerto erróneo"
+
+#: option.c:1444
msgid "bad bridge-interface"
msgstr "opción bridge-interface (interface puente) errónea"
-#: option.c:1391
+#: option.c:1485
msgid "bad dhcp-range"
msgstr "opción dhcp-range (rango DHCP) errónea"
-#: option.c:1419
+#: option.c:1511
msgid "only one netid tag allowed"
msgstr "solo una etiqueta netid permitida"
-#: option.c:1461
+#: option.c:1551
msgid "inconsistent DHCP range"
msgstr "rango DHCP inconsistente"
-#: option.c:1637
+#: option.c:1719
#, fuzzy
msgid "bad DHCP host name"
-msgstr "nombre MX erróneo"
+msgstr "nombre de host DHCP erróneo"
-#: option.c:1861
+#: option.c:1959
#, fuzzy
msgid "bad interface name"
msgstr "nombre de interface erróneo"
-#: option.c:1885
+#: option.c:1979
#, fuzzy
msgid "bad PTR record"
msgstr "expediente PTR erróneo"
-#: option.c:1909
-msgid "bad TXT record"
-msgstr "expediente TXT erróneo"
-
-#: option.c:1941
+#: option.c:1999
msgid "TXT record string too long"
msgstr "expediente TXT demasiado largo"
-#: option.c:1980
+#: option.c:2003
+msgid "bad TXT record"
+msgstr "expediente TXT erróneo"
+
+#: option.c:2063
msgid "bad SRV record"
msgstr "expediente SRV erróneo"
-#: option.c:1992
+#: option.c:2072
msgid "bad SRV target"
msgstr "destino SRV erróneo"
-#: option.c:2003
+#: option.c:2080
msgid "invalid port number"
msgstr "número de puerto inválido"
-#: option.c:2013
+#: option.c:2087
msgid "invalid priority"
msgstr "prioridad inválida"
-#: option.c:2023
+#: option.c:2094
msgid "invalid weight"
msgstr "peso inválido"
-#: option.c:2054
+#: option.c:2130
#, c-format
msgid "files nested too deep in %s"
msgstr "archivos jerarquizados demasiado profundo en %s"
-#: option.c:2062 tftp.c:467
+#: option.c:2138 tftp.c:497
#, c-format
msgid "cannot read %s: %s"
msgstr "no se puede leer %s: %s"
-#: option.c:2114
+#: option.c:2199
msgid "missing \""
msgstr "falta \""
-#: option.c:2161
+#: option.c:2246
msgid "bad option"
msgstr "opción errónea"
-#: option.c:2163
+#: option.c:2248
msgid "extraneous parameter"
msgstr "parámetro extraño"
-#: option.c:2165
+#: option.c:2250
msgid "missing parameter"
msgstr "parámetro ausente"
-#: option.c:2173
+#: option.c:2258
msgid "error"
msgstr "error"
-#: option.c:2179
+#: option.c:2264
#, c-format
msgid "%s at line %d of %%s"
msgstr "%s en línea %d de %%s"
-#: option.c:2252
+#: option.c:2304 option.c:2334
+#, fuzzy, c-format
+msgid "read %s"
+msgstr "leyendo %s"
+
+#: option.c:2400
#, c-format
msgid "Dnsmasq version %s %s\n"
msgstr "Dnsmasq versión %s %s\n"
-#: option.c:2253
+#: option.c:2401
#, c-format
msgid ""
"Compile time options %s\n"
@@ -619,658 +689,697 @@ msgstr ""
"Opciones de compilación %s\n"
"\n"
-#: option.c:2254
+#: option.c:2402
#, c-format
msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
msgstr "Este software viene SIN NINGUNA GARANTIA.\n"
-#: option.c:2255
+#: option.c:2403
#, 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:2256
-#, c-format
-msgid "under the terms of the GNU General Public License, version 2.\n"
+#: option.c:2404
+#, fuzzy, c-format
+msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
msgstr "bajo los términos de la GNU General Public License, versión 2.\n"
-#: option.c:2267
+#: option.c:2415
msgid "try --help"
msgstr "pruebe --help"
-#: option.c:2269
+#: option.c:2417
msgid "try -w"
msgstr "pruebe -w"
-#: option.c:2272
+#: option.c:2420
#, fuzzy, c-format
msgid "bad command line options: %s"
msgstr "opciones de línea de comandos erróneas: %s"
-#: option.c:2313
+#: option.c:2461
#, c-format
msgid "cannot get host-name: %s"
msgstr "no se puede obtener host-name (nombre de host): %s"
-#: option.c:2341
+#: option.c:2489
msgid "only one resolv.conf file allowed in no-poll mode."
msgstr "solo un archivo resolv.conf permitido en modo no-poll."
-#: option.c:2351
+#: option.c:2499
msgid "must have exactly one resolv.conf to read domain from."
msgstr "debe haber exáctamente un resolv.conf desde donde leer dominio."
-#: option.c:2354 network.c:549
+#: option.c:2502 network.c:640
#, fuzzy, c-format
msgid "failed to read %s: %s"
msgstr "no se pudo leer %s: %s"
-#: option.c:2372
+#: option.c:2520
#, c-format
msgid "no search directive found in %s"
msgstr "ninguna directiva de búsqueda encontrada en %s"
-#: forward.c:376
+#: forward.c:381
#, c-format
msgid "nameserver %s refused to do a recursive query"
msgstr "servidor DNS %s se reusó a hacer una búsqueda recursiva"
-#: isc.c:73 dnsmasq.c:723
+#: forward.c:409
+msgid "possible DNS-rebind attack detected"
+msgstr "posible ataque de revinculación DNS detectado"
+
+#: isc.c:77 dnsmasq.c:747
#, fuzzy, c-format
msgid "failed to access %s: %s"
msgstr "no se pudo accesar %s: %s"
-#: isc.c:89
+#: isc.c:93
#, fuzzy, c-format
msgid "failed to load %s: %s"
msgstr "no se pudo cargar %s: %s"
-#: isc.c:93 dnsmasq.c:745
+#: isc.c:97 dnsmasq.c:769
#, c-format
msgid "reading %s"
msgstr "leyendo %s"
-#: isc.c:115
+#: isc.c:119
#, c-format
msgid "bad name in %s"
msgstr "nombre erróneo en %s"
-#: isc.c:177
+#: isc.c:181
#, 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:41
+#: network.c:45
#, fuzzy, c-format
msgid "unknown interface %s in bridge-interface"
msgstr "interface desconocida %s en bridge-interface"
-#: network.c:377 dnsmasq.c:170
+#: network.c:389 dnsmasq.c:180
#, c-format
msgid "failed to create listening socket: %s"
msgstr "no se pudo crear un socket escuchador: %s"
-#: network.c:384
+#: network.c:396
#, c-format
msgid "failed to set IPV6 options on listening socket: %s"
msgstr "no se pudo fijar opciones IPv6 sobre socket escuchador: %s"
-#: network.c:402
+#: network.c:415
#, c-format
msgid "failed to bind listening socket for %s: %s"
msgstr "no se pudo acoplar socket escuchador para %s: %s"
-#: network.c:410
+#: network.c:420
#, c-format
msgid "failed to listen on socket: %s"
msgstr "no se pudo escuchar en socket: %s"
-#: network.c:421
+#: network.c:432
#, fuzzy, c-format
msgid "failed to create TFTP socket: %s"
msgstr "no se pudo crear socket TFTP: %s"
-#: network.c:493
+#: network.c:549
+#, fuzzy, c-format
+msgid "failed to bind server socket for %s: %s"
+msgstr "no se pudo acoplar socket escuchador para %s: %s"
+
+#: network.c:582
#, c-format
msgid "ignoring nameserver %s - local interface"
msgstr "ignorando servidor DNS %s - interface local"
-#: network.c:502
+#: network.c:591
#, fuzzy, c-format
msgid "ignoring nameserver %s - cannot make/bind socket: %s"
msgstr "ignorando servidor DNS %s - no se puede crear/acoplar socket: %s"
-#: network.c:517
+#: network.c:606
msgid "unqualified"
msgstr "no calificado"
-#: network.c:517
+#: network.c:606
msgid "names"
-msgstr ""
+msgstr "nombres"
-#: network.c:519
+#: network.c:608
msgid "default"
-msgstr ""
+msgstr "predeterminado"
-#: network.c:521
+#: network.c:610
msgid "domain"
msgstr "dominio"
-#: network.c:524
+#: network.c:613
#, c-format
msgid "using local addresses only for %s %s"
msgstr "usando direcciones locales solo para %s %s"
-#: network.c:526
+#: network.c:615
#, c-format
msgid "using nameserver %s#%d for %s %s"
msgstr "usando servidor DNS %s#%d para %s %s"
-#: network.c:529
+#: network.c:618
+#, fuzzy, c-format
+msgid "using nameserver %s#%d(via %s)"
+msgstr "usando servidor DNS %s#%d(vía %s)"
+
+#: network.c:620
#, c-format
msgid "using nameserver %s#%d"
msgstr "usando servidor DNS %s#%d"
-#: dnsmasq.c:106
+#: dnsmasq.c:110
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:128
+#: dnsmasq.c:132
#, fuzzy
msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
msgstr "servidor TFTP no disponible: fijar HAVE_TFTP en src/config.h"
-#: dnsmasq.c:142
+#: dnsmasq.c:137
+#, fuzzy
+msgid "asychronous logging is not available under Solaris"
+msgstr "bitacoreo asincrónico no está disponible bajo Solaris"
+
+#: dnsmasq.c:151
msgid "must set exactly one interface on broken systems without IP_RECVIF"
msgstr "debe fijarse exáctamente una interface en sistemas rotos sin IP_RECVIF"
-#: dnsmasq.c:152
+#: dnsmasq.c:161
#, c-format
msgid "failed to find list of interfaces: %s"
msgstr "no se pudo encontrar lista de interfaces: %s"
-#: dnsmasq.c:160
+#: dnsmasq.c:169
#, c-format
msgid "unknown interface %s"
msgstr "interface desconocida %s"
-#: dnsmasq.c:166
+#: dnsmasq.c:175
#, c-format
msgid "no interface with address %s"
msgstr "ninguna interface con dirección %s"
-#: dnsmasq.c:181 dnsmasq.c:538
+#: dnsmasq.c:192 dnsmasq.c:561
#, c-format
msgid "DBus error: %s"
msgstr "error DBus: %s"
-#: dnsmasq.c:184
+#: dnsmasq.c:195
msgid "DBus not available: set HAVE_DBUS in src/config.h"
msgstr "DBus no disponible: fijar HAVE_DBUS en src/config.h"
-#: dnsmasq.c:216
+#: dnsmasq.c:204
#, fuzzy, c-format
msgid "cannot create pipe: %s"
msgstr "no se puede crear pipe: %s"
-#: dnsmasq.c:237
+#: dnsmasq.c:225
#, c-format
msgid "cannot fork into background: %s"
-msgstr ""
+msgstr "no se puede hacer fork hacia el fondo: %s"
-#: dnsmasq.c:335
+#: dnsmasq.c:239
+#, c-format
+msgid "cannot chdir to filesystem root: %s"
+msgstr "no se puede cambiar directorio a raíz de sistema de archivos: %s"
+
+#: dnsmasq.c:349
+#, fuzzy, c-format
+msgid "started, version %s DNS disabled"
+msgstr "iniciado, versión %s DNS deshabilitado"
+
+#: dnsmasq.c:351
#, c-format
msgid "started, version %s cachesize %d"
-msgstr "versión %s iniciada, tamaño de caché %d"
+msgstr "iniciado, versión %s tamaño de caché %d"
-#: dnsmasq.c:337
+#: dnsmasq.c:353
#, c-format
msgid "started, version %s cache disabled"
-msgstr "versión %s iniciada, caché deshabilitado"
+msgstr "iniciado, versión %s caché deshabilitado"
-#: dnsmasq.c:339
+#: dnsmasq.c:355
#, c-format
msgid "compile time options: %s"
msgstr "opciones de compilación: %s"
-#: dnsmasq.c:345
+#: dnsmasq.c:361
msgid "DBus support enabled: connected to system bus"
msgstr "soporte DBus habilitado: conectado a bus de sistema"
-#: dnsmasq.c:347
+#: dnsmasq.c:363
msgid "DBus support enabled: bus connection pending"
msgstr "soporte DBus habilitado: conección a bus pendiente"
-#: dnsmasq.c:352
+#: dnsmasq.c:368
msgid "setting --bind-interfaces option because of OS limitations"
msgstr ""
"fijando opción --bind-interfaces debido a limitaciones de sistema operativo"
-#: dnsmasq.c:357
+#: dnsmasq.c:373
#, c-format
msgid "warning: interface %s does not currently exist"
msgstr "advertencia: interface %s no existe actuálmente"
-#: dnsmasq.c:362
+#: dnsmasq.c:378
msgid "warning: ignoring resolv-file flag because no-resolv is set"
-msgstr ""
-"advertencia: ignorando opción resolv-file porque no-resolv está fijado."
+msgstr "advertencia: ignorando opción resolv-file porque no-resolv está fijado"
-#: dnsmasq.c:365
+#: dnsmasq.c:381
#, fuzzy
msgid "warning: no upstream servers configured"
msgstr "advertencia: ningún servidor upstream configurado"
-#: dnsmasq.c:369
+#: dnsmasq.c:385
#, c-format
msgid "asynchronous logging enabled, queue limit is %d messages"
msgstr "bitacoreo asincrónico habilitado, límite de cola es %d mensajes"
-#: dnsmasq.c:381
+#: dnsmasq.c:397
#, 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:382
+#: dnsmasq.c:398
#, c-format
msgid "DHCP, IP range %s -- %s, lease time %s"
msgstr "DHCP, rango de IPs %s -- %s, tiempo de arriendo %s"
-#: dnsmasq.c:396
+#: dnsmasq.c:412
msgid "root is "
msgstr "root es "
-#: dnsmasq.c:396
+#: dnsmasq.c:412
#, fuzzy
msgid "enabled"
msgstr "habilitado"
-#: dnsmasq.c:398
+#: dnsmasq.c:414
msgid "secure mode"
msgstr "modo seguro"
-#: dnsmasq.c:418
+#: dnsmasq.c:440
#, c-format
msgid "restricting maximum simultaneous TFTP transfers to %d"
msgstr "limitando número máximo de transferencias TFTP simultáneas a %d"
-#: dnsmasq.c:427
+#: dnsmasq.c:449
#, fuzzy, c-format
msgid "warning: setting capabilities failed: %s"
msgstr "advertencia: configuración de capacidades ha fallado: %s"
-#: dnsmasq.c:429
+#: dnsmasq.c:451
msgid "running as root"
msgstr "corriendo como root"
-#: dnsmasq.c:540
+#: dnsmasq.c:563
msgid "connected to system DBus"
msgstr "conectado a DBus de sistema"
-#: dnsmasq.c:659
+#: dnsmasq.c:683
#, c-format
msgid "child process killed by signal %d"
msgstr "proceso hijo eliminado por señal %d"
-#: dnsmasq.c:663
+#: dnsmasq.c:687
#, c-format
msgid "child process exited with status %d"
msgstr "proceso hijo hizo exit con estado %d"
-#: dnsmasq.c:667
+#: dnsmasq.c:691
#, fuzzy, c-format
msgid "failed to execute %s: %s"
msgstr "no se pudo ejecutar %s: %s"
-#: dnsmasq.c:671
+#: dnsmasq.c:695
#, fuzzy, c-format
msgid "failed to create helper: %s"
-msgstr "no se pudo leer %s: %s"
+msgstr "no se pudo crear ayudante: %s"
-#: dnsmasq.c:705
+#: dnsmasq.c:729
msgid "exiting on receipt of SIGTERM"
msgstr "saliendo al recibir SIGTERM"
-#: dnsmasq.c:756
+#: dnsmasq.c:780
#, fuzzy, c-format
msgid "no servers found in %s, will retry"
msgstr "ningún servidor encontrado en %s, se reintentará"
-#: dhcp.c:32
+#: dhcp.c:38
#, c-format
msgid "cannot create DHCP socket : %s"
msgstr "no se puede crear socket DHCP: %s"
-#: dhcp.c:41
+#: dhcp.c:50
#, c-format
msgid "failed to set options on DHCP socket: %s"
msgstr "no se pudo fijar opciones en socket DHCP: %s"
-#: dhcp.c:59
+#: dhcp.c:68
#, fuzzy, c-format
msgid "failed to set SO_REUSE{ADDR|PORT} on DHCP socket: %s"
msgstr "no se pudo fijar SO_REUSE{ADDR|PORT} en socket DHCP: %s"
-#: dhcp.c:72
+#: dhcp.c:81
#, c-format
msgid "failed to bind DHCP server socket: %s"
msgstr "no se pudo acoplar socket de servidor DHCP: %s"
-#: dhcp.c:85
+#: dhcp.c:94
#, c-format
msgid "cannot create ICMP raw socket: %s."
msgstr "no se puede crear socket crudo ICMP: %s."
-#: dhcp.c:100
-#, c-format
-msgid "duplicate IP address %s in dhcp-config directive."
-msgstr "dirección IP duplicada %s en directiva dhcp-config."
-
-#: dhcp.c:103
-#, fuzzy, c-format
-msgid "illegal domain %s in dhcp-config directive."
-msgstr "dirección IP duplicada %s en directiva dhcp-config."
-
-#: dhcp.c:221
+#: dhcp.c:223
#, c-format
msgid "DHCP packet received on %s which has no address"
msgstr "Paquete DHCP recibido en %s sin dirección"
-#: dhcp.c:352
+#: dhcp.c:382
#, c-format
msgid "DHCP range %s -- %s is not consistent with netmask %s"
msgstr "rango DHCP %s -- %s no coincide con máscara de subred %s"
-#: dhcp.c:669
+#: dhcp.c:709
#, fuzzy, c-format
msgid "failed to read %s:%s"
msgstr "no se pudo leer %s:%s"
-#: dhcp.c:704
+#: dhcp.c:744
#, fuzzy, c-format
msgid "bad line at %s line %d"
msgstr "línea errónea en %s línea %d"
-#: dhcp.c:826
+#: dhcp.c:847
+#, c-format
+msgid "duplicate IP address %s in dhcp-config directive."
+msgstr "dirección IP duplicada %s en directiva dhcp-config."
+
+#: dhcp.c:850
#, fuzzy, c-format
msgid "duplicate IP address %s in %s."
-msgstr "dirección IP duplicada %s en directiva dhcp-config."
+msgstr "dirección IP duplicada %s en %s."
-#: dhcp.c:832
+#: dhcp.c:858
+#, fuzzy, c-format
+msgid "illegal domain %s in dhcp-config directive."
+msgstr "dominio ilegal %s en directiva dhcp-config."
+
+#: dhcp.c:860
#, c-format
msgid "illegal domain %s in %s."
-msgstr ""
+msgstr "dominio ilegal %s en %s."
-#: dhcp.c:839
-#, fuzzy, c-format
-msgid "read %s - %d hosts"
-msgstr "direcciónes %s - %d leídas"
+#: dhcp.c:899
+#, c-format
+msgid "%s has more then one address in hostsfile, using %s for DHCP"
+msgstr "%s tiene más de una dirección en hostsfile, usando %s para DHCP"
-#: dhcp.c:866
+#: dhcp.c:904
#, c-format
msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr "dirección IP duplicada %s (%s) en directiva dhcp-config"
-#: lease.c:54
+#: lease.c:58
#, fuzzy, c-format
msgid "cannot open or create lease file %s: %s"
msgstr "no se puede abrir o crear archivo de arriendos %s: %s"
-#: lease.c:80
+#: lease.c:84
msgid "too many stored leases"
msgstr "demasiados arriendos almacenados"
-#: lease.c:121
+#: lease.c:125
#, fuzzy, c-format
msgid "cannot run lease-init script %s: %s"
msgstr "no se puede ejecutar archivo guión lease-init %s: %s"
-#: lease.c:127
+#: lease.c:131
#, c-format
msgid "lease-init script returned exit code %s"
msgstr "archivo guión lease-init retornó exit code %s"
-#: lease.c:234
+#: lease.c:238
#, fuzzy, c-format
msgid "failed to write %s: %s (retry in %us)"
msgstr "error al escribir %s: %s (reintentar en %us)"
-#: rfc2131.c:300
+#: rfc2131.c:303
#, 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:301
+#: rfc2131.c:304
msgid "with subnet selector"
msgstr "con selector de subred"
-#: rfc2131.c:301
+#: rfc2131.c:304
msgid "via"
msgstr "vía"
-#: rfc2131.c:312
+#: rfc2131.c:315
#, c-format
msgid "DHCP packet: transaction-id is %u"
msgstr "paquete DHCP: transaction-id (identificación de transacción) es %u"
-#: rfc2131.c:317
+#: rfc2131.c:320
#, c-format
msgid "Available DHCP subnet: %s/%s"
msgstr "Subred DHCP disponible: %s/%s"
-#: rfc2131.c:319
+#: rfc2131.c:322
#, c-format
msgid "Available DHCP range: %s -- %s"
msgstr "Rango DHCP disponible: %s -- %s"
-#: rfc2131.c:347 rfc2131.c:378
+#: rfc2131.c:350 rfc2131.c:381
msgid "disabled"
msgstr "deshabilitado"
-#: rfc2131.c:390 rfc2131.c:852
+#: rfc2131.c:393 rfc2131.c:873
msgid "address in use"
msgstr "dirección en uso"
-#: rfc2131.c:393
+#: rfc2131.c:396
msgid "no address configured"
msgstr "ninguna dirección configurada"
-#: rfc2131.c:406 rfc2131.c:720
+#: rfc2131.c:409 rfc2131.c:736
msgid "no address available"
msgstr "ninguna dirección disponible"
-#: rfc2131.c:416
-#, c-format
-msgid "Limit of %d leases exceeded."
-msgstr "Límite de %d arriendos excedido."
-
-#: rfc2131.c:417 rfc2131.c:862
+#: rfc2131.c:418 rfc2131.c:883
msgid "no leases left"
msgstr "no sobra ningún arriendo"
-#: rfc2131.c:421 rfc2131.c:826
+#: rfc2131.c:421 rfc2131.c:847
msgid "wrong network"
msgstr "red equivocada"
-#: rfc2131.c:519
+#: rfc2131.c:520
#, c-format
msgid "Ignoring domain %s for DHCP host name %s"
-msgstr ""
+msgstr "Ignorando dominio %s para nombre de host DHCP %s"
-#: rfc2131.c:598
+#: rfc2131.c:614
#, c-format
msgid "Vendor class: %s"
msgstr "Clase de vendedor: %s"
-#: rfc2131.c:600
+#: rfc2131.c:616
#, c-format
msgid "User class: %s"
msgstr "Clase de usuario: %s"
-#: rfc2131.c:641
+#: rfc2131.c:657
#, fuzzy, c-format
msgid "disabling DHCP static address %s for %s"
msgstr "deshabilitando dirección DHCP estática %s para %s"
-#: rfc2131.c:662
+#: rfc2131.c:678
msgid "unknown lease"
msgstr "arriendo desconocido"
-#: rfc2131.c:671 rfc2131.c:970
+#: rfc2131.c:687 rfc2131.c:992
msgid "ignored"
msgstr "ignorado"
-#: rfc2131.c:691
+#: rfc2131.c:707
#, c-format
msgid "not using configured address %s because it is leased to %s"
msgstr "no usando dirección configurada %s porque está arrendada a %s"
-#: rfc2131.c:701
+#: rfc2131.c:717
#, fuzzy, c-format
msgid ""
"not using configured address %s because it is in use by the server or relay"
msgstr ""
"no usando dirección configurada %s porque está en uso por el servidor o relay"
-#: rfc2131.c:704
+#: rfc2131.c:720
#, fuzzy, c-format
msgid "not using configured address %s because it was previously declined"
msgstr "no usando dirección configurada %s porque fué previamente denegada"
-#: rfc2131.c:718 rfc2131.c:855
+#: rfc2131.c:734 rfc2131.c:876
msgid "no unique-id"
msgstr "ningún unique-id (identificación única)"
-#: rfc2131.c:789
+#: rfc2131.c:806
msgid "wrong address"
msgstr "dirección equivocada"
-#: rfc2131.c:802
+#: rfc2131.c:823
msgid "lease not found"
msgstr "arriendo no encontrado"
-#: rfc2131.c:834
+#: rfc2131.c:855
msgid "address not available"
msgstr "dirección no disponible"
-#: rfc2131.c:845
+#: rfc2131.c:866
msgid "static lease available"
msgstr "arriendo estático disponible"
-#: rfc2131.c:849
+#: rfc2131.c:870
msgid "address reserved"
msgstr "dirección reservada"
-#: rfc2131.c:1252
+#: rfc2131.c:1265
#, c-format
msgid "tags: %s"
msgstr "etiquetas: %s"
-#: rfc2131.c:1334
+#: rfc2131.c:1352
#, fuzzy, c-format
msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
msgstr "no se puede enviar opción DHCP/BOOTP %d: no queda espacio en paquete"
-#: rfc2131.c:1488
+#: rfc2131.c:1507
#, fuzzy, c-format
msgid "requested options: %s"
msgstr "opciones solicitadas: %s"
-#: rfc2131.c:1519
-#, c-format
-msgid "server name: %s"
-msgstr "nombre de servidor: %s"
+#: rfc2131.c:1556
+#, fuzzy, c-format
+msgid "next server: %s"
+msgstr "siguiente servidor: %s"
-#: rfc2131.c:1531
+#: rfc2131.c:1580
#, c-format
msgid "bootfile name: %s"
msgstr "nombre de bootfile: %s"
-#: rfc2131.c:1540
-#, fuzzy, c-format
-msgid "next server: %s"
-msgstr "siguiente servidor: %s"
+#: rfc2131.c:1583
+#, c-format
+msgid "server name: %s"
+msgstr "nombre de servidor: %s"
-#: netlink.c:59
+#: netlink.c:63
#, fuzzy, c-format
msgid "cannot create netlink socket: %s"
msgstr "no se puede crear socket netlink: %s"
-#: netlink.c:226
+#: netlink.c:230
#, fuzzy, c-format
msgid "netlink returns error: %s"
msgstr "netlink retorna error: %s"
-#: dbus.c:111
+#: dbus.c:115
msgid "attempt to set an IPv6 server address via DBus - no IPv6 support"
msgstr ""
"intento de fijar dirección de servidor IPv6 vía DBus - no hay soporte IPv6"
-#: dbus.c:237
+#: dbus.c:241
msgid "setting upstream servers from DBus"
msgstr "fijando servidores upstream desde DBus"
-#: dbus.c:275
+#: dbus.c:279
msgid "could not register a DBus message handler"
msgstr "no se pudo registrar un manejador de mensajes DBus"
-#: bpf.c:43
+#: bpf.c:146
#, c-format
msgid "cannot create DHCP BPF socket: %s"
msgstr "no se puede crear socket BPF DHCP: %s"
-#: bpf.c:71
+#: bpf.c:174
#, fuzzy, c-format
msgid "DHCP request for unsupported hardware type (%d) received on %s"
msgstr "pedido DHCP por tipo de hardware no-soportado (%d) recibido en %s"
-#: tftp.c:158
+#: tftp.c:173
+msgid "unable to get free port for TFTP"
+msgstr "incapaz de conseguir puerto libre para TFTP"
+
+#: tftp.c:188
#, c-format
msgid "unsupported request from %s"
msgstr "pedido no-soportado desde %s"
-#: tftp.c:236
+#: tftp.c:266
#, c-format
msgid "TFTP sent %s to %s"
msgstr "TFTP envió %s a %s"
-#: tftp.c:259
+#: tftp.c:289
#, fuzzy, c-format
msgid "file %s not found"
msgstr "archivo %s no encontrado"
-#: tftp.c:369
+#: tftp.c:399
#, c-format
msgid "TFTP error %d %s received from %s"
msgstr "error TFTP %d %s recibido de %s"
-#: tftp.c:400
+#: tftp.c:430
#, fuzzy, c-format
msgid "TFTP failed sending %s to %s"
msgstr "TFTP no pudo enviar %s a %s"
-#: log.c:69
+#: log.c:73
#, fuzzy, c-format
msgid "cannot open %s: %s"
msgstr "no se puede abrir %s: %s"
-#: log.c:146
+#: log.c:89
+#, fuzzy, c-format
+msgid "warning: failed to change owner of %s: %s"
+msgstr "advertencia: no se pudo cambiar dueño de %s: %s"
+
+#: log.c:161
#, c-format
msgid "overflow: %d log entries lost"
msgstr "desbordamiento: %d entradas de bitácora perdidas"
-#: log.c:223
+#: log.c:238
#, c-format
msgid "log failed: %s"
msgstr "bitácora falló: %s"
-#: log.c:378
+#: log.c:394
msgid "FAILED to start up"
msgstr "el inicio ha FALLADO"
+#, fuzzy
+#~ msgid "read %s - %d hosts"
+#~ msgstr "direcciónes %s - %d leídas"
+
+#~ msgid "Limit of %d leases exceeded."
+#~ msgstr "Límite de %d arriendos excedido."
+
#~ msgid "bad dhcp-host"
#~ msgstr "opción dhcp-host errónea"
diff --git a/po/fi.po b/po/fi.po
index 72c2b1d..a82ab7d 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dnsmasq 2.24\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-08-29 11:09+0100\n"
+"POT-Creation-Date: 2008-02-12 11: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"
@@ -15,1213 +15,1307 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: cache.c:671
+#: cache.c:680
#, c-format
msgid "failed to load names from %s: %s"
msgstr ""
-#: cache.c:705 dhcp.c:717
+#: cache.c:714 dhcp.c:757
#, c-format
msgid "bad address at %s line %d"
msgstr ""
-#: cache.c:752 dhcp.c:731
+#: cache.c:761 dhcp.c:771
#, c-format
msgid "bad name at %s line %d"
msgstr ""
-#: cache.c:759 dhcp.c:785
+#: cache.c:768 dhcp.c:825
#, c-format
msgid "read %s - %d addresses"
msgstr ""
-#: cache.c:797
+#: cache.c:806
msgid "cleared cache"
msgstr ""
-#: cache.c:844
+#: cache.c:855
#, 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:884
+#: cache.c:907
#, c-format
-msgid ""
-"time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache "
-"entries."
+msgid "time %lu"
+msgstr ""
+
+#: cache.c:908
+#, c-format
+msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
+msgstr ""
+
+#: cache.c:910
+#, c-format
+msgid "queries forwarded %u, queries answered locally %u"
+msgstr ""
+
+#: cache.c:933
+#, c-format
+msgid "server %s#%d: queries sent %u, retried or failed %u"
msgstr ""
-#: util.c:157 option.c:758
+#: util.c:160
msgid "could not get memory"
msgstr ""
-#: util.c:167
+#: util.c:170
#, c-format
msgid "failed to allocate %d bytes"
msgstr ""
-#: util.c:272
+#: util.c:275
#, c-format
msgid "infinite"
msgstr ""
-#: option.c:188
+#: option.c:244
msgid "Specify local address(es) to listen on."
msgstr ""
-#: option.c:189
+#: option.c:245
msgid "Return ipaddr for all hosts in specified domains."
msgstr ""
-#: option.c:190
+#: option.c:246
msgid "Fake reverse lookups for RFC1918 private address ranges."
msgstr ""
-#: option.c:191
+#: option.c:247
msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
msgstr ""
-#: option.c:192
+#: option.c:248
#, c-format
msgid "Specify the size of the cache in entries (defaults to %s)."
msgstr ""
-#: option.c:193
+#: option.c:249
#, c-format
msgid "Specify configuration file (defaults to %s)."
msgstr ""
-#: option.c:194
+#: option.c:250
msgid "Do NOT fork into the background: run in debug mode."
msgstr ""
-#: option.c:195
+#: option.c:251
msgid "Do NOT forward queries with no domain part."
msgstr ""
-#: option.c:196
+#: option.c:252
msgid "Return self-pointing MX records for local hosts."
msgstr ""
-#: option.c:197
+#: option.c:253
msgid "Expand simple names in /etc/hosts with domain-suffix."
msgstr ""
-#: option.c:198
+#: option.c:254
msgid "Don't forward spurious DNS requests from Windows hosts."
msgstr ""
-#: option.c:199
+#: option.c:255
msgid "Enable DHCP in the range given with lease duration."
msgstr ""
-#: option.c:200
+#: option.c:256
#, c-format
msgid "Change to this group after startup (defaults to %s)."
msgstr ""
-#: option.c:201
+#: option.c:257
msgid "Set address or hostname for a specified machine."
msgstr ""
-#: option.c:202
+#: option.c:258
msgid "Read DHCP host specs from file"
msgstr ""
-#: option.c:203
+#: option.c:259
+msgid "Read DHCP option specs from file"
+msgstr ""
+
+#: option.c:260
#, c-format
msgid "Do NOT load %s file."
msgstr ""
-#: option.c:204
+#: option.c:261
#, c-format
msgid "Specify a hosts file to be read in addition to %s."
msgstr ""
-#: option.c:205
+#: option.c:262
msgid "Specify interface(s) to listen on."
msgstr ""
-#: option.c:206
+#: option.c:263
msgid "Specify interface(s) NOT to listen on."
msgstr ""
-#: option.c:207
+#: option.c:264
msgid "Map DHCP user class to tag."
msgstr ""
-#: option.c:208
+#: option.c:265
msgid "Map RFC3046 circuit-id to tag."
msgstr ""
-#: option.c:209
+#: option.c:266
msgid "Map RFC3046 remote-id to tag."
msgstr ""
-#: option.c:210
+#: option.c:267
msgid "Map RFC3993 subscriber-id to tag."
msgstr ""
-#: option.c:211
+#: option.c:268
msgid "Don't do DHCP for hosts with tag set."
msgstr ""
-#: option.c:212
+#: option.c:269
+msgid "Force broadcast replies for hosts with tag set."
+msgstr ""
+
+#: option.c:270
msgid "Do NOT fork into the background, do NOT run in debug mode."
msgstr ""
-#: option.c:213
+#: option.c:271
msgid "Assume we are the only DHCP server on the local network."
msgstr ""
-#: option.c:214
+#: option.c:272
#, c-format
msgid "Specify where to store DHCP leases (defaults to %s)."
msgstr ""
-#: option.c:215
+#: option.c:273
msgid "Return MX records for local hosts."
msgstr ""
-#: option.c:216
+#: option.c:274
msgid "Specify an MX record."
msgstr ""
-#: option.c:217
+#: option.c:275
msgid "Specify BOOTP options to DHCP server."
msgstr ""
-#: option.c:218
+#: option.c:276
#, c-format
msgid "Do NOT poll %s file, reload only on SIGHUP."
msgstr ""
-#: option.c:219
+#: option.c:277
msgid "Do NOT cache failed search results."
msgstr ""
-#: option.c:220
+#: option.c:278
#, c-format
msgid "Use nameservers strictly in the order given in %s."
msgstr ""
-#: option.c:221
+#: option.c:279
msgid "Specify options to be sent to DHCP clients."
msgstr ""
-#: option.c:222
+#: option.c:280
msgid "DHCP option sent even if the client does not request it."
msgstr ""
-#: option.c:223
+#: option.c:281
msgid "Specify port to listen for DNS requests on (defaults to 53)."
msgstr ""
-#: option.c:224
+#: option.c:282
#, c-format
msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
msgstr ""
-#: option.c:225
-msgid "Log queries."
+#: option.c:283
+msgid "Log DNS queries."
msgstr ""
-#: option.c:226
-msgid "Force the originating port for upstream queries."
+#: option.c:284
+msgid "Force the originating port for upstream DNS queries."
msgstr ""
-#: option.c:227
+#: option.c:285
msgid "Do NOT read resolv.conf."
msgstr ""
-#: option.c:228
+#: option.c:286
#, c-format
msgid "Specify path to resolv.conf (defaults to %s)."
msgstr ""
-#: option.c:229
+#: option.c:287
msgid "Specify address(es) of upstream servers with optional domains."
msgstr ""
-#: option.c:230
+#: option.c:288
msgid "Never forward queries to specified domains."
msgstr ""
-#: option.c:231
+#: option.c:289
msgid "Specify the domain to be assigned in DHCP leases."
msgstr ""
-#: option.c:232
+#: option.c:290
msgid "Specify default target in an MX record."
msgstr ""
-#: option.c:233
+#: option.c:291
msgid "Specify time-to-live in seconds for replies from /etc/hosts."
msgstr ""
-#: option.c:234
+#: option.c:292
+msgid "Specify time-to-live in seconds for negative caching."
+msgstr ""
+
+#: option.c:293
#, c-format
msgid "Change to this user after startup. (defaults to %s)."
msgstr ""
-#: option.c:235
+#: option.c:294
msgid "Map DHCP vendor class to tag."
msgstr ""
-#: option.c:236
+#: option.c:295
msgid "Display dnsmasq version and copyright information."
msgstr ""
-#: option.c:237
+#: option.c:296
msgid "Translate IPv4 addresses from upstream servers."
msgstr ""
-#: option.c:238
+#: option.c:297
msgid "Specify a SRV record."
msgstr ""
-#: option.c:239
+#: option.c:298
msgid "Display this message. Use --help dhcp for known DHCP options."
msgstr ""
-#: option.c:240
+#: option.c:299
#, c-format
msgid "Specify path of PID file (defaults to %s)."
msgstr ""
-#: option.c:241
+#: option.c:300
#, c-format
msgid "Specify maximum number of DHCP leases (defaults to %s)."
msgstr ""
-#: option.c:242
+#: option.c:301
msgid "Answer DNS queries based on the interface a query was sent to."
msgstr ""
-#: option.c:243
+#: option.c:302
msgid "Specify TXT DNS record."
msgstr ""
-#: option.c:244
+#: option.c:303
msgid "Specify PTR DNS record."
msgstr ""
-#: option.c:245
+#: option.c:304
msgid "Give DNS name to IPv4 address of interface."
msgstr ""
-#: option.c:246
+#: option.c:305
msgid "Bind only to interfaces in use."
msgstr ""
-#: option.c:247
+#: option.c:306
#, c-format
msgid "Read DHCP static host information from %s."
msgstr ""
-#: option.c:248
+#: option.c:307
msgid "Enable the DBus interface for setting upstream servers, etc."
msgstr ""
-#: option.c:249
+#: option.c:308
msgid "Do not provide DHCP on this interface, only provide DNS."
msgstr ""
-#: option.c:250
+#: option.c:309
msgid "Enable dynamic address allocation for bootp."
msgstr ""
-#: option.c:251
+#: option.c:310
msgid "Map MAC address (with wildcards) to option set."
msgstr ""
-#: option.c:253
+#: option.c:312
msgid "Treat DHCP requests on aliases as arriving from interface."
msgstr ""
-#: option.c:255
+#: option.c:314
msgid "Disable ICMP echo address checking in the DHCP server."
msgstr ""
-#: option.c:256
+#: option.c:315
msgid "Script to run on DHCP lease creation and destruction."
msgstr ""
-#: option.c:257
+#: option.c:316
msgid "Read configuration from all the files in this directory."
msgstr ""
-#: option.c:258
+#: option.c:317
msgid "Log to this syslog facility or file. (defaults to DAEMON)"
msgstr ""
-#: option.c:259
+#: option.c:318
msgid "Read leases at startup, but never write the lease file."
msgstr ""
-#: option.c:260
+#: option.c:319
#, c-format
msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
msgstr ""
-#: option.c:261
+#: option.c:320
#, c-format
msgid "Clear DNS cache when reloading %s."
msgstr ""
-#: option.c:262
+#: option.c:321
msgid "Ignore hostnames provided by DHCP clients."
msgstr ""
-#: option.c:263
+#: option.c:322
+msgid "Do NOT reuse filename and server fields for extra DHCP options."
+msgstr ""
+
+#: option.c:323
msgid "Enable integrated read-only TFTP server."
msgstr ""
-#: option.c:264
+#: option.c:324
msgid "Export files by TFTP only from the specified subtree."
msgstr ""
-#: option.c:265
+#: option.c:325
msgid "Add client IP address to tftp-root."
msgstr ""
-#: option.c:266
+#: option.c:326
msgid "Allow access only to files owned by the user running dnsmasq."
msgstr ""
-#: option.c:267
+#: option.c:327
#, c-format
msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
msgstr ""
-#: option.c:268
+#: option.c:328
msgid "Disable the TFTP blocksize extension."
msgstr ""
-#: option.c:269
+#: option.c:329
+msgid "Ephemeral port range for use by TFTP transfers."
+msgstr ""
+
+#: option.c:330
msgid "Extra logging for DHCP."
msgstr ""
-#: option.c:270
+#: option.c:331
msgid "Enable async. logging; optionally set queue length."
msgstr ""
-#: option.c:501
+#: option.c:332
+msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
+msgstr ""
+
+#: option.c:333
+msgid "Always perform DNS queries to all servers."
+msgstr ""
+
+#: option.c:334
+msgid "Set tag if client includes option in request."
+msgstr ""
+
+#: option.c:585
#, c-format
msgid ""
"Usage: dnsmasq [options]\n"
"\n"
msgstr ""
-#: option.c:503
+#: option.c:587
#, c-format
msgid "Use short options only on the command line.\n"
msgstr ""
-#: option.c:505
+#: option.c:589
#, c-format
msgid "Valid options are :\n"
msgstr ""
-#: option.c:526
+#: option.c:610
#, c-format
msgid "Known DHCP options:\n"
msgstr ""
-#: option.c:599
+#: option.c:683
msgid "bad dhcp-option"
msgstr ""
-#: option.c:655
+#: option.c:739
msgid "bad IP address"
msgstr ""
-#: option.c:753
+#: option.c:837
msgid "bad domain in dhcp-option"
msgstr ""
-#: option.c:809
+#: option.c:895
msgid "dhcp-option too long"
msgstr ""
-#: option.c:853
+#: option.c:942
#, c-format
msgid "cannot access directory %s: %s"
msgstr ""
-#: option.c:872 tftp.c:313
+#: option.c:961 tftp.c:343
#, c-format
msgid "cannot access %s: %s"
msgstr ""
-#: option.c:913
+#: option.c:998
msgid "only one dhcp-hostsfile allowed"
msgstr ""
-#: option.c:962
+#: option.c:1005
+msgid "only one dhcp-optsfile allowed"
+msgstr ""
+
+#: option.c:1049
msgid "bad MX preference"
msgstr ""
-#: option.c:971
+#: option.c:1053
msgid "bad MX name"
msgstr ""
-#: option.c:989
+#: option.c:1067
msgid "bad MX target"
msgstr ""
-#: option.c:1001
+#: option.c:1078
msgid "cannot run scripts under uClinux"
msgstr ""
-#: option.c:1196 option.c:1207
+#: option.c:1265 option.c:1273
msgid "bad port"
msgstr ""
-#: option.c:1349
+#: option.c:1293 option.c:1318
+msgid "interface binding not supported"
+msgstr ""
+
+#: option.c:1427
+msgid "bad port range"
+msgstr ""
+
+#: option.c:1444
msgid "bad bridge-interface"
msgstr ""
-#: option.c:1391
+#: option.c:1485
msgid "bad dhcp-range"
msgstr ""
-#: option.c:1419
+#: option.c:1511
msgid "only one netid tag allowed"
msgstr ""
-#: option.c:1461
+#: option.c:1551
msgid "inconsistent DHCP range"
msgstr ""
-#: option.c:1637
+#: option.c:1719
msgid "bad DHCP host name"
msgstr ""
-#: option.c:1861
+#: option.c:1959
msgid "bad interface name"
msgstr ""
-#: option.c:1885
+#: option.c:1979
msgid "bad PTR record"
msgstr ""
-#: option.c:1909
-msgid "bad TXT record"
+#: option.c:1999
+msgid "TXT record string too long"
msgstr ""
-#: option.c:1941
-msgid "TXT record string too long"
+#: option.c:2003
+msgid "bad TXT record"
msgstr ""
-#: option.c:1980
+#: option.c:2063
msgid "bad SRV record"
msgstr ""
-#: option.c:1992
+#: option.c:2072
msgid "bad SRV target"
msgstr ""
-#: option.c:2003
+#: option.c:2080
msgid "invalid port number"
msgstr ""
-#: option.c:2013
+#: option.c:2087
msgid "invalid priority"
msgstr ""
-#: option.c:2023
+#: option.c:2094
msgid "invalid weight"
msgstr ""
-#: option.c:2054
+#: option.c:2130
#, c-format
msgid "files nested too deep in %s"
msgstr ""
-#: option.c:2062 tftp.c:467
+#: option.c:2138 tftp.c:497
#, c-format
msgid "cannot read %s: %s"
msgstr ""
-#: option.c:2114
+#: option.c:2199
msgid "missing \""
msgstr ""
-#: option.c:2161
+#: option.c:2246
msgid "bad option"
msgstr ""
-#: option.c:2163
+#: option.c:2248
msgid "extraneous parameter"
msgstr ""
-#: option.c:2165
+#: option.c:2250
msgid "missing parameter"
msgstr ""
-#: option.c:2173
+#: option.c:2258
msgid "error"
msgstr ""
-#: option.c:2179
+#: option.c:2264
#, c-format
msgid "%s at line %d of %%s"
msgstr ""
-#: option.c:2252
+#: option.c:2304 option.c:2334
+#, c-format
+msgid "read %s"
+msgstr ""
+
+#: option.c:2400
#, c-format
msgid "Dnsmasq version %s %s\n"
msgstr ""
-#: option.c:2253
+#: option.c:2401
#, c-format
msgid ""
"Compile time options %s\n"
"\n"
msgstr ""
-#: option.c:2254
+#: option.c:2402
#, c-format
msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
msgstr ""
-#: option.c:2255
+#: option.c:2403
#, c-format
msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
msgstr ""
-#: option.c:2256
+#: option.c:2404
#, c-format
-msgid "under the terms of the GNU General Public License, version 2.\n"
+msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
msgstr ""
-#: option.c:2267
+#: option.c:2415
msgid "try --help"
msgstr ""
-#: option.c:2269
+#: option.c:2417
msgid "try -w"
msgstr ""
-#: option.c:2272
+#: option.c:2420
#, c-format
msgid "bad command line options: %s"
msgstr ""
-#: option.c:2313
+#: option.c:2461
#, c-format
msgid "cannot get host-name: %s"
msgstr ""
-#: option.c:2341
+#: option.c:2489
msgid "only one resolv.conf file allowed in no-poll mode."
msgstr ""
-#: option.c:2351
+#: option.c:2499
msgid "must have exactly one resolv.conf to read domain from."
msgstr ""
-#: option.c:2354 network.c:549
+#: option.c:2502 network.c:640
#, c-format
msgid "failed to read %s: %s"
msgstr ""
-#: option.c:2372
+#: option.c:2520
#, c-format
msgid "no search directive found in %s"
msgstr ""
-#: forward.c:376
+#: forward.c:381
#, c-format
msgid "nameserver %s refused to do a recursive query"
msgstr ""
-#: isc.c:73 dnsmasq.c:723
+#: forward.c:409
+msgid "possible DNS-rebind attack detected"
+msgstr ""
+
+#: isc.c:77 dnsmasq.c:747
#, c-format
msgid "failed to access %s: %s"
msgstr ""
-#: isc.c:89
+#: isc.c:93
#, c-format
msgid "failed to load %s: %s"
msgstr ""
-#: isc.c:93 dnsmasq.c:745
+#: isc.c:97 dnsmasq.c:769
#, c-format
msgid "reading %s"
msgstr ""
-#: isc.c:115
+#: isc.c:119
#, c-format
msgid "bad name in %s"
msgstr ""
-#: isc.c:177
+#: isc.c:181
#, c-format
msgid "Ignoring DHCP lease for %s because it has an illegal domain part"
msgstr ""
-#: network.c:41
+#: network.c:45
#, c-format
msgid "unknown interface %s in bridge-interface"
msgstr ""
-#: network.c:377 dnsmasq.c:170
+#: network.c:389 dnsmasq.c:180
#, c-format
msgid "failed to create listening socket: %s"
msgstr ""
-#: network.c:384
+#: network.c:396
#, c-format
msgid "failed to set IPV6 options on listening socket: %s"
msgstr ""
-#: network.c:402
+#: network.c:415
#, c-format
msgid "failed to bind listening socket for %s: %s"
msgstr ""
-#: network.c:410
+#: network.c:420
#, c-format
msgid "failed to listen on socket: %s"
msgstr ""
-#: network.c:421
+#: network.c:432
#, c-format
msgid "failed to create TFTP socket: %s"
msgstr ""
-#: network.c:493
+#: network.c:549
+#, c-format
+msgid "failed to bind server socket for %s: %s"
+msgstr ""
+
+#: network.c:582
#, c-format
msgid "ignoring nameserver %s - local interface"
msgstr ""
-#: network.c:502
+#: network.c:591
#, c-format
msgid "ignoring nameserver %s - cannot make/bind socket: %s"
msgstr ""
-#: network.c:517
+#: network.c:606
msgid "unqualified"
msgstr ""
-#: network.c:517
+#: network.c:606
msgid "names"
msgstr ""
-#: network.c:519
+#: network.c:608
msgid "default"
msgstr ""
-#: network.c:521
+#: network.c:610
msgid "domain"
msgstr ""
-#: network.c:524
+#: network.c:613
#, c-format
msgid "using local addresses only for %s %s"
msgstr ""
-#: network.c:526
+#: network.c:615
#, c-format
msgid "using nameserver %s#%d for %s %s"
msgstr ""
-#: network.c:529
+#: network.c:618
+#, c-format
+msgid "using nameserver %s#%d(via %s)"
+msgstr ""
+
+#: network.c:620
#, c-format
msgid "using nameserver %s#%d"
msgstr ""
-#: dnsmasq.c:106
+#: dnsmasq.c:110
msgid ""
"ISC dhcpd integration not available: set HAVE_ISC_READER in src/config.h"
msgstr ""
-#: dnsmasq.c:128
+#: dnsmasq.c:132
msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
msgstr ""
-#: dnsmasq.c:142
+#: dnsmasq.c:137
+msgid "asychronous logging is not available under Solaris"
+msgstr ""
+
+#: dnsmasq.c:151
msgid "must set exactly one interface on broken systems without IP_RECVIF"
msgstr ""
-#: dnsmasq.c:152
+#: dnsmasq.c:161
#, c-format
msgid "failed to find list of interfaces: %s"
msgstr ""
-#: dnsmasq.c:160
+#: dnsmasq.c:169
#, c-format
msgid "unknown interface %s"
msgstr ""
-#: dnsmasq.c:166
+#: dnsmasq.c:175
#, c-format
msgid "no interface with address %s"
msgstr ""
-#: dnsmasq.c:181 dnsmasq.c:538
+#: dnsmasq.c:192 dnsmasq.c:561
#, c-format
msgid "DBus error: %s"
msgstr ""
-#: dnsmasq.c:184
+#: dnsmasq.c:195
msgid "DBus not available: set HAVE_DBUS in src/config.h"
msgstr ""
-#: dnsmasq.c:216
+#: dnsmasq.c:204
#, c-format
msgid "cannot create pipe: %s"
msgstr ""
-#: dnsmasq.c:237
+#: dnsmasq.c:225
#, c-format
msgid "cannot fork into background: %s"
msgstr ""
-#: dnsmasq.c:335
+#: dnsmasq.c:239
+#, c-format
+msgid "cannot chdir to filesystem root: %s"
+msgstr ""
+
+#: dnsmasq.c:349
+#, c-format
+msgid "started, version %s DNS disabled"
+msgstr ""
+
+#: dnsmasq.c:351
#, c-format
msgid "started, version %s cachesize %d"
msgstr ""
-#: dnsmasq.c:337
+#: dnsmasq.c:353
#, c-format
msgid "started, version %s cache disabled"
msgstr ""
-#: dnsmasq.c:339
+#: dnsmasq.c:355
#, c-format
msgid "compile time options: %s"
msgstr ""
-#: dnsmasq.c:345
+#: dnsmasq.c:361
msgid "DBus support enabled: connected to system bus"
msgstr ""
-#: dnsmasq.c:347
+#: dnsmasq.c:363
msgid "DBus support enabled: bus connection pending"
msgstr ""
-#: dnsmasq.c:352
+#: dnsmasq.c:368
msgid "setting --bind-interfaces option because of OS limitations"
msgstr ""
-#: dnsmasq.c:357
+#: dnsmasq.c:373
#, c-format
msgid "warning: interface %s does not currently exist"
msgstr ""
-#: dnsmasq.c:362
+#: dnsmasq.c:378
msgid "warning: ignoring resolv-file flag because no-resolv is set"
msgstr ""
-#: dnsmasq.c:365
+#: dnsmasq.c:381
msgid "warning: no upstream servers configured"
msgstr ""
-#: dnsmasq.c:369
+#: dnsmasq.c:385
#, c-format
msgid "asynchronous logging enabled, queue limit is %d messages"
msgstr ""
-#: dnsmasq.c:381
+#: dnsmasq.c:397
#, c-format
msgid "DHCP, static leases only on %.0s%s, lease time %s"
msgstr ""
-#: dnsmasq.c:382
+#: dnsmasq.c:398
#, c-format
msgid "DHCP, IP range %s -- %s, lease time %s"
msgstr ""
-#: dnsmasq.c:396
+#: dnsmasq.c:412
msgid "root is "
msgstr ""
-#: dnsmasq.c:396
+#: dnsmasq.c:412
msgid "enabled"
msgstr ""
-#: dnsmasq.c:398
+#: dnsmasq.c:414
msgid "secure mode"
msgstr ""
-#: dnsmasq.c:418
+#: dnsmasq.c:440
#, c-format
msgid "restricting maximum simultaneous TFTP transfers to %d"
msgstr ""
-#: dnsmasq.c:427
+#: dnsmasq.c:449
#, c-format
msgid "warning: setting capabilities failed: %s"
msgstr ""
-#: dnsmasq.c:429
+#: dnsmasq.c:451
msgid "running as root"
msgstr ""
-#: dnsmasq.c:540
+#: dnsmasq.c:563
msgid "connected to system DBus"
msgstr ""
-#: dnsmasq.c:659
+#: dnsmasq.c:683
#, c-format
msgid "child process killed by signal %d"
msgstr ""
-#: dnsmasq.c:663
+#: dnsmasq.c:687
#, c-format
msgid "child process exited with status %d"
msgstr ""
-#: dnsmasq.c:667
+#: dnsmasq.c:691
#, c-format
msgid "failed to execute %s: %s"
msgstr ""
-#: dnsmasq.c:671
+#: dnsmasq.c:695
#, c-format
msgid "failed to create helper: %s"
msgstr ""
-#: dnsmasq.c:705
+#: dnsmasq.c:729
msgid "exiting on receipt of SIGTERM"
msgstr ""
-#: dnsmasq.c:756
+#: dnsmasq.c:780
#, c-format
msgid "no servers found in %s, will retry"
msgstr ""
-#: dhcp.c:32
+#: dhcp.c:38
#, c-format
msgid "cannot create DHCP socket : %s"
msgstr ""
-#: dhcp.c:41
+#: dhcp.c:50
#, c-format
msgid "failed to set options on DHCP socket: %s"
msgstr ""
-#: dhcp.c:59
+#: dhcp.c:68
#, c-format
msgid "failed to set SO_REUSE{ADDR|PORT} on DHCP socket: %s"
msgstr ""
-#: dhcp.c:72
+#: dhcp.c:81
#, c-format
msgid "failed to bind DHCP server socket: %s"
msgstr ""
-#: dhcp.c:85
+#: dhcp.c:94
#, c-format
msgid "cannot create ICMP raw socket: %s."
msgstr ""
-#: dhcp.c:100
+#: dhcp.c:223
#, c-format
-msgid "duplicate IP address %s in dhcp-config directive."
+msgid "DHCP packet received on %s which has no address"
msgstr ""
-#: dhcp.c:103
+#: dhcp.c:382
#, c-format
-msgid "illegal domain %s in dhcp-config directive."
+msgid "DHCP range %s -- %s is not consistent with netmask %s"
msgstr ""
-#: dhcp.c:221
+#: dhcp.c:709
#, c-format
-msgid "DHCP packet received on %s which has no address"
+msgid "failed to read %s:%s"
msgstr ""
-#: dhcp.c:352
+#: dhcp.c:744
#, c-format
-msgid "DHCP range %s -- %s is not consistent with netmask %s"
+msgid "bad line at %s line %d"
msgstr ""
-#: dhcp.c:669
+#: dhcp.c:847
#, c-format
-msgid "failed to read %s:%s"
+msgid "duplicate IP address %s in dhcp-config directive."
msgstr ""
-#: dhcp.c:704
+#: dhcp.c:850
#, c-format
-msgid "bad line at %s line %d"
+msgid "duplicate IP address %s in %s."
msgstr ""
-#: dhcp.c:826
+#: dhcp.c:858
#, c-format
-msgid "duplicate IP address %s in %s."
+msgid "illegal domain %s in dhcp-config directive."
msgstr ""
-#: dhcp.c:832
+#: dhcp.c:860
#, c-format
msgid "illegal domain %s in %s."
msgstr ""
-#: dhcp.c:839
+#: dhcp.c:899
#, c-format
-msgid "read %s - %d hosts"
+msgid "%s has more then one address in hostsfile, using %s for DHCP"
msgstr ""
-#: dhcp.c:866
+#: dhcp.c:904
#, c-format
msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr ""
-#: lease.c:54
+#: lease.c:58
#, c-format
msgid "cannot open or create lease file %s: %s"
msgstr ""
-#: lease.c:80
+#: lease.c:84
msgid "too many stored leases"
msgstr ""
-#: lease.c:121
+#: lease.c:125
#, c-format
msgid "cannot run lease-init script %s: %s"
msgstr ""
-#: lease.c:127
+#: lease.c:131
#, c-format
msgid "lease-init script returned exit code %s"
msgstr ""
-#: lease.c:234
+#: lease.c:238
#, c-format
msgid "failed to write %s: %s (retry in %us)"
msgstr ""
-#: rfc2131.c:300
+#: rfc2131.c:303
#, c-format
msgid "no address range available for DHCP request %s %s"
msgstr ""
-#: rfc2131.c:301
+#: rfc2131.c:304
msgid "with subnet selector"
msgstr ""
-#: rfc2131.c:301
+#: rfc2131.c:304
msgid "via"
msgstr ""
-#: rfc2131.c:312
+#: rfc2131.c:315
#, c-format
msgid "DHCP packet: transaction-id is %u"
msgstr ""
-#: rfc2131.c:317
+#: rfc2131.c:320
#, c-format
msgid "Available DHCP subnet: %s/%s"
msgstr ""
-#: rfc2131.c:319
+#: rfc2131.c:322
#, c-format
msgid "Available DHCP range: %s -- %s"
msgstr ""
-#: rfc2131.c:347 rfc2131.c:378
+#: rfc2131.c:350 rfc2131.c:381
msgid "disabled"
msgstr ""
-#: rfc2131.c:390 rfc2131.c:852
+#: rfc2131.c:393 rfc2131.c:873
msgid "address in use"
msgstr ""
-#: rfc2131.c:393
+#: rfc2131.c:396
msgid "no address configured"
msgstr ""
-#: rfc2131.c:406 rfc2131.c:720
+#: rfc2131.c:409 rfc2131.c:736
msgid "no address available"
msgstr ""
-#: rfc2131.c:416
-#, c-format
-msgid "Limit of %d leases exceeded."
-msgstr ""
-
-#: rfc2131.c:417 rfc2131.c:862
+#: rfc2131.c:418 rfc2131.c:883
msgid "no leases left"
msgstr ""
-#: rfc2131.c:421 rfc2131.c:826
+#: rfc2131.c:421 rfc2131.c:847
msgid "wrong network"
msgstr ""
-#: rfc2131.c:519
+#: rfc2131.c:520
#, c-format
msgid "Ignoring domain %s for DHCP host name %s"
msgstr ""
-#: rfc2131.c:598
+#: rfc2131.c:614
#, c-format
msgid "Vendor class: %s"
msgstr ""
-#: rfc2131.c:600
+#: rfc2131.c:616
#, c-format
msgid "User class: %s"
msgstr ""
-#: rfc2131.c:641
+#: rfc2131.c:657
#, c-format
msgid "disabling DHCP static address %s for %s"
msgstr ""
-#: rfc2131.c:662
+#: rfc2131.c:678
msgid "unknown lease"
msgstr ""
-#: rfc2131.c:671 rfc2131.c:970
+#: rfc2131.c:687 rfc2131.c:992
msgid "ignored"
msgstr ""
-#: rfc2131.c:691
+#: rfc2131.c:707
#, c-format
msgid "not using configured address %s because it is leased to %s"
msgstr ""
-#: rfc2131.c:701
+#: rfc2131.c:717
#, c-format
msgid ""
"not using configured address %s because it is in use by the server or relay"
msgstr ""
-#: rfc2131.c:704
+#: rfc2131.c:720
#, c-format
msgid "not using configured address %s because it was previously declined"
msgstr ""
-#: rfc2131.c:718 rfc2131.c:855
+#: rfc2131.c:734 rfc2131.c:876
msgid "no unique-id"
msgstr ""
-#: rfc2131.c:789
+#: rfc2131.c:806
msgid "wrong address"
msgstr ""
-#: rfc2131.c:802
+#: rfc2131.c:823
msgid "lease not found"
msgstr ""
-#: rfc2131.c:834
+#: rfc2131.c:855
msgid "address not available"
msgstr ""
-#: rfc2131.c:845
+#: rfc2131.c:866
msgid "static lease available"
msgstr ""
-#: rfc2131.c:849
+#: rfc2131.c:870
msgid "address reserved"
msgstr ""
-#: rfc2131.c:1252
+#: rfc2131.c:1265
#, c-format
msgid "tags: %s"
msgstr ""
-#: rfc2131.c:1334
+#: rfc2131.c:1352
#, c-format
msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
msgstr ""
-#: rfc2131.c:1488
+#: rfc2131.c:1507
#, c-format
msgid "requested options: %s"
msgstr ""
-#: rfc2131.c:1519
+#: rfc2131.c:1556
#, c-format
-msgid "server name: %s"
+msgid "next server: %s"
msgstr ""
-#: rfc2131.c:1531
+#: rfc2131.c:1580
#, c-format
msgid "bootfile name: %s"
msgstr ""
-#: rfc2131.c:1540
+#: rfc2131.c:1583
#, c-format
-msgid "next server: %s"
+msgid "server name: %s"
msgstr ""
-#: netlink.c:59
+#: netlink.c:63
#, c-format
msgid "cannot create netlink socket: %s"
msgstr ""
-#: netlink.c:226
+#: netlink.c:230
#, c-format
msgid "netlink returns error: %s"
msgstr ""
-#: dbus.c:111
+#: dbus.c:115
msgid "attempt to set an IPv6 server address via DBus - no IPv6 support"
msgstr ""
-#: dbus.c:237
+#: dbus.c:241
msgid "setting upstream servers from DBus"
msgstr ""
-#: dbus.c:275
+#: dbus.c:279
msgid "could not register a DBus message handler"
msgstr ""
-#: bpf.c:43
+#: bpf.c:146
#, c-format
msgid "cannot create DHCP BPF socket: %s"
msgstr ""
-#: bpf.c:71
+#: bpf.c:174
#, c-format
msgid "DHCP request for unsupported hardware type (%d) received on %s"
msgstr ""
-#: tftp.c:158
+#: tftp.c:173
+msgid "unable to get free port for TFTP"
+msgstr ""
+
+#: tftp.c:188
#, c-format
msgid "unsupported request from %s"
msgstr ""
-#: tftp.c:236
+#: tftp.c:266
#, c-format
msgid "TFTP sent %s to %s"
msgstr ""
-#: tftp.c:259
+#: tftp.c:289
#, c-format
msgid "file %s not found"
msgstr ""
-#: tftp.c:369
+#: tftp.c:399
#, c-format
msgid "TFTP error %d %s received from %s"
msgstr ""
-#: tftp.c:400
+#: tftp.c:430
#, c-format
msgid "TFTP failed sending %s to %s"
msgstr ""
-#: log.c:69
+#: log.c:73
#, c-format
msgid "cannot open %s: %s"
msgstr ""
-#: log.c:146
+#: log.c:89
+#, c-format
+msgid "warning: failed to change owner of %s: %s"
+msgstr ""
+
+#: log.c:161
#, c-format
msgid "overflow: %d log entries lost"
msgstr ""
-#: log.c:223
+#: log.c:238
#, c-format
msgid "log failed: %s"
msgstr ""
-#: log.c:378
+#: log.c:394
msgid "FAILED to start up"
msgstr ""
diff --git a/po/fr.po b/po/fr.po
index 82abb13..ddca39f 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dnsmasq 2.34\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-08-29 11:09+0100\n"
+"POT-Creation-Date: 2008-02-12 11: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"
@@ -16,31 +16,31 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-#: cache.c:671
+#: cache.c:680
#, fuzzy, c-format
msgid "failed to load names from %s: %s"
msgstr "Impossible de charger les noms à partir de %s : %m"
-#: cache.c:705 dhcp.c:717
+#: cache.c:714 dhcp.c:757
#, c-format
msgid "bad address at %s line %d"
msgstr "mauvaise adresse dans %s ligne %d"
-#: cache.c:752 dhcp.c:731
+#: cache.c:761 dhcp.c:771
#, c-format
msgid "bad name at %s line %d"
msgstr "mauvais nom dans %s ligne %d"
-#: cache.c:759 dhcp.c:785
+#: cache.c:768 dhcp.c:825
#, c-format
msgid "read %s - %d addresses"
msgstr "lecture %s - %d adresses"
-#: cache.c:797
+#: cache.c:806
msgid "cleared cache"
msgstr "cache vidé"
-#: cache.c:844
+#: cache.c:855
#, c-format
msgid ""
"not giving name %s to the DHCP lease of %s because the name exists in %s "
@@ -49,408 +49,458 @@ 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:884
+#: cache.c:907
#, c-format
-msgid ""
-"time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache "
-"entries."
+msgid "time %lu"
+msgstr ""
+
+#: cache.c:908
+#, fuzzy, c-format
+msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
msgstr ""
"temps %lu, taille de cache %d, %d/%d insertions dans le cache ont "
"réutilisées des entrées qui n'ont pas expirées"
-#: util.c:157 option.c:758
+#: cache.c:910
+#, c-format
+msgid "queries forwarded %u, queries answered locally %u"
+msgstr ""
+
+#: cache.c:933
+#, c-format
+msgid "server %s#%d: queries sent %u, retried or failed %u"
+msgstr ""
+
+#: util.c:160
msgid "could not get memory"
msgstr "impossible d'allouer de la mémoire"
-#: util.c:167
+#: util.c:170
#, fuzzy, c-format
msgid "failed to allocate %d bytes"
msgstr "impossible de charger %s : %m"
-#: util.c:272
+#: util.c:275
#, c-format
msgid "infinite"
msgstr "illimité(e)"
-#: option.c:188
+#: option.c:244
msgid "Specify local address(es) to listen on."
msgstr ""
"Spécifie la ou les adresse(s) locales où le démon doit se mettre à l'écoute."
-#: option.c:189
+#: option.c:245
msgid "Return ipaddr for all hosts in specified domains."
msgstr ""
"Retourne les adresses IP pour toutes les machines présentes dans les "
"domaines spécifiés"
-#: option.c:190
+#: option.c:246
msgid "Fake reverse lookups for RFC1918 private address ranges."
msgstr "Traduction inverse truquée pour la plage d'adresse privée RFC1918"
-#: option.c:191
+#: option.c:247
msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
msgstr ""
"Traite l'adresse IP comme un domaine inexistant NXDOMAIN (contourne le "
"systeme de redirection de Verisign)"
-#: option.c:192
+#: option.c:248
#, c-format
msgid "Specify the size of the cache in entries (defaults to %s)."
msgstr ""
"Spécifie le nombre d'entrées que contiendra le cache (par défaut : %s)."
-#: option.c:193
+#: option.c:249
#, c-format
msgid "Specify configuration file (defaults to %s)."
msgstr "Spécifie le nom du fichier de configuration (par défaut : %s)"
-#: option.c:194
+#: option.c:250
msgid "Do NOT fork into the background: run in debug mode."
msgstr "Ne passe pas en tâche de fond : démarre en mode debug"
-#: option.c:195
+#: option.c:251
msgid "Do NOT forward queries with no domain part."
msgstr "Ne retransmet pas les requêtes qui n'ont pas de domaine."
-#: option.c:196
+#: option.c:252
msgid "Return self-pointing MX records for local hosts."
msgstr "Retourne les champs MX pour les machines locales."
-#: option.c:197
+#: option.c:253
msgid "Expand simple names in /etc/hosts with domain-suffix."
msgstr ""
"Etend les noms uniques des machines dans /etc/hosts avec le suffixe du "
"domaine."
-#: option.c:198
+#: option.c:254
msgid "Don't forward spurious DNS requests from Windows hosts."
msgstr ""
"Ne retransmet pas les fausses requêtes DNS en provenance des machines "
"Windows."
-#: option.c:199
+#: option.c:255
msgid "Enable DHCP in the range given with lease duration."
msgstr ""
"Autorise DHCP dans la plage d'adresses donnée sur la durée de validité du "
"bail."
-#: option.c:200
+#: option.c:256
#, c-format
msgid "Change to this group after startup (defaults to %s)."
msgstr "On change pour ce groupe après le démarrage (par défaut : %s)."
-#: option.c:201
+#: option.c:257
msgid "Set address or hostname for a specified machine."
msgstr "On assigne une adresse ou un nom pour une machine spécifiée."
-#: option.c:202
+#: option.c:258
msgid "Read DHCP host specs from file"
msgstr ""
-#: option.c:203
+#: option.c:259
+msgid "Read DHCP option specs from file"
+msgstr ""
+
+#: option.c:260
#, c-format
msgid "Do NOT load %s file."
msgstr "Ne charge PAS le fichier %s."
-#: option.c:204
+#: option.c:261
#, c-format
msgid "Specify a hosts file to be read in addition to %s."
msgstr "Spécifie un nom de fichier hosts à lire en complément de %s"
-#: option.c:205
+#: option.c:262
msgid "Specify interface(s) to listen on."
msgstr "Spécifie la ou les interface(s) où le démon doit se mettre à l'écoute."
-#: option.c:206
+#: option.c:263
msgid "Specify interface(s) NOT to listen on."
msgstr "Spécifie la ou les interface(s) que le démon ne doit PAS traiter."
-#: option.c:207
+#: option.c:264
#, fuzzy
msgid "Map DHCP user class to tag."
msgstr "Associe les classes d'utilisateurs ('user class') DHCP aux options."
-#: option.c:208
+#: option.c:265
msgid "Map RFC3046 circuit-id to tag."
msgstr ""
-#: option.c:209
+#: option.c:266
msgid "Map RFC3046 remote-id to tag."
msgstr ""
-#: option.c:210
+#: option.c:267
msgid "Map RFC3993 subscriber-id to tag."
msgstr ""
-#: option.c:211
+#: option.c:268
#, fuzzy
msgid "Don't do DHCP for hosts with tag set."
msgstr "Ne pas autoriser DHCP pour les machines énumerées dans les options."
-#: option.c:212
+#: option.c:269
+#, fuzzy
+msgid "Force broadcast replies for hosts with tag set."
+msgstr "Ne pas autoriser DHCP pour les machines énumerées dans les options."
+
+#: option.c:270
msgid "Do NOT fork into the background, do NOT run in debug mode."
msgstr "Ne passe pas en tâche de fond, ne pas s'exécuter en mode debug."
-#: option.c:213
+#: option.c:271
msgid "Assume we are the only DHCP server on the local network."
msgstr "On considère que l'on est le seul serveur DHCP sur le réseau local."
-#: option.c:214
+#: option.c:272
#, c-format
msgid "Specify where to store DHCP leases (defaults to %s)."
msgstr "Spécifie où il faut sauvegarder les baux DHCP (par défaut : %s)."
-#: option.c:215
+#: option.c:273
msgid "Return MX records for local hosts."
msgstr "Retourne les champs MX pour les machines locales."
-#: option.c:216
+#: option.c:274
msgid "Specify an MX record."
msgstr "Spécifie un champ MX."
-#: option.c:217
+#: option.c:275
msgid "Specify BOOTP options to DHCP server."
msgstr "Spécifie les options BOOTP pour le serveur DHCP."
-#: option.c:218
+#: option.c:276
#, c-format
msgid "Do NOT poll %s file, reload only on SIGHUP."
msgstr ""
"Ne pas scruter le fichier %s, ne recharger les modifications que sur "
"réception du signal SIGHUP."
-#: option.c:219
+#: option.c:277
msgid "Do NOT cache failed search results."
msgstr "Ne place pas en cache le résultat des requêtes qui ont echouées."
-#: option.c:220
+#: option.c:278
#, c-format
msgid "Use nameservers strictly in the order given in %s."
msgstr "Utilise les serveurs de noms dans l'ordre donné dans %s."
-#: option.c:221
+#: option.c:279
#, fuzzy
msgid "Specify options to be sent to DHCP clients."
msgstr "Options supplémentaires à associer aux clients DHCP."
-#: option.c:222
+#: option.c:280
msgid "DHCP option sent even if the client does not request it."
msgstr ""
-#: option.c:223
+#: option.c:281
msgid "Specify port to listen for DNS requests on (defaults to 53)."
msgstr ""
"Spécifie le port où il faut écouter les requêtes DNS (par défaut : 53)."
-#: option.c:224
+#: option.c:282
#, c-format
msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
msgstr ""
"Taille maximale des paquets UDP supportés pour EDNS.0 (par défaut : %s)."
-#: option.c:225
-msgid "Log queries."
+#: option.c:283
+#, fuzzy
+msgid "Log DNS queries."
msgstr "Enregistre les requêtes dans un journal d'activité."
-#: option.c:226
-msgid "Force the originating port for upstream queries."
+#: option.c:284
+#, fuzzy
+msgid "Force the originating port for upstream DNS queries."
msgstr "Force le port d'origine pour les requêtes vers les serveurs amonts."
-#: option.c:227
+#: option.c:285
msgid "Do NOT read resolv.conf."
msgstr "Ne pas lire le fichier resolv.conf."
-#: option.c:228
+#: option.c:286
#, c-format
msgid "Specify path to resolv.conf (defaults to %s)."
msgstr "Spécifie le chemin pour le fichier resolv.conf (par défaut : %s)."
-#: option.c:229
+#: option.c:287
msgid "Specify address(es) of upstream servers with optional domains."
msgstr ""
"Spécifie la ou les adresses des serveurs amonts avec des domaines optionels."
-#: option.c:230
+#: option.c:288
msgid "Never forward queries to specified domains."
msgstr "Ne jamais retransmettre les requêtes pour les domaines spécifiés."
-#: option.c:231
+#: option.c:289
msgid "Specify the domain to be assigned in DHCP leases."
msgstr "Spécifie le domaine qui doit etre assigné aux baux DHCP."
-#: option.c:232
+#: option.c:290
msgid "Specify default target in an MX record."
msgstr "Spécifie la cible par défaut dans un champ MX."
-#: option.c:233
+#: option.c:291
msgid "Specify time-to-live in seconds for replies from /etc/hosts."
msgstr ""
"Spécifie le TTL en secondes pour les réponses qui utilisent /etc/hosts."
-#: option.c:234
+#: option.c:292
+#, fuzzy
+msgid "Specify time-to-live in seconds for negative caching."
+msgstr ""
+"Spécifie le TTL en secondes pour les réponses qui utilisent /etc/hosts."
+
+#: option.c:293
#, c-format
msgid "Change to this user after startup. (defaults to %s)."
msgstr "Change pour cet utilisateur après le démarrage (par défaut : %s)."
-#: option.c:235
+#: option.c:294
#, fuzzy
msgid "Map DHCP vendor class to tag."
msgstr "Associe les classes de fournisseurs ('vendor class') DHCP aux options."
-#: option.c:236
+#: option.c:295
msgid "Display dnsmasq version and copyright information."
msgstr "Affiche la version de Dnsmasq et les informations liées au copyright."
-#: option.c:237
+#: option.c:296
msgid "Translate IPv4 addresses from upstream servers."
msgstr "Traduit les adresses IPV4 des serveurs amonts."
-#: option.c:238
+#: option.c:297
msgid "Specify a SRV record."
msgstr " Spécifie un champ SRV."
-#: option.c:239
+#: option.c:298
msgid "Display this message. Use --help dhcp for known DHCP options."
msgstr ""
-#: option.c:240
+#: option.c:299
#, fuzzy, c-format
msgid "Specify path of PID file (defaults to %s)."
msgstr "Spécifie un chemin pour le fichier PID (par défaut : %s)."
-#: option.c:241
+#: option.c:300
#, c-format
msgid "Specify maximum number of DHCP leases (defaults to %s)."
msgstr "Spécifie le nombre maximum de baux DHCP (par défaut : %s)."
-#: option.c:242
+#: option.c:301
msgid "Answer DNS queries based on the interface a query was sent to."
msgstr ""
"Repond aux requêtes DNS en se basant sur l'interface ou a été envoyée la "
"requête."
-#: option.c:243
+#: option.c:302
msgid "Specify TXT DNS record."
msgstr "Spécifie un champ DNS TXT"
-#: option.c:244
+#: option.c:303
#, fuzzy
msgid "Specify PTR DNS record."
msgstr "Spécifie un champ DNS TXT"
-#: option.c:245
+#: option.c:304
msgid "Give DNS name to IPv4 address of interface."
msgstr ""
-#: option.c:246
+#: option.c:305
msgid "Bind only to interfaces in use."
msgstr "Association uniquement aux interfaces réseau actuellement actives."
-#: option.c:247
+#: option.c:306
#, c-format
msgid "Read DHCP static host information from %s."
msgstr "Lecture des informations de DHCP statique à partir de %s."
-#: option.c:248
+#: option.c:307
msgid "Enable the DBus interface for setting upstream servers, etc."
msgstr ""
"Autorise l'interface DBus pour la configuration des serveurs amonts, etc."
-#: option.c:249
+#: option.c:308
msgid "Do not provide DHCP on this interface, only provide DNS."
msgstr ""
"Ne pas assurer de fonction DHCP sur cette interface, mais seulement la "
"fonction DNS."
-#: option.c:250
+#: option.c:309
msgid "Enable dynamic address allocation for bootp."
msgstr "Autorise l'allocation dynamique d'adresse pour bootp."
-#: option.c:251
+#: option.c:310
#, fuzzy
msgid "Map MAC address (with wildcards) to option set."
msgstr "Associe l'adresse MAC (avec les jokers) aux options."
-#: option.c:253
+#: option.c:312
msgid "Treat DHCP requests on aliases as arriving from interface."
msgstr "Traiter les requêtes DHCP sur les alias comme arrivant de l'interface."
-#: option.c:255
+#: option.c:314
msgid "Disable ICMP echo address checking in the DHCP server."
msgstr ""
"Supprime la vérification d'adresse sur le serveur au moyen de paquets ICMP "
"echo"
-#: option.c:256
+#: option.c:315
msgid "Script to run on DHCP lease creation and destruction."
msgstr "Script à exécuter lors de la création ou destruction de bail DHCP."
-#: option.c:257
+#: option.c:316
msgid "Read configuration from all the files in this directory."
msgstr "Lecture de la configuration dans tous les fichiers de ce répertoire."
-#: option.c:258
+#: option.c:317
#, fuzzy
msgid "Log to this syslog facility or file. (defaults to DAEMON)"
msgstr ""
"Enregistrer les journaux d'activité dans cette facilité syslog. (défaut : "
"DAEMON)"
-#: option.c:259
+#: option.c:318
msgid "Read leases at startup, but never write the lease file."
msgstr "Lecture des baux au démarrage, mais aucune écriture de fichier de baux"
-#: option.c:260
+#: option.c:319
#, fuzzy, c-format
msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
msgstr "Spécifie le nombre maximum de baux DHCP (par défaut : %s)."
-#: option.c:261
+#: option.c:320
#, c-format
msgid "Clear DNS cache when reloading %s."
msgstr "Vider le cache DNS lors du rechargement de %s."
-#: option.c:262
+#: option.c:321
msgid "Ignore hostnames provided by DHCP clients."
msgstr "Ignorer les noms d'hôtes fournis par les clients DHCP"
-#: option.c:263
+#: option.c:322
+msgid "Do NOT reuse filename and server fields for extra DHCP options."
+msgstr ""
+
+#: option.c:323
msgid "Enable integrated read-only TFTP server."
msgstr "Activer le server TFTP intégré (fonctionnant en lecture seulement)"
-#: option.c:264
+#: option.c:324
msgid "Export files by TFTP only from the specified subtree."
msgstr ""
"N'exporter par TFTP que les fichiers de l'arborescence de fichier spécifiée"
-#: option.c:265
+#: option.c:325
msgid "Add client IP address to tftp-root."
msgstr ""
-#: option.c:266
+#: option.c:326
msgid "Allow access only to files owned by the user running dnsmasq."
msgstr ""
"Accès aux seuls fichiers appartenants à l'utilisateur sous lequel tourne "
"dnsmasq"
-#: option.c:267
+#: option.c:327
#, fuzzy, c-format
msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
msgstr "Spécifie le nombre maximum de baux DHCP (par défaut : %s)."
-#: option.c:268
+#: option.c:328
msgid "Disable the TFTP blocksize extension."
msgstr "Désactivation de l'extension TFTP « taille de bloc »"
-#: option.c:269
+#: option.c:329
+msgid "Ephemeral port range for use by TFTP transfers."
+msgstr ""
+
+#: option.c:330
msgid "Extra logging for DHCP."
msgstr ""
-#: option.c:270
+#: option.c:331
msgid "Enable async. logging; optionally set queue length."
msgstr ""
-#: option.c:501
+#: option.c:332
+msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
+msgstr ""
+
+#: option.c:333
+msgid "Always perform DNS queries to all servers."
+msgstr ""
+
+#: option.c:334
+msgid "Set tag if client includes option in request."
+msgstr ""
+
+#: option.c:585
#, c-format
msgid ""
"Usage: dnsmasq [options]\n"
@@ -459,173 +509,192 @@ msgstr ""
"Usage : dnsmasq [options]\n"
"\n"
-#: option.c:503
+#: option.c:587
#, 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:505
+#: option.c:589
#, c-format
msgid "Valid options are :\n"
msgstr "Les options valides sont :\n"
-#: option.c:526
+#: option.c:610
#, c-format
msgid "Known DHCP options:\n"
msgstr ""
-#: option.c:599
+#: option.c:683
msgid "bad dhcp-option"
msgstr "mauvais dhcp-option"
-#: option.c:655
+#: option.c:739
#, fuzzy
msgid "bad IP address"
msgstr "lecture %s - %d adresses"
-#: option.c:753
+#: option.c:837
msgid "bad domain in dhcp-option"
msgstr "mauvais domaine dans dhcp-option"
-#: option.c:809
+#: option.c:895
msgid "dhcp-option too long"
msgstr "dhcp-option trop long"
-#: option.c:853
+#: option.c:942
#, fuzzy, c-format
msgid "cannot access directory %s: %s"
msgstr "Ne peut pas lire le répertoire %s : %s"
-#: option.c:872 tftp.c:313
+#: option.c:961 tftp.c:343
#, fuzzy, c-format
msgid "cannot access %s: %s"
msgstr "Ne peut pas lire %s : %s"
-#: option.c:913
+#: option.c:998
#, fuzzy
msgid "only one dhcp-hostsfile allowed"
msgstr "une seule étiquette netid est autorisée"
-#: option.c:962
+#: option.c:1005
+#, fuzzy
+msgid "only one dhcp-optsfile allowed"
+msgstr "une seule étiquette netid est autorisée"
+
+#: option.c:1049
msgid "bad MX preference"
msgstr "Mauvaise préference MX"
-#: option.c:971
+#: option.c:1053
msgid "bad MX name"
msgstr "mauvais nom MX"
-#: option.c:989
+#: option.c:1067
msgid "bad MX target"
msgstr "mauvaise cible MX"
-#: option.c:1001
+#: option.c:1078
msgid "cannot run scripts under uClinux"
msgstr "ne peut exécuter de script sous uClinux"
-#: option.c:1196 option.c:1207
+#: option.c:1265 option.c:1273
msgid "bad port"
msgstr "mauvais port"
-#: option.c:1349
+#: option.c:1293 option.c:1318
+msgid "interface binding not supported"
+msgstr ""
+
+#: option.c:1427
+#, fuzzy
+msgid "bad port range"
+msgstr "mauvais port"
+
+#: option.c:1444
msgid "bad bridge-interface"
msgstr "mauvaise interface-pont"
-#: option.c:1391
+#: option.c:1485
msgid "bad dhcp-range"
msgstr "mauvaise plage d'adresses DHCP (dhcp-range)"
-#: option.c:1419
+#: option.c:1511
msgid "only one netid tag allowed"
msgstr "une seule étiquette netid est autorisée"
-#: option.c:1461
+#: option.c:1551
msgid "inconsistent DHCP range"
msgstr "plage d'adresses DHCP incohérente"
-#: option.c:1637
+#: option.c:1719
#, fuzzy
msgid "bad DHCP host name"
msgstr "mauvais nom MX"
-#: option.c:1861
+#: option.c:1959
#, fuzzy
msgid "bad interface name"
msgstr "mauvaise interface-pont"
-#: option.c:1885
+#: option.c:1979
#, fuzzy
msgid "bad PTR record"
msgstr "mauvais champ SRV"
-#: option.c:1909
-msgid "bad TXT record"
-msgstr "mauvais champ TXT"
-
-#: option.c:1941
+#: option.c:1999
msgid "TXT record string too long"
msgstr "chaîne du champ TXT trop longue"
-#: option.c:1980
+#: option.c:2003
+msgid "bad TXT record"
+msgstr "mauvais champ TXT"
+
+#: option.c:2063
msgid "bad SRV record"
msgstr "mauvais champ SRV"
-#: option.c:1992
+#: option.c:2072
msgid "bad SRV target"
msgstr "mauvaise cible SRV"
-#: option.c:2003
+#: option.c:2080
msgid "invalid port number"
msgstr "numéro de port invalide"
-#: option.c:2013
+#: option.c:2087
msgid "invalid priority"
msgstr "priorité invalide"
-#: option.c:2023
+#: option.c:2094
msgid "invalid weight"
msgstr "poids invalide"
-#: option.c:2054
+#: option.c:2130
#, c-format
msgid "files nested too deep in %s"
msgstr "trop de niveaux de récursion pour les fichiers dans %s"
-#: option.c:2062 tftp.c:467
+#: option.c:2138 tftp.c:497
#, c-format
msgid "cannot read %s: %s"
msgstr "Ne peut pas lire %s : %s"
-#: option.c:2114
+#: option.c:2199
msgid "missing \""
msgstr "il manque \""
-#: option.c:2161
+#: option.c:2246
msgid "bad option"
msgstr "mauvaise option"
-#: option.c:2163
+#: option.c:2248
msgid "extraneous parameter"
msgstr "paramètre en trop"
-#: option.c:2165
+#: option.c:2250
msgid "missing parameter"
msgstr "paramètre manquant"
-#: option.c:2173
+#: option.c:2258
msgid "error"
msgstr "erreur"
-#: option.c:2179
+#: option.c:2264
#, c-format
msgid "%s at line %d of %%s"
msgstr "%s à la ligne %d de %%s"
-#: option.c:2252
+#: option.c:2304 option.c:2334
+#, fuzzy, c-format
+msgid "read %s"
+msgstr "Lecture de %s"
+
+#: option.c:2400
#, c-format
msgid "Dnsmasq version %s %s\n"
msgstr "Version de Dnsmasq %s %s\n"
-#: option.c:2253
+#: option.c:2401
#, c-format
msgid ""
"Compile time options %s\n"
@@ -634,526 +703,549 @@ msgstr ""
"Options à la compilation %s\n"
"\n"
-#: option.c:2254
+#: option.c:2402
#, c-format
msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
msgstr "Ce logiciel est fourni sans AUCUNE GARANTIE.\n"
-#: option.c:2255
+#: option.c:2403
#, c-format
msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
msgstr "Dnsmasq est un logiciel libre, il vous est permis de le redistribuer\n"
-#: option.c:2256
-#, c-format
-msgid "under the terms of the GNU General Public License, version 2.\n"
+#: option.c:2404
+#, fuzzy, c-format
+msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
msgstr ""
"sous les termes de la licence GPL (GNU General Public License), version 2.\n"
-#: option.c:2267
+#: option.c:2415
msgid "try --help"
msgstr "essayez avec --help"
-#: option.c:2269
+#: option.c:2417
msgid "try -w"
msgstr "essayez avec -w"
-#: option.c:2272
+#: option.c:2420
#, fuzzy, c-format
msgid "bad command line options: %s"
msgstr "mauvaises options en ligne de commande : %s."
-#: option.c:2313
+#: option.c:2461
#, c-format
msgid "cannot get host-name: %s"
msgstr "ne peut pas obtenir le nom de la machine : %s"
-#: option.c:2341
+#: option.c:2489
msgid "only one resolv.conf file allowed in no-poll mode."
msgstr "seul un fichier resolv.conf est autorisé dans le mode no-poll"
-#: option.c:2351
+#: option.c:2499
msgid "must have exactly one resolv.conf to read domain from."
msgstr ""
"un fichier resolv.conf (et un seul) est nécessaire pour y récuperer le nom "
"de domaine."
-#: option.c:2354 network.c:549
+#: option.c:2502 network.c:640
#, fuzzy, c-format
msgid "failed to read %s: %s"
msgstr "impossible de lire %s : %m"
-#: option.c:2372
+#: option.c:2520
#, c-format
msgid "no search directive found in %s"
msgstr "pas de directive de recherche trouvée dans %s"
-#: forward.c:376
+#: forward.c:381
#, c-format
msgid "nameserver %s refused to do a recursive query"
msgstr "le serveur de nom %s a refusé de faire une recherche récursive"
-#: isc.c:73 dnsmasq.c:723
+#: forward.c:409
+msgid "possible DNS-rebind attack detected"
+msgstr ""
+
+#: isc.c:77 dnsmasq.c:747
#, fuzzy, c-format
msgid "failed to access %s: %s"
msgstr "impossible d'accéder à %s : %m"
-#: isc.c:89
+#: isc.c:93
#, fuzzy, c-format
msgid "failed to load %s: %s"
msgstr "impossible de charger %s : %m"
-#: isc.c:93 dnsmasq.c:745
+#: isc.c:97 dnsmasq.c:769
#, c-format
msgid "reading %s"
msgstr "Lecture de %s"
-#: isc.c:115
+#: isc.c:119
#, c-format
msgid "bad name in %s"
msgstr "mauvais nom dans %s"
-#: isc.c:177
+#: isc.c:181
#, 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 possède un nom de domaine illégal"
-#: network.c:41
+#: network.c:45
#, fuzzy, c-format
msgid "unknown interface %s in bridge-interface"
msgstr "interface %s inconnue"
-#: network.c:377 dnsmasq.c:170
+#: network.c:389 dnsmasq.c:180
#, c-format
msgid "failed to create listening socket: %s"
msgstr "impossible de créer une socket de lecture : %s"
-#: network.c:384
+#: network.c:396
#, 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:402
+#: network.c:415
#, c-format
msgid "failed to bind listening socket for %s: %s"
msgstr "impossible de lier la socket de lecture pour %s : %s"
-#: network.c:410
+#: network.c:420
#, c-format
msgid "failed to listen on socket: %s"
msgstr "impossible de lire sur la socket : %s"
-#: network.c:421
+#: network.c:432
#, fuzzy, c-format
msgid "failed to create TFTP socket: %s"
msgstr "impossible de créer une socket de lecture : %s"
-#: network.c:493
+#: network.c:549
+#, fuzzy, c-format
+msgid "failed to bind server socket for %s: %s"
+msgstr "impossible de lier la socket de lecture pour %s : %s"
+
+#: network.c:582
#, c-format
msgid "ignoring nameserver %s - local interface"
msgstr "ignore le serveur de nom %s - interface locale"
-#: network.c:502
+#: network.c:591
#, fuzzy, c-format
msgid "ignoring nameserver %s - cannot make/bind socket: %s"
msgstr "ignore le serveur de nom %s - ne peut construire/lier la socket : %m"
-#: network.c:517
+#: network.c:606
msgid "unqualified"
msgstr "non-qualifié(e)"
-#: network.c:517
+#: network.c:606
msgid "names"
msgstr ""
-#: network.c:519
+#: network.c:608
msgid "default"
msgstr ""
-#: network.c:521
+#: network.c:610
msgid "domain"
msgstr "domaine"
-#: network.c:524
+#: network.c:613
#, c-format
msgid "using local addresses only for %s %s"
msgstr "utilise les adresses locales seulement pour %s %s"
-#: network.c:526
+#: network.c:615
#, c-format
msgid "using nameserver %s#%d for %s %s"
msgstr "utilise le serveur de nom %s#%d pour %s %s"
-#: network.c:529
+#: network.c:618
+#, fuzzy, c-format
+msgid "using nameserver %s#%d(via %s)"
+msgstr "utilise le serveur de nom %s#%d"
+
+#: network.c:620
#, c-format
msgid "using nameserver %s#%d"
msgstr "utilise le serveur de nom %s#%d"
-#: dnsmasq.c:106
+#: dnsmasq.c:110
msgid ""
"ISC dhcpd integration not available: set HAVE_ISC_READER in src/config.h"
msgstr ""
"L'intégration DHCP ISC n'est pas disponible : activez HAVE_ISC_READER dans "
"src/config.h"
-#: dnsmasq.c:128
+#: dnsmasq.c:132
#, fuzzy
msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
msgstr "DBus n'est pas disponible : activez HAVE_DBUS dans src/config.h"
-#: dnsmasq.c:142
+#: dnsmasq.c:137
+msgid "asychronous logging is not available under Solaris"
+msgstr ""
+
+#: dnsmasq.c:151
msgid "must set exactly one interface on broken systems without IP_RECVIF"
msgstr ""
"Une interface et une seule doit être déclarée sur les systèmes sans IP_RECVIF"
-#: dnsmasq.c:152
+#: dnsmasq.c:161
#, c-format
msgid "failed to find list of interfaces: %s"
msgstr "impossible de trouver la liste des interfaces : %s"
-#: dnsmasq.c:160
+#: dnsmasq.c:169
#, c-format
msgid "unknown interface %s"
msgstr "interface %s inconnue"
-#: dnsmasq.c:166
+#: dnsmasq.c:175
#, c-format
msgid "no interface with address %s"
msgstr "pas d'interface avec l'adresse %s"
-#: dnsmasq.c:181 dnsmasq.c:538
+#: dnsmasq.c:192 dnsmasq.c:561
#, c-format
msgid "DBus error: %s"
msgstr "Erreur DBus : %s"
-#: dnsmasq.c:184
+#: dnsmasq.c:195
msgid "DBus not available: set HAVE_DBUS in src/config.h"
msgstr "DBus n'est pas disponible : activez HAVE_DBUS dans src/config.h"
-#: dnsmasq.c:216
+#: dnsmasq.c:204
#, fuzzy, c-format
msgid "cannot create pipe: %s"
msgstr "Ne peut pas lire %s : %s"
-#: dnsmasq.c:237
+#: dnsmasq.c:225
#, c-format
msgid "cannot fork into background: %s"
msgstr ""
-#: dnsmasq.c:335
+#: dnsmasq.c:239
+#, c-format
+msgid "cannot chdir to filesystem root: %s"
+msgstr ""
+
+#: dnsmasq.c:349
+#, fuzzy, c-format
+msgid "started, version %s DNS disabled"
+msgstr "démarrage avec le cache désactivé (version %s)"
+
+#: dnsmasq.c:351
#, c-format
msgid "started, version %s cachesize %d"
msgstr "demarré, version %s (taille de cache %d)"
-#: dnsmasq.c:337
+#: dnsmasq.c:353
#, c-format
msgid "started, version %s cache disabled"
msgstr "démarrage avec le cache désactivé (version %s)"
-#: dnsmasq.c:339
+#: dnsmasq.c:355
#, c-format
msgid "compile time options: %s"
msgstr "options à la compilation : %s"
-#: dnsmasq.c:345
+#: dnsmasq.c:361
msgid "DBus support enabled: connected to system bus"
msgstr "Support DBus autorisé : connecté au bus système"
-#: dnsmasq.c:347
+#: dnsmasq.c:363
msgid "DBus support enabled: bus connection pending"
msgstr "Support DBus autorisé : connexion au bus en attente"
-#: dnsmasq.c:352
+#: dnsmasq.c:368
msgid "setting --bind-interfaces option because of OS limitations"
msgstr ""
"active l'option --bind-interfaces à cause de limitations dans le système "
"d'exploitation"
-#: dnsmasq.c:357
+#: dnsmasq.c:373
#, c-format
msgid "warning: interface %s does not currently exist"
msgstr "attention : l'interface %s n'existe pas actuellement"
-#: dnsmasq.c:362
+#: dnsmasq.c:378
msgid "warning: ignoring resolv-file flag because no-resolv is set"
msgstr ""
"attention : l'option « resolv-file » sera ignorée car « no-resolv » a été "
"spécifié"
-#: dnsmasq.c:365
+#: dnsmasq.c:381
#, fuzzy
msgid "warning: no upstream servers configured"
msgstr "configuration des serveurs amonts à partir de DBus"
-#: dnsmasq.c:369
+#: dnsmasq.c:385
#, c-format
msgid "asynchronous logging enabled, queue limit is %d messages"
msgstr ""
-#: dnsmasq.c:381
+#: dnsmasq.c:397
#, c-format
msgid "DHCP, static leases only on %.0s%s, lease time %s"
msgstr "baux statiques DHCP seulement sur %.0s%s, durée de validité de bail %s"
-#: dnsmasq.c:382
+#: dnsmasq.c:398
#, c-format
msgid "DHCP, IP range %s -- %s, lease time %s"
msgstr "DHCP, plage d'adresses %s -- %s, durée de bail %s"
-#: dnsmasq.c:396
+#: dnsmasq.c:412
msgid "root is "
msgstr "root est"
-#: dnsmasq.c:396
+#: dnsmasq.c:412
#, fuzzy
msgid "enabled"
msgstr "désactivé"
-#: dnsmasq.c:398
+#: dnsmasq.c:414
msgid "secure mode"
msgstr "mode sécurisé"
-#: dnsmasq.c:418
+#: dnsmasq.c:440
#, c-format
msgid "restricting maximum simultaneous TFTP transfers to %d"
msgstr "le nombre maximum de transferts TFTP simultanés sera restreint à %d"
-#: dnsmasq.c:427
+#: dnsmasq.c:449
#, fuzzy, c-format
msgid "warning: setting capabilities failed: %s"
msgstr "attention : impossible de configurer la capacité %m"
-#: dnsmasq.c:429
+#: dnsmasq.c:451
msgid "running as root"
msgstr "executé en temps que root"
-#: dnsmasq.c:540
+#: dnsmasq.c:563
msgid "connected to system DBus"
msgstr "connecté au systeme DBus"
-#: dnsmasq.c:659
+#: dnsmasq.c:683
#, c-format
msgid "child process killed by signal %d"
msgstr "Le processus fils a été terminé par le signal %d"
-#: dnsmasq.c:663
+#: dnsmasq.c:687
#, c-format
msgid "child process exited with status %d"
msgstr "Le processus fils s'est terminé avec le statut %d"
-#: dnsmasq.c:667
+#: dnsmasq.c:691
#, fuzzy, c-format
msgid "failed to execute %s: %s"
msgstr "impossible d'accéder à %s : %m"
-#: dnsmasq.c:671
+#: dnsmasq.c:695
#, fuzzy, c-format
msgid "failed to create helper: %s"
msgstr "impossible de lire %s : %m"
-#: dnsmasq.c:705
+#: dnsmasq.c:729
msgid "exiting on receipt of SIGTERM"
msgstr "sortie sur réception du signal SIGTERM"
-#: dnsmasq.c:756
+#: dnsmasq.c:780
#, fuzzy, c-format
msgid "no servers found in %s, will retry"
msgstr "aucun serveur trouvé dans %s, va réessayer"
-#: dhcp.c:32
+#: dhcp.c:38
#, c-format
msgid "cannot create DHCP socket : %s"
msgstr "ne peut créer la socket DHCP : %s"
-#: dhcp.c:41
+#: dhcp.c:50
#, c-format
msgid "failed to set options on DHCP socket: %s"
msgstr "impossible d'appliquer les options sur la socket DHCP : %s"
-#: dhcp.c:59
+#: dhcp.c:68
#, fuzzy, c-format
msgid "failed to set SO_REUSE{ADDR|PORT} on DHCP socket: %s"
msgstr "impossible de déclarer SO_REUSEADDR sur la socket DHCP : %s"
-#: dhcp.c:72
+#: dhcp.c:81
#, c-format
msgid "failed to bind DHCP server socket: %s"
msgstr "impossible de lier la socket serveur DHCP : %s"
-#: dhcp.c:85
+#: dhcp.c:94
#, c-format
msgid "cannot create ICMP raw socket: %s."
msgstr "ne peut créer de socket en mode raw pour ICMP : %s."
-#: dhcp.c:100
-#, c-format
-msgid "duplicate IP address %s in dhcp-config directive."
-msgstr "adresse IP %s dupliquée dans la directive dhcp-config."
-
-#: dhcp.c:103
-#, fuzzy, c-format
-msgid "illegal domain %s in dhcp-config directive."
-msgstr "adresse IP %s dupliquée dans la directive dhcp-config."
-
-#: dhcp.c:221
+#: dhcp.c:223
#, c-format
msgid "DHCP packet received on %s which has no address"
msgstr "Paquet DHCP reçu sur %s qui n'a pas d'adresse"
-#: dhcp.c:352
+#: dhcp.c:382
#, c-format
msgid "DHCP range %s -- %s is not consistent with netmask %s"
msgstr ""
"La plage d'adresses DHCP %s -- %s n'est pas cohérente avec le masque de "
"réseau %s"
-#: dhcp.c:669
+#: dhcp.c:709
#, fuzzy, c-format
msgid "failed to read %s:%s"
msgstr "impossible de lire %s : %m"
-#: dhcp.c:704
+#: dhcp.c:744
#, fuzzy, c-format
msgid "bad line at %s line %d"
msgstr "mauvais nom dans %s ligne %d"
-#: dhcp.c:826
+#: dhcp.c:847
+#, c-format
+msgid "duplicate IP address %s in dhcp-config directive."
+msgstr "adresse IP %s dupliquée dans la directive dhcp-config."
+
+#: dhcp.c:850
#, fuzzy, c-format
msgid "duplicate IP address %s in %s."
msgstr "adresse IP %s dupliquée dans la directive dhcp-config."
-#: dhcp.c:832
+#: dhcp.c:858
+#, fuzzy, c-format
+msgid "illegal domain %s in dhcp-config directive."
+msgstr "adresse IP %s dupliquée dans la directive dhcp-config."
+
+#: dhcp.c:860
#, c-format
msgid "illegal domain %s in %s."
msgstr ""
-#: dhcp.c:839
-#, fuzzy, c-format
-msgid "read %s - %d hosts"
-msgstr "lecture %s - %d adresses"
+#: dhcp.c:899
+#, c-format
+msgid "%s has more then one address in hostsfile, using %s for DHCP"
+msgstr ""
-#: dhcp.c:866
+#: dhcp.c:904
#, c-format
msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr "adresse IP %s (%s) dupliquée dans la directive dhcp-config."
-#: lease.c:54
+#: lease.c:58
#, fuzzy, c-format
msgid "cannot open or create lease file %s: %s"
msgstr "ne peut ouvrir ou créer le fichiers de baux %s : %s"
-#: lease.c:80
+#: lease.c:84
msgid "too many stored leases"
msgstr "beaucoup trop de baux enregistrés"
-#: lease.c:121
+#: lease.c:125
#, fuzzy, c-format
msgid "cannot run lease-init script %s: %s"
msgstr "Ne peut pas lire %s : %s"
-#: lease.c:127
+#: lease.c:131
#, c-format
msgid "lease-init script returned exit code %s"
msgstr "le script lease-init a retourné le code %s"
-#: lease.c:234
+#: lease.c:238
#, fuzzy, c-format
msgid "failed to write %s: %s (retry in %us)"
msgstr "impossible de lire %s : %s (prochain essai dans %us)"
-#: rfc2131.c:300
+#: rfc2131.c:303
#, c-format
msgid "no address range available for DHCP request %s %s"
msgstr "pas de plage d'adresse disponible pour la requête DHCP %s %s"
-#: rfc2131.c:301
+#: rfc2131.c:304
msgid "with subnet selector"
msgstr "avec sélecteur de sous-reseau"
-#: rfc2131.c:301
+#: rfc2131.c:304
msgid "via"
msgstr "par l'intermédiaire de"
-#: rfc2131.c:312
+#: rfc2131.c:315
#, c-format
msgid "DHCP packet: transaction-id is %u"
msgstr ""
-#: rfc2131.c:317
+#: rfc2131.c:320
#, c-format
msgid "Available DHCP subnet: %s/%s"
msgstr ""
-#: rfc2131.c:319
+#: rfc2131.c:322
#, c-format
msgid "Available DHCP range: %s -- %s"
msgstr ""
-#: rfc2131.c:347 rfc2131.c:378
+#: rfc2131.c:350 rfc2131.c:381
msgid "disabled"
msgstr "désactivé"
-#: rfc2131.c:390 rfc2131.c:852
+#: rfc2131.c:393 rfc2131.c:873
msgid "address in use"
msgstr "adresse déjà utilisée"
-#: rfc2131.c:393
+#: rfc2131.c:396
msgid "no address configured"
msgstr "pas d'adresse configurée"
-#: rfc2131.c:406 rfc2131.c:720
+#: rfc2131.c:409 rfc2131.c:736
msgid "no address available"
msgstr "pas d'adresse disponible"
-#: rfc2131.c:416
-#, c-format
-msgid "Limit of %d leases exceeded."
-msgstr ""
-
-#: rfc2131.c:417 rfc2131.c:862
+#: rfc2131.c:418 rfc2131.c:883
msgid "no leases left"
msgstr "plus aucun bail disponible"
-#: rfc2131.c:421 rfc2131.c:826
+#: rfc2131.c:421 rfc2131.c:847
msgid "wrong network"
msgstr "mauvais réseau"
-#: rfc2131.c:519
+#: rfc2131.c:520
#, c-format
msgid "Ignoring domain %s for DHCP host name %s"
msgstr ""
-#: rfc2131.c:598
+#: rfc2131.c:614
#, c-format
msgid "Vendor class: %s"
msgstr ""
-#: rfc2131.c:600
+#: rfc2131.c:616
#, c-format
msgid "User class: %s"
msgstr ""
-#: rfc2131.c:641
+#: rfc2131.c:657
#, fuzzy, c-format
msgid "disabling DHCP static address %s for %s"
msgstr "désactive l'adresse statique DHCP %s pour %s"
-#: rfc2131.c:662
+#: rfc2131.c:678
msgid "unknown lease"
msgstr "bail inconnu"
-#: rfc2131.c:671 rfc2131.c:970
+#: rfc2131.c:687 rfc2131.c:992
msgid "ignored"
msgstr "ignoré"
-#: rfc2131.c:691
+#: rfc2131.c:707
#, c-format
msgid "not using configured address %s because it is leased to %s"
msgstr ""
"L'adresse statique %s ne sera pas utilisée car un bail est déjà attribué à %s"
-#: rfc2131.c:701
+#: rfc2131.c:717
#, c-format
msgid ""
"not using configured address %s because it is in use by the server or relay"
@@ -1161,145 +1253,158 @@ msgstr ""
"L'adresse statique %s ne sera pas utilisée car elle est utilisée par le "
"serveur ou un relai"
-#: rfc2131.c:704
+#: rfc2131.c:720
#, c-format
msgid "not using configured address %s because it was previously declined"
msgstr ""
"L'adresse statique %s ne sera pas utilisée car elle a préalablement été "
"refusée"
-#: rfc2131.c:718 rfc2131.c:855
+#: rfc2131.c:734 rfc2131.c:876
msgid "no unique-id"
msgstr "pas d'identifiant unique"
-#: rfc2131.c:789
+#: rfc2131.c:806
msgid "wrong address"
msgstr "mauvaise adresse"
-#: rfc2131.c:802
+#: rfc2131.c:823
msgid "lease not found"
msgstr "bail non trouvé"
-#: rfc2131.c:834
+#: rfc2131.c:855
msgid "address not available"
msgstr "adresse non disponible"
-#: rfc2131.c:845
+#: rfc2131.c:866
msgid "static lease available"
msgstr "bail statique disponible"
-#: rfc2131.c:849
+#: rfc2131.c:870
msgid "address reserved"
msgstr "adresse reservée"
-#: rfc2131.c:1252
+#: rfc2131.c:1265
#, c-format
msgid "tags: %s"
msgstr ""
-#: rfc2131.c:1334
+#: rfc2131.c:1352
#, fuzzy, c-format
msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
msgstr ""
"Impossible d'envoyer l'option DHCP %d : pas assez d'espace dans le paquet"
-#: rfc2131.c:1488
+#: rfc2131.c:1507
#, fuzzy, c-format
msgid "requested options: %s"
msgstr "options à la compilation : %s"
-#: rfc2131.c:1519
-#, c-format
-msgid "server name: %s"
-msgstr ""
+#: rfc2131.c:1556
+#, fuzzy, c-format
+msgid "next server: %s"
+msgstr "Erreur netlink : %s"
-#: rfc2131.c:1531
+#: rfc2131.c:1580
#, c-format
msgid "bootfile name: %s"
msgstr ""
-#: rfc2131.c:1540
-#, fuzzy, c-format
-msgid "next server: %s"
-msgstr "Erreur netlink : %s"
+#: rfc2131.c:1583
+#, c-format
+msgid "server name: %s"
+msgstr ""
-#: netlink.c:59
+#: netlink.c:63
#, fuzzy, c-format
msgid "cannot create netlink socket: %s"
msgstr "ne peux lier une socket netlink : %s"
-#: netlink.c:226
+#: netlink.c:230
#, fuzzy, c-format
msgid "netlink returns error: %s"
msgstr "Erreur netlink : %s"
-#: dbus.c:111
+#: dbus.c:115
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
+#: dbus.c:241
msgid "setting upstream servers from DBus"
msgstr "configuration des serveurs amonts à partir de DBus"
-#: dbus.c:275
+#: dbus.c:279
msgid "could not register a DBus message handler"
msgstr "ne peut enregistrer une routine de traitement des messages DBus"
-#: bpf.c:43
+#: bpf.c:146
#, c-format
msgid "cannot create DHCP BPF socket: %s"
msgstr "impossible de créer une socket BPF pour DHCP : %s"
-#: bpf.c:71
+#: bpf.c:174
#, fuzzy, c-format
msgid "DHCP request for unsupported hardware type (%d) received on %s"
msgstr "requête DHCP pour un type de matériel non supporté (%d) reçue sur %s"
-#: tftp.c:158
+#: tftp.c:173
+msgid "unable to get free port for TFTP"
+msgstr ""
+
+#: tftp.c:188
#, c-format
msgid "unsupported request from %s"
msgstr "requête de %s non supportée"
-#: tftp.c:236
+#: tftp.c:266
#, c-format
msgid "TFTP sent %s to %s"
msgstr "TFTP envoyé %s à %s"
-#: tftp.c:259
+#: tftp.c:289
#, fuzzy, c-format
msgid "file %s not found"
msgstr "bail non trouvé"
-#: tftp.c:369
+#: tftp.c:399
#, c-format
msgid "TFTP error %d %s received from %s"
msgstr "TFTP erreur %d %s reçu de %s"
-#: tftp.c:400
+#: tftp.c:430
#, fuzzy, c-format
msgid "TFTP failed sending %s to %s"
msgstr "impossible de lire %s : %m"
-#: log.c:69
+#: log.c:73
#, fuzzy, c-format
msgid "cannot open %s: %s"
msgstr "Ne peut pas lire %s : %s"
-#: log.c:146
+#: log.c:89
+#, fuzzy, c-format
+msgid "warning: failed to change owner of %s: %s"
+msgstr "Impossible de charger les noms à partir de %s : %m"
+
+#: log.c:161
#, c-format
msgid "overflow: %d log entries lost"
msgstr ""
-#: log.c:223
+#: log.c:238
#, c-format
msgid "log failed: %s"
msgstr ""
-#: log.c:378
+#: log.c:394
msgid "FAILED to start up"
msgstr "IMPOSSIBLE de démarrer"
+#, fuzzy
+#~ msgid "read %s - %d hosts"
+#~ msgstr "lecture %s - %d adresses"
+
#~ msgid "bad dhcp-host"
#~ msgstr "mauvais dhcp-host"
diff --git a/po/id.po b/po/id.po
index 212f72c..c02b13e 100644
--- a/po/id.po
+++ b/po/id.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dnsmasq 2.24\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-08-29 11:09+0100\n"
+"POT-Creation-Date: 2008-02-12 11:04+0000\n"
"PO-Revision-Date: 2005-10-07 11:45+0100\n"
"Last-Translator: Salman AS <sas@salman.or.id>\n"
"Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
@@ -15,36 +15,36 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
# OK
-#: cache.c:671
+#: cache.c:680
#, fuzzy, c-format
msgid "failed to load names from %s: %s"
msgstr "gagal memuat nama-nama dari %s: %m"
# OK
-#: cache.c:705 dhcp.c:717
+#: cache.c:714 dhcp.c:757
#, fuzzy, c-format
msgid "bad address at %s line %d"
msgstr "kesalahan nama pada %s baris %d"
# OK
-#: cache.c:752 dhcp.c:731
+#: cache.c:761 dhcp.c:771
#, c-format
msgid "bad name at %s line %d"
msgstr "kesalahan nama pada %s baris %d"
# OK
-#: cache.c:759 dhcp.c:785
+#: cache.c:768 dhcp.c:825
#, c-format
msgid "read %s - %d addresses"
msgstr "membaca %s - %d alamat"
# OK
-#: cache.c:797
+#: cache.c:806
msgid "cleared cache"
msgstr "cache telah dihapus"
# OK
-#: cache.c:844
+#: cache.c:855
#, c-format
msgid ""
"not giving name %s to the DHCP lease of %s because the name exists in %s "
@@ -53,445 +53,496 @@ msgstr ""
"tidak memberikan nama %s kepada lease DHCP %s karena nama telah ada dalam %"
"sdengan alamat %s"
+#: cache.c:907
+#, c-format
+msgid "time %lu"
+msgstr ""
+
# OK
-#: cache.c:884
+#: cache.c:908
#, fuzzy, c-format
-msgid ""
-"time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache "
-"entries."
+msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
msgstr ""
"ukuran cache %d, %d/%d penyisipan cache menimpa cache yang belum kadaluwarsa"
+#: cache.c:910
+#, c-format
+msgid "queries forwarded %u, queries answered locally %u"
+msgstr ""
+
+#: cache.c:933
+#, c-format
+msgid "server %s#%d: queries sent %u, retried or failed %u"
+msgstr ""
+
# OK
-#: util.c:157 option.c:758
+#: util.c:160
msgid "could not get memory"
msgstr "tidak bisa mendapatkan memory"
# OK
-#: util.c:167
+#: util.c:170
#, fuzzy, c-format
msgid "failed to allocate %d bytes"
msgstr "gagal memuat %S: %m"
# OK
-#: util.c:272
+#: util.c:275
#, c-format
msgid "infinite"
msgstr "tak terbatas"
# OK
-#: option.c:188
+#: option.c:244
msgid "Specify local address(es) to listen on."
msgstr "Tentukan alamat lokal untuk mendengarkan."
# OK
-#: option.c:189
+#: option.c:245
msgid "Return ipaddr for all hosts in specified domains."
msgstr "Menghasilkan ipaddr untuk semua host dalam domain yang dipilih."
# OK
-#: option.c:190
+#: option.c:246
msgid "Fake reverse lookups for RFC1918 private address ranges."
msgstr "Fake pencarian balik untuk alamat private sesuai dengan RFC1918."
# OK
-#: option.c:191
+#: option.c:247
msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
msgstr "Perlakukan ipaddr sebagai NXDOMAIN (mengalahkan wildcard Verisign)."
# OK
-#: option.c:192
+#: option.c:248
#, c-format
msgid "Specify the size of the cache in entries (defaults to %s)."
msgstr "Tentukan ukuran cache, dalam jumlah isian (default %s)."
# OK
-#: option.c:193
+#: option.c:249
#, c-format
msgid "Specify configuration file (defaults to %s)."
msgstr "Tentukan file konfigurasi (default %s)."
# OK
-#: option.c:194
+#: option.c:250
msgid "Do NOT fork into the background: run in debug mode."
msgstr "JANGAN berjalan di background: berjalan dalam modus debug."
# OK
-#: option.c:195
+#: option.c:251
msgid "Do NOT forward queries with no domain part."
msgstr "JANGAN teruskan permintaan tanpa bagian domain."
# OK
-#: option.c:196
+#: option.c:252
msgid "Return self-pointing MX records for local hosts."
msgstr "Mengembalikan record MX untuk diri sendiri host-host lokal."
# OK
-#: option.c:197
+#: option.c:253
msgid "Expand simple names in /etc/hosts with domain-suffix."
msgstr "Melengkapi nama-nama di /etc/hosts dengan akhiran domain."
# OK
-#: option.c:198
+#: option.c:254
msgid "Don't forward spurious DNS requests from Windows hosts."
msgstr "Jangan meneruskan permintaan DNS spurious dari host-host Windows."
# OK
-#: option.c:199
+#: option.c:255
msgid "Enable DHCP in the range given with lease duration."
msgstr "Bolehkan DHCP dalam jangkauan yang diberikan dengan durasi lease."
# OK
-#: option.c:200
+#: option.c:256
#, c-format
msgid "Change to this group after startup (defaults to %s)."
msgstr "Ubah ke group ini setelah mulai (default %s)."
# OK
-#: option.c:201
+#: option.c:257
msgid "Set address or hostname for a specified machine."
msgstr "Setel alamat atau nama host untuk mesin yang disebutkan."
-#: option.c:202
+#: option.c:258
msgid "Read DHCP host specs from file"
msgstr ""
+#: option.c:259
+msgid "Read DHCP option specs from file"
+msgstr ""
+
# OK
-#: option.c:203
+#: option.c:260
#, c-format
msgid "Do NOT load %s file."
msgstr "JANGAN muat file %s."
# OK
-#: option.c:204
+#: option.c:261
#, c-format
msgid "Specify a hosts file to be read in addition to %s."
msgstr ""
"Sebutkan sebuah file hosts yang harus dibaca sebagai tambahan untuk %s."
# OK
-#: option.c:205
+#: option.c:262
msgid "Specify interface(s) to listen on."
msgstr "Sebutkan antarmuka untuk mendengarkan."
# OK
-#: option.c:206
+#: option.c:263
msgid "Specify interface(s) NOT to listen on."
msgstr "Sebutkan antarmuka untuk TIDAK mendengarkan."
# OK
-#: option.c:207
+#: option.c:264
#, fuzzy
msgid "Map DHCP user class to tag."
msgstr "Petakan kelas user DHCP ke setelan yang dipilih."
-#: option.c:208
+#: option.c:265
msgid "Map RFC3046 circuit-id to tag."
msgstr ""
-#: option.c:209
+#: option.c:266
msgid "Map RFC3046 remote-id to tag."
msgstr ""
-#: option.c:210
+#: option.c:267
msgid "Map RFC3993 subscriber-id to tag."
msgstr ""
# OK
-#: option.c:211
+#: option.c:268
#, fuzzy
msgid "Don't do DHCP for hosts with tag set."
msgstr "Jangan menggunakan DHCP untuk host-host yang dipilih."
# OK
-#: option.c:212
+#: option.c:269
+#, fuzzy
+msgid "Force broadcast replies for hosts with tag set."
+msgstr "Jangan menggunakan DHCP untuk host-host yang dipilih."
+
+# OK
+#: option.c:270
msgid "Do NOT fork into the background, do NOT run in debug mode."
msgstr "JANGAN berjalan di background, jangan berjalan dalam modus debug."
# OK
-#: option.c:213
+#: option.c:271
msgid "Assume we are the only DHCP server on the local network."
msgstr "Berpikir bahwa kita satu-satunya DHCP server dalam jaringan."
# OK
-#: option.c:214
+#: option.c:272
#, c-format
msgid "Specify where to store DHCP leases (defaults to %s)."
msgstr "Sebutkan lokasi untuk menyimpan lease DHCP (default %s)."
# OK
-#: option.c:215
+#: option.c:273
msgid "Return MX records for local hosts."
msgstr "Kembalikan rekord MX untuk host-host lokal."
# OK
-#: option.c:216
+#: option.c:274
msgid "Specify an MX record."
msgstr "Sebutkan sebuah rekord MX."
# OK
-#: option.c:217
+#: option.c:275
msgid "Specify BOOTP options to DHCP server."
msgstr "Sebutkan pilihan-pilihan BOOTP untuk DHCP server."
-#: option.c:218
+#: option.c:276
#, c-format
msgid "Do NOT poll %s file, reload only on SIGHUP."
msgstr "Jangan kumpulkan file %s, muat kembali saat SIGHUP."
# OK
-#: option.c:219
+#: option.c:277
msgid "Do NOT cache failed search results."
msgstr "JANGAN menyimpan hasil pencarian yang gagal."
# OK
-#: option.c:220
+#: option.c:278
#, c-format
msgid "Use nameservers strictly in the order given in %s."
msgstr "Gunakan secara ketat namaserver yang disebutkan sesuai urutan di %s."
# OK
-#: option.c:221
+#: option.c:279
#, fuzzy
msgid "Specify options to be sent to DHCP clients."
msgstr ""
"Setel pilihan-pilihan tambahan yang akan disetel untuk klien-klien DHCP."
-#: option.c:222
+#: option.c:280
msgid "DHCP option sent even if the client does not request it."
msgstr ""
# OK
-#: option.c:223
+#: option.c:281
msgid "Specify port to listen for DNS requests on (defaults to 53)."
msgstr "Sebutkan port untuk mendengarkan permintaan DNS (default port 53)."
# OK
-#: option.c:224
+#: option.c:282
#, c-format
msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
msgstr "Ukuran maksimum paket UDP yang didukung untuk EDNS.0 (default %s)."
# OK
-#: option.c:225
-msgid "Log queries."
+#: option.c:283
+#, fuzzy
+msgid "Log DNS queries."
msgstr "Permintaan log."
# OK
-#: option.c:226
-msgid "Force the originating port for upstream queries."
+#: option.c:284
+#, fuzzy
+msgid "Force the originating port for upstream DNS queries."
msgstr "Paksa port asal untuk permintaan ke atas."
# OK
-#: option.c:227
+#: option.c:285
msgid "Do NOT read resolv.conf."
msgstr "JANGAN baca resolv.conf."
# OK
-#: option.c:228
+#: option.c:286
#, c-format
msgid "Specify path to resolv.conf (defaults to %s)."
msgstr "Sebutkan path ke resolv.conf (default %s)."
# OK
-#: option.c:229
+#: option.c:287
msgid "Specify address(es) of upstream servers with optional domains."
msgstr ""
"Sebutkan alamat-alamat server di atas, boleh dilengkapi dengan nama domain."
# OK
-#: option.c:230
+#: option.c:288
msgid "Never forward queries to specified domains."
msgstr "JANGAN pernah meneruskan permintaan ke domain yang disebutkan."
# OK
-#: option.c:231
+#: option.c:289
msgid "Specify the domain to be assigned in DHCP leases."
msgstr "Sebutkan domain yang digunakan dalam lease DHCP."
# OK
-#: option.c:232
+#: option.c:290
msgid "Specify default target in an MX record."
msgstr "Sebutkan tujuan default dalam rekord MX."
# OK
-#: option.c:233
+#: option.c:291
msgid "Specify time-to-live in seconds for replies from /etc/hosts."
msgstr "Sebutkan time-to-live dalam detik untuk jawaban dari /etc/hosts."
# OK
-#: option.c:234
+#: option.c:292
+#, fuzzy
+msgid "Specify time-to-live in seconds for negative caching."
+msgstr "Sebutkan time-to-live dalam detik untuk jawaban dari /etc/hosts."
+
+# OK
+#: option.c:293
#, c-format
msgid "Change to this user after startup. (defaults to %s)."
msgstr "Ubah ke user ini setelah mulai. (default %s)."
# OK
-#: option.c:235
+#: option.c:294
#, fuzzy
msgid "Map DHCP vendor class to tag."
msgstr "Memetakan kelas vendor DHCP ke daftar pilihan."
# OK
-#: option.c:236
+#: option.c:295
msgid "Display dnsmasq version and copyright information."
msgstr "Menampilkan versi dan informasi hak cipta dnsmasq."
# OK
-#: option.c:237
+#: option.c:296
msgid "Translate IPv4 addresses from upstream servers."
msgstr "Terjemahkan alamat-alamat IPv4 dari server-server di atas."
# OK
-#: option.c:238
+#: option.c:297
msgid "Specify a SRV record."
msgstr "Sebutkan rekord SRV."
-#: option.c:239
+#: option.c:298
msgid "Display this message. Use --help dhcp for known DHCP options."
msgstr ""
# OK
-#: option.c:240
+#: option.c:299
#, fuzzy, c-format
msgid "Specify path of PID file (defaults to %s)."
msgstr "Sebutkan path file PID. (default %s)."
# OK
-#: option.c:241
+#: option.c:300
#, c-format
msgid "Specify maximum number of DHCP leases (defaults to %s)."
msgstr "Sebutkan jumlah maksimum lease DHCP (default %s)."
# OK
-#: option.c:242
+#: option.c:301
msgid "Answer DNS queries based on the interface a query was sent to."
msgstr ""
"Jawab permintaan DNS berdasarkan antarmuka dimana permintaan dikirimkan."
# OK
-#: option.c:243
+#: option.c:302
msgid "Specify TXT DNS record."
msgstr "Sebutkan rekord TXT DNS."
# OK
-#: option.c:244
+#: option.c:303
#, fuzzy
msgid "Specify PTR DNS record."
msgstr "Sebutkan rekord TXT DNS."
-#: option.c:245
+#: option.c:304
msgid "Give DNS name to IPv4 address of interface."
msgstr ""
# OK
-#: option.c:246
+#: option.c:305
msgid "Bind only to interfaces in use."
msgstr "Hanya kaitkan ke antarmuka yang sedang digunakan saja."
# OK
-#: option.c:247
+#: option.c:306
#, c-format
msgid "Read DHCP static host information from %s."
msgstr "Baca informasi statik host DHCP dari %s."
# OK
-#: option.c:248
+#: option.c:307
msgid "Enable the DBus interface for setting upstream servers, etc."
msgstr "Mungkinkan antar muka DBus untuk menyetel server-server di atas, dsb."
# OK
-#: option.c:249
+#: option.c:308
msgid "Do not provide DHCP on this interface, only provide DNS."
msgstr "JANGAN menyediakan DHCP pada antarmuka ini, hanya menyediakan DNS."
# OK
-#: option.c:250
+#: option.c:309
msgid "Enable dynamic address allocation for bootp."
msgstr "Mungkinkan alokasi alamat dinamis untuk bootp."
# OK
-#: option.c:251
+#: option.c:310
#, fuzzy
msgid "Map MAC address (with wildcards) to option set."
msgstr "Memetakan kelas vendor DHCP ke daftar pilihan."
-#: option.c:253
+#: option.c:312
msgid "Treat DHCP requests on aliases as arriving from interface."
msgstr ""
-#: option.c:255
+#: option.c:314
msgid "Disable ICMP echo address checking in the DHCP server."
msgstr ""
-#: option.c:256
+#: option.c:315
msgid "Script to run on DHCP lease creation and destruction."
msgstr ""
-#: option.c:257
+#: option.c:316
msgid "Read configuration from all the files in this directory."
msgstr ""
# OK
-#: option.c:258
+#: option.c:317
#, fuzzy
msgid "Log to this syslog facility or file. (defaults to DAEMON)"
msgstr "Ubah ke user ini setelah mulai. (default %s)."
-#: option.c:259
+#: option.c:318
msgid "Read leases at startup, but never write the lease file."
msgstr ""
# OK
-#: option.c:260
+#: option.c:319
#, fuzzy, c-format
msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
msgstr "Sebutkan jumlah maksimum lease DHCP (default %s)."
-#: option.c:261
+#: option.c:320
#, c-format
msgid "Clear DNS cache when reloading %s."
msgstr ""
-#: option.c:262
+#: option.c:321
msgid "Ignore hostnames provided by DHCP clients."
msgstr ""
-#: option.c:263
+#: option.c:322
+msgid "Do NOT reuse filename and server fields for extra DHCP options."
+msgstr ""
+
+#: option.c:323
msgid "Enable integrated read-only TFTP server."
msgstr ""
-#: option.c:264
+#: option.c:324
msgid "Export files by TFTP only from the specified subtree."
msgstr ""
-#: option.c:265
+#: option.c:325
msgid "Add client IP address to tftp-root."
msgstr ""
-#: option.c:266
+#: option.c:326
msgid "Allow access only to files owned by the user running dnsmasq."
msgstr ""
# OK
-#: option.c:267
+#: option.c:327
#, fuzzy, c-format
msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
msgstr "Sebutkan jumlah maksimum lease DHCP (default %s)."
-#: option.c:268
+#: option.c:328
msgid "Disable the TFTP blocksize extension."
msgstr ""
-#: option.c:269
+#: option.c:329
+msgid "Ephemeral port range for use by TFTP transfers."
+msgstr ""
+
+#: option.c:330
msgid "Extra logging for DHCP."
msgstr ""
-#: option.c:270
+#: option.c:331
msgid "Enable async. logging; optionally set queue length."
msgstr ""
+#: option.c:332
+msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
+msgstr ""
+
+#: option.c:333
+msgid "Always perform DNS queries to all servers."
+msgstr ""
+
+#: option.c:334
+msgid "Set tag if client includes option in request."
+msgstr ""
+
# OK
-#: option.c:501
+#: option.c:585
#, c-format
msgid ""
"Usage: dnsmasq [options]\n"
@@ -501,204 +552,224 @@ msgstr ""
"\n"
# OK
-#: option.c:503
+#: option.c:587
#, c-format
msgid "Use short options only on the command line.\n"
msgstr "Gunakan pilihan pendek saja pada perintah baris.\n"
# OK
-#: option.c:505
+#: option.c:589
#, c-format
msgid "Valid options are :\n"
msgstr "Pilihan yang boleh adalah:\n"
-#: option.c:526
+#: option.c:610
#, c-format
msgid "Known DHCP options:\n"
msgstr ""
# OK
-#: option.c:599
+#: option.c:683
msgid "bad dhcp-option"
msgstr "dhcp-option salah"
# OK
-#: option.c:655
+#: option.c:739
#, fuzzy
msgid "bad IP address"
msgstr "membaca %s - %d alamat"
# OK
-#: option.c:753
+#: option.c:837
msgid "bad domain in dhcp-option"
msgstr "domain dalam dhcp-option salah"
# OK
-#: option.c:809
+#: option.c:895
msgid "dhcp-option too long"
msgstr "dhcp-option terlalu panjang"
# OK
-#: option.c:853
+#: option.c:942
#, fuzzy, c-format
msgid "cannot access directory %s: %s"
msgstr "tidak bisa membaca %s: %s"
# OK
-#: option.c:872 tftp.c:313
+#: option.c:961 tftp.c:343
#, fuzzy, c-format
msgid "cannot access %s: %s"
msgstr "tidak bisa membaca %s: %s"
-#: option.c:913
+#: option.c:998
msgid "only one dhcp-hostsfile allowed"
msgstr ""
+#: option.c:1005
+msgid "only one dhcp-optsfile allowed"
+msgstr ""
+
# OK
-#: option.c:962
+#: option.c:1049
msgid "bad MX preference"
msgstr "kesukaan MX salah"
# OK
-#: option.c:971
+#: option.c:1053
msgid "bad MX name"
msgstr "nama MX salah"
# OK
-#: option.c:989
+#: option.c:1067
msgid "bad MX target"
msgstr "target MX salah"
-#: option.c:1001
+#: option.c:1078
msgid "cannot run scripts under uClinux"
msgstr ""
# OK
-#: option.c:1196 option.c:1207
+#: option.c:1265 option.c:1273
msgid "bad port"
msgstr "port salah"
-#: option.c:1349
+#: option.c:1293 option.c:1318
+msgid "interface binding not supported"
+msgstr ""
+
+# OK
+#: option.c:1427
+#, fuzzy
+msgid "bad port range"
+msgstr "port salah"
+
+#: option.c:1444
msgid "bad bridge-interface"
msgstr ""
# OK
-#: option.c:1391
+#: option.c:1485
msgid "bad dhcp-range"
msgstr "dhcp-range salah"
-#: option.c:1419
+#: option.c:1511
msgid "only one netid tag allowed"
msgstr ""
# OK
-#: option.c:1461
+#: option.c:1551
msgid "inconsistent DHCP range"
msgstr "jangkauan DHCP tidak konsisten"
# OK
-#: option.c:1637
+#: option.c:1719
#, fuzzy
msgid "bad DHCP host name"
msgstr "nama MX salah"
# OK
-#: option.c:1861
+#: option.c:1959
#, fuzzy
msgid "bad interface name"
msgstr "nama MX salah"
# OK
-#: option.c:1885
+#: option.c:1979
#, fuzzy
msgid "bad PTR record"
msgstr "rekord SRV salah"
# OK
-#: option.c:1909
-msgid "bad TXT record"
-msgstr "rekord TXT salah"
-
-# OK
-#: option.c:1941
+#: option.c:1999
msgid "TXT record string too long"
msgstr "string rekord TXT terlalu panjang"
# OK
-#: option.c:1980
+#: option.c:2003
+msgid "bad TXT record"
+msgstr "rekord TXT salah"
+
+# OK
+#: option.c:2063
msgid "bad SRV record"
msgstr "rekord SRV salah"
# OK
-#: option.c:1992
+#: option.c:2072
msgid "bad SRV target"
msgstr "target SRV salah"
# OK
-#: option.c:2003
+#: option.c:2080
msgid "invalid port number"
msgstr "nomor port tidak benar"
# OK
-#: option.c:2013
+#: option.c:2087
msgid "invalid priority"
msgstr "prioritas tidak benar"
# OK
-#: option.c:2023
+#: option.c:2094
msgid "invalid weight"
msgstr "weight tidak benar"
-#: option.c:2054
+#: option.c:2130
#, c-format
msgid "files nested too deep in %s"
msgstr ""
# OK
-#: option.c:2062 tftp.c:467
+#: option.c:2138 tftp.c:497
#, c-format
msgid "cannot read %s: %s"
msgstr "tidak bisa membaca %s: %s"
# OK
-#: option.c:2114
+#: option.c:2199
msgid "missing \""
msgstr "kurang \""
# OK
-#: option.c:2161
+#: option.c:2246
msgid "bad option"
msgstr "pilihan salah"
# OK
-#: option.c:2163
+#: option.c:2248
msgid "extraneous parameter"
msgstr "parameter berlebihan"
# OK
-#: option.c:2165
+#: option.c:2250
msgid "missing parameter"
msgstr "parameter kurang"
# OK
-#: option.c:2173
+#: option.c:2258
msgid "error"
msgstr "kesalahan"
# OK
-#: option.c:2179
+#: option.c:2264
#, c-format
msgid "%s at line %d of %%s"
msgstr "%s pada baris %d dari %%s"
# OK
-#: option.c:2252
+#: option.c:2304 option.c:2334
+#, fuzzy, c-format
+msgid "read %s"
+msgstr "membaca %s"
+
+# OK
+#: option.c:2400
#, c-format
msgid "Dnsmasq version %s %s\n"
msgstr "Dnsmasq versi %s %s\n"
# OK
-#: option.c:2253
+#: option.c:2401
#, c-format
msgid ""
"Compile time options %s\n"
@@ -708,13 +779,13 @@ msgstr ""
"\n"
# OK
-#: option.c:2254
+#: option.c:2402
#, c-format
msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
msgstr "Perangkat lunak ini tersedia TANPA JAMINAN SEDIKITPUN.\n"
# OK
-#: option.c:2255
+#: option.c:2403
#, c-format
msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
msgstr ""
@@ -722,175 +793,190 @@ msgstr ""
"membagikannya\n"
# OK
-#: option.c:2256
-#, c-format
-msgid "under the terms of the GNU General Public License, version 2.\n"
+#: option.c:2404
+#, fuzzy, c-format
+msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
msgstr "dengan aturan GNU General Public License, versi 2.\n"
-#: option.c:2267
+#: option.c:2415
msgid "try --help"
msgstr ""
-#: option.c:2269
+#: option.c:2417
msgid "try -w"
msgstr ""
# OK
-#: option.c:2272
+#: option.c:2420
#, fuzzy, c-format
msgid "bad command line options: %s"
msgstr "pilihan baris perintah salah: %s."
# OK
-#: option.c:2313
+#: option.c:2461
#, c-format
msgid "cannot get host-name: %s"
msgstr "tidak bisa mendapatkan host-name: %s"
# OK
-#: option.c:2341
+#: option.c:2489
msgid "only one resolv.conf file allowed in no-poll mode."
msgstr "hanya satu file resolv.conf yang diperbolehkan dalam modus no-poll."
# OK
-#: option.c:2351
+#: option.c:2499
msgid "must have exactly one resolv.conf to read domain from."
msgstr "harus mempunyai tepat satu resolv.conf untuk mendapatkan nama domain."
# OK
-#: option.c:2354 network.c:549
+#: option.c:2502 network.c:640
#, fuzzy, c-format
msgid "failed to read %s: %s"
msgstr "gagal membaca %s: %m"
# OK
-#: option.c:2372
+#: option.c:2520
#, c-format
msgid "no search directive found in %s"
msgstr "tidak ditemukan direktif search di %s"
# OK
-#: forward.c:376
+#: forward.c:381
#, c-format
msgid "nameserver %s refused to do a recursive query"
msgstr "nameserver %s menolak melakukan resolusi rekursif"
+#: forward.c:409
+msgid "possible DNS-rebind attack detected"
+msgstr ""
+
# OK
-#: isc.c:73 dnsmasq.c:723
+#: isc.c:77 dnsmasq.c:747
#, fuzzy, c-format
msgid "failed to access %s: %s"
msgstr "gagal mengakses %s: %m"
# OK
-#: isc.c:89
+#: isc.c:93
#, fuzzy, c-format
msgid "failed to load %s: %s"
msgstr "gagal memuat %S: %m"
# OK
-#: isc.c:93 dnsmasq.c:745
+#: isc.c:97 dnsmasq.c:769
#, c-format
msgid "reading %s"
msgstr "membaca %s"
# OK
-#: isc.c:115
+#: isc.c:119
#, c-format
msgid "bad name in %s"
msgstr "kesalahan nama di %s"
# OK
-#: isc.c:177
+#: isc.c:181
#, c-format
msgid "Ignoring DHCP lease for %s because it has an illegal domain part"
msgstr ""
"Mengabaikan lease DHCP untuk %s sebab terdapat bagian domain yang tidak sah"
# OK
-#: network.c:41
+#: network.c:45
#, fuzzy, c-format
msgid "unknown interface %s in bridge-interface"
msgstr "antarmuka tidak dikenal %s"
# OK
-#: network.c:377 dnsmasq.c:170
+#: network.c:389 dnsmasq.c:180
#, c-format
msgid "failed to create listening socket: %s"
msgstr "gagal membuat socket: %s "
# OK
-#: network.c:384
+#: network.c:396
#, c-format
msgid "failed to set IPV6 options on listening socket: %s"
msgstr "gagal menyetel IPV6 pada socket: %s"
-#: network.c:402
+#: network.c:415
#, c-format
msgid "failed to bind listening socket for %s: %s"
msgstr "gagal mem-bind socket untuk mendengarkan %s: %s"
# OK
-#: network.c:410
+#: network.c:420
#, c-format
msgid "failed to listen on socket: %s"
msgstr "gagal mendengarkan di socket: %s"
# OK
-#: network.c:421
+#: network.c:432
#, fuzzy, c-format
msgid "failed to create TFTP socket: %s"
msgstr "gagal membuat socket: %s "
+#: network.c:549
+#, fuzzy, c-format
+msgid "failed to bind server socket for %s: %s"
+msgstr "gagal mem-bind socket untuk mendengarkan %s: %s"
+
# OK
-#: network.c:493
+#: network.c:582
#, c-format
msgid "ignoring nameserver %s - local interface"
msgstr "mengabaikan nameserver %s - antarmuka lokal"
# OK
-#: network.c:502
+#: network.c:591
#, fuzzy, c-format
msgid "ignoring nameserver %s - cannot make/bind socket: %s"
msgstr "mengabaikan nameserver %s - tak dapat membuat/mem-bind socket: %m"
# OK
-#: network.c:517
+#: network.c:606
msgid "unqualified"
msgstr "tidak memenuhi syarat"
-#: network.c:517
+#: network.c:606
msgid "names"
msgstr ""
-#: network.c:519
+#: network.c:608
msgid "default"
msgstr ""
# OK
-#: network.c:521
+#: network.c:610
msgid "domain"
msgstr "domain"
# OK
-#: network.c:524
+#: network.c:613
#, c-format
msgid "using local addresses only for %s %s"
msgstr "menggunakan alamat lokal saja untuk %s %s"
# OK
-#: network.c:526
+#: network.c:615
#, c-format
msgid "using nameserver %s#%d for %s %s"
msgstr "menggunakan nameserver %s#%d untuk %s %s"
# OK
-#: network.c:529
+#: network.c:618
+#, fuzzy, c-format
+msgid "using nameserver %s#%d(via %s)"
+msgstr "menggunakan nameserver %s#%d"
+
+# OK
+#: network.c:620
#, c-format
msgid "using nameserver %s#%d"
msgstr "menggunakan nameserver %s#%d"
# OK
-#: dnsmasq.c:106
+#: dnsmasq.c:110
msgid ""
"ISC dhcpd integration not available: set HAVE_ISC_READER in src/config.h"
msgstr ""
@@ -898,571 +984,595 @@ msgstr ""
"config.h"
# OK
-#: dnsmasq.c:128
+#: dnsmasq.c:132
#, fuzzy
msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
msgstr "DBus tidak tersedia: setel HAVE_DBUS dalam src/config.h"
+#: dnsmasq.c:137
+msgid "asychronous logging is not available under Solaris"
+msgstr ""
+
# OK
-#: dnsmasq.c:142
+#: dnsmasq.c:151
msgid "must set exactly one interface on broken systems without IP_RECVIF"
msgstr ""
"harus menyetel satu antarmuka saja pada sistem yang tidak benar dengan "
"IP_RECVIF"
# OK
-#: dnsmasq.c:152
+#: dnsmasq.c:161
#, c-format
msgid "failed to find list of interfaces: %s"
msgstr "gagal mendapatkan daftar antarmuka: %s"
# OK
-#: dnsmasq.c:160
+#: dnsmasq.c:169
#, c-format
msgid "unknown interface %s"
msgstr "antarmuka tidak dikenal %s"
# OK
-#: dnsmasq.c:166
+#: dnsmasq.c:175
#, c-format
msgid "no interface with address %s"
msgstr "tidak ada antarmuka dengan alamat %s"
# OK
-#: dnsmasq.c:181 dnsmasq.c:538
+#: dnsmasq.c:192 dnsmasq.c:561
#, c-format
msgid "DBus error: %s"
msgstr "DBus error: %s"
# OK
-#: dnsmasq.c:184
+#: dnsmasq.c:195
msgid "DBus not available: set HAVE_DBUS in src/config.h"
msgstr "DBus tidak tersedia: setel HAVE_DBUS dalam src/config.h"
# OK
-#: dnsmasq.c:216
+#: dnsmasq.c:204
#, fuzzy, c-format
msgid "cannot create pipe: %s"
msgstr "tidak bisa membaca %s: %s"
-#: dnsmasq.c:237
+#: dnsmasq.c:225
#, c-format
msgid "cannot fork into background: %s"
msgstr ""
+#: dnsmasq.c:239
+#, c-format
+msgid "cannot chdir to filesystem root: %s"
+msgstr ""
+
+# OK
+#: dnsmasq.c:349
+#, fuzzy, c-format
+msgid "started, version %s DNS disabled"
+msgstr "dimulai, cache versi %s di disable"
+
# OK
-#: dnsmasq.c:335
+#: dnsmasq.c:351
#, c-format
msgid "started, version %s cachesize %d"
msgstr "dimulai, versi %s ukuran cache %d"
# OK
-#: dnsmasq.c:337
+#: dnsmasq.c:353
#, c-format
msgid "started, version %s cache disabled"
msgstr "dimulai, cache versi %s di disable"
# OK
-#: dnsmasq.c:339
+#: dnsmasq.c:355
#, c-format
msgid "compile time options: %s"
msgstr "pilihan-pilihan saat kompilasi: %s"
# OK
-#: dnsmasq.c:345
+#: dnsmasq.c:361
msgid "DBus support enabled: connected to system bus"
msgstr "dukungan DBus dimungkinkan: terkoneksi pada bus sistem"
# OK
-#: dnsmasq.c:347
+#: dnsmasq.c:363
msgid "DBus support enabled: bus connection pending"
msgstr "dukungan DBus dimungkinkan: koneksi bus ditunda"
# OK
-#: dnsmasq.c:352
+#: dnsmasq.c:368
msgid "setting --bind-interfaces option because of OS limitations"
msgstr "setelan opsi --bind-interfaces disebabkan keterbatasan OS"
# OK
-#: dnsmasq.c:357
+#: dnsmasq.c:373
#, c-format
msgid "warning: interface %s does not currently exist"
msgstr "peringatan: antarmuka %s tidak ada"
-#: dnsmasq.c:362
+#: dnsmasq.c:378
msgid "warning: ignoring resolv-file flag because no-resolv is set"
msgstr ""
# OK
-#: dnsmasq.c:365
+#: dnsmasq.c:381
#, fuzzy
msgid "warning: no upstream servers configured"
msgstr "menyetel server-server di atas dengan DBus"
-#: dnsmasq.c:369
+#: dnsmasq.c:385
#, c-format
msgid "asynchronous logging enabled, queue limit is %d messages"
msgstr ""
# OK
-#: dnsmasq.c:381
+#: dnsmasq.c:397
#, c-format
msgid "DHCP, static leases only on %.0s%s, lease time %s"
msgstr "DHCP, lease static pada %.0s%s, waktu lease %s"
# OK
-#: dnsmasq.c:382
+#: dnsmasq.c:398
#, c-format
msgid "DHCP, IP range %s -- %s, lease time %s"
msgstr "DHCP, jangkaun IP %s -- %s, waktu lease %s"
-#: dnsmasq.c:396
+#: dnsmasq.c:412
msgid "root is "
msgstr ""
# OK
-#: dnsmasq.c:396
+#: dnsmasq.c:412
#, fuzzy
msgid "enabled"
msgstr "di disable"
-#: dnsmasq.c:398
+#: dnsmasq.c:414
msgid "secure mode"
msgstr ""
-#: dnsmasq.c:418
+#: dnsmasq.c:440
#, c-format
msgid "restricting maximum simultaneous TFTP transfers to %d"
msgstr ""
-#: dnsmasq.c:427
+#: dnsmasq.c:449
#, c-format
msgid "warning: setting capabilities failed: %s"
msgstr ""
# OK
-#: dnsmasq.c:429
+#: dnsmasq.c:451
msgid "running as root"
msgstr "berjalan menggunakan root"
# OK
-#: dnsmasq.c:540
+#: dnsmasq.c:563
msgid "connected to system DBus"
msgstr "terhubung ke sistem DBus"
-#: dnsmasq.c:659
+#: dnsmasq.c:683
#, c-format
msgid "child process killed by signal %d"
msgstr ""
-#: dnsmasq.c:663
+#: dnsmasq.c:687
#, c-format
msgid "child process exited with status %d"
msgstr ""
# OK
-#: dnsmasq.c:667
+#: dnsmasq.c:691
#, fuzzy, c-format
msgid "failed to execute %s: %s"
msgstr "gagal mengakses %s: %m"
# OK
-#: dnsmasq.c:671
+#: dnsmasq.c:695
#, fuzzy, c-format
msgid "failed to create helper: %s"
msgstr "gagal membaca %s: %m"
-#: dnsmasq.c:705
+#: dnsmasq.c:729
msgid "exiting on receipt of SIGTERM"
msgstr "keluar karena menerima SIGTERM"
# OK
-#: dnsmasq.c:756
+#: dnsmasq.c:780
#, fuzzy, c-format
msgid "no servers found in %s, will retry"
msgstr "tidak ditemukan direktif search di %s"
# OK
-#: dhcp.c:32
+#: dhcp.c:38
#, c-format
msgid "cannot create DHCP socket : %s"
msgstr "tidak bisa membuat socket DHCP: %s"
# OK
-#: dhcp.c:41
+#: dhcp.c:50
#, c-format
msgid "failed to set options on DHCP socket: %s"
msgstr "gagal menyetel opsi pada socket DHCP: %s"
# OK
-#: dhcp.c:59
+#: dhcp.c:68
#, fuzzy, c-format
msgid "failed to set SO_REUSE{ADDR|PORT} on DHCP socket: %s"
msgstr "gagal menyetel SO_REUSEADDR pada socket DHCP: %s"
# OK
-#: dhcp.c:72
+#: dhcp.c:81
#, c-format
msgid "failed to bind DHCP server socket: %s"
msgstr "gagal mem-bind socket server DHCP: %s"
# OK
-#: dhcp.c:85
+#: dhcp.c:94
#, c-format
msgid "cannot create ICMP raw socket: %s."
msgstr "tidak dapat membuat socket ICMP raw: %s"
-# OK
-#: dhcp.c:100
-#, c-format
-msgid "duplicate IP address %s in dhcp-config directive."
-msgstr "alamat IP kembar %s dalam direktif dhcp-config"
-
-# OK
-#: dhcp.c:103
-#, fuzzy, c-format
-msgid "illegal domain %s in dhcp-config directive."
-msgstr "alamat IP kembar %s dalam direktif dhcp-config"
-
-#: dhcp.c:221
+#: dhcp.c:223
#, c-format
msgid "DHCP packet received on %s which has no address"
msgstr ""
# OK
-#: dhcp.c:352
+#: dhcp.c:382
#, c-format
msgid "DHCP range %s -- %s is not consistent with netmask %s"
msgstr "jangkauan DHCP %s -- %s tidak konsisten dengan netmask %s"
# OK
-#: dhcp.c:669
+#: dhcp.c:709
#, fuzzy, c-format
msgid "failed to read %s:%s"
msgstr "gagal membaca %s: %m"
# OK
-#: dhcp.c:704
+#: dhcp.c:744
#, fuzzy, c-format
msgid "bad line at %s line %d"
msgstr "kesalahan nama pada %s baris %d"
# OK
-#: dhcp.c:826
+#: dhcp.c:847
+#, c-format
+msgid "duplicate IP address %s in dhcp-config directive."
+msgstr "alamat IP kembar %s dalam direktif dhcp-config"
+
+# OK
+#: dhcp.c:850
#, fuzzy, c-format
msgid "duplicate IP address %s in %s."
msgstr "alamat IP kembar %s dalam direktif dhcp-config"
-#: dhcp.c:832
+# OK
+#: dhcp.c:858
+#, fuzzy, c-format
+msgid "illegal domain %s in dhcp-config directive."
+msgstr "alamat IP kembar %s dalam direktif dhcp-config"
+
+#: dhcp.c:860
#, c-format
msgid "illegal domain %s in %s."
msgstr ""
-# OK
-#: dhcp.c:839
-#, fuzzy, c-format
-msgid "read %s - %d hosts"
-msgstr "membaca %s - %d alamat"
+#: dhcp.c:899
+#, c-format
+msgid "%s has more then one address in hostsfile, using %s for DHCP"
+msgstr ""
# OK
-#: dhcp.c:866
+#: dhcp.c:904
#, c-format
msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr "alamat IP kembar %s (%s) dalam direktif dhcp-config"
# OK
-#: lease.c:54
+#: lease.c:58
#, fuzzy, c-format
msgid "cannot open or create lease file %s: %s"
msgstr "tidak dapat membuka atau membuat file lease: %s"
# OK
-#: lease.c:80
+#: lease.c:84
msgid "too many stored leases"
msgstr "terlalu banyak lease yang disimpan"
# OK
-#: lease.c:121
+#: lease.c:125
#, fuzzy, c-format
msgid "cannot run lease-init script %s: %s"
msgstr "tidak bisa membaca %s: %s"
-#: lease.c:127
+#: lease.c:131
#, c-format
msgid "lease-init script returned exit code %s"
msgstr ""
# OK
-#: lease.c:234
+#: lease.c:238
#, fuzzy, c-format
msgid "failed to write %s: %s (retry in %us)"
msgstr "gagal membaca %s: %m"
# OK
-#: rfc2131.c:300
+#: rfc2131.c:303
#, c-format
msgid "no address range available for DHCP request %s %s"
msgstr "tidak ada alamat yang bisa dipakai untuk permintaan DHCP %s %s"
# OK
-#: rfc2131.c:301
+#: rfc2131.c:304
msgid "with subnet selector"
msgstr "dengan pemilih subnet"
# OK
-#: rfc2131.c:301
+#: rfc2131.c:304
msgid "via"
msgstr "lewat"
-#: rfc2131.c:312
+#: rfc2131.c:315
#, c-format
msgid "DHCP packet: transaction-id is %u"
msgstr ""
-#: rfc2131.c:317
+#: rfc2131.c:320
#, c-format
msgid "Available DHCP subnet: %s/%s"
msgstr ""
-#: rfc2131.c:319
+#: rfc2131.c:322
#, c-format
msgid "Available DHCP range: %s -- %s"
msgstr ""
# OK
-#: rfc2131.c:347 rfc2131.c:378
+#: rfc2131.c:350 rfc2131.c:381
msgid "disabled"
msgstr "di disable"
# OK
-#: rfc2131.c:390 rfc2131.c:852
+#: rfc2131.c:393 rfc2131.c:873
msgid "address in use"
msgstr "alamat telah digunakan"
# OK
-#: rfc2131.c:393
+#: rfc2131.c:396
msgid "no address configured"
msgstr "tak ada alamat yang disetel"
# OK
-#: rfc2131.c:406 rfc2131.c:720
+#: rfc2131.c:409 rfc2131.c:736
msgid "no address available"
msgstr "tak ada alamat yang tersedia"
-#: rfc2131.c:416
-#, c-format
-msgid "Limit of %d leases exceeded."
-msgstr ""
-
# OK
-#: rfc2131.c:417 rfc2131.c:862
+#: rfc2131.c:418 rfc2131.c:883
msgid "no leases left"
msgstr "tak ada lease yang tersisa"
# OK
-#: rfc2131.c:421 rfc2131.c:826
+#: rfc2131.c:421 rfc2131.c:847
msgid "wrong network"
msgstr "jaringan yang salah"
-#: rfc2131.c:519
+#: rfc2131.c:520
#, c-format
msgid "Ignoring domain %s for DHCP host name %s"
msgstr ""
-#: rfc2131.c:598
+#: rfc2131.c:614
#, c-format
msgid "Vendor class: %s"
msgstr ""
-#: rfc2131.c:600
+#: rfc2131.c:616
#, c-format
msgid "User class: %s"
msgstr ""
# OK
-#: rfc2131.c:641
+#: rfc2131.c:657
#, fuzzy, c-format
msgid "disabling DHCP static address %s for %s"
msgstr "men-disable alamat statik DHCP %s"
# OK
-#: rfc2131.c:662
+#: rfc2131.c:678
msgid "unknown lease"
msgstr "lease tidak diketahui"
# OK
-#: rfc2131.c:671 rfc2131.c:970
+#: rfc2131.c:687 rfc2131.c:992
msgid "ignored"
msgstr "diabaikan"
-#: rfc2131.c:691
+#: rfc2131.c:707
#, c-format
msgid "not using configured address %s because it is leased to %s"
msgstr ""
-#: rfc2131.c:701
+#: rfc2131.c:717
#, c-format
msgid ""
"not using configured address %s because it is in use by the server or relay"
msgstr ""
-#: rfc2131.c:704
+#: rfc2131.c:720
#, c-format
msgid "not using configured address %s because it was previously declined"
msgstr ""
-#: rfc2131.c:718 rfc2131.c:855
+#: rfc2131.c:734 rfc2131.c:876
msgid "no unique-id"
msgstr ""
# OK
-#: rfc2131.c:789
+#: rfc2131.c:806
msgid "wrong address"
msgstr "alamat salah"
# OK
-#: rfc2131.c:802
+#: rfc2131.c:823
msgid "lease not found"
msgstr "lease tak ditemukan"
# OK
-#: rfc2131.c:834
+#: rfc2131.c:855
msgid "address not available"
msgstr "alamat tak tersedia"
# OK
-#: rfc2131.c:845
+#: rfc2131.c:866
msgid "static lease available"
msgstr "lease statik tak tersedia"
# OK
-#: rfc2131.c:849
+#: rfc2131.c:870
msgid "address reserved"
msgstr "alamat telah dipesan"
-#: rfc2131.c:1252
+#: rfc2131.c:1265
#, c-format
msgid "tags: %s"
msgstr ""
-#: rfc2131.c:1334
+#: rfc2131.c:1352
#, c-format
msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
msgstr ""
# OK
-#: rfc2131.c:1488
+#: rfc2131.c:1507
#, fuzzy, c-format
msgid "requested options: %s"
msgstr "pilihan-pilihan saat kompilasi: %s"
-#: rfc2131.c:1519
-#, c-format
-msgid "server name: %s"
-msgstr ""
+# OK
+#: rfc2131.c:1556
+#, fuzzy, c-format
+msgid "next server: %s"
+msgstr "DBus error: %s"
-#: rfc2131.c:1531
+#: rfc2131.c:1580
#, c-format
msgid "bootfile name: %s"
msgstr ""
-# OK
-#: rfc2131.c:1540
-#, fuzzy, c-format
-msgid "next server: %s"
-msgstr "DBus error: %s"
+#: rfc2131.c:1583
+#, c-format
+msgid "server name: %s"
+msgstr ""
# OK
-#: netlink.c:59
+#: netlink.c:63
#, fuzzy, c-format
msgid "cannot create netlink socket: %s"
msgstr "tidak bisa mem-bind netlink socket: %s"
# OK
-#: netlink.c:226
+#: netlink.c:230
#, fuzzy, c-format
msgid "netlink returns error: %s"
msgstr "DBus error: %s"
# OK
-#: dbus.c:111
+#: dbus.c:115
msgid "attempt to set an IPv6 server address via DBus - no IPv6 support"
msgstr ""
"mencoba menyetel sebuah alamat IPv6 server lewat DBus - tidak ada dukungan "
"untuk IPv6"
# OK
-#: dbus.c:237
+#: dbus.c:241
msgid "setting upstream servers from DBus"
msgstr "menyetel server-server di atas dengan DBus"
# OK
-#: dbus.c:275
+#: dbus.c:279
msgid "could not register a DBus message handler"
msgstr "tidak bisa mendaftar sebuah DBus message handler"
# OK
-#: bpf.c:43
+#: bpf.c:146
#, c-format
msgid "cannot create DHCP BPF socket: %s"
msgstr "tidak dapat membuat socket DHCP BPF: %s"
# OK
-#: bpf.c:71
+#: bpf.c:174
#, fuzzy, c-format
msgid "DHCP request for unsupported hardware type (%d) received on %s"
msgstr ""
"permintaan DHCP untuk tipe hardware yang tidak didukung (%d) diterima pada %s"
-#: tftp.c:158
+#: tftp.c:173
+msgid "unable to get free port for TFTP"
+msgstr ""
+
+#: tftp.c:188
#, c-format
msgid "unsupported request from %s"
msgstr ""
-#: tftp.c:236
+#: tftp.c:266
#, c-format
msgid "TFTP sent %s to %s"
msgstr ""
# OK
-#: tftp.c:259
+#: tftp.c:289
#, fuzzy, c-format
msgid "file %s not found"
msgstr "lease tak ditemukan"
-#: tftp.c:369
+#: tftp.c:399
#, c-format
msgid "TFTP error %d %s received from %s"
msgstr ""
# OK
-#: tftp.c:400
+#: tftp.c:430
#, fuzzy, c-format
msgid "TFTP failed sending %s to %s"
msgstr "gagal membaca %s: %m"
# OK
-#: log.c:69
+#: log.c:73
#, fuzzy, c-format
msgid "cannot open %s: %s"
msgstr "tidak bisa membuka %s:%s"
-#: log.c:146
+# OK
+#: log.c:89
+#, fuzzy, c-format
+msgid "warning: failed to change owner of %s: %s"
+msgstr "gagal memuat nama-nama dari %s: %m"
+
+#: log.c:161
#, c-format
msgid "overflow: %d log entries lost"
msgstr ""
-#: log.c:223
+#: log.c:238
#, c-format
msgid "log failed: %s"
msgstr ""
# OK
-#: log.c:378
+#: log.c:394
msgid "FAILED to start up"
msgstr "GAGAL untuk memulai"
# OK
+#, fuzzy
+#~ msgid "read %s - %d hosts"
+#~ msgstr "membaca %s - %d alamat"
+
+# OK
#~ msgid "bad dhcp-host"
#~ msgstr "dhcp-host salah"
diff --git a/po/it.po b/po/it.po
index 31d24a7..c012d3e 100644
--- a/po/it.po
+++ b/po/it.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dnsmasq 2.32\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-08-29 11:09+0100\n"
+"POT-Creation-Date: 2008-02-12 11:04+0000\n"
"PO-Revision-Date: 2006-05-22 11:09+0100\n"
"Last-Translator: Simon Kelley <simon@thekelleys.org.uk>\n"
"Language-Team: Italian <tp@lists.linux.it>\n"
@@ -15,1213 +15,1307 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: cache.c:671
+#: cache.c:680
#, c-format
msgid "failed to load names from %s: %s"
msgstr ""
-#: cache.c:705 dhcp.c:717
+#: cache.c:714 dhcp.c:757
#, c-format
msgid "bad address at %s line %d"
msgstr ""
-#: cache.c:752 dhcp.c:731
+#: cache.c:761 dhcp.c:771
#, c-format
msgid "bad name at %s line %d"
msgstr ""
-#: cache.c:759 dhcp.c:785
+#: cache.c:768 dhcp.c:825
#, c-format
msgid "read %s - %d addresses"
msgstr ""
-#: cache.c:797
+#: cache.c:806
msgid "cleared cache"
msgstr ""
-#: cache.c:844
+#: cache.c:855
#, 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:884
+#: cache.c:907
#, c-format
-msgid ""
-"time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache "
-"entries."
+msgid "time %lu"
+msgstr ""
+
+#: cache.c:908
+#, c-format
+msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
+msgstr ""
+
+#: cache.c:910
+#, c-format
+msgid "queries forwarded %u, queries answered locally %u"
+msgstr ""
+
+#: cache.c:933
+#, c-format
+msgid "server %s#%d: queries sent %u, retried or failed %u"
msgstr ""
-#: util.c:157 option.c:758
+#: util.c:160
msgid "could not get memory"
msgstr ""
-#: util.c:167
+#: util.c:170
#, c-format
msgid "failed to allocate %d bytes"
msgstr ""
-#: util.c:272
+#: util.c:275
#, c-format
msgid "infinite"
msgstr ""
-#: option.c:188
+#: option.c:244
msgid "Specify local address(es) to listen on."
msgstr ""
-#: option.c:189
+#: option.c:245
msgid "Return ipaddr for all hosts in specified domains."
msgstr ""
-#: option.c:190
+#: option.c:246
msgid "Fake reverse lookups for RFC1918 private address ranges."
msgstr ""
-#: option.c:191
+#: option.c:247
msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
msgstr ""
-#: option.c:192
+#: option.c:248
#, c-format
msgid "Specify the size of the cache in entries (defaults to %s)."
msgstr ""
-#: option.c:193
+#: option.c:249
#, c-format
msgid "Specify configuration file (defaults to %s)."
msgstr ""
-#: option.c:194
+#: option.c:250
msgid "Do NOT fork into the background: run in debug mode."
msgstr ""
-#: option.c:195
+#: option.c:251
msgid "Do NOT forward queries with no domain part."
msgstr ""
-#: option.c:196
+#: option.c:252
msgid "Return self-pointing MX records for local hosts."
msgstr ""
-#: option.c:197
+#: option.c:253
msgid "Expand simple names in /etc/hosts with domain-suffix."
msgstr ""
-#: option.c:198
+#: option.c:254
msgid "Don't forward spurious DNS requests from Windows hosts."
msgstr ""
-#: option.c:199
+#: option.c:255
msgid "Enable DHCP in the range given with lease duration."
msgstr ""
-#: option.c:200
+#: option.c:256
#, c-format
msgid "Change to this group after startup (defaults to %s)."
msgstr ""
-#: option.c:201
+#: option.c:257
msgid "Set address or hostname for a specified machine."
msgstr ""
-#: option.c:202
+#: option.c:258
msgid "Read DHCP host specs from file"
msgstr ""
-#: option.c:203
+#: option.c:259
+msgid "Read DHCP option specs from file"
+msgstr ""
+
+#: option.c:260
#, c-format
msgid "Do NOT load %s file."
msgstr ""
-#: option.c:204
+#: option.c:261
#, c-format
msgid "Specify a hosts file to be read in addition to %s."
msgstr ""
-#: option.c:205
+#: option.c:262
msgid "Specify interface(s) to listen on."
msgstr ""
-#: option.c:206
+#: option.c:263
msgid "Specify interface(s) NOT to listen on."
msgstr ""
-#: option.c:207
+#: option.c:264
msgid "Map DHCP user class to tag."
msgstr ""
-#: option.c:208
+#: option.c:265
msgid "Map RFC3046 circuit-id to tag."
msgstr ""
-#: option.c:209
+#: option.c:266
msgid "Map RFC3046 remote-id to tag."
msgstr ""
-#: option.c:210
+#: option.c:267
msgid "Map RFC3993 subscriber-id to tag."
msgstr ""
-#: option.c:211
+#: option.c:268
msgid "Don't do DHCP for hosts with tag set."
msgstr ""
-#: option.c:212
+#: option.c:269
+msgid "Force broadcast replies for hosts with tag set."
+msgstr ""
+
+#: option.c:270
msgid "Do NOT fork into the background, do NOT run in debug mode."
msgstr ""
-#: option.c:213
+#: option.c:271
msgid "Assume we are the only DHCP server on the local network."
msgstr ""
-#: option.c:214
+#: option.c:272
#, c-format
msgid "Specify where to store DHCP leases (defaults to %s)."
msgstr ""
-#: option.c:215
+#: option.c:273
msgid "Return MX records for local hosts."
msgstr ""
-#: option.c:216
+#: option.c:274
msgid "Specify an MX record."
msgstr ""
-#: option.c:217
+#: option.c:275
msgid "Specify BOOTP options to DHCP server."
msgstr ""
-#: option.c:218
+#: option.c:276
#, c-format
msgid "Do NOT poll %s file, reload only on SIGHUP."
msgstr ""
-#: option.c:219
+#: option.c:277
msgid "Do NOT cache failed search results."
msgstr ""
-#: option.c:220
+#: option.c:278
#, c-format
msgid "Use nameservers strictly in the order given in %s."
msgstr ""
-#: option.c:221
+#: option.c:279
msgid "Specify options to be sent to DHCP clients."
msgstr ""
-#: option.c:222
+#: option.c:280
msgid "DHCP option sent even if the client does not request it."
msgstr ""
-#: option.c:223
+#: option.c:281
msgid "Specify port to listen for DNS requests on (defaults to 53)."
msgstr ""
-#: option.c:224
+#: option.c:282
#, c-format
msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
msgstr ""
-#: option.c:225
-msgid "Log queries."
+#: option.c:283
+msgid "Log DNS queries."
msgstr ""
-#: option.c:226
-msgid "Force the originating port for upstream queries."
+#: option.c:284
+msgid "Force the originating port for upstream DNS queries."
msgstr ""
-#: option.c:227
+#: option.c:285
msgid "Do NOT read resolv.conf."
msgstr ""
-#: option.c:228
+#: option.c:286
#, c-format
msgid "Specify path to resolv.conf (defaults to %s)."
msgstr ""
-#: option.c:229
+#: option.c:287
msgid "Specify address(es) of upstream servers with optional domains."
msgstr ""
-#: option.c:230
+#: option.c:288
msgid "Never forward queries to specified domains."
msgstr ""
-#: option.c:231
+#: option.c:289
msgid "Specify the domain to be assigned in DHCP leases."
msgstr ""
-#: option.c:232
+#: option.c:290
msgid "Specify default target in an MX record."
msgstr ""
-#: option.c:233
+#: option.c:291
msgid "Specify time-to-live in seconds for replies from /etc/hosts."
msgstr ""
-#: option.c:234
+#: option.c:292
+msgid "Specify time-to-live in seconds for negative caching."
+msgstr ""
+
+#: option.c:293
#, c-format
msgid "Change to this user after startup. (defaults to %s)."
msgstr ""
-#: option.c:235
+#: option.c:294
msgid "Map DHCP vendor class to tag."
msgstr ""
-#: option.c:236
+#: option.c:295
msgid "Display dnsmasq version and copyright information."
msgstr ""
-#: option.c:237
+#: option.c:296
msgid "Translate IPv4 addresses from upstream servers."
msgstr ""
-#: option.c:238
+#: option.c:297
msgid "Specify a SRV record."
msgstr ""
-#: option.c:239
+#: option.c:298
msgid "Display this message. Use --help dhcp for known DHCP options."
msgstr ""
-#: option.c:240
+#: option.c:299
#, c-format
msgid "Specify path of PID file (defaults to %s)."
msgstr ""
-#: option.c:241
+#: option.c:300
#, c-format
msgid "Specify maximum number of DHCP leases (defaults to %s)."
msgstr ""
-#: option.c:242
+#: option.c:301
msgid "Answer DNS queries based on the interface a query was sent to."
msgstr ""
-#: option.c:243
+#: option.c:302
msgid "Specify TXT DNS record."
msgstr ""
-#: option.c:244
+#: option.c:303
msgid "Specify PTR DNS record."
msgstr ""
-#: option.c:245
+#: option.c:304
msgid "Give DNS name to IPv4 address of interface."
msgstr ""
-#: option.c:246
+#: option.c:305
msgid "Bind only to interfaces in use."
msgstr ""
-#: option.c:247
+#: option.c:306
#, c-format
msgid "Read DHCP static host information from %s."
msgstr ""
-#: option.c:248
+#: option.c:307
msgid "Enable the DBus interface for setting upstream servers, etc."
msgstr ""
-#: option.c:249
+#: option.c:308
msgid "Do not provide DHCP on this interface, only provide DNS."
msgstr ""
-#: option.c:250
+#: option.c:309
msgid "Enable dynamic address allocation for bootp."
msgstr ""
-#: option.c:251
+#: option.c:310
msgid "Map MAC address (with wildcards) to option set."
msgstr ""
-#: option.c:253
+#: option.c:312
msgid "Treat DHCP requests on aliases as arriving from interface."
msgstr ""
-#: option.c:255
+#: option.c:314
msgid "Disable ICMP echo address checking in the DHCP server."
msgstr ""
-#: option.c:256
+#: option.c:315
msgid "Script to run on DHCP lease creation and destruction."
msgstr ""
-#: option.c:257
+#: option.c:316
msgid "Read configuration from all the files in this directory."
msgstr ""
-#: option.c:258
+#: option.c:317
msgid "Log to this syslog facility or file. (defaults to DAEMON)"
msgstr ""
-#: option.c:259
+#: option.c:318
msgid "Read leases at startup, but never write the lease file."
msgstr ""
-#: option.c:260
+#: option.c:319
#, c-format
msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
msgstr ""
-#: option.c:261
+#: option.c:320
#, c-format
msgid "Clear DNS cache when reloading %s."
msgstr ""
-#: option.c:262
+#: option.c:321
msgid "Ignore hostnames provided by DHCP clients."
msgstr ""
-#: option.c:263
+#: option.c:322
+msgid "Do NOT reuse filename and server fields for extra DHCP options."
+msgstr ""
+
+#: option.c:323
msgid "Enable integrated read-only TFTP server."
msgstr ""
-#: option.c:264
+#: option.c:324
msgid "Export files by TFTP only from the specified subtree."
msgstr ""
-#: option.c:265
+#: option.c:325
msgid "Add client IP address to tftp-root."
msgstr ""
-#: option.c:266
+#: option.c:326
msgid "Allow access only to files owned by the user running dnsmasq."
msgstr ""
-#: option.c:267
+#: option.c:327
#, c-format
msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
msgstr ""
-#: option.c:268
+#: option.c:328
msgid "Disable the TFTP blocksize extension."
msgstr ""
-#: option.c:269
+#: option.c:329
+msgid "Ephemeral port range for use by TFTP transfers."
+msgstr ""
+
+#: option.c:330
msgid "Extra logging for DHCP."
msgstr ""
-#: option.c:270
+#: option.c:331
msgid "Enable async. logging; optionally set queue length."
msgstr ""
-#: option.c:501
+#: option.c:332
+msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
+msgstr ""
+
+#: option.c:333
+msgid "Always perform DNS queries to all servers."
+msgstr ""
+
+#: option.c:334
+msgid "Set tag if client includes option in request."
+msgstr ""
+
+#: option.c:585
#, c-format
msgid ""
"Usage: dnsmasq [options]\n"
"\n"
msgstr ""
-#: option.c:503
+#: option.c:587
#, c-format
msgid "Use short options only on the command line.\n"
msgstr ""
-#: option.c:505
+#: option.c:589
#, c-format
msgid "Valid options are :\n"
msgstr ""
-#: option.c:526
+#: option.c:610
#, c-format
msgid "Known DHCP options:\n"
msgstr ""
-#: option.c:599
+#: option.c:683
msgid "bad dhcp-option"
msgstr ""
-#: option.c:655
+#: option.c:739
msgid "bad IP address"
msgstr ""
-#: option.c:753
+#: option.c:837
msgid "bad domain in dhcp-option"
msgstr ""
-#: option.c:809
+#: option.c:895
msgid "dhcp-option too long"
msgstr ""
-#: option.c:853
+#: option.c:942
#, c-format
msgid "cannot access directory %s: %s"
msgstr ""
-#: option.c:872 tftp.c:313
+#: option.c:961 tftp.c:343
#, c-format
msgid "cannot access %s: %s"
msgstr ""
-#: option.c:913
+#: option.c:998
msgid "only one dhcp-hostsfile allowed"
msgstr ""
-#: option.c:962
+#: option.c:1005
+msgid "only one dhcp-optsfile allowed"
+msgstr ""
+
+#: option.c:1049
msgid "bad MX preference"
msgstr ""
-#: option.c:971
+#: option.c:1053
msgid "bad MX name"
msgstr ""
-#: option.c:989
+#: option.c:1067
msgid "bad MX target"
msgstr ""
-#: option.c:1001
+#: option.c:1078
msgid "cannot run scripts under uClinux"
msgstr ""
-#: option.c:1196 option.c:1207
+#: option.c:1265 option.c:1273
msgid "bad port"
msgstr ""
-#: option.c:1349
+#: option.c:1293 option.c:1318
+msgid "interface binding not supported"
+msgstr ""
+
+#: option.c:1427
+msgid "bad port range"
+msgstr ""
+
+#: option.c:1444
msgid "bad bridge-interface"
msgstr ""
-#: option.c:1391
+#: option.c:1485
msgid "bad dhcp-range"
msgstr ""
-#: option.c:1419
+#: option.c:1511
msgid "only one netid tag allowed"
msgstr ""
-#: option.c:1461
+#: option.c:1551
msgid "inconsistent DHCP range"
msgstr ""
-#: option.c:1637
+#: option.c:1719
msgid "bad DHCP host name"
msgstr ""
-#: option.c:1861
+#: option.c:1959
msgid "bad interface name"
msgstr ""
-#: option.c:1885
+#: option.c:1979
msgid "bad PTR record"
msgstr ""
-#: option.c:1909
-msgid "bad TXT record"
+#: option.c:1999
+msgid "TXT record string too long"
msgstr ""
-#: option.c:1941
-msgid "TXT record string too long"
+#: option.c:2003
+msgid "bad TXT record"
msgstr ""
-#: option.c:1980
+#: option.c:2063
msgid "bad SRV record"
msgstr ""
-#: option.c:1992
+#: option.c:2072
msgid "bad SRV target"
msgstr ""
-#: option.c:2003
+#: option.c:2080
msgid "invalid port number"
msgstr ""
-#: option.c:2013
+#: option.c:2087
msgid "invalid priority"
msgstr ""
-#: option.c:2023
+#: option.c:2094
msgid "invalid weight"
msgstr ""
-#: option.c:2054
+#: option.c:2130
#, c-format
msgid "files nested too deep in %s"
msgstr ""
-#: option.c:2062 tftp.c:467
+#: option.c:2138 tftp.c:497
#, c-format
msgid "cannot read %s: %s"
msgstr ""
-#: option.c:2114
+#: option.c:2199
msgid "missing \""
msgstr ""
-#: option.c:2161
+#: option.c:2246
msgid "bad option"
msgstr ""
-#: option.c:2163
+#: option.c:2248
msgid "extraneous parameter"
msgstr ""
-#: option.c:2165
+#: option.c:2250
msgid "missing parameter"
msgstr ""
-#: option.c:2173
+#: option.c:2258
msgid "error"
msgstr ""
-#: option.c:2179
+#: option.c:2264
#, c-format
msgid "%s at line %d of %%s"
msgstr ""
-#: option.c:2252
+#: option.c:2304 option.c:2334
+#, c-format
+msgid "read %s"
+msgstr ""
+
+#: option.c:2400
#, c-format
msgid "Dnsmasq version %s %s\n"
msgstr ""
-#: option.c:2253
+#: option.c:2401
#, c-format
msgid ""
"Compile time options %s\n"
"\n"
msgstr ""
-#: option.c:2254
+#: option.c:2402
#, c-format
msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
msgstr ""
-#: option.c:2255
+#: option.c:2403
#, c-format
msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
msgstr ""
-#: option.c:2256
+#: option.c:2404
#, c-format
-msgid "under the terms of the GNU General Public License, version 2.\n"
+msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
msgstr ""
-#: option.c:2267
+#: option.c:2415
msgid "try --help"
msgstr ""
-#: option.c:2269
+#: option.c:2417
msgid "try -w"
msgstr ""
-#: option.c:2272
+#: option.c:2420
#, c-format
msgid "bad command line options: %s"
msgstr ""
-#: option.c:2313
+#: option.c:2461
#, c-format
msgid "cannot get host-name: %s"
msgstr ""
-#: option.c:2341
+#: option.c:2489
msgid "only one resolv.conf file allowed in no-poll mode."
msgstr ""
-#: option.c:2351
+#: option.c:2499
msgid "must have exactly one resolv.conf to read domain from."
msgstr ""
-#: option.c:2354 network.c:549
+#: option.c:2502 network.c:640
#, c-format
msgid "failed to read %s: %s"
msgstr ""
-#: option.c:2372
+#: option.c:2520
#, c-format
msgid "no search directive found in %s"
msgstr ""
-#: forward.c:376
+#: forward.c:381
#, c-format
msgid "nameserver %s refused to do a recursive query"
msgstr ""
-#: isc.c:73 dnsmasq.c:723
+#: forward.c:409
+msgid "possible DNS-rebind attack detected"
+msgstr ""
+
+#: isc.c:77 dnsmasq.c:747
#, c-format
msgid "failed to access %s: %s"
msgstr ""
-#: isc.c:89
+#: isc.c:93
#, c-format
msgid "failed to load %s: %s"
msgstr ""
-#: isc.c:93 dnsmasq.c:745
+#: isc.c:97 dnsmasq.c:769
#, c-format
msgid "reading %s"
msgstr ""
-#: isc.c:115
+#: isc.c:119
#, c-format
msgid "bad name in %s"
msgstr ""
-#: isc.c:177
+#: isc.c:181
#, c-format
msgid "Ignoring DHCP lease for %s because it has an illegal domain part"
msgstr ""
-#: network.c:41
+#: network.c:45
#, c-format
msgid "unknown interface %s in bridge-interface"
msgstr ""
-#: network.c:377 dnsmasq.c:170
+#: network.c:389 dnsmasq.c:180
#, c-format
msgid "failed to create listening socket: %s"
msgstr ""
-#: network.c:384
+#: network.c:396
#, c-format
msgid "failed to set IPV6 options on listening socket: %s"
msgstr ""
-#: network.c:402
+#: network.c:415
#, c-format
msgid "failed to bind listening socket for %s: %s"
msgstr ""
-#: network.c:410
+#: network.c:420
#, c-format
msgid "failed to listen on socket: %s"
msgstr ""
-#: network.c:421
+#: network.c:432
#, c-format
msgid "failed to create TFTP socket: %s"
msgstr ""
-#: network.c:493
+#: network.c:549
+#, c-format
+msgid "failed to bind server socket for %s: %s"
+msgstr ""
+
+#: network.c:582
#, c-format
msgid "ignoring nameserver %s - local interface"
msgstr ""
-#: network.c:502
+#: network.c:591
#, c-format
msgid "ignoring nameserver %s - cannot make/bind socket: %s"
msgstr ""
-#: network.c:517
+#: network.c:606
msgid "unqualified"
msgstr ""
-#: network.c:517
+#: network.c:606
msgid "names"
msgstr ""
-#: network.c:519
+#: network.c:608
msgid "default"
msgstr ""
-#: network.c:521
+#: network.c:610
msgid "domain"
msgstr ""
-#: network.c:524
+#: network.c:613
#, c-format
msgid "using local addresses only for %s %s"
msgstr ""
-#: network.c:526
+#: network.c:615
#, c-format
msgid "using nameserver %s#%d for %s %s"
msgstr ""
-#: network.c:529
+#: network.c:618
+#, c-format
+msgid "using nameserver %s#%d(via %s)"
+msgstr ""
+
+#: network.c:620
#, c-format
msgid "using nameserver %s#%d"
msgstr ""
-#: dnsmasq.c:106
+#: dnsmasq.c:110
msgid ""
"ISC dhcpd integration not available: set HAVE_ISC_READER in src/config.h"
msgstr ""
-#: dnsmasq.c:128
+#: dnsmasq.c:132
msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
msgstr ""
-#: dnsmasq.c:142
+#: dnsmasq.c:137
+msgid "asychronous logging is not available under Solaris"
+msgstr ""
+
+#: dnsmasq.c:151
msgid "must set exactly one interface on broken systems without IP_RECVIF"
msgstr ""
-#: dnsmasq.c:152
+#: dnsmasq.c:161
#, c-format
msgid "failed to find list of interfaces: %s"
msgstr ""
-#: dnsmasq.c:160
+#: dnsmasq.c:169
#, c-format
msgid "unknown interface %s"
msgstr ""
-#: dnsmasq.c:166
+#: dnsmasq.c:175
#, c-format
msgid "no interface with address %s"
msgstr ""
-#: dnsmasq.c:181 dnsmasq.c:538
+#: dnsmasq.c:192 dnsmasq.c:561
#, c-format
msgid "DBus error: %s"
msgstr ""
-#: dnsmasq.c:184
+#: dnsmasq.c:195
msgid "DBus not available: set HAVE_DBUS in src/config.h"
msgstr ""
-#: dnsmasq.c:216
+#: dnsmasq.c:204
#, c-format
msgid "cannot create pipe: %s"
msgstr ""
-#: dnsmasq.c:237
+#: dnsmasq.c:225
#, c-format
msgid "cannot fork into background: %s"
msgstr ""
-#: dnsmasq.c:335
+#: dnsmasq.c:239
+#, c-format
+msgid "cannot chdir to filesystem root: %s"
+msgstr ""
+
+#: dnsmasq.c:349
+#, c-format
+msgid "started, version %s DNS disabled"
+msgstr ""
+
+#: dnsmasq.c:351
#, c-format
msgid "started, version %s cachesize %d"
msgstr ""
-#: dnsmasq.c:337
+#: dnsmasq.c:353
#, c-format
msgid "started, version %s cache disabled"
msgstr ""
-#: dnsmasq.c:339
+#: dnsmasq.c:355
#, c-format
msgid "compile time options: %s"
msgstr ""
-#: dnsmasq.c:345
+#: dnsmasq.c:361
msgid "DBus support enabled: connected to system bus"
msgstr ""
-#: dnsmasq.c:347
+#: dnsmasq.c:363
msgid "DBus support enabled: bus connection pending"
msgstr ""
-#: dnsmasq.c:352
+#: dnsmasq.c:368
msgid "setting --bind-interfaces option because of OS limitations"
msgstr ""
-#: dnsmasq.c:357
+#: dnsmasq.c:373
#, c-format
msgid "warning: interface %s does not currently exist"
msgstr ""
-#: dnsmasq.c:362
+#: dnsmasq.c:378
msgid "warning: ignoring resolv-file flag because no-resolv is set"
msgstr ""
-#: dnsmasq.c:365
+#: dnsmasq.c:381
msgid "warning: no upstream servers configured"
msgstr ""
-#: dnsmasq.c:369
+#: dnsmasq.c:385
#, c-format
msgid "asynchronous logging enabled, queue limit is %d messages"
msgstr ""
-#: dnsmasq.c:381
+#: dnsmasq.c:397
#, c-format
msgid "DHCP, static leases only on %.0s%s, lease time %s"
msgstr ""
-#: dnsmasq.c:382
+#: dnsmasq.c:398
#, c-format
msgid "DHCP, IP range %s -- %s, lease time %s"
msgstr ""
-#: dnsmasq.c:396
+#: dnsmasq.c:412
msgid "root is "
msgstr ""
-#: dnsmasq.c:396
+#: dnsmasq.c:412
msgid "enabled"
msgstr ""
-#: dnsmasq.c:398
+#: dnsmasq.c:414
msgid "secure mode"
msgstr ""
-#: dnsmasq.c:418
+#: dnsmasq.c:440
#, c-format
msgid "restricting maximum simultaneous TFTP transfers to %d"
msgstr ""
-#: dnsmasq.c:427
+#: dnsmasq.c:449
#, c-format
msgid "warning: setting capabilities failed: %s"
msgstr ""
-#: dnsmasq.c:429
+#: dnsmasq.c:451
msgid "running as root"
msgstr ""
-#: dnsmasq.c:540
+#: dnsmasq.c:563
msgid "connected to system DBus"
msgstr ""
-#: dnsmasq.c:659
+#: dnsmasq.c:683
#, c-format
msgid "child process killed by signal %d"
msgstr ""
-#: dnsmasq.c:663
+#: dnsmasq.c:687
#, c-format
msgid "child process exited with status %d"
msgstr ""
-#: dnsmasq.c:667
+#: dnsmasq.c:691
#, c-format
msgid "failed to execute %s: %s"
msgstr ""
-#: dnsmasq.c:671
+#: dnsmasq.c:695
#, c-format
msgid "failed to create helper: %s"
msgstr ""
-#: dnsmasq.c:705
+#: dnsmasq.c:729
msgid "exiting on receipt of SIGTERM"
msgstr ""
-#: dnsmasq.c:756
+#: dnsmasq.c:780
#, c-format
msgid "no servers found in %s, will retry"
msgstr ""
-#: dhcp.c:32
+#: dhcp.c:38
#, c-format
msgid "cannot create DHCP socket : %s"
msgstr ""
-#: dhcp.c:41
+#: dhcp.c:50
#, c-format
msgid "failed to set options on DHCP socket: %s"
msgstr ""
-#: dhcp.c:59
+#: dhcp.c:68
#, c-format
msgid "failed to set SO_REUSE{ADDR|PORT} on DHCP socket: %s"
msgstr ""
-#: dhcp.c:72
+#: dhcp.c:81
#, c-format
msgid "failed to bind DHCP server socket: %s"
msgstr ""
-#: dhcp.c:85
+#: dhcp.c:94
#, c-format
msgid "cannot create ICMP raw socket: %s."
msgstr ""
-#: dhcp.c:100
+#: dhcp.c:223
#, c-format
-msgid "duplicate IP address %s in dhcp-config directive."
+msgid "DHCP packet received on %s which has no address"
msgstr ""
-#: dhcp.c:103
+#: dhcp.c:382
#, c-format
-msgid "illegal domain %s in dhcp-config directive."
+msgid "DHCP range %s -- %s is not consistent with netmask %s"
msgstr ""
-#: dhcp.c:221
+#: dhcp.c:709
#, c-format
-msgid "DHCP packet received on %s which has no address"
+msgid "failed to read %s:%s"
msgstr ""
-#: dhcp.c:352
+#: dhcp.c:744
#, c-format
-msgid "DHCP range %s -- %s is not consistent with netmask %s"
+msgid "bad line at %s line %d"
msgstr ""
-#: dhcp.c:669
+#: dhcp.c:847
#, c-format
-msgid "failed to read %s:%s"
+msgid "duplicate IP address %s in dhcp-config directive."
msgstr ""
-#: dhcp.c:704
+#: dhcp.c:850
#, c-format
-msgid "bad line at %s line %d"
+msgid "duplicate IP address %s in %s."
msgstr ""
-#: dhcp.c:826
+#: dhcp.c:858
#, c-format
-msgid "duplicate IP address %s in %s."
+msgid "illegal domain %s in dhcp-config directive."
msgstr ""
-#: dhcp.c:832
+#: dhcp.c:860
#, c-format
msgid "illegal domain %s in %s."
msgstr ""
-#: dhcp.c:839
+#: dhcp.c:899
#, c-format
-msgid "read %s - %d hosts"
+msgid "%s has more then one address in hostsfile, using %s for DHCP"
msgstr ""
-#: dhcp.c:866
+#: dhcp.c:904
#, c-format
msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr ""
-#: lease.c:54
+#: lease.c:58
#, c-format
msgid "cannot open or create lease file %s: %s"
msgstr ""
-#: lease.c:80
+#: lease.c:84
msgid "too many stored leases"
msgstr ""
-#: lease.c:121
+#: lease.c:125
#, c-format
msgid "cannot run lease-init script %s: %s"
msgstr ""
-#: lease.c:127
+#: lease.c:131
#, c-format
msgid "lease-init script returned exit code %s"
msgstr ""
-#: lease.c:234
+#: lease.c:238
#, c-format
msgid "failed to write %s: %s (retry in %us)"
msgstr ""
-#: rfc2131.c:300
+#: rfc2131.c:303
#, c-format
msgid "no address range available for DHCP request %s %s"
msgstr ""
-#: rfc2131.c:301
+#: rfc2131.c:304
msgid "with subnet selector"
msgstr ""
-#: rfc2131.c:301
+#: rfc2131.c:304
msgid "via"
msgstr ""
-#: rfc2131.c:312
+#: rfc2131.c:315
#, c-format
msgid "DHCP packet: transaction-id is %u"
msgstr ""
-#: rfc2131.c:317
+#: rfc2131.c:320
#, c-format
msgid "Available DHCP subnet: %s/%s"
msgstr ""
-#: rfc2131.c:319
+#: rfc2131.c:322
#, c-format
msgid "Available DHCP range: %s -- %s"
msgstr ""
-#: rfc2131.c:347 rfc2131.c:378
+#: rfc2131.c:350 rfc2131.c:381
msgid "disabled"
msgstr ""
-#: rfc2131.c:390 rfc2131.c:852
+#: rfc2131.c:393 rfc2131.c:873
msgid "address in use"
msgstr ""
-#: rfc2131.c:393
+#: rfc2131.c:396
msgid "no address configured"
msgstr ""
-#: rfc2131.c:406 rfc2131.c:720
+#: rfc2131.c:409 rfc2131.c:736
msgid "no address available"
msgstr ""
-#: rfc2131.c:416
-#, c-format
-msgid "Limit of %d leases exceeded."
-msgstr ""
-
-#: rfc2131.c:417 rfc2131.c:862
+#: rfc2131.c:418 rfc2131.c:883
msgid "no leases left"
msgstr ""
-#: rfc2131.c:421 rfc2131.c:826
+#: rfc2131.c:421 rfc2131.c:847
msgid "wrong network"
msgstr ""
-#: rfc2131.c:519
+#: rfc2131.c:520
#, c-format
msgid "Ignoring domain %s for DHCP host name %s"
msgstr ""
-#: rfc2131.c:598
+#: rfc2131.c:614
#, c-format
msgid "Vendor class: %s"
msgstr ""
-#: rfc2131.c:600
+#: rfc2131.c:616
#, c-format
msgid "User class: %s"
msgstr ""
-#: rfc2131.c:641
+#: rfc2131.c:657
#, c-format
msgid "disabling DHCP static address %s for %s"
msgstr ""
-#: rfc2131.c:662
+#: rfc2131.c:678
msgid "unknown lease"
msgstr ""
-#: rfc2131.c:671 rfc2131.c:970
+#: rfc2131.c:687 rfc2131.c:992
msgid "ignored"
msgstr ""
-#: rfc2131.c:691
+#: rfc2131.c:707
#, c-format
msgid "not using configured address %s because it is leased to %s"
msgstr ""
-#: rfc2131.c:701
+#: rfc2131.c:717
#, c-format
msgid ""
"not using configured address %s because it is in use by the server or relay"
msgstr ""
-#: rfc2131.c:704
+#: rfc2131.c:720
#, c-format
msgid "not using configured address %s because it was previously declined"
msgstr ""
-#: rfc2131.c:718 rfc2131.c:855
+#: rfc2131.c:734 rfc2131.c:876
msgid "no unique-id"
msgstr ""
-#: rfc2131.c:789
+#: rfc2131.c:806
msgid "wrong address"
msgstr ""
-#: rfc2131.c:802
+#: rfc2131.c:823
msgid "lease not found"
msgstr ""
-#: rfc2131.c:834
+#: rfc2131.c:855
msgid "address not available"
msgstr ""
-#: rfc2131.c:845
+#: rfc2131.c:866
msgid "static lease available"
msgstr ""
-#: rfc2131.c:849
+#: rfc2131.c:870
msgid "address reserved"
msgstr ""
-#: rfc2131.c:1252
+#: rfc2131.c:1265
#, c-format
msgid "tags: %s"
msgstr ""
-#: rfc2131.c:1334
+#: rfc2131.c:1352
#, c-format
msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
msgstr ""
-#: rfc2131.c:1488
+#: rfc2131.c:1507
#, c-format
msgid "requested options: %s"
msgstr ""
-#: rfc2131.c:1519
+#: rfc2131.c:1556
#, c-format
-msgid "server name: %s"
+msgid "next server: %s"
msgstr ""
-#: rfc2131.c:1531
+#: rfc2131.c:1580
#, c-format
msgid "bootfile name: %s"
msgstr ""
-#: rfc2131.c:1540
+#: rfc2131.c:1583
#, c-format
-msgid "next server: %s"
+msgid "server name: %s"
msgstr ""
-#: netlink.c:59
+#: netlink.c:63
#, c-format
msgid "cannot create netlink socket: %s"
msgstr ""
-#: netlink.c:226
+#: netlink.c:230
#, c-format
msgid "netlink returns error: %s"
msgstr ""
-#: dbus.c:111
+#: dbus.c:115
msgid "attempt to set an IPv6 server address via DBus - no IPv6 support"
msgstr ""
-#: dbus.c:237
+#: dbus.c:241
msgid "setting upstream servers from DBus"
msgstr ""
-#: dbus.c:275
+#: dbus.c:279
msgid "could not register a DBus message handler"
msgstr ""
-#: bpf.c:43
+#: bpf.c:146
#, c-format
msgid "cannot create DHCP BPF socket: %s"
msgstr ""
-#: bpf.c:71
+#: bpf.c:174
#, c-format
msgid "DHCP request for unsupported hardware type (%d) received on %s"
msgstr ""
-#: tftp.c:158
+#: tftp.c:173
+msgid "unable to get free port for TFTP"
+msgstr ""
+
+#: tftp.c:188
#, c-format
msgid "unsupported request from %s"
msgstr ""
-#: tftp.c:236
+#: tftp.c:266
#, c-format
msgid "TFTP sent %s to %s"
msgstr ""
-#: tftp.c:259
+#: tftp.c:289
#, c-format
msgid "file %s not found"
msgstr ""
-#: tftp.c:369
+#: tftp.c:399
#, c-format
msgid "TFTP error %d %s received from %s"
msgstr ""
-#: tftp.c:400
+#: tftp.c:430
#, c-format
msgid "TFTP failed sending %s to %s"
msgstr ""
-#: log.c:69
+#: log.c:73
#, c-format
msgid "cannot open %s: %s"
msgstr ""
-#: log.c:146
+#: log.c:89
+#, c-format
+msgid "warning: failed to change owner of %s: %s"
+msgstr ""
+
+#: log.c:161
#, c-format
msgid "overflow: %d log entries lost"
msgstr ""
-#: log.c:223
+#: log.c:238
#, c-format
msgid "log failed: %s"
msgstr ""
-#: log.c:378
+#: log.c:394
msgid "FAILED to start up"
msgstr ""
diff --git a/po/no.po b/po/no.po
index cc32b3f..7549867 100644
--- a/po/no.po
+++ b/po/no.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dnsmasq 2.25\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-08-29 11:09+0100\n"
+"POT-Creation-Date: 2008-02-12 11: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"
@@ -17,31 +17,31 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: cache.c:671
+#: cache.c:680
#, fuzzy, c-format
msgid "failed to load names from %s: %s"
msgstr "feilet å laste navn fra %s: %m"
-#: cache.c:705 dhcp.c:717
+#: cache.c:714 dhcp.c:757
#, c-format
msgid "bad address at %s line %d"
msgstr "dårlig adresse ved %s linje %d"
-#: cache.c:752 dhcp.c:731
+#: cache.c:761 dhcp.c:771
#, c-format
msgid "bad name at %s line %d"
msgstr "dårlig navn ved %s linje %d"
-#: cache.c:759 dhcp.c:785
+#: cache.c:768 dhcp.c:825
#, c-format
msgid "read %s - %d addresses"
msgstr "les %s - %d adresser"
-#: cache.c:797
+#: cache.c:806
msgid "cleared cache"
msgstr "mellomlager tømt"
-#: cache.c:844
+#: cache.c:855
#, c-format
msgid ""
"not giving name %s to the DHCP lease of %s because the name exists in %s "
@@ -50,378 +50,427 @@ msgstr ""
"gir ikke navnet %s til DHCP leien for %s fordi navnet eksisterer i %s med "
"adressen %s"
-#: cache.c:884
+#: cache.c:907
+#, c-format
+msgid "time %lu"
+msgstr ""
+
+#: cache.c:908
#, fuzzy, c-format
-msgid ""
-"time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache "
-"entries."
+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:157 option.c:758
+#: cache.c:910
+#, c-format
+msgid "queries forwarded %u, queries answered locally %u"
+msgstr ""
+
+#: cache.c:933
+#, c-format
+msgid "server %s#%d: queries sent %u, retried or failed %u"
+msgstr ""
+
+#: util.c:160
msgid "could not get memory"
msgstr "kunne ikke få minne"
-#: util.c:167
+#: util.c:170
#, fuzzy, c-format
msgid "failed to allocate %d bytes"
msgstr "feilet å laste %s: %m"
-#: util.c:272
+#: util.c:275
#, c-format
msgid "infinite"
msgstr "uendelig"
-#: option.c:188
+#: option.c:244
msgid "Specify local address(es) to listen on."
msgstr "Spesifiser lokal(e) adresse(r) å lytte på."
-#: option.c:189
+#: option.c:245
msgid "Return ipaddr for all hosts in specified domains."
msgstr "Returner ipaddr for alle verter i det spesifiserte domenet."
-#: option.c:190
+#: option.c:246
msgid "Fake reverse lookups for RFC1918 private address ranges."
msgstr "Forfalsk revers oppslag for RFC1918 private adresse områder."
-#: option.c:191
+#: option.c:247
msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
msgstr "Behandle ipaddr som NXDOMAIN (omgår Verisign wildcard)."
-#: option.c:192
+#: option.c:248
#, c-format
msgid "Specify the size of the cache in entries (defaults to %s)."
msgstr "Spesifiser størrelsen på mellomlager plassene (standard er %s)."
-#: option.c:193
+#: option.c:249
#, c-format
msgid "Specify configuration file (defaults to %s)."
msgstr "Spesifiser konfigurasjonsfil (standard er %s)."
-#: option.c:194
+#: option.c:250
msgid "Do NOT fork into the background: run in debug mode."
msgstr "IKKE legg (fork) som bakgrunnsprosess: kjør i debug modus."
-#: option.c:195
+#: option.c:251
msgid "Do NOT forward queries with no domain part."
msgstr "IKKE videresend oppslag som mangler domene del."
-#: option.c:196
+#: option.c:252
msgid "Return self-pointing MX records for local hosts."
msgstr "Returner selv-pekende MX post for lokale verter."
-#: option.c:197
+#: option.c:253
msgid "Expand simple names in /etc/hosts with domain-suffix."
msgstr "Utvid enkle navn i /etc/hosts med domene-suffiks."
-#: option.c:198
+#: option.c:254
msgid "Don't forward spurious DNS requests from Windows hosts."
msgstr "Ikke videresend falske/uekte DNS forespørsler fra Windows verter."
-#: option.c:199
+#: option.c:255
msgid "Enable DHCP in the range given with lease duration."
msgstr "Aktiver DHCP i det gitte området med leie varighet"
-#: option.c:200
+#: option.c:256
#, c-format
msgid "Change to this group after startup (defaults to %s)."
msgstr "Skift til denne gruppen etter oppstart (standard er %s)."
-#: option.c:201
+#: option.c:257
msgid "Set address or hostname for a specified machine."
msgstr "Sett adresse eller vertsnavn for en spesifikk maskin."
-#: option.c:202
+#: option.c:258
msgid "Read DHCP host specs from file"
msgstr ""
-#: option.c:203
+#: option.c:259
+msgid "Read DHCP option specs from file"
+msgstr ""
+
+#: option.c:260
#, c-format
msgid "Do NOT load %s file."
msgstr "IKKE last %s filen."
-#: option.c:204
+#: option.c:261
#, 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:205
+#: option.c:262
msgid "Specify interface(s) to listen on."
msgstr "Spesifiser nettverkskort det skal lyttes på."
-#: option.c:206
+#: option.c:263
msgid "Specify interface(s) NOT to listen on."
msgstr "Spesifiser nettverkskort det IKKE skal lyttes på."
-#: option.c:207
+#: option.c:264
#, fuzzy
msgid "Map DHCP user class to tag."
msgstr "Map DHCP bruker klasse til opsjon sett."
-#: option.c:208
+#: option.c:265
msgid "Map RFC3046 circuit-id to tag."
msgstr ""
-#: option.c:209
+#: option.c:266
msgid "Map RFC3046 remote-id to tag."
msgstr ""
-#: option.c:210
+#: option.c:267
msgid "Map RFC3993 subscriber-id to tag."
msgstr ""
-#: option.c:211
+#: option.c:268
#, fuzzy
msgid "Don't do DHCP for hosts with tag set."
msgstr "Ikke utfør DHCP for klienter i opsjon sett."
-#: option.c:212
+#: option.c:269
+#, fuzzy
+msgid "Force broadcast replies for hosts with tag set."
+msgstr "Ikke utfør DHCP for klienter i opsjon sett."
+
+#: option.c:270
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:213
+#: option.c:271
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:214
+#: option.c:272
#, c-format
msgid "Specify where to store DHCP leases (defaults to %s)."
msgstr "Spesifiser hvor DHCP leiene skal lagres (standard er %s)."
-#: option.c:215
+#: option.c:273
msgid "Return MX records for local hosts."
msgstr "Returner MX records for lokale verter."
-#: option.c:216
+#: option.c:274
msgid "Specify an MX record."
msgstr "Spesifiser en MX post."
-#: option.c:217
+#: option.c:275
msgid "Specify BOOTP options to DHCP server."
msgstr "Spesifiser BOOTP opsjoner til DHCP tjener."
-#: option.c:218
+#: option.c:276
#, 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:219
+#: option.c:277
msgid "Do NOT cache failed search results."
msgstr "IKKE mellomlagre søkeresultater som feiler."
-#: option.c:220
+#: option.c:278
#, 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:221
+#: option.c:279
#, fuzzy
msgid "Specify options to be sent to DHCP clients."
msgstr "Sett ekstra opsjoner som skal fordeles til DHCP klientene."
-#: option.c:222
+#: option.c:280
msgid "DHCP option sent even if the client does not request it."
msgstr ""
-#: option.c:223
+#: option.c:281
msgid "Specify port to listen for DNS requests on (defaults to 53)."
msgstr "Spesifiser lytteport for DNS oppslag (standard er 53)."
-#: option.c:224
+#: option.c:282
#, 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:225
-msgid "Log queries."
+#: option.c:283
+#, fuzzy
+msgid "Log DNS queries."
msgstr "Logg oppslag."
-#: option.c:226
-msgid "Force the originating port for upstream queries."
+#: option.c:284
+#, fuzzy
+msgid "Force the originating port for upstream DNS queries."
msgstr "Tving bruk av opprinnelig port for oppstrøms oppslag."
-#: option.c:227
+#: option.c:285
msgid "Do NOT read resolv.conf."
msgstr "IKKE les resolv.conf."
-#: option.c:228
+#: option.c:286
#, c-format
msgid "Specify path to resolv.conf (defaults to %s)."
msgstr "Spesifiser stien til resolv.conf (standard er %s)."
-#: option.c:229
+#: option.c:287
msgid "Specify address(es) of upstream servers with optional domains."
msgstr "Spesifiser adressen(e) til oppstrøms tjenere med valgfrie domener."
-#: option.c:230
+#: option.c:288
msgid "Never forward queries to specified domains."
msgstr "Aldri videresend oppslag til spesifiserte domener."
-#: option.c:231
+#: option.c:289
msgid "Specify the domain to be assigned in DHCP leases."
msgstr "Spesifiser domenet som skal tildeles i DHCP leien."
-#: option.c:232
+#: option.c:290
msgid "Specify default target in an MX record."
msgstr "Spesifiser default mål i en MX post."
-#: option.c:233
+#: option.c:291
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:234
+#: option.c:292
+#, fuzzy
+msgid "Specify time-to-live in seconds for negative caching."
+msgstr "Spesifiser time-to-live i sekunder for svar fra /etc/hosts."
+
+#: option.c:293
#, c-format
msgid "Change to this user after startup. (defaults to %s)."
msgstr "Skift til denne bruker etter oppstart (standard er %s)."
-#: option.c:235
+#: option.c:294
#, fuzzy
msgid "Map DHCP vendor class to tag."
msgstr "Map DHCP produsent klasse til opsjon sett."
-#: option.c:236
+#: option.c:295
msgid "Display dnsmasq version and copyright information."
msgstr "Vis dnsmasq versjon og copyright informasjon."
-#: option.c:237
+#: option.c:296
msgid "Translate IPv4 addresses from upstream servers."
msgstr "Oversett IPv4 adresser fra oppstrøms tjenere."
-#: option.c:238
+#: option.c:297
msgid "Specify a SRV record."
msgstr "Spesifiser en SRV post."
-#: option.c:239
+#: option.c:298
msgid "Display this message. Use --help dhcp for known DHCP options."
msgstr ""
-#: option.c:240
+#: option.c:299
#, fuzzy, c-format
msgid "Specify path of PID file (defaults to %s)."
msgstr "Spesifiser stien til PID fil. (standard er %s)."
-#: option.c:241
+#: option.c:300
#, c-format
msgid "Specify maximum number of DHCP leases (defaults to %s)."
msgstr "Spesifiser maksimum antall DHCP leier (standard er %s)"
-#: option.c:242
+#: option.c:301
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:243
+#: option.c:302
msgid "Specify TXT DNS record."
msgstr "Spesifiser TXT DNS post."
-#: option.c:244
+#: option.c:303
#, fuzzy
msgid "Specify PTR DNS record."
msgstr "Spesifiser TXT DNS post."
-#: option.c:245
+#: option.c:304
msgid "Give DNS name to IPv4 address of interface."
msgstr ""
-#: option.c:246
+#: option.c:305
msgid "Bind only to interfaces in use."
msgstr "Bind kun til nettverkskort som er i bruk."
-#: option.c:247
+#: option.c:306
#, c-format
msgid "Read DHCP static host information from %s."
msgstr "Les DHCP statisk vert informasjon fra %s."
-#: option.c:248
+#: option.c:307
msgid "Enable the DBus interface for setting upstream servers, etc."
msgstr "Aktiver DBus interface for å sette oppstrøms tjenere, osv."
-#: option.c:249
+#: option.c:308
msgid "Do not provide DHCP on this interface, only provide DNS."
msgstr "Ikke lever DHCP på dette nettverkskortet, kun lever DNS."
-#: option.c:250
+#: option.c:309
msgid "Enable dynamic address allocation for bootp."
msgstr "Aktiver dynamisk adresse allokering for bootp."
-#: option.c:251
+#: option.c:310
#, fuzzy
msgid "Map MAC address (with wildcards) to option set."
msgstr "Map DHCP produsent klasse til opsjon sett."
-#: option.c:253
+#: option.c:312
msgid "Treat DHCP requests on aliases as arriving from interface."
msgstr ""
-#: option.c:255
+#: option.c:314
msgid "Disable ICMP echo address checking in the DHCP server."
msgstr ""
-#: option.c:256
+#: option.c:315
msgid "Script to run on DHCP lease creation and destruction."
msgstr ""
-#: option.c:257
+#: option.c:316
msgid "Read configuration from all the files in this directory."
msgstr ""
-#: option.c:258
+#: option.c:317
#, fuzzy
msgid "Log to this syslog facility or file. (defaults to DAEMON)"
msgstr "Skift til denne bruker etter oppstart (standard er %s)."
-#: option.c:259
+#: option.c:318
msgid "Read leases at startup, but never write the lease file."
msgstr ""
-#: option.c:260
+#: option.c:319
#, fuzzy, c-format
msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
msgstr "Spesifiser maksimum antall DHCP leier (standard er %s)"
-#: option.c:261
+#: option.c:320
#, c-format
msgid "Clear DNS cache when reloading %s."
msgstr ""
-#: option.c:262
+#: option.c:321
msgid "Ignore hostnames provided by DHCP clients."
msgstr ""
-#: option.c:263
+#: option.c:322
+msgid "Do NOT reuse filename and server fields for extra DHCP options."
+msgstr ""
+
+#: option.c:323
msgid "Enable integrated read-only TFTP server."
msgstr ""
-#: option.c:264
+#: option.c:324
msgid "Export files by TFTP only from the specified subtree."
msgstr ""
-#: option.c:265
+#: option.c:325
msgid "Add client IP address to tftp-root."
msgstr ""
-#: option.c:266
+#: option.c:326
msgid "Allow access only to files owned by the user running dnsmasq."
msgstr ""
-#: option.c:267
+#: option.c:327
#, fuzzy, c-format
msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
msgstr "Spesifiser maksimum antall DHCP leier (standard er %s)"
-#: option.c:268
+#: option.c:328
msgid "Disable the TFTP blocksize extension."
msgstr ""
-#: option.c:269
+#: option.c:329
+msgid "Ephemeral port range for use by TFTP transfers."
+msgstr ""
+
+#: option.c:330
msgid "Extra logging for DHCP."
msgstr ""
-#: option.c:270
+#: option.c:331
msgid "Enable async. logging; optionally set queue length."
msgstr ""
-#: option.c:501
+#: option.c:332
+msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
+msgstr ""
+
+#: option.c:333
+msgid "Always perform DNS queries to all servers."
+msgstr ""
+
+#: option.c:334
+msgid "Set tag if client includes option in request."
+msgstr ""
+
+#: option.c:585
#, c-format
msgid ""
"Usage: dnsmasq [options]\n"
@@ -430,172 +479,190 @@ msgstr ""
"Bruk: dnsmasq [opsjoner]\n"
"\n"
-#: option.c:503
+#: option.c:587
#, c-format
msgid "Use short options only on the command line.\n"
msgstr "Bruk korte opsjoner kun på kommandolinjen.\n"
-#: option.c:505
+#: option.c:589
#, c-format
msgid "Valid options are :\n"
msgstr "Gyldige opsjoner er :\n"
-#: option.c:526
+#: option.c:610
#, c-format
msgid "Known DHCP options:\n"
msgstr ""
-#: option.c:599
+#: option.c:683
msgid "bad dhcp-option"
msgstr "dårlig dhcp-opsjon"
-#: option.c:655
+#: option.c:739
#, fuzzy
msgid "bad IP address"
msgstr "les %s - %d adresser"
-#: option.c:753
+#: option.c:837
msgid "bad domain in dhcp-option"
msgstr "dårlig domene i dhcp-opsjon"
-#: option.c:809
+#: option.c:895
msgid "dhcp-option too long"
msgstr "dhcp-opsjon for lang"
-#: option.c:853
+#: option.c:942
#, fuzzy, c-format
msgid "cannot access directory %s: %s"
msgstr "kan ikke lese %s: %s"
-#: option.c:872 tftp.c:313
+#: option.c:961 tftp.c:343
#, fuzzy, c-format
msgid "cannot access %s: %s"
msgstr "kan ikke lese %s: %s"
-#: option.c:913
+#: option.c:998
msgid "only one dhcp-hostsfile allowed"
msgstr ""
-#: option.c:962
+#: option.c:1005
+msgid "only one dhcp-optsfile allowed"
+msgstr ""
+
+#: option.c:1049
msgid "bad MX preference"
msgstr "dårlig MX preferanse"
-#: option.c:971
+#: option.c:1053
msgid "bad MX name"
msgstr "dårlig MX navn"
-#: option.c:989
+#: option.c:1067
msgid "bad MX target"
msgstr "dårlig MX mål"
-#: option.c:1001
+#: option.c:1078
msgid "cannot run scripts under uClinux"
msgstr ""
-#: option.c:1196 option.c:1207
+#: option.c:1265 option.c:1273
msgid "bad port"
msgstr "dårlig port"
-#: option.c:1349
+#: option.c:1293 option.c:1318
+msgid "interface binding not supported"
+msgstr ""
+
+#: option.c:1427
+#, fuzzy
+msgid "bad port range"
+msgstr "dårlig port"
+
+#: option.c:1444
msgid "bad bridge-interface"
msgstr ""
-#: option.c:1391
+#: option.c:1485
msgid "bad dhcp-range"
msgstr "dårlig dhcp-område"
-#: option.c:1419
+#: option.c:1511
msgid "only one netid tag allowed"
msgstr ""
-#: option.c:1461
+#: option.c:1551
msgid "inconsistent DHCP range"
msgstr "ikke konsistent DHCP område"
-#: option.c:1637
+#: option.c:1719
#, fuzzy
msgid "bad DHCP host name"
msgstr "dårlig MX navn"
-#: option.c:1861
+#: option.c:1959
#, fuzzy
msgid "bad interface name"
msgstr "dårlig MX navn"
-#: option.c:1885
+#: option.c:1979
#, fuzzy
msgid "bad PTR record"
msgstr "dårlig SRV post"
-#: option.c:1909
-msgid "bad TXT record"
-msgstr "dårlig TXT post"
-
-#: option.c:1941
+#: option.c:1999
msgid "TXT record string too long"
msgstr "TXT post streng for lang"
-#: option.c:1980
+#: option.c:2003
+msgid "bad TXT record"
+msgstr "dårlig TXT post"
+
+#: option.c:2063
msgid "bad SRV record"
msgstr "dårlig SRV post"
-#: option.c:1992
+#: option.c:2072
msgid "bad SRV target"
msgstr "dårlig SRV mål"
-#: option.c:2003
+#: option.c:2080
msgid "invalid port number"
msgstr "ugyldig portnummer"
-#: option.c:2013
+#: option.c:2087
msgid "invalid priority"
msgstr "ugyldig prioritet"
-#: option.c:2023
+#: option.c:2094
msgid "invalid weight"
msgstr "ugyldig vekt"
-#: option.c:2054
+#: option.c:2130
#, c-format
msgid "files nested too deep in %s"
msgstr ""
-#: option.c:2062 tftp.c:467
+#: option.c:2138 tftp.c:497
#, c-format
msgid "cannot read %s: %s"
msgstr "kan ikke lese %s: %s"
-#: option.c:2114
+#: option.c:2199
msgid "missing \""
msgstr "mangler \""
-#: option.c:2161
+#: option.c:2246
msgid "bad option"
msgstr "dårlig opsjon"
-#: option.c:2163
+#: option.c:2248
msgid "extraneous parameter"
msgstr "overflødig parameter"
-#: option.c:2165
+#: option.c:2250
msgid "missing parameter"
msgstr "mangler parameter"
-#: option.c:2173
+#: option.c:2258
msgid "error"
msgstr "feil"
-#: option.c:2179
+#: option.c:2264
#, c-format
msgid "%s at line %d of %%s"
msgstr "%s på linje %d av %%s"
-#: option.c:2252
+#: option.c:2304 option.c:2334
+#, fuzzy, c-format
+msgid "read %s"
+msgstr "leser %s"
+
+#: option.c:2400
#, c-format
msgid "Dnsmasq version %s %s\n"
msgstr "Dnsmasq versjon %s %s\n"
-#: option.c:2253
+#: option.c:2401
#, c-format
msgid ""
"Compile time options %s\n"
@@ -604,653 +671,689 @@ msgstr ""
"Kompileringsopsjoner %s\n"
"\n"
-#: option.c:2254
+#: option.c:2402
#, c-format
msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
msgstr "Denne programvaren kommer med ABSOLUTT INGEN GARANTI.\n"
-#: option.c:2255
+#: option.c:2403
#, 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:2256
-#, c-format
-msgid "under the terms of the GNU General Public License, version 2.\n"
+#: option.c:2404
+#, fuzzy, c-format
+msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
msgstr "under vilkårene gitt i GNU General Public License, versjon 2.\n"
-#: option.c:2267
+#: option.c:2415
msgid "try --help"
msgstr ""
-#: option.c:2269
+#: option.c:2417
msgid "try -w"
msgstr ""
-#: option.c:2272
+#: option.c:2420
#, fuzzy, c-format
msgid "bad command line options: %s"
msgstr "dårlige kommandlinje opsjoner: %s."
-#: option.c:2313
+#: option.c:2461
#, c-format
msgid "cannot get host-name: %s"
msgstr "klarer ikke å få vertsnavn: %s"
-#: option.c:2341
+#: option.c:2489
msgid "only one resolv.conf file allowed in no-poll mode."
msgstr "kun en resolv.conf fil tillat i no-poll modus."
-#: option.c:2351
+#: option.c:2499
msgid "must have exactly one resolv.conf to read domain from."
msgstr "må ha nøyaktig en resolv.conf å lese domene fra."
-#: option.c:2354 network.c:549
+#: option.c:2502 network.c:640
#, fuzzy, c-format
msgid "failed to read %s: %s"
msgstr "feilet å lese %s: %m"
-#: option.c:2372
+#: option.c:2520
#, c-format
msgid "no search directive found in %s"
msgstr "intet søke direktiv funnet i %s"
-#: forward.c:376
+#: forward.c:381
#, c-format
msgid "nameserver %s refused to do a recursive query"
msgstr "navnetjener %s nektet å gjøre et rekursivt oppslag"
-#: isc.c:73 dnsmasq.c:723
+#: forward.c:409
+msgid "possible DNS-rebind attack detected"
+msgstr ""
+
+#: isc.c:77 dnsmasq.c:747
#, fuzzy, c-format
msgid "failed to access %s: %s"
msgstr "feilet å få tilgang til %s: %m"
-#: isc.c:89
+#: isc.c:93
#, fuzzy, c-format
msgid "failed to load %s: %s"
msgstr "feilet å laste %s: %m"
-#: isc.c:93 dnsmasq.c:745
+#: isc.c:97 dnsmasq.c:769
#, c-format
msgid "reading %s"
msgstr "leser %s"
-#: isc.c:115
+#: isc.c:119
#, c-format
msgid "bad name in %s"
msgstr "dårlig navn i %s"
-#: isc.c:177
+#: isc.c:181
#, 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:41
+#: network.c:45
#, fuzzy, c-format
msgid "unknown interface %s in bridge-interface"
msgstr "ukjent tilknytning (interface) %s"
-#: network.c:377 dnsmasq.c:170
+#: network.c:389 dnsmasq.c:180
#, c-format
msgid "failed to create listening socket: %s"
msgstr "feilet å lage lytte socket: %s"
-#: network.c:384
+#: network.c:396
#, c-format
msgid "failed to set IPV6 options on listening socket: %s"
msgstr "feilet å sette IPv6 opsjoner på lytte socket: %s"
-#: network.c:402
+#: network.c:415
#, c-format
msgid "failed to bind listening socket for %s: %s"
msgstr "feilet å binde lytte socket for %s: %s"
-#: network.c:410
+#: network.c:420
#, c-format
msgid "failed to listen on socket: %s"
msgstr "feilet å lytte på socket: %s"
-#: network.c:421
+#: network.c:432
#, fuzzy, c-format
msgid "failed to create TFTP socket: %s"
msgstr "feilet å lage lytte socket: %s"
-#: network.c:493
+#: network.c:549
+#, fuzzy, c-format
+msgid "failed to bind server socket for %s: %s"
+msgstr "feilet å binde lytte socket for %s: %s"
+
+#: network.c:582
#, c-format
msgid "ignoring nameserver %s - local interface"
msgstr "ignorerer navnetjener %s - lokal tilknytning"
-#: network.c:502
+#: network.c:591
#, fuzzy, c-format
msgid "ignoring nameserver %s - cannot make/bind socket: %s"
msgstr "ignorerer navnetjener %s - kan ikke lage/dinde socket: %m"
-#: network.c:517
+#: network.c:606
msgid "unqualified"
msgstr "ikke kvalifisert"
-#: network.c:517
+#: network.c:606
msgid "names"
msgstr ""
-#: network.c:519
+#: network.c:608
msgid "default"
msgstr ""
-#: network.c:521
+#: network.c:610
msgid "domain"
msgstr "domene"
-#: network.c:524
+#: network.c:613
#, c-format
msgid "using local addresses only for %s %s"
msgstr "benytter lokale adresser kun for %s %s"
-#: network.c:526
+#: network.c:615
#, c-format
msgid "using nameserver %s#%d for %s %s"
msgstr "benytter navnetjener %s#%d for %s %s"
-#: network.c:529
+#: network.c:618
+#, fuzzy, c-format
+msgid "using nameserver %s#%d(via %s)"
+msgstr "benytter navnetjener %s#%d"
+
+#: network.c:620
#, c-format
msgid "using nameserver %s#%d"
msgstr "benytter navnetjener %s#%d"
-#: dnsmasq.c:106
+#: dnsmasq.c:110
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:128
+#: dnsmasq.c:132
#, fuzzy
msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
msgstr "DBus ikke tilgjengelig: sett HAVE_DBUS i src/config.h"
-#: dnsmasq.c:142
+#: dnsmasq.c:137
+msgid "asychronous logging is not available under Solaris"
+msgstr ""
+
+#: dnsmasq.c:151
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:152
+#: dnsmasq.c:161
#, c-format
msgid "failed to find list of interfaces: %s"
msgstr "feilet å finne liste av tilknytninger (interfaces): %s"
-#: dnsmasq.c:160
+#: dnsmasq.c:169
#, c-format
msgid "unknown interface %s"
msgstr "ukjent tilknytning (interface) %s"
-#: dnsmasq.c:166
+#: dnsmasq.c:175
#, c-format
msgid "no interface with address %s"
msgstr "ingen tilknytning (interface) med adresse %s"
-#: dnsmasq.c:181 dnsmasq.c:538
+#: dnsmasq.c:192 dnsmasq.c:561
#, c-format
msgid "DBus error: %s"
msgstr "DBus feil: %s"
-#: dnsmasq.c:184
+#: dnsmasq.c:195
msgid "DBus not available: set HAVE_DBUS in src/config.h"
msgstr "DBus ikke tilgjengelig: sett HAVE_DBUS i src/config.h"
-#: dnsmasq.c:216
+#: dnsmasq.c:204
#, fuzzy, c-format
msgid "cannot create pipe: %s"
msgstr "kan ikke lese %s: %s"
-#: dnsmasq.c:237
+#: dnsmasq.c:225
#, c-format
msgid "cannot fork into background: %s"
msgstr ""
-#: dnsmasq.c:335
+#: dnsmasq.c:239
+#, c-format
+msgid "cannot chdir to filesystem root: %s"
+msgstr ""
+
+#: dnsmasq.c:349
+#, fuzzy, c-format
+msgid "started, version %s DNS disabled"
+msgstr "startet, versjon %s mellomlager deaktivert"
+
+#: dnsmasq.c:351
#, c-format
msgid "started, version %s cachesize %d"
msgstr "startet, versjon %s mellomlager størrelse %d"
-#: dnsmasq.c:337
+#: dnsmasq.c:353
#, c-format
msgid "started, version %s cache disabled"
msgstr "startet, versjon %s mellomlager deaktivert"
-#: dnsmasq.c:339
+#: dnsmasq.c:355
#, c-format
msgid "compile time options: %s"
msgstr "kompilerings opsjoner: %s"
-#: dnsmasq.c:345
+#: dnsmasq.c:361
msgid "DBus support enabled: connected to system bus"
msgstr "DBus støtte aktivert: koblet til system buss"
-#: dnsmasq.c:347
+#: dnsmasq.c:363
msgid "DBus support enabled: bus connection pending"
msgstr "DBus støtte aktivert: avventer buss tilkobling"
-#: dnsmasq.c:352
+#: dnsmasq.c:368
msgid "setting --bind-interfaces option because of OS limitations"
msgstr "setter --bind-interfaces opsjon på grunn av OS begrensninger"
-#: dnsmasq.c:357
+#: dnsmasq.c:373
#, c-format
msgid "warning: interface %s does not currently exist"
msgstr "advarsel: nettverkskort %s eksisterer ikke for tiden"
-#: dnsmasq.c:362
+#: dnsmasq.c:378
msgid "warning: ignoring resolv-file flag because no-resolv is set"
msgstr ""
-#: dnsmasq.c:365
+#: dnsmasq.c:381
#, fuzzy
msgid "warning: no upstream servers configured"
msgstr "setter oppstrøms tjener fra DBus"
-#: dnsmasq.c:369
+#: dnsmasq.c:385
#, c-format
msgid "asynchronous logging enabled, queue limit is %d messages"
msgstr ""
-#: dnsmasq.c:381
+#: dnsmasq.c:397
#, 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:382
+#: dnsmasq.c:398
#, c-format
msgid "DHCP, IP range %s -- %s, lease time %s"
msgstr "DHCP, IP område %s -- %s, leie tid %s"
-#: dnsmasq.c:396
+#: dnsmasq.c:412
msgid "root is "
msgstr ""
-#: dnsmasq.c:396
+#: dnsmasq.c:412
#, fuzzy
msgid "enabled"
msgstr "deaktivert"
-#: dnsmasq.c:398
+#: dnsmasq.c:414
msgid "secure mode"
msgstr ""
-#: dnsmasq.c:418
+#: dnsmasq.c:440
#, c-format
msgid "restricting maximum simultaneous TFTP transfers to %d"
msgstr ""
-#: dnsmasq.c:427
+#: dnsmasq.c:449
#, c-format
msgid "warning: setting capabilities failed: %s"
msgstr ""
-#: dnsmasq.c:429
+#: dnsmasq.c:451
msgid "running as root"
msgstr "kjører som rot (root)"
-#: dnsmasq.c:540
+#: dnsmasq.c:563
msgid "connected to system DBus"
msgstr "tilkoblet til system DBus"
-#: dnsmasq.c:659
+#: dnsmasq.c:683
#, c-format
msgid "child process killed by signal %d"
msgstr ""
-#: dnsmasq.c:663
+#: dnsmasq.c:687
#, c-format
msgid "child process exited with status %d"
msgstr ""
-#: dnsmasq.c:667
+#: dnsmasq.c:691
#, fuzzy, c-format
msgid "failed to execute %s: %s"
msgstr "feilet å få tilgang til %s: %m"
-#: dnsmasq.c:671
+#: dnsmasq.c:695
#, fuzzy, c-format
msgid "failed to create helper: %s"
msgstr "feilet å lese %s: %m"
-#: dnsmasq.c:705
+#: dnsmasq.c:729
msgid "exiting on receipt of SIGTERM"
msgstr "avslutter etter mottak av SIGTERM"
-#: dnsmasq.c:756
+#: dnsmasq.c:780
#, fuzzy, c-format
msgid "no servers found in %s, will retry"
msgstr "intet søke direktiv funnet i %s"
-#: dhcp.c:32
+#: dhcp.c:38
#, c-format
msgid "cannot create DHCP socket : %s"
msgstr "kan ikke lage DHCP socket : %s"
-#: dhcp.c:41
+#: dhcp.c:50
#, c-format
msgid "failed to set options on DHCP socket: %s"
msgstr "feilet å sette opsjoner på DHCP socket: %s"
-#: dhcp.c:59
+#: dhcp.c:68
#, fuzzy, c-format
msgid "failed to set SO_REUSE{ADDR|PORT} on DHCP socket: %s"
msgstr "feilet å sette SO_REUSEADDR på DHCP socket: %s"
-#: dhcp.c:72
+#: dhcp.c:81
#, c-format
msgid "failed to bind DHCP server socket: %s"
msgstr "feilet å binde DHCP tjener socket: %s"
-#: dhcp.c:85
+#: dhcp.c:94
#, c-format
msgid "cannot create ICMP raw socket: %s."
msgstr "kan ikke lage ICMP raw socket: %s"
-#: dhcp.c:100
-#, c-format
-msgid "duplicate IP address %s in dhcp-config directive."
-msgstr "dubliserte IP adresser i %s dhcp-config direktiv."
-
-#: dhcp.c:103
-#, fuzzy, c-format
-msgid "illegal domain %s in dhcp-config directive."
-msgstr "dubliserte IP adresser i %s dhcp-config direktiv."
-
-#: dhcp.c:221
+#: dhcp.c:223
#, c-format
msgid "DHCP packet received on %s which has no address"
msgstr ""
-#: dhcp.c:352
+#: dhcp.c:382
#, 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:669
+#: dhcp.c:709
#, fuzzy, c-format
msgid "failed to read %s:%s"
msgstr "feilet å lese %s: %m"
-#: dhcp.c:704
+#: dhcp.c:744
#, c-format
msgid "bad line at %s line %d"
msgstr "dårlig linje ved %s linje %d"
-#: dhcp.c:826
+#: dhcp.c:847
+#, c-format
+msgid "duplicate IP address %s in dhcp-config directive."
+msgstr "dubliserte IP adresser i %s dhcp-config direktiv."
+
+#: dhcp.c:850
#, fuzzy, c-format
msgid "duplicate IP address %s in %s."
msgstr "dubliserte IP adresser i %s dhcp-config direktiv."
-#: dhcp.c:832
+#: dhcp.c:858
+#, fuzzy, c-format
+msgid "illegal domain %s in dhcp-config directive."
+msgstr "dubliserte IP adresser i %s dhcp-config direktiv."
+
+#: dhcp.c:860
#, c-format
msgid "illegal domain %s in %s."
msgstr ""
-#: dhcp.c:839
-#, fuzzy, c-format
-msgid "read %s - %d hosts"
-msgstr "les %s - %d adresser"
+#: dhcp.c:899
+#, c-format
+msgid "%s has more then one address in hostsfile, using %s for DHCP"
+msgstr ""
-#: dhcp.c:866
+#: dhcp.c:904
#, c-format
msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr "dubliserte IP adresser i %s (%s) i dhcp-config direktiv"
-#: lease.c:54
+#: lease.c:58
#, fuzzy, c-format
msgid "cannot open or create lease file %s: %s"
msgstr "kan ikke åpne eller lage leie fil: %s"
-#: lease.c:80
+#: lease.c:84
msgid "too many stored leases"
msgstr "for mange lagrede leier"
-#: lease.c:121
+#: lease.c:125
#, fuzzy, c-format
msgid "cannot run lease-init script %s: %s"
msgstr "kan ikke lese %s: %s"
-#: lease.c:127
+#: lease.c:131
#, c-format
msgid "lease-init script returned exit code %s"
msgstr ""
-#: lease.c:234
+#: lease.c:238
#, fuzzy, c-format
msgid "failed to write %s: %s (retry in %us)"
msgstr "feilet å lese %s: %m"
-#: rfc2131.c:300
+#: rfc2131.c:303
#, 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:301
+#: rfc2131.c:304
msgid "with subnet selector"
msgstr "med subnet velger"
-#: rfc2131.c:301
+#: rfc2131.c:304
msgid "via"
msgstr "via"
-#: rfc2131.c:312
+#: rfc2131.c:315
#, c-format
msgid "DHCP packet: transaction-id is %u"
msgstr ""
-#: rfc2131.c:317
+#: rfc2131.c:320
#, c-format
msgid "Available DHCP subnet: %s/%s"
msgstr ""
-#: rfc2131.c:319
+#: rfc2131.c:322
#, c-format
msgid "Available DHCP range: %s -- %s"
msgstr ""
-#: rfc2131.c:347 rfc2131.c:378
+#: rfc2131.c:350 rfc2131.c:381
msgid "disabled"
msgstr "deaktivert"
-#: rfc2131.c:390 rfc2131.c:852
+#: rfc2131.c:393 rfc2131.c:873
msgid "address in use"
msgstr "adresse i bruk"
-#: rfc2131.c:393
+#: rfc2131.c:396
msgid "no address configured"
msgstr "ingen adresse konfigurert"
-#: rfc2131.c:406 rfc2131.c:720
+#: rfc2131.c:409 rfc2131.c:736
msgid "no address available"
msgstr "ingen adresse tilgjengelig"
-#: rfc2131.c:416
-#, c-format
-msgid "Limit of %d leases exceeded."
-msgstr ""
-
-#: rfc2131.c:417 rfc2131.c:862
+#: rfc2131.c:418 rfc2131.c:883
msgid "no leases left"
msgstr "ingen leier igjen"
-#: rfc2131.c:421 rfc2131.c:826
+#: rfc2131.c:421 rfc2131.c:847
msgid "wrong network"
msgstr "galt nettverk"
-#: rfc2131.c:519
+#: rfc2131.c:520
#, c-format
msgid "Ignoring domain %s for DHCP host name %s"
msgstr ""
-#: rfc2131.c:598
+#: rfc2131.c:614
#, c-format
msgid "Vendor class: %s"
msgstr ""
-#: rfc2131.c:600
+#: rfc2131.c:616
#, c-format
msgid "User class: %s"
msgstr ""
-#: rfc2131.c:641
+#: rfc2131.c:657
#, fuzzy, c-format
msgid "disabling DHCP static address %s for %s"
msgstr "deaktiverer DHCP statisk adresse %s"
-#: rfc2131.c:662
+#: rfc2131.c:678
msgid "unknown lease"
msgstr "ukjent leie"
-#: rfc2131.c:671 rfc2131.c:970
+#: rfc2131.c:687 rfc2131.c:992
msgid "ignored"
msgstr "oversett"
-#: rfc2131.c:691
+#: rfc2131.c:707
#, c-format
msgid "not using configured address %s because it is leased to %s"
msgstr ""
-#: rfc2131.c:701
+#: rfc2131.c:717
#, c-format
msgid ""
"not using configured address %s because it is in use by the server or relay"
msgstr ""
-#: rfc2131.c:704
+#: rfc2131.c:720
#, c-format
msgid "not using configured address %s because it was previously declined"
msgstr ""
-#: rfc2131.c:718 rfc2131.c:855
+#: rfc2131.c:734 rfc2131.c:876
msgid "no unique-id"
msgstr ""
-#: rfc2131.c:789
+#: rfc2131.c:806
msgid "wrong address"
msgstr "gal adresse"
-#: rfc2131.c:802
+#: rfc2131.c:823
msgid "lease not found"
msgstr "leie ikke funnet"
-#: rfc2131.c:834
+#: rfc2131.c:855
msgid "address not available"
msgstr "adresse ikke tilgjengelig"
-#: rfc2131.c:845
+#: rfc2131.c:866
msgid "static lease available"
msgstr "statisk leie tilgjengelig"
-#: rfc2131.c:849
+#: rfc2131.c:870
msgid "address reserved"
msgstr "adresse reservert"
-#: rfc2131.c:1252
+#: rfc2131.c:1265
#, c-format
msgid "tags: %s"
msgstr ""
-#: rfc2131.c:1334
+#: rfc2131.c:1352
#, fuzzy, c-format
msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
msgstr "kan ikke sende DHCP opsjon %d: ikke mer plass i pakken"
-#: rfc2131.c:1488
+#: rfc2131.c:1507
#, fuzzy, c-format
msgid "requested options: %s"
msgstr "kompilerings opsjoner: %s"
-#: rfc2131.c:1519
-#, c-format
-msgid "server name: %s"
-msgstr ""
+#: rfc2131.c:1556
+#, fuzzy, c-format
+msgid "next server: %s"
+msgstr "DBus feil: %s"
-#: rfc2131.c:1531
+#: rfc2131.c:1580
#, c-format
msgid "bootfile name: %s"
msgstr ""
-#: rfc2131.c:1540
-#, fuzzy, c-format
-msgid "next server: %s"
-msgstr "DBus feil: %s"
+#: rfc2131.c:1583
+#, c-format
+msgid "server name: %s"
+msgstr ""
-#: netlink.c:59
+#: netlink.c:63
#, fuzzy, c-format
msgid "cannot create netlink socket: %s"
msgstr "kan ikke binde netlink socket: %s"
-#: netlink.c:226
+#: netlink.c:230
#, fuzzy, c-format
msgid "netlink returns error: %s"
msgstr "DBus feil: %s"
-#: dbus.c:111
+#: dbus.c:115
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
+#: dbus.c:241
msgid "setting upstream servers from DBus"
msgstr "setter oppstrøms tjener fra DBus"
-#: dbus.c:275
+#: dbus.c:279
msgid "could not register a DBus message handler"
msgstr "kunne ikke registrere en DBus meldingshåndterer"
-#: bpf.c:43
+#: bpf.c:146
#, c-format
msgid "cannot create DHCP BPF socket: %s"
msgstr "kan ikke lage DHCP BPF socket: %s"
-#: bpf.c:71
+#: bpf.c:174
#, fuzzy, c-format
msgid "DHCP request for unsupported hardware type (%d) received on %s"
msgstr "DHCP krav for ikke støttet maskinvare type (%d) mottatt på %s"
-#: tftp.c:158
+#: tftp.c:173
+msgid "unable to get free port for TFTP"
+msgstr ""
+
+#: tftp.c:188
#, c-format
msgid "unsupported request from %s"
msgstr ""
-#: tftp.c:236
+#: tftp.c:266
#, c-format
msgid "TFTP sent %s to %s"
msgstr ""
-#: tftp.c:259
+#: tftp.c:289
#, fuzzy, c-format
msgid "file %s not found"
msgstr "leie ikke funnet"
-#: tftp.c:369
+#: tftp.c:399
#, c-format
msgid "TFTP error %d %s received from %s"
msgstr ""
-#: tftp.c:400
+#: tftp.c:430
#, fuzzy, c-format
msgid "TFTP failed sending %s to %s"
msgstr "feilet å lese %s: %m"
-#: log.c:69
+#: log.c:73
#, fuzzy, c-format
msgid "cannot open %s: %s"
msgstr "kan ikke åpne %s:%s"
-#: log.c:146
+#: log.c:89
+#, fuzzy, c-format
+msgid "warning: failed to change owner of %s: %s"
+msgstr "feilet å laste navn fra %s: %m"
+
+#: log.c:161
#, c-format
msgid "overflow: %d log entries lost"
msgstr ""
-#: log.c:223
+#: log.c:238
#, c-format
msgid "log failed: %s"
msgstr ""
-#: log.c:378
+#: log.c:394
msgid "FAILED to start up"
msgstr "FEILET å starte opp"
+#, fuzzy
+#~ msgid "read %s - %d hosts"
+#~ msgstr "les %s - %d adresser"
+
#~ msgid "bad dhcp-host"
#~ msgstr "dårlig dhcp-vert"
diff --git a/po/pl.po b/po/pl.po
index 7d9f199..7cf5247 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dnsmasq 2.24\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-08-29 11:09+0100\n"
+"POT-Creation-Date: 2008-02-12 11: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"
@@ -16,31 +16,31 @@ msgstr ""
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2);\n"
-#: cache.c:671
+#: cache.c:680
#, fuzzy, c-format
msgid "failed to load names from %s: %s"
msgstr "b³±d ³adowania nazw z %s: %m"
-#: cache.c:705 dhcp.c:717
+#: cache.c:714 dhcp.c:757
#, fuzzy, c-format
msgid "bad address at %s line %d"
msgstr "b³êdna nazwa w %s, linia %d"
-#: cache.c:752 dhcp.c:731
+#: cache.c:761 dhcp.c:771
#, c-format
msgid "bad name at %s line %d"
msgstr "b³êdna nazwa w %s, linia %d"
-#: cache.c:759 dhcp.c:785
+#: cache.c:768 dhcp.c:825
#, c-format
msgid "read %s - %d addresses"
msgstr "przeczytano %s - %d adresów"
-#: cache.c:797
+#: cache.c:806
msgid "cleared cache"
msgstr "wyczyszczono cache"
-#: cache.c:844
+#: cache.c:855
#, c-format
msgid ""
"not giving name %s to the DHCP lease of %s because the name exists in %s "
@@ -49,388 +49,439 @@ msgstr ""
"nazwa %s nie zosta³a nadana dzier¿awie DHCP %s, poniewa¿ nazwa istnieje w %s "
"i ma adres %s"
-#: cache.c:884
+#: cache.c:907
+#, c-format
+msgid "time %lu"
+msgstr ""
+
+#: cache.c:908
#, fuzzy, c-format
-msgid ""
-"time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache "
-"entries."
+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:157 option.c:758
+#: cache.c:910
+#, c-format
+msgid "queries forwarded %u, queries answered locally %u"
+msgstr ""
+
+#: cache.c:933
+#, c-format
+msgid "server %s#%d: queries sent %u, retried or failed %u"
+msgstr ""
+
+#: util.c:160
msgid "could not get memory"
msgstr "nie mo¿na pobraæ pamiêci"
-#: util.c:167
+#: util.c:170
#, fuzzy, c-format
msgid "failed to allocate %d bytes"
msgstr "b³±d ³adowania %s: %m"
-#: util.c:272
+#: util.c:275
#, c-format
msgid "infinite"
msgstr "nieskoñczona"
-#: option.c:188
+#: option.c:244
msgid "Specify local address(es) to listen on."
msgstr "Adres(y) lokalne do nas³uchiwania."
-#: option.c:189
+#: option.c:245
msgid "Return ipaddr for all hosts in specified domains."
msgstr "Zwracanie adresu IP dla wszystkich hostów w podanych domenach."
-#: option.c:190
+#: option.c:246
msgid "Fake reverse lookups for RFC1918 private address ranges."
msgstr "Symulacja reverse lookups dla adresów prywatnych opisanych w RFC1918."
-#: option.c:191
+#: option.c:247
msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
msgstr "Adres IP traktowany jak NXDOMAIN"
-#: option.c:192
+#: option.c:248
#, 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:193
+#: option.c:249
#, c-format
msgid "Specify configuration file (defaults to %s)."
msgstr "¦cie¿ka do pliku konfiguracyjnego (domy¶lna: %s)"
-#: option.c:194
+#: option.c:250
msgid "Do NOT fork into the background: run in debug mode."
msgstr "NIE twórz procesu potomnego w tle: dzia³anie w trybie debugowania."
-#: option.c:195
+#: option.c:251
msgid "Do NOT forward queries with no domain part."
msgstr "Wy³±czenie przekazywania zapytañ bez czê¶ci domenowej."
-#: option.c:196
+#: option.c:252
msgid "Return self-pointing MX records for local hosts."
msgstr "Zwracanie samowskazuj±cego rekordu MX dla lokalnych hostów."
-#: option.c:197
+#: option.c:253
msgid "Expand simple names in /etc/hosts with domain-suffix."
msgstr "Rozwijanie prostych nazw z /etc/hosts przyrostkiem domenowym."
-#: option.c:198
+#: option.c:254
msgid "Don't forward spurious DNS requests from Windows hosts."
msgstr "Wy³±czenie przekazywania pozornych zapytañ DNS z komputerów Windows"
-#: option.c:199
+#: option.c:255
msgid "Enable DHCP in the range given with lease duration."
msgstr "Enable DHCP w zakresie okre¶lonym czasem dzier¿awy."
-#: option.c:200
+#: option.c:256
#, 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:201
+#: option.c:257
msgid "Set address or hostname for a specified machine."
msgstr "Ustawienie adresu lub nazwy hosta dla okre¶lonej maszyny."
-#: option.c:202
+#: option.c:258
msgid "Read DHCP host specs from file"
msgstr ""
-#: option.c:203
+#: option.c:259
+msgid "Read DHCP option specs from file"
+msgstr ""
+
+#: option.c:260
#, c-format
msgid "Do NOT load %s file."
msgstr "Ignorowanie pliku %s."
-#: option.c:204
+#: option.c:261
#, c-format
msgid "Specify a hosts file to be read in addition to %s."
msgstr "Dodatkowy plik hostów poza %s."
-#: option.c:205
+#: option.c:262
msgid "Specify interface(s) to listen on."
msgstr "Interfejs(y) do nas³uchiwania."
-#: option.c:206
+#: option.c:263
msgid "Specify interface(s) NOT to listen on."
msgstr "Interfejs(y), na których nie nas³uchiwaæ."
-#: option.c:207
+#: option.c:264
#, fuzzy
msgid "Map DHCP user class to tag."
msgstr "W³±czenie mapowania klasy u¿ytkownika DHCP do option set."
-#: option.c:208
+#: option.c:265
msgid "Map RFC3046 circuit-id to tag."
msgstr ""
-#: option.c:209
+#: option.c:266
msgid "Map RFC3046 remote-id to tag."
msgstr ""
-#: option.c:210
+#: option.c:267
msgid "Map RFC3993 subscriber-id to tag."
msgstr ""
-#: option.c:211
+#: option.c:268
#, fuzzy
msgid "Don't do DHCP for hosts with tag set."
msgstr ""
"Wy³±czenie odpowiadania na ¿adania DHCP hostów okre¶lonych w option set"
-#: option.c:212
+#: option.c:269
+#, fuzzy
+msgid "Force broadcast replies for hosts with tag set."
+msgstr ""
+"Wy³±czenie odpowiadania na ¿adania DHCP hostów okre¶lonych w option set"
+
+#: option.c:270
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:213
+#: option.c:271
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:214
+#: option.c:272
#, 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:215
+#: option.c:273
msgid "Return MX records for local hosts."
msgstr "W³±czenie zwracania rekord MX dla hostów lokalnych."
-#: option.c:216
+#: option.c:274
msgid "Specify an MX record."
msgstr "Specyfikacja rekordu MX."
-#: option.c:217
+#: option.c:275
msgid "Specify BOOTP options to DHCP server."
msgstr "Okre¶lenie opcji BOOTP serwera DHCP."
-#: option.c:218
+#: option.c:276
#, 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:219
+#: option.c:277
msgid "Do NOT cache failed search results."
msgstr ""
"Wy³±czenie zapisywania w pamiêci podrêcznej nieudanych wyników wyszukiwania."
-#: option.c:220
+#: option.c:278
#, 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:221
+#: option.c:279
#, fuzzy
msgid "Specify options to be sent to DHCP clients."
msgstr "Dodatkowe opcje ustawieñ dla klientów DHCP."
-#: option.c:222
+#: option.c:280
msgid "DHCP option sent even if the client does not request it."
msgstr ""
-#: option.c:223
+#: option.c:281
msgid "Specify port to listen for DNS requests on (defaults to 53)."
msgstr "Port nas³uchiwania zapytañ DNS (domy¶lnie: 53)."
-#: option.c:224
+#: option.c:282
#, 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:225
-msgid "Log queries."
+#: option.c:283
+#, fuzzy
+msgid "Log DNS queries."
msgstr "Zapytania zapisywane w pliku log."
-#: option.c:226
-msgid "Force the originating port for upstream queries."
+#: option.c:284
+msgid "Force the originating port for upstream DNS queries."
msgstr ""
-#: option.c:227
+#: option.c:285
msgid "Do NOT read resolv.conf."
msgstr "Wy³±czenie czytania pliku resolv.conf"
-#: option.c:228
+#: option.c:286
#, c-format
msgid "Specify path to resolv.conf (defaults to %s)."
msgstr "Podaj ¶cie¿kê do pliku resolv.conf (domy¶lnie: %s)."
-#: option.c:229
+#: option.c:287
msgid "Specify address(es) of upstream servers with optional domains."
msgstr ""
-#: option.c:230
+#: option.c:288
msgid "Never forward queries to specified domains."
msgstr "Wy³±czenie przekazywania zapytañ do okre¶lonych domen."
-#: option.c:231
+#: option.c:289
msgid "Specify the domain to be assigned in DHCP leases."
msgstr "Nazwa domeny, która bêdzie przypisana w dzier¿awach DHCP."
-#: option.c:232
+#: option.c:290
msgid "Specify default target in an MX record."
msgstr "Okre¶lenie domy¶lnego celu w rekordzie MX."
-#: option.c:233
+#: option.c:291
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:234
+#: option.c:292
+#, fuzzy
+msgid "Specify time-to-live in seconds for negative caching."
+msgstr ""
+"Okre¶lenie czasu wa¿no¶ci (time-to-live) w sekundach odpowiedzi branych z /"
+"etc/hosts."
+
+#: option.c:293
#, 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:235
+#: option.c:294
#, fuzzy
msgid "Map DHCP vendor class to tag."
msgstr "Mapowanie nazwy dystrybutora DHCP do ustawieñ opcji."
-#: option.c:236
+#: option.c:295
msgid "Display dnsmasq version and copyright information."
msgstr ""
"W³±czenie pokazywania wersji dnsmasq i informacji o ochronie praw autorskich."
-#: option.c:237
+#: option.c:296
msgid "Translate IPv4 addresses from upstream servers."
msgstr ""
-#: option.c:238
+#: option.c:297
msgid "Specify a SRV record."
msgstr "Okre¶lenie rekordu SRV."
-#: option.c:239
+#: option.c:298
msgid "Display this message. Use --help dhcp for known DHCP options."
msgstr ""
-#: option.c:240
+#: option.c:299
#, fuzzy, c-format
msgid "Specify path of PID file (defaults to %s)."
msgstr "Okre¶lenie ¶cie¿ki do pliku PID. (domy¶lnie: %s)."
-#: option.c:241
+#: option.c:300
#, c-format
msgid "Specify maximum number of DHCP leases (defaults to %s)."
msgstr "Maksymalna liczba dzier¿aw DHCP. (domy¶lnie: %s)."
-#: option.c:242
+#: option.c:301
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:243
+#: option.c:302
msgid "Specify TXT DNS record."
msgstr "Rekord TXT DNS."
-#: option.c:244
+#: option.c:303
#, fuzzy
msgid "Specify PTR DNS record."
msgstr "Rekord TXT DNS."
-#: option.c:245
+#: option.c:304
msgid "Give DNS name to IPv4 address of interface."
msgstr ""
-#: option.c:246
+#: option.c:305
msgid "Bind only to interfaces in use."
msgstr "W³±czenie nas³uchiwania tylko na u¿ywanych interfejsach."
-#: option.c:247
+#: option.c:306
#, c-format
msgid "Read DHCP static host information from %s."
msgstr "Statycznych informacji DHCP hosta z pliku %s."
-#: option.c:248
+#: option.c:307
msgid "Enable the DBus interface for setting upstream servers, etc."
msgstr ""
-#: option.c:249
+#: option.c:308
msgid "Do not provide DHCP on this interface, only provide DNS."
msgstr "Wy³±czenie DHCP na tym interfejsie, w³±czenie tylko DNS."
-#: option.c:250
+#: option.c:309
msgid "Enable dynamic address allocation for bootp."
msgstr "W³±czenie automatycznej alokacji adresu dla BOOTP."
-#: option.c:251
+#: option.c:310
#, fuzzy
msgid "Map MAC address (with wildcards) to option set."
msgstr "Mapowanie nazwy dystrybutora DHCP do ustawieñ opcji."
-#: option.c:253
+#: option.c:312
msgid "Treat DHCP requests on aliases as arriving from interface."
msgstr ""
-#: option.c:255
+#: option.c:314
msgid "Disable ICMP echo address checking in the DHCP server."
msgstr ""
-#: option.c:256
+#: option.c:315
msgid "Script to run on DHCP lease creation and destruction."
msgstr ""
-#: option.c:257
+#: option.c:316
msgid "Read configuration from all the files in this directory."
msgstr ""
-#: option.c:258
+#: option.c:317
#, fuzzy
msgid "Log to this syslog facility or file. (defaults to DAEMON)"
msgstr "Po starcie zmiana u¿ytkownika procesu na podanego. (domy¶lnie: %s)."
-#: option.c:259
+#: option.c:318
msgid "Read leases at startup, but never write the lease file."
msgstr ""
-#: option.c:260
+#: option.c:319
#, fuzzy, c-format
msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
msgstr "Maksymalna liczba dzier¿aw DHCP. (domy¶lnie: %s)."
-#: option.c:261
+#: option.c:320
#, c-format
msgid "Clear DNS cache when reloading %s."
msgstr ""
-#: option.c:262
+#: option.c:321
msgid "Ignore hostnames provided by DHCP clients."
msgstr ""
-#: option.c:263
+#: option.c:322
+msgid "Do NOT reuse filename and server fields for extra DHCP options."
+msgstr ""
+
+#: option.c:323
msgid "Enable integrated read-only TFTP server."
msgstr ""
-#: option.c:264
+#: option.c:324
msgid "Export files by TFTP only from the specified subtree."
msgstr ""
-#: option.c:265
+#: option.c:325
msgid "Add client IP address to tftp-root."
msgstr ""
-#: option.c:266
+#: option.c:326
msgid "Allow access only to files owned by the user running dnsmasq."
msgstr ""
-#: option.c:267
+#: option.c:327
#, fuzzy, c-format
msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
msgstr "Maksymalna liczba dzier¿aw DHCP. (domy¶lnie: %s)."
-#: option.c:268
+#: option.c:328
msgid "Disable the TFTP blocksize extension."
msgstr ""
-#: option.c:269
+#: option.c:329
+msgid "Ephemeral port range for use by TFTP transfers."
+msgstr ""
+
+#: option.c:330
msgid "Extra logging for DHCP."
msgstr ""
-#: option.c:270
+#: option.c:331
msgid "Enable async. logging; optionally set queue length."
msgstr ""
-#: option.c:501
+#: option.c:332
+msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
+msgstr ""
+
+#: option.c:333
+msgid "Always perform DNS queries to all servers."
+msgstr ""
+
+#: option.c:334
+msgid "Set tag if client includes option in request."
+msgstr ""
+
+#: option.c:585
#, c-format
msgid ""
"Usage: dnsmasq [options]\n"
@@ -439,172 +490,190 @@ msgstr ""
"U¿ycie: dnsmasq [opcje]\n"
"\n"
-#: option.c:503
+#: option.c:587
#, c-format
msgid "Use short options only on the command line.\n"
msgstr "Tylko krótkie opcje w linii komend.\n"
-#: option.c:505
+#: option.c:589
#, c-format
msgid "Valid options are :\n"
msgstr "Obs³ugiwane opcje:\n"
-#: option.c:526
+#: option.c:610
#, c-format
msgid "Known DHCP options:\n"
msgstr ""
-#: option.c:599
+#: option.c:683
msgid "bad dhcp-option"
msgstr "b³±d w dhcp-option"
-#: option.c:655
+#: option.c:739
#, fuzzy
msgid "bad IP address"
msgstr "przeczytano %s - %d adresów"
-#: option.c:753
+#: option.c:837
msgid "bad domain in dhcp-option"
msgstr "nieprawid³owa nazwa domeny w dhcp-option"
-#: option.c:809
+#: option.c:895
msgid "dhcp-option too long"
msgstr "zbyt d³uga nazwa w dhcp-option"
-#: option.c:853
+#: option.c:942
#, fuzzy, c-format
msgid "cannot access directory %s: %s"
msgstr "b³±d odczytu z %s: %s"
-#: option.c:872 tftp.c:313
+#: option.c:961 tftp.c:343
#, fuzzy, c-format
msgid "cannot access %s: %s"
msgstr "b³±d odczytu z %s: %s"
-#: option.c:913
+#: option.c:998
msgid "only one dhcp-hostsfile allowed"
msgstr ""
-#: option.c:962
+#: option.c:1005
+msgid "only one dhcp-optsfile allowed"
+msgstr ""
+
+#: option.c:1049
msgid "bad MX preference"
msgstr ""
-#: option.c:971
+#: option.c:1053
msgid "bad MX name"
msgstr "b³êdna nazwa MX"
-#: option.c:989
+#: option.c:1067
msgid "bad MX target"
msgstr "b³êdny cel MX"
-#: option.c:1001
+#: option.c:1078
msgid "cannot run scripts under uClinux"
msgstr ""
-#: option.c:1196 option.c:1207
+#: option.c:1265 option.c:1273
msgid "bad port"
msgstr "nieprawid³owy port"
-#: option.c:1349
+#: option.c:1293 option.c:1318
+msgid "interface binding not supported"
+msgstr ""
+
+#: option.c:1427
+#, fuzzy
+msgid "bad port range"
+msgstr "nieprawid³owy port"
+
+#: option.c:1444
msgid "bad bridge-interface"
msgstr ""
-#: option.c:1391
+#: option.c:1485
msgid "bad dhcp-range"
msgstr "nieprawid³owy zakres dhcp-range"
-#: option.c:1419
+#: option.c:1511
msgid "only one netid tag allowed"
msgstr ""
-#: option.c:1461
+#: option.c:1551
msgid "inconsistent DHCP range"
msgstr "niespójny zakres DHCP"
-#: option.c:1637
+#: option.c:1719
#, fuzzy
msgid "bad DHCP host name"
msgstr "b³êdna nazwa MX"
-#: option.c:1861
+#: option.c:1959
#, fuzzy
msgid "bad interface name"
msgstr "b³êdna nazwa MX"
-#: option.c:1885
+#: option.c:1979
#, fuzzy
msgid "bad PTR record"
msgstr "b³±d w rekordzie SRV"
-#: option.c:1909
-msgid "bad TXT record"
-msgstr "nieprawid³owy rekord TX"
-
-#: option.c:1941
+#: option.c:1999
msgid "TXT record string too long"
msgstr "zbyt d³ugi rekord TXT"
-#: option.c:1980
+#: option.c:2003
+msgid "bad TXT record"
+msgstr "nieprawid³owy rekord TX"
+
+#: option.c:2063
msgid "bad SRV record"
msgstr "b³±d w rekordzie SRV"
-#: option.c:1992
+#: option.c:2072
msgid "bad SRV target"
msgstr "nieprawid³owy cel SRV"
-#: option.c:2003
+#: option.c:2080
msgid "invalid port number"
msgstr "nieprawid³owy port"
-#: option.c:2013
+#: option.c:2087
msgid "invalid priority"
msgstr "nieprawid³owy priorytet"
-#: option.c:2023
+#: option.c:2094
msgid "invalid weight"
msgstr "nieprawid³owe znaczenie"
-#: option.c:2054
+#: option.c:2130
#, c-format
msgid "files nested too deep in %s"
msgstr ""
-#: option.c:2062 tftp.c:467
+#: option.c:2138 tftp.c:497
#, c-format
msgid "cannot read %s: %s"
msgstr "b³±d odczytu z %s: %s"
-#: option.c:2114
+#: option.c:2199
msgid "missing \""
msgstr "brakuje \""
-#: option.c:2161
+#: option.c:2246
msgid "bad option"
msgstr "nieprawid³owa opcja"
-#: option.c:2163
+#: option.c:2248
msgid "extraneous parameter"
msgstr "dodatkowy parametr"
-#: option.c:2165
+#: option.c:2250
msgid "missing parameter"
msgstr "brak parametru"
-#: option.c:2173
+#: option.c:2258
msgid "error"
msgstr "b³±d"
-#: option.c:2179
+#: option.c:2264
#, c-format
msgid "%s at line %d of %%s"
msgstr "%s w linii %d z %%s"
-#: option.c:2252
+#: option.c:2304 option.c:2334
+#, fuzzy, c-format
+msgid "read %s"
+msgstr "czytanie %s"
+
+#: option.c:2400
#, c-format
msgid "Dnsmasq version %s %s\n"
msgstr "Dnsmasq, wersja %s %s\n"
-#: option.c:2253
+#: option.c:2401
#, c-format
msgid ""
"Compile time options %s\n"
@@ -613,656 +682,692 @@ msgstr ""
"Wkompilowane opcje %s\n"
"\n"
-#: option.c:2254
+#: option.c:2402
#, c-format
msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
msgstr "Oprogramowanie to nie zawiera ¿adnych gwarancji.\n"
-#: option.c:2255
+#: option.c:2403
#, 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:2256
-#, c-format
-msgid "under the terms of the GNU General Public License, version 2.\n"
+#: option.c:2404
+#, fuzzy, c-format
+msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
msgstr "na warunkach okre¶lonych w GNU General Public Licence, wersja 2.\n"
-#: option.c:2267
+#: option.c:2415
msgid "try --help"
msgstr ""
-#: option.c:2269
+#: option.c:2417
msgid "try -w"
msgstr ""
-#: option.c:2272
+#: option.c:2420
#, fuzzy, c-format
msgid "bad command line options: %s"
msgstr "nieprawid³owa opcja linii komend: %s."
-#: option.c:2313
+#: option.c:2461
#, c-format
msgid "cannot get host-name: %s"
msgstr "nie mo¿na pobraæ nazwy hosta: %s"
-#: option.c:2341
+#: option.c:2489
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:2351
+#: option.c:2499
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:2354 network.c:549
+#: option.c:2502 network.c:640
#, fuzzy, c-format
msgid "failed to read %s: %s"
msgstr "b³±d w odczycie %s: %m"
-#: option.c:2372
+#: option.c:2520
#, c-format
msgid "no search directive found in %s"
msgstr "brak wytycznych wyszukiwania w %s"
-#: forward.c:376
+#: forward.c:381
#, c-format
msgid "nameserver %s refused to do a recursive query"
msgstr "serwer nazw %s odmawia wykonania zapytania rekursywnego"
-#: isc.c:73 dnsmasq.c:723
+#: forward.c:409
+msgid "possible DNS-rebind attack detected"
+msgstr ""
+
+#: isc.c:77 dnsmasq.c:747
#, fuzzy, c-format
msgid "failed to access %s: %s"
msgstr "b³±d w dostêpie do %s: %m"
-#: isc.c:89
+#: isc.c:93
#, fuzzy, c-format
msgid "failed to load %s: %s"
msgstr "b³±d ³adowania %s: %m"
-#: isc.c:93 dnsmasq.c:745
+#: isc.c:97 dnsmasq.c:769
#, c-format
msgid "reading %s"
msgstr "czytanie %s"
-#: isc.c:115
+#: isc.c:119
#, c-format
msgid "bad name in %s"
msgstr "nieprawid³owa nazwa w %s"
-#: isc.c:177
+#: isc.c:181
#, 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:41
+#: network.c:45
#, fuzzy, c-format
msgid "unknown interface %s in bridge-interface"
msgstr "nieznany interfejs %s"
-#: network.c:377 dnsmasq.c:170
+#: network.c:389 dnsmasq.c:180
#, c-format
msgid "failed to create listening socket: %s"
msgstr "b³±d podczas tworzenia gniazda: %s"
-#: network.c:384
+#: network.c:396
#, 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:402
+#: network.c:415
#, 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:410
+#: network.c:420
#, c-format
msgid "failed to listen on socket: %s"
msgstr "b³±d w³±czenia nas³uchiwania gniazda: %s"
-#: network.c:421
+#: network.c:432
#, fuzzy, c-format
msgid "failed to create TFTP socket: %s"
msgstr "b³±d podczas tworzenia gniazda: %s"
-#: network.c:493
+#: network.c:549
+#, fuzzy, c-format
+msgid "failed to bind server socket for %s: %s"
+msgstr "b³±d pod³±czenia nas³uchuj±cego gniazda dla %s: %s"
+
+#: network.c:582
#, c-format
msgid "ignoring nameserver %s - local interface"
msgstr "ignorowanie serwera nazw %s - interfejs lokalny"
-#: network.c:502
+#: network.c:591
#, fuzzy, c-format
msgid "ignoring nameserver %s - cannot make/bind socket: %s"
msgstr "ignorowanie serwera nazw %s - nie mo¿na utworzyæ/dowi±zaæ gniazda: %m"
-#: network.c:517
+#: network.c:606
msgid "unqualified"
msgstr "niekwalifikowany(a/e)"
-#: network.c:517
+#: network.c:606
msgid "names"
msgstr ""
-#: network.c:519
+#: network.c:608
msgid "default"
msgstr ""
-#: network.c:521
+#: network.c:610
msgid "domain"
msgstr "domena"
-#: network.c:524
+#: network.c:613
#, c-format
msgid "using local addresses only for %s %s"
msgstr "w³±czenie u¿ywania lokalnych adresów tylko dla %s %s"
-#: network.c:526
+#: network.c:615
#, c-format
msgid "using nameserver %s#%d for %s %s"
msgstr "u¿ywany serwer nazw: %s#%d dla %s %s"
-#: network.c:529
+#: network.c:618
+#, fuzzy, c-format
+msgid "using nameserver %s#%d(via %s)"
+msgstr "u¿ywany serwer nazw %s#%d"
+
+#: network.c:620
#, c-format
msgid "using nameserver %s#%d"
msgstr "u¿ywany serwer nazw %s#%d"
-#: dnsmasq.c:106
+#: dnsmasq.c:110
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:128
+#: dnsmasq.c:132
#, fuzzy
msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
msgstr "DBus jest niedostêpny: ustaw HAVE_DBUS w src/config.h"
-#: dnsmasq.c:142
+#: dnsmasq.c:137
+msgid "asychronous logging is not available under Solaris"
+msgstr ""
+
+#: dnsmasq.c:151
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:152
+#: dnsmasq.c:161
#, c-format
msgid "failed to find list of interfaces: %s"
msgstr "b³±d w znalezieniu listy interfejsów sieciowych: %s"
-#: dnsmasq.c:160
+#: dnsmasq.c:169
#, c-format
msgid "unknown interface %s"
msgstr "nieznany interfejs %s"
-#: dnsmasq.c:166
+#: dnsmasq.c:175
#, c-format
msgid "no interface with address %s"
msgstr "brak interfejsu z adresem %s"
-#: dnsmasq.c:181 dnsmasq.c:538
+#: dnsmasq.c:192 dnsmasq.c:561
#, c-format
msgid "DBus error: %s"
msgstr "b³±d DBus: %s"
-#: dnsmasq.c:184
+#: dnsmasq.c:195
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:216
+#: dnsmasq.c:204
#, fuzzy, c-format
msgid "cannot create pipe: %s"
msgstr "b³±d odczytu z %s: %s"
-#: dnsmasq.c:237
+#: dnsmasq.c:225
#, c-format
msgid "cannot fork into background: %s"
msgstr ""
-#: dnsmasq.c:335
+#: dnsmasq.c:239
+#, c-format
+msgid "cannot chdir to filesystem root: %s"
+msgstr ""
+
+#: dnsmasq.c:349
+#, fuzzy, c-format
+msgid "started, version %s DNS disabled"
+msgstr "uruchomiony, wersja %s cache wy³±czony"
+
+#: dnsmasq.c:351
#, c-format
msgid "started, version %s cachesize %d"
msgstr "uruchomiony, wersja %s wielko¶æ cache %d"
-#: dnsmasq.c:337
+#: dnsmasq.c:353
#, c-format
msgid "started, version %s cache disabled"
msgstr "uruchomiony, wersja %s cache wy³±czony"
-#: dnsmasq.c:339
+#: dnsmasq.c:355
#, c-format
msgid "compile time options: %s"
msgstr "opcje kompilacji: %s"
-#: dnsmasq.c:345
+#: dnsmasq.c:361
msgid "DBus support enabled: connected to system bus"
msgstr "obs³uga DBus w³±czona: pod³±czono do szyny systemowej"
-#: dnsmasq.c:347
+#: dnsmasq.c:363
msgid "DBus support enabled: bus connection pending"
msgstr "obs³uga DBus w³±czona: pod³±czanie do szyny systemowej w toku"
-#: dnsmasq.c:352
+#: dnsmasq.c:368
msgid "setting --bind-interfaces option because of OS limitations"
msgstr "ustawiam opcjê --bind-interfaces z powodu limitów systemu operacyjnego"
-#: dnsmasq.c:357
+#: dnsmasq.c:373
#, c-format
msgid "warning: interface %s does not currently exist"
msgstr "ostrze¿enie: interfejs %s obecnie nie istnieje"
-#: dnsmasq.c:362
+#: dnsmasq.c:378
msgid "warning: ignoring resolv-file flag because no-resolv is set"
msgstr ""
-#: dnsmasq.c:365
+#: dnsmasq.c:381
#, fuzzy
msgid "warning: no upstream servers configured"
msgstr "brak skonfigurowanego adresu"
-#: dnsmasq.c:369
+#: dnsmasq.c:385
#, c-format
msgid "asynchronous logging enabled, queue limit is %d messages"
msgstr ""
-#: dnsmasq.c:381
+#: dnsmasq.c:397
#, 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:382
+#: dnsmasq.c:398
#, c-format
msgid "DHCP, IP range %s -- %s, lease time %s"
msgstr "DHCP, zakres IP %s -- %s, czas dzier¿awy %s"
-#: dnsmasq.c:396
+#: dnsmasq.c:412
msgid "root is "
msgstr ""
-#: dnsmasq.c:396
+#: dnsmasq.c:412
#, fuzzy
msgid "enabled"
msgstr "wy³±czony(a)"
-#: dnsmasq.c:398
+#: dnsmasq.c:414
msgid "secure mode"
msgstr ""
-#: dnsmasq.c:418
+#: dnsmasq.c:440
#, c-format
msgid "restricting maximum simultaneous TFTP transfers to %d"
msgstr ""
-#: dnsmasq.c:427
+#: dnsmasq.c:449
#, c-format
msgid "warning: setting capabilities failed: %s"
msgstr ""
-#: dnsmasq.c:429
+#: dnsmasq.c:451
msgid "running as root"
msgstr "pracuje z uprawnieniami u¿ytkownika root"
-#: dnsmasq.c:540
+#: dnsmasq.c:563
msgid "connected to system DBus"
msgstr "po³±czono do systemowego DBus"
-#: dnsmasq.c:659
+#: dnsmasq.c:683
#, c-format
msgid "child process killed by signal %d"
msgstr ""
-#: dnsmasq.c:663
+#: dnsmasq.c:687
#, c-format
msgid "child process exited with status %d"
msgstr ""
-#: dnsmasq.c:667
+#: dnsmasq.c:691
#, fuzzy, c-format
msgid "failed to execute %s: %s"
msgstr "b³±d w dostêpie do %s: %m"
-#: dnsmasq.c:671
+#: dnsmasq.c:695
#, fuzzy, c-format
msgid "failed to create helper: %s"
msgstr "b³±d w odczycie %s: %m"
-#: dnsmasq.c:705
+#: dnsmasq.c:729
msgid "exiting on receipt of SIGTERM"
msgstr "wy³±czenie po otrzymaniu sygnalu SIGTERM"
-#: dnsmasq.c:756
+#: dnsmasq.c:780
#, fuzzy, c-format
msgid "no servers found in %s, will retry"
msgstr "brak wytycznych wyszukiwania w %s"
-#: dhcp.c:32
+#: dhcp.c:38
#, c-format
msgid "cannot create DHCP socket : %s"
msgstr "nie mo¿na utworzyæ gniazda DHCP : %s"
-#: dhcp.c:41
+#: dhcp.c:50
#, c-format
msgid "failed to set options on DHCP socket: %s"
msgstr "b³±d ustawienia opcji gniazda DHCP: %s"
-#: dhcp.c:59
+#: dhcp.c:68
#, fuzzy, c-format
msgid "failed to set SO_REUSE{ADDR|PORT} on DHCP socket: %s"
msgstr "b³±d ustawienia SO_REUSEADDR gniazda DHCP: %s"
-#: dhcp.c:72
+#: dhcp.c:81
#, c-format
msgid "failed to bind DHCP server socket: %s"
msgstr "b³±d pod³±czenia gniazda serwera DHCP: %s"
-#: dhcp.c:85
+#: dhcp.c:94
#, c-format
msgid "cannot create ICMP raw socket: %s."
msgstr "b³±d utworzenia surowego gniazda ICMP: %s."
-#: dhcp.c:100
-#, c-format
-msgid "duplicate IP address %s in dhcp-config directive."
-msgstr "powtórzenie adresu IP %s w opcji dhcp-config"
-
-#: dhcp.c:103
-#, fuzzy, c-format
-msgid "illegal domain %s in dhcp-config directive."
-msgstr "powtórzenie adresu IP %s w opcji dhcp-config"
-
-#: dhcp.c:221
+#: dhcp.c:223
#, c-format
msgid "DHCP packet received on %s which has no address"
msgstr ""
-#: dhcp.c:352
+#: dhcp.c:382
#, 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:669
+#: dhcp.c:709
#, fuzzy, c-format
msgid "failed to read %s:%s"
msgstr "b³±d w odczycie %s: %m"
-#: dhcp.c:704
+#: dhcp.c:744
#, fuzzy, c-format
msgid "bad line at %s line %d"
msgstr "b³êdna nazwa w %s, linia %d"
-#: dhcp.c:826
+#: dhcp.c:847
+#, c-format
+msgid "duplicate IP address %s in dhcp-config directive."
+msgstr "powtórzenie adresu IP %s w opcji dhcp-config"
+
+#: dhcp.c:850
#, fuzzy, c-format
msgid "duplicate IP address %s in %s."
msgstr "powtórzenie adresu IP %s w opcji dhcp-config"
-#: dhcp.c:832
+#: dhcp.c:858
+#, fuzzy, c-format
+msgid "illegal domain %s in dhcp-config directive."
+msgstr "powtórzenie adresu IP %s w opcji dhcp-config"
+
+#: dhcp.c:860
#, c-format
msgid "illegal domain %s in %s."
msgstr ""
-#: dhcp.c:839
-#, fuzzy, c-format
-msgid "read %s - %d hosts"
-msgstr "przeczytano %s - %d adresów"
+#: dhcp.c:899
+#, c-format
+msgid "%s has more then one address in hostsfile, using %s for DHCP"
+msgstr ""
-#: dhcp.c:866
+#: dhcp.c:904
#, c-format
msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr "powtórzenie adresu IP %s (%s) w opcji dhcp-config"
-#: lease.c:54
+#: lease.c:58
#, fuzzy, c-format
msgid "cannot open or create lease file %s: %s"
msgstr "b³±d otwarcia lub utworzenia pliku dzier¿aw: %s"
-#: lease.c:80
+#: lease.c:84
msgid "too many stored leases"
msgstr "zbyt du¿a ilo¶æ zapisanych dzier¿aw"
-#: lease.c:121
+#: lease.c:125
#, fuzzy, c-format
msgid "cannot run lease-init script %s: %s"
msgstr "b³±d odczytu z %s: %s"
-#: lease.c:127
+#: lease.c:131
#, c-format
msgid "lease-init script returned exit code %s"
msgstr ""
-#: lease.c:234
+#: lease.c:238
#, fuzzy, c-format
msgid "failed to write %s: %s (retry in %us)"
msgstr "b³±d w odczycie %s: %m"
-#: rfc2131.c:300
+#: rfc2131.c:303
#, 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:301
+#: rfc2131.c:304
msgid "with subnet selector"
msgstr "z selekcj± podsieci"
-#: rfc2131.c:301
+#: rfc2131.c:304
msgid "via"
msgstr "przez"
-#: rfc2131.c:312
+#: rfc2131.c:315
#, c-format
msgid "DHCP packet: transaction-id is %u"
msgstr ""
-#: rfc2131.c:317
+#: rfc2131.c:320
#, c-format
msgid "Available DHCP subnet: %s/%s"
msgstr ""
-#: rfc2131.c:319
+#: rfc2131.c:322
#, c-format
msgid "Available DHCP range: %s -- %s"
msgstr ""
-#: rfc2131.c:347 rfc2131.c:378
+#: rfc2131.c:350 rfc2131.c:381
msgid "disabled"
msgstr "wy³±czony(a)"
-#: rfc2131.c:390 rfc2131.c:852
+#: rfc2131.c:393 rfc2131.c:873
msgid "address in use"
msgstr "adres w u¿yciu"
-#: rfc2131.c:393
+#: rfc2131.c:396
msgid "no address configured"
msgstr "brak skonfigurowanego adresu"
-#: rfc2131.c:406 rfc2131.c:720
+#: rfc2131.c:409 rfc2131.c:736
msgid "no address available"
msgstr "brak dostêpnego adresu"
-#: rfc2131.c:416
-#, c-format
-msgid "Limit of %d leases exceeded."
-msgstr ""
-
-#: rfc2131.c:417 rfc2131.c:862
+#: rfc2131.c:418 rfc2131.c:883
msgid "no leases left"
msgstr "brak wolnych dzier¿aw"
-#: rfc2131.c:421 rfc2131.c:826
+#: rfc2131.c:421 rfc2131.c:847
msgid "wrong network"
msgstr "nieprawid³owa sieæ"
-#: rfc2131.c:519
+#: rfc2131.c:520
#, c-format
msgid "Ignoring domain %s for DHCP host name %s"
msgstr ""
-#: rfc2131.c:598
+#: rfc2131.c:614
#, c-format
msgid "Vendor class: %s"
msgstr ""
-#: rfc2131.c:600
+#: rfc2131.c:616
#, c-format
msgid "User class: %s"
msgstr ""
-#: rfc2131.c:641
+#: rfc2131.c:657
#, fuzzy, c-format
msgid "disabling DHCP static address %s for %s"
msgstr "wy³±czanie statycznego adresu DHCP %s"
-#: rfc2131.c:662
+#: rfc2131.c:678
msgid "unknown lease"
msgstr "nieznana dzier¿awa"
-#: rfc2131.c:671 rfc2131.c:970
+#: rfc2131.c:687 rfc2131.c:992
msgid "ignored"
msgstr "ignorujê"
-#: rfc2131.c:691
+#: rfc2131.c:707
#, c-format
msgid "not using configured address %s because it is leased to %s"
msgstr ""
-#: rfc2131.c:701
+#: rfc2131.c:717
#, c-format
msgid ""
"not using configured address %s because it is in use by the server or relay"
msgstr ""
-#: rfc2131.c:704
+#: rfc2131.c:720
#, c-format
msgid "not using configured address %s because it was previously declined"
msgstr ""
-#: rfc2131.c:718 rfc2131.c:855
+#: rfc2131.c:734 rfc2131.c:876
msgid "no unique-id"
msgstr ""
-#: rfc2131.c:789
+#: rfc2131.c:806
msgid "wrong address"
msgstr "b³êdny adres"
-#: rfc2131.c:802
+#: rfc2131.c:823
msgid "lease not found"
msgstr "dzier¿awa nie znaleziona"
-#: rfc2131.c:834
+#: rfc2131.c:855
msgid "address not available"
msgstr "adres niedostêpny"
-#: rfc2131.c:845
+#: rfc2131.c:866
msgid "static lease available"
msgstr "dostêpna statyczna dzier¿awa"
-#: rfc2131.c:849
+#: rfc2131.c:870
msgid "address reserved"
msgstr "adres zarezerwowany"
-#: rfc2131.c:1252
+#: rfc2131.c:1265
#, c-format
msgid "tags: %s"
msgstr ""
-#: rfc2131.c:1334
+#: rfc2131.c:1352
#, c-format
msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
msgstr ""
-#: rfc2131.c:1488
+#: rfc2131.c:1507
#, fuzzy, c-format
msgid "requested options: %s"
msgstr "opcje kompilacji: %s"
-#: rfc2131.c:1519
-#, c-format
-msgid "server name: %s"
-msgstr ""
+#: rfc2131.c:1556
+#, fuzzy, c-format
+msgid "next server: %s"
+msgstr "b³±d DBus: %s"
-#: rfc2131.c:1531
+#: rfc2131.c:1580
#, c-format
msgid "bootfile name: %s"
msgstr ""
-#: rfc2131.c:1540
-#, fuzzy, c-format
-msgid "next server: %s"
-msgstr "b³±d DBus: %s"
+#: rfc2131.c:1583
+#, c-format
+msgid "server name: %s"
+msgstr ""
-#: netlink.c:59
+#: netlink.c:63
#, fuzzy, c-format
msgid "cannot create netlink socket: %s"
msgstr "nie mo¿na pod³±czyæ gniazda netlink: %s"
-#: netlink.c:226
+#: netlink.c:230
#, fuzzy, c-format
msgid "netlink returns error: %s"
msgstr "b³±d DBus: %s"
-#: dbus.c:111
+#: dbus.c:115
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
+#: dbus.c:241
msgid "setting upstream servers from DBus"
msgstr ""
-#: dbus.c:275
+#: dbus.c:279
msgid "could not register a DBus message handler"
msgstr "nie mo¿na zarejestrowaæ uchwytu wiadomo¶ci DBus"
-#: bpf.c:43
+#: bpf.c:146
#, c-format
msgid "cannot create DHCP BPF socket: %s"
msgstr "b³±d utworzenia gniazda DHCP BPF: %s"
-#: bpf.c:71
+#: bpf.c:174
#, fuzzy, c-format
msgid "DHCP request for unsupported hardware type (%d) received on %s"
msgstr "¿±danie DHCP nieobs³ugiwanego typu sprzêtowego (%d) otrzymane na %s"
-#: tftp.c:158
+#: tftp.c:173
+msgid "unable to get free port for TFTP"
+msgstr ""
+
+#: tftp.c:188
#, c-format
msgid "unsupported request from %s"
msgstr ""
-#: tftp.c:236
+#: tftp.c:266
#, c-format
msgid "TFTP sent %s to %s"
msgstr ""
-#: tftp.c:259
+#: tftp.c:289
#, fuzzy, c-format
msgid "file %s not found"
msgstr "dzier¿awa nie znaleziona"
-#: tftp.c:369
+#: tftp.c:399
#, c-format
msgid "TFTP error %d %s received from %s"
msgstr ""
-#: tftp.c:400
+#: tftp.c:430
#, fuzzy, c-format
msgid "TFTP failed sending %s to %s"
msgstr "b³±d w odczycie %s: %m"
-#: log.c:69
+#: log.c:73
#, fuzzy, c-format
msgid "cannot open %s: %s"
msgstr "nie mo¿na otworzyæ %s:%s"
-#: log.c:146
+#: log.c:89
+#, fuzzy, c-format
+msgid "warning: failed to change owner of %s: %s"
+msgstr "b³±d ³adowania nazw z %s: %m"
+
+#: log.c:161
#, c-format
msgid "overflow: %d log entries lost"
msgstr ""
-#: log.c:223
+#: log.c:238
#, c-format
msgid "log failed: %s"
msgstr ""
-#: log.c:378
+#: log.c:394
msgid "FAILED to start up"
msgstr "B£¡D uruchomienia"
+#, fuzzy
+#~ msgid "read %s - %d hosts"
+#~ msgstr "przeczytano %s - %d adresów"
+
#~ msgid "bad dhcp-host"
#~ msgstr "b³±d w dhcp-host"
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 3c9ee8c..663f992 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dnsmasq 2.26\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-08-29 11:09+0100\n"
+"POT-Creation-Date: 2008-02-12 11: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"
@@ -15,1213 +15,1307 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-#: cache.c:671
+#: cache.c:680
#, c-format
msgid "failed to load names from %s: %s"
msgstr ""
-#: cache.c:705 dhcp.c:717
+#: cache.c:714 dhcp.c:757
#, c-format
msgid "bad address at %s line %d"
msgstr ""
-#: cache.c:752 dhcp.c:731
+#: cache.c:761 dhcp.c:771
#, c-format
msgid "bad name at %s line %d"
msgstr ""
-#: cache.c:759 dhcp.c:785
+#: cache.c:768 dhcp.c:825
#, c-format
msgid "read %s - %d addresses"
msgstr ""
-#: cache.c:797
+#: cache.c:806
msgid "cleared cache"
msgstr ""
-#: cache.c:844
+#: cache.c:855
#, 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:884
+#: cache.c:907
#, c-format
-msgid ""
-"time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache "
-"entries."
+msgid "time %lu"
+msgstr ""
+
+#: cache.c:908
+#, c-format
+msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
+msgstr ""
+
+#: cache.c:910
+#, c-format
+msgid "queries forwarded %u, queries answered locally %u"
+msgstr ""
+
+#: cache.c:933
+#, c-format
+msgid "server %s#%d: queries sent %u, retried or failed %u"
msgstr ""
-#: util.c:157 option.c:758
+#: util.c:160
msgid "could not get memory"
msgstr ""
-#: util.c:167
+#: util.c:170
#, c-format
msgid "failed to allocate %d bytes"
msgstr ""
-#: util.c:272
+#: util.c:275
#, c-format
msgid "infinite"
msgstr ""
-#: option.c:188
+#: option.c:244
msgid "Specify local address(es) to listen on."
msgstr ""
-#: option.c:189
+#: option.c:245
msgid "Return ipaddr for all hosts in specified domains."
msgstr ""
-#: option.c:190
+#: option.c:246
msgid "Fake reverse lookups for RFC1918 private address ranges."
msgstr ""
-#: option.c:191
+#: option.c:247
msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
msgstr ""
-#: option.c:192
+#: option.c:248
#, c-format
msgid "Specify the size of the cache in entries (defaults to %s)."
msgstr ""
-#: option.c:193
+#: option.c:249
#, c-format
msgid "Specify configuration file (defaults to %s)."
msgstr ""
-#: option.c:194
+#: option.c:250
msgid "Do NOT fork into the background: run in debug mode."
msgstr ""
-#: option.c:195
+#: option.c:251
msgid "Do NOT forward queries with no domain part."
msgstr ""
-#: option.c:196
+#: option.c:252
msgid "Return self-pointing MX records for local hosts."
msgstr ""
-#: option.c:197
+#: option.c:253
msgid "Expand simple names in /etc/hosts with domain-suffix."
msgstr ""
-#: option.c:198
+#: option.c:254
msgid "Don't forward spurious DNS requests from Windows hosts."
msgstr ""
-#: option.c:199
+#: option.c:255
msgid "Enable DHCP in the range given with lease duration."
msgstr ""
-#: option.c:200
+#: option.c:256
#, c-format
msgid "Change to this group after startup (defaults to %s)."
msgstr ""
-#: option.c:201
+#: option.c:257
msgid "Set address or hostname for a specified machine."
msgstr ""
-#: option.c:202
+#: option.c:258
msgid "Read DHCP host specs from file"
msgstr ""
-#: option.c:203
+#: option.c:259
+msgid "Read DHCP option specs from file"
+msgstr ""
+
+#: option.c:260
#, c-format
msgid "Do NOT load %s file."
msgstr ""
-#: option.c:204
+#: option.c:261
#, c-format
msgid "Specify a hosts file to be read in addition to %s."
msgstr ""
-#: option.c:205
+#: option.c:262
msgid "Specify interface(s) to listen on."
msgstr ""
-#: option.c:206
+#: option.c:263
msgid "Specify interface(s) NOT to listen on."
msgstr ""
-#: option.c:207
+#: option.c:264
msgid "Map DHCP user class to tag."
msgstr ""
-#: option.c:208
+#: option.c:265
msgid "Map RFC3046 circuit-id to tag."
msgstr ""
-#: option.c:209
+#: option.c:266
msgid "Map RFC3046 remote-id to tag."
msgstr ""
-#: option.c:210
+#: option.c:267
msgid "Map RFC3993 subscriber-id to tag."
msgstr ""
-#: option.c:211
+#: option.c:268
msgid "Don't do DHCP for hosts with tag set."
msgstr ""
-#: option.c:212
+#: option.c:269
+msgid "Force broadcast replies for hosts with tag set."
+msgstr ""
+
+#: option.c:270
msgid "Do NOT fork into the background, do NOT run in debug mode."
msgstr ""
-#: option.c:213
+#: option.c:271
msgid "Assume we are the only DHCP server on the local network."
msgstr ""
-#: option.c:214
+#: option.c:272
#, c-format
msgid "Specify where to store DHCP leases (defaults to %s)."
msgstr ""
-#: option.c:215
+#: option.c:273
msgid "Return MX records for local hosts."
msgstr ""
-#: option.c:216
+#: option.c:274
msgid "Specify an MX record."
msgstr ""
-#: option.c:217
+#: option.c:275
msgid "Specify BOOTP options to DHCP server."
msgstr ""
-#: option.c:218
+#: option.c:276
#, c-format
msgid "Do NOT poll %s file, reload only on SIGHUP."
msgstr ""
-#: option.c:219
+#: option.c:277
msgid "Do NOT cache failed search results."
msgstr ""
-#: option.c:220
+#: option.c:278
#, c-format
msgid "Use nameservers strictly in the order given in %s."
msgstr ""
-#: option.c:221
+#: option.c:279
msgid "Specify options to be sent to DHCP clients."
msgstr ""
-#: option.c:222
+#: option.c:280
msgid "DHCP option sent even if the client does not request it."
msgstr ""
-#: option.c:223
+#: option.c:281
msgid "Specify port to listen for DNS requests on (defaults to 53)."
msgstr ""
-#: option.c:224
+#: option.c:282
#, c-format
msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
msgstr ""
-#: option.c:225
-msgid "Log queries."
+#: option.c:283
+msgid "Log DNS queries."
msgstr ""
-#: option.c:226
-msgid "Force the originating port for upstream queries."
+#: option.c:284
+msgid "Force the originating port for upstream DNS queries."
msgstr ""
-#: option.c:227
+#: option.c:285
msgid "Do NOT read resolv.conf."
msgstr ""
-#: option.c:228
+#: option.c:286
#, c-format
msgid "Specify path to resolv.conf (defaults to %s)."
msgstr ""
-#: option.c:229
+#: option.c:287
msgid "Specify address(es) of upstream servers with optional domains."
msgstr ""
-#: option.c:230
+#: option.c:288
msgid "Never forward queries to specified domains."
msgstr ""
-#: option.c:231
+#: option.c:289
msgid "Specify the domain to be assigned in DHCP leases."
msgstr ""
-#: option.c:232
+#: option.c:290
msgid "Specify default target in an MX record."
msgstr ""
-#: option.c:233
+#: option.c:291
msgid "Specify time-to-live in seconds for replies from /etc/hosts."
msgstr ""
-#: option.c:234
+#: option.c:292
+msgid "Specify time-to-live in seconds for negative caching."
+msgstr ""
+
+#: option.c:293
#, c-format
msgid "Change to this user after startup. (defaults to %s)."
msgstr ""
-#: option.c:235
+#: option.c:294
msgid "Map DHCP vendor class to tag."
msgstr ""
-#: option.c:236
+#: option.c:295
msgid "Display dnsmasq version and copyright information."
msgstr ""
-#: option.c:237
+#: option.c:296
msgid "Translate IPv4 addresses from upstream servers."
msgstr ""
-#: option.c:238
+#: option.c:297
msgid "Specify a SRV record."
msgstr ""
-#: option.c:239
+#: option.c:298
msgid "Display this message. Use --help dhcp for known DHCP options."
msgstr ""
-#: option.c:240
+#: option.c:299
#, c-format
msgid "Specify path of PID file (defaults to %s)."
msgstr ""
-#: option.c:241
+#: option.c:300
#, c-format
msgid "Specify maximum number of DHCP leases (defaults to %s)."
msgstr ""
-#: option.c:242
+#: option.c:301
msgid "Answer DNS queries based on the interface a query was sent to."
msgstr ""
-#: option.c:243
+#: option.c:302
msgid "Specify TXT DNS record."
msgstr ""
-#: option.c:244
+#: option.c:303
msgid "Specify PTR DNS record."
msgstr ""
-#: option.c:245
+#: option.c:304
msgid "Give DNS name to IPv4 address of interface."
msgstr ""
-#: option.c:246
+#: option.c:305
msgid "Bind only to interfaces in use."
msgstr ""
-#: option.c:247
+#: option.c:306
#, c-format
msgid "Read DHCP static host information from %s."
msgstr ""
-#: option.c:248
+#: option.c:307
msgid "Enable the DBus interface for setting upstream servers, etc."
msgstr ""
-#: option.c:249
+#: option.c:308
msgid "Do not provide DHCP on this interface, only provide DNS."
msgstr ""
-#: option.c:250
+#: option.c:309
msgid "Enable dynamic address allocation for bootp."
msgstr ""
-#: option.c:251
+#: option.c:310
msgid "Map MAC address (with wildcards) to option set."
msgstr ""
-#: option.c:253
+#: option.c:312
msgid "Treat DHCP requests on aliases as arriving from interface."
msgstr ""
-#: option.c:255
+#: option.c:314
msgid "Disable ICMP echo address checking in the DHCP server."
msgstr ""
-#: option.c:256
+#: option.c:315
msgid "Script to run on DHCP lease creation and destruction."
msgstr ""
-#: option.c:257
+#: option.c:316
msgid "Read configuration from all the files in this directory."
msgstr ""
-#: option.c:258
+#: option.c:317
msgid "Log to this syslog facility or file. (defaults to DAEMON)"
msgstr ""
-#: option.c:259
+#: option.c:318
msgid "Read leases at startup, but never write the lease file."
msgstr ""
-#: option.c:260
+#: option.c:319
#, c-format
msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
msgstr ""
-#: option.c:261
+#: option.c:320
#, c-format
msgid "Clear DNS cache when reloading %s."
msgstr ""
-#: option.c:262
+#: option.c:321
msgid "Ignore hostnames provided by DHCP clients."
msgstr ""
-#: option.c:263
+#: option.c:322
+msgid "Do NOT reuse filename and server fields for extra DHCP options."
+msgstr ""
+
+#: option.c:323
msgid "Enable integrated read-only TFTP server."
msgstr ""
-#: option.c:264
+#: option.c:324
msgid "Export files by TFTP only from the specified subtree."
msgstr ""
-#: option.c:265
+#: option.c:325
msgid "Add client IP address to tftp-root."
msgstr ""
-#: option.c:266
+#: option.c:326
msgid "Allow access only to files owned by the user running dnsmasq."
msgstr ""
-#: option.c:267
+#: option.c:327
#, c-format
msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
msgstr ""
-#: option.c:268
+#: option.c:328
msgid "Disable the TFTP blocksize extension."
msgstr ""
-#: option.c:269
+#: option.c:329
+msgid "Ephemeral port range for use by TFTP transfers."
+msgstr ""
+
+#: option.c:330
msgid "Extra logging for DHCP."
msgstr ""
-#: option.c:270
+#: option.c:331
msgid "Enable async. logging; optionally set queue length."
msgstr ""
-#: option.c:501
+#: option.c:332
+msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
+msgstr ""
+
+#: option.c:333
+msgid "Always perform DNS queries to all servers."
+msgstr ""
+
+#: option.c:334
+msgid "Set tag if client includes option in request."
+msgstr ""
+
+#: option.c:585
#, c-format
msgid ""
"Usage: dnsmasq [options]\n"
"\n"
msgstr ""
-#: option.c:503
+#: option.c:587
#, c-format
msgid "Use short options only on the command line.\n"
msgstr ""
-#: option.c:505
+#: option.c:589
#, c-format
msgid "Valid options are :\n"
msgstr ""
-#: option.c:526
+#: option.c:610
#, c-format
msgid "Known DHCP options:\n"
msgstr ""
-#: option.c:599
+#: option.c:683
msgid "bad dhcp-option"
msgstr ""
-#: option.c:655
+#: option.c:739
msgid "bad IP address"
msgstr ""
-#: option.c:753
+#: option.c:837
msgid "bad domain in dhcp-option"
msgstr ""
-#: option.c:809
+#: option.c:895
msgid "dhcp-option too long"
msgstr ""
-#: option.c:853
+#: option.c:942
#, c-format
msgid "cannot access directory %s: %s"
msgstr ""
-#: option.c:872 tftp.c:313
+#: option.c:961 tftp.c:343
#, c-format
msgid "cannot access %s: %s"
msgstr ""
-#: option.c:913
+#: option.c:998
msgid "only one dhcp-hostsfile allowed"
msgstr ""
-#: option.c:962
+#: option.c:1005
+msgid "only one dhcp-optsfile allowed"
+msgstr ""
+
+#: option.c:1049
msgid "bad MX preference"
msgstr ""
-#: option.c:971
+#: option.c:1053
msgid "bad MX name"
msgstr ""
-#: option.c:989
+#: option.c:1067
msgid "bad MX target"
msgstr ""
-#: option.c:1001
+#: option.c:1078
msgid "cannot run scripts under uClinux"
msgstr ""
-#: option.c:1196 option.c:1207
+#: option.c:1265 option.c:1273
msgid "bad port"
msgstr ""
-#: option.c:1349
+#: option.c:1293 option.c:1318
+msgid "interface binding not supported"
+msgstr ""
+
+#: option.c:1427
+msgid "bad port range"
+msgstr ""
+
+#: option.c:1444
msgid "bad bridge-interface"
msgstr ""
-#: option.c:1391
+#: option.c:1485
msgid "bad dhcp-range"
msgstr ""
-#: option.c:1419
+#: option.c:1511
msgid "only one netid tag allowed"
msgstr ""
-#: option.c:1461
+#: option.c:1551
msgid "inconsistent DHCP range"
msgstr ""
-#: option.c:1637
+#: option.c:1719
msgid "bad DHCP host name"
msgstr ""
-#: option.c:1861
+#: option.c:1959
msgid "bad interface name"
msgstr ""
-#: option.c:1885
+#: option.c:1979
msgid "bad PTR record"
msgstr ""
-#: option.c:1909
-msgid "bad TXT record"
+#: option.c:1999
+msgid "TXT record string too long"
msgstr ""
-#: option.c:1941
-msgid "TXT record string too long"
+#: option.c:2003
+msgid "bad TXT record"
msgstr ""
-#: option.c:1980
+#: option.c:2063
msgid "bad SRV record"
msgstr ""
-#: option.c:1992
+#: option.c:2072
msgid "bad SRV target"
msgstr ""
-#: option.c:2003
+#: option.c:2080
msgid "invalid port number"
msgstr ""
-#: option.c:2013
+#: option.c:2087
msgid "invalid priority"
msgstr ""
-#: option.c:2023
+#: option.c:2094
msgid "invalid weight"
msgstr ""
-#: option.c:2054
+#: option.c:2130
#, c-format
msgid "files nested too deep in %s"
msgstr ""
-#: option.c:2062 tftp.c:467
+#: option.c:2138 tftp.c:497
#, c-format
msgid "cannot read %s: %s"
msgstr ""
-#: option.c:2114
+#: option.c:2199
msgid "missing \""
msgstr ""
-#: option.c:2161
+#: option.c:2246
msgid "bad option"
msgstr ""
-#: option.c:2163
+#: option.c:2248
msgid "extraneous parameter"
msgstr ""
-#: option.c:2165
+#: option.c:2250
msgid "missing parameter"
msgstr ""
-#: option.c:2173
+#: option.c:2258
msgid "error"
msgstr ""
-#: option.c:2179
+#: option.c:2264
#, c-format
msgid "%s at line %d of %%s"
msgstr ""
-#: option.c:2252
+#: option.c:2304 option.c:2334
+#, c-format
+msgid "read %s"
+msgstr ""
+
+#: option.c:2400
#, c-format
msgid "Dnsmasq version %s %s\n"
msgstr ""
-#: option.c:2253
+#: option.c:2401
#, c-format
msgid ""
"Compile time options %s\n"
"\n"
msgstr ""
-#: option.c:2254
+#: option.c:2402
#, c-format
msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
msgstr ""
-#: option.c:2255
+#: option.c:2403
#, c-format
msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
msgstr ""
-#: option.c:2256
+#: option.c:2404
#, c-format
-msgid "under the terms of the GNU General Public License, version 2.\n"
+msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
msgstr ""
-#: option.c:2267
+#: option.c:2415
msgid "try --help"
msgstr ""
-#: option.c:2269
+#: option.c:2417
msgid "try -w"
msgstr ""
-#: option.c:2272
+#: option.c:2420
#, c-format
msgid "bad command line options: %s"
msgstr ""
-#: option.c:2313
+#: option.c:2461
#, c-format
msgid "cannot get host-name: %s"
msgstr ""
-#: option.c:2341
+#: option.c:2489
msgid "only one resolv.conf file allowed in no-poll mode."
msgstr ""
-#: option.c:2351
+#: option.c:2499
msgid "must have exactly one resolv.conf to read domain from."
msgstr ""
-#: option.c:2354 network.c:549
+#: option.c:2502 network.c:640
#, c-format
msgid "failed to read %s: %s"
msgstr ""
-#: option.c:2372
+#: option.c:2520
#, c-format
msgid "no search directive found in %s"
msgstr ""
-#: forward.c:376
+#: forward.c:381
#, c-format
msgid "nameserver %s refused to do a recursive query"
msgstr ""
-#: isc.c:73 dnsmasq.c:723
+#: forward.c:409
+msgid "possible DNS-rebind attack detected"
+msgstr ""
+
+#: isc.c:77 dnsmasq.c:747
#, c-format
msgid "failed to access %s: %s"
msgstr ""
-#: isc.c:89
+#: isc.c:93
#, c-format
msgid "failed to load %s: %s"
msgstr ""
-#: isc.c:93 dnsmasq.c:745
+#: isc.c:97 dnsmasq.c:769
#, c-format
msgid "reading %s"
msgstr ""
-#: isc.c:115
+#: isc.c:119
#, c-format
msgid "bad name in %s"
msgstr ""
-#: isc.c:177
+#: isc.c:181
#, c-format
msgid "Ignoring DHCP lease for %s because it has an illegal domain part"
msgstr ""
-#: network.c:41
+#: network.c:45
#, c-format
msgid "unknown interface %s in bridge-interface"
msgstr ""
-#: network.c:377 dnsmasq.c:170
+#: network.c:389 dnsmasq.c:180
#, c-format
msgid "failed to create listening socket: %s"
msgstr ""
-#: network.c:384
+#: network.c:396
#, c-format
msgid "failed to set IPV6 options on listening socket: %s"
msgstr ""
-#: network.c:402
+#: network.c:415
#, c-format
msgid "failed to bind listening socket for %s: %s"
msgstr ""
-#: network.c:410
+#: network.c:420
#, c-format
msgid "failed to listen on socket: %s"
msgstr ""
-#: network.c:421
+#: network.c:432
#, c-format
msgid "failed to create TFTP socket: %s"
msgstr ""
-#: network.c:493
+#: network.c:549
+#, c-format
+msgid "failed to bind server socket for %s: %s"
+msgstr ""
+
+#: network.c:582
#, c-format
msgid "ignoring nameserver %s - local interface"
msgstr ""
-#: network.c:502
+#: network.c:591
#, c-format
msgid "ignoring nameserver %s - cannot make/bind socket: %s"
msgstr ""
-#: network.c:517
+#: network.c:606
msgid "unqualified"
msgstr ""
-#: network.c:517
+#: network.c:606
msgid "names"
msgstr ""
-#: network.c:519
+#: network.c:608
msgid "default"
msgstr ""
-#: network.c:521
+#: network.c:610
msgid "domain"
msgstr ""
-#: network.c:524
+#: network.c:613
#, c-format
msgid "using local addresses only for %s %s"
msgstr ""
-#: network.c:526
+#: network.c:615
#, c-format
msgid "using nameserver %s#%d for %s %s"
msgstr ""
-#: network.c:529
+#: network.c:618
+#, c-format
+msgid "using nameserver %s#%d(via %s)"
+msgstr ""
+
+#: network.c:620
#, c-format
msgid "using nameserver %s#%d"
msgstr ""
-#: dnsmasq.c:106
+#: dnsmasq.c:110
msgid ""
"ISC dhcpd integration not available: set HAVE_ISC_READER in src/config.h"
msgstr ""
-#: dnsmasq.c:128
+#: dnsmasq.c:132
msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
msgstr ""
-#: dnsmasq.c:142
+#: dnsmasq.c:137
+msgid "asychronous logging is not available under Solaris"
+msgstr ""
+
+#: dnsmasq.c:151
msgid "must set exactly one interface on broken systems without IP_RECVIF"
msgstr ""
-#: dnsmasq.c:152
+#: dnsmasq.c:161
#, c-format
msgid "failed to find list of interfaces: %s"
msgstr ""
-#: dnsmasq.c:160
+#: dnsmasq.c:169
#, c-format
msgid "unknown interface %s"
msgstr ""
-#: dnsmasq.c:166
+#: dnsmasq.c:175
#, c-format
msgid "no interface with address %s"
msgstr ""
-#: dnsmasq.c:181 dnsmasq.c:538
+#: dnsmasq.c:192 dnsmasq.c:561
#, c-format
msgid "DBus error: %s"
msgstr ""
-#: dnsmasq.c:184
+#: dnsmasq.c:195
msgid "DBus not available: set HAVE_DBUS in src/config.h"
msgstr ""
-#: dnsmasq.c:216
+#: dnsmasq.c:204
#, c-format
msgid "cannot create pipe: %s"
msgstr ""
-#: dnsmasq.c:237
+#: dnsmasq.c:225
#, c-format
msgid "cannot fork into background: %s"
msgstr ""
-#: dnsmasq.c:335
+#: dnsmasq.c:239
+#, c-format
+msgid "cannot chdir to filesystem root: %s"
+msgstr ""
+
+#: dnsmasq.c:349
+#, c-format
+msgid "started, version %s DNS disabled"
+msgstr ""
+
+#: dnsmasq.c:351
#, c-format
msgid "started, version %s cachesize %d"
msgstr ""
-#: dnsmasq.c:337
+#: dnsmasq.c:353
#, c-format
msgid "started, version %s cache disabled"
msgstr ""
-#: dnsmasq.c:339
+#: dnsmasq.c:355
#, c-format
msgid "compile time options: %s"
msgstr ""
-#: dnsmasq.c:345
+#: dnsmasq.c:361
msgid "DBus support enabled: connected to system bus"
msgstr ""
-#: dnsmasq.c:347
+#: dnsmasq.c:363
msgid "DBus support enabled: bus connection pending"
msgstr ""
-#: dnsmasq.c:352
+#: dnsmasq.c:368
msgid "setting --bind-interfaces option because of OS limitations"
msgstr ""
-#: dnsmasq.c:357
+#: dnsmasq.c:373
#, c-format
msgid "warning: interface %s does not currently exist"
msgstr ""
-#: dnsmasq.c:362
+#: dnsmasq.c:378
msgid "warning: ignoring resolv-file flag because no-resolv is set"
msgstr ""
-#: dnsmasq.c:365
+#: dnsmasq.c:381
msgid "warning: no upstream servers configured"
msgstr ""
-#: dnsmasq.c:369
+#: dnsmasq.c:385
#, c-format
msgid "asynchronous logging enabled, queue limit is %d messages"
msgstr ""
-#: dnsmasq.c:381
+#: dnsmasq.c:397
#, c-format
msgid "DHCP, static leases only on %.0s%s, lease time %s"
msgstr ""
-#: dnsmasq.c:382
+#: dnsmasq.c:398
#, c-format
msgid "DHCP, IP range %s -- %s, lease time %s"
msgstr ""
-#: dnsmasq.c:396
+#: dnsmasq.c:412
msgid "root is "
msgstr ""
-#: dnsmasq.c:396
+#: dnsmasq.c:412
msgid "enabled"
msgstr ""
-#: dnsmasq.c:398
+#: dnsmasq.c:414
msgid "secure mode"
msgstr ""
-#: dnsmasq.c:418
+#: dnsmasq.c:440
#, c-format
msgid "restricting maximum simultaneous TFTP transfers to %d"
msgstr ""
-#: dnsmasq.c:427
+#: dnsmasq.c:449
#, c-format
msgid "warning: setting capabilities failed: %s"
msgstr ""
-#: dnsmasq.c:429
+#: dnsmasq.c:451
msgid "running as root"
msgstr ""
-#: dnsmasq.c:540
+#: dnsmasq.c:563
msgid "connected to system DBus"
msgstr ""
-#: dnsmasq.c:659
+#: dnsmasq.c:683
#, c-format
msgid "child process killed by signal %d"
msgstr ""
-#: dnsmasq.c:663
+#: dnsmasq.c:687
#, c-format
msgid "child process exited with status %d"
msgstr ""
-#: dnsmasq.c:667
+#: dnsmasq.c:691
#, c-format
msgid "failed to execute %s: %s"
msgstr ""
-#: dnsmasq.c:671
+#: dnsmasq.c:695
#, c-format
msgid "failed to create helper: %s"
msgstr ""
-#: dnsmasq.c:705
+#: dnsmasq.c:729
msgid "exiting on receipt of SIGTERM"
msgstr ""
-#: dnsmasq.c:756
+#: dnsmasq.c:780
#, c-format
msgid "no servers found in %s, will retry"
msgstr ""
-#: dhcp.c:32
+#: dhcp.c:38
#, c-format
msgid "cannot create DHCP socket : %s"
msgstr ""
-#: dhcp.c:41
+#: dhcp.c:50
#, c-format
msgid "failed to set options on DHCP socket: %s"
msgstr ""
-#: dhcp.c:59
+#: dhcp.c:68
#, c-format
msgid "failed to set SO_REUSE{ADDR|PORT} on DHCP socket: %s"
msgstr ""
-#: dhcp.c:72
+#: dhcp.c:81
#, c-format
msgid "failed to bind DHCP server socket: %s"
msgstr ""
-#: dhcp.c:85
+#: dhcp.c:94
#, c-format
msgid "cannot create ICMP raw socket: %s."
msgstr ""
-#: dhcp.c:100
+#: dhcp.c:223
#, c-format
-msgid "duplicate IP address %s in dhcp-config directive."
+msgid "DHCP packet received on %s which has no address"
msgstr ""
-#: dhcp.c:103
+#: dhcp.c:382
#, c-format
-msgid "illegal domain %s in dhcp-config directive."
+msgid "DHCP range %s -- %s is not consistent with netmask %s"
msgstr ""
-#: dhcp.c:221
+#: dhcp.c:709
#, c-format
-msgid "DHCP packet received on %s which has no address"
+msgid "failed to read %s:%s"
msgstr ""
-#: dhcp.c:352
+#: dhcp.c:744
#, c-format
-msgid "DHCP range %s -- %s is not consistent with netmask %s"
+msgid "bad line at %s line %d"
msgstr ""
-#: dhcp.c:669
+#: dhcp.c:847
#, c-format
-msgid "failed to read %s:%s"
+msgid "duplicate IP address %s in dhcp-config directive."
msgstr ""
-#: dhcp.c:704
+#: dhcp.c:850
#, c-format
-msgid "bad line at %s line %d"
+msgid "duplicate IP address %s in %s."
msgstr ""
-#: dhcp.c:826
+#: dhcp.c:858
#, c-format
-msgid "duplicate IP address %s in %s."
+msgid "illegal domain %s in dhcp-config directive."
msgstr ""
-#: dhcp.c:832
+#: dhcp.c:860
#, c-format
msgid "illegal domain %s in %s."
msgstr ""
-#: dhcp.c:839
+#: dhcp.c:899
#, c-format
-msgid "read %s - %d hosts"
+msgid "%s has more then one address in hostsfile, using %s for DHCP"
msgstr ""
-#: dhcp.c:866
+#: dhcp.c:904
#, c-format
msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr ""
-#: lease.c:54
+#: lease.c:58
#, c-format
msgid "cannot open or create lease file %s: %s"
msgstr ""
-#: lease.c:80
+#: lease.c:84
msgid "too many stored leases"
msgstr ""
-#: lease.c:121
+#: lease.c:125
#, c-format
msgid "cannot run lease-init script %s: %s"
msgstr ""
-#: lease.c:127
+#: lease.c:131
#, c-format
msgid "lease-init script returned exit code %s"
msgstr ""
-#: lease.c:234
+#: lease.c:238
#, c-format
msgid "failed to write %s: %s (retry in %us)"
msgstr ""
-#: rfc2131.c:300
+#: rfc2131.c:303
#, c-format
msgid "no address range available for DHCP request %s %s"
msgstr ""
-#: rfc2131.c:301
+#: rfc2131.c:304
msgid "with subnet selector"
msgstr ""
-#: rfc2131.c:301
+#: rfc2131.c:304
msgid "via"
msgstr ""
-#: rfc2131.c:312
+#: rfc2131.c:315
#, c-format
msgid "DHCP packet: transaction-id is %u"
msgstr ""
-#: rfc2131.c:317
+#: rfc2131.c:320
#, c-format
msgid "Available DHCP subnet: %s/%s"
msgstr ""
-#: rfc2131.c:319
+#: rfc2131.c:322
#, c-format
msgid "Available DHCP range: %s -- %s"
msgstr ""
-#: rfc2131.c:347 rfc2131.c:378
+#: rfc2131.c:350 rfc2131.c:381
msgid "disabled"
msgstr ""
-#: rfc2131.c:390 rfc2131.c:852
+#: rfc2131.c:393 rfc2131.c:873
msgid "address in use"
msgstr ""
-#: rfc2131.c:393
+#: rfc2131.c:396
msgid "no address configured"
msgstr ""
-#: rfc2131.c:406 rfc2131.c:720
+#: rfc2131.c:409 rfc2131.c:736
msgid "no address available"
msgstr ""
-#: rfc2131.c:416
-#, c-format
-msgid "Limit of %d leases exceeded."
-msgstr ""
-
-#: rfc2131.c:417 rfc2131.c:862
+#: rfc2131.c:418 rfc2131.c:883
msgid "no leases left"
msgstr ""
-#: rfc2131.c:421 rfc2131.c:826
+#: rfc2131.c:421 rfc2131.c:847
msgid "wrong network"
msgstr ""
-#: rfc2131.c:519
+#: rfc2131.c:520
#, c-format
msgid "Ignoring domain %s for DHCP host name %s"
msgstr ""
-#: rfc2131.c:598
+#: rfc2131.c:614
#, c-format
msgid "Vendor class: %s"
msgstr ""
-#: rfc2131.c:600
+#: rfc2131.c:616
#, c-format
msgid "User class: %s"
msgstr ""
-#: rfc2131.c:641
+#: rfc2131.c:657
#, c-format
msgid "disabling DHCP static address %s for %s"
msgstr ""
-#: rfc2131.c:662
+#: rfc2131.c:678
msgid "unknown lease"
msgstr ""
-#: rfc2131.c:671 rfc2131.c:970
+#: rfc2131.c:687 rfc2131.c:992
msgid "ignored"
msgstr ""
-#: rfc2131.c:691
+#: rfc2131.c:707
#, c-format
msgid "not using configured address %s because it is leased to %s"
msgstr ""
-#: rfc2131.c:701
+#: rfc2131.c:717
#, c-format
msgid ""
"not using configured address %s because it is in use by the server or relay"
msgstr ""
-#: rfc2131.c:704
+#: rfc2131.c:720
#, c-format
msgid "not using configured address %s because it was previously declined"
msgstr ""
-#: rfc2131.c:718 rfc2131.c:855
+#: rfc2131.c:734 rfc2131.c:876
msgid "no unique-id"
msgstr ""
-#: rfc2131.c:789
+#: rfc2131.c:806
msgid "wrong address"
msgstr ""
-#: rfc2131.c:802
+#: rfc2131.c:823
msgid "lease not found"
msgstr ""
-#: rfc2131.c:834
+#: rfc2131.c:855
msgid "address not available"
msgstr ""
-#: rfc2131.c:845
+#: rfc2131.c:866
msgid "static lease available"
msgstr ""
-#: rfc2131.c:849
+#: rfc2131.c:870
msgid "address reserved"
msgstr ""
-#: rfc2131.c:1252
+#: rfc2131.c:1265
#, c-format
msgid "tags: %s"
msgstr ""
-#: rfc2131.c:1334
+#: rfc2131.c:1352
#, c-format
msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
msgstr ""
-#: rfc2131.c:1488
+#: rfc2131.c:1507
#, c-format
msgid "requested options: %s"
msgstr ""
-#: rfc2131.c:1519
+#: rfc2131.c:1556
#, c-format
-msgid "server name: %s"
+msgid "next server: %s"
msgstr ""
-#: rfc2131.c:1531
+#: rfc2131.c:1580
#, c-format
msgid "bootfile name: %s"
msgstr ""
-#: rfc2131.c:1540
+#: rfc2131.c:1583
#, c-format
-msgid "next server: %s"
+msgid "server name: %s"
msgstr ""
-#: netlink.c:59
+#: netlink.c:63
#, c-format
msgid "cannot create netlink socket: %s"
msgstr ""
-#: netlink.c:226
+#: netlink.c:230
#, c-format
msgid "netlink returns error: %s"
msgstr ""
-#: dbus.c:111
+#: dbus.c:115
msgid "attempt to set an IPv6 server address via DBus - no IPv6 support"
msgstr ""
-#: dbus.c:237
+#: dbus.c:241
msgid "setting upstream servers from DBus"
msgstr ""
-#: dbus.c:275
+#: dbus.c:279
msgid "could not register a DBus message handler"
msgstr ""
-#: bpf.c:43
+#: bpf.c:146
#, c-format
msgid "cannot create DHCP BPF socket: %s"
msgstr ""
-#: bpf.c:71
+#: bpf.c:174
#, c-format
msgid "DHCP request for unsupported hardware type (%d) received on %s"
msgstr ""
-#: tftp.c:158
+#: tftp.c:173
+msgid "unable to get free port for TFTP"
+msgstr ""
+
+#: tftp.c:188
#, c-format
msgid "unsupported request from %s"
msgstr ""
-#: tftp.c:236
+#: tftp.c:266
#, c-format
msgid "TFTP sent %s to %s"
msgstr ""
-#: tftp.c:259
+#: tftp.c:289
#, c-format
msgid "file %s not found"
msgstr ""
-#: tftp.c:369
+#: tftp.c:399
#, c-format
msgid "TFTP error %d %s received from %s"
msgstr ""
-#: tftp.c:400
+#: tftp.c:430
#, c-format
msgid "TFTP failed sending %s to %s"
msgstr ""
-#: log.c:69
+#: log.c:73
#, c-format
msgid "cannot open %s: %s"
msgstr ""
-#: log.c:146
+#: log.c:89
+#, c-format
+msgid "warning: failed to change owner of %s: %s"
+msgstr ""
+
+#: log.c:161
#, c-format
msgid "overflow: %d log entries lost"
msgstr ""
-#: log.c:223
+#: log.c:238
#, c-format
msgid "log failed: %s"
msgstr ""
-#: log.c:378
+#: log.c:394
msgid "FAILED to start up"
msgstr ""
diff --git a/po/ro.po b/po/ro.po
index c37e70f..b1ad356 100644
--- a/po/ro.po
+++ b/po/ro.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dnsmasq 2.24\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-08-29 11:09+0100\n"
+"POT-Creation-Date: 2008-02-12 11: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"
@@ -15,31 +15,31 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
# for compatibility purposes the letters â, ă, ş, ţ and î can be written as their look-alike correspondent.
-#: cache.c:671
+#: cache.c:680
#, fuzzy, c-format
msgid "failed to load names from %s: %s"
msgstr "încărcarea numelor din %s: %m a eşuat"
-#: cache.c:705 dhcp.c:717
+#: cache.c:714 dhcp.c:757
#, c-format
msgid "bad address at %s line %d"
msgstr "adresă greşită în %s, linia %d"
-#: cache.c:752 dhcp.c:731
+#: cache.c:761 dhcp.c:771
#, c-format
msgid "bad name at %s line %d"
msgstr "nume greşit în %s linia %d"
-#: cache.c:759 dhcp.c:785
+#: cache.c:768 dhcp.c:825
#, c-format
msgid "read %s - %d addresses"
msgstr "citesc %s - %d adrese"
-#: cache.c:797
+#: cache.c:806
msgid "cleared cache"
msgstr "memoria temporară a fost ştearsă"
-#: cache.c:844
+#: cache.c:855
#, c-format
msgid ""
"not giving name %s to the DHCP lease of %s because the name exists in %s "
@@ -48,380 +48,429 @@ msgstr ""
"nu pot da numele %s împrumutului de adresă DHCP a lui %s deoarece "
"numeleexistă în %s cu adresa %s"
-#: cache.c:884
+#: cache.c:907
+#, c-format
+msgid "time %lu"
+msgstr ""
+
+#: cache.c:908
#, fuzzy, c-format
-msgid ""
-"time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache "
-"entries."
+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:157 option.c:758
+#: cache.c:910
+#, c-format
+msgid "queries forwarded %u, queries answered locally %u"
+msgstr ""
+
+#: cache.c:933
+#, c-format
+msgid "server %s#%d: queries sent %u, retried or failed %u"
+msgstr ""
+
+#: util.c:160
msgid "could not get memory"
msgstr "nu am putut aloca memorie"
-#: util.c:167
+#: util.c:170
#, fuzzy, c-format
msgid "failed to allocate %d bytes"
msgstr "nu pot încărca %s: %n"
-#: util.c:272
+#: util.c:275
#, c-format
msgid "infinite"
msgstr "infinit"
-#: option.c:188
+#: option.c:244
msgid "Specify local address(es) to listen on."
msgstr "Specificaţi adresele locale deservite."
-#: option.c:189
+#: option.c:245
msgid "Return ipaddr for all hosts in specified domains."
msgstr "Afişează adresele IP ale maşinilor în domeniul dat."
-#: option.c:190
+#: option.c:246
msgid "Fake reverse lookups for RFC1918 private address ranges."
msgstr ""
"Simulează căutări după adresă pentru domenii de adresă private (RFC1918)."
-#: option.c:191
+#: option.c:247
msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."
msgstr "Interpretează adresa IP ca NXDOMAIN (împotriva manipulărilor Verisign)"
-#: option.c:192
+#: option.c:248
#, c-format
msgid "Specify the size of the cache in entries (defaults to %s)."
msgstr "Specifică mărimea înregistrărilor temporare (implicit e %s)."
-#: option.c:193
+#: option.c:249
#, c-format
msgid "Specify configuration file (defaults to %s)."
msgstr "Specifică fişier de configurare (implicit e %s)."
-#: option.c:194
+#: option.c:250
msgid "Do NOT fork into the background: run in debug mode."
msgstr "NU porneşte în fundal: rulează în modul depanare."
-#: option.c:195
+#: option.c:251
msgid "Do NOT forward queries with no domain part."
msgstr "NU înainta cererile ce nu conţin domeniu DNS."
-#: option.c:196
+#: option.c:252
msgid "Return self-pointing MX records for local hosts."
msgstr "Răspunde cu înregistrări MX spre el însuşi pentru maşini locale."
-#: option.c:197
+#: option.c:253
msgid "Expand simple names in /etc/hosts with domain-suffix."
msgstr "Adaugă numelor simple din /etc/hosts numele domeniului ca sufix."
-#: option.c:198
+#: option.c:254
msgid "Don't forward spurious DNS requests from Windows hosts."
msgstr "Nu inainta cereri DNS defecte provenite de la maÅŸini Windows."
-#: option.c:199
+#: option.c:255
msgid "Enable DHCP in the range given with lease duration."
msgstr "Activează DHCP în domeniul dat cu durată limitată de împrumut."
-#: option.c:200
+#: option.c:256
#, c-format
msgid "Change to this group after startup (defaults to %s)."
msgstr "Rulează sub acest grup după pornire (implicit e %s)."
-#: option.c:201
+#: option.c:257
msgid "Set address or hostname for a specified machine."
msgstr "Schimbă adresa sau numele maşinii specificate."
-#: option.c:202
+#: option.c:258
msgid "Read DHCP host specs from file"
msgstr ""
-#: option.c:203
+#: option.c:259
+msgid "Read DHCP option specs from file"
+msgstr ""
+
+#: option.c:260
#, c-format
msgid "Do NOT load %s file."
msgstr "Nu încarcă fişierul %s."
-#: option.c:204
+#: option.c:261
#, 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:205
+#: option.c:262
msgid "Specify interface(s) to listen on."
msgstr "Specifică interfeţele deservite."
-#: option.c:206
+#: option.c:263
msgid "Specify interface(s) NOT to listen on."
msgstr "Specifică interfeţele NE-deservite."
-#: option.c:207
+#: option.c:264
#, fuzzy
msgid "Map DHCP user class to tag."
msgstr "Leagă clasa de utilizator DHCP cu grup de opţiuni."
-#: option.c:208
+#: option.c:265
msgid "Map RFC3046 circuit-id to tag."
msgstr ""
-#: option.c:209
+#: option.c:266
msgid "Map RFC3046 remote-id to tag."
msgstr ""
-#: option.c:210
+#: option.c:267
msgid "Map RFC3993 subscriber-id to tag."
msgstr ""
-#: option.c:211
+#: option.c:268
#, fuzzy
msgid "Don't do DHCP for hosts with tag set."
msgstr "Nu furniza DHCP maşinilor din grupul de opţiuni."
-#: option.c:212
+#: option.c:269
+#, fuzzy
+msgid "Force broadcast replies for hosts with tag set."
+msgstr "Nu furniza DHCP maşinilor din grupul de opţiuni."
+
+#: option.c:270
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:213
+#: option.c:271
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:214
+#: option.c:272
#, 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:215
+#: option.c:273
msgid "Return MX records for local hosts."
msgstr "Răspunde cu întregistrări MX pentru maşini locale."
-#: option.c:216
+#: option.c:274
msgid "Specify an MX record."
msgstr "Specifică o înregistrare MX."
-#: option.c:217
+#: option.c:275
msgid "Specify BOOTP options to DHCP server."
msgstr "Specifică opţiuni BOOTP serverului DHCP."
-#: option.c:218
+#: option.c:276
#, 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:219
+#: option.c:277
msgid "Do NOT cache failed search results."
msgstr "NU memora rezultatele de căutare DNS eşuatată."
-#: option.c:220
+#: option.c:278
#, 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:221
+#: option.c:279
#, fuzzy
msgid "Specify options to be sent to DHCP clients."
msgstr "Configurează opţiuni în plusce trebuie trimise clienţilor DHCP."
-#: option.c:222
+#: option.c:280
msgid "DHCP option sent even if the client does not request it."
msgstr ""
-#: option.c:223
+#: option.c:281
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:224
+#: option.c:282
#, 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:225
-msgid "Log queries."
+#: option.c:283
+#, fuzzy
+msgid "Log DNS queries."
msgstr "Înregistrează tranzacţiile."
-#: option.c:226
-msgid "Force the originating port for upstream queries."
+#: option.c:284
+#, fuzzy
+msgid "Force the originating port for upstream DNS queries."
msgstr "Forţează acest port pentru datele ce pleacă."
-#: option.c:227
+#: option.c:285
msgid "Do NOT read resolv.conf."
msgstr "NU citi fiÅŸierul resolv.conf"
-#: option.c:228
+#: option.c:286
#, c-format
msgid "Specify path to resolv.conf (defaults to %s)."
msgstr "Specifică calea către resolv.conf (implicit e %s)."
-#: option.c:229
+#: option.c:287
msgid "Specify address(es) of upstream servers with optional domains."
msgstr "Specifică adresele server(elor) superioare cu domenii opţionale."
-#: option.c:230
+#: option.c:288
msgid "Never forward queries to specified domains."
msgstr "Nu înaintează cererile spre domeniile specificate."
-#: option.c:231
+#: option.c:289
msgid "Specify the domain to be assigned in DHCP leases."
msgstr "Specifică domeniul de transmis prin DHCP."
-#: option.c:232
+#: option.c:290
msgid "Specify default target in an MX record."
msgstr "Specifică o ţintă într-o înregistrare MX."
-#: option.c:233
+#: option.c:291
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:234
+#: option.c:292
+#, fuzzy
+msgid "Specify time-to-live in seconds for negative caching."
+msgstr "Specifică TTL în secunde pentru răspunsurile din /etc/hosts."
+
+#: option.c:293
#, c-format
msgid "Change to this user after startup. (defaults to %s)."
msgstr "Rulează sub acest utilizator după pornire. (implicit e %s)."
-#: option.c:235
+#: option.c:294
#, fuzzy
msgid "Map DHCP vendor class to tag."
msgstr "Trimite opţiuni DHCP în funcţie de marca plăcii de reţea."
-#: option.c:236
+#: option.c:295
msgid "Display dnsmasq version and copyright information."
msgstr "Afişează versiunea dnsmasq şi drepturile de autor."
-#: option.c:237
+#: option.c:296
msgid "Translate IPv4 addresses from upstream servers."
msgstr "Traduce adresele IPv4 de la serverele DNS superioare."
-#: option.c:238
+#: option.c:297
msgid "Specify a SRV record."
msgstr "Specifică o înregistrare SRV."
-#: option.c:239
+#: option.c:298
msgid "Display this message. Use --help dhcp for known DHCP options."
msgstr ""
-#: option.c:240
+#: option.c:299
#, fuzzy, c-format
msgid "Specify path of PID file (defaults to %s)."
msgstr "Specifică o cale pentru fişierul PID. (implicit %s)."
-#: option.c:241
+#: option.c:300
#, c-format
msgid "Specify maximum number of DHCP leases (defaults to %s)."
msgstr "Specifică numărul maxim de împrumuturi DHCP (implicit %s)."
-#: option.c:242
+#: option.c:301
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:243
+#: option.c:302
msgid "Specify TXT DNS record."
msgstr "Specifică o înregistrare TXT."
-#: option.c:244
+#: option.c:303
#, fuzzy
msgid "Specify PTR DNS record."
msgstr "Specifică o înregistrare TXT."
-#: option.c:245
+#: option.c:304
msgid "Give DNS name to IPv4 address of interface."
msgstr ""
-#: option.c:246
+#: option.c:305
msgid "Bind only to interfaces in use."
msgstr "Ascultă doar pe interfeţele active."
-#: option.c:247
+#: option.c:306
#, c-format
msgid "Read DHCP static host information from %s."
msgstr "Citeşte informaţii DHCP statice despre maşină din %s."
-#: option.c:248
+#: option.c:307
msgid "Enable the DBus interface for setting upstream servers, etc."
msgstr "Activeaza interfaţa DBus pentru configurarea serverelor superioare."
-#: option.c:249
+#: option.c:308
msgid "Do not provide DHCP on this interface, only provide DNS."
msgstr "Nu activează DHCP ci doar DNS pe această interfaţă."
-#: option.c:250
+#: option.c:309
msgid "Enable dynamic address allocation for bootp."
msgstr "Activează alocarea dinamică a adreselor pentru BOOTP."
-#: option.c:251
+#: option.c:310
#, 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:253
+#: option.c:312
msgid "Treat DHCP requests on aliases as arriving from interface."
msgstr ""
-#: option.c:255
+#: option.c:314
msgid "Disable ICMP echo address checking in the DHCP server."
msgstr ""
-#: option.c:256
+#: option.c:315
msgid "Script to run on DHCP lease creation and destruction."
msgstr ""
-#: option.c:257
+#: option.c:316
msgid "Read configuration from all the files in this directory."
msgstr ""
-#: option.c:258
+#: option.c:317
#, fuzzy
msgid "Log to this syslog facility or file. (defaults to DAEMON)"
msgstr "Rulează sub acest utilizator după pornire. (implicit e %s)."
-#: option.c:259
+#: option.c:318
msgid "Read leases at startup, but never write the lease file."
msgstr ""
-#: option.c:260
+#: option.c:319
#, fuzzy, c-format
msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
msgstr "Specifică numărul maxim de împrumuturi DHCP (implicit %s)."
-#: option.c:261
+#: option.c:320
#, c-format
msgid "Clear DNS cache when reloading %s."
msgstr ""
-#: option.c:262
+#: option.c:321
msgid "Ignore hostnames provided by DHCP clients."
msgstr ""
-#: option.c:263
+#: option.c:322
+msgid "Do NOT reuse filename and server fields for extra DHCP options."
+msgstr ""
+
+#: option.c:323
msgid "Enable integrated read-only TFTP server."
msgstr ""
-#: option.c:264
+#: option.c:324
msgid "Export files by TFTP only from the specified subtree."
msgstr ""
-#: option.c:265
+#: option.c:325
msgid "Add client IP address to tftp-root."
msgstr ""
-#: option.c:266
+#: option.c:326
msgid "Allow access only to files owned by the user running dnsmasq."
msgstr ""
-#: option.c:267
+#: option.c:327
#, fuzzy, c-format
msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
msgstr "Specifică numărul maxim de împrumuturi DHCP (implicit %s)."
-#: option.c:268
+#: option.c:328
msgid "Disable the TFTP blocksize extension."
msgstr ""
-#: option.c:269
+#: option.c:329
+msgid "Ephemeral port range for use by TFTP transfers."
+msgstr ""
+
+#: option.c:330
msgid "Extra logging for DHCP."
msgstr ""
-#: option.c:270
+#: option.c:331
msgid "Enable async. logging; optionally set queue length."
msgstr ""
-#: option.c:501
+#: option.c:332
+msgid "Stop DNS rebinding. Filter private IP ranges when resolving."
+msgstr ""
+
+#: option.c:333
+msgid "Always perform DNS queries to all servers."
+msgstr ""
+
+#: option.c:334
+msgid "Set tag if client includes option in request."
+msgstr ""
+
+#: option.c:585
#, c-format
msgid ""
"Usage: dnsmasq [options]\n"
@@ -430,172 +479,190 @@ msgstr ""
"Utilizare: dnsmasq [opţiuni]\n"
"\n"
-#: option.c:503
+#: option.c:587
#, 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:505
+#: option.c:589
#, c-format
msgid "Valid options are :\n"
msgstr "Opţiunile valide sunt:\n"
-#: option.c:526
+#: option.c:610
#, c-format
msgid "Known DHCP options:\n"
msgstr ""
-#: option.c:599
+#: option.c:683
msgid "bad dhcp-option"
msgstr "dhcp-option invalid"
-#: option.c:655
+#: option.c:739
#, fuzzy
msgid "bad IP address"
msgstr "citesc %s - %d adrese"
-#: option.c:753
+#: option.c:837
msgid "bad domain in dhcp-option"
msgstr "domeniu DNS invalid în declaraţia dhcp-option"
-#: option.c:809
+#: option.c:895
msgid "dhcp-option too long"
msgstr "declararea dhcp-option este prea lungă"
-#: option.c:853
+#: option.c:942
#, fuzzy, c-format
msgid "cannot access directory %s: %s"
msgstr "nu pot citi %s: %s"
-#: option.c:872 tftp.c:313
+#: option.c:961 tftp.c:343
#, fuzzy, c-format
msgid "cannot access %s: %s"
msgstr "nu pot citi %s: %s"
-#: option.c:913
+#: option.c:998
msgid "only one dhcp-hostsfile allowed"
msgstr ""
-#: option.c:962
+#: option.c:1005
+msgid "only one dhcp-optsfile allowed"
+msgstr ""
+
+#: option.c:1049
msgid "bad MX preference"
msgstr "preferinţă MX invalidă"
-#: option.c:971
+#: option.c:1053
msgid "bad MX name"
msgstr "nume MX invalid"
-#: option.c:989
+#: option.c:1067
msgid "bad MX target"
msgstr "ţintă MX invalidă"
-#: option.c:1001
+#: option.c:1078
msgid "cannot run scripts under uClinux"
msgstr ""
-#: option.c:1196 option.c:1207
+#: option.c:1265 option.c:1273
msgid "bad port"
msgstr "port invalid"
-#: option.c:1349
+#: option.c:1293 option.c:1318
+msgid "interface binding not supported"
+msgstr ""
+
+#: option.c:1427
+#, fuzzy
+msgid "bad port range"
+msgstr "port invalid"
+
+#: option.c:1444
msgid "bad bridge-interface"
msgstr ""
-#: option.c:1391
+#: option.c:1485
msgid "bad dhcp-range"
msgstr "dhcp-range invalid"
-#: option.c:1419
+#: option.c:1511
msgid "only one netid tag allowed"
msgstr ""
-#: option.c:1461
+#: option.c:1551
msgid "inconsistent DHCP range"
msgstr "domeniu DHCP inconsistent"
-#: option.c:1637
+#: option.c:1719
#, fuzzy
msgid "bad DHCP host name"
msgstr "nume MX invalid"
-#: option.c:1861
+#: option.c:1959
#, fuzzy
msgid "bad interface name"
msgstr "nume MX invalid"
-#: option.c:1885
+#: option.c:1979
#, fuzzy
msgid "bad PTR record"
msgstr "înregistrare SRV invalidă"
-#: option.c:1909
-msgid "bad TXT record"
-msgstr "înregistrare TXT invalidă"
-
-#: option.c:1941
+#: option.c:1999
msgid "TXT record string too long"
msgstr "şirul de caractere pentru înregistrarea TXT este prea lung"
-#: option.c:1980
+#: option.c:2003
+msgid "bad TXT record"
+msgstr "înregistrare TXT invalidă"
+
+#: option.c:2063
msgid "bad SRV record"
msgstr "înregistrare SRV invalidă"
-#: option.c:1992
+#: option.c:2072
msgid "bad SRV target"
msgstr "ţintă SRV invalidă"
-#: option.c:2003
+#: option.c:2080
msgid "invalid port number"
msgstr "număr de port invalid"
-#: option.c:2013
+#: option.c:2087
msgid "invalid priority"
msgstr "prioritate invalidă"
-#: option.c:2023
+#: option.c:2094
msgid "invalid weight"
msgstr "pondere invalidă"
-#: option.c:2054
+#: option.c:2130
#, c-format
msgid "files nested too deep in %s"
msgstr ""
-#: option.c:2062 tftp.c:467
+#: option.c:2138 tftp.c:497
#, c-format
msgid "cannot read %s: %s"
msgstr "nu pot citi %s: %s"
-#: option.c:2114
+#: option.c:2199
msgid "missing \""
msgstr "lipseÅŸte \""
-#: option.c:2161
+#: option.c:2246
msgid "bad option"
msgstr "opţiune invalidă"
-#: option.c:2163
+#: option.c:2248
msgid "extraneous parameter"
msgstr "parametru nerecunoscut"
-#: option.c:2165
+#: option.c:2250
msgid "missing parameter"
msgstr "parametru lipsa"
-#: option.c:2173
+#: option.c:2258
msgid "error"
msgstr "eroare"
-#: option.c:2179
+#: option.c:2264
#, c-format
msgid "%s at line %d of %%s"
msgstr "%s la linia %d din %%s"
-#: option.c:2252
+#: option.c:2304 option.c:2334
+#, fuzzy, c-format
+msgid "read %s"
+msgstr "citesc %s"
+
+#: option.c:2400
#, c-format
msgid "Dnsmasq version %s %s\n"
msgstr "dnsmasq versiunea %s %s\n"
-#: option.c:2253
+#: option.c:2401
#, c-format
msgid ""
"Compile time options %s\n"
@@ -604,657 +671,694 @@ msgstr ""
"Opţiuni cu care a fost compilat %s\n"
"\n"
-#: option.c:2254
+#: option.c:2402
#, c-format
msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
msgstr "Acest program vine FÄ‚RÄ‚ NICI O GARANÅ¢IE.\n"
-#: option.c:2255
+#: option.c:2403
#, 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:2256
-#, c-format
-msgid "under the terms of the GNU General Public License, version 2.\n"
+#: option.c:2404
+#, fuzzy, c-format
+msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
msgstr "în termenii Licenţei publice generale GNU, versiunea 2.\n"
-#: option.c:2267
+#: option.c:2415
msgid "try --help"
msgstr ""
-#: option.c:2269
+#: option.c:2417
msgid "try -w"
msgstr ""
-#: option.c:2272
+#: option.c:2420
#, fuzzy, c-format
msgid "bad command line options: %s"
msgstr "opţiuni în linie de comandă invalide: %s."
-#: option.c:2313
+#: option.c:2461
#, c-format
msgid "cannot get host-name: %s"
msgstr "nu pot citi numele maÅŸinii: %s"
-#: option.c:2341
+#: option.c:2489
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:2351
+#: option.c:2499
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:2354 network.c:549
+#: option.c:2502 network.c:640
#, fuzzy, c-format
msgid "failed to read %s: %s"
msgstr "nu pot citi %s: %n"
-#: option.c:2372
+#: option.c:2520
#, 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:376
+#: forward.c:381
#, c-format
msgid "nameserver %s refused to do a recursive query"
msgstr "serverul DNS %s refuză interogările recursive"
-#: isc.c:73 dnsmasq.c:723
+#: forward.c:409
+msgid "possible DNS-rebind attack detected"
+msgstr ""
+
+#: isc.c:77 dnsmasq.c:747
#, fuzzy, c-format
msgid "failed to access %s: %s"
msgstr "accesarea serverului %s a eÅŸuat: %n"
-#: isc.c:89
+#: isc.c:93
#, fuzzy, c-format
msgid "failed to load %s: %s"
msgstr "nu pot încărca %s: %n"
-#: isc.c:93 dnsmasq.c:745
+#: isc.c:97 dnsmasq.c:769
#, c-format
msgid "reading %s"
msgstr "citesc %s"
-#: isc.c:115
+#: isc.c:119
#, c-format
msgid "bad name in %s"
msgstr "nume invalid în %s"
-#: isc.c:177
+#: isc.c:181
#, 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:41
+#: network.c:45
#, fuzzy, c-format
msgid "unknown interface %s in bridge-interface"
msgstr "interfaţă necunoscută %s"
-#: network.c:377 dnsmasq.c:170
+#: network.c:389 dnsmasq.c:180
#, c-format
msgid "failed to create listening socket: %s"
msgstr "creearea socket-ului de ascultare a eÅŸuat: %s"
-#: network.c:384
+#: network.c:396
#, 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:402
+#: network.c:415
#, 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:410
+#: network.c:420
#, c-format
msgid "failed to listen on socket: %s"
msgstr "ascultarea pe socket a eÅŸuat: %s"
-#: network.c:421
+#: network.c:432
#, fuzzy, c-format
msgid "failed to create TFTP socket: %s"
msgstr "creearea socket-ului de ascultare a eÅŸuat: %s"
-#: network.c:493
+#: network.c:549
+#, fuzzy, c-format
+msgid "failed to bind server socket for %s: %s"
+msgstr "activarea socket-ului de ascultare pentru %s a eÅŸuat: %s"
+
+#: network.c:582
#, c-format
msgid "ignoring nameserver %s - local interface"
msgstr "ignorăm serverul DNS %s - interfaţă locală"
-#: network.c:502
+#: network.c:591
#, fuzzy, c-format
msgid "ignoring nameserver %s - cannot make/bind socket: %s"
msgstr "ignorăm serverul DNS %s - nu pot creea/activa socket-ul: %s"
-#: network.c:517
+#: network.c:606
msgid "unqualified"
msgstr "invalid"
-#: network.c:517
+#: network.c:606
msgid "names"
msgstr ""
-#: network.c:519
+#: network.c:608
msgid "default"
msgstr ""
-#: network.c:521
+#: network.c:610
msgid "domain"
msgstr "domeniu"
-#: network.c:524
+#: network.c:613
#, c-format
msgid "using local addresses only for %s %s"
msgstr "folosim adresele locale doar pentru %S %s"
-#: network.c:526
+#: network.c:615
#, c-format
msgid "using nameserver %s#%d for %s %s"
msgstr "folosim serverul DNS %s#%d pentru %s %s"
-#: network.c:529
+#: network.c:618
+#, fuzzy, c-format
+msgid "using nameserver %s#%d(via %s)"
+msgstr "folosim serverul DNS %s#%d"
+
+#: network.c:620
#, c-format
msgid "using nameserver %s#%d"
msgstr "folosim serverul DNS %s#%d"
-#: dnsmasq.c:106
+#: dnsmasq.c:110
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:128
+#: dnsmasq.c:132
#, fuzzy
msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
msgstr "DBus nu este disponibil: puneţi HAVE_DBUS in src/config.h"
-#: dnsmasq.c:142
+#: dnsmasq.c:137
+msgid "asychronous logging is not available under Solaris"
+msgstr ""
+
+#: dnsmasq.c:151
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:152
+#: dnsmasq.c:161
#, c-format
msgid "failed to find list of interfaces: %s"
msgstr "enumerarea interfeţelor a eşuat: %s"
-#: dnsmasq.c:160
+#: dnsmasq.c:169
#, c-format
msgid "unknown interface %s"
msgstr "interfaţă necunoscută %s"
-#: dnsmasq.c:166
+#: dnsmasq.c:175
#, c-format
msgid "no interface with address %s"
msgstr "nu exista interfaţă pentru adresa %s"
-#: dnsmasq.c:181 dnsmasq.c:538
+#: dnsmasq.c:192 dnsmasq.c:561
#, c-format
msgid "DBus error: %s"
msgstr "eroare DBus: %s"
-#: dnsmasq.c:184
+#: dnsmasq.c:195
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:216
+#: dnsmasq.c:204
#, fuzzy, c-format
msgid "cannot create pipe: %s"
msgstr "nu pot citi %s: %s"
-#: dnsmasq.c:237
+#: dnsmasq.c:225
#, c-format
msgid "cannot fork into background: %s"
msgstr ""
-#: dnsmasq.c:335
+#: dnsmasq.c:239
+#, c-format
+msgid "cannot chdir to filesystem root: %s"
+msgstr ""
+
+#: dnsmasq.c:349
+#, fuzzy, c-format
+msgid "started, version %s DNS disabled"
+msgstr "am pornit, versiunea %s memorie temporară dezactivată"
+
+#: dnsmasq.c:351
#, c-format
msgid "started, version %s cachesize %d"
msgstr "am ponit, versiunea %s memorie temporară %d"
-#: dnsmasq.c:337
+#: dnsmasq.c:353
#, c-format
msgid "started, version %s cache disabled"
msgstr "am pornit, versiunea %s memorie temporară dezactivată"
-#: dnsmasq.c:339
+#: dnsmasq.c:355
#, c-format
msgid "compile time options: %s"
msgstr "compilat cu opţiunile: %s"
-#: dnsmasq.c:345
+#: dnsmasq.c:361
msgid "DBus support enabled: connected to system bus"
msgstr "suportul DBus activ: sunt conectat la magistrala sistem"
-#: dnsmasq.c:347
+#: dnsmasq.c:363
msgid "DBus support enabled: bus connection pending"
msgstr "suportul DBus activ: aştept conexiunea la magistrală"
-#: dnsmasq.c:352
+#: dnsmasq.c:368
msgid "setting --bind-interfaces option because of OS limitations"
msgstr "specific opţiunea --bind-interfaces din cauza limitărilor SO"
-#: dnsmasq.c:357
+#: dnsmasq.c:373
#, c-format
msgid "warning: interface %s does not currently exist"
msgstr "atenţie: interfaţa %s nu există momentan"
-#: dnsmasq.c:362
+#: dnsmasq.c:378
msgid "warning: ignoring resolv-file flag because no-resolv is set"
msgstr ""
-#: dnsmasq.c:365
+#: dnsmasq.c:381
#, fuzzy
msgid "warning: no upstream servers configured"
msgstr "configurăm serverele superioare prin Dbus"
-#: dnsmasq.c:369
+#: dnsmasq.c:385
#, c-format
msgid "asynchronous logging enabled, queue limit is %d messages"
msgstr ""
-#: dnsmasq.c:381
+#: dnsmasq.c:397
#, 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:382
+#: dnsmasq.c:398
#, c-format
msgid "DHCP, IP range %s -- %s, lease time %s"
msgstr "DHCP, domeniu IP %s -- %s, timpul reînoirii %s"
-#: dnsmasq.c:396
+#: dnsmasq.c:412
msgid "root is "
msgstr ""
-#: dnsmasq.c:396
+#: dnsmasq.c:412
#, fuzzy
msgid "enabled"
msgstr "dezactivat"
-#: dnsmasq.c:398
+#: dnsmasq.c:414
msgid "secure mode"
msgstr ""
-#: dnsmasq.c:418
+#: dnsmasq.c:440
#, c-format
msgid "restricting maximum simultaneous TFTP transfers to %d"
msgstr ""
-#: dnsmasq.c:427
+#: dnsmasq.c:449
#, c-format
msgid "warning: setting capabilities failed: %s"
msgstr ""
-#: dnsmasq.c:429
+#: dnsmasq.c:451
msgid "running as root"
msgstr "rulez ca root"
-#: dnsmasq.c:540
+#: dnsmasq.c:563
msgid "connected to system DBus"
msgstr "magistrala sistem Dbus conectată"
-#: dnsmasq.c:659
+#: dnsmasq.c:683
#, c-format
msgid "child process killed by signal %d"
msgstr ""
-#: dnsmasq.c:663
+#: dnsmasq.c:687
#, c-format
msgid "child process exited with status %d"
msgstr ""
-#: dnsmasq.c:667
+#: dnsmasq.c:691
#, fuzzy, c-format
msgid "failed to execute %s: %s"
msgstr "accesarea serverului %s a eÅŸuat: %n"
-#: dnsmasq.c:671
+#: dnsmasq.c:695
#, fuzzy, c-format
msgid "failed to create helper: %s"
msgstr "nu pot citi %s: %n"
-#: dnsmasq.c:705
+#: dnsmasq.c:729
msgid "exiting on receipt of SIGTERM"
msgstr "am primit SIGTERM, am terminat"
-#: dnsmasq.c:756
+#: dnsmasq.c:780
#, fuzzy, c-format
msgid "no servers found in %s, will retry"
msgstr "nu s-a găsit nici un criteriu de căutare în %s"
-#: dhcp.c:32
+#: dhcp.c:38
#, c-format
msgid "cannot create DHCP socket : %s"
msgstr "nu pot creea socket DHCP : %s"
-#: dhcp.c:41
+#: dhcp.c:50
#, c-format
msgid "failed to set options on DHCP socket: %s"
msgstr "configurarea opţiunilor socketului DHCP a eşuat: %s"
-#: dhcp.c:59
+#: dhcp.c:68
#, fuzzy, c-format
msgid "failed to set SO_REUSE{ADDR|PORT} on DHCP socket: %s"
msgstr "configurarea SO_REUSEADDR pe socket-ul DHCP a eÅŸuat: %s"
-#: dhcp.c:72
+#: dhcp.c:81
#, c-format
msgid "failed to bind DHCP server socket: %s"
msgstr "activarea socket-ului server-ului DHCP a eÅŸuat: %s"
-#: dhcp.c:85
+#: dhcp.c:94
#, c-format
msgid "cannot create ICMP raw socket: %s."
msgstr "nu pot creea socket ICMP raw: %s."
-#: dhcp.c:100
-#, c-format
-msgid "duplicate IP address %s in dhcp-config directive."
-msgstr "adresă IP duplicat %s în declaraţia dhcp-config."
-
-#: dhcp.c:103
-#, fuzzy, c-format
-msgid "illegal domain %s in dhcp-config directive."
-msgstr "adresă IP duplicat %s în declaraţia dhcp-config."
-
-#: dhcp.c:221
+#: dhcp.c:223
#, c-format
msgid "DHCP packet received on %s which has no address"
msgstr ""
-#: dhcp.c:352
+#: dhcp.c:382
#, 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:669
+#: dhcp.c:709
#, fuzzy, c-format
msgid "failed to read %s:%s"
msgstr "nu pot citi %s: %n"
-#: dhcp.c:704
+#: dhcp.c:744
#, c-format
msgid "bad line at %s line %d"
msgstr "linie invalidă în %s rândul %d"
-#: dhcp.c:826
+#: dhcp.c:847
+#, c-format
+msgid "duplicate IP address %s in dhcp-config directive."
+msgstr "adresă IP duplicat %s în declaraţia dhcp-config."
+
+#: dhcp.c:850
#, fuzzy, c-format
msgid "duplicate IP address %s in %s."
msgstr "adresă IP duplicat %s în declaraţia dhcp-config."
-#: dhcp.c:832
+#: dhcp.c:858
+#, fuzzy, c-format
+msgid "illegal domain %s in dhcp-config directive."
+msgstr "adresă IP duplicat %s în declaraţia dhcp-config."
+
+#: dhcp.c:860
#, c-format
msgid "illegal domain %s in %s."
msgstr ""
-#: dhcp.c:839
-#, fuzzy, c-format
-msgid "read %s - %d hosts"
-msgstr "citesc %s - %d adrese"
+#: dhcp.c:899
+#, c-format
+msgid "%s has more then one address in hostsfile, using %s for DHCP"
+msgstr ""
-#: dhcp.c:866
+#: dhcp.c:904
#, c-format
msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr "adresă IP duplicat %s (%s) în declaraţia dhcp-config."
-#: lease.c:54
+#: lease.c:58
#, fuzzy, c-format
msgid "cannot open or create lease file %s: %s"
msgstr "nu pot creea sau deschide fişierul cu împrumuturi: %s"
-#: lease.c:80
+#: lease.c:84
msgid "too many stored leases"
msgstr "prea multe împrumuturi stocate"
-#: lease.c:121
+#: lease.c:125
#, fuzzy, c-format
msgid "cannot run lease-init script %s: %s"
msgstr "nu pot citi %s: %s"
-#: lease.c:127
+#: lease.c:131
#, c-format
msgid "lease-init script returned exit code %s"
msgstr ""
-#: lease.c:234
+#: lease.c:238
#, fuzzy, c-format
msgid "failed to write %s: %s (retry in %us)"
msgstr "nu pot citi %s: %n"
-#: rfc2131.c:300
+#: rfc2131.c:303
#, 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:301
+#: rfc2131.c:304
msgid "with subnet selector"
msgstr "cu selectorul de subreţea"
-#: rfc2131.c:301
+#: rfc2131.c:304
msgid "via"
msgstr "prin"
-#: rfc2131.c:312
+#: rfc2131.c:315
#, c-format
msgid "DHCP packet: transaction-id is %u"
msgstr ""
-#: rfc2131.c:317
+#: rfc2131.c:320
#, c-format
msgid "Available DHCP subnet: %s/%s"
msgstr ""
-#: rfc2131.c:319
+#: rfc2131.c:322
#, c-format
msgid "Available DHCP range: %s -- %s"
msgstr ""
-#: rfc2131.c:347 rfc2131.c:378
+#: rfc2131.c:350 rfc2131.c:381
msgid "disabled"
msgstr "dezactivat"
-#: rfc2131.c:390 rfc2131.c:852
+#: rfc2131.c:393 rfc2131.c:873
msgid "address in use"
msgstr "adresa este folosită"
-#: rfc2131.c:393
+#: rfc2131.c:396
msgid "no address configured"
msgstr "adresă lipsă"
-#: rfc2131.c:406 rfc2131.c:720
+#: rfc2131.c:409 rfc2131.c:736
msgid "no address available"
msgstr "nici o adresă disponibilă"
-#: rfc2131.c:416
-#, c-format
-msgid "Limit of %d leases exceeded."
-msgstr ""
-
-#: rfc2131.c:417 rfc2131.c:862
+#: rfc2131.c:418 rfc2131.c:883
msgid "no leases left"
msgstr "nu mai am de unde să împrumut"
-#: rfc2131.c:421 rfc2131.c:826
+#: rfc2131.c:421 rfc2131.c:847
msgid "wrong network"
msgstr "reţea greşită"
-#: rfc2131.c:519
+#: rfc2131.c:520
#, c-format
msgid "Ignoring domain %s for DHCP host name %s"
msgstr ""
-#: rfc2131.c:598
+#: rfc2131.c:614
#, c-format
msgid "Vendor class: %s"
msgstr ""
-#: rfc2131.c:600
+#: rfc2131.c:616
#, c-format
msgid "User class: %s"
msgstr ""
-#: rfc2131.c:641
+#: rfc2131.c:657
#, fuzzy, c-format
msgid "disabling DHCP static address %s for %s"
msgstr "dezactivăm adresele DHCP statice %s"
-#: rfc2131.c:662
+#: rfc2131.c:678
msgid "unknown lease"
msgstr "împrumut necunoscut"
-#: rfc2131.c:671 rfc2131.c:970
+#: rfc2131.c:687 rfc2131.c:992
msgid "ignored"
msgstr "ignorat"
-#: rfc2131.c:691
+#: rfc2131.c:707
#, c-format
msgid "not using configured address %s because it is leased to %s"
msgstr ""
-#: rfc2131.c:701
+#: rfc2131.c:717
#, c-format
msgid ""
"not using configured address %s because it is in use by the server or relay"
msgstr ""
-#: rfc2131.c:704
+#: rfc2131.c:720
#, c-format
msgid "not using configured address %s because it was previously declined"
msgstr ""
-#: rfc2131.c:718 rfc2131.c:855
+#: rfc2131.c:734 rfc2131.c:876
msgid "no unique-id"
msgstr ""
-#: rfc2131.c:789
+#: rfc2131.c:806
msgid "wrong address"
msgstr "adresă greşită"
-#: rfc2131.c:802
+#: rfc2131.c:823
msgid "lease not found"
msgstr "împrumutul nu a fost găsit"
-#: rfc2131.c:834
+#: rfc2131.c:855
msgid "address not available"
msgstr "adresă indisponibilă"
-#: rfc2131.c:845
+#: rfc2131.c:866
msgid "static lease available"
msgstr "împrumut static este disponibil"
-#: rfc2131.c:849
+#: rfc2131.c:870
msgid "address reserved"
msgstr "adresă rezervată"
-#: rfc2131.c:1252
+#: rfc2131.c:1265
#, c-format
msgid "tags: %s"
msgstr ""
-#: rfc2131.c:1334
+#: rfc2131.c:1352
#, fuzzy, c-format
msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
msgstr "nu pot trimite opţiunea DHCP %d: nu mai este loc în pachet"
-#: rfc2131.c:1488
+#: rfc2131.c:1507
#, fuzzy, c-format
msgid "requested options: %s"
msgstr "compilat cu opţiunile: %s"
-#: rfc2131.c:1519
-#, c-format
-msgid "server name: %s"
-msgstr ""
+#: rfc2131.c:1556
+#, fuzzy, c-format
+msgid "next server: %s"
+msgstr "eroare DBus: %s"
-#: rfc2131.c:1531
+#: rfc2131.c:1580
#, c-format
msgid "bootfile name: %s"
msgstr ""
-#: rfc2131.c:1540
-#, fuzzy, c-format
-msgid "next server: %s"
-msgstr "eroare DBus: %s"
+#: rfc2131.c:1583
+#, c-format
+msgid "server name: %s"
+msgstr ""
-#: netlink.c:59
+#: netlink.c:63
#, fuzzy, c-format
msgid "cannot create netlink socket: %s"
msgstr "nu pot să activez socket-ul netlink: %s"
-#: netlink.c:226
+#: netlink.c:230
#, fuzzy, c-format
msgid "netlink returns error: %s"
msgstr "eroare DBus: %s"
-#: dbus.c:111
+#: dbus.c:115
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
+#: dbus.c:241
msgid "setting upstream servers from DBus"
msgstr "configurăm serverele superioare prin Dbus"
-#: dbus.c:275
+#: dbus.c:279
msgid "could not register a DBus message handler"
msgstr "nu pot activa o interfaţă de mesaje DBus"
-#: bpf.c:43
+#: bpf.c:146
#, c-format
msgid "cannot create DHCP BPF socket: %s"
msgstr "nu pot creea socket DHCP BPF: %s"
-#: bpf.c:71
+#: bpf.c:174
#, fuzzy, c-format
msgid "DHCP request for unsupported hardware type (%d) received on %s"
msgstr "cerere DHCP pentru dispozitiv nesuportat (%d) recepţionată prin %s"
-#: tftp.c:158
+#: tftp.c:173
+msgid "unable to get free port for TFTP"
+msgstr ""
+
+#: tftp.c:188
#, c-format
msgid "unsupported request from %s"
msgstr ""
-#: tftp.c:236
+#: tftp.c:266
#, c-format
msgid "TFTP sent %s to %s"
msgstr ""
-#: tftp.c:259
+#: tftp.c:289
#, fuzzy, c-format
msgid "file %s not found"
msgstr "împrumutul nu a fost găsit"
-#: tftp.c:369
+#: tftp.c:399
#, c-format
msgid "TFTP error %d %s received from %s"
msgstr ""
-#: tftp.c:400
+#: tftp.c:430
#, fuzzy, c-format
msgid "TFTP failed sending %s to %s"
msgstr "nu pot citi %s: %n"
-#: log.c:69
+#: log.c:73
#, fuzzy, c-format
msgid "cannot open %s: %s"
msgstr "nu pot deschide %s:%s"
-#: log.c:146
+# for compatibility purposes the letters â, ă, ş, ţ and î can be written as their look-alike correspondent.
+#: log.c:89
+#, fuzzy, c-format
+msgid "warning: failed to change owner of %s: %s"
+msgstr "încărcarea numelor din %s: %m a eşuat"
+
+#: log.c:161
#, c-format
msgid "overflow: %d log entries lost"
msgstr ""
-#: log.c:223
+#: log.c:238
#, c-format
msgid "log failed: %s"
msgstr ""
-#: log.c:378
+#: log.c:394
msgid "FAILED to start up"
msgstr "pornirea A EÅžUAT"
+#, fuzzy
+#~ msgid "read %s - %d hosts"
+#~ msgstr "citesc %s - %d adrese"
+
#~ msgid "bad dhcp-host"
#~ msgstr "dhcp-host invalid"
diff --git a/src/bpf.c b/src/bpf.c
index 2dbc4f1..1b71f3c 100644
--- a/src/bpf.c
+++ b/src/bpf.c
@@ -1,20 +1,22 @@
-/* dnsmasq is Copyright (c) 2000-2006 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2007 Simon Kelley
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; version 2 dated June, 1991.
-
+ the Free Software Foundation; version 2 dated June, 1991, or
+ (at your option) version 3 dated 29 June, 2007.
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "dnsmasq.h"
-#ifndef HAVE_LINUX_NETWORK
-
-#include <net/bpf.h>
+#if defined(HAVE_BSD_NETWORK) || defined(HAVE_SOLARIS_NETWORK)
static struct iovec ifconf = {
.iov_base = NULL,
@@ -26,6 +28,107 @@ static struct iovec ifreq = {
.iov_len = 0
};
+int iface_enumerate(void *parm, int (*ipv4_callback)(), int (*ipv6_callback)())
+{
+ char *ptr;
+ struct ifreq *ifr;
+ struct ifconf ifc;
+ int fd, errsav, ret = 0;
+ int lastlen = 0;
+ size_t len = 0;
+
+ if ((fd = socket(PF_INET, SOCK_DGRAM, 0)) == -1)
+ return 0;
+
+ while(1)
+ {
+ len += 10*sizeof(struct ifreq);
+
+ if (!expand_buf(&ifconf, len))
+ goto err;
+
+ ifc.ifc_len = len;
+ ifc.ifc_buf = ifconf.iov_base;
+
+ if (ioctl(fd, SIOCGIFCONF, &ifc) == -1)
+ {
+ if (errno != EINVAL || lastlen != 0)
+ goto err;
+ }
+ else
+ {
+ if (ifc.ifc_len == lastlen)
+ break; /* got a big enough buffer now */
+ lastlen = ifc.ifc_len;
+ }
+ }
+
+ for (ptr = ifc.ifc_buf; ptr < ifc.ifc_buf + ifc.ifc_len; ptr += len )
+ {
+ /* subsequent entries may not be aligned, so copy into
+ an aligned buffer to avoid nasty complaints about
+ unaligned accesses. */
+#ifdef HAVE_SOCKADDR_SA_LEN
+ len = ((struct ifreq *)ptr)->ifr_addr.sa_len + IF_NAMESIZE;
+#else
+ len = sizeof(struct ifreq);
+#endif
+ if (!expand_buf(&ifreq, len))
+ goto err;
+
+ ifr = (struct ifreq *)ifreq.iov_base;
+ memcpy(ifr, ptr, len);
+
+ if (ifr->ifr_addr.sa_family == AF_INET && ipv4_callback)
+ {
+ struct in_addr addr, netmask, broadcast;
+ broadcast.s_addr = 0;
+ addr = ((struct sockaddr_in *) &ifr->ifr_addr)->sin_addr;
+ if (ioctl(fd, SIOCGIFNETMASK, ifr) == -1)
+ continue;
+ netmask = ((struct sockaddr_in *) &ifr->ifr_addr)->sin_addr;
+ if (ioctl(fd, SIOCGIFBRDADDR, ifr) != -1)
+ broadcast = ((struct sockaddr_in *) &ifr->ifr_addr)->sin_addr;
+ if (!((*ipv4_callback)(addr,
+ (int)if_nametoindex(ifr->ifr_name),
+ netmask, broadcast,
+ parm)))
+ goto err;
+ }
+#ifdef HAVE_IPV6
+ else if (ifr->ifr_addr.sa_family == AF_INET6 && ipv6_callback)
+ {
+ struct in6_addr *addr = &((struct sockaddr_in6 *)&ifr->ifr_addr)->sin6_addr;
+ /* voodoo to clear interface field in address */
+ if (!(daemon->options & OPT_NOWILD) && IN6_IS_ADDR_LINKLOCAL(addr))
+ {
+ addr->s6_addr[2] = 0;
+ addr->s6_addr[3] = 0;
+ }
+ if (!((*ipv6_callback)(addr,
+ (int)((struct sockaddr_in6 *)&ifr->ifr_addr)->sin6_scope_id,
+ (int)if_nametoindex(ifr->ifr_name),
+ parm)))
+ goto err;
+ }
+#endif
+ }
+
+ ret = 1;
+
+ err:
+ errsav = errno;
+ close(fd);
+ errno = errsav;
+
+ return ret;
+}
+#endif
+
+
+#if defined(HAVE_BSD_NETWORK)
+#include <net/bpf.h>
+
void init_bpf(void)
{
int i = 0;
@@ -116,8 +219,10 @@ void send_via_bpf(struct dhcp_packet *mess, size_t len,
udp.uh_sum = 0;
udp.uh_ulen = sum = htons(sizeof(struct udphdr) + len);
sum += htons(IPPROTO_UDP);
- for (i = 0; i < 4; i++)
- sum += ((u16 *)&ip.ip_src)[i];
+ sum += ip.ip_src.s_addr & 0xffff;
+ sum += (ip.ip_src.s_addr >> 16) & 0xffff;
+ sum += ip.ip_dst.s_addr & 0xffff;
+ sum += (ip.ip_dst.s_addr >> 16) & 0xffff;
for (i = 0; i < sizeof(struct udphdr)/2; i++)
sum += ((u16 *)&udp)[i];
for (i = 0; i < (len + 1) / 2; i++)
@@ -140,100 +245,6 @@ void send_via_bpf(struct dhcp_packet *mess, size_t len,
while (writev(daemon->dhcp_raw_fd, iov, 4) == -1 && retry_send());
}
-int iface_enumerate(void *parm, int (*ipv4_callback)(), int (*ipv6_callback)())
-{
- char *ptr;
- struct ifreq *ifr;
- struct ifconf ifc;
- int fd, errsav, ret = 0;
- int lastlen = 0;
- size_t len = 0;
-
- if ((fd = socket(PF_INET, SOCK_DGRAM, 0)) == -1)
- return 0;
-
- while(1)
- {
- len += 10*sizeof(struct ifreq);
-
- if (!expand_buf(&ifconf, len))
- goto err;
-
- ifc.ifc_len = len;
- ifc.ifc_buf = ifconf.iov_base;
-
- if (ioctl(fd, SIOCGIFCONF, &ifc) == -1)
- {
- if (errno != EINVAL || lastlen != 0)
- goto err;
- }
- else
- {
- if (ifc.ifc_len == lastlen)
- break; /* got a big enough buffer now */
- lastlen = ifc.ifc_len;
- }
- }
-
- for (ptr = ifc.ifc_buf; ptr < ifc.ifc_buf + ifc.ifc_len; ptr += len )
- {
- /* subsequent entries may not be aligned, so copy into
- an aligned buffer to avoid nasty complaints about
- unaligned accesses. */
-#ifdef HAVE_SOCKADDR_SA_LEN
- len = ((struct ifreq *)ptr)->ifr_addr.sa_len + IF_NAMESIZE;
-#else
- len = sizeof(struct ifreq);
#endif
- if (!expand_buf(&ifreq, len))
- goto err;
-
- ifr = ifreq.iov_base;
- memcpy(ifr, ptr, len);
-
- if (ifr->ifr_addr.sa_family == AF_INET && ipv4_callback)
- {
- struct in_addr addr, netmask, broadcast;
- broadcast.s_addr = 0;
- addr = ((struct sockaddr_in *) &ifr->ifr_addr)->sin_addr;
- if (ioctl(fd, SIOCGIFNETMASK, ifr) == -1)
- continue;
- netmask = ((struct sockaddr_in *) &ifr->ifr_addr)->sin_addr;
- if (ioctl(fd, SIOCGIFBRDADDR, ifr) != -1)
- broadcast = ((struct sockaddr_in *) &ifr->ifr_addr)->sin_addr;
- if (!((*ipv4_callback)(addr,
- (int)if_nametoindex(ifr->ifr_name),
- netmask, broadcast,
- parm)))
- goto err;
- }
-#ifdef HAVE_IPV6
- else if (ifr->ifr_addr.sa_family == AF_INET6 && ipv6_callback)
- {
- struct in6_addr *addr = &((struct sockaddr_in6 *)&ifr->ifr_addr)->sin6_addr;
- /* voodoo to clear interface field in address */
- if (!(daemon->options & OPT_NOWILD) && IN6_IS_ADDR_LINKLOCAL(addr))
- {
- addr->s6_addr[2] = 0;
- addr->s6_addr[3] = 0;
- }
- if (!((*ipv6_callback)(addr,
- (int)((struct sockaddr_in6 *)&ifr->ifr_addr)->sin6_scope_id,
- (int)if_nametoindex(ifr->ifr_name),
- parm)))
- goto err;
- }
-#endif
- }
-
- ret = 1;
-
- err:
- errsav = errno;
- close(fd);
- errno = errsav;
- return ret;
-}
-#endif
diff --git a/src/cache.c b/src/cache.c
index 339133b..8a38147 100644
--- a/src/cache.c
+++ b/src/cache.c
@@ -2,12 +2,16 @@
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; version 2 dated June, 1991.
-
+ the Free Software Foundation; version 2 dated June, 1991, or
+ (at your option) version 3 dated 29 June, 2007.
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "dnsmasq.h"
@@ -484,7 +488,8 @@ struct crec *cache_find_by_name(struct crec *crecp, char *name, time_t now, unsi
/* first search, look for relevant entries and push to top of list
also free anything which has expired */
struct crec *next, **up, **insert = NULL, **chainp = &ans;
-
+ int ins_flags = 0;
+
for (up = hash_bucket(name), crecp = *up; crecp; crecp = next)
{
next = crecp->hash_next;
@@ -506,14 +511,18 @@ struct crec *cache_find_by_name(struct crec *crecp, char *name, time_t now, unsi
cache_link(crecp);
}
- /* move all but the first entry up the hash chain
- this implements round-robin */
+ /* Move all but the first entry up the hash chain
+ this implements round-robin.
+ Make sure that re-ordering doesn't break the hash-chain
+ order invariants.
+ */
if (!insert)
{
- insert = up;
+ insert = up;
+ ins_flags = crecp->flags & (F_REVERSE | F_IMMORTAL);
up = &crecp->hash_next;
}
- else
+ else if ((crecp->flags & (F_REVERSE | F_IMMORTAL)) == ins_flags)
{
*up = crecp->hash_next;
crecp->hash_next = *insert;
@@ -827,14 +836,16 @@ void cache_unhash_dhcp(void)
void cache_add_dhcp_entry(char *host_name,
struct in_addr *host_address, time_t ttd)
{
- struct crec *crec;
+ struct crec *crec = NULL;
unsigned short flags = F_DHCP | F_FORWARD | F_IPV4 | F_REVERSE;
+ int in_hosts = 0;
if (!host_name)
return;
- if ((crec = cache_find_by_name(NULL, host_name, 0, F_IPV4 | F_CNAME)))
+ while ((crec = cache_find_by_name(crec, host_name, 0, F_IPV4 | F_CNAME)))
{
+ /* check all addresses associated with name */
if (crec->flags & F_HOSTS)
{
if (crec->addr.addr.addr.addr4.s_addr != host_address->s_addr)
@@ -845,23 +856,33 @@ void cache_add_dhcp_entry(char *host_name,
"the name exists in %s with address %s"),
host_name, inet_ntoa(*host_address),
record_source(daemon->addn_hosts, crec->uid), daemon->namebuff);
+ return;
}
- return;
+ else
+ /* if in hosts, don't need DHCP record */
+ in_hosts = 1;
}
else if (!(crec->flags & F_DHCP))
- cache_scan_free(host_name, NULL, 0, crec->flags & (F_IPV4 | F_CNAME | F_FORWARD));
- }
-
- if ((crec = cache_find_by_addr(NULL, (struct all_addr *)host_address, 0, F_IPV4)))
- {
- if (crec->flags & F_NEG)
- cache_scan_free(NULL, (struct all_addr *)host_address, 0, F_IPV4 | F_REVERSE);
- else
- /* avoid multiple reverse mappings */
- flags &= ~F_REVERSE;
+ {
+ cache_scan_free(host_name, NULL, 0, crec->flags & (F_IPV4 | F_CNAME | F_FORWARD));
+ /* scan_free deletes all addresses associated with name */
+ break;
+ }
}
+
+ if (in_hosts)
+ return;
- if ((crec = dhcp_spare))
+ if ((crec = cache_find_by_addr(NULL, (struct all_addr *)host_address, 0, F_IPV4)))
+ {
+ if (crec->flags & F_NEG)
+ cache_scan_free(NULL, (struct all_addr *)host_address, 0, F_IPV4 | F_REVERSE);
+ else
+ /* avoid multiple reverse mappings */
+ flags &= ~F_REVERSE;
+ }
+
+ if ((crec = dhcp_spare))
dhcp_spare = dhcp_spare->next;
else /* need new one */
crec = whine_malloc(sizeof(struct crec));
@@ -881,11 +902,38 @@ void cache_add_dhcp_entry(char *host_name,
void dump_cache(time_t now)
{
- my_syslog(LOG_INFO, _("time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache entries."),
- (unsigned long)now, daemon->cachesize, cache_live_freed, cache_inserted);
+ struct server *serv, *serv1;
+
+ my_syslog(LOG_INFO, _("time %lu"), (unsigned long)now);
+ my_syslog(LOG_INFO, _("cache size %d, %d/%d cache insertions re-used unexpired cache entries."),
+ daemon->cachesize, cache_live_freed, cache_inserted);
+ my_syslog(LOG_INFO, _("queries forwarded %u, queries answered locally %u"),
+ daemon->queries_forwarded, daemon->local_answer);
+
+ if (!addrbuff && !(addrbuff = whine_malloc(ADDRSTRLEN)))
+ return;
+
+ /* sum counts from different records for same server */
+ for (serv = daemon->servers; serv; serv = serv->next)
+ serv->flags &= ~SERV_COUNTED;
- if ((daemon->options & (OPT_DEBUG | OPT_LOG)) &&
- (addrbuff || (addrbuff = whine_malloc(ADDRSTRLEN))))
+ for (serv = daemon->servers; serv; serv = serv->next)
+ if (!(serv->flags & (SERV_NO_ADDR | SERV_LITERAL_ADDRESS | SERV_COUNTED)))
+ {
+ int port;
+ unsigned int queries = 0, failed_queries = 0;
+ for (serv1 = serv; serv1; serv1 = serv1->next)
+ if (!(serv1->flags & (SERV_NO_ADDR | SERV_LITERAL_ADDRESS | SERV_COUNTED)) && sockaddr_isequal(&serv->addr, &serv1->addr))
+ {
+ serv1->flags |= SERV_COUNTED;
+ queries += serv1->queries;
+ failed_queries += serv1->failed_queries;
+ }
+ port = prettyprint_addr(&serv->addr, addrbuff);
+ my_syslog(LOG_INFO, _("server %s#%d: queries sent %u, retried or failed %u"), addrbuff, port, queries, failed_queries);
+ }
+
+ if ((daemon->options & (OPT_DEBUG | OPT_LOG)))
{
struct crec *cache ;
int i;
@@ -988,15 +1036,19 @@ void log_query(unsigned short flags, char *name, struct all_addr *addr,
{
if (flags & F_IPV4)
dest = "NXDOMAIN-IPv4";
- else
- dest = "NXDOMAIN-IPv6";
+ else if (flags & F_IPV6)
+ dest = "NXDOMAIN-IPv6";
+ else
+ dest = "NXDOMAIN";
}
else
{
if (flags & F_IPV4)
dest = "NODATA-IPv4";
- else
+ else if (flags & F_IPV6)
dest = "NODATA-IPv6";
+ else
+ dest = "NODATA";
}
}
else if (flags & F_CNAME)
diff --git a/src/config.h b/src/config.h
index cfcf78b..afc16b3 100644
--- a/src/config.h
+++ b/src/config.h
@@ -2,15 +2,19 @@
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; version 2 dated June, 1991.
-
+ the Free Software Foundation; version 2 dated June, 1991, or
+ (at your option) version 3 dated 29 June, 2007.
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#define VERSION "2.40"
+#define VERSION "2.41"
#define FTABSIZ 150 /* max number of outstanding requests (default) */
#define MAX_PROCS 20 /* max no children for TCP requests */
@@ -35,6 +39,8 @@
#define RUNFILE "/var/run/dnsmasq.pid"
#if defined(__FreeBSD__) || defined (__OpenBSD__) || defined(__DragonFly__)
# define LEASEFILE "/var/db/dnsmasq.leases"
+#elif defined(__sun__)
+# define LEASEFILE "/var/cache/dnsmasq.leases"
#else
# define LEASEFILE "/var/lib/misc/dnsmasq.leases"
#endif
@@ -91,10 +97,12 @@
May replace this with Autoconf one day.
HAVE_LINUX_NETWORK
- define this to do networking the Linux way. When it's defined, the code will
- use IP_PKTINFO, Linux capabilities and the RTnetlink system. If it's not defined,
- a few facilities will be lost, namely support for multiple addresses on an interface,
- DNS query retransmission, and (on some systems) wildcard interface binding.
+HAVE_BSD_NETWORK
+HAVE_SOLARIS_NETWORK
+ define exactly one of these to alter interaction with kernel networking.
+
+HAVE_SOLARIS_PRIVS
+ define for Solaris > 10 which can split privileges.
HAVE_BROKEN_RTC
define this on embedded systems which don't have an RTC
@@ -157,10 +165,9 @@ NOTES:
HAVE_SOCKADDR_SA_LEN
For *BSD systems you should define
+ HAVE_BSD_NETWORK
HAVE_SOCKADDR_SA_LEN
HAVE_RANDOM
- you should NOT define
- HAVE_LINUX_NETWORK
and you MAY define
HAVE_ARC4RANDOM - OpenBSD and FreeBSD and NetBSD version 2.0 or later
HAVE_DEV_URANDOM - OpenBSD and FreeBSD and NetBSD
@@ -243,7 +250,7 @@ typedef unsigned long in_addr_t;
#endif
#elif defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)
-#undef HAVE_LINUX_NETWORK
+#define HAVE_BSD_NETWORK
/* Later verions of FreeBSD have getopt_long() */
#if defined(optional_argument) && defined(required_argument)
# define HAVE_GETOPT_LONG
@@ -256,7 +263,7 @@ typedef unsigned long in_addr_t;
#define HAVE_SOCKADDR_SA_LEN
#elif defined(__APPLE__)
-#undef HAVE_LINUX_NETWORK
+#define HAVE_BSD_NETWORK
#undef HAVE_GETOPT_LONG
#define HAVE_ARC4RANDOM
#define HAVE_RANDOM
@@ -268,15 +275,44 @@ typedef unsigned long in_addr_t;
#define IN6ADDRSZ 16
#elif defined(__NetBSD__)
-#undef HAVE_LINUX_NETWORK
+#define HAVE_BSD_NETWORK
#define HAVE_GETOPT_LONG
#undef HAVE_ARC4RANDOM
#define HAVE_RANDOM
#define HAVE_DEV_URANDOM
#define HAVE_DEV_RANDOM
#define HAVE_SOCKADDR_SA_LEN
-
+
+#elif defined(__sun) || defined(__sun__)
+#define HAVE_SOLARIS_NETWORK
+/* only Solaris 10 does split privs. */
+#if (SUNOS_VER >= 10)
+# define HAVE_SOLARIS_PRIVS
+# define HAVE_GETOPT_LONG
+#endif
+/* some CMSG stuff missing on early solaris */
+#ifndef OSSH_ALIGNBYTES
+# define OSSH_ALIGNBYTES (sizeof(int) - 1)
+#endif
+#ifndef __CMSG_ALIGN
+# define __CMSG_ALIGN(p) (((u_int)(p) + OSSH_ALIGNBYTES) &~ OSSH_ALIGNBYTES)
#endif
+#ifndef CMSG_LEN
+# define CMSG_LEN(len) (__CMSG_ALIGN(sizeof(struct cmsghdr)) + (len))
+#endif
+#ifndef CMSG_SPACE
+# define CMSG_SPACE(len) (__CMSG_ALIGN(sizeof(struct cmsghdr)) + __CMSG_ALIGN(len))
+#endif
+#undef HAVE_ARC4RANDOM
+#define HAVE_RANDOM
+#undef HAVE_DEV_URANDOM
+#undef HAVE_DEV_RANDOM
+#undef HAVE_SOCKADDR_SA_LEN
+#define _XPG4_2
+#define __EXTENSIONS__
+#define ETHER_ADDR_LEN 6
+#endif
+
/* Decide if we're going to support IPv6 */
/* IPv6 can be forced off with "make COPTS=-DNO_IPV6" */
/* We assume that systems which don't have IPv6
diff --git a/src/dbus.c b/src/dbus.c
index a560e71..e0b5df2 100644
--- a/src/dbus.c
+++ b/src/dbus.c
@@ -1,13 +1,17 @@
-/* dnsmasq is Copyright (c) 2000-2005 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2007 Simon Kelley
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; version 2 dated June, 1991.
-
+ the Free Software Foundation; version 2 dated June, 1991, or
+ (at your option) version 3 dated 29 June, 2007.
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "dnsmasq.h"
@@ -112,9 +116,9 @@ static void dbus_read_servers(DBusMessage *message)
#else
if (i == sizeof(struct in6_addr)-1)
{
- memcpy(&addr.in6.sin6_addr, p, sizeof(addr.in6));
+ memcpy(&addr.in6.sin6_addr, p, sizeof(struct in6_addr));
#ifdef HAVE_SOCKADDR_SA_LEN
- source_addr.in6.sin6_len = addr.in6.sin6_len = sizeof(addr.in6);
+ source_addr.in6.sin6_len = addr.in6.sin6_len = sizeof(stuct sockaddr_in6);
#endif
source_addr.in6.sin6_family = addr.in6.sin6_family = AF_INET6;
addr.in6.sin6_port = htons(NAMESERVER_PORT);
@@ -292,7 +296,11 @@ void set_dbus_listeners(int *maxfdp,
if (dbus_watch_get_enabled(w->watch))
{
unsigned int flags = dbus_watch_get_flags(w->watch);
+#if (DBUS_MINOR > 0)
+ int fd = dbus_watch_get_unix_fd(w->watch);
+#else
int fd = dbus_watch_get_fd(w->watch);
+#endif
bump_maxfd(fd, maxfdp);
@@ -315,7 +323,11 @@ void check_dbus_listeners(fd_set *rset, fd_set *wset, fd_set *eset)
if (dbus_watch_get_enabled(w->watch))
{
unsigned int flags = 0;
+#if (DBUS_MINOR > 0)
+ int fd = dbus_watch_get_unix_fd(w->watch);
+#else
int fd = dbus_watch_get_fd(w->watch);
+#endif
if (FD_ISSET(fd, rset))
flags |= DBUS_WATCH_READABLE;
diff --git a/src/dhcp.c b/src/dhcp.c
index 14252c4..dcd76d4 100644
--- a/src/dhcp.c
+++ b/src/dhcp.c
@@ -1,13 +1,17 @@
-/* dnsmasq is Copyright (c) 2000-2006 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2007 Simon Kelley
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; version 2 dated June, 1991.
-
+ the Free Software Foundation; version 2 dated June, 1991, or
+ (at your option) version 3 dated 29 June, 2007.
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "dnsmasq.h"
@@ -26,12 +30,17 @@ void dhcp_init(void)
int fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
struct sockaddr_in saddr;
int oneopt = 1;
- struct dhcp_config *configs, *cp;
+#if defined(IP_MTU_DISCOVER) && defined(IP_PMTUDISC_DONT)
+ int mtu = IP_PMTUDISC_DONT;
+#endif
if (fd == -1)
die (_("cannot create DHCP socket : %s"), NULL, EC_BADNET);
- if (!fix_fd(fd) ||
+ if (!fix_fd(fd) ||
+#if defined(IP_MTU_DISCOVER) && defined(IP_PMTUDISC_DONT)
+ setsockopt(fd, SOL_IP, IP_MTU_DISCOVER, &mtu, sizeof(mtu)) == -1 ||
+#endif
#if defined(HAVE_LINUX_NETWORK)
setsockopt(fd, SOL_IP, IP_PKTINFO, &oneopt, sizeof(oneopt)) == -1 ||
#elif defined(IP_RECVIF)
@@ -73,7 +82,7 @@ void dhcp_init(void)
daemon->dhcpfd = fd;
-#ifndef HAVE_LINUX_NETWORK
+#if defined(HAVE_BSD_NETWORK)
/* When we're not using capabilities, we need to do this here before
we drop root. Also, set buffer size small, to avoid wasting
kernel buffers */
@@ -88,21 +97,8 @@ void dhcp_init(void)
init_bpf();
#endif
- /* If the same IP appears in more than one host config, then DISCOVER
- for one of the hosts will get the address, but REQUEST will be NAKed,
- since the address is reserved by the other one -> protocol loop.
- Also check that FQDNs match the domain we are using. */
- for (configs = daemon->dhcp_conf; configs; configs = configs->next)
- {
- char *domain;
- 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), EC_BADCONF);
-
- if ((configs->flags & CONFIG_NAME) && (domain = strip_hostname(configs->hostname)))
- die(_("illegal domain %s in dhcp-config directive."), domain, EC_BADCONF);
- }
-
+ check_dhcp_hosts(1);
+
daemon->dhcp_packet.iov_len = sizeof(struct dhcp_packet);
daemon->dhcp_packet.iov_base = safe_malloc(daemon->dhcp_packet.iov_len);
}
@@ -124,9 +120,11 @@ void dhcp_packet(time_t now)
union {
struct cmsghdr align; /* this ensures alignment */
-#ifdef HAVE_LINUX_NETWORK
+#if defined(HAVE_LINUX_NETWORK)
char control[CMSG_SPACE(sizeof(struct in_pktinfo))];
-#else
+#elif defined(HAVE_SOLARIS_NETWORK)
+ char control[CMSG_SPACE(sizeof(unsigned int))];
+#elif defined(IP_RECVIF)
char control[CMSG_SPACE(sizeof(struct sockaddr_dl))];
#endif
} control_u;
@@ -147,7 +145,7 @@ void dhcp_packet(time_t now)
expand_buf(&daemon->dhcp_packet, daemon->dhcp_packet.iov_len + 100));
/* expand_buf may have moved buffer */
- mess = daemon->dhcp_packet.iov_base;
+ mess = (struct dhcp_packet *)daemon->dhcp_packet.iov_base;
msg.msg_controllen = sizeof(control_u);
msg.msg_control = control_u.control;
msg.msg_flags = 0;
@@ -177,8 +175,12 @@ void dhcp_packet(time_t now)
if (msg.msg_controllen >= sizeof(struct cmsghdr))
for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, cmptr))
if (cmptr->cmsg_level == IPPROTO_IP && cmptr->cmsg_type == IP_RECVIF)
- iface_index = ((struct sockaddr_dl *)CMSG_DATA(cmptr))->sdl_index;
-
+#ifdef HAVE_SOLARIS_NETWORK
+ iface_index = *((unsigned int *)CMSG_DATA(cmptr));
+#else
+ iface_index = ((struct sockaddr_dl *)CMSG_DATA(cmptr))->sdl_index;
+#endif
+
if (!iface_index || !if_indextoname(iface_index, ifr.ifr_name))
return;
@@ -198,7 +200,7 @@ void dhcp_packet(time_t now)
iface_index = if_nametoindex(name->name);
}
#endif
-
+
ifr.ifr_addr.sa_family = AF_INET;
if (ioctl(daemon->dhcpfd, SIOCGIFADDR, &ifr) != -1 )
{
@@ -237,7 +239,7 @@ void dhcp_packet(time_t now)
if (!iface_enumerate(&parm, complete_context, NULL))
return;
lease_prune(NULL, now); /* lose any expired leases */
- iov.iov_len = dhcp_reply(parm.current, ifr.ifr_name, (size_t)sz,
+ iov.iov_len = dhcp_reply(parm.current, ifr.ifr_name, iface_index, (size_t)sz,
now, unicast_dest, &is_inform);
lease_update_file(now);
lease_update_dns();
@@ -253,7 +255,7 @@ void dhcp_packet(time_t now)
iov.iov_base = daemon->dhcp_packet.iov_base;
/* packet buffer may have moved */
- mess = daemon->dhcp_packet.iov_base;
+ mess = (struct dhcp_packet *)daemon->dhcp_packet.iov_base;
#ifdef HAVE_SOCKADDR_SA_LEN
dest.sin_len = sizeof(struct sockaddr_in);
@@ -278,7 +280,7 @@ void dhcp_packet(time_t now)
dest.sin_addr = mess->ciaddr;
}
}
-#ifdef HAVE_LINUX_NETWORK
+#if defined(HAVE_LINUX_NETWORK)
else if ((ntohs(mess->flags) & 0x8000) || mess->hlen == 0 ||
mess->hlen > sizeof(ifr.ifr_addr.sa_data) || mess->htype == 0)
{
@@ -287,14 +289,14 @@ void dhcp_packet(time_t now)
msg.msg_control = control_u.control;
msg.msg_controllen = sizeof(control_u);
cmptr = CMSG_FIRSTHDR(&msg);
- dest.sin_addr.s_addr = INADDR_BROADCAST;
- dest.sin_port = htons(DHCP_CLIENT_PORT);
pkt = (struct in_pktinfo *)CMSG_DATA(cmptr);
pkt->ipi_ifindex = iface_index;
pkt->ipi_spec_dst.s_addr = 0;
msg.msg_controllen = cmptr->cmsg_len = CMSG_LEN(sizeof(struct in_pktinfo));
cmptr->cmsg_level = SOL_IP;
- cmptr->cmsg_type = IP_PKTINFO;
+ cmptr->cmsg_type = IP_PKTINFO;
+ dest.sin_addr.s_addr = INADDR_BROADCAST;
+ dest.sin_port = htons(DHCP_CLIENT_PORT);
}
else
{
@@ -310,7 +312,31 @@ void dhcp_packet(time_t now)
req.arp_flags = ATF_COM;
ioctl(daemon->dhcpfd, SIOCSARP, &req);
}
-#else
+#elif defined(HAVE_SOLARIS_NETWORK)
+ else if ((ntohs(mess->flags) & 0x8000) || mess->hlen != ETHER_ADDR_LEN || mess->htype != ARPHRD_ETHER)
+ {
+ /* broadcast to 255.255.255.255 (or mac address invalid) */
+ dest.sin_addr.s_addr = INADDR_BROADCAST;
+ dest.sin_port = htons(DHCP_CLIENT_PORT);
+ /* note that we don't specify the interface here: that's done by the
+ IP_XMIT_IF sockopt lower down. */
+ }
+ else
+ {
+ /* unicast to unconfigured client. Inject mac address direct into ARP cache.
+ Note that this only works for ethernet on solaris, because we use SIOCSARP
+ and not SIOCSXARP, which would be perfect, except that it returns ENXIO
+ mysteriously. Bah. Fall back to broadcast for other net types. */
+ struct arpreq req;
+ dest.sin_addr = mess->yiaddr;
+ dest.sin_port = htons(DHCP_CLIENT_PORT);
+ *((struct sockaddr_in *)&req.arp_pa) = dest;
+ req.arp_ha.sa_family = AF_UNSPEC;
+ memcpy(req.arp_ha.sa_data, mess->chaddr, mess->hlen);
+ req.arp_flags = ATF_COM;
+ ioctl(daemon->dhcpfd, SIOCSARP, &req);
+ }
+#elif defined(HAVE_BSD_NETWORK)
else
{
send_via_bpf(mess, iov.iov_len, iface_addr, &ifr);
@@ -318,6 +344,10 @@ void dhcp_packet(time_t now)
}
#endif
+#ifdef HAVE_SOLARIS_NETWORK
+ setsockopt(daemon->dhcpfd, IPPROTO_IP, IP_XMIT_IF, &iface_index, sizeof(iface_index));
+#endif
+
while(sendmsg(daemon->dhcpfd, &msg, 0) == -1 && retry_send());
}
@@ -392,7 +422,9 @@ static int complete_context(struct in_addr local, int if_index,
return 1;
}
-struct dhcp_context *address_available(struct dhcp_context *context, struct in_addr taddr)
+struct dhcp_context *address_available(struct dhcp_context *context,
+ struct in_addr taddr,
+ struct dhcp_netid *netids)
{
/* Check is an address is OK for this network, check all
possible ranges. Make sure that the address isn't in use
@@ -412,14 +444,17 @@ struct dhcp_context *address_available(struct dhcp_context *context, struct in_a
if (!(tmp->flags & CONTEXT_STATIC) &&
addr >= start &&
- addr <= end)
+ addr <= end &&
+ match_netid(tmp->filter, netids, 1))
return tmp;
}
return NULL;
}
-struct dhcp_context *narrow_context(struct dhcp_context *context, struct in_addr taddr)
+struct dhcp_context *narrow_context(struct dhcp_context *context,
+ struct in_addr taddr,
+ struct dhcp_netid *netids)
{
/* We start of with a set of possible contexts, all on the current physical interface.
These are chained on ->current.
@@ -431,19 +466,24 @@ struct dhcp_context *narrow_context(struct dhcp_context *context, struct in_addr
struct dhcp_context *tmp;
- if ((tmp = address_available(context, taddr)))
- return tmp;
+ if (!(tmp = address_available(context, taddr, netids)))
+ {
+ for (tmp = context; tmp; tmp = tmp->current)
+ if (is_same_net(taddr, tmp->start, tmp->netmask) &&
+ (tmp->flags & CONTEXT_STATIC))
+ break;
+
+ if (!tmp)
+ for (tmp = context; tmp; tmp = tmp->current)
+ if (is_same_net(taddr, tmp->start, tmp->netmask))
+ break;
+ }
- for (tmp = context; tmp; tmp = tmp->current)
- if (is_same_net(taddr, tmp->start, tmp->netmask) &&
- (tmp->flags & CONTEXT_STATIC))
- return tmp;
-
- for (tmp = context; tmp; tmp = tmp->current)
- if (is_same_net(taddr, tmp->start, tmp->netmask))
- return tmp;
-
- return NULL;
+ /* Only one context allowed now */
+ if (tmp)
+ tmp->current = NULL;
+
+ return tmp;
}
struct dhcp_config *config_find_by_address(struct dhcp_config *configs, struct in_addr addr)
@@ -458,12 +498,12 @@ struct dhcp_config *config_find_by_address(struct dhcp_config *configs, struct i
}
/* 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)
+ If tagnotneeded, untagged is OK */
+int match_netid(struct dhcp_netid *check, struct dhcp_netid *pool, int tagnotneeded)
{
struct dhcp_netid *tmp1;
- if (!check && !negonly)
+ if (!check && !tagnotneeded)
return 0;
for (; check; check = check->next)
@@ -473,7 +513,7 @@ int match_netid(struct dhcp_netid *check, struct dhcp_netid *pool, int negonly)
for (tmp1 = pool; tmp1; tmp1 = tmp1->next)
if (strcmp(check->net, tmp1->net) == 0)
break;
- if (!tmp1 || negonly)
+ if (!tmp1)
return 0;
}
else
@@ -690,14 +730,14 @@ void dhcp_read_ethers(void)
{
lineno++;
- while (strlen(buff) > 0 && isspace(buff[strlen(buff)-1]))
+ while (strlen(buff) > 0 && isspace((int)buff[strlen(buff)-1]))
buff[strlen(buff)-1] = 0;
if ((*buff == '#') || (*buff == '+'))
continue;
- for (ip = buff; *ip && !isspace(*ip); ip++);
- for(; *ip && isspace(*ip); ip++)
+ for (ip = buff; *ip && !isspace((int)*ip); ip++);
+ for(; *ip && isspace((int)*ip); ip++)
*ip = 0;
if (!*ip || parse_hex(buff, hwaddr, ETHER_ADDR_LEN, NULL, NULL) != ETHER_ADDR_LEN)
{
@@ -785,59 +825,44 @@ void dhcp_read_ethers(void)
my_syslog(LOG_INFO, _("read %s - %d addresses"), ETHERSFILE, count);
}
-void dhcp_read_hosts(void)
+void check_dhcp_hosts(int fatal)
{
- struct dhcp_config *configs, *cp, **up;
- int count;
-
- /* remove existing... */
- for (up = &daemon->dhcp_conf, configs = daemon->dhcp_conf; configs; configs = cp)
- {
- cp = configs->next;
-
- if (configs->flags & CONFIG_BANK)
- {
- if (configs->flags & CONFIG_CLID)
- free(configs->clid);
- if (configs->flags & CONFIG_NETID)
- free(configs->netid.net);
- if (configs->flags & CONFIG_NAME)
- free(configs->hostname);
-
- *up = configs->next;
- free(configs);
- }
- else
- up = &configs->next;
- }
+ /* If the same IP appears in more than one host config, then DISCOVER
+ for one of the hosts will get the address, but REQUEST will be NAKed,
+ since the address is reserved by the other one -> protocol loop.
+ Also check that FQDNs match the domain we are using. */
- one_file(daemon->dhcp_hosts_file, 1, 1);
-
- for (count = 0, configs = daemon->dhcp_conf; configs; configs = configs->next)
+ struct dhcp_config *configs, *cp;
+
+ for (configs = daemon->dhcp_conf; configs; configs = configs->next)
{
- if (configs->flags & CONFIG_BANK)
- {
- char *domain;
- count++;
-
- for (cp = configs->next; cp; cp = cp->next)
- if ((configs->flags & cp->flags & CONFIG_ADDR) && configs->addr.s_addr == cp->addr.s_addr)
- {
- my_syslog(LOG_ERR, _("duplicate IP address %s in %s."), inet_ntoa(cp->addr), daemon->dhcp_hosts_file);
- configs->flags &= ~CONFIG_ADDR;
- }
-
- if ((configs->flags & CONFIG_NAME) && (domain = strip_hostname(configs->hostname)))
- {
- my_syslog(LOG_ERR, _("illegal domain %s in %s."), domain, daemon->dhcp_hosts_file);
- free(configs->hostname);
- configs->flags &= ~CONFIG_NAME;
- }
- }
- }
-
- my_syslog(LOG_INFO, _("read %s - %d hosts"), daemon->dhcp_hosts_file, count);
+ char *domain;
+ if ((configs->flags & DHOPT_BANK) || fatal)
+ {
+ for (cp = configs->next; cp; cp = cp->next)
+ if ((configs->flags & cp->flags & CONFIG_ADDR) && configs->addr.s_addr == cp->addr.s_addr)
+ {
+ if (fatal)
+ die(_("duplicate IP address %s in dhcp-config directive."),
+ inet_ntoa(cp->addr), EC_BADCONF);
+ else
+ my_syslog(LOG_ERR, _("duplicate IP address %s in %s."),
+ inet_ntoa(cp->addr), daemon->dhcp_hosts_file);
+ configs->flags &= ~CONFIG_ADDR;
+ }
+
+ if ((configs->flags & CONFIG_NAME) && (domain = strip_hostname(configs->hostname)))
+ {
+ if (fatal)
+ die(_("illegal domain %s in dhcp-config directive."), domain, EC_BADCONF);
+ else
+ my_syslog(LOG_ERR, _("illegal domain %s in %s."), domain, daemon->dhcp_hosts_file);
+ free(configs->hostname);
+ configs->flags &= ~CONFIG_NAME;
+ }
+ }
+ }
}
void dhcp_update_configs(struct dhcp_config *configs)
@@ -856,21 +881,34 @@ void dhcp_update_configs(struct dhcp_config *configs)
if (config->flags & CONFIG_ADDR_HOSTS)
config->flags &= ~(CONFIG_ADDR | CONFIG_ADDR_HOSTS);
- for (config = configs; config; config = config->next)
- if (!(config->flags & CONFIG_ADDR) &&
- (config->flags & CONFIG_NAME) &&
- (crec = cache_find_by_name(NULL, config->hostname, 0, F_IPV4)) &&
- (crec->flags & F_HOSTS))
- {
- if (config_find_by_address(configs, crec->addr.addr.addr.addr4))
- my_syslog(LOG_WARNING, _("duplicate IP address %s (%s) in dhcp-config directive"),
- inet_ntoa(crec->addr.addr.addr.addr4), config->hostname);
- else
- {
- config->addr = crec->addr.addr.addr.addr4;
- config->flags |= CONFIG_ADDR | CONFIG_ADDR_HOSTS;
- }
- }
+
+ if (daemon->port != 0)
+ for (config = configs; config; config = config->next)
+ if (!(config->flags & CONFIG_ADDR) &&
+ (config->flags & CONFIG_NAME) &&
+ (crec = cache_find_by_name(NULL, config->hostname, 0, F_IPV4)) &&
+ (crec->flags & F_HOSTS))
+ {
+ if (cache_find_by_name(crec, config->hostname, 0, F_IPV4))
+ {
+ /* use primary (first) address */
+ while (crec && !(crec->flags & F_REVERSE))
+ crec = cache_find_by_name(crec, config->hostname, 0, F_IPV4);
+ if (!crec)
+ continue; /* should be never */
+ my_syslog(LOG_WARNING, _("%s has more then one address in hostsfile, using %s for DHCP"),
+ config->hostname, inet_ntoa(crec->addr.addr.addr.addr4));
+ }
+
+ if (config_find_by_address(configs, crec->addr.addr.addr.addr4))
+ my_syslog(LOG_WARNING, _("duplicate IP address %s (%s) in dhcp-config directive"),
+ inet_ntoa(crec->addr.addr.addr.addr4), config->hostname);
+ else
+ {
+ config->addr = crec->addr.addr.addr.addr4;
+ config->flags |= CONFIG_ADDR | CONFIG_ADDR_HOSTS;
+ }
+ }
}
/* If we've not found a hostname any other way, try and see if there's one in /etc/hosts
@@ -878,9 +916,13 @@ void dhcp_update_configs(struct dhcp_config *configs)
it gets stripped. */
char *host_from_dns(struct in_addr addr)
{
- struct crec *lookup = cache_find_by_addr(NULL, (struct all_addr *)&addr, 0, F_IPV4);
+ struct crec *lookup;
char *hostname = NULL;
+
+ if (daemon->port == 0)
+ return NULL; /* DNS disabled. */
+ lookup = cache_find_by_addr(NULL, (struct all_addr *)&addr, 0, F_IPV4);
if (lookup && (lookup->flags & F_HOSTS))
{
hostname = daemon->dhcp_buff;
diff --git a/src/dnsmasq.c b/src/dnsmasq.c
index e50ed1c..da21740 100644
--- a/src/dnsmasq.c
+++ b/src/dnsmasq.c
@@ -1,13 +1,17 @@
-/* dnsmasq is Copyright (c) 2000-2006 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2007 Simon Kelley
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; version 2 dated June, 1991.
-
+ the Free Software Foundation; version 2 dated June, 1991, or
+ (at your option) version 3 dated 29 June, 2007.
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "dnsmasq.h"
@@ -37,7 +41,7 @@ static char *compile_opts =
"no-"
#endif
"DBus "
-#ifdef NO_GETTEXT
+#ifndef LOCALEDIR
"no-"
#endif
"I18N "
@@ -66,7 +70,7 @@ int main (int argc, char **argv)
struct passwd *ent_pw;
long i, max_fd = sysconf(_SC_OPEN_MAX);
-#ifndef NO_GETTEXT
+#ifdef LOCALEDIR
setlocale(LC_ALL, "");
bindtextdomain("dnsmasq", LOCALEDIR);
textdomain("dnsmasq");
@@ -128,6 +132,11 @@ int main (int argc, char **argv)
die(_("TFTP server not available: set HAVE_TFTP in src/config.h"), NULL, EC_BADCONF);
#endif
+#ifdef HAVE_SOLARIS_NETWORK
+ if (daemon->max_logs != 0)
+ die(_("asychronous logging is not available under Solaris"), NULL, EC_BADCONF);
+#endif
+
now = dnsmasq_time();
if (daemon->dhcp)
@@ -166,10 +175,12 @@ int main (int argc, char **argv)
die(_("no interface with address %s"), daemon->namebuff, EC_BADNET);
}
}
- else if (!(daemon->listeners = create_wildcard_listeners()))
+ else if ((daemon->port != 0 || (daemon->options & OPT_TFTP)) &&
+ !(daemon->listeners = create_wildcard_listeners()))
die(_("failed to create listening socket: %s"), NULL, EC_BADNET);
- cache_init();
+ if (daemon->port != 0)
+ cache_init();
if (daemon->options & OPT_DBUS)
#ifdef HAVE_DBUS
@@ -184,31 +195,8 @@ int main (int argc, char **argv)
die(_("DBus not available: set HAVE_DBUS in src/config.h"), NULL, EC_BADCONF);
#endif
- /* If query_port is set then create a socket now, before dumping root
- for use to access nameservers without more specific source addresses.
- This allows query_port to be a low port */
- if (daemon->query_port)
- {
- union mysockaddr addr;
- memset(&addr, 0, sizeof(addr));
- addr.in.sin_family = AF_INET;
- addr.in.sin_addr.s_addr = INADDR_ANY;
- addr.in.sin_port = htons(daemon->query_port);
-#ifdef HAVE_SOCKADDR_SA_LEN
- addr.in.sin_len = sizeof(struct sockaddr_in);
-#endif
- allocate_sfd(&addr, &daemon->sfds);
-#ifdef HAVE_IPV6
- memset(&addr, 0, sizeof(addr));
- addr.in6.sin6_family = AF_INET6;
- addr.in6.sin6_addr = in6addr_any;
- addr.in6.sin6_port = htons(daemon->query_port);
-#ifdef HAVE_SOCKADDR_SA_LEN
- addr.in6.sin6_len = sizeof(struct sockaddr_in6);
-#endif
- allocate_sfd(&addr, &daemon->sfds);
-#endif
- }
+ if (daemon->port != 0)
+ pre_allocate_sfds();
/* Use a pipe to carry signals and other events back to the event loop
in a race-free manner */
@@ -247,8 +235,9 @@ int main (int argc, char **argv)
}
#endif
- chdir("/");
-
+ if (chdir("/") != 0)
+ die(_("cannot chdir to filesystem root: %s"), NULL, EC_MISC);
+
/* write pidfile _after_ forking ! */
if (daemon->runfile && (pidfile = fopen(daemon->runfile, "w")))
{
@@ -294,7 +283,7 @@ int main (int argc, char **argv)
if (ent_pw && ent_pw->pw_uid != 0)
{
-#ifdef HAVE_LINUX_NETWORK
+#if defined(HAVE_LINUX_NETWORK)
/* On linux, we keep CAP_NETADMIN (for ARP-injection) and
CAP_NET_RAW (for icmp) if we're doing dhcp */
cap_user_header_t hdr = safe_malloc(sizeof(*hdr));
@@ -308,8 +297,33 @@ int main (int argc, char **argv)
/* Tell kernel to not clear capabilities when dropping root */
if (capset(hdr, data) == -1 || prctl(PR_SET_KEEPCAPS, 1) == -1)
bad_capabilities = errno;
- else
-#endif
+
+#elif defined(HAVE_SOLARIS_PRIVS)
+ /* http://developers.sun.com/solaris/articles/program_privileges.html */
+ priv_set_t *priv_set;
+
+ if (!(priv_set = priv_str_to_set("basic", ",", NULL)) ||
+ priv_addset(priv_set, PRIV_NET_ICMPACCESS) == -1 ||
+ priv_addset(priv_set, PRIV_SYS_NET_CONFIG) == -1)
+ bad_capabilities = errno;
+
+ if (priv_set && bad_capabilities == 0)
+ {
+ priv_inverse(priv_set);
+
+ if (setppriv(PRIV_OFF, PRIV_LIMIT, priv_set) == -1)
+ bad_capabilities = errno;
+ }
+
+ if (priv_set)
+ priv_freeset(priv_set);
+
+#elif defined(HAVE_SOLARIS_NETWORK)
+
+ bad_capabilities = ENOTSUP;
+#endif
+
+ if (bad_capabilities == 0)
{
/* finally drop root */
setuid(ent_pw->pw_uid);
@@ -331,7 +345,9 @@ int main (int argc, char **argv)
prctl(PR_SET_DUMPABLE, 1);
#endif
- if (daemon->cachesize != 0)
+ if (daemon->port == 0)
+ my_syslog(LOG_INFO, _("started, version %s DNS disabled"), VERSION);
+ else if (daemon->cachesize != 0)
my_syslog(LOG_INFO, _("started, version %s cachesize %d"), VERSION, daemon->cachesize);
else
my_syslog(LOG_INFO, _("started, version %s cache disabled"), VERSION);
@@ -356,7 +372,7 @@ int main (int argc, char **argv)
if (if_tmp->name && !if_tmp->used)
my_syslog(LOG_WARNING, _("warning: interface %s does not currently exist"), if_tmp->name);
- if (daemon->options & OPT_NO_RESOLV)
+ if (daemon->port != 0 && (daemon->options & OPT_NO_RESOLV))
{
if (daemon->resolv_files && !daemon->resolv_files->is_default)
my_syslog(LOG_WARNING, _("warning: ignoring resolv-file flag because no-resolv is set"));
@@ -410,6 +426,12 @@ int main (int argc, char **argv)
max_fd = max_fd/2;
else
max_fd = max_fd - 20;
+
+ /* if we have to use a limited range of ports,
+ that will limit the number of transfers */
+ if (daemon->start_tftp_port != 0 &&
+ daemon->end_tftp_port - daemon->start_tftp_port + 1 < max_fd)
+ max_fd = daemon->end_tftp_port - daemon->start_tftp_port + 1;
if (daemon->tftp_max > max_fd)
{
@@ -429,8 +451,9 @@ int main (int argc, char **argv)
my_syslog(LOG_WARNING, _("running as root"));
}
- check_servers();
-
+ if (daemon->port != 0)
+ check_servers();
+
pid = getpid();
while (1)
@@ -517,7 +540,7 @@ int main (int argc, char **argv)
load_dhcp(now);
#endif
- if (!(daemon->options & OPT_NO_POLL))
+ if (daemon->port != 0 && !(daemon->options & OPT_NO_POLL))
poll_resolv();
}
@@ -541,7 +564,7 @@ int main (int argc, char **argv)
}
check_dbus_listeners(&rset, &wset, &eset);
#endif
-
+
check_dns_listeners(&rset, now);
#ifdef HAVE_TFTP
@@ -621,7 +644,7 @@ static void async_event(int pipe, time_t now)
{
case EVENT_RELOAD:
clear_cache_and_reload(now);
- if (daemon->resolv_files && (daemon->options & OPT_NO_POLL))
+ if (daemon->port != 0 && daemon->resolv_files && (daemon->options & OPT_NO_POLL))
{
reload_servers(daemon->resolv_files->name);
check_servers();
@@ -630,7 +653,8 @@ static void async_event(int pipe, time_t now)
break;
case EVENT_DUMP:
- dump_cache(now);
+ if (daemon->port != 0)
+ dump_cache(now);
break;
case EVENT_ALARM:
@@ -762,14 +786,16 @@ static void poll_resolv()
void clear_cache_and_reload(time_t now)
{
- cache_reload(daemon->options, daemon->namebuff, daemon->domain_suffix, daemon->addn_hosts);
+ if (daemon->port != 0)
+ cache_reload(daemon->options, daemon->namebuff, daemon->domain_suffix, daemon->addn_hosts);
+
if (daemon->dhcp)
{
if (daemon->options & OPT_ETHERS)
dhcp_read_ethers();
- if (daemon->dhcp_hosts_file)
- dhcp_read_hosts();
+ reread_dhcp();
dhcp_update_configs(daemon->dhcp_conf);
+ check_dhcp_hosts(0);
lease_update_from_configs();
lease_update_file(now);
lease_update_dns();
@@ -780,7 +806,7 @@ static int set_dns_listeners(time_t now, fd_set *set, int *maxfdp)
{
struct serverfd *serverfdp;
struct listener *listener;
- int wait, i;
+ int wait = 0, i;
#ifdef HAVE_TFTP
int tftp = 0;
@@ -794,7 +820,8 @@ static int set_dns_listeners(time_t now, fd_set *set, int *maxfdp)
#endif
/* will we be able to get memory? */
- get_new_frec(now, &wait);
+ if (daemon->port != 0)
+ get_new_frec(now, &wait);
for (serverfdp = daemon->sfds; serverfdp; serverfdp = serverfdp->next)
{
@@ -805,7 +832,7 @@ static int set_dns_listeners(time_t now, fd_set *set, int *maxfdp)
for (listener = daemon->listeners; listener; listener = listener->next)
{
/* only listen for queries if we have resources */
- if (wait == 0)
+ if (listener->fd != -1 && wait == 0)
{
FD_SET(listener->fd, set);
bump_maxfd(listener->fd, maxfdp);
@@ -813,13 +840,14 @@ static int set_dns_listeners(time_t now, fd_set *set, int *maxfdp)
/* death of a child goes through the select loop, so
we don't need to explicitly arrange to wake up here */
- for (i = 0; i < MAX_PROCS; i++)
- if (daemon->tcp_pids[i] == 0)
- {
- FD_SET(listener->tcpfd, set);
- bump_maxfd(listener->tcpfd, maxfdp);
- break;
- }
+ if (listener->tcpfd != -1)
+ for (i = 0; i < MAX_PROCS; i++)
+ if (daemon->tcp_pids[i] == 0)
+ {
+ FD_SET(listener->tcpfd, set);
+ bump_maxfd(listener->tcpfd, maxfdp);
+ break;
+ }
#ifdef HAVE_TFTP
if (tftp <= daemon->tftp_max && listener->tftpfd != -1)
@@ -845,7 +873,7 @@ static void check_dns_listeners(fd_set *set, time_t now)
for (listener = daemon->listeners; listener; listener = listener->next)
{
- if (FD_ISSET(listener->fd, set))
+ if (listener->fd != -1 && FD_ISSET(listener->fd, set))
receive_query(listener, now);
#ifdef HAVE_TFTP
@@ -853,7 +881,7 @@ static void check_dns_listeners(fd_set *set, time_t now)
tftp_request(listener, now);
#endif
- if (FD_ISSET(listener->tcpfd, set))
+ if (listener->tcpfd != -1 && FD_ISSET(listener->tcpfd, set))
{
int confd;
struct irec *iface = NULL;
@@ -997,7 +1025,7 @@ int icmp_ping(struct in_addr addr)
int gotreply = 0;
time_t start, now;
-#ifdef HAVE_LINUX_NETWORK
+#if defined(HAVE_LINUX_NETWORK) || defined (HAVE_SOLARIS_NETWORK)
if ((fd = make_icmp_sock()) == -1)
return 0;
#else
@@ -1072,7 +1100,7 @@ int icmp_ping(struct in_addr addr)
}
}
-#ifdef HAVE_LINUX_NETWORK
+#if defined(HAVE_LINUX_NETWORK) || defined(HAVE_SOLARIS_NETWORK)
close(fd);
#else
opt = 1;
diff --git a/src/dnsmasq.h b/src/dnsmasq.h
index 0e740b5..d4f49f3 100644
--- a/src/dnsmasq.h
+++ b/src/dnsmasq.h
@@ -1,16 +1,20 @@
-/* dnsmasq is Copyright (c) 2000-2007 Simon Kelley
-
+/* dnsmasq is Copyright (c) 2000-2008 Simon Kelley
+
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; version 2 dated June, 1991.
-
+ the Free Software Foundation; version 2 dated June, 1991, or
+ (at your option) version 3 dated 29 June, 2007.
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#define COPYRIGHT "Copyright (C) 2000-2007 Simon Kelley"
+#define COPYRIGHT "Copyright (C) 2000-2008 Simon Kelley"
/* get these before config.h for IPv6 stuff... */
#include <sys/types.h>
@@ -28,7 +32,7 @@
#include "config.h"
#define gettext_noop(S) (S)
-#ifdef NO_GETTEXT
+#ifndef LOCALEDIR
# define _(S) (S)
#else
# include <libintl.h>
@@ -40,6 +44,9 @@
#include <sys/stat.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
+#if defined(HAVE_SOLARIS_NETWORK)
+#include <sys/sockio.h>
+#endif
#include <sys/select.h>
#include <sys/wait.h>
#include <sys/time.h>
@@ -58,7 +65,7 @@
#include <pwd.h>
#include <grp.h>
#include <stdarg.h>
-#if defined(__OpenBSD__) || defined(__NetBSD__)
+#if defined(__OpenBSD__) || defined(__NetBSD__) || defined(__sun__)
# include <netinet/if_ether.h>
#else
# include <net/ethernet.h>
@@ -74,15 +81,17 @@
# include <net/if_dl.h>
#endif
-#ifdef HAVE_LINUX_NETWORK
+#if defined(HAVE_LINUX_NETWORK)
#include <linux/capability.h>
/* There doesn't seem to be a universally-available
userpace header for this. */
extern int capset(cap_user_header_t header, cap_user_data_t data);
#include <sys/prctl.h>
+#elif defined(HAVE_SOLARIS_PRIVS)
+#include <priv.h>
#endif
-/* daemon is function in teh C library.... */
+/* daemon is function in the C library.... */
#define daemon dnsmasq_daemon
/* Async event queue */
@@ -140,12 +149,15 @@ struct event_desc {
#define OPT_BOOTP_DYNAMIC (1<<20)
#define OPT_NO_PING (1<<21)
#define OPT_LEASE_RO (1<<22)
+#define OPT_ALL_SERVERS (1<<23)
#define OPT_RELOAD (1<<24)
#define OPT_TFTP (1<<25)
#define OPT_TFTP_SECURE (1<<26)
#define OPT_TFTP_NOBLOCK (1<<27)
#define OPT_LOG_OPTS (1<<28)
#define OPT_TFTP_APREF (1<<29)
+#define OPT_NO_OVERRIDE (1<<30)
+#define OPT_NO_REBIND (1<<31)
struct all_addr {
union {
@@ -265,18 +277,22 @@ union mysockaddr {
#define SERV_FROM_DBUS 128 /* 1 if source is DBus */
#define SERV_MARK 256 /* for mark-and-delete */
#define SERV_TYPE (SERV_HAS_DOMAIN | SERV_FOR_NODOTS)
+#define SERV_COUNTED 512 /* workspace for log code */
struct serverfd {
int fd;
union mysockaddr source_addr;
+ char interface[IF_NAMESIZE+1];
struct serverfd *next;
};
struct server {
union mysockaddr addr, source_addr;
+ char interface[IF_NAMESIZE+1];
struct serverfd *sfd;
char *domain; /* set if this server only handles a domain. */
int flags, tcpfd;
+ unsigned int queries, failed_queries;
struct server *next;
};
@@ -354,6 +370,7 @@ struct dhcp_lease {
struct in_addr addr;
unsigned char *vendorclass, *userclass;
unsigned int vendorclass_len, userclass_len;
+ int last_interface;
struct dhcp_lease *next;
};
@@ -406,6 +423,7 @@ struct dhcp_opt {
#define DHOPT_ENCAPSULATE 4
#define DHOPT_VENDOR_MATCH 8
#define DHOPT_FORCE 16
+#define DHOPT_BANK 32
struct dhcp_boot {
char *file, *sname;
@@ -419,10 +437,11 @@ struct dhcp_boot {
#define MATCH_CIRCUIT 3
#define MATCH_REMOTE 4
#define MATCH_SUBSCRIBER 5
+#define MATCH_OPTION 6
/* vendorclass, userclass, remote-id or cicuit-id */
struct dhcp_vendor {
- int len, match_type;
+ int len, match_type, option;
char *data;
struct dhcp_netid netid;
struct dhcp_vendor *next;
@@ -522,7 +541,7 @@ extern struct daemon {
int max_logs; /* queue limit */
int cachesize, ftabsize;
int port, query_port;
- unsigned long local_ttl;
+ unsigned long local_ttl, neg_ttl;
struct hostsfile *addn_hosts;
struct dhcp_context *dhcp;
struct dhcp_config *dhcp_conf;
@@ -530,17 +549,20 @@ extern struct daemon {
struct dhcp_vendor *dhcp_vendors;
struct dhcp_mac *dhcp_macs;
struct dhcp_boot *boot_config;
- struct dhcp_netid_list *dhcp_ignore, *dhcp_ignore_names;
- char *dhcp_hosts_file;
- int dhcp_max, tftp_max;
+ struct dhcp_netid_list *dhcp_ignore, *dhcp_ignore_names, *force_broadcast;
+ char *dhcp_hosts_file, *dhcp_opts_file;
+ int dhcp_max, tftp_max;
+ int start_tftp_port, end_tftp_port;
unsigned int min_leasetime;
struct doctor *doctors;
unsigned short edns_pktsz;
+ char *tftp_prefix;
/* globally used stuff for DNS */
char *packet; /* packet buffer */
int packet_buff_sz; /* size of above */
char *namebuff; /* MAXDNAME size buffer */
+ unsigned int local_answer, queries_forwarded;
struct serverfd *sfds;
struct irec *interfaces;
struct listener *listeners;
@@ -573,7 +595,7 @@ extern struct daemon {
/* TFTP stuff */
struct tftp_transfer *tftp_trans;
- char *tftp_prefix;
+
} *daemon;
/* cache.c */
@@ -601,7 +623,7 @@ unsigned short extract_request(HEADER *header, size_t qlen,
size_t setup_reply(HEADER *header, size_t qlen,
struct all_addr *addrp, unsigned short flags,
unsigned long local_ttl);
-void extract_addresses(HEADER *header, size_t qlen, char *namebuff, time_t now);
+int extract_addresses(HEADER *header, size_t qlen, char *namebuff, time_t now);
size_t answer_request(HEADER *header, char *limit, size_t qlen,
struct in_addr local_addr, struct in_addr local_netmask, time_t now);
int check_for_bogus_wildcard(HEADER *header, size_t qlen, char *name,
@@ -649,7 +671,7 @@ void flush_log(void);
/* option.c */
void read_opts (int argc, char **argv, char *compile_opts);
char *option_string(unsigned char opt);
-void one_file(char *file, int nest, int hosts);
+void reread_dhcp(void);
/* forward.c */
void reply_query(struct serverfd *sfd, time_t now);
@@ -660,7 +682,8 @@ void server_gone(struct server *server);
struct frec *get_new_frec(time_t now, int *wait);
/* network.c */
-struct serverfd *allocate_sfd(union mysockaddr *addr, struct serverfd **sfds);
+int local_bind(int fd, union mysockaddr *addr, char *intname, int is_tcp);
+void pre_allocate_sfds(void);
int reload_servers(char *fname);
void check_servers(void);
int enumerate_interfaces();
@@ -675,8 +698,12 @@ struct in_addr get_ifaddr(char *intr);
void dhcp_init(void);
void dhcp_packet(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);
+struct dhcp_context *address_available(struct dhcp_context *context,
+ struct in_addr addr,
+ struct dhcp_netid *netids);
+struct dhcp_context *narrow_context(struct dhcp_context *context,
+ struct in_addr taddr,
+ struct dhcp_netid *netids);
int match_netid(struct dhcp_netid *check, struct dhcp_netid *pool, int negonly);
int address_allocate(struct dhcp_context *context,
struct in_addr *addrp, unsigned char *hwaddr, int hw_len,
@@ -688,7 +715,7 @@ struct dhcp_config *find_config(struct dhcp_config *configs,
int hw_type, char *hostname);
void dhcp_update_configs(struct dhcp_config *configs);
void dhcp_read_ethers(void);
-void dhcp_read_hosts(void);
+void check_dhcp_hosts(int fatal);
struct dhcp_config *config_find_by_address(struct dhcp_config *configs, struct in_addr addr);
char *strip_hostname(char *hostname);
char *host_from_dns(struct in_addr addr);
@@ -703,6 +730,7 @@ void lease_set_hwaddr(struct dhcp_lease *lease, unsigned char *hwaddr,
void lease_set_hostname(struct dhcp_lease *lease, char *name,
char *suffix, int auth);
void lease_set_expires(struct dhcp_lease *lease, unsigned int len, time_t now);
+void lease_set_interface(struct dhcp_lease *lease, int interface);
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);
@@ -712,7 +740,7 @@ int do_script_run(time_t now);
void rerun_scripts(void);
/* rfc2131.c */
-size_t dhcp_reply(struct dhcp_context *context, char *iface_name,
+size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
size_t sz, time_t now, int unicast_dest, int *is_inform);
/* dnsmasq.c */
@@ -729,18 +757,19 @@ void load_dhcp(time_t now);
/* netlink.c */
#ifdef HAVE_LINUX_NETWORK
void netlink_init(void);
-int iface_enumerate(void *parm, int (*ipv4_callback)(), int (*ipv6_callback)());
void netlink_multicast(void);
#endif
/* bpf.c */
-#ifndef HAVE_LINUX_NETWORK
+#ifdef HAVE_BSD_NETWORK
void init_bpf(void);
void send_via_bpf(struct dhcp_packet *mess, size_t len,
struct in_addr iface_addr, struct ifreq *ifr);
-int iface_enumerate(void *parm, int (*ipv4_callback)(), int (*ipv6_callback)());
#endif
+/* bpf.c or netlink.c */
+int iface_enumerate(void *parm, int (*ipv4_callback)(), int (*ipv6_callback)());
+
/* dbus.c */
#ifdef HAVE_DBUS
char *dbus_init(void);
diff --git a/src/forward.c b/src/forward.c
index 00ed6f4..157a41b 100644
--- a/src/forward.c
+++ b/src/forward.c
@@ -1,13 +1,17 @@
-/* dnsmasq is Copyright (c) 2000 - 2005 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2007 Simon Kelley
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; version 2 dated June, 1991.
-
+ the Free Software Foundation; version 2 dated June, 1991, or
+ (at your option) version 3 dated 29 June, 2007.
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "dnsmasq.h"
@@ -21,7 +25,7 @@ static struct frec *lookup_frec_by_sender(unsigned short id,
static unsigned short get_id(int force, unsigned short force_id, unsigned int crc);
-/* Send a UDP packet with it's source address set as "source"
+/* Send a UDP packet with its 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, size_t len,
union mysockaddr *to, struct all_addr *source,
@@ -140,7 +144,7 @@ static unsigned short search_servers(time_t now, struct all_addr **addrpp,
*addrpp = (struct all_addr *)&serv->addr.in6.sin6_addr;
#endif
}
- else if (!flags)
+ else if (!flags || (flags & F_NXDOMAIN))
flags = F_NOERR;
}
}
@@ -161,9 +165,9 @@ static unsigned short search_servers(time_t now, struct all_addr **addrpp,
flags = F_NXDOMAIN;
else if (serv->flags & SERV_LITERAL_ADDRESS)
{
- if ((sflag | F_QUERY ) & qtype)
+ if (sflag & qtype)
{
- flags = qtype & ~F_BIGNAME;
+ flags = sflag;
if (serv->addr.sa.sa_family == AF_INET)
*addrpp = (struct all_addr *)&serv->addr.in.sin_addr;
#ifdef HAVE_IPV6
@@ -171,37 +175,36 @@ static unsigned short search_servers(time_t now, struct all_addr **addrpp,
*addrpp = (struct all_addr *)&serv->addr.in6.sin6_addr;
#endif
}
- else if (!flags)
+ else if (!flags || (flags & F_NXDOMAIN))
flags = F_NOERR;
}
}
}
- if (flags & ~(F_NOERR | F_NXDOMAIN)) /* flags set here means a literal found */
- {
- if (flags & F_QUERY)
- log_query(F_CONFIG | F_FORWARD | F_NEG, qdomain, NULL, 0, NULL, 0);
- else
- log_query(F_CONFIG | F_FORWARD | flags, qdomain, *addrpp, 0, NULL, 0);
- }
- else if (qtype && !(qtype & F_BIGNAME) &&
- (daemon->options & OPT_NODOTS_LOCAL) && !strchr(qdomain, '.') && namelen != 0)
- /* don't forward simple names, make exception from NS queries and empty name. */
+ if (flags == 0 && !(qtype & F_BIGNAME) &&
+ (daemon->options & OPT_NODOTS_LOCAL) && !strchr(qdomain, '.') && namelen != 0)
+ /* don't forward simple names, make exception for NS queries and empty name. */
flags = F_NXDOMAIN;
if (flags == F_NXDOMAIN && check_for_local_domain(qdomain, now))
flags = F_NOERR;
- if (flags == F_NXDOMAIN || flags == F_NOERR)
- log_query(F_CONFIG | F_FORWARD | F_NEG | qtype | (flags & F_NXDOMAIN), qdomain, NULL, 0, NULL, 0);
+ if (flags)
+ {
+ int logflags = 0;
+
+ if (flags == F_NXDOMAIN || flags == F_NOERR)
+ logflags = F_NEG | qtype;
+
+ log_query(logflags | flags | F_CONFIG | F_FORWARD, qdomain, *addrpp, 0, NULL, 0);
+ }
return flags;
}
-/* returns new last_server */
-static void forward_query(int udpfd, union mysockaddr *udpaddr,
- struct all_addr *dst_addr, unsigned int dst_iface,
- HEADER *header, size_t plen, time_t now, struct frec *forward)
+static int forward_query(int udpfd, union mysockaddr *udpaddr,
+ struct all_addr *dst_addr, unsigned int dst_iface,
+ HEADER *header, size_t plen, time_t now, struct frec *forward)
{
char *domain = NULL;
int type = 0;
@@ -218,6 +221,7 @@ static void forward_query(int udpfd, union mysockaddr *udpaddr,
{
/* retry on existing query, send to all available servers */
domain = forward->sentto->domain;
+ forward->sentto->failed_queries++;
if (!(daemon->options & OPT_ORDER))
{
forward->forwardall = 1;
@@ -311,6 +315,7 @@ static void forward_query(int udpfd, union mysockaddr *udpaddr,
(struct all_addr *)&start->addr.in6.sin6_addr, 0,
NULL, 0);
#endif
+ start->queries++;
forwarded = 1;
forward->sentto = start;
if (!forward->forwardall)
@@ -327,7 +332,7 @@ static void forward_query(int udpfd, union mysockaddr *udpaddr,
}
if (forwarded)
- return;
+ return 1;
/* could not send on, prepare to return */
header->id = htons(forward->orig_id);
@@ -341,7 +346,7 @@ static void forward_query(int udpfd, union mysockaddr *udpaddr,
send_from(udpfd, daemon->options & OPT_NOWILD, (char *)header, plen, udpaddr, dst_addr, dst_iface);
}
- return;
+ return 0;
}
static size_t process_reply(HEADER *header, time_t now,
@@ -399,7 +404,11 @@ static size_t process_reply(HEADER *header, time_t now,
header->rcode = NOERROR;
}
- extract_addresses(header, n, daemon->namebuff, now);
+ if (extract_addresses(header, n, daemon->namebuff, now))
+ {
+ my_syslog(LOG_WARNING, _("possible DNS-rebind attack detected"));
+ munged = 1;
+ }
}
/* do this after extract_addresses. Ensure NODATA reply and remove
@@ -489,7 +498,8 @@ void reply_query(struct serverfd *sfd, time_t now)
break;
}
}
- daemon->last_server = server;
+ if (!(daemon->options & OPT_ALL_SERVERS))
+ daemon->last_server = server;
}
/* If the answer is an error, keep the forward record in place in case
@@ -531,6 +541,9 @@ void receive_query(struct listener *listen, time_t now)
#endif
#if defined(HAVE_LINUX_NETWORK)
char control[CMSG_SPACE(sizeof(struct in_pktinfo))];
+#elif defined(IP_RECVDSTADDR) && defined(HAVE_SOLARIS_NETWORK)
+ char control[CMSG_SPACE(sizeof(struct in_addr)) +
+ CMSG_SPACE(sizeof(unsigned int))];
#elif defined(IP_RECVDSTADDR)
char control[CMSG_SPACE(sizeof(struct in_addr)) +
CMSG_SPACE(sizeof(struct sockaddr_dl))];
@@ -598,7 +611,11 @@ void receive_query(struct listener *listen, time_t now)
if (cmptr->cmsg_level == IPPROTO_IP && cmptr->cmsg_type == IP_RECVDSTADDR)
dst_addr_4 = dst_addr.addr.addr4 = *((struct in_addr *)CMSG_DATA(cmptr));
else if (cmptr->cmsg_level == IPPROTO_IP && cmptr->cmsg_type == IP_RECVIF)
+#ifdef HAVE_SOLARIS_NETWORK
+ if_index = *((unsigned int *)CMSG_DATA(cmptr));
+#else
if_index = ((struct sockaddr_dl *)CMSG_DATA(cmptr))->sdl_index;
+#endif
}
#endif
@@ -654,10 +671,16 @@ void receive_query(struct listener *listen, time_t now)
m = answer_request (header, ((char *) header) + PACKETSZ, (size_t)n,
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);
+ {
+ send_from(listen->fd, daemon->options & OPT_NOWILD, (char *)header,
+ m, &source_addr, &dst_addr, if_index);
+ daemon->local_answer++;
+ }
+ else if (forward_query(listen->fd, &source_addr, &dst_addr, if_index,
+ header, (size_t)n, now, NULL))
+ daemon->queries_forwarded++;
else
- forward_query(listen->fd, &source_addr, &dst_addr, if_index,
- header, (size_t)n, now, NULL);
+ daemon->local_answer++;
}
/* The daemon forks before calling this: it should deal with one connection,
@@ -757,7 +780,8 @@ unsigned char *tcp_request(int confd, time_t now,
if ((last_server->tcpfd == -1) &&
(last_server->tcpfd = socket(last_server->addr.sa.sa_family, SOCK_STREAM, 0)) != -1 &&
- connect(last_server->tcpfd, &last_server->addr.sa, sa_len(&last_server->addr)) == -1)
+ (!local_bind(last_server->tcpfd, &last_server->source_addr, last_server->interface, 1) ||
+ connect(last_server->tcpfd, &last_server->addr.sa, sa_len(&last_server->addr)) == -1))
{
close(last_server->tcpfd);
last_server->tcpfd = -1;
@@ -765,7 +789,7 @@ unsigned char *tcp_request(int confd, time_t now,
if (last_server->tcpfd == -1)
continue;
-
+
c1 = size >> 8;
c2 = size;
@@ -779,7 +803,7 @@ unsigned char *tcp_request(int confd, time_t now,
last_server->tcpfd = -1;
continue;
}
-
+
m = (c1 << 8) | c2;
if (!read_write(last_server->tcpfd, packet, m, 1))
return packet;
diff --git a/src/helper.c b/src/helper.c
index 118346e..865bcb5 100644
--- a/src/helper.c
+++ b/src/helper.c
@@ -1,13 +1,17 @@
-/* dnsmasq is Copyright (c) 2000-2006 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2007 Simon Kelley
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; version 2 dated June, 1991.
-
+ the Free Software Foundation; version 2 dated June, 1991, or
+ (at your option) version 3 dated 29 June, 2007.
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "dnsmasq.h"
@@ -26,6 +30,8 @@
#ifndef NO_FORK
+static void my_setenv(const char *name, const char *value, int *error);
+
struct script_data
{
unsigned char action, hwaddr_len, hwaddr_type;
@@ -38,6 +44,7 @@ struct script_data
time_t expires;
#endif
unsigned char hwaddr[DHCP_CHADDR_MAX];
+ char interface[IF_NAMESIZE];
};
static struct script_data *buf = NULL;
@@ -87,6 +94,7 @@ int create_helper(int event_fd, long max_fd)
struct script_data data;
char *p, *action_str, *hostname = NULL;
unsigned char *buf = (unsigned char *)daemon->namebuff;
+ int err = 0;
/* we read zero bytes when pipe closed: this is our signal to exit */
if (!read_write(pipefd[0], (unsigned char *)&data, sizeof(data), 1))
@@ -166,16 +174,15 @@ int create_helper(int event_fd, long max_fd)
}
if (data.clid_len != 0)
- setenv("DNSMASQ_CLIENT_ID", daemon->packet, 1);
- else
- unsetenv("DNSMASQ_CLIENT_ID");
-
+ my_setenv("DNSMASQ_CLIENT_ID", daemon->packet, &err);
+
+ if (strlen(data.interface) != 0)
+ my_setenv("DNSMASQ_INTERFACE", data.interface, &err);
+
#ifdef HAVE_BROKEN_RTC
- setenv("DNSMASQ_LEASE_LENGTH", daemon->dhcp_buff2, 1);
- unsetenv("DNSMASQ_LEASE_EXPIRES");
+ my_setenv("DNSMASQ_LEASE_LENGTH", daemon->dhcp_buff2, &err);
#else
- setenv("DNSMASQ_LEASE_EXPIRES", daemon->dhcp_buff2, 1);
- unsetenv("DNSMASQ_LEASE_LENGTH");
+ my_setenv("DNSMASQ_LEASE_EXPIRES", daemon->dhcp_buff2, &err);
#endif
if (data.vclass_len != 0)
@@ -184,11 +191,9 @@ int create_helper(int event_fd, long max_fd)
/* cannot have = chars in env - truncate if found . */
if ((p = strchr((char *)buf, '=')))
*p = 0;
- setenv("DNSMASQ_VENDOR_CLASS", (char *)buf, 1);
+ my_setenv("DNSMASQ_VENDOR_CLASS", (char *)buf, &err);
buf += data.vclass_len;
}
- else
- unsetenv("DNSMASQ_VENDOR_CLASS");
if (data.uclass_len != 0)
{
@@ -203,14 +208,14 @@ int create_helper(int event_fd, long max_fd)
if (strlen((char *)buf) != 0)
{
sprintf(daemon->dhcp_buff2, "DNSMASQ_USER_CLASS%i", i++);
- setenv(daemon->dhcp_buff2, (char *)buf, 1);
+ my_setenv(daemon->dhcp_buff2, (char *)buf, &err);
}
buf += len;
}
}
sprintf(daemon->dhcp_buff2, "%u ", data.remaining_time);
- setenv("DNSMASQ_TIME_REMAINING", daemon->dhcp_buff2, 1);
+ my_setenv("DNSMASQ_TIME_REMAINING", daemon->dhcp_buff2, &err);
if (data.hostname_len != 0)
{
@@ -222,11 +227,9 @@ int create_helper(int event_fd, long max_fd)
if (data.action == ACTION_OLD_HOSTNAME && hostname)
{
- setenv("DNSMASQ_OLD_HOSTNAME", hostname, 1);
+ my_setenv("DNSMASQ_OLD_HOSTNAME", hostname, &err);
hostname = NULL;
}
- else
- unsetenv("DNSMASQ_OLD_HOSTNAME");
/* we need to have the event_fd around if exec fails */
if ((i = fcntl(event_fd, F_GETFD)) != -1)
@@ -234,16 +237,45 @@ int create_helper(int event_fd, long max_fd)
close(pipefd[0]);
p = strrchr(daemon->lease_change_command, '/');
- execl(daemon->lease_change_command,
- p ? p+1 : daemon->lease_change_command,
- action_str, daemon->dhcp_buff, inet_ntoa(data.addr), hostname, (char*)NULL);
-
+ if (err == 0)
+ {
+ execl(daemon->lease_change_command,
+ p ? p+1 : daemon->lease_change_command,
+ action_str, daemon->dhcp_buff, inet_ntoa(data.addr), hostname, (char*)NULL);
+ err = errno;
+ }
/* failed, send event so the main process logs the problem */
- send_event(event_fd, EVENT_EXEC_ERR, errno);
+ send_event(event_fd, EVENT_EXEC_ERR, err);
_exit(0);
}
}
+static void my_setenv(const char *name, const char *value, int *error)
+{
+ if (*error == 0)
+ {
+#if defined(HAVE_SOLARIS_NETWORK) && !defined(HAVE_SOLARIS_PRIVS)
+ /* old Solaris is missing setenv..... */
+ char *p;
+
+ if (!(p = malloc(strlen(name) + strlen(value) + 2)))
+ *error = ENOMEM;
+ else
+ {
+ strcpy(p, name);
+ strcat(p, "=");
+ strcat(p, value);
+
+ if (putenv(p) != 0)
+ *error = errno;
+ }
+#else
+ if (setenv(name, value, 1) != 0)
+ *error = errno;
+#endif
+ }
+}
+
/* pack up lease data into a buffer */
void queue_script(int action, struct dhcp_lease *lease, char *hostname, time_t now)
{
@@ -291,6 +323,20 @@ void queue_script(int action, struct dhcp_lease *lease, char *hostname, time_t n
buf->hostname_len = hostname_len;
buf->addr = lease->addr;
memcpy(buf->hwaddr, lease->hwaddr, lease->hwaddr_len);
+ buf->interface[0] = 0;
+#ifdef HAVE_LINUX_NETWORK
+ if (lease->last_interface != 0)
+ {
+ struct ifreq ifr;
+ ifr.ifr_ifindex = lease->last_interface;
+ if (ioctl(daemon->dhcpfd, SIOCGIFNAME, &ifr) != -1)
+ strncpy(buf->interface, ifr.ifr_name, IF_NAMESIZE);
+ }
+#else
+ if (lease->last_interface != 0)
+ if_indextoname(lease->last_interface, buf->interface);
+#endif
+
#ifdef HAVE_BROKEN_RTC
buf->length = lease->length;
#else
diff --git a/src/isc.c b/src/isc.c
index c30f1eb..51d73c5 100644
--- a/src/isc.c
+++ b/src/isc.c
@@ -1,13 +1,17 @@
-/* dnsmasq is Copyright (c) 2000 - 2005 by Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2007 Simon Kelley
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; version 2 dated June, 1991.
-
+ the Free Software Foundation; version 2 dated June, 1991, or
+ (at your option) version 3 dated 29 June, 2007.
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
diff --git a/src/lease.c b/src/lease.c
index 2dedf35..070c524 100644
--- a/src/lease.c
+++ b/src/lease.c
@@ -1,13 +1,17 @@
-/* dnsmasq is Copyright (c) 2000-2006 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2007 Simon Kelley
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; version 2 dated June, 1991.
-
+ the Free Software Foundation; version 2 dated June, 1991, or
+ (at your option) version 3 dated 29 June, 2007.
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "dnsmasq.h"
@@ -244,7 +248,7 @@ void lease_update_dns(void)
{
struct dhcp_lease *lease;
- if (dns_dirty)
+ if (daemon->port != 0 && dns_dirty)
{
cache_unhash_dhcp();
@@ -476,6 +480,15 @@ void lease_set_hostname(struct dhcp_lease *lease, char *name, char *suffix, int
lease->changed = 1; /* run script on change */
}
+void lease_set_interface(struct dhcp_lease *lease, int interface)
+{
+ if (lease->last_interface == interface)
+ return;
+
+ lease->last_interface = interface;
+ lease->changed = 1;
+}
+
void rerun_scripts(void)
{
struct dhcp_lease *lease;
diff --git a/src/log.c b/src/log.c
index 7d60e7e..364f5df 100644
--- a/src/log.c
+++ b/src/log.c
@@ -2,12 +2,16 @@
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; version 2 dated June, 1991.
-
+ the Free Software Foundation; version 2 dated June, 1991, or
+ (at your option) version 3 dated 29 June, 2007.
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "dnsmasq.h"
@@ -68,13 +72,6 @@ void log_start(struct passwd *ent_pw)
if (!log_reopen(daemon->log_file))
die(_("cannot open %s: %s"), daemon->log_file ? daemon->log_file : "log", EC_FILE);
- /* If we're running as root and going to change uid later,
- change the ownership here so that the file is always owned by
- the dnsmasq user. Then logrotate can just copy the owner.
- Failure of the chown call is OK, (for instance when started as non-root) */
- if (log_to_file && ent_pw && ent_pw->pw_uid != 0)
- fchown(log_fd, ent_pw->pw_uid, -1);
-
/* if queuing is inhibited, make sure we allocate
the one required buffer now. */
if (max_logs == 0)
@@ -83,29 +80,47 @@ void log_start(struct passwd *ent_pw)
free_entries->next = NULL;
entries_alloced = 1;
}
+
+ /* If we're running as root and going to change uid later,
+ change the ownership here so that the file is always owned by
+ the dnsmasq user. Then logrotate can just copy the owner.
+ Failure of the chown call is OK, (for instance when started as non-root) */
+ if (log_to_file && ent_pw && ent_pw->pw_uid != 0 && fchown(log_fd, ent_pw->pw_uid, -1) != 0)
+ my_syslog(LOG_WARNING, _("warning: failed to change owner of %s: %s"), daemon->log_file, strerror(errno));
}
int log_reopen(char *log_file)
{
- int flags;
-
if (log_fd != -1)
close(log_fd);
/* NOTE: umask is set to 022 by the time this gets called */
if (log_file)
- log_fd = open(log_file, O_WRONLY|O_CREAT|O_APPEND, S_IRUSR|S_IWUSR|S_IRGRP);
+ {
+ log_fd = open(log_file, O_WRONLY|O_CREAT|O_APPEND, S_IRUSR|S_IWUSR|S_IRGRP);
+ return log_fd != -1;
+ }
else
- log_fd = socket(AF_UNIX, connection_type, 0);
-
- if (log_fd == -1)
- return 0;
-
- /* if max_logs is zero, leave the socket blocking */
- if (max_logs != 0 && (flags = fcntl(log_fd, F_GETFL)) != -1)
- fcntl(log_fd, F_SETFL, flags | O_NONBLOCK);
+#ifdef HAVE_SOLARIS_NETWORK
+ /* Solaris logging is "different", /dev/log is not unix-domain socket.
+ Just leave log_fd == -1 and use the vsyslog call for everything.... */
+# define _PATH_LOG "" /* dummy */
+ log_fd = -1;
+#else
+ {
+ int flags;
+ log_fd = socket(AF_UNIX, connection_type, 0);
+
+ if (log_fd == -1)
+ return 0;
+ /* if max_logs is zero, leave the socket blocking */
+ if (max_logs != 0 && (flags = fcntl(log_fd, F_GETFL)) != -1)
+ fcntl(log_fd, F_SETFL, flags | O_NONBLOCK);
+ }
+#endif
+
return 1;
}
@@ -187,7 +202,7 @@ static void log_write(void)
#ifdef HAVE_SOCKADDR_SA_LEN
logaddr.sun_len = sizeof(logaddr) - sizeof(logaddr.sun_path) + strlen(_PATH_LOG) + 1;
#endif
- logaddr.sun_family = AF_LOCAL;
+ logaddr.sun_family = AF_UNIX;
strncpy(logaddr.sun_path, _PATH_LOG, sizeof(logaddr.sun_path));
/* Got connection back? try again. */
@@ -234,15 +249,15 @@ void my_syslog(int priority, const char *format, ...)
size_t len;
pid_t pid = getpid();
- va_start(ap, format);
-
if (log_stderr)
{
fprintf(stderr, "dnsmasq: ");
+ va_start(ap, format);
vfprintf(stderr, format, ap);
+ va_end(ap);
fputc('\n', stderr);
}
-
+
if (log_fd == -1)
{
/* fall-back to syslog if we die during startup or fail during running. */
@@ -252,6 +267,7 @@ void my_syslog(int priority, const char *format, ...)
openlog("dnsmasq", LOG_PID, log_fac);
isopen = 1;
}
+ va_start(ap, format);
vsyslog(priority, format, ap);
va_end(ap);
return;
@@ -282,9 +298,11 @@ void my_syslog(int priority, const char *format, ...)
if (!log_to_file)
p += sprintf(p, "<%d>", priority | log_fac);
- p += sprintf(p, "%.15s dnsmasq[%d]: ", ctime(&time_now) + 4, pid);
+ p += sprintf(p, "%.15s dnsmasq[%d]: ", ctime(&time_now) + 4, (int)pid);
len = p - entry->payload;
+ va_start(ap, format);
len += vsnprintf(p, MAX_MESSAGE - len, format, ap) + 1; /* include zero-terminator */
+ va_end(ap);
entry->length = len > MAX_MESSAGE ? MAX_MESSAGE : len;
entry->offset = 0;
entry->pid = pid;
@@ -331,8 +349,6 @@ void my_syslog(int priority, const char *format, ...)
log_write();
}
}
-
- va_end(ap);
}
void set_log_writer(fd_set *set, int *maxfdp)
diff --git a/src/netlink.c b/src/netlink.c
index 3157f03..299f3f7 100644
--- a/src/netlink.c
+++ b/src/netlink.c
@@ -1,13 +1,17 @@
- /* dnsmasq is Copyright (c) 2000-2006 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2007 Simon Kelley
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; version 2 dated June, 1991.
-
+ the Free Software Foundation; version 2 dated June, 1991, or
+ (at your option) version 3 dated 29 June, 2007.
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "dnsmasq.h"
diff --git a/src/network.c b/src/network.c
index d3886e7..36009fe 100644
--- a/src/network.c
+++ b/src/network.c
@@ -1,13 +1,17 @@
-/* dnsmasq is Copyright (c) 2000 - 2006 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2007 Simon Kelley
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; version 2 dated June, 1991.
-
+ the Free Software Foundation; version 2 dated June, 1991, or
+ (at your option) version 3 dated 29 June, 2007.
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "dnsmasq.h"
@@ -293,7 +297,7 @@ struct listener *create_wildcard_listeners(void)
union mysockaddr addr;
int opt = 1;
struct listener *l, *l6 = NULL;
- int tcpfd, fd, tftpfd = -1;
+ int tcpfd = -1, fd = -1, tftpfd = -1;
memset(&addr, 0, sizeof(addr));
addr.in.sin_family = AF_INET;
@@ -303,28 +307,32 @@ struct listener *create_wildcard_listeners(void)
addr.in.sin_len = sizeof(struct sockaddr_in);
#endif
- if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1 ||
- (tcpfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
- return NULL;
-
- if (setsockopt(tcpfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) == -1 ||
- bind(tcpfd, (struct sockaddr *)&addr, sa_len(&addr)) == -1 ||
- listen(tcpfd, 5) == -1 ||
- !fix_fd(tcpfd) ||
+ if (daemon->port != 0)
+ {
+
+ if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1 ||
+ (tcpfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
+ return NULL;
+
+ if (setsockopt(tcpfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) == -1 ||
+ bind(tcpfd, (struct sockaddr *)&addr, sa_len(&addr)) == -1 ||
+ listen(tcpfd, 5) == -1 ||
+ !fix_fd(tcpfd) ||
#ifdef HAVE_IPV6
- !create_ipv6_listener(&l6, daemon->port) ||
+ !create_ipv6_listener(&l6, daemon->port) ||
#endif
- setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) == -1 ||
- !fix_fd(fd) ||
+ setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) == -1 ||
+ !fix_fd(fd) ||
#if defined(HAVE_LINUX_NETWORK)
- setsockopt(fd, SOL_IP, IP_PKTINFO, &opt, sizeof(opt)) == -1 ||
+ setsockopt(fd, SOL_IP, IP_PKTINFO, &opt, sizeof(opt)) == -1 ||
#elif defined(IP_RECVDSTADDR) && defined(IP_RECVIF)
- setsockopt(fd, IPPROTO_IP, IP_RECVDSTADDR, &opt, sizeof(opt)) == -1 ||
- setsockopt(fd, IPPROTO_IP, IP_RECVIF, &opt, sizeof(opt)) == -1 ||
+ setsockopt(fd, IPPROTO_IP, IP_RECVDSTADDR, &opt, sizeof(opt)) == -1 ||
+ setsockopt(fd, IPPROTO_IP, IP_RECVIF, &opt, sizeof(opt)) == -1 ||
#endif
- bind(fd, (struct sockaddr *)&addr, sa_len(&addr)) == -1)
- return NULL;
-
+ bind(fd, (struct sockaddr *)&addr, sa_len(&addr)) == -1)
+ return NULL;
+ }
+
#ifdef HAVE_TFTP
if (daemon->options & OPT_TFTP)
{
@@ -367,49 +375,52 @@ struct listener *create_bound_listeners(void)
new->iface = iface;
new->next = listeners;
new->tftpfd = -1;
+ new->tcpfd = -1;
+ new->fd = -1;
- if ((new->tcpfd = socket(iface->addr.sa.sa_family, SOCK_STREAM, 0)) == -1 ||
- (new->fd = socket(iface->addr.sa.sa_family, SOCK_DGRAM, 0)) == -1 ||
- setsockopt(new->fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) == -1 ||
- setsockopt(new->tcpfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) == -1 ||
- !fix_fd(new->tcpfd) ||
- !fix_fd(new->fd))
- die(_("failed to create listening socket: %s"), NULL, EC_BADNET);
-
-#ifdef HAVE_IPV6
- if (iface->addr.sa.sa_family == AF_INET6)
- {
- if (setsockopt(new->fd, IPV6_LEVEL, IPV6_V6ONLY, &opt, sizeof(opt)) == -1 ||
- setsockopt(new->tcpfd, IPV6_LEVEL, IPV6_V6ONLY, &opt, sizeof(opt)) == -1)
- die(_("failed to set IPV6 options on listening socket: %s"), NULL, EC_BADNET);
- }
-#endif
-
- if (bind(new->tcpfd, &iface->addr.sa, sa_len(&iface->addr)) == -1 ||
- bind(new->fd, &iface->addr.sa, sa_len(&iface->addr)) == -1)
+ if (daemon->port != 0)
{
+ if ((new->tcpfd = socket(iface->addr.sa.sa_family, SOCK_STREAM, 0)) == -1 ||
+ (new->fd = socket(iface->addr.sa.sa_family, SOCK_DGRAM, 0)) == -1 ||
+ setsockopt(new->fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) == -1 ||
+ setsockopt(new->tcpfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) == -1 ||
+ !fix_fd(new->tcpfd) ||
+ !fix_fd(new->fd))
+ die(_("failed to create listening socket: %s"), NULL, EC_BADNET);
+
#ifdef HAVE_IPV6
- if (iface->addr.sa.sa_family == AF_INET6 && errno == ENODEV)
+ if (iface->addr.sa.sa_family == AF_INET6)
{
- close(new->tcpfd);
- close(new->fd);
- free(new);
+ if (setsockopt(new->fd, IPV6_LEVEL, IPV6_V6ONLY, &opt, sizeof(opt)) == -1 ||
+ setsockopt(new->tcpfd, IPV6_LEVEL, IPV6_V6ONLY, &opt, sizeof(opt)) == -1)
+ die(_("failed to set IPV6 options on listening socket: %s"), NULL, EC_BADNET);
}
- else
#endif
+
+ if (bind(new->tcpfd, &iface->addr.sa, sa_len(&iface->addr)) == -1 ||
+ bind(new->fd, &iface->addr.sa, sa_len(&iface->addr)) == -1)
{
- prettyprint_addr(&iface->addr, daemon->namebuff);
- die(_("failed to bind listening socket for %s: %s"),
- daemon->namebuff, EC_BADNET);
+#ifdef HAVE_IPV6
+ if (iface->addr.sa.sa_family == AF_INET6 && (errno == ENODEV || errno == EADDRNOTAVAIL))
+ {
+ close(new->tcpfd);
+ close(new->fd);
+ free(new);
+ new = NULL;
+ }
+ else
+#endif
+ {
+ prettyprint_addr(&iface->addr, daemon->namebuff);
+ die(_("failed to bind listening socket for %s: %s"),
+ daemon->namebuff, EC_BADNET);
+ }
}
+ else if (listen(new->tcpfd, 5) == -1)
+ die(_("failed to listen on socket: %s"), NULL, EC_BADNET);
}
- else
- {
- listeners = new;
- if (listen(new->tcpfd, 5) == -1)
- die(_("failed to listen on socket: %s"), NULL, EC_BADNET);
- }
+#ifdef HAVE_TFTP
if ((daemon->options & OPT_TFTP) && iface->addr.sa.sa_family == AF_INET && iface->dhcp_ok)
{
short save = iface->addr.in.sin_port;
@@ -421,18 +432,51 @@ struct listener *create_bound_listeners(void)
die(_("failed to create TFTP socket: %s"), NULL, EC_BADNET);
iface->addr.in.sin_port = save;
}
+#endif
+
+ if (new)
+ listeners = new;
}
return listeners;
}
-struct serverfd *allocate_sfd(union mysockaddr *addr, struct serverfd **sfds)
+int local_bind(int fd, union mysockaddr *addr, char *intname, int is_tcp)
+{
+ union mysockaddr addr_copy = *addr;
+
+ /* cannot set source _port_ for TCP connections. */
+ if (is_tcp)
+ {
+ if (addr_copy.sa.sa_family == AF_INET)
+ addr_copy.in.sin_port = 0;
+#ifdef HAVE_IPV6
+ else
+ addr_copy.in6.sin6_port = 0;
+#endif
+ }
+
+ if (bind(fd, (struct sockaddr *)&addr_copy, sa_len(&addr_copy)) == -1)
+ return 0;
+
+#if defined(SO_BINDTODEVICE)
+ if (strlen(intname) != 0 &&
+ setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, intname, sizeof(intname)) == -1)
+ return 0;
+#endif
+
+ return 1;
+}
+
+static struct serverfd *allocate_sfd(union mysockaddr *addr, char *intname)
{
struct serverfd *sfd;
+ int errsave;
/* may have a suitable one already */
- for (sfd = *sfds; sfd; sfd = sfd->next )
- if (sockaddr_isequal(&sfd->source_addr, addr))
+ for (sfd = daemon->sfds; sfd; sfd = sfd->next )
+ if (sockaddr_isequal(&sfd->source_addr, addr) &&
+ strcmp(intname, sfd->interface) == 0)
return sfd;
/* need to make a new one. */
@@ -446,23 +490,68 @@ struct serverfd *allocate_sfd(union mysockaddr *addr, struct serverfd **sfds)
return NULL;
}
- if (bind(sfd->fd, (struct sockaddr *)addr, sa_len(addr)) == -1 ||
- !fix_fd(sfd->fd))
- {
- int errsave = errno; /* save error from bind. */
+ if (!local_bind(sfd->fd, addr, intname, 0) || !fix_fd(sfd->fd))
+ {
+ errsave = errno; /* save error from bind. */
close(sfd->fd);
free(sfd);
errno = errsave;
return NULL;
}
-
+
+ strcpy(sfd->interface, intname);
sfd->source_addr = *addr;
- sfd->next = *sfds;
- *sfds = sfd;
+ sfd->next = daemon->sfds;
+ daemon->sfds = sfd;
+ return sfd;
+}
+
+/* create upstream sockets during startup, before root is dropped which may be needed
+ this allows query_port to be a low port and interface binding */
+void pre_allocate_sfds(void)
+{
+ struct server *srv;
+
+ if (daemon->query_port != 0)
+ {
+ union mysockaddr addr;
+ memset(&addr, 0, sizeof(addr));
+ addr.in.sin_family = AF_INET;
+ addr.in.sin_addr.s_addr = INADDR_ANY;
+ addr.in.sin_port = htons(daemon->query_port);
+#ifdef HAVE_SOCKADDR_SA_LEN
+ addr.in.sin_len = sizeof(struct sockaddr_in);
+#endif
+ allocate_sfd(&addr, "");
+#ifdef HAVE_IPV6
+ memset(&addr, 0, sizeof(addr));
+ addr.in6.sin6_family = AF_INET6;
+ addr.in6.sin6_addr = in6addr_any;
+ addr.in6.sin6_port = htons(daemon->query_port);
+#ifdef HAVE_SOCKADDR_SA_LEN
+ addr.in6.sin6_len = sizeof(struct sockaddr_in6);
+#endif
+ allocate_sfd(&addr, "");
+#endif
+ }
- return sfd;
+ for (srv = daemon->servers; srv; srv = srv->next)
+ if (!(srv->flags & (SERV_LITERAL_ADDRESS | SERV_NO_ADDR)) &&
+ !allocate_sfd(&srv->source_addr, srv->interface) &&
+ (daemon->options & OPT_NOWILD))
+ {
+ prettyprint_addr(&srv->addr, daemon->namebuff);
+ if (strlen(srv->interface) != 0)
+ {
+ strcat(daemon->namebuff, " ");
+ strcat(daemon->namebuff, srv->interface);
+ }
+ die(_("failed to bind server socket for %s: %s"),
+ daemon->namebuff, EC_BADNET);
+ }
}
+
void check_servers(void)
{
struct irec *iface;
@@ -496,7 +585,7 @@ void check_servers(void)
}
/* Do we need a socket set? */
- if (!new->sfd && !(new->sfd = allocate_sfd(&new->source_addr, &daemon->sfds)))
+ if (!new->sfd && !(new->sfd = allocate_sfd(&new->source_addr, new->interface)))
{
my_syslog(LOG_WARNING,
_("ignoring nameserver %s - cannot make/bind socket: %s"),
@@ -525,6 +614,8 @@ void check_servers(void)
else if (!(new->flags & SERV_LITERAL_ADDRESS))
my_syslog(LOG_INFO, _("using nameserver %s#%d for %s %s"), daemon->namebuff, port, s1, s2);
}
+ else if (strlen(new->interface) != 0)
+ my_syslog(LOG_INFO, _("using nameserver %s#%d(via %s)"), daemon->namebuff, port, new->interface);
else
my_syslog(LOG_INFO, _("using nameserver %s#%d"), daemon->namebuff, port);
}
@@ -626,9 +717,10 @@ int reload_servers(char *fname)
serv->addr = addr;
serv->source_addr = source_addr;
serv->domain = NULL;
+ serv->interface[0] = 0;
serv->sfd = NULL;
serv->flags = SERV_FROM_RESOLV;
-
+ serv->queries = serv->failed_queries = 0;
gotone = 1;
}
diff --git a/src/option.c b/src/option.c
index f2957ad..640d033 100644
--- a/src/option.c
+++ b/src/option.c
@@ -1,19 +1,55 @@
-/* dnsmasq is Copyright (c) 2000 - 2007 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2007 Simon Kelley
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; version 2 dated June, 1991.
-
+ the Free Software Foundation; version 2 dated June, 1991, or
+ (at your option) version 3 dated 29 June, 2007.
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/* define this to get facilitynames */
#define SYSLOG_NAMES
-
#include "dnsmasq.h"
+#include <setjmp.h>
+
+/* Solaris headers don't have facility names. */
+#ifdef HAVE_SOLARIS_NETWORK
+static const struct {
+ char *c_name;
+ unsigned int c_val;
+} facilitynames[] = {
+ { "kern", LOG_KERN },
+ { "user", LOG_USER },
+ { "mail", LOG_MAIL },
+ { "daemon", LOG_DAEMON },
+ { "auth", LOG_AUTH },
+ { "syslog", LOG_SYSLOG },
+ { "lpr", LOG_LPR },
+ { "news", LOG_NEWS },
+ { "uucp", LOG_UUCP },
+#ifdef LOG_AUDIT
+ /* Not Solaris < 10 */
+ { "audit", LOG_AUDIT },
+#endif
+ { "cron", LOG_CRON },
+ { "local0", LOG_LOCAL0 },
+ { "local1", LOG_LOCAL1 },
+ { "local2", LOG_LOCAL2 },
+ { "local3", LOG_LOCAL3 },
+ { "local4", LOG_LOCAL4 },
+ { "local5", LOG_LOCAL5 },
+ { "local6", LOG_LOCAL6 },
+ { "local7", LOG_LOCAL7 },
+ { NULL, 0 }
+};
+#endif
#ifndef HAVE_GETOPT_LONG
struct myoption {
@@ -46,6 +82,15 @@ struct myoption {
#define LOPT_BANK 272
#define LOPT_DHCP_HOST 273
#define LOPT_APREF 274
+#define LOPT_OVERRIDE 275
+#define LOPT_TFTPPORTS 276
+#define LOPT_REBIND 277
+#define LOPT_NOLAST 278
+#define LOPT_OPTS 279
+#define LOPT_DHCP_OPTS 280
+#define LOPT_MATCH 281
+#define LOPT_BROADCAST 282
+#define LOPT_NEGTTL 283
#ifdef HAVE_GETOPT_LONG
static const struct option opts[] =
@@ -138,6 +183,14 @@ static const struct myoption opts[] =
{"dhcp-subscrid", 1, 0, LOPT_SUBSCR },
{"interface-name", 1, 0, LOPT_INTNAME },
{"dhcp-hostsfile", 1, 0, LOPT_DHCP_HOST },
+ {"dhcp-optsfile", 1, 0, LOPT_DHCP_OPTS },
+ {"dhcp-no-override", 0, 0, LOPT_OVERRIDE },
+ {"tftp-port-range", 1, 0, LOPT_TFTPPORTS },
+ {"stop-dns-rebind", 0, 0, LOPT_REBIND },
+ {"all-servers", 0, 0, LOPT_NOLAST},
+ {"dhcp-match", 1, 0, LOPT_MATCH },
+ {"dhcp-broadcast", 1, 0, LOPT_BROADCAST },
+ {"neg-ttl", 1, 0, LOPT_NEGTTL },
{ NULL, 0, 0, 0 }
};
@@ -175,6 +228,9 @@ static const struct optflags optmap[] = {
{ LOPT_NOBLOCK, OPT_TFTP_NOBLOCK },
{ LOPT_LOG_OPTS, OPT_LOG_OPTS },
{ LOPT_APREF, OPT_TFTP_APREF },
+ { LOPT_OVERRIDE, OPT_NO_OVERRIDE },
+ { LOPT_REBIND, OPT_NO_REBIND },
+ { LOPT_NOLAST, OPT_ALL_SERVERS },
{ 'v', 0},
{ 'w', 0},
{ 0, 0 }
@@ -200,6 +256,7 @@ static const struct {
{ "-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 },
{ " --dhcp-hostsfile=<filename>", gettext_noop("Read DHCP host specs from file"), NULL },
+ { " --dhcp-optsfile=<filename>", gettext_noop("Read DHCP option specs from file"), 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 },
@@ -209,6 +266,7 @@ static const struct {
{ " --dhcp-remoteid=<tag>,<remote>", gettext_noop("Map RFC3046 remote-id to tag."), NULL },
{ " --dhcp-subscrid=<tag>,<remote>", gettext_noop("Map RFC3993 subscriber-id to tag."), NULL },
{ "-J, --dhcp-ignore=<tag>", gettext_noop("Don't do DHCP for hosts with tag set."), NULL },
+ { " --dhcp-broadcast=<tag>", gettext_noop("Force broadcast replies for hosts with tag 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 },
@@ -222,8 +280,8 @@ static const struct {
{ " --dhcp-option-force=<optspec>", gettext_noop("DHCP option sent even if the client does not request it."), 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 },
+ { "-q, --log-queries", gettext_noop("Log DNS queries."), NULL },
+ { "-Q, --query-port=number", gettext_noop("Force the originating port for upstream DNS 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 },
@@ -231,6 +289,7 @@ static const struct {
{ "-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 },
+ { " --neg-ttl=time", gettext_noop("Specify time-to-live in seconds for negative caching."), 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 tag."), NULL },
{ "-v, --version", gettext_noop("Display dnsmasq version and copyright information."), NULL },
@@ -260,14 +319,19 @@ static const struct {
{ "-0, --dns-forward-max=<queries>", gettext_noop("Maximum number of concurrent DNS queries. (defaults to %s)"), "!" },
{ " --clear-on-reload", gettext_noop("Clear DNS cache when reloading %s."), RESOLVFILE },
{ " --dhcp-ignore-names[=<id>]", gettext_noop("Ignore hostnames provided by DHCP clients."), NULL },
+ { " --dhcp-no-override", gettext_noop("Do NOT reuse filename and server fields for extra DHCP options."), NULL },
{ " --enable-tftp", gettext_noop("Enable integrated read-only TFTP server."), NULL },
{ " --tftp-root=<directory>", gettext_noop("Export files by TFTP only from the specified subtree."), NULL },
{ " --tftp-unique-root", gettext_noop("Add client IP address to tftp-root."), NULL },
{ " --tftp-secure", gettext_noop("Allow access only to files owned by the user running dnsmasq."), NULL },
{ " --tftp-max=<connections>", gettext_noop("Maximum number of conncurrent TFTP transfers (defaults to %s)."), "#" },
{ " --tftp-no-blocksize", gettext_noop("Disable the TFTP blocksize extension."), NULL },
+ { " --tftp-port-range=<start>,<end>", gettext_noop("Ephemeral port range for use by TFTP transfers."), NULL },
{ " --log-dhcp", gettext_noop("Extra logging for DHCP."), NULL },
{ " --log-async[=<log lines>]", gettext_noop("Enable async. logging; optionally set queue length."), NULL },
+ { " --stop-dns-rebind", gettext_noop("Stop DNS rebinding. Filter private IP ranges when resolving."), NULL },
+ { " --all-servers", gettext_noop("Always perform DNS queries to all servers."), NULL },
+ { " --dhcp-match=<netid>,<opt-no>", gettext_noop("Set tag if client includes option in request."), NULL },
{ NULL, NULL, NULL }
};
@@ -349,6 +413,10 @@ static const struct {
{ NULL, 0, 0 }
};
+static volatile int mem_recover = 0;
+static jmp_buf mem_jmp;
+static void one_file(char *file, int nest, int hard_opt);
+
char *option_string(unsigned char opt)
{
int i;
@@ -364,7 +432,7 @@ char *option_string(unsigned char opt)
character space. Note that the \0, \t \b \r \033 and \n characters are carefully placed in the
following sequence so that they map to themselves: it is therefore possible to call
unhide_metas repeatedly on string without breaking things.
- The transformation gets undone by opt_canonicalise, atoi_check and safe_string_alloc, and a
+ The transformation gets undone by opt_canonicalise, atoi_check and opt_string_alloc, and a
couple of other places.
Note that space is included here so that
--dhcp-option=3, string
@@ -403,13 +471,29 @@ static void unhide_metas(char *cp)
*cp = unhide_meta(*cp);
}
-static char *safe_string_alloc(char *cp)
+static void *opt_malloc(size_t size)
+{
+ void *ret;
+
+ if (mem_recover)
+ {
+ ret = whine_malloc(size);
+ if (!ret)
+ longjmp(mem_jmp, 1);
+ }
+ else
+ ret = safe_malloc(size);
+
+ return ret;
+}
+
+static char *opt_string_alloc(char *cp)
{
char *ret = NULL;
if (cp && strlen(cp) != 0)
{
- ret = safe_malloc(strlen(cp)+1);
+ ret = opt_malloc(strlen(cp)+1);
strcpy(ret, cp);
/* restore hidden metachars */
@@ -432,9 +516,9 @@ static char *split(char *s)
p = comma;
*comma = ' ';
- for (; isspace(*comma); comma++);
+ for (; isspace((int)*comma); comma++);
- for (; (p >= s) && isspace(*p); p--)
+ for (; (p >= s) && isspace((int)*p); p--)
*p = 0;
return comma;
@@ -469,13 +553,13 @@ static int atoi_check(char *a, int *res)
static void add_txt(char *name, char *txt)
{
size_t len = strlen(txt);
- struct txt_record *r = safe_malloc(sizeof(struct txt_record));
+ struct txt_record *r = opt_malloc(sizeof(struct txt_record));
- r->name = safe_string_alloc(name);
+ r->name = opt_string_alloc(name);
r->next = daemon->txt;
daemon->txt = r;
r->class = C_CHAOS;
- r->txt = safe_malloc(len+1);
+ r->txt = opt_malloc(len+1);
r->len = len+1;
*(r->txt) = len;
memcpy((r->txt)+1, txt, len);
@@ -531,9 +615,9 @@ static void display_opts(void)
}
/* This is too insanely large to keep in-line in the switch */
-static char *parse_dhcp_opt(char *arg, int forced)
+static char *parse_dhcp_opt(char *arg, int flags)
{
- struct dhcp_opt *new = safe_malloc(sizeof(struct dhcp_opt));
+ struct dhcp_opt *new = opt_malloc(sizeof(struct dhcp_opt));
char lenchar = 0, *cp;
int i, addrs, digs, is_addr, is_hex, is_dec, is_string, dots;
char *comma = NULL, *problem = NULL;
@@ -541,7 +625,7 @@ static char *parse_dhcp_opt(char *arg, int forced)
unsigned char opt_len = 0;
new->len = 0;
- new->flags = forced ? DHOPT_FORCE : 0;
+ new->flags = flags;
new->netid = NULL;
new->val = NULL;
new->vendor_class = NULL;
@@ -577,17 +661,17 @@ static char *parse_dhcp_opt(char *arg, int forced)
}
else if (strstr(arg, "vendor:") == arg)
{
- new->vendor_class = (unsigned char *)safe_string_alloc(arg+7);
+ new->vendor_class = (unsigned char *)opt_string_alloc(arg+7);
new->flags |= DHOPT_ENCAPSULATE;
}
else
{
- new->netid = safe_malloc(sizeof (struct dhcp_netid));
+ new->netid = opt_malloc(sizeof (struct dhcp_netid));
/* allow optional "net:" for consistency */
if (strstr(arg, "net:") == arg)
- new->netid->net = safe_string_alloc(arg+4);
+ new->netid->net = opt_string_alloc(arg+4);
else
- new->netid->net = safe_string_alloc(arg);
+ new->netid->net = opt_string_alloc(arg);
new->netid->next = np;
np = new->netid;
}
@@ -658,7 +742,7 @@ static char *parse_dhcp_opt(char *arg, int forced)
if (is_hex && digs > 1)
{
new->len = digs;
- new->val = safe_malloc(new->len);
+ new->val = opt_malloc(new->len);
parse_hex(comma, new->val, digs, NULL, NULL);
}
else if (is_dec)
@@ -683,7 +767,7 @@ static char *parse_dhcp_opt(char *arg, int forced)
else if (lenchar == 'i')
new->len = 4;
- new->val = safe_malloc(new->len);
+ new->val = opt_malloc(new->len);
for (i=0; i<new->len; i++)
new->val[i] = val>>((new->len - i - 1)*8);
}
@@ -694,7 +778,7 @@ static char *parse_dhcp_opt(char *arg, int forced)
char *slash;
/* max length of address/subnet descriptor is five bytes,
add one for the option 120 enc byte too */
- new->val = op = safe_malloc((5 * addrs) + 1);
+ new->val = op = opt_malloc((5 * addrs) + 1);
new->flags |= DHOPT_ADDR;
if (!(new->flags & DHOPT_ENCAPSULATE) && new->opt == 120)
@@ -739,7 +823,7 @@ static char *parse_dhcp_opt(char *arg, int forced)
{
/* dns search, RFC 3397, or SIP, RFC 3361 */
unsigned char *q, *r, *tail;
- unsigned char *p, *m = NULL;
+ unsigned char *p, *m = NULL, *newp;
size_t newlen, len = 0;
int header_size = (new->opt == 119) ? 0 : 1;
@@ -754,8 +838,10 @@ static char *parse_dhcp_opt(char *arg, int forced)
break;
}
- if (!(m = realloc(m, len + strlen(arg) + 2 + header_size)))
- die(_("could not get memory"), NULL, EC_NOMEM);
+ newp = opt_malloc(len + strlen(arg) + 2 + header_size);
+ if (m)
+ memcpy(newp, m, header_size + len);
+ m = newp;
p = m + header_size;
q = p + len;
@@ -799,7 +885,7 @@ static char *parse_dhcp_opt(char *arg, int forced)
{
new->len = strlen(comma);
/* keep terminating zero on string */
- new->val = (unsigned char *)safe_string_alloc(comma);
+ new->val = (unsigned char *)opt_string_alloc(comma);
new->flags |= DHOPT_STRING;
}
}
@@ -808,20 +894,23 @@ static char *parse_dhcp_opt(char *arg, int forced)
if (new->len > 255)
problem = _("dhcp-option too long");
- new->next = daemon->dhcp_opts;
- daemon->dhcp_opts = new;
-
+ if (!problem)
+ {
+ new->next = daemon->dhcp_opts;
+ daemon->dhcp_opts = new;
+ }
+
return problem;
}
-static char *one_opt(int option, char *arg, char *problem, int nest)
+static char *one_opt(int option, char *arg, char *gen_prob, int nest)
{
int i;
- char *comma;
+ char *comma, *problem = NULL;;
if (option == '?')
- return problem;
+ return gen_prob;
for (i=0; optmap[i].c; i++)
if (option == optmap[i].c)
@@ -834,7 +923,7 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
{
case 'C': /* --conf-file */
{
- char *file = safe_string_alloc(arg);
+ char *file = opt_string_alloc(arg);
if (file)
one_file(file, nest, 0);
break;
@@ -846,7 +935,7 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
struct dirent *ent;
char *directory, *path;
- if (!(directory = safe_string_alloc(arg)))
+ if (!(directory = opt_string_alloc(arg)))
break;
if (!(dir_stream = opendir(directory)))
@@ -864,7 +953,7 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
(ent->d_name[0] == '#' && ent->d_name[len - 1] == '#') ||
ent->d_name[0] == '.')
continue;
- path = safe_malloc(strlen(directory) + len + 2);
+ path = opt_malloc(strlen(directory) + len + 2);
strcpy(path, directory);
strcat(path, "/");
strcat(path, ent->d_name);
@@ -886,7 +975,7 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
case '8': /* --log-facility */
/* may be a filename */
if (strchr(arg, '/'))
- daemon->log_file = safe_string_alloc(arg);
+ daemon->log_file = opt_string_alloc(arg);
else
{
for (i = 0; facilitynames[i].c_name; i++)
@@ -896,29 +985,31 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
if (facilitynames[i].c_name)
daemon->log_fac = facilitynames[i].c_val;
else
- {
- option = '?';
- problem = "bad log facility";
- }
+ problem = "bad log facility";
}
break;
case 'x': /* --pid-file */
- daemon->runfile = safe_string_alloc(arg);
+ daemon->runfile = opt_string_alloc(arg);
break;
case LOPT_DHCP_HOST: /* --dhcp-hostfile */
if (daemon->dhcp_hosts_file)
- {
- problem = _("only one dhcp-hostsfile allowed");
- option = '?';
- }
- daemon->dhcp_hosts_file = safe_string_alloc(arg);
+ problem = _("only one dhcp-hostsfile allowed");
+ else
+ daemon->dhcp_hosts_file = opt_string_alloc(arg);
break;
+
+ case LOPT_DHCP_OPTS: /* --dhcp-optsfile */
+ if (daemon->dhcp_opts_file)
+ problem = _("only one dhcp-optsfile allowed");
+ else
+ daemon->dhcp_opts_file = opt_string_alloc(arg);
+ break;
case 'r': /* --resolv-file */
{
- char *name = safe_string_alloc(arg);
+ char *name = opt_string_alloc(arg);
struct resolvc *new, *list = daemon->resolv_files;
if (list && list->is_default)
@@ -934,7 +1025,7 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
}
else if (name)
{
- new = safe_malloc(sizeof(struct resolvc));
+ new = opt_malloc(sizeof(struct resolvc));
new->next = list;
new->name = name;
new->is_default = 0;
@@ -954,62 +1045,47 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
if ((comma = split(arg)))
{
char *prefstr;
- if ((prefstr=split(comma)))
- {
- if (!atoi_check(prefstr, &pref))
- {
- option = '?';
- problem = _("bad MX preference");
- break;
- }
- }
+ if ((prefstr=split(comma)) && !atoi_check(prefstr, &pref))
+ problem = _("bad MX preference");
}
if (!canonicalise_opt(arg) || (comma && !canonicalise_opt(comma)))
- {
- option = '?';
- problem = _("bad MX name");
- break;
- }
-
- new = safe_malloc(sizeof(struct mx_srv_record));
+ problem = _("bad MX name");
+
+ new = opt_malloc(sizeof(struct mx_srv_record));
new->next = daemon->mxnames;
daemon->mxnames = new;
new->issrv = 0;
- new->name = safe_string_alloc(arg);
- new->target = safe_string_alloc(comma); /* may be NULL */
+ new->name = opt_string_alloc(arg);
+ new->target = opt_string_alloc(comma); /* may be NULL */
new->weight = pref;
break;
}
case 't': /* --mx-target */
if (!canonicalise_opt(arg))
- {
- option = '?';
- problem = _("bad MX target");
- }
+ problem = _("bad MX target");
else
- daemon->mxtarget = safe_string_alloc(arg);
+ daemon->mxtarget = opt_string_alloc(arg);
break;
case 'l': /* --dhcp-leasefile */
- daemon->lease_file = safe_string_alloc(arg);
+ daemon->lease_file = opt_string_alloc(arg);
break;
case '6': /* --dhcp-script */
#ifdef NO_FORK
problem = _("cannot run scripts under uClinux");
- option = '?';
#else
- daemon->lease_change_command = safe_string_alloc(arg);
+ daemon->lease_change_command = opt_string_alloc(arg);
#endif
break;
case 'H': /* --addn-hosts */
{
- struct hostsfile *new = safe_malloc(sizeof(struct hostsfile));
+ struct hostsfile *new = opt_malloc(sizeof(struct hostsfile));
static int hosts_index = 1;
- new->fname = safe_string_alloc(arg);
+ new->fname = opt_string_alloc(arg);
new->index = hosts_index++;
new->next = daemon->addn_hosts;
daemon->addn_hosts = new;
@@ -1022,26 +1098,26 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
else if (!canonicalise_opt(arg))
option = '?';
else
- daemon->domain_suffix = safe_string_alloc(arg);
+ daemon->domain_suffix = opt_string_alloc(arg);
break;
case 'u': /* --user */
- daemon->username = safe_string_alloc(arg);
+ daemon->username = opt_string_alloc(arg);
break;
case 'g': /* --group */
- daemon->groupname = safe_string_alloc(arg);
+ daemon->groupname = opt_string_alloc(arg);
break;
case 'i': /* --interface */
do {
- struct iname *new = safe_malloc(sizeof(struct iname));
+ struct iname *new = opt_malloc(sizeof(struct iname));
comma = split(arg);
new->next = daemon->if_names;
daemon->if_names = new;
/* new->name may be NULL if someone does
"interface=" to disable all interfaces except loop. */
- new->name = safe_string_alloc(arg);
+ new->name = opt_string_alloc(arg);
new->isloop = new->used = 0;
arg = comma;
} while (arg);
@@ -1050,9 +1126,9 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
case 'I': /* --except-interface */
case '2': /* --no-dhcp-interface */
do {
- struct iname *new = safe_malloc(sizeof(struct iname));
+ struct iname *new = opt_malloc(sizeof(struct iname));
comma = split(arg);
- new->name = safe_string_alloc(arg);
+ new->name = opt_string_alloc(arg);
if (option == 'I')
{
new->next = daemon->if_except;
@@ -1073,7 +1149,7 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
unhide_metas(arg);
if (arg && (addr.s_addr = inet_addr(arg)) != (in_addr_t)-1)
{
- struct bogus_addr *baddr = safe_malloc(sizeof(struct bogus_addr));
+ struct bogus_addr *baddr = opt_malloc(sizeof(struct bogus_addr));
baddr->next = daemon->bogus_addr;
daemon->bogus_addr = baddr;
baddr->addr = addr;
@@ -1085,7 +1161,7 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
case 'a': /* --listen-address */
do {
- struct iname *new = safe_malloc(sizeof(struct iname));
+ struct iname *new = opt_malloc(sizeof(struct iname));
comma = split(arg);
unhide_metas(arg);
new->next = daemon->if_addrs;
@@ -1139,15 +1215,13 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
else if (!canonicalise_opt(arg) && strlen(arg) != 0)
option = '?';
else
- domain = safe_string_alloc(arg); /* NULL if strlen is zero */
- serv = safe_malloc(sizeof(struct server));
+ domain = opt_string_alloc(arg); /* NULL if strlen is zero */
+ serv = opt_malloc(sizeof(struct server));
+ memset(serv, 0, sizeof(struct server));
serv->next = newlist;
newlist = serv;
- serv->sfd = NULL;
serv->domain = domain;
serv->flags = domain ? SERV_HAS_DOMAIN : SERV_FOR_NODOTS;
- memset(&serv->addr, 0, sizeof(serv->addr));
- memset(&serv->source_addr, 0, sizeof(serv->source_addr));
arg = end+1;
}
if (!newlist)
@@ -1159,11 +1233,8 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
}
else
{
- newlist = safe_malloc(sizeof(struct server));
- newlist->next = NULL;
- newlist->flags = 0;
- newlist->sfd = NULL;
- newlist->domain = NULL;
+ newlist = opt_malloc(sizeof(struct server));
+ memset(newlist, 0, sizeof(struct server));
}
if (option == 'A')
@@ -1191,10 +1262,7 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
{
*portno = 0;
if (!atoi_check(portno+1, &source_port))
- {
- option = '?';
- problem = _("bad port");
- }
+ problem = _("bad port");
}
}
@@ -1202,10 +1270,7 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
{
*portno = 0;
if (!atoi_check(portno+1, &serv_port))
- {
- option = '?';
- problem = _("bad port");
- }
+ problem = _("bad port");
}
if ((newlist->addr.in.sin_addr.s_addr = inet_addr(arg)) != (in_addr_t) -1)
@@ -1218,10 +1283,16 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
#endif
if (source)
{
- if ((newlist->source_addr.in.sin_addr.s_addr = inet_addr(source+1)) != (in_addr_t) -1)
- newlist->flags |= SERV_HAS_SOURCE;
- else
- option = '?'; /* error */
+ newlist->flags |= SERV_HAS_SOURCE;
+ if ((newlist->source_addr.in.sin_addr.s_addr = inet_addr(source+1)) == (in_addr_t) -1)
+ {
+#if defined(SO_BINDTODEVICE)
+ newlist->source_addr.in.sin_addr.s_addr = INADDR_ANY;
+ strncpy(newlist->interface, source+1, IF_NAMESIZE);
+#else
+ problem = _("interface binding not supported");
+#endif
+ }
}
else
newlist->source_addr.in.sin_addr.s_addr = INADDR_ANY;
@@ -1237,10 +1308,16 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
#endif
if (source)
{
- if (inet_pton(AF_INET6, source+1, &newlist->source_addr.in6.sin6_addr) > 0)
- newlist->flags |= SERV_HAS_SOURCE;
- else
- option = '?'; /* error */
+ newlist->flags |= SERV_HAS_SOURCE;
+ if (inet_pton(AF_INET6, source+1, &newlist->source_addr.in6.sin6_addr) == 0)
+ {
+#if defined(SO_BINDTODEVICE) || defined(HAVE_SOLARIS_NETWORK)
+ newlist->source_addr.in6.sin6_addr = in6addr_any;
+ strncpy(newlist->interface, source+1, IF_NAMESIZE);
+#else
+ problem = _("interface binding not supported");
+#endif
+ }
}
else
newlist->source_addr.in6.sin6_addr = in6addr_any;
@@ -1316,11 +1393,14 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
option = '?';
break;
- case 'T': /* --local-ttl */
+ case 'T': /* --local-ttl */
+ case LOPT_NEGTTL: /* --neg-ttl */
{
int ttl;
if (!atoi_check(arg, &ttl))
option = '?';
+ else if (option == LOPT_NEGTTL)
+ daemon->neg_ttl = (unsigned long)ttl;
else
daemon->local_ttl = (unsigned long)ttl;
break;
@@ -1336,18 +1416,32 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
option = '?';
break;
- case LOPT_PREFIX: /* --tftp-prefix */
- daemon->tftp_prefix = safe_string_alloc(arg);
+ case LOPT_PREFIX: /* --tftp-prefix */
+ daemon->tftp_prefix = opt_string_alloc(arg);
break;
+ case LOPT_TFTPPORTS: /* --tftp-port-range */
+ if (!(comma = split(arg)) ||
+ !atoi_check(arg, &daemon->start_tftp_port) ||
+ !atoi_check(comma, &daemon->end_tftp_port))
+ problem = _("bad port range");
+
+ if (daemon->start_tftp_port > daemon->end_tftp_port)
+ {
+ int tmp = daemon->start_tftp_port;
+ daemon->start_tftp_port = daemon->end_tftp_port;
+ daemon->end_tftp_port = tmp;
+ }
+
+ break;
+
#if defined(__FreeBSD__) || defined(__DragonFly__)
case LOPT_BRIDGE: /* --bridge-interface */
{
- struct dhcp_bridge *new = safe_malloc(sizeof(struct dhcp_bridge));
+ struct dhcp_bridge *new = opt_malloc(sizeof(struct dhcp_bridge));
if (!(comma = split(arg)))
{
problem = _("bad bridge-interface");
- option = '?';
break;
}
@@ -1361,7 +1455,7 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
comma = split(arg);
if (strlen(arg) != 0)
{
- struct dhcp_bridge *b = safe_malloc(sizeof(struct dhcp_bridge));
+ struct dhcp_bridge *b = opt_malloc(sizeof(struct dhcp_bridge));
b->next = new->alias;
new->alias = b;
strncpy(b->iface, arg, IF_NAMESIZE);
@@ -1376,7 +1470,7 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
{
int k, leasepos = 2;
char *cp, *a[5] = { NULL, NULL, NULL, NULL, NULL };
- struct dhcp_context *new = safe_malloc(sizeof(struct dhcp_context));
+ struct dhcp_context *new = opt_malloc(sizeof(struct dhcp_context));
new->next = daemon->dhcp;
new->lease_time = DEFLEASE;
@@ -1388,7 +1482,7 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
new->filter = NULL;
new->flags = 0;
- problem = _("bad dhcp-range");
+ gen_prob = _("bad dhcp-range");
if (!arg)
{
@@ -1406,20 +1500,17 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
{
if (strstr(arg, "net:") == arg)
{
- struct dhcp_netid *tt = safe_malloc(sizeof (struct dhcp_netid));
- tt->net = safe_string_alloc(arg+4);
+ struct dhcp_netid *tt = opt_malloc(sizeof (struct dhcp_netid));
+ tt->net = opt_string_alloc(arg+4);
tt->next = new->filter;
new->filter = tt;
}
else
{
if (new->netid.net)
- {
- option = '?';
- problem = _("only one netid tag allowed");
- }
+ problem = _("only one netid tag allowed");
else
- new->netid.net = safe_string_alloc(arg);
+ new->netid.net = opt_string_alloc(arg);
}
arg = comma;
}
@@ -1457,10 +1548,7 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
new->flags |= CONTEXT_NETMASK;
leasepos = 3;
if (!is_same_net(new->start, new->end, new->netmask))
- {
- problem = _("inconsistent DHCP range");
- option = '?';
- }
+ problem = _("inconsistent DHCP range");
}
daemon->dhcp = new;
@@ -1510,8 +1598,6 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
break;
}
- /* Note, must not die() via safe_* if option is LOPT_BANK, since
- when called with this we are re-loading the file. */
case LOPT_BANK:
case 'G': /* --dhcp-host */
{
@@ -1520,11 +1606,8 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
struct dhcp_config *new;
struct in_addr in;
- if (option != LOPT_BANK)
- new = safe_malloc(sizeof(struct dhcp_config));
- else if (!(new = whine_malloc(sizeof(struct dhcp_config))))
- break;
-
+ new = opt_malloc(sizeof(struct dhcp_config));
+
new->next = daemon->dhcp_conf;
new->flags = (option == LOPT_BANK) ? CONFIG_BANK : 0;
@@ -1556,7 +1639,7 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
len = (int) strlen(arg);
}
- if ((new->clid = (option == LOPT_BANK) ? whine_malloc(len): safe_malloc(len)))
+ if ((new->clid = opt_malloc(len)))
{
new->flags |= CONFIG_CLID;
new->clid_len = len;
@@ -1567,7 +1650,7 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
else if (strstr(arg, "net:") == arg)
{
int len = strlen(arg + 4) + 1;
- if ((new->netid.net = (option == LOPT_BANK) ? whine_malloc(len): safe_malloc(len)))
+ if ((new->netid.net = opt_malloc(len)))
{
new->flags |= CONFIG_NETID;
strcpy(new->netid.net, arg+4);
@@ -1615,7 +1698,7 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
}
for (cp = a[j]; *cp; cp++)
- if (!isdigit(*cp) && *cp != ' ')
+ if (!isdigit((int)*cp) && *cp != ' ')
break;
if (*cp)
@@ -1633,11 +1716,8 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
{
int len = strlen(a[j]) + 1;
if (!canonicalise_opt(a[j]))
- {
- problem = _("bad DHCP host name");
- option = '?';
- }
- else if ((new->hostname = (option == LOPT_BANK) ? whine_malloc(len): safe_malloc(len)))
+ problem = _("bad DHCP host name");
+ else if ((new->hostname = opt_malloc(len)))
{
new->flags |= CONFIG_NAME;
strcpy(new->hostname, a[j]);
@@ -1661,8 +1741,10 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
case 'O':
case LOPT_FORCE:
- if ((problem = parse_dhcp_opt(arg, option == LOPT_FORCE)))
- option = '?';
+ case LOPT_OPTS:
+ problem = parse_dhcp_opt(arg,
+ option == LOPT_FORCE ? DHOPT_FORCE :
+ (option == LOPT_OPTS ? DHOPT_BANK : 0));
break;
case 'M': /* --dhcp-boot */
@@ -1670,11 +1752,11 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
struct dhcp_netid *id = NULL;
while (arg && strstr(arg, "net:") == arg)
{
- struct dhcp_netid *newid = safe_malloc(sizeof(struct dhcp_netid));
+ struct dhcp_netid *newid = opt_malloc(sizeof(struct dhcp_netid));
newid->next = id;
id = newid;
comma = split(arg);
- newid->net = safe_string_alloc(arg+4);
+ newid->net = opt_string_alloc(arg+4);
arg = comma;
};
@@ -1685,13 +1767,13 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
char *dhcp_file, *dhcp_sname = NULL;
struct in_addr dhcp_next_server;
comma = split(arg);
- dhcp_file = safe_string_alloc(arg);
+ dhcp_file = opt_string_alloc(arg);
dhcp_next_server.s_addr = 0;
if (comma)
{
arg = comma;
comma = split(arg);
- dhcp_sname = safe_string_alloc(arg);
+ dhcp_sname = opt_string_alloc(arg);
if (comma)
{
unhide_metas(comma);
@@ -1701,7 +1783,7 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
}
if (option != '?')
{
- struct dhcp_boot *new = safe_malloc(sizeof(struct dhcp_boot));
+ struct dhcp_boot *new = opt_malloc(sizeof(struct dhcp_boot));
new->file = dhcp_file;
new->sname = dhcp_sname;
new->next_server = dhcp_next_server;
@@ -1720,8 +1802,8 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
option = '?';
else
{
- struct dhcp_mac *new = safe_malloc(sizeof(struct dhcp_mac));
- new->netid.net = safe_string_alloc(arg);
+ struct dhcp_mac *new = opt_malloc(sizeof(struct dhcp_mac));
+ new->netid.net = opt_string_alloc(arg);
unhide_metas(comma);
new->hwaddr_len = parse_hex(comma, new->hwaddr, DHCP_CHADDR_MAX, &new->mask, &new->hwaddr_type);
new->next = daemon->dhcp_macs;
@@ -1735,6 +1817,7 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
case LOPT_CIRCUIT: /* --dhcp-circuitid */
case LOPT_REMOTE: /* --dhcp-remoteid */
case LOPT_SUBSCR: /* --dhcp-subscrid */
+ case LOPT_MATCH: /* --dhcp-match */
{
if (!(comma = split(arg)))
option = '?';
@@ -1742,22 +1825,31 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
{
char *p;
int dig = 0;
- struct dhcp_vendor *new = safe_malloc(sizeof(struct dhcp_vendor));
- new->netid.net = safe_string_alloc(arg);
+ struct dhcp_vendor *new = opt_malloc(sizeof(struct dhcp_vendor));
+ new->netid.net = opt_string_alloc(arg);
/* check for hex string - must digits may include : must not have nothing else,
only allowed for agent-options. */
for (p = comma; *p; p++)
- if (isxdigit(*p))
+ if (isxdigit((int)*p))
dig = 1;
else if (*p != ':')
break;
unhide_metas(comma);
- if (option == 'U' || option == 'j' || *p || !dig)
- new->len = strlen(comma);
+ if (option == LOPT_MATCH)
+ new->option = atoi(comma);
+ else if (option == 'U' || option == 'j' || *p || !dig)
+ {
+ new->len = strlen(comma);
+ new->data = opt_malloc(new->len);
+ memcpy(new->data, comma, new->len);
+ }
else
- new->len = parse_hex(comma, (unsigned char *)comma, strlen(comma), NULL, NULL);
- new->data = safe_malloc(new->len);
- memcpy(new->data, comma, new->len);
+ {
+ new->len = parse_hex(comma, (unsigned char *)comma, strlen(comma), NULL, NULL);
+ new->data = opt_malloc(new->len);
+ memcpy(new->data, comma, new->len);
+ }
+
switch (option)
{
case 'j':
@@ -1775,6 +1867,8 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
case LOPT_SUBSCR:
new->match_type = MATCH_SUBSCRIBER;
break;
+ case LOPT_MATCH:
+ new->match_type = MATCH_OPTION;
}
new->next = daemon->dhcp_vendors;
daemon->dhcp_vendors = new;
@@ -1782,16 +1876,22 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
break;
}
- case 'J': /* --dhcp-ignore */
- case LOPT_NO_NAMES: /* --dhcp-ignore-names */
+ case 'J': /* --dhcp-ignore */
+ case LOPT_NO_NAMES: /* --dhcp-ignore-names */
+ case LOPT_BROADCAST: /* --dhcp-broadcast */
{
- struct dhcp_netid_list *new = safe_malloc(sizeof(struct dhcp_netid_list));
+ struct dhcp_netid_list *new = opt_malloc(sizeof(struct dhcp_netid_list));
struct dhcp_netid *list = NULL;
if (option == 'J')
{
new->next = daemon->dhcp_ignore;
daemon->dhcp_ignore = new;
}
+ else if (option == LOPT_BROADCAST)
+ {
+ new->next = daemon->force_broadcast;
+ daemon->force_broadcast = new;
+ }
else
{
new->next = daemon->dhcp_ignore_names;
@@ -1799,11 +1899,11 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
}
while (arg) {
- struct dhcp_netid *member = safe_malloc(sizeof(struct dhcp_netid));
+ struct dhcp_netid *member = opt_malloc(sizeof(struct dhcp_netid));
comma = split(arg);
member->next = list;
list = member;
- member->net = safe_string_alloc(arg);
+ member->net = opt_string_alloc(arg);
arg = comma;
}
@@ -1839,7 +1939,7 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
if (k == 3)
mask.s_addr = inet_addr(a[2]);
- new = safe_malloc(sizeof(struct doctor));
+ new = opt_malloc(sizeof(struct doctor));
new->in = in;
new->out = out;
new->mask = mask;
@@ -1856,20 +1956,16 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
comma = split(arg);
if (!comma || !canonicalise_opt(arg))
- {
- option = '?';
- problem = _("bad interface name");
- break;
- }
-
- new = safe_malloc(sizeof(struct interface_name));
+ problem = _("bad interface name");
+
+ new = opt_malloc(sizeof(struct interface_name));
new->next = NULL;
/* Add to the end of the list, so that first name
of an interface is used for PTR lookups. */
- for(up = &daemon->int_names; *up; up = &((*up)->next));
+ for (up = &daemon->int_names; *up; up = &((*up)->next));
*up = new;
- new->name = safe_string_alloc(arg);
- new->intr = safe_string_alloc(comma);
+ new->name = opt_string_alloc(arg);
+ new->intr = opt_string_alloc(comma);
break;
}
@@ -1880,19 +1976,15 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
comma = split(arg);
if (!canonicalise_opt(arg))
- {
- option = '?';
- problem = _("bad PTR record");
- break;
- }
-
- new = safe_malloc(sizeof(struct ptr_record));
+ problem = _("bad PTR record");
+
+ new = opt_malloc(sizeof(struct ptr_record));
new->next = daemon->ptr;
daemon->ptr = new;
- new->name = safe_string_alloc(arg);
+ new->name = opt_string_alloc(arg);
new->ptr = NULL;
if (comma)
- new->ptr = safe_string_alloc(comma);
+ new->ptr = opt_string_alloc(comma);
break;
}
@@ -1901,15 +1993,17 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
struct txt_record *new;
unsigned char *p, *q;
- comma = split(arg) - 1;
+ if ((comma = split(arg)))
+ comma--;
+
+ gen_prob = _("TXT record string too long");
if (!canonicalise_opt(arg))
{
- option = '?';
problem = _("bad TXT record");
break;
}
-
+
if ((q = (unsigned char *)comma))
while (1)
{
@@ -1917,10 +2011,7 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
if ((p = (unsigned char *)strchr((char*)q+1, ',')))
{
if ((len = p - q - 1) > 255)
- {
- option = '?';
- break;
- }
+ option = '?';
*q = len;
for (q = q+1; q < p; q++)
*q = unhide_meta(*q);
@@ -1936,20 +2027,14 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
}
}
- if (option == '?')
- {
- problem = _("TXT record string too long");
- break;
- }
-
- new = safe_malloc(sizeof(struct txt_record));
+ new = opt_malloc(sizeof(struct txt_record));
new->next = daemon->txt;
daemon->txt = new;
new->class = C_IN;
if (comma)
{
new->len = q - ((unsigned char *)comma);
- new->txt = safe_malloc(new->len);
+ new->txt = opt_malloc(new->len);
memcpy(new->txt, comma, new->len);
}
else
@@ -1962,7 +2047,7 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
/* ensure arg is terminated */
if (comma)
*comma = 0;
- new->name = safe_string_alloc(arg);
+ new->name = opt_string_alloc(arg);
break;
}
@@ -1975,60 +2060,44 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
comma = split(arg);
if (!canonicalise_opt(arg))
- {
- option = '?';
- problem = _("bad SRV record");
- break;
- }
- name = safe_string_alloc(arg);
+ problem = _("bad SRV record");
+
+ name = opt_string_alloc(arg);
if (comma)
{
arg = comma;
comma = split(arg);
if (!canonicalise_opt(arg))
- {
- option = '?';
- problem = _("bad SRV target");
- break;
- }
- target = safe_string_alloc(arg);
+ problem = _("bad SRV target");
+
+ target = opt_string_alloc(arg);
if (comma)
{
arg = comma;
comma = split(arg);
if (!atoi_check(arg, &port))
- {
- option = '?';
- problem = _("invalid port number");
- break;
- }
+ problem = _("invalid port number");
+
if (comma)
{
arg = comma;
comma = split(arg);
if (!atoi_check(arg, &priority))
- {
- option = '?';
- problem = _("invalid priority");
- break;
- }
+ problem = _("invalid priority");
+
if (comma)
{
arg = comma;
comma = split(arg);
if (!atoi_check(arg, &weight))
- {
- option = '?';
- problem = _("invalid weight");
- break;
- }
+ problem = _("invalid weight");
}
}
}
}
- new = safe_malloc(sizeof(struct mx_srv_record));
+ new = opt_malloc(sizeof(struct mx_srv_record));
new->next = daemon->mxnames;
daemon->mxnames = new;
new->issrv = 1;
@@ -2041,12 +2110,19 @@ static char *one_opt(int option, char *arg, char *problem, int nest)
}
}
- return option == '?' ? problem : NULL;
+ if (problem)
+ return problem;
+
+ if (option == '?')
+ return gen_prob;
+
+ return NULL;
}
-void one_file(char *file, int nest, int hosts)
+static void one_file(char *file, int nest, int hard_opt)
{
- int i, option, lineno = 0;
+ volatile int lineno = 0;
+ int i, option;
FILE *f;
char *p, *arg, *start, *buff = daemon->namebuff;
@@ -2060,7 +2136,7 @@ void one_file(char *file, int nest, int hosts)
else
{
char *str = _("cannot read %s: %s");
- if (hosts)
+ if (hard_opt != 0)
{
my_syslog(LOG_ERR, str, file, strerror(errno));
return;
@@ -2074,10 +2150,19 @@ void one_file(char *file, int nest, int hosts)
{
int white;
unsigned int lastquote;
- char *errmess = NULL;
+ char *errmess;
+ /* Memory allocation failure longjmps here if mem_recover == 1 */
+ if (hard_opt)
+ {
+ if (setjmp(mem_jmp))
+ continue;
+ mem_recover = 1;
+ }
+
lineno++;
-
+ errmess = NULL;
+
/* Implement quotes, inside quotes we allow \\ \" \n and \t
metacharacters get hidden also strip comments */
@@ -2121,34 +2206,34 @@ void one_file(char *file, int nest, int hosts)
*p = 0;
break;
}
- white = isspace(unhide_meta(*p));
+ white = isspace((int)unhide_meta(*p));
}
/* fgets gets end of line char too. */
- while (strlen(buff) > lastquote && isspace(unhide_meta(buff[strlen(buff)-1])))
+ while (strlen(buff) > lastquote && isspace((int)unhide_meta(buff[strlen(buff)-1])))
buff[strlen(buff)-1] = 0;
if (*buff == 0)
continue;
- if (hosts)
+ if (hard_opt != 0)
arg = buff;
else if ((p=strchr(buff, '=')))
{
/* allow spaces around "=" */
arg = p+1;
- for (; p >= buff && (isspace(*p) || *p == '='); p--)
+ for (; p >= buff && (isspace((int)*p) || *p == '='); p--)
*p = 0;
}
else
arg = NULL;
- if (hosts)
- option = LOPT_BANK;
+ if (hard_opt != 0)
+ option = hard_opt;
else
{
/* skip leading space */
- for (start = buff; *start && isspace(*start); start++);
+ for (start = buff; *start && isspace((int)*start); start++);
for (option = 0, i = 0; opts[i].name; i++)
if (strcmp(opts[i].name, start) == 0)
@@ -2164,11 +2249,11 @@ void one_file(char *file, int nest, int hosts)
else if (opts[i].has_arg == 1 && !arg)
errmess = _("missing parameter");
}
-
+
if (!errmess)
{
if (arg)
- for (; isspace(*arg); arg++);
+ for (; isspace((int)*arg); arg++);
errmess = one_opt(option, arg, _("error"), nest + 1);
}
@@ -2177,25 +2262,88 @@ void one_file(char *file, int nest, int hosts)
{
oops:
sprintf(buff, _("%s at line %d of %%s"), errmess, lineno);
- if (hosts)
+ if (hard_opt != 0)
my_syslog(LOG_ERR, buff, file);
else
die(buff, file, EC_BADCONF);
}
}
+ mem_recover = 1;
fclose(f);
}
+void reread_dhcp(void)
+{
+ if (daemon->dhcp_hosts_file)
+ {
+ struct dhcp_config *configs, *cp, **up;
+
+ /* remove existing... */
+ for (up = &daemon->dhcp_conf, configs = daemon->dhcp_conf; configs; configs = cp)
+ {
+ cp = configs->next;
+
+ if (configs->flags & CONFIG_BANK)
+ {
+ if (configs->flags & CONFIG_CLID)
+ free(configs->clid);
+ if (configs->flags & CONFIG_NETID)
+ free(configs->netid.net);
+ if (configs->flags & CONFIG_NAME)
+ free(configs->hostname);
+
+ *up = configs->next;
+ free(configs);
+ }
+ else
+ up = &configs->next;
+ }
+
+ one_file(daemon->dhcp_hosts_file, 1, LOPT_BANK);
+ my_syslog(LOG_INFO, _("read %s"), daemon->dhcp_hosts_file);
+ }
+
+ if (daemon->dhcp_opts_file)
+ {
+ struct dhcp_opt *opts, *cp, **up;
+ struct dhcp_netid *id, *next;
+
+ for (up = &daemon->dhcp_opts, opts = daemon->dhcp_opts; opts; opts = cp)
+ {
+ cp = opts->next;
+
+ if (opts->flags & DHOPT_BANK)
+ {
+ free(opts->vendor_class);
+ free(opts->val);
+ for (id = opts->netid; id; id = next)
+ {
+ next = id->next;
+ free(id->net);
+ free(id);
+ }
+ *up = opts->next;
+ free(opts);
+ }
+ else
+ up = &opts->next;
+ }
+
+ one_file(daemon->dhcp_opts_file, 1, LOPT_OPTS);
+ my_syslog(LOG_INFO, _("read %s"), daemon->dhcp_opts_file);
+ }
+}
+
void read_opts(int argc, char **argv, char *compile_opts)
{
- char *buff = safe_malloc(MAXDNAME);
+ char *buff = opt_malloc(MAXDNAME);
int option, nest = 0;
char *errmess, *arg, *conffile = CONFFILE;
opterr = 0;
- daemon = safe_malloc(sizeof(struct daemon));
+ daemon = opt_malloc(sizeof(struct daemon));
memset(daemon, 0, sizeof(struct daemon));
daemon->namebuff = buff;
@@ -2253,12 +2401,12 @@ void read_opts(int argc, char **argv, char *compile_opts)
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(_("under the terms of the GNU General Public License, version 2 or 3.\n"));
exit(0);
}
else if (option == 'C')
{
- conffile = safe_string_alloc(arg);
+ conffile = opt_string_alloc(arg);
nest++;
}
else
@@ -2318,16 +2466,16 @@ void read_opts(int argc, char **argv, char *compile_opts)
if ((daemon->mxtarget || (daemon->options & OPT_LOCALMX)) && !mx)
{
- mx = safe_malloc(sizeof(struct mx_srv_record));
+ mx = opt_malloc(sizeof(struct mx_srv_record));
mx->next = daemon->mxnames;
mx->issrv = 0;
mx->target = NULL;
- mx->name = safe_string_alloc(buff);
+ mx->name = opt_string_alloc(buff);
daemon->mxnames = mx;
}
if (!daemon->mxtarget)
- daemon->mxtarget = safe_string_alloc(buff);
+ daemon->mxtarget = opt_string_alloc(buff);
for (mx = daemon->mxnames; mx; mx = mx->next)
if (!mx->issrv && !mx->target)
@@ -2362,7 +2510,7 @@ void read_opts(int argc, char **argv, char *compile_opts)
if ((token = strtok(NULL, " \t\n\r")) &&
canonicalise_opt(token) &&
- (daemon->domain_suffix = safe_string_alloc(token)))
+ (daemon->domain_suffix = opt_string_alloc(token)))
break;
}
@@ -2386,7 +2534,7 @@ void read_opts(int argc, char **argv, char *compile_opts)
strcat(buff, ".");
strcat(buff, daemon->domain_suffix);
free(srv->name);
- srv->name = safe_string_alloc(buff);
+ srv->name = opt_string_alloc(buff);
}
}
}
diff --git a/src/rfc1035.c b/src/rfc1035.c
index d18d1e2..5d1039c 100644
--- a/src/rfc1035.c
+++ b/src/rfc1035.c
@@ -1,13 +1,17 @@
-/* dnsmasq is Copyright (c) 2000 - 2006 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2007 Simon Kelley
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; version 2 dated June, 1991.
-
+ the Free Software Foundation; version 2 dated June, 1991, or
+ (at your option) version 3 dated 29 June, 2007.
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "dnsmasq.h"
@@ -32,7 +36,7 @@ static int extract_name(HEADER *header, size_t plen, unsigned char **pp,
unsigned int label_type = l & 0xc0;
if (label_type == 0xc0) /* pointer */
{
- if ((size_t)(p - (unsigned char *)header + 1) >= plen)
+ if ((size_t)(p - (unsigned char *)header) >= plen)
return 0;
/* get offset */
@@ -70,7 +74,7 @@ static int extract_name(HEADER *header, size_t plen, unsigned char **pp,
/* output is \[x<hex>/siz]. which is digs+9 chars */
if (cp - (unsigned char *)name + digs + 9 >= MAXDNAME)
return 0;
- if ((size_t)(p - (unsigned char *)header + ((count-1)>>3) + 1) >= plen)
+ if ((size_t)(p - (unsigned char *)header + ((count-1)>>3)) >= plen)
return 0;
*cp++ = '\\';
@@ -94,7 +98,7 @@ static int extract_name(HEADER *header, size_t plen, unsigned char **pp,
{ /* label_type = 0 -> label. */
if (cp - (unsigned char *)name + l + 1 >= MAXDNAME)
return 0;
- if ((size_t)(p - (unsigned char *)header + 1) >= plen)
+ if ((size_t)(p - (unsigned char *)header) >= plen)
return 0;
for(j=0; j<l; j++, p++)
if (isExtract)
@@ -497,6 +501,50 @@ static int private_net(struct in_addr addr)
((ip_addr & 0xFFFF0000) == 0xA9FE0000) /* 169.254.0.0/16 (zeroconf) */ ;
}
+static unsigned char *do_doctor(unsigned char *p, int count, HEADER *header, size_t qlen)
+{
+ int i, qtype, qclass, rdlen;
+ unsigned long ttl;
+
+ for (i = count; i != 0; i--)
+ {
+ if (!(p = skip_name(p, header, qlen)))
+ return 0; /* bad packet */
+
+ GETSHORT(qtype, p);
+ GETSHORT(qclass, p);
+ GETLONG(ttl, p);
+ GETSHORT(rdlen, p);
+
+ if ((qclass == C_IN) && (qtype == T_A))
+ {
+ struct doctor *doctor;
+ struct in_addr addr;
+
+ /* alignment */
+ memcpy(&addr, p, INADDRSZ);
+
+ for (doctor = daemon->doctors; doctor; doctor = doctor->next)
+ if (is_same_net(doctor->in, addr, doctor->mask))
+ {
+ addr.s_addr &= ~doctor->mask.s_addr;
+ addr.s_addr |= (doctor->out.s_addr & doctor->mask.s_addr);
+ /* Since we munged the data, the server it came from is no longer authoritative */
+ header->aa = 0;
+ memcpy(p, &addr, INADDRSZ);
+ break;
+ }
+ }
+
+ p += rdlen;
+
+ if ((size_t)(p - (unsigned char *)header) > qlen)
+ return 0; /* bad packet */
+ }
+
+ return p;
+}
+
static int find_soa(HEADER *header, size_t qlen)
{
unsigned char *p;
@@ -506,8 +554,8 @@ static int find_soa(HEADER *header, size_t qlen)
/* first move to NS section and find TTL from any SOA section */
if (!(p = skip_questions(header, qlen)) ||
- !(p = skip_section(p, ntohs(header->ancount), header, qlen)))
- return 0; /* bad packet */
+ !(p = do_doctor(p, ntohs(header->ancount), header, qlen)))
+ return 0; /* bad packet */
for (i = ntohs(header->nscount); i != 0; i--)
{
@@ -544,52 +592,23 @@ static int find_soa(HEADER *header, size_t qlen)
return 0; /* bad packet */
}
- if (daemon->doctors)
- for (i = ntohs(header->arcount); i != 0; i--)
- {
- if (!(p = skip_name(p, header, qlen)))
- return 0; /* bad packet */
-
- GETSHORT(qtype, p);
- GETSHORT(qclass, p);
- GETLONG(ttl, p);
- GETSHORT(rdlen, p);
-
- if ((qclass == C_IN) && (qtype == T_A))
- {
- struct doctor *doctor;
- struct in_addr addr;
-
- /* alignment */
- memcpy(&addr, p, INADDRSZ);
-
- for (doctor = daemon->doctors; doctor; doctor = doctor->next)
- if (is_same_net(doctor->in, addr, doctor->mask))
- {
- addr.s_addr &= ~doctor->mask.s_addr;
- addr.s_addr |= (doctor->out.s_addr & doctor->mask.s_addr);
- /* Since we munged the data, the server it came from is no longer authoritative */
- header->aa = 0;
- memcpy(p, &addr, INADDRSZ);
- break;
- }
- }
-
- p += rdlen;
-
- if ((size_t)(p - (unsigned char *)header) > qlen)
- return 0; /* bad packet */
- }
-
- return found_soa ? minttl : 0;
+ /* rewrite addresses in additioal section too */
+ if (!do_doctor(p, ntohs(header->arcount), header, qlen))
+ return 0;
+
+ if (!found_soa)
+ minttl = daemon->neg_ttl;
+
+ return minttl;
}
/* 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, size_t qlen, char *name, time_t now)
+ expired and cleaned out that way.
+ Return 1 if we reject an address because it look like parct of dns-rebinding attack. */
+int extract_addresses(HEADER *header, size_t qlen, char *name, time_t now)
{
- unsigned char *p, *p1, *endrr;
+ unsigned char *p, *p1, *endrr, *namep;
int i, j, qtype, qclass, aqtype, aqclass, ardlen, res, searched_soa = 0;
unsigned long ttl = 0;
struct all_addr addr;
@@ -613,8 +632,9 @@ void extract_addresses(HEADER *header, size_t qlen, char *name, time_t now)
int flags = header->rcode == NXDOMAIN ? F_NXDOMAIN : 0;
unsigned long cttl = ULONG_MAX, attl;
+ namep = p;
if (!extract_name(header, qlen, &p, name, 1))
- return; /* bad packet */
+ return 0; /* bad packet */
GETSHORT(qtype, p);
GETSHORT(qclass, p);
@@ -635,12 +655,15 @@ void extract_addresses(HEADER *header, size_t qlen, char *name, time_t now)
{
cname_loop:
if (!(p1 = skip_questions(header, qlen)))
- return;
+ return 0;
for (j = ntohs(header->ancount); j != 0; j--)
{
- if (!(res = extract_name(header, qlen, &p1, name, 0)))
- return; /* bad packet */
+ unsigned char *tmp = namep;
+ /* the loop body overwrites the original name, so get it back here. */
+ if (!extract_name(header, qlen, &tmp, name, 1) ||
+ !(res = extract_name(header, qlen, &p1, name, 0)))
+ return 0; /* bad packet */
GETSHORT(aqtype, p1);
GETSHORT(aqclass, p1);
@@ -655,12 +678,12 @@ void extract_addresses(HEADER *header, size_t qlen, char *name, time_t now)
if (aqclass == C_IN && res != 2 && (aqtype == T_CNAME || aqtype == T_PTR))
{
if (!extract_name(header, qlen, &p1, name, 1))
- return;
+ return 0;
if (aqtype == T_CNAME)
{
if (!cname_count--)
- return; /* looped CNAMES */
+ return 0; /* looped CNAMES */
goto cname_loop;
}
@@ -670,7 +693,7 @@ void extract_addresses(HEADER *header, size_t qlen, char *name, time_t now)
p1 = endrr;
if ((size_t)(p1 - (unsigned char *)header) > qlen)
- return; /* bad packet */
+ return 0; /* bad packet */
}
}
@@ -710,12 +733,12 @@ void extract_addresses(HEADER *header, size_t qlen, char *name, time_t now)
{
cname_loop1:
if (!(p1 = skip_questions(header, qlen)))
- return;
+ return 0;
for (j = ntohs(header->ancount); j != 0; j--)
{
if (!(res = extract_name(header, qlen, &p1, name, 0)))
- return; /* bad packet */
+ return 0; /* bad packet */
GETSHORT(aqtype, p1);
GETSHORT(aqclass, p1);
@@ -728,7 +751,7 @@ void extract_addresses(HEADER *header, size_t qlen, char *name, time_t now)
if (aqtype == T_CNAME)
{
if (!cname_count--)
- return; /* looped CNAMES */
+ return 0; /* looped CNAMES */
newc = cache_insert(name, NULL, now, attl, F_CNAME | F_FORWARD);
if (newc && cpp)
{
@@ -741,7 +764,7 @@ void extract_addresses(HEADER *header, size_t qlen, char *name, time_t now)
cttl = attl;
if (!extract_name(header, qlen, &p1, name, 1))
- return;
+ return 0;
goto cname_loop1;
}
else
@@ -749,6 +772,13 @@ void extract_addresses(HEADER *header, size_t qlen, char *name, time_t now)
found = 1;
/* copy address into aligned storage */
memcpy(&addr, p1, addrlen);
+
+ /* check for returned address in private space */
+ if ((daemon->options & OPT_NO_REBIND) &&
+ (flags & F_IPV4) &&
+ private_net(addr.addr.addr4))
+ return 1;
+
newc = cache_insert(name, &addr, now, attl, flags | F_FORWARD);
if (newc && cpp)
{
@@ -761,7 +791,7 @@ void extract_addresses(HEADER *header, size_t qlen, char *name, time_t now)
p1 = endrr;
if ((size_t)(p1 - (unsigned char *)header) > qlen)
- return; /* bad packet */
+ return 0; /* bad packet */
}
}
@@ -773,7 +803,7 @@ void extract_addresses(HEADER *header, size_t qlen, char *name, time_t now)
ttl = find_soa(header, qlen);
}
/* If there's no SOA to get the TTL from, but there is a CNAME
- pointing at this, inherit it's TTL */
+ pointing at this, inherit its TTL */
if (ttl || cpp)
{
newc = cache_insert(name, NULL, now, ttl ? ttl : cttl, F_FORWARD | F_NEG | flags);
@@ -787,7 +817,11 @@ void extract_addresses(HEADER *header, size_t qlen, char *name, time_t now)
}
}
- cache_end_insert();
+ /* Don't put stuff from a truncated packet into the cache, but do everything else */
+ if (!header->tc)
+ cache_end_insert();
+
+ return 0;
}
/* If the packet holds exactly one query
@@ -844,7 +878,7 @@ size_t setup_reply(HEADER *header, size_t qlen,
header->ancount = htons(0); /* no answers unless changed below */
if (flags == F_NEG)
header->rcode = SERVFAIL; /* couldn't get memory */
- else if (flags == F_NOERR || flags == F_QUERY)
+ else if (flags == F_NOERR)
header->rcode = NOERROR; /* empty domain */
else if (flags == F_NXDOMAIN)
header->rcode = NXDOMAIN;
diff --git a/src/rfc2131.c b/src/rfc2131.c
index 6b9d994..9ac595e 100644
--- a/src/rfc2131.c
+++ b/src/rfc2131.c
@@ -2,12 +2,16 @@
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; version 2 dated June, 1991.
-
+ the Free Software Foundation; version 2 dated June, 1991, or
+ (at your option) version 3 dated 29 June, 2007.
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "dnsmasq.h"
@@ -67,8 +71,7 @@
#define option_ptr(opt) ((void *)&(((unsigned char *)(opt))[2]))
static int sanitise(unsigned char *opt, char *buf);
-static unsigned int calc_time(struct dhcp_context *context, struct dhcp_config *config,
- struct dhcp_lease *lease, unsigned char *opt, time_t now);
+static unsigned int calc_time(struct dhcp_context *context, struct dhcp_config *config, unsigned char *opt);
static void option_put(struct dhcp_packet *mess, unsigned char *end, int opt, int len, unsigned int val);
static void option_put_string(struct dhcp_packet *mess, unsigned char *end,
int opt, char *string, int null_term);
@@ -95,7 +98,7 @@ static unsigned char *extended_hwaddr(int hwtype, int hwlen, unsigned char *hwad
static void match_vendor_opts(unsigned char *opt, struct dhcp_opt *dopt);
-size_t dhcp_reply(struct dhcp_context *context, char *iface_name,
+size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
size_t sz, time_t now, int unicast_dest, int *is_inform)
{
unsigned char *opt, *clid = NULL;
@@ -104,7 +107,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name,
struct dhcp_mac *mac;
struct dhcp_netid_list *id_list;
int clid_len = 0, ignore = 0, do_classes = 0, selecting = 0;
- struct dhcp_packet *mess = daemon->dhcp_packet.iov_base;
+ struct dhcp_packet *mess = (struct dhcp_packet *)daemon->dhcp_packet.iov_base;
unsigned char *end = (unsigned char *)(mess + 1);
char *hostname = NULL, *offer_hostname = NULL, *client_hostname = NULL;
int hostname_auth = 0, borken_opt = 0;
@@ -153,7 +156,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name,
if (expand_buf(&daemon->dhcp_packet, size))
{
- mess = daemon->dhcp_packet.iov_base;
+ mess = (struct dhcp_packet *)daemon->dhcp_packet.iov_base;
end = ((unsigned char *)mess) + size;
}
}
@@ -394,7 +397,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name,
else
{
if (!(lease = lease_find_by_client(mess->chaddr, mess->hlen, mess->htype, NULL, 0)) ||
- !address_available(context, lease->addr))
+ !address_available(context, lease->addr, netid))
{
if (lease)
{
@@ -412,12 +415,9 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name,
if (!message &&
!lease &&
(!(lease = lease_allocate(mess->yiaddr))))
- {
- my_syslog(LOG_WARNING, _("Limit of %d leases exceeded."), daemon->dhcp_max);
- message = _("no leases left");
- }
-
- if (!message && !(context = narrow_context(context, mess->yiaddr)))
+ message = _("no leases left");
+
+ if (!message && !(context = narrow_context(context, mess->yiaddr, netid)))
message = _("wrong network");
if (!message)
@@ -434,6 +434,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name,
if (hostname)
lease_set_hostname(lease, hostname, daemon->domain_suffix, 1);
lease_set_expires(lease, 0xffffffff, now); /* infinite lease */
+ lease_set_interface(lease, int_index);
clear_packet(mess, end);
do_options(context, mess, end, NULL,
@@ -529,8 +530,14 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name,
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;
+ if (new && !have_config(new, CONFIG_CLID) && !have_config(new, CONFIG_HWADDR))
+ {
+ config = new;
+ /* set "known" tag for known hosts */
+ known_id.net = "known";
+ known_id.next = netid;
+ netid = &known_id;
+ }
}
}
}
@@ -573,6 +580,15 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name,
mopt = OPTION_VENDOR_ID;
else if (vendor->match_type == MATCH_USER)
mopt = OPTION_USER_CLASS;
+ else if (vendor->match_type == MATCH_OPTION)
+ {
+ if (option_find(mess, sz, vendor->option, 1))
+ {
+ vendor->netid.next = netid;
+ netid = &vendor->netid;
+ }
+ continue;
+ }
else
continue;
@@ -651,7 +667,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name,
return 0;
case DHCPRELEASE:
- if (!(context = narrow_context(context, mess->ciaddr)) ||
+ if (!(context = narrow_context(context, mess->ciaddr, netid)) ||
!(opt = option_find(mess, sz, OPTION_SERVER_IDENTIFIER, INADDRSZ)) ||
(context->local.s_addr != option_addr(opt).s_addr))
return 0;
@@ -709,9 +725,9 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name,
if (conf.s_addr)
mess->yiaddr = conf;
- else if (lease && address_available(context, lease->addr))
+ else if (lease && address_available(context, lease->addr, netid))
mess->yiaddr = lease->addr;
- else if (opt && address_available(context, addr) && !lease_find_by_addr(addr) &&
+ else if (opt && address_available(context, addr, netid) && !lease_find_by_addr(addr) &&
!config_find_by_address(daemon->dhcp_conf, addr))
mess->yiaddr = addr;
else if (emac_len == 0)
@@ -722,7 +738,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name,
log_packet("DISCOVER", opt ? option_ptr(opt) : NULL, emac, emac_len, iface_name, message);
- if (message || !(context = narrow_context(context, mess->yiaddr)))
+ if (message || !(context = narrow_context(context, mess->yiaddr, netid)))
return 0;
log_packet("OFFER" , &mess->yiaddr, emac, emac_len, iface_name, NULL);
@@ -733,7 +749,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name,
netid = &context->netid;
}
- time = calc_time(context, config, lease, option_find(mess, sz, OPTION_LEASE_TIME, 4), now);
+ time = calc_time(context, config, option_find(mess, sz, OPTION_LEASE_TIME, 4));
clear_packet(mess, end);
option_put(mess, end, OPTION_MESSAGE_TYPE, 1, DHCPOFFER);
option_put(mess, end, OPTION_SERVER_IDENTIFIER, INADDRSZ, ntohl(context->local.s_addr));
@@ -786,7 +802,12 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name,
return 0;
if (lease && lease->addr.s_addr != mess->yiaddr.s_addr)
- message = _("wrong address");
+ {
+ message = _("wrong address");
+ /* avoid loops when client brain-dead */
+ lease_prune(lease, now);
+ lease = NULL;
+ }
}
}
else
@@ -820,7 +841,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name,
if (context->router.s_addr == config->addr.s_addr)
break;
- if (!(context = narrow_context(context, mess->yiaddr)))
+ if (!(context = narrow_context(context, mess->yiaddr, netid)))
{
/* If a machine moves networks whilst it has a lease, we catch that here. */
message = _("wrong network");
@@ -829,7 +850,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name,
}
/* Check for renewal of a lease which is outside the allowed range. */
- else if (!address_available(context, mess->yiaddr) &&
+ else if (!address_available(context, mess->yiaddr, netid) &&
(!have_config(config, CONFIG_ADDR) || config->addr.s_addr != mess->yiaddr.s_addr))
message = _("address not available");
@@ -929,7 +950,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name,
netid = &context->netid;
}
- time = calc_time(context, config, NULL, option_find(mess, sz, OPTION_LEASE_TIME, 4), now);
+ time = calc_time(context, config, option_find(mess, sz, OPTION_LEASE_TIME, 4));
lease_set_hwaddr(lease, mess->chaddr, clid, mess->hlen, mess->htype, clid_len);
/* if all the netids in the ignore_name list are present, ignore client-supplied name */
@@ -945,7 +966,8 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name,
lease_set_hostname(lease, hostname, daemon->domain_suffix, hostname_auth);
lease_set_expires(lease, time, now);
-
+ lease_set_interface(lease, int_index);
+
log_packet("ACK", &mess->yiaddr, emac, emac_len, iface_name, hostname);
clear_packet(mess, end);
@@ -972,7 +994,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name,
log_packet("INFORM", &mess->ciaddr, emac, emac_len, iface_name, message);
if (message || mess->ciaddr.s_addr == 0 ||
- !(context = narrow_context(context, mess->ciaddr)))
+ !(context = narrow_context(context, mess->ciaddr, netid)))
return 0;
/* Find a least based on IP address if we didn't
@@ -1004,7 +1026,9 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name,
else
time = (unsigned int)difftime(lease->expires, now);
option_put(mess, end, OPTION_LEASE_TIME, 4, time);
+ lease_set_interface(lease, int_index);
}
+
do_options(context, mess, end, req_options, hostname,
netid, subnet_addr, fqdn_flags, borken_opt, agent_id);
@@ -1050,8 +1074,7 @@ static unsigned char *extended_hwaddr(int hwtype, int hwlen, unsigned char *hwad
return hwaddr;
}
-static unsigned int calc_time(struct dhcp_context *context, struct dhcp_config *config,
- struct dhcp_lease *lease, unsigned char *opt, time_t now)
+static unsigned int calc_time(struct dhcp_context *context, struct dhcp_config *config, unsigned char *opt)
{
unsigned int time = have_config(config, CONFIG_TIME) ? config->lease_time : context->lease_time;
@@ -1063,17 +1086,6 @@ static unsigned int calc_time(struct dhcp_context *context, struct dhcp_config *
if (time == 0xffffffff || (req_time != 0xffffffff && req_time < time))
time = req_time;
}
- else if (lease && lease->expires != 0 && difftime(lease->expires, now) > 0.0)
- {
- unsigned int lease_time = (unsigned int)difftime(lease->expires, now);
-
- /* put a floor on lease-remaining time. */
- if (lease_time < 360 )
- lease_time = 360;
-
- if (time > lease_time)
- time = lease_time;
- }
return time;
}
@@ -1093,7 +1105,7 @@ static int sanitise(unsigned char *opt, char *buf)
for (i = option_len(opt); i > 0; i--)
{
char c = *p++;
- if (isprint(c))
+ if (isprint((int)c))
*buf++ = c;
}
*buf = 0; /* add terminator */
@@ -1236,6 +1248,7 @@ static size_t dhcp_packet_size(struct dhcp_packet *mess, struct dhcp_netid *neti
unsigned char *p = dhcp_skip_opts(&mess->options[0] + sizeof(u32));
unsigned char *overload;
size_t ret;
+ struct dhcp_netid_list *id_list;
/* We do logging too */
if (netid && (daemon->options & OPT_LOG_OPTS))
@@ -1270,9 +1283,14 @@ static size_t dhcp_packet_size(struct dhcp_packet *mess, struct dhcp_netid *neti
}
*p++ = OPTION_END;
+
if (daemon->options & OPT_LOG_OPTS)
log_options(&mess->options[0] + sizeof(u32));
+ for (id_list = daemon->force_broadcast; id_list; id_list = id_list->next)
+ if (match_netid(id_list->list, netid, 0))
+ mess->flags |= htons(0x8000); /* force broadcast */
+
ret = (size_t)(p - (unsigned char *)mess);
if (ret < MIN_PACKETSZ)
@@ -1468,6 +1486,7 @@ static void do_options(struct dhcp_context *context,
unsigned char *p, *end = agent_id ? agent_id : real_end;
int i, len, force_encap = 0;
unsigned char f0 = 0, s0 = 0;
+ int done_file = 0, done_server = 0;
/* logging */
if ((daemon->options & OPT_LOG_OPTS) && req_options)
@@ -1476,12 +1495,12 @@ static void do_options(struct dhcp_context *context,
for (i = 0; req_options[i] != OPTION_END; i++)
{
char *s = option_string(req_options[i]);
- q +=snprintf(q, MAXDNAME - (q - daemon->namebuff),
- "%d%s%s%s",
- req_options[i],
- s ? ":" : "",
- s ? s : "",
- req_options[i+1] == OPTION_END ? "" : ", ");
+ q += snprintf(q, MAXDNAME - (q - daemon->namebuff),
+ "%d%s%s%s",
+ req_options[i],
+ s ? ":" : "",
+ s ? s : "",
+ req_options[i+1] == OPTION_END ? "" : ", ");
if (req_options[i+1] == OPTION_END || (q - daemon->namebuff) > 40)
{
q = daemon->namebuff;
@@ -1504,33 +1523,30 @@ static void do_options(struct dhcp_context *context,
/* See if we can send the boot stuff as options.
To do this we need a requested option list, BOOTP
- and very old DHCP clients won't have this.
+ and very old DHCP clients won't have this, we also
+ provide an manual option to disable it.
Some PXE ROMs have bugs (surprise!) and need zero-terminated
names, so we always send those. */
if (boot)
{
if (boot->sname)
- {
- if (req_options && in_list(req_options, OPTION_SNAME))
+ {
+ if (!(daemon->options & OPT_NO_OVERRIDE) &&
+ req_options &&
+ in_list(req_options, OPTION_SNAME))
option_put_string(mess, end, OPTION_SNAME, boot->sname, 1);
else
- {
- if (daemon->options & OPT_LOG_OPTS)
- my_syslog(LOG_INFO, _("server name: %s"), boot->sname);
- strncpy((char *)mess->sname, boot->sname, sizeof(mess->sname)-1);
- }
+ strncpy((char *)mess->sname, boot->sname, sizeof(mess->sname)-1);
}
if (boot->file)
{
- if (req_options && in_list(req_options, OPTION_FILENAME))
+ if (!(daemon->options & OPT_NO_OVERRIDE) &&
+ req_options &&
+ in_list(req_options, OPTION_FILENAME))
option_put_string(mess, end, OPTION_FILENAME, boot->file, 1);
else
- {
- if (daemon->options & OPT_LOG_OPTS)
- my_syslog(LOG_INFO, _("bootfile name: %s"), boot->file);
- strncpy((char *)mess->file, boot->file, sizeof(mess->file)-1);
- }
+ strncpy((char *)mess->file, boot->file, sizeof(mess->file)-1);
}
if (boot->next_server.s_addr)
@@ -1539,12 +1555,39 @@ static void do_options(struct dhcp_context *context,
if (daemon->options & OPT_LOG_OPTS)
my_syslog(LOG_INFO, _("next server: %s"), inet_ntoa(mess->siaddr));
}
+ else
+ /* Use the values of the relevant options if no dhcp-boot given and
+ they're no explicitly asked for as options. */
+ {
+ if ((!req_options || !in_list(req_options, OPTION_FILENAME)) &&
+ (opt = option_find2(netid, config_opts, OPTION_FILENAME)))
+ {
+ strncpy((char *)mess->file, (char *)opt->val, sizeof(mess->file)-1);
+ done_file = 1;
+ }
+
+ if ((!req_options || !in_list(req_options, OPTION_SNAME)) &&
+ (opt = option_find2(netid, config_opts, OPTION_SNAME)))
+ {
+ strncpy((char *)mess->sname, (char *)opt->val, sizeof(mess->sname)-1);
+ done_server = 1;
+ }
+ }
+ if (daemon->options & OPT_LOG_OPTS)
+ {
+ if (strlen((char *)mess->file) != 0)
+ my_syslog(LOG_INFO, _("bootfile name: %s"), (char *)mess->file);
+
+ if (strlen((char *)mess->sname) != 0)
+ my_syslog(LOG_INFO, _("server name: %s"), (char *)mess->sname);
+ }
+
/* We don't want to do option-overload for BOOTP, so make the file and sname
fields look like they are in use, even when they aren't. This gets restored
at the end of this function. */
- if (!req_options)
+ if (!req_options || (daemon->options & OPT_NO_OVERRIDE))
{
f0 = mess->file[0];
mess->file[0] = 1;
@@ -1585,12 +1628,11 @@ static void do_options(struct dhcp_context *context,
!option_find2(netid, config_opts, OPTION_DOMAINNAME))
option_put_string(mess, 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
- --dhc-option=81,<name> */
+ /* Note that we ignore attempts to set the fqdn using --dhc-option=81,<name> */
if (hostname)
{
- if (in_list(req_options, OPTION_HOSTNAME))
+ if (in_list(req_options, OPTION_HOSTNAME) &&
+ !option_find2(netid, config_opts, OPTION_HOSTNAME))
option_put_string(mess, end, OPTION_HOSTNAME, hostname, null_term);
if (fqdn_flags != 0)
@@ -1636,41 +1678,54 @@ static void do_options(struct dhcp_context *context,
for (opt = config_opts; opt; opt = opt->next)
{
+ int optno = opt->opt;
+
/* was it asked for, or are we sending it anyway? */
- if (!(opt->flags & DHOPT_FORCE) && !in_list(req_options, opt->opt))
+ if (!(opt->flags & DHOPT_FORCE) && !in_list(req_options, optno))
continue;
/* prohibit some used-internally options */
- if (opt->opt == OPTION_HOSTNAME ||
- opt->opt == OPTION_CLIENT_FQDN ||
- opt->opt == OPTION_MAXMESSAGE ||
- opt->opt == OPTION_OVERLOAD ||
- opt->opt == OPTION_PAD ||
- opt->opt == OPTION_END)
+ if (optno == OPTION_CLIENT_FQDN ||
+ optno == OPTION_MAXMESSAGE ||
+ optno == OPTION_OVERLOAD ||
+ optno == OPTION_PAD ||
+ optno == OPTION_END)
+ continue;
+
+ if (optno == OPTION_SNAME && done_server)
+ continue;
+
+ if (optno == OPTION_FILENAME && done_file)
continue;
/* netids match and not encapsulated? */
- if (opt != option_find2(netid, config_opts, opt->opt))
+ if (opt != option_find2(netid, config_opts, optno))
continue;
/* For the options we have default values on
dhc-option=<optionno> means "don't include this option"
not "include a zero-length option" */
if (opt->len == 0 &&
- (opt->opt == OPTION_NETMASK ||
- opt->opt == OPTION_BROADCAST ||
- opt->opt == OPTION_ROUTER ||
- opt->opt == OPTION_DNSSERVER))
+ (optno == OPTION_NETMASK ||
+ optno == OPTION_BROADCAST ||
+ optno == OPTION_ROUTER ||
+ optno == OPTION_DNSSERVER ||
+ optno == OPTION_DOMAINNAME ||
+ optno == OPTION_HOSTNAME))
continue;
+
+ /* always force null-term for filename ans servername - buggy PXE again. */
+ len = do_opt(opt, NULL, context->local,
+ (optno == OPTION_SNAME || optno == OPTION_FILENAME) ? 1 : null_term);
- len = do_opt(opt, NULL, context->local, null_term);
- if ((p = free_space(mess, end, opt->opt, len)))
+ if ((p = free_space(mess, end, optno, len)))
{
- do_opt(opt, p, context->local, null_term);
-
+ do_opt(opt, p, context->local,
+ (optno == OPTION_SNAME || optno == OPTION_FILENAME) ? 1 : null_term);
+
/* If we send a vendor-id, revisit which vendor-ops we consider
it appropriate to send. */
- if (opt->opt == OPTION_VENDOR_ID)
+ if (optno == OPTION_VENDOR_ID)
match_vendor_opts(p - 2, config_opts);
}
}
@@ -1738,7 +1793,7 @@ static void do_options(struct dhcp_context *context,
}
/* restore BOOTP anti-overload hack */
- if (!req_options)
+ if (!req_options || (daemon->options & OPT_NO_OVERRIDE))
{
mess->file[0] = f0;
mess->sname[0] = s0;
diff --git a/src/tftp.c b/src/tftp.c
index 5a80ceb..071806e 100644
--- a/src/tftp.c
+++ b/src/tftp.c
@@ -2,12 +2,16 @@
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; version 2 dated June, 1991.
-
+ the Free Software Foundation; version 2 dated June, 1991, or
+ (at your option) version 3 dated 29 June, 2007.
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "dnsmasq.h"
@@ -47,11 +51,17 @@ void tftp_request(struct listener *listen, time_t now)
int is_err = 1, if_index = 0;
struct iname *tmp;
struct tftp_transfer *transfer;
-
+ int port = daemon->start_tftp_port; /* may be zero to use ephemeral port */
+#if defined(IP_MTU_DISCOVER) && defined(IP_PMTUDISC_DONT)
+ int mtu = IP_PMTUDISC_DONT;
+#endif
+
union {
struct cmsghdr align; /* this ensures alignment */
-#ifdef HAVE_LINUX_NETWORK
+#if defined(HAVE_LINUX_NETWORK)
char control[CMSG_SPACE(sizeof(struct in_pktinfo))];
+#elif defined(HAVE_SOLARIS_NETWORK)
+ char control[CMSG_SPACE(sizeof(unsigned int))];
#else
char control[CMSG_SPACE(sizeof(struct sockaddr_dl))];
#endif
@@ -96,7 +106,11 @@ void tftp_request(struct listener *listen, time_t now)
if (cmptr->cmsg_level == IPPROTO_IP && cmptr->cmsg_type == IP_RECVDSTADDR)
addr.sin_addr = *((struct in_addr *)CMSG_DATA(cmptr));
else if (cmptr->cmsg_level == IPPROTO_IP && cmptr->cmsg_type == IP_RECVIF)
- if_index = ((struct sockaddr_dl *)CMSG_DATA(cmptr))->sdl_index;
+#ifdef HAVE_SOLARIS_NETWORK
+ if_index = *((unsigned int *)CMSG_DATA(cmptr));
+#else
+ if_index = ((struct sockaddr_dl *)CMSG_DATA(cmptr))->sdl_index;
+#endif
if (if_index == 0 || !if_indextoname(if_index, ifr.ifr_name))
return;
@@ -117,8 +131,7 @@ void tftp_request(struct listener *listen, time_t now)
}
- /* tell kernel to use ephemeral port */
- addr.sin_port = 0;
+ addr.sin_port = htons(port);
addr.sin_family = AF_INET;
#ifdef HAVE_SOCKADDR_SA_LEN
addr.sin_len = sizeof(addr);
@@ -141,13 +154,30 @@ void tftp_request(struct listener *listen, time_t now)
transfer->file = NULL;
transfer->opt_blocksize = transfer->opt_transize = 0;
- if (bind(transfer->sockfd, (struct sockaddr *)&addr, sizeof(addr)) == -1 ||
- !fix_fd(transfer->sockfd))
+ /* if we have a nailed-down range, iterate until we find a free one. */
+ while (1)
{
- free_transfer(transfer);
- return;
+ if (bind(transfer->sockfd, (struct sockaddr *)&addr, sizeof(addr)) == -1 ||
+#if defined(IP_MTU_DISCOVER) && defined(IP_PMTUDISC_DONT)
+ setsockopt(transfer->sockfd, SOL_IP, IP_MTU_DISCOVER, &mtu, sizeof(mtu)) == -1 ||
+#endif
+ !fix_fd(transfer->sockfd))
+ {
+ if (errno == EADDRINUSE && daemon->start_tftp_port != 0)
+ {
+ if (++port <= daemon->end_tftp_port)
+ {
+ addr.sin_port = htons(port);
+ continue;
+ }
+ my_syslog(LOG_ERR, _("unable to get free port for TFTP"));
+ }
+ free_transfer(transfer);
+ return;
+ }
+ break;
}
-
+
p = packet + 2;
end = packet + len;
@@ -362,7 +392,7 @@ void check_tftp_listeners(fd_set *rset, time_t now)
{
char *q, *r;
for (q = r = err; *r; r++)
- if (isprint(*r))
+ if (isprint((int)*r))
*(q++) = *r;
*q = 0;
}
diff --git a/src/util.c b/src/util.c
index f741e7b..2f5d493 100644
--- a/src/util.c
+++ b/src/util.c
@@ -1,16 +1,19 @@
-/* dnsmasq is Copyright (c) 2000 - 2005 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2007 Simon Kelley
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; version 2 dated June, 1991.
-
+ the Free Software Foundation; version 2 dated June, 1991, or
+ (at your option) version 3 dated 29 June, 2007.
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-
/* Some code in this file contributed by Rob Funk. */
#include "dnsmasq.h"
@@ -344,7 +347,7 @@ int expand_buf(struct iovec *iov, size_t size)
{
void *new;
- if (size <= iov->iov_len)
+ if (size <= (size_t)iov->iov_len)
return 1;
if (!(new = whine_malloc(size)))